pax_global_header00006660000000000000000000000064135673752340014531gustar00rootroot0000000000000052 comment=804f72b31a7fabb9f8a484e2ada296c2a75628e0 kitty-0.15.0/000077500000000000000000000000001356737523400127605ustar00rootroot00000000000000kitty-0.15.0/.circleci/000077500000000000000000000000001356737523400146135ustar00rootroot00000000000000kitty-0.15.0/.circleci/config.yml000066400000000000000000000062641356737523400166130ustar00rootroot00000000000000version: 2 jobs: lin-sys: docker: - image: kovidgoyal/kitty-test:latest steps: - checkout - run: if grep -Inr '\s$' kitty kitty_tests kittens docs *.py *.asciidoc *.rst .gitattributes .gitignore; then echo Trailing whitespace found, aborting.; exit 1; fi - run: python3 -m flake8 --count . - run: python3 setup.py build --debug --verbose - run: ./kitty/launcher/kitty +launch test.py - run: make FAIL_WARN=-W man - run: make FAIL_WARN=-W html lin-package: docker: - image: kovidgoyal/kitty-test:latest steps: - checkout - run: python3 setup.py linux-package --update-check-interval=0 lin-35: docker: - image: kovidgoyal/kitty-test:latest environment: CC: gcc CFLAGS: -funsigned-char LD_LIBRARY_PATH: /opt/py3.5/lib ASAN_OPTIONS: leak_check_at_exit=0 steps: - checkout - run: /opt/py3.5/bin/python3 setup.py build --debug --verbose --sanitize - run: ./kitty/launcher/kitty +launch test.py lin-37: docker: - image: kovidgoyal/kitty-test:latest environment: CC: clang LD_LIBRARY_PATH: /opt/py3.7/lib ASAN_OPTIONS: leak_check_at_exit=0 steps: - checkout - run: /opt/py3.7/bin/python3 setup.py build --debug --verbose --sanitize - run: ./kitty/launcher/kitty +launch test.py lin-bundle: docker: - image: kovidgoyal/kitty-test:latest environment: ASAN_OPTIONS: leak_check_at_exit=0 steps: - checkout - run: echo "export LD_LIBRARY_PATH=$SW/lib" >> $BASH_ENV - run: echo "export PKG_CONFIG_PATH=$SW/lib/pkgconfig" >> $BASH_ENV - run: echo "export PYTHONHOME=$SW" >> $BASH_ENV - run: $SW/bin/python3 setup.py build --debug --verbose - run: ./kitty/launcher/kitty +launch test.py mac-bundle: macos: xcode: "10.1.0" environment: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 SW: /Users/Shared/buildbot/sw/sw steps: - checkout - run: mkdir -p $SW - run: curl https://download.calibre-ebook.com/travis/kitty/osx.tar.xz | tar xJ -C $SW - run: echo "export PATH=$SW/bin:$PATH" >> $BASH_ENV - run: python3 setup.py build --debug --verbose - run: ./kitty/launcher/kitty +launch test.py mac-brew: macos: xcode: "10.2.0" environment: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 steps: - checkout - run: brew bundle - run: python3 setup.py build --debug --verbose - run: ./kitty/launcher/kitty +launch test.py - run: echo "export PATH=/usr/local/opt/sphinx-doc/bin:$PATH" >> $BASH_ENV - run: python3 setup.py linux-package --verbose - run: python3 setup.py kitty.app --verbose - run: kitty.app/Contents/MacOS/kitty +runpy "from kitty.constants import *; print(kitty_exe())" workflows: version: 2 all_jobs: jobs: - mac-bundle - lin-sys - lin-35 - lin-37 - lin-package - lin-bundle - mac-brew kitty-0.15.0/.circleci/images/000077500000000000000000000000001356737523400160605ustar00rootroot00000000000000kitty-0.15.0/.circleci/images/Dockerfile000066400000000000000000000045431356737523400200600ustar00rootroot00000000000000# When changing this file, go to # https://cloud.docker.com/repository/docker/kovidgoyal/kitty-test/builds and # click the "Trigger" button under Automated builds to rebuild FROM ubuntu:latest # make Apt non-interactive ENV DEBIAN_FRONTEND=noninteractive RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/90circleci \ && echo 'DPkg::Options "--force-confnew";' >> /etc/apt/apt.conf.d/90circleci \ && echo 'Acquire::Languages "none";' >> /etc/apt/apt.conf.d/90circleci # System setup RUN apt-get update && mkdir -p /usr/share/man/man1 && apt-get install -y python3-flake8 python3-pip python3-pil clang git apt locales sudo openssh-client ca-certificates tar gzip parallel net-tools netcat unzip zip bzip2 gnupg curl wget build-essential apt-utils # Setup circleci user RUN groupadd --gid 3434 circleci \ && useradd --uid 3434 --gid circleci --shell /bin/bash --create-home circleci \ && echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci \ && echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep \ && echo 'Defaults env_keep += "SW"' >> /etc/sudoers.d/env_keep \ && echo 'Defaults env_keep += "LANG"' >> /etc/sudoers.d/env_keep # Set timezone to UTC by default RUN ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime # Use unicode RUN locale-gen en_US.UTF-8 || true ENV LANG=en_US.UTF-8 # Deps needed for building python RUN apt-get install -y libreadline-dev zlib1g-dev libssl-dev libbz2-dev libsqlite3-dev libffi-dev # kitty deps RUN apt-get install -y libgl1-mesa-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-dev libxcb-xkb-dev libdbus-1-dev libxkbcommon-dev libharfbuzz-dev libpng-dev libfontconfig-dev libpython3-dev libxkbcommon-x11-dev python3-pygments libcanberra-dev # Needed to build kitty docs RUN pip3 install sphinx # Install multiple pythons ADD install-python.py /tmp/install-python.py RUN python3 /tmp/install-python.py py3.5 https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tar.xz RUN python3 /tmp/install-python.py py3.7 https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz # Install kitty bundle ENV SW=/home/circleci/sw RUN python3 /tmp/install-python.py bundle https://download.calibre-ebook.com/travis/kitty/linux-64.tar.xz RUN echo SW=$SW >> /etc/environment # Clean unused files RUN apt-get clean -y USER circleci LABEL com.circleci.preserve-entrypoint=true ENTRYPOINT sleep 2h kitty-0.15.0/.circleci/images/install-python.py000066400000000000000000000027301356737523400214210ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal import io import os import shlex import shutil import subprocess import sys import tarfile from urllib.request import urlopen PY, URL = sys.argv[1], sys.argv[2] if PY == 'bundle': SW = os.environ['SW'] os.mkdir(SW) os.chdir(SW) else: os.chdir('/usr/src') def run(cmd): cmd = shlex.split(cmd) p = subprocess.Popen(cmd) if p.wait() != 0: raise SystemExit(p.returncode) with urlopen(URL) as f: data = f.read() with tarfile.open(fileobj=io.BytesIO(data), mode='r:xz') as tf: tf.extractall() def replace_in_file(path, src, dest): with open(path, 'r+') as f: n = f.read().replace(src, dest) f.seek(0), f.truncate() f.write(n) if PY == 'bundle': replaced = 0 for dirpath, dirnames, filenames in os.walk(SW): for f in filenames: if f.endswith('.pc') or (f.endswith('.py') and f.startswith('_sysconfig')): replace_in_file(os.path.join(dirpath, f), '/sw/sw', SW) replaced += 1 if replaced < 2: raise SystemExit('Failed to replace path to SW in bundle') else: src = os.path.abspath(tuple(os.listdir('.'))[0]) os.chdir(src) run(f'./configure --prefix=/opt/{PY} --enable-shared --with-system-expat --without-ensurepip') run(f'make -j {os.cpu_count()}') run('make install') os.chdir('/') shutil.rmtree(src) kitty-0.15.0/.gitattributes000066400000000000000000000010451356737523400156530ustar00rootroot00000000000000kitty/wcwidth-std.h linguist-generated=true kitty/emoji.h linguist-generated=true kitty/keys.h linguist-generated=true kitty/charsets.c linguist-generated=true kitty/key_encoding.py linguist-generated=true kitty/unicode-data.c linguist-generated=true kitty/rgb.py linguist-generated=true kitty/gl-wrapper.* linguist-generated=true kitty/glfw-wrapper.* linguist-generated=true kitty/parse-graphics-command.h linguist-generated=true glfw/*.c linguist-vendored=true glfw/*.h linguist-vendored=true kittens/unicode_input/names.h linguist-generated=true kitty-0.15.0/.github/000077500000000000000000000000001356737523400143205ustar00rootroot00000000000000kitty-0.15.0/.github/FUNDING.yml000066400000000000000000000001371356737523400161360ustar00rootroot00000000000000patreon: kovidgoyal liberapay: kovidgoyal custom: https://sw.kovidgoyal.net/kitty/support.html kitty-0.15.0/.gitignore000066400000000000000000000003461356737523400147530ustar00rootroot00000000000000*.so *.pyc *.pyo /tags /build/ /linux-package/ /kitty.app/ /compile_commands.json /link_commands.json /glad/out/ /kitty/launcher/ /*.dSYM/ __pycache__/ /glfw/wayland-*-client-protocol.[ch] /docs/_build/ /docs/generated/ .DS_Store kitty-0.15.0/.ignore000066400000000000000000000000361356737523400142430ustar00rootroot00000000000000kittens/unicode_input/names.h kitty-0.15.0/Brewfile000066400000000000000000000001251356737523400144400ustar00rootroot00000000000000brew 'pkg-config' brew 'imagemagick' brew 'harfbuzz' brew 'python' brew 'sphinx-doc' kitty-0.15.0/CHANGELOG.rst000066400000000000000000000000631356737523400150000ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/changelog.html kitty-0.15.0/CONTRIBUTING.md000066400000000000000000000017071356737523400152160ustar00rootroot00000000000000### Reporting bugs Please first search existing bug reports (especially closed ones) for a report that matches your issue. When reporting a bug, provide full details of your environment, that means, at a minimum, kitty version, OS and OS version, kitty config (ideally a minimal config to reproduce the issue with). ### Contributing code Install [the dependencies](https://sw.kovidgoyal.net/kitty/build.html#dependencies) using your favorite package manager. Build and run kitty [from source](https://sw.kovidgoyal.net/kitty/build.html#install-and-run-from-source). Make a fork, submit your Pull Request. If it's a large/controversial change, open an issue beforehand to discuss it, so that you don't waste your time making a pull request that gets rejected. If the code you are submitting is reasonably easily testable, please contribute tests as well (see the `kitty_tests/` sub-directory for existing tests, which can be run with `./test.py`). That's it. kitty-0.15.0/INSTALL.md000066400000000000000000000002141356737523400144050ustar00rootroot00000000000000To build from source: https://sw.kovidgoyal.net/kitty/build.html Pre-built binaries: https://sw.kovidgoyal.net/kitty/binary.html kitty-0.15.0/LICENSE000066400000000000000000001045171356737523400137750ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . kitty-0.15.0/Makefile000066400000000000000000000012751356737523400144250ustar00rootroot00000000000000ifdef V VVAL=--verbose endif ifdef VERBOSE VVAL=--verbose endif all: python3 setup.py $(VVAL) test: python3 setup.py $(VVAL) test clean: python3 setup.py $(VVAL) clean # A debug build debug: python3 setup.py build $(VVAL) --debug debug-event-loop: python3 setup.py build $(VVAL) --debug --extra-logging=event-loop # Build with the ASAN and UBSAN sanitizers asan: python3 setup.py build $(VVAL) --debug --sanitize profile: python3 setup.py build $(VVAL) --profile app: python3 setup.py kitty.app $(VVAL) man: $(MAKE) FAIL_WARN=$(FAIL_WARN) -C docs man html: $(MAKE) FAIL_WARN=$(FAIL_WARN) -C docs html linkcheck: $(MAKE) FAIL_WARN=$(FAIL_WARN) -C docs linkcheck docs: man html kitty-0.15.0/README.asciidoc000066400000000000000000000003421356737523400154140ustar00rootroot00000000000000= kitty - the fast, featureful, GPU based, terminal emulator See https://sw.kovidgoyal.net/kitty/ image:https://circleci.com/gh/kovidgoyal/kitty.svg?style=svg["Build status", link="https://circleci.com/gh/kovidgoyal/kitty"] kitty-0.15.0/__main__.py000066400000000000000000000061261356737523400150570ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2015, Kovid Goyal import sys import os def icat(args): from kittens.runner import run_kitten sys.argv = args run_kitten('icat') def list_fonts(args): from kitty.fonts.list import main main(args) def remote_control(args): from kitty.remote_control import main main(args) def runpy(args): sys.argv = ['kitty'] + args[2:] exec(args[1]) def hold(args): import subprocess ret = subprocess.Popen(args[1:]).wait() sys.stdin.read() raise SystemExit(ret) def complete(args): from kitty.complete import main main(args[1:], entry_points, namespaced_entry_points) def launch(args): import runpy sys.argv = args[1:] exe = args[1] if exe.startswith(':'): import shutil exe = shutil.which(exe[1:]) if not exe: raise SystemExit('{} not found in PATH'.format(args[1][1:])) runpy.run_path(exe, run_name='__main__') def run_kitten(args): try: kitten = args[1] except IndexError: from kittens.runner import list_kittens list_kittens() raise SystemExit(1) sys.argv = args[1:] from kittens.runner import run_kitten run_kitten(kitten) def namespaced(args): func = namespaced_entry_points[args[1]] func(args[1:]) entry_points = { # These two are here for backwards compat 'icat': icat, 'list-fonts': list_fonts, 'runpy': runpy, 'launch': launch, 'kitten': run_kitten, '@': remote_control, '+': namespaced, } namespaced_entry_points = {k: v for k, v in entry_points.items() if k[0] not in '+@'} namespaced_entry_points['hold'] = hold namespaced_entry_points['complete'] = complete def setup_openssl_environment(): # Workaround for Linux distros that have still failed to get their heads # out of their asses and implement a common location for SSL certificates. # It's not that hard people, there exists a wonderful tool called the symlink # See https://www.mobileread.com/forums/showthread.php?t=256095 if 'SSL_CERT_FILE' not in os.environ and 'SSL_CERT_DIR' not in os.environ: if os.access('/etc/pki/tls/certs/ca-bundle.crt', os.R_OK): os.environ['SSL_CERT_FILE'] = '/etc/pki/tls/certs/ca-bundle.crt' sys.kitty_ssl_env_var = 'SSL_CERT_FILE' elif os.path.isdir('/etc/ssl/certs'): os.environ['SSL_CERT_DIR'] = '/etc/ssl/certs' sys.kitty_ssl_env_var = 'SSL_CERT_DIR' def main(): if getattr(sys, 'frozen', False) and 'darwin' not in sys.platform.lower(): setup_openssl_environment() first_arg = '' if len(sys.argv) < 2 else sys.argv[1] func = entry_points.get(first_arg) if func is None: if first_arg.startswith('@'): remote_control(['@', first_arg[1:]] + sys.argv[2:]) elif first_arg.startswith('+'): namespaced(['+', first_arg[1:]] + sys.argv[2:]) else: from kitty.main import main main() else: func(sys.argv[1:]) if __name__ == '__main__': main() kitty-0.15.0/build-terminfo000077500000000000000000000030461356737523400156310ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2019, Kovid Goyal import glob import os import re import shutil import subprocess import sys import tempfile def compile_terminfo(base): with tempfile.TemporaryDirectory() as tdir: proc = subprocess.run(['tic', '-x', '-o' + tdir, 'terminfo/kitty.terminfo'], check=True, stderr=subprocess.PIPE) regex = '^"terminfo/kitty.terminfo", line [0-9]+, col [0-9]+, terminal \'xterm-kitty\': older tic versions may treat the description field as an alias$' for error in proc.stderr.decode('utf-8').splitlines(): if not re.match(regex, error): print(error, file=sys.stderr) tfiles = glob.glob(os.path.join(tdir, '*', 'xterm-kitty')) if not tfiles: raise SystemExit('tic failed to output the compiled kitty terminfo file') tfile = tfiles[0] directory, xterm_kitty = os.path.split(tfile) _, directory = os.path.split(directory) odir = os.path.join(base, directory) os.makedirs(odir, exist_ok=True) ofile = os.path.join(odir, xterm_kitty) shutil.move(tfile, ofile) def generate_terminfo(): base = os.path.dirname(os.path.abspath(__file__)) os.chdir(base) sys.path.insert(0, base) from kitty.terminfo import generate_terminfo with open('terminfo/kitty.terminfo', 'w') as f: f.write(generate_terminfo()) compile_terminfo(os.path.join(base, 'terminfo')) if __name__ == '__main__': generate_terminfo() kitty-0.15.0/count-lines-of-code000077500000000000000000000010441356737523400164570ustar00rootroot00000000000000#!/usr/bin/env python import subprocess files_to_exclude = '''\ kitty/wcwidth-std.h kitty/glfw.c kitty/keys.h kitty/charsets.c kitty/unicode-data.c kitty/key_encoding.py kitty/rgb.py kitty/gl.h kitty/gl-wrapper.h kitty/gl-wrapper.c kitty/glfw-wrapper.h kitty/glfw-wrapper.c kitty/emoji.h kittens/unicode_input/names.h kitty/parse-graphics-command.h ''' p = subprocess.Popen([ 'cloc', '--exclude-list-file', '/dev/stdin', 'kitty', 'kittens' ], stdin=subprocess.PIPE) p.communicate(files_to_exclude.encode('utf-8')) raise SystemExit(p.wait()) kitty-0.15.0/docs/000077500000000000000000000000001356737523400137105ustar00rootroot00000000000000kitty-0.15.0/docs/Makefile000066400000000000000000000011621356737523400153500ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = -j auto -T $(FAIL_WARN) SPHINXBUILD = sphinx-build SPHINXPROJ = kitty SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) kitty-0.15.0/docs/_static/000077500000000000000000000000001356737523400153365ustar00rootroot00000000000000kitty-0.15.0/docs/_static/custom.css000066400000000000000000000040531356737523400173640ustar00rootroot00000000000000/* * custom.css * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the MIT license. */ .float-left-img { float: left; margin-right: 1em; margin-bottom: 1em; } .float-right-img { float: right; margin-left: 1em; margin-bottom: 1em } .half-with-img { max-width: 50% } .fit-img { max-width: 95% } div.body p, div.body dd, div.body li, div.body blockquote { text-align: justify; } pre { white-space: pre-wrap; } pre.pre { white-space: pre; } a[href], input[type="submit"] { cursor: pointer; } img[style] { /* Used for :scale: images to have them render properly but still popup when clicked */ width: auto !important; height: auto !important; } a { text-decoration: none !important; border-bottom: none !important; } body div.document { margin-top: 1ex; } .major-features li { margin-top: 0.75ex; margin-bottom: 0.75ex; } .support-form input[type=submit] { border-radius: 6px; box-shadow: rgb(255, 246, 175) 0px 1px 0px 0px; background: linear-gradient(rgb(255, 236, 100) 5%, rgb(255, 171, 35) 100%) rgb(255, 236, 100); border: 1px solid rgb(255, 170, 34); display: inline-block; color: rgb(51, 51, 51); font-family: Arial; font-size: 15px; font-weight: bold; padding: 6px 24px; text-decoration: none; text-shadow: rgb(255, 238, 102) 0px 1px 0px; } .support-form input[type=submit]:hover { background: linear-gradient(rgb(255, 171, 35) 5%, rgb(255, 236, 100) 100%) rgb(255, 171, 35); } .support-form input[type=submit]:focus { outline: 0; } div.sphinxsidebar { font-size: inherit; line-height: inherit; max-height: 100%; overflow-y: auto; } #sidebartoc li { margin-top: 0.75ex; margin-bottom: 0.75ex; } #sidebartoc ul { list-style: none !important; } #sidebartoc a[href]:hover { color: red; } .green { color: green; } .cyan { color: blue; } .env { font-style: italic; } .italic { font-style: italic; } .bold { font-weight: bold; } .title { font-size: larger; font-weight: bold } kitty-0.15.0/docs/_templates/000077500000000000000000000000001356737523400160455ustar00rootroot00000000000000kitty-0.15.0/docs/_templates/layout.html000066400000000000000000000001711356737523400202470ustar00rootroot00000000000000{% extends "!layout.html" %} {%- block extrahead %} {{ super() }} {% endblock %} kitty-0.15.0/docs/_templates/localtoc.html000066400000000000000000000001361356737523400205330ustar00rootroot00000000000000{%- if display_toc %}
 
{{ toc }}
{%- endif %} kitty-0.15.0/docs/_templates/searchbox.html000066400000000000000000000014601356737523400207120ustar00rootroot00000000000000{# basic/searchbox.html ~~~~~~~~~~~~~~~~~~~~ Sphinx sidebar template: quick search box. :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- if pagename != "search" and builder != "singlehtml" %} {%- endif %} kitty-0.15.0/docs/_templates/support.html000066400000000000000000000004431356737523400204500ustar00rootroot00000000000000{% if pagename != "support" %}
{% endif %} kitty-0.15.0/docs/binary.rst000066400000000000000000000053411356737523400157310ustar00rootroot00000000000000kitty - Binary install ======================== .. |ins| replace:: curl -L :literal:`https://sw.kovidgoyal.net/kitty/installer.sh` | sh /dev/stdin .. highlight:: sh You can install pre-built binaries of |kitty| if you are on macOS or Linux using the following simple command: .. parsed-literal:: :class: pre |ins| The binaries will be installed in the standard location for your OS, :file:`/Applications/kitty.app` on macOS and :file:`~/.local/kitty.app` on Linux. The installer only touches files in that directory. To update kitty, simply re-run the command. Manually installing --------------------- If something goes wrong or you simply do not want to run the installer, you can manually download and install |kitty| from the `GitHub releases page `_. If you are on macOS, download the :file:`.dmg` and install as normal. If you are on Linux, download the tarball and extract it into a directory. The |kitty| executable will be in the :file:`bin` sub-directory. Desktop integration on Linux -------------------------------- If you want the kitty icon to appear in the taskbar and an entry for it to be present in the menus, you will need to install the :file:`kitty.desktop` file. The details of the following procedure may need to be adjusted for your particular desktop, but it should work for most major desktop environments. .. code-block:: sh # Create a symbolic link to add kitty to PATH (assuming ~/.local/bin is in # your PATH) ln -s ~/.local/kitty.app/bin/kitty ~/.local/bin/ # Place the kitty.desktop file somewhere it can be found by the OS cp ~/.local/kitty.app/share/applications/kitty.desktop ~/.local/share/applications # Update the path to the kitty icon in the kitty.desktop file sed -i "s/Icon\=kitty/Icon\=\/home\/$USER\/.local\/kitty.app\/share\/icons\/hicolor\/256x256\/apps\/kitty.png/g" ~/.local/share/applications/kitty.desktop Customizing the installation -------------------------------- * You can specify a different install location, with ``dest``: .. parsed-literal:: :class: pre |ins| \\ dest=/some/other/location * You can tell the installer not to launch |kitty| after installing it with ``launch=n``: .. parsed-literal:: :class: pre |ins| \\ launch=n * You can use a previously downloaded dmg/tarball, with ``installer``: .. parsed-literal:: :class: pre |ins| \\ installer=/path/to/dmg or tarball Uninstalling ---------------- All the installer does is copy the kitty files into the install directory. To uninstall, simply delete that directory. Building from source ------------------------ |kitty| is easy to build from source, follow the :doc:`instructions `. kitty-0.15.0/docs/build.rst000066400000000000000000000101141356737523400155360ustar00rootroot00000000000000Building kitty from source ============================== .. image:: https://circleci.com/gh/kovidgoyal/kitty.svg?style=svg :alt: Build status :target: https://circleci.com/gh/kovidgoyal/kitty |kitty| is designed to run from source, for easy hackability. Make sure the following dependencies are installed first. Dependencies ---------------- Run-time dependencies: * python >= 3.5 * harfbuzz >= 1.5.0 * zlib * libpng * freetype (not needed on macOS) * fontconfig (not needed on macOS) * libcanberra (not needed on macOS) * ImageMagick (optional, needed to use the ``kitty icat`` tool to display images in the terminal) * pygments (optional, need for syntax highlighting in ``kitty +kitten diff``) Build-time dependencies: * gcc or clang * pkg-config * For building on Linux in addition to the above dependencies you might also need to install the ``-dev`` packages for: ``libdbus-1-dev``, ``libxcursor-dev``, ``libxrandr-dev``, ``libxi-dev``, ``libxinerama-dev``, ``libgl1-mesa-dev``, ``libxkbcommon-x11-dev``, ``libfontconfig-dev``, and ``libpython-dev``, if they are not already installed by your distro. Install and run from source ------------------------------ .. code-block:: sh git clone https://github.com/kovidgoyal/kitty && cd kitty Now build the native code parts of |kitty| with the following command:: make You can run |kitty|, as:: ./kitty/launcher/kitty If that works, you can create a symlink to the launcher in :file:`~/bin` or some other directory on your PATH so that you can run |kitty| using just ``kitty``. Building kitty.app on macOS from source ------------------------------------------- Run:: make app This :file:`kitty.app` unlike the released one does not include its own copy of python and the other dependencies. So if you ever un-install/upgrade those dependencies you might have to rebuild the app. Note that the released :file:`kitty.dmg` includes all dependencies, unlike the :file:`kitty.app` built above and is built automatically by using the :file:`kitty` branch of `build-calibre `_ however, that is designed to run on Linux and is not for the faint of heart. Note for Linux/macOS packagers ---------------------------------- The released |kitty| source code is available as a `tarball`_ from `the GitHub releases page `_. While |kitty| does use python, it is not a traditional python package, so please do not install it in site-packages. Instead run:: python3 setup.py linux-package This will install |kitty| into the directory :file:`linux-package`. You can run |kitty| with :file:`linux-package/bin/kitty`. All the files needed to run kitty will be in :file:`linux-package/lib/kitty`. The terminfo file will be installed into :file:`linux-package/share/terminfo`. Simply copy these files into :file:`/usr` to install |kitty|. In other words, :file:`linux-package` is the staging area into which |kitty| is installed. You can choose a different staging area, by passing the ``--prefix`` argument to :file:`setup.py`. You should probably split |kitty| into two packages, :file:`kitty-terminfo` that installs the terminfo file and :file:`kitty` that installs the main program. This allows users to install the terminfo file on servers into which they ssh, without needing to install all of |kitty|. .. note:: You need a couple of extra dependencies to build linux-package. :file:`tic` to compile terminfo files, usually found in the development package of :file:`ncurses`. Also, if you are building from a git checkout instead of the released source code tarball, you will need :file:`sphinx-build` from the `Sphinx documentation generator `_. This applies to creating packages for |kitty| for macOS package managers such as brew or MacPorts as well. .. note:: |kitty| has its own update check mechanism, if you would like to turn it off for your package, use ``python3 setup.py linux-package --update-check-interval=0`` kitty-0.15.0/docs/changelog.rst000066400000000000000000001570301356737523400163770ustar00rootroot00000000000000Changelog ============== |kitty| is a feature full, cross-platform, *fast*, GPU based terminal emulator. To update |kitty|, :doc:`follow the instructions `. 0.15.0 [2019-11-27] -------------------- - Add a new action :ref:`detach_window ` that can be used to move the current window into a different tab (:iss:`1310`) - Add a new action :doc:`launch ` that unifies launching of processes in new kitty windows/tabs. - Add a new style ``powerline`` for tab bar rendering, see :opt:`tab_bar_style` (:pull:`2021`) - Allow changing colors by mapping a keyboard shortcut to read a kitty config file with color definitions. See the :doc:`FAQ ` for details (:iss:`2083`) - hints kitten: Allow completely customizing the matching and actions performed by the kitten using your own script (:iss:`2124`) - Wayland: Fix key repeat not being stopped when focus leaves window. This is expected behavior on Wayland, apparently (:iss:`2014`) - When drawing unicode symbols that are followed by spaces, use multiple cells to avoid resized or cut-off glyphs (:iss:`1452`) - diff kitten: Allow diffing remote files easily via ssh (:iss:`727`) - unicode input kitten: Add an option :option:`kitty +kitten unicode_input --emoji-variation` to control the presentation variant of selected emojis (:iss:`2139`) - Add specialised rendering for a few more box powerline and unicode symbols (:pull:`2074` and :pull:`2021`) - Add a new socket only mode for :opt:`allow_remote_control`. This makes it possible for programs running on the local machine to control kitty but not programs running over ssh. - hints kitten: Allow using named groups in the regular expression. The named groups are passed to the invoked program for further processing. - Fix a regression in 0.14.5 that caused rendering of private use glyphs with and without spaces to be identical (:iss:`2117`) - Wayland: Fix incorrect scale used when first creating an OS window (:iss:`2133`) - macOS: Disable mouse hiding by default as getting it to work robustly on Cocoa is too much effort (:iss:`2158`) 0.14.6 [2019-09-25] --------------------- - macOS: Fix a regression in the previous release that caused a crash when pressing a unprintable key, such as the POWER key (:iss:`1997`) - Fix a regression in the previous release that caused kitty to not always respond to DPI changes (:pull:`1999`) 0.14.5 [2019-09-23] --------------------- - Implement a hack to (mostly) preserve tabs when cat-ting a file with them and then copying the text or passing screen contents to another program (:iss:`1829`) - When all visible windows have the same background color, use that as the color for the global padding, instead of the configured background color (:iss:`1957`) - When resetting the terminal, also reset parser state, this allows easy recovery from incomplete escape codes (:iss:`1961`) - Allow mapping keys commonly found on European keyboards (:pull:`1928`) - Fix incorrect rendering of some symbols when followed by a space while using the PowerLine font which does not have a space glyph (:iss:`1225`) - Linux: Allow using fonts with spacing=90 in addition to fonts with spacing=100 (:iss:`1968`) - Use selection foreground color for underlines as well (:iss:`1982`) 0.14.4 [2019-08-31] --------------------- - hints kitten: Add a :option:`kitty +kitten hints --alphabet` option to control what alphabets are used for hints (:iss:`1879`) - hints kitten: Allow specifying :option:`kitty +kitten hints --program` multiple times to run multiple programs (:iss:`1879`) - Add a :opt:`kitten_alias` option that can be used to alias kitten invocation for brevity and to change kitten option defaults globally (:iss:`1879`) - macOS: Add an option :opt:`macos_show_window_title_in` to control showing the window title in the menubar/titlebar (:pull:`1837`) - macOS: Allow drag and drop of text from other applications into kitty (:pull:`1921`) - When running kittens, use the colorscheme of the current window rather than the configured colorscheme (:iss:`1906`) - Don't fail to start if running the shell to read the EDITOR env var fails (:iss:`1869`) - Disable the ``liga`` and ``dlig`` OpenType features for broken fonts such as Nimbus Mono. - Fix a regression that broke setting background_opacity via remote control (:iss:`1895`) - Fix piping PNG images into the icat kitten not working (:iss:`1920`) - When the OS returns a fallback font that does not actually contain glyphs for the text, do not exhaust the list of fallback fonts (:iss:`1918`) - Fix formatting attributes not reset across line boundaries when passing buffer as ANSI (:iss:`1924`) 0.14.3 [2019-07-29] --------------------- - Remote control: Add a command `kitty @ scroll-window` to scroll windows - Allow passing a ``!neighbor`` argument to the new_window mapping to open a new window next to the active window (:iss:`1746`) - Document the kitty remote control protocol (:iss:`1646`) - Add a new option :opt:`pointer_shape_when_grabbed` that allows you to control the mouse pointer shape when the terminal programs grabs the pointer (:iss:`1808`) - Add an option :opt:`terminal_select_modifiers` to control which modifiers are used to override mouse selection even when a terminal application has grabbed the mouse (:iss:`1774`) - When piping data to a child in the pipe command do it in a thread so as not to block the UI (:iss:`1708`) - unicode_input kitten: Fix a regression that broke using indices to select recently used symbols. - Fix a regression that caused closing an overlay window to focus the previously focused window rather than the underlying window (:iss:`1720`) - macOS: Reduce energy consumption when idle by shutting down Apple's display link thread after 30 second of inactivity (:iss:`1763`) - Linux: Fix incorrect scaling for fallback fonts when the font has an underscore that renders out of bounds (:iss:`1713`) - macOS: Fix finding fallback font for private use unicode symbols not working reliably (:iss:`1650`) - Fix an out of bounds read causing a crash when selecting text with the mouse in the alternate screen mode (:iss:`1578`) - Linux: Use the system "bell" sound for the terminal bell. Adds libcanberra as a new dependency to play the system sound. - macOS: Fix a rare deadlock causing kitty to hang (:iss:`1779`) - Linux: Fix a regression in 0.14.0 that caused the event loop to tick continuously, wasting CPU even when idle (:iss:`1782`) - ssh kitten: Make argument parsing more like ssh (:iss:`1787`) - When using :opt:`strip_trailing_spaces` do not remove empty lines (:iss:`1802`) - Fix a crash when displaying very large number of images (:iss:`1825`) 0.14.2 [2019-06-09] --------------------- - Add an option :opt:`placement_strategy` to control how the cell area is aligned inside the window when the window size is not an exact multiple of the cell size (:pull:`1670`) - hints kitten: Add a :option:`kitty +kitten hints --multiple-joiner` option to control how multiple selections are serialized when copying to clipboard or inserting into the terminal. You can have them on separate lines, separated by arbitrary characters, or even serialized as JSON (:iss:`1665`) - macOS: Fix a regression in the previous release that broke using :kbd:`ctrl+shift+tab` (:iss:`1671`) - panel kitten: Fix the contents of the panel kitten not being positioned correctly on the vertical axis - icat kitten: Fix a regression that broke passing directories to icat (:iss:`1683`) - clipboard kitten: Add a :option:`kitty +kitten clipboard --wait-for-completion` option to have the kitten wait till copying to clipboard is complete (:iss:`1693`) - Allow using the :doc:`pipe ` command to send screen and scrollback contents directly to the clipboard (:iss:`1693`) - Linux: Disable the Wayland backend on GNOME by default as GNOME has no support for server side decorations. Can be controlled by :opt:`linux_display_server`. - Add an option to control the default :opt:`update_check_interval` when building kitty packages - Wayland: Fix resizing the window on a compositor that does not provide server side window decorations, such a GNOME or Weston not working correctly (:iss:`1659`) - Wayland: Fix crash when enabling disabling monitors on sway (:iss:`1696`) 0.14.1 [2019-05-29] --------------------- - Add an option :opt:`command_on_bell` to run an arbitrary command when a bell occurs (:iss:`1660`) - Add a shortcut to toggle maximized window state :sc:`toggle_maximized` - Add support for the underscore key found in some keyboard layouts (:iss:`1639`) - Fix a missing newline when using the pipe command between the scrollback and screen contents (:iss:`1642`) - Fix colors not being preserved when using the pipe command with the pager history buffer (:pull:`1657`) - macOS: Fix a regression that could cause rendering of a kitty window to occasionally freeze in certain situations, such as moving it between monitors or transitioning from/to fullscreen (:iss:`1641`) - macOS: Fix a regression that caused :kbd:`cmd+v` to double up in the dvorak keyboard layout (:iss:`1652`) - When resizing and only a single window is present in the current layout, use that window's background color to fill in the blank areas. - Linux: Automatically increase cell height if the font being used is broken and draws the underscore outside the bounding box (:iss:`690`) - Wayland: Fix maximizing the window on a compositor that does not provide server side window decorations, such a GNOME or Weston not working (:iss:`1662`) 0.14.0 [2019-05-24] --------------------- - macOS: The default behavior of the Option key has changed. It now generates unicode characters rather than acting as the :kbd:`Alt` modifier. See :opt:`macos_option_as_alt`. - Support for an arbitrary number of internal clipboard buffers to copy/paste from, see (:ref:`cpbuf`) - Allow using the new private internal clipboard buffers with the :opt:`copy_on_select` option (:iss:`1390`) - macOS: Allow opening new kitty tabs/top-level windows from Finder (:pull:`1350`) - Add an option :opt:`disable_ligatures` to disable multi-character ligatures under the cursor to make editing easier or disable them completely (:iss:`461`) - Allow creating new OS windows in session files (:iss:`1514`) - Allow setting OS window size in session files - Add an option :opt:`tab_switch_strategy` to control which tab becomes active when the current tab is closed (:pull:`1524`) - Allow specifying a value of ``none`` for the :opt:`selection_foreground` which will cause kitty to not change text color in selections (:iss:`1358`) - Make live resizing of OS windows smoother and add an option :opt:`resize_draw_strategy` to control what is drawn while a resize is in progress. - macOS: Improve handling of IME extended input. Compose characters are now highlighted and the IME panel moves along with the text (:pull:`1586`). Also fixes handling of delete key in Chinese IME (:iss:`1461`) - When a window is closed, switch focus to the previously active window (if any) instead of picking the previous window in the layout (:iss:`1450`) - icat kitten: Add support for displaying images at http(s) URLs (:iss:`1340`) - A new option :opt:`strip_trailing_spaces` to optionally remove trailing spaces from lines when copying to clipboard. - A new option :opt:`tab_bar_min_tabs` to control how many tabs must be present before the tab-bar is shown (:iss:`1382`) - Automatically check for new releases and notify when an update is available, via the system notification facilities. Can be controlled by :opt:`update_check_interval` (:iss:`1342`) - macOS: Fix :kbd:`cmd+period` key not working (:iss:`1318`) - macOS: Add an option `macos_show_window_title_in_menubar` to not show the current window title in the menu-bar (:iss:`1066`) - macOS: Workaround for cocoa bug that could cause the mouse cursor to become hidden in other applications in rare circumstances (:iss:`1218`) - macOS: Allow assigning only the left or right :kbd:`Option` key to work as the :kbd:`Alt` key. See :opt:`macos_option_as_alt` for details (:iss:`1022`) - Fix using remote control to set cursor text color causing errors when creating new windows (:iss:`1326`) - Fix window title for minimized windows not being updated (:iss:`1332`) - macOS: Fix using multi-key sequences to input text ignoring the first few key presses if the sequence is aborted (:iss:`1311`) - macOS: Add a number of common macOS keyboard shortcuts - macOS: Reduce energy consumption by not rendering occluded windows - Fix scrollback pager history not being cleared when clearing the main scrollback buffer (:iss:`1387`) - macOS: When closing a top-level window only switch focus to the previous kitty window if it is on the same workspace (:iss:`1379`) - macOS: Fix :opt:`sync_to_monitor` not working on Mojave. - macOS: Use the system cursor blink interval by default :opt:`cursor_blink_interval`. - Wayland: Use the kitty Wayland backend by default. Can be switched back to using XWayland by setting the environment variable: ``KITTY_DISABLE_WAYLAND=1`` - Add a ``no-append`` setting to :opt:`clipboard_control` to disable the kitty copy concatenation protocol extension for OSC 52. - Update to using the Unicode 12 standard - Unicode input kitten: Allow using the arrow keys in code mode to go to next and previous unicode symbol. - macOS: Fix specifying initial window size in cells not working correctly on Retina screens (:iss:`1444`) - Fix a regression in version 0.13.0 that caused background colors of space characters after private use unicode characters to not be respected (:iss:`1455`) - Only update the selected text to clipboard when the selection is finished, not continuously as it is updated. (:iss:`1460`) - Allow setting :opt:`active_border_color` to ``none`` to not draw a border around the active window (:iss:`805`) - Use negative values for :opt:`mouse_hide_wait` to hide the mouse cursor immediately when pressing a key (:iss:`1534`) - When encountering errors in :file:`kitty.conf` report them to the user instead of failing to start. - Allow the user to control the resize debounce time via :opt:`resize_debounce_time`. - Remote control: Make the :ref:`at_set-font-size` command more capable. It can now increment font size and reset it. It also only acts on the active top-level window, by default (:iss:`1581`) - When launching child processes set the :code:`PWD` environment variable (:iss:`1595`) - X11: use the window manager's native full-screen implementation when making windows full-screen (:iss:`1605`) - Mouse selection: When extending by word, fix extending selection to non-word characters not working well (:iss:`1616`) 0.13.3 [2019-01-19] ------------------------------ - icat kitten: Add a ``--stdin`` option to control if image data is read from STDIN (:iss:`1308`) - hints kitten: Start hints numbering at one instead of zero by default. Added an option ``--hints-offset`` to control it. (:iss:`1289`) - Fix a regression in the previous release that broke using ``background`` for :opt:`cursor_text_color` (:iss:`1288`) - macOS: Fix dragging kitty window tabs in traditional full screen mode causing crashes (:iss:`1296`) - macOS: Ensure that when running from a bundle, the bundle kitty exe is preferred over any kitty in PATH (:iss:`1280`) - macOS: Fix a regression that broke mapping of :kbd:`ctrl+tab` (:iss:`1304`) - Add a list of user-created kittens to the docs - Fix a regression that broke changing mouse wheel scroll direction with negative :opt:`wheel_scroll_multiplier` values in full-screen applications like vim (:iss:`1299`) - Fix :opt:`background_opacity` not working with pure white backgrounds (:iss:`1285`) - macOS: Fix "New OS Window" dock action not working when kitty is not focused (:iss:`1312`) - macOS: Add aliases for close window and new tab actions that conform to common Apple shortcuts for these actions (:iss:`1313`) - macOS: Fix some kittens causing 100% CPU usage 0.13.2 [2019-01-04] ------------------------------ - Add a new option :opt:`tab_title_template` to control how tab titles are formatted. In particular the template can be used to display the tab number next to the title (:iss:`1223`) - Report the current foreground processes as well as the original child process, when using `kitty @ ls` - Use the current working directory of the foreground process for the `*_with_cwd` actions that open a new window with the current working directory. - Add a new ``copy_or_interrupt`` action that can be mapped to kbd:`ctrl+c`. It will copy if there is a selection and interrupt otherwise (:iss:`1286`) - Fix setting :opt:`background_opacity` causing window margins/padding to be slightly different shade from background (:iss:`1221`) - Handle keyboards with a "+" key (:iss:`1224`) - Fix Private use Unicode area characters followed by spaces at the end of text not being rendered correctly (:iss:`1210`) - macOS: Add an entry to the dock menu to open a new OS window (:iss:`1242`) - macOS: Fix scrolling very slowly with wheel mice not working (:iss:`1238`) - Fix changing :opt:`cursor_text_color` via remote control not working (:iss:`1229`) - Add an action to resize windows that can be mapped to shortcuts in :file:`kitty.conf` (:pull:`1245`) - Fix using the ``new_tab !neighbor`` action changing the order of the non-neighboring tabs (:iss:`1256`) - macOS: Fix momentum scrolling continuing when changing the active window/tab (:iss:`1267`) 0.13.1 [2018-12-06] ------------------------------ - Fix passing input via the pipe action to a program without a window not working. - Linux: Fix a regression in the previous release that caused automatic selection of bold/italic fonts when using aliases such as "monospace" to not work (:iss:`1209`) - Fix resizing window smaller and then restoring causing some wrapped lines to not be properly unwrapped (:iss:`1206`) 0.13.0 [2018-12-05] ------------------------------ - Add an option :opt:`scrollback_pager_history_size` to tell kitty to store extended scrollback to use when viewing the scrollback buffer in a pager (:iss:`970`) - Modify the kittens sub-system to allow creating custom kittens without any user interface. This is useful for creating more complex actions that can be bound to key presses in :file:`kitty.conf`. See doc:`kittens/custom`. (:iss:`870`) - Add a new ``nth_window`` action that can be used to go to the nth window and also previously active windows, using negative numbers. Similarly, ``goto_tab`` now accepts negative numbers to go to previously active tabs (:iss:`1040`) - Allow hiding the tab bar completely, by setting :opt:`tab_bar_style` to ``hidden``. (:iss:`1014`) - Allow private use unicode characters to stretch over more than a single neighboring space (:pull:`1036`) - Add a new :opt:`touch_scroll_multiplier` option to modify the amount scrolled by high precision scrolling devices such as touchpads (:pull:`1129`) - icat kitten: Implement reading image data from STDIN, if STDIN is not connected to a terminal (:iss:`1130`) - hints kitten: Insert trailing spaces after matches when using the ``--multiple`` option. Also add a separate ``--add-trailing-space`` option to control this behavior (:pull:`1132`) - Fix the ``*_with_cwd`` actions using the cwd of the overlay window rather than the underlying window's cwd (:iss:`1045`) - Fix incorrect key repeat rate on wayland (:pull:`1055`) - macOS: Fix drag and drop of files not working on Mojave (:iss:`1058`) - macOS: Fix IME input for East Asian languages (:iss:`910`) - macOS: Fix rendering frames-per-second very low when processing large amounts of input in small chunks (:pull:`1082`) - macOS: Fix incorrect text sizes calculated when using an external display that is set to mirror the main display (:iss:`1056`) - macOS: Use the system default double click interval (:pull:`1090`) - macOS: Fix touch scrolling sensitivity low on retina screens (:iss:`1112`) - Linux: Fix incorrect rendering of some fonts when hinting is disabled at small sizes (:iss:`1173`) - Linux: Fix match rules used as aliases in Fontconfig configuration not being respected (:iss:`1085`) - Linux: Fix a crash when using the GNU Unifont as a fallback font (:iss:`1087`) - Wayland: Fix copying from hidden kitty windows hanging (:iss:`1051`) - Wayland: Add support for the primary selection protocol implemented by some compositors (:pull:`1095`) - Fix expansion of env vars not working in the :opt:`env` directive (:iss:`1075`) - Fix :opt:`mouse_hide_wait` only taking effect after an event such as cursor blink or key press (:iss:`1073`) - Fix the ``set_background_opacity`` action not working correctly (:pull:`1147`) - Fix second cell of emoji created using variation selectors not having the same attributes as the first cell (:iss:`1109`) - Fix focusing neighboring windows in the grid layout with less than 4 windows not working (:iss:`1115`) - Fix :kbd:`ctrl+shift+special` key not working in normal and application keyboard modes (:iss:`1114`) - Add a terminfo entry for full keyboard mode. - Fix incorrect text-antialiasing when using very low background opacity (:iss:`1005`) - When double or triple clicking ignore clicks if they are "far" from each other (:iss:`1093`) - Follow xterm's behavior for the menu key (:iss:`597`) - Fix hover detection of URLs not working when hovering over the first colon and slash characters in short URLs (:iss:`1201`) 0.12.3 [2018-09-29] ------------------------------ - macOS: Fix kitty window not being rendered on macOS Mojave until the window is moved or resized at least once (:iss:`887`) - Unicode input: Fix an error when searching for the string 'fir' (:iss:`1035`) 0.12.2 [2018-09-24] ------------------------------ - A new ``last_used_layout`` function that can be mapped to a shortcut to switch to the previously used window layout (:iss:`870`) - New ``neighboring_window`` and ``move_window`` functions to switch to neighboring windows in the current layout, and move them around, similar to window movement in vim (:iss:`916`) - A new ``pipe`` function that can be used to pipe the contents of the screen and scrollback buffer to any desired program running in a new window, tab or overlay window. (:iss:`933`) - Add a new :option:`kitty --start-as` command line flag to start kitty full-screen/maximized/minimized. This replaces the ``--start-in-fullscreen`` flag introduced in the previous release (:iss:`935`) - When mapping the ``new_tab`` action allow specifying that the tab should open next to the current tab instead of at the end of the tabs list (:iss:`979`) - macOS: Add a new :opt:`macos_thicken_font` to make text rendering on macs thicker, which makes it similar to the result of sub-pixel antialiasing (:pull:`950`) - macOS: Add an option :opt:`macos_traditional_fullscreen` to make full-screening of kitty windows much faster, but less pretty. (:iss:`911`) - Fix a bug causing incorrect line ordering when viewing the scrollback buffer if the scrollback buffer is full (:iss:`960`) - Fix drag-scrolling not working when the mouse leaves the window confines (:iss:`917`) - Workaround for broken editors like nano that cannot handle newlines in pasted text (:iss:`994`) - Linux: Ensure that the python embedded in the kitty binary build uses UTF-8 mode to process command-line arguments (:iss:`924`) - Linux: Handle fonts that contain monochrome bitmaps (such as the Terminus TTF font) (:pull:`934`) - Have the :option:`kitty --title` flag apply to all windows created using :option:`kitty --session` (:iss:`921`) - Revert change for backspacing of wide characters in the previous release, as it breaks backspacing in some wide character aware programs (:iss:`875`) - Fix kitty @set-colors not working for tab backgrounds when using the `fade` tabbar style (:iss:`937`) - macOS: Fix resizing semi-transparent windows causing the windows to be invisible during the resize (:iss:`941`) - Linux: Fix window icon not set on X11 for the first OS window (:iss:`961`) - macOS: Add an :opt:`macos_custom_beam_cursor` option to use a special mouse cursor image that can be seen on both light and dark backgrounds (:iss:`359`) - Remote control: Fix the ``focus_window`` command not focusing the top-level OS window of the specified kitty window (:iss:`1003`) - Fix using :opt:`focus_follows_mouse` causing text selection with the mouse to malfunction when using multiple kitty windows (:iss:`1002`) 0.12.1 [2018-09-08] ------------------------------ - Add a new ``--start-in-fullscreen`` command line flag to start kitty in full screen mode (:iss:`856`) - macOS: Fix a character that cannot be rendered in any font causing font fallback for all subsequent characters that cannot be rendered in the main font to fail (:iss:`799`) - Linux: Do not enable IME input via ibus unless the ``GLFW_IM_MODULE=ibus`` environment variable is set. IME causes key processing latency and even missed keystrokes for many people, so it is now off by default. - Fix backspacing of wide characters in wide-character unaware programs not working (:iss:`875`) - Linux: Fix number pad arrow keys not working when Numlock is off (:iss:`857`) - Wayland: Implement support for clipboard copy/paste (:iss:`855`) - Allow mapping shortcuts using the raw key code from the OS (:iss:`848`) - Allow mapping of individual key-presses without modifiers as shortcuts - Fix legacy invocation of icat as `kitty icat` not working (:iss:`850`) - Improve rendering of wavy underline at small font sizes (:iss:`853`) - Fix a regression in 0.12.0 that broke dynamic resizing of layouts (:iss:`860`) - Wayland: Allow using the :option:`kitty --class` command line flag to set the app id (:iss:`862`) - Add completion of the kitty command for the fish shell (:pull:`829`) - Linux: Fix XCompose rules with no defined symbol not working (:iss:`880`) - Linux: Fix crash with some Nvidia drivers when creating tabs in the first top level-window after creating a second top-level window. (:iss:`873`) - macOS: Diff kitten: Fix syntax highlighting not working because of a bug in the 0.12.0 macOS package 0.12.0 [2018-09-01] ------------------------------ - Preserve the mouse selection even when the contents of the screen are scrolled or overwritten provided the new text does not intersect the selected lines. - Linux: Implement support for Input Method Extensions (multilingual input using standard keyboards) via `IBus `_ (:iss:`469`) - Implement completion for the kitty command in bash and zsh. See :ref:`completion`. - Render the text under the cursor in a fixed color, configurable via the option :opt:`cursor_text_color` (:iss:`126`) - Add an option :opt:`env` to set environment variables in child processes from kitty.conf - Add an action to the ``clear_terminal`` function to scroll the screen contents into the scrollback buffer (:iss:`1113`) - Implement high precision scrolling with the trackpad on platforms such as macOS and Wayland that implement it. (:pull:`819`) - macOS: Allow scrolling window contents using mouse wheel/trackpad even when the window is not the active window (:iss:`729`) - Remote control: Allow changing the current window layout with a new :ref:`at_goto-layout` command (:iss:`845`) - Remote control: Allow matching windows by the environment variables of their child process as well - Allow running kittens via the remote control system (:iss:`738`) - Allow enabling remote control in only some kitty windows - Add a keyboard shortcut to reset the terminal (:sc:`reset_terminal`). It takes parameters so you can define your own shortcuts to clear the screen/scrollback also (:iss:`747`) - Fix one-pixel line appearing at window edges at some window sizes when displaying images with background opacity enabled (:iss:`741`) - diff kitten: Fix error when right hand side file is binary and left hand side file is text (:pull:`752`) - kitty @ new-window: Add a new option :option:`kitty @ new-window --window-type` to create top-level OS windows (:iss:`770`) - macOS: The :opt:`focus_follows_mouse` option now also works across top-level kitty OS windows (:iss:`754`) - Fix detection of URLs in HTML source code (URLs inside quotes) (:iss:`785`) - Implement support for emoji skin tone modifiers (:iss:`787`) - Round-trip the zwj unicode character. Rendering of sequences containing zwj is still not implemented, since it can cause the collapse of an unbounded number of characters into a single cell. However, kitty at least preserves the zwj by storing it as a combining character. - macOS: Disable the custom mouse cursor. Using a custom cursor fails on dual GPU machines. I give up, Apple users will just have to live with the limitations of their choice of OS. (:iss:`794`) - macOS: Fix control+tab key combination not working (:iss:`801`) - Linux: Fix slow startup on some systems caused by GLFW searching for joysticks. Since kitty does not use joysticks, disable joystick support. (:iss:`830`) 0.11.3 [2018-07-10] ------------------------------ - Draw only the minimum borders needed for inactive windows. That is only the borders that separate the inactive window from a neighbor. Note that setting a non-zero window margin overrides this and causes all borders to be drawn. The old behavior of drawing all borders can be restored via the :opt:`draw_minimal_borders` setting in kitty.conf. (:iss:`699`) - macOS: Add an option :opt:`macos_window_resizable` to control if kitty top-level windows are resizable using the mouse or not (:iss:`698`) - macOS: Use a custom mouse cursor that shows up well on both light and dark backgrounds (:iss:`359`) - macOS: Workaround for switching from fullscreen to windowed mode with the titlebar hidden causing window resizing to not work. (:iss:`711`) - Fix triple-click to select line not working when the entire line is filled (:iss:`703`) - When dragging to select with the mouse "grab" the mouse so that if it strays into neighboring windows, the selection is still updated (:pull:`624`) - When clicking in the margin/border area of a window, map the click to the nearest cell in the window. Avoids selection with the mouse failing when starting the selection just outside the window. - When drag-scrolling stop the scroll when the mouse button is released. - Fix a regression in the previous release that caused pasting large amounts of text to be duplicated (:iss:`709`) 0.11.2 [2018-07-01] ------------------------------ - Linux: Allow using XKB key names to bind shortcuts to keys not supported by GLFW (:pull:`665`) - kitty shell: Ignore failure to read readline history file. Happens if the user migrates their kitty cache directory between systems with incompatible readline implementations. - macOS: Fix an error in remote control when using --listen-on (:iss:`679`) - hints kitten: Add a :option:`kitty +kitten hints --multiple` option to select multiple items (:iss:`687`) - Fix pasting large amounts of text very slow (:iss:`682`) - Add an option :opt:`single_window_margin_width` to allow different margins when only a single window is visible in the layout (:iss:`688`) - Add a :option:`kitty --hold` command line option to stay open after the child process exits (:iss:`667`) - diff kitten: When triggering a search scroll to the first match automatically - :option:`kitty --debug-font-fallback` also prints out what basic fonts were matched - When closing a kitty window reset the mouse cursor to its default shape and ensure it is visible (:iss:`655`). - Remote control: Speed-up reading of command responses - Linux installer: Fix installer failing on systems with python < 3.5 - Support "-T" as an alias for "--title" (:pull:`659`) - Fix a regression in the previous release that broke using :option:`kitty --debug-config` with custom key mappings (:iss:`695`) 0.11.1 [2018-06-17] ------------------------------ - diff kitten: Implement searching for text in the diff (:iss:`574`) - Add an option :opt:`startup_session` to :file:`kitty.conf` to specify a default startup session (:iss:`641`) - Add a command line option :option:`kitty --wait-for-single-instance-window-close` to make :option:`kitty --single-instance` wait for the closing of the newly opened window before quitting (:iss:`630`) - diff kitten: Allow theming the selection background/foreground as well - diff kitten: Display CRLF line endings using the unicode return symbol instead of as it is less intrusive (:iss:`638`) - diff kitten: Fix default foreground/background colors not being restored when kitten quits (:iss:`637`) - Fix :option:`kitty @ set-colors --all` not working when more than one window present (:iss:`632`) - Fix a regression that broke the legacy increase/decrease_font_size actions - Clear scrollback on reset (:iss:`631`) 0.11.0 [2018-06-12] ------------------------------ - A new tab bar style "fade" in which each tab's edges fade into the background. See :opt:`tab_bar_style` and :opt:`tab_fade` for details. The old look can be restored by setting :opt:`tab_bar_style` to :code:`separator`. - :doc:`Pre-compiled binaries ` with all bundled dependencies for Linux (:iss:`595`) - A :doc:`new kitten ` to create dock panels on X11 desktops showing the output from arbitrary terminal programs. - Reduce data sent to the GPU per render by 30% (:commit:`8dea5b3`) - Implement changing the font size for individual top level (OS) windows (:iss:`408`) - When viewing the scrollback in less using :sc:`show_scrollback` and kitty is currently scrolled, position the scrollback in less to match kitty's scroll position. (:iss:`148`) - ssh kitten: Support all SSH options. It can now be aliased directly to ssh for convenience. (:pull:`591`) - icat kitten: Add :option:`kitty +kitten icat --print-window-size` to easily detect the window size in pixels from scripting languages (:iss:`581`) - hints kitten: Allow selecting hashes from the terminal with :sc:`insert_selected_hash` useful for git commits. (:pull:`604`) - Allow specifying initial window size in number of cells in addition to pixels (:iss:`436`) - Add a setting to control the margins to the left and right of the tab-bar (:iss:`584`) - When closing a tab switch to the last active tab instead of the right-most tab (:iss:`585`) - Wayland: Fix kitty not starting when using wl_roots based compositors (:iss:`157`) - Wayland: Fix mouse wheel/touchpad scrolling in opposite direction to other apps (:iss:`594`) - macOS: Fix the new OS window keyboard shortcut (:sc:`new_os_window`) not working if no kitty window currently has focus. (:iss:`524`) - macOS: Keep kitty running even when the last window is closed. This is in line with how applications are supposed to behave on macOS (:iss:`543`). There is a new option (:opt:`macos_quit_when_last_window_closed`) to control this. - macOS: Add macOS standard shortcuts for copy, paste and new OS window (⌘+C, ⌘+V, ⌘+N) - Add a config option (:opt:`editor`) to set the EDITOR kitty uses (:iss:`580`) - Add a config option (``x11_hide_window_decorations``) to hide window decorations under X11/Wayland (:iss:`607`) - Add an option to @set-window-title to make the title change non-permanent (:iss:`592`) - Add support for the CSI t escape code to query window and cell sizes (:iss:`581`) - Linux: When using layouts that map the keys to non-ascii characters, map shortcuts using the ascii equivalents, from the default layout. (:iss:`606`) - Linux: Fix fonts not being correctly read from TrueType Collection (.ttc) files (:iss:`577`) - Fix :opt:`inactive_text_alpha` also applying to the tab bar (:iss:`612`) - :doc:`hints kitten `: Fix a regression that caused some blank lines to be not be displayed. - Linux: Include a man page and the HTML docs when building the linux-package - Remote control: Fix kitty @ sometimes failing to read the response from kitty. (:iss:`614`) - Fix `kitty @ set-colors` not working with the window border colors. (:iss:`623`) - Fix a regression in 0.10 that caused incorrect rendering of the status bar in irssi when used inside screen. (:iss:`621`) 0.10.1 [2018-05-24] ------------------------------ - Add a kitten to easily ssh into servers that automatically copies the terminfo files over. ``kitty +kitten ssh myserver``. - diff kitten: Make the keyboard shortcuts configurable (:iss:`563`) - Allow controlling *background_opacity* via either keyboard shortcuts or remote control. Note that you must set *dynamic_background_opacity yes* in kitty.conf first. (:iss:`569`) - diff kitten: Add keybindings to scroll by page - diff kitten: Fix incorrect syntax highlighting for a few file formats such as yaml - macOS: Fix regression that caused the *macos_option_as_alt* setting to always be disabled for all OS windows in a kitty instance after the first window (:iss:`571`) - Fix Ctrl+Alt+Space not working in normal and application keyboard modes (:iss:`562`) 0.10.0 [2018-05-21] ------------------------------ - A diff kitten to show side-by-side diffs with syntax highlighting and support for images. See :doc:`diff kitten `. - Make windows in the various kitty layouts manually resizable. See :ref:`layouts` for details. - Implement support for the SGR *faint* escape code to make text blend into the background (:iss:`446`). - Make the hints kitten a little smarter (:commit:`ad1109b`) so that URLs that stretch over multiple lines are detected. Also improve detection of surrounding brackets/quotes. - Make the kitty window id available as the environment variable ``KITTY_WINDOW_ID`` (:iss:`532`). - Add a "fat" layout that is similar to the "tall" layout but vertically oriented. - Expand environment variables in config file include directives - Allow programs running in kitty to read/write from the clipboard (:commit:`889ca77`). By default only writing is allowed. This feature is supported in many terminals, search for `OSC 52 clipboard` to find out more about using it. - Fix moving cursor outside a defined page area incorrectly causing the cursor to be placed inside the page area. Caused incorrect rendering in neovim, in some situations (:iss:`542`). - Render a couple more powerline symbols directly, bypassing the font (:iss:`550`). - Fix ctrl+alt+ not working in normal and application keyboard (:iss:`548`). - Partial fix for rendering Right-to-left languages like Arabic. Rendering of Arabic is never going to be perfect, but now it is at least readable. - Fix Ctrl+backspace acting as plain backspace in normal and application keyboard modes (:iss:`538`). - Have the paste_from_selection action paste from the clipboard on platforms that do not have a primary selection such as Wayland and macOS (:iss:`529`) - Fix cursor_stop_blinking_after=0 not working (:iss:`530`) 0.9.1 [2018-05-05] ------------------------------ - Show a bell symbol on the tab if a bell occurs in one of the windows in the tab and the window is not the currently focused window - Change the window border color if a bell occurs in an unfocused window. Can be disabled by setting the bell_border_color to be the same as the inactive_border_color. - macOS: Add support for dead keys - Unicode input: When searching by name search for prefix matches as well as whole word matches - Dynamically allocate the memory used for the scrollback history buffer. Reduces startup memory consumption when using very large scrollback buffer sizes. - Add an option to not request window attention on bell. - Remote control: Allow matching windows by number (visible position). - macOS: Fix changing tab title and kitty shell not working - When triple-clicking select all wrapped lines belonging to a single logical line. - hints kitten: Detect bracketed URLs and don't include the closing bracket in the URL. - When calling pass_selection_to_program use the current directory of the child process as the cwd of the program. - Add macos_hide_from_tasks option to hide kitty from the macOS task switcher - macOS: When the macos_titlebar_color is set to background change the titlebar colors to match the current background color of the active kitty window - Add a setting to clear all shortcuts defined up to that point in the config file(s) - Add a setting (kitty_mod) to change the modifier used by all the default kitty shortcuts, globally - Fix Shift+function key not working - Support the F13 to F25 function keys - Don't fail to start if the user deletes the hintstyle key from their fontconfig configuration. - When rendering a private use unicode codepoint and a space as a two cell ligature, set the foreground colors of the space cell to match the colors of the first cell. Works around applications like powerline that use different colors for the two cells. - Fix passing @text to other programs such as when viewing the scrollback buffer not working correctly if kitty is itself scrolled up. - Fix window focus gained/lost events not being reported to child programs when switching windows/tabs using the various keyboard shortcuts. - Fix tab title not changing to reflect the window title when switching between different windows in a tab - Ignore -e if it is specified on the command line. This is for compatibility with broken software that assumes terminals should run with an -e option to execute commands instead of just passing the commands as arguments. 0.9.0 [2018-04-15] ------------------------------ - A new kitty command shell to allow controlling kitty via commands. Press `ctrl+shift+escape` to run the shell. - The hints kitten has become much more powerful. Now in addition to URLs you can use it to select word, paths, filenames, lines, etc. from the screen. These can be inserted into the terminal, copied to clipboard or sent to external programs. - Linux: Switch to libxkbcommon for keyboard handling. It allows kitty to support XCompose and dead keys and also react to keyboard remapping/layout change without needing a restart. - Add support for multiple-key-sequence shortcuts - A new remote control command `set-colors` to change the current and/or configured colors. - When double-clicking to select a word, select words that continue onto the next/prev line as well. - Add an `include` directive for the config files to read multiple config files - Improve mouse selection for windows with padding. Moving the mouse into the padding area now acts as if the mouse is over the nearest cell. - Allow setting all 256 terminal colors in the config file - Fix using `kitty --single-instance` to open a new window in a running kitty instance, not respecting the `--directory` flag - URL hints: Exclude trailing punctuation from URLs - URL hints: Launch the browser from the kitty parent process rather than the hints kitten. Fixes launching on some systems where xdg-open doesn't like being run from a kitten. - Allow using rectangle select mode by pressing shift in addition to the rectangle select modifiers even when the terminal program has grabbed the mouse. 0.8.4 [2018-03-31] ----------------------------- - Fix presence of XDG_CONFIG_DIRS and absence of XDG_CONFIG_HOME preventing kitty from starting - Revert change in last release to cell width calculation. Instead just clip the right edges of characters that overflow the cell by at most two pixels 0.8.3 [2018-03-29] ----------------------------- - Fix a regression that broke the visual bell and invert screen colors escape code - Allow double-click and triple-click + drag to extend selections word at a time or line at a time - Add a keyboard shortcut to set the tab title - Fix setting window title to empty via OSC escape code not working correctly - Linux: Fix cell width calculation incorrect for some fonts (cell widths are now calculated by actually rendering bitmaps, which is slower but more accurate) - Allow specifying a system wide kitty config file, for all users - Add a --debug-config command line flag to output data about the system and kitty configuration. - Wayland: Fix auto-repeat of keys not working 0.8.2 [2018-03-17] ----------------------------- - Allow extending existing selections by right clicking - Add a configurable keyboard shortcut and remote command to set the font size to a specific value - Add an option to have kitty close the window when the main processes running in it exits, even if there are still background processes writing to that terminal - Add configurable keyboard shortcuts to switch to a specific layout - Add a keyboard shortcut to edit the kitty config file easily - macOS: Fix restoring of window size not correct on Retina screens - macOS: Add a facility to specify command line arguments when running kitty from the GUI - Add a focus-tab remote command - Fix screen not being refreshed immediately after moving a window. - Fix a crash when getting the contents of the scrollback buffer as text 0.8.1 [2018-03-09] ----------------------------- - Extend kitty's remote control feature to work over both UNIX and TCP sockets, so now you can control kitty from across the internet, if you want to. - Render private use unicode characters that are followed by a space as a two character ligature. This fixes rendering for applications that misuse private-use characters to display square symbols. - Fix Unicode emoji presentation variant selector causing new a fallback font instance to be created - Fix a rare error that prevented the Unicode input kitten from working sometimes - Allow using Ctrl+Alt+letter in legacy keyboard modes by outputting them as Ctrl+letter and Alt+letter. This matches other terminals' behavior. - Fix cursor position off-by-one on horizontal axis when resizing the terminal - Wayland: Fix auto-repeat of keys not working - Wayland: Add support for window decorations provided by the Wayland shell - macOS: Fix URL hints not working - macOS: Fix shell not starting in login mode on some computers - macOS: Output errors into console.app when running as a bundle 0.8.0 [2018-02-24] ----------------------------- - A framework for kittens, that is, small terminal programs designed to run inside kitty and extend its capabilities. Examples include unicode input and selecting URLs with the keyboard. - Input arbitrary unicode characters by pressing Ctrl+Shift+u. You can choose characters by name, by hex code, by recently used, etc. There is even and editable Favorites list. - Open URLs using only the keyboard. kitty has a new "hints mode". Press Ctrl+Shift+e and all detected URLs on the screen are highlighted with a key to press to open them. The facility is customizable so you can change what is detected as a URL and which program is used to open it. - Add an option to change the titlebar color of kitty windows on macOS - Only consider Emoji characters with default Emoji presentation to be two cells wide. This matches the standard. Also add support for the Unicode Emoji variation presentation selector. - Prevent video tearing during high speed scrolling by syncing draws to the monitor's refresh rate. There is a new configuration option to control this ``sync_to_monitor``. - When displaying only a single window, use the default background color of the window (which can be changed via escape codes) as the color for the margin and padding of the window. - Add some non standard terminfo capabilities used by neovim and tmux. - Fix large drop in performance when using multiple top-level windows on macOS - Fix save/restore of window sizes not working correctly. - Remove option to use system wcwidth(). Now always use a wcwidth() based on the Unicode standard. Only sane way. - Fix a regression that caused a few ligature glyphs to not render correctly in rare circumstances. - Browsing the scrollback buffer now happens in an overlay window instead of a new window/tab. 0.7.1 [2018-01-31] --------------------------- - Add an option to adjust the width of character cells - Fix selecting text with the mouse in the scrollback buffer selecting text from the line above the actually selected line - Fix some italic fonts having the right edge of characters cut-off, unnecessarily 0.7.0 [2018-01-24] --------------------------- - Allow controlling kitty from the shell prompt/scripts. You can open/close/rename windows and tabs and even send input to specific windows. See the README for details. - Add option to put tab bar at the top instead of the bottom - Add option to override the default shell - Add "Horizontal" and "Vertical" window layouts - Sessions: Allow setting titles and working directories for individual windows - Option to copy to clipboard on mouse select - Fix incorrect reporting of mouse move events when using the SGR protocol - Make alt+backspace delete the previous word - Take the mouse wheel multiplier option in to account when generating fake key scroll events - macOS: Fix closing top-level window does not transfer focus to other top-level windows. - macOS: Fix alt+arrow keys not working when disabling the macos_option_as_alt config option. - kitty icat: Workaround for bug in ImageMagick that would cause some images to fail to display at certain sizes. - Fix rendering of text with ligature fonts that do not use dummy glyphs - Fix a regression that caused copying of the selection to clipboard to only copy the visible part of the selection - Fix incorrect handling of some unicode combining marks that are not re-ordered - Fix handling on non-BMP combining characters - Drop the dependency on libunistring 0.6.1 [2017-12-28] --------------------------- - Add an option to fade the text in inactive windows - Add new actions to open windows/tabs/etc. with the working directory set to the working directory of the current window. - Automatically adjust cell size when DPI changes, for example when kitty is moved from one monitor to another with a different DPI - Ensure underlines are rendered even for fonts with very poor metrics - Fix some emoji glyphs not colored on Linux - Internal wcwidth() implementation is now auto-generated from the unicode standard database - Allow configuring the modifiers to use for rectangular selection with the mouse. - Fix incorrect minimum wayland version in the build script - Fix a crash when detecting a URL that ends at the end of the line - Fix regression that broke drawing of hollow cursor when window loses focus 0.6.0 [2017-12-18] --------------------------- - Support background transparency via the background_opacity option. Provided that your OS/window manager supports transparency, you can now have kitty render pixels that have only the default background color as semi-transparent. - Support multiple top level (OS) windows. These windows all share the sprite texture cache on the GPU, further reducing overall resource usage. Use the shortcut `ctrl+shift+n` to open a new top-level window. - Add support for a *daemon* mode using the `--single-instance` command line option. With this option you can have only a single kitty instance running. All future invocations simply open new top-level windows in the existing instance. - Support colored emoji - Use CoreText instead of FreeType to render text on macOS - Support running on the "low power" GPU on dual GPU macOS machines - Add a new "grid" window layout - Drop the dependency on glfw (kitty now uses a modified, bundled copy of glfw) - Add an option to control the audio bell volume on X11 systems - Add a command line switch to set the name part of the WM_CLASS window property independently. - Add a command line switch to set the window title. - Add more options to customize the tab-bar's appearance (font styles and separator) - Allow drag and drop of files into kitty. On drop kitty will paste the file path to the running program. - Add an option to control the underline style for URL highlighting on hover - X11: Set the WINDOWID environment variable - Fix middle and right buttons swapped when sending mouse events to child processes - Allow selecting in a rectangle by holding down Ctrl+Alt while dragging with the mouse. 0.5.1 [2017-12-01] --------------------------- - Add an option to control the thickness of lines in box drawing characters - Increase max. allowed ligature length to nine characters - Fix text not vertically centered when adjusting line height - Fix unicode block characters not being rendered properly - Fix shift+up/down not generating correct escape codes - Image display: Fix displaying images taller than two screen heights not scrolling properly 0.5.0 [2017-11-19] --------------------------- - Add support for ligature fonts such as Fira Code, Hasklig, etc. kitty now uses harfbuzz for text shaping which allow it to support advanced OpenType features such as contextual alternates/ligatures/combining glyphs/etc. - Make it easy to select fonts by allowing listing of monospace fonts using: kitty list-fonts - Add an option to have window focus follow mouse - Add a keyboard shortcut (ctrl+shift+f11) to toggle fullscreen mode - macOS: Fix handling of option key. It now behaves just like the alt key on Linux. There is an option to make it type unicode characters instead. - Linux: Add support for startup notification on X11 desktops. kitty will now inform the window manager when its startup is complete. - Fix shell prompt being duplicated when window is resized - Fix crash when displaying more than 64 images in the same session - Add support for colons in SGR color codes. These are generated by some applications such as neovim when they mistakenly identify kitty as a libvte based terminal. - Fix mouse interaction not working in apps using obsolete mouse interaction protocols - Linux: no longer require glew as a dependency 0.4.2 [2017-10-23] --------------------------- - Fix a regression in 0.4.0 that broke custom key mappings - Fix a regression in 0.4.0 that broke support for non-QWERTY keyboard layouts - Avoid using threads to reap zombie child processes. Also prevent kitty from hanging if the open program hangs when clicking on a URL. 0.4.0 [2017-10-22] --------------------------- - Support for drawing arbitrary raster graphics (images) in the terminal via a new graphics protocol. kitty can draw images with full 32-bit color using both ssh connections and files/shared memory (when available) for better performance. The drawing primitives support alpha blending and z-index. Images can be drawn both above and below text. See :doc:`graphics-protocol`. for details. - Refactor kitty's internals to make it even faster and more efficient. The CPU usage of kitty + X server while doing intensive tasks such as scrolling a file continuously in less has been reduced by 50%. There are now two configuration options ``repaint_delay`` and ``input_delay`` you can use to fine tune kitty's performance vs CPU usage profile. The CPU usage of kitty + X when scrolling in less is now significantly better than most (all?) other terminals. See :doc:`performance`. - Hovering over URLs with the mouse now underlines them to indicate they can be clicked. Hold down Ctrl+Shift while clicking to open the URL. - Selection using the mouse is now more intelligent. It does not add blank cells (i.e. cells that have no content) after the end of text in a line to the selection. - The block cursor in now fully opaque but renders the character under it in the background color, for enhanced visibility. - Allow combining multiple independent actions into a single shortcut - Add a new shortcut to pass the current selection to an external program - Allow creating shortcuts to open new windows running arbitrary commands. You can also pass the current selection to the command as an arguments and the contents of the screen + scrollback buffer as stdin to the command. kitty-0.15.0/docs/conf.py000066400000000000000000000470331356737523400152160ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # https://www.sphinx-doc.org/en/master/config import importlib import os import re import subprocess import sys import time from functools import partial from docutils import nodes from docutils.parsers.rst.roles import set_classes from pygments.lexer import RegexLexer, bygroups from pygments.token import ( Comment, Keyword, Literal, Name, Number, String, Whitespace ) from sphinx import addnodes from sphinx.environment.adapters.toctree import TocTree from sphinx.util.logging import getLogger kitty_src = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if kitty_src not in sys.path: sys.path.insert(0, kitty_src) str_version = importlib.import_module('kitty.constants').str_version # config {{{ # -- Project information ----------------------------------------------------- project = 'kitty' copyright = time.strftime('%Y, Kovid Goyal') author = 'Kovid Goyal' building_man_pages = 'man' in sys.argv # The short X.Y version version = str_version # The full version, including alpha/beta/rc tags release = str_version logger = getLogger(__name__) # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.7' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The master toctree document. master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path . exclude_patterns = [ '_build', 'Thumbs.db', '.DS_Store', 'generated/cli-*.rst', 'generated/conf-*.rst' ] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' rst_prolog = ''' .. |kitty| replace:: *kitty* .. |version| replace:: VERSION .. _tarball: https://github.com/kovidgoyal/kitty/releases/download/vVERSION/kitty-VERSION.tar.xz .. role:: green .. role:: italic .. role:: bold .. role:: cyan .. role:: title .. role:: env '''.replace('VERSION', str_version) # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = { 'logo': 'kitty.png', 'show_powered_by': False, 'fixed_sidebar': True, 'sidebar_collapse': True, 'github_button': False, 'github_banner': True, 'github_user': 'kovidgoyal', 'github_repo': 'kitty', # increase contrast of link color with text color 'link': '#00587d', 'link_hover': 'green', } # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static', '../logo/kitty.png'] html_context = { 'css_files': ['_static/custom.css'] } html_favicon = '../logo/kitty.png' # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # html_sidebars = { '**': [ 'about.html', 'support.html', 'searchbox.html', 'localtoc.html', 'relations.html', ] } html_show_sourcelink = False # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('invocation', 'kitty', 'kitty Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'kitty', 'kitty Documentation', author, 'kitty', 'A cross-platform, fast, feature full, GPU based terminal emulator', 'Miscellaneous'), ] # }}} # GitHub linking inline roles {{{ def num_role(which, name, rawtext, text, lineno, inliner, options={}, content=[]): ' Link to a github issue ' try: issue_num = int(text) if issue_num <= 0: raise ValueError except ValueError: msg = inliner.reporter.error( 'GitHub issue number must be a number greater than or equal to 1; ' '"%s" is invalid.' % text, line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] url = f'https://github.com/kovidgoyal/kitty/{which}/{issue_num}' set_classes(options) node = nodes.reference(rawtext, f'#{issue_num}', refuri=url, **options) return [node], [] def commit_role(name, rawtext, text, lineno, inliner, options={}, content=[]): ' Link to a github commit ' try: commit_id = subprocess.check_output(f'git rev-list --max-count=1 --skip=# {text}'.split()).decode('utf-8').strip() except Exception: msg = inliner.reporter.error( f'GitHub commit id "{text}" not recognized.', line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] url = f'https://github.com/kovidgoyal/kitty/commit/{commit_id}' set_classes(options) short_id = subprocess.check_output(f'git rev-list --max-count=1 --abbrev-commit --skip=# {commit_id}'.split()).decode('utf-8').strip() node = nodes.reference(rawtext, f'commit: {short_id}', refuri=url, **options) return [node], [] # }}} # Sidebar ToC {{{ def create_toc(app, pagename): tt = TocTree(app.env) toctree = tt.get_toc_for(pagename, app.builder) if toctree is not None: subtree = toctree[toctree.first_child_matching_class(nodes.list_item)] bl = subtree.first_child_matching_class(nodes.bullet_list) if bl is None: return # Empty ToC subtree = subtree[bl] # for li in subtree.traverse(nodes.list_item): # modify_li(li) # subtree['ids'] = [ID] return app.builder.render_partial(subtree)['fragment'] def add_html_context(app, pagename, templatename, context, *args): if 'toc' in context: context['toc'] = create_toc(app, pagename) or context['toc'] # }}} # CLI docs {{{ def write_cli_docs(all_kitten_names): from kitty.launch import options_spec as launch_options_spec from kitty.cli import option_spec_as_rst with open('generated/launch.rst', 'w') as f: f.write(option_spec_as_rst( appname='launch', ospec=launch_options_spec, heading_char='_', message='''\ Launch an arbitrary program in a new kitty window/tab. Note that if you specify a program-to-run you can use the special placeholder :code:`@selection` which will be replaced by the current selection. ''' )) with open('generated/cli-kitty.rst', 'w') as f: f.write(option_spec_as_rst(appname='kitty').replace( 'kitty --to', 'kitty @ --to')) as_rst = partial(option_spec_as_rst, heading_char='_') from kitty.remote_control import global_options_spec, cli_msg, cmap, all_commands with open('generated/cli-kitty-at.rst', 'w') as f: p = partial(print, file=f) p('kitty @\n' + '-' * 80) p('.. program::', 'kitty @') p('\n\n' + as_rst( global_options_spec, message=cli_msg, usage='command ...', appname='kitty @')) from kitty.cmds import cli_params_for for cmd_name in all_commands: func = cmap[cmd_name] p(f'.. _at_{func.name}:\n') p('kitty @', func.name + '\n' + '-' * 120) p('.. program::', 'kitty @', func.name) p('\n\n' + as_rst(*cli_params_for(func))) from kittens.runner import get_kitten_cli_docs for kitten in all_kitten_names: data = get_kitten_cli_docs(kitten) if data: with open(f'generated/cli-kitten-{kitten}.rst', 'w') as f: p = partial(print, file=f) p('.. program::', f'kitty +kitten {kitten}') p('\n\n' + option_spec_as_rst( data['options'], message=data['help_text'], usage=data['usage'], appname=f'kitty +kitten {kitten}', heading_char='^')) # }}} def write_remote_control_protocol_docs(): # {{{ from kitty.cmds import cmap field_pat = re.compile(r'\s*([a-zA-Z0-9_+]+)\s*:\s*(.+)') def format_cmd(p, name, cmd): p(name) p('-' * 80) lines = cmd.__doc__.strip().splitlines() fields = [] for line in lines: m = field_pat.match(line) if m is None: p(line) else: fields.append((m.group(1), m.group(2))) if fields: p('\nFields are:\n') for (name, desc) in fields: if '+' in name: title = name.replace('+', ' (required)') else: title = name defval = cmd.get_default(name.replace('-', '_'), cmd) if defval is not cmd: title = f'{title} (default: {defval})' else: title = f'{title} (optional)' p(f':code:`{title}`') p(' ', desc), p() p(), p() with open(f'generated/rc.rst', 'w') as f: p = partial(print, file=f) for name in sorted(cmap): cmd = cmap[name] if not cmd.__doc__: continue name = name.replace('_', '-') format_cmd(p, name, cmd) # }}} # config file docs {{{ class ConfLexer(RegexLexer): name = 'Conf' aliases = ['conf'] filenames = ['*.conf'] tokens = { 'root': [ (r'#.*?$', Comment.Single), (r'\s+$', Whitespace), (r'\s+', Whitespace), (r'(include)(\s+)(.+?)$', bygroups(Comment.Preproc, Whitespace, Name.Namespace)), (r'(map)(\s+)(\S+)(\s+)', bygroups( Keyword.Declaration, Whitespace, String, Whitespace), 'action'), (r'(symbol_map)(\s+)(\S+)(\s+)(.+?)$', bygroups( Keyword.Declaration, Whitespace, String, Whitespace, Literal)), (r'([a-zA-Z_0-9]+)(\s+)', bygroups( Name.Variable, Whitespace), 'args'), ], 'action': [ (r'[a-z_0-9]+$', Name.Function, 'root'), (r'[a-z_0-9]+', Name.Function, 'args'), ], 'args': [ (r'\s+', Whitespace, 'args'), (r'\b(yes|no)\b$', Number.Bin, 'root'), (r'\b(yes|no)\b', Number.Bin, 'args'), (r'[+-]?[0-9]+\s*$', Number.Integer, 'root'), (r'[+-]?[0-9.]+\s*$', Number.Float, 'root'), (r'[+-]?[0-9]+', Number.Integer, 'args'), (r'[+-]?[0-9.]+', Number.Float, 'args'), (r'#[a-fA-F0-9]{3,6}\s*$', String, 'root'), (r'#[a-fA-F0-9]{3,6}\s*', String, 'args'), (r'.+', String, 'root'), ], } class SessionLexer(RegexLexer): name = 'Session' aliases = ['session'] filenames = ['*.session'] tokens = { 'root': [ (r'#.*?$', Comment.Single), (r'[a-z][a-z0-9_]+', Name.Function, 'args'), ], 'args': [ (r'.*?$', Literal, 'root'), ] } def link_role(name, rawtext, text, lineno, inliner, options={}, content=[]): m = re.match(r'(.+)\s+<(.+?)>', text) if m is None: msg = inliner.reporter.error(f'link "{text}" not recognized', line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] text, url = m.group(1, 2) set_classes(options) node = nodes.reference(rawtext, text, refuri=url, **options) return [node], [] def expand_opt_references(conf_name, text): conf_name += '.' def expand(m): ref = m.group(1) if '<' not in ref and '.' not in ref: full_ref = conf_name + ref return ':opt:`{} <{}>`'.format(ref, full_ref) return m.group() return re.sub(r':opt:`(.+?)`', expand, text) opt_aliases = {} shortcut_slugs = {} def parse_opt_node(env, sig, signode): """Transform an option description into RST nodes.""" count = 0 firstname = '' for potential_option in sig.split(', '): optname = potential_option.strip() if count: signode += addnodes.desc_addname(', ', ', ') text = optname.split('.', 1)[-1] signode += addnodes.desc_name(text, text) if not count: firstname = optname signode['allnames'] = [optname] else: signode['allnames'].append(optname) opt_aliases[optname] = firstname count += 1 if not firstname: raise ValueError('{} is not a valid opt'.format(sig)) return firstname def parse_shortcut_node(env, sig, signode): """Transform a shortcut description into RST nodes.""" conf_name, text = sig.split('.', 1) signode += addnodes.desc_name(text, text) return sig def render_conf(conf_name, all_options): from kitty.conf.definition import merged_opts, Option ans = ['.. default-domain:: conf', ''] a = ans.append current_group = None all_options = list(all_options) kitty_mod = 'kitty_mod' def render_group(group): a('') a(f'.. _conf-{conf_name}-{group.name}:') a('') a(group.short_text) heading_level = '+' if '.' in group.name else '^' a(heading_level * (len(group.short_text) + 20)) a('') if group.start_text: a(group.start_text) a('') def handle_group_end(group): if group.end_text: a(''), a(current_group.end_text) def handle_group(new_group, new_group_is_shortcut=False): nonlocal current_group if new_group is not current_group: if current_group: handle_group_end(current_group) current_group = new_group render_group(current_group) def handle_option(i, opt): nonlocal kitty_mod if not opt.long_text or not opt.add_to_docs: return handle_group(opt.group) if opt.name == 'kitty_mod': kitty_mod = opt.defval_as_string mopts = list(merged_opts(all_options, opt, i)) a('.. opt:: ' + ', '.join(conf_name + '.' + mo.name for mo in mopts)) a('.. code-block:: conf') a('') sz = max(len(x.name) for x in mopts) for mo in mopts: a((' {:%ds} {}' % sz).format(mo.name, mo.defval_as_string)) a('') if opt.long_text: a(expand_opt_references(conf_name, opt.long_text)) a('') def handle_shortcuts(shortcuts): sc = shortcuts[0] handle_group(sc.group, True) sc_text = f'{conf_name}.{sc.short_text}' a('.. shortcut:: ' + sc_text) shortcuts = [s for s in shortcuts if s.add_to_default] shortcut_slugs[f'{conf_name}.{sc.name}'] = (sc_text, sc.key.replace('kitty_mod', kitty_mod)) if shortcuts: a('.. code-block:: conf') a('') for x in shortcuts: if x.add_to_default: a(' map {} {}'.format(x.key.replace('kitty_mod', kitty_mod), x.action_def)) a('') if sc.long_text: a(expand_opt_references(conf_name, sc.long_text)) a('') for i, opt in enumerate(all_options): if isinstance(opt, Option): handle_option(i, opt) else: handle_shortcuts(opt) if current_group: handle_group_end(current_group) return '\n'.join(ans) def process_opt_link(env, refnode, has_explicit_title, title, target): conf_name, opt = target.partition('.')[::2] if not opt: conf_name, opt = 'kitty', conf_name full_name = conf_name + '.' + opt return title, opt_aliases.get(full_name, full_name) def process_shortcut_link(env, refnode, has_explicit_title, title, target): conf_name, slug = target.partition('.')[::2] if not slug: conf_name, slug = 'kitty', conf_name full_name = conf_name + '.' + slug try: target, stitle = shortcut_slugs[full_name] except KeyError: logger.warning('Unknown shortcut: {}'.format(target), location=refnode) else: if not has_explicit_title: title = stitle return title, target def write_conf_docs(app, all_kitten_names): app.add_lexer('conf', ConfLexer()) app.add_object_type( 'opt', 'opt', indextemplate="pair: %s; Config Setting", parse_node=parse_opt_node, ) # Warn about opt references that could not be resolved opt_role = app.registry.domain_roles['std']['opt'] opt_role.warn_dangling = True opt_role.process_link = process_opt_link app.add_object_type( 'shortcut', 'sc', indextemplate="pair: %s; Keyboard Shortcut", parse_node=parse_shortcut_node, ) sc_role = app.registry.domain_roles['std']['sc'] sc_role.warn_dangling = True sc_role.process_link = process_shortcut_link def generate_default_config(all_options, name): from kitty.conf.definition import as_conf_file with open(f'generated/conf-{name}.rst', 'w', encoding='utf-8') as f: print('.. highlight:: conf\n', file=f) f.write(render_conf(name, all_options.values())) conf_name = re.sub(r'^kitten-', '', name) + '.conf' with open(f'generated/conf/{conf_name}', 'w', encoding='utf-8') as f: text = '\n'.join(as_conf_file(all_options.values())) print(text, file=f) from kitty.config_data import all_options generate_default_config(all_options, 'kitty') from kittens.runner import get_kitten_conf_docs for kitten in all_kitten_names: all_options = get_kitten_conf_docs(kitten) if all_options: generate_default_config(all_options, f'kitten-{kitten}') # }}} def setup(app): os.makedirs('generated/conf', exist_ok=True) from kittens.runner import all_kitten_names all_kitten_names = all_kitten_names() write_cli_docs(all_kitten_names) write_remote_control_protocol_docs() write_conf_docs(app, all_kitten_names) app.add_lexer('session', SessionLexer()) app.add_role('link', link_role) app.add_role('iss', partial(num_role, 'issues')) app.add_role('pull', partial(num_role, 'pull')) app.add_role('commit', commit_role) app.connect('html-page-context', add_html_context) kitty-0.15.0/docs/conf.rst000066400000000000000000000027331356737523400153740ustar00rootroot00000000000000:tocdepth: 2 Configuring kitty =============================== .. highlight:: conf |kitty| is highly customizable, everything from keyboard shortcuts, to painting frames-per-second. See below for an overview of all customization possibilities. You can open the config file within kitty by pressing :sc:`edit_config_file`. You can also display the current configuration by running ``kitty --debug-config``. .. _confloc: |kitty| looks for a config file in the OS config directories (usually :file:`~/.config/kitty/kitty.conf`) but you can pass a specific path via the :option:`kitty --config` option or use the ``KITTY_CONFIG_DIRECTORY`` environment variable. See the :option:`kitty --config` option for full details. Comments can be added to the config file as lines starting with the ``#`` character. This works only if the ``#`` character is the first character in the line. You can include secondary config files via the :code:`include` directive. If you use a relative path for include, it is resolved with respect to the location of the current config file. Note that environment variables are expanded, so :code:`${USER}.conf` becomes :file:`name.conf` if :code:`USER=name`. For example:: include other.conf .. include:: /generated/conf-kitty.rst Sample kitty.conf ^^^^^^^^^^^^^^^^^^^^^ You can download a sample :file:`kitty.conf` file with all default settings and comments describing each setting by clicking: :download:`sample kitty.conf `. kitty-0.15.0/docs/faq.rst000066400000000000000000000235631356737523400152220ustar00rootroot00000000000000Frequently Asked Questions ============================== .. highlight:: sh .. contents:: Some special symbols are rendered small/truncated in kitty? ----------------------------------------------------------- The number of cells a unicode character takes up are controlled by the unicode standard. All characters are rendered in a single cell unless the unicode standard says they should be rendered in two cells. When a symbol does not fit, it will either be rescaled to be smaller or truncated (depending on how much extra space it needs). This is often different from other terminals which just let the character overflow into neighboring cells, which is fine if the neighboring cell is empty, but looks terrible if it is not. Some programs, like powerline, vim with fancy gutter symbols/status-bar, etc. misuse unicode characters from the private use area to represent symbols. Often these symbols are square and should be rendered in two cells. However, since private use area symbols all have their width set to one in the unicode standard, |kitty| renders them either smaller or truncated. The exception is if these characters are followed by a space or empty cell in which case kitty makes use of the extra cell to render them in two cells. Using a color theme with a background color does not work well in vim? ----------------------------------------------------------------------- First make sure you have not changed the TERM environment variable, it should be ``xterm-kitty``. vim uses *background color erase* even if the terminfo file does not contain the ``bce`` capability. This is a bug in vim. You can work around it by adding the following to your vimrc:: let &t_ut='' See :ref:`here ` for why |kitty| does not support background color erase. I get errors about the terminal being unknown or opening the terminal failing when SSHing into a different computer? ----------------------------------------------------------------------------------------------------------------------- This happens because the |kitty| terminfo files are not available on the server. You can ssh in using the following command which will automatically copy the terminfo files to the server:: kitty +kitten ssh myserver If for some reason that does not work (typically because the server is using a non POSIX compliant shell), you can use the following one-liner instead (it is slower as it needs to ssh into the server twice, but will work with most servers):: infocmp xterm-kitty | ssh myserver tic -x -o \~/.terminfo /dev/stdin If you are behind a proxy (like Balabit) that prevents this, you must redirect the 1st command to a file, copy that to the server and run ``tic`` manually. If you connect to a server, embedded or Android system that doesn't have ``tic``, copy over your local file terminfo to the other system as :file:`~/.terminfo/x/xterm-kitty`. Really, the correct solution for this is to convince the OpenSSH maintainers to have ssh do this automatically, if possible, when connecting to a server, so that all terminals work transparently. If the server is running FreeBSD, or another system that relies on termcap rather than terminfo, you will need to convert the terminfo file on your local machine by running (on local machine with |kitty|):: infocmp -C xterm-kitty The output of this command is the termcap description, which should be appended to :file:`/usr/share/misc/termcap` on the remote server. Then run the following command to apply your change (on the server):: cap_mkdb /usr/share/misc/termcap Keys such as arrow keys, backspace, delete, home/end, etc. do not work when using su or sudo? ------------------------------------------------------------------------------------------------- Make sure the TERM environment variable, is ``xterm-kitty``. And either the TERMINFO environment variable points to a directory containing :file:`x/xterm-kitty` or that file is under :file:`~/.terminfo/x/`. Note that ``sudo`` might remove TERMINFO. Then setting it at the shell prompt can be too late, because command line editing may not be reinitialized. In that case you can either ask ``sudo`` to set it or if that is not supported, insert an ``env`` command before starting the shell, or, if not possible, after sudo start another Shell providing the right terminfo path:: sudo … TERMINFO=$HOME/.terminfo bash -i sudo … env TERMINFO=$HOME/.terminfo bash -i TERMINFO=/home/ORIGINALUSER/.terminfo exec bash -i You can configure sudo to preserve TERMINFO by running ``sudo visudo`` and adding the following line:: Defaults env_keep += "TERM TERMINFO" If you have double width characters in your prompt, you may also need to explicitly set a UTF-8 locale, like:: export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 How do I change the colors in a running kitty instance? ------------------------------------------------------------ You can either use the `OSC terminal escape codes `_ to set colors or you can define keyboard shortcuts to set colors, for example:: map f1 set_colors --configured /path/to/some/config/file/colors.conf Or you can enable :doc:`remote control ` for |kitty| and use :ref:`at_set-colors`. The shortcut mapping technique has the same syntax as the remote control command, for details, see :ref:`at_set-colors`. A list of pre-made color themes for kitty is available at: `kitty-themes `_ Examples of using OSC escape codes to set colors:: Change the default foreground color: printf '\x1b]10;#ff0000\x1b\\' Change the default background color: printf '\x1b]11;blue\x1b\\' Change the cursor color: printf '\x1b]12;blue\x1b\\' Change the selection background color: printf '\x1b]17;blue\x1b\\' Change the selection foreground color: printf '\x1b]19;blue\x1b\\' Change the nth color (0 - 255): printf '\x1b]4;n;green\x1b\\' You can use various syntaxes/names for color specifications in the above examples. See `XParseColor `_ for full details. If a ``?`` is given rather than a color specification, kitty will respond with the current value for the specified color. How do I specify command line options for kitty on macOS? --------------------------------------------------------------- Apple does not want you to use command line options with GUI applications. To workaround that limitation, |kitty| will read command line options from the file :file:`/macos-launch-services-cmdline` when it is launched from the GUI, i.e. by clicking the |kitty| application icon or using ``open -a kitty``. Note that this file is *only read* when running via the GUI. You can, of course, also run |kitty| from a terminal with command line options, using: :file:`/Applications/kitty.app/Contents/MacOS/kitty`. And within |kitty| itself, you can always run |kitty| using just `kitty` as it cleverly adds itself to the ``PATH``. kitty is not able to use my favorite font? --------------------------------------------- |kitty| achieves its stellar performance by caching alpha masks of each rendered character on the GPU, so that every character needs to be rendered only once. This means it is a strictly character cell based display. As such it can use only monospace fonts, since every cell in the grid has to be the same size. If your font is not listed in ``kitty list-fonts`` it means that it is not monospace. On Linux you can list all monospace fonts with:: fc-list : family spacing | grep -e spacing=100 -e spacing=90 Note that the spacing property is calculated by fontconfig based on actual glyph widths in the font. If for some reason fontconfig concludes your favorite monospace font does not have ``spacing=100`` you can override it by using the following :file:`~/.config/fontconfig/fonts.conf`:: Your Font Family Name 100 After creating (or modifying) this file, you may need to run the following command to rebuild your fontconfig cache:: fc-cache -r Then, the font will be available in ``kitty list-fonts``. How can I assign a single global shortcut to bring up the kitty terminal? ----------------------------------------------------------------------------- Bringing up applications on a single key press is the job of the window manager/desktop environment. For ways to do it with kitty (or indeed any terminal) in different environments, see `here `_. How do I map key presses in kitty to different keys in the terminal program? -------------------------------------------------------------------------------------- This is accomplished by using ``map`` with :sc:`send_text ` in :file:`kitty.conf`. For example:: map alt+s send_text all \x13 This maps :kbd:`alt+s` to :kbd:`ctrl+s`. To figure out what bytes to use for the :sc:`send_text ` you can use the ``showkey`` utility. Run:: showkey -a Then press the key you want to emulate. On macOS, this utility is currently not available. The manual way to figure it out is: 1. Look up your key's decimal value in the table at the bottom of `this page `_ or any ANSI escape sequence table. There are different modifiers for :kbd:`ctrl`, :kbd:`alt`, etc. For e.g., for :kbd:`ctrl+s`, find the ``S`` row and look at the third column value, ``19``. 2. Convert the decimal value to hex with ``kitty +runpy "print(hex(19))"``. This shows the hex value, ``13`` in this case. 3. Use ``\x(hexval)`` in your ``send_text`` command in kitty. So in this example, ``\x13`` kitty-0.15.0/docs/graphics-protocol.rst000066400000000000000000000502631356737523400201070ustar00rootroot00000000000000:tocdepth: 3 The terminal graphics protocol ================================== The goal of this specification is to create a flexible and performant protocol that allows the program running in the terminal, hereafter called the *client*, to render arbitrary pixel (raster) graphics to the screen of the terminal emulator. The major design goals are * Should not require terminal emulators to understand image formats. * Should allow specifying graphics to be drawn at individual pixel positions. * The graphics should integrate with the text, in particular it should be possible to draw graphics below as well as above the text, with alpha blending. The graphics should also scroll with the text, automatically. * Should use optimizations when the client is running on the same computer as the terminal emulator. For some discussion regarding the design choices, see `#33 `_. To see a quick demo, inside a |kitty| terminal run:: kitty +kitten icat path/to/some/image.png You can also see a screenshot with more sophisticated features such as alpha-blending and text over graphics. .. image:: https://user-images.githubusercontent.com/1308621/31647475-1188ab66-b326-11e7-8d26-24b937f1c3e8.png :alt: Demo of graphics rendering in kitty :align: center Some programs that use the kitty graphics protocol: * `termpdf `_ - a terminal PDF/DJVU/CBR viewer * `ranger `_ - a terminal file manager, with image previews, see this `PR `_ * :doc:`kitty-diff ` - a side-by-side terminal diff program with support for images * `neofetch `_ - A command line system information tool .. contents:: Getting the window size ------------------------- In order to know what size of images to display and how to position them, the client must be able to get the window size in pixels and the number of cells per row and column. This can be done by using the ``TIOCGWINSZ`` ioctl. Some code to demonstrate its use In C: .. code-block:: c struct ttysize ts; ioctl(0, TIOCGWINSZ, &ts); printf("number of columns: %i, number of rows: %i, screen width: %i, screen height: %i\n", sz.ws_col, sz.ws_row, sz.ws_xpixel, sz.ws_ypixel); In Python: .. code-block:: python import array, fcntl, termios buf = array.array('H', [0, 0, 0, 0]) fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ, buf) print('number of columns: {}, number of rows: {}, screen width: {}, screen height: {}'.format(*buf)) Note that some terminals return ``0`` for the width and height values. Such terminals should be modified to return the correct values. Examples of terminals that return correct values: ``kitty, xterm`` You can also use the *CSI t* escape code to get the screen size. Send ``[14t`` to *stdout* and kitty will reply on *stdin* with ``[4;;t`` where *height* and *width* are the window size in pixels. This escape code is supported in many terminals, not just kitty. A minimal example ------------------ Some minimal python code to display PNG images in kitty, using the most basic features of the graphics protocol: .. code-block:: python import sys from base64 import standard_b64encode def serialize_gr_command(cmd, payload=None): cmd = ','.join('{}={}'.format(k, v) for k, v in cmd.items()) ans = [] w = ans.append w(b'\033_G'), w(cmd.encode('ascii')) if payload: w(b';') w(payload) w(b'\033\\') return b''.join(ans) def write_chunked(cmd, data): data = standard_b64encode(data) while data: chunk, data = data[:4096], data[4096:] m = 1 if data else 0 cmd['m'] = m sys.stdout.buffer.write(serialize_gr_command(cmd, chunk)) sys.stdout.flush() cmd.clear() with open(sys.argv[-1], 'rb') as f: write_chunked({'a': 'T', 'f': 100}, f.read()) Save this script as :file:`png.py`, then you can use it to display any PNG file in kitty as:: python png.py file.png The graphics escape code --------------------------- All graphics escape codes are of the form:: _G;\ This is a so-called *Application Programming Command (APC)*. Most terminal emulators ignore APC codes, making it safe to use. The control data is a comma-separated list of ``key=value`` pairs. The payload is arbitrary binary data, base64-encoded to prevent interoperation problems with legacy terminals that get confused by control codes within an APC code. The meaning of the payload is interpreted based on the control data. The first step is to transmit the actual image data. Transferring pixel data -------------------------- The first consideration when transferring data between the client and the terminal emulator is the format in which to do so. Since there is a vast and growing number of image formats in existence, it does not make sense to have every terminal emulator implement support for them. Instead, the client should send simple pixel data to the terminal emulator. The obvious downside to this is performance, especially when the client is running on a remote machine. Techniques for remedying this limitation are discussed later. The terminal emulator must understand pixel data in three formats, 24-bit RGB, 32-bit RGBA and PNG. This is specified using the ``f`` key in the control data. ``f=32`` (which is the default) indicates 32-bit RGBA data and ``f=24`` indicates 24-bit RGB data and ``f=100`` indicates PNG data. The PNG format is supported for convenience and a compact way of transmitting paletted images. RGB and RGBA data ~~~~~~~~~~~~~~~~~~~ In these formats the pixel data is stored directly as 3 or 4 bytes per pixel, respectively. When specifying images in this format, the image dimensions **must** be sent in the control data. For example:: _Gf=24,s=10,v=20;\ Here the width and height are specified using the ``s`` and ``v`` keys respectively. Since ``f=24`` there are three bytes per pixel and therefore the pixel data must be ``3 * 10 * 20 = 600`` bytes. PNG data ~~~~~~~~~~~~~~~ In this format any PNG image can be transmitted directly. For example:: _Gf=100;\ The PNG format is specified using the ``f=100`` key. The width and height of the image will be read from the PNG data itself. Note that if you use both PNG and compression, then you must provide the ``S`` key with the size of the PNG data. Compression ~~~~~~~~~~~~~ The client can send compressed image data to the terminal emulator, by specifying the ``o`` key. Currently, only zlib based deflate compression is supported, which is specified using ``o=z``. For example:: _Gf=24,s=10,v=20,o=z;\ This is the same as the example from the RGB data section, except that the payload is now compressed using deflate. The terminal emulator will decompress it before rendering. You can specify compression for any format. The terminal emulator will decompress before interpreting the pixel data. The transmission medium ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The transmission medium is specified using the ``t`` key. The ``t`` key defaults to ``d`` and can take the values: ================== ============ Value of `t` Meaning ================== ============ ``d`` Direct (the data is transmitted within the escape code itself) ``f`` A simple file ``t`` A temporary file, the terminal emulator will delete the file after reading the pixel data. For security reasons the terminal emulator should only delete the file if it is in a known temporary directory, such as :file:`/tmp`, :file:`/dev/shm`, :file:`TMPDIR env var if present` and any platform specific temporary directories. ``s`` A `POSIX shared memory object `_. The terminal emulator will delete it after reading the pixel data ================== ============ Local client ^^^^^^^^^^^^^^ First let us consider the local client techniques (files and shared memory). Some examples:: _Gf=100,t=f;\ Here we tell the terminal emulator to read PNG data from the specified file of the specified size:: _Gs=10,v=2,t=s,o=z;\ Here we tell the terminal emulator to read compressed image data from the specified shared memory object. The client can also specify a size and offset to tell the terminal emulator to only read a part of the specified file. The is done using the ``S`` and ``O`` keys respectively. For example:: _Gs=10,v=2,t=s,S=80,O=10;\ This tells the terminal emulator to read ``80`` bytes starting from the offset ``10`` inside the specified shared memory buffer. Remote client ^^^^^^^^^^^^^^^^ Remote clients, those that are unable to use the filesystem/shared memory to transmit data, must send the pixel data directly using escape codes. Since escape codes are of limited maximum length, the data will need to be chunked up for transfer. This is done using the ``m`` key. The pixel data must first be base64 encoded then chunked up into chunks no larger than ``4096`` bytes. The client then sends the graphics escape code as usual, with the addition of an ``m`` key that must have the value ``1`` for all but the last chunk, where it must be ``0``. For example, if the data is split into three chunks, the client would send the following sequence of escape codes to the terminal emulator:: _Gs=100,v=30,m=1;\ _Gm=1;\ _Gm=0;\ Note that only the first escape code needs to have the full set of control codes such as width, height, format etc. Subsequent chunks must have only the ``m`` key. The client **must** finish sending all chunks for a single image before sending any other graphics related escape codes. Note that the cursor position used to display the image **must** be the position when the final chunk is received. Finally, terminals must not display anything, until the entire sequence is received and validated. Detecting available transmission mediums ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Since a client has no a-priori knowledge of whether it shares a filesystem/shared memory with the terminal emulator, it can send an id with the control data, using the ``i`` key (which can be an arbitrary positive integer up to 4294967295, it must not be zero). If it does so, the terminal emulator will reply after trying to load the image, saying whether loading was successful or not. For example:: _Gi=31,s=10,v=2,t=s;\ to which the terminal emulator will reply (after trying to load the data):: _Gi=31;error message or OK\ Here the ``i`` value will be the same as was sent by the client in the original request. The message data will be a ASCII encoded string containing only printable characters and spaces. The string will be ``OK`` if reading the pixel data succeeded or an error message. Sometimes, using an id is not appropriate, for example, if you do not want to replace a previously sent image with the same id, or if you are sending a dummy image and do not want it stored by the terminal emulator. In that case, you can use the *query action*, set ``a=q``. Then the terminal emulator will try to load the image and respond with either OK or an error, as above, but it will not replace an existing image with the same id, nor will it store the image. Display images on screen ----------------------------- Every transmitted image can be displayed an arbitrary number of times on the screen, in different locations, using different parts of the source image, as needed. You can either simultaneously transmit and display an image using the action ``a=T``, or first transmit the image with a id, such as ``i=10`` and then display it with ``a=p,i=10`` which will display the previously transmitted image at the current cursor position. When specifying an image id, the terminal emulator will reply with an acknowledgement code, which will be either:: _Gi=;OK\ when the image referred to by id was found, or:: _Gi=;ENOENT:\ when the image with the specified id was not found. This is similar to the scheme described above for querying available transmission media, except that here we are querying if the image with the specified id is available or needs to be re-transmitted. Controlling displayed image layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The image is rendered at the current cursor position, from the upper left corner of the current cell. You can also specify extra ``X=3`` and ``Y=4`` pixel offsets to display from a different origin within the cell. Note that the offsets must be smaller that the size of the cell. By default, the entire image will be displayed (images wider than the available width will be truncated on the right edge). You can choose a source rectangle (in pixels) as the part of the image to display. This is done with the keys: ``x, y, w, h`` which specify the top-left corner, width and height of the source rectangle. You can also ask the terminal emulator to display the image in a specified rectangle (num of columns / num of lines), using the control codes ``c,r``. ``c`` is the number of columns and `r` the number of rows. The image will be scaled (enlarged/shrunk) as needed to fit the specified area. Note that if you specify a start cell offset via the ``X,Y`` keys, it is not added to the number of rows/columns. Finally, you can specify the image *z-index*, i.e. the vertical stacking order. Images placed in the same location with different z-index values will be blended if they are semi-transparent. You can specify z-index values using the ``z`` key. Negative z-index values mean that the images will be drawn under the text. This allows rendering of text on top of images. Deleting images --------------------- Images can be deleted by using the delete action ``a=d``. If specified without any other keys, it will delete all images visible on screen. To delete specific images, use the `d` key as described in the table below. Note that each value of d has both a lowercase and an uppercase variant. The lowercase variant only deletes the images without necessarily freeing up the stored image data, so that the images can be re-displayed without needing to resend the data. The uppercase variants will delete the image data as well, provided that the image is not referenced elsewhere, such as in the scrollback buffer. The values of the ``x`` and ``y`` keys are the same as cursor positions (i.e. ``x=1, y=1`` is the top left cell). ================= ============ Value of ``d`` Meaning ================= ============ ``a`` or ``A`` Delete all images visible on screen ``i`` or ``I`` Delete all images with the specified id, specified using the ``i`` key. ``c`` or ``C`` Delete all images that intersect with the current cursor position. ``p`` or ``P`` Delete all images that intersect a specific cell, the cell is specified using the ``x`` and ``y`` keys ``q`` or ``Q`` Delete all images that intersect a specific cell having a specific z-index. The cell and z-index is specified using the ``x``, ``y`` and ``z`` keys. ``x`` or ``X`` Delete all images that intersect the specified column, specified using the ``x`` key. ``y`` or ``Y`` Delete all images that intersect the specified row, specified using the ``y`` key. ``z`` or ``Z`` Delete all images that have the specified z-index, specified using the ``z`` key. ================= ============ Some examples:: _Ga=d\ # delete all visible images _Ga=d,i=10\ # delete the image with id=10 _Ga=Z,z=-1\ # delete the images with z-index -1, also freeing up image data _Ga=P,x=3,y=4\ # delete all images that intersect the cell at (3, 4) Image persistence and storage quotas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In order to avoid *Denial-of-Service* attacks, terminal emulators should have a maximum storage quota for image data. It should allow at least a few full screen images. For example the quota in kitty is 320MB per buffer. When adding a new image, if the total size exceeds the quota, the terminal emulator should delete older images to make space for the new one. Control data reference --------------------------- The table below shows all the control data keys as well as what values they can take, and the default value they take when missing. All integers are 32-bit. ======= ==================== ========= ================= Key Value Default Description ======= ==================== ========= ================= ``a`` Single character. ``t`` The overall action this graphics command is performing. ``(t, T, q, p, d)`` **Keys for image transmission** ----------------------------------------------------------- ``f`` Positive integer. ``32`` The format in which the image data is sent. ``(24, 32, 100)``. ``t`` Single character. ``d`` The transmission medium used. ``(d, f, t, s)``. ``s`` Positive integer. ``0`` The width of the image being sent. ``v`` Positive integer. ``0`` The height of the image being sent. ``S`` Positive integer. ``0`` The size of data to read from a file. ``O`` Positive integer. ``0`` The offset from which to read data from a file. ``i`` Positive integer. ``(0 - 4294967295)`` ``0`` The image id ``o`` Single character. ``null`` The type of data compression. ``only z`` ``m`` zero or one ``0`` Whether there is more chunked data available. **Keys for image display** ----------------------------------------------------------- ``x`` Positive integer ``0`` The left edge (in pixels) of the image area to display ``y`` Positive integer ``0`` The top edge (in pixels) of the image area to display ``w`` Positive integer ``0`` The width (in pixels) of the image area to display. By default, the entire width is used. ``h`` Positive integer ``0`` The height (in pixels) of the image area to display. By default, the entire height is used ``X`` Positive integer ``0`` The x-offset within the first cell at which to start displaying the image ``Y`` Positive integer ``0`` The y-offset within the first cell at which to start displaying the image ``c`` Positive integer ``0`` The number of columns to display the image over ``r`` Positive integer ``0`` The number of rows to display the image over ``z`` Integer ``0`` The *z-index* vertical stacking order of the image **Keys for deleting images** ----------------------------------------------------------- ``d`` Single character. ``a`` What to delete. ``(a, A, c, C, i, I, p, P, q, Q, x, X, y, Y, z, Z)``. ======= ==================== ========= ================= Interaction with other terminal actions -------------------------------------------- When resetting the terminal, all images that are visible on the screen must be cleared. When switching from the main screen to the alternate screen buffer (1049 private mode) all images in the alternate screen must be cleared, just as all text is cleared. The clear screen escape code (usually ``[2J``) should also clear all images. This is so that the clear command works. The other commands to erase text must have no effect on graphics. The dedicated delete graphics commands must be used for those. When scrolling the screen (such as when using index cursor movement commands, or scrolling through the history buffer), images must be scrolled along with text. When page margins are defined and the index commands are used, only images that are entirely within the page area (between the margins) must be scrolled. When scrolling them would cause them to extend outside the page area, they must be clipped. kitty-0.15.0/docs/index.rst000066400000000000000000000464571356737523400155710ustar00rootroot00000000000000:tocdepth: 2 ========================================================== kitty - the fast, featureful, GPU based terminal emulator ========================================================== .. container:: major-features * Offloads rendering to the GPU for :doc:`lower system load ` and buttery smooth scrolling. Uses threaded rendering to minimize input latency. * Supports all modern terminal features: :doc:`graphics (images) `, unicode, true-color, OpenType ligatures, mouse protocol, focus tracking, `bracketed paste `_ and several :doc:`new terminal protocol extensions `. * Supports tiling multiple terminal windows side by side in different :ref:`layouts ` without needing to use an extra program like tmux * Can be :doc:`controlled from scripts or the shell prompt `, even over SSH. * Has a framework for :ref:`kittens`, small terminal programs that can be used to extend |kitty|'s functionality. For example, they are used for :doc:`Unicode input `, :doc:`Hints ` and :doc:`Side-by-side diff `. * Supports :ref:`startup sessions ` which allow you to specify the window/tab layout, working directories and programs to run on startup. * Cross-platform: |kitty| works on Linux and macOS, but because it uses only OpenGL for rendering, it should be trivial to port to other Unix-like platforms. * Allows you to open :ref:`the scrollback buffer ` in a separate window using arbitrary programs of your choice. This is useful for browsing the history comfortably in a pager or editor. * Has :ref:`multiple copy/paste buffers `, like vim. .. figure:: screenshots/screenshot.png :alt: Screenshot, showing three programs in the 'Tall' layout :align: center :scale: 100% Screenshot, showing vim, tig and git running in |kitty| with the 'Tall' layout .. _quickstart: Quickstart -------------- Pre-built binaries of |kitty| are available for both macOS and Linux. See the :doc:`binary install instructions `. You can also :doc:`build from source `. You can also use your favorite package manager to install the |kitty| package. |kitty| packages are available for: `macOS with Homebrew (Cask) `_, `macOS and Linux with Nix `_, `Ubuntu `_, `Debian `_, `openSUSE `_, `Arch Linux `_, `Gentoo `_, `Fedora `_, `Void Linux `_, and `Solus `_. See :doc:`Configuring kitty ` for help on configuring |kitty| and :doc:`Invocation ` for the command line arguments |kitty| supports. .. contents:: Design philosophy ------------------- |kitty| is designed for power keyboard users. To that end all its controls work with the keyboard (although it fully supports mouse interactions as well). Its configuration is a simple, human editable, single file for easy reproducibility (I like to store configuration in source control). The code in |kitty| is designed to be simple, modular and hackable. It is written in a mix of C (for performance sensitive parts) and Python (for easy hackability of the UI). It does not depend on any large and complex UI toolkit, using only OpenGL for rendering everything. Finally, |kitty| is designed from the ground up to support all modern terminal features, such as unicode, true color, bold/italic fonts, text formatting, etc. It even extends existing text formatting escape codes, to add support for features not available elsewhere, such as colored and styled (curly) underlines. One of the design goals of |kitty| is to be easily extensible so that new features can be added in the future with relatively little effort. Tabs and Windows ------------------- |kitty| is capable of running multiple programs organized into tabs and windows. The top level of organization is the *Tab*. Each tab consists of one or more *windows*. The windows can be arranged in multiple different layouts, like windows are organized in a tiling window manager. The keyboard controls (which are all customizable) for tabs and windows are: Scrolling ~~~~~~~~~~~~~~ ======================== ======================= Action Shortcut ======================== ======================= Scroll line up :sc:`scroll_line_up` (also :kbd:`⌥+⌘+⇞` and :kbd:`⌘+↑` on macOS) Scroll line down :sc:`scroll_line_down` (also :kbd:`⌥+⌘+⇟` and :kbd:`⌘+↓` on macOS) Scroll page up :sc:`scroll_page_up` (also :kbd:`⌘+⇞` on macOS) Scroll page down :sc:`scroll_page_down` (also :kbd:`⌘+⇟` on macOS) Scroll to top :sc:`scroll_home` (also :kbd:`⌘+↖` on macOS) Scroll to bottom :sc:`scroll_end` (also :kbd:`⌘+↘` on macOS) ======================== ======================= Tabs ~~~~~~~~~~~ ======================== ======================= Action Shortcut ======================== ======================= New tab :sc:`new_tab` (also :kbd:`⌘+t` on macOS) Close tab :sc:`close_tab` (also :kbd:`⌘+w` on macOS) Next tab :sc:`next_tab` (also :kbd:`^+⇥` and :kbd:`⇧+⌘+]` on macOS) Previous tab :sc:`previous_tab` (also :kbd:`⇧+^+⇥` and :kbd:`⇧+⌘+[` on macOS) Next layout :sc:`next_layout` Move tab forward :sc:`move_tab_forward` Move tab backward :sc:`move_tab_backward` Set tab title :sc:`set_tab_title` (also :kbd:`⇧+⌘+i` on macOS) ======================== ======================= Windows ~~~~~~~~~~~~~~~~~~ ======================== ======================= Action Shortcut ======================== ======================= New window :sc:`new_window` (also :kbd:`⌘+↩` on macOS) New OS window :sc:`new_os_window` (also :kbd:`⌘+n` on macOS) Close window :sc:`close_window` (also :kbd:`⇧+⌘+d` on macOS) Next window :sc:`next_window` Previous window :sc:`previous_window` Move window forward :sc:`move_window_forward` Move window backward :sc:`move_window_backward` Move window to top :sc:`move_window_to_top` Focus specific window :sc:`first_window`, :sc:`second_window` ... :sc:`tenth_window` (also :kbd:`⌘+1`, :kbd:`⌘+2` ... :kbd:`⌘+9` on macOS) (clockwise from the top-left) ======================== ======================= Additionally, you can define shortcuts in :file:`kitty.conf` to focus neighboring windows and move windows around (similar to window movement in vim):: map ctrl+left neighboring_window left map shift+left move_window right map ctrl+down neighboring_window down map shift+down move_window up ... You can also define a shortcut to switch to the previously active window:: map ctrl+p nth_window -1 ``nth_window`` will focus the nth window for positive numbers and the previously active windows for negative numbers. .. _detach_window: You can define shortcuts to detach the current window and move it to another tab or another OS window:: map ctrl+f2 detach_window # moves the window into a new OS window map ctrl+f3 detach_window new-tab # moves the window into a new Tab map ctrl+f4 detach_window ask # asks which tab to move the window into Similarly, you can detach the current tab, with:: map ctrl+f2 detach_tab # moves the tab into a new OS window map ctrl+f4 detach_tab ask # asks which OS Window to move the tab into Other keyboard shortcuts ---------------------------------- ================================== ======================= Action Shortcut ================================== ======================= Copy to clipboard :sc:`copy_to_clipboard` (also :kbd:`⌘+c` on macOS) Paste from clipboard :sc:`paste_from_clipboard` (also :kbd:`⌘+v` on macOS) Paste from selection :sc:`paste_from_selection` Increase font size :sc:`increase_font_size` (also :kbd:`⌘++` on macOS) Decrease font size :sc:`decrease_font_size` (also :kbd:`⌘+-` on macOS) Restore font size :sc:`reset_font_size` (also :kbd:`⌘+0` on macOS) Toggle fullscreen :sc:`toggle_fullscreen` (also :kbd:`^+⌘+f` on macOS) Toggle maximized :sc:`toggle_maximized` Input unicode character :sc:`input_unicode_character` Click URL using the keyboard :sc:`open_url` Reset the terminal :sc:`reset_terminal` Pass current selection to program :sc:`pass_selection_to_program` Edit |kitty| config file :sc:`edit_config_file` Open a |kitty| shell :sc:`kitty_shell` Increase background opacity :sc:`increase_background_opacity` Decrease background opacity :sc:`decrease_background_opacity` Full background opacity :sc:`full_background_opacity` Reset background opacity :sc:`reset_background_opacity` ================================== ======================= .. _layouts: Layouts ---------- A layout is an arrangement of multiple *windows*. You can create a new window using the :sc:`new_window` key combination. Currently, there are five layouts available, * **Stack** -- Only a single maximized window is shown at a time * **Tall** -- One window is shown full height on the left, the rest of the windows are shown one below the other on the right * **Fat** -- One window is shown full width on the top, the rest of the windows are shown side-by-side on the bottom * **Grid** -- All windows are shown in a grid * **Horizontal** -- All windows are shown side-by-side * **Vertical** -- All windows are shown one below the other You can switch between layouts using the :sc:`next_layout` key combination. You can also create shortcuts to select particular layouts, and choose which layouts you want to enable/disable, see :ref:`conf-kitty-shortcuts.layout` for examples. You can resize windows inside layouts. Press :sc:`start_resizing_window` (also :kbd:`⌘+r` on macOS) to enter resizing mode and follow the on-screen instructions. In a given window layout only some operations may be possible for a particular window. For example, in the Tall layout you can make the first window wider/narrower, but not taller/shorter. Note that what you are resizing is actually not a window, but a row/column in the layout, all windows in that row/column will be resized. You can also define shortcuts in :file:`kitty.conf` to make the active window wider, narrower, taller, or shorter by mapping to the ``resize_window`` action, for example:: map ctrl+left resize_window narrower map ctrl+right resize_window wider map ctrl+up resize_window taller map ctrl+down resize_window shorter 3 The ``resize_window`` action has a second, optional argument to control the resizing increment (a positive integer that defaults to 1). Some layouts take options to control their behavior. For example, the ``fat`` and ``tall`` layouts accept the ``bias`` option to control how the available space is split up. To specify the option, in :opt:`kitty.conf ` use:: enabled_layouts tall:bias=70 This will make the tall window occupy ``70%`` of available width. ``bias`` can be any number between 10 and 90. Writing a new layout only requires about a hundred lines of code, so if there is some layout you want, take a look at `layout.py `_ and submit a pull request! .. _kittens: Kittens ------------------ |kitty| has a framework for easily creating terminal programs that make use of its advanced features. These programs are called kittens. They are used both to add features to |kitty| itself and to create useful standalone programs. Some prominent kittens: :doc:`icat ` Display images in the terminal :doc:`diff ` A fast, side-by-side diff for the terminal with syntax highlighting and images :doc:`Unicode Input ` Easily input arbitrary unicode characters in |kitty| by name or hex code. :doc:`Hints ` Select and open/paste/insert arbitrary text snippets such as URLs, filenames, words, lines, etc from the terminal screen. :doc:`Panel ` Draw a GPU accelerated dock panel on your desktop showing the output from an arbitrary terminal program. :doc:`Clipboard ` Copy/paste to the clipboard from shell scripts, even over SSH. You can also :doc:`Learn to create your own kittens `. Configuring kitty ------------------- |kitty| is highly configurable, everything from keyboard shortcuts to painting frames-per-second. For details and a sample :file:`kitty.conf`, see the :doc:`configuration docs `. Remote control ------------------ |kitty| has a very powerful system that allows you to control it from the :doc:`shell prompt, even over SSH `. You can change colors, fonts, open new windows, tabs, set their titles, change window layout, get text from one window and send text to another, etc, etc. The possibilities are endless. See the :doc:`tutorial ` to get started. .. _sessions: Startup Sessions ------------------ You can control the tabs, window layout, working directory, startup programs, etc. by creating a "session" file and using the :option:`kitty --session` command line flag or the :opt:`startup_session` option in :file:`kitty.conf`. For example: .. code-block:: session # Set the window layout for the current tab layout tall # Set the working directory for windows in the current tab cd ~ # Create a window and run the specified command in it launch zsh # Create a window with some environment variables set and run # vim in it launch env FOO=BAR vim # Set the title for the next window title Chat with x launch irssi --profile x # Create a new tab (the part after new_tab is the optional tab # name which will be displayed in the tab bar, if omitted, the # title of the active window will be used instead) new_tab my tab cd ~/somewhere # Set the layouts allowed in this tab enabled_layouts tall, stack # Set the current layout layout stack launch zsh # Create a new OS window new_os_window # set new window size to 80x25 cells os_window_size 80c 25c launch sh # Make the current window the active (focused) window focus launch emacs Mouse features ------------------- * You can hold down :kbd:`ctrl+shift` and click on a URL to open it in a browser. * You can double click to select a word and then drag to select more words. * You can triple click to select a line and then drag to select more lines. * You can right click to extend a previous selection. * You can hold down :kbd:`ctrl+alt` and drag with the mouse to select in columns. * Selecting text automatically copies it to the primary clipboard (on platforms with a primary clipboard). * You can select text with kitty even when a terminal program has grabbed the mouse by holding down the :kbd:`shift` key. Font control ----------------- |kitty| has extremely flexible and powerful font selection features. You can specify individual families for the regular, bold, italic and bold+italic fonts. You can even specify specific font families for specific ranges of unicode characters. This allows precise control over text rendering. It can come in handy for applications like powerline, without the need to use patched fonts. See the various font related configuration directives in :ref:`conf-kitty-fonts`. .. _scrollback: The scrollback buffer ----------------------- |kitty| supports scrolling back to view history, just like most terminals. You can use either keyboard shortcuts or the mouse scroll wheel to do so. However, |kitty| has an extra, neat feature. Sometimes you need to explore the scrollback buffer in more detail, maybe search for some text or refer to it side-by-side while typing in a follow-up command. |kitty| allows you to do this by pressing the :sc:`show_scrollback` key-combination, which will open the scrollback buffer in your favorite pager program (which is ``less`` by default). Colors and text formatting are preserved. You can explore the scrollback buffer comfortably within the pager. Additionally, you can pipe the contents of the scrollback buffer to an arbitrary, command running in a new window, tab or overlay, for example:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting less +G -R Would open the scrollback buffer in a new window when you press the :kbd:`F1` key. See :sc:`show_scrollback` for details. If you wish to store very large amounts of scrollback to view using the piping or :sc:`show_scrollback` features, you can use the :opt:`scrollback_pager_history_size` option. .. _cpbuf: Multiple copy/paste buffers ----------------------------- In addition to being able to copy/paste from the system clipboard, in |kitty| you can also setup an arbitrary number of copy paste buffers. To do so, simply add something like the following to your :file:`kitty.conf`:: map f1 copy_to_buffer a map f2 paste_from_buffer a This will allow you to press :kbd:`F1` to copy the current selection to an internal buffer named ``a`` and :kbd:`F2` to paste from that buffer. The buffer names are arbitrary strings, so you can define as many such buffers as you need. Frequently Asked Questions --------------------------------- The list of Frequently Asked Questions (*FAQ*) is :doc:`available here `. .. _completion: Completion for kitty --------------------------------- |kitty| comes with completion for the ``kitty`` command for popular shells. bash ~~~~~~~~ Add the following to your :file:`~/.bashrc` .. code-block:: sh source <(kitty + complete setup bash) Older versions of bash (for example, v3.2) do not support process substitution with the source command, in which case you can try an alternative: .. code-block:: sh source /dev/stdin <<<"$(kitty + complete setup bash)" zsh ~~~~~~~~~ Add the following to your :file:`~/.zshrc` .. code-block:: sh autoload -Uz compinit compinit # Completion for kitty kitty + complete setup zsh | source /dev/stdin The important thing above is to make sure the call to |kitty| to load the zsh completions happens after the call to :file:`compinit`. fish ~~~~~~~~ For versions of fish earlier than 3.0.0, add the following to your :file:`~/.config/fish/config.fish`. Later versions source completions by default. .. code-block:: sh kitty + complete setup fish | source Changelog ------------------ See :doc:`changelog`. .. toctree:: :hidden: :glob: * kittens/* generated/rc kitty-0.15.0/docs/installer.py000066400000000000000000000174131356737523400162650ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from __future__ import ( absolute_import, division, print_function, unicode_literals ) import atexit import json import os import platform import re import shlex import shutil import subprocess import sys import tempfile py3 = sys.version_info[0] > 2 is64bit = platform.architecture()[0] == '64bit' is_macos = 'darwin' in sys.platform.lower() if is_macos: mac_ver = tuple(map(int, platform.mac_ver()[0].split('.'))) if mac_ver[:2] < (10, 12): raise SystemExit('Your version of macOS is too old, at least 10.12 is required') try: __file__ from_file = True except NameError: from_file = False if py3: unicode = str raw_input = input import urllib.request as urllib def encode_for_subprocess(x): return x else: from future_builtins import map import urllib2 as urllib def encode_for_subprocess(x): if isinstance(x, unicode): x = x.encode('utf-8') return x def run(*args): if len(args) == 1: args = shlex.split(args[0]) args = list(map(encode_for_subprocess, args)) ret = subprocess.Popen(args).wait() if ret != 0: raise SystemExit(ret) class Reporter: # {{{ def __init__(self, fname): self.fname = fname self.last_percent = 0 def __call__(self, blocks, block_size, total_size): percent = (blocks*block_size)/float(total_size) report = '\rDownloaded {:.1%} '.format(percent) if percent - self.last_percent > 0.05: self.last_percent = percent print(report, end='') sys.stdout.flush() # }}} def get_latest_release_data(): print('Checking for latest release on GitHub...') req = urllib.Request('https://api.github.com/repos/kovidgoyal/kitty/releases/latest', headers={'Accept': 'application/vnd.github.v3+json'}) try: res = urllib.urlopen(req).read().decode('utf-8') except Exception as err: raise SystemExit('Failed to contact {} with error: {}'.format(req.get_full_url(), err)) data = json.loads(res) html_url = data['html_url'].replace('/tag/', '/download/').rstrip('/') for asset in data.get('assets', ()): name = asset['name'] if is_macos: if name.endswith('.dmg'): return html_url + '/' + name, asset['size'] else: if name.endswith('.txz'): if is64bit: if name.endswith('-x86_64.txz'): return html_url + '/' + name, asset['size'] else: if name.endswith('-i686.txz'): return html_url + '/' + name, asset['size'] raise SystemExit('Failed to find the installer package on github') def do_download(url, size, dest): print('Will download and install', os.path.basename(dest)) reporter = Reporter(os.path.basename(dest)) # Get content length and check if range is supported rq = urllib.urlopen(url) headers = rq.info() sent_size = int(headers['content-length']) if sent_size != size: raise SystemExit('Failed to download from {} Content-Length ({}) != {}'.format(url, sent_size, size)) with open(dest, 'wb') as f: while f.tell() < size: raw = rq.read(8192) if not raw: break f.write(raw) reporter(f.tell(), 1, size) rq.close() if os.path.getsize(dest) < size: raise SystemExit('Download failed, try again later') print('\rDownloaded {} bytes'.format(os.path.getsize(dest))) def clean_cache(cache, fname): for x in os.listdir(cache): if fname not in x: os.remove(os.path.join(cache, x)) def download_installer(url, size): fname = url.rpartition('/')[-1] tdir = tempfile.gettempdir() cache = os.path.join(tdir, 'kitty-installer-cache') if not os.path.exists(cache): os.makedirs(cache) clean_cache(cache, fname) dest = os.path.join(cache, fname) if os.path.exists(dest) and os.path.getsize(dest) == size: print('Using previously downloaded', fname) return dest if os.path.exists(dest): os.remove(dest) do_download(url, size, dest) return dest def macos_install(dmg, dest='/Applications', launch=True): mp = tempfile.mkdtemp() atexit.register(shutil.rmtree, mp) run('hdiutil', 'attach', dmg, '-mountpoint', mp) try: os.chdir(mp) app = 'kitty.app' d = os.path.join(dest, app) if os.path.exists(d): shutil.rmtree(d) dest = os.path.join(dest, app) run('ditto', '-v', app, dest) print('Successfully installed kitty into', dest) if launch: run('open', dest) finally: os.chdir('/') run('hdiutil', 'detach', mp) def linux_install(installer, dest=os.path.expanduser('~/.local'), launch=True): dest = os.path.join(dest, 'kitty.app') if os.path.exists(dest): shutil.rmtree(dest) os.makedirs(dest) print('Extracting tarball...') run('tar', '-C', dest, '-xJof', installer) print('kitty successfully installed to', dest) kitty = os.path.join(dest, 'bin', 'kitty') print('Use', kitty, 'to run kitty') if launch: run(kitty, '--detach') def main(dest=None, launch=True, installer=None): if not dest: if is_macos: dest = '/Applications' else: dest = os.path.expanduser('~/.local') machine = os.uname()[4] if machine and machine.lower().startswith('arm'): raise SystemExit( 'You are running on an ARM system. The kitty binaries are only' ' available for x86 systems. You will have to build from' ' source.') if not installer: url, size = get_latest_release_data() installer = download_installer(url, size) else: installer = os.path.abspath(installer) if not os.access(installer, os.R_OK): raise SystemExit('Could not read from: {}'.format(installer)) if is_macos: macos_install(installer, dest=dest, launch=launch) else: linux_install(installer, dest=dest, launch=launch) def script_launch(): # To test: python3 -c "import runpy; runpy.run_path('installer.py', run_name='script_launch')" def path(x): return os.path.expandvars(os.path.expanduser(x)) def to_bool(x): return x.lower() in {'y', 'yes', '1', 'true'} type_map = {x: path for x in 'dest installer'.split()} type_map['launch'] = to_bool kwargs = {} for arg in sys.argv[1:]: if arg: m = re.match('([a-z_]+)=(.+)', arg) if m is None: raise SystemExit('Unrecognized command line argument: ' + arg) k = m.group(1) if k not in type_map: raise SystemExit('Unrecognized command line argument: ' + arg) kwargs[k] = type_map[k](m.group(2)) main(**kwargs) def update_intaller_wrapper(): # To run: python3 -c "import runpy; runpy.run_path('installer.py', run_name='update_wrapper')" installer.sh with open(__file__, 'rb') as f: src = f.read().decode('utf-8') wrapper = sys.argv[-1] with open(wrapper, 'r+b') as f: raw = f.read().decode('utf-8') nraw = re.sub(r'^# HEREDOC_START.+^# HEREDOC_END', lambda m: '# HEREDOC_START\n{}\n# HEREDOC_END'.format(src), raw, flags=re.MULTILINE | re.DOTALL) if 'update_intaller_wrapper()' not in nraw: raise SystemExit('regex substitute of HEREDOC failed') f.seek(0), f.truncate() f.write(nraw.encode('utf-8')) if __name__ == '__main__' and from_file: main() elif __name__ == 'update_wrapper': update_intaller_wrapper() elif __name__ == 'script_launch': script_launch() kitty-0.15.0/docs/installer.sh000066400000000000000000000012221356737523400162360ustar00rootroot00000000000000#!/bin/sh # # installer.sh # Copyright (C) 2018 Kovid Goyal # # Distributed under terms of the GPLv3 license. # python=$(command -v python3) if [ -z "$python" ]; then python=$(command -v python2) fi if [ -z "$python" ]; then python=$(command -v python2.7) fi if [ -z "$python" ]; then python=$(command -v python) fi if [ -z "$python" ]; then python=python fi echo Using python executable: $python $python -c "import sys; script_launch=lambda:sys.exit('Download of installer failed!'); exec(sys.stdin.read()); script_launch()" "$@" <<'INSTALLER_HEREDOC' # {{{ # HEREDOC_START # HEREDOC_END # }}} INSTALLER_HEREDOC kitty-0.15.0/docs/invocation.rst000066400000000000000000000002001356737523400166030ustar00rootroot00000000000000The kitty command line interface ==================================== .. program:: kitty .. include:: generated/cli-kitty.rst kitty-0.15.0/docs/key-encoding.rst000066400000000000000000000076331356737523400170270ustar00rootroot00000000000000Key encoding for extended keyboard protocol =============================================== See :ref:`extended-key-protocol` for more information and `this table in JSON format `_. ===================== ====================== Name Encoded representation 0 ``G`` 1 ``H`` 2 ``I`` 3 ``J`` 4 ``K`` 5 ``L`` 6 ``M`` 7 ``N`` 8 ``O`` 9 ``P`` A ``S`` APOSTROPHE ``B`` B ``T`` BACKSLASH ``t`` BACKSPACE ``1`` C ``U`` CAPS LOCK ``:`` COMMA ``C`` D ``V`` DELETE ``3`` DOWN ``6`` E ``W`` END ``-`` ENTER ``z`` EQUAL ``R`` ESCAPE ``y`` F ``X`` F1 ``/`` F10 ``]`` F11 ``{`` F12 ``}`` F13 ``@`` F14 ``%`` F15 ``$`` F16 ``#`` F17 ``BA`` F18 ``BB`` F19 ``BC`` F2 ``*`` F20 ``BD`` F21 ``BE`` F22 ``BF`` F23 ``BG`` F24 ``BH`` F25 ``BI`` F3 ``?`` F4 ``&`` F5 ``<`` F6 ``>`` F7 ``(`` F8 ``)`` F9 ``[`` G ``Y`` GRAVE ACCENT ``v`` H ``Z`` HOME ``.`` I ``a`` INSERT ``2`` J ``b`` K ``c`` KP 0 ``BJ`` KP 1 ``BK`` KP 2 ``BL`` KP 3 ``BM`` KP 4 ``BN`` KP 5 ``BO`` KP 6 ``BP`` KP 7 ``BQ`` KP 8 ``BR`` KP 9 ``BS`` KP ADD ``BX`` KP DECIMAL ``BT`` KP DIVIDE ``BU`` KP ENTER ``BY`` KP EQUAL ``BZ`` KP MULTIPLY ``BV`` KP SUBTRACT ``BW`` L ``d`` LEFT ``5`` LEFT ALT ``Bc`` LEFT BRACKET ``s`` LEFT CONTROL ``Bb`` LEFT SHIFT ``Ba`` LEFT SUPER ``Bd`` M ``e`` MINUS ``D`` N ``f`` NUM LOCK ``=`` O ``g`` P ``h`` PAGE DOWN ``9`` PAGE UP ``8`` PAUSE ``!`` PERIOD ``E`` PRINT SCREEN ``^`` Q ``i`` R ``j`` RIGHT ``4`` RIGHT ALT ``Bg`` RIGHT BRACKET ``u`` RIGHT CONTROL ``Bf`` RIGHT SHIFT ``Be`` RIGHT SUPER ``Bh`` S ``k`` SCROLL LOCK ``+`` SEMICOLON ``Q`` SLASH ``F`` SPACE ``A`` T ``l`` TAB ``0`` U ``m`` UP ``7`` V ``n`` W ``o`` WORLD 1 ``w`` WORLD 2 ``x`` X ``p`` Y ``q`` Z ``r`` ===================== ====================== kitty-0.15.0/docs/kittens/000077500000000000000000000000001356737523400153715ustar00rootroot00000000000000kitty-0.15.0/docs/kittens/clipboard.rst000066400000000000000000000013141356737523400200610ustar00rootroot00000000000000clipboard - copy/paste to the system clipboard ================================================== .. highlight:: sh The ``clipboard`` kitten can be used to read or write to the system clipboard from the shell. It even works over SSH. Using it is as simple as:: echo hooray | kitty +kitten clipboard All text received on :file:`stdin` is copied to the clipboard. To get text from the clipboard you have to enable reading of the clipboard in :opt:`clipboard_control` in :file:`kitty.conf`. Once you do that, you can use:: kitty +kitten clipboard --get-clipboard .. program:: kitty +kitten clipboard Command Line Interface -------------------------- .. include:: /generated/cli-kitten-clipboard.rst kitty-0.15.0/docs/kittens/custom.rst000066400000000000000000000134061356737523400174410ustar00rootroot00000000000000Custom kittens ================= You can easily create your own kittens to extend kitty. They are just terminal programs written in Python. When launching a kitten, kitty will open an overlay window over the current window and optionally pass the contents of the current window/scrollback to the kitten over its :file:`STDIN`. The kitten can then perform whatever actions it likes, just as a normal terminal program. After execution of the kitten is complete, it has access to the running kitty instance so it can perform arbitrary actions such as closing windows, pasting text, etc. Let's see a simple example of creating a kitten. It will ask the user for some input and paste it into the terminal window. Create a file in the kitty config folder, :file:`~/.config/kitty/mykitten.py` (you might need to adjust the path to wherever the kitty config folder is on your machine). .. code-block:: python def main(args): # this is the main entry point of the kitten, it will be executed in # the overlay window when the kitten is launched answer = input('Enter some text: ') # whatever this function returns will be available in the # handle_result() function return answer def handle_result(args, answer, target_window_id, boss): # get the kitty window into which to paste answer w = boss.window_id_map.get(target_window_id) if w is not None: w.paste(answer) Now in :file:`kitty.conf` add the lines:: map ctrl+k kitten mykitten.py Start kitty and press :kbd:`ctrl+k` and you should see the kitten running. The best way to develop your own kittens is to modify one of the built in kittens. Look in the kittens sub-directory of the kitty source code for those. Or see below for a list of :ref:`third-party kittens `, that other kitty users have created. Passing arguments to kittens ------------------------------ You can pass arguments to kittens by defining them in the map directive in :file:`kitty.conf`. For example:: map ctrl+k kitten mykitten.py arg1 arg2 These will be available as the ``args`` parameter in the ``main()`` and ``handle_result()`` functions. Note also that the current working directory of the kitten is set to the working directory of whatever program is running in the active kitty window. Passing the contents of the screen to the kitten --------------------------------------------------- If you would like your kitten to have access to the contents of the screen and/or the scrollback buffer, you just need to add an annotation to the ``handle_result()`` function, telling kitty what kind of input your kitten would like. For example: .. code-block:: py # in main, STDIN is for the kitten process and will contain # the contents of the screen def main(args): return sys.stdin.read() # in handle_result, STDIN is for the kitty process itself, rather # than the kitten process and should not be read from. def handle_result(args, stdin_data, target_window_id, boss): pass handle_result.type_of_input = 'text' This will send the plain text of the active window to the kitten's :file:`STDIN`. For text with formatting escape codes, use ``ansi`` instead. If you want line wrap markers as well, use ``screen-ansi`` or just ``screen``. For the scrollback buffer as well, use ``history``, ``ansi-history`` or ``screen-history``. Using kittens to script kitty, without any terminal UI ----------------------------------------------------------- If you would like your kitten to script kitty, without bothering to write a terminal program, you can tell the kittens system to run the ``handle_result()`` function without first running the ``main()`` function. For example, here is a kitten that "zooms/unzooms" the current terminal window by switching to the stack layout or back to the previous layout. Create a file in the kitty config folder, :file:`~/.config/kitty/zoom_toggle.py` .. code-block:: py def main(args): pass def handle_result(args, answer, target_window_id, boss): tab = boss.active_tab if tab is not None: if tab.current_layout.name == 'stack': tab.last_used_layout() else: tab.goto_layout('stack') handle_result.no_ui = True Now in kitty.conf add:: map f11 kitten zoom_toggle.py Pressing :kbd:`F11` will now act as a zoom toggle function. You can get even more fancy, switching the kitty OS window to fullscreen as well as changing the layout, by simply adding the line:: boss.toggle_fullscreen() To the ``handle_result()`` function, above. Debugging kittens -------------------- The part of the kitten that runs in ``main()`` is just a normal program and the output of print statements will be visible in the kitten window. Or alternately, you can use:: from kittens.tui.loop import debug debug('whatever') The ``debug()`` function is just like ``print()`` except that the output will appear in the ``STDOUT`` of the kitty process inside which the kitten is running. The ``handle_result()`` part of the kitten runs inside the kitty process. The output of print statements will go to the ``STDOUT`` of the kitty process. So if you run kitty from another kitty instance, the output will be visible in the first kitty instance. .. _external_kittens: Kittens created by kitty users --------------------------------------------- `vim-kitty-navigator `_ Allows you to navigate seamlessly between vim and kitty splits using a consistent set of hotkeys. `smart-scroll `_ Makes the kitty scroll bindings work in full screen applications `insert password `_ Insert a password from a CLI password manager, taking care to only do it at a password prompt. kitty-0.15.0/docs/kittens/diff.rst000066400000000000000000000103201356737523400170270ustar00rootroot00000000000000kitty-diff - A fast side-by-side diff tool with syntax highlighting and images ================================================================================ .. highlight:: sh Major Features ----------------- .. container:: major-features * Displays diffs side-by-side in the kitty terminal * Does syntax highlighting of the displayed diffs, asynchronously, for maximum speed * Displays images as well as text diffs, even over SSH * Does recursive directory diffing .. figure:: ../screenshots/diff.png :alt: Screenshot, showing a sample diff :align: center :scale: 100% Screenshot, showing a sample diff .. contents:: Installation --------------- Simply :ref:`install kitty `. You also need to have either the `git `_ program or the ``diff`` program installed. Additionally, for syntax highlighting to work, `pygments `_ must be installed (note that pygments is included in the macOS kitty app). Usage -------- In the kitty terminal, run:: kitty +kitten diff file1 file2 to see the diff between file1 and file2. Create an alias in your shell's startup file to shorten the command, for example: .. code-block:: sh alias d="kitty +kitten diff" Now all you need to do to diff two files is:: d file1 file2 You can also pass directories instead of files to see the recursive diff of the directory contents. Keyboard controls ---------------------- ========================= =========================== Action Shortcut ========================= =========================== Quit :kbd:`q, Ctrl+c, Esc` Scroll line up :kbd:`k, up` Scroll line down :kbd:`j, down` Scroll page up :kbd:`PgUp` Scroll page down :kbd:`PgDn` Scroll to top :kbd:`Home` Scroll to bottom :kbd:`End` Scroll to next page :kbd:`Space, PgDn` Scroll to previous page :kbd:`PgUp` Scroll to next change :kbd:`n` Scroll to previous change :kbd:`p` Increase lines of context :kbd:`+` Decrease lines of context :kbd:`-` All lines of context :kbd:`a` Restore default context :kbd:`=` Search forwards :kbd:`/` Search backwards :kbd:`?` Clear search :kbd:`Esc` Scroll to next match :kbd:`>, .` Scroll to previous match :kbd:`<, ,` ========================= =========================== Integrating with git ----------------------- Add the following to `~/.gitconfig`: .. code-block:: ini [diff] tool = kitty guitool = kitty.gui [difftool] prompt = false trustExitCode = true [difftool "kitty"] cmd = kitty +kitten diff $LOCAL $REMOTE [difftool "kitty.gui"] cmd = kitty kitty +kitten diff $LOCAL $REMOTE Now to use kitty-diff to view git diffs, you can simply do:: git difftool --no-symlinks --dir-diff Once again, creating an alias for this command is useful. Why does this work only in kitty? ---------------------------------------- The diff kitten makes use of various features that are :doc:`kitty only `, such as the :doc:`kitty graphics protocol `, the :ref:`extended keyboard protocol `, etc. It also leverages terminal program infrastructure I created for all of kitty's other kittens to reduce the amount of code needed (the entire implementation is under 2000 lines of code). And fundamentally, it's kitty only because I wrote it for myself, and I am highly unlikely to use any other terminals :) Configuration ------------------------ You can configure the colors used, keyboard shortcuts, the diff implementation, the default lines of context, etc. by creating a :file:`diff.conf` file in your :ref:`kitty config folder `. See below for the supported configuration directives. .. include:: /generated/conf-kitten-diff.rst Command Line Interface ------------------------- .. include:: /generated/cli-kitten-diff.rst Sample diff.conf ----------------- You can download a sample :file:`diff.conf` file with all default settings and comments describing each setting by clicking: :download:`sample diff.conf `. kitty-0.15.0/docs/kittens/hints.rst000066400000000000000000000063051356737523400172540ustar00rootroot00000000000000Hints ========== |kitty| has a *hints mode* to select and act on arbitrary text snippets currently visible on the screen. For example, you can press :sc:`open_url` to choose any URL visible on the screen and then open it using your system browser. .. figure:: ../screenshots/hints_mode.png :alt: URL hints mode :align: center :scale: 100% URL hints mode Similarly, you can press :sc:`insert_selected_path` to select anything that looks like a path or filename and then insert it into the terminal, very useful for picking files from the output of a ``git`` or ``ls`` command and adding them to the command line for the next command. The hints kitten is very powerful to see more detailed help on its various options and modes of operation, see below. You can use these options to create mappings in :file:`kitty.conf` to select various different text snippets. See :sc:`insert_selected_path` for examples. Completely customizing the matching and actions of the kitten --------------------------------------------------------------- The hints kitten supports writing simple python scripts that can be used to completely customize how it finds matches and what happens when a match is selected. This allows the hints kitten to provide the user interface, while you can provide the logic for finding matches and performing actions on them. This is best illustrated with an example. Create the file :file:`custom-hints.py` in the kitty config directory with the following contents: .. code-block:: python import re def mark(text, args, Mark, extra_cli_args, *a): # This function is responsible for finding all # matching text. extra_cli_args are any extra arguments # passed on the command line when invoking the kitten. # We mark all individual word for potential selection for idx, m in enumerate(re.finditer(r'\w+', text)): start, end = m.span() mark_text = text[start:end].replace('\n', '').replace('\0', '') # The empty dictionary below will be available as groupdicts # in handle_result() and can contain arbitrary data. yield Mark(idx, start, end, mark_text, {}) def handle_result(args, data, target_window_id, boss, extra_cli_args, *a): # This function is responsible for performing some # action on the selected text. # matches is a list of the selected entries and groupdicts contains # the arbitrary data associated with each entry in mark() above matches, groupdicts = [], [] for m, g in zip(data['match'], data['groupdicts']): if m: matches.append(m), groupdicts.append(g) for word, match_data in zip(matches, groupdicts): # Lookup the word in a dictionary, the open_url function # will open the provided url in the system browser boss.open_url(f'https://www.google.com/search?q=define:{word}') Now run kitty with:: kitty -o 'map f1 kitten hints --customize-processing custom-hints.py' When you press the :kbd:`F1` key you will be able to select a word to look it up in the Google dictionary. Command Line Interface ------------------------- .. include:: ../generated/cli-kitten-hints.rst kitty-0.15.0/docs/kittens/icat.rst000066400000000000000000000020171356737523400170430ustar00rootroot00000000000000icat - Display images in the terminal ======================================== The ``icat`` kitten can be used to display arbitrary images in the |kitty| terminal. Using it is as simple as:: kitty +kitten icat image.jpeg It supports all image types supported by `ImageMagick `_. It even works over SSH. For details, see the :doc:`kitty graphics protocol `. You might want to create an alias in your shell's configuration files:: alias icat="kitty +kitten icat" Then you can simply use ``icat image.png`` to view images. .. note:: `ImageMagick `_ must be installed for ``icat`` to work. .. program:: kitty +kitten icat The ``icat`` kitten has various command line arguments to allow it to be used from inside other programs to display images. In particular, :option:`--place`, :option:`--detect-support` and :option:`--print-window-size`. Command Line Interface -------------------------- .. include:: /generated/cli-kitten-icat.rst kitty-0.15.0/docs/kittens/panel.rst000066400000000000000000000025031356737523400172220ustar00rootroot00000000000000Draw a GPU accelerated dock panel on your desktop ==================================================================================================== .. highlight:: sh You can use this kitten to draw a GPU accelerated panel on the edge of your screen, that shows the output from an arbitrary terminal program. It is useful for showing status information or notifications on your desktop using terminal programs instead of GUI toolkits. .. figure:: ../screenshots/panel.png :alt: Screenshot, showing a sample panel :align: center :scale: 100% Screenshot, showing a sample panel The screenshot above shows a sample panel that displays the current desktop and window title as well as miscellaneous system information such as network activity, CPU load, date/time, etc. .. note:: This kitten currently only works on X11 desktops Using this kitten is simple, for example:: kitty +kitten panel sh -c 'printf "\n\n\nHello, world."; sleep 5s' This will show ``Hello, world.`` at the top edge of your screen for five seconds. Here the terminal program we are running is ``sh`` with a script to print out ``Hello, world!``. You can make the terminal program as complex as you like, as demonstrated in the screenshot above. Command Line Interface ------------------------- .. include:: ../generated/cli-kitten-panel.rst kitty-0.15.0/docs/kittens/unicode-input.rst000066400000000000000000000022371356737523400207120ustar00rootroot00000000000000Unicode input ================ You can input unicode characters by name, hex code, recently used and even an editable favorites list. Press :sc:`input_unicode_character` to start the unicode input widget, shown below. .. figure:: ../screenshots/unicode.png :alt: A screenshot of the unicode input widget :align: center :scale: 100% A screenshot of the unicode input widget In :guilabel:`Code` mode, you enter a unicode character by typing in the hex code for the character and pressing enter, for example, type in ``2716`` and press enter to get ✖. You can also choose a character from the list of recently used characters by typing a leading period and then the two character index and pressing Enter. The up and down arrow keys can be used to choose the previous and next unicode symbol respectively. In :guilabel:`Name` mode you instead type words from the character name and use the arrow keys/tab to select the character from the displayed matches. You can also type a leading period and the index for the match if you don't like to use arrow keys. Command Line Interface ------------------------- .. include:: ../generated/cli-kitten-unicode_input.rst kitty-0.15.0/docs/launch.rst000066400000000000000000000032031356737523400157120ustar00rootroot00000000000000Launching programs in new windows/tabs ======================================== .. program:: launch |kitty| has a :code:`launch` action that can be used to run arbitrary programs in news windows/tabs. It can be mapped to user defined shortcuts in kitty.conf. It is very powerful and allows sending the contents of the current window to the launched program, as well as many other options. In the simplest form, you can use it to open a new kitty window running the shell, as shown below:: map f1 launch To run a different program simply pass the command line as arguments to launch:: map f1 launch vim path/to/some/file To open a new window with the same working directory as the currently active window:: map f1 launch --cwd=current To open the new window in a new tab:: map f1 launch --type=tab To pass the contents of the current screen and scrollback to the started process:: map f1 launch --stdin-source=@screen_scrollback less There are many more powerful options, refer to the complete list below. The piping environment -------------------------- When using :option:`launch --stdin-source`, the program to which the data is piped has a special environment variable declared, ``KITTY_PIPE_DATA`` whose contents are:: KITTY_PIPE_DATA={scrolled_by}:{cursor_x},{cursor_y}:{lines},{columns} where ``scrolled_by`` is the number of lines kitty is currently scrolled by, ``cursor_(x|y)`` is the position of the cursor on the screen with ``(1,1)`` being the top left corner and ``{lines},{columns}`` being the number of rows and columns of the screen. Syntax reference ------------------ .. include:: /generated/launch.rst kitty-0.15.0/docs/performance.rst000066400000000000000000000053661356737523400167550ustar00rootroot00000000000000|kitty| Performance =================== The main goals for |kitty| performance are user perceived latency while typing and "smoothness" while scrolling as well as CPU usage. |kitty| tries hard to find an optimum balance for these. To that end it keeps a cache of each rendered glyph in video RAM so that font rendering is not a bottleneck. Interaction with child programs takes place in a separate thread from rendering, to improve smoothness. There are two parameters you can tune to adjust the performance. :opt:`repaint_delay` and :opt:`input_delay`. These control the artificial delays introduced into the render loop to reduce CPU usage. See :ref:`conf-kitty-performance` for details. See also the :opt:`sync_to_monitor` option to further decrease latency at the cost of some `tearing `_ while scrolling. You can generate detailed per-function performance data using `gperftools `_. Build |kitty| with `make profile`. Run kitty and perform the task you want to analyse, for example, scrolling a large file with `less`. After you quit, function call statistics will be printed to `stdout` and you can use tools like *kcachegrind* for more detailed analysis. Here are some CPU usage numbers for the task of scrolling a file continuously in less. The CPU usage is for the terminal process and X together and is measured using htop. The measurements are taken at the same font and window size for all terminals on a ``Intel(R) Core(TM) i7-4820K CPU @ 3.70GHz`` CPU with a ``Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde XT [Radeon HD 7770/8760 / R7 250X]`` GPU. ============== ========================= Terminal CPU usage (X + terminal) ============== ========================= |kitty| 6 - 8% xterm 5 - 7% (but scrolling was extremely janky) termite 10 - 13% urxvt 12 - 14% gnome-terminal 15 - 17% konsole 29 - 31% ============== ========================= As you can see, |kitty| uses much less CPU than all terminals, except xterm, but its scrolling "smoothness" is much better than that of xterm (at least to my, admittedly biased, eyes). .. _perf-cat: .. note:: Some people have asked why kitty does not perform better than terminal XXX in the test of sinking large amounts of data, such as catting a large text file. The answer is because this is not a goal for kitty. kitty deliberately throttles input parsing and output rendering to minimize resource usage while still being able to sink output faster than any real world program can produce it. Reducing CPU usage, and hence battery drain while achieving instant response times and smooth scrolling to a human eye is a far more important goal. kitty-0.15.0/docs/pipe.rst000066400000000000000000000054601356737523400154040ustar00rootroot00000000000000Working with the screen and history buffer contents ====================================================== .. warning:: The pipe action has been deprecated in favor of the :doc:`launch ` action which is more powerful. You can pipe the contents of the current screen and history buffer as :file:`STDIN` to an arbitrary program using the ``pipe`` function. The program can be displayed in a kitty window or overlay. For example, the following in :file:`kitty.conf` will open the scrollback buffer in less in an overlay window, when you press :kbd:`F1`:: map f1 pipe @ansi overlay less +G -R The syntax of the ``pipe`` function is:: pipe The piping environment -------------------------- The program to which the data is piped has a special environment variable declared, ``KITTY_PIPE_DATA`` whose contents are:: KITTY_PIPE_DATA={scrolled_by}:{cursor_x},{cursor_y}:{lines},{columns} where ``scrolled_by`` is the number of lines kitty is currently scrolled by, ``cursor_(x|y)`` is the position of the cursor on the screen with ``(1,1)`` being the top left corner and ``{lines},{columns}`` being the number of rows and columns of the screen. You can choose where to run the pipe program: ``overlay`` An overlay window over the current kitty window ``window`` A new kitty window ``os_window`` A new top-level window ``tab`` A new window in a new tab ``clipboard, primary`` Copy the text directly to the clipboard. In this case the specified program is not run, so use some dummy program name for it. ``none`` Run it in the background Input placeholders -------------------- There are various different kinds of placeholders ``@selection`` Plain text, currently selected text ``@text`` Plain text, current screen + scrollback buffer ``@ansi`` Text with formatting, current screen + scrollback buffer ``@screen`` Plain text, only current screen ``@ansi_screen`` Text with formatting, only current screen ``@alternate`` Plain text, secondary screen. The secondary screen is the screen not currently displayed. For example if you run a fullscreen terminal application, the secondary screen will be the screen you return to when quitting the application. ``@ansi_alternate`` Text with formatting, secondary screen. ``@alternate_scrollback`` Plain text, secondary screen + scrollback, if any. ``@ansi_alternate_scrollback`` Text with formatting, secondary screen + scrollback, if any. ``none`` No input You can also add the suffix ``_wrap`` to the placeholder, in which case kitty will insert the carriage return at every line wrap location (where long lines are wrapped at screen edges). This is useful if you want to pipe to program that wants to duplicate the screen layout of the screen. kitty-0.15.0/docs/protocol-extensions.rst000066400000000000000000000225531356737523400205070ustar00rootroot00000000000000Extensions to the xterm protocol =================================== |kitty| has a few extensions to the xterm protocol, to enable advanced features. These are typically in the form of new or re-purposed escape codes. While these extensions are currently |kitty| specific, it would be nice to get some of them adopted more broadly, to push the state of terminal emulators forward. The goal of these extensions is to be as small and unobtrusive as possible, while filling in some gaps in the existing xterm protocol. In particular, one of the goals of this specification is explicitly not to "re-imagine" the tty. The tty should remain what it is -- a device for efficiently processing text received as a simple byte stream. Another objective is to only move the minimum possible amount of extra functionality into the terminal program itself. This is to make it as easy to implement these protocol extensions as possible, thereby hopefully encouraging their widespread adoption. If you wish to discuss these extensions, propose additions/changes to them please do so by opening issues in the github bug tracker. .. contents:: Colored and styled underlines ------------------------------- |kitty| supports colored and styled (wavy) underlines. This is of particular use in terminal editors such as vim and emacs to display red, wavy underlines under mis-spelled words and/or syntax errors. This is done by re-purposing some SGR escape codes that are not used in modern terminals (`CSI codes `_) To set the underline style:: [4:0m # this is no underline [4:1m # this is a straight underline [4:2m # this is a double underline [4:3m # this is a curly underline [4:4m # this is a dotted underline (not implemented in kitty) [4:5m # this is a dashed underline (not implemented in kitty) [4m # this is a straight underline (for backwards compat) [24m # this is no underline (for backwards compat) To set the underline color (this is reserved and as far as I can tell not actually used for anything):: [58...m This works exactly like the codes ``38, 48`` that are used to set foreground and background color respectively. To reset the underline color (also previously reserved and unused):: [59m The underline color must remain the same under reverse video, if it has a color, if not, it should follow the foreground color. To detect support for this feature in a terminal emulator, query the terminfo database for the ``Su`` boolean capability. Graphics rendering --------------------- See :doc:`/graphics-protocol` for a description of this protocol to enable drawing of arbitrary raster images in the terminal. .. _extended-key-protocol: Keyboard handling ------------------- There are various problems with the current state of keyboard handling. They include: * No way to use modifiers other than ``Ctrl`` and ``Alt`` * No way to reliably use multiple modifier keys, other than, ``Shift+Alt``. * No way to handle different types of keyboard events, such as press, release or repeat * No reliable way to distinguish single ``Esc`` keypresses from the start of a escape sequence. Currently, client programs use fragile timing related hacks for this, leading to bugs, for example: `neovim #2035 `_. There are already two distinct keyboard handling modes, *normal mode* and *application mode*. These modes generate different escape sequences for the various special keys (arrow keys, function keys, home/end etc.) Most terminals start out in normal mode, however, most shell programs like ``bash`` switch them to application mode. We propose adding a third mode, named *full mode* that addresses the shortcomings listed above. Switching to the new *full mode* is accomplished using the standard private mode DECSET escape sequence:: [?2017h and to leave *full mode*, use DECRST:: [?2017l The number ``2017`` above is not used for any existing modes, as far as I know. Client programs can query if the terminal emulator is in *full mode* by using the standard `DECRQM `_ escape sequence. The new mode works as follows: * All printable key presses without modifier keys are sent just as in the *normal mode*. This means all printable ASCII characters and in addition, ``Enter``, ``Space`` and ``Backspace``. Also any unicode characters generated by platform specific extended input modes, such as using the ``AltGr`` key. This is done so that client programs that are not aware of this mode can still handle basic text entry, so if a *full mode* using program crashes and does not reset, the user can still issue a ``reset`` command in the shell to restore normal key handling. Note that this includes pressing the ``Shift`` modifier and printable keys. Note that this means there are no repeat and release events for these keys and also for the left and right shift keys. * For non printable keys and key combinations including one or more modifiers, an escape sequence encoding the key event is sent. For details on the escape sequence, see below. The escape sequence encodes the following properties: * Type of event: ``press,repeat,release`` * Modifiers pressed at the time of the event * The actual key being pressed Schematically:: _K\ Where ```` is one of ``p`` -- press, ``r`` -- release and ``t`` -- repeat. Modifiers is a bitmask represented as a single base64 digit. Shift -- ``0x1``, Alt -- ``0x2``, Control -- ``0x4`` and Super -- ``0x8``. ```` is a number (encoded in base85) corresponding to the key pressed. The key name to number mapping is defined in :doc:`this table `. Client programs must ignore events for keys they do not know. The mapping in the above table is stable and will never change, however, new codes might be added to it in the future, for new keys. For example:: _KpGp\ is ++x (press) _KrP8\ is ++++PageUp (release) This encoding means each key event is represented by 8 or 9 printable ascii only bytes, for maximum robustness. To see the full mode in action, run:: kitty +kitten key_demo Support for this mode is indicated by the ``fullkbd`` boolean capability in the terminfo database, in case querying for it via DECQRM is inconvenient. .. _ext_styles: Setting text styles/colors in arbitrary regions of the screen ------------------------------------------------------------------ There already exists an escape code to set *some* text attributes in arbitrary regions of the screen, `DECCARA `_. However, it is limited to only a few attributes. |kitty| extends this to work with *all* SGR attributes. So, for example, this can be used to set the background color in an arbitrary region of the screen. The motivation for this extension is the various problems with the existing solution for erasing to background color, namely the *background color erase (bce)* capability. See `this discussion `_ and `this FAQ `_ for a summary of problems with *bce*. For example, to set the background color to blue in a rectangular region of the screen from (3, 4) to (10, 11), you use:: [2*x[4;3;11;10;44$r[*x Saving and restoring the default foreground/background/selection/cursor colors --------------------------------------------------------------------------------- It is often useful for a full screen application with its own color themes to set the default foreground, background, selection and cursor colors. This allows for various performance optimizations when drawing the screen. The problem is that if the user previously used the escape codes to change these colors herself, then running the full screen application will lose her changes even after it exits. To avoid this, kitty introduces a new pair of *OSC* escape codes to push and pop the current color values from a stack:: ]30001\ # push onto stack ]30101\ # pop from stack These escape codes save/restore the so called *dynamic colors*, default background, default foreground, selection background, selection foreground and cursor color. Pasting to clipboard ---------------------- |kitty| implements the OSC 52 escape code protocol to get/set the clipboard contents (controlled via the :opt:`clipboard_control` setting). There is one difference in kitty's implementation compared to some other terminal emulators. |kitty| allows sending arbitrary amounts of text to the clipboard. It does so by modifying the protocol slightly. Successive OSC 52 escape codes to set the clipboard will concatenate, so:: ]52;c;\ ]52;c;\ will result in the clipboard having the contents ``payload1 + payload2``. To send a new string to the clipboard send an OSC 52 sequence with an invalid payload first, for example:: ]52;c;!\ Here ``!`` is not valid base64 encoded text, so it clears the clipboard. In case you're using software that can't be easily adapted to this protocol extension, it can be disabled by specifying ``no-append`` to the :opt:`clipboard_control` setting. kitty-0.15.0/docs/rc_protocol.rst000066400000000000000000000020501356737523400167640ustar00rootroot00000000000000Documentation for the kitty remote control protocol ====================================================== The kitty remote control protocol is a simple protocol that involves sending data to kitty in the form of JSON. Any individual command of kitty has the form:: P@kitty-cmd\ Where ```` is the byte ``0x1b``. The JSON object has the form:: { 'cmd': "command name", 'version': "kitty version", 'no_response': Optional Boolean, 'payload': , } The ``version`` above is a string of the form :code:`0.14.2`. If you are developing a standalone client, use the kitty version that you are developing against. Using a version greater than the version of the kitty instance you are talking to, will cause a failure. Set ``no_response`` to True if you don't want a response from kitty. The optional payload is a JSON object that is specific to the actual command being sent. The fields in the object for every command are documented below. .. include:: generated/rc.rst kitty-0.15.0/docs/remote-control.rst000066400000000000000000000130211356737523400174100ustar00rootroot00000000000000:tocdepth: 2 Controlling kitty from scripts or the shell ============================================== .. highlight:: sh Tutorial ---------- |kitty| can be controlled from scripts or the shell prompt. You can open new windows, send arbitrary text input to any window, name windows and tabs, etc. Let's walk through a few examples of controlling |kitty|. Start by running |kitty| as:: kitty -o allow_remote_control=yes -o enabled_layouts=tall In order for control to work, :opt:`allow_remote_control` must be enabled in :file:`kitty.conf`. Here we turn it on explicitly at the command line. Now, in the new |kitty| window, enter the command:: kitty @ new-window --title Output --keep-focus cat This will open a new window, running the ``cat`` program that will appear next to the current window. Let's send some text to this new window:: kitty @ send-text --match cmdline:cat Hello, World This will make ``Hello, World`` show up in the window running the ``cat`` program. The :option:`kitty @ send-text --match` option is very powerful, it allows selecting windows by their titles, the command line of the program running in the window, the working directory of the program running in the window, etc. See ``kitty @ send-text --help`` for details. More usefully, you can pipe the output of a command running in one window to another window, for example:: ls | kitty @ send-text --match title:Output --stdin This will show the output of ls in the output window instead of the current window. You can use this technique to, for example, show the output of running ``make`` in your editor in a different window. The possibilities are endless. You can even have things you type show up in a different window. Run:: kitty @ send-text --match title:Output --stdin And type some text, it will show up in the output window, instead of the current window. Type ``Ctrl+D`` when you are ready to stop. Now, let's open a new tab:: kitty @ new-window --new-tab --tab-title "My Tab" --keep-focus bash This will open a new tab running the bash shell with the title "My Tab". We can change the title of the tab with:: kitty @ set-tab-title --match title:My New Title Let's change the title of the current tab:: kitty @ set-tab-title Master Tab Now lets switch to the newly opened tab:: kitty @ focus-tab --match title:New Similarly, to focus the previously opened output window (which will also switch back to the old tab, automatically):: kitty @ focus-window --match title:Output You can get a listing of available tabs and windows, by running:: kitty @ ls This outputs a tree of data in JSON format. The top level of the tree is all operating system kitty windows. Each OS window has an id and a list of tabs. Each tab has its own id, a title and a list of windows. Each window has an id, title, current working directory, process id (PID) and command-line of the process running in the window. You can use this information with :option:`kitty @ focus-window --match` to control individual windows. As you can see, it is very easy to control |kitty| using the ``kitty @`` messaging system. This tutorial touches only the surface of what is possible. See ``kitty @ --help`` for more details. Note that in the example's above, ``kitty @`` messaging works only when run inside a |kitty| window, not anywhere. But, within a |kitty| window it even works over SSH. If you want to control |kitty| from programs/scripts not running inside a |kitty| window, you have to implement a couple of extra steps. First start |kitty| as:: kitty -o allow_remote_control=yes --listen-on unix:/tmp/mykitty The :option:`kitty --listen-on` option tells |kitty| to listen for control messages at the specified path. See ``kitty --help`` for details. Now you can control this instance of |kitty| using the :option:`kitty @ --to` command line argument to ``kitty @``. For example:: kitty @ --to unix:/tmp/mykitty ls Note that if all you want to do is run a single |kitty| "daemon" and have subsequent |kitty| invocations appear as new top-level windows, you can use the simpler :option:`kitty --single-instance` option, see ``kitty --help`` for that. The builtin kitty shell -------------------------- You can explore the |kitty| command language more easily using the builtin |kitty| shell. Run ``kitty @`` with no arguments and you will be dropped into the |kitty| shell with completion for |kitty| command names and options. You can even open the |kitty| shell inside a running |kitty| using a simple keyboard shortcut (:sc:`kitty_shell` by default). This has the added advantage that you don't need to use ``allow_remote_control`` to make it work. Allowing only some windows to control kitty ---------------------------------------------- If you do not want to allow all programs running in |kitty| to control it, you can selectively enable remote control for only some |kitty| windows. Simply create a shortcut such as:: map ctrl+k launch --allow-remote-control some_program Then programs running in windows created with that shortcut can use ``kitty @`` to control kitty. Note that any program with the right level of permissions can still write to the pipes of any other program on the same computer and therefore can control |kitty|. It can, however, be useful to block programs running on other computers (for example, over ssh) or as other users. Documentation for the remote control protocol ----------------------------------------------- If you wish to develop your own client to talk to |kitty|, you can use the :doc:`rc_protocol`. .. include:: generated/cli-kitty-at.rst kitty-0.15.0/docs/screenshots/000077500000000000000000000000001356737523400162505ustar00rootroot00000000000000kitty-0.15.0/docs/screenshots/diff.png000066400000000000000000004060631356737523400176770ustar00rootroot00000000000000‰PNG  IHDRh— …γ pHYsÄÄ•+ IDATxœìÝw\÷ÿð×å!€ Ó"*¨uÏ:ꪣîUGÕZ÷hëªZëÀÕªÕúm«Öºë¨£ZgµµÎ¶V­uà@ÀAe dÝ÷L$$ S|=ü€Ë'—÷Ý÷®Þ'¯|>' oy´^"""""""""""¢ü&åö e¹½B""""""""""""z94DDDDDDDDDDDDùŒ Q>c@CDDDDDDDDDDD”ÏäùæAAABA¾?½¾‚‚‚¤‚zï¼HLÖ™UÌ€†ˆˆˆˆˆˆˆˆˆˆˆ D•*U2 h²nr5ÌÉí€DL™¬‚˜èèh4DDDDDDDDDDDT ÜÜÜ2 ]27é›\ iòlгàà`!»&!! *ÇŽ€´'«Q69•[‰a=AAABÆpFĤ¤¤˜KoKDDDDDDDDDDD”3W¯^+VL¥Rieô!M†iÏrÚäj@$;vL¤…2™ÄÄD’““9r†ˆˆˆˆˆˆˆˆˆˆˆ ;;; $À8°Ñ‡5o½õ–.7§:ËiPb4ræØ±c²„„¡|ùòBbb¢1ˆIMM@¥Reú¾®®® nˆˆˆˆˆˆˆˆˆˆˆ(O‚GA +V &W‹""""""""""""*Lô žg#ú{ÐX›ðž1DDDDDDDDDDDDÙÈíA*V4Z­Ö0Ïš$I†Gî•–ÿ¾ùæ‚`ôèÚµkA—EDDDDDDDDDDDL.O›”L’$A§Ó À‹¬ÄA“ÎСCñûï¿cúôéðóó3ë5]»v… ˜>}zWGDDDDDDDDDDDE…E÷ ÉŒ~ †ôèUegg‡-Z E‹HNNÆ¢E‹ º$"""""""""""*$IDQA€V«d²œá"""""""""""¢|–+ DQ|åïAc‰‘#GBìÞ½0wî\£{×>|تõΟ?%J”À¤I“°fÍÔ¯_ÎÎÎhÕª®\¹bÔv„ pvvÆ‚ pðàA´oß...ðõõÅÊ•+3]hh( €*UªÀÁÁo¼ñÞ}÷]œ>}Úªz‰ˆˆˆˆˆˆˆˆˆˆ^¹¼Ús’ R¥J¡C‡8{ö,=z„ * råʆçÝÜܬZoRRbcc±|ùr¨T*x{{#>>¿ÿþ;6lˆË—/ÃÇÇ€¸¸8|óÍ7xðàìííñìÙ3ÄÄÄ`Ĉ¨U«êÔ©cX÷Æ1lØ0¤¤¤ÀÉÉ Ïž=ÃåË—qùòe4iÒo¾ùfŽö ™'W§8{FÐL›6 ûöíCÆ ½{÷ƾ}û ZµjYµ^Q>>>xðànß¾àà`xzz"11sæÌ1´ÕßóÇÉÉ —/_Fbb"BBB T*!I:dh‚#F@©TâÌ™3ˆE||¼¡NNgU½DDDDDDDDDDDd9Þƒ¦Ñ4nnn(Y²$ &Lœ@ñ÷÷7,Ë* Ó™æÂÃé©©™¾/GÐå49¤Ibccse}Y4'NœÔ©SÇä½Í WÊ–- 8}út¦Ïs Qþa@“C•*Ulß¾G5 VÒ{ôèêÖ­‹ºuë¢Y³f™¶Ñ‡.Ïž=Cjj*t:vïÞE‹A©TbÚ´i&m3Ž ÉL«V­ß|ó vî܉øøxœ8q>À4DDDDDDDDDDDùI^Ð&Ë–-ñcÇ—.]üóÏ?èÙ³' jÕª˜9s¦Ñkúõë‡åË—#** -[¶„J–,‰9sæ`àÀFmŸ>}Šsçμ¼¼2­A?‚&88ööö°±±AJJ ”J%Ö¯_???C[KšiÓ¦a÷îݸ}û6zôèaX®ŸÍÅÅ%ÛuQî`@“ιsç°cÇ£e<0,³µµ5yM@@N:…U«VáðáÃxüø1?~ GGG“¶‰‰‰†ß•Je¦5èP(¨\¹24h€iÓ¦™„:–4®®®¸pá–,Y‚ .ÀÍÍ ]»vÅĉqãÆ øøød»"""""""""""Ê hÒY·nÖ­[gñë±dÉ’lÛÕ­[7Û{½Èdi³ÎÕ¨Q.\xiÛ©S§bêÔ©&ËW­Z…U«V™,wvvƬY³ GDDàöíÛEU«VͶ~"""""""""""Ê h^3OŸ>EDDŽ?ŽåË—#55C‡…§§gA—FDDDDDDDDDDôÚ`@ó騱#öïßo´¬oß¾øúë¯ ¨"""""""""""¢×š×HéÒ¥ˆ€€ k×®¨U«VA—EDDDDDDDDDDôÚ‘ ºzaøðá>|xž¬û»ï¾Ë“õ‘Y ™Œ¬ « """""""""""z1 !"""""""""""Êg hˆˆˆˆˆˆˆˆˆˆˆˆòY¦MPP,DGGóþ4DDDDDDDDDDDDŠŽŽ‚ƒƒ…   L³Ž !"""""""""""ÊgÙ4 ECDDDDDDDDDDD”ääd!00Ьl…#hˆˆˆˆˆˆˆˆˆˆˆˆò™YM`` ’““9’†ˆˆˆˆˆˆˆˆˆˆˆ(®®®å(ACDDDDDDDDDDD”ÏÐå3y^­X8#½º$Iʳu[4‚F?šV«ìììNdžˆˆˆˆˆˆˆˆˆˆˆ^;:N°³³´Z­UY §8#"""""""""""Êgy6ÅY^û!"""""""""""Êo’$ rev1Ž !"""""""""""Êg hˆˆˆˆˆˆˆˆˆˆˆˆò"""""""""""¢|–+$IÂóy׈ˆˆˆˆˆˆˆˆˆˆˆ(ACDDDDDDDDDDD”ÏÐå34DDDDDDDDDDDDùŒ Q>c@CDDDDDDDDDDD”Ïäy¶æ°;y¶ê<áâ\ÐQþ-YÐ%XÄ n]eÁ .]Ž !"""""""""""Êw hˆˆˆˆˆˆˆˆˆˆˆˆò"""""""""""¢|Æ€†ˆˆˆˆˆˆˆˆˆˆˆ(Ÿ1 !"""""""""""Êg h2ˆ‹Chx8nß½‹ø„³_çRÞÚ¼‡•œ¢¼môj*ˆcòŸÏCpq6zü°eK¾Ö< –J¥Â“§Oq'"Ož>-èrˆˆ(ÅÇÆávè-Dܾ‹„xóû.~èØ¨mVVpŠò¶Ñ«© ŽÉ ÿü oÁÕè±ý‡­ùZCNð<~u¨U*ÄWš÷Šò¶eG­Ö`pÿˆ‰Åã'OpâÏÓØø>š< [׬E‡6ÆßŠ‹CiooL;Îh¹AÈô=þù÷<ë7Cгs$§¤À®X±×¢^kÔ1)Jºº¢¤«+?y’¯ïÞöÝ»ÐÄpx{z¢aÝzhÕì-èt:¸”(‘åkŠâyü 2w"îâND"£¡¤«k¦íü|}3 Ô´Z-f¹ž¹Z×'3§#1) ß/ùŸÉyôvóèÙ¥ T*þüçü¸ã'üqò$®9‹ÒÞÞ¹Z.ztB9?_$Æ'àО˜™‰¤Ä$,üþ+“s®ÙÛÍѱgg¨T*œûó,vý¸þq'®ý ¯Òì‹$4™èݽ;ºwìX4 Í;uÀ†­[Ñ»[w´kÕÚ¤½L&Ñ]»ó»Ì|Q”·-;J|»`¡áoµZ{÷`ð‡cðþèQˆ¾ftÑ‹ò>>=d¨Yë?~ú4:ôî…êU«áêßgP©‚ÿkU¯µ^çc26.ý† Eçví±uÍZÈåæý'¼(î³ µj 9%À‹ð,3UP5 Àdù–; R©ðɇåZM'þü?lÙ‚™“§ ²E“çkU¯Ž!ýF ‚º5kaìÔ)ص>6<×ê "¢Â§sïnx§{GÀg f¢GóNøiÃ6tîÝ -Ú™~K]&“aÛ‘Ÿó»Ì|Q”·-;JÌûváoµZ_vìÅøÁaìûcp%:Äèz=6&åÊû`ÐèÁf­ÿ¯ã§1 CV¯ŠãWÿ‚_¥ ¯U½ÖzÉøØ8Œé7m:·Ãw[W[Ô¿(Jû쿳pdß!¬ØºÞí hݱ-Õ«¡ÿˆá&÷-زs”eJáʵk˜·x´ne™R¨Ñ´1Žž8‘i-gΟÇ“'Á¿N-¸”÷})/´èÜѨ%Û¦·ÿð!´îÚ%|Ë¡r½º˜0í3ǧy]o~±±±AŸî=0zÈP~ŠúµëXôZ­V‹ ùóÑ­CG¼Q¥J®Ô£V«1rÂxTªàO3ŒJËJ«·Þˆ¢˜+5Ñ«ÁAé€é_Îl[÷£aùâ &SCõk×+ÓuT÷¬Œ…Ó?ǸAcP¥¤?F÷ŽÓœB»º-QÙÙ?|·Öä5W/^Á]û£†WêùÔÀ‡ýGšÜ‹`÷–ðW–Åõ+×ðõ¼¯Ð¡ÁÛðW–E«ÍpêèÉLkù÷Ìy|öád4ò¯ƒ?øÙ—FÏÚX²mzGöÆ»­»¡r‰òhR¹>fM˜nø3¯ëÍ/666èÒ§;‚˜'Oqëf¸Ñóñ±ñP:™w½~íR0úµë…޽º`ç±½™†:½ZvAMï@DEFex¯8Ô.S ·iÿ"?ëµÔ_ÇO£¢c9;|³'Î@Ó€t­€ÁݘLSeî1ií>3ç|³Fn¿W/¥õ/ü*UȶaÉy¼~ùšL§»Ó?>ÿtŽi-y´ÏÌõ0­ï¨È0;DŸ²å0sœ9‹ë±·pOZõk[_äK¨ÕjL9~•*àÃOÇfÿMZ5ÈD~,HDTÐø_b34oÒžîøçßó†e£>Œ ÇOâäC8øÓŽ—ÞÛ!6>_~û J89ãíæ-ð㎟0mÞ\tëÐ …³.4j¿cï4|»\K¸`ÎgŸ¡ÿ»½±çÀ/hðv+¤¦¦Ú©Tj$&%¡u×.¸Œž]º`Ôà! E÷ýñ4&Æh½›¶oCãvmqáÒ%ôèÔ3>™Œ“&£ožFí,Ù6˜óåBtíÿ*UÂâ¹óФaC,ùn9š¾ÓÎèB5¯êMoø¸±\œÑ õËçËÍ 'GG‚÷’nFËcbcá¨4¯CòéìY¨ˆ_-ÉòBX&“aÙ—‹‡÷G2š·ùÃÉ“˜ˆM߯ÌöÃÝüª×Rj ‰‰è;t’SR0~ôhôéÞ{DýV-˜”dhkî1iÍ>3÷|³”5ÇovjU¯Ow|µlvìÝóÒ¶–œÇujÖÄâ¹ó°dÞøú‹ùøvÁB,ûrš6j¬Tɨ½5û,·ÏÍÒÞÞprt„Lfù?c¶nÅÍð0̘49Wj€ÅË–âZÈ ¬üß×P(f½æÄŸ§¡P(оõÛ¹V½ÞlÞîžî¸ðÏ¿†eG Æ‘ ǰûä/Ø|p;_ro‡¸Øx,ÿr)œJ8£ÙÛͱëÇX0mÚwë[…-–ÌþÒ¨ýþ{Ñ¡a”puÁ¤9SÑ£/Þsï4xª ý‹¤Ä$ônÝ ×.£CÏÎ8j0ÂCB1¤û@Ä>5¾^ß¹i;º4n+.£CÎ?㌟ñ ºö5þRˆ%ÛKæ,Âà®àPA‹ç ~“†X¹ä;tmúŽIÿ"/êMoÒðñð\Ñ¡AÞý{­tJ»^/é^Òhy\L,”ŽJ³Öñù§sP¹j¬XüÒþÅç˾D|\<ƾ?ÚèZù³§ )!K7­È¶‘_õZJ£Ö 1!£úCJr †…®}ºá×½‡Ð¾~k$%¾è_˜{LZ³ÏÌ=ß,eÍñ›jµªÃÝÓßµûwì}i[KÎãêujbæâ9˜µdæ|ýæ}»Ÿ/[ˆMÓúûÖì³Ü<74mW·’˜ýÉ Ü½u@Ú—ºÖ~» +¡^ãúV¯Û«´7¬ë·˜ëûÅËpóZ¾\¹¶föEþ>ñ'l ´lo:K å/Nqf¦2¥Jáʵ«†¿ÝÝÜàîöâïbЬç#e2 èÝ_Íû÷>Ä–;ðÕ¼y¨_»ÂnÝšM m£¢£1|ÜXÌ6ãG6,oT¯Ú÷ê‰{÷ _Ï´o©Èåi‹æÌ1,g''L3ýï¼ýb^๋¡zÕª8uðÐK·Õ’m»péf-\€ï—üƒßK.ûA¿´°f´ϰfÓF ø~žÖ›žþ‚ÙÆ&ïíßOG•Ê•M>ðŽ‹ÃæŸ¶ãô™¿Qó7Фa# êÛϤ݅K—pàȯønñW˜2+¿üú+âP¯v-|1c&*¾¸X­ì__Ï_€¡„¯W¬ÀØ‘#±sß^lÚ¾ ?®Z Ÿ²e U½–eχÙs1¨_?ÃòêU«bØØñíÊïñé¸ñ,;&-Ùg–œo–²æøÍŽƒ½=þ´½€žïDçöíñÍü…([º´I[KöY½ZµQ¯–ñ·¹þv§ÏœÁØ‘#ÑÿÝÞ†åÖî³ü87Í¡V«1û˹6zæÂ¥KX»yæ|¹ô{ÏjeæÞƒ8vêbbcñû‰ãØýË~l_»Þ¬ó˜ˆˆŠï2¥pýÊ5Ãß%ÝK}à]¬XÖ²‰¢ =ôFÐWsyÿ!voÙ‰ ¯æ¢VýÚ¸v [Öl2´}õ“†ñAé· IDATÇ也aøøQ†åuÕÃ{íßÅþ{Ñ­_ÚHô×ë3Í6,'g'|1uÎýu­Þyñaèÿæ.F`õ*ØsêÀK·Õ’m»rᾚµ ¿ÿ }¿èýA?øTĬ Ó±eÍ&¼7l`žÖ›žþFnccök,uê÷ã¨T¥²ÉÞq±qøyóO8{ú ªÖ¬†úM¢÷ ¾&í®\¸„ßÁüïáó)³ñÛ/¿"1>5êÕÂÔ/fÀ?àÅÔ«*ûcÎ×_`âбXýõ÷:v~Ù¹;7mÇòWF –z-!{’Ì\4ïêkXX½*>6k¿]e]`É1iÉ>³ä|³”5Çovìì±ùàvŒè=ÃzB›Îí0÷›ù(UÖ´aÉ>«Y¯jÖ«e´ìèÁßpöô ;=ú¿è/X»ÏróÜt*áŒÍ·ch÷Ñ¢ZcŒŸñ þ8ô;’Ÿ%cë¯;a“‡çN\¾p[×nÆ’9‹Ðûƒ~†,3ï=ÀŸÇN#.&§~?Žƒ»`åöµfóDD”·8‚ÆLîîHU©¬z­(І!±?ü.ál|ã½í»w!6.C 4ZÞ¦EK( üóï‹oÙé¿i¤t0þ–Rúi7ê»{ïžÑòÒ¥¼qùêU¬üa}–ÃÖ-µ|Íj89:âý>}–<ŽJ%þv$_ë:p ¶®Y‹YS¦Z¼-æØýË/8v꾘1Óä¹£{öáÀöŸ0aôȦϛ‹2U±qÛV£vg/¤ýo8sþE³§NÅ‚  \¹v Mßio25×þУSgL™„_ÿ8ŠãÇa@ïÞèÓ=ûoJD½æÒË,ãpñA}ûÁ¥D œüë/«Ö ˜¿Ï,9ß,•çÔ¨V ÿ<‰‰c>ÄþÇQµQ£77\¼rï~0ï¼ý6Ï™gôœµû,¯ÏMs­Þ¸w""rmô̶]?cð‡cð,9mZ¶|iÛMÛ·¡y§è6à=,[½ >eËåJ DDôjróp‡*5çý‹Œ~;—0î_ìÛ¾ñ±qè7t€Ñò·Ú´€­Ba4ŠG½î 4¾^¯Ý°.àþ]ãëu¯ÒÞ¸vù6­ü!×®wÖ/_ ¥“#z½ßÇhù Ñƒ¡tTâèÁßòµÞ~C`ÅÖÕ˜8kŠÅÛbŽC»àÏc§ñéÓMžÛqt6؆FC&“aáôÏQ»L5ìØ¸Ý¨Ýg/ÍœQñÉìOñÙ‚ ܸr]›v0™š«ïþèУæM™ã¿þÉ#& ç€wÑ¥O÷BY¯¹DýTMúïê g—8sÒúþ…¹ûÌ’óÍRyq¾@•ÕðÛ'0râü¶ÿW4¯ú¦QÈ›®^¼‚ïFËwZcæbãéͬÝg¹}n¾Q»:–ÿ¸j•s'ÏÂå/á‹å‹àYÊ+WÖŸönÛ…ñƒ?Bò³d¼Õ¦ÅKÛîÜ´=šwÂàn°nÙ3DD…3=ŠŠ‚«‹u7sEÑì ¨ÿ._† ¨Û¢9|ªWƒG%8•+ƒb^HMM…*]H¤ÿ€;㺕ÒæËMoóÊUèúNŒ?ëÖÆª 9¿°» ÿò~&Ãà üýüúâ¾'ùQoÝšµðn×nhÑ´©ÕÛ”•[wî`øø±èÛ£':´ikò|…òåÑ®UkŒ: ;~Ø€{Á×дћ4f4®ß 1´ …£R‰sGaá¬ÙèÕ¥+ú¿Ûû¶lÅ“§O±v“éÅ𪯿‡›ÚöèG¥K.*ÔõšCßÒh5FËår9*úUÀˆ«Ö«gÎ>³ä|³T^œozÅÅðåì98wô+UÆ>DŸ!ƒ¦\°ÖƒÈHtèÝ þ~~øqÕ“¡øÖî³¼<7Í¥Óé0ÿKðvó¹vï™ù3ƒqeJ•Â'3¦#éÙ³,ÛNþx,T¢w'Ç÷€ÒÁûõ1 E‰ˆèõý( %\­ë_È,è_\ù/íßîvu[¢žO ¼áQ •œ|à[̪ÔT¨Uj£õ¦×ëJýõºñµÆ²Í+Ñ®ë;˜|Ñ¢]+ 3«v¬Ç¿÷® AÓF7h B¯ß4´  ƒÒQ‰CçŽbÚ têÕ=ú÷Âû~DÌ“§Øºv³Éº­úÜ<ÜзmO(•˜·t¡I›ÂT¯9 ýMiÿ¯¢îÝÉYÿœ}fÉùf©¼8ßôŘþå,:÷;*V„!cdŸ¡¹Ò¿xô ý;ô¯y,ÿq•IÿÂÚ}–Ûçæî-;Ñ·mO|±üKlÿ}7\ÜÒ¦O[¹ä»\Y^ølþ ÜL¸ ï2¥0ç“™x–”u_dôäqG‰q·ñóñ}pP:àýÎýLT""Ê hÌtç^„É}Ì%“ÉL‡¬ØØØ@l[»G÷ìÃù?Žãæ¹Фû±tá‹ù¤åbÚ7Æt’yëöpsÇÖ5kqîè1T¯ZÃÇE¦ñ÷¹³–oÔs1q±P©3ÿ@ÖÖÆÖhÄPa¨×Zw""мSÔ¨Z ë–.3ë5ÎNN˜3õ3hµZü{ñ¢a¹V§EJj*Jy' b%x{zâFèÍŒ«‚­­-ì‹ÛC’$ÈEy¶óBt½æÐoƒ&C RU©ðóõ±j½zæì3KÎ7KåÇñ[£Z5üyøWôîÖ[Þ‰m»~ÎÑú“’Сw/‚€ý[·Á¾xq“6y¹ÏòÚ¯ÅÝ{÷Œ¦ÔË ööXöåb܉ˆÀÌ/>ϲ °±±£R‰¦aÿÖmprtÄwkMoäLDDEß½;&÷a0—5ý‹ï·­ÁOGwãðù?púæ9\Žº°¤{˜·t¡­~DйëvópÊ­«qèÜQV¯‚IÃÇ£uf8ÿ÷9Ë7ê¹Ø˜X¨²ø@ÖÆÖÖhÄPa¨×Z÷îD GóΨR£þ·î[³^ãèì„Is¦B«Õâò¿é®×µZ¤¤¤š|Óß? "<¼=vÃôzÝÆÖÅí‹C’$ˆr1ÛþEA×kÙËú©*”óóµj½zæì3KÎ7KåÇñ[¥F5ìýó:÷î†=[ÆÞm»r´¾¤Ä$ôïЂ `Ãþ­(nŸuÿ"/ö™¹n^ ÁGF᫵ߢïþhÜ¢ þ¸|­:¼ ñÓpúSy^ƒµììñŲ…¸w'‹fÎϲ¾/¢tT¢AÓFذ ñÃwì‹44f8z⢢£­¾‘³(ŠÐêÌûfK@ÅŠÐh4ˆŒz„ò>>(íí w778;9¡¸ÑE ~ÎeK¿5S«zuü¼a.ž<Ĥ$´éÞÍè†ì–¨èW¡áá&7×ét½Žj…ª^k„†‡£y§ðóõÅ®M›akkkök?qŒîïáçã •J…[w$ qññ([ºŒÉzÆ~:‘QðãªÕ»} ã¦~Z¨ë5‡þ›S;P ‰‰¸‚ZÕkXµ^=sö™%盵òúø•Éd;r$àÆMë:³@ÚyÙ{ð Çþ­Ûáåá™i»üØgyeÍÆ(áìŒ.íßÉõuwlÛ=:uÆÿV|‡ —.™õQQ¦T)ÄÄÆæz=DDT¸:z££eûVV½Þ’úþiÿvGEF¡\yx•öFI÷’ptv‚]qã»E+¯×«Õzk~Þ€ß.ž@Rbú¶éatCvKøU¬€Û¡á&7×ét¸z Õ^ô/ C½Ö¸z =šw†ŸÖîÚ ®×Oþžv½^³Þ‹ëu?_¨U*ÃÍÍõ$IBB\|¦÷™1v*¢"£°üÇ•¸v3Ç}V¨ë5‡¾¡Õ‰ ‰½‚7j½aÕzõÌÙg–œoÖÊëãW&“aèØ€Ð¡V¯G«Õbdï!¸Žû·ÀÃË#Óvù±Ï²³wÛ.hµZ¼ÝéÅÌŠb |±¿P1wÝU DÛ–­Ÿ€Ø¸8«ÖѾuk$$&béêUFË7lÝŠ§11þþ |­÷ïsg±çÀÃ}SrêïsgѰMk4¬[·ï@q;»l_#Iþ>w#ÆÃ¤™30òƒÁ¨P¾¼áùM›B&“aÑRãožíÚ¿‰IIxëÍÆFËwì݃U~ÀН– O÷˜6ñ¬üa=vÿòK¡¬×\¢Lß¡~qËÍsSncI’pýò5£åO¢¢¾2}õï™ó8¼ç`Žî-”[æ|3ööødØ8³ú"·Ãn!äê ԬǾQA“t…ѶŸÆÅ+W””„{÷ !1‡vì4Ü+Hû`-ýÍÑUjbbcqúÌ߆eþåýàîæQ”}ý2>eËbûÚõ8jšuhreÊ EÓ¦ðòð„›kI¼Û­«á›íú!ýæ~clùšÕ°µµ…\”ãá£Hü}î,ö:„aßGioo«¶mØÀ÷±fÓF|2c:BBCÑ N]\ ¾Œe«WcÚÄOPóßRÊ«zÓ›>o~;~ ýzö¦ïWšõ>Y9zâ:ôîo//4nÐë~4ž ¹²E4{óMi÷í˜4sn†…!$,±qqðpsÇ3fbÊØqF¯ ¬TþëÖ">!mZ´DHX(¾Z¶ýzöBËfÍ mïÞ»‡¡„½{£W—®iÛ8ñùã ùøCÔ¯SÛp<†z-¡ï@mܾqñqP(øå×øxå ¶®Y w77C[KŽIKö™%çÛý‡qûnÚ·ü._½  5Ôàíéßr/núnÍñ›°Plغ¢(B’$\½~§ÏœAô“ÇX·t9ê×®cÕ>[·y3–®Z‰M›"âþ}|¿~t:$I‚N§C¹2eѱm[‹÷Yz¹yn>yúû6üýä1´Z-~زàäèˆ.ï’Ù¸}Ôj5õÍÝéÍÒóòðÄ‚ Y1~–®Z‰†0zþüÿaý?B¡°Å•k×°ò‡õðòðÀ¬)Só¬&""*önÛ…«¯àYÒ3ìß±‰ ‰øñÐO†{¥i–E§»9ºJ¥F\L,Ξ>cXæëî%ŸßƒÆ¼þEŸ²X¹}->8 ÝšuDéreðf‹&ððò€«[Itz·«á›í–^¯¯_¾¶¶¶årD=|„óŸÅ‘}‡ñÞ°ð*ýâzÇ’m{oØ@lY³ s>™‰ð0ÔnPÁ¯`ý²5;mªÖ´¾an½é-œþ9NþvÝúõÄÒM+ÌzŸ¬œ:z:ô†§·ê5®­ë~4z¾Be4l–v½þèA$æL ­›a C|lÜ<Ü0õ‹é3e¬Ñë*VÂ{ÃbÊuHˆOÀ[mZ <$ßµÝúõDã–/îxÿî=L:=¼‹N½ºÆNŸˆãGŽaÂQ³~mÃñP굄þ—;6nC|\< [üöË\½xßm]’î% m-9&-Ùg–œo‘÷"âö]ÀµËiý‹ðPC Þž(ëû¢aÍñ›ð0ü´áEÿ"äê œ=}O¢Ÿ`ɺ¥¨UÿÅÈ'KöÙ¶u?bÝÒÕhÜ¢ DÜÇÆï×ú’NBér¥Ñºc[‹÷Yz¹ynvîÝß-ZŠ÷;÷ØÉç‚/n‡Þ²…ß jÍ7Ð¥O÷L_·`Ú<œüí8ºöíe›¿7y>æÉSÙÿ«áï'ÑO Õj±ý‡´{P::9¢m—ö9ª]ÏÃËŸ-˜‰É#&`ÝÒÕüÑ0£ç/ÿÛÖoBa‹ëW®aÓÊ p÷òÀÄYSråý‰ˆÈz h2ñÓžÝÒ>ˆìÖ±#¦Œ7w£6‹–~‹ëŒçêÿj1>ÿj1`Ö”O1cÒdÖ¿Ù¹q3‹—.…½}qØ/ŽR^Þ?z4zve­ÚgÝ:vÄÕפ…|GOœ0yßþïö64€ùû,½Ü<7oß½‹÷G4Y®_öfý&ûyõ† ¨R¹2êÔ¬™ã÷™aßǦíÛ0mÞ\tëØÉ(Œ;rì9öìíQ·V-Œ2—%ò´&""*xû~Ú íƒÈöÝ:`Ì”±póp3j³bÑ2lX±ÎhÙ¿gΣsã×Ô«wþ€öÝ:XÜ¿x»S[üv»¶üŒ¿ŽBxHΜü E£ië· ~ŠrË®×§ô)llÓ®wðfóÆXóó“-Ù6¹\ŽÝ'`þgsñû#Ø»mªÕz«v¬G›ÎíŒÖ‘Wõ¦—š’6ÕZ1»œ_Ãܺ†”äÜ»…OG}bò|ß!ý Grr2N=ÿ€ŠèÞ¯ê5n€öÝ:d9½ØË¿„O_ìØ¸‡÷@9?_|úùt£iµZ-F÷'g'ÌýöÅ}=DQIJÍߣuføxà(l9¼‚ x½–Ò߃æÒù‹¸vé*ü*U@­uðÝ–U&÷»1÷˜lÓ¹Eû 0ÿ|Û½õgÌž8è†o>_‚o>_˜8k ÆÏHÛïÖ¿Ù »q+/Cq{{·/ÏR^6~:öìŒ2>Æý KÎã«7¤…|§Žž4yßý{Àü}–^nž›>~¾Ø}ò,Z€o¾X‚„¸x”+ïƒÞƒúbø„ÑYŽKŒOv˜ÌDÜŽÀØ÷G›,×/«ûfý\ hà½a±sÓOX0mÚwë`Ü8r 'Žƒ½ƒ=jÔ­‰Ac†`ð‡Cáì¾QAž?Œ ÁÁÁBtt´ ”/_^ˆŽŽ–ÙÚÚŠIII2NgS¼xqµZm  ˜L&³—$I)IR‰ãǧõ>Âîd\máæâ mJ³Ä¤D”prγipˆ¾~U5À¢9s1aô˜‚.‡(OiµZ¨5j¨ÕšB¯"¢Âêß‘]‚E¼À$%&!)1 Î%œ`ËþQž¹|Í«¾‰‹fcÄÓʼn^WZ­µjµ:ßîëCDô*ð‚‹U¯kÖ¬YgAbAHÐétIRlllTÏž=SËd2µ½½½N¥RiÝÜÜtááá’R©”ÜÜܤ*UªHAAARÆõqMööp°ÏüÛDDDÖE¢(¢?—#"zíØ;Øgùíj""¢¼¦ï‹(Ø!"*”d]Ñë† Q>ãgDT ªT® éilA—ADDDDDE@¥*•ñ@zRÐeY„#hˆˆˆˆˆˆˆˆˆˆˆˆò"""""""""""¢|Æ€†ˆˆˆˆˆˆˆˆˆˆˆ(Ÿ1 !"""""""""""Êg hˆˆˆˆˆˆˆˆˆˆˆˆò"""""""""""¢|Æ€†ˆˆˆˆˆˆˆˆˆˆˆ(ŸÉ º¢W•¤ÕâáƒPÜ¿‚Ȉ[xx÷݈¨È§Ð¨4¨è‹Áƒà\²TA—JDDDDDDDDDD… ¢—x}¡Áxp÷"ï¥0Ñ£ñøQ,b¢¡ÕJž·5ü|þËý°(ܸÐßî:Eq‡‚(Ÿˆˆˆˆˆˆˆˆˆˆ )4ôZ{–ƒûw®ãöÍ«ˆ¼Èû÷uÿ¢#cð$*Zµ2 arž/5iàñ½8œúe Zöš?DDDDDDDDDDD¯4ôZxü0'ÿŒÛaaˆº…èGñôQ’Ÿi¤…)™…0r!mIfá‹é²ÌƒšÐËѲgno½ÊÐä²Èˆ[ˆ~t:­¦ K±‚7”ö©A&+èbrÍþ¿ÅŠù«¡ÓHŒÃùó_Ò–™,/ a2 m`ô{Zë˜È¨ÜÙ""""""""""*2Ðä’ë—þÁŠy~ãrA—’cî^eðÁÄyhÔ²SA—’c±ïcí—k!h%£Ñ0/“}c晇4zO>ÍñvQÑRt†I ë—þÁ´¡ŠD8Q#°`â@Ý·µ KɱKÿ@§ÒAáùÏÂK™´2>ðâ@|þ=é1Q ³ñDDDDDDDDDDTh1 É+æM€*5¥ ËÈU’$aõ—Sò,© KÉQB1]à"¦AÌKCãG„„tw§$º ­$&ªû¤¶žˆˆˆˆˆˆˆˆˆˆ +49yïv‘9“Qb|,.ýs¢ ËÈoßJ†.†p%]#¦ bômÄ !Œ,]£ƒmº‡´4RZ£•$A+IÐHúç%<¼{£€öF hrèitdA—§?º_Ð%äˆGi?ØÈeÏä=~:²ô#aHÏÿ/}côðü!™1/xþx±Ž·oän """""""""¢BF^мêtZmA—§tºW{ûdr8¹G\”ñTmÒó‡ñÿþSJÿ·éóFmŸ·1]füûƒˆÛ9Ü""""""""""*JÐP‘çâ¨$Cø’î`F¸’¾UæÏ½ˆyÒ<韼÷jD""""""""""¢ÜÅ€†Š¼žnÐ\~d°¤ý|y£ocø=]ØcÜN2Y–”ÓÍ """""""""¢"„ y®¥<¡EæÓ•eþ3óFÿ3«@ÇV.C¹RN(ííO{¸y‡³»\pô,“ëÛEDDDDDDDDDD¯.4T乕.ÉTf–‡0úŸe½”(íå/¸yÚ£„[18ºƒ«-!óÔ©Osm{ˆˆˆˆˆˆˆˆˆˆèÕÇ€†Š<¯²~ÐH™ßk&í§iSÆS‰ÒžJxx:Àݽ8J¸ÛAY²ì]m ³‘Y\ƒN› ­: ¢}¶„ˆˆˆˆˆˆˆˆˆˆŠ 4TäyûT2ASÌVD)O%Jy(áîa’nÅQ­\(^Ò2¹å!LvTª§°c@CDDDD¯Fð¿NâaðxzçRã¡Q© å°±³ƒ½KI8”t‡S©Òp«7?ˆ6¶]6°øG}óâ=D£‡xóZµê”gPØ+¡P:Â¥œ/¼«Ã£R`A—KDDDT ÐP‘çæ]z¿¥³-œ\‹ÁÁÕv%l,¦#Ë+êÔ§°³ç½hˆˆˆˆèÕqûïSømÉ<{úÄì×Èär”ôõ‡G¥@xT „wõZpöæupQö,æ)^½ˆ¨kˆ ¹†G!W‘göë]}Ê£ùÇSá]µFVIDDDTø0 ¡"Od¨ß¥T)QZïCCDDDD¯’{ÿž™ã!ét½N§Ñ êæ5Dݼ†ËØ (Q¦|ë7Oý7á]­d¢˜%S>‘$¢nÞÀí3'qûÌ)D…\‡$Yvœ¤÷äv8~ž8Ý}φˆˆˆ^+ hrèÑãLjI-è*ò΃hó¿)W˜Ù*\ A@S ïODDDDd‰ß}eq8“•˜ˆ;ˆ‰¸ƒwl‚­ƒ>u¢B“–ðmؤÐO‡–‹˜ûˆ½w Q‘HŽ‹Arl ’žD#9.ê”d¨’’ªg‰FûÌÖA lìŠÁ¦XqØ9—€} W/á;g(Ý<à\ºœK—…“sAm¢Y´ îžý¡§ÿÀNãYLî~M§ÕâøòÅè³|c®®—{<®š IDATˆˆˆ¨0c@“C‘QÑxZ„š{‘jäE‰‚.*Ž !"""¢WDìƒ<¿™'ëV%& 䨝9ö+씎¨Ø¢-Út‚»åMôÍkˆ¼GÏRyú>DDDD…šŠ|ü¸H4÷£¢ º„\a£p)è8Ž2¢CoäËû$'Äãâží¸¸g;\}+ °M'TnÕvNyÿ+­FƒÈk—qþ î]<¨›×¡IMÉó÷ÍJjb<"¯_Aäõ+>¸ Wƒ»e”®QekÕ‡G@5ˆò¼ïÆ'ÇÅàÆÑC¸zx‡…äùû¥÷8ìÿìÝwtÕù>ðgf¶ïª÷nYî÷6¦0JB PBB IH¾HHø%¤R$’z0¡Ó\À÷.ɲ%Ëê]Ú¾;å÷Çʲ…ekW»Ò¨<Ÿs|,vçÞyW’9;ûÌ}ïA4DDD4b0 ‰Rí°_A3LË`hZMAïRˆˆˆˆˆNËÓÜ4àçl./Ãú'ÿˆÏþÏ»g|ù«HÌ΋é9ÜÍ(ûôÙ²Õ»·#èõÄtþX“ý>Ôì݉š½;ñùó‡ÑjCîôÙ(˜»E‹Î†=9%¦çk«>Н=ý«ß‚Ätîp9›‡G"""¢p0 ‰’Õl†iïoi³šõ.!&L&ýM“!0˜âõ.…ˆˆˆˆè´EÖíܲß=o¿†½ï¼ŽQóaε7!sÒ´>ÏçëhCùæÏP¶îCÙ²ª¢Ä°ÚôzP¾iÊ7­ÃÚÇ‹ÌIS1vɹ»äü¨Âš†ƒÅØùú (ùxUÌöê3Eçó 4QÊLOCòðÈ0z”›‘®w 11Zœ@0ÐÌ€†ˆˆˆˆ=ƒÉ¢w Ð4å›Ö£|ÓzäL›‰9×}ù³æ…5VUÙüö¼ó:ŽlÙ èÐ4MEí¾]¨Ý· Ÿ>õFÍ[Œ)_‚9 bXsT|þ¶¾ø,jöîìçjÃ'Hü˜‚ˆˆˆF¾ó‰Ò°h2Óº¾VT5Í-hw¹u¬(|¢ 3%ÉqHDÉUѯ§4|-°: u­ˆˆˆˆ¨7Ö„½Kè¦z÷vTïÞŽ‚9 ±øÖ»2ª¨ÇãÜ-MØûöëØ·ê ¸GN«,UQpxÃZÞ°qY˜rÑå˜|Ñå°%ö¼—OÓ¡¬{êQTíø|€+íÝ`ûÝ#"""êO h¢”™š:¬šì´TÀÑÆ&<¾òMÔ47ë\QäLšˆ[.^£9 ~O­®µ­ºžŸˆˆˆˆ(qÙz—У#[6 rë&Œ?g9ÝrWW[¯Žúìøï Ø÷îJÈþa¼IhœõµØøìøüù¿cì’s1÷k·tíåãnnÄæÿ ûÞ{cЮ*ŠËÈÒ»"""¢À&J qq°ãïbR|‚ŠŒG_u-C3\ظÿ6,ÍOÖ? ñ·èz~""""¢p$fçè]Â)išŠâßÅá kpƕף½¶ ¥Ÿ¼?¤÷–éJ0€âßEéšÕÎ…ˆKMÇŽÿ¾€ Ï«wi§•5x÷ˆˆˆˆbmG +‡ªë†l8s̆½pÞØ|½Ë@€  –øDÄgd££¾FïRN)àñ`ó¿ŸÖ»ŒAO•exÿ-½Ë‹#-Ö„žÛ² GáíH#ZSG»Þ%D­Ãã`ˆ×» ® !"""¢!#cü$½K &uô8½K """P h¨wšÞĆÁ¤ÿXÁ@;4­ˆˆˆˆhðËš2]ïh„É™:Cˆˆ1C@M…ú+’ˆˆˆˆhøËŸ9Oïh„)˜³Pˆˆ1ŒæAЀûÐÑÐ\0ŽÔt½Ë žœŠ”±z—ADDD4 ÐЈ!ˆfH»Þep""""2 知w 4BäÏ^Aô.ƒˆˆˆh@1 ¡ÅdNÖ»­z—@DDDD–1g.Ó»! fÏ×»"""¢Ç€†F£Eÿ6gAWÐÑÐ3},ñ z—AÜ(IÈãžGDDD41 ¡ÅhÒ ÷ !"""¢¡B”$Œ?çB½Ë a.öXõ.ƒˆˆˆhÀ1 ¡Å8Zœ1 !"""¢!dêŠ+õ.†¹Iç_¢w DDDDº`@3ŒU -8ƒ€[| PEÓ»²Ác0ìA#д Þe…%9¿Y“¦é] SÖ¸x.8Sï2ˆˆˆˆta눑Χu^À"f °H¡¿E!²y²òÒ1cÁdT5yÐØêAG‡ÎÚÚÜhnêÀ˜øÈçŽà @CÐß “%]ïBˆˆˆˆˆÂ2å¢ËQ»·ÞeÐ04nÙrHF“Þe邎ÆN…;ø:ví­Äþ½•Ø¿ÿ(쯄³Ã‹T l.ŸÇ‡¹gNÅí §tBæÌ¼ €7¦µUFS€¾ËŠ hˆˆˆˆh»ô|¬}ò¸œz—BÃÌÄ .Õ»""""Ý0 Ñ‘(ˆ(…‚ÑY¸ôÒyMÓðÜŸÿ‡•ÿ|/¢¹Z›;ð‹ï>†qSFáš›W`öâ©]ÏišÊ$‚h€Á9Сk܇†ˆˆˆˆ†ƒÙŒ Ë–c÷›¯ê] #)…c>v‚Þe醎TM !±gç!ìÙ¼;6îGùÁªnǵúúX›2µsˆAÒ,Ç-Ý[¿÷gŒ™T€»î¿cr qšnŒ¦d4DDDDDšqåW±÷ס*ŠÞ¥Ð01óʯê]‘®ÐèHSU@ÓðÇ?¼·_øI=´4»àòŘ:g"ІÖ/4 pÄY "ë[ð·?ý·Ç¹ËöAé¾reCU5üIw1YRàuUèZC0À€†ˆˆˆˆ†–Äì\Œ;ûø®Þ¥Ð0àHMÇøs–ë]‘®ø±½ŽTUCo{¡TUÔaâ´Ñ8c'¼Þöm/EéÖZ$ôº—¢jqF]BûÐè+àe@CDDDDCÏÜëoAÉÇ«B7›EaÆ•×A4õ.ƒˆˆˆHW ht¤v® 9]H³oGöí(ƒ øO~£'äcéY?E†àëu~MÕMƒÖK4Ò-Éz—€` Yˆˆˆ"–˜“‡qKÎCÉ'ïë] a&»“/ü’Þe鎎´0VÐt«ihké€×ãƒÛåâÂ@ë½K¡! )¯“/ú’Þe * htjõ¥áÒKfáÒKf…=î‘?ÝÞ'ìAÍ šáÈhJÖ»îACDDDDCÞøe˱÷×Q½{»Þ¥Ð wæ­ß‡dàGDDDD'â»#…öW‰~˜Þˆ£™/2Zôh¸‚†ˆˆˆˆ¢åq¹ÐR_¯ÓW{;¼n7‚Á,6l¬v;‰‰HÍÊ‚Áhì—–|ç‡xé;7@•å~™Ÿ†¾Ü3æbÔüÅý2· ¢©¶®¶6xÝnx\.ø<¦ÐïB¬q$gdÀæ`{5"""\ÐèH’$„–¹ô/A iÇVì˜Ìú4ªâ‡tC2Úõ.…ˆˆˆˆ†€æº:lùècÞ³•¥Qyð ««Ã+ È,ÈGnÑ䃢©S1}ñ"¤åäD]Wêèq˜sí7°ùßOG= ?³˾÷Ó˜ÌÕPU…]Ÿ~†Ã{÷âèÁƒ8z¨ õ•G¡„¦åä ìX䇱S§aÖ²³‘’™“Úˆˆˆˆú‚ŽDQ4 ¯þw3m/y€²xÙt,Z6 IÀ»ÙNd ­ hˆˆˆˆè”¼n7>xé%¼û¯ãО=}žG‘eT:ŒêC‡±yõê®Ç³FÂÔ… 0kéRÌ»àØãâú4ÿìë¾òMëÑpð@ŸkŒ5“ͬ±Ó^8‰™y0Ûã`´Øôyà÷8ÑVW…ÆŠbÔ•î†ÏÝ¡w¹§%MÈ= E“‘”= Ö¸D˜lÈ?^7Úë«Ð|´ 5%;ànmÒ»ÜnæíV$fçõi¬ÛéĦU«°}ÍìÞ°uGŽDUKcu5««±mÍš®ÇЦNÅE7| ç]s ¬v^›ÑÀb@£#I¡**žxì]Ä=1Ÿ¿ª¢‹–M…ÙÀ¥3_d0ÆA ÐT}ƒ«€¿{®®5ÑàeµÛqé7¿‰å×_êÇQ]vÅÅ8¼w/í݋ڊŠPëä>ª­¨@mEV¿ð"Lf3æž–^qæŸ>ÌVkØóHÎÿɃxùŽôÆþÚ&\‚ wòL\r ò&Ï…(I½ŽÑTG÷mAñúwP¹{cTßÏXKÍ‹É˾„Â3΂ÑršŸÇÔy]_ÖÞÒÏVáঠÈÁ¨òÔ2'LÁŒ«®hŒßëŦU«ðÉÊ•ØòÁ‡øý1©EEd*À˜)S1zÊŒš0ÙE£‘3z4LfsLÎADDD)4:%ûv†-àú!C9r¸ µ-(ˆáqÆ~þ¡M€Ñ”Œ€¯A×*¸ …Ãd6£pâDNœˆÅ—¬èzÜãr¡l×.ìû| öoÙ‚[·¢½©o+(~?>}ëm|úÖÛ°ÅÅaùõ_Åå·ÞŠÌ‚‚°Æ'çâì»~‚Õ¿¹¿OçVæ˜)Xxõw’?6¢q‚("ê<äO‡æªCØøò¨-ÝÕOU†'>- ¾òmäO›ñ،ѓ1zf®¸[Þxe›?Ô%t2Ùl8ÿ§¿ +$€šòr¬|úi¬þÏ ð¸\QŸ?1-gÏÁ¤9³1iî\Œ>+dˆˆˆhÐa@££#‡êðð}ÏCêÇ.ßÿÆcðº¼ýw‚!ÌdNb@CDDDDCšÍáÀ´E‹0mÑ¢®ÇŽ””`ÇÚuؾv-v­_ß§»=N'^ÿë“xãé¿aáEâªo“çÍëuÜ„s.BåÖM(þð݈ÏÙW’ÁˆyW݆IK/ƒeßè”Ü"\üƒß£xýÛØøÊ_¡1ª2<‚ `ÒÒË0ïÊ[!MQÍeOJÅÒ›îÁ˜yçbͳ¿·£5FU†gÑ-w!1»÷n{7mÂkO< ï¾MUû|>[\¦/^Œ™K–`æÒ%È7®Ïs 4: eÛú·Å–³ÝED¡_é iƒa4DDDDkãÇ£`üx|éÖ[ È2ömÞŒ ヌ ï½‡ÚŠŠˆæR¥kUÍœsÎÁÍ?£'O>í³ÝEõ‘±8âqÁ!½pbÌæϺi£&`Õãÿ7`Á†(IXrã1fÞ917wÒ,\qß“Xõø½h>ZÓ¹OÇd=ýj•Ã{÷âo?ÿ¶~üqŸÏ‘]Xˆ…^ˆ.Çäyó ø -¢ÞPÿJH²£! Á¯è]Éà3š€`ïb#"""¢‘E20mÑ"|ë¡_á_Û·áéO×ãúÿÙ……ϵå£ð­%Kñ»ï|ÕÕ§<®á`q4%‡ÍâˆÇ%?üSLÙ¥æÅ%?z¶„þ¿n% ç~ëç1gޱ%¤`ÅÝ@ZÁÀ­*i8¸¿ÇÇëÅ÷ߎo-=»OáLöèBÜpÏñôgŸâŸÛ¶â¶_ýÓ-b8CDDDCšaoDAQ&ÔÁ³Ïå 1š` D›ÑðV8inüÉOðÏm[ñèê÷qÙ-7#.))ìñšªbõ‹/ᦹóðÚO@Uºß ¦* •ƺì“Lf,ÿ˜Þþ8}•žƒåßý0š­ýzž³nø! ¦-è×s˜¬v,¿ó׈KÍê×óóÅ NU¼úøãøæ¼ùøðåW"jg—”„Ëo½}°ÿܺ_»çNìŸ`Žˆˆˆh 1 ƲrS0n|6l hz`¦Êe§ÞeÑ4iölÜñðÃxyÿ~Ü÷ì?0kÉ’°÷pñ{½x꾟áû^„#%%]·T–Cöûú«ä. ¾òm¤ßï瀔¼1Xtíwûmþ‰g­ÀØùçõÛü'²8pîm÷C2ûý\eÅдPSQ\Œ».Xާø9ü¾ð?ÆÎ˜Žïýéxqï|û7¿ÁÄY³ú«\""""]0 „ ð+@@úš«ˆFnùá— ˆ€Ål€È hN2VÐ@Ð߬w DDDD4‚Í&,¹ì2üfåëxrÝZœí50˜ÂÛ ~ÿÖ­¸}éÙxõñÇ¡i ½Yî¤Y˜pæÅý~ž]p>ò§Î‹ù¼Žät̻궘Ï{:©ùc1ý‚kúý<mUGñÒ#àÛg/Cñöía3˜LXþÕëðô§ëñÄÇãâo„ÙÚ¿+˜ˆˆˆˆô€fñÈ@‡ÑCf& éi¨ QÖT»_{Șâð‹G¾Ù3Gš7Ò'‘ 6ˆ’Eï2ðµè]`ôäÉøÑ_þ‚çwlÇÕwÞ {||¯c‚~?ž~àçøÅ 7 ¡âp¿Ö'Š\ý~=Ç©,¸úˆ’Ó9ç]yk¿·OëÉŒ ¯…=)­_ÏTT<ô­Ûñ̃¿DÐïïõx{|<®¾ë.<¿sî~üqNšÔ¯õ ÜEo3m4n¼í\L›’ÓÕV@–lú¼~òìÜuV á47²)0iîÜó—"5Åcëoê6ÁÀ€¦GFsüžZ]kú[u=?Ñ¥deáæŸ?€ë~x7Þzæ¼ôÈ£pµ·ŸvÌg+7`Z¦qÖðVàDªpÖYHÌÌï—¹{Ÿ–…1sÏEéÆ÷c2_bf> g“¹"%M˜~ÁÕØðÒŸûe~—/ˆ-‡êáòéõX«ÝŽKo¾×Üu'‰‰ýRÑ`Å€f8ë¼é¸ûÞË!tõ! +ƒˆÅ ‹°p^!îÿå[xmåv˜%ÀÒÃM[‚͆Ûï¼+.šÖmŽ›Îv€-Îzd2'ë肆ˆˆˆˆN¯¡ª •¥¥¨,)EGk œmmpµµÃÕÖ·Ó ‹%´2ÜI”`²Z‘—‡´œ¤åä =7™ùù·Š²9¸ú®»pÑ 7àÕ¿ü+Ÿ| >ç”Ç·´´a}[;fNGz‚-ª×Ü“IK.íãHmî§àõ «y)í7£/I“–^³€fâ’„È邏•´8UmGRÜ0gôéüã\€Ï_ÿ;ä@l÷ ªkó`{y”^6BµÚí¸âöoáªo»ÏÁŒßëE]e%ªªÐX]ÆêjÔ=Š€×EUàíí÷éóù`‹ƒ#1ŽÄÄ%&"!9yãÆ¢`üx¤åäôéüDDDDÑb@£³Ô´xÜñÃZÏo`EQÀƒ÷­À¡òFìßsŽãÏ5óλî<I‰¶nsTW·â¯¯„áÌ) †}h~4DDDDtœ»£;֮ö5kP¶k*„ÇéŒz^A‘7f Æ1ãgœ±3¦cÌ´ia…6qIIøÆ}÷á²›oÆ¿þ-Þ{þy¨JÏ}˜UÃæCõ˜‘Ÿ†¼TGÇô…#9c¦ôil‡û8=¯œž! ñˆ·]ñˆôÜܰçö{½(Û½¥;v¢dçNܹGËÊ ©jÔuÛââ?nÆNŸŽYK—bÆ’³`‹‹z^"""¢Þ0 ÑÙ%_ž‹Å€c+^<ž*Ëà÷`µš‘_˜‹ÕQðóÿ»_ºúI¸eÀfâ3Sñý{V`öÌ‚ÎÙŽ¿ Þúù!<úÐJ´·¹þE !FS’Þ% È€†ˆˆˆhÄ«*+úÿ½‰-}„[·B‘嘟CSÕÐ*œÒR|øò+£ÙŒióçcöyçbÞyç!oìØÓΑ’™‰ïý鏸ë_Ç“÷Þ‹Ý6œâdÀ®ÊF(ªŠQé½ïcŽœI³ºÚAGBÕ\èð¾Øí1§ç?ˆ³^ Aˆ|ÿ—܉³¢h’sGÃùª—÷ý®p4Í §÷?HrÜݧ:r'ÍŽY@SÞнG›O{Ì´E‹pûC¿Â˜iÓN{Ü1•¥¥ØüÁØöáGؽiSX{Ùô…ÇéDñ¶m(Þ¶ oýã Lž;³—-Ù—]ŠÜ¢¢~9/-X<Ð48]~<ñÈ{ØôÉ^(Êñ;€$IÄ’s§àæ;–cüØt,^P„]ÛËqùu‹pëÍgÂd2t[5ÓÞîÅ3ykVïÖãå 9ƒah‡¦©}jo@DDDDC—à³wÞÁÛÏ=‡]Ÿ~vÚUý%è÷cÛڵضv-žºïgÈ,(À‚ —ãük®9í‡èc§OÃïßz¼øž~à´7ŸüÁ¼¦{Ž6CÑ4e$D]kzáÄ>óú×AÓ¼ÝS5¼þÏ`³œy£'aßšÿõ©–c2F÷íµxü«OzÌíû‰öïB"ß÷'½u|QY];TŸúƳĴTÜú‹qîÕ_é5d;¸sV¿ü6¾· õ••1©/RŠ,c÷† ؽaž}è!L?s1VÜt]x! ¦þÙ_‰ˆˆˆF&4:²ÙÍÈÈJ„¦ªøÁÝ/¢¾ää7ŸŠ¢âã÷w£²¢¿{âøÖM a¿ëL—ÑyDè"NU4¼÷ö¼øOÐÑ~êžÐÔi4š¦B´ÃhÖ5õ¿öæfü÷¯Ū?ÖÆF½Ëé¦îȬ|ò)¬|ò)Œž<ç_w-–]u’ÒÒN:Vœݵ˜¿ü<ýÀϱú…z ™öWµÀ$IQ·;KÌÌïÓ8o`kû‚ÛúÐ$fõ­Žnsôᵨšþàþ“×4üÁ°˜¦G4:ÊÊI‚ hXóiJöT"ñ47┕ÔbÍêÝ8çÂcoº_øìÞU‰<þ>—Õ÷oÁÃÐ`XA„Úœ1 !"""Þ¼n7^~ôQ¬|ò)x\®nÏ™-ħ¤Àj·Ãl³Âh4Áj³u;Æï÷ÃïóB Êp¶µÁÕÖ¯»ÿZÞ·OÞ{þþó_`áÅãš»îÂØé'¯ª‰ONÆ Ë®¼¿ºñ8'×´³²FIDf’í¤çÂeïÛûeY>Ôãã`ißêèCk²“æèÃk‘åÃzÞ÷'(—ô) %̶8ø\í€ú6vé¹­™ÕdÀß»Wþäg§_ºc'^yì1|úÎ;ýÒÖ駱ìv8—”É Ál±Âl6w;Æëv#(á÷xáu»ÑÑÜ ¿ÏhmlÄ~ÿ¬|ò)\qû·ð•;ï„Õnï÷º‰ˆˆhøb@£#«ÍhÖo(§Iò IDATƒ)ŒîV›?+Å9Ë_µµyðì_?švC‡nÂ(™!¬Pdoï÷£@ 6°¯1ÑpU¶{7Þúdz0šM¸á§?AVÁ($gf )- ))°Øú\Èœííh­¯GCUêV¡¡ª uG¢êàAT<9ˆªv9ĺ7ÞÀº7ÞÀ¬¥Kñ•»îÄÌ%KN:næÒ¥¸íŽoâå§ÿ£ÍÝ(hÀöŠ,0e!Én>il8Œ¦¾SÔžWw(j]¨0D¶¯ÁléS'’úðZ­õ”ÏÉj]Ÿk1Zl} hZ\>l=ÜÐ㪩üÔ8LÎMÆä9³z»í“OðÒ£bçºõŸ÷TŒf3òÆŽEþرÈÈËCZN2òr‘ž—‡¤ôtÄ%&Â`4öinŸÇƒöæf´66¢¹¶u•GP[Q§îû.ùÆM(š:5f¯ƒˆˆˆF4:2™ 4Ti†Æ5Á‘ò[9óÎ;»ñÂÓÁÙÑ{°ÐêLë#‘Ñ”EŽn“Ïhý§î×<ØiZ½"ê\ê\¡¿k]<V“†E¹~,È‹îC"""¢¡nÌ´iøþ#Šù¼“ IiiHJKÃè)SNz^‘eÔVT üÀÞ»ÅÛ¶£xÛ6¸Úû¶bbÛš5ضf Æ17ßÿÎXrV·çSó 0cT2lØUÙ„ |¼u–¢jØz¨K&eÃd">·"ûP± Uë¹´ªy¡j>ˆ‚5²:‚Ñ¿·Uƒ‘¿UmëÓs½Q‚þˆÇ‚ ¶n€ú…pÆh1#?­k¥TBfn·ç·}ò þþ‹Q¶;º=S‰‰˜8kÆÏš‰¢ÉS0jÒDd@2ôÏG› › yyý2?\ ht$@ÓàvÂZãrúM˯nÇß{Ž0nþ¹ìª¹xòå]ˆGäoºG “5>ÞÍ©ï†ëoÇîxÓ4­ÛÝoÇ6ï¡ëkŸ, Î%¡Þ%¢Ö%u}íWzNÿ¼²€·J­Ugðwˆˆˆh IrÇŒAî˜18ó’K„Þ÷U:„ý[¶b×§ë±cÝz4VWG4oéŽøñå—cþòå¸íÁ_ wÌ@rþh@V’‰v3¶—7¢Ååëç ÊØ^Þˆyc2ÑË^ñ'ñ¹ˆKÍŠhŒ¢vàÄöÐ'Ñü@„ßíêý Þæð8#z-=Sµ¾uÐ4 ~Od¯GÓ€íð»·[K´™1kt:læã3$å*KKñôÏîÇæ>èSi998cÉY˜±øLLœ= 9EE]×(DDDDC2 I„F@£È* 6—‡µÆh”pÝM‹ñÌʽ@ÿ·ó²Œ&ý÷¡ øzîÛkÇB˜ÿ¨ª õØßª ií~#}F4yͨwPç–Ðê £_ÖUš±0Ï©oɈˆˆ(†Aè mοö@Õ¡Cعn¶|ô¶}²~oxøoZµ [?ú+¾qn¼ç$åêzÎj2`á¸L¨nÅ¡úã+v;¼8T׆1Y‘íåÒ^_…´‚q„Ólô ˆ|%O{ýшǜ4GCdpú×"ôáu€»µ1âAëÚÐø…Nc20!;©[hbKNAPVñ÷{îÁ;Ïýr«†ÌV+f/;³Ï9gœyrŠFGT#ÑPÁ€FG( Iˆ·`›z¹J–$<Þ jz^¥ßEpáyã`µ¡*Z„]•G£Yÿ€&è¿gÚ á‹ªªPTŠ¢„¾V4´:±úÓbì<Јª:µu*R ˜~Þe0%HF ’d@Ä·8žÀ­¼É‰ïySS""""ÒWnQr‹Š°â¦›à÷z±í“5ØøÞ»Ø¸ê}´7Ÿþf"9ÄO=uoüwýጦ®ýAÀ¤Üd$ÚÍØYÑE Ý™V\Û†Ô+máïÅÒTYŠ1s—EôºDÁŽPÓÓûP¢Ùê™P#óE%…„S?'öm£úæ£eßêö£¤öøêƒ(bFa*²O>;,¸yÁB´44„5wBj*æ_p]tf½&Kô{ý v htä÷MÃïZ` ÷®Q4 ýö²ÎÕ4=3EجÇî®Ò ¨j¤û^Ž(ƒ! ‘NhZ‚зM+OEÓ4(Š‚ ,Ãévcý–RlØY…Õ ŽÖÑÜ,£½EAÀ›AÛ5N‘vÃçnƒÅ–A” JQþÕ0 !"""ÌV+^t!^t!TEÁþ-[ðá˯à“ÿþשÛaµÔ×ãë¯GѨ\ŒM`4_>d‡ÃbÄ–Cõðøehš†]M8kbvØ­ªjŠwöáÕÄD(êÉ!“$&£/—Ä5Å;úPGw å |0˜Â!DñÔ+Ž$1½OuDô=Õ€=•M]ãlf#æ¥#ÞÚ}e¬¨Ø_Õ‚#ÛÊ{Òl±`þàÜ«¿‚Ù眃1¶×CDDDDƒ…B V‹VK¸? v[8oZ÷LS?éÓ0™“ô.€† ¿&Kß.¬¾ÈPï–PÝì?ÒŒ_ßû::’ásç@ N:^øBë1g«~w$ƒ’ÉMU!DÙŸ¬ºCœ쨦 """¢&J¦ÌŸ ³fã¢oÂç|Œ­}ŒŠ’(rªª@ö{ ªÇoÄ9TQ…j£g¦"5îø •x« gMÈÁ–ÃõhvúÐá  ¢Ñ‰Âôø°ji>Z†¶ºJ$fæGô$1£Ç€Æ åöpô鹚ëÑP^ñ¸/R‚ÙµEsÎ{ŒAÌ8åsFCä›×kšŠòëÃ>þpc;Ú=¡•Q©qÌÑ-„€†/võ°? J0šmE ’ÁˆQ&`ö9Ë0ÿüs0jâxŒ¼`%""¢‘‰ï‚t$í°8ç¡S2š“ZbÔÿ?‹Ó ô! QT É+¡¦CBƒ[ …2N N臮*2‚4¸ÜIð{§œÄœŠ§]CÀç„ÉU¦è¿7ÕξõÅ&"""¢Èù<´64ÀÝÑMÕðûà÷ù`0ሇ-.Ž„ØN¹‚¥¶â(>ÿpv®ßŒªCPäã[>ßDøàó´Ãël†ßë„/(cci]çÞ$É]×$Fƒˆùc2±³² ÕÍ.W·"+É‹1¼÷Š%Ÿ­Â¼+oè{a6MF@ÞßÃãS#šŠ?}švên͵þˆ£!¢Uë8é9“arÄç¯Ú¿ îÖÆ°Žõ”Ô´²’ì8£0 Ò~oÊêÚQ\ÓM ]]™lñ°9’a±%œ´R¨£5€_[…_[É`@Þ˜Q˜¾xæž·Y=gš¦ÁÝÞW{;Üp;ƒA˜-˜Ì¢{|<’32`¶FÞºŽˆˆˆH ht$J¡P ¡É…ê#Í£RYƒ,+0Ÿ°'¯ É)H’¨sô0¸ ‚SäÀÉ:)è?ý>4~  N Õ. ®P sšnw4hª {¼ï©»Qœ$àËB[ÃX)PUšª¢UÚWç’ ¨@” qˆˆˆˆè— û?ÿû6oFEq1êEÃѪ^÷9F¤fe!kÔ(dŽBfÁ(˜­ÞwÅÛ÷†]‡ÁdÃd#1JÐŽ–¸:QV×OÆôÂTÄÐAQ0sTl&Ö¶¡¤¦Ó RÃ:ÏþµobÆòk`¶‡·ê¬¦Åpz^íáñEaϯûÖü/¢1§SS² ‡÷#}ô¤0G°šÁí{¯Û£FÃh¤œˆÏ¿kÕKa[RÓ YQ1.;㳺w U;*Q×êÀæHF|ZŒÆðÚ·)²ŒŠâ2T—áÿòÆbâìÉP^ÔT”£®âjÊËÑ\W-ÌRS‘‘—‹ôÜ\Œš8SæÍÃÄ9s`s8Â~ÍDDDDŽD!´§Ì?üÉhFRF!ì éh®-CM›®â æ¥Ãf>Þ®yBv¬FömƸ¬DXM½_žÊ~¶¾ù]{gØõ˜S`2L@@>ÞšÌd˜“a\D¯kÛ[ÿBÀÁ]OaØðò_pÙO‡æR÷8ëåpûVáÄÕÿqÖ/E|Þ£û¶ ¶tWXÇzü2ª›]˜VŠ‚Ô¸nϹ}Al9T§/ƒÉŠÔÌ"-öˆëéV[i9Ž––ÃÝÞˆ¶Æ#ÝÚç…«½© íMM(ݱŸ¾õ6@20zÊdÌZz6λæjä‹ìçODDDÔÐèH2ˆhiv¢¾¢qýð“Ø»« ·éVgìçNLædx]ºÖ „šýF¼¼×Š ‹Þt¡9‰‘þ‚Ið´+P” TEµq8Ö« 5N4DDDD}ánoLJ¯¼Š^z %;¢ß¤þ‹Œ&+RsÆÃ`4ÇlN“ÅŽÌQSÑ\wÎf|Z\‹ùã2»m*_£AÄ¡†vLÉM kÞkßFÑ쳑96Üe’âîBCÛ÷¡i>‚Iqw#’7·õ‡÷cß'+Ã>>\%Ø¿æML>;¼ÅhƒxÛWÐáy`6ž»åˆÎðºñÙ …}üá†vL+HEnJ÷Õ'íž6•Õ!T`‹KAræè°ƒ¦pØÒ`±Å£±ºÁ€7êùYÆÁ»ppç.¼ôÈ#˜0s&λöœóå/ÃþŠ,"""¢Xb³!9Û}xîéõý΀¢¨xú‰50*Á¨Ú§FK²Þ% àmOðʾX…3¡–‚ ".Õ†H—Qyœ€ª;[œ)a·8îCCDDD¯Û?ü0¾:}þ|Ï=ýΘ-¤çMŠi8sŒ ˆHÍ,‚=! ~YÁ†’Z´ºýÝŽÉN²##Þ†àé{÷vÑ4?ó¼­a×a2ŒGFâ“Hr|™IOÁd( {¬ÏÕÿþP¨ío?ØüÚSh.îýÀ(|¼z?¼Þ@¿žc80šõh‚f”·Pb˜¦ QBΘñ€PÑP¿[€*Ÿ°‚&;Uw0 !""" ×g+oΛ=ü[¸;ú§¯ÁhFJÎxˆR?6W$gŒ†Õ ¢bSiš¾n‡¤Å[a4„yênmÂ{ÿ‚¾ð?T7òá°^ ƒÔó&ô= ú½xÿÏ÷ÂÕ\ö˜H)rïÿù^t4†ß“ØjZ ‡õb‚±÷ƒO°õgpxÛÚ°7D¤Ç[»=ÖÔáÅÆ’:d{<’3 £Ú«²7¢d@ZÎxLáíi)W{;þù›ßàóæcûïõ>€ˆˆˆ(†Ð0™ôhÙ ¾ÞŒ ˆHH/€Õþ†àu ÈhJìVÐÔ¹$(ýsã!Ѱðùð§ï}?ÿÚ×ÐXÉF‚‘©Ùã õg8s‚ŒÜqÈLŠƒ¬ªØtðä&RÍ•ñöî†×Ù£ »ó{œXõØOÑP~ _æ?‘·£oýî{h>ZÖ/ókš†moý ;W½Õ<ÍN>/«‡¬ªÈHŽCfîø~ gŽ%R³ÆBûï#ŒÆêj€ˆˆˆ(¸ £9Iï)†&± ‹E ¢d€=A€7‚=Mƒþ|´5V‘œ UUN؇¦ï`² 4x$d9¸ QOÚ››qÿµ×aÿÖ­§=N¤fe!kÔ(dŽ*@V~Òr²Ÿœ‚ÄÔÄ'§ !%ô¾Òêp@2¿ôSd^— ïüëU¼ÿBì÷U9rsGatzTµ`Ëáz,Ÿ ‡%²U 'jª<ˆÿýú,»å>¤NˆY­M•ñÑÓ¢£1¼V`±àioÁ[¿ÿÎüÚP4{iÌæ x\XûÏߣbç§QÍãô±åp=âm&LÊM†Ï˜‚†ÀÀÝói4ÛpëƒcùuWœô;-ƒð¹ÝÐ4 -­honB{s :ZšÑX]ƒÚÊ#¨«8‚ÚŠ 4ÕÖžöæ³·Ÿ{åû÷ãÁþƒødýoä#""¢áͦj@GpË€¢’% ÎXù“ˆÁ”A;[yéÇŒ&ØMcáÄè.4A„PHcO0 ©:‚¡bšŽnDvQg›3U… B›©ö¤ÆÉ€†ˆˆˆ¨'íÍ͸{Å%8RRÒíqÉ`À˜©S1vútM‚ÑS§bô¤I°ØlaÏ­©*ê*«ÑÖÔ‚öæx\n|òú»±~ ½jò[‘eNÂä¢t¸=Ø]Õ™ñ°ûÞ ×Ù\‡·~w¦žûeœqñWa4[{t rÀ‡ï½ˆ]ï¿ U‰lÇXú<øøo¿Â‘ŸaÞU·Áž˜Õ|åÛ×cã+»µ)ªy|A»*1.7)ññj"šýáÿþÅʇ¯¼…äŒt$¤$#« Ù…ùƒÑGb" .) 9E£O9‡×íFÅþý(Û³‡öìEÙîÝ(Û³Š|üç½ïóÏq÷ŠKð‡·ßbHCDDDýŠã2>ðÊ€¢…«°ôp­"˜¿læÏÉCZŠí>TT¶aÕLJ°ug F Úƒz'" ¦ý‘µ‹µ ¿Ù[b÷OSD¢GR¤›¾ ðt(PäT%MU:WÐDWOu‡„YYÑÍADDD4Üü~Üwõ58RR£ÙŒÉóæbÚ‚˜2&ΙQsŒ¦iسq+6¯^‹}›·££µZEB€*\è?¤Ø2²PâS/‘`ð#Ñè‡Ø‡½UEÁ®÷_Bé†U˜rîU¿h9¬q‰a÷¹:Pºaö|ø<í-Ÿ?ÖmùGvmÄ„ÅaÒÙ—!!='챪"£r÷&ìzÿ%4”G¿ç©_Qé5#9o*:T ±ïʶ€Ïç÷D×gæecîùK±ìªKŸ”ÖV»çÌÁÄ9sºóy<Ø¿e ömÚ„Ý6`ïæÏQQ\Œ{¯¾xû-˜Ì‘^K…‡Í ¡j@RA:NÉBJ’ Í-lÙYƒ}Ű€L`èü`<· ÷ýâbdgÆu›cñ¼<\ÿ婸h}9î}èT»|ȵ"Cš°ÍÉú4VäÄÇ:  ˆÓã¡i>Bø›kz]€ªt® ÑThšm>ƒê޾ßIDDD4\½òèc(œ<×|ï{˜yöRXíö¨æÛõÙçXùÔ¿PYz8Fö "Úe3Úe3jý*R¤™½} j¼Î6lYùwl{óYdO˜‰œ‰3‘>j2óº6>W;Úꎢ±¢Õ¶¡úÀv]VÌœŽðaïǯcß'+‘6jr'ÏAFÑd$fæÁž” Aµ ú¼èh¬FKÕaT—ìDåîMð»;¢>¿_•Pç·£M¶@ ½$ëŽÖàÍg^Àû/¼Ž³¯\_¿6Gäÿv,6f.Y‚™K–­²ÙþÉlþà¼òØã¸þG?ŒuéDDDDÐ v»ßùѹXÎÕ/®DcMnûÅa²ðb˜ˆˆˆ/4:;÷¼ñ¡+‡Ê[ðÙº2ÔTµCÕ4ddÄañ™E?!W®‡òÊ6$>_÷Þ¿÷T4߇«K0n|:î{à$&Z±â¼"üçå] hÂ`²è¿‚FUüPd²ãì(‹Õ>4‚A!ˆ‰F4dl šk wbç>4ª „(嶺vJ˜™ÕDDDDt‚•ûönÚ¦w1§iÀo&Ù„ÁÙjÊ‘œ{R*¬qÉŒF-6@ÀëFÐçAÀコ¹ÞŽ–AÛ.Ë£qÈ“e®š9•k7â©ûÆ¿¹‚8ôC'"""žÐèH’DLž’ @ÃÊwJðÜëOzÃþ¿•{pé—¦àæ[à{·Ì áý¥{ªNùÖ¹´¤¿ýõ‡xè7+°taþñ®þ~)Âќ¢w B«hrâ’cЄP@“dŒx¤·C…* ªr¨M€¦!Úë¶ê¶8#"""Š•úÊj¬~ñu½Ëè7Š&¢Öï@®Å©w)]2ÇNÅ”³/Gö„0ÛãÃ#û}h9Féš @EdN‚Ñô6ä`S ­ QdhêñÖ|ѪîÐE!gL¡Þ% ˆ6§^¿>7q gŸí.½Kéwy#äß  - ht¤*­¢ú™Þ}…5MC}s3ê››ƒ€(ŠHŠCrBRC& A8¾ä<+-5 ^«d´C”ÌP}/þþX£§àpklþ™ -ÎL¬q~8["¨Ç—Ÿ» öÄLhªjsƒ-dªfd£Ÿˆˆˆˆh„3y< Fä`=‡°#õõz—0l©¯Ç´aÐŒN§wDDDD'a@£#Qh4·x{mårzÓ ‰°XC?ÖÄD ,$ƒ-€¨÷ ‰UUÑÜÖŽæ¶v<zÌ IÈLK…ÝjE Ð}¿§V·ó@ÐJObÐ@4¢d€#ÑQ@£(£Ñxô’2‹ ª24íØ>4ÑýRÕtÄ å!"""Á¬qL]0;ÖmÒ»”~Óæt¢¶Y¿ëƒá®¶© ÃzÍôEó`s„×µ‚ˆˆˆh 1 Ñ‘$Š€¦áΟ­Cõš˜ç'³geãþû—Â(’d¦S‚Ãö/ô:–V³n¯UuúÞg M°¯üöî<>®»¾÷ÿëœ3«fFûfIÞíĉíı; Iœ$4ÊÒè…ø±(ôîíï×{[Z · ”år›_I˾¯!$ÎJBâ8‹íxß$k±Öi4Ë9ßûÇÈ‹"/²5ÒßÏG&’gΙùÈ’ýÏ[ŸÏ§¨ÏkÙ6–í¨q&¡eE:<\ØCãŽí¡Á`Mñ«¶=é#ç9§ÝöŽ7—m@“ËçÙ¼k—ße”5lÞµ‹+V¬ è”çPÝúŽ7ù]‚ˆˆˆÈ Ù§?D¦‹ãXŒŒdyå¥Îiiny~s'ét–ºHi]íÕWrÓ•—³ê‚óikj$ °cß~Ïm£"z&;vŠ/öM.]hoiM7 alÌYEM3Ý#“Nšc{hLqÆóe]‹Þ´þ™ŠÅ+/àò[Öû]FÑå\—ß½òŠvÏÌ€‘ÑQžÝ¶¼[ìøïÊÛn`Ñòóý.CDDDä„ÔAã£ÑÑ<ßÿÁÎô,IÏç=¾óÝ—‰à’-‘€Æ±m¢‘UžGkS¶ec0 ¤L¥ˆE£\½æxâ)ßvçC5¾¼îñ²ÙB@SWá FóÅùZ–…m;4/ZzÁªŸô¹é”Uh¼<Æó0Æ%XlO:ÔWLÏŸ‘sÅ;þììݶ“Î}ý.¥(’##<¿cã£~—rÎH¥xòå—¹déRâѨßåÅœsyÛÇÞçw""""'¥]÷Q__šïË´¾Æ¸•¡¡ú‰3˶,6<ù4ßøÙ/yà7O±ië+ô%™ÓÐ@mU%mMM,hmñ­ÄRè Ég0ÆÃæÄ‹øSl–…e;4Î[F0ÚqF§¦‡í£#ÎŒçr¦8'Ó®=4""""SMÄùØç?E}K³ß¥LI.Ÿgû<ùÒK g|0œNó›_dûäòy¿Ë™’ÆÖf>öùOi÷Œˆˆˆ”4uÐÈŒr]—‘ÑQFÒ£äòyvvÝ9sÞ‚ùD#a:ºzN§}«1T1ùì Áp -•.{ŠóGÕ²mÁ±J3ø7o6ÝÈÈÐaâ5s0ž‹ñ<°§¾@¦CˆˆˆHQÔÏiâÿ½çs|õ/ÿ[žÙäw9“fŒ¡/™¤³·—C½½e9fk6ñŒawGû»º˜SWGs]µ‰V)ÍÍ>åk/áÿùë?'^]åw)""""§¤€Ffܦ-ÛX4·•m»÷Ž»ûÞ}\¿î2öwbÄÇŸ–+…€\¦`¸¦¸{h¬ÂËvˆUè>ƒsÍ|zö=O}۲˜3Sœ±d)Ó²‡IDDDä\SYSÅÇ¿ð7<ñóùÉ=ߤ·óL¾á›~Æ2¹Ãé4ƒÃà ÓŸL’Íåü.M^%ïºèîæ@w7¡`ÚD‚ÊXŒªxœX$B8,¹Ð¦~Nw¾û.®¼í†’«MDDDäDÐøÌ3q!:Ÿ‰‘ýäœí„qQܼ]<ÙL,¦¥˜ …=4–í«>Ã/:+Dj ƒ›ÏFy.ƒ5Åhe4oÑ7bS§=4""""EaY¯ù½›¹âµ×±ù‰gxzãlîû&˜»t1+¯Xá}yfãE­åPo/ººÈ¹.¹|žL.çÛ®I9{Ù\ŽÎ¾>:ûúŽÞgYá`` @0`nc#sêêŠúº—Ýx sæµòâSÏq`Ç.ò¹‰cתêjX¶ú"ÖÞt-+¯¼”@@—9DDDdöÐw.>ŠFÌ[PÍ/Ÿ9Ì¢Äô¼Æ%«šøÕ³}M®d€ÇžÝÄU«Wqãk1@zt”áô(•ñáPˆåKñÂ+;|«/ªÃÍû»`5—)üã§¡Â#ì2n±>¶í¯ g²ŠjdÈàåsÇ:hŒ)JëK{ÒQ@#"""RdN0ÈêõW²zý• õÒ×ÕÃH2E("^UI}kóÑ Ú¹L–žöCìÝZœïó¹[öîõ»LäÄŒ1Œf³ŒŽý°]rd„ºÊJBÁ`Qžá…çóî¿ü8ÁP׿÷¸¹Ý]¤ÉesÄ*Ô4ÖSY£1f"""2{Mþʬ]uM„?ÿÓËÈ{†kÓ–þàâñPñŸ|Šrù<ÿöwÜûãŸóÄsÏs¨ç0á±o䇒)“)_ë+…=4¹l?Pø<Î)b56æ¬uÉR óŒÎ±qÝž›/ì¡)ÒO?¶'µ‡FDDDdºUÖT±`Ù.¼lK.ºæùm㺠‚áûü§˜wÞ¢)¿–°iÇ…3ç\>Ïó;wb;SÿÞ~Á²%|üŸ?E0t,ìq‚AæÌocéÅ˹ð²UÌ?±Â™õÔAã#7ïÑÐeñ‚JÚ  L=13Ʀ,[ZM]]Ϙ’ÚïÑP[CßÀ ®ç12:Ê‹Ûwòâö~—5N0â@“í=ú~K¥ËÞ"ýqqVÛº„pÅ3dFZ&}j:e™£M‘öÐ( ) ñªJ>ù•¿çÿÿ›Ïñ»_?~VÏŽFxËGßË}¯¿«ÈÕI©ëâ®ÿú¾óù¯’ÍœÕs\vã5¼ë/>J$)ru""""¥G\×€1|æ¿®æù-}Œf¦Ö% ØT·Ìæ’åµ` ®k(¥ýˆ‹æ¶ñ¦[näPÏa:ººé<ÜKwoßÑÖøR,‰šcó[ãEì Á²mœ@ˆX¥Efä jm%Ù×A¼ºÏs #ÎŒaª_`C†¢LK‘)ŠTDùÀ§ÿ;O?øßý—{èï><és矿„»ÿòcء⌹’Ùçü5ñÿçù·Oý¶ïžôyµM ¼åÃïfí WOcu""""¥E<φ•çW³òüêizƒë•ÖÎM[¶QÑÒØÀÂÖcÝýCIºz{é lºzû|‰P M>›Ä˜–¤¥²ˆ3ðÆFœÙ¶C¬*@ß™L9³ZéÞ÷[ç¯Äsóxž‹Ášb´’Î[ô§mj£ÚC#"""R*ÖÝt-—®¿’§x„'ïßȶç^Às'þàí8,[}ëßp+kÖ_‰eÛth÷¡b)s—.â|í ünã<üÃ_°}ÓKxÞÄïõ|í\yëõ¬»éœ"í¯™-ÐøÈ;Ò}0í ¥Ñds9xâ)*¢æ4Ô3§¡Ås[YÐ2‡e ÏçÙÛ~ˆÇ7=OÿàÐŒÖ ×Ìèë˜!— i ¡Â%ä²nqzL¬±1gñš3ÝO`dÐÅÍg £ÎŒ7ÖA3õšÚ“Ž‘ãƒ\uû\uûdÒ£ܹ‡Ã‡ºIŠ„©kn¤mÉB*â1¿K•cÛ6ko¸šµ7\M:™âÀÎ=ôvõÍ©ˆÒÐÒLëâ„5ÊLDDDÎa h|dÛÌ@tbÛ¥:?j$=Ê®ýÙµÿ Ͻ¼•«V¯â‘gž¥±¶†ÆºZšêjyý ëùõSϰ¯ãÐŒÕ ×Pø ó7ÚÊeúE°-hŽ{ì,Ö®–BM¢. ä9“¿ F’à¹9<ïÈšâì8êrXÙ˜+Â3‰ˆˆˆÈtG#,^y‹W^àw)2ËDqλd¥ßeˆˆˆˆ”4>rlÿüÇ+l~ê öi®rÃç¾€ Ú„Ã…‹øW¬›Ã»þèBŽUR4- Œf2ô%1ÇuŒŽr¨§‡¥óçñòÎ]ìê à8ÜvÍkÍdéêí‘-+H ˜ Ÿ›ÙÎWËfú8ò³ˆ­•nÑš#4­K—a±ÃüIŸ›¶ðò¹c4EúêjO+|)} h|dÛ6žëñ£_ì%îf‹þü¿Ú°?zÛ2âA‹RêK˜ß2‡«×\B.Ÿ§óðaÚ»zhïꦧ¿Ÿý¼ëwpàP'CÃÃä]—wì`ýº5|ç¾f¬Î`¸Ö÷€&—é;ú~kbâ¼ï³6¶‡¦ªq>‘Øã¤‡'Ф‡ƒ¸ù,Æ=ÖAS íI§T½DDDDDDDDDDŠN, žßÜ3-á ÀÈHžgží¤1bèNNËKœ•g_ÞÊê —ÑÝÛG"ãòU+ql8²’ÇpíekøÙÃ=g$¡¥¡P0H673qS(\K:µwF^ëdr™þ£ï·1 ±°°mÛ «¶HŸIMm ô ^Û‚ç¹Çí¡™Z´’ÎY ¤mj´‡FDDDDDDDDDÎ h|ÔÕ=Âÿüôo§õ5>ý÷ÏNëóŸl.Ç#Ï<‡eÁ‹Ûwpšêëhkj¤µ©‘X4J{w÷¸s*¢,˚р&©‘×9•ã;hc.AÇs‹ÐcbY`BšŠÊ´ŸÁ©v ‡>IËâ±1gž‡Á`¡÷¥=å( ‘s‚ñÅË;w±¨­(Œ0kïꦽ«û¤Ç×T&°-‹¼[Ä1_§ ÕÌØkLö¸€Æ¶ 9æq`¨X{hl,Û!^<Ó3Ìãæ³xnã¹c4S¯©cÈaEC) ä™ hÊH΃Œ ŽU¸˜o[ÇÞ/%–eqéŠ ™ÛÜIJE é<|˜û0˜LôœM[_!›Ë“Ëçg¬Î`Øÿ7?Œçf°0­•n Ëv¨iª“+<ésÓ)ðܱãaŒ)Êî˜ö"}l""""""""""¥NM™hnª µ-Îþ¾<½C9’Ãy†R…· ´}.r̪eçñÚ«¯Ä¢cصÿ <ñ=ýýÎ1ÆðÒŽ3Zg¨(ì¡ W4ÐRYÄ"˲lZ–^ˆíüÏ[<éSGSž›/Ü<0E)©#©€FDDDDDDDDDÎ hÊD$âðžwœGËœŠ Ýü®Ç!5âCU'ÖXWKjx„mø5í]=DÃaæ46°|É"ÞõÆ;¸÷Ç?§«·×ï2 „ª±,cü݉’Íô hZÅ h, ;hâ5ÍD⃌ MþÜÑ‘¹lÏ̓ñ0žEÈV†s£6Õí¡‘ñ¸âŠ+¨¨¨`ûöílÚ´ cŠóƒB"""""~P@S&öîKòþ=Á•kyû[Ó:'vìÁqvàPžç±·ý¹|ž¡=ü²g/õ5ÕÜpÅZ¾ÿ«‡pgpß̉X–M TE.3±£g&ÿúM1— mÈyÅù¤Z–mˆU9gи¹…ôÚKe][aÌflÍÔëjrЈˆˆˆÈ8üàùЇ>D(:zßæÍ›ùÈG>Â|¬LDDDDäì•ÈÐ+)ãžxª‹~üI>÷¥—èî¡X£§ŠiÛž½T%„ûÇÕ‡ûxrÓ ¬]¹Ü‡Ê&*…=4¹ì±€Æ¶ )^¤ð²°lËvˆWŸaVkÕÓ{¨÷ÈÏ-„4EБҘ39æî»ïæcûظpàâ‹/æÛßþ6óçÏ÷©2‘©Q@S†<ϰñ±C<üX'ƒñJ+¤ñ<'Ÿ÷¾å´57Mx<—ϳî¢>T6Q)ì¡ÉeÆ{k-æ,,Û!V=1,;Ñ!ðò95²Ž83ŧ7œµÌØT…µ‡FDDDä\L iDDDDd6R@SÎLaq»W"×¹OÔÓÓ×Ï·~q?Ç¡¹¡žxE”¡Ô0Ý=>U9^0\çw xn7?‚¨ )æ°!_„Ï«……m;DâµD#¤&n&'7šÂss…4žEj~ir¨j(‘/\ñÍÖ­[ÉårƒÁÓ«FDDDDfí ){Æ÷N˲¸ãúkùÐ]o¥¦21ÊáPˆ¼ër°³‹m»÷–L8¥±ƒÆwÑ864Å‹ÔE3ÖAcÛ±ê3ËkÝüB܃›?®‹¦H_k)9ä›ßüæ¤×N™MÐøÌ5Еžžç6:hüž6¿e—­XNcm ×_¾Ç>öe—ˆÅ¸þòËNrtÁL „X¶ÿµe³Ó7æÌ²m,'@¼êÌ>N˪b k °‡Æ+4¦HcÎÚ‡ЈˆˆˆHÁg>ó}ôÑI¯FDDDDf 4>ª® ñá÷,e( Þ´„(†b홊ºê*Ò™Q¾ðŸßæ<„ûª™k7_u9÷±?á£ô6^Ãz.\²ˆÐ$FÌ «4öÐŒŽhZ釆BM¬úÌÏÓ)ShÜ|aÄY‘Ò@4""""rD6›å½ï}/¿þõ¯'}Nss3ßùÎwX²dÉ4V&""""25 h|p,n¼¦‘xE€T®¸ÏmŽüÏïö —Ëóâöôô÷Ÿðñû°ië+Ä¢QÖ¯½”÷¼ù üÍG>ÀûÞúû¬<ÏÿPK`ÌY.;þ÷®¨4VaM㼌<£sÓ)ëèˆ3Ïs‹6N/•µÊè¯')Èår|àࡇšô9 |ýë_WH#""""%ËÿÙMç°|ÞÃ±áæ«êøÁƒ]tiÔY(d Ù ‹Rè¢é¢¶ºò¤wîåþ¡U•ˆó?|3[wïeQ[+ï¸ãv^ܾ“oß÷+rùüL•rìBÍ'?¿‹Þ}CEþó*øÂ߬ °ÈýÙÏ\Gw_ÿé}¼ûMoàæ«.ç7›6³e×n†RÃG©JÄyë­7SS™ “ͽ?aY±htÆëv‚1l'Œçffüµ—Ëô/8úëæ¸‹c[„ü²,lÛa΢ùl~¨¬ºã<À¼euÔ·-"=À¶§÷Ï/<úp:euÏä ;hЍcÈáüúRøê‘R¤FDDDDf34> ,RÃ9ìIR1 Ãæöî¡»7C}?ÿ9+:»øÌ¿ý;oºùFþèÎ× L¥HŽ ¨©ªÄC×á>õ>z^{W7ß»ÿA“)_ê†kÉŒòåµÈfúÆý:`CcÜåP1FY–mÓ0oÁÈÉeŽ4UuÛhœ¿†pE5‹×´ažç¥Çà¹s Œ…3.¦ˆ#ÎÚ“ hDDDDäÔÒˆˆˆˆÈl¥4>Jºüë½û¨°§o„ÓWÿcÙá¶uúcgJz4Ãþôü/~…žx’ôh†Ö¦Fëj±,‹ûð•ï|Ÿ\þØ…yc ÏmÙÆÎ._j†ª}yÝãå²}îk­,N baaÙÁP”ظçì§íüJÂUTTÖ«jä«®gå5#ØN;Ù‘zFS…gEh´‡FDDDD&C;iDDDDd6R†G\{jâE÷búí¦i}þ©èéëç{¿ÚÀ÷~µ€ãˆÇI“Íåü.m‚PÄÿ=4¹ôį•–x‘ËÂÂÂvTT9 ôîŽW?Gëyk WTŽUŠÄ1žÇò«oÂÍý’-¿qðÜy>¸ºÖ󋺃 }HˆˆˆˆLŽ:iDDDDd¶QÍ9 wrŽn^ty×¥p¨$À`¨îôM³l¦Â}Åê °l,›xMCš¶óc„£•„" B‘8ÁpŒP4A4VÃE×ßÊ…WöaÌcY6Æ·l0c“Ì–Pû—ˆˆˆˆ”4uÒˆˆˆˆÈl¢€¦ÌÝõÆ9TT‡˜¾!jç†`Øÿš|®B‡Êœ¸‹S´ü¶µ€¡²z3‹/YK(š ‰F‚‘‘X5«n¼eë3<0ˆ aYÅSвcGDDDDÎ iDDDDd¶P@SÆlÛâ¶ëë ýû4å1E¯c<òÙÁq÷lhˆiUØCÓ²d1pÖeQÂU…€&\aÙ¶íà„"qÂU\vûYºæ‚¡ l'X”Zާ1g""""r¦Î6¤ùÆ7¾¡FDDDDfŒš2åX¾²’DÌÆ3?†DY–ÅŸ¾ó.šêü6U¡hr™‰{hZÅÛCcÛ s—QÛÀÊk®'+4`Û `a=Î „ † #Ж®½`$† §–ãt¨ƒFDDDDÎÂÙ„4õõõ iDDDDdÆ( )3é<¤p¸ù–F>ùÞ6Ààzþ 83Æ0˜L¿«b¦ÙN'PáwdOд) ±(tÐBQÖÜz+U „¢•ñ£Ý3av4¤ E †+„¢8PQj9^»9K iDDDD¤”) )yú³PÛã}ïlãg_ZƇÿ ‰DÔcxÕÚ’õƒbåyKqìÉ}©¿`>•±Ø4WuvJaÌÙ ;h*‹×AcY6N ÄWÝI('‰ïžyÕñ¶í`;'ˆã±â´µÎúÑ&""""åàHH³aÆIŸ£FDDDDf‚šYÊÉä"An¸±¯ÿýy|í¯òû×W‹ZcG¹ùçpÿ»äï~'¯¿ñ:V_¸ŒêÊÄI?ØÕÍí믞Á '/*€&Û?á¾9 »Hù…eÛØN@ L %ŒLìžwB!Ô±l§ðÖšž¿R:Rꢑ³—ËåøÐ‡>¤FDDDDJJylp?‡Œº6—^œàÎk«¹zUÇ»pnNÆØ¶¿1ÍÖÝ{à!Ö:—¥ IDATxãM׳þ²58¶Í`j˜½ííì9ØÁÁ®nvv1œN3œN³u÷^³z?÷¼UOŒ”@@s‚š mh¨péžzˆqdÌ™± ÝWXÖÄΙ“ž<}].íCKkóÓöü""""RþŽ„4_üâ¹ñÆ'uΑ殻îbçÎÓ\¡ˆˆˆˆœkÐÌyCYX° Ê]×TsÛkªHTß©0>~é<œã™ç“Ä*®¿²Š cá÷¥í­»öð·»î¡©®Ž /൯¹’UËÎçÒb]ØJr°³‹ÁÔ0¿”ͯl'9<âsåÇC5~—@6;1 Â˜³b4GBË0nߌß:†ÔA#""""S§FDDDDJ‰še€TÂñ7]YÅ®«fQkèUG3”ryü·Cl|rí{ÒÁ€Å•kâT†`â`,tõöÒÕÛËU—¬â§eó¶íÌkifÞœÂmÑÜ6–-Šáy×\ºš_<ò¸ß%U 4ùÌÆä°¬à¸û[*]ž;TÄ*Pæxíq&""""E¢FDDDDJ…š3ꨱ¸ôâ8w^[ÅÕ«âØGše^5Â,Ÿ7<ò\ЧŸâw/¤È»ãÏå ývÊ€!UbÛ†žßö C©áÂH³]{غkU‰8o¼éz~üÐà ¤}®r¼PØÿ€ ¹Ì¡Hø{[®OõÌŒþ´ÍH΢"èïN%)¹\Ž?ù“?á_ÿõ_Y¿~ý¤Î©¯¯çž{îáŽ;î`pppz ‘sB‰]¶?7y³kˆð_ÞÒÈϾ¸˜úÓ®]ö …n™c·í{Ò$‡óì:˜ácÿÔÎS›’™#þåktteg𣙜ó4¯Y}1ÍõuãîL¦Ø´e+–,&›ËùT݉Ã50Ù},ÓèD{hZ¶ÿ¥M«uшˆˆˆHe³YÞÿþ÷óðÃOúœ¶¶6î¾ûîé+JDDDDÎ) h|f…Ö¬­â+ÿs>ßúô<îzm5U±±íÇÝ÷åøÙ†~>úW{ù³¿ÝG_nBGÍl’ÍåøÑ†|è®·r÷￞5Ë/ ®º˲xqÇ.Ö¯]Ccm)t¬cYAÁ„ßeÍLX´ õžÕÌœví¡‘";ÒlܸqÒç\sÍ5ÓX‘ˆˆˆˆœK4âÌGW¯Mð±?nÆq,ŽuÈ3šñøÍs)6>™ä…m#ókö4]½}ü¯{îå¦+/ç÷o¾X4‚1àz.`±~í¾{ÿƒ~—9N0\M>7äk 'ê hI¸t—oæÚ¡€FDDDD¦A6›å¿ø×]wÝ¤Ž¯¨¨˜æŠDDDDä\¡€ÆG¹œÁqàø`Æؼ=ÍÆ§’<õL’tæd]¦0m–J óƒâÇ62¯e‹ÚZ©®LÍð»—¶ø]ÞÁp-éÔ~_k8Y@ÓZéò|gp†«™9íI4""""R|·ß~;Ÿýìg'}ü¶mÛ¦±9—”ïÛÏ/láû÷õ‘LæŽ2{yWš/ÿ°¯Þ7Èˇ=BþD1¥°eÒ¶µ°tþ¼“>îz{¶óë§Ÿ!—ÏóËÇž »ïÄA„ŸBáºÓ4ÍNÐ$Ü®dfõ§mÒ¹YôE/""""%ïöÛoçsŸûŽ3¹ò<¯}íkÓ[”ˆˆˆˆœ3Ðøh$íñ?êå¾—Ïÿ{{fX±8ÌW?9‡Gÿu>ùƒ:Bñ»“Ð>#y¿+>;‰XxÛkyÛë^KCM ,^È‹’ˆ`ŒaÇÞý\µz•¥žV0ìÿ^œì)FœYeœ_ C]4""""R$gÎ|æ3Ÿá¹çž›ÆªDDDDä\¢g% —7üúÉ$¿~2É…K"üÞõU\¾ª‚÷ÜQÅݯ«âÑçG¸÷—ƒ<õRš€U¡BÁ,™p–á;÷?@4¦§¿°à¾"á­·Þ À`2ÅÁ®.Ú»ºiïê¡w`7¿öF¶ìÜEß ¿û^^­7?Œçf°ð¸ûCŽ¡¾Â£§œ÷Ð$×ÎÒ¤RDDDDJÆ­·ÞzÆáÌ?þã?rÏ=÷LcU""""r®Q@Sb¶ìeËÎQšëÜrM%7¿&ÁúÕQ֝޲¿3Ç÷~äûSdÇöÏÌ’Œ†]ûŽûõ¦­¯p媋8ÐÕ ÆÐÒØÀõ—¯Å¶mŒ1c¸éÊËùÎ/ð©â …kü.€\¶Ÿp´yÂý- ·¬šö”:hDDDDdjn½õVþùŸÿùŒÃ™/ùËÓX•ˆˆˆˆœ‹Д¨ÎÃyîýaß¹o€ÖÅxÝõ•Ìk òñ?¬áOÞTöwåȺ°?UèªIÁ>Áˆ«Ã£…ǃ%tÝÞó<¾÷ÀC\¶üB~öð£ÚšYÐÚBcmmIî  „j°,cN´hæä2½' hZ.›;ƒ>T43ÚЈˆˆˆÈÙS8#""""¥DM‰õøÅ#Iî{4Éê £üÞõ .¹0ŠeÁÒ¶ ?øô¾ý`’Ÿÿf˜ž¤¡2Õa…1︳š{Lá%Kk,Te,†l~eûÑûrù<{v°ç`‡…†eÙBUä2ý¾Ö‘=ñë·&Ü®dfõ¥mFó‘Àlé‘R¡pFDDDDJšYÂxöå4Ͼœ¦­9ÈëÖ'¸þòËùÔ{kùÄÛ«ùÉãÃ|ûÁ;æˆ8PÛ®óõ‡‡É”ÐòøP0ÈGþËÛ‚xÆcûÞý<õü ì:pðô'—€`¸Ö÷€æd¯ß’p±¬Â×K92öÐ,ª)­ÀQDDDDJ›Â)E hf¡ƒ9¾òí>þó'ÜtUŒÛ×Çiª p×Mqîº)Î »²Ü÷䉘M,jáù;k‚l.Çs/o%ïºc¨ŠÇ¹ó†õ §ÓüxÃFºzKo´ÙñBáZFØåk ¹ì‰ÂC]…Çá2ÞC£€FDDDD΄Â)U hf±á´Ç7$ùÉCI.:?Ì×'¸tE„‹¹hqÕØQ×+½vŠ_<òø¸_[–Åâ¹m¼öê+yiÇ.ž}y«O•^0Tãw ä2'±ZânY4íCÚC#""""“£pFDDDDJYù^Å=‡›·eøÔ—ó‘¿íâÁ'†Éç½ÂÆPzñL!YÐÚrôׯvî?Àüä$b1Ö]´ÂÇêN-®õ»²™Þ“>ÖZYÞ{hÚ“ hDDDDäôΈˆˆˆH©S@Sfö¶çø—¯÷ó¿êbË® `°íÒÛIbŒaíÊåÜtåºqÿ`2ÆððoG]u5mM>VxrÁpß%à¹ÜüÈ kM”w@Ó;b3š/¡¥J""""RrΈˆˆˆÈl €¦LuvùÒ7À¢Ni^ÌN§IÄb¼þ†õ¬—é'k›p$`¨©ðè)ÑOzt$Vûûû/""""¥GገˆˆˆÌ&å{Wøò·†t±K°¥Âó¤OገˆˆˆÌ6ê )ƒY°-ˆ8,bd–ÊÁ†²Ì©(ÞsÓcÏ>Ïå¯àŽë¯e÷v^Ú±“ö®n¿Ëš”`¨–ìèa_k8Ùˆ3(4/vg°š™Õ¡g""""r…3""""2) ñÙ-WEØÝgxqOž½Ý…Ý!ÂÔ„!p–/W\æŠUaÞ÷…!jÜÂs–šÔÈžü-±hÔçjÎL(RËð¿5äFÏÝšža›ŒkvŒß¥ˆˆˆˆˆÏΈˆˆˆÈl¥€Ægïx]•ñBÛL2mز7϶}y¾¿!›ö8Ûmï;÷çøäÝ Ö, °}o¾$»h–ΟNJ¥‹èä@g'û::ñ<ÏçÊN/®õ»r§qÖ’(„}å_‡’ ´‡FDDD䜦pFDDDDf34>ªNØTÆ]FODa^ƒÅáh¨€Ã™³îž~®Þ<ïzm”?ùbÏPR{hªâqn¿ö5ض1†­-\ºâBR##üfÓf^Ú±ËïO©šl¦Â×ÎÄOl4h¨Žzô§ËwÍTÇ‘s™Â™íÐøhÞ0ìîp¹ïñ /¿’£½»x£©¶îÎqíê0•#yC¼„V’$bxÆpÿ£³}ï~ªq–Ìm㲕ˉ†Ã<óÒŸ«<¹`¸Æï0^ž|.E ˜8áã­ ·¬šví¡9g)œ‘rP¾WogÚJ Œáò“‡G‹Îô zÃÚ ¤Kl%Iw_?ݽ}lÛ½Ïóð<þÁ!žyi ÿñ㟫ˆÒTWçw™' ùßAËœ»{h:†ô×—ˆˆˆÈ¹Hገˆˆˆ” ]áôQ4Ro¶mŸKpÆõy€áâÅr%¶Ö%›Ë±cß~Úš›&<æz<ó¿ôè}ÑHx&Ë;-'Çvü¯é”Mey4=#Y·„æö‰ˆˆˆÈ´S8#""""åD#Î| ÆÐÑ뛆ëÌÃiÆ0¿ÑÂ-mñÕ• “)Œ)³ië+¼é–ؾg/ïÜM.lŸˆmÛ4××QW]Ec]-W¯¹„ïÞÿ CI¿ÊŸ ª%“>äk ÙÓtÐÛpT~<)›yUåD‰ˆˆˆHÁí·ßÎç>÷¹3 g>ûÙÏòÕ¯~u«:½P(D4õµ†ÓI¥R¸®¾¯™i hüd `6T„Šÿô±(€¡&naJà*ýÍW]N.—çG6ày÷=ò¿wÝÕ\ºâBöêd(5Œëº,hm!V%²u×BÁ 5••¥Є«}hNÕA ª"£åÛ(×>ä( 9ÌÆpæ–[náƒü Ë—/÷­†Ér]—ßýîwüÃ?üÏ=÷œß刈ˆˆœ3Ê÷Êí,)4ÁÓÒáR+ì¸  N L‚Êfsä_õSY©‘¾{ÿžyi 5••¬ºà|Ö,¿€Úê*º{ûèèî o`cJkN[(âÿšS4PþcÎÚS“ÿºˆˆˆˆÌN×\sͬ gþøÿ˜/ù˳"œp‡uëÖñ­o}‹n¸ÁïrDDDDÎê ñQj¸0‚¬®Êb¤ß*r\¶°Í ©Òhž~á%Ö¯]ƒmÛxÞ±°Åu]6oÛÎæmÛ‰FÂÄ£ ½ƒc8=[Z?É ×ù]ÙÑþS>Þšpy¹;8CÕ̼Ž!4""""åÌqþú¯ÿzV…3mmm|âŸðíõ§"ðéOšk¯½–ÑÑQ¿Ë){ê ñQg¯.˜k“Ê÷¹.\XØ@20ì,ëØ‡z³yÛVž·ä¤Ç¤G3ôô÷s¸c - ¼îºk0Æ0”žÁjO/ò¿ƒ&Ÿ€St•{M÷°CÎ+ôQDDDD¦Å²e˘;wî¤÷;œ¸ùæ› fïÏBÖ×׳nÝ:¿Ë9'( ñÑÞCÃ#7®²Iå!WÄ ^ëV8T„cØßåQQ À–]»©ˆDhkj<é1¶m³ µ…Û¯} 7_uÑpˆÇŸÛ4ƒUNN0ì@cŒK.;xÒÇ[âåÐx:SúkLDDD¤\ÕÔÔLúØRgOþoÙ¢¹¹ÙïDDDDÎ ³÷ÇzÊ€1°uËõ«Zê,z -S^Ë‚7Ý ‹m~»Í%RBŸé§_x‰õ—­!•N30”úè))¥pàþûï'Nû]ÆY;pàÏ<óŒßeˆˆˆˆœÐøìñÍ.=7¬¶ùÄ[ôg s¤0ºél¬ZaóÇ·;ºg ß}$O¼D®_Ÿ·`>—\p>mÍMØ–ÅS/¼È­×\Å5—®¦¡¶–ý<ò̳|ç—òôæéð»äÓ:YçÊLÊfûNùx¹ï¡é*‘/p™Ÿüä'Ù»wï„û=ÏãïþîïJ*œèééá/þâ/pÝÙ÷}øÈÈÿøÇÉ劼$UDDDDN¨„_›\¾¿!Ïûßà7ÛÔUøëoäÙ›‚šT…À>Mû‹Fòð·8¼û6Ë*¤;Ù<üøa—@)´ÏÆ.\² °,‹¡áa2Ù,Ãé4¿}á%ú‡ü.ñŒõŒû; —9u@ÓRæM×°CγÚg™jŠˆˆˆHIëêêâÎ;ïäï|'ëׯ'³mÛ6î½÷^6m*½]•?ùÉO8xð øÀXµjÕÕÕ~—tJ===<õÔS|á _`÷îÝ~—#"""rÎP@SîÒcír5Ë,~oÅÚóÜû Ç÷ó8œ„ˆQ68ca‹k ·¼ëVÛ¼ç6›Ås,ÀY=×~äâ¦Kç¢uzt”O?CÀqh¨­¡¾¦šÚª*lÛæÖk^Cwo/¼²®ÞBà…Èd³>W}j¡ÿ{hNд&Ê; ñ t¥lÚÊ<ˆ9—¥R)¾øÅ/òÅ/~ÑïR&íÙgŸåî»ïö» )a hJ€1ðÏßÊóO ¾šªáÏßlóÑ7ؼ°Ç°i§áP <jâu•pÑB‹Kϳ¨}¦£ÏùÐ&ÃÆ§<_>ž“%“ÍÒ10ÈþC8ŽCmU% 55´65rݺËxyç.^Ú±‹ -àÅí;q½Òú8Ž ûÐdOÐÄC†Ê°ÇP¦|'¶9 hDDDDDDDDDdVQ@S"Rðgÿœç¯Þc3N¡M&äÀ¥KàÒ%Gf”hV™9>—`ãó†¯|×›p¿ß:{S]™ w`ðè}®ëÒÓ×OO_?[ví¦"aAk —\p>áPˆúšºz{}¬úÔJaM>;„ñòXöÉÿ8·&ܲh:’ÚC#"""""""""³Kù^±…ú†à¿ÅãÉ= éʙݲyÃþÒãóßðÈ”àd°þ¡$ÍõõDÂG[~¨ˆFÆ3’eËÎÝìiï ¹¾ŽP°´3Ä`Äÿ0ä²§<¢ÜÇœµ+ ‘Y¦´¯~Ÿƒ’Ãðw÷.\høÃ›-V,çDמëŽÍÂcÏ÷4>õuz_cغk77\¾–‘Ñ4‘PˆXE¿zü7$‡GÆÛ?8Dçá^l»´3ÄP¨ŽBg“¿íJ¹l¡HýIo)óñ_])‡¼WØÓ$"""""""""2( )Q[öÀÿ÷¿ ±(\r,h†šJ¨Š–¢÷Æ¢mÙ[öB.ïwÅ“Ó?”äñg7±|ébbÑ(#éQª‰  Àp:eh¬[é°ì`Œ|.åkÙÑ>b•'¼µÌ×@×°SöB"""""""""R>Д¸á4<¾¹p+ƒ©¿ÙtúèÀ¡Nb3PÑÔõ¾4¹Lß)O„ ‰°!™)íÀk*Ú‡ЈˆˆˆˆˆˆˆˆÈì¡@R²ú‡’ììò»ŒÓ †ýßC“ËôŸö˜r/:´‡FDDDDDDDDDf4"S ×ù]¹Lïi)÷€¦}HˆˆˆˆˆˆˆˆˆÌ hD¦¨:h²§qÐRæMç°CÞó» ‘ÉQ@#2E¥иùaÿø™é8~²l{úÚ*BáÚi{îÉÊMbÄYUÄ#2¤²ÓWù«=©€FDDDDDDDDDJŸš)jij¢6âw¥íLƒ–b33!XÍÈ@ϤŽkI¸l/ã=4Ií¡‘ÒW¾WigHKscÙwÐÈéÍT@“MæîÍ0x8C_Ošî®a:»‡9x(IOÿß{ü£TÕ6žò9Z+Ë; iR@#"""""""""¥¯|¯ÒÎVuÐÅ h²©<Ç3 ôdèí¡§k˜Ž®%é=ºKçØÛÂ^Ÿ{·ž6 i‰—÷ø¯C)×gú&Ú‰ˆˆˆˆˆˆˆˆˆL™š)²m{Z—ÏËì VbYŒÉOêø|Úe¤7K÷(}Ýiº:SêL±¿cˆ¾W…0ÖØ{GB˜ uìý޽;¹`õµ§|íÖÊòhòôŒ84—y%"""""""""³›‘b°,‚áj²£‡Þe ŒôdI¥·k„BÓ>È¡žáI‡0ÖØ;Çœðm÷Áý§-µ:â †³å-¶'ЈˆˆˆˆˆˆˆˆHiS@#R$Ý;sìØtC‡’èb_ûÙ\!$8Ñ8²É†0'd¬ ÷î84©Z[â.;úÊ÷GÒaÍ¿«9¹ò½B+2Ã}b'ùÒ¸Å{;qÙäC˜SuÌ{[ø_G÷¤jm­,ï€&3¹Is""""""""""¾)ß+´"3¬©¥…ϰæÔaÌ©C˜ Îq“É^=¤l°k`Rµ¶$Ê{üWSÌó»‘sZ0ò»ñI(ö»‘YCH‘´ÎŸOÀ:ÖÏ2>d™8Žì¤!Œuºn™‰ÌØÛ¾î$ÆxX–}êZË8 iŽ»\Öšõ» ‘sZm}-Á`\.çw)2ƒ‚¡µõµ~—!"""2kœú*®ˆLZó¼%°Nrã¸ÛØ}Ö«onÇ3v³ÇnG‚3v󎻹@6ëÑ{èÀik­ŽzDƒæ´ÇÍá€a~•Ë-‹GyÏêa"òùØDDDDf#Çq¸ìªµ~—!3lÝkÖaÛºÌ """2Yê )’¹ ÏÇabGÌ‘‘dÇ›Mv$V0GofÂ}Æyߌ¿8´ÿê[柲V h»ììŸ}$†քKkÂ¥1îÒóh¬pÇ~ÿ½åoã7?áw2ƒÞòηù]‚ˆˆˆÈ¬2û®ÎŠ”¨ê†6bÑ ™ÑüIwͼډB˜c÷þw² fÜqÇ=Oo÷¡IÕÛRYÚM$`hŠy4Å]+õ;~þ½ŸðÒ¦èîì&›Éú]šœ…P8DÓœ&V\r¯{ó¬^·Æï’DDDDf-4SÔ2o1s-ãÀîm~—RtÑXœ‹.»šýýC~—2e‰h”H08í¯Ó´`yžN<ŽìÄoëª11@´"HmSœÆ¦z[›hjkeÁÂ¥Ì]¼Œ¦¶¥ÃÑ3®ÕÚ.;ú¦ö×@uÄ£9îÑwÞê+ Íóf¤¾W[јã¦E£lÜ!ïî³,¨‰—æ¸Ks¬ð~MÔÃRWŒˆˆˆˆˆˆˆˆˆHQ( )’U—_ÇÿþésìÚö=ñfe7EmCK—¯& {dAsŸ}ï»ØßÕCÏРOõ™€íÐÖPOSMõŒ¾îmoûWÜüFv½ü;pZœGóœEXŽ3£uLÖuÿ—½;²>÷>þÉL¶É¾‘BÂ6#‹,"hE+¸bµµTO[­kk[¥Ò§G|ÔZ—ö¨=µGû¨ÇsÔkkõ‹Ö¢T¤ˆÈȾ„d2L2ÉÌóÇM&’h˜%áó~½æ•™{®ùÍ5¿Ü,×\÷ý»ÇµiÎèvÕ´†)âøY2áaœþDƒæ2™Í?¥@ã§;¿°„…)73]¹™éÁN%ä%¦djöâ˂ƀń{4>|86`x2;€Ó €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`¿œ7ÖoC8½ÌT|°S€SŠ3hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒ @€Ñ 04Fƒ ÀhÐ €£A`4hŒM<òˆµjÕ*=÷Üsš;w®´dÉíÞ½Û·wï^eee)&&FUUU>c8NÙl6™L&c¼ñÆ’¤¯}íkÃ6à_4hzèjޤ¦¦*%%E’”ŸŸ¯•+WJ’6mÚä½îºë®ÂÂBmÛ¶Í»ýT5h‚™ð/4=X,IRgg§ÏöY³fI’ÊÊʼÛRRRtùå—Kê>ƒe×®]*++ÓôéÓ5iÒ¤a›ð/4=t½ÒÑÑá³ÝãñH’&L˜à³½k‰±—_~Y.—딜¹ 9ÿ¢AÓCÍ‘7J’fÏží³ý‚ .Pvv¶êëëõ·¿ýÍ۹ꪫ†uÀ¿hÐôе¼˜ÃáP[[›Ün·Ö¬Y£G}T±±±Z½zµO¼ÙlÖw¾óIÒÃ?¬?þX“&MÒÔ©Sû¿¶¶VsæÌÑœ9s´xñâ ä‚M]g¯Êf³Éf³iùòå2›Ízþùç•——×ë5×_½Ìf³¶lÙ"·Û­¯ýëýŽßÐРO>ùDŸ|ò‰öïß”@ðÑ é¡«9"Iš2eŠn»í6íÝ»WW^yeŸ¯;v¬.¾øbïë»® Ó»Ýî½”@ðY‚@(1›~UAAvìØ1à×Íœ9Sk×®Õ%—\¢±cÇö7gÎy<ž æ‚ÍUVVjÆ zûí·õâ‹/*22R?ÿùÏO»ÀàÑ ¢n¸AëÖ­“$Y,=ù䓚1cÆi—<4C”­3ÏÐ௑ý#Íì @(‰‹ðߨœA`4hŒ @€Ñ 04f v¡ª¼¤X¥‡ÈyÌ¡¸¸Mž^ ¸øÄ“ކ*TöÉõo½.[L¬æžó•S2œŽhÐô¡pç6ÕT•+'w¢Â#"Uzh¿¶~´A‹Î_&kxøcým˦õr{Üš¿hIŸÏïÙý©JîïµÝl6ë‚K¾6¤÷<\S¥ÿü°ßç“SGiöüEC{¨Fâ<„Ò>ÙÙÙ!‹ÕzÒã„’Cöh_Ñ.-üÊE²ÅÄ;§4'¨®(Sey‰æÌ_¤ÄäTIRrjš6½û–ª«Ê•“7¤XisÓ±cs8ÔÖæüÂ/à].—"£¢4nüdŸíaaaC~ÿh›M§LïµÝãñ¨xo‘"""‡<ö`Œäy¥}Òãñ(19U I)'5œîhМ ¤xŸr'Lö~¹-IѶÅÄÆéhcƒÔã îÁÄú˦wßRgg§÷ñ5&:\튊ŽQö¸ñ§ìýcbãßk{ue™Ün·rÆO:é÷ð¸Ýr¹Úeµ†Ëdîû²I#yBiŸ4™L?# F"4=´mRóÑFÌ™ïÝÖÑá’½¥Yfs˜ÚÛœCŠõ§…_Y*‹Å¢0‹Eÿüà=¹=î~c].W@–¦ê:kdTÆÅÆõnZ ÖѦmùà=Í]x^¿gnŒÔy…}òÀÞBï-òÙ–’–®YóÎéûÞºµÊ;NÎcÇt¸¶J)ié“=N{‹>“£Õ®‰ùÓ•u¼IÔp¤N;¶| 3fÏבºZÕÕV«½­MI)©ÊŸ~¦""£z_W[­Òƒûu´©A‘J•¡ñ“§ùœýT¸s›*JzÏž¿HI)iª­®Pýáµ¶´x¯ŸSQzH…;?ñÆ~°þï>ïw²KžmlPUE©ê×ÈÕÞ.·»Sñ‰Éš³`±$©³³S¬Kñ I*˜³ ×ëwºUu5Õ:÷«—Êd2 x\¡MU¥ŠKHTT´M’t¸¦R…ŸnS{{›$)!1yH±þÕûKìþt¸Ú?TUå¥jµ·èŒÙó¿<ø©ó ûdvÎxJ­ŽÎuvthç¶ûípµëнÊ7^)©éª®(Ó1G«FeŒQéÁ}*Þ[ämÐxÜnuttè³m[”1:K9yÕÒ|Tå%Å:ÚÔ …ç]¤0K÷_QÅûм¯Ï¥¦Æ#*)Þ§†#ušwÎùÞFî„ÉÊ3V-ÍMú|×5mTñ¾"5©—Õ®øÄ$ï˜Éi£4{þbÕT–©¢ì¦ÌQdT´÷ùž÷«ª¢T»wlU|b²FeŽQDD¤ÜîNY­Þ˜°°0¥¤¥«²¬DmN§""»—Âóx<:\S¥ŒÌ,ŸæÌ@ÆúhÐôÐÚjW\\‚$ãš&Ÿmû§r'LVVNž wnÓ±c­CŠ .—KÕejj8¢¸ø%&¥htö¸Sz6‰ÇíVñ¾SwöŒ? §y…}2<"Bá=š æþ¯Õc2™”™•£ÉSÏÓyLÕ•eš<µ@ñ‰I:ÖjWEÙ!ŸXIš4õ ÎÎñn‹WáÎm*=t@¹Œë5mRñÞ"M9c–Æd“$Î'[LœöîTeÙ!›+IŠŠ¶)*Úæ]æ®¶ºRÙ9ãU0{¾ÂO¸PTT´¢¢¢Õ|´A’””|RgÌôtpßçŠOÐÜ…ç}a\ÖØ&{Hãm4hzh;æPìñëˆT”’ÅjÕ¸ “e2™Œ%”<ž!ÅVSC½­ö^Û#"£•œš6äqç,X,G«]ŽV»êë´O¡öï-Ô”3•9fìÇí©¢ìŽ9ZuæYgŸÔ8]K7IR«½åø¶Zs8$טIIKÒØÃiBeŸ¨žgzXOhxY¬á}Çš|6ktö8í+Ú¥Æ#uÒñ†EyÉY,VÎÊñ‰Í7^Å{‹TW[ãmМ8~Ff–2³NÍïu0"#£ÔØP¯ŠÒƒ=ÎgnzŠKHT\B¢*Êù4hj«+­Ä–õè¸B šœÎcÞ%†v»¢m6Ÿ/?==¾àLì`U”ReyI¯í™cÆžTƒ&Ú£h[Œ$ã‹í—KŸmßb,—”tÒgx<Ü¿G)ié'}öLñÞ"55ñݶ¯û:(‰É)CnÐ §y•}rÀL¦¿OWn·§×v[L¬œÇÞm-ÍGÓ«a6›#GkK¯ñÍf³$ɈÏ݇³æêóÝŸªpç6Ü¿G¹&÷ÛPÉ›§ÂŸ¨¡¾NI)©òx<ª­®Ôè>Kƒ@è¢AÓC‡Ëåý’³½½M>Ï÷üây0±ƒ5íÌ9švæœ!¿~ ,V«ÆOžªºÚj575žtcâH]­œÇš4eÆIçÖuwÉ8£hËïiîÂó”pÂÙ§B(ÏC¨ì“e’IÒß§«Aãq÷zÊíîTÔñ&š$¹ÚÛe±ôýוÙd–Ùjîcøã ‹ 5hÂ#"uƬy7~’îûÜX¶íàM-˜Õëz@c²´·p§*Ê*)%UM õjos*ctöI tõþVó4¥ö6ã‚ê‘‘QjmiöùR»çýÁò#u‡%ÉçÂéCUQvHVk¸Ò2FŸôXªó0ÜöIÓ`ΠQWƒÆ7¾££C­öÅÅ'x·ÙbbåhµËíömæx<9ZíÞ¥Ý|s1÷9~ÙHFcèT‹‹OTÁœZpî…êììж͛ÔÙÑáfQfÖXÕVUÊåjWmu¥l1±Ší1C@è¢AÓCdT”ÚÚœ’¤ÔôLuvvj_Ñ.U”TýáŸ/zŠš¨hç6í+úLY9yÞ%¿†ª½½M‡kª”1:Ë»´Ôpêó0ÜöI£A3ðX©weÑg ³(;g¼w[ʨ utt¨ìПتŠR¹\í““×{|sßã÷¥ë÷^¸v`ÉAl\¼RÒÒÕÑá’Ëåêõü˜±¹r»;U]Q¦ÚêŠ>ÏžʸBKœõe“½ù¨$)-=Scs'¨²ìâ“”•“«V»}H±þâjoW]m•÷q{{›<ªŽ_¿Æbµ*-Ý8‹£ÍyL{‹>“£Õ®V{‹:\.…GDjbþtŸ “Ÿhßç»T_[­ÑÙã46wB¿qUå¥ò¸Ý=îÔ|¸,V«’RRe9á¢ó]Fò<„Â>éhµ«ýxãG’Ün·\®v55Ô{·EÛba4]y šªŠRu¸\2‡™UW[­–£GuÆìy ˆðÆfÍUeé!í-Ü©V{‹“ÕÒܤ²C”;1ßçl›V{‹\ímê8~6É1G«7×°0KŸg¥$%§*Ú£ýŸïRã‘:%$&Ë®”´tEEÛ1[ÝÊJŠe6™e2›Ôætêh㮩Ҙ±¹ŠŒŠê¯„¤í+Ú¥ÎÎ¥Î:%ãM4hzHMÏÐgÛ¶ÈÞÒ¬˜Ø8MžV ÉÓ N:Ö_Ž9ZµkÇÖ^Û»¶%$¥xj¨?,[Lœ2ÇŒUBRŠFeŒþÒ³®,/Qåñf]RJšæ,XÜ+kx¸æ,8Wå%TW[­Ò¦Fuv¸d‹‰RƒÆãñhÏ®2›Í2™Í²Z¬JJIÓ™g-ðî‹}ÉÊÉÕ®íÿTbrJŸ×Bê¸B šÒÒG˧϶oÑìyç(<"ò”ÄúK\B¢¾zÙÕжÅèÜ /ô{ÄÆ×ö°Xú>{¥ËÂó¾:è±O•‘<¡°ON™1SSfÌPìâ .öÞ ³øü^&M¡ISgxwA3iêÊÉ›ø¥c‡…… ¨áT0{þ€r=QdT”&äOׄüéCz}O&“I^zÕ _×Õ ;®ï&àPÇz†ÏÅBÀl6«`ö<¹ÚÛõÁúuú|×U–—èpM¥ª+ʆ;œu]Ç#ÞgÆ 'ÁšöÉÓ‡½å¨vïØª¸øD¥ep6 0ÒqÍ l±qZ°ø•: ÚšJU–•Èíq+Ü®Œ1ÙCŽ®šŽ(<"BcÆ;•  æ<°OŽl‡ìUuE™Zš›©YóÎñž]`ä¢AÓkx¸ò&MQÞ¤)§4v¸éììPIñ>͘9WaaaÁN'hBaØ'G®V{‹,‹ò&MQNÞÄ/]FÀÈà·ÍظN íVËéÛ€èŸE/[ì$Bóàqqºúê];h$[0wv°S`XpuP_Y¸ @€Ñ 04Fƒ ÀhÐ š~l¯Þ.Óý&™î7©¸±8Øé`**’î¸CºðBiÌ©°°wÌöí’ÉdÜŠÙÍF,ê œ,ê €‘ÇÈ7Û¸á}¹={îy}>¿ë³ÏT\| ×v³Ù¬Ë.¿ÂßéùhioñÞOˆLè{ûÓò?-ך=k´zÑj=pÞÁNgDòx¤[o•ž}Vr»»·76öŽméÞÍ”0rv3€€ ¾>ê ÿ£¾¹üÞ q:r8r8r: ˆè7Öår)**J&NòÙø}ÂLa*H/$ÅGÄüý1|=ö˜ôôÓRn®ôÃJùùR|¼4ujïØ°0©ÀØÍÏnð¥¨/pº¡¾¹üÞ yçíuêììô>þ¢ªÝÕ®h›M¹¹¹þNëK-Ì^¨7ïv†þ猟>*-_þű J;ØÍŒú§ê €‘Ë-¹àB]|É¥ºüŠåJJJúÂX—Ë%«Åêï”úuǺ;¼ëB÷¼µºZ}âJ–*íßÒ´ð¿êñÍ+û×Ùšóìí¬Ý©‹þç"%<’ Uï¬òÆ?òÁ#Jüe¢V½³JÏíxNsÿs®IÐ’—h÷áÝ}æòæþ7µô¥¥JùUŠÆ?1^7®½Q Ç|bn\{£Ožß}ý»jr6é§ÿø©òžÈSÜÃqÞØ[ß¼U¦ûMZ³g$éáóÚuÅëNjîþþwé{ß“rrŒS飣¥¼¼îç÷²¤˜©ªÊ÷µN§d³ë$<8¸qO´k—ô³ŸIçŸo¼_l¬ôãÞ|SZºTJI‘Æ—n¼Qjð^­\i¼ç/)½õ–´l™””$'=óŒoìë¯ÅÒòåÝkA?þx÷¶'Ÿì޽ãŽîu¡{ÞZ}w3Hÿò/ÆQr11ÒŒÒ7¾!}øaÿ¯‰¨/¨/$ê ê €‘ÁïgÐDEE 8ÖÕÞ®èAÄŸjù)ùZ1}…ìívÕÚkµ¥rKŸqn[uŽ:Õ;êõQùG2›Ì*o.×̧g*Ì&—Û¥Ç6?¦»Ý­øˆxµºZÕälÒS[ŸR{g»2c3ÕÜÖ¬w½«ùÏÍ×®[w)'!Ç;þêõ«õà¦f Sfl¦6Tqc±ÖX§]·íò.‰0-mš®Ì¿RûŽìÓîûµ½z»f=3K»«—Û%«ÙªÑ±£uÉÄK´µr«j[k5>i¼&§LöÆ¥F§yÞV¯–|иŸœ,edH.—ÔóW9i’qŠ}E…ôÒKÒ]wu?÷Þ{’Ã!Íœiœ¶?˜q»´¶J7Ý$ýὟ;±0ê7,LÊÌ4жâbiÝ:£ëZ  ¥E:zTzâ £è³ÙŒ<¥[n1ò=ۈݴIZ³Æ÷}>ø û~JJ÷ýü|iÅ Én—jk¥-}ïf^¿ÿ½ñÙœN#7‡ÃÈs×.éœs¤³Ïþâ׌$ÔÔõõÀÈøÅ—¿€ËåRyy¹Þ^÷wmÙò±ŠËå Øûß4ë&½tåKzýš×õô¥O÷g6Ói‰ÔîÛvëù+ž—$Ý»ø^ÕÞU+‹Ù"·Ç­Z{­$c½iIÊIÈQÕÊ*•ü¸D…ß/TzLºìív=°±ûbšJ7è¡M)'!GÅ?*VÙeÚyëN¥F§ª¼¹\n|Ðû£¹?Òk_MÿzοJ’vÕîRfl¦ž\ö¤6ß°YuwÕÉj6Ž\½hµÖ~s­ægÍ—$]3í­ýæZïmfÆÌ!ÍYCƒôÈ#Æý×^“êë¥Ï?7ŽÈÚµË7ö†ŒŸ/¼à»ý7ŒŸ_ûÚÐÆízíþ`ýöÀFñòÙgÒþýÆ‘i]6lzÈ8b®¸X*+“vî”RS¥òòî‚M’,ÇÛ—ññÆ{ÚíÒ¾}ÆQsqô]—G5¶yéí·}ã.¸@ÊÎ6Ö|þÛߺ ¨«®ú¸ùùÆÏ;¤Ã‡ûÏ1,¬û"¡Û}§WEÆôª ÇôvPÁ,R²³Ÿ~Ø÷óá08Ôê ꋾP_VÈ6hôé§;T¸{·ÆË•Í씼[@u-—Cmmr{ÜZ³gýèQņÇjõ¢ÕÞØ¥ã—J’~ûÏßjOýIRµ½Zo~\’tçü;{ßU  d ‚IÉÆyþ¯¾¢õ‡Ö÷*êN–Õ*-X`ü”¤Ž†7›¥ï|ǸÿðÃÒÇKœ¸$À`Æ=ûl)"B:zTºðBcç`ë²Ô˜^ýö·ÒczU]-=nL¯îì1½ýáHK–?Ÿx¸˜is³´q£‘³ÄnE}A}1Ðq©/(ÞÞÞ®ššjïã¶¶6y<•••J2–ÈÈÈ”$9NîÞ%»Ý.»Ý.—Ë¥ˆˆM™:U'NêsüSí‰-OhS™qAÍžG€]û¿×z‹ ÓWhÑØE’¿Aa]¡lÚd ³ÊÙáTlx¬ž¿âyå%æycï=÷^½Zôª*[*5í©iÊKÊSÙÑ29;œZ9¥–ä.ñÆþêÃ_ikÕVÕÚk%IGGuõŸ¯–$ÅEÄé¹Ëžë•Ë·f|KOm}J‡[ëüÏW”%J)Ñ)zà+èÛg|{ÀsÕ¥¡ÁX_9"Â85¿¶¶û4ÿË/ï.zºþzé¿¶l1ýë'7î˜1FqË-ÒÎÒ²eÆëââŒ"èž{¤[o5bï½WzõU©²Ò¸0g^ž±FµÓ)­\é;î` ¨¿üEzåã~ûñ:öç?7–NŒÜ/6î?ñ„´éøu[{®¬qíµÝï¹b…±ÃêÕÒš5RI‰ïQ€]Ë $%}yn#õ…úÂõõÀpå×ÃáÐömÛzmïÚ–œœì- :;;UWW§ØØXeee))9E™™™2›w’ÏÖª­zµèÕ^Û×ìY㽿lÂ2ïn'^”³?]G IR„%B“S&kÞ˜yZ½hµ2b2|b#õé-ŸjÕ;«ô~ÉûªwÔkaöBÝ~ÖíºlÒe>±›+6ûäær»¼ùŸxÐ.ù)ùúàúôìögµîÀ:Õ;êUï¨W\DÜ€>ˉìv©¼\ŠŒ4nÉÉÒ•WJ]düìk=å±c¥‹/6.ÎÖ½nôÉŒ{ÓMÒ¬YÆ2ï½gVWg<ß—˜(}ú©´j•ôþûÆR J·ß.]æ;½ƒ* ŠŠ¤?þÑwÛúõÝ÷»Žê“Œ‹Ž¾Ú{7Óšî_¥–-3~&'K+üúׯÏÔT£°úÉO¤½{¥œœ/Ï `¤ ¾0P_ø¢¾ ¾®LÇo>î»ï>Saa¡©®®ÎÔÒÒbÊÍÍ5ÕÕÕ™ÃÃÃÃZ[[Ín·Ûmu¹\á’"Íf³ÍãñÄz<žÄ 6¼.I®Ž ž·=VKØ— ÑÓÛžÖ-oÜ¢‚ôí¸y‡ßÞg8¹ï>ãbœ—_î[8œ*Rk«Q|EDœúñƒ©¼\š0ÁøŒRzz°3ð?ê‹nÔ½Q_ õÀÀ-^¼ør“ÉÔh2™ZÜnw«$§Õjmw8.³Ùì²ÙlîöööÎÔÔT÷Áƒ=±±±žÔÔTÏÔ©S=÷Ýw_¯+þùõ  §ÊJiÃãœ/¾h7?ÿ¹ÞËbñ=²m¸kh0 § ¤§ž’ÚÚ¤o¤xÀé‹úbè¨/B Ì 7HëÖ÷-éÉ'¥3‚›Óppé¥Òoøn[±BúÍo‚“ ¨/††ú tРAÀdgKgži¬å|×]ÒĉÁÎhx3Fš2EÊÏ7nË—K3g;+ ¸¨/††ú tР €›gݬ›gÝì4‚î™g‚Áðô»ß;„ê õÅÐP_„s°8ÝР04Fƒ ÀhÐ š~l¯Þ.Óý&™î7©¸±8ØéŒ8Û·K&“q+fz0ÂQ_øõ†£€6h6nx_ï¿ÿÞ€b=<¨-ìç¬úÖÒÞ⽟™”üaùŸ–Ët¿I÷¼wÏ©w¹Q Ý3Àa[º§W #gz@ÔÁG} Åßoàt:åp8äp8ät:ñ¥¯illÔömŸÈn·+sôhuvv*,,Ìß©ú3…© ½@’Ð÷>„…IÆô*žéÀQ_ /ÔŽüÞ yçíuêììô>þ²ª¾¾^oþHñññ:ÉÅÄÄú;Å>-Ì^¨7ïÊ{Ÿ.”v0½$ê ô…úÑߗ8[rÁ…ºø’KuùË•””ô…±ÍGjóGjôè1Zx΢€Ow¬»Ã».tÏ[««Õ'®ôh©Òþ-M ÿk¡ßü¸²­9ÏÎÑÎÚºè.RÂ# ZõÎ*oü#<¢Ä_&jÕ;«ôÜŽç4÷?ç*á‘-yq‰vÞÝg.oîSK_Zª”_¥hüãuãÚÕp¬Á'æÆµ7úäùÝ׿«&g“~úŸ*ï‰<Å=ç½õÍ[eºß¤5{ÖH’~±ñ>¯]W¼nHsvë­ÆÒkŒaõ‹_t¯ýl2Iëz {ǾÏuÝZ}§W¥¥RZšQd=þ¸”-Í™#íÜ)]t‘±dÁªUêå³Ï¤«¯–ÆŒ1nW_-•• éc DQ_P_xç—úÜßÏ ‰ŠŠplaa¡âââtFAL&“³ê[~J¾VL_!{»]µöZm©ÜÒgœÛãV£NõŽz}Tþ‘Ì&³Ê›Ë5óé™ 3…Éåvé±ÍéîEw+>"^­®V59›ôÔÖ§ÔÞÙ®ÌØL5·5ëÝCïjþsóµëÖ]ÊIÈñŽ¿zýj=¸éA…™Â”›©ƒUÜX¬uÖi×m»¼K"LK›¦+ó¯Ô¾#û´ûðnm¯Þ®YÏÌÒÁƃޱ\n—¬f«FÇŽÖ%/ÑÖÊ­ªm­Õø¤ñšœ2Ù—:¤9=ZºäiëV©¶V?^šÜ=¬R{ ›Ÿ/­X!ÙíFì–¾§Wn·TW'Õ×K}$™ÍRy¹4s¦±tË%=ö˜t÷ÝÝËüþ÷Ò÷¾g¼6+Kªª’^}UúàãHºôô!}<„ê ê ïüR_`˜óû4u´©Iµµ5Ê›£¢ÂBýãwô÷·þ¦-oVKÏ+>úÑM³nÒKW¾¤×¯y]O_út¿qf“1m‘–Hí¾m·ž¿âyIÒ½‹ïUí]µ²˜-r{ܪµ×J2Ö›–¤œ„U­¬RÉKTøýB¥Ç¤ËÞn×ðŽ½¡tƒÚôrrTü£b•ÝQ¦·îTjtªÊ›ËõàÆ½±?šû#½öõ×ô¯çü«$iWí.eÆfêÉeOjó ›UwW¬f«$iõ¢ÕZû͵šŸ5_’tÍ´k´ö›k½·™3‡4g«WKk×JóauÍ5Æã®ÛÌÃÞt“ôÒKÒë¯KO÷?½2ß+##¥Ý»¥çéÕ½÷…—ÅbJµÆôêàAãH»Œ ©¸Øx\Q!M*ÕÔHÿýßCúhƨ/ ÔÔ]!Ó ilj”$íù¼H&“IùSò5uê4577kÓÆ r:Aΰ[We ³jJêïÑiyIyJŒLTrT²$É#$)ÌlP©¶T¥D§H2ަ[9¥$iSé&ïØozXytçü;56~¬$izÚtýpî%Iox«W>³q"T~j¾6}w“n›s›æ™ç}¯á¦«€²Z¥)S¤œãq^ž”˜(%Ó+1½zâ cƒïßX®@’RRŒ‚M’Þ}7`© DP_¨/¨/ºü¾ÄÙ@ÙívY,{ÞW|–-HHLÔ»ÿxGe¥¥š8iR3ìÖU@¹=nIêµ\‰» œNw§ÏöY™³$IeG»2ÞQc\ÙrjêTŸØÙ™³%Iûì—G™Ôý]Gеw¶áÓ„ž®ÊmL¯N\âÄÇŸ|bü|ôQé7¿‘Ž“œNã§$µŒiÀ P_¨/¨/ºB¦Aãñxäv»é³=66V‘QQj±f‚8±€ú2]N‡»Ãg»çø!Z’'H’:=Þ u:;|苲EeRT’Oñ$uh®N×€?C(;±€ú2]?Ι#]pa,_ÐõsÔ(ÿä €ÐE}A}Ñ…ú¡*d46›Mn·[‡C6›Íç¹—KÑQÑAʬ·APæ¾ ¨¥%u½f Snb®öÙ§íÕÛµlÂ2olQ]‘$© ½ ×øÞÊýåTWl“³i@¹”åøžÔt †l5mš´m›ÔÒ"ýàÆ…>pz£¾ ¾èB}€P2× IMM•ÉdÒýû|¶WUU©££C)©¡³Þñ` ¨®¢Åár¨­³Mn[kö¬Ñ£=ªØðX­^´Ú»tüRIÒoÿù[í©ß#Iª¶WëñÍK’îœg¯ñ» ´,A0)ÙXÆá•ÂW´þÐú^EÝPu­ñÊ+ÒúõRÇI ;ØêÊ+Ÿ7Jçž+ýéORuõÐßÃõ…ú‚ú¡Ë¯gд··«¦¦û²mmmòx<*++•$Y­VeddJ’bc㔓“£C‡ÉÕÑ¡Qi£d·ÛuàÀ~eee)55ÍŸ©J’žØò„6•Ôìyصÿ{­·Z1}…]$iðKÖÊö MÖ0«œNņÇêù+žW^bž7öÞsïÕ«E¯ª²¥RÓžš¦¼¤<•-“³Ã©•óWjIîoì¯>ü•¶VmU­½V’tÔyTWÿùjIR\Dœž»ì¹^¹|kÆ·ôÔÖ§t¸õ°Îñ|EY¢”¢¾ò€¾}Æ·½åS­zg•Þ/y_õŽz-Ì^¨ÛϺ]—MºÌ'vsÅfŸÜ\n—7ÿ/Ú%?%_\ÿžÝþ¬ÖX§zG½êõŠ‹ˆÐgéO~¾Q¸<û¬´nT_oÜâz »u«ôjïéÕšî e˺pëØôJ’~úSéßþðéÃ¥º:ãýñÍÃõ…úÂ@}€áÎtüæã¾ûî3šêêêL---¦ÜÜ\S]]9<<<¬µµÕìv»­ÑÑÑV—Ë.)Òl6Û<O¬ÇãIܰaÃë’äêÄÿ~C€Õâ¿……ŸÞö´nyã¤hÇÍ;üö>ÀHE}ÑúŽÅ‹_n2™M&S‹Ûín•ä´Z­í‡Ãe6›]6›ÍÝÞÞÞ™ššê>xð '66Ö“ššê™:uªç¾ûîóœ8^È\ƒàtAƒ ÀhИ%Ø œnžu³nžus°Ó0P_#gÐ €£A`4hŒ @€Ñ 0K ßlã†÷åöxtî¹çõz®ººZ[>ÞÜïkSÓÒtöÙ ý™€a„úÀpæ÷Óé”ÃáÃáÓéTxDDŸq6›MS§NëµÝãñhÏžÏéïT„8ê #…ß4ï¼½NÞÇýPqqqŠ‹‹ëµ½¢¢\n·[&Lð[ކê #…ß4K.¸P‹E‹E›6nÛãðk=ö|þ¹23G+.>ÞY¨/Œf¿ATT”¬V«L&Ó _[^V&»Ý®É“'û!3à õ€‘Âï š¡r»ÝÚ³‡£Ûœ<ê ¡&d4¥¥%r8Ýà¤Q_5!Ù ñx<Ú·oŸÒFâè6'…ú@( ÉÍáÇuÌáÐØì±ÁNÀ0G} …dƒ¦´´DV«U™™ÁNÀ0G} …\ƒ¦­­M5ÕÕ“•%³9äÒ0ŒP_UÞÞÞ®ššjïã¶¶6y<•••J’q[†ïQlååer»Ý,?Àõ€‘į ‡Ã¡íÛ¶õÚÞµ-99¹WUZR¢Ø¸8%$&ú35à õ€‘į š„„]±üÊA½æü%ø)Ãõ€‘„E˜Œ @€Ñ 0¿]ƒÆZZᯡý#)!ØèǮĚ`§0(J v 0b|Ôòi°SЂ؂`§8…2”ì$q @ÀÑ 04Fƒ ÀhÐ8-465éϯ¯ vÀ°ÿÇkkÿªÊêêS †¿£MZûç׃0lñg(8Þ|m­j*V· &ÀÐÑ éaÛ§ŸÊ”” §Ÿÿï`§‚afÇÊ”” ^~9 ï÷Ëßü»LI Ú{`¿1I¹9ZðÕ ’O¨«ª©Ñ¢‹—ê;·Ýª’²²`§r½ÿöe$ÿý{²ó ûoM­]¿xt£VÜøªf÷´ ÷î3.îèÒoþ¡Ïçv|V­ÌüG}n¯¬)ôgÚ'¥¶î°®ÿÁ÷uöEjqñ)‹pzùlÛNeš’õû§Ÿv*f6oøP™¦d½òÂò~Oþò7Ê4%«xï~cò“òté‚‹’O¨«­ªÑòE—èÇßù¾ÊK¨/N¨ý÷ÛÙWè_—Üî×÷8#ù߀“ý‡ÂŸ¡ÃÕv=ñÀ&ýà›ÿ«eg>«½»ëúŒ;oÒïôÝKúþœ…;j4+ý×>·7^)ògÚ'¥®¶Nw^».;{©í?xÊbœœ€6hÖï-Ò?öôÿeŒÛãÑžšj½óùnýåÓOôæîÚVV¢c®öf øH3$µ:JˆvA·¿¸Xg_t¡jëê´þ¯k•“ì”j¸î¿Ã…¿ç7ößÿ¸S .úO½ðòÙ[Û5sF†"Â-}Æ:޹ÑçsÓ3´û£ïëù¶î^¹ÈŸ)Ÿ£RÓôÞ_ßÓÙ¦s–-ÕÎÝ»OI,€S«rýUü£ÿ¿ƒ=nšöVÅ;ûuè/»UúæÕm«PÇ1W³| ¤Š­Å'P_ÚP—½Tuµuúóúו•szÕ¡´ÿ¶9ŽÉì4FÿŽCáÏЫ/|¦+æÿ·þüüN9ì.M›•¡ˆÈ°>c9\Ší§Æ™R®w‹nÑËï^«ÛW/ôgʧDê¨T½úÞ_ÕætêŠs–©hgÿuË`bœœ¾¿a9…޹Úåho—£½MN—Ká–þßróÁýªoµkò¨ ÅFF©ÙyL{kªUooÑ’ÉSfæ„` Ün·Í_ gìT‚ª¡±Q_½êJ™L&m^÷ŽòÆ vJÀ€…Âþ»g½îyh½¾»¢@?ýñBEEZûu»=š7{ŒfŒîóy“IJJŒRRb”šŽù+åSjægè£uoë‚+¯ÐEW}MÛ7lPƨô“Žpr:޹Ôáp©ÃÑ®g‡ÂÂûþBE’j7—êX}«'§É!Ws›÷–³¾Uc–L)Œú·Û­y‹ækö‚Ó»¾hjhÔ7¿z•L&“Önþ»rò¨/‚ÅãöhÊÙ34iîÔ`§‚A…?CÅ{êõèê÷õõëÏÐmÿçlEFõÿ=¥ÛíÑÌù£5cNfŸÏ›LRBR”’¢ÔÔ0î¯AÓÐÚªª£Mš7n¼²“$I™ñ в†ëŸ%Å:ÒjWZlœ¿ÓF³Ù¬wþrz_¯Âívë›ß»AõGŽhóÛÿ 9ƒa%Töß¿¾µGnݽr‘¬Öþ¿•$³Ù¤?ý×ÕÊ,prsr´öå?jÞKtÕ·¿­÷×¾!«µïFÕ`b ]Ù[{åéì®/£úŒkkp¨µªY£æe+&+Áؘ)…EYtøŸårq(*#¯0›ÍúÓ;ÿì4‚ÊívëÖoÞ¨†ú#Z»yÍ™ 3™Mú¿¯ÿ[°ÓÀ „ÊŸ¡·_ß§ÎN·n_½p@5ÎS¯|-@™ÎØÜ½°öºdÞ…ºñªïèµ÷ÿÚoÝ2˜XCã÷CÆ–N¡+Θ¥«fž¥d[ÿ³ÃXÆ,ÌlòÙn ÷k~}iniÑ]ÿ÷åÏ=KÉyã´üºoõºð¯ÇãQrÞ8Ÿu¦.½H+nüž^[ûWµ·÷¿Û–mŸèöŸ®Ò„Ù3•”›#Ûè }åòKûŒÝ¹{·–_÷-eLž¤œ3¦ëº[nÖ‘††Sú9O¥7Öý],¿B‰ãÆjòYs´rõÝ:ætö;˜yˆ ~¨¸ì1Z·þ]ýäžÕÞßÛ•ÿr­ªjj|bó{ûÏß¿(SR‚þÏý÷I’&Ÿ5G¦¤ï­¯%œmN=øØ£šsþyŠ“©‚E µ~ãÆ!¶.GtÇÝ?ÓœóÏStfº7'Çã¹ï—øägJJÐÒ«¯ês¼›~ü#Ÿ¸·ß[/·Û­WÖüE×ßþ}Ÿk×¼üÚ«ŠÍ­ÝŸ®{Tó.X¢Ø¬Ñ}~¶ÁÌoú¤‰ºç¡õÝܦ”ñ¹úÖM7ê½M›4çüó”“­ßý×s½^3˜?¿þÝSzû½õúýÿ{FS'OþÂùeÿ5œêýw(Oäïß.ù] ×ùÌþ{ªÕqhëöJmÝ^©í;«c ×§»j¼Û–4zcûz]Wæ[7½vÊr)ÚS§ë°FçüNgÿŒnÿéßÔ„³o¦Lš¬ßÿ¿gôÑ?·è¡Ç;e±†&{é$»bªò®š¡Èäè~ã:œ’Ôë,«-ðõEKs‹¸ë^-ÊŸ§)Éãuýòëz]t×ãñhJòx-?[—/\¦ÛVܤ7_[+×ü»¹}Ë6Ý}ûOµ`Âlå'å)Ï6FWåò>c‹vîÖõ˯SAF¾ÎÊ)Ðí×ݪÆ#¡[_¼óÆ:}ã‚+591WçLž«ûÿ?{÷×Äýÿü•„YÊ*ÊÜ£¢8P¤ZÄU+u´u×Ú¢­¶ÔõÓVk[÷€j¡Nкý"Š(7È’=ÜïH$@Ž$ }?šËç.ŸûŒÜç»ûœïR‹äÏØ”ƒ2®^¸ Ǧ­~& Ëý$­·£§ 5¹êøAÙzÛ³3Í9&X¹d »^hÎ1‘þÉ›N¨X(ÄŸ+ÇОƒÐFßu€KaµÞ·rY¯3ñóW?`hÏA°Óm!ÍSÅøbß™ü5ç˜`âÐOånoñ̯dÒ]=±XŒ£þÃWÓ¿yvÍ{Cà`Ð ÷ãîáÏ•¿cDïÁp0h%wߨ”oWËvøué*|å3M0oâ,\> C{B;C[ìÞPe6ýbûú-¸z·¢mÇêÇgÔ~%ÔÝ~üßnŒi:Hæoåè%rÓ^ Ã$«x~÷ B~ûß œIV#°Èe&î\¸Uë<Ôæ»Z™c@9eÚCc­c6}HÝ2Ó s=1דq':ºúܽ•*]ö,ñmŒ³míÕ*Ï•ùbÂaµå%!>¾>G1¸ËvŒèá¥óO#'Kþ÷ƒ&9vh‹ [qóÊuüµj½ÚÒBØã¼ù“áççlj礧§sòòò8üù,R IDATvvvœôôt®@ àpÅb1_WW—/‰šp¹\=†a †1ºpáÂ@â³*öà.Ä ƒÚU½µ¤¬§ãcÁçiÁÕ¡-ôÚ`מ&"§¨îí;Ë©’Uõ16DÔíÛè1Ð úzz˜:~ºu¸8l ð‡¥¹9î_¿ }==@qq16ùïDfVÒ32p=: ±ññ016Æ‘÷ OOÙ[¿ƒì‡ÏüyèåÔýûô…™9ŠKŠablŒÏ&O‘I|ô¦Ìž… c¼Ñ»gO<{ñnÝ ssÄ]¾ mmùs_VçlÄEŸ8®ðýqž#ña_ÖÛ€å¿ýŠe¿ýŠ9Óg [çθzý:üƒáÔ­"CÏÇ{{E›rPÖ¹ áp÷c##Œý‰´Þ¶þ+ Ü»v£VõöìÅ Æ6½{ôÄ©ƒÁU¶ùôùs¼HJBl|泫öÉÐ3ˆ¸zÆFFpîî$]o÷Þ½˜6o,Í-àÚ·oµûƦ|›¼¹-vîôHIKÃÞ`ôuî…øcëp9\¼ºÿ@šžM¿ aÛµ+ºuî,wÿ+¢ö«¹öË&¿l¾åë¢1–/›ö« [ÿ¾‰e¿†+|ÿÏذf ãu!RÓóQP BAa æø‡S·æøw{õW™]Š|ŽO}àÿŠOGÉŸ–âø™,Xr^ÃÛé[s¼LÎÁ΢aj¢‹ðc>T3¥‘¦ í…›·oáYl ô«¿êžMZBˆr¢Rª,K {FÌ åGUÞ—”áùéàòy°rµ•œ˜a¤^{’!Zº;€ÃÕ\|a3ÄFÅ`HÐÓ×çSÇ¡c·Îˆ‰Ã?[þ†™¥9"î_ƒž¾ä8TR\Œ¿7ù#;3 ¯Ó_ãÖõhÜ‹‡‘‰1v ‚SŸž2Û :€¯|¾À½œÐ«˜Y˜¡¤¸F&ƘðÙd™´ÇƒbÁ”9ðš0N½{à峨ùç6˜Z˜!<î2µˆ/®œ@hðI…ï÷1z}Ø—õv`ýòµX¿ì7L™ãƒNÝ:ãæÕØë„.N]q<2Tf|Ʀ”qîƺ†¡±FŽÝ:ánLþÙº æV¸x/²VõöòÙ <}ô‡÷†`¯Öl@‹VoÇN}zBGW2~¸zá2>q󄮞.>>Ýœ»##-¶C ­ÈÄ(×.¾¸|þfzûÀ¡½#>îŽÒÒ2œ9r17oã|Üeé§iHM~…‚üä`ÎøÏáÔ»þ=u Ê6_<}ŽäI¸{?Ìÿ?¬þ çNœÅµˆ«046ÂÎÝ¥ëؽ §Íƒ¹¥9z»ö­vߨ”¯MÉDÓæNGZJþÛ‚}á>Â;þØ.—‹Û¯îIÓ³éÅÂbô²í†ŽÝ:ËÝÿЍýj¦ý^É»œôld½Ê€°@ˆ¢‚"ü᳎=Ûã‡C««¤ßг×ÀÐÂ\º S;ä¦gáä¶ÿÀð±)6úF¬òÐ× «2cs ”o±ŽÙô!MÚ…õ¿(¾øpؘöX¾Qr"93£é)(*(AaßÏ9‰ÎNVذǫÚϸñs¼CðË_ñi¹iΈŸæŸÆÐÑíÐÙÉ ¯^æbÏŽ[01ÓÅ Sê%Æ7øÄܼÏb oP}ÜÂ&-!ŒkµÞ€Fr8œ,‡“'‹ ù|~Iaa¡ˆËåŠôôôÄ%%%efffâÇ3Œ™™Ó±cGÆÏÏ©¼=Oq¦,O ýÛ´ÅÕÇz÷:Xµ@JnJÅb¸:´ÕìÉ™JÖøý‚¹3>“¾îÚ©>ÿr6l߆ï¾ú ­­¯çΓY/þþ} ût &Ïž…GQ²Wd¬X»];uÂ¥S§«ýì´ôtÌúj!Vü¸Tfû}1ìSo=‚‰Þò¯ZªNGLùDþÝ`׺5ëmÀ­ØXüòël[ÿfL’ ¦Oœ„ömÛÂ÷Çàˆ™S§IÓ+[lð¸’ØÚe+à3q¢ty×N0sá—µ®·ÖÖÖhmm›·%ËúörFÛ6UƒÿŠÖ._Ù>Ó¥¯ ›5Ã÷Ë—áêë>؃õ¾½ÎÌÄÄ™ŸãÓQ^ØôÛZpÞô@€›·n¡´´TšÖÜÌ æffÒ×M´›(Ü®M«V°iÕJú£ðáãÇ1wÆg8¸k7,ÌÌeÒji½)ßåËeÚž¼}cS¾<.SÆÇï+W!éÕ+ì Æï+W¢—S$>yÿ @iZ¶ýbopRÒR±daÕ«ä*¢ö+KÝí—í÷$ Ü÷/ |]4ÆòU¶ýjÊlŸ˜íÓ0uÎaÄÄ¥àvĹiMMtaZáêõ&ÚêVd¼.Ä7?‡âÛ/ûaÖ´Òå=ºµÀ¤Y!8~&£?n¯–Ïbcɯ0h”'‚ìÇœé3Ô––¢\Vým‘rõ^†&À¨ƒ SòÀ”Šaåj«Ñ“3•ý°ægL›ûö» c×NXôùBlØ/¾[hkcÖ×seÖ{“†Å“çàÊ£›2ïý±b:tíˆ#—Ÿ$$?²3ëk|»â™í÷èëŒIÃÆâxðQŒžÈ~ŠJûðœ¢ø„¼µ]íúw+¿ÿò+~Ýö;ÆÏ˜7}"Ú;âߥØë„I3§JÓ+[lpßü€þóÚeë3Aº¼C×NX<ó«Z×[ËÖÖhÙÚ17%ã‡}aß¶Mµyùií2L™í#}Ý̰þïûå¸yõ>>¸š5åËz‰ùgÂóÓQXµé× ñ17o£¬B|ajn SsSéë&MŸÈ³¶ik›VÒdO>©sg`ûÁ¿afa&“¶<¾øií2™¶'oߨ”/Ç…÷”qðû}R’^´!ðû}º÷rÂÓÄ'Øë$M˶_ü·7i)iزäK…ePû­LÝí·™™!š™J_ó›(¾#’÷¦M]9ý?$]®ÛL{~ñǃëñpòèÍ:l¿«åŽ€òí¡1Ö±²}HS&Íq¤9N€…“ànL*BcgÊMklª cÓ·1Ž@M1NfF!V.:‡¹KúbÒl'éò.=›cÁ„Ãøß±‡úIÝÞYó—,ħƒF!$è¦Î™®¶´„å5¨§béê¡—­=Ä ƒØ¤È*,@wëÖÐá×í4¯hŸ ablŒˆ«W«]¯c»v˜3}Ÿ_2Ð;z4¦ŒWåä h½yn”¾ìÕEÊòåñxÒ}2lÖLf#CC™×lûÅ[Ñàóùè×»ú7µ_Yên¿òÔ”_e¿•­‹ÆX¾Ê¶ßwÙ±Ó›WŒ‰Þ]d–»õ³@Àí;ò§„д~½{ƒÇãáVl¬ZÓB4GÛH½Z3xû ÅYE0íÞZ:u;wzåãÛXŸ 021ƵˆêCm;¶ÃÔ9>xšøi2ïYµlŽ{wî!hûîj…Çü‡ÜìLü\ön_7hkãÖõÚÅ-,ÑÝ¥‡Â?3«ªãJeìÚƒfMñé´ñ2Ë}æÍ€AS„:'³\Ùr`ƒW>-^¥ñÃXŸ 046R©ÞØj¢#;~(¿Ú=éyíÆgv 7'?¬ùYf|ĕƪ•aùs <ÇzÁ{ÊØ*'g€·ñ…¾l|¡ì¾)*ߊñESCÙøÂÐH6¾`Û/n߸>Ÿç~ÕϨýÊRwûe£¼M7Ñ—ÍC[gÉÝÛ/ÒÔöY5•™²ÇeÛCc¬ceûлììÑäçcô¤Î2Ëû¸µ†@ÀCÜ­ªw ×…^ýzÇã!îÖµ¦%„(¯ÁÜAϳ^#úùSt·¶ž¶6¢ž?E؃»èÜÂŽæ–õ–/;{<{ñBfy‘Pˆý‡aOðAÜKx€¼ü|äqR•õí;wÀápÐsà‡ Q$B(”ü+‰ª}vC}ˆ‡ƒ}•ýÐÖÖ†ƒ½=%Ê,W¶Ø(œ”–Éž¬ÐÒÒ‚£}•êMUåÓÚˆÅâRÊuû6Ú:8T™§ü®€2±jƒx-žä+ º=åuSy€¨hß”-_§t¶_ ò%Ç¡ÄeîfØôïv,ýò;|;Û›Öü…ùK¾Ä¸é«?ânKÆQC{B±°¢¢7ÿJÆQ¢‘æw˜…{±ñ°s°«²mmØ:Øáq‚ìøLÙr`C:þ-­:~°w´W©ÞTU>¥ŒX\ev ¥ÄFÅÀ¾­C•©iùÙ*¿k¡ºø‚«à³훲åËe_°í&¢Eë–5¶+j¿ÕSµý²Á}ˆËdÇÚ:’ Œ yPµÌ”m±Ž•íCﲄ¸t€Lò؃’â2 %1N±°¥"1Jë)Æá hnÝÏkŽ[ؤ%„(¯Áœ ÉáúÓÇèmk–†’ùß·ï„kOóò9 utanдÞò'*¡­ôuAa!†õ†HTŠï¾ú ;tDYYNÿïæ-^„윙õ-Ì̱Ï?ß,ø+Öý†Y_-Ä_Û¶bÇŸ¡w·s~òù|p8ìøúúðù’h jw7Qrj*žUs¼µ5¬ÌÙ_å–•“-ó\ˆŠ|´²·Á+[lTw7IqI1ìmm¤¯ÙÖ[}Kxô¦&&U–sßLÉ¡ê4åW¯UÈ”ŸÄ35ÿHϦ|¹\®Ò?ü³í†ÍšáuLͽ¥ö«YêÊoåï_@ùºhŒå«lû}—ñù\pÀÁ¶ß?†žž>|>|>~ý _2^¿F¿Þ}Ôž–¢~%¹ÅH»þ½[A¯¥äjzëÁm‘zí9^Ç$CÛ° tÌëoþt‘H›6oo……˜<|D"¾øn!Úw²2œ?ý?|?ïäfˇÌ,̰ußNÌûfþX±ßÌúþmÇo;þ€Sï·ÓC–£¶í÷‡ždÅ ð%ÿj×.¾HKNEò³$…ï·°iY«»h²³²¡§àÙ]’üÊŽÏ”-6¸ÕŠKÐÚ¾öõVßÁØT^|!ù1»ò¾l•Çâêâ‹ò4JÄlÊ·6ñ…²ý¢™a3ľÎR°µ·¨ý6å' .6“G]eVù(ßc+Û‡ÞeZ|.8Vo=}´ÞÄ6|>|¯^ž?S.3ãµÒw7±IKQNƒ9Aó"+ ày³·ãq¹ènmƒ¤ì,¤æåÔÛ š"¡ ác!Òe»öü‹‹W® ãÑc™‡;Û¾y–KqI±ÜmuïÚ‡þ »wá9a<>¤»÷¥?·wtDii)RÒRѵS'µíC|Ÿ8®ðýqž£ju‚ÆÑ¾ .^¹Œââb™‡´‹Åb†Q0Å™ªS(q‚FKù«éØ”/ÇSú ¶ý¢­ƒ‚ArJ š[*¾ûŽÚ¯fÕö{²"yß¿ÕT±|•m¿ï2;”–‰‘–Q·vê»kIU‰Ož ¿ íÕš–¢ù/²Á0 t›¿!8<̺·@AR Sóëí°HˆÇ ‰pÿøíñmÿ®½ˆ¼xñe¬ÜÊöÍq¨Xþô»wÿ¡pïÎ]Lóœˆ c/}@´C{É8*-% n]Õ_<ŠO@h°âç$ çY«4öŽmyñ JŠ‹e~Ì‹Åxúè †!w½šÊ·'+dǪùyùxt?žªÕ[ùø¡X(d7U5oÙâ«ÆÕýàˆ֛)ÎÊÊÿ(Îc_°)_6wè³íömÛàxðQ¤&§À¢¹âñµß†£¼U¾ƒFUµý®®HÞ1 ¢šÚCc¬ceûлÌÖÁe¥b¼N+„cdžãdfeaÖ4kJ(*‡Šž¼xŽ˜»ñxZi*¢rÒé¾* ¼†Á’_ü ¯¯¹Î\›zkck=Ví¾ÔFMûÖ§§3RÓÓ°ïPˆÌòò+ÃT‚€ÍgÊ\Ʀ|y\žÒW¸±íŸŽò yÆLu¨ýª¦¦}Sõ{ÿý+¢ºhŒå«lû}— h€‡ùßœ@äMÍÏQ®¬M;w@KK ÆÔü0m6i !šÁysÇqIŽì÷wY±dÜÃׯÛç\VôçÊuh¢Ó>óÞ‡îDË?½z)9ÕôCYûÎðáAÈËÍ“¹"z°ç´µ1ÒlD^T_|Ñ×½?ü¶ýŸÂ?çkwáÀa!?/eƒÿÙìÌ,Lž5UÁšŠÊ¡¢—O^à~Ì]$=U0>“3Ã0Xµdôôõ1u®jõfÓF2~=_í¾ÔFMûæÔ§'ÒSÓqdß!™åŒ4¾PíÇl-%¦8+/_eîl`S¾<Wé»%Øö ÏOGvmö¯6µ_ÕÔ´ol”Oq¦ÊTfò¨ú] È?È£¨=4Æ:V¶½Ë\=$1ÎóN!:Rñ¨um×&hiiÁkÂ'jMKQžFï ))-ErN¶ôuq© <}-yŸÇC CÉ|k#ääæ@[['BÏ &.ûüdžÁ¶ÞÀ­_?ØÛÚbÉ/~¿t }abl ƒ¤WÖ×VMûæ;o>¶ïÞ…ióæâVl,Ú;¶Etl ö û\Ä'O’–*}]"*AVv6._‹”.s°³‡¹™î?LÀëÌLäæåž¾x.M§§«‡nß>´N™iÐʱ)_«tȶ_téØÃ{`ãŽíørÖl˜™ÊŸS—Ú¯fÛomò«Ì÷/ |]4ÆòU¶ýjÊëÌB<{) ³s…(•!:ö•ô}ëÍ`f¢ xú<éÒ÷JDeÈÉâFôۀöµLMt‘’šI’íÞKH<~š)Mka®VåSµh†íë=±`ÉIŒž¼-›7…KïV°0Óƒ‰±.<‡¶ƒ…û+JU‘ôê¶ïÞ…ñŸŒM«VjKKa§¬¤ …ɹo_—‚a€¼§’iS¸|ôZHî˜Ñ·6Döƒt¤\~ Ãvæàë Ê/Aöƒ4hêÀ •¡ÜÏЄwüƒäI046Âå°\‹¸Š­ûýe¦šêÚ£öü‹i#'aúŸ£ /a§Î!>Fr*©t•ó®Íþàii!íU*¢"oàì±3˜4s*¬Z¾=ZÛ´ÂöX0u.Fø-[[Ãe`XXYÀÄÌžc½`aeQ7¡„I3§b¯–/þáÔ»âcâ°k“?þè‹NÈŽÏ”-‡ŠÂŽ„âñ½GèìÜ ŸÌ[åýògØîGnN.´µ8wâ,îÆÄa˾2Ïk`[oÐ×Í6ö¶Xµd®†_F¾Î021‚›Ç@éUíµUÓ¾Íö‡ íÿàËiówëÚ;"6:‡÷H.«8ÅÙÓÄ'HOyû õ’r²²qãò5é2[{˜š›âÑý‡Èz‰¼\I|ñòési:]=]tìV»ø‚MùJžA£\|Á¶_´ïÒ Œ¿7îÄg_΂‰™üñµ_Ͷߔ'ÉÈN};pi‰ùÙù¸']feßÍÌ ÁÕRþBC6jSfÊåÛCc¬ceû¦d½.BÒ3I,’›#„¨¤ qÑ)Ò÷›[7…±™$Æyù4¯ÓÞ^<.*)Cn¶1ד¥Ë¬í alª‹´WùxõB2.ytOò[ç³Ä,iZSK=´hÕLú«w ÇÏ ÎàóQ`Õ²)zö³†©…ŒLt0xd[˜ZÔmŒ“’ô AÛwcÔøÑ°¶©>na“–ÂŽFOÐ”ãÆ³ÇU–—/3Õ×—ž Ñ×ÖÆ‡Žp÷Uî§$CTV=í&°11ƒ£¹%x\ÍßìciaÏ¡Cq#úÖnÜÛV­Ñǹ'â®DºE ™´³}¦#5=A˜ñÅ|tïÚ^ÃG`ýªÿCËŽíe®´‹ÅX°ä[é33 ›5ÇýûãÐ?A5|x•|xŠÄèÛØŒðK—ð(W¯"5- î~Ø NÐhii!âäiü°bN†žÅþÇнkWïú#‡ “I˶ÊKÊRÑówÊ€º}±ññhÛ¦ z÷艽;ÐÂÊJ&-›z+gld„ðc'°Ù'N„žÁ†íÛ‘›—‹ûªüwMûfdhˆëçÂðÅ·ß`gà?075Ãü½q3FN/seÚÚ°õï™õ¯EÝD¿¡oooوь¥+W"øèéò]{ö`מ=€û÷GØ‘cÒ÷Êï²Q&ØaS¾l¦ Ø÷‹ß–-ƒó ðö™Šs‡HÁЍýj¶ý²É/›ï_6uÑXËW™ö«)¡çáûã™e#Æþ+ýÿ¦ß†ÃkD{ÀÖ¿oàŸ}12i£c_aäĽÒ×;ÿ‰aîøïä},û5\&í_Û®á¯m’o}Ⴏ羽Úzð@{Džý‡OÜÃÕë/ðøi®Ý|‰Œ×…píÛºNOЋ…ðš4zzzXµô'µ¥%„°WZP‚´U¯¬._ÖÄTOz‚†¯/@‹í‘y7Ù÷Ó •AKOc:š‚ÃÓ||aniŽÁžCs㶬݄V¶­àÔ§'ÎÇ]FskÙãÛ”Ù>ÈHMÇÞ€á;c:wï‚¡^#ðËú•èÞ²“Ìtšb±K|¾@r,ljØ .öƒÿ¡0dÔ°ÊÙÀ`Ï!ˆLŒÂ὇p5ü'$âZÄUd¤¦ÃÕÝ­A ÑÒÒÂ'±ú‡øßɳ8ºÿ0:wï‚Á»à1r¨LZ¶åP®¸HR–Šž¿S>ÝWlT îÅÞ…}Û6èÞ»¶ìÝ˲ã6õVÎÐØ!áG±k³?Î8‹€ Û‘—›‡ÀûUþ»¦}kfdˆ“×ÏâÇ/–àß057…ûüñ÷FL9Q&¾ØºvþÙú·ÌúÑ×¢0²ß۲ݲÃFÀ¯KWáxðQéòý»öbÿ.ÉxÀåÃ~8ö6öài)_°)_¶ñÛ~±ô·_0Ìù#ÌôžŽýç)Œ/¨ýÖ^Mûvô¯õ?&³ìáÍ{øqð—Ò׋ƒüÐ˳ÿÛ™ Tœu¢26eÆæÀ¦=4Ö:V¦iÊ…3‰XþõY™eS‡½YVnŠ!£Û·D!xw¬LÚ¸èL÷Ü/}ý›ÿÇ8¼ Bÿ{€õ¿\”Iðçuüy0{q|îûöy-<ìqôÚtœ>üQ—_àÙã,ܺ–„×é…è5 už )cº×dèêéâ»UKÕ––ÂçÍŸ ???N||<'==“——DZ³³ã¤§§s¯  €+‹ùººº|‘H$ЄËåê1 cÀ0ŒÑ… $#¯Ägu¼+*2®»+èˆzÅß¿N}{cíòð7¿¾³Cà£Gà=m*fûLÇ–u¿×wvä¢ö«Y¹|Cû}ˆÅbL™3û¹ÃG0ÀÅE-i !ìE¥Ôœ¨±BÙ_ž°ó þ>>ì䂟Ö.ÃlßyõÒ€>Š™Þ>˜2Û«·¬­ïìÈõ®¶ß+y·ë; èkЭ¾³ q×qcèCï±XŒSæâèþÃØîú ¨>ÆQ6-!ŒkµÞ€Fr8œ,‡“'«âù³ IDAT‹ ù|~Iaa¡ˆËåŠôôôÄ%%%efffâÇ3Œ™™Ó±cGÆÏϯÊÜ›uwºšBêØÏ‘ðûv üÖ¬†°XˆüU§W颊êÚïÑS÷1ûëã5nãï£P\RªtZAmTÎw]Òt9‹…˜8ós>~[Öý^í 6i !„Ò8ã _¿o±Îo Š…Bü¶ãŠ/¹Ë!áXï³¼Ætßî]†¾ãÆ šÆ¬º>zä¾›u²Æm¬Û剒âR¥Óº ±W9ßuIÓåP,,Ƽ‰3qêð ¬Þ²¶Ú.lÒBjF„wÚÏß.¾¾>ÿ´)©i8¸k7ôõêv^WBjKQûíùA ìøÓ³Æõ»u¶„XÌ(¶±Ñd9dfeÁsÂx\‹º‰Ý›·`òØq ×a“–B!›ïÏß@O_ËÿŒ´”4l?ø7ôô)¾h¬ÚõîˆE?טξ{»:ÈÍûAQêêÜ¿îQãú»Y@Ì@é´&Ë!;3 S='âÖµ(ü¹{3ÆLþTá:lÒBTC'h!ï<ßyóajl‚ÿN·žgEˆ:Ék¿V–ni ô6ؤmL4Y\.º::8„CÔ––B!ßlßy065ÁéÿNP|ÑÈ™´0ƒI š’²®ÉëCVú°á ô6ؤmL4Y\.:º:ð?üÜGx¨--!D5{¨T½bÓ4¾¯¾³@!„BQ€â B!„BH}S÷3hèRB!„B!„B!„:F'h!„B!„B!„Bê !„B!„B!„B©ct‚†B!„B!„B!¤ŽÑ B¡¬¬,}ZßÙ!rÔU¿xúô)8|}}Õº]Mö7Eí7** Û¶mÓÈç6FLYDYYå䨼­œ˜œµ³“ùK Qzýâ”<\³ÑÓ¦!¢o_äݽ«R~jÚ·ÔÔTLŸ>...xøðaµÛb“–BHÃGñEÝ£ø¢á£øB1Š/”GñÅ„†©NOÐ\¼Žððó ßg'âüù0?vçÃþ‡ÄGê0‡¤¢5kÖ€ÃáàÁƒõÀÐа¾³¡Vµ)߇ÂÅÅ©©© ƒM•4wïÞÅÆñÕW_aÕªU Uc®ICêÅÅÅ]]]µnWSýM™öKÞÊ»wáNN¸4`€ÊÛjÖ¥ Ü¢¢ÐûÄ 8|ó «u_þû/. ˆ(ËÏGÓnÝÀÕÖV)?5í›……Ο?¡Pˆþýû#&&Fá¶Ø¤%„¼{(¾h\Ò8Šâ Š/ê_Cê_¼Û(¾ ø‚Ò0iüP(Dff&^¾| ¡PXmÚ[Ñш»sæfæèÜ¥ ôôõqçN,bcéËð}&‹áêêúÞ_á–™™ p8\½z½zõª’&::7n„¶¶6¼¼¼`aaìÛ·¯rL4M à£>BûöíÕ¶MMõ7eÚ/‘ÅáñM¬¬Ô°1øFF0hßM»tQzµü„]æj¡Ú”ïúõëŠÀÀ@tìØQn>¯_¿ŽÂÂBxxxÈ,:t(†Á•+Wä®§ LJ»»;ŒŒŒÐ®];øúú¢¨¨HnZêÊ «Ò/8æÌ™£peêBÓýM™ö[.77‹/–Ö›——W•‡3²©·rêîóuÕ¢k 2Šž?GÜ¢E¸2x0Â:uB䈸³p!Š^¾¬Õç–dd ;* ÙQQȹ}<==䯯J—>y"M{mäH\3Fîv¢}|¾§ì¾@‡ˆ+W®`ÕªUjKKi¼(¾P~»l½Ëã(Š/dQ|¡¼w¹_P|!Añ…,Š/j—–BjKãwÐèèè(•®°¨Pî™h===p¹\ä¨;krÁÇǽzõ˜1c`aaââb˜˜˜HÓèèè`È!صk^½z« ·P–––âèÑ£;v,´´´Xm—-‘H„¼¼sèÐ!æöí¹ë©ë¯\Û¶m'''¦&7oÞd0ÿ÷ÿ'³üìÙ³ &""Bf¹²Ûe#,,ŒÀÈ,ß¾};€YµjUµëÇÅÅ1­Zµbìíí徿zõjsÿþ}…Ûg0[¶l‘Y¾jÕ*süøq%÷¦z–––Ì!Cä¾Ä`‚‚‚”ʃ²u‘ššÊ3ëÖ­“Y~òäI¹ŸÇ0’2ÀôêÕ‹Ù½{7“’’¢pûÊ”/Ã0L@@€ ¯6Ýo¿ý&“×ôôtÆßߟ™3g³`ÁfÅŠÕ®¯ÑÑÑ ÇcvîÜ)³|ݺu fÛ¶m2Ë©_¨F(2˜Ù³gWym]T¤Îþ¦lû-ÿNÝ´i“Ìò;v¨\ošìóšTøü9jkËgdÈÿÅ &¬sgæÑï¿Ë,uìjkËdݸ!w½×—/3¡¶¶LRppy¸5cîì¬ðý»?üÀ\èÕKòB,f2##q©ä˜zÅù·t©ü¼×°oòüïÿc0›7oVkZBHãAñÅ_P|QŽâ Š/£ø¢*Š/dQ|A©-WWWÏôwssëæêêêàêêj=hÐ ‹>}ú»¸¸ ×"¯âåËxõ*÷îÞÅù°ÿ¡´´´Îæ‡nÙ²%îܹƒíÛ·ËÌm]™““zôè0 #]kkk¸¸¸Ôj»l”_Âápd–ûøøÀØØծ߱cGÌ™3‰‰‰HKKS)/•¯d,¿Âäùóç*mWåWV¾ŠAQ”­‹ ;;Ÿþ¹ÌrhkkãúõëUÖ)¿JsìØ±˜2e ,,,ØïP%7nÜŸÏG¿~ýªM—““äææbïÞ½øùçŸQ\\Œ¥K—ÂÑѱƇèªÃæÍ›Ñ¬Y3L›6Mfù¼yóдiSœ:uJf9õ Ía[ÊbÛß”m¿å*^ HêÍÄÄD¥zÓdŸ×$kk¸?~ ‚+>“öí¶óç×i¾*Ò67Gi^ '&7ÇGæåË€Òü|ÌK_Ó¾ÉÓ¯_?ðx<ܺuK­i !ï.Š/Ø£q”Å_HP¿ øâ-Š/4‡â BÈû¨Áœ iÒ¤ úõw…žžbcbp'6"‘mÛInO444¬“|üûï¿ðòòÂìÙ³áèèˆ;v(<àΚ5 =Â… HTwøðaŒ7®ÊàÍv•U>Ш<µ––ñìÙ3™åEEEصk kkkâǹóÛª¢|p%‹Õº]yÊË¡ry*ʃ²uqûömp8ôìÙ666°°°@³fÍФI˶|pY¹NTñðáC´nݺÊÀ²2mmm$&&â‡~À«W¯°hÑ"Ì™3VVV(,,¬“> ‡*yÕÖÖ†ƒƒd–S¿Ð¶u¡,¶ýMÙö[Ýç988¨Tošìóõ)7>º¶¶ ®YñÇ=MÑ67GYQ˜ÒR¤ž:mKK¤ž8@@i«ñÁÁÖÖÖHLLTkZBÈ»‹â öh%Añ…ÅÔ/$(¾x‹â Í¡ø‚ò>j0'h Y³fèÓׯÀ`!èÔ¹3^<KK+4mÖ¬Nò`aa}ûöáæÍ›èÚµ+fÍš…nݺ!22²JÚñãÇ£iӦعs'àÒ¥KHMMÅ„ TÚ®²  ¸¸öööÒ×:t(vìØ àÒ¥KˆŽŽÆ_ýÈÎήu>ê[yТì TÙºàóùàp8Ø¿?ÂÂÂ…‡"-- ظq£Â¼¨ëj-@òã2444„P(Äܹsñõ×_ÃÖÖVú^^^^­æ$f+++Ká S T â¨_hÛºPÛþ¦lû­ŽH$B›6m¤¯ÙÖ›&û|}*ÍÎFi~¾âu@½¹ŠW”›‹´Ó§ÑaÕ*¤…†B,¡¬ @­ddd yóæjOKywQ|Á£$(¾x›Žâ êå(¾x‹â Í¡ø‚ò>jP'h*b1·o#77:v¬óÏïÞ½;:„˜˜äççÃÃÃù•Tzzz˜YOœF,Fìüùȉ‰AYQòâã‘züxå¡<€JÚ·Æ,‡GÒþý2ï«Ã¦M› ¥¥%÷*rUÒBÞ_HÐ8J9_HP|!AýB‚â Å(¾PŠ/!ï#-Mn¼¤¤))¯¤¯‹‹‹Á0 ž?—ÌõÉçóaeõööÀÒÒRܾ¤¤$èëëÃ¥_i2‹UlÞ¼ZZZxõê"##qìØ1Ìœ9-[¶¬’¾sçÎpqqÁwß}‡‚‚Œ7N-Û€#GŽàÞ½{pvvÆŒ3ª¼_> DNN´µµqâÄ ÄÄÄ`ß¾}0¯pàêÑ£0räH|ñÅÈËËéS§@þ!nnn°··Ç’%K޾}ûÂÄÄ2··×FMû–˜˜ˆ””éë’’deeáò›‡Ã€ƒƒÌÍÍY_q£l]ØØØàÀ˜:u* €Ö­[càÀ°²²‚™™ÆŽ +++Àýû÷ñúõkäææž>}*Í«žžžÜ«•-ß.]º`øðáØ¸q#¾üòK˜™™ÉÝ/ ¸ººâüùó …pppÀÇqýúu̘1Czõ]eß}÷Nž< ,\¸P©2TdæÌ™ð÷÷ÇâÅ‹‘€Þ½{#&&›6mÂ?þˆ>ø@&=õ vûÆ›ºÐdS¶ý–Û±c^¼xccc„……!""û÷ï‡i…+¥ØÖ›&ú|EêìCl4ûàtX¹÷—-Ãu//ßÐÍÞ|ß*L;Rœ’‚¢¤$@þýû€Â'O@èèX[J23Qôæa¬¢œ0"rnß–nK§eKé•k|px}ú ..ÖoöåØÔ›¦ú|EêìClµ7#F ïÞ=ðtt ïà€çÿŒðp4©0?rÊñãHXµJfÝ'›7ãÉ›+í.„Ý‚€ôsçpwÉ™´×G–þ¿óÀÒÓ$A’™š4oŽ&oÊFÏÎ: 8=5LÛ  áåå===¬ª´ª¤%„4N_¨¶Ý÷yEñÅмÏý¢2Š/(¾ ø¢öi !¤¶8oþdøùùqâãã9éé霼¼<Ž'==+x\±XÌ×ÕÕå‹D"€&\.Wa†aŒ.\¸pD¥ê{ˆa]àkÕþKþÒ¥Kèß¿?<ˆ1cƨ1WÕ‹G§N°víZøúúÖÙç’ú oooÌž=[¶lQÛv£¢¢Ð£G|þùçØ¾}»Ú¶[_Þ§~ñèÑ#888`ûöíøüóÏë;;ÕÒTûmZº9~„‹‹ RSS¹éòîÝC¸“.  òg6ëÒnQQè}â¾ù†Õº/ÿý—Ä‹À@”åç£i·nàjk«”ŸšöÍÂÂçÏŸ‡P(Dÿþý£ÒçBÈûŒâ ù(¾h\(¾hœ(¾ øBŠ/!„¨JK“g­[Û@$*AqI 222’’‚ؘXôtv†¥¥¥Lúä¤$ܼyVÍ›£CÇNxý:ñqq(*,B—®]5™UÖ8LMMajjŠŒŒ ¥×‹‹‹Ã—_~‰yóæaÅŠÐÕÕÕ`.ë–X,†««ë{y¥TmÛCC(³†¢~µm“ldffÂÃÃW¯^…½½½âüðx€&VVª0‡¾‘øFFee)½Z~B,[ëÉ“aïë žŽŽêyrûÖ½{w\¹rîîî2d¢££a¥Ž² „÷ ÅUQ|ñn¢ø‚44_TEñ!„uÐè ---™ÀG,#99 ·¢£uƾWVV†Û·oÁÆÆVºŽ­­-øZ|<~œû6öÐÓÓ×dvëÄþýûQZZŠÕ«WC ÔwvÔŠËåâìÙ³õF¥!”YCÈi|Äb1ÆŒŒŒƒ'àhI7íÛ×EöäJ=~LYÚ|û-¸|¾Ú¶«ì¾ÙÙÙáØ±cèÝ»7ÆŒƒððpðÕ˜ByP|QŤ¢†Pf !¤ñ¡øâ-Š/!äýR§Ï æguP IDATár¹hÙÒ¶vv())A~~¾ô½—/_ ¤¤ŽŽ2ë8¶m xöôYåóñãǘ:u*:tè}}}|ðÁ˜8q¢Â¹Ok’ššŠË—/ãòå˸ví pãÆ é²„„·Ó,ôìÙSá•FC‡mpW!ùùùU™‡vèСrÓZZZbéÒ¥ðññ©©)&NœˆóçÏ£gÏž044Ä–-[¤i/\¸€¦M›âÌ™3X´hÚ·oŒ=ÉÉÉr·üøq¸»»ÃÈÈíÚµƒ¯¯/ŠŠŠdÒÌœ9S&¯¡¡¡‹Å8pà¦OŸ.S¾;wî‡ÃÁ’%KíÚµ“Y·¶·¶³)³r¹¹¹X¼x±´¼¼¼Tz Õ{lÊ;•{ýú5¾úê+ôìÙºººÒü3 #M³{÷np8\¸pAf]p8\ºt©VûV.&&^^^°²²‚ &OžŒ×¯_ËM»~ýz„††"00;v¬qÛ®äpSSQôü9â-•ÁƒÖ©"GŒÀ… Qôò%ûP’‘ì¨(dGE!çömðôô+]Vøä‰4íµ‘#q}̹ۉöñQøž²û:t@`` ®\¹‚U«VÕb!„TDñÅ4N¥ø¢²ÆRo_È¢ø‚ý¾_BÈ» NOД+?£¯]a^ÎŒô @§Ò-¡"‘ZZZÈÍÍ­“¼äc<““H$‰D0 G•ŸŸß€´¬éûlÙ²þþþ8~ü¸uÛk¯½<úè£6i·mÛooo8p`@YúzYnܸ?ü0BBBœ;¨qÒW}¶lÙ‚€€›zpå¾yÞ«GŽíOú:;;±{÷n›zs¤×šøÚx{zà fïÞ½èèèÀã?n³}Íš5ËåÈÍ͵Ù~æÌH¥R¤§§Û½¨(¬./‡, `Ðçë>þÄþøÇŽÀ‘Ãt­ÇYg~>ÎnÚÕÉ“Sw7dÁÁƒ¾n¤cLzz:$ òòòF_p"¢[ã‹á1¾¸ž¸9§:ƒñE/ƃc|16_‘=ƵF«ÕàB^"£¢ ¥w“ºA¥jÃ׿B—ZX–’¥ÒF£î./ßùóç1cÆŒ!×úÍÕê*aaaÐjµ0Ø·o"""°wï^£  &‰Db÷¼¡~<º¹¹aÆŒ¨ªº>gøÅ‹‘0 ÈËåHHH°™ƒ»>ƒå?UH$$$$ØÔƒ+÷ÅóæX=8rlçÎÃÌ™3¡T*ìŸ).\¸‘H„äädÄÄÄ $$>>>pww‡^¯‡Á`°I_RR‚èèèÇ7]……ðŒrqÍñøü•ìÓA0™Ðtàä¡¡húç?ôPò!(gÈd2DEE¡¬¬lÌò$"º1¾ã‹ëi›ówêX`|Áøb°´Œ/F‡ñÙÃm¼v¤ÕjqâøqøøøbѢŞ÷pwG·Ze)©¾áKJ¯×ÃÏßßåeT©TÃÎE=_àááázç£ýôÓOñÆoࡇŸÿüg¨Õj§¨úúúalÇÄĸ<8‹Å°X,v¥î¡^¯ÇôéÓ­···ÃËËkÐ|d2™Í\ä}ú~ˆ;Û#h20ˆwù~xÞz9RŽ[qq1Ý0>=ܤR)D"öìÙ¥R ™Lfó¸ñ\øúú¹¸§³L0 7çùxP×zL»ºÐü¯aö¯K?ù wí‚Y£Ó Z[[ê%HDD¶_؇ñE¯›ùwêXa|1¾_\Çøbl0¾ "ššÆeFÓÇC¡P`YJŠõ˾?¥Òf³y@/N‡îîîA`ŒµÄÄD”——£¤¤ÄåûJ_õÍ7ß 44k×®EXXöïß³Ùìô"ž………xçw†|åa Ê‘BCýxT«Õ(**¢E‹¬Ûf̘ÒÒÒ Z,”––bîܹòïÊnOyú†…÷ôôØUöñ ÓéP\\lS®ÂóÖË‘zpäØ"##QVV6àÍ`Áh_ýj4šÓ:bÖ¬Y0™LhllD\\"## ___xzzèÉ6sæL´··£¾¾Þ©ý Æsútèjj ­¬³<Õ ©Nž„,(YY£åë¯!˜Íá÷PYYº»»1ËÎ…?‰ˆÈã û1¾èu3ÿN Œ/_Œ”ÖŒ/z1¾ ""{¸¼F¥Ráè‘#ððGjÚò!‡¬FÇÄJnv\ZZ™L†ÈÈ(WO>ù$, î»ï>äææB«Õ"//ü±Ë÷ݧ¯—Ù[o½… 6è÷­·Þ²yÞQ«W¯Æë¯¿>ä#;;{l`‰ÄážRý° ‚€;vÀËË O=õ”uûÚµk¡V«ñÊ+¯ØäñÞ{ïA¥Rá‰'ž¿#CÙûz‘gúöÕ¿.#""gÏžµIÛ×3×ÙjݺuËåx衇pìØ±Óßwß}zçÂ+Q>ÁbÁÅÿùù0ëtP¢é‹/Æl#é  ê>þ!k×Bï¸u{öØ}:vìØ#GŽ -- X³fõ;ò~p¤Îú¼ù曨©©¿¿?:„ãÇcÏž=CöüÜ¿?®\¹‚¥K—â‡?üá€çyÞbí:žÍÞzp䨶oߎ7Þx>ú(òòò0kÖ,œ?~ø!Û hÉ’%ÀîÝ»a0ˆœœ9r€m°åÈ{2&&{÷îÅ#<‚ÌÌLDGGcåÊ• CPP6nÜhsófÞ¼y¸ãŽ;ðÊ+¯à™gž±ùlt–ÏÂ…˜ý«_¡è—¿DîÝw¤¾¾ð¹vneý¦¡Ñ76BWWè¾Ö;W[QŽsçô:Q½7Ý *tÕÕcg'£.XóòˆŒ´ö\“@$‘@•“ƒ¤—_„Üy'Ê~ÿ{ˆÄb‡éN]]Þxã lÚ´ 1×n‘}_0¾nß©Œ/zMµóæÆŒ/_QÑ;wŠ7lØ ÉÊÊr[¼x±tÆ ²¬¬,÷Ûn»M±|ùrejjªÿªU«B222¢222²²²dff®ÈÈÈX'\c0š„ââaïÞ½C>Nçæ £Éæq©°P8xð ðÙgŸ Gjkë¤qÅ£¿ÎÎNáØ±cÂÙ³gN'üæ7¿ÝÝÝÖ4/¿ü²`ÈÇ‹/¾hMûÖ[o ›öoû›Íþ#""„ÔÔT›m ,BCC…ÉæG?úѰÇ@øôÓOA„iÓ¦ ›6mAº»»BNNŽ ‚ðŸÿùŸk¾/^´¾^*• sæÌþýßÿ]¨­­´FøÿøaÆŒ‚-üãÿîÞ{ﲜÙÙÙCgMMð³ŸýL˜7ož"xxx‡²>ïÈûÁ‘:«­­Ö­['„…… r¹\HLL¶lÙ"TWW{^~ýë_ [·nÞÿýAŸçysœ#õàȱ ‚ TTTwÞy§àçç'Ìœ9Sؾ}»°ÿ~€ðå—_Ú¤=|ø°0þ|A¡PK—.víÚ%äåå „÷Þ{ϚΑ÷dŸ¶¶6á•W^î½÷^aùòåB||¼ T*…K—. H{ùòeÁËËKÈÌÌŒF£c•9 £Z-¨rs…΂ÁÜÓ#TüùÏÂÁØXÁ¤ÑXÓT¾ù¦p06vÈGÙþ`M[»gϰiöï·ÙÿÑÔTáô=÷Øl;uÇ‘¥KÇäøt:œœ, 555c’'Ñ­‚ñã‹[éw*ã‹^Sí¼9‚ñ…-ÆÎa|AD4þ222Öeff®ÈÊÊZ‘‘‘‘‘µjÕªÔÔTÿåË—+o»í6EVV–û† d‹/–fee¹mذA²sçN1i‹éû;wŠ E---"µZ-Š‹‹µ´´ˆe2™D£Ñˆ-‹ÔÓÓSj4eÜÅb±B¥ ~GÝFÓÔZQê6tº¬¬,´´´ °°pKtk+,,Äœ9sðòË/cûöí]²ÏÛ­eß¾}ذa~ô£áÏþ³KöqvÓ&T*¤}õ•KòO‹?ü0öìÙƒo¾ù™™™]$"¢)…ñ§NMwß}›7ožè"Ñ8b|Atk`|16_ŒŒñÑÍ… 47hll„N§Ãš5k0þ|lÚ´ Ó¦M›èbÑ‹ŒŒDddäD㦰}ûvâÿøÄbçfZZ`ééAÀŠPΚ…Ðuëà>†%b±žžžøì³ÏpçwNtqˆˆhœ1¾ º50¾;Œ/†Çø‚ˆèæÂ5h®nŽh"""""šXŒ/ˆˆˆˆˆh¢q """""""""""¢)Ž 4DDDDDDDDDDDD㌠4DDDDDDDDDDDD㌠4DDDDDDDDDDDD㌠4DDDDDDDDDDDD㌠4“̹sç ‰ðúë¯OtQny¹u¹½(²y¼›ÿîD‹ˆˆˆˆÈnŒ/&ÆDDDDt#7Wfn6›ñå?¿€L&ƒL&ƒ‡‡ÂÂéT:ìk=‹ ++Û•E¤›DêÛ©È©Íô¹9ÁsPðdÃy&G$£å¹Ô©ëð¯ÒaÇ7;F[L""""Æ4^_Ñxpi ˆŽŽÑh€Þ`@kk+q1ÿ"’—.Ehh¨MúžžhµZhµZôôô@&—»²xt“ñu÷Å®•»l÷÷ðw*?Dô D g Zµ­£-ã OŒ/ˆˆˆˆÈÕ\Ú@ãææ†yóç[ÿ¶X,¨¯¯CÞùó8î,ÖÞq§Mú¯~³Ùlý›9ÂKæ…mÉÛ&ºDDDDä"Œ/h<1¾ """"W×5hÄb1"#£ƒÁ€îîn›ç¿·ú6Üqç]Xÿƒ»áïï\¯$gFÄÄÄ`ãÆƒ>ÿÐCÁÛÛZ­Öf{~~>î¾ûn„……!&&›7oF[[›Mš­[·B$Y„ÅbÁÞ½{ñØc!--mÀþºººðÜsÏaÖ¬YÀÝwߺººAËöÅ_`õêÕðóóCbb"¶oßN7hÚÓ§Oãé§ŸFBBüýý¡P(°råÊAÓÚslSÿ/ñŒGú_ÓñÀ§àÓ+ŸÂ`6ŒIþ§ëNãéO#áO ðßíůXùîõÛ”»÷ܰ߆!æ÷1ØüÙf´é¦vý'ÆŒ/&ã """" —Ž JßüÐòz°yxxLDqô–);;ü1ºººàíím}N§Óaÿþýذa<==­Û÷íÛ‡‡~<ð^zé%TUUáørrrpéÒ%ëñ=ÿüóؼy3.^¼ˆÿøÇÈËËî]»püøqøûûcéÒ¥ÊóË_þ<ò¶oߎüü|üùÏÆ™3gPTT///kº—^z ¿üå/ñä“ObÓ¦M8uê~÷»ßáØ±cÈÉÉD"±¦ýàƒ°eË,[¶ ÷Þ{/BBB ×ë0`ÿö›#¾þúkìÛ·oÈçï¿ÿ~dg»vNpƒÙ€Ÿ¯ø9T:Z´-È­ËÅ}ŸÜ‡ìß´©‘©NçýÁŰeÿ,‹X†{gß‹Eôf=<©ßËûððgã¹à¥ì—PÕY…?äü9µ9¸ôÔ%È%ìÝIDDDd/ÆŒ/Ãø‚ñÑd7! 4-Í-ðööq!Ïñ¶yóf¼óÎ;øì³ÏðÈ#X·þùçèîîÆæÍ›­Ûš››ñÄO`×®]xöÙg­ÛÓÒÒ°víZìÛ·>ø &&111Ö^{Ÿ}öžzê)|òÉ' ´,»wïÆSO=eý{þüùxüñÇñ§?ý ?ûÙÏyyyxñÅñúë¯ã‡?ü!à±ÇìY³°}ûv¼ýöÛØºu«5]»vaþüù8qâİõàȱ9böìÙxøá‡‡|>..Îá<%—Èñlê³6Û [ ±öok±ùï›QúJÎ{×±]˜2'¡~5Íxâ‹'°kå.›²¤E¥aíßÖbßå}xp®ãõKDDDt«b|Áøb0Œ/_Mvã:Å44Ô£µµ³“æŒ÷®G”••…ÈÈH|øá‡6Û?úè#DEE!++˺mïÞ½èèèÀã?n“vÍš5ËåÈÍÍ_À¸qãF<üðÃCOlz¦À–-[€ãÇ[·½öÚkðññÁ£>j“vÛ¶mðööÆl¶GFF¢  o¼ñ†Í\Ü7ræØìåË—ù s*ß>µ]µ½(ð0 C+$%áÉ%O¢¬½ Íšf§÷鉂æ¼qîa÷¹·p/:z:ðøâêwúÈ%räÖ9W¿DDDD·"ÆŒ/_0¾ """šªÆuV«Á…¼,øWZ¯@­W£ÛÐ;_ùÕ¶«V;µÿ¿Ýó7>Þúw{{»Í|Ñý V†|üñÇøéOŠ]»vá‰'žÀÿøG¼ùæ›HIIÕ±Ù£¾¾Þ&¼QLL̨z¹yH=°~æúaÓhŒÜñ·;`´ñ³ôŸanÈ\˜-fü«ô_Øöå6tôt8½ÿE>¾÷cütùO±ëØ.<ñùøãé?âÍ»ÞDJd¿ú•\«ß { ”)!“Èlr7ÎMDDD4ÆŒ/_ôb|ADDD4uKFÓ“'NB¡P`YJ ÄâqŸYÍnIIIX¸p!>üðC<ýôÓøè£œœŒÄÄD›t³fÍ‚ÉdBcc#æÏŸoWÞ}S8@ét:ã®»î²n›1cŽ;½^oÔX,”––âßþíßÍkÑ¢EøûßÿŽ‚‚¬[·kÖ¬A]]5sæØìQXX8â"ž£†`$ï\xÇªŽ¡õ§­ð÷ð·nõ‹èMúQïcQØ"ü}ãßQÐ\€u­ÃšÖ îÙ:xÉ®Õoà,˜,&4v7bþô±«_"""¢[ã‹^Œ/_Œ/ˆˆˆˆ¦2—G2*• G€?RÓ–î>mÞ¼9998uê:4 w¬[·r¹=ôŽ;fW¾£™‚àW¿ú<<<°mÛ6ë¶µk×B­Vã•W^±IûÞ{ïA¥Rá‰'ž6ϹsçâöÛoGWW::®÷ìræØì±zõj¼þúëC>²³³Çl_C9ßp"‘hÀ´µ]µ€SϘíknð\Ü;ºô]6=çÖÍ\¹DއþþŽU]ýÝ _\Çø‚ñÀø‚ˆˆˆh*séš––äœúîîî@õ ÃϽ”J ¬Ïéõz‚€êêÞ×H¥R„……»²¸V<ðž{î9lÚ´ b±÷ßÿ€4111Ø»w/yädff"::+W®DXX‚‚‚°qãFko­¢¢"´µLðN[ IDATµ¡«« PYY‰“'O ,X0 ÿ7ß|555ð÷÷Ç¡C‡püøqìÙ³ÇZ_°uëV¼ýöÛxî¹çP\\Œ””äççãÕW_Å /¼€… ÚäùÚk¯A&“ÁÍÍ ÈÉÉÁ矎­[·"22Ò©c›j–„/Á_óþŠõ¯ÇÓKŸ†Ú Æ’ÈoÊèÍ×{¸Õ©ëPÙQ (h*·ãdMï¹ W†#Ö7Öšþµ3¯A&‘ÁM솆îäÔæàó«Ÿcëâ­ˆôîW¿¾1Ø»a/ùÇ#È|'Ñ>ÑX»aÊ0yaãœóššõKDDDäJŒ/_L6Œ/ˆˆˆˆh4D×6vîÜ)*,,µ´´ˆÔjµ(..NÔÒÒ"–ÉdF#¶X,ROOO©Ñh”p‹Å A”‚ ø=zt?MfTVTàÂ…¼!wƒ… :::päð¡!Ó`EFæ(whR7Ûžwk×®Åp×]wáÿ÷‡|J¥ÂG}„#GŽ ¡¡MMMhjj©S§””ذaÃCï³³³qèÐõ㮫«ÃSO=…3gÎ@¥R!66©©©xñÅ5àõZ­?ÿùÏñå—_¢©© ‹-Â3Ï<ƒõëmçJ¶X,6ó<ûúú";;ëׯÇ~ð§m²H};µ]µ¨ùIͰéxñÈ‹økÞ_Ñ©ïÄ¢°E¸;ñnÜ3ûDþO$^Yû ¶%÷ö"üí©ßâ?þçy½˜õ"þoæÿX d/]ŸçÙ×ÝÙ±ÙX?s=~8DýêTøèÒG8Ry ê4išÐÔÝ„Sÿ~ IA“«~‰ˆˆˆ&ã Æã‰ñ &33s½H$j‰Dj‹Å¢Ð#•J Z­Ö(‹ …Âb0ÌAAA–òòrA©T AAABRR’°sçNáÆü\Ú@3•Ü@ÑäÁø‚ˆˆˆˆˆ&ÚX7ÐLÞÕ4‰ˆˆˆˆˆˆˆˆˆˆˆnRl !"""""""""""gl !"""""""""""gn®Ê¸ªkj͹¬˜èÑЦV|¡›ZKæÑ¼å®Ë›#hˆˆˆˆˆˆˆˆˆˆˆˆÆhˆˆˆˆˆˆˆˆˆˆˆˆÆhˆˆˆˆˆˆˆˆˆˆˆˆÆhˆˆˆˆˆˆˆˆˆˆˆˆÆhˆˆˆ&€Ñh@c}íDƒˆÆ‰N«AÙÕËèPµY·u«»pµ0]X²É¡©¡==º‰.Ѹr›èLV5•e¨ª(EN oo_$Î]o¿Q§%šÊ&ÛuQQZ„âËH_y;^Ê1ɳ§G‡êò¨»:Ñ­îÄ¢¥éPúøŽIÞ“Ug» 9Ç¿µÙ6wa2£bF•ÖUe¸è{t8{ê8tÚnøøúÁÃS1!åpÅ5äJS­¼#&£R©l¢‹3æØ…—ËV¬ðÜh®ùáòŒTm-(+*„ª­‰R™ ¾þugj«ÊQYV …Ò1q3 ±øæêC5Ò{Ý ïÁ¥¼³J¥X’– O…×”’ˆˆˆˆˆhü±f…ùçÐX_ƒ˜¸ÉÝQUQ‚3ßEƪµÊdN§k&£ßøÇÏ/Ï^/¥·Ãi›ë‘—{rÈ´A!X’šád©¯;}ü,‚©ßôù¢KPU^2`»X,Æê;ïõþG2ÕëWÔT•£­¹ —¦:¿©r]ŒFMe®æ"”Þ>ðñ €X"™èb¹œŸ?²o_}­Í(¾\0&i]U†©N«éÆÙSÇ`6™œ–5hãÌÍÖAƒSwuàÔÑoà&•bÕ÷0lZAÐÒTÖ¦Ftt¨ ïÑaÆìyˆ˜Ä˜f³ nRé Ïæš.ßÉÄl6£à|.šëàŒ¹ “ 7·ë?¿Ã"§!8,Mõµ¨«©@aþY”—\ÁâeéP\ûÝp3é½.“»#yy&ÎåœÀ釱$u”Þ7wç""""""€ 44ÔV£®¦É©ð ãø·ÐP_ƒi1ÓJë b‰³æ.°½º¢FƒÁæ€#i= ̘=w@ZAPvõ2ärw§Ë¬ïÑA§ÓB§ÕB¯ïöf½Ñh„»‡bãm¶KÆé†ùT¬ß>í*\ºpšn5BÂ#a6›GUoSéºpV·ºE—. *6 ‰sÆí}6YÈdrÈdrô†1Mëª2LUFƒgO,[±’½Äoq"‘àáá9lºU òr¡ÕtC"qƒ»§'¼}üàîî1ÅtŠ ð ‚¯àiœ¹æíÉw²(8í*¤d|ÞÌĔH$ŠFxT4ÚZš‘—{ùçr–uÛ8–Öµìy¯{ûø!eÅJœùî(Î:ŽÔÌÕ»þ7ÑdÆšT–#.!Ñzc<^ðRz£³]ô»¹ìHZW‹Å˜oý[\¾x‹KÓ³áÞ/v$­—Ò^JŸûk¨«†ÅbALüL§Ë|üÛ0›ÍÖ¿‡k 1 ððô²)÷X,H¥2ˆ™Jd*Ö/Ð;•ÊùÓ' ôöÅòì5cÒû~*]Îj¬« ˜1kîM7µ M‚ ÿ\Œ=–­XÅÆ‚HÔûY3ÜHUk3Îæ‡æ,XbóÙ:™‰D¢1 :^ùºBks#B£†mœ¹Q@P0üƒÐÕÙîÂ’?{Þëàá©À¢eé8}ü[\8û–¦e úˆˆˆˆˆèfÁš~ÔèêlÇ‚äTë6“ɈnuÄb ú§ÒŽ³ÙŒüs9èÑj±,}å°=IÛ§otGHX$”Þ앾òûpssƒÄÍ ¹'Ã"X†Lk4]:…Ig‡ §OƲôì{âN•úUwuâ|Îq„FLCÒüÅÖ«£1™® £Á€²âËhWµB£î²iìPî®”]Fg{Äb1ü‚8gM£ Aß­¦ÐÑ®‚ÄÍ ]*ëóR™Ü©.U[ òNŸÀü%©hkiBKS z=üƒ0kîBÈoèõ~èÀ~He2ÈäîðððDHx‚BÂ4æŸCmU¹õï%©ð FSC-Z›¡Q«mÖd°7_W³ç\¸Š#uV_S‰‚¼3H^žÿ~7Ák«+Pxá,–¦gÃïÚgEC]5 óÏ!eÅJ47Ô£¹©Ýê.xzz!qÎ|ø(KUy ÚZš°pér딇7ª­êâ¨Ï‰Cÿ²y~°)ÏZšPU^‚Îärw…„!~ˆQ`Ž\CŽäë*c}Í÷élW¡¾¶ ­Í0 °XÌðñ @rZæ y÷è´h¨­†ZÝ F­¦{LF@õ}F+}ÿÜ·X,¸x>Þ>¾H^že×µkÏy;üÕ爊ŽEN‡æ¦z‡"rZ,®^¾­¦3fÍEÔµÆtG>ÏJ¯¢ìêe›ò‡bqÊ ‡ë¦?GòuæÚÔi5(½ZˆÎŽvôhµðôêíT8gTëC…†£éÚÈQ?»^£ÓjÐÞÖ‚¸³œÞïd4Ò{½?/¥7æ.Z†¼Ü“(/)Âô™³]]<"""""¢ Ú~êk«àÝo±ææÆ:^8ƒAðõ p*­« œÏ=±XŒ¥Ë³†mÔp$mõ5UÐt«1Iêȉ‡áîaÿt,&£Á¡ô®2•ê·äJ¼”>Hš·hLg€És]¨Z›qáì)xyy#4,–PÍuèêh‡ 6i›êkQ—‹°ˆiˆOœƒUå%èhoÃòì5Ö›œõµÕ½kÎôsúÄaëÿÃ#£1wÑR‡Ë*X,0™L¸xî4Â"¢3}Ô]¨©,Cg‡ éÙ·CrmÚ;‹Å‚¸³`4`ÐëÑÙ¡BãÙH¥2,\¶Ü¦Îâ uW®ä¡«³½÷æu[+¤R™Í @Gòu%{Ï…«8RgCé»–Ëõ÷™`±Àl2áìwÇà„Ðð(ô=¨®(Eޙ﬷d±˜QYzÁ¡ r_Á!X’š‰ÆºjÔVW`΂d›xî7LTV|eW/#*f:Â"¢ÐÑކʲb¨ÚZ²b•Íç€#×#ùºŠ+®y ÷sêRÞøø $<r¹;,3¤Rù€2‚€’+¨,+†H$‚¯?äîîðòö±É³²¬xÀgI³æ.t4¨õ¦õ£ Zš ïÑaö¼…v]+öž7“Ñ€ŠÒ«ˆŠG`P(j«¡Ój‰ªòbk€cŸgÓbâ“ٳɄüs9#–ÙŽäëèµÙX_‹Ky¹ð Bä´˜L&¨Z›ÑP[i1ÓGÕ@“41r»ÕÈË=‰´ìÛ “ |õg±XpáÌwð 0½ëT7Ò{ýFÁ¡á AUy ¢§Ï°™*¶¿¾Fx?¤¬X5få%"""""/l éG£é†÷µÀQߣÃÅs¹ˆKHDTÌt柃N§q*­+ zäž<“Á€E)éÃ68’¶?ÁbAYñèGw8Êh4¢¡¶ª6xûøÂÏ?ÓbÇuaà©T¿]hijÀìy‹P|¥-M 0™ŒðñõÇŒYs^lx2\FƒÏŸFhxfÏ[dÝ.‹¯Ý¬½>Ë ×£0ÿâç fú ëv_ÿ@œË9ަúZ„ENÄLŸaMsþô tu´#kÍ]N•±¿¾Q3“æ#bZŒu»ÒÛ…ùçPUQЏ„Dë1ô/'t«»p.ç8 ÎçbŪï[·{x*àá©°Þ\lj¨Ã´˜x,X’ Ù k9’¯«8r.\Å‘:е¦ßû¬oºž™IómŽÁM*CÉ•t´·!($̺½¡¶z}æ% ÓÕÃÞèêìÉåë0ä(®®Î”]½ŒÙó#rZ, bZ,^Þ¸Z˜ºê DFÇpìr$_WqÕ5åÅW ôñŲôìËqµ0Õ¥˜1{"‡ùþ  AÒ‚%Cæ3TƒèH7­»Õ]…×ȟߎœ7‘H„ð¨$&ÍGO uÕHLZ?è4ݨ­®PF{>Ïdr9dòëñØŒ¶r$_G®MVƒÂ g3}&⓬i½¼ÑÞÖ Ûf@ǹ¹I1oÑ2œ<üZ›=lú¶–&tuv`朣Üóäãh ÐÛÀ~滣h¨­²6E,â4hDDDDD45±¦½N åµµAj«+à&•"6!"‘¨wj~=vIë¨U«uÚ¥þäîž²šÃl2ÁËK‰®Îœ:ú ärwDÅÆ#&.ÁÚ£Õ™´ýÕVW@§Õ`áÒåN“3’Ó2¡ÕtC«é†ªµ%E…(¹ZˆÙóx“c(}ÓÙ€¦[}m[tZ-€Þ5qƒC­é§RýöMÍUzµQ1ˆOL‚ÅbAÙÕËÈ=yiÙ·Anç éþ&ÃuQUQ“ш³çÙlldCc} L&ã€ÈA!‹ÅèìP¹¼QÀ:ºà†AÓbQ|¹ím-À07ê½”Þ˜3ÅW `ÐëmnLöÏ?,< áQö_ #å;Ö&ùèãl€} 4×ßg}ùÝxm÷݈ïÑim¶wv¨ ‹­S¤…šÊR¸¹Ic³}Zl<Ê®^FKS£µî¹†É×U\yÍ»»{ ]ÕŠÚªrDL‹r4Ñ`@uE©MCîP”Þ>N5°{x*°f݆!Ÿ×^ûž²ç³Û‘óÖÿ˜¥74:¹Im§„íçÙxsäÚ¬­ª ¸d:1­¦]hª¯…_@ MƒíP^JH$n¸zé¦ÅÆÃǯ·vDDDDDD“hú1ÖÀÞ`ÐXŒ¸PïHZGÍY˜Œ9 “~»‡'âg&ÁKéƒü³§ÐT_;dOq{Ó¶µ4¡G§ÅÌz1O7©ñ‰Ihij°Þ¼sTÿÔ;T­8}â0–¥gÃ׎^퓽~A€Åb°½Bé wwëˆ!GM†ëB«évAy›ç×n´Í_’77)D"1ÄâÞ‡èÚ¿.7È”X},3<ú-,n6›p>ç,‚q ³àåíZšqåây˜Œ†A²¿vv˜út&ß±6)ÎE_Y쨳¡_Û÷Òþï³¾›àöåç&•ZGï£Á0äº b‘béõúuär$_Wqå5/“»cþâÄÆÏDyñ•ÞiºÊK‘´`±ÍTd}kgÙ£[ÝeÅ8_§¦™ì뤠ÓjFüÎsä¼õŽ ³óZpàól2päÚ4 0äpî;ËÇ×s-E‡ª MõµøîÈ×X¶båˆkЂ€êÊ2ètZÄ%$ÂÛ×LGÝMEƒþ–¯"""""º¹±¦¹» úÞ2îîhok ƒöÆt$íxótàfÉHik«+ •Ê1Úb‰¶–f°kaoW™¬õë©ð‚ÅbN«°_£É·×d¸.äîÖµúlm…—‚ @ßÓe°ýsÝ¥Á¦Ä“ÉM·Aý‰¯«®„ª­+o_osCÚóÚÂÔƒ2é[ca¸út&ß±6ÎE{ê¬ïFtß(£ë›AcG~ý(¼”hª¯…¾G7 uˆÂè½>\žím-°X,6‚ @«éFH¿ÏG¯!{óu•ñ¸æ½}ü° 9 ê®NäåžÄ¹SÇ‘uÛÖ©±¼®­ûÒÙ®qMks#®æùü¬¹ j Qúøêk«FEáÈy92‚ÆÏ³ÉÀ‘kSá¥DCm5´šn‡¾ÛGâ&•"<2á‘Ñ ę½­uÄk§¹±UeÅX±êûcZž©J«é†Ùd‚Béx‡"""""¢©‚+jöãîá½¾³ÙŒâ˨­*Gks£M°ïHÚñb±XÐÒÔ€ü³§ “Ë2ôÍ{Ò z47Ö#,"j\{º¦£½ —óÏ¡øòEDÅLŸ“½~ýƒ!‰PYVl³½©¡f“ ~ÁC¼rx“áºðõ€A߃†ºêAŸïŸoph8Äb1 Îçö®0†j*¹|‰¦ÅÄ[·uuv@$ ˜–¨oÚ ó 7èûzˆWŸÎä;Ö&ùècO¹_k8éêh·Ùn2š®½öz£ÀõslßþCãՕev¥ïûŒkmn2M`HL&ª+Jm¶××VÁh4 ²ß¢ÚŽ\CŽäë*ãyÍ+½} “Éc¿Ñ ¥7äî(/¹‚UÛ091Óg`ͺ C>¦ÅÆûú¡øÁÇÏ µÕ(»zyØ÷¯#筷ƾ28òy68rmFÅL‡ ¸pö:ÛU0›Íèêì@C]͘•§µ¹r¹;üƒFLëíã ‰D‚«…Çôwdg» Íõèlz”—«Ó:£º² "‘aC¯UÖÑÞÖ[†aF°MfAÓ‡‡Ý]zoøDÇ% ®º>~þˆŠ‰ƒ¦»Û©´®¢×÷ ¢¤úžôôhÑÕыŠo_?,IͰ™JÑ´}êkª X,ˆ˜kWyН µ©Ób—0ày£Á€–¦zë߃‚  þÚz;nR)‚C{{—ê{t¸zù"´šnhºÕ0ÉÝ1cÖ\ÄŽÑbÄnR)üƒ†œ×ªÕ¯—Ò‘Ñq¨©,ƒÉdD`P(45ªÊŠ9mÀúEöš ×EÌô¨­,Ç¥¼3Pwv@áå®Îv4ÔöÞ¼í#ËÃSùKRQ—‹Ü“Gàáá ÿ `ÈåÉå ²®“c0è¡ÓhF£‹ÅæF“‡§'dv,Î}£¾„õµU0KÄhij€º³󗤨¬ýâãë‡ºê œÏ=‰èØx˜L&´67@}­ûtÑt«a4èaº6ÂC§Õ CÕ HÜ ôñu*ßžz´½õЭ¯nkÞrwx\yãHZGÎ…#ù:‘:óöõƒT&CEi,‚2™ímPµöÞôl {ïr+½}†êŠRDÇ%Œ8Õ‘@<^(¹Ò»»¯_¤2ƒC­õ‡ºª \-̇¦[ _¿¨»:P]QЏ³àÝïØ¹†É·¿‘>£áªkè½é+‰!‹ ïéAçµ¼‘Ñqp÷¸>ºI,cÞ¢¥8Ÿ{§O‚¯_C •J!–HìÔ{ÒQ ’Óp>ç8J¯¢¶ªÁ!Éäp“ÊàhþÉ‘ó&‰ì~ï:òy¦ÕtÃp­‘èýœ1 Ök<JÈär‡®yGòuäÚôõ @ÒüÅ(ºt9Ç¿H¥2ë(Ý‘®Ó‘47Ö£²¬KÒ2!•=e_Oæ.\Š gO¡äJfŒÑô²%E—ÐÖÒ„°Èi˜ç·lBÒ:ª§G‡ÚÊr„ELö:+-*¼^†Ec["""""¢ñÀš~‚BÃpñÜit«»à¥ôFâœHœ³`Ôi]Ål2¡¾¦ žžp÷P &~Â"¢à¥¸Ø¼#iûÔVWÀKé o_?»Ê£P(QÑU„Žö6DcàÍ9Vƒ‚¼3¶÷móõ´6ИÍf¨Z›¡ðòFxd4|ý1¦#y¼”>HNËòù©V¿0{Þ"x*¼P_S…æ†zx*H˜5×éÞÛÀä¸.¤RR2VáJAj«* “ˆ9 “‘—{r@OãàÐpd¬Z‹†ºj¨ÚZ éîF{[+ ú…XoÖ67Ö£ðÚBÌ}únÒÀ¼EË9tÏÝ!]»AØÕÑuW' %|ýý1oqŠu”FŸ¨˜éÐë{PW]‰KÎÂÛ×Á¡˜9gŽü–~ëø”]BS}­õﺚJÔ]kàô FrZ¦Sù6ÖÕ ˜ž©¼ä ÊK®âg&aúÌÙ§ì?Žæk/GêÌÍMŠKÒPtéªÊJàåíàpÄÅ'⻣_Ú@ãH/÷™³çáÔño‘æ–¤eÝÔŸT&CrZj*KÑÒÔ€ªŽv˜MF(¼”Ö›•"‘KÓ³Qr¥­Íh¬¯±NÛ|ôSŽ\CŽäÛŸ=ŸQörÕ5/Š ò¬ëÓHݤð ÆÂ¥iÖïŸþüƒ‘ž};ªÊKÐÖÒ„Úª2˜Mf˜Í&,NY1. 4îîHÉøêª+ÑX_ƒ–¦ëT’ñ‰s¬ 47¦8sä󬲬57ŒëlWáô‰ÃÖ¿$§!$,¡kÞ‘|½6#£ãug'$ ¼¼½QU^‚ÖæF¸{:75hŸ’+—àÿ€‘GÏô DhDj*ËǬÆdê&‘Œü³ßUia±˜q!÷;HÜ$H˜5wø´×¾Ë$ɘ–ˆˆˆˆˆh¼ˆÐ7Ñ}?;wîŠZZZDjµZ'jiiËd2‰F£[,©§§§Ôh4ʸ‹Åb… JAüŽ=ºJ§ØLÁŠÞ™§Ž~‘X„%)+†í9ïHÚ[EWG;Nû‘ÑqHš¿x¢‹sÓ™¨úåuá¸nuNþ 3“æ#fúŒ‰.M"Mõµ¸pö¢b¦cö¼E]œ1Åï€ñ#X,À SºÂ­øyvæä z,Ï^3ª|Ž{&£)«ìnÌ3 8óÝQˆ%b¤¬X5ªýOE‚   /u5X’–éPã‘«x÷›`!33s½H$j‰Dj‹Å¢Ð#•J Z­Ö(‹ …Âb0ÌAAA–òòrA©T AAABRR’°sçν 9‚¦±XŒKRp6ç8Nú a‘Óz§¼‘Ja6™mzÒ;’öVѷƃ#BÈ1U¿¼.h2i¬«Aþ¹œÓ-\º|ØÑ%$<ñ3“Pzµ³I –ŒËMöñÀï€ñ#šàuánVÝê.T–^…ª­ó§Œ:¿YsâÂÙSøîÈ׈˜ƒˆ¨›im÷݉úÚjÔUWB*•bѲå£ÞÿTc±˜qñÜi45Ôaö¼Ålœ!""""¢[hn Pz#-s5ª+JÑÔX‡ºêÊÞµ¤²7—I{+èPµA&—#,2z¢‹rSšÈúåuA“…¯ $§Ž˜n27•1× IDATLŸ977\-̇^߃KR!q›ú_Çü ©¨º¢õ5UÐjºa4 ‹13i>Â"¢Fw`p(Ò³× ¢¤5•å¨*/ÒÇ ‰shj¨CÙÕB¨»:!•Ê›ˆè¸„1Òu*0 8Ÿ{ím˜»h)Âù9BDDDDD·ˆ©GȤ2¦Ïœm×zޤ½™™Í&T–cÞ¢eœÜ&Cýòº ÉÀÝÃî‘]ŒQ‹™>2™ M õÖ5>¦²ÉðEä ƒ¾f³Á¡Púø ,bÜ=F·öL5ofÍEcC-j«mF͉D"ÈÝ=—0 Áaá‹oÍëG$A"‘`áÒåÖÆ+"""""¢[Ëh¢½Í#'šD¤n·f@ú(*++‡M[WW‡ÿú¯ÿÂí·ßލ¨(\¸pa”¥üýý‘––6ès£=6GíÞ½"‘W¯^µÙþí·ß(Gß㫯¾rj_Gµ;Ϧ¦&<öØcX¾|9JJJœ>>""""¢‘0¾;Œ/ˆˆˆh,¸¹2s£Ñˆ~ñùϯZõ=(½½NÛÐЀÓ9§†LŒåËÓ,5‘­Ý»wcÇŽ(**ÂÌ™3ÇußÉÉÉhiiA]]þõ¯aÇŽv¿¶¤¤·Ýv4 :„˜˜˜!Óþå/Á³Ï> ‰D‚yóæaÙ²epwwuù5 |}}}n4Çæ ;vìÀ’%Kl¶-X°`Èô»wï†ÙlÆóÏ??๤¤$ìÛ·ÏfÛÅ‹ñË_þr@Ú>|k׮Ŋ+ðÕW_aþüùNÑÍñÝ _8ñÅuŒ/ˆˆˆn.m ‘H$˜7ÿÆ ÊËÊ`0à&•:•V¡P )i΀ý ‚€¢¢+p—þ‡Ñd ‰ˆÀÀ@´¶¶Úý:•J…5kÖ@$áÔ©S˜>}úi/]º„gžyÛ¶mî]»àéé9E‡ÅbAFFÆ=Üœ=6WIOOÇwÜ1lšŽŽ¨T*´µµ¡³³^^^ƒ¦ Ä=÷Üc³m¨@-Z„ï¾û«W¯Æí·ßŽóçÏ#,,Ìñƒ ""ºÉ1¾ Æã‡ñÙÃ¥ 4b±qqqÖ¿AÀ… y½?¬2³àáááTZooox_ëíÖ_mm , \tDD“ŸÅbÁ¦M›ÐÚÚ:bð{öìÉdÂo~óÈd²1+‡X,Æ×_=fùM/¼ðŒF#€Þp¨ÊqqqøüóÏ‘’’‚{ï½GŽ´ß#"""b|A4_¸ã """·5hÌf3Nçä £½™YÃþðp$mAPtå ÂÃ#àíã3–E§1²uëV›¹r<‹Å‚½{÷â±Ç³é õî»ïB$áèÑ£6y¼ýöÛ‰D8qâ„uÛG}¥R‰K—.áW¿úRRR T*±`Á:tÈéò¾õÖ[‰DÖ¡ñ‰‰‰6å¿q®aøâ‹/°zõjøùù!11Û·o‡N§4GÒ:âw¿û<ˆ÷ßIIIƒ¦ijjÂÉ“'qòäIœ>}J¥gΜ±n+..¶¦ˆGzz:xà|úé§0 òݹsç€9‘¿ÿýïú˜úäççãî»ïFXXbbb°yóf´µµ š¶­­ ?ùÉOœœ OOOëyÁéý¿ôÒKøýï¿üå/ˆu:Ÿ¡Ìž=ï¿ÿ>¾ûî;üú׿óü‰ˆˆn&Œ/ˆñ…óiÁø¢ã """r…qi 1 8yâL&ÒWd ;÷¬#iû«©®Fww7ǪØ4Æžþy;v ¯¼ò //YYYظq#öïß;_‰D0™LÖmƒÝÝÝX½z5.^¼ˆ 6à©§žBqq1î¹ç¨T*§Ê»zõj|óÍ7øáøë_ÿŠo¾ùÆúˆŠŠ²IÿÒK/áî»ïƬY³ðÛßþ+V¬Àï~÷;dddÀl6;Ö===xùå—qûí·cýúõC¦ûàƒžžŽôôt|ýõ×èìì´þžžŽ—^zÉšÖ`0àç?ÿ9î¿ÿ~$%%áÊ•+¸ï¾û‰S§lçjê©§——‡ãÇãÀûwÔ¾}ûššŠ€€¼ôÒKؼy3öïß””èõz›´‡ÆÌ™3qöìYÜsÏ=xþùç­ó?¦~ýüüàáá‘H4ªcÎúõë±zõjüá€Z­vÙ~ˆˆˆ¦2Æ0¾p6­#_ôb|ADDD®âÒ)Î@¯×ãÄñc0HIMvH­#iû³X,(*bï¶É.&&111ð÷÷|öÙgxê©§ðÉ'Ÿ $$Ä®<  ÜÜz߯/¿ü2|ðAëv___<ÿüó8uêÔˆsÿ&::ÑÑÑ8{ö, --mÈE<óòòðâ‹/âõ×_·\=öfÍš…íÛ·ãí·ßÆÖ­[Në¨>ú#.ˆ¹}ûvlß¾p×]wáìÙ³hhh4­\.dzÏ>k³­°°k×®ÅæÍ›QZZjÝŒàà`ëßc±(477ã‰'žÀ®]»lÊ’––†µk×bß¾}ÖsßÖÖ†|÷Ýw^}õUk°#“ÉpöìY›÷ÎdµcǬZµ |ðž|òɉ.Ñ¤Âø‚ú0¾`|á,ÆDDD4Y¸|Éd‚—R ‰D‚#‡á_¾ÄÕ«Eƒþˆq$mUU•ÐjµìÝ6EôÆ7nÄÃ?lwðôÎ; ØöRê  ”J¥MÚÔÔT@uuõ¨Êk×^{ >>>xôÑGm¶oÛ¶ ÞÞÞ8pà€SiuæÌH¥R¤§§;‡=’’’ðä“O¢¬¬ ÍÍÍ.ÝìÝ»xüñÇm¶¯Y³r¹¹¹¹ÖmúÓŸÐÙىݻwÛôD,øž¬ÒÓÓ!‘H——7ÑE!""št_Ð_0¾pã """š,\>‚F¡P`Ù²€N§CUe%®¡¡¾+22­?jMÛG#8$„½Û¦ˆ¾€Ç™²ƒýîÛvãÐò¾€Êb±8UNG\¼x Þ£r¹ 6s.;’ÖQ%%%ˆŽŽôZ N‡={öàÃ?Ä•+W V«ÑÝÝ øÿìÝwxTÕÖÇñïÌdfÒ¡PŒ JGQš HD,ØÐ+^ËE¯ø^{ÆÂEE ]ÊUTŠJïE E:’6™úþJB&ü}žgždά³Ï:gÍ>köÞüñ‡Ï·ÚüaãÆ š7oŽÍf#''ÇûÓápøÌW½nÝ:êÕ«—¯C}®ÏÉåÈb±PµjU’““K;‘ËŽúòWê_¨QXê_ˆˆˆÈåÂïš³Q?.ްðpÖ¬^ÅÁ¨Z­Ú%Å=z”œìl5läïô¥˜œî@åÙó}í$:Jç’ššzÎÅf- V«µH±…yÎE-‹*++‹nݺáp8xæ™ghܸ1.—‹E‹ñÐC‘––V¬Ç+ˆÙlÆ`00}út°X,>³¯Ybb"åÊ•ËׯéÏΕð 7€cÇŽùý›Š"""W:õ/Ô¿Pÿ¢ðÔ¿‘ËE‰hN )¶Ø½{÷`6›©T¹ò¥¦%%äôçë@þc7++Ëgûùæˆö×7—Nc·Ùl猩[·.Ë–-#77×çy·ÛMRR½{÷.RlaÕ«W„„tˆ˜ªU½pËåïb¦ ¨R¥ €wÍÓNž<™oßÓûënµk×àûï¿?gL×®]ÉÈÈ`üøñ>Û¿øâ Nœ8Áˆ#Š[Xýúõòæ¡..ëׯÇ`0äû7¶ÿ~àüËâÒ£G¬V+wÝuË–-;oì 7ÜÀ‘#G˜6mšÏöÓŸ+a ‚>ø€€€î¼óÎÒNEDD䲦þ…€úê_žú"""r¹ðë›ÍÆÎÄ?°ÙrÉÉÉ!== —ËEdd$7ÜØ ‹ÅR¤ØÓöíû·ÛMõjÕýyRLvìØÁñãǽ ={öð믿yóƒ_{íµÞØf͚ū¯¾ŠÝn§\¹r¬\¹’%K–OAà¯?ŒÛ·oO­Zµ3f K–,áÆo$**Š[o½Õû-¯áÇ3qâDžzê)iÙ²%›6mâƒ>à¹çž£I“&Þö {àÀöìÙÀ–-[€¼!ö§¯[åÊ•½9\sÍ5tëÖñãÇóè£]à9¥¤¤°k×. oJ»ÝΪU«¼¯ÇÆÆzWmÖ¬“&M¢gÏžŒ5ŠŒŒ .\ȦM›ßo¸%''søðaïs»ÝNjjª7_€:uêP¾|ùB[ll,ß|ó C† ¡]»vT¯^Ž;R©R%¢££éß¿?•*U`ôèÑL˜0¡C‡²aÃâââX¿~=S§NŠþ ·¬¬,6oÞì}ž‘‘ÛífÅŠ@Þ´)g†‹êÀL˜0{É퉈ˆ\MÔ¿³©A¡cÕ¿PÿBDDD./~-и\NöíÛGPp0ÁAÁÔ®]‡*11„‡‡_Rìi{÷ì!,<œÈ2eüyRLžþy¼Ï'OžÌäÉ“èС?ýô“÷µððpxì±Çxçwhذ!=zô`̘14iÒ¤D§ ([¶,K–,áÃ?dþüù¼ÿþûœù¤Ï¶W^y…W^y€_|‘^xÁçõ×_-Zзo_/^ì½>g›;w.÷ÝwŸÏ¶–-[zÿꫯ¼ß®9r$GŽaÒ¤IÜ{ï½4mÚ”^½zñöÛoãó ·7Þxƒ?þاÝU«VùÌu}:‹/¦]»v~ËEDDäJ¤þ…HéQÿââ©!""ruk×®]OƒÁj02Ünw`3›Íöììl‡Ñht„„„¸ív»+::Ú½k×.OXX˜'::ÚÓ°aCÏØ±c=mO+Ë߯ôéÓ1 |Ì™3§´S½d}úôaìØ±|üñÇÜsÏ=WÄ•g6›¾}û2uêTƯΓˆˆˆÈ@ý ¹\©!""råðëg"—“V­ZùLp.Í›7/lüï_ÿú¡¡¡<õÔS>|˜o¿ý–ÐÐÐÒNë²Õ½{÷|ÛæÎËm·ÝVè¶Ž?Î/¿üâ³íôœÚuâÄ zôèÁªU«øüóÏ@nn.Ë—-%;;‹FŸ·ót±±f³™nl…ÛíæÇÅ?²sg"¿þú ÙÙÙ´jÕ£Ñï§%"""""¥@ý ¹Zø½§át: Ãd2±äçŸX´pü±§ÓyI±‘‘‘4kÞÇͶ­[IOK#þÚk ÅÙÙÜn7)G²eËf¬V+*V,R¬ÁhàäÉ“DFFz·Ûss ½øšˆˆˆˆˆ\™Ô¿‘+™_ 46›‰`³å’““Czz.—‹ÈÈHn¸±‹¥H±11UIÚ¹“U+WP§n]BBBÉÊÊdgb"‘‘ÄÄTõçi‰ˆˆˆˆH)PÿBDDDDD®&~-и\NöíÛGPp0ÁAÁÔ®]‡*11„‡‡_RlHHmÚ¶cÇï¿“øÇ8NBB‚©^=–Úujû,ö)"""""Wõ/DDDDDäjâ×MHH(]»u/öX€ððpZ\}QS‘+Œú"""""r51–v""""""""""""7*Јˆˆˆˆˆˆˆˆˆˆˆ”0hDDDDDDDDDDDDJ˜ 4""""""""""""%L‘¦ˆˆˆˆˆˆˆˆˆˆˆH SFDDDDDDDDDDD¤„©@#"""""""""""RÂT )a*Јˆˆˆˆˆˆˆˆˆˆˆ”°6îp8˜ÿݼs¾~ÓM7^èXÇÃîݻػw/Y™™„„„P­ZujÕ®]|' """""— õ/DDDDDäjâ×Édâšøkÿ²Õîädìv;fs‘b6¬_Ïþýû¨U«6¡5kräȶlÙLVv×\R£þ…ˆˆˆˆˆ\MüZ 1Ô¬YÓûÜãñ°qãÜn7mÛµ'((¨H±ÇRRøóϽ4oÑ‚*Ub¨^=–Ö³{×.jÖ¬Ehh¨?OMDDDDDJ˜ú"""""r5)±5h\.«V®$-5•¶íÚŸ·ƒs¡Ø””L&“·ótZí:uñx<;–â—s‘˃ú"""""r¥óëšÓìv;+W¬Àh4ÒºM[Ì™N °±Ù9Ùn Áh4’•™U¬ù‹ˆˆˆˆÈåCý ¹ø}Mnn.Ë—-%;;‹FŸ·ót±±¡!¡Øl6222òío41 Åz"""""ryPÿBDDDDD®~Aãt: ãdz:K~þ‰ÀÀ@jÔ¬I­Zµ (RlõØX’’v²jå êÇÅa2™HKMcÏžÝymh~h‘«’ú"""""rµð{&$$„ë¯o @NN{÷ìá;8tð mÚ¶Ãd2:600ÖmÚ²}ÛV6oÚD@@+V¢^ý86oÚHdd¤¿OKDDDDDJú"""""rµ(‘5hN ¢~\aáá¬Y½ŠƒPµZµ"ÅFDDpí¼ÏÝn7Ë—-¥bÅJ„GDøý\DDDDD¤t©!"""""W2¿¯ASÐbõxLÛn]úàìùóÏsÆ•­Ë·ÞR‚™]ùÞÿï$¾_¶´´Ó¸¬­^¿CÙHŸÇç_}ÉíI9ʰ‡¢Uç[Ø™œ\ ™Šˆˆˆˆˆˆˆˆ\ÞüÙ¸Ãåbö¦uç|ýÖ  ò>϶ç2ë&jDEÓ¬z ¶äd:;SŽp<3“«•ªeÊR¯B¥bÉÝ_þ¯…'ž Äd‚kº¹þ:žÒNëoigr2·ÜÑ‹¬ìl~š;ØjÕΛ•MdDÄyÛ{õÝwóâXv¬^C½ÚuŠ;Ý+ŠÇãaן{©V¥Ji§rYkÞ¤));“9pè‹~\̘ÇK»¢ËóóÜïèÚ¯/mºvá3fߨQ±´-""""""""r9òkÆd4Ò¤jõ|Û“ŽÁîr`ô…‘ž“@™à ¶½?í«v'S%² ªÄp,3ƒÍö‘m·xÌËÅ›ëÇóÉÖÿR3"–GâGW¶.–pFÅ•vjÚú»‰GŸ â¡{syù¹\‚ƒT˜)-'RS¹µOo +þ÷µjœ»ˆév»i{ÃÜØ¢E fxåÙ¸m›ßNã¸8¢"Ë“ƒÝáò 6¹v;Vk)gyy1 ”‹Š¢\TÇŽ/Ö¶›ÆÇóÛÿ¾§SïÛéÜçÖ/]J¥ ‹õ"""""""""— ¿hŒµ£+xŸ{<ÖíÛƒÛã¡C½[,>ñi9ÙÀ… 4.·›uî¡f¹òÞbL­rå1›L$¥¡Nù „Z‹ùlŠÇ”Óx£õËôªÕ½”³¹°é³Ì8ðŸÙøËÛ%%Èív3ð¾{9vü8+¾_|Þâ €Ñhä‡YZ£æB"ÂÃØ{`?¿®]ƒÁ``źµ¬Ù¸‘Œ¬LªVªÌ?G=RÊYþ½ÔŒeÞ×ÓhÙéfú Â’yßa6›K;-‘bWbkиÜn~Ûµ“Ô¬,:Ök@X”ôœl AA´pÆŸ©Ç±;ù¦3«_¡2»»¤\dåÑ¥c¸~úM„}TÅ»>Œ‡ü£G6ÛFßCˆ™G̤8ú.Ÿû}bæìZ@¯ùƒè5ÛNäµõÖ†ñÞmlþô’ò]µÎĨ§ƒ¨Ó,Œ²5à ©NÇž¾E.¢j…Sûº0Zw åÎûƒ™1ÏŒÝ^Àù§øu•‰_W™XµÖDX¨‡5LÞm‰Éù?6›¶šè58˜JõÉcðÈ`ŽŸ0ùœ†?„¡l„÷ñýϸÝðÍl3ÃFqã­¡EÊ¡b½pž%{¢\íp ý IDATæçå4¿)”ÈØp>š”¿ õÝÿèÔ+„25©ß"ŒÑÏ’c;Ӯññaô\à¹Ü5"˜ðjádçøæR˜kööGòýÏ?ñåÇhX¿~1c_ýO¾µAºôíS`ìg_~¡l¤wzªú-šûì÷GÒÎ|ûlÚº•^ƒQ©~=bã3x䎟8áS±^]že÷<ü åj×dÐðûùyùršßÔÈØj|4ib¾vW­[˨§ÿAfM)[3–*•èØó¶ó.n5ªVãÙQ2 GO<ž¼ßYÙÙDG•e`ÏÛyì¾û½±Ã{Ôç}ÿóO¸Ýn¾™=‹a£*p½]³ïþ·ˆN½n§LêÔoÑœÑÏ=KŽÍæ}ÝápߘþÃî)ð¼ï1œðj1dŸµèñxˆªUƒÚ×5¡u—ÎÜyÿ}̘7{Aÿ(‚Â¾Ç êÕçË'ðÛêU¼ò֛ŒƒˆˆˆˆˆˆˆˆÈå¦D 4v§“¥;wàp»i_7ŽÀs|:='‡ˆÀ LÆ3im;´Ÿßô‰KÉ8IX``¾8ŽSÓ¦<5§(f'ϧÞÍxoÓÇl=¾,G¶·0ãò¸|b¿Ü1æÓ;0{×|,F ÇrN4‡ë§ßÄáì#Þ¸åcvò|f'ÏÇévðËÁ•ÞmS¶9ß)ߘiÝ%” ›Môéáà…§ryá¹ÜÙÇág·Ã³£sÐÛAÃú.~O4Òïž`b…³bé/mZhÝ%”Ö]BùaIé' Þç­»„òï×}‹k sÍÜpKQe<üûYƒû;˜³ €–·„’›[´óúç¹,›ŸÅø×òn oØl¢ým!ôÌœf"Â}‹e›CÚI¯¿o¥L„‡[:8™š`æ¹qôîîÀj…—^ó=·¿n¥×àâê¹yóemnpòöGVÚv Áuêã`6C‡6Næ.4s2÷À’c30gA}z:|¦‡+Ì5³åÚxãý÷é|ÓÍôìÚõœ×ìÁa÷²aér–/XÄÂoλþL§öX¨ˆÍecÉóiW¥U‘ò<ÛËoßÈÅ/ Ï}Àj…'ô½ó¿m‡‰®ý‚<2˜¤ugnâŽ~(—ÑåÅÞ60„µLÚq²Àv¦ñx/?—ëÓþ-œtíBÂ\3ƒúþýˆ­æ&¶š›²eò>/³¾3óà½v¾œM…hßâLar0=Ü=ÀÁ[ãl8däëfÞ—Ãõ×¹HÞmdâ”3Ÿ« ›M¼øZ Ÿ¼Ã½wå$6âê¹ý\ §X>$oûà~&Oµ0ë;3Cžu0oQ™Y÷;s {;N˜Áá£Góؤó^³òÑÑ”Žö><Ï4Õ«V¥zÕª¬Ý¸!ïØ×· ^í:ÆMIaÄãñòsÏóă•o ºöëKÂÜ9 êÛÈ[wêîykÜ+8tˆ¯g$ðÖ¸q\]3’wïfâ”/}Ú~ù7ˆoÔˆ_.:ï¹ùÓ¾ƒøîÇÅ4¬[—ž·tæ­O?añòåÜ7ðNŸ¸ØjÕˆ­V²eÊ0ë»ïxðÞûøvòçTˆ.ïë¯k¶aóf^|íU>yûoqmØ ¼bÍèçžeâ”/>d(ƒû `òÔ©Ìúî;† èmcÞ¢…dfe1¸ßï6«Õê“'À¶;èÚ¯ƒGŽ i݆¢^ÞKzÇ<ö87ÝÞƒ)ßLça÷szä“Ùì÷ÿ‰ˆˆˆˆˆˆˆˆ+¿ qº\„b2Y¼có¶là÷Ãqº}G£Ø<ÏןÈq80›LØ6ìÛË¢í›qºÝtŠkDth—ë‚mäÅUÿá¤=ƒ1Íç–j1` ÄLP@Þî³s~oÓÇd9²y(þ~ª…å6(ÅðFCøqßÒ"åPX1UÜlÙnbÂç {Ú ë»x`˜äÝFަm:²of›IK7pÿݾS!ÝÚÑ‰Õ «×_ÚMS³9ïækÿÞî`ÏWœ)l&œ$Ad„o[e"}Ÿ8ÑBD¸‡¡}Û}èÞ\ÂÃ<,\|¦Ýö­ÄTv35ÁwtØ×3ÌT­â¦}ë3ŽÂ^³5Öc6›iݲe¾s/ ßÌžEZz:÷ß=Ägû­oÂjµ²zýzï6“Éä…òמÂöC8–J‡ºqÞéÌ®¼Øe/¢@`2r,3ƒÛ6J‡ºq” É[“ÄîrTÄ¥×95š Òõ>ÛMƼQgOq¶öÈFÞX÷>ïnüˆ§ ›ÓFŽÓv*âY»áB¾šÍ£c‚ùD¯¾keÌc¹ d§ J96Ógš™š`æ÷D#™2³òn ÿ‘d¢|´3ÿN°q‹ ƒšw Å–›w ›-ï§ÃAkÜFÀ©ópž'µÂä`2qÑ…¬ÍÛLÔ©éÎw-­V¨SËMbÒ™ŒFÔ×Áã­I1P!ÚCúI ›ýP®·(TØ|v&'S½jULç}æo·lÁ`0мcl¹6rl6l¶¼Ÿ‡Ãg“ÉT¨›ð_Mø”GÇŒaäóê»ï0æ±Ç6è®=××6¡ÅµM¼Ï¯k| ±1U}¦7;[€)ï?›Îó|(ýuÍ6oÛFšµò]«ÕJZµHLJön3 êÛ7ƿϑ”£Tˆ.OúÉ“,\¼˜Ñ=ì- –c³1}æL¦&|Ë™IfV$%ùŒÎ*ŒKy- U«T!yÏîsÆ4oÒ”æMš)7‘ÒT¢sÂ[,4¬T…ˆÀ VìNbÚ ª—Í›ÒÌîra4ˆ*x¡õ³™-dØl´ªY‡ á¾ß8Ïu8¼ÅšÂðà!1- “Áw`‘Éw#ñì)Îl®¼BLó MéT­V“…À€À¼Ÿ¦@*íffaUˆö0mb6ÿxÄÄËoZñxï}báÓwshÙìÌM߬lÝúãpxæq¸q¹`Ñ<ôTiéEAc6çH™>)›°P X̧~ZÀjÉ?â¥0N}BÏwÿº09àv_ܱSÓ „†œ¿ÅœÿÜ÷wðê»V¾™efÔp;3ç™ÉÍ…Áý}+.…½f‘ßä»°|I2›Í ¦Oú/a¡¡X,,fsÞO‹ëYkAFÜ{ Ñå™6qÿxäQ^~óuF<þï}ò1Ÿ¾û-›5÷Çé\”¨SÓ˜$àÔ‡ò|E]³Ôô4BC .b[̬«Ï¶Áýðê»ïðͬYŒ>‚™óæ‘››Ëàþý}â²²³éÖ¿/‡“gœÆ âr¹XôãbzêIÒÒÓ/*¿‚\ê{|ìøqZ·¼¡Èǹ\•ʤý]SÀîtâöx˜±aM¾×Òsrøvýj:7¸†°À@ƒ8”žFø_¾ážm·“‘k£^ÅJ…ÎÉ€ ÁÑÈ<ÄÆ”->£h *Ð4ŠŠcÝÑd82x8þ~oLiiïbæÙlÙn¢ÇÁÜzG¶gx “§šYö[Ç’NR¶Ì™@êy7†s‹8Ò%®® §5ߨø§¨:=ÅÙù 4…ÉÁd×EÖêÖr³ì7¹¹y£fNs»!i·‘ÞÝ}×ÖiXßE“k\LM°0j¸¯g˜iÞÄEý:¾,ì5«W§ sçpðða*W¬xqÉ_¤Ó£(l¶ÜsÆÄÕ­‹ÓéäðÑ#Ä7jtÞöL&.wá?Mãã™ùŶlßN;pë½9°}Ç9‹¥éôgç+ÐøëšÕ­U›e¿ýJnn.Ö³>”n·›¤Ý»èÝý6Ÿø†õëÓäšk˜šÀ¨á#øzFÍ›4¥~º>q“§~Ųß~ãXÒ.ï;5ªW ×~îÏÇÅ*Ê{œ¼{7™YYÄÕ­{Α+•ß× 9›ÛãáPz+v'a 0S1üÌú áA4©Z=ß#Ðl&"(˜&U«rê†dry£Sv>äÓ~âÑÃX¨V&ªHùÝP±¯­{—Ý'÷–›Njnà;ÅYïZ=Xvà7ÚÏèÆôÄ™Ê:\¤ã§Æ \t¾ÉÉÉ ƒÏ¨˜õ›ò¦Õ2þåß0oƒÍV´ãõè’·nÊ]#‚Yö[ñ×û.fгÂä`*Äš®ddÿ™ï¨„/¦Y8‘j`ÄÐüU­Áý¬\kbÅ?-È7z¦°ùô»½·þHq«]£&ßÿüÓ9cztéŠÕjå®ÃYöÛoçmÏd4jÍ_5nЀÎ7ÝÌÉŒŒKµáO3Å™¿®Y×NÈÈÌdügŸúlÿbÚ4N¤¦2bè=ùöÜ+×®aÅšÕü´|Y¾Ñ3ë7mÂ`0`üË ö<€­¨ÿ(@aÞã>û”€€îìÓ÷œ1+×®a΂¬Ù°þœ1"""""""""—#¿Ž ±9ì8r›ÃA¶ÝNZN6.·›2Á!´­]kÀ™Ã‡˜dÍ®cG µZ©]áL¬5ZÑåIJ9‚Óí¢\hÇ23øóÄq®­å]צ°^lù óv/boÆ>ê~q±áÕØŸq7y7Og}˽GÍ.ü§ÕXž_1Ž_®ä—ƒ+0iàÿnü÷5¼€YÉßñÍÎYØÝy7ì_Zõ*åOMƒ6²ñ0ÚUiU¤œ?œhÁbÉ+d:b`åZó™>ÄNLå37}›5q1é+è9(˜QÃíddX¸8€M[ó* ¹ö3Åœ”cvíÍ»†©iìXµîÌ¡Øjn*D{¼¿3)›!Ñ®{Õ«ºéØÖI¥ ¢£<ôïm§R…ÂOs¶c§‘ã' œÌÈËkÏ>#¿®ÊË!$®m|æ½(L&“—ëâ¦s>ÄÎÄ)žz!Ä$#-›¹Ø´ÍÈŸYyîÉ\š\“ÔÃ}ì<õB ï Æh„½ùb {Í®iØn·ÜÊøO'ð舑D—+W`¾É»wsøèïs»ÃNjZ¿®ZéÝV§f-ŸµDÚ·nM­5óâX–üò 7¶hATÙ²ÜÚñ&ïè‰ØjÕøfÒd†<8’vÝ»R½jU:¶mK¥ ‰Ž*GÿÞ½¨T¡â©ëkÄu±C”È+:Y,L:r˜•k×0oÑ"†JLåÊîóÌK/²à‡ï¹çλxì.úX—jÇÎDŽŸ8ÁÉŒ öìûÓ{mC‚C¸¶qco¬¿®Ùð!C™8åKžzáy“’hÙ¬9›¶máƒÏ>ã¹'Ÿ¢É5×äÛçÎ>}xê…çxß½Fô¾#_L³&M˜ôÕzȨá#ÈÈÈdáâØ´u+¹g­™sàÐ!öü™WÀÞ²};‰ÉIÞkQ¹b%ïgŠöŸ>΄Ï'3ðŽ>ÄV«vθçÇcñÒ% êÛ)ŸL8ß幬øµ@ãt»Ø{â8Á !+uÃ*RµLçX|»0šV%ØleÚ ¤¥J«Zu©ø—5i £AÙú,ï³ÑËŸeÓ±­DXÂÝöa¶ÿ6ŠÓãûù§¯{Œþuz3õoùõÐ*RrŽq,ç8Çm'·„yã¶ŸØÁ´Ä>ûþ´™÷÷¡qw)_·ä]¿$2ÂC‡6Nf~‘ÍíÝ| #ï±s$ÅȤ)fîDÓx½º9xû1 Ã|FÐÌ]dæ¾G|ߣ–άëóÕ„lîìs¦ý]$¯wòõ 3K~ 1ÉÄòŽ5Щƒ“J ?åÕóãI˜kö>Ÿ<ÕÂä©yëvthãä§9Y>ñ›ƒÉtþéÒÎËdñìËV|ofú,3Mã]$LΦg×ü…È[è–N.à¶Î¢Ë\œ*ì5{ý¥—hqSGúÞ3„ųæx×A9ÛãßçãÿNòÙ¶jÝZZwéì}>ãó/é}Û™i°Ê–)Ã’yóùpâgÌÿþ¼?a'3N2ú·>7Ù{téBòú|=#%¿üBbR2ËW¬àÈÑ£têÐá¬bÃÅ/xïv»ydÌÓÞµY"#"èЦ 3¿˜Âíݺs¿ºµjóŸwÞfÕºµuœâòü¸q$Ìã}>yêT&O @‡6møiÎ<Ÿx\³€€–/Xij/¿Ä‚ï`ú¬™4'aòôìÚµÀ}*D—ç–Y¸ønëܹÀßÈ{†q$%…IS¾äÞQÓ4>ž^ݺóö+ÿGLÃ8Ÿ4ÓfÎàÉçŸóÙÿ•·Þä•·ÞàÅ1ÏðÂ?žŠþÛrmôºk!!!¼òü ç½&¶Ü¼Ü‚ (ð‹ˆˆˆˆˆˆˆˆ\Î §>ÆŽkضm›!%%Å‘‘a¨Y³¦!%%Åh±XLYYYF·Ûm6; h4C<O˜Çã)³téÒ¼;˜É{KøT.QÙÈ Çˆ”¢„¹sè;t#ïÆGo¾UÚ锚u7Ò¬c{î¿{Þy·´Ó‘bæv»¹û‘LŸ5“ųæÐ®UÑFŠˆÈÕÇzá ‘‹`(ÚšòíÚµëi0R C†ÛíÎlf³Ùží0Ž·ÝnwEGG»wíÚå óDGG{6lè;vl¾oó—è4ò÷5}–CÙˆ >æ,0_¸±¿©>=z2öé1|üßIÜóðƒç]åjvzôP³&MJ9)n¶\}ïÂÔ„oÿÚë*ΈˆˆˆˆˆˆˆÈUͯSœ‰œÖêz Ÿg_0®yÓÂO‡öwò¯§ÇÊS/<Ïá#Gùvò焆„”vZ%ê·Õ«(ÍàþJ;)F'RSéqç@V­[Ëç~¤÷WDDDDDDDD®z*ÐH‰ˆ©ì&¦òÅ//ç6ú¡‡)W6ŠÙ ¾Ãhü{ ‚ËÊÎæÍÆóåÇŸhÍ‘«ŒÑh$8(ˆY_N¡û­/¼ƒˆˆˆˆˆˆˆˆÈN‘+Ð2p`i§QâB‚ƒIZ·¡´Ó?ˆŒˆàû™³J; ‘ó÷úú½ˆˆˆˆˆˆˆˆˆˆˆÈe@‘¦ˆˆˆˆˆˆˆˆˆˆˆH SFDDDDDDDDDDD¤„©@#"""""""""""RÂT ¹Êl?±ƒÇ—=Ã-³{3)ŽmÇw”vJ%*u‡‰o›Eðm³2÷ëã]ÒV¯_‡¡l¤Ïãó¯¿.í´DDDDDDDDDD.;þlÜár1{Óºs¾~kƒÆ„yŸgÛs™¿u5¢¢iV½ÆEç§?¶ãöx¸¹~ÃKÊ÷JæÁÃ?=Á§Û>Çíq{·§æ¦•bV%Ï™mðþn ó”b&OÍ›4%eg2bÑ‹óâØÒNIDDDDDDDDDä²ä×Éh¤IÕêù¶'=‚Ýå$ÀhòÙžž“@™à ¶ã°“m·“mÏÅæp` ðë©\öÞ\?žO¶þ—š±<?’¸²u‰°„Ó0*®´S+Q#DÖu`U¦¤ ÊEEQ.*ŠcÇ—v:""""""""""—-¿V5Œµ£+xŸ{<ÖíÛƒÛã¡C½[,>ñi9ÙÀÅhnÛŒË}f¤Èß½@3eÇtÞhý2½ju/ålJO¹ktššYÚiˆˆˆˆˆˆˆˆˆˆˆœW‰-Òár»ùm×NR³²èX¯aÖÀ|1é9Ù "‚‚ hÁW—†×p{üuôiÚ‚¨P¤|Ù›³k½æ¢×üAl;‘·ÖÌ[Æ{·}°ùÓ|ûÌßó?ºÌéC¹ 5©ýyîÿñNØR}bîÿñ ïEz÷üð i¹é<ý뿨õùµ„Sè\Ýn77ÝÞƒÊqõ9|ôˆÏkiééTmÔ€Ö]:ãr¹ ÝöÆ·½ëΜýpæòÅnz;ÙíÃÙñ¹•ÿ°ü‘æt gA0vÍ´ÐúÅþØ£>ë®|ÿóO¸Ýn¾™=‹a£âÆ[oÉŸËÖ­ô<ˆJõëߘÁ#GpüÄ Ÿ˜Šõêòü+ã¸çá)W»&ƒ†ßÏÏË—Óü¦DÆVã£IóµûÝÿÑ©×픩Qú-š3ú¹gɱټ¯;bãÓØ=žË]#†^-†ìS#Ú<QµjPûº&´îÒ™;ï¿óæb·Û‹|½Î¶jÝZF=ýê4kJÙš±„T©DÇž·KÛ""""""""""—«)ÐØN–îÜÃí¦}Ý8ÍæãÒsrˆ Âd<“Ö¶CûùýðÁ|±Af f“‰ü·àÿ>–üÙÉó™<§Û À/Wz·mLÙâÿÜŠ—é>·??üù3Áæ v¥ïá³m_pí×­I·ŸôÆ5Šj@ïZ·ÑèÔôhëS6qÝ´v¼¶î]v¥ï!Þ‰Ãí(T®F£‘^ƒô“é }ðA<ž3Ózúddf2å“ ˜L¦ó´R°ðX7Õ:;¨ÜÖAÙFç/ð8³ 82 $M³°ü‘Žm0aÏ0uÐȺÿ "u{áðÏ'F³lþBÆ¿ö:6o¦ýmÝè?ìæ,X@Dx¸O|ÂÜ9ÜpËÍD•)Ë¿Ÿ}–Áý0gÁ|ZÞr3¹¹¹Þ¸´“é¼þþ{”‰ˆä–™šð-Ï{™ÞÝoÃjµòÒk¯ù´ûï×_£×່«W7_G›nàí>¤m·.Þâ—Ùl¦C›6Ì]¸“>ûçØlÌY0Ÿ>={|ªPj·Ûyvô“ è} ë×ç÷Ä?èwÏPb5`ÅšÕEº^§Mùf:­»tfÃæÍôéÑ“žzšþñ4wöé{Î}F<þ†²‘´ìtó%[DDDDDDDDD¤4ù}^°\§“%‰¿cw9i]«.æsÜ€w{±GSRñøc¼üÜó<ñàCÞí7¶hA×~}I˜;‡A}ûyë8Ý=` o{…‡ñõŒÞ7Žë¯kFòîÝLœò¥wÿ ›7óâk¯òÉÛïpï]ƒ6(¯X3ú¹g™8åK† Àà~˜=z2楱|ÿóOŒ|âqî0€wô)r›…qº@ZÕED-שßÝTh‘7)ûÈ¥ý“8]4èß»7w¯8ðÍìY¤¥§sÿÝC|¶ßÚñ&¬V+«×¯÷n3™L yãÄ"#"|âËDFú<ÿpâgD„‡3tà>Ûº÷>ÂÃÂX¸øÌ{ܾukb*Wfj·>±_ÏH j•*´oÝú¼çÙ°~}v/É»ws4%å¼±çS¥2[¶ogÂç“/zz»û‡ aÚÄI¼8æŸE>®ˆˆˆˆˆˆˆˆˆHióûWÐC¬Vn¬Y€l»ÝÇSØ~èÒRéP7Î;™Ã•wƒ¼¬ 4~±áèfžš¶ì´få›°3m<Κ4ÎdÌ«fØÝųÖÈiŸ¾ûñmZѹÏÔ¨^ñ¯½Q¬íŸÑ”7úÂãöÏqzû¥µ`Êû'åt:Ï9ß$ IDAT³qË Í;vÀ–k#ÇfÃfËûép8|Öv1™L]¸Ø¼mujÖÊ7MœÕj¥N­Z$&%{·FõíÇãßçHÊQ*D—'ýäI.^Ìè‡ö…N˱٘>s&S¾å÷Ä?ÈÈÌ$3+ €?’’(}Q9þÕW>åÑ1cùÄã¼úî;Œyìq† ºë¼SÝ5oÒ”æMšéx""""""""""—‹Yƒæ´`‹…†•ªp}l-R³³ØŸvfAt»Ë…Ñ` "(¸$Sú[py\œÈMÀæ´ù¼·ÎHÙÀ2>Å83‚Æá*Üz3b±X Áãñ` (Òº3Euê”òbŠi1£€€¼œ¯¨b6›1 LŸô_~š3u?/eçÚõML"ëÀ!ï:6WHq»/®j”šž†ÝQp1Íb¶ä3¸ÿ\.ßÌšÀÌyóÈÍÍepÿþ>qYÙÙté{Ÿ~ñ9ŒÁ/ ÿÇú%Ëxï?¯–ž~Qù¤Bty¦MœÄÚŸ–ߨ#ŒkÛ¶fåÚ5EnSDDDDDDDDDäJP¢šÓ ZSÆîtâöx˜±a ß®_í}¤çäp -•oׯ&Ãf+ 5¹“ÁDÍðXÖ§lòymû‰\[®q¾ýN q¸‹·@óØ3c8|ôS?ýŒä=»yüŸÏkûçszгK)s.§§8;_&®n]œN'‡¡fl,1•+S>:šÈˆ‚ƒ‚| V&“ —ûâFÐÔ­U›¤]»ÈÍÍõÙîv»IÚ½‹Æ øloX¿>M®¹†© @ÞôfÍ›4¥~º>q“§~Ųß~cÞ×Óè~kgªW­JÍØXjT¯@®Ý÷xEÑ4>ž™_LaÓò_ÉÌÊâÖ;z{G興ˆˆˆˆˆˆˆˆ\J´@ãöx8”žÆŠÝIXÌT ?³†Fx`MªVÏ÷4›‰ ¦IÕê„X­%™îU¥Kìͼ¿q;R8”u˜·6|ÀMÊ·Épzгâ+Ð$Ìç_|ÎÇo½ÍÀ;úðÜ“O1áóÉÌž?¿ØŽq>F?h.fг]ºbµZ¹kÄp–ýöÛyÛ3M=‚¦k§Nddf2þ³O}¶1m'RS1ôž|û î?€•k×°bÍj~Z¾,ßè€õ›6a00}ÿs±ÿàAlÅX8mÜ oº™“癳ríæ,XÀš ë |]DDDDDDDDDäJà×5hl;ŽÄæpm·“–“Ëí¦Lpmk×Ãpæða„æY³ëØQB­VjGWðn³;LOó>Ïu:ðx`Ïñc˜M&ªD–ñã™]f%Ç7;ó¦§:½NÌK«^¥|pÞz #£]•Vüëú1$$Íá@æ!M¹Z5ø3c?6—ÑMææªí½í¾¶î]ÖYϑ죤瞤íÃ-aL¼y|‘òýsÿ~îôî0€~·÷àù'Ÿâ‡Ÿæ¾GGq}³ë¨T¡b¡ÛÝ9ͱ §¦cË83WÙê烼#fªuvP¥ƒÃé5h.nPÊEÛ±3‘ã'Np2#€=ûþä×U+ áÚÆgF(ÅV«Æ7“&3äÁ‘´ëÞ•êU«Ò±m[*U¨HtT9ú÷îå½&“—ëâ 4Ç eâ”/yê…çILJ¢e³ælÚ¶…>ûŒçž|Š&×\“oŸ;ûôᩞgà}÷b4ÐûŽ|1Íš4aÒWSè9h £† ##“…‹`ÓÖ­äžµfÎC‡Øóç^¶lß@br’÷ZT®XÉ;òàÉŸa±X0pèÈaV®]üE‹>d(1•+xžÏÇâ¥KÔ·S>™pQ×FDDDDDDDDDärã×Óíbï‰ã[,„X¬Ô «HÕ2QD]R»Yö\ÖìÝ•oûémåBCÿší'v0-q†Ï¶Ÿö/óþ>4îNïïe¬‘lø ÿøõ–ìÿ…c¶ã´®Ü’Qñ#èQ³‹O+¯fvò™-·ƒ„¤94Œª_¤\].ƒ†ßGdDï¿zf“ÉÄW>åÚ¶­òÀüoÆÌ| Ô_HêööÿhηýÀ’3Û*µÊÑâ¯)Ξ7Ž„¹s¼Ï'OÊä©SèЦ ?Í™çߣK’×oäë ,ùå“’Y¾bGŽ¥S‡ghLç.íl,_°ˆg_~‰ßÿÀôY3iOÂä/èÙµkûTˆ.Ï-:²pñÜÖ¹3ÑåÊå‹yÏ0ޤ¤0iÊ—Ü;êašÆÇÓ«[wÞ~åÿˆiç3‚fÚÌ<ùüs>û¿òÖ›¼òÖ›¼8æ^øÇÓ@ÞÔkŒy‹ÙŒÅ’·FN‡6m˜ùÅnïÖíœçiËÍ;^P]‘+…–G;v¬aÛ¶m†””CFF†¡fÍš†””£Åb1eeeÝn·988Øìp8,@ Ñh ñxrSú ê§ Ÿ’݇aÇÌõçºVźá¾~wøÞ/*ø ïä}ˆ+’ÆbVÖõç°3"""""""""" ¥íAã‘e|è ê,ŒÍÊI« ¨i°Y!"ôúFh(HŠŠA/sœn7šö®j›ºˆª—c ¼‰ÃGýÎÕ9ê!¼ ÕË1P \ûyÑ*Œ[<Qo$#õ½~xsÏ{~çüî÷ûÊ/EÂâ²vIﻪó0}åô|7=ßÍÆô•sp´©¸KÆ>›;×Üï÷L_]Y‘1ÿàܺú>\²à _íû{?†ðR$Ö•üÏoŒwò>„ðR$6”n gõ\»bÞÎBÊúböWw¡Æ^ôç""""""""""ºÐ…$ qºÝXwp\²ŒÑ™ÙЩÕ-Ö5ØlˆÐé!‰'ÛÊ++ÆÞòÒ6ݧyÿªåñéÜ Jç]zÎêöNlno «ÁïÜ÷e›qÍòØ\± ŽFn<Š»×<ˆ­•;|5ÙÑYøeÖtLN›€¡ñwißîûƒ?ƒ¥‡V@#jPm«Å‚eúé8”[+ºô^-ùÃÅã»i_ø–EÛQµ £M _Ü‚e‡V¶¸ŒÛé¤K ºe·ßñ…Ë0|þåˆÑEã¯ÃÇìÞ3°ìÐ ›9G‹cÝõà¢#1lüå|2"""""""""¢ [P—8‡ÛµöÂéqcDz¦/D9¬(hrØ‘ëw¼¤¾a-̶iIES#"ôúVïAçVŒ.Õ¶XÝ6¿ã¶ïcõÑ×$†õÀg×|ŒœèÞ(l(ÂÀG¢Éy«Ž¬ÆÅÝîìs3îìs3ïŒóFtI¿‡ãžoB‚!ßMûI¦ž¨¶Õ`ôâIȫهÿäÿ¿¿ø¡.¹WkR“ž„hm`Iá縷ïíX0ñ}ĺµi Iðžnåd@Si«Â]kÀSßÄCïó¿¤ûL\6 –µ¸äš¢xg8©ÕAÿÕADDDDDDDDDô³ô4n&’(bõ¾<,ß½{ËKá–=~uv— Š¢œuÿ™Ö”Ôסª©}»'vEÛ1:ocqYñõÑo!¼‰—žœA£‹ ¸&ÑÔ9ѽé©—8 p¬©$èý¾´óuX\VÜ×ÿ$™zz{ÔÇøÂ oŽ­ zÍÔ’7¹!c*nÊžÑæpÄ生¹ù– ÞÑ€;rçøÕ^™4ZI‹ÍåÛ[ëŽ9sðÉ;ïâÏý¡½@DDDDDDDDDD§úƒ7jµ¸$-`u:QTS…ü²”Ô×aLf¶o93—Çû¿û£;ÐXœl;zIÑ1Hˆˆìºæ©KÅè¼³@¬n+–Z˜p ~wÑý³>¶ÕkOŽá ydER—'m­øðü¶—ñâ¯Áæ¶Ãî¶û%§Çôš©ïꩳ`ÚJ¤€k¬Þ :Æ÷Lv÷O—ì‚SnùÙ„Áuà ˆˆˆˆˆˆˆˆˆˆèT!]§È Ñ 7¡"tzl,*@q}-’£½_Ê;=ˆ‚€½¡]cZ¬=°‘'§£mê"±zï ™ãN –Z‰)W`åá¯pKÎ,¿ógrú5Ád÷xƒ˜Áqƒ0>i ´’:•Îû§¤CœÁ²^T¢÷GÕsÚ̳¶89ƒæd¨¥ÕŸNøLê0h$ 4’Q¤VÒtMãDDDDDDDDDDÔ¢s²‘DK{Ê8ÝnÈŠ‚E;¶œk°Ù°`ûf\•Ó&ÝÉk;ìøîà~„iµ¸4-¢º/ï©ý’LÞåçÖ‡Fg^ýÒ߀…ËNœïy.Û Ð'&Û*D“« ¿ê‡o&ʹ nh”Öšæÿ—ÅïxK3h²£3á–Ý(·T rŸ®n—ˆˆˆˆˆˆˆˆˆˆÎ"è{МJV”5ÔccQ´*5âÃO.G®Óc`brÀK§V#BoÀÀÄdµZ_}å8ÖìÏGLXFöÊò-•F篔ð$ÀÇûbbÊH OÆ% C±ààR¿óç‹©é“ß•|Ñ‹&áÓ‹Qf)?'½4Ï qË­/qÖ#¬;`kå¿ãΦ€k'§N„VÒâÆ¯îÄw%ß·¹M[·`Ùʕز£å=jˆˆˆˆˆˆˆˆˆˆ¨m‚:ƒÆîra_E)ì.¬N'êmVxdQ#.ë•­êäíM:ßì˜f‡ª+¦Õ¢—9Îw¬²© @¯V#ÖhÂáš*¿kL:=Ìa¦à=uHŠÉÀ48qmúÕ€ëzMÆÿÊ6’O̰i¯—v¾Žõ%õŽßñ¿ºÃ·wË/³¦ãÚô«ñï]oamñÀ®ê<Àæòm˜¾r﬙? } 09mþ~é\<¹ñil(Ý„ ¥Þ>U¢ ‘Úüí’?áöÜ›:Ôs[í«;€{­/d9ÜxÔ÷yUF 0÷õÕ^Üm btÑxfë¿àô¸«Á¦ò-¾ç=uöMJxæOxs¾¾£MD²)c/C‚1f},nȸ Æø€~ž|úi¬^·³¦_Þx3˜NDDDDDDDDDô³Ô€Æ-{p¤¶F™¦x$FÅ B¯ïÔ¸ÇvxdÇl?v8à|j¬™Íy¨y†ŒFÒ`bʼÍCëÿH6ulÍ–Š¾eÒNµ´p…ïïÍ÷ÛÚBm©¥ÜwLsÚÞ+^ônȘŠyûàe? ÊVj[ jìµ×ÿߨ“Ÿöë÷½½óðÞÞy€1=GbÍÔå¾sáNü|÷þõã«ÈÎÆä´ xì¢1ð㑳o&§M@áœññ…X[¼ê ±¾t#*¬•Ÿ8¦Å€ÆîðîË£o!L%"""""""""¢¶N¼üÌ;WÈË˪ªª„¦¦&!--M¨ªª5d±XDY–ÕƒAír¹4t¢(E1)еnÝ:ï·É…GBü(yö""""":'\¦°sÝýL¨UÛo|Ô¨QSA¨¡I–e »Z­vZ­V—(Š.£Ñ(;NÙl–:¤˜L&Ål6+¹¹¹Êܹs•ÓÇãÆ-DDDDDDDDDDDD!Æ€†ˆˆˆˆˆˆˆˆˆˆˆ(ÄÐ…"""""""""""¢c@CDDDDDDDDDDDb hˆˆˆˆˆˆˆˆˆˆˆˆBŒ Qˆ1 !""""""""""" 14DDDDDDDDDDDD!Æ€†ˆˆˆˆˆˆˆˆˆˆˆ(ÄTÁÜåñ`éÎm­ž¿2§/Âuzß{«Ó{v"5ÆŒ‹“S»l\¢Î¸vÅ,,-\'?‚¿ü\·CDDDDDDDDDD?A h$QÄÀÄä€ã•pzÜP‰’ßñ› e0vé¸DDDDDDDDDDDDç“ 4¢  —9Î÷^Ql;v²¢`LV _}½Í àìM{Ç%""""""""""":Ÿ„l,ãûCQg±`lVLZ]@MƒÍ A¡oûòdm—¨#îùö!/Ebiá ÀS[žƒðR¤ïõå‘o|µw|ó¿s·|}/ê xôBúûþzOÀþºƒH|7a¯uG©¥Üï~vÆW ¼‰C ‡CöœDDDDDDDDDDz! hœn7ÖÜ—,ctf6tju‹u 6"tzHâɶòÊŠ±·¼´SãuD°\zâ ݽ"ÓpuêU¾—Yë«í“ƒ©é× OL6`{ÕN\ôÉ(<»íEj8Œ&çq¸d²¢2¡ ‡ÅeÅ÷Ï÷»ß·ÅëauÛ0¨[¤E¤ôs׃@ˆŽÄ°ñ—ˆˆˆˆˆˆˆˆˆ($‚Ð8Ün|{`/,Nú÷H„ZjyYQÐä°#Ê迼YI}ꬖKÔQO ~˯ùÃfd\‡å×|â{ êÖßW{ÿ€»±hÒ‡øÃà‡»«óÑÝ~¯ÿUwB-zÄÛrn¼¿wžßý>/úp]úäûQ VueB""""""""""  Óëöx`ÒéPo³bõ¾<èÔjô2Ç!£[TâÉPÅîrAQ”³î?ÓÞq‰BI%x¤²£³°~Úªkf÷¾}?y5û°­òG\Ômàó"oýu½Zhî˜3ãF‚9&¶ÅóDDDDDDDDDDôÓô€Æ¨Õâ’´ €ÕéDQMòËJPR_‡1™Ù¾åÌ\7 ºM[Ç% %éD8è”­ÖÄêc0%m"\Š÷÷~Œ‹º Àîš|m*FߘdEe´xÝàƒ0xà  ôMDDDDDDDDDD¡ÒÃ Ñ 7¡†¦¤£ÎjAq}­ïœÓã(ˆÐºt\¢PjžAãò¸ÎXw[ÎlÀÇÂ%»Î:{†ˆˆˆˆˆˆˆˆˆˆ~^ÎÉfaZ]À1§Û YQ°hÇ–€s 6lߌ«rúÁ¤ ¼öLãuVsèRïl8{í‰4.ùÌÍø¤1H2õÄѦb¬<üµoÿ™i½~ÑÉn‰ˆˆˆˆˆˆˆˆˆè§ ¤¬(¨hlÀÅG¡U©é;®Óc`brÀ5{ËK¡U©‘k†Q«m÷¸DÕ¼äØüKpmúÕ¸¬û%P‰-ÿèHBógghDAÄÍÙ³ð—ÍÏào[ÿ‰-Û‘•ܘޭ^³iëTTV¡{B<—:#"""""""""ú‰ j@cw¹°¯¢v— V§õ6+<²Œ(ƒ—õÊ‚Vuòö&®ÅÙ1‡ª+¦Õ¢—9®CãuÖ¬¬éxu×Û¨´UaÜâÉЫtˆÕÇà¯ÃžÀœì™€g·½ˆ-ÛQa­481}å@¸Æ„w.%`Ü[soÄS[žÃå[×g\{Æ>ž|úi¬^·³¦_Þx³+‘ˆˆˆˆˆˆˆˆˆˆB,¨I†[öàHm  Œ-2MñHŒŠA„^^ŽKÔ’ìè,l˜¾ oíy_]ƒj[ ªm5ט|5Ë7ciá ß{—ì‚eÐ꬘dS"&¥\åE« nË}Æ>ì;@†eþˆˆˆˆˆˆˆˆˆˆè§!¨M˜V‡)ý:·ÓÙ}ƒ2.Q{äD÷Æ —ý­ÕóK&ý·Cãê6Ë‹VáêÔ+‘lJ[Ž”¤¤gî†o?ûv»#'NÀÎ={º¸S""""""""¢ ƒ*˜ƒK¢ˆ‰ÉÇ *+àô¸¡%¿ã 6o`e0žuìöÔ]hdYÆeÃ/Á%C†œëVè#ôó Ë2fÞ~ªkj°ñ«Õg𥥤`ùÇŸ`ØøË1mά]þ9Ôju—ŒMDDDDDDDDt!Ù4YÆ÷‡¢ÎbÁج˜´º€š›‚ B¯?ëxí©%ºÌ}æï¢#ý^¦Ok±öí?€‰Çþ<Ð{È`¿ëZZòlçž=¸vö,$ôÎBJÿ¾˜}÷]¨©­õ«‰ÏÊÄ“ÿ÷4nùÕ½ˆí•†YwÞoׯÇàqc™’„×Þ}'`ܶmůý2.„è´{$`ì”k:ü9ÜùÀý~ÏòÕ·k Ë2æ/]‚[}_‹ûòëÙ>ÿrÆ_û D¥&£÷Áxø‰Ça³Û}ç].Rú÷Å ·ÞÒâ³Üx×Oê «Í9ȶôÛì…×^ÅWß®Á‡¯¿‰ÜÞ½Î˲Œq¿˜ŒîÙ½Q^Yáw®¾¡‰}r0bÂUðx<׿dõƇ¯¿‰ï7ÿ€ÿûç?Z¼?µ,$ÓíÆºƒûà’eŒÎ̆®•ÿeÝ`³!B§‡$žl+¯¬{ËK;UKt!¸÷ÖÛ°cÝz¬_¹ _,XxÆýgƃÕK–á¶gÞ}ùßX½d™ï•Ø£§_ýÂÏ–aø—#&*}üq̾a–­\aW\‡Ãá««olÀs/¿„¨ˆH\1f,æ-\€'ž~ S¯¾Z­yöY¿q?šÿ)FL¸ ;ví´ÉSðÇGÅ÷(~9mz‡?‡?<ô0¾[ñ^yö9ÀŽ]»0úšI¸áÖ[°låJD„‡‡äÙþúܳ¸vöÈÎÊÂ?žz#‡Ç ¯½ŠË&Mð…jµcFŽÄg_|Ʀ&¿ëmv;–­\iS¦ÀpJÝÖ~Àî°ãù—_ÆUã.Ç”‰[ü¼DQÄ¿Ÿ{ ¸ùÞ{¡(ŠïܯýšŽÇGo¼ I’Z¼~Êĉ?z ^|ãu4?Þb  êgàp»±öÀ^8=nŒHÏ„º•/ùdEA“ÃŽ”˜X¿ã%õu;m¶M{j‰.ÝÌft3›}ïugøYHNLDrb"¶þ¸pÉÐ!Èê•ÑbmeUîzð<õÄ“xèÞû|Ç/2¯ŸŽ…Ÿ-ìé×ðî;uÓŒ™øçÓÿ‡’²2|¼h!þùôÓzÑÅ(,*Â;}è7öSÏ?þ}ú`ë:üܧKIJBJR¢£¢K>ÿ÷Þv;¼÷>âÌÝBòl;vퟟ}o¼ð/_vë,PC$ IDAToXóðã>Äsn̾~Þ›7K>ÿsfÎô±|Õ8n±`öõ3:Ô/|¼pÊ++ðØïžñ3둉ÿþ î¸ÿ7xñõ×ñÀ=÷`ÑòÏðÑüO1ï­·‘’”tÆë{àAŒûÅd|4ÿSÜsëmg¬%"""""""""¯ Ï q{<0étD«÷åaùîØ[^ ·ì¿\ŽÝå‚¢(mÚS¦=µDÔ9ó—.A}Cî¸iŽßñ+ÇŽƒV«ÅæíÛ}Ç$I‚ 0ƒ'*22`ìž=ºcw~>Þ|ÿ½—Ðê µÚ›?ß0u*nš1# œ‚÷l¯¾ó6"ÂÃqóÌ_ú¿ï¶Ûn2á‹Õ_ûŽ1=»wǼ… üj?^´‰=z`ôˆê¶ìصZÆ<ûénŸ}¦Mž‚Çþ2_}»w?ô nš13¯ky™¼S6 ’$aÇ®]g­%"""""""""¯ 4F­—¤e`bnLê3i±Ý_V‚µöÁ#˾:—Ç ˆnCèÒžZ"êœwï† ƒ¦%-íãt»!+ íØ‚Û7û^ 6Jêë°`ûf4Ùíí®%¢Ö5ÏΰÛ­ÖdgfÂív£¼²i))èÙ½;º™ÍˆŒˆ€A¯÷û_’$xäöÏ€Ô¿?ðv®ÿŽ[,¸òº©8n±´ÿNѼÄÙ™š`=[fz/:‡Ãÿs•eE‡Ð7'ÇïxnïÞدæ-\À»¼ÙàƒÐ;#³Ãý@VFêêëQZ^Þ¦¾øýc(¯¬À¼·ÞFáá"<ø‡ß·éºÂ¢"·X™yöb"""""""""â€FV”5ÔccQ´*5âÃOîÛ®Óc`brÀK§V#BoÀÀÄdµÚv×Qëz¥¦¾úvM«5“'L„V«Åw݉ï¾ÿþŒãI¢Ô®4§ë›“ƒ«Æ]ŽÆ¦&Ô74´XStì(væçáð±cg«-KœëÙ&ަãÇñÊÛoùÿà“OP[W‡»n¾%àšÙ7ÌÀ¦­[°qËf¬Yÿ]Àì™öö ×ÿâZÞ=qÎfágËðÖïãõ¾€™×Mÿ}o¾ÿ–®XqÖkÿýö[P©Tøå´ég­%"""""""""¯ .qfw¹°¯¢v— V§õ6+<²Œ(ƒ—õÊ‚Vuòö&&]àÌšCÕ•ÓjÑËסZ¢ EaQÊ++|ï.'êêëñ¿6ùŽe¤¥£›Ùì{?zĤ§¦â±?ÏÅÚ pÉ!ˆ‰ŽÆ•cÇ!59’”„ùヌ9÷ÞQWODrb"Æ^vââaމŠS¯EB\<@’Dx£Áˆ}ûújƒõlwιï|ô!ùã“8PP€aÆÎ¼Ýø÷Ûoã‰ß>‚ýú\óËiÓðÈŸÄÌÛoƒ(Š˜1õº€šöô ýrs1éŠ+ñÊ[oâþ»î†96¶Å~ãŽûƒ›fÌð…:Oþö|ýí·¸ýþ_cèÅù{ª’²2¼ùþ{˜yÝ4¤$%µéó!""""""""¢ 4nÙƒ#µ50h40j´È4Å#1*z}0oKtAzþ•—ñúÞõ;öö­1á*ßûE×\ã{…µËWàÕwÞÆŠ¯¾ÄËo¾‰Æ¦F¬øt/ €É& pûøxÑB¬Ý° ±~ãFTTVbü˜1§„Ò—;•,ËøÍcúöP‰ŒˆÀ˜‘#±øƒð‹I“Z½Îæð._xú~+Íž|úi,ül™ïý{óæá½yócFŽÄšeËýêƒñl*• ëW®ÂãOý+¿úŸ.YŒAýûcá{`Êĉ-^gî†+ƌū¿Æ5W]Õj˜ÒÖ~›=÷—¿`ȸ±˜~ˬ^²Ì·7O3ǃYwގȈ¼üÌs¾ã’$á¿o¾…—Àœ{îÁ—‹û–ÄkfwØqí³`4ñOþ±MŸ y '^~æÎ+äåå UUUBSS“––&TUU‰F²X,¢,ËjƒÁ v¹\:QŠ¢˜E‰Z·n÷›ÑÂ#!~”NŠŽ<{ ÑOÐÂÏ–aúÍsp÷-·âµü³KÆ”e7Ýs7>]²«—,èK/í’q‰ˆˆZã2…눈ˆˆˆègB­’Î^Ô‚Q£FM¡N„&Y–-ìjµÚiµZ]¢(ºŒF£ìt:=f³Y>tèb2™³Ù¬äææ*sçÎUN/¤{ÐQèM›<s} ¯ÿç]Üò«{ϸ/O[ØvL¿eæ-\€Wž}Žá Qu‰3"":?üéÑdžGþø$Ê+*±à½÷f4¶{œÚº:LþåLü°m+Þõ5̾aFº%""""""""úùc@CDtxø¾_!6:KW~QìØJQaÐë±äÃpõ•Wý"""""""""j"¢ Èœ™31gæÌ_¯/éÂŽˆˆˆˆˆˆˆˆˆ.L܃†ˆˆˆˆˆˆˆˆˆˆˆ(ÄÐ…"""""""""""¢c@CDDDDDDDDDDDb hˆˆˆˆˆˆˆˆˆˆˆˆBLÕƒ‚ PEéŠáˆˆüÔ¬X†Òwßð;>d8’}òuDDDDDDDDDDÔ9]дÆåñ`éÎm­ž¿2§/Âuzß{«Ó{v"5ÆŒ‹“SÏ8öÅGp°²"à¸(¸nààŽ7Mt¹vÅ,,-\'?‚¿¼ScßµÅ/ÿ›Ùï̃¨ÕúÎ)ògOƒìp åñ?Ã4¨}?£Qã'@›”KÞ.Ô¯_ gyY§zíw}=öÞöËVÏGŽ…Ä aGDDDDDDDDDôSÔ€FE LL8^PY§Ç •(ùo°ÙQãYÇvy<Ы5èŸpO" =]J\uµ€¢ÀV°ÆÜ~¾söÇ ;DÆì>í[ÔhÖ·?Âúö‡ìt¢zÙ¢®l½Ý$ƒ‚Êÿ÷—¨×·RMDDDDDDDDD(¨(èeŽó½WÛŽ†¬(“•ƒFãW_o³h[@ãt{¦ÕúODçŽ*<º¤d؆eož_@cÝ—Чgü,‚Œ”?>CFÖ¹nƒˆˆˆˆˆˆˆˆˆ~‚МÊ#ËØTT«Ó‰±Y9ЩÕ5 6+A@D¾ÀuyÜPKÒYëˆ:kWuþºùYl,ß ?ÿù4’L=¥–r\2<*¬UøÛ¥Âîñ]»¸p9®[11ºhì¹q#â þâîš|ÌÛ¿›Ë·á@}ê Xzõ<ŒKÕ®àï[_À3Ûþ…;rç +*oîyûëââ¸ø×eGŸ˜l_í=ß>„×w¿ë{ÿÔ–çðÔ–ç|ïWMY„+“ǵû³ ëÓö#‡aÝ›ïwÜr" 1öéï;殯Çþûnƒ*<ªˆ¨¢¢>x("†€h0´ûÞÍJÞ|µ_®Däec‘xÿo}Ç=ñ,{ópÓmˆrß5ö#E¨\ð1¬û÷ YÙH¸ù¨cÍëáµQ»úKßû¨1ã‘p˨Zü)6n€»±¹-jwm³¦m›QóÅrX B2Ö§âgß )ÌÔ¡ˆˆˆˆˆˆˆˆˆ¨mAPAPºb¬4N· @EŒÎÌn5Xi°Ù¡Óû-S–WV Q‘ßÝLúÓfàuµ÷}‚Û¿ù dEFbX”Zʱ°`6”nÂŽ_~‡xCºãñ»‹îÇ}k‹?|ÿgLJ¹‘éhp6â×kü{ôó~áŒÅeÅkîǼý îYk¯kwÍcÖ;ðêî·áô¸ÐÝFg¾9¶Ãç_ŽÝ³6"%< Ð#,W§^…-ÛQa­D¯È4ôŽÊôÝÓ¬íÐçeì7Õ+–Á²/ (€ €/øë{J@ÓPAᬪ€³²иy#Jßz=î}‘#Gw¨‡Vø½¢È¿ÃõëÖ øÕŠuŒ®º4lÜËÞü'ÿ¿øýÅîíw;–­Âª#«qëêû°îº•xtßPj)Ç´^SpCæT¿±¯[9_ù驸9ç—Ós$Â5áÐK:$ã;ÔƒtbO§”ð$¬º±úì­Ý±‹'£ÜZ¿n~ï\þ à‰ÁÞàèÚ³°´pfd\‡¿¼ÓŸ™1§Q„l³Â~¤È»/Mu\5Õ$ ½s|µºää|°PxŽ7ÁVTˆš•ËѸeJ^{aýAÞéž|N„EŠçd@ã¬(Gɯ@ô§žƒ:Ö wc#Šþø(ìÇŽ nÍ×0O½>`¨òþ•édoªðt¿ó>ßûØIS;i ê7¬Å±ž…ýèa{ç vòTèÓzAßÝŒ´§Ö’·•‹?…¦[Òþò Ôæn°9Œ¢¹¿‡«º U ?AüM·µ{ÜS)Š7üW«C6Á’ˆˆˆˆˆˆˆˆè'IEÅf³)’$)Íß«µëú ôäÇíñÀ¤ÓAE¬Þ—‡å»w`oy)ܧý/v»ËEQÚ´ÿ ŒÊ葽²òJ‹ñùîq¤¶:A —v¾‹ËŠûúßá[J,Vƒ;ûÜ øæØ:¿úw/1ºhl(Ý„9_߃7÷¼‡8C7¼6æŸ~uË6ãË#ßÀ¬Å†é«ðÄàGpiÂ0ôÉA¯È4Õ'—÷jO’àýq6ëc«dGgááA¿¬/ÝØEŸLë$ƒúô €åÄ2g–}yCfD­6ð"A€d GX¿H~ôI¨£c ;°.ìÒÞ„Ÿâ9*׬XÙaGÌ„«}Ë™©ÂÃ=þ*Àñ]?¶8–eÏ.4lÜà{5íØÚò=O„fÚ‰H{ê9Ä\u5 ™½[ žÚR[µx> (ˆ½æZ¨ÍÝxƒ®˜I“ Å>ÚÓÜ1g>yç]üù±?´xžˆˆˆˆˆˆˆˆˆºFÐÿ‹´Q«Å%iÞ/l­N'Šjª_V‚’ú:ŒÉÌö-gæò¸Ñm h´º3k"ÐË—ǃbË‘"DÂ`Òκ!j­Þ/çŸßö2^üñ5ØÜvØÝvØÜv€Óãô«O0Æã±ÿ´•7á£}Ÿ^ó‚/,i¶¥r;`hüÅ{Òt¦•èýqöœ~^ÔmàhSqŸ¼sŒ}úÃzp?¬ûò3ájX÷í=q¼_@­l³¡~ÃZÔ¯_ WUÜMmV€£´aýv]c¢w N™Ac-<¨^¶5Ÿ/ƒìtBq9!;½Ÿ«âv·8Túß_€!#묷š—UkeœöÖÚŠ¼¡•61Ùï¸>Ý»<£¬Ôoi¹ööƒÂàƒÚTKDDDDDDDDDÒ5l  rz B§ÇÆ¢××"9Ú»¤™Óã(ˆÐwlspµ$!7¡ÊêQgµ0 ¡N³{¼!Èà¸AŸ4ZIJçýSÒ!θ|˜Ú?`4¨õ5µözÀq×ñ.íA¼3%ÜŠ@£À;µ.#2í¬÷ë a}û£jÉ|XöîX÷åûŽŸÊÓÔˆCO> GY ¢Æ]ˆá# ¸Ý¨ýê 8J‹áijêd'þS }3hN °—7ˆÑ÷ÊDXÿUj5µ¢ZÓ¡ýgüœXrQñ´!9K­"Ëðoòë»™xb?.)Ìäδ»""""""""" ™64ùùùHJJRš:ý…©WK{Ê8ÝnÈŠ‚E;¶œk°Ù°`ûf\•ÓïŒÁKeS# ÚØ¶Y8DgÒ'&Û*D“« ¿ê‡/iM£·®öîC2)åJ¬8ü%n]}öÌÚ„Hm„¯.;Ê;ÛaGå.TÚªÐMôt¤_@#ûÿ]É÷€‹»ÎFQ Þ_õΆ3>[{zç@P©àª©†ãØQØAPk`ÈìíWW±àcØAÜÌÙè6m¦ï¸eÏ.8J‹!;ºsã9~Z&îA£KL­°²ÍŠ˜ ×øf›t¡yO,çÌ…m¨Dš¸x8JK`;TÓ Á¾söâ£}j`מˆˆˆˆˆˆˆˆˆ¨ãjjj“ÉÔæú ïAs*YQPÖPEЪԈô ×é1019à¥S«¡7``b2Œ-í_ ÆrÛŽÆ®’cH7wk1"j¯©éÞ}=¾+ù£M§£ÌRÞjý½ß>ŒRK9ædÏÄ’«?Âs_”/ïÖ>âWwi÷aÐJZ48qÅ’kñÅ‘¯}3e:ÓCógV·²"ciá <¿ý%˜4axbÈ#×dEy—œ` Öît„¨Õú˜ª¥  È2 Y½!¨5~u¶‚w}®®ï>RŠ£c*Ú»¤œ%œÞÏÊQ| Ί oÁ)AEø°K|µE| ÿûîºÚÝ·E¾åÅ\]Rkx1 får8JŽð~fÕŸ-Ä^smçz°ië,[¹[vloS=uÌYgИL&Ån· g«k‰Ý徊RØ].XNÔÛ¬ðÈ2¢ F\Ö+ ZÕÉÛ›tºgǪ®D˜V‹^æ“{uØ\Nì*9†ã;šìv¸<èÔjô히Þñ i•(Àä´ øû¥sñ䯧±¡t6”nà B"µøÛ%Âí¹7>=°ŸX„xC^¸ìoP‹jüçòW1äÓ±øïþùøEú$Lë5Ð3¬;^õ î^ó vVïÁÄeÓ¡•´ט UxrÈ#¸§ïmíîA:1s$¯fŒ¯v‡ZTÃî±Ã¤ Ã{ã_CzDjÀ3ÎÊšŽWw½J[Æ-ž ½J‡X} þ:ì ÌÉžPßVa}ûÃ’¿uk¿ñ¾ïÓ? FŸžëþ½¨ùâs4nùªˆØ*Ü;Û¨y¨ùâsXòvìGŠxž£Ïÿ@—”Œn×Ϙ BÅÇ@¶ÛpàW·CÔéá±Z|㞺ÄYøàaˆ¿ñT|ü!,{ó`Ù›À;ëD27ëD_~e@ú#•ÿ¯OcN$=ü{@ÕÒ…°€»Þ»œÇbõõ*ê èyß¾ëÚSÛíúYhظ®Ú|àhâପ‚âr"vòT¿={Ú3|úi¬^·³¦_Þx³Å"""""""""j™^¯Wòóóa6›•³Õu·ìÁ‘Ú45Zdšâ‘ƒ}à¾íá‘T65"\§Grt,bÃÂÐ#2âé{/uÒ£=€2¦bÞþø_Ù¨²U£ÚVƒ{-Â5Þ©j¥–rÜ»öaÀ¿Ç<(­wfØs_üaðÃøóÇ=ß>„݇!Þà ïìs3.ê6ÿúñ5|[üÊ,¨²ygŽDhÂÛÝHâÉåÏ´’½£31,~0žü[$ã[|¾ìè,l˜¾ oíy_]ƒj[ ªm5~ãv„±oàÓÿž|ß§_@Mü7Cñ¸ÑøÃFÈT‘ÑH™u ìGŠPöþÛ~KœÙ ¢aã¿ë]µ5¾c§†%úô ô¸ã>T.™Ùf…>=1®†ýð!T|ò·ÿR_æk§#âÒËP¿~-¬ûòánl€§±î¦FH†–÷ÄjÞ æT§ö`Ý¿›7úÞ+·¯W]b²ßuí©•ÂÂÐëÿFù‡ïÀ²g7Ü0fç"fâ5<¬ÃãžÊîðÎæÒs/""""""""¢ N¼Ì;WÈË˪ªª„ªª*1))I¨¬¬”t:$‚J–eµF£ÑȲ¬—$É (ŠI–åèuëÖ- åst^täÙkˆ‚Ä-»aq[¡“´ÐJ-/åw6oìùî^ó ˜ûbÇÌõ]Ü!ѹå2…눈ˆˆˆègB­:ó~ã­5jÔQkAhòxXºt gˆÎ¼D‘ÛÞu Â¥úØdßÕÖÍÈÖ¤ Ü] <a±-éJg5‡RU !'ÊCPªj·BD8„ÌÔ,ufµZ¡×ë}ï- òòòpìØ1H’›Íæ;×§OôìÙF£jµ›7o†Á`@fffÐûl²´$55Æ Cnnn¨nIDDDDDDDDDDtAˆ’L¢Ë…¬ÈØí(D½Ü„Ú,èmHî¯46yÿ,8 „^)2Ó ·@Þü#àp½›ÍµZ »ÝŽ;v`ÕªUp»Ý?~<Ìf3\.—_}dd$Ôj5ªªªpäÈ 4BgþtÉ —ËAI’ZAèè许☫;û1@—…0Qíö}øÖº}´½¡I ~+ ’ ¿È»,Ú B„ ò†-PJÊ!¤%µ•J…êêj¬\¹1113fŒ/—p:~³kšÉ²ŒíÛ·#%%±±±p»Ý°X,ˆˆˆ¨mË*bíê·+#""""""""""¢Ðj’-ØbÏÇP}ôP™—‡b³-»)…Á,E· €Îó6 %IDAT,ÚÓfì ÞÀÆb îýèõz455áÒK/E\\œß9‡ÃÑâ$’Àn·£_¿~°ÛíX½z5l6²³³Ñ§OŸ öÛé%ÎDQTšS#·ÛÝùŽˆˆˆˆˆˆˆˆˆˆˆ¨Í޹*¡@A‚*ÖwL‚ˆº,@…»6øMt€¬§ìóâãrz]Ð[‡ÇãAxx¸ßq«ÕЦ¦&˜Íf¿ã‹ùùùèׯ´Z->ìÛ§¦°°0`|AÇ£¸\.ˆ¢ØéÙ4!Ûƒ¦¦¦¥¥¥¨­ Á?""""""""""¢ „xbß”FÏq¿ãÅ»ïK˜¸´WW¢£PûW*ªˆ \2¬«¥¦¦öíÛçwüÀÐh4HJò_bmÇŽˆŒŒô]g;%\:}¿š`èðgÍû͈¢¨È²¬À;©ÕÄ(//HJJÂСC;z[""""""""""¢Ÿ=§âB™»Ú÷Þ¡¸ @ÁW@-¨ÐýÄrf‰ª8pÅ÷¶]ÈÒ$#LÔã¸lÃ~çQDŠ&$ªâZ¼ÇîÝ»QVV†ÔÔTddd¸\PªN™tátŠ¥´Âû^%AèvbÖN˜BÏîPŽ•n7 X¬PŽCHè!&ÈK¬0™LHOOGAAÜn7bccQ]]£GbèС$ÉW[RR‚òòr\~ùå¾cƒÁ÷÷ÓgáÞUÄA€ ʉl’$)ŠÒ±É4!ÛƒÆãñ€ß@DDDDDDDDDDD,²[í{Ž7‹‘"|QÔc´á"ä;aŸóÜpÃ(è‘¢N@†&’Ðò÷ò&“ ûöíCMMMËÍe÷¾€Ã¾c‘'BN`Ð{œÊÀ ƒ‘ !©g{¿Ã ƒÁ€ââb””” &&—^z)âããýêŽ?ŽÌÌLDFFúŽ¥¦¦¢¸¸V« z¯í h4¢V«}³eDQTìv;4r""j5&3fL'[%""""""""""º0DI&\gÛæúpшaú¾íºGD„wÙ1µZÝÊ &ˆWŽjטBJO)¡ dZÒ»woôîÝûŒ5YYYÇ4 Æ×ê5‚ (‚ (»ÝNçËK:²$ZÈö !""""""""""¢ó‡pb¨à/?ösp"œé2m ht:¦hµZE£Ñøp8Š(ŠJsc]ÝGMM ´Z-’““Ïu+? Í9ˆ(ŠŠ(ŠŠÃáðe"jµÚ/?i‹.݃† ÑùÏívãÀ:t(÷Žo£æåͺj¼64&“IÉÏÏÌfï†C*•JQEñx4z½^©©©Qššš«ÕªH’¤ˆ¢¨H’$K’$˲̀†ˆˆˆˆˆˆˆˆˆˆˆ~vdY–%I’O]MÌjµ*MMM¾÷ùùù0™LŠÙlVrss•¹sç¶äthJ¥R@’$Åét*.—K‘eÙ#I’§#ãÏ$IòȲìñx<²Ûí–5 œÌLÚëô€Æoƒ›Ó“°°0E£ÑøÂ›Í¦¨TªSgϸ;ÒÑyÎÝ<‹F¥RÉ6›M‘$I€ššE¯×ûöŸiaöŒ_þt`V«UŒF£¬R©F#{<·Z­v»ÝnW'Œˆˆˆˆˆˆˆˆˆˆˆè¼äv»]jµÚ Àír¹dF#«T*Åh4Ê&“I k×LšÖ_’Ó¼ÉdRòóó}.—Ëãp8dF#˲ìq¹\.Q}0"""""""""""¢ó•(ŠN—Ëå’eÙ£Óé<‡Cv¹\¾­_NÝæ”Ù33g|ãí†sçÎUšC³Ù,›ÍfÙétzŒF£l4=Ü‚ ¸T*•SQG—<%ÑyDQ‡J¥r ‚àà6£Ñ(ÿ{w“ÓÆFaøTU»ÛM° Á0ãMdÙûÉ&² ¼€(#[–"™\»ª¾;€âbÇ Lè\½ÏÄ´wÍ_vÛ¶1÷“óós›ÍfZÒ¸ÇþþòòÒ}þüÙ¯×kwqqá¿}û櫪 ’ IE×u¥sn\ʼn¤±™Ìl$©ðÞûcðÞ{3s)%Bpf¶sÿ{×ëU„^û ÞÍ·£ ’9çîŠsΜsÖ÷½¼÷É{ŸÌ,šÙÝ@å6Èlû¾ÿÇ̶£Ñ¨•ÔKꛦ‰oß¾M‹Å"M&ûðáC:ðÝ3=:ÐH»‘f:ºåré˲ mÛæSµm[EQ¦”ò{!ÆèCwqF’~höߊ ÏÀÄŸô},J2÷¯óYsæ½O1ÆBH)¥(©÷Þw}ß·eY6)¥F{qæË—/ù döéÓ§´wËß4?üÝÇýr¹t¿ZÒTU5’T´mŠ¢ð1F_…33cô9ÀŒF£›Óí™”!•÷þ.ÆHR×uÊ×·Ær éû>•eudº®kCg TÅS?›ÍìêêJ’´X,Òt:µ¯_¿ªª*I7Ñ%¥”¼÷½¤à½w’\×u>¥äʲt9ÀìOœ†f†ºì`Hî¯Tfç\ÞûüjÞ{Ûn·*Š"Ýþ]J)¥c !t!„§,gôÔàछG]]]¹ûKšÅbÆãqF!„Ú¶õeYú£‹1º”’«ªÊÝ0ûAfèü½ò‚æÐµ÷Þš¦±üsY–©mÛT–eŠ1Æ®ëâv»ñ9˙췴i–Ë¥÷îË;+Š"ô}ñ'''.Ƙ3;¯u]dÀ«Úl6B°Â]`iš&UU•Š¢°Íf“Å™Ùlf———÷£Ì‹šÿûÙ’æììÌ}ÿþÝKR]×¾ïûûäëj^KÁŠ¢¸‹+9ÊHÒ›7oÒjµ²âÌ“éö¬@#^Òl6·^¯ýÙÙ™“¤¶m$u]÷Ëû퇀c¹aF&IeYš$­V+›L&©®k;Ör&{n9¸¤™N§îúúÚm6'IMÓ섚n^ÛjµÚ 3UU™$Õum§§§6ŸÏu¬åLv”@#ýi¶Û­{ÿþ½$éúúÚIR6CS×µIÒéé©IÒ|>×x<¶ÉdbÇZÎdÇ &?,i$i½^;IÚn·N’r°šù|.IÇ&I“ÉÄ$é˜Ë™ì¨Fú/ÒHR5Y6C“ƒLv~~n’tÌåLvì`r·¤‘¤j²ý`09Èd³ÙÌ$é˜Ë™ìEM–C;ýpðZrˆÙ··š‘hõ¹? 7Ú³ïha&{•@ðùkÍŸú|€—rô0“ù—ú`F ÀÿÛ¿4y¶qò-ðžIEND®B`‚kitty-0.15.0/docs/screenshots/hints_mode.png000066400000000000000000001730321356737523400211150ustar00rootroot00000000000000‰PNG  IHDRDo†it pHYsÄÄ•+ IDATxœìÝéSW¾?þ£}!@±#Œeƒ°YŒpâ%^ðzS3±'6±kªîäÁÌ­›û`þˆû`*óè¦*É$vâúÚ'Áëdì`ÇÆ ¶Y³Ì*ÌbvÒïÁùM" Y­ „߯G uºût÷éÓgá;ðw¥€p‚ê$`ÝÀkh, : X@u°€ê$`ÕIÀª“€T' ü­)??×®]‹åã?ÙJaÍ}ô!¤ªªª££ÃŸEý÷ÿ·P(¼qãFccãri¶oß^XXhµZÿò—¿ø³®5 55uóæÍ]]]vW¬[·N¯××ÖÖööö®`«DÈò§Z­Öjµ‰‰‰QQQ|>ÿ“O> êê \„®: ŒBÈüüüJ²ò233µZ­Z­nnn^\\\‘8NYYYttôüü<ª“HHògLLÌîÝ»“’’˜Oìv;‡Ã±ÛíÁ[)„ T'¸ê$ƃ6lØ “É CmmíŠÄ°aÆèèh»Ý~÷îÝ `µ vþLHH8zô(ŸÏ·Ûí}}}ccc333333¨N ÕInðù|‚ê$B!sssuuu¥¥¥EEEOž< ý>áñx[·n%„477û¹´“'OÆÅÅÕÕÕݼy3Ñ­Œ æOwðàA>ŸßÚÚzûöíééé`¬Âª“ܨªªZéV‘GåççK$’¢¢¢Û·o‡xíùùùKKK÷îÝ ñªW­ æO­V9??ÿücii)x+€ð…™Ýà5, íæf0äry(W- ‹‹‹ !Ož<™šš åªßX111„W¯^¡. –óúê$>ŸÏ岨ub›>ܽiÛ o¦ÆÆÆééi>ŸOû…Laa¡T*]\\|ðàA(×û&‹ŽŽ&„ÌÎήt °z¹éì&—Ëóòò’’’T*•T*åñx„ÑÑÑ¿ýíonÁ6=!D£Ñ †ääd‰D255ÕÝÝ]SSc±X|ÞŒÂÂÂâââööö‡Æ´´´©©©[·n™L¦ÒÒÒÌÌL¹\ÞÒÒróæM:ŽlyyùÆÍfógŸ}ævûöíËËËkii¹zõªŸÛ«P(6oÞœžža±XL&SCCÃóçÏ’ýñ”J¥Ì¿===ÿûß !<O«Õêt:µZÝÒÒòèÑ#BHiiiaaáÌÌÌr+=tèPvvö‹/Ο?‚xØb{¼ÔÉd²ÌÏÏ«T*šÆ`0 ´µµBÚÛÛ‹‹‹%‰V«u}2äóùYYY„ææf?·W¯×ïܹ“~k·Û¥R©V«ÕjµµµµwîÜa’q8œ—/_ŠD"‘H$“Éè„M›6mݺU&“1›IÿxþüyYY™X,Öh4CCC®{#33ÓmüAЇ-¶ÇË¡PxäÈ‘HÔØØèZ—”––¶oß>·ý³œª“FFF…B¡@ R©T(.·Ò`ï…B‰D¢T*>Ls/Ö=33333³¾¾¾ººÚÏU477oÙ²%&&Æh4^ºtÉ›Ÿp8‰DâsMPqq±P(œŸŸ÷¿VŽËåÒ*°ÈÈH·°°à•Ûêì />äVù“"‘Hh~عsg~~þk¯·V«utt”þ) -‹Så‘ÍfsüW TTT0™¢Ñh4ͦM›ª««<„áîW• %%%%%%KKK]]]“““sss|>_ 8={û–žÂçóÓÒÒª««&'' ŶmÛÒÒÒT*•^¯ÿùçŸ}Û úœS__ßÐÐ ‹Oœ8ñüùóªª*‡süøq±Xœ””Dφ‡‡ûúú’““ \«“222„BáÔÔÔ‹/üÙÞ¼¼¼={ö,,,TWWwuu™ÍæØØX£Ñ¨Õj‹‹‹ûûû™UÛívÚ–²qãÆÝ»wËåòwß}7##ciiiddd||üÕ«W]]]4ÉdQ©Tyyy®ÕI999<oqqñ—_~ Mœ­V«‡‡‡=§ÏÊÊÚ½{·D"éíí½råÊÌÌŒã·{öì™››s¬”q"—Ë !>\XXð'rBȵk×ètf·¦¦¦×Îì¼óŇüÏ*2«HKKS*•ÕÕÕƒƒƒ®·ŽÍ0iäÝÝÝ/^\nùçÈ‘#iii7nÜ „$$$ìÚµK©TîØ±cppÐd2yÞþ~U”ŸŸOihh¸uë–7?f›ž²¸¸øé§Ÿ2oÅçç竪ªþð‡?H$’ÄÄDŸ«“èM&óˆ866{ïÞ=ú;88¨Õj% 󓺺ºäääôôô¨¨¨‰‰ Ç¥åææwM{Xm¯\.ßµk—Ýn?þ<óX5<<|áÂ…ÊÊÊøøø-[¶¸Öd‘=ÊåòK—.=þÜm»‰¦¦¦íÛ·çääܼyÓiÄÜõë×B:::ìxXñáx¹UTT”m6›/^¼è´bbböíÛGùöÛo™í2›ÍcccKKK®ÕI> Æþñ9Œùùù³gÏ2ööö~ýõ×|ðALLLyyy{{»S¶:::†††4Myyù7ß|ã!ebbâÁƒéNNIIyÿý÷ÏŸ?ÏœhQQQ6lèïï÷°„ÒÒR>Ÿ?;;»"í\‚z¾*ÿ{@ؘ˜øì³Ï˜ƒ¨ë-!dÓ¦MiiisssgΜ™ŸŸ§öôôœ>}úÔ©S …b×®]_}õ•ÏË€UîWÕIô±'%%E,3O°MO±ÛíN=Ú,ËÀÀ@ff¦R©d¸Ëb>™™™‰uü×)AggçÄÄDTTT~~¾cõH$Òjµ„מS¬¶×`0‚¶¶6×WôõõõIII\.×õñž~b³Ù<÷'jiiyë­·Äbqfff{{;ó¹R©¤c¬8ÅìxXñáx¹JKK+//·Ûí—/_vÒeÛ¶m\.÷éÓ§®Ïüt‹–k@ÇV0öe4KJJÜ~å:*Ý¥®udV«•6)R(111þjsçÎ÷Þ{/===%%¥··w¹dÛ·oçp8/^=pà@\\ܱcÇΞ=KTAA‡Ãq­±eDEEÑ¡Žîß¿¿¸¸ègÌ>êùüï ciiÉ)€\o !EEE„ÚÚZ§+¡Åb¹ÿþÞ½{5R© Í[z¿zø¼sçŽÍfS«Õ¿ÿýŠ^;ò ÛôË¡O˜À·Ÿ“=;±job·Ûëëë !z½ÞqÕÙÙÙ<¯¿¿ßõAˆÕöêt:BˆÛötŒ.—Ë íö˜ÍæÎÎNBH^^žãç´iÒÌÌŒSO½`ÇÊÿËT(àp8wïÞíééqúÖC Y¾æÅ7ÁØ?¯å:‘‡:2&'Ð àýôâÅ ºÃËËË—K“ššªÑhž={ÖÞÞ>66vîܹ‘‘‘ˆˆˆ£GÆÇǧ¦¦æççÏÌÌxèÉXVVÆår'''Ÿ>}êÌ>êù‚<ã!“û½U©T‘‘‘„¾¾>×o™>}Žd°ÆüªuRGGÇ×_]VV¦Õj·mÛVZZúôéÓ,7’.ÛôËñ³ù׳Ûö&MMMF£Q$åææ2ý>rrrèW®é½ß^‡C_þççç¯_¿žï€Çã1rt„#§ßzßv¦©©)+++==]&“1³zÓê¤ÖÖVÇ¡‰Ç{¾/êàÁƒ‡þv``ÀíüñqqqôAš]ØQ`惱¨{÷îÝ¿ßíW®Í[|èvD¶éƒÄ·Gz‹ÅòôéÓ‚‚Z$—ËSRR»9òr{™Á¹§§§—Øl6«Õj³Ùè¿Ëm !ÄmWGÏŸ?Ÿ™™‘Ëå¹¹¹?&„$%%) âRšx¼çOÌäääìì¬T*ŽŽV«Õ±±±®uFÌ”íV«Õu ÁhDºœ–ì}âå6ж£1›Í Ìd2uttdeeÆÎÎN׺­ÑÑÑÎÎÎÁÁAæ³Ù|îܹ½{÷fgg/--Ý¿ßCO7£ÑÈápÆÆÆZ[[0[Á>_‚Wé´Š 5€b+ÜŽ’nµZ…BáŠT@h¸ŸÞ~hh¨ªª***Ê`0”””¤¥¥;wn¹ÖlÓœÏõõõƒA¥R%''÷õõåääp8§A¬]½v{- ï¹»»»¦¦†UHÞWOØíö–––¢¢¢¼¼sæŒÓñb†ž‰ŒŒtÚ~®ÝUðª“Xa¼p8§ú:ï;!äµs±y¯¦¦F§ÓÅÆÆæææºö(¬­­uý‰Åb¹xñ¢T*]\\ôpeÐh4´£YMMkEU x®Ê öùØè!Œ ÕXÓ? …ë0OB¡Öçºm»kƒ§ç™‰‰‰êêêï¿ÿž¢Ñh²²²4:>޾61 U¥R©Õj>ŸŸMq;aShâa»LŸ-,,|ÿý÷‹%::z÷îÝNß2»ÉÉÉ®¿ lW£`ìŸÀ†Ag*÷nÆØØÍ{F£ÑíBË™››ó\ËL‡d¢  ü Ò-ºv¹\î9YPÏ—T;µ?Ýøø8]~ff¦ë·ô¤³Z­Fj€p÷ú'¥ááaúäàåHÛlÓ„?oûëêê!:.555>>~jjŠÕSÐrÛKsäÈVcÖ0šÞ< Ž Bòòò233E"‘ÙlvÛS/4ñx) ­3ÆÆÆ._¾l·Ûsrr6mÚäø•Ùl~ùò%!¤¤¤ÄuÈá µN jߥ×bò8m—Z­.--%„ܾ};°k¼wïžÕjŒŒtÚùþHMMMMM%„ܹs‡Õ¯ôz½^¯§Íš<£#))ÉsRPÏ—µN Ò*¬V+½ÈÐ1¹<V>yò$”ý Ä~ÕÙM"‘,--Ñ‘AD"‘R©Œ/**âp8f³Ùu&¶éƒÇŸžýýý&“)>>þÝwß%„xÒ…Õövuu=x𠤤$##ãÃ?îéé2›Íf³y~~Þl6»m¤À¶µKSSSbbbnnn||<ßí%!‹Çê‰ÓÕÕUSSS^^¾cÇŽ¡¡!ÇÎ\?ýôÓoûÛˆˆˆÊÊÊ7n q¹\z¼èðRÁèìúFnnîðððÔÔ”R©ÌÈÈØ¼y3Ç{üø±Û1³ý1==ÝØØ¸yóæ’’’¦¦¦€ÔКˆ¾¾>×Ùú<زeKzz:!¤¿¿ÿµ›ÙÛÛ›ŸŸ/“ÉŽ?þóÏ?÷ööNMM-,,8ÅÔó%dc'o·nÝÊÈÈ•••?þøã‹/¬V«Z­Þ±c‡J¥»{÷nV «Á¿«“ÁŸþô'ú·Ýnw|yùòåÕ«Wæ/c›>¨üìÙQ___QQÁçóm6Ûr“û°½555CCCF£Q¥RÅÇÇÓêFmm-ÓƒÏç?~œYýãØ±cÌ£©Ùl>þ¼ÛÀÚÚÚvìØ!‘HÉ2=ÝB7ا¶¶V­Vggg:tèôéÓÌÀÀ===<(..މ‰9zô(sÈzzzhí¡ÓÓþÑ£GÅb1ó/mºuòäIÇdW®\ öþñÓ:É©ëŸÕj½yó&mkpµµµ7n”J¥………ËMBç=N§Ñh˦I„:2!Ä›*­ööö††Ú¬Æh42ŸwttTUU9¦ ÞùâCþg•? ûÖI´âŒþCIMMe6Š2::úÃ?0ÿNOOWUUíÛ·O&“zzšIÆápâââœ~Ëüíae‹ÅÒÞÞNáîííe† Z©x¼Øž8×®]S*•qqq{÷îu¬¨©©éëëËÏωD£££OŸ>}úôiEE…ku’J¥’H$NKæñxNûVW{ÿøÀ±¥ŒÝn_XXïîî~òäÉììlVj6›=zTVV¶eË–ÆÆFfŽãp8´r§³³“ößô«ê$BÈ?þXWW§Óé222d2™P(‰DnÇÒùâCþg•? ûÖIJ¥2!!Áñ±Xìø‰ëÛÝÝÝ_|ñEqq±F£Q©T6›mxx¸¥¥¥¥¥%xc¨À*Á!vBVrÈ—U!&&æÔ©S\.÷‹/¾àpÅ!£ÓéŽ9Bùë_ÿêvîö  …ÿùŸÿ)•J?~|ëÖ-Ÿ—³~ýúŠŠ »Ý~úôi:¼¬Z+9ÚË*uäÈ.—ÛÜÜŒº$V, íæ–ŸŸÏjÈjG\.·¬¬ŒÒÖÖ†º$€Õÿú$k—ËMLLT©TiiiZ­–ËåšL¦ëׯ¯t\áççŸÞ¼y³B¡Øºu«ãð:ÞÛ¸q£B¡°Ùl¿ ,¼¡­“$ɱcÇvîÜ™™™ÉápZ[[¿ýö[«ÕºÒq„Ÿ¥¥%Z ´aÃ:Š3+|>¿¤¤„ÒÔÔôêÕ«ÀÇö†¶Nš›››™™yùòåððp{{;ú×ø£µµµ¨¨(66vëÖ­—.]bõ[ƒÁ —Ë­V«ÿsÃ@h`(n€„„™LöâÅ ¶3ÄËd2½^o·Ûkkkƒ&t¯½¡c'€oP, : X@u°€ê$`ÕIÀª“€T'¬A|>?""‚Ïç¯t °-û´¹}ûöÂÂB«Õú—¿ü%¨¨Õj­V›˜˜Åçó?ùä“ ®”@ øè£!UUUl²ü¼JüÏÿü!äÌ™3&“i¥cñJ~~þ®]»,ËǼұ¼qÖ­[§×ëkkk{{{W:_8ÅûÅåU€•²lu’@ „ÌÏÏoÝ111»wïNJJb>±ÛíÇn·o¥ðf A~€Š‰‰)..&„ 666Òß~ûm©TJ¹víîÂápÊÊÊ¢££çççñ:)àñã~^±¼Šë¬ +V”pôèQ>Ÿo·ÛûúúÆÆÆffffffPÁ€Ç€ð"‹×¯_OÌãVFFFtt4!äúõë‹‹‹+_ ñx<>Ÿ¿°°úUoذ!::Ún·ß½{7ôk÷_ÀãÇý"¼„cyõM»¾ÀZµluu%H·gwðàA>ŸßÚÚzûöíééé`¬å qòäɸ¸¸ººº›7o®t,«—÷ù™íþÄþ›ÍFÿxõêó!}x›]©g­àï;wîLNNþöÛo·7x<ÞÖ­[ !ÍÍÍãããNß®þë›çø}óæÜ/V[<¾ Çòêê¼¾°µluRUUUðÖªÕj###çççÿñ,--oETPó3ó¸566æôáèèèÊÄ4‘‘‘999B¡ðĉUUU¡ìq–ŸŸ±´´tïÞ½­4€‚?îá%Ë«oÔõ Ö°•™Ù-&&†òêÕ+Ô%€+[ŽŸ¬ SSS_}õÕ«W¯Äbñoû[½^šõ …B:€Ë“'O¦¦¦B³Ò ÷øaõ Ryõº¾À¶2ÕI´søìì슬…Ïçs¹,.#lÓ‡»7m{ˆyÜrìÁD;ƒ¬ÉÇ­±±±¯¾úêÅ‹\.wÏž=o½õ‡Ã öJ ¥Réââ⃂½®`÷øaõ RyõM»¾ÀZõïÎnï¿ÿ~bb¢Ó×cccŸþ¹Û_nÛ¶M¯×·µµÝ¸q#!!¡   ))I*•NMMuww×ÔÔX,Çô‡ÊÎÎvü$33óÏþ³ã'Ÿ|ò‰ë F­V«×ëD"Ñèè¨ÉdzòäÉÈÈˆç “ÉdéééñññjµZ*•J$’Ÿ~úééÓ§ôÛÂÂÂâââööö‡Æ´´´©©©[·n™L¦ÒÒÒÌÌL¹\ÞÒÒróæMfœÅüüü²²²¡¡¡ .ètº‚‚µZm³Ù›››}˜ŠØQnnîöíÛ…Báwß}×ÓÓãômDDÄ©S§ÄbqMM ShÞ³gãìÂÂÂÂÂBÇ_ݸqƒßÑ‘B¡Ø¼yszzzDD„Åb1™L ÏŸ?wJöÇ?þ‘Î0Bõôôüýï'„ðx<­V«ÓéÔjuKKË£GˆOû3€”Jeee¥H$ºzõjKK ým~f»?Y¥///߸q£Ùlþì³ÏÜ®}ß¾}yyy---W¯^õ¼±+N.—çåå%%%©T*©TÊãñ!£££ûÛß’ž¢Ñh Crr²D"Yîz ÛüéÏñb»½Á8KKK gff–[)½¿xñâüùó!ˆÇ7ôXÌÌÌ8ŽNM?|mgÏ×B‡Ãù¯ÿú/³Ù<333;;;;;;66ÖÓӳܸE>_oY™ŸŸÿæ›o¶oß^PP°eË–èèè+W®ø“ó=‹Å[¶l!„ÔÕÕÍÍÍ9~Åj{Wê~ê!~p¿ð!~Æ*)?¬òª?×7€ÕãßÕI###‹‹‹B¡P ©T* =üR"‘H$¥R¹sçÎüü|æ=jttttttJJÊ—_~éXw`µZ™{ddd¤P(´X,N7cæu %***²²²È¿î²F£ÑlÚ´©ººº¡¡Ám`*•Êh4jµZ§F2™Œù[$I¥ÒäääììlZè‘Éd˜ŸŸW©T4Á`hkk£ÿ …Bº½‡fBâp8™™™™™™õõõÕÕÕv—g­­­ëÖ­ËÌÌÜ¿ÿ—_~933Ã|Åáp8 ‹{zzjkk™Ï¹\.}ò‰ŒŒäñx Nåi·!z½~çÎtÜJ»Ý.•JµZ­V«­­­½sçŽãJ_¾|)‰D"‘L&£B6mÚ´uëVfOÒ}ÛŸ" 9"‰™gÂ>?³ÝŸ¬Ò···K$­VëZòæóù4G577³ÚöÐ3EEE®ÍmhŽò?=—Ë}çw6nÜøÚë +ló§ÏÇ‹íöé||þüyYY™X,Öh4CCC®{#33ÓmüAŠÇ7nû}¼¶3ˆ7×Bˆ\.§aGEE9~ÞßßÿÓO? :-Ö·ë­l6Û?þ822²k×®ÌÌÌßýîwß~ûmf«(.. …óóó®µ~¬¶w¥î§â_î¾ÅO­žòÃ(¯úv}XmþýsýúuÇ/ÊËËéË¡·½´´4¥RY]]=88811¡P(¶mÛ–––¦R©ôzýÏ?ÿ̤w|öî»ïfddtww_¼xq¹ås8œ#Gޤ¥¥MLLܸqc``€’°k×.¥R¹cÇŽÁÁA“Éäô«Í›7oÛ¶ËåZ­ÖÞÞÞÑÑQ³ÙqâDDDÄóçÏ«ªª8ÎñãÇÅbqRRS|¡å¥R977÷Ýwß Y,F³}ûö¸¸8ƒÁ088«ßæ IDATøìÙ3{̳k×®}ðÁ …bÿþýçÏŸgJ6%%%III333W®\q,î\»vþAgfijjzíÌ,yyy{öìYXX¨®®îêê2›Í±±±ôÑ«¸¸¸¿¿Ÿ)¹Úívú.‘²qãÆÝ»wËårzÔ–––FFFÆÇÇ_½zÕÕÕåóþ ”½{÷ÆÆÆ 9m>ÛüÌv²J?<<Ü××—œœ\PPàúx‘‘! §¦¦^¼xáa+®¤¤¤¤¤dii©±±±««krrrnnŽÏç ·½rئ'„ðùü´´´êêêÉÉI×VØæOߎÛí Þùh2™FFFT*U^^žkuRNNÇ[\\üå—_Bo–{Ü2›ÍË5EñòúO™™™ù¿ÿû?±XLŸ3ÕjuJJJ|||RRÒ±cǾûî»îînÇô>\oýñóÏ?>|8..®²²’Þq» ¹\^PP@yøð¡cûŠÕö®ÈýÔsüËÁý·øÉ*+?¬òª×7€UhÙ™Ý^‹Þ '&&>ûì3æ-Íüü|UUÕþð‰D’˜˜èóã!dÓ¦MiiisssgΜaæíéé9}úô©S§ Å®]»¾úê+§Ÿ¼ýöÛ6›­¦¦¦¾¾ÞÃëbZ–5™LLjll,66öÞ½{´eÐàà V«•H$NÛ;??öìYæÃÞÞÞ¯¿þúƒ>ˆ‰‰)//ooowzaå½ùùù‹/¾ÿþû)))¥¥¥t’šÄÄÄ­[·Úíö+W®øYÂËå»ví²ÛíçÏŸgŠ5ÃÃÃ.\¨¬¬Œß²e‹kÉ•ükÃårùÀÀÀ¥K—ž?îºc}ØŸQTT”m6›/^¼¸Ê‡u¯««KNNNOOŠŠš˜˜pü*77—„CÓ¤üü|BHCCí[·‚‘ž²¸¸øé§Ÿ2Õ¦ºžø?}8^¬¶7¨ç#!¤©©iûöí9997oÞt:5Ö¯_Oéèèpüa°ãñÁÔÔÔÿþïÿ:}øÿþßÿ[.½÷×BˆÝnŸžžfZý´··B Å¡C‡âããwïÞýé§Ÿ®ì%¥¯¯ïÌ™3ÿñÿ¡R©Ž;vùòe§ê??•––òùüÙÙÙåÚùzoEî§>Äû…Ͻü° Ë«l¯o«“ïcÄÒ[òÒÒ’SÏb±Ð73J¥ÒŸÈŠŠŠ!µµµÌ½™Yþýû÷ !Æq‰ä­·Þ"„üðÃ_§ÓpÉQQQtèœû÷ï/..ú¹´ÐßO}ˆ÷ ¬Âò+«­¼ °fø^´\qBËjÀç…«TªÈÈHBH__Ÿë·L騨XæÃ¬¬,Ú¿Ý›·v´HÁjÆ%ú·V˜6ç~V'BÛÚÚ8Îþýû÷ïßÙÓÓ9kèÓH¿ëWtŒ.—K‡ vâ;òazöÚ¦X …‚ֵݽ{×uðòUÈn·Ób·^¯w<5²³³y<^ÿrc¯wîܱÙljµú÷¿ÿ}QQÑkGÆa›~9þ_O|ÈŸ>/VÛÔó‘b6›;;; !yyyŽŸÓ¦I333N=e‚O°±ºþ{0::J›,i4š…æ—„„:|L`[Ó”••q¹ÜÉÉIÇáÉ}úû)Ûøq¿ðSx•\­¶ò*Àšáog7·ÅAŸ;|1˜×8Nͼ©¹¹9‹Å" é®T\\!äµ3¾Q´lÁjfÅ‘……³Ù,‘H"""¼_àr~øá‡¸¸¸èè茌ŒÙÙÙ«W¯ú?‡Ã¡»4??ýúõ|<)HÑUœ~ëá@3|ØŸ„{÷îÑwË-Эƒr8º®0šº©©Éh4ŠD¢ÜÜ\¦]}NNýjECóJGGÇ×_]VV¦Õj·mÛVZZúôéÓ,W÷Ç6ýrü¿žø–?Ù/ï·7Øç#VVVzzºL&cf¹¦ÕI­­­Ž§Xhâ *VןÏ_·n<yÞ^ú^Îl6{¿ÀåX­Vf“m6›ÿeB3ðâââôôô’›ÍfµZm6ý×õ·L\.w¹`|{¤ômÓ&''ggg¥Ritt´Z­Ž —Yu-ËÓ§O èã\.OIIY\\¤C·¬~&“éÂ… ¦¨¨H§Ó ½^_WW÷ðáC·½ئßò§ÇËËí öùH=þ|ffF.—çææ>~ü˜’””¤P(ˆËãhhâ *V×J§ÓíÞ½["‘LLL¼|ùr~~žŽ›Ng÷sZ:?q¹Ü;wnÚ´‰ÒÐÐpóæÍî[£ÑÈápÆÆÆZ[[²ÀßOYÅû…ÿVgù•ÕV^X3‚Ò:Éãããô…BáÚm^(ÒÙdßÑ¢§—½Ó=¼õüúžÓ©í G–2<<ìý—óöÛok4š‘‘±X±oß¾o¿ýöµ¿ò| ,ËÒÒÇëîî¦#SxÏ›â ûÓg·oßîèè‰D'NœˆŽŽ>|øð™3g^7Á6c{™¾¾¾Þ`0¨Tªäää¾¾¾œœ‡ã4(òê744TUUe0 JJJÒÒÒÎ;·ÜÃ<Ûôçsþôíx½v{ƒ}>Rv»½¥¥¥¨¨(//V'ÑŽo}}}NÓ …&ž buý'„hµÚÇOOOŸ={vppÐñ+:‘“Ûž;Œ >úŠÅâǧ¤¤Øív·SŒûC£ÑÐŽK555Þ·{õ¦uIhî§lãÇýÂÿxÖ@ùaµ•WÖ ÇN Þí™.ßiYŠ’J§‚f>¤ã)* o†Põá±Ç±Täôie||œmW WYYYƒÁb±\¼xñòåË6›-##cóæÍ~BŸQår¹ç%ÓQ²²²ØÚõ@ÉÍÍ—J¥‰‰‰åååÇçóù?¦o}Æçó:$ ›››™9€kkk»»»¹\îÁƒ—{ü¦…K™Lvüøñ’’’ÄÄĈˆÚYÀQWW…4##ãÃ?¬¬¬,//×étIII1112™l¹’–÷oCÿ<ÙÕÕEÛÞïØ±C­Vd™^îOŸÓ÷÷÷›L&.—ûî»ïBüœˆ*”$‰P(¤Ù@$ÅÇÇoÚ´éw¿û‡Ã1›Ímmm~¦ò§÷Ç‹Õöõ|tDÛ2äææ ¿Û:”Å$¬®ÿv»}rr’RZZJ«'!r¹|ݺu§NJKK#ÿ¾ÇÛóÝ{………ï¾û®P(ìëëûꫯœ:$}²íëëó¾¢Ê›í ÙýÔ‡ø½!÷‹-[¶ìÙ³gÏž=žÛ5³Š'ÜË«­¼ °füûìÑ£G粡¯ª¢¢¢Nž<éøƒ+W®Ð‘,Ù¾í)))ÉÈÈ Ó·Ç©©©ÇgŒŽŽþðÃÌ¿ÓÓÓUUUûöí“Éd$„ØívZ¢ ×VÑÕÕõÍ7ß¼óÎ;J¥2//Ïi†ìŽŽŽªª*ú·Ï3ÑBœšÊ[­Ö›7oÒwwþعsg\\Üøøø7?¿råÊÉ“' ÅÞ½{™øµ··744Ð×bF£‘ùÜq{©ššš¡¡!£Ñ¨R©âããããã¿­­­e^ùòù|æÐ0>Ž;Æ Ífóùóç™ß†`f–åÔÖÖªÕêìììC‡>}š“m~fx¿?}KO©¯¯¯¨¨àóù6›- u‡€@ øÓŸþDÿfÎDêåË—W¯^uš¿Œmú ò3zs¼|ØÞàŽÚÚÚvìØ!‘HÉ2=ÝBOðxý'„ܾ}ûàÁƒ2™ì½÷Þ[\\\ZZ‹Åtvö®®®âââå:»ùp¾{C£Ñlß¾ÒÔÔtýúõ`ŒÚ«Óéh+WVM{¼ÙÞÐÜO}‹ßÉ›p¿`*ƒ¼i¦å‡5P^Xþ]¤R©$‰Ó×<NÀÌpœtŒ°)(•Ê„„ÇOÄb±ã'®CvwwñÅÅÅÅF¥RÙl¶ááá––––––åÆà|ñâÅ矮Óé´Z­F£aõ$„Ð×ÑŽÁ³zîØ½ßn·/,,Œwww?yò„™„Ûgëׯ×ëõV«õÒ¥KNã›ÍæË—/=z4++«  ÀíP?þøc]]N§ËÈÈ oãE"‘Ûq;;;;;;cccÓÓÓãââ”JeDD„@ àóùÓÓÓL2‡ãtÜ !±±±ÌßNƒ¤µ%ùk]»vM©TÆÅÅ9Ö¸±ÍÏŽ¼ßŸ¾¥öì™ÑhŒŒŒlkk›ššb±©+G ØívÇI|¦¦¦L&Ó/¿üâ¶óÛôAågþôæxù¶½A:Y,–öövZ·ÒÛÛËŒ»Rñ•—×BH{{ûÙ³g‹ŠŠhÓ³ÙÜÕÕÕØØ888¸aò|g7Âþ|÷ÆÐÐPmmíÂÂÂÇýYÎr8­,èìì¤ý½÷Úí ÁýÔŸø¬ùû«ê$Vñ¬žòÃÚ(¯¬b'd%‡¼:úT`³ÙüîQ§Ó9r„ò׿þÕm™ÀK111§Nâr¹_|ñ…ÿ÷»õç?ÿ™ræÌ“ÉŒå¿QBp¼ Huýwëׯ¯¨¨°Ûí§OŸ¦Ãå¬,¶÷ÓÕ(áú«Ö²/`× «ÕºÒ!ü[TTÔ‘#G¸\nss3ž V?¯°†ë?!„Ëå–••BÚÚÚ±.&Üã÷®?°š­ýê$€ÇårU*UZZšV«år¹&“éúõë+¸‡ãkÉÆ …Íf Óñ€Ã=~¶pý€pê$€ “H$ÇŽ£ÛíöÖÖÖ[·n¡ÝĪ…ãkŸÏ/))!„455½zõj¥Ãa-Üã÷®?.Ptsss333/_¾nooA7|¤?…þx‰Á`ËåV«õþýû+‹/Â=~àúábíÅ ðf’Édz½Þn·×ÖÖ®t,¾÷øÖ4L` ^ã®tNP, : X@u°€ê$`ÕIÀª“€T' ü­)??×®]‹åã?ÙJa­Ú¾}{aa¡ÕjýË_þ²Ò±À¯¤¦¦nÞ¼¹«««±±qÃX·n^¯¯­­ííí]Á0V‰/jµZ«Õ&&&FEEñùüO>ù$¨«ó^¸ç§øÁG}D©ªªêèè`»4\?à Î_XBW@€2??¿Ò€³ÌÌL­V«V«›››W$‡SVV=??¦Õ‚ó%&&f÷îÝIIIÌ'v»ÃáØíöà­ÔKáž?®Ÿáå ?`ÕBu„%<­Z<ذaƒL&3 µµµ+Æ ¢££ívûÝ»wW$€Õ&ØçKBBÂÑ£Gù|¾Ýnïëë›™™™™™Y%£áž?®Ÿáå ?`ÕBu¬°“'OÆÅÅÕÕÕݼyÓû_ñù|‚Ç¡Uinn®®®®´´´¨¨èÉ“'¡?F<oëÖ­„æææññq?—æ[þ\m‚z¾ðx¼ƒòùüÖÖÖÛ·oOOOc->óœVÿñ l~¦¼Ïl÷ÏjÛŸ«-ß¼Éç/¬f¨N‚°TUUµÒ!À²=z”ŸŸ/‘HŠŠŠnß¾âµçççGDD,--Ý»w/Ä«^µ‚z¾hµÚÈÈÈùùùüãKKKÁ[‘oÂ=?#~\?ÃË›|þÀj†™Ý À, íæf0äry(W- ‹‹‹ !Ož<™šš åªßX111„W¯^­ÂgÑpÏá?¬~«ùü€UîõÕI|>ŸËeQëÄ6}¸{Ó¶ÀÓÓÓ|>ŸöÓ ™ÂÂB©Tº¸¸øàÁƒP®÷MM™]é@Ü÷üîñÃê·šÏ_Xå8ÄNçWÉåò¼¼¼¤¤$•J%•Jy<!dttôoû›ÛEx™>??×®]‹åã?Öh4ƒ!99Y"‘LMMuww×ÔÔX,Ÿ7£°°°¸¸¸½½ýáÇF£1--mjjêÖ­[&“©´´433S.—·´´Ü¼y“Ž+Y^^¾qãF³ÙüÙgŸ¹]à¾}ûòòòZZZ®^½êÛö2 ÅæÍ›ÓÓÓ#"",‹Édjhhxþü¹S²?þñR©”ù·§§çïÿ;!„ÇãiµZN§V«[ZZ=zD)---,,œ™™Yn¥‡ÊÎÎ~ñâÅùóçCöìÙ£×ë=$¸qã†ãLóï¿ÿ~bb¢Sš±±±Ï?ÿÜ›ÕÉd²ôôôøøxµZ-•J%ÉO?ýôôéS"÷AnnîöíÛ…Báwß}×ÓÓãômDDÄ©S§ÄbqMMMèµZ­^¯OHH‰D£££&“éÉ“'###þ/yÆ {÷îµÙlŸþù«W¯ü_àk‰Åâ?üP(>x𠦦ƟE±ÍŸŒ`œ_l¯o„ýù²mÛ6½^ßÖÖvãÆ„„„‚‚‚¤¤$©TºÜõ™^a<ìBÈ'Ÿ|âÚ &xùÍ•‡üÀêøú°ÿóóóËÊʆ††.\¸ Óé ÔjµÍflnnîèèð3~@ðÑGBªªªœ–¦T*+++E"ÑÕ«W[ZZè‡lóÛüÏ*½?÷_/áü]ç/¬~Îc'Æ¢¢"׿6t$HWlÓs¹ÜwÞygãÆÎÿ_‰’’òå—_ú<‡ˆH$’J¥ÉÉÉÙÙÙ´'“É80??¯R©hƒÁ000ÐÖÖFioo/..–H$Z­Öµ¤Èçó³²²!ÍÍÍ~n¯^¯ß¹s'ýÖn·K¥R­V«ÕjkkkïܹÃ$ãp8/_¾‰D"‘H&“Ñ?!›6mÚºu«L&c6“þñüùó²²2±X¬Ñh†††\÷Fff¦Ûøƒ¸\.­bˆŒŒäñx sssŽ œŠ¿###‹‹‹B¡P ©T* ½Y‘J¥2Z­Öé¨1[­­­ëÖ­ËÌÌÜ¿ÿ—_~933Ã|Åáp8 ‹{zzB<š@ ¨¨¨ YžzF£ÑlÚ´©ººº¡¡ÁÏå777oÙ²%&&Æh4^ºtÉ›Ÿp8‰D┼W\\, ççç}®åd°ÍŸTÎ/¶×7Âþ|‘H$‰D©Tîܹ3??ÿµ×g«Õ:::JÿŽŒŒ …‹ÅéáÓf³9þìüæÊC~`u|}ØÿB¡îÏÇ3›Ìáp233333ëëë«««ý‰9B¡ðÈ‘#"‘¨±±‘©K"ìóÛüÏ*½Ï÷_ïáü¥Ÿ‡õù «ß¯*AJJJJJJ–––»ºº&''çææø|¾@ `J'þ¤'„ðùü´´´êêêÉÉI…B±mÛ¶´´4•J¥×ëþùgß6ƒ–{bbbêëëÄbñ‰'"""ž?^UUÅápŽ?.‹“’’hqmxx¸¯¯/99¹  Àµ8›‘‘! §¦¦^¼xáÏöæååíÙ³gaa¡ººº««Ël6ÇÆÆÒªâââþþ~fÕv»¾Û$„lܸq÷îÝr¹üÝwßÍÈÈXZZõêUWWMc2™FFFT*U^^žkuRNNÇ[\\üå—_B®]»Fÿ 3ï455yžyçúõëŽÿ–——Ó!E<Û¼yó¶mÛ¸\®Õjííí5›Íóóóf³ùåË—>ïƒk×®}ðÁ …bÿþýçÏŸgJö%%%III333W®\ å”ÌçÈ‘#iii7nÜ „$$$ìÚµK©TîØ±cppÐd2ù³ »Ý^SSsøðáììlµZ=<<ì9}VVÖîÝ»%Iooï•+W+Ý!{öì™››s|¨s"—Ë !>\XXð'rÂ>’`ž_l¯o„ýùBW‘––¦T*«««'&&<\Ÿ›ÐÈ»»»/^¼¸ÜòCßœxÎ¬Ž¯ûŸžËJ¥rnnî»ï¾²X,fûöíqqqƒappðÙ³g>Ç¿œ½{÷ÆÆÆ 9mÛüÀ6ÿ³JïÛý—œ¿á~þ@XøUuR~~>!¤¡¡áÖ­[Þü˜mzBÈâââ§Ÿ~Ê<6ÏÏÏWUUýáH$‰‰‰>W'ÑšL&¦È866{ïÞ=úP:88¨Õj% 󓺺ºäääôôô¨¨¨‰‰ Ç¥åææw¯FYm¯\.ßµk—Ýn?þ00péÒ¥çÏŸ»}ÚÔÔ´}ûöœœœ›7o: ¹~ýzBHGG‡ãƒÏ*´iÓ¦·ß~Ûf³ÕÔÔÔ×ׯlØóóó/^|ÿý÷SRRJKKé$M‰‰‰[·nµÛíW®\ñ¹IŽo6mÚ”––677wæÌfþéžžžÓ§OŸ:uJ¡Pìڵ뫯¾òs-CCC¦¼¼ü›o¾ñ211ñàÁƒ´YJJÊûï¿þüyæÄŒŠŠÚ°aC¿‡%”––òùüÙÙÙyOÔóˇë[4Œ‰‰‰Ï>ûŒi•¨ë3 U~sÀüàÃþ§ûp~~þìٳ̇½½½_ýõ|S^^ÞÞÞîÔÄÏø‹ŠŠ²³³ÍfóÅ‹Wù°Ê>܃ ç¯g¡? ,üª:‰ƒRRRÄb1Sbð€mzBˆÝnwj‚a±X233•J%‹À]ëôÉÌÌLll¬ã¿N :;;'&&¢¢¢òóó«‡D"‘V«%„8ö`B%^o¯Á`mmm®¯ìêëë+**’’’¸\®ëãýÄf³yîÔÒÒòÖ[o‰ÅâÌÌÌöövæs¥RIÇ\pŠ?Øñ¬6‰ä­·Þ"„üðÃAz21%%%n¿r;j}œØµkWiii¿Éd:pà‡Ã¹{÷noooˆã)**"„ÔÖÖ:åd‹Årÿþý½{÷j4¥Réÿ˜GwîÜyï½÷ÒÓÓSRR×ÄL ÇŸ½xñ‚Ž>^^^¾\šÔÔTFóìÙ³ööö±±±sçÎŒŒDDD=z4>>>555??ff†é ⪬¬ŒËåNNN†lxu'A=¿Bp.WýAq}e~£›|Øÿô'n;ACmRà IDAT3Wf:A»[lãW(LÝ´ë`ÿ«÷ß ÂùëAèÏ_¿jÔÑÑñõ×_—••iµÚmÛ¶•––>}úôÁƒË=³M¿ þ½DËRË Ø´œ¦¦&£Ñ(‰rss™và999ô+×ôÞo/‡Ã¡/óóóׯ_ÏwÀãñ˜‚áÈé·žC\ãÏÊÊJOO—ÉdÌ,¿´:©µµÕñhhâYUâââ!AqæÞ½{÷ïßwû•‡Q~øá‡¸¸¸èè茌ŒÙÙÙ«W¯jÈ$ïãaÞT;u3¡æææ,‹P(¤HûïÎ;iii :Îi Œ8ÏGf2™.\¸ ÑhŠŠŠt:Á`Ðëõuuu>t;ô ÛôAâ[•‡ÅbyúôiaaaAA-ÎÊåò”””ÅÅEÇîc޼Ü^fpîÅÅÅééé%6›ÍjµÚl6úïrÛBqÛ´ÞÑóçÏgffärynnîãÇ !III …‚¸ÇCϪBçÁ j¿'ßö†ÕjeÖµÙlÜ¥Þ/ŠyÊnGùµZ­B¡0PU3&“©££#++Ëh4vvvºVŸŽŽvvv2Ÿ˜ÍæsçÎíÝ»7;;{iiéþýûZ™F‡366ÖÚÚ€Ù öù‚*Ý 6 q~ x~ðaÿ{ÞŸ´‹Ùlvû-«ø'''ggg¥Ritt´Z­ŽefìZå|¸ÿ Î_ÏB|þ@q?½ýÐÐPUUUTT”Á`(((())IKK;wîÜrçlÓœ‡WÁžÕ×× •J•œœÜ××—““Ãápœ±võÚíµX,KKK<¯»»»¦¦†UHÞWߨíö–––¢¢¢¼¼ªù9`D0¼ýöÛfddD,GDDìÛ·ïÛo¿ q ãããô…Bá:l‡P(¤³Y»}훚šN›››ë:*Jmm­ëO,ËÅ‹¥Réâ⢇+‰F£¡Ujjj‚75žçüìóËçëÛ0‚ôÄÊüæ[~ð¦u ÛÎÔt±Ç) :/;!Äí\‡lã¿}ûvGG‡H$:qâDttôáÇϜ9ðw9l3†—é}»ÿúç¯?B¿€pá©|311Q]]ýý÷ßB4MVV–çe±M@>WsLNNÒÞ7tJfV-í=o/…!++‹m!Ò±xúÚÄ4T•J¥V«ù|~vv6!Äí.¡‰Ç´¦@.—v±t&c…B‘œœØ%û#++Ë`0Њ’Ë—/Ûl¶ŒŒŒÍ›7‡8Œññqú„“™™éú-ÝcV«5 „Sccc4¯F·C,gnnÎs­4’‰6€ò3H·¼ÌŸA=¿BÐ*0¨ýqB™ßØæoޝûßÃa¥3—»íŠë[~^XXøþûï-KttôîÝ»ÙFëÛë3«ôþÜÎ_B¿€pñú’Óðð0-Ix9Ò6ÛôáÏÛ¿ºº:BˆN§KMMŸššbU*Zn{ébcbbŽ9²Ün1EOoІããã´Þ$///33S$™Íf·=B^¾|IIJJ lí H©¨¨ð0äm()•Ê}ûöBnܸ1>>Þßß÷î]BȶmÛ4M(#±Z­4“Ð1V<>Ð>yò$°mîÝ»gµZ###7mÚ¨e¦¦¦¦¦¦BîܹÃêWz½^¯×Óf žy™?ƒz~…¬uCV²üæC~ðæøúÜ:ÉõWjµº´´”rûöm×_ù–Ÿ©±±±Ë—/Ûíöœœœžbl¯ÏlÓûpÿÅù»\á~þ@ØùUáC"‘…BZ"‰Dñññ›6múÝï~ÇápÌf³ë´JlÓ?-½é”í\.÷Ýwß%„x¢…ÕövuuÑQQ322>üðÃÊÊÊòòrN—””#“É–+ù±m Dßåæææ ¿Û! B[ôáA&“?~¼¤¤$111""‚vñÇâââ?ÿùO›ÍyòäÉ}ûöeggGEEÉd2¡PȪL@ðùüC‡ …Âææf¦·Wmmmww7—Ë=xð`(«_ !·nÝZ\\•••ëÖ­“H$ ))éøñã*•jllŒVuÐôôtcc#!¤¤¤ÄÿãKÑ'™¾¾>V³YmÙ²eÏž={öìñ¦]˜—ù3¨çWÈÆ^ Þ*B“ß|ÈÞ_ŸÇN"„äææÆÇÇK¥ÒÄÄÄòòòãÇóùüÇ»“Þ·üÌèêê¢}µvìØ¡V«}X‚+¶×g¶é½¿ÿ2pþ†~¡¿_@Xø÷ØIàOúýÛn·;–K^¾|yõêU§ùËØ¦*?[z×××WTTðù|›Í¶ÜÄÌ>loMMÍÐÐÑhT©TññññññŽßÖÖÖ2¯ ù|þñãÇ™Ñ?Ž;ÆUÍfóùóçÝÖÖÖ¶cljD’˜˜H–ééÊxØjooohh ¯=F#óyGGGUUóïÑ£GÅb1ó/}ÕuòäIÇ¥]¹r…‰¶««ë›o¾yçw”Je^^Xj¹åÛÎ;ãââÆÇÇoܸáðÉ“' ÅÞ½{CÏôôtUUÕ¾}ûd2ÙÁƒ‰C®¢g¾ÒÚÚÚ7J¥ÒÂÂÂå&¡óžN§£­ºØ6å`&½ÙF/ó' æùåÃõíù¶uCIIIFFý›¶þKMMe6Š2::úÃ?0ÿ† ¿ù–¼9¾>ÏìFqêzfµZoÞ¼IÛÂ$~'µµµjµ:;;ûСC§OŸfNöáúIyŸÿ}KO¼»ÿ:ÂùËXKç/„£_U'ÙívÇIL¦¦¦L&Ó/¿üâ¶ñ9ÛôAågKïgÏžÆÈÈȶ¶¶©©)·i|ÛÞÎÎÎÎÎÎØØØôôô¸¸8¥R!ø|þôô4“ŒÃáЉíÅÆÆ2»´•²X,ííí´®¤··—5s¥âñÁ?þXWW§Óé222hë!‘Hä4®§J¥’H$N?äñxNq:Í;óâÅ‹Ï?ÿ\§ÓiµZFà ‚K™œœ à&x¶~ýz½^oµZ/]ºä4Ùl¾|ùòÑ£G³²² BUww÷_|Q\\¬ÑhT*•Ífniiiii Ò˜Öf³ùÑ£Geee[¶lill\nf+op8úpØÙÙIû{zÕã(ñ.RA:¿|¸¾±=_ضnP*• ŽŸˆÅbÇO\‡ì j~ó'?¼öøú°ÿ‡Ë±Ûí ãããÝÝÝOž<™ lüN®]»¦T*ãââk¨}»~RÞçßÒ{sÿu„ó—±fÎ_Sb'$ˆM°ÃCLLÌ©S§¸\î_|ávxTX3ø|>!Äf³…`xTp% ÿó?ÿS*•>~üøÖ­[>/gýúõv»ýôéÓtxx“­¶ü ÓéŽ9Bùë_ÿê¶ŽÆÉj‹?”pÿSA2\DEE9r„Ëå677£,»æY­VÚÄl¥yCY,ÚÍ-??ŸÕ·Ž¸\nYY!¤­­íM{öWážÂ=~àþ ¾ø¯O²q¹ÜÄÄD•J•––¦Õj¹\®Édº~ýúJǰöýüóÏ›7oV([·nužÃ{7nT(6› ã¿ ÿüîñ³…û/ÀÚð†V'I$’cÇŽÑ¿ív{kkë­[·¬VëÊFð&XZZº{÷nEEņ ?~<66Æêç|>¿¤¤„ÒÔÔôêÕ«àÄa#ÜóC¸ÇïÜÖ†7´:innnffæåË—ÃÃÃíííoZÿ€•ÕÚÚZTT»uëÖK—.±ú­Á`ËåV«Õÿ¹á` ÷üîñû÷_€µCqÀ HHHÉd/^¼`;ôL&Óëõv»½¶¶6H±A ÷üîñÀ ¼€×0³°€ê$`ÕIÀª“€T' ¨NP, : X@u°€ê$`ÕIÀª“€T' ¨NP, : X@u°€ê$`ÕIÀª“€T' ¨NP, : þ?öîý«©+ïøÎýÊ%@ ‘€.¤ÈÍr©ˆEÑŽ¶¶¬Î¥®q|lûÃÌšÕ™õüôüϳæYß:kõbÇÑ™ÚÚ–q}Ú*ju,Z-ˆ+÷[€€ÜIH¾?ìgN3 ijO®ÈûõS8Ù$ûìÛ9ç“}ö`€p0®»uûöí „»ÝþÃ?<ñSb-=„Éúá¤çž{.;;›222Â'|ké LÖ¿ÙM.—Ó‡ƒÏ§ÄZz„“€‰'Ú€ÍOv'„“€ÂIÀá$`€p0@8  œ N'„“€ÂIÀá$`€p0@8  œ N'„“€ÂIÀá$`€p0@8  œ N'„“€ÂIÀá$`€p0@8  œ N'„“€ÂIÀá$`€p0@8  œ N'„“€ÂIÀá$`€p0@8  œ N'i´3°¡¼¼¼ÆÆFŸ.\°X,!I¿Ù•––6448Ž?þñÑÎ <ýb¼Õ××WTT¸\®?üáÑÎKPÒÒÒÌfszzzbb¢T*ýÓŸþí…FãU¬Õo¬åB õëçE›½?nöü?õ0¾…VËó?ÿó?årù¥K—îÞ½á¯æï);¦b7œ¤T*¹×G$…6=ðãýK&“BVVV¢á’““:d2™¸-´œ=Os#b­~c-?Z¨_€Ø±ÙûãfÏ?ÄŽØOþ-œ¤R©´Z­Z­¦×0KKK333n·;*9“Éd###ÃÃÃÃÃÃ6›í·¿ýmhÓ1Þ¿bsxåoÛ¶m¯¿þºT*õx<ÃÃÃÓÓÓ‹‹‹‹‹‹'Q±V¿±–-Ô/@ìØìýq³çbGlŽ'?†“Ö½™Åív ´¶¶ D4_„´·····Ó× …"äécÖÉ“'SSS[[[¯\¹í¼@èmÒúXÿV>R©”ÄÞðÊ“D"9zô¨T*}ðàÁ7ß|³°°í1ˆL{޵úülÒñ$ÆÅNý†Ûfo?………;wîLMMU*•KKKƒƒƒwîܱÙlÑÎ_2™,??ûöíiiiZ­V¥RBÞyç`Ò766æååY­ÖÓ§Oû|}krròÃ? Ë.…AøúãÖ<~ÅŽÍ>þxÛÊãÉnv‹Åf³Ùl6ß¼yóæÍ›‘É“¦¦¦hgA8³Ù¿²²ò¿ÿû¿kkkÑÎN,еúµü@h¡~cŸ\.ollܾ};·%>>þÙgŸ-,,üꫯîß¿żñT^^þüóÏ{ßHNùo–þ©±ÙûãfÏ?ÄŽØOÖ '?~nnÎår%%%åççI$’çŸ~xxxhh(òYxŠ%''B?~ŒX4–´¸¸xóæÍ¡¡!±X¼}ûöššµZý“ŸüäñãÇ£££ÑÎc (++#„  Ùl¶¥¥%±X,‰Äâuž¹Ìš 2Ö 'Ùl¶ùùyBÈÜÜ\ÿÇúÓŸŠD¢gŸ}á$€ÍE*•ºÝîh­€|$%%B–––¢‘§P¬µÿXËÀfT\\¼}ûv‡Ãñ·¿ýíñãÇtãôôôÀÀÀ‰'äry}}ý_þò—èf2£ÑHcC<Ÿ@Äš püzº±Ö/ÚÃæÖúzò“Ýúûû§¦¦RSSéOèþvïÞçp8¬Vk{{{__ŸO2‘HôûßÿÞn·/...-----Ñc?w*I{÷îݵk—Ýnï½÷ÖMpøðᢢ¢®®®‹/F&K/¾øbqq1÷gEEEEE…w‚§F£±¼¼<##C¥RÍÏÏ÷÷÷߸qÃáp¬›˜g}I£Ñdgg †´´4µZ­R©®]»ÖÑÑáŸÒl6oÛ¶M¡PØl6«ÕzïÞ½©©)Ÿdo¿ý¶Z­æþøøã !‰Äl6çå奥¥uuu}÷ÝwÂÒs„•Ï÷7˜úe¢Õj‹ŠŠL&“^¯W«Õ‰„b³Ù>øàƒuÓó,VtGFFþú׿ú¼õæ›o¦¤¤Ü¹sçêÕ«>é¹?ŸX>¿üå/ÓÓÓ}>yzzúý÷ßœ1žû[WWW\\l±X.]º´mÛ¶²²2“ɤV«ŸØ¿xzå•WvìØá½%77÷¿þ뿼·üéO¢‘}ùÜþy ÷x%¸~YÛ?O±–Áå¦þî#äã?S¬©©©¨¨X\\ܨiï>~þüù¼¼¼²²²´´4·Û=66vÿþý‡nôE<óÏÚ233é ‹ÅÂgYÓ‡UEEEUUUOOÏíÛ·kkk³²²æçç¯^½jµZkjjrssµZmWWו+W¸çH°žÿ‡»?²¶ÿXË?‡gû|>°_|Æ7¦ö àxÄ ÷õký hLÇ V‰¤°°077×`0pù!„lôìé°^ïp>õçÃëzr8‰bµZSSS×}«¸¸øÀt](Ç£V«éZK·nݺ~ýºwJ­V«P( Ebb¢÷ö‘‘‘k×® Ý!zzzªªªT*•Ùlöï™R©4??ŸÉÛïÅb1‰âãã%Éêêêòò²w‚u»ŸX,>xðà®]»¸Î“””””””™™ùá‡ú?Š} ¦×ëkkkÍf³ÏlFã“R&“9r„5ͪÑh4%%%ÍÍÍÜÂÏ„‘H499IÛF£¡/!%%%Ï?ÿ<÷ÉÜѬéƒ)žû+¬~YÕÖÖVVVúO}§{äƒù‡ ûd’µ|¦¦¦œN§\.—Éd2™L­VËåòÀßË´¿*•J¥Rétº”––òì_ü¹\.n½Øøøx¹\îp8|‚G>¿!„¯¿îñJ@ýÆöÏ$Öò# ü#ÓßÃ1þÆþØ××·gÏ¥Ri4ÇÇÇ}¾W¡Päææ’?¾³Ö¯àñùp¯7õùFJJ ýu³««ËÿÝû÷ï—––BL&N’Ëå´¾^}õU®É‰D¢ÜÜÜÜÜܶ¶¶ææfÿâŸÖö033C_”””´´´ØjÇ/þãS{p<¢Â}½ÆZ¿¬éY¬²²²>¬Õjýßò'…µýlµóáuñúPúݳ³³>Û‹ŠŠ^|ñÅÕÕÕæææÞÞ^»Ýž’’BO•ªªªFFF¼#5‹‹‹ï¼óŽR©¤ãfZZZff¦Á`0™LÇŽûì³ÏúûûC¸cMLL gdd”••ù‡“rrrärùüüüàà`IJôÅ_ÐteøÎÎN>+ÃK¥Ò¬¬¬æææÑÑѹ¹¹„„„ººº¬¬,½^_\\üý÷ß{'fª/avïÞ]WW'‹].½½ßn·¯¬¬ØíöÉÉIï”"‘¨±±1++kvvöÒ¥Kt™ƒmÛ¶544ètºýû÷Y­VšØãñÐßR!»ví:tèV«}íµ×rrrÖÖÖ¦¦¦fff?~ÜÛÛ+,½àòá¿¿Âê—IuuuuuõÚÚÚÝ»w{{{çææ–——¥R©L&ó[™Ê?´è(é“%Öòùú믽ÿÜ»woUUU€ô¬ûKC9YYY:®¹¹ylllvv6pÿbâ=í‘¶Ìþþþ¿ÿýï!É¿°öÏ$ÜãkýÆöÏ*ÖòÃZþ‘éïaÿ c´Z­SSSz½¾¨¨Èÿô½  @"‘8Î~øÛÈZ¿ÂÆþåCÂ|¼ÞÔçF£‘¾X·ÅŽ»\.©TÏm¤N·¼¼üÙgŸ;£ÑX__ŸššZ^^>66ÖÝÝ-8ÿ¬ía```rr255µ¶¶V©TÞ¼y3ðïI¬éÊîlrrr[[[{{»R©üÕ¯~××××ÔÔ$‰Ž?®T*M&Nb=ÿwdmÿ±–ÂÒ>…lÁãÿñ©=8‘ð_¯±Ö¯€öÀt¼`UXXxäÈBÈÝ»w»»»§§§ÕjurròË/¿,‘H|b(án?[í|xýÝyb ±Xœ‘‘Añ9ÖjµÚ††ÇsîÜ9®&&&Ο?âÄ ƒÁðÜsÏy7wdz°°À=»§§‡’ðÊ+¯ †C‡½û\‰¶µµ5###;;;11Ñ'RVXXH";5I0§Óùî»ïrQÌ•••¦¦¦_ÿú×*•*==Ý»9²Ö—%%%/¼ð‚Ûí¾qãF[[[àÓ’’’¬¬¬åååÓ§OsÏ;øóŸÿüÆo$$$444¬»ö=îjµÚÑÑÑ .ôõõþ"žé”ÓþFýI¶½½Ýû&².ÿàÑæáÕCY÷—6›ÙÙÙ÷Þ{›% ÅZþ}v„ +þã•Lí?b*?èïaÿYûcggg}}}AAÁ•+W|Î+vîÜIyøða0AÀøÀT>8^ #çtj’Ãáp¹\ë&XZZJHHˆ‹‹ã¶Ð:ZYY9{ö,·qhhèÌ™3ÿñÿ‘œœ¼wïÞžž®*YóÏÚœNçùóç_zé¥ÌÌÌÝ»w^¿~ýþýûýbÏš>¬è—Z­Vî’izz:%%åæÍ›‹‹‹„±±1³Ù¬R©¼ÿ%¬çÿá>^ÇZþ÷/þç[íøEXÆ7ÖöÀz<ŠÀøÏZ¿ÚCøÎ÷’““>LùôÓO¹r°ÛíÓÓÓkkkþá¤(^ïð”?ùŠ®¼¼<..nllìÑ£G>Ûe2YOOH¯­­b2™žxÅ877G£zñññ4h1=š‰D´Ð9 …Âl6“ æQÇÇãs>áp8häU§ÓyoI} R©öíÛGùòË/[ZZžx¦^YYI¹uë×·¹üûí·„£Ñè³ =ºÝî .X,–'~Ïô¬åú¿@ó™™Éç±Á‚Ë?xQ '±î/m6kkk>wœmÔ¿Â-bý%¬øW0µÿˆ©ü„»¿‡{ügí]]]n·[©TÒû8:Ž®Aäñ5?¬åîãµ01r¾A;”ÏÝÞèc ¼ÃIt\.×7! Þ˃²æ_Àñbqqñ£>ºxñâòò²F£ùÉO~râĉ§Á¬é !ƒá¿üäååø>ücX4Š´ÑŸ áùTŽ×QÌ¿àþÅÿ|`K¿¨ ÏO´ÖãQÆÖúÐÂw¾G'ùvvvúÇÔh ÷™€Åëž²óá@ÍQ"‘×ÕÕÍÎÎ655ùì6=&ŒŒøÿ#]D,sËb`³Ùhˆ—›À‡vËââb™LÆmß±c‡D"‰Êá!AW`ñÞ)ºúÚH~~>]ÿ…Ϭ.½^O'¢û¿Ë͹MIIñwÝ•wà™žµ|˜ö72®_¿îv»ÓÒÒÞzë­ÊÊÊ+ãSþÁc­Áà Øß1¯uûWXE²¿D^¨Ê“ûŒØÉOú{¸ÇÖþh·Ûé`EEEÞÛéOÁ‹‹‹AÞÉΚÖ-Ÿ[ IDATãE¸×!ùó ZìÆ4úû¿÷,€u¯1(®%x‡“Xó/øxÑÕÕõÞ{ïµ··{<ž´´´cÇŽ>|8ÀºLéÝn÷‚Ÿ¦tñÂcJ¨Îÿ£u¼ŽVþ÷/þu·¥Ž_0µŸÚëñ(ã?ký†ª=ßÏùðïJÑm?¬6ïùð:7»½õÖ[Þ-Õétž9sÆç‡ ‘HDƒg¥¥¥;wî”z‘H$\AÐ;Bÿíû¤Ògžy†Þ(“ɸ•¥È¿~qФÎÎÎÚÚZ…BQXXÈÍ++(( oE83!äÿ@ÁõÅ]¬ç ù\äÕA.BÈòò²ÃáËåôê>œ®‹Ozåô¿‘ñðáÃ3gÎìÙ³Çl6×ÕÕÕÔÔttt´´´øÿŠLùoݵ“ÂJÀþh6‘*j$ûKä…ª<ù·ÿȈüD ¿‡{üÐ;;;óóó³³³5 ®BþuúþàÁƒ ïbÍSùDàxB‘?ß “_Ö]¼œ¢o­®®r[\®¯®®Úív•JÅÍfÿ`Ž+++—/_¾wï^}}}VVVQQQZZÚÙ³g7š9Â?ýäääéÓ§}66669AIð<|çÿ‘9^ÇHþƒé_ü϶Ôñ+€í‡©=ð?Efüg­ßPµ‡àûcjj*ɹ§Ùø¾÷PÝöÃjóž¯NZZZ¢7¥{<žôôt™Lf6›}~Rãsr: k^Ün·Ëår»ÝôOïÿÊËË;tèJ¥šœœ\YY¡ëBÑ'bF>øíp8:::***ÊÊÊh8I«Õfff:Nz+ìSCX}1¡¿ñݸ®.“ɼÏù8.—K.—¯›®³‰Åb>Ozåô¿cµZÏŸ?o4+++óòòÊËË‹‹‹[[[oß¾í}®Lù/ò7» Øß˜šÔÉþ²©ñlÿ[-?èïáÿôǾ¾¾ÅÅE­V[XXxçÎBˆÉdJHH ¡ø¹ˆ5?LåãuX…;ÿô÷[‰D¢P(Öm?4œÄ=Ö<©¾è¯§v»]pþƒ?^Øl¶?þ¸¢¢¢¾¾^¯×8p€[Þ5$éCHØOa=ÿÀñ:vòLÿb:Ø:Ç/XÛÿãQÄÆÖú‘ö@Ÿ&IYw¢¥ÿõEl¶Ÿˆp}­Nú裸çUÓÅÿëêê|Ö s8kkk‰¤¿¿ŸÞyþDf³ùÕW_]XX8{ö¬Ïcé·Deæv[[[yy¹^¯ÏÈÈ.((‰DA.Ò¡M  ¾XÑS1ž7|rO½MHHð¿Í^.—ÓñbÝXr8ÂIʇiý…u¶ÈøøxSSSbbbyyyYYYuuuVVÖG}Ä]ÌSþLÖ==âN mùØß˜šÔÉþ"LŒõÄöÿôå'pùG ¿‡{üÐ=OWWWeeeQQ=}§7 {„aÍSùDàxícsop'¨&“Éÿñ”‰‰‰ôZÎ{ÙnBH$ò™˜Oƒ}‚óªãEkkkfffnnn^^žVƒO~ ÷ùåÿÄŒ©üÓ¿œl…ã+íÿñ(Âã?kýFýüŠkñññþ‡rÿÑ)òígkž?áx@W¡×h4ÕÕÕ>oÑ»:óóóyTöîÝ+‰Z[[}úù×-î‘\‹„377GŸÎXVVFbãN7ZÇZ­6´ËZ_¬èúa |–$œ™™¡}Þg]:Š~}”²ÿ»Þ‡C>㙞µ|˜ö×[˜ê×ßììlssóçŸN1ùùùÜ[Á”?Ov3ð™S8ÊGÀþFþ޼"Ù_XE¬=³ ÐþŸ¦üð)ÿô÷pÿÂú#=”ëõú´´4©TºcÇBHHÈÈšÖãE¸×œÍx¾1>>N‡µgŸ}Öÿ]zÿˆÝn÷^Ž$À0HŸä;33ã}+"kþCx¼ <ücC¬éƒ'àg‰pŸÿ .ží?Öò/¸ >xº_¬„µþÇ£ˆÿÖúâùZ÷`êß•"Ù~¶òùðZêãÇiµ¢¢Â燵ÖÖVBHrrrcc£÷4Ö%‰ôz=ù÷Å9´ãI¥ëL•Šº#yyyÛ·o7 óóóOlU………{ö쩯¯§ë…Öää$!Äd2…¶E2Õ—t&'!äÈ‘#ÞKZ®ËårÑÛ ËÊÊèi‰D²wï^BȽ{÷Ö#Æyzy¦g-¦ýõ¦úÝÈÄÄI½'ßSþ<ÑH\\œOáˆD"Úß7:L†£|ìoLÝìÉþÂ*Âí™Õºí?ŠBž>åþîñ_Xœ™™¡qœ¢¢¢ÜÜ\…Ba·ÛCr';k~Xá>^s6ãù·®mnn®Á`ð~K­VïÚµ‹ÒÞÞî}¶É…Z|ª,--­¦¦†òÍ7ß“ÿP/rrrhx‹ç“YÓ‡ë줜ÿ .>í?ó/¸y>𴿘nüGÿ}°ÖoTίìv;m6ÕÕÕþa;ÿÑ)’íg+Ÿ?yliiÙ¹sg\\\}}ý§Ÿ~Êmïíímii©®®ÎÉÉùÍo~3111000>>n·ÛívûÊÊŠÝnçF.Ç377—˜˜XSS333C5Òjµ&“©ººš.¨­Ç”ŒŒŒX­VƒÁðÚk¯Bø>þäÉ“ÝÝݽ½½N§Óétúßè{õêÕœœ™Lvâĉ˗/º\®´´´ýû÷ëõúéééþóŸë~Q˜f'±–ëþrÂT¿„•Jµ¶¶Fï¬V(:Î`0TVVŠD"»Ýn±X¼ .žè6"‘襗^ºté’Íf‹‹‹£7ñÒ«©ª#Låú¿1u³‰`a¾öÌŠ©ý?5ùáYþáîïáÿ÷ÇÎÎÎôôôÂÂBw¸ÿ~H–H`Íkù„ûxÍÙ¤çß|óMvv¶L&ûùÏ~óæÍÁÁÁ•••ŒŒŒšš­Vk³Ùnß¾ížû®Â‰‰‰ùùyN—““³{÷n‰DrçÎ:K]pþYÛC|||\\œÛív»Ý'!!!--Íd2effB¬V«Ox‹5}X±îlÎÿ|Ú æ_pÿâ>°¥Ž_L‚iëù3•?aï_ãããÝÝÝiii\]B,ËÄÄDaaáFg3<Ëçõ×_÷~vý) 11ñäɓޟöüƒ>ýuÃ=;‰ž(Ð×tÙ¾}»wAÙl¶/¿ü’û3¬ý%ajϬõËÚþ7{~8<ËŸµý ¾ñŸÑ-ËþýûU*¾6ºÓµ~ä‡õxîã5µIÏ7?~ü÷¿ÿý•W^Q*•û÷ï÷~krròüùó>«´r¦C‡yow¹\W®\¡s‚É?k{(**Ú³gÿv‡Ãq÷îÝ›7oúäŸ5}X ¸³Œõü?ý‘âÙþc0ÿüÛ§€ó-xübÂÚ8[×[||<7WmaaÁ;6ÄšÞ[wwwmmm||¼ÅbáVy `jjŠÖP˜Ö»|ùrkkk^^^NNŽF£‘Ëå …"$ë„ñ¯/aßÿý¼¼<³Ùl4¹E. !sss>‰ûûûO:UUUe4õz½Û힘˜èêêêêêò©)‘Hä_¹ôGŠ[DSXzkù0í/'õ+“É<÷Cæçç­Vë?ü°ÑÍ›üËŸê_/^œšš*((Ðét«««ããã÷îÝëëë£78åS>z½^¥Rùü£D"ñɤ÷s˜ö7ܳ“t:ݶmÛ¼·(•Jï-þK†¯¿)홵~´ÿMo<ËŸ©ý ¦ñŸÑGOOÝ qË.ø`­_aùa=^„ûxMmÒó¾¾¾>øà¹çž3›ÍZ­ÖápLOO?xð ££Ãÿw{ï-guuuff¦¿¿ÿÞ½{ÜC»ƒÉ?k{à®v<Ýn_\\œ˜˜Þè90¬éÃJ@ìƒõü?2ý‘âÓþc3ÿ<Û§€ó­yüâµ=px¨ðŸ¬õÉöÀÓ7†‡‡KKK ƒB¡°ÙlGŽñ'‘¶Ÿ­p>¼.ñ+÷sDMrròo¼!‹O:å½co¿ý¶Z­¾{÷î¥K—½MŽªt’v´ó [m6‚ñ00”Odäåå566BþçþgÝgEG}Ìá½²5kz€ÈˆÎê×1%11±±±Q,ß¿Ÿg,I$ѳÀááá0çnÓ‹äìX°Õö`#CùlY‡éWqÖô‘±EÃIb±8==]¯×gee™Íf±XlµZ¿þúkžÿ®×ëårùãÇCòŒ€Md‹†“T*Õ±cÇèkÇóàÁƒ«W¯òÿpç΄ëׯãÇ"Øj¶h8iyyyqqqrrrbb¢§§grr’ÿÿêõúòòò––LM€- ÓkI¥ÒíÛ·G;Ñ‚pð&Žv`3A8  œ N'„“€ÂIÀá$` v¶ŠúúúŠŠ —Ëõ‡?ü!*ÈËËkllôÙxዌô±¦´´´¡¡ÁápüñŒv^ æD½?lj˜!2™Œ²²²­ (•JîµÇã yz€M$êý`SÃ줉úå«L&¶Ùl¿ýíoC›`‰zØÔ¢N:yòdjjjkkë•+W"ÿíÁ–©TJ¢zùÚÞÞÞÞÞN_+ЧˆŠMÚÛìã'<0;)Bššš¢ø?èÁÀÚIÀá$ؤR©XŒÃ@ôýx³›H$úýïo·Û—–––––¦§§?~¼î¾øâ‹ÅÅÅ###ýë_}ÞzóÍ7SRRîܹsõêUŸôÜŸÞÿuéÒ¥»wïú‘Ùl...Þ¶m›B¡°ÙlV«õÞ½{SSSÞi***ªªªzzznß¾][[›••5??õêU«ÕZSS“››«Õj»ºº®\¹Â=¤LØþòÏÿ/ùËôôtŸ™žž~ÿý÷×ý|&;;Û`0¤¥¥©Õj•JuíÚµŽŽ.kþÃjïÞ½»ví²Ûíï½÷Þº >\TTÔÕÕuñâEŸŸ••õóŸÿœòÿþßÿ³Ûíþ Þzë­äää/¾øâþýûþïÆòòòŒŒ •J5??ßßßãÆ ‡Ã±îw%$$ìÞ½;;;;..ÎápX­Öööö¾¾>ŸduuuÅÅÅ‹åÒ¥KÛ¶m+++3™Ljµú‰Ÿ/ÌÛ‡OÁû˳xðà®]»D"Ý’””””””™™ùá‡r±ENqqñè:ÍG­V›Íf³Ù|ëÖ­ëׯ{§T©T*•J§Ó8p ´´”çç À³=–þ" ÿÂö—y²îo¸û£°ý---}á…èþRZ­V«ÕFÇL8)¬ã§‘jkk+++ý§#y—°7žíM$MNNÒük4ú‚RRRòüóÏs-{A__ßž={”J¥Ñh÷ùR…B‘››KÖß”€XðãIùâââ;ï¼£T*éuTZZZff¦Á`0™LÇŽûì³Ïúûûy~(½tá.À¨/¾ø‚¾ O&êìì üd"‘HÔØØ˜••5;;{éÒ¥ÑÑQBȶmÛt:ÝþýûÇÆÆ¸Ë3ÀJNNnkkkooW*•¿úÕ¯âââúúúšššD"ÑñãÇ•J¥ÉdâÂI¬ûËšÿ¯¿þÚûϽ{÷VUU=¡àÙ½{w]]X,v¹\CCC6›Ín·¯¬¬ØíöÉÉIï”!¬¯àMLL gdd”••ù‡“rrrärùüüüàà °Ï箜•Jåº 6 'I¥Ò¬¬¬æææÑÑѹ¹¹„„„ººº¬¬,½^_\\üý÷ß{'.**zñÅWWW›››{{{ív{JJ mTUUŒŒxïmrYYY:®¹¹ylllvv6ðç À¿=0õù°¿Låɺ¿áîö—~¦Ëåºyófooïììl\\\RRÒ¾}û|a?ˆÀøS]]]]]½¶¶v÷îÝÞÞÞ¹¹¹ååe©T*“É|.ÿöæñxèÜBÈ®]»:¤Õj_{íµœœœµµµ©©©™™™Ç÷ööÒ4V«ujjJ¯×ù‡“ $‰Óéüá‡"“€Xðc8Éãñ,,,,,,Ð?{zz! ¯¼òŠÁ`8tèлᄏ¶¶ÆçCi8)È.JJJ²²²–——OŸ>Í=Ï{``àÏþóo¼‘ÐÐÐð—¿üÅû­V+w‰5==’’róæÍÅÅEBÈØØ˜ÙlV©TáØßP)))yá…Ün÷7ÚÚÚß-kùommÍÈÈÈÎÎNLLœõ~«°°15‰²¼¼ìñxD"÷û|||¼L&›žž&„ˆÅb™LFÖ '9Îwß}—›E²²²ÒÔÔôë_ÿZ¥R¥§§{‡´ZmCCƒÇã9wîw™=11qþüù'N †çž{Î?œ4;;ûÞ{ïÑ×?_¦öÀÔ_äŸ5=ky²îo¸±îoVVVUUÕÚÚÚ™3g¸È×ÊÊÊÔÔÔîÝ»ƒ'±bm¬"0þ”––BÚÛÛ½ošÞˆ€öFÑÊÕjµ£££.\èëë[·áuvvÖ××\¹rÅg¿vîÜIyøð¡÷?†;?Q÷„ˆÏÜÜýU<>>>##ƒç‡†$œTYYI¹uëw-D9Žo¿ý–b4u:÷7z£Q¤þ܈°ý •Jµoß>BÈ—_~ÙÒÒ"ì"ŠùôèÑìì¬H$¢…Ba6› !]]]‚?Üív¯®®¯ÙI¯¿þú›o¾©Õj‰×= þ÷Áy<Ÿ¶áp8èL ®ñPååå2™¬§§ÇÊF[[!Äd2y7izÕ·¶¶ÆÅ>+ÖöÀÔ_äŸ5=ky†¤ý‡ëþÖÖÖB¾ûî;ŸYTœu'Ô„k{‰ÐŽ?´ dffn4'Ñk{ãÐúu»Ý.\°X,5¼®®.·Û­T*é}mNG×äò߀¨{rÄÇf³ÑŸ F#Ï]wí$&z½>>>ž2<<ìÿ.7ç?%%%TßȰ¿!‘ŸŸ/—ËG0³xHôòïñxèeRqq1+DíØ±C"‘ŒŒŒ¹F/yD/,Fcbb¢H$zæ™g!t‡Ãát:ù|ÔüüóM!"‘ˆ6¹ÒÒÒ;wJ½H$.p@WHñþu›œÿç ÀÔXû aÏ?Szå)¬ý‡Óþrå•ç*úЄ ëøóðáÃ3gÎìÙ³Çl6×ÕÕÕÔÔttt´´´ø÷tí ¢}tvvæççgggk4š¥¥%º‘†“áòÈä º~ '™ÍæW_}uaaáìÙ³>y¦˜Ywfþº—[|ÂI/®fffè‹„„ÿeär¹Z­&^¿½ ` Û_žù€FCø¯fdþä­­­¼¼\¯×gdd ˆD"ŸEj…¡w)ŠÌÌL­VÛÝÝMÃI………ôYK40‡cmmM"‘ô÷÷߸qƒÏ¿„{S{`í/„=ÿLé”'kû÷òŠ`Ú_º$>ÞÔÔ”˜˜X^^^VVV]]••õÑGqÁGíÃ?|ãñxººº*++‹ŠŠh8‰Þø6<<Ì5€Hæ º~Œ¿ìÝ»W$µ¶¶ú\Bè¨>k£ÐSyº²ÀWbþ‘333C#D>ëžRt‘Wú(qïodº¿Lù€®ï›Às [Áù«¹¹9ú´ì²²2º;ÝÈ¿.}•JeAAÁìììøøøãÇ­Vkaa!177ÌçÓUNòóóy%ƒ¿£30¦öÀÚ_{þYÓ³–'kûç„©?2íïÒÒ]0¨ººz£0J¨šJ8ÆO"?þÌÎÎ677þù焣јŸŸïý.k{ãx‡ož˜˜ez½>--M*•îØ±ƒ²î#“€(ú¿V‘H¤×ëÉ¿®|Ð ©ôß—÷qqqÉÉÉÞÛE"M¿ÑÙ0}ò‘Éd pEär¹èíQeeetMYŽD"Ù»w/!äÞ½{ÜœÖÙIö—)ÿÐ;)!GŽñ)RÁä?ÜZ[[ !yyyÛ·o7 óóóÁ\µrh´H­VïØ±£»»›n|ðàABB}r\á$šíäääÆÆÆ¸¸¸'¦÷ÍnLíµ¿0ßìFØË“i½…©?²î/}˜}RRÒ±cÇ ƒX,‰DIII{÷î¥]5TÂ1~²Šâø311AG{Ÿ›éXÛ‡ ßð‰÷ÍÌÌиgQQQnn®B¡°ÛíëÞÉ™üPÛ·o/.....¦ëDÆÿñ{<ž¹¹¹ÄÄÄššš™™ú­Vk2™ª««é€|~u§?J‹D¢—^zéÒ¥K6›-..Ž.rA¯7º*--Õh4Çÿþû†æççWWW}®m®^½š““#“ÉNœ8qùòåÁÁA—Ë•––¶ÿ~½^?==ýÏþ“KÌz玀ýeÍ?+§ÓùÕW_566ÆÇÇŸ>þùçŸ{_> ¸óˆuYóÿúë¯{?ÛˆN%HLLÍ=Ÿˆ5½·¶¶¶#GŽH¥R·ÛÝÑѱn1²â¢ESSSÜJ%‹‹‹ÃÃÙ™™$èp!äÆãããµµµz½Þ`0ÐËEέ[·®_¿Îýçy3µ¦þ" ÿö—©ÿ(‘HèÑ9>Ï]|ÿý÷óòòÌf³ÑhŒç.|Â%¬ùOLLôùjBH||d2™Çãñ~Úüü¼Õjýá‡Ü<˳½‰D"ÿÁNª¢T–Ãáèé顱Ρ¡!nÕóhå‡ œQ""B"÷k`F¯ÊÜn÷&zÊOrròo¼!‹O:555íì[Ü&'ùèïšJMMMNN^7ABBÂîÝ»³³³ãââ‡ÕjmooïëëÛèµZmQQ‘ÉdÒëõjµZ"‘Bl6Û|°nz³Ù\\\¼mÛ6…Ba³Ù¬Vë½{÷¦¦¦|’½øâ‹ÅÅÅ###ýë_}ÞzóÍ7SRRîܹsõêUnãÛo¿­V«¹?>þøcBˆD"1›Íyyyiii]]]ß}÷ݺ¹Òh4ÙÙÙƒ!--M­V«Tªk×®uttD¾|Xñ,Ϻººââb‹ÅréÒ¥mÛ¶•••™L&µZ=??ßßßãÆ ‡ÃL6h}qVTTTTTx'¸téÒÝ»wýÿ‘gy2ÕoEEEUUUOOÏíÛ·kkk³²²æçç¯^½jµZkjjrssµZmWWו+W¸‡¦ýò—¿LOO÷ùÒééé÷ßÝýe-O‘HôûßÿÞn·/...-----MOO <~ü8`¹FB^^^ii©Á`p»Ýccc]]]===%fmÿ„£ÑX^^ž‘‘¡R©BR>555‹‹‹u¢W^yeÇŽƒƒƒçΣ[Xë—ó9þÀVóc8ég?ûYvvv€¤SSS§Nœ>„¬Vkjjêºo8p€®SëñxÔj5]kéÖ­[ׯ_÷O_[[[YY)‹}¶ÓOð!“ÉŽ9’ŸŸOþõìs£Ñh4KJJš››¹…‡ŸˆNíñþR‘H499©P( …F£¡/!%%%Ï?ÿ¼F£¡ÉÖ]ÒX¯××ÖÖšÍfŸ½àþË[XˇSyªT*•J¥Óé8PZZ*‰èö¤¤¤¤¤¤ÌÌÌ?ü0˜Ò‹Åbzå/‘HVWW———½¬®âYž¬õ«P(ÔjuFFÆŽ;èE¾F£yùå—WVVôz=MS^^>::j±XèŸSSSN§S.—Ëd2™L¦V«åry€ýe-O­VK³˜˜èý9###×®]{Bù†Mccc^^!ÄãñˆD¢ÜÜÜÜÜÜöööË—/û'fmÿb±øàÁƒ»ví mùôõõíÙ³G©TÆññqŸ/U(¹¹¹„û÷ïsYë—°ô¯`ÆØš‚¬×êÁ\ÛF¯ggg}¶½øâ‹«««ÍÍͽ½½v»=%%…†ZªªªFFF|æ TWWWWW¯­­Ý½{···wnnnyyY*•Êd2îê‘#‰³²²fgg/]º4::JÙ¶m[CCƒN§Û¿ÿØØ˜Õjå“Z2Þ_áñxè\BÈ®]»:¤Õj_{íµœœœµµµ©©©™™™Ç÷ööú|ÔîÝ»ëêêÄb±Ëå²Ùlv»}eeÅn·ONNF²|X±–'Áeeeétºæææ±±±ÙÙÙ„„„ººº¬¬,½^_\\üý÷ß ÎÏ_|A_Ð'»uvv>ñÉnüË“µ~éÎ&''·µµµ··+•Ê_ýêWqqq}}}MMM"‘èøñãJ¥Òd2q᤯¿þÚ;o{÷î­ªª yÖò\\\|çw”J%C¥¥¥eff “ÉtìØ±Ï>û¬¿¿Ÿ_I‡˜R©üì³ÏÆÆÆœN§Ñh¬¯¯OMM-++{ðàwJÖöO‘J¥YYYÍÍÍ£££sss¡*«Õ:55¥×닊ŠüÃI‰ÄétþðÃÜFÖúeê_‚Çز~ '}úé§L1Öô¡"‹322!ÝÝÝÞÛµZmCCƒÇã9wîw™411qþüù'N †çž{Îçr±´´”ÒÞÞî}ÓÙFJJJ²²²–——OŸ>Í=Ÿ{``àÏþóo¼‘ÐÐÐð—¿ü…Ï.Ðp’ÿ”Š^çkµÚÑÑÑ .ôõõmtWIIÉ /¼àv»oܸÑÖÖøn¯p—+Öò¤Å2;;ûÞ{ïq+7­¬¬455ýú׿V©TéééÁ„“X (Oï \¿´…X­V.¤5==’’róæÍÅÅEBÈØØ˜ÙlV©T‚óÏZžgaaaaaþIï&KHHxå•W áC‡Þ}÷ݵµ5Áùìoû÷zhhèÌ™3'NœHIIÙ»w¯ÅbávMX}9Îwß}—‹Œ‡°|:;;ëëë ®\¹âSn;wî$„<|ø0˜û7WüÇØÊ~Œh¸Ýîµ'ñþOÖô¡R^^766öèÑ#Ÿí2™¬§§ÇŠP[[!Äd2ùDpèeRff¦R©|â÷VVVBnݺÅ]›qòí·ßBŒF£N§ã³ |ÂIn·ûÂ… ‹e£k9•Jµoß>BÈ—_~ÙÒÒòÄK¾p—+Öò¤Å²¶¶æ³ ¸Ãá 3/x~¨(OŠOýúÏì£Q¤þ $å977GguÅÇÇÓ oÔ¹\®þóŸ„øøxïåÕ„Õ—Çãñ©‹P•OWW—ÛíV*•ô¾6ŽN§£k$uuu=ñó<^ñ`‹[?¢›$Iqqq]]ÝììlSS“Ïe]?eddÄÿm6!D,Óe¤9ׯ_w»Ýiiio½õVeee€•Aôz}||;â¿vÿw9ùùùr¹Üápx/°@Xˇ•€ò ƒ£þ“Éd¡ÊÊ“âS¿<Û@0BUž6›NÉ1!Í pƒƒƒô…w8Ip}ù IùØív/**òÞN§&-..r{!@0ãUÚ<6Á“ÝÞzë-ï+=§ÓyæÌŸe’E"ý¥½´´tçÎR/‰„»ð£+’pÿõðáÃ3gÎìÙ³Çl6×ÕÕÕÔÔttt´´´ø|8ñš‰à¿`!dyyÙápÈåò¤¤$>{ä¿v’7z9÷Ä ébäþOhZW¸Ë‡•€ò P,>ók"@Xyzç6pýn!!!¬<¥Ré3ÏSr¸Å¡Nç‚÷ wn·Ûårq·æù|¸Õj=þ¼Ñh¬¬¬ÌËË+///..nmm½}û¶÷]Üoõ2™luuÕ?“.—K.—ó¼¿ÏÍn4A€ Wú\'>W¿$üåÃJ@yÆÔ¤ ÁåIøÕo.é”g^^Þ¡C‡T*ÕìììäääÊÊ ]—Ýd2©Õê˜zì>sqÏ`ê‹?Öòéëë[\\Ôjµ………wîÜ!„˜L¦„„BHggg09 f¼â9þÀ÷c8é§?ýivvv€¤SSS§Nœ^°>úˆÞ]B¡ª««óY§Öáp¬­­I$’þþþ7n°~ÅøøxSSSbbbyyyYYYuuuVVÖG}Äkfffè‹„„ÿekär9}š»ÿ\€u/×CN²Ûí„÷‚Aá.VÊ3“&Q0åɧ~·`-O³Ùüꫯ.,,œ={Öç±÷´Wò¼S,´Z- ¶NLLÐ-A¶>”Çãéêꪬ¬,**¢á$zãÛðððôôt0™<^„“€†ëUÖ©F!™šäƒ>I£ÑTWWû¼EWEÉÏÏ|>;;ÛÜÜüùçŸBŒFc~~>÷ÖÌÌ ÝŸus)ºÈ®Ëåâ6ÒP‹V«õOøJÞûr.@nézÀ <—@kù°Pž¸ÿ‹ PqÞ—'ŸúÀeù„é?YÓ‡ÄãÇïܹSUUUQQÑÑÑñøñcî­ÖÖÖíÛ·'''766~ýõ×Ü»YMLLx<‘Hä}sŠËåêééyæ™gÊÊÊîÞ½ËÍ–"„H$’½{÷BîÝ»ç=aŠþò—œœì=×@$Ñ Ë'ÎN |©ÏÝ)säÈ‘O>ùä‰ÓÂZ>¬”gÄnv›œœLOO7™LZ­6ÀÔ—'ŸúØì$ž_!‰ôz=ùWdÄmÏRiL,Ä–P[[Kùæ›o¼·‡ªý¯KpùÌÌÌŒŽŽ¦§§ŽŽ* »ÝÞÓÓd~ô/Ïñ¶¸˜¸dÒÒÒ²sçθ¸¸úúúO?ý”ÛÞÛÛÛÒÒR]]““ó›ßüfbbb```||Ün·Ûíö••»Ýî3éC¥R­­­Ñ•S …N§3 •••"‘Èn·[,ïÄW¯^ÍÉÉ‘Éd'Nœ¸|ùòàà ËåJKKÛ¿¿^¯Ÿžž¦'çÐI "‘襗^ºté’Íf‹‹‹£‹ÑNñ¹Ù-@98ί¾úª±±1>>þäÉ“ÝÝݽ½½N§Óétú/îòaÅZž»Ùmhh¨´´T£Ñ?~üûᅳŸŸ_]]õ¹öPžÞ;BxÌNŠÖRÜþ<ÏÜÜ\bbbMMÍÌÌ }è˜V«5™LÕÕÕôaѺ٭´´Ôf³ÍÌÌh4šÌÌÌ={öÈåòÛ·osÏ/£×Á”Ogggzzzaa¡Á` „Ü¿?È%œ(ÖþÅÁì$àcó…“œNçÕ«W=š“““ÝßßϽuãÆñññÚÚZ½^o0èåçÖ­[ׯ_çþ”Éd¿ûÝïèk:݆{krròâÅ‹>Ï/[XXhjj:|ø°F£9zô¨÷þùç>á†ñññîîî‚‚‚´´´ãÇsÛ-ËÄÄDaa¡÷ÕšT*åÒp7Å;vŒ»´³ÛíçÎó)ŠÞÞÞO>ùäàÁƒ:®¨¨Èç‰ã>ljjòÞÖòaÅZž›ÔÓÓÓÞÞ^VVOç¹PÁ”'ký ¸³ïõ×_÷~v½Y/11ñäÉ“ÞÉþñÐ[ÀXËó›o¾9zô¨F£ùÅ/~Aã•J¥Òãñ´µµõööVUUùÜÌÕÐОžN_s;²oß¾ªª*nOŸ>ü-± Þ®­­]¹r¥µµÕ?%SûgÅZ>‹Å²ÿ~•JE‹k£;ÝXë—© `+Û|á$BˆÅb)))ÉÌ̬¯¯?uê”÷œ‚G=zô(%%%;;;55U§ÓÅÅÅÉd2©Tês{‹L&óx<ÞušŸŸ·Z­?üðúKŠBúûûO:UUUe4õz½Û힘˜èêêêêêZ÷ªøâÅ‹SSS:nuuu||üÞ½{}}}555ä߃"‘(55Õçß養[TØÇàààû￟——g6›Fc||<]„˜277çŸ>¬åÊ©<#¹÷åË—[[[óòòrrr4\.W(ë®[̳ó™ùL2ï|æ3:N€¤“ é$è@: :N€¤“ é$è@: :N€¤“ é$è@: :N€¤“ é$è@: :N€¤“ é$è@: :N€¤“ é$è@: :N€¤“ é$è@: :N€&aÑûô-“ÕÑ7e@Gï$è@: :N€¤“ é$è@: :N€¤“\r£mï NïùáFSýõC{Q£þáû xé$çFŒѲeËŠŠŠ©S§zè索sss½YPC|]_¬¿^½z'NœÈÊÊÊÌÌlÒ¤Içν²Z¯¸Ñ¶zÏ7šê¯Ú‹õ÷Ø_ÀKì"zïoþêÏÝ…ù&a ~·ˆGEäšß¨ÅÅÅ)=¥6lXå»é¿&ÓÒÒìvûÂ… ½ÓM7)[ýÇ?þÑ«…5Â×åѲ~½7»©Mœ8±FuÎ÷u}Ö´íU«]7»yåü£÷üàëòÔ4×¼~jr{©Ô dìf·ê9?°¿€a¿éd/ù¯‹¢¯~SqFXW‰¢ÿˆz3DÐÝÕ]¸kåÏþsLLLIIÉ´iÓ¼Ÿ››Û¸qc9““㵂åëòÔ´íõµm{opzÏ7êçÚ¢þP=~“N*xãj.É,,­…9T”öa/y¯ˆ›–ÿØkRÈj&GS~ï½÷ÒÒÒ¼_QQqæÌï–Ó†Ëc2™BCCËÊÊÊÊÊl6›××_Kùº>Qsè=?ÜhjuýÔ´öh <Ôÿu\€šæ×'»•îÖ Ba‘KÅMŸˆˆ‰›>~QBa/…ïþfÉÌÌL»Ý~üøqeÎÙ³gÕO Y°`'ñ7nÌÈȸtéR»ví7nüÑG¥§§lÙ²eìØ±&“É{•ð/½ôRddäåË—ßxã OâOž¼r¼®ãMÑ«W¯ôôt§o´wïÞÊñÚ+Æýkàü㔫ö¯³fÍR¿Ô¥K›Íf·ÛËËË;vìèay4noPPP嘎7N½øÊ•+eü×_-çìÚµKyÕf³­Y³F½‡MÓ^?jwß}÷wß}W¹xŸ~ú©ãáþÒx~0ÐõžOî¿ÿþŒŒ §ëÿùçŸ=/êßA5׿ÊØI_~ùå©S§Vîp~Ó[ÿ¶_ÆN†]¹ÙÍ–+J¾BS˜ìñ›ˆ {…9\Øò…°‰Òý"è>!„ ”½"""ÆŽ+#çÌ™séÒ%eÁ}ûö)Ózã…ååårbìØ±EEEr ßöíÛËŸ÷ pàÀ§cC˜Íæ³gÏ*ÿ¾üòËsæÌÑX“&Mª[·nnnîìÙ³=‰÷÷÷OHH {ñÅݬJÙÞE‹ ! 233cccåö†„„L›6MùvÙ²eÏ=÷œ¢{÷îQQQçÏŸW¯ªÿþrbõêÕ†Ë#„X±bEŸ>}äôÙ³gOŸ>íçç'×XTTäÉú¥:X­Ö;wšÍfeÿöïßâĉ>–hܸqo½õ–¢¤¤dÿþý………ñññ 4B 4èûï¿×~`8ðu}+ÒÏ?ÿ\¯^½ððð:uê(¿¥7kÖ,)))..Ρ2uoRBBÂÂ… åe[QQÑéÓ§›5k$_uÕ J#åѾ œœrÕÞüñÇÄÄÄéÓ§ !Æ¿råJ™\ó÷÷ÿý÷徘3gŽ’q3VíÛk2™êׯ_¿~ý!C†´hÑB‘˜˜xÛm·©W¨dl•yºvízöìÙzõê™L¦GyäôéÓ111r§ß{ï½ÆêG1wîÜ—^zÉiGu× oí/÷ô¶G½ç“'žxbÉ’%²êJKK³²²”šôJy*£þÕñÕ_ÿZüßÿýŸ"//ïìٳ͛7—Ÿç7½õï­ö  Ÿ]Dïÿ¸ò_`WǽE¼%ü"¯¼Z÷/Õ÷d·~øA†mذ!22RY\鹟ŸQyA‹Å¢þEnܸqU–JjÔ¨‘üåsâĉ^ÏÍÍ•åqÕ{åâÅ‹2`÷îÝݺu“3cbbRSSå|õ@&“IùÑuÔ¨Qêõ´k×NÎ/++sÓ¹½ÊòtêÔI©Ã„„½]ý«\¿Ò;é‹/¾¸é¦›äÌØØØ””9¿  @^*T¦å×Ôøøø²²2»Ý~ìØ1y9-„ ]·n\öܹsžtPràÓúÔûëqPPP×®]ǧTfEEE||¼:F×ñ&„èСƒì€cµZGåïï/„ðóó›5k–Œ?pà€ö-ªLoyŒí_Ož”ä¾½ûûûÿý÷rÍ?ÿü³Ì‚½üòËrNJJŠ’w3VÃÇó²eË”·°Ùlß|óÍØ±c{õêÕ´iS%þ‹/¾3gÎBtéÒEþû׿þU1tèP§»@Wý!fΜ©”äÛo¿0aB¯^½ºtéÒ¦M›[o½U9 «5-íEo{Ô[ÿmÛ¶-..–íåé§Ÿ¶X,Bˆ¥zÇxx¾Ôÿµ®÷”ÞI»víêСƒœÙ¸qã£Gºi\ëßÃöKï$່Þ+ê¼på¿à¾WI{Dý7„¥ÅobCÿT}é$åÚL,ª¸ë®»”5 2¤ò‚7z¼ð •cœZ°`ÝnÏÊÊrsáø*Ó çÏŸ—cÆŒQÏ=z´œ_QQ¡ ¼"„˜;w®œ¿iÓ&uü´iÓäü/¾øÂ“ò<òÈ#JøUS{:éoû›z~·nÝ”÷}òÉ'.«åëï† dÌ< žß¨Q#å>‚öíÛëÝ.W|ZŸ†¿î‡„„(é×¹sçª_Ò{¼mÛ¶Íiƒš4i’œèÐ!]es ·<Æö¯'é¤*Û{ëÖ­‹ŠŠäʧM›Ö´iÓK—.É’wíÚÕé"ÚËcøxþì³Ïä«_}õU“&Mœ®ü¿ÿý¯ŒyðÁ…*#ÿðà !Z¶l)ÿMOOwSB÷õó»ßýN¦ÊËË}ôQ7ëQó]:Co{Ô[ÿ›7ovÚ^žþy9ß!ááùVPÿ׺þÝSÒI¯¿þºzþ¨Q£ä|‡ó›¤±þ=l¿¤“€aW~ͳ^ý¿ž°—‹¢"{È}U”¥ á/ü›_yÕvÞÙ:|C¹ùEöƒPìܹS¹pU~¥Tsø‰¾¢¢BËÛÅÆÆŽ9R1cÆ «Õêõø*)ÛëP~ecÍf³º·Ñ²eËäDÏž=ÃÃÕù•ït3f×®]ÅÅÅrzÓ¦M“'OV¿‹ïìÚµëàÁƒrúÖ[o5¶’zõêÉÛ***¶nݪ~)33óäÉ“rÚ¡÷ÓìÙ³í.x~gÇ5©O«ÕºbÅ 9ݹsgõKºŽ·ØØØ{î¹G‘——÷Á¨ã•öåÐNõÒUcû×ZÚû‘#G”Ü÷+¯¼²|ùry7Ù¼yó佺†y²½JÅ=zÔU÷åfYùeeeêWKJJª,a•õ3bÄy„,_¾|ÕªUU®Ð×tµG½õߤI9Òsåöâ•òTFý‹kZÿ†>|XN8|¾ëâyû0æj:éjÊ¥4Yd?"ò¦‰ò4a ¡‰¨µ"¤ÿÕp.õqs™zôèQ9á4dµZM*@“˜˜h±XN:¥<íÈ»ñUR®úÆ ¹pá‚Óø½{÷ž8qBa±Xúõë'g6oÞ¼M›6BˆŠŠŠµk×zRžsçÎ=ñÄ—/_BMŸ>ýôéÓ3gά†/ÙÊþ5œNjÓ¦<666))IÎéÝ»÷+¯¼âÅ·PSîaܲe‹±5(£i˜Íæ;î¸####;;»   †Œ"áõú4›ÍóçÏ—?¡?ðÀK–,IMMÍÎÎNKK;uꔌq•NÒr¼ÉÛ*…qqq?Ôûºw’S^Ù¿ÏWºÚûŸþô'œ––&‡°iÛ¶­Æ›ÝܔǓíÕr7¢càrTcý(©ÿž={ê} Iïç‹vU¶G½õÿË/¿È‰ÊíÅ+åQ£þ+«Îú¯6nêß“ö à‰+_>,­„I> ¦\ýöî²£¢ü´Bø7––ŽË+? !”Çߺ¡=ÞÕUаaÃbcc…'NœØ±cGåýýýª(+\yã7„ûöí[³fM•å7¯‘ÞIBÕAiÀ€>ø \vݺu^,›”‘‘1bÄåq½zõòú[!ºuë&iŸššºk×.c+IMMU®@¦M›¦ ®Q£x±>Û´i#»ìÙl6eä)I¹ùEþ’¯Ì×u¼?~\N4lØð¡‡R¿Te¶" @Ý]õ‘ÑUÃûWïùJèiï5zûí·åôÈ‘#•,Ò«¯¾zçwzROŽg_÷NÒX?rH)!ÄC=Ô»wo+7°¿ sÓõÖ¿Ò^n¾ùf‡öâ•ò¨Qÿ•Ugýk<¿£±þ鮕+_>L"øê7Ì‚‰²+¶\‘we$_:ÔÉòÙÙÙ/^”Ó ,xä‘GÜÿ†©=^¹ ªW¯ž¼Âô÷÷=zô;ï¼#ç¿üòËJŒÚïÿû³*îŒíÙ³çþð!„2b±{zãµ3Ð;I±|ùr9ñàƒ6LN/Y²Ä»eStîÜYéføN47Ýt“r tëÖM¹_c„ žtþš>}ºœhÒ¤ÉÏ?ÿüñÇ?ùä“ÑÑÑ–Ö»¼UŸÊ£ÁÍf³rã"22òÉ'ŸTþU§Vuo{öìQ†âš7oÞí·_é¦Ô±cG9í* Ô«W/u{T¶×ÞãߨþÕ{¾ÒÕÞ?øàùl¦¤¤¤-[¶ÌŸ?Ïž=Bÿ¤¤$§7Ëh/áãÙ§c'i¯ŸE‹É1¤L&Ó† Þ|óM-I1½ûËCnÚ£®úÿßÿþ§ ÷öÛoÿþ÷¿—ÓuêÔéÚµ«WÊ#QÿN×Smõ/4ŸßŒÑXÿ¤“ÀµòëFÑ¢øka+öK"g¤h'LfQú“°—!D@ÒÏÉò6›-))iüøñBˆˆˆˆ5kÖ”••?~<777555!!Áp¼’J6lØàÁƒÓÓÓ›4i¢\’͘1ÃÕ±7õ¸Wþ´»}ûöÍ›7» Óo2™ä6*”Ñ|ðAe`c!ÄW_}õóÏ? £½“RSSøá‡öíÛ‡‡‡ËG¹Ÿ?þ«¯¾ò¼<²«IIIII‰ÍfkذaãÆ5j$ìVë›o¾éÉúO?ýôÈ‘#OŸ>]·n݈ˆ+ãu%&&®_¿^6~üx¥sÍÝwß-'¢¢¢þò—¿(1k×®UnsHJJŠ3fŒ"888!!A]V«õÂ… /^õnïÊËËe¾`Ù²ek×®MOOoݺu÷îÝÔøàà`åaØzÇ*š9sæ¼yó„Íš5KNNNNN.,,¼óÎ;•ƹÊVÔ©SGý¯«~szcûWïùJûùaĈ}ûöBdggË}d³ÙFŽ™œœðûßÿ~Ê”)•GàÒ^]ÛüÜsÏÉéöíÛˉV­Z©ž÷Þ{O>ÇJxp9ª½~233_zé¥÷Þ{Oa±X&Nœ8qâÄœœœóçÏ——————Ÿ;wî0\?zÏzÛ£®ú·Z­3fÌ¿|4iÒ$99ù矾téR»v횃Boy$êÿÚÖ¿Ð|~3Fcýh¿z÷€ v½÷Ê_ƒ?»- ^ܼõ×0!!!k×®µWâôN4íñ«V­ªc·ÛóóóŸzê)7Ô³gOu|—.]\Eöïß_ÆtëÖÍÍ Äûùù9-|eJ_’]»vÉ9ÊϰR«V­”à† V~¯ &¨WøÖ[oy¥<:ursàÀùtOÖ¿iÓ&§………£G®¼ eeeU®¼ò¾~ì±ÇŽ;æ4xçÎîw¢¾®OÛëpHiii}úô±Ùlò_åêHè?Þ>ûì3‡õðÁrZÉM85j”z§Ç°òHö¯öó•ööÞ¸qã¼¼<ìÚ:uªœ_VV¦dvŒ•Gûö6hÐÀiŒÂf³©{K-Y²DÎ>|¸œ#ÿ•ƒò4mÚTþ›žžn¬~C‡ÍÎÎvZ$WOÔX?zÛ‹Þö¨«þ…‹åã?vˆ)..Þ½{·œvȪ(õ¯Výõ/i<¿mݺU¼þúëêùU~¾k©íרç)€ƒßt(h'"—‹KŸŠ’ïDÅ9a þq"¸Ÿé§Üç„Õjíß¿=}ôÑ:DDDÔ©S§nݺ®~×Ò¯ôN²Ûí999Ü´iÓÂ… óóóÝl’ÒODrÕ;Él6Ϙ1C±aÃ-côè×H!ÕXï$!ÄòåËgÍš¥üÒèánJyÂÂÂJKK‹¯*))IOOÿá‡6lذcÇ»ÑÇ+ëŸ>}ú‘#Gî¹çžèèè ;vì?ÿùÏ{ï½—““ãáÊ+V¬X¹råwÞÙ»wï6mÚÄÆÆÆÄÄ)cTû”OëS½½sæÌ9zôèøñão»í¶°°°“'O®[·nöìÙyyy™™™rd%uÇ=½Ç[iié“O>¹mÛ¶AƒuìØ±¼¼|ûö퉉‰çÏŸ5j”pÝ;IÝ=JQXXè4ÌØño`ÿj<ÿèjï . Bü÷¿ÿ]¶l™ú¥¿ýíolÓ¦¼å­}ûör×uþôÖñœ­.†Ò»A{å;.Y²dÆ ?þø¯ïó W½zõNœ8‘•••™™Ù¤I“Î;_ëÀõÍnŸYEVGa]ãnù¸¸8¥çyÆ «|?½ñµB`` ¼êûä“OŽ=êõøZGéš!|ÓûÃ×ë÷µÚ^þjæõöRÃO-Ûk6›»ví:a„Ï?ÿ<999==ÝÕMy=ôÐÆ333‹ŠŠ~ùå—wß}÷Ö[oÕ[¤ëžöú”6oÞ,?Åžyæ™j+dõ«9Ÿ×wß}w\\\÷îÝ{ì±Ï?ÿü– z'yÁŸÿü瘘˜’’’iÓ¦ù"¾ÖÉÍÍmܸ±œÎÉÉ©uë÷µÚ^þjæõöRÃO÷Ûøì³Ï¾ð Y¡€€‡H‹Å²xñâÇ\™ûÜsÏ >ü‰'žX¿~½Þ‚]—´×'µ_ÓIöRQþ‹¨È¶ó¢"[”Ÿºv…ò“ÉZVVVVVf³Ù|ñaaar´Ý÷Þ{/--ÍëñµQEEÅ™3gjïú}­¶—¿:ù¢½ÔäãÓýöÞqÇÿþ÷¿ÿûßW^0<<ÜaÎûï¿/sIÉÉÉݺu  ]¾|yûöí>l¬× íõtûí·7jÔè–[niÔ¨QëÖ­««Œ€AÕðýÜðì"z¯ˆÞ+|èüõðW®(Rfffå'­¨-X°@½½ñ7nÌÈȸtéR»ví7nüÑG¥§§lÙ²eìØ±&“ÉÕµnÝ:11qË–-gÏž-++“+·ÙlnñÄ”)Sìvû¥K—¢¢¢¼ߤI“¹sç>|ØjµæäälÛ¶mèС•Ã8™™iµZ#""‚ƒƒ_yå•äääÂÂÂ3gά[·®eË–žlÔìÙ³e½½óÎ;•_}üñÇå««W¯VfžýôSÃë7|üh¬E@@@BBªU«NŸ>]TTTQQ! ö¿ÿýO¦·ü·Ýv[AAÁñãÇwíÚµnݺ?üðµ×^ëÒ¥‹ŸŸŸ›ÂУG%K–¤¥¥•””dff®\¹òž{î©–íPò.]º!š7o>k֬Ççççø¡““HÆ §L™²cÇŽóçÏË·HNN^°`ÁC=¤¥xNÛËup|êÚ^éw¿ûòÀ8»ÝþÓO?ýãÿ˜8qâèÑ£ Ô«W/uðþð–““sûí·Ë™­[·NOO—ó×­[§«`ôŸ†ÏWÛ—ºê³{÷îN÷¯nv‹‹‹3fÌ¢E‹öíÛwêÔ©ÜÜÜùóç;ÔØ~õÖ¿ÞÏkÃçåW›8q¢| ß=ÙÍëõ¯Ð{<ëý<ªæï?à†w5tÓ'Î_wšN²X,Ê× -_7õÆ !<(çÏŸ?ÿÂ… Á«W¯ q(j:u/^ìjýÁÁÁ®ê ¡Jhh¨öÊ‹ˆˆÈÏÏ·Ûí3fÌðJü³Ï>kµZ+~ÅŠfóoºRÂFŒqäȇøË—/ÇÆÆjß“&M’ëY´hQåWGŒ!_}ÿý÷å“ÉTZZê´Úõ^®++ÏÌ̬_¿¾áõ8~„žú—zõê¥\Ÿ;Ø»w¯f ü½{÷vòäÉáÇ;]D/‹ÅòÑG9}—Y³f©#ƒ‚‚*Ç 8pܸqêêZ¹r¥Ã[Œ7®¨¨Èé[ìß¿¿Êºj/×Áñ©k{…Ç—ëªIïñ¬ëóÈð÷Ã~½ÙÍ¿™hð‘0Y„ð¦‘?]”p¹X```bb¢"""bìØ±ræœ9s.]º¤ÄìÛ·Ïp¼¢¼¼\NŒ;¶¨¨h÷îÝBˆöíÛË!- pàÀ‡±EV¬XѧO9}öìÙÓ§Ogggûùù|yÒ IDAT…†††……UÞ³Ù|öìYåß—_~yΜ9.·ü·&MšT·nÝÜÜÜÙ³g{?nܸ·ÞzKQRR²ÿþÂÂÂøøø ! ôý÷ß« ¦Ô¼¢.((ÈÌÌŒ•õ2mÚ4÷?cºqñâE9á4ç¢|1UÆ…ñ÷÷OHH “µýâ‹/ê}ß&MšÌ›7ON5Jy*–õ8~tÕ¿"!!aáÂ…òk}QQÑéÓ§›5k$_UwÓ0P~ÿŸþ¹^½záááuêÔQ~[nÖ¬YRRR\\œçÏüZ¶lÙ€äö&''[,–víÚÉG’½üòË'OžT®M&SBBBýúõëׯ?dÈ-Z!o»í6õ R±óçÏW{fffNNέ·ÞªQNÓs\µ—ëàøtÊÍùá™gž‰‹‹BôìÙÓýÍt‘‘‘÷ß¿"??Æ ê—Ö®]{áÂ… øùùõèÑcÍ·ZpMïñià|¥½} «>…)))Ý»w/------))Y¸pa·nÝ<)€SsçÎ}饗œv$Qr— ííW謽Ÿ×ÆÎºÊ_=|WÿBÿñ¬÷óÈØ÷ÏØ;É¿ÀNW^wu³›ä»'»ýðÃ2lÆ ʯèqqqÊ/«ùùùJ|§N”5'$$hïÚm±XÔ?â7Nã‚5’¿Nœ8ÑóøøøxÙ5ýرcòë¸"44tݺu²`çÎS_+·iìÞ½[¹°‰‰‰IMM•ó=hFéÂàt¼Þ¿üå/òÕ—^zÉÕrsseŒöÞ&“iË–-ræÂ… Ý—°Êõë=~ôÖ‡d‡«Õ:jÔ(yáçç7kÖ,à€ët¬†ò«uíÚuܸq)))r©ŠŠŠøøø*tã™gž‘«:~ü¸²½¿ûÝï”›¶.\¸à4Y³lÙ2¥±Øl¶o¾ùfìØ±½zõjÚ´©º~† ¢‡=zô3M&Óøñãåüƒº/¡›örŸ•¹??|ÿý÷r…Z®±ûõë'ƒ7mÚäðRß¾}322ä«/¾ø¢Æ²¹§åøÔ{¾ò°}UIW}Væ‹'»Íœ9SiYß~ûí„ zõêÕ¥K—6mÚÜzë­7Ýt“:Xoû5öyaàÉnφÏ?Âg½“|Zÿzg½ŸG†¿ÿx¦¦¦“”¯ûr`ZÅ]wÝ¥¬aÈ!ÊüGyD™ï½÷jÝüJõ_xá .X°Àn·gee¹úÖ«+~Æ ²<ð€z~£F”ûÚ·o¯Ì?þ¼œ9fÌuüèÑ£åüŠŠ Ã'ºï¾ûäJ¶lÙ"ç¼ð 'N¬[·®bòäÉòU7½Ÿ \®+sÒÒÒä¹Qåúõ?zëÛ¶mNå>¬C‡yR~§BBB”tØÜ¹sµ/èÀb±(9…¾}ûª_êÕ«—R?N‡7úì³Ïä«_}õU“&Mœ®ßd2:uJ†õîÝ[ýÒÈ‘#åü*ÇvÓ^®ƒãS×öÖ©SG9µä€”ëíO>¹r³Ùl~ì±ÇöïßoWÑØ§R;7ǧÞó•‡íË=½õY™×ÓI¿ûÝïdú ¼¼ÜáþÄÊ ´_cŸÒIZΞœ„oÒI¾®½Ç³ÞÏ#Ãßøàu¼rü8¼¯WX­Ö+VÈéÎ;^O·nÝn¹å!Ä… þûßÿª_Ú¼yó‰'ät«V­*/«TìÑ£G]õ€ëÚµkÓ¦M…gÏžýòË/Ƹ¿ÙÍ}{¹ŽOî··Q£FJu>}ºÊµ) ?''Çb±$$$¤¤¤,_¾¼mÛ¶eee)))òÕÆ{m„nO]ç+_·/½õY FŒ!·hùòå«V­rl ýúôóBMËùÁ“óø´þõϾþþà‰š›NrsÙpôèQ9¡N';wî‰'ž¸|ù²"((húôé§OŸž9sf•_ª¬V«IE㽉‰‰‹åÔ©SNŸV£7¾M›6r3m6Ûwß}wèС'Ndeeååå•””È1>„ê_•oíc.(WÚžp›æá‡–ÿ8PxûrýŽ;î(//?~ü¸|¯÷ß_érâ ]ÇÞú—ÓÈU•––j|_BBB†¾téÒ;w¦¤¤œ?^él¥¾–Ыk×®râôéÓv»ÝáÕ#GŽÈ §—sÊZ,Wëo×®œøå—_\ŸO'¹o/×ÁñéÀýö†……)ÓJÃwC9öî¹çžãÇüñÇ-[¶,**zçwâââ”·(++ó°ØÚO]ç+_·/½õY ”B“““« 6Ð~}úy¡¦åüàÉùÇG|Zÿzgß ÿð„÷;Px‹›Ë†¬¬,9áp9ôù矷hÑbÆŒ f³9<<üÕW_}úé§_~ùå%K–TþÚgØwÜ!ï“zýõ×¾‹WÆe°X,êìRÉUêžS®~möÊfV¾\/))±X,}úô ñzïõŽÆ[*ª¤ëøÑ[ÿJ·eU•ß×á‚…|÷Ýw]UH•÷[¹¡¬³°°°ò«rÂiÆÊU·/5eP*õu»7é¤*ÛËup|ªU¹½ùùùº   ,-æÂÂÂýë_ÿøÇ?Ο?/„P†S†7F×ñ©ë|åëö¥·>«ATT”œÈÌ̬2Ø@ûõéç…š–óƒ'çñiýë=ž |Õøý@Qs{'¹ùV*û™ ÕU“"++käÈ‘mÛ¶]¼x±LDEE}òÉ'›6m29iÒ$ùï#<¢t6ñ„®ãGoý+íR.B6›ÍÕûê2pàÀ•+W6lØ0--mذa-[¶ŒŠŠjÚ´©2ô†'~VòÑÑÑ•_Ur@2ûà@©X7½”Û1n½õVWíÎM:©ÊörŸjUnoff¦RíJÏ7” Úâââ©S§6mÚtÒ¤IÊÞTÒIž ?¤÷øÔu¾òuûÒ[ŸÕ ¤¤DN8 ùì”öëÓÏ 5-çOÎ?>âÓú×{<ø> UÏ÷…7ÓIö0ÞÕ¯Ð&“©M›6rú믿vºìÁƒ‡›””$çôîÝû•W^ÑU­½Ç³ïj>ýþ æi&B}ÁÖ¡C/Æ»úV:lØ°ØØX!ĉ'vìØáf #FŒøâ‹/俽zõræïïßPEù!Ñ•7ÞxC±oß¾5kÖ¸ÔŸššª|ƒœ6mš28‚†mPo¯«ßåeaHHÈÃ?l³Ù6nÜøùçŸÛíö~ýúÉá\ ³jؘ1cäML7ž1c†‡kÓuüè­ÿãÇˉ† :<~È+c»´iÓFv¡²ÙlÊHO’r3”ü¥ºò²Zö¯2ºGppð“O>©~)..®K—.òþóŸÿT^VKïƒ(D{óÍ7ÿú׿6nÜ8,,¬S§Nr´láú²VcûªíǧBãö~úé§r",,lݺuÊí„Nýøãò6‹Åò§?ýIýR||¼ÒåÈ‘#?ýô“±28>u¯|ݾ„Îú¬Û·o—=ôÃÃ+3Ð~}^èý|ÚΞœ|ħõ¯÷x6ð} 2ßùD~ö÷÷=ztaa¡œ?`À€*7®sçÎgΜ‘ñË–-soWqx.¯ƒž={Ê0_δÇ1B)ƒÕjýøãŸ|òI§}é¥ääd¶Ün·—––îܹSÎܳgÝn/))±ÛíëÖ­s³9Ä.„6l˜œYQQáþê¥Êõë=~tÕXX˜òàí“'OÞ~ûír~PPÐG}$ç+ãû(·nݔ¨ŸZ™””¤¼TyY-û×d2=zTœ?^©êðððo¾ùFÎçwœ–|öìÙ2À}ú£G6›Íîšò ¿šööRÛOIûöý®»îjÔ¨QxxxåK÷÷ß_FæååuìØQÎŒŒŒTöûSO=åþÝ0p|ê:_yÞ¾ª¤·>lÞ¼Y.øÌ3ÏxR E£F¬V«rH¿ùæ›n’Ú¯±Ï ½ŸïBÛùÁ“óbâĉ2æÇt_í|ZÿŽg½ßœÒòýÀªÛõ“D©ê‘&eWr¾¼Lo»'ê¾ø›åm6[RRÒøñã…kÖ¬)++;~üxnnnjjjBB‚ÃûiW~µ6lØàÁƒÓÓÓ›4i¢Üÿ?cÆ ‡o«²k·¢Òf³5lذqãÆ5’¯Z­Ö7ß|Ói8tV/**r&ɮ۷oß¼y³›0ñIIIñññcÆŒ‘EJHHµaµZ/\¸pñâÅ#GŽ<þøãJ¼áÞIuêÔQÿëê‘çÊM+‹eíÚµrzõêÕ:u’{AÝûÃd2É}ªP®$|ðAõóÈ¿úê+õõ¹ƒÅ‹2¤OŸ>f³ùƒ>èØ±£< ¬_ïñ£«þ/]º4sæÌyóæ !š5k–œœœœœ\XXxçw*ïªmÖ[þ”——Ë5,[¶líÚµééé­[·îÞ½»ú6«àà`åáÐ -û×n·?~ãÆBˆÈÈÈ;wîÛ·ïâÅ‹]ºt‘C‡:thâĉê7zî¹çä´’ŸjÕªÕ_þò%æ½÷Þ“Ï’¾ûî»?þñIII7ß|³23==ýСCòØN ¦½½ÔöãSïö÷íÛwÇŽòiîõëן­dzÞÿxæjï¤àÿ«:6è>ÇÞIBˆµk×Ú+qu'šÆøU«VUޱÛíùùùNWïÔ©“Óx»Ý~àÀÎ;»Ú(¥ƒ€${ª;Õ¿Ó­[77µd8^ñØc;vÌéV(]0¤]»vÉùÓ§OWϯ²wÒ¨Q£Ô«uõ`£Áƒ+1-[¶”3o½õVe¦úÂÉÏÏÏUå;P.½œöþB4iÒDé@¤\¢X¿ÞãGoý|öÙg1ÅÅÅ|ðœVçV ”„ •_MKKëÓ§ÒëG¹Z0°…cÇŽ­¨¨¨ü.Û·ow¶Aƒî‹m³ÙœõÞ·oß)S¦L˜0áücPPÐßÿþw¹Håa§uµ—Ú~|êÝ^©Y³f_}õ•«•ËçÜ)ºwï~ñâÅÊaÛ·o÷üñázO½ç+]íË0íõ¹téRWa 9z—'†šítåûöísÖÞ~…ŸZ>¯t•¿¬¬Ìý[ØÝ~vkä»ú7võÔSÞ¼_×ñiì|¥±}yHK}jI'¹¹?K»zõê=ûì³ëׯÏÈÈ(//WVîôÞ1íWxðy!¹ÿ¼6|~Ð^~-餘˜Wå×ÎGõ/8ž5~þþàc'¹ù«Ê×÷ TÓ[º5tèP»Ýn³Ù\å›<Œ‡wÕ´ãBˆ~ýúÉ+´¢¢"‡Áo´öâ­í ©S§N`` žðx£©Qõi6›###ëׯLR úQÿîy4üÄÃb±L›6M±lÙ2-CÒ\—4hsçw4HƒvÊ”)ê¡go´öâÅíµZ­&88ø_ÿú—Æà©S§¦§§{øŽÞåÝòרú´ÙlÙÙÙ–çFCýT#z'iðÜsÏÙíö²²²-Zø"^W£ŽŸ“r¿¡ƒùóç;üÔ£µ—µ½áááUÞF¤¨}ÇjZùkZyn4Ô?@µ¹öýùk¾àà`ùÄŸE‹¥¦¦z=¸.åää8Ìùá‡ú÷ïÿâ‹/ÚíveæÖ^n´íp]âf·ª3&::º¸¸Øá™8ÞŠ®KgΜ9{ölVVÖ©S§vìØ±mÛ¶äääÊa7Z{©iÛ›ŸŸ_«Ç…©iå¯iå¹ÑPÿÕÆ$ì"Úñ¸UÈêXuÌõäæ›o~úé§+**þö·¿ù"¸‘ÝhíåFÛ^×%ÒIÐÅ^u 17t H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@ÒIÐtt H'@“°‹è}ú–Éê蛲 Æ£wt H'@ÒIÐtt H'@ÒI^3xðà/¿üò¾ûîóQ»wïî4ÌU:éøƒ ÈÉɹýöÛåÌÖ­[+y¨uëÖy¯×233­VkDDDppð+¯¼’œœ\XXxæÌ™uëÖµlÙÒÕ‚Mš4™;wîáÇ­VkNNζmÛ†Z9Lo}º¢÷x ²;¤þ ŸüëÃßBýšN²X,Ú/¿õÆ !<(çÏŸ?ÿÂ… Á«W¯ qØ”:uê,^¼ØÕúƒƒƒ]ÕAC•ÐÐPí•‘ŸŸo·Ûg̘áIü»ï¾+ ¹}ûöÊKÍ›7O¾º~ýz9Ç@}vìØÑi˜«tÒ—_~)}ôQõüÊùååå‘‘‘†ãõR::1âÈ‘#[qùò娨ØÊK=ûì³Ê‚j+V¬PwX3PŸNé=¨üÝ¿ò°(Þ"Jþ'„öü_ç&&& !"""ÆŽ+gΙ3çÒ¥KJ̾}û Ç !ÊËËåÄØ±c‹ŠŠvïÞ-„hß¾}@@€bÀ€˜6mšz‘+VôéÓGNŸ={öôéÓÙÙÙ~~~¡¡¡ò–·¢¢¢ÊÛh6›Ïž=«üûòË/Ï™3Ç}µ(&MšT·nÝÜÜÜÙ³g{¿lÙ²çž{Nѽ{÷¨¨¨óçÏ«_íß¿¿œX½zµœ0PŸ)))Ý»w/------))Y¸pa·nÝ\•322òþûïBäççoذAýÒÚµk/\¸Ð A??¿=z¬Y³Æ@¼Êñ°hÑ"!DAAAfffll¬<BBB¦M›æÐíhܸqo½õ–¢¤¤dÿþý………ñññ 4B 4èûï¿Wv´útJïñ@íä¶wRô^rµ¯I蟪uì¤~øA†mذAéÕ§ôLÉÏψˆPâ;u꤬9!!Aû­m‹EÝ eܸqlÔ¨‘ìù2qâDãM&SFF†,À¨Q£Ô/µk×NÎ/++«_¿¾Ã‚>Š»_¿~òÕM›69¼Ô·o_¥¨Ê­yzã ¸xñ¢\ÉîÝ»•DXLLLjjªœŸ––¦Ž—·:;v¬E‹rfhhèºuëdü¹sç*¨åÉØIzj©ª¨.ýñÊD`ßÅAEE…œØ½{wvv¶œþå—_FŽ)§ëÖ­Û»wo%þ–[nQ¦O:e·Û5¾‘ŸŸŸú_¥L•¦L™|öìÙþóŸÆÛíöåË—Ëé¨_zä‘GäÄ×_››«±lR?RúI™ÍæÇ{lÿþý7nTªºqãÆÆâ PöË¿ÿýï]»vÉéôôt¥Ð-·Ü"{*I‰‰‰þþþBˆqãÆ¥¦¦Ê™—/_þóŸÿl³Ù„QQQñññ†ËS™Þã€ZªŠtRÑFQþ‹Bt«£@ %} “Š;w:tHN+½N„»ví*..–Ó›6mš^é9â>0™Lòþ/!Ä×_ítÙƒ><666))IÎéÝ»÷+¯¼¢«x®tîÜùá‡BLžÚãׯ_/Ã>ùä™Að÷÷=ztaa¡œ¯ 0äFçÎÏœ9#ã•‘‰ÄÇÇÛUxà7+ìÙ³§ s•œò0¾E‹2>//oÛ¶mUIoý+6oÞ,—zæ™gœ¼ÿþûJI:vì(gFFF=zTÎê©§<‰WôíÛW]ÿíÛ·w–œœ,¦NªžßªU+eÙ† *óGŒ¡Ì·Z­üñ“O>í¾ZôÖ§Þý Àuáj:ɿɯóüo––Nþ¢Ö9¦“„sçÎU§JKK>¼sçNåF3cñŸþ¹S\\œššZRR¢Ì™>}ºÃjccc¿ýöÛÍ›7oܸqýúõ{öìQIv»ýòåËíÚµsZžnݺ©Ësß}÷¹©­={öØíömÛ¶¹‰ñ$^±oß>uyÎ;Wyô(5õ9iÒ¤M*9992þСCÊÌ9sæ(ñÑÑÑ/^TÖùÍ7ßlÞ¼ÙjµÊ9ß|óÃMgzã?þ¸ºüê§õ©}ÿý÷2`Ú´iêù®ÒI&“éí·ß¶Wrùòå´´´ýû÷»J/ê:ž ì_j?gé$W"W9I'…„„¬]»¶òu»«;Ñ4ƯZµªrŒÝnÏÏÏwÚÏ¥S§NNãívû:wîìj£”&R—.]\Eöïß_ÆtëÖÍM-Ž—&L˜ .Ï[o½å>^c}.]ºÔUý(V¯^­^¤{÷îJ†Hmûöíááá•K¢7^5j”:XRÛµk— pÈ$ºJ'I=öرcÇœnìÎ;=©OatÿPÛýÚíů‘(O3² «ÕÚ¿ÿ=z<úè£:tˆˆˆ¨S§NݺuùåO╱“ìv{EEENNÎÁƒ7mÚ´páÂüüüÊ« +---¾ª¤¤$==ý‡~ذaÃŽ;ìÎ'/©ÿ-**rf6›g̘!„ذaî]»ÜV‰‘xÅòåËgÍše2™ä¿K–,q¯·þÝÈÊÊRÿ»cÇŽÛo¿}„ ýúõ‹‰‰)**:tèPRRRRR’Íf«¼¸Þx),,Lý¯ƒ©2]c')V¬X±råÊ;ï¼³wïÞmÚ´‰‰‰  :uê”ÓE4Ö§áý @ígw9F’–±“|GéM³`Á‚jzK·†j·Ûm6[Û¶m}Ú…ý ¸aUýÌu!,‹²gÙ²eNOæaŸÿí·ß–””èõzƒÁÀáÎ%%%®ˆÅb‘H499Éá]¼Œ¿¼¼¼®®®¨¨èÑ£GFv'ÿ»&@»“&&&*++Y–õw A+??? ãóù„«Õêï@vI å`ç´œ488h4•J¥¿ fuÐØ~+'‘Ë?ÀÎh9‰rûöí´´´‚‚ÌgˆOhh(ÙY9©¹¹ùÂ… ååå;ÜÙÝõ»)pò°s[NZZZêêê*//—ËåþŽ%˜ÈAc/^üå—_üÈn üì\à–“!ÕÕÕaaaþŽ%˜¡GÆ¿Ø[ºœDéëë3••• Ãø;– %“É0¦ÊØ[BýÀ¿p8*•ª±±±¼¼üÞ½{\m›ššzöìYBÈ¥K—,Ëæ_ýuLLLWW×óçÏ7¼•žžž››ϲìüü¼V«}úô©^¯ß°ì›o¾ wþ855uíÚ5BHHHHzzzfff\\ÜÈÈÈãÇÿ5Ú¨¨¨¦¦&–e;;;GFFÜý²;‘——§Õj‡‡‡}±ù–ñŸ;w.!!aÃJƒÁpùòå-79~üxnn®óÇ£G=zÔuAww÷“'O<[_VV–——g±X~þùç-ï~òäÉ?üpdd¤³³sû/ëŸæ€[Þ–“† …f³™“h¶d±X~ûí·ÆÆF“É400Àɞ΀Y–ݲœÄ²¬ë2ŠÏçŸ:uêСC„‡ÃA‘Ëår¹Ê?ç¼*':tH©T …Âׯ_ߺukyyÙõÝãÇ›Íæ¾¾>ï"$„………ëׯ×ÕÕ™L¦‰‰ ï7tVÞ7•is9‰a˜šššÔÔT£ÑØÝÝ=33C‰?vìXTTTEEÅÛ·oµZ-]ìp8h/!$//O©TŠÅâÚÚÚŒŒŒµµ5½^¿°°°¸¸899ù¯¡ž8qâàÁƒ³³³===^|ãùâ‹/.^¼Èížï‹ÿîÝ»®?–••o³OWW}ÑÜÜûìÙ³íâÖú¹¹¹éé餤¤ÂÂÂÍ夌Œ @°´´ôêÕ«mîè=_ä€sžÏNJHH¨ªª …„äääsçÎEFF:ߌŒÌÉÉÙü4“Ǧ§§»ºº*++ããã½ßÍl6Óö"gPDDDLL }Íãñø|>ùÿå¤üüüÔÔT³ÙÜÖÖöòåK›Íf³Ù¦¦¦Z[[M&Ã0ÇŽÛò^ëë넱Xl·ÛoܸqéÒ¥––•JÕ××÷öíÛíã,**ÊÊʲX,*•jmmÍëïýï¸=hl÷ã÷m|KKKsý5¦ ñqk’z€Àçy9©¼¼œa•JuùòeN'‘H"""è»……… Ãpû¸Z­îéé9sæLll¬—[­¯¯¯¬¬—î¤úúú¯¾úJ,—“ëspEEE„þþ~«Õ꺕Ífûã?!r¹<**jË{Ñoܸ¡V«7<“µÔÔÔ²²2‡ÃqóæÍ¥¥%7¿¢‡8ìŽñKü{ñâ…Ñhd¦  Àõ:˲éé鄟>iè„î$|–“RRRärùØØ˜F£1 íííz½þÀõõõ2™,%%¥  `yyY­VsîðððãÇÏž=+‘H¼ÜŠvÑr’\.ŒŒdæðáÄ:ÄÇf³ÙívºX*•ÒJÙôôô歜Ϭë±ü‘«­ü¿7Çàà !$77—ö¦QYYY!!!oÞ¼¡“˜|ŠÃüøŽ‡³“rrr!ÎáÓV«µ½½½®®N&“555Ñ‹}}}Îr ‡t:@ 7™LÞìc6›£££i#’B¡X^^¶Ùl …b```óà$gÛ‘ÑhÜr+›Í&¢££7¿KËI Ãì0°ªª*†aèú™™™G¹÷ÅØ¼URR!duuõõë×›ßu·;‰ZYY¹~ýºÍf‹ŽŽV*•n|17i4š¾¾>ηõ]üô·‹Mç|½Édš˜˜ ÿ× ´ Oºù(ÿ¾Ã}9ÉX–=sæÌ«W¯ݲ‡ÅYNr·¡Æ`0ܼyÓápdggççç»õÙÒjµ*•Ê;ŸÅ¯Óé!‰‰‰;¬¹»~``€’™™™’’"“É–––¶¬r§ùð‘=PNâñxÕÕÕf³ùöíÛnK«E))),ËŽŽŽÒ‹jµÚápÐóÝ6ÌEîííµÛí|>¿©©éðáÃB¡Ïç'&&666J¥RƒÁððáÃ-oäYw599I+hqqqî~|{V«µ­­Û=7ðEü´¸#‰?þøã„„„ÐÃø8YÿæÍ­VËãñjkk !¾FíBþ|ÁÃÙI»©¢¢B"‘\¹reËA×sV‹ôz½Á` ¯———§§§“““ɦrÒ»wï:::Nž<)‰ªªª!‡ƒ6ÍÎÎÒ»œ‹CCCékçôgiÉb±\½zu'qö÷÷ÇÅÅeeeUWW·¶¶®¬¬xú7úþûï¹Újï‹¿¾¾>,,̹Œ¶EFF677»~üÖ­[óóó®W4ÍÐÐm+--u^ïèèØ€»ë !ƒƒƒ§N ]__§Ã¹}awòÀ¹@/'9r$''çÊ•+V«•Ûívû?ÿü#‰œOºQ£££´œä:Š›zùòeKKKqq±\.—J¥ëëësss######t²’Ã0±±±>îzÆÙÜÜÜÎCíêêŠŠŠŠ=qâÄû* îúî»ï8Ùg'¶Œ_*• … +CBB6ämËòÙï¿ÿ>00™™™‘‘!‰˲[ÎA÷lýØØXiiiDD„Z­ÞükÀ‰ÝÌ?·â Ľ‘>»G*•ž?¾»»Û§³ƒÞ… 6\immu«žµßÄÄÄ|ùå—<¯¥¥E¯×{¹òA&pg'ñùüÓ§O¡–Ä-•J…ZÆ6"##kjjx<ÞóçϽ¯%m†üÀ^¸»}öÙgv»½»»Ûß•û÷ïÓ#êÀÇKHHJ¥©©©ééé<O«ÕÞ½{—ó!ÿ´œ”––väÈ‘¶¶¶ÕÕUÇ<†‡‡ÿüóOGˆ„BaCC}íp8FGG{{{9ÿÝCþ 8h9éÓO?íééq¸Þ›ššºs玿£Pf³yyyY§ÓÍÍÍi4NÇù-ZNúõ×_9?Êm?3×®]ówËápüðþÛù€` £¸QKâÖO?ýäïö5ä‚ CþöŽÿÐ2‡¤à{éIEND®B`‚kitty-0.15.0/docs/screenshots/panel.png000066400000000000000000000275011356737523400200620ustar00rootroot00000000000000‰PNG  IHDRh=©êæ¦ pHYsÄÄ•+ IDATxœíÝw|Te¾ðç”iIB†°” à"ˆ `èHQaX±±«¸(¢+k˲zE”•Å‚r½ÂÅ‚â"¬p‚(ÒBé%´„Ð&$SN¹À ™2å¤ Ï÷ó™O˜É9ïû;9Ã$3ÏyßW@å*©]"""""""""""¢ª¦Ý htƒDDDDDDDDDDDDt} hˆˆˆˆˆˆˆˆˆˆˆˆª"""""""""""¢*Æ€†ˆˆˆˆˆˆˆˆˆˆˆ¨ŠÉÕÙyzzºPýÑÍ+==]¯®¾+# )ÕfyALvv6"""""""""""ª©©©e4å7††9F$P:)/ˆÉËËc@CDDDDDDDDDDDÕ">>¾ÌÐ¥dpS,°1,¤©´)β³³…ЇÃÁ€†ˆˆˆˆˆˆˆˆˆˆˆj”ÌÌL¸à”7Ê&\F$¾vÒÓÓ…’áŒ7ˆq:~ýµhÑ ˆˆˆˆˆˆˆˆˆˆB³gÏ€ÕjÕÀn·ûBoHSbÚ³°CCšôôt!33S®„2Þ@ÆÄøõWTTÄ4DDDDDDDDDDDT­l6›QQQ:àØxÚnݺiFNun@â7r&33St8Brr²PPP ” `\.—ß}·Û}ÝþcccàQHòóó RÌf³‹Åo{›Í¦GEEé‡Òív»^"¤Âj hJ†3yyy¢ËåÜn·P>¾ÔÈo8³~ýúì`@DDDDDDDDDDDD5Y—.]R%I*TUÕe6›Ý‚ (¢(*„4å4r9—9\ g4h äææŠV«UÔ4MŠˆˆu]7)ŠbEÑR¼]¯Ú€¬qãÆUÚQe:räHu—@DDDDD5X£Fª»"ºIÅÆÆVw D7¹ÑÕ]@µÙºµj]Jq±z<U €vùòe]EÍétê6›Mw:°Ûízvv¶žžŽ«!·‘R‰L1-Z´@QQ‘+Øl6Ñb±ˆn·[EQ2™L&MÓÌ!¥A222ª³{"CÝrË-Õ]ÕP|¿@DÕ¥V­ZÕ]ÑMî¾ê. Ú|üqõ»$If³Ù,‹¢(¹ÝnÑb±ˆ6›MŒŠŠŠ„-ZÀápyyy-—rÝ€¦øº3‡C(((‡xùòeQQAUUA’$IEIQI„òFäT‰Ž;büøñÕY‘a¬V+¢££«» """""ªa¢££aµZ«» "º Ùl6˜L¦ê.ƒè&Ö@½ê.¢ZŒÝmÛÖˆc—= @–$IRUUPE¸|ù²èp8Ä‚‚Áét puÍuƒš FЧ(Š`6›EEQDEQDA$”?eZ•yæ™gСC‡ê.ƒÈ|ãEDDDDDÅñB."ª.&“ Õ]ÑM,Wš›Ïw$bôèšq쪪J¢(Šš¦ Š¢ˆf³Yt¹\!ç,ïèt:ïôfW ñ%?²,‹š¦yCšj·páÂjë»oß¾hÙ²eµõбæ@üZŽ‹S‘ßT,))©ºK jÎyM"$³É,[•™JâÔf7¯„„„°Û))MqoèßÜÛ£RRš–µ¾•k@Ø-$¥ÔÁ¤ù÷¡yûDê©:³f…ìFAEQ’eY4›Í‚7'QEðNsL{!%;Š¢àv»Å«áŒ ˲ ŠbÈI‘Ñ>\å}Ö®]S¦LÁ­·ÞZå}ÿþ÷¿ÇæÍ›ƒÞ¯dÍÁ¶“••…‘#GÝoe ä\ìÝ»}ûö­ÂªBÇÅ?‰ˆˆˆˆ¨:ÞTÖû¦×_sæÌ1¼Ý˜˜$''Þ.Õláœ÷ˆø ýz(†üg†ügšÜ×$è6A@DDâããR%½|î$½ÔZÒÕVOll¬!íЧvíÚ¨_¿~Xm´ïØÓ¦ÿS§MÃĉ/ s—{0qâ_0uÚ4L›þO´ïØÑ jÍFÒJl½(¢Å£Áb«öɰ²u«1ÇnQE]×UUEMÓUU…ˆˆÁn·‡”6V¨”µ˜Ýn"""|{ Òu=äÈ3..µjÕ‚ªª¡6QJFF†amb̘1ÈÍÍŲe˪´ßp„[³ÍfÃ¥K—Êü^³fÍpøðáë^ÅÈ6¡¸ÏEEx¥ÑÍ+Ü÷>ú(vìØÌÌL,X°#GŽDdd¤AÕU__Å™L&tìØ›6m iÿßþö·X¸p!víÚ…Ï>û mÚ´ «žU«Vá±Ç yÿ_c=•ñÜ÷¼ ’ÿGY¢Tú£²ŠŽý©§žBvv66oÞŒ¬¬,lݺÏ=÷,KH5Ū*F:¸¯°°ÌïWu=FŒœiذ!&L˜€¥K—â›o¾Á† BšÒ=99[·nEbbxWÿ·lÙ³fÍBff&æÌ™ƒV­Zù}ذaX³f –-[†™3gbèС•:½Û¦M›°uëVßmöìÙ•ÖW0dYFëÖ­‘••Òþ‚ `ä#bÒ__BËÔ–ˆŠŒ‚$IÐ4²,!*2 -S[bÒ__ÂÈG5d4Í¢E‹0|øð2¿WÑy7ª/ãŸ?÷…±/ J:ôKÆã¯ßƒ¾·ünb{t¾¿™o›Î÷7ó÷ÁØi÷bø¤Ž¸#­a©gØ ð×JÝžšžVªOÉ$⯠àñíªýãÃ;vX¿~=ºwïŽèèhÜu×]X½zuXíéº.hšæ÷dõ®Cã½ß¢E 8¡¬l¥$CG¼„М8qùùùèÔ©$ɸYÒ:vìˆñãÇÖÞõÄÇÇãÑGÅ´iÓ ™*“50kÖ¬1¸²ð܈ç"œkšˆˆˆˆèædÄÚ”«V­Âøñã1}út8p&LÀ§Ÿ~Z)k^Ve_ÅuîÜ[¶lÛízߦM›âþçðÅ_`À€ؼy3,X€ ÕN³fÍ0iÒ$|ðÁa]qþk­§2žáœ÷@zìGŽA§NеkWüãÿÀèÑ£1hРú|íÜ9˜u9µ4­Zë±Ùl0™L!‡WóæÍñ¯ý º®cúôéxî¹ç0nÜ8(ŠV»¡JNNÆŒ3°bÅ <ôÐCؾ};fΜéwñðÚµkñòË/ãã?ÆáÇñ§?ý }ôQÈ!WEzõê…´´4¤¥¥áóÏ?¯”>BѦMìÞ½'¤ý „¡C‡ÈˆkA¬¦ixoÆ ¿í"#"1tèï0 Äÿ3ÉÉÉøóŸÿŒ)S¦ ^½²‘ä¼Õ—±ÏŸ¶Êî'P]‡6GÚRá,ôàÔá 8±ÿ<öl<‰ÓG.ú¶qœsâô‘ P<*¥Æ¡Ïã­1òÕ»a‰¸öÿÿèÏùØþíQßí§oBS5¸Š®ý_NJ©ƒ®C›£ÿo«f=º-Ú¶ ïØ7oÞŒ^½zÁétbܸq8yò$î»ï>lÛ¶-ä6äR–€‡Ã!´hÑÂw_QAUUAÓ4Á;½™®ëB¨ÅíØ±Ð¥K—Pv¿®gžy:t0¼Ý’Ƈà믿X,>|mÛú/^ôàƒú¶ñj×®/^Œ¬¬,¬\¹½zõòû~ff&>ìk¯mÛ¶xë­·°|ùòrëE³gÏÆ´iÓ®9Ðv>ûì3ìß¿‡.³^˜?>V­Zøþûï}õ_Ñ6 4Àž={J­#Ó§OlÞ¼¹Ü0¯¼ãЉ‰Á믿Ž5kÖààÁƒe¾(Vt.¼’““ñ·¿ý ذaC©!ÿ·ÝvÞyçüøãÈÎÎÆþýû ¹ Àˆ7fDDDDDtã0êB­S§NaݺuX¶l^{í5<øàƒhݺ5Ú·oï·] êËf³áùçŸGff&²²²ðæ›o"Ô™Óo¿ývœ|8¦Nê{ÌåráâÅ‹¥†FEEáÌ™3¾ûí۷ǬY³0{ölôéÓË—/ÇG}ä*uëÖ )))(,,Ä3Ï<ƒ×^{ .—ëºÇõÊ+¯ N:¥^¼¯Ws í :M›6E³fÍÊ}‘~ôÑGѯ_?¿úSRRüB“ж9vìvíÚ…aÆùµÝ¯_?,_¾¼ÌÑ1åWBBV¬XÓ§OcìØ±6lEñ y90qâD,Y²¢(âóÏ?Ç+¯¼‚­[·ú¾_¯^=,Y²GŽÁ˜1c0`À 8°ür8ÕÑÍ£²þþ?~ü8Ün7ŠŠŠ|ò¾É¨¾ %%‡¨Q£ðÆo`ذaèÙ³gÐí'''Ãl6ã—_~ ¹Æ´´4¿Ù!jÕª…#GŽ=×Þ½{1kÖ,,X° ¬@ä×ZOIå=7aÄyD°Ç‰BE,X° à~TsΜÁŸ.^ô{¼­Ë…¯NžD»«ÚWU=Þ¶°cÇ4kÖ <òH¹aÁš5k0nÜ8LŸ>»víÂØ±c1uêT¿íŸ~úiŒ10xð`´oßíÛ·ÇÚµkƒª§K—.øþûï}÷£¢¢püøñëNwuòäI¸Ýî2Óꢪªßë³ÙlFÏž=qôèQL˜0Ó§OÇý÷ß®]»Ývýúõ!Ë2Ž9r}ÝÓz ¦NLPûÄÔ‰A÷´A÷µÿ~Ì›7K—.-74 æ¼?öØcغu+~÷»ß…ÔWI¡?¹}Ùv¬=¸ÿé¶hØ"¹Ç¯ÿû ¨ÀÝ?äÊ[ K”tûÝmÈËq û‡kA϶ÿ;‚&®ÁÜ—¿ «æY³Â?v·Û•+W¢_¿~¾Ïøcbb7†Ý¾QjD@³wï^˜ÍfßGÅ ‡¸ZY>ð¶Ï>û,/^Œ¨¨(ßÈ‘ßüæ7hÛ¶-.\¸PjûgžyÛ¶móûO\IKív;êÔ©ƒ… B’$Øíväææú¶y饗ðÑGaõêÕ8qâfΜ‰5kÖà‰'žðkKUUx<|õÕW8p ^}õÕr±>üðÃèÝ»7ÆŒSîßòj¦ë oTUÕ (Šâ»_üœ²ÍÿþïÿbРA¾+6, ÒÒÒÊ][¦¼ãJOOÇòåËñþûïcß¾}زe <dùÚ\Šœ‹´´4 >ýû÷Ç+¯¼‚Ï>û ß~û­ßÕ:Mš4ÍfÆ °k×.:t?ÿü³¡ÏçêX”ˆˆˆˆˆªVeþÝߣG\¸pÁo]@Þ7ÕdeeaéÒ¥8xð .\ˆÃ‡£yóæAµ˜˜ˆ¤¤$lÙ²%äú¬V+bbb››‹Úµkã¹çžÃŠ+ ëzØë\°žë+ï¹Q#Î{ ‚9ö¦M›âàÁƒØ½{7Þ|óM,]ºÔïóŸŠ4s»±ÇlƧv»ßã¬V,ŒDªÛ]¥õÄÆÆ¼mEÖ¬Yƒ_|#FŒ@FFF™a’ÃáÀ/¿ü‚M›6aÞ¼yxüñÇq×]wùͪ¢išoÔªªÐ4 š¦õy‹ÅbA:upöìYÔªU úÓŸðé§ŸB×u$$$”»_—.]péÒ%ìÙ³'ˆ#¯\š¦ù4ªªbûöíX¾|9Ž9‚/¾øÇŽCÓ¦Mƒj7.. ÈÎΫ¾ÛÛÜ€ªi~7íêù*ù¸ªiЯîg´`ÏûåË—qòäIÒhϟцô ÙNà‹÷®LéYÛ‚6÷6„dº~,ÐäöxÜ*Žþœ_æ÷Û½!b#±nñ^C?ó€­[9öãÇCÓ4Ô«W;vìÀ!CЦMˆ¢ˆœœCú0‚a º !óçÏ£mÛ¶°ÙlF•SJãÆÚ.::­[·Æ‡~ˆ±cÇ"%%ýë_1a„2ç€LIIÁàÁƒñöÛo—ú^^^ìv;z÷îæÍ›£C‡°Ûí¾4f³-Z´ÀO?ýä·ß¦M›’’Rª=UUár¹Ê­=..ÙÙÙHOOÇôéÓqöìÙ2·»^ÍÁ´S¾þúk8NôïßеkWœ9s¦Ì?Þ®w\;w.uEEñ_dž‹ž={bÍš58uêT¹5ÿý÷øïÿþo,X°3fÌúa ¹‚ˆˆˆˆˆn •õwÿ-·Ü‚É“'ãÕW_õ»š·¢÷MFöU–üüü ¦T³Z­hÓ¦Íu/< „·ÏQ£FaåÊ•P}úôÁ¿ÿýïj¹Zþf©'˜çFqF÷@sìû÷ïG³fÍкukŒ?Ï=÷^xá…€ûúÞfô:u0³¶ÿ´@«""0­N|R«V•Ö“Ÿ_ö‡²¡úöÛo1dÈlݺ3gÎÄ /¼Pj4MëÖ­ñÒK/aîܹ˜9s&ãƒjïÏpĈøôÓO¡ª*† †U«V•û™[BB^|ñE¼õÖ[×ý\®ª•Дü™ž?¾ÔTq×c±XмyóRŸ…"66Û¶m…Ëíñ»í?p­ZµÂ¿æÎÁüùóð邸TP§ÛƒmÛ¶z{Þ/^ŒbåÊ•a÷úógVØ}÷óÆ“X1kt]Ço»7ÀÃ¯Þ ³µì 0Zv®w%aÝ¢½(8_úõÙd‘Ðåf8uèöm;mhЮ1Ç~ùêt‘ü1ÚµkI’°cÇtîÜ9¬éÃÉAÊP@c·Ûõâ Ÿ,˺$Iº(Šº(Šº¢(º·¸PЏxñ" 1iÒ$Lš4 ß}weÔäÉ“qòäÉPšôã:-7FFF4MCaa!{ì1´k×ÉÉÉÈÈÈ(µý„ °víZlß¾½Ô÷¼#hzõê…7ÞxýúõCTT”ÍY–K]äñxÊLh+ZžŸŸV­Zá“O>Á“O>Ynàu½šƒi§*(Š‚… bøðှ}û–;z¦¼ãª]»6ìv{©Áâ¿È=µjÕªpîN]×ñæ›o¢gÏž¸té–-[†W^yÅ5hÔ¨„—ˆˆˆˆˆ*—Ñÿ7mÚK–,Áûï¿ï[ì}“Q}ÅétâܹsøÍo~V;Þ5A@Ÿ>}ðÏþ‡ 8qâDÅ ìf¨'œç†QçÝZÇŠè”hD7ñŸÊ>21Ñ)Ѱ׷}쪪Âápà›o¾ÁüùóK­W®ª®'ÔµGÊãp8ðöÛoã‰'žÀÀý¦´ïׯ^|ñE|ùå—xòÉ'1jÔ(œ8qQQQ†ÖpéÒ%¸\.‚€aÆaÖ¬Y(((@\\\™ã&''cΜ9˜3gNÐS©…JEhÅÖò*ù¹’¦i~ŸQ•Ð;²ÁåráÒ¥K¨[·nPû•Ù–ÛƒÂ"'œnßÍ£¨¸%±4Ðhº§Ë§ËÂ"'\¥Â¶ƒìy7JøÏŸO ­Ç^ÇŠ¬ïr°ë»ãHLŽÆ]JèÐ/Æþþ½›¿>Tf;-;×Gdm ¶”ó}# þ±'%%¸2]VV-Z„–-[âäÉ“hذaÈíz3EQ|ùˆ$Iº,˺ÙlÖ-KPÿñBAãp8ôÂÂB_H#‚.I’j@séÒ%ìܹS¦LÁ”)S°yófÀŒ3®;V † Ô ?ýô>øàßý“'OâÀ Aƒp±Ä< ­ZµB¯^½ðÎ;ï”ÙVnn.4h]×ñå—_¢sçΨS§Ž/ ¹xñ"Ξ=‹;ï¼Óo¿6mÚ`ÇŽ¥Ú+9·dIº®CÓ4¼õÖ[PÏ?ÿ|©m*ª9Ðvá½z£víò… d›ŒŒ ´nÝ­ZµB=ðå—_–ÚæzÇuñâE\¾|­[·ö{¼ø@Ïž}ûp×]w4kNN^~ùe 2?þ8î¹çž ÷©ÈéÓ§ýÑ#""""¢_7EQpú´1W§ÞyçÈÈÈÀûï¿O>ùÄï{¼o2ª/#mܸ7ûÃÄ;v ""Âo={î¹ß~ûm¸%²žŒxnqÞ£S¢Ñýîè<Ùÿ¢Þ[‡ÜŠÞõF£^„~ìf³¹RF[Te=𦅵vQy²²²pìØ1ÄÇÇû9r$–-[†Ý»wÃétâòåËp»Ý¥FxÁ^b*¸`ìÞ½6›Íï‚ÜŽ;býúõ~ÛµiÓ}ôæÎ‹E‹…Ü_°J…ón·»ÔgQŒ  Å®]»P¿~ý°G²äœ8f-ZÂévûÝnIªC‡á¾ûDïþѳß}Ð.ÍZ´¬´ “=ïF1æùS`yصÜÒ¨6ì1VÄÕ·ãB^!.ælQ&ß6¢$ ï¨Öè>¬¾™ŸÌE{Ëm†p^ö`ïæÊ ·N*ÀèÑá{ll,RRR““ãû}qèÐ!deeaРA!·nRR…ÿkãããu°Z­ºÍfÓóóóuY–u$Iw»Ý¾Q4ZYñnvì¸2¼Ê{›8q"àìÙ³a¥Y'NĦM›BÞ¿"Ï?ÿ<–/_^î‚tgΜÁ€°zõj¸ÝnlÛ¶ ]ºtñ›ósÖ¬Y=z4ú÷ïÄÄD<üðÃèÒ¥ Þ{ï½Rí)ŠÐ ­ÓéÄ„ ðÐC¡]»vAÕh;ÈÉÉÁ™3gžžŽ®]»¢Aƒ¥†²ÍÉ“'±víZ¼÷Þ{8pàŽ=Zª¯ŠŽkñâÅxúé§Ñ­[7Ô«WÆ Cdd¤ß/²@ÎÅܹs¡( 2220tèP4iÒ‰‰‰~5GFF"11ñññHMMEÿþýQTT„ƒý3,îìÙ³5j1:"""""ªN§3ì©§ûö틹sçâí·ßÆúõë‘””„¤¤$ÄÄ\[À9÷MFõe¤õë×ãöÛokAóÙ³g£W¯^8p ’’’0~üxÔ«WK–,)µíSO=…o¾ù¦Ì…·###‡¸¸8ȲŒ¨¨1Y‰ìçIDAT(ÄÅÅ}ì¿ÖzŒ|n„{ÞOo9¯G}óûýG‰x =X;q-²æ^™Z=Ðc7›ÍHLLDݺu1pà@Œ1sæÌ ©¶ë©êzÊ›å%IIIhÞ¼9š7oŽ^½zaêÔ©ˆŽŽö[J@EôíÛ5B½zõ0zôh$%%• hN:…¼¼<<ÿüóèÔ©’’’‚žùeÁ‚èÞ½;z÷îÄÄDŒ=·Ür –/¿öapZZ¦OŸŽ>ø7nDbb"Q§NRíõìÙS¦LAýúõƒüÉ\&Mš 55>ú(:wî\jj­ƒ¢S§N¸óÎ;ѨQ#Œ9uëÖõ{}ôsÃ@l߾͚5CdddÈmìøé'¹\p¹Ýߊ\.ìazµˆˆÄÄÄ &&²,#22111~ç+óî5jÔ(,Y²;v ©¯`ž?; 3„ý®>é.<ý^O´¹·!îr+º‰ºuëbË–-2d KmÛ A4iÒ¤ÌB'L˜€ÇÜïþ„ ðË/¿ OŸ>7}=F>7Œ8ïEùEÈ|>=>è{’š¢aÝ_Ö!ϵõW=öFaÆ p8øé§Ÿðç?ÿ¹R®Ì¯Žz\.DQ y͆'žxiii(**ÂéÓ§‘™™‰·ÞzËo›7Þx“&MÂüùóqàÀ|öÙgؼys©€FÓ4<õÔSøãÿˆW_}QQQ˜1c/^p=ß}÷&OžŒÇ{ øé§Ÿ0jÔ(ù¶2d"##ñÊ+¯øí›™™é»°ÜËáp GXµjUHŸý<þøãèß¿?._¾Œ¬¬,<óÌ3غu«ß6‹-Âí·ßŽüã8~ü8¾øâ ìÞ½»RFÐW~ÎÛ¶mCûöí±qãÆþmúñt¼§[P¿·.\¸€M?þt_cǎň#üî;ðM¥Èy÷JLLD£FJ-…h_Á<³€@Û ÷%ß±uÔB뮿Á¦•‡°çÇ8uøÂ•9殲ױê7‹Aýf×BóC;s±kÝqßý;Ò® ¦Ø±æX™ýµºç7hÜòÚè¸øúvtÚšªá‡/÷—¹Ïõ|õÕ>Ô«gÇèÑÁ;Œ3.— ü1f̘»ï¾3fÌðÁ,]×UQ5EQ4¾)ͼƒZ‚UÞ¢¾Ç‡*æåå ‡CHNNrrr$QeAdMÓLæ+¯”VUU#Ø×¯_ï[¥-Øy²dÉ’§å ¦½{÷âå—_®Ô~Œt#ÖìÕ¿Lž<:u*5$÷F>®@„}µý:ÄÅž&ïE||ìììê.ÅpçϟǹsçаaÃ2—¨Èß­…ÙjC§®÷Âj»ö{ëÔ±ÃHlÐØwßYäĆukðãw د/@€zAïyhWæýíœ?]zäãàoËD½zQhÛ6øc7š®ëŠ  åj6¢Ë²¬›ÍfÍd2iQQQzñ´*RÞ¸7ýê ©©©z||¼n·Ûõ={öø6ðx<ªËåÒÌf³¦iš*‚G„j hrrr0|øðJï§]»vø×¿þå7õUMw#Ö ãÇG­ZµððÃû¦Š+îF=®@¹(ýzœ>}ºF}\“dggWÚZ7TsqÞ7¾¹ÎóÕ¿îk®$áÙøx<‡gãâ°6ÄiÅ*Ë¥K—âÔ¿ZC‡ÅÔ©Sµ¯ËDíÚµCÚW×ud®ZEóæâàþ}pÀårÃírÃåöÀQP€ƒû÷aѼ¹È\µ¢Úfcº±|Àô^—ò‹³ïÜ ý33æ+œ<ü±ME·®ëŠ¢(šÙlÖEQ‹ŠŠ|/ŒÅן)6zÆ—·”TÞg~ßOOO²³³…¼¼>^ÌËËÍf³tñâEIEY–e‹$IUU#Ö¯_ï‹‹«ú„7nܸâˆnGŽ©îˆˆˆˆˆ¨kÔ¨Qu—@D7©ØØØê.¡Æˆõ[O‡Ê&n©—„غ‰0™Lðx<È?s §Ož¸¡Cƒê3ºº ¨6[·Ví±—1ÅYª$I…ªªºÌf³[EEÅív«ñññZ^^ž¯§¦¦– hÊn¿¢þ½ÿHOO233E‡Ã!$$$ˆ.\-‹„+Ó¤ÉÇ,‚U–åEQ,²,›t]7éºnEQTUUEQÔu]Ðu]$IÐu]ïW¯b÷+ªˆˆˆˆˆˆˆˆˆˆˆ¨<~‰ zñ ‚ +ŠAtQ5MÓ4I’TíÊA¥ØìaNEQ u]wšL&7®,û¢¸\.5::Z fí_ÿî÷ýâ!Mrr²àIãv»MdQ-n·Û"˲WƒEQ$A$I’|áŒ7€‘$éºMÉljˆˆˆˆˆˆˆˆˆˆˆU<)y_]UUß}Qµ«i’$iš¦©Q=Š¢¸Íf³KÓ4J„3ÇŽÓãããµøøxý³Ï>+9dÈM©í†*æåå ×Ic±XLN§S–eYEQRUU”eYÐu]Ð4ÍÒ”\T¬d £i""""""""""" ‰(Šå4àñx|K’¤€7 ¹ºÖŒŠ«ŒÇãqK’äA`áL…ó÷ÉÁLjjªž}e™™ÜÜ\-99YÏÉÉÅb˜L&hš¦Y­VÅívK², Ç#jš&X­Vhš&hš&¨ªZf fˆˆˆˆˆˆˆˆˆˆˆ(\Wf*»¦d`#Š¢ïq·Û­‹¢¨Ë²¬]ÝN×4MSUU•$É#IR0#g*l"W¦:ËÎÎÊI#I’äv»E³Ù,ªª*¨ª*hš&X,áêÄïkI hˆˆˆˆˆˆˆˆˆˆˆÈhe4ŧ8Ó].—î}Ìl6kn·[3›Íšzeĉ!#g¼B hÿ&//OlРà idY–E\.—!¨ª*@ɯ6›A U‹¢¢"$I*õµ°°P·X,š,ËzQQ‘æt:Õ„„5Ô5gJ 5 )w$Mnn®+\¾|Y›Í&*Šâ×÷¾7¨!"""""""""""ªjÞ@F–e¿`ÅÊ@dd¤–ŸŸ¯WÎÌx…Ðe¤)**‡+€ÛíÀãñÔ_É@‡ˆˆˆˆˆˆˆˆˆˆˆ(\%ƒ˜’L&“wz3òóóu»Ý®Ùl6½x8“ššª§§§o«Ê¿ýKޤINN „¢¢"\.—_Pã nˆˆˆˆˆˆˆˆˆˆˆˆª[~~¾_0c±Xt°ÙlzTT”¾gÏ”ÎÌxÐ¥C§Ó)´hÑPPP €7°!"""""""""""ªil6›QQQ:ìÙ³V«U·ÛíºQ#g¼Œ LJ¤‡Ã!€ÓéÀØÕ4{öìX­Vìv»FŽœñ24 ®…4à j¼¼ QMã d¼âããu0r䌗щo$ xƒ¯’ QMá d¼RSSu0räŒW¥4^Þ ¦<%"""""""""""¢ªæ bJ*1j¨ÁMPíVàU¶2‚˜’ f¼ª5 !"""""""""""ºÜ0MUµODDDDDDDDDDDTY f¼ÄÊj˜ˆˆˆˆˆˆˆˆˆˆˆˆÊÆ€†ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ~Ýþ x­>dà^ïIEND®B`‚kitty-0.15.0/docs/screenshots/screenshot.png000066400000000000000000044641501356737523400211510ustar00rootroot00000000000000‰PNG  IHDR(x g ; pHYsÄÄ•+ IDATxœìÝw|eþðÏ33Û’l*!té%¡©Ò±ž9{W°bïžø³ *ž'gïž ž¨Ø•"UPº ŠÒ!=Ûfæ÷GȰ›MBvg6›ÈçýzåÅÎì”gæ)ÌîÎw¾±!b´]"""""""""""""""""""""""""""""ª=Ýê JVoˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆþº LDDDDDDDDDDDDDDDDDDDDDDDDDDDDDµÆe"""""""""""""""""""""""""""""ª5(Q­)ñÜù”)SD<÷ODDDDDDDDDDDDDDDDDDDDDDDDDDDDÔM™2E×¾c ¶Íê‘7oÞÌe""""""""""""""""""""""""""""¢åääT \MಥÁÌV < ¹º@äÜÜ\(E(33³Ê ãÊËAË–)+Vm¨²Í›7‹c 1@™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈ"‹-@ysuY–Ͳ*@ØØÎ”)SDåàäŠ@dÇ# ;;ۢݿ~úé'€ÓéÔÀívAÉAÊAY” 2)[ ]’$]QMÓ4@ âϪLʵ ®UædŠªª6]×mI’dUU%›Í&TU•Eº®Aɯ+þµÙl5¢b9""""""""""""""""""""""""""""¢¿"!D•Â~¿?äýŠ%IÒ…z Ð…ºªªš,ËFp²®ë›ÍæCí‚”Z*G |¬ÌÉ~¿ß.˲CUU»ÝnWü~¿"•“UU•t]AÊÁ;‘e¹Æò0@™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆþʪ PVUU¯j9!DH`²ªªš¢(ª®ë*€€¦i^UU½)›PŽ(s²Â)ËrB pȲl×uÝ&„UU•%I’4M“dYº® MӤЀcEQÊK[)™ÉDDDDDDDDDDDDDDDDDDDDDDDDDDDDt<ª¨\1ŒéŠ?MÓ´òP^M“eYÕu]Bø€ßf³yTU-0H¨!P¹Vʵ͜,ËrÂÂ… 7­Y³&ò³DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD–éÛ·/`Ĉ]£R®6@Yª4-*ý™“ÀãñÁɲ×ë•dY–…Šªªö@ à°ö°‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈŒ@ àPUÕ.„PdY–½^¯TVV&¹Ýn)77Wòx<6oÞ,¦L™R‘ 9,Éγ³³±k×.@¸\. €äóù$I’dY–]×íæ‘ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¬"˲]–e_ ð{<ž€ÃáPQ'¬y½^‘;vT!W›9¹BÊÙ“sssEQQ‘p¹\Âçó I’„Bhš&ÙívYÓ4€¢ëº­ò6*R?/Ú·oï"Uë½÷Þ«rþúñõÛ.Ñ_Õ<±&lž®ë6I’ä# Œ…®ëÂçó‰ââbáñxàv»õ#Y”1eÊ”j•¥ÚÆãñˆ²²2‘‘‘!@UUár¹D TU•€,„£:R"""""""""""""""""""""""""""""Š !„ä#1Á’Ë媪Š@ 222DYY™8öVŽª6@¹röäììlã½@ `)Ûív!˲$˲¤ª*”‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆê¥"XQÉçóI ÂívÉÙÙÙ(**¹¹¹âHåjƒ–•hJàv»”Í„®ëBUUI’¤Zgd&""""""""""""""""""""""""""""¢ØÓu]hš&ˆ(Sru¢ P>’AYhš&„BQá÷û+ FqtöYcÑ¥s'¬^³ ¾^ïâÕ "v8¯çÅ»(T Ö‘yülEDDDDDDÕÑ4MÒu]Øl6¡ªªÐ4M¨ª*P°,¼^¯(..n·[?Öö¢ P®T !I’PEèºÎå8»óö›””„ýûD½®9]0í‰)Hp¹ðÐÃO`ÉwË-,!QÃÑPúÂÅMÀ]wÜ6ûößpöøKâP¢ú‹çŠˆˆˆˆˆˆˆˆˆˆ¨nõ· Å8Çä(½.5‚G/Ãaí þÔ~Ç*ÿ|æý½4fûOIøGÒ3h+wB©9^.}ïz^ŠÙþ(r¬#¢ÈLw¿‰þ¶¡Õ¾oñ$|ç[P‡%¢Êþ›²­ä¶Õ¾?±p<6ÖÆ´ =”~¸È5ÙJ$‹H‹|_ââbºïHå¸W¹n/•=…/¼þ¥÷[•Ç“^ÄPûÉ€R½c÷…¾¸•çxÔVîˆwR¾0¦=zvk`‘ï ¼[öòqQñ¾n'"óøÙŠèøÅëI""""Š„$I’Bɤl:‹r­”=(..^¯·"àp8„Çã@yjg³…¡úáúë®BËÍ·Ýz}ÄA™’$¡y³¦Ø½g/4M«³u©nOud¶/UçxêGDDDDDDDDDDtüº-a Îq†> 4I¸‘$»ÑRnƒA¶Xî[ˆ½1 tpÛFÅlûd눈ÈZ9J/<—<ò‘ äú¬±Ô·%> å91îNœŠ¾E1Ïö¯ýVÅ)\!Xî_È`’zÀ)\h'wB;W'tVºáî¢kã]¤˜ª×íDd?[Ÿx=IDDDDÑÐu]! išp:¢"¶Éï÷ ŸÏQœ°é Ê• fåö*HB K§vèžÝ­Z4Cb¢ @åcË/;°üûuðx½Õ¯/I8±w7ôîžÌŒ4@^~~ÚºKWþ¯áÁÔ€ZåëÚ4¨?žþœN' ƒÒÒ²:Y÷x4öô“1õ± ‹0bô™ðûý1ÝçñVGfúB]š=g.>þäscúÆë¯ÁçŸÇÕ_õá\oýˆˆˆˆˆˆˆˆˆˆˆŽO£íã‚*ËÓb¯ögÈ<§HÀ¹Ž‹1Ì~*ZÉmà (Ôò±UÝ„O½³±Ø7?–Å)Ç¿Üï GéøMý—œóuëJg¥N·GÛ@dIMìÖvb©ïkÌö¼‰=?ÞE¤ãÄÔ¤—q’}4`Ÿ¶ãóC3?å~mÃ黊®Árÿ·aÛQ àÇÙn?ål$Ki(Õ‹±_Ûƒuþïñ…÷Cü¢þÓc‰‡"½{ÔÐq´H+ŒSibç<çåÈQz¡Ü»Õ?q_ñ¤x©F;Ôm( âs'ZËíëlÿ9¯ N> íÅaí`·öG•£6IYF0PÞ—3¤ÆÈWc(¯ýVe m8ÂiL×ÕµN]i(ý׫{°5°  ­¤¶° ;`°mNÛa§ºÝòý²ÀÄ„;ÑLj —H¨PQ¬b§º«üK0Ïû>ò´ƒ–ï»B´×íñÔPÚUíõäÑIéjL?Uò>öΪrÙ!¶Ñ˜”p'²¤fÆ8©AC™^Š\m¶6áßgXá_zȺœWàæ„jU&¿îÈÃ]¢<¢êq¼¢êXÙ6Âõ¤™ãe?""""²Þ‘`aU,pDÊ>ŸOÉà,„€p:–ª² ÇC—ŽmCæÉv;š7mŒæM£w÷l¼òÎl•„­k·Ûpéßÿ†6­š‡ÌoÒ¸š4n„žÝ:ãµÿ|€‚ÂâX½Aú÷ ¯"++N§O>ý\Dë&&$Àét{A‹×=1®ü&¯×‹äd7N2ß.ü.¦û<ÞêÈL_¨K>Ÿ>ßÑàt_ŒÕ²úp®Ž·~DDDDDDDDDDDǧqŽ !ÓÏ—NÅW¾O CG–ÔmåŽH‰!ËdIÍð¬û´”Û„ÌO—a 4mÃñï3<\|+4Äîá²$<’4Ã0®«uë‚C8qWÂc8ÅqVØ{íäÎhçêŒ3àö¢+°M݇ÕE霼ֿ²Êàä¶rG<–ô"ZÊ­C槈4¤Èiè(ç`‚ó ÜYtVøŶÐuìÿ Ê>›k1Ûóf J]nRÂ]!A‘uµn]¸ÂyS•ÁÉÁÒ¤ Lu¿„‹ N†G/«£’…»)á~ãµ Ï”N [æ¹^Hž$á®q[*TüXgu‰ê¥$‘l¼^å_Roƒ“ò¬µ Çc¬ýô¶ D¢HB‰}¢©nJoLs¿‚I…ç×>~Ýòÿª"ìP‚n›~Ï oÔû&Š'^OQ4t]?’»ØQ(«ª*dY†¦iÂê´Î•müi6þ´-äëòýbÛöe 9Û£K‡¶aë¥&»Ñ»{6€òàä‹–ï­úaŠŠKpÑøqhݲ9Úµi…_û#Å'²Üر§@–$|µ`!>™÷®›x%†ž4III(.f6p""""""""""""Š/wPpÔ~mÏ1—ï¢tG7¥1ý™÷¼\ö4 ´<ôµ ÆCIÿ4DNµŸ³åA¶¸ÐyM¯[Wfz^ÁǙȒša• >ô¼‹ê¯h%·Å ÷¡•\þ»{–Ô Cm'ã+ßÇq.1¯ÆØÏDw¥¯1ýžçuü¦þ²Œ S’ž Nþ9°ï{^Ç/ꨠÜCm§ YJAž_gå'Š§à›·ƒ&ò´ƒøçÅãf¿ÁúÛ††d¦]äÿ2Ž¥¡ÊJõãúSrìóšÂ³q@Û‡Ör{\æ¼½m \윈ÇJî´|Ÿ‘^·™1Ä>ÚxíÕ=p'l°a m8¾ö}zÌõ'ŽÇïêv¤Š4ô°ˆ‰®;.5ä(½p¢í$¬ò/Ìõ¾‹¹Þwu¯q݆Ë\7ÓçæE~تC#Š ^OQ4EªªÐu]hš&€òXaI’¢Ûž¥¥‹‘šžã¹s×^ätnŦ@]?ºtû¶­Pͽbuø“pÞº…E%Hv'¢[v‡¿|€rjJ ÞyëE´nÝ ÛwüŽK/Ÿ„¢¢ò`Ö‹/š€»î¸9líÛÃÙã/©q»í۷ŇsÞ ›¿rÙ‚°y«¾_ƒk&ÞbɺW]q1&ß< pÚ¸ó°{÷Þ°uúõí…×_¸ìÊë±ví_ã‰ŽãÆžøjÁ·Ø½{/~þy+ºté„Q#‡âãO>·t_fê(X×®]pñ…зOO¤¥¥¢°°k×mÄ;ÿyëÖo¬vÿ2Ò1dÈ@ôêÙ;¶C³¦M””!ÊÊ<ؽg/>þøsÌœ5ÇXçôÓÆ`ÜØSбc{¤$'c×î=X¸è;|þÅ\?éJ p"4MÃW ¾ÅSÓg ´ôèrfúœsöèÞ-;¶Gf£ ¤¤$C’dì?p+V®Æ›oͬ²­V¸nÒ•п²7BJJ ìvòòcÝúMxwæl¬ß°é˜eˆ‡Hë×L9ìv¬^õ-à®{¦àËù_‡mͪ…°ÛmxòéçðîÌÙ–k4udU?5r(Îr²;ÃétbïÞ}X´dÞzû¿ÈË«þËÒhú¿:ÈÙ8Ïy9ÚÈ.5BªH‡€Àaý6Öâ#ÏL¬ ¬ [ïë´pŠ„°ù§:ÎÁ©ŽsÂæO,͵€.Jc¾_÷á©’ûL†«üK0×3Ó¸‘¸‘”Ue¹ûÙ†à|çUè¢t‡NìÕva]àûZw†Ô÷%=iLg͋広l#q¦ãïèjë$‘Œí0¶¨ð©w6¾ó…ÿbF‘^€‡‹oE[¹#>òþט¿KÛ‰‚’|¼œü1¯½ÒÅòåhë(Ú6ùJò‡È>Ò¶i¹ø[þ€÷SD>K[cL¿çy ÿ.²ŒC8ñ7Çjƒ6rG$‰d”é%8¬åaŸ¶ ?úWâïÛ(³0CQ´Ç[A‚Qöqé8夊t@¾ž‡ýÚnl¬Ç ß"¬«bdœæ8'ÛÏB¥ \HÀAý~ð/Çûž7‚„c!Mdà–ÄÓ¿«¿âõÒgÖf?älcz™ÿÜ[t4¨Æ¼]êïøÎ÷5$DwSMMêùª‘ˆs— Gé…öJ'4Y(E Öû×`¾o.N³Ÿƒn¶>°Ã͵x®ôQìP·…lÃl›Œ¦U÷JÛP,Mß6ÿŸ¥ãžðßd£c›J-1À6}lƒÐZnFRc8E((ÓK±_Ûƒ_Õ-x¥ôiìÑþ¬v; …™ö͹ª®~àñ’»ð¹÷Ç,s4c™ý&ˆDŒsL@g¥ZH­‘*¥!E¤Ã.(Ðò°1ð#f{ÞÀÆÀÇ,{…áöSŒ×°Ì÷MØ>Ù¯þ[¤àv‡´Øèÿ³R¿F–Ô Œ`åªDz®Ì\·æÛØ`ÃÇ™l…NJW¤Š4H8¬ÂõO|ïÿŸxßCᑌXÑ®êz¬³‚ÙkÑHϳUÇkæ3N¤ëÆb|>+ÆgÀ\›4ûù·.?‡Vp‰ô¶ Pž½xžwÎs^lU«å|-Åz!ŠõBìòîDž–‹§Ü¯ï÷µ 2”ã%ÞãU4úÛ†bºûèƒàn/º"ä<ÎM]†L© `¹!î*º:lfÇ«x´I3Ÿ£)³U×HÁŽu=¬®ëÈÌñ6äëÉx|DDDDo¦”+2( ! (uï|B‹¦€={„'@²; àóûQ\~§ØþûèÕ­ š7­úG쿊¤ÄDœ;/l™>½{ŠKJ°aÃæ:-_¬´jÙ;´Ã¡CyøñHÀõ‚oÇ,@Ù “ož„«®¸8d^FF:F†Q#‡âñ'žÁû³çV¹î¬™¯!+«q•ï¹ÝIèÜ©¾r9Cæ_qùEèÔ±½1Ý®mk´kÛW_`|î9g"== “o½7šÃªÒ·Ý€¤¤¤°ù-[4GËñÍqú©£qíu·bÓ¦Ÿ«\ÿ¤!Ñ5§Kȼ¬¬Æ8åä‘3z8~dæ~ô™eåµB4õÏ:2+u$Ë2ý¿û1öô“Cæ·nÝ —·n…³ÿ67M¾»Ú`ÿhú¿KMqºãܰùY¢²ìÍ0Ê>¯–=ƒ·Ëž·lŸÁ¿õÊB†MØÐÆ<›°¯háƒ=Ïy9&'<2¯µÜ­åöaËVE@àÁÄéHé€÷=o Ü}mƒb¶®S¸ð@âÓn?5d~†”‰ÁÒ( ¶Â|ïGx¬äNhÐjuµ±!°kÂæïR™aK˜c¦Ž¢m“«üKŒå )'Èí°S=z#kŽÒ³ÒòßUÚoüËý.ZÊmBæ'‰d$ÉÉh)·F?Û|ì…2Xwc©™>ØTj‰ÇÝ/„î€ v¸DšJ-ÐSé6r¬+ ½É:Mdà ÷ËÈQz…nS´À8ÇœîçK§â}ÏeõîL|)"  BÅ#%·ÃoØr§;Ư}ºÓJî NfeêϹªL© &%„fÜLCíc0Ô>&d~_Û`üÓýÎ/r³´™6¯~dfŒ=ÃñwÜøxµÛv‰cüz¹ô)ËÊ/fÚs¼Î•™±.ZM¤æ¸9á*ßk$ea„ý4 ·ŸŠ'JîÅgÞc?\‚ÁöQÆôþå(Ö C–aÿ=¾û¯^l ü„,{y€rÅÿÁâu=iöóB7¥7JzM¤æaï5ÍÑDjŽ^¶þøÔk]R‚†8Ö™íƒÑžg3Çk¦MF»®ÕãsmX1>›i“f>[ÅkÜ€¶a°Áø1° ËüßÊýmC!A®öz¾:k« C‡8ò ¶ºš5$ é³F3ãU¼Ú¤™ëÉxö£`µ¹ž¬ÐëÈŒx]OÆëú™ˆˆˆ(Rº® Y–…ÂTæä "ƒreN‡M7ÂÀ~=Ó¹=üþ¾øú»°å|~?Àn³Án³ÓÁ*—““-+ß3O?ŠÑ£†×zù ç_-[c÷äÜäd7^|~:ºuÍÆž½ûpÕ57aï¾ý!ËüwÖ˜3ç#czòÍ“pñEjµýíÛC¿þ##GÅ´©SC‡EYYYȲª¦Y¶î¶_¶ãÀ\4nœ‰ý« PîSþcóêÕ?BU#û⢾9r(`ñ’eÐŽœ“ÅK–áæ¯Å€þ}áp8àõ†ÿ8-3uW^~‘¼úýê1ã߯àÏ]»q -qëäëгG7Üs×-X¿~S•ý " ú† ›1ï³/ñ믿!¿ ~¿Én7Ú·o‹ Õdžñü+øï¬зO/Ìø×4À{ïˆ^z' ˆÇy#†Ÿ„víÚ`ûöߘë Á¾þfæ|ð1òò#!1½{vǤ‰W )) ?ò þvÎEaU€_z@»víAQq1lŠ‚œœ.¸uòuhÓæÜwÏíX¸p)ò ".S,˜­ßhê(Þ¢©#³ýhòMàä/¾\€ÿ}8……EèÑ£+®ŸtÒÒR1ã_Ó0þï—aÿþܰõÍô#"""""""""":þìP·s™«]·b¥1¶Ž~¿\t³up–*üzøïWÁ7gd“ ãîÄ©˜Zr7¼º "£ígï/ô}²¶rGÜ”pß1Ë\“37Š·«[ñRé“xÊ]»›}£]÷ÞÄia7JVvŠã,ìP·b¦ç•Z•ÅŒ¡öÐ¥VÄ-³um›üÞ¿W¸n2¦{+C”³ƒ”½ºëý«é]*M IDATC¶y{â#a7•Vv@Û–qάh×)ðŒû-´”[‡,[¦—B@À)\ÕnO†Œ©UÜL‚„›îÇ!-_ûŸ·ÂÙŽ‹BÚâ‹¥O†ãѲÈè¡ô3¦¬@žv0&eª¬¾œ«hpTРY¦3¤Lœd’A=Ú6 Dß‚ÿOq—Qf *|UüŸâ×}!ÓfÆX»pÔ¸^…B={µ]µZ¶.‰ Œá~„ß+Ìl{Žö\ׯ€‡¨ýµÍŒufö[·%LÁ*ÿÔö׸lÛ ¸EŠ1½Ø7ÿ˜Ûgÿ=ª.ú¯_?Ú¬~pKmHÑZngLçëyaËD{®Ì\·æÚUŽÒ Ϲg†<€¨*¿~ 9f3í*^cYf®E£=Ï€¹ã5Ócùù(’ñ9‘ŽÏfÚ¤ÙÏVñü:Ø6Òx½Æ¿ ?À¯û`v$‹Tä(="Ît­Àrîu„ß“Y×â9^Å‹™ñ*mÒÌõ$`Íÿ¿Ñ\#UÉõd<êÈÌñ6ÔëÉx}DDDDo–(Ûl6èº.t]éwqN§Þ>)dÞþ1瓯°·Š€¬½ûŽÎËîÔë6m [¦¬¬ü"Õf³Y\Úú!3³^z~::th‡ßÿ¯»5,84Mƒ×wô⼪¹êèºn¬ý2Òç÷…lÓêuò,Êçžs&êY–C‚eYF÷n9€å+¾¯õñÔw£Ž(·t…1ï— `íúaÑ⥖íÏL5nœ‰ë&]øæÛ%¸ýÎŒ ê¼¼Ã˜xÝ­˜÷ñ{hœÙ—\üwÜÿà£ÕnkÉÒåUfYÞ´¹êLİwï~”””bñ’eøí·hÓæ¬ú~ òó 0ïÓ/qÙ¥ c‡vèÞ-Ç~5Ó‚mÞ¼+V½aíÚ (**Æ÷ßÖ­[¡{·¬¯" 4¸^+,Z¼¿ý¾}8‡ƒ÷ÇgŸU¹¬dEýFSGñM™éGÍš6Á%—œøèãÏð)S÷¶lý«Wÿˆ9ï¿…””d\7ñJLù¿iÕn+š~DDDDDDDDDDDÇŸ}Ún<\|+~QÂaí Jõ4’²pójœã¼@ù Þcìg„œ™ßßx½0ígãfø¯¼ã±’ÐìR•mS7c¡ïsŒ°Ÿm‡J_Ìñ¼…Aö‘h,5lW·`Žç­uÿî¼dcúï{˜íyCí'ã×m5î;]ÊÄõ w(Êx´øŽct™]·¯m0FÙÇÓK| ðrÙS8 íEG9w&>jd¿ºÐu-f{Þ‚Çþý4Zå7¹ßoLoS7c™ï[˶o¶Ž¢m“›ëQ¤7ì°Å\ï»Æû]•ÞÆëuïC²ôÚáÀ@Û° ÷Wቒû°_Ý EØÐBj^¶þ!7[%Úã=ÇqQÈ Öký+1­ô~#;öG©Ë«Í(všã\t º ~S`-^,†ƒÚ~ôµ Æä„›toJ¸‹}ó-o“)"-¤~훇÷<¯U¹l#) âèƒèÿTëî·Äúp®¢µ.ð=&^ŒÉ ÿÀ9ÎòQÏõÎÄ?K¦à¤§q²ýo€vJg (À1Ú6i¦ÿŸò~êB4—ZVû—áö¢+j=ñý÷?ïådw†ËUþ«åËÿÊ™2н[ü~?V® }bù²åßãì³Æbøð!–(›1öô“ápØá÷ûñøÔéFðj…²2fÍú“ož„!ƒÄ´,ù…€ôô4cÞÁÜƒèØ¡’ÝI1Ýw…O?Ÿûî½ ’$¡K—ŽU(WgçÎ?±oï~4oÞ-[4a)kÏêú­udF¬êhìØ“!K^|)<ÛÂŽßvbÞ§_✳ÏÀé§Á£OG °lÿDDDDDDDDDDtüÑ¡cï“y{µ]x¦t zØND;¹ ÜÑÒý>R|D’dÜ`™)5Áõ ÷ïo ¬ÅÝEW‡‘å71WØ¥îÄ“%G ¼ùÇ ~½5áHÉ€9ž·ð‹úS­Ëíºg;.2^ï×öà¡â››!×Vã‘’ÛñzrùÍë)" ÙJ¬¬®r[fµ•;âY÷Œ`O?ü˜^ò4D÷ ߪ˜­£hÛ¤Ë|ßâTÇÙ€>Ê@Ø`‡>H­ô0–]é_²®"”ÿKõRìUÿ<’YÐ_ÔŸ"j+‘ˆöx‡ÛO3^—é¥x øFè‡C¶[37^{ô2Ü]t5 ŽdôÙíýRc\éº!5Æû°cÓEÊ”Á¾ñ}Zí²É"-dºªLx)"ƒí£Œé þ5Ø¥í4YÊúq®¢ÐP¡â;ÿ#€Æ…hÐð­÷s#€&U¤‡¬m›ŒW?²zŒ}®ôìP·Y^N«9„:¯5¦‹ôlUk¾/Áêö\çÊÌXg¥Ú^ìÕþÄ^íOÒÞ»(Ýk\W‚Œ“ìcŒé Õ8¬ªqöߺï¿?ø—AscgâsßÿŒÀ¥Xy+å3(Â¥Òm>Ý‹÷<¯‡Ì‹çõd´íj°}ZÈ'Ó }Ÿã¡âÉa×V# q¬3Ó­>ϵ=^3mÒÊölf|ŽF4ã³™6iæ³U<Ç¥'RŽ\×ê%F&öMµÆX;À> ¯”M¯q;éR&üð#]ÊD_e.v…&½ú>ð%å—†øYÃÌx¯6iæz²¾|ŸÉõdC¬#3âu=ÏˆˆˆâÍÒåXgPöx½øÇÔp¹œÈÌHCϮѷWWtËîˆô´¼òö‚2è꺎Ù‰+.8.—çŒSý¶=ËÊYTTŒ"˶ììN¸ôÒ –š‚•«Öà–ÛîEiiYœKe½ÕkÖâ@îA4Îl„Ç„(÷íÓ°k×ü¹kwLö?hPØ9lþ¯ÛÃîÝÖ?‰mذÁBà‡×£¤¤4ä½eËWâì³ÆbØIƒ „€®×Í.5éÓ»üý 7#÷`Õ|·ïø––Š´´T>œÓ2 T1LYøÔ‡š”––áàÁChÜ8ii©U.“””„ó'œ!ƒ i³&HOKEiiþøsRRËonq8uRÞc‰UýƳŽj£®ë¨gnÊ3¥ïÝ~c,^²çœ}œN':wêÀŒÈDDDDDDDDDDdš€@¹ NÛ#SÊ‚…z>Šô£DNnK÷ÙZn‡l¥§1­CùÝ “œƒÓã1+(£jªHGºÔȘ^á_Ñ>{)ý¬Íúa¼Qö¯:Y·m ñºPÏÇßW†¼/ )dºµÜ>&7xæ(½ð´ûu#{‹߅͵–íÃlUˆ¶M~ãûÔPvŠôµ  ÿ"tP²C2ðVP.ÕKð«ú3ÚË]ƒl#ðßÔ¯1Ïó>¾õ}†=ÚŸQGmEs¼Á@@ùM·Á7X×Ä:+ÝŒéeþo›à+,ð}bÜ=”~–ß@2d£ß?”ø,nÒ.ÂÏõaËJ•~S¬üàh*·Ä}‰OÓ—Ü…]^sÊõå\™U¬½«%A”?,:¸m9DøïÑ´Éxõ£ú2ÆÖ•¶rG¼“òEȼ˜^ò›i“f?[ÅsÜè”UtK`£Ñ&ƒ¯õ;ÈÙHéÈ×óªÝÎ ÉïWûÞþ•øÑ¿Ò‚ÒÆÇñ8^Å«Mš¹žŒ÷ÿ¿"¹žlˆudF¼Êïˆˆˆâ©aeP>¢¬Ìƒ?víÅ»öbË/¿á²óÿ†æM³Ð¯w7¬X½.dÙ]{öã¹WgbèÀ>èÐÝPUù…EøuÇè–ÝÉîD8XýÚ†hÌèò§¤éºŽ×ÞøÏ_284MÃüùßà’‹ÿŽSO…§žžadq8°`ùÊØeO~zÚÃHJ ÏìúäÓÏáÝ™³-ßßICÊ?4}·tEØ{+V®†ªiÈÈHGçÎðóÏñzof£ @ŸÞ=±aí±³:§¤$Ç<@9ÞÊÊʆà°ÛÃÞk×¶5^záde…~êp8BšëK¨îñX¿ñ¨£Šó\]p2ìÝ»ÏxÝèÈòDDDDDDDDDDDÑê¦ôÆÝ‰SÑZn_ãr•ÍHéxÒýIY€÷=oà}Ïë瘀s—"E¤Á&ì¸!á^H1Óó2 E Í¢š§åF´ßî5^Ï,{¥zIÌ×u —‘u(¿ »CBvë/o•.JüÓý¶¤«AÃÓ%†eÃ3ËlæÚäjÿRêùHå¿å ³Ÿ‚þEè¥ô7–Ù­ý?ÕßÂÖýGñÍø·{–Ð\j…I wbRÂØXƒ™e¯`™ÿ›ˆçX¢9^ìp§1«í«j•*¥I!Y~v«áA¼ûÔ]! h$YÜqPÛ™e/ãöÄÿPÞW¦%½‚Ë Ç"O;²l‘úØøXô‘ªÔ—se–¤¤åȼ£A½aÛL¬ë~T_ÆØxÚ¯íÁÃÅ·bC`MË5Äölf¬‹µ½Øxí *cU†ÛN5^ëÐ# Pfÿ Ëþ[¬bráŸ1á>#+j<Ìñ¼…åþoCæÅû\EÛ®KM×~ÝóŒÔ@Ãë*DÛãqžÍ´ÉX·çHÆg3j;>›i“f>[Å{Üèoj¼Þ¦n:ú:p4›¨€@_Û`|í›ñö×ø—ãÁâÍ2ÎŽ·ñ*^mÒÌõd¼ûQ°H¯'R™ï2Çë{$"""¢x“޽Hý¶mûïøãH¦ÚmO¨r™‚Â"Ì›¿ϼð6šöoüßÓ/â¹WÞÅâkàNJìÜe]¶[·; 2Òký'ËáxÍZ¾|ŠŠŠ!„À 3žÆÉcFX¾úâ“yåOÍÈHÇÀåAɇ½z–gw]¶lUÜÊf%EQpb¿>€;o¿ Ö. ù[¶äKÈRy—ÿ1ÿì6[œK{Õe¶Bàé§EVVcx½^<ùôs8å´sÑçÄ4äL¸àJìÛw ŽK[³xÕoð·’TwáÚq«£#Ù£k›½>dO'"""""""""¢†«¥Üÿt¿}Ì`«ç¼ÌNÞ®nÅó¥Oà€¶o”=‡ ùñÄ÷•±ìU®ÉAYbB+°‰ÚÿÑQÎÉNt}Â=Xš¾Ýøëkd¼×FéÛñJòÿL¯« òßL4¨¯S“¶rGLw¿a'«PñXñøÄûž¥û)}æÛd,ò}iLŸd zÙŽ(¯ð-ªrÝ?Ô¸¼pæxÞ l€îJ_Ls¿‚iîW¡Xøløh7Hf¼$‹3œ H!̓³³Ò\ïL¼çyݘN—áþħBö ”30¦ëz̪I]«ºb¶Öu?ªcl]óèeø)°ÛÕ-Р"Kj†ç’gb´}œém×·öë±ÎŒàÀ´ÊcV0¡ö“éŸp FÖì¿æ$‰dÌHži'çiñS`]•5±Êùù#1$¯]HÐK]×#£RZ<Ï•™vÜ7|ðÕIVßÚ¨oc]…hû`<γ™6ëö\Ûñ¹>©¾MFÿÙ*žãFŠHE'¥«1}¾ójã³óœÔE!Ëö³ ©E¹4”ê%øMýŸ{ÿ‡Û‹®À-E—„d¬þ«ŠÕxUy;‘¶—hÆ«xµI3דõåZ%šëɆTGfÄ»Ìñø‰ˆˆˆ¨>øK\ÝÍÄWDë èÓBhºŽŸ¶þjYy~èŒ5¼ÖËO8ÿ lÙú‹eû€ÕkÖâÑ©Ó1ãÙih×® ¦=ñ0$IÆ—ó¿®Õúú‘,Äqµ¥éA_æÔѺ[·ýŠõ6¡G÷®8óŒS±lù*ôíÓv» ¥¥eX¾"v”tê±²HïÞ=˜˜P«e‡ ê×^Çò2DZG¹¹ѹS|õÕ7¸ûÞ‡-/O$6lÜŒ²ÒÒ³ÐV%Ú¾©Î; ]ÛÖ€‡~Ÿ±ÀxÏï÷cË–m()©ÝS÷ë*@Õêú­mù|~hšI’ªÌ`‰HΕUum?jÞ¬IµË4mzô½C‡ò޹M""""""""""¢êœå¸NQþ›”Ï•>Šo|Ÿ¡@˃C8ñ@ât µ±|¿ýl'¯ù¾¹9°D/Æ´’{q’} ìž¶±È÷%òµC!Ûi&µªõ>mÂuyͬ[¢Á?lGnš\àûßõö"å x<é%#£° ßÄk%3uXÓ&çygãLÇù€‘†¡öSÐ3(ƒò"ßÕ®›§åâ_¥à…Òi8ÑvFØOÃpû)F™ÛFb‚ó ü×ójDÇUhW‡ŽýÚ4•Z(Ï-AªU@Êaí4¨F¶®¦r‹°eZÈ¡ŒÏÕ"ûÝ5/•>‰žÊ‰ÆCúÛ†b‚ó ¼ïyÃXÆ~ ül,Ó×66Øà‡?fåêß¹ŠV±Vˆåþ…€Ÿëk\ÖŠ>h¶…üÆzŒÀ¢x±ñ°Gûמ c?%ý ÜžøXêÿ½¬ÊõêK{Tê·Á™+33Ö™Ù¯•º*½‡²Àâÿÿeÿ­;ã—"GéØ؈ë Ï‹ùÿ3^({¯ÚæB@ A$â*×d´!RV×o$u”›{Œ€áhEr®¬ª£hûQ‡íЬiÕAÊÇ•1[VVfù/ˆˆˆˆˆˆˆˆˆˆèøÒ<èç]êï˜ãy yZ.T¨(ÕKàAiLö›"¥¯ƒo²¬ AÉè“x$ÃM~ûµ=Æü“ìcàµû]GEÅzQµjP´ ÅzJõÓëêб9ð£ñþ`Û(4“ZÖªÌV¸ÌyCÈMÍÿ.},fÁÉ€¹:¬i“?ÖãWõgcú†„{(ÊO=¤åbC`M•ëßDï‡ËüßàÑ’;0¡`dHv¢AöÚý_fŽw­•ñº‰Ô×&Üì€äöpŠªóÁ‹-MÆô ÛȰ:ç˜2½Þ¿ºö¡˜Rr |úÑßú¯vÝŠt)3d¹…Aå©"¹&ƬLêÛ¹ŠÖ.m'î*ºw]7ËfÔ¸¬Ù>hE?òâh€mc©iû‹÷oÁã¹[¤ £œSí²õ¥=VÊvX,RhÇ:³ûµÊp{h2„žù­Ïþ[w‚ƒä–ú¿®³àd < úßgÆôXÇyh)·1¦ãy®Ì´«Ê×\׺n‹*£m$íª¾Œuш¶Zuž#a¦MÖ·¾­ÚŽÏfÚ¤™ÏVñ<Ï}mƒ×4xôÒ¿àñµ±Ô-äÖuR®ºÐPÆ«ÊÁï]äî­ÍxÏ6íõ¤•eޤmTÍõd¼ëÈÌñ6¤ëÉx|DDDDT4øå.Û¢iV#Ào;wÕjöm[᪋υͦ ¸¤Ÿ½ÄÒ2ÝvÇèÞkH­ÿbLVXX„k&Þ‚\Y–ñÄãÿ@¯^Çþà¸ïHÓÆ3Ñ(#ýK‡¯ƒžQYͬûÕ‚o‘—w6› ÆŸ…ÃË¿ žÿÕ·m§>«8'›6ÿ UU«üÛ¸é'hšY–qb¿^–—!Ò:š÷éHKKŽ÷Ü Y®›§ÍZ)Ú¾©CyG³Þæät1µ­¹¹€&YѤIcSÛªI<ëwã¦òHF—Ëõv"9WVÕQ¤ýè³ÏæCUUȲŒë¯»*ìývíÚàŒq§”/ûù¨ËFDDDDDDDDDDT¬}°sS¹%Ú†ÇüfvØ­Í€4Î1ã—"Q$A‚„¶rG<–ôBÈM~ÛÕ-Æëoƒ‚7EOz”®Hh"5¯vŸ[qêážÕþß°ºSÝŽS÷Ä-E—š^>õÎ1^'ˆD¼š2W¸nBŽÒ M¤æè¬tÃûé¸-aŠ‘!Ö 6Øq¶óbcz‡º s†A¶‘h$eÁ;\"™RÔ ›è­Ìºiæxÿç}'äX.vNÄ‚ô˜Ÿ¶3SæÃ-ªÏ‚õ©w¶ñº¢Ž²•žh!€ œWc¼óhûÍÕöa•q$‡±]êïxÏóº1í ˜èº½R™ßGqP¦¯«\·àŽÄG£ôB–Ô Mctr};W±f¦MZÕ‚qZËíq™ë´’Û¢©Ô9J/LtÝNJWc™x±õ>xô£ÁU=ô#X}hÏyZnH;;Óq>úÛ†¢©Ô=”~˜”pWÈq˜ëÌì×*Ã짯·«[bš’ýלtqôÁ•3KÖ…WK§C;òÐ2.s^ò~¼Î•™vµÄ·‡´ÆôHûXÌHž‰Ñöq8An‡L) -å6è©ôÇΫ¡@©r;‘·«øu‘2Ó­:Ï‘2Ó&ëS߯ fÚ¤™ÏVñ:ϽlŒ×‹}ó1úp·¿‡‹o Y¾§ÙýÃõYC¯rµ}(ы鱎ópŠý,4•Z¢Ü6a¯v]3ãU¼Ú¤¹ÏÎÖ”9Ò¶,ÒëÉúPGfŽ·¡\OÆë{$"""¢úÀšobH¸ñš‹°õ×ß±óÏ=(*.†ªjp'%¢}ÛVØ·' ¤¤߯ݶ¾ÝfƒËåDjŠÍ›f¡[—hÕ¢©±Î»s桨¸¤.©Îy½^Ü8ùn¼ùú¿Ñ©c{ü뙩¸øÒ‰øãÏêºøq=@g¦?†—_y ^¯'œÐ Í›7Ås3^®r½ß~ÿyy‡‘žž†[&_Y–±mÛv!жmk´iÝ Ï<û‚åëú|~Ìzï¸áú«qåÃá°£  K—­ŒðlÕOééièо-€òåê”––aÇŽßѾ}[ Ðß.üÎÒrDZGû÷çâ•W߯õ×]…s·~}{aöì¹øí÷?pðà!8v4kÖ}z÷ÄcS§CUÕöÑö…HmÝú+öì݇fM›àî;'ÃétâûÕ? ÿplvÒÓRkˆ»n}ùSô$IÂc<ˆ—_} šª¢eËæhÞ¬þý«–”9žõûñ'Ÿaô¨aÈl”W_ú^}ýìÚ½»M›fA–k÷üHΕUui?Ú»o?Þ~g®¼âbœyÆiHHpáƒ硨¨=ºwŵW_EQPPPˆ—^y3Â3IDDDDDDDDDDê{ÿw8Õq6€òëžr¿ŽR½…z>$ÈH—Åd¿{gáDÛIÊ0nIx·$<*äJ7í­ |-£¿ Ïò¼†Óã‘"ʳ0÷³ ÉxW}åý§ÙÏEÛ@@ŠHÃU®[p•ë–°eS 9^3r”^Fæ` üÆÎ…iÕÿþøTéøÜû?Óû5SGVµÉ/|sqmÂía7Ï÷}\åò­åÈãLÇù8Óq~Û^í_Z«2Ô†™ãÝØ„WJ§cRÂÆ< ” :¯ÎgÞ98Ý1]•òa×TGÏ•>†bÿÐÜÿx^ÄXÇxdHå>Íq.fy^Ãïꯀ=ÿ,ý?<˜ø4@@à,Ç…8ËqaLËUÏU,™i“Võ£ý+1Ø6ʘ¾Æu®qݲÌ>m7¶É8¯1¶ÄèMö IDAT>²ÁVãûõ¡=ëбÔ÷µÑÎÒ¤ Lw‡þö½Ö¿µò‡›ëÌì× •n!ÁcÁ¯cý×›¨¹ÿÄÚní,ö}…öÓcÃkeÏbŸ¶@üΕ™våƒSKîÁ“î׌‡õTú£gRÿj÷µ]Ý6?ÒvUƺH™éƒVçH™i“õ©ï×3mÒÌg«xœçÆR“Ìë[ƒ2Wø9°!dº§Ò/$P7Zç:/Å®{iY„~·ðQêrãµ^œz¸§é}VÖPÆ«øÚ7s\p'Lš^«uÍŒWñêûf®'­*s¤m£B4דõ¡Ž¢=ÞhÖW»Š×÷HDDDDõA½PnÔ(M7B“ÆÕqUXTŒwç| ÇöÞÉ#c`¿!ótøyÛv|úÕ"‡­óWT\\ŒnºsÞ{ii©øçôÇpá%×Âë ?gðÇ»ðù púicгG7¼øüÑšùùÕejš†Ï¿Š‡¼ i©)øÇw…¼ŸŸ_Pm±™uà¿ï}€Ë/»‰‰ €O?ŸŸÏ_íò ɉýú@@ €m[­qÙ 7£}û¶èb_ËËM½üê[°;ì¸òò‹Ð²EsÜ~ÛUnûíÿÌÂÎZ^f³¢í ‘Ò4 ÷ÝÿžŸñÜî$“Íî̃lú}%•$Ú–šJ)))¥¸¤”3Ùç8|ôÛwïãlöù:ÞÿËÊ:à /¾Â¿ßz…æÍ›rÿ}wñÆ›ïTºüó“þÁá#G2¸? ’“(--eßþƒ,[¾ EQ°Û+þF>óûÉÉÉáO·ÞLË–Í £¸¨ˆ={÷±tÙJŸ­›Ÿ_À·ßÍâÎ1Ž·!ÿÜZ¡úëªnØ·ï¥&S•Ënݶ“7 çŠ+‘¯zÂbmÏ‘ÝnçßSßgþ‚%Ü2êFºvéDbbF£¼ü<̆ ›ÉÉÉU5N5yZjkóo[1òvFE×.ILL 22‚ÂÂ"rrs9{ö‡fíº_«ÝÖOMbü=w2 ã)--%sßA–¯P7fžß_z•M›~çæ›†Ó¼ySBCC0›Íœ?ŸËÑcÇÙµkëT>Vj£ÚÖ#«ÕÊßžy‰%Ë~fÔÍ7Цu+‚‚‚8yò+V®á“O§sîÜåw_B!„B!„B¡>6žÊ¿—ÁÆô5 %EÛ˜X%ƒb¤Ô^JŽý§m'8lÝÏfó:UËþ¸ø-V›—p“ñÏ´×]I‚&¢%Ï–C¦u'KL?±¸ôG¬”O6ÚfÙÌèœþŒ º“« ½IÑ4ƨ‘oË%ÏžÃ)Ûq2-;Ye^¢jÌÞ(°çótÁÚë®d°qmtˆ×$¬„Pb/æ”í8[,Xjš«Z™ÎÔüÁÓs¤æ5¹Øô“[‚ò¥_UºìÓNçà:Ã:èºÒ@Û%³ÝÌ9ûY2-»XfšË2Ó\lؼ;8*ïï/æ•&Ôõ5 q}.´ç•›ÞžÍø¼[fÅã 4Õ¶$H áœí ›ÌëøºäcU’WjcNé·Üü(Å@_ÃPÞ*z‰b{‘k™Y¥_ò«y#ƒÆp¥þ5 R‚(±—pÖvšCÖ}l±l`½ùgÕâªÇÊW¼¹&ÕªGEöBîË¿…;ƒàJý5$h’Ñ)zòl9œµŸf‹y#Ë.JÐðG¨êÃõ|Òv”»soblðCtÑ÷ FG=Ö£l0¯f¹i~¹uœ#O÷×Óuýq]ùëw$!„Bˆú@©ìß“&MRvìØ¡œ9sF9s挦Q£FJVV–6((H«(ŠÎf³é ƒÁf³kµÚ»Ýn³ÙbV®\9{ãÆ® vé¢þ(®õY³fÿv¶@v˨›xöéGÙ²u;·_ý B!„B!„B!„B\ff̘QáôáöËëo»âò31äyF¸ŽÈ¹†‚j’×.º|1Óõï‹ßà³âÊ_h.ê¯×Ã?¡›¾'+L x¶à~?G$ª“®kËG³\ÿ¾7od¥£·«aQôV×H¦S ŸcVé—>+«¾©Ïm]Sm:ŸE^H€ø¢ø=Þ+~͉êÌ‹ÞäôõÂø¡ô ?G$„B_“þ¤B!„¸Ôü¤”ÏóíÙ³ç 朢(ùV«µH£Ñ›L&“F£1ÛívKII‰5!!ÁzäÈ{||¼->>ÞÞºukû¤I“ÊŽ–éúì¿×# ¡²ØØÆß3€O>îçh„B!„B!„B!„BøS/Ã@’5©ÄiùsнŒ ºÃ5ïÛ’O/¹ää–º6¼þ) 7’¬iHLˆJWýµ<êþÐò¯æÕ~ŠRákùö\×çnú^(寝lÚÖõ.3ÚÀ ó?E"j"C×Á•œ \r}!„âr&ýI!„B!Ô¥ówBxªY³4Š‹‹±X,d´JgâC÷úõX¶|•¿ÃB!„B!„B!„Bá'Z´<úF%¨Ü¼,ÛI¦—¼ï‡¨|«®3]õ×ÒUm•Ëm2¯c—eKE%|©³þj>Ž˜í6mjÑ?øÝò‹Ÿ"“ÃÞ!Y“êúwEí/í´üN¢¡×ú13jçmÙl´¬åÝ¢Wë4µj[W6¡ä´í»-Ûü¸XЦ/…M@§èh¤Is›¿ÇºÝa !„¤?)„B!„ºtp‰½&S\6}ä~ztïæ6íÀÁCüí™—ü‘B!„B!„B!„Bˆú ¹.£Â¤Àb{Ï<@‘½ÐQùVk]Çj—É´îä¥Â¿ÖA4¢.„+‘´ÔEºOÓDø)ᔦmA#mZõ úÈ—%r­aº?Æ­HÐ$“ Ià¤í˜ßâRK ¶u´i4Ñ6wýûgÓB?F#*bT‚h©kSἦ±¨ãˆ„Bá+ÒŸB!„B®œdAY¬ââòòò âÄÉS,]ú3~<ÂÂ"‡&„B!„B!„B!„Â϶X6p…¶aJ¹¶ól²¬åÅÿæ¨õ ¿Có‰Ï‹ßã 5“Žºn$iR‰ÓÄ£AK®ý<™Ö]ülZÈ¢ÒÙ˜1ù;T!„í²låÁ¼ÑÜ<Öº„+‘hÐø;,Õb[Wv´;„’@Pj/á˜í‹KbFÉGþG!„*’þ¤B!„ê’e°þúØ3þA!„B!„B!„BˆKÆÉ+ýê9É6–s›¿Ã¨S'ÙÍjvïø;áC£ëïD5®£¿¿Cà$›XÄ]þÃ'±­{•ÿò*ÿõw¢ 'ÙKSšú; !„BÔéO !„BˆËÊFßqé¼S!„B!„B!„B!„B!„B!„B!„Bás&(Oš4IÙ±c‡ræÌ¥®B!„B!„B!„B!„B!„B!„B!„BøÏ™3g”;v(“&Mª0×XFPB!„B!„B!„B!„B!„B!„B!„BÔXµ Êùùù2вB!„B!„B!„B\&"5QtêB3}s‡".#JpÚ†]ÐĦù;!.I‰‰‰ôìÙ“ŒŒ ‡"DÀŠŠŠ¢[·n´lÙÒß¡øÝ Aƒˆ‹‹ówB7Þx#¡¡¡þC¯H?Ç]tt4W]uÍš5Su»r¬rœ…¸tIû,*¢( ÷ß?'N¤]»vþG!„p)..V222j”[¬«‹€„B!„B!„B!„B†Y æ¦ 㜷ÙgÎôw8i¤kÌØÈÿ£µ¡-‰º$,v3'-'ÙeÚɺ’5,+ZRïÊõWÌõEؽó@k tù˜²ø;!.9 .$<<œ×^{;wú;!\ÚµkÇÛo¿MHHO=õË—/¯·å®X±ÂUöìÙSã²ÆŽ˳Ï>[nzff&ƒ ªUÜõÁC=ÄĉY¹r%ãÆÃn·û;$ᡞ={2eÊöíÛÇØ±c9yò¤¿CÂ#ÖÏñõ}aíÚµ &OžÌ¾}û¼Þž“§÷Á@äÏ{·?Žó¥ÖWÕkÒ¤ &L }ûö4hГÉÄñãÇÙ¾};+W®dÁ‚>Y÷r'í³¨H‡øë_ÿ À¢E‹üdÒ>‹Ë‘ôcë%(gddpæÌIÙ4…ä”$N?…Í&?æ !„B!„B!„B!DUÚÛóß„R‚.LT ÂIKC:mí|’ìëM¹þŠY!„ð·‡~˜FÔi‚²¿Ê t<ò<ðùùùhµZ,‹Ÿ£ž Âb±Ð¼ys¦OŸÎm·ÝFVV–¿Ã*Óh4¤¦¦rìØ1l6›¿ÃBˆKJ ¶±;väóÏ?'88Ø5-$$„¨¨(Z·nMÇŽ+Mbóf] Äs$./àèÑ£ìÚµËÏѨOê`ÝÄöYˆúFÚ+w±±±ŠÉdªñò1‚²FQhÕ²)í2ZÐ(µ¡¡ÁX,Îfç°;óký’ÒÒJ×W€ömÒéÒ¡5ɉñèõ: ‹8pø«×oæTÖÙºÛ™ZèÚ½3/¿õ,AAF\u3ÅEÅþI!„B!„B!„B!jmdØ-<ó /Ÿ{‘Yßû¬¬çb&¤Qh+àÜ©l(ù«ÝJ‚.æú®“¦oÊȰ[èt%)ºT¬v Ç,ÇX]²’/ó¾ ×–ã“rÕXךØ4 F¢mØMd v›{Î1,×`Ú4{q®êe Q]Cˆÿ£9ȾL¿—_&ìn¿°Ã¹‡ t}ÅÛÒ·‚›Áx%hâÀ^ÖS`ú g‚õ˜Ïv£N¬\¹’”””/ÿÄO0sæLF$„:Ê&·Z­ÖK²ÜéÓ§»ÕÇGy„;î¸Ã§eúÂÍ7ßìJNþꫯxî¹ç*=¹{÷îŒ?ž¦M›‰N§#''‡½{÷²jÕ*¾ùærs+ïkÜxã¼þúëÕÆ³|ùrîºë®Jç·jÕŠÑ£GÓ£G’’’°Z­˜ö yù…åÖÕj4üéæ¡åÖŒ§cÛV´kÝ’™?-fËöÝ>ÝO„„dôwB!„B!„B!„Bá±A¡Cy"æé:)«©¾MôŽ¿ ¿‘ó?ÌrÍ;j9¦’nËkÐp_ÔƒÜ1 Ú 3#- -iahɰÐëù¿Óc8e9©Z¹j­[kŠã5÷c¸òvP4&cDIh‰!¡%úŒa͇-ï”zå á!CGÿ#«ðëJ’“ˆ˜¡4e&@ú2N÷{Í_ø/„¨#o¾ù&III3yòäK²\“ÉDÙGj3úH}‘––Æ‹/¾ÀâÅ‹yþùç+LNhÙ²%=zôp›O||<=zôàÁä©§žbÞ¼y>‰UQ{ì1î¹ç4Û¼Ö­[ÓºukÆG·nÝÈÏÏèr“’’èÓ§Z­Ö-Ù¾oß¾(Š@ƒ *ÝÆŠ+xê©§˜2e mÛ¶å‰'žàå—_V%>á¡¡¡n£¨‰úáR¸/\ê.·st¹í¯Z±mѢ͚5`òäÉ|ûí·®y‡â—_~ñɺþˆçH\^Z¶lIãÆÇ÷¬KÔÁºˆí³jQ«+í•÷"AyëŽ=ÄÅF³yËNŽ?IqI)‘á¡tl›A»Ö-ˆŽŠ``ŸkøvöÂrëöéÙV-Ò°Ùí¬Z·‘¿í ¤´”†)I íߋؘ(F ëÇ¡#ÇÉÍSïG!„B!„B!„B!„¸Üu0väù˜±cdž mÙ$`HÖ%»>¯.^Yíò‰º$n -k‹W3§ðGŽZŽ­‰áæðQô ¾Žm"G?Å£g&ªV®ZëÖ–&< }Ç[AÑ`9¸óŽ9ØsŽ Ç o3ºf½PÂ0öy‚âYõi,BTGÑÿ4`Þ ùS+^.ò éølÞ_8–W4 o ¡·åHà''2¤\ÂÛªU« cÊ”)LŸ>Ým^qqq]†'„ÇvíÚÅõ×_Ù”¨ž{î9‚ƒƒ9~ü8?þ86›­Úu 2dqqqtëÖ1cƘ˜ÈÔ©SÑh4Ì™3§ÊmtîܹҲʎ‚]ÖóÏ?ï-gçÎL›6]»v¡ÑhÈÈÈ`ذa(Šâ–$¬FëI¹Þì¯^¯'..€èèh:uêĆ \óûõëçúœœœLU~øá:tèÀ_þòÆŒ÷ß~ËÞ½{«\G!„'%%ÅõyÙ²eu¶®¢bÎÑ“³³³Ù´i“Ÿ£JÚg!D}P«娨X¥°°«Õª„„„(f³YñU`emÛ¹—m;÷Rö‹§³Î²wÿa´Z ­Ó›ÑªyZ¹õ4ŠB·NíXµn‹–¯uÍ۳鱗Îòðø;0èõ´oÝ‚•ëä¦.„B!„B!„B!„jˆÑÆðϸ×Ð+z^=÷ÆGÝG¤&ʧe• ×ç[IµËŸ´œàç^"ß–_.9x]ÉÞŒŸÊ5Á=é|-ÁJ0ÅöŠþj[®ZëÖ–-屢ÿ½4ËUnó,‡Ö|Ó[èÒ®AפŠ>»Y…Ÿè úÐÄ‚-Î?Qq‚±ñš ÉÉÅs!ç% L^—åÏ%´N¢ö©‚‚‚rÓœ£—–””——W×! !.]ºt¡gÏž€c4¦šŽþk³Ù8vìÇŽã÷ßgúôé|ôÑG\yå•üóŸÿä×_%++«Òmäçç» \Þ½{»’„¿ÿþ{žzê)·õ·nÝÊŒ3 q[ÏÛ6ÖÓr/V›ýMJJBQvïÞMzz:ýû÷w%(‡„„н{w×¼ªFPvzå•WèÛ·/ÉÉÉüõ¯eüøñ5ŠC!„#(èÂoPµ}©•7ë !*6pà@–,YR£—@ QiŸ…j°ÙlJpp°RTT¤\ü¿šˆ”íUÌ;|ì$­Ó›¡ÓëPÅõà @xx(ÁÁŽÆ6óÀárëææpüdM¥®vØ.©ðâkO‘Ò0™¾žËûoZé²iÍóÙ÷ï–›¾hýÌrÓ6ýò;ßýt…ÛéÙ·;7ŒBzëæ9u2‹5+~á«Ogrþ\N•ñú éMÏ>ÝiÞª)QÑ‘XÌfrsòÙ·÷kþ•Ÿf.Pe…B!„B!„B!„õÓú4^ˆý;]ƒ®"FC®-‡¥ø,ï2M{ª\Wƒ†¿Çþ“8m<Ÿç}Êw_3>ê¾j˼'r]ƒ®"^›@”&½bà¼í[Jç«üél+ÝRn¦úfÌH.ÿ÷ÔŸ®+7휷ù4ïnÓæέ4ž…E ¸&¸'Z´$è9l>¤J¹ÞÆì ó®y•γì^ˆ.íÐhQ°Ÿ+ÿwv¯ht:ÞŠ.cšèF€‚íÜ!,»æU¿ÝØý´º¡„Ç£E¢h Ø‹Îc=±Ó毰žØZnC×;1^û…]-÷D¹e´ ;rËû͸ ëñßÝæ+úônC×´'šèF(†Pì¦Bì%¹ØrŽc=ºÓ¯Ÿyv[nùÌÌL T£<9Îj” дiS^{í5ºwïN\\çÏŸgýúõ¼ÿþûìÚµ«ÆÛ©-ÕAgâíöíÛY´h‘WÛ*((`âĉ,^¼˜ÐÐPÆÇ+¯¼¢F˜€£Î|˜… 2mÚ´*“à½mëVný°PÇ[ sójöfGOÜÿØ]´hÕ €¿üß-¬^¾ž[wû¤,­VËÓ“ÿÊ€¡×¹MotE*îLeèMxòÁIlÿ½â/§m[2é_O’œ’ä6]¯×LRƒŠ ‹«LP®ËýB!„B!„B!„BøÆÐÐánÿŽÕÆ10d0ýB0)û9T‘Ø;6ò.º]ÅæÒü'çí—Ù#ø2 mܦ%hé2¾!ýyùÜ‹ü…?…c IDATX0«v;â…"Û…¬F_n\ØMö×nVwC(Á7OEÛ Ûtmb:ÚÄôj××6é6©µû6Ãеì®E_JMƼýG·ù–ƒk\ ÊÚF]±m+íhS;Ž}·žtðD Ž$äÖÐÄ6qŸ&ª!ŠFã“eOö@Ñ4üUtMº—›®D£‰lMºc/)À´ùK÷•5Z‚MBßj°ûä˜ÆbnGßæŠx¸šähï…ßÁßó^‡Òõ/§k zÇsœN»Ù§a¹«'ÇÊ:urûwjj*úÓŸ6l£Gv=(x±Ç¼Ühšqqq 80iÒ$¾øâ ÕãíСo½õ 6t›®×ë !%%…ÂÂB·Õ0kÖ,’’’*œAFFF…#¡FEEñõ×_Ó¬Y3·é‘‘‘DFFÒ¸qc´Zm…>žáÇ3dÈüqfÏž­z™þªƒAAAôíÛ€Ï?ÿ\•mž>}š9sæpë­·2dÈÕ”›5kF»vŽ~Æûï¿Ù\77• @ii)K–,aÔ¨Q4oÞœÌÌLú÷ïÀœ9sxôÑG‰‰‰©Ñ6üñGž|òIbccðÅìv»Buo®¡€LP2IJˆãê+ÛÓ:½f³…ùKV•[®ÔdâøÉ,R’èÝãJ¶íʤ¤¤Ô5¿i“FÄÇFcµZÙºc¯ÏâMHŠwûwbr|¥ »÷¡ï•7гÏÕ¼ðê“ ëyÅÅî¶YË¿ú÷ž‰c\ÉÉKæ¯à§™ ÈÏ+ Mû ÆÝ÷g¢¢#yuê$îy?gNŸu[·i‹&¼ùÁ? Æfµ±hîrV¯Xωc'Q QÑ‘´iŸ^m²qmöW!„B!„B!„BQ?™íf¾/øŽÅKɳåÑRߊ{£&¨Mâ…˜—ØoÊ$Ó\þï¬Íô͹+â^rlçyæì“Ø*Ò´侇Åná¸å¶|tŠŽ CŒz˜+ôMx2úi~.ZA®-ǵÎó~zu<,w]p&Ç9’\úëE±½Ømû–Zf0^âHÈ9h>Àië)·yÞ”ë˘½¡kÞ[öAìù§UÝvЀg]ÉÉæí?bÞ1»©mB:†N·¡‰oQåú¦µ€Í‚-÷8öÒÐèÐ&e`ìùš˜+êû$–ý?c/Îu­c;“‰½ %,]㮘+HPÖ¥:µÙ6÷Ñ WÝåHN¶š(]ý.–ƒk°MxÚÄtì&uG`ôfŒýŸv%'›w/IJýGlgPtF”¨T‚‡L¶Â2×ÜïJ¸5ï^ˆyëØKóÐ6h±û=(ÁÑßô…ÓnÞŸå“ýacŸ g@á7•/k(“R²Ü'áTª>+OýòË/LŸ>£Gb·ÛéÞ½;=ôááá¼úê« >¼Ü:÷Þ{¯ëA«õë×3eÊŽ9B“&MxòÉ'éÔ©Ï?ÿ<›7o®4ÁÙéééL›6ÐÐP¬V+³gÏféÒ¥9rEQˆ¥cÇŽ>î·ß~cÖ¬YìÝ»—óçÏc6›‰ˆˆ E‹üþûïå–ðÁiÖ¬&“‰×_+VpîÜ9 ÉÉÉ´mÛ–‚‚‚ ËzüñÇ]þôÓO̘1ƒ¼¼<:uêÄĉ‰‰‰áÃ?dèСœ:uªÂmx³§–-[Æ€ˆ§U«Vž{gbë¡C‡Ø·oŸkú´iÓ\£pcßÇŽ[ã²==ÎÞ–ëd6›ùꫯX¸p!yyydddððÓœœÌ¿þõ/öìÙÃîÝê=+å¯:ŽÓ‚‚‚°Ùl,]ºTµí®Y³†[o½•””4hÀ‰'¼ÞæUW]€Ýn÷z¤ç@(×™tl6›Y°`£FbÀ€ìß¿Ÿë®»Ž]»vqäÈ, QQQ5Ú¦ÙlfùòåŒ9’Þ½{û$AÙiþüù|òÉ'äææNïÞ½¹ë®»ˆçã?fذadeU~­m[§FëIÌjÕßÚìoff&€#ñå­·Þ sçλ׸x´ïÝ»wsêÔ)’’’èÑ£G•‰Jëׯ¯t´pOxsuò¤Ÿ£Öý·.ýãÿp%¿}ûí·üðÃäçç“‘‘ÁwÞéÑW<¹úë^6yòdWròO?ýÄwß}ÇéÓ§14nܘ7ß|­¶âïGÞPãºò´¿ñöÛoc±X8räùùùèõzÚµkÇOAyùÂU´Ho @nN›~©< Ýn·c*ut0,– °ÉdvM¯LRƒn»Ýñæ›y³óÏçßtÍËÜ}€Í¶ðÉ·ïθ æÕIîo*ì¹ ¦¤¤”ÇÆ?Ç–ÍÛË•ñëÚMÕìmíöW!„B!„B!„BQ?ý/ïC>Ê½ðÆø½¦=üR²Ž¯’¿#BÁÝ‘xâì#nëhÐðLì 诟{³Ö³o¶JkŠË¿˜zeñ ™òmƒ0(F®îá6z³;&»ãEÕ.§¤¤Tš ¼woŃŽüòË/Œ=ÚmZZZÇ'7·în j–[›ýuŽ l±XX³f ùùùôë×_ý•èèh>ûì3À‘¨ŒÑh¤´´ú~æ/¿üÂÈ‘#}>ÊßöíÛٴ鳈¿ýökÖ¬á‹/¾ 66–|çž{®ÒõkÓÖ©ÕÆÖ6f5ëomö×n·»ÎuÙd“ÉT£k`ÅŠÜvÛm\{íµhµZ·¶R«ÕÒ¡CV­*ÿÝÍž¶íeÕ¶Ÿ£æý·®¤§§3t¨ã{Û‡~è6 ýÎ;ùá‡رcz}åß­¼UÛû ¿îe®ÄŒéÓ§óüóÏ»Íß¾};S¦LQ=AY­ëÊÓþÆŠ+ÊM[²d û÷ïgáÂ…FzõêUéÌhÛ¶m¬^½Úõï7’——ÇßÿþwÒÒÒèСƒ[âÍ9ò¶õ–'ç×›˜½Y×Ûºïé÷Aňí3î}ß“ºàÍwXµïeqqqtêÔɵ½šªMŸÐÛ˜==GÞÔAý6⯾J Þä÷:‡úú{] ÆìT×ýXösÊòô8×¶ìkš:+I v°ÚÜß®K¯î]0 ®rðð1>›1›âââb¢}óPž{lë¡uåÖµ9ÞįMnƒéQ|j«jõ­9>XJ)]ûA­¶«k5 Ø,˜Ö•_×vî æŽ:­Kõ߇z; »òÿKµ—„æSb«ã¿êñRÛœ9s\ŸÛµkç6ï†nÀh4b6›yá…Ê%t1mÚ4zõê¥ZL­Zµr<5uêÔ v¬Î;@‡j¾ÿþ{®¿þz·g~üåìÙ³üú믮‡¸ËêÞ½;ÑÑÑ€c´5yzœÕb6—ï#:uŠéÓ§ŽQ·‚ƒƒU)Ë_uÐéŠ+® ÊjÊÏ¿0˜Hd¤:÷XçvÔL¤®Ïå–MP6›Í,]º”¶mÛº™‰Î뵦uÅ9R\DD„k”æºò믿òÍ7Žï7Þx£jm/ÛØªböwýõ”3Á7""Â5j¢S»ví ÔO:ðUÛ^U?'ï¿Ã†  ´´Ô- ÍÉjµú|”¬ÚÞýU®¿þzJJJ*<¿¾¢Öu¥vãàÁƒ®‚4jÔ¨ÆëªY³faû#ç M›6nó±îW§>ž_o꾿¾zs ¶ÏpéÝ÷«ª Þ|‡Uû^Ö¯_?4 f³¹Â„<5x³?¾wû«}öW_%ïGò{»úxŽ1æê\jý_ªªìkª$(ÛívÅn·+jl«*%¥¥<ÿÏ©L~ã}Þÿì~Ù´›ÝNÛŒüß_F «ä-VM›4$((ˆR“‰{ö»LÜ«{Z6»Âסóó’5|õéLN¯|øsoµéàH0>yˆÓ'+QzÍÏ¿ŽÑ¨›§§¹¦wìÒÖõyþìÅåÖ«­ºØ_!„B!„B!„B!DÝû½ÔñÆm-ZšZº¦Gj¢¸7ò~lØxëü¶¦ ãΈÿãƒÄOø©ÁV7ü•E©+ø_â4"ÿÈF4^”­¶†ºF¼Ÿø1Ñšh2Í{™”ý¬OËó7Mt#Bnù%8Û™LJæOR¿ŒDÇß²­g÷a7y´ ņ¡ÛXBnýлç>q a÷-&äOÿs%+:c¹õ¬G7b/püý\×ÔýAmCG²-÷8¶œcåÖ5oþ ì64±i„Žûã5÷¡‰®›`<Ù_mbÖ3™Ø‹ÎÕª<çhÑÖ3û\ гpŒ–£èƒÐ&´¨Õök´‘?¶±ïƒ®q W¬âù^]HøÁñŸ®‰×!õãX©-77—ììlâããÝæ9Pþí·ßÈÊʪp}g2[LLŒjÉlݺus}ž9s¦*Û¬ Ÿ~ú)6›æÍ›³téR}ôQW‚gUœ#'íÙ³§Ò‘d—-s¼,#88˜ŒŒ ÕböÆ?þ8F(lذ¡Û¼!C†™™ÉŽ;T-×Óãìk7:2­VKzzº*ÛôWtr&ߪ="±í¢AJ*Ó¹sg:vìXܲŠâóÇ+¤f¹µÙ_ç¹q&¢,X°EQ¸þúë9|ø0{öìq›^£Ê&ZGDDxµ?žpŽVB«V­TÙ¦¯ÛØÊböwýõÔúõë9}ú4P>yǹOGŽáÈ‘#ª–ë«¶½ª~N Þ™ïÞ½›ÂÂB?G㮲û ¿êBÛ¶Žç¢wïÞíºꂯ¯«êúáááL˜03f°jÕ*vìØÁ† øî»ï\‰wAA¾ý]¥>(**r]o_SX÷éüzS÷ýõ}Л˜±}†À½ï{Z<ý«ö½làÀ¬[·ÎíåMjò6f|ïöWû쯾J Þä÷ºòêÛ9 Ę.—~Ž/UÕöµúŸê^ââŽ;É‘c'Ùy1·Ý@Jr"Wvj˺ ¿»-Û·çUô¼º 9¹y|ôùLÎçæ¡Q2Z6£韛‹fôÈa|ôùw ðdÚØxÇÅSYr²cÞ… ?6îÂÅ—àx£b~^ç²ëøõÂB!„B!„B!„Bˆ€qÆráoŽ1š s1–pM8s ä€y­·ÛDŸÆÞ#A›è6ݨ‰6F»þíËÔ“FºÆ¼—ø1ñÚx™ò`ÖŠìž%ÔGròû(añØÎ¢hæØÍêï¯&ÔqØóO{¶~l!7ÿ%<Ámº¢3¢ Ž.;¥üÊvæ=‹1t>}¥+Þ»#)Jרñ@•õÐú ˵ZGñÔïo(¡qºÃÐmÖ[1múKæ2×¶Ôäéþ:—íy'k]¦çX7¿òç&le¶ë\^Mùïƒf&D½ÚˆýÎŽëñŠ—·8þ¯©bÐ EÚÔ ŸÕPŽ•/4¥„ÇuصkWöﯾmŠŠrJâÄDǽ 77—³gÏz½½º²råJ&L˜Àßÿþw¸ï¾û¸ï¾ûؼy3Ÿ|ò .,7¢\H˜ªìÁÁ‹ç9Ï‹¿ÍŸ?ŸI“&¡×ë:t(ï½÷ƒAƒ£ºûâUO³¯9ì‡ £ÛzË_uÐÉ™|[Ó„âš*›øZUòs~~~Ï¥s;jÈ\Sj–[›ýu&[,ÀQ/ŠŠŠ qž `2™ «ÑvÛü2’Ò±c^“˜˜È¶mÛ¼Þ¦¯ÛØÊböwýõ”ÍfcîܹŒ7Ž¡C‡òòË/»®Ëk®¹€Õ«W«^®/ÛöÊú9xÿ‹sô-OªÏ;WvôW]p&1?^É ñõuUU£Y³f|öÙg$%%¹M rKPð×K=êZqq1F£û˽±îCà_o꾿¾zs ¶Ï˜÷}oê‚§ßaÕ¼—………qõÕW¸õÛÕæmÌþøÞí¯öÙ_}•@¼ÉïuåÕ·sˆ1ÃåÕÏñµÊúÀ¾¦ÊÊþ´wÿ!Žwüa§yšûës£"ÃéÕãJ¾½ˆó¹yØìv¶ïÎäÿ}Å鬳è´Z®»¦Nùãv{¯.Ãm9¥‚iB!„B!„B!„Bq ’l\HV¹>ìF†…^φF[ÊýùGá31/°¡Ñ&D=àZWAᕸ×IÐ&Rj/åó¯1üÄ ºíBïcÝùË©[9mõí~)ºTWròaó!ÆgÝE¶5p²©-MdJ™ääÃ}s/öB*åü;´ÕìÁÊ ÁÃ_q$ëZJ)]þ…#ÿ­«)˜Ú‹ÂÏÿ\mâ³yÇÇ–BbÐ5¾Ê1QgD›ÒË¡µ•®kÙ÷3§dþ XOl@Û ÁÃ_!tÌ×hâÕ×óýµ[J4ZJunÄ¿Ï ”,ó‚Ýšˆù7h¢+^ÖòGž6 ”º‹±¾+µ9»ø!/ç¿­V+&“©Úÿ ƒ*ñ8Ëõä9–²ëh4uÿhÔ’%KèÙ³'=ö›7o£—L:•yóæU8"hm÷·¾<ß“››ËŠ+¸þúë]Óû÷ïODDV«•Ù³gû¤lO޳¯•MìTëù«:8ÞQÓÑwkªiÓ¦®Ï'OÖþÅq& ¥¦¦ªÊ6ës¹Î$oçÉ¥¥¥ 2„ÁƒóÎ;︖s^—5MP.»œ¯Fs«Š^¯ÒEÊðuÌþ®¿ÞøþûïG²U=ǃá]ºtàçŸöI¹¾jÛ«ëçxrmø«¿á,×Y÷ë“Êîƒþª %%%@Ý¿lÁ×mNUÇùwÞ!))‰’’&OžÌµ×^Kzz:íÛ·gøðáªÝsEeÇ6ûÞx~½©ûÞ|ôWÌØ>;Ò}ßÛºàéwX5ïe}úôA¯×c·ÛY²dIŽ•'Ôˆ¹®¿wû«}”ß¾êËýä÷ºÊâ9ª/1_Ný_ó×9 È”/–—W)âþv³æiÑj4ärèhù7`™LfÖoÚÊ ƒûÐ(5¹®Â­1»­ìÇê—?{&›æéi$¥$VºLbò…·œË>áóYÇçðˆ0"£"ÈÍÉó b!„B!„B!„B!Ä¥.Q{á æex ŠçoãniH'MŸÀäs“XP8Ï5Ïl7³Ç´›B[!Ô>ï²FB5¡¼?•xm<Ç,GŸõ—tr²b%ø¦7ÉÉ9Ç|›œ Ø Ï¢¡%JdƒZ¯«Ml‰&Öqm”,ú;æ] \óìV3ö¬=ØM…Uެm;³뉭h´C×z(–CkÑ¥v­»¹K%#(»X͘wÎżs.šˆèÛÞ€¾óh4±M¹å= ?»{Á™Zï[E¼Ù_{î HjíQÒtMΑ&âÂsöBßÕÒõó4D¿ ºFódßö‹žñ5;TÔ@P(^ì³ÜÔ§cU²²²ÈÈÈ`Þ¼y<üðÃuVî™3Ž:Itt4çÏŸ¯f L&6› F£zReM™Íf~øá~øáRSS5jãÆ£Y³fLŸ>Áƒ»bå<Î)))•n³Aƒ לóøÔ_}õýû÷§eË–´lÙ’={ö0bÄ/^LVVVµÛp>8WÛQPj{œÕ*·25=GµyPÐ_uÐÉ™|Û¨Q#U·ë1ìäÉ“n£ÏzÃù€±F£¡wïÞÌ;W•íÖ×rí[Ù$˜£G–[ΙRÓäiç¹6™L~Ë9"@v¶:ýS_·±•Åìïú צ­Ûµk¿ýö;vdĈ¬\¹’®]»b0(**òÉHŠNÞ¶íµá͵¡fÓûBU1ûKeÇÊ_uáØ±c´oß^•ä)µÏ‘7mNeëfddЬY3þö·¿ñã?ºæ™ÍfvîÜézñHuêC¢Š/©uŽ;Ò}_ºàÉwX5ïe à÷ß÷éw{µbö¦oæi¬ëßFüÕW Äß‚ä÷ºòêÛ9 ĘëC?¶.û —ª€A 6ÆñºÜ¢â·éa¡ŽWäšL•¿‰¦ôyƒúoÞ+«gßîüiÌÍ$5¨ÛyÊšÀÙK89 ¨ÿÓhbÓ°çP<óAŸ'PZo@›˜Vñß²+£„Ä\ØNÖ^c0ÿþúæ}#)7ï €eÿ*pŽ<\¶¼”®y—¢écÀfA Š@ßz¸Çq]Ì›ýµþMT*ºf½kµ®ëÅ5sK®-K×´vs±Wç¢&J~†¼;>ëÛ@ø}å—1më'„ÞA=Sߎ•¯mÚ´ €=zTgånܸp<ÇrÓM7Õz}çÅ·Ûü騱c¼ù曌1‹ÅBdd$7ß|³Û2Î㜞ž^é„ýúõ ¨¨ˆ;wú6èZXµj•+)rÔ¨Q$''síµ×ðÅ_ÔhÅÅÅ@ÍGx­HM޳/Ê-ëºë®ª?G¥¥ŽûNHHõÿû«:íÞíè—5oÞ¼FñÖDll,Ç;î .Te›[¶láĉÜsÏ=hµ>z³M=)×ù@·Édªr9çȱ5MPnÓ¦ ™™™®uëRŸ>}GÜÎëÏ[¾nc+‹Ùßõ.´sPû‘Ðmø Aƒˆ‹‹s%Ó,]ºÔíÙV_ò¤m¯ o¯ µúžÜÚµkç–_TvôW]X³f àxñBÿþý½Ú–'çÈWmNeÇ9Rz9[ IDAT..ÎõÙÛ¾bmö7©u޼ickKÍó[W¼©ûÞ~tªí9ò&æ@lŸË ”û¾uÁ“ï°jÝËŒF#½z9~3Ró»PE|qÿ­mßÌÓ:X׿ø«¯ˆ¿ÉïuåÕ·sˆ1ׇ~l]ö.UŸ ÜªEɉދñàa÷·)žûcà˜èH$UüGζ­šíÙ›ujbôØ‘¼üæ³Ü÷èÿñÑWoQ£õNŸºð&‚®Ý;U»ü¢¹Ë°Z­hµZÆÝ÷—ró›4mÌÀá}þXv¹ë툻wìu%,ßýÀí´ëغF1VÄÓýB!„B!„B!„BÔomí¸1ÌñÆü¹Xì–jÖ¨™sÖ #µ6´Qe›5ÕÚІ!ƒx1û9ŽZÊ€’“°åø~-»æÍ -AýžMÍwìEç\ŸµIÇ`޻ı-­}û‘®^Ëž*†ÝÕè*eË>€½ÄñL‚åq\ófͻ滒̓¿ˆ¾Íõ(¡±(Æp´Ém1^÷(h*~y{Ùsdè~o¹ùšØ4ôCþXv>ØÔ©ûU)üÒ‘¨ úg0v»h›c}:D<U¥­’úx¬|éûï¿Çb±à /¼Pg‰w[·nu=öÈ#Ð¥K—Z­¿e‹#‘|РAušX¡ÓUÞndff’“ãxYGtt´Û¼Y³f¹žù©hÔæÍ›»üœ={¶Û3?þf³Ù˜1c#FŒp%hîß¿ŸuëÖÕhÎäÎÄÄDâãã«]ÞÓãìm¹U騱#·ÝvPý9:uêÉÉÉ$'Wü¢'ÕA§õë×c³ÙÐëõ®‡ö½a4™2e aaa”––òᇪ¥ƒÕjå£>I¶Ï>ûl¥£Þh4ê=6é¯rm[u ÊΖkš ìL¶­iýõ”^_¾O’ššêjë–.]êö€°7Ôjck³¿ë/\hç€Z×áyóæ‘^¯gôèÑ®O_®VÛ^Þ^jõ7js_(óK/½ä—ëª"UÝýUfÏžíJ‚yýõ×9r$ñññDDDбcGž{î¹ ëuE<=Gj÷ëª:ÎeG½o×®]·Y‘ÚìoE Äš5kX»v­×Éá¾ Ö9ò¦­-5Ïo]ñ¦î{û}Щ¶çÈ›˜±}.+PîûjÔO¾Ãªu/»æšk\}†Å‹«øMRÞÆ¬F߬¶uÐ_¿ø«¯ˆ¿Éïuîêã9 ĘëC?¶.û —ªÊkY=¡Üýgöì;Äá£'È/(ÀjµJ³´F\Ý¥……EüúÛ6·uwg ¸¸„àà þ2j8 –®bß¡£˜Mfâb£èÕ½+­Z¤°q‹ï²þûîåúAçníY¶pUµë9x”óçrˆŽ‰bÂÃ㟽Q…+ÒѰI ï¾ñ?×ò§OžaÆgßóçq£|}?‚C‚ùé»äЦ}+î¸ç6t:y¹ù|úÞ—neÙív^{i*S?y• à ¦þïU–-ZÉÚŸåäñÓX­VBBCHkÖ˜¨˜H>œ:MõýB!„B!„B!„BÔ­ ­éhìLž-—M$݃¯á¶ðÑçmçù0÷]ÕÊÚkÚÃIËI’uÉü5ú ‚” 6”þJŽ5ƒ¢'JC¬ZyeÝ1€m¥[ØRú;ᚊߎnÃF¡­Ð'1Ô%C×1XOlÅz| б’·ÁÛmØMêì¯-ï¦ Ó0t‹®iOBnû󿝰?  Jx"(?ÀaÍÚ‹-ï$šˆdG‚­.ëÑ Ø‹s@k@ Ž} ÞPo5aúíŒ=Æcì:tFì%yX®­t•‘ÿÁn5cÙ³ë©Ø ÏV‡&"}»®ÑŽ­§¶{t\* Ó›ýµ”R<çi‚GüÅJÐÀçk\®-ï¦_`è:}ëa(†Ì[À^š6¹†«þ4:ì%y”®ûH¥½­^î‹`ø4qù<œ ö2¹J…ß@P0t„ÐÛ@ßÜ1Ír°ƒ¡«ú1Õ×cå+§Nâ?ÿù?ü0·Ür W]uÓ§Ogÿþýœ9s£ÑHjj*W^y%/¼ð‚j£mÚívž}öY¾üòKBBBøòË/™7oË–-ãèÑ£X­VÂÂÂhÑ¢111¼ñÆnë÷Ýw 8„„¦M›Æ»ï¾Ë‘#G04hÐÀg}öÙg˜L&æÎËÖ­[9{ö,z½ž 0zôh׈ Î2Nœ8ÁG}Ľ÷Þˈ# á믿&//Ž;rÿý÷£ÓéÈÉÉaêÔ©>‰Ý3fÌàÁ$22’;O>ù¤ÆëoذpŒÀóßÿþ—©S§RZZJ“&MHMMeÊ”)nË{zœ½-שmÛ¶tíÚ•œœ¢¢¢èÕ«cÆŒÁ`0pîÜ9þýïWYîæÍ›G²ê”)SøÏþƒÍf£Q£F¤¦¦òæ›oº–õWtÊÎÎfóæÍtéÒ…?ýéOµåK£ÑššJii)QQQtîÜ™qãÆÑ´iSžyæ׃£• Çf³U:¿¨¨ÈíaÚÏ?ÿœÒ­[7î¸ã:vìÈôéÓÙ½{7Š¢’’B·nݸꪫ‰V«eÏž=€ãÁô´´4^yå• ×5™LL›6Gy„ñãÇc4ÉÉÉáçŸV=NP¯m¯ o¯ µúµ¹/œ8q‚>ø€ &Я_?¾ùæ>ýôS:„V«%99ÙçÇ×ö>诺PRRÂÃ?ÌÇLhh(¯¾úªÇÛªí9R£Í©íqÞµkÇ'%%…çž{Žàà`Ö­[ǹsç0ÄÄÄÔè^PÛý½˜N§ãµ×^s%ýóŸÿdùòåõ"ùÅI­säM[[jžßºâMÝ÷öû SmÏ‘71bû\V Ü÷Õª µý«Ö½là@ÇK#3339tèPM•ǼY¾Ymë ¿~ñW_% ’ßëêÿ9 ĘëC?¶.û —ªzŸ CRBI q•.“—_ÀßΡ¤¤Ômzi©‰?ÌçÏ#‡Æ­7 ®pý{ö³î×ßT»¬3§ÏÒ"½©ëßY§ÎV±ô6›§Nã‰"2:‚ÇŸÐm~nNž[‚2À‡S§ŸÇ€¡×Ñ»_z÷ëá6??¯€'œÄ™¬l.¶kû¿ïyžÿçãÄ%ÄÒopoú î]n¹Â‚Â*”=Ý_!„B!„B!„B!DýÑ'¤}Bú•›~ΚÍÃgä¬U½¿Ú°ñBöÓ¼ÿÂ5á<óŒjÛ®Nc'ÚÛ³,uu¥Ë³f3ðxŸº Ëg´)Ž—€k´#ìå•.g/:GÁ»T+·tí{(!ÑèÛÞˆ6¹ Ú¡/×lE»’ùÏ|Ó[(ÆpÇÌ2ÿö5†+oG18zÌ;çµ’Q š¤6(ú tW\]é6-ûWbÙ³Äã˜Êùöî;<Šj}àøw{6!½j%B‘©JQPÁWD½X®]¯]ôw­è¢\¹b»€ ‚TA:"½w-½'›lýý±daI![’%ú~žÇÇefΜ3gΜÙìÌ{އÇk9³’9w£ëõwÔͯ•Ö¾Û²"ÌG× I|aëŠQe>F…&q0ê–}Q·tnï¶Ò ?>†­(ÃíÃs•µ >„×A î†ÂÏ.ÝrƒÐ·@×´]ìÿÕ¶«±®jÓôéÓÑétLš4‰&MšðÜsÏUºÝ_|Á‰'¼–ï®]»˜0aS§N%::š¡C‡2tèÐ ÛVxáñ×_å‡~àŽ;î S§N̘1Ãk媊J¥¢C‡èõzRRRªÜnÕªU,Y²¤Âò÷Þ{˜˜†ΠAƒ4hÓúüü|&NœHzzº×Ë¼<æÍ›ÇرcÈÉÉaþüù5NòäI~úé'† FçÎ^ ÏÍÍu ö´žÝÍ÷R•°Ïørß}÷9fk¬Ê¡C‡X¹r%ýúõ£{÷îtïÞÝ)ßË_–ôÕ5XnΜ9tíÚ•Þ½{Ó¥K¶mÛV£t•4”””ð /°páÂ+îãJy=úè£üüóÏŽ[­V&NœÈ‡~È 7Ü@ûöí« jÛ¶-{÷zgoå[ÓãU©Thµö{ü•¾\™AyòäÉ€½þñÇWÜÞ†qãÆ1nÜ8§å‹…§Ÿ~šƒz5?oô±î”Ù×ׯÕjåý÷ßç7Þ 44”7Þpþž››[mðÜìÙ³¹ÿþûígáÂ…WœµÛÞìÛ]åIÛðÖ÷ Wï S§N%,,ŒQ£FѱcG>øà·òu—;÷A_] [¶láÖ[oåÉ'Ÿ$%%ÅÑw²bÅ †ŽJ¥ºâ€®ž#oô9®Ö³Õjå‰'žà‹/¾ ((ˆ×^{­ÚcªŽ«Ç{©°°0§CCC‰åôéÓn—§6xãyÚǺ›ç·.yrí{ò÷`9wΑ'e®ýó¥êÃ}ß[ׂ;Ãzz/S©TôíkÿýÈ•Ÿ<án™½õÝÌkÐW¿øê»J}ü-H~¯»úÏQ}+óÕð=¶®¿3ü]õʹyùü°`)-[4%.6š @Tj¥¥e¤gfsðÈ ¶íÜGiYY¥éžHåÃÏþKÏk;‘ß” @ÔjC)çÒ3Ù¹ç »ö¬äÑ›÷|üÞDEGÒ°Q ç.aï®5N»hÞRòó 1f(-[ÇÓ Aƒ£‡N°vÕF …ÓÆ‹…ן{‡µ+72ìöÁ$¶k…ŸŸŽ´ólX³…ofÍ%7'¯ÊüvlÝ͘¡¹ix?z^- ­â Äd4QXPĉc©lÛ¼•JUe¿'Ç+„B!„B!„B!„ð­çM¥›ßµÄkˆVE¡Wê)µ•qÆtšß «ù¶ðk ­…^ÏwGÙvF¥dTƒ;éêw Qªh‚UÁ[‹É·æ‘mÉæ¤é›K«žñÖ!ª`¯îïj§Ð‡ø&c«…ÒåS0Z޶Ãm¨&Ûg¶Y°ò±æÁ’¶óÉŠç×rf%_BÓi4ªÆ]QF¡ð Æf,ÆVš­8kÎIÌ'7U[[Y!¦]óÐ^cŸÅ´gA5Û0üøê–}Q5l2 …(جX‹s°fÆ|h¦ƒËÀVõL‡îðôx­ÙÇ1,|TZ”ØllE™h’n¶ž¹’w,¬J—¼ˆùÈj4É#PÅ$¡Ðøa-HÃ|l-Æ­³±•äxõXk°üomgû,ÉE_ƒí’ɽm%ó°}&eýÍ Me(ØŒ`ÉÓ!0nó)/ê*­«Úb³Ùx÷ÝwY´hcÇŽ¥{÷îÄÆÆ¢Óé(((àØ±clÞ¼™ÜÜ\¯ç½eËúõëÇÈ‘#éÛ·/‰‰‰„††b4ÉÏÏçÈ‘#lذ¡Ò÷Xžþy~ÿýwFEëÖ­iРF£‘ÜÜ\N:ž}ûX·n×ÊjµZ¹ï¾û8p ;w&22’ððp¬V+YYY8p€Å‹³hÑ¢JgHµX,<þøã,[¶Œ1cÆœœŒ^¯çìÙ³¬ZµŠ3f]qB‚«Å_|Á˜1cP*•Ìž=›²*ÞåªÊ3Ï<ÃÉ“'6lqqq”––räÈ–/_îô~”§õìn¾ÿú׿èÙ³'­Zµ"&&½^OYY'Oždåʕ̚5‹‚‚‚ïc=ÆÃ?ÌàÁƒ‰¥´´”dzbÅŠ ùúòX²d <òÍ›7çµ×^ãÖ[o­6PáСClܸ‘øøxBBBP«ÕäææräÈÖ­[Ç?ü@^^Õï¯yª¸¸˜ûî»n¸#FйsgÂÃÃ1›Í¤¥¥±cÇ,Xàµàd_ä{éÌAW P._i°XeRRR3ºMŸ>ÝÃ^ÙüùóÑjµ\{íµ„……‘““Ãï¿ÿÎ'Ÿ|ÂÞßÐ}¬;eöõõ ösrr¸ûî»ILL$00’’8Pi_w©‚‚¾ùæ&NœÀ÷ß_+eôvßî OÛ†·¾o¸r_°X,<ÿüó,^¼˜±cÇÒ©S'ÂÃñX,äææ’ššÊ®]»X»v­Wꨜ'÷A_^ GŽaÒ¤IhµZ¢¢¢°X,Ž`Œ[o½°Ï¶|%®ž#wÛ•'õ¼uëV Ä=÷ÜÃu×]GLL !!!‘——Gff&ÇŽ«QÛpåx/•‘‘ÁæÍ›‚AŠŠŠ®˜_]óÖwoOúXWyóüÖO¯}Oþ,çê9ò¤Ìõ±¾T}¹ï{ëZpõoXOÛó5×\Chh(+V¬¨amyÆÝ2{󻙫נ¯~ñÕw•úú[ü^wuŸ£úXæ«á{l]~gø3R\øÏÉ+¯¼¢Ø·oŸ"33SQXX¨ˆWdff*µZ­ª¸¸XiµZ5þþþ“ɤü”Je€Íf ´Ùl¡k×®]xéèy]»v­ÃÃñ½„„_A!„B!„B!„B!ªôÝwßUºü¯ölWü5i:܆_¿g±œÛMÉ·|]œ:¥ kFÀø¹<ŽùØÕóÒ²Bˆ«[Ÿ>}øòË/ûwÉþóŸ>.‘𦨨(-ZDDD›7ovÌ$WvîÜI`` ï¼óŸ~úi­åãMõ±ÌÞ4vìX^{í5vìØÁm·Ýæëâá5-Z´`ùòåLš4‰•+Wú¸D~~~¼óÎ;ÜtÓMìÛ·aÆùºHBˆ’û~íyùå—¹ûî»9wî½{÷öuq„Bü…Tç›’’2\¡Pä*ŠB«ÕZ ”j4cII‰I©Tš¬F£Ñi=~ü¸-00ÐikÛ¶­í•W^©å­¬³£B!„B!„B!„B!„ð…ºëì³À·ÎöqiꞦãíö6+–óÞ5R!ÄŸÛo¿ýÆìÙö{çèÑ£ùûßÿîã o âË/¿$""‚¼¼<ž|òI_I\E"""xøá‡øì³Ï|\!¼kܸq€}V½;wú¸4.½zõ¢OŸ>L›6ÍÇ¥BÔ”Ü÷kWÿþýº›=Y!„¨Kj_@!„B!„B!„B!„ÂÛ”-ÀdÀf5£ŠND×k2Š€p̧¶`>ºÆ×Å«ú¡oaÍMÅrnÖ¢ 0•¢ŒA“4MÛ¡˜¯ÄV’ãã’ !„¨oÞ|óMâããéÕ«?þ8 …‚éÓ§ûºXÂÑÑÑÌœ9“ÄÄDŒF#?ü0çÏŸ÷u±„µjÕ ƒÁ€Éd¢]»v<õÔSDFF²~ýz ¦õÒôéÓ9yò$Û¶m#==’’6lÈ-·ÜÂÈ‘#øå—_ÈÊÊòqIÿÆŒÃ<@£Føøã¥ïâ*&÷ýº“œœLll,Ë—/÷qi„Bï“e!„B!„B!„B!„BüéèREݼ‡Ó2kö J—¼è£Õ2¥ u|/PëªÜÄ’~Ò•ÿªÃB !„ø³0™L<ðÀ̘1ƒ=zpûí·óÅ_`0|]4á¦þýû“””DYY“'OfãÆ¾.’ð±çž{Ž””§eGåñÇ÷Q‰„pŸJ¥¢oß¾ètUÿ}´oß>^zé¥:,ÕŸ›¿¿?5âÔ©S¼ÿþûüüóϾ.’¢r߯; 77—­[·ú¸4B!„÷I€òUdÝî%¾.‚Ëz'ßäë"!„B!„B!„B!„™K±• Ð豜Ç|d5Æ-_`3–øºdµC©¦lÓ稛tCÒ… •[i–ŒC˜¯Â´1XL¾.©BˆzÊ`00~üx^|ñE,X ÁÉõÜœ9sh×®sæÌaÏž=¾.ޏ  òóóñ÷÷çìÙ³,[¶Œ>úˆââb_M—i4þýïÓ£Gš4iBxx8Z­–¼¼<öïßÏÒ¥K™?>&“ü}ä-?ýô6làСCØl6_Gqr߯;åÊ«W¯Æb±ø¸4B!„÷I€òUD‚}…B!„B!„B!„Bï0üô´¯‹P·ÌeÿÆßÿãë’!„ø3›Í¼üò˾.†ð›ÍƳÏ>[§yvìØ±Nóó†úXfw=ôÐC¾.‚^SZZʧŸ~ʧŸ~êë¢üedff’™™éëb!jHîûu§<@Y!„ø³RúºB!„B!„B!„B!„B!„B!„B!„BˆúC”…B!„B!„B!„B!„B!„B!„B!„5&ÊB!„B!„B!„B!„B!„B!„B!„BˆSûºB!„B!„B!„B!„økSèCPF$`+ÉÁš}Ü×ÅâO'::šÖ­[“••Åþýû}]q‘¶!„B!„B!„Â]2ƒ²¨·îw ëv/©ðßì?ñuÑ„B!„B!„B!„B¸ Á¤%øßñ)ê¦Ý}]!þ”–-[ƬY³HIIñuQþ’““Y½z5[¶lá†nðuqªå¶QŸŽWÔÌøñã9vìX…ÿ–.]êë¢ !j‘\ûB!„B!„p•(_å”JqcQ*¾.Š“ö,„B!„B!„B!„Bˆ?»Ç{Œ&MšÁ³Ï>ërz¥RI“&MP*ëÇ«]žo}TßΑ/I]՜ԕâ¯@ú:!„B!„øsQûº5¡T(HlÝ‚ä¤V4iÔ€=f³™¬ì<9ÎÆßwRZVV!]td8Ü?®ÆùLŸù çÓ3½YttëÑ…7>x??ºÄPbðu‘®*?þ°˜% W8þ}ßä»9f¨K$ªãi{ âçµß0ë“9|ùÉœÚ(¦B!„B!„B!Ä_Z MßÅΫñöcÓîà°ñÐU™o¿®ôòëCg¿ÎDª¢É¶dqWÚhO‹Z #ogHÀpšjšpÖ|†5%¿òuálJ¬ÅÕ¦ï¨ëÄ]A÷Ò^×…?çÌgYU²‚¯ ¾¤ÔVêõò¢P¢N¸M›¨&£ðÅf.Ú›ŠùØZLÛ¿ÅVVäý|…¨„º1DηΞÆ·i0ïló”m®|_šDð ºk@¶R°¤ñw(ž–3µvµ.00;í•3nÜ86mÚTå¶ßÿ=]»vå‹/¾àÍ7߬«"ŠË˜ÍfÇg‹ÅâRÚ””>þøcôz=íÛ·§¤¤ÄÛÅó:OŽ·>ªçÈUsæÌaÞ¼‹ßÍþñp÷Ýw»¼Ÿ¿B]y‹Ô•¸xëÚ¢*Ò× !„B!ÄŸO½P¾ó¶!$¶ŠwZ¦Òj‰‹".6ŠÎÉI̘ý…Õ?Ø­oüôøùé|]Œ«–ÉhÂd49ý[\½¤= !„B!„B!„BˆºÐ^—Ìã¡OÓNÛÞi¹N¡õz^þ ¦FM£³®«Óò–šV´ nÅMC¸?}–ôJÓlp;O‡=’‹3G5×Äs_ð$úú÷gbú½Xó½ZfýðwQ·HqZ¦ÐªQE'¢ŠNDÓv(%ßý [ÑÕ3¸·øëÒv‚Àû쟋¿¯"8YABÀ¸äRB¡ehZÿHï6c]”Úû. ÜÐh4Õn«V«+¤uoêÔ©ÄÄÄ ×ë™2eŠKiÐëõµT²ÚáÉñÖGõñ¹Êh4b4þ펿B]y‹Ô•¸xëÚ¢*Ò× !„B!ÄŸO½PÞ½ïá¡lßµŸÔ³ç1”–@§öI$·mEhHûöâ —9¥ËÊÎåÝ鳪ܯB¡`ÌÈ›iɹ´ 2³rjûP„B!„B!„B!„âªuÊ|’açW¹^‰’·"Þ£µ¶ 8i:qUå;¬Á-<ú…†Ts*ËŠ—°«l'gÍg(¶zVà'BŸq'Ï*˜ÉEó°a£—_ ‡>FœºS"þŤô ذ9¥m«mÇÓaÏ¡DÉAã>Ëÿ˜lK6½õ)ü-x"ñšx^ Ç3ñj™M—¢ m‚iß",çö`+-@Ù MÛ›Q·ˆ2¸!ºÞSúËK^ÍWW)# ôÿ%˜Bá´Ê· ~üo³6탢¯íÛ+” i £ÁœZƒ“Á>#­ÉdB£Ñ8«RÀ\\üç俾9pàÆ óu1êÌ_íx…B!„B!„BØÕ‹å=û³gÿa§ÇµéY>v •JIÛ6 $¶Œ¯Îbµ’›_På~{wïBØHÌf ßÿ¸³ÅR ¥B!„B!„B!„BˆúÁl3sÞ|®ÊõwÝKkmŒ¶2þ™õ F/Eüy#ßú^ü3ìe,6 oçþó ÀŠÕ+å«LŒ:–! ìÁX³ fòqÞÅèɹEß“eÉäÈ©tÒu¦›_w¶”nrJÿ`Èd”¨È°¤ó`Æ}] >`ÜG‰­„GC§·¾íuÉì)Ûíµr›®À|p\òÞšuóÉèUÔ-û¢Nèãµü„p‹BÿÊp¬¶CÑ IDAT°@îÓ•ëz] N6,†¼×àÒËÞœ †_@P'¥®UƒFsÅ”%@Y!„B!„B!„u¥^(ÛªYwêÌyÚ¶I@­Q£P(°ÙªÛú¢ @nLéÀêõ¿“•“ë…’V®Q“†¼úγÄ5ŽåÇïóÙ‡ÿ©rÛø„¦|5ÿ“ Ë—ožWaÙ¶-;ylâó•î'åÆ ¿ý&Ú´m‰ŸŸŽ´ólX³…oÿ3Üœ¼jË«ÓiéwÓõ¤ôíAËÄ„„c6™ÈÏ+äèáãlüíwÍ[ZýA»`èÈAtº&™ø–ÍˆŽ‰DïïG©¡Œ³§Ï±vÕFæ~³ˆâ¢Úyp6áÁ±tíÞ‰ˆèp‚ƒƒÐh5äåä±gçþ÷õöî:PmzOê*±]kn7œŽ]ÛLaA!{vìç»ÙóÙ»³b¾ýoºžCú’Ъ9AÁœ;“ƺ՛Y¹d5ãG·ë:cµZY½|ÓÞùC‰Á+ù 1¶ÉmhѪ9‘a¢R*ÉHÏbë¦|3k.çϦUHç­ö|¹š]å¹r !„B!„B!„BˆÊŨc¹?øA¾ÈÿœTó©*·Õ)t Ìõúi­mC¨2&ò-ù1ba- Š*>3r7_e¯…¿%/ç¼ÀÒâÅ._[m;FŽ¥³_WB•¡Z ØU¶“¯ g³»lg…í¯õëŽ%ß~Saýo†ÕdZ2‰TEÒÏ€S€r˜*Œkü®à¿ÿq'—û®pw'TÊ ÿ›¼ \ÝÓ6ËÙ]¨[öE¡ÖÙ§Ÿµy9À[©FÛiꤛP†6XsNb>ð  ¨6©®Çý¨š\‹"0…_0 •[I.–s»0nÿ˹Šu¤ív/ºÞ“(ž9 k~Å xUã.øßñ%ß݇å¬ó¹VhüÑtºE ÊÐ&(´ØŒÅØJó±æÅrz+Æß¿r¯>¼|¼—”M›¨ÛEÝ…_6s¶’\¬9'±¦íÅ´ÿ¬y§+M­nyšä‘¨b’P¨uX Ò0_‹q뱕äxýX+òOÐv¬÷O°œ¯|»Àûíÿ7Ÿ†ü7 ª1 lµ«[—uURRBPPÐgP.__RRRéúo¼‘~ýú^¯'##ƒuëÖñÉ'ŸpöìÙj÷Ý¡Cî½÷^ºuëFxx8ùùùlÛ¶™3g²}ûöJÓŒ5Š:˜˜HTTÁÁÁ¨T*ÒÒÒX¿~=3fÌàôéÊÛ¢§üýý¹÷Þ{¹ñÆiÞ¼9 4 ¨¨ˆ¼¼R€Áf ÇRñ_6¶–nᦀ!$iÛ:­ë¢»ÆܼưºBZ³ÍÌÃ:† s2×U\,鼜¬Ð 9 UÃdç<£Û Šnså²5ï‰*ƹQ¨[÷GÝêFJ—OÁ´÷'§õæʪ&ݰîYPq¿:`3c9ïü‚¼BŒÿ¨™(Û;/÷ Bá„2¤1 ¥²V”Ý9^…FßзP7ïQa¹"X2¸!4ï­´ãöËë•*ü½‚&q°óâ°¦hÃîBÓn8†»Bp´çýûç‚÷ lsåÛ©[€&Ñþ¹x6ØLµZ,g>¨«¢"û@WšA¹<@¹|ûËuîÜÙéß5b̘1 2„;ï¼Óˆq¹§žzŠxÀiYDDdÀ€¼òÊ+|ýõ×Ò=÷ÜsVXÞ¤Iî¼óN†Ê=÷Üî]»ª=.W…„„ðý÷ß“à´<88˜àà`š6mŠJ¥r ìHOO ,,ìŠûˆˆàüù*¢ç} cÇŽ|ðÁ4nÜØi¹F£Áßߟ¸¸8Š‹‹« Pv·m¸Ë“¶áïïÏG}DJJJ…åþþþ4nܘ>}úPPPPiÀ/¨T*Þyç†î´<>>žøøxn¿ýv&NœX+Á¤×_=ÉÉÎ÷ߘ˜n¾ùfÌóÏ?Ïÿþ÷?¯çë wû€ S麠  ’’’ð÷÷¯°ÎÓþÊWõìI]¹Ë>öRžôWîž_ð¬®êÛ}ê¶MzëêN™×¬YãPîÑ£ßïüw@·nÝû÷£Ëƒœ=mÏžðE{öôx}ÑçxÊÓïHîr÷üzrŽ<ý¾áI›B!„BüuÕËe?Ž˜¨®»¦mÛ$`2™ùe座Œ£CÛÖ¬\³ ³ÅR[E *&Òéßѱ‘UGž8–Ê×Ü@Jßëxù­g’2ƒ¡Ôi[«¥âáû½Çœ¼ò—5,š·”‚"ÚuHbÂCc æ­i¯pïm'3=Ë)m‹VÍ™:ãMüôX-V–/^Íú5›9wæ< …’Ð`ÚuhSkkV¬ç‡¯PXPD@€?×¥\Ãè{FÊÛ½ÊøÛ'“é݆g}2³Ù̹3i£Ö¨IlÛŠþ1ž¦Íóøó±~õfòó œÒyRWc'ÜîÞþûn>ŸögOŸ§qÓ8üÇÚuLäÑg'±w×~Ž<^!ýçÓf3÷›…têšÌ¿¦½ Àüï~æË¿æºÞ×ðÏ7ž × ×ѼESN;åµ|Ö¬ÜÀOÿ[BnN>þþz’;·åÞî$ A/¼ùã†Or(ÀÓö|)Ë%שÅÅkÖ•kP!„B!„B!„BTÔ\ÏÀ{ Þ§ùa´+Ý®¥¦E}†¿2+~)^ÂZÃΘO£DIˆ2”d]‡Ï\Ó|‡Ø_¾Í±fónä´Ò´!\N±­˜}e{ø¡ð;6•n¨4í=AãÁÉ”nåãüiœ5Ÿ¦‰º)‡€scuÔ 5f›¹5æ:…®ÊÈ–h;Fݲ/6S)e¿}àõ|ü¼àN6íý Ó¾Ÿ±‹PEµAÛy4ÊÈVÕ¦7nœV3Öü³ØÊŠ@©F“„.å”aÍð»ñÌÇ~ÃfÈw¤±fÁV”¢Aê¦Ý0U ¬nÔ Kê`u~©í~Ÿ=8Ùb¤lý'˜OlÀV’ j ÊÀTÑm°+Ÿ¥ÖSî/€®ÿóŽàdÓÁe˜÷þ„µ(…Z‡"¤ú›¦€RUižº^wÜš.ôûGle¨v@×ã~úPô·~@ñìÑØ 3jå¸ýG@ƒñöÏÅßAñUo«½$–²´bœ­òE]ÎÊÍš5C«ÕræÌÇŒÉZ­€‚‚‚Š;¶lÙœ9s8}ú46›=zðÈ#È[o½ÅСC+¤™4i’#eóæÍ¼û¦¦Ò¼ysžyæ:wîÌK/½ÄöíÛ« b]ºt)ß~û-ÙÙÙеkW~øay÷Ýw0`€K\ÉÃ?LBBF£‘÷Þ{5kÖ““ƒV«%66–öíÛWâNKKìÁ“©ê¨÷òàªò4³gÏvÌÎöžñãÇר¼GŽ!)) °Ïx÷Áö~¸K—. Î÷—ÊÞ™hÓ¦ ³gÏ& ‹ÅÂÂ… Yµj©©©( ÂÃÃéÔ©Sµ³eºÚ6<9ÞK¹Ó6¦L™âN^´hsçÎ%==NGÓ¦M™:u**Uå}»<=GO=õ”#XhÑ¢E|÷Ýwйsg}ôQÂÂÂøüóϹùæ›Ú•7|øá‡˜ÍfRSS),,D£ÑœœÌÓO?M‹-xõÕWY±byyy^ÉÏÓºòFŸ°cÇ,XÀáÇÉÍÍÅd2D«V­Ø¹sg•éÜí¯Ü©ç«¥®\åN[Îý¸~~=©«úx„º½ö=½‡zR惒––FLL ={ö¬6@yóæÍ®%OÚ³·Ôe{öäxÝÍ×Ó¾ÎÞês<áêùõäyëû†»÷P!„B!Ä_S½ PöóÓñâÎ#o¥gdñ¿Ÿ–s>=³ÆûI¹®+ …‚Üüví«ý_W/[G«6öÌùylÛRõhw6› c™ý¡ºÙ|ñm£ÑäX^•˜†QŒ¾kK¬àÿ^šêXwäàq¶oÝŬÿ}DPp Ë[¯|è”þÉ'ã §´´Œ'x‘]Û÷VÈã÷µ7Ûô¡ýGÙ³ãâûvdë¦|8óÿ áÞIwòÞ”é^ÍsÓº­–­_³™S'Nóõ‚ÏÐê´\Û³ Ë;?Ít·®"£Â™ðàXÖ®ÚÈ‹O¼é˜ 87'Lú'ß.úœˆ¨pFÝ5‚)ÿ|·Â>ÒÎgPRl`Ão[8uâ4M›7fÛ–äç°tÑ*Fß3‚­šÓ6¹#@ÙùÚw„­›.þ³{Ç> ‹xò…É4iÖˆ¶ÉmØ»ëâìÜž´çË•]²}™¡Ì¥´®\ƒB!„B!„B!„¢¢»ƒÆ£DÉ9ó9–/©r»çÂ^À_@©­”G2dGYÅYy6—nôj¾áªšiì3ÜôwžÍT«ÐÒKŸB/} 3ó?ã³üÖGª¢¸?øAV—üʳYO`Åþ-Ç’Ã䌘×p‘ªHÆÞÍËÙÿt¤=d¼8 îõþ}ù¥’™› ¬öA?¥ŸÓòò€å|«ýÅúκ®Üs!HúéÐç—6Š<‹=ðT­P¢ !Ëâ<µ§º@Lv~jÍ:Šá——°föj^ÊÈ–¨[÷À¸u6ekÿ}1όØö/&ð‘õ ªzfXó‰Šææck±æœ$`ü\PëP7ëéÀ/ÎÛ߀&ùVTÍ®³æ^„¬T¡ŒmoßîTÅizËg”6XŠñÿ:­³fÔêLÂî¯2ªõÅ Ù]s)]ù/礀Á¯ƒö”A±h»Ž³§Ýû¥Ë^s¬³fÆ’úwƒÂ/Ýu÷Sº|ŠŽÒ™_ ØkcXïW¿½º‰ýÿ–ó`ͯ~[oòU]•(—ÏIJeËP«Õ¼ÿþû|ôÑGNë« P^»v-‹_ì¯öìÙCQQ¯½öIII$&&ràÀÅçþÑÑÑ<úè£,_¾œÉ“';G²³³¹çž{X¹r%ÑÑÑL˜0'Ÿ|²Ò|÷ìÙÃúõëÿþã?(((àõ×_'>>žŽ;z50¤K—.,\¸™3g:­KKK«4¯sçΠP(ˆŠŠâìÙ³<óÌ3téÒ…·ß~›?þø°× àØì5î¾n³Ù(+³¿ a6_Âh4:–WgÊ”)`0?~<[·V|fíÚµÕîÃÕ¶áÉñ^ÊÕ¶‘””ä¼™3g/½ô’ÓþöîÝË»ï¾ëõeOÎQ\\&ØïósçÎå™gžq¬Û¿?›7oæçŸ&$$„Gy„çŸÞ«e_³fM…e+W®äرc,[¶ NGŸ>}X¸p¡Wò󤮼Õç¬^½ºÒYŠqÃÆ±Në<©«þ7߀V§Åd2óþ›Wh¥†Ræ}»€k{u¹âþ òì CÃB˲³ì³L7 ¨µ|/µüçÕX­öÑ[%¶p)­+L—5¸6"a]]ƒB!„B!„B!„F!ÊøàÛÂÿb¡ò¤–ÚÖ´×Ù:gæZiprmäÛJÓÚñynÑ÷ÜŸ>žgo Ïéë˜~7{Êìƒ×Þ<‰ŽºNNiÜŒV¡Ãd3ñvîŽàär› í³C^§ïé´n[éVRÍ©<ú Cn!R‰V¡%ZC_ÿ~¤èûPl-vJ«Wêû Ê ” ë•ÀÅàe½Â¿òJòˆ ¬Î³2+ÃãÑu»…Ö»ùiZ°0—aÜ<³âV‹½N‡Édâå—_®„ZRRÂìÙ³èÓ§OóX°`ãý…víÚ¹”öJrrìïNtìØ‘+lm———瘮zô(óçÏìÇWWïG8qÂTؤI“:ÉóJj³Ïñ„'ýUmÕ³/ëÊ>j·¿ªŽ'uU_ïƒÕ©6YÛ÷Ð+•¹|€   ÇlÉå’““ñ÷·ÿ}SY ª»íÙW©a¡ÁÌøê˜¯0gÇvmP«T˜Ívì9Pí¶ÞôÛÊŠ£{[»Žö ÙãGN’~¾ò¥7ü¶…!#âç§£e›xìµ|Ý©k{Ç6¿,\ávºõè‚ZSqÒGS96Í­}®ûuÃnŒÞ_OBëæÜwÄíò]. A·Ž¾™î½ºEHX†gRÏ€NçüîI]uìbÿ!qÿîƒdgæTºÍÉcö—BBƒ &/·C=+*[tqa­å J dgåNHhí>”ÏÍÉ#:6Šœlן0×Å5(„B!„B!„Bñg48`Z…£­ŒÅÅ‹ªÜ®‹®«ãó¢âŸê,ßÕÅvßÊyÓiÝž²]LÎx€Ÿâ~!XÂÈw°³ìâlCtö€Õ½ÆÝUÎP|Üt€Pe(¡ÊPr­¹X±òbÖ³LúŒ e0/…¿Ze ­Î‚åÏòl"07—ndKé&ÚjÛ3#ÿ§mj‹­¬ˆÂ©ÝQø¡ k†&é&4íoAÝzúF”|{XŒ^ÉKm–mÉ:ŠÍXâÖ>ºh:ÞŽºYA±(ýC±™J°æžv+Ôº é,§ÿÀV”‰¢A$ê}°¤^|)]ÕØ~þ­ùg±æ©Ö´ý[Ôͺ£ '`˜vÍÅ´ïg¬¹©nƒ+Ü9^Ut–Ì#ØJ*.\•òÙ¢-™GЗ3_‡¦ý-(4~¨¢ZaIÛïêaUËøh»‚BáŸAÎC`®IÜJ5Ìêæva&æœÇÁ|Âórúª®ÊŽË”ˆÕjeãÆôêÕ‹Æsúôi´øÏϯù´ÒùùùdggNdd¤Óºò Ÿ;v‘‘Qiú£GFXX˜#¨âJJJJÈÈÈ &&†°°°—·&þóŸÿлwoZ¶lɪU«øæ›o˜7o'Ož¬6ÝéÓ§ILL$..ŽíÛ·Ó©S'‚ƒí×\Ÿ>}xóMû}&..¸:”¯½öZÇçyóæyußÕµÚT]ÛhßÞþÞÎÁƒÉÎή³2y¢sgûýæÐ¡CŽ»Ëýú믌5 ½^ORR’Wg( dܸqôéÓ‡¸¸8ÂÂÂ())áÔ©S„††àçççµü”ÕL*¦Ð€ªÑÅÏÞૺ*8V«ÕøùùÑ»wovìØÁ·ß~K¯^½4hŸþ9jµ£ÑHqqñö謨¨ˆððpôz½Óò¨({;ìÖ­ÇŽ«,©“—‚Q :]Å<±víZ|ðA^ýu¢¢¢x衇x衇ؾ};³fÍbÙ²efþ{ðRyp@ÿþýû Ö Ž@ðFì ëjP.Ÿ‰2??Ÿ¬¬ÊÛðDUm£¶UÕ6ÊÔΞ­¢s¸ •wW,tùºòëÎøê«¯ˆ‰‰qZîçççyùûQ¾RÛ}Ž'ªë¯|QϾ¬+wûØÚâI]Õ×û /Ú¤§÷POÊlµZY¼x1&Làæ›oæ7Þp´Á^½z°~ýúJËín{öOÛ¤»Ç{5÷ÏUñUŸã)wÏ‘/¿o!„B!þÚ”¾.€§;IêYûƒ–ñM«Ý¶A€?MŰç€÷fá½Z8FÙ¶U3<ð%œ¶ST²ì*¡Ö\ò”ÐK¿‡) ^÷y"£#(+32ííÜ6ðúvÆ ·1ᎇÉH«"ÐÛƒºR(ì—œÕbÅd4]ñ?Ö;OHk;ߺj7å³?geÔp…B!„B!„B!ê»0U8É:ûl¡+‹—W»íÅ=väJ¾FÛÅY~ƒ/ü^î¼ÙÄTD]Nyᑹ F›ñŠÿi©8`oº%·sÿç†Òót7®?Ó“ÑçGòUÁ—„«ìƒï.s~βd^(oÕ‘•!*{°©Ùf&Ïêþ Ó®0ŸØˆåœ}%U³ë¼·ãò牓‰è‡þˬk.£lõû>„®£hZŠÿ;öŠÏ¦}?Û÷䆺iwûBµU\GÌ'7V™Ö|ô7Š>Jé//_¬›†Éè‡þ‹€{¾G±tô IDATÙÊcªŽûÇk3_ÎWªÜȵ|'¾}g t%ä>6#(à ìß  ­|Û —5ªPø×]}UW¹¹öÁÔj5)))èõz–/_ÎÚµk)++cðàÁŽõ9\ôSþo‹Å‚Ñh¼âå38×Tm¾o°råJRRRxòÉ'Ù¾};`ŸYnÚ´i,Y²„ÄÄÄ iÊgþ+ž4h999LŸ>€~ýúáççGDDƒáª’-?GµU—UµÚVÕñ”–ÚÑW«ëϼ®ž#oK…BÁG}DLL ¥¥¥L™2…Þ½{Ó¦M:tèÀСC9ÞõA-jSm÷9ž¨ê¼øªž}]Wîô±µÝ_UÅ“ºª÷A_µIOî¡Þ(óüù󈈈 gÏž€=¸¹k×®üöÛoU¦u§=ûŠ7Ú¤'×ïÕØ?WÅ“>çÒ4JeÝ¿j_}ìÕø¾¸B!„¢~ª?¿ÔV£  â À¿ú‘:“Z·@¡P`2›9rÜ÷#˜^‰Ízñ¿šüÆŸ•™MË6ñÄÄEW¹Mtìů.…6'Ëþ90¨Á!Aäç¸QbÔãv·ÒU'òŒŹÕÌXìÊË-Û´ Y‹&¼õò¬X²Æ±Îd2säà1Š‹+…Ü“º*?G¿._˫ϼ]ãtUÙ·û ƒŒjfÍ®|Ýáj{®Ì‹O¼B¡¼ªF$B!„B!„B!„ø3»Aß%JÊlel.­:ˆ ÛbŸ‘(PDˆ2Ä£ ZWò-öˆUÇ‘i©øìL}aêT³Íì´<Ó’A+Z³¢d9/d=ëvy+s[ƒQ(QbÅÂÃ*§uå3**‰QÇ’f®ø²} MKN›S+”»6ÙŠ2Pè«™–ÖEÖâ,”´FÜÐå´ªèÖ(Ãã(]þ:¦Kël¶ŒCØŒÅÕŽumÍ<ŒåÜnT “Q·½óɨu•›©s3(;XL˜ö/Æ´1Ê †hÚGÓåN”áÍñ¿ãSŠ¿…­¨úg¶5åÉñÚòÏAL[·‚¦krŽ”A±ó*®½ÈÊ6CÞóú¨›@Øû}?Ø.‹o7í)/øõÊZ+’_ÕUy€²V«eÀ€€=p¡¤¤„ 6pà 7ШQ#”J%ÙÙÞô;##ƒ¤¤$–,YÂc=æµýÖ“ÉÄ?þÈ?þH£F¸ýöÛ™0a Ì™3‡Áƒ“ž~1èÿÈû„5¢cÇŽ4jÔˆÿþ÷¿,^¼˜gŸ}–Aƒ±qãF ÇŽÃj­zõò÷X\ ì½tŸ5I›™yaЋà`BCCm¥®¹{¼®:sæ :tði°˜«ç¨ü:*ŸU´2 ^ìSÊÏ©§’’’HHHà¹çžã§Ÿ~r¬3™Lìß¿Ÿ¢¢¢íËÝ &wëª>õ9ÞªçúXW®ö±¾ê¯<©««¡ž]å«kß“{¨7Ê|àÀvìØA§N1bk×®¥[·nhµZJJJªœAùÒ|\iϾâ­6éêñz+_Wû:OxÒçF¬V+J¥’ÀÀÀÚ*bµÜ=Guý}C!„B!êý ÊáaöárK ¥Õn—Ôº'SÏb2ÕÝ\€”{0æž‘Ä4¬:xørå#~4¸âö{vì EËfÄ4Œªt›^×ÛGƒ.5”räàqÇòÝÛíi ‡ÞXã2Ö…}ºö‘׎>Qåveeö‘ÑõúêÕÂÂ/>L?rèx5[VäI]•Ÿ£®Ý;¡Óy>BÜGïÍä‰^dÓº­uš¯;\mÏ•±Zmn'»s !„B!„B!„BüÕõñï À޲í”Úª»³l`ŸIù¦€¡u–ïAãÇçžú^•nÓJÓ€“¦“NËw•í ›_wt »Å­ …&»‚î`eÉ Î_€¼­ì¬Ø_ÌNÑ÷©^…Š~öcÙZºÅkåª e¨} g›!ßkû´œµÏ ­ŠNBÑ ògÙUQø‡]ÜOÆa·Ë`Ú9M˾ö™”[^€ùØ:(Ÿy¸¬ç(Ûð %sî«…_š¶žµ÷Kyr¼æSö¶¢ i„:áz—Ò:ÎQD‚Spí¥Ô-ìmÕf2xt.j¢ô7(ø·ý³¦>Tqã^°\¸´î¦ÎÞ€ñU]•TøùùÑ·o_Ž=ÊÉ“'X¾|9 …‚!C†x5@yÛ¶môìÙ???¯í×Μ9ÃÔ©S1bf³™àà`FŽé´MypUãÆ>|8 .äüùólß¾.]º8fe<|¸úsk0hРKå,OÔ( æ?þìï±Üzë­.ååM6lØ@“&Mèß¿­æUWÏQùuÔ¦M›*ƒ†úõë@II û÷ï÷B)í³ˆ–ótŸeeö{¥¿¿kSÖ»[Wõ©ÏñV=×÷ºªIë«þÊ“ººÚê¹&|uí{rõV™¿þúkÀ>{sDD„cP—U«V9½¿x%5iϾRm²&Çë­|]íë<áiŸ“‘a¼««b’Ü.ƒéðJû¾T4nsðšU3í®²â3ìrÖìãØJ ïÎ6íÉñšü☭×oð«hÚ CŽBˆ*¶=ºž¥¦Ò´—ž#mIÖ+ÃãÑ$ÝtaÛ_ÀZûƒÂcT ºk/ÛÀjß@Ó‚þÕN¥í%¾ª«¬,û¹íÝ»7ÁÁÁ¬Xq±í®\¹‹ÅÂСC¶õ†ùóçc6› ãå—_öÉûîP««¾~9B^žý½‘ÐÐP§uÇŽÃl6ǰaÃHMMeÇû .D¡P0i’ý¼:t¨Ú2œ;w€èèh"#«¥²t`?ßW²{÷nG€É?þñºvíZã¼¼ÉÝãuÕÂ… Cï½÷·Ýv‘‘‘Ñ©S'^|ñE4šÊû:oqõ-X°ÀñNWe³N¶lÙÒ8µpáB§wºÇ[õ\ŸêÊÝ>ÖWý•'uõWn“àÚµïÉ=Ô[e^²d ÙÙÙh4î¼óNÇ@‹/®2»íÙWc'ÜÎàaýÐûëY4w)E…E´ëÈÝ÷F­VS_È>ýÆ)/›ÍÆ;¯McÚ¬·ðÓû1íË·øuùZ6þö;çϦc±Xðð'>¡)!aÁ|>m¶÷*è‚»'Ž&,<„õ«·PTXD«Äî4ÿ=f³™/?™Smú=;í?$(• ^xã þóÙ·X­VâÇÍÌéÿul{ôÐ1ÒÎeÓ0ŠGž™„ÎOÇößw‘ŸW€F£!$,?}壼yRW™éY|5ã;þöÐ8†ŒH§k’YðÃbN8CNVZ–؆ÑtèÒŽ÷ßøØíÙ‚/ç«|/åj{¾Ü½“î¤i|cþþäD/XNqQIòv÷B!„B!„B!„ø+kªiF€Ò> âÞ²ªŸÅ–³aãÍœ×ø,úKô =ŸEÁŠ’å¬7¬å¬ù,›™eZhU…òIÞt¯ä 0³`F~DŒ:–¢¦óïÜ©œ1Ÿ¡¥¶%/…½ŽZ¡¦ÀšÏ…ß:¥Ë°¤óEÁ &?Äð·Òů+óŠ~à¤éÙ–l´ -±ê8:ë:óVΛXp~ަWè R«Ž%QÛ–~þýIÖÙŸaçXrx2ë1²,• ~’7kbº£Žåã¨Ï™‘ÿ 9–zê{11Øþâþ:ÃoŽàkïPp÷7˜OlÀrv'Ö¢L°šQD jÖmÇ;{¬i×|¯åj-Høu6ÚkÇ£n‘‚ÿè/0mÿkîiP*QFƒ¢òÜ-‡±œGk°Uûa9½›!TZúPÐÔ`/‹ãŽÐõ|]·{@­ÃVZ€ùÄÆ*“øß6›Å„ùÐ ,iû°ç€J2(MòÇlÇ–´½nÕK¥ÅôäxÍe~~ýˆ£Ðà7ð¥çk-HÃøÇ×h»Ýƒ¦íZL»ÄVVˆ*6m÷¿R­´€²M3½t´W–ÿ*he¿™·íâ¤kÿ~}AÛ Fƒ¦¥}™ù`m7ï—ÉWuUÙºuk§åÜÜ\¶mÛF·nöNOO÷Z¾iiiLŸ>Ç{Œ;îÝ»3gÎŽ;Fff&:ŽFqÍ5×ðòË/×ÊûîøêÿÙ»ïð¨Êôáãßéé½’ $„Þ« ˆH‘bA”]ë«âÚׂm×U×ÝÕË®ËOeEQAéQ•ÞK!!”@z›L;ïCÆ™„$3ɀܟ뚋ᜧgΜÉ5gîçþì3L&K–,a×®]œ>}NG›6m˜:uª#Sc]àI³ÙLff&]ºt!,,ŒO?ýÔ±oÉ’%üõ¯uÔݽ»áϨ͛7ö¤ ï¾û.o½õµµµtèÐÄÄDf̘á¶Þ¡C‡(**"22’'Ÿ|FãäJMM%99™—_~ÙQ^Qþò—¿ðÅ_À_|ÁÒ¥KùþûïÉÏÏÇjµD§Nˆˆˆàõ×_oÚd6Rs·©ŒF#<òü1¼òÊ+^i·)šú;vŒ>úˆiÓ¦qÝu×ÀW_}Eyy9½zõâþûïG«ÕRZZÊ[o½åµqîß¿Ÿ‚‚øë_ÿŠ¿¿?¿üò ÅÅÅ """ð÷÷?CÀ¶mÛP«Õ̘1ƒ·ß~›ÍFRR‰‰‰¼ñÆnë5u®.ÆkŽ·æùbš«æ^c}u½òd®.åsšöÞ÷ä3Ô[c6™LÌš5‹?ÿùÏÜ{ï½ JKKùñÇë­ÓÜóÙW<='›{¼Þz/4õZç O¯9sçÎåꫯ&&&†Y³fñÞ{ï‘——‡Á` M›6-¶`As_#_ý½!„B!„|€rTTq1QÄÅDÕ[¦¼¢’Ï¿YÜ`vÝè¨Çó¢â2¯Žñ|N*›É]¡Óèmè˧q΋×(5L?ý(¥¶R—º—}€AeàÖ;HÔ¶åá°ÇÜöñyù,ò,Gœ¶Ýö0S‚ovÚ¦ ðcÍZ^-~™BkýA‚{M{xµøežˆxš }ÞŒvžCæC¼PÔøÓÆPG´GŠ>:µÞ2Je!5óG©­ðjßµ?¿* ]·Ih⻢÷ÆUTl—=‡ÿµo¢2Û307“yûWèûÝ‚JoÏXmÞ·¬&÷…UjÔq]QéüжTo›–œuX2W7{L.<<^ëÑmTϾÃÐûÑvûBîJm%–ƒ? Ks&ƒµëýÖÚ ï¢ ŽA—>mê´©#œ‡f,§æ»GP* ›}xMe«€òÿ@ØßAA·BÅÌs @ñ#þ ‚¾ýÑÒ|1W§NrdD;yò$»vírÚ¿jÕ*G€òñãǽÖ/ÀÛo¿Á``Ú´i$%%ñôÓO»-÷ñÇsøpÿíh †=zàïïϰaÃê-·fÍ–.]ê²}÷îÝtéÒ›ÍÆ·ßž]¬¡´´”•+W2nÜ8EaïÞ½ Ž#77—… 2aÂz÷îÍ'Ÿ|âØWRRRoÀ®Ífãõ×_çÿøáááüãÎ×Ë’’—À;wrçwòÆoËøñãµÏUQQÑbÊÍ=ÞæØ¸q#×^{-?þ8Æ C¯·_ë***Xµj'ND£Ñ4é·%MÑœ×èµ×^#..މ'2zôhFí´¿¬¬Œ»ï¾Û« Øl6{ì1>þøcBBBxñÅ›ÝVff&«W¯fäÈ‘ 8:ö•””Ô Üœ¹ºØ®9Þšç‹e®<½ÆúêzåÉ\]ªç$4ý½ßÜÏPoŽyÖ¬YÜsÏ=Úÿæ_°`&“û¿ù==Ÿ}¥¹ç¤§Çë÷Bs®užðäšóý÷ßóõ×_sã7Ò«W/>øà¯«>ž¾F¾ø{C!„B!.øå’Ò2¾ž¿œÔŽíHˆ%,$VƒÑXËÉSEÈ>ÌÖ{1ÖÖœ  ØWÄ*-÷îÔóy÷µ‰‰¦Mb æ.eÏÎý®»hÞrÊJ˹îæñ¤vN&((ššffÝšŸQ©TN_¦[­Vþþô«¬[ý3&!½k'üü œ8^Ȇ6òÅ's))v½é^gûæ]Ü<þnÆNÉËÒ)™°`Ì&3å•ÎÉcë¯;Ðh4^_íoùÂ5ètZzõëNhxe%ålß²›Ï?þšƒ™‡ÕÆ Ó_áö{§rŨˈŽÂT[Ë¡ì#¬_û‹Ë\íܶ‡[¯»—¦N¤wÿîDÇFLuU e¥åŸ.!/÷(›~Þ궯æÎ•¢(|ðßOY½ì®½q½úw'&6 ½AOeyGç³mó.ÊJË=›ÐßðU¿çjêù|®OÞŸMû”vÄÆEóÑ;ÿ£ºªÆm9wû,`ÏžæMŠ¢0cÆ -ZÄþðH||<ƒòòrrrrøõ×_)))ñj¿Íe³Ù¸ë®»¸úê«éÝ»7ÑÑÑDFFb³Ù8}ú4û÷ïgÉ’%,Z´›Íõý»{÷nnºé&~üñG œxŸ={6ãÆ#77—ÊÊó_+Ÿ|òIrss™0a F²³³Y¹reƒ¿‘˜3gÅÅÅÜzë­¤§§Luu5û÷ﯷîÆ9r$×_=#FŒ ==ððpL&eeedgg³aÆùͧÇÛÙÙÙL›6 ½^OLL V«Õlsíµ×ölË-¥©¯‘ÕjåÑGeÅŠÜ|óÍtïÞ X³f |ðEE® '<µyófFÍm·ÝÆ Aƒˆ‹‹#,,ŒÊÊJJKK9uê999¬[·î¼m=òÈ#<øàƒŒ3†øøxŒF#YYY¬ZµÊ«çóÅvÍïÍóÅ0Wž^cÁ7×+OæêR>'¡iï}O>C½5æòòr¾øâ î¾ûn¾úê«zËzã|ö…æž“ž¯·Þ Íù;Çž\sžyæ6mÚÄ”)Sèܹ3AAA˜L&JJJ8rä{÷îeýúõ^«§¯‘¯þÞB!„B\ÚTgNžþyÕÞ½{U§NRUTT¨’““U§NRëõzMUU•Úf³étf³Yø©Õê@EQ‚E _·nÝ‚-[¶8ÚêÛ·o+Žï¥¤¤øzå?C`P 3ÿó)Ÿüµ¯‡#„B!„B!„B!ÄïÚœ9sÜn¿ÔîíŠK“®Ç ø| ë±]Ty§¯‡ÓªÔí ¼c.5óÅ’sþ€!„¸ØtìØ‘•+W0mÚ4V¯öb–{!„…?üá¼øâ‹lß¾n¸Á×ÃB!„B!|Æ]œï°aÃ&ªTª•JUa³Ùª£N§3UWW›Õjµ900Ðf2™¬ÑÑѶC‡)ÁÁÁJtt´Ò¥KåùçŸwYQJÝjG#„B!„B!„B!„Bá#ª€ ƒì™ÔL›gùx4­O×s²ý‰bÃz|o#„-äü#`Ï@¸cÇF!Dk‹ŠŠâÁ`æÌ™>B!„Bñû§õõ„B!„B!„B!„B!¼MÕÌ5(6 šØt C@‰åÈF,ðõðZ„ÿøW°•äa=¶[e!˜¨‚ãÐeŒA×e<–¬Õ(ÕÅ>©B4ßÛo¿Mnn.[·nåäÉ“TWWÓ¦M&MšÄõ×_À²eË8}ú´G*„¢¥uêÔ‰ššÌf3]»vå‰'ž ::šŸ~ú‰U«VùzxB!„B!Äïž( !„B!„B!„B!„âwÇ0ìa´;m³Ƹô¯>Q SkÐ&­¡Þ"Ö“0®~¹%„Þ¥Ñh1bCý׺½{÷òÜsϵ⨄BøÊÓO?Ͱaܶx¸Uë6VzZ ]»t&&&?ƒ“ÉLYyÇN™yˆ£ÇÊO»k*!!ÁnÙŠس7Óí¾ŒôTÆ€ÑXË»3ga­'StRÛ† íOXXƒµZÅbÅh4RXXDfö!öíÏÆfs­ïÍ17WSçùÚ‰W“Ò±=srùnÁ ·mÆDGrÛ-7ðÙÿæº bOOK¡{×4¢£#ÑétTTVrèp>›6ï ²²Ê¥ü…2Ï1Ñ‘ôèžA»v aSl”””q87Ÿ]»öSV^á(;zÔpºuM£àØ ¾˜³Àm{í’¸ñ†kxÿƒÏ©8sì¾:7:´oËÁ} =;Ï&“™êêÊ+*9rä(;wí§Æht[ÿÜ÷Îko~èöõ8Ÿ¦ž¿Õ”×(<,”»î¼ €/¿ZÀÑ‚.í Ô‡!ƒúðͼ%ä9ÚäcB!„B!„B!„÷Üt#OF< À?Š_`~å·>‘wõ4ôâ–ÛéfèA€*€c–ÖT¯â³òÿ踿GpUÀÕü3êß ¶ýÔéÇYS½ÊÛCn•mÊåèÒ®FÓ¦;ª€pK-¶’<,9ë0oû¥¶Ò×£—m[ˆ>s))ºL;\ËÝ Á÷ ?µ¿ºoK—׃¡¨£@1‚õ˜6AÕ<°þÎn7Nœ8‘×_€²²2 €Ùlv[vöìÙÌ›7Ïñÿ?ÿùÏÜzë­­2NqaÝéüon¿àÙñΟ?Ÿnݺ1oÞ<¦OŸî´/::š_~ù•JÅŸÿüg.\ØèãÀb±8ž[­VŽD!„B!„B\j.Šå©7\Cz§d§m½ž„øâcèÝ=ƒf}MyEÃtmâwÕpÚ&Ä9m×i5^s}¢£"  û`n«Õm µZÍ„kF’šÒÁi»ŸŸ??±1QôêÑ…wgþêê¯÷Ð%£`ÿÒÔÏÏ@r‡¤z5"<”øø§mZ­†  @‚‚INN¢w¯®Ìývi‹·9|5ÏõõJŸ^¡tëÒ™o,'?ÿ˜Óþ až‡ @ÿ~=P©TçlÕElL}{wçÝ™³¨­5µHÿ­!""Œø8çyÖëuèõ:ÂÂBHjÛ†>½»1÷Û¥œ,<íÕ¾›{nœËÛ¯Qbb<ƒö`ëö=œ,„B!„B!„BøØèÀqLxÆ×Ãh1×MfzÄ3¨Q;¶uÐ%sWè4F\ÅÝ'o§Üæ>@+@ÐZÃô ÿ‰3Ðvæ´M¥×¢‰MG›Ž®Ëxªçü?”ÊS>¡gé{A𙿪¯ê NVAÈÃx3œóF¥uè:AÀupò*P.Þ[Ê.®½öZŒF#¡¡¡\~ùå¬Zå~!“É„Édrú¿;wfÈ!NÛ¢££‰ŽŽfÈ!<øàƒ<õÔS,]º´EúW©T<þøãÜsÏ=¨Õj§}]ºt¡K—.Üyç 0€ŠŠŠzZ¹8ú‹³ÿ^mĈh4§ Ò+¯¼Òñ{‹6mÚx¥?qiyã7ˆ‹‹Ãßߟ—^zÉ×ÃB!„B!„—‹"@y×ÞL¢"ÃÙ¶syÇ©1ÖH¯ntïÒ‰ð°®1”oêÉ* ЧG&޹FCQq);÷fr$ÿÅ¥e­ÔXX]]CÁ1׌¡-U·1z÷êêèã`N.۶´ ­VKLt©)íÑhÔ.A¨ŸÌš‹SL"pïÝ@¯×³þ§Mlß¹×iß¹+6ž+00€vI TW×°cç>êCzZj£‚±ßÿàslŠ‚V«!4$˜.]:Ó5£±1QŒ3‚oæ-i‘17GsçÙS—èèwë¶ÝìÙ›‰Éd¦M›X† íOpp×MÍÿ}ú•#›ðoùbž¯¼b½{u °°ˆm;öPxª• b¢£HïÜ•Jåµ÷±/Ï °ßžùÑ(Š‚N§%$8˜ô´z÷êJ@€?ãÆŒàÿ>ûÚ«}zznxû5 `¸‘¨T*NžfÝúz–@B!„B!„B!D«èièÅs/  `ƆÖ[º5tÑwezÄÓ¨QsÀ´Ÿ™eïRd-â2ÿaü¿Ð»IÖ%ó|äßyôÔCn몂Øjܧq[¦F¹pT6XŽ:< óÞEXíF1–£ŠA×eÚ´«Q‡¶ÁpÙƒ—=ç롊Kœ: Âÿ¨Á|*Þr_.t:Ü`nÞ •ŸÛ˫Ԡë7%ï÷œÃàÁƒ)**böìÙ<ôÐCLœ8±Þe!ΧªªŠ±cÇÅ€¸í¶Ûˆå­·ÞB­V³xñâÛèÓ§6›Íí¾ú~[ñÜsÏ9²yïÛ·Y³f±ÿ~Ôj5\sÍ5¨T*§ á±cǺ¯_¿ž   f̘ÁìÙ³öÕÔ¸~7§_OŽW§Ó@xx8½{÷fóæÍŽý#GŽt<¯·O!ê³ÿ~&L˜àëa!„B!„BˆKÐE ¼{_»÷e¡œ³ídái²rŽ Ñ¨é’–Bzjr½õ;ulϵã®Äf³±hÅlܺ EQê-ß’RSëS4y žÔmŒ.éöìŹGŽòÝo‚½‹‹K9yÐm=w+ëÖ Ïl±4:(±Kz**•ŠÌ¬CìÙ—ÉàA}è˜ÜƒAÞ6Î š,+« /ÿeeå Ô—ö퉎ŠàÔéb¯¹9š;Ïžunøe ?ÿ²Õ±¯´¬œ£GsÛ-7àçgಡýYº|­ÛvZ{ž“;$9ƽw_ËWþètsçĉSìÚ½Nwžh<_žu}µÔÖš¨¬¬æØñ“”WTrù°DF†JI‰ûú›ÊÓsÃÛ¯‘Z­fâø« Àh¬eÁ•X,ÖóWB!„B!„B!D‹ˆÐDð¯¨WÑ©t¼RüOî »Pu˜¯‡åU {5 ­'ùSá]TÚ*ØoÚKµRÍÃar™ÿpºº³»v—Ký`u0Ŷ"*lÞËîØR,Va9° ιo;}KîÏøkthSG Mî»  …ð—A ¶r(™î>ÀØ0ôlprÍ(}8'^Ð’5Ë@Ø*£n5'ND£Ñ°téR¾ýö[zè!FŒApp°W³ÌŠK‡ÍfãèÑ£=z”;v0{öl>úè#úõëÇ¿þõ/6mÚDaaa½mTTT8e>ŸË/¿Ü$üí·ßòÔSO9ÕßµksæÌ! À©^ee¥K[u¿£2”——·H¿¿Õ”ã‹‹C¥RqàÀÒÒҸꪫÊ <رO2( !„B!„B!.&E€rC¡¸GާKZ Z•Jå¸kÐë™<ñjT*ó¯fçž-;Ø„† @öÁíV·±ÂÂì7Îssó[¤ýóÉHO 3+‡²² Nž&6&ŠÔ”ìÙ›Ùäö¶mßÃA}hÓ&Ö)pÖ—|1Ï]»tF¥Ra4Ö²ióN—ýå•lÙ¶‹¡ƒûѹS2«¿ßà6P×–œçºv‹KÊX±êÇzWž5›Í^ëóBu87ŸË‡ @«õÞ¥ÛÓsÃÛ¯ÑÕ£†“Ð&EQX´d5eåró\!„B!„B!„ð5jþù/¢4Ñü¯üSæV~Ža÷5ª®AeàêÀ1\î%õi„«Ã1c¦ÌZF¶9“õ5ë˜_9ÏëuÛë’ù[äßéï7ue¶R¶Ônæ³òOÈ6¹ÞsŒÐDÐÏoÿ+ÿÔœ\gNÅln ¹ƒpu8£ƺ P: \fkú³Z•–)A73&ð’tíP¡"×|˜åUKP¡jr{SÿxkÁN´©#Pi öô³Šû{?֢ͦï5mÆXÔáI€ [q.–ýËà<Çk|𤍂£Qù…¢ÒèQªK°Û‰iÛ—X¹¾6úþ·c¸ìª>š€­ì˜KMÛ>Ü8€ê9wa-Øá´_¥ @×û&´‡¡OB¥D1U¡˰•`ÍߌiÓgÍ›/ï9£F—6 m—ñhbÓPù… XjQªK°çb;±ó¾eØJÝß³Ö¦^®ûõhâ2Pi ØÊO`9´Óæÿ¡T·Î}÷°gAß°Aé³`=î¾\ð=ö-ùPöœ‚“Ï¥T¹ßî)_ÍÕ¤I“X¶lùùùìÝ»—.]º0jÔ(æÍs}ôT@@·ß~;W^y%:t ((ˆÊÊJJKKÉËËã—_~aæÌ™õÖ5jS§N¥[·nøûûSPPÀš5køðÃ)**ºàÆüðÃ3dÈbcc G¯×STTÄÖ­[ùä“Oؾ}»SyNǶmÛ`Þ¼yLŸ>Ým»þþþlݺƒÁÀ«¯¾Êûï¿ïR¦GÜ~ûíôïߟÈÈHÊÊÊØºu+}ôÛ¶mó|b©²²’‡~˜U«VÈwÞÉË/¿ìµö~øa>Ì3Ï ?¿e~wu1]7î¸ãþò—¿¸”ÏÎÎfôèÑç=VOçY¥RqÍ5×pýõ×ÓµkWBBB¨­­¥¨¨ˆC‡±sçNæÏŸÏ‘#GÎ;–¦òóócüøñŒ5ŠŒŒ "##1›Í”””°ÿ~Ö®]Ëœ9så ûöí쯓»Œðû÷ïG¯×óÒK/ñÉ'Ÿ¸ìŽŽføðáôíÛ—´´4F¥RQ]]ÍÑ£G™;w.Ÿ}æúw¡¯>C=³B!„B!Dc]Ê i—À±ã…n³ èÓ?åæû48 5ÅžÙd6s$¯á/g½Y·±L&3z½žÐ°i¿!áa¡DGGRU]ÃÑ‚de: Ü¾YÊFc-f³N‹¿ŸŸ·‡Ül¾˜çöí{Öf‹Åâ¶Lfæ!†î‡V«¥mb<9‡÷åpKÍsdd8qqÑlÚ¼«ÕË?~¸È´M°_ëjjŒ—z­]OÎ o¿F— éO× {†ñï×þLî‘£µ'„B!„B!„BÏÜzýý²­v o—þ§Ñõºê»ñ¨Wh£MpÚ®CG€6€xmcÓÐĦl† ‰ëâÜfp ÚÎW¡ít%Æ•/aÞ³Ði¿åðG€²&©?¶Ýó]ÛMì €bªÂz|·sûþ¡Lùudçí~!¨üBP‡µE¥V·H€rsŽ@¥óÇoü+h; vÙ® õGÚ: F1VbÚö…seµ¿ÑÏ£Kã¼9¢úˆ[ÐuHÍwœ'8ÚsÁ÷ÿ5öçå¯Aí¯îËi;‚îÌ[¥j(­¹®µçª]»v¤¥¥qúôiGÖåË—·h€rXX_}õ)))NÛCCC ¥]»vh4·ÁU†W_}•‰':mONN&99™É“'s÷Ýw{=ðÖ“1ƒ=Ën÷îÎ׫¸¸8Æǘ1cxæ™gøæ›oûÌf3?ýô£Fbذan“,€=Ô`0°zõj—ýO<ñ÷Þ{¯Ó¶¨¨(®¾újFÅóÏ?ÏçŸÞ¸Ið‚“'O²xñb¦L™Âرc½ œ’’â˜ß™3g¶ÚÂô¾ê72Òž”¢¶¶–Õ«W3yòdRSSÉÎÎæª«®`ñâÅ<öØcDDDx¥Ï“'O4ª½¨¨(Žw¿DïÞ½þŸ˜˜ÈÍ7ßÌ5×\ÃÔ©SŸ¿ÕÜóùé§Ÿ&88Øe{RRS§NeüøñÜvÛmìÜ麿'.ÖëFsy2ϼóÎ; 6Ìe{@@mÛ¶eøðá”——» öõDÏž=yóÍ7iÛ¶­ÓvNG@@ TUU9({Ãüù󉋋s»/$$„ŒŒ ·™×}ùÚÜ1 !„B!„B4ÅE ìg0Å ~=è’–‚ÙlaÙêõnËöî‘@eU5œ<žøØ(‚‚©­5qôØ ~ݲ“¬ï¯ÒçN]ñáÃùõ®¾Ùuë`ÎzöÈ g÷ òó“™•Ó"ý¸“šÒ€œœ#Ž/ZsrŽpÙþ´KJD«ÕÖ‰%çG”𳙬m§²Q* QÅ m׳›em¢ý•5o ØœïÃéÞeN¶š¨ýé=,‡7 T—€V‡:8MlŠÉ»™==9^ÃUÏ8‚“ÍV`Ù³[å)TZª°DüǾjÛ> CïwÜš¬À¼ë;”Úr4mz`|*ÿpü¯}“ªY7¡T¶Èq\AwØŸWͪ¯ë/«?'^Î躾@‹òå\5 €5kÖ`³ÙÏ{ì1† ‚ŸŸF£Ñ«}>øàƒ¤¤¤`2™xíµ×øá‡(..F¯×O·nݨ¬¬t[÷‰'žpV-Z´ˆ9sæP^^NïÞ½yøá‡‰ˆˆàÃ?dܸqœ8qâ‚3Àþó, yyyTTT ÓéèÞ½;Ó§O§cÇŽ¼ð ¬ZµŠÒÒ³ Œÿý÷Œ5ŠèèhÒÓÓÝm^yå•äæærðàA§}Ó¦Mssþúë¯Ì˜1ƒ¼¼<:tèÀ“O>IïÞ½yî¹çضm[½¡-aÆ L™2…„„Ú´iñc®Ùè›jàÀ(ŠÂÊ•+=nïBï·.HØl6³|ùr&OžÌ¨Q£ÈÉÉáŠ+®`ÿþýäååa±X óJŸuï§t:]ƒÁØuÊõ½7nÜÈìÙ³ÉÏÏGQÌC=Dpp0¯¼ò ãÇw©ãóyùòå|ùå—Hß¾}yðÁ fÆŒŒ5Êm@os]l×Y³fñÅgyâ‰'¸ãŽ;š|ÜÍ™ç—^zÉœ¼hÑ"æÎËÉ“'1 ´k׎7ÞxÆýßžHKKcÖ¬YbµZY°`kÖ¬!//•JEdd$½zõrÉVíMÛ·ogþüùdeeQRR‚Ùl&$$„N:±cÇ—òÂghSÇ,„B!„BÑU€²ŸŸ¿>漪âÉÂÓ|³p%ÇÝ×i_­º{ç›·Ú:§t sJ¾_¿‘5ëêYr×KüIh 4=Ï“ºMñӆʹmOdD8®ÉÁœ6oÙéÈhÜ’RSí؇ç9¶:]LeeAA´o—ÀÁ&’w=óš+ŠB~û>}ÁÓyNéØž'Öèþüü hµö/|Ë+ .+¯$:*‚à ÀF·ßRóvfLûÇïÁ wûúÖÔY¶â‡FŽ7†§ç†·^£ŽÛÓ¯ýÇ(2sø~í†f·%„B!„B!„BÏ©QóläßЪ´¼Vü*§­§]÷鈿 Ĩy¨ðOl¯uÍæõ«ñg¯×­óåòQÙÙìcY¦L6áËø¹„¨C¸;ôOL?ýgÇþ(M4e6{ HoC_n ¹€éáOóÇS(µÚ@µ*-aê0—ùˆÕÚ³’=ö„=B…­‚,S&ß׬bQåj”—q¦ê:qUÀÕü¯üSþ[ú†Ó˜—V-b}ÛèTº×*C0A8GuÚN¤fÙsØ ³ê©Õ<êèT´í"M›gQ»î¿gû,̼o Áýšú×rØõ’%g¶â\ï˜ ZÚöƒ1ï_æ\æÐtݯEÓ~=0÷Ü dµu|7{¹#®¿¨Ë(mÞ¿Ó–ÿ9í³V¶h&áæ¯:¦óÙ Ùs1®þM¦Ó“ûaÌ €kÀ:$}ß?ÚëîYˆqÅ‹Ž}¶Â,¬y[¼õ T~!݃qåK^8Jg~à ðöç5« üõ†Ëk“ìÿZƒ­¬á²Þä빺újûµã‡~plËÌÌäĉÄÅÅ1tèP¯fØèÓ§ ,à£>rÚwâĉzÁ¸óNû5uîܹ<ù䓎}ûöíã×_eñâÅ„……ñÐCñÌ3Ïø|ÌuÎß:«W¯&''‡+V`0>|8 ,pì_»v-Š¢ R©9r¤K ¡F£qdË]µj•Ó¾ØØX~øaV®\É<àX¼¼¨¨ˆÛn»Õ«WËwÞÉã?ÞˆYðŽC‡9ž'$$Ô œ•åþ³cãÆL:Õi[rr2”•µÞØ›ý6åxë2([,6lØ@EE#GŽdÓ¦M„‡‡óÙgŸöf µµžýV¦îuR©TÄÄÄPPPÀ“O>IŸ>}ø÷¿ÿÍ–-[ûù8ÊüÖºuëX²d‰ãÿ»w零²’_|‘ŒŒ ÒÓÓÙ¿¿c¿·ÎçÝ»wóÓO?9þ¿eËÊËËùûßÿNrr2={öôj êÅvݰZ­NIš›ð ©óœ‘‘áš={6Ï=÷œS{{öìaÆŒ- üÒK/HMM wÜq›7ov)³nÝ:¯÷{®µk׺Íü½k—û¿ /„ÏЦŽY!„B!„¢)Ô¾@“(`µ9¯ÌÉðÁ}1èõ.Åãc£Ï7nÝŇ³æòÏ7?ä…Wßeæ§_“w&˜rÄeh×¶K}oJIiJ¥Âjµ:á¶tݦ¨1ùßìïØ±sŠ¢Ò±=7O™È-¸ŽŒôTT*U‹ô@›øX¬V+GòŽ:í;œ›؃rÃÏÏ@ll4W Äðs×~ÊÊ*¼:fO´ö<ëõgoâ7´*€Éd>SÇõýt®Ö˜g?`ÌàïïÇàA}ˆŽŽôZ›žžÞzú÷íá¸Æ­ß°É£¶„B!„B!„Bá¹ÉÁSèªïÆ/ÆŸY^µäüÎHÕwvdþ¨ì}·Æ-Q÷\ÅõžG¡õ$ó*íiX‡ ÇOåçØç¯ö씂ÔAŽ}Áê`àlð2€¿*À¥ý#æ\vÕîàˆ9“RK°:˜>~}y"üi¾ŒŸK]²KQ£{ÖåÊ?pÙoÅŠ‚÷2º§€Í9´:2CÿÛQé]ÓºÎöŒ¯Xj1ýú‘k›Õ>žf°•äa+·/­ KtÙoδó¨ Áh{;íÓÄf ÒÙÏkî/.u•jûk¯‰ïŠÊ?´Yã󶆎W—n?¯°ÔRû³ëyÕmúP©ÁfÁô‹k][ñaÌûì×mÚhP{=üÀ[5(f¨x—óžê3/É9oÑVáË¹Š‰‰¡gÏž˜Íf6lpb_¿~=p6Ó¦7гgÏ&ew4i‹ÅÂþó—ýäÛo¿`„ hµÞ›«æŽù|>ìüLJJrÚwúôi6m²ßó® (<×àÁƒ ·'ZX´h‘Ó¾‰'b00›Íüíos 4¬®®fÖ¬Y >Ü;ÓHg êka];%%%^iïBï÷Üe³ÙÌš5kèÖ­›#¹.›sÝo7¼qΖ––:²²Ö k4¦L™BŸ>}ÙØÏÝäHãÍ_¼x±ãy÷îÝöµäù<þ|Göø®]»6©îù\l×–ÔÐh×]O‚6‘ÿD¿ËÇ'aTÎ.úš¦Ï ÛœMµ­ÊKGÙ4Jm%o Då‚:¢=ºŒ±èºMBÛyþa‰TyX½sZ›€õôASu³ÚP‚ÐõœŒ¶ý`T!ñ¨ÂQÌÕØJòÁÃ*­Á¥ž5 Jå)TAÑh;Çšw6˜EÓÖ°l++ÀVzÔ¥®yÛ—hÛD™LàßaÞ9óÞÅØJZnañ:Í9^M¬ý¼²žÊF©.nRuÙ¢­§: Ërh=ºn“PéüÐÄtÂzbŸÛrÍeÚú¾ ÒAäL(¾,‰•k YÛ"Îdb.~,‡=§/çjĈ¨T*6mÚDU•óµcݺuLž<ÙQFQ¼·ÈÁ§Ÿ~Êe—]Fjj*kÖ¬á‹/¾`Þ¼yäææ6X¯woû{,33³Þ¬»ßÿ=S¦LÁßߟŒŒ ¯eslî˜ëóÇ?þ‘áÇ“@DDÕÕÕ9rÄ,èçççRoáÂ… 0€ŒŒ Ú¶mK~~¾cߨ±cÈÎÎfïÞ½Nõú÷ïÀöíÛ),,t;¦ƒADD„#è­¥Ù~“L¢>}úôq[Öb±¸lk©$ çãÍ~›r¼uÑuÈË—/gÒ¤IL˜0#GŽ™™é´?88˜“'Oz<Æüü|ÒÓÓIHH`Û¶môêÕË1–áÇóÏþ°gj…¦(—••QTTDdd$ÑÑÑNûZò|®®®¦°°¸¸8"""=ÞÆ¸Ø®-©¡yîÖ­ ¨¨¨ÕÆ4`ÀÇóyóæµZ¿žº?C…B!„B!šââÊ |FM‘¼£ÇY¸|-Ÿm_0!>–~½»9•óó;{3N«Õ¸´c2™Ù³?€ö-˜AY¯×“t¦ý샹­V×eå¬ýñÞûà¬[¿“ÙLtT7Ý8ž  @¯ö•ÜÁ¾2ä¡C®7qsEQü‰‰jR»›·ìdÁ¢U¾Qâ Í™g›ÍFm­ÉíÃdrý@í9Ût:ËþsÕíw×N}Zjžµµ€óûøRc³Ù(/¯dÏÞL>ÿâ[Š‹KÑëõ 6àü•ÁÓsÃ[¯Ñ†Ÿ7³pñj,+AAÜ4ea¡!µ)„B!„B!„Bˆæ¹-ä‚ÕÁ,­ZÌ!sN“êFkìÁ)å¶rŠ­M Vð¤ncœ²œ މPŸ ²¨¶ÙƒeCÔö{&ÅÄ…÷rÅÑ!,©ZtfßÙl‘5JÃÁµ6lì3íå•âðôééÄkã™tS¹º1Z<>ò”b,ÇzlÆÕ/S3ÿQÀèªïqÝyj6ž:Ð~¼JEóŽW™Làm_cz?šÄ^¨Câ@k@åަMwTúº{«nÏ›#‹².m”=óíÚvöûnÖÜ_ÝökÉý…š…O TFå‚~ÀÞù-7ÿÚN#Úò¦æo]à²R~¼É}ªí÷ã• ÷·¶sÚ­+ïM3¡äiPL ‰È@“PyÅžuÉU:Ð$Úª†o‰6š/çêŠ+®à‡~pÙ÷ÓO?aµZ‰ŠŠ"##Ãk}‚=øùOú………„……qß}÷±f;ùæÆŽ‹Fãú›À´X_`Õo÷ÅÄÄø|Ì))),_¾œÇœ~ýúѦMüüüˆˆˆ W¯^îƒ]—-[æ27nœc»^¯gôh{–swuuÇÞ¿rrrÜ>fΜé(ïÍì®çröþ}YYY½å***(//wyTW»~vֵ㭌ÌåÍ~›r¼ÁÁÁÀÙàåuëÖ9ÊÕeO†³¿É¨;Ç<•—gÿ-V]r]†ÞŠŠ RRRhÛ¶-‰‰‰@Ó”G†fÿs’ˆ@ËŸÏ555 ÞýMÑÅvÝhiõÍs]°uAAA«Ž§.ÓwYY§OŸnÕ¾=q1~† !„B!„B4ÅE |®¬œ\ò ì7vR“e×b97›²ëꃥeå{ç‹]w:&'9¾H:˜“Ûju½Áb±²qóæÎ[ŠÅb!Àߟý{z­}µZMR[û—àW\>ˆ'æôxèþ;_ÌvèжÞv^}}¦ãq Ó¾ÂfçNÉè´G’ð–œg£±Öñ^ n8¸<4Äþ>¨¨t¿J{kÎsyyå™1£×7íNqÝJÐ ­|«VŸ½ü) -©}0›-lßi_ µm¢wTðôÜðä5ú­Ì¬¾[°«ÕJ`€?7\7¶Þë¶B!„B!„B!Z΄ I\8ÍI;]¡g"Ÿø›“vò§°uÏfnú½Oê6†…³Ù mœ]x÷´õ€ã¸Ü ÓØƒ˜,Š…R[i£ûü¾z5™¦ô÷è¶Œs£Ûk –Ã?c=fϼ¦i?È{ ×erµ6çxUøUp Xj©]û:U^CÅ›ƒ¨|k8UÿûÃyŸÍ{Û[ ˆ@ÛîÌk¡5 I°ß“µäþ\o]ËÁ©üp<Æe;;7mºã?þeoû ut§fSCš¼ŠÅ¾À0êú¨êïµ®ßÞ;5®†’ÇìAÊêˆø/¨ÃÝ—µœ‰‹ÒÄ* õÆè«¹Òjµ d_>ûì³.Á~Û·owü¾døðá^ïõêÕ 6ŒÇœmÛ¶öìŽo½õK—.%==Ý¥NÝ=ûÆfsöfÖghþ˜ßyçâââ0¼ôÒK\vÙe¤¥¥Ñ£GÆÏñãõ/PVVæ Ÿ0a‚cûUW]EHHV«• ¸íÀjµb2™ÎûÐëõžLM“tìØÑñ¼¡coŠºÀÆÄÄD½›(áBì·.È».µ¶¶–±cÇ2fÌÞyçG¹ºfo(×e)® @=z4ÅÅżýöÛŒ9???¢¢¢¨©©irÀ©ÕjÿÍÉoŸÓÒç³·¯纘®-­¾y6€ýs©55õ3å\çÖ9÷7c­åbü B!„B!„h¬‹>@ÎÉ8¯Æxn ]}Ù8ënÎØ¬-—e75¥ÇŽŸ¤ªªáµ½Y×› Ž`ï>{¶é$/G$&Ä7:°±Cûú”ϵrõz*«ª fà€^ž ¯ÕµÄ<+ŠÂé¢bbc£ë-æøÂÿäÉó¯2ÙÒó|ì˜}µi•JåȲÝX&“ý†Ž_+¥ž›õ·®ü…®òÌ5M¯×y žŸž¼Fîä9ÊÂÅ«±Ùl„‡‡rݤ1h4¿‹)!„B!„B!„⢡W5?]‘Õ~!XBXC)M½\·1b5q.}Ž,ÑÁê`â´ñnëvÔ¥oÉâXÜ–©OžÅž‰0Ré´ý”ÕžÑ9^ã½{¯Þ¢TÚǦò÷Þë`«²Ï¹*´éÇ«‰íŒ:2ãÊ¿cÚö¶ò`5£˜ª°f¢˜Ü/ÀìèÿT–#¸XÛÅž™P›Ø4zs5–z2(;X͘÷-¡úË;©úp¦_?F1× Žì@Àï£ ªÿ^[Syr¼J™=‹^s‚¦ó©CξG”ª–Ë\Xû+”>XA›¯»Ï~lÞ]70ðÒbÃq᫹êׯ_£*‡ Öàþæ1™Íf¾ûî;&OžÌðáÃyûí·©®®&%%…Ù³g;²[Ö),´_Oê²·ºÓ¦ÍÙyGÖØú|ùå—tîÜ™Î;pÝuö¬ô«V­rÌ˹ê¶ÕªïqàÀÏ&¦ êã?ÎÑ£G½Òf]€žZ­æòË/÷J›r¿u”ë”òóóÉÊÊ¢¢¢Â±­.@Ù[ÁÓÙÙöß %&&Ò³gOY²d K–,AQFM»víP©Täää`³yç÷sòùÜËuã·“ÐÁê®î‚j[RÝgDhh¨#‹sc™L&Çù]÷~lmãg¨B!„B!Dcü."¿"#ì_8U×¶;qö‹¹Î)íÝÖ?”wêLž·iµGæßììíV·%kí«-{sÖä3Ç·w_¯½ù¡ÛÇ×sí«Y·‰Å`8ßµµ&Ö­ß@ß>= ñÍ—ŠÍÕó|äˆ}…Óöíë]½²sgûMn‹ÅÊÑ‚ó¯xÛÒó|ìx¡cñ~}{4éËóò {½ððÐzç16& €šãE \·Ð‚ÅbõÚ˜=97W}ƒ]ƒ+²¸Ø5xÅog´œ?>v»•JÅÔ©S=bj“Ì,XP;{¬74µÍgΜñºK—.MªÛáp0gÎÀ5jM"lFF6l¨3æÛo¿Åf³ijÏ>{Ñg¢Óé˜>}:>>>TWW3cÆ ¯mÛn·óÑGЩS'ž~úézŸ+P*½÷x[kÕ[3Àù”kfXöV‚rFF6›èèhÆŒCVV;v¸…Y°` …‚)S\Ÿc‡jhSr)^ÏârûÜø­šäûððpBCC›ÔŽ ±`Á‚ÚdßW_}•o¼‘ÐÐPüüüHKKcÚ´ih4uÿ½Ñ»wï®MÂ}衇èÙ³g£âwír=ã4|øðf ÐÑX—ãw¨B!„B!DcÔÿëÇ%Bümò­:’ÉñÙ”•—c·;ðõ1K¿žÝ¨¨¨dóŽ=ñ+×læÎ‰c ðó厉cùqÅZ ‹Š‰ aüèkQ)•TU™Ù°uW‹´?ñ×è3E5n„éæÄ6–R©dò¤›ÉÎ9Í‘#ÇÈË/Àl®F«Õ@î] `ï~i4ýu›9y§ë]ÏjµRPPDHHmÛÆ~$ó‚¶¿qÓÆŒBJr[¶îât~7šÝ,­qœ ‹ŠÙ¹k?iÝRЯ':­–½ûc±XˆŠ çÊ}ÐëuX­VÖ¬Ûܨm·äqÞ±s‰ íiE÷nˆŠ gç®ýäç€üý|iE›6Q|üé×µq§OŸáä©\b¢#xEoÔ5ÇŽÀl®&88~}»c2~­c¯×Úë …ƒ^ÅjA¥Ra2‰kKÏîñõuu@mÚ¼£Ámè´ZNG½Ë­V‡kys¯¦ž£óYüãJ&Ý5“‘áC¯bæ's°Zå‡t!„B!„B!„âRæÄÉ‹…ÿâƒðÿaPø |&Ë*—²¶j5§l§°;m˜”>tÐĨ t›}¹9±çJÖ¦’¦ëA©£?¥?ý W0Ñ÷´ -EŽ"f”¼çó^ñ;ôŠèM„:’wÃfðaÉ{Ú `¸‚Éþ®¤5U¿°§Ú³OùÅÿ£È^ÈÖê-䨲±:­©‚é§ïÏß›Q¢¤ÜQμò¹nq¹¶>+ý„»üþÌ ÃU|ñ)sJ¿ Ë–… %áêTŠ–HæQ`ºc6¶cë°ŸÚ‰£<6”¦Tíú¢ívàJ’µîúÖkµ:Js±l™…¶Ïݨ; Â8q&Öí_â(:J% ßp¨gí§ã(ÍAééJ°U뱟؂³ªTZ†@Ð\ÀìŒv –_£pºÞw‚Z‡Ó\ŠíØúzCŒ7¾ƒÓnÅvhöÜ}8+ A¥Fé‰¦Ë µ³Ûs½×çØ¬ýµUSõÓnx …Ö„~Ø3\¯£4ËÖÏÑö¾Mê(Z#ÖÝßá¬.CÙmß?ƒRÓ\Jõ†¼´·çWòwÞy‡ÃAll,111¼þúënëúé§X,-ZÄîÝ»9sæ †¨¨(n¹å–ÚÙCk’¿jdggóÑG1eÊn¸áŒF#_}õ¥¥¥¤¥¥ñ׿þµZMqq1o¿ýv“O]šÚæpêÔ)¢££™6mƒ 6PXXˆN§#((ƒÁpÞúçÌ™Ã<€¿¿?wÜqüq½ëçææòÎ;ï0uêTnºé&úöíË_|AFFùùùèt:bbbèÕ«Ï>ûlíL»Þ¢T*‰‰‰¡ººš€€zôèÁ¤I“èСO=õTmb{}|}}kŸE¨Kee¥[ÝgŸ}ưaÃèÓ§wÜqiii|ñÅb§Õjeþ÷K)--oÔv[â8×p:|;ÿGF_7„¸¸X"ÂC>ôÊ:× %//¿öý’WrÓŸFáïçË€~=ÐÏsÔÌuë·’u"Û+mmîµQC«Õð·¿ÜYçºv»+ן·ÍõÅ×X¸h©}ßœk£9ç¨!ÕÕ~Y½‘‘#ãëk¢w¯n¬[¿õ‚b…B!„B!„BÑzöYöò`þ_øwðK„ªBfÁ0ãõÊåIÆÍ‰­1Ø8„ÁÆ!å…ö¦æ?Àûeû,{y¥ð% z‚m*o„ºoû¨õ(Ïx&z*Q2À0£ÂÈM¾7×ÙžG1Ÿy„B»gèûÅÿe ã|n “¶3/„¼Tç6¼IÔehÚЄz×q–Ÿ¦jþ#8«Ë¼Zwõú÷QÑt‡*²ª‘ÿ¹°@§ó’g0\ÿ ¯kæ&²îø m¯ÛQh]‰bÖý‹Á^Ïl– %ʈN(4zÔíúÕ»M[Æjl‡–7¹Mš¹¿ö“Û©üâtWüuû~ Òº6[]ŽíÈ*4É#~ÁÚ3á®zÝ»(|ÃÐ$@0uÂ`÷¦™K©ún*Îòú ÷6G”¾ ÿUøÜeœ»N…À—A×´=\ÿZÚÅ>VýúõC¡P`³Ù8pà@ƒëîØ±ƒÄÄDú÷ï_ï:‡bùòå 2„¾}ûºÍ¶\TTä– ¬R©èÚµ+ƒAƒÕ»Í+V°xñbòW_}•ˆˆÆŽËðáÃ>|¸Ûò’’&OžL^^^ƒûÕÍi³Ãáàÿø3gÎÄÏÏýë_MjCqq1óæÍãÖ[o °°o¿mxà‡wÞyNÇ”)Sˆå‰'ž¨s½™3grì˜wŸ%2™LüòË/å•••<ýôÓ,X°à¼Ûضm[ƒË|ðA~øá‡Ú÷‡ƒÉ“'óæ›orõÕWÓ¹sg^z©îïÂÔÔTöîõÎ`Þª÷B÷W¥R¡Õº>‹Ï— ìí”Á•xœššŠÃáp»‹‹‹Yºt)#GŽÄét²oß>¯Õ ­{=7Ååú¹q®ÌÌL¾ÿþ{ÆŒC÷îÝÝ’›‹ŠŠ¼–  °iÓ&®¿þzyä T{—••±lÙ2ÆŽ‹J¥òÚÀ5víÚŤI“xýõ× gôèÑŒ=Úc½²²2åŸþ™¯¿þš›nº‰´´4>üðC¯¶­.—ãw¨B!„B!Dc]ò ÊEÅ%|=ÿG:´%:2œ?_Tjfs5yùL?ƶû0W{&'×X±z#ÇOdÓ·gWb£#ÐôTTTqäX+×n¢°…f'n‰Áà¹øBgýõFlSœ<•Ãdzæ’Ü1ž˜˜H‚‚üÑët8NÊ+*ÈÉ9ÍÞ}‡È<~Òku¶u%çŸ)Äfkx$ÌœÜ<ºtN"((ååçݾÓédãæ\7üjâÛ|ÞDèóùÓøëˆŽŠhtÜ×ßüÀñ¬S­rœkØíæÍ_BjJ"S;ŒF£¦¬¬‚c™'ؼe'¥eKN†–9Îç²X¬Ì›¿„¸ö±tJíHTd8F£‡ÃIYyÙ9yìߨ#ñµ¸¤”O?û†žÝ»Ð¡C[üQ«UTVV‘“Çö{9q2ÇkílîµQPPDNîiüýÐé´(•Jìv;Õ ……%œ<™Íž½‡(.)õZ›k4÷Úhê9:ŸýÒéÒ9‰61QôHëÌ–­»±Xêy@D!„B!„B!„—Œmæ­ŒÏÍ(Ÿ± 4\I¢&e,”9J9jÍ`³y*Tر{%ö­â×é­ïCœ&žpU¥³³š“ÖüRµ’/Ë>§ÌQÂí7å_“a=Âí~wÑE׃Â@Ž-‡e•?1«ôcªœž^;q2íÌ 0 $UÛ‰hu ¥ G9™Öc¬7¯ãÛ²¹9Šê¬ÓŽÿ>ϲʟ¸Ñç&:뺨 Âî´Sâ(á¤íûª÷²Á¼®‰g“£ôæÅO£j×Ux2 ¿*-Îê2g2°e¬ÁºwÎêÆ÷ž¿r;æ¥/`=´m×QEuqÍì´ã¬*ÁQ|{î>l™ž3ÛOî òÓ hÒ&¢jÓ¥o ½?NKNs Ί…™Ø274ØguÖ]óÐörÍJhÝ3¿•T}7uÂ`TQ@|@O IDATQšBPÁéÀQQˆ#ÿ0¶C˰ü œõÏ ÙÍÝ_GÁQªüTZ”¦œN;ÎrW_&e¤k÷luV5ÉÆ‡¢ºçcÀ•¼5aÂâââ¯7iiêÔ©<ðÀŒ1‚ÈÈHÌf3‡fÙ²e(ŠÚ¤2‡ÃÁ=÷ÜðaÃèÞ½;¡¡¡ãp88sæ `Ñ¢E,\¸°ÎÙdív;?ü0?ýô7ß|3]ºtÁ`0pêÔ)V¬XÁ‡~HA÷ž1ðF›·lÙÂðáùóÎ;éׯP^^Nqq1ùùùddd°zõêÛ1sæLn¾ùf”J%³fÍ:ï¹s:LŸ>… rë­·Ò·o_"##Ñét”––’‘‘ÁÆ)*ªû{¥):Äúõ뉋‹# µZMQQééé¬Y³†¯¿þšââb¯Õ÷[ÜsÏ=\}õÕÜpà tïÞàà`l6¹¹¹ìرƒùóç{-9¹5ê=wæÜó%(×,7Í®·Æž={˜8q"¿üò §Nr[öÅ_0räH233)/÷îwk\ÏÍq¹~nüÖc=Fff&cÆŒ!::³ÙLzz:K—.uûl÷†ôôt¦L™‚V«%,, »Ý^ûsýõ×®Ù–½mÓ¦M 2„ñãÇ3xð`’““ Äb±PRRBzz:ëÖ­C¥RyÌÎýä“O²yóf&L˜@ÇŽñññÁb±PTTÄñãÇÙ·okÖ¬ñZ[/ÇïP!„B!„BˆÆRüúÏÍsÏ=§Ø·oŸ"??_QVV¦ˆ‹‹Säçç+µZ­ª¢¢Bép84F£QcµZµ€^©TšœN§¯Óé \½zõ‚­[ÏÎrÙ³§ç¬¥¿gñññµ¯¯¹zÝÓ:QZZÎ}Ѩí4'V´œ[&ŽmVªøý’kC!„B!„B!„—‹9sæÔYþGëÛLš®7¢ò8öìÝT~9©µ›sQ)ƒÚaºûªæ?Œ-£á$)!„BˆÆêСK—.`Ê”),_¾¼•[$„B!„BñÇUWžï AƒÆ*Š"…BQæp8*³F£±TVVZ•J¥Õd29,‹=44ÔqôèQ§¯¯¯344Ô™ššê|î¹çZ|üt­ÝŒ? ¹„B!„B!„¸ôø+è¡ïI¼&¡µ›rIPÐSß‹öš¸‹{9RPµé‰2ø±¿B!Hß¾}‰oí¦!„B!„B!„¨‡ºµ þØnºmüó^òcǹãúû[¡E¢._-ž‰ÉÇÄo~ÂÑôÌÖnŽ—µÙï$ÚÇXç²1 WPRmi0>.)˜I÷å½×r*³¤%šØª>^z :}Ýž¼ÿßu¬^’q‘[t~!F&ÿ³mâ31ãÿ6°ò‡ôFogÈØDnœÔ ‡ÃÉœ¶³úÇÆïk—ÞQ\=*„ÔPüõTWÛ()4“{²”]›²ùeñªÍ¶Fo÷RÔ”{ajZ ×wh[ç²ÿlÞÅÒ¬lo6Q!„B!„Bˆ?¤ùQ‹ðQúðÿŠß䈵ñ¿•þÞ,Š^†V¡åµ¢W8f=zÑb/G>SƒJKõÊ×°üþ÷WˆÖÒ¥KÞ|óMŒF#?þ8+W®lí&Õéî»ïæé§Ÿö(OOOgøðá¼oìoûöí¹ÿþûéÚµ+QQQX,N:ÅÞ½{Y½z5?þøc£·)ÎoýúõhµZ^xáŽ9Rç:­u=_.÷QsxëB!„B!„Bü¾É ÊB\¦”JÑm"Q*eúHñǦT(ˆò1¢¼Ì¦R5Ûì”Z¬nÿœNgƒ1*µ’{ëO\R0/~4Šá7&Ë ²—_-ÝúFfjò6‚ÃLÜýPüõ˜üÏ~øèµ»êÃãÓ‡Ð窶…Q©•MZ"Ûø‘Ö/†»¦öÆ/°qÛ¼T5õ^¨ªë¾kùæ !„B!„B!„B\2¦NJll,!!!<þøã­Ýœ×ÜýMKKcáÂ…Œ?žøøxŒF#¤¦¦2aÂ|ðÁhµ¸PÍ=¿J¥’ØØX”ÊÆ=B÷G»„B!„B!„¢>—Å ÊJ…‚äŽè’’HlL&“›ÍÆ™‚b¦eý昫«ëÈÄëG4XÇ—ó³÷ Œà}±}÷õ"/XVûþž¿ÝÁø›G·b‹.½û÷à?o<^¯chßñTUVµv“„h½ÃCøwÿîèU*†Ï_J•ÍÞÚMº`ïî>È‚£YŠé50–Øh´*îø{/ºõ‹æƒÿ®§èLeK4€á7&“Jt;Ng—ñÚS«Z¬.s¥µöµB¡@«SµX]—’ÀŠsœP©•(-6_P|¿kÚ1ôúŽ ®SRXE~N¹GùÅ<¿ÞÒÔ{áƒ=‡ø`Ï!·²ù£¨×µh{…B!„B!„¸]kÆ‹!ÿ×à:Ÿy„•Ë\§±T¨ïû'F™ÆÒVÓ€S¶“¬ªü™ÏËfQé¨ðj}H %êø«Ð$ CÕ…1§­GQ¶ŒÕX·‰³Úó÷d!Z‚º „~ëz]0,;=×ñ™ ¾÷N(ü;To¬{[šd0Ž]/P†€Ó ö\°l†Šy`?Ùb»qÑ=šñãÇ“ššŠ¿¿?åååœ÷Ëå>jo݃B!„B!„Bˆß·Ë"Aù–G‘œçV¦Òj‰Ž #:2Œî]RøpÖ×”–ÕÝ­Ój.F3EX-V¬«Û{q~F“½$S Q£F¯úc$°l\™Ééœ2ÆÝÞ™WÄ¢P@—^Q\3&‘oþWÇÓ^2l|áѾ´ì€÷›[ûºm|ÿýߨ­ïR‘•QÄéœrÂ"}È>^©ã%õÈ·÷³ßÝÆÚeGÁ Aa&ÚÄ`0Öý÷ÐÅ<¿ÞÒZ÷‚B!„B!„$F¥ñâש0òzØÛt×õt+OÐ$’àŸÈu¦QÜ›7‰Óö¼‹Þ¶ßÃØé¨; r+Shը“Q…'£IMåœ?ã,Ïo¥ q–6 |ïq½®øªžädø=¦›s&AUhAéšD0ÞyׂÓr1ZÝrT*ï¼óC‡u+÷÷÷ÇßߟÔÔTn½õVúõëGAAAÛxýõ׉ˆˆÀ`0ð /\Œf7‰ÅbÁb±¸½oŠæìobb"ñññ¼ð Ì{¶/333“M›65©MÂ{šs~M&ƒá¢×{¹ðÖ=(„B!„B!„ø}»,”wï;DHp Ûwí'ëTUæjü}M¤uN¡Kj"~ |süTg¼N§àØñ“|þÍu®#‰±B!.GðÚS«hÓ>€±·w&¦} >ÛÓÚÍÍd©¶óì}‹¹jd‡ƒ•?Áns\p|L\@íëý;rùaξÚ÷Å…U=xÆ«í½Ƚ „B!„B!DË2)\*n3oåÑ3Së\§ÊéÝAÿøXmròÇ¥ñ]ù<œ8¹B?ˆ§­Žá…—˜’7 'N¯ÖýGb=ø#ÊÀX¬ûbÏÞƒÓ\ŠÒ' MêHÔIÃPúG¡øæ%Ï´vSÅœ2ÿ (ÁzÊÞ®{=ÿ‚ñF×kë>(ÿܵ¾B šT0M[Ö埜 p×]wÕ&'/_¾œY³f‘™™‰^¯'99™¡C‡¢ÑhêMN8pàcÆŒ¹XMnuÍÙßèèèÚ×?ÿü³·š$¼¨µ®ç?Ú}$„B!„B!„õ¹,”÷ì?Ìžý‡Ýº˜óNŸápÆqT*%©Iñ$'Äկ׹fš-¯¨Äl®náÖ !„-ïıbÞù×T*v»<„U…RZí&ßétb³^xÂok()2³àó¦%Øš|´µ¯ ò*¼Õ¤ ÒÚÇYî!„B!„B!Z†¯Ò€BGe޲¯/BÉ(W¢ÏÇ¥ñnñÙLÄoÊ¿âŒ=ŸWB_'M×Þú¾l2ohñ6ý^Ù.ÃvpœÓï8s[æz * ê„Á¨ã¯l½  †À—@ ŽR(úgÝ Æº+Î&'W-‚âçtUز j (L¥Õ-nܸq¬Y³†ûî»§óì}œ‘‘Á?ü€B¡h­æýîèõúÚ×UUÞ”C!„B!„B!„ø=¸,”J59~2‡Ô¤xÔ5 …­ó¥†AïJP®¬2·P Åó¯£s•²b3ù9ìß‘ËOó`®ªÿócÈØDFß’Jp¸‰ª +ΰäëìÝæyÔwœÞÿï:V/ɨ·žúbïÀÀá<ÊŸ¹ Göå7Û˜ó[Ó„ã¬T*4¢ý¯iOl| &_-V‹ƒ’Â*ò²Ë8y¬˜íëN²Gîy·UC’“…B!„B!„ð.Ÿ_”K%MŠo§‰ãÙàÓ[ß— e%Žb¶VoáÓÒI·xö]ôÑ÷E‰k0Ä9e³=–ÿRµ’|{>¡ªP†‡Ö™ |¯ÿýôÖ÷%TF€ÒBK‘£]Õ;ù²ì öT覆½Í‰U+ÔL𹙦QÄjÚ¢@A¦õ?V,BAÉ‚͉mºúOµŸÚ…:a0 µÎ5ý¬Ó˃R*ÕhÓ& N¹e`, ÀQ˜‰íÀ8Ïþêúß‹*¶ ßPz*-ÎÊ"ìÙ»°lÿ{önmï»Ð üÁQ’í±ŽªMŒ7}@åœ{°ŸÚé¶\¡1¢é>u‡A(cQhM8-8Í%8ŠOa?±ËæO›v<¼¼¿ç´MÒPÔ©£Q…'¡Ðûá´Uã¬,ÂQ˜‰#w/ÖýKpŸ¨3Zp5š.ãQE¤ Pëp”æb;ºË–ÏpVz}_ëðh»(~ ìžÝ,øÞëúßvJþƒ[rò¹œ-4¾ëÅ>V±±±¬]»¶Îçc€:Ëï¾ûnž~úiòôôt†Þ`cÆŒaܸq$%%À‰'X¶lßÿ=>ø Än·³xñbþóŸÿPYYé?qâDúôéCÇŽ‰ŒŒÄd2QUUÅñãÇùé§Ÿ˜5keeÞí+lÎþ&&&²dÉò={<~å•Wxÿý÷kßßwß}<úè£\uÕUœ8áyõéÓ‡Ù³]ßs&L`ëÖ­ ïL#éõzFÍСCIII!88«ÕJQQ`åʕ̙3§ÎØ¡C‡rË-·Ð¹sg §NbÅŠ̘1£ÞY¹'L˜@×®]INN&,, T*¹¹¹¬]»–?ü°ÎãPC­Vsçw2vìXÚ·oB¡àèÑ£,X° Þdû‹u~ׯ_Ïí·ßî•zÏÕÇùÁdÀ€„‡‡ˆV«¥  €mÛ¶ññdzcÇŽ n¿B!„B!„Bœë²HPnHÛ˜H²sN×Ûùb2× Ê­á¯ÜCbr<·ýù&Ö®ÜȾÝu'ùøøñÿ>y…¶qmÜÊ}ý|ðõó!&6 •JYoâlJçŽ<÷áV®Ñ¨1 DD…QYQåõDáÖ¨W¥Rñä 3täÕnå±íbˆ½+†‘×属«3Y¸¹ÇyʃwqÛŸor+ äÊ!tM^ñ=¾ûê‡fî¡wõØ‹äN‰ne¡á! 6«®½‚ÿ{þM}·´Þøác®q{ÈWqõмøôk,]´²Áú{/4Ç_º$aҸę4jýH ôãúmy|Ý6ÕýPMßÈP’ýÝÊB z®Ž‰äÊè^Ù¶—Å™'=âü´Þ¹ª/mý|ÜÊ}µ|µ¢}Œ(Š:X›ûÛ}O ôàÖ¤8Öf籿D}•BÁCi©Œþͽ FE„Ñ@„Ñ@ïð*¬¶z“Œ›B¥PðD¯.\åVëk"Ö·=×µ‹á‰uÛLnª{;uäÖ¤8·²@½ŽAÑ ŒŽàû˜Ÿ‘åç­st±%v åoÏ "$Âshø!&’»E°jѯÕyõ¨&ÿ³_½Ëõ5Ñmý‰nëÏœ¶{­Þæ 5òÔC‰lãçVnòÑbòÑãGç^‘¬øþ04 Ü¾cpíkM€Š´~1¤õ‹á¯ndù‚Ã-ÖþË… žG^L‡¤·r•A‰>Ú—ðh_ºôŠ"²_£”…B!„B!„Þ¨  Ð^w¢ÌùŒ4v{¬ a˜qCŒCy®`?V,r[ª  ÊYUgNœl1oâ:Ó(R´©uÖ9Àp)ÚNneaªp®5ããµü§ðy¾/ŸïÕX“ÒÄÛ¡ïÑY×Õ­BÜÞ½\ï‡Bï‡2  ¥²E”›²¿ ýè—Q·ïïQ®ð7 ô‚öýqšË±lÿÍ`JúáÏ¡Iá^ÔmÐíh:¥ê»©çIŽn>ß¿€a”ëué«P½±îõÔ@óë­R1 œÖm–»V:VåååøøøÐ¦M›ó¯ì%÷Þ{/ÉÉg?“âãã‰çþûïw[oâĉ„„„0eÊ·òÇ___·2RSSIMMåöÛogòäÉu&ˆ^nV­ZU› Ü¿¾úê+uz÷î ¸Î¥·“B»uëÆo¼áq}h4ŒF#ÑÑÑTTTx$(«T*^yåÆŽëVG\\úÓŸ˜ñÄç\Éô·Ür £GæÎ;ïd×.Ï>|||øä“OHKKs+¯¹6~oZë8ƒ+a¾K÷ï߈ˆFŽɈ#xòÉ'™;·þ „B!„B!„¢>—e‚²^§#",„~½º’šÕjcÉò5õ®o2°Ùì¨Õ*l6ûÅj*a¡nïÃ#CLʼsÊÍ´kƒÕbeÆÛ³Ø°v Å…%h´Â#Bé˜OeEU±Ûóú‡/b4pØ,]´’µ«6’}2…BI@ ?º&y=)´µê½÷Á;k““—/YÅÂy?RVZN§®)LúË­úóòÛÏq×%?ïŒ[lsŽó­“þT›œ¼}ónf¼ý)§NäЦm4÷?4‰NÝ’yðñ)ìݵŸôƒÞIT<–‘Å5½Æ0hp?ž}ù1F šHÕofwØë~Xàã÷¾Àf³‘}2—ò² Ô5É©‰Ü÷ÐÝ´m߆‡Ÿü kWn¤¤¸´Îx«ÕÆ÷s³úçõ”•–“Ô?ÿå6Â"Byâß‘‘žIÆácõîCcïoXu2—oÒ3)³Z1ªÕô‹ eBb{‚ô:^¾¢'^¶–sµGÜÇûÒ±9dWTRaµ¡V(H òç¾Î‰õõá¡´TÖfçQjqïå¾39ž¶~>X>Ú{˜¹ùW[Ð(•„õt ô§²ž™››{®0£Þí}¸ÑÐ`‚ò¤Ô„Úääý…Å|uøYe(0£çúvC§R·ÞÆšÜ)±69yʼnl=I™ÕJ§àîNI @§å¿z0iÙZòϹÆ3K˸ö»ŸÎ3}º0úûå˜íîŸïŽ:®¸¥c\mròŽüfì=Lvy%1¾&îëÜ‘NÁü½[ { Š9ò›{Á[çèbŠO å©7‡¢Ñ4|3Ó )->{œÍ•g¯m­NMÍàÔ‡«Åó{ÔfsÿÜÑh/ìš)/­&?·ü‚Ömi“þÑ×#9ù· ó+kg™n¬ÛþÖ‹íëOR˜vÀ”s³B¡@«»ð{íÜØsgC¶ÛجžßŽsfnîùm*•JÁ?þ뙜,„B!„B!„¸ô)ƒ°8«Ñ*tXœûmÔê´òmù7¬ªZA©£”Žšd¦ÜO¸*‚gƒþE†%tëÙAÍN×oÔ…ƒÂ@•Ó³Ÿ®Àîêï Q…z,ø°ä}lN§l')w”¡V¨IÑv
´Ó´ç±À'ù¥r%Ï~“¦Æ>ôlm‚ñ÷åóYT±rg5ÉLô½…DmÇzQsb½I¡óAš€6m"ê„Á8­fªyÃëõè‡>]›œlÝû=Ö}?à´”£ KBÛ}"ÊÐÄã-ë?‡ GÉ)œÕå T£ŠHA7èï(ƒÚ¡¿æ1l¿à¬:;@±#?gùi>a¨ÛöÆZG‚²:Æ•gÏÚ ÷ßȵ}ïq%'Û-T¯}Û±u8+‹@­Aé*< §¥eJoÊþè®}²69Ùzð'l{¿ÇQžB­Cƒáº@Yw„Ö&ÜZþ„u÷w8«KQEuE×ÿ^†@ ׿AŬ‰8ËN·È~oŸ»]¯+æ@Å×õ¯«í~öµ¹á±´½®µŽÕÏ?ÿÌ-·ÜÂÍ7ßÌæÍ›Y´hÑùƒ€Y³fÕÎÚ ðè£r÷Ýw7ªî×^{O>ù„¾}ûòá‡ðÙgŸñæ›orÕUW1}út† BBBéééñK–,áã?¦¤¤___®ºê*î¹çBCC™9s&£Fâôiï«æìozz:)))€k¦Û7Þp—Æ)5 IDAT}öèуª*÷ï&›Í½oøàÁƒäææÁ€LPÞ¸q#v»÷ž_JJJbÖ¬Y˜L&ìv; ,`ÅŠdee¡P(&--­Î¤èG}´6iváÂ…Ì™3‡ÒÒRºwï΃>HPP3fÌ`äÈ‘äæÖ=Àð?þÈ—_~IAA&“‰ž={òÀàëëËôéÓ:t¨ÇÄ/¾øbmròܹsùî»ï(++#%%…»îºË-1þ\ëüþöü4÷>j­ã ðæ›ob³ÙÈÊÊ¢¬¬ FC—.]øç?ÿI‡xþùçY¶lÅÅõ?["„B!„B!„u¹¬”õzÓþqŸ[YÞé3Ìý~)9yùõÆùÿ:Óå°Á6xfs59yùì=x„í»öc±¶ì0º+ZCbRJŠKÙ¶©îÑ*ktîæú!|颕|ùé<·eùygØ»Ës6àLûF“³¹šGî›Æ®í{=ÖÙ¼~[cwá¼Z£Þˆ¨0&Þ~‹ç/ã¿Ï¼^»,ýàQ¶oÙÅÇsÿ~þ¾LºÿV^~îM·ø¦çа`&Ý+«W¬gÚ?^Äáp%nóД§ørá B‚™pû ¼ðÔt¯ì¯ÓéÄRmpK²·X¬µåç³aͲµ«6rüØ >ŸÿZ–>zÔ;ò¬søäý³-é²eÃ>÷.¾~>LºÿVžzè…zëoì½à ‡‹KØsÎ ¼û ‹ÙšWÀëWö&P§åΔx^Û¾Ï#nc®çgʺìÓd•V0kØ@´*%}"BY–•í¶Nç×l˲²™ó›díü*3û êïÌiNì¹VžÌ!!À•dYj±²=¿þ™ ÂŒz&&º’u7äœæ©õÛ±ŸÓYu¤¤ ›ÃI#r&/H¸ÑÀ„D×HóK2OòÒÖ³£a).eÇéBf^;?­†»RâyeÛÙÏ'`ù5 ÿܶZŽÚòú„ôÜ’ÀšSy<³qGmsQµ…¬ÙÂî$Ä cBB;þ³Å}Dso£‹E©Tð×§¯pKNNߗϲï‘™^ˆ¹ÊŠÁ ¡M‡@¤ÔûÇùõ/¯'<Ú5óÞ­9¼ôÈòF·eï¶Ž, ¬´Kµ½AMX”/6ëÅ4¤>­Šn}£kßؙnjÿÛÀ™¼rÔj%áÑ~¤¤…còÕw[+HgÙw‡p:aÜésU[´:}®jË’¹g¿_Î=ÎmãƒøïÿF]p›ÏýtÅ­µçyݲc¼ÿ⺠ŽõÆù½PW ë@|ÊÙääG‹ùßk9y¬­NÍóï $Üs¦o!„B!„B!ÄÅ®ŽàoSù[ÀTÊe¶âçªe,,_Pgñ¹þW:ƒJ>¨}ØrˆMæ |ù ~J?&ûßÏ?ÏÛ_yØrˆÅ YÓf…ÆcÛ͉õ…Ο¿¹÷ :ΡjÉ38N®'ªi”¡ ¨;^ €eË,ªW¿u¶ÎÓ‡±î_„ïßׂªþýµóüíÛ–±Ga&¦»¿µu»þX,q_çè:4]®GÕ®Ÿ+1÷Ü$d¥ edg×zÇ=§é­™QÚzàG,[?s[f/;Ý¢3 7e•aÏ&Íîúóò—Ü7wF<xvþ)ý"Ñö¼Í»÷{Ì?ý«v™ãôaìY[1Ý1…Þ]¿{1/­¿_¸©ôƒÀäꊧj”¾ÖðúêX×ÿöp”4¼®7µæ±zõÕWéÝ»7ñññ¼õÖ[Œ3†3f°uëÖãìv»[²eScO:EEE+V¬ ##ƒ:°~ýzŠŠŠøî»ï¸çž{HJJ"--­Îå½{÷²mÛÙçFvìØÁºuëøüóÏ æ`Ú´inW]š³¿N§“êj× ç& [,–Úò†¬ZµŠ‰'2pà@T*•[Ý*•ŠnÝ\p¯YSÿD Mñ /`2™¨ªªâî»ïfËÏçCV¯^íQͤI“øæ›oxì±Çj—íß¿Ÿ7òÃ?Àßÿþwž|òÉ:ëß³gk×®­}¿uëVJKKù÷¿ÿM\\ݺusKŽNJJbäȑ̘1ƒ—^:ûyµÿ~¾ûî;öíÛ‡Fãù½ÐZç·9õ¶Öq®±jÕ*²åË—“‘‘ÁO?ý„N§ãÊ+¯dÁ‚¼OB!„B!„B lí4Šì÷ä³°Ð`®ìßV[oØ™‚"²Næp¦ ›ÍŽ^¯£}ÛF»ŠРmöç3¿æé‡ÿû¯ÍdòÍSë¶Fq‘«ç,¥KGüžÉñ\ñãèÔÕ5zè'ïÏ®3I¸%´V½CGF©Rb³Ùøß{Ÿ{,?~ô?-\Àë®B­vÏÇoêq¾väÕhuZ¬V¯½ønmrr s•™y_. Ï=µO­åÄñSäåºF"ŽjYïz¶:f†ÍÏ;Ãü¯\b ¸ªz}ýÉ{½ZÊ®3…,>v€¡±Ñ¨•Š Ž=Q^A^¥kÿ¨_gg?Wñ¯ÉâÉAøi÷ÀHsbÏõÅÁ£<³aïï9Ƚ+ÖQÒ@{Íþ;œN^ݾÏ-á·% m…R¡Àæpòñþ#Ë—•óÓñS ‰jÔ9jȵ±QhUJ¬¯ïØç1òÙfçÛŒLzGxξà­st±¤õ©M<Ø´ò8ÏýõGÖ.=ÊÉcŜɭàıbÖ/?Æ–ÕY-Ú–ÏÞÚ—lç‡/÷±ôÛƒ|ÿÅ^>zeŸ¼±¹Eë½P*µå9×™¹ÊJ~N6«s•ãG Y2÷ßüoçy·udÿ2Ó 9~¤_^ýœÄù¸¤àiÿåbÐðµ¯NxýéUÚ}šŠ2 Eg*±{i¦f!„B!„B!Dó·f²»z'Ç­™XœÕø*}é¡ïÉ£Oðeä7´×Ä5osz}ڞǼr×t¨ƒŒW¢WœM4ÞfÞB–Íõ[õ#1Ú4ŽPU(Z…–pUƒCd¸€ GE£ö%Ëvœ\›k&ÂuŒ×b‡š†®Y¦?*ýÐ#ÖŽ'u÷½4'Ö{œàpïÿSÇ¡ë} ­g?Xsh:u½°UcÙø‘ç »«=Mà(ÊÂQê:GŠÏók=´ÌµLç‹*¦»Û2Ux {æXg¥kpZUd'ÿ&µÏÛÚ_M²ëºÂVMõzÏëª!êä P‚Æeƒg¬£ðÖý®~auÒpPz<|Ó퀜V({—ó^Ê_OI“¢·¨Ö_ëJnªäääÚ™ˆß~ûí:““ë3nÜ8T*6›7ß|Ócù‘#GøöÛo3fL£ÎÑüùókŸ©éÔ©“Û²Q£\7WWWóöÛo{ÄÚíö:g¾\µÖq>ŸcÇŽ‘í˜?66¶Q±B!„B!„B—Ù ÊæêjžùïÛ zBƒéÖ)‰ži蜒HP ?~:[£S~öõÂÚ×J…‚¨È0ºwI¡W÷Îøs×ı¼ñÁgXëH¾ô–_–7<“á¹æ~¾€Þý{оC[f/œÁ‚¯³xÁ2Nþf¦ÖßJëÙ¹öõ’ËšÜÖÆj­z;us%EMÏ$/§î´×ý²‰Q7 C¯×‘ǽgGúnêqîÖÃõcþþÝ)È/¬sÌ ×Ãþú×&C·6“‰ë'ޤï=‰ˆ # (€ªÊ*Nfeãçïê$ÔéêOö¯ÏU*ñãœå»1÷BKZ“Çè¸6Ô*:øûqè7çȤQs}‡¶ô‰%ܨ'@§¥ÊfçTyembª®ŽÎÝoÒ3éB{?¾~%ßÍbIæ)N–ŸÿA™æÄþÖ/§r/h½š•_ent=MÕ)ØUïÑ’2ò*ëžaaCN>£Ú·A¯RïïÇA/ÜG]Ýßý…Řëý8³´€–¶6)¼{Ž.†Ô´·÷_ÏÜÓñûéÄý­W?GdlÝ<ħ„0{õneo?¿š +20WZ9~¤ˆ¶ñ®k$­_ Ó?ÇÊÒÙ¸ò8§³ËšÔ¦ª +§O•×¶+ Ø»tµ†æçÉggO>°3—Ü“­3P…B!„B!„âüÎÿ{ík%J’´ÉŒöÇ >ã‰VÇðfè»Ü”3³³qý ;«]³ú©P‘ íÈžê]8p0íÌã¼ö~Jž ~¾Þm”9êþmÑGéÃ>èo¸‚HU$ª *•œ´fáÿk&£NQ÷ìËM‰MÒ¦nM§²‘IÓ͉õgu9e¯÷E¡÷CÔMÊuh:CÝq(†€*¿¼ìõ„ÛÊpWß®ýÌœ–Ê&mC¡óAÓíO¨ÛõGá‰ÒˆÓZ‰£èDmò°Bí9˜²ýÄVœåù(|BQw¸{ÖÙÄ=UW²£äŽâ“±Öí_¢n×ep¦IßaÝõ Ö}?à(jÙ_¡iû« w]Wöütœ•u÷e×§f¶h{þ‘Úèß²]ƒ¦ó8=ª°Dì¹û»[ ²lmOPh ø(ü ØŽ_@`Ý_êöôëLÌ…ƒíXóÛÙÚǪ²²’iÓ¦ñÁpçw2~üx:uêÄk¯½Æ”)SøûßÿΑ#žƒD·…¢ùM/[¶Œ›o¾£ÑHrr2{öìñBËZÏÆÉËË#<<œk¯½– Î~P“°œ••EV–÷>GúôéSûzÞ¼yŠíÞÝõ9xèСÚDÕßúù矙0aƒ””vï¾°Ùã+++9}ú4¹OQ“H{ðàA**.Íþvoj­ã\Ã××—Ûn»+¯¼’èèh‚‚‚¨¬¬äøñãºúÈõúºÿFB!„B!„Bˆ†\V Ê5ªªÌdÌ!ëdÓqçıDG†Ó«{g6lixfC‡ÓÉÉìy{wàëÏçóËòu³ö„„¹F¦-+-§°àâ ÜZõ‡º~T¯/9ÙµìôÙõ3SvSsM½]{tbÍîÅçm§Ÿ¿ï%‘ Ü®C,¯½ÿ¡á!nå:–€À³£}7¥1ÿtAí뀠KcäðóÉ©8ûàCˆAÇ¡¢³ËÚùù0}`/B î/:•Š€s¸ë:T›óÎ0mÃîžJ°^ÇmI¸-©{ Š˜›žÉêSy³öz#¶©‚ñ:§¢î$á–RSo^Uýõæž“¸lÐAQ½«6¢^×9íÄ/7Ž8ïú¾Z[‚rkœ£æ7Õ¾¶ZíäžlZ’íÅ[ÏýÂ3o Ã?È5SBx´/§tgâ”îÚ}š…_îeû:χ“Χ²òì5¤Õ]œQë/EF“ÖmÿsOHr²B!„B!„— ö[ö±¿p[Ì›x9äU"Õ‘Œó¹9e³µ­|ÛÙþ» ¥{ÿÝ~Ë>nι‘;ý¡?áªp¬N+¹ö\6™7p­q8¡ªPŽZ3<¶Û^Ç;aï¦ w+×)têkß×ÕÖÔØšöŸ¶å5´ËujN¬·9ͥسwcÏÞ-c5†ÞBž‚¶ë X¶ÏñJJ“keMÛ_epÆñï ð s+W¨u¨ ç–x;X-CÛã4IC©^õ8]ýÀê¶®¤>{æÆ:ëµen êûGÑy…)mŸIhûLž½Ë¶ÙØÒ®Ý–75uk—¥9®Sarõ#;ËêÙqÎvkÖ÷¦²@9žÿÿìÝwteúÀñïÜ^Ò{HB BéR”bÁ6dWì?±¢®ëª«k]l »*ë*ö²Ò) Ò{oIHHï·ßß$—Ü„Ü䆀<Ÿs8çfæ}ç-3sÃÉÌó> Ž‚ðÙ;œÞË»+×FR÷1-¨ã«?ûù0Wééé<ÿüó¼úê«Lž<™{ï½—Ž;òÙgŸ1f̲³[þû¥!ÒÓ«Ÿ¿EGGŸ÷Ê.—‹yóæ1eÊ®¸â žþyœ'“- 8€U«VùµÍèèÊß_EEEäææúT722 Î ÙÓ÷EEEÕYÎ›Š“ïèõž *DDTÞYY [|ý|×Ró ””ÄÇLLŒççƒÁ# Ù !„B!„B!.<çe€rM{æhÆqâb騯§ ã»÷“™•C«˜H’Úµ>g”V-ÿ•ßVýΰQƒíåtéžRõïÈÁc<=ý%öï9èYéä߉Ýg;8®…ÚUN6ÜÐv½•kÌ<+Š —ÓUõ©>ZŸžr6¢(üýÕ'ˆŒŽÀjµ1ûÍøyéjòs Ðéu´ŠåÅ>ETLd£ŽïpTg?_²³jUªªÏJ÷ ðLßD XNÞß¾—•Ùä[¬èÔ*Z™Mü£ÿED™ê^9vUf6¿eå0´u,ã[Ó%<´êß‘âRžým3û‹¼Š6¥ncœ»®Æ|4TÍ[Ê×UU¥x¹øëëEu²a—Û³õ6/gûù‹Ãæ:oîÏÆ*/·Q^V ¬V«Ð*ÿ«ãr¹±TØ=Ê;ìž/ ?ZÌãS~dÜ]|yFsõ÷wÇ´(:¦ eãštf<¹§£á/Õ|/éðP·±ó¬œv;Ùlgþ*„B!„B!„8÷,+_ÂÛn:ê:ÑÛÐ×çeÕÏ•\Ôþ[k¶3‹— ^¨µpi˜:Œo`ëɬ˧((¼ñQêh¬n+oþ“åKÉsæ¢StÄkZóZä›D«=sšZ÷;ö:÷ISê6Ç¡583·¢n•†ºm?ðS€rÕÃgcÆ«`ûbe°®ÃŠõ—·qì_†«,E­C ‰Çtåë(ÑuÁ¾ãGtMB1…¡iÓÇá5 Ñ£ŽëPùsû¦ôдG ívMåÜ´JÃØ* WÞ!*æýWÎÞFŒËÿãu;¬•T¾/˜Zýü®eŸ'Y–@A)„¾ª0û'äý\^3vœ \VÇ€bwã’sûì\™«S¬V+³fÍâ÷ßgΜ9„……qçwòÌ3ug¢?—hµ-ÿN…¿}óÍ7L™2…ˆˆ ÀÊ•+1 ôêÕ €ŸþÙ¯ízÙ˜÷v|­ëku•?µÝn?·~6—–šgEQxûí·‰‰‰Áb±ðꫯ²páBrrrÐëõ$$$0{ölbcc}jO!„B!„B!N9‹K!Ì&£Ïuóò hI€Ù|æÂg™Ýîà§ÿ-å§ÿ-%¦U4c®Áõ7_E›ÄÖüó_/rËUw‘›S¹6?·ò‰\`PÁ!AžÌ„þl×—?°çæäÑ¡S"1qu?hŽŽ­^Q4?Ï{úU_çùT»Ë­ä™é/7¸¿þT3Ȱ!±n:µ§mû^úÛ,ž¿¢jŸÝî`ß5þimtÌ™çù\Q#;r¾ÅZõ¹CHmƒxyÃv–­^¡Öîr±¯°˜²Ùu±»\,<’ÁÂ#Ę\Ñ6žë:´£MPo îÃäÅ¿[aõ{]_å[­@`½×u±»\¸ÜnTŠ‚YëÛ¯“\‹•$ Æ\÷÷vLïôšç¨¦šÙН9¼·»<ý8Ïþ¶åŒåër6ÏQSäUg¡6šµÄÄ‘•îûw´ÇwóYŒ¯uP­RÕßø_§zfµïÖ'Žé¯ ààî<žºóÌYï ó+˜3s=Ÿ½·‘®½cé3¤-½'TàöìÏèkSøñ³¾ ¥AœNÏñÎ4^ñõü6vž+Êì8.ÔêÊHåÐSã:,„B!„B!„hqGGè¨ëD¸:Üçº5}óœ Ïò8!àzT¨pádEÅR}uHÔ&ð\þÓüTVýwJ»ÛÎÛnÊ\eà%f³)usœ'H¦#±êV ‡?ê67wie–kÅXOZZ¹ÊrQÑ%Ø÷ñª£;¢ ¯¾wiŽÏcó¦)ãueBL*ªÈdŸÛmÈ9RU°¹Ë|ËÒê ë¯Pø„¾š{ò¦‚û´8Fû©D»*0 €ŠÅÍÖ%çÒ\Õ´aþýö[&NœHß¾}ë-{êùPc×Ý´ieeeõfƒm¨SÙòòòê,×”Eó›:^_íÚµ‹M›6Ñ£G®¾újV®\IïÞ½Ñét”——û=ƒrNNå÷Opp0¡¡¡4ü½'Nйsgâââê,ÓªUõµ~ª­¦jH» ÕØóërU?Ÿm̵áK»-5Ï;w&)) €Çœ~ø¡jŸÝngçΔ––6èXg=a†B!„B!„â¼à{ÊÌsPxX(åŸë`±6o Ù aý™xë5Ä´ª;˜¶>Y™Ù|ðÖ˜:éAŒ?Ü£ÌÖ;Ê?|;¬É}n(¶kµVfd4Ïl¾mSe»í;´%¦U”×2‡T>t³TXØ·û ×255džOµÛ«oôzÝÙ,–êkÝpæàú°ðê—öžyÛúî]Ù¯ÌsSïé2xÝévs°F¶ÛPƒ¾êó~?ùg•Uð¯û¸sÙ.7:-£ÚÄ7kÝK⢹!¹]½À»ò H jTrÞÉÀá¶>ÕÛvraƒÄà@¢ëX\bÀÉûÚâp²¿Èû¹°ÔèlHô©v/ŠŠ@¯ö}åxošr~›Ûž­Ù?_÷çî ZÔàtVKu¦ÛðȳTZQ#K/@D´o×™¯”Áv»“«Óy÷ùUB!„B!„Bœ]1'ƒŒK\%g(YÛ%ÆAT¸+ØkßÓ :íµIÜ4€%å‹9î8î±?¬F ôÛnŸúÓ”º[¬›è¬O%RíýyesÔmnªÐÊ…ÝEg(ÙpΌʅcÕÑQ|¯b «>ΉÆg*¶oþ m‡¡•™”; Àqàp4ü}Wq&ÖÕïRþß[Áå@1¡MÛè~®)ãuù UH<š¤!>Õ­:GIÁµ5iÚÀm¯hÒ¹hËÏPüÏÊÏÚ.xwí2¶íà<ùu`¾…³ö̹6W5W>W ¨ÿ¹ZEEEƒÊÕå…^à¶ÛncÅŠª_ÓСCp:ìÞ]÷÷°õä{=&“ïϳš:ÞÆøä“O5jŒ1€¥K—z¼óá¿ÿþ;PùÞÎUW]åSÝ 6ЩS§:ƒg‡¯|o¦¼¼œ;w6¡§µÛMKKóRoŒÆžßSõ}6ëK»-5ÏUŸ›z̦܃B!„B!„Bˆ?®ó>@9%9‘ØèÊ?¦:’îSÝ6ñ­hݪòáù‘cM_Õµ.“n›Àó3žäî‡þÄŸ½IpHP½å5šºƒì8BñÉ`ÊPÏãìÞ±·*8ôö{o&­Gj{Þ0þl7÷Dåj¸Q1‘DÅDÖ[vѼe8NÔj5SÖþvíÛ0rìГe—ã8-ëmcçù§ÿ-ÅápÌ´ÇïBí§ G_dgU¯”Ú»Ï3–ÏÏ+¬úœ’êûjÙõIMëĸkF°ðÇeµæ¹&_ïÐ(µ¿æbÌFF´©\yvMæ ,Îê༂™z;…ûÞ^=O—Rb« ¸ öÜÞ”º5Mì˜ÈsýzrWZ'fíON[gÙeÇ*ŸØ«…[S’jíW)J½­§œÇÇ`Ð4ü^X|4§ÛZQ˜’Ú¡ÖþvAŒHˆ«*ëpy_‰÷DyõË£#¼–©iá‘ .7!z÷wïŒÚÇh]£³å÷_ŽQX#‹rß¡myòÍ‘ôÖ–V Á„EšˆmDJ÷hÆÜŠZãý¿yÙeUŸãÚ†påÍ]‰M"26€¤ÔH®ŸÚƒv}Ï’q&y9åX*ª¿S†_™L·¾qDD›éÉ wôô[^µFÅÛ_OàÏô£GÿxB#Lhµj F ¡‘&Žê`øæÊl\”_Ay ì¡c;ЭO‘1tJ‹b¢Ç[ÓÙ<¿›×fT}6™uLûûÚ%‡@Ÿ!mÖ×S[!„B!„Bq.è¦ïNª¾+PdÛP]õi\p Êæáp×ý\锾†~¼ýÅ@¾3¯Ô*“ï¬Î¸™ªëâSŸšRwAù<œ8Q£æ±°¿ ö–f¹ê6'MÒàªì»Îô ~;®c×|p9A¥Æ0ü1P5|¼îòüªÏê˜Îîƒ}ï’Êc©µh»M¨ àuì©'í®ªîgÊ®¼ƒ¸-•Á þÌ6Ý”ñÚw-¨ÊÖký Ú.ãPÌá(ú@Ô±]Ñ_ú¨¼?;¬yŽtý卑_žˆ¶óå'Ë.×™ïߦ*û´2PÀ|#èûœVÀUY@Û ‚€zSiûIKÎU}:ŽAƒ*HO¯ÿý™S™£££‰f…ˆ³ IDATŒ¬ÿÝ Ñjk_{ñññUµK—.õ=]VV±±±ÄÆz ¯KKŒwþüùäåå¡Õj™4i—]vóæÍó{[[·n­ >}àèÕ«Wƒë~÷ÝwUïÞL›6­Öþ:T£ï¿ÿ¾ÞwB|Q³ÝgŸ}¶IïÞ4öüÖÌ~É%—4k»-5Ϲ¹ÕÜÓÒÒšt¬¦ÜƒB!„B!„Bˆ?®3§›la pïí7²gÿaŽˤ¤´§ÓE`€™¤Äúõê@YY9ë6m«Uÿ†«.§¬¼œƒGÒ)(,Æét`6Ñ¡}úõꎢ(X¬VÖm¬]×_†\õ984ˆ‹útcÙÂ_ê,ÿÚ{ÏápØYúÓJvoßK~^!†˜VQŒ»v4aá•£wnó\e×ívóʳ3™ùáKŒfþû%–-ZÉšŸ×q<#§Ó‰Él"1© !aÁ¼?sŽ_ÆçÏv·m®|`¢R)<ùüC|4ë3\.q­c‰‹æƒ·þSU6ûxs?þ†§\ËèqÃ1šŒü﫟(-)¥K·n™z†â¢>zïÓZm5vžs²sùxö\þt÷MŒ¹z$=.Nã»/æqäP:ù¹ùèô:b[EÓí¢.¼þü;8k¿úËÑCÇ(È/$4,„»¦MA­Vs`ï!E¡mb­ÛÅñîëÿ®*¿Ï²2OÓ*Šÿ›~zƒžë¶PTXŒV«%$,ƒñÌÙs;¦v ÛE]()*!08¾{1áÆñhuZ ŠøÐË<×äë½à7§´'Ì guf6¥vBƒ¸5% “FƒÃåæÃû<Êï/*!«¼‚“‘ûº§ ×¨Ùx""« ZEˆN‡±žc¯^r1v—›eÇŽ³;¿ˆ«J!Údd\bBU†æÝù…~­[Ó°ÖÕ‚‚õ:.ŠŠ`yúq¯e—²øh&—%´bL»ÖhµÌ;œN©ÍNbp W¶OÀTO0ÿ‚Ã Š‹!Ü gÆ Þüg׎—•£S«‰2PÕœ]^Áç{1©c"£ÚÄaÔ¨ùñà1JíRÃC¸%% J¡Øfç£]ûëlÿhIV¡zwvíˆZ¥p °E¶A´0óÞ¶êì 9æìÚÏ”Ô\Ñ.žî‘a|ð(GKJÉ·ØÐ©TĘt‹cƦ8ÝžÑþ:Gg‹ÝædÖKkxôÅ¡UÙSºG“ÒÝû Ô[Öerì`A­í;7eÑs@uÖàënïÁu·÷ð(“›UÆ¡=y§Wm·Ë͆UGpY"A!¦¿<̣̮ÍÙä–{«î“ø¶Á„„:¶CÇÖš¯iÛïͳ¨‰Û V¥sÉÈ“ã 50ýÏñîôÓx=ŽyÏï¢o÷0rBJUæäî}ãèÞ×û áB!„B!„Bˆ–óˆ—)pæó»u=Ç™ØÝvÂÔáô3ôçúÀ‰¨PQê*åëÒ/ëçN#×™[«Þ^ÛŽ;Ž«‰åÁÐG1(Ö[×Qè,D§h Q‡aPŒ^ûÙ”ºYŽãü§ø#&ý‰AÆ!|ó1s‹ÿËQÇQÔ¨ˆÖÄ V¼?WjJݦQ0ßò)ŽC«qflÆUš.*sê¶}Ñu¿¨ ’µoùÆo­ºŠ³°­Ÿƒ®ÏmhÚÂtÿ°oü WÁ1P©P£¡Žñ:OìÅU|UPle€­Æ€óØzÜ… Ö¡CA{æg8mØ6}~Àè{ß =nK1ŽCkê¬bšðn§ÇžÅ8³và.˵UP,Ú´««²;³¶7j^¼v³)ãuX©øñ ŒWÿEgÆ0ò©·ë*ÎÂöû'èzߊ6u ŠÎ„}ë·¸­%¨cÓÐõý¨4¸-ÅX×~à§ÑžYÑ3 ûTüäLwÖ²/À0t=À|h;TnsÜ ëíÿ>µÔ\i4–-[ÆæÍ›Y´h;w¨³ÙLRR·Ýv)))|óMý÷ïúõëÊŒ»ï¼ó3gÎÄjµÒ®];âããyõÕWýÖïSî¹ç"""Xºt)ÅÅŤ¦¦rï½÷b6›q8¼ùæ›õÖ߸q#*•ŠW_}•·Þz —ËEBBñññ̘1£Îº-1^›ÍÆœ9sxà¸óÎ;ÑëõòóÏ?û½-·ÛÍ“O>ɧŸ~ŠÉdâÓO?eþüù,[¶ŒcÇŽU¾+@rr2aaa¼þúëUu333ùàƒ¸ãŽ;¸úê«1™L|þùçÓ£Gî¹ç4 ………Ìœ9Óo}ÎÌÌdöìÙÜu×] >œ/¾ø‚>úˆÃ‡£V«‰mpÐrcÏïÁƒÉËË#<<œéÓ§£V«Ù³§òý‚:˜˜È‹/¾è—v[jžwíÚEFFqqqüõ¯Åh4²víZòóóÑëõ„……a4zÿÎéšr !„B!„B!þ¸Îù刈0b¢"ˆ‰ª;3fqI)Ÿ|ù#–™O¡2ógǤ¶ètZúöêæµny……ϾžGi™ƒ}jÊÉÎ%¹SûªŸOdÕ~h~ŠJ¥¢sZG =½û_Tg¹Õ?ÿÆòE+kmßµ}ÜýO½ðQá =„ᣇÔ*WVZV(l4Q«}O¦]Qn© ¾mL»ÞÜw˜U+~eà¾ô¸8W¯ÞYTPì  ðþÌ9DFG0âŠK2|C†ðØ_R\Êôûž&ç„gPUSçùãYŸ¡Óé¸qʵĵŽåž‡þìµþÜ¿áØ‘Êl‘þ˜çS\.7ïϜãû?‚Cƒxä©û<ö{(»\nž{âU^~ûÍ<ôä=>÷ð:ÇùyL¿÷iòrò½ÔªæË½à/Z•Š+Û'peûíN·›ßÊ“™²Oq¹Ý<¿n / ìE€V˃>dW) )a!ÔjzדÍwÍñ,OÏò[ÝÓåTXèP#;õ‰zV™x}ãbÌFº†‡2$>†!ñ1õ–?½?ó¥sE»x:‡…ð€ºï§Ó}°}/‘F—%´bp\ ƒã<Û-±Ùy|õr+,uÃåvóÁö½ÝPÓp†š†×ÚžïÌcZÎ}^ï ¹ŸëOkÓ›Ÿ+–óJþ‹œpf{mË…‹¿å=Á‘o¨ dzØ_ê¢ßê¼Wø6!ªP® ¸š.º®<Qw “?ë6–*¬-ªÈè"ë^¬Ó]z‚ŠïÆm-©³LcX×¼‡b EÛõJÔ±]P_ñ|Ã*º]X<…ñª7Pô•˜ɾéstߌ¢3Wþ¼s>8mÞ +*T1]P´4mûÕyLÇ•8ö,itŸjiâxé)ÿï-èÞƒ¦]?Pë*k-űÚ”Ñ'3X»kÕµ®~%0 mÊh4†¢é0Ô³k–b*¾†»ôD£‡ç+W ¿ !uÜ%³j€üiúèû‚î¢ÊÍ­%æªGDFFrÙe—UeãõæóÏ?端¾ª÷X‡æ‡~`ܸqôìÙ“?ü°j_AAA³ìjµZnºé&nºé&íN§“G}”Ý»w×[Ïž=,Y²„áÇӷo_úöíëÑçú‚#[b¼sæÌaêÔ©˜Í•ß9ßÿ=6[ß9M´e˦L™ÂŒ3ˆŽŽfìØ±Œ;¶V¹’’e€×^{˜˜ÆϨQ£5j”Çþ¢¢"n¿ýv²³½ÿn¬3fÆõ×_O÷îÝyã7uœÆž_—ËÅ믿ÎóÏ?Ohh(Ï?ïù{©   Þe_Ûm‰yv¹\<ôÐCüë_ÿ"((ˆgŸ}¶ÑÇjÊ=(„B!„B!„øã:ç” ‹øâ»Ÿèо q±Ñ„¢Ö¨±X¬dçä±{ß!6lÞÅj­U×ívóÅ÷?‘ܾ-ñ­b B§ÕbµÚÈÉ+`ïì۸²òúƒ÷šê×þETt$­âcøþ«ùlß²«Î²n·›é÷þAÃÐ¥[ á¡„„ãv¹ÉÏ+`ÿÞC,ûi%K¬ÀåªýÀ`Óú­L{;—΀!}HJN$($»ÍNIq)‡eï›Q«Õ8N^{÷ïtíÑÙçq=0õ ~ÿus£Û­Ë3¾Ää;'qéˆKˆŒŽÀfµrpß~Y¾EQp×Èhêt:ùû㯰rÉÆ];š”.É z²ŽŸ`õŠßøôï(ð’É´©óìv»™ýÏX²`W]w=z§N¯£´¸Œ#‡Ž±qýVŠ ‹«êøkžOùß×?QTXÌÕÇÒ¡c"f***Ø¿ç+—®©5W[6nç–«ïd¤ñôìFdtAÁ”—UPTXL~nG§³n͆Zm½óú¿éÕ·;íÚ·!2:£Ñ€Õj%ýèqV-_ËŸ|GiIY­zµŽãýà/ d Q©èF°^G‘ÕÆæœ|þ»ûû‹¼¿T±5·€É‹VqMRzD†i2¤ÓRnwPl³“o±r¤¤”u§X»Ýn[µAqѤ†‡n0¢×áÆM¾ÅÊ¢–;ÎÒcÇq–™·)uO÷ÎÖÝD ÄšMüpð(;òêÏæ[îppÿŠß¸:© #âH4£(p ¨„…G2¸·[ ZUÝÁõ¯lØÆ–Ü|Æ´kMbp&»ËE‘ÕNfY9{ ŠXŸ]û%#§ÛÍsë¶°2#‹q‰ t Æ Q“UVÁšã'ølÏA ¬g~8ûã¡cÙl\ݾ I!Ah5T8œì/*æ—Œl<_¯pïoßËÒcÇŸ˜@Ϩ0"Ftj¥6;GKÊØ˜“GÑi†ýyŽÎ¶MkÓù¿ë¾aШötïGBR(Áz´:5Ö y'Ê8¸'Œ#E^ë[Êí<}÷®šÜ®½b 2£Ö(”Û(È-g÷ÖüºâH³ôýDf ½c>¦t#õ¢XƒõX-r2KÙ±)‹õ+ÖYwËoLT÷¢5­]z˜¼ì2ú\Ú–NÝ¢‰j€Ñ¤ÅawQTPÁ‘}ùüºük—Æ]Çï_È9^Ê_§ÎçêÛ*ç:8Ô@Y©œã¥l[œuÍ0ÏM=¿¾Ì3Àê%‡8ž^•7w¡cZ4zƒ†œã%l\Î%£ÛÖ°º…B!„B!„ÍÛ¿æ>Îã%¤êº§‰Ç¨2Ræ*å°ýk,«ù¦äK \µ¼øgá zú¨M"Z…QeÄâ¶’n?ÆÏËù¬äJ\ÞŸÑ”¹K)q•Pâ*æ°ý›­›XV±„#öÃgì÷&ëF®Ïº†ë&ÑËp1Qêh‚ÕÁ”¹Ê(r’çÌã°ý¿ZjgËmJ]'NžÏ†Åå ™p]õi„ªÃpº¹ŠHwc‡u;k-«ýZ·±\ÅXæ?‰ºm?ÔÑ)(A1(jnk ®Ü8ü‚}û÷¸­¥~k³ºq'–EÏaß³]· ¨[¥Ufv;qWá*LÇ™µÇa/󜾉ò¯GÛãÔ­{¡ ŒB1ã¶•á¶á.ËÕÇáµõvÁm-Á¾åkt߀}ÛwõvSñí44†¢nÕ•9Å n®²|\9{qìYŒ}÷Bp»š45§kêx]y©øþ!PëP™#p»¸KsÐv¾¢rxŽÚïXàrb™ÿWû–£M»uLg­WqŽ+±­Ÿƒ»¼þE«›CÅO`º t=+³$—~î§Ýå_e&eã ë ªPpÛÀ™ö=`û þ|ÌÒsµ~ýzFÍØ±céÝ»7‰‰‰át:ÉÎÎfË–-|õÕW¬ZµªAÇ›>}:‡fܸqÄÅÅa±XØ·o‹-ªõ¾?|óÍ7èt:úôéCXXùùù¬[·Žwß}—]»öîÀ´iÓ¸ï¾û=z4±±±X,öîÝËâÅ‹ÏØç³=^€ââb>ýôSn¿ýv 2x¼9ýöÛo >œk®¹†¡C‡’’’Bhh(6›¢¢"öíÛÇêÕ«k½·ãt:yðÁY¸p!'N$-- £ÑHFFK—.eöìÙäåÕ½(Ic9Nžxâ æÍ›Ç7ÞH=ÇétRPPÀÑ£GÙ²e +WÖN,pºÆžß¹sç’ŸŸÏ-·ÜBJJ ”——³k×®]¾´ÛRó¼~ýzFÅ­·ÞJ¿~ýˆ‰‰!$$„ÒÒR ÉÉÉáÀ šç¦ÜƒB!„B!„Bˆ?&åä?O?ý´²cÇ%''G)))Q•œœ•N§S—••©\.—Öd2iív»0¨T*³Ûít»Ý¡+W®üþ÷߯:V¯^½ÎâpZ^RRRKwÁgï|üª_g…w2Ïg×üñ—aÖj˜½}ÿÝ}°¥»s^[rõH´*omÙÅ—û·twÎ{ŸŽL\€‰×7îàûƒu× q!šñÙUU™œ7­Mç•éËš½ÍïÆ %Ô çùu[Xt4³ÙÛB!„B!„â\0wî\¯Û/´g»â¤í6ÃðÇpfn¥ü³)-ݳJÖóm•™u+¾{Ç3£ ÑT›7o&00W^y…÷Þ{¯¥»sÖÝxã<ûì³lÚ´‰ &´tw„B!„B!„B\@¼Åù4h¼¢(Š¢”¸\®2À¢Õjmåååv•Je7›Í.›Í挌ŒtjéžQ¥{÷î-Ý…³æî»ïné.!„B!„B!„g•ª¥; „B!„B!„B!„B!„B!„B!„B!„8H€²B!„B!„B!„B!„B!„B!„B!„¢Á$@Y!„B!„B!„B!„B!„B!„B!„BÑ`š–î€âÂDûä¶äçrøÀі™( ¸Ý-Ý á)@‡J¥PZlmé®\ä^B!„B!„Bïcªˆ$Üåù¸ò¶tw„¢Q¢££éر#¹¹¹ìܹ³¥»#„ÍB¾ëD]äÚB!„B!.< ,ZÔu7]É}N­µýÐ#ÜrÕ]-У?¾”.Éüí¥éM^üÛ›¬]¹®Eûóí’ÿ Õi™ùòl Pâõé¨ÁƼî÷¿¥YmõÖOìΔûòî?V‘q¸¨9ºØ¢>\4 ½Áû©Þ{a5+8Ë=:³Ð·?ÚÖ‰!„G™yÿåµ,ÿqŸÏÇ>>™ Sºãr¹™;k#+ò}¬i½[qé˜tH$8Ô€Õê (ßBVz1[~Ëäçùû±Z>÷\Ô˜{aZÎ\Õ¾×}ϯÛ¢£™þì¢B!„B!„B´˜€;æƒZ‡uùëØ$@Y¿ºí¶ÛxòÉ'kmß·o£Fjýq-\¸ÀÀ@^yå•?|`–\WB\¸.¤ïºsAZZo¾ù&&“‰Ç{ŒåË—·t—êäkã|ï…JΑB!„BˆšT-Ý!ÄÙ5åkKXx(÷<ø§–îŽ$•¢Ð*À„JQZº+>±8œÛìÿÜgH«Ö¨˜:½?‰ÂùÇc5!…ólØH:º÷#<ÊÜèc„G™¹í>… 7rû£ý 1øtŒÉôá±W‡ÓgHÂ"M¨5*Lf±­ƒèÑ/žÉÓzêÛ1ÏU½*¼ÝwÍß]!„B!„B!„B¨T*P©ä«æ$óÜp2WB\x¦M›FBB<öØc>×?ß¾7š:ÞóÑ…vŽÎ·ñ !„B!„¨ßy‘AY¥(¤tlOZçdâ[a6q8äæ²{ßAÖ¬ÛŒÅjõé˜}.JcܨKøvÞR~ß¼½9º.ÎàÛ/æ1ÿûÅU?ÿùÞ[¸fâØìÑŸÓé¬úì¨ñYqvôŽŽàïý{bP«õÝ"*çÏ}øÎÖÝ|зLç_’@BûP´:5·üßÅtïǬÖP[ÞÝ`Ô„:¤F×6˜™%¼þ—ÍÖ–¥Ü^õYQtzu³µu. 0¢¨ª#lÕ!áFŠ - ªßoX[F\Õ±Þ2Eùä/­µýlž_iì½0kÛfmÛã±í»1C 5蛵¿B!„B!„B¨QsMൌ1§¶-ŽtV”/ã“’9”»Êš¥ÝDm{&\ÇE†‹‰ÓÄãt;Hw¤³Ê²’O‹?¡ÈUØàc]dèÅ@Ã`zz©Ž&Ï™ËÍY7x-{™i$ÿˆx¹Þã=–û0KË{lS¡b°éRFšF“¦ïN¨*›ÛÊÇVV¬`nÉ)uÕþ;gËSЦŒFÛu<ª¨dwy>Žc¿cûý\9ûZºƒâ¡i ‘ßT~λl›k— ¸§nÈÿ?°þêýXÚ0]ú‹An 8³À¶ʾgz³ £E¤¤¤0iÒ$ @LL N§“C‡±råJæÎKzzõ€ÿûßÿòõ×_WýüÀpË-·´D·Ï+ƒ âwÞÁh4ÒµkWÊË›ïùæùÈ_וÌsÃÉ\ qar8UŸ>¾ïw>~o4e¼ç£ íãB!„BQ¿ó"@yÒ„1¤$'zlSëtÄÅFEÏ´ÎÌžóÅ% {Þ­K'ÆŽ¼´9º*|d·Ù±Ûì?‹æõÁ[ÿ!2:ƒAÏÌ—g·tw„¸à˜´ ê #€à×å‡9q¼„+oîÊEPH»¸ÃÆ%óÕ¿½¼aâ'#¯éDt\ …yÍÖÀ]W~Yõ¹MR/ü{L³¶w®8z €ÇK‰Š óHGŠ\ÿÒ+:xüüé;Xµø ¸!,ÊLëÄŒ&­×ºgóüúKKÝ B!„B!„B4†I11#j&=õ½<¶wÐ&Ó!8™ËÍc˜š=…Îl¿µ©BÅÝ!÷qsЭ¨¨ñwtEO²®#ÉºŽŒ1ãOÙ·’å8^ﱺêÓx0ôQºèºzl×+º:ë˜T¦Fõû•È 2ñئQ4¤è:“¢ëÌXóxþœ}+9ΜF¿Y¨4ǽŒ¦ý ÍJ`4ÚÎW í4ËOÏ`ßµ …:(D5]üsåç²ÏëNV è~0Oj$aSt  m2˜®†ìËÀm;½n^Š¢ððÃ3uêÔZYçRSSIMMeÊ”)ôéÓ‡’’l66[õàk~u3›ÍÆ–îÆ9Ë_וÌsÃÉ\ qaš1c111Fž{î9ŸêžßMïùèB;Gçãx…B!„BÔï¼PÞºcá¡lܲ“£Ç©°X 4Ó£kgÒR“ bäÐ|ùýÂ3«MëV\3f8àÆår×zX#ÄÝþ=ùÓu÷µt7„ƒ»óxý/+hÝ.„ñ7w%¾]ßÿg[KwK4‘ÍêäowÎgÈp¹\,ÿq?N‡«ÁõãCª>ïÜ”ÅswTý\˜_ÁÁݹ~íï¹@î!„B!„Bq¾x(tzUpò‡Åðmé׸q3Ð0ˆûB§§‰ç¹ˆ¹#{ nÜ~i3ZÃõ“P¡fMÅ*~,ûcŽ£„ªÂ¸&ðZ/%JÍ#¡ñPÎýug\êþSw IDATÀ•<ú$ZEËQÇQ–Íg‹u3ŽtÊêÉdlV*cÜ`ùGr§y-Sᮽ`â²$hÚðcÙ÷lµn¥ÄUL¤:Š1ãaE+M÷…L㩼¿ø8#ÍGßjep²Û…mÝÇØ·}‡ÛVŠ:¦ úKBš€aä_q¤oÄ]â¿ t!|¥Š€ÐØwCÉLïå‚Ó„ÊÏöPúIeyEÚT0ߎ£Œàd€§žzª*KíÎ;™3g»víB¥RѹsgÆŒƒ¢(UÁÉB!„8¿íÚµ‹qãÆµt7Κ m¼ç#9GB!„B!j:/”·íÜ˶{=mgŸÈeï#¨Õ*R;%‘Ò!±Îú§˜Í&&^}9jµš~ZÎðÁý0 Í×q!„BT9v¨·žýµZÁéôÏ k4ŠJA£©\<Åívã°7<à·%Xøþ“ÆØšª3•äe—ù«K ÒÒó,÷‚B!„B!„8—ÅhbPù¢ñ‡ÅðNauDàW¥Ÿ“ëÌá•ÈôÐ÷¤·¡/¿YÖú¥ÝãŽLþ‘ÿ,%®VU¬ôØ·Ö²š‘3hÄã%£×`áþÆü%ìo8ÝN^.x¯K¾ÀEÃþþ¨  ß•G‰«áA}‹Ë²¸|¡G ö~û>ÖZV£‰Ð0Ô4¼V†å¥¨Ðv«Œä´­ŸƒuÕÛU»‡VãÌ݇ù¶¯Q´F´Fb[?§¥z*.t}Táà*†‚G½ëV'W̃Âg¡æmï8  @1Ÿ•^7»!C†T'óÍ7<öØc8Ϊý[·neîܹ˜LË /„B!„B!„Bá‹ó"@¹¾°#éÇI프F«AQÜnï¥Eáºñ# 0ó˯ømÃV†î×<>M|B+žyå1âZÇòíçó˜õæGg¬c4™0i/íKë6q˜ÌFÊË*(*,&3=‹ë¶ðßYg}½^Çðˇ0hh:¤´'$4‡ÝNQa û÷dÍÏëøß×?ùq”-Ûî aýíåtJí€Á 'ëø V¯øÏ>úš‚üÂ:ë5užSºtäÚ›ÆÓ½WWBBƒ)).aÛ¦Ìó Û7ïòÛøÆ_{9ÿõ^ŽÉ`ÒØÛë-Û«owfÌþ¹'ò¸jøÍ\wÓ•Ü÷èÔZe8Â-WÝuÆöÇ\=’Ô´N´OnGDdÁ¨U*Ndç²~í&>ýð+ŽgdÕY_£Ñpͤ±Œ3”„6q (=tŒE󖃢œ±}_ÎoSçêt¹kL»Öôˆ #18(“£FƒÅá$£´œ_2³øzÿÊìŽ:ëßÖ¹E‡i0¤×¢U©(´ÚØžWÀ—û³#¯ž{A£æš¤¶ hEë3&­†r»ƒb›Ì²r6žÈãÓ=ý^÷”ø3ëÓ¸ß8Êìí{4gÝ#ߘ@ZD(!z=N·‹«£%eìÈ+`ÑÑL2KË«ÊëÔ*_5€gÛÌÒcÇksÉÕ#ѪT¼µe_î;ìµÝK⢟˜@ÇÐ` j5Yå¬9~‚¹{R`­ýfD» @>1°ÖöŸ®QkÛ†y<¸r×vS‚™Ô–î‘aëu”ÚìlË+àó½‡ÙžWàµøçùSC25Zý‡·ã¢­i—N`ˆEQ(.°pâx [×e²ìû(-¶ðá¢Iè µÿk“Ö»Ÿ®¼¥ÖöÞXÇ¢ov{l‹Œ  [Ÿ8º\C\›`B"L Ô– y'Ê8º¿€ÏßßĉLÿ¯:Ÿvq+¦¿2 €ý;syêÎùg¬£Ó«6.™^—$ß.S€K…ƒ’B 9ÇËØ¹)‹…_ïÂRQ÷÷ÇðñÉŒ”Jx´™Š2;vå²à‹]lßPû©kžÞ{a5+¨³ºê^2ª=—Œj_kûSw-`ÿŽœzëúr~«ê4pžïùë@\V¹ά×ðóüýuŒ f~u áQ•o7=0ñ[²3Î|}Hp²B!„B!„8õ1ôEEåsK>­µÿçŠåä8sˆTG2Ü4¢ÎåT]n¼‘ž†^„ªB)q³Åº™OJæ°ÕºÙkeóêì×ÂòŸh„5QšhŽØ{ì7©Ì<þ<*Tü-ÿI~ªçXÞœ P.rùT¯¾ Ò[­›jŽ^1 Bå5Xzjð]ô6ô%REˆ*­¢£À•Ïëf>+ù/Û¬[|êÏ™((† ‡kŸ;wÉ \Ù»PÇ÷D ŒñkÛ¨4èz\¦óå¨BWþa»õ?7Ô÷ŸŠ:¡J`$Š!E­Ã]^€3s ¶ŸáÌÜZ«Ž®÷dô—Ü @ÙãpeÖ*£n}¦ëfP>÷Ï83<¯OEkBÛó4í¡ M@Ñ™qÛÊp[Špfà<¶Ûº7~o^£í4MêXÔÑP A¸VÜå¸òãÊÚŽ}ç\…ǼÖÖt¸mÚ5¨c:£hô¸Š³p\‰mýp—çû}¬Þ„ütÝþœµYxò1¸ã=u­Iàn¦µRÏö\ÝeùC‡ñÄOx'×T^^îu{SuëÖÉ“'Ó»woÂÃÃ)**bÆ |ðÁlܸ±Þ~0€èèhBCCÑétäåå±aÃ>üðC6mÚTgÝÈÈHL¯^½èÔ©qqq¢( åå大§óÕW_ññÇþ¹“““Y°`A­íÛ¶Õ^´wÍš5Ü|³÷w † ÆðáÃILLÄh4râÄ ~ùåÞ}÷]222êíCcç¹)šrŽÃ_óÜØ¹jìuuýõ×Ó­[7RRRˆŠŠ"88µZMVV«V­böìÙ;æý»7Ï-=WMa2™˜€Ìã'ê N2àb’Ú%pèh‹–­>[Ýàž‡ÿLrJ7ýé:V-ÿ•[½Ì‡ñöG¯Ð&±µÇöÀ ƒˆOh…Z­ª3p¶s׎<ýòtbã<kµŒ­¢(/«ð{ pK´«V«yâ¹qÅ¥ÛÚÆ“09ž+®Áôûžö,ÜÔy¾ãþÉÜô§ë<¶……‡2xø ëÏŒ¼Ë·ŸÿØÄVÊ9‘ @Hhðˆ…‡p";×/mÜûðŸ1Ô^R:®u,q­c¹ìòÁ<0õIvy *5˜xõݿӥ[ŠÇö䔤ªû¢.9¿þž+_ïߦ¸;­f­çײY«!94ˆäÐ ®j߆ÇVo`O÷cúÆFÒé´qG \Ëà¸^Ù°ù‡ÓkÕ ÒiykH_ÚxlÔi Ôi‰ 0¡R¯¬M©{úØ“C+_†¹±S"«2³ÙYÏâjEᩌ=íþÕ &Æd$Æd¤wtevGAÆ¡V¿8ËZylO4“ØŽËÛÆóøê õ 7ÖÔ.¹±S¢Ç¶PƒžAq1\ÛvðÝ£µêùëmÉ]"¹÷©ADÄÔþ1c&¥{ +æÕ0ê«KÇtàöGë^¼Ä`Ô×&˜¸6ÁÌÕ<h}iâ/oŒ ¶uÇvs€s€Ž˜ø º^ËÒöB=Êí:†W}Ö†¨éÑ/žýâù÷k¿²äû½ÍÖÿs]Anu£I[oÙšÁÓyµ3·!„B!„Bq¾ˆTGPá® ßYû…f7nÖ[~ãró:ëR½ãžû™4Åc[˜:œKMÃbÊËù/ðUéç>õ«ÜU]hqYjí¿6à:‚U!¬·¬ó98 T]ùÜÈÛ˜«›¾»l;ëÌä<À8κ.Û¢ÔÑ\fÉ0Óe<Ÿÿ ?”~ç·>a-­ú¨ MÀylC­"Š) wIÝ 7†¢3c¼f&êViÛÕÑPGw:c}u»¨c<¯9%0 MÇËÐ$òè9ìÛðØï8´º*@YÐ×¶Ús©Žï €ÛV†ó¸ç òŠ1Óõ  oç¹Ý„bBÒE¥j–åÆŒ@Ñ1Œ} M»þµ¶+ÁFTÁ­ ]Ü–RlO[„@¥Æ0êi´)£=7‡µAv3Ú.ã©øvÚ‚£›.ðn0Ž©ü\üXõ^NÓ´'C—Í·½Y»å©æ*))‰´´ÊûgÖ¬YØígsÀðÈ#pçwzl‹ˆˆ`äÈ‘Œ1‚§Ÿ~šO>ùÄkÝ!C†Tõý”˜˜®¸â FÍO<Á—_z7ã»ï¾#&Æû‚ AAAtîÜùœÌݳgOŸããã™8q"cÆŒaÒ¤IìܹÓk½¦ÌsS4åµ”¦ÌUc¯«ÇœÀÀÀZÛ˜4icÇŽåÖ[oeËï Œ´Ô<·ÄuÂçŸNR’ç»AÁÁÁÓ¦MÔjuÊÝ»wç7Þ ukÏ÷B´Z-&“‰¸¸8ÊÊʼG6å{£)sÕØºM½®|• @XXØËFDDpü¸÷•BÎöwÝÙž«Ss=ûsž[BSîAhüµÑXM¹6L&o¿ý6ƒ ªµÝd2ѺukLqq1~ø¡_ûÝXjµšW^y…ñãÇ{lOLL$11‘k¯½–Ûo¿½Ù B!„B!j:/” z=1Qô»¸©’°Û,XòK壣"¸ô’>”—Wðù· pÕÈÜ¢b"=ûYo€ã­wL¤Mbkì6;ïÏœÃÚUë)Ì/B«ÓIÇÎI”—y|iŸÜ޳ÿÉlÄåt±hÞrV­ø•Ìôã(ŠŠÐ`ºtëä÷Ë–jwêý·V¯.Y°‚ÿ}ý%Å¥téÖ™)wßHHh0/Í|šÉî!ç´ Ô¦ÌóS®­ NÞ¸n+ïÏü˜ŒcÇiÝ&Ž»˜B—î)ÜÿØlß²“}»›ô—“]ù"D@ ­Vƒ½ž,º¡á!€gÐíWŸþÀw_Vg‡¼ãþÉ\wÓ•>÷cÅ’Õüðå| ò‹0™Œ¤õLeò“0˜yòqÓø;j-ðèßî¯ Nž÷í"~úßRÊJËèЩ=×Þ8ž¤Ž‰Þšw~›:W§óõþõ‡éY|µï0%v;&†~±‘\ŸÜŽ0ƒž—öâO‹W‘g±Öª÷áŽ}8Ün2ËÊ)³;Ð( ‚¹³kGx G*«2³)¶y>¨¾5%‰6AØ].>ؾ—_³r(´ÚЪTD™ t ¦¼ŽylJÝš¢LŸ£MÆz”§¤v¨ NÞ™_Èç{q´¤ e2òtßîèÕê3¶ë«Û»$W'/=–Éÿ¦Sb·Ó%<„Û:w D¯ã…1eñ*r*ª_Ž:\\Âeß.à’VÑ<Õ§;cX‚å´UͽýŽšÔ1±*8ySNïoßKfi9ñfîìÚ‘.á¡ü_÷ÎlÏ+da±G]£³))5’¿¼9­¶þsxx_>Å…Õól)¯¾¶uzMU‚v—ËÝV{õx‡Ãóe0­®a×Li±•œ¬Ò3< ¦<Ô·VpòéòsÊ«²Lûê¦{/fãštòsªWÙ¯9ÏŠ¢ Ó7ü^«Y·f@¯ÓéÂa¯ýrž«F†á¦žßÆ(¬hl0V÷7¾] PVj«š›Sã©(³c³œ[÷”B!„B!„¾°¸+ÿîjTŒ#îÚÏËòœ•ÏV"Ô‘µöÝt[Upòï–õ¼S4“ Ç14m¸/diúî<6­¶ÍìµÕ^ü¶.—š†pÈ~lgíÀÙ1æÊ³ó]y¼ùÉÚN„«Ã)s—±Ãº/Jæ²ÖR÷BÖaªÊÀ›ÛŠNÑcs7î着:h“¹>p—š†aq[x³ðµ:ËÏ.z‡ÛA†#RW ECg]î ™F[m;¦‡>ÁÏå+(rÕýÜÄn[9Îì]¨£SÐõ™‚cÏÜÖ’ªýê6½Q…µ§ÇžE~ióÈ'«‚“íÛÀ¾ãGܶRÔQÐõ¼Udr½õmkfƒË«(·µTÔ1Ñú?Tamùöî;<ª2{àøwz&½„Pj!€‚" ˆHÑUW]\ù©¬®º¬eÑ]ëZV]Q×µ±¶\;"(½(MÞ¤@Hïm’i¿?†L2d2™I&Ù=Ÿçáq2÷¾÷¾÷Ü÷NâÜ{Þãså|L§6c­i˜ì×R†µ2…$ê#1:IPVÇÙÉÍY»Áâø}³6õN[r²¹ŽÚŸþ‰)}+ÖêPkPD£Šêµ®}*Õ¶åxtWýÙžœl<¶Ó¡o±T PëPÇ¡¿æ9P:ÿn_wéïí ·Æc«1økm9ªnCй…>ýÌרúøf¬ùírܾ³ÀÿÛëªO¡ê³æ×Õ6Ê{1ll—î4˱JMMÀjµ²fg¯Ï‹™;w®=‘lÇŽ,X°€¬¬,zõêÅüùó6lO>ù${öìqšp´hÑ"L&YYYTTT ÑhœšÇ߉ÍU°عs'K–,áÌ™3X­VÆŒÃ<@@@/½ôÓ¦MkÒÆÝ8»ÃçÈîÆÙS±jë¸úá‡X¶lEEEøùù1bÄî¿ÿ~X°`W_}µÓBm‰sg‰•«î¿ÿ~©««ã•W^aÓ¦M£Õj‰‰‰aРATV:¿ïÞ¿>þøcüüü0›Í,_¾œõëד••…B¡ ,,Œ”””‹Vövõüº+OĹ­ãÊU¹¹¶¿¥Ñh4-NxQŸ8[ßæBÞú¬ë¨XÕkËxv7Îü1K—6L&óÈ#pÇw´ª¿î~nxâtul¸s¼µel<÷Üsöää+VðÅ_——‡N§£G,\¸•‡ŸCs÷=òÈ#öää+Vðé§ŸR^^ΰaÃøÃþ@hh(ï½÷S§Nmöúu•7ǤB!„BˆÎ­K%(ûøèxâ!Ç™óòò ùüÛ5ää8m£P(˜yÍ•¨”J¾[»…ŠÊ*§ëµ§«¤oÿÞ”•–óËΖgè4Ôö?âkVndÙG_:,+È+äÐþ¦Õ€ë=üÄ}øúé1jyøwO°Ï¡&ëü¼­é,ØîòÆ~£»Eróof°ê›µüíÉ…öeiÇN³g×~>øü0çž[yééEíÛçˆÈ0æÜs+[Öo㉇^Àb±%A•—òǹaÙŠ÷ ã¦ßÌ⹿,pûXósmã[¡PJî9Û Ì{þ8‡AC“yûµ8°÷ðùþÙ¾°Ì;×p“Ób±PW[×ð³¹mI[ǧ±k{Ëö¦¢¢’‡¿øžq Üß!n½ûöb¤ËXúáüóÕÙ—¥;ÍêXûó×h4M?ŠÚz~ÝÕ…\½~=áDiUà=R\Êî¼"ŽIˆNËíɉ¼ºçp“v;r›~n=—OVyOº ­JɨèÖfsXgP¸­"ÀÚ¬s|z"ÝaYAÃEÍß`t§mcÏæÐ'Ø–dY^gdOAóÕ "}}¸¹¯-Yw{N>Ù¶s£/ŽO–U`²Xq!g²U¢|õÜÔ×6;þ÷gyqwà ú'KËÙ›_Ìâ«Æ¨ÕðÛäDþþKÃç ¨;Ý5î«Ñb±¿ßœp½w$÷àÇì<žÜ±×žÄ\R[ÇC?îbɤñ„ëuÜÔ§'Ïïrœ…ÝS稣(• ~ÿø¥ÉÉi‡ Xûõq2ÒŠ1ÔÑë5tïÒ$)õž 3I/\6“¨XŲ̂‡vçðâÃë\îË¡_rH?VDEy-uµf|ôj"»`2vŽ/Â5ZCScí?Ý—Ç{/o§0¯µZITl É)Qøè.º­ß¥±öëãX­0cö F]Þ­NŨË{ðýç ŸíãÜ#1”¿ýëÚV÷¹qÛÖßj?Ï[צóö Í?xa[OœßÖ()jx¨Ìç|åˆh^þè:ÀógXJ¥°'¸—Jõd!„B!„BÑůk˜¨õrß |ï¤q¹Å6Y¦ÒqÒU$wÝÀÆê èFßaÍs8JG>ãÀÏv+žšµPþjËë«ãmÿ5瀥¬åu=É[±JH°Ý#ÍÎΦ¬¬ã8**Š?üá¬Y³†ûî»Ïž8RTTÄí·ßκu눊ŠbΜ9<üðÃM¶±iÓ¦&ï­[·ŽS§N±zõjt:ãÇgùòåÍöcãÆN«i8àÙëÐjµR[k›¤Âdj˜”¶®®Îþ~klÙ²…•+>»y}ËÞÙÃw˳æ«c|»äïÿ};¾ös»î·µTj%ÊFãÌPc¤ §“Ñ‚¡ÆDæÉb¾ÿü(_üëâ3ÆŸlŠßT´ F«‘—Kž·''׫±ÖðY…­âÒhýØVõ'NÝ—#¢@ÁÆêõlªÙÐd¾š~ö×_Tþ‡»óî`RöŒ?3š9y³9Xk›€öΠ¹ Õ¥8ÝO¦1ƒµûÈ4fPg­%@ÀpŸ<òËb¾ —&¡Å~Z±b²šÞKÐôæ·ÿ‡¯Ò¯UÇÚX–)“\“-A8Nçrû–˜ÏüBÍW`5”£ ‰GÝËÜ· ýõ¯£ÐP»ñUŒûZ([Ûš~WÛ^˜j©Ûñ~Ó,flS¾ºÎR’eO¦V7•ñøZÛ2]ª¸aËTQÉ(4zÌÛ›´µVÛ&zUÅ D¡jSÿ<­¥ãÕ$M¶½0ÕR»í]—¶«Nš %XLÔmoÚÖRœŽñˆ-ÉDÝ2(=?¾ßo%XPñÊó§ÄCÆ[Í[± ²pIIÉEÖô¬éÓ§£Óé0<õÔSM’Qª««ùøãÅ.ý IDAT?~¼KÛNOO·'pÅÇÇ{¦ÃØwß}g=xð`‡eígwtÆsÔYcõÍ7ߨŸ!8p KmÛ+ÎÞŒUqq1C‡%88¸Õí’’’HI±ý½öÆo8MŒlîĪ=ãìθjNii©½Úo}b¬J¥â¦›nbøðá\}õÕöuë—gff¶zûÞú¬kXÕkËxnï8·—ö¼[í©¥±qÝu¶ ê ‹-jÒ¶3š1c*• “Éä´Ï'Ožä«¯¾lÇwás³B!„B!„§u©ÿó4ÔÖòäßÞ@¯÷!",„¡û3"e ƒ’ûÄ»}Ž©Ñ—V¾z&ŽÕjeÕº¦3Ow¤ÍëZ® ØØçÿ^ÎÈ1ÃéÕ»KW¼ÇòÏV±jùÚ‹&œ¦Œdýýòµmî««¼µßCmIѧÓ2ÈËq^A{ëæ\;k>>:úôOàè¡öemóÐá¶/©Ž8FQA±Óu2NÙÚ "8$Èž 펜ì\û%É¡}G8$‰€@R/Á› Þ ª›-q*ûLÇ$(×T×PTXLDdÁ!Ž7åû%'pêD:ÕU®U”tçüz:V®\¿íéÇsyLKèŽ^­¢wP Ç/W~53{÷`TtQ¾>ë´Ô˜ÌdWVÛSuNfsü"-ƒK¢ÂéèÏ’Éãùötßgds¶çÝi{¡ÍÙ­›…¿¾"ð±’2 j .ï§­†Ùö{º¬‚¼jçãy{N×öêŽJEbP ÇCµ‘Ì“%ôH´‘”Ñq,ø÷ 6~—ÆŽ™äŸ«hSŸjªŒägWÚûÖtbƒ®¦­q.È©´¿ç`› §ÿ†e½š}B©,k¸6óÚw!„B!„B!: ž(|”7#ß!PÄ“aÏ4»n…Åqb×-ùóPÝ Í…NÛœ6ž DBˆ2„Kó‰vÝÕñ¼õ>!ÊÒŒ'xºèq§ë«’^*~ÁaÙÁÚýÜ—ÿ;¾ýž e0×ûßȾڦÎ,xÀþZ‰’þÚ$¦ùÏ`–ÿõĪãXñ7æÌÀ`u~o¢ÒRÉè3à TÑSÓ‹)~S™á7‹«|'«Žã®¼ßRgm:A«¿ÒŸüobŒþRbT1„¨B©¶VsÖ˜EÐùìK§I;w©âG¢Ð`­«Âœù3ªîÃQ¨uhGýKI¦Ó ¾m¥Œ²Ýû3žÄZW}‘µSèüÑ ýêžcPÆ ô Áj¬ÆRrÆž<\ ™ÏìÆZY€Â?uïñ˜³’,TÝmcÖR–¥ôl“¶Æ=ËP÷LE–€ßœ¯1îÿãáï°”´ï$ªÐ¶ãUE%`.HÃZíü^vsê«E› N6[=ÛtúG4ƒf Ðø Šì‹9÷ˆ«‡Õ¢ºÝ  „½Å÷‚©5y:-ÜJR÷‚Ð󕘋SºûýôV¬ ÏL쪑#G°wï^òóó®sò¤m‚çÐÐPBCCí‰\õ¸í¶Û?~<±±±„††R]]Mff&!!¶{]>>žÿ¬ëlÊÊÊ(**",,ŒˆÇɧ=gwt¥säíX5§ººšüü|¢££ uºNGÇÙ›±úðùì²ËèÓ§ëׯgéÒ¥|ùå—ddd´ØnÔ¨Qö×_~ù¥GúÒîĪ=ãÜšqÕgΜ!))‰ØØXöìÙCJJŠ}"ŒñãÇó ¶¿©ccc×g½õY×^±‚¶çöŒs{iÏk°¥±ÑžZƒÙž}=vìEEEÖ'w fû˜ãÇÛ'·¸Ð† ¸é¦›Ðëõ$'';­/„B!„BxJ—JP®WSc ëlYgs8––Îí7O'6&ŠK† bû®†*ãÆŒÀÇGÇžGÉ/è_ü¼íþòÇgyøñû‹å7wÝÄoCûŽòÙ¿¿aóº­MªöBCµØŠòJŠ‹:nŠ`oí7ì|õÛæ’WmË¾È wür©­q®ßïáùñÀª‹ö30(À# ÊÙgrlI·Ýl3&^6a4U•UôHèNLl49Ù¹t‹µ%÷ÍÊq{Ÿ­e8Ÿ$ªÕ9V2 ³= ’Ÿçü”–¸s~;s¬Ü‘SÕð°F¸^ÇñFÏëô ôgÁe—¡w¼Q¥S©nt^œÝ³þ9¯'¶ïåÁaóÑq[ÿÞÜÖ¿7‡ŠJø<-ƒ-ÙyMªöz¢m[…ùØ´Èq1éÝSûÍ«i~¿¹—Ãô:ðÀäåaço> eó S.º~€Vã ìs䎰¨†*F£™Ü³’ìْןÞÌ“¯O"(ÔVÝ!*6€›çãæ¹Ã8~ ŸË±gkÓª.¦ººa iuM'6ø_QRTƒÙdA¥Vf‹qòPÇ$ú¤¡QÛŸgÿ9?[ƬB!„B!„èúŽÔæ×97p{à¤êÇ¥ŠÂh5’kÎe§a;WùN&BÁiã)‡vá*ÛCæ)ºáìŠßÑýª‚šMPŽW÷àí¨ÅD¨"È0¦sþ=T['¶(쯵 uVÇ ?«­Õ¬¯^Ç,ÿHñvaó&,X8Rw˜#ŇÙeØÉKᯣŽa†ÿ,>=_º9å–2Ôîã@í>~¬ÙÌ¢ˆ¬À,ÿš´í¥IàÍÈ·‰TE9¼¯SèÑ…ØötJ¢nÌÝhGÞŽ¥<‡šÿÌÅR~JÔ}®@7ö^”¡=ÐOÿ;Õÿ¹sÎ!ìSég»—g­È»ÈšÍ´KÀ÷ú7QD:¼¯PëPéC¿Ó´±Õ‚ñøZ´ÃoAÓÿjj7½ VÛ}`u[†9c‡Óýš2¶Sóí#øL| …_8ÚQsÐŽšƒùÜê~YŠ)mƒ}[žÔÖã­O\¶–»~ÿSánk[Ñü¤Â–FÛ­_ß“*Þå—ü ¨"!ì](œælçë[ÏÏ3ªl¡¡Bª¸†×žà­X••Ùž;¨Olê(‘‘¶q8räHN:u‘µ!88Ø!™,11‘>úˆèhÇ{,>>>IBÞJÀîh•••„……¡×ëÞw7ÎîèjçÈ›±º˜šóÏètM'ÌðFœ½«-[¶pÏ=÷ðì³Ïɽ÷Þ˽÷ÞËž={øàƒX½zu“ê¹ÐPI¶¬¬ŒÂBן7j+wbÕÞqni\µUVV–=qફ® ¢¢‚ÄÄDºwïΙ3gˆ‹³ýu5qÖ[Ÿuí+hûxnï8·‡ö¾›í­¹±Q?9Dvv3pvBõÉÝÍ%'_¸¬þºB!„B!ÚK—LPnìÄ© ²²sˆ¡OB‡åáC0lpÃ'5»™S¯dæÔ+Ù´õgÖnÚÞî}nŸ6î`çO»¹ròx¦ÿêM²ÿË<}†§ç¿ÄÉã§ÿ~ÚÚщf^Ú¯âüŽ[»_gëµ%Î …‹Ùâô‹Å i´ž¹Ë™™~€èóUÇ_5–Ò’2–þë î}èÿ¸ìŠT–¾Š°` †ZòrÚvs¿-š;õo›Œ&—·éÎùí̱r‡F©´¿V4zØ@<“šB„Þ‡Z³™÷`KvņZ´*%Ýü|yaÌp"}›Ÿe÷§syìÌ-`B÷®KèÎÀ°û¿ÌòJþºs'Ëœ'ݹӶ-ê]Û(­Õx8¹zSϾv+?ê<õ‘¨<¿c‹Õйu—Ž>Gžbª³üWWO["puUC2°J¥DçcûóÌb±b¨1:¬o2:>䔓UÎcs¾ãº[2þšDô~ ¿sú ޤßà ìÙv–…oÂljýRŸ¥ê,¸£­q¶Z¬åWÙ-€àP=a‘~öJÌU•uøùkIMvFÃD$RAY!„B!„Bü·È3çòrÉßšLƪ 忀[8P똄¬äü}4̘¬¿¦EëôýXuœ=99Ó˜Áïò廊™ŠÌ€Ceâ e æ¦àæ˜lœG¨\«Ôµ¡zÇëŽÑOÛŸ‘>©MPnl[ÍO¬ÝÏ ÝR}Æ8´U àÅðWˆTEQk­å¥¯³±f=EæB´ -qêî¼±ˆ(Ut {p20í¨9¾Ò–œ `µ`:±súv|oùÊðD´£ï¢æ«?xfÇõ÷8ÌÆ–×sJ~Ú‹¶d]S-µ?þÓÉ XªŠP¨´(‚ãðñ*Š€¨f·`<üÚá· ð EÝ#SÆ6PëPŰýÜ ÓÉÍT¦oCÓïj4C®GÕm0ªnƒÑwŒ¥(š•ÁRp¢ Çåù㵚Î'ç+]Ÿ|´á^˜wïÍÖAI%„¼ÊP}Šîgsœ¿¬QEƒÂš™ÃÀ㼫úÄ™¸¸8üüü¨ªªêýÖß+2›Í­zFB«m<¶‚üãDGGc0X°`«W¯¦  NG||<ï¾û.111íÖÿΦ>†Þƒs'ÎîèŠçÈ[±jæžqñVœ½«uëÖ±yóf®½öZn¹å† fÿwòäIæÍ›ÇÑ£Gö¹ÃŸCsó³®­m[£=bqòäI&MšdOŒýˆŽmþFsTLÃìoÅEÎg_w5Îõûݰf Ï̹ÕýuWúIÛ ‰1±Ñ$êGL·(¾úô;Ö¯ÞÂ=ÎaüıìÞ¹…BAæé3XZH곜Ïç·²Ü1©=2& ]ös¡Ž<¿õÕ‘ýüµŒžÐ€½ÛÎòËO¶¤d½¯†Ôóï×ÕšÉÍ– ÊB!„B!„â¿WoM"¿ ü-ëª×’cÊqX¾¿v#}RÑ)t6o•?‡>I‚&RK äßCáE’“ŽÕ5T*«¿Ôé:}5ýÈ0f¸Ü§èóUŒ+,®ÿ¯î@™¥ÌáýÐFÉÎÇ뎹¼Ý¶Rø†`­k¡Ô¬Ñ6™¨Bë¹ï_ÍÙ¶IXUQÉ(üßûkN}ŸÌùm¯TlÜ÷š>l•”û\€éÔ`jý$®–òsÔný'ÕKn‹ …O šÓÚܯ ¹s¼¦Ì(ƒãP'^îR[û9 OtH®mLÝ{<Vc[ç¢5 ›¡üuÛkÍ@¸·é:u‡À|þcÈo6öŒ·bµÿ~γMV}÷Ýw£rãÞam­mÌûú^ü:ÿå—_;v,>>®ÝŸ ·¿>räˆKm;ƒšš†É•Ú÷>˜;qv‡'Ï‘+ãª1Wãì­X¹ÃSqîê±:{ö, .dÖ¬Y˜L&‚‚‚¸þúëÖÙ½{7`{mæÌ™Ö7wbÕÙâÜõ‰³Ý»wgúôé,_¾œœœöìÙÃðáÃ;v,'Nxîw~WŒUsZ3ž=çúëßßßµçP\ýÜðÖ5x¡¶¯«¶nÝ @||›‹XXò÷&묬ZÉj"DÂ#!¡r±üïí@®ö À3EOpÆt¦Uí Í…¬µ% ^ã{-z…ãD£ÝÕݹL?€Í5]êÓÝPèl•„ë°[k¼þ újûð‹a—òbs‘ýõí@—¶ëkY6`K`UEõwºŽºŸíÁ|KI–Çök:º ,fPªð™ø(([?6¬ÕÅöתèä6÷Áxbm[* š!7ØxMÇ[(»«lþž²¥è4VƒmÂZ…>¸Íýº;Çk<ú½½Z¯Ï”gÐ ¼…_ ]ª˜Aè®x”ÎïÃ5>GÚ1s›,W†% I¾æüºßƒÅõj䮪ZjKTð»t£.XÁb[@Óÿ-–ÒöoÅÊl6óþûï0pà@üñf«Î)•-?”›› @LL 11Γ¬ë}õÕW˜L&BCCyê©§\ºï_XØ0ÉÄàÁƒ[Ý®³¨O¸ì²ËÚu_îÄÙž}úؓ˗/_Þä¹YOé¨1)„B!„¢ó»xéF/S÷Ýu+ÇOfyæ••˜ÍüýHLˆgôˆ¡TUUóóÞƒÞíl3®œ2Þþ:($ᣆ°aõÍ®ÿÊÛÏa2YÿÃŽ:AqQ)jµšèn‘\÷«)„†Ù¾È:rÐqÖ<«ÕÊßÿúo|ð>zÞø×KlX³…m›&';³ÙŒ¯Ÿ/ ‰= â½7>öÈñyr¿÷Ù¾ÜR*<þüC|øÎ2, ±Ýcˆ‰âý7?±¯›—SÀ§}Å­s~Å”ë&¢÷ճ⋨¬¨dà$fß}3jµšò² >|{i“}µ5Îy…|ôî§üß½·qí¬I¤\2˜o>[IfúYŠ ‹Ñê´Ät‹bÈð¼úü[˜%’ºÃh4qúd&}û÷FÀçK–Û—mX½…æÏµ÷ùø‘“-nkÿ/‡ÛL‡Ï¿ú8¾³”ÚÚ:º÷ˆ%&6šw_ÿÐ#}ÎË)`é_ò›;oäÒËSyëã|þïo8›u¥RIdtJ•ó£îœ_OÆÊÕë×~“Ô›P[ÏåQi4Ñ'$Û“ñU«1Y¬|p$Íaý“eäV×í«çþ¡IèÔ*öäQV[‡V¥$X«EßÂú .»£Åʆ39+.£¤¶µRA”¯žëâíš—z´mcWvo¸9¤Ó2<2œgsœ®›Q^ÉÚ¬s\ßk{uÇ_£aeÆY*ëŒ$0£w<¾-Üø>#›q±Ñ„ùèX8n$Ÿ=ENU5Z•ŠH_”ÍÜÄÏ«®á?'Ò¹¥_“{Ä¢W«øîô*&„3;)µRAy‘6?®²*ª(©­#D§åwƒú¡R*8UZB=ýéîïÇÛn:ÔøøèIæ èÃÔ^q eùé,²**)6Ô¡U*‰öÓ3$<”…{c¶:&Gzêuc™w^ÚÆŸ^œ`¯œ44Ф¡Î+˜ïÿùgN—4yÿÈÞ\†m¨|ã])ÜxWŠÃ:…¹U¤/º°©[¬+¿ü”ÅØ« öaþËW:¬st_%…-T¦h¥¸žA‡é™0­¦5Mšoìàîs-.o+«~ùé,—M:¼!>Ìÿ»ãññÐñ:l³ÏoÖɆÁ ¨®ªãà.[³ kM)¨´(ô! iE>su{?C7öwèFÞjVC9¦ômÍ6ñ½áM¬f#¦ãk1çÆZU *5ÊÀ4ƒgÙ«›sµ).N»éÎñšj©ùîÏèg½ŽBë‡Ï¤'[½_Ky.u»ÿväíh\‹Bë‹ñÀ×Xk+PÅ F›ú Tc^àu& IDAT5”S»ý}íÅ•=ÚÏ@AOBÁ `m˜ë–ªÏÀghSÀïfÐô±½gJ¬ éù>y3VŸ|ò “&MbÔ¨QÌž=›””–,Y±cÇP(ÄÆÆ2jÔ(RSS™2e V«ó‰U÷ìÙØ™,XÀ›o¾‰Åb!>>ž¸¸8.\h_777—7ß|“yóæqã7’ššÊ’%K8uêèt:âââ¸ä’Kxê©§ž‘8zô(ÙÙÙÄÆÆòÄO ×ëÙ¾};ÅÅÅèt:BCCÑë=ÿYç)§OŸ¦¨¨ˆ°°0æÏŸJ¥²'õéÓ‡„„^|ñEìË8»Ã“çÈ•qÕ˜«qöV¬Üá©8w¥X}ôÑGÔÕÕ±råJ8@aa!†nݺqË-·Ø«Jï߿ߡÕjåñÇgéÒ¥øúú²téRV­Zņ 8sæ f³úöíKhh(¯¾úªGúëN¬ºâ˜4?~œ̇~h_¶råJžxâ û9:xÐsÏdvÅXAÛdz'ã¼k—mÂ#…BÁ[o½Åo¼Amm-½zõ"..Ž 8mçê熷®AO¯« óæÍcñâÅøùùñÒK/yd»®põ;wŽ÷ߟ¹sç2kÖ,|}}ùÏþCyy9)))üþ÷¿G­VSZZÊo¼Ñnýî¨1)„B!„¢óëô Êáá¡DG†Ù|•ÉòŠJþýùwUíL ò éÛ¿·ýçüܦ7ëë)•J’÷ÃÇGÇÈ1Û]oëæl\³¥ÉûGç‘{ŸäÉ¿=Bxd§\ÎÄ)—7Y¯ª²Êž(¬÷Õ£j&I´%5Õû—€mÙ¯3§Ó2øiÓ.½<•”K“rIì¡e%å Êï½ñ1Qá\=õ .Ÿ8–Ë'ŽuX^Q^ÉüûŸ¦ ß1aÈÝ8ôÎ2´Z-·Îù±ÝcøýCw:mÿéG_q&Ó6 ¹'â|üp}û÷Æb±ò÷ëìë”—U°eý6®œ<«Õʉ’#ÎfcíªM\uÍå šÄ‚>k_VVZî±e€Åÿø„Ð ®5‰äAýxê¥ù­nÛÖó ž‹•+ׯ§h”JfôŽgFïx‡÷ÍV+/î>À©óÕ½ëY¬Vžÿy?/]:†]¨b®T(H ÆG¥bd Õ|·åä³ñl®ÇÚ^¨ Æ@ŸFÕ©ókjZX^Ýs˜h?=ƒÂB¸<.šËã¢[\ÿÂþ¬L?ËÔ^q$‡ó·±Í\èýC'ˆÐûpU|7ÆÇF3>Öq¿uFÛú …5†f·a±ZyÿÐ > –‡‡9VE(¯3:$(||ô$Z•’[ú%ëï˽ƒW4øÏ‰tÎT6<åÉsÔ‘öïÈfÁc™û؃[~ ¨GbˆÓå ߥqÕÌ~DÅ:x ¶‡ëÇ[ãóÅû2*ÿ@óýö bÿÎl·÷Ó­•ý?¶?•Ÿq{Íùâ_û2ª[³çÊSÇÛXGžß¬Ó¥ÔÕšÑêlÆíÚr“ÑVzÛÚt®½¹á3÷Ä¡ìS!„B!„Boû}ð¸)à×ïY±²¹f#/~‘|s^³m—½‹N¡cvàÄ©»ó‡à‡œ®÷ïòÉ2e:¼7T7 €Aº!lˆû©Ù}›‹˜”=Áá½m5?ñ~Ù;Ü4—aº|½Äayµ†?>H©ÅqÂN%JÆê/ÃWáËs½2K)>ìPõ §¦}4}é£é ÌqÚ6ßœÏÃó¨°\p Oý™×"Þ$@Àüп4{¼žd­«ÂðÝcøLÿ;Š€HôS_pºžéä&êö4MævGí¶·Qø† 4UÌ@TSŸo]C«Ã÷O¢Ÿù ]€­s÷þí%¿A¡õ³ý|d˜ëœ¯¬P¢ŒˆBヺçèf·i:µÓñuÍ.w™›Çk>»‡ê%³Ñ]ú{Ô½FƒJkÛlm%¦“›Ð$M9_ÁºiâjíÖ·PD¢Iš‚ºÏÔ}¯3«¡œš¯ça­Ìoóá¹ÊRå‹ øYPE‚ÿl¨x§ñ P<B^]*h‡Ûþµ7oÅÊb±p×]w±hÑ"®¸â  ÔlÇ€8tÈyòüñãÇY·n'N$55•ÔÔTû²’’’&‰¤o¾ù&:޹sçÏc=æt»‹/&==Ý¡¿=ô‹/&00¿þõ¯®²WY,^}õUžþyBBBxþyÇÏ­’’&д5Îîðä9ru\5qöF¬Üá©8w•X©T*† ‚^¯gܸqÍ®·~ýzV­ZÕäýýû÷3gÎ.\HTTÓ¦McÚ´iMÖ«¨¨ðhr¤;±êjcl ± Àb±ðÕW_Ùß/--eÍš5L:«ÕÊáÇ=ºß®+wdz§âœ‘‘Á·ß~Ëu×]ǰaÃøàƒìËJJJšMmË熷®ÁÆÚz¼m±sçNfΜÉÃ?̸qãÐjm?WTT°víZ¦OŸŽJ¥jvâwµå½òÊ+DGG3}út&OžÌäÉ“–—••q×]w‘—×üÿ»»«#ǤB!„BˆÎ­Ó'(—”–ñÙ7?Чwbc¢ @¥Va0Ô’WPı´t~ÙwCmçLNxë•ÅDFEÐ-.šå_¬âÐþ£Í®kµZ™ßSŒ»r,‡$BphV‹•â¢NžHgÃ[X÷ý&,ç_xìÝu€_O»‹k¦Odìå£Hì›@`pÆ:#啤ŸÊâ—ûP©T˜Íf^ùç³ JIvù¸þx÷ŸÙ½c_›÷Ûœgþô¿ýÝ-\qõeDD…SW[Ëé´L~ܸ…BáðEÙlæÙÇþΖuÛ¸îWSHع9ùlÝ´“¥|A‰“ª îÆÙjµòîë²îûM̼q*)#ŽV§¥²¼ŠÌô3ìÙu€²Òr{OÄùØá4¦]?™?í"÷œãÌ埯âÊÉã8›uŽªÊ‹WªüÛ“ 9›™ÍU×\NT·(êjkI?™Å– ÛšÄÙf³™—ž^Äú63ãÆ© ’Dph³…²Òr²Ïæpôà vnÝí´m[Î/x.V®\¿ž²:3µRIJD(A:-eµuì+(fɱSœ¼ 9¹ÞÂ~»æ'®OìAJD¾>j5TM”×)6Ô’YQÉÏ$X[­VýéÆÅF1 ,˜0‚uZ¬X)6Ôrª¬‚ grX&Ëc¶zëÀ1"õ>Äøùòíé,µ\Í·Údâ›v2+±WÇÇà‡B§Ê*X™Í}C’Ð(›Ÿàï¿da1×öêNB?¾j5F‹…²Z#窪9QRÆ®¼¦Éèf«•ç~ÞÏ–ì\®Kˆ§H>j¹U5lËÉgÙñÓ”Ô6óK#ߥŸ¡¬®ŽY½{ˆ¿FMÉÌɲr~ÌÎCã#!Và½C'X&‡é ñ ‹ %B¯G«RRYg$«¢Š=E”Õ9îۓ稣íÝ~–nüŠq“{3tT,ñ‰!éÐhUÔÖ˜(ʯâôñ"²3Ëœ¶7TyúÞï™ùÛ! CX¤*µ‚ªò:J «9v Ÿ›2¶uWþ¹ ž˜»Šæ aÀð‚tÔLœ«äðÞ\vmÉj¶íþÙÜ2®ù‰<Û¾>ƒ¢¼*F]Ñ“þC¢ˆìæÞWƒÉh¡¬¤†Ì´bvlÌdû† ¬ÍüÍà 9•XÊs1ÚBÝ®±V{ôX[£æð Úa¶*É•ÿk£"êÖj(¾ßVIY?´É  k˜ Àxêv‚É“·,¼«ªª*î¼óN®¸â f͚Űaà Ãd2‘››ËÞ½{ùæ›ošMN®7oÞ<î¿ÿ~¦L™BLL ƒ'N°víÚ&Ï X­V,XÀŠ+¸õÖ[IMM%&&NGyy9§NbÇŽ””4ý¬Üµk“'OæöÛogôèÑDGGLee%¥¥¥pêÔ)¶li:y|gðé§ŸR\\ÌìÙ³IJJ" €êêjŽ=Êš5k<ú|…;qv‡'Ï‘+ãª1Wãì­X¹ÃSqî ±²X,ÜyçLš4‰aÆAXX‹…ÂÂBŽ=ÊÊ•+Y±b‹óß¡;wîdâĉ\ýõL˜0¤¤$BBB¨««£¬¬Œ´´4¶nÝzÑçÐ\áN¬ºâ˜jËï2o\ƒž:Þ¶HKKcîܹhµZ"##1›ÍöäÞ™3g¶jËíÅÕsd6›yðÁY½z5¿þõ¯}Ú`ˆˆ°0ÀúôÓO7™QªÓWPíïÞÛövþ'Hœ…B!„B!„B!„Â{¾¡èFß@Ý®½Ü›Ž§ú+Û «sNËÕu…B!„ø_wÛm·¶JÚûöI‘!„B!„ÂIPB!„B!„B!„B!Äexo0Ö`µ˜PE%¡»ô>~a˜2wb:¹ÉÛÝkúi/a)ÉÂ|n?–Ê|0PD£Iž‚fÀ4L'Öa­.örO…B!„ð¾7ß|“ŒŒ ~ùåòòò¨®®¦[·n̘1ƒë¯¿€ï¿ÿžÂÂB/÷T!„B!„èœ$AY!„­2wP?îHNtxoöš)¯3z©GBü÷»k`_¦öŒsx/H§õRo„B!„B!„¢kÑûê^cÞ³¥cXõ„—zÔΔ*Ô —‚Z×ì*æ¼cÖ½ØB!„¢sR©TL˜0®ù¿Ÿ>Ì“O>Ù½B!„B!ºIPîD~<°Ê+û½lð5^Ù¯Bˆ®ÅO£ÆOãø§ƒB¡ðØö—n™í±mu·ŒûØÛ]áΘôÔùõÓ¨ ñiþF˜B!„B!„Bˆ˜ X å(4z,å9˜Ò6R·s1Öºjo÷¬}(ÕÔnuüHÁq(|ƒQ¨´X å˜óc:±ã‘•`–Ég…B!„Ðh4¼þúëŒ3†øøxÂÂÂÐjµ”––räÈ~øá¾úê+ŒFùûY!„B!„hŽ$(w"’(,Äÿ¶k–¯õvþkLüjµ·»ð_å–6wÌ~$aWt2aL¾¶÷¯í=âín!„B!„B!D—Tó퟼݅Žeª¥îç©ûùCo÷D!„BˆNÏ`0ðöÛoóöÛo{»+B!„B!D—¥ôv„B!„B!„B!„B!„B!„B!„B!„]‡$( !„B!„B!„B!„B!„B!„B!„B!ZM”…B!„B!„B!„B!„B!„B!„B!„­& ÊBq à@R.LBŸžÞîJ§Ȱ‘ƒéÙ;ÞÛ]â‚BáíˆæøúkñÔy»ÿ3äZB!„B!„B´–BŒªû”a ÞîŠâ@HH©©©$&&z»+B!„B!„B!„W©½Ý!įo›Áýº»Éûé§2™=óžVo'i`_žzi>z_^|jÛ·üìÉn6ñŸU‹ñó÷ãEr:-£]÷Õ|½î4Z o¼ü.§²¼Ý!:µ¥“ÇëïëtÙu+ÖSV[×bû„þaÌy0•¾ðÙeíÑE¯ú`Í-è|œÿùùöß¶²åûSÜ£‹ ÷å®?¦{B0a‘~¼÷òv6~—æòv&NïË s†b±Xùô=lùÁõc<²W\Û‡>" ñ¡¶ÖDY±Ü³åìßyŽÍ«NRk0¹¼ÝΨ-×¼”dföîátÙó?ïgMÖ9OvQ!„B!„BщøÏ]*-µ_¥®è´·»#D§6xð`-Z„¯¯/>ú(7nôv—ºœmÛ¶¡Õjyî¹ç8yò¤·»ÃwÜÁã?Þäý´´4&OžÜêíÈØèü¼uŽdlü÷ñÔçFWñ¿v¼îX !„B!„ÂURAY/R*ÄvA©”-™sïmÄv!4,„ß?øÞ) ºùû¢ìb¥T &3åuF‡V«µÅ6*µ’»ç!¡/¼-“oH’ ²€€–¡©±„Eúµya‘~ÜñÇQ†ø¦ç®?&0ØÇ¥müö£xtÁDF]ÞƒÐ_Tj%¾~Zbº’2:ŽßÎI`ˆkÛì¬Úz-Ô8»îÚ¿»B!„B!„B!D—2oÞ<âãã çÑGõvwD'"c£ós÷)•JâããQ*]{dPÆFÇië9B!„B!„Â[ºDe¥BAR¿Þ NîK|\7üüô˜L& ‹J9–všm?ïÃP[ëñ¶B´§‘c†óükãã£ãêÔë©©®ñv—<îëÏV²jùZûÏwÞ7›ë=Íåí˜ÍfûkS£×Bˆÿn#£ÂyvÌ0|T*&³†S×¹þß:pŒå§]«8~ÉeñÄ÷@£U1ûÿÙ;ïð(ª¶ßÛ³»é=$IH¡*E@@©¢"/”×®X> ¯ vŠŠ¨ ‚Ò¤#Òé½R!!½lýþX²É²»I¶$=÷uq9™9Ïœ>³Î9¿çyä*:öˆfÆ›¹p¾¬!Š À›’IH #ºe¹™Å¼÷ÜúË«¢Lo=–H$(U²Ëër"(T¤†3™\J`ˆš¢‚ŠzÙ÷Ð’A7´©5Ma~9ç²JìÎ7fÿz wçÂŒ½‡™±÷°Í¹…Ãúä£jÐò @ @ üS¹V3˜×Cß®5ÍÿÎ?Éš²Uµ¦iJ:ûtájŸ¾tòéD˜,‚<ãynÏÛ ¶~R?> ÿ‚$e2O{œõåk­Ìî"Qù¡¾ùSdI”/zñõµ$–"ï‡"i0²fí‘h‚0*1]HÇp|ús1WÚ«œ!oa¿XŽóîÝßöi|ï¿{3ä?•[ßK‘ šAuHCÁ\ÆlÐmƒÒŸÁx¶ÁªÑhŒ5Šwß}·Îtdذa¯ ë±Q¬¿ÿ#øþûïùù短?þøãÜqÇ.ßGŒËOú¨OŸ>|òÉ'¨ÕjÚµkGYYý× ÅØh<é#WñÖsãJáßV_Om%@ ÀU®ò¸›†‘œgsN¦TNtT8Ú§ðùìŸ(*.õª­@Ðh´j|þႽN^§·ùÛf~ô-a¡øø¨˜þöçÞ*ž@ ¸ÌÑ(äøÈþV€­ëN‘›ŲÛÛÑùêX$hU3ŒHdþWvãx‰Á7&í@A^Ã:Ëx`Ô<ëq‹ø`ÞøÊñƘéÇ/›UBx”/™§ É8]Xoûk†&Øü=ç“l\uÌ®¥y\ j¡mcö¯·hª¹ @ @ °E#Õ4uܦª=ÿô4m•ílΫ$ʵ–Çðvè{$*kw8èí|=Azä;HÃë•^=r*òÖ}lÎI”rdÉÈ"’Q¤§ì‡ÿb.9×Åü Q¦ßÝ–ãÒˆ“%àÿ(hÿÔ8)Q‚Ô‰  9ׂY×¥¾¼™6m‘‘‘¨Õj¦L™ÒÔÅxN‡N§³ùÛÄØ¸üñ¤´Z-jµºÑóÔOúÈU¼õܸRø·Õ×D[ @ @ p•+B ¼gÿaBC‚عûéY”WTà§%­] íS ôgpÿ«™·h…WmÁåÁ±Ã'øï˜‰M] @ hpNÊã½çÖÓ¼U #ooGL«@}»·©‹%ð]¥‘ï_F¿¡ ˜L&Ö-9†Ñ`ª·}L\ õøÀ®l–ü°ßúwA~9'÷jy/Ä\@ @ hz´‹Ã½ñÔùǦ)7_~NñFøŽâAÏ£(H7¤³¢t»+ÿ&Ãp–RSí‘}ݵ•!ãF¿›y `"¾RßF-³ÛHe(;܈²×ƒHTõ/³þÐoHƒbÑï_Œ1s/æŠ"¤¾á(R‡"OŒ4 ªÞ©X>¹aÊ-øW! … 7)èAñtÇéžÍM–cý~(ùÎ’^"E*hÇ‚!ýŸ'Nîܹ3&“ãõ†Ú"œ›EjR>*²³rÙ´þOæÎú™ ùm†ß8„´«Ú—Ð’ˆÈ0Ô*Ê+É8“Ɇ5›™?g1¥%öBžÛþ;†û½€1×M +#Û.MÚUíùðË7xhüSìÙµß.«ÄÅ·à›_>µ;¿rëÏvçvüù7Ýó¬Ãû¸ÓVÞ 1ÇÕ˜ÛF1ñé{íΟ<~š;nx N{wÇFMZ´jγSþ.ÝÓ  ¨ ˜ÛwóýWó9vøD­¶îöÑ„n¥K÷4B#BðG¡TP_ÀÞ¿2ï»…ìÛ}ЩmphݯîBû´TZ'¶"²Y8Z_- T”W’•‘òE+™ÿý¯v¶r¹œÇ gаþĶˆ‰„ô“gX¹tH$µÖµ wžuî2¬UsÒ‚‰ ð#\ãƒZ.§Â`$£¤Œ?2³ùùØiJõ§öw¥$Ð9"„0üU R)•:öå]`ÞÑSìÏsÞGj¹Œã[Ò«Y8Í}µhrÊôŠtz2KËØ™›Ç'ãÃÛ*b|µ¼Ø­#ѾOçó}‡ëÕfÂKûÐ U*Œf*u¤—²?ï+Ó3É,)³¦Wʤ¬ºa0¯üù7kÎdÙÝsõèÁ(¤R>Ú}yGO9Ì·wt#ãbi€LFvY9›³rùáð .TÚï"iåïǬAWÛÿmÔ »s;róø¿ Ûæ›ÀMñ-éL€JI‰NÏÞ¼ üxäûò.8´ïô‘7©¯ S®Òs`+:÷jN«ÄüUH$Š.T›UÌžm™¬]|”’¢*±@¬ IDATJ¾^9•ýÏÀö]›1gÃvçg½¿•¿²9åK‡nÑ´íIt‹C5øøÈ‘É¥T”ÈË-%ýØ~üb¹™Þß¼ØþªfLzgÇœgòýËê´Qªd ‘H—ޱĴ Dã« ¢Ü@qAç²J9°+›?¤¢ÜùócàÈD†K%$BKy©žãϳü§ƒìÛa?Gœµ3ÀgolbÃòãNóqfÛ{Hkzimw~òË9¶ÿ\­¶®ô¯ÕÆv×Çd]q²@ @ Aãã{Q \h*tË^%Q1X{ýÔh£L"H„=…ÆBŽêóGù–د‘¹k«‘jy%ä5¤Hy1ÿy~+]Zï²zb#oN´<†3†t>)˜ÎŸ[X³±Áóõi` Ò€hLg¨üãcŒ§ÿÄ÷áuõ´vþ­Î˜±yB$r•%t­ÙËBk©eÚ-ÈS®G H0åŸÂpp9Pûz–ªç½Èb»!ñ Câ€D¦Ä\vcænt;çbÌÜcg£ìz'ªÞP:s¦ÂL»4²æÑŒ™@ÙwcÌøÛæºD¡AÑi,òÖ}Å"Qj1ëJ1Wb*ÈÀxf;ºm߸×^®oR£H„þ˜ •˜Ë.`Ê?…){úË1œñz¹kø(;&(xŒöŸá𻸤l8…¯3}¿¹üÊ®AÑþFd‘)Hä*LEÙNl@·ý[Ìeù “©Üu×]<ÿüóvç=Ê!Cjµ}õÕW7neeeŒ1‚“'OÚ¥yï½÷9r$ééé :”²²2wr •JÅxôÑGY²d‰]šƒ¢T*™2e _ýµÍµ[n¹…:œœLxx8Èd2²³³Ù¸q#Ÿþ9gÎ8Çr¹œñãÇ3räHZµj…D"áĉ,Z´I=ÖÐ;tèÀwÞI×®] ¡°°;v0sæLvîÜéÔ.,,Œ¾}ûÒ¥K’’’ˆŽŽÆÏωDBYYgÏžeþüù|ówžžŒ ð¼Áý¶r—±cÇÒ­[7Ú´iCTTZ­–òòrNŸ>ÍŠ+˜={6Åŵ¯o4ˆqãÆÑ®];Ôj5¬Y³†/¾ø‚¼¼<§v†;3ЪU+|}})))¡  €ôôt¶lÙÂŒ3ll<é£ÄÄD–/_nw~ï^{ÇÊ›7oæöÛo÷J¾5q§­¼1®ÜÁùºZ_OúèrÀÝù+‘H6l7Þx#mÛ¶ÅßߟÊÊJòòò8qâ»wïfáÂ…œ>}ÚÎöÑG¥W¯^DDD„R©$//;vðõ×_³k×®†¬²Û\IsÁ¸Rßÿüç?L™2…“'O2pàÀZïÛ«W/fÏžMNN={ÖÏÉR}ðôýëî\pç½à <Í×ÇLJáÇ3hÐ RRR A¯×sáÂ<Ⱥuëøá‡ì욪ݵõt6Uÿ @ AcsE”k£EL™Y¹. Œ=±u…‡ž¼›ÄäxÀ"ŒÝ¸n+û÷8úóñ¬wh×Üæ¼Ÿ¿/~þ¾ÄÄ6C&“:(§´kÃKoO"*:Òæ¼B!G­QÙ,œ²Òr¯ ”ÝÍW&“ñì”ÿcÐÐklÎǶŒ!öΆÞ0ˆI_bßßöÂ̇žø/Z_[WÇZ_ ‰Éñ$&Ç3zìp&M|‰CûÚ¤ÙòÇv«@¹s·,ùÅ^ Ü¡s[JKÊjí¯ÆÄ“¶ò”¦WîâîØ¨Élþ bàuý¸fPo^þ=‹x÷<í£î½¯"¹m¢Í¹°ˆPúîM¿k¯æí—?`é‚•mgÎý€°ˆP‡×|ýä$$Åá³ÒÇîšÖWÃÔO_¥m‡d›óUmU_\}Öyƒí“Ð*l_aZ…œÄ ƒü¹¡u þ·i‡/8Þ4Õ=*Œ¤ ›saj®‰‰¢ot$ïìØÇ²Sgíìü• >ê×þ¾6çý” ü” ¢}5H%‡VOl/­{b?·&ű13‡µˆÞe §¥2ü’wŠ‘5‘5]#B)ÕœŠŒÝA&‘ðÌUí¹6¶™ÍùX?-±~­¸¾e ÏlÚQ«XØ]îmÛ†[“âlÎù¨èIïèHÞßµŸ…ÇÓíì¼ÕGMbÛ0žÜ‡ÐH{×ÿ¡‘ZB#µ$wŒdýÒc^Ëóša Üót§×}Ôr¢[Ý"€fxÓ€;‡ixîýAD5÷·9¯õU¢õUãO»«¢Xóë¨E ÜªMˆõX(#­G i=bøêÝ­¬^t¤ÁÊ%ÑcR @ @à}‚dAä‹lœÑVÙŽ×Bߢ™<Úæ¼¹†(y¥¦R‡ewmoöC€4íÛ\úzb;¿ä'èö³©üL˜¬‘§:_OÐíž1ç †ÁlB¢ª™kCÝcÎA¯‹“%J-ê§#kÖÞ6ψ$dIu—­U/d‘©¶÷ô GÞæZ䉨X9ý>['¿†“›¬eYlWL{Úß7¦f])Æ,[!‘D€æ–™HCZÙž÷ñGâã4°9©´AÊîÔ@¢Pã3ü-»ˆÚ…I€i@3hÕsE ºs¼^î*üõ0ËqÑ»P¹Õq:ykP\\â, f}ƒÉ© Ÿ!/¡H¾Îötp ”Á·£h;’òÕ!¿2˜2e ]ºt!11‘éÓ§3zôhtºjGăfäÈ‘˜L&ž|òI¯ˆ“½Á3Ï<ƒŸŸýó-66–qãÆ1|øpÆÏîÝ»íÒøúú2kÖ,ÒÒÒlΧ¦¦’ššj—þRžzê)î¿ÿ~›s¡¡¡ <˜AƒñÒK/ñÝwß9´]¸p!‘‘‘¯ùûû“’’‚F£©³ …'í žµ•»üïÿ³+³¯¯¯µo¿ývî¹ç‡Q™LÆ;ï¼ÃÈ‘#mÎÇÅÅÇÍ7ßÌ=÷ÜãPèÈ?þH|¼í>Œ€€hÑ¢2™ì#Tò¤­<WîâI¾žÔ÷JÅÝù«ÑhøøãéÓ§ÝyFCóæÍéÛ·/EEEvÎ'úõëGûö¶¿ ###:t(×]wÏ>û,óæ9üÒØ\‰sÁÜ©oNNÁÁÁuÞ?4Ô²7.+ˉ÷7ñäýëî\hª÷‚§ùvìØ‘÷ߟæÍm÷¢) 4 ÑÑÑ”––:(7E;{bëÉü·½÷@ Á¿›+R ì£RJ«:š^o`ùê?ÜÖ]Â#ÃlþŽˆ «U´7þ¾ÿÐ"®9zž/¦ÏfËÆíä¢P*ˆˆ £MJ:Þ*æ\½|=‹þâ¢ÚvHaƒ·À[Ó_âΛâ\Îy‡ù¯_µ‘Ÿ¾[HqQ Z­†}®bìø  âí_æ®›&ï\µwâãGNr.7°ðºtOcÉ/+ìîÙñ¢@y×öÝFo4'§3àªQôé߃ßšÀ°>c)/¯°Ik2Ú/Ú{£­Ü¡)ÆÕü9¿²p^u”Æû½“1·rù>®Žšèõ~·Œ k7S\TBBRkþûàm„G†ñÌ«süè)ޱõíi}ýé÷ 2ÏfSR\Š\!'95‘û¿‹­šóÏ>ÈÆu[),(²/ðE/Íû÷bÅⵜ8vŠ¢‚bôz=~þ¾´Šoá°ž~ñQ«8yé‚•ü¶x ¥%¥$$µææ[Gß&ÎÎÆ®>ë¼Áú³ÙÌ?zŠb½\N¨0nIlE°Š·®îÂWm$¯Â>:ç×ûb0›É,-£To@.‘ÀýíÚëçËãi©lÌÌ¡Hg»‹a|r<-ü}Ñ›LÌÜw„­Ùç(¨Ô¡J ×øÐ&(€2'‘›=±­I¸ÆVd¡Q×*Pžš`'È/àÇ#'I/.E „kÔ¼Ô½#*™¬Î|]åž¶‰Vqòš3™,>q–b½ž¶!Ü•’@ Jɽ:3aÕFÎÕxþ**æÚ–grïfLîր΅¦â’g±És‘qmâ¬âä]çòøbß2KʈñÓr»6´ ⑎)ìË+àØ%óÈ[}Ԙħ†ñ܃P(jïÃSGó)*¨n犲걭TÉ­ÒM&3zý;Ï`°}')”õ3%E•œË.©WÚ†fÂÝíÄÉ—’®¬Þ}/嶇¯bçæ³äŸ«ÞtS³% JUýçZMÛšÑF½ýoSÞö¯'¸;&@ @ —ÁRËæp¹¥D…Î\¿og ŠD>ŸFªÅ„‘å¥ËØP¾ž³†3H‘( ¢½ª{+íE{žØÓZ6Àç›ò˜ö>‰Š$Bd!”šKÙ_¹—ŸŠ`KÅ&‡eöÄ6Ïxž?ʯWÛx3_O0—æa8¾Á+÷’¨|‘†% L‹<¡?f}•¿¿ï•{×ÄgÐóVq²~߯è÷/Á¬+Až„²ÓX¤a‰µÚë6&¦Â Ì•% •#‹LAÕç¤Á-ñ0 Ãñß1—W;¿5;й$‰o8ò]Ñ;(Ëc,âEcú_`²ýþªì~·EœlÔQ¹ñS '7a.»rR¿HdI˜u #ät§¾ªkŸµŠ“õ‡V`Ø÷+¦’sHä*$1¨¯ŸRï¯+ÕD3|ï²—þ¥?9O«ìT}\Qß à^BuõCVq²þÐ ô{`®,BÖ¬ªž÷"Q¡¾á}JgÅ\œÛ¸…sÀìÙ³™3§ZTþÔSOq×]wÕ˶²²’Gy„… ’œœÌóÏ?ÏäÉ“ áµ×^`æÌ™ìرÃû…÷ß~û¹sç’——‡V«¥K—.Lœ8???¦NÊ Aƒì‚¼þúëVqò¼yóX°`ÅÅŤ¤¤pçw’œœì(+î»ï>«fëÖ­L:•ôôtZµjŤI“èÔ©“'OfçÎÖюصk .äÈ‘#\¸p½^¿¿?‰‰‰üý÷ßNí\Å“±QwÚÙ[må.Ë—/ç믿¦°°???úõëÇÝwßMXX_~ù%Æ #7×vþ>õÔSVÑÝâÅ‹ùá‡(**¢S§N<úè£óÅ_0tèP²³mƒ%Lœ8‘øøxt:ï¾û.ëׯ'??¥RITTíÚµ£¤Ä~mÕ“>:zô()))€%šéûï[ÞÑ;w¦¼ÜvïÙ¥{£<ž´UîŒ+oàN¾îÖד>jJ<™¿S¦L±Š“/^ÌüùóÉÉÉA¥RÑ¢E ¦M›†¬–},|ðƒôôtŠ‹‹Q(´oßž§Ÿ~šÖ­[óòË/³jÕ* œï¥iL®ä¹àîÔ·ê¿þþþ( ôzç^gªÊÎÚÊS\}ÿz2Ü}/xŠ'ù&%%1{öl´Z-F£‘E‹±fÍÒÓÓ‘H$„„„––Vg$óÆlgoüÞpg6Uÿ @ ASpE ”}|T¼ð„­«œÜóÌûu%Y9çÌÖSÖ­øƒÄ¤Ö±ãÏÚ=Öµëhùè¸ré:æ~cëùû\Îyöív÷ÉF£USQQÉ“÷¿ÀîûìÒlÛìý!wólÎØÛG°lá*Þ˜<Ízíè¡ìܾ›¯ç}Œ€¸•·^úÀaþ‡cï®êû÷bû–]|0ó ‚‚¹ó¾q¼;å#›­lgøCèÖ«32™Ìæ#®L&#µ}ÒÅr×þ±ÄÌf3ºJ‹'aƒ¡:?No=ï oµ•;4Ÿ2™L6mâH°]ÜUÌþâf}V½ØrôÐ ¶oÙÅ7?‚Ÿ¿/¸•çŸb½î>ÚòÇv»s×oåôÉ3|·pJ•’n½:;ŒÞl½Ç†m,øq‰Ýùƒûì#{¶NlEÿÁ½˜3k>Ÿ¾÷•M™W,^˪m P(ê~]¸ú¬óG Ù[#ïüþÊÉcZß®©”ŒO‰ç½ûíì¶fÛ?÷7eæ’^TÊìÁ½Qʤt‹ cUz¦Mšv¡–h«Ò3ùáqú¹ò öç9_ÜðĶ&ëÎf‘hYéôì<ç÷ý•Å›O®v¹,ûvdqòPÅE•è*ø¨å„7óà¿<HJ»WG[9øw_¼½…ó9%ÈåR"¢ýII‹@맪ó^ë–eՂØÍ0êŽvtë×¥JF·~-X>¯úwZÍvnÌ_ «w™kÚ~³æVk?oZu’Ï^¯}C¢·û·¾x2&@ @ —rKT£‡ãáÀÇ(6sDw˜µå«X\²ˆr³c‡ÊÏ?Fª¥Â\Á#¹°«Ò>ØÖŠÍ^µ ‘…ÒRaù.=XcÍT)QrµºW«û0³p3 ?ñš­'4U¾ÞB¢òÃ÷aÛõ*Óùc”/ŸŒ)×~Mʤa ÈÛ\ €nûl*7|Xgîô–â÷ÈF)œÞÃpÒþ»ªáøLù§ÐÞ5ä*ä-{¢?¸Ü6͉M(Ú߀¬e‹0·¦Y*CÕÎ’î´}ˆßªˆÒúƒ¿¡ûë[›kÆâܬëN}¥ámª·»çS±úMÛä„ë^N ìÓ´·ZŽËWAÑ{µ§—ÇZþkÌSaíi½‰Ô? e—Û‹`¾bÅ+Ök¦Ü#ÓÿB{Ç$>þ¨zÜKÅÊ)Înå*•Ê¡XÍl6ÛD8‹¨­fZWEnGeÊ”)L™2…[o½•-[¶°|ùr^ýu‚‚‚8räÓ¦M«ûFMÀÞ½{Ù¸q£õï¿þú‹¢¢"^}õUâââèØ±£ˆ&))‰¡C‡ðÅ_ðæ›ÕsáÀ,X°€ýû÷£PØ?s"""xôÑGX¹r%?ü°µ­óòò?~<«W¯&""‚ &ðä“O:-÷ºuëFò۳ǻÏOÇF®¶³7ÛÊ]öíÛg#ªßµk›6mâ»ï¾#$$„‰'ò /X¯GGG3aÂæÏŸÏ¤I“¬×8ÀÖ­[Y²d <òÈ#<ûì³6ùuîÜ€E‹1sæL›kÙÙÙNÅ\žô‘Ùl¦²ÒâdÆ`¨vÆ­Óé¬çáI¾ž¶U®Ž+oáj¾žÔד>j*<™¿)))Vñê÷ßouxQž}û˜:uj­åõë×Û[½z5ÇgÅŠ¨T*úöíË¢E‹<­ªÇ\ésÁUÜ­of¦e–D"!<<œŒŒ &MšDçÎyûí·ùë¯¿Ëø¬i¼+ï_Oßeî¾<Å“|§L™‚V«¥¼¼œ»îº‹íÛí÷:nØP·3¬ÆjgoýÞpg6Uÿ @ AS m긄Œ&[qRxX}{vA¥T6œ­‡|÷åO<ÿ¯ñÉ{_rÏsù´,+g)íÛX{¤¿šÄ·‰³FAõÙ‡"Ò†À“| íT&Å`0ðÕ§öNŸ8ÊÅkx}?äòúkêwïØÇÒ+<ì;Û5¿Y>„øúiép1ZrI© ø¨-QJBÐí ÙVµÑTãª!©klTap)õ\Îyþ¸€^ýºáãS-fkÈ>:s:ƒœl‹gÞfÍ£êmW†ô@W©ã›sí®F¨§‡MWŸu Åîóù,;y€A±ÑÈ¥’zÛž))%§Ìѳ™Vcw½à¢h>98¥óM.ŽðĶ&ß:Áä-»ølï!î]³‰ÂZœTÕßd6óîÎý6‚߆dP‹fH% &3_8fwýtq +N[ Æ6s©jãÚØf(eRô&Óví·‹°\a0òËñSt½$â7x¯‹´ž1Vá)ÀŸëNóÒC¿±qå Ξ,à|v)gN°yõI¶oHoв|ûávæÎØÉ’¹ûYùË!~ý~3ßÙ¬÷·5h¾õE&—"­1Î*ÊõœË*Æ 7QQnàô±|–Ï;Èü¯êö6ìÀyNÍçô±|>k3ÆÂù¸¤)ÿ•Âå4&@ @ žsZŠ=•sZ ¹?©}ºðTÐ3ÌšO+EœM‚² íTQæÌÂÏ Œá‰m¢¢õx~ÉÜ›sƒ3®¡ï™Lȹƒ½•§ªwÜGGUš×l=¡©òõf0Ù®¥ICâPu½‰Ò~ÅmY •è¶Î´O`2ZÊ㦠阊,Ñ×$1v×õ‡WY®©üÅt²¹&‹HA¢P`<µÅÎÖ\fq|*‹j‹DàVù¼MmõU$±*©Üüyc íí€Ìz(þ„:»Uz±YMìcVž|H¤`2 ÛbßV¦ü“èXÖ”åIC@Ú0±öîÝËìþ­[×0á¤çÎËòåQûo¼Á#<ÂÀ1 <ñÄv¢èË™… bº¸‡¨m[Ûý"ÆYÎVVV2}út;[£Ñè4JåÈ‘#Q©Tèõz^|ñE;AgYY³gÏ oß¾×ãr§¶v¾\ÛjÛ¶müô“%tû¨Q£löuŒ5 ™L†Á`àƒìÒ;vŒ_~ù€#FØí ÉÏÏ cÇŽ6T. Ý u©ž¾Ëšê½àn¾ÉÉɤ¥YþßtúôéÅÉ 'íÜ¿7ꚃÿ¦÷¾@ @ \QåŠÊJ&¿1)ïÍ`Æ7?ñçŽ=˜ÌfÚ¥$òßÛF#¯Åsž'¶Þà÷Õ›˜;ëg²2²ëL;ï»E˜LfZµnÁœÅ_pïÄñÄÄ6«Ó.­K;ëñòE«<*¯+x’oÛŽá뉣§ÈÉrÉzÓï–(Ø Iöjãµ–…`µFM|›V6×vmßÍù\KäÑÞ×t·¹Öñb2Ïf“q&Ë¥<Іn+g4Õ¸jhju±g—%"¯L&#¾Mu;{£´¾Zn»{ Íz›ù+f±zûBÿ>—O¿}ÿ‹Ã•Ê{NÚ¤ÄpüÈIÊJG:pWžu É™9¨å2ZØ;zÐ*äÜ–ÔšéýºóÓõýXyà  À'×ô° SUÞ óžÂd6ÓÊß—ï‡ôåž¶‰ÄøjëU&Ol/å÷Œlæ>IV}VøÐ…BΕW¸•—;´ ±ä{¢°˜œ2ÇeÜrqŽøÈdÄ;è#wèp±¾ò È«pìIøT‘eA#P¥$ð’¹äÍ>j RÓ"mþþéË]˜M#Bo Þýns6Üaý7éÖkñ)¡6׿l¸ƒZZ¯W”é9}¬:ÚzZ¦~7Š·¶%¼™îR^ª'7£Äúw`ˆw7Ý5ž´ó¿mL @ @ üÓù¿sðßœñÜ”5’Þgº3>{óK~„‘hy „}‚ÄÇÆ¦³ª‹õxqé¯.åç‰m ¬z³ï[ù¯³«r'ùÆ|ÊÌeì­ÜÍù÷SxQÁx£ï¯ÙzBSåë-Ì•%OëNÉÇý)›;ýîù`6!o3õ˜Ï@æ½õ,i„e Îxþf]™[÷¨|Qv» Í-_ ½g ~nÂ÷ÁUhþó•U<,‘«ììŒgþÂ\bYÓ·¶Ý°.kn,› 30œµ³Õïœ fÒ8´ ºúA¤A#–q§¾²ˆŒçŽb.Ëo”r^ŠÎ‰Bf€¼E= kù-oá ,ÿä®- ;¥*:¶ñÜ1«àûR 'þ@¢ðAžèŒ/ž}öY222ðóó³F£ûðÃ9pà@—Ì5ÊÊÊÈ͵8¶¹V%09t襥¥.Ý·k×®€%oÕý/娱cÖ|/ÍûŸFmí|9·ÕªU–½1†äädëùN,ÏýÇ[E—²víZÔj5)))6×fÍš…Éd"!!5kÖðÄOвe˨AÓãi[ÕFmãª!©-߆¬ïåˆ'ó·];Ë>´C‡‘——çVþ~~~<ðÀüðÃüñÇìß¿ŸíÛ·3þ|‚‚,ûF|||ê¸KãðOœ µáI}Ïœ9X¢0¤¥¥`ùÝZS8Zuýr({ú.kª÷‚»ùvëÖÍzüóÏ?7` mñ¤ò÷F]sðßôÞ@ ‚+Ò_yyég³H?›Å¡£'?v$ÑQ\Õ©[¶×ùÎÛÆbÛæ<÷ø«<ùüÄ„sû=·pû=·°ïïƒüôÝB~_½Éêy«&¡á–¨}ÅE%äç5ž‹`Oò ³ü¹31§åZõ‡P×>¦ÕI††…G­›LfÖ®ØÀ˜Ûo ÿ>Lç k»^ÕÃâémÛæú{fohº­œÑT㪡©mlÔŹÜêäÁÕÞÎ=í£–­cyï³)„E„ÚœW©”Uç#‘x'Ú,@pˆeóKnÎy¯Ýór «´zsJ¨ZÅáj]­ÃQæ IDAT"-ý}™Úû*ÂÔ¶‹*™ÌF°ê¨™·åœç…-»ø¿N©„ø¨¸-©5·%µf_Þæ=ņŒ»¨½Þ°u—‹¾ë2{›ª|sÊç›]C¸¢VÁ§I]È×Ò§Bƒùý¦ëêLï§TX£&CÓô‘'„DT‹§õz#Ùg‹›°4—?¾ô;“?L@°%šED´cïëÄØû:qxO.‹çîcç&û duQVV=†”ª†uxs¹#Ƥ@ @ Á?&èös ?Û+þä­Ðw‰’G1Êw4?ϱ¦ “…Pd*"ßèšàÀ[?iµ#B¥D…ÎlëIJÌ\Æš²ÕŒö½‰4ŸN^³õ„¦Ê×Û˜+Š0fîÁ˜¹Ãñ ¨Gˆ,"e‡Ñèvþà•<¤ZËšš¹8Ç=û847~„Ä/Üæ¼D®B¦ªyÆÞØlBxÊÎãP$ ¢rý{`¶¬)Ë[X6èOmu˜¯áÔÊ} ŸÏ ц¢ì6e· 3÷ Û1ÃѵÖ{ywë[%\65ïâ ý_Y8„|ç'€1ÃqzóE¢ÒZ’I ‹©>ö­e=×\ìÜi³©F;V¥÷6‰‰‰vQàš¢¢"^yåf̘@ii)_~ùe£–Á[”_\ËT©lÅú¡¡–þÊÎvÝ)wx¸eÞuíÚ•ãÇ×™>00Ð]³v¾œÛêìÙê5ȈöîÝ @X˜å·Š3ÑݥתêXņ xàxõÕW çÁäÁdçÎ|ýõ׬X±¢ÑçtCái[Õ…³qÕÐ8Ë·¡ë{¹áÉü­gd8y¹×A||<ß|ó ‘‘¶Î³}||l‚ÞÜ[å ÿÔ¹à OꛞžNrr²U€|íµ×P\\L||<Í›7çÌ™3ÄÄX~Ø]eOßeMõ^p7ߪèÕ………œ?ßx{ =iç†þ½QÛü7½÷@ àŠŠ ìˆ#ÇO‘žaYØIˆ«¯û\Ïmšë¶ró;yí¹wÙ÷÷AÀõ•©Ï0û—Om¢¶Z¹ø]ÍÜØâ)ò•\4®¯­«yÈ5V|w\þë‚C‚¬¢d•JIû´TþÜô—Kù5$ ÝVµdìÝû]&Ô56jÃ`0XkF†ô¤$ ¯N}–°ˆP*+uLûsn<žþG0¤çML3‘ÜlçÂgw©*‚Ao¨=á†BZýz“Ôè` ðr÷4ÂÔ>T|´û c–­gà/+¸~Ñ*î^½‰Ü²Ú# oÌÌá–eëy}ûöåYTµmC‚x¹{³®½šøçÑX=±u‡ªº+¥®¿îkcWn¬©ëùØðÖãEz1c“ÙŒÞdªóŸ£viì>òé©¶¬LGYiõ¿ÊŠêç–Éd¶¹VVªÃ ·ÝÔ••^Ä3–ðÛ¼ƒ”—êm®µiΓoôçÉ7û#“»6_jî»\9=ÁÓv®âß0&@ @ þ­¬-[ÍaÝ!ºút·¹VýMÞýuCwluæjG‚R‡i² D•Ú¶žÐTù6$†“›1fî@Ö²‡÷n\µ`ÔמÎ!ÔÃß´ˆu •T®{Ò/†Qü~J¦÷¥ôÛ[ë>ë÷/±ÜIŒ¼ÅÅ1/W!‹î€áÔf§¶†c¿SòÅp*–¿XÝ6ÍÚ£þ&Úñ?" óvd]÷ëk6\ÉK›ÖgÅj¸ð˜u †àAä8íÅ)‚,$šÆ+cõZØ¿ï;¸T*åÎ;ï´þ­Õj™8qbƒäUs=]êÆz§+÷wt^¯wý™SµVd4ÑétuþS*½mþrÅY;_Îm¥P8öfPUfOöí¬^½š>}úðä“O²s§%hB§N˜>}:Ë–-³‰Ø|%ã¶òfzoQ×xnô=]M„'ó·¢Â²'G.w=®ŽD"áã?&22’ŠŠ ¦L™BïÞ½IJJ¢C‡ >œ¬¬¦s´âˆê\p†'õ­Šb[%@2dùùù|ôÑG 8BCC)//w[äîM¼ñ.kª÷‚;ùºÚ¿Þ“vnèßuµÅ¿å½/@ WdåK)**hÐjÔjÛÐèõ~[¼†ß¯!²YÃFâ–Ûo E\s>üòMî¸áΟ«öžÞ"¤òó÷% П‚¢F)§'ùž?—GBR‘ÑNÓDDU{ÊËÏs-ÄfØÅè¿Dÿ=vøûv¤m‡d†ŒÀŸ›vбK;JåeåloÀÊ6ÂÖz虺­œáÍqåÉÇ)ÓE˜ÄU5±êµé¸=飄¤Ö´l À[/¾Ïªeë­×ôzG§´FT`oQŸ2_‰„ÖˆŽœ_Qq !П–þ¾¼½c«Ó«½rêM&ŽQj¨[¬­7™Xq:ƒ§3ˆÔªÚ2†1 ­háïËû}»qçª?8_^éu[Wɯ¬ü×øÔ™ÖQ9Mf3R‰­ÂµŸ ç+*‰"µÎß­‘5Þ»5û¨&5£×gîWå»îl¯ü¹»Þå½”Æì#O¸W…Z­UãOöYןÑ6ÏæFÔך.¯J¥µgþ½ËlþîÐ-šIï àÄ¡<&߿̑™ ùåÌž¾¹Ÿí¤]×(ºõkI×¾±¨|,c¼SÏ®»9™%s÷»R•za4Ú y몯·pµ=igoI@ @ ÁåOºá4m”I„ÈBlÎç-Q”ü¤þJ)0Õ ÆÛóÆj'¯QòhÎí¾Ê/†N5˜m×<±õ„¦Ê·¡1—ä Q×ÒÖEL¥ç‘ÒI@3—mem†XœW¬|ýÁ߬×ÌF=æÜØu¥µ~>5;‚1s²fí‘§Åpj3ò˜Î SbÖ—apAÙŠQþÀRô–"õo†¢ÝHÇ! i…fÌg”~s æï8*ö¤¾æÂLˆLmÑ´ëTn…‚g!è-ÇBð{w/˜/Ñ‹ê÷^<‚O/(_Õ8å«Ï˜”úGYÍ¥a®¾T­¸ê|uâĉôèу²²2–,Y˜1c¸÷Þ{ùý÷ßÙ¶m›W˨Óé0™LH¥Rüüωpnn.)))ÖŽîØ.[¶ŒÇ{¬JW?<Ù›áîØp•Ë¥­Q! /¯z_V}ÆF³fÕÏ…sç?Ûõz= ,`Á‚ÄÄÄpóÍ73aÂâããùþûï¹îºëÈÉqî<ÃÝ>2™ª×+Ýé_WòõV[])x«¾žö‘'¸òÜðdþž={–:¸%ÊKII!>>€gžy†_ýÕzM¯×sàÀJJJêu¯ÆXþæ‚;cÃú=z°”;vìHLL ß~û-K—.åÿûC† aóæÍH$Ž?n3_š o½Ë<}/4V¾Uý@PP.xgj]xÒΗÃï¦ê_@ @ hL®øÊ!Áw¹eåµG½ô¶­+ôГÿŒ¿‘Èf3s˜ùÑ·Ü;îq ~þ¾\7r Mš=;–”ƒ‡ð¸ÌõÅ“|÷î²Ø¶NhId³p‡i®îgñB]Q^ÁÑC'\ºϾ]‹´ãGN:L³àÇ¥ôx5Á!ôЀM¿ÿIe¥Î¡7¨ò  õÕÖ™¾¡ÛÊÞWUí©V»î ò¢Pëë××õuÙ^ÚΞôQpHõ&£‡½Ówõ¡ªÌI© 6¢mwñôYç-z^‚ÍfN[Ïù¨¬ÇǼäÄ!»´œ/÷åþµ›1˜Ìø) iÓ ¶½£#›ØªV0ÀÁ|Ëæ­ø@·DÊy…Ã-ý|]²Û{ѱA\€N€ôº8G* FŽ:‚Îúˆ¤«òíŠJæïþžôoCsxíÇé1ww¬—ËK©¬0ZCÂ/¼@y©í;64µqæ*’‚`½ÞÈÎMgùôµ<>vùçª@¤õh˜þ-)²µ‡G5ÎFšÆì_oI@ @ ÁåO¤,€bS±Íù¿+w§“×k‡»tOOléZ{©¯v˜&Q‘À)ý)¯ÙzBSåÛÐHƒ,yÍå…^»§1Ãâ”T‘‚Ä×ñœ3$šàêûäq» ú¿ç Hèo‰¤œÐÃñ?ÀP§¦¦¢L*7}JÙ÷ãÁd@âã"Õµñ^žÔ×púO¤1Èãûy­LîRñ;}h9V´¿íÓèöñb Dí4Úë˜ ·"×DÞº/f}¹Gc¯¡(/·8õõ­ÿúL÷îÝyøá‡xöÙgyî¹çغu+R©”©S§6ˆˆ87×âô JÖìØ±€öíÛÛU]±íÕ«>>®¯Ïz‹ÊJËsI£q}mȱá—K[9¢ÿþ€e?É¡C‡¬ç«Êœ””äT|7p e/WYY¨3¯³gÏ2mÚ4FÁ` €o¼±Vwû¨Êpk¾º’oC´Õ匷êëiy‚+Ï Oæï¦M›ˆåÚk¯uÉ644Ôzìé˜ñä9é ÿ„¹àÎØp§¾UåæÍ›3räH-ZDVV;wî¤sçÎôêÕ €#G.ßV ñ.sç½ÐXùþõ×_€eé 7ÜÐàeªÂ“v¾Ü~o4Uÿ @ ACsÅ ”“㈊°||:yúl£ÙºÂ¸»nâµiÏóàÿeæÜô¯5½\î\„uòøiŠ.Šíƒlïshÿ«àñž‡o§}Zª‡%¯žä»réZŒF#2™Œ Þfw½Uë ÞÿbÚuœD6•;®E6‹`ð0‹ vÓú?©p¡sÝÊ?¸_€B!g䘡\}E@ºvÅõ®‡;ädW{ìÚ³Sé½ÕV®âÍqu>×âY6<2ŒðÈ0—l«Ú+4<„àРzÛy26‘Ú>‰7`Å’µ6íìIå׈✜Úx^Ék–ùÿž™¢NWŸuÞ@.±EjÕ jañ¶¹93— cµ8ïB¾N p=¿Z"žž,*¡Xg\¨”^µ­ÉÚÄ1¥G'hŸÄçý{â¯T8M»öŒeG†L"a|²ý¢½T"©U×½Œ¢í$Ú$*?dQíP]óH¯K5¥s,Beí­ êvI“% €" ü‡ZÃa{‰šcRÙó>»ëÒ8)×_L»L—_ôÌÌLÀ)6,¬îµûÀÀ@¦M›†T*åÇdñâŘL&ž~úiJKK‰ŽŽfòäÉ^/çîÝ–çä!C\DVÅÂ… ­k诼òŠKkè¿üò ƒàà`^|ñEÖß=!;;€¨¨(¢¢‹èáêØp—Ë¡­ ûgZLLŒUtµfÍÁhͱá( cBB‚ÕvÑ¢EvûvjÛvôèQ ,ëóAAµï‰q·ªìz÷î]o;wòõ´­®4¼U_OûÈ\ynx2-Zdu>ñî»ïrÓM7†¿¿?iii¼ð ç&Àùóç­ÇíÛ·¯wžŽðä9é ÿ„¹àJ[yRßãÇc0ˆŽŽfĈ¤§§³k×.kZ‰DÂ}÷Y~w>|Ø+uóOßeÞz/¸Š»ùîÙ³Ç**üñÇéÒ¥‹WËå OÚ¹)o4Uÿ @ ASPw8Â&F<|Ï­>vŠÓg2).)Áh4áç«%>.–]:PZZƶ]{½fëM\××zäOçnj¿¾ûÙ =k~ÛÀ¡}GÈÏ+@.—Ù,œ7_GpˆåHìµõg6›yç•éLÿú-|Ô>Lÿê-Ö®ÜÀæß·‘•‘ƒÑhD£Õß‚À྘>Û+õó$ßœ¬süðÍ/Ü:áf®1µFÍâù¿QR\BÛÉÜqïXär9E…ÅÌúlŽÓ2ÜqÏX‚CÙ¸îOJŠKHLŽçÎûþƒF«Æ`0ðÕ§ß;µÕëôüë¼ÁíÉ­ öQ±)3‡½„ Æ'Ç£‘Ë1˜Ì|}à¨Múc…Åd—•©Q3±c2*¹Œ¹yVêPʤ*•¨kù9µ÷UèMfÖžÉâP~!*+‘K%DhÔŒˆ‹µFh>”_àUÛš h^ý±?@¥¤sx(ëÎf9L{ª¨„Ué™\ÛŒa­šã«P°ôÔYJtzâüÕ:M-C—ŸÊ Ot$!>*¦õéÊ·“UZ†R&#\ãƒÔ‰8§¬œœd\›8†´ˆF-—±äÄJôRC¹#9¹TB‘NϬƒÇœæŸ^\Ê…JA*%÷·kƒL*áxA1 ´ô÷¥¹¯–ÏöV/:œ+¯`öÁcLHM`h«:†³èD:éÅ%äWèPJ¥DjÕt fÚ®ýͶÂhoõQc¡×™ñÖfž~³¿5:prÇ’;:öä¾{[&gN\°;`W6zUG sOcî±Ýøw>»”“‡ó¼Xz0›ÌìØ˜N¯kãðôaÒÛlÒü;‡ çË™»DLËCÔôž@ÿáö¢ùšìý+³Öëîb6ÃŽgé=øb}ƒ|˜ôŽm}x©¾6÷lÄþõÖ˜@ @ 4=¯‡¾Íc>Un'ˉެ'XBŸžÜâ÷¤H)1•ðsÉ<;3f^Ï…_¡–¨™ñ%«ÊV²±|† ŒfZ©/­ñÉ‚ø´à#¯ØÌ,úœÂ>&RÅûáñá…iœ5œ%A™ÀäàW‘Kä™ ù©x®]}=±ð•ú"¹¨Šô•VGô‘ªñ“Z¢ßÌÊÍå6vžæë •/UJNËñÅó 5Õň}&f}Í2KÐÞ1ÃÉM3þÆTrL¤ÚPd-»£ì8°ˆdõ»ñZYMEÙè¶ÏFÙí.ä­û û%ús1]8R)¿8^ß1æÁT”…Ô?Ê"°•û`<³syÈ”HÔA ¨ÇœQ‡n×O¨zݪëx«0Wa8¹Ù©‰æ¦0õ¯Â˜½si>ÈäHý£P´mvlÌÞçV»8,¦'õ5TR¾äYÔ£?D¢Ôâ3ØûbSw(|”?4&ù› æT*ý |úƒ2 ´cA‘`9g8 ˜AÙÕûe2e£ûë;”]Ç£H†D©A¿gæÊbdQíQvÿ/Hå˜+ЍÜ2ÓûðÛ·o,ëïŸ|ò Ó§O§²²’V­ZÃÔ©SmÒ¿üòË„‡‡sòäI^}õUëùŒŒ Þ~ûm^~ùeFÍ¢E‹Ø¸q£×Ê9þ|Lxx8³gÏæÓO?%==•JE³fÍDd’™™ÉçŸÎ<ÀÀùé§Ÿ˜5k§NB&“å4ßììl>úè#{ì1ÆŒC÷îÝùþûï9~ü8çÎC¥RÃUW]Å‹/¾ˆ±†³mo²sçNktë>ú“ÉDll,111L›6Í©­«cÃ].‡¶z衇 eÍš5‘ššÊÃ?ŒV«Å`0ðÁؤÏÌÌdæÌ™Üwß}Œ=FÃ?þHQQiii<ôÐCÈår ˜>}º]~ß|ó :Ž¥K—²gÏΟ?B¡ Y³fŒ7ζJ˜ï wûèĉäåå¤I“ÉdV‘_BBqqq¼ùæ›^É×Ó¶ºÒðV}=í#Opå¹áÉü­¨¨à±ÇãË/¿D«ÕòÖ[oÕ»Œ$##ƒèèh^xáÔj5[¶l!??•JEpp0jµºî¹X_Oø'ÌWÚÊ“úêõz>Ljj*Ìš5ËzméÒ¥¼ð ÖçäÞ½ ·××<}—yë½à*îæk6›yþùç™3g†9sæ°lÙ2Ö®]Ë™3g0øúú’˜˜Hpp0ï½÷žWÊëI;7åï¦ê_@ @ h .{rhh0‘á¡D†;œXT\Âwó–ØEAõÄÖ›œË9ObRkëß¹Ù禕J¥¤´oƒŠ®=;;M·é÷?Y·rƒÝùƒûóÔƒ“™üÆS„†‡0ðº~ ¼®Ÿ]ºÒ’R«T­Q#«§±&åeÖÿ!w'ß*¾˜>›°ˆP ½†~{Ño`/›ëÅE%Lšøçr g 97Ü2ŒnfsÞh4òÆ Ó8~äd­uùyίŒ»ó&4ZËGÊ•KÖ¢×éíÒy£­ª0™Ì|1}6O¿øAþ<5y¢Íõ‚"2¸×VMÝ¿59qô×oåê~ÝI»ª=iWU{³,¼PT«@ùlz&«–­çÚëûѶc2S?­^ô,,(r*Pödl8jc€ü¼ Lzø%òÎåÛ]sw<›Lf¦<;•·?~_?-O<ÿÓry›/?þ– à†LJ»6¼øÖ$·îãʳÎ[(¤RFµŽeTëX›óF³™7ÿÚÃñ‹ç«0™Í¼¶m7o]Ý_…‚ÿs!"¸T"!98™Œ®µDóÝœ•˺³Ù^³½”så$ÔˆN[^^Kjxoç~"µjÚ…Ñ/&’~1‘µ¦¿´x ¥Lʸ6qDûjx°}’Ã{ÿxä$gJª#Ëz³“Ý[3˜úÌ:î{¦'þµo jäP ºvÉQ®½¡ Ñ~Nm£[¸q¼>Ìûr7ºEãë¯rœoËvÿ™áq>ÍêYþC»sXúÃósÆü¯þ¦C·fNûÊ[õ­Ic÷¯7Ƥ@ @  i‘"¥×ÿ³wßáQTëÇ¿³5»›ÞC @!…JQ¥**ŠÀÑŸ+vDÅŽíêUÁŽ¢(ˆ(Jo—Þ‹„:!½oýý±²lHvCÀû~ž‡‡ÍÌœ9gÚ™³;óžc¸£bä¿!.“kÏá™3O’es~—bÞÉØŒÿãÕ7 S‡ÑËx½Œ7¹-W`/p 2ö$íšâU|‘;™{ÆÐVßžo"];©-v3îÌãäØÝ;¡ô$-ÀÜèÅn# ¼òzÙçUÅ+x,Ãõy §ùzÂ4fŠÖ½Ì>7Ÿ{g=°Šâ_Ï|¦ n„*¬)º°Ê;‚tœ¦xö“8Jó+]¦&J×|†b BÛb ê¨æ¨û¼vq vJæÇpË(z?çÌ5dÙúº«îFÑ™œïš 6sÅ +*T‘ÍQ´>huªtÖý+°îY\ã2¹ñp{mG·P4m8úkDÓ¸¨uÎÕ–`Ý·mâM`í¨zE^dχ¼!ðUP‡ƒïpÈŸ\~Èz‚Þ}Gеsþ«m¥«?Añ G›xš¦7 izƒË|GIÅ¿>Š£àtí¦:Äï¿ÿNÿþýiÛ¶-_ýuÙ¼ììl—@Ãnݺѷo_ìv;O=õ”ˈ²?üðƒ ¢eË–¼üòËôìÙÓkÁK—.åçŸæŽ;î M›6L™2Å+ë½÷ߟàà`LëÖ­ùàƒ.:íÇŒ^¯g̘1ÄÄÄðì³ÏV¸Ü—_~ÉÁƒU¿ËRS{öìañâÅôèуŽ;Ò±cDzyÙÙÙUÞUçÜðTMö•Ñh¬rDÂʺ—Z­–»îº‹»îºËeºÍfcܸqìÞ½Ûm=ï¾û.‘‘‘ 0€Þ½{Ó»wo—ù¹¹¹Œ=šS§N¹LW«Õ´jÕ ƒÁ@—.]*-ç’%K˜;wn•ÛRÓcd·Ûyï½÷xíµ× âµ×\ï¥ÙÙÙU¿V7ßšî«+•7¶×Ócä‰êÖžÔuëׯç–[náÉ'Ÿ¤K—.ètÎöF~~>‹-bÀ€¨Õjçu:o·Ûyâ‰'øòË/ñ÷÷ç•W^¹dÛë‰+ýZ¨î¾òd{wìØArr2v»Y³Îux”““ÃÂ… éÓ§‡ƒ””/SÁŸ¸ IDAToeÍÕôZðæ}¡:<ÍwûöíŒ5Š÷ߟˆˆúõëG¿~ýÜ–ËÏÏ÷Z€2xVçÔEÛ¬®Ž¯B!„BÔ•Ë>@9;'—Ÿgϧi“†DGEèï‡Z£¦¤¤”S™ìN;Èæm)””º{’Ö›>y÷KÂ#¨W?’ßfÎeçöÔJ—u8<ýÐKté~ Í[%D`p»ƒ¬Ìlöí=ÈÒù+XKœ`É‘ØÏ;=I{¾OþÚM¸Á‡(“‘ߤ“’YuýXdµ2vùznkHϘhbüL( ìÏÍgÁác<Ô*­ªòN ÞÙ¼ƒíg²èÛ¸±¾5,v;¹¥Ž±7;—§ÜƒÑm7lgű“ô!!(š“…Ŭ9qš÷ »´’—vÊùãàrÍfnmÒ¸@|µŠ­6öåæ±òØ)\_qŸïÜË’#'CÛð` tjf éù…lÉÈ$×ìš·7Ñ¥¶uíQ¹c]z7¡u‡hbâ‚ð Уթ)-¶’yº{29v8·Âô%E&üßSÄî¿N³nùáZ)ûéãù¼8f.·jEr»(üô”–XÉ8^@ÊÖ“l\‘^iÚíë1´Kåb”·vÉ!2OÒáúF$´Š ¼ž/£«ÅNnv1‡Ó²X·ì0k—ÂQIûÊ2Nðâ}s¹u¤s_ùPX`&ãD;6ž`C-ìgOouöóYžž“B!„B!„¢n9pðâ™g¹ÆpɺæDkêcP(´pÈr5%«™•?ƒl{åÏm.ÙÄ ãýèë;€ë ]‰×Æ  ÄŒ™|{,ûÙP²5jlؼ–vrî'l+ÝÊ~wÒ\ו?ÙölÖ—¬åËÜ)µ©´Ìž¤õD]å[ö¼c”Ì}u£N¨#Qü#QÔ:¥ùØÏìǺ%–¿á(-¨…Ìm”,œˆeÏBt­nC]¯¥s4`‡ Gq.öœ£ØN¦`=ä>¢±íèVоŒ¶Í¨´GåŽâ€Ã\ˆ£$Ga&ö¬CX­­²ŽÒ|,ÛAwÕp,;fW±°ƒâ_EÓôÔõZ 2…¢ƒÀaÇ^˜…=c/Ö=‹°ì^»G»æ|žn¯=óÅ¿=j*S(‡ GAÚ¤>ÎͳÖî;ç+žÆ[@×Ö9JrÁ÷à(÷¸ÖQY;GR6ô]¨‚Àa[Xö€y=X½ù3¼ÝFÉܱ¦-CÛòVÔ‘I(Zìy'±î_yãTEî^_Nž~úi:Dÿþý‰ŽŽ¦¤¤„´´4.\Xöü]£ÑðüóÏ0cÆ ¶nÝê¶»ÝΛo¾É?ü@£F2dßÿ½×ÊùÜsϱaÃL³fÍðõõÅl6“ÍáÇIIIaåÊ•^ËœÏП{î9þüóO† F›6m Áf³‘Mzz:Û·ogÅ ÷“&MbΜ9 6ŒŽ;…^¯'//ýû÷³nÝ:²³k·×G}”‡~˜›nº‰¨¨(JJJØ»w/‹-ºà»snxCMöÕ7ß|C»vÕï…`øðá¬^½ÚeÚ¬Y³ÐéttèÐàà`²²²Ø°aŸ~ú)©©¿ï`³ÙxüñÇY°`C† ¡eË– Ž;Æ’%K˜2e ™™î¸Øívî½÷^zõêEÛ¶m #$$»ÝΙ3gHMMåÏ?ÿdΜ9Øí¾/ÔôMŸ>¬¬,†Nbb"~~~‘ššzQÇ·:ùÖt_]©¼µ½ž#OT§Þð´®KKKc̘1èt:ÂÃñÙle«·Ür àmù|7n¤wïÞÜsÏ=têÔ‰ÈÈH)(( ''‡ŒŒ öïß_aýìÉözâŸp-Tg_y²½;vìàÎ;ïä¿ÿý/ÇŽ¹vî>mÚ4úôéáC‡((¨…ï5TÓkÁÛ÷…‹å|ׯ_O=4h7Üp‰‰‰a6›ÉÍÍ%--Õ«W_ð=Òêð¤Î©‹¶Y]_!„B!„¨+Êßÿ\L˜0AIIIQ222”üü|%66VÉÈÈPét:uaa¡Ên·kF£Öb±è•Jer8~‡#hÅŠ¿mÚt.ˆ­}ûö—psê^\\\]¡Ú>ùv’Wƒn/¥ùkf`ò51ùÃoøþËŸ=Z×À;úðÄ ²s{*ÜýD…Ë\‰ûêJ,³7xóÜ—Ÿ¹nĤÕ0eç¦í¾p'¢r‹oí…V¥âãí©ÌH;T׏âýл+ѾFÞÛ’Âo*®B\³ûÞ@ž×6lgaúñº.ŽB!„B!ÄecúôéNÿ_{¶+Dui[݆Og°ÿ‹¢GÕuq.)Up#L#gP<ûq¬û/ø#„ÞöóÏ?{ ¼mÛ6üüüxçwøì³Ï¼]D!„š4iÂÂ… 3f ‹/®ã !„B!„B\Ù*ŠóíÒ¥ËEQ²EÉ·Ûí…@‰V«5YT*•Åd2ÙÍf³-,,Ì~àÀ‡ŸŸŸ#,,Ì‘œœì˜0a‚[¯n—ýÊ¢öýß=OÖuê\pH #ï À_Ϭt¹+q_]‰eB!„B!„B!„BˆË‰b Fßi4æSë¸4—ž¶õíÎ;¶;ë¶0BˆÿYwÜqG]AQ‹îºë.À9úè¶mWîÀB!„B!„ÿK$@YüOŠkHqq)V«•fIqÜ?v$Á¡Al\»••K×Öuñ„B!„B!„B!„BÔ!Uh°ã°[QG$¢¿ö!SÖÃë±î[^×Å«†~oaÏNÇv|;ö‚Ó`)Añ‹D›tÚä~X÷.ÆQ”UÇ%B!Ä•êã?æÐ¡ClÞ¼™S§NQTTD½zõ8p ƒ `Þ¼yœ9s¦ŽK*„B!„B!.†(‹ÿIÿ÷Ľt¸¦Ë´ÃŽðê³ïÔQ‰„Bü“ŒiÑŒ‘Iq.Ó†/\IžÙRG%âŸotóxú4ªï2-@¯«£Ò!„B!„B!®tú.cÑ4îì2Ížy’¹/ÖQ‰j™J&öZÐè+]Ävj7%‹ß¼„…B!Ä?‰Z­æ†n@¯¯¼½‘’’Âøñã/a©„B!„B!„'$@ù2²ò¯¹u’ïu-o®“|ëRIq ùyø|8uüÿ]²†©ŸO§¨°¸®‹&„âÀ¤Õ`Òº6³EñÚúX1Ükëº í2µ®‹ .À“sÒ[ÇפÕäSùƒl!„B!„B!„¨k Ž’<­{Þ ¬iË0¯ÿ‡¹¨®KV;TJ×~Ž&æj”Àú(Æ@µGI¶Ó{°î]‚eן`“ÎX…BQ3Z­–ÿûßtîÜ™˜˜BBBÐétäää°k×.æÏŸÏ¬Y³°X¤½!„B!„Bq¥Pþþçb„ JJJŠ’‘‘¡äçç+±±±JFF†J§Ó© Uv»]k4µ‹Eø¨T*“Ãáðs8A+V¬ømÓ¦Meëjß¾ý%Üœºwá…„B!„B!„B!„¢ŽLŸ>½ÂéÿkÏv…B!„B!„B!„⟪¢8ß.]º P%[Q”|»Ý^”hµZsQQ‘E¥RYL&“Ýl6ÛÂÂÂìpøùù9ÂÂÂÉÉÉŽ &8ÎÏCuɶF!„B!„B!„B!„B!„B!„B!„BqÅ“e!„B!„B!„B!„B!„B!„B!„B!ÄE“e!„B!„B!„B!„B!„B!„B!„B!ÄEÓÔu„¨+aá!Ä6mDVfi»÷ÿãóý' ô§I¼s_ÚŸ^×ÅBÔE‡£®K!*bôÕ¡R)ä•ÖuQþ'ȵ „B!„B!.ª@âtMÉ´erÐr ®‹#D­Ñ6ï:"ë‘ÍX÷.©ëâ!þá"""hÖ¬gΜa×®]u]œ‹r%–Y!*TVŸíÛ·¯®‹#„¸ H;G\n䜼z{Š( q™ú¡wW¢}Îë?g ¹¥æ*ÓÇ&„0êñŽ|úú*ŽÊ­"Ö©¯EïSqsì³7V³bÞåwŸ 52z\'Änâó·×²ì´j¯§Ç€xnÕ»ÝÁôÉ[X1¿úÛÚòêz\ß·)M“Ãò¡´ÔJnV 'æ±}ýqþ;w¥%Öj¯÷rT“káÑ6IÜÒ¤a…ó^Û°…éǽYD!„B!„Bñ?äÏèEèïe¿#ÊâMßíq½/öüÓu]!¼¦eË–|øá‡Fžyæ–-[V×E[°`~~~¼óÎ;WLÀÁ•XfQ}RoÔž‘#Gò /¸MOKK£wïÞÕ^_ãÆyàhÕªõêÕÃl6sìØ1vîÜÉŠ+˜?¾7Šý´fÍt:'N”`#!.S—ú~$íœ.oß/9'/ÒfB!„p§ªëqÖ¨ÿ»‹èQ‡ñàãÿªëâ\4•J!ºA*•R×E©uWê1âŸD¥(Ôó5¢R®¬:§Äj#Ïlqùç¸ÀP°jŠûžîLlB¯Ñ—Þ·%r…mö?’¯ŸŽÖ£ 7Õx!á&F>Öÿ C Œ× ÿ@Ÿj­cÄcxfR:tkHp˜µF…Ѥ#ª?m:ÕgÄ£WãT½u^®jz-WtÝÕ~q…B!„B!„Bq{ôÑG‰‰‰!44”gžy¦®‹#„¸H½qehÓ¦ sæÌaРAÄÅÅa4 $99™Áƒ3vìØº.¢BxÄÓû‘J¥"&&•J^—9'…¨[r !„ÞsEŒ ¬R›5¡eR<1õëa2°Z­œÉÌawÚÖlØFIii¥éÃÃBèж± ë€Ýn'+;—=û²zýVŠŠK.áÖˆÊØl¶²ÏÖrŸ/gWwnÇk¼€žžQ\T\×EªUWâ1âŸäêˆP^íܵšÞ³Rl½r®ÃOþÚÍoª7ÒùU×ÅÓ$­NÍðG®¢u§h&¿±†ì3EµQLzß–HÓä0¢púx>ï=¿¼Öò*)²”}V^]ky]N‚B (å:öPkT†È˹¸6Y§îèyK³*—ÉÍ*&ãDÛôKy|ÏÒûhèyk3®îÚÈþøøh(È+åàÞ,–ý‘ÆÆU_5½&ïØÃä{\¦Íî{A>zÏ7J!„B!„Bˆ h­oÃÝþ#h¡o…Q1rÜzŒ%E‹ø6ï+Jµÿ|ÖOåÇ'៓ K䩌ÇX^¼´ZéÛù´çZŸ®´õiK˜:‚LÛî>y§×Ë© ÐÛt3L·¯k†âC–=“Í%›ø>ï[Ò,{½ž'€*$]ëÛP7h* ‡ÝŠ#ç(Öƒ«1ož†£8·Vòâ|š6Ëù9s4˜·¹/ã;üîõ”®«x]ÚD0ýU  G ØN‚yþ¶£µ¶—ÌÀy÷Ýw/¸\jj*}ûö­pžÕj-ûl“çþBˆ‹ õFí™6m¿üòKÙß=öǯѺÞ|óM Lš4‰5kÖ`³Ùˆˆˆ !!Á[EHLLdèС\sÍ5DFFb³Ù8xð +V¬`úôé=Zqc¥_¿~ 4ˆääd(((àèÑ£lÞ¼™¹sç²qãF·4Ç祗^ª²<ÙÙÙ´oßÞ+Û&Ä¥àÉý¨K—.|òÉ' Z´hAQQí½{&.Þ¼ÿÖ”œ“BÔ-¹…Bïº"”‡ÞÖ—ÄøX—ijŽè¨p¢£ÂiÛ2‰)S&/¿ÐeEQèy}g®íØÎm¤É¨ˆ0¢"ÂhÓ"‰)ßþLN^~­o‡¨ÚGXD(>>z>z{J]ç¢M|þ‡‚|®Äc$Ä?‰Q«ÁGý¿À °nÙ!NŸÈgàÝ-hwm Š-¯ªG÷þñÌüª‚·S¼¤× "¢ýÈɬݎ'8£ìsø`ÞøªâEþiÒ÷gsúDáQ¾?œË±Ãÿ²Ûõ}šºüýÃ'›Yµè8 8ÜDƒØ@ Fm…i/åñ0ñì{7ÕÀßez@°Ö£iÝ1šµKñŸWVb·W<¾q]] B!„B!„BÔÔ ßÛü*Î>ÑX˽c¸Áx#£O Ï^{°Ñšú¼úñºª;:¬H }KGs] —ézEç­â•Ñ(Þ }—.†n.Ó#Ô‘ÜlêKOco^ÎÏüÂ?½—©¢Bíƒè®º”sÇGAÞ ]x3´I})š> {ÞIïå+D éڀ߽ÎÏ…?Uœ¬€ÿX0 rÕŠTþ ã­pêFp˜/E©/oï¿ÿ>‘‘‘ &NœX×ÅB\¤Þ¨=f³³ÙìòwMÄÇÇÀĉ™1ãÜ»‡býúõžTxDQž|òIî»ï>·ú’““INNfÔ¨QtèÐüüsﱪÕj>þøczöìé’& €€€’““6l:u"33ó’l‹uÉ“û‘ÉdÂ`0ÔRÉÄ•Æ[÷_OÈ9)DÝ’kP!„ð®+"@ù¯”=„†±eû.Ò ¸¤”?mZ$Ñ29ž @zÝp-3~[à’.ÐßNí[£Röî?Ä–¿RÉÌÊÁ×dàê¶-IŒ%Àß—¾½ºñýŒ9u´uâ¬}{ð¯;®ëbˆ*È1B\jvgòÞóËiÐ8w· ~ã@~ûnG]KxÈ\jã¥ûçÒ­OSìv;Ëþ؇Íj¿èôõcË>ïÚz’?¦§”ý“UÌÝg¼Z^O<8þ:·àd‡Ê÷Óé†FìKÉ`ÞŒÔJ×#ׂB!„B!„¸R$ëš3.øYT¨ØmNerî'dÚ2¹ÎÐ…Œ&VË„Wy<ã¯ç­FÍ ¿Ûy àa|U¾ÕNßßw Ͻ€VÑ’nMgAá\¶—nã˜õ(…ö¯—wtÀýt1tÃŽ©yß0»`öšë[ðxÐ8b41¼<­%›9eóN°°Ê/m›Á ¨°\ƒ%å9é(†`´­¡‰ëŠâŽþ†qÏ~Ü+y QSªPzPe7äTñrãÀx›ó³% ¾w.¯¨@› ¦;ÁšþÏ Nn×®v{ÅÏWªQ.55•þýû×V±„ÿ@Ro\þ¢££Ë>/]º´K"*2~üø²‘9wíÚÅÔ©SIMME¥R‘””Dß¾}QÅ%8`ĈeÁÉ‹/fêÔ©:téÙ³'Z­¶Âàäü‘Ù³g—ý½råJ|}}™4iÓ¦M¨´!ÄåJîGB!„Bqyº"”wìÚËŽ]{)?¦Ü©ÓgØ»ÿ0jµŠä„8›Æº¥ËÎÍcöÜ%””–²;í Ë¼½û3|pšÅ5¦Y\#tZ-f‹¥–·D!„5qä`¿²µZÁf«x”ÙÿuŠJA£qö´ëp8°Z.ïI¹Ù%üö}ÍlM¾çF*ɦ~Œ¸ŸhM}Ö–¬¦“Ï5¾³áZž~ ›ÃÆÛÙoðKþÏØ©½ßYU¨¸Í÷¦æ}Ërþ]6ouñJÒÌ{™Yï7 Š^¦›˜š÷µWòµç§tÑë8Jó±Xé2Ïzh †[>@{-šÆ× h 8,Å^ÉWˆjÓ@Л  {d«8ÀXí¹àäâ?!ç(éZÓ¡x(¦KRêK*??¿Ê@d!„ÿ;|||Ê>KûírÒ­[·²àäY³fñÌ3ϸܿÿúë/¦OŸŽÑhtK;pà@À\|ÿý÷ãpœ{G`ÿþýüñÇ(å{G/Çb±`)÷>ìÙ´%%%äååy¾aB!„B!„»"”« ½8|ôÉ qh´Eqù`ÛÎÝ•¦Ýž²—fqQ©Tøûûr&3ÛK%vU?¦/¿ó Ñ ¢øõ§?™üá7Lc0¸mh®½¾# Fc4(*,&7'ãGO²eÃv¦}5£Òôz½Ž7w£Ë išØ„À ¬ ¹9ùìÛ{€5ÿÝÀœ_æ{q+›7ãö»к} ƒÈÏËgÇÖ]LŸ:‹Û܃nî¸k »ÏmúÁý‡~Ë•§¢(tïÝ…›ÜH³Ä8üü}1›ÍdgåpøàQRwìaáŸË8š~¼Âô×tíÀµ×w$¦Q}||ôœ9“ÅÆ5[øî‹Ÿ8yü´Ûò±q ùvÖ§nÓ®ûÅmÚæõÛxtôs^É·¦Ü~3O¾øGch¿ÑU.Û¾ckÞŸò:gNgrK»ÏQß[{‘Ü2&ñ Æ/ÀµJÅéSgظv+?|=“Ç*ïñ]£Ñ0hh?zö½˜†Ñ (¤<ÂÂ?—¹?Y‰.Ý;3àö›IHnŠž“'N³zùz~üæ²³r\–õt_¯&×~MõmÜ€6aÁÄønôÁ ÑPbµq¬ ˆ•ÇOò˾ÃZ¬•¦™Ô”v!„ùøà¯×¢U©È)5³33›i‡HÉÌ©4­A£fP\#®©N_F­†"‹•<³…ã…El9É{x=íYõ}M¼Ô¡5ѾFfïOgÊÎ=µÏZ‡3 6†–¡AêõØv²Kͤç’’™ÍÂôã/(*[^§V±è–^¼²~KŽœp[çâ[{¡U©øx{*3ÒU˜ïuÑ ˆ¡YP>j5'‹ŠYsâ4Ó÷ »Ôý­ŠÆþ~|ÓóZ·éóöt›¶ùt&¯ØPa¾‰ÁÜ׈ÖaÁèu˜-ìÈÌæ§½‡ØYÅýÏÇÈ›.6 S£UѹGcÚ]Ó€Æñ!øêQ…¼ìNŸÈç¯ ÇY:'‚¼R¾^8½{³¨åÕõøaÅp·éß|°…³\ÛaQ¾´êMóv‘D7 0ÔˆµFEI±•ÌÓ…¤ïËæ§Ï·rúx¾Û:=Õòªz<ýNwöí:Ãøûç^0N¯¦{ÿxÚ_CýÆ}µ”[ÉÏ)!ãD!»¶ždÁ/©”W^ôO¿¡É„D˜(.´°?õ ó~Neçf÷k¤²ý ðÙ«Y1o¥ùT–öºÞM¸®w·éã˜Ç¾”Œ*ÓVçø–¥©Æ~ŽK )ûl±ØøbÒº²‘¢ÿÚpœÅ³÷2px ‚C •®§"œ,„B!„B!j›FÑ0Øw7™ú£mˆ‚Â!ËAæþ‰BÅÏh‚ÕÁ\åÓ€ïò¾) N>kzþ4†û$HDoãÍ•(ë=½L7ÑÍÐfº‚TAX°kË%Ͳ‡•Å+˜]àúl®¾¦Ñšú±¦óIÎG¬/YËÒú«.j[*¯„¼† /e½ÀüÂ?/*]yɺæÜé7Œ¶>í R‘oÏc{é6¾ÏŸÊ_¥ÛÜ–U‡á¯ `]Éj·ù§m§H5§ÐVßžuDµËSKjå¿kZw/@{-¨Ô(~á8²{œŸ¶å­øÜøöìt ¿ºµÊeÕ ¯ÆxÛ'8 2(˜|“ûüÈd´m‡ iÐÅ„£4Û±m˜7}íxÕ­ˆbÀxçW¨‚bÏ<@ÑÿÂQêúû¿¢5¢m{'š&]PÅ èL8Ì…8Jr±çÃvd#æ ßV;ï Ñw¾uL¿0ŸµGQ6¶ãÛ1oùñÛ« Mè‰&¹êˆÖREÙØ³a?¹Ë®yØsŽx½Üå>ºV€rž›ûcüþ~”m=¹¯Aeý 8j©¿SMÓëѶ„:2 E£Çžwë˜%ʉg IDAT7~‡£(«v2­‘#Gò /¸MOKK£wïÞU¦}õÕW:t(EEEôïߟƒº-óÞ{ï1`ÀÒÓÓéÓ§EEE¬©æ|||èׯ={ö$))‰, ÙÙÙ¤¦¦²lÙ2¦OŸî–.,,Œ®]»Ò¾}{ˆŽŽÆÏÏEQ(**âèѣ̜9“o¿u¿ÇŽË5×\CDDAAAèt:233Ù¼y3_ý5[·n­´¼F£‘#Fн{w7nŒ¯¯/äääžžÎÚµk™XÓã СC† F»ví Åjµ’™™ÉþýûÙºu+³gÏ&==½ly½^Ï®]»ç±úã?ÜÖ™ššŠN§câĉ|ýuÅGÕÕ½¬¦m¤š–¹&NÏ>×»LiTŸ˜õésKOž~x‚K༷÷Uu¯}Oü_ËLZ×*ݤÕäO|?·4iÈ3«7³';·Âô£ÂH8o»Ã >\_?Š®Ñ‘¼³y'suKç¯Óòq·Ž4ô÷u™î§Óâ§ÓíkD¥(°z’öümò`XB,«ŽŸbWVåÕjEá±6Éô;¯ŽÕ &Òh ÒhàêˆP -ÖJƒŒkB­(<{UKnŒ©ç2=ÆÏDŒ_cnnTŸgWo®2X¸¦îkÞŒa ±.Ó‚|ôt‰ŽäºèH>ØšÂìýéné¼uŒ.µøæa<4¾ ¡‘îuOh¤‰ÐH‰­#Yþç>¯åy}ߦŒשÒù> Ñ ˆnÀôÉÞûßÁaFžÿ 'Q ü]¦›|u˜|uDÖ÷§ÅUQ,ù}/T Ü¸Ù¹ \m š6êÓ¦S}¾zw‹Û[kå¿”o™ªÕ*´ZUY€28éÏÊ<íÝu„B!„B!„ð„Ie⣰Oi¡oå2=A—H‚.±’TÐN*œ¿{-/^æ6ßê°²ºx%}MýË™Ï×\ׂ×Bߢž&Úeº-F‘(M…öB·å™?³ËœÂêâ•Ø±ã§ò»¨m¸Ý÷Tl,ÙP£àäÇ2”˴`u×»ÓÍxog½ÁÌ‚Ÿ\æ8Îo7Ð4d3›ÜÖ¬rþþzÊvªÚeª)‡ù\§ÃRâu8;“T \Vetn³=ß}›õ×=„îê.Óc0š¦7 ‰»ž’¥ocÙVñ3tOÒVDÑ™0Üò!ªà†8òOQ<ë÷àdCÆÁ_  iì:ÝÇÅÇU`•ªV”Õ¯A™ìš¯_8šf7¢‰ïNɉXvþî¾]Z>ýÞBÓ¸³Ût%À€* 4¤ó–¼^î³üþ }ŸóÞ…Òu/§iÚ¿«¤Â©à°T¼\­P©ñé=m¢k ½*¸!ºà»Ñ6@ñ¯Ö(øýr3qâDÚ·oO||<}ô·Þz«Ëû6½zõbÀ€Øívž|òI¯'·nÝš>ø€ \ŸïjµZŒF#ÑÑÑV|3{öl"##ݦøûû“””Tሕàñ²eË–.Ó"##éÓ§7ÝtÏ=÷3f¸×üôÓOÄŹ¾Ó@@@ 6D­VWùâpÛ¶m]þ®_¿>C† ¡oß¾ :´,@ÀS§N9ëÚààà . À‰÷PÓ2?õÔSÜÿýnyõêÕ‹ž={2a¾ÿþ{·tÏ>û,~~î÷ú˜˜†J¿~ý¸çž{ؾ}û·­:žyæ·|}}}INN&99™»ï¾›Ñ£GWø‚;Ôü¼‚šŸÏÞ8'k“cd4ùÏþC—.]ܦF4h@×®]ÉËË«4X°ºî»ï>ϵsãâ∋‹ã\o¸óÎ; e̘1nëðäøÖµZÍ;ï¼Ã€\¦ÇÆÆËí·ßÎèÑ£+ ²¨É9éý\ÓzÃ××—o¾ù†6mÚ¸L?{ýÖ†¸¸¸²sbòäÉ.#_Œ‚‚|}}Ýî—3O뜚_µZÍË/¿Ì!C\¦k4¢££‰ŽŽ¦K—.äçç{­Þð´ÌžÞËÈ6ó‡ß™=ã\ÝcÆŽàŽ»^t¾O¸,8yñ¼å̽ˆ3§³ÐéµD7ˆbü›ãP«ÕU®cÛ¦üúóŸœ8z‡ÃA»­ùÀ0L¾&ž}å1FÝñËò÷§Óý*g»ÜЉ—Þz€¾]Øõ!½ÝVI÷Ì5È·¦2N9{´òõ3¡Õjª Æ q¾P>èÖÓctÖòÅ«ù}Æ\²³r1 ´l›Ìˆû‡bò5ñÂëOp×€1n?jŒ{ilYpòŸ¿.dþœ%Ò4¡ ·@\³ØŠ²ྱ÷”'/ž·œ9¿Ì'?¯€æ­’õà à­&0â¶Éø{{=ÝWç«îµï ËždfÚ!ò-Œ ¢Âߘ`=o]Ûž-ZEfI©[º¯SÒ°:/,¢ÐbE£($p‹fÄøùòX›dV?EžÙõ‡ò{ãhèï‹Ånç‹{Yw2ƒœR3Z•Šp£Í‚(ªd?z’¶¼p£ËßFC•Ê£’›–'ïÊÊá§½IÏ/D„ LèØýêšÝ<¾,8yÉ‘ãÌ9p”|‹…æ!ŒLjJ ^Ç×´cÔ¢Ud”«Kåås㯠¸®^ã;´ ßï‹)9¯WU{? m[œ¼5#“ÏwîåxAõýLÜߢÍC‚x¤u;3sØ—“ç’Ö[ÇèRŠKãù{¢ÕV} ¥e‘—sn?—;·uzMÙív»‹Ù½÷Z«Õµ~×ê.îœ)È+%ãdÁ…¼F=ÑÑ-8ù|YEe£LW×]]Å–5GÉÊ8÷Jùý¬( :ýÅ_kåÓ– Ùf³cµ¸ßoíåFöôøÖÔÙœT*…Ñã:3ùÍÕ˜KmøµtîqõÿõNÏÞB!„B!„BxÃóÁ/•'ÿ^0›? çPàȧ™6‘;ý†¯kVaºXmòíùœ´:_(~(p,­ômø(çþ*ÝÆ~K 41h Vǹߙ›jãùOødŒ*vlÌ+œËŠâåµA…Š@U-õ­*y9Óv†•Åÿ­Ñöö59_Î̲g2)ìâµ „¨C(t’RºƒŸó§³¶‚QŽîñYœ¼©d#Ÿä~Ä1ëb4 y8ðQZê[ódðÓüeÞÆ^ó¹{‹ì…¤šw‘¨Kb”ÿh–-$ß~î™õÕ>i¤mŒÅaaa‘w;ž®Š¦é Ø3⨠H¸&ì§Pô~ Ö‚­òÀ Åè|iÝñwš³tWßS`l;²‰ÒUŸ`Ï9Š*(}—GP×k‰ÏõOb;¾ûé½^K[a}ü1 úud2ö¼ÿ<{ÞI·åtïu'ÛÌ”®úëÁÕ8вA£Eå‰:"‡¹v:¯4¯™v+öÜc8J @¥A™„¾Ë#¨‚áÓýi¬ûÿ‹£ØµscýÏ•'[v/Àºówì(=J`} 7O•÷Ÿ£•g¼|G:?N‡ÂŸ+_VWîì÷>j•þÚË‚“-»`ùëW¥y¨ëµBßù>C†[> pê8òO_`mµoêÔ©üðù ò§žzŠ‘#G^TÚÒÒRyäfÏžMbb"/¼ðãÇ $$„×^{ €/¾ø‚Í›7{µÜ L:“É„Ífã·ß~cÉ’%¤§§£( !!!´iÓæ‚£¢1qïÞ½dggc±Xð÷÷'>>žmÛÜG¹øðñZ­¤§§“ŸŸV«¥eË–Œ7Ž&MšðòË/³hÑ"rr\ŸM?üðÃÄÅÅa6›y÷ÝwY¾|9YYYèt:¢¢¢hÑ¢U?/\¿~=Ó¦MãÈ‘#8:wîÌ#<‚ŸŸo½õýúõ«ÞެÄɓκËßß­V[eàÜÙ€¡³i¼Qæ1cÆ”½Ø½nÝ:&MšDzz:7æé§Ÿ¦mÛ¶Œ?ž-[¶Tø3þ|~üñG2331™L´oßž‡~???&MšDÏž=ketÑyóæñõ×_“››‹ŸŸݺuãÞ{ï%,,Œ/¿ü’¾}ûrú´ûµ_Óóª¼êžÏ5='=©7Ê«É1š8qbYpòœ9s˜9s&§NB¯×Ó°aCÞÿý ¾VSï½÷ß|ó ;vdÊ”)|÷Ýw|øá‡tëÖI“&Ñ£Gš6mJZZšKZoßêHKK#)) pކøÁЮ];Š‹]ß-´ZÝßíxê©§Ê‚”æÌ™ÃôéÓÉËË£mÛ¶Œ;–àà`>ÿüsúôéSéµ5«ckºŸ=©7^ýõ²@£3fð믿’ŸŸORR#FŒp ’ñ–Ž;ÎQŽ.\XíôK—.eèС 2„ 6ðçŸÕïLéRóä>èÉñ}ì±ÇÊ‚“·mÛÆ_|ÁP©TDEEñÑGáããã–§§êê^æIÉe®O۞ܪSOV6º9\º¶ÙYuq-]º”ž={Fbbb…Ǿ{÷î:tˆ}û\ñÖyu)Ûíu¡.ÏIoÝ÷«ËÓïGžßšÔ±uÑf(ïJú®ái¾—ºMèé5XWu7~gB!jÛ ìã£çÅ'\{9uú 3~_ȉS•¤ªXÃõhÓÂÙ@\¸|×ÊX‘e VŸà|Ÿ›“ÇæõU÷ÎÙ¢µ³á³ðÏeüø­kÏߧΰs{jEÉxòŇ0š ”””òäý/²}ËN·e6¬ñî¡°ðF=0 €KÖðâ¯c·;{²³rxlÌóü8çsBÃC|÷­L|~RYZ»Ý޹ô\ϺUôž¯iB“²ÔÙ?ýÉ»¯ýÇeþž]ûxáµ'/øƒôúÕ›Y:EÙß»SÒ(,(≤iB,qÍbÙWntP‡ÃQVf«õ\ãÓl¶¸lË…T7ßš:}òïÉ…°`Nw~)yà±Q´hÄg|Í_[S wþÀsêø¹/.ž£òö¤¤±qí¹¼þÚšB~~O¾ð1ê“Ü2ÁåÜnߘz]ÀßÌäÓ÷¾*›—¶û æ,eц_ÑjÝ«±ÈzáÜy÷­Ì½ˆ7Æ¿ï’vËÆí|=ã?øø1êa¼5áCÀó}u¾ê^ûÞ°7'—åFàÝ••æS™¼ßõj‚ô:îIŠã½-)néÖt¯CW?Mz^!S{]‡N­¢Cd‹Ò»,Ó"Ô9’ô¢ôãLß{Ðe^Fq )™•‘õ$myËŽž i 3È2ÏlaKFf¥Ë†}¸3Þ¬»öÄiž_³[¹öåæcµ;¨FÌäE‰0ï Dœwè(on:׃پœ<¶žÎâ˯Á_§eDRïl>Ww;óß×]ù²Zìö²é• 5ø02©)+büº­eAÌÙ¥fžX¹‘i½ºjÐ3¸i#^ÛèúB—·ŽÑ¥¢R)<øÂµ.ÁÉi),úu‡Ò²()¶`0hiÐ$È-(õçzh{ÿÇ[ˆˆvöD·sÓ Þ|Ò½ÇÇ Ù¹ùwg’ŸWê F5h¯ç‡ÕRù‡—’V§¦uÇs£¤n;Åço¯åÌ©4Ñþ$µ‰À䧿ຖý‘Æ¢_÷àpÀÀá-èЭ!:½šÝ2oƹº½ü~nÌ_õ½è2—Oûí’aeÇyõ¢ƒ|özÅ/V”ÖÇ÷bÜ›Åúe‡ép½sŸtêÞˆf-Ù?3•¶ëæìí.}6ógTÞ¾B!„B!„âRjªçFc/¾Ëû†çœ{β׼‡¹…sXÙ`=ZEë–6Tíì¼5×îüý¸­¾=÷ü¼;.èYî:9˜›3 R£hTrÆv®3Øgƒ_À¨2Qâ(á‘Ó°µÔ}Ô–u%Þ}¶¢¥‘Öù~/£ëH¨:Eǵ†.\k蹓™œû‰Ëü0u8÷8GöXV´”gÎ<ço÷Y¶,:}?¿Ô›C˜:Œa~Ãy)óy—ôæ¼Ë§¥‰â›Èiü'ç߬,þ/íõWóZè[¼Ÿ3©,Ø»¶©£[£Mê@éªÿ\`é‹çÈÿûÅVEAe ÅžçÜgpp+JW~„í˜óå;Å/ lÅ7}§û°¦-£xÎÓàøûÙIQÅ3Ä4jŠoºvÃ(™÷’WÒVDñ Ã8è#T¡qسSü˃'¨£Aþ–Ôù˜7}ç2Ï–ºVGÖµtÿÝܺö¬C˜FÎM£ÎXRç•ÍW…7;p»}&%‹ßt]Á©T¸ée ö”}º€ÉùêÅ‹ ェ—×Ä8ÿ·{nÕËz“Ê? ]û»°ìü’¯”ͳŸÞ‹-}¦á? øø£ït% 'ÖJ9ôz}…/Ì:—ŽÁùbmùe«zÙ½"iiiLœ8‘‰'2lØ0Ö®]˼yóxýõ× bïÞ½¼ÿþû^Q5Mœ8“ÉDqq1#GŽdãÆnˬX±¢‚”®–-[VáFýUùu¸|ùr·i‹/fÿþý,X°½^O×®]ùí·ß\–i×ÎÙÉþo¿ýÆ_|á2ïäÉ“ ¦ç6•BÛ±c¼òÊ+$%%‘˜˜HjªçÏ–Žw>ÿW…ððpŽ;ÀÓO?M»víxûí·Ù´ieËxZ戈ÆŽ ÀÂ… y衇ÊÎËÌÌLî¹ç/^LDD£FâÉ'Ÿ¬0ß;v°jÕª²¿7mÚD^^¯¾ú*±±±´nÝú¢öyuíܹÓ% ëÖ­¬^½šï¿ÿž~øa^|ñE·t5=¯Ê«îù\ÓsÒÓzã¬ê£¤¤¤²à™iÓ¦•uˆpÖÎ;™4iR­(;vŒÂÂB–,YÂþýûiÒ¤ kÖ¬!;;›_ý•{ï½—„„Ú´iã ìã[‡ƒÒRg‡ãåÍfsÙôÊDGG3j”³>sæLž~úé²y»víbݺuüñÇòÈ#ðÜsÏUº®šÔ±5ÙÏžÔ ôéãlç~þùç¼ùæ¹vή]»øõ×_IIIA«uÿŽã‰ØØØ²íÍÍ­~cåÝwßåꫯ&..ŽÿûßôïߟÏ?ÿ¼¬n¾Õ´ÎñäøFEE1zôhÀy>Ž3Æ¥ÎJMMÅb±x=@¹.ïe5m#y«ÌÕái{Óû‘'õdy—ªmvV]\GË–-Ãáp ( =zôp ¬S«ÕÜxã,Z´ÈkùžïR¶ÛëB]“Þ¼ïW—§ß<=¾Õ­cëªÍPÞ•ô]ÃÓ|/u›Ð“k°.ë:oüÎ „BÔ6U] Z`³»c…‡…еs{ô:ÝE¯&8(€a·õEQ e÷>víÙïí’ºøþËŸyáñ×øä½/=äQrÏ¡ò|9ÙΣ’Z6# °ê‘ Ë‹k[6Úì7ŸýPaprm¸±Ïõèô:,+ï½þIYpòY%Å%üòã:\ÛÎ{ùÞÜ €ÒR3_}:ÍkëX2ÿ\ïê ÉM½ºîKonN…Ξ·CÃCP©TôÔ›m’èÒ½sÙ²¡aÎÉž„Z[þ± »Ý,ŸØÄe^÷Þ]0—šùvònim6TÒËmÏ>7 R«°Z­|õ©{þð#,˜³€7wC£q9{{_U÷Ú¯-ÛÏd1÷àQzÆD£Q)öHA!§Šœ£ÌÖ3Ýæçü¼žˆ¿®z_¸=I[Þ´Ý¿v+ŸíØÍ}KV“[EGg·ßîpðî–—€ßÚÔ³a=TŠ‚Õîàë]ûÜæÎ/`Áaç«=bêUëUåÆ˜zèÔ*,v;ïoMqa¹ÄjcÖþC\}Þˆßà½ct©´é\¿,ð`ý²ÃLxp>«àèÁΜ,äÈÁÖ,>ÈÆéµZ–ïþ½‘'oáSX8k7¿OÛÉï¬å›6Ôj¾K­Q¡*wž•[È8‘Õb§¤ØÊá}YÌ›‘Ê̯*îõ®¼}»Îp(-‹Ãû²˜òÖlåçcBj¥üW’O^[ņr£#‡ú@;Z9ª¤¥d0qì GrB!„B!„¢.ô4õÀì(勼)nómØpPñïë• l$`_•oÙ·lÙÒ+ëÌÉÉ)eél@Z­fðàÁ´k׎ž={–-{vþáÇÝWT‰ªÊ<`Àôz=‹…—^zÉ-ب¨¨ˆ©S§еk×jlÌž=»ìÝ¥æÍ›W+­'6lØÀÏ?;‡}8p`Ù»(ãBç•'jëœôDUǨÿþ”””ðá‡^ò²•wv”·sϽώVçïñïôÕæñ­©¢V«±Z­îç}ûö1kÖ,ÀyLªs>W×ÅîgOê¾}§—––òÑG¹•Áf³ÕÊhëÎÆJvvö–¬XNN·Ür ?ü?{÷Eµ>pü»=›Þ;-„z@)D)RÅ‚ÊU±Þ–«×Þ¯z-\ËUA¹b±‹ÒÞB!!@zO¶þþØd“%›Ín² ¼ŸçÉólvæÌ9;sæÌìÎyÏ™?³Ṵ̀aÃøúë¯Y¸p!ãÇo²@}w4¶ÍqçøVµ¹f³™§Ÿ~ºÑ*¸Ê[×2w²Ìuiêû oiŠ{³*Þ8²³³Ù¼ÙÖ¯­*¹¦K.¹„Ûd'‹-òX¾M©%^›R}uÒ›×ý¦ºuçøÖׯzëžá\Zêw OæÛ÷„îðf[×¿Ó !„gkUÊå<ûê{¼üö,f}ö ›¶îÂbµÒ³[gþvËDÔ øÁ%,4˜;o¹?_=§ÎdóÝ¢åÍPrX»r=_ÍýžÌŒºPVùöË…X,V:tlÇüEs÷ƒ·ß6öœé’“€ IDAT/êiýëÂõ¬éY}úÙnÎ÷íJ!'+×é:©Gl`Á!A‡xæákUÇÈËõìÇ¢Âbû6Ã*Q›CSå[Uï¢cl#Ž÷èD@ ­CÈÀË.²¯k[žq¢y”ËJËÈɶՙ³ëE—n‰€íø––”¹´Ý}lúG¥r:Óùìêë×nl3³wêš`ßÓûÊ•s¿)ý~ò4zµŠŽAµ’øiÔÜÒµ#ï È7£‡°|ÂÕ,{\9ȘªsÒÆ~w(‹ÕJ‡@漂»zt&Þ߯Aer'íÙÖfœâ«ÇÈ*‰NŽQcô®ü¼ûróÉ)w>ºWj¡íà`–`ã`ž`(CÚâ;y6 }–¬C”ÿú¼Çó°ØjUÆ Ší…ÂÇö¾™²oîÅZVÿ3j㶯ÀjA–€ß´Ñ]vÊæéªÐù£p¾7|Œß]¿ðëñ¿o¾Sþg–V¨uiTQ¶sßœuk©óçþMÍP9 Ba³@Ý® ëy¤î‘?ÚþÔÜ."P=;¶9ëpAꦣ¿ Ðø Šì왌[€'Ÿ|’ŒŒ ì3½ûfXó„Ø_ÿý÷ßþ¹pï½÷²`Á~ÿýwöîÝË–-[øî»ïìÁÎfbœ;w.‹…N:±jÕ*yäÚ·oïvy ÈÉÉ "¢öàÓuâ„­½‹‹ 99ÙPW³SuÕrW†ê+sÿþýÛl`UÎÏvø°mðïÐÐPBCÞ‡¦´´Ô¾MWÒyBÕŒ‚¾¾¾$%%ÕZÞØz厦ª“î¨ïõìiëÿ–’’b¯?Þ¦P4lyo߯êÛ×vtàÀ{àÈÙV¯^ €^¯§[·nM^¦sígwڪࣔ”JJ\ûŽãކÖú”––òÌ3Ï0tèPþ÷¿ÿQPP@=xûí·Y´h‰‰-«¿AcÛwŽïEÙ¾KîÞ½›S§š¯ž·®eîÜ#5e™ëÓ”÷ÞÒT÷fàóàçŸm¿ÅtëÖ6mÚ8,=z4‡bïÞ½Í×]­éú۔꫓޼î»{/ÚÇ·¾6Ö[÷ Ñ¿k4E¾MyOèo¶u-ñ;Bq¶¦Ú® •••“–žIZz&)‡ŽqÛ㉋‰ââ¾=Ù¸¥î™þÂCCøÛ-“ ð#+'¹_ýˆÁ`lÆ’7Ìæ [yê¡—xôé‹åÖ»nàÖ»n`ÏŽý|óåO¬]¹¾Ö,ÅP=ãkQa1¹9Í7DpU mï~=ø}×’s®`Ÿ%Ú•³KŸ:éü&Ï]%Å¥„„ãã£;÷Ê-<ߌ™$vI :Ö6ÂÜåCUæUB»„6ÄÄE“™qŠØ8[p_zZ¦Çò>—òÊ QíY‘¡a¶Î gN;ï(PŸª:YWp²mYu½ ¯þÐ’÷•;2KJí¯Ãõ:Ô˜³} ?o^~1zÇ/€:•Ê!`ÕÙw¾Í§³yfãvîÛ0·tíÈ-];²''o¥².ãt­Y{=‘¶±Â*Ï«s2{ZU¾§ËêÎ÷TÀå0½7xêYùÚŽiïðPÖ^7êœëh5öY“Á;ÇÈaQÕÁÓF£™SéE^,MË÷îókyöÝ…Úf4‰Š àÆé}¹qz_ì:â¯ö°m}ºËÛ--­®CZ]Ë­·9ûðׇn Ô^òÍ>–|½+Çtâê‰] ҡѨ¸é¾~(T ÍÛãå !„B!„B¡JÛs“3¦Ó.§-µØžG*mÏñ Vœ¹Ça@eõ µeÖêç*[çÉBK!¹ææ F©šÙ@«Ða°:øYj-eUéJ&ú_G²O_‡eá•eNÖõcKÛçÌ+PDž¥úÀÝA÷r[à42M™L?3LÓI”(¹Ò÷*î z€všöü;üm¦ŸžÆÃnw>flÁɳPøG`ÉM¥ôû°KÏÐE–üt”íÈêÄ!X+ŠQ†u@‹¥à$Ê ¸Êõ«”•³*«âûðÈ_çÌK¡ÄZ–çvÚšÔ+¯´Z©Øüiƒö‘)u#e?ÿŸaO ð G;`ÚÓ0ŸÜ…aë|L‡VךÑÙ”a øNzE@¤Ãû µ•C¶ãÿªÀek¡÷žÍå÷ü¨"!l6dOs†óõ­•c¦*ë™nÅÅÅ„……¡×ë•Þ™´´4’’’ìAU3摘˜H›6m8qâññ¶ÉÕ€¡ºÊik£ú÷ïÏ‘#Gιàà`û¬Q QVùl^§kÞ>?ééÕÏW£¢¢Ø½»úúíN½rGSÖIwÔuŒª‚22êhü[(o߯ª \ª+HéìeUç¬7¹Ón„‡Û®Åͼ ¶kTϤìŽôôt^yåÞ|óMn¿ývxàºtéÂW_}Ř1c8}ÚõïoM¡±mŽ;Ç·ª>×lƒ›ƒ·®eîÜ#5u™ëÒÔ÷ÞÒ÷fàóà×_åùçŸG£ÑpÍ5×ðÑG Õj9r$à<(Þ[õ Zßõ·©ÕU'½yÝwç^´)o]m¬·î¢%~×ðF¾Þjs¼ÙÖµÔïtB!DM­jegI%-Ãö`§SBÝÃç†Ùƒ“³sò˜óåw{þÁª§ü±æO®y;¯<õ{vìl³Â¾øæ|þÇ$vI¨¨òÞÍÚÌÁb …­YÌŒã9ÿ4ZÏ<õ3TΪR5M5® oî/¦M‘ïñc¶øÑ•³þ^1üRòó ølÖ.¿r :–°`ÊË+8Ù|?XÖU_«Þ6M.oÓ>:Ï…šëµä}å²ú<©93xa`2z*ÌfÞß¹ŸÉK~cØË½pw®\Ï™ÒúgþãäinXòÿÚ²‹=9¶=ÂBxa`2s‡_FbPݳ±º“¶1ª>»Véz»Q³:¹z~Ú×n`óì©f\Y™±ÅjÅh±œóÏÙ~iîcä)&ƒå¼ž=lÀ¥%ÕåÕí¥ÅbuXVZbÀdtìä”™VÈÓ~aé·û)+q°¥K¯H}u(¾6•Úµó¥f_ªóáÇ]wöóˆëºÚƒ“OÍcþ[ÉÍ*åûOw2ãÆز.;îuwô&0øü­S!„B!„B´F\è9Ûl<6¨žhÁ`•­s¾Éj"ßR=èrõó‹æým×`­t1¨2°úl™&[€LUueåãv f VÃ9ÿ´T £ŽáŽÀ;x.çI2M'+·eaUé ¦žšÂaã!´ -wM÷Ü®Yþ ¸ÁÉÇ)ýf:Ö’¦ ·ä¦Væ €ºóP¬eyþ´6ª;µ…o(Vc¹Ã¬´ößš­0Îý§Òz$mM¦ÔX+Š@¡Àwâ;¨;kÐç6^KñÇc)ÿõ9Ì'w¶Ù£õc_ÃﶯQFxzf]ú±¯Ù‚“MT¬y›’ÇPôŸA¿w%_ÜŒµÈùóM«©28_éÝÁGËWBÞ#`5€2Bß'“Pyj¢Š…oó•±úÙßùý,Ê¥RÉí·ßnÿßÏÏ|°Iòª:›¿Œ‚ÿþ÷¿DGGS^^ÎË/¿Ìå—_N×®]éÝ»7cÇŽ%3³þ@þ•+W2xð`}ôQ¶mÛØf-{ï½÷X²d‰ÓÙ®¢ªÃ±'ŸÁUÍðT4räHrssyÿý÷6l>>>„‡‡SVVærÐh]e®úßl6c0Îù§Õ:oŸëÒÜõ¦ŠFã¼O”'ê•;šªNº£®cT^n룢V·žyW¼}|ÃÕ6Ö[çTMî´Uå7›w2›ª63>>??¿s¬Ý0Ìš5‹Ûo¿òòrBCC¹çž{ΰ5¦Íqçø*+û;¹z­Çº­t±?™·®eîÜ#5u™ëÒÔ÷ÞÒ÷fUšû<[Ðûo¿ýÀ¸qãìï>œÀÀ@Ìf3 .ôx¾Õ¯¿Mí\÷Þ¹î»ÓNVil}nÊã[wßuïÜ34DKû®áÍ|Á;mŽ7ò­Ò¿Ó !„5µž_òêQXX qàçë|*NË­7Œ#0Àܼ>ùòûœ\Åh4±tÑ*–.ZEtlc&^Í ·N ]BÞóS'ÜKvVõâÜl[àX@ ?AÁä6K9³³rèÔ5ÕË×ñÂãÿvk[–ʨ&çþžyò I=»8Ön&5ƒßZr ֱöåbâ¢éÖ³ 1±Qü°àV-[ǽOãŠa—òצ( Ž=¥ž >WŽ‘;ªêUt\T“¤Š©á+7§ztOî«–$¼ÆìȹåÕ#ÿw ¤} ?ÿÞº‡•iÕ£ -åRb:w¸ÑbaÙñ –Ï ÚOÏ5íã™Ü©íýùϸ}Åïd—Ux<­«r+*€"}]4Z,X¬V” ~×.ŸÙå$Ñ~u–]ãVóÕTs¶â†œƒUù®IÏäÅMçž¹¡.ÍyŒÜ‘—S= µÞOCt| §Ò]¿:üøÔŒmûÙí‰RYæÏܽÄáÿÞâxü Û GSrxöž%Î’9ÈÏ-ãó÷¶ðÕGÛèÙ?†CÚÓÿжè|lu¼ï%ñŒº>‰_¾ÚëÊGi³Ù1`ú\Ÿ×S\=¾îìç^ÇÚ_oúí¸Ã1.+1òñ¿7rÑåmQ(@£Uѵw›×¶ŽQ`…B!„B!Äù+Ë|†Ît!F{î•ÏrÔh›="@@´:†S¦ÚÐ:j:p”†ÉZý "Çœ]™6`e°CðrSª ªˆQÇ‘Uãÿ*êÊiWk–ª÷ÕŠÒå<ýO—òès)j…šlsÛ+¶ÕZ^j-åÛ¢<ú =u½]ÚvC(´~è'Ì´'ç§7ip2€%ÛV7±¨bz  ŒÅ¸ãŒ–£üwÔ‡bJÛ –Üc£aZJ²QÒã”/~ʵ|ÝH[“ùÄV*V¾†~ÂL”a èÇü‹²%JL)Ë؈qßbŒû£ ŒEÓs<š~7¡ ë€ïä(ùì¬Åµë]c¨¢º  ³=?/_þÆýKíˬf#Ö3°Jœþ—BÙŠæ)_U½RÕÝN*+g °–4ïì¿ Qõ¼ÄÕ`Š|AƒQZZÊ/¿üÂäÉ“¹ûî»Y»v-›7oöh³²*½ "$$„¼¼Ú³›7…nݺ‘˜˜ÀO<ÁÏ?ÿl_f4Ù·oÅÅÅçÜŽÑhäÇäÇ$>>žë¯¿žiÓ¦‘˜˜È¼yó5jT‹˜íòСC€-`¨OŸ>ÄÇÇóÅ_°xñbþùÏ2räH6lØ€B¡àÈ‘#öA÷ÝuæÌºuëÆ’%K˜1c†G¶ÙTÍj “S}]õT½r‡»u²±í†«ÒÓÓéÝ»w‹è`¿}ûvJJJêm<{|›+¸ê¬šÍÔ™ØØêë\U›ÜºŸÝi7òy›BUðˆR©dÈ!,^¼ØcÛÞºu+?þø#S¦LaàÀÛ®§¸Úæ¸s|³²²HJJr¨³ e0°X,(•J\›¤Á[×2wUfOÞo4özTs›­eÂ…æ<ª|õÕW >œ.]ºÐ¥K8ÀĉX±bgΜ©•Æ[õª5^kjÎ:éÎußv²&W볷uÏÐ-í»†§ómŽ{š\=[ÂwØÖò;ƒBˆ S«ŸA ,Ô6\ni™óY>¯u‘á¡”––1÷«Ÿ(*.iÎâ0øªK˜rÛ$¢c]¶8uò4Ÿ¼ÿwßô&“‰€@Fw•y×¶}€í&iÄØ«Ü.sCíÞnË÷¢ÉètîöRQàæçîá·l´ý€×&†Ë‡r+߯ªµÀÏß3£6…cGl34ÆÆEqõ˜¡¬X¼†3§²Ø³c?=“»qÑÀdŽN­w[®#wTÕ«®Ý;Ö¨´;µ·Ï„|¶Ë†Ø~˜-/+çPÊQûûžÜWàþ¹ï)—Td›­VŽÙßñÑÙ_öР§Jʘ³÷÷¬Þ€Éb%@«ad»ø&M{y\7vîPo0Àþ\[g¦ÄàÀF)çT·ðw)ÝîÊ$‚ˆªc0K+ëj¹ÉÌáçÇ¢¼F@gC‚¤«òíŽNå™ÑîÝ9¾MíÀ.Ç/Ö“ïìÓ¨Á#*ÊÍö×aÍ7Ü~Y‰Ááÿð(×ꙫ5‚F3ÛÖ§óá+ðÐ?’›U=Kò ¦9¾Å…ŽAí‘1Í3ws_ÿÀê6¶j&嚬V«Ãì ¾þÎG9B!„B!„¢9í¬Ø@7]w"TΟ³ÔekÅ_X°ý–=XE­å*T\âs[Ê79,ÛQ±° Ð9Úo¬Ëån¬Ã~ûëKõ—9]§³¦+©ÆT‡÷«öUŸèº³“Õ+T @©µ¬Îuª–ù6ÁÔ°>ßD–€µ,Ÿ²ïlòJsŽíyœ2(uÒhŒû—b-:ùä.T±½Q·ëT3ÛÓfØaU·ëj×ö³;iÏf)È tÁ¶™Jô£^BÝÙµçò–“T¬ÿÒy·Å„Â'MwÏÕw…o¨ýµùÌA—ÒšŽÛÎIep<êÄ!+Sc•¯…Âwm¯5= à¾Úëö€¹r¿©4[˜ªz¥ OtD®IÝÑÖZe.‹æPVfk_üýþ0&Lðè¶ën½oß>l3==™3g2qâDL&AAALš4É#ÛvWUÀP›6m?~< .$33“m۶ѯ_?.½ôRô\]Þºu+—^z)>>®?»o©†µõ31›Í¤¤¤ØßoŠzåŽÆÔÉÆ´±~ýzÚ¶mËðáÛ4¯syõÕW¹ãŽ;ì³IÖœǷ¢ÂöÝ×·iŸeWƒ]»v­3gØ0[ßÄÒÒÒ&­· ÝÏî´Ui{õêåÜÓÔvîÜi²¹ûî»Qy¨ïN•ÂB[ÿ¢¦>/ÝÕ6Çã»k×.’’’ˆ‰q~oVŸª€Ëª «†òÖµÌ{$o•Ù“÷½U¥<~ßÚšú<ªòûï¿sâÄ ®¿þzbbb¸üòËøòË/¦ñV½j×ßšš³Nº{Ýol;Y—†ÔgoÝ?{ëž¡!ZÚw OçÛ÷„5¹z¶´ï°-ùw!„¦V œÔ9˜(Û Î±ãéµ–ÇÇFÓ«»m„ßï­ '¯yFÚ®é¦;®ã•™Osß#㓯Þ!(8°ÞõÕ꺃Ύ9NaepapˆãvRö´ZÞõÀ­ôJîîfÉfé¢U˜L&‚C‚˜ñĽnývú”mÔ¥ðÈ0BÃCê]wÅâ5ädåðô+2úÚᄆ‡ààG÷^]ùûãÓQ»8ËicË Ðÿ’¾Mš—;ÒŽÀd2ÅðÑCÈ8‘Éž¶Î˯A¡Ppó´ë8z(µÞm¹rŒÜ±|ñjÌf3*•ЇŸ¾ß¥zU3í´ûn©µ¼CÇvŒ;´rÝ5˜jÌìÉ}åê¹ï jEíf=ÚOÏÕíl£›m8y†rsup^^™z»†¹ž_=3ž+,¦È` ¸ r2x;ikšÒ%—õåÞ^]™=ôµuø­>aë¡ R(¸-©ö%J…¢Þ€Öªç+â£ñQ7¼N®H;‰ÙjE¥P0­{§ZË;úsuÛ8ûº¦:fæ>SZý…øâ¨p§ëÔ´ìx&‹•`–ÿëÓ •‹Ñºž:FÍå¯ßO_cåCÛóô;#tU{bÛáKL›@’úD1æÆî¨ÔÎoƒrNWd×>˜koíILÛ@"büIìÁ w'Ó¡‹k'4DNV)åeÕíѰk;Ó{`áQ~têÁÓû: rm •ZÉ¿¿Ž;ÿ1ˆäKâ ÷E£Qá£Wá‹ÉT ßT3ä–QZ#({èØNôGD´?]{E2ŃŸ·¦æ<¾§OV1äšDFLêŠÞOƒB© M‡`zyˆC xÚ‘æù_!„B!„BˆúüZº3fT¨øgèS¨høïá¹æ{àñ­·ã§tà÷Æ€›ì¹KKuX¶Ï°—ƒ†Ü|?}tÉî|ŒË6g³»Âl8Úw z…ã@£mÔm¸\?€µek–-.Y„Éj"DÂ?Bžpi_e˜2ˆWÇÓUë|†Àá¾Wf:Þàí6„*º;ê®#(_ú<–üݾ3–ÜT°˜PÆ I‰%?Ýè ÷ÿ Úþ·ÛÖÍ>ìÖ¸ï[0¯>Ÿ¡²áûÙ´ÎXË )ýö^ÌéÛA©B?úeTq}œ¯¬¬ûYµ%ç(Ör[@‰BìV™ÊWšk­ŠîæRZãþ_íê>£^@Óc ¿0ºT1=Ñ]ù(›w Í’ù¶@e¿›A7à¬,¶u4]!ð!p:=´‡™ö/‹”*´—L¯µ\–€¦ÛèÊu‹©Ö:ÞV,EDDÄ9×fæÌ™(•J¾þúk-Z„Åbá±Ç£¤¤„¸¸8ž}öY–q×®]öNÎ=ô]t‘G·_—ììêzõêårúúúü:tˆü|Û3ç¦ëoáŠ#GŽ`2™ˆ‹‹cܸq¤¥¥±}»mÐ… ¢P(˜>ÝVÏ8à±|øáL&¡¡¡<÷ÜsÚkjMíö0>>Þ(¶jÕ*‡ïîÖ+wxªNºÚn4ÖÂ… íA0o½õ×]w’œœÌ3Ï<ãtÿ{“'ï©S§ˆ‰‰iT eCýôÓOö¾UÎf€ëÔ©“½>/\¸Ð¡o•·¸ÓnÔü¼/¾øb³µ9f³™O>ù€=zðôÓO×9CŸRY»K}rZ­–ÁƒmßSÒÓk÷›õ–ƶ9îßE‹ R©xðÁk-W©TN÷o•;mßGŽéRp¢·®eîÜ#y«Ìž¼ßhìõ¨æŒœU·-•7Σ*‹… 0qâDûà GŽaãÆNÓx«^µÆëoMÍY'ݽî7¶„Æ×goÝ?{ëž¡¦Öò]Ã[ùzªÍqõôæwØÖö;ƒBˆ SÓFoz€xà®›9p8•ã'NRT\ŒÙl!ÀßÄ„¶ ºÈö°¯¤¤”ÍÛw×J?xP?Ò229ž~ç£"[­V** N—¹ëªQÕ£ƒ…Òo@oV/û½ÎõßúèeL&#«–®#eÏArsòQ«ÕDÇF2îúQ„†Ùnöív)ÌjµòÆ‹ïñÞ§¯ã£÷á½ÿ½ÎêåëØ°v3™§1›Íøúù’ØŽàÐ >~ïs|¾¬ÓÙ|6{»ïÆLAòŽøé›Å?–Nnv.Z–˜Ø(z÷ëÁÛ¯|€¹FpäÙvnÝØFw{åí§™;k>Ú´‹#&.šÙïε¯[QaàùÇ_ç^Ä×OÏ/>ä‘Ï㊴c'ÈËÍ'$4˜{gL³}?x …BAû„¶´éLJoÿ¯ÙËu6£ÑÄÑÃÇéܵ#š ¾·Ð¾lõ²uüýñéözu`ßáº6¸vŒÜq:3‹ùŸ~Ï­wNæ²!ùàó7ùöËŸHO;‰R©$2:¥Êù‡§3³XðÙÜ<ízF†ÞWÏ¢ï–R\TLÞIL½ûFÔj5…EÌýh¾CZOî+WÏ}O¸5©#¡>:ÖŸ‘IJny¨• ¢|õŒKhkŸ¡9%·öàéª6Õ?é´ô‹ gMz¦ÓuS ‹Y‘v’ámcÓ¡ þ ‹SÓ)6I àÚŽmñ­ç‹Ü¯© Ž‹&ÌGÇÌÁýùbÿ2KJѪTDúú ¬ã!ÂéÒ2¾>xŒ›º$0²]zµŠ_Žž Øh¢{X0S“Q+ŒÌÝ_w½J+*!¯Â@ˆNË==» R*8’_„BíýiãïÇG»«¤Í*+çóý‡™Ö½×tˆ§OD( ¦‘VTLn¹­RI´ŸžÞá¡Ìܾ³œ7 IDAT³Õ10ÚSǨ¹ ff½¾Ç^júLêERç#ÙíÜ|’Gk„îÛ~о—VÏ<ù®d&ßåØ.ûT Çäx°ô`µXÙúG—O 0؇Çÿí8óÂþ§ÉË.u–Ü%ñíƒÓ3tl'†Ž­4_Óî¿NÖ»¼±¬VØúG:—¨ü¼!><þ†ãçÝç¡Ïë°Íf<¾«¤×Ŷ"T*%·ý_nû¿þ˜ÍTg]ÃRvžæhŠgë”B!„B!„qʔɅs¹=ðo Öá“èÏXP84S*”D©£Q)ê~vðaþû\ÝŸhu D~Ìì‚É5çr©þ2î ²u8þ½l­=(¸Š+ÿÊ}‘YQÿC¯Ð3+j+J—óGÙ:2L˜­&ü”þtÔ$¢ áÃü÷kåí¯ôGQ诬žMÉG©'@i› Ãd5Qv֬şÎæˆÿ­Žá?‘ïónÞLÒMétÒvâÙЗP+ÔZ ø¦è+‡tģ™S8›éA÷1Þý|.âûâoH5#ÇœƒV¡%FG_]_^ÏýfªŸ“þ^ö…–•A¼ñïä½Íæò?)³–ÑVÓž;*÷?ÀÏÅ?žë°¹DÛÿ6Ì'waÎØ‰BWÇ,!V VC‰óe®21gAÙ…Jƒa[õ¾4XW>bŸý×|z¿CRkÑ*þœƒî’éhzŽGÕ¦ÆßaÉMÅZ’j-ÊÀXTñÉ”¯zÝ8ê´u2UPöÓCøÞ0eDgôãߢtþíµ½}¯{«ÙˆéÀ ̧öb-ɕڤÝkbõç=µ§±{µó™ƒX 3QÆØŠÕ>˜OlÁZ–*- }hê˜åÅTAÙ/O¢Ÿø. ­>#<lÚX/€öP†CгuÔ<…K¾Ÿ¡ M¿AÓÉöžé`mÏ—ÉRx Ã__¢íšîcPh}1îúkEª˜^hþ ”j¬å…TlüÄóð€-[¶¶çþ|ðï½÷tèÐøøxÞ|óM‡õ_xá"##9vì/½ô’ýýŒŒ þýïó /0qâD.\Èüá‘2Z­Vž~úiæÏŸ¯¯/óçÏgÉ’%¬^½š'N`6›ñ÷÷§sç΄††òöÛo{$ßýû÷“‘‘A\\Ï<ó z½ž7’››‹N§#44½^_gúÏ>û ƒÁÀâŋٵkÙÙÙh4bcc¹é¦›ì³LUuò÷6£ÑÈèÞ½;ÁÁÁÌ;×¾lñâÅ<óÌ3ö2ïÞ]»_Vc:uŠ÷ߟ3f0yòdȼyó8räYYYèt:âãã¹øâ‹yî¹çêíkä ÷ß?ááá¬ZµŠÂÂBºwïÎ<€ŸŸ&“‰wÞyÇa}wë•;‹…¶mÛÏÌ™3=Ræ“'OòÉ'Ÿ0}út&Nœˆ¯¯/_ý5………$''sÿý÷£V«ÉÏÏç½÷ÞóHžîr§Ý8yò$³gÏæÞ{ïeذa|óÍ7Ì;—ÔÔTT*111MdòÅ_0bÄ ÀÔ©SINNfÞ¼y¤¤¤ P(ˆ‹‹cÀ€ 8Q£Fa­ì»£V«Y½z5;vì`ùòåìÛ·‚‚üüüHLLäŽ;î )É6ÐÑ?üP+_FãP画}|| ´M²a±X(..öèçml›ãÎñ=|ø0 .düøñÜpà ðí·ßRXXH—.]¸ùæ›ñós<«¦ï¾ûŽ#FÉ矷~HZZ:ŽØØØ:놷®eîÜ#y«Ìž¼ßhìõèèÑ£äääÆã?ŽJ¥²CwêÔ‰„„^{í5|Z÷yã<ªiÁ‚<øàƒ1uêT>ýôÓ:Ëë­zÕ¯¿55gt÷ºßØv_Ÿ½uÿìÍ{†*­å»†·òõT›ãê9èÍï°­íw!„¦ Jtd8Ñ‘uÏYXTÌ—ßþBy™@«´oc iÃ3ÜSç6ŠKJyõ?»_`'²NgÓ¹kGûÿgNe×¹®R©¤[¯.øøèèI¿:×[¿vk–¯«õþþ=øÇ}Ïòì«ÿ <2Œa£†0lÔZë•—Ø”õ¾úZA2 QVZn¿yúlÖWhµZnžv=qmb¸ÿ‘;¦YðÙœ8žQç6ÓÓN²bÉo =„}’xóÃê[ù…µ‚_wüµ›»§Ìàî¿OeÀ¥¡©œ9µ¤¸„u«7rõ5W¢R©ì?ÜyšÅbåã÷>ç±çþNPH ÿxÖq¾‚üB({âØ{ˆÎ];b±XYúóJû:…E¬[µ«FÆjµr°žàHpý¹cο $4ˆ1GЭgž{ýñ§ýø½Ï‰ˆ çêk®dȰK2ìR‡åE…Å<þàód© æ©}åʹï)¥’k;¶åÚŽmÞ7[­¼ö×.Ž9¼o±ZyeóN^¿ì"ü5vaæu¥BARh0>*ýë™ÍwCæÖ¤ŸòXÚ³e••Ó©ÆìÔgÊÊêYÞÞ¶—h?==ÃBÍøèz×?»<‹¥sM‡xº…óê¥u·ÓgûdÏA"ô> oËqÑ\ç˜o‘ÁÈë·’]V^ç6,V+Ÿì9È?úõ H§åѾ=–ŒÊŸï?ŒV¥ä¦. Äùûr_¯®N·ýõÁcœ(®îdäÉcÔœvþ™Á›O¬aú—\G›JíCœ(¯þåÃ't!*®ŽY@\;×goˆoçì¤÷€8ü¨×>ˆ›ê¾Ž6TlËŸ²ó4‹ìs;¿º|÷¿ô[ç±òÔç­©9ï–uiü0wnëå0;ûÙ×ô#)Ù¼óìZä)„B!„B!„'|”ÿ_‚•!\ë?‘Úž¼Þð‘{ {x#÷5þúÝ´ÝùO„c ñQãQ^Èqø¸×°‡ÿ˺—Â^#BÁßQŒðUk½bK±Óå%q+kÍ€ ðRØ¿ì¯ÿ([ÇCYŽÏô6”ýÁ'³¸3h:}u17zžÃò2ke?L¾¥ö€s f£Sè˜xñê6ü_ð#N?Û—…Ÿ;Ì„\b)áÉìÇùwÄÛDª¢x%ÜyðÍoe«ùªhžÓeU5ã¯*¶þ¬©s=ki.Å^í±|-§ö¡ŠìV ¦½¿TçS^ˆéðÔ]®«Ëé”Zi ?A¡Ò¢íÊàxtWÔžñÀð×—XòÒ<–¶.ÖŠbJ˜ßÔy(ô!èÇ¿AɼÛÀTÙgA¡DÝ…ÆuûAunÇtd¦+ë\î2«…ò_ŸE?á?(tø û§KÉÍéÛ(7Ýe÷£î0TZÛf+Š1þ MÒ¨ÊY¨›æù»3–"(|‚_U$øO…¢Y5W€Üò:è‚¶Ÿí¯©U¬ÿE@$š¤Q¨; EÝi¨Ãrky!e?ÎÀZ|¦é Ó©©©üüóÏŒ7޾}û:äåå9v 2„1cÆ`±XøÇ?þá0SÀüùó™4i½zõâ…^àꫯöXGÜ;w2mÚ4fΜITTcÇŽeìØ±µÖ+**òX€²Åbá‘GaΜ9òâ‹/68­J¥¢wïÞèõzû¬–άZµŠ%K–x¢¸±{÷nºwïŽÅbqrËÏÏgùòå\sÍ5X­VöîÝëÑ|ßÿ}t:Ó§O§mÛ¶<ñÄN×›3gÇŽóhÞîÒh4ÜrË-ÜrË-ï›Íf{ì1RR¯eîÔ+wx²NºÒn¸kÓ¦ML˜0G}”Áƒ£ÕÚ®GEEE¬X±‚ñãÇ7i0Wyòø8p€•+W2lØ0ÈÀíËòòò< õÖ[oÍøñã9r$#GŽtX^PPÀ]wÝÅéÓ§=–§»Üi7fΜIhh(7Üp}úôá?ÿùOs‹ÅÂ]wÝÅ;ï¼Ã•W^IÏž=ë 8ëÞ½;{öدINN&""‚áÇ3|øð:·ÿõ×_óÝwßÕzÊ”)<÷ÜsµÞôÑGyôÑG[reöÝsq·Íqçø>óÌ3ÄÇÇÓ¯_?FÍèÑ£\îÕ«WóÍ7ß0yòd’““™={vƒÓzëZæÎ=’·Êì©ûÆ^, o¿ý6¯¼ò !!!¼òÊ+ËóòòZD€²7Ï£*ùùù|ÿý÷Ü|óÍäææ:ÁÓùºªµ^«4wtçºßØvÒúì­ûgðÞ=C•Öò]ÛÇÈmNcÎAo´u­õw!„ž œ—_À7?-¥SÇvÄÅD€J­¢¼¼‚ÓY9¤:ÆÖ{)¯¨œ ¶ÀNoûà­9DFEÍÂï–°gçþ:×µZ­<þÀs ¾êRzôN",<„àÐ ¬+¹9y>xŒÕK×±ò×ß°XœÿȺ}Ë.¦Œ½‹Ñã‡qé$vN 08£ÁHQa1ÇŽ¤±õϨT*Ìf3o}ø=“»¹ü¹ºûIþús‡½Ü³ßËÊ_cÂäkHîߋȨp´:-Å…%?v‚m[vQ_xÎí¾úìLÒg0|ô¢b£0TTpìpëVo@¡PÔúqùØ‘ã<ñ/¡Ñj Åb±}Æ:r¬m&Ʀš`Ñ÷K)È/dâ”±tê’€¿¿eee>pŒu«œ—ÙUž8F){1vÒH6ý±…S'‚.üv WLzÚIJŠÏ=S¥«Ç¨±Ìf3¯?ÿ«–®åÚÉ×УwÁ¡AXÌ ò ÉHÏdÿîƒlZÿ—Ó´/=ñëVn`Üõ£Hêѧ2ϰþ·MÌÿô;òê˜õÕSûÊ•sßS–Ï@­T’JNKA…Y¹ÌK9Â᳂“«ìÊÎãöå0)±ÉaDøú¨ÕPj4Qh0’[^Áñ¢b6Ÿ`mµZùç[E÷°`Â||Öi±b%·¼‚#E¬>‘ɪ™XΪî¤=Û»RˆÔûãçËÏGÓØ›Sÿl¾¥&ÿ÷Û&&&¶ãê¶q´ ðC¡€#E,;žÁ½“Ð(ë୻ٙ˘mHòÇW­Æh±PPaädI)ó Ørºv0ºÙjååÍ;Y—qŠq mé„ZÅ©’26džá«GÉk@[õ˱ LìØŽÄà@ü5jÊLfò{Æi8v ±ï9Ȫ™ŒOhKßÈP"ôz´*%Å#iE%lËÊ¡Àà˜·'QsÛ¾1¿OþÁ#;Òg@mCҡѪ¨(3‘s¦„£rÈ8^à4}y©‘çïû• ·÷¦çE1„Eú¡R+()4—]JÊ®3üùÛq§iÝuædÏL_ÂuÓzÓ½_ A:*ÊMd,fïöSlYWwǨ›2¸iðç ÊgãªTrN—0àÊötíEd¬?z_ &£…‚¼2ŽÊåÏ5ÇÙ¸:k÷ž•YÌ3w/aâ¶}âCI±¬ÌbvoÉdsìgw¯+ûlAØ[ן`صéÚ+аH?”JÅE¤ÌeãªT6¬<ŠÙܲÎ#!„B!„Bqa3cæ•ÜXQºŒëü'ÓS׋U(f«™Ké¦ì­ØÃÆòõNÓWü GŒ‡¹5ðvzéz£WèÉ4e²¢tŸ~Zkãš¶–ÿŤ“cã?žËõWÐYÓ™ e0 Y 9j<ÂæòM¨P9ÌHì®Y°£b;“n¤‡¶Ê@ò,yl*ßÈœ‚Ù¤›N8MgÅÊóßeYɯL ˜ÌEº‹‰TG¡Sè(²’jLå¯ò-Nƒ›7•oä†Ì‰Üp |.!ZN¡£À\Àc ¿–üÂÒ’%X= ªÐ{t{ e>½ 0Û€¥0Óa™aç÷¨»\%ÿD³6[©øã¿S–¡ísª6¡ˆD¡Òa­(Â’›ŠùÄ_¶™‚=š¶nÖâ3”/{ ýµo£ ODwé=T¬­œÅÆj¥ìǨ; EÛ¥_8 ß°Z°”äbÉ:ˆéÀ Œ)ËÀjq)ßs1§o§ô³Ð$߈ªÍE("Qøa5”`-/ÀZ’ƒ%7SêF§é-9G)[ø¨´(ý±ZÍX‹³Ðt»ÆöñLÎûg4•²¥à;´}m³$ ÖÕÄZ ¹ÚfRÖ_Ún  «ÌY`<†M`òäc‹™ò%Ï`:´M¯‰¨¢»¡Ðø`)<…éÈ: [>ÇZšëÁ =ïñÇ'55•qãÆGyy9‡bùòåöçþjµš§žz €o¿ý–íÛ·×ÚŽÅbáµ×^cþüù´oßž)S¦ðå—_z¬œ›6mbذaLš4‰¡C‡’””DHHƒ‚‚:Äúõëí}`ø £F"&&†òòr<ÈŠ+<Þ/ëá‡fÙ²eL™2…^½z¡×ëÉÈÈ`ÕªUÌž=›œœÚ?x“;í†ÙlæÉ'ŸdñâÅÜ|óÍ$''†Ùl&//´´4vîÜéÑs°JII wÞy'W^y%'N¤oß¾„……a2™8uêÛ·oç§Ÿ~²'ƒ­N5бcÇÒ¿ ´Ÿ ;wîä»ï¾ã?þðxyËÝ6Çã[RR”)S˜:u*&L C‡(•JRRRøñÇyúé§Ñh4u–ýÉ'ŸdóæÍÜpà téÒ yyy?~œ½{÷òûï¿{´Ìîjì=’·ÊìÉûÆ^,X@nn.S§N%))‰€€JKKÙ¿“\ËÛçQMsæÌaÊ”)(•J>ÿüs*êè£ïé|]Õ¯¿55gt÷ºß˜vÒÝúìûçª}å­{h=ß5¼™¯§ÚWÏAo´u­õw!„E埃çŸ^±wï^EVV–¢¨¨H‘ ÈÊÊRjµZUII‰Òb±h|}}5F£Q ø(•J?«Õ`µZCÖ­[·ð¯¿ªƒ=9ÂZk˜˜èí"¸ìƒÏÞt;øµ%j×!ž/ÚFizâï/òÇoz¹Dw¾#á9KÆÇO£föžÌK9êíâ´j+'Ž@£TòþÎý|{(ÕÛÅiõ漂8_ÞÞ¶—…G6뀢éü4f(!>:^Ù¼“åi'½]!„B!„Bá% ,púþ…ölWÑpÊÐöøÝa›¯ì§‡1išŽ¸BÑ’íØ±ƒ€€Þxã >úè#oç‚Ô±cG–/_ÀôéÓY¹r¥—K$„h öïßV«åå—_v˜qW!„h)仆B!šŠ³8ßÁƒW(y …¢Èb±”åÆPZZjT*•F???‹Á`0GDDXŽ=j °FDDX»wïn}þùçk¢ÓâgPMï¾ÛõvšÄ„Æ`±XÙ·;ÅË¥qÏùzŒ„B!„B!„B!„B´|š>×Û^X-˜3÷Ô¿²BÑDn¹åÀ6“ØŽ2iƒB!„B!„Þ&Ê¢U{é­'9qü$»wì#ûL6e¥åDÅD2bÌ•Œ?€5Ë'7'ßË%B!„B!„B!„B!Z.ýØ×±ä¥a>¹Kñ0–£ˆFÓmšîc0\‰µ4×Ë%Bq>{ÿý÷IMMeëÖ­œ>}šÒÒRbcc¹öÚk™4i¿þú+ÙÙÙ^.©B!„B!„B”E«¥R©¸dp´:mëܘ·_ùo3–J!„3Ó{váŽn‰ïM]þ;…£—J$Äù﮹¦}¼Ã{AõÜ7 !„B!„B!„¸€)U¨.µ®ÎU̧S(_ùZ3J!Ä…F¥R1tèPtºº¯G{÷îåÙgŸmÆR !„B!„B!ê"Ê-Èï»–x%ßË{öJ¾îR«U|úÑ|ú èM\›‚C‚Ðh5qøÀQÖ,ÿƒe‹Va4š¼]T!„¸àùiÔøio; …Ƕ?ÝTm«5¸iðçÞ.‚hü4jB|ê~p/„B!„B!„BØ)ÕTlüuÛþ(‚ãQø£Pi±–b>sÓÁU÷-³ >+„¢éh4Þ}÷].¹äÚ¶mKXXZ­–üü|öíÛÇÒ¥Kùá‡0åz$„B!„B!DK Ê-Hk ö–Š _Îù†/ç|ãí¢áu£®ðvÎÃ~Xæí"œWnZº¶yò‘€]!jùÏö}ügû>oC!„B!„B!Dk`ªÀ°y.†Ís½]!„h±úôéãí"œ÷ÊËËùè£øè£¼]!Äy$))ÉÛEB!ê%ß5„BÑš)½]!„B!„B!„B!„B!„B!„B!„B!Dë!ÊB!„B!„B!„B!„B!„B!„B!„Bˆ“e!„B!„B!„B!„B!„B!„B!„B!Dƒ©½]!Z£ˆÈ0:µ'7'ŸC)G¼]œV-(8Žmû2õHš·‹#„h" X­Þ.…pÆ×_‹R© ¸°ÂÛE¹ ȹ „B!„B!„­‡¦Ç8TQ]1ØŠéà*oG!„h5‚ƒƒéÒ¥ ùùù8pÀÛÅ­HHH]ºt!;;›Ã‡{»8MîBû¼B!„B!„8ÿH€²hmÚÅqë“éÖ³+‘Ñá&Nežáà¾ÃüùÇ_¬]¹¾Vš¤yîõÇÑûúðÚsï°qÝæfÉ·1¾øé#üüý˜õÎÜV ì‰ýìI?®üVÃ{ÿž-ÊB´PóG^Aœ¿¯Óeã­¢ ÂPoú„®aL{x þë2R š¢ˆ^õéò›Ðù8¿¥úèÕõ¬ûµå]'BÂ}¹ë±A´I&,Òÿ½‘5¿ry;ÃÆwæºi}°X¬,˜µuK]ÿ¬½úÇrå˜NtêAPˆ& rË9•^ÈÎM'Y»ä0å&—·Û5æ\˜‘Ü Û9]öÊæ,O;éÉ" !„B!„B!„¨A7äa:,Eg¼]!<¦W¯^¼óÎ;øúúòÏþ“5kÖx»HBx…·Î… åüí·ßà7ÞðJ€ò…²ŸÏG6l@«ÕòòË/_»Mýyå\5ÝqÇ<ýôÓµÞ?tè#GŽôB‰š_‡¸÷Þ{éÝ»7±±± 222سgëÖ­céÒ¥Þ.¢ç%¹ !„Bœß$@Yx\ÞIÌüø_øøèìïéÀ :wíH·^] O»ïâÚÄpÿÃs9p¶±ù(• bâ¢ÉÌ8…År~Okèî~B¸O©Pí§çTI–V4•j¹ÉŒÁbqxÏzŽò«ÔJî~üÚv á_ŸŒá«¶±ìûý2ƒ¬—ùhé30έm„EúqÇCP(ÜõØ vü™Aa~yƒ·qûC¸zB‡÷|ÕZ|ý´Ä´ $yP<Û7¦“•YìVY[‚Æž e&3…£Ã{Z Š&,«B!„B!„B!Î_3fÌ mÛ¶Ò1\\ÐÜ=”J%ñññ¤§§c9ë9zSæ+Fö³6r.œÿ{=º%''óÅ_ ×ëíïùúúL÷îÝINN®3@Yö³î‘ë‘B!Äù­U(+ ’ºt¤W·Î´ÅÏOÉd";'Ÿ”CGÙ°yå Ú–Ž¿Ý<‘ØèHæ}÷ û´¼Y [»¾0%Å¥Ì~w.[7íÀl¶NÇÎíëLg6›í¯M5^7u¾ý/éÇ+ÿyWœDYi™Ëy·&îîg!„{úG…óÒ%}ñQ©ùÓrÊL­ç<ü`W º6ÓùÅ—·¥mÇ4ZSÿ~1}Å1ëÕ äe—6E1y]ºG×>ˆ3'‹xû©ßš,¯òÒêàQ…BV§j²¼Z’p½=8l¸Áaú(ºª}­àä³ä–9 NnÎã[åß®'(T_ï:oüs5Û7¤;]ÖØsaÖîÌÚí8¢øOc†Rc@!„B!„B!°csQ†% ísª6¡ ŠÃj1aÍOÇtl=†­ó°–x»ˆâ¡n?Ø^ç܆µ×ñ¿ î¬ûw¨øÓù¶4Ià; tƒ2¬å`>†ÍPò=˜ÿ„ߪ\{íµ¼õÖ[ç\oÿþýŒ3Æé2“Édm–>âæÎ¹0xð`>øàôz=={ö¤´´áϾål²Ÿ…°‘uöb IDATsáüæêõhÞ¼y|ÿ}õ÷߇zˆ©S§6u1[Œ×^{ ½^Oqq1o¾ù&6lÀl6E×®]ëLçÎu_a#×#!„Bˆó[«P¾éº1$uNpxO¥ÕI\L$}{ucöçßPXTÿƒìÐà nºn 1QáMYÜ ZBb;Ú%´à½7f³øÇåöeéi'Ù¾eWi?yÿ "¢ÂññÑñÞ¿g7[¾¾~z‡Y—Ïwîìg!„û|5j|TF+ÀŸkR9“Yĵ·ö¤ßemQ( ×ű\5®3ßýÏI1©+Qqäç4íÀ÷^û­ýu»ÄP^ýŸóÎç›´#yœÉ,&2Æ€“Ç È8ÞðkW^ÓÉáÿùlåGÁ ¡‘~´IFï«qš¶9o½ŸÖ­ôÞ:„B!„B!„hŒ7"f2X?Äá=µBM’¶IÚnŒõϧo#ËœU+­¯Â—™‘ïÑWw‘Ãû4éÔ™Ñ~c¸ûô4ΘO7åGhV“ü¯ç±Ð'Q¢´¿×A“ÀAÓê;œ»NßN¡¥…ü*”è.»íÅ·‚¢º¼ t("» ì‚¦ÛJLÃRxÊ‹ÂF› wÚ^—|]Gp²ÿü¦@Ó…” é ¾áôp°š£Ô-ÛÌ™3‰ŽŽF¯×óòË/{»8Bx;炟ŸŸÃì‹Í•¯h8ÙÏBØÈ¹p~sõzd00 ÿ_(:wîLbb"/¿ü2ß~[Ýß+55•M›6Õ™Öë¾ÂF®GB!„ç·V ¼kïÂÃBضsi™”•WàGrÏnôêÞ™à@F ½Œo.sš^©TÒ¿oO†„î Dõ†¨Ø(ûë k7»”öð£ümòƒÍžï…Æý,„q4%‡·Ÿú6‚kOâ;³ð‹ÝÞ.–p“¡ÂÌs÷,aÈ5°X,¬ùå0f“¥Áéã‚í¯÷m?Å/ öÚÿÏÏ-ãhJ¶GËë•ÊqfìŠr“Óõ,fk½Û‘sA!„B!„B´ËJ~¥­º¿”,dWÅ.Š,…D¨"ã?Ž«}G«ŽãÁà<›óT­´„rüGŽŸ²™žÎ̺©³J%´‹%¡MŒCÛ¤ èÛ_N½@\ëè&(õ?¥²*º`Y™î>_‘ús1%ŸÏÞþ ©TÀX‡óŸŠ É,[û›Íf úú ~›ƒ‚¼2–ÿÐ0­‡gÕØ“Yâ®"Õ gý|uôä§ïþ•¢‚†?oˆ}ADDDDDDDDDDDDDDDDäZg}éZÖ—®µŸÑŸfgÙvd2hÙEX•…1ÜÓ²Øp^á7|‘_¥&\Rü3WŒÙÌšE’² ÝU=ù»l§[Êk0H7¤Õxþïñ´UÄSnÖñê•)”WS)ºb 0Ñw¤d3™˜õŦb’ËQj.åßs“º”9¢;ìbM]ÇT˜†ný{˜uEÎýesÎp~ê;>Fs#²V}äjÌzm3•Tä üÞI˜ !ï%ÇcåUâdíJȨöÚß ÚÕ x4I©›”¢¢¢Z…È"""""""""""T*•õ³V+þÎq'×…@¹6ÙÆ…Ké´‹E&—!f³mj?ü}}ÈÉËgÝæœIIåõçŸhÜ_EdT8oÍø?"Z„±ôç•Ìùd~6jš»ÆŽäÆ›{Ò":‡šÒ-ù…¤]Ê`ÿîCüøÝ/5Ú+• ÝÚŸ¾zÓ&¡5¾~>ôz ò‹8sê;¶ìfůkÜR¿˜Øh¾ÿíK»ãëvýjwlÎ'óùáÛÅÖ¿ïù×íL~é1»t)g/ðà-_gl÷ý}g}ÅaúôëÁ7÷$ªe$*•’+WrÙ³c?ÿýæg2Ò²j-¿3ŒºûV^x}/\fìˆGkMÛ­ggfÍ}+Y9Ü1èÀ5? =”vãi׊À ¼|¼J$de^aÏÎ,œ·„ôË5ÚËd2î;‚!Â@jÊEÖ­Ü ‚Pgþ}öfÔÝ·ß® *•’Œô,¶ÿù7‹æÿJ^n¾MZW}u5 é¿ ex«$ùããE°F…Z&£Ì`ärq)¥eðë™ ”èGíx(± ]CR©ðVÊ‘K$äëÊ9š“Ç/§Ïs,'¿F[µLʱ-éL O4r¥z…åzÒJJÙŸ•ÓçÜn[I¤§oôèL„§†egS™{ôd½|Ö9ÈŸQ1Qt ôÃW©Äh6‘§+'µ¨„c9y¬KM#­¸Ôš^!•°þŽ¡¼ý÷A6^L·ûÎ £‡"—HøìP2¿œ>ï0ß›"BE[?TR)¥Zv¤gñÓÉsäéìWF´òöbþ펯¹}ˆÝ±}Y9ü{«ãHð þ>ÜÛ’ÎAþø(—ë9’“ÇϧÎs4'Ï¡ ¸ç¹“ú 2er ½µ¢kŸ´Š ÀËW‰ æ•‘•^ÄáÝilZqšâB‹PtÞº±(Uö6»‡³pëƒvÇç¼›u¿°9æI§´ïJD´¾T*R™„2­œ¬RÏäñó×ÈJ+j@ík§ã áL™1€3ǯ0õ‰UuÚ(”RŽŒ£ÛMQD¶òEã)§Lk (¿ŒìôŽÈ`í¯É”ik¾ Lj±íñ@[¢çlòV/Næè>û>R“Ÿ¾úÏv¶®>[c>5ÙÞ4¬57 kmw|êÄÕœ9–]«­3××j㤟=¼ªÊf“™â"÷„XÅÉ"""""""""""""""""×*µE6>¬;ÈÍ ”‚ LÕ”€=T=‘`Ùð§¢…v¶[´›É6f$ bfHåvŠöŒñºŸ.ªnøIü(2rHwŠpXwЩº„ÊÂxÌÇ2ömÁפ.¸ÍÖ_êÏ ªü·p¾Uœ\ÉOE?ò ÷CøIü¦¹Õ¡@ù1Ÿ‰tWõ$HŒ¯Ä¹  Ï”Ë!ÝAýÈÝ!§ê[ôÉ5¿5œX‹,æFH¼‚1çÖß_5!ï8ÕàW0å¥RòÝèZÓJ£»£¹ë ÌÅÙϱl- m‡¼Ë}ÈZtAPûaÖa¼|ò½?`L«]#µš1ß!ñÆ”sŽÒEcÖÙÎr ò.cµî‹Ä/ Aá¹¼sY¦üË/î¡|÷÷Nç]ÊÞ!êà„ òA*0—æaL;DùþEuÔW@?Y»HCâTÞ˜ :Ì¥y˜rÏcÊ8ŠþøjLùÝ^îêø¾ ŠN€ ò_£ý”^Óà†‹Pð.6âäê˜i¯TY››‘w¼ih"‚L‰©0ù­”ïù/æÒÜÆÉ´<ôÐC¼öÚkvÇOŸ>ͰaÃjµ}çw;v,¥¥¥Œ9’””»4}ô£F"55•Ûn»ÒÒRßÔpT*#FŒ`È!$&&€^¯'//ääd6oÞÌO?ýdM¯T*9~ü8Ï<ó üñ‡Ýw&''£P(˜6móæÍ³;D¿~ýèÖ­ñññDDDàåå… ”––réÒ%–,YÂ÷ßÛ÷aFÃøñã8p ­ZµÂÓÓ“ââbòóóIMMeçÎÌ™3§Æú2„±cÇÒ¡CÔj5—/_fãÆ|ýõ×äääÔhçJ™ʘ1cèÑ£mÛ¶%,, ´Z-.\`íÚµ,X°€¢¢ÚçUZ߆øÙ•¾ÇêÕ«íŽ9b¿¡óŽ;xàªu(®ä[†øêÞ{ï¥S§N$$$ŒR©”ŒŒ ¶mÛÆÜ¹s¹x±ñîé­[·fÆŒôîÝ›ÀÀ@òòòصksæÌ!99¹VÛN:1~üxºwïN@@ìÛ·o¾ù†ýû÷Û¥wÕÏ®úJ†ÎwÞIûöíñööF§Ó‘““ùsç8tèË–-ãÂן¯ªãjßwÖÏຯd2ãÆcÔ¨Q´jÕ A8wîË—/G¨ÇZ²†”¹¹|åŽú:Ks÷p~ì®NsŒƒÍÕ6â+WÆ#Wxâ‰'xñÅèß¿¿Ã6УG.´¼ ¸÷Þ{Ù»w¯[òË3]Ÿ>} ÁÏÏ…BANNûöícÞ¼y8pÀÎÆ_͘1ƒ¯¾úªA¶µù¹¹îW ÅÕçØ†öýæìƒÍ1ºBsùª©Ÿ½ÁÒïŸ~úé:Ó1Âúûïj\i"""""""""õçº(×FtdiéYvâd€Ýûs9=“SgÎc2›Q©”M]Džzáâbø×Ã÷°mó.Žv,˜ðñõæóù3ˆŽiasÜËÛ/oO"£Â‘J%5 ”;´åͦjs\.—¡Ö¨ ¦´Dë6ò?™ölþ aä]·0pX_&Oø?NŸ¨Y¤å ÙYWðõó©3­€Y™WÜ’7À¤ÁÃÓ~KéˆaD´cð­ýxî±×Hv *õðÔ0óËwhßÉÖWq ±Ö~QR©”W¦ý›!·Ýls<ªe$Qã#¹íŽ!L™ü&GVMX¸ÛWÎö_Wx²c<rÛÛ²‡\FœŸ7q~ÞÜÑ:šÿÛ¾“yí{†U½ƒÔ*nŽ £_D(3öeÕùKvvÞ 9ŸõïI´·§Íq/…/…œO Ap(`uÅöêºÇùyp| ÛÒ29ž[³ Z*<—ÔŽWÝ'eH Õ¨ Õ¨éH‰ÞP£È¸!H—oèÈà¨p›ãQ^DyµâÖ–‘¼¼}_­bá†òXû¶ÜcsÌO¥¤oD(7E„òñc,;›jgç®kÔÔĵbÒÔ¾†Úß{C= õ ¡s(®<ã¶ü4çÚx9å¤áÕ‡ÖÂÛæ¸‡§O¡‘Þt¸!Œ¿Ÿ‚ZÊ­ÚX?Ë}¥$õŠ$©W$ß}¸‹ ËO5Zù¯|ÔÖÏÅEå˜M¢°XDDDDDDDDDDDDDDDDäŸK'eÉåÇmÄÉAÒ`´f-¹Fû…ãfÌì)û›[=†“¨hçðûŸò}†ñÞlŽùK¸Y3þš|û–ÿ\ïò>é3• "ÃÎEÎ-ܭ˶«ò« ûOíf»ó³íÚ¿î1Ò*d¾š>êIT´·9, a°f(5ƒy7÷-~/^æT¹]Á\^¥â4ëËÜóÅ–(µoi%ËûjSQ¦Ý9åM“PtosLÐø#k3YìÍ”múýAÇsè®Ø:BPx ¾ã$þј‹2Ñþö´½8YíƒæÞo´²=®òFPy#ñm ‘4Š@YÚªÒPÛ>&x#k;YÜ@ÊÖMCôwûzÉÕ¨FLGÖª·ÝqÁGÄ'ZõÆ\VLù~ûM܅ד nù\ø!èv9N'k òŠiè’`Ö7Z‘ì‘HQ {y‚­^âÂÿäíG¡]úlƒÄï×Ó¦M£[·nÄÅÅ1{ölFMyyÕf®C‡eÔ¨Q˜L&^xá·‹“;wîÌÇL‹¶sÃr¹FCDD%%%5ŠœʲeË uxÎÛÛ›ÄÄD4Ý9___~þùgbcm×CøøøàããCtt4R©Ô¡°C*•2cÆ Fes<&&†˜˜î¾ûn}ôÑÒ7´Ì®ðÿ÷xyyÙóôô¤]»v´k׎x€G}Ô¡˜Ç•úºâçëW|õòË/Û]#€¨¨(ÆŽˈ#7n‡¹S€Ñ£m7' bĈÜzë­¼øâ‹,_¾Ü¡Ý‹/¾ÈOØ! dèС 2„7ß|“~øÁ­euÅW†Ï?ÿœ¾}ûÚ×h4´hÑ‚~ýúQXXèpSWp¥ï7ÔÏ®øÊÓÓ“ùóç“””ds¼ò¾Q®´æð•«õm\½o4tìnÎq°9Ú4ßsNCøóÏ?­åÞ½{óóÏö¿Ë»wï@qq±CÁ°+ôïߟŽ;Ú å¶Ûnã–[ná•W^á—_êÿ›®)h®ûUCqõùÊ•öÜ\}°9ÆAWi_]ëÏÞƒãu‘Íñ<)"""""""òOåº(«”JBƒéuC'ÚÅÇ¢×X½á/‡i‹ŠK9qÚ~÷Ö¦$84Èæï° ZŽã¿è˜èËõ|={;·í!?·¹BNHhmc)-Ñ:´m׊YsßCã¡Æd4±nåf¶ý¹‹´Ké‚_?ÚwŠw«À2ål*o¸€¾zñÆô) ï;­ÖvÒÚpUô×% gÙ/U;t?þÌxîù×힯3¶&c [,÷aé╤_ÊÀl6ÓµGgšx?ž¼üösL¸gR½êRÙ™–ž^Èå2ôµDÑõ °LìWݺâçêü¹a;¿ÿ²Š¼Ü45»´cücñðôàµ÷žç_£·Û(à¥7ž±Š“W.]Çš)).¡M|kî¾±mceÀcÏŒ³Š“7¬þ“¿®¡¨°˜ö™ðäýøúù0}ö›Œ¿ë)²+ê몯®ÆÙþëþ¼”Á’Óç)ÒëÑÈdô âÞ¸Vø«”L¿±¯ßFN™ÎÎnÞ±ÓÌfÒJJ)Ñ ñþ><Ñ¡-Q^ž<—ÔŽmi™–ÛÎÌKˆ%ÚÛ½ÉÄ7GO±+#›|]9r‰„`ж~>”ÖàGWl«¬QÙü¢Q×*PžÐ®Uœ|<7ŸŸO¥ZT‚Ö¨y³gg”Riù:Ë£íã¬âäÓXqîEz=í|y(± ¾JÿéÓ• ë·‘]í^r¾°ˆÁK×pSxS{t`Äï(3mò09ØlclÛ«8ù@v_=EZq)‘^<Ñ¡-íüxºs"Gsò9“_hcë®kԔĶ âÕO† —×~ ÏŸÎ¥0¿ÊÏe¥Um[¡”Y´›Lfô寫Í1lïïrEýÚLq¡ŽìŒâº6žïi'N¾šÜìRk”igùפØ¿ã¹ÙU IªûYÊú÷µê¶Õ£!& zûñÖT-°«××üª^ÚšÍfúßKQŽ‹çò%’¶ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈµ†§Ä“6ò8îõËÍš”™Ëø$ÿC»tefË;[µ F-¨Ñšíç4sŒ–y™@iݹqÞYÅÉ{ËöðEÁl..%‹f²ï³tTvæÿ).?È©rûs¯¦•<†¡ñàWŸSn.¯ÃÂ9ÛykŠLEd,á]'ù>C'e³ó?æ°î gõ§h!‹B&È0˜mßÉÏ-ø ƒÙÀeÃ%ŠMEȉŠöLö}––òVLñ{…-¥R`ªyÞÄÈÚ À”“‚ÙH¸!˜Š³”^ •ƒ±f© ñÀ\aS‰¢û8«ÀØxq/ºm_`Ê¿„Ä/ eß§‘†wDuó ÓaÊ:å6[‡eTy£¾s6ÒÐv˜ ÓÑ.~Sa†]:EÏG,âdc9ºm_bHÙŽ¹4dr$^¡HCâ1—»WÈYIù޹`2`*¸ŒYW ÒÐD”}ŸFâßÕÀ)ÎnÁ¬µÝY9ø«8Yb-†£¿c*ÎF)|#Qß: $«Žf4x>dù\ò”,®9­¢KÕç2û=åOYÅÉúkÑ^ŠYWˆ4¼ÊÞ!¨ýPßñ1% Æ`.ʪãÛŸ X£Ùe¡öC=T/[NÇÓO?ͲeËHHHàµ×^cêÔ©ðî»ïðÍ7ß°oß>·–;>>ž àááÑhdùòålܸ‘ÔÔTA €¤¤$· `ªsàÀ–-[Æ©S§ÈËËC¯×ãííM\\´K?yòdbcc)//çÃ?äÏ?ÿ$77…BAXX:t ¸Øñ\ã‹/¾he­X±‚Ÿ~ú‰ÂÂBºtéÂ3Ï<ƒ¿¿?_ý5·Ývö÷†–Ù¬^½šyóæQPP€——ýû÷ç‘G!((ˆo¿ý–áÇ“•eÛ\©oCýìJ_8}ú4‰‰‰€%ºçÇ @×®]ÑjmŸyŒW­p%ßÊô®¶5kÖ°hÑ"rrrððð [·nLž<///fΜÉ!Cq½^Ï¢E‹X»v-………$&&òì³ÏÆ|ÀÉ“'9qÂvÎã?n“ìÚµ‹™3g’ššJ«V­˜2e ]ºtaêÔ©ìß¿ß&Zž«~®¤!¾š6mšUœ¼bÅ –,YBff&J¥’èèhfÍš…´Ö±TÇÙ¾ßP?W§!¾zï½÷¬bÝ_~ù…¥K—RTTDbb"ãÇ'!!ÁQVn+sSûÊ•ú6”æì ®ŒÝ×Â8Ø”m£¡¾reØ\ã ;iÊûUs<{;²¯¬ËôéÓcÇŽñê«öïÝÙEDDDDDDDDꇤ¹ àf0šl…\ÁAôëÝ ¥BÑL…ª›¾]Ìkÿ~—/>ú–Gï{–‚«¢[^M~žeæ,±c[||kŠXض1ÖHµó¿ZèPœ,Òøl\³Åú9¾]·|gA~!%ŖݳƒH$Œ¸s’é;°J(dÙUüÒU"ÔÆbÝ›1™,bɸ„Ö6çë@¹®œïç,²³5PÃî`Cn€D*Á`0ðÝ—ö?¢/œ»ÈÚtkd2‹ÈÙݾr¶ÿ6‡®ä²*åC¢"I„zÛ^,.!³Ô± ÜCcw>¿B¼žà¹Þ®ØVçÇ瘺ó_9Ác·SPËF•õ7™Í|¸ÿ˜à·1ŽD0˜ÌÌ;~Æîü…¢bÖ^¸ À ¨p§®Qm Ž G!• 7™˜uà˜]„å2ƒ‘ßΞ {¨}´ w]£¦"©w¤Ux ð÷æ ¼ùÔ¶­;Ç¥”|®d”p1%ŸRس5µQËòßO÷°hÎ~þXtŒu¿à÷òÍŒÌÿxw£æ[_¤2 ’jí¬L«';½ƒÞD™ÖÀ…3¹¬þ%™%ßÕ½[æ™ãW8:— gr™;}ÆjÂù˜ø€F)ÿõ„_ ºÆsÑ>L|µ=×£ K$"""""""""""""""""Ò4˜1ÛEü‘·f¼÷Ãh$vé÷•í!Õ`ywû‚ßFxÜN4…  DÊÍ úª-óG%¦Û[Él¦•·'?ëÇ£íãˆô´_TäWl¯fËå L!½Ž¶RøD^ÙZû— EûK¾ç ŠÈ,u\ÆmU%•ëà5„Nõ=ž›ON™ãÝÏà«T૴ݰÃר)h—jó÷âo`6]_“1Îðá·³pëƒÖSf ´ž‹M ´9·pëƒôØÒz¾¬TÏ…3UÑÖ“zE2ó‡Ûy{‚ýh(Ú=Y—‹­ûÔÁܵŠ+~X±ðÿ»ŒWþƒ™/oâ—or6Ù6ÊÉà;ÚÒµO‹¦¨ŽˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH“Ql*¦×Å® ¼Ô—‡3DZ¤x1&³‰Áš¡|ü5 Áö´ ¯_ù?ŠLExK|˜ð«"6°½ÅþˆXËôÀé ´D•-2Ùn ›¤ìÀÑòÃvQ†+9§?€ŸÄ?‰_­e¿Åc8 AA¹YÇÊ’NÕ»¾¶–M$Í*Ê]e;ø»l'Ŧbæ|i“¦&<%žŒ÷~˜¹!óX¾†m-v³.òO¾ Y€O…úR)¨jýW‘øE¡¹g.‚ÚSöiÊV¿éö<Ì–M^%ÞaHÃ;"¨,s)²–UÂ`¡â¼9¿J ,´´ cúÌ%ŽÛ†)ÇÒ6µ‚ÚÏ-¶Õ‘†$ ó-ï0Œv£]<³¶vU¬~ÿ"0›Äà1a)ÊŸDâ×4 æ¥'Š¡¹÷k<ý¯g¶ãùäz4÷}gK 2¥4$cöiÌ¥¹MRΫ)ßkù_CÀE×Ó°–©$Y+^jù'kårªèØÆì35ŠÔ ç,Qã¹ ipœ{2¾xå•W¸|ù2^^^ÖˆTŸ~ú)Çw{^=zTmû믿ºýû‹ùóçc2™hÓ¦ 7näù矧eË–uÚuéb¹_'QÑŽÑžwñSETãJŽ—ã¾ô»çý=Õ½ ‘† 7ëÉ0fðwÙNk†$ âœþ¬] ÔY7IÙ•=Q‡ê,“·Ô‡ þŠ`iˆÍq¥ ÄOY%”­]âìqòÏ L¹ç)ýuf}i݆NbÊ¿„$(Î*@–ÅöÀ¬+FÐ ‰O8¦‚4$>é«Þµ Q•¥‘]ðz~oy joÌÚ<—m«#‹«ØøÒlF·{^½|d8¿íï/¢ô2‚G ŠPô˜€1í0åûb8½É.¢³;Ä ¹ó3¯`›ã‚L‰ÔF€mÛ²*…ËæÂæ›;-š’_Á÷-CÀ\¸2Œ—§7Wì·*©%€“ idÕgwPÙ®ÌE5opmªæÇÊôî&..Î.TcSXXÈÛo¿Íœ9s())áÛo¿m”¼BB,÷Æ‚‚®\q~ÍAs±uëV&NœÈ;ï¼Cpp0O>ù$O>ù$û÷ïgÞ¼y¬]»Öáu ²Œƒ5‰²®>\cºk‰K—ªæ*CBB8räàz}êçë‘ÆnÚŠ5J¥ûÖ8Õ‡J@@@€õseù»wïÎÙ³gíì®Æ×××Õ¯±©ÉW•¸˗k°®AÛÏ5ù*0Ð2&fd8$¢¹Ú†+ùºRßk™š®¯+c÷õ8ºÒ6®×ç“ÉÄÊ•+™0a·Ývï¾û®u¼½ñÆضm›Ûóåûï¿'4Ô6ð…J¥² ŽG6×òXV }¾j®ö슟›kl.\­ïµðì””ÄÓO? À‚ X·n]i¯×>("""""""r=s] ”«sêìyR/§F›˜èÿ 2À¶Í»ø{Û^ëǨ»o¥}çë¿ ç.òæ”éœ9yÎ֨ⷵùšýS©»ó…Ç…Ë$|hEÔß~ƒûŸWÀÂï–ðäósÓÍ=YþË*ü|)+Ó‘™žYÛ×¹•šÚ\åaƒÞàôwZwœ¯g{®žîZö•+È%UAï«ï¶/oõL"H­Bg4òõÑSl½œIn™…TB¸‡†÷zw%XSóÛÒ2ù;#›-ÂÓ‚ö~Ö ‹yû)p¼ÇÛ†PYwE5Ô—êÍÉÙþiM]Ï[¬»nÅ’ŠŒMf3Æz|©#¿4õ5r†rÓÿtôd°KKªÄÀR©¥Êòxf2™)ÓêmÒô¶ •ÒS yyÂŒ¼¿=ýnEíQµ²¦mÇ`ÚvÀþ—˜õÚŸ õ_äT}=ÔµòòÞ\õsMlúý#îkGH„%buË6ânŠ"""""""""""""""""ÿûìÐnãˆî”è©êm'PÈ4fðAÞì6òô—ú3Æë~ëlEÈ,ï·M1˜ë^Ô¨@Qã9i+"5o(©yÁ¢«¶WŒ–v}jQGúJ-¢OƒÙ@¾©j“i÷?$X‚άãóüOÙ¬ÝHŽñ AA¤¬}Bˆ4´¦¯v‰OD5qòJ?޹¤q¢þ™rÏWä€,nfmå» ì÷ ²Öý)?ü+‚Ƴ¾Ì&*­õ=µÙ¦zÌ;J«oÞÛpÛêÎïDÖAé…fô'hWMÅpjC_g8³…â”ÈÛAÞéN¤á‘†wDÞSN Ú•¯bÊ>Uw¹ê€zÄûq²A‡î¯Ï1œÙ„©$Aª@ðDsûG^!v–fƒe£N$Í»qiÙÈ+¿AâþŸBÎ#àh?C…L ‚Ìî×Ö;¤jÞð{ˉ„ñãÇ[ÿöðð`òäÉ̘1ÃíyUö߆¬©n#iÀ¼²«lذ-[¶0|øpÆŽK—.]¬ÿΜ9óÏ>Krr²³õ½^ÖÉåŽwpG}âçë‘ÆnÍÕ– †ªq¹z*ëk4ë%tQ(j~&t75ùª¬ÌØA&»~–b6¶Ÿk^Kf9®×랯æj®äëJ}¯ejº¾®ŒÝ×ã8èJÛpÅWÍÍo¿ýÆ„  ¤OŸ>lݺ•JE·nÝØ²e‹[óÏ?ÿœÐÐPÊÊʘ9s&k×®%;;¥RITTsçÎ%,,Ì­ùºÂµ<–ÕES<Ǻ wôÁ¦› wÔ·9Ÿ½U*3gÎD*•ræÌ¦OŸ^kú빊ˆˆˆˆˆˆˆ\¯\?oÅj¡°°"ÀC£n½ÞÀšY³b#¡á! =„{¸ƒè˜|úíûˆ \8wS-¢¾¦òó•ìÚÄÇa?ÁíÛ°ªssªf¤Ýé«k‰ÀjÑ‘sËtÖÏm|½iéí Àû޲!µj·H½ÉÄéüBJ u/¸Ð›L¬½p™µ.ê¡æ¶–‘ÜÓ¦ÑÞž|ܯã×ÿÅ­Îí¶Î’«Ó^µ ®kBo2a2›‘rç†À+e:bPšÇšÐjãPõkTêÑŠëÓ+óÝ|)·ÿ®;bDM4å5r…¼œª(Ôj9¡‘Þd\r~<³yÉׄ÷ö«ï'I홿þØ*›¿;õˆ`Ê K†s'r˜úÄ*Gf6äçjY0{‹¾ÚO‡îaôèß’îý¢¬Ü.½#¹åîþXtÌ™ªÔ £ÑVÈ[W}Ý…³××~®‰ìôb«@Y¡£M‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆü3È4fÒð“úÕ™¶:wyÞ‹ &Œü©Ýhs.Û˜EmY_ºŽ×®üŸKå»Y= tf»Êv4šmeh/‰¡²02 ö‘g[ËÛpÑŠÁ\5_ÓVOŒ<€i¹o²¦¤ê=¥Þ¬çdù JL%ÐH¯…ê;fYÄÉù—Uœ `ºbñ•àŽ4¬=ïpô£?¹eß§‘Å ÀºSnŠÍNš¦’+Hh‹þäzÊV¾ê\¾.ØVÇxqº c’€ÔÃßC»J‚áD=ðF=úã+Ñ_‰Ä;y‡QÈ»ŽEÐ Í=_Qòý½˜‹³\¶êHCÚ" °´«²uï O^c=g6ê1gÄ\^âðÕº¹ BÛ! ŠsKY\A· ò_¿é ‹ÿ ç10_¥íÑ©ø UЮošòU¶+¡Bpï‰w•@Â\ríEÅ«œkqv£ÚÉ“'Ó«W/JKKùã?¸çž{xì±Çزe »wïvk³³+6ðñÁÏϼ<*õ(//Çd2!‘Hðòòrk¹ê‹^¯géÒ¥,]º”ÈÈHî¾ûn&L˜@ll,?þø#·Ür‹MÙ¬¬,‰ˆˆ¨ñ;ÃëÚ\¥®u*#êääT3³~¾š†ö…ÊÀ ±u6ßÿÕ¶QS™+ë»jÕ*ž}öY—òhèõu–K—.Ñ©S'5wâN?7$ßÚÚs]¶ÍUæ†äëJ}ÝISõWÆîëñ^çJÛpÅWÕq×xä ÉÉÉ8p€¤¤$FÍÖ­[éÞ½; …‚ÒÒR·GPNLL$66€—_~™ßÿÝzN¯×süøqŠ‹‹ÝšçÕ8ëçæº_¹ gŸ¯ÜÕžÅ÷çëõ9‹»êÛ\ÏÞ/¼ð-[¶D¯×óÜsÏY7‡©‰Úõ¹húmBËÄw©¶öÎæ¤ïÀÞÜ7îNBÃjd¤eòÍgÿå±±Ïa0ðòöä–QƒlÒÞ°<¸1Ðå27º qœ‡§¦Éò¬þCÅÃÓ£Éòu–”³©„G„0døÖ¯ÜLVF6G&Ó!)‘n=“8wæ|­ßÕT~>rÀÒ&ãÛµ!(8 A¶­Û´´FB¾šû÷ L[ÆéUÅÝé+p½ÿº‹Þ‚l£Ù̹jÑnýTJëç3nÚ˜ £DË·ÇNóĦLf¼r†EG6ªíM!Œ‰kU« 9×] Ö×»A"åœ ápK/O§ìŽTlããEH bô©h«e#g _‹²j‚Îúˆ¤+óíˆRêžUH®\߯æäaÛT÷<Ò¹A›Gèʪv¾ jº1E[-J/@`ˆsíÌY„j‚`½ÞÈþí—øòÝm<7f)¹ÙUa’z5Îõ-.´µ‡5Í溾W£ö]-jrNfI³•EDDDDDDDDDDDDDDDDD¤)‰’EP`*¨·Mky,x`CézÒ¯óÒ »ª'JAyµ¹SôÓXæ‡èöSfvnÙÛ}º½˜°¼÷ï«îgw^Š”ÞªØSö·Í9iÕÜÙÉòN•Ѩ¿‚$ ³6í¯“]@i̱ÌåI|‘%Ü €>y æ¢LŒi‡‘†wBݨ3[m/[6p•Ew™smÃÛ«1\¦ô§G0¦A‚ú–wÅ97/o*LC·ýKJ&‚Êy».•«:‚¦êµ1˹È̆ –6*ñDÛßmej(e[ ðSËgy{ðzÒ>MùQ0VÜJ<¤ÉVÀT¶+i`¬¹:²Ö–{‚Y¯uúZ4Z­eÓ`OÏúÏeõìÙ“I“&ðÊ+¯ðꫯ²k×.$ 3gÎt»xïÞ½€e ÌwÜá´}VV€UÐÒœ\ºt‰Y³f1zôh >>>Üyç6iöíÛ@|||â¬Aƒ,ë„JKK9~üxãÚM `WF#'NTwQßúøùjÒªÛ jûÎäû¿Ú6n¾ùfÀ¾Ì•õíÓ§*•ókBªÓÐëë,Û·o **ŠÁƒ7j^îÂ~nH¾;v´ÙÀÀÛæ*sCòu¥¾î¤©ú‚+c÷õx¯s¥m¸úœS‰«ã‘NgY÷£Ñ8·öæ‡~`ذa2dÈ6nÜX§pÐY­Ÿ›ëº;ëçæº_5õy¾rW{vwÜŸÿ®Q}hŒú6Õ³w—.]7n_|ñE½îÿ´ë+"""""""r-pÝ ”âb ±üM¹p©™K㘱ÝÅ»³^ãÉçæ›EŸàãë]kz™¬fÁZÊÙ V}ýl¿çıSV‘棓 cR;KÞôdfXvÒ À?й×]Í {ï.M’gCHM¹ˆÁ` $<„Á·öçòÅtŽJ`ÝÊÍ‚ÀýîàÜéóµ~WSùyÝÊMF¤R)ÿ~í)¤Nˆ+«ÛNxò_vç[µŽfèˆi7c¨!ؾr¶ÿº™`kõP3$Ú² 䎴,ÊŒUâ¼¼j‘zãý|œÏ¯–ˆ§)…Å•[—>J…[m«s_Û¦õêÂÄŽñÌÐo…¼Æ´›.ZVHq ö“ÉA¨UÐZ)pîŠJVÿ6¹>5 £ÙŒT˜Ð®ÝùVÞž ‰Š°¦5Ô™;«´ê…å !ÓTgí…ËLf|• žéœˆÔIµ®»®QS±÷¯‹äW‹¢Üs@K^ûd(½¶$<Êÿ a-¼IèÂð1íÊ?ÊTŠF´ôåö:åMP˜'±í‚¸÷±$Zµunã„ú“]J™¶ê~4èö8:õŒ 0ă6í‚óxüÝ#¨•Ê$|þë]<òb/’zGâ¨A.—¢RËð Ò`0T‰á+²qA®–Òj¢ì#ÚЩGA¡žÄw æ>7Ö·:My}»ô‰äÁÉ7б{8!h<xû©èxC8/Mˆ—OÕ‚¶}Û®ÍgQwÒO}3qжì+ÛS/›žª^|ò *AE®1‡Yy3ìÒ¬,YÁlÀOâÇ‹~/#m`è` :*:p¸BôÜX¶¹Æ«ðø¯ñxHl7Cã5©E0º¦tµm%íí*§«HCÛ!‹ @Ùš71å_lôyµU¨®ºå-äíG"x (½†u@yóó ©y¯1(Yh*xÜÊW%0YÒÈãÁû9pÚÍ’WÉ)ŠÞÛ—Ä O¼µ"íj0ìÒ47iii€%ºmPPPé}}}™5k‰„Ÿþ™+V`2™x饗())!""‚©S§ºµŒ‡¶.>î¹çèÖ­›Sö‡Y„äÆ sZtã µ­ù9}ú4ùù–ùj??۵˖-³®‘på«M›6VÁÇòåËmÖH\ Èåö÷‡ÈÈHk™7nÜh#îqµ¾ õóÕ8Û®¶¸é¦›êm×|¯÷¶áˆ¤¤$ÆŒc\Ï8 IDATØ—ù·ß~Ã`0àïïÏo¼áÔZ£«ièõu–åË—[7Eøðù뮻 ÂÛÛ›¤¤$^ýu‡}¤9q§Ÿ¡z{~ûí·Ê·¹ÊìJ¾®Ô×4U_peì¾ïu®´ WŸs*qu<ÊÈÈ ,,Œ°0Çï8bÕªUäää —Ë;v¬us†•+W:]†º¸r¥j3­Ž;ºýû냳~n®û•«4ôùÊ]íÙY\ñóõzŠ«õm®go©TÊ´iÓH$¤¤¤ðÕW_Õ«¼ÿ´ë+"""""""r-PwèÆfF&=z?'ÏœçÂÅ4ŠŠ‹1MxyzE¯n–ɾ’’Rv8âð;TJ¥uJUM€%—ËQUD5M”ëõR‡·Tí–íãçMר´ö¯ÓøÕ4 =×låÄÑSäæä#“É fäÝ·à`y€?~Äv—]³ÙÌŒ·g3{ÞtTj³¿›Î¦u[Ù±e7é—31h<4ÄÄFãëïÃ׳4J}]áо£€e'­w?zùs¢Ó•Ó":‚°ˆPæ~:ßíy¦¦\$/7?_&>;©TÊÙS)‚@˘(Z´Šà˾s{¾Î¢×8wæqñ­‘ûxñËË­ç6­ÝÊÓS·¶“ÇÏÔô5@Óù93=›…ó~åGîáÆþ=ùbÁL~ùa—RÓH$‡!‘:f¦góÓ÷¿qÿ„»¹eä Ô5+–¬¡¸¨˜öxð±1Èd2 Š˜ÿÕBúÊÙþëHh¿JÉö´LŠõÚøy3.!L†ÁdfÞñÓ6éÏ‘Qª%T£frç”2)û³r(Е£JðU(P×ò{æM7 7™Ùt1¹äétÈ$!5#c¢¬šOT{Ýe[-ª^pú(t dó¥t‡iϳ>5ÁQá oÕO¹œ•ç/Q\®'ÆÇ‹Û[G¡©å…Èêó—éJ€Jɬ¾ÝùoòYÒKJQH¥kTHjg–jùùT cÛÆ0,:µLÊç.R¬7Ð.À—b‘I ËõÌO®¹]¥•§+ÇO©à‰m‘JÎæ!ÐÒÛ“ž|uä¤5}¶¶ŒÉg˜Ð® ·µŠ¤s?ËÏ¥’ZTLnY9 ‰„P5ý™uàF³­0Ú]ר©Ð—™3}/½?À8¡s ï${hwÏåÙ?~ ƒ.}ª¢ßóh÷<šd“æJF )'s®6u ³É̾m©ô€·¯Š)ØFOH>˜IÞ•RGæNÙÒß5F´aÀ{Ñ|uŽìM«õ|C1›-¢Ü›†VÔ×OÅ”¶õ=î¦úÚ|g^ß.½"02Žaw'Ôš.'«„•?s9?‘æF@àǰÅl×nãn?ÙÆl fÒ zªzq—EL’kÌå·â%vöjA·Ä‡0Y Šv Ò ¦£²³Õæ…+ÏrÅh­7˘ɷ…syÜçIFyÞAWU7~-^Ìy} 9Æ‚‚0Y]”]˜žûFŒvß-o‰‡Ä‰å¨ÎñüqM4ÄöËüϸ!´;¡²0¾þš¹_’kÌ¥úFõ±ÿÒnáˆîÝ©ò“¤Ò “…ño¿—P *öèv“oÌG!Èñ•ú£ÔN•¿¾(º["ÏÓc¼|AYC(³ sy‰ãsÎbÔc¼rip[©œòý‹¬§ '×ÁÍÏ[£ÿ3“m‹Q”…n×·({?޼Ã(¤-º¢?´SîyÌ%9 S ñG™DÙÆéá¨lkÄ C»ì94÷ÎE‡zÔ‡”.o'ôÖÜõf£ÃÉõ3Ža.É©Ì"Òî8ºª¾GêU;ŒY§0¦#ñ³Še*Œ÷`ÖæƒT öy у :´¼‚zô§ TCÝ+6m(ob1HÁg*dßæ*#%‹A5Ià1äm,Ç )€ÝÝ_&Saå{@Ñ}òvÃô‡—bÖ! 눢çà ‘a.+D·ó÷À ìÙcÙ`B¾øâ fÏžN§£U«VDFF2sæL›ôo½õÁÁÁ¤¤¤ðÎ;ïX_¾|™>ø€·Þz‹Ñ£G³|ùr¶mÛæ–2šÍf^{í5.\ˆF£aáÂ…¬ZµŠM›6qñâEŒF#žžžÄÅÅáïïÏG}dc¿dɆJpp0 ,àË/¿$55¥RIxxx£-Rÿþûï)//gåÊ•>|˜+W® —Ë gìØ±Ö(€•êJÒÒÒøæ›oxüñÇ=z4†Ÿþ™ÂÂB’’’xê©§Édäçç3{öìF)»+<õÔS²qãF i×®“&MÂÃÃÁÀ'Ÿ|b“ÞÕú6ÔÏWãl_¨äܹsäääÀ”)SJ¥œýôS›ô|öÙg<ûì³ÜsÏ=ôìÙ“ü‘³gÏ’R©$22’n¸7Þx£±æ±»¡××YÊÊÊxöÙgùöÛoñðð`úôénùÞÆÄ~v†´´4æÎËĉ4h‹/fþüùœ?©TJXXX÷çæ*³+ùºR_wÒT}Á•±ûz¼×¹Ò6\}ΩÄÕñhÿþýH$fΜÉgŸ}†Éd"**ŠÈÈHfÍšåЮ¼¼œ ðÜsÏñÄO T*ÉÏÏgË–- ug$''sùòe"""xýõ×Q«Õìܹ“ÜÜ\”J%þþþ¨ÕóÛ¹gýÜ\÷+Wièó•»Ú³³¸âçëõ5WëÛ\ÏÞ÷ÝwmÛZ6Iœ1c*•ÊaDd­V‹¾šäŸv}EDDDDDDD®®yr` ?¡Á„×e²°¨˜~ùƒ²jQD«3噇Q8Ø…ðžQC­ŸOžIaÁÏ¿»^`dg^!.¾µõï¬ û ÷J$ ‰Û¢R)éÞ»ké¶où›Íë¶ÚO>z’ŸœÊÔÿ¼H`pƒnéÏ [úÛ¥+).± ”Õ5ÒD¢µ¡--sûCù¥Ô4Ö¯ú“Á·ö§}çf~Y5±U_Ø(e“ÉÌ׳ðÒOããçÍ‹S'Ûœ/È/t‹@Ù~>yì4qñ­1™Ì¬ù}ƒ5MaA[7î`à°¾˜ÍfNÕ"Ž„¦õó·Ÿÿ?†Jb‡¶¼1}J½m¿ž½€ ÿgï¾Ã£ªÒŽïÔ̤÷„„!zQA@\Y»ò³ìÚ×UYuu±®.Öµ‚e  "*Òé%´PB ¤‘Þ&S „ 3 $3É}?ÏããäÞûÞsî¹e†{ï{Nl£®¼˜‹F墑C]æW”W2復¸' ùª­šrþúŠV¥b|ç$ÆwNr™ns8xqó¯81ŠúIv‡ƒç7îॠ¤ÕòPFOW) ia¨Õ ld4ßµ¹¬8šç³ØÓÖ˜èRotê‚z='{òêÖ â ôŒ ç¢Ä8.JŒktùÓëóá£\Ù)‘ôˆ0þ=´ákíé>عhC—&µcxBÃ\Ë­0[xl͎ט\‡Ýáàƒûx¤Bõ:îç:*B¹Ùâ’  0k÷~tj×wM&!ÈÈݽºy\÷—ûq¤òÔ‹B¾ÜG­iÇú^~lw=6„°^’9¡CJ¸Çååßgré„®Ä&4ðRСé#ŽŸ9î ÷ ‚Bôç't edž¯Ëiw–õß³#Ÿ¾Øåuy ™ûÑvzj×à¾òÕöÖךû7­Ï™¯/ÙJxýÉŸ©ª0ŸqY!„B!„B!Îuµè¢M¥‹6˜ìq™[>H…½ÂmÞ=a0)ø:—iü\³‚iÅ/R`Ëo°ìËf WôÜr‰šö<öwË}Z>‹lëáëÒQkvƒeù*6ü“iÅ/òHÄc¤ëºózô[.óZòt‘{¢§;ÿ*zœ×£ß"XÌ”ˆ'šTWoœñWÝ®A÷®hp9Gu1•ïŽòY¹ö¼]¨cº‚ÃŽ5ãûSå˜Ê±î_¦ë(p8°çïq‹5¯ûE­C7ðTa‰è‡»ª`Þü)ö’lŸÅ6ÄQ[Iõ×xóg(†p ã¦QõÙ-`=ñ΂¢B×E€¦ãù ®Çz`Ö½Kœßd;¦…Oa˜ð:Š>˜€‘ÿhR¸íèVª?»ý÷ ét>¨À;j+±î_‰6íò£P;_‘Ù+ ü {Ô1t3TL¯¿?á/~0èú;ÿkiµkÞA ŽA›v9š.#Ðtá2ßa*§æ›qT´|eš!++‹ï¾ûŽ«®ºŠ~ýú1sæÌºy%%%./†_tÑEŒ3»ÝÎ#<â2 .ÀìÙ³™8q"½zõâé§ŸfÔ¨Q>{—dÇŽLž<™×^{ØØXÆŽËØ±cÝ–«¨¨pKtX¾|9_}õ×^{-}ûöeÆŒ>©ScÔj5½{÷Æ`00lذ—[¶l?þø£ÛôW^y…¸¸8ÆÇèÑ£=z´Ëü²²2î¸ãòóþ.õ­VË7ÞÈ7Þè2Ýf³ñ裲gûµ½¹Ûëm;××”s¡>»ÝΫ¯¾ÊóÏ?Oxx8Ï?ÿ¼Ëü’’’FšZn[>6<Õœ#bÞ~ûíu#×÷Ö[o¡×ë¹ë®»HJJâ±Çó¸î?üC‡5Xvs÷oslذ &ððÃ3lØ0t:çwhEEK–,aܸq¨ÕjŽÖû=_µsS½öÚkDDD0iÒ$úôéÃ믿~Ö±þª³7åz³½¾Òšç‚7ßÝmñZçͱáM[äí÷ÑÞ½{Yºt)#GŽdðàÁ <Ø%¶¡e€Y³fqçw8G¶6›}ÿÞŒÝnçïÿ;~ø!!!!<óÌ3>/ãlêÐÔvö×õª¹¼ý}å‹ã¹9¼iç¶¶¼ÕÜíõçoïÛn»­îó;ï¼Óàzüq¾üòK—i´ý+„Báoç|‚rIi_}û]:w !>–°`Ô5&S-ù…EìÉ<Ä–í˜j=''Ÿ ÞyåCbb£i—Çü¹?²sÇî—u8L¹÷_ »d(=z§NXD(»ƒâ¢öï;ÄòŸV±táJìvÏ7,·mú•ëÆÞÁãF2ô¢A¤¤&ŒÅl¡¢¼’C²Ù²~;jµ›ÍÆ+ï>KϾéMÞ®¿Ýù8›×oorÜ™üû©×8z8‡K¯¸ˆØv±˜kk9´?›UË×¢(J‹Ü¨]0ï'ÊJ˹úº±téšLPP 555ìß{ˆUË|S®/ÚyOF&c'ŽfÃêMäs½A?Î\2zG³QUyæ‘*[«m6/M}ƒe?ýÌøk¯¤Gï4Â"B±Û씕–“s4—Ý¿ícÚÍcŸ}l«–®åª?]NZTôäå°fåfÏœKI£¾úª­šrþúÊ¢Ã9hT*úFGª×QVkf{a1Ÿí9Àþ2÷}~=^­‹W31¥}£#‰6¢ÓRm±Rn¶PlªåpE%OK°v8ücõ†%ÄÒ=2ŒÈ€Âô:8(6Õr ¬‚åGrYv$ûiÇ„7±§{ç×=Ĉ4òÝÁl2ŠÍ·Új啸:¥£’H DQà@Y‹çpoï4´ª†;˜¶å7v/fL§ö$‡aÔh°Øí”ÕZ8VU;’26å»'£ÛžÛ¸ƒU9y\•œD·ðP4jòªjX›[Àç{RR{æ­ß:B™ÙÌÕ;BVCÕÆþ²r~ÉÉGÁõµðþÎ},;’˸ä$úÅDm0 S«¨4[È®¨bkae§Ýäõå>jmÛÖåþk¿fØèÎô”@RJ8Á¡z´:5µ5VŠ ª8¸·ˆœÃeãMÕ¦Þ½ ·ö¦ç€x"cQkªÊÍ”¯fϯ¬_éùå5o«àÉ»~äšÉ½éÞ?žàP=µ&+…Ç*ÉØ–ǦU ¿Ü´cC×›uVå¬[–EQ~ƒ.îH·Þ±Ä´ Â`ÔbµØ)+©ápf1ëWfÝò, üfð…ÂÜJž¼óG®¾ÍÙÖ¡áTUš)Ì­ä·M¹llvövÿ6¥?zu=ý‡¶§sz± Áé°Ù”—˜8´¯ˆ +³aåalV»¯6O!„B!„B¿Ê±æðdÑcœ0”nºtâ4qèÐQá¨à€y?«k~f~Õ7TÚ+=ÆW9*©°WPa/'ËrˆíµÛX^³”Ö¬3–íÀÁÛ¥ÿeQÕB&_ËýyÄhbÑ+úëËb³i¥ö†Ÿ#Ä«ÛÎà<[Ó:çlnìÜʯ8`ÙÏM!·ÒK߃b ך˒êEÌ*ŸIÃsǬÛj·2)o"“‚®g@ÀyĨc U‡Re¯¢Ì^J‘­ˆ,Ë!Ö›Ö6i;ÎD1„ùt}gË–¿-°Z‹½<×ežyÇ<4]Ga/=ÒÀ¨ÍjW¿eÏ"t}®AÝ~Jp ŠZ£¶{q¶#›#û4¶aŽÊL‹žÅ0þUTQ)è‡þ…ÚŸOŒêpPó̓hºŒ@Ý®'ªÀ(c88ìØ«Š±îúw –=‹ÀáÛû˶£Û¨þdÚ¾FÝ~ªà”€Pæ*¦2UEØ‹³°f­óo/:HÍü¿ƒZ‡*0 ‡Ã†£²mú•Îͳ¶îû5?qèú9GI®üõG5ßçIÙp%èÒA3Ø Á²Ì ~ šÇnÃôã“X3W íu5ê¸tmöò<¬VaÞ4 Gu± ô½)S¦••ÅUW]EBB&“‰ÌÌL/^\÷΀F£á‰'œ(Ì™3‡mÛ¶¹­Çn·óâ‹/2{öl:vìÈu×]ǧŸ~ê³znذ‘#G2qâDFŒAZZááá˜ÍfÊÊÊÈÌÌdÍš5uïÀÔ÷øã³qãF&MšD×®] Âl6SRRÂáÇÉÈÈà—_~ñY]ív;·ß~;—]výúõ#::šÈÈHìv;Çg÷îÝüðÃ,X°»ÝýÜ·Ùl<ôÐC,Z´ˆë®»Ž^½za0ÈÉÉaÙ²e̘1ƒ¢"÷ÜÏ_ý5:ŽAƒAqq17näÝwße÷nÏïY4w{½mçÓ͹àÉ_|Aqq17ß|3iiiS]]ÍîÝ»ÏÛÔrÛâ±ñâ‹/2tèPRSS‰‹‹Ã`0P[[KVVK—.eæÌ™”——{Œu8¼üòË,X°€n¸Áƒ^¯§¼¼œ°~ýzJJÜ;3?]s÷osdffr×]w¡Ó鈉‰Áf³Õ%RN˜0p޶|®ðe;7…ÍfãñÇç‡~à†n oß¾DFFb³Ù())!;;›;v°j•ûà-þª³7åz³½¾ÔšçBs¿»ÛâµÎÛcÒ›ß9'yû}ôàƒrß}÷qùå—Édbß¾},Y²¤ÑØòòrfÏžÍwÜà–èK›6mbôèÑÜrË-œþùÄÅÅFee%¥¥¥ràÀ=šÚÎþº^5—/~_ùâxn*oÚ¹­í#o5w{ýùÛÛÓhÉ-½½B!„¢y”ÿ¹˜:uª’‘‘¡*Jrr²RXX¨Òétꪪ*•Ýn×F­ÅbÑ*•*Ðáp;ŽðU«VÍß¼ùT¢á€Zqsü/%%ÅßUh²w>yùœJPþ½’vgòã¸K Ôj˜±s/Ÿí9èïê´iK¯¾ ­JÅ[;v3'3ËßÕiófNB‘W·f0ÿ`ÓF›BøÞ·cF çù;Xœ}ÌßÕB!„B!„mÐ_|áqúíÙ®âì©":xÛ\j¾}ë–M¢B´ Û·o'88˜iÓ¦ñÞ{ïù»:Bœ“:wîÌâÅ‹¸ë®»Xºt©Ÿk$„¾qà 7ðÌ3ϰmÛ6®¹æWG!„B!„žò|‡ 6NQ”EQ*ìv{`Òjµæêêj‹J¥²ÚÍf³-::Ú~ðàAGpp°#::Úѽ{wÇÔ©SÝz²:çGP-ïî[öwþ¤…B!„B!„B!„B´EÚ>r~pرåîôoe„Bˆ6äÆoœ#nß.ƒT!~¢¢¢¸ï¾û˜>}ºŸk#„B!„Ÿ$AY!„B!„B!„B!„âÎ0ö%ì%ÙØŽíÀ^YJpÚôËÑv €ußRÕÅ~®©Bqnyë­·ÈÊÊbË–-äççS]]M»ví?~<'N`áÂ…?~ÜÏ5BˆæIMM¥¦¦‹ÅB=xä‘GˆŽŽfõêÕ,Y²ÄßÕB!„BáG’ ,„Bˆ³rWϮܖžâ2íæÅ¿Pn¶ø©FBüþÝÑ#•+;&ºL ÕëüT!„B!„B!„¿[*5šä @£op[þLK_lÅJ !„ç>µZ͈#ÐëþÍÈÈà©§žjÅZ !„o=öØc 6ÌeÚþýûy衇üT#!„B!„ç IP>‡üòë~)÷Â^Wø¥\!„mK VC Öõ§ƒ¢(>[ÿìU7ûl]mÁõÃfù» ¢ ÔjhøA¶B!„B!„Bá* µëÞG“4%,ņ¢Öá0•c+Ø‹uß2,»~›t\+„BÔ§ÕjùïÿË!CHJJ"22NGii)»víâ§Ÿ~â믿Æb‘ïP!DÛUSSCYYF£‘œœ-ZÄÛo¿MUU•¿«&„B!„ÂÏ$Aù"‰ÂBü±]1‰¿«ð»1òëEþ®ÂïÊõ?ýÜ:åH®n^ß¶‹×·íòw5„B!„B!„BüÞYk1oüóÆý]!DÒ§OWA¿3™L¼÷Þ{¼÷Þ{þ®ŠB´˜»ï¾ÛßUB!„BqŽRù»B!„B!„B!„B!„B!„B!„B!„Bˆ¶C”…B!„B!„B!„B!„B!„B!„B!„gM”…B!„B!„B!„B!„B!„B!„B!„gMãï !þØBÃBèœÚ‘â¢R²dû»:Bˆ¢(àpø»Âc•J¡²¼ÖßUùCsA!„B!„B!Úm«PÇvÃzd Ö}Ëü]!„h¶ððpºvíÊñãÇÙ¿«Å !„/ÅÆÆÖ]víÚåïê!„B!„B$AY´ö¸éökIïÙ˜¸(,+y¹ìÛµŸõ«7óóÒ5n1i=Rù×KS0xñ_o°nÕF?Ôü÷ï\kço–þ­NË›ÿ™! ÊBœ£fNBÑ㼫,£¬ÖÜh|r·H&?4˜w_XMNVYKTѯf.¾}€çŸTïý{ «håYx”‘;=ŸöÉaDÆòþÖ±âûÌ&¯gä¸T®™Ü»ÝÁÓ·²ê§¦ok¯í¸xLºt&4<€ÚZ+eÅ&òŽ–³cÃ1~þq?µ&k“×{.jιð`ßt&tîàqÞów°8û˜/«(„B!„B!„’4¸-ôÿè®ëI¬&«ÃB®5—Ýæ]¬3­ayõÒ‰çýE¡èƒ°Wø»*Bᕵk×¢Óéxî¹çšœdìM¬ø}èÕ«o¼ñF£‘üã¬X±âw]®¿üѶ·9-ZDpp0Ó¦M“åß19ĹFŽI!„B!„hœ$( ŸëÑ;×Þ€}Ý4Lj·Î¤÷êæ1AyòÝ7’Ð>€{ú?¿'Ξ-•J!>!ŽÜœ<ìösHĶÚÎBüž¨…¸@yU5ØÛÐPª&« ³Ýî2Íq†ú«5*îœ2„¤Îá¼ðÁ>o+‹æí–dý,(XGŸÁ ^­#2&Ûþ6E¥pÇ£ç³}}奦³^Ç­Ĩ ]]¦5:Œ:âÛ‡Ð÷üD¶­;Jan¥Wu=4÷\¨±Ú(7[\¦ë´(-XW!„B!„B!þÈzê{óNÌ ”€SÑ…ÒUמú^ &{+„Bq®zðÁIJJhVb–J¥"11‘£Gb?탖,×_þhÛ+„¯É¹ Î5rL !„B!DãÚD‚²JQHëÚ™^é©$%¶#0ЀÕjåxQ){2²vãvLµµ®£Cûv\8¸?I‰ñètZJKËùmw&«ÖmÆbù}ŒÊw®øÇÓ §ª²šÿý˜-¶c³Ù‰Ž¢sjÇãl6[Ýgk½Ïç²Cúóüëÿ$ @ϨÁ©©®ñw•Ψ-¶³¿'c£xvH?ÔjF»˜kÛ9ßùuó6m¤óó.L"©s8Zš›ï?>ç'0ýßk)9^ÝÕ`ô5itéMBÇP ŽUðê+[¬,Sõ©äQEQÐéÕ-VÖ¹$<ÊP—œ ÎܰHÃY'(ŸIG·ääÓ•×xLNnÍýëI¯íøÛs¡а{{>ÏÞ¿èŒ1Í=¦ÿ¶—é¿íu™ö현×ëF!„B!„B_ê¬Má‹øyg½ü yײÏìzëRãe¼õŸFãþqüa–U/q›îM¬5ƒÿĘÀqtÐv Çz”•ÕËù´bµ#ë IDATÕöª3l <1•%€*{%o—½É&Ól1šºhS}ë‹:7‡*2]ŸkP·€*4‡ÝŠ£ô(ÖCk0où GMY‹”+Äé4í!úkçç¢;À¼Ý}™ ; øNÀÅ÷CízÏëÒ¦q"èÏU8L`ËóF¨š¶£-¶­bÕªU$$œ}´>ú(óæýõ\!bµžz·ÎÖÄw† Æ;#Á` gÏžTWŸý{Þ”ë/´í¢%ȹpnú#ÿ•cR!„B!×&”¯¿f i©É.ÓÔ: ñ1$ÄÇЯW:3f}Ey…燳ûõäªÑ£(§’h¢£"qá z¤uaƬ9ÔÔœýh¢aÉ)èÜ€7§Íà‡o×Í;š}Œm›~m0öƒ·þGtlzÞüÏŒ¯«/ .#E·m±…ø=1j5¨ÿ ¬ëWdQ[Áø›zÒÿ‚$z׎K®JeîGÞ0ñ‘Ë&v#6!€Ò¢–í<â¯ãçÔ}îÁ¿?Ó¢å+²”P[IL|Ç—‘søì_X»øÊ..Ï~g «—DÄÒ>9 ƒQë1¶5÷o}*•ÂØë{pÍäÞ¨5ª&Åúë\B!„B!„ÂŒ*c«Ç#¯Å¼I?ý—é]´©t MåŠÀ1Ü™?™[~ƒëè¬M¡“Öù\úÕÒi|Wùmݼ#Öl¶˜6û4Öun2E…þ‚{Ðw(§îs*èQbº¢‹éŠ6} Õ_LÆ^žç»r…h&]_¾Ýù¹êË’“y¯êݾWt  m*¯†üKÁanZ !ÄïËk¯½F\\ƒçž{®I± †V/×_þhÛ+DKsAœkä˜B!„BˆÆµ‰å_3öÎÖ»ÈÎÉ¥ÆTKhp }{¦Ó«{*áa!\6âæÌw½.±]cO$'Ë+`ÙªõTTVÓ­K'.º` 1Q\3öRþ÷Õ?lÙïOl»ØºÏkÞØ¤Øý{ò×Þçë*‰ÓH; !ZÛÁ=E¼úÄJÚw cÜM=IìÆüÿýæïj /™kmüë/?rÑ•]°Ûí¬ø~?6«ý¬ã“Ãê>ïÚ–Ç÷_dÔý]Z\ÃÁ=Ç}Z_o¥õ‰åÆ{Щkd³×!ç‚B!„B!„h [³¸êØå ÎW¡â¥¨WèªëÆón²,‡Ü– Tœn1mæ‘ãz\OÃsçƒÍý{ø”ºDß™åðMå<8¸ `÷…?H‚&‘ç¢^ä®üÉ8px\o¼&¾îóêšU—iHsb}Qç¦RÇ¡í; ÖCk±d|£4Ŷ÷D4)ÃQ‚cÐx”šoòI™B4—* Âÿ ¨À²*Þô¼\è£`¼ÆùÙ’•Ÿ:—WT íkvÛON¾âŠ+P©\;Pýå—_ âå—_æ³Ï>s™WSÓz¼ !~ßvïÞÍUW]õ‡)×_þhÛ+DCä\87ý‘‹Ê1)„B!„k Ê¿íÚÇo»ö¹*E¡¬¼’?ýSm-9¹ùÔšÍ\~É…të’Lû„8ŽäHÐÞÒëuuŸM¦Z?ÖD!ĹæÈ¡RÞzæÔj›Í7/RýÞ(*͉‘yVËÙ'üúCY‰‰ùŸ6/Á60èÔo†¢ü*_Ué¬4¥»tæÚ;úÒ½_œÏÊ—sA!„B!„BœË¬+¹Öc ο)äVºêºavÔòÄñ)˜=dü«‚(¶Qa¯hRù͉ÓÄ3&Èù²ðÌòx§ôTãÜÊ/9n+dZôkôÕ÷c`À`6˜Öy\^ ¨ûl²›šTï¦ÆúªÎMe/?Fí’pÔV`=ø‹Ë(£VCµÅJ¹Ù±ªj¶1{ïAŸÇž”È¿õ!!ÈÈ·²™±sïYµYŸèÆ%'Ñ+*œ0½›ÃNI­™ìŠ*2ŠJXœ}Œc•ÕuËëÔ*–L¸ €g6lgÙ‘\·u.½ú2´*oíØÍœÌ,å^˜˸ä$º†‡ V“W]ÃÚܾØ{’Z÷7#:…óñ¨ ܦÿ4~”Û´-E<´Êóôi¡\“Ò‘>Ñ„êuTš-üVT—û²ØYTâ1|³|él25ZCFv¢ÿÐötJ$8L¢(”—˜(È­à×ÇX¾ “Êrç÷ûÌÅ×£pÿiÓk`;f¯ºÙmúǯodñ×{\¦EÇÑ{P=úÇ‘Ð!”°(#Ô¦+EUdï/áË÷·Qp¬i/Õ^çµcÊ´KØ¿ë8OýåÇ3Æèôj.¹*•&‘Ø) cS•ŠR…¹UìÚ–Ç¢y»1Õ4|ý9.•±×w'26š* vgáW»Ù¹Åýi¨Þû÷V-<Ð`9 Å^8º3Žîì6ý©¿.dFa£±MÙ¿u1Mhç°HƒO““ë“äd!„B!„BÑÖÄiâ¹3Ôùléò÷ɶö¸\Љ$ã2{Y“ËhNì €Á¨pvJøEÅl·ù?׬ ÐVH´:š‘ÆQ.ɾµ)|ïþœïçöî Áo—¾ÁÇåù$Ö›:{˲»á{¢Ö=‹Ð$_*5Jp ŽbÏû¸)´½®&àÒDZ—dSõÑÕ.«î0ã5ïà¨,¤rºûHÞê¸îhû]‡¦}?C8ŽÚ l9Û1oþÛ±__·±ž(†PŒþUDìE©þüÿpÔº>;P´F´ýþŒ¦ó0TáI(º@æ*¦2ì¥9ØŽl¼ñ“&—}&ú!w¢N„Š¢Öá¨.Ávlæ­ŸŸa{´ÝF¡é>ul7”€ÖZÕ%Ø‹³°çíIJk!öÒ#>¯w}aO€®7`‡Ò'ÀæþÈ€àÁ­G ìy\’“ës´P_©š.£í5u\:ŠF½<ëÁU˜7ýGuqËÚ z½ž]»vðÀðý÷ß»-³{÷nt:Ï=÷3gÎt›ÍðáÃ0`ݺu#!!àà`E¡ººš£G2wî\>ùÄõ˜ž4i½{÷&--˜˜BCCQ«Õäåå±zõjf̘Á‘#-w<5Šë¯¿žž={b0ÈÉÉaÙ²e¼ÿþûyŒñgxà†Jll,áááèt:ŠŠŠØ²e 3gÎdÛ¶m Æj4n¹åÆG§NP…ƒ2þ|”3¼›áMls“z÷îÍ­·ÞÊÀ‰ŒŒ¤¬¬Œ-[¶ðÁ°uëÖË5Üzë­\rÉ%têÔ‰   *++)--%;;›uëÖ1}útŸÇzÛr›{l4÷x¾í¶Ûøç?ÿé6=33“Ñ£G7º©©©,\¸Ðmúo¿¹w~½víZnºéÔ;;Þ” ÎvºÿþûÏ¸ÜØ±c뮋§Ç7µý¹½'µ…kÝu×]ÇsÏ=Ç¡C‡9rd£Ë:”Y³f‘ŸŸÏ!CÜæ_rÉ%Œ9’ääd üòË/¼ûî»äää4ºîæ\süù½Ðœk¬·ßûÞl¯?®9ÞÖ@QÆŒÃĉéÑ£!!!ÔÖÖRTTÄÁƒÙ±cß~û-‡{ÿï£Óµ…ó×W¼ùÍÐÔë³V«eëÖ­FæÍ›Ç£>ê±Nƒ-[¶ ×ë™6mï½÷à›ë³¿~o!„B!Dkk ÊéÀ±Ü—äd€ä‰u7ÉwïuO–±ÙíìÝŸE¿^iu‰Ì-ជo'5-€ÿïZV¯XOƯžfBÃBxûãitHv­SpHÁ!A$&µC­V5˜ œÞ³+Sÿ3…ø×d­VƒÁh ®] ÕU5>KPö·>ƒèØ(ó‚‚5té–LÀâ·yÞ¶sk*,8@Xxè—ˆ   ÿ¸ÏÊ¿÷áÛ rïR:¡}< íã¹ôŠáüíβÛCRi`‘—ß}–½Ó\¦§¦¥Ô Q«Õ<þÜCŒºòb—éIIº5‘+'ŒbÊ}SÙ¹}wÝ<_·USÏ_oÜÝ«Z×Ër VCjx©á!LèܬÙÂÞÏ/ä Ž¦ÛiÛmàâÄx†'Ä1mËN~Ì:ê¢ÓòÖEƒéä2=X§%X§%!ȈJQ<&°z{ú¶§†‡pC·dVËgWqà ÕjEáo}»3ö´óWƒš8£8£±QTY¬ &7‡ZQxì¼^\šÔÎezRp IÁ¸¢c"­ÙÒh²psÝÙ£+7tKv™ gXB&Äñú¶ ¾=íç«}ÔÚR{DsïSÈŠs¿öDÅHZŸ8Vþ°ßge^<¦ wkÃÔô=?‘¾ç'òÑ+ëY:_‹Õ¿-غö(eÅ5„F(È­äË[™ps/;…ù»jB!„B!„B´º»Cï#@ Ϛ˧ 'U†«Ï`Šmž_¦nLsb£Õ1Ô8j<Æ9p°É´+Ç®ëÞä:µ„sµÎó©,N‡¥i£H7¸ÎJgG”ŠáÌ÷UUFçýj{E¾Û<ý…÷¢x«Ë4ŦË4)cZþ,Û=?Ûõ&ÖEˆa¨":à¨È§æëûÝ““ ¡'}€*²“ëô€”€TaíQTªIPVwŠ:Îõ¸Q‚cÐt½Mê%˜?‡e§{ߊÖ@ÀØ—Ðtâ6] 5  m†à0UbÞêžXï+ÁwƒaŒósù+P»ÞóršÎ =ñºj8,-V%w*5£§¢MsM¤WEt@qÚã¨ùæÁf%¿Ÿ«¾ýö[ââig`åÒ5|7çGJŠË0 ôê×[ÿr=Aüó…¿s㸻Ünâ<ú¯ê’“øf1?-XFUe]ºuæO7Œ#¥k²§¢¸ó[ê’“—.\É‚y?QQ^IÞéL¾ûÂÂCyéÍ©ÜzÍ=žØ^oÛêtM=}aåÑ<æffQa±`Ôh8?>šI©ˆÐóÒø¿%«)2ÕºÅÍÌÈÄêpp¬ªš*‹¢Ð-"”¿ôìJRpëÛÕÇò)7»>™¿%-…!AXìv>عõy…”֚ѪTÄèJuíèMl}1F×Nb†F”'wïR—œ¼«¸”/÷"»¢ c40upôjõËmª;z¤Ö%'/;rŒRa±Ð#2ŒÛÒ»¦×ñï¡ý™¼d5…õ®Yå\úÍ".lËSƒú0ö»¥˜l6—2ìn„^ß5¹.9y[aïïÜDZÊjƒùKÏ®ôˆ çþ>éì,*ei¹K¬¯öQkJéÍoŒB«m|feS^zªMÕ§Žm^S7@»ÝîÀb¶ŽÕêzÖêÎ,¯¥0¯ò¬–mi“ÿ>Ø-9ùtÅ…Õu£L7Õ÷žÇÖµG).<5yývVþìϵú±õGC¶ÙìX-îß™öz# {»›ËfµóåûÛ¨­±²qU66« 7÷:s B!„B!„¿3´É\èLÄ{¯ìmÌsƒËF¨œÏiÍŽZtгãìïQ6'ÖäpÞ+6( Їû3¾"›óyP”ÚõÙÏAˆÀņ<õ"#w[õ´ìGob½©sKÒt€½èIÂÍa¯,@уZ ¶†³H£sÿ;NÄœ¤xK]‚±íÈfjW¿ƒ½ô(ªð$ôÃîGÝ®?ŒíØìû|뱎!&¾‰:®;öò\j¾º {yžÛrºÁ·;““mfjW¿‹õÐÕ% Ñ¢ ŽCÛ ‡¹ÚC Þ3¯v+ö²µ• Ò ŽKG?ì~T ¸d Ö?ã¨qíYéãuÉÉ–=‹°îü{e!ŠF–ˆáŠç@åûgpõ¯† ÛœŸ«¾€ª¯^VW/7É´¢E«åFÁ=uÉÉ–=‹°üú ŽÚrÔíz£r'Š!ÄשšõggX[Û²mÛ6¾ýö[öíÛGII ‹…RSSÙ¾}{ƒq?ýôŸþ9EEE2`Àî»ï>‚ƒƒyùå—5j”Ǥ‘æzä‘Gê~,XÀ_|Ayy9ýúõã ""‚÷ߟ+¯¼’¼<÷sØuxã7°Z­dggSQQV«¥W¯^<úè£tîÜ™§Ÿ~š%K–PZêú<ý…^¨K0ž3gß|ó ¤§§së­·’––æ©8¯cëkê±q×]wÕ% ®_¿ž—_~™ììl:uêÄ”)SèׯO=õ[·nuK6¼ï¾ûHIIÁl6óÊ+¯°råJŠ‹‹ÑétÄÇÇÓ³gO*+=?Óõ&ÖÞ–ÛÜc㤦ϳfÍböìSQ<òÈ#ÜvÛmgµ­™™™¤§§ΑA_ýuú÷ïOMëoÛiïLxS.À[o½U7úe}\pÓ§OGQ”ºãÔ“æ´³?··-]ëN–‚V«Åbiø7áÉå†ê¼aÃ>ûì3Ž9‚Ãá`È!ÜÿýóÒK/1vìX·o®9'ùã{á¤æ~ÿzÛímÍkŽ·u~î¹çê’“,XÀܹsÉÏÏG¯×Ó¡C^{í5Ô-ðZ[:}­9Çss®ÏË—/gÔ¨QDGG“––æñܾä’KÈÊÊbÿþSex{Lúë÷†B!„BøC›JPÐóäß]{°Ë/8Μï“›_è¶|H°sÔÅêIb’vþÆ^v1o8»nžZ¥Âh4PQYå¶o­Xô ©Ý:PVZΖ ÷JÖ³ó†åâVðù'ó\æægçŽÝžÂxøÉ{10™jyø/O²cëN·e6®ÝÒÔMh”ÃáÀ\ë|Áj=uÕl¶ÔMoˆÝnwYÆ›„Þu«6òÍ—ß»Mß½Óó åæ¶³7ÛÛ\y'zW"£#È;æ|€ù׿M¦gŸtÞ{}&¿nË :Æyƒ6ÿØ©‡œ¾jç½™lZ·­îï_·ePQQÉÃÿ¼—¤Ž‰tïÕÍ¥Ý:§vbÄe0ûã¹¼ûêGuó2÷dÑ‚å,Ùø Z­û¥(®] ¾éj~üv ÿ~ê5—Ø­›v0sÎÛ„„3ù¯7ðÒÔ7ïÛêtM=}a_i¿ÕwWq)›ó‹xmø@Âõ:nIOáÕ­nqëóܯƒkŽ]^ŬË.D§V1(.š%ÙÇ\–éå‰`Iö1¾ØwÈe^a‰Œ¢†…½‰­oÅÑ\º„9“,ËͶ6<*BŒ1€?§:“u×åðÄÚ­ØêÝHÝ_VÕî  9“g%Öh`Rª³‡û…YGyqóo§Ê,-g[A1^:”–[ÓS˜¶åÔõטOœwõëj±Ûë¦7$ÊÀmé]ø%'Ÿ§Öo«Kb.©5ó÷_6ñÙeÉ2è™Ô¥#Ïorí…ÝWû¨µ¨T ÷üó—ääÌŒB–|³—¬ÌbL5 -í;‡»%¥þuü©^0_û|± ΞBwnÎåŇ›ÞÃåÎ-¹ÚSDEy-æZ 1킱ZÜ“aýA«SÓgpBÝß»·çóþÖq<¿FElBé}c ÖŸq]+¾ÏdÉ7{q8`üÍ=tQtz5ƒ.êÀÂ9§®íõÛ¹CJÿþhÌY×¹~ì'Ën¨ÛÏk–â½Öœu¬/öoSør¤n!„B!„B!Úª›CnC…ŠcÖcüTõc£ËÆjœ#"Ýö ÷†=H…½‚}æ½,¯Y‚Êù“q½‰Ýk>Õ¹ìEÆ,¬úÁm™r»³ƒÏ•k§©uIÐVNuèiq˜Ï˜íM¬7un)ê„>hÓ¯ võÛ>[¯£âÄËôŠ‚*0 {¹s$Lͼ{<&'¨z`ÙýæÍÿs™g«(hÑ‘u­‡Üï¹[¬Â^œEàmsA£GÓq–Ý ëæ«bºžJ¸Ý1ÓÒ]W¿.h¹å€axƒósÍ(µñå5IÎÿÛrÁ^Öø²¾¤ ‰G7àF,;¿Ã´è™ºyö‚}ز7xól”€ôç߉iñs­W¹V°bÅ £KþúkãÇôo¿ýÆêÕ«ëþÞ¼y3ååå<ûì³$''Ó§O¶mÛÖÈÎ^BB“'O`îܹL™2¥nÞ®]»X¿~=ßÿ=aaaÜÿý<þøã~¯óI+W®t›¶téR8À¢E‹Ðëõ >œùóç×ÍïÖ­W^é¼~¿ÿþû¼øâ©ów×®]|óÍ7ddd ÕjÝÖíMìéšrlÄÆÆòÀ°xñbî½÷ÞºÄÍ¢¢"n¹å–.]Jll,“'Oæá‡v‰ïß¿?óçÏçƒ>p™———×è~ñ&ÖÞ–Ûœc£¾¦Ï6›Í%™öôÄÚÆ8jkOüFª7R±Ùl®›ÞoÊõÎãí¥—^BQ222xâ‰'ŒoN;ûk{ÛÚµîØ1çûJŠ¢CNNS¦L¡ÿþüç?ÿaóæÍ€sŸuËœnÕªUüðéßÏ¿ýö•••<óÌ3¤§§“––ÆîݧÞsðöšS¿œÖþ^8©¹ß¿Þðf{[óšãM¹éééuIŸ}öO=õ”ËúvîÜÉË/¿ìóå¶vþúZsŽçæ\ŸW¬XÃá@QFŽé– ¬V«¹ôÒKX²d‰ËÛs§Ömã½ßöpç²5”5’ìrûí¯lÍpIømI£:´C¥(XífîrOV<\QÉ¢ÃÎ##“Ú5i5æÒ¤vèÔ*,v;¯mËpaÙdµñõ,ƹ à«}ÔZúI¬K<ذâ0Sïù‰Õ‹rôP)Çóª8r¨”µK±iUv‹ÖåÿÝÄçÓ·òýç,þzß}¶“¦­ãã×7¶h¹gK­Q¡ªwœ™j,æV`µØ1ÕX9¼¿˜…sv3÷£3÷”»×q²2‹9¼¿˜/­ÅV/q>¹[d‹Ô_!„B!„BÑv„©Âe ÀçÿÃFã/æ¶dñkív[²0;j VÓ?`„?Æçñsé¤MöiìÓ&²­Î{ƇOalàx¢ÕÑè±ê8FG2Ìà|nUe÷}‡ÕÍq®ÕY–ˆaÜ4P¬™Ë±î_é³u;jÊp˜Û x–¡¨Ðö:¡7š.ŸªG ³ƒa{É‘ºiڴѠу͂iÙKu Æuë·Ô`Þö%@Ý迾ˆ=*¢Æë>B•‚-/ƒê/þ¯ÁädGµ³“Xu|Ch£ën-ö’ìº:+a‰.ó´iÎsk-µkg´vÕ¼ PÃïà츪Íjoåþx5i—ƒ¢»ó:÷¶²²˙4¥é6Tmjì€Võí·ßb?ñP=|¶ÞñãÇ£V«±Z­¼ñÆnó÷ïßÏ×_ ÀUW]U÷¾ÁÙh©:ŸÉ¡C‡ê’û’’’\æãìP¸¶¶–7ß|Ó-Öf³58z¢7±Þ7nz½‹Å¿þõ/·¤ŸêêjfÍšÀðáÃÝâ‹‹‹èÓ§aaaM*Û›Xo´T¹gâ¯ã¹5©T*^ýuÂÃ騨àž{îÁd25y=Þ´sKik׺ÒÒÒºÑBO& «Õj&MšDÿþý5jTݲ'ç>|ø¬×ÿý÷§6éÕ«—Ë=º1 oz¦§ÊŒOæ`u¹yt2iÇy£<óÀaöÊ&±],ËV­w.¡ø&ìL~^Úø¨€õÍùt>‡ô§SçÌ^ð>ó¿ú‘ç/9cÂiß=ë>/œ¿¤‘%4¿ý%7'”®ÉÄÅǰsûnzôN#8$€Á à­—ß ¶³Wñœ#­³5Õ5/&:&’°p×ë]ÓS8°ïÕU ÷„ïI>Îdûƒ™Yäçº °æç Œ¹ú2ôté–\7Z¶¯Ûª)çoKúåX>c“ÛcШéÂÞ×nÀµ&tîÀ ¸hb„éuÔXmäTV×%¦ê=ôæ873‹ób£èÄg£‡óÝÁlfåpô,F”÷&öt?ç4üG}'GÞSRFaMÓ5WHg¹Ë*ȯö|<¯Ë-dL§ö¨Õ¤„†°§Äû®Ú{ŸØÞ]Å¥™<÷¬›Uî|€¦×¦×Õ%%ƒo÷QkèÞ7Îåï¯>܆ÃÞ:Ièþðʧã‰OòÜIFJz³WÝì2íͧW±nY¦j ‡÷—Ð!ÅyŒô=?‘—?ÏŠï3Y¿â0Ç*šU§š* 9•uõ ‹tïØ ­ñ¦…B!„B!„pyàtг£–ªÎüÒîC…÷×}V¡¢›.±Aã¹:h" šDÞˆ~‡ksÇcr¸ßçoN¬;OÿoÅL'DÊS‘O7X· »:£=ݹTgUxÆ?½‡bÇ^˜‰iáTŸ—á(ËA‰NEíØ¯¨ÛõB pÞ·ÕtB-¯ „Ä;—/=• ¬Nì€-÷7UÇ=®ß^tÐoG1„ã¨)ñ:¶>ulº7¢°ÞHÍü‡qXªÝfËÖÏÑtŒ*2™ÀÉß`Ù1KÆ÷ØKZ¶VE„¶ÏŸÐt‚ÊŽÃR½äH]²´¢Ñ»Ä¨cÓ°fâ¨.nñ:zbÞ º h!r:ß Ö³ÉKjäQ’¦Dœ‰¹ø!°ò¾ž'GǶîo0IÝzð´=Ç£hPǤbËÛåq¹?ºêêj ˆ‹‹#""Âgëí×ÏyîïÝ»·.aåtË—/gÒ¤I ÒÓÓÏzÊ–ªóIÁÁÁÜxã >œ„„"""¨®®æðáÃu 4.1'“öìÙCUUÓž{ë°mÛ6 <.³¿³ãðˆˆ"""ê}>þøc.¼ðBºté²e˘={6óæÍ#++ëŒe{ë oËmαq&-}<Ÿ î¾ûîºãíÑGåÈ‘#.ßíÜRÚâµîÈ‘#¤¥¥‘ÀÖ­[éÛ·/¡¡Îß&Çç…^œ£ËBÓ”ËÊÊ(**"22’èh×þ½½æ4æpÕçÍöú«­+·gOç;·{ö졨¨¨ÕêÔÏ_kîõù»ï¾cРA¤§§Ó¾}{—ï+®¸€ÌÌL222|Z_ýÞB!„BhS Ê'ÕÔ˜È>šKöÑ\ödâ–?#!>–óúõdݦS£š-Î-ÉtZm6fÎþÆe]†zÿ 5›-­Pû3Û¸v OüíYþç½DFGpÓ“¸éŽIìܾ›¯>ý–Ÿ—®©ëᬾ“£ÅV”WR\ÔÊ]·AÍmgÉ9’ëLºmçì!òÂçPUYE‡äöÄ'Ä‘›“G»grßÑìÜV«›éD’¨Nï:’yD¤³ç·‚|Ïûybt㆒“óNÝ0ŽŒ:u3í\n+oäVzÉ!Ê go½w#:†ñò…çmp½É¦W« «·_<õɰ1ÿ8O®ÛÆCýº çÆn¹±[gv•0'3‹U9ùn£öú"¶¹"œ/Kä61éÝWåæ×4\n^½ÄåHƒÜß_iF¹Î}Ú;*‚Ÿ¯¹üŒËë´. ÊþØGÞˆŒ ¬ûl±ØÈ;Ú¼$Û?ŠÿNý™§þ{¡b‚ùó]ýøó]ýØûk >ßÉÖ5G›¼ÞêêSÇNïÞ±B!„B!„âe„q$+j–SaoÚ}[;vv™3ØUœÁ&Ó^Šz…xM<ヮ拊Ù>‹ÝeÎàºÜk¸%ä6†«ŽÅâ°gËcƒi—G­Žæ å@Ó6¾ uV…'a¼v:JP4öâ,ªçÝ{ÆÄÛæ°—EZ—€¬I¹Gm%ªÈN¨BÛa/;†*4áÄò§^WNŒª¬NìGðß7Ÿ±,ÅR—dìMl}šÔKœj7Î<«6²f­£æ»GùJ`ºA“Ñ šŒíد˜·ÌÆš¹ÜmDg_PE&cœøJpŒËtE£Gm¯?Åuþ‰ÄeG¹ÿžVLÕ<{Ô19ŽO[ŽçåÎ>|Q52 ™¢uâ©Ï¾pò¸rT4ܳ½^;ž\^xVsâù«^¯?Ã’gïdbZC ?§Ï‹‰‰ip9OZ¢Î)))|òÉ'ÄŹvêà’`tú` QQÎc,/ïì:÷U¬7N¶ùÀ9pàÌßsaaa.É‚«V­â¯ý+Ï>û,111Ü}÷ÝÜ}÷Ýlݺ•™3g²hÑ"·R}ë oÊmî±q6Zêx>ôíÛ—ûïwv~3kÖ,/^Üèò-ÙÎ-¡-^ë²³³ë”áÔˆ¦¤¤¤Ô%&&:¿¼›’  PYYIdd$ƒÁeº·×œ3ù=ŸGžx³½þj«†Ê=™Øš“ÓÀÎÒÏ_òæú¼páB¦NŠV«åÊ+¯ä½÷Þ@§Ó1zôhæÍ›çó:ûë÷†B!„BøƒÊßðÖ¾Ydç8ìtIîà2¯¼ÂÙ³§ÑÐp¯…'çÙìvªÓV¯XÏŸFßÊóO¼ÂÎí»爲ϼü³¾~—”®ÉîA'þmí8‡ÍÎuÍjg?9|Èù>îĨ¿Ã/JiIŸLÿ€ /Œ^¯#<2 “©–üÜüV«[CÇÜÉÉV‹µÉëTNÐg{<×_î\n+ohU§.ÙJ½àéÁ}‰6Pk³ñÖŽÝ\ûãJF~½ˆ+æ/áö¥k(¨n|¤áÕÇò™ôãJ^øöî;<ª*}àø÷NŸIï•!$„@hŠéUi‚ÁUÔUQw]ѵ¯ígY{[\ êŠ;¨tDŠˆTé-!„$¤÷2õ÷Ç@ÈBÊ$Côý<Ï3¹÷ž{Þ{næÞ÷œ-»Øç|é¢GPÿ7 óÇ\LœŸO«”mŽÓÛ®S5ýVópjê£ê¥y‰u×¥Xuªb»ÃÅn?翺ڥ­÷‘»XÍö?ôèÉàL./;ó¯ªòÌõÒnw¸Ì+/3cµ¸¾¨”™Ṽ7þÀ²/÷QQæÚÑJBr(÷<3’{ž‰ZÓ´ó¥æûPçËÃÕ–hi; !„B!„Bñg¨"Yï-tUYÃIçòcù*˜÷Ðß0ÀíeOÚ²x¾à¦eLbðñþ OÌÕ™—óAñÿR;;{ÞUµ³[à~žŒYåU#9ùå_ÌÆQÖ:£†ÙóSOÕ €&~$ŽŠÌ¿¼çü»ËpÐèQL8,•.£ÒVÿNí°ƒÍ|îj[ÊÖdMÝ„£ªÓ´×ÐÄnÔv[ÿDé;“¨\ú¶ çˆgêÈdŒ“žÅkÖç¨BâÛ„¤`œô¬39ÙZEÕš—){g"%¯¤tî0Ê>ºGIÝÏFÖ*ç•g;.­\ÿ‡TøPÔ½¬õT‰:SÛÅxæ¹aûyŽUóyºªÏY[Sk¼ãrúÜoÎû­±|c(ŠÂÿû_ÂÃ鬬䩧žbÈ!tëÖ^½z1iÒ$23ëî@àt<KÓfhIÙ–8½l6f³ùœÿtºÚ×çU«V1tèPî¹ç¶mÛ8G¤œ;w.K–,!11±Þú[R¶%šSoKŽÆø£¾gf0xñÅQ«Õ>|˜çž{®Áå[»[C{¼Ö¥øtòøñãÉÏÏçõ×_`ôèÑ ‚ƒƒ©¨¨hrÒèéd¿³ßspÇ5§!çÛyÔÚ÷ý–l¯§Úª¾z++ïÔi4m;ÖS{<=¥¥×碢"Ö®] ÀäÉ“«§3___l6‹-j•Ø=õ}C!„B!ÚZ»AùlÅÅ¥^&מï²s½Ø zü}}(,®Ý›wX¨³'ÐüüBlçÑh¹‹•e߯fÙ÷« câ´±L¿v*c;ðŸ÷žåº©·‘›sæq~®3éÌÇ×?_Š ‹=z³ÙOeD)´]2TSÛ¹¦š‰s­¿•rØÙ#dDT8Ý{&Æ7 ~`õòuÜv÷ =˜ß6ï@QŽ=޽¤¾¶jçÜœ<ºv‹%<*¬UʆEœé0?ïLOæîl«óIpÎò+«ª?wõ÷¥“¯7ÏoÝͪ´3½'ZìvSf=w’¸Ångù±,?v‚p/#:EsU×ÎtôõæÕaqýÊŸÉ­¨r{٦ʯª|5ÕßùD},v;v‡•¢à¥mÚ-0·²Š8 ÜËXï2á5îC5÷QM5G+nÌ9xºÞ5é™<±¹ù/ µå>j‰‚¼3…½´„Gû’•Þôû™Ëím˜_{öõD¥j¸òGnYâòw¯‹¢¸ÿç( G÷çñè­Kê*æ¢0¿‚çná³·¶Ñ³ ïDÿa1è Îc¼ï h.¹2‘>ÛÓ”Mi›Íõ»Ó¹¶×]šºÝÑÎB!„B!„BüY0ŽD…Š*G¿TnlñúÒ¬ÇHÐu«N¾m‹²WxOG… ;6ÖV¬nr½žÐÚ1+:/ŒS_q&'¦·jr2€=×9Râ‰:¢*ßH,;¾Àr`ú¡ÿ@?kÚ¯ (ØóS\zÒ´—å¢"Ë•T.þWÓêmAÙšlÇ·RµêYŒS_A‹qâ¿©X¢Âº¿Iû6 –½‹±ì]ŒÊ7mÏ)hûÍDÔÓUoQöÁt¥9ÍŽ­&uXª g'Ü•+žÄ²oYõ<‡Í‚#ûsY?­;Š2 <©’¦›®ê(|žM ¾ y·€ã¬üIËï§>¨À0*V¶M|§+åTÂ}]T§F p”å¶EX 2›ÍØívT*>>çgçÅî”M÷îÝ«Gè¬Kdä™ý—“ãžs°%ºwïN\\>ø ß}÷]õ<‹ÅÂÞ½{)--­³lc¶·>-)Û§ë]²d sæÌiöz, ß~û-ß~û-ÑÑÑ\yå•ÜxãÄÅÅñÉ'ŸpÉ%—pòdÝ3´¤lK4µÞ–îtúmS;¸¶×x¯9c7·Þ{N:a±X¸ë®»ª“ëã®vnËím׺C‡ÎåÞ½{ÍG}ÄâÅ‹yà?~<7nDQŽ9âÒž-á®kN{ñG¸ï7÷ÜoªôôtzõêÕæ‰¢íñüõw\Ÿ?ûì3ÆŒCBB 8p€iÓ¦°råJ²³³ÏGsIO}ßB!„Bˆ¶t~u‹ÚLAÎîrË+\HL9–^ýŸÂnñµGÂU©T$tqŽº|$õx«Æ8tÔ f̺œðȦ'jdeœäÝ×?â–™waµZññõæ’)®½2ïÚ¶pþxܤQ-ŽÙªN%Çyy·a÷Æ54¦kªùãµ—·W«Æ–r$ €È¨0ÆN ÀÊÅkÈÎÊa÷Ž}ôìÓ ôàèáÔ×ÕVíüûvç1Ù-©+!¡M{QätÙ.];U„|¶‹‡;{ǯ¬¨äÐþ£ÕÓÝÙVÐòó×]Jȶ9-:ÓáB€A_ýù°›:&È*«à½=‡¸õÇXí|tZÆwŒnÕ²C¢Â¸:¾sƒ Àûò ˆó÷mV’rÞ©ÄáN>ÞM*÷û©N bý|3ÕãàSÇj¥ÕÆá¢º÷Ee„ÎÆ$IŸ®·_h0zµ{z¬oÉþmmv¹þàzÕM½›ÕDU¥­úsPHÛÝS*ÊÌ.‡5í8k*¥FB°ÅbcÛ†tÞ|z=w]ý-ù9åÕóú lý[ZìšÔÑ6¶<µ…B!„B!„ø3fr>kÙ^µJGÉ® Ä^»séÖ(ÛEǵ¾×°ª|%™Öók仺´Ĕ1¡ ŠÅQQHÅ×w´z¥-Ïù,Oå‰&ñR,û–á(9‰-cêÈ^h:öÎ$3W—=áìÀUÓ±?hô4EKÊžÍ^t‚ò79GBVT/yM|ÓžËÛ‹3¨Úð&åŸÌ»Åà‹6iR‹âªI1V¶elRYë±Í¨ü£ÑÄ w[LÍUùÿÇùYÛ|n¯½Œy7ØN^×ÑfoÀœ>®ÔÁq.‰È5iº Àa©hò¾h-§/N'xü‘mݺ€nݺ՛ø3z´ó]òòröîÝÛf±Õ'88¸úsSã9½½ÉÉÉ„…5í½†–”m‰Óõ<ƒ¡éÏýë’žžÎ+¯¼Â´iÓ°Z­øùùqùå—·zÙ–hL½-96Ü©¢ÂÙÙ¸·wÓžŸ.4+Q²9õöíÛ—Y³fðÆo4ªÝÜÕÎm¹½íñZw:A¹C‡L™2€E‹‘™™É¶mÛèׯƒààA÷Ý?[ãšs¾kï÷ýæ^sšjÆ ÄÄÄ0f̘V­«¦öxþzŠ;®Ï?ÿü3Ç;ß¿òÊ+‰ˆˆ`È!|üñÇZ‡;ŽIO}ßB!„BˆÖÖî”ãc‰sþ4åXºË¼Ò²òêÄã!û¡×ë\æ¼°7^^Τ–»´ZŒ3o¸‚§_y˜ÛÿùWÞýì5üü}\^£©?a-åÈ1ŠO%&ú¸®gÿžƒÕIš7ÿýZ’û$µ0ò¶w2ËÙÓ[phÁ­ZWsÛ¹¦ÓñôÔ×}ÁÕ!-å8V«•°È0Æ\:œÇ3Ù½s+¯AQ®¹ñ ŽJmp]mÕÎ+ÿˆÍfC­Vs÷ÃCÝ„äÊšeo¼ý/µæwîÒ‘q“FžZv Ö#»³­šzþºƒF©}i÷22¶£³WÄÙTÚÎ$çÔ©·[€_Óëk`ÄÓ”âRJÌ΄K¿³®¡--[ÓŒ„XžØ—Û’»1oä |uÚz—ýñ¸ó-µ¢0+±öè*Ei0¡õt‚ó°èp šÆ“+Ó2°9¨…“ºÖšßÙ×›±1QÕËZë™;»üÌè Âë\¦¦åÇN`µ;ð×븳wwÔMÌÖu×>j+¿ý|œÂ£(Ù‰‡_ÇÀQˆŒñ#0ÄDD_{‡1ñê$Ôšº¿Êä,«þÕÉŸË®íIDŒ/!ÞÄ%…0ý–>tNhúèç’—SNeÅ™ëÑèËâé5 Šà0/º&…põì¾»'¡V­Qñ߯¯à¦{ÒgP4Á&´Z5£†€Vë™døÖÙ¸(¿‚òIÙ#'u¥×EQ„„{Ó-9”nÜÞš<µ…B!„B!„ø³Q¡"Y— À®ª-^_/}o’ô=ØÙÄõ5§ìÃ@Þ {ƒb ß–Ç+/4-`h‹˜ÕáIhº rÙãØ [·3o{~*Ø­¨|#Ð&ŽÇ^˜îLô,û–‚¢ ë½sÙÜÃ.e-{p&ó0Œ¼T¾Ó’²uqTSþåmØÒ·ƒJñÒ§PGõ®{aUýÏ£íyGqT:;»UŒþ-ŠÉ%¾òüêÏêðîM*kÙ·´:QÝpÉÿ¡í1Å+Eïƒ:¢'úÿUýÏðZCÙ§ÎDe¯k@ÑY ØËh»ï]PçðÐnfÝ·ì6P©Ñ š]k¾*(m÷KO-»ìÖZËxÂÎÎÄêñãÇc2ý±;€]¸paõûu”ÙµkW¦N 8ãj¾oà)¹¹g:ŠHNNnRÙšÛûÄO4éÝŒ–”m‰o¾ù«ÕJ`` =öX“ëmèŸC‡QXè|/  ö;1-)ÛÍ­·%dž;eddFHHH“ËÕÉ`­Y¯Z­æ©§žB¥R‘’’Â[o½Õ¨zÜÕÎm¹½íñZwäȬV+QQQLž<™´´4¶oß8cT…Ù³÷ÖÜ÷>gK¯9íQ{¿ï7÷šÓT‹-ªNæ~饗¸âŠ+ Á××—>}úðÈ# Õºÿ;p{<=Å×g»Ý΂ ˜6m·Ür jµš#GްiÓ¦F­£©Ç¤§¾o!„B!„'œ{èFS€¿ß| §rìx%¥¥Ølv|¼½ˆ‹aà·}eeåüºý÷ZåW®ÝDl§øûúð×k¦±zÝ/”–U׉CœO¯ö:JÚ‰Öë){Ô%ê?ûøÒï¢^ü¸üçz—é­§°Z-¬^¶Žý»’ŸWˆF£!<2”ÉW^B`ó?¤{wí%ÐápðÂs™ûþsŒæþï9~\±Ž?ýJ打Øl6L^&bã:âèÇ;s?l n[wÎQ Ÿ~ùaæ¿ý)UUf:tŒ""*œyÿ™ï¶ºšÛÎ5¥¥§ ¿€@n›s£óG‹ƒ)(ŠB§Ø:tŽâÍ—ÿç–x-+G#¾[´~>|ùÉ¢êy?._Ç?îŸ]ó½‡ë[ Ðví|23‡OßÿškoºŠ‹‡à_äË’ž–J¥"4<•ºîä“™9,øà®¹ñJ.™<£ÉÈ÷_-£´¤”½¹î–«Ñh4•0ÿ­O]ʺ³­šzþºÃµ‰]4èÙq’R‹•®¾ÌJŒÃ¤Ñ`µ;xï!—å•U^A¸ÉȽÑkÔlËΣ¨ÊŒN­Â_§ÃØÀë/¹‹ÝÁÇ3ÙŸ_DAU•B˜ÉÈäØ˜êš÷ŸJìuWÙšFu8Ó³¸Ÿ^G¿Ð`Ö¤×}]N-.eeZcb"™Ø¹ÞZ-‹SÓ)5[ˆõóá².1˜øoiê †F…dÐóÊÐþ|´ï™eåèÔjBMTõ$Ÿ,¯àóƒ)ÌLˆe|Ç(Œ5?=N©ÅJR?×%Æ¡Q)›-ÌßWÿq•VRFA•™½Ž[{& V)),AQ “¯7¼½xë÷3Yr**ùpßanLêÊ„ÎÑô dÑÑ4ÒJJɯ4£S©÷2Ò+8W¶ïÁæpMŒv×>j+³·ŸÛÈ}ÏŽ¬8±w‰½ëî­{ç¯?ZPkúÞíYô|fÔà«nîÃU7÷qY&7«Œ”ynŒv[×§1xL,¾þîÞuô„};NR[^Wñ&‰î䇑‘“º2rRí¤ùš~ÿ-£ÁùÍåpÀÖõé wj{ Üÿ‚ëöîuÓöº¬³÷ïõsú3¢FkjtnЭW¬¾¦úï×ý‰m\;ÍB!„B!„¢½ê¨í„—Ê9:ÐîªÚÏbëòïàç)°åó[Õ2­XÕA 4 bºÏ T¨(µ—òué—n-kTŒøªüˆÐD¨Kb´i Ézç³ä|[>÷äÎ!×Öº£7•§bÖõwŽ(hËØ…íÄN}=£û9ì8ÌeuÏk*›[îÔ¡ (j-æmŸUϲX#þY=ú¯íä>×0J²©úå=ôƒf£í9u‡~Xv~…=?GYht¨|#QG÷¡rõsÎÄQ7”­—µŠŠ…waš>UH<Æ)/Qþéõµ½MW¼ŽÃfÁz`%¶¬=8ÊòA­q&i'O;³½Y»›ÛªµØ²b/ÎDåáL(ÖSoP IDAT°ß‚£¢Ô:chë5ÐZEÅaœö†qº-®–(ú?Ð}ª`ð{r®Ç™¾n)û #A×¼®mWç4k à]÷Çd/ÎÂüÛÇèúÏB›4Eg²ë[U%¨#’Ñ ø+¨48*‹©Úô®ûh¦¯¾úŠqãÆʇ~È›o¾IZZz½žÈÈÈ?T²VFFï¾û.³gÏfÚ´i˜L&>ÿüsŠ‹‹éÓ§ûÛßÐh42wî\O‡ À¾}û8qâQQQ<òÈ#F6mÚD~~>z½žÀÀ@ŒFce322˜7o·Ýv£Gæ‹/¾`þüù¤¦¦¢V«‰ˆˆ¨wÿ¶¤lKdeeñúë¯3gήºê* À'Ÿ|‘#GÈÉÉA¯×Í…^Èc=†Íæz}þàƒ0›Í,^¼˜]»v‘››‹V«%22’™3gV¶x:AÏ]e[¢¹õ¶äØp§-[¶ÎwÞxã æÎKUU;w&::š_|±ÎrG%//   î¿ÿ~Ôjuuâi×®]‰åÙgŸu[½3fÌ !!€^xƒÁP爹X,–ê¿ÝÕÎm¹½íñZg±X8pàIIIøûû3þüêy‹/æ‘G©>~ÿ½qÿÿhŒ–^sÚ£ö~ßoî5§©*++™3gï½÷^^^<÷ÜsnYï¹´Çó×SÜu}^°`wÜq~~~\wÝu¼ÿþûŽ£©Ç¤§¾o!„B!„'œ÷ ÊÁÁ„‡Zÿ(“Å%¥|üåTÖEô´ôŒ,~X¾–Iã†ÆuÓ§¸ÌÏÎÍçëïWº=îšrNæß­Ë™:³êˆ¬R©èžœ€Á §ÿ ~õ.·á§Í¬Y±®Öô}»pïíòè3÷ÄèK†3ú’áµ–++-«NP6šŒ¨ëImHEy¥ÛŒKOË`å’µŒ¹t8=z'òâ›OVÏ+*,v[âlKÛù4»ÝÁ;s?ä¾Çþ_€/÷>z‡Ëü¢Ââêew´ó=‡ˆïÖ»ÝÁ²ïVU/S\TºÕ5~(‡ƒƒ $GBÛµ3À{ÿýˆ€@?&NG÷ž <öÜý.ûÎÜ fì„ =˜á£»Ì/).åþ;''»vš»Úª)篻hU*.ëÃe]b\¦ÛžýmGNî}šÝáàé_wòÜÅà­ÕrwFOW) ‰þÔjú70šïÆÌlÖ¤g¹­ìÙr**éZctê슊–†—·í!ÜËHÏ †G‡3<:¼ÁåÏŽgqJ::GÓ=Пg× 8Û»»b40&&’aQá ‹r­·ÄláÁ [É­¨¬wv‡ƒwwäÞ~=ðÓ븧o—ùÅf‹K‚2À‡û£S«˜™K”·‰Û“»Õ¹îϦp¼ôÌ‹BîÜGmiç/'xñÁ5Ì~p¾þõ¼$sJǸ€:”üác¦&UÏKU@TǦ8Þ_¾·“^Eáí«¯»ÞN~ìÜ|¢ÅõD62þý;O²xÁÞ×WŸ¯þ·ƒ^EÖ»¯Üµ½5µõþUkThµu?œS\æµÖhÕB!„B!„BxB'mçêÏéÖ´s.¯BÅ`ãLЉ«|fÔ¹L‘½rï!ß–ç¶²ó¿“ég•sàà§Š5¼ÿ,Ù¶“猿­y*æÓ#þª#“ñþûšz—s”çSúæX·ÕkÏÚ‹:4v¬{~8SOe1ÖÃkÐ$Œ‡ûÉýµÊš7½‹¢Ö¡ë? •4úaµG0ÿö1ö‚4·•­£ª”òoæàuÝ'(ÆŒS^ ì“Y`=õ΂¢BÞEk@Ói`½ë±Y‡õÀªzç7™ÃNåÒG1N}EïƒaôM*nKßFù'ס¿øoh:µÎ¹ÚªR¬‡×¢M¼äÔ(ÔŽ†WäFö(~ üŸu(x_%o×\òç@Às º~έ­jÃ(>¡h/AÓu$š®#]æ;*‹©øvŽÒìÖ¦‘~üñG¾øâ ®ºê*úôéüyó<R«z饗gÊ”)Œ?žñãÇ»Ì/**âæ›oæäÉóãþ`·Ûùç?ÿÉ{g¯¯/O<ñD“Ê¿òÊ+2}útz÷îÍ«¯¾Ú&e[âõ×_G¯×3{ölbbbxðÁë\î½÷Þ#%%¥úoµZM¯^½0 :´Þõ¯^½š%K–¸LkIÙ–hI½-=6Ü%55•ï¾ûŽÉ“'Ó·o_—¤®‚‚‚z“ív;/¿ü2O?ý4<ýôÓ.ó LØmj½7ÜpCõç7Þx£Þõ>ôÐC|þùç.qº£Ûz{ÛÛµœ‰ÇIIIØív¾ùæ›êé………¬X±‚ &àp8سg[ëmî5§½jï÷ýæ^sšcóæÍL:•{¡C‡¢Ó9¿—””°råJ¦L™‚Z­Æápïwàöxþz‚»®Ï………|ýõ×\ss‚üü|—kй4å˜ôÔ÷ !„B!„ð”ó>A¹ °ˆ/.£k—ŽDE„áïëƒZ£¦²²Š“9yì?”ÂÖ{¨¬ªœ|Úæ­»8™Ç}‰‰ŽD§ÕRXTÌ®½ùyÓVÌ5zCl o¼ô¡a!DF‡³è«%ìÞ¹¯Þe÷ÿý1†ŽL^‰àè‡Ãî ?¯€ÃSøqÙ:V-]‹Ý^÷Û·ìbƤ›¹tÊh¿ˆ¸øX|ý}°˜-”—’r$­¿ì@­Vc³ÙxéÍ'éÙ§{“·ë®[â·_v4¹Ü¹<óè+¤;Á˜K‡†¹ªŠ”Ãi¬ûq#Š¢¸å‡w´óiß½Œ¢Âb¦Í˜DׄX¼½½¨¨¨àðÖ­>³;ÚyÿžCLº|<›×o!+ÃõAæ¢/—0jüPÒÓ2(+=÷H•mÑÎ6›çÕË~ⲫ&УW"þ~ØmvŠ ‹9‘žÉ¾ß²yÃou–}òÁX·j#“¯¼„Äñ z²2³Ù°v3Ÿ¾ÿõŒúê®¶jÊùë.Ë@£RÑ'$?½Ž¢*3;ròùdÿŸ•œ|ڮܮ_±žËã:Ò'$ˆ“_–r‹•b³…üÊ*Ž•”òëY Ö‡ƒÖoehTIAþ øëu8p_YÅ‘¢~<žÉêã™ØÏ:&ZRöloìÚO¨Ñ@„—‰ïަ±'¯áÑ|Ë­Vî\»™iqEŒŠGŠJX~ìVU‡/lý¹ùLìÜX?oL »¢* eå,(bËÉÚÉè6‡ƒ§~ÝɺYLŽ¡[€𬲠6ffóÙ£T™Œà‡”ã™ÍLëÒ‘8_¼µ*¬6óó‰“(¸¾ÖáÞÙ}ÕÇ3™CßÐ@BŒFtj¥f i%elËÉ£ÈìZ·;÷Q[Û¾)\õ CÇw¡÷EQÄÄàã§G«SSUa%/»Œ£ò8q¬¨Îò•å¿})S¯ïEÏ " õB­Q(+6S[Îþ]Ùü²öX«ÄžQÂ#³—pŽH꟞ªJ+9¥ìٞŖuõ¿Ü´só fý°QõlZJÞÉ2.щn½ÂôÆhÒbµØ)*¨àØ¡|~YsŒM?¦â8ǽ¬%r2Kyä–%L»ÁÙÖ~ÊJÍäd–òû–L~m…vnéþmJ; !„B!„Bñg¡ŽÀŽ,Û¹;ºtàà‘ÜlB’®QšhŒ*#eöRR-)l¬ÜÀ7%_R`¯ÝñdKÊ”9J)±—Pb/&Õ’ÂŽªíüX±Šc–ÔµAkòTÌŠÑ¿U×_ÛÉ}h™Š5e#öâL—yæ_£I‹½ðx=£6;¨Zÿ_,û—£ë}ê ø„¢¨õ8ªJ°ç§b;þ›s¤`·–­Ÿ£4›ÊåOb¼ìeTÁqèßJÕO¯šé âÛ9hºŽDÙ•W0Š)vìeùØsb=°Ëþåà°7©Þs±¥o§üƒéhû\ºÃ¨|BQ ~8Ìe8*‹p”åaÏOÅšº©Îòö¼£T,ú'¨u¨¼‚q8l8JsÐvŸàÜ}ú„Íf£  €´´4vîÜéö²-áp8xñÅùþûï¹æšk0`èõzŠ‹‹9rä¿üò ®÷~»ÝÎM7ÝĸqãèÛ·/!!!a·ÛÉÍÍeß¾},^¼˜ï¿ÿ»Ýî¶²-ÑÒz[rl¸Óý÷ßOjj*“'O&**ŠÊÊJ:ÄŠ+|×hÁ‚äççsÝuב˜˜ˆåååìÛ·ïœe›Zo]£%7–»Ú¹-··=^ë~ÿýw®¾új~úé'Nœpíìü“O>a„ ¤¦¦RZZêÖz›{ÍiÏÚû}¿¹×œæ8tè³gÏF§ÓŠÍf«N ž:u*àmÙÚãùë)îº>¿÷Þ{̘1•JŇ~HUï×¥±Ç¤§¾o!„B!„§(§þ¹xüñÇ•={ö(999JII‰«äää¨t:º¬¬Le·Ûµ&“Ik±Xt€A¥Ry9‡Ã°nݺE¿ýv&Ñð‚ .hÃÍñ¼¸¸8O‡Ðdo|ðây• üG%í,ÎeÉ”1xi5ÌÛ}€Oöõt8íÚªiãЪT¼¾s_Jõt8íÞ§ã‡åmâåm{Xt´q#!Zω# 0èyú׬HËðt8B!„B!„¢Z°`AÓÿlÏv…§ ì„× _P±ðn¬GZ7 N!„BOëÒ¥ +V¬`öìÙ¬ZµÊà !„B!„MSWžïСC§(ŠR (J‰Ýn/*µZ­¹¼¼Ü¢R©,^^^v³Ùl ±=zÔáããã q$%%9üñZ=†÷#(‹Öwû¬{<Ÿ‚´³B!„B!„B!„BˆöHÛûJç‡[ænÏ#„B!DøË_þ8GÄݱC™B!„B!ê" ÊB!„B!„B!„B!„rÆIÏa/HÖ±{i6X*Q|ÂÑv¿mÒ$¬Wá(Ï÷p¤B!„B¸Ç믿Njj*[·nåäÉ“”——Ée—]Æå—_ÀÒ¥KÉÍÍõp¤B!„B!ÄùI”…BÑ(³{&pC÷8—i×­ø™b³ÅC ñÇwsx&tŠv™æ§×y(!„B!„B!„X*5šØ‹A£¯wÛÉýT®z¶ ƒB!„¢õ¨ÕjFމ^_ÿwà={öð裶aTB!„B!Dû" Ê瑟w-ñH½C’/õH½B!Ú/­/­ëWEQܶþO×]ç¶uµ3‡~èéD;à¥Õ`¨ÿA˜B!„B!„Bá* U›ÞAÓÅ?Åä¢Öá¨,Æ–}ëÁÕXö.›t\+„B!þ´Z-ÿùÏ4h111¡Óé(,,dïÞ½,[¶Œo¾ù‹E¾ !„B!„õ‘åóˆ$ ñçv颕žácô7Ë=ÂÊÌe?µM=’°+D-¯nßË«Û÷z: !„B!„B!„tÖ*Ì¿ÎÇüë|OG"„B!D›¨¬¬ä­·Þâ­·Þòt(B!„B!D»¥òtB!„B!„B!„B!„B!„B!„B!„BˆöC”…B!„B!„B!„B!„B!„B!„B!„& ÊB!„B!„B!„B!„B!„B!„B!„BˆFÓx:!þlBBƒˆíÚ‰ü¼Bí?âépÚ5?_ºÄ;Û2õHš§ÃB´E‡ÃÓQˆº˜¼u¨T ¥ÅUžåOAÎ!„B!„B!„h[Ú“Q‡uÃz|+Öƒ«=ŽBˆvìÊ+¯$))‰Í›7³téRO‡Ó(aaa$$$››ËÞ½{=ŽÇT·ÇáÇ=ŽB!„B!„çIP­¢CÇ(®½é*º÷ìFhx0‹•¬Ìlî=Ì/ëã§U<¢Ç|´ð-¼¼½xûµùí.A9±G<=w?F“g{Më~õh<ß®ú­NËÜççI‚²ç©OÇ#ÊÛTç¼É߯¦¨ÊÜ`ùØnAÜx÷Þü÷zN¤µFˆõþŠ™è u{ë™ ¬[zþÝ'‚MÜ|ß@:ÄúêÅ;Ïob͇š¼žÑSâ¹âÆÞØí¼½uËš¾­Éý#1±+]“Bð 0PUe¥(¿’¬ôbvnÎà§%‡©ª´6y½ç£æœ sútgj—ŽuÎ{ú׬HËpgˆB!„B!„Bñ‡£~7ŠÞ{I¶§CÂm’““yíµ×0™L<ðÀ¬Y³ÆÓ! Ñ$7Üp?üp­é‡büøñˆ¨qþõ¯áããCVV–§Ci´åË—ãããà /¼ ÊÀÆÑét<õÔSnKPn¯ÇóirOB!„B!„*O þxzôJä_¾Î%SÆÐ1¶F“_?â»uaâ´qÜxû_<¢[©T Q"P©O‡Òên¼ý/Duˆ 0(€¿ÝýWO‡#ÄŸ’JQˆô6¡RÚ×5§Òj£Ølqùç8ÇP°jŠ[îDl· þýîDÆ_‘H;Ûì?$o½DêÕìu…zqÃ]á`À?ÈÈÍ÷ Ä×ßФu\×E<ðâh.Þ‘Àj “—Žˆ¾ôÍõsúãдuž¯š{.TÔuÞµ~¸B!„B!„B!„8Í™3‡˜˜‚ƒƒyà<ŽBˆó€J¥"&&•ªi¯“Ê=E!„B!„B´›”CC‚¸¨oOb;Fà‡Ýn'¿ ˆ‡Sذy;å•õ–U©TôïÛ“¾ÉÝ ¿°ˆ½ްþ—mT™½Q4Íÿ7ƒAOYi9óþ3Ÿ­›w`³Ù ¦K|'O‡çVýõãéWÆ`Ð3vÀåT”Wx:¤Ve³Ùª?[k|B´þaÁ<9¨/µšñ WPam?çá»ö³èhÓF:¿pH 1]œ÷m­NÍuÿ¸Þ£xû™ä–·F˜Œ¿"‘®I!Duò#;£„—ÿµ¶Õêª,·TV^ÝjuO‚(5:öPkTø).¬ÿû\MGubìÔ„—)ʯ '³´Öô¶Ü¿õÑ4<ôʺ&…žRÈ}³¾«wùæž oÿ~€·?à2máÄ‘ônØ !„B!„B!ê¦BÅ0ÓÆ™.!Yß›UfGǬÇXW±–%ŸPj¯ýÛÝi±Ú.\á}ý ¥‰Ææ°’nMg}å:>-þ˜"{a«ÔÛcLãøwðó .ó@î=¬._yÞĬ ŠE×û Ô.@å…ÃnÅQ˜Ž5eæ­Ÿà¨(j•z…8›¦„|ãüœw3˜wÔ^Æûfð¹p@þ? ê—º×¥MÓå ¿TÁà¨[˜…²¯Á–Þj›Ñf.»ì2^zé¥s.·oß>&NœXç<«ÕZýÙ&ÏýE;ôÉ'Ÿðõ×_Wÿ}×]wqÝu×y0"!šï|8ž‡Êo¼Ñh¤gÏž”—7þ} ¹§!„B!„Bˆó>AYQÆŽÄÅúÕ-2",„ˆ°úôìμ¾ °¸¤VyNËuÓ§Ð9&Êezxh0á¡ÁôîÙw?úŠ¢âÖy°ûgבޱ˜ûÂ<»¢z^zZÛ·ìòTh­ÂäeÄð'Jòy÷õ Æ`Ð3÷ùyžGˆ?“VƒAýçH`øeM*Ù™%\vmOú]ƒ¢@ò…‘ŒšÏWÿ«ãí7wy7¢|(ÌkÝŽ'n»ìËêÏãyæu¿(òG“v¤€ìÌRB#¼È8VĉcÙmÄ„®.úÆVÖ¯<  õ¢C¬?F“¶Î²m¹뢨î|bXurrcxê\B!„B!„¢9^y…¡Æá.Ó4ІD]wuÝ™ä5…›NÎ"ǖ㲌 ·ûßÁµ¾³PQã·pEO¼.x]½&óד³È²fº­^w0©LÍ*瑘ú‹ÿ†îÂkA93Bž‚%4]hÚî)_p#öâ,÷Õ+D3éú€ÏMÎÏeŸ×“œ¬€ïà5¨1𣢕/hãÁ4 Nއô_Ï+¯¼Bxx8F£‘§žzÊÓáÑdf³sÁ(Ì20…hÇ·ãÙËË £Ñج²rOB!„B!„ç}‚²¿¯/èJQ8x$•m»ö‘—_ˆ·—‘þ}“IŒÅÏ×›‰ã†óñ—ß×*?qì°êääµ¶ðÛöÝ8ºvfüÈ‹ ô÷ãªËÆóî‡_áhëû ‹ «þ¼ñ§_=‰h ‡å¯WÝáé0„"G÷çñò¿ÖÒ¡³?S®íItg}ô»§Ã-d®²ñØ­K>¡+v»5?Æfµ7º|t¬õç½Û³øaÁžê¿ ó+8º?×­ñºÓŒÙ}é= êÜ žEÎ!„B!„BÑ^,/[JŒ¦#?”-bWÕ.JìÅ„¨C™è=™±¦ñDj¢¸ÃæýË¥\˜&œé>3Q¡fcÅz~(ûŽãÖ4T\îs%ÃŒ#U‡qoÀü3çN·Õë^г3Æ­•¿qoîœ:—©pÔî0Ñ1«|ÂÑö™Š kÊF,{~ÀQ˜†b DÛër4qÃP|BÑ¼Š…w»­^!šC Ï*°ì‡’¹u/çw˜®p~¶ìÒË+*Ð&×Õ`Mûã%'÷ë×»½îç+ b¹oß>&OžÜZa !„ø‘{ŠB!„B!„8ï” ŠŠY¸d5•UUì?”â2ïà‘c\7}2 qIˆë„N«Ål±TÏ÷÷õ¡orwÀ™œ¼ríÆêy›·î¢¤´Œk®˜H§QtéÃá”´¶Ù¨?0½^Wý¹²²Êƒ‘!„ø#9žRÈëOüŒZ­`³I—"uQT sX‡ÃÕÒø„_O(*¨dÑÇÍK°õò>ó}#ïd™»Bj”–´sŸÑLœ‘Ô¢úå\B!„B!„绕åËYY¾Gî¡[±©rš` #M£k iÍàßùOPb/a}Å:—y›*7ðJÈ\.6e°qFÅX+á·¹õºƒÊ€|{%ö’F—óDÌöâ ªVþGU Ö£?»Ì³¦nÄ8õU4±£é<EkÄa©X-D›Ð@À³  {1ÜWw‚±þâ3ÉÉ‹¡ð  ÆO÷Ö4¨X ŠW›DݦJJJLDB!„B!„B!„hmç}‚2ÀŽÝûë·sÏAâ:£R©ðõõ&7¯ z^\l Š¢°iËŽZe÷8BqI¾>^ôìÞµÕ”£c"ù¿ ªCß~¾˜·_›Î2F“‘+fNæâèÐ1 “—‘ò² Š ‹ÉHÏbÛ¯;ùä_Ö[^¯×1úÒá 9ˆ®‰]ððÃj±PTXÂáƒGÙøÓ¯|ÿõ2·l_l\G>øæÍZÓWüòu­io¿6Ÿßû¢Îõ 5ˆ)W^J·¤® z²2³Ù°v3ŸÍÿš‚üÂZËëô:VoYÀã÷=Çêe?ÕZæÇß¡Õi™ûü<¾øxa­ùÁ ¸ø’û$Ñ%¾3á‘¡xy{¡(PYQE打,Y´‚¯>ù®YÛ»uóæÜüPÛ;xØE\z÷s²2²ë,ÓS®¼”{ù;Ç`椛\ö‚½yeÞ¿ÉÍÎcêèk¸ê/—qÇ}·ÔZ6åÈ1®›zÛ9ëŸ8mIÉÝèß™à@|ü|P«TdŸÌe˦í|úþWdžÈª·¼F£áò™“;q$1£@QHK9ΊÅkàÔùݦW-m«³5çÜo®‰;Ð'$X?BMŒ •V'JËù9#‹¯£Ìb­·ü Ý»Ò/,ˆƒ_½­JEa•™Ýy|y(•=yµÏÁÓŒ5—Çubpd(¼½0i5”[¬›-d”•³-;Ou{ÙÓ¢½½xì¢ÞDy›Xx$y»4ªÍz‡2%6†äàüõzl;UfÒJÊØ“WÀŠ´ 2JË«—שU¬œ:€'6ï`õñÌZë\5mZ•Š×wîãËC©uÖ;$*Œ)±1$øaP«É*¯`cf6 ¥ ªö[}}˜?öâZÓ—]6¶Ö´­Ùyܽ®îÑëý¸"®½CñÓë(5[ø=¯€Ï¦²»Æ½ólîØGîÔØ„LVÅ Ñé7¸ãƒðñ×£( Å•dg–°ë× ~üþ¥ÅÎÎ4Þ_1½¡ö×¢äþ‘|ºîºZÓç¿ú++¾qý~áM¯‹¢èÑ/œ¨Ž~ø›04¨5**+¬äe—‘v¸€ÏßÙNvFã_Pk¬ä #¹ÿ…Qޛˣ·.9gl²–Í IDAT^ͨÉñ\0$†èÎþ˜¼µTVX))¬$'³Œ½Û³Xþõ>*+ê¿~ŒžϤ™I…yQQfáȾ\–~±Ý[kŸ#õµ3À[Ïl`ÝÒ#õÖS_Ù!ã»0d|—ZÓ½m)‡÷ä4X¶)û·ºL3ÚÀ?ÈÈìUÿ]Z\…·¯¾Qeë"ÉÉB!„B!„¢-è=ã¼.a¸q ºn¨°`¡ÈVÄ!Ë~®XÇÂR×gd5“m϶«j#M£Ñ+T¨°ãÚàÒ²Åõ–]^¾Œ‹CQ£&TÆ1KªÛê=-I׃«}®¡¯áT”Ø‹ÙYµƒK>dWUíçͧyŸJP.²Õ»L]ÜssXöÕÿ»¦uÿr4±ƒJâŠ#ÿX‹ëÓ&OÃ0æ!ìi”ýoZƒËª;öÇtÅ8Js(}û’ÚóÓÐö¦C_cŽªl'v`þícl»^w ÊÖE1úaºú¨;bÏ;JùgÅQåúû¿¢5¡í{5š.CQÄ è¼p˜ËpTa/<íøÌ¿~ÐäºÏE?èÔ1¡ø„ üPÔ:åØ2vbÞöÙ9¶WAÛm,š¤I¨Ãº¡|qX«p”`ÏOÅžµËÞ¥Ø »=îšüÿº^€ ÿ¶Úð9õ(ÛzŠž†úNG+õwªé:mòå¨Ã»£hôØ‹³°]‡yËG8Êó[§Òf¸á†xøá‡kM?tèãÇo°ì“O>ÉÌ™3)//gòäɤ¤¤ÔZæå—_fÊ”)¤¥¥1aÂÊËËëXSóÜyç <˜°°0Ðétäåå±uëVÞÿ}¶oß&OžÌe—]F·nÝð÷÷çøñã¬\¹’ï¾ûŽ;3!C†`³ÙX²d O?ýt½ÛÚ«W/®¿þzú÷ïOPPEEElݺ•wß}—mÛ¶µZ½cÇŽeæÌ™ôìÙ£Ñȉ'X½z5ï¼óyyyõnwHHÆ ã‚ . [·nDEEáãモ(”——“žžÎW_}Åœ¹fÝzë­Ü{ï½ >œãÇk_.ºè">ýôS¦OŸÎo¿ýVã·±¦î£ÓZã˜ô÷÷çË/¿$66–Çså•WR\\Ü’ÍcÆŒ<õÔS¤¤¤0zôè—=‰ŠkµÿvÏMÄ'Æð—¿^Åú5¿°gWýI×~þ¾üwþ tŒíà2ÝÇ×_o¢c"Q«Uõ&(wï™ÀãÏßODT¸Ët­VƒÑd$<2”ò² ·%(·”Z­æ¡§îfì„.Óc:Es}4¦Žåþ;g÷Ž}n¯ûÝÏ^#$,¸ÎyÞ>ºv‹Å°ÂàözzôNtù;"2ŒÉW\¨ñC¹ãÆ8´¿þ$­¦ÈÉÎÀ?ÀïœË}2×-uüýž›ðò®ÝuT‡¢:D0æÒaÜuËÃì«#©ÔËÛÄ‹o>I^®mŸW}NÕ§9Ç•»Ûª©ç~KÜžÜ /­ë%ÝK«!>À—ø_¦véȶr  îcD„Ðí¬í1Á°¨p^غ›%©éµÊùê´¼>|}½]¦ûè´øè´Dy›P)J ¬-){ö¶ÇøpM·XÖgœdoœ¦Vîê“Ĥ³®±Ô„›Œ„›Œô ¦Ìb­7ɸ9Ԋƒ&3&&ÒezŒ1>¹´S4nØÚ`²psÝÒ#kºÅºL 0èΨp^ݾ‡…GjwÒá®}ÔÖâ{„ð÷G‡^ûÚîEp¸‰½ÃY»ø°Ûê1±+7ß7°Þù£†¨Ž~DuôcÁÛ­÷б)CLüëÕ±Dtðu™îå­ÃË[Gx´/=/Œ`õw¡åÎ AÕŸµþjú Œ¦ÏÀhþ÷Ò/¬Zt°ÕâoOnøb|ýß)–|±—˜.ôèááÈ„B!„B!„¨_]Ož~ŽHM”Ët-ZLšÊìeµ”ÒK߀}æ½MN¸-·ŸÉ.¬´W6©lcêý›ÿ\ï{£Ë´@u#L£nÉóùÏðUéçu– P;ŸåÛêOüjª–´UK8ÌgÚÙaiZ;×»ÎRgg’ŠÑÿœËªLÎßœí%'kÍÓù;ºþ×»LSLhºŽD7‚ʟDz£îgè-)[Eç…qêk¨;â(9IÅ7ÿ¨œlôÃ4ý]TA]§|Q ¾¨ü; ¨T­’ ¬î<ux’k½>¡hÆ ‰E劧°ìþ®V9EkÄ0é94Õš®øQùEBçA8*K1oûÔíqŸæs;':?¿U¿Ô½œ¦ hO=J.û–V ©6•ÃøÇÑ&º&Ò«;¢ ¼m)T|;§YÉïç›§žzŠ .¸€øøxæÎË´iÓ\ÞÕ7nS¦LÁn·sÏ=÷¸59œ‰¯ÉÉÉ.ÓÂÃÙ0a—\r =ô_~Ùøó÷\n¹åϼ£G\\·ÝæÚûÕW_Mpp0³gÏ®µŽ{ï½—[o½ÕeZpp0ãÆcìØ±<þøã|üñÇn­W­Vó /0eÊ—é±±±ÄÆÆrå•WróÍ7×›P¶páBÂÃÃëœçëëK÷îÝ1™L.Ó×®][ ÿ¼ö}²ÿþ”––º=™¼%š³Ns÷1éííÍ{ï½Gll,™™™Üpà -NN8yÒy/ <ç²ÁÁÎw§23ëî ¢oß¾.GGG3cÆ &NœÈÌ™3Ù»woåšÛÎ>ø >>>µ¦ÇÄÄ0sæL&MšÄ¬Y³Ø¹sç9·­)¼½½™?>}úôq™ž””DRRR=¥ÎhÉqÕžª·¹Z²M&ÿýï:th­é&“‰:0lØ0Š‹‹yÿý÷ݳ¿¿?Ÿþ9qq®ï«ùùùáççGÇŽQ«Õõ&ÎöîÝ›W_}•\ßUÒjµ˜L&¢¢¢(++«3A¹9×çÓZrlxâümi; !„B!„Â3Ú}‚r÷ç9¹ù»>ð3[œOŸtZ-:­¶úïšN'.ûÖ‘@é.¡á!.‡E„4˜¤8kö :ÆvÀb¶ðÎÜÙ´~ …ùEhuZÂÂCHèGyYEe»Äwæ•yÿÆäeÄn³³bñÖ¯ý…ŒôLE…€=zusk’dÊ‘4F]xCGä±çî`âЫ©¨p}hm­c×[îœUDºjéZ¾ÿz%Å¥ôèÕo¿ÿ?ž›û8×_ñ7rܘ8 TÀ»g×~–ÿ#G§R\X‚ÅbÁÇ×›ÎqkµUS¶×n«ÿe¿ýη_,&3= ‡ÃA¿‹zsÃm×àåíŃOÜÅWýÝ-›˜sÒù"„·Z­¦V"MAΗj&Ý~õéw,üòL/ê³ï¼ž«þrY“ãX»jß}¹„‚ü"L&#É}“¸þÖ™xy{ñð¿ÿÉ_¦ÌÆápí%þ¾Çî¬NN^üí –}¿š²Ò2ºvë•×L!.!¶®ª€æW-m«³5õÜw‡µéY|u(•‹“FÃÀˆ¦Çw&Р繋/à¯+דWYU«Üû{au8È(+§ÌbE£(t ôãÖž ÄøxsWŸ$Ögœ¤Øìz•GG_o,v;ïî>È/Y9V™ÑªT„š $øQ^O;¶¤lM¡&×NÂLÆ”oLêZœ¼7¿Ï¦VR† 5y|@oôjõ9ëmª›{ÄW''¯>žÁ÷GÓ)±XèäÏ Ý»â¯×ñÌà~ܸr=95®%©Å%Œùv9C"Ãxô¢ÞLún•6›KvGí‘f&ÄV''oÏÉãÝÉ(-'ÚÇ‹[{&Ð#(€ôîÎî¼Bº>ät×>jKqI!üëµ±hµ ïÃÔCùžiçÊò3ǶN¯© Ýnw`1ÛÎ.ŽÕêz}×êwÌ”W‘“UÚ¨e[ÛÿP+9ùlù9åÕ£L7Õ_þ~!Û6¦“Ÿsæ%”ší¬( :}ãϵšekކl³Ù±Zjßoí5Fnéþm©“â«“‘-`ÁÛÛ¸ïùQn­C!„B!„Bwêªç¿¡ocRyaÇÆÒ²%¬«XKºõ8*Tø«HÖ÷â÷ªs'Þy«¼éªgºÏLF˜FQé¨äµÂ—šÓ“ó7µËQNÚ²ÜZï,ߪ““«ÜÂEs9a=NŒ¦#wøÏ!Yß›{ïg—y͵;Ý T9ÌŽ*tг£y¿«º«­ZBÓu$ö¼u$ 7‡½4Eïj-ØêÏ"ULζtœ*sš®ÿ¬êcÛñߨZÿöÂtT1è‡þud2†÷`ËØ‰=û ÛÊÖ£ÁãåsQ‡'a/Τâ‹ÙØ‹k“º79““mfªÖ¿ùÿìÝwxTUúÀñïôLzï´JB/‹”¥,"‚€¸6¬¬Šºâb[~ºŠ½.‚Š]Y‚HïEzï-”Þ“É´ûûcÈ$!…$3I@ßÏóäa˜{Ï=çÞ{îyæÜ÷¼XOoB)Ì­µO8š°¶(f÷r–0oþìVì9É(Åù Ö¢ ÇÐï ÔÍñ¸~Ö“ëQŠÊOnl¸áygp²åèr¬ÞŸ†Jk@åñ¦×Aíþq´²}úT ¼uëVl¶ŠãrÁÕsäÎ>éççÇ×_M§NHNNfìØ±œ?Þ-ûYrž}}}ÑétX*yn®DI€rU}cÛ¶mÌž=›³gÏ¢( ½{÷æ‰'žÀÇLJwÞy‡#FT(ãêqX¶lßÿ=xyyѽ{w&L˜€S¦LaðàÁž5rÅ›o¾é Nþù矙?>yyyÄÇÇsÿý÷—›D >ö·.êZoBBñññ€#óúûï¿@·nÝ(**ÿ\âå×®+Ÿ)eÕåü¾þúëÎàä… 2wî\RRR0 4kÖŒiÓ¦¡©‡g~&L˜@ll,f³™÷Þ{uëÖ‘™™‰^¯'""‚:Ÿ_ù³ mÛ¶eÖ¬Yxyya³ÙX°`«W¯&)) •JEPP]ºt¹â$µ¹?ƒk}²±®_W޳B!„B!Ï5 Ü¬I$]:8~ø[±ns…å.¦9_Ç·iÉÞƒ‹ŠƒÃ:®žZ k—ÿNë¶-ÈÉÎe×¶êgoìÐÙñãߊÅkùþ›ò3ާ¥¤sp_Õ™„Ÿyñq<½Œ˜LÅ<óÈ‹ìÛ}°Â:Û7»w@HQÌÅŽÙq­ÖÒ$Íf‹óýª„G†rÇ=£XòëJÞš<͹,áè)vïØÇ×?Œ¯ŸãË;/àÖ¶—زa;ó\Táý#+@»²¿emÛ´‹5Ë68ÿôPù…<ýÂ?iÕ6†Ø61œpCVÒÔK×J¥"($‹çƒŸ>9Žãùìý¯Ù¿ç!¡Ž‡”ó¥¤v»½Ü~Ut]c‡ر¥ô‡Ôý{‘——Ï3/®âm¬®ýÊÕcu¹Ú^ûîp<;‡e2ðÎÌfgJÓú÷ À ç¾øX¦î>T¡ÜÖ2÷˛Χ’”[À¬û¢×¨¹.<„•IåÂ:;2¬L:ÏÇO—[–VdâPFÕn®”-kí¹ ´òwYæš-ìN«:;A¨§w´vën¹Ê6ïÆVæÇî9yXí µˆ™¬‘0O#··vÌŽ¿4ñoïjÖDo,÷Þ K/eü§Ò ßêt6ta˜—#ðå“ìén­7DÊÃ~Žì”k ×ðéO;3gÚ2y<õ~‰\Hˆ&„±>÷òRÆ*l#LëÈhö¸ÿD÷ŸHž=ãæc¬)ZÉÂü)•O>]×6×MTgtñÃ(Þø±Û¶«ä] vR©P{cÏudgtw¢ø÷騒A*ŸPç:*ïP ½Àš°–¢…“@¹4vR˜IÑÜâ5n*ïôÝÆbZú’[ÊVFå‚ç˜é¨ƒc±gž¡è—Vœ  ‰ê€åÈ2Ì;¿-·Ì–—Z¯™u­§+þnn=¹{f"^Ì­móÞXŽ,u.W‡¶) ¸Ý7Óª·Ëo å }¨¿e~à5Öñºh%äN­~}mSÇ¿¶ `Ï©~]wRûF ï~7–ƒ¿aZþªs™=õ8¶¤xÝ;•‡/†^cZñz½´Ã`0Tð©(J¹ Çà.+»nmExýõ×yýõ×;v,[¶laéÒ¥¼ùæ›püøq¦M›vå ÕÁºuë*¼·jÕ*Nž<ÉòåË1 ôïߟ ¸µÞääd X½z5'Ož¤eË–lÞ¼™¬¬,æÏŸÏƒ>HÛ¶méÒ¥‹3P8,,Œýë_¬X±‚ÇÜy¬322¸ï¾ûXµjaaaŒ7ŽgžyÆ-õFEE1nœc¢¹sç2iÒ$çö>ÌÖ­[Y´hþþþ<ñÄ<ÿüóUî÷Úµk+͈¹å÷¬uëÖqÇwзo_4M¹¾¥ÑhèÜÙ1÷ï¿ÿ^õÁn@î8Gîê“aaa|ýõ×´iÓ†S§Nqß}÷¹-8pnK¥RJrr2“&M¢[·n¼ûî»ìܹÓÙÀ¹Îå6lØÀâÅ‹ÿ?pàùùù¼úê«ÄÇÇÇ‘#¥ãÂî8Î%õlÜXúiçÎäææòÚk¯CçÎÝ–™»mÛ¶ æøôå—_òöÛ¥Ÿƒ‡fþüù:t¨Òg ݵ¿µåJ½Š¢P\ìxnÒj-˜Þl6;ߝЫŸ)%j{~ããã1Ìž=Û9YF‰ƒ2eÊ”z PîÖ­ ,૯¾*·ìâÅ‹ÕöÃ×_///ŠŠŠxàرcG…u6lØPIÉòjsv¥o4æõëÊqB!„B!DãQ7vê*0À±·G¥‚CGOpøØÉ ëœ:sŽŒKY4‡îO·Nñøúx¡Õhðóõ¡]ÛXÚ^ 3Õ"°´¶¾›ñ/<õŸLÁCwN$ç² •—ËÎrŒœÅwlƒŸõ™ ËŠmãÌ6;ó³9•'_mˆZ£Æjµò¿O+þ€væÔY–/\ À › Õ^Ó1õW´zÙzçë¶íZ¹e›9Ù¹ä;fÞ @­V3bÌ:t‰§ßõ½ë‡8f$?—ä¾ê¬X´»Ý,Ù:®e¹e×逹ØÌ7Ÿ_¡¬Ífƒ*fA­k¿r÷±ªíµ__ö¥g²äô97B«VÕ¸ìÙüR Yf#½<+,ϾtïŒ ôÇW_»‰\)[Ö죧˜¼eŸ8Êë7‘SÍý¼dÿíŠÂ{»• ø­Oƒ›E¢V©°Ú¾>|¢Âò3yù,?ãèÔ4²Vç¨:74D¯Qc±Û™¶çP… Ë&«y'èqYÆopß9j(]zG;O¶­=ÃËÿ\ÆÆ§8w:›ô‹œ=ÍæU§Ù±!©^Ûòí‡;øþóÝ,úþ+æå·Ùùê¿[˜ùþöz­·¦4Z5ê2ýÌTd!íBV‹S‘•3'2Yúóæþ¯â,»—;q8Ä„LΜÈä‹w6c+8Ó6¨^Ú-¹ï_=ðòÖ°|îQΜÈlä !„B!„BQ½Vú6t08+¿Êù¬ÒàäšPP°*ÖrïÅèZr¿ï?ðT{Õx;ÑÚ&¼2 *Ö®f]Ñ·Ö;Ôkz•‹báݬ7œÁÉ%Š”"~ÊsdˆëeìSig,‰ì/ÞËK"f¥µÝ<ºólÀs|1—º·¶¹>¨ý£1Žü/¨TXÖ`=±ÎmÛVŠrPÌ€#À×ñB®Ã-h¢:¡mõ·Òvx9& ¶gu¾§‹ZØ,˜V¿ã 0vnßR„y#kgIö_w”½œ:°žwþup,¶‹‡(üáU'(…Žg4íQýªÝvC±g%9Û¬ò.·L7ÄñÂZLñæ/ºixݨA±@Þ'8fò­†úÒaµ7ðœºÚ¸¡ RƒÝŠyKÅceÏ<å°#OÛv¨ëç9‡pøðá k×ÖO:éï¿ÿž¥KAío½õO<ñƒ ÂjµòôÓOWŠ®o§OŸv`6mÚ´^ë*É„T:ö•šê˜ÌÜ×·ô¹ž‘#Gb0°X,¼ôÒK‚ö ™5kýû÷w[½·Ür «ÕÊTœøÿĉÌ›7€›o¾Ù­ÏÞ”­úúú:³%—èØ±#žžŽç j|×Ü}ŽÊªMŸŒ‰‰á矦M›6ìß¿ŸÛn»Í­ÁÉàè?%™FK5 ·ß~;ݺucðàÁÎuK–Ÿ9s¦ÆÛ_´¨4DÇŽË-«Ïãü믿b·;>ÏÛ·o_«²Õ>Ü1¹vqq1Ó§WœÇf³U™­¹>÷·:Uo}ªîüÞ|ó͘L¦Jïuõ)3Ó1Îß¹sgüýýk\...Ι•{úôé•'×WúFc^¿u=ÎB!„B!„h\×d´gP ?ÿ;/O#SÓ™»pE¥ë)ŠÂO –ñÀ£0==ü†*·i2™ê«¹¬_U}f¿²~þn=zw£EËfÌYø% ~ZÂ’+¯4Ú¥{çë¥ VÖ¹­ ©}gG@õ©„DR.TÌà °iý6†¾­ÚÆTšÕø"/7Ÿ¬Ìlý ºë’/Û&†ðˆPî=BûNqøøzÐó¯ÝùhÊ—„E:f$O>Û0ÊE…Ed¤g„@ùAù6ñ±œ<~šÂ‚êg•¿œ+ýÊÝǪ6×~}úý| #bš`Ôjhéç˱¬òSˆ{é´ŒjÙŒëÂCóôÀß §Èj#9¿Ð˜j¨d†Ñ¹ ‰ü%,˜¾ÞÌÒŸßN%±41™sùWl“+e/·>¹ê‡?Ê*É|4+‡´¢ú½ï—Õ>ÈQ臭ҥW4S¾»…µ‹غö ©çóêÔ¦¢ ©ÉùÎvùUœØàZãÊqŽïÎusd”ÎË)fî×ûêµ­B!„B!„B¸C7Cwçë…¿Õy;ùö|zí†¯Úæº õÆ-^£¹ÁóF¢´Ñ<”r?f¥ú`¶&Ú¦|öê,Çy9ã·×ÛÅЀƒæý¤ÛÒ+Ýæ)Ë)Ô¨Ȳg•[þTÚÎ×jÔ´ÕÇ1ÂûF{!JÍ!ŸpÛ…[0)•M¸ãX¹BÐÏ¿†Ê€=-ÓÒ—Ý^‡’“Œ*¤5jßlç÷£‰ìˆÊÃñÛ«¶yoŠqd^UùF8ÖÏ. PÖD;Α픂ÊÏ‘=ÃqŽTÆTÆ”¢,—Ë–¥ ‹CßýnTFlg¶S´àKaµûlÙý=Úæ=QÅà5n>–}s±Z„=«~ÍäÛø IDAT'QP¼Ñuþ;Úæ½QùF ö @±bÏ:ë –Vi åÊhÂâ°¥% 6Îd›æ ï*}™µ&±rÕ i[@à¥LÌ™Oõ´ëí,ÉŽmK;QeºõÔïè:Ü‚Jç&´5¶‹‡]¯ø*ðüóÏÓ±cG¢¢¢œÙ?üðC®¿ýóññáî»ï¦ÿþDEEHaa!gΜ! À1ÖåááQoõ—¥RU?ÑtI€îž={œÄ—;qÂ1¡u`` Î`,WêíÚÕq¯;vìX•A®kÖ¬áöÛoÇh4_eFäÚÚºu+)))„……qà 7°eËç²’ã‘””DRRýßûjÂçÈÕ>Ù¾}{|ðAØ´i<ò……Õ¦ÔÕÙ³g‰‹‹#**ŠÝ»wÓ¥KüüŸýû÷çÍ7ßY¸¡vÊ999dddDHHù ÑëëZGpdjj*áááºïÙª’`É£GRPP»g"ês¯ÆzëSuç·Cdz‘G%##£AÛ5sæLúöíK«V­X½z5sæÌá—_~!11±Úr×]wóõ/¿üRÏ­,åJßhÌë·®ÇY!„B!„ëš P àwÁ×Ç‹´Œ,f~?³ÙRåúçΧðá—³é׫­Z6ÃÏÇ›ÍFvn'N%Ñ!¾5¾>^¤¦_=?¾mß¼‹ÿ<ùϼð8A!ÜóÐíÜóÐíÜ{„Ÿ¾û•õ«69g’+«$ãk^n>™ wçÚ™ÓŽüðKYûßЇì¬¾ùüúþ­'ƒž€ L¦bR.¤¸­î+©êÜ—¼mµXk½MWúÕÕ|¬\¡S—ÞîUe6P¯ôìBˆÑƒb›öá¶%ë4o97-XɃ«6‘ZX}¦áçS¸}É:ÞܱŸƒŽ6ÚðJÏ.̼á¯ÄúùÔKÙº(Ùw½ºöe»Sm¯OçÚ5¼=»ë6^rk´+ »ýŠ•—†>Gîb5ÛÿÐÙ“Á\XPúWl*½_ÚíJ¹e…f¬–ò9]HÊå¹q‹XöóŠ ÊζéÊ3o ä™·¢ÑÖîz)û,ÕÕò0ˆ+êzœ›· $¦msÝ»íÆœ ÷:ÿÚw‹p.‹náÏœ ÷òêg75ÜŽ !„B!„BQ…Òq÷ÿƺ¹h#ŠAÀ==zW¹^”6Úœ|Æ’È#©’QEvcWëU_2·c옯ø§G_aûUYS¸Šcæ£ôðèé¶6»‹Ú/ªLpò RP?Ùè왉—êŒ@Ûz JQæ­ŽÀFmË 5 ò D±˜Êe¥uþÖ¬ØÁf¾òŸFï–²eY· çJ…çèжT£ý¶žXOþ—#0-} ÛyG¶RMdGŒ#ÞÆë¾Q‡´®é!¬!Æo;‚“­Å¯JÁ—ÃÉ{¿ùÓûSðíX”¼ÊÇ7k±ã…ºq'5­‚¬§A1ƒ:?u@åëZ/Å'iÂAåÙpm,ûûcEUF­Vsÿý÷;ÿïååÅ„ ê¥.•JÅÇLxx8&“‰×_¾}ûÒ¶m[:uêĈ#¸páêzÖ§äžc³Ù0›ÍWüÓëkþ™R“zëòŒ„;Ì›7pxöéÓpìvïÞ€õë×»µ>W¸rŽÜÕ'7lØ@nn.*•ŠÿýïÜtSý–d9- @2d™™™|ôÑG 4‚ƒƒ)**ªuàgI àåãÂõ}-Ôdzq%Û´Xj?étc_û ]o}«êüšLŽç—´ÚÆÉɳjÕ*úõëÇ3Ï<ÃîÝ»GûéÓ§³dÉâââ*”©íýÙ]\½×ÕµlM\éXÔå8 !„B!„¢q]3” =÷Ü~3¾>^dfåðÕw¿Ô(8¹:=»uD¥RaW;ᦖºÅbeÙÂÕ,[¸šðÈ0†Ìí÷Œ¢YL>œñ6÷Žz”ô´ÒâÌtGà˜¯7~þ¾ädç6VÓk,=-ƒVmc «r°ˆÒ™[33Jg«¶˜-Øí jµ /o¯ÊŠÖ»²ÁoWs ÖéŽN#¢Â‰ïІˆÈ0æý°ˆÕË7ðèSãè?¨;·íE¥RqæÔYìÕõÙ/Ež©¨ß®Ißp¥lUýÊÇêj\&;r¦©Øùº•¿/Í}½xw×AV%•Κl±ÛIÈÎ¥Àzå q‹ÝÎò3É,?“L¸—‘aÍ£¹­U šùzó~ÿë¸å碌½lme>„zz\qÝÊÚiWÔ*^ºÚ}|¦›Š‰½ŒU®îYº¬ì9*«l¶âš\ƒ%õ®=wW·]9ëCUò¹"+£4 µÑKGx´/ÏÕþ³°Ü`HÞÛ/¿Ÿ\iò^Rîÿ®‹bÒNÍ`ò#K*+VNvf³¦ïàûÏvÓ¡G× hNþM1x8úx×ÞÑ ý{‹¾?T›]©›­|ÀtCM6RÛó[×ã¬Õÿ¹³G !„B!„BˆkWI °Úµ?Ùöl·n?Å–B @SyÄ¡—Ú‹©!Ó Ñ„pÎz–GRÿáRpò•êM³¥Òš6¬,\Á éÿçr=—K²ž¡¾-Aš +¯|™++W¨ô^GMs'gŸ«×àd{º#ûšÊ7MD{Ô¾‘Xöþ„åØ ýž@Ûz Ö¤í RaÏ<]n6L{A:jÚ`9¶ÓâÿÔ®^Ê–e;»‹âUoc5 uP ÆáoR´Dõ芶`9¼ËáŨ}#Ñu‰®Û]¨ƒZàyÛg|s;J~ZÛV–&¬ ê Çd禯a9²Ì¹L±YPR¡˜ *ýy\É9áíê!hºöŠ·Böóðh›BàTÈx”ËbÆ,.½PƒG(ZÙ0í+éWªK÷•Qû–NTª4\ÆÄš*/©íd³&L W¯^²hÑ"n»í6~øaÖ¯_ÏöíÛÝÚÆøøxbccxî¹çøí·ßœË, ‡&??ß­uVeÏž=T›¡ 55•øøx–,YÂĉ¼Þ’,¹•‰Œ,í¯iiî¹ç”8rä{öì¡K—.Œ=š 6УGôz=………õžA¹6®œ#wõÉmÛ¶1yòd¾üòKZµjÅûï¿Z­fÑ¢EµjOM$$$ŽåÎ;Í·ß~ËâÅ‹ù¿ÿû?† ÂæÍ›Q©TœØàâù¾úè[¾ëI¬V+>¾Þ Y~Væý»Žûnq½Ëmnö8ÚܲUsgÆÚËýu€c6qS‘‰„£§Ê-˸ Ý¼eÓzleÕJff-Hº&NŸL 2*ŒÁðrñZR/¦qpï:t‰§{Ï.œ:‘Xí¶Š/!zy×ïÔ%}£m»V„„Öî Wú•;¸~í»KïKÙ6EáT™û]€‡Áùú„›&5¸XPÄŒC <²f3V»‚^ÇfÑõZ¶oTw´nQm0À‘LÇCT±þ¾u Rθ8ÜÜÇ»Vå\š@"ÆÏ‡0ÏÊÛØçR_5YmœÈ©ü\˜ÊtÖ$Hº¤Þn¡Á4î –tåüÖ·cûË>Üö`ç:MQl²9_…4ÜtûEærÿ«]?«-U™€`‹ÅÆîMçøô°[Qyø¢kç¾ëLåè|mK=^«²Ö3ÛPûG£à¶6Õ•i=ä~èx­k>U\Ç|l—’•zÝKƒ=SÒ¯4Á±å‘ËÒ¶ì€b)ªõ¹hEEމ½½k>Õ³gOüqžþyþóŸÿ°uëVÔj5S¦LÁÇǽc=ÁÁÁÎׇvë¶kë­·Þâ`ݺuÕ®·k×.úô郇GíÇ£]­·mÛ¶UWäxƨ°°°^Žçwß}82ô3xð`V¯^]îÙšúP\ìwôô¼òØŸ+çÈ}òìÙ³Ü~ûíìÞ½FÃÔ©S:t¨KÛ¬LI€r“&M9r$ ,àÂ… ìÞ½›nݺ9³^?î¾{•»¯…†PÒæŽ;V»g|ܹ¿ ÕŸË*ùLêt/¯ËgJ]lÚ´ €¦M›rà 7Ôk]5qîÜ9¦M›ÆèÑ£±Z­øùù1f̘rëìܹp<Ï9jÔ¨k›+}ãj»~krœ…B!„BѸ®‰åèÈp:¶sÌÒ;wáJ2²\›¥;6¦)ÿ¸{ :–ü‚B–¬ÚàŽfVé®nåi/ðØÓÿà«ï?ÀÏß·ÚõµÚªƒÎNŸÛ‹.½£ öD§ÓàaÔâ‰ÕZ<[_™s2‹(,”=pD+:]EH¸7m;†r§÷·¬†:¿§ŽfðàЪü;²·4 >ùLý7Ÿj ÔB!„B!„BTã°ùÇÍŽ1¸GüÿIgC·m»¿ño´Ö·`—iG…åíôíì9€W2^ä¬õl½×»¸`!VÅJ€:€gžCƒ{&üèdèL;C 4º¦®t¬\¡ o‡¶í˜–½Œ=Û=ǹ:öÌD°[QûF ‹‚=ûœ#аY *ú÷;ÖM?Q®¬åð"G0¯1ÿuÍÏ‘+e+£˜r)üùQlçö€Zƒñ¦×ÑDu®|euÕãþöŒS(&Ç„µ*£¿Km*×¾ÂLçkMx|­ÊZŽ,uª{ }]û›Qy¡2ø ‰è€áoOƒºêq¸úP0Ǩ à5 ×]¶‚ݱ€®-ø> •¦‡v3ë‘%`·Zƒ¾÷ø ËÕA1èâoº´îR°[+¬ÓØJ2ò†……rÅõýýý™6mjµšü‘… b·Ûù÷¿ÿMAAQQQLž<Ù­mLO/8¡cÇŽnÝv}™7oV«•ÀÀ@^zé¥Z=çàŠ_ýÕùŒDeÙ.[µjå Œ[°`A…goÜaÉ’%ddd Óé¸ë®»œÁƒ‹/v{]—»xñ"DDT>i@ WΑ»ûdNN÷Üs;vì@£Ñ0mÚ4ºwïîòvË:yò$V«•¨¨(n¾ùf’’’سÇ1Í‚ P©TŒï¸;vÌmõ6ÖµàŠ²×Ñ«¯¾Z«6»sª?—U6K{ß¾}ë\¾¦Ÿ)uµ`ÁRSSxï½÷¸õÖ[ Á××—.]ºðâ‹/¢ÓÕÏw•êžçLHH ;Ûñú¿zmCMX,VN8Cë¶-ÑùùðóìÎek–oà‰IãýêØáUm€}»Ž™ߘú3?ŸCq±™&Í¢ˆˆ ç‹gº¥Í)Ò˜óõ/Üóàmüu@O>™5…Ÿ¿û•sIçQ«Õ„†‡Ty~]éWî…|‹•V¾Ü‹§V‹Õ®ðõá„rëŸÈÉãbaážF&tŽÃ Õ°;5ƒœb3z½c5?4Oéû,v…5g/p43‡¬âb´jažFnŽiêÌÐ|4³âÄ®”-ëú&¥2~=ÝBƒY{îB¥ë&ææ³2é<74dx‹&xët,N‰çí_ iqä{ι¿B ·ç­¡Ø,X­ÄvñJA&h´Ž 펣K÷÷âÁºÕ l©Ç±ç^@íá(Öz`;»¥(4zTÆÐU1ñ·µ˜¢EÏcý!*½7º7Ø´®r^ýO ¿Év+(¥óÕRðx }ðºt­ïYO è{¸¿MöÜ‹˜w~‡¾Ç}èÚ G¥÷IJ>JqšˆŽè{þÔZS.Å[¾rÜ`ÇÇÄ*•ŠO>ù„éÓ§S\\L‹-ˆŽŽfÊ”)åÖå•W åôéÓ¼öÚkÎ÷“““y÷Ýwyå•W=z4 ,`ãÆniã‘#GHNN&**Š_|£ÑÈ–-[ÈÌÌÄ`0ˆÑhtK]îrñâE>úè#&NœÈm·ÝFÏž=™={6'Ož$-- ƒÁ@tt4ùË_x饗°ÙjpÏ©óçÏóÕW_1~üxF§§'?þø#¹¹¹téÒ…þóŸhµZ²³³™>}º[꼜ÙlfÖ¬Y<ùä“<òÈ# ²³³Y¿~}½ÔWÖîÝ»œÙ¼?úè#ìv;M›6%::šiÓ¦9×uåÕGŸ4™L<ôÐC|ÿý÷ÄÅÅñÙgŸ1fÌΜ9ã–cc±X8vìíÚµÃßߟ™3g:—-^¼˜_|Ñ™úÀn©ïZpÅùóçùâ‹/xôÑG4h?ýô3gÎ$11FCDDD•šîÜ߆êÏe:uŠŒŒ ‚‚‚˜4iưުU+bbbxûí·«lsm?SêÊd21qâDf̘——ï¼óŽ[¶[ß|ó f³™Å‹³ÿ~ÒÓÓÑétDFFr×]w9¯£}ûö•+§( /¼ðsæÌÁÓÓ“9sæ°dÉÖ¬YÃÙ³g±Ùlx{{Óºuk™:uª[ÚëJßhÌë·®ÇY!„B!„ëšPnÞÄ‘ù³iT/>ýH•ëåòÖû_–{oðßúÐë/ʽ§(päøI­XGNn¾û|™´”tZ·méüêÅô*×U«ÕÄwlƒ‡‡½»U¹Þ¦õÛX»¢bæç#ñìc“™üÖ³‡1hè Pa½‚üg€²ÑÓˆ¦¼E…&·üÀôåôY„„3xØß0¨õ)·Þùkw¼u:žªEæuµJE\ ? =ªÉæ»ùB*kÏ]t[ÙË¥™hU&;ujQQ5kÃÔ݇÷2Ò!(€Ñá ˆ¯výËÛ³øô9†µˆ&>П·úT}Ÿ¾ÜWqwBb IDATbôà†¦‘ô §TùzóÌžÛ´‹ô"S•Û°+ _<γÝÚãgÐóL×öå–çš-å”f9^£æ®61Dy{òXǶ•nûÇã§9[fÂwž£†´ok2Sž[Ëøçzãë_Å6—4‹ ¨4@yÍ¢nÕ†°¨*È¢šÕ>ãxMüÈ¿Òãµ · Ñ„p£çPnôZa½|{~¹å溴ҵ¦•®50®Òm§ÚRy&m"yö¼ Ë:ºÐÁЉ5ÑU¸eÚ2¸1y Ûê‘ó•{} ZÛ„ù?]é6¾ËE’µ4`Hš>ƾxª<¹ÍçÎJË䨳ù¿ôgÈ´•“rµÍ®(Éø«‰ìˆ÷ãk«\O)Ì$ÿÓÁn«×~ñ0šÐ6 Ø±ZTZ)뉵hÛ EÁžr´BYó–¯Piôè{܇Ú?CÿŠBÌ;¿Ãž•ä¶²UQŠó)œ7¯{g£2`ù_ fßÖbÇ *5êðö¨th›÷ªr;Ö“°[UåòZS옖NÆ8ê}T<ý_­ŠÛÎí¦pö½þúO´-zFïØlq>ÖëÐÅ ½”…Z©~CndσÜÀÿ5Є‚÷½÷yÙ s"¼†ž ïæø«oÅ›>AåŠ.n(ÚVѶXn¹bÊ¥hþD”üÔúoL$&&òÛo¿qóÍ7ÓµkW¾þúk粬¬¬rÁd `øðáØívž}öYŠ.3gcÆŒ¡cÇŽ¼òÊ+ <Ø-Ï’Øívž~úif̘¯¯/¯¾úªËÛl}ôƒñãÇÓ´iSž{î¹J×›1c§OŸv[½ï½÷áááŒ9’!C†0dÈrËsrrx衇HIIq[—›5k?ü0^^^€#Û©Ùl¾B)×;vŒU«V1hÐ zöìIÏž=˲²²ÊtBÝÏQ}õɼ¼<þñ°hÑ"ùôÓO=z4&SÕÏÔÆh×®v»yóæ9ßÏÎÎfÅŠ 6 EQ8tè[ê+ÑXׂ+¦M›F`` ·ß~;;wæý÷߯qYwíoCõç²ìv;S§Nå7Þ €7Þx£Üò¬¬¬j”kó™âªmÛ¶1jÔ(žyæúõë‡^ïø®’——ÇÊ•+9r$EqßwFC§N0ôëׯÊõV¯^Í’%K*¼¿oß>ÆÇ´iÓ cĈŒ1¢Âzyyyn P×úFc\¿®g!„B!„B4žk"@ÙèY÷O‹ÍŘLÅ™ŠIËÈäÌÙó®#¶u ¾þ>XÌòró9}2‰][÷¢Ñh°Ùl¼÷éktè_ëýzòáçÙ¹uo­Ë]Îf³ñÚsÿeêÍÜü÷¡Äµo‡‡‹RÙ´ns¾žKV5Ù9ß}åCöí:Èð17Ò²U <½<±X,ädå|öÇœdû–Ý.·³* YFNv.£ïA«61x{{QTTĉc§Ù°z3*•Êå=ÝqŽŽJ`Ę!lÛ¸ƒ‹çË‚.øy ×éǹ¤óä_9Så[“§qîL27Ü4€°È0ÌÅÅœ>‘Ć5îÙß6›w^þ€ÕËÖsËmÃhß)ÿ@?ì6;9Ù¹$Ÿ»À‘ÇÙ¶ig¥eëÚ¯Üu¬jsí»Ëò3ÉhÕjº„âgГSlfoZ&³žäDNå¯ìOÏâþÛŒ.!A„xzà«×Qh±’k¶i*æL^>Û/ °V…ÿÛ¸‹~Qa´ ò'ÈÃ…LS1'sòXsö«Ï^À~YŸp¥ìå>Ù”P£^žüv*‰CÕgó-´Zù׺mŒŽmÆà¦Q4õñB¥‚“9y,?“ÌãâЩ«žà¿»°/=“á-šãç§V‹Ån'§ØÂù‚BŽgå°#¥b0ºMQx}û>6$_äæ˜¦´ ðÃC«ábA›/¤òý±Sd_ypvÑé³ä˜ÍŒnÙŒX_¼uZЬ6Nääò{r *Ê?¢_<Îê³Ó”®¡„è5jòÍ’ò Ø–AÎeÃîÇ/áÖqh×-?Å&+içó9´ç";6Tý`Ô¾mÉÜÕoVêÙ²:‘Œ”®û[sÚv #4Ò£§«ÅNNVg2Ùºö [Ö$¢Tñ}ÃÒ.äóâÃKý€ãXûxPo&íB>v\`{=gWÏom޳B!„B!„ײ]¦Œ9?‚áÞ#ékìOk]küÔþ˜1“gÏå”å$ÛMÛРqfN¶&óbÆsôòèC[}<áÚpôèÉSò8i>ÁÆ¢õ,(˜O¾½òI¤ý5u›<ÐÕz>ÎþåKãsÝ !T†Ae ÏžK¢%‘¦dÛ³+”{1ý9úûÒNßž(m4Fµ‘{>‰–Ól6mb^ÞÏdÙ+ŽM»ÚfW¨ŒþnßfMØRŽ cÖÓ›±ç^(·Ì¼ï´mcÏ>[EÖf…âc9º}ç[Ñ4éŽÊ'•Æ€Rœ‡=3ÛÙŽLÁn-[5%?Óò×0Þ2up,†>P¼þƒK ŠæODÛj šÈ¨½‚Qy€bÇ^‰=í8Öc+±]нVõ^‰íÜ ¿¹]—;Ð4éŽÚ'•‡йŔƒR=3kâ–JËÛ3NQ´àiÐèQ{£(6”ü4tñûWˆÝ@Š–ç(ÐwudIÎÿ”2ÝD)„Ì ŽLÊÆa u(f°¥å˜·ÕÃv¦%/bMX‹®ãh4áñ¨tØs/b=¹óŽY(…™n¬Ðý&MšDbb"7ß|3QQQ˜L&X±b…sÜ_«ÕòŸÿü€Ÿþ™={öTØŽÝnçí·ßfΜ94oÞœ;3ï¾ûÎ-mܱcC† á¾ûî£W¯^„‡‡ãïïO~~>ÙÙÙ¤¥¥qòäI6l¨8ÁcQ…)S¦°páBÆŽKÏž=‰ˆˆÀ`0››ËÉ“'Ùºu+YYî}nÉf³ñÔSO±|ùrî¼óN:vìˆÑh$99™Õ«WóÅ_‘QqwwÊÍÍeΜ9<ôÐCüøãõZ_Y'Nd„ :”ˆˆL&ÇgåÊ•žcqåÕWŸLIIá¹çžãóÏ?§M›6Lœ8±Ú€ÐÚ8pàwÜqëׯ'9¹üäгgÏfذa$&&’ŸïÞïu-¸Âf³ñüóϳxñbÆŽK—.] Âf³‘••ERRûöí«ôüºsª?—õÃ?™™É½÷ÞK\\>>>räÈ‘rŸ U©ÉgŠ»$$$0~üxôz=¡¡¡Øl6çä £Fp[€?8>ç|ðAn¼ñFºvíJHHAAAØívÒÓÓ9rä‹/fáÂ…Øí•¯Û¶mƒ b̘1 8¸¸80›ÍäääÀ¦M›œÏsºƒ+}£1®_wg!„B!„B4Õ¥¿r^~ùeÕ¡C‡Tiiiª¼¼Ä‚S5Ë: „¨?¿H€‡7¶ïcEÒùÆnŽB!„B!„h$?üðC¥ïÿÙÆv…5§lŽ×s(úõ)¬'¯ž€P!ÄÕcìØ±¼úê«ìÙ³‡[o½µ±›#„øiÙ²%+V¬`üøñ¬Zµª‘[$„B!„BÑø*‹óíׯßH•J•¥R©òìv{`ÒétæÂÂB‹Z­¶xyyÙÍf³-$$Ä~êÔ)ÅÇÇG QÚµk§¼üòËf¢»&2(‹úõØ}Ï4vÄÈ9B!„B!„B!„BÑXtÿîx¡Ø±]8ظB\•‚ƒƒ™0aŸþy#·Fñgs÷ÝwŽL¼{÷JB!„B!„Bˆ†"ÊB!„B!„B!„B!„rÆï`ÏJÂv~öüT°˜Pù„£‹Š®Ý¬ÇW¡f6rK…WƒÖ­[STT„Åb¡}ûö<û쳄„„°qãFV®\ÙØÍBü}ôÑG$&&²k×.RRR(,,$22’[n¹…1cưtéRÒÓÓ¹¥B!„B!„ ,„Bˆz7¾Cˆ-÷Þ½+~'×li¤ ñÇ÷PûÖ k]î=?ƒ¾‘Z#„B!„B!„⪦֠ù+h U®bK9ŠiÕÛ Ø(!ÄÕì¹çž£_¿~åÞ;qâO=õT#µHñG¦Ñh8p CÕßU:ÄäÉ“°UB!„B!„B”¯"¿ï_Ò(õöíxS£Ô+„âÏÃK§ÅKWþk‡J¥rÛöçl¸×mÛºÜÕoVc7A\¼tZ<ªœB!„B!„B!œÔZŠ·|‰¶iTþѨ<ýQiô(¦\l©Ç°_åðb°Éä³B‡¢¢"rrrðôô$99™åË—óñÇSPPÐØMBüét:>üðCz÷îMÓ¦M B¯×“ÍáÇY¶lóæÍÃb‘ï*B!„B!„ I”¯"(,„¨«›¬lì&üa š·¼±›ð‡rײõ Sì QÁû{óþžÃÝ !„B!„B!„×k1æí31oŸÙØ-B\#{ì±Æn‚âOÄd2ñÙgŸñÙgŸ5vS„B!„B!DêÆn€B!„B!„B!„B!„B!„B!„B!„âÚ!ÊB!„B!„B!„B!„B!„B!„B!„Bˆ“e!„B!„B!„B!„B!„B!„B!„B!Di»Bˆ†áçïKL«æädçr*!ñ_¯+†Lë¸XöìØÏº•»9ÎÏß—–­›“™‘MâɤÆnŽx*(Jc·BTÆÓ[Z­"?·¸±›ò§ ׂB!„B!„¢±éÚߌ&¬-Ö³»°_ÝØÍB!„B!„B!„âª"ÊBüIü¸d^Þ^|þÁÌ n¬z]1áÙ‡ðòö"-%½±›rU˜¿ê[tzÓßýB”…¸‚9CúåíYé²›®&§Ø\mù˜¶AŒ{ª'Ÿ¾¹‘äÄœúhb£úzÅ]<*ÿúùÙ[›Ø°ôd·èÊ‚=yèß½hãOP¨_¾»…µ‹j½A#[së¸ÎØí ?|¾› Ëj¿¯{Dò·á­hÕ.¿Š‹­ädš¸x.—}Ûγ~É ŠMÖZo÷jT—kab—xFµlVé²7¶ïcEÒyw6Q!„B!„Bñ'`ð*ƒ7ö¼ÔÆnŠB!„B!„B!„Wuc7@ˆ?3µZET“ÔjUc7E!®Jj•ŠHoOÔªkë>i²ÚÈ5[Êý)WH«ÑªyxRobÚñæWÃrkרnÿ!yûèéÜ3Šÿgï¾Ã£¨ÖŽg¶o’M6½‘NèÒ¤‰ Š€b/ØËõÚ®^õÚ~zíõêµ÷†+"R¤ R¥·Ò{Ûlß ›,» )Pïù<“™sæœ3e“ggÞóFDuxÑA\uûLf=a®½{¦0}»öqåíCøç³ã2&™ð(#*µŒ1HK\7†%råmƒ1™Û·Ï?ªŽÞ ÷]×wWAAAAAAAAAAAþ'ýi2(GGE0ä”>¤&'b6‡âr¹¨¨¬f÷¾Výº‰Kc‹u% _ï êß‹¸˜(45uõ ÈÍgåÚ•ˆ,©Â‰7xø@þýâ¿ÐëuL:KƒådwIáepL$?½JŤobq8Ov—ÚìÕ­»øî@û2ŽŸzZIif4Z—ßz*ý‡%ðÆ«©,kèŠn0iF6½¢HèJIA-Ïß¿¬ËÚjl°{–%IB«SuY[$æHR³ÉHTj™°5U-ÿýÚܰqÝ™x^V«eª+,”Öù¬?‘ç7P:z/¼ñûnÞø}·×ºo'Ŭ×uiAAAAþŠddFOç ã™ôÕõÇ,›±)Vr¹,·,ã³ÚO¨sù~åOˆ«ÑoÑC›Í?Jog™eI«å'Ïàñȧ[-óϲ»Xܰ( uU¨˜r>“ƒÎ%YӀÎ|–5,áãÚipÕwIŸO9"mÿ¨º BM@q9Pªòqä¬Â¶áKõÉî¢ð?BÝ ¢¾v/—_ ¶Í¾e‚¯…ë*nëZÿûÒdƒq:èN9”FpmÔÎü.† ‚ ‚ ‚ ‚ ‚ Âÿ¤?|€²$IL<}8#‡ôÉžE\Lúôä; ª¦Ö§¾J–¹húÙdg¦z­5…0 O6}{eñÕÜElÙ¶«KÇ!Ç2Ћ€A„5jôªÿV€µKRRXËÔËú0pd’}OgÜ9™Ìy×ÏÛ8rÆôÄ$„PUÞµ“eÜ8õKÏrrz8O¼;¹KÛû£ÈÛ_IIaÑqÁäVs8·í/÷~v†×ÏŸ¾º•‹€áÑAtK Ã`Ôø­{"Ïo œ¬{AAAAAhòLÔ Œ2ŒñZ§–Ôdk{’­íÉ” s¹¦ø J¥­î'AÈÓ‘Ï“©m}¾æŒ²±#]îT]£dä…è—9E7Èk}†&“ŒÐLÎ šÌuų(q´Ý“B’Ѽí©—$7­F‡…6: MÏÉ4|6 WMÑIì¨ ¸i@È5îåúÏ[N–Àôwº›­Ö‚lM&§AñPl'¢×‚ ‚ ‚ ‚ ‚ ‚ ÿþðÊa¦† ê,IìÙ[wR^QEpÁ§ô%;3•PS0“ÏÃÇ_Îõ©?vÔ²3Sq) +ÖüÆo›¶ÓhµÒ-!–³'Œ&"<Œi“Çs0ï0Õ~œAAN”»ÊyþþetK ãÜËú˜Æwý~²»%t’Íêä¡~dÌÙ¸\.–þ°§ÃÕæú‰©ažå›Šøá³ížŸ«*,ØUÐþþˆ{AAAAáäú©~>Iêd~¨ÿŽ­Ö­ÔºjˆRE39ø&'¯Nàoa·ñ`ùý~ëÍF|cèß–ƒÛÕvä.¿¡ñ7þQv›ß2Åÿd|­{§ùOpò{5oóMÝW((ŒÔâoæÛHP'òXä“\_< % }>ÑäX4f‚$ãÈY}û(UyH†p4ý¦£NnìÝX¾½ãdwWø'G‚ù @û.¨}ٹлÁ8ýlßu»ËK2hzAÐ…àÈÁÉ‚ ‚ ‚ ‚ ‚ ‚ ö‡P®¬®áÛÓhµ²koŽ×¶=ûs¹|æ9d¥§•Þ­FƒÍn÷l—%‰!§ô`Åš ,\ºÚ³m÷¾ƒ•”qÛ —£Õhè×+“åk6œ˜A ‚ ‚ ´âPN¯üß T* §Ó÷e7$YB­v§AP‡½í¿'Cue#ß}ܱ۠`­g¹¼¸>P]j““}œÅ½ ‚ ‚ ‚ ‚pr,jø‰E ?yãî³ïeMã*Ô‘jÆÇûdX>êì )\z êDÖ4®b˜~D›Û‘C¨p•SëjßÓ©«Žcrð9€;8ùÕª¦È9uŸSæ,器 ;…Áú¡üÚ¸& }>Ñ\5X=Žb­Åq`…×6ÇÁÕÎ{uêHÔ)#4û#°Zø¤ó“ G€«*ïö`¬Ùœl™Uÿ4û*Û‘–ù ^ ‚ ‚ ‚ ‚ ‚ ‚ üOùÃ(lÞ¶«Åm[¶ï!+=Y–1™‚)+¯ôl Â`а÷@®OÝêš:–’”@¨)$ð?"1)žGžù' Ýâøæóy¼ñÒûÇ­c0˜qñ9Œ<}(Ý’0h¨·P]UCA~×má“w¿l±¾N§eüYc5v8Ùi„™CqØíTWÕ²oÏVÿ²Ž¹_-Èø&œ5†‰“Ç’ž™‚)4„‚ü"V,]ËÏ?.媛.eð°SÜÙ®àågÞÂÒàÿ!ö¨qÃ9÷ü³èÑ+½^GQa «–ýÊì÷¿¢²¢Ê«¬F£fÞŠÏ1 Ìÿn?ð‚ß}êõ:æ­ø­NË/½ÏÇï|áS&»wç_z.ýõ!ÌJmM-¿oÚÁg~ͶÍ;;€šIMO惯_óY¿píW>ë6üº™Û®½Ïgý¬/aÐÐDÆDjB£ÕPUQÅï›wòåÇß²mKë}NNéÆ}ÝÁ ¡0‡‡RSUËÆõ[øäÝ9ìÛ} ãƒ;ŽŽ¶ÛÙñú^ 3ñê‡Ï’Ô=‘ƒûó¸ñò;©«­çÜóÏâ®náPîa.žrm«û4´?/¼ù8e%åœ7þ²€7<ÒÌБƒè; i™)ÄÆG„$A£ÅJááb~ün!s>ùÞ§®Z­fúÅS˜8y,IÉ Iäåbá¼¥ Im:6ù¬ë¨É)ÝNjhÑF=µšF‡“Ãu ¬((â«}¹ÔÛ-Ö¿ªgc"ˆÒë1é4hd™*«må•|¹÷ ÛË«Z¬kP«˜žÞñÑt ¨QÓ`wPc³SPßÀÆ’r>mášîLÝ£ƒƒxhH‚|»?7·ínÓ1ëι©Iô4¦ÓáT\TZmäÕÖ³½¼’…yÔ5xÊkU2‹Î;€ÿûu3‹úìóçig ‘e^Ù²“/÷ôÛîi 1œ›šD–9½JEQƒ…Õ…%|¶û•Vß·HRL!¼?q¤ÏúS'ú¬ÛPRÎË×ùm7;<”éÝéN¨NKÍÎïå•|¾ç Ûšý­p¬@œ£@jk@¦Z#3|| Gt#%3‚0’$QSÙHIa-[×°dî^êj¬¼·ðbtzß?ûŽçÓå—û¬ÿÅu,üÚûﱨ¸`ú I ÷ÀX’C ‹4¢×«Q©e-ÊKêÉÛWÉçom¢¤ ð/äõ=5ž{žÀ¾eÇ®ŸP§ŽY…Ráûœ½½4}§¡Ÿp®Ê<êßÖjYUò`Œ3^E©+¥î3}·ÇöBsÊE¨»‚d0£XkqÞŒí·qlm}ߨëdÅxá»ÈáɸÊÐ0ûj«÷÷á’Æˆæ” Q§B6'!iƒPlõ(Õ¸ªã<´ÛºÚÝöñè†_‡*iRH’>I¥Ei¨ÄY°ÛÆÙǯ„¦ÇDÔ½¦ Šé¤7¡8¬( •¸*â*Ú†}Ç|\U‡ÞïæÂîm?ÀU÷ƒÓ÷kxB®sÿï8ÕÿZ˜gSé¢ù?Õ§£é;UlO$µWMŽ˱­ÿ¥¡¢kAAAAAAøƒøS(·Æfk n²ŒÖØØ´-2<ŒœÜ|ŸúÁAFªkºn&ë›ïº†Ììt.½úV.]Ëö­-]‡†™øïûÏœÚÍk}ˆ)˜S0‰Iñ¨Tr‹Ê=ûdñðÓ÷—ëµ^£Qc0ˆ¦¡Þ°å‹¯šAzVªççîiItOKâ²k.ð*7eú$Ìá¡Üû÷G½Ö«T*î{ì&ž}º×ú¤î‰$]™ÈÙçMäž¿=ì,l·;X¿f£Æ gȈAH’„¢ø¾(1hØ´:wÖÁK}_¸þïWréÕÞý 03züFÎ ¿Æ7ŸÿÐÆ#qb =íT²{gz­‹Š‰dì§1fÂHž~ä%æ}³°Åú“Îçõsx¤™ñgŽáô‰§ñø¿žw¤vŽ¶Û™ñú^ 6òô!©{"%E¥ÜuÓÔÕºŸd—–”f=î~Â#Ì”—ùlëÌxßžýQ1‘~·‡¨É葊~¡Þ︞}íQz÷ËöZŸ™îùìj‹öê#p IDAT~ÖuÆM}{¤ñþ¤Q“i6‘i6q^Z2ÿ\µÝ•þ_EcÎU”AÏé‰qŒNˆå™ Ûøñ ïï “VÃ+c†’l öZ¢Õ¢ÕlD–$¿¬©{ìØ3Í&.é‘ÊÊ‚bvT´P­’$nЋ)ÇüNQ£"Öh Öh`pL$õvG‹AÆ¡’$î=µ/’â½Ö'…‘’ÂYݹwÕ†Vƒ…;êºÞY\Ò#ÕkY¯cTB,§%Äòâ¦í|»?ϧ^ Îщ–Ù;Š[Ed¬ïÔÿ‘±ADÆ‘Ý?–eóö¬ÍÓ'gpíÝÃZÜ®7¨IH%!9”ÏÞØ°v;#<ÊÈý/N$®›Ék}P°– `-±‰&úœÇâï÷@+Ê)YžeM˜ŠÃ0,‘wŸ[ËÏßíé²þ ‚ ‚ ‚ ‚ ÂE?ÝvÚvø'Ì©û‚¶í¬²¬À…Ë“]¸­Ì*÷s” gy»ûÖ‘ºQªh,ŠÅo=…õ¿rVÐdzj{¬Ý£FFÒSÛÛk]´*† Æ3gœÀ¿+áûºo۽ߎRlMQœŠ½10û¬sO®(ÂŽ[V6º¿ƒuÕûlÓv ÚÁWz­“Œá¨3Æ¢N?Æ%Ocßìÿzgêú#iƒ0œ÷rx2Jm1–¯oõ N6„bœù6rDŠ÷z½ IoBë†$Ë] ¬J*Öûz•B¢QgM@9ŽÆ…aßæ;©±¤1 Ÿòê”á>ë¥Prh<¤ Gi¬Ã¶Ñ7 ?PBnÃd÷rÍs`]뿜: 4GqÖŠ½ËºäKV¡Ÿô0šlï@z9<møehzŸ‹å›Û:ü.‚ ‚ ‚ ‚ ‚ ‚ðgñ§Pî™å†+-«ð 2¶Úl.,!!.š1#Nå÷{il´z¶§¥$aÆét²u{×”DÇFyýÕjÐÞ×_Drj7ì6;o½ü!kV®§ª¢VCLlY=Ói¨÷Ÿ…8-3…Þ|c—ÓÅÂyKY¹l-ù…H’L˜9”ÞýztIÐà[/ÈœO¿cÀ ¾<ùòC|ýÙ¼ûêÇ ;íTîÿ÷Œ<})iÉäìošiûº¿_á Nþyþ2æ~µ€Úš:z÷ëɬ›.!ÌÊS/?Ì•3n¦´Y@çêåë5n8á‘fÒ³RÙ»Ë7 áˆÑCÈÏ=Lîïœ/™u¾'8y㺭¼õò>TH·än¼}½ûgó÷^϶-;Ø»+0Áh9ûówêTFÆCOÝÀäQb±x?àw9ýOíüÞkŸàp8(È/¢®¶µFMv¯Ln¸ý*’SºqÇ}7±réZª«jüÖ·Û|ÿå,_²šÚš:2z¤qõM—ŽÞÎþ½Ù¿'' ã D»o ï…S0Ͻö(Ù}²(*(áÖ«ÿIqa©g{i±û…“à 4µÏ„ Í™#Ü/_ø PîÔù=’éxûÖ]ü4w ö¤¦ª»ÝNˆ)˜”ôd¿ã½û¡¿{‚“ç}³sS_WOF4οä\¯ ZÓÞϺ@X–_Äœ½©µÛ1ªÕ ‹‹bff ázOÄÕ‹VRÞìsÿ¨÷¶ïÅ¡(Ô7Pow –$z„‡rCŸ,’B‚¹}@/VScó~‹áŠìt’MÁØ].ÞÞ¶‡µE¥TYmhd™h£ž,s( -œûÎÔm.Úèdc4´ <«W†'8yGEŸïÉ!¯¶ˆ6xxht*ÕqÛm¯k{gz‚“*`î|jívzG„qUÏ ÂtZž1Y‹VRÚìóï`M-¾ù €ÓâcxpH¦|ÿ3N§W.?S\œ•ê NÞTZÎ[ÛöPP×@bH7ôÉ¢w„™[û÷d[yû޹uŽN¤ô^QÜÿÒD4šÖÏáÁ½ÔT5çÆ†¦k[«S{¥»\ v›óØê8Þ¿“4Ú¶]3u5VJ‹êÚT¶«Íºs¨Opò±*JŒb­Y*¶'ºQ·"‡wG?îûA±xOö«›pŸ'8Ù¾ë'Û¾ÇUWФÖ!…%b8ë1ÿ\©9ã4¾Ê½\ÿÔÑrYí)MË]3w‹t#oö'Ûwý„}ë7(ÖTñýÐ ¿É`ÆpÞ‹Ôx!JmÉqö&‚ ‚ ‚ ‚ ‚ ‚ðçô§PNîÏ€>î º…ËVû-3ñ f]|a¡&n¼j& —®f×ÞÒº'2sªûaÑ?¯ ª 3(/ýi™=Ò¨®ªaï[Z-ß§OÎ[Êì¾òÚVZ\ƶ-;ýUà®nÁd ±ÑÊ]7<À–Û|ʬ[½¡½Ch“¢Âê-¬úåWrs‘œÒ ¿n¦ºª†ssáÓHËL¡WßžåØøh.¼l?~»ˆ'|Á³¿½»°qýÞûò¿˜BC˜uã%<õðKžík–¯CQ$IbäéC}”U*§îÎî¸b©÷”ÊQÑ̺ñ–/^Íw>ŽËåΩ¬¨âöëïgöÜ·ˆŒŽ`æeÓxìþgrŒEÁfugöv8š„l6»gýñ¬Y±ÞgÝÊekÉÍ9ÄÇß¾V§eȈ-f$þð­Ïxÿõ¦Ù¬÷î:Àú5›øà«W 13ëÆK¸ÿöÇÚ3¬6éh»o ï…Ȩž}ýQÒ2º“w0Ÿ;®¿ß+8 ¤èÈÌï’DDT8Eî‡Ì7Þ>‹>ý{òú‹ï±uÓv¢¢ÝYŽ‹ |Dwöü‚ûÞð—ù{ç6ß*Ò2S{Æi|úþ^{þ]϶½»ðÓÜ%,Z÷ Íñ]´÷³.öTUó{³ ¼;*ªø­¸œFƬÓrEÏtžß¸Ý§ÞÚ¢RŸu« JÈ«©çÃ3NC«’Å¢¼¯2}"ÝåðÙ1õ¥–F¶—·ürPgê6·4¿Œ0weÍÎÆÒ–³1Dõ\˜éÖ]SXÂý«7âlÔ»¯º‡K¡1“mc403Ó `þÁ|žüí÷¦6«jØTRÁ;F`Òj¸²g:Ïlhº?Àvd‚†æ}µ»\žõ-‰4蹪g+óàÚMž æJ«;W¬ç“3FiÐ13£;ÿ^ï=c} Îщ"Ë7ÿk¤WpòÞí¥,úf7÷VÐh±c0hè–fö J½qjSˆfŸGL‚;ƒÉ¶ß yò®ŸÛÝ—m ÉÙUNm›Õ‰Þ &:>‡Ý7ödÐhUôšàùyçæbÞzz eÅu¨Õ21 &zˆ!(DwÜ}-ýa/‹¾Ù¢ÀÔËû0dL2ZŠ!c’™ÿeÓßiÍsrz8O¼;¹Í}n^÷ƒÅ—xÎóªE9¼þøª6× ÄùAAAAþw…È!,I\éµnŸ}/•ßÏÛî.i3F À-a·qKØmÔºjÙcÛÍË"æÖ}ç7€¸3uwÛš&[cËüúy>ej\î /õ²Þg[gû¼Ê²ÂgÝrË2Úsø2þ´’Ža†,ðÓ¯@S%ôGÓól¬+ÿ°ý*µG‚w% 9(WM!À‘àà~XW¼Œóðfw‘wFë£e¤àhtîÀ±w)–¹÷€räYBC–974ëk¤à(´/¡qþC©ë…qúËÈ‘é¸*r±|u³ßàdUB?ì;`ûí#¯mÎÚ’.ͬëÈñýÙ±9®Šƒ]5Ô:Ô݇cß9ß³]ŽÎj ¸Ý2‡ÆŸŸôÞAñN8ó ë”õ£ ÈýË"¨y¾õòê$÷ÿÎBpU·^6dSÚA—`ßö=?ýŸg›«dμߺüS$½ ݰëh\øçï‚ ‚ ‚ ‚ ‚ ‚ òÉî@G…›C¹dÆd$ ¶ïÚǎݾÙsrróùà³ï°X‰ 7sñô³yஸâ©èõ:æ-ZÎÚߺ6ˆîãw¾à_wü›WŸ‡k/º­Å̶GUUºŸœõì›EhXë™þšKÏJõdA}ÿõOýdž(5Uî€osx˜g]yYÁ¦ Ϻ‰gEVÉ8Þ}ícŸýä8ÄOs0þ¬1¨ÕMA’åUl9Ôv4¹¹Cújv¿Ÿç{ÏÒ>áìÓÑê´ØížüUOpòQ–F¾š=€!#¶qÔ'סÜù^ã»ÅµXÎá'ûgiqß~î~©aĘ!èõÇÐj¯@·ÛÚxy/$uO䵞#-£;;·íá¦Ëïò Nw@n}{†óÈèdYfÊôIôГQã†{ÊFF¹g~Ï?&øµ5m=¿í5nÒhlV¼1Ûg»Óé?Yjýiïg]WÙRVÁ9ùLLJ@-Km®{¨®žâw¦„ø £Ïöª# d‡‡aÒjÚÕ¯ÎÔmî“]xpÍ&^ÿ}×-^Eu+“¿KQxnãv¯€ß®419Y’p¸ÞÛ±Ïg{nm?å`|R|»ÎQk&$Å£UÉØ].^Ø´Ý'Ãr£ÃÉ×û08Ö7ËE Îщ2`x¢'ðà×¥¹<|óV.<@~NeEõÊ©bõÏ9¬_ž×¥}ùè?ë™ýÆF~˜½…_ïâûO¶ñö3kxÿÅu]Ún[©Ô2r³ë¬Ñb§´°‡ÝE£ÅAî¾ æ¹“9ïn>î¾öí(ãàÞ r÷UðæS«q6 œOíÑ%ýAAAA„“EAÁ¡x?ãIÕ¤q¥éjŒrP µ:'×~­ÖÍäÚbS¬„È! Ôâæ{™7‡Mj@ënh\OžÃýê]æ{˜4•(UZIKŒ*–±ÆñŒ2¸Ÿ§Ô»êÞç–ä9r)r¸_Õ‰í®ß^rX"†sŸI±w Ž}˶oÅRbs;)øÈ÷󒌦ÏTT ýPgœÞÔ ÷D¿®ÊCžušìI ÖÓNãâ§<ÆžýÛ-Ø6}àÉþˆºÇ’Ó1^ô.rd:΢í4|vu‹ÁÉJƒ{âSU\o$Ch«û>Q\•yž>KaÞו&{’{ÁaźúÍÝ5‚.dPìPû*î™m[!9¬'(Á¸‡:ûLdp9°­ñ=V®Šì;ÜÏÁÕ=&ü§Î ‚ ‚ ‚ ‚ ‚ ‚Т?åSˆð0®¾d:AFE%eÌ™»°Õòi)ÝÐëõXm6öç"%9Í‘@×ÑÃQ^QÉî}»´Ï¿üÜz¦»æ¾üø;HJZ2ŸÎ}‹ï¾ø‘¿[tÜ`ƃúx–ç·¨Ã} (?1gR³•½û»ƒHì=è7è`Õ/¿2yÚèõ:2z¤ze]ôã2úêCFTâb)<Üôøô‰î¬°9ûsÙ³Ó;@®ÿÀÞìØº‹òÒ ¿íÜï~!ÌJ˜9Ô8~²qÞ…g3tä b㢠ÃÒ`!?¯S¨; [§Ó¶{¿G³ûªT*Ò³R[ÍÔHÇk·#ã Ô½Õ3 /ŸF¨ÙÄok7qßmaihy†ûÂÃE¤g¥ͶÍ;éÝ/›S0CGâ•gß &Þ=óûáC¾÷tWßÖÆ°O õ-­­ÚóYוV3%µµŠ´P»¹ƒ4jÎKKfHl1F=a:-‡“Ãu žÀTÊwö÷9{rjL$)¦`>™4šïä1ÿàaòëü¿¨ºÇúåpË/»4w4#ð®ÊjJ-ín§£zG¸Û=P]Kq ÷ÌšÂR&§tC¯R‘jbW>cû*Ê­~ˬ© L§%L§õ%C`ÏщÐk@¬×Ï_¼³ Åub‚ÐO†ç>žJ\’ÿ‰[Ò{Fòéò˽ֽüÈrÖ,>@cƒÜ}•$§»¯‘Ãyöã©,ýa/k—æRRPÛ¡>Yêí”®óô+,Âwbƒ?›ÎgAAAAᯧÎUǰC1É¡tפpfÐÙL šÆã$¨¹¶øJlJËivÄ¥·z–edzh³™<•iÁÓIP'òRÔ«\P8•FÅ÷{ïŽÔuáâ²òJô˜äPŒx¤Å¾ÕºüOÎÚ™>ËÁÌžÉpÃHâTq˜Uá4( äÛó=}©“ügnÙœ„ñüב f\¥{iœÿpÀÛPª#Ee"›âplEßIïþ.RÝ}8V^@2¹'êUªš”U‰§à,ü¥¾Ìïþ]åÜõ f$ƒÅRÙéºÍ©b²ÑºÉ†3w–ïîB±7´:fûÆÙ¨»EŽH%hÖ7Ø·ÌÁ¾ý\•];©(€¤ FÓÿ|Ô݇#™âf{®ÊCž`iIí=y´*¦'ÎÒ½( þŸ¡w5Ûo ’"Þ€Š›À‘Û†Š­<Q§@ø‘LÌw€#§óý<šÛYº¯Å uÇhúLEÒèQEgâ,ÚÑù†AAAAAAþ`þtÊ‘áf®¾t:¦ JË+yö7ØlöË5”QÃQU]ÃÛ}Eeu ²$Ñ3+ c†aæâ“yû£9jcÀWW[·z÷ßþ(wýë"¢Â¹ìÚ™\víL¶mÞÉË/?¯òÉø MY[kkê¨(?ÁSwPÄ‘L²-'»·•4• ÷Ú¶tá n»÷F45ã&âãw¾@£Õ0fÂHæ÷s‹íöØ›[«ý´ËÚuáb‡m;;*¶³¾ñWžŠ|Ž8uSƒ§·ÝöÔÝaÛÎE…3¸ÂtC ÉQÅ`Wì9‹øµq Œ“ˆREqÀ¾? }NѤòJôëD«b¼Öë$fÙósàž ù’ÍI/x)8 WÅA¾ºå¸·áªÊGŽÊô «ÓÇ Xë#RCãqU ‡&)ß ,ɪ¬J<…;;n[’Áä 2îLÝæÔ™ãÜ Š‚uÝ{m:FŽƒk°|ÿôãïE ŠD;dÚ!³plŶáS{—ødt9"ãôWB¢½ÖKj*ƒ¹ùïíG—•ïg˜'Rí a€*"Þ„²Yà<쿼➗9¬å}JP%6-ÂÑëJ©mùW³ãx´¼ ‚ ‚ ‚ ‚ ‚ Â_|²;Ðáa¡žàä²òJÞùxµu-?ø aôˆSøò»…TV»g´v) Ûvíå¿ïΦ¸¤ µJÅé#‡œ1´ÕÊ¥k9Ò•üûþçØ¶ÙQ¶wÿlþïÙ{ùðë×HÏJõ­täù¡ò ž:ž£Ù”ÛÚçcËÕÖÔ±vÅzÆŸ5Ƴþ´Ó‡„Óédá¼¥¾íJîKßåta·ÙûO£ ГÊN$‰GŸ½¨˜H¬V/?ý&3θ‚±ÏaÒð̺ào”µè}<‡Ã³|"3p¶Ôn§Æ {aÝê ÔÕÖ#IϾúž¬Ü-ÉÍq¿({$Còè #¨ª¬æƒ7>Ü×¥N§ÅFc£•âÂâÀŒ·Ž"‡ÝÑzÁ?Üôë­yÖv xdè¢ z¬N'¯lÙÉ?.cü×?qÖw‹¸æçU”4´žixeA13\Æãë·²­Üý‚Jï3 ÀûF’Ò%u;âèØµrûÝ7¿}Úï)ÝÆ[0P¿¶ä# »»ËuÜþŽË‰>Gâ°¹þÒÙ“ÁÜPßôÏÚØô¹år)^Ûêm8ìÞ/uæÕpï¬XðåN,õÞ“Ûdõæ®'ÆrדcQ©Ûw¿4w,Hœ,=΂ ‚ ‚ ‚ Â_ßjËJ~·n`¨~ø kwIÃÏì¶í`°~hÀë;‹xºò ¦LaÄ¡ÁŒÉÁ……Óù æ]"TîÉq·w Ú•x2ò9¢U1X+ÏW>Ô‚I ?4ˆ1ùù´h&Åή`[MhœœKÃ×£Ô—¿b¸*i3uæXK%¶µï¸Nj’1ÅÞè••ÖóÝ«â§íøÿTÚ€ÔmÎqp е$ ã´—PgŽoÓ¸û~¡î­)4ÎgÁVTñ}1Ly’ +>GŽÊlë!l# Ô'ÝÁÉ+Ö¥ÏSÿÖdj_FÝË£©ÿè”Úb¿5‡Õ½ ŸÜÉ8†Ê;A±áÿÙ쿬ãHà²*$ã‰ëcÓ³°¿ö³AAAAAA„ãùÓdPÖé´\6óL!ATTVóöÇ_µœ ‘šŒJ–©­«çà!ß)um6;k7låÜ3Ç’”×U]ï0»ÝÁ‚¹‹Y0w1±ñ1Lž6‘™—Grj7þóΓ\~Þ”•6= ®(sR…˜‚ 3Q]Us²ºÎö­»°X,”´’ ¬´œŒ©Ä&Ä´X&&®ifçŠrßÙª¿Ÿ3ŸÓÆ#-£;©Ý9°÷ “Îq?^±t-å¥-¶»dár¹çé¶+ ¼ƒq_>£GÝÓ’xê¡Yôã2Ï6»ÝÁÞ]û©¯ïølæ1±­ç®ÒR»o î…Mëç¹ÇþË“/?DJZ2?u²,³xÁ/~ËçìË .!–ž}²ˆ‹áëÏ~`ñO˹ñŽYŒ?‚ß~ÝŒ$Iä8„«Ù5ÐÕç·%m¹ÿŒ"›eG®h´z–3ÂLt7ðô†müœWàÙfw¹Ø[UC½ãøÁÚv—‹ŸróSîabƒ œÝ=‘ 2RH6óâè!\¹hekÀë¶W…Õ „mÔ·¬¿~ºY’Ò´ïÏ…²F+é@l¡Å2±Æ¦mÍÏQsͳKmÈq´Ý¥ù…ü߯í{I¬¹yŽ:£²¼) µ!HCl¢‰¢üöÞyMæpãk]ÇTËrë?pÝ^?÷’À=ϸ3VØU΃7ü诚—ª ¾¼žÙ¯o¤Ïà8†ŒéÎàÑIèôîkü”ቜy~6?ÌÞÞž¡´‰ÓéÈ{¼ñJ{Ïo ޳ ‚ ‚ ‚ ‚ð×Wì,¦`Vµ5ØEò¹di{x†ODÝÁ3‘‘qád™eqÀÚÍÒö Uãž”ú±Š‡YPßôÝ›]±³Û¶‹zW=tQ¬¨¤ ÂpÞ îàäªü. Np•¹³OK¦xTq½‘MñØ7}÷Bt£nE9GÞ:$\9^³CºêËɾ{óîo_»¨ÛœóЬ??‰á¼#R1L~Ë2Ž] ÛPÙŽ}Ç<ì;æ!›âÑô9ÍÀ‹‘#R0^ð:õÌD© ÌDŪ˜,ä÷uÕ¸ðQì;x¶)N;JÉn[½ß¯‹•êˆíÕAÓíg] U÷ù)P'AøóP~(ÞóbÿýÈ‚ ú`Ytbúwôº’ŽÜû#›šÞAQêËND·AAAAAAN¸?Må©gŽ#:2œ† ïÏþ–ÚºúãÖ rO‘k³Ù[,c=²MÛÅrGÎEWL'6¾cA€EżýÊG\wñí8BLÁœy®÷¬Ì[7îܳ@Ÿ1e\§ûÜÿ}îmî¼áÖÉnÜ’ß7¹ûœ–ÑÝ“uöX#Ǹgo´4²wןíëVo ð°{í³Ï›HtlC†à›Ï~hµÝAC ÓùŸ»«566ei :nùðˆ0ÏòÞݾǡ³†ìîW ǹ«´ÔngÆÈ{¡ ¿ˆ›¯øÛ6ïDVÉ<ðÄ]Œ™0ÒoÙœýyÄ'Ä0qòXÍ[JIQ)Û6ï¤Ï€ž :€ûzÕíêóÛ’£÷B^DE·ÿežcuö³.P†™ØÀ©(¨®õ¬7ëužå}šÄ¡¨ÞÂ;Û÷rÃ’Õ8\ !Z “’»´îi 1\˜™Òj0ÀΊ*ÒÃL R.?8Ü=$¸]õ~?2I@jh1Fÿ}qä3¿Ñád_µÿsÑØ, ³-AÒGÛ‰N˜7¶:s~»Úî­Þ.¸¦›&¼8–µÑéYŽˆ€Ò¡ IDAT:qé,õ6¯Ÿ#cÚwµ—Ô, Ønw²qU>¯ý{%·_ø ¥M@ Ö5ç·®Æ;¨=:îÄdã>Yç [ª™G^;“÷^̃/ŸAT\מcAAAAáÄIR'Píª>¡íƪb¨uÕ§d`ê¦iÒ¹Ìt%?7,¢ÐQ°vÛ,Ͳ|"é'܇‘Šb©ÂòÕߺ<€ÒYî~þ%‡Æ£Î> ûÎ(µÅ8 ¶¢Šï‡:ÙýÜðh0³§îa÷¤¤êäÁ ÖÑ©{,Wõa>»Æ Y’1œù(êÌö=‹tÕ`]õ Ÿ\.’Þ„¦×”Nõ«9ÉîYv–ìiW]Gî¯Èa‰¨ÓǬOÕø Ôüǽ¬é !7ù–±mç‘Û2èrNØ0G¯+UdºW rsê´Ñ(vK»ÏE{Lœ8‘k®¹†ÄÄö?ß8YuAAAAAAøëøS('ÆÇÒ·—{–Þ9sQ^YÕ¦zG‚ÏÂÍ¡ÄÇú~í“@yfŒ½øªüû…qÓWóöì— 3µZ^­n9+g.5G‚íÂÌÞûÙµ}'ÀóÚ[.£ï€^ìy×[8o N§•JŬ›.õÙž’–ÌSÆ)»‡ŸÌ¦.—Â÷sÜ3?ŸyÎx.¾r:²J&7ç×ùÏ ¹`îbaæPn»÷FT dk⢦Y°?å¸å+Ê›®ûì^µºWßœ3}?ý°Äïqî ­µÛ™ñú^¨­©ã¶kïeËÆm¨T*|òn¿ûÌË9„Ãá &>† gáð¡B¶mÙ ¸¯_I’¸dÖ ì=èU·+ÏokšßƒwüëæNÝ íý¬ µäûk,6ÈÀÄd÷lå« Jht6çU6ËÔÛÃÚþöZÉxšSSG­ÍpêgâƒÎÔmTv 7öíÁ›c‡cje‚%‡Üod¨$‰+²Ó}¶Ë’Ôj@ëÑçщ±èÕm¿6åàTT’Ĭ^>ÛSLÁLLJð”u“I÷¨’†¦ Á§ÆD·ÝŸrãp)„é´ü½OTíŒÖ Ô9:Q~[qˆªfY”‡Žíο^:ƒa㺟Jx”‘¸n&²ûÇ0ùÂ^¨Ôþÿì+/nšô%¡{S/ëC\’‰¨¸`Ò{E1óº¤du~ŸvKh´4}I¿¡ DÆ‘Ñ+Š ¯?sd`jUj™ÿ~5ƒkþ1ŒÃ1GÑhTè jÌQFަ`ø®Êl\]a¡¡YPöØ)ô’@Tl0=úFsQÇÛÜÉ:¿·?6šŒ^Qèôjzô‹áÚ ë’vAAAA„k´át2µYlhl}²â@ê§ëO/]¶X7wyÝ¡úa¼ó6zIO…³œ*Ÿi_‡Ón…³)[q/mïvï»3T±½P÷8€Æãª:Ôåmº*‚ËlŠC“= WU¾;а„vð•î²eû¼êÚwüàæ5˜Ñ½ä¶?³èL]”ƾ¼gþ&UÎz UBÿ…å–Ÿû»Ê 4ºßg a-–kwÿ*<˪؞íªkß9ߨ®?ó4½ÏA Š@Ò… Šëƒîô;AîÚ‰ßUÿ©;P èÐ 9¦€Ë]@ÓL·ƒßôÐæØù#¸œ «Ð¿Þg»‘ЦçYGÊÎW×<¿îºëxíµ×¸÷Þ{ùöÛo kûµt²ê ‚ ‚ ‚ ‚ ‚ ‚ð×rüt„£†¹³áæ.$7¿½ÞÿÌÆŠ¢`µ6~ìÚ{‹¥ƒAÏ¥çOaÁâì;x»ÍNdD£‡&;3€ß¶ìè²þ;s´g9Ôlbà~,ùiE‹åŸ{ý1;‹,g×¶=T”W¡V«‰æœóÏ$< ÀŽß½gÙU…gþïe^~ï)ô=/¿ûK.gõ/ë(<\ŒÓéÄd$5=™°ðPÞzùîp;–òÙ_sɬó9óœñŒæÎY@]m½ûesùu¢V«©©®åý×?mq?s¿ZÀ•7\Lˆ)˜éŸÀ—×bùÒâ2>xó3®¾éR&O;ƒ§öåÛ/æ‘›“OEYZ–¸øú ìÍóÿ~g³Ç@ÉË9DeEæð0n¼m*•Šý{r$‰î©ItKIàµçßõ”ß·{?E%ÄÆGsë=×£ÓëØ¸n ÕU5h4ÂÂCÑŽŸ!5«Wýö¦¶º–ІŽÄŒKÎE£ÕPUYÍ{­çÎho»oWÜ V«{ny„WÞ{Šô¬Tén¸ôòó Ú¹ŸÂú´*ÑF=r ÀÅ >ß“ÃÅY©LJNÀ VñÃCÔÙôŠãòìtÔ²DÍÎû;÷ùÝ@^m=•Vf–úd¡’%öWÕ"IÐÝL·à ^ÿ}·§|©¥‘wîcV¯ ÎNI¤T8ßÈ#¯¶ŽŠFZY&6È@¿Èp^Ø´§â¨st¢ØmNÞxj5w?9Ö“8» Ùýýg0ß²®€C|'dÙ±©ˆSF4ÍnÁµ¸àÚ^eÊŠêÉÙ]~lÕNQ\ Væ1b‚ûo1S˜ž{žöÎ4±ss1•e þª·Kb÷PÂ" Œ’ÁØ)¾AóÍýþ[A«Û;JQ`ÃÊ|N;ãÈxÍzîyÆ{¼;4^¯}ž¤óª#6Ñ{¢Šìþ1Ȳ„«…I AAAA„? ‰Oâ¾`•e%[¬)u–âPDª¢ªÆ!Pá¬àëº9~÷,#‰ –ƒ=ëõ²9‡âÀ¢X¼ê=ù4•Î ~³®§ÐQ€]±®Š`˜~83C.BF¦ÎUÇWu_ú´Ù™ºÉ€I%NG¶¶ãè«ëïç]e·QæôŸa¸£íî±í¦ÐQHœ:Ž;Ìw£—ô¬·®£ÊY…VÒ¦ G/ü¶ÙYÚÁWà,ØŠóð$]ˆÿ‚Š ÅVï[{9í8Ëö£ŠÎBRi°mœíÙ䨽N¿Ó“ý×Y¼Ó»µ%X×¾ƒnøõhúœ‹ªÛ@ì[æàª8ˆR_j-²)Uâ?å @Ý9¬X¾½ãÌ7‘£21œû Ÿ^éèmœñ ŠÓŽc÷"œEÛQê+@¥vi÷Ö4Þ¢m=ª>œ%{pÕ"›âÜÅj=ÎCëQ,U Ò"Ì iᙣÊå‡û0Lû’6ý¬_Qýh¿9B„ÒÐü££þ Ðíº4îuŽ@íàÀ÷ÉUS„í·Ñ¾M¯ÉHZ#ö­ß XkQÅõE;ôjÕ(5X×¼ø1yòdϲÙlfĈÌ›7ï]WAAAAA„¿–?E€r÷nîL˜I q1ãG0fü¯íµ5uÜó·‡)-i9p¦ºª†ùß.bê̳¨ª¬fþ÷?·ÚîoÌF«ÕrɬóIèÇÍw^ã·Üg|Í¡ÜÃ@`•Ë¥ðÖËr÷C·j6ñÿæ3¦æÊ.—Âc÷=ËÓÿ}„à îü×Ííîà÷T”WrÏ-S^Ú4«v ÇÛžv¡óãíȽp<õuõÜ}óC¼ûå+„™Cyì…qýÅ·yMŒ°{û^2{¤ár),hv ÖTײ|ñjÆM…¢(ì9&(3Pç·#ÞùïG˜ÃC™<í zöÉâ¡§îéÐ~ÚóY(YfjZSÓ’¼Ö;…'ÛÊþ#çr) ÿ^·…§F"X£áŽvd×–%‰ìð0ô*ƒ[Éæ»º°„¥ùE«{¬RK#ͲS—X,­”†ç7n'6È@Ÿ3cc“Ûjùcû3/'Ÿ³SéÆ#Zþ½t¬··í!Ê gBR<£bàÝn­Íν«6Pfilq.Eáím{øÇÀÞ„ê´ÜuŠw‰›Ý+@àÃûЪd.ÎJ%!ØÈM}{øÝ÷ç{r8T×ôRU Ïщ´eíaž½w)×ß;SXë“$§›ý(/ùa/ÎË"&¡…Ѐ„äögo‹/ßÙB¿! ›üO>“Ð=”-¿ît;ñmìÿ®-ÅÌû¬ë&­™óîfú ‰oñ\j¼Í¬ó[Wk£ªÂBXxÓ ”*µŒ¬Ê‚ ‚ ‚ ‚ tÝ5)dh2ÉÐd³ü–)q–pWémÔºjýnÿ1ág ~‚kxܳ¼Ò²œÛK›žÉÈŒ0œ†Q2rAÈE~÷[íªâŸewyeîl]€›ÃþÎÌcê)(übYÊ3ORâ,ö»ÏδëÂÅCå÷ñbÔ+„È!Ü~¿ßú]áhÆ_U|_‚oYÚb9¥¡‚º×&¬]WÑTÑY ¸plÿ¡©Æû–¢ÎšŠ‚«x—O]Ûš·‘TZ´ƒ¯@KD7ú6¿mØ~ûWe^Àê¶D±ÖÑðõm]þ ’ÁŒáÜg¨ÿä pXÝ$9¶7’Fºû°÷ãØ¿ÇîÖŸk·‹â¢qþƒÎ{I‚~ü?ÛUÝ™¿‘†O.G7òfÔ)Ã@¥uïÖZ‡cß24ÙgÉB}â¾çuÕBÍKö(¨¢!ør¨}£y¨¸ ÌOn(hºÿu5ëªW‘B¢ÑdŸ‰:c,ꌱ^Û•Æ,ß܆RWÒe}(**¢W¯¦çmŸ„õdÕAAAAAá¯åO l0v|fè}9y¼ôÆGŒ2€ôÔdÂL!¨Õ*,–F ŠKÙüû.¶lÛÕ¥Ï^}î¢c¢ˆOŒå»9?²mËÎË*ŠÂ=·<Ĩq#èÝ/›ˆH3aá¡(.…ŠòJöíÉaÉ‚åü<Y‹Á›Öoå¢)×rÖ¹ã1f险˜ÂB°ÛìÔÖÔ‘³? k7£R©p:<÷Ú£ôгÝãºýºûømíæv×;–ÓéäÑ{ŸaùÏ«9çü3Éî‰^¯£¨°„UË~åÓ÷æPÙ†l•Ÿô 眲,ñÕì¹Øšú£( oþç}~ž¿Œó.8›ƒû‰V§¥®¦žÜœCl\¿•êªO@«¹_- ºª†iM!#+•àà , ûvç°|ñj$IBi–ásËÆm\>íf\|.§ îKTL$¦Ðê-TWÕPQVIÞÁ|Ö­ÞàÓ֫Ͽˠ¡ýIIK&*&ƒAÕj%?¯•K×ðÅÇßRWë=z ÆÛ‘v1^hÿ½Ð¥%å<õÐK<ñŸIËèÎÕ7_ƫϿãÙ¾kû^¦LŸÄ¯+×STàý°ù»/dܤQäçP_ç›!³³ãí(§ÓÉS¿Äâ¿0õ‚³éÝ/›°ðP\NÕU5Î/dçï{øuÕo­î§=ŸuòSîaԲ̀¨pBuZª­66—VðÉ®ýì«öÿRÔÖ²J®\¸’ééÉ ˆŠ ʨǤÕÐ`wPc³SÑh%·¶ŽuÇX+ŠÂ?Wn`TB ½"ˆÐë ÓiQP¨h´²¿º–%‡ Y|¨×1™y;S÷X¯nÝE´AO\‘ïä±½¼õÏLJƒ¿/û•iéÉLLJ )$I‚ýÕµü”{˜[úe£‘[žˆà™ ¿³¥¬‚É)ÝH ƨVcw¹¨¶Ú)¨o`Oe5ë‹}ƒÑŠÂcë¶°üpç¤&ÑÊ^­¢¨ÞÂêÂfï>@åq>§~È9DµÍÆ´´dÒÃLkÔXNöU×°âp1Þ¯À(À[Ûö°øP!ç¦&qJt8QZ•LÍN^m=KË©¶y·Èst¢mZ“Ï­|ͨIiü?{÷U•>pü{§ffÒ{!$!ô"½£ˆÒ¬?\¬°öµ¯®½­XVlÈêŠXQ, Ò¤WéB ¡…„ô2I¦ýþ˜d˜$¤Lèûy'çÞsϹmf˜sßóvìCl|~z´:5¥f+YEޟʼn£y•Ö/)¶ðʃ ¸þ®´ëEH¸ µF¡(¿Œœ3ÅìÛ‘ÁúåG¤ï' xñ¾ùÜ4®mºDá §´ÄJæÉBvoMç•U?¶}à Æô«Ùë–¦’uºˆî›“Ô!‚ðh_ F-V‹¼3GS²Y¿ì(ë~OÅÑ€Á³™§ yñÞùÜ0Öy¬‚|(*,#óT!;ÿ8ÅÆ8Îõ=¿µ9Î9ì>¿š‡^êë ÈÎ8Y€Õb¯ó¾!„B!„Bˆ‹ã„õ/f=KOŸÞ$é’‰ÔD¢CG£€CeYm^ÁÜ¢ÙÚ ½Ú®/žy–Þ†¾´Ñµ%FÓƒÊ@‘½TËÖ–¬á§‚ɱ{NÄXŸºEŽB ìØóIµa[éV~7/á¨%µÁú °µt £Óod´ïºú\A¸:‚uEö"òì¹dÙ²Hµa}ÉÚZÏê(†@¯n¯¦l§÷¢åz¬GÖbÏ?嶬lû,4‰C°ç«"k³ƒÒÕaÙ·]Ç›P7íŠâŽ¢Öã(-ÀžŠíØ&g¦`¯Ö­š£0ƒ’…¯a¸î=T¡ñè{ßO銉g:0Ï~ M«A¨£Û¡2…¢ƒÀaÇ^”=óÖý‹±ì[ïþnj;¾•â¯F£ít ê¦]Qù…£øà(+ÂQ’‡£( {v*ÖÔu•Ö·gÆ<÷Ÿ Ö¡2…âpØpf MvNî8ˆ}‘˜ãõ ëìÌ’\8.G1d?ì̤lºdP£ l™`ÙeÀêÍŸáí6J濈5eÚö7 ŽLFÑú`ÏOÇzh%eLÃQœ}áíÔÃ[o½ETT±±±Ì˜1ƒ­[k>1cÕB!„B!„B!ÄŸ‹rö?7¯¼òв{÷n%33S)((Pâââ”ÌÌL•N§S©ìv»Öh4j-‹ðQ©T&‡Ãáçp8‚V®\9wÓ¦ò ¶®]»^ÄÝi|ñññÝ…Zûø«w5@ùròW;Vµý—ù£®Â¤Õðé®ý|³ïpcw粶䆫ѪTüwû^~LImìî\ö¾ÚŸ_#ïmÙÍÜÃ5˲ ÄŸYx´¾‰V«æ—»ùöÞdãBæ Dž×7ngQšdpB!„B!„8ç»ï¾«´ü¯6¶+„¨9UpsLcg`žóÖC+¹GB!„B!„B!„¢:•Åùöë×o”¢(9Š¢Øíö" D«Õ–[T*•Åd2ÙËÊÊlaaaöÇ;üüüaaaŽ6mÚ8^yåŒp—EeѰ¼óÉÆîÂeã¯v¬þjû+„BˆúSkTÄÆÒ¦s×ü_k´Z5ù¹%ü2cwcwM!„B!„B!Di;Þì|á°c;µ«q;#„B!„B!„B!.  ,„B!„ðšVÉ¡¼ôß¡®¿ óKyû_KÉÏ-iÄ^ !„B!„B!„¸Èÿ`ÏIÃvr;ö °” øE¢M¾m›X,ÁQœÝÈ=B!„B!„B!„— PB!„ð²ûÚ%269Þ­ìŽE«È/³4R„¸xŽÈÆawPVfcÍ¢ÃÌüb;¹Ùæo÷ž¶ kÞÄ­,@¯kðv…B!„B!„âOA¥F×4ú*W±ÞGÉ’·.b§„B!„B!„B!Ä¥L”/!«vÌo”vû¶¿¶QÚB!þ¬LZ &­û×,EQ¼¶ýoWÞáµm]Æô›ÖØ]µPZbå™±ó8u<«Å~ÑÚ5i5ùTýàœB!„B!„Bˆj¨4”®›‚&¶J`c ŠZ‡£$[Æ~¬–bÙó+Ød2V!„B!„B!„Bá$Ê— Bˆš¹vîâÆîŸƕ?-lì.ü©ŒùmÅÅiGvÅ%îØ‘Ü‹Þæ[÷ðÁÖ=½]!„B!„B!„øS°–R¶q*e§6vO„B!„B!„B!ÄeBÕØB!„B!„B!„B!„B!„B!„B!„B\>$@Y!„B!„B!„B!„B!„B!„B!„BQc ,„B!„B!„B!„B!„B!„B!„B!„¨1Mcw@qqúת9y¹ùNImì, П– ÍÉÎÊ%õPZcwGˆ?=E‡£±{!*côÕ¡R)æ—6vWþä^B!„B!„—Š@U ñºVdÙ²8b9ÜØÝ— mÛ‘¨#’°ÛŒõÀÒÆîŽB!P`` ‰‰‰äææ²ÿþÆîN£ "11‘3gÎpðàÁÆîŽFî!„B!„¢z ,Ä_Ä÷ó?ÇäkbòÄ© Ü´Y ·ßý$·K"<2‹ÅJú© ì9ÈúÕ›X±dM£õíÏlö’¯Ñê´LzûS Pâ¾ÚŸ_c¥ËFÎ[J^iYµõã’B÷Dþ÷ÆjN¤æ5DÕ—‹Æ ÷©ü+ä'o®aå‚C¹Gjäžõ¤i\ !á&¦¼½Že¿¤Ôz;WŽJà¦q±Û|7y +«ý¾¶ïÍÀá­hÕ&Œ€ JK­äe—~<ŸíN²bþAJK¬µÞ.÷Âc’¹¾e³J—½¾q;‹ÒNz³‹B!„B!„â/äטÅèïåLeQcúO è}±d4vW„ðšöíÛ3qâDŒF#Ï<ó Ë–-kì.‰F4vìX^xáò””†Ú=ºøZ´hÁ<@‡ˆŽŽ¦¬¬Œ'N°k×.V®\Éo¿ýÖØ]üË»Xçhùòåøùù1a PÖ®]‹N§cüøñ”)þÒä^B!„B!ª'ÊB4"•J!*&’S'Ò±ÛÿüéÛvhÍûSÞÀÇGï*3þ~$$µ$¹}’( ñ'¤R"MÒ‹ÌØ/£Tª%Vev»[™ãýWkTÜût/b[ñÆgÙñÉÎÚ+d™¯ŸŽŽ=bêµpcR¸ç_=Ù¶þù¹%5ÞÆ]wgÈõ‰neF£IGTS:õlÂÖuÇÉ>z†ô¸s±¹±»Ôàžyõ1||ôóé‡SÙ¼a6›°ˆPZ&4oìî !@·ˆP^ëÕµš¡sa¶Ú»K5öñŽ}Ì=\»ŒãWô%¶eZš;¹‚Ž=c˜üæZrÎ7D7zSkZµ #¦y' xïùå ÖVIqyð¨¢(èôêkëRjp'ƒ370ÄPã垃›{'Ÿ//Û\ipòÅ<¿ÞR×{aòÎýLÞé>ùœáƒª0¹‰B!„B!„hx*Tô7äjã5´×w$HD™£”£Ö£¬4/绂o(´7üD{~*?>ŸB’®5Oe>Îróï ÞæÅ¦FÍ~73Ü4ŠfÚæœ°gyñïL/˜F±½¨AÚU…Ä¡ëxê¦]QÄà°[qäÇzd e›¿ÁaÎkv…8Ÿ¦)„ýä|u”mó\Ç÷ð»p@ö#Pº¾òmi[ƒñFÐ_ªPp”€-Ê6BÑ,°o°Ý¸h®»î:Þ}÷Ý ®·wï^†^é2«Õêzm³]>cw¢a|óÍ7Ìš5Ëõ÷ã?ÎwÜш=º¸Þzë- ………¼óÎ;¬]»›ÍFDDIIIÝ=¯êׯü1ƒvíÚQ\Üpã×ÞôW:GB!„B!„B\Ž.ùeEQ2°}ztA¥¸çN‹Š#*"ŒNí’ùô«ÈÍ/h¤^ Q{F“Á-“ðŸ]\|3šÅ5`Ò„Oùuö"ײãi'ÙúÇŽÆêš¢µ|ÔV€õËRÉ8UÀu··£KŸXÚ_Íà‘ Ìü¢’'j¼ä꓈ˆñ 7«a'¼xàº]¯›Åóæ•?Üòg“v(‡ŒS…„Gùpòh'ŽÖü½ÃZ¹ýýíÇ›Y½ø08 8ÜDÓ¸@ Fm¥u/æùõ–ƺ„B!„B!„wL{Ÿ~†neECk]2­uÉŒ0âîÓw’ik ÒZþ IDAT¸ÉŸc4Mx;ô=tÕOüw93*FÞŸDg}W·òVÚZ$p­i8÷žG†í´÷UTèûüÝ·ƒ¢*/Fžˆ.<mòpŠ¿‡=?Ý{í QGºNàw·óuÑ÷U'+àÿ(˜þ¨*ë@åÚ0Þ§¯GÙÅèõ¥íý÷ß'22ƒÁÀøñã»;¢‘•••QVVæö÷_EBBñññŒ?ž,MMMeÆ Õµa2™Ü²_þjçH!„B!„BˆËÑ% èïGÏ®Q) ¥²eÇ^²²sñ5èÖ¹=­âð÷eøÕ˜þã<·ºg²rxç¿_V¹mEQøÛÃˆŽ ãdz™g²zw„øËŠˆŽp½^»bc#öD!Öá}Y¼÷ürš¶dÔííhÒ"¹_ïlìn‰z*+µñòýó0¬v»e¿Äfµ×¸~“¸@×ë=[Óùå»Ý®¿s³ÍÞwÆ«ý½Ƚ „B!„BqùZX´€XM3~)šËŽÒØó S‡3Üw$CŒC‰ÖÄðpàc¼”õ¼×Û>—Qø€‡ñUùz}û—’=í Nþ2ÿ3f΃>>ýx8è1b4Mú÷‡‡WÚTùE¢í4Ö#k±ìþGnŠ!m‡ÑÄ÷Gñ G?è_˜ç<á•6…¨+U(½ ¨À² &U¾^À¿Àx“óµe7Nw®¯¨@ÛL·€5íϜܥKìöÊÇ*ªËŒ¼wï^FŽÙPÝâ²ãzýûï¿7bODUä !„B!„Bqé»ä”sòò™3)%¥¥ìK9â¶ìÀ¡£Ü1z$‰ñ-HŒoŽN«¥Ìbq-·ÙíääåW¹í¾=º†ÕjãûÙ¿a­f€FQ?z½Îõº¤¤´{"„DZ#¹ü÷ß«P«l6ï<8ög£¨4g*‡ÃÕRó€ßÆ—SÂÜéu °5ù–f.òV—j¤±³Ü B!„B!„—ŸÅÅ Y\¼Ð-(ö %…u%kЄjd¼Ò#ò7 3àž€û‰Ñ4`]Ézúôöz;—‚HMÃ}‚_æÆÇ¹å‘—3 ¿çŒ-“ aïÓIß™n>=ØP²Î+íÚóORºø ¥X¯r[fM]‹áúÐÄõAÓ¢7ŠÖ€ÃböJ»BÔš‚ÞUØó!ç_•ëû”'›…Ü~·¦y(¦‹Ò닪   Ú@d!Dõ|||\¯Ífù¼»É9B!„B!„âÒwÉ(lÛµ¯ÊeÛw 1¾*• _ÎdåÔh›þ~ î×€e«7r&»fõê¢Il4¯Nx†˜¦QÌþþW&OœzÁ:£›ÆŒ¤ÏÀ4mƒÑd ¸ÈL^n>'§³eãv¾ùâÇ*ëëõ:®¼výõ¢Uë–`µXÈË-ààì]±‘y³~óÊþ]uí† D|B üü8yxÝzvvf\´ŠI¦`.®üã~ƒ{1êækIjÓ =é§2X³|3¦Î"';×m]­V﫾Ç`4°`îbÞxñýJ·éã£ç×UߣÓë˜î[éÚ£¡!ø£ÕiÉÍÎeç¶½ü8}»¶Wßçf-šòÜø'èÚ£AÁäç°åí|óÅLî?\÷«Dmö·ªóµ»6*  ¢GŸ®´ïÔ†– -ˆŒÇäkBQ Ä\Ê©§™?w3¿ù€Q7_Ë“/>ı£'3âžj÷­k޼ÿéœÉÈâú+ow[VŸsTÛ>W¤Ñh¸q̆ Dl³PÒŽcѯË@QªÝŸsêò~UWÃ[4¥SX0q~„}0h4”Xmœ(,fÕÉtfõƒ,úÉý;UX”/ºÇжK$1Í 5âã£A­QQb¶’•QDÚÁ¾Ÿ²•Œ“uØû굿"š§' ààž3¼tÿü ÖÑéÕ ™@×¾±4iˆÑWK‰ÙJAn ™§ŠØ³5…³öRb®úýãÊQ ŒÓ†æ" ‡öžaÁ{ÙµÙó©ê8|òæV.8Te;UÕí;´%}‡¶ô(éÜYmÝÚœ_W:ç† ÁÉB!„B!„—ê²õî(ÝÆ ã•èT¨°Sù„xmtm¹ÅïV:ût%HD=Ÿí¥Û˜^0¥Û*­ÓDÓ”MŽYÓø8wJÖñ{“Õ5î·FÑ0Ú÷o\cN¬¶ ©–#üVô+ Õ•ÜðÝ|z¦'P€VÑ‘cÏf{é6f|ÃÎÒíÕÖ×+z®6]ÃÃ`uI©‚°`!Ï–GŠe?«Ì+™SX>FÖݧ*œ ~Wð­ÇöV˜—‘iË$LÆ•Æ!^ P°ì­ú7Bë¾…hâú€JâŽ#ûh½ÛÓ¶¿Ÿ«žÃž“FÑ7T»®ºY7Œ7}Œ£0“ÂÉ×x.lƒ¶óßÐ4íŒbÂQZ€íÄ6Ê6MÇvrGõÛ®GÝÊ(†Œ·|*¸ö¬ÃÏø;ŽR÷ßÒ­mç[дì‡*(EgÂQV„£${î lÇþ lãWµnûBô½îEÛÅ/ Å'E­ÃQœƒíävʶ̸Àþ*h“† i3uDŠ?k)ŽâìÙ©ØÓwaÙ³{î1¯÷»¢ÀçA×°Cîó`óü ¿{ÿ·ƒ¼×¡Š·$ 4w¨¦Õ@´íoD™Œ¢ÑcÏOÇzx%e|£8»a­ƒ±cÇò /x”§¤¤0tèÐjë¾öÚkŒ3†ââbFŽÉ‘#G<Öyï½÷5jiii 6ŒâââJ¶T7>ú(½{÷&""‚   t:YYYlÞ¼™/¿ü’­[·z­­óùøø0bĆ Brr2!!!X,rrrØ»w/Ë–-ã»ï¾«´î!C3f íÚµÃ`0pâÄ –.]Ê”)SÈÊÊòX_¯×³gÏ×>ÿòË/ëìÝ»NÇøñãùòË/Ý–ÝrË-tïÞÄÄD¢¢¢0™L˜ÍfŽ=ÊÂ… ™6mÞï;§C‡Üu×]tëÖòòòؼy3Ÿ}ö[¶li°vk{œX°`GùΞ“O˜0O>ù¤Ñû\Ÿk£6û»víZn¿ývòúºÏQË–-™0a½zõ"44”œœÖ¯_Ïäɓٻ·úç².ö½?zôh:tè@ëÖ­ ' µZMzz:«W¯æÓO?娱ª?³5 wÞy'£F¢E‹(ŠÂáÇ™;w.Êž52Üu×] <˜-ZàëëKaa!¹¹¹¤¥¥±nÝ:&Ož\í6jcäÈ‘\wÝu$%%ȱcÇX¼x1?ÿü3>ú(}ûöÅf³1þ|^ýõ*?‹jû~å­vk{mœFÿþýéÚµ+IIIÄÄÄàç燢(süøqfΜÉW_•§¼ÿþûyê©§0`@¥×@÷îÝùö[ç¿CFͦM›ª>øµT—>WT×Ï”ú|g¸œî!„B!„âRsY(W§¬¬<0ÊRM Ûù®Ø ­VCn~«×onˆ®¹üãÉ»IhÀmÿ?V/[ÏîU]úóÑÔ 4‹kêVîç¿/Mb£Q«UU('·Kä•·Ÿ&*&Ò­\«Õ`0ˆŒ§¸Èìµå1co">1Îõwó–±4oËíwÿŸÛz#nJPpÏ>úš[¹Z­æ¹ñO0dØ@·òØæMˆ½« îÂÓ¿â,l±XùcÝVú îE÷Þ]Q‡ÃóA‰®=;¡;›¹wÕ2ÏAûû½‹ÛþîÞÏà ú_Ù›~ƒ{ñþÿcö÷ž?ü6¦}¯ uÛ·²°ˆP]Ý—WõáíW'òëìEUÖ:r°ÛßÁ¡A\yÍéË/¼ç f½DÔåÚ¨è³ ‹­t™¯Ÿ†VIqø,*Ÿm53ã Aì[pH§Ïx,«Ï9ªmŸÏ1ùyç¯Ñ¶Ck·ò„Öñ®÷Ÿš¨íûU}<Ø> “ÖýcȤÕäOB?×·lÆ3k6³?'¯Òú=¢ÂH:ï\…|Ø$Šþ1‘Lؼ‹ù©Ç=êùë´üw@šùûº•ûé´øé´ÄøQ)J¥¬õ©{þ¾'ùpkR«OžfO5ÁöjEáñNmqÞç‚5‘F‘FÝ"B)²X« 2® µ¢ðìí¹*6Ú­<ÖÏD¬_ ®mÞ„g×l®6X¸®îm›È­IqneA>zúÅDÒ7&’¶îfΡ4zÞ:G[BÛ0z©¡‘žÓ÷‡Fš4Ѻc$Ë=èµ6oÅ=ÿêYårƒ†˜fÄ4 à»É ÷Ð@m‡yþƒ!D5õw+7ùê0ùêˆlâO»+¢Xúó¨&@¹Ebˆëµ6PM§žMèÔ³ _¼»ž%s4Xÿ…B!„B!„ø3è ïÀÞ²=U'ÿ#ðQîòçV¬a q0Œƒx;ûMf~ïQofáì)ÛÍó*ìØñSùÕ¸_&•‰Iaÿ£¾ƒ[y’®5IºÖUÔ*×ÛЇd][·²puW¯f°ñ*^Ï~•Ÿ çTZ·­®¯‡þ‡hMŒ[¹-F‘(MEö"·å0u8f‡™l›g@‚”làZÓp’um.Øoq”•Gq:,%ÞÙf¡sbFÅxÁuUFçï·ö‚ÓËô}B×í.·2ÅŒ¦Õ 4ñ)ùým,Û*C¯OÝÊ(:†ë'¢ n†£à4æŸñ N6`ýªîå>þ(>þ¨›¢¨T  ¬nÑu¤ûu£ø…£I¼ MÂ`JDzËsBdEkÀgÄдèåQ®PDC‹^8J )ÛâXï-~‚a¸óuþ»Pº¾òõ4-A{öö.šKƒuÉ“JÏÐWжv¤W7C|;Ú¶£0Ï~¬NÁï—šñãÇÓµkW˜4i7ÜpƒÛ³:W_}5£FÂn·óä“Oz58œUíÛ·w+‹ŒŒdذa\sÍ5<÷ÜsüøcÍïßšêØ±#|ðM›ºÑjµZŒF#111y(«Õj&L˜À¨Q£ÜÊãâ∋‹ãæ›oæž{îñzÐî3Ï<ƒŸŸû禯¯/mÚ´¡M›6Ü~ûíÜsÏ=•yÖ×SO=Åý÷ßïVÊÕW_Í!Cxå•W˜>}ºWÛl¬ã\—cŸëãrÞßnpŸP%,,Œ#Fpíµ×òÔSO1wî\:µ¿Ï>û¬Ç½˘1c1bwÞy'Û·{N¶ãëëËÔ©SéÔ©“[ù¹÷êòý÷ßïþLR@@4kÖ µZíÕ Ì{ï½—Ö­Ë¿×ÇÇÇÏ<à¶Þ-·ÜBhh(÷ÝwŸÇ6êò~Ußvë{mÌ™3‡ÈÈÈJ—ùûû“œœŒÑht+_¾|¹+@¹W¯^|ÿ½ç¿½ºuë@aa¡×'û¨KŸÏ©ÏgJ]¿3\n÷‚B!„Bq©¹ì”“ÿ°Ï<“M^~Ífú ¦C›D–,_‡Õfk°þ„G†¹ýVmÀß÷ýfqM±”Y˜2iëVÿAnvZ–ˆÈ0“ã).ª< qË„¼ÿéMì6;‹~]Æêåë9yüŠ¢"0(€¶’$àpʤiÌüv.º¶ç­I/ðÓw¿ðÅÇÓéÙ÷ žýŸôØ“-›qäPùLÛ÷>z§+uÉ‚åÌ›õù…´í̸o%0(€ÿLz…»nú™‚A×®ÜH¿Á½ ">1Ž”}ž {÷ïÀñ£'8zØ}&À[ÇÝì NÞ²qS&}ʼnc§hÚ,†GÛŽ­yô™ûص})û¼ÈväPƒ¯¸€~ƒzòòž`x¿[0›Ýøí¶Êèøòß`µZ9y<‚"4Z ­Û$pÿãciÖ¢)O<÷ «—­'/7¿Òú‹•ŸœÏÊß×R_H«¤–üýÁÛ ãÙ×çPJ*‡xÎxÜÐûk­d‚º^.gg/ܽc çýÎჩäç`±Xðó÷¥E|3·{!ó´óá_?Z­¦ÚI‚BœPT \¯sTË>Ÿó¯—u'ÿ:{¿Í[JQa­’Zró­£Ü&¨Nm߯¼aùñtf¦¤R`±`ÔhèÆè„ûèùOŸ®ü}ñj²JJ=ê}¹;«ÃÁÉ¢bŠ,V4ŠBRp÷·K$ÖÏ—Ç;µaõÉÓä—¹?‰pgëxšùûb±Ûùl×Ö§g’[Z†V¥"ÜèCbPÅUœûúÔ­(Üèda4T <®M+Wpòžì\¾?p„´‚"T@¸ÑÀ+=:¢W«/ØnmÝÓ6Áœ¼ôØIæ>NÅBÛ@Æ&·"P¯ãÍÞ]·x5™îéÔü®š½€¾Ñ¼Ô½##~^BÉyŸ¹öJ&—“ç NÞš™Å”]8YXL?÷·K¤mHtLfWV.Ï»¼uŽ.¦ø6aêèè{Ý‹bÂpýM»GAƶÖð¦M›æÊ’ÎàŸ±cÇÖ¨nii)<òsæÌ¡uëÖ¼ð ¼ôÒK„„„ðúë¯ðÙgŸ±y³÷Lœ8«ÕJZZhµZÚ·oÏ¿þõ/Z¶lÉ«¯¾ÊâÅ‹ÉÍ­z¼µ¶’’’˜6m&“ ›ÍÆÜ¹sYºt)iii(ŠBHH:uª4 ë©§žr¡Í›7ï¾ûŽüü|:wîÌ£>Jpp0S¦Laذa¤§{¾wÔׂ øòË/ÉËËÃÏÏp÷ÝwÆçŸÎðáÃÉÈðÞ5yß}÷¹ÉÖ¯_Ï;ï¼CZZ-Z´àé§Ÿ¦sçμôÒKlٲŕ%ÖêzœSRRHNNœÙL?øàºté‚ÙìþYlµzw\¹1®Úì¯ÍËÏÏ]Žçè‹ÅÂŒ3X¸p!ùùù$''óØcÅÛo¿ÍþýûÙ·ÏýYšÆ¾÷ûí7f̘AVV&“‰®]»òðÃãççÇ;ï¼Ã!C<’¼ñÆ®€Ìü‘Ù³gSPP@rr2wÝu—[Pîù~øaâãã)++ãÝwßeùòådgg£ÓéˆŠŠ¢]»v6Ìsï½÷S§N¥G|úé§|ýõ×Lœ8‘ðÎ;ïpå•WÒªU+RRR\õêû~U×v½umlݺ•9sæpàÀrrr°X,øûû“À¶mÛÜÖÝ·oéééDFFÒ»wïj”ׯ_ïõû¿.}†úŸ£º~g¸\ï!„B!„âRqY(7kM§vÎü/Z¾¶ÆõúõtfÜÍÉËgûîý®POË®"!©%y¹ùlÞà9#aEí::d]ôë2f|5ËmYæé3ìÚ^y¶X€'_|£É@II)OÞÿ"Û·ìòXgãÚ†É~*ƒâ"3kVlàè‘c4kєͶ‘—›Ïoó–rË7Ð2¡mÚ'¹”#£Ã¹åv笓óç,æÍ—Þwm/eßa¶ü±/üÿ?Æ=p+ÿye¢kùº•q8(ŠBŸ=<”Õj5}:3C®Zæ>¥rXx㸀•K×òâ?ßÀnwöädçòø}Ï3cÞBÃC}û Œþ¯#‡ÃAY©s&a«µü‡½²2‹«üBÖ­úãlõòõ=rŒés&£ÓëèÞ»K•™§MùŽ©Ÿ”<¦ì;Ìë¶òÕ¬ñó÷eÜ·òüããk³[UªÏþÖçÚ8ߺ•+Í„½w—ûéggoWB‚I?é”{àñq´ë˜Ì'|ÉŽ­» wf9>}Òsாç¨6}çă®î À·Sgò¿÷¾p-KÙw˜…ó~gñÆÙhµ~˯íû•7ÈÍcg… ¼{²sÙt:‹÷ûw#H¯ãÎäxÞÛ²Û£Þú³ç«¢5'3HË/bÚÕ}Ñ©Ut cqÚI·uÚ…:³_/N;ÉwçãgšKØUõÀu}êV´ìø)Z:ƒ,óË,lÉôÌŒpN¸Ñ‡[œÁºëNeðüÚ-Ø* Ì+ÀjwP‹˜É‰0àœÑAêqÞÚT>“öÁÜ|¶fdóùU½ñ×i¹+9ž ›Ë?o@ÙÙI*öÕb·»Ê«jðalr+V8ÍKë·º‚˜sJËøçª?øæêþ„ôŒnÕœ×ÿp Ë[çèbQ©þñB·àä”Ý™,ž½ŸÔ”lJÌ -M[y¥>p]ù¬®ïϸžˆç¬È»6â­'—Ôº/»6ŸâȾ, òK)+µácÐí‡ÕÒ°¹Ô”V§¦còì#{·fÊÛë8sºFEDŒ?É"0ùé/¸­e¿¤°xö~¸îŽvtÐ ^M÷ÍXðcùw­ŠÇ¹Y|0o~1¼Æ}®X÷«¥·ºÎóšÅGøä55®ëó+„B!„B!D]ø©üø½Éj·²ƒ–^ÎzÞ#¸œYï pf[Vü;Ïœù§+Ër¶-›‡2îgVô<ÂÔaÜêw/g=ï•~¶Ò&p•ñj¾ÎŸÊ‡¹åãJÊö3¿h«šn@«h«ÜÆó*²•æå¤ZŽðcôltŠžž†ÞüVô«Û:Ï¿€Qe¢ÄQÂ#°µÔ3óÙúϱìýeåA-ŒƒXpÞvòíÎI:}T>Ë‚:¦#Úäa”®þÈkÛuœ ´PT¦Pìù§Îw tÕ$l'œ ŠŸ3³ô¹ußpô=ïÀš² ó¼§Áqv¢8óÌ`÷Šoº.·R²àe¯Ô­Œâ†ñÆI¨Bã±gÅ<ë•'¨cœ󖽿Q¶ék·e¶‚Œͬk=âù´õÐJìÙ©˜ÆÎMó^Xö.p-W…'–ÜnŸIÉ’·Ü7pz/\ó*ÐpÊ>ýÀäÆÇ¼òß«~}M¬óÿ¶S`Ï«~]oRùG¡ëz–]?S²ðß®eöŒØÒ6aºã[ô=ï¥d‘wÆßϧ×ë+ (r8nŽÁxXqÝÚ"¥¤¤0~üxÆÏ­·ÞʺuëX°`o¼ñAAA8p€÷ßÿªƒåË—{”-Y²„C‡±páBôz=ýû÷¯4£i]?“É„ÙlfìØ±üñ‡ç3+W®ô(‹‰‰aÜ8ç$3gÎäé§Ÿv-Û³gëׯç—_~!00Gy„çž{Îk}>g×®]nâ[·neÍš5LŸ>~øa^|ñE¯´Á£> À¢E‹x衇\×VVVwÞy'K–,!""‚qãÆñä“Oz¥Ýúg‡ÃAi©s²ãŠÁ­eee®ò†ÐX×Æå¸¿ÕçŠ>úè#&MšäÖçÕ«W3þ|xôÑGݲç^ ÷þÎ;Y½ºü{û¦M›ÈÏÏçµ×^#..ŽŽ;ºMª””İaÎï}S¦Lá­·Ê?÷÷ìÙÃìٳٽ{7Zmåߟ»téÀܹsùì³ÏÜ–¥§§{=#oE'Nœ ¨¨ˆ¥K—rèÐ!Z¶lÉÚµkZüÉô IDATÉÉÉaöìÙÜ}÷Ý$%%Ñ©S'W °7Þ¯êÒ®7¯eË–Uš9xÇŽÊ¿S._¾œ[n¹…¾}û¢V«Ý>ûÕj5;:“ ¬Zåùï o©MŸ½qŽêòár¾„B!„BˆK…ª±;PWÁAÜzÓpvï;ÈžýžÙs+c4hß&€5¶º‚RÒôÏà…'^çã÷>çž¿=VefÛsrsœ#gÉí ¬>K`Eñ‰q® ªS?ù¶Òàä‹%?×™Í:(8ÐU–u&_“«lȰA¨Ô*¬V+_üÏóǨ£‡±pÞR®¼vMy€evV.ÛÏÄ D®¨K÷9ß’î3­_5l :½‹ÅÊ{o|ìq”˜K˜5cÝût©á^7®cGOp:Ý,Ý4ªÊõ*ËTœyú s¾w>ôÐ{@w||.ÜÕÐêsmÔU^n>E…ÎYÊCÃCP©TŒ¸q(í:%Óop/׺¡aÎÙÛŸüZšž£Ú<´?e¥e|5y†Çr›Í•d©­Lm߯Êö3ÙÌ?r€!±1hTJë+,ât±3ë@´Éè±<÷lp|ëà@üuU?ˆT™úÔ­è›}‡yiÝV>Ù¹{—®!¯š€ýsûow8xwËn·€ß†4¤Y4*EÁjwð垃˲ðè ®Œ®Õ9ªÎU±ÑèÔ*,v;ïoÝí‘a¹Äjã§C©t‹ôÌá­st±têÕÄx °aÙQ^ùÇo¬^t˜ãGr9“^ı#¹¬]r„?V¦5h_¾þðfLÞÂ/3v³è§}üüÍ.>›°Ž©llÐvkJ­Q¡ªp•˜-dž*Àj±Sb¶rô`6 ~ÜËÌ/ýÏZlçã’B¤ÿB!„B!„B\Ž8°:ÜÇ–â´-¹ËÿïU&õ¯1 C§è±8,¼óº+8ù³ÃÌΉt{z{­ŸCLC(s”òYþ§ËmØpP·ß×Ó¬GI·:P›hš¸-k¥Ktemþ,ï“Jƒ“«²¹äÒ¬Îß}Ÿ zš¦ëS‡¡StD¨#d¼’~çP‘½¨N}¯ U` £&€¢`MùëÁå^۶܇£Ì¹ŠïÙßöÚvסŽé€¦ÕÀò~˜œ“ÛsŽ¹Ê´­‡‚F6 %Kÿã 0vmßb¦l«3+ܹì¿Þ¨{>Up3ŒûUh<¶ôÝ÷÷*ƒ“ÅÎISÕQmQ Õnûb±ç¤¹ú¬º_ÏÚÖÎûk)¥k=Át; ‡ >† ݶª³‡Õ~‘ç§Õ´¾Ø­”­ó§}ûöÎgª*›p£14ägJußþ,÷‚B!„Bј.­_÷j($8¿ßz#&£ôŒ3Ìœ·¨Æu;¶MB£VcµÚغ³êLÄÞ¶bIõYò*úqú\ºõêB‹–ÍøvÞæþ0Ÿùs_0²S×v®× æ.®s_½ª’x5¥Baێ΀êÃ)©œ>å™ `ÍŠ ¿áj||ô´JŠsË »xþr:vmG«¤8¢b"9u¢|xàgFÙ#‡Žr`¯{p]Ç.Î]÷ìØGVfv¥í¦r>@`P€+p¼±™|M\Ë0zôéJdT8Á˜‹ÍO;‰€óN½^WëížË ¬V«‰OŒ«6S÷ÅPßk£®NH'>1ŽÈ¨pvmÛKÛ­ñó÷ GŸ®ü÷)DD;go?qÌó¾l¨sT•Ääx8Bq‘¹ÞÛ«ÍûUCZuò4#âšbШiàÏþóîA“VÃõ-›Ñ=2Œ£zf«…Å®ÀT½Ús÷™)©\J _¾ÚŸŸ§± õÇ /üpO}êžoʼnªX©è\Fà}9ydšKjÝN]µ q¶{8¯€ÓÅ•_WëNe2¼ES|ÔjâüÙç…÷Ég÷wOv.Y%•Ï~œš_@ ^G ^ç J‹¡M§H·¿ø|+ûÅ Bo ïN¿Ž¨ØÊ'_‰OåÛ•w¸•Mzu%ë–¦PRláèÁšÅ;¯‘N=›ðÎôëXöK ë—%ãdAúd.²q¢ÐÕ¯Àω .7õ9ÎB!„B!„BTTh/¤ç±.ø«h®mÁ5¦a\gº«ŒW£iÂ=§ï¢ÌQþm'}gv•íàŒíL¥ÛU/…¼Zåºö†PV‹ñæOP AØ3S(YðŠ×Ûpä@ K@å…íäÔÑíQ|œ¿cjš÷¢gæUÅß9ɯ#·<@YÝÄy]ÙNíÄQTùueÏr^WŠ!Å„ÜSﺩ#Z£ëzŠ!Ûјç>‰ÃR\í>[¶Ì@Ó¼ª8LãfcÙ>Ëî_°ç4설ŠÞmÇ›Ñ4ï…â…Ê„ÃRŒ=ç˜+XZѸOZ­ŽpÞG¶ÌÅ•¡7´²M ë ŠB&Cöƒ`=ZƒŠÕ ­hZ@ðÙLÌÙO€õHýûy.;¶-ó`•AêÖëж»Eëƒ:<[úžú7| xî¹çhß¾=111®,‡~ø!{ö4ÜþùùùqÛm·Ñ¿bbb¦¸¸˜£Gä7òññ^¦ùîÝ»»^Ïš5«Vu;wv¾çìß¿ßu¾ßÿÑ£Gc0HNN®2ó¥·-^¼˜¿ýíoFZ·nÍÎ;ë½Íso[·nuæïàAçó:ÁÁÁ»¹êãR>ÎU¹û\ÖýÝ´ià|¶*))É•õRÝßââb222ˆŒŒ$88ØmÙ¹€å}ûöQTTûïÏS§N¥oß¾´jÕŠ¥K—òí·ß2kÖ,RSS½ÑõZS”ê'Õo¨÷« µÛ˜×Æúõë9}ú4\uÕU¬[·ÎµìÜñHKK#-­á¿›Ö„7ÎQ]¾3üÙî!„B!„¢1\vÊ¡ÁAüý¶ñ÷3‘™•ÃÔ³)+󜵰*m“œ|{ö¤¤ŠÀ§Æ¶qífžü5ž|á!B‚¹ýžÑÜ~ÏhvmÛËÓç°bÉšJ3?ŸËøZ_HvÖEž"¸ŽBÎf¡­*Õ¹¬ü§P÷K—-ZÅcÏ>€V«aðÐ~LÿÜ9ã«V§eÀU}X0wI•ívèÒ–U;æ_°Ÿþ~—D€ró–±¼÷ÉxÂ"BÝÊõzAå³n_èÇÏÊdfd¹^7þ Þõ½6êêıSÎåèúrfç.*,¢Y\SW |tŒ3¨ðxÚ)·ú yŽªâœ}1ãtåU\®N•?Ôjг¿Â³ Íý}y§ï„Ü4Ö«ÕVþ®ì0o<}†×må‰ÎmñÑs[RKnKjÉ®¬~LIeå‰ÓY{½Q·®BÎf4?å…àóº´{Ú\u»é—C z¨ÿ3d„œèÌŠ›®¹àú~:­[€rcœ£ú‰(Ï0b±ØH?^· Û¿Š_YÁK^M@°s6êˆ?n¹¯3·Ü×™ý;2˜7c[Ö¯õv‹‹Ë¯!Þsb!„B!„B!þêòíyì(ÝÆŽÒm¬2¯`bØG$ëÚpƒïM|w6#2@¨Ú™·“¾ Än¿àvýÕ^ PV9lj2¬§ëT¿…6Žÿ†B¸:­\¯è Ò¹þ>Ø!ììþæÛóɶeQ[{Êvó·S7q§ÿXzz¡ŽÀâ°nKgCÉ:®2%LÆaË¡Zo»¦TA±ÿo2ŠoöìTŠg=tÁÀÛº°çG–à @ÖÄÀQZˆ*¤ª€hìy'QÄœ]¿<@Y9›UYݤ3~ÿÜtÁ¶ƒ¿+ȸ>u+Ò$ v¾p8(ÝøeŽ‘5u柟ÂçÊgQL¡èºC×}¶“;(Ûü-Ö”ß=2:{ƒ*$ãÿEñ w+W4zÔ† Š%îËÏ.;òÝÇ?/¦‚É š¯‚:B>…3ãÀv¢òõÎ9mQU“¬NÑ‚ºIùko8w]9 ªžØ^á8ž[ßÛ<² 6´üü|þýï3yòdŠŠŠøüóϬ½øøx¾úê+"#Ý'ýõññq ¶óæø{D„ó³ //3gj7æü\¨*íüeáááU®çmÇ—¡EDDx%@ù\ÿ»uëÆ¡Cþ¬ ôJ€ò¥|œ«r9ö¹>þ¬û{útùwÍŠ™s/åý5Ÿ}æC¯wŸ˜$4ÔùÙ”ž^³ÉõÏ·råJxà^{í5ÂÃÃyðÁyðÁÙ²e _~ù% .¼èŸQÕù+¾_Ùív~ýõWÆǰaÃxýõ×]ç¤Oçs•«W¯öZ{õUßsT×ï µ{A!„B!„h—U€rp`€+8ùLVŸOŸIAaÍG}MFb›84ô9ªÊ¹]·Z¬Õ¯x™ÑªT®×3¯+À«=:fð¡ÔfcÊ®¬œÄöƒØ²ö8ï¿°›µæuU|þË›°4–úg!„B!„B!ª³Ö¼š¥Ûi§ï@Ÿ^nÊ*ÎŽÁaÃê¸ðœÝש 5ŸØú…·Bß%\A©£”r?d™y)Y¶3èM4My7l"êÈJë:Õý·ÝÓ¶tÞÎyÓcÐ`u0·øÝ ÀŽÒ {×…* ¦BpòQЏGQí­kžz¶Íh4 ƒp˜s(Û8 }ÿGÑ´@ÙŽY(Æ`–·¬´®ßmv°×`=óÀ…ûUc †o9ƒ“­¥”®úëÁß±e¡¨u(M0^÷Š_„GM‡õìïªÆÈ³d äBл  †à!ën¨l.ëÙÀeu$(Fpx?¶¾RåãhîqʨT*îºë.×ß&“‰‡~˜ &x½-EQøè£ˆŒŒ¤¤¤„wÞy‡… ’™™‰^¯'66–O?ý”¨¨(¯· u{¡¶u+®WñµªcâÕzÿ¹—sûk³ÙjôìNçÏýúçÆr)_ ár_Êç·ª>+·Xjÿýùœ%K–°bÅ †Θ1cèܹ³ë¿ƒòØc±wïÞ:oß›þªïW?ýôãÆ#44”Þ½{³råJ|||èÚµ++V¬ðj{õQŸsTŸï µ{A!„B!„h—M€²^¯ãöÑ#ñ÷3‘“ÇgÓgÕ*8 9±%Š¢`±ZI9|´zê=‹•ßæ-å·yK‰ŒŽ`ø C}ûõ4‹kʇŸ¿Å×?À™Ìòâì3Î9?_ýÉËÍo¬®³{Ç>Ìf3Õd¿8“™E«¤8"c<@ωˆ*Ÿ0;ËsÔñç™ è;¨'-[5'®Us§¤2t䕬Z¶ž¬LÏ٠ϵûû¢•¼úôÛ5Ý-¯ª„V“X¨VI-iÞ2€ÿ¼ü‹ç/w-³X¬¤ì;DQQÝG\#"«?Λ7®º8rÐùÞIr»D¢¢#øé»_Xºp%<1ŽþWöfÓ†m(ŠÂÑÃǰW8 }ŽªR“cu9 ­9»BÆûVþ4÷÷àíÍ»X’V>“¨Ån'%7Ÿ"ë…0±Øí,ŠìEPIÌf–Í™YÓOåO *\{nÝv 7ùŽF… ;6–›—zm»ç(:†ëßw'çoÐàdûg4Å?uT[TþÑX¶ý€eÿ"ôýA“0kÚÆÿgï¾££ªºÿîô™ÔI „@© HQŠ¢¢‚ ¢¢¾¶×ö^PÑÏŽW¬ ÒDQQÀ :!ÒûÔïHÈ0IH™Ê~Öb­áÞsîÙ·fÖœ»ÏEÁ‘»ßedIGÉQTtÀºs%åKjX»M¨[ýàF*V=ñòÙ¨c0Ž|–²¥*l;VÔ£²ëö%X·/AåÛ m—1hÏ›ˆ*0Ó„w(ùäJœÅu÷«×—:´ªÀÊë¹|ÅSXS~¨Zç´[qfíÄi)©ñ§fgA„%  ŽóH,MQñ;äÏó  ‰‚€W g8Oȱ›V†~P¶òÔÄwìºRüjæ¨|'À8K6 ï©p¬ï¡¡·ÞqÇôéÓ‡ÒÒR¾ÿþ{&L˜À´iÓøùçŸÙ°aƒGcìÔ©±±±Ì˜1ƒo¿ý¶jÕjeûöí{´M€ììÊûÑÏϳÙL^^ýßEÈÊÊ¢S§NDDDÔZ¦U«ã×ͱ¶, ‡•J…O#"¯Û±™¡rrjÞ7$9îØþ.]º”»îº«Iñ5DSŽsK9® ‡ãøßÖæ´ùL¾ÞŒ3ĥ̖MÛÊ‘‡Ü䘛âÍ—ßçÞ[á·_þ¬³Ü?›+cn×¾mÕŒµ'º``oÊËÊÙ½cŸÛú ë7r8½ríK/JHX0½úžÀ7 ¾¯³Ý½“Ðë=;2{}•——W}öòö:iù€@ÿªÏ»Oœ=ÛúèYW-ÇùTóĵÑû÷¦Ð*"”¡#°rɲ2³Ùúw ]’:Ñ£wûö¤ºÔmîsT›cǪcB{‚C›¼½¦>¯<¥ï¿ èv§“}Õf»5ôUŸ÷xh †Ì’2>ض›[~\ÍáÄG§ex›Èf­{aD(WÅE×™ ’[ù2S¬¿o£’”sþMnëãÝ zÿü;èEŒŸ¡¦šcì÷ï½Yn³³§ æsQ^-¡³>IÒÇÚ=/$½Ú3#ô7åü6·[\;&ÜØ­^ƒVœ¨¢üøè±Á¦¦†UoeÕfé mØuÖPJµ„`«ÕΦ_ñö3ë¸ûªoÈÍ>ž<›Ô§yÎoq¡kR{Hø©é n©ó 0l\GÞ_vo~=žç>EpXóžc!„B!„BqfˆÒ´ ÀQà²<¹âozz£WônõšË±v;éV×ܯT›õñ¾•– ªûwÅf r€ÎK¼F5¨n]Úic¹Î÷zV•®ä°í°Ç¶}Œá♨cp–åSöÕÍž@iÏ©ì;SùµB Ö”pÁž±u«®hÚTöWKf®ª›^9 ©¦MOÐ4ìºjJÝ9 Ò)]p#öŒ- ¨0Žx M\Ãúå…Tüú6¥ó&ƒÃ†bðE›à¹kG1T}¶g5lffÛ?PùG¢‰豘«üg(ü¿ÊÏÚÎà3ݽŒe+Øÿ½=¼&qÊÞ€9v]©ƒb]‘«Ó´€ÓZÖàsq*”•U¢ëí]ÿßý{÷îÍí·ßÀÌ™3y衇øý÷ßQ©T¼ôÒKO¬ ªú¼}ûvn».ýõPùîÍå—_Þ º7n cÇŽµ&: Rù®Oii©Û~eeeT%YyÒ A•ï?Øívvì¨ýï]EEe˜Étò>©cûÛ¯_? ††÷e7VSsK8®c÷=Ð쉰gâ9ª‹.ºpùt8¿ u,æÄÄD— šâСCÌž=›±cÇb³ÙðóócܸqÙvmž{î9¦L™ÂO?ýTg9O?¯ÚnKÞ Ÿ~ú)Ç'((ˆ¡C‡°zõj—÷[ZSÎQS¾3œ-÷‚B!„BђΈåÈVa$&TŽÒûåw+ÉÉkøÈÓŠ¢QÙ1”vÈó¸u™8e<ÏÌ~˜é÷ÞÀûŸ½†Ÿ¿oå5šÚ¸öï=@Έzþf×íìØ¶«*Ió¦Û¯#1)¡‰‘7¿K~Än·£V«™:ýZ·õÑíÚ0lÔ Ë®ÁV쨇“o¿¬ùyÄè!L¼~*µŠû²iCͳoþðÝjl6þf?îšq+j%Á5Ä‘Ìã#öìÛý¤åssŽ_÷ñ žµ:!±#£Ç `ù÷?ÖxœO5O\‘¶ÿ 6›ÐV¡\|É@ÒfkrJU;Š¢pÍÔñìÛêR·9ÏQ]ª«{¾­I×sCŸWž QÜÿ…yÚ¦r„ÐõY”Û'çåU›©·£Ù¯áíÕ1ãéþÂbŠ,• —~5 ^ДºÕ]Ý!†§ûtçÖÄŽÌÔ_¶Ö²?¬ü›¥V&Ç»wF©¥Î„Öc Î"Ã0hêm¬LËÀît¢V¦&´w[íëÍШˆª²6GÍ#ig•ïä!˜«nîŽ9È3 µjŠ7¿Ï÷õ!©o$æ Z­ƒQƒ9Ø„Ív<¾¹f6.È-£´ZRö QíéÚ+‚à0o:&†pµ÷·º–:¿ÁáÞLºã|´ÚÊgG›X3§Ÿçñv„B!„B!Ä™e€ñ"âtØXî:Xñ’’ï°9m˜Ufî3Ï@]Ó´ÃÍ`YéìØQ£æÁ€‡Ôn®ýø,’ ºÎ jw»e»,;¸Åÿ6ºé“T¿&½ }x;ô} Š\{³óf5y›'R‡% é8 €òÇ‘ÐãmœÈ‘› *ßp´ñÃqäªLô¬)Ë@QÐõ¼¾²ìÑ=.u­Û¿¯Læ5š1 ºTõ?¿M©[gy!¥_ÜŠýÐfP©1^ò4êˆn5VÕÞïïÈÙ‡³¼rðWÅè_k¹ÇWš[õYÖ©Au­)˪Õ #ž@Ûy4ŠW ŠÞuxôÝ ªÚû´šCÉüÊDe¯k@ß넎Ê2ÚŽà{7Ô8=´‡ÙR–‚Ã*5º¾7»­WÆ ítÉ¿e—£åûßOtlÆÇÐÐP‚ƒƒOZÞßߟٳg£R©X¸p!ß}÷‡ƒû￟’’"""xôÑG=ãÑ£ÇNHLLôè¶ë²eË–ªä¦»ï¾›=zÔ»î¢E‹ªúîkšý±}ûöUIÏ‹/v{Ï!9¹ò—áÇ×+A¸&Z­û}YÕîêÕ«]UO”™Y9A@xx8áá5'àóõ×_c³Ùà±Ç;eïÞ4õ8·„ÓáÚ¨>Óë…^بmÔ×™xŽN&))‰«®º pùt8¿ U=æ'Ÿ|²Á÷o]ï7îÞ½›üüÊwUÌfs“âô”sùyµtéRrrrÐjµLœ8‘‹/¾€%K–x¼­¦hÊ9jÊw†sí^B!„B!šÃɧ2< ôÌÌ IDATïS™‘–~˜‡20jÙØétRQa©q]p ¹j¦ÜC™Íh-PõÙÏìËy½ºòãò_j-ÿò;Oc³YYýÃZvlÝEnN>†°V!Œ¾b•?VlÿÇu”]§Óɬ'_çõ^À`4ðú‡/ð㊵¬ÿy‡Ó`·Û1y™ˆ‰mƒ€ï½>·yv¸ŽÎfÁ'_sÍÔ+1zF“‘ï¾üâ¢b:wgÒ´«Ðh4ññ;ókÝÎw_ýÀõ·LÄÇ×›qGðŧ‹k-Ÿ}ä(ŸÌYÀ Ó¯eäØa$ŸÈ¢Ï—p`ÿ!ræ¢ÓëoJ×ó:óÊ3oa¯–é)iû’—›9ÀŸ[Z­fï®ý(ŠBÛ˜(ZGGðö+V•ß³s/™Y„µ á?܌ޠgÓ†d ò Ñjµøøa0ž|ôÀ íéz^gŠ Šðñó¡÷=Í´:-ùy|TÇq>•V‡“fGnyhT ¡&#£c¢ªfhÞ‘ë>FSêV7¸õñŽ\?½ŽóB‚XSËà©…ŬLËàâ¨VŒŒn·VË’ÔC[¬ÄøùpY»(Luüؽ,5þaôÌîß“ÿ¥ìåpI):µš“U- ÀGJËX¸k?;Ä0¼MFšï÷¤Øj#!ПIñ±hT …+§ì©qiE%äUX0ëuÜÒ¥j•ÂÞü"ÚúzÓÚÛ‹wþÙYU>»¬œ¹){˜šÐžK£#éÀâ}i¤“[nA§Ræe¤kP³7oÃîtMŒöÔ9:U¬;ï¾°žûŸT5;p|·Pâ»Õ<*kò† îËs[¾}s&ÝûŸ5xÂMIL¸ÉõE¸£™%ìß™sbÕ&q:œl\—F¿‹cðõ7ðÀ‹®³E¤ü}„¼£¥5Uoȶ~ø4ª=ƒF¹'ÍW÷Ï_u®o,§6®;Ä…ÃþÝ_³f¹îïví¯Ë6[èü†GúºÌZ ÙüW!„B!„Bˆ–¥ 0/üs~-[GrÅ&²íÙØœ6‚ÔÁô6ôa‚OebF®=—¯‹¿t©›e?Â…s¸Ùo:c¼/ç³§AeÄGU9ÛŸÍi£Ìy<¹*Óv˜ÿ~Ìõ¾7Ðß8÷Ã>aAá<Òli¨Qª C­ÔÜw°Ë²“öÄk¹Ç|?ÅÀŸÈ·ç£S´ø«0(Æë:qòlú!FÅÈ»¡°²tëÊÖ’nKÇî´á¥ò¦6³ÚÌÛùo¸Ô7*F|U~„k‰×%0Ät1‰únUÇ÷¿Gïâ¨Ýó3ëzNÀž±{z2о–Yœ–’š×5”ÝŠýè^Ô!PÔZ,›>«ZeÛ¹.º·jö_û‘×0в¨øýô}oFÛe êÖçaMþGn*Î’ÐèPù¶B™Dùê*G=P·V¶ ÊÝéÊ9¨‚ã0Žy™Òù×»%z›Æ¿ÓnŶs%öÌm8KrA­©LÒN{|3·6ö¨º±gíÂQx•oxeB±Æ€ýàŸ8ËòA­C1šA[K¥­‚²ïgbû(:/ Ã<›lÚXO€îsPߣ=ªÝþ”|†A K¯«@Û¾r™m?à]OÏÇä(ÌÄò×§èzNF›0EgºåœE¨ÃÑõ¾Tœå…Tüö¾çð€?ÿ¬`BQÞzë-^ýu***ˆŽŽ&22’—^zÉ¥üOÿüs>þøcRSSQ«Õ„‡‡×Ùî'Ÿ|‚ÅbaÉ’%lÙ²…£G¢ÕjiÕª'N¬šÑöXòuK;—ŸW‹…¹sçr÷ÝwsË-· ×ëÉÏÏççŸn–ö«)ç¨)ßε{A!„B!„hgD‚rÛÖ•³hFE„óȽ·ÔZ®¸¤”ç^}¯ÆuÁAUŸsr <àId9J\ÇvUÿÏʬ½Y¥RÑ)±ƒžž}kŸ¡îןÿ`ÍŠµnËS¶îä¾éòès÷È2b [¹’â’ªe£ÉˆºžÉ‹Õ••–{äǸ÷^ŸKphC/½ˆCú1pH?—õE…Å>ªöÙpm4ÆÎm»‰ë؇ÃÉÕ®£Â‚"Ö®^Ïàáýq:ì:!)ÓSç¨1>xó˜ü9vºtà±hÔvò¼ò­JÅeí¢¸¬]”Ër»ÓÉóma￳Æãp:yfC2/\Ðo­–{0[¼JQˆðÇ VÓ³ŽÙ|×ÎbÍ!×Á,šR÷DÙeå´¯6;uV#T¼²ia^FºšÆÀȰ:ËŸÏ’ý‡¸4:’Nþ<ׯþ³Ÿ¾¿uÁFGµb@D"\Û-²X™ñëFŽ–•׺ ‡ÓÉû[wqßyñÓëøow×Ù' -V—e€¹){ЩULìC„·‰é‰kÜöÂ]û9X|üÅ(Ož£S)ù÷t^𱆛gôÅ׿îA ÚÄškLPþñûÝ\|yB#jy‰ ˆhÓðÇëã‹’éÚ+oßš‰hëGòéMn§U=ãß‘|„% ¶7¹½Ú|ùáßtíÕªÖså©ý­®¥Îï=¹X*ìèôÇ;Ûö¦4ÿß!„B!„BѲÚj£i¯£½6˜Zc™,{ÿ;‹"G‘Ûº æ WôLòB¤¦5wúß[ã6>-œKší€Ûò¥«0ÖüTà³UŸ×•­åîl×¾µwòßÄ_eæ2ï±tÖuáé ú%Ø8pðXÎL^ ~•ãÆ#11‘'žx‚¡C‡zä}‡ÃÁ½÷ÞË|€¯¯/O>ùd“·Y_ÉÉÉL:•Ù³gʨQ£5j”[¹¢¢"—e€—_~™°°0ÆŒÃðáÃ>|¸Ëú‚‚nºé&ŽqÆÿøã|þùçL˜0¤¤$æÌ™ÓàØµZ-×^{-×^{­Ër»ÝÎý÷ßÏŽîÏØêvîÜɪU«2d½{÷¦wïÞUëòòò\”Þxã ôz=7ß|3QQQ̘1£Æí~ðÁìß¿¿ÁûS›¦ç–ÒÒ׆Ãáà•W^á™gžÁl6óÌ3ϸ¬ÏËËóX‚2œ™ç蘚â…ÊYZo¼ñF²²ÜŸí-}~cöìÙpå•WÒ­[7^}õÕzÕS«ÕtíÚ£ÑHÿþýk-·zõj–.]ê©p›ì\~^Í;—iÓ¦áååTÎÖl±Ô<PKjì9jêw†sí^B!„B!<íŒHP6šš>â©¿_eB‡Óé$¿Ð½£¼9½õò„„Ó*2ŒÅ_.ekrJ­eN'Üþý÷£s×xƒÌøøát8ÉÍÉcÏ®ýüøÃZV-û ‡£æN¿ÍnáêQ7qɘ!ô؋ظ|ý}°Z¬³oÿµZÝnçå·Ÿ¢KR§ï×ÝÓfò×ï7¸Þ‰ìv;O͘ÅÚUë}Åâ;Ça0èÉ<œÅ¯?ýÁü¾$¯3].üß7Œ¾âT*…¯>ûK-³iãt:™ó³jÙO\>áR’z&„N¯£¸°„û²éÏ-äVÕñô±úî«(È/dìÕ£hß!oo/ÊÊÊØ³s?kW¯GQœÕfMÞ´•IcoaüÄ1tï™Hph¾~>”–”Q_HîÑ<ÒR±aýF·¶ÞzåCzôîFt»6‡a4¨¨¨àPÚaÖ­ùÏ?]Dq‘ëèg˵ÑP;¶ífÔ¸áü±îO23\;±”ÁÃûs(-ƒ’b÷2›rŽšÂn·óÂ㯱ú‡Ÿ¹lÂ¥tƒ‚üBÒ&åŸ]üñë_un§!Ï+OY~ JERp~zþÎÎeÞŽ½ì)¨ùy½åhׯXǸØ6$l2à«ÓRjµQh±’[^Á¢b6œ`ít:ypÝFúG„’èO Á€¿^‡'¹åì-(âǃ‡Y}ð0ŽfæmJݽµe!Fá^&¾Ý—ƶœº¯ãR›;úƒ±±mA”Š{ ŠX~ ۻƣUÕ>˜À¬ÿ|4—‘Ñ­‰ñóƤÑ`u8(¨°’QRÊ®¼þ<âžthw:yzC2kÓ3EG³šÌ’2ÖÎâ³ûÈ;ɳàûý)°XÛ® ±þ¾xk5”Ùìì)(ä—ô#(¸¾ÆâÞÛº‹Õ3&&Šî!èÔ*Š-VÒŠJØ”CÁ %ž~z*Êmdg³ms&®­ýe®ä?Ò™Øn½Úùmu*9GJèuQ[:v %¤•7F“›ÕAA^vçòûšüöc*ÎZ¾#yBöáb™¶”±S*µŸÙ@I±…ìÃÅüóça64ÃqnêùmÈq®® ¯œ×û™koë9ÈDòé,xwSSvE!„B!„BœÒmé<’3ƒ>†~tÔu"L†EÎ"öZö°®ìg—|C±£¸ÆúNœ¼™ÿ,/YÆ8Ÿ ôПOˆ&½¢§ÈQHª5•¿Êÿ$ßáÙ>;vžÉ}‚•¥Ëï=.úDÌêìN;ŽÙ²­b+¿•ÿêVwsÅ&®ÌÇ•Þéa8Ÿu(~j?J%8òɱçjÝÏïåëkl{cù_ŒËÅHï1\h@œ6?•?,9 Ùg݈ò?P£v™5ºÄYL‘£èß㲟¿+6ócÙ*XS=zlN¤ý›uûµ±IAËåØö¯ÇQxØe%ù+4†âÈ?XˬÍN*Ö½‰uÇrtÝÆ£nÝÅ'E­ÇYQ„#7ûÁ¿*g öhÝÚ9‹³(_þÆË^A‹¾ß-Tüüï̤N'eßÜ…¦ý Ô­º ò B1™ÁéÀQ’‹#{¶+±îXNGƒÚ=û¡Í”~r%Ú¤«P·îÊ'Åà‡ÓR‚³¼gIŽÜTl©¿ÕXß‘³²Å÷‚Z‡Ê+§Ó޳8m§ÊÃDZO‘²Àt9èºWÎ’\ü)8«]&ÎRȽ£r&e㥠ë*38-`ÏëN°ü5Œ‰Ðx;åKÁ¶{ Úı¨Ã:¡h 8 3±í]‹åϹ8KsO¾ôÀššÊèÑ£‰ˆˆ ¼¼œÝ»w³bÅŠªw4 =T9pÃ_|ÁæÍ›Ý¶ãp8xþùç™?>mÛ¶åꫯæÓO?õHŒþù'ÇgòäÉôéÓ‡°°0üýý)..&??ŸììlöîÝËÚµîü7ÕüÁ!C7nƒ ">>³ÙŒÅb¡  €Ý»wó믿V½{sŒÝnçž{îaùòå\}õÕ$&&b4IOOgõêÕÌ™3‡œœÚaŸ9s&6làÊ+¯¤C‡x{{c±XÈËËãÀlÛ¶_~ù¥Öú_ý5:Ž^½z@nn.6làí·ß&%¥~ýÿwÝuwÜq#FŒ <<œòòrvíÚÅÊ•+ÝÞcq:¼ôÒK|÷Ýw\sÍ5ôîÝ›ððpôz=………ìÝ»—ßÿ¼<÷A˜›¢©Ç¹%´ôµ°`Árss™4iñññøøøPZZJJJŠË½:ìoKxþùçéׯqqq„……a4©¨¨ 55•U«VñÑGQXXXcÝÓáü6”ÝngæÌ™,Y²„k®¹†¤¤$±Ûíäåå‘––Frr²Û3Öáppã72lØ0ºwïNpp08Ž=JJJ K–,á»ï¾Ãáðì÷œ¦8—ŸW………ÌŸ?Ÿ›nº €… 6k{Õ”sÔ”ï çÚ½ „B!„Bxšòï??þ¸²mÛ6%;;[)**Rbbb”ììl•N§S—””¨‡Öd2i­V«0¨T*/§Óéãt:Ík×®]ü×_Çàzôèq w§åÅÆÆ¶t öÖ'/µhê™ä\;VçÚþŠSk阋ñÒj˜³u'óvìképÎh«ÆC«RñFr _ìNmépÎxó‡ ÂÛÄ+›¶±x_ýfJB4ŸE#a6èyfC2+Ò2Z:!„B!„Bˆ³Â‚ j\~®õí !êOЯ)_P¶èl{=Ÿ*„h¼¿ÿþfÍšÅ;ï¼ÓÒá!„8Í\sÍ5<ùä“lÞ¼™ñãÇ·t8B!„B!„8EjÊóíß¿ÿEQòE)r8%@¹V«µ”––ZU*•ÕËËËa±XìÁÁÁŽ}ûö9}||œÁÁÁ΄„çã?î6Âá1ƒ²h^Ó'ÿ·¥C8cœkÇê\Û_!„B!„B!„B!„î´Ý®¨üàt`?¼µeƒB!„õÄwÜÀ»ï¾ÛÂÑ!„B!„âl# ÊB!„B!„B!„B!„ç8ã¨pä¥aÏHÆQœÖrŸ0´F M€m×*œ¥¹-©B!„¨M\\eeeX­V:wîÌ}÷ÝGpp0ëÖ­cåÊ•-žB!„B!Î2’ ,„BQƒ›»t`J§X—e“VüB¡ÅÚB qö»©s—¶tYæ§×µP4B!„B!„BqQ©ÑÄ\}­EìGvP¾êùS”B!„h¨3fп—e{öìáž{îi¡ˆ„B!„Bq6“åÓÈ/[–¶H»&^Ò"í !„§3/­/­ëW%EQ<¶ýùk'yl[g‚‰ýç¶tâ à¥Õ`6Ôþò›B!„B!„Bˆf¢ÒPñÛ{h¢z¢øG¢˜üQÔ:œå…سvbÛµëö%`—\…B!Ngeee`2™HOOgùòå¼ùæ›”””´thB!„B!„8 I‚òiD……ç’K¯léÎC¾^ÞÒ!œU&þðó©iGv…póêæí¼ºy{K‡!„B!„B!„ç[– cÙðqKG"„h„nݺµtB!NÓ§Ooé„B!„BqQµtB!„B!„B!„B!„B!„B!„B!„Bˆ3‡$( !„B!„B!„B!„B!„B!„B!„B!êM”…B!„B!„B!„B!„B!„B!„B!„õ¦ié„g>?_Úŵ%7'ŸÔ½i-N“ùùûÓ¾-ù…ìÛÚÒáÔË¥—%.>–Íná§•ëZ:œw¶]“BœîœÎ–ŽBÔÄä­C¥R(.¬héPN{^>:JŠ,Þ†Ü B!„B!„Bœ]´G£íˆíàFl»V·t8Bˆ˜Íf:tèÀÑ£GÙ³gOK‡Ó¢BCC«ŽÅöíÛ[:!„¨•<¯„B!„B!Î.’ ,Ä(¾s½ðF“ç{ßÖnhÑx¾Yõ?´:-¯¿8ç¬H]¸ô¼¼½x÷µÏ˜å;î» /o/²méPN gÛ5)Dsš?|Þ¦×þn5u'kÆt dê=½yûÙu¤§4Gˆ-ê£ÑjþÊüÎs¿²vÙÞSÑÉ™ƒLÜtZÇøâÅ{/þÆšïw7x;CÆÄ1~j7' ÞÝÄÚ¾¯‰=[qÑÈö´OÆÏl ¢ÂFAn9™‡ Iþ#ƒŸ—î¡¢ÜÖàízJP˜7ÜÛ›Ö1f‚M¼õô:Ö­Ø×¨m5æ^¸+©—·kSãºg6$³"-£Q±!„B!„Bœ-¢4m˜âw º.„j°9­¶&ŲßÊåÇÒU-¢8ËéÞƒ¢÷ÆQ”ÕÒ¡qZHLLäµ×^Ãd2ñàƒ²fÍš:ËO™2…‡~ØmùîÝ»>|x“ãY¿~=:ާŸ~ú´KPnè±jªåË—ãããìY³Îˆ„¿æ¾6Ĺ©)ו\“§Î™ö¼B!„B!„uSµtBˆ†›:ýZ"Z‡hæ¶{nhép„BT£RZy›P)JK‡Ò å6;…«Ë?çI¦‚UkTL{ /1yöý‘ ϶Ûg%oÝzGâÕèm†x1åî^øš ø¹éþ>øú´ëïîŃ/ ¡×À6›PkT˜¼t„·ö%©O$×ßÕ_söéi¾þºöŠ ¸æ$ýújì½PVÓ}פH„B!„B!Î]ô]™þ9#½Æ­Á¤˜ðUùÑAב˼Ç2ÍïÖ–Q!Î9wÝuQQQñàƒ¶t8§µ¦+•JETT*•¼Ú%„8½ÉóJ!„B!„âÜvÆÌ H¯î]ˆi‰Ùì‡Ãá 7¯€{öóë›)-+¯÷¶¢ÛDÒ16š¶QøúxS\R›|ÖŒÑ áYv»½ê³­Úg!„-«ghOõíŽA­fø¢”ÙΜgô[[v°x_Ãf?ÿÂ(¢Ú™ÐêÔLúÏùtëÁ»Ï­'ïhis„ Àðññ´O&¢­YE¼òÐOÍÖVy©µê³¢(èôêfkëtb2¢¨Žgت5*üæ×ï;wŸÁmzy‡:Ëä–‘}¸Ømù©<¿žÒØ{áÝvòî?;]–-9³A߬ñ !„B!„BÔ¥6–á_Õ»ü5™Øe9þ‡ L1Ì4‚D}7Ì*3glX[ö ŠæQìpÿ]èD<ŽA1Pâ(æÍ‚×ù³üìN;!šÚkãµoµñTÌž2Þ{<À3¹O°¨øk·¡ ŒA×m<êÖ=PùEàtØpæ¶ÿW,çá,+ðx›BÔDÓ‚ÿ½ÄsnËßîe¼oŸi€rÿ¿×¼-m<˜Æþ|P³ì™`Ù%_ýP³íÆ)Ñ¿ÿª¤W___Ôj5%%%äää‘‘Áºuëøì³ÏÈÏÏo¶l6[Õg{=ÞU˜7o_}uüoÊÝwßͤI“š%¶ÓMCUuýû÷ç­·ÞÂh4Ò¥KJK›¯ß­¥œË׆h>M¹®äšlœsáyu¢øøx&NœH¿~ý Ãn·³ÿ~Ö®]Ë‚ 8tÈõ ǤI“xì±ÇêÜf^^=zôhΰ…B!„B!šÍiŸ ¬( C/ê˽Ïs›‰0<4˜ðÐ`’ºtbÎ'Ÿ“_XTç¶ZG„qéÅhæ²\«97MÄÙãý7þGphƒž×_œÓÒá!„ø—I«Á >w¾Wü¾&•¬ÃE\v]λ EÄó[1xt_~XÃD2l\GB#|ÈÏ)k¶vn½ì‹ªÏmbxîÑÍÚÞ?˜ IDATé"moY‡‹ ÷ ã@éêÿBâE—¶wùÿü·6²nå>pB@ˆ­cü1š´5Ö=•ç×SZê^B!„B!„8Í žMã@—eEC¼®ñºNŒòÃG&“mÏ®uí´±Dkcx%ß/ªZwÐ–ÆÆò¿N»˜=e¸×¥Ü0³ùPTè/¸ Ýù×r|–;=JHt!ÐvIé‚©8 3›/!êI—>7V~.YXKr²¾w‚×Õ@µÉ¨|A¦±päbpZNEÔÍ£]»vtíÚÕe™——^^^DEEÑ»wo¦L™Â”)Sضm[³Ä0{ölÂÂÂ0<ýôÓ'-o±X°X,.ÿ?W4ôXUçåå…Ñhl¦ÈNçòµ!šOS®+¹&ç\x^£( ÿýï™6mšÛlÑ $$$0uêTzõêEQQÝï± !„B!„BœMNûe_úôè†JQص7•M[RÈÉÍÇÛËHÏî‰ÄÇÅàçëÍÈaùô‹ïjÝÎy]3â"Ôj59¹ù$oÛɃäæPQ!?(Š3Ëžû¸aÂ-†BÁ¾9¼òÐO´ŽögÌu]ˆŒögñÿþié°DY*ì¯+[Ûô: OÄì ÝôI<ðNœ8p Æóbª|ÂÐ&] Š ÛþõX·}3? Å€¶ë84±P|BкŸ²E÷x¼}!BæçXw@Ñë5—ó»Lã+?[·Añ§•åhÀë*°¥ÙÉÉÕ3`ÀF£‘V­Z1zôh®»î:yå•W6lX³´’’ÂèÑ£›eÛg9VBqvyôÑG«fÕÞ¾};sçÎ%%%•JE§N9r$Š¢¸%'öÙg,Zt|À¥_~ùooo^zé%æÍ›€ÃQÿ¾x!„B!„BˆÓÍiŸ œWPÈ¢¥«)¯¨`Çn×Îí]{0éÊÑtˆ¦Cl[tZ-«ÕmqíÚrù¥ƒq8|·ü'þظ§ÓyªvA!„â¬wp>o<ù jµ‚Ý.ß³j¢¨4šÊ‘”N'6ëéÝÉXWÎâO—`ëå­«úœs¤ÄS!ÕKKg¹„B!„Bq¦³9m¶eÔºþ:ßëé ëˆÅYÁCGÀrBÆßÊÒå¬,]Ž“ã¿ì±îæ·ò_Ñidâ6[ñ‰ôŠ¡ês¹£¼q;Òžˆ¹©Ô<4 ­¢å…Üg¹Å:~*ÿ“Wl Ga+ŸÅYQ„mß/.ël©ë1^þ*š˜ ÐD÷CÑqZË<ƒõ¢óó  G!äÝ_s‚±þ‚ãÉÉeK ÿI Ú϶4([Š×)‰ú”p:äççPXXÈ‘#Gؼy3ééé̘1ƒØØXÚ¶mKjjjË*„Bœ%X•œüõ×_óàƒb·Û«ÖoÙ²… `2™ÜêZ­V¬ÕÞi=öÞjyy9………͹B!„B!Dó;í”þÞº£ÖuÉÛvÑ!6•J…¯¯7Gsò\Öëu:®3 EQøêûU$×±­æÕŠ'f=HDëp¾Y¸„w_ûø¤uŒ&#ã'Žæ‚‹zÓºM&/#¥%eä’q(“M’™÷áµÖ×ëu ¹d ýõ¥}|;üÍ~جV ò‹Ø³këÞÀw_ýà‘ý»ø’ 9ˆØ¸h|ý|È8”É/k~gÕÒ5L™~-=ût¯œyoÅ/¼>ë=ÊJkîÄî?¸/c®¸„Ž í1ôdÎâןþ೿"/7ߥ¬V«aÉ/ 1šŒ,[¼’g™]ã6 =K~YˆN¯ãÝ×>æÓ>w+ß¹W\;†n=ºàoö£¨°ˆ6ogÁܯÙúwJÓпÆ\q ÿ}ävHg⨛ê,Û£w7fÏy–£Y9\>ä:&\{wÜ?Í­ìþ½˜tù­'mäØa$$v¤]\4AÁøøù V©È:r”?ÛÌü¾äpzf­õ5 ã&ŽbèÈADµ‰E!mÿAV,YŠrÒör~›z¬<¥Mtkf>}=z'að£0¿ˆM&3ïÃ/Ù³s_­õ¦Þz =z'ˆŸŸ/Z–üÜ|þù;…/>]ÄÖ亯+Oß¿~þ¾¼5÷%¢ÚF’º7['ÝKqQ‰ÇŽsSö7 ÈLï z˜”@»¸hÂZ…àåí…¢@yY‡Ó°tñ ¾œ÷­[ݦ^“иçscŒnMRp1~>„˜ 5ÊmvÒ‹Kù%#“¯ö Äj«µþ”Ní9/4`ƒ_½­JE~……­9y|±;•m9ùµÖ5jÔŒ‹mK¿V!´öö¤ÕPjµQh±’QRʦ¬æ×rM7¥î1‘Þ^<Ö«Þ&íMcÎÖõ:fÝ‚Eb½»ÓA^……´¢¶åä±"-ƒŒâÒªò:µŠ•—WŽÿä³úàa·m®; ­JÅÉ)|±;µÆv/ŒeLLÌ~Ôj2KËX8‹;÷‘WáþæK´¯½Àmù— u[¶1+‡{Ön¨±Ýø?ÆÇ¶¥[p~zÅ+ÿää±pW*[Oø~S'Α'Õ7!S£UÑwH4çõkMt\ >þzE¡0¯œ¬ÃElÙÁßí¦¸°€VLDopÿêšØ³ó×Nr[þñ«Xñµë÷¾àpoºöŠ óyaD´ñÃ?È„Á A­QQ^f#'«„´=y,|o3YEnÛlªÄó[ñÀ¬ÁìÙ~”GoYzÒ::½šÁ£ãèqa‘Ñþ˜¼µ”—Ù(Ê/'ûp Û7g²ü«ÊËj~ Ǩ‰ †zQVbeoÊQ–}žÂÖî÷HmÇàç~eí²½µ¶S[Ý ‡·ãÂáíÜ–?zë2ölË®³nCÎoUFçcz\Øš‹F¶§uŒ?:½†ìÃE¬_Ê÷ŸmÃj±Ÿ|ÕHr²B!„B!ÎFašp¦ùUöK}Pði¶neª'ùžhKÅß 2 A¯P¡ÂQ-‹°6–á_¹Õù¹õonËÞÌ ?t[>ÍïVzz¬Á_å‡VÑ‘çÈ%¹âo>+šÇ?É5ÆÕؘ«Ó+z†y` q0t1«ÌX±R`/`·u'¿”­eQ±ûþAå¬ÔO>G:˜ÿ~Ì—Å ¹Åz­15•5¥ößÌl;–£‰¹TjŸœ¹î縡´‰c1\<G^%Ž­³¬ºMOLãßÂYœMñ»î3y«ÃÐv¿Mëî(F3Ί"ìécùëSì[êÞvêÖD1úaºêCTmpäì£ô³pV¸þ¶¬hMh»_…¦]Tæ(NK ÎòùéØþ‰eÃ' nûdô}§¡Žê…âŒbðCQëp–æaÏHƲ鳓쯂¶ãP4 £P‡vD1øâ´Uà,ÍÑ›Š#s+ÖíËpäôxÜÕù?º®€ò»ûOÚøüÛ…n;Ï@-·(ÎfKSÓþ"´‰ãP‡uBÑèqfbÛ·ËŸÿÃYšÛ<Öbíڵ̘1ƒÁà²N¯×³}ûvî¼óN¾ÿþ{·ú)))èt:ž~úi>ú裪åS¦Láá‡v+¿{÷n†îÉ]¨‘F£aòäÉŒ3†èèhEaß¾},^¼¥žýÂõuõÕWóôÓO³ÿ~† RgÙ~ýú1wî\Ž9Bß¾}¦«¸¸8–-[æ¶üŸÜ“]¿~=×]WóûƒfÈ!ÄÄÄ`4ÉÊÊâ—_~áí·ß&==½ÎšÂ`00jÔ(†J§N Äjµ’——GJJ kÖ¬aÁ‚móÎ;ï¤_¿~„††b6›Ñétäää°qãF>úè#6oÞ\c½+¯¼’®]»OHH~~~¨Õj233Y·nsæÌáàÁÚŸqŠ¢0räHÆGçÎñõõ¥¢¢‚œœöíÛGrr2‹-âÀ¦ÿ õÄþ˜L&®¿þzLtt4ÞÞÞ“ŸŸOZZ¿ýöï¾û®Gâlê}T]×®]¹þúëéÙ³'°qãFÞÿ}6mÚä‘xO'C‡eâĉtéÒ£ÑHzz:«W¯æ½÷Þ#''§Æ:M½žãtx^êkãÎ;ï`ÿþýÌœ9Ó%9¹ºÒÒÒ—·”¦Þû=ÎÁÁÁ 0€=zбcG"""ðññAQJKK9tè_~ù%Ÿ|Rù=X«Õ²iÓ&L&_}õ÷ßÛ5lܸ½^ϬY³xçwZ,f!„B!„BwF$(×Åb9ž(d­!±«×y‰˜Œö¥l‘äd€Ûþ{#qñ±\{ÃÖ­ùm[jÅÏß—7?žE›˜Ö.Ë}|½ññõ&2ªjµªÖåN]:ðø‹æ²\«Õ`4 kBiI™Ç”'NOl‡˜ªÿ·mEÛvQ\wã—r£Æ ÇàÇŒ;ŸrY®V«™ùô= ½ô"—åQm#‰º>’K/Êw<î’,lµÚøó·ÍôÜ—^ýz (J³b÷è“„N_9ƒß/kÜ_^¸ùÎë¹ö×8Í Òþƒû2ûÙ·ùf¡{Ç\cdgÀßìwÒ²f²ŽõHÛ·ÿ÷F¼¼Ý‡…ŽhNDëp.¾dwO{˜”½¼M¼ôöStîï²<.>¶êÚ®McÎoK«c†ìÚV™!#rÑÐ yöáW*akÐûÂó‰ïç²,84ˆAÃ.dàÅð⯱ä›5ÖõôýëåmâÅ7Ÿ ªm$Y™Ùüwú#Uö¾{ê87eßÿì5‚Cƒj\çí£¡}Ç + nëšrMV×ÐçsSLO숗ÖõÏ®—VCœÙ—8³/—·kÿndg^Aõ{‡Óñ„sl4pQd8"˜µq+KS¹ÕóÕiyc`oÚøz»,÷ÑiñÑi‰ð6¡R”X›R÷Ä}3ûpMÇÖea{ní ÕjEáî¤FðwPƒš0“‘0“‘ž¡A”Xmµ&7†ZQ˜q~"GµrYåãE”O4—´dƯëLn¬i;pMÇ—efƒžþa\Æ«›·±hoš[=O£S-®s0·?ÚŸ 0÷¿KAa^…yß-ŒŸ–ìñX›lÏM÷÷©u½Á¨!¢müXðîéÑ™lâ¡W‡ÞÚ×e¹—·/oa‘¾t9?œÕßî‚:”£;V}Öú«IêIRŸH>|ùwV-ÞÕlñŸ‰zhãòÿˆ¶þ\qC7Îëך§ï\^g"¸B!„B!Ĺ`ºß™¶Ã|ZÔð³»ê“H±l¯5Ñ·)ú/ “®³Ë²u(›†1Øt1Ïä>Á·Å‹´ÍúÄÜY×…g‚^ •&Âe¹-&‰pM8%Ž’Z”§øÝHOCo6UüÅù¯5(>OsZŽgq:­ž™½ÚY\9P¡b<ùŒÐ*Så¢#nëôÞŽ®çõ.ËSšöƒÐÄ^Dù/bý»æ>ô¦Ô­‰¢óÂxùk¨Úà,:BÙ×ÿqON6úaºò}TÑ®Ë ¾(_Tþ­QTªfIPVG÷C–àÚ®Oš£‰LùЧ±nu XÑ1ŒzMt_·åŠŸ•_+ˆî‹³¼˦ùûŸé`Yù¹ðe¨ø½æršv ý·»°d.8­5—k*5†á£wM¤W´ApÚÎc(ûæ®F%¿7VÏž=ÈËËcß¾Ó«o¨±¼½½ùøãIJJrYž@BBB-µïÈ‘ÊgO@@ÀIËUös>\Kö| éÞ½»Ëÿ###¹úê«9r$'N¬JT÷¤nݺñꫯҺµkÿ®V«Åd2AII‰Ç”Hbb¢Ë²°°0.½ôRFŒÁÌ™3ùâ ÷gûŒ3ðññq[Åĉ5j“'O&9Ù}`“ÉÄ›o¾IÿþýÝ–›L&Z·nÍ€(,,tIô÷„Æî¯¿¿? .$6Öõ] ???üüühÓ¦ jµÚc Êžºî»ï>n¹å·òÆ cèС<þøã|ú駈¸å©Õjf͚Ř1c\–ÇÄÄÃW\ÁM7ÝTcreS®ç–ÖØçÕ©¾6bcc«î½wß}×e6äÓYSïý¦çE‹Vã:___:uêä2Û´Õjeݺu :”þýû×ú.h¿~ýÐëõ¬ZµªEcB!„B!Äqg|‚r§•? dÍ¥ Ð}¦»î];P\RʵWŒ"<4oo/**,ÊÈä÷¿’ٵ׳#Vž($,Øåÿ¡áÁu&ÀM¾ùjÚÄ´Æj±òÞësùmÝŸäç Õi ¦C§XJKjž…¸]\4³ç<‹ÉˈÃî`Å’5¬ûéw2FQTø›ýèܵc³$à½÷ú\¾œ¿˜¤‰<ÿúc|½à{>|ëSú\x>=s/\Ô‡èvmØ_í˜O»srUòêªe?ñÝW?PTXL箘:ýüÍ~¼ðúã\?þ6²«%G®_»þƒûd&¶C »w¸Ïè×o@/HçÀ>×Ñ ¯™zEUrò¦ [xïõOH?x˜Öm"¸õî©tîÏÞÌÖäíìÞÑôλì#•#Yzûx¡ÕjjL¨?ÆXÙ9_=ôËùß²è‹ã£™ß|çõL¸ö²ÇñÓª_ùö‹¥äå`2IìžÀõ·LÄËÛ‹‡Ÿ½—kÇÜìößýÝY•ºä›üðÝjJŠKhß±W\3Æ%AýD9¿M=VžbµÚøö‹¥¬ýq=E…Å´ïØŽ¦_KHX03žº›½»SÙ»k¿[½Þž‡Íf#ãP&ÅE%h´ââ¸åî)´‰nÍ=3§³nÍïäºÔóôýëãëÍËo?E|—dfdñŸäÈáìªõž:ÎÝ_ j¦ãm[v°ü»Ù·'•Âü"¬V+>¾ÞDǶ©q›rMV×Ðç³'üt(“/w§RdµbÒhèÌ•qÑô¼pAnX¹Žœò ·zmÛÍé$£¤”« ¢Ð1À[ºt ÊÇ›»“X—q„B‹kGÈäøXÚøzcu8xë.~ÏÌ&¿Â‚V¥"Äd ƒÙÒZÎ}SêVbrM25ëLPžšÐ¾*9y{n> wí'­¨b2òxïnèÕê“¶ÛP7uþöÎ;<ªjíÛ÷ôLzï¡$ô" ( RE@@ÅŠŠûá(>+ö£G=X°pT”¢‚€H¯Ò{ï!Þ{Ÿº¿?†L2d2™I¯ë¾®\nöêmïq¯õ{žVqòæ”tV]L¥Ä` K€/ĵÇW£æß{3uãNr*ªe%—0|ùzná~=ûÇ&*¯°šk¶³r_Çh«8ùHNߞŅÕý\Y^=·Õ¥ÕQºÙ,Ùõlk4ÚT©6gJ‹uäd–6(nS3õÅþµÄÉW’ŸSnõ2í(<{‡w§’ŸSmŹf?Ëd2Ôš†¯µšikzC6™Ì µnškxvv|›šèNÜûdo¾Ÿ³¯YË@ @ ¸–h«Šf¤‡Eˆ7¯è ô’þ*),xÊ=i¯êÀd¯û¸ÅýV*¥J>+ü¸V¼‹†¦XÄu·h‡ònà KL…d»7j¬C…øMÑ<Œ’‘4c*¥æ”2%qê.<ç;6ª¶Ìô{…¿Ê·Qd®ûµ#uh¯êÀÁ_ã.÷ÀŒ‰µekØ^±Tc räøÊýè¦éÎ }‘bŒª=yO£Ð\À«¹3›D¸íÊöC0ç]B²#n æÒld/P¨ÀT·¨Cæn3I—ÓT¡îûU`lJ9ˆnç—˜ S‘ûE¡ô<Šðn¸Ý2Sú1ÌÙç]–ÖnݼÑNš‹"´3æâ *~†¹8³VÃh4’œœLII *•Šnݺñ¯ý‹víÚñÖ[o±qãF í¿÷×­[ÇâÅ‹ÉËËÃÃÃ>}úðÜsÏáååÅìÙ³1bD­ó3ï¾û®Uœ¼jÕ*–.]JVV†Ö­[3gÎM°—íL{Ÿ{î9bbbÐëõ|üñÇlÛ¶üü|Ôj5aaatíÚ•ÒR×í:»Ž¦M›fîÝ»—Ù³g“œœLÛ¶m™9s&½zõâ7ÞàðáÃM"ºon^zé%«8yÕªU,Y²„ââbzõêÅ?þñüýýùöÛo3fL­¾ª¢1ó¹±´äóª%æFÿþý$‰ ì;h¸qfí»ªŸ9Š+8þ< ¼½½éСGµ‰»eËFŒAPP±±±vó½õV‹³‘ÄÄD.\°5xßu@ @`áº(·nNÏ®–͆ Ûv× ÷òt'è²×Ïn;Ú„)ݵtŒiKǘ¶lÙ±ÍÛë0¹ë¶®ßA‡Ní(*,æÐ¾ú-víaù€·aõVÿhkE;'+—“ÇÎØKÀŒ×ŸÅÝCKe¥ŽO¾Î±Ã'kÅÙ¿û£Mh™Ù”—U°ë¯}$]J¡uÛVÚw”¢ÂbÖ­ÚÌ=M¤]‡¶tîÖÉ*P æž'°fÅFþýÆk~ñg/røÀ1¾ÿí ¼}¼˜úÔý|øfµÅð=Û÷#I2™Œ›né_K ¬P(¸ù‹§Ä[mÇ7(8€©OÝÀöÍ»yýÅ÷1›-›ýù…üsÚ«,^õ-ÁL~p"ï¾:ÛéþÉμl\&# ÈŸÌtË&äSÿœJ×qÌûô{Ž9u¹~–ðYéÕ•f³½®zÑljÜá„s§â9°§zãçø‘S”””2ãµg‰jIçnlæX»m:òfý°”¯>ùŸ5,þìEÖ¯ÚÂÆýËQ©j?N;¾Îö•«Xðí~˜W½yö"öáÇe_âåíÉÔ§îçÕ¾[+ÝžjÝÛ¹m/I—RøyÅר5jú ì]˳+×o`P³ç½C»ömHNLå…i¯Úˆ“ÁuýÜØöÚä±}¿]oågNÖ>âÌœ¼GŸÏ®à|a'jxà=_ÈÁ¬<æ FÍCq1|røT­t{3sjÝÛ•žMrq FÞŒZ!§_h“Ómât ´¼7&§³ä A}NE%§òê>„åLÚšlMÍ ½¯EdY¬7p8'¯Î¸ÁînÜÓÁ"ÖÝ“‘Í«»cª±Iv¡¨£YÂÍdƒq×2¹ƒÅƒÁÚÄT>8x¢ºÌÂbŽdç3ø@¼Õ*Ž‹á£CÕëSô—ŸÉ5ëj0›­÷ë"PëÆ#qíØ‘–Å{XEÌ:=/î8À‘ƒ Ôj˜Ü¾ ï°=Àæª1j.ärϼv“89þT—Ÿ#1>ŸÊ Z­ŠVíüj‰RŸº£ÚÚ÷œÅ‰°X>y0ƒfÔ¶Œ{5NÊàÒÙ¨ž“§OŸfùòåœ:u •Jå²2ÓÓ-{­2™Œàà`ÒÒÒ˜9s&½{÷æ?ÿù $$Àœë+I’Ðé.¿ÕïA½^o½ß¶oßÎêÕÕï¹'NPZZÊÛo¿M\\±±±œ9S÷¹#Gy÷Ýwñðð ¢¢‚Gy„jŸؾ}»ËʫɶmÛjÝÛ´i ¬_¿FÃàÁƒY¹r¥Ýô'Nœ`çÎê÷þÁƒ)..æwÞ!::š=zØ«ãââ¬"Ò… òÆoØäwòäIfÏžÝd寶·wïÞ¬\¹’ï¾ûÎ&,33Óåâqg×QHHÿøÇ?ذaÏ>û¬u-åååñÐC±iÓ&BBB˜:u*3fÌpiý››ˆˆ¦N ÀÒ¥K™9s¦5ìôéÓìÝ»—?ÿü___žþy^yå»ù8:Ÿ¡¥žW-57¢£-gXÒÒÒ(*jÆNÒØµïÊ~Þºu«]ÅÇ×þ¼uëVëYÐaÆÕ+ †ÀƯ‰: @ @ ° oé 4?î¿óvd28uö§ÏÕÞ| ©öŒ¹ïÐq¾]°”÷?ý–·>ú’¯ø•ä4˦æÐ›ûѺUx“Õõçù¿òÚ ïñå'óyüÞéö½ˆÖ °Àò!+®[G||ë÷šW“˜ŽÑV¢?Ì[dWÜØ\Z¼YûùûZïååæàéía½7bÌPä 9F£‘ÿ}UûÃNÒÅÖ¯²lž »mJeµà0?¯c—bUBäšôî×?KÿmZû—MØð1· Ö¨1Œ|òþ—Vqr••,[¼ €~7õn`«ë§¨°˜²R‹ìÀàär9c'¢kÏ8Ý:À70Èb<õ ¡aS±áÏ­˜ÍA\‡Øv6a·Ž €^§çǯ×Jk2™  ›ßk¥¯Œv¼Žædå²âËÇñCúáævuaX)IideZ¾á­ÂlÂ\¹~£ÚDòÕOÓ®}Μ<ÏÓSfÔ'CÓ÷s}íugæä•8ú|n*Žåæ³æR*#¢"PÊe N›RZFV¹ÅËl¸‡{­ðˆ bý}ñV;¶9ïLÚš,<{‘7öaÞ‰³<±yEºº-¶Wµß,I||ø”à·)Ñ:¹L†Ñ,ñýé µÂ“JJYŸdÙîÐÕÇð¨pÔ 9³™9GNÕò°\i4ñ{B"}¯ðø ®£æ¢ç€H«ð`ßÖ$Þ|f;7\$õR!¹™e¤\*d÷¦K؞ܤuùé¿Xüõaþ\|Š ¿Ÿå…'ùî£=üðéþ&-·¡(”rä5æYe…œŒŒ3•F’.ä³ö·3,ýßÕ-ô^8Kb|>IòùæÃݘjç£;4Iý¯WíL!þT¹™eìÜp‘eÿ«6\¡TÉézƒëÞg@ @ ×¾r_F¸`qÉO˜¸ºàJBÂ(ÙîµD«Úñ°÷£¸Ë=êHÕ4$“È4ZD¤‘ÊÈ:ã9ZçöêŽtÕXD¨ßͳ+N®»¼&ÓEÝ•=•»ëM7rßH´ã?™ cüŒ¶¹,o©¢I_X¾– 9ª®w ˆè޲ý-Õõð°Í5¤Xï©bGR&•›?´ Œ­ù*ÐùÀêý×i¯Dîß÷{ÿ‡<0Sæ)Ê—>–W‰ymÑØµßRýœ››Ëþý–óUBäš 0??‹ÿU«V]u@ @`áºô àïË£÷OÂÃ]Kfv.KWm°Ï]«µ^ÿ±ÎÖsgrZß/ZÎKÏNÅ]ëF¿ÞÝHJi:1è_›ê÷W“ß~^Iß½iÛ®5‹V}ËÊ_×°f寫 {öéj½^»rc=1›;ú-Y›]zX™ãí (výµÛ'ŽÄÍMCûNÑ6U7®ÙF>]iß)š°ˆP2Òª7€oañ°z)!‰óglÅf=z[>ºž>~–¼œ|»å&&X„Q¾~>øúùX…ãΑ–ILÇhBÂ9yô ]ºÇâåí @ÿ›úðùìo ·XOkÂ9Y“Šò òró À×Ïvs¼c\ ç/Q^VáP¾ÎŒïµÚW€Õ«°B¡ ¦ct-¯æžL¸g ýoêChX0¾þ¾T”WšœŽ·E4¯Ñ¨mÒ¸jývŒ‹áž)ññóæàÞ#¼2ý]*Êë7WôscÚë ÎÌI{8ò|nJv¤g16ºZ¥‚v>Þœ»â™ã¡R2¡]kú…âFM…ÑDZi¹U˜ª±c‰yi|"7„ÒÖÛ“…£óÇÅdÖ&¦‘ZZvÕ:9“öJþJ«û€NMª<Ÿ-("§¢ÒárK—K¹‹JȪcÍìÉÈáö¶­pS(ˆññæ¬ Þ Ý/·÷t~!y•ö- '[6o}5j|5j«(\;FÍAçž¡6ÿþuþ$sóˆÐ[‚¾ƒ°(ûÆfbâY´}ŠÍ½¹omgÏæD*Ë $]( uŒeŽô¼1’Ù?ßÁÖ?ãÙ»5‰ìô’FÕ©¢Ì@vZ©µ^¾µ \o8ÓÏWãàÎî{ºÚXMT´_ƒÓ @ @ ü_b´Çí¨ejô’ŽÕe«®ž(5—rcJo¼å>´Qµe´Çîð˜Èp÷‘D(#y<ëaôRÝ-ƒ§Ü“;='3@{aŠ0üþ”K夒ñ¹¬dÔÈÜ\VçÞš>ÖëUe8TW¹/Ó|žÁŒ™O f;ØR×"÷‹Âý®yÈ´~˜sâ©\û¦ËËŠÒu@î†)ý8ŠðnÈÜ,ßõ”m c2o‹‘@©°Z ¬ˆì€)ãR™}/Óæ¼‹–ôZ?dZ?¤Š§ÓÖD‹ºÏÈ´¾˜’öS±r’¡¼Þ6/FÙ¦?ò€h<¦.Çpl)†Sb.hZ2'ªw¡l3™wrw?$C9æ‚«XZ¦´5Ĭ‰À”Tn½©Ñu© àkÈŒ Ñ~Ö³Õ l þ—=1ç¿ÆKÎ׳Ê;¶)çB"uãŨºÞLå†"¸¦ÌÓvã5†’’zôè€R©$$$„þýûóøãÓ¥K~ùå&MšÄ… µò^OT‰éΞ=KYYóí}¥¤¤KDD‡¦gÏžVqÚàÁƒyÿý÷‹×S¸>ÊEEEäåå@PPm£È¥_¿~ÖëeË–¹,߆âååÅ<ÀàÁƒ‰ˆˆÀßߟòòr’’’¬"67·ºßûö(//';;›ÐÐPüýýmºvµœë8{ö,yyy®i„4¶½?üð7ß|3íÛ·góæÍ,Z´ˆeË–‘˜˜ØduufõíÛ€#GŽm7ÿªç›¿¿?þþþV!æõH¯^–ß*çγ ͯdË–-Lž<­VK\\\ƒ=¹Ö7Ÿ¯Uê{^µÔÜÉ\cÀ¾¹iìÚoÉ5øÇЯ_?âââhÕª))ÕÿOpÛm·Ï©S§®™: @ @ ¸Êþ~<úÀ$¼½<ÈÉ+à‡ÅËÑë vãÖôlªT*0m-£éõNž‰§o¯®´iBÊŽ²÷!^ýç;ÌxíY‚üyðñÉ<øødN=ï?¯à¯M»jyü…j¨%Å¥äç5³‰àFpÙ+k]âUKXõG£€@Û¥[7ì`úËO¡R)¹uÔ ~žÿ+*µŠ!Ão`íÊMu–Û½wv_sÕzzûx¹D œ–’aƒ†[,€Þ<Ôâù¹¬´ŒÖÑ­¬"ëð‹€+59Ãé2Jåe! ú !©€Å‚bv–ý ûúpf|¯å¾ÊÉ®Þhòõ·t·iÅ'óÞ%($Ðæ¾F£¶_ùñÚUë·jÞK’ÄOßýZ¯8œïçÆ¶×œ™“×2eÕ‡XµÎÕ8ûÒÆÛ“Ù7ß@Öv3Q£Pà[cÍÚëæýY¹¼¾ç/ôêL€›†:µãNí8™WÀoñ‰lO˪åµ×iKÀåww† Äç)7«¢îr3k¬§­\`7àòq÷@þºsôUã{©U6å–#g©ö0b0˜ÈLmœÈöïÂßü‹7þ;‹Ñ/î™Ö‹{¦õâÜñlV->Éá]©ç[^^=‡ÔšÚ† ÕäçÚ0ôôÑÔS @ àÿ6C݇°µb %fǾ뛋8®;ÊqÝQvTüÅgA_§îÌDÏ;YR²Èeul«Šæóày+Blîkdü4~Ö7dÇ¢¡uR]Ž_L¾É1¡ÒCÞà%÷âϲ?¸hHp(­+‘ûEá~÷×È<ƒ0ç'R¾ìÙ« oƒ¹0yP«Y3IWŠ< -rŸpÌEéÈ}".ǯ#È.{UVDöÂëŃW-K¦õ¶ŠŒI[e‡[-’„nÿ÷ ê#câ*þx ·a/#óDÝo*ê~S1¥GhÆø-µ<:»y@4î“>Gæls_¦Ô ÐúÕ¼c~Y¸,7߾땔| òeàû(‚!àÈ ¦4ûñ%‹Wäõ8”©@Y}í ªæ•TR·^s~¬ŠßFÒÒÒX¶lk×®eÅŠ´k׎™3gòøã7Y¹ÍA` ¥ß23fÙU$''[…•Píű¤¤„˜˜«`*2Ò2±®2@ii)hk8{p–*ï·EEEäæ6ïþ}LL ?þø#¡¡¶’ÝÜÜl„˜9«PqyÏX£±Ýª§¥ÕñPjBœiïöíÛyê©§xçwæé§Ÿæé§ŸæðáÃ|ÿý÷¬_¿¾–·Qgqf[Þ_}ûö%!áê¿‘|}}¯k¡a•·.qò•aUýÓPêšÏ×2u=¯ZjnYÎ V‰ì¯»ö[r ®]»–7ß|•JŘ1c˜7ojµšQ£Fö büÝž@ @ \kÈ[ºŽàïëc'çæ0ÿ祔”Ö½ñWS쮵o³°¨//O×VÖIvnÝË]£æ½W?æäQ‹wÖ.=by{öË,øý+b:F×Ntù³t ‘®F•7å†ÖùÊx%Å¥ìÝq€a· ±Þ¿ù–þxzy`2™Ø°ÚÖ{6€Lf™úf“ƒÞpÕ?•Ú5;•I—,é¡—½Ñ>‚"~üz‰µÞ¿_*+uded¹¤Ü†P×TÝ6ŒçéÌø^Ë}e4V÷EMÏŸ2™Œwf¿BPH :ž¹ÿù†;G>ÄÐÞã5àN¦ÞýÙ™uˆµ]´~÷ï>DiI2™ŒÙ_¾mõ$^Îô³SíugæäµŒJ^ýJ®éi^¼Õ¿'AZ7t&Ÿ;ÃÝk¶1ì÷õܶr#mÚEvyýž†w¦g1yÍ6Þ?pœ“y–C5]üx«O~~1>^M’¶1Tµ]-wü'JÍåãèF³5v— «^µòË›% ƒÙ|Õ?{ýÒÜcä*ŒzóÿiïÉ`——Uÿé*«Ÿ[f³dV^¦Çh°=ˆ–‘\ÌËSÿdÝog¨(³5ÈÓ±[03þ=” E¡tl½Ô<ïv½Z{®‰³ý\WÎÑÿësV @ ÀþŠºi,ÞB7•mp*¯Ý;9¡;@·N×­ 2>ü˜`E:IÇ'16}Rú0$udN&ËÔ8[}u®þžïøw£qžwp»Ç8D«õçsYqùªÿ,Dã)ßgUÿúûDÔ''Qþë4¤²¦ñiÎO¼\¦Åp¸²ÃP¤Šô{ç[þÝn(5ÈÜý‘ •6^i­ß1%3˜ôWÿS¨]’¶&ÆÄ=HºÉpŸøÊÃÔnã…¿(ýv,•kgaJ·x;T„wC;ö<úyP‡†va‘¡ûEœlÔ¡Ûú eßÞNɧ7R:w0e?ÝTb_U2ê,ò–5lY¹ ^Irðÿ/ÈýìÇ5^Ö*BAæÞ|u¬ÞWº¶¾———óóÏ?¶žmÁvZÞˆ}¸– ªÎƒ}§ME•‡Å*áä¨Q£ÈÏÏçóÏ?`ذa¸¹¹HEEE‹ˆUC•Í•{CUy5÷9%™LÆ_|Ahh(•••¼ûî»Ü|óÍtêÔ‰îÝ»3vìX22ol¡®öTVZöå•ÊæõâŠönÚ´‰Aƒ1cÆ > X<÷Î;—5kÖëÒ:;³Žªæ•ÉdB¯×_õO­¶ÿî¾^pt9ºÞ®§s„UÔõ¼j©¹Q5?###ñðð¸Jìk‹Æ¬ý–\ƒEEElÛ¶ €qãÆYï>oooL&+W®¼¦ê,@ à:ò ¬Ñ¨ypò8¼½<È/(⻟—Õ+N()-³^ûúxS\RV+ŽBaÙ\3›\o™ØY #ëVmfݪ̈́†‡pûÄL~p­£[ñßù0eÂSäæToççZDI^ÞžøøzSTXÜRUçÔñ³TTT]ç\€Üœ<ÚwŠ&4"¤Î8!aÕ–óój[«þcéZnz#íÚ·!º}.Æ'2jœeCxÇÖ½äåÔ¶vWUî– ÛykæÚ,§¹tÁbñ3,"”¸® á÷%²yývžza*ƒ‡ äྣÈd2’.¦`®Gc¾¬.’5ÈÎ{ãiÈ9“¶®ñue_¹šPûunß©mÚEðá¬OÙ¸f›5Ì`06²2ûÏ-W­ß#Nðñ»_ðÁÜY´mך7?œ‰\.góº¿ìÆw¦Ÿi¯383'¯ekÒȯÔY¯ÛûzÓÆÛbDã?‡N²)¹Ú2®Ál&¾°˜2ãÕÅÚ³™õIi¬OJ#ÔC˘6‘Üݾ-­½=ùtp?Þ¸ƒÜ ËÓ:J¾Nxìnß°H}ÌfÌ’„\&ÃCåØOœÜJ1@¨GÝÃCÝ«ÃjŽQMjz+nÈó¹ªÜ­©¼½ïXƒë{%Í9FÎPWí…Zë¡"4Ò›ÌTÇŸw6›¨Í¨¯½ò]#—×_øëO¬±ùw÷~ÌüÈâeãâÙ<Þxr½d6æW°`îÏ;L×¾aôÒ†¾ƒ£Ð¸Yæx¯‘Œ¾+–?Ÿr¤) ÂtÅï㫵×U8:¾®èçº µ5bT˜ß¼ÞÝ@ @ ®nÑEޤcoån§óË2eÑðSÔ¡8lÕˆVY <¿›ÿ&ëʪ¿ $çôg)3—A#u—uÕ9Ïdñé%÷ÆWîK¡¹°Áyªe-ëÅN¦ö@;aŽEœ\˜Ú¤âds®Å“™Ì;EXäÞáŽþŠáÜ4ƒžGÙa(Æäý “aοdciÑ\–‹œŽÎm¤rõ«Ž•ëDÚš˜R¡ÛôÚ sD£½ý}*ÖÈ1žm€hßdÀpz5†Ó«‘{‡£ê:Uïû´Åýîy”ý8©Ô5F!‘XÖBå†w0œYg “L¤ìsHú2»Ÿ^¥¢tíÜ¢iÇÑí…ÂWÀïCPFÿ'÷HWèT '._ÈÁm TllžúUÍ+ÙeÁ½=ä—½…HeÍçY6;;<<<(+³œ“Ñëõ˜Ífär9^^η­úŽß¡«#B¹ììlâââ¬X›‹øøxÀ"DëÑ£‘‘‘üôÓO¬^½šÿ÷ÿþ£Fb÷îÝÈd20›ë>oÔØ¾ª™çµll6'ÇòìòññÁÏÏ‚‚ÚgzŠ#s#..Ž˜˜^~ùeþøãk˜Á`àôéÓ”––6º.u‘ššJ÷îÝ].æ½®j¯Á``ùòå,_¾œÈÈHîºë.¦NJLL .dôèÑde¹Æ9€3ë¨jí¯Y³†éÓ§;UgĹÍ%ìmȳ.<¼ú}Sµî®šóyåʹáUÂ^¹\Î!CX½zu³•í ]û-ÕÏU,^¼˜áÇӱcG:vìȹsç˜8q"7n´þÖ©IK×Y @ ‚¿;ׇYTàŽÑ·èOyy?,^a#>®‹ôÌêcÚØ@N^m«+tëî}h¡áÔe¦gñÝç?ñÄ}ÿÄh4âåíÉèñ¶V™> X>ö{«Óuv†/>þŽŸ|=—½×ʼn#–:·k߯êÁõJnҀʊJâÏ^¬¾÷!2Ò,´ÇLAphýô`ù’?ë-·Oÿžh4ÍgïRB2á!Œ¸}(Wo%;3‡“GÏеg}ú÷àâ…ÄzóÒ]šyx6­)誾êÔ¹=AÁJÛ˜ñue_¹šƒûÚ­³€¯õ:þ\í¹Z®\¿é©™<óÐKœf#27oT›;õ!s÷·^›²Ï;”Ö˜´¹o$ʘ!.«Sc©ü Šÿk¹Vu¯§kÇÑŸÓe§¡Sh¶0UóJc#D®‰²Ý`$C…Ãcá ­Zµ@§ÓYÅÉUT zª„Ž¥¢ÂbÌÓÓÓñ}β÷àî~õïÿ‡ [·n„„4ß^n•°²U«VŒ?€•+W’‘‘ÁáÇéÝ»7àüùúǶ±}U•pZPÞ”¼ÙÊmŠö¦¦¦2gÎ&NœˆÑhÄÇLJI“&¹$opnU­ýâææø™š82¯\™ÖªÚÛ©S§:EÊÆYΖ——7ëœoÍù¼råÜp„cÇŽ‘žnq&ðÄOXâ\4dí·T?W±cÇRRR¸ë®» ãæ›oà矶›¦¥ë,@ ÁßëB J·Î+½KWm$¯ a–§KJËHN³ìFõè‹Z¥² ðó¥c{‹èàÌù¦×Ý÷ȼ7ç5ž~ñQ¾[ü>¾ÞõÆW*ë4]JH¢ø²pÍ×Ï6Ÿ³§Î[Å’?û Ýzvv²æMφÕ[0™L( ¦>ý@­ð¶íZ3rìÐËq·b´ã%Ôl–øc©ÅòóèqøïáIÈr’.¥px¿}o”ëVmÆh4âëçÃô—Ÿj¶‡É—R0„„‡0ü¶!¤¥dpòØÀÒ>™LÆýSïàb|b½yeeZ,bàè: óWRsŒ^xí‡úÊ™ñue_¹’ÎÝ:1nÒ(Öÿ¹Å¦ÎùyÕϦØÎŽYwõú-).eúã/sìðI o|ð/»y:ÓÏδל™“WâèóÙ(eµ_½¡ZF´¶X¼ÝžM¥©ZœWPÃSo'?ÇË«Çãé¥âRJôÁ¥c Τ­É½£y÷Æ^<Õ­ß €·ZUgÜ-)–÷¶B&ã¡ØÚ‡#ä2Y½‚Ö*óàÈPÜ” Ÿ“Ó1I ™Œ©Û× oëíɈ¨k\c^۳˫7ßn ´§&ë“Ò0š%|5jþÑ#…ƒj]WQsqpG …5¼(÷Ú†×>É·¶!<Êÿ wÂZyÛ#„ÛïéŒBiÿ§j^Võšˆ6¾Üñ`W¢¼ ó$¦s“ŸèIÛŽÎ0¨UnN9•ÕÏýawt {ÿC­?Åyý9žô}†šž.-»©P„vFÙi$•ëÞÄ\˜ÒäešóÁlDî†*væÂT‹Ð0œY 2ê¾[âæ^°Ik8ý§EÌ«õÃmè¿@ÞðïÿΤµ‡TYLùoOaJ=rÚÛÞEÑÃ~dyÝûþ漋H•c¨2­oñ®_yµavEhœCi gÖZ…ên£ßBÕe2d/a]ÑÜò"ÈëÞãi ÊY„Ê÷ƒ¦ßÌ–8ªNàýO°ëÚÅϬ³ ä Ô¦Õ —D£Š»írܵ`®}Ρ) ãá‡`ÿþýµÂ³œŸ5j”S‚»*‘VHHAAA¥ÍÌÌ´Ö5,̾¸»Š+VX÷…ß~ûíf;ב€Ñh$""‚qãÆ‘œœÌ‘#ƒ+W®D&“1mšeÜÏ;Wo^í«ªt€U”u-rüøq«XòŸÿü'}úôit^ŽÌÜÜj£ݺukt™Ž²råJ«Ðÿã?æÎ;ï$((ooozöìÉ믿ŽJåú礳í­ïZ||<……–=v??×=rfýþûïFüýý™5k–Skß‘yåÊ´ŽPóYgÏókûöí­V®\i÷ì\KÒœÏ+WÎ G0™L|÷ÝwtéÒ…×^{­NoÑrùµs·±k¿¥ú¹ ³ÙÌ’%K˜8q¢UžÀž={ì¦ié: @ @ðwçê®ý®Ýhñ†›œ–ARj:nnö-K’„NgëÙnëŽý«–­ãá'ïÃËÛ“I÷à·ŸWÖ?'+—¿Y£O?ÀíGÒó†n¬øu5I—RÉÏÍG­QB÷Þ]øä½/1Õ :ƒÁ`äâ…$:tj‡ÊÇ‹ßV×qËúí^ô¿©wÞ?•ZEaAß_Qç çÈLÏ&4<˜çgNCã¦áðþc£R©ðõ÷ÁMkßJcS¬_NÏÌgßâóï?$¦c4ïö:O>ð©ÉÕ›Îô³3íugæä•8ú|vƶÃßMîô,J FÚûyóPl îJ%F³Ä÷§ãmâ_(*!³¼‚Pw-ÏõˆE£Tp8;"µBޝZ¶žë³o¾ƒYbKJgó‹(ÐéPÊe„¸keõÐ|6¿¶ñgÒÖäÖVÕ›u>5½ƒÙšša7nbq)“ÓÎím[á©R±:1•R½h/îh…{=›(kÓJ€›†9ƒúòÓ™2ÊÊQ+»»!¯c“(«¼‚_Î_⾎ьjV©àÏ‹)”ŒtðeJl J¹Œb½ÎÔýÌI.)£@§ÇO£æÉ®QÈe$– “AoOZyz0ïDõkNE% Î\`jçöŒiI V^L&¹¤”üJ=j¹œP-Ýý™sä&ÉVíª1j. z_¸›}0Ôê8¶G±=ì[½?¶?”‹µîŸ>’I¯Õ^ƒï~¼'w?n{ð/7³ŒKçò®Lê’YâÐÎdÀÛ×™ÿ±õŽqæh¹åö’;Dd|´ Ûž¡ck‹ækrâ`z½áE’àÐÎTny¹½~nÌüȶ½§]Ô^›<[h|î}²7÷>ÙÛnØâ¯aª! @ @ ø;ÐZÕ¹ÅëãI݉«Æ—!caØ¯ìªØÉ1ÝarL9%#Š ú»ÝÈÝ^÷oÊç÷Ò¥.«çyý92Œ„)ÃxÁï_¸ÉÜ8 ÛO¡©µL…¯Â7™Öåu–x?ÿm¾ùZ™–¯Cæ³±|;+¶“fLÃ$ñ{ÒNƒŸÂÏå^‹ºïC˜ÒcJ;†LS‡·;ÉŒ¤/³æ(&¦ÜÁ‘)Tè/¶Ïm€[^´zÿ5e±­FI6º½óÑ ˜†ªëx­zc8¶s~"RY(ÕȽÃQDö¤ró‡ᨠÒÖ‰QGÅŠâ>ùäAÐŽÿ˜òE×z»ßù9’É€ñÜFL™§ÊòA¡´ˆ´»M¬noæÉÆöj-LÙç1g ÷³Š•n˜R U‚BLëª:öïŒ:*þ|íÄÿ"S{à6ò —ÕËŠÞõ¯ Ÿ7 çNªm¡Rö+¸ uOð¸Tí-÷Œ— Ô}]_'sq&úƒ?£îûªÎ·#S»c8¾IW‚"¬êþ‚\‰TYŒnÏw./_.—ãëëKYYjµš   † ÂÔ©S E’$æÍ›W+ÝÒ¥K9r$ÁÁÁ,X°€¯¾úŠääd4 ááá ó8`1Ö “ÉøòË/™;w.:޶mÛÉìÙ³ëL{øðakfÏžÍ矎Ùl&**ŠÈÈHæÌ™c›žžÎ7ß|ÃSO=ŰaÃøõ×_ùá‡HLLD¡PÖ$$ƒÁÀ¹sçèܹ3¾¾¾üðÃÖ°Õ«Wóúë¯[=Úž8Qÿ»±±}uñâEòòò`æÌ™( «ˆ³}ûöDGGóÁ¸ µÎ!I¯½ö‹-ÂÝÝE‹±fͶlÙBJJ &“ OOO:t耿¿?Ÿ|òIy927Μ9CZZ¼þúëhµZöìÙC~~>´Zûï}g¨¬¬dúôéÌŸ?>üðC——agÛûã?¢×ëY½z5Ç'77•JExx8÷ÝwŸu>W1pά£ÌÌL>ÿüs¦OŸÎÝwßMÿþýY¸p! äää ÑhˆŒŒä†n`Ö¬Yõžérd^¹2­#¤§§óÝwß1mÚ4&Nœˆ»»;¿üò ÅÅÅôìÙ“gžy¥RIaa!sçÎuI™®¤9ŸW®œŽòÓO?1räHúõëÇ”)SèÙ³' .äìÙ³Èd2"""èׯýû÷gôèÑH5Îv¨T*›5Z%nvssÃÛÛâHÁl6SZZê²úBã×~KösK–,á¹çžÃÇLJ)S¦ðý÷ß×ÿZ¨³@ @ g® r›V¯’Qa¼þâ“uÆ+-+çߟ~ksï|B"[vìcèÍýhÁSL¶ × ,\¶šò]MNV.:µ³þ;;3·Î¸r¹œ¸nqsÓÐw€}qÀ®¿ö±uÃöZ÷Ïœ<ÇKO¿Áÿ~‰Àà†°ÑCjÅ++-³ µîZ óÕ¤¢¼Ò%k¾»€ @FŒ¹…!Ã2dØ@›ð’âRf>÷&9Ùu‹PŠ ‹Y»b#wL@aAkÿØTo¹?~½µZÍýSï"¢Uϼø˜ÝxK~ü”¤4À5}uîT<:µÃl–XW£ŽÅE%lß¼›[G B’$Î×#€HMNgãšm ¿m]zÄ2û«w¬aE…Å.(Ìÿâ'üü}¸}âHâºvdÖ‡3œÖ™ñmL_¹r>Û«/@~^3Ÿ}“¼œ|›ûf³Ä»¯Ìæ?_¼…§—/¾öŒCuhÌú½e¥eüë™Yüï·ÏñõóáÝ9¯1í¾é6Æ;'m¯383'kâÈóÙU¨ärîhÅí¢lî›$‰'¡¨Äæ¾Y’xoÿ1>¼©ž*/8à][.“ëï‹›BAßz¼ùîÎÈfkª­WPgÒ^INE%íkx§Î®¨ÿûÉáS„zhéàÇÈP†D†ÖÿÊú¬¾”ʘ¶‘Äùûòïu¿K¯ä»“ç Òº1<*œÁ¡ ް-·Doàå]‡È­¨¬3³$ñÝÉó¼Ô» >53zÙzê(ÖlÊ Î\@­s_Çh"<Ýyº['»yÿrþ)¥ÕÁ\9FÍɱ½iÌ~y+Ó^€·oýF ZÇøÙ(où3žá:QÇ¡9 ¢µãÇÂoóѽ_žÞö æD´ñáØ¾4§Ë o`ýÏËbõ’ÓN—WKÿw”îýÂë+Wµ·&-9¾öÌ‹çfצKÍV¦@ @ ÁµBU[ëuª1¹AñÛ«:Ð^Õ˜j7N¶)›9Ó)1—Ø o fÌÌÊ{…Oƒ>ÇKîÅLÿWœÖÙ:ŸÒŸä9OóNÀ)‚é>š‘î£kÅ+5—^3å*¿Šðnx>»µÎxRy>¥_pY¹æÌÓ(‚;‚dÆxêÏêr*‹1^ØŠ²ã$ÌYgk¥Õïù™BºïCÈ}#Ñ ®ía@ðgÌÉ.K[’®”òß§ã1e!2­ÚñQ¶ð!0ê,drä¡]©ÜP¶¹±Î|Œ Û1ž«_Û!$3•kß@;áSd/܆ý?‡’›RS¾p š›žAÙöFP¨-ÙêJ1^؆*vôe/ÔRý¹s ¾ï€"<§@É×5#@þtðû4ýAÝÛò×Ôèv}‰Ì+Uìh”퇢l?Ô&\ª,¦bùt¤Òl——íááÁ¡C‡ì†éõzÞ~ûmöîÝ[+lË–-üúë¯Ü}÷ÝôìÙ“o¾ù¦Qå'&&òÇ0nÜ8zõêe#*((¨W |îÜ96mÚİaÃèß¿?ýû÷·I{¥àoΜ9øûû3yòdzôèÁ§Ÿ~Ú¨:;ʉ'èܹ3f³™ßÿÝz¿°° 60fÌ$IâÔ©SõæÓؾ2›Í|òÉ'¼÷Þ{øùùñÞ{ïÙ„\e°Û¦NÊœ9s aìØ±Œ;¶V¼’’’zÊŽÌ ³ÙÌ‹/¾Èüùóñööæí·ßvm£êaß¾}L˜03f0hÐ ÔjËs²¤¤„72~üx …8ÑYœi¯B¡ {÷îhµZ Tg¼Í›7³fÍWT׊3ëèóÏ?G£Ñ0mÚ4¢¢¢xùå—í–1þ|.]ª{ÏÑgŽ«Ò:ÊÇLhh(ãÇgÔ¨QŒ5Ê&¼¨¨ˆÇœ¬¬,—•é*šûy媹á(f³™ÇœÏ>ûŒ[n¹…®]»ÖÙ®Î;sòdµš{ï½—Y³fÕŠ7cÆ f̘XúÉ/ôWâìÚo©~®¢°°eË–qÿý÷ŸŸoó±GK×Y @ ‚¿3×…@YëîœUËÍÛ÷’”’Nÿ>݉ŠÅMëFYY.%³uç>ò Š\TSû|ùñ|‚C‚ eåÒ5œþêºöŒs¸]ÿ|âî=êpº+1™L¼óòGlß´›qw&¶KÜÜ4dfd³kÛ>}¿”‚x~üå§åŒ»ë6är˯B…7í+‘$‰oþû›ÖncÂÝcèÙ·Á!¨5jJ‹ËHº”ÂáÇ)*,¶¦qE_=ÏØI£Ø·ó™é¶›‘+[í£‘šœNYéÕ½þû9¤&¥1ü¶!„„‡ ×é¸t!™í[v#“É\¶áa2™øðÍÏØ¼î/î¸{ ]ºÇâëïƒÙd¦¨°˜´Ô Μ8Ͼ]í¦mìø6¦¯\1F_~ò?úôïAÛv­ D«uC§Ó‘šœÁέ{øõç”–Ø·ìðI¦L|’;ïO¯¾Ý ÄÛÇ‹ò² Š ‹ÉÏ- 91•ý»ío;º~BNvÎúŒÿ÷ ÚµoãÏ<È—ŸÌ·†;3'mocqfNÖđ糫XŸ”†R.§g?>5E:=GsòYx6 EöcÏ-àá ;™ÓšžA¹»á­VQn0R¬7_©#©¤”ýW¬%Iâÿí<Ä ˆ:øà憯F„D~¥Ž„¢¶¤d°9%óÏ gÒ^É—ÇϬu#ÌÃ?.&s*¯þgz¹ÑÈ?¶ícbLkFDEååL E%¬OJãÙäu"øèÐ Žåæs{ÛVDûxâ®Tb0›)ÒH/+ç|A²j‹ÑM’Ä»û±=-“qÑQtòóÁM© ³¬‚ÝÙ,>w‘‚«¼[þ¼”B‘^ÏÄv­‰ñõÆS¥¤ÂhâBQ1;Ò²a{lG¾=yžÍ)ŒŽ¢W°?AZ-j…œR½ä’2çäQ¤·-Û•cÔÜÙ“ÊówÿΠQíèÑ/‚¨?¼|4¨Ô tFò²Ë¸x.´$û¿Ñ*Ë ¼ùôZ&<Ü®}Âö@¡”QV¬§ ·œ³Ç³Ù»-©Iêž^ÂëÓÖpçÔît]¥‘œôRNÉäÀöº¯Û—Æ}ƒf`bÏæDò²ÊèwK:u!8Ü­» £ÁLQAIñùìݚĞ-‰Huü&t9¥¼þÄ&>bék?7ÊJõäd”râ@û› Ÿ_Gú93µ„ÅóÑ.6o¼|4xzkÉ ?§œS‡3Y·ô ©—® /ä@ @ ÍM˜ÂbHÚŒ™LÓÕ !¦Óx=ïentH'u¡ÊPÔ¨)‘JHÐ_`gÅ_¬,[N©ÙµÞÁŽè39s“=ï£Û +BðQøPf.£È\Hž)DÃ%öVîvyUdRúXn÷ÏÍÚÁtPuÀGî‹=%æb.Ø_¹ L´¼·.™Ö·EÊ5eAÅŒ—vc.ΰ Ó[†²ãÌ…)uxm–ÐíüÃÙõ¨{܉¢Ud^ÁÈ$] æüDL)-ž‚]š¶n¤Òl*׿ƒöŽOÆ ø$º¿>»(Q±|:ÊöCQ„wEîˆÌÝ$3æ²|Ì9ç1žÛˆáìzÌ•{5L©G(ÿq2ªž÷ hÕ¹W027$}ReRYæüDŒ‰{ì¦7ç]¤bå‹ P#÷D’LH¥9¨â,Ã¥*!v3Q±Ü'€º—ÅKréÏ Õ˜&R9ä?gñ¤¬ê8û¤SÎ~]ùIÛl¢rÍëã·¢ê6Eh2•æâLŒ ÛÑX€Tžõ|àÂ… ;vŒ¨¨(¼½½Q( JJJ¸xñ"ûöíã·ß~#%%¥Î<^yåöïßÏäɓ騱#žžžèõz HJJâÔ©SìØ±ãªu™9s&‰‰‰Œ7Žˆˆ*++‰gÆ W=«0}útž{î9FMXX•••œ?ž7ÖJk2™xå•WX½z5÷ß?={ö$ “ÉDAAÉÉÉ;vŒíÛkøw†'NpÏ=÷ð×_‘–fk¨uáÂ…Œ3†ÄÄÄy»ll_-Y²„üü|¦L™Bll,^^^”——sæÌ™õss²oß>† ƤI“:t(±±±øùù¡×ë)**">>ž]»v]õœƒ#sãÀŒ5Їzˆo¼‘ÐÐP|}})--¥°°œœ\>7âãã™6mjµšàà`L&“U8:aÂÀâmÙ•4¶½f³™Ç{Œ‘#GÒ«W/‚‚‚Àl6“››Ë™3gX½z5«V­ÂlvíûÈ™u$I³gÏfÕªUÜÿýôïߟ°°04 ÅÅÅ$$$°wï^ j»¾Gæ•+Ó:‚Édâ…^`ýúõÜ{ï½tëÖ ­VKZZ›7oæ›o¾!/¯nÇ-Ms>¯\97¥¬¬ŒÇ{Œ[n¹…‰'Ò«W/0dffräÈV¬Xa#Nn)œ]û-ÙÏUÌŸ?Ÿ{ï½¹\΂ Ðéêÿýy-ÔY @ ‚¿+²Ë6¼ù曲S§NÉrrrd%%%²èèhYNNŽ\­V+ÊÊÊäf³Yåîî®2 jÀM.—{H’ä%I’ßöíÛW?7 ïí?Ɔäô–®Ž@ @ ‚ÿ£,Y²Äîý¿ÛÞ®@ h8rÿ6x<²€Š/`Lp½èO ®gÚµkdž ˜6m›6mjá @ @ ‚¿;öt¾ƒ /“É d2Y‰Ùl.*U*•¾¼¼Ü —Ë f½^o 2_¼xQòòò’‚‚‚¤Î;Ko¾ùf-Kt×…eAÓòôC3Zº × ¢¯®}Ä @ @ @ kQõ¸Ër!™1e´¼g@@ ¸Öxà‹çÒ£G…|@ @ @ð÷@”@ @ @ @ðÿÙ»ïð(ªõãßíÙôžB $!¡‹ô&( T;vä*‚WÅîU¯¨¿k{E,ˆ"¨Hé Hé½H€ô¶É¶ß›l²ì¦î&|?ÏÃãffÎÌÙ3eÇ9óžWñ§ö&–¬˜OïÀ’Œ~‘h’¯E“2 ÓX 3¹¦BÑ8>úè#Ž;ÆÖ­[IOO§°°¨¨(FŽÉ7ÞÀâÅ‹9þ|#×T!„B!„B!†( !„Bh›È½ÉñÓî^¶–Üc#ÕHˆËßýmÒ<ÆaZ€NÛHµB!„B!„Bü£)U¨[ôµ®ÒEÌéû0¬x£+%„•JEÿþýÑé*¿NîÞ½›‰'6`­„B!„B!„¢qI€òEdíÎE²ÝÞí®k”í !„ââá£Qã£q¼5T([ÿ÷kîöغ.·÷™ÞØUÕpç˜ôÔþõѨ òªü%!„B!„B!„h0J5ŧ¢nÖE` ï@*-VC.æ³û1X‰qÏB0ËÀ¦Bˆ&FÃ|@=hÖ¬!!!hµZ²³³Ù³gK–,aΜ9rB!„B!„BüsH€òED……âòuÝüå]…ËÆÕs–6v.+·/ù½a¶#»â"s1“ïmßÃ{Û÷4v5„B!„B!„LÅ”lžFÉæi]!„¸( >ûì3>ûì³Æ®ŠB!„B!„B\4”]!„B!„B!„B!„B!„B!„B!„B!Ä¥C”…B!„B!„B!„B!„B!„B!„B!„5&ÊB!„B!„B!„B!„B!„B!„B!„BˆS7v„—¾€@Z&4'3#›c‡O4vuÄeBŽ+!–BVkc×B¸âí«E©TŸ[ÜØUùGsA!„B!„BQFÓf8ªˆ$L'·b:°²±«#D½ "11‘óçÏsèС++„µ¡P(xðÁQ«Õ¬ZµŠ;w6v•.[õum $11‘ììlöïßï±õ Q¹WB!„B!ê( q jÝ&ß|½·o¼ø>×lnÔúÌ]ñ-­†ßúü² $mÍ]÷ÝBrÛ$Â#C1M¤9Ë=‡Ø´îO~_±¾±«xYºÜ+!<éûÁ}‰öõv9oø‚•ä—TY¾ERcïÆ§¯­ãÔ±œú¨b£úzÙíè¼\ßö~öúzÖ,>ÜÀ5ª^P¨7÷?ݦ- ÷aê[YõëÁZ¯çê Ü4¦‹•YS¶±fIí¿k».Q\5´­RÂò¢¸ØDN¦´Ô\vüqšß¢Ø`ªõzëS]ë\—sáÑŽÉ\ß2Öå¼W7ï`Ù‰Ón}!„B!„B!DãÑõ{…ÎKÞÙÆ®ŠõnÆ hµZ^yå•Zî¸SVˆ2qqqŒ?žöíÛEII §Nb×®]¬Y³†%K–4vÅE C‡<þøã,[¶¬‘ksy«¯kûêÕ«ñóócÒ¤I ,ìî½÷^þûßÿ:M?xð ƒv{ýr¯"„B!„BÔ Pâ4æÁ;‰nÚ€?þ¯FP¾œµißšw§¾†——Î>Møø‘Ô’ävI ,ÄeH©Pé£'­ Ë%”JÕ`2Sb±8L³VS•ZÉØgzЬe¯}1”™ŸmcéÏ{%ƒl#óõÓÒ¡[´[ë ÷áÞǺ¢P*¸ÿéîüµé¹Ù†¯côc]x}¢Ã4oµo-MšúÓ±{ Û7¦rîL¾[uõ¤ºÖ¹®çB‘ÉLn‰ÑašŸVƒÂ#ßF!„B!„B!„¢á(•JbbbHMMÅrA¿c}êØ±#ß~û-z½Þ>ÍÛÛ›ÀÀ@RRRèØ±£(  ÀÉ“'Ù»wo#×F!„B!„BqÉ(€®I IDAT‡‡…еS[ZÄÆ€Åb!3+‡ý‡Ž²þíUhÑ69Q×_[åúgþ¼ˆ]ûjŸ•NˆÆ`6›íŸM> ÏûÏËâ奣 ¿Ï?˜ÆÖ?þÂl¶JË„æ]=!D=èÊÿztÂK¥bð¼e™.ëì';÷1ÿHí2Ž_Ù»ÍZ Ñª¸û‘+éÐ=š)¯o ë|a}T€Á7µ¦UJÑÍ8{:wž_]oÛ2–* ´:U½mëbª·'ƒ-70D_ãåîš;ú^('³ÈeprCîߊܩs]Ï…)ïgÊߎ#{ÏÚŸ  ƒ›!„B!„B\êü”~|>•$mkž:÷«‹~«Uù+¼:ÓË«/¼:¦Š Ã|ž»ÒFÕ¸üM¾·ðLðó¼šù2óòç¸\N‚Á>×1Âç´‰x)¼È´d°Õð'ßå~ÃAãZÕ»¡¹ÛÎ5¦P¢Žï‡&iª¨v(¼ƒ°šŠ±dÀtx Æm3±_<ƒŠË›º)„•žÒ÷CÉ_ÎËøÞ~c+d>Å›\¯KÓ¼oÝ•  «ÌiP² ~sj½}F1bÄÞyçrrrèÚµ+F£±šRBT®OŸ>|òÉ'èõzÚ¶mKaaýõ^è7Þ@¯×“ŸŸÏäɓٰaf³™ˆˆ’’’¬ ¥uëÖÜ~ûíôìÙ“ÈÈHÌf3GeÍš5Ìš5‹ÔT׬aÆqã7’’’B@@ùùù¤¦¦²uëV-ZÄ–-[œÊÜ}÷ݼøâ‹UÖ'++‹Î;{ä»Õ·’=YˆËÍŒ3øùçŸí?öØcÜ}÷ÝX#!„B!„BÔÔE ¬P(xUzu»¥Â1Y“ˆ0šD„ѱm2Ÿó#Ù¹y.סÓj¢ªB4˜/>ú–°ˆP¼¼t|øÖç]ËV‹øXb[4àÃIŸ³pnyçFê‰Ólß²³±ª&„¨GÞ5^ªF+À¦UÇ8{&‘wµåŠ^ÍP( Ý•Q žÀì¯\¼ä!ƒnL""ڀ쌢zÛÀø‘?Ù?ÇÆóúWCëu{‹‡³8{&Ÿð&¾œ>žÃ©ã95.ÕVÿÉVÖ-?V÷¡i‹@ôÞ®ï³rÿVäNë\B!„B!„¸ØE«cx+ô´U çJ[];zš6Ú¶Óu m×1ØgO?Wírj…š7Cߦ¾ŸÃôU$×ù e ÷`^ΜȒ‚…5ÞvCr§kK?b2ê–}¦)´jT­QE´F“2ŒÂYÿš®Þë"Du´Áï>Ûç‚* NV€ÿð¹ PV˜¬¥?hÀûH¿¬% Që†qýõ×`0 _¿~,_¾¼‘k%.e>>>ŒJBBñññ¼òÊ+üôSyßÞ±cÇøã?¼NõE¡Pðä“O2vìX”J¥Ã¼””RRR3f ]»v%/¯ü=8•JÅG}dÎ-@@@)))ÜqÇtïÞŒŒŒù.!11‘ØØX¹Þ q™)))¡¤¤Äáo!„B!„B\.úå@?ºwî€R¡àÀáclÛ¹—ŒÌl|}ôtéÔŽÖ -ð÷eè ~|÷Ó—ëÐélÜG§òÝì_].c,‘QdÅ¥ãÐþ#üë–‡»—½ˆ¨ûç ¿onÄš!Dý:²/ƒwž_MÓ¸@FÜÕ–˜¸@æûwcWK¸©¤ØÌ‹ãÑoH+, «~=„Ùd©qù˜öÏ{¶§ñë¬Ýö¿³3‹8²ï¼Gëë îÖYÎ!„B!„Bˆr*TÜèw3ãÆWé[ëòÃ}GòŸ ÿ¢Qh8a:ÁÒ‚Eì(þ‹S¦T ,5ËÎÛAב‰Á/cÅŠ **\òþ€qôÑ÷™é¹Ó˜—?‡|K>mtmy<èiš©›ñBðKl7l%ÝœVëïS_Ümçº0î[‚2¨ÆÝ 0Ÿþ«!¥o8š”!¨“¡ ˆB×ûa ‹'6H}„¨Œ2‚^”`Üyº^.àið¾ÉöÙ¸ò¿³-¯P‚&|FéÄåœN=ÈÈÈ`ÆŒ<òÈ#Œ1BöÄ%)::Úþù·ß~kÄšÔ¿‰'Ú3‚îÙ³‡éÓ§³wï^”J%ÉÉÉ :…Bᜠ0zôh{pòŠ+˜>}:ÇŽÃËˋ֭[3pà@4Ëàä™3g2oÞ<ûßk×®Å××—É“'3cÆ ,–š÷!6¦²6ÈÈÈ`ëÖ­\!„B!„B!\ÊY9¹Ì[´Cq1ûu˜wàðqî¾u8‰ñq$Æ7G«ÑPbt4öÒéÈ/(Ä`(nz !.}eƒríBü#œ<šÍGÿ·•JÙlmìê\”Jjµm4s«ÕŠÉxqwÖçd˜ÿ]Ýl}|Ë3Ò øEÌV3oe½ÎÏy?b¡vÏÒ‚UÁ¼: BÛ™¯1.ðA”.—U¢ä&ß[˜žû g`Ÿ·¾h-K0;j>z…žA>×2=÷ëZÕ¥¾¸ÛÎueÚ·Ó¾å@ù³/ËùC˜Žm@¯Ò nÕu|ßz¯‡URCР K.d=í:ÀX׫<8¹h!dÿT¼Ü˜N@ÑbPø4H­̈#P©T,Z´ˆ9sæðÈ#пüüüœ…¸ØyyyÙ?5bMêW¿~ýìÁÉsæÌá?ÿùf³Ù>çÎÌš5 ooo§²#GŽlÁÅãÆÃj-ÿ ?|ø0¿þú+ …ÂåvF#Æ ïÓ••5 äææºÿÅРAƒ[ö¥T-„B!„B!Äåî¢Pøk×¾JçíØ}€Äø8”J%þþ¾œÏÈrZFïe P.,2Ô[«Ó,Š—'ý‡è¦M˜ûÃB¦¼?­Ú2zo=7Ý>œ^Wu£il4Þ>z ŠÈÉÎåtjÛ6ï`ÆW?UZ^§ÓrõuýèÓ¿­Z·$0(“ÑHNv‡aÃï›Yðó|¿k®ëÇÀ¡ý‰OˆÃ?ÀÓ©i¬]µ‰‹VqïƒwÒ¥{'[Ö¾ekùpÒTŠ ]w&ôЃ7_GRJ+¼¼t¤9ËúÕ0sÚÏdef;,«Ñ¨Y¸öôÞzÏ_Îk/¼ër^^:®ý­NË”÷§ñÝ—?:-ÓºM"7ß9‚Û@^noßìésØõ×^÷¨Ôˆ›¯ãÉâäñSÜ>ìþ*—íÜ­ï~þçÏfpýÕwpË#yøé±NË=|œ»¯_íö‡Þ0ˆ”vI´Lˆ#4,¿?TJ%gÓϳeãv¾ÿz6gNU>Z¼Z­æÆÛ‡1phšÅFƒBÁ‰£'Y¶pTÒÉQQmö¯»måŽñ±|3çS§éË6ýì4­²c j÷}+  ¢[¯Î´ë˜BË„8"£ÂññõA¡CQ1gN¥³hþ2fÏøð\[»u$4"„€4Z Ù™Ùüý×^~ún»vT~.Զι{\AÝ®±u54®)ÂiàG¸·zµƒÉÌ©üBÖžNãçCÇ)0š*-or+®ˆ!ÌË RIvq »2²øéà1vgT~lèÕ*nŒoNϨpšúúà­QSh4‘[bätA!ÛÎfðýþ#/[&Æ×‡»v Ú×›y‡Oðù®ý5j³aÁŒhÑŒv¡Aêt˜­²ŠK8‘WÀîŒ,–8ÍéüBûòZ•’å×Û:ÿï¿XyòŒÓ:WÜ0RÉG;öòÓÁc.·Û;:‚-š‘€—JEZaΜeÖþ#d;¿½çïÇ´½œ¦/9ÐiÚÖ³<¾ÆuVõÖÁÜßœaÁè´ä—ù;#‹c—‹{”2žØGžTÓ€LµFI«ã¸¢gSâBð Ô¡P(ÈÍ2pöL;7Ÿæ·Éϵ òðõ²ÛÑy9ß~¶ëÅ÷kîvš>í½Í,›ãxÖÄ—ö]£isE$ѱ†zãå¥F¥Vb(2‘q¶€‡²øaêvΞöü 8í®Œâ™I8´ç<Ç-ª¶ŒV§bÀð:÷nFL\ Þ¾ E&ò² œ;SÀžíi,ýy/†¢Ê¯WH`Øí)„DøPT`äðÞó,þq/»¶:Ÿ#•µ3Àg¯¯gÍâÕn§²²½·¤÷à–NÓ'Ž_Ì¡Ýçª,[›ýk/S‹vv§ÎÕ‘àd!„B!„BüSŨ›­Žá¤éŸdȆü³®Fe½•>ü_È«(QòbæYR°°ÖÛW¢ä!¯ª ãÛÜiÌÎÿqVº|¨* e› ëæŸ5§³·d7t‰PE¸\ÇØ€ñtñêF˜*œ@e…–,K&;ŠÿbfÞ þ.ÞQeu ƒ|®¥Ÿ~‰Ú$‚”A1’cÎá q?k‹Ö0/ß±¿ÉvvOåϽ̧v nÕ…ZgK?ku?øGÓî¼®yKÖ ¾º¡ÊeU±]ð¾é¬ùçÈŸr­óüÈ4nCÝ´ }Öâ<̧þ¢äÏï0ŸÞYõºÝ(ëŠB€÷¨¯PÇbÉ8BáÌa-v|.­Ðx£é4 uË>(ƒš¡Ðú`-)ÀjÈÁ’} óÉ-”lþ¦ÖÛ®Ž®ÇXTͺ¢ð Cá€B¥ÅZ˜…ùôJ¶Í¬æû*Ð$ D2 UD /¬¦b¬…YX2aIÛ…qÏb,Ù'=^m{ÀÙσÙùq8~¥]覓ó*T6‚µžÆáT·º M»QE&£Pë°ä¦a:²†’-ßb-̬ŸR¬¸xñbNž<ÉîÝ»IIIaàÀüü³sß¶½¾j5÷Üs#FŒ ..…BÁ‘#G˜?~¥Áž(ëoooFÍ€ˆ‹‹Ã××—üü|²³³9qâ7ndÊ”)et:{öì`„ üúë¯NëÝ»w/Z­–W^y…¯¿v¸bÔ¨QtíÚ•ÄÄDš4i‚EEE?~œ¥K—2}úôJÁÝ)[fàÀÜ~ûí´mÛ½^Ï©S§X¹r%S§Nu™!·LXX}ûö¥sçÎ$%%ŸŸ …‚ÂÂBRSS™={6ß|S~ÝIHH`ñâÅNëúûoçp7lØÀ]w¹ÿ^Fm·;iÒ$>ûì3—ëiȶrׄ 8zô(Ï=÷œCprE………NÓš5kÀºuë‚“+ªlzcªËù[™¦M›Òºuk€J³Å»{îו'¶ën[µoߞѣGÓ¥KBBBÈÉÉaëÖ­|ñÅlÛ¶­ÒrumhÙ²%“&M¢G„††’••ŦM›˜2e {÷:¿§4nÜ8žzê)Àðò¤ó½H×®]ùþûï¸õÖ[ùóÏ?=V_w÷Qm¯WÇgäÈ‘$%%ÈÉ“'Y¾|9¿üò &L wïÞ˜Íf-ZÄ«¯¾êòÚu?6ÜU×ë³;ãxv÷wßÝߣº¶³B¡`èСÜxã´iÓŠ‹‹ÉÈÈàÈ‘#ìØ±ƒyóæqüøqÖy„ ôìÙ“ˆˆ‚‚‚Ðjµddd°uëV¾þúk¶oßîTÆç‚'„B!„B8»$”«RRRdd¬$(ÌÇ[Ø2(7†?y ­ã¸ó_·°nÕ&vï¬<è: П§M"¶ES‡é~þ¾øùûÓ, •JYi€rrÛD^zëšDG:L×hÔè½õDF…SXPä±åÛiøÄö¿›·lFó–͸ë¾[–vã`‚‚xvÂÿ¦«T*ž{åq¹Êaz³æ14ÃëòÌÃ/9 &¶lÜNŸ=èÚ³3 …ÂåƒöÎÝ;¢-Í‚»vÕF§ùLÍÿr¬gpH}¯îIŸ=x÷µO™ûƒóCãº8wö<AÕ.ÀÙôóÙ6ÀCOÞ‡¯ó°ÐÑM›Ý´ ×\×—ÇÆþ—½.‚}|½™üéÿhÓ¾µÃô„Öñöc»2uÙ¿ÝVî¨Ë÷­è‹™ïêrž¯ŸšVI-ðZV>z°§Úª[ï+iÝ&ÁaZXD(ýõ¦ß5½xëå÷Y8w™Gê\Æãª¢Ú^cÝñ`»$|4Ž?>5 Aþ$ùs}ËXþ³~+û³r\–ïÖ$Œ¤ öU˜Þ‹«bšÐ7:’I[w±èXªS9­†úu#Öß×aºŸVƒŸVC´¯7J…Âe«;e/üî AþܑԂu§ÓÙSE°½J¡à±Ž) »à·LŠHo=‘ÞzºD„R`4Ud\*…‚g¯lÇ5Í¢¦7óó¡™_×5áÙõ[« ®«±m¹#©…ô /}¢#éÉ{Ûw3ïð §ržÚG -¡MMìCh¤óoKh¤¡‘>´îÉê…‡<¶Í«†¶âþ§»W:ßK¯&:6€èØfM©¿Ž´Úóæù÷Ò¤©¿Ãt_->¾Z"cüi{eVþrªPŽK ±ÖªèØ=†ŽÝcøêíM¬˜ Þê/„B!„B!þ™fçÿÈž’ݬ/Z‹ ~J¿—½Ù÷”l1l®Sp2À½÷Ñūۊÿä£ì÷«]>ßšoÿÜTËVœ‚•¶gléæt—ëè©ïE²¶Ã´pU×xb€÷5¼šù2¿äÏsY¶¶-¯†¾I”:Úaº Þjoš¨›P`)p Pv§ë‹*º=æô½ N°æÛ Tè]gÀ®HémÛO–<çý¤ëýÚ.£¦)¼ƒK3>_…á··0þåºݲ®(´>è¯ep,Ö¼tŠæ<✬ÀûÖ/P†Ä9N÷òGáå2°) ¥²^”Uq=QE¦8n×/uâ5¨`Xö Æ]΃ +4z¼†½‰:®‡ÓtE€e@ÄõÀjȧdÛ÷¯w¿A?Ôö9÷m(Þäz9uKДv5L«ÑõrõB©ÂkðKhZ;Ò+ƒcÑß…¦ÍŠæ>Z§à÷êÄÆÆ’””ÄùóçÙ²e K–,©6@Ù××—iӦѱcG‡é)))¤¤¤¸,㉲î ä‡~ >Þ±ÿ8 €€€bccQ©T(ùÏþƒŸŸã5Ù×××þ}ïºë.î¿ÿ~—Á´î”U©TLš4‰#F8LoÑ¢-Z´àæ›oæþûï¯4 lÞ¼yDFFºœçïïOrr²Ëì¼—¢K­­âããi×®S¦LqÈh\ùùùøúúÒ´iÓê¾Hxúü8Ð6¸xaa!ë×;Hs)s·­žzê)Æç0-44”Aƒ1pà@^zé%¾ûî;§rum/sà Žׄ……1lØ0®»î:žzê)æÏŸï0õêÕöå=zðÃ?8­³K—.€íœqèXWî죺^¯ÆŽkÊÛu$>>žñ㙌5ŠÐÐPxà§m×õØp‡»×çºj¬ãÙß}¨ûï‘;íìííÍÇLŸ>}œ¦{{{Ó´iSúöíKnn®ËÜù íׯŸý÷°Ldd$C† áÚk¯å¹çžã§Ÿÿ¿ÌÝs¡±î'…B!„âŸä’PNN´ýOã¹ó™ääºiÌÇÇö?»&“µZ…ÉäzÊúæðwD“°*ƒçîyà6b[4ÅXbdê‡ÓÙ¸n Ù™9h´""ÃHLާ°Àuâ– q¼ûùkxû豘-,[¸Šu«7q:õ …’À Ú´Oª—ཀྵNgö÷ó騹o|ø"sfýÊWŸ|G÷ÞWòü«OÐëªîĵŒåèáò‘ÕÆN¸Ç̹bñjü¼„¼Ü|Ú´Of̃wÀ›¾Äè›þ͹ •Öl¦Ï€‡ŸØ‚ƒûœ³öìÛ€Ôã§8~ÄqÔÄ;ÆÜlNÞ¶y'S?ü†S'ÏÐ46šñ¡M‡ÖLøÏìÚ±‡ƒûÜ ;—n‘Î×ÏF]i@=@Pˆ­s¾b éìïaÞOåÙ˜0š[îYëz¬^±ž_~ZDVfÞÞzÚuJaô¸Ûññõ`=Á#p ö~úÅ ö Ò…s—±dÁJ ò h•Ô’›ïá ~¡ºì_wÛÊGŸ`À•¶víÓ¿;/¾ù CûŒ¢è‚,ì&õªëñlW:ZãîûXºà7Ž:FnvF£?_ââcÎ_OµÕןÎÀd2q:5ü¼Ô5­S÷Ø½ÄÆ5åñçdݪMädçº]ç2îWÕöë «SÓ˜}ðyF#Þj5Ý›„qkBÁ^:ÞìÕ™-_G†¡Ø©Ü×»b²Z9]PHÑ„Z¡ )8€qmiæçËcSXw:ÜÇÎÈ{ZÇëï‹Ñbá‹]Ø”vŽìâ4J%áÞ^$PXɾw§lEáÞŽAæÞú*”Ǥ´²'ïÉÌæ‡G9‘W€÷ÖóR·èTªj·[[÷·I°'¯jHñ)a<ÿþ@4šª÷᱃™äf—·³¡°üØÖêÔöDé‹c‰óý™Éäøò›F[³c&?·˜siùÕ/ØÆ<ÑÍ)8ùB™ç íY¦kë·®dÛ†T2Ï•ÄS± Z]ÍϵŠe+f%6›-˜ŒÎ/#Z*dvwÿÖ•;uB!„B!„®e˜Ï³¶è÷:•êc{A:Ó’Áä°÷HÐ$¢ ¡ÀZÀîâ¿ù1o]d9.¯iÅ}þmÉâùóÏ`©,j…–ö–졵6™1þ÷³²py–ò¾ã.^Ýh®‰Ãh5²¬Ðõ Οç|†Éjâ”)•|Kj…šdm|”æš8ž zŽß W“cq|6ÞJ“ÀÇáSðVú`ÁÌâ‚E¬)ZMªé$J”*ƒh§kÏßÅÎAŠî´³')t¾(ÃZ¡í8 u«þXŠÏcë·äŸ-ÝŽ¨4`®<(Ká €µ´Lm—{ìÆæ“R¼î,Ù©(ƒš¡ëóª¨vx]õ$æÓ;°œ=à±².ëèåþÆQE¦`É=CÑ`ÉMsZNÛí>[p²¹„âuŸb:ºka¨5(ý"QE$a-©ŸAÖK6|–œSX‹óA©F™Œ®Ï#(ƒ›ã5àL‡ÇZä8è®îšçìÁÉÆ}K1íúKþ9jŠÀô×½JÏ÷ïTä}øÞkû\0 ~¬|Ym§òφUõZ-'º^ÿ¶'÷-Ÿs.Öâ\TQíÑõ‹B„þú÷(˜> kÞÙjÖV;eAz+W®Äb±Ø??ñÄôìÙ/// ƒS¹×^{Í´óÓO?1wî\òòòHNNfôèÑž,뎇~˜øøxJJJxûí·Y½z5™™™hµZš4iBÛ¶mÉϯ¿>¡Å‹óõ×_“““ƒŸŸýúõã¾ûî#,,Œ/¿ü’¡C‡rö¬ëý[—²O=õ”=ÐhÁ‚Ìš5‹ÜÜ\:uêÄ„ fêÔ© 2„´4çëN™íÛ·3oÞ<8@VVF£øë¯¿–=xð ÉÉÉ€íØzï=ÛõÿŠ+® ¨ÈñݤÊ2þÖEm¶k29÷•6F[¹£[·n€-Ëñ²e®‡¯Êo¿ýÆí·ßÎm·ÝÆæÍ›Y¸°nƒÀ4$OŸ¿e×¾Õ«W;$4¹¸ÓV<ð€=uÓ¦MLž<™'NÇ3ÏýúõcòäÉ\}õÕ´jÕŠƒÚ˹sl¸ÃS×çÚjìãÙ{¨ýï‘;íüÊ+¯Øƒ“,XÀìÙ³IOOG§Ó˻ヒªïtÕå7ôý÷ßÇd2qâÄ òòòÐh4´k׎§Ÿ~š–-[òòË/³|ùr²³ßI«ë¹ÐØ÷“B!„BñOpI(Ç6¢c[Ûƒƒe«7Tº\@iFÂAý{2¨O †bΤŸc×¾ClÛ±‡’ZŽJY[«–®%!©%9Ù¹lýcG•Ë·í`{¿lá*f~ã8²í¹ôóìÚá:ó*À“/<„·ƒ¡˜'ǽÀŽm»œ–Ù¼akm¿B¤9KaAëÿƒãGO×”­üENv.K¬dÔ=7Ð2!Ž”vIöåȨpFÝe qѼå¼>ñ]ûúî;¶-;øú§ñðcÌø;xó¥òÒ7®ÙŒÕjE¡PÐëªnNÊ*•ŠÞWÙ²,®]å8¤rXxcÆßÀš•xá‰×ìwY™Ù<öÀóÌ\0•Ððn½ë^y~²Ûís6­tdp…‚°`ÒNÛ8l m;$óÙ{_³sûîÒúٲѦŸ.(e±X().Àn1×-¨gÿîƒlÙX>BäÎí»ÉËËçÉÿ>D³æ1¤´Kr8ÆZ&ÄÑPo¾Ÿ6›OßùÊ>ïà¾#,]ðË7ÏE£q¾œÔuÿºÛVî°Z­öv®8˜AI‰Ñ¡ý]qçx¾ÐÆ5›]fïÞ»Ëñ¥OµÕƵ[œ¦­[½‰ãGOòݼ)huZºö¼‚e +ïÙ¯iÁ½ãêBµ½ÆzÂìþ®wOf6´t¢ IDAT¦gðnß.é´Ü“Ï;Ûv;•ÛTº¿*Zú,'r ˜>¨7Z•’®‘a,?qÚa™¶¡¶ì×ËOœfÖ£óÎØQy °;e+Z•z†V¶ ËÜ#ÛÎeTºl¸·£lÁºÏœåù Û0Wê=”“‡Éb¥1“5á­çÖ[‚ÅÇRyãÏòÑGeç²ýl&_^Ó­†ÑÉñLÚZþiJJ¯«ëj´XìÓ+ª÷âÞäV¬=•ÎÄMÛíAÌYÅ%<±v 3õ%T¯ãÖVÍyu‹ãKhžÚG E©TðïÿörN>¸ûËçîçØÁL EFôz M[9¥ŽY>Êé»3¯'"Ú6Šì®?ÏðÆ“+j]—][Ïpt_y¹Å”›ñÒ« òÃdlØÁh*£ÑªèЭ~ºj×µê׃,Ÿ»«FÞÝ–®ýbÐêTtíËâŸÊ»+¶sl|0¯5´Æu®Xö›•wØ÷óúåGù쵪G"÷ôþ­)wê,„B!„B!<+DJsí9í oǬ¢Z…–^ú>ôÒ÷ዜ)LÉùÄ©¼%χ¼ˆZ¡æíÌIœ7×|€Ú÷³ßæãðÏi¢n´È|œýk‹~§³® ¯†¾ À»Ù“I3qY~}ÑZ§ikŠVsÌx”Ÿ¢æ¢Uèè®ïé”úÙàÿâ­ôÁ`5ðÈÙñl/vÎPµÉPy_vcRèüð}ȱïÇrþE‹'Ö(P·¦¬y¥/Ä+(}B±äÚö-8¸=Åk?Ä|Êö»Â/ÜVÜòý¤ð G×},¦ƒ«(ZðŒ=»³¹0“¢ÙÿÆg̾ah¯¸Ãâ=RÖ…oÞ7~ˆ24KæqŠ~þ·Ëàd(ÏFmÜ»„’?¿u˜gÎ;[/™u˘Ž:?5^ƒ%ó>÷εuó÷.¶ÏW†'–Üî˜aÅŽ+Hß ×¾ Ô_€²Wð±uãS´rß©zyu3ÛÍgÀ’Sõ²ž¤ôo‚¶ówý‚aéÿÙçYÎÀ|âO|îþ…—?ºîc1,{Å£Û4h` Ò+³ÿ~{ÐV¯^½X±Âñ¹|RRC† `êÔ©¼ñFùþݳgsçÎe÷îÝh4§í¹SÖ]W\qóçÏç‹/¾p˜—––æÑ옮ìÚµ‹­[Ëß±Ù¾};ëׯç»ï¾#$$„‡~˜^xÁ#e£££3f ³gÏæ™gž±ÏÛ³g›6mâ×_%00Gy„çž{®Òz¯ZµÊeFÌ;¯;V«•âbÛ@ºKJJìÓëƒ;Ûm¬¶rG‹¶þóS§N‘“Sû ÖÛo¿M—.]ˆçƒ>`øðáL:•?ÿüÓ£õô$Ož¿¡¡¡têd•¢.Þ»º¶UDD&LlíòÐCÙƒr322¸çž{X±bŒ3†'Ÿ|Ò^¶1¯íe>þøc>üðC‡í®[·ŽE‹À„ œ2¤®^½šQ£FÑ»woT*•C²J¥¢CÛ`ôk×:ßÛ»£®ûÈ׫S§NQPPÀÊ•+9|ø0-[¶dÆ dee1wî\î»ï>’’’èØ±£=(ÓcÞ¼>ׯÅp<»sϵû=r§“““íÍ3fÌ`âĉNßcòäÉ5 P®ËohÅû×2+V¬àðáÃ,]ºNGß¾}2¨CÝÎhüûI!„B!„ø'P6vê*8(€;nŠB»÷bÏ~çì¹eÎgdq"õ ç3²0™Ìxy鈋aØ ~<<öÂBƒëµ®ß}ù#ÿ}üU>yçKî¿íQ×H+Èβ=ˆNn—H@`Õ÷*ŠOlaÏF:í³ï]'7”ÜlÛˆäAÁöiç3ðõ÷±O8¤?J•“ÉÄWŸ:?¬8~ä$K¬àêëú¡V—+ffd³£4¸¬,¹¢+º¶' ÈÖ~+;Ž<~Í«Ðê´&Þyí{prC‘Ÿg. k¯+jø­«–“KA¾mìÐð”J%ÃnLÛŽÉôÐþlh˜í˜L½ H±¾,ûu‹-˜.¡uK‡y÷ ¤¸„o¦Ìt*k6›ÁE6Q¨ûþ½˜Ûª*îÏuUßmuòø)ÒÓlÍQM›¸]ß2îWªí5¶¾ì8ŸÉ¢£© lZ©¨qÙ“ù¤ÚF1òñvšŸ]ß:8mí–»S¶¢ûŽ0qãv>û{cW®'§Š€ý²ïo±Zy{Ûn‡€ßú406 ¥BÉbåë=‡œæÏËgéñS\Ý,ªVû¨*×4‹B«Rb´Xxwûn§ Ë“™9‡Ð傌ßà¹}ÔP:öˆ±žü±ê8/ý{ ë–!õh6çÓ 8y4› +޲e͉z­Ë·laæ”mü:s7Ëæìã—»øbÒF¦½·¹^·[S*µe…ãÌPdäÜ™rðégœ3‹¬ÿý¼¼t´Jjá0où¢Õ´JjA“èH‡yW ´eg=zø8ö:ªu¸¢ {vî#ã\¦Ëí;l ª 0È3Æeû?²‰mäï6í[ãWšá»[¯Îöå"¢lóOl˜ Û¢Â"{ù…ß519€ÃŽRXPT«õº³/Ö¶ªŠ»Çs]y¢­||}¸ó¾[øhÚ[Ì^:[æ±à÷™|úíÛøØÚétZÔÜ;®\©Í5¶>­=€^­¢e€ó>5w&µäÃ~Ýøñº~,»~ ó‡ à“«ºÛSu.:g<†Åj%Îß—ƒûr›b|}œ–sŲúýT3÷åL5û¬,#ð¾¬Îê´­ºhbÛ<Ò ]×qcé¹é¥RïbÕEûÒï»'3› ƒëѼ忍ÓxÁ¹äÉ}ÔR::þÞþøåv¬–†ïÈi(o7’ï×Ümÿ÷̤ò—zâ“Cæ}¿ænºhnŸo(4rüPùK»Ç0ù»‘ ¿£ áQ~ÔUQ‘³§òí†xîEÁÆâN; !„B!„Bˆ‹G ªüeß73_c{ñ62Í™Z ù»xGNi$á¾·8” Pò@À¿±`ὬÉuÚþ•^]ðSúSh)`Uáo[ËŸÙŽöCO}ïJËú*}íÿ/>øšQKX×t3ËbVóUÄtJ£ u /‡2WèÊûaüR§:7&kq>yïv#ÿãþ΃qÇl°ZP'DËg ò\ß5Ç6€¨Òß6 ®*ª /ÛszuóòÀ`Eé|kvy€²*Æ–1Ñ|æo¬®³j[2ŽØÊëƒPèƒcæ¢ëõ Ê ê_¶÷…Îm×{ñ¾u*>÷ÿŠß„õø>¸ïÛ¾²K+Ô:‡2ªˆdÌçb-t݇^ßJJ*42Ô±5,XE7…:ÂçÚþ©ãÜ®"PžÛ|îP¥Aê¦#¶`a…Æ Ux‚g6 ôïß…BÁæÍ›)((p˜WŒU¶LEmÚØÞ‘Ø·oŸS¹ê¸SÖ]Ó¦MÃb±ÐªU+V®\ÉO{]Cؼa+Ï?ö?žüïC„„s×ý·r×ý·²ë¯½üøÝ<~_±Þ)ã/”gOÍËÍ'3£‡®£ÒŒ®•sÚæ•?$ ¹ ÛõªekyôÙñh4j îÃw_ÚFœÓh5ô»¦‹ç¯¨t»í¯hÃÚ‹ª­§€Ÿ=³µ;Nxéw&~0ˆ€`ÛÈÎÑ~Œz £èÄþgY0sÛÖ§Öz½……åÇVwñˆ.„B!„B!þ™ü”åói:J¬Žƒ:Z YY¸‚|o¢£W'‡y÷øß‹ŸÒ_ ~áˆñp­·=6`<÷øáŒé œÃÓi”(¹Ê{ã"VÓœ·Bßáô1ì*ùÛ¡lœ¦…F¸*ÂaºN¡#HW°zá#ü0•-p®%—LsÿÜí)VC.æÓ;1ŸÞ‰éðô7|€*"mû(ÙVû¬Ó®X²SQ†%ØÕñýlÛ.ÎG‡2 KÎi”ѥ˗(+J³*«b:á÷ÄŸÕnK¡÷ÇZ”åvÙŠÔ ¥ƒ*Z­oþ«±Ði™ ™Žm¤è—§ðºúY>¡h»ŽAÛu æÓ;)Ùú=¦ƒ¿9etöeH ¼oü…_¸Ãt…Z‡Ê!Ûñˆ. \¶æ6^¿kÞPþ /ƒ*B>‡ócÀ|ÊõòÖÒ±<•U$BSh@SþÙÊŽ+k^åƒ'[*´cÙòžpÕU¶Œã®2ˆ®[·³ÙLhh(ÉÉÉìÞ½Û>/4ÔV‡´´ÚøìNYw­Y³†ñãÇó¿ÿýððp|ðA|ðA¶mÛÆ×_ÍÒ¥K²B6„ÔÔò¾ˆˆþþûï*–®YÙ°0ÛoJeFÎ ¯t¹ËÝ¥ØV99¶wŽÊ2)»#55•W_}•É“'3zôhzè!™9s&C‡µo66O¿¾¾¾tïn{fÙ²ª“˜\ªêÚVeÇv—.]8|¸úûçÀÀ@{&ÑÆ¼¶W§â1\1;*€ÅbaáÂ…Œ3†!C†ðꫯÚÛ¦W/Û»‚ëÖ­óxêºëzåÎ±áŽÆú¾óñìÎ=CeÜiç² àS§*¹Á®Gñññ|óÍ7DF:&Fðòòr’÷ä;ŠpñÞO !„B!Äåä’Ê `N>Ÿ‘Å—ßÍ&/¿úŽ¿ÊìÞwˆÓi¶@Âø¸¦žª¦G¬[µ‰›æÕçßf×_{[vÖÿ›ü,Óç|J|¢‹Ì«¥ÿ_n½ˆ‚˜ªS–M¹¦u¾p¹¼Ü|6­ÝÀÕ×õ³Oï}U7|ý|0›Í,[¸Êy» Û¡o1[0–«ý§Ñz¦§òøQ[Gzdi&Û¾×ô$;+‡o¦Ì²×[§ÓˆÁPLú™†ë4¨l”M6Mµ^§;û÷bn«Ê¸{<ו;m¥P(øßäç‹¥¸¸„ßúœ›ÝCÿ+†3¸ÇMŒ¹åaΦUp]WîW3²ügµb¶xðr·Ž„é½(6›ùhÇ^nY´š«ç,åºù˹oÅzÎVixÝétn]´š×¶ìdW†íŘ6!A¼Ü­#Ó®éE|@åÙXÝ)[eß]«¬ýmFÅÓ¢¶œíK×ðÔòÔÏ¥²të£ÅRí?WíÒÐûÈSL%–Ë:{2Ø Êÿʯ[‹Õa^aA &£ãËdgNäòì˜_YòÓ^Š ÕIlΓ¯÷çÉ7ú£R×î|©øÎš§;gƒ»í,„B!„B!.%Öòõ”þ.—9c²½]Ü[f¸ïH†ú gK³NÿJ#Ÿ~‘-Ív0>ð!{Ù&ê&Üë/f<Ç“íel V.çî´Û8d<ˆV¡å¾€¶«@Á¡o®Š ØZÌ;Y“vz0=Nv¦_jîL»•t³ëÝËû.Ÿç¤¦£0ŸÞ €ªyw­×’y e@ê„þX‹²(Ùô¥íï–ý@­CáŒÕhpÈJkjµ€¹¤ú*­GÊ:´Ë±X‹ó@¡Àû†÷Q'\]£ïm:ô;ùS‡aXüby»FµC?ì |îùe˜ç2ëÚ(Ð{Ül*¦xÕ;LJÞ{ÝÉÿ°/ßÞ5Ïu¿ªÕT: €²qÅ4¬€¬'ÀZÊ`þ”®[Sz9A cyŸTÞûjµÚ¤÷üóÏsøða‡Û·oG¥²í¿¾}û:”-ë›6kžÀe=aÅŠôéÓ‡'Ÿ|’mÛ¶¶Ì~ø!‹-r™°b_¼²}–ÕÑhêþIeeË®W ý¾Á¥èRl«²@°˜˜|||ªYºfŠ‹‹™2e £GÆ`0̸qã<²nO©Ëù{¡þýû£Ñh°Z­¬Xᜤ¢¢ú>÷ës»ui«²sÁl6SRRRí?­¶ü>§±¯íU1™ÊûŠ]¿sæÌlA©={ölŽ;wà÷߯—z¹³úzåαá‰í6ô÷½˜gwî*ãN; ¶÷ÓÔê†Ím¥P(øøã‰ŒŒÄ`0ðÊ+¯Ð»wo’’’hß¾=Æ ãÌ™ú(É¿GB!„B!*wÉdPÖé´Üuëpüý|ÈÌÊá‹ï~v+8¹LFfQ‘aøzèá¯'&–,XÉ’+‰ŒŠ`è ¹õ®ë‰mÑ”¾|ƒ»¯Ïùså#qgž·4ùùûèONvncUÝ;÷QTTÄÙ*2Éœ?—A«¤DFGTºLD“òÜ23œG«þeöbz÷ïNËVÍiѪ9Gcðp[‡ðÚU›È8ç<º_Ùv[¶†—Ÿy«¦_ËmG It$ÉmiÁœY¿²réÆ?>†¾W÷äÏ?þB¡PpüÈI,U}YJ#“Ncµ{VMö‘;e+Û¿žl«†â‰ã¹.Üi«VI-iÞ²o¾øË­¶Ï3MÜw˜‚÷¯µr縺˜…VÈŽœi(Ï Ñ*Пæþ¾¼µu+N”Ri´X8˜K©ú`m£ÅÂÒã§Xzü‘>z†4á–VqÄúûò^ß®Œ^¾–óEÅ/[[™ÅÅ€áÞ^Õ.몞«¥B¦v·)ç ÅÄ‘>úJ—‰ô.ŸWqUT1[qM®±eÛ]•z†ÿûcGë{¡†ÜGîÈÊ(ÏB­÷ÑãOZjíï9:J0¾öÂß ¥²ê¿0v‘Ãßí»FóÌ$[¦Œ#û2˜8n‘«b²3‹˜þáf~¶¶]šÐµ_sºôm†ÎËvŒwêõ7·æ×™»«YSí™Í޼Õ}_O©íþõD; !„B!„BˆÆwÞ\Þ7ØDÍ9³s_¡º4…©Éêø\\«ÐÕy»Ý¼z¢V¨9o>ÇöâmNó ­…ü”7‹gƒ_ ­®½Ã¼Dm-4¶Á¡_É|‰%åÏ¢ŒV#ûKöQ`)1›æóø)ý T’mÉ®ów¸˜XóÏ ÐW‘–¶–,çm™ÛþQ¨š´Aé…ñ¯1î_†®Ï#¨úc:± ,™GFi´œGI"ÆýË1,|¾vÛu£lEæ“[)^ñúëßEÒýÐ×(Z¤Ä´¯™ÍFŒ{bܳ¥š¶#Ð\q;Ê8¼oùŒ‚onŚU‰(CldzaÙÿ0î]bŸg5±žÝµ¤Àåc[kÎiˆL©‡ éÚ+ÞÙÏAЛ nÁï@ÆX°^sb,K@§¯žP´¼aêWv\)Jî]Q–f °œ÷Èv¯¼òÊ6öéÓ‡O>ùÄþ÷Ù³gINN&::ºÖÛu§¬§FæÎËܹs‰‰‰áæ›of̘1ÄÇÇ3cÆ ®½öZ‡Œ›%%%X,”J%~~ž8"¢¼Ÿ;##£Š%k^¶&íU~Ì;çùÆ-–òkïÅ<@îÅÐVµU ¥T*éׯ .ôغ·nÝÊܹs¹í¶ÛèÖ­›ÇÖë)µ=/4pà@þúë¯j÷e}Ÿûõ½ÝÚ¶UÙ¹°hÑ"}ôÑZmëb¸¶W¦ºówïÞ½lß¾Ž;rà 7°fͺté‚V«¥°°°^2(—©ë>òÔõjûöíT™9·âvërl¸Ã“ß·6ÁËóñìÎ=CeÜiçÔÔTÚ·oßà¹ÉÉÉÄÇÇðì³ÏòË/¿ØçFöìÙC~~~×WÓs¡"w„B!„BTî’É <òÚ„‡SXXÄ´™óÈË/ðÈzJ3Šë7à§Ï€ÜvÏDFÕ-/ít:_|ô-co “É„Ÿ¿/׎p•yç¶=€­“`аn×Ù¿ýOŒ{¥Ù+ó÷v[[¶jnÏþz¡^ýlÏ Eî;â4ó†­œ9eA{Èõ £k+˜;ë×*·Û¹[Gt:ÏŒXGŸ *:‚Cû°|á*Φc×_{iÛ1™ÎÝ:päб*×U\¤æã[¿CA—µURJ+ÂÂCêT¶.ûדmÕPпNAÊ¥ÃÍý|kUîïÒ:ZøáíºŽ=KÏMƒÉÌ¡×ûÂP! ³&AÒeÛ½"<Ê3YÜÙ¿õmÿNLJñ·Ü׺¼ŸPl0Û?‡„5\Zƒ¢‚‡¿C#jwœÕ–¢B@°ÑhfÛúT>}ušKæ¹ò :v¯Ÿý›ŸëxÞ¤a:âkÿ !„B!„BˆÆµ¯d¯ýsO}/—Ë$h’8f<æ0½ÏÉn\yâÿÙ»ïð(ªõãßÙ^Ò{!”Ђt© "EETT±q­W®ÝŸ^Ûµ_½v¯Êµ bA¤ƒ ½H Ò;„Þ·Íï…%…$»! ïçyxÜÌœ3çÌ™ÙÙugÞóv®ö_Þ©àßç³ÿî)y/÷òº!ÚŠÕªszå¬4«!Ú3÷)öØvŸk=l-Û¸'»¼Â:ªNu/dš`÷ä¶jIžÏ¶éÌr߇Ò6A×î ì» œÀ™¶ m“Îèš÷Î3—×MuOªkÞtu d÷¦îÙ\y©Ï¼Ý YÑ`ñº„ºÝ—wå§Q¶ú=Š¿¼\SúDß;Š%¤üµ3coê:ެ@Ô]üŸõ©¾Jƒü»_ë;€ÿÝ•ËØ¶ƒóT¢5ë$ÎÛ0§Ï+mX¼G rEºVî Æª½¤ÎÇ¢:§³"ÿøã$$$Tù鍊nÜá*ÉmÚ´ €N:yÊÔ†7u±cÇxã7;v,‡ƒÀÀ@ÆW©\F†{²…ÓÁ0¾4hû¾¼Óéd÷îº}vTW÷ô8·mÛ¶*Õà IDATÚ€£ÁƒÝÏ ³sçÎ:÷û\JJÎ|ŽžÏàκºƪ®’““˃¨î¸ãŽòlç¾’Ÿï¾÷íç×°÷>½UÛ÷ïiF£±üÚ·páÂZµÑïýóÙnmÆêô{¡oß¾˜Lu{6ãB»¶W4pà@ æ÷ï_|Àðáà +d_ºtiy†Ø†V—cä«ëÕ‹/¾È­·ÞÊòåËk,ç͹á _îoÙ©çy-–s?op!ŸÏÞ|g¨Ž7ã¼zõjbcc2dˆOúSaaaå¯}ñ¹\Û÷Buêúy$„B!„¢fE€rÓ&QtJtÏÒ;kÎb²r|3ótó¦MhÖ$ €#Gk?“V]M¼u<Ï¿ñw?týA5–×骆:tàù§‚Þ‚‚=·³{ÇÞò€Ç)÷ÞD§¤D/{ÞðÍý§Ó‰V«eòÝ7VZß²Us†tªì2Udu¹T~žåžùyÄUƒ™xË84Z Geó†ª3Y.˜³‡ÃAPp ÷?z—Ïø¯NÊ¡£8"›D2䊤=Îöd÷ƒ‹æ.CQn˜<€ƒû׸­éî™íÂ"B n°>WqOÆÊ›ãë˱:_|q>ׇ7c•uæzÚ.ñü͆îÍyu¶º^c}A§TþøŒ²šÚÜ=ûäš´ Jg‚ór*dêmX÷öjÈxz(¿›;à2°Š ¼©[Ñõmâøgï®ÜÕ©-êC€A_mÙ_ºŸÑ* 7·«|óM£(5´žp¾¬i&]íÏÅ)i8U­¢09±u¥õ-üS^ÖQMæõŒâ37Þ»G†UY¦¢…GRq¸T‚ŒîëÒm£u}uŒÎ—ßW%·Bå^ƒZðÄ[Ãè}y šÄn!ºYíºD2rB"Z]Õ_7³Nœ™l&¦EWßÔ‘èØÂ£ýˆO çº;’hÙÆû *µ›YLiÉ™ëïà«èÜ+†°H+­Ù0µ+Áa¾ ¨Õê4üçûñÜþ÷Þ$õiJp˜½^‹É¬#8Ü‚Ãq&¾¡2çe—P\!({ШÖtîCx”m;Ep½÷·¢Æ:¾B!„B!„¢qtžä2÷ý¹+,#1+ž“I6Ó5£Ÿ¹?¿•,óY»©ŽTšêšÒÖPu&¨!wÐBŠãˆÇòlç™,V‰†ujw§m{m{¸3躓êTÿB¤‹¿¬<ƒ®óØ&Ÿmו}\4ÑèÛ Ç•{Ìè ØwÍEÁÐãwÙ“û=êÚwþâæ5côhjïÀ›ºUQKó)þî.œÇ¶€F‹ùŠ¢éRuaMõ÷ý]YQKÝÁd¾ÌT­g—¿ÖFµ¯S]û®ùå™~M#þ}‡«P¬¡(F´Ñ1|4ÕßjE_¹•¬7€±çY\î2ú¶ðT™ÚÇ»æË -†>S+­×„Æ¡oÅ©²óÁå›ûÂýúõ`Û¶m8Î*ÿmݺ—Ë…V«õȤúÓO?•ߟ}öÙgëtÖ›ºÞªéù™}ûö‘›ë¾¯\ù™‰äd÷çÑðáÃkÜT½¾ò9ß´iSÆŒ¸á*õzS·â8W•í²uëÖåugÏží³ç *ª˜…ðôùv!ºƪ®œN'ü1:tà‰'ž¨6KµFSùþjMç°Á` ÷÷«cÇŽù ·¾áÍû÷´K/½´|ß/^\«v}ñÞ¯oÚ­ïXýðÃ8BBBxúé§/šk{M’’’˜0aPóûwÞ¼ydee¡×ë™8qby ¥/³“WTßcÔX×+oÎ oørÓÓÝ k¢££‰Ž®zB˜ªÚm¬óÙ›ï uåÍ8Ïž=»|B…×^{ñãÇN@@III<ùä“Uî‹·Nžß~M|ñy$„B!„¢fçN xèßÛ 7%õ8GŽ¥a2U=³±ªª”•yfÅ›0æ ŠŠ‹9xä9¹ù8Nü¬Z·jNïn]P…Ò²26lþ£ÁúùˆËÊ_pIÏÎüºpeµå_{ÿŸ8v–.XÁîí{ÉÎÊE§ÓÕ$‚«®AH¨û„wþá9Ë®ªª¼òìÛ¼ýé˘Ì&ÞþïËüºhk~ÛÀñÔ8N,V qñÍ ä£·g4Ì×Á‰ã™Ìüün˜| #®ŒÙbfάÒ¡s;&Ý1NG~^Ÿ½ÿUµÛ™óýn¹s"þ~Œ›xß}1»Úò™'Nòù‡3¹íî9vIÝ;ñÓ·s9rèÙ'³1 D7‰¤ó%xýùwqV4ô†Ýîààþ#$´m…>Пï¾<ÓÇ_®àoÓ§–ß=;÷W·’7mܳŸý >ûà+ÊÊl4kCtLþû3ŸôùÄñL¾úô{nºýZ.Ћwg¼Êw_üı”44 Qáh´UŸys|}9V狯Îçºòf¬öï9@zZQM"øÛô©MF6oH&/7½^OPH &³ïgÒôæ¼:[]¯±¾pS»V„˜Œ¬N;A¡ÝAëànnE§ÃáRùtç>òûó H/.!ÊbfZ—vuZ6gd‘WfàÕd0`®áÇñWûuÇîRùõèqvgç‘SV†N£i1sU\ly†æÝÙ•'ðð¦nE—7;óc ÑÀ%a,;v¼Ê²‡ó Yœ’ÆØ&ŒlÙ ?½ž¹‡Qh³èÏÕ­b±Ôðãïüéô‰"Ôdäþ=øß®/*Æ Õa1¡©æFí‰â¾Ù{ˆ‰mâÞ<³NË/RhwĤvñè4 ù6;Ÿíªþº‘RPDN™`£;;¶A«Q8[€¢@‹?šùYyÿ=åå3KJ™±k?“[se˦t aöÁR É.µaÐhˆ²šéÂàT=£}uŒÎ»ÍÉ/¯á‘—•gn×%’v]ªž…6yCGæTZ¾sK:]ûžÉ|í”$®âùðÞÉô"íÉ:»ªWT—ʦU)ô@@‰éÿòÌp±kë rNWU½Nš¶$(ÔÌ Q­4ªrÐ|EüÞ0“å¨*lZuŒ~ÃNío°‰é¯xîïNí¯Ç6éø !„B!„BßñÓø¡œŠôóÓœÉÆgÒ˜ñ׸³*:T%ge-þ8ÿCÞ ÿQºhÞŒx‡ç¼Á1Ç1ZZóTÈsèù®<¾-øÚg}]Y²œ|Wš@^ ‹·r^gCé:JÔbõ-¸5à6ú›ðsáu÷ÚöpÜqœh]4?‚I1±±l¹Î\ Šž m¦³­OSQy!ûY>ˆü/fÅÌ‘Ÿ°¸x«JVêHÅ©:°jüh¥'Xì‘õù´úŽsý)X'}…ãÐjœ©[qfº‡­ah[ôÂÐåZ÷¾gcOþÁGmN;ΓÐF´AÑê±m>sü{ÁÀ‡Ê³ÿ:Oìò¨ªdP¶îŒ}¦¢ï8m³K°'Ï•}µ( t4MÐ6M¢téËîÀQÔ­–£Œ’ŸÀr݇hÂ0~â¯nÁ•{Ô£˜eü;¨N;Ž=‹q¦ï@-ʭΤÝiì™ýMß^ßQ­Ä™±Wþq4Ñî€b çѨ%¹ 5 ˜ƒA_ͽ?G%¿<†yì¿Q VLÞòY¿¼‘÷`ø4aødއŠo‡¢oÁ4 I`úÖîeŽC€ †¾ï“+?Ûï_`èq3úÄ‘( öm?¢– î„¡×m Ñ¡–æS¶öcŸ´J›6mw€ruŠ‹‹Ù¿? \zé¥å}iii|øá‡Üu×] <˜o¿ý–Ï>ûŒÃ‡£Õj‰ŽŽ®6˜Ç›ºÞúüóϱÙlÌ;—mÛ¶qòäIôz=Mš4aâĉåÙøNV4kÖ,† FDD3fÌà½÷Þ#%%£ÑH“&MjÕç{°°0–.]J~~>‰‰‰Ü{ï½X­Vo½õ–Ïꦥ¥ññÇ3uêTÆŽ‹Åbá›o¾!??Ÿ¤¤$î¹çt:¹¹¹¼ýöÛuÉÚ9xð YYY„††2}út´Z-{ö¸ï‹¶nÝš¸¸8^zé¥i»..„±ªÿýï 6Œž={2iÒ$’’’øòË/Ù½{7Š¢CÏž=éÕ«#FŒ@=u_Y§Óñ믿²uëV-ZÄÎ;ÉËËÃjµÏ­·ÞJ»vî Z~ø¡òg·^¯Çl>ó]æt`´Éd" À=¼Ë墰°Ð§ûëÍû÷´aÆî²Ã‡ת]_¼÷ëÛvë;Vééé¼óÎ;Üÿý\{íµôêÕ‹/¿ü’™™‰Ñh¤iÓ¦tïÞ§Ÿ~Úãù·Æ¼¶ŸÖ±cGzôèAnn.AAA\vÙeÜ|óÍ ²³³ù÷¿ÿ]m]›ÍÆŒ3xà¸óÎ;1äææòÛo¿5H_ë{Œëzå͹á _îïæÍ›÷¤ ¯¾ú*ï¼ó.—‹ØØXš6mÊo¼áÑncŸÏÞ|g¨+oƹ´´”û￟O>ù«ÕÊË/¿ì³~Õd×®]¤¦¦ÓO>‰ÙlfíÚµdggc4 ñø¬ò%_| !„B!„¨ÙE Ü¢™;#elL4O>tgµå ‹ŠyñÍÊÿÖ( mâ[`0èéÕ­s•uŠKJùúû¹ù6(£¢Ì'IhÛªüïŒô“Õ–Õh4´ïÔ“ÉH>—T[nõoëY¶hE¥å»¶ïáïw?ÅS/þ°ˆPÀà*•+*,*P6[ÌhkXQIq©O~œúèí„G†1ôÊ Ü—ƒûz¬/È/dú´gĘ̀>€%/7Ÿù?-æêë® 7'ù?/©±ÝÏ?øƒÁÀ “¯!¦Y4÷cõg8Ÿë£¾ç•Ë¥òÏÇ^å_ÿù?üü­<ôÄ=>íWM¼9¯*ªË5ÖWô W·ŠåêV±˪ÊK¿oãÀ©L÷§¹T•ç7$óò¥ÝðÓëy°î5ŠB» LZ-=jÈæ»æxËŽ¥û¬îÙ2KJi]!;uÆ9fõ|}ó¢¬f:†3 išFÕXþìþÌ=tŒ+[6¥}H/ö­þóðloßK¸ÙÄØ&\Åe1žíØì<ºz'KJ«Ý†KUùxû^þ~Iîê™1#ßf÷P˜±k?­†‰mâˆñ³pw§¶Unû›½‡8Zx&³¬/Ñù”¼.•W]ÆÔGûTó$Íル Pþõ—} Ó†ÈÿjëÆ4¯{ÆñÚøî“d:÷ŒÁ/ êIobZ’¼>ÕëvšÔ²ÿ»“O0wæN¯Û«Î¬ÿn¥sÏ&Õ+_íoEy|…B!„B!„oÌ‹YR)2Às¡/”¿^U²‚2§y¬_S²Šó>àöÀ©t5v㳨/=Ö—¨%ä*€ü· è9ÐF€ß$(ø bȾ‚_c/0\âþ×ÐÊV¿‹â¾Ýt­¡k=Èc½ZšOÉ÷£fø¤½Þ½{£( ‡ƒ]»vÕXvË–-$$$ЧOåo¼ñ!!!\wÝutéÒ…7ß|³Öí{S·¾´Z-;wÆl6—g‡­ÊÒ¥K™7o^¥å¿þú+ß~û-×^{-III|øá‡uîƒ^¯çÆoäÆoôXît:yä‘Gؽ»òõÊ›º¯½öQQQŒ=šáÇ3|øpõyyyL™2…'NÔy_jÃårñúë¯óüóÏÌóÏ?ï±>''ç‚P†Æ«úp¹\L™2…·Þz‹Ò±cÇjÇ311‘íÛÝX$%%Î!CʳÄVå›o¾aÖ¬Y•–_ýõ<ýôÓ•–?üðÃ<üðÀûØvëÖ­>»U%oß¿§·1hûÚºpáÂZ·í‹÷~}Ô·]oÇêwÞÁh42uêTbccyôÑG«¬ÿÉ'ŸpèÐ!eqm¯¨ª÷.¸3­Þ~ûíåY^«3cÆ î¸ã¬V+àÎ k³Ùj¬Sޣƺ^ysnxÃWû»gÏ–,YÂàÁƒéÕ«½zõ*_—““ã  >{ó¡>¼çõë×3fÌ~øaú÷ïÁàþÎ_PPÀâÅ‹=z4Z­¶|¢ _p¹\<ôÐC|òÉ'ðì³ÏúlÛ5ñÅç‘B!„Bˆs»(”Í–úÍŒ¥ª*ßÎ^@B«4mEHp½ž²2™Y9ì=p˜ ›ÿ ¨ØW³MWíÝ×>!"2œ&M£˜=kÛ“«¿Y¤ª*Óï}šþ—÷¥Cçv„†ˆêRÉÎÊaÿÞCüº`Kæ/Çåªú€-·qý¨)\1z0}ô$>!Ž€ ì6;ù…:¦u[Ñjµ8N^{ï9:&µ¯ó~=pÇcü¾nkëÍétòÜ£¯°bÉ®ºfí:$`2I?žÁêåëùêÓYäÔ"kä7ÿû‘«®¹Fáû¯ç`+«ùGUUùðߟ±dþrÆ\{%I=:†Áh 0¿ˆ#‡Ž²yã6òróËëøb¬vïØÇ¨qÃY¿j#éiž?¤Îþn—ïϱ”4Š Ï4ÿâSopìH*C®@d“HleeڟŠ_× (ŠÏ~$r:¼üÌ[,]ðW_{%:·#($—ÓE^n>©ÇŽ³ë½¬_ý{•uë{|ë3V–ó¹®¼9¯’7ogÒØ;?q4]{t"<2Œ€@Š‹JÈËÍ'ûd)‡±aÍ&Ÿöٛ󪢺\c}eá‘Tt Iá! ä•ÙØš™Í—»°?¯ê‡u¶Ìá–E«ßœ¤ðPÂ-& zŠíòmv²KË8RPȆ³¬UUå«6Ñ?&’ÄÐ BM&‚ŒTT²KË8WÀ¯G³ôèq\g½ç½©{¶w·í&Âl"Újáçƒ)ìȪù<.v8¸oùzÆÆ7ghl ±þVä°ðH*÷vn‡^Sýd¯lúƒä“ÙŒlÙŒ¸@?,:v—‹¼2;iEÅìÍÉcã‰ÊÁèNU埒Y‘šÎUq±´ ĤӒ^Tšã|½ç 9çø|øåÐQòl6ƶjN|P~z%'ûóòY™zÏGoTà£í{Yzô8£ãbéB¸ÙŒA«¡Ðf'¥ ˆÍ™Yäu3Ì—Çè|Û²ö»öúoE—ž1ÄÆãhDoÐRVâ +£ˆƒ{²H=’WeýÒb;ÏÜ=Ÿ1·t¦c·hB#¬hu Eù6rN³{[ë–i¾g¤ðäÔyŒŸÜ™ÄK¢ñ4RVê 3­[ÒÙ¸¢úÐ’×§2±ÿŒZµ³véa²NÑs` ÚvŽ$¢‰f‹‡ÝE^N Göe³nÙÖþzµšïu¾y¼'ï˜ÇØ[Ýcl¢¨ÐFæñBþØxœ 0ÎÞߺŒ³B!„B!„¸ð|÷.[˶p­ÿ::  Ç•ÃúÒµ|’÷!ÇGϽ‘:Z_º–ëŽe¢ÿô4õ!J…Q1’çÌc}7ó‹~aAÑ<Ô*+·”mæºôq\ç7‘n¦îDh# ÔRä*"Ï•K–3‹ÃöC¬+]SeÛ›Jg\Ú(Fú¦Ÿù2ô j‚°a£À•ÏAû6”®G‹'¾ÉNV_®üTJç=¶Eo´‘íP¢P´Ô²\'à8°ûöÙ¨e¾Í¢îÌÈzÆà8´Wþqu¶äïѵŠ+÷(ª­¨ŠÚ*e«þƒ}÷B ]Æ£mÖ Å?Ekt÷=û0Σ¿»3û´nõÔ J>‡ùê×Ñ„Åcì{'e¿ÊŒ¦ª”üx?ºÖƒÐ6éˆÆ†b Õ…«(Wæ^{cß½TWÚ=ç±-~ú¤ h›uCãb Dµ¡–æ¡eáÊ>ŒãðÚ*뻲R2û!ÐÐXÃPU'ja&úöî ÃÕÓØçIɰŒCWw–äÂ/@­pš¨Å=ÍIÙ|%Úƒ&T83Á¾lëÁáËŸÃ]NJç=‰cß2ôÆ¢j¢7áÊOÇq`¶3P‹³}ÖÜé`ã={öPVVóø'''sÝu×Gdddy`ŠÓéä±ÇcîܹÜpà $%%ŠÓé$''‡””’““Y±¢òdùÞÔ­/—ËÅí·ßΰaÃèÚµ+ááᄆ†âr¹8yò$»víbîܹ̙3—«ê÷Ñc=Ɔ ¸îºëhÓ¦ ~~~Øl6rrr8rä;vì`åÊ•Õöá‡~À`0гgOBBBÈÎÎfÆ ¼÷Þ{ç ¯O]§ÓɃ>ÈÂ… ¹þúëéÔ©f³™ÔÔT–.]ʇ~HV–o'C?ÛÌ™3ÉÎÎfÒ¤I´k׊‹‹Ùµk‹-òé³(Þ¸ƪ>ŠŠŠ¸ýöÛ8p cÇŽ¥k×®„††âp8HOOgË–-üôÓOåÁÉ7ndĈŒ5Š=zG@@N§“'NœœÌ¬Y³XµjU#î™'_¼»wïNpp0@y6øÚòö½__õi×Û±RU•W_}•9sæpà 7ЫW/¢££1äççsàÀÖ­[GNNåIÅãÚðÒK/Ñ·o_ˆŠŠÂl6SVVÆáÇY²d Ÿ~ú)ùùùçÜN~~>_}õS¦LÜAú ÁÛcÔX×+oÎ oørï¿ÿ~¦M›Æˆ#ˆŽŽ¦´´”½{÷²xñâJŸGu>ŸæÍw†úðvœ÷íÛÇÔ©S1 DDD”¦Œ3pg[ö¥72|øpn¾ùfz÷îMTTAAA’››Kff&¸à¾O !„B!„87åÔ?Ï<óŒ²cÇ%33S)((Pâââ”ÌÌLÁ`Ði\.—Þb±èív»0i4«ªªþªª¯X±bö￟ &óå슃øøøÆîB½ûù«Ðy1‘±ºðÉ1 iÞè!Xõ:>ܾ‡/wlìî\Ô–Œ†^£áä]|·ïpcwç¢÷Õðˈñ³ðúæÌ>X»ìBˆ†óÓÈA›Œ<¿!™E)iÝ!„B!„BˆJfΜYåò¿Ú½]!DíiBZ`½Õ™³ä§qh˜à!.[·nÅßߟW^y…÷ßÿ¼ÕBœñôÓO3iÒ$ÒÒÒèׯ_cwG\ n¸áž}öY¶lÙÂøñã»;â/èÏö¹ßªU+-ZÀÔ©SY²dI#÷H!„B!„·ªŠóíß¿ÿhEQrE)p¹\E@©^¯·Û5Ýjµºl6›3<<ÜuðàAÕßß_ WÕgžy¦Ò –EeѰî¾ùáÆîÂECÆêÂ'ÇH!„B!„B!„B!|Kßå÷ Õ…óøöš !„^2dP÷ìÉâ¯#,,ŒiÓ¦ðÁ4ro„øs¸ñÆwæá­[%Ù‹B!„BˆÚ‘e!„B!„B!„B!„Bˆ¿8ó¨—qå¤àLKÆU˜öRÿ(ôíG O€cïÔâìFî©Bˆ?³N: PžÉSˆ„„JJJ°Ûítèпÿý‡³jÕ* d¢Þyç>̦M›8qâÅÅÅ4iÒ„«¯¾šqãÆ0þ|Nž<ÙÈ=B!„Bq±e!„Bˆ?‰©Ûpkûxe“­$ßfo¤ ñç7¥CW¶hê±,Ðhh¤Þ!„B!„B!D=i´èâ.±Ú"λ)]òÒyì”Bˆ¿¢¡C‡““ÃÆ¹7âBñè£Ò¿eû÷ïçÁl¤ qñÑjµ 4£±úïü;vìà©§ž:½B!„Bq±“å ÈÊmó¥Ý~®h”v…Bá[V½«Þóë¢(>ÛþW+&ùl[ƒ‰ýg4vÄ9xsNúêøZõ:‚MÕß¼B!„B!„Bˆ‹‚FGÙÚÐÅö@ jŠb BÑPKóqfìÁ±w)ösÁ)“¢ !„hX§”—-[†ÓéläÞˆ EII yyyX,RSSY¸p!ÿùÏ(**jì® qÑÐëõüûßÿ¦OŸ>ÄÆÆŠÁ` 77—;w²`Á~øáìvùÎ/„B!„¢ö”Sÿ<<óÌ3ÊŽ;”ÌÌL¥  @‰‹‹S2335ƒA[TT¤q¹\z‹Å¢·ÛíÀ¤Ñh¬ªªú«ª¼bÅŠÙ¿ÿþ{ù¶ºuëvw§ñÅÇÇŸ»B!„B!„B!„B4’™3gV¹ü¯voW!„B!„B!„B!þ¬ªŠóíw_¥ IDATß¿ÿhEQrE)p¹\E@©^¯·Û5Ýjµºl6›3<<ÜuðàAÕßß_ WÕgžyF=» ÍyÛ!„B!„B!„B!„B!„B!„B!„B!ÄEO”…B!„B!„B!„B!„B!„B!„B!„µ&ÊB!„B!„B!„B!„B!„B!„B!„BˆZÓ5v„¿À Z%´ ;+—ÃR»;Bñ—¥( ªÝ Q‹ŸF¡0¿¬±»rÑðæ|–÷‚B!„B!„ø3ÒohM–3‹CöƒÝ¿$}‡«ÐF¶Åqt޽K»;B!„B!„B!„B\P$@Yˆ‹P» <ýòtÌ/=ýkWlhÔþü¸äè zÞþׇ ,„õôÕðˈñ³T¹îª9KÉ+³ÕX?®m(“ìÅ{/¬"õp^Ct±Q}ºh"FSÕ_]ßq5+æ8Ï=:·à0 SéM³¸ B#¬|ô¯µ,ûe_·3xtã'wÁåR™ùÁfV,¨û¾vêÑ„#[Ó:1œÀ`eeò²KI?–Oòú4~›·Ÿ²RG·ÛP¼9ŸëS÷þ¤öŒiÕ¼ÊuÏoHfQJZú „B!„B!„/ÌYŒA1ðzÎ+ ÜHŒD1úá*Èhì®!„B!„B!„BqÁÑ4v„u7ùî‰iMHh0÷Éðñí¸ÈvûOÉÏß@—^1„FXë½Ð+·>Г€`A¡f¦<Ò›€ S¶qË=ùÇ«ƒé9 9!á´: «èf$õnÊ-÷÷ ¸nÛlHÞœÏõ­[RÕûλÝB!„B!„B!„B!„B!„B!þÔ.š Êá¡ôìÚ‘¸æM Äår‘“Çžý‡X½~ Å%¥uÚ^ÏK:qÕðü8w)¿oÝÞÝ¢A8Îò׎ ¯…oõès Ï¿ù&“‘¡½ÆQR\ÒØ]:§‹±ÏB4„‘a<×§+&­–á?-¢Äqñ\+ßݶ›Ùë–¾{¿Xb[ 7h™ô·îtéÃ/®!çdqCt€áãÛÑ:1œ˜d¤ðúãˬ­Òb{ùkEQ0µ ÖÖ…$8ÌŒRa ­NCP¨™üÜÚ}÷í}y †ŽiSc™¼ì2VZ~>oEÞœÏõ­ûÁ{øà=Ë~9ˆ`“Ñ˽B!„B!„¸x ± ã…°ÕXæ'fiñâJËãô­ïw-—˜º£kŠSupÌqŒU¥+ø*ÿ ò\¹•ê´ÒÇ33úûZ÷ï†ôkÙkÛs¤EË8ÿkiMs} RÇX^ü+_Ì ØUTmÝúìo£R4èâ o; m“N(–`TG®œV`ßü5jYåß …hºfþƒûuÖ°m­\Æo øß¨ý7([Wõ¶ôíÀ2ŒÝAj)8ÓÁ¶оç±Û !„B!„B!„Bˆ¿¤ >@YQ†ìÃ¥½.©”1:2œèÈp’:¶çÃÏ¿%7¿ VÛìÜ¡-£† lˆî q^|üÎÿ Ãd2òö¿>lìîüiY¬fLY`ÒÅØg!‚E¯Ã¤ýk°¬[v˜Œã\}SG.¹4ENÝ›pùU ÌúoOòøÈ°qm‰Œñ 7«a'D¸ëêïÊ_7áÅÿŽlÐö.)rÈ8^HD´iGòH=’Wëú¯líñ÷WïnbÕ⃠BH„•fqA˜-ú*ëžÏã[‘7çsc½„B!„B!þŒ,KëhÐpwÐ4n ¸ ~£UŒ$Ú`hÃHëUÜvâfÒÇ}Ø[ïX oD¼MWc7å­õ ´Là ëHî81™ ç õëþšG¿Š®UeŠA‡6²ÚÈvèGQ<ó6ÔÂÌFê¡g’Àÿv÷ë¢oª NV à>°^h*,6€&ô ` '†€j;½B!„B!„B!„øk¸à”ƒüéÝ­ EaïÃlÞ¶‹¬ì\ü¬fztíD»„8ü9l_|7çœÛkÞ¬ ãFT\.FsÎ:B\höï9Èm×Nkìn!„¸€ÜÅë/§YË FßÔ‘¦-ƒ˜ý¿?»[ÂK¶2'Oß9W¶Æår±ì—ý8®Z×oTþzç–t~™¹£üïÜìî>éÓþúŠ7ç³¼„B!„B!|ê¸'ÍÛTú;?y•eJTωí"uQ\ç? ZÖ”¬â—¢Ÿ9êH!XÂ8ÿk¸Ì<m$þeÞçQ÷ˆã0W¥¨¶?4¼öm mÙmÛÅaû!/÷ðŒ‡‚§—'šÿ1?~ŠÊ¥¦þL ¾Ÿ]SþöSOLFEõÉþ6&ûîh‚c±ï˜ƒ3íÔÒ|4~è¯D×všÀ&ûM£tþSÝUñ§ ƒà ØwCÁÛU— |,ãݯí; ð wyEúD°NGŠ' !„B!„B!„BøÚ œ“—ÏOó–RZVÆî}ž7™÷8¤뮢M|KÚÄ·À ×c³Û«Ý–Õjáú±W ÕjùyÁ2_Ö‹ÙÔл „BqÞ=”Ë;Ï®D«Up:ÕsWø R4 :{’UUqØkðÛòrJ™ýEýl­~†ò×Y'Š|Õ¥ZñÅ8{s>Ë{A!„B!„Â;þ²]Y¸ jUç¸#²Ÿ¥ÀUÀª’ëÖ–®æð·¹ÔÜŸ¾æ~˜³G€³CupÜ‘Ví¶o ¸…6†¶ØÔ2?9›" £tÑŒô» p'¿›{&rVá7œtfòJø$»ÒÃÔ‹õ¥k}²¿É±{1ŽÝ‹¡B°µëä~‡×`Öêѵ„.þ²Æë :~ 4¡àʇœGª06^z&8¹d.ä> Tø9Ú‘%óA±ž—^ !„B!„B!„Bü¥\ðÊ[·ï®v]ò޽´‰o‰F£! À“Y9U–S…kGÃßÏÊÊu›X¿iƒ/ëÝP]öÐ4¶ ÿ÷Ê?ˆiÍßÌ僷>;g³ÅÌø‰WqéÀ^4kƒÅj¦¸¨„¼Ü|ÒŽ¥³yC2_þ÷»jë_1€þƒúк]+‚‚qØíäå°ïAÖü¶9ß/ðÉþ ¹bCG">¡%þ¤Kgå²u,™·Œ[ム½»º3þ-ZÉÛ¯|DIqÕ7Þû_Þ‡Ñ×\AÛÄÖ˜LFÒg°zùz¾þì{r²s=Êêõ:æ®ü³ÅÌüÙ‹yáÉ7ªÜ¦ÉddîÊo0 |ðÖg|ñÉ·•Ê´ëІknM—n ¤ ¿€?¶ìdæŒؾu—÷tÊèk®àá'ïåè‘T&ŽšRcÙn½ºðƇ/p2#‹1ƒoàÚ¯fÚ#wT*{èÀ&¹ëœí;ŒÄNmi•Ð’°ðüýÑj4dœ8ÉÆµ[øêÓYOM¯¶¾N§cÜÄQ 9ˆØæ1 (¤:Ê¢¹Ë@QÎÙ~]ޝ·c司æ|þÃ{•–/Z÷}¥e›Öoåþ)U¹ºìïÅÜçQ㆓Խq­[ŽÙb¢´¤ŒÔ£i¬Xº†Y_Í¡¨ðÜqõ¹NÖ×È–ÍH !.П‹ ³NG©ÃIja1+ÓÒù~ÿŠìŽjëßÚ¾5—D†n2`Ô£×hÈ-³±=+‡ïöfGVõÇ׬Ó2.¾}›DÐÌÏŠE¯£Øî ßf'­¨˜ÍY|µç ÏëžÖÔÏÊÓ=»ãgá§)|¸}O­Æ¬Kx£ãbéLшSu‘Sf#¥ ˆY9,JI#­°¸¼¼A«añ˜a<»~+K¯´Í%c‡¡×hx'yßí;\e»ýb"K›à@LZ-éÅ%¬9žÁÌ=É)«üJË>zi¥å ®ZiÙ¦Œ,\±¡ÊvÛ…2>¾]ÂC4(´Ùù#+‡oöf{5ß3À7ÇÈ—j©Ókè3¸%—ômFË„PüƒŒ(ŠB~N)Ç Ø¶!_çì£0¿ €OMÄhªü²S&|µbR¥åŸ½¹E?x~— ö£sÏ:\ELó@‚Â,˜L:´: ¥%²2ŠHÙŸÃ7m!#­v>ÖE§îM˜þÊåìßy’§îœwÎ:£–˯J [¿Xš¶ Ââ§§´ÄAAn)™Ç‹Ø¹%…ß¤úëÇàÑ Œš˜Hh¤•’";vdþ·»Ø¾©ò{¤ºqxÿÅÕ¬˜ Úvª«Ûox+ú oUiùSwÍgÿŽÌëÖ帖שÇ8WÇ›c NB!„B!„¨¿SÊy®¼:Õ›_4·Úu ‹p©¹?Z´Dè"9b?\«mF颹#Ð}?쓼Hq©²ÜwÑÃÔ‹pmAš@ôŠW6Ée[ùºàKþ(K®T§§©ÜíÍ,øªÒúßJ–‘éÌ$\Î`ËPe_ì¯NÑqßõŒ°Ž$Vß…ÃöC,(š‹Â¹ïÁÕOõ¿™9S“ѵ„¢3ºÓϪÞOð¨ï4ÓÇpå¤Pôß±5–Õ6ïeü»¨…™~P9£¶6*}×ëÑ5ëŠbF-+À™ºÛï_àLÛV󶽨[ňeÂÑ„4Ç•uâ¯oC-óüM[Ñ[Ðw€®U4Á±(+ª­µ4Wn*Σ±mø¼ÎmŸ‹±Ïhc{¢ø‡£˜Q´ÔâœiÉØ6}ŽýUзŠ.qÚȶ(¦TGjq®ìøҷcß9WîQŸ÷»¢ ÇÁÐpAîãà¬üS:þ§n¡;ŽBÞóx'W¤6ОºÖÑw‡6ª=ŠÎˆ+?ÇÁØ6þµ8»a†Êĉ騱#f³™ÔÔT–.]ÊG}DVV–ÏëN˜0ž={Ò¦M¢££±Z­”””päÈ.\ÈŒ3((¨þžŽÅbá–[náòË/§eË–øùùQXXHnn.)))¬]»–>øÀ«1B!„B!„B!ÄùwQ(×Äf; d¯! l@ßîÄ·ŒåPJ*‹~]}>ºVo'¡]<7Þv-«–­cǶꃮƒøÏg¯Ð<®™Çrÿ?üühÛ­VSm€rûŽmxæ_ӉމòX®×ë0[ÌD5‰ ¸¨ÄgÊoO|›¸ò¿[´Š¥E«XnºýZr£Æ '8$Gï{Îc¹V«å±>ÈÐ+z,mÑ”Ø[šr嘡LŸöŒG°°Ýî`ãÚ-ô¿¼=ûvCQTµòôn½“0Ý™W.[[iýÔûnáÆÛ<ûÌeƒûÒÿò>¼ñÂ{üøÍ/µ‰šefœ (8ðœeCBƒÈ8qÒ'mÜûðíXý*O Ó,š˜fÑ ¹â2¸ã vU°hõ³ðê{ÏÑ¡s;å íâËÏíêÔçø6öXy£>ûÛØ¼éó=ÝVé¼²úYÊϱF1}Ú3ìÞ±¯Æ>Ôõ:é»;µÅª÷üø³êu$À˜VÍùÇêMìÉ©ú«^Ñá´=ëÜ 7›Ø4šËb¢xeÓvæ>V©^€AÏ;zÑ<ÀÏc¹¿A¿AOŒŸ¢TÀêMݳ÷=!8€ÚƱ*í;k˜×* $%2ê¬Ï#Z¢,f¢,fzD†QdwTd\ZEáÑîÛÄcy¬¿•Xÿ–\Ñ¢)®ÞTc°p}ÝÑ¡ 7´óXl2Ò?&Š~1Q¼¹e?H©TÏWÇè|KèνOõ',ªòçCX”•°(+íºD±|î~Ÿµ9pdk¦z{kWm$7;½AOdT8mÚÇS\TuâV -yãðX͸œ.Í]ƪåëH;vEÑH‡Îm$ðg0ë«Ù$uëÄKo? À3á¿ï~Aï~Ýyüù‡¸t`oZ¶jΡgf5¿ã¾›Ë#—Ì_ΜïP_H‡Îí™|÷ òòÛÏpËø{Ȭ„ºfÅú_Þ‡°`âÛıowåL‚}/ë À±#©9è9ƒó “¯)NÞ¼a½ý9©GÓ¬y w=0™]Úqß?¦²=y'ûv{P–yÂý@ƒŸ¿½^Wc@}p¨ûæ|Å ÛY_ýÌOßÉ<8õ¾[¸öÆ«ëÜåKVóówóÈÉÎÃb1Ó©k"·Ü9«Ÿ•'^xˆGO­ìýÈÓ÷•'Ïýq æ,¥¨°ˆÖm[qÍ £=ÔÏVŸãëíXyãÐ.ïî×þƒzóôËÓÙ%%žޏœ•ʨïù|±÷yùâU|ûÅOäbµZèÝ¿;nGHX0ÿúÏÿqë5÷’•Yý áu½NúÂòcéÌÚw˜»‹NGïèp®KhIˆÉÈË—vã¶Å«È*-«TïÓûp¨*iEÅÙè…¶!ÜÙ± ±þ~<”Ȫ´äÛ<Ÿ€¸¹]<Íü°»\|¼}/ëÒ3É-³¡×hˆ°˜hHq5çº7u+а˜<þŽ´˜k PžœØº<8ygv.ßì=DJA Âbæ™^]0jµçl·®¦tH(N^z49Q`·Ó!4ˆ[Û·&Èhàž—0yñ*2+œã‡ó òãBú5‰ä©ž]õóJN6ªú.0±M\ypò–Ì,>Ú¾—´Âbšú[¹³c:„ó·.íÙž•ËþÜ|º¾:FçS|b8¿5½¾æcxx_6ù¹gƹ´øÌ¹m0êPN%ðp¹Tì6çÙÕq8<¯;zCíΙÂü22Ó kU¶¡M~¨W¥àä³eg—g™®«ïíÎæ5ÇÈÎ<“‰¼â8+Š‚ÁXû÷Zź³!;.öÊŸ® †½=¾B!„B!„âÏ#D€M-౩õûý«¢–Ë8d?È gz­ê´ÔÇ1Ìê|?ï?ØT[µe?Ì{‡ê ÕqŒBW:EG{C¦ÝO }K¦?ÆoÅËÉsùm¼TuÿþiV̘3%jåû°YN÷ý‘0mx¥u59×þ>òtypòÏ…?1·h…jmôí˜à?‘C›:µW_ŠÑMxk Iе„j/¥ì·7}¶}WaÆ©vüA«gõQ¤ŠÅ}Þ©§êœfèqsy€±óèï”­zWî14Á±ûÿ m“N˜>Œ3-WÆ^ŸÕ­²¦ÌãÞF•ˆ+ÿ8%ßNÅ•_ùøzÝîNvÚ([õŽC«Q‹s@§Gã…6²-ª­¸Š¼g[ó!¸¸òRQË A£CÕcÿ¿¡ iéòé8ü†Zâ9a¯qÈcåÁÉöÝ qlÿWa&ŠÎˆÔóÿïï Ud ~·º_Í„¢o«/kèzæué²íV%ÆKï)N¶ï^ˆ}Û¨eùh›tÆØçs0æ1oR4cjAÆ9¶V{ÿûßËŒçÌ™ÃÌ™3ÉÏϧk×®Üwß}„„„ðÑGqå•W’žžî³º§ÍŸ?ŸO?ý”¼¼<üýý0`·ß~;ááá|òÉ'Œ9’Œ Ïý6mñññØl6^{í5–/_Nvv6ƒèèh:vìHaá…qOH!„B!„B!„usQ(7oÖ„¤Žî ÉEË×TYFQÆ\q9Z†_¯  °¨Êr iÙ•$´m@^n>›Ö'×X¾c—ö,š»Œ¯?ÿÞc]打lO®>óêÃOÞ‹Åj¦´´Œ‡ï|’äÍÛ+•Ù°fS]w¡VÒgP\TÂêßÖsäÐQš·lƦõ[ÉËÍgÁœ¥L¸y,­Z’Ø©my€rT“&Ü4€y?-æÅ§Þ(ßÞ¾ÝÙ¼1™O¿ûþL¾ë^~æ­òõkWl@UUEáÒ½*(kµZú tgh\¹ÌsJåðˆP&ßu+–®áɇ^ÀårØädçòÀÔÇùzÎG„E„rÝMcùçã¯z=>é§fWBÃCHOsß”»ëÉtìÒž÷ßü”m[vœê_'ÒÎܸs¹\ØÊÎçTÀvêÚX±¯v—«|yuÂÌ&nm߀•©'xjÝ–ò æœ2­ÜÈ—Ã.#ÌläºÖ-x~£çl÷¾:Fç‹F£pÏ—z'ïÛ‘Éâ÷px_6¥%vÌf=ÍZW J½ëê3$Þøz ‘1îÙò·ÿ~œ—^Rç¾lßtœC»³(È/ÃVæÄdÖÑć½r0lcдtéSþ÷®­'øè_k9y¢NCdLí“"±úϹ­e¿ìcñ{PU¸zRGzh€Á¨¥ç€æÌÿîÌçoÅqn‹ÿYë>W¬ûùÒÊóêŇxÿ…Õµ®ë‹ã+„B!„B!.^‘º(î ºŸ{ƒî§ÀUÀ^Û~-YÌœÂÙUòÖ¤‹1‰+­£x7÷íZ×›p+4¤9ÒXP4¯Æ²«KVVZ¶¢d9‡í‡ø®É#½Í}YP4·|ýÛ™ SX1¿ÂºÓò]îI+MS¥uÕ9×þ¶Ö'0Ä2 €ÿåÆ¿sÏÜ£ÙkÛü¢9¬l¶½¢¯u›u¥ýñ»×3ªÓur?%óŸªU nm©§5 Wþq€SÁÁ)[ù6ÎÔ­î"þîŒÖ§Ë(~{߀cß2JæL/Ïîì,ΦdÖ=X'ÿ€âŽá’(ÿ´OêVEñ Ç2îm4añ¸²Pòý=U'ÙlÔö] °ýþ?u΂ ŸgÖ­Èq¨òoÁŽ+peÆzë,Ðѵèƒ}×üòõšˆ6gn“gQºä%Ï œØ#þh¸eS°ºoãS²ò_¯¹¼.Öý_çqpåÕ\Ö—4Ѻ݀}ûÏ”.|¶|+c/Δ߱Nú Å€±÷”.ú§OÚ‰‰aòäÉÌš5‹éÓ§—¯Û¹s'ëÖ­ã—_~!((ˆ¿ýío<öØc>©[ÑöíÛÙ´éÌ3'[¶laõêÕ|ñÅ„††2mÚ4ž|òI:—\r ³gÏæã?öX—žžÎ–-[B!„B!„B!ÄÅIÓØ¨¯à@n?E»÷³sOåì¹½ºu¢YLû!y{Ãfã¬ÎŸ|Ë>Ï»¯”ëï'שּׁ‹gËÍqß9kß© A5gë«(¾M\y–ÛÏÞÿªÊàäó%?×Í:8$¨|YÖIwöT¿kù²¡WB£Õàp8øöî;<ª*}àø÷Þé3é½ÑB(¡¥)E@Š"ÍŽuíe‹eº®eu]uÕUWݵ÷U±+*½) HïÒ{ÏdÊýý12ÌLH™Ð÷óÑžv÷—UWí?ÆŸŽÜ«fŽ4?ר%úéïöâRŠjí~Ë,¯ Âd$ÂdôÚÌkt2ôèýæ'on@sŸœ$ôöðÌûÓùpÅÕõ?÷>=®~_Z¯¯}®¸šáã:×ﯭv±÷Øj뇧ð¯÷§3õŠ>Ä%…ÒR5Uò³*ëˆÞÃ~í¥5çY!„B!„Bœzî*ø#×ç]ÃE9Óyh×äÎâ³ÊOpã"YŸÂó±/aVN¼¢p}G^“H5’=ŽÝ<\ô@“c˜l›‚Q1R§Ù™[õÍ Ë‡¨!\v=¯Å¿Í7I ø±Ã¥|Ç[ñï~$“Ñt\ÌnÜHSÛ*óL>ª†% Kê‡bö|ǯï|,1X9²_+=– ¬K€+g ZU¡ß㻋ö{ê["Q,‘A©Û.>ëeo¢†%âÊXCÍ'·¢Õ4žëX?47jt*¶ë¾Ätöm¨‘­,Š)ãÐßa½ôul7~KèŸVrÛb¬—¿UŸ,­èM^utñž{ÒU°­Úÿz[«ûÅó¯b€èWAß©‰âÐw¸/=?úƇ+›ìèêØ®‚½“Ôû=Ϩ(3º¸îAiwÐ Ïý¼k×.²³ý/[æ™Áb±Ð«W¯ ÔmŠÅ‹=ϨX­VÒÓÓ½ö½óÎ;¸ÝnºuëÆÒ¥K¹ûî»éܹs³Ž/„B!„B!„BˆSSû/ßÙL1Q‘\å…„…Ú((*áÙ_RWçð[vÔˆ30›M¬ß¼ƒü‚¢“iË­YµŽûï|”??ð{¢c£¸êÆK¹êÆKÙºqŸ¼ÿß/Yé³â/[i¶¢¼’⢓ר5¢ã%O;.rW´c4§¾þž‡^˜Hx”€øäP.»y—Ý<ˆ]›óùföVÖ¯<ÜìãVW»‡Œ&߉ „B!„B!„8U¸q³½nÛ‹·±¶v5OÆ‘é!3ù¨âÀõ:ê;ñJü›Äêb9è8Àòo¥Z«Xþxc­ãX^³Œ wãßcv1¤òŸ¸WˆÓÅ{m7)&"MÇ’Ný|…Ïöºm\žsׄýŽa–Äëâqhr]¹¬®ý‰s­“ˆÕŲ߱¯ÑšÓß(Õ3æ’ïÌkô˜'ƒV[Ž+{3®ìÍ8÷­À2ótñ½0öŸIÝú‚Ò†»ô0jl÷úd}ÚOÛöJÔè.¨áI¸Ë²QÓ”?– ¬YUY—2ˆÐ»9a[Š% ­¦¤ÕuÒw?2!£¦a_ó6šãÄ÷±óàOÔ|ý˜Ç߇b‹Á8ô:ŒC¯Ã•½™ºuâܳÌgEç`P£S±^ø”Ð8¯íŠÞ„Î+ÛûÝp4qY+o¿q׊WAý"]D¿…×+ËyíÈ< j#‹ò*Ð¥{ Gï+­"ðÄËîçñhùÖŠõ¬@(Áøø}qqÇîÖÔmŠÃ‡“ÄÇdzeË–úßW¬XÁ­·ÞÊ£>J\\·Ýv·Ývëׯçí·ßfáÂ…¸\®fµ'„B!„B!„BˆSÃi• ^Ÿœ\XT›ïFEeà¿Áý{0¨_:ƒú¥,7ãüqÌ8ß­\Ãâï~ zÜ-ñãòŸYýã/Œ›4šiŸGŸéõ?ûñð½O²w×~ïJGƵS(êDŽ®¦ÜÔ˜/WQ^ÉÏ?¬eäØáŒ?oL}‚òÈs†jÃår±hîrßvÏâán—»I]cpF*3xÒެú;úܳ(-)ã÷>ã¶»¯gä9Øóé<"£#¨­µ“—sòHt Žnv:œÍ>fk®ï©|®iíýÜÚ:f½¡Á{Çß?§ ƒªÖ¿n¸â»<2l ±3v—‹×·îfEVŵvŒ:•$›•ÇG &Îxµˆ³óX[À؉LMí@ŸèÈúŸŒòJþ¾z#{Ëü?`Õšº-q´ïÆ磩Þ&Š¿líFÛ=zæ·Õꑆݚ†« õw^Nö5 gûW½z2x««Ž%ët*&³çÏ`·[£¶Æ{²§Ãû°œÌrî»î[¦^чÑç¥a±ûlëÑ/ŽýƲ~Õaž{à;\Φ?LÖð¹³æ¾WNE­=ÏB!„B!„âô°¬z »êvÒÃØ“!æa”“õ)õɺŽƒÜ’E®¦Oˆ¥‹¦ß‘•‹—T-j´¬‚Â?cž!N]³óßÒX^³”"W!FÅHоÏÄ>O¼.!à1ò\¹55§ÝóBmß 5k—@I%D>jD½E7€ÛÏ„µÎ#‰ËºP¬ÐŒùZåØxÖÉ_9z?·dl·5u›Â`hü™Š%K–ðý÷ß3eÊf͚ŠAƒêöîÝËwÜÁŽ;šÕ¦B!„B!„B!Úßi“ l2¹êÒ©„…Ú(.)ã÷?o49@¯?½W¢s8œ,øf) ¾YJBR›rZS7Ðõ æ¹j©† {MÉ ÆýÜZ§ẔGVv(9MVvi°:rq­½þu·ˆ0:‡…ðÔº­,É<6ƒ¸ÃífOi9UÎ?Øâp»Y˜‘ÅÂŒ,lÎïœÂ%ݺÐ),„ʵ‹ °ÆôºÍUl·¡&\âp»qkª¢`34ïOÂZ;i@‚ͰL‚õؾ†×¨¡†«7åsòh»Ëçð÷Õ0;‘“yZ£¤èØ*Ô›„”0r7ÿ﯇SNb~íñŸùªÚxãÞ4Ïë÷þC“¹÷iÏjûwñÐ-óüUóRZ\Ã{/®eö+ëé;$‘¡c:3dtÇúÜA#R˜|q:ßÎÞÖœ®4‰ËåÈ{¢þKs¯o0γB!„B!„8=d:3èaìI´.Úï~›jãÙØ‰ÕÅrØyˆ[ò¯oVr2À9–±¨¨Ø5;?×®j´lcOR ©ü£øaTû.Ê¡9ØU·“*w´`øø¢KQQqã⻚¥~Ë´¤¿®|ºÓƒD]RóƒjcZe>Š¥‘ei›É]èY}Z KB—Ø5, ÇÆOpìZ„iÔÑw‹3s ( îâ^3<º« Qéc×bjçÞß¼v[Q·!סuØ—üËŒçP£S±Lyœšy*Î'Ï{*;plŸ‹cû\Ô°$ }§a< 5º ÖK^¡êÝKÑ*Wo*]|ÔhÏ{¡vÑ£8v,¨ß§¹hù»Ðêªü~å«•eCBoÔØîA‰¥5ì?Cé_!òIÐw„¨g¡è&ÐŽËçw]¤WóYP³øäÄwô¾R¿Õ#«…hUÍûü $??Ÿ^½z‘œœ°LRÒ±˜ ŽÝW­©ÛññÇÆ›‹ŠŠü–q8|ùå—|ùå—¤¤¤pñÅsÝuב––Æ|ÀäÉ“ÉËkÿ‰É…B!„B!„BÑtÍ_±LŸ<ޏ˜(ª«kxgöWTTV°Î#O½Äý=𧺦€/ç.åþÇžoÓÕ“GÁå×\HBRó“<r³óxã?ÿã¦Ywât: aò´ñ^e6¯ßxf¾xÁ¸VÇÜÿ}æ î¾åA~úam£å¶lðÄܵ[çú•rwö˜aÔÖÔ²gç~ŸýkV­#'Ë3ƒöù3&—ËЃøò£om÷Œa1™üÏ‚ÝìË )9ž Sưxîròs غq}öâŒaØ¿÷`£Ç²Ip³…XÛ.`Ž«ž½»y%›6§nK®o0ÏUKÕÖÖÖ¿¶…ØNX>÷skj1=—ËžÝ-ÛÚÏÉ`q$!Û¥iìo°Úm¤ÙTÿzo&€È­ªáÍm{¸eÙ*œnP£IRÚ´îÈäx.ëÞ¥Ñ`€Åž„ò´ˆ°%)IîÒ¬z[ŽL¶‘J¼ÕŒg¹Wk.ö–ù¿µ :›’$}´ÝÁq1˜tÁ™à¤5×·­íÚìýpÇ%7 hÒ¤dz׺ê_GǶíÿG Õ4X¥ &¾y÷Ys) ‚ëWæåÇ~äÎ˾¤¸àØ„9‡·Íõ­,÷NjK m“vŽ×^×W!„B!„BœúެD\á®ð»ÿ¯Q‘jH¥Ô]Âóo¥°™ÉÉ£­žñ¡ öõÔjµ–j(½«ng³Û ¤«!«Â®`Iõbrœ9~˵¤¿›ìèeêM¬ÎÿM{Q#; Õ”혮"Ï“ž„>ý<; UäY±¹?úNžq¥£ÉÌõu³<‹ê; ½‰æhMÝã¹Ë²¨þè\Ù›AQ±L~}÷æË»Ë³±¯|™ê®·Å†¡÷­Š«!ÅUÿÚ•ß¼•™«P#RЧ ZL-Uû=”¿àymè¡·ù–©Û ®#oKÛÕœ´'`ŽÞWº˜4¯Dä†ô]G 9jš}-Y·n={ö ˜h<~¼ç9’êêj¶oß”ºM1v¬ç3Ûår±sç‰?‡>ÌsÏ=ÇÌ™3q:„‡‡sá…6«M!„B!„B!„B´¿Ó"A9%)~½=³ô~öÍbŠJNU8šõ»‹x칸íîëycöó„G„5Z^¯œHu`_åGæ""½³sÛîúäÁýöneämoÑÜe¸\.t:×Ýv¥Ïþ.];1ñ‚±GÊ.ÇéguR·[ãëÏ<3?Ož:žY×^ˆªSÉ8pˆõkü¯‚¹à›¥8N""ùã¾[Ñ)íD2ÂétŸϹç!ëP[7í<ýS…+®»€ý{6z¬¼\ÏŒÅ1qÑDÅD¶YÌ ¯Ñ]ÜÞ¬sÕšëÌsÕRGÏ1ÀƒNX>÷skµWÌz?   IñLœây(cåw«© °Ò-4ÿs2ôŠï 6 :yf_•O­ëXr^Iƒø{F†7¿½FV<=P^IE'á2ÜϤ ­©ÛÐå=RùÇðAÜÚ¯'¯A˜Ñ°ì²Cž§9tŠÂ5éi>ûUEi4¡õh‚óè”Ìú¦n,ÎÌÆ¥iè…ëzwóÙß%,„ “ëË:¬žž_}l…à3ãcNØîÂŒ,œn“‘? è…®™ÙºÁºF'Ë/?¢´Á*ÊÃÆvæç'2|\g’:†k%±Céâ™rYotzÿ2å›0&¹sÓ¯êKbÇ0bCHëË¥7 ¤KæMnÑEÕÔÖû<?½;ý‡%o£[ïX.»y‘1ÁI¨ÕéUþûùEÜðÃ8"…È+ƒ³EOd¬§óX2|[­l\V\Cuƒ¤ì±t£ÿÐdbBèÙ/ŽËƒØß†Úëú !„B!„BˆS[Óz›úÇ’lêmìÃë$)zCÎCÍnCE¥Ÿ±›ý´q¼b×±Õ:{û4»=†™‡órü˜3Å®"ž+yÚo¹–öw~õ\\¸Ð¡ã/Q÷£kÉòÎm@Ÿ6º~]×áuA;®»ø ¸¨a‰Ò'á.=ìIô;惢`r­§lá^¯ºŽíßz’y-‘˜ÇÞjÓÏUkêú£Õ–Sýé­¸oU‡å¼ Kà¿°xÜß]´­Ö3 k0WªÖª‹ë_ëz5«®cÇüú•~Í“ÁÐg*Š-ÅŠ.±/¦sî5ðØR[¨úГ¨ `»LC+àö”0ô„°;ÁïòÐAæÜ1Ü.PuGÜì³_NÅÐë¼#eçƒ;8ãÂ_}õUýØîwÜ᳿[·n̘1€9sæxí¶¦nCƒï=’’R_wéÒ¥ÔÔÔxíoì˜={öPZêWŒŒl»ç„B!„B!„BÑ6N¼¤à)`ÔpÏj¸™Y9dÎÆlö?³±¦iØíu~÷µ§q“G׿ cðÐþ,[øCÀòϼòœNK¬`çÖÝ•¢×ëIHŠcêÅ“‰Šö Êlßâ=Ë®¦i<ý÷yñí'1[̼øÖ“,[´‚U߯!'+—Ë…Õf%5­Qá¼þâ{mÓáfÈË)à£w¿àŠë.fòÔñX¬¾ùl••ôéŸÎÕ7]†^¯§¼¬‚w^ù0àq¾ù|×Þ2‹Ð°.œ5€Oߟ°|A^!ï¾ö×ßv%SfNdà™ýøê“¹d8Lqa1F“‘Ĥxúî󽄫A’bk8NöïÍ {Ï®ÂCùôƒc1.[¸‚?Þ{sýõݵ}o Ã°iÝVÀ³böcÏ>À;¯~ˆÝ^G‡NÉ$&'ðÚ ï%漜>|ûs®ºáÎ3Œ—ÞûŸ¾ÿ‡3³QU•¸„XTÿĵÖ\ß`ž«–Êrªª1êtÄYͨ€óªkøx÷fõHeR§d,zßî?D¥ÃIïè®NOC¯*”×9xgGà÷~fE%ö:"MFnéÛª°¯´EÎa!t±ñÊ–]õå jjyoÇ^®ëÝó»¤0 6Š9û3ɬ¨¤¸¶£ª’`³Ð?&Šç6lÃ¥y'Fë,Ž:¯>¹Š{þ9¶~uàôñ¤ð¿‚ù¦5ÙÚ_â³}û†\ulÕàKnÈ%7ô*S˜[Å]EÇWmÍ­±îÇLÎ:7€°3÷>å½JÅŽy”Vû«Þ,)Ɉ¶0ö‚nŒ½À7i¾¡-¿d·º=4 Öýx˜‘ô7Ò̽O{÷w{úëuÌvº¾B!„B!„¢ý=ó%®b~±¯%Ç™Cs¥‹f¸y—†^ŽŠJ¥»’Ï+?õ©{uØïØbßÄ&ûFBÕP¿m¸qSå®ò»¯“¡365€­ö-'ŒwwÝ.rœ9$ê¹+òÌŠ™µö5”ºJ1*"tQ˜KÀúÅB˜N¢>‘tcoÆ[Ï¥ŸÉ“tZì*æÏ…w\¹¥ýÍuæð¿òw¸6ìzFYÆðF»|Tþ™ÎLt¨ÄëÐ)m‘´¬`»úCœVâÊÚˆ»²À“8l‹A×yÆ—žDWǦ/‚׬˫pº¸(:uëg×ïrîZçÜ]¿ú¯+o‡WU­"ûÏobq3†¾ÓÐuŒcÓg¸‹¢UÞˆ–„.e µKŸô$Ž¡n@N;5_݉õÒ×Pc»c™ö Õ^‹»Ô;9ÝzÑÐ\œ»ãÊ݆VU :½'I»ßÌcýÍÝÚÒ³êÕ¿wyjX¢'¡XoÆuh-ZM)èŒ(–H0˜÷ëÛ¿b™ùŠÑ†yâCA‹«5Êã' Æ@øCPph ò_«>óX0Ûe`èæÙæ<h`ü˜Üå¹Ôýò>Æ!×`è=ÅhűùK4{ºÄ~‡]ª­¶ûOo­ÝììlÞxã n¾ùffΜ‰Õjåã?¦¼¼œrûí·£×ë)--åÅ_ Z݆n¿ývbbbXºt)åååôîÝ›ßÿþ÷Øl6œN'Ï?ÿ¼Owß}—ºº:æÎËæÍ›),,Ä`0””ĬY³ˆ‰ñL6¼i“ÿ è…B!„B!„Bqê:-”;wð¬fÙ19‘ï¾%`¹Êªjžø÷ë'+¬&+È+¤{Ï®õ¿ççú¼PU•^ýz`6›2bpÀr+¿_ÍòE+|¶ïغ‹ÿ»í!zâÿˆ‰‹füä1ŒŸ<Ƨ\UeU}‚²ÅjA Á´15ÕµAIÜ}ýÅ÷ˆaÂùç0füYŒ–×þŠòJîýÃÃäN~)+-gþW‹™~éù”–”1ÿë%¶û1\qÝÅ$wHäö»oð[î£w¿àPFœsµkÛº÷ìŠÛ­± AŒåe¬XºŠq“F¡i»I¼8œ™Íâyßqîycè3 ½ühý¾²Òò %(¼ùßÿΔ™éÕ·{òÞ&×mÍõmɹ æýìvk¼þâ{Üó·?Æÿ=ô¯ýe¥å^ɾ-íïéóñ =3.ÂŒK§xmw¹\<ñàsìÛ} Ñ¾4çs2X ªÊô®™Þµ£×v—¦ñÏ_6³ïÈjõG¹5ÇÖlâÉ³Ï ÄâSî/ IDAT`à®f¬R¯* éQ˜u:†4²šïªœ|–Î ZÝãÔÔÒ­ÁêÔùÇÍ^~¼g×o#Áf¡ot$cR“’Ðhùãã™{à0çwI¡WTOœøÿ´ã½±u7±3çvLbtr£“½Û­¨spßÊuÖÔ<†[ÓxcënþopÂMFþ<È{ÅŒò:‡W‚2À{;öbÔ©Ìê‘Jrˆ•Ûúõô{ìwàP屇ȂyN¦M?gñ¯û–só}#‹ð0ÒÒ"ý&(/ûvçÎèA|²ÿî’;5Åñ¦øôÍMôšLH˜ÿ‰k’;‡³iuV«ÛIjbü;7å1÷£í­n/ÏÞÚHÿ¡I¯U°úÛP{^_!„B!„BÑ~TTβŒÄªX¹$ôr¿eÊÜ¥ü¥ðÏ^+5À4€¾¦þ,Kù1`;Å®"&fõ»¯³¡KýëÃÎÌÆìÆÍߊþÊ¿cÿC¨ʽQ÷Ÿ°NC·Gü‰K뫆Æ÷5ËyºøŸä»òÖmM_)ý/j$ÓCfÒÇØ—Äü³Yq·„Õ5¶ÆØÀ2j•ùÔ|õg4{EÀ2-áÎÝŽ.®hnœÛ¾=Ö^m9νËÑ÷˜š†;o§OݺŸÞ@Ñ1¹5"Óhß`ê~ywIfÐê¢Ù+©þâlW€b‰Ä2íiª>¸œvOEEMèƒb0£ï<<àqœûVàÜÕø¸v³hnjç?„eÆ¿QL¡˜Çÿ¥YÕ]‡×SýÁ՘ξ}—á 3zk¯Ä¹÷; 铬B­5~  rW@ùóñ(èâ äj¨xµa(¾"ŸÓ00öü´5ûÊ—PBã0¤OFßm,únÞïo­¶œš/ï@«Ìj»Ï<ó L›6I“&1iÒ$¯ýeeeÜxãäåù~nµ¦îQƒ+¯¼’+¯¼Òk»Ëåâž{îaçNï÷¯N§£ÿþX,Fð¸K—.eÞ¼y÷ !„B!„B!„âÔtZ$([¬g³>¼ôÌ›ÄÅÇ’”’ÀœÏæ±uÓŽ€e5MãÞßÿQã΢Oÿt¢c"‰ˆ Gsk•°w÷–-XÁ’ùßávûôÛ°v3—_p#çMÏYc†’Ö=•°ˆPu*Ê+9°/“u?oD§Óár¹xæåGé;°W³ûuçMå—Ÿ76»Þñ\.Þ÷4+–¬bêÅ“IïÓ³ÙDnN>+¿[͇oFIVœüø_2õâóPU…ÏgCÝ VÓÖ4×^x‡%ó¿cÆ%ç3pH?ââc0šŒT–W‘qàë×n¦¬´¼¾N0ÎÕÎm{¸àÂI¬þq-¹ÙÞƒ‘s>ǸI£8œ™MUå‰WA|â¡ç8œ‘Źç!>)ž:»{3Y±lŠ¢ iÁv¹\<ùðó,]ð=Ó/9Ÿ>ýÓ‰ˆ ÇírSVZNÖávlÙÍê•¿ø­ÛÒëÛ’sìûù›ÏPVZÎÌË/ [TBBlÔÔÔ°w×V,õ=Ï-éïéóñ|½ƒAÏÀ3ûFYI9~ÙÂûo~ÂÞ]ûOØ—æ|NËÂŒ,ôªÊÀØ(ÂMFÊìul,(æƒûØ[æÿ›Í…%\»èG.LëÄÀØhb­fÂŒªNÊë×Úɨ¨dÍq Öš¦ñ—×1*9žÞÑD›ÍD˜Œhh×ÚÙWVÁ²C9,=”ƒû¸÷mkêï¥Í;‰³˜I´Yùz&ÛŠ¿®ÕN'ún53Ó:1¡c2Cm( ì+«`aF¿ïŸŽA œ\ÿôº-l*,fJ—¤†‡`Õëq¸Ý”ÙdWU³»¤Œµy¾Éè.Mãk6±"+—©©éŽY¯#·ª†U9ùÌÞµŸ’|Æ|{àeuuÌìÚ‰´ˆ0B zjœ.ö–•óCV ÞÏhÀë[w³ôPÓR;2(.ŠX‹£N¥²ÎAfEë Š(«ón;˜×èdÛðÓaþxÉŒšÔ•C“é˜Ih¸ ƒQ‡½ÆIQ~ûw‘•Qæ·~mµƒ‡o›ÏŒkûÓ÷ŒD¢ãlèô Uåu”V³ss>?—Ñ&±çgWðàÍó¸èºþôœHh¸ {­“‚ìJ¶mÈeíŠÀ‘mZŬQï5©Ÿ–¤(¯Š¡çt¦gÿxâ’B°X 8nÊJjÈØSÌÏË3øiÙA´›CAN%Þ4™¿óœëðH3U•uäT²emkÚà<·öú6ç< !„B!„BˆS‡†Æƒ…÷q–e$½}HÖ§`Q-T¹+9è8ÀªÚ•|Qñ)%nßI "t­ŸÔ.Qç™ÀÚ›\WÓ&~Ü`_Ï¥¹riÈ,Î0ŸIœ.žp]8Uî*ÊÜ¥¹Š8è8Àϵ«|êVi•T¸+¨p—sÐq€ö ,«YB†ãà ÛmM]¸x¬øW/ä¢KèkêG¤. —æ¢Ì]Æaç!¶Ù·òSíÊ·qŠeú³¨1i˜Îºû÷GVÕ4j¾¼}·±è’ú¢ÚbP¬‘ ¹qWã.Øs×b;‚ænV»'â:¼êw/Å0ð2tÎ@ C1‡£ÕU¡Õ–¡Uá.>ˆóàO~뻋öS3çnÐQm1hš ­²C/Ï„áÚÑD쓤fXg€qg•äÊ÷Akp›hÕPüÏJÊ–óÁØ ÔHÐêÀUŽ]P·œÁü*Ýí¢vÞƒ8÷,ÇÐo&º„^(3îò\œûVP·ö=´êâ 6èár¹¸ë®»X¸p!—_~9ýúõÃb±••ÅÒ¥Kyíµ×(*ò?ñtkêõÅ_`4:t(QQQ³fÍ^~ùevìðãu»ÝÜpà Lœ8‘AƒKtt4n·›ÂÂBvìØÁܹsùæ›op»ƒû^B!„B!„B!DÛSŽüxyøá‡•mÛ¶)JEE…’ššª¨F£QWUU¥ºÝnƒÕj58#`VUÕ¦iZ¨¦i‘+V¬˜óË/Ç’Ï8㌓Øö—––ÖÞ!4ÛKïþ«]”O'r®N}§ã5:c>jÁªO±…ØxõùwxÿÍOÚ5–¦š7í\l=¯mÝÅ;Oœ<-[2s"Uå?›vð鞃íÎiïÃI£I±òìúmÌÙß´„mç«)c‰4›xlÍ&ef·w8B!„B!„AõÑGùÝþ[ÛB4ÕÛï> æ«»pî[ÑΉ“iãÆ„††òôÓOóÊ+¯´w8B!„B!„B!„hy¾£Fš¦(J‰¢(n·» ¨5 uÕÕÕUU6›Í]WWçŠuïß¿_ ÕbccµÞ½{k?ü°Ïªn§Å Ê¢mÝvÍŸÛ;„Ó†œ«SßéxNǘ…B!„B!„B!„¿†{^hn\9[Û7!„B!„B!„BqJe!„B!„B!„B!„Bˆß8ËOâ.ÉÄ•½ we>8jQB0ôšŒ¡÷8w/A«.nçH…B!„B!„B!Ä©@”…B!N!7÷íÁïz¥ym»zÑ”×9Ú)"!~ýnìÓó;§xm 7Û)!„B!„B!„hª}êÙ 7,âÊÛI풞Ġ„B!„B!„B!Ä©L”O!?lž×.íŽìw^»´+„B_6ƒ›ÁûO4EQ‚vüW\´cfz¯½C§›AO¤9ðCwB!„B!„Bñ«§ê±ÿô:úŽCP"RP¬(:#Zm9®ü]8w/ű}.¸dBU!„B!„B!„Bá! ʧIBœn&¸¸½Ch¶óæ,nï~5Ʊ°½CøU™µàû“ÓŽ$ì áãß¶óï ÛÛ; !„B!„B!„h?N;ukÞ¡nÍ;í‰8 0 ½CB!„B!„B!Ä)Hmï„B!„B!„B!„B!„B!„B!„B!„§IPB!„B!„B!„B!„B!„B!„B!„B4™$( !„B!„B!„B!„B!„B!„B!„B!šLßÞ!š.<"ŒÔn)+-gÿžƒíŽ¿yŠšÖÞQ¬!FTU¡²ÜÞÞ¡ü&È{A!„B!„BÑÞÂÕÒŒi”¹ÊØëØÓÞáˆ_ CŸ©èâ{â<´çî¥íŽB!„B!„B!„§IPâ4òñ¼7±…Øxõùw$AYˆVúpÒh’C¬~÷Mýf)eöºFë§öŒæº»†ñòã?’u°¬-BlWo/š…ÉìÿÏ„WžXÉŠùûNrD'cåÆ{†Ó!5‚è8¯?õË¿mþChã§uç¢ëàvk|ôêzV,h~_û Iâœ)ÝèÖ;–ðH3v»“²âZr—³iu6ßÏÛ‹½ÖÙì㞊Zò^¸c`/ftíäwßck6±(3;˜! !„B!„B!~¾JšKˆÂKŸ—e4¦1w¡˜BpWä·w(B!„B!„B!„BœrÔö@ˆÓª*$wHDU•öEˆv¥* I!VTåôz/Ô:]”×9¼~´,«Ó«ÜtïR{FóøS˜tQ:§Y·•BB –Ltœ­ÅÇˆŽ³ñ»;‡i&"ÚÂ÷ ',Âܬc\{çPþò¯ñ Ó‰¨X+:½ŠÕf$±C‡§píC‹lÞ1OU-}/Ôø{ßµ}¸B!„B!„B!„B!„B!„B!„"HN›”ãb£:¨/©RˆŒ ÇívS\RÆ®½X¹zÕ5µ~멊Bz®ôëÕŽ)IØlœN'…E¥ìܳŸUk6Rk·ŸäÞˆ_‹!#óØ¿Àl61aØ…ÔT×´wHB´‹!ñ1<:bfŽI_-¢Æéjïšì¥Í;™³?³YuÎÙ‘Ž]#0u\ýÇ30<™WŸXEIau[„ À¤‹ÒéÖ;–äÎáägWðìýßµY[µÕŽú׊¢`4éÚ¬­SIdŒ¥Á„:½JD´…òRÿgoø¸ÎL˜Ñ£Ñ2eÅ5äTúl?™×7Xí¶ô½ðê–]¼ºe—×¶¯¦Œ%ÒljQ„B!„B!„ÁÓÕÆG‰Ÿ7¹ü¹—°»Îûû>…I¶ó˜f›IwcÌŠ™bwëjáýòwÙãØÝäã6ŸÁÙæÑ 2"VO‘««r/krý¶¦¢2Úz­“ég@¤If'ÙÁŠšïø¨â*Ý¾ß ·+EEŸ6Cωè’ú¡X#ÑœvÜ%™8÷­À±~6šý‹Yüjé;@ìž×E7BÝFß2!7BèM€ÅûÏþeHë…`:ÔÐjÁ• uk êspn³n!„B!„B!„Bü&ò ÊŠ¢0᜜=l°Ïªœ‰ñ±$ÆÇ2°o/^{÷JË+|êϺh éÝS½¶éŒF’ãHNŒcP¿^¼öÞ'”WTµi?į“ÕfÁ,ÉTB`5è1ë~ ¬?/?H~NÓ¯êËà³;¢(ÐïÌ$ÆMíÎgoùyj"H&^Ø“øäPJ‹ÚvB„[§ZÿºSZO¼5¥MÛ;Udî+!?§’¸Ä²3ÊÈÊ(krýsÎïæõû‡/­ãÇÅûAƒ¨8R#°X ~ëžÌë¬vÛë½ „B!„B!„8ué=OÆ<Ã(˯íñºγMa‚u?Ä‚ª¹§¯©wEÞCc_¯í&Åì[åéØç|úªWô¤{‘nìŶiÜw ®‚ö ÐË´¡ï:Êk›bÔ£‹OGŸŽ¡÷Tt=Z婳øí2„Ð<¯«>œ¬@ØŸÀv9 6Øl5 ÝÁ:òέîdD-„B!„B!„BñÛpÊ'(G„…2üŒ¨ŠÂî}Y¿yEÅ¥„Ø, Ôôî©„‡…0eâÞÿôŸú›·í"&:’õ›¶“™•CM­ðPûö¢_ïîDF„1qìÙ|:ga;ôN!ÄéjÿÎ"ž½ÿ;:t‰`ÚU}IéÁœÿmiï°D+ÕÙ]üí–yŒ9¿n·›åßîÅåt7¹~JjDýëírùö£mõ¿—×°gaPã=È{A!„B!„Bˆ_— çA¦fO¸_EåɘgèaìÉκtðÚcø-Œ²ŒÁ‹÷Êßá«Ê/¨tWÒÇÔ—»"ï¡£¾#F=̆Úuä¹rý¶15d:‰|ƒb әɪyl²o$Ëy˜ªSl5â…Uóé¨ïÄ·UsØlßL…»œX]SB¦2Á:‰$}2ˆ¸ƒ‡ŠîoïPë9v.@ìˆcÛ7¸²· Õ–£†Äaè}>úžQÓ0üµójïPÅoœ‘O*8vBÅ‹þË…ßÖ‹<¯Û ò}OyECo°]ÎLINB!„B!„B!„¶S>A¹¤¬œ¯æ-¥ÖngçïÁíÝû2¸úÒ©ôHëB´Î ê¯2[¶ïfËöÝh ¶åå²{_:Jïži¤wó^aY!„hªCJùÏß@§Sp¹´Wø RT½Þ3]½¦i8MOøme%µÌy¿e ¶¶c+wåU+¤&iïó,ï!„B!„B!~œš“gvÀýW…]KcOê4;÷ÞK]ƒŒ?•‹B.à½òwùoé õûVÖüÀžºÝ|–4‹ba¢m2ï•¿ísü–³¹?êo¸4O•<ÁçŸàæÔý^yqõBW/Dk0"½×±‡ŸjW¢Ñ3Ö:Þg…åöæÜ¹çÎÅÐ fwá^œWaÑÐw‹>mtû(€"ÿ j4¸Ë¡äÿ Ʀ³%'×Ì…Ò¿Cà g&ÔÌÅvR¢B!„B!„B!„øM9å”6nÝpߦm»é‘ÖUU ¡°¨Äkcé1‡sèÝ3 ½A¢(hZÛ$Ó¤tLâ‘§ÿBr‡D¾üx.¯>ÿÎ ëX¬.š5•³ÏF‡NÉXmª«j(+-'ûp.ë×l⃷> Xßd22þ¼1Œ;‚né]‰ˆ ÇépPVZÁÞÝûYõý¾ù|AÐú8eæDz÷ëI×î]ˆ‰"4<ª’ŸWÈÚŸ6ðáÛŸ‘“åô£Òûôàâ+§1àŒ¾DD†SQ^Á– Ûùè½/غq‡WÙiŸÇŸü=‡2²˜uÁ÷ŒaxîµÇ)Ì/bÆø«ZÝ×Ô´N¼ûÅË>Ûýü¹Ï¶u«7rÇõÙ~Ý­WpưÄÄG†Áh ´¸”-wðéû_±uÓŸ: uêÒ¿þã.Î6ȨpÊK+X¿v¼õ{wí?aZrO¶Ô”.Ejx(qV3½žZ§‹¬Êj~ÈÎåó½T9œëÿ®W7ÇGk6f2`PUJíul-*áÓ=ÙVT°®E¯ã´Μ•G‡Vƒžj‡“ò:ÙUÕ¬Ï/âÃç«5uJ ±ñ·¡H±òÕ¾L^Ûº«Içl@lÓR;Ò/&’“ —æ¦Ä^GfEÛŠJX”™Mveu}y£NeñŒ‰ü}õF–Êñ9æ’™1¨*ÿÙ´ƒO÷ôÛîÈäx¦¥v¤Gd8fŽÜêVåäóÑ®ý”Ø}Gû»„…ò΄³}¶/˜>ÁgÛºü"îZ±Æo»éQá\”Ö™±Q„›ŒTÖ9ØRTÂÇ»²õ¸Ïô†‚q‚©© ™zƒÊˆñ]|Vºt&4„¢(”—Ô’ŸSÁæ5Ù,ûf•åvÞ^4 “Ù÷¿ë~C’øpÅÕ>Ûßù÷}áýÿflbý‡&Ógpɉˆ±b6ëÑéUjkœåW‘¹·„_ß@~vE z߸~g&qïÓãØ»½‡n™wÂ:F“ŽqS»sÆÈޤt‰Àb ¶ÆIEi-9UlßËÂÏwP[øócü´î\0«7Ññ6jªìÛQÈüOv°uï{$Ðyx剕¬˜¿/`;ꎜԕ‘“ºúlèÖùìÝVÐhÝæ\ßú:Í8ÏÁl÷x’œ,„B!„B!įW‚>‘›ÂoàͲ×ÉtfxíÑŦ†ðsíJŸúù®û­ª¿G?†ŠÊߊ`AÕÜfÇØÙÊߢeˆyQjeîR~±¯åÝò·ÙSx¬æ¦ð[bF¬.Ž5ƒb¤Ä]Ì&ûFfW|Àû&¿õ´FF¤7Û72Ö:“bFE ˜hmRLL´MfŒe=Œ=‰T#qà ÌUÆÇ.~¨YÁW•¾c‘-8fWÖ&ôÝÆ¢èMžågµÖ'‡úÍÄ|î_q—dRõÖÌFËê: ÁzÑKh•T¾ê»’·.¡7†A—£ï0ʼnf¯À•µ‘º_ÞÇ•½¹ñc·¢®?Š%ëeo¡FuÂ]´ŸêÙ×£Ù½ÇYƒàËÐw…ÙÅhC««B«-Ã]š…ëÐZêÖ¼Ûì¶OÄ4â&t‡¢„Æ¢˜ÃQtF´ê\Ù›¨[?ûýU0ôœ€¾÷èâ{¢˜ÃМv´êÜÅqçnű}>îÒCA»¡ˆûÁØpCéýàòÞ ô&Ï¿ÎCPöšÏ@k£yeõÝÎÁÐïBt ½Pô&Üå¹8÷¯ níÿЪ‹Û¦Q!„B!„B!„BˆSÄi‘ Ü˜ººcIsŽF’ýé”’@vN~›%'ÜþçèžžÀ•×_ÂËfÛæÀI>áaü÷§é”ÚÁk{hX¡a!¤tLB§S&(÷êÛƒ‡Ÿº—Ää¯íƒ‹ÕBBRÕU5AMPþýŸoÀâ;åpr‡D’;$rîy£¹ó¦Ø Aóæ?]Ë•×_âµ-*:’ÑãÏbÔ¸<÷øË|ùñ·õû ò ˆˆ ?alQÑ‘äç6¹?mmØÈ3IïÓÝk[l| c'Žd̹góÔ#Ï3÷ËEëOš:Îë÷¨˜HÆOÃ9FòøϲhîòFÛoî=Ù·õë‰ÍàýQc3èéF÷È0ftíÄ_V®cWI™ßúÃcéyÜu޵˜9'%‘ÑÉ <½n+óö©f4ðŸ1Ãèâµ=Ôh Ôh 9ÄŠª(~X[S÷ø¾w àŠž©ü˜ÇöâÀ Õ:Eáν¹à¸÷¾ V V Câc¨r8&·„NQ¸ïÌ~œÛ1Ék{ÇPC»p^çî[¹®Ñdá–º©O®è齊}¤ÙĨäF&'ðï Ûøj_¦O½`]£“­{ŸX~ÿÐ(b|?/clÄ$ØHÀws÷­Ís¦tãÆ{†Üo¶èIîNr§p>zu}ÐÚm¨X+÷ÿ{‰¼¶ÛBŒØBŒ$¤„Ñ÷ÌD–~½IPîÒ#ºþµ!BÇÀá) žÂ[ÏüÌ’9»Û,~!„B!„B!„øµº-ü˜3¹ÎÞ¯ðMª¬Ô*ë_wÐwb¿ø”‰R=ßÝæ¹ò|ö]r ájkk×´(9à|Û^¿Gëb˜hÌxë.z0àqϲœM/c¯mqºxεNdœõ\+~„¯+¿jV,ýMØQ·=`rrc_‹y’$}²×v¬z+‰úDªÜUANPL—ÜWÞŽ $'h•žI;KÄ ËªVÏýá®ð½?L#qȵ^ÛkÔ‘ŸÏ¡vÙS86úCoM]£ ËŒçQ£:¡UäQóÅ}““-áX/}5º‹÷vsŠ9 5¢Šª¶I‚²®ËYèz{·‡¾Ç¹è»£vÑ?plýÚ·_ æ žDße„Ïv%Ü‚ž]F ÕVR·þàÇ}Tèm`™ây]þ Øö_Nß éž×Uïæh³|©:Ì“ÆîH¯FuÂu†>Ó¨ùòŽ%¿ !„B!„B!„Bœ.Nûå^=1¶ÑdÐkn¾œN©pÔ9xýÅ÷øéǵ”—a0ˆOˆ¥G¯4ª«jüÖíÚ½ Ͻö8V›·ËÍ¢¹Ëùñ»ŸÉ>œƒ¢¨DD†Ó§Ï6KFýnÉJ¾þt%ÅeX­ú ê͵·ÌÂbãÇïæÊi7û$ƒ_qÝÅõÉÉë×læõß%ëP:%së×Ñg@:úËÍlÝ´=;=ɆyE„„Ú0ô&§GF{ºƒ• |`_&ãΜÀ¨±ÃùÛ“÷0eÔeÔÔÔz•u»üÚ¿ýò8N²çRYQ…Þ '½wwn¹ówtêÒ»þz?.ÿ™²Òr¿õ'_:ËVQQ^I·ž]¹þ¶+‰Kˆå¾GïdßžƒìÛ} `š{OÃw‡sùlÏA*¬z=Ãc¹´{þŸ½ûŽ¢N8þ™Ù¾é½BHBïHU@l¨(ŠõôlØ=ÏŸíôî¬wç»g×óT<{EŠ ô¡…ôÞ·ïüþXØdI!!›ôy¿^¼œÌ|¿ó}¦ìÆWfžïm6ñèñ£¹záRÊíŽfýÞܼ·¦QPß@½Ë^QèÁ Cú‘Êm#±´ ˜IÆYs IDATgàÓæ+dÒ;<—×Ëk›vðSQ)U'U%Þj¦_T ­Ü7éÛT¼Õðs‚ÕÒf‚ò¬AYþää-UüoÇrkëQx«…Ç Ç¤ÓvÜŽºvp¶?9yÑþ¾ÜG­ËÅà˜H®˜E¤ÉÈÃG1káRJ›Üã{kj9åÓùœœÀýc‡pÖßb÷xÆð¶0 Ä%ý2üÉÉkKËyuÓ êH á†!ýÅ-ò©¼ŠœC> ÁºFÝ)sP÷énÜ»~@³N"m:å¯þäd×¶ù¸7}·®EoB‰LÅrÆC ÿyeSÖ™z•o¹þ}¨ÿ õ¶Æ‘Ëö¶çð:Óñð''»¶ÍǵáS4G ºäa˜&\‡b‰ÂrîÓÔ¿}1ZmÉaö&„B!„B!„Bql:¦”{÷JfÄßt¸ ¾_Þf[³ÙÄ}wܰ®¸¤Œ¿X@aqi—Űxþd÷ï @uU «W®o³ýáXðõbæü'p&ìÒâ26­ßÚjß;ï»kˆ»ÝÁ7ÜÇú5›šµYµ|uG¡Ý¶oÞÉÏ+ÖúÞ°v3µµuÜyïͤ¥§2hhÿ€øãâc˜uã¥,Y´œûîø^¯/ ª²¢ŠÛ®¿‡9_¾Jl| ]6“‡îy€’¢³l+ 1qÑøèÝxÛ,† ÈKO¿É†µ›Œ @qApúiš†Óá{áÂínLâr:]þõ‡³âÇŸ›­[úýOìÛ³Ÿw>{£ÉÈØ‰£Z­„üö«ïóÖK3Rïܶ›ŸW¬å?¿HXx(³n¼”{n{¨Õñ;zOÃŽªj66©À»¥¢Š_ŠËyjò¢LF®˜Éì5››õû©¨ùçsYA ¹5õ¼}Ú u*cãX˜[ÐfH¬¯röÂÜÞ?$Y»Ôfgsyë/t¦oS‹ó ÉŠô%YÖ8]¬)-oµm¼ÕÌÅÙ¾dÝ…%ܳ| ž&I½9Õµ¸½È™l—«…‹²}³¶ÏÛ›Ç#¿ll³ª†µ%¼~ÊD®˜Éã«¿S4Ày ¿i¬.¯×¿¾5±3W ÌàÇübîÿi­?‰¹ÒáäŽæÝÓ&k1qQV:ÿü9ðÅ›`]£î¢ª ¸÷ø€ää›KYøévöî¬Ànsa±èÕ7ªYrèç4ÎÖÿÔœsIH `Ó/…¶‚²â:ôz•„”pŽH $ÌtØ}-þj' ?ÝŽ¦Á9—aì”ÞM:ÆNéͼ5=Ͻ3£yøé펹ißÿ,ºÔ—-ÜÃKÿjûE¹`_ßöê©q…B!„B!„Ç®ËïBE¥À]À7õs[m÷LÕ“¼ÿ Iú$ÞJ|—ªžåGÛŒ6៱ðTÕ¹ úÅèbI7øžYœf ¬HjTŒo™Äñ–I¼Vý2/W¿ØêøoÔ¼ÊkÕ/ûÞáÜÎJû æ$}D¸ε7rWÙmÍú-³5ŸÔz‰í{öºöðaò§ã-[­À¦†ñ]êÒ€u9®ô–å`›w»uÛK«=¼«(¨!±xk|×Þ—< ÇÏáÉ_çkï‹£¦ñþPBã1¿÷ÎÅØ¾¼Û_ÝÙÓPí£?2ë”Ð8Œ£.Å>ï ôm‰‡õ¼çPc3ñVìÃöñZLN†ÆjÔ®­ßàüå¿Û<µ%]ZY×½§ùó ÷®%x+örÕG 7¡OŸ€kë<ÿv5¾_cÂíú°ûHàŠ·Âéº.AÙ< B|¯`[5³Ûn¯Oóý×SÞê¶Û“ž„qôïpmúûü¿û·yKvàÉý…ËßC1‡cö­?»B!„B!„B!„8–©=À‘ŠŽŠàÒó§£(°y[[¶ïj»ƒo`Â\|\ “'ŒÆd4va¤ðÎëpïíÿäÅÙ¯síïnmµ*îAU•¾'g‡ö#"²í ’MeöË`ð0_Âö[/½×brrOXðÕb¼^_âaö€¾ÛN9óDŒ&#.—›ÙÿzÑŸœ|Ýfçã9_0öøQþõÕU5Ô×ùf“Ž@UUÎ:oCF dÒIümcã|³lç’Àz4Ú¿/Ÿâ"_"ur¯¤VÛ¹[¨ [Z\Ægÿó½1qÊXÌæÖ“÷:zOv•õeÌÝ“À©i)èU¥Ý}÷×ÕSÜà«2›bm¶½ê@²ø€èH†ÅÕ™¾M½»m7÷¯XËK·qÝ¢eT·‘À~ðø½šÆ“k6$üv¥S{'£* n¯Æ›[ršmßW[Çü}ùœœ–Ü¡kÔ–SÒ’1êT\^/O­Ýܬ²Ýíá“]{sHÅoÞ5ê.#&¤ú@V.Þǃø†¥ v“·§Š²¢zöï©bù·{øyIn—ÆòßgfÎËkøjÎf|²/ÞÝÄk¯à­§Wué¸í¥Ó«¨Mî3»ÍEia-n—»Í;œ æ}¸•ÞXwØ}ål)cïÎ öåTðÊ£Ëñ4IœÏèÓ%ñ !„B!„B!įQ¤É©ÖiÌ©ý/ZŸôrµýþ¯äÔx«IÓ÷æÑØ'YœºŒgã_$L cvåã|Xû~³~Ù†~þåêþÇuÅWqZþ‰LÞ?žYÅ—³Ñá›p÷šˆënÑêøn­yuÞO1×ùʰN²NƬ˜Ûwà@®{En_jª>µÕvn-ð^†¡/W†_U iÖ>ËØ!&_ëkÕ/µ˜œÜõ4ðƬÆd`s%бùó·#ÅVæ¬| ¾¾ÃsÐ¥ CŸubãø!¾É§½•ûýë ¦ÞöEúŒýûwÙp®ý€¿úo0úJîõwo Æfâ)ÚLÃûW·šœ  5ø&ÔÕ% F±D´¹ïîâ­ÌõǬDÞφ¾Ï8nŽå¯twh„\¨ ¹ öE|3&·A=pZSØ<èôNE¯çŠæçÊ[±×ß³{}ÿi Óµ„B!„B!„B!ZuL>‰‰ŽäêKÏ#Äj¡¨¤Œ¾\pØ>v‡ƒû~‹ÅL\LÃ÷gôˆÁ ˜MtT¯üçCÜž®«ù÷mWPlêÃw>gÌ„QôéÛ›÷¾|•Ï?˜ËÜÏ6ÁvÄè!þåyŸ/<âXƒÍÖ`£¼¬‚¸ø"£¼5€-¶Q^ZÑbÿ½»|Éz‘QDFEø¸ ó‹Èì—AbR<›Ömeð°„…‡0îøÑ<ÿÄ«$$ûfÙÎßô$(‡„†pîÅg2îøÑ$&ʼn­ÁF^nᾤt“©ã‰ó«Fët:2ûe´Ym»#÷dWú± ˜³2zaÑëèÎöÊÀ©­C zÎíÛ›±‰q$XÍDšŒØÜòëü‰©&]óYº?Ú¹—ãbéÊ»Ó&óÅî\æíÍ'¯®þ°1u¦ï¡~Èoý¥„¦VÞVYM©ÍÞáqŽÔà߸»«k)n°µØfEa)Óûô¬ӑζÊÎO?>ìÀñn©¨¢Üîh±ÍÞš:"MF"MFR2÷u‡A#~þàõµhÞîIBï O¾sIi-O°‘90–÷–\°î¹¿-aÅ¢½Ø\ìË©¤w¦ï1>•'Þ9‡Å_íä§Åû()¨=¢˜lõ.JòëüqEÆïŪžÒ™ó,„B!„B!„qzÈtŒŠ§æàëú/Ûþ8óÂÔp¼õ¬´¯d”y4&Å7¹î•á³ÈuïkV±8Ré_~´â_Û6:ÖssÉ |‘25’óB/dcm‡Žá`{:²Œýü Ï…ª¡œz,Ç“¤K"JMƒÖ@ž+—ˆY¦6›ë¼uŒß?Šp5‚tCN9“sBfrŠõ4Rô©\[|%N­ñYÇ(Óhÿò—õ_tèX‚EsÔQûÔ8s8jt:†g`rú~§b‰L¥aÎ5ài}ÞU—ž„§`ºä¡(fß߸õépðJ¸og­ª1AY—:OáF´ú²÷ï-ßíëo‰B±D¡Ù*;Ý·)]ÂŒ£b‰Ä³o¶ÏïDs5´yÌ®5sЧCÉ dÖ§¸Ö„kóWx+»v²ZÅŠaøèÓ' „'¡Z£Ð\ x+÷û“¥}à„׺„xJw¢5´ü쾫9ãhP ó2TÜî}íèØÆc7}ˆ>P‰¹âvpïé|œ«c{JsZMRwïþÃsP ftñÙxжt~`!„B!„B!„Bˆ£Ì1— ÅÕ¿?ð°JË+ykΧ8ÍgÁnÍf'7¯Ü¼B¶íÜÃÏ %)ãFaÅχ¯ÆØV-_Í=·ýƒ;ï½™˜¸h.»ö".»ö"6­ÛÊï|Æß.kVi+ ×ÖÔQQÞÍS†ý@Â¥ñ¤Û˜Õ‡Ìæv?áaþåüý…¾åäN˜:€úºzzgô")%‘Âü"’S|‰y¹…Á9˜NJï›Æì—".!6`½Éd HàV”ŽWª--)÷/GF³pNa}ãƒûX‹‰íMž÷§‡‡òÄ Çg |ÙäÓÙä^jéT­*.ã¾k¹}ä bÌ&~ß¿/¿ïß—Må•|¸s/Kò‹›Uí Fß#s âua}ËIÂ]åà¸Å¶ÖÇ-j’¸c1Aów2Ž`\ß5ÍçŸ~ØöaFC@‚rO\£ÎˆIh¬Œàry(Ê;²$ÛߊgüûŸ=ˆh )a\|ýH.¾~$Û7”ðåœM¬Y–×áý644ÞCFSó‰ „B!„B!„B´lªõdÛ¾£ÖÛö߸¯‹¸‘+ÂgQè.äú’Yº PQ9Ñz7FÜLoC:ÅÎæúâYlrnô÷ SÃüËFÅ„S œà´Ak`QÃ·Ì =Ÿæ‘>†Rw‰9ZØÖÇÁóñ/¯KXoRLD™¢ü?·çé]·š Žulp¬ãGÛ<÷ƒ˜z>ï×¾ço§‹;о† Oyk»ëš½OÁ<pïZ‚eæ³èb6çšæÕ®„·*5.ÛŸ€¬ÏœâÛQ‡Ó5"oujDÊö Êʪʺԑ„ÝñËaÇR,áþ$ãÎômJŸ}’oAÓp¬zó°ÉÉî½+°}ñ'Ì'ÿ%$ãØYÇÎÂS°çê÷pïü®YEç`Pc2°ž÷j”–.þ‰•Ká¤i“™qÁ >Àÿoßîýe"U•Õ¼÷ÆGÜtÇÕœpâ8>ÿp.Q1‘ØíŠ ‹;{¦( ÿxâ¯Ä%Äâp8yå™·øaÑ2*Ê*1šŒ$§&ñȳ÷ŸwDûw»Ýþåc¥:«AUýËJ“‡à ð·q#ˆ³˜qx<¼ºiKò‹©°;0êT’C¬ükÂ(â­­ÏT¿´ ˜•E¥Lí•ÄÙ½åÿ·¯¦Ž¿¯\GNuË/Ñt¦ï‘8xìÆ&磽š~¼:šØîoÝÎÛ%X_/꽚†§;mé¼t÷5 ·Ó{Ì|>TCƒ“†úÆd`NÅdöý/‡×«a·N,âv¾|S˜[Ã_f}ÅÙ—fò™XB¿ûû §ßЩ¬YžÇS÷~ÇÝþwš¾ãs$“@m:{ž…B!„B!„¢=¢u1 5ùª…~[¿ Í¶Iú$® ¿€ÊÿJ¡»/^5,d…m¯'¾M¦!‹k"®çÖÒ›ý}›VŽPÃ)õ”6Û¡Û—¥x0¹·#Ü4>GóÒø÷R…GbŸ$^—€CsðBÕ³,¶-¢ÜS†Q1’ªïÅ“qÏ Kìð˜ËmKÙèXÏÓ0Æ™'$(7>;ºž¸÷,÷W8Ö¥‡`%(Wì@H@Ÿ=ÍV‰sÕÛ˜&ÿú¾SpnøÅæ²T¥õÿM_ó‚×}è®›Ó5èøÈû6åÞ»]Ò`SÖ™Ï`›{?îßvw۳C¿S1 ;Ïw^“‡bIŠ·|¶¯ïÁ[ºãðqµ›‚å¬G|ÉÉnŽ_ÀóÞúr%2ë9³QšõÔÜ&P{v’Wû·PYQO‚ ÑÏBù5àmaå_ èA±‚vä¯tHã3Ö£ëó+„B!„B!„BÑÝŽ™e“ÉÈeMxX•Õ¼öÎÇJN>¨¦¦R Äj B”Áår¹ùæËE|óå"“˜>óT.ºì\zgôâÙ×áòso¤¬´q6íŠ2ß¹°ðP""鮪é©ÐÛ­¬´œ¬þ|·` »û±õÝ“³€¤”DéGRrŸ¼ÿ‹æ/áÆÛg1ùä‰ü²rŠ¢°o÷~¼]Ø4ɰ=¹nYýû’Þ7 €Gxš…s¿÷os¹Üìܶ‹úú#¿¯gÁ®(B™ÛnÛ¤:r…½q&ü¬ÈpÒÃCxlõ&¾Í-ðosy½ì¬ª¡Þ}ø—\^/ó÷å3_>‰!ÎLOå¬>ôåéÉc¹rá”ÙAïÛQÖfÂuk\^/^MCUB ûZ/³;ÈCZÿLlòýØô5Õ´Z±ÒŽúÇ]œWÈßW®ow¼‡êÎkÔ•åU¨-!SÃ)ÊëøwtÀdݘ_{è÷§ª¶=ø}×Í øyØØî~ÜWY`÷¶rî¿anKÝTUØxû¹Ÿ™óÒ†ŒIbì”tÆLNó'àŽœÊé à«9›;r(íâñ&òîxƒ¥£×7çùHÆB!„B!„Bü¶œh™ŠŠŠCsð“}y›mÇ™'¢Wô”yJYëXÓl{ƒÖÀ‡µïó—èûr éù ²& ÉIú””õÊŸºµv$š¢i‚q¹§Ì¿ÜÏØŸ CU<È7õ[ui.¶;·Qï­‡#ÌÙ,ö3ˆÒE¬?C˜N¤I•·êÈèZ¯Ú´bi£,myËvùöžŒ.i0jx2®uàÚ¾Ó¤[ÐgOÅ» oÅž€YG½õe¨ôõ}!ö¯ï騏èÛ”gÿjß>‚åܧPc2°Lÿ¶¹*îmm'íû:»pmù×–¯QÓ1 ™aÔ%¨1}°^øõÿ¹­®ùý~$t ýPc|÷³}Á?pmýÆ¿Mó¸ÐJ¶£9ë[| U@â Ô¸ì ÄÒŽŸ ê¯õ(èÓ z6”_Zàܬ¸aWÁ<l »'¾ƒ÷•r á¾%êjáZ}Y«í„B!„B!„B!Že/ÕÙCÎ9ý$âc£ih°ñ֜Ϩ­«Ê~c¢}‚lö ì¯5“NšÀï®8Ääæ3·GQA1¯=ÿ_®»ä6Ün7aᡜ>ãä€6Öl|³@ŸvÖI޹;l\ë‹yô¸˜L-ÏFÝš=»rHNIàÔéSXøõbJŠJÙ´n+CF dô¸ìÎÙ¼ ›°Ûï›ÐöŽi|ˆ¿óÐ ØA0aò_\6;;·µ½ÿÎÞ“Á2!É—TíÑ4v7©ve6ù—s‚”l_ToãõÍ;¹á»å¸½aFÓz§vißR¸8»O› À[+|/dF†Q’rùÄáô°ÐõÛx`bƒŒˆ0Z™¨aâ*åv·‡œê–¯…½IBg{’¤Ž;*>“.8³°wæúvµí+¸_xÍðvMjp(‡½±Ò|Lœµ³aµ›­I•^€Ø„ŽÝg¥4Iv¹<¬Y–Ç¿ÿ¹”Û.þ”ŠÒÆIFŒïšë[W˜ÔŸÖ%㪧®oO+„B!„B!„86L¶úžÃ­u¬Á®µýL5Z @ƒfkµÍÁmV%ðï‘Ûœ[ýË-Ç·Ø7ÛЀ½®½mÝ‚,“°i6v¸¶7‰9Æ¿¼Ý¹­Ãû=œ4}oª½Õë×9Ö¾‰_Ï9+èãv†å›pY³U¦eûyÊ}Ï.ÕˆdôÎÀµõ´Ú⛇¡ïí{Öy0™Ùß7ß7Ù­¾÷ЛèˆÎô=”·:Ÿ†÷¯ÁS°Ëéÿ@ŸÝ±çòÞšËþMûW€×bÇ0(x×_±Fû—=%«ÌìÞ·52}æ” Åt¤ì?@ͳ¾eÃ`»©yç&ðú–C.§ÛÞ€9x_éb3‘›Ò÷ €æ²uøZtÄ©§žÊ5×\CjjÇŸ›õT_!„B!„B!„Büz ʩɉ 䛥÷£/R^œÙ£dg” Àž}yAÙgK.¹ê|þùÔ½ÜtÇÕ¼6ç""ÃÛl¯×·žÜ·g×>j$qFFîgÛæþ¤Ôko¾Œ¡#u2ò®÷Í—‹p»ÝDFEpë_nD×DÅÜ=ûq»Ý$$'pÊSÈß_Ȧõ¾|½EQ¸tÖùìÞ¹·+§¸¨q&ë1F¶}Eyã½;`Ppgž4´?gŸ7 €ù_}‡»ê½'ƒA¯4ÿºI ±pjo߬ÒË J°{“ä*›TêíÑññÚ¨xº§¦ŽZ§/á2¢…ÄøÎômêwý2xhüHnÚŸW¦N Ühhµíwû}OÎuŠÂ2›mW¥Í„Öƒ ΓS1ëÛÿ9Z˜[€GÓÐ) ³e5ÛÞ'<”SÓRümÝ­T"/ih|Ñè¸ß«m™¿/·W#Òdäÿ†D×ÁlÝ`]£îòËû©jREyÜÔtî}æ4ÆŸ”NrZÑqV’z…3`xÓ/„Nßò¯çòâÆÉ9RÒ#9ç²!$¥…—Jæ 8.ºn}úÅ´Ø·3ÊK°Û¿SN>'›aãRˆM!kP_?’¨Øà$¶êô*/||>×üi<#&¤kÅ`Ða¶è‰Š³âv7&ÃwUeãê  M’²§ž•۱)Ä%†Òh<¿ âñ6Õc×·‡ÆB!„B!„BýTT†‡°Á±î°íóÝù¤êSéoÐb›S¬§ëÞ°¾ÌSÆF‡/éï ët,Jàνô½üIÆ?Øwà(`ˆi(焞À¼ú¯*0WxÊý˃Œƒ;´ßÙl9‘lc?VÛضŹ™N_¢ô ‘`¸iDPÇ>RúÌÉþ ºž¼ÕAÛ¯·b/xݨáILÃ[•çKô\[ç¢`s¥¯mYN@_×–¯|ɼ–(ÌSïµýÏÂ:Ó·%𽆆oÄ“·T–3B—2¼åÆjëÏý½å»Ñ쾉ƒY©Zk¨ð/ëv¨¯kë<¥_óéÃ0øl”Sº¤!˜N¼ÔÖŸwv…ú÷|‰Ê!—‚iì! ¼¾6†þ~´X:ÈÜ[ç‚תã„ë›mWc20 <ã@ÛyàíxÕ÷ö¸îºëø÷¿ÿÍ_þò>ûì3"#Û/õT_!„B!„B!„Büº¾ÌåQ`ÒøQäæ²/¯³¹å™5MÃáhL(R€›¯½”í9{Ù·¿€Úº:</a¡!df¤1~´ïAa}}«Önì²øO:}²9"*œQc‡ñÝü[mÿäKáv»XôͶmÚAEyz½žÄäxξàt¢c|UŸ·l œeWÓ4ÿûs<÷棘-fž{ãQ¾[°„å?¬¢0¿ǃ5ÄJFfo"£#xõ¹·»æ€; ´¸Œÿ¼ò>Wßô{¦Ï<Ç å³¾fßž<*Ê*0šŒ$%'0lÔ`fÿóE|÷sÿ¶ïæ/á–»¯÷Ÿ«í[rš ¹{öSYQETt$7Þ: NÇ®{P…ôº–ož IDATŒ4zõIáß³ßð·ÏÙ¾‹¢‚“ã¹åîë1™M¬Yµžêª ‘ј-‡¯žÛoPÃF ¦¶º–°ˆ0Æ?šó/Áh ª²š7_z¯Íþ½'ƒá²}‰6›XVPLËMVT8W ÈĪ×ãöj¼¹eg@ûœêZŠl$Z-üqøLzkJÊ©v81êT"F,m$´?qÂq¸¼ßí/d[E5•zU!ÁjáìŒ4…æmÍ'<èLߦNêÕ8[v„ÉȨøXç¶ØvoM s 8%-™é}zj0ðõÞ<êœ.2"Â8§oÖ6&/˜·7ŸI)‰Ä˜M<5i ÿݺ‹ÂúŒ:ñV3j+ ÀÅ 6þ·c—ôË`Zï,z_íÞOËÍ ˜H.‰^U¨qºxkk럣ÜÚz*N¢LFnÒª°«ªEôðPz…†ðÒÆÆj¥6;ooÍaÖ ,Îì“Êð¸h>ßKnmv'FU%1İØhžZ»˜¬kÔ]\N/?ºœ»™ê¯<`x†·\Á|ýªöï®l¶~ËÚ"FNlœ…üÂkGpáµ/,•Õ³g{ù¡];Eój¬^šËÄS24s÷c¶®+¦²¬¡¥î’šAdŒ…©ge1õ¬æIóMmü¥ ÓãµDÓ`õÒªû !„B!„B!„â×å˜HPNïå«°š–’Ä}wÜÐj»ºú~úUÿϱ±Ñ$ÆÇ’ßz5ÏšÚ:Þùð+ìMªµ[iqÙýûú.)*kµ­ªª Ú³ÙĘ £Zm·ì‡•,^°¤Ùú­›¶ó§›îçþ‡ÿDl| 'Ÿ>…“OŸÒ¬]}]½?AÙbµ Óu¼˜¶­Á0|¤þóòŒF#—κ€”^IüáŽkZl÷þ>aÿ¾ü€uÛ7ï$»_¼^o¾øÖ¿¾¦º–%‹–sÒ´IhšÆŽ&‰•Á<^¯WãÕçÞæ®n!"*œ?ÝÿÇ€íÕU5 Ê^¯ÆC}‚Ç^ø¡a!Üqï:À”“'2åä‰ÍÖW”Wr÷ÍR^ZÑB¯F¹'ƒÅ ªœÓ7sú¦¬÷hü²]*ƒäÕ4þ¹j=?šPƒÛ;P\UDGbÖéÓF5ßå…%,Î+ ZßC•Úìd5©N]b³µÑf¯ÙLbˆ…!1QLIMdJjb›íçë=yœÙ'•Ñ‘<<±õïC½¶iq3§¤%39%‘É)ãÖ:]üeÙjÊlöV÷áÕ4^Û´ƒ?L„ÉÈ#+ Ô8] ÊooÍÁ¨S¹¤_)¡VnÚ¿Å}ÿoÇö×5Vx æ5êNëÊ牿,æú¿L <²í‰zgFµ˜ üÝW;9åÜ~$¤„µÚ7¥wÇ+Ž·Ç‡¯¯gØØBÃ[ž$$%=‚õ+ó[ÜÖÉíŒÛúb¾~K§ÇkÍGo¬cØØäV¯U°Ž·©žº¾=y_ !„B!„B!Žné†>þåAéTëÉLµžÜl}…§œ[KÿH™'ð¹˜/”ÿ•§ãž'L ãîè{{œ¥úeÈ&Ë Ìj±M‰§„;Ko¥Ö[ÛlÛfç&þ¯ô&þóqº8N³žÎiÖÓ›µ«óÖ-AYNGËÂ×ú$¡Z] ¶ÏîDs4¹3¼E[ÐÅ÷Í‹{óWãÙkpç,FßïTÐ4¼ÅÛšõu®x EgÄ8æ ÔÈTL“omq ç/ïà­Ì ZßÖhŽ:>¹•ËßE±Da™ñ8õï^îï(*jâ`ƒ}úøV÷ãÞµ÷öo[ÝÞašû¼û±œû4Š) óÉîPwOÞÞ½Óñ@ßg<茾Ý:êpç|aÀéªPkmï(ˆ¼µPó Dþtñz9ԾܴTÜ Q‚iGùþu5DzQÂâ1 8}ÖTôYS¶kölŸÞŠVWÒe11hPãsô‚‚öOîÛS}…B!„B!„BñërL$([¬-ÏH}8•UÕ|ðÙ7dõíMJR‘áaèô:ìvÅ¥ålÛ¹‡Õë6cwt]r2À‹O¾N|BÉ©‰|þÑ\6­ßÚj[MÓ¸ûæ˜tÒD@Ll‘Ñh^ŠòJrvìá»o–ðí¼ïñz[~è·öç üî¬k9cÆÉLœ2–Ìì Â#Ãp9]ÔÖÔ±gW.«Z‡N§Ããñðä¿ÿÁ;|\·]÷W~ùi]‡ûJÓ4^yö-¾÷=ç^x&#Æ %>!£ÉH]M=ûöìgÍϨ®ªiÖwÛæœuÞ4V.ý™¢‚À{Ÿ8—“¦M"/·€úºÆ*—Á>Þ/?þ†êªfþî,²úe‚Íf#gû–,ZŽ¢(hMª¿®_³‰ËgÞÀù—Ì`䘡Ä%ÄFC½êª*Ê*ÉݛǪ嫛õâì7=n8}úö&.!‹ÅŒÃá /·¥‹WðÁ;ŸQW[߬_³ýtàž –ùûòÑ«*#⢉0©v8YWZÁ»Ûv‘SÝòË Ê*¹rÁRÎËì͈¸â¬fÂ\njœ.*ìöÕÖ±êkMÓøóÒÕLJI`PL$1f3‘&#v»ªkùn!‹öâ=¤2ogúêÅ Ûˆ·˜I ±òÅî\6—·]Í·Áíæÿ¾_ÉÌÌÞœš–BZXŠ»ªk™¿/Ÿ›‡ À ¶ž\ÿøê¬/«`zŸ^dD„bÕëqy½T;\Ô7°£²šŸ‹›'£{4‡V­gI~gg¤Ñ?*³^GQ½å…%ÌÙ¾›Ê&Õé[óÕžýT;ÌìÛ›ÌÈpB zln9Õ5ü˜_ŒBà« ðê¦,Ú_ÈŒŒ4FÆGg±`Ô©Ô9]äÖÖ³¦´œjgàØÁ¼FÝmíŠ#FjµZv9sXjûÏë?¥Î[×êùZmÿ…ó Îbzè N°L&ÛM„‰'µÞv»v±Ê¾:ö¹÷¢K.aJx"ŠÎˆæ¨Å[¶ ÷®qmúÍÑzÌGÊS¼çâÞ³oMaÀ6çúÑ÷;oÕ~4gKÏ;5K_Àµm>Æáç£ë5%,EgòÅ^±Ïþ_|•‚ƒÚ·uZ] öùÿÀrÎlÔØLLoÀñÃ36jØ>½}ÖTtÉCPCbQ¬Q yñÖWà-Ý{ûB\Ûæƒæíи‡ãÉ[KÃ.Â0âbt½F£†Å£˜#Мõhöj´úr¼{qï]ÑboùnlŸß:#jH,šæA«+À0ðLßá¹»ö‹CÙ¾ë¹`é«’\÷hMn­*þ諤l9ŒAÍ žRpmçJpóq‡×ƒ}î}¸w.Æ0t&ºÄ(3Þš"Ü»–àüùm´†¶'ï¬Gy„¤¤$ÒÒÒ˜3gk×®=êû !„B!„B!„â×E9ð/Àƒ>¨lÞ¼Y)--Ujkk•ŒŒ ¥´´T5ºúúzÕëõ¬V«Áår³ªª!š¦…išµdÉ’Ïùåÿ¾F݇Óó233{:„{ñ?Oôh‚rwû­oO›;ãB z^Ù´w·íîépŽißÎ< ƒªòüú­|¸soO‡sÌ{oÚdRB­Ì^³™Ïw·o6|!D×ùlúT¢Ì&þ¹j= re¦}!„B!„B!ºÒûï¿ßâúßÚ³]!Dû©Ñé„\õ¶ÏnǽkIG$„B!„B!„B!ÚÒRžï¤I“f(ŠR©(J­×ë­ìƒÁÙÐÐàRUÕâu:ž¸¸8ïîÝ»µ°°0-..N4höàƒ6›…ú˜¨ ,ºÖMWÜÙÓ!t«ßÚñ !„B!„B!„B!„a~oAóâ)ÜÔ³Á!„B!„B!„Bˆ£‚$( !„B!„B!„B!„BüÆYÎzoe.ž‚õxëJÀeG KÄ0ðt ƒÎÀ½ã[´†ŠŽT!„B!„B!„B $AY!ÄoÚõCúqÕÀÌ€u—/ø‘§«‡"â×ïÚÁÙœ™ž°.Âdì¡h„B!„B!„BªCŸq<èM­6ñoÃþí#Ý”B!„B!„B!„8šI‚òQäÇ s{d܆žÑ#ã !ÄÑ Ä 'ÄøëPQ” íÿ½%—m_Ç‚K&½ÝÓ!ˆÃèÌ=¬ëbÐený'!„B!„B!„Bt3UcÅ«èÓÆ D¦¢X#QtF4{ ž’í¸w,µåkðÈ$¿B!„B!„B!„ÂG”"’(,~Îø|aO‡ð«qò'ó{:„_•K¾ù¡{Æ‘„]q”9îɧ×náéµ[z: !„B!„B!„Bävà\õÎUoõt$B!„B!„B!„â¡ötB!„B!„B!„B!„B!„B!„B!„Bˆc‡$( !„B!„B!„B!„B!„B!„B!„B!ÚM”…B!„B!„B!„B!„B!„B!„B!„í¦ïé„G‡ˆÈpúf§SQ^ÅÞ]¹=Ž¢‹( hZOG!Zb 5¢ª u5ŽžEü Ég_!„B!„B!:Î0ølt ýqï_{Ç¢žG!D$$$Я_?ÊÊÊØ²eKO‡ó›å¿999ÝÖWô¼ .¸€Aƒ±råJæÍ›×Óá!„B!„BˆN’e!zÈ€ÁÙ<ðèÝX¬fyàV,YÕ£ñ|úí1 <÷Ø+’ ,ÄQê½i“I µ¶¸íì/Qíp¶Ù?£ ³nÇ¿ÿµ”ü½Õ]bzsÁ%˜Ì-ÿ¯ÍK/cɼ]ÝÑáEÅZ¹ö®ñôʈ$&>„W[Áâ¯vvx?'ÏÈæüYÃñz5Þy K¾éø±“̉ӳÈGD”‡ÃMu…¢¼Ö¯,à‡¹98ìîïWô¼#ùìß:b çöíÝâ¶®Zς܂`†(„B!„B!ÄQ%Mß›«"®fq úDÜš‹Bw![[Xa_Æw ßötˆ¢›˜¦ÜŽb Å[[ÒÓ¡Ñ)W]u÷Þ{o³õ;wîdÚ´i=‘=gþüù„……ñøãK‚r; :”gžy«ÕÊŸÿüg/^Üé}._¾£ÑÈC=Ôá$ãÖúþÖ¾ë‚u¼]q}ÛrÏ=÷FQQÑcB!„B!„­S{:!~«fÝô{Rz%Ån¿º§Ãâ7IU’C­¨ŠÒÓ¡tˆÝí¡Æé ø§¦4ªN¯rÝÝÈèÿ^›Î´ópŒö¯Rh˜‘áãRˆ‰9â}ÄćpÕmc 2cáÚ»ÆiîÐ>®¼m,~âdÆNéMtœ^Åb$©W8#Ƨrå­cêØ>ÅÑáH?û¶–¾gº>\!„B!„B!zÜÓ0ÞMú€é!3ècÈÀªX W#ègìÏ9¡3¹.âÆžQ!„è2ªª’––†ªÊ+e¢Ñ­·ÞJZZ±±±üùÏîépD‹×÷XŒY!„B!„â×꘩ ÃØ‘CÈèJTT^¯—ŠÊj¶çìaÙʵ4Øì]ÒWˆ®âñxüËî&ËBˆî1&!–L‰Y§cÚg °¹Ïá‹¶ñùîŽU:?î„4ÒúF`0ê¸ü–ã>>…—^NeYCW„ À´ó5(Ž”ôJ j™}Ï÷]6–½Áå_V£I×ecM¢b-(jcÆ©N¯c¡¦ª}ÿ3þ¤tN=·_›mª+l”Ö5[ß×÷hp,ï‘~ö_Þ¸—7nX÷Ùô©D™M]¯B!„B!„8zèÐq^ØL™AoC:ùî<¾oøŽwjߦÁ[ß¡ýz!wGßÀ?+þÆguŸ¶O˜Æ‹ñ¯Òß8€?•ÞÆ÷¶ï:4æ(óhŽ7Of¤y$qºÊ=e\Vtq›}î‹~³b¦Þ[Ç ÕÏñ³}%ÍC¼>ž,Cv—Û­}æ ýOC—<Å…ævà­ÌŽk ®5sÐÍÿ&,DWÐ÷‚¸_åׂs]ó6¡×BØu€·€ã§–÷eÖóÀt¨± ÙÁSÎUPÿ1xòºì0zÄŒ3˜={6ÕÕÕŒ;—ËÕbÛwß}—?þØÿóm·ÝÆå—_Þ-qŠcǤI“xñűX, 2„††®{Ž,Ž-n·Û¿ì9Šßqú­}×ëx•ëÛÔ±³B!„B!įÕQŸ ¬( §ž8ãÇjVá2)!ޤ„8F È+ÿù€ªšÚ õ¢«½öü‰KˆÅl6ñÜc¯ôt8BüæX z̺ßF+ÀO‹÷RRXË9— aÔñi( =.™“ÎÎæ£7ZxÓ#HN;¯? )aT•Ûºl€ÏùпÜ;3š‡ß˜Þ¥ã-rwURRXG|R(ûªÉßWÝîþ'ž™ðó{/®féÂÝ At|½2"±X -öíÎë{48·§>ûB!„B!„âØfU¬<ÿ#M£Ög²ÉŠÈæŒé\W<‹Oq»ö7-äLîŠþk‡bHѧòXìl²mO°Ø’!¦¡ÜuƒCÖ›c›ýú2écÈ`vÕã|Q÷™Û~w.«í¿tɸÝÍ2ã ô}'¬SŒzt Ð% À0è,Þ¿­®´‡"¢‘q„]ã[®ÿ_+ÉÉ „ÿ„ühRôU1‚†l°Î„âS@svGÔÝãÜsÏÀn·Á”)SX¸pa‹mN'N§3àg!‚Åbéé0ÄQè©§ž"11‹ÅÂC=ÔÓá´ê·ö]¬ã=V®oSÇbÌB!„B!„¿VG}‚rdxãGGUvìÚËš [)¯¨"4Ę‘CADx(ÓO›Â;~´¾Btµœí»¹úÂ?ötBˆßÝÛÊ™}Ï÷ôêɌˆÚ'’Ïÿ»±§Ãätxxà†¹L93 ¯×Ëâ¯rð¸½íé_Þ²¶ˆ¯Þßìÿ¹ªÂÆîmeAWt?ùì !„B!„BˆŽº#ênrò›5¯ñiÝÇhhožÄ£n%EŸÊC±p}ñ,4´6÷5Ü4‚û£ÿ†††/:Úž<ô`åæ#þH¨ÚáØÏ=‡?GÝ‹A1ëÎe~ý\Ö;Ö‘ïΣÞÛvUà$}’y©mI·ÛÝ\Û¾AJõùK<Ñì5¨¡ñ‰¾ÿi¨ɘNø#öy÷÷t¨â7N…¨‡\Û ö¹–ÛEÜÖó}Ë®ÍP÷ޝ½¢‚a„\ îÜ_Wrr||<&L ¼¼œwß}—[n¹…3f´š ,„±uëVÎ>ûìžCt‘cñú‹1 !„B!„BüZõ Ê•Õ5|6wv‡ƒm;÷lÛ±k—_t6ý2ûÐ/3£Á€Óå J_!„â×jÿž*žÿûèt OÛ/ŽýV)ª‚^ï›b_Ó4Ü®ö'üö„êJ;Ÿ¿sd §!¡•;Ê‹ëƒR»kçùX'Ÿ}!„B!„Bщú$¦‡ú^ö³æ5^¬jÌü¨î”yJy<î)F˜F2Æ<Ž•ö­î+ZÍñcP áa¼uêñÍÖsΩÍÖ­.)çö%«Zw@tçg¦3<.š“‘:§‹å•üoÇ^6µñ»$×(˜Ú› ¨7¨L8¹£&ö¢Ov a‘&E¡¦ÒNIa-VðÝ—;©«qðæ‚K0™›ÿ/ÆÐ1ɼ·äòfëßzz > ü}—ʰ±) •HJï"c­˜Íztz»ÍMyI=¹9•üïÕµ”ÿ%‹¡Ç%s÷ã'³¥Œûo˜{Ø>F“Ž“ÎÎfô i¤ö‰ÄjÀnsS[e§´°ž-k‹˜ÿñVì¶Ö¿?Nž‘ÍY— "&![½‹][˘÷ÁV6­nþií<¼ôð2–ÌÛÕê8­õ=aZ_N˜Ö·ÙúûoœGÎæÒ6ûväúúûÁy1!•©ge‘5(ŽP#µ5vo-gñ×;Y½t³öf«ÏÌ$£ ‰©á„E˜‹0c0ꨭ¶³cS)ó>ØÂŽM¥Íúëx;óA]ñYäd!„B!„BÑ–±æq¨ø&|¿ö½fÛ°-¦ÔSJœ.Ž“­§¶š ¬¢òÿgï¼££ªÖÿýLÏLz¯$Ò)! T)ÒA,`AŠëU¯Ü«^X®(x±+‚¨ ‚"H/R¤ é½¥÷Þ§ýþ˜d’a’Éœ€~ûY+kœ½ß³ß½Ï>'YgïÏûú¾…ŸÂŸoJ²¬ìñz¬Ù¶Ã”íU†‘jHáã¢yì­ÚÍoa;Zä·NîÊë¾³#ç•‚—XW¾ºEvUQ|ü“ÝùmíìûõQÑñû¢ IDAT,,ùJ’v¢‘i¸Éu$ƒ´CˆUÇá-÷Fžbc1gô§ø½r;¿”ÙûØzšþFhL?„2z02¥Æ’~Öì¼ÐZÕu.Ãþƒ©0…ò¯Æ5[WÑÝc.˥쳑öåAPu¿e»îÈ´Þ˜«K1¦ÿIÍþo1fnþÚNØ6†Lë‰nÂWÈ}"0埧bɘ«m¿ÓÊT:TÝ' ì8¹w82µ+æšrÌUŘŠÒ1¦î£æ¯nûJhú>Œ"¼2wd.žÈjÌ…3Q“¼ä ý•¡Š޲ÓhqÈ\<0ª1Wb*¸ˆ)ë(úãk15ým[ ¼^u"`‚¢Áh¿T€{íò»!ŠgAS±Ìm£U}#ª®·£J@¦Ô`*ÉÂp~;5û¾Á\QÐ6cÇŽ`íÚµ¤¦¦rìØ1:uêÄðáÃùé'éÞwß}73gÎäÂ… :´ÙºýúõcÑ¢EdggÓ·o_›²§žzŠ~ýúˆ··7jµšüü|8À‚ 8xð Ýõyäþõ¯0hÐ RSíç\¯^½X¼Øò·jüøñì߿ߦ\§Ó1yòd† B‡pss£¬¬Œ¢¢"RRRؽ{7Ÿ}ö™Ccr%&L˜@¯^½ˆ%88WWW*++¹téëׯgÑ¢EÍŠÈ[3VÎô7&&†µk×Ú]ëÈûàÈ»víbâÄÆ÷t$&&2yòdzö쉯¯/ÅÅÅ8p€/¿ü’äää&}v©æ$À!C:t(‘‘‘hµZrrrøý÷ßùä“OHOOoöÚ­éïøñãILL$>>ž€€<==Q(dee±cÇ>ÿüóFç¹3Üzë­Œ;–¸¸8¼¼¼HMMeãÆ¬\¹’§žzŠþýûc4Y³f ³fÍ¢¢¢~_Ç”)Sx饗ì®yæÌFŒÑ¢ö•J%“&Mb̘1tèЙLÆùóçY±b²+ìSrÆÖY®Ö|¾FÍðáÃIHHÀ××½^Oaa!'Nœ`Ë–-|ÿý÷’´%Åým Ÿ½¼¼Xºt)‘‘‘œ={–;3’’I|vö”ÉdŒ5ŠÛo¿Î;ãááAuu5ùùùœ?žC‡ñË/¿péÒ¥÷W @ àÿ rsÔÔÔ ÐôÍ¥¶u„ǧ?HL|÷=p;¶ìáØá¦…Óž^|´ð]""ÛÙœw÷pÃÝðð y“å„.±¼úßç ²9¯R)Ñê´…PQ^)©@ù‰éâêfr8´]0¡í‚vó@žyø%N4!vœöÔdî{à.›s>¾Þ ÚCú2çÍOXþÃ*kYnN^ÞžWôÍÇ×€œì¼÷§)®U»u83ήn:fòãmÎÇÄGYçgS( þ3óŸ ¿åF›óáí߯-· ç¹'_µ’K=VŽ>GÎðX×8\U¶¯GW•’ob¼=¸­cÏï<À©ÂâFí{ûwY¿ýµ.ÜÌÀÐ Þ=p”5Óìì<Ô*>Ô›7›óîjîj¡n:ä2Y£Vgl/ï{Œ·÷ÆE²##›ãM ª2Ï$ubôeï+% ‚tZ‚tZzúQ®74)2n ™Œ®ïʰð›óá»wàæöa¼°ó@³báÖòpçXî‹´9çí¢a@hýCƒ˜{ð¿œK±³“ê]mb:ûóÄŒøÙ¿{ü‚\ñ r%¾[[WŸ•¬ÍGEóпû4Yî¢UáIh„'ßÖv‹Žàã¯ãŹà nçasÞÕM«›š 0º\Ìæ•§¡r‡X_ë±ÊKARŸ0’ú„ñÕ{{Ø´ât›ùÿwAí¢ä±ûÑs`„Íy/-Ýû…ѽ_;6œç“7wb6Õo°óteâ“×7zMo?½EÐs`_üw—¤sÙŸáïù,@ @ þþø+¨4WR`Ì·+7cf_Õ^nvE‚ºS“×™âù =]z“\½Ÿ‹>hQÛËÊ~äxÍ1vVþŽ îr÷û}§Û]xʽØWõG«D­ÅÙv;«»0ËïB”¡6çU¨Ð)u+ƒ)7•K,PnEh"Æì’ˆ“Ìe–à2mÓÙ³ëë,ßÉM¥ÙvešþO î9ÙæœLçS›ñùFª~û/ú?_Cwƶ1djW´·}€Ü'si6•?ÿÃ^œ¬õD7þKä¾lÏ»x sñ@îÕ™\Þ&eE‡~(‚lŸO™{ÊØa(c†Pµa&ú£+íû¥Òâ2ú”úÚ—yj‘{†@‡¾˜«Ê¨I¶` îv”å¸ä=¨ÞÓx=eGPÕ.—/³¾Í\²G®ÀeÄ«¨âm…ôrŸÔ>QuCåò§[%~¿ÄÅÅ‘——Ǿ}ûX·n]›”³³-Ï¢Ïëúùù™i¯&4h]»vµ9Ä-·ÜÂÈ‘#ùÏþÃÒ¥¶ÏàÖ­[­å¾}ûòÃ?Ø]·gÏž”••Ù w½¼¼øá‡ˆŠ²Ýáé鉧§'( ÉÊÏ?ÿ<îî¶¿ÜÜÜèÔ©:ubâĉ<ôÐC €¡uc×®¿ÿú׿xä‘GlÎùùùqÓM71|øp^}õU¾ýö[IÚ’jNtïÞÝæ÷°°0î¾ûnFÅ=÷ÜÃñãǵkm_xỹÎ=÷ÜÃèÑ£™4i‡ºbßZÊÃ?L||ý>¡¨¨(¢¢¢xôQÛ$ &LÀÏÏiÓ¦IÖ¶›› .$))Éæ|ݳÐV¶Îr5çsCºuëÆÜ¹si×ÎvÿJ¥B§ÓJyy¹de)Úg777æÏŸOdd$™™™L™2Å*N–gžANÇG}Ä€ìÎët:ÚµkÇÀ)))aÁ‚’ù,@ @ðwào/PNˆµ|XÏÍ+ ¸Ä± ŠÎØ:B@¿ÍïÁþÍ +'M»›ˆÈvèkô|1o»w죨 •ZE`?± QT”W6jÛ1¦s>«“ÑĆÕ[رui™Èdr¼¼=éœ×fÂέ›v²ré ŠÑé´tíÞ‰É܃«›+/½ù,÷™†Ùl+¾¹wêVqrò‡ùbÞפ§fÒ."”GŸ™Jçnñ<õü4Ž:Ι“á^n¶e3„›»+*•²Y¹·¯e¡[²“í.[¼’_–Ög‡œöÔdîºo¬Ã~´fœÿýÊSVqòêåX÷ëfÊËʉŽëÈ÷Ž!*6²±¦xø©IVqò¦µ[ùõ§u”–”Ñ91©Ý‹—·'ïÌ{•ÉwGR°5-‹eg.Rª×£S*éìÏø˜ø¸hxç†ëx`ãò«ªíì;ƒÁl&£¼‚r½¥LFœ't‰%ÜÝg’:±##›’ÛòIñQDx¸¡7™øòèiödåRT]ƒJ.'@çB¬·'MŒ£3¶ йØü¨Ó6+PžÚ)Ú*N>^Pħ/RZŽÐiyµw74 ÅÛu”‡:ÇXÅÉ›S3øõ|¥z=}½˜’—FÍ[ýz0uãr+«¬vKJ¶|=ýC™Ñ«£Wn¢Êh´iÃd¶ÏpOl¤Uœ|07Ÿ/Žž&£¬‚0wWéKg_oþÑ-£ùEœ-²]$‘ê]M¢:ùóâÃQ©š¿‡ÏPRT?ÎUõs[­QZ´›Lfô5ÆËÍ1l78©Ô-›3e%Õäf•µ¨n[3õÙÞvâäË)È­°f™v”ûž¸žä]iäÖG¬n8Î2™ µ¦åÏZCÛ†ÙF½ý†3SƒŒ»ÎÞ_g˜ö|_;¡ïåÜ0<’Ôó…üºø˜C×–É`òÓ½8´7ƒÂ¼ÆÇ¹5ýuÆç¿ã³ @ @ øûSe¶|ïÕÊ´heZ*Íöë’ùFËšŽŸÂß® J̓Ó(2òbÞs˜šJiÚÈu¯ÜÖ*¿G¹Ž À”Ïlÿ¹Ä¨âðUøRn.çXõ~,ýžÝU;íìÎëÏÑ/Õ"p»Q;˜™~o04m ]ß ¨[Û.@´*†>C'wÅ„‘µåkØ^¹•4C*räxɽéªIäHµôdžÈ4nÈý£Q'M@=³¾Šêms%»¾©,§¶wP¨ÀØ´ŠT¦³Î̵6u¨{N² Œ©û©Þñ1¦¢4äÞáhüEHW\nœŽ1㦜ӒÙ6꣋ÚÛç¡ê„©$“ʧa*ɲ«§îý Eœl¬¡zÇ'.ìÄ\QJr÷ q˜k*iÁyjv}&¦âtÌÕe W¢J@3àÈ}Úã2ä9 ç¶a®´ Ȭö«8Yr=†£+1•å"Sjy…¡½y&È¥_ûkˆn¸M±—å?6]WÝ@[Xµ¥MݲCsÃãVq²þäzô‡—c®.A’ˆ¦ïÃÈ´Þho›Kù¢ ˜Ks®p5Ç>|8›7oÆd2YŸ}öYúõ뇋‹ UUUÍ]¢ÅdeY涇‡*• ½¾éç·N ZgÓ>øƒÁ@JJ ¥¥¥¨T*ºvíÊ¿ÿýo:vìÈk¯½ÆÆ)*ª_›>yò$YYYѯ_¿fÊ{öìÁxÙzï“O>ITT555¼÷Þ{lݺ•‚‚Ôj5ÁÁÁtéÒ…²²¶[_Y»v- , ¸¸www ă>ˆ¿¿?óçÏgÔ¨QääØÏÖŒ•3ý=sæ €enÍkyÿ÷èуÊJÛ¿ƒ—1À´iÓ¬bÎ={ö0{ölRRRèСÏ=÷Ý»wgÆŒ$''7)øu©æ$ÀÞ½{ùî»ïHMMÅl6Ó·o_þñàîîÎ;ï¼ÃèÑ£íl¤èïºuëX²d ùùù¸ººrÝu×ñä“OâîîÎìÙ³>|¸Ýžgyÿý÷Y¸p!½{÷æóÏ?à›o¾áƒ>`РAÌž=›¡C‡Í™3gX´h‘5C9X„»S¦Liq›o¾ù¦U`¼téR–/_Nii) Lž<ÙF8-¥­3\íù\G\\‹-ÂÕÕ£ÑÈŠ+ؼy3)))Èd2|}}IJJj6ƒº£8{¥öÙÓÓ“ ˜˜Hzz:÷Þ{/’ú\GkžÁ™3gZÅÉ¿þú+Ë–-#;;FCDDsæÌAÑû£@ @ þü­ÊíBHêbùà¸a뮫fë([ÖÿNL\GŠ‹J8°·ùH—]ºY>üoX½…%_ÛF¶ÍÍÎãè¡™0ýå'йj©ªªfú#/s(ù¨]?vp´ -æÔ±3ìÛ]ÿañðÁc”––1ý¥'oF§®q6þûø2õÑ{ؾy/?û¦u­° ˆg¦½È’_¿À/À—ñÇ1óÅÙädÕFÙ–Éðõ÷!+òhóè3SéÒ-Oç.àðÁcµmX²3œ_ôs¶]“ÉDMu}æn“±u¢-GǹcLßԀŠ—ñÉû_YËΜ<Ïú_cãËQ©ì_ A!L˜8€5¿lä­sll“÷bÁÒððtgê£÷òΫ–øRß#GŸ#)8]TÌ‘x±?;Ÿ9{â­Q3)!Š÷“íp{jûÞ9¤””³è¦þ¨rzù³1ÅöCz?K&é)|ú‚MYneÇò› ;cÛ-i™D{YD–%5z’sí3#Ô saBŒE¬»;3‡w%clðþlq)“4“-"P§e|Œ%ÒüÚ‹i¼½¿>²ôÙ¢æ0X?<Ô*&'Dñîú÷ ¨©}îúª7™¬ç›ÂO딄h~OÏfÆžƒVsau Ïþ¾ïnˆŸVÃøèöÌÚg»YHª{tµËe<þÒ 6âä3ÇrÙ¸üÏPU©G«UÑ®£·Hóѱõ»ç,¹ÀPKÚ£û3y{ú&‡}9z “ 'ó)-©¦¦Úˆ‹VI@ˆ;½ýøµ@¥VЭw}f‹fóÅw“—]†R)'0Ôƒ„¤@\Ý5W¼Ö–Ugظüf3Œ½¿ ½Y„­j‚^ƒ"X»´þÝÞpœ#¢|xë«Q-ö¹¡í×›ïµÞç/ðé›o”kÌVŠûÛR:_LŸÁí­¿ïÿ=…ï?;HAn9í£}x`zoBÛ[^Œº»3ë–žDßÄùyáa¶­=‹»§†1÷uáúá@ý8¯[Öø8;Ú_)}†¿þ³ @ @ ø¿Á©šú±ƒtƒYÛHVà“%H§‹ÜÅ®LŽœ}_A)Sò^Á»ä"|%|~´WYÖnÒÙf3UËÔÜ À Ú|YüŸlSnÆLÙ\Ò@} Q½¹Æz¾-ÚxÁç%trWªÌUü#çQV'ÛÕÙSÕvkÙ2;nOت:Myg©\;£EBÝ–b.­†ÉdÈ]ý0•X2YZÄÁ‰Tÿ>cúŸ–*î– Þuudnhú< €áÌ*}ΚÝÙXQ@å²Çqú327Ô=î¥jí+’Ø6†ÌÍÝíóûEa*¸DåO7*N†úlÔúë¨ÙÿM™±4§M2ëÖa¸`ÿ­ßpn;¦‚‹¸NYJ Êö}ÑŸXk-—ÄÖ n-£jÓÛ¶È>#_ÚN|ã2\-Û¨Ü%ï7__iù¼1LÅÍו¹G0êëî@t%Uë_·–™rNcLÙëý‹‘¹x éó0UfJÚþM7ÝX2 ×qêÔ)«˜÷†n`Ó&iÖlêÄa2™Œ€€ÒÓÓxî¹çèÑ£ÿýïÙ¿?Ö: ièk›6mâܹs¬_¿FÃÀY±b…Ý„ èß¿? …ÂF «P(èÖÍú÷ß·»~=X±b_~ù¥MYVV–¤B¿Æ8zô(ÔïÏ9xð ;wîäÛo¿Å××—'Ÿ|’—_~ÙήµcÕÚþšÍfª«kÿêÿÖÔÔXÏ7E`` O=õ6là‰'ž°Þ£üü|&MšÄ¦M› dêÔ©LŸ>½Ù뵩æ$ÀöíÛY½ºþÿœ#GŽPVVÆë¯¿NBBñññœ8Q¿n(U9ÂŽ;¬¿ïß¿Ÿ’’Þxã "##éÖ­›äó3==òòr6oÞ̹sçèØ±#»ví¢°°åË—óàƒGRR’U l4mž¹ÆêMÇ-·ÜÀ_|ÁÛo×ÿM9~ü8Ë—/çØ±c¨T*ImáZÌç:fΜ‰««+•••L™2…}ûöÙÕÙ¾}»dís÷¤õ900 Ëùóç™4i’8Y ŸëpôLHH`ÌKP¢ï¾ûŽ3fØ\ïèѣ̞=[”@ @ ü‹üZ;ÐZ|¼=¹÷ŽQÈdpìäYŽŸ:wUl[÷óä¥Îâã÷çóÐÝOS|YVÍË)*´¬œ%tÅÓ«ùlŒ ‰Š´fÈ]øéâFÅÉׂ «¶`2YD|1ñmʆÝr#j½ÞÀûo~l'×QUYÅOK~ × =¬ç‹‹J(/³D“ö ð@.—3úötIJ`À¾Öº~þ–(Ûi)ö.åZµÛšç!#PS]Ãן-±³5ÐDôÕá· F®c0øê“oíÊ/Oeý¯›zó ”J‹ÈYê±rô9j+å°æBÃÃCQÊe-¶M-+'»Â©:ÄUgW^T+^÷ñÂCíØBŠ3¶ ùîäyfì>ȧGNòðæ7Ô_N]ÿMf3ï%³ü¶%Ã#BËdLf?kW~©´Œõ—, ŒCÃCºGÍ1,<µBŽÞdbÎÁcv–« F~>w€žAö#¤ºGW‹¤¾aV!&ÀÞ-—xõñuìØpž´ Eäe•“z¡ˆ]›.°o{J›úòÍÿö±ä³dV-9ƆŸO²ò»£|ùînÎý£MÛm) ¥yƒyVU©'7³ƒÞDU¥Kg X»ô˾úóŠ×:{<‹g ¸t¶€ÏßÙ…±p>2ηMüÿ»0ll¬õ8/»œy¯þNFJ1U•NÎáãYõ›­Ü=5tŒoz¼òsÊÉÍ,ãüÉ|>}k§Í87gw-}†¿þ³ @ @ ø¿Áª}¤,ß}§{?Çh×±ø+üQËÔ*‚¬Ê­eí©ÜTng§ûx:«»°»jë7·1ªúoqËÊ~àáì)Ü”~#Sû05û~ŽT[ß>è9nš¤¿D»ÑêXºh,Ö/‹?mTœÜö˜Ád°9#÷DÓs22µýZV«[©,Æ\c™+2·Ú5™U—±(BQFßXß¾«%°±©0ÕzN?”0ê©ÚüŽU`l½¾¾’šƒ–̪uÙ¥°½¹Oº»¿Bî…1ëß?Ф8À\a N«îŒLëÙ쵯¦Â«Ï2¯0›2UüË¡šê]Ÿ_m×pÈÁ¬‡Ò±Dnyí°š®r`eüHÉÁd f·ýX™ . ?nyÿ)ãF€\ºÜtëÖ ½^ÏζBô:‘î!C$k¯¨¨Èšu·Nì©P(?~<=zô°fsnX~éÒ¥_ÿÂ… VZxx¸]yxÔÃÃÚ-¹Ž®]»¢ÓYÞU‰à èÖ­^^^-ö©-ùã?øñGKZð±cÇZ÷W´„+Õµèï˜1cÐh4èõz^yå;±`EE‹-`àÀ’´ÙÖsrÕªUÖã®]»Ú”µeùåëž©Î;;dë(uÙ·}}ë×&ë²y{x´|ŸZsŒe ®]]]ͼyóìÊFc“Y¢±u†k1Ÿâãã­Ù¢ç͛רÐ÷¯†”>GFF²téRbcc9|ø0wÝuW£â䶦¹gðÖ[o ªªŠ>øàªû&@ @ðWço™AÙ×Ç‹î½W–¬œ<–ýºáªØ:öMÍg#lÈÒoWгo:tŒ`ñ¯_°âÇ5¬Y±ñŠBפëºX×®ØØj_¥¦²¢’ü¼ü|ñò¶]xíÖÃòAïøá“äç4jñœe„—·'^ÞžVwfzQ±‘pôÏtNŒÇÝà €Þ7\LJ³¿ 0Äe;=Uš—תÝ+ÑÜ8Ç&Dpîô*Ê+ºnçnÑûù3ÉÎ´Ï °sÛ^F»  Ñq‘œ8j‰¨.õX9òµ%¿gd3:²Z¥‚Žžœ*´ ÇíªRr[Çzù¨sÁK£¦Ò`$½¬Â*LÕ45sÙ™‹\èG7¾1•çSX{1´2ûÍ=RÚ^ζô¦7R4¤.#ðÉÂbr+«n§µtöµ´{¾¸”ìŠÆçóîÌ\Fuh‡‹BA”§' ™žXÛßãEäW5)úb‰e!ÔK£ÆK£¶Š’AÚ{t5è”dóûób6]úµà½oÇÞøbkT‚‹·ßosnÞkÛÙ½ù"Uz.-$"Ê2G’ú„1ûÛ±lYu†=[.‘“QÚ*Ÿ*Ëõ䤗Yýòò•n3ص™qNè^?'ËKªyW¼M]ÙeÁBÛ{qòpÎ}jËqn+Ÿ@ @ ‚¶Ä„‰—óžçÀÏð{2Ã÷µ&ë–šlÊzʽ˜æù8&LÌ-œÝÖ®ZñRÔ ±Þ)xÓ¦ìHõ!žÈy„•¡kñ”{q»Û]üY-MVBgÚí¡¹ÎzükùJIüqsu¥sz#sñ@îÓUÂͨºŒE;­WKcÓÁlj«8™ r`Œ‡Q„tEæbù.«lß—jæ ó¶Ô/ª(+º`Ì<‚¹¼ñŒÜ¦üó{­72­7æÊB§m¢ŒG}Ý}È´^/ýAåŠé˜õÍöYŸ¼eûÞÈ}#qºý¡eè­ÂTض_d7TÝîDÙ¾/2`ä:oÌú L…©V±´L©±±Q&`Ì=ƒ¹¢ñµû¶¦f?¨¯™ |?ƒ‚ÇÀÐ]a3KXÊàS›‰¹àŸ`¸à¼ŸuÙ±¹g›©ÎÿŽªËXd*1³Ž;ß00xð`d2üñåå¶ëŒÛ·oçÎ;ï´Ö‘JÀ—ššJ||<¡¡¡$''“””„§§e 87ß´¼ÿBCCÆÅ îîîÜwß} 8ÐÐP|||¨¨¨àÒ¥Kx{[ÖØ\\\ììöìÙCvv6 6ŒÝ»w[ËêË)))¤¤Ø?W .¤ÿþDGG³yóf/^ÌO?ýÄÅ‹'Ù¸q#wß}7:ŽøøxŽ9bSÞÚ±ºý­»´ \/çìYKÐq|||¬BjgbN6Eqq1ùùùøúúâïo˜¼-û[QQANNAAAøøø´Ø_gɤ öÞuÏ“'OÚ½«ÚÒÖ®Õ|îÕ«—õø§Ÿ~rúzW©|îܹ3>ø ÞÞÞìܹ“Gy„ŠŠæÿ¿j+š{»t±ìÉL|h<ÏÑ?Oðã·¿°mÓN»LÃPŸ¥¶´¤Œ‚ü«"ø TÕŠÕµÍyßÚ̹‰=:óûá5W¼Ž‡§»U œžši¿†X"žöÜ€ò²r""ÛDfz!¡qPZJ¦$}¹Ví¶„¦ÆÙÇײ9"'»ñE÷æ¨}N‰ IDAT»GM‰“-eõæ}ýê?Òþ•ÇÊ2Ëë?†ûi5œj°G¡½‡³û_¿ÖvAP£PàÕà¾4¶ÎóGv/ï>È?»wÂ×EÃ}q¹/®#Gó Yzæ"ÛÓ³í²öJaÛZ|],›2½KÕnveÓíf5.ûj5`¿¤íZîi¢ŸÛîyÅúîj•@ùZÜ#gð tµëõF²ÒZ'²ýÿ…ÿ½ºÿ» O-¡îL˜Ö Óºsêp¿.9JòÎ4‡¯[QQ?‡ÔûÀÿ¿ vQâêVÿˆö!"ºù…y»ºÙò†´Å8·µÏ@ @ A[r¼æwgÞÁ$)ôÖö%PˆÞ¬'˘ÅÞªÝ ÓÀ_áÏyý9»ISp—»³ª|¥]Y[â.w·«ej̶F+Ìl®ØÄ8·;Hréþ—h×_a=•˜J(0^[¡ƒ¹ªcÆaŒ‡1œÛŽvÜÿP& NGMò÷’´a*JCîc +£YÚ®.CîÛ¹g¦â äž¡µõëʲڬʊ°î¸?»ÿŠmÉ´V‘±3¶ QÆÔf¤5›©þcÁÅɆ‹»©\ù/\†¾€ÌÕu¯©¨{MŘq˜š‹1œùÍ.£³È}#ÑÝþ!2÷›ó2¥…Ö»áÛòZá²¹äÚ­Ù–~òŸÀë5P€ïç7Œé×7[b#o&Y¬Lаúc)¨›WæÒ¦?›Œc]})¸ñFKÆñ­[·Ú•íØ±£ÑˆŸŸ ;vL’6SRR¬bP€aÆPZZJTTíÚµ#55•°0Ë@_.ŠŠâ믿&(È6@²‹‹‹¬1±¤ÉdbõêÕL:•[n¹…Y³fY³šÞpà Ö~7ÆöíÛyôÑGyã7à±Çã±Ç#99™ °~ýz» ©Wƒ´´ú5ÃÀÀ@²3cu-ú`yÏôìÙ“sç®üwßËËKA§³sòJ”••áëë‹V«µ9ßÖý­¬Ý¡Ñh®P󯟟彗•Õ²ùRÙ:õšÏu™¾‹‹‹ÉËs|_×µ@*ŸGŽ´ì½1›Í|òÉ'×Lœ\GSÏ`]pˆôô&þ!@ @ øÿùµvÀ|¼<­ã¼üB滌Ҳ–}˜rÆöZ°cËî1™Y/¾ÇÑ?O–L¶¯Ï~E?BTl¤½QíúƒTQp¥¤)Ÿd2Ë4MèkôWüQ©ëW /]°,JÕfß8¬E…Å|ý™e‘¼ÿ½ÑhÔxûzQUUMvf¶$}¹Ví¶„¦Æ¹î´Aopøš²Ú‰ÕÒyÕ°Þ_y¬œA%¯uÊ,ÜË€×z'á¯u¡ÚhäÃC'¸kÍV†þ¼ž›WläÁM;É©h>ÓðŽŒlƯÙÊ›ûs4ß²ù¡³¯7¯õNbá°ˆòtoÛÖP×wµÜñ?% §“£Qy­µ[øª“ê•X—èÔd6£7™®øÓظ\í{$†ÓÿéìÉ`¨V”×ÿTWÕ¿/M&³MYEy ½í†¡Ì”^˜ºŠuKOPYnü$¶kÓßÌô·£P:ö¼4Ü—Ô–¬¯­g¥ƒã`6¶|ζÅ8·µÏ@ @ A[“mÌâ¿…o1.c4ýR{2(­2oçë’¯ðUX'®>dcs«ÛXF¹ÞʾðCv?žµ*Â}^a_ø!õzB_kÌõA=åÖÉ4XuÂàkÝnýÓ_ë» áÂ.Œ‡P´ï#ÙuM{† ŒŒ¹²š=ó-¿wJ 2f}•MVZëw[³É’ÑùJ? µ$¶6ãrq7æêRÉÐûeÌÐõÛpve_Œ¦jí+õãÒíè·qôrÿ˜–a ‘¡ý¶Eœl¨¦zËû”1ŠÒ¹}(›7òoîÅ\Úøš¬ÙP+°—_Û€©U› ðY0×€Ü|þrïÆëÖ>^(‚@¦»z>Ö¯W^ÝçW©TÒ§å¹|ñÅ9wîœÍÏÁƒQ(,÷oàÀ’µ[—1´Nì9bÄ øðÃ:t(...øùùQYYi#à’Éd|ôÑGQUUÅÌ™3éß¿?qqq$&&2zôh23›ÅÿüóÏ€E´Ø¯_?À"ؽî:K&úmÛ¶5i»iÓ& ÀôéÓINN {÷îÌ›75kÖßš!q •ªq¥¼cuµû[÷Ž5ÔÔÔ\ñG­–&X¯3s²%Ô ¹/_7lëþþ÷{µ–º¾èõŽ'qÆÖ®Õ|®k÷ïtÿ¥òyûöí””” “Éøê«¯¸ù曥p¯Õ4ÕŸª*Ë^/¥òo— H @ àªð·ùj¢Ñ¨™8þV<Ü])(,æËoj±ÀØÛk‰^o`ݯ›Y÷ëf‚B5n8ã'ÞFDd;þ7ÿmî¿íQòrë£iäYÄnînxzyP\Tr­\o1y¹ùDÇEòÛ†í¼öܲ½pÖá484ˆ„.±‡òó÷«Ø¼~;þs*‡öcÿÞ?‘Éd\:ŸŠI"q”íšjQ2ÚVtV7ÎA¡mb\}» ¿>¢øµºGm_ƒìÈUõ‘𣽑˛oüå‡×ØüžØ+”çÞµdC82Ÿ¬iÌ̆¢‚JÍÛÇ’O“éÒ3˜^ƒÚÓs`8ËïÞ7Œ‘wƳj‰4Ñêb4Ú ¦¯Ô_©pôþ¶vœ+kÅÊJ•Eô»sã>zã÷Ö9íŽô÷¯â³@ @ @ 5w¸GŽF¶Vn¶)SË®MÆ¿j0Wo!'+—£ž KR×õNàüÙ‹’ù,e»Õµ"DW·¶ ç\7Îq¢ñðm•mÇèöÖLÈ—sàÞTUVqæäyëy©ï‘³Ï‘Tô­dÍfΗZÏ{»Ôoº9+Q€€¬òJæ;Ã#¿íÂ`2ã®V1""¬Mmû‡2!¦C³`€–2Q^­)ç× ‡Û»»9dw¤6C¤§;ºÆ}ìW;W« FÎ7~/ª:["’®k·G€…4‘㹿mͩö‹Òw=ØÖ¬éTW­Ç¾þW/t}eyÍï~ŽÍ3G‘5ëõF’w¦ñɬ<3a9¹õAQ’ú´Íý-+±µ_lÜWëþšÍpæXýæ¬îý¹úÇéï_Åg@ @ @J:ª¢˜è1€MÉ4ØfrÚ›ëS›ü)®áÎ*xëSù¤èCIü:YsÂzÜO{C£ubTq\Ô_”¤MgÛý³ú ` ¢z³ëhÉ|’¹w8æÊbÉ®iÌ·¬!Ê=CPÆ[²ãéO¬Ã\š1ã0ŠD”=z1³Õ6Ý8VÑ”Ž‰à±½Sq:ß?hÉ„,“£ùÊÇÖåM%Tïü„Šï&É€ÌÅU'éî¿Lçc=6æœvÈÖpi/r¯0”Qƒ$ó©µTmƒ’ÿYŽUÁý1û:5GÁXûr½Ÿ«¶¦n^)ü¢l„È Qv´d06ë+¾MQ—yùòåÄÄÄ4ú3qâDÀ’5×ݽéu‰êjËÚ’Nwåõ:1h»ví3f +V¬ 33“äädzôèaÍl|ú´m_ýüü¬ÇÇoiWíøöÛoK¦\???†ÀæÍ›­™-[BZZsæÌaܸq <==¹ýöÛ[íWk<زwÂh4ròäIëy©Æª!Žö·²²>ˆusó§ŽЯ_?\\ß3ÐZœ™“Îp­ú+5o½õS¦LaëÖ­ÙÕÍ7·+¯½×U×®]mDù-ÁÛËqä]w­îïþýûË~¿Ûn»Í©k9ÒßËqäþJésjj*ãÇ'99…BÁûï¿ÏÈ‘#[dëˆÏΰsçNÂÃÃ6lX›¶%@ @ðwäo!P ¢k'K”Þe¿n$¿°åÑ£±•Š{¦ÜÁ¬9/ñسðå’ðôòh¶¾RÙ´Pî¹K”Ô "½¼m¯sòØi«8ô¡'&Ò5©““ž·=ë~ÝŒÁ`ÀËÛ“§_x…¢¿” © Cvó ÒS39zȲ `Ãê-Èd2îzçÏ\”Ìg)ÛÍβ—ü|ññó–ÌÇËÙ°ú7ŒF# …‚¾ô¸CãÜÐvêc÷Ù•wèÁM£×ÖÝ‚¡A†`)ÇÊÑçH ”2ûWd«–á–HØ»2r¨2Ö‹Õ dêóöt¼½f2ž^()£´Æ"¸ôlDÌïŒmCîŽdfŸî<Ú5ŽÏ÷ÅC­j²îo©–Õ~…LƤø(»r¹LÖ¬ µNà<0,eËç䯔 Œf3 ™Œ©¢íÊ;x¸1<<ÔZ×ÐDfúÅÕëý­Óõ—Ò1˜ÌxiÔ<Õ-…ƒj]©îÑÕbÿï©5È¢Ü{p{^úà&ú iOH¸'>þ:‚Ûyß-Q:¡P6þ/E~v}PÐö^ŒØ…àpüƒÝˆêäÏø‡“èëXà„–Ÿ[AUeýûhèØ{‡âèJt'&L뎷Ÿ4‚Z…RÎG?ÝÁƒÿêCRß0¼ýt¨T \´J¼ýu õbø¶Êl\\PIEQöàÑÑ$ö Å?ȸ®Ü-ar5ïïÖÕg­ÇZŠ™Ÿß̸É]‰êä_+‘q¾ôº1‚ÉÏô"2Nú9Ž÷÷¯à³@ @ @ ½]úðIà—¸È\(0æ3§ðÝkí’• ò¦×Û‚òÅ¡2€ë½ éuY“¥€*<žFÓCKŒáÄ0A®@Ýwš]¹Ü7UÂ͵uׂIšÌíýû÷àðáÃÆFþüóOL& …‚Þ½{7y­¬¬,‚ƒƒ n\d]ǹsç0 „††rë­·’’’ÂÁƒ– +V¬@&“1mšeN:ec›—WŸ=ºk×®Žwº–5kÖŸŸJ¥âž{î± ÄV¯^ݤMs{oΜ9CQ‘e½ÚÛ»möj¨TöÏKXX˜UÌ·yófA°³c%EfÔ­›oÍñóÏ?c0ðññá•W^qh/Š383'áZõ÷¯BÝü Äß߿ٺ¿üò‹u¯Ñ믿îÐX9c{9޼ë®Õý=|ø°5(Á3Ï<Ãu×]×êk9ÒßËqäþJé3@qq1'Ndß¾}( æÌ™Ó¢k:â³3¬X±‚œœÞ{ï=î¸ãüýýñðð ))‰—_~¹Ñw¾@ @ Áÿ/\9eä_€}z’žÉ¥´ \\ll6›©®¶Í˜èŒ­T 9ÐzìéíA^‰ü¶þ÷&ë¿÷éL =›×mçäÑÓä¡T* àÖ;GâãkY,8~Ä6ʧÙlæÝ×ç1oÁ;¸h]˜÷Õ;ü¶a;»¶ýAfz6F£«ŽÈ¨¼|<ùbÞ¢6é¯#äfçñõçßóÀc÷1jÜM$]ß•_~\Í¥ iä Ö¨  $±GgÞŸõ1ÆbP½ÞÀù³—ˆ‰ëˆÊӥ߭°–ý¶~;ÿxnšu¬N?k×vk‘²ÝCŽ–ˆ’³Þ‰…Ÿ-¦ºº†v¡‡ñùÿJâsvf.‹üÄÄïâ†A½ùxÑl–~û i)Èår‚ü‘+fgæòý×?sïÔ;yëP´:-¿.[GYiã¹ÿá (•JJŠKYøéb[)ÇÊÑçH &ÆwÄÇEÃÎŒlÊô¢½=˜…N©Ä`2³àø›úg‹Kɪ¨$H§åÉnñh” ’sò)®®A­ã¥V£mfcvÿëÑ›Ìü–šÉÉ‚b ««QÊeê´ÜnÍÐ|²À>Ђ3¶ Ò®~ÂS£¦G€[Ò2­{±¤Œ) aT‡v¸©T¬¾˜FYžHOwÆv G×Ì"èÚ‹é  Â×EÜ=ùæÄ92Ë+P+è\7!ή¨ä‡Ó¸'6’¡h• VO¥Lo “¯÷ÇG¡”Ë(©Ñ³ðDÓó*¥´œÂê¼5jé‹B.ã\Q)2´÷p£›+Ÿ©_¬Ì­¬bщ³LíÍ-ÂèæïÊó)¤”–QPUƒZ.'ÈUK¢ŸsÃh¶FKu®ú#Ÿ½³‹¿=Øš8¾[ ñÝP|è RÏÚ?~0‹îýê³ßõPw=d»É*/«œ §ò%ôÌ&3v¤ÐoX$^.<÷_Û,'þ̦0¯¢1s‡k¯–Á££<Ú^4ß#û3š-o-f3Ø‘Fÿ›jûëíÂsïÚö÷¸Dýµ¹æU¼¿;6žgÀÈŽtꀛ‡†;¦v㎩ö¿Ò/qþ¤´s ïï_Ág@ @  5heZ<äž+ƒ‰Wwb¨n]5–ïZƦç=Mž1ï Winr7dµ C7y}64¹w¹%›£Ál Ò\ic÷eÉç|àÿAÊ`æ|Èÿ çfH#ZÍ Ÿ7PÊ””˜Šù±t‰¤þ¶¶]3fÞ,xÏ¿B+ÓòYà|6Vl`GåvÒ éÍ\åntTEá­ð–,Û4Èp½1† ;1¦ÿ‰©,×"võCѾ7ênwYü«(@èg‰ÚŒzŒyçPÄ"S¨¨I®é pã³Öì¿Æì6¦æÒª÷ÌGÓwª.cP´ëþÐ2L1—çƒRÜ#EXU›ß±G%°mC5•¿<ƒnüçÈýcÐŽyŠÅ“1¥ÚTÓÝñ!f£é³Ža./…Ò"Òî:®¾¿YG[;ªvsNc*ÉDîl+]0¦îÃ\Y 52­7¨šÈ i¨¦rÕÐŽû2µ+.7ÍÌ/g(~ Ô?‚Ü™J²¨Ùÿ-êž“Pu…L­Cx9æêRÁ]Q÷~äJÌU%TïþR’6}}}‰,°¦¨¨¨àìÙ³ÄÄÄpà 7°qãÆFë%'' —Ë™={6~ø!&“‰ððp˜3g޵®^¯çÔ©StêÔ ///.\h-[½z5/¿ü²5ûï‘#GlÚ9qâéé鄆†òòË/£ÕjÙ½{7h4|||Ðjmƒ;4FMM ‹-â™gžá‘GA£ÑPTTĶmÛš´ùú믩©©aõêÕ>|˜¼¼°©ïìXIÑßóçÏ“ŸŸ¯¯/Ï=÷ …Â*ðŽŽ&22’·ß~ÛZ?++‹?ü§Ÿ~š»îº‹Þ½{óÝwßqîÜ9rssÑh4„……qýõ×óÊ+¯Øìùqgæ¤3\«þþUØ·o`ÙãôñÇ3oÞ<ª««éСaaaÌž=ÛZ7##ƒÏ?ÿœG}”¡C‡òã?²páB.^¼ˆB¡ 88¸I°3¶—ãÈ»îZÝ_³ÙÌK/½ÄâÅ‹Ñét,^¼˜5kÖðÛo¿‘ššŠÑhÄÍ͘˜|||xÿý÷%éïå8r¥ô¹Žªª*zè!–,YB||<Ÿ~ú)·ß~;—.]’Ägg¨ªªâé§Ÿfþüù¸ººòÎ;ïHr]@ @ ‚ÿ+ü-ÊíÛY²•†‡óò³4Y¯¬¼‚·æ~!™­Täfç×Ñú{NVÓ‹õr¹œ„®±¸¸hèÙ·G“õvnÛË– ÛíΟ8zŠ=6ƒoý ¿_†ŽÄБƒìê•—•[ÊZEâÔæ¨¬¨’äcëן-A­VsïÔ; mÌãÏ>Øh½ï¿þ™ÔKé6çN;CL\GL&3ëVn²ž/).eûæ] 1³ÙÌé 3:ßßÖ´Ûi)l\³•a7¢s·xfò†µ¬¸¨D22Àü¾ÁÛÇ“Qãn"¡K,¯¼ó\‹m¿˜·ÿ@?†ßr#ƒ†öcÐÐ~6å¥%e<÷ä«äæØ «¤+Gž#©PÉåŒíÎØŽá6çf3oï?̹Úlæu˜Ìffýqˆwn¸7•Š:Å\.“ïã…‹BAÏf²ùîÊÌaKZ–d¶—“[YEtƒìÔ9••ÍÔ†÷“䪥‹¯7ƒÂ‚ÔlýËýY}![:„‘àãÅ[ýš~ç]ΗGOã¯uaXxCƒjÛnižv ¯²ªÉk˜Ìf¾ @ @ ­áq¯§ï~·Í93f¶UnáÝ‚·É1f·YÛkB7Ùe"xÃ÷MëñŽÊí<“û¤Mù®Ê|YüzN£»æ:}gS^i®äßyÿ¤È$m PgÚ=Vs”§rã ß·ñWøs“n$7éFÚÕ+3•I&P–û´Gîڿ逛æ²*™Ž¹º´É:­Á”uE@,˜MŽ­ªo¯ªÃÙ-(c‡ƒÙŒ)û¤mÍî/‘)Ô¨{NBî†fàÓ¶Q³ÿ[L…)’Ù6…¹ºŒŠŸŸÆõþïi½ÑŽy—òï&¡ÚRA&GÔ™Êeû>M^Çpn;†S›š,w³‰ªµ3ÐÞ6™Æ—¡Ï;dnLK¦â»ûÑÜð8Ê}@¡¶\¶º ÃÙ­¨âGÖf¡67! 1•BÉàõ(Àí~(ý¬a(x¼ßMoP÷°ü´5Õ;?Fæ€*~$ÊèÁ(£Û”›«J¨\þ4æ²IÚëÓ§2™ ƒÁÀ‰'š­{ðàAbbbèÛ·o“uN:ŦM›:t(½{÷¶É¶\XXh'b;rä:uÂd2ñóÏõÁ ŠŠŠØ°a·Ür f³™cÇŽÙØ™L&ž}öYæÏŸ‡‡¯¿þº#ݶaÑ¢E<üðøºº–Œ–55'"P($&&¢Õj0`@“×ܼy3kÖ¬iµOÍ¡R©¸ï¾û¸ï¾ûlÎFþýïsò¤í»Î™±’ª¿&“‰÷ߟY³fáííͬY³lÊ mÊ~ø!†iӦΠ/¼ÐèµçÏŸÏ… Zܧ+ÑÚ9é,ת¿.^¼ÈÊ•+¹õÖ[éÞ½; ,°–Ú‰AçÌ™ƒãǧ[·nÌ;·Åm9cÛGßu×êþ:tˆ©S§2gÎ=z4£G¶«WZZÚ¬Ø×Ñþ6ÄÑû+•Ï—×}àXµj>>>|òÉ'Œ7ŽªªÆ÷¨Ë. IDATþ8ê³3ìÝ»—Ûn»éÓ§3`ÀÔjµÕç72fÌ fóÕûI @ à¯ÂßB ¬Õ]9Zj[ØJÅÇïÍ' П° V,[ÃÑCM/™Ífž{â éGçÄx|ý¼ñòñÄl2S_ÈÙÓømÝv6­ÝŠÉÔø­ƒûs÷臸yÌPú êETL$^îèkô”–”qá\ öü‰B¡Àh4òÞ'oÐ%)Áá~=óðØ¿çO‡í.Çl6óùÿ²iíVn»ë’zv% еFMYI9—.¤’¼ï0ÅE%v¶'aôí#Ø»cY¶ {+–®aȈ¤¥dP^VŸ1RŠþ¶¦Ý¦xkÆÒ.¥3ìæA†RS]Í…³)lÿm2™L²—F£‘w^ý€Íë¶1ö®[蜗'&£‰â¢ÒÓ29qä4{wîoÔöÞeû¦]ÜzçHâ;Çàâ¢!+3‡[÷²xÁ2 ›Èú*ÕX9òIÅúKé(år’ü}ðÔ¨)®®áÏܾ;y޳ÅoÈ8œWÈä ;¸=*‚$_üu.x¨UTè ”Ôè)¨ªæRi\&°6›Í<¿ãBéäë…¯‹ ^5fÌTUs®¸”ßR3Ùœš‰é²9áŒíå||ø$Z‚]u¬<ŸÂ±üæ7éT <µu/ã¢"J¸»+2œ+.eý¥tžHŒG%o: À»Žp(¯€QÚéé†N©Do2Q\­'£¼‚Ó…Åì˶£ÍffþqˆíéYÜNœ·'.JYå•ìÊÌaÉ©óV7¾ÝUR)®©a\Ç¢¼ j*S(‡ Gn*Úø!ÎÃ+Ä®#‹Àx#èº:gIÎýeš‰#Ò'8gR6 ]<¨‚ÀQ¶T°ì‡¢ `õæ­» ó‚ÿ`MX¶ãM¨#ãQ´>سOa=´Š¢MßáÈO÷ZvÅÁÆû÷ï§°°òó¿}ûvFŽItt4¤¤”?¨Äã?΄ ¸îºëhÔ¨f³™°téR·gvîÜÉí·ßÎ_ýEr²ë€¸?üðC† !11‘Ü\÷¾cÓ¦M <˜1cÆÐ»wo"## $77—ÌÌLRSS9tè«V¹Ò_Vvv6?þø#÷Ýw?ÿüs…ÛÚívî½÷^ D×®] #$$»ÝΙ3gØ»w/üñóæÍÃn÷î5Xì·ß~C§ÓѳgO‚ƒƒIOOgãÆ|úé§™×ô\yóxgΜIzz:wß}7qqqøùù‘ŸŸÏÞ½{Y²d‰[Ûp8L:•yóæ1zôhzõêE£FÐëõdggsèÐ!Ö¯_OF†û`מð¤Mz¢¾Ž÷B1qâD¹á†ˆŠŠÂl6“PnÛ°Ùl<÷ÜsüñÇŒ=š.]º‚Íf###ƒ¤¤$¶oß^îµïIÚsU§¯«Ïúݰa àæ›o¦ÿþÄÅÅDQQYYY$$$°fÍš’çý¼q¼çªNýz³Ìe¥¤¤ðì³Ï2}útÚ´iÃã?î60‚'eöDBB<ð:Žððpl6[É{ì7ÞPa0µB!„B!ÄÅL9ûÏÅK/½¤ìÞ½[IMMUrrr”èèh%55U¥ÓéÔyyy*»Ý®5Z‹Å¢|T*•Éápø9Ž U«VÍýçŸÒÇîÝ»×ááÔ¿˜˜˜ú.Bµ}òíÔz P®k—ÚñŠê[0üZLZ ŸïÚÏû×wq´e7 B«RñÑö½ÌJH¬ïâ4x?îG”¯‘w·ìfîáªà/„Þ2gh‚|ô¼¶q;K’NÔwq„B!„B!„fΜYîòKíÞ®¢êTÁ-0û€‚9O`=tþ 0!¼môèѼòÊ+lݺ•[n¹¥¾‹S®mÛ¶áççÇ”)Søì³Ïê»8B!jY«V­X²d <ðË–-«ç !„B!„B”*/ηoß¾ÃEÉP%Çn·çf­V[”ŸŸoQ©T“Éd/**²………Ù>ìðóós„……9Úµkçx饗ÜF„k3(‹Úõð˜§ê»uêR;^!„B!„B!„B!„ÂÚη:_8ìØNîªßˆKRhh(&L`úôéõ\!„ÂéÎ;ÙoÛ&“Ÿ!„B!„âÒ#ÊB!„B!„B!„B!„—8ð·°g$a;±{îi°˜Qü"ÑÆ_‡¶Ý0¬–áÈO¯ç’ŠKAll,X,Ú·oÏÓO?MXX«W¯féÒ¥õ]úˆÄÄD6oÞLJJ ùùù4nܘ#FpóÍ7°páBΜ9SÏ%B!„B!„¨{ ,„B40thøø—ew/ù›ì"K=•Hq±¹¯},CZ4qY ×ÕSi„B!„B!„BÔ:•Mô ÑW¸‰-eæeoÖa¡Ä¥ìÙgŸ¥oß¾.Ë<ÈO# !„B!„âÒ$Ê âÂpýÜ¥õ]„‹Æ€ß×w.*£ýU7ùHÀ®—¼÷·îáý­{ê»B!„B!„B!ꊵ¢ßP´ñ›ú.‰<üðÃõ]„éܹs}A!„™Íf>ûì3>ûì³ú.ŠB!„B!ÄIUßB!„B!„B!„B!„B!„B!„B!„B4 ,„B!„B!„B!„B!„B!„B!„B!„¨2 PB!„B!„B!„B!„B!„B!„B!„BT™¦¾ „Bˆ†AQÀá¨ïRˆò}u¨T ¹Ù…õ]”K‚\ B!„B!„B4<ª@bt­I³¥qÄrø¢ÏWx‡¶ý ¨#Úb=¶ëåõ]!Ä9‚‚‚hÓ¦ gΜáàÁƒõ]q ˆˆˆ(is{öì©ï∋„´«º!çùÂ'u$„Ó­·ÞJ»víØ°a .¬ïâ!„B!ÄyI€²uè¶;G0á™ûÝ–9t”»o|¨J$„¸Tü8¸Q¾Ær×Ý0o9Y…E•¦nÂø'zñéë«IN̪"Ö«KF¡÷)ÿcÑgo¬aÕÂCu\¢ó 5rß3½iHH¸‰/Þ^ÇŠù ÕÞÏ€á±Ü2¾3v»ƒ™Ó·°jQõµcÆ\=´5­Û…äCa¡•¬t3§Žg³}à þZpB³µÚûõoÖoM®…Ç»Äsc«æå®{mãv–$¨rþB!„B!„Bˆšù#j):EÇ»Sê4P¸:ù6Ó4g\À=´Óu B‰Õaá¤õ${‹ö°Î¼†?ó—ÕQ©E1ýUO è}±çœ®ï¢á5;väƒ>Àh4òÿ÷¬X±¢¾‹Tck×®E§Ó1yòä .@ùb:Ï¢ÔâÅ‹ñóócÊ”)æNªVšË®lF³VAhujî~ô2:÷ŽbúkÉ8“_Å`ð-q´nFT‹NŸÈáÝçWÖZ^æüÒàQEQÐéÕµ–×…$(ÔPœ ÎÜÀC•”{_ÓÂ-8ù\Yéå'7Äú­éµ0}ç~¦ïÜï²lÎÐþùèkT!„B!„B!j› ýŒW3Èxõ RQä(ä¨õ(« V23çríµ3(¡57ûÝÊPÓpšk[l=ÎÊü?ù>ç;òíyµ’oynñ½‰ÁÏðZúËÌÉý­ÖòúOðKø(>äÙsù8k›Ì°9l„kÂi­õnfŠ MÌUhÛBݸ#Š1‡µ{FÖC«°lù GaÃtR4 š¦vöÒJ»ж¹oã{øÝ8 ýQ(\_þ¾´q`¼ô—*f°‚¢÷+ØŽ×ÚaÔ™#FðÎ;ïœw»½{÷2tèÐr×Y­Ö’×6[ùÏÙÐ\jç¹oß¾|òÉ' :tè@~~íÝG KClž\¿ ñx=q©¯šKí¬¯ãmˆçùRû,ê©7ß|ƒÁ@nn.S§NeíÚµØl6"""hÛ¶m­¥­ ±= !„Bˆ ß ¬( ¯îýº¡R\ç™kF£ˆ0ºtˆçóoÿGfvN¥û  `Ô-CiZ›E ŒÑdÀ§Ž„,E,efP´œ3›¢(_]Ö‘UaÔjðQ_¬ëW$rúd#îê@·+š¡(Ðñ²Æ\sC,¿|]ÎS"^2èæ¶DDù™V»<4bVÉëæ1Á¼ñuùl\l’epúd.á|8q4‹ä£YUNõÖ.ÿøÉfV/= 7Ñ4:ƒQ[nÚ†X¿õu-!„B!„BQצ„½G_ÃU.Ë4І8]g–˜˜È† j%m}iˆíY!„B\ø.øå@?zwïŒJQ8p(‘-;ö’–ž‰¯É@®‰‹&Àß—¡ƒ®âûYóÊ݇J¥¢G×\{Uo|ôä(„BT×á}i¼ûüJš¶ dø]hÒ2¹ÿÝYßÅ**´ñ⃠¸jHkìv;+æÄfµW9}“èÀ’×{¶žbþÌÝ%g¦px߯–÷B ׂB!„B!„¸,Î[H3MsæçÍeGárìÙ„©Ãê{ƒi¬‰bBàãLJ{Þ«ù>4±$8yFö—ÌÎý®ðéË„ Ç‰Ò4arè›<2¯æ]Vg}&¿Œv쨩ÝAKi•¼^]°ªVó°ì[„*¨–Ýó°Ø‰ÃœÊ7m»!hÚBÐý•0/œTëe¢2ªPzPeäL+»€gÀx‹óµe7ä~ïÜ^Q¶˜nkÒŜܭ[7ìöòïëT6KÚÞ½{¹á†j«Xâ,9ÏB4\rý !„hè佬ꢢ¢J^ÿùçŸu–V!„Bˆ‹É œ‘•ÍœË1²/áˆËº‡Žr÷ÈhÓ’61-ÐiµY\g¤íÒ!Žþ}{P’&¶Uó:+¿Bq19v$“^ùµZÁf«½‡¿2E¥ Ñ8‡çw8X-Uø­Yfæ~_³[“¯®äuZJž·ŠT%õ}žåZB!„B!„³¥ù‹Yš¿Ø%ø %uæ5hB5ô7p›aÙS‘šF õu><;#ûK>É,Dü%÷gÎØR™ö]ô]éáÓ‹ æu^Í¿X°:˜7B§ U´¼•þ:>L€*ðü = W|J^›íæZÍ Àºo)Ö}K¡LýÚÏÄš¸ƒZ‹¦u41ýj½BTJAo‚*ìÙñLùÆú+Jƒ“ þ€ÌW€2· ¬IP°S”ºNåääTˆ,„B!„¢r>>¥¿ÉÔYZ!„B!.&|€2À¶]û*\·}÷ÚÄ´D¥RáïïË™´ —õÁA–‘É’k9x$‰ÿ<ù`mÙE“fyyÊÿÕ´³þƒé|sÞ4£[FÝÀW÷¢ió(Œ&ùydefsâø)¶lÜÎ_Ϫ0½^¯cÀõWÑ·Zǵ"0(«ÅBVffí_™÷ë"¯ãЛÑ®c[ZŶ$4,¿?Ô*§SΰiÝV~œñ '“OUº¸öm¸õÎátîÞÀ r²sعu3¿û]Ûöºmÿä 0â¶ë)È/àž‘rìh²Û6ÿyãi¹šäc'{Ë¿08oèGÇ4çÛß>uÛ~Éú_Ý–mÞ°Çï{®ª§¢Öh4Ý{u!4"„€´:-™é™ìܶ—YßÏa×v÷suç=·ñÀcc¸íºñåÖE—Ë:òáWoð¯1O³cën·mú^Ó‡á·^OÛv­ññÑsêäiÖ¬ÜÀOßüJFz¦Ûö:½Žå›æðÒ3o±|Ñ_nÛüùÏ\´:-ÓÞþœÿ}?§d¹7ë¨&×`M mÙ”.aÁDønôÁ Ñ`¶ÚHÎÍçï§øõàQò,Ö Ó‹oM·ˆÂ||ð×kѪTd±+-ƒY ‰ìNs?ÏÅ 57Ç´àòÆá4õ5aÔjÈ·XÉ.²p"/Ÿ-§Óøqÿa¯§-ÖÄ×Ä‹=;åkdΡ$>ßµ¿Jç¬sX0ã›Ñ14ˆ@½›ÃNFaI9yìNË`IÒ Näæ—l¯S«Xzã ^Ù°åÇNºísÙMƒÐªT|´}/³ËÍ÷ʨ†G7£MP>j5§ò X{ò43÷&£Ðý醖þ~|3ð ·å‹F t[¶ùtO¬ÚXn¾qÁÜÓ‚ÎaÁèuäYØ™–ÁÏÙuÎ{XYÞ¨#oªj@¦F«¢Ï€–t»¼)-cCð Ô£( ÙfNŸÌaÇÆü9/ÜìBf,…ÞÇýãIÇùqÕÝnË¿y#K~sýœÖÈ—N=£hß-’¨æ†ññÑ Ö¨0XI;GÒÁ ~þb+§OäÔàè+×ñ²ÆLœr ÷œaÒƒ ΛF§WsÍ ±t¿²MZbôÕb.°’“i&õd{¶žbñ¯{1TÜ ˰Qí‰0QgáÐÞ3,üß^vmv¿F*:ÏŸ½±†U U˜OEi¯ÜŠ+·r[>é¡…ÜZiÚêÔoIšœçÚ ÁÉB!„B!„âbTÙìÄ; ·Ñß8½âƒ vÊ8¤¶ãMø\ûöŒ$ò¾¾©ÒmÕÍ{`¼å¹©äN¿Î}}d;´]ï@Ó´+Š!Ga¶ämýó=¶;*ß·iË£0Þþ5ªàæØÓ“ÿÓ=8 ]ï;(Z#Ú®·£iÕUP3 GQsöÌdlÇ6Q´ñÛjç}>ú>÷£nÖÅ/ Å'E­Ã‘ŸíÄvжütžãUжˆ¦Ý0ÔmQ|üqX qäg`OOÄ~j–= ±góz¹Ë |t;d>6÷ÛøÝïüßz ²^ƒ º$µ4Ϊ¦õÕh;ÞŒ:2E£Çž} ëáUmú/ŽüôÚÉ´ÆÇ /¼à¶œ–-[¢( ‡fîܹ(ÊùûöN:1vìXzôèAHHYYYlÞ¼™/¿ü’-[¶T˜Îh42vìX®¹æZ¶l‰¯¯/¹¹¹dff’””ĺuë˜>}ºKOÎs1EQ:t(7ß|3íÛ·ÇßߟÂÂBÒÒÒ8|ø0Û·ogΜ9=zÔ%ÝÈ‘#éÔ©qqq„‡‡€Z­æÔ©S¬^½šÏ?ÿœcÇ*¾n{ì1.¿ür""" B§Ó‘––ÆæÍ›™1c[·nuKËÂ… Ý–ïÜé>8òÚµk¹ë®»ÊÍ»¦uä)† ÆÀ‰'$$‹ÅBFF{÷îeÅŠÌœ9³Ü´×\s  ::ƒÁÀéÓ§ùûï¿ùôÓOINv~©XMÎs±°°0úõëG÷îÝiÛ¶-QQQøùù¡( ùùù?~œ_~ù…o¿u_©I{.«ºuä­¶QwÜq“'OæÈ‘# 0 Òm/¿ür¾ûî;RRRèÓ§àÙõë­ã­i»8p £F¢C‡ ’““Y¾|9_|ñiiinÛëõzöìÙ8Ûåüùóݶٻw/:ŽÉ“'3cÆ ¯¯'Òõëiÿ\Ó÷…bÒÇJëÍkÐÓö Õï¯êëx½‘¯'m²"Ìš5‹èèh<È­·ÞJvv6àùgÑúî¯öBxïB!„· \™¢¢Ò 2K9A·ì ùd &bw8ðñÑ×eñø×S÷8EW¯XÏî]úóñ7ShÝÔe¹Ÿ¿/~þ¾4iÖµZUa€r|‡6¼ôöDEEº,×j5Œ"‡“ŸWàÕåGžº“¯ûÃQMÕ´×^ßßÿ{+X|à±±ÜyÏm.Ë‚C‚è7àrú^Ó‡÷^ÿ”Ù?»þ:mÊçtìÚŽè˜æ¼2õYîýo,E¥3h÷»ær¹»ÝÁk/¼SœÜÐõºò2âÚǺ, ‹¥ÿ +¹êÚ+xûåøcö—õëþÞT Ü­g'æÿæ Ü©[{òróÝÚ§Z­æ¹ÉO0pÈÕ.Ë›µhB³±Mrã@&Nx©Ü@ò Au¯AO<ܱ-&­k×jÒjˆ ò'6ÈŸ[5çÿÖlfFV¹é{5 £mP€Ë²0Ht¾ IDATƒW7iD¿¨H¦lÞÅ‚ÄãnéüuZ>ºªÍý}]–ûé´øé´DùQ)J¹¬ž¤=÷ØcƒüÝ6šÕ'RØSNàz1µ¢ðï.ívN_§AM¤Ñ@¤Ñ@ˆPò,Ö ƒŒkB­(<{YG®mÖØey3?ÍüZr}‹&<»fs¥ÁÂ5uû6Œní²,ÈGOߨH®ŒŠäý­»™s(É-·ê¨®Å¶ã‘I} t4i"®s$+ÿ8èµ<¯Úšûžé]ázƒ†¨æD5`æôÚ»ÑRÁaFž šú»,7ùê0ùêˆlâO‡Ë±ü÷PI€rË6!%¯µjºônB—ÞMøúõ,›{ ÖÊ/„B!„B!„¸´tÒw`oÑž ƒ“Ûë:ðZè[4ÖD¹,עŨ1ÒHÓˆ<{žK€r˜:€Gé6÷‡’8ØdÞÀõ¦¡ÄëÚ¹­7©LL û”úN.ËÛêâh«‹«Ò± ¸—>½ØRøe~P¥4ÞÈ÷B¢Žr‡-e¯W‚“¹ÎA,Ãùg¢V¿uÛsRÜÖé¯|]±.ËcðÙŸ¯ÆüçÛX¶•Ý“´åQt& 7~€*¸9Žœ ~{Ô=8Ù€qä—¨BZº.÷ñGññGØE¥ª•euËËQGº^'Š_8š6×¢‰½ó’ÉXvýî~\Z>ÃÞBÓ²Ûr%À€* 1´ìƒÃœKÑ÷¼Åïa0 u¾Î~ ×—¿¦hÏ^fyßÃRþvµB¥ÆgðKhã\éUÁÍÑß…¶ýp f?^£à÷ ÍäÉ“éÞ½;±±±L›6›nºÉåYAƒ1|øpìv;O=õ”Wƒ“}}}ùæ›oèÒ¥‹ËòvíÚÑ®û{Á¹ž~úi|ÐuƒÐÐP ÄÀy饗øþûïÝÒòóÏ?ã²< €€€š7oŽZ­®4ب&ŒF#ü1}ûöu[n4iÚ´)ýúõ#;;Û%XàÙgŸÅÏÏÏmŸÍš5cÔ¨Q 6Œ1cư}ûöró¾êª«èر£Ë²ÈÈH† Âu×]ÇsÏ=ǬYUï'«ª¦uä©Î;óþûïÓ´©ëó Z­£ÑHTTyyyÏuíÚÕåï&MšpÇw0tèPFUøy.OÎóœ9sˆŒŒ,w¿¿?ñññF·už¶çúª£êJIq~v>ï¶¡¡¡œV!„BˆÚÐà”ãÛ8¿Ø§žI'+Û}ÄœÜ|ö%¸ÞZ—Â#Ã\þŽhVipä˜î ytS,E¾˜öëVo"3= ­NKDdmâcÈÏ+(7m«Ø–¼÷ùëMì6;KþXÁê•ë9qü$Š¢"0(€öÚÖZpæÊekø}Ö2Ò³0 tìÚŽ±ŽÂäkâ…ןäÎáàp¸ŽÈ=zü­%ÁÉ[6îà‹iß’|ì$M›GñпÇÓ¾sýßìÚ¾‡„}¥ÁwE…E¼ôô›|1óbÚDóèÓ÷óÎkÈÓ“&0óÛ_Ù¹ÕõG©#‡’¸æ²ôíߛߚÀо·SpN ³ÝæïÞ2ãÓ°Z­œ8~ŠÜœ<4Z qíbyðßãhÞ²)O<÷0«W¬'+³ô‡‡CŽz:°ðº÷êÂüß»í·óÙå­›¶c³Ù\ÖÝÿؘ’àäe W2ï×EädçÒ¾S<ãM`PoM{‰±·ü‹Ô”3^9NoÖQu¯AoXyü¿$$’c±`ÔhèÝ(Œ‘±- öÑóÖݹgéjÒÌ…néfìNÀêpp"/Ÿ<‹¢Ð68€;´¡™Ÿ/ÿîÒŽÕ'RÈ.r½»>&.†æþ¾Xìv¾Üu€õ§RÉ,,B«Rnô¡MPùÌÜìIÚ²Â>.G •(o׺$8yOz&?8BRN* Ühà¥^Ñ«ÕçÍ·ºîk[œ¼üØ æ>NŽÅBû@ÆÅ·&P¯ãË»1~éjRË´µÄì®í¼v®lÁ¤žöû2Ìç\3v‡ûÌ£ÚD—'oMMã‹]8‘›O?vhCû íÏ®´Lfºþpè­:ªK1íÂxþƒhµ•×abB:Ù™¥çÙœ_Ú¶uz ŃžÛí,E¶s“cµº^ÿZ]ÕÚLnv!©§r«´mmÿd/·àäs¥§æ—Ì2]]w>r[Ö'=µôa²çYQtúª_keÓ– Ùf³cµ¸÷Çö23 {Z¿B!„B!„Bˆúá«ò¥µ6–‘~£¸Úx f‡™2ß)wÛÖÚX>ŸŽQeÂŽ…y XU°’ãÖc¨P¨ ¢£¾; ]ƒöÌçoÅÅ€A1Pàp¿šfsÞ‡ U‡¹­{>øÅ’ áßsçðGÞŠºqG|®~ Û‰íØOðZÚrËèãáæi¨#ÛaÏ>IÁÿÀží>@´®×½Îàd[…«?Åzd Žü ÐhQùE¢Žh‹£È{œe­ýìVìYÉ8 sA¥A¾ï£¨‚[àsÍD¬‡þÂQà:¨²þÚçJ‚“-ûcÝõ;öÜT%° †ë'ƒÊû÷ïÊ2޾㜯ófBÞÿ*ÞVW&vż¢V‹åFÅ¿J‚“-ûcÙ1Ga6êÆÐ÷¹Å„áÆ÷Éûîv9§Ï³·Ú÷Ýwßñã¥AåO?ý4ãÆ«RÚÂÂB}ôQæÌ™C\\/¼ð“&M $$„×^{ €/¿ü’Í›7{µÜ¯¿þzIpò¬Y³˜={6999ÄÇÇ3vìXââ*â(yèýúõL:•¤¤$Z¶lÉĉéÚµ+“&MbË–-nN&L &&†¢¢"ÞyçV®\Izz::ŽFÑ¡CrsÝï5zržÁ ^Ô1oÞ<~ùåRRRÐëõ4oÞœ÷Þ{õyî¡/Z´ˆŸ~ú‰´´4L&Ý»wg„ øùù1uêTèöÜÀ|€Õj%))‰œœ´Z-;vä™gž¡U«V¼üòË,]º”ÌÌÒgˆœ³!¾ÿ¾ó½£[·n¸¾—û xVGžhÛ¶-ß}÷&“ ›ÍÆÜ¹sY¾|9III(ŠBHH]ºt©tVà 6ðÃ?pìØ1}úôáÑGÅÏÏ·Þz‹aÆ•›®&çù\[·neΜ98p€ŒŒ , þþþÄÆÆ²mÛ6·íkÚž¡æuäiÛ¨‰S§œïÅþþþhµZ,–Š?o(§Ï®_ooMÚÕÓO?]ì7oÞ—éIZOÊ 5ïc/„~C!„B\Üt€ró¦éÒÁy³aÉʵõ\šŠ­Xü7±m[•™Íæ åFZ¬Cgç—€%¬à§ouY—šr†]Û+ž¥ö©ÿ<‚ÑdÀl.ä©ÿÃö-»Ü¶Ù¸Ö»7„ÊÚ¿;MëJ¿Øìغ›œœ\žzášµhB»Žm]ÊÂø‡F°jùZþóäëØíΛýé™üûçùiÞ„†‡0ò®›˜üüT—üŽ:Ê´·?ç©ÿ<ˆ‘Cؼq;+—®æ™'äÏáƒGùòãÿº•ÓápPTèÑ×j-ý2UTd)Y~¡Z÷÷&·e«W®çè‘c|?g::½Žž—wcÉ®w`×ÿ½‰a7¦çåÝP«Õ._"Õj5í:¶`ãZ×/¦‘ùý®›X0g)oLz¯d]¾ÃlÙ´³>Æ?Àñæ­—ª6šüùx³Žª{ zÃÌ,v–™wOz&ÿ¤¤ñ^¿éuŒ‰áÝ-»ÝÒ­?•ê¶l͉Ó$eçñÝ +Ñ©UôŒ ci’ëKBƒXšt‚™\eH-0³;­â±Œ‹o ÀßÉ)LZ¿µ$ˆ9£°ˆ'ÿÞăújÐ3²u ^ÛäúP–·ê¨®¨T ÿzá —àä„Ý©,½ŸÄ„tÌ -M[¹¥>4¢tTÈ÷~º‘ˆ(稌»þ9É›O-«vYvm>É‘}iädRThÃÇ !¼±VË…ñCšV§¦s¯ÒDönKá‹·×q&%FED”?ñ]"0ùéÏ»¯óX:{?Œ¸»=¯j€N¯¦çUÍY8«ôý·ìynÌ_­r™Ë¦ývùè’z^³ôŸ½¾¦Êi½Q¿B!„B!„BˆÚå§òãÏ&«]–´$ðbÚó(Ú_nšgƒ_À¨2av˜yôôCl-tŸýh½ÙýÞîþ¢ÒÁe¯2ögaÞnÛdÛ|ú¨\Mm­åZã þ›ý f–ÞÏ:P´Ÿyóø»é´Š¶Ü2«Pñ|È‹h ï¤Oጭjòz’¯EçÀ”VJXµ8ŠJ–×6Eï‡ï#®÷ígR°pR•u«Ê‘söárEAe Ş휭Ð܉¿§aKv>ì¯ø9gÒ.Þ@ñ Gßû~¬ +(˜7±dvg[~:¿ü ÓøßP|ÃÐuyá‹^I[Å7 ãÍÓP…Æ`O?JÁ¯ÿ*78Jg£¶ì]DÑ?®÷¬m9§kuf]ë÷ßë­‡VaOOÄ4îÐèÑ´èƒeïÂ’õªð6¥·ÛÁ¼ìMפì…ë^j/@Ù§/˜œP°²ß­|{M3çÿ¶“`Ϫ|[oRù7B×ýN,»~Ǽø•’uöÓ°%ýƒéîQ|üÑ÷¾ó’ɵR½^_îÃã‡Ãe†cp>d^vÛê>tžÀäÉ“™V­ZÅ”~VÙ¹s'¹¹¹¼òÊ+ÄÇÇÇÞ½îÏwÕä<ŸkÅŠåΨ·cGùï+5mÏžÔ‘'m£¦Šƒ´E!<<œääd&NœH·nÝxûí·ùçŸJŽ (Ù<»~½u¼ÕmWQQQŒ?€_~ù…‰'–¬Û³gëׯgþüùòè£òÜsÏU¹,•©ú-Ö¯ßêöÏž¼/H[JúØÚQÝöìIU_Çë|½Ñ&ÁÙ^f̘A›6m8|ø0cÆŒq NÏ?ó«ËþÊõuÕçgàšö±B¿!„B!.nªú.@M0ú–¡( ìÞw=ûÕw‘*ôýWÿã…'^ã“w¿â¾;w™Ù¶<™Î;gñÛXùŒŠeÅ´‰¦}'gÀö7ŸýXnpr}X2v»3/6®•˺k‡\N¯Ãb±òî럔'3˜ùõ§yô¼¢[¹ûŸ;k+—:¿ ÿßË1î¡Ñ\quo¬V+“Ÿ›Š¥¨vG¿P;šLÊ)çÈË›6r[¿|‘óK§¯Ÿ‰NggK.Ö¶]k| Î9Î `8¤?*µ «ÕÊןºÿøvôð1Ï[À€ë¯B£¹ðÆ=¨î5X[¶ŸIgÁ‘ã l…F¥T9í±Üî_¾†¬JÉ‹ßîpðΖÝ.¿µi`óƨ«ÝÁŒ=ÝÖÍÉeñQç ¨ÍW«Ž*sm³ÆèÔ*,v;ïmÝí6òÙjã·C‰ôˆtŸõÁ[uTWºôiRx °aÅQ^ú×"V/9Ìñ#™œ9•DZ#™¬]v„M«’jµ,ÿýp?MßÂüŸv³ä·}üþÃ.¾œ²ŽoÞßX«ùV•Z£BU¦™ ,¤žÌÁj±c.°rô`: gíå—¯ÝGa=×Á=gHLHçèÁt>k-¶2óÑmCj¥üB!„B!„Bˆ‹›V‡ël/ÑÚVŒõ¿£Êä¶}k]›’Ù„¿Ìú¬ÜàäŠl6o"ÉêüÍø© ‰ 3 L†NÑ¡Ž¤¿q} ýȳ繤h @‘£/³?wÛ· *¾q«ßHÚë:°Î¼–EåFWÄÓ|ëŸì®õ« ‰Fßc,ŠÎý~Ts)ÈÂQä¬3Å÷ì}E…¶ÃÔQд¾º4“sFC{Ʊ’eÚ¸Á ÑƒÍ‚yù[%Æ%û·P´õg€’Ù½‘ö\ªàæïøUh ¶S»ÉŸyO…ÁÉŽ|ç³êFíQ •î»®Ø3’Jʬ6qY§s¶g¬…®uoÏuÁt ‡r>ó]>ª³§Õ^Çcùjâ®Ev+EëÜÏ•=ý–=ξDÓv0¨jçúÎ;Ù³gÛ¿+jg:éŸ~ú‰… Aío¼ñ>ú( Àjµòä“OºE{jèPç»………L›6Ím½Íf+w&`€áÇ£×ë±X,¼øâ‹nÁùùù|÷Ýwôë×Ï-}zz:;w&00У㨪n¸³ÙÌxg`øbsæÌ)y§}ûöçÙÚÕ‘#GJ`š5kæµ2yZG5W2+÷´iÓÊ ê¨©ùóç—¼îØ±cµÒÖÖy†š·çúª£šÊÌÌ,™¥´8Y­V3räHºuëÆÀK¶-^ôèѺ/h5UÖ®FŒZ­Æjµ–Ûo£`Y³¾ŸK>ÝhÙª9?Îû‚¹ÿ[À‚¹K9žTù—Ê.Ý;”¼^8wiËêmù¤I',<„À ׯÏÊîÙ±´ÔôrÓ'r>ˆ@`P@IwYo½ômÛÅÙ8¼dFæo>û‘„}nàzM™|MÜxûz]ÑÈFáR_Àñ¤ø8Úõz[º­›¶sæt¡á!\yu/¶l,E¸óÙ¶sâø)’tI×¾³3èýpB")'Ýg÷Xó׆Þ4=­ÛF³w—÷FT÷–ê\ƒµéï) ‹nŠA£¦U€?ûÏiÏ&­†[5§gdFõ: ¬6’sóKSõåŒ$÷KB"—E„ÒÒß—÷ã÷ÃI,LLæxnžÛ¶ÞL{®¿’+~£¬â÷ed‘Z`®v>5Õ>Ä™ïá¬Rò ÊÝfÝÉT†¶lŠZML€?ûÊésª«ÓÙãÝ“žIš¹üç³7Êõ:õº’ dðnÕ…v]"]þþßW[qØ/ä°<óÎ÷#hÔ¬üEbâCùqÕÝ.˦½¼ŠuË0ç[8z0ƒæ1Î6Ò¥w¦~?‚óX¿â(§OäÔ¨LyN'ç–”+0Ä{’ÕOγB!„B!„¢frí¹ô>Ö U-´-¹Î4„¦›¸Ö8ˆ(MîKK‘£ô÷ìnúî%¯çåý^­¼ìØùÏ™ÿã£ðéø«˜òr…ÛæØ]£m«‹ Á’@¾½z¿¨y à_رó~ÆÔj¥õ$ß £0—œ÷z¡øø£ n6þz´F i3C`òºlÞ 8td%£„Å¢òo„íÄÔ;¢ø8óÕ´èC!ΙWç@ÌŽÌÒeu“®ØNîÄ‘WþìÖö´ÃÎô† CŽ‚ Ó–¥ŽˆC×ýNC ¶£)˜ûK~¥ÇlÙòš½P…Dc?Ëö_°ìž=£voPô¾h;ߊ¦EÿF¨ŒA8,ùØ3Ž•K+½Ku„³=ÛRpä—ï¾¶ýºî h!d:¤? ֪ĎUrJÓ‚ÏÎÄœþXx^ÎâÙ±m©+ R·þm‡(ZÔá±ØNíñ<ã ÀsÏ=GÇŽ‰ŠŠ*™ùëÃ?dÏï_qàþ}ûÈË«^Û£G¶nÝÊéÓ§ËÝæàAç€ÖÁÁÁ—|óÍ7\yå•´nÝšåË—óã?ò믿’˜˜Xƒ#©šœÏmìÛ·´´4¯î;??ŸÓ§OIppp¹ÛøùùqçwÒ¯_?¢¢¢&??Ÿ£Gä¼—éãããµ2yZG5Õ³gϒ׿þú«Çû++++‹´´4BBB s˜êþø ùù•­-µÕ_y¢!^Gž”¹6ûX!„B!<Õà”Cƒƒ¸çΛñ÷3‘š–Á7?ͦè"›!wãÚÍ<ÿïWyê…G æ®ûFr×}#Ùµm/ÿû~-[ã6Ó0@h¸svÄœì\ÒÓêxˆàó0Ÿ @Ô8æü¢Ú©[{þÞ±à¼ûñð+7@97'ÞüŒ7>œ@~^3¿ýÍÓb_pZ´jÆ»ŸM&,"Ôe¹^¯s þV÷Y_ív.^ÅmwÝHÿÁ}™6å‹’vtYoç¨Z׺b_\G';ו~Q -ÿf–p:™WúQ¨AÏþ2Ï7´ð÷eê•—fpýÑI¯VXæÚ)§zÙ˜r†ÿ¬ÛÊ]Ûâ£çζ­¸³m+v¥e0+!‘UÉ)n³öz#mM…ø8x8™W~pm)Î7¥ â|O• \1èÁý”äë¬ÓN¡ÁüuËuçÝÞO§u P®:òDHD鬋SÇkd{©øð¥¿˜ôá ‚ DDùqû]¹ý®ìßqšy?íbËšãÕÞo~~iÒéÝ6B!„B!„BˆªÊ¶g±£p; ·ñwÁ_|ö1ñºvÜä{ 3s~,Ù.LvvûlÒmÕ(uOÑnî8y cüÇÑËЇu‡…S¶Sl0¯ãZã`ÂÔa¶¸R¬rÞŸ:mM©vžcüÇá§òc~Þïnû=Oò½8ÌÙØNìÀvbÖC«0Üô!êˆxtn¢hËL¯äaÏ<Ž*,¶$Ys•3ïÂ\T!-Q4ÆžuU@ÔÙíK”•³³*«›tÅïÉΛ—bð/ 2ö$mYšØkœ/ 7Î8op2€5q¿?Ï€gQL¡èzŽG×s<¶;(Úü#Ö„?ÝftöUH4Æ›?Bñ wY®hô¨ Ae—¸®?¸ìÈvк.åLÕ¯ø2¨Ã!äs83lÉåoïpŽÿ‹ª’Éê-¨›”¾ö†âvåÈ©xðf{™óX¼½·ÅÆÆºÍ¸UÛ²³³yå•W˜>}:yyy|õÕWµ’Wh¨ó¼:UµA²Ë w¶ÿ=zpèÐùûöÀÀ@—`…U«VñÐCñꫯÎÃ?ÌÃ?Ì–-[˜1c‹/öú¹/RIN® Á{¨àì=r½^ï¶.&&†o¿ý–ÈHר}||\PÊ{¥¦<­£š*ž97++‹3gʸ¹¹¹„„„`0ÜÖÕÇy†š·çúª#O$%%•(\{íµäääCÓ¦M9vìMš8ßB€2TÜ®Šƒ4+›I³ìºâ:m¨.Öë·¢þÙ“÷écKI[·*jÏ—ZÞi“×]ç|ÎÐápðé§ŸÖ[pr±Úè¯<ѯ#OÊ\Û}¬B!„žPÕwª#80 $8ùLZ_}ÿ 9¹õû…«¶¬^±ž[åµçßa×¶½€s&ÛW¦>Ëw¿}JL›h÷Dg¿§:.  µb•IQœMÐn³c)²œ÷ŸVWþC•Já–;‡—üm4ûà(ïH=R…W§>GXD(……EL{ûsn4†þÝn`pŸ[ÛNŸª8ˆ`áïË * JÖëutìÒ€ kÜoÊ+gVUÛUÙíʾV©¼ûã^C¥U•v»J™›þ ðr¯.„|(´Ùøhû^n[°’¿-æú¹K¹wÙNçW>Óðê)Œ\°’×7í`WšóÁ‰ö!A¼Ü¨G‚ IDAT« ß\{1~µ’¶&Š]§ªþÛPÙ¦XÝK¶®b7é­î´¸ùÛ,vûyÿ•w^꺎¼ÅZd¿¨gOg p~^é¿B³µdÝîpY—ŸW„Õâú°Ñɤlž?ŸE³öRç:èJ›Žá<õFžz³?jMõ®—²Ï4yûK}ðô< !„B!„B!¼cmÁjvn —O—u¥÷>jþ»pŠíog¼ÁM'†qù±\uürn?y3ßfMˆÚ9`ó޳ùŸËBõ¶¾ÁwCM7°©Ùv·g#Ÿ~‘MͶóPà#^É÷Be=²Û çLUê½½¶_{z"ª€Æhbûã(È h½3°QÓê*ÐèQŒÁ8,f—YiK~ãvØ3:ŸïŸZç•´.ç%qŽÂPŒ7}€&v@•ŽÛzð/r¿†yá‹¥çµqG ÃÞÄ4ægTa±U=…U¤`ö¦38ÙZHáŠwÉûb(9ï÷&wZ?òþ;GNùõk¡ó…ª~=5/ƒŒ'ÁQª`þTAåok=ûü»:cÝ•±ôžãÅ}¬<*•бcÇ–üm2™˜0aB­äUü¼ÅRý>¶øÚ·Ùl÷ŸNç~í/[¶Œ¾}ûòÔSO±e‹s°÷®]»2mÚ4,X@\\œGçÎlv> ÑÔÎ\?·£ðñljÙlfòäÉ\yå•´mÛ–N:1lØ0NžôþÀÞ¨#Oò­­g«ŠƒÐν?[_ç¹XMÚs}Õ‘'Šg,@oT¶¾ªûi(¼Õ&W­ZEvv6Š¢ðõ×_sýõ××Aé+Vý•'âuäI™k»B!„ fe½^Ç]#oÀßÏDzF_~ÿëEœ\Ìb±²hÞrÍ[Ndã†Þ4‘wÝHóè¦|øÕ›Ü}ãCœI-y<ýŒ3`ÍÏß—€@²2³ë«èUv&5Öm£ùsÉ*^žøv÷3öQtëщ‚ü–/ZÅЛ1jÜ­¬_ýÛ7ïª4mÙÀ¹ºŽßªÎÅÖm[Ñ¢U3Þzñ}–.XY²Îb±’°ïyy•_÷f×ö½´ïÇà®aÚÍtîÞ­NKA~›Ê™A¹¸Ž"£"*ÜoD£ÒëÒÓJG·Y°Û¨T &_SyI«¤>ëÈÛBËÌŽœn.,yÝ:Пþ¾¼½yË’JG´Øí$df“g- Æ«ˆÅngñÑdM&Òd`H‹&ÜÖº%Íý}y¿_OÆ.ý›3…^O[]é……€áFŸón[^9í*EÁ¤­ÞÛØs!1@¤É}$Íb‘ÆÒue먬²³+œ¿Qç»âøI^ÙPþCSUQ—u䉌´ÒY¨ &-‘Mü9u¼úïI.}d^ûösªÏ7ÀÂî_àòw§žQLœâœIáð¾4&=¸ ¼d.2Ó ønÚ&~úl z4¢çU-èѯzgïÚ§ ×ÝÇüŸvWçPªÄfs ä­«%ª[¿Þ8ÏPýúB!„B!„B¸K±¥ÐR»F ¦Ùœ3¸ø©ü T’iÏôZž·øŽD… ;6V,wY—j;M,mh¤n\íýê÷™$«Ê“|/dŽÜÓ(†J¦¥­&ûçÌ@ŠcÔÚ£òoŒeÛÿ°ì_‚¾ï£hbûcMÚŠ‚=ýˆË(œö¼3¨hƒeÿRÌ<_½|=H[–íØf —½‰áÆ÷P…Dcú: TX÷-©Bb –=`Ùó*ÿÆh; GÛmª–oûŒ¼oGâÈ­| êªRG´AâìܼäU,{•¬sØ,8NïÇQ”WîÏòެÙ®‚¦«¯p=d>Ao¦¿ i÷ƒãœ8UËγ/Tàs9,­›ò·+% âk_uv¶pGÞ…7»Uñ}šêr;aÂz÷îM~~>óçÏç¶Ûnãþûï篿þbãÆ^-ãéÓ§‰/™ µ&i,XÀã?^ã2X,fÏžÍìÙ³iÒ¤ ·Þz+ãÇ'&&†~øë®»Ž””òƒþ¡zçùøñãtêÔÉëÏçOLL Ï>û,¿ÿþ{É:‹Åž={ÈÍÍ=ï~ìöÒ~»*Çë­:ª®ÔTg@PPçIáÞ:Ïž¨n{öVU·mx"!!ÿgï¾Ã£¨ÖŽ·—ôÞ @H€U¤Hr©‚{A,÷*ö†XùÙA¯,ˆ‚ØADéH/¡—„’Þ·ÍïH`Ù$$ÙMò~ž‡ÇÍÌ9sÎÌ™9³îÌ{”(wìØ‘&MšðÅ_°hÑ"žxâ † ÂÚµkQ©T:tÈ©nçªk?Ùû[“~22ò̽êôù`±Xp8¨Õj||ê> ~Cîï¥výºs_>VúØ ;ýÕÙkk[®§ÎÉ 60eÊfΜI\\o½õjµšŸþ¹Fõ®ë½¬¶ë{lcõuîp§Îžêc/–~C!„B\\.Žáï€ÑCHqq ³¾šOAaQcW©Vú èÉõ·Œ%<²ê ÏêœLKçãw¿à®ñb³Ùðñõfè(çQ™wlÙ”ÿÃàÜ®sCعµ¼Î]»wÂ`¨ÛèT»%rËÄòÙ’_{þ¼þÂÿغijµŠÉS9o`ìéÑ»·‚h뢬Ì€ÉTu°äiAg^8°ïpËüñëEôxAþôP>²ýš?6TÔçl§Û¨e\sÂ#C]Ö\ѯ;¥%¥Øë\·¬¿ƒèOW×…'ÚÈÝkÐSzþÌmWçT,0žyùå ‡8YTÂ'»p÷ok±9|ô:†4kR¯y{G…q]«Õ$e—¿ëï[§ 嬿‡›ûx×*ßοrˆñó!Ì\y{ý}ž—ÚìÌ«¼-JÏ è¬Iôér»„cÐxfÔywÚ·¾íÛáü~Üë4¸@Y©½âsPHà {_Rä܇Õî<«-ÕY²V«-kŽóÁÔÕë“5锂tìi;ÐDv@Û¬p&˜¹"ojùà¯ÚfÝ@[»€rwòžË‘—Jñ¼;ËgBV©1 }m«Ú=—wä§Q¶æŠçÜ*£/ºÏ]+*s`Åg{ÆþZåµÛ€Ú¿ ÚØ~«S]•þùÿ+ÿ¬k>÷º¦±ìûßÝ×Í4Ø0§Ï+Mp¬S òÙ´-û XKjÝ ¡¤¤|Àaoïš?'éÞ½;ÿùOù,òO=õO?ý4ëׯG­VóÆo¸àV™Í›7˜˜HXXížóŸÎÛ«W/ŒÆÚ?®ÌñãÇ™>}:cÆŒÁf³áççÇØ±c«ÍS›ã¼fÍ¢££¹êª«Ü¯p W|Þ³gO·sz_ õÑF5ñ×_åïV]}õÕ V®§Ž³§Ôä|öTÕöÜpÇéå¦M›2jÔ(,XÀ‰'زe ]ºt¡W¯^ìß_}ß\—~òì|Pÿû{ºÚ´iSeÐßÀåﻜ{åƒÒœ¢«‹†ÜßKíúuç¾ }lãú§ö±îp·¿:­±ö·¶åzòœLIIáÚk¯eË–-h4¦M›ÆÐ¡Ck”·®÷²Új¬ï±Õ×¹Ã:{ª½Xú !„Bqq¹(”›D†“˜P>Jïw —“•㹑¶ÂøÛ®aêôÉÜûð|üÕÛøùûV›^«­:ØíÈ¡cäÿÔè༽»÷W‡NøÏM$vJp³æõï—…+°Ùløø1éÉ{ÐÔ2pÏ×χ)/?†Z­âç–òë’?p8þï™i•ÊOL¬vé'ÏŒ¶Ö­gç:íG]Ê(Þ !4<¤Ú´ÙYgÎûø„ºZ½rÙŸädç¢Ói5nW\Y\üÛÒ?+M¿lÑoØív4 ·ß{£Ëú-›1xDÿ¿Ó®ÄvÎ,¿{vî ßÀ^MuûÀÝ6ªí5è Z•k÷îebP³ò‘þÖ¦ePj?œ—sÖL½müj_^53€É/¤ÀRçWÉ@îä=Ûõ­cx©GgîIlÃŒþ=ñÕëªLû[Jù›•Š[â]t¨UªjZO8÷mŽQ[ó~cyrvEA£Rq{BœËú¾Þ ŠŽªHksT>ËyFñ™i. ®4ÍÙ–KÅæPð7èy c[4µŒÖõT5”¿þL!÷¬Y”»÷oÎä·Óc@s"£ý 1ÑÔ—øŽa ¿.¶ò¯#Yég#‰jîÏè›ÚíKH„7± !\{W'Z´òxý³2‹)-9Ó— ÝŠÝ£ó".!„ë&v& Ø3µ­š÷¾¿†;íA§žM6£Ói0š´„˜±ÙÎÃ××L¿yÙ%Ÿ´ÛD."$Ü›6‰¡\ïÁý=ۥоB!„B!„Büõ5]I+}k6—nrZ·Ç²›ý–ògCwûßGGC'·ËënìÁacTɶg1=çu—4KŠaÇŽ O>Ï z>Un}ÒÆö­˜A×~|³Ç¶ëÈ> jßtñCpä/ô¬IK@¥BßíÖò´§:åµîù¹<˜×€±ÿc ®ùqv'oe”Ò|Š¿½ûñ­ Ö`ú×Kh¢:VžX]õsGÖa”Òòr=9SµRœ]ñYÞ¶Vy­IK*fú5}]»‘¨¼‚P|ÐD´Çpåà®úù_}(š[¨ àu.?'£< €® ø>•Nía¶¤Åà°ƒZƒ¾§ëûê tmÿõwÚ%à°¹¤iliii„……Rý» þþþLŸ>µZÍ×_ÍÂ… q8<öØcÅ”)Sûl­ßE©î½›[þ¼:  ÚíÔæ8/X° "XðÍ7ßäšk®!$$___:uêÄ3Ï<ƒNçùkðÔ©33|'&&Öy;§÷ wïÞçMïnÕÕŽ;*…|ðAºvíÚ åzê8×E]ÏgOµQmÏ w:t›ÍFTT#GŽ$99™­[ËÐY°`*•ЉËûí}ûöU»­Úö“çæƒúßß³ûÉÊfaŒ‹‹«`Z°`Ë;]Û·—¸1dÈÌæº=#oÈý½Ô®_wî ÒÇ6œK©u‡»ýÕiµ¿µ-×Óçd^^7Ýt›6mB£Ñ0}úô]_u½—ÕVc}m¬¾ÎîÔÙS}ìÅÒo!„Bˆ‹Ëù§}¼ôéÑ€äÔ;ž†ÑXùÈÆŠ¢T:¬Ñ`¨xe<+xK§ÓUlËaw`±Z=\ór†ö­øìàK—Ë;T ðæ‡/a³YYñË*öîÚOvV.Z­–ðÈPFþ{(Aå?VìÙé<’£¢(¼þÂ;¼óÙ«MFÞùôU~[¶ŠµläDj:v»³—™˜Øføú1óÙõ²¿µ‘™~ŠÏgÌãŽ{odø˜Átº,‘ùß,âØ‘ãdŸÊFoÐF‡.í˜6õ}ìgt<ôÔ½…’r,•·_ù°bùÉ´ >|ë3zú^†ŽÈòE+Ù´nk¥uH>’BNv.þÜ3év4 ‡öA¥RÑ<&š¦-¢ø`Ú§õ²ÿ;·•ÿÏbùlÏ3룯p8D5 "*Œßý¢"íÁ}‡8™–Axd(÷?>ƒÑÀ–ÛÉËÍG§ÓáèW£`«ÅÊ÷_-äÎûnâÆÛÿÞ '?¯€õ«ÿª4}ú‰Læ}þ7Üþo†ŽˆÉlbáw¿PXPH»ñÜ|×uhµZòó ˜õá\—ü‹,§ïÀ^…òÖÌÿã‹™_“vü$zƒŽ°ˆPÔšó“ànÕöô„›â[h4°&-B«¸_n‰Å¬Õbs(|¶ç€Súƒyœ,.!Ülâ¿ã1h5lÉÈ"¯Ì‚^£Æ_¯ÇTÍoô¾ «Cá·”ìÍÎ#§¬ ­ZE˜ÙÄȘ芚÷f»ðàNÞ³ hzftp?ƒž.¡Á¬<~¢Ò´Gó YžœÆUÑ‘ oÑoŽEGSh±ãçÃè–ј«ùwÉÑTúD…d40½O7¾H:ĉ¢bô ¡f#ê*€Ó‹KøzÿÆ·ŽaH³(LZ ?N¡Ðj#!ÈŸ›ãcѪUä[¬ÌJ:Xé6’ ŠÈ)³`ÐswûÖhÔ*å RAs_ošz{ñáÎ3³2KJ™tÛâÖ¢ CYp8™ä‚B²K-èÕj½LtdúÖÝØçÀhOµQC±Zì|ôêZ{¥ÅìÀñÈïXùÈæÛ7¦‘r8Çeùž­'éÜë̬Áã&tbÜç—ÙN,âȾ,Ö‡ÂæÕÉôº*_#¿æ<BÒ¶trNW–½Vš4÷Ã?ÈDÿqôá4¶¥U»¾®6¯>NïÁïo€‘Ç_wÞß=Ú_§m^í+„B!„B!ÄÅH…Š9ß°¦d5Û˶iÏĦØÖ„ÐÝØƒq>×mÏæ‡Âïœò*(ü_ö |ö)&•‰Â>ayñ2V—¬"Õ–Š]±á¥ö¦¥.–M€ÓlÄ&• _µÚâõ 4_E¢¡cEyœšÄ)û)ÎuÒv‚/ògq«ïô1õããðÏ™—?‡d[2Ô„iÃѨ<ÿ¢jc•ë^7ÏÅvd öÔm8 3ˇ½‚Ñ4ã8 <ÐÕºýÏk·b?uMhkT–-_U¬²í[W>\1û¯==É)«RAÙúO0ôœˆ®ý(4M»`ÝþŽì£(EY Õ£öDÓ¤¥+^-õ@Þ*ÙÊ(™ÿ ækg i…iÔ›ϽGnŠS2ó5ï¢Ø­Øö-Ç~r7JQ6h´åAÚ‰cÎìïÉ]u=ª.ìûqäŸ@íQP¬5bOÙ„R’ =*Sèªx¦l+£äç§0ù*½ÆÁž 6­«¼çAÿ ¨ƒÁo d^Ê™qr)úŒýAß ¼®]\ù2Û@}7Ï×É‘Ë__¢ïv º„á¨ôf¬;~D)+@‘ˆ¾û Ö¢”æS¶îcÏWÀ6m*`B¥RñþûïóÎ;ïPVVF‹-hÒ¤ o¼ñ†Sú矞ÐÐPŽ9‹/¾X±<55•×^{矞1cư`ÁV¯^í‘:¦¥¥1cÆ î¹çÈ7ß|ìY³8zô(†ˆˆˆ*_è?yò$ï¾û.“&MbܸqtïÞ9sæpèÐ!2331 4iÒ„Ë.»ŒgŸ}Öå]”Ï?ÿ‹Å¢E‹Ø±c§NB§ÓÉøñã+fÅ;ÜW•ÚçÒÒR&MšÄ'Ÿ|‚——¯¾úª;‡¯Æ’’’HMM%**Šgžy“ÉĺuëÈÎÎÆ`0ˆÉd:ïv>LVVAAA<þøãh4šŠÐ¸¸8bbbxå•W*Ò»ÛFu¥( “'Ofîܹ˜ÍfæÎËâÅ‹ùí·ßHIIÁn·ãííM«V­ dÚ´i)×Sǹ.êz>{ªj{n¸Ãjµ²oß>ð÷÷gÖ¬Yë-ZÄ3Ï:uâ¾ûîC«Õ’››Ë;ï¼ã’ÿ»ï¾cðàÁ„††2{öl>øà’““1 DFFÖ(hª!÷÷R»~ݹ/H+},xþt‡»ýÕiµ¿µ-·>ÎÉÒÒR&L˜ÀW_}E||<~ø!cÇŽåØ±cUæ©ë½¬¶ë{lcõuUgOõ±K¿!„B!..E€ró¦å3ŽFGEðÌÃwW™®°¨˜—ßšé²üñî@_ÉèKãF ®ø¼ïàfý“jë*3ý­Ú´¬ø;ã¤ëCóÓÔj5m[c4èÖ³K•éÖü±•ËV¹,OÚµGï”—%84ˆCû1ph?—tE…EÊ&³ M ‚DÏUR\ê‘ÿaûü£¯ÐëõÜpû¿‰jÁ}ßYiºyŸÿ@ʱԊ¿{ô¾ŒCû–Ϙp”Õ¿¯çŠ~ÝétY".;3ZZ^N¾S€²Ã¡ðÒSoðÚ{ÏãíãÅÓï«u=Nû~îOŒ¿õÌ^å?r,ûù7¬–ªôg¾3›°` »’~{Ño`/§õù…<þßçÈÌp "[ûÇF~þa)ÃÇ &!± ¯¼ól­ë[›6ªLm®AOѩՌnÍè–ÑNËíŠÂ+íàÐß3¡ŸæP¦nÜΫWtÅ[§ã¡ZÌ€®V©ˆôǨÑЭšÙ|מÈ`åñ“Ë{®Ì’RâΚ:£¤¤šÔ0mËn½L´  _“pú5 ¯6ý¹õYtä8ÃZ4¡m ?/÷ªº¿<×Ç»öb2rUt$}£Âéå\nÅÊ“k6sª¤´Êm8…wíçÑ.íð3èy¤s;§õù«S€2À줃è5jÆ·Ž!ÊÛ̽‰m*Ýö×ûRxffYO¶QCÚ¾>•7ž\ÉÄ'{âë_ýà Íb* Pþíç\uuk¢|ªÌÕ¬ö3Ž×Ä·Ÿl§ÃåQxûV>(JTs?¶oH­t]mDÖ°þ{·§³hÞ·Ë«ÊwŸn£Ãå‘U¶•§ö÷l—Bû !„B!„Bq1j®kAœ®qºVÀ핦ɰgðHæ$ .ëv[vñ@æ½¼ô !š›‡2Ø<Ô%]¡£Ð%@ù>ÿ¸Öçz§e ”¬äõìWȰ§WYïsßÃ_Àhï1´Ó·ç¥à†y™²±Ê­+u`sÔ!qèCª4S)Ì dþ#(e®íëÇÉ=hB[ƒâÀ¶ûç3啿c;¸mëA (8Ò÷ºäµ¬û•F¾Û-¨ý›`èë:ë€å¯/qä${,oU”²BŠ˜„×ÍsP™0z¢9·€íïgÖ*5êðv¨tF´Í{T¹Û¡UØöýZ£2kV1¥K¦`ºú-TŒŸ¨Uvûñ-ϹÃ÷¡mÑ4åÀ+e…ØþŽ.~èß³P+Õoȃÿ6ø¿šPð¾ >:;dO‚€WÁÐô]ÊÿÕ·²5ï£ò E?m\´qýÖ+¥ù”ü8 ¥0£þ+SGå§Ÿ~bäÈ‘tîÜ™Ï>û¬b]NNŽS°B¿~ý>|8‡ƒG}”’sžÏ;—±cÇ’˜˜ÈóÏ?Ï Aƒ<öòÿôéÓ äÚk¯¥cÇŽ¼õÖ[5Îûî»ïb0˜8q"ÑÑÑ<ùä“•¦ûä“O8räHÅ߆:`2™èÓ§O•Û_±b‹/®¶µ9Î6làꫯæ‘G¡OŸ>èõå×`AAË—/gÔ¨Qh4Ås× Ãáàá‡æ“O>Á××—^x¡ÎÛ™6mS§N% €©S§:­ÏÉÉq t¨K™Íæjg«¬JQQQÅy¹}ûvn¿ýv¦OŸNXX#FŒ`Ĉ.y <<ç©ã\[îžÏu½ŽÎV—sÃ;wî$!!‡ÃÁ?œl%77—eË–1lØ0Ea÷îÝÕn§¶×ïi ½¿o¾ù&áááŒ5Š!C†0dȧõyyyL˜0ôt×ïÑ¿ýöß|ó ãÆ£S§N̘1£Öå7ôþ^J×/¸w_>¶þ]Š}¬;Üé¯Nk¬ý­m¹õuNpÇwðóÏ?È|À˜1c(-­ü=ǺÞËê¢1¾Ç‚g®£†æN=ÑÇ^Lý†B!„¸x\Ê&sýŒ^ÖPÞóBÃBˆl΂ï³k{R•iEáñÿ…EÌÿvão½¦|ÿXZmz»Ý΋O¾Îª_×2òßC‰o× £ÑÀɬù}s?ûŽœjfn}íùÿ±}ó.†L˸˜½ÌX­VòròHM9Áþ¤Cl\·¥Ú:Ô´*S›kÐS–KE«VÓ)$?ƒž¼2 Û2³™³÷ó*™cÇ©n]¶š±±ÍèDˆÙˆ¯^G±ÕF¾ÅJviÇ ÙxN€µ¢(<±z3}¢ÂHò'ÈhÄß GA!»´ŒCyü–r‚)'pœsŒÜÉ{®÷wì%Ôd$ÂËÌO‡“ÙUýl¾Å6ü¾1±ÍȘõ4 IDATE´*Ê+`é±TþÓ!ºê^ß¼“í§²Þ¢)1~Þ˜µZ¬yeVÒŠŠÙŸ“Ǧt×`t»¢ðÒÆí¬J=ÉȘhÚøaÔj8YTÂÚ|µï09e–jëðó‘ò,Æ´lF¬¿/Þ:-%6;óòù35ίf(ÀÌ]ûY‘r‚Q1Ñt $ÄdB¯QSh±’\PÄ–Ì,ò,Îe{²ÚÖuǹÜôÒ’Ž—G€Ÿ^CY‰¬Œ"ïË"õX^¥ùK‹­Š=å¯ò™‚=š·jJa¥K_Ä4zêàX ½î¦ì·ÿ^©Pòã$´qýÑD¶GíŒÊŠGQ6ŽÌýØö-Ǻw)(ŽZ•{>öã[)þüZt®CÓ´+jŸPTF?KJiJQŽì£ØŽ®«4¿#ë0% µW0ŠbG)Ì@×vXùîÙÊ*Í[_J~óÕ ï\>Krá— œuš(Åýßò™”MÃ@ßÔ XÀž Ö}`Ù6O>îpØ)]ü ¶+Ñ%ŽAÞ•Έ#ÿ$¶C«°lšRœíÁ=ïñÇçèÑ£Œ9’¨¨(JKK9pàË–-«xþ®Õjyúé§øöÛoÙºu«Ëv¯¼ò sçÎ¥yóæ\ýõ|ùå—©£Ýnç©§žbÑ¢EÜpà têÔ‰   ìv;999$''³}ûvV­rà_QÞxã .\È 7Ü@÷î݉ˆˆÀ`0ŸŸÏ¡C‡X¿~=99Î);î¼óNLçÎ !((‡ÃÁ©S§HJJbÑ¢E,\¸‡ãü×oMŽóÙ8ÀĉÑëõ„††b·Û+u®¾új€*ƒPêjÓ¦M 2„[n¹…=zŽ¿¿?………äææ’™™É¡C‡*=Îg›7oÙÙÙÜ|óÍÄÇÇãããCqq1III•îo]ÚhÖ¬YtéRûQn¾ùfÖ¬9s/Þ°adìØ±ôïߟøøx°X,äååqàÀÖ¬YSñn•'xê8׆»çs]¯£sÕöÜpÇÎ;¹îºëøã?HMu”zΜ9 6Œ£GRXxþï:µ½~cív;=ôK—.åúë¯'11“ÉDjj*+V¬`ÆŒde¹N8qÚSO=ÅÆ¹öÚkiݺ5ÞÞÞX,rrr8vì»wïæÏ?ÿ¬¶ ¹¿pé\¿§Õõ¾ }¬ô±õu Ö•»ýÕiµ¿µ-·¾ÎÉôôtž|òI>úè#Z·nͤI“ª &­ë½¬.ã{¬§®£†än=ÑÇ^,ý†B!„¸x¨þþçä¹çžSíÞ½[•™™©*((PÅÄĨ233Õz½^STT¤v8:³Ù¬³Z­zÀ¨V«½EñQ%`ÕªU þú믊muíÚµw§ñÅÆÆ6vjíýÏßhÔå‹É?éX7Œ‡'ßÇ®íIÜsÓÃ]ŒÅ£®ÂK§eÆ®}ÌÙ{¸±«sQûuÌ`tj5ïnOâÛG»:½¹CúåmfÚ–Ý,8,Á—B4¶ùÃû`40uãv–%§5vu„B!„B!Ä%fÞ¼y•.¿Ôží !jNد۾ dþCØy>GQµ–-[²lÙ2&NœÈ¯¿zpöõ‹È7ß|ã‘à9!„¸ØÕÇ}AúX!D}ï±B!„B4®Êâ|ûôé3J¥Rå¨Tª‡ÃQ”êt:Kqq±U­V[½¼¼‹Åâ8|ø°âã㣄„„( ÊsÏ=ç2šÍE1ƒ²¨_÷ÞòHcWá¢ñO9VAþÜv÷xæ~ö]#×F!„B!„B!„B!Ä…L×ñßåö»·2B\‚n¼ñF |¶ÆmÛ.¬òÒ¸qã» BqA¨û‚ô±Bˆú ßc…B!„øç“e!.1±Í())Ãf³Ñºm,w?pÁlZ·•?[רÕB!„B!„B!„BÑÈL#^Å‘“Œ=m;ŽÂ °–¢ò G×v(º„ØöÿŠRœÝÈ5âŸéÝwßåèÑ£lÞ¼™ôôtŠ‹‹‰ŒŒdôèÑŒ;€%K–pêÔ©F®©Bˆ† ÷!ÄÅBú+!„B!.m ,Ä%àÞ‡ïäò^]œ–;œÂ‹O¾ÞH5B4–‰í[s[ÛX§e7/û“|‹µ‘j$Ä?ß„v­Ö¼‰Ó2?ƒ¾‘j#„B!„B!„BTB­Ash U&±§ï¥ô×W°RB\:4 ýû÷Ç`¨úܽ{7S¦LiÀZ !„h,r_B\,¤¿B!„BH€òäÏ‹¥ÜÞ‰ÿj”rEÃ)-)¥ ¿£ÉHzZ:¬XËì™ó(.*iìª !˜—N‹—Îùö¯R©<¶ý¹«nöض.ãûÌnì*ˆópçœôTûzé´«þ^!„B!„B!„htj-eëf¢î†Ê¿ *³?*¥4{Æ>lûW`ݳì2è­õA§Óñ¿ÿýž={MPPz½žÜÜ\öìÙÃ/¿üÂ?ü€Õ*× B\ ä¾ „¸XH%„B!„PýýÏÉsÏ=§Ú½{·*33SUPP Š‰‰Qeffªõz½¦¨¨Híp8tf³YgµZõ€Q­V{)Šâ£(JÀªU«üõ×_ÛêÚµkîNã‹="!„B!„B!„B!„h$óæÍ«tù¥ölW!„B!„B!„B!þ©*‹óíÓ§Ï(•J•£R© GPªÓé,ÅÅÅVµZmõòòrX,{HHˆãðáÊ¢$$$(Ï=÷œrnêÛ!„B!„B!„B!„B!„B!„B!„B!ÄEO”…B!„B!„B!„B!„B!„B!„B!„5&ÊB!„B!„B!„B!„B!„B!„B!„BˆÓ6v„ ÃÏß—˜¸æäåæsøÀÑÆ®Ž—<• ¥±k!*cöÖ£V«(Ì/k쪈zÐØí+×¾B!„B!„B\ªØ¨>[6ƒ±ò¯¾¼†UK5pÎ/ ØÌ„ÇzÐ4ÆŸ P/f¾¶Ž•?¨õvŽjÅ5·wÄáP˜÷ÑVýRû}MìÉ•ÃãˆKÁ/ÀHY™¼ìRNÏgû†4þX|²R[­·{¡ñıª)Oµ¯»êríOêÔ–«[6«tÝÔÛY–œæÉ* !„B!„B!€hm3nó»ƒ}{´áØ+'l'H²ìa]é~+þµ±«(ˆ¡ßC¨ Þ8 2»*BxLbb"o¿ý6f³™'žx‚•+W6v•Ä9jÛF·Ýv“'OvY~àÀ† R_Õô9'k®¡ÕÒ¥Kñññáõ×_¿(”/ökA!„B!„Bˆ‹‘º±+ Ä…@­VÕ4µZuI”+Ä…F­RémF­º¸®…R›|‹ÕéŸrž©Q5Z5w=Þ“˜6AüßÇÃrM<Ùnÿ#yûèéØ=Š P¯:o#(Ô‹Û¼ß#þA&&<Ö_c­¶q냗óĹ¼_3CÌh´jÌ^z"šúÒ©GnÔ ß€ÚmóBä‰cUžh_wÕõÚ/©¬Ÿ©ÿê !„B!„BqÉjoèÀœˆoî5ŠºÌ*3¾j?ZëÛ0Ú{ wùÝÓØUB·Lš4‰èèh‚ƒƒyâ‰'»:¢k©Õj¢££Q«k÷:Úź¿ÁÝcU×6B!„B!„Bˆª\43(‡†qyçöÄ4kB@€‡ƒìœ<ö<š [).)­6³¦‘ôîÞ…è&èõ:rsóÙ™t€UëþÂj½øg!u×­g¦¾5£ÑÀ îc)).ùG—+Ä…¦[X0/öìŒQ£aÈüe”Øì]¥{Ç^N®UžËzGÝ2^ÃÍ÷_FÇQ|ôòZrN×G5rM«T*ôM½•u! 6¡:kÀ V‰üÜê¿£œÖc@s]ݺÚ4yÙ%dž(tYÞíë î«ÆâÎq®ëµÿÑÎ}|´sŸÓ²ùÃû`4Ôi„B!„B!„hW™óÁ¯U›æ‰S°¢xùy·ÕÅØ•+Œ}élìLˆ&Œ,û)n:y]¥iU¨âõ/Fy¡•¾5F•‘lG›KÿâËüÏ9`ÝÞòž |£ÊH‘£÷òÞaSéìŠPm(qºVNi[êb™ñýy·yÚ 'DZßræ÷>5júš¯d°y(‰†Ž¨°(e³cUÉïÌ+˜C¡Ãõ7a·©Ôhcû¡k3Md"*sŠ­ GN2¶C«°nù ¥¬Ê¢Ú¦òCùç¬ `ÙæšÆ{øÜ(}?”­¯|[ºx0Ãe ¥ì'Á²оûñzÛ3zôhÞ|óÍó¦KJJbøðá•®³Ùμ#c·_<Ïf/%µm£9sæðý÷gîG>ø 7ß|s½Ô­*}úôáý÷ßÇd2Ѿ}{Š‹kþì[ÎÉšsçX¹ÓF‹ áZB!„B!„âRsÁ(«T*]Ù“+ºwq™Y3",„ˆ°:µoˌϿ!7¿ ÒmtëÜž‘C®DuVþà@ú÷¾œvñq̘ý-%ç pÿ\f/ÆFòi¬r…¸Ð˜uZŒšK#€`ýÊ£dœ(`ôMíérE4*$^É€‘­øîÓJÞ¸ðÁcÛå@nVýˆpÏèo+>7‹ äåO+ùáŸ&ùP' ð íX©ÇòjœÿÊaqNÏ}3«—C½hãɬ«4oC¶¯'¸{¬‹;ǹ±®}!„B!„B!ƒYmv{í ‰<ðíôí–TúJÓkUZ^ ~“>¦~NËÃ4áüËk8ƒÌCx>{ ¿-ª²Ì–ºXZèb˜–û:?ίX—bKfsé_uܛʽ2Ý¥¾Z•–x}[âõmá5Š;Óo!ÓžéÑrM£Þ@Û²Ó2•^‹&,MX<º„Ï»¥Ð³å QúNàsgù碯«NVïàu=pÖ¤ *=¨}A× Ìc ý*P, Që ÛôéÓ Çd2ñÒK/5vuD%jÛF‹‹ÅâôwCóòòÂd2Õ)¯œ“5çαr§.µ „B!„B!Ä¥æ‚Pö÷õ¡G׎¨U*ö:Ê–Ideçâíe¢[çDâ[ÅàçëÍðÁýøòÛ….ù›D†3âïàä´“¬Xµž‚ÂbÚĵ ßÝ äšWñÅ7®y…BˆúpxoÓžþ¦-üuS{š´ðgÁ;»ZÂM–2;ÏÞ½˜~Ãâp8¬üù v›£Æù›ÄøW|Þ³õ$?ÏÛ]ñwnv ‡÷žòh}“»Çêb%×¾B!„B!„¸Tx©Ê'Ü\úžšTiš¥êAGz所ÉèT:’mÉ,-ZÌö²m¤ÚŽSTÅŒÂüìÌΟÅüÂ(tÒÎО‡#ZÍ3ϱµt3éö“•n#BQñyuɪóîç1ÛQF¦ ­r½5¯¿Ik}öZ’8j=â´~iÑ¢µÍø¹h;ÊvPàÈ'DÊpï‘ 2!RÅý'1%ëéóÖ¥6¬{Au÷Bìi;QJóQ{‡¢K†¶Í`Ô~‘zÿ—Ò%Só¯ ´¬Œ½œØî?tŒ›¯IëØ´ŽmŽ^§Ãbµ:¥¹ª_Ô*yù…|òå”–•z"2‹…¡zÓ&.†¦QᤤVþ Z!„¨)Gry÷…?ÑhTØíJcW炤R«ÐjˇºW›õÂbÍË)eÁ—u 8õò>3ëGVz‘§ªT#qœÝ9V;¹ö…B!„B!Ä?Ú€lGŽ‚Zåíiº‚§ŸÅ®Øy-çe¾/øÕÿf©FÍ5Þã˜ÿ9ïåþ¯bÝš’?9`ÙÏw‘ 0©L öÊìüÏ*ÝŽAe¬ø\ê(=o]mж´*×ßä{+­õm°(e<}êq,çDG./^Êòâ¥(œùð õëJ×  ÖÒß<Ðe†eO°í]Žmïr8«\Ç©ƒØŽ®Å¤Ñ¡ë6¶¯ÇË¢V´𠨃À‘9U`l¸âLprÉ"È}Îî2lÉP²T^ RëUPPPm ²B!„B!„B!D}»à”¶íÚ[åºí»÷Ó:¶jµ__oNeåT¬óò2Ó²ySþ\¿¹"8ù´u·Ñ§GW¼Ì&:¶kSoÊM¢#yþõ'ˆjÁ_/⣷g7Élâšñ#¹âÊî4m…ÙËDqQ y¹ù¤?É–Û™óé·Uæ7ô üW?úôïI\|Küü°Y­äåppÿaÖþ±‘…ßÿâ±}>f0 ‰mhÙªÁ!øøù Q«ÉH?Ŧu[™ûÙwœ8Ïñoךß8ŠŽ]ÛãàGA~;·îaÞìص-É%ýÓÿÃèqÿ¢¤¸„;®½Ÿ”c©.ižyùQ »’Ô”ÜzÍ}”–”¿HÛŒÏøÀ%ý²õß»,Û¼a“& 0/JЬJ:Å’o’صÙõ©ê8|øòV-9Te9Uåí=¤%½‡´tY>åž%ÜYmÞÚ´oEž:纜î«Ó4Z5=ú7§û•ÍiÞ*v›BA^)§NqpO&ÛÖ§’´-½Êmx¢}ërœÏ%ÁÉB!„B!„âBv—ß=t3v'DŠ¿ÚJOŽ#›íeÛøª`;˶W™×ûïåSmZM³n˜¯y¥0“Â\g§Ö„' ë|=Ú¦Q™PÊ °§nÃò×—ØÓvT¿m7òVFeòÃ|ݧ¨›áÈ:LñWw ”9?+QéÌè:_‡¶eÔѨô^(–"”Ò<¹©ØS6aÙøy­Ë>CÏ»ÐD_ŽÊ'•Ñ•FRœƒ=m;–-_gUèÚ B›0MXTF_[JqŽì£8Nîºg ŽÜ×ûlþOƒ¾à€Ü§Áîú>>w•ÿ×–yS¡ªKE©§±aµqW¢K‹&¼-*­GþIl‡WaÙôJqvýZ·Ýv“'OvY~àÀ† RmÞ_|‘ñãÇS\\ÌÈ‘#9räˆKšiÓ¦1jÔ(’““6lÅÅÅ•l©îŒF##FŒ`РA´mÛ–   ¬V+999$%%±råJæÍ›WiÞAƒ1~üxÚ·oÉd"55•+V0sæL²²²\Ò9’Ñ£GÓ¦MüýýIIIaùòåüôÓO<ðÀôîÝ»ÝÎâÅ‹™:uªË¾^wÝu\~ùå´nÝšˆˆ¼¼¼())áØ±c,]º”Ù³gSPàú\Õ6ò„x€^½zF@@z½ž¬¬,6oÞÌgŸ}ÆÖ­[]ò´jÕŠ%K–¸,ß¹Óuâµk×rÓM7Uüí©ý­mû\{íµtèÐøøxBCCñóóC£ÑpòäIV¯^ÍŒ3HIñ\wýõ×óÒK/qäÈXmÚ^½z1{ölÒÓÓéÙ³'àÞ±r§Î6`ÀHLL &“‰ŒŒ þüóO>øàRS]ß×òw®ýºªËµîŸW*•ŠáÇ3vìXÚµk‡¯¯/eeedeeqøða¶oßÎüùó9vÌõ;¥B!„B!„é¢P®ŽÅr&ðÍzN bL³&¨T*’ö¹¼Øö€ïÇê•ëÙ½£êÀ?_Þ›õ:Íbœëäãë¯7M¢#ÑhÔU(·mßšç^{œˆ¨p§å:“ÙDxd(ÅE% PþÏ#wâåí:äpTÓ¢šFpÕ¿úòà]“Iª"Èrâ·rã㜖Ðw`/ú èÉôÿû€¿þÙiý;¯Ï ±s1±Íxá'¹ë†±ZÎÌ Ýw@/ »‡Caêä7+‚“/vÝ{_F|»VNËB‚é?¸7ý®º‚מ›E?.«2ÿ‘œþ `àÐ~\9¨7ÿ7yË­¬¶üÚžÏî¸7± ^:çnÊK§¥U€/­|¹ºe3žX³™}9•¿ÜÒ="„6~NËBLF®lAߨp^ß¼‹ÅG»äóÕëx·_wšùz;-÷ÑëðÑëˆò6£V©* `u'ï¹ûÞ*À€Úİ:-=ÙUTkT*ì”Àˆsú -ÂÍ&ÂÍ&º…SdµUd\•Š'/KäªèH§åÑ>^Dû´à_Í›ðäšÍÕ ×Õ]íZsC›§eF}¢ÂéÎ[[w3ÿP²K>OµQCkÕ.„ÿLéCp¸k_îEp¸ñÃù}ÑA•yåð8&<Ö£ÊõF“–¨f~D5ócÞG[ëü5têÑ„N=šðé›ëùuÁþz«ÿÅ¢±Îoz©Íâ–ët`4yîM|Ç0š´ð¯6@YÚW!„B!„Bˆóëeº‚¶úvNËB5a\eÌóULÍ~žŸ çWš7@@¶½òÀ ªüÛ{~j6•n¬qp2@¡RXñ¹©¶›ùË%M ºüwÁt{Õ¿zÒ½~ÿŨ2rÒv‚/ j€ÚÁÐ €$Ë'WOÕ{z’G‚“”Âò7U&ÿó¦U›ËÛÉQàÚN†ÞÿAßíV§e*sàß3>_Iéo¯aÝVù3twòVF¥÷ÂtõÛ¨›¡¤SòÃý®ÁÉ&?Ì×~Œ:¨…ór£/*£/jÿ¦¨Ôêz PÖ´è…&<Á¹\ŸP´­¯BÛj¥Ë^ºë'×ýÒ™0Žxm‹ž.ËU~&Ô~‘Т'Ji!–-s=^ïÓ|îÓðòÏùoBÙúÊÓi[‚.¾üsÑlP¬•§«j Æ!Ï¡‹w¤W6Cxºv£(ùqR‚ß/4/½ô]»v¥U«V¼óÎ;Œ3Æé]m™X IDATÁƒ3jÔ(<òˆÇƒ“;vìÈ[o½EÓ¦ÎÏÂu:f³™¨¨(ŠŠŠ\‚5 ¯¿þ:£FrZCLL ÿþ÷¿™0a[¶8?˺뮻ˆ¯ø;66–ØØXî¹ç§t×]wÁÁÁLœ8ÑiùO<Ó2oooHHHছnb„ •ˆ6¦~ýú‘˜˜è´,<<œaÆ1tèPžzê)¾ý¶æýd}«kû<ùä“.mÍøñã1b·Ür Û·W=Km¤§—ßÓÏ“‚ƒƒ8q¢ŠQIçÎþnÒ¤ ×_=ÇgüøñìÙ³ÇãeÖõÚwW]¯wÎ+³ÙÌ{ï½GŸ>}\–›Ífš6mJß¾}ÉÏÏç³Ï>ss…B!„B!„ð¬‹>@¹mëò@ÉÌSÙäå;?ð .ÿa·´´ŒÜ¿× îß‹fM"ùå·Õ$?AzÆ)ýÑ¨ÕØž¸âôwXDHµ·L¼žf1M±Z¬Ì|g6ëVo"7;^GXx­ÛÆR\TRiÞ–­Z0}Æÿaö2á°;X¶h%«_OÚñ¨TjüühסM½”þþë~úv19Ùy˜Í&;'pëÝãñòöbòÿ=Ì£&¢(Î#rßpû¿+‚“·lÜÁÌw>'5åM›Eqσ·Ó®c<<1‘]Û÷p`AK™…ç}…™óÞ&¶u ÷?zoN}€€@ò_æ}þ=;·:ÿ~äP2. @Ÿþ=xöÕÇÞç:JÎ dvØ=wNx¢ÜÏ>˜ƒÍf#íøI ŠÐê´Ä'´âîo£Y‹¦<ôÔ½¬^¹ž¼ÜüJó[­6~úv1«~[KA~!qmZrǽ7“/>È¡G9´ßuÄãÓj{>{ÂïÇOòÝ£X­˜µZzD„pm« ¼zEWîX¾š¬Ò2—|Ÿí>€MQH+*¦ÈjC«RÑ&л۷&ÚÇ›;%°:-|‹ó“ê[âciæëÕáàã]ûY2“Ü2 :µšP³‘Ö~W1s³;yÏj6:ýf6U |{B\Epòžì\¾Þ„ä‚"Ô@¨ÙÄsÝ;bÐhÎ[nmMhת"8yEJ §Àj¥]?·µÃß çå^]¸}ùj2Ï:ÇæpÕKèÆ”Ë;0â§_)µÛÊp(®£øoSœ¼53‹™»ö“VXL/înßšvAÜß±-»²r9xεà©6jH± !<ýö tºêÛðèlòsÏçÒâ3ç¶Þ åï1;p8¬û¹Ù±Ùœû¾fçLa~™' ÏŸ°Üþpw—àäsegWÌ2][7þç2¶¬=Nvæ™+Î>Î*• ½¡æ×ÚÙyÏž¥×nw`³ºÞg͸ënûº£®ç†;ÇÊ`Ôòä› oâܾ¥%6T*ªœ™¹6Î×¾ }œ…B!„B!„hL3ò>ĦØHµ§ÐQ€V¥¥­¾ÿõŸDs] xŠ?Š'Ïáúü"P]þœÖ¢”¡W°(5ûMv¸WyQ¶#‹7BÞ¢•® Aš Š”"v—í䛂y¬«d†äbGI–=ÄëÛr»ïV/£ÀqæÙq7cwšëZ`U¬,+vÄù°õ½Rºp¥©?/¿ÀÀã})QœŸÉÚjýØBÃ`¯ò ÅóÞâXΓ£œ·Ú›8]+®õÏ•æ”*¥¼ûfòºCeðF‡¾Óuhãú£XK)ûã-mßQ˜ñw9> Ñ½êã¨2—Ÿ;ÊßyNÓw»¥"ÀØžòe«ßÇ‘{u@4†>÷£‰LÄxå#ØÓ¶ãÈØï±¼•ÖÑè‹iì;hÂp䟠䛉8òOº¤Ów¿³<8Ùn¡lõØŽ¬A)έµO8š°6(ÏržfY;6y©(e… Ö¢ o‹¡Ïý¨›cð8¶C ”8m¸ê©ŠàdëÞ¥Øvý„£0•րʿ ¦½jÏ?s<›y xßVþ¹h}SuZýYñr¥ÕÃíq†+î«N¶î]ŠuÇ(eùh";`èy*S¦«ß¢höu(çÙZý›={6sçž *ôÑG¹í¶Ûj”·¬¬Œû￟ùóçÏäÉ“™2e AAAL:€?þ˜Í›7{´ÞmÚ´aöìÙxyya·ÛY°`+V¬ 99•JEPP:uªtFÓG}´"xuáÂ…Ì›7üü|:wîÌ<@`` 3gÎdذaœ<éz O›6Y³fѽ{wf̘À_|ÁÛo¿M¿~ýxã78p qqq8pÀ%ÿ’%Køì³ÏÈËËÃÇLJ~ýúqçwÂ'Ÿ|ÂðáÃÉÈ8sn¸ÓFžðöÛoc³ÙHNN¦  NGbb"=ö-[¶äùçŸgùòåäæž¹ï8p€¶mÛå3¿õVù½£K—.””8ßCíç¼àîþºÛ¾¿üò _}õYYYxyyѵkWþûßÿâããÃo¼Á Aƒ\Þqª‹Óåûúú¢Óé°Z«¾žP>»Îî+wÚèl6l`Μ9¤¤¤ ( ={öäþûïÇÇLJW_}•#FÔ¨>5åε﮺\ g«ËyõÒK/U'/\¸ï¾ûŽôôt Íš5cúôéhêá!„B!þŸ½û¢Z8þÝ^Ò{%´ ½ISA¯4ŸØ.*®×rm×Ž×‚Š êÅzm`GQéEšô%„ôžÝdËüþX²É’BÊ&}?Ïããf朙3sffyöÌ{^!„Bo8¯”Û¶‰¦O׬¥KV­¯¶ÞßÏ•e²ôtP\û¸†îÀè+/åÝçº×iÔjÌfEÅ%^oçÊÅ¿Ó9¡#ù…lý£î6{ôvý0¼äו|õÙë²2²Ù³s_­užvfVkÿc;·í©VfÓzïU•¼÷ ›7Tþø»kû^ŠŠŠyø©{ˆkK·ž í aÊ]7°fùz¦=ô"ÎÓAây¹ù<0õI¾úåCBÃC˜ô÷ñLò5ýI9ʬW>àái÷0nÒÕlÝ´“UK×òÈî% ȟÇŽòÑ»_Tk§¢(”—¹^°Û+`//·¹—7oìwÃ-[»j#GçËŸÞGoÐ3ðÂ~µfBþüïùtvåÀÅÁý‡Ù¼a;Ÿýð~þ¾L¹ëFž|`z­ûoèõì ò Ø]%oRn>[2rxcØ‚ znîÏÌm{«ÕÛx*«Ú²u'39VXÂçW^Œ^£f`dKô(Ó#Ô5«ÿÒc'ùúŒ`í,‹•½9µ 7¥nU+O¤Ó)ЄWXnc[VíÂÍF®ëì Öݞɓë·á¨2˜q¨ »S¡q€õa61©³kÆ÷E©'˜±¥r†çCù…lÏÌåãË/Ä_¯ã–®ñ¼ºµòy¤å§ƒð«¶Õætº—×&ÔdäÖ®ø=-ƒ§7nw1ç••óÐï›™så0BM&ujÇ ›=g%÷VµµZÅÝO]äœ|poKL&õ`.V‹ “IG›ŽAÕ‚%ïW9kï_]CDŒk¶Þ=[Ò™ñð²·eÏÖtŽìÏ¡¨°Œò2F“–ðh?ì¶Ú*[’N¯¡÷ ÷ßûvdðá+ÈÎ(F«UãO×>øøκ­• ²ôÇdÆMîÁÀKÚ 7hxI[}Wù]Võ<·æ¥OFÕ»ÍUë~¶üFw?¯[z„Ù/VÉ®¶ºÞèߦ¨ïµÑ”suù5]<‚““¶Ÿâ£W7rê„k‚wçM$(Ô\¯m5¶[û< !„B!„BÑ’ÖY~¯¶le©¶#|ý#z•Á¦ kÌt¡àžÀû¹'ð~ŠœE(Of…e)¿ϯø ¢ ¥Î5îp¥Ù3#©^¥ç"ÓP.2 壂÷y¿à½jõßÊwÃ? Jŧ‘sx7ÿm~·¬¦¿a/„¾ Àù¯qÊPAqPÛ©œÀÔ¦”×;°úL“ýoEš“ö“üV²ð¬åýÔ~¬ˆ]ë±ìí ÿÉy’åÉjC}¨ ~øÞã9¦èÌ>„eÑÓõ Ô­/¥èt•J…Ú'g¡«\ÁÁ½(û}Ž´®"~á®vVö“Ê7Ãà;°\‰å—GÝÙ¥¹X¾¿Ÿ)óPù†¡ïw#ÖEÿñJÝš¨|Ã0O˜…:4gîQ,?Ü]cp2Tf£¶íûò-žcÖŽ¢Ìfͬk?R}ŒÁž²gn*>·~ZÚvC°í[ä^¯ïRp»ó{¬Ëfxn c\õ,Ð|RÆ¡àãz}ËR(œYwymœëÿŽtpÔ]Ö›ÔþQèû߀mÏÏX?ç^çÌ<€ãØ|&ÏEeôÇ0øN¬Kjo ƒÁPc@¡¢(ŽÁxXµl]ˆ59xð Ó§OgúôéÜxãlذE‹ñâ‹/Äxã7w u˜>}:>>>X,n½õV6o®þ¾Äš5kª-‹‰‰aÊ”)|ÿý÷<úè£îuIIIlܸ‘ È}÷ÝÇO[C5öÞ÷†ÆÜ U5ôºêÚµ«;Ø~Μ9î *ìÙ³‡×^{M”…B!„B!Ä9KÝÚ h¬à nœ8 • öî?DRrJµ2zËé̪Fce@’éôçÒ*³Aêõºfië—ËS¾À{3?æŽëï¯5³m…ü<×ÈYמ]¬; dUñ]:н—+`ûÓÙsk Nn K¬ÄétvNìè±îò«/EoÐc³Ù™ùâ{îàä V‹•¾ú€õ«qûó¿[Ȫ¥®v{ö_Üz×\té`ìv;ÓŸx [yýf2?ß?šFÆ)×ìºÑm¢j-g¯!3lVF6?}ãH¸ð’÷Ê™z=7—Ù¹,ÕƒÙòO‹'âßÀçBSêV5gÿažÞ°Ù»÷sçòuÔÀ^qüNEáõm{=~›Óm£Q«TØ ÿK:TmýÑ¢bu šˆ‹nPÕåò¸hô56§“7¶ï­–aÙjw0/%€gdüïõQKé3$Ö ðÇÊ£UÂñ#ù¬_v„ÍkŽ5k[¾x{3_½¿_íeɼýü¾>\sÝÕ º¨?‘Qáb)µpâØIü\_ƒ¾ÁÛݵݕX£ÑߥC™ºr=7§ßOf0ºCLZ üI>ãÚðÑi¹¦c[F†a6hÐc±;H+.u¦j˜aôûƒ©\J{_æŒÆÏ‡±(5õȰޔºgZVû UUdÞŸW@Öé¬ð-¡{ˆk¿‡ ŠÈ(­žé`Cz£Ú·Á¨ÑàÏþî߆êuúx“róɱÖ<£oj¡kp/Р'Рw%ƒwû¨%tëéñ÷·oGq¶LzkxýËqDÅÕ<ˆß5”¹k&{,›õì6,OÀZjãè¡<ÚÆ»®‘>ƒcyíËq¬\p+’y²¨Qm²”ØÈL+v·+0Ä{/eµ–¦œçÖÒ¦Cûóþ4.sÉ™þŒý+„B!„B!„7øª}™è;‰!¦‹ˆÒD¤ ¦T)å„í§£ *cu̺ÏýYš}"£}Ç1Þw1ÚXÞ {kÓÇaU*Ç55îÏ/ç¾è±½Ýe;¹'óü³ˆu |¯eGYõŒ†à§ö§ÔYÂÖ?ègìA嚘÷ÿ)³­13´7]å3 ½JO¹RƯ%¿Ô«N±³˜ÁÇûᯠ®=Wù\Í8Ÿñ\n¾’m,wdÜB¹âÝÀ?¥¬˜¢7¡2ú£n‡®ëßÐõ‡¶Ë˜c)ýêvpxg¿JAª°Î¨ý£pœÜ…&º'*£ëwYm»!”áʼªòwMĬäW(kbûàHßR’]ãö9‡]õMA¨LA(–¼&×­J‘ˆ¾ÿM¨L8ŽnÂ2ÿa[iÇlÛöÚvƒP‡tÀgÊØv~mïœyÍ;á,€Êà‹®÷ÿ¡m7•jsŠ­gÞqw°´Jë9iµ&¢+ެƒ(¥5Ý7·ò- ï*„¼¹ÿ{}bôê:Ó¶‡àÓ™˜sû‘¦·³";¶#ëP­Aêöÿ£ë1•Έ&¼3ŽSIMßñ9à‰'ž gÏžÄÄÄð¯ý €·ß~›¤$ïßÀÝŸøá‡ÕíÛ×uï'''» Ï´bÅ &Mš„Éd¢k×®ìÚuö¬æÞxÇhéÒ¥\ýõ˜ÍfÙ½{w“·é ~~~ÜtÓM 6Œ˜˜‚ƒƒ)--åèÑ£¹ÆéŒÆš¿÷[Zsõ/@ii)™™™DFFìµ6?~œÄÄDbbbضm}úô! Àõ<6l/¾èú·OLL p~(““CHHaaÕ'o¬¦ÜûÞÐ÷B]×U®÷ýöïßONNŽwB!„B!„BˆtÞ(‡qÛMð÷ó!+'O¿ú‘òZ2ä–Û\ƒ¥¦Ó? Úþ7÷G2¦*?Ö¶–¶iýVž|ày~êB‚ùû“øû“سcß~ù«—­«–i 4Ü5SkQa1¹9-ûì3"#='Ï6Á”-•âlš»-§ß0 g)YÇŽs(\~ùåO›6m8~ü8±±®Öù  P\\LHH&“ÉkÛlʽßTÍy/Ôv]U=§¥Õòe'„B!„B!Ä9NÝÚ hˆàÀwprvNù=Eŵü¹²ašMµÏZX±ÎátRZKÐÖ°våFþoä-¼ðäëìÙáÊdÛ½w"Ͻö8ŸÏû/ñ]:T¯tú·Oå ¬«P[›T*×%èt8±•ÛÎúŸN_óˆ¡Z­bâMcÝ›}LÜò¼ ­H¥RñükOJYY9³^ù€‰WÞÌð~c9d"S®½—ÌSYÞ¾Ýnw>_²³êÔ•0U•tðì >„™Œ”9¼³s×.\ňy‹ùÛü¥Ü¾l™¥ug^{2ƒI Wñâæ]ìÉq½„Ð=$ˆgõáÓË/">À¯Yê6FűëÕ ¤W½5:€â.]ÏËÅ[&õé;›ÓyÖÿj:/-ÝGÞb/wž7÷gc•––SZRù_™µòÙät*ëJKʱÛ<_ÜI?VÈãSðÛwû°”xN<Ò¥g8¿4œ‡g G£mØýRõý seà½)šzž[šÝîð¸öÍ>ú:J7ÜŸ­…B!„B!„h *f„¾N¸&‚2¥Œ™y¯2úäH†ïÏ%'†pÓ©Id8jʫˊÒe$—ï`€qǺª‚Ôþ5ÖO·»7Â4žYú¢´QÜê;ÿÉy‚t»+(ɉ“å¥K™|êzÙ¢Wé¹=`j£Ú^Ášz\™U—•,iÒ¶Ö[Ö²»l'ƒŒCšÜ¶ú²Yã¤+ˤ¦Ý`¯m×™› €: mçá(–<Ê7ºµ/­•9ÅfõÈJëþÝVqº2:Ÿí?Þ+u=ÎKꔲ"P©0 mçõ:nû¡Õ8ë¢ÿTž×螘FÏÀçæoP‡u®ï)¬'¦Ñ3\ÁÉö2ÊVΤäÃQ½9˜âYÃ(ùâF”¢Œk*öÓ“¨[w"Oë2È{”rPCðÛ ª¹ìéGšHP™[®•ã¤îq»š¨Õjn¹å÷ß>>>Ü{ï½Í²¯Šû·1ïÀ4´nK¾g£Óy)RÞKT*ï¾û.‘‘‘X­V¦OŸÎÅ_LBB½zõbôèѤ§·ÞÄ5iîþmŽëáСCîä‘#G’››Ë;ï¼Àˆ#0„††b±XΛ`ÕŠI¼9ÆÚ”{¿©ûmÎ{¡¶ã±Z]ï/iµç]ž!„B!„B!€ó(ƒ²Á çï“ÆàïçCn^}ùCÁəٹýýÈ/¬>CuD¸k¦ÚÜÜ|5d%nM6›ß~YÎo¿,'2:‚Qã¯`Ò߯¡m‡6¼ýñ &_sÙY•Yos³]Av~þ¾úS_ØZM¯·ì¬:%t`Å’5<ûè+ÞÎ-So ß€^XJ-,ÿm £Æ_É ·þ×naçÖ=uÖ­ðÔ’1I Ýo§„Ž´ëÀËÿy“¥ W¹×ÙlvîO¡¤¤ñ%#"+gŒÍÍñBšÛZeò\kå,úýiçï À_Fà  IDAT+[÷°ìXå̸6§“ƒù…”T È®ÍédñÑ4M#ÒÇÄÕíb¹¶S{Úúûòæ°Ü²ôw²-e^¯ÛP¹ee€áæÚ'c¨ÍéÄ©(¨U*|t ûJȶ–DúÔ>n¤¹r]Õ>ªªj¶bU=r-Tìwå‰tžûcg½Û{¦–죦ÈË©œ<Ãä£#2ÖŸS'þ|÷ìjÁgóŒ€jµºîO»s¡Çß½Æðè«®¬‡÷çðô?ÖTÍC~®…Ïgmæ«ÙÛè1 Š—´cÀ°8 F×5ÞwH,Wý_" ¾ÚÛC©‡Ãóßg;^oihÿzã<7UCΕ¢@vf a‘®g{ÇÄPTjU‹ì·Ö}$„B!„B!DKê¢O ƒÎ5YòôÜgø­¤ò÷B›b#¹|?%Îhd ã1ûQºèÑ„x,ÏvTNÄ¥!ËQ}b^íéô§vÅsœgñB´*-ÙŽ,¶—m«V¯T)廢¯y›„RÜø‰¨«ÒDtA⺭KžÇ¶ï7÷:ÅaCÉLF)/©ñ'n¥à$Dvk† é†+ÛùO@ÐË ƒà™s'(žsÓb«H<«ã…`YÚ2í«¸®T§îk¢>-@)iÙ  õQ1æÑРÂ{ï½—ÁƒSZZÊ‚ ¸öÚk¹óÎ;Y½z5›6mòj³²\÷E@@AAAäåÕÿ=†ÌÌLºvíêÎV[“èèÊþ«ØWm¶oßNIII{ë«";,@NNN­åÛGUëÖG×®]‰àñÇççŸv¯³Ùl$%%Q\\|Öí8«¼sÕ”6×§®·û·%ýê'ŠŠKÎZçÈÑî:WÏ8¬V«éÒ±-)©Ç½Ûà3 ½l×ß<È舳®Á©“|ôÎÜyÃØívüü}¹j¬ç¬Ì»¶%®‘¯}Y“ÛÜvowµ¹ÿ > ˆØw@OnžêÊ–üʳoóêso³}ó.ÔjO½ð0>¾>uÖ¯˜‰8kYojè~ƒC*_8˜|Øëí2l€«]+÷×½ý¦^ÏÞ2$ÊTíPTN@d4¸?òR þ© ï=È?V¬ÇîTðÓëÙ6¶Yë^ÁuÛ× °/7€ø@ÿF)çœnççÛ z»OOŠÐ!ÀsÍm¼0ÚÕGV»ƒC5÷…µJb}‚¤+öÛ/<ƒÆ;3¸7¥›[ò.ÏY쯽½w£&S(³:ÜŸCÂZn yKI¹Çß¡ »ÎJU%ÈÕfs°mÝ þûÂZ¸îGr³*'qè3¸yú·¸Ð3¨=<ªe²q·Vÿ6ECÏUÒöÊ{!4Ò‡ëîèƒNçzÄ´ p 7§óñ< !„B!„BÑPÁU‡+²{S¤&€"§çäÒûË÷¹?_hº¨Æºu ¤ÚR=–k‚(U,gVq«XgnÆ4«ÃÌÃØ^¶ «b=K鳋ӺƲ œMÞVC¨ƒ\“&+ïíבãTD£Mü¶}¿¡eà8¹ Mt/´m]ã•ÁÌîºi® kµm€Ö@C4¥î™œi”~}»+²JéªçÑvnظ¼³ð$eëþK霛ÁiGeôG×mt“ÚU•ÊìþìÈ<Рºö£ ŒE‰×ÚÔXÖÕPø¶ë³®;øý³z™ò=à8ÌÒg2-öLÅu¥ ÷D®JÛqŠÍÒà¾h ‹ë™èë[ÿ±»AƒqÏ=÷ðÄOðä“O²qãFÔj5¯½ö~~ÞÛ²e àzæšk®iPÝ­[·Pk눮wnJKKIJJªs{/½ô·Þz+«V­jP;j2|¸ë»Âáp°íß³é£ ee®q8³ùìßy¡¡¡îÏg;u©h/Шk¡!Çëíþm ÊmÚ´aìØ±ÌŸ?Ÿôôt¶mÛF¿~ý¸ð 8p îgFc¯¦öQKiʽ¦Ö¸jݺuÄÅÅqùå—·Ø~…B!„B!„ð–ó"@96:’žÝ\³ô~ÿËRròòëU¯¸¤Ôx|ñà~Õ`_Ð×;÷${±Åžn¸u"/¼ñÿ|è6>úê-ýë,¯ÕÖ`s$å(…§1ƒ<·³ïw`é÷üž}º5±åÍï·_–c·Û àþÇïBÓÀ`Cÿ?ž~éÔj æ-fÙ¢Õ8 /N›Ii‰…ÈèpþõØÔ:·‘qªr¦ÔCú6ê8£¡ûÍÍ©¼î»ywÖên=3a$‹¬À^Gvá†^ÏÞ UUTEú˜¸¢­kÆÛõ'3±:*ƒÆòªdêM høþêÈây¤°˜¢rWÀe@ AõM©[Õõ]:0}p_îê™ÀÇà¯×ÕZvÅqר»F¥âæÄøjëÕ*U­ÎÃb#1jë.=v‡¢ Q©˜Ò­Sµõíý}¹".Æ]Ö^K¦ÓÌÒÊA° "Bk,SÕâ£iØ =ÿêÝM£u½ÕG-eËïÇɯ’EyÐðv<õÖ• ¾¬Ñq‡™‰jãObïF]× ¶æ¯öœŒÊ‰=bÚ2îï=ˆŠó',Ê—ønaLº³í»„ÔX·)r²J±Z*Ÿ)#Æu¦× B#|èÔ-Œë¦ö%(Ô;/ƒi´jÞýa"·ÿ{0}†ÄjF§Ó`4i 3c·WÃ7Wfã‚\ ¥U‚²‡îD¯1„Eú’Ð3œë½x¼UµVÿ6ECÏÕ’yû=2&¾±;Ÿ,¾ž]Ï«_ŒÅǯùïÙóñ< !„B!„BÑP¹ŽÊlŽÝôݽºí^†Þt3ô`gÙuÙŽlv—¹‚þþf…Iå99jm.6 `µe¥Çº4{±ÚXô5gŸ»Ü|àÊàÜÔ¨é©ï À®3Ž­1†™.¥³¾ [­››¼½úÒÆsgÐuœØêµí:sSÁiGí….q$Îü®@_À¶o¨TèÜâ*›}È£®-i+˜×„qø# ®ÿxVSêÖD±RúÝ]8NlµÓߦ£‰é]sauíãþΜÃ(V×ä¾ÞÌT­”æº?k"»6¨®mß"w¦_ãUÏ¢ë>•O*ƒš¨.}ÔµY6‡’¹®@eŸÁ0ðŒNW]ø?5¦‡ö2û¾…àt€Zƒ~Hõ÷Ô!ÐuýÛ鲋ÀYûø{k©ÈAXXØYËòÆo V«ùæ›oøå—_p:<òÈ#”””ÃÓO?íÕ6îÚµË$øÀпÿz×ýé§Ÿp8h4î¿ÿþjë;uêä|œ?~ïH4–NWý~‰uïwùòå£gjhUuêÔ)¢¢¢ˆŠª9ˆ¾Bvve†ïž={6h?UUÍ.}ñÅ7º~}Ž÷\è߆JIIÁn·Ø1c8vìÛ·o\mT©TLêzž$'×ý[c¯¦öQKiʽ¦Ö¸jþüùdffðúë¯3qâDÂÂÂð÷÷§OŸ>L›6­Æç‰B!„B!„çŠæO5çC÷àXZ:GOœÄh¬yfcEQ(+óÌÔ¸tÕ:´kC ¿·Ý8žåk6R\b¡K|;.½Ø5zµÿàaŽ¥¥7[û/»j˜ûs@?ýöbÅâßk-ÿúìéØí6–ÿ¶†ý{›“V«%2:œ1ÿwÁ!A$íöœ1SQ^}n³þ÷2F“‘YŸ¼ÌŠ%kX¿zéi8Ì>f:Ä·%08€g}Þ<ÜYÙ|öÁ×ÜöÏ›5þJú\ГŸ¾ý•£GN›‹Þ '*:‚^ýº3ó…÷pT Bxð‰Ìñ£i¼5c¶{ù©“™Ì~ó<øä?¹jÌ–þº’Ͷ×؆cGŽ“—›OPp wÝ?FCÊ#¨T*Úuˆ£Mûþ;ó¯{C÷{(9…S'3‰Œç¾G§b0ضi'ù…èt:ƒ0šÎž=·K·Nôê×¢‚"üütQ&Þ8^G~^ÿ›=·Îú ½ž½áï‰ 6Xw2ƒb›NAþÜœY«ÅîTø_ÒAò‡ Š8Uj!ÒlâÞÞ‰´¶eæPPVŽ^£&P¯ÇTG0ük_€Í©°âx:ûs È++C«Va61¦Cœ;CóþÜê“%4¥nU—µ© 0èéÊÊ5?§R ‹Yzì$—ÇE3ª}|u:~M=Aq¹~Œë‡¹Ž‰¥¦14&’£7†à‹})¤—”¢×h7QלQjá›G¸¡KF¶Á¤Õ°àðqŠmvº…291­ZEa¹O÷ªqÇŠJÈ++'È ç=º Q«HÉ/B¥‚vþ¾´ñõaöîʸ,‹•Ï÷bJ·N\Ý>–ÞaÁÌ?|ŒcEÅäZËÑ«ÕDú˜èÌÛ÷âP<£½ÕG-ÅVîàý—×óÈŒáîìÀ‰½#Hì]só›Nrüp^µåIÛOÑ÷ÂʬÁ×ÞчkïèãQ&ûT G’sάÚ$ŠSaëÚc\xyü<úŠg6};2ÈË.­©zƒÄ¶ 0ÄÄðÑ>ºzÐ|U»·œ¬s}c) l]{‚‹¯<}¼AF}Õóx“¼t¼Ûl¥þmІž«#É9|óáv®›Z9©‡F«ÆTKP~s8ϳB!„B!„ u <™t{:QÚ( z£ÊÈæ²Mä;òÑ«tj‚1ž<\Õ‹¡¯çÈeKÙfÒí'±)6‚5! 6a’ßõ¨QSì,æ‡âïªÕý¨ðÞ {—Hmo†¿ÃÛyopÂ~‚NúN<ü´'/Krgÿudìó¨ªeR¶ñc C¦¢ë1M›~Øv~37¥$´zÔþÑhbû`]þ²+pÔ uke/ÃòÓ˜'}€:¬3¦±¯S:÷œùÇ=Š™'¾ƒâ°aO^ŠãÔ^”’\Ðh]AÚ=ÇWï©==«Õ82à,LGíå (ÖqߌbÉ•)tµŒ)Û˰,xÓø·Qé}0^éÝ`ÓÆ*xôß‚:ž†¬‰P5YzÉ·`ú>àsè:¹–Ù èx¿MÎÂS”oùý€›Ñu…JoƶëG”²"4Q=Ѻ ÔZk!e>ò~¼`óf×Ä*•Š÷Þ{Y³fQVVFûöí‰åµ×^ó(ÿì³ÏΑ#GxþùçÝËÓÒÒxå•WxöÙg?~<óçÏgíÚµ^i£¢(<õÔSÌ;³ÙÌܹsY¸p!+V¬àøñã8|}}éܹ3ÁÁÁÌœ9Ó]÷äÉ“|ôÑGL:•ñãÇc6›ùæ›o(,,¤OŸ>Ü}÷ÝhµZòóó™5k–WÚ{¦»ï¾›ÐÐP–/_Naa!ݺuãž{îÁÇÇ»ÝÎ[o½Ugý†öQUÛ¶mpg·~çwp:ÄÅÅËo¼á.»oß>ÒÒÒˆ‰‰aÚ´i˜L&6lØ@nn.ƒàà`L¦Ú¿÷+>|˜œœBBBxôÑGÑh4î@ÛN:Ñ¡Cf̘á•ã=ú·¡l6ÉÉÉtëÖÀÀ@>ýôS÷º_ý•iÓ¦¹3øîÞ]÷¿#{m4µZJSîý3µÆ½ÐPV«•û￟?þ^~ùe¯ïC!„B!„Bˆæt^(·kãÊ’Å´‡þQk¹â’R^zóCe'NžbÁâUŒ¾òb¢"˜œõ9üç>‚üù÷Ó÷z¬/È/t {ó\5d¿å§?ñ¯¼û,¾~><ôÔÝ nÀ%#.ä’V[ž›“Ç£÷jI;7¦ñÚã+™úøü랈 m|PÊ+äòkºãWkݘ¶ Ï8^ß}¼“^cðõ¯y‚‘˜vìü#­Æu ]Ïöïß™Á¯_'5yµùþ“ô]k_yëx«jÍþmІž«Ÿçìáè¡®,ÊNGÍÛ›ê|=ÏB!„B!„B4„'ÿÉy‚7ÃÞÁOíÇ£ÁOÖ»®5š.Ƭ2s­ßõ5–)pæóXöÙš+¬·¬å£‚÷¹=`*} ýù4rŽÇz‹bá‘ìÉwzN2Zâ,á‰ìGy%l&áš^­9°c•e_Í©q]SµÓµw>a?V¯òté¤ë L©±L¦#“‡³î§ÈYTãúÆP·CÖ }Xí}*Å™X~z¥Ì{ûpžJBÞ'ö½ *÷g-Ä~h%Ú.W€¢àÌØ_­nù†PiôèÜŒ:0ðê3Ê·|‰3ï˜×êÖF)+¦tÞýøLžƒÊ„i쫔̹ì§Ç¬UjÔ‘ÝQéŒhÛ ®u;ö”5Ø“—ÕkŸõk˜뢧1]ó&*ƒÆ5¨ºãÄ6JçLÆpÑÝhÛëww¥¬û¡Uè¯:…ºy~‡¯‰³ ß‚ÀçA¾“¡èýª ÷~z ƒ@ßÏõ_s+[÷*¿pt‰W¡í4m§áëk!–ïG)ÎlþÆ4Bjj*?ÿü3cÆŒ¡oß¾üïÿs¯ËËËóp¼ä’K5jN§“ÿûßÕ²þÎ;— &гgOž}öY®¸â ¯¼K°sçN¦L™Âo¼ADD£GfôèÑÕÊU R|ýõ׉ŒŒdìØ±Œ9’‘#Gz¬/((àŽ;î ##Ã+m=“N§ã¦›n⦛nòXîp8xä‘GØ¿¿ú³®ª†ôÑ™’““Y¶l#FŒ`РA 4È£nÕ L§ÓÉC=ÄÇŒ¿¿?Ï=÷\CÕ½™3gò /Ä /¼à±>//¯Îà׆ok÷ocìÞ½›nݺát:™7¯rüü|–,YÂÕW_¢(ìÝ»·Îí4öÚhjµ¤¦ÜûUµÆ½Ðüñ×\s ?ü0C‡E¯w}ÿ±téRÆŽ‹F£AQZîûW!„B!„Bˆú:/”Mæ¦Í>øÇÖ]ddæpñà¾ÄÅF£×éÈ/(dWÒ~ß°•r›ÍK-­Ù{¯LxDѱ‘Ìÿ~!{v¬¢(®î|‚-w4¸Þ™Eჷ?eÙ¢U\síÕôГðˆPô=Å…%=rœm›wQ_讣Õj¹çßw°ð§%5žS§Sá¿o|ÂÛÏ ¶m c&^Åß,¨Và—~£ ¿ñצS—øúú`±X8”|„5Ë×£R©PÅë窾û­°sÛ&ÿoKß= ‹Å?ÀÒ ù…äfçq,õ›Öo­¶¯÷f~BÿA½iß±-a¡˜LFÊÊÊ8q,µ+7ðí—?Q\TR­^µí4àzö–ÅGÓЪÕô &À § ¬œY¹Ìٟ¡‚š_ŒØ•Ç-KÖ2!¾-}ÂB3ñ×ë(µÙ),·‘k-ãhQ1›Î°V…ÇÖnehLÝB 1 4èQPȵ–‘RPÄŠãé,?žŽóŒþ›R÷LïíÚO¸ÉH”™ŸcoNÝÙ|KívþµêÆÇ·åЏâü|P© ¥ ˆÅGÓ¸§W":uíÁõ¯nÝÍÎì\FµoC‡_ÌZ-6§“‚2'KJ9WÀæŒêÁèEaú¦¬I;Řq$`Ôj8Uba}z&_%&ïŒÌö5Ypä8ååŒïØ–ø@|uZ,v‡ ù=-ž¯9(À‡{°üx:c;ÄÑ7<˜0“ ½FMq¹cE%lËÊ¡ ÜsßÞ죖¶}à î»vCGv¤÷Àââƒð 0 Ók(³ØÉÉ,ápriG j¬o-µñÌ?qÍ-½èÑ?Šp4Z%…åäe—²W&Wm–¶gž,bÚÔ…LœÒ‹ný¢ð 0Pfµ“u²˜½ÛO±yMí/ûìü#†~^¯ýlXžJNF /mGB¯£}1™uØmN ò,=˜ËÆ•GÙ°"¥–ïPoÈJ/fÚ «ë\)).'+½˜Ý›ÓÙÔ ç¹©ýÛóìM9W;ÿH«1À{ÐðvîÏ¥Ågî4FkÞGB!„B!„B´¤íeÛ˜tj“|o ¿ñÂ5h(q–PàÌ'Ç‘Cªí­ë=ê)(LË~œ MÓMßm,&µ‰g1©¶#¬·®c^Ñwä9«O´Yáý‚÷ØQ¶ký®£»¾'þjòœyüaÝÀÇpÂ~¼ÆzX70)}<7øÝÄ@ã"µ‘T $Ûö³¨d¿•,Di¦ÀÊ(kÒm'NN9Î> jš=i93Øx! ú®Dj#Ñ£§H)"¥ük-«™_ò#ÅÎb¯¶ÓY˜†uáShÚ F‘ˆÊ?•FRV„3;{ÊïØöÌG)óî~Á•YÇ5جÇY˜î±®|çh»\3ÿ8JyMc– ekßŶ1úÞÑ´éÊ/•Æàj{n*Žã[\™‚½Z·vJq&ÖÅÏc7uh<† ÿAÙêÓQË÷£í4MtÔ>¡¨ÌA 8q–äâÌ:€=y)¶ý‹Aq6h¿gã8±ÒÏ&¡ësš6ýQû…£2 ”— X PJrpæ¦bOÝPc}gÎa,óµO(Šâ@)Î@×õj×áÙËj¬Û\,¿ùÐ÷ueI.þ”*—‰R ¹÷º2)›®}WPRŽ,°%Cù`÷æOøNÖ…Ó°\‰®çx4‘]QéŒ8 OaOYCùæÏQJëž¼µ=ú裤¦¦2fÌbbb°Z­œÄÄD‚‚‚(//§  €ƒ²nÝ:÷;0>ø ‹/æú믧gÏž˜L&ÒÒÒX¾|9|ð99Õ'Ëð–yóæ¡×ë8p ÁÁÁäææ²iÓ&þûßÿ²o_ýÞ³¨OÕæþûïçÞ{ï媫®"** «ÕÊXºtiµº›7ofäÈ‘Ü|óÍ <˜ÈÈH)..&??Ÿ¬¬,RRRX³¦z"…ª¾þúkrss™ûwpc¯¦öQKj콦ָãàÁƒL:½^Oxx8‡Ã`Í5×®lËB!„B!„BœkT§ÿóðÌ3ϨöîÝ«ÊÊÊR©:tè ÊÊÊRëõzMII‰ÚétêÌf³Îf³é£Z­öQÅOQ” 5kÖÌß²e‹{[ýû÷oÁÃi}ñññ­Ý„{ï³×Z5@ù|"çªe-{9>:-ìIfÎþíݜóÚ²ñW¢S«ygç>¾;˜ÚÚÍ9ïÍ9Œ_33·íeþáúͤ/„h>ñ]CynößÜ÷Ñ~ü|W+¶¨yý4j8AF/lÚÉ’c'[»9B!„B!„â<ôõ×_׸ü¯6¶+„¨?up;|nýËObOñ~p–;vìÀÏÏW_}•Ù³g·vs„繎;²dɦNʲeËZ¹EB!„B!„â|RSœïСCǪTª<•JUät:K`üg IDAT«N§+/--µ©Õj›³¼¼Üæ<|ø°âçç§„……)ݺuSžyæ™j3ž”EóúçÍ·vÎr®„BˆÖѾK“îìÃÚŇIÞIAžµZEçnaÜü¯ewm– ]!„B!„B!„›t½ÿÏõAqâHßÓºB!þ"nºé&À•­~ÇIŽ!„B!„B!Î= ,„B!Îy]z„Óó‚hz^]g¹½ÛN‘²/»…Z%„B!„B!„Büy˜F¿Œ3;qg‚ÍŠÊ/]׫Ðu €ýÀ2”ÒÜVn©BñçñÎ;ïššÊÖ­[ÉÈÈ ´´”èèhÆÇ„ X´hÙÙ2.„B!„B!Î= ,„B4ÒÔ]¸µk¼Ç²ÉK~§°ÜÖJ-âÏ+¾kèYË=˜Ë»ÏÿÞ­i9wtïÌÕíb=–ô­Ô!„B!„B!„Zj ÚÖPkGÆ~¬Ëf´`£„Bˆ?7FÃðáÃ1jÿþÝ»w/O?ýt ¶J!„B!„Bˆú“åsÈï»¶Ê~/îù·VÙ¯Bœï|tZ|tž_¥*•ÊkÛŸ»f²×¶u>¸aèç­ÝqûyÎNɧkŸH¢| 1¡V«(*(ãè¡\6¯9ƺ%G°Ù­ÝT¯òÑi 2Ö>-„B!„B!„Bx…ZKÙ†ÑÆ @‹ÊˆJ£G±âÈLÆ~`9¶¤_Á!õ !„Þ¢Óéxûí·2dqqq„„„ ×ëÉÏÏ'))‰ß~ûyóæa³É÷¯B!„B!„87I€ò9D……ðô·ùK[» #æ-ní&ü©ÜðÛê–Ùì áv,%c)yüôÅîÖnJ‹zs{onOjíf!„B!„B!„ø³³—Q¾éSÊ7}ÚÚ-â¼Ö»wïÖn‚âMDöã[±XÞÚÍBˆsNDD]ºt!;;›¤¤¤ÖnŽâä~6:t¨µ›#„8ÏÉ¿7„B!„âÜ&ÊBœ‡»wæ?/?ŠÉldÆÞbÚM­Úž—}N¯cÖ+H€²稹#‡ãk®qݘ_–SPV^gý !Lypÿ}q-i©ÍÑÄVõ¿%7`0ÖüÏ¢Ù/­cÍ¢”nÑÙ…š¹ã‘Á´éHH¸¾²• 6x;#Ævfâ”Þ8 _¿¿5¿5üX{ˆæÒQèÔ-Œ€ #eev r­œ:QÈÎ?N²zá!ʬöo×ÛîïÓ•k:¶­qÝ ›v²äØÉ³n£1÷Âë_Ž#*οÖõOßµˆC{³êµ-!„B!„B!Dó‹Ó¶åÖ€Ûè¦ïA„6»b#ݞξò$6X×±¢tYk7Q´Ã%¢2øâ,Êlí¦Ñjn½õVžzê©jË<ÈÈ‘#[¡Eâ\²xñbüüüxõÕW%`Hœ×¼õ¬ëÙ³'o½õf³™Ç{Œ•+Wz³™çõë×£×ë™>}º(‹õW»½q¼íÛ·ç®»î¢W¯^DGGS^^NZZ{öìaÍš5üöÛoÍÐò†‘oo“ï}q®‘kR!„ç;uk7@ˆsZ­"¦Mjµªµ›R/Sþy1m¢ âîokíæñ—¤V©ˆö5£VÏ V»ƒÂr›ÇÊYRÁj´jî|tBxñ£QŒœ˜ÈyvØJ¾~zzŠ!$ܧÑÛ ÷áÖâd$0ÄÄ Æ?ÐØ mÜòÀ@{m/iKp˜VÙGOTú Žå–ûàÔ°m6KM×ê˽ „B!„B!ÄŸ_C/æD}Ë(Ÿ±´×uÀ¬2㯠‹>q¾ã¹3à®Ön¢BÑlÔj5qqq¨ÕòJ™qÿý÷Ghh(=öXk7Gˆ¿œ¿Ú=ØÔãíÓ§¿üò &L >>³ÙL`` ݺucÒ¤Iüë_ÿj†VË¿7ÄŸÇ_í™#Î}M½&åù,„BˆÆ:/3(n»q<Ñ‘áÌù~IÉugúS«Õ èÛƒ¾=»@n~IÉ)¬Ý¸²òº³FŠ?·Cúñ›Oa4¸bÐ,¥–ÖnÒY9÷g{•ÏBˆ–1 "”ç‡ôŨÑ0ò§%XìçÏ}øÞ®ýÌ?ܰLç\G\G×÷§N¯aò}Ð{p ï¿´ž¼ìÒæh&#'&Ò©[1íÈðÀLž<Ù«û熡C‡òÞ{ïa2™èÑ£¥¥Í7,ĹÆ[Ï:»Ýîþìwº„hqµ{°©Ç;cÆ L&ÅÅżöÚk¬_¿‡ÃADD Þlª›ü{Cœ ä{_œkÎ…kRžÏB!„hŠó.@980€&Ž"*"´^åõz“'¥}\ŒÇòÈðP"ÃCéÝ#¾øž‚B`ý«2û˜0Ö30é\ñÑ;_ŠÑh`Ö+´vs„øË1ë´5V€+SÉL/bÜß{Ðï¢8T*èyA4—éÌ÷ŸÔð–ˆ—\9!ˆ?òsšwòˆ»Æ}çþÜ6>˜—>Õ¬û;WKÉ#3½˜ð(_N- íhA½ë_zu'¿ç¾·•µKƒÁá>´éˆÉ¬«±nKö¯·4ö^xsÚj¿;$„0ýƒ«›»¹B!„B!„B4Éßÿã‘à'PS™1£½®·Le¸ùrîȸ…BgýO¬³ÊÌá³þŸ½óªXãð»}7eÓ -HB ]JDiŠÄBQ@lÈÅÞ.ìŠWQT ( "M:Ò¥J/¡&ée“l»œd“eÓw“ Îû<xa ›{3âþv„5÷fùwGºX')*4óÊëé7¤%‹…Í+Ï`6Yª>,ÜÛöùøÁdV.:fû;3ÝÀ¹“W]ZÞëÑ@ @ ÿÚ¨ÛòŒïsÈ‘s²è_d}Fš9Þº><è5‘pU8¯úý—ÿ\yÂ.ÝEÓ†'ÞRá}åÈ™åÿ>­Õ‘œ,:Áãy»ð§|fØÄÉó²¿bYîR¬Xé¥íÃã>Oª c¦ÿÛLN™€µÌù–¢ ±}ÞnØZñ º†¯ÏS¼ÇCîQítî2)þþ‚}<}õÉr㬮5òh<ù;rŸ&­ÀœxkA6r@Tm† Œ¼¹W#4½§`ÍË.ÍW ¨)rðy ƒñ$äÌ.?ž×3àv§ôÙx r¿—âËä jî£Áÿ÷'<÷ÜsÄÆÆbµZ™?>K—.%77—N:ñôÓOÂܹs‰%99¹¡‹+ÿ:Nœ8ÁðáúÁ¿–[tæyCCK>mÚ´ÉUEþUüÛÆÁõh“@ Š¿…@9¦]ýûtÃ×Û €Óg/ÒªEÓ*Óyë=éÔ>ÄÉë·ì´…ý¹ÿ09¹yÜ{çPš5¥Eó&œ9_7 Á?„„ó™|úú6 f³0íQ2¹ ¥R2ÏoµZ1«/øm²2 Xþ}í¶îjÛç´”S½ÿCo]_ÚiÚs¤ð°-Éj"É”Xá}ï×£µ:’"k!/\AQµ`°2„¡ÒºyÙ_ñYf©qIîO\5_áÝ€‰Ñt¢«¶;ìrI¾eÑÈ´¶Ï–‚ ïW–!îØèõ0¡Ê0vìàFmÏj¥ð”{nI#Ç’SítÎ`:¹ÓÉõPFäm¹zÓ…è*”-û£Œè[/e*D >oƒÜ,ÙñLùcM¯Rq²ad¾”Ù20Ńa ÈÜë¥ÔuJóæÍ¹ÿþûøä“Oøä“Ola ìÝ»—•+WâååÅôéÓ™>}zCU @p£Õ–~ÿ5\kK @ ÿ.þe_/|½½HËÈdÝæœ9ÏKO=\eºˆð&Èd2víýË!üÄ©³dçä¡÷t§]tË:(‡5iÄkï>Khã–ý´Š/>ž_e›Ž;Ç §×MÝiÜ47wùy²2³I¼”Ì=‡øá›Å¦×hÔ ¼µ}ú÷ eT ¼}¼0deæpæô9vþ±‡KwÙ3y3mÚGÒ¢Usü|ñôòD!—“šr•½»òã¼%$]®Ü:oTÛÖÜuß:vi‡·9Ù99xœE ~áè_'â?õâcÜv÷­ò <8ê .^vˆóÒ[O;ä&.'$1îÎG)0H Â#šòí/Ÿ;Ä_·{©ÃµýþÅ“Ÿ¯î«¨wÝÊô—#áâeÆ ›XiÜ.Ý;òá—or55ÛJŒwßw?3É!îù³yàö)Uæïl)•Jî3ŒØ¡ýiÒ4d2âÏ'°nÕf(îg•Ñg@FÜu+‘mZ¢ÕjHNJeÇ–?Y8)é™vq}W×R›>X[†6oLL€/á^žºiÑ)•˜Ì\ÎÍg[b2KÏ\$Ïhª0ýøè–tò#@«E¯Q¡’ËÉ,,âhZ‹ã.p,-³Â´:¥‚;"šÑ³Q =ÜqS)É7šÈ.2’˜—ÏÔ4~X s0_þ‹¢}ßcN¬¼-:“¶§ó>|8·Ýv‘‘‘x{{“Àúõëùí·ß˜:u*½{÷Æl6³zõjÞxã òóó˽Oll,cÆŒ¡]»vèt:._¾ÌÆ™;w.iiivqU*ÀÍÍ¥K—òÌ3Ï”{ONÇþýûÑh4¼ûî»Ì™3Ç!N‡7n]»vÅÏϬ¬,öïßÏW_}Åœ~?eiÕªkÖ¬q¸~䈣ã;wÚDò×2`ÀHxx8:ŽÔÔT¶mÛÆçŸÎåËŽçyÊRŸÏ[­V˰aÈ%::???ŒF#œ8q‚Í›7³hÑ"[|FÃñãǘ:u*+W®t¸ç‰'P«ÕÌœ9“yóæ9„зo_ºtéBdd$¡¡¡xzz"“ÉÈÏÏçÒ¥K,Y²„o¿uœÜÜÜ7n  yóæxxx››Kff&ñññìÚµ‹/¾ø¢Âç­I{vU™aêÔ©ôìÙ“   |||P«Õ¤¥¥±ÿ~æÍ›ÇÁƒ]šŸ3Œ?ž_|Ñáz\\ƒ®2½+Æç†èGJ¥’±cÇ2bÄš7oŽL&ãܹs,_¾Üvf³2jÒ&ï¹çfΜÉùóç8p`¥÷íÙ³' , %%…=zØ®7Ä @ ü-Ê{ærR §Ï\Àbµ¢Õjª•Nïé@‘ÑHnžãf‚8{!ž˜vQ„†¹²Èv<:ý!ZEEp߃w³}ónŽ._làå­çóߥixc»ëžz<õ„5i„B!¯P Ý®5¯¾3ƒÐ`»ë*•›ŽàFäç\*P~lúC¸{8šmBhãÝÚ—i“^äD‚ÅÉSÇq߃wÛ]óõó¡ïÀžôЃßüœe?ÙÑžýî—´ïÔ†ðˆ¦¼þÞsLºwÆ"£-¼ï€žÄ¹ ‹ÅÊ/¾o'7WR¯àíãUe\_?RS®º,gêÈÝÃ÷>ÿ/m;DÙ]oakÛ¡P(x~æˆr“Ýõ&ÍÂh2.Œ!·Ç2ãñWíDè®~W5íƒÎðHûHÜUöC«»JI+=­|ôÜÞ¢)ÏîØÏ©Œò™t òšçÐi¹),„¾¡Á¼»ÿ(«/\rH§W«ø´_wšê=ì®{ªUxªU„z¸!—Éʰ:“öÚgoå£àÞÈp¶'¦p<½bAµB&cZL†]3Ö)Qì¦#ØMG× òŒ¦ EƵA!“ñÜ íÔ¤‘Ýõ&žî4ñlέÍÂxnÇþJŵeRÛÖÜnwÍG«¡Oh0½Cƒùèà1~=ëh,ÃUuTß´jÀc/÷Á?ØqìñvÇ?بŽÁlYuÆeyÞ4´%Ÿ¹±Âp­NIhS/B›z±è‹ºûq¹&ø¸ñÂG±„4ÖÛ]w÷Pãî¡&8LO»BØøÛi¨D Ü¼µŸí³Ê[AÌaÄÜÆ7ïïfÃòÓuV~@ @ @ðÏ¢³æ›Px‹a³C¸Éjb‡aC݇ۄÌÕá¯ÇÑÊ´$›’ø>Çñ@i€"ƒÕ@ºÙñЪ+{ þäV÷¡D«Û¸,_gY’û3Ç‹Ž±Ã° ›Gäêâ£öºÊ{æ†@ÚsÊ —ˆ“¬¹’K™Î»Ê¸r7é·nKNŠC˜¦÷c¨»Ž³»&só-öø|›ÞÁøWù{èΤ-™ÚÝí#÷mŠ5'Ã/O8Š“u^¸ú ¹_sûëZ=2­¹wcdry”Í{¢¶ï'2Ï@”­¡l5€‚u31ýÍñ¹T:´Ãf¡lÞÃáºÌK‡Ü«4ïµ —¢ކ\…ç# *}Î~ w—OÙTÅ[Øy Àj,?^ W ü*ª({!½Ü·)jßûQµaÙ“µ¿WDïÞ½ؾ};åŸX½z5Ó¦MC«ÕÒµkW6mÚd {î¹çðôt£š4i˜1c6lcÇŽåСC.+ó–-[lå=zðÓO?9ÄéÚµ+¹¹¹.Nš4‰¨¨Òó DDD0eнñ÷Ñ£GãïïÏäÉ“í®+ Þ}÷]FŒaw=<<œððpîºë.&Nœhwøßh4²}ûvbccéÓ§2™ «ÕÑ DÏž=Ñh¤sO6lpúé§yøa{§ þþþÜ|óÍÄÆÆòꫯòý÷ßWóMÔ:u²û;,,Œ{¡C‡2f̘ ] õ¼;vä£>¢qcûó *• 777BCCÉË˳ ¹‚_ý•àààrÃôz=ÑÑѸ¹¹9„y{{óÓO?aFÇËË ///š6mŠB¡(W$Q›öìŠ2;K¿~ýhß¾½Ýµàà`† Â-·ÜÂóÏ?ÏâÅÕŸ»¯gœŸ¢yxx0þ|bbbì®·iÓ†6m*_«×¦M¦¤HkC__ß*Ëæïï@R’½u“†˜Á¹>ØPeçú~mÛ¤3c]}`2•fçï:wÿëê!Ö×7§yßó/Ô~]×Pó‚3ù>ûì³õëááa[#ÝÿýLœ8±\°@ Áß™¿…@9'7Ÿ“qçkœ®È(í>©U*Ô*•íï²”—õå7]E`p€ÝßA!•Š#ÇN¾‡¦á1™;{»¶ï%3= •ZEPp­£#ÈÏ3”›¶E«æ|øå›¸¹ë°˜-¬[µ™í[v“x) ™LŽ·m;DÖ™8sˆü¶x5éY¸¹éhß© ・‡;/¾ù÷˜ì°sï„»lâä{3wö·\NH¢qÓP¦L›@ÛŽQL}v2G'îd©ø®¨°ˆWŸ~›¹‹>&¢u8O<=‰÷ßø>¾Þ<ýòã,úv)GÚÿðpþl<n¸ €>ýoä•Y3Úg4†k„̳k6Þ¯¤H‡ <<ÝQ©”+ñ¢ëã'mΗÝ.ùñ7~]\êròÔqÜ}ßm5.Gmêè™W¦ÚÄÉ«–­ã÷ÉËÍ£ed îºw­ÃËË €ISÇÚÄÉÖlaÅÒßÉÉÎ¥m‡h&^Ìšý*ãî|”+ÅÏë컺–šöAW°åR2Kâ.c4â¦TrcH£Z5ÇW«aV¯.<¸~;i…éæ‹Ãdµ’˜—OžÑ„R&#Ò׋‡Ûµ¦‰§ÓbÚ°=1…ì"ûñllTMõ-¾:zšÝÉWÈ,,B%—覥µù¼GgÒ–%ÐMk÷w›®Rò„6-mâäãé™ütú<ñ9yÈ@7¯vïˆF¡¨2ßš2±m+›8ycB"+Î]"Çh¤­Ÿ7ã£[â­QóVÏÎLX¿+eƃ Ù9 Z¶€Þ‚x¹[G†ý¶³Ù.K9ÍcZ‡ÛÄɯ¤1÷èisó ótçáv­iëçã9š–É™Ìl»´®ª£ú$¢M/peû IDAT|‹JUy^ˆK';³ô=ä—¶mµFisÐn±X1™¯MŽÉd?F«ÔÕk3¹Ù…\Iέ:b=0á©îâäkI¿’oó2]Sî{ìì¼Dú•Rc-eß³L&C­©~_+›¶¬7d³Ù‚Éè8gZÊxv¶~@ @ AÝ®j@Ž%‡d“t¨ð1ï©tÐÄ0;ó#þÅYc•MPÊ”˜¬•ÿFÝ\ÎÍî’ˆoNÖÿ(²9Ä)°J¿ëd:t2«ã~hšYÚòW8„Õ6ßsƳôLÄq7éú3Óÿm^êëPS9êÇ4óU¶þ¨VyÊÃW.ò,²¢–i(²Öî·`gi<´D3eËþXþñ‘ËîoÉM-ÎÇ*0W¬"•¹IïÃZœ¦u×±6±9a…Û?Ã’y ¹O4}ž@Ѩ=Ú›¦cN<„%õ´ËÒ–[F­Ý³Q·Á’„áçÉX²“â©»?$‰“ÍEnÿÓùXó3@©BîŒ"(kQù^[¥hç—`1aɺŒµ0äJÁÑhú<Ü·Ú30ý«ÁÞ¨²fÐó6q²ñäZLGÃ’{™RƒÌ; Ý­3Aîúý»²¸ñÒç¼E÷sÅqÕeô ŽöêM¯Gmâdãɵ/ÃZ˜¢Q4=&!Óù »ý#òŒÆš“ZÅݪF¡PвeK |OF%œ;wŽÜÜ\<<øàæÏŸO÷îÝm^§¿ûî;>þøcúõëÇ{ï½ÇÀiÙ²%qqq¶tO?ý´M\±bÅ -ZDvv6:ubêÔ©øúú2wî\† Brriÿß´i±±±U®HfÀ€\¸p3gì 9Ož<Ù&6ؽ{7ï½÷ñññ4oÞœ3fЩS'^~ùe8P¡§¦ÄÅÅ Hï>úHÿ;wîŒÁ`?VV?þù'?üð X­VzôèÁO<§§'³fÍbذaiây"##Y°`îîî˜Íf–/_ÎÆ‰G&“áççGLLLzè=xð ¿þú+§OŸ&##£Ñˆ^¯§U«Vüõ×_ñüq"""(**âý÷ßgË–-¤§§£V« ¡]»vvÓËRÛöìl™åã?Æd2ONN*•ŠöíÛóÌ3ÏТE ^{í5Ö¯_OffÅçRê‹ Ø<ÁƒôÎÇ_ãûÔf|n¨~ôæ›oÚÄÉ‹/fÙ²eäää͸qãìŒD\KmÚdÉÿz½•J…±œs %”¤*jÏõ9ÖöyºÌe©ißw¦MÖv¬s¶~úé§åz îÕ«_|ñ2™Ìö\ù¼µÅ™ç­É¼_‘ »6ˆõ†Xo\¯ëÚðoš÷]5ÿÖv]çL›tWä»fÍæÍ›GVVžžžôëׇzˆ€€¾þúk†Jjªó¿@ýÍ ®þ¾.àŸÅßB \[’’¯Ø>G·nÁ_G‰ƒ´Á«R©ê¬›×n£U¤´‘Ÿ•™Íþ?+·X×®£´Ð[·j3 ¿]jv%å*G(/Ó_z 7w…Lø%8êgÏÎý5}„jsêX{w•~a>|ð99¹Lñ1š4 £MûH»òú1aʽlݸ“—žz‹E#e¤g2mò ,\1ÿ@?FÝ?’™/¼g—ßù³™ýΗLé1n5„ý{±eývžyåq¼|ôœ;s‘¯þ÷C9­V+E…Ò“©tÁ\Td´]w5©ÅíQ&“áàKr¢ôÅbÊ´ ´ëÍœæqøà1¥/j)‰¥_>,‹]Ùj+œ®iµhÕœþ7K–˜œ¿„Ï?øÆwòkWlbýže¨TŽÃIp£@Fß?€Õ¿®ç­—?´K{`ï!æ-þz/O&L¹—Y¯~ 8ÿ®®¥¦}МÎÌâH¼ÇÓ3Ù—’Ƈ}»â£Q36:‚sH·»Ì¸UÂŽÄTâ³óXpsoÔ 9Ý‚XŸh§¿d]}|"‹NÛt¸b(àXZÅ2Τ-ËæKI´ô–D–ÙEF\©ØÒ ›–Ñ­$±î®¤T^Øys™SÎdå`²X©f²Z¹éÕJ²R¿æÂ%ÞÞWºy&3›ƒ©é|=¨'zµŠqѼ»¿t µEÅý®lY‹ízEøë´Œ– l»œÂË»ÚDÌ…E<µm/?Ü܆Q-›ñÆ^{Kꮪ£úB.—ñ苽ìÄÉqÇ®°~Ù).Ä¥S`0¢Ó©hÜÂÇA”:å¶RKx.¼ PÉšÜÑ}I¼=ÝÑ‚xUÝŸÄù“iädRThF«SØÈ“ñúø±D¥Vб{¨íï¥0÷]\MÉE©”ª':&wOM•÷Ú¼2ŽõËNaµÂm´£[¿¦¨5 ºõkʚťc{Ù÷Ü4—·¾Zí2—MûíÆ{mõ¼cýyæ¼¹£Úi]Q¿@ @ Àõ”ˆ³,ÒoÏ4]«ŸÀ3>Ïq_ò(2Í’¨Q)Sâ-÷檹bC²èÇ#GN¢)‘ßóV—çTQé^n?·þ¬É[å'Û"øÔʵaµÍ׊Õ& 6QzÛh-ª±pRòô˜÷“<æý$9–Nb“a=+r——+Ôv2'Ù«:-WÏ`Xórµ„ºÕÅšS|8U&Cîî%[¾Kâàn›ù²tÐXæ)yÒ.‰ óDsã$Lq›1¬˜aóîlÎOǰäQÜ'ü‚Ì#uç{)XóŠKÒ–‡Ì#·;f#÷À’~ÃÒGË'C©7jã‰ß)Úg¿gmÎIu©gÝk1wü½Þtv+–ô ¸_J Êf=0žXc —¶.ÜZBÁ†·íorny ¨;²¶¸KÇ0¬‡ì*¯l"ýoNKVåq]‰\‚ºË}þFÁÚ×ma–ÔÓ˜ã÷áþÀÈ´z47N¢`ÝL§óÔëõ6¯»åy¤*ËåË—iݺ5AAAå†9r„íÛ·ÛþÞ·oÙÙÙü÷¿ÿ%<<œŽ;ºT(±eËFMïÞ½Q(v‡š ;J†¡·mÛæ²Ý%ïÈjµRXX<–"Ù®W‡­[·²jUéÜ}äÈrssyýõ×‰ŽŽ&**Š'J÷+êyfΜ‰»»;ƒñãdzwïÞrŸ§.Ù¼ys¹ží.nèܹ3Ë—/端¾² KNN®°Ï:Óž-³³lÙ²ÅáÚ† 8{ö,k×®E£Ñзo_–/_^'ù׳Ùl7¶ÕV¼QÓñ¹¡úQdd$C† `îܹ¼ývéšáøñã,[¶ŒcÇŽ•{³¶m21Q:'%“É äòåË̘1ƒÎ;óÎ;ï°oß>Û{lq®¥>çAWõÁúž»ËR“¾ïl›¬íXçl¼6}ɳ̚5 ™LƱcÇxá…\þ¼µÅ™çuÕ¼_SÄzC¬7®×õFmø7Íû®šk»®«m›tWä{ôèQöï/Õk“«Éy$œÏdç†óìÝ_§eù,üâ+cÝ/'ù퇣|õî.æ´§Nó­. ¥y™vV`0r%)“ÑBÁÄÅ3é¬Y|‚%ßTmòÌñ«\ˆKçâ™t¾œµsá|x¤_”_ @ @ üóÐÉu€äAÀCîa ó”K¿ý–ˆ—t2Ç}‹²x˽‰u Àœï0Sþ!¹ý{‰7I¿O÷™Á0÷ÛP –© RÓßm }tÒ¾Už%¯Êç¨n¾ ÍEãþÅEãЬ…xÊ=é¬íÂÓ>ϱ0d ÍUáu˜»,ö^±ä~áhºŽC¦®¼^k”‹! k‘Tg2â}™U»ÛP„v@Ùò¦ÒüÝ%ãÄ–ŒÛ5UÔ`PjÀl¤`ã,›ÀØv£¢ƒ’WÖï¿®H{-rߦ¸Ýó rÿÌÉÇÈ_ô`…âdk¾ÔO!m‘é¼*½w}aɈ·•Yæf¦Š’ú ¦B w~YßEÀý~@V#ä|†dA¸äůÕR϶|•Q·€LE»ß•%ý<Æã’pB9äÎûðð(‹óó+÷¼—'õ7OOÏJã•å×_µ×hÛ¶m-JX1%"½^oó–\Bûöíqs“Æ›ºh”xãòó+Ý7+ñX¥×—žÍ¹í¶ÛP(˜L&>þøc‡ûœ9s†_~ù€áÇÛÎ9\½z•={¤}È!rYzôèdœzÅŠva#FŒ@£Ñ`4yå•W•ççç³`Áúöí[ͧnXV®\iûܾ}{»°†zÞ¨¨(›××Ù³g—+ºIOO cÇŽx{{W;3íùzåüùó6±L“&M¸4uOeãsCõ£¡C%è………Ìž=Û!Ül6WèÍ·¶m233Óæ©°D¥P(5j;w&66Öv’ð‹/Vû™êj¬Ë>X—swmq¶MÖv¬s5r¹œ>úrrrxôÑG)((pˆ÷Oœ»ÿŽˆõ†ëë†çz›÷ëzþ­j]×PóB]å»gÏ~þùg@ê7¢/@ ø'ñ([­V~^þ;…ètZFÄŒ'âµgã™Ç'0æŽ!4 (÷Wòdž,œ¿”¤ËoP–°øûåX,Vš·hÊ+æ2éñ±„5iTeº˜.ílŸ×,__IÌúÅo íª´X÷ö±ßxíØYúuüðIÒ®¤—›þÂÙx[ÚkÓ—0ëÕINLÅÝÃÝæ‘yþœ‰;yÖ%Ïà*Jê?8D²üݶCžzi#±{¯.¶xA¤ðË õ#P®¬ŽZGGpöôyòójf¡½mGI0.î)IŽžvüñ'Z­†–‘¥,\ý®jÒë’m‰)è” Zx9 pW)¹/²³ûuçç[û±îöX–Àg7Ýh¦jŽVÉ—Ä]ÀbµÒ\ïÁƒû2±m+Â<Ü«U&gÒ^Ë—“Yxê·‹SnqŠZ¦¦ÈZȪ¼Ƴ`ᥫϒcÉA/÷âe¿×Xº÷²2t-³üß§FòH›c©Úmuómhþså LËI#èбÉcX’û3Ì„*Ãø8à3´²êyŒ®)ÖÂ\r>ìNîÿú“¿pÆCKÀjAÙ:ÝÝs@¡®ú&ÕÍ+K2+×KûóŠFí‘i¥}e³Ra°¬8ÜšY*PV„uÀœtk^ùÞº-iç¤ô:d:—¤-‹"( ·Ñ_#ׇ`¾¸ÃÏS°*WÅ,«¹_8î–¡éõrŸúRÉ4¨»ÇmÔ\Ü'®Äsê<YÛ=ߨÄÒ2¥Æ."(ó•8¬ùåïÝ×5E’ã%d*ðû”M«™°’m(es\&ýS6wºˆ@©wló•3ŠÔMç$oÀ2•E`+×d\Md²šaÎÏÏ·‰u}}}]ZžÝ»w“’"í“_+Ú-,ÇÇÇ_·†K¨êýtê$§N²–¿–M›6 ÓéˆŽŽ¶ ûí·ßˆŽŽ¦qãÆva·Þz+qqq;vÌ.¬ä]/]ºÔ%÷¬æÏŸÅb¡eË–lܸ‘§žzŠfÍšU™ÎÙöÜxzz2eÊ-ZĶmÛ8vì{÷îeÉ’%6¡¿V[7k¤ë‰ÊÆç†êG%‚©“'OÚŒbTgÚdB‚´>  &&//i]SVˆU^T]̓uÙërî®-ζÉÚŽu®æ‘G±=Ë3Ï]»våìÙªç9ooo›g¯ë™ÜÜ\üüüÐétv×êyK<»eeeqõjÍÏÁ4[·neÊ”)ü÷¿ÿ%00Gy„Gy„0oÞ<Ö®]ëàEœoÏ EDDß~û-ÁÁöÆÑµZ­Ø¦6þŽT4>7T?ò÷—æµääš;‰p¦MÆÇÇe@•½ÈÉÉ!""‚Æ“@X˜4ñ×D  u3Öu¬«¹»¶8Û&k;Ö¹’˜˜žxâ ,XÀºuë*ŒûO»ÿŽˆõ†kø·­7®W®·yßÙù×™u]CÍ u™ï¥K¥ç@ƒ‚‚8r䈫Š-@Рü£=(—•ʵ[øà³oyeÖ§¼þÞç|òå÷ü±kžÒÆÌÅK×—¸qûæÝÜ5xo¼ð>Gÿ:HÞh_ï9üò9­Ã¯Í­×‘H­„ŠÊ$“IMÐb¶`,2VùO¥.ÇP.—qç}#l»¹ë÷ð×?ˆ“\Ø]–s2ïd¼ÅÈÄaôLèJ¿K=tßfƒŸB2Ø|¸ðP¥÷¨M¾×›ò7pªè$]µÝë-_Óù˜ hv£ËîkI¿€Ü«ÊVý±2(Úýµôw‹~ Ô sóÅj,°óJkûÛjsQÕÿj—¤µ{/va-Ì™ ·‘£l5°ZÏm:ó¹s‡Q°æ•Ò÷Ú¨=ºaoã>ö'ä®ö¬+C7ìmIœl*¤póäÍJÎG7’;»/yßÝ‹5§ü}U«©Pú oX£§ ã)°Ü|?yùŽ­1 —Á «\³ëRJ÷ëo,;;›ÂB©ŽBBB*[rp¼Äkqu©Ë³&¿ü"˜÷÷÷§gÏž€t ½K—.üñÇu–wM)7jsÎ$!Ê–-[>|¸íú AƒÐëõ˜Íf–/_^a¾f³™¢¢¢*ÿ©Õ®ór_—”Ü¿v¿²¡ž·¦õ[–²iäµ8ëà,6l OŸ>LŸ>’ÇÂÙ³g³zõêr=°9Ûž™LÆÿþ÷?‚ƒƒ)((`æÌ™ôîÝ›ÈÈH:tèÀ°aÃHJº¾ÎùÕ5Ÿ»k˜~TR£ÑXEÌŠË\›6Yâ²D5xð`ÒÓÓùôÓO8p Z­ —/W`á¤y¹Šºîƒ×CŸ-‹+ÚdmÆ:W¡Õjyï½÷P(œ9s†Y³fUÿŸ:wÿë ×ñoYo\Ï\oó¾3ó¯+Öu 5/ÔU¾*•‹,§ @ \güã=(WF÷Îí‘ÉdX¬VŽŸ:ÓÐÅqÀh4ñûŠü¾b#Á‚:2–Q÷ßNÓðÆ|òõÛêÛqë·qÕPèò´5%½°ð$ÐM[eÜòÊi±Z‘Ëd¸«j6]-($v×U'Ø­4¬l•¥¬·âêôÁ’|7_Jâõ?+?4UõYGΑVê…Zç®"8LOò¥šÏIv?¶Õ£¾öÚñD.¯<ó—&­¶û»C·Pf¼+yR8w2—^]^2;2Ó ,˜½—…sЮkÝú5£kß&h´RïÔ#Œ[îŠbåÂc5y”ja6Û y«z^WQÓúuÅ{@ @ USâØSîI°2„d“ãAÁª–$˜â1Y+Þ¿¸I×9r ­…ì.ØéT¹îô…9Ìl1l¬4®+ómHâMi­Ž´ ³ë kn*2]%nikˆåªÔ®dúF(BÚ"×7Âø×ÏO­CÓç ”­úcŠß2–ôóvV8-yW‘Óã©õ¬z¡fù:‘¶,æ„ýnxÝí"÷ G7ôM «å˜NVCo6b<¾ ãñUÈõPµªóä~Íq»Köó IDAT»{yߎš{¥Öe+‹"¨5r?ÉØyÁºÿb<ñ»-Ìj6bM=…µ(¯ÜŸå­Y‰ܦDÓ5§p7d>>³@Ù|?€´I`½Fe,q4$mO0¬¯Ÿò•´+Y±à¾<äúR±5Ïy¯if³™¸¸8Ú¶mK»ví*Œއ‡´ï|ì˜ë÷• v‚‚'NpðàAbbb9r$[·n¥k×®¨ÕjòóóëŃòÁƒÉË˫Գ@jj*ÑÑÑ6¡wy4jTZ÷W®8öß… 2hÐ Z·nMëÖ­9uê#GŽ`ýúõ¤¦¦V˜ïêÕ«yòÉ'«ûX.Åb){ëÚrC=oI}yyyáããCFFF)J)**Âb± —ËñôlâF£‘eË–±lÙ2¸뮻˜0aüðÃÜrË-vÆ \Ñžë›èèh"""xî¹çøí·ßlaF£‘ãÇÛy•¯+œO•¤ý§ö£ê´+gÒVÔ&ãââI Õ±cGÂÂÂøî»ïXµjÏ>û,ƒfçÎÈd2Ξ=k7¦5Ç>è ®j“5뮥¶}púôé4kÖ £ÑÈ´iÓ((¨Ü™Èõ0wCý9®B¬7*G¬71ïWŒ3ó¯«ÖuÎÎ µ¥.ò-ñ°––Va¼†h“õ9> @ øçñ¯ð \A~ôîÞ€£ÇãÈÌÊ©Óüú èÁ=cï ¸QÍEžÉ‰)|õéwL3 “É„§Þƒ[FØ[e>|à8 - o6Àé2×GJeîÒ=¦vÖš:umÏØÉ’·äw^û„w_ÿ„ƒ{#—Ëxñé¸{¸Wš¾ìIUÅu–ógãhDìÐþ¬_µ™Ôä+ýëíb¢éÒ=€sg.Tz¯Âb¢»GÝš‚.©£È6- ¬Ùᇒ´-Z6³yB¾–^ý$‹ï†âNž³]wå»çû «èQ,È6[­œ+3îøh5¶Ïg\d\ 9ÏÀ×ÇâxxÓNL+žjƒ›†ÕiÚÞ¡AŒnÕ¼R0À‰tÉ›B„·¾V"å´báp3O¥;RlÈ!ÜË“ ·òËØ³¸­˜ÌœÉ*¿. Ê:«#’.É·s ?…k¬Î;S¿uÍ©Ãö?ºÜýPÇZ€(,0Û>ûÔŸÙ{C^‘ÝßþA5kg5EVFl4š9°ãŸ¿±i£—‘~%ßscÝÔon¶½¨=0¤~~Ün¨ú@ @ •³¿p¤ßÁûèú:„+PÐCÛ €½Vz¯¾nÒÏÁÂX+?Ü]-TܯÀ†üõ$•#š®‹|š`E09–ºÝ˾¹O¬†,—ÝÓœ&íʽ¡Œºã‰ß±æ¤`N<Œ¢Q”M»¥bf[ÚË’ñWeÓ® ÔPœI{-–¬Ëä/zHò„,“£»å¿([Õl_Þ’HáŽÏÉÿa,XLÈ´zTm†9U®²ÈÜ|mŸÍ©§k”ÖtQêÏrï0”ý\V¦ÚRðd"}VµÏGãsñpàþõv¦¤])ü#ì„ÈeQ¶ÆO«ÑP㺨ˆo¯^½ÐjËßc½õV©²gÏ—ä{-%žœÝÜj¶¿óý÷ß’Ç-bccظqc• WðÖ[o1~üx›wãŠØ¿?‘‘‘Š,”Îëäççsüøq‡ðmÛ¶‘À]wÝEHH½{÷JßCEùöìÙ³Âú­k †RCÔu-ˆi¨çÝ·o ­ºýöÛkœ¾D\^"´hH.]ºÄ‡~ÈÈ‘#1™LxyyqÇwØÅqE{®oüýýmŸ²<µë ´/•Œ¨+ª•äÛ¾}{;‘MMÒÖ¦M–¤7n̈#X¾|9III8p€Î;Ó³gONŸvÍÜë,Ç>è uÑ&«3Ö]Kmú`§N;v,Ÿ}öYµêâz˜»¡þÆW!ÖU#Öõ˜÷+Æ™ù·.Öuµ™®§|û÷—~³4›ÍœZ£:*›vÂ#÷9„7oÑ”›‡õ/Ž»SÁ®|W5탮@)s^ƒÝuÄ6•,ÁíLL¥À\*ÎË(ã©7ÒÇ«æùUâñô|v.9E’àÒ«CΤ-Ë=­Ã™yc'¦´äËþ=ЫUÆÝ” PÈdŒrü!M.“U*h-8÷ F«¬~›\ŸˆÙjE!“1¡MK‡ðæzb›„Úâš*ðÌš_úEü† ÿrã”eíÅ˘,V¼5j¦vŒFQCµ®«ê¨¾Ø·-Ì2^”»÷oÆ‹ß̚Ѩ‰¾n„4ÖÕ1ˆ¡£Û P–¿IKɳ}mæÍm÷·#¤‰ž€"Ú0jR Í[»ÞkDÚ•| ¥ãÑÀÛZÑ¡{(þAî´lÀèÉðñw V¡”ó¿¥wòÐÓ7Ó# 7T*ZŸ7L¦R1|]y6ÎJ7_F”ÝXK:t % ؃ÈöÜãÂç-KCÕ¯@ @ @ ¨œtsšMx|¿ç8Üåö~G{ŽÁW!‰ Ï_Sá}äÈi¯nÀá¿j]žîÚù<è+´2-éæ4>Ìx·Òø®Ê·¡é éHä%õP=>‡2¢¯Íƒ®ùÒ~—Ý×’~,&äúTQƒ±d^’„¾€ñÄÉPw'ŽzÆ.­ñøJIÌ«óAÛÿWoÈ™´åa-È&ñÌ—‚\îÖ™(B;–Y^ñ¾¿%íÖÉP®+=U[óÓmŸÁÑ5Jk<±ÆæéW{Ëk¨ÚGæî‡Lã‰"¤š›žyÅûuAÞ’PÀý^Ðt»&‚EŠ Šý4(×=´‹1X 3Ȩ{8žGû…£Š¾µ8î°Tìi¾&,]º‹Å‚——“&Mr a„ ¬Y³†œœº1nœœlË/$¤|vy¬^½š´´4T*cÆŒaРA¬ZµªNÊY[~ýõWÛ9‡ò<“µlÙÒ&4Y¾|¹Ý9‡, ‹-`äÈ‘Lš4 …BÁÙ³gÙµkW¹ùþòË/˜L&|}}yå•Wj|~Æ”õ.]"¨®+êy>lGL›6.]ºÔ(ý¡C’‚Áƒ×J,P[*;KGf¦t†ÂÇÇþü+Ús}sõj©×ùöíÛ7X9j;ÖAi_ " Àåe+¡¡úQÙvõúë¯×(_gÚäÙ³g1™L„††2|øpâãã9xð -®L&còdi^>uê”3è2þŽ}Мm“µ뮥¦}P¡P0sæLär9çÏŸgΜ9Õ*ïõ0wCý9®B¬7ªF¬7ê1ïWŒ3ó¯³ë:WÍ ‘¯JåøûIXX˜­/lܸÑN|- Ñ&ës|@ðÏ£j·× Zƶ‘¤-#ÀR©Th‹=ZÌŠŒF»tj• N‹·—'¡!A´‹jI“0i¡–——Ï÷‹W“›G]2à–RËâ^>z:wëÀ¦µÛ*Œÿþœ™˜LF6þ¾•“GO“ž–‰R©$¸Q Ãïº_?iA{üˆ½¥!«ÕÊ»¯Ïfö¼YhuZf3‹Më¶²ó=$]NÁl6ãæîFxDS¼}½˜;{AÝ

zÆFEà¦Tb²X™w<Î.þ™¬’ó »éx¼c¥‚©id¡VÈñV«ÑUòƒÂ{½oÀh±²)!‰“éYd¢”ËrÓ1<¼‰ÍCóÉba¯«Ò–e@ãÒ/Á^5ýÙ|©|²sYŸÈ &Ú¼1*«.\"·ÈH¸—'·µh‚[%_ò×\¸LŸÐ`ü´>ìÓ•ïNœ%)/µBA ›yà”|?>ϘÖá nŠN©`å¹r&Úøyó@TJ¹Œì"#óOTÜ®âsòÈ(,ÂG£æáv­QÈeœÍÌA&ƒfz{¸3çHé-W ,8q† mZ2¤y|Y~.žøœ\Ò ŠPËå»ëèàïˇa¶Ú £]UGõ…±È̳vòÌÛýmÞ£:Õ±|˹‡ö$’p.ÃáúñƒÉtêYê5øî‰1Ü=1Æ.ÎÕä<ΟJsaéÁj±²{<=… ÷Ö2ã{'þJ!ãj~yÉkDX3/¼ýtôÖ’þÃEóe9²/±ÒðÚbµÂþí—è}sñóúh™ñ®ýówÑóÚݳêW @ @ TÍ癟rCpW‚•!|8—/³>'ÝœNO]/&zI‡·þàHá¡ ïÑTÕ w¹ä©ãhá‘jå«“éÐ˽Q†¥nÃ@·A´×HâÏts:Ó¯>ÉUóÕJïQ›|ÅCî¬x3ÛC^êD+×á)—<Ž˜¬& Vûƒ‡oú¿C†9}…{I2%b´ñUøq£¶£<ïAŽœ\K.Ks»°´2ÜøÓù˜/ÿ…%÷Š$v÷GѬ;êŽw’ÐÕxè×ek6b¾zE`kd EÚ‚L§ÖÁMOÙ¼ÿšSNØ%µæ¤R¸ûk4=&£j7EãÎ-Á’~k^(ÕÈõP„ÅP°q–$uAÚ 1bøun£¾DР݈÷Éÿq–Ì»hnw~ŠÕlÄtj=æäcXóÒA¡”DÚíG–>oòÑÚ¾UÌ©§±d'!ׇH‚b¥sÂ^¬†LP¨‘é|@U§%S!†•Ï£ù 2µ;Ú›_vY¹œ!ë5Pÿ rðz®Ü e»RÞÏ íêp ª–Ò5ÓyÀ ê®®/“%;™ÿ³wßáQTëǿ۳›Þ„!´JPr©½* (\QQïUÄ®?Å Š^áª\QD,ˆ€ô^¤÷¡!!½oýýÙdI!Én²ÞÏóð°™™3çÌ™™sfwæcÜý-ÚÛF=…Ö€éà/Ø ²PÕmƒ¶ó?A©Æ–ŸIÁö¹.Ë÷ôéÓ,X°€‡zˆ‰'âííÍO?ýDNN111<ÿüóøúú’››ËG}ä²|¯µwï^”J%Ó§OçÓO?ÅjµÒ AÂÃÙ1cF©éŒF#óçÏç_ÿúO<ñ:Žôôt6nÜXme­Š‹/2wî\üq†ŽÁ`à‡~ 33“˜˜žzê)Ôj5éééÌœ9³Ìõ,\¸ &àëëËèÑ£øê«¯Ê\>11‘O?ý”gžy†ûî»Î;³`ÁN:Err2:Žððpn»í6^ýõÏϸÂéÓ§III!00)S¦ R©ìAÍš5£I“&¼÷Þ{.ÉË]Ûk³Ùxå•Wøî»ï0 |÷Ýw,_¾œuëÖqþüy, ^^^DFFPâ\Z¼x1ýúõ#$$„ùóçóùçŸN§£^½zÕ(òÍ7ß`4Y¶läÊ•+h4êÕ«ÇÈ‘#í£Ó] hºÊUÇsMŠ%!!°°0^}õUôz=Û·o'55NG@@z½¾ÚËQÕ¶`×®]@á3]³fÍbæÌ™иqcÂÃÙ>}ºKÊè®óèâŋ̙3‡ñãÇÓ§O-ZÄ×_ÍÙ³gQ©TÔ­[·ÌsÁ™cÒd2qüøq¢££ñóóã믿¶Ï[¶l¯¾úªý\8t¨f¾\Om<áì1YÕ¶îZ•=GŒAóæÍ˜6m¥ŽNš——‡©ØóÉ7Bß]•íu7¹Þë‘ôûes¦ÿuöºÎUýBe¹"ß§žzŠ   Ö®]Kff&ÑÑÑ<ýôÓxzzb6›ùä“OÊ-ƒ;ŽÉšlŸ…Bqó©5ÊS&ým)o“¹oh?ûçã'Ï0ÿ‡ßæ÷½³]nkë0ÍfƒØ§ø}Õ22³«§ÀÅ$_¾Bd‹¦ö¿“˾i®T*iÙ¦9:nïÚ¡Ìå¶nü“õ«JŽü{ø8“Ÿ|×ÞLPH }ô¢Ï€^%–ËÉα(ë zTe˜–'/7ß%_`¾™ý=Z­–QcÿAXýº<õ죥.·ð›Ÿ9.Áþw—;n£÷€ž…#&¿òùÅF Xòã2 íCT«HþýÒ“<8ì‰RËkµÚøræ|ž}"¾þ>L~m‚ÃüŒôL{€²+êêø‘8"[4ÅjµñÇokìËdfd±ií6z÷ïÍfãD9Á‘â/²zùîþ[/Zµ‹búço9”ÙUÊó>ûþ¾ Þ–­›óúûS*œöË™ó  ¢ïÀ;éÕ§½úts˜Ÿ•™Í” oœT2ÍUuU™sÐU4J%Ú6`XÓÓ-6ïí>È© Ç·U[m6ÞÞy€÷»wÄK£áß•]©Pà‡‡JÅíåŒæ»íRë/$º,íµ’óòiVltê¤rÞîðÑÞ#ÔñÔÓ:П^áuè^§Üå¯-ϲ3Ø8œ–~¼Û­ìöòZsŸ XïÁÝ êÑ3¬=ÃóÍ2šxqë®äå—¹«ÍÆÜÃ'˜Ü¡¾:-ϵoå0?ÓhrP˜{­JÉÈæMó2ðd›¥®û‡g8_ìÅ®ÜG5éÀަ¿¸žÇ_ìŠ_ºü¥a„©Êë~ãî¿7'4̴̻a +?âxEü8ïm;…áå£+=ßF¾ø3¡Ôy•Q¯‚å?và2Ëu:¿²,þï~ÚvªWæ¾rÕöçÎý+„B!„B!„(ßãa¦¥¾Çä€i©æãàOæŸ6æÿRÊ^l¤ilÿ|Á_¡|Ÿò›ÄýÞ#¦Ù°±1o=ÓRß#Érùºë¨J¾ÎZ¶½¢ä•o¾cÿ¼%oÿJ.º©DI7ýî»f›¯Ê°¦ó•çHµ¸îEŽÊ€F(ƒ›¡ .û¥™¶ì$ò~}[kG_µ&EÒlVÌG~/Ê/?óÉõ¨›÷› ëåc%Ò·ÏE¡Ò¢½ýa”~áèz–• À¸û[¬iñ.K[[A6¹??ƒçè(ôþè‡N#gÁÃ`þëžµB‰²N+Ôº”¹ó©M˜¯)s~¥Ù¬ä¯x ýß?F¡óÆ£Ï •Jn¹°—Ü£Ñu uã. *|y¼­ óÉ h¢ü5 µ­ü¹5 2?¿·@^£!kvñ õðtAÛ¡ð_u+Ø: …wš¨¨›Ý…ºÙ]ómù™äýò ¶ì$—æûöÛoÎwÞÉØ±cí#&_•››ËøñãIHpí}âŽ?Κ5kèÓ§;w¦sçÎöyiiiå>(=þ|{ì1<==·ŒFcµ•µª>üðCêÔ©ÃСCéß¿?ýû÷w˜Ÿ‘‘Á¸qã¸|¹ì~)==Ÿ~ú‰Q£FššÊÏ?—ÿâ‡O?ýNÇã?Nƒ xñÅK]nÞ¼yœ9s¦’[u}V«•>úˆ·ß~Þ~ûm‡ùiii.} Ý]Û{àÀÆŽËŒ3 eðàÁ <¸ÄrYYY%†Ö­[Ç¢E‹¸ï¾ûˆ‰‰aΜ9.+WYT*mÛ¶E¯×Ó£G2—[»v-Ë—//1ÝÇsM²Z­<ûì³Ì›7Þ|óM·”Ù¶îìÙ³üöÛo 2„öíÛ;¼œ --Í¥Á‚î:f̘A@@÷ß?íÚµãã?®pZgŽÉC‡ÕjuhSÓÓÓYµjÄf³qäÈ‘ªoœ‹Õ¶sÐYU=&m늫ì98fÌûçY³f•¹Þ—^z‰~øÁaš»ûn¨Ù6ÇäzÑ\oܤß/_Uû_g®ë\Ù/T†«òÕh4<øàƒ<øàƒÓ- Ï?ÿ<ÇŽ•üí«8w“5Ý> !„âæRk”«ªÀX@~~yù$§¤rîüE;É•”’PÕeÖ‡ó ¦^x–,^Îá±e.k³Ù˜òôëôèÝVm£ òÇ/À›ÕFjJ'OœaÝ›X³bVké7ýöí:ȈÁãøÛÐ>tëÕ‰ˆÈ&øøyc2šÈÊÌæÌ©xöìØJ¥Âb±ðáçoÑ:¦e¥·ë_½Äîû+îZ6›9ÿùš5+6ð÷ûs{BBƒÐê´dgæpîÌyöî:HFz¦=Z­æéÉãXþëªRëÔjµñùŒÿòŸyïÞ0Œ!÷à—~/±ÀÒŸþ #=“á#Ó¬y¼¼<ÉËËãäñ3lZ» …BÍfsI];Çà{úóç–]$^t¼¹äÇåôî߃ ñÉɾþH•ï¾6ƒ ç¸ûo½­б €3'ãÙ´®¨Ì®`±XxÿOXûÇF†Ý7Vm£ð ðÅj±’‘žIÂ…KÄ:ÁŸ[w—šö­§±iÍ6†ücQ­"ñðБx)‰­þ仯“Vƨ¯®ª«Êœƒ®²ò\j¥’˜à|uZ2 ŒìONeÁ±SœÌ(ýaŽƒWÒxdÕî‰hHLp Á|´rMf2&Ró 8—•ÍÎk¬m6/lÙC°P¢ýôðÀO§Å†ÔüNed±îü%Öž¿„õšc™´×šuð!zêzøít+‡½É)d\sÞ•û¨¦íÛ~‰÷ýLþMi×)ŒþxûêÐhUä™IIÊáôñÎe”š>?×ÄO®àï´¥uǺ†x¢R+ÈÉ4’v%—c“رá\µ”=éb¯>¾œ{Ƕ%ºC]¼}uä›I¾˜Í‘}‰ìÚTöJþL`dùÊgûÚ³¤\ΡÓhÑ6”z^è Ì&+iyœ‹KeÇúsl_w[ý¾+$_ÊæÕÇ–3|La]ûú{“m$ùR6‡v]bg5Ô³³û·2õ,„B!„B!„¨¼ÅÙ‹8e:ÉC>ÐF×½BÏ%ó%Vç®d~æW%F¾V]U=¬XI´Tì›9¶l²¬YdY39k:Ãþ‚}¬Ë[Ã9ÓÙ —»*ùºƒ ¯^y‘nú;ˆÖ¶"LŽ^©'ÇšÍYÓ¶åoåç¬I³ºö¾¶53ü寠jÔUh Ÿ:(TZlYX¯œÂ|j3¦ÃK°¸þEߖ˱hø;æ3Û°f^r˜g<ðêæ}±¦ŸÇfÌ)%µ‚-Ÿa:¶m»{QÕïˆÂ;…JWXöÔ³XÎï.)Ø¥iËfËN"å[è‡}„2(]·'(Øø×86y¿<ƒºÙ]¨êµFé„Âà6+ÖœT¬É'0_éØJ°Y+•ïõX.ì#÷›ûÑÄ<€ª~G”Þ!(<|±s°åg`ËIÁšzóÙí¥¦·¦œ&oɳ Ò¢ô Âf³`ËN@Ór`áæ™ JM[]òþÃßAÛ¾p”äìoÁVì0±åBê„‘”õAÛ”þ`3‚%LÇÁø'˜]y»Ãj!ù«˜ãÖ£i3U–(4X31ŸÚ„q×|l¹©.̰Édbܸq 6Œ{ï½—¨¨(ôz=‰‰‰lܸ‘9sæpñâE—ç{­gžy† &0`ÀêÖ­K~~>'Nœ`õêÕå>«™™Éwß}Ǹq…Ï{\äs£°X,üûßÿfåÊ•Œ1‚6mÚ ×ëIHH`íڵ̙3‡””ë¿¥K—2jÔ(:wîLݺuÑétdffrêÔ)vìØAZZõ=ó´páBRSS=z4QQQx{{“››Kll,«V­ré³(îÜÞ?ÿü“>}úpÏ=÷p×]w…¿¿?F£‘ŒŒ âââØºu«ýÙªâ^zé%vîÜÉý÷ßOóæÍñòòÂh4’––ƹsç8rä›7ovYY­V+>ú(ýúõ£}ûöˆÕjåÊ•+ÄÆÆ²lÙ2–.]ŠÕZ²OqÕñ\“víÚEÿþýyøá‡éÒ¥ uêÔÁÏÏììlÒÓÓINNæÔ©SlÚTrpWªj[0eÊΞ=Ë!C #??Ÿ¸¸¸›æ<²X,¼ôñÁ IDATÒK,[¶ŒQ£FC`` ‹…´´4âãã9pà@©ûÈ™còСC<ðÀlܸ±ÄË8,XÀÀ9{ö,ÙÙÕ?hMEÕÆsÐU=&më®U™s°´Ñ’«{{]­¦ÚW‘ë ¹Þ¸I¿_6gúߪ^×¹º_¨(WåûóÏ?£ÕjéÔ©¤¦¦²sçN>ÿüsbc+ö »;ŽÉšlŸ…BqsQüõÏÁo¼¡8räˆ"99Y‘••¥hÒ¤‰"99Y©ÕjU999J«Õª1 “ɤ<”J¥§Ífó¶Ùlþ›6mZ²{wQbÇŽkpsÜ/""ÂÝE¨´YßLwk€rm"u%®gùлñÔ¨™sø8 Žvwqjµ5Ãû¡Q*ùô@,?Æuwqj½ïú÷$ÌËÀG{°ätÍŒ!Dmðë »ð÷ÐñöÎ¬Š¯þvš´dêœö¿_¿‚“G’k$o!„B!„B! ða³ÒÜj÷v…§ h„ç˜Åäýúo̧ª7(LܼFÅ›o¾É¾}û¸÷Þ{Ý]!„B!„Â%öïß··7Ó¦Mã‹/¾pwq„B!(-ηGC EšB¡È²Z­9@¾F£1æææš”J¥ÉÓÓÓj4-ÁÁÁÖÓ§OÛ¼½½mÁÁÁ¶èèhÛo¼Qâ%7ýÊâúž|ø9w¡ÖºB!„B!„B!„Bq«Ñ´ûGá›Ë¥Ãî-Œ¨µ‚‚‚˜0a³gÏvsi„B!„B!„Bá, PB!„¢=óVO‚ëxÙÿÖzÈ%¸B!„B!„Bˆ~ðûXÓâ±\<€5; Lù(¼ë i9Mô`Ì'Ö`ËMusIEmI^^&“‰V­Z1yòd‚ƒƒÙ²e «W¯vwñ„B!„B!„Bá$‰ŽB!n!·nΘ–ÓF¯ÚL¦Ñä¦ QsƵŠd`£p‡i¾:mµç[¿±?uøT{>B!„B!„B!D•)U¨›tµ®ÌE,—‘¿æ½,”¨í^|ñEzôèá0íäÉ“üûßÿvS‰„B!„B!„BáJ |Ù|p¹[ò½£ÍßÜ’¯Bˆšç©Qã©qìþ …ËÖÿݦÑ.[Wm0²Ç|wAT‚§F¿GÙV !„B!„B!„·,¥š‚í_¢np; ¿p?*-¶üL,IÇ1ŸX‹éè2°ÈKoEÅååå‘‘‘Á` !!•+WòÙgŸ‘““ãî¢ !„B!„B!„Â$@ù"ÂBÔ~[²ÚÝE¸iôùy¥»‹pSùÇÆšÉGvÅ ìã}GùxßÑÏ÷Ù­ñ<…B!„B!„BˆJ1`Üù5Æ_»»$â&òä“Oº»B!„B!Dh×®»‹ „BáJw@!„B!„B!„B!„B!„B!„B!„BQ{H€²B!„B!„B!„B!„B!„B!„B!„¢Â$@Y!„B!„B!„B!„B!„B!„B!„BQajw@ˆÚÌà¥E©TYàî¢Ôj Z­ŠÌô|wEQM °ÙÜ] QéËj–œ B!„B!„BQ{hZ AÚóù=˜O¬uwq„B!\ÆÏÏæÍ›“žžÎñãÇÝ]áb¡¡¡4oÞœ+W®pôèQwG!n*ÒÆ !nÒÖUœÔUÍï°BÜØ$@YÜ0ú äÞ±í°Zm,œ½—Mœrw‘Jåd`Üó]¨ßÄÀO¾ü`;ësw±*ìF©g½§†§^¹ƒúMý õâ‡9{ùmÁa·”EQ¶¦÷¡ÍíõÊœÿÑËëÙ½ù|¹ëhÒ"±ÿîÌçïl!ál†«‹èv_­‰Î£ôKª/ÞÝʦ7^檾Ì}J›Ûëqç f4‹Æ×߃‚3©ù$^ÈäÀŸÙ¸ü$ùæJ¯÷FT•sá©§žbÈ!¥ÎûàƒX»VˆB!„B!„Bˆê¢ëõo:/¬YIî.Š.Ó¦M>ùä /¼ðëׯww‘0fÌ^yå•Óãââèß¿…×#ûWÜh䘼qmذooo¦M›&wß„V®\iß¿$qcsW;)í³U'm¬Α￵ƒ´u'uU3ä;lÕ5nܘñãÇÓ¶m[êÕ«‡Ñh$!!dziÓ&þøã§ó¶](Ý]!C<ó¯Nøø{à¨gÜó]ðñópw±Jåå­¥]ç0C<Ý]”J»‘êY§SÓ¾[8Áu¼P(ÜR!D P©•<6¥+MZòÎÜAô¿7JÎù€+ú2Wô)ü«/LïC§^ 6 R+1xj©[߇˜.á<òÌíøøß˜×•UÕs!??ŸÌÌL‡6‚Y!„B!„B!„UôÌ3ÏРA‚‚‚xá…Ü]œ S*•4hÐ¥Ru*OmÝ¿âæ%ÇdåÜjm3Û{«Õ•¸y¹«”öYˆ"µ±O©eÂÕ¤/«i7*NêJÜLbbbXºt)÷Üs üüüˆŽŽæþûïgÒ¤Iî.¢iÛk¯Z9‚²‡‡ŽŽN½:!,Xü;G—?ZŸhÛªÛES74FMvN.§Ï]`ËŽ½$&]©™‚‹2ùéQ(‹¢tTj%~z2Óó«=ïþ÷FÑ,:˜°F¾$]Ì⣗7T{žîâÎzBªÍmNN–‘¤‹Y%¦•ç¶;Р©?­ŠÑo£]—0f¿»´+¹ÕVÖš¬çü\“ý³B¡@«SU[^7gû”.½Ñ÷ïÍË]äKÙ%¦»ãǦ¼ ,ÌZ@¶µäo•Φ-MŽt÷èI{ö«BI±\á¡Ä\µ©…JԽд自^læ¬iñ˜Om´÷{l/³ÎP×‡àŸ ?§Œãþ’ËxïǤN„‚¥¯K†{@w(ƒÀ––D0ŸÀr¡Ú6£Æ 6Œ?üðºËÅÆÆ2hРRç™Ífûg‹Åâ²²U§=z0kÖ,ôz=­[·&7·úî3ºË‚ øé§¢>ô_ÿú£G®ôzjãþ779&+îVhëŠsf{oµº77wµ“Ò> Q¨6ö)µ±ÌB'ßkž´'u%n6ï½÷z½žììl¦OŸÎ¶mÛ°X,„††Ò¢E —å#m»¨uÊ~¾Œ¼wuCƒ*´¼J©dÄ=‰Šlâ0Ý×Ç›˜ÖQ´‰nÎOKWsàð±ê(®¨ øSi$]Ê&¤®Ïep.£FòîwO BüHO)?¸¨¶sg= ! Õæ6çÈÞK|üêÆJ¥Ù±þ,I—²öPk:to€Bmn«Gï!‘,þo)O˜¸HMÖóøa?Ú?7ŒàÝÿ–þ°ÇÍÆÙ>åÎÍþþnÖ¶¬> 6ñ¤~?ôM©ikú<2xi™2­7Í¢ƒ¦×kèK½†¾ôÁû“×ròHr™ëp×¹ „B!„B!De)Qò¤ßòy%Å^ȨЩmN¤¶9ƒ<‡ðÏË“h¾TmåS‡óAÐGDjËÑ¡+L žA}/‡ij…š(mK¢´-ì9”G/?L²¥äo€Î¤-®µ® ÿöžVÚÖÓu m•¶©<ú¡ÓQ7íá0M¡U£ B…&z0¹ ÿ‰-»ü2 Q´1àýháçœÊNV€Ï$ðØD¡¥h"Á0.ß ¶òß½{K˜1cuêÔA¯×3uêTw§B<==Ñëõî.Fµ2F‡¿«¢6î_qs“c²ân…¶®8g¶÷V«+qssW;)í³…jcŸRË,Dqòý·æI»QqRWâfIDDS§NåÇ‹bΞ=ËŸþé²¼¤mµ&@Y©Tr{ûÖÜÝ« :]…ÓÝÕ£Q‘M°ÚllÞ¾›ÝûŽ_P@ý°: ¼»'~ Ô‡³ñ ddf]…¢Z ,¼þÄrz l†Õjeýï'±˜­î.ÖMGêYá§¥ðÑË¨ßØ¡µ&¼±KþwÈÝÅNr¶O oâgÿ|t_"¿/þÅà‘­ðñ÷ào÷µdÑÜ}×Í_Î!„B!„Bq#»d¾È;©o’eÍbKÞ&‡yÛó·2#x&Ýõ=覿½BOž-Ï>ßl3sÉ|±Ìu?äó͵-0Ú xùÊŒ×D ôÌ8ß'S‡ÛóëâÑÍ…[WºÕ¹+Y»E¿×4ű=+ê 5wú”%Ùiºê»órÀëXl>H{—Ÿ²a¥z6[ùØj(Vfë•“˜ÏnC¯Ò nvꈞÕZ!®K þï2¬™ö|éƺîEÁÉyË ýM(~ ™ã!o(ÜANVù¯æÕêTôIÇ;ÞØƒ—†ü<3Yéù$_Êáè¾DVþK~ž¹Ôôj’®}Ó¡[}Gâí§C¡P™–OÒ¥,î¼Èº¥qåŽòWQ wŒ I‹@ê„ûàí«ÃÛ×VEVF>''³bÑQNN.‘ö«U#Ñy”~~ñîV6­8U£ù¶¹½ßm]bú×ïdÕÏÇJ-GŸ¡‘ M`¨'y9&NÅ^aÅ¢Xï¹TfÙ+ë©W»Óíî&Ì~o—Ÿ,sÙ™‹ï!0¤ðîê¿FüÂå„,·ÕóU­;Öåo÷·¤iTZšäÄlb÷_®È¦£T*¸£Sº÷mBÃtz5é)yÞs‰‹b¹p&ÝaygëêZU9«Âà¡ÏÐHšFQ'Ì/_^>…çmzJ.±’X¹8–³q©¥¦o@ÿDÞØ_=>~(…ÁƒqG’Y»äG÷%–™¿3m޳íT­ž•J=4¥kïÆ4ˆðÇÓ[‹Éh%#5˳¸p&½[/8lwÛNaL™ÖÛþ÷û“×ràÏûߟþt/Áöm¿À´)%ßSÙc\׿Ät ç®ÁÍhŒ§—–¬ÌNǦ°~Y{¶œ/³®\±\©¢™•íË\QÏÁu½hÛ)ŒVêÖп jTj%ùyfR’rˆ?™Æ_î#ébÉ6ÃYmn«g?FO½ÂkO,¿nWìßÊôeÎô)e¥½£Sîèß´Äôׯ¯àä‘ärÓV¥ï®L=ßÖ½¾ýs~ž™ÏÞÚB~® €ï¿ØKý&þ´ë\ø†©®w7®P€òUœ,„B!„B!nT+r–•9oeît×÷@…Šu(çLg+´Î:êº<æ;€y_o.yÿ6\]Ÿ0u8çÍñÌJŸÉŸùÛY¾¥ReÖ¶âïQ´÷舿ҟ,k& öómÖ|ì/5Mñàâk,ØÏ]†>è(Q–v&­AéÉ›o£DÉ멯ðG9õîZe—Ù’pu³»P¨u…ÃÏÚœ–Ö´ŽÇÝ/aM‹'ç¿ÃË]VÕðv ÷ΖLöì’£q«êD£i?uýö(ôþØ ²°$ìǸû[,–¿n'Ò–F¡÷ÅðÀQ4ÄšršÜïÿ‰­ÀñÞBc@ÓþÔM{ ôo€Bë‰Í˜ƒ-?kz–ó»0îü¦Òy_®ëc¨tBáŒÂÃ…J‹-7 ËÅ÷~íU iÑuô`T¡-Pxø`3`ËMÚzkâaLGW`M/ûÞ”+ø½ Ú¶€Ò_K·ß½+üß|2Þ†²âûmÕô®Tu³;Ñ´¹U–(Ô:¬™‰˜Oo¸ëØrK¿·ëcÆŒá•W^)1=..Žþýû—›ö­·ÞbäÈ‘äææ2dÈΜ9Sb™>úˆ¡C‡ÏÀÉÍÍuºÌ‘‘‘¬X±¢ÄôC‡J¾¥ªmlm¼fpöx¾Ž+W]3Tå;,¸÷ܯIîîË ö|ÿ­mÜšýÔü9XÕzÖétöëËI“&ñûï¿—X&66­VËÔ©SùꫯìÓ]ÕN:ó¶ªõìlëŒêüÞ=mÚ4¾øâ ——¹²¤m¯UX[,—c]œ `Ë.|¥BïwÝe•†Âß«­Y%_v¬»ãi´·?â0MaøkÄç;É_÷¦ý?–º^gÒ–F¡õDÿ÷OP4Ä–u™¼Ÿ'– NÖûb¸.ÊÀÆŽÓ=|Pxø ô«B©¬–eUãn¨êD;æë‚ºùݨ#{“¿j*¦Ã¿•Ü.Áï£nܵÄt…¯¥o=hÜ[~6ƽ߹¼ÜWy? úA…Ÿ3?„‚¥/§n š¨ÂÏ9óÁf*}¹j¡TáÑÿ 4QŽôÊ€†hBÓj(y¿£G%¦ êׯOÏž=ÉÌÌtxPÚœ©gw>Üñ2ÁÁÁ <˜¿ýíoLž<™%K–”HãLë.U-óc=FTT”ý"""?~¼Ãr<ðAAA<þøãN—õòåÂkက€ë.TøìÔ¥K¥¿Í¥}ûö‡‡‡3bÄ ÄÈ‘#‚W‹«j›ãlŸâ gÚ«ÚØ—U„ÙìÚgÁ¤}®8gvíÚññÇS¿~}‡éƒÁ@XX999¥(»ã\p&­;Û gUµ­m× ÎÏ·Êqåì5ƒ³×Wî:÷k›[ñû¯³jº­»ûwœƒµ±¼ª*ßaÁ¹zvÇo#µñ{·»ÜŠmûx=Y+”³²s9Wò ¬×S`4’p)‰°º!ôêv‡bãÈÏ/ iÚ¸ÁþX,©žà›þö »«š\Pw­±Ïv.ht­ÔäÜRG?ŽˆæåOú¢Ñ¨JIUäl\*™é`ÀY <òL'üy‘´+E7£Šù(ŠuUùjujŠÂÏV« “ÑRb=fsåo¾?øômìÝvÔdço¾¥ žõжáýP9ÙF{>WƒnórLó `rW=×oìǃOw¬Ò:U*E© ù*<øtGÒS󨶦°p¶®Š«Êù[ ñx{®$f³}íY‡yçO•µ÷Z÷þ³ûÿLàÌqÇ7¥8Óæ8“öªÊÖ³J¥àÙwK'W·ª“à|›óø ]K'_«{ß&œ?ÆÒïŽ8LwÅ>ªiUíËœ­g¶bmcvfɉÙZ¶ºU÷þ-­/s¦O)ž¶øK",+fSɾÖZl„ášè»KSPP´îÀ*•Âaäã”$Ç!‚=%@Y!„B!„BÜÔî4ôàŒé4—-{IhcMúyñ}‘ñF›±ÔåR,WØœ·±JåzØgŒ=8ywþ.feÌ$Á|žê†Lð{†6ºv<0…ƒÆýœ0/w]^J/ši"¹ß{$wz“oËç“ô+TŽÊ¤äYø`Iª5…éÁ©iA *[G ±(k!Ûó·V¢ªF¡óBÜ m̨›Ý…Í”OÁÆ]¶~kvÒ_ùxƒJ–²£H†Â Û_i®ÒÞþ°=ÀØr~7[faM¿€Ò¿ºQÕkƒÇÏa¹xkÒ —¥-µŒ>èªN4ÖÌKä-zkfÉsAÛùÑÂàd‹‘‚-Ÿc>³[n¨5(½ë  mÍX=œÆmsÀjÆš‘€­ ”jTuZ¢ë1e@#}:ñññ4nܘ)S¦Ð¾}{^{í5öîÝ[âAÜ &ÑhäÃ?dÆ ¤¦¦¢Õj©[·.­[·&;»zîË~òÉ'˜ÍfâããÉÊÊB£ÑЦMžþyš6mÊÿýßÿ±zõjÒÓKÙc£*i©gWl/À¾}ûøõ×_9qâiii˜L&|||ˆŒŒdÿþý˺ó˜œ:uª=øméÒ¥,^¼˜Ë—/£Óéhذ!3fÌ@¥ªž¾¬*õìl[ç &“‰ï¿ÿž•+W’™™IË–-yæ™g¨[·.|ðÇçØ±ciªÚÆ:³½îî>úè#¾þúk:wîÌœ9søßÿþÇ'Ÿ|B¯^½˜>}:}úô¡Y³fÄÅÅ•Wå×u54 &SÙ×ÏW”ËêËþüóO,XÀùóç±ÙltíÚ•‰'âííÍûï¿ÏàÁƒK¤q¶Íª¿®R™öÊÙí­j_æl;ùé§Ÿ–:ÒY÷îÝ™={6 …Â^®Ì÷ª[¡}v–3×9-Z´`þüùxzzb±XX²d k×®%>>…BA`` 111×­&Ï…ÚÖn¸ªÿ­J µïšÁ™ãùV:®®ªê5ƒ+¾ÃBÍžûî ß+®6¶uÅÝ*ý‚»ÏÁÚÔN^U•ï°®ªçʶ±Î¨‰ïÝ®~¡QUIÛ^yîøŽs=µ"@Ù+ÖnfìÈ¿ãçëÃø1÷³jý6ŽÅ¡i£pîVx³hùšÍ¤WÓÊ—â3±Ym(” û´Äó™e.¯Ñªì£ðÄî¿Ì—lçÊålÔj%¡a>´Œ ÅÓ»ä(ÒJ¥‚§^éîÐw$™Õ¿çl\*ùy&ôz õ›ú—Èã*?}+Nâí«c胭¹­G´:z5äűöeÇ+ŠÈoÀ»ÿTãùÎøþ¾-áðîK¼÷ÜšJå»þ÷8Vÿr› †nM§^ ò]ñcìuÖp}i)E7¦=þ8¸Ž|3(Õ‘]ã1™,N×Uq•=]iá콬[‡F«¢Gÿ¦Ü7.ÆŒ7r|vn8ç wår6Ÿ½¹™³'SÉHÍ'?Ï„ #¢éû÷æ@a€s×Þ”isœI[\eë¹{¿¦D´, N>:ÿ~´ƒ gÒÑêÔüßç -9ꮳªzL‚smN«ŽuérW#ûß»7dzpö>R“shÔ,€>×™°F…# ÑŠ?~³ÂéFûŒA‰’‹æ‹ü‘³Üåå V…ð˜oá[ö×ç®ã…+ÏÚG,Nµ¤òtÒüTo)Áª`Fyæõ”—K]·Ò›uá[¦4ÅñzÊË× j®lÚ@U4…#ëö38ŽÀªUhé®ïAw}æfÌfvƬró®*…ί§£:­WN’·âµ êV”-믇c ”žAX3 Gw+ nKÁæ™X ÞQx‡–#³h8…Wº.`Ž[OÞÒ)öÑ-¹©ä-~ ϱ?£ð FÛaù+^wIÚÒ(¼‚1Ü3ePÖÔsäýôT©ÁÉP4µ)öŒ»ÿç0Ï’•T­#ëšÏ”üÍÝ|jÖÔ³xŽY jêF]1Å®°ÏW†4/ ¸=°˜ü5ï9®àr, ø? ú”=z€ç¨ÂÏy«!ó£ò—WÞªÆr ¬å/ëJJŸºh;>€éðoä¯|Ó>ÏštKünïèÑ£ìØ±ƒßÿ???&NœÈK/½Têz>ìt½oß>¶nÝÊ·ß~K`` &LàÕW_­ò6ºŠ³û÷ªC‡±eKQ_¶{÷n233yë­·hÒ¤ íÚµs„ eÒ¤I¬ZµŠ§Ÿ~ÚžwJJ ?ü0kÖ¬!44”±cÇòÜsÏ9äסC–,YÂܹsæ%&&^7èÆ6l(1mÍš5œ:uŠ•+W¢ÓéèÙ³g™£î8slT6­³õìŠíX¿~}©£Å­qó@”J…}À•ËŽ#:ºJeê9¦KQàÜå„,æNÛNÂÙ .œIgò“åæs×àHûç‚|3Ó¦¬ãØÁ$.'d±ö·ü¶à°}¾_ ž¶ë®­«Êž¿®”•Q@vfiWrYòí!6¯Œ¨nÑ”ÕórÓC‡qôèÑÿÖ¯¯žá¤¿ÿþ{V¬( j÷Ýw™8q"}úôÁl6óì³Ï–Šv§aÆ¡R©0›Í|òÉ'%æŸ={ö,±îÔÔTÚµk‡ŸŸ_‰ùîpæÌ{``ƒ *•Ö™c£¼´ÎÖsyœÙ^w)ï˜2¤pð‚üüüRÏ}w¹Ñë¹´ÑyY°`½{÷F¯×ÛçUg[]\]æ«#=Oquäs§Ë›žžneéj²J¥âþûï§C‡ôíÛ×¾ìÕùçΫðúÿýwûç6mÚ8Ì«Î6§¼ó×]n–¾L©TòñÇãïïOVVO=õùùù5ZiŸUõØˆŠŠ"&¦ð7€™3g–œ\œ9nµvãzÊkc¯çF½f¨êñ,ÇUůÜu}Uõ\Ýjßá®¶îfënÔsðFl'‹«ìwصžËS¿wߨnµ¶Ýד7}€2@ÓÆõñðð ÀhäèñS˜ÍEMÏ®iѨZó_ùÓ1°§ïYÌ”G~#9±ì!ºósMœ;YLÓ%œéßcȨV„Ôó.3@tŒcÀâ¢yû°Y¯sÇ®šåå˜HJ(Ú^¿@×ÝȾ•òM¾T´N/o--ÚÝzèÕ4l€ÁSkŸvùbõŒ ^\yÛëãço@QǾoû… ¯W£U9ÄíÝvìLÇ·ul[sÆáïm luu]Uæü­N—;t—0¨P@£ftëÓ˜A#¢2ªw nFNVÑ`½§Æ!3mŽ3i¯U™znU4zrìþD/Tÿ¨ÖΓÎjÙ¾¨mÏÉ,`À}Q ÕÊþ¯ÍíŽÐWGS×r#öeÕéÃo‡ñݦÑöS¦õ¶Ï‹hä0ï»M£éÒ»‘}~uí_wõ¡ÕÉ™zÎÎ,àÓ77SïøžJ]úetVzÍÞàB!„B!„¢&ÔW7`vè<ü•þÄ™NðFÊ+N;ÀsZ…£­€e9K«¥|1ºö6äŠåJ©Ëœ6À_é¿Ò¿Ôe²­Ùt9ßÞzðÏ˳8{V›•» ýø<äK´ m©éª’ÖOUô{þû©ï°¯`/©–Trm¹*8ÀÓIOñWÔå=^÷U¼2*ÁVMÖŒÎdv¹ßÅt`1ج¨›÷Eß *{{+WFáˆnJŸº¨êµAáQø€‘ºQQ`°â¯ù¶ô¢eUxáþµ\:„-§ôýkM)Ü¿ ½? ½¿KÒ§ ÂðÀ<”>u±œÛIÞ¢ñØòÊŠ5íýlV”Mðû ºîO¢ô¯™B:/´Æ`¸ÿK<ÇýŽ÷¤­x=¹ÈÿÚƒ¥jCUhK,ÉqØrSk¤œ×2ˆB³Aݰ‚ ˹•¤n !¿þS7vºˆ@ÑèØ–ä“e©›Oo@¡ñ@Yê2µÑK/½DBBÞÞÞöÑ%þóŸÿpôèQ7—ÌQûö…çþñãÇíd]kݺÂmèõzZ¶lY©õ¯^½ƒÁ@TT”%½ñåææÚ p˜wûí…/òÝ·oŸ}™kúˆÅ‹7êúNGâóIžö£¢“—çú![Á›cá\‹ Q_Œ…À¼fð´?K¿j8]«4v;¢³íûocòW¬knÇoCøëÚÛØÎõ}‡mÎí\Ÿ@üÛœm±½¹^OžÕ#(‡‡…0 ßù|11…ÅŽD6›ÝΟ;vñÚÿ>ãØñ<Ô*ƒ.èuºE5©#Jxø†ïùá‹,*ˇŸo×%–ûžÌ}Ï®wä>‹ÉÖlFœ¬ý›jSvð³i½v›üãå„GˆŠ "!ÅñDñò2GYÇnñ„„|ÂASŒ ì¨ÛÉ×µ·÷ÔMWk|n …Ó:ìöõi¾må ³©þSB‹P~åâ3&'×Ç›˜ã‹xåÅ)‹1¦]\95.ªÔ¾‹ õõIo¨=h7»ÕyÅM½|©9ËKE…‰Šò“µGéµÙìNŸU”›°˜oTj¬ýë¯shcñ¶Žå”ò¿—×pïÕßrýÅŸrð9,ú"Ë©mÿ\ßx»B!„B!„Â’ÔÉ5ÉÉûÍÙÜrüFòë¡Ø•HU]tŽ‘F—”7ÞMÒÊ¿ö¶aÅd7ñOKÃG^U¹’­ÕޤçÞú¾g˜»áeMö“Š S†º,Äâ¸y;FåzŠÆ`Ù· ëá-¨ZõñÙrmÙ(ÃP§Æ^Yˆi#±QÝf ¨u(Œ‘ØÍUN£ÒÖüŸÚn«é̵F~ö¦¬S»d¯Æ^] Æq¯¢NÒ í¶ìþ…²wFQµèÉ“íšØÃ¨ç š<eŒ¯GÖU`õ¼#9ÙRMõ²W(g$¥ÿéCÙ¬”|5öÒc.KÚ-'É+ýûàÒª%Px/ØM Œ„ÈÿB=ƒžó÷!‚*Ʀ«cÍ/'¾øA0À(•J®¿þúš÷AAAÜqÇþ«P=NûöÎw‚Fã£l÷Q_ûœhg«ÕŠÉd:ãŸV[7Æ.Y²„þýûsß}÷±aÃÀ1J̬Y³X¸p¡ÏG¨V(¼öÚkÄÇÇSUUÅôéÓ¹ð iß¾=]»veÔ¨Q9âùƒ¼éõ•õ¦{{ý¥¾>YUåx˜´ZÝ´c¶œ­íl±œü]½v›7vŒm Xç£4H@>|8Ìž=€!C† ×ë‰ŽŽ¦²²ÒíÄÏ7IŸzOˆ/bûé4‡¶­-Ïeµéõz^zé%T*»wïæ…^h´u5„Äggžô w㕯x{½áiÙ†hnq£!NcõšÁ›þ,ýêÌüu­ÒØíˆÎ¦ï¿Í_±®¹¿ á¯kooÔ×ε§+•Í+÷àLßa›c;×'¿Ã6ggSloÎדgõÊmS[¢R*)-+'û`ÝÀ˜Lf֬ߘƒIINhÔºh´*‚Cuæ5ìiâE•|4ë>{s{&Ðk`+zHA§wì²î}“qE¾ÿl[M™Âüʚ׆ ñÉ¡=Ô4£‹ú‚Õêœ T{´ÒÆälšqÖá%Ä&†e koÇ“KŠªXú1öº.tÈŒcÓš“OS=´¯ÈåršªKŠœGŒM ©gÎºŠ «°Ùì5u‹Ž®3O|’óòj[¾j«Ü=~CÄ)£ñ–Ÿ|ŠþEcÒkbƒÝÏúƒ5?gSZ\…F§æ¶GûÑã”Ó.ß“˜ã‹²µ5¤+ËÍX­6T*ÇmD´{wœHR?!8¤aOõñ¶OÖæNÌ©ü;QòD‚ÿo?íãµg~mPkóÕ>j ¾:—ù+¶ÛNI¨>SŒ}üæ…Nï»öJâÁŽQöîÈç‰[º*æÄŸû7PÎݾhçS‡ê˜|çùNÓ–}¿Ëíå!„B!„BÑ\)ƒx%f1ªYrËñ¸•œ 0È0%JªíÕ¬©ZÕH5…\ëqÒiÇO‹y,ï!Ÿ/ÿ˜õU=Y’”ͳæÖ¼NP'‘[ëý 꿇{µØ-u>kLö²ã( §–ÖM¶<ÇÓ硉¨:¡ MļésÌ;£ë'êôÁX¬…[Á>§'iÚÊóPÒóΟ¨Zð¨{ëõ¢lmÖƒë©^ò<†±3QF¥bùo**±ìh@â½ÕŒyûÌÛ  MDÓy šó&¡Œjq›”x%ö²ºûߪ¸v(£R¨Zü æ¬j>³[ÍØïÄn*wù¯u{ñaˆÏh„¤i÷U¯¢G âP§@ä+3ØŸÕŠùÄÀ¤JÐ÷ƒÊŸš¦~'ú•âï„{W”¡'ïA±—7ÝÈg uâ·wT{ÇwЧO***øþûï™0a7ß|3¿üò k×®mŒª`³Œ ©óñãÇ騱cͨ“®$&žÜ¹¹îƒ'F¶ÈÏÏw«lCysc¡§û×]'ÚyáÂ…L›6Íãå˜Íf¾ùæ¾ùæ’““¹âŠ+¸á†HKKãÓO?eĈN£àx£cÇŽ¤¥¥ððÃóÿ÷Nõؾ};eee/ß›¾Q_YoÚ¹±··¡šªO:tˆ®]»6ùý¾jgwc]c«/Nú*Æz³½þ>/lܸ‘òòòÓŽfå­]»÷$''Ó­[7’““ùøãY°`=ôÇgÕªU( öìÙãÔ&ÞðUlÍå\æiœ¼ï¾ûhÕªf³™»ï¾»&¸¡$>7þyÐݾq"þ„……Aaaa£ÖïoŽ…@Myþ ôkwûó¹Ü¯Nhè5Cc‡=ÓzýÝÎòý·q¾ÿÖˆ±Î_š²­šË1è“É„ÍfC©TÒðü úøò»Õ™¾ÃR;ûë¼àKÛó›Þh^,ð±à GâšÉd®wžê¿?Ójïé¦ÃÆ·çÝEyíëËyq‘ØV›¢VrÙleÃo‡xãÙ•Ü=ñ rO&¼eöIv*·s‹s‡pc·:£Ø6ge%ÕNïc¼?a5DuÕÉX£bšð±ÊnÊÉ. (XKŸÁ­Ø¸êëW:m F ½ÿžnª¶r4Çõ¨ÀMÕÎ¥ÅÕä+¯yßã‚è {&‚ÙdeßΓ?¶tï›\§ìÀ‘mÞï¨Õÿ}ÕVàþñÛXº_ÐÂéý½'ÿñW+1öè¡~ø2‹¢‚J¬V;Uf§‘B]ñ4æx[¶¶†¶³Ífçðþâš÷ÏO@«køSÜK ÿ ›Ú!ºAå¼í“µ¹sìvصíäc÷~Én%ûJIk IDATƒïöQSñÕ¹Ì_±½²Ü9 >:®qc†¿÷ï¹zîNL ã±W‡:[ÿ8Ž;ÿÇB!„B!„þòHä¤jR)²rçñ[És39`€q0«7PewïFiwl®Þ@O}otІ=œÔ)ê–ÛŠÏ0gÃËî0eÕ¼îg¸ÀeÙtM{²ÍÙn¯×Êǃoí•îoo}¬ù{ËKDÝáÌY?`/=†õðT‰]Q·ì œLf®)›ã…Zݲ'¨ÝÛ¿Þ”=•­8‡Š¹7:FBV(1ŒxuúEî-£ä0Õ¿½Aŧ“ÁfA¡E“1Ê«zÕ¦0FÖ¼¶ÿË­²–ý¿  OF6ÐguòTÕ/Pò_ÇkM'¹­î<¦?Áú÷`A×ÑdwÀœèWªè4§DäÚÔm`7Wº½/šBe¥ã¡ÁÁÁ ÿ-«wïÞüóŸÿà‘GáÑGeÍš5(•J^zé%ŸÜ”XŸõ´žõë×о}ûzoä2Ä1zEEÛ·ow«>ƒ;ÎoV«•;v¸U¶¡ª«¿ÃîÿæÉþõĉvîׯz½Þ'Ë/<÷ÜsL™2…åË—7°Æî;‘ Ü¢E ÆŒÀüùó9rä6là¼óΣ_¿~üõ—ï®5#¶7gÍå\æIœìÞ½;“'Oàõ×_÷(þH|nZ éëÖ­ÉcÇŽm²ºys,zÜhÊóïÙtÍÐþ|.÷«zÍÐØßaÏ´^·³|ÿmœï¿µb¬ó—¦l«ær ºëøqÇNO$Iz×߭Îô6ÚÙ_ç_’ؘÿÛôÆY \Päq12"ŒÄøX—ótîàH(ËÏoœ§LÅ$sÝç£Ñ8èZ¦E0é¶óê_¥VòÚW—sãý}Èì›LD´F…Þ &"ƈÅrò‰§ŽR¸î׃Õy²÷àV<öê0ú\ÔŠÄ”0"cŒ$´¥C·8FNÌ@¥n^»¿¸ ’ŠZ‰]ƒGµ¥k¯$bâƒiß%–«¦vw{´Ô†È¯•D›Ô*œË®íLBJ(1 Á¤eÄpåÍ™´nåóõºëPöÉQ~;fưvÅöîÈ#ï¨c:tsLÏÉ.Ânsýĉ¦lç5˲k^‚4Ü=}­ÛE¡':>è´ekBy¢lZÇhâ’B91ƒaãÛ×|^[ÁæßO>5ÅWmåîñëK]ÎO¤uz$ÑqA\0,•Ë®í\ó™©ÚʶõGjÞW”|ClB0Ýz'58¡Ó›˜ãMÙÚÜmçM«sj^ƒ´L{f ­Ó#‰‰¦×À–‡ÕsIA^•å'Ûkà%i\04•˜„`RÚDÔŒTìŠ7}²6wcÎò»O®×¨aúÛ—0îú.¤eÄDjû(z jÉõw÷"µ½s¬òÕ>jJ¾:—ù+¶ççVPUyò¡C.K§kï$¢ã‚h›ÃDÆØæ°Ï•s·!HCBJ(½µäŸO\È Ž"¥ÍÉÑN ó*xó¹ß|¶>!„B!„B!ü-CÛ‰¡Æá<ÿ8-Ý^†%]´]ØòwqcYPþ»…e÷G<ŒŠ†?ÜôL‘®mÀúª?|V6ÏšÇÖjG’ã%Æ‘§Ï[¨[p¡¡?¿T.ó¨îžP§ ¨A×zh½Ï–k+È›ehšñr$úæ¬E P íy½cÞ¼ÝNeÍÛ¿w$ó"Ð~” ߿ޔuÅ^UBÅ·b=´”* —LG•ÔÍõÌÊúÞlËß‹½Êq?ƒ/Gª¶WÔ¼VÅwt«¬9kQÍH¿úO£é4EP ]ª„ÎèÝ ÊÆ{ð»+ås‰ÊAWƒ®×)3ØóhÚCèÝàrxh³d-›”*´}§Öù\•Цã%Ï»lM; zCœ•$..Ž˜˜˜3ÎÎÌ™3Q*•Ì›7ï¾û›ÍÆ<@yy9III<ñÄ^_€ /¼ðŒóûí·X­VT*•ËÑ/Ú¶m[“ð1þ|,×ûH£©Ûç“““kÊ.]ºÔéÆU_:zô( $$¸N„¯»û×S_ý5‹…ÈÈHž|òIT*÷b¬Z]œÜµkEEŽ{?"""êÏ]yy'¸Ò¥K—ãMßp·¬7íì«íõVSõÉùóç×Ü(ýòË/sùå—Chh(™™™<þøã.Ûß[¾jgwc]cÊÌÌdâĉ@Ý8é«ëÍöúë¼Ð”öìÙƒÅb!))‰Ñ£GsàÀ6nÜ8ê¨P(˜:Õq²sçNŸ­×ÛØhšË¹ÌÝ8©R©˜>}:J¥’}ûöñæ›oºQkÏ×ë©@Ïžð´olÙ²¥&Ñàî»ï¦GWÉZ¼9=n4åù7P¯<íÏçr¿r—¿®UšK;Ë÷߯ùþ[[ Æ:iʶj.Ç »6ovü®1|øp’OÃé¾Ãb;âwØSIloÞÿÛl δÐët5?$éuÚšé½Þ‘Œf³Ú0™O&žíص—ÊÊ* =×\1Š–þÊî샘Mf¢£Âз'ÒSX·¹q2Ç’CF7ˆO­wþäVa„G<ª-ƒGµ­w>€­ëœ“ßÌ&+o½°Šž\³ÎÝâèÐ-ÎeùÍkspoã$f{Ân‡õ+qá0Ç> Ðóà ç'NoßtŒÂ¼ WÅ=¶}ãQº÷;9²ä„›2™pS¦Ó1}<û¬µñ|ÕVÔkPKz jéò³%ów:%@nY{¸fªÔJxñ"*+Ì”—˜Pª„EÔÿ4obŽ7eks·³“a—w¨9¹[ï$ºõvýd˜SY-6V-ÝÇE£7Öhu*n{Ìõ¨§ò¦OÖænÌYùÓ^úhCFwGR}p¨ŽËoèÆå7Ô½Ù%'»ˆ½;Nöi_í£¦ä«s™¿b»ÝfgýÊô»øï®çÁcl–blsØ¿çʹûÊ›2:®½ËÏŽå”òÊ#Ë|¾B!„B!„BøÓu¡SØZ½™ÍÕ›Qº)À†r[¹ËÏZjZ¤t<ÝüÏê­ ^w°2Åß? +O>]¯4ÔÔÃb·Pi?™¸sÜzŒ÷JÞfjØmŒ Ëyú|Uö9Ùæ}ä[óÑ*´$¨“è®ëÎ ÿÆŠµ¦¬Ÿ&|Îo•+Ù\½\k.»…hU ½õ}˜⸩¥ÀZÀ×e_:ÕÕ›²ï–¼Í«1¯¯Nà?±³ùoáLYÑVÛ–'"ŸA­PSb+æóÒÏÜ~g¦ èº9Xöý†5g¶²\GâpP4ªV½Ñv›8]Í›¿öÝj­f¬y{PŶC¡Ò`Úpr›,;à{kFÿµËr*j/=Nõš÷ÐõЦóT-ÎüùKlÙØËóA­Ešˆ*9“ª¥/8G}P¶^–j*¿½ã•o£ŒIÇ0æe*æ\­È9‘ßxùlìV3–?a=º {y¨ÔŽ$í.ãNnïÑ?=mÕ:¬ÇÿÂVreh‚#¡X­Çzðì•E Ò¢0D€¦žß-ÕT~ÿ†qÿE¡ B?¬ñ’MÝQü4h?e4„=¹—C­ÃŸòÏA?´™44mÓ,û;h{ú¾N¶’£˜Ö}‚¶çd4#Qh˜·|ƒ½ºUB´½ÿJ5öªªW¿ëû øÀ8š P(xýõ×™5kÕÕÕ´nÝšääd^zé%§ùŸ~úibccÙ·oÏ<óLÍôœœ^|ñEž~úiÆÇüùóY¹r¥Ïë»wï^òó󉊊âÁD¥RÕ$cµmÛ–ÔÔTžþùšù>Ì»ï¾ËÔ©S7nF£‘yóæQRRBff&·ß~;jµš¢¢"fÍšUïzo¿ýv¢££Yºt)%%%dddðÏþ“   , ¯¾úªÏ·õ„ 6ÔŒP={öll6)))$''3sæÌz˺»=uôèQfϞʹiÓ˜0a½{÷æÓO?eÏž=äææ¢ÓéHNNæüóÏçÉ'ŸÄjuޱ~ø!&“‰ °eËòòòÐh4$&&2iÒ¤šANÜøê YYYäää””Äã?ŽÁ``õêÕ Ó鈌ŒÄ`0œq9Þô wËzÓξÚ^o5UŸ¬ªªbÚ´i¼÷Þ{ñ /ød¹gâ«vv7ÖùJçÎéÙ³'EEE„‡‡3`À&OžŒV«¥  €ÿþ÷¿Nóû*Æz³½þ:/4%³ÙÌÎ;ÉÈÈ <<œ>ø æ³ ðøã×ÄÉ­[þ}ëL¼í¦¹œËÜ“W]uíÚ9†5cÆ ôz½Ë¿*++1׺§ÚÛõz*Ðã³'<ív»Ç{Œ9sæ`4™3g .äçŸæàÁƒX­V‚ƒƒIOO'22’W^yÅ'õõæXô¸Ñ”çß@½fð´?ŸËýÊ]þºVi.í,ßçûomëü¥)Ûª¹ƒîúòË/6l±±±|ôÑG¼ñÆ8pNGbbb£'»û6Û9¿ÃžJb{óþßfc˜åïúZOÈš0fXÍë»÷ñѼÿ«y_]mbî7‹¸úò‘„…såØ.—½}çV¯ÝèûJûw`ª¶Ö$ÒìÉÊ«wþÄ–a ZîŽÍÇX0·nRõæ59¼ôð2¦>Ü—ÐðÓ1Þ2-¢Y%(|ù¿Mtí•XoÝ“Z…±ù÷—ŸyêçïwqñØvÄ%¹¾± ©û¥1Ø[äÔ—þXq‹Ù‘¹ê§}Œœ˜Q3ï_æžvYMÕÎÅ…U¼üðÏÜ÷ü`‚CëÕÖ«ÕÎË,ã¾ç“Ö1Úå<6›Of¯ã÷eû¦ûª­Ü=~›Âž¬<¾x×y”UK÷ÑwH+2ûœLÖ35Œg~ª 71ÇÛxu‚»íœ¼œw^XÅ­]àѨ°Ÿ¿³‘]ã\ÿ¼é“µ¹sì6;3]ÎÔ‡ûr~ÿ”ÓÖ1©•óö}µšš/ÎeþŒí_¼·™®½’ê{¾Š±Íeÿž çnSuÝ/›f“•e v3ïí N#³ !„B!„Bq6è¦ë@g]W~N®?ѬÀšÏ°œÁ.?k¥i]óúå@ƒ×½0iIÑ„ž‰úwÍë••+¸;÷§Ïß+~BÇu¡SHV·à®ð{].ÿ“’8`9ùüVšÖ´Õ¤ÓV“Üà²ÌqëqîËF©­Ôiº7eVU®äÝâ·¸1l*Ýu=ø þS§Ï+í•/,,¬ssèË/¿L||Üéóââbnºé&Ž;Vïz5 ×\s ×\sÓt«ÕÊ<ÀŽu㕯ìܹ“%K–0dÈz÷îMïÞ½k>+,,<íM|îì_oÍž=NÇÔ©SIIIáá‡v9ß{ï½Ç¾}ûjÞ«T*ºvíŠÁ` ÿþõ.éÒ¥,\¸ÐgõµÙlÜ{ï½¼÷Þ{„††ò¯ýË£åxÓ7<)ëi;ûj{½Õ”}ò÷ßgìØ±Üwß}ôïß­Öq.+--å§Ÿ~b̘1¨T*ìvßË|ÕΞÄ:_p#Á1*Ï7ÞX3êim¾ˆ±Þl¯¿Î MmëÖ­ddd`³Ùøúë“***bñâÅ\z饨ív¶mÛæÓõzsUs8—¹'§L™Róúõ×_¯w¹<òóæÍóÙz½ÈñÙ]ÞöÍ›7sà 70sæLâââ5j£Fª3_ii©Ï”Á»c?ãFSžñšÁÛþ|®ö+OøëZ¥9´³|ÿuðõ÷ßÚ1ÖùKS/kÇ »~þùg>ÿüs&L˜@ff&o¿ýv“®ß“ï°ØÎø¶6‰íÍõ›!`”=µ{ß^}ëcúõÊ$-µ%á¡!¨Õ**+«8|,—M[w°ùÏöóYqa¯>ù ×ÜÞƒˆh#›Ïaî[êõÒlò•ÓkP+Úw#61ƒQƒÅl£¸°’ý» X³l?«ÎÆns]ë«q焯é?¼ Ýz%‘’AH˜VEu¥…üãåìÝ™OÎþbÀ1º£Z£t{ÛJ‹ª1›}û£Rî‘2¿y!ã¦t¥sÂ"ô”—™È=RÆÖ?ްvyýIžªª0óÔm‹{½cQ±A¨Ô ÊKLæU°cËqÖø`½Þ¶³Õbc÷ö\:f:FQ]ùãžšy²w“]T“œx¦å¦lç¿þÌå¾kæ3üòtë“D\bZŠòRe%Õä+'{WëW¬S¶¤°Š§n[ÄÀKÓ¸`h*-R#ÐéÕT²mÃQÎÛî21ÑWmåîñëK«—fc Öк]£†ãGÊXµdß¶ ³Éù¸³Ûì¼üð2úhCïÁ­ˆK !<Ê€F«ÂTm¥´¸Šücåäì/fû†£uÖãiÌñE¼ÏÚù·%û8r¨”Ë®íD».qèôjr”²á·C\8¢ á‘õ?õ£´¸šÇoYÈÈ«28¯_ b‚ÑhT”•TSRTEAn{wä³qõ¡:e=퓵ys*ÊMÌ|l9í»Äráˆ6¤gĄޠ¦ªÊBÞÑrvn9Æš¥ÎľÚGþàî¹ìTMÛ]9~¸”ǧ.äòº’q^!a:ª«,ä.cÛÆ£ü±¢þ››6ÿžÃ¤þ5h=Íeÿâ¹Ûv¨ª4SVRMiq5v’µé(k–理°Ê›#„B!„B!D³®òþ€ ªDÀ1ÊòQëÑ3Ìí=;v^+ú/?–/b|ÈzèÎ'V‡N¡£ÔVB¶9›uUÔIöͱäðxþÃôÑ÷£½¶#ñêx´h)µ—²Ç´›••¿0¿üÊleuÖéMÙÞ*~MÕ™2‘NÚ.„*C)´ò{ÕjÞ+~›C–º¿¡yÃV’CÕÂÇPµêƒ*®ŠÐx*-öêRly{°ìùóŸó±W×_gOYe¡a,–}«°•qúÌ´ù+Ôí†b+:ˆÝäjTn;Õ+_üãG´Ý.GÕ¢ŠX*£îÙX®sŒìÓ²õ³—§êÇg0\ö Êè4týn¡ú—¿G½´Û©üf궃Q%vFÂv¶òl¹aÙùæ?‚ÝæÖzÏÄzh#^‰&s"ª=P†Ä¢Ð‡a7•c¯*Æ^ž­ Köj—åmù{©œ/¨´(ƒ¢±Û­ØË¿©j:^êØ¼‰ØM¤ò0ŽmwÇ(ÉeŸ€½V7±W@ÁŽ‘” —‚¶#(#Ànk.˜w‚éw°øò' ›•ª…cÙµ M—q¨â;¢Ð豕Ųg¦?>Â^QàÃúÞƒ>Hvv6£G&))‰ªª*víÚÅâÅ‹Q(ØívÔj5>ú(_|ñ7Ö}ø¿ÍfãùçŸgΜ9´jÕŠ«®ºŠO>ùÄçõ;w.\wÝutèÐ***ÈÊÊrªó V«•{ü‘«®ºŠ.]º`0ÈÉÉaéÒ¥¼ýöÛäççŸv_ý5Z­–^½zIAAk×®å7Þ ++ë´e}aÚ´iÜqÇŒ1‚„„ªªªøë¯¿øé§Ÿêl全}Án·óÒK/ñÝwßqõÕWÓ»woÐét”””°gÏÖ¬YCa¡óïè6›o¼‘aÆѽ{wbbbˆŠŠÂf³‘——GVV ,à»ï¾Ãfómœüã?>|8“'O¦OŸ>ÄÇÇNYYEEEäææ²gÏV¬XQï2¼éž”õ´}µ½¾ÐT}`×®]L:­VKll,V«µæ†Ý±cÇŽÑ<}ÉWíìn¬óÆóÏ?O¿~ýHOO'>>ƒÁ@uu5ÙÙÙ,Y²„÷ߟ’’—e}c½Ý^œšÚÖ­[™8q"¿üò 99ΆÿôÓO¹ôÒKÉÎΦ¬Ì·×îÞÄœ@Ô\ÎeîÄIW£%{Jâ³ïσ¾è¿ÿþ;C† aüøñ <˜:Éd¢¸¸˜]»vñÛo¿¡R©|öp oŽý@Myþ ´koûó¹Ü¯Üå¯k•æÒÎòý·q¾ÿÖˆ±Î_š²­šË1è®Gy„µk×rå•WÒ®];‚ƒƒ1™L²ÿ~¶mÛÆ¯¿þêÓuzó6Û9¿ÃžJb{óýßfcPüýçä©§žRlÛ¶M‘››«(--U¤¦¦*rss•Z­VU^^®´Ùl£Ñ¨1›ÍZ@¯T*ƒìv{ˆÝnX±bÅüuëÖÕ,«GM¸9þ—––æï*¸íÉ׆Ӯs¬Ûåþ}ÏOü¹îÈ™g€´³8½­ÃyáÃÑ5ïßyq5˾ßåÇ®™Ÿ­UuãêCÌxðg?×(°=ôÒºôtÜD¶ö—ýüçñ_ü\#!Äܹs‰ˆˆàÅ_déÒ¥þ®ŽB!„B!„@sçÎu9ý\ûmWÑpÊÈVMù€ÊoïÁ²§yÞ@(„/lÚ´‰f̘Á›o¾éïêˆfÄ›¾!ýÊÿÚ´iÃâÅ‹˜:u*K–,ñs„B€Äg!„B!„hL®ò|û÷ï?F¡P*ŠR›ÍVTi4SEE…Y©Tšƒ‚‚l&“ÉcÛ»w¯=$$ÄcÏÈȰ?õÔSu2ÄÝÎU!„B!„B!„B!„Bœ34Ý®p¼°Û°ùÓ¿•B! !„B!ÄÙMñ÷Ÿ“§žzJ±mÛ6Enn®¢´´T‘ššªÈÍÍUjµZUyy¹Òf³iŒF£Æl6k½R© ²Ûí!v»=bÅŠó×­[W³¬=z4áæø_ZZš¿« „B!„B!„B!„õš;w®ËéçÚo»B!„B!„B!„Bq¶r•çÛ¿ÿ1 …¢P¡P”Úl¶r J£Ñ˜***ÌJ¥Òd3™LÖ˜˜ÛÞ½{í!!!ö˜˜{FF†ý©§ž²Ÿºe“mB!„B!„B!„B!„B!„B!„B!„"àI‚²B!„B!„B!„B!„B!„B!„B!„¢Á$AY!„B!„B!„B!„B!„B!„B!„BÑ`jW@!„÷ÂÂCImÛŠâ¢öîÊöwuü.,<”6é­(È/"{ÏWGˆ³žBv»¿k!\1kQ*”•Tû»*ç9„B!„Bq¶S†“¦M£ØZÌnó.WG¿Ñt*®=–ƒë±üµÔßÕBáqqq´k׎¼¼<¶oßîïêøDDDDÍ6íÞ½ÛßÕB¸³1N !ÄÙ ãs ÖY4\xx8íÚµ£¨¨ˆ;wú»:ÂÇäøBáIP"€µh™Äµ7N cçöÄÆGc6[8zä8mßÍš•ëøeÉoþ®bÀ™pÍeÜñÀÍu¦ïÛ³ŸëÆÞÚàåtè”Γ/<ˆÁ¨çù'_eõе¾¬fó¾GPpo½ú$(ß,ùVìß–e!Î`Îð$]~6ú»¥W›N[>µ}7ÜÓ›7þ½’œìâÆ¨¢_½¿x:½ëKæ7Ÿû‹ö4që䋦 IDATÎ,"ÚÈMô¡Ej8Q±A¼óâj–}ïþM¤CƤsù ݰÙìÌ}k+~p[»ôLdÐȶ´Íˆ!,BOuµ…â‚*Ž*aóï‡ùeánª«,n/·9òäX˜–Ù‘±mZºüìÙµ›Y|à°/«(„B!„BÑ`ß&. XÌkE¯J‚²8§éÞƒBŒ­ô¸¿«"„ÏtéÒ…W_}£ÑÈC=IJeËü]¥3 Ä:‹æëÇ$$$„3fœ57Y¯Zµ ­VËôéÓ”§L™Âc=Vgþ]»v1|øð/_ŽA÷µnÝš[o½•®]»’˜˜ˆÉd"''‡?ÿü“+VðÃ?ø»Š~çn¿’þÜt|'¥Å™œÍqRâUÓ;WÚ*¯cåœrv[¾|yÍþõg‚²7申ù|ä­@Œ9ç*ÅI‰ÏBˆÚ$AY@©TÏ‘œ£Øl1ì]§®˜ùοÑëu5Ó @hXéíÛбK{IPö£n»†¤ Ü~Ï?=AYÑ|( ⃠-¯Ä@C©VY¬˜l6§iö3Ô_¥Vróƒ}IiÁ¿ßÉgonàǯ²dY? ÑÒ­w’WËˆŠ bÊݽP(Üô@6­É¡¤¨ªÁ˸þî^ ÛÎišQ­Å¤%¡E(™}’Ù¸ú¹Gʼªksàé±Pi±Rb2;M ÑjP4b]…B!„B!„BœÛ¦M›FJJ @ÀÜ<ˆuîQ*•$''sèÐ!l§üf)üOŽA÷dffòñÇc0j¦FÂÃÃÉÈÈ 33³Qí8òW¿’þÜ4¼mç@ëÏÂ=þŠ“FâUÃj[I¬kî_ÙGÍŸ7ç9‰³…|·B4™ ¬×ëøÇÕãHŒåÓ/¿gûN×£¹ÅÅDqçÍ×4x¹³ßÑc¹¾ª¦=ûžÇ³ÿy ½^ÇÐÞ㩬¨ôw•ä¡§§¡×ë(/«àíÿ~Àúß7aµÚˆ‰‹¦Mz+W/`}óùÎÿ©æýÿ¼ŽñWr{9V«µæµ¥Ök!ÄÙ­g\4ÏôíŽ^¥bø·‹©´Îñÿú–ÌßëÞˆãç_˜BJ›4Z×Ýy>Ýú$ñÖs«(Ì«hŒj0üò´Íˆ!©UÇ—òÊ£Ëm]U'“G ZªÑÖÕœDDj’“Á‘€ehp‚rŸ‹ZÕIN>UqA¥Ëää¦Ü¿¾âé±ðÖÖ¼µÕùé‘ߎLD­Ð!„B!„Bœ ÎÓ÷àýºë»£Š#ߚǵG'6›õ*Q2À8ˆaÆtÑu#BÉ^Í~Ë~VT.gné§”ÙêО ãC®`dÐZjZc9ÄòŠŸù¤ô#*l嵉žQ(Q§ DÓ~ªÄ.(ŒØ-ÕØ `Ù³ó†Ï°WþƒE`P·€˜¯¯óoÓ¦ºóß!7v(¸ª×¸^–¦ǃî|PFƒ½ ¬GÁ´Ê¿ë¡FÛŒ&sÙe—ñòË/Ÿq¾¬¬,FŽéò3‹ÅRóÚ ¿ebEÃõïߟ×_ƒÁ@çΩ¨h¼ßÏ5Ÿ~ú)_}õUÍû»ï¾›ë®»ÎíåÈ1èžçŸƒÁ@YY/½ô«V­ÂjµGûöíex¹Û¯¤?oÚ9û³p?âdS’xÕô±­$Ö5œ¿ö¯ì£ÀàÍ9ål?‰s‡¿âd ž…'à”#ÃØtùHâ¢ý]q–0œF!©i-i™Ú€Y3ÞfÁ7‹k>;tà0ÿØâ¯ª<³ÉŒ¹ÖH†æSF5l¨wgLL\4z½ŽY/¾í«ê !š9£F^un$°¬Y–Íñ#¥\vmgλ …ºœŸÈE£Óùò.î ò‘aãÛ—@Q~ã>XäÖ˾¨yÝ2-’çþçúfž³Í=…?RFlB0‡÷“³¿¸Áå]ÚÖéýœ×׳ò§½`‡ÈØ Z¤†c0j\–mÊýë+þ:„B!„B!š»Îº.Üñ´¦ëÚfµÞ13éoè4M­PÓAÛ‘ÚŽŒ ÃÇ&“k­û°k£ÂÈÌØYt×õpšÞV“NÛ°t. ÉÍÇnà¸õ˜wåC†1/¡nÓßišB«F×U\4£¨˜ûìeòpoáÚL¹Ññº|^=ÉÉ ½ ‚®”µ&kA št0ŽƒcƒÝÔµnÞfΜI||<ƒéÓ§û»: ˆu ä4b•ð“É„Édrzï 9.==´´4¦OŸÎ_œü½9;;›ßÿ½QֈǑ»ýJús`ñ¦±?‹†óWœlJ¯š^ ¶•ĺ†ó×þ•}ÔüysN9ÎGâÜá¯8ˆç_!Dã ˜e¥RIÏî¹x`ôº†%“æåòÒì÷ëý\¡PpÕøKIŒáðÑãäæøªºB4ª¸Ä¸š×«~YëÇšˆúìÞ¹—L¸ÃßÕBˆF·wG>¯<ºœ­Ãsmg’[‡3ÿã­þ®–ð’©ÚÊ“·,dà¥m±Ùl,û~7V‹­Áå“SÃk^oßx”ïçn«y_TPÉÞy>­os Ç‚B!„B!„³ÑÁ—ñPÄchXðcùB6Wo"ÇrˆòÓŒFìõþX¾ˆuK¾/ŸÏ–ê-”ÚJˆQÅ22x4CÃIT'qGø4žÈ´NÙ{#¬IN~¿ä]¾)û ;v.Ð÷玈i$©“™ýq̯P‚&‚&‚åÀÙ—œ|Þyça³¹þßýéF-ÉÊÊbôèÑU­Fˆuâl"Ç`Ã%%%Õ¼þùçŸýX“æÏ_ýJúsÓvõ‘8Ùpr5œ´ÕÙMö¯¨7ç9‰³‰|·B4‘ œÙ¹ƒû÷"2< €¿öì'½MË3–³Úl—Ôûù…½Ï#1>‹Åʼo~À"ÃÊ‹¡Ó|º{UUµk"„B8ÜWÄìýŠJ¥Àjm7Ù57 ¥µÚ1tƒÝnÇbnx¯?V1ÿÏlƒ‚O^«ä+÷U•Äßí,Ç‚B!„B!ô5\À£‘Obµ[y±ð9¾*ýÿO×ûSÅüTñ£Sñnó.VWý†:ZÍ`ã:#,Ä«ì¸çý’wy½èdöä—eóȳæ2#f&™ºîôÔ÷æ÷ªÕÞo¤Xvü„eÇOPk{my»±d¯Â Ò n;uÚÿUP5D<Ê(°•@ᮌuœLN®\Eÿ‚Ú‡½åT.EP“ÔºI•––ž6Y!DÓÓëõ5¯+++ýX!„hž$N !„ðoÎ)r>B!|+ ”##ˆ #¿°ˆÅËV±{ß¿÷¯–ÂEý{°låZò }QU—’SyzÆC$µHà›y xëÕÎXÆ`4pù¤Ñ\0¨7-Z&a 2PQ^IqQ ‡eÃÚÍ|ú¿/ê-¯ÓirÉ@úîKÛmÃb6S\TÊî¿ö²ê—µ|÷Õ>ÛÆQ㇓y~RÛ¶".>ƒQOUe59³bé*¾œóåeõ'§ÜpëÕôèIt\aa¡h´Š ŠØº)‹/>ù–?7gÕ[Ö“¶JMkɇ_¿QgY‹×|UgÚúß71í¦G\®»C§v\qͺõèLxD¥%¥lݸ¹}ÍŸ›ê¯³'Ü©ó[¯~À'ï}^gzdt½/èA—Ì Ú¤·&>1– à  ¨ª¬æHÎ1Î_Ì—ŸþŸË:ô¿¨/c®¸„ömÑëu=rœß–ÿÎg|EaAQù/¾d CG&-½5¡a!>t”_—­aÉÂeL¹ízöéî•qñ¯Ìšñ•¾¿ÀoÊcaÂ5—qÇ7×™¾oÏ~®{ëË{{´lÝ‚G¦ßCÞ™DD†QRTʆ?6óéÿ¾d÷ν§-ëîþ=Á›ã×›>©V«?iCG&¥e(ØwÅ –BqÚm=Á“øì©‘­[IjX±F=µš*‹•œ² ~=|”¯vï§Ül©·ü”Žm9/.нžPRIQµ‰?ó ùbW6ÛòëßGµŠñi­è—K‹à Œ5f %&3‡Ë+Øp<Ÿ9õôoʞē½º‘läÛ=xûÏ j³n1‘ŒIM¡Ktá:V»ÂjJËÙ–_Èâ‡9\VQ3¿V¥ä§±Ãø×ï›XzðHe.7 RÉìÍY|±+Ûåz/LŠcLj í"ÂЫT­¨dÕ‘ãÌݹ—Âêºw¾´ სÔ™þÃeCëL[<Ÿ{V¬u¹Þ‘a\žÖŠn1‘„é´”™ÌlÍ/dÞ_Ùü™_ÿuŠ/ö‘/54!S­QÒwHkÎëׂÖéQ„„ëP(”VqüH)[ÖæçïvQVâxÇû‹'¡Ó×½tíÒ3‘9+®«3ýƒÿ¬eñ×;œ¦Å$ÓµW΋'©eáÑFôz5*µ’ªJ ùÇË9°»yïläøáR¶þôºœŸÈƒ3.`÷ö<ž¸eáËhu*.N SHnŽ1XCU¥…Ò¢*r”³}ãQ~ü*‹ªÊúãÇ1錚”AT\•åfödå±èó,þ\_÷©¯Þ|î7V,ÚSïzê+{áð6\8¼MéOܺˆÝÛrO[Öý[S¦í|É„Ž\óÏ5ïÿ}ÏOü¹®n›Ü=} ç÷O ´¸š[Ç|ŽÍvæ~.ÉÉB!„B!„8´Ò¤òdÔ3ôÔ÷&RI±­ˆuÕðaÉûì2¹þ_¯QÄ¿¢žE‰’' ã‡òn¯W§Ð1,h ÑNÛžefÌ[‹ÙeÞɯ•+ø¶Ìù72oÖ{º‘·Tob°q:…%J§„ç^úÞ(q<,onéœ:e©\F®5—U CŒCëMPöd{½SÿöZs6£n;…Zç~Öî}b¹¦Ë8ô?‚­ðåÿwÚyU-{b¼üuìe¹”½5¢îçñhº_…ºEw†ìÕ¥Xs6aZ÷ ÖÃ[N¿l/ʺ¢0„aœø?”‘-±åï¥â³`¯vþß²BcDÓ}"ê6ýQF¤ Ða7•c¯*ÆV”ƒõà˜Ö~èöºÏD×÷fT)½P„ĠЇ¡Pi±Wb=¼Ó†Ïΰ½ 4퇢Î…*®= }(vK5öŠBlÙØŽþ‰yû"lE}^ïÚÂmWÀE‚µî¿oùûçYËA(~ê{&½‘ž¥©n;M—ñ¨â;¢Pë°•Ųw¦?>Æ^QÐ8+õÀ”)Sxì±ÇêLßµkÇ?mÙgžy†I“&QQQÁèÑ£Ù·o_y^yåÆŒÃ¸ôÒK©¨¨p±¤¦«3À•W^I×®]éС±±±„……¡R©8zô(+W®äí·ßæàÁÓ÷c½^ϨQ£:t(;v$** ³ÙLaa!YYY,[¶Œ¹sçº,;tèP&MšDçÎ1 äää°téRÞyçòóóë]gLL   G´oßž¤¤$BBBP(TTTpèÐ!¾üòK>ü°nìð¦,@×®]¹þúëéÙ³'QQQ³~ýzÞ}÷]6lØàÓ¶JOOgÑ¢Eu–³uk݇ç®ZµŠk¯½ö´ë÷ÄE]Ä!CHMMÅ`0püøq~ýõWÞxã rrrê-w×]wѯ_?ââ∈ˆ@«Õ’ŸŸÏúõëyÿý÷Ù¸q£ËrÞöIµZÍäÉ“3f ­[·F¡P°wï^æÏŸ¢÷H¸ÃßÇ B¡`äÈ‘Œ?žN:Juu5ùùùìÝ»—Í›7óí·ß²ÿ~¯¶Ów_wúóŒ3xóÍ7}RO_GÞÄ OŽoû•§Î¥þ|ÕUW1}útöíÛÇ!CN;o¿~ýøè£8vì}ûö­ó¹»qÒ›vöÕyÁÓs™Ñhäúë¯ç¢‹.¢uëÖSVVFQQ`õêÕ¼õÖ[uÊMœ8‘^½zÑ®]; ¢²²’ýû÷óã?òÑGQZZÿý'žžSNðæZÅ›ó¾»|'ýq}ÕÔü¯ é#O5‡¶r—¯b§×±Ð´Ç¾7uöÅ5ƒ'}ÒWû¨)ãÕ-·ÜÂý÷ßÀÀ]öÛ^½z1gŽã—W^y%ëÖ­«·žhÓ¦ 3fÌ oß¾DGGSXXÈš5kxë­·Èʪ{¹N§cûöí€ã\øý÷ß×™'++ ­VËôéÓyÿý÷k¦{sNñÕùÈÓã¨)ÏGþ¼&¬Í“¶òG|>Á_ÿWñ$^y'ïºë.î¼óÎ3Î7jÔ¨šãÕë ¤ïVB÷D‚òÚ [È9rŒ¿vgc³ÛÑëu^/óâA}ÑhÔ•”²rÍzÔ²~·ßw#éÒ¸æX¹l Û¶¸N¨ åµfÐ2µ…ÓôÐ`BBƒINID¥RÖ› Ü±s;žzñA’â¦k4j Fñ‰±T”Wú4Aùö{ÿAP°ó#‡ƒ‚¤wH#½Cã&ŽâÁ;žbǶ].Ë÷¾ð|:tJwšÍàa2ðâ xñéWYðÍâ:å¼m+oL½ëz®ùǧi‘Q Òþõeæ¿ßà›yu/˜ýéÝÏ^%&.ÚågÁ!jÚ¶OE¿X_ç3•JÅ#Óïa襃œ¦§´J&åúd.;”ïxªNRö¤)—“Ö.µæ}«6)´j“µ7:·Û¨ñɈ ãỞñtÓ\òDZà o#€á£/rzÁ4ôBþýØ+ŽäÝSxºOðôøÏûdP°‘—Þx†N];8M?ÑV ån|öÆm]Ú¤q>íiÔ¤G„’ÊØ6-yè·õì,,vY¾wB í#œ¦Åô JN`@R<3ÖÿÉÂìCuÊ…j5ÌØ›–¡ÁNÓC´B´’‚( — ¬Þ”=uÛÓ#B¸º}*+cûi’ÞU wgf0ê”Ø®FE¼Ñ@¼Ñ@ϸhÊÍ–z“Œ=¡R(xøü.\œ’è4=%$ˆ”Ö\Ò*™‡[ÚdaOÝÜ©W·Ouš¡×Ñ?)ž “âùÏÆm|»ç@r¾ÚGM-½S ÿ|¢?Ññu‡+ˆŽ":>ˆÝâY¾`·ÏÖ9hd[nz O½Ÿë j’Z†‘Ô2Œ¹o5Þ?[ÝcäÑÿ %¡E¨Óô `-AÁZâ“Cé|~Kÿï/8M‚rëvQ5¯5á*2û$“Ù'™ÿ½¼†%óÿj´ú7wëVtJPît^Be•JA§ójÞoøí`ƒ’“…B!„B!Ηrz¥Šf˜qCŒCy*ÿq—IÀWO LÎUk=JNî¤í̳Ñ/¨Nrš®AƒQm$A@¹­¼N®·ë­OW]&Y¦íuFcŽQÅPi¯¤ÀZ÷æB;vþ¨úK‚FÒQ›árùžnocQ%uÀz,Ë'ÉÉö2ǃ †ð3Ϋ4:þŸi+=Vç3Ý…ÿDÛóz§i cäß#>¢êç1orý»°7e]Qhƒ0Œ}edKì¥Ç¨üúκÉɆ0ŒW¾‹2ªµót}( }(Êð(”ÊFIPVµî‡*Þ¹Ï)BbQ·»uúET-žŽùϺVh èG½€ºuß:Óa”a‰Ðº/öª2Lê&åûJÈm`éx]ò2T¯q=Ÿº hþþ¹°ü#°›­Ju)Uè‡?…¦ƒs"½2²%ÚÈkÑtCå7ÓINö…‡~˜:ÓSRR˜4i£FbòäÉlÞ¼ÙeùnݺñŸÿü‡-œ³Ôh4F’’’(//¯“ô£R©˜1ccÆŒqšžššJjj*W\q7ÝtS½7¦~ûí·ÄÇÇ»ü,44”Ž;b4}^öþûïç–[œ‹ˆŽŽfذa :”§žzŠO>ùÄeYOÛÊߺwïîô>99™«®ºŠ‘#G2iÒ$§pk8p ]ºtqšÏ¥—^ʈ#xä‘Gøâ‹ºçoúdpp0|ð™™™NÓ322ÈÈp}áoÞl¯Ñhäµ×^£ÿþu¦FZ´hÁ€())qJVð–·Ço ò&nxz,¢@êÏÇŽ9®£###Ï8ot´ãž­#G\? ÆÓ8é/žžËÂÃÙ7oiiÎ÷œ………FË–-Q©T.+zè¡:}#88¸&>_{íµÜtÓM.ŸÀ»ãÈ›ó¯7ç}ðçõU ñöØÇ‘¿xÛVþäi|öç±ßÔçõIÄ«åË—×$(÷íÛ—yóæÕ)Û³gOÊÊÊÎøð OŒçü@˜˜FÅ%—\Âý÷ßÏüùó}¾Nñæ8jÊóQs¸&ô´­üŸýñ•æ~µXê¿7ÙôÝJកHP.-«`Ç®ºO`õTLt$]3Ú°dùj,V«Ï–íJl|ŒÓû¸„˜Ó&ÀMžz-S[`6™ygÖG¬^ùEÅh´ââch×1Šr×#ͶIoÍÌ·ÿ1È€Íjcñ‚e¬\¾†Ã‡Ž P( £S×ö–€·ü§•|þÉ·”–”d¤Oÿó™8y<‘ѼøÚÓL¹âŸäçÖ}Jðûo|ŠÅbáð¡£”•–£Ö¨é‘Î-wO¡eëÜóÈm¬\¶†â¢Ÿ´Õ¾=¸èüËè?¸O¾ð #ûO¤²²Êi^›µîïWßpEMrò†µ[xgÖ‡äžÏ£ÏÞ˃úкMKöíùöÎ;<ª*mà¿é™ô^Pj)¢€ˆ€ ˆ¢ XV”UÅՕϾ*E;(²Š"Ò{oÒK @z™Ôi÷~ ™Ì0“2%ͽ¿çááæžsî©ï9wî9ïûzÇZICȲſñëÏ•^'?óã¸Óåç¸+GF£‰ß~^ÃöÍ»)ÒÓ¾S;þùÄDFGðâ[Ï’œ”Jò9ûùÔÓþuW~·Çä ¯?cUN^½b=¬ÚDIq í;µãï÷±SŒ¯Wçgo°õrË’R)2ñU*éÁømõÑ0ó¦ÞüsÃNrËõé¾;™„I¹RRJ‰Ñ„R&£ShwíHËžMìÌÎ+™è ö'/&ÆÇÑ*У 0ïÄ9öfdS 7 ’ˉôõ¡cH¥UÌž¤µ%Ò×^É<ÊW[­‚ò¤Îí­Êɧò øé\ iE%ÈH_-ÿé×BQc¾®òh—VåäM—®°êÂeŠŒFº„ópB{‚5jÞЋIv’m3ï¦êЏmÅ:nnÅk}{0ú·”_÷Ž!ˆŽŠ÷ulkUN>’Ë7'Îq¥¸”æ~<Þµ#]ÂBxºG'r 8ý:è¥>ªOâ:Gðò'ÃP©ªïÃÔ¤%Øxö´Ý!ëJ—.Т­åP¤­"r»E¡õSYÿ>°ÃÑP€„„„„„„„„„„„„„„„Ä_£hdyñ2¶–mB'è訊grð¢Ѽú&Ɇ$’ŒöFðFùYàå ¹ÌŠø˜ªN„)Â(K8©?ÎÒ¢ÙS¾Ëi~íUø,ò+|å~˜Y[²†íe[¹lº„9Áòºiºs\ï¨ðçI¾×ã/÷§½ªãîãß[)Ëù¤àC‡xå¢å¦V¦E+ÓR&:îKæš-{+ኇ0OêëMdäíQ'N@Ù~¢±ý¶½ö|¡8ëZ> P¹j-R™¯åМx-Mê>­ ÆæKÑïü¡à2ò–h>¢Y7|nyó•£Yç¼–Öi}ÑÞ=EtgÝUÊ–NFÐe8ÄS÷{Ä¢œl6 ßù¦”]ˆ¥ù T!ˆFÕ ÑP7Šœ†Ý_ƒ`B(LGÔƒ\‰":ÍÀ§‘‡¶ÆçÖ阒·!–ÙÎÕÜö’U9Ùxf¦¿!g#Sj7Gû· ÷þ-¾cÁÿaËuÉP²´ê¸j›ó‘åŽvšëÍMOZ•“gÖa<¶Q¯CѬ;šC¦ A{×Ç”,œ€X”UÃÓêž… Z½%åÐäÃ?\«´z½ž§Ÿ~š_ý•øøx^yå^{í5ÂÂÂxûí·˜7o‡yÏA€'e¶å?þ`É’%äææâççGïÞ½™:u*Ìš5‹aÆ!^·‡×©S'.\ˆŸŸf³™•+W²iÓ&ÒÒÒÉd„……‘˜˜èô`÷¿ÿýoëaôU«Vñã?¢ÓéèÙ³'Ï<ó ¡¡¡|óÍ7Œ9’Œ ǹ£‚#GŽð믿rîÜ9òóó1Ò¡CþüóÏjëìjÚÉ“'[ÑîÝ»—Y³f‘––F›6m˜>}:={öäµ×^ãðáÃÝm«¤¤$‹w±?¶¬;½zõ¢¬Ì~=5×ѹ®}ûö±hÑ".]º„(ŠÜxã<ýôÓþ€(\ IDAT0sæLFí4Ý'Ÿ|‚Éd"--¢¢"T*ݺuã…^ ]»v¼ñÆlذ‚ç{âîŒÉwÞyǪœüóÏ?³bÅ ŠŠŠHHHࡇ">>ÞYVÑ28cÆ ëãU«V±lÙ2233Ñh4´jÕŠÙ³g£¨ƒ3îʯ+ãÙ›‡»½)GîÌ9îÈ‚·Æ•«ü/犱ˆJ¥Âh¬úÝ»B¥ªõÈÕyÒ“vöt<{²–M:•¸¸8 ~ø![·n%//µZMLL ]»v¥¸¸ús$k×®å»ï¾£°°€€Ì#÷‚`Q’ÉÏ+àÙÉ/³dÕ7„G†1þc™ñò¬jŸW[<)óõìپߩwçÓ'7Ü£›E2áËFk~ÝÀ»¯Í¶†%¹ÀáGùîçÏ `Ò”û™ùŸOž‘q5‹Ò’2vmÛÇÅ”K´jÓ‚Cûþ¤°@Ç«61aâXÚuhCçn¼¦ Ü² ‚]_8Sn¯ îÊÀÂo~dÁ—•/}Ig.p`Ͼÿåsý™4å~^~v†5Üýë®üÚ=Ã…1Ù®C† ¿€Å –ñÅGßÚ•yݪÍlØ¿•ªæ%ÎÕùÙœ+(ä¸ÞSyÌÌeö >„hÔLLˆã£Ã'ÒíÍÈv¸·ëJiº¿µBNßè6¤]±‹Ó5<€ iWøñ:åôì²rNæV­(ìIZ[¶\¾Jû`‹’¥Î`äp¶£‰ "}}˜ÐÁ¢¬»çj/ï>ŒÙæÆùÂ"L‚ˆ :“µ"ÊWËøkS/óÞÁJË¥ç tÉÊcþmT«x(!ŽUÎ)"`¸&ï¶e5 ‚õ~U„k}x8¡=;Ò3ymï«s¾ÞÀs;°hø µÆ·oÍÛì¡y«ê ¹\Æ“¯Üd§œœt2› +Î’š”Gy™­VE‹v!J©S;{É]DÅZ,h8x•÷žßèrYNºJÊ™\Štz z3>Z%‘Í0ëÖpMmQ©ôèWé1åôŸ™|óþr2‹Q*åDÅ’…_€¦Ægmù=‰ +Î"Špçƒ]é;¸j‚¾ƒ[±öçÊ÷%Ûvnʻߎªu™mÓ~¿é~k?ïÚ—ïTðÓÛý[[ïºdUPnÓ1ŒàP-y•û im½Ö—›8~À¹•@ ‰¿*ßê¾a^a¥eþs†³ì+ßÃ’˜eÊy4h /är‡0wëë-dšüŸ²ß¿rÎS¶öµZ)êÖ±èÚá6™ ¹_8‚ÎòÍ¢ÜýŽ9˜Ó-»d¯Ôqdþ‘hú?€)i e«¦[½;›Kó([ö$~“–#ó@Ýë~Ê׾ÎùGà{÷äáqy)ûåI§ÊÉPéÚxú ÿkf.ʪSϺ¦Ço²¦äíy©ø=¼ ””­oÄxz­5\Ù±Ráöè2Ê7¾gÿ€ÌÓpû@Ýòò~–­xÊ6€î£êã+[Zþ7_¡°ú¸ÞDƒº÷OüFùº7­aBÖ9Ìiñ{p12Ÿ@4ý£|ýŒªåÆéÁbQí<ƒåà´m\W$'%%1cÆ f̘Áý÷ßÏž={X»v-ï¼ó!!!œ;wŽÙ³g×ü ð´Ì?~œ;+çöƒ¢Óéxë­·hÛ¶-=zôpPÞ™1c~~~”••ñðÃsà€ãžøöíÛîÅÆÆ2iÒ$–-[ÆôéÓ­a§NbïÞ½üþûïóôÓOóÒK/UYî-[¶8õ¬sìXÍs‡+i£¢¢xæ™gX¿~=O=õ”µ­sss™8q"7n$**ŠI“&ñüóÏÛ¥w·­DQD¯·áµ=øm0¬÷ëšíÛ·³zuåÚ}üøqŠ‹‹yóÍ7IHH >>žÓ§ÏmݺÕáÞÆINNfݺuh4 T¥—0WÇd§N9r$ß|ó ï½W9?Ÿ:uŠ+VpòäITªJ£»Þ ¡d0!!ÁªÔ±hÑ"«A„ Nœ8Á¬Y³¼~èØùm¨ñìÍ|Ý™sÜ‘o+Wù_ÏW®XÎ Éd2"##IOO`úôéôêÕ‹÷ߟƒ–5°Æ¹WçIOÚÙ“ñìéZÖ«W/V®\ɼyóìÂ222jåiòĉv†ZŽ9®]»øá‡ cêÔ©¼úê«éÜ]SÜ]=m+wñ¤ËûU}ÑPóUc#WiÈß îâ­µÛÕù¹¡dß“2{Ú¿îŽÉ¦:_mݺ• &póÍ7£P(ìÚK¡PУ‡ÅéÎŽ;ª­ƒ»|öÙgÌ™3Çú÷©S§Ø¹s'kÖ¬!((ˆgžy†)S¦x%/Oú¨!ß7l©õ¨!ß ½ÕVõ9?_O}~Wqw¾òtž¼>}E]fΜ‰L&ãäÉ“¼üòË^Ï·‚¦ðÛJBBÂ5ä ]€úÆ×WK·ÎصïˆU±´.ùaþR^ù×Û|þÑ|½wšs/¢6ä[vκu$(¸z¯y¶Äulkõ(ºàËÅN2‚£‡N°zÅz†º¥²özñ—.¦“™a±׬…£W;wÛÊny j£ÑÄGï|î0†ÊËÊùeÉ*úÞÔ«^ÊT— 9¹BŽÉdâÛ/_´.^¸ÄºU›ú·Á5ö¯® €Ð`ë½Ü‹7`ÿ@?¯”¹±Ê‚'ÔVŽœyÏÎÎÌáן,?  î‹O¥2›·û×–šä×]n1ƒÞÀ÷_-q7›ÍPK‹H®ÎÏuÅÑœ<Ö¤\`XËX”rY­Ó^*.!³Ôâ¡¡™Ÿ¯CxÁ5¥ùøÐ`Õ®mHz’Ö–Eg.ðÚž#|yü mÚEa5F*ê/ˆ">i§ð[— kÕ ¹L†IùîÔy‡ð‹EŬ»hùñ=´e3—ú¨:nkÙ µBŽQ˜}䤃‡år“™åÉ©ô‰vô®á­>ª/olnU<Ø·å"ÿyòv®¿Àå”r2J¸”RÀî)Ø^·žjÿûé–|u˜ß—œdýò3ü¶èó>ØÃ‚÷×i¾µE¡”#·gåeF²¯a2 ”—™¸x>µ?ŸfÙ·5[Ì;*‡Ô¤<.žÏãë™»1Û(ηíV'åo*ìÝRiE&ƒý+•Âår}µ´þ}pGšSoÎeL¢£g…,s&¿[\šô„¬Rñ¶ƒª£õzYñO<–ù0ÃÓoaÐ¥þLÊ|ãz‹¡ÐG‚&ÓC“h÷ÜöêŽtÕX:ç~éTY·*<Éדh¿×ÒVÕŽ‡ÿ‰¯ÜqëPùÒL–o™Ï‡Lg´ßD("PËÔD)¢â;”Z˾F‰PâµúzûúÊÃÚ¢éó2µãžƒÛ¹”",õ—ù_ûÖ-“£êz'ŠØî(ÛßR™¿ŸÅc‡ÉzO?”0)ß4Óª`l}¾± Ëw˜ ï¿ÞH{=òÐVøÞû-òð8Ì')ýñŸU*'ˆ¥#¢Š˜.È´AÕ>»¾òÓ¬e–7· SŰ\˜ôèw]ßEÀï€D#}ŽÅJl5ȯ5«PÏöZ•ñ·ƒL‚ ÃǶòR0ž²ìÏ*;yÝø8~ü8§Nrø·eKݸ“^²d k×Z”Úß}÷]ž~úi†ŠÉdâ¹çžsPŠnÌüúë¯Ö³]ºt± ‹·zª3gŽS…Ÿª¸óÎ;Q(˜L&>ùÄÑø÷ùóçY¾|9wÜq‡KûïuŘ1cÐh4F^ýu‡ƒ¥¥¥¥,\¸€AƒÙ…yÒV•߯4¬Þ­[7—Ò¦¤¤X·lÙ²†ØöT7&G²Öëõv‡þ+0›Íuæ5ª®¨®¾wÜqåååN娮hŠòÛXñDš"m<X=¬U(›( ÆO¯^½6l˜5nEøÅ‹µw(âÉ||4´ïÔ¶vv¢Û'svÓ ³,xBMrTÇŽX<ò* â:Vö‘7ú×]ùu—Ž q$ŸK¡´¤¬†Ø5ãÊü\—츒 €V© ]£Á?•’:µcÎà~,ýÛ`Öß5Œ•£oåó[ú[S5N¬þ,KJEEÚú³hÄ íÒæþµ3àIÚëÙ–žÁ’³)\­¡Ï*<ŸÉ/$»¬þ~Øt ³ä{¡°ˆÌRçeÜsMF| âœô‘;t¿VßSyä–;·À–ª³|$Ö¨ ¾N–¼ÙGõAçÄh»¿—Î?‚(4­ÍrWøð‡;Y¼ýAë¿éÜj ‹K· [¼ýAúßÚÚ^^jäâùJoë‰ý›3ë‡;¹ãþ.D6 À]ÊJŒd¥[ÿóÞ!Ɠv¾x>++Ýjô¾¹rc¯ë Í ®<\»mMrÝVDBBBBBBBBBBBBBBB¢ ñ§Þb¹^‚öêJåà`Eåš™yïpD˜Œïøoð{ôwžÙ…ÿð½÷[«²´L©±K£ˆJÀœ„Xê|¼®1X· SAØW lUË„Õl5(Û@ä Ë?¥k[¬URáÛœ}¾J%uÓ‹W"™ÊEdïdÜx饗HOO' ÀêæÓO?åÔ©S \2×(--%+Ëbl;44Ô.¬oß¾Öë_~ùÅ¥çöìi™sΞ=kU*ºžÍ›7 ÕjIHHpéùuAÅáõ#GŽXÛäzΟ·x µk/OÚª±RXXHnn.ޤ˜2e ?þø#;vìàäÉ“8p€eË–bYG|||œ¦­ŠêÆdÅ¡Ü3gÎPRRâ¶)R]}»vµœù9s挵/ꃦ(¿ M]ÈBS¤1ŽçK—,ïÒ±±݉‰‰YÞm•"*Â]QF©ÍúrQávi4µr¯L樼ên[yBX„e±ëÞ« ;Ž­©1~`P€ÕÓsS¤¢¾U)¯ZÂ*_¦ÂÂþe¯1Ë‚'T'G5‘Uù"Z)Wžö¯'òë.¡a–CFY™Î‘4U®–”Z¯ÃµÎVê%Ò:ПY7ß@„Öþƒ³F¡°SXuÖÌû3sxuÏþÕ³3a>èÔŽ:µãDn>?'¥²==ÓÁk¯7ÒºKØ5ß5)2{›Š|3˪Î7ÃFq9L«ü*£º¯¥O»‡‡²ížÛkŒ VY½&CÃô‘'„EU*Of2.5`i?Ÿþg¯}:œ P‹õÀ¨Ø&LîÉ„É=9{,‹UKNpx×e—Ÿ[ZZ9†ÔGÃÿkìÚ˜ÂßÿÙ€®7Ä õSQVbä¦a•'Õr2J8yøjCQBBBBBBBBBBBBBBB¢Ñ‘mªÜ;•WîÈ+ë©e ¢ý~l©XʦҌõ¿‡DŸžva ËA& #ÏìÚOòu†N(ä˜þOŽéÿdGÙ6>‰øŒugÆúßÃE‹íâž2œäÞ«÷01ðaúio$J…Q4’aÎ`_ùnóA„"‚ F{xžÔ×Ûˆå:ÌWŽa¾r Sòv´c?E•€ºûX ‡ôJBÁeä¬ ÈʸÁ–¼õÅÈÃÚ j†PxyPìµø• d×¼*+š÷$ใ5æ%Ó"–å{œÖe‡k†Eýþï¥q®Ç”º‡²ßþÏБù…£î; ußI˜¯Ãph1¦¤Í½<¬-¾wÏEiw_¦Ô °SÀ¶ßXªP\u ÷-´è+ÿÁo€"¾†œI`Nw_¼fS^s™ Í+¯½AŸ‹ª6€,Ø´cE|oÓ¡C¯,uN§ãÍ7ß䫯¾ ¤¤„ùóç×k¼EÙµ}AÆ^Y¿ÂsPaa!99®íIWÊ­ê0úõa‘‘‘UÆ«/*ÊЧO’“k6ÖlõîãI[5fŠ‹‹ sêá+..Žï¿ÿžèh{ÃÌ>>>v‡gÝ9#QÕ˜ ·Ì! ktÝÛTUß …¼ôô*&ÿ:¢)ÊoCR—²Ðilã9--øøx«²I…¢RQQqqq´hÑ‚K—.Ѽ¹å%Ée¨~žl¢ä›Q}ÜŸâ9ƒ(ùïýˆE™NSЦkŠýò†5lY¾òŸÑòPýäÎ[sM¬QDƒÌ·þÊX¹¯Ô¸ä·>Ëå<ôÐCÖ¿ýüü˜:ujÃȪÚ#¯˜7Ü9oàjÚÆp¦¡¢Ìf³ƒÁPã?µÚqŽm õð&¯ßG“Éd|öÙgDGGS^^ÎŒ3¸ùæ›éÔ©Ý»wgôèÑ\½ê¾‘‡ªÚ±â¾ÑhtÞT©ª¾åå–óJeýú]iŠòÛPÔµ,4EÛx®ðÐV¡l2bÄòòò˜;w.C‡ÅÇLJððpÊÊÊ\>ä_Õ<ÙPx²–U°qãFÈóÏ?ÏáÇ‹'Ì9sæ°fͧÞkƒJåüì¨'räwOÚª¾‘ægïRÓ;pc”£†¢)Ž¥êÞc+›ì×åšRßc²¡ç«åË—G ,F/z÷î À¶mÛ¼š_m°;»nS_Ûk¹g…‚Æ,GUÑPï„uÝVm~nêk¨³fÍB¡PpþüyfΜYgyÕ†ÆöÛJBB¢öüOIgBÇvÈd2Œ&I\³ðÑ&þXµ‰?Vm"ºY£Æcü?î¢UÛ|:ÿ=¼k 9Ù•Ö´ór,JIþRX k¨¢;Yiõ&߯£mûNíhÝ΢ü1óõÙ°f«5Ìh4‘t&™’’š­O»ÚV¶Ø)kÖâ÷MNv.í;µeóúí¼1ýýš4q*êUeœ¨˜J+Ny¹Õ»=yì eeedUã±×S¼) ž¼Ä ×4Àd®jWAUrT¢¢÷‘'ýë-ùu•Ú”¹)nã9¯¼Ò³Cûà@Zúðþ¡lL«´ f’ t”˜jVÖ6 ë.¦³îb:Ñ~ZF¶nθömhèÏǃúòІä”齞ÖUòôz €H_Ÿã:+§ ŠÈe2üT®½âä”뉢ýª¶Äí[fÛG¶Øz+®ìWä»åòUÞÜw´ÆøUQŸ}ä ù¹•^¨µ~*¢›’qÙõ9Únn®Çý.á:…j¹¼úÌ_}lÝßÝûÆ2ý‹— gryíñ5Î’ÙQWÆÂ9Xòåaºö‰¡ïàÖôÔeŒ÷¼±9·ÿ=žß—œt¥*µÂl¶Wä­©¾ÞÂÕþõ´3Ó‹8ýg&ñ=,ëÊCÛ PÊ­ml6 lù½q7’¨o¢•žrÍ•›rÌ•û?1ÊX²ÍŽûAÊk.LM¢ý·íŠçÈ –S Ô~/Ä“|kC¦9“®@ˆ¢ -É*¸Çäamð÷%%ßG,öÎÞ©"ª#ò0‹ïòõoa<ý‡5L4³Î"Jœ~z ¯@tç:Pšvý^(x Bf‚²%„~¹xnž±Â|@Ù†ú)_Ÿ’]S¸w†üš·p±¤ñy–­øïê!ð©S§Ò¿JKKùý÷ß7n=öÛ¶mcÿþýuQT+î–ÙU²³-òDHHùùÕŸ°%++‹„„«w"g4kV9n*òjH*ʼfͦM›æRZOÚÊA¨œó‹²›3ˆ‹‹àÅ_ä·ß~³†FN:Eqq±×ó­Í¸ª-žœ©/¼|ù2Ý»w¯w%¦¦(¿¶Ô§yS<WÒx®š¤$ËþvóæÍéѣ͛7ç¿ÿý/«W¯æÿþïÿ1b»wïF&“‘œœl7~¼‰»íìêxöd-³Åh4²bÅ V¬XAóæÍùûßÿΤI“ˆ‹‹cÑ¢EÜ~PË IDATûívž kC…·c€ÜÜÊó«žÈ‘7ÞU}P«Õ”––6ˆåªêk0¹\N@@ãtÀs=MQŽê°)¶•'4–5ÔÝyòù矧uëÖFž}öY«"pmù«ÿ¶’¨=MÃ䈗HèØ€Ô´tŒõìysà­7rïÄ»‰næžB]Æ•LæÍý/Ý÷,&“‰€@nco•ùØáS€er>úVËìMnÔ°XI>Wé¥.4¬rS;éì¯äU›¶²Åvõó÷«ñùÇXÚ¹w¿D4š†·nS×TÔ·]ûÖD7‹tç¦Áý(/+'éLõýøÙ‡óxîñWÙ³ã€w jƒ7eA¯·XÜ×j«VZ¬2í5e@?ï˜ë®JŽ\I{}yÒ¿u!¿µ¡¢Ì:··SÚvOçgoqã5Ep³(r¡°Èz?ÄGc½>ï%Ã%eÌ?™Äã›wcDÔ*F´j^§ioŽbB‡6Õ*œÎ³ÀŠ tKI9÷šâpë—Ò¿fØ mPQ¾ÎË8àšŒ”›Ìœ/tÞå6 µQ’®È·Wd8…w<xÒ¿uÍÙcö?ŽÇ=Ò£VÆA®G_n¶^‡EÔŸK„²ƒÝßáQ®3W‘Ù(fïºÌoïäÙ +ÈË®4‘Ø¿nú·Xg¯ÔS?¢7®bñ„,“£½ý-”\Û‹tWÐïú‚ÒEA0!ó DÕÙ{ý/ó µ^›³Î¹”Ötqòàæ(ã{­LîR¾ tŸZ®U] à Ç8†`¾&Z~Ro'`*Æ•"<ÎNÙe»AˆÆ2—û¢>(+³•õ÷¯ý^G¿~ýxê©§x饗xùå—Ù»w/r¹œY³fÕù¡bwÊì,ç îºë.—Ò:t€N:Uy(}èPËù•ÒÒRN:åAI½CE™ €kû³ž´•-} 4êÃéáááÖëú컊>êÖ­›¢›;èõ–ý?__×÷àêKwíÚ@Ë–-¹í¶Ûê4/[š¢üÚRŸräMYðd\Iã¹j*”QZ´hÁ˜1cX¹r%W¯^åðáÃôêÕËêYñܹº{Oq·]Ïž¬eUqùòefÏžÍØ±c1™Lq÷Ýw»üœ!C†–ó~gΜ±Þ÷D޼ñ®âͶªkšúü Mc¾jÌrT[ê«­¼E}®ÝMQö¯Çýëê˜tw=jÈùê‡~,žrÃÃÃ6l›6mrYéÐÜrË-€óúfeY $Vìhì4E9j¨w¦ØVžÐXÖPwæÉž={2qâD>ÿüs·æ¥¿úo+ ‰Úó?£ ,“ÉhkÙJ»|µ†ØÞ徇ïáíÙ¯ðÄsÿdÞ’O ¬6~unçS’/¢»¦¸bÿœ3'ÏY•}êtKììaÉ]GéD+ºYÃGY6fwmÝG¹×É</°ñ]·Äìn[Ù’™Qi‘§Ï=kÌóU›0™L‡1íÅ)(¼¤PÖXY¿z3f³…BÁ¤'poÓ®ÃG¹w ¦Zxr­k¼) 9YË…‘ÑDFG¸”¶bl…G†^{‹ú®ÊQMtîÖ‰;îÀºß7Ûõ‘'ýë©üº‹m™ÿõʓɠ«ó³7PÊ—Þh?-ÃZY,…í¾’E¹¹R9/ߦ¯;…¹ž_5OStÅ, —AN .x’Ö–{;¶eFÿžLéÖ‰¯‡ÜH ZUeÜÍ—,k´B&cb¼ã‡¹LV­Bk…‚ó æÑø(k?66¤]Á,Š(d2&unïÞ&Пa-c­qM‚sË–Y¥•¥nˆ wÇ–uÓ1 "Á5ÏôH@ᢶ®·ú¨¾8¸ã6^”û iÍ+Ÿ §ÿ­­iÖ2ˆÐ_bZß#ŠQ:£P:UÍÍ,±^ǶæÎt%¦e 1þÄuŽ`üc‰´é蹇|³K)/«œ‡ÞÙîýb ò£}ç&LîIH¸wjJ9Ÿýrü»?‰76'$Ü•JVIH„/&S¥2|]y6.Ì+£ÔF){ÈèötïKD´?ºEr¯ëkKCôïíiè ,a 9-ÛU®Ûë~9SU2 ‰ÿIºjºq§¿å0ÌÚ’Õv‰sÌ9×[÷þæ; ­ÌÞ d e «ró¶²-va§ '9g°(;?ü$=4‰µ.“'ùÖÄ í-tPwàPyí ðöóéÏQóð‘ùgÎevþq<©o]¢Œdõ k¾|ÈkÏòRA0!ŒA?¡à²EÑ0ž^ 2ê>Yâæœ·Kk<õ»E™W‚Ï@^ûïÿž¤u†X®£ôç)˜/¹íßf ˆíá<²¼ê½l!÷b¹Åª7=U‹¥yÖkEt‚Ki§×Z=ýúÜþª.w ó C¦ @ÓÍ-ϼê=žº d±EQÀï~Ðô½.‚`‰ êÏ‚S÷Ð^Ætz f+Pß8Ù!\ÖUÂß®Å] BÃï¡_Ï•+W‹W¿ˆˆš÷Áƒƒƒ™={6r¹œŸ~ú‰U«V!/¼ð%%%ÄÆÆòÚk¯5ª2»Ë±cǬ2Ÿ}öYz÷î]ë´¿þú«u/ۙלöíÛ[‰V®\Ù(ÎW,_¾“ÉDhh(¯¿þºKûïž´•-} póÍ7»õŒú '§Òz·nÝê-_Ûqõæ›oztF"##€˜˜bbœX¨Šú’Á•+WZ•>üðCî¹ç""" $11‘W_}•ÊûëQS”_[êS޼) žŒ+i?CÓ˜¯ƒyJ}µ•·¨Ïµ»)Êþõ¸Ú¿Þ“®öQc˜¯Ö¬YCnn.*•Šûî»ÏªÄ·zõj¯çU‰‰‰L˜0p^ߣG-ßrGŒá–‡ú¦)ÊQC½6Ŷò„Ʋ†º:O* f̘\.'%%…/¿üÒ…R»Ÿ¯»4Ôo+ ‰ÚS³k¿F‚FcÝHò±Q²Q©Tø\ó.)˜ F£Óôa!Vo·—¯dÔma¯ãÖÛY¯ƒBéÕ·;›×í¨2þ‡_ÎÀd2²éíœ9q޼Ü”J%ÑÍ"¹ãï·fY\N··T"Š"¼9‡9ßÍÄGëÜog²yývvoÛÏÕôLÌf3¾~¾´kEphßÌYèõº>øèBÂٹeÅEÅtˆã¡É÷âë§Åd2ñí‹ìâŸ?›LÆ•,¢›EòôôÉh|4Þ”Â*•ŠàÐ |´U[q·­lIK¹D~^!¡ÁL™6 …BAò¹d2­Û¶¤E›X¾øè[küì̾ÿúGþùÄŒ;œÄºñëÒÕ\L¹L^Njš˜fQtïÕ…Þþ³¢aS$ój6?~¿œû'ýÛïŠÖW˪eP\TL—îñ<øØ”J%ºÂ"|¹¸¡‹ xWŽÿiù˜'—ËxåíçXðÕA ¶E 1±QÌ›ûß*Ó=t°Hxû£WXðÕbôz-ZÅÍן.pšÎU9²¥cçötïÕ…¢Â"‚èwSoî¹ *µŠ‚üB¾»®<é_Oå×]2¯f³ø»_øÇ#ã¸ip?>_8‹Ÿø•ËiWËåDFG WÔÎþ†«ó³7øG|;B}4캒I±ÑDû@&ÆÇá«TbD¾;•dÿ|a¥eDûj™Ú#RÁá¬\ õÔ 9Áj5Új~Ì̺ùŒ‚ÈæKW9“WH¾^R.#ÊWËm[Z=4ŸÉ+ðjZ[nmQùa5H£¦Wd8[ª0’ª+fCÚnkÙŒQmZà¯R±:õ2Å#mƒ¸³]K|«ù1¶65±Ñ„ùh˜=°ÿ=ÌÕ’RÔ ‘¾>È«PÎ,-ã§s)Ü×±-#ZÅ¢U*øýÂ%Š&:‡ó`|J¹ ÁÈ‚Óç> ­¨„|½šÇ»vD!—‘\P„L­ýiáïÇ—Ç+Èg—•³ðôy&unÏÈ6ÍéÊÊ i¤“Wn@-—í§¥{x(³œÄ,Ú+F{«ê £ÁÌW3wóÂ{C¬Þã{Dßù¥ï£û¯péB¾ÃýSG2è9 Òkð¸G÷¨ý὜ŒRÎæz±ô "‡v¦1à¶¶û0ý}{ï§ÿÌ$?Çso»Í[¦eÈèö í¨4oËñƒWª wQ„C;/sóðkõ ñaúöõ=å¥úÚ=³ú×dØü[w>ØÕî~òéÎÏòZ>Mxug5½Ð …ʃ¸Q{îC-S“/äóMáiæé¾æ“ˆÏˆVÆðqä\>ÍŸÍeÓeÚ«ÛóZè[(eJtB!K‹–Ø¥y'ïM¾Šú­LËWQóÙPºžeÛI7¥cMøÉýi§Š#DÂs½’¯ ‹b–²«l'Gõ‡É6gcM„+"èçÓŸq–ƒtyæ<–/s¨¯V¦%PDŒ2†xug†úÞF7Mkšçs¦‘cÎqHçi}ÝG†ßƒ‹1¥ìœþ'Bq¶EqØ/Eë~¨{Œ³”¯4ãÑå^Ê01ç$£ˆìˆL¡Âp¸²Lg×Ã-ÏY½ÿš3OÛ%‹²ÐïæÆÉ¨ºŽAѢƣËòRKrA©FØ EóDÊ7Í´(Žz!m•˜ô”ýú,¾ã¿FÑí˜)]üBÁ%»h¾÷ÌE41Ý€9ã$bI(”%ínc+ë›qÂÝVuÀœuAwy`ŒE¡XéƒùÒIJP¨‘iC@UÅþIOÙï/¡û)2µ>ÃëVÙ´¶¾ê¥ ‡ × û+u;(Y >C@~@ÕÞrÏ”ˆ îãý2 º @Ýg"ªÎ£©}1[¨/BÓ u¿‚\‰X®C¿gž÷ à°\Éd|þùçÌ™3½^O›6mhÞ¼9³fͲ‹ÿÆoIJJ o½õ–õ~zz:ï¿ÿ>o¼ñcÇŽeåÊ•ìܹ³Q”Ù]DQä•W^añâÅøúú²xñbÖ¬YÃæÍ›¹téf³:tè@hh(}ô‘5í•+W˜7o“'OfìØ±øúúòÓO?¡ÓéHLLäÉ'ŸD©TRPPÀœ9s¼R^OÉÈÈ`îܹL›6qãÆÑ¯_?-ZDrr2ÙÙÙh4š7oÎ 7ÜÀ믿nwÆ“¶²åÂ… äææÆôéÓQ(ÖÃÑíÛ·§mÛ¶¼÷Þ{õÒÕqúôiÒÓÓ‰åÕW_E«Õ²gÏòòòÐh4„††¢Õjk~‹\¹r…¯¿þš)S¦0tèP–.]Ê‚ HMME¡PSëЇ°z>Ÿ;w.‚ вeKš7oÎìÙ³«L[_2X^^δiÓ˜?>~~~Ìœ9Ó+Ï­‰¦(¿¶Ô§yS<WÒx®£ÑÈÙ³géܹ3ÁÁÁ,X°À¶zõj^}õU«ßãÇ×Y9ÜmgWdz'kÀ÷ßÁ``õêÕ;vŒœœT*Íš5ã¾ûî³¶U…"•3ž|òIÂÃÃÙ´i:ŽÎ;óÔSOáçç‡Édâ“O>±‹ï‰y²þzÚV ASŸŸ¡iÌWAŽ<¥¾ÚÊ[ÔçÚÝeÿz\í_oŒIWû¨1ÌWƒ… òì³Ïòøã£Ñh(((`Û¶mu’_]»v¥OŸ>Ì Aƒ˜8q"jµš¼¼<>ýôS‡4Ë–-cøðáDFF²páB¾øâ ÒÒÒÐh44kÖ¬Ñ)µ6E9j¨w¦ØVžÐXÖPWçÉ{ï½—Ž-†Y?øà|||œz€.++ÃX…Žž;ùºKCý¶’¨=MFAyú3ÿDíÄ¢Á¸1í×gϧ°ð§ßœ¦µ^çæz¿€Õ™C‡Ní¬ge8n@W —ËIèÖ }nìUe¼]Ûö±eýv‡û§OœåßO¼Ækïþ›ðÈ0†Þ>˜¡·vˆWR\bUÊÔújQÔR™Ï–²Òr‡R¥Rr×øQÜ5~”Ý}³ÙÌ»¯Î&ù\ŠÝ}A™ñÒ,Þÿì üüxî•'k¿§me[†oæ,ä…ן&($¿6Õ.¼°@g§  ðýWKP«ÕÜ?éïĶˆáÉçqúì¿_Î¥‹é€wÛ¹¾ùfÎB"¢Â6òÀà¡ì‹tÅLŸú²³¼£(ä¶rGœq!)•[÷rÓà~$ÞÐÄ*-æëªUP¾œv… k¶rÛßÓ¥G<³¾¨Ü¨-,ÐU© ìªÙâ¬òró™þÔÈÍÎss·=‘_O™ÿÙ bÔØá$tíÈë3§»õWægo¡’˹³]Kîl×Òî¾Yyïà1’¯y~¯@EÞÞ”™7õÆ_¥â_.x—Ëdćã£PЧo¾»¯f±å²½ñOÒ^OvY9ím¼SgÙXuÆG‡Oí§¥kXƒ›G3¸ytµñ¯/Ïê”ËŒlÓœ„Ð`ÞPõúp=óNœ#BëÃm-›1(6šA±öùŒ¼¸ë9eåU>CEæ8Ç¿{u!H£æùž]ìÂu£‚2ÀÂÓçQ+äÜ×±-±þ¾<Ñ­“Ógÿt.…KÅ•že½ÙGõÉѽéÌzq “_¼‘Ààê´Š qª ¼ù÷$n»«#Q±U¦måºÇñÚðóü£tï‹ Æy¾­ƒ8º/Ýã|šÕ²ügŽf²úÇSçW˾ý“î}›UÙWÞª¯- Õ¿ë~9ÍÈ{P©*?n®ü¡î6c%$$$$$$$$$$$$$$$šC|‡2Äw¨Ãý{EB‘CØ“ÁÏ0>à^»{""ÛʶðAÞ{d™3>ÓÓúº‹<´5òˆö¨#ª6Œ(gQöëóˆzÇúz‚q EdGL'¯Ì¯\‡éü”‡("džqHkØ3™BºÏDäÁÍÑ rôD`8øB~š×ÒV…¨/¦tù4ü\„L‚vÌ”,š&½%‚LŽ<º 2•ÊÖý«|Ž)y;¦³k•gí &P¾ö5´w}ŒL€ÏÐÿs)¹ùòaJ=ˆæ¦'Q¶é ‹xQ_ŒéüVTñ·_óB-Vÿ /"î~ ‘àÿ }eò¦AÈLÐôu/Ë¿ºF¿ësd‘¨âoGÙ~ÊöCìÂÅre+¦!7N#˜©©©üöÛoÜqÇôìÙ“ï¾ûΖŸŸowxpðàÁŒ5 Aø÷¿ÿmçý`ñâÅÜ}÷ÝtëÖ7ÞxƒaÆÕÉWÊì)GeÒ¤IÌž=›¨¨(FÍèÑ£â9(Ý~øá‡DGG3fÌFŒÁˆ#ì yôÑGÉ̬z}¨oæÎ‹F£aòäÉ´lÙ’_|Ñi¼ùóç“’b^Á“¶ª@>úè#Þ~ûmBBBxûí·íÂóóó…‚² <÷ÜsÌŸ?ŸÀÀ@Þ|óÍzË{öìÙ„††2~üxzôèÁÇìÖsΞ=ËÆ:t(ýúõ£_¿~Ö°üüüj¤êS÷íÛÇ]wÝÅóÏ?ÏÀQ«-ëQQQ6l`̘1( DÑ»ëQS”ß êS޼) žŒ+iÛÊÔ÷;pS”}[\é_oIwú¨1ÌW .ä±ÇÃÏϰx5 u–à´®999<òÈ#V¯§¶lÞ¼™¥K—2nÜ8ùúë¯ë´ŒÞ )ÊQC½6Ŷò„ư†ºº>üðÃÖëÏ?ÿ¼Êç¾ôÒKüôÓO^Ë×ê·•„„Díh2 ÊždQpE‘w7RkâóçA³æÑ¬\¶†GOWWE¦?õ:o@—îñ„…‡„(ˆäåæsþ\ ›ÿØÎƵ[çç‘Ǹwô£ümÌP îK\‡¶`4)Ò“’œÆ¡½¢P(0›Í|øÅ[tMLp¹^Ï>ö÷þiwïß6¡R)I¼¡A!æë8rð8?Ì_Êù³œ>çèá<8öqî¹o =ût#"*œÀ JKÊ(,Б—“OZêeöï>äõ¶ª`Õ/PX cì½£iß±-þþ~”••qþl Û7íF&“Ù-T¢(òõ§ ظv+wIbŸnDF…£Ö¨)Ö•p1凣°@gMãÍv®oÌf3o½øÛ7îæŽ¿ßN|—øøhȸšÅ®­ûXüÝ2ò½èÓ[måª,TÅ/Ìä¡Çïã–a7ŽA¯çBÒEvlÙã06®çÝ×fsùb:·ým0QÍ¢0èõ¤œOcûfÇqU;rôùGßÒ»_Ú´kEDT8Z­z½žËiWÙ¹eKø•⢧i=é_wå×SÌf33ÿó ›þØÆãFÒ¥{<Á¡AfÂé—¯rúø9öí:Xís\™Ÿ½Åº‹é(år#B Ò¨)Ôø3;Eg’9_è|}:–“ÏCëwrw\+#ˆðõ!P­¢ÔhBg0’W®çbQ1û¯S°E‘ÿÛyˆ±Qt &ÌLJ`‘¼r=É…El¾t•M—®"\7=I{=Ÿ;C¤Ö‡?_~»ÆÉÜêç‹R“‰g¶îcl\+†µŒ¥e€2$±îb:OuG%¯ÚˆÁ‡Žs4'QmZÐ6È_¥£ P¨7r¥¤”sù…Èt<4gEfì?Êöô îhÛ’N!Aø(d””±ûjKÎ^ __ó‡šßS.Qh00¶]+â‚ñW))3™9_¨cGz&2ìíˆÀ7'αéÒUÆ´mIÏÈP"´ZÔ 9Å#iE%ÎÎ¥ðºDÞì£úæÈžË<=n9G´£GßXZÆ…¤A¥V /3‘›UÂ…³¹¤_tnT¦¼ÔÈžXË]u§kïÂ"ýP(e”è äç”ræX{·^¬“²g])âÕÉk¸gRw:÷Š! Hƒ¾ÜDö•bNÉàÀöª¯Ý—Î}«6ŠaËžM©äf–Ð÷–ÖtêEd3´¾*LFÂü2.&å±wËEölNE¬á=Dz¯óêckû°¥­ƒB|()6}µ˜ã®²¿ÚÙÓþu¥m)Ì/gçº Ü2Êr03ýb!‡v^ª!•„„„„„„„„„„„„„„„Ä_“O fÓǧ/mUqD)"Ñʵ”‹z./±­l KŠ~pª¬[ÁW…Ÿó§þã&ÐEÝ@y ùB>ûÊ÷0¿ðk.›ªþîr¨ü w_Í(ÿ1ܬDU‚äÁ0P$è¸`Lfù>(0c¿¿ãN¾é¦t^Í}‘þ>è¤N Z5EbɆóì,ÛÆÊ’ ÅNË["S$Q$èH5¦ð§þ›Ë6rјZ«¶ö¤¾î èÒ)_ó ŠÖýQDÅ# ŒF¦P#ê‹r’1%ïÀxb%¢Þy}=ÁœywaJÙ »jf8ú ÊŽÃ .!œíi‰èw~†ñÌ:Ô=îAÑ¢7²€Hd ¥ìy©˜/´x öjÚª‹³(_÷Ú;?B‡fÀãè·]óŒ&Š”­˜†²ýͺ"÷ G梀P’‡}ÓÙ ϬQp)ßš0_>Bé÷ãQ%N@Ñ¢7ò€Hd>Aˆ†ÄòBÄ’\„¼TL©{œ¦r/P¶ò9P¨‘û…#ŠfÄâlT #-Õ«PÄ®'Êþß»@ÝÓâ%¹øm†‰X yS-ž”µ#Aò `ÎãY0ì“7?i fÊ×¼Š)i ªncQD' Sù è20%oÇp`!b©£ñèÆÄôéÓIMMåŽ;î 66–òòr’’’X¿~½u/[©TòòË/ðóÏ?säȇç‚À{ï½ÇâÅ‹iݺ5÷Þ{/?üðCƒ•Ù[ìÛ·¡C‡r÷Ýw3dÈâãã Á`0PXXHRR»vír8o`6›ù׿þźuë¸÷Þ{éÖ­Z­–ôôt6mÚÄ×_Mn®wŒ¿{ Q™5k«V­âþûï§_¿~ÄÄÄ ÑhÐét$''³wï^òó ƒûmeË?þH^^>ø ñññPZZÊéÓ§ë¤ÝåÀŒ1‚‰'Ò¿¢££ ¦¸¸˜‚‚²³³INNfûöª)¸ƒÙl楗^bõêÕÜÿý$&&†þ|,q IDATÙl&??Ÿ´´4Ž=Z«|§M›ÆÔ©S¹ýöÛ‰‰‰¡¼¼œsçαaÆÛ¹>e0))‰É“'£V«‰ŒŒÄl6[9îºë.ÀâAÉ›4Eùµ¥>åÈ›²àɸ’ÆsÕ?~œ &°mÛ6ÒÓíŽ/Z´ˆ‘#G’ššJq±÷ßûmq·]Ïî®e‚ ðÈ#0|øpzöìIDDaaa‚@NN§OŸfõêÕ¬Zµ A¨ú½}ùòå¨ÕjúöíKhh(yyyìß¿Ÿ/¾ø‚Ó§ŸGóTŽÜ]=]÷‚¦>?CÓ˜¯Z޼A}ÎíÞ >×î¦(û×SÛþõæ˜tµÃ|¥ÓéX¼x1>ú(@µŠ…žòÞ{ï1`À:tè@tt4Z­½^Ojj*7nä»ï¾C§ÓU™þ¥—^bÿþýŒ?žŽ;âïïÁ` ??Ÿ‹/ròäIvìØQgåw•¦(G õNØÛÊËêÊ:èÌ[²»üÕ[IHHÔÙµvüç?ÿ‘r¹ÜOÅQC¶oß¾òàÁJ…°Þ½{×cuž¸¸¸†.‚Ë|þý,•AÿØý3~þ~|õÉ~˜¿ÔÛEüKàvþ_áµ­$9úk³fÌmø©”|}â,‹Î8W4—¨ÇG%—3÷èi~NJmèâ4yD¬¿/>ÉÊ µó !!!Qwü:j!>þŸ½ûŽoªê8þÉnÒ½ -J)mÙ L”!Êr ÷@ôqŸ¢¢ŠóÁ…¸áQY‚lQöÞ{èÞÍúýš6$-M“4-~߯/Ò{ïÉ9÷žsnnrï÷œ××mfá‘þ.ŽB!„B!.RÓ§Ow¹üŸvoWQsʈfŽš@ñ¬aÚïÝà;!„¢&Z´hÁÂ… ¸ÿþûY¼x±ŸK$DíI{nø6mÚDpp0&Là³Ï>ówq„Bn¿ýv^}õU6nÜÈ7Þèïâ!„ÏÉw+!ªç*ηW¯^à E¶B¡È·X,…@‰F£)+**2*•Jc`` ¥¬¬Ìm9pà€588ØmmݺµuܸqN#ücfPU{hÄ“þ.Â?‚çš“c%„B!„B!„B!„õ‡¦ÃM¶V æ“Ûü[!„ÿXwÜq`›ijÓ¦†;‰ íY!„ÞŘ1c˜4i’ŸK#„uC¾[ á ,„B!„B!„B!„Bñ§ò–ì#˜OlÆRpŒ%(‚ãФ_¦õL{c-ÊòsI…B\Ì>úè#:ÄúõëÉÈÈ ¨¨ˆÆsíµ×rà 70þ|Ξ=ëç’ qaÒž…BáK)))c4iÓ¦ O=õÑÑѬ\¹’E‹ù»xBá5òÝJˆúM”…B!÷·mŨôd‡ew-\A^™ÑO%ââwo›5KpXªÓú©4B!„B!„Bˆ4¥ uÒe ÖU¹‰9c%‹ß¬ÃB !„ø§Q©T\yå•ètUmß¾—^z©K%DíH{B!„¯=÷ÜsôêÕËaÙ¾}ûø×¿þå§ !„÷Éw+!ê? P®GVl™ç—|/ow_òB!Dý¨Q¨q¼4T(^{ÿï—ßåµ÷j†÷šâï"ˆ ð¤Mz«~5jªþÁD!„B!„B!êŒRMéšÉ¨» K@aC¡Òb-ÉÃ|z7¦=K0îøÌ2°©BßÑh4üç?ÿ¡G$&&‰V«%''‡;vðÛo¿ñóÏ?c4Ê瑨ÿ¤= !„Â׊‹‹ÉÍÍÅ`0püøq,XÀÇLaa¡¿‹&„^#ß­„¨ÿçþ97nœbûöíŠ3gÎ(òóóIIIŠ3gÎ(µZ­ª°°Pi±X4ƒAc4µ@€R© ´Z­ÁV«5|ùòå³ÿþûoû{]rÉ%u¸;þ—œœ|á„B!„B!„B!„ÂO¦OŸîrù?íÞ®B!„B!„B!„B\¬\ÅùöêÕk˜B¡ÈV(ù‹¥(Ñh4eEEEF¥Ri ´”••™£££-°[£££­­[·¶Ž7Îz~Ê:Û!„B!„B!„B!„B!„B!„B!„B!Dƒ'ÊB!„B!„B!„B!„B!„B!„B!„Bˆ“e!„B!„B!„B!„B!„B!„B!„B!D©ý]!„BѰ)`µú»ÂC¥RAA^©¿‹ò }A!„B!„Bˆ‹‹¦ÍPT±©˜Ž®Ç´g‰¿‹#„µN«V­8{ö,ûöíówqÄ?@XX­Zµ"''‡Ý»w×Y¾±±±ö¶¾cÇŽ:ËWÔ ©_!üKúàÅMê·þ“:òù~$„Bá] ,DÖ¤i}c%Çåú¢ˆ~õõÂáè\_2öïU,Ÿ¿¿ŽKtaáQî}º;M’ˆŒ dòÛkX:w¯ÛïÓoX 7Žî€Åbeú¤ ,ÿÍý}m×¥1W nIËÖÑ„†PZj"7«„SÇòØüç þ˜·Ò“Ûï[Õ¦/<Ö1ëZ4u¹îõu›Yxä„7‹(„B!„B!„p“®Ï¿Pè‚°äŸöwQ„ðšvíÚñá‡b0xöÙgYºt©¿‹tQªoÇyõêÕhµZÆ/àûY}k¾²lÙ2‚ƒƒ™0aB(/X°ÀžoC Üù§´ O4äú5'}¡þòG5j/¾ø¢Óò½{÷2pà@Ÿ¥­êº/È9Ö}RGuÃÇY¾ !„Bx—Òߢ>P*Ä7i„R©ðwQj¬Mû4¾úñ#®ÖŸ¦IMÐô„„“’Ú‚Á×_Åè‡îðwETÛ¾0ú¡;ˆoÒˆˆÈpþ×Ý>* ƒR¡ q¥¢á|¦”˜Ìä•þY/0¬J­ä¾gz”É_ fài4°Ý¾(kéÐ-žÈ˜ÀZ¿GdL £ïJHxa‘zî}º;!an½ÇÈÇ»òì;ýèÚ§)ÑTj%†@-š„б{#ëBH¸{ïY_Õ¶/»êw¾/®B!„B!„Bˆ°Ç{ŒÄÄD¢¢¢xöÙgý]œ‹–gQi¢*Ò6„°‘¾ „§}A©T’˜˜ˆR)¡¾ÒPÏW ­m4Ôã,êFCkÏB!ÄŪAΠ ãîÛ¯§q\ SgÌeÇn÷fskÞ4Ôäæ4KŒ'$8ˆ‚ÂB>þršJ+ê».=:óú/ c@·(.*öw‘jäÙW# @GaAŸÿçÖÿ¹ ³ÙBtl-Ršù»xÿH3ø•y³Ùÿ¾ç‘»¸á¶!~,‘{<é f³ÙþÚTéµÿ4]b£x­G'T*ÎZH±©áô‡O¶ìbö#n¥¹ôòD[„ Ñª¸ëÑKéÐ=žIÿ^MöÙ"_€7¦Ñ²u4ñÍB9}"Ÿ÷^Xæ³¼JŠŒö× …­Nå³¼ê“ð(=ŠJƒU¨ÔJÂ"õäå”Ô(}÷¾Íp]«j·ÉÍ*æÌɧåuY¿ÞRÛ¾0iën&mu1~Öà+ Ðù´¼B!„B!„µucÐÍ<ñ¯g½Â¬‚Ÿ¶Q¢¤·á ®2\M;]•á”YK9l:ÌòâeLÏŸJÅùw!W‚•Á|3™TmOyœeÅ¿W¹­§ù&iZpcÐÍt¸”xuf«‰c¦c¬,YÎ÷yß‘kÉñIZ¿P(Q'÷A“zªÆíP±šJ±dÁ´9Æ Ó°–Ö¬Ž„ð”º DŸ;•dÞ e›œ· º‚ï¬õ(”®uý^š40ܺKAÖ0Ÿ‚²uPø˜ùl7êÄðáÃyíµ×¸ï¾ûX²d‰Ó6={ödÊ”)œ={–®]»º|“Édm–{»>#ÇYTEÚ†¨Š´ !l¤/ˆÊ¦NÊO?ýdÿûñÇç®»îòyÚúÀ“¾Ð«W/>ùäôz=mÛ¶¥¨ÈwÏqý“5ÄóUCl ñ8‹ºÑÛ³Bq±jpÊa¡ ¿q0b£ÜNÛ$>ŽAý{Ó$>Îa¹FýÏ4®õ4° ¤ä¦4MjÀÄ ŸóëÌ…öuÇŽœ`ã_[üU´4c™c™Ñáï†Ä“¾ðÅGßE@€Ž‰oîå’ Ñp4jTÿœëеKqúd>×ÞٖΗ%¢P@»KÓwh 3¾rñ‘—\uC*±ñÁädúv`‘¯ýÑþºirÿþj°Oó«/ŽìÏæôÉbpâp.ÇçÖ8ýƒZ:üýý'ëY¹èX!"&&Iaè —ië²~½Å_}A!„B!„¢. ÄÓÏ_p» ÑïÓKßÇa™Z¡&M›Nš6!ø'cgÌgª}ŸxuoG½Gжúð<ÍW‰’‡ÂÆpgÈ”Tú}W¡#EÛŠm+å2ôZZÒ{u‹^ËZ5ªØ4T±ihZ¡húÝX ª¯#!ê‚¶#ßc{]ø¿*‚“2o*M˜£Ð‚24)`¸2úƒµ¬.Jí{O?ý4Ë–-«ÕÃÙï¿ÿ>qqqèõzÆïƒÒ ã,ª&mCTEÚ†6ÒDeeee”••9ü]iëOúB`` z½ÞG%åâùª!¶†xœEÝhˆíY!„¸X5˜e¥RI—Nméß§;:÷è:·oͰ«¯@¥R‘™•Ãæí»9|ôY9¹”–6¬/BÄ6޵¿^ýÇ:?–D›}»p÷Ícü] !„Ø•É{/,£Ió0†ÝÙ–„æaÌþv«¿‹%§Óií¯KJJýX!„ÂæèÁ>zu*•³Y®³\Q(¨Õ¶©¬V+&cÍ~ý!7»„ÙßÕ.À60¨âZ%3£Ð[Eªgé B!„B!„¸ØD¨"øwÔ4 oe½Áaª «rûEE XT´+¿ì3îeMÉ*ÔQj®4ôsšé¸Ü À!ÜúñêÖ”¬¢{@Ï•³¶ùž4à¬WÉ·ä³²x¹Ãº5%«x?z"—é{ÑS9z…žbk±WÒú“i×"L»A¥ce9»Ó¡ÕèUÔ-¯DÜÛ@ áo‚2,yý´ëcÝeÁÉÅ¿BΫ@¥Ÿ…MG x>(ë¤Ôu¢´´NÇØ±c™={6¥¥òÌ€B!„B!„B!ü£A(G„‡Jfv —®fßÁ#üßÔ(­N«å¦aW¡P(øiîb6oÛåãÒ:KHlÌ+ž%¾I#fþïW&}øÍÓè zn>”Ë®èF“¦ñõ“›“ljc§Ø°n3S¿ú±Êô:–~×ô¡×•=h™Ö‚°ðPLF#¹9ùìÛs€Õ¬cÎO¿ym‡Ü0Ž—¶#©e3bã¢Ñ().åøÑ,_²šßÏ¡° êà”ÑÞÎ%Ý:Ihh­†œ¬¶nÚÉßÍbÛæU¦­Í±JJnÊþÔé½®ýÉiÙú?7ñؽϻÌ;­M+nºc.iKXx(ùyùlݸƒéS~fÛ¦ªË\î”yÒ‡ßðÝ—Î#%GD…Óí²Kh×±5-Rš×8†À @ ().åäñ æÍ^ÈŒ©¿¸,C¯¾=vÓ5¤¶nI@€ŽS'O³jÙŸLûæ'²³rœ¶ïM ¾’䔿„„sâØ)V,]ËâyKõÐtéÞÉ6+ãÂLœ0™â"ï>”ái?ªËúõV¾îö}OúÂÍw\˘§ïsÚîàþÃÜu݃5Þ_wÛÀà믢u»TZ¤4'*:‚àÐ`TJ%§3Îòך|ÿõ N?uÁ¼ks~®­ÁÍ›Ð1:‚¤Ð`b èÕjJLfޱâÄ)~Úw˜B£©Êô£Ò[Ò96’è€Bt4J%9¥elËÌæÇ½‡ØžéúXèÕ*nHnFÏÆ14 Ä QSd4‘WfäDaNgòýî^O[.!(—»v >ÈÀ¬ýGø|Ûî³Ñ KJ¤]T8a:f«…ìÒ2Žä²=3›…GNp¢ È¾½V¥dÑuWðꟛXrô¤Ó{.¾þ*4J%mÞÉ{¹Ì÷òøX†%%Ò*<”•ŠSEŬ>yšé»]êüäKó`¾p™Óòß®à´lýéLþµ|Ë|Ó"B¹1¹¢#Õi)(3²53›ÿí9ĶÌl—iÀ;uäM5 ÈTk”ôèלÎ=›Ð<%’à0 …‚¼ìNŸÌg˺ü>g/y¶‡j¾^8]€ó¥k».ù~ù]NË¿ù` v¼î‹nDû®ñ´éG|ÓP¢ ¨Q©•”›È<]È‘}ÙüoòFNŸÈ¯ÅÞW¯Ý¥yfB_öí8ËKÌ»`­NEß¡)\ry" ÍÃ0i()6‘ŸS™“…ìØxŠ?í¤¤¸êóG¿a) ÞšÈØ@Š ìßy–ù?ìdÛzç>RÕqøìß«X>•ùT•öò-¸|` §å/=8Ÿ}ÛÏT›Öúµ§ñÓq>Ÿ' !„B!„âb DÉk‘ÿ&JÍ·yß0£à<öPµi*ŸoKé&®4ôC§@‰ ŽƒË%¨›¯Nà¨éŸäLäÏ’5üž°²Feõ$ßù…¿V™vAÑo\¦ï… 1êXy--À}¡Ò% Ѫ”¡hZ²-Yl.ÝÄ´ü©l-Ý\åû×^ÕÇÊ||3ê–W¢PëlÓÏZ=PÓîzú?%û…_]_í¶ª¦]0Üø Ö‚3LºÚy}\k4nCݤ }8ÖÒ|ÌÇ7Qö÷w˜Ol©þ½=HëŠBŠáÖ¯PF4Å’y€¢iwc-uümY¡1 ét+ê½P†'¢Ðb-+ÄZ’‹%ç8æ£Q¶î¿nç}!º÷¡JìŠ"8E@( •kQ6æ›)Û0íû«@“:uë!¨bSQ„`5•b-ÊÆ’uË©mwÌÇ’sÔëå®,ìж,ó˜Ò øÜíJÓQÈ}¨¢ÉZ}4–¦ºåhÚÝ€*.…Z‡%ï¦Ë)ûë[¬EY>ÉsÛ¶m¨ÕjÚ·oÏwÜÁ—_~yÁ4£FâÅ_tZ¾wï^Xã¼2d ==ÈÈHŒF#ÙÙÙìܹ“¥K—2}út—iÛ·oÏÈ‘#éÒ¥ ‘‘‘äææ²~ýz¾øâ 6lØPežÑÑÑôîÝ›K.¹„ÔÔTâãã F¡PPTTıcǘ1cÿý¯ç}é¶ÛncüøñÍŠ+øôÓO9~üx•éÆŽKÏž=‰%<<­VKff&ëׯç믿fãÆÛk46lØ€Á`à§Ÿ~âé§Ÿvù¾z½žõë×£Óé˜0aŸ}öà½ó³;ý·²†tŽ­¬¶õ µkWžžŸ=Q›:ÒétösÁرc™;w®Óûîܹ­VËøñãùú믽¶¿µMëïÏP…BÁàÁƒ¹á†hÓ¦ !!!”––’™™Éؼy3³fÍâðáÃ,‹;Ü=çxKm>Ë*«ë>Øøóz2%%…ùóç;-ߺÕyr‚Õ«Wsçwº|Oê·¶üÕjsŽõÆg·§çwëÈ[m£¶üqý ž?ªëóÕ­·ÞJ×®]iÕª5"00ââb>Ì‚ ˜2e ùùU?Óèéu»×“C‡åÚk¯%55•°°0Ž=Ê¢E‹øå—_;v,—_~9f³™yóæñúë¯STTä¾¶ûëïö,„B×D€òº [8~2ƒ=ûa±Z ÐÕ8m×Îí0è8pè¨_‚“~òRÒ’¸ãî›Y¹t-Û·T]–а>þfM“š8, "8$ˆ„ÄÆ¨TÊ*+ÓÛ¶bÜÛÏÐ(>Îa¹F£FoÐ×8†¢Âb¯(?üÄÝ99d %-™”´d®¿uόǮí{]¦ïvù¥¤µIqXÅ•W]NŸþ—ñö+òëÌ…Né<=Vž¸ìHî¸ûf‡e‘áôîד^}{ðþŸ2óÎ?îùÓÓ>$:6Ê庠`5-S“Xà´N¥Rñüø1`ÐË›%82A× à™1㜂g‡º‘äVIö¿›µH¤Y‹Dî¼Çñ¸ ¹a á¡<7öµÚîšOÛ†¿êד|ýÑ÷=QÛvðÈ“÷8sâ›4"¾I#ú_Ó›Çï{‘„u÷ü쉇ڥ¨qüØ Ô¨I !%<„ëZ4åÙUëÙë2}·FѤ†‡:,‹ÖpEB#zÇÇ1aý6æ:æ”.D«á£>Ýhä°È€R¡pÀêIÚó÷=%<€ÛS“Xy"ƒUŸ¨ ïØš!çõ_5*â zâ zºÄFQh4Ud\*…‚ç.mGÿÄÆËƒI nÎ5ÍxnÕújƒ…kë¾6­¸=5ÉaYx€Ž^ñq\Ç·3kÿ§tÞª£º–Ò&šG^êETœs?ŽŠ $*.´q,ûuŸ×ò¼bpKî}º{•ëôj⛆ß4”é“êÇ ˆh/|0€FMB–i Ò—BÛK±ä—=PMàlóV‘öך0»'б{_½»–ų÷ø¬ü …·Ž³B!„B!ÄÅhTè=t èÆ†Ò¿ù(çC߯½®#;Ëv8 Ì(øeÛYU¼ ‚•ÁçY“|«Sd©ˆj,±”x=mOýe¤kÛ8,‹QÅÒßp} ýy=ë~)˜åV¾žPÅ·Àœ±Ó+ÁÉÖÛ@… }Õ3o—Sl¿gZò3œÖé.m—‘ˆˆs3>_AÉïocÜäúÞŸ'i]QhÑ_÷!ʈ¦Xó3(þùQçàd}(†[¾@ÙÜqy@Š€”aMP(•> PV5ï‰*®µc¾Á1¨[õGÒ—’…ã1ns´Z¡Ñ0ä-ÔÍ{8-W„êQ†6†æ=°–P¶á{¯—»\ðC l{÷.”®u½ºhÒl¯ §€Õè³"9Sª8Mšc ½2¢)Úˆ;Ñ´FñÌÇjü^ï¾û.S¦Lá`Ú´iNúúB‡øàƒhÒÄñžF£Á`0Oaa¡Ëå§žzŠpœˆ **Š«®ºŠ0nÜ8¾ûî;—ùΚ5‹¸¸8—ëBBBHOOÇ`0Ôr¯edØÎ=Ü6*ÊöìÅÉ“UDÏ×ÂsÏ=Gp°óg_bb"ÇgÈ!Œ1‚Í›¯ â›o¾¡cÇŽË[·nMëÖ­¶¯L¥R1a† æ°<))‰¤¤$nºé&î½÷^‡‡ðý}¬À³¶QÛ6Æÿþ÷?’““–‡††JÓ¦MQ©TÕuù’Éäú^–'}ÐS×_ï88Itt4C† ášk®á©§žböìÙ>)s§NþNHHà¶ÛncðàÁ >¼Ê@î>}úЮ];‡eqqq 4ˆ«¯¾šçŸž¬¸f0¬\¹’ЫW/ V«ó`0={öD§³=ó¸xñâ*Ëí®ÚôßÊê9¶¶õ[ÛvåÉùÙSuYGå<Ù_+Oò5 |üñÇôêÕËi¹Á` I“&ôîÝ›¼¼<§`nO¹{Îño|–ÕulHêÃ5’§j[¿žðG_ÿœc½qÎñGÕ–¿®Ÿ=ù~þ9_=ûXW IDATì³NŸeAAAö2ßyçÜ{ï½.q¡öí¹¶×“÷Ýwiiiö¿“““INNæÁ'¸ºõÖ[‰ŠŠâþûï÷êþ !„¢~iÊùEìÚ{°Vi;µO  °ˆ;nB£Ø(‚‚)--ãØ‰S¬ý{3{ö{wT³óÅÄE;üÛ(ºÚ¸÷ßFÓ¤&ËŒLž8…5+ÿ"'+VCl\4­Ò“)*t=Ól‹”æ¼ÿùõXÌþº”•ËÖrâØI %aá¡´iŸê³¼e‹VòÃw³ÈÏ+ 0Ð@÷^—r눈ˆ çí_aÔMyÆy”à¯?ŠÉdâıSä¢Ö¨Ik¢ió&üëù‡X¹t-¹9y^9V÷¡ï¥×ÐëÊî¼üÖ3 îu+ÅÅŽXÌÎ7Þo}“=ˆtú-Lžø_Ž=I“¦ñ<øøhÚtHcì³÷³móöîòNP˜;e6U5 빟¶oÙÅ‚9¿s`ß!òrò1‡Ñ<¹©Ë¶qߨö ÒÅó—1ç§ßÈÏ+ MûtF?t;a᡼5q#o|˜3gÒOž8…ßϦã%íxsâËü<}._}òÝ/¿”^‚Ë®èNóM9è¥þèI?òGýzšomû¾'}aÆ÷¿0ëÇŠY)ï;’›ï¸¶Æûëi»X¶x¿ü8ì¬\ =í:µfäà äÅ7žàŽa÷»¼ñSÎÝó³7,;vŠ{‘o4bP«éÞ(š[Rš ã­Ë.áîE+É,)uJ÷õö½˜¬VNQh4¡V(Hå¶­H âñŽ­Yy"ƒ¼2Ç'/F¤%Ó4$£ÅÂÛö°öÔrJËÐ(•ÄhJQç OÒVcpø Ö ¯6@ytë–öàäY9üoÏAŽä¢b zÆuë€N¥º`¾îº·MŠ=8yÉÑÌ9pŒ|£‘6‘aŒJoI˜NË¿{vfô¢•œ©Ô?ååÓæ.oËK];0ä—Å”˜ÍyX\´Çá­’ìÁÉÏd2yÛN‘Èm[Ñ&2œG;¤³-3‡}çz©ŽêRrëh^øpMõuxhoy9ǹ¤¨¢mkuêò4,+Æ2óùÉ1™ÏYmÍÚLA^)gNÔh[_ýD7§ Ùóe)²Ï2í®;¹” «‘u¦â¡¥ÊÇY¡P ÕÕ¼¯UN[y6d³Ù‚Éè|=e©4ð§õë _g!„B!„Bˆ†*YÓ’{Bî'Ç’Í gŸq;°·\2ˆ–šn Ά¾”XKø0ç]—ÛfšÏ²¢øOŠ]«|«s…¡/È0ŸòzÚÏs?Ãd5qÜtŒK>j…štmÆ„=F3Msž ž?Š–‘k©úwuO)tA(£[¢íx+ê–Wb5–PúÇ^{KÁésùƒJ檣HÛCÜÖsiÊi»Œ°›þMéÊO°äCžˆ®×£¨·#àŠ'1ŸØŒåô¯¥uYÆ€ô7LD×KÞIЏKžsýj»Ýc N6—QºòSLWa-ʵepªØT¬e¾ *-[ý9XLXrc--¥U\:º^¢ŒhF@ßg0íÿk±ãÀ¹ºþÏÛƒ“»`Úö –‚3(Ô:a è¯Jïߣ©Ìp=²½.œ…?T½­¶Ò3Ù%K}Z,'ºË¶'w-À¸e&ÖÒ pÊ­XóO_àÝÜ·jÕ*Ö®]K·nÝ9r$Ÿ|òIµÛO™2…￯*ê©§5jTóKMMeÊ”)b6›™={6K–,áÈ‘#( "##騱£Ë™Íî¿ÿ~ûƒÝk×®åwÞáÈ‘#4oÞœgžy†N:ñÒK/±aÆj¤ß¸q#³fÍbÏž=dggc4 !%%…M›6Õx_ªsê”­/‡„„ Ñh0«>_•””§Ïs¹ß~ûiÓ¦‘™™I`` —\r cÆŒ!88˜wÞy‡8Ýã7ìßÿøãÌœ9“üü|ÒÓÓ9r¤Ãƒãç{ê©§ì£Ï™3‡éÓ§“——G§N;v,Lž<™AƒÙ÷×ÓcåMî¶ OÚä˜1cHNN¦¬¬Œwß}—eË–‘••…V«¥Q£F´mÛ–‚ç{ž¶>úÈ>ãne—]v“&MB¡PØ7÷׌F#Ó¦McÁ‚äå呞žÎc=F£Fxûí·Ù½{7»v9>§á2ÿùçŸL:•£GbµZéÑ£>ú(ÁÁÁ¼õÖ[ 2Äeº?ü“ÉÄ‘#GÈÏÏG£ÑЮ];ž~úiZ´hÁ+¯¼Â¢E‹ÈÉ©¸6ûý÷ß0`ÑÑѤ¥¥¹,Sß¾¶ëÂC‡±o_Å@Ýž¶Úô_WÂ9¶²ÚÔ¯7ÚUmÎÏÞRut>Oö×Ý´þü ?~¼=PpΜ9̘1ƒŒŒ t:M›6åý÷ßGåƒç” vçOÕö³¬2õÁ†ÀŸ×“{÷î%=ÝöÌü€øàÛ÷úÎ;S\ìø¬¬Ùìü,N¹Ú~†zÂ}¡2wαžž¯¼qÎq·Ž¼Õ6jÃ_×Ïž|?ò÷ùjþüù|ýõ×äææLŸ>}¸çž{ˆŽŽæË/¿dðàÁœ>]õï î^3xz=ùÞ{ïñÍ7ßЭ[7>ÿüs¾ýö[>üðCúôéÃ;ï¼C¿~ýhÙ²%{÷:Otçîþú³= !„¢j "@¹¶‚ƒ DG†Юu+‡ujƒžVÉÍi•ÜœßWüÉ’åU ¹ëK¬ %µ¹9y¬ÿ³úÑßÚv°]4-üu)Óþû“ú3gÙ¶Ùy6ÑrOþß#õ”””òäÿÇæ Ûœ¶Y·z½»»Pc»wìcëÆŠ‹íí[vñך|øÅ¿ cäýÃywüGNéÖ¬øËiÙÊek9|ð(ßÍš„V§¥kÏÎ,üÕñ®bm•Õj¥¬´ “©âⳬÌh_^•è˜HF?x;Ë—¬æÿžx‹Åö@FvVßÿÓæL&*&’[ñ/¼SíûÕ”'e>ßšåë\λs›óЏÆ1Üz§m4Óy³ñï—Þ·¯Û»ëþÚÌ×?~LHh0£¼·Æ9žêäiŠ ‹YõÇŸ>x”¦Í›°þÏMäæäñÛœ%Ü:âzZ¤4§u»T¯(×¶mø«~=Í·¶}ß“ve±X¶qÌ_o´+€ÝÛ÷ò×šŠ›Ü[6n'?¿€'_|„Äf ´n—Zí9ÓÝó³7ìÉÉek¥xwdåðwF&ï÷îB¸NˈôdÞÛ°Ý)ÝÚSgœ–­:qš#y…L¹êr´*%]ã¢Ytä„Ã6m£lŸƒ‹Žœ`úÇÁ>Η°=³êíéþÓÛÖŸäà®LòóJ)+5 WÓ8“±~ü(¥ÑªèÐ-Þþ÷ÎML~{ g3 P«•ÄÆ‡Þ1–À`Ýßkéܽ,𹫮½«-]û4@«SѵOSæÿXqž¬|œ›&Gðï¯׸̕ÓþwÉíöz^µè Ÿ½±ªÆi½Q¿5åÍã,„B!„Bq1Q¢ä…È—Q+Ô¼›5³f׉V'XÌï +–í3îååÌØS¶Û[Eõi¾th{¨ó“œ‰>I»ªx…Ó²åÅË8d<Èg¢Uèè®ïÉo…¿º•M(tÁ=âxÿÕrvÅó_ªQ nMYóÏ=¼¨P  ŒÂ’g›ÊÜžÒ1·= ©ޱ•#¯b)EP ºî÷`Ú»”â9ÏØgw6eQ<ãaGÿŒ"(mçÛ)™ÿ²WÒº¢ŠÆpÃD”QÉX²SüÓÃ.ƒ“¡b6jãÎß(ûû[‡uæüÓ>›YÀtÐù7YÓþåX²8j¨u¨›õÀ¸s¾}½2¦UEÀíæ”,~Óñ 2vÂÕ¯¾ Pè¶[¦/‚¼÷ªß^hûß|,¹ÕoëMÊFh/¹ã¶_(Yðª}åôÌGþ&ð®ïQ„ ë~% Çû¤'N¤[·nŒ=š¯¾úŠ’’ªgy7›Íæºûîøñã ¤¸¸˜Q£Fñ×_ÎÏx,_¾ÜiYll,cÇŽ`áÂ…<òÈ#ö¼3331b‹/&66–Ñ£Góä“OVY†¥K—ºœ¡jËïõ¥'l÷Z 111?~€gžy†Î;óöÛoó÷ßÛ÷ °ožçr[·neåʊϲ¿ÿþ›¼¼<^{í5’’’èСƒC0xjj*ƒ `òäɼùfEÿݱc3gÎdûöíh4§¼âãã=z43fÌà™gžqH»víZæÎKXX>ú(Ï?ÿ<àù±ò&wÚ†§m²sçÎÌž=›/¾øÂaÝ©S§\éƒçmãüôåûòÖ[o¡P(ؾ};/¼ð‚×÷×>þøc&N¬¸Ú±c+W®dÞ¼y„††2vìX‡YÖ¼UæåË—óë¯×O[·n¥  €W_}•ôôtÒÒÒØ¹Óùy’eË–9-[¼x1û÷ïgÁ‚èt:z÷îí0óóÒ¥K±Z­( úõë稢R©èß¿?‹-rXçIÛ¨mÿu¥!œc+s·~½Õ®Ü=?{S]ÔÑù<Ù_wÓúë34==Ý”5uêT^zé%‡÷Û¶mï¼óŽÏ”ksÎñTm?Ë*óWlüy=iµZ)-µ ¾o2ULhQVVf_^µý õ„?úBeîœc=©#osÜ­#oµÚðÇõ³'ßêÃùjÛ¶m¬__ñ¼÷ÆYµjß}÷‘‘‘Œ3†ÿû¿ÿ«2½;íÙדǧ°°%K–°ÿ~Z´hÁêÕ«ÉÎÎfæÌ™ÜsÏ=¤¦¦Ò±cG—Êîî¯?Û³B!ª¦ôw|©QlÅ̘®ßÂä)3xãƒÉ¼2á&}óGŽÛnj^yyWš6iì³r|÷å¼ø¯×ùä½/¹÷¶Çœf>_N¶íÎYz»V„†U?›[eÉ­’hÓÞ6¢Ï7Ÿ}ï2@Ñ6¯ßƯ3pÕà+P«kôðq2NÙF½iܤ‘ÓúÚ+OôtZ£ÑÄ{o|b"-WR\ÂOÓæÐõ²ÎuR&_0èJ”*%&“‰¯>uþÂrøÀQÌY@¿kú\°~órò³/ËüÐyàð}ûöñóÏ?0tèPû½ûú|¬ªãi›Ìʲ=ßÒ¡CœÖ×¥RÉ|@xx8ùùù<üðÃ.)¨}ÐÕÌ‘§NbêÔ©€mfa½^_'ež;·b2‡víÚ¹•öàÁƒö ³ÄÄD‡ugÏžeÝ:Û}æò@äÊzôèAx¸mðñ9s渕oujÛýÅ×çêê×—íªºóóÅÈ“ýõ×±ª.ß¡C‡PRRâ²ùKuçOùê³Ì_}°¾i¨×HâÉg¨'|ÙüÁ—çÕÑ…øãúÙ“ïGõõ|µnÝ:~øáÀv è­ë:o_O–ÏrYñLbùìÇ!!5–ßWû+„Bß¹¨” •~¼üå·¥:zœÂÂ"ÊÊŒ9~’¯¿ŸIQ±íÇÙ®}{1þÇâULûæ'N¯úe¹¿›Åb¥y‹¦|?g2÷ABâ…¨;^ÒÖþzþìEÕlY÷Vü¾½AOr«æN냹㞛ùè›·™±àÿ5‹9LãÓoß%$ÔvAªÓiÒÕöXy¢CgÛT;¶ì"óL–Ëmí·U……‡^?n6×V›¶À×{‘qÒyW€Uü @@€Ž–©I5{c±} W k©¶mÃ_õëI¾õ¹ïWÅgí (.*¶½×¤~Ü9?ûÒŠèÕ*Z„:Ô¨¹#µûtã‡kú°ðºÌÒ—O®ènLÕ¹9oÆÞCX¬Vš‡1u`oîm“BBPÍÀò$íùþ8~Ši»r²°¸ÚíÊgÞ•Ë™âªGy÷¶6‘¶|äæ“Q二kεՕŠduTíÏí2K\Þv(Ïö£u˜NKØyŸ…Þ¬£ºÐºcœÃß?|¹«¥n‚ÐýáÝï®åûåwÙÿ=3¡¯}]rz”úï—ßE÷¾ÍìëKŠŒÞW1ÛzÇî ¼óݵ ½½ 1ƒ©­âB#§Øÿ‹ôÞC†þR³B!„B!DCª ãþЇ±`áƒìwjý>–ºíLßc½¸;c3 ~ÀbµÐßpŸÆLF«p¾÷ç ÞÈ·‰:‘I±_® g¯qã2_¬qþî¦ R12än>ýš9ce“u,LXÆW±S=}©SÔ8wXK È¿_IÑ´Ñ7Ï«u«èoþ TÞ«#k®mPeˆmPjUãv(l¿µ«›U+έ·æT(«:`>¹k¡ëÙ¼-™léõá(ôá^I[™*6 í_¢ i„ùð:ŠxkqõQ±Æ ÓÀjA™Dàè™è.{exÝúè#Fí³™ýºvíjýÓO?¹•¶K—.€m¤ò‡’Ï·oŸmðàˆˆ"""jYJï9zÔvþ‰ cÇŽ„†ÚúMåÐË××U@IQQ‘ýžœÊƒ­víÚEaa¡[ïÛ©“í<¹{÷n{ðÇù~ÿÝ6І^¯'==ݾ¼¾«êxÚ&¿ùæ, -[¶dÉ’%<ñÄ4kÖ̧ev塇²ïËÓO?m¯‹óÕç>X>{¤J¥"55վܗeÎÍÍ%33€èh炃ƒyðÁ™>}:+V¬`ûöíüõ×_̘1Ãdà|möË/¿¶™›4iâ°îšk®`ïÞ½lß¾½Æå½Oú¯¿øò¼Q]ýú²]Uw~¾y²¿þ:VÕåÛ¶­í¹»]»vÙÛO]ªí9Ǿú,óW¬â5Ò…Ôä3Ôþè þàËsŽ¯ë¨¶üqýìÉ÷£ú|¾Z´Èö|¸Á` --Í+ïé«ëI…Âóx_ì¯B!|ç¢N$  â†šZ­ÂdrŦ¬Ìȶ{éÒ©-Í|8ƒ²»Ö­^Ï ¿Æ“/>BdtwÞ{ wÞ{ Û6íä‡ïfñÇâUN³«DÅØF›ÉÏ+ +³Ž‡¾€ÊQÑ‘À^ûßÍZ$òÞg㉎rH£Ói‚ ]]¬ÖöXy"2Úöe¢}ç6¬Ø2ï‚Û‡„ÛgómˆÊ÷·ª RÛºŠ/a‘Qõãǡڶ Õ¯'ùÖç¾__·«’s­ZÔW' ‹ì¯£ô:vWÄËÑ,$ˆw.¿”h½ãl:•Ê!`ÕÕwúugù¿5ùW§ÖDè¸#µw¤¶`[f6?î=ÄòãN³öz#mmEžûì¾P ³·•ç›Q\u¾§*.Gêu]å¦näk«ÓöQüqãÕÜ>X«±Ïš þ©#ODÆVOfNË÷ciê¿ÿŒûƒ—þs¡¶AwbヹõþNÜz'vo9ÍœiÛØ°ê˜Ûï[TTц´:ß<¬Ôøê8 !„B!„B4T#BF¬ fná/0î÷øýò,¹l)ÝÄ–ÒM¬(þƒ£?&]Ûšëƒndzþ÷^(±wóMT7峨/‰VEsÈx1§¤ÈZTåöž¤m®I⣘ψQÅ:,×)t„ë*e½7įkÖ’<Ì'¶`>±Óþåè¯ÿªØt´í¯§lÃt¯äaÉ9†2:Å€¬NîcË»´eds”¡±äž@nûŠ@+ŹY•U ~âï æ¥Ð‡`-Îö8meê”s#Z­”®û«ñÂmÂth Å¿îz{ë¹ñ8•ÕL¤Ѐ*¡âµ7”·+k~Õ [*Çòí}aùòålß¾Ö­[Ó¯_?ûlmÞT>³[nn.gϺô¯JLŒ­véÒ…ýû/ü™fŸaË_Ž9BZZš=`¤|6Ôüü|’““iÒ¤ G%!ÁÖ°ê2 ¤øÜ½LÎq€¨([;uÊýA¹Ëƒªzýüuåu õûXUÅÓ6¹|ùr|ðA^{í5bbbx衇x衇ذa_ý5 ,pšeÍÛ:vìÈ£> À”)SX¸pa•ÛÖç>˜‘‘a]y†5_—¹  €ÈÈH‡Y›Ë%''óßÿþ—¸8Ç·‚O\=Ã6þ|ƇF£aРA|öÙghµZ¸?ÈÃ…xÒýÅ×çªê××íªªóóÅÊ“ýõ×±ª*ßòÀÇãÇ«¸àô!OÎ9žðåg™¿ú`}Ó¯‘j¢ºÏPOø«/øƒ¯Ï9¾ª#OøãúÙ“ïGõù|uìXÅók±±±lݺÕã÷¬Ïד¾Ø_!„BøÎE=ƒrå€dƒÞõÈI9¹yÕI™jjåÒµÜ4p$¯¿ð.Û6íl3޾úÎsLùùS’[¹˜MôÜw/k= D*§ÖTºÓWé;¢B¡àµwž':6ŠÒÒ2&¾ý97^5‚+;e`}óNŸª:€jy¬< PغÅlÁXf¼à?ÖKw9ý¤|Vãš¶«úÔþjÓ6üU¿å[û~U|ݮұ(§QV|$WžM\¼Ò­#ÑúJÍf>Ú¼“›ç-£ßÏ ¸fö"îY¼ŠÓEÕÏ4¼òD·Ì[Æma[¦í¡š6‘á¼Ò­#ßô¿ŒäЪg õ$mm”ï»Véþ%Jåjw÷IûÖ5l:ÞjbÊs[¬VŒËÿ¹:.u]GÞb*³\Ô³'ƒ-¸¨°â_i‰É¾Îb±:¬+*,Ãdt|íä‘<ž=—ß~ÜIq¡Ña]«v1<ùï+yòÍ+Q©Ýë/•Ÿw»~¼¯¯ÇY!„B!„¢¡t-ƒ‡òWâf§¡ç"_ˆx™¿7ó`Ø#5~ïÕÅ+ÙZº€n=.°µ÷Ô4ßxu‚=Àø°ñœ¾‡LsÍ‚ñÜM«@Á›Q¥ÔZÊ{Ùrb =Ž^BŸc=¸ãÔ-d˜ÝÒS¦ƒ«1ŸØ€ªYw¯½¯%ëÊPÛÀáê”+±gS¶öKÛß-ú€Z‡ÂÕXâ0+­ýwL«Ìeþ§Òz%­Ãq9´ki>(®ÿuJ¿í·ißLBÉü—+Žkãv臼Iàˆÿ¡Œöö̺ ôCÞ´'›J)]ú…““ÿAw &ö¦ðÛÛ±æg¸Li5•Ú^(ý;°eÉbÈ~¬e Œ€ˆÿ€ÒõÄÖ˜Î=Ó­Š…¡îÊXq_©~ÜçøòK[?ºë®»|òþåý¨6÷`ËÓšÍfÊÊÊ.øO«õÿÔå³a•Œ 8¬¬,ûlÕýúõ# €¨¨(Š‹‹ë4 ©ª:(_n4]®¯Ž»õ[y»ú|¬ªâ6¹xñbzõêÅ“O>Ɇ úCO- IDATÛÌc'NdÞ¼y>Ý+ €wÞy•Jž}ûxë­·ªÝ¾>÷A“©âž^åvåë2—ÀœŸT¡PðñÇGII ãÇçòË/'55•öíÛ3dÈNž¬zÜÜ\–-[ÀСCíËû÷ïOHHf³™Ù³g»UÖ ñ¤ÿú‹¯ÏÕÕoùz_´«úpl+«\e-ž¿qçýë2­'ªÊ·¤ÄöÌ•Z]·s=yzÎñ”¯>ËüÕ뛆xTUÕ¯'üÝꚯÏ9¾¨#o¨ëëgo|?ªç+ÆûñõùzÒû+„Bß¹¨gPÎ/(´¿ !/¿Ði•ÊvsÍböþÈÄž2Mü6g ¿ÍYB\ãX_?€[¦IMøÏ—or×uröL¦}û¬³¶ ¤à BÃBÈÍÉóWÑDÇTŒt™]i†×–©-hÖ"€·^þ€Eó–Ù×&öîÚOaá…GŸv÷XUV98ª&ßÉΞɤej¿/\Î+ϼ}á \ùþÆÅÇV¹Ml£Š‘²2«ŸRtû–]sºš™s½ÉݶáÍúu狘'ùz«ï»ÛÎg9ñ¦¨Á8þÞnWƒ¨Jid•”Ú_· ¡Yˆm·×ocñ‘ŠÑÈŒ {sò(¬tã®*F‹…‡³àðqâõ j–ÀÍ-›Ó4$ˆzwe䢜-.õzZwe•–ÁÄ\,R£Å‚ÅjE©P¨qïçlI)É@\`Õ£Æ*ÖU®£Ê*ÏV\£¾p.ߥÇNòꟛk\ÞóÕey";³bj} †¸„Nsÿœåp~­ÃßS-çT+•Õgþ÷Ísø»}×xž™`›eãÀ®L^z`ž«dr²Š™2ñ/¦}¶¶]ѵO3ºôND`kãz$põMi̶Ý]©óy×ÇÚ_oq·~úqB!„B!„¨o´ ßÎd•aΠ-®ª"âÐOù*y/z"ѪhŽ™ŽòÀé»kœ\›´­´©$ilƒéŽÏÇo…¿c­Fv—í¢ÐR~ˆµœ@¡¯fZZ7YÎÚfQ„4FÕ¨ ÊÆ7ý€q÷Bt½Er%¦#ë@¡À’uÐa¤EKáY”´Â¸{%¿¾à^¾¤­Ì|t=¥‹ßDÝû(#“Ð~ƒâyJL»ªžµ²"±ãŽ_1îøeHc4m‡¡é<eds 7FáoÁZà{§ªØV(#míªdákwþf_g5±žÞµ¬ÐåO¯ÖÜ×ÚAÓî+] 9ÏCø[ N„ˆ÷ ó>°ž÷l±±|ò%ô„âEuS¾òv¥8pïŠòÜláÖB÷fv×ܹsyê©§èÖ­‹/®Qšòßâkòàú™3¶öJxx8ÙÙ5¿w{úôiÒÓÓ™7o=öXÓùÓÞ½{[@I‡HHHàÛo¿å×_åÙgŸeàÀ¬^½…BÁþýû±Xª~ÞÈãì‰òã\>KŸ·Ó6n\ÑÖËÛx÷XÕoµI£ÑÈÌ™3™9s& ÜtÓMŒ=šääd¦NÊÕW_í0CðùjÛ6ž|òIš5k†ÑhäñÇ·¹T¥>÷ÁªÚ•¿ÊœžžNrr2Ï=÷¿üò‹}ÑhdÇŽœ¥~Ú´iôïߟV­ZѪU+vïÞÍõ×_À¢E‹8}úôËáNÛð¤ÿú‹¿Îõ¹/øBYY‹¥RIppýÔþBêê3ôرc´oßÞ§ƒK¸âsާ<ý,s‡7û`C¯ד•ß³¾«VVú‚§Ü©#s*óWÛ¨Ëëgo|?ª× ±±Ï[gfºŽ‰p—·¯'7nÜHaaaµ32×TMö·¡œë„Bˆ‚‹z°§*~Ôk•ÜÌå6b£8“™åÓ²ôêÛƒÛFÜ@\㪃ñªsêD_|ô-÷ “ÉDpHWs•yˆ€íëª!}=.³7õèݰ(´ÏAûòˆÈŠ›Ú{wðJ^59V•Uþ±>0(ð‚ï¿u£í8_Ò­#:]é­&Ê÷·EËfÄ5Žq¹Íe}ºPR\ÂÞ]Õ×ãÇï~ÁükVüåÝ‚Ö@MÚ†7ë·´´ ½¾ê€Goäë­¾ïn_8_é¹àÇÀ  Oîívå OÏÏÞÒã\@¶Ùjå@n¾}yx@Ń`û¼4ðÄ©Âb¾Ü¾—~_Éb%X«a`ÓŸ¦½<>–[SšW °3Ë6ˆErXH­‚”3Ï7 r+ÝÖsþI¡ÁÄ\—±ç¹¶Zb2³/×u]”T è¬Ity¾c¢Ð©¼ó”™'õëk»·8þˆxó=j5 Bi‰Ùþ:2ºî¦D(.,sø;*Ö½væ.E¥€`£Ñ̆UÇøôõ•<~ëL²ÎT àÒ±»oê· Ï1¨=¦QÝܸ¬ëúõ÷qB!„B!„¨ozíÆ¥GÚWù/×bû÷õ¬W¸ôH{>ÍùÈ­÷OT7 ×’ëõ²{’ïó/‘¤I"Ç’Í£§äl ƒ“k›6BU1Àóî²]5Ϋ.(ÃmL[‹½WGæLÛ½ehcÔi×`ÜùÖü Ì'¶ jÜuSÛ=åò`f{Úã¶>ÕM»€Ú½zOҞϒ{œ¢é÷ØfBV(Ñ_ýê÷îÍYòNPºêSЦދ E@šÖC<*We C„ýµùô·Òšÿ €2,ur¯•©¶Jþ€¼ÿØ^kÚ@ðCÎÛ”mó¹É´ï¢Îž€)oWª¨d‡@äÊÔ-zÿ?{÷Eµ>pü;ÛKzBh¤**"àE@°!¨ v±bE¼b»ôÂÏ^kE‘"H‘.=ôNÞ·þþ†,Ù„”M6Àûy73çÌœ9gÎì°3ï98­Un‹*—ÇngêÔ© >¼Ry Š•õñ¹ð³Ž 6ÅÏ£\¥²mܸ€=z`0TýÙŸ7üPÒ¨Q# ÀìÙ³9qâ›6m¢cÇŽôèÑ€½{+nÛªÔsMüSÏmÛ¶uy‰»*y[¶lYîKé½{¿W‘ŸŸÏÎ;K–{²®êJmœ“GeÒ¤I 2›Í†¿¿?7ß|s…yªsntèÐ#FðÑG¹´Eyês¼öÚk²ç•·ÊRò¹2uëΊ+8rä·Þz+‘‘‘\uÕU|ûí·•ÚFUΚô_oñÖu£>÷…ÚòO@ü?›ºú]µjÑÑÑ\ýõµº¯ÒœÏB!„(vI(çäæ‘r¬øiTû6ñè´Z—õÁ´ˆm À®½µü6lÔ-¼>é%zê¾øáCüü*L¯Ñ”ÐtèÀa²Ï®ºng÷޽%A|÷=rmjXòªÓ¸ ÆŠhNߋ̮Zö7…¥fL/5›r|BÕGb®n]•vêä¹Ñ|:wïpÁ}.˜³›ÍF@ ?cŸ°dîKÕ¹K°Ûí¨ÕjF?tg™õM›5¦ï€^gÓ.ÅV‰™\ëBuÏ O¶ï™ÓÅ#6…E„ZaÚšì×S}¿ª}¡¼ü!aÁ…T<ëA}9¯ªz}öRö«7Âl¤OãâQÆV?M¡ý\p^F©kfË@ÿªï¯‚Oeç’c)¸ôw_“¼¥ÝÑ"†‰Ý:ð`Û–|Ö«;~:m¹i—)þÞV+ #âË>$Q)J…­ÿ8_Ý0ƒ¦òýhQÊqìN'jEatBl™õMý|èU’Öæp?¢æéüs?x\â6Mi>†Íá$@¯ãñö­PW1Z×SmTW6¬8Bf©Y”»öjÂKö¥ÛuMhíOP¨‰ÈF~Ä·çÆ¡ ¨5îoUÓNå•|ŽjÀMwµ!2ÚÐHš'„rûý‰4mì6oM¤¥æSXpîzÔû¦8Úu"$ÜLlB(CÇt 0Ä31Ôÿ÷ó-ÜûL7»7$0Ä„V«Æ`ÔjÂf; _[3g¥_*(»×€XÚu‰"4‡–møÃÇ[Z]¶o}¨g!„B!„BˆËÉÕÆk‰Óµ`caÝ f{¡ý&èZÓÇÔ€WÓ^æˆíH¥·]ݼéös3$èZWzµMÓüê’tíG7zl»ŽôdpØPùE¢ï‡#óhq /`Ý5]ç‘ÅiÏìwÉkÝù{q0¯1C¯gAUùßÿk’×ga6ù?=ˆýèfP©1þk"ê¨öî«Ê^éH;ˆ³°x0TOÎTíÌ?70»:¢U•òZwÍ/™é×pëh[D1£è}QG¶AíS *ÿOmÈû¾8PÀ<ô]ÎKà(N m ~O€Ûé¡=̶k8ì R£ë>¦ÌzUp ÚVÿ:›v>8jÿúŒ3ÈÏϧiÓ¦•JÿÏlFááᄆVü,{ëÖ­%/!?ñÄtêÔ©Òåúå—_°ÙlñÊ+¯\ïW8p›ÍFTT$%%…Í›7Å%Š¢0fLq»ïÙ³§ÂmU¥žkbÖ¬Y%ÏßÿýïW©žKçu7CXlllI`úìÙ³]žÝ{²®êJMÏÉŠÞEÙ·o™™ÅÏ«+~g¢ªç†Z­fâĉ¨T*:Ä'Ÿ|R©òÖ×>˜˜˜ÈСC²ç•·Ê|æÌ¹fÚ¶m[­m8¦OŸÀ!C¸ÿþûQ«Õ8p€5kÖTjU97jÒ½Å[×úÚjSRRñ€*ýúõ«õ`ÌÚPWß¡³gÏ. æ~ï½÷¸å–[ ÅÏÏÄÄD^~ùe´ZÏß{âšS]žú.« OöÁ“'OId¤ûÁ‚j#oUÔ‡ûÉÒ³—þ3XF}ä;à)Ui#o]sÜ•êæÜðÆýsMþ}TîÜ 6,¹¯[¼x±K`nMÔ‡ûÉšïÅr­B!.žÚ¯ž0èõ%’ ¥‚l´Z-†³³K:ì,V«K¾¥+Ö1bè ü|¹{è ,^IzF&a!Ü<àzÔ*…¬ÙTke¿î†«K>ûúѱK;–ü±¢Üôï}2›ÍÊâËÙ½}/éi™h4"„1ðÖ .¾ ß¹Íuä,§ÓÉ;ÿžÌä¯ßÆ`40ù«·Y²p9«ÿZljc§°Ûí˜Ì&bš7& ÈŸÏ'Oóø±Þ}ßP‚‚X¹ôorsr‰‹oÎÈ1w`2±Ùl|õñw.é÷ï9ÀÉ㧉hÆcãÆ 7èÙ´.‰¬Ìl´Z-AþŒå@Tݺ*-åÐ2Ò3 àÁ±£‹Þ{EQhM£¦Q|üþW%éSOá›Ï¦sÏCwrã¾$^Ñ–Y?Îå𡣤ŸIG§×Ù œv[óþëa/hx1:u"•éßüÂðÑ·rÃÀÞMFæÌ\@nN.­ÛÅs÷ýCÑh4dgå0õ“ï½]ÜÕ=7<Ù¾Û¶?¤U©^zý)¦~ú‡ƒ¨F‘DF…óÅ”ÿyd¿žêûUí çKÚ¸(9ûõ÷_bê§ßSTd¡Qã("£"øì¿SKÒÖ—óªª×gO¸+¾A=«ŽŸ"×j#6ÐñÍ1i4ØN¾Þ¹Ï%ýþ¬Næa2òhûxô5›N§‘UdA§V Óa¬àGw¯º«ÃÉ’#'ØžEFQ•B¸ÉÈÀ˜è’šw§gz4oi×5:÷ƒ®¿^Gǰ–=á6mrv.‹RŽs}tnlÚ­–¹ÉGɵX‰ñ÷å¦fј*øÑj~ò1zFElÐ3©ggþ·ë'òòѩՄ™ ¨Ê >•_ÀŒ½‡Ö"†~£0jÔü~ð¹V ÁÜßJ!Ûbeê®ýn·’“GF‘…@½ŽÚ´@­R8™ƒ¢@?ù˜ùdÛ¹–S ™¶k?£béß´!íCƒ˜}0…”œ\Ò -èT*"ÌFÚ…1ióìN×ÀhOµQ]±Zì|úöjž}«WɬµñíÉoï~¤Â¤uÇ9r0£Ìò›OҡǹÙlo»/‘ÛîKtIsæd‡ö¤ŸµFœ'W¦Ðãúü Œûëì»¶œ"ãL¾»ìUÒ°‰?ÁFz ˆ¥×€²Aó¥mÛp¼ÂõÕåtÂÆ•G¹ªïÙã 40î×ãÝé¡ãuÙf¶o}¨g!„B!„BˆK‰‚Âw‘?²ª`%IE›Hµ§bsÚQ‡ÒÕÐÛ|‹QÒíéü’;Óí6|T>(g û¨ÎÍŠbPñUÏ„asÚ(pž{1­¦û½ÛoÛŠ’H*ÚR²Ÿó9pçÈsYVݼ{-{8a;A¤&’'ŸÅ X_´ŽL{&:EK€:ƒbt»­šQ0ßý=¶C«°Û‚#7µ8pØ‚ºIWtíoŠ]­I¿xn·v+ö3P‡µ@Qk±lú¡d•mÏB¸ö©’Ùí§v¹du朦hí—è»AÛfêF±&ÍÄ‘žŒ3/ 4:T~ P7L¤pñÛÅ£È[.[³žÀtûg¨Bã0züïGâÈt N7Ý2§ÝŠmÏ"ì'wàÌKµ¦8H»ísÇ{r{ukµ ûé½8²O ò‹,(Ö°Y³ Ô:c hËyþn+¢à÷0ù/ŠÎŒ¡ïx•«&²^Ý  ÿñz ”êþäý†^ KóPÐÆ/³œ ëìù29²ObÙð-ºÎ#Ð&܈¢3aÝú+΢Ô‘mÑu½Tœ…Ù­ùÂóp#''‡Ÿþ™»îº«Réׯ/¬AQ>úè#&OžLQQM›6¥aƼûî»%iN'/½ôßÿ=&“‰ï¿ÿžyóæ±dÉŽ9‚ÝnÇÇLJ¸¸8‚‚‚xÿý÷KòžØ¦M:wîLff&\}õÕŒ1NGzz:ÿýï]Ò{«Ì»víâØ±cDEEñòË/c4Y³f éééèõz‚‚‚0/|o6}út}ôQüýý¹ûî»øúë¯+]Žªœ5é¿Þâ­ëF}è umæÌ™ôíÛ—°°0¦M›ÆÇLJJ z½ž Ôû íºú-,,dìØ±|ùå—˜ÍfÞ~ûml÷B}òL¹iU*­Ú¶À`ÐÓ¹{ÇrÓ­úëo–.\^fù®í{xæ¡ñŒóB‚é}Ã5ô¾áš2éòróJ‚&#juÕ'Ó.È/,sc­Õj|û ¾ýF—åv»7_žÄ½‡\–;N&¾ð.ÿù¿Wññ5óÔKWzÿ5­«Òeø|ò4ž}å1üýxfü£.ë³2³Ëe~óéèt:†¾•¨F‘<üÔ½n·=ý›_8røàÙz®kŸOžFhx}ú_Ë5½{pMï.ës²s÷èRO{&¬¦uUÓs£:íëÎÁ}ɬ\¶–+¯éJâmI¼âÜoYÙ.Ê5ÝouúþùªÓJ;šrœEó–qý¿®¡uûxÞýø5—¼¥”¡îÏ+wªr}ö­JÅMÍ¢¹©Y´Ër»ÓÉ[¶ràììÞÿp8¼¾.‰·¯ì„VË“U˜![¥(Ä`P«é\Ál¾«OœféÑ“Ë{¾Ô‚BbKÍN}ú£·½¿if#m‚¹¦a×4Œ¨0ýùå™{è(ý›6¤UPoö(ÿp¾/¶ï%Ôhàúè\ÁÕQ®ûͱXy~ÕFΖ» ‡ÓÉÛ÷òLÇÖøëu<ÝÁuÖ‹l‹Õ%@`Ú®ýèÔ*†µˆ!ÊÇÄCm[ºÝöŒ½‡8’{îå5O¶Q]JZ{ŒwŸ_ʘç»ãPþ $›º P^òû>®Ü‚ð(÷/úD5®úŒã•ñÓ—I´ë…ŸÞý~›ø“ôwùß •Õ ’åßtйÓwÖxå™ùÕÚuiPn[yêxK«Ëö­/õ,„B!„Bq©h¢mJ¬6ŽXm0ÚmšÓöÓ<:–GŽÛõó¢þÄè&0÷µà7J>¯,XΩçžcÔt¿íõh£oÇ’†+Ë;<Òíiô=ÖË#y8x%í>‚¯Ê—qA/–›×“TAMP…Æ¢ -À>gîi f=³È}U—ãäNÔa-ÀéÀ¶ã÷sû+ÌÆ¶)š}ÀéÄqjw™¼–5_ ¨uè:@ÐýÕegu°løGFŠÇò–ÇY”Kþ/c1ßýŠ1ã wÈûnØŠŠ(*T­Q´4Mº•»ÛåØöüY©}V®` çÇ8ø½/†ÞÏU)»ýè&ò¿»ý•£iÚ ÔŃÇ;‹r±í_†6þ†³³P;+Þ9r ûCx Ôaàs7ä|Z:¤…À·Aßt‹ÿ«mE«>Bñ CšØ^hb]¯ ÎÂl ~‹3÷tíæ¬o¿ý¶ÒÊÉÉÉüöÛo 8:¸Ïedd” tHJJbôèÑLš4‰ððp À€Êl7''Ç%@`Ê”)èõzÆŒCtt4Ï?ÿ¼Û2}ùå—:tÈíºº¶mÛ6p8üò˹Á233Y¸p!ýû÷Çét²cÇŽ ·SÕz®‰I“&Äí·ßNûöíùàƒ*÷½÷Þ#""‚Aƒѯ_?úõëç²>++‹ûî»S§N•É멺ªKÕ='Õj5íÚµÃh4Ò³gÏr·¿xñbæÍ›WaªznŒ5ªäóG}Tîv_xáf̘á²ÌÛ}ÐÝ9Å3&Þ{ï½%³z»Ì‡ƒ§žzŠ/¿ü???þýïWk;™™™üüóÏ >€ôôt—¾q!U=7jÒ½Å[× o÷…º¶dÉ~üñGn»í6ùì³Ï¼]¤*©Ëïпÿþ›ÁƒóôÓOÓ³gOtºâ{àœœ-ZÄ AƒP«Õ8ž»öÔ5§ª<ù]VUžêƒ{öìáÏ?ÿ¤wïÞtíÚ•®]»–¬ËÈȨ0ȸ&y«ÊÛ÷“‡ƒ÷ߟ×_ÀÀ@^ýu—õõ"hÏ[}Á“ªÚFÞ¸æ”V—ç†7ïŸkòï#oß3hµZî¼óNî¼óN—åv»gŸ}–Ý»ËþnVÞ¾Ÿ¬Éñ^,×:!„ârpÑ(×Äâåk9|ä8];µ#:*ƒÑ@^^û¥°tåߤgdÕêþ?zïKÂÂCiÐ0‚Ù3ç±=iW¹iN'ãy…ž×õ u»x‚C òÇép’ž–Áþ½‡X²`9Î_†Ãáþ›×oåŽ÷ñ¯A½éqMšÇÅàà‹Õb%';—CRظv jµ»ÝÎ{¿F›ÄVU>®'î k·¸,[ðÛb´Z ‰W´Å?ЬŒl6oØÆ·_þÈþ=Ýn'iÓvîò· D‡Îm ÁÏß—ü¼²2³I?“AJòQÖ­ÞèñºúÇœŸ•™Í;Û"3ìßsˆå‹W£(ŠË?öœN'Ÿýw*Î_ÆàÛú“ع-aá!èô:r³ó8|è›Öo%+3»$'ë¹®Ùív^{þ–ÿ¹š·Þ@|ë8 ='OœfÕ²¿ùþë™dxpvΚÖUMÏê´oy^}ömF>0Œkû\Ehx–¢"î;ÌŠ¥k[Ïd0ráJnnÞ˜ÄÐ`BMütZò­6²-VÒ ‹8œ“˺ó¬N'Ï­ÜHϨp‚6Ðëpâ$½°ˆY9,9r‚ÅGNà8¯]k’÷|mÝM˜Ñ@¤ÙÄoSØ‘Vq»æÛl<¾ìo†4oLŸè(¢}Í( ÈÊáÃÇx¤]Z 6;û³²Yqì ®¯í8Ï·ïeñ‘ Љ¦CX¡F#:µŠ\‹•”œ<6¥¦‘eqÝ·'Û¨®m^s”Çnû…žýšÑ¾KÑÍñõ×£Õ©)*°‘v:ƒ{Ò8vØý=Za¾• ÍgðÈv´éIp˜µF!/ÛBÆ™|vo=ÍÚe‡k¥ì§|ºö IDATçðò˜yÜ2º #ñõ×STh#õx.;6Ÿdýòò_^KúûÃzº$â|k'“v*.×6¡e»pÂø`4i±Ydepx_:k—fÍ’dœ¸Ï©‰Ô¹¼|ÿ<†Œ*®kÿ@y¹ROä²mý ÖÕB=×´}/ÆzB!„B!„¸T³ãå´çéfèAK]+"4èБãÌá€e?+ þbvÞ¯ä:rëÕ~ÔÕ¯&y7mâö“7s»Ï0:® LŽ¿ÚŸGö1 罄ºI7Ôáñ(~(j΢g`;°ëöÙ8‹<ÛFP<3²–ÁØ­Æ‘}Âe%ég4-úàÈ<‚Ó’ç&·“¢•ÿ‡u÷èÚß‚ºQ'ß0µ¾¸ìéÉØl(ž)Ø£yËçÌ=Má¯a¼é}T!ÍÑ÷x€¢¿ÎÎêâtRðëX4±½P7hƒÊ‚b §G^:ŽÔ½Øö,ºûp:ª´ß ±ÝLþ7·£MŠºQ'T¾a(œ–<œ…Y8óÒp¤'cK^ã6¿#í ³Ÿµ•9§ÓŽ37m«þŇ÷O v)X¦Á ëP#-ÍýÀ➬«ºRÝsÒáppï½÷Ò·o_:tè@hh(ÁÁÁ8Μ9î]»˜;w.sæÌÁá¸ðµ½*熻ْkûxkê­·Þ¢GÄÅÅÑh¤¨¨ˆäädþüóO¾þúk²³Ý¿ÿâ­2¯_¿ž~ýú1bĺuëFDDäææ’™™Ijj*pÛJûòË/¹ãŽ;P©TL›6¢¢ª}oVåܨIÿõo]7.Æï£šzá…X·n·ß~;-Z´ÀÇÇ‹ÅBFF‡fÇŽ¬X±ÂÛÅ,W]}‡ìÛ·1cÆ Óé Ãn·—b <(žùÔ“Î_óöSTh«òv=¥>µ¯7êª:ýwlb+7kìvÝëë’X˜rÜ“EB!„B!„—Y æâ£òáÿ2?”e`nÔ"tŠŽ÷3Þ‘e/Ñ_ó$ŠÞGÎioE!„¸¤¬^½NÇĉk%@¹mÛ¶|øá‡˜L&ž{î9–.]êñ}!êéûB!„B!DÝSy»B\ÌF?t'Q" äá'ïñvqê=•J!ªQ$*•âí¢áU*E¡ •rqõ…B›l‹Õå?ç¦UUkTÜ?®;1-ƒyã‹éwK<Ùa_’||u´ïEp˜¹ÚÛ33ê‰.ø6rß³Ýð 0Ti#ŸèÂsïö¦Ë5 5¡Ö¨0™uD6ò#±[CFŽíŒ_`Õ¶y©òF]U·ÿ¸»Vx´dB!„B!„B!„BQ¾±cÇMHHÏ=÷œ·‹#ê•JEtt4*•¼>{©‘¾/„B!„BÔ½‹reƒAÏ=ÇР"ŒïfþÎÎ=Ï\צUCßPaš~žÇöÝ2 ·¨»Ý^òÙVê³(«s÷޼þÁK zút½™‚üoI¯èÂkÝ;`P«é7k!¶‹çÚñÑÖÝÌ>˜R¥èUœ8qà@MÅš•â7nà™3cݦ)pÖî`‹UaݽU`4Ös°߆³0•OÚ„þhZöEåßýUR8¼·‹*.sª|Pu7äLvŸÎÿY0ÝRüÙºr¿-N¯¨@›æ¡`K¹ô‚“;vìˆÃáþÙLéÙ…âr´k×.èíb!ê˜ô}!„B!„¢î]ʉmâéÕ³ Aþì=p˜¸f+ÿŸ€æÜ¼| ‹j¥ŒB!„¨Ø‘C™Lù÷ Ôj»ÝéíâÔKŠJA£)Úßétb³V>àײ2 ™ýmõ‚UÍ>º’Ïi§òãÇog•Y_Óóªªbš7æ›_>.³|áÚŸË,Ûø÷ÆÞ÷B™å£N§®‰„„ãïï‡V§%3=“m[vñÓ·³Øž´«LžÒ7mÄ Ÿ¤S×DƒüÉÎÌaÓú$¾ûj&û÷¼à1T§ÿV×M‘DŒ¿/a&F†B›c¹ù¬8~’Ÿ÷&ÏZþH×£ZÅÒ1<˜Pƒ?½­JEf‘…íiü´/™ieÏ«5jnnÞ„ ÂhäcƤÕoµ‘m±rr¢Ì6ÿÒ­JÅ”¤]ü´/Ùí~¯Š gPL4-ý1¨ÕœÌ/`õ‰ÓLßsŒ¢²oF4õóejŸ+Ë,_pSŸ2Ë6žNãÉåëÜî7>ÈŸ[š7¡}hþz¹+ÛÒ2˜±7™íinó€gÚÈ“*ܨѪèÞ»){4¢i\0¾zE!;£Ó'rغî8Kæì#7»xð‘¯Co({kÓ¶s¾_~w™åS?XÇÂ_v», ô¡]—(ZwŒ ª±?!&  jŠÂi§óHÙŸÁŒÏ7sú¸ç_2k{Eƽsûwžaüó.˜G§WsÝÀ8:]Mæ˜|´ØÈÉ,$õD;7ŸäŸwQXPþõ£÷ 8 K 8ÜLAž•»Î0ÿÇ]lßX¶”WÏŸ¼¹Šå󔻟òò^Õ¯WõkVfùøç³Gj…y«Ò¾%yªQÏ5•ؽ!½Ä›ŠÙGGNvw¥±tî>6®wpƒùF¢µQPH¶bAÞ\”*o¯rÊo#û±$4±½P4úâég5àQÛv†ë_À‘‘BÞWC*L«nÜÓ-áÌM%÷ÓÊ®H@Ûá4: qå`?¶ˆo±ßZñ¶k×ÅèièW¨‚ãH;Hþ÷à,r}v hMh; EÓ¬'ªÀh§%gaŽÌcجDzî›*ïûBôÝïGÝÅ7Åà¢ÖáÌÏÀ~< ˦.p¼ Ú–}Ð$ @ÞÅà‡ÓV„3?Gz2Ž“Û±îœ#³ìoÛžð"èÚÈ|ìeYà{öѽíd½å\VpÖÒøŸšØkѶ½uD+GöIl—cYÿ?œùéµ³ÓjºýöÛi×®ñññ„……áïïZ­æäÉ“¬\¹’Ï>ûŒ#GÊoW“ÉÄÈ‘#¹îºëhÚ´)>>>äææ’™™IJJ kÖ¬áÓO?uÉ£×ëÙ¹s'?þ8¿ÿþ{™íîÚµ NÇĉùúë¯Ë¬ åꫯ¦S§N´lÙ’¨¨(|}}Q…üü|Ž=ÊÌ™3ùæ÷}©]»vŒ9’Î;LVV7nä‹/¾`Ó¦MU©Â*1 0€>}úЪU+‚ƒƒ±Z­ddd°k×.–.]ÊôéÓKÒ{»®ªÓ¾¥õéÓ‡aÆѦMŒF#ÇŽcñâÅ|þù礥¥•›¯¦í[U¯½öÆ #??ŸrèС2iÞÿ} DJJ ýû÷'??ßÍ–ª¯ªçFiÕ­çšä­Ii4FŒÁ AƒhÚ´)Š¢pðàAfÏž¢xþ>gÔ¨Q¼ôÒKe–ïÛ·~ýúUj5í 5ás£&íëÍësUë*..Žùóç—Ùζmed_½z5wÝuW…û¯Žê´QM¿»kÂ[í[>XÓ¾ÿøãóØc]0Ý€J¾«Ïç­û !„B!„¢>¸(”×mÚʱ§Ø»?‡Ó‰álÀqe™MF xeoxøé{‰‹oÀ÷ÜÆÊ¥kÙ±µü ÿ?þoê;4Žiä²Ü×Ï_?F7@­V•HÚªM &üg‘Q.˵Z F“‘ˆaäçx4@ùá§îÁìã:ä°ÙÇD\|sââ›3dèÆ=:Ý;ö¹ÍÿÅâv¯†Ø–1Ü®óøHî¼ç6—eAÁ\Ý»=¯ëΤ7>æ×çÜX­6Ö¯ÙLÏëºÓ¥G'EÁé,û¾S·Dtúâ W,]SþÁW‘Z­æ…‰OÒ§ÿµ.Ë£›4$zdCúîøG'” ¬®©šžWÞÒõª+ˆoç²,4<„^}¯âšë¯ä?¯~ÈÜ_–›¿ßÀë\þ ¤÷ ×pmŸ«xã¥÷Y8wi…û¯jÿ­‰‡Ú¶Ä¬u½,›µâýˆ ôcp³Æ<·j#{2Ü¿ÜÒ52”–þ.ËB®mÉÕQ¼³q;ó’–Éç§Ó2åš®4öóqYî«Óâ«ÓåcB¥(nXk’÷üc ô`xËV?ÅN7úÿP+ O$&0à¼óYƒš“‘“‘Îá!äYmåW‡ZQxþж\ÝÀey´¯™hߦü«ICž_µ±Â`á꺿u †·ŒqYhÐÓ3*‚«¢"ø`ófH)“ÏSmT×âZ‡òÈøž„D”Î>$ÂLH„™øö,›»ßcû¼öÆXî{¶[¹ë F Qý‰jìÏôOëÇàP/~ЇÈF~.ËÍ>:Ì>:"úÑæŠHÿ¶*PnÚ"¸ä³6@Mb·†$vkÈWï­åÏÙ{k­ü—AÃC/ö óÕ]–éУ!z4dåƒ|üÆ*œ þB!„B!„õÇÃ3Òo´Ë² u0ך®ãS/þ“þ&3sgTi›íô‰ì²ì,78 ¿y€ËßÁêúšn ·©Ò^fAÞ\·ùz¯¤•®µË²0u8×›úréz^O•ßrËòûQþ÷ÒÙЕME˜’ùae‹@u éöŠƒÎgV™™ú1môí\–·ÔÅÓR_¥myŠ:ª¸,öS»<œ àÌ-\Q1V<5€ÊTü{µ#çT™uú«A×y¤Ë2ÅtvÆçk)\ò¬[Ü?ë¬I^wãàQ5Æ™sŠ‚_+œlôÇtû¨‚›º.7ø¡üP4BQ©j%@YÝ´êˆ×ýú†¡iq=š¸ë(\8ëö²ƒƒ+Z#†o£iÚ½ÌrÅ߈ʿ4펳0˦ï=^îø>Æ‹?g¿EkݧÓ4íÙ®’7 œÖZ+RY*5†~ÐÆ»Ò«‚£ º mëAü:¶ZÁïµåùçŸÇ××·Ìòèèh† Æ€1bIIes`ÆŒ4oÞÜe¹¿¿?þþþ4nܵZ]+A{³fÍ"""Âí:???Zµj…Édr»þ™gžá\'@ ¡oß¾ôéÓ‡ &ðí·ßz¼ÌíÛ·çƒ> Q#×çÙZ­“ÉDTTyyyåVWuëª&í«V«yçw4hËò˜˜bbb¸õÖ[¹ï¾ûÊ ÎªIûVÇĉéÔ©qqqLž<™!C†`±œ„¼oß¾ 4‡ÃÁÓO?íñàäêž5©goµ‘S§N%11ÑeyBB eÒ×Þ¼ÖyãÜ€šõAo]Ÿ½u­®š´QM¾»kÊíëÍ>X6›û÷n¼u¿!„B!„BÔE€rNn>»÷•±²²ÌæâBl6;›Íî©¢UJXD¨Ëßá‘¡8ŽscaµXù|ò4Ö¬\OfzZ–ðˆPZ´jN~^Û¼Íâš2é³70™8ìÎ]ÊÊek9~ôŠ¢" ПÖíZÖZ€å²E+ùñÛYädçb6›èÖó †Ž¸™ @þó¯2êÖGHKu3JðÙQ1wlÝÍs–pp2Ù™9X­V|ý|hÚ¼±Û2}kIpò¦u[ù|ò7;r‚F£xð‰Ñ´nÏãÏa{ÒNöí>|·zù:z^× @š·ˆaßî²³=ö¸º GãðÁs# Îüþ7fýtn¦Å1ä¶;oªtÝÿøˆ’àä?ç/cÎÏ ÈÉÎ¥u»VŒ~h8þ¼=y#oy˜ÔSg*½Ý ©ÉyU]‡¤pÝÅuÓ³W7^y{7öJÁy3š;ìî_pøúãï°Ùl?z’Üœ<4Z ñ q<ðÄ(7mÄ“/<ÄÊ¥kÉÊÌv›ßjµñÛOóX¾d5ØR^m IDAT9ٹĶlÆ=ÝIXD(Ï¿öö%s`où×—ªö_OXvô$3÷%“cµbÒhèÊíqM 2èyûÊNܳh%i…Eeò}½c6§“ãyùäYmh…–Aþ<ЦѾ><‘˜ÀÊã§È¶¸>™ßœÆ~>X¾Ø¾—µ'SÉ,² U©3hèO~937×$oia&×ÂMÆ ”G'Ä–'ïLÏdÆÞC¤ää¡ÂLF&tm^­¾à~«ê¾Öq%ÁÉ‹gÎÁ£äX­´`T«Xô:ÞìёыV’ZêOÎÎáú_ÿàªáŒïÒ€¿ýI¡Ýõ;ÉáfÀ„a-bJ‚“7§¦ñùö½Ïͧ¡¯™Ú´ up µoÅö´LöŸ×<ÕFu©yB(/~Ø­¶â6LÞ—Nvæ¹z.Ì?wnëôš¾Zp8œX-e¿ûm6×ëŽVW¹s&7»ˆÔ“¹•J[ÛF?ÕµLpòùÒSóKf™®ª;¹‚M«’žzîÁ{ézV¾ò}­tÞÒ3üÚílֲߎR³õÖ´}½eÌsÝË'ŸïÊ>19˜Áœïw”,»ëJ!„B!„BÔ#üF•'o(\ÏGY“9f;B´¦1Œ¥­¾=Oc«e {+˜ÑÀGåC¬6ŽÛ}‡q­é: …|˜ù^…y¬N+¿äÎdYÁb²Ù´ÐÆ3&àAÂÕ¼ôoXö±ÏZvpÅϲ>Áæ´qÌv”\GEC+]k KmSƾÀ_ùËÈr”}Ñ\˽~cÈtdðâ™qPŸ/H€ÅY„NÑcqVî7Ùƒ^) Nþ-wsóæëÌ¡…6ž¡¾ÃˆÓµ¨tjBÑû  E—8Ml/œÖBŠþúÀcÛwäž>»_PkÁ^~©b*®KçÙ<ÿÐuQ`l?²¢•áÈ<Š*0}ÏÇP7h‹áÚ§±OÂqz¯Çòº-£ÁãÍ“QG$àÈ>AÁcpdŸ,“N×õÞâàd»…¢•c;´ g~h´¨|#P‡·Äi©AÖ-«?‡ GÖ1œE¹ Ò Žh…¾çc¨‚š`¸n¶á,pYý %ÁÉÖÝ`ÛþŽÜT% !ÆM•çŸÁ•f>£Š?çM‡¼ËO«ëpîsaÅãR{œþʇK‚“­»ÿÀºõWœEÙ¨´Cßý~c ÆÁ7m(ΜÓØZÝZ°`?üðiii˜Íf:uêÄ£>Н¯/ï¾û.}úô)3Èû£>JóæÍ±X,¼÷Þ{,[¶Œôôtt:‘‘‘´iÓ†ÜÜÚ}~¶yóffÍšÅÞ½{ÉÈÈÀjµâççG\\[¶l)“~̘1%ÁBk×®åÝwß%%%…¦M›2nÜ8:tèÀøñãÙ´iS¹³!VGË–-™6mf³»ÝÎìÙ³Y¼x1)))(ŠBpp0‰‰‰lÞ¼Ùcû<_Uëª&íûÌ3Ï”ÝÍ™3‡éÓ§“M‡xüñÇ âóÏ?§ÿþœ>ž—^z‰ñãÇÌ믿À_|ÁÆ=¶_¨Ù¹Q“zöV½ñÆ%ÁÉ?ýô¿þú+999´jÕŠ‘#GïùÁX¦M›Æ÷ߟ@ã™gžaÔ¨Q•Îï­k·ÎÒjÒëòú\ݺڷo­ZµŠg2þàƒâ{ÝŽ;RPàú¾œÝîÙwK=ÑFÕùîö”ºlßêöÁšöý)S¦ðÉ'Ÿ”Y~å•Wòé§Ÿ¢(JIxòx…B!„BˆKÅE \SþggìÛ«}{õ °°ˆ§RÙ¾{?›’vb±Öî0ºKÿXA\Ëfdef³ñïŠG¬kÓ¾øÇ°…s—òÃ7?»¬K=u†íIåϬûôË`2),,âé^&iÓö2iÖ­öìè¥íÙ¹Ÿm›Ïý²cënÖ¯Ù̇_¼I`P#Ç ã½‰SÊÍ¿fù:—ÙŽÿ±k{ÙwBÂýàp–/^ÍËO½ÃQü¢@Fz&OŒy‘æ|NHX0·ß5„‰/¾ë²§Ó‰¢(\ym×2Êjµš«®-žEsÅR×ᘖ¢s£§–XëNDƒ0†Þ5€y³ñæøI%ëöí>ȦõI|ýÓÿáçïËè‡óö„ÊÌ~!59¯ªËét–ÔUé,«KVdÍŠõe–­\¶–ÇŽðí¬OÑéutéѱܙ§}>©Ÿœûrß_³™o~þ_?F?8œŸ˜Xîþ«Ú=aofÛJÍÀ»3=“ §Ò˜tugõ:F´jÎû›v”É·ödj™e«ŽŸ&%;i}¯B§VÑ%"”E)Ç]Ò´ )ÕQÊq¦Ÿ¬ZPÈŽ´ò…k’·´¥GOPd™m±²)µüÂL†Æë®9qšWoÂ^êGöýY9ØNª3Y)á&#·Çp??ù(omØvnŸ™Ùl>Η×÷ÀO§ed«æ¼³ñÜõ× XÎ^+J—Õêp”,/OˆÑÀ¨V±¬8vŠñk7—1gYxjÅz¾ë{5!F=·Ç6áõõ®£°{ªêŠJ¥ððKWº'ïÛ‘Ê¢_÷¼/Â+F£–FÍËZ>xÓ¹™ &ý0˜ð¨âQd·o8Á[OÿYå²lßx‚C»ÓÈÉ.ÂRdÇ`ÔÖÀ›µn:)V§¦}ר’¿wm9ÅçÿYÙS¹h4*£üh•ŽÙWÁm-ý}‹~ÝƒÓ 7Ý݆.×Ôêôjº\Ó˜ù?ûŽ(]Ï›ñæW7VºÌ¥ó~³xxI;¯ZtˆOÞXU鼞hߺкS$Ýz5)ù{ʦº™ôÔ<šÄqÏÓ]‰jR¸cGÍs)::š»ï¾€eË–qÇwTœeggsÝu×±bÅ ¢££™>}:÷ß¿×Ú9kÖ,üýý)--å†nà·ßj>ó°víZ¯íφô4~|ããã™>Ý5¡É—_~ÉC=T±n÷îÝlذE‹Â]wÝÅÌ™3½ÖfO8p€Y³f1kÖ,®¾újÖ¯_ÏÒ¥Kù׿þEhh(û÷ïgöìÙgßP5öØð¤Ÿ}5F]»våâ‹/àÝwßå¹ç*?SvïÞÍ7ß|î]»Ðë½û=ÇápT .mh ©¯®u¾86ÎäÉ9Øœ×çÆö•ªªX,®I„ªfÁµZ­Ë›‚·Æ¨1ŸÝÞÒœãÛØsÐÓsÿÌúåïåùçŸG£Ñ°k×.}´æÿ{}ù}C!„B!„hI_7 9deçrôøI²²s±Û˜LF:´Kà’1#¹ó櫉ŒkÒýüþçƒÑ€Ífç•Í­N.WVZÆWŸ~À sûW[—“ÇöÓÁƒåÈUõÔ›àPW߯XºÆ+í¸ðâQ(Z»ÝÎoÖüáîÈácüøýJF_4Òk}?®ZªcGN~Ê5Ót\›ØZËÙÝd†ÍLÏâÛÏ\ž 9“©öཆž¿Me{VKRŽpaÛxtЦÞu“^âÊ2w:£|Uy§ƒÅ“ÃB24ìæ'u«údïa_¿·þØËÍ+%¿Žöò÷ïTU^Þº«ZÀoSº°]ŠFƒÝ©òáîƒ5Ö),âÇ#'Ý6®AcT— ÚÆaÐ*ØœNfoÛU#Ãr™ÝÁׇRxFÆoðÞ5—¾C*‚)6®>“·ÿÀ/Ës<%¬SÅKÉcÝŠ~[{´IÛò¿×ãÓ··²èÓ],ûz/ß}²“÷^\ÏG¯njÒýÖ—V§ T9ÎÊJmdž,ÄnsRVjçÈÁ–~±‡/?8ûŒâwg‘z ‡#sxçùu8ªÎ'v o’öÿ\0©2»IVz1sžü™´£ù”•ÚÙ»#ƒ¹ÏV> l¤c²ôµB!„B!„ð½qþcб©6^È}¶F&áRµ”Ï ]“Ã1«u;**vµú}šD}G®ú;~Šm°«5'˜Îp¤óU‘+•êp¿˜4¦z½€£ö#œ²»‚Ht 5Ö_x= =Y_¶®Fðr}±¥²Ãò;Gl©XU J ýMx ô>ý’úÄu.ô ¸².¿WðNõ¨4õ=œÕÇH OÄ8ðz4†š÷”½—Ò|Tk1à ðu½PÐ÷œ„6¾7º¤ó+÷ï€3÷XÅ2}òXÐÁa£låóÆÛ·•bÝö@Eö_oÔ=“Ö¿«>@‰è„ãÔ.Jü½ÖàdµÄ5I¬6¶spÛn.ÎÜ£mÖ„T?ôÉ®c»˺šÇdsð¿P@µAá\8Û) œîV7IÑ›”.yhpÚ±®¯ÙWΜl»]×]×± ´üÜß~ûmÅ3=zô¨±>''€>}úÒ¬mkŒ‰'b4±Ùl<ñÄ5‚ŽJJJ˜7o#FŒðÚ~“““+2ÆÎ™3Çmà\KÔØñ4iZ­»ÝÎk¯Õœ€ÿàÁƒ|ýõ×L˜0Á«ÏÀxêÓO?eéR×$ ÿþ÷¿¹ë®»=z4v»ûµ~“î×—'dž'ýì«1?Þ5ɵÅbaΜ95Ö;Ž&Ëöê _\ë|uløŠ'×çÖxmÊ1:Ûg·/xúùÛR¾o(ŠÂ«¯¾Jhh(………Ü~û픕•Õ(ç«ïB!„B!DKãû_šÁÿ>ÿ¾âµ¢ÑE¿^Ý8§_OÂB‚¹þʉ¼úöÿ°¹ dô–5+êÎtWÕ/dàÐþtèØŽùß¿ËÂÏ—°dárŽŸ‘õôL}ô¬x½táòF·µ)ü¼j=.‡ÙÏL§.Ø»ë€ÇÛìÓßõÃÚî{ÉÎÌq[&õ+x-$4˜ÐàŠ ]€åK~¢Ï€ž$uM$6>†“'*oŸáy¤:Âþ=5«GWùᩤŸ¬™íà×5?y &“‘¤®‰n³G7Fc+_óðçÒ+/f𹈉"$,„Ò’RŽM#(Øhm4¼ÝÛ\ˆµZ-º$Ö™Aº!çoSú9-KÛ`ÖiéľÜêÓ€ûëu\Ú±ƒb"‰ö3b4Pjwp¢¨¤"0Õ¨­9£ù—R9':‚A|2vß>ÊÒÔ/*>k›<©{¦5'j€£ªòŒÀ{sóÉ,­ùãoSéîÚïáüBÒKjf:X2“ñÚ`ÒjéÄÞ\ϧjï}úýîÎÉ#»Ìý¬­©E„ „ AÉàÝ1jÝûÆTûûó÷·¡:[ÞIoyùãIĶu?iD§nÌ_{mµesžZËú•©”•Ø8r0—v\ÇHß! ¼ôñ$V/:À†ÕGÈH+lT›J‹mdœ(ªhWH¸÷BóOúÙÝúUÏÅÆMM®¶^sÆDñíCØ»#Ããý !„B!„BቾÆ~ì´î¨5“ðaÛaB•PB•Pr¹5Ê9‹r¬?AJ0íõç1“ü'sßâu Ü”~=VµaÁ?¿[\³´hI2táËöjë”. ¸‚¡æs‰Õƪ £D-á¸í(Á§#g6+!Ü|;Nœ¼šûRƒÚSîÞÌ»*^+(t5$sIÀ$&L!^—Àk‘s™zrejå}®†n° Äé›ßìUK…³£1¡„µGßí"ô='¡ër!æJ>½Þ ÐRóO ‰ìŒ‹#mÚ¸^hL®ßmuí‡bÁ•©R䚘XÍ« PÖ&¸ŽIÇÉ?P‹Ý“Îl×1©1‡¢1‡¢–æz\·*mt2†ÿ‡Æ‚ãÈ&JÞj+©ó=Û¶~Š®ý`”ðDü§ƒmû—Øv-™۴°hŒèû\Ž®ýP4A±(~¡¨¶œ¹Ç*‚¥5ºê“8k£]Ǥ#ój‰ûûïMͺ @£‡ð·!ç6°©GÅ:n%é:@ØéLÌ9÷‚=Åóv–gÇvd¬5HÝ~øgô='¡Ñ›ÐFuÆqj·ç;>CÿþýkLäÕ3CÖWII ÄÄÄVs’ÿ>úˆóÎ;¤¤$V®\ÉüùóùꫯHMMmLÓ›ÜÀضmîï½<èz$,,Œ°°°Š (O 4¨âõW_}åñöšKcÇ·_?×5vß¾}¤¥¹ödÕªU\qŘÍfºuëÖ$‘kæÌ™ôêÕ‹øøøŠ ˜¯¿þ:»wŸý|>|¸Û@ÂpìØ±Ë=96<ég_Qy°äÞ½{).n™Ï&¸ã‹k¯Ž _ñäúܯ±M9FgûìöO?[Ê÷Ûn»­â½<øàƒn¯ëà»ïB!„B!DKó—P®Ê©ªOKçxZ:‡R1mÊÅ„1 OÖÿvö ƒÍaÓº-ö«jdtö%<¿)o  Œª¶\£3¢5‡V]R}ýéÀeµà¤×ÛT_…oƒò„<Ú(²¦ƒã„ûòªk_”:ìiô M¨|í åÇ•ZXûÌÎ*ýX^ÞÛ kdêóDééû F£±Æºµk×rë­·òÌ3ÏÅm·ÝÆm·ÝÆÖ­[ùðÃùñǽÚOEE¹ŽÿrèÐÙ¯í!!!^ ŠŽv}åçç“•å~R„–¨±ãéúÎP[ÐÝ™ëÊÇ¥¥(((àé§Ÿæí·ß ¸¸˜÷ß¿^u_ýuk,Ÿ5k~øaåžžô³¯Æ("ÂuÝ;uª~Õ·¾¸ÖùêØðO®Ï­ñÛÔcT×g·/xúùÛ¾oôíÛ—»îrM@5oÞ<–-[VkY_}ßB!„B!Zš¿\€rU»ö$íT&q1‘têЦÅ(ü²zÙÌ߯Ž`âåÑ£OrÅ¿#‡ñäCÏspßáê•Nß?T[P Y9¾Ê¾†Ç’º¥Ñ(8Îzýð¤7T¿ÛXXPĆŸã¼QC}ÑÈŠåóÎL@ ?‡ƒe‹W{§±åm>ýæë;FUËU}­(ëÄFW>¢Ñhx楙DFG`±XyçµX³òWr²r1 Ä%ÄòÜëÙ¨íW5ºµdgÕ+JÅkM•I<5¸/‘f‡ƒwwîgí‰trÊ,´ qþ~ükh¢üLn¶êòKZ:Oe2ªM,ÛÐ#<´âß‘‚"žÞø;óÝŠzR·1Êß»¡JÔWÕS¯¡í¥ëy¸xëR\~º;UG=6ê®_š{Œ¼Ånu¶šó³±JJ¬”Wkµ F“ëë™Ó©RVj«VÞn«þ ÒÉ£<2}®îÁˆ‹:aö¯ü¬ëÒ+Š.½F±uÝqf?ö{ýrªús.xÂWdž¯xr}ö¤¯|¥©Ç¨¥õ…7>›û¬Êd2ñÒK/¡Õj9xð Ï?ÿ|å}õ}C!„B!„hiþÒÊÙ9¹ÄÅDàïöÂÍÌf³óÃ÷+ùáû•ÄÄE3~ò…\qÍ¥´KlÃëï?ǵ—ÞJVfeØœ,×¹À ‚C‚ÈÏ+ðUÓkˆ<Ý ×KÙ³2³IêšÈªeky꡵ï¾\Êy£†Ð1©=‰Ií9| •±Fðóê dgž}Æ:çé(.M="¯ËÛ_ó†o¹èØÊ™s²+ï²Ú¬6œNEÑàÐøãµ¡Ç•·T 2¬O¬[R׎´ïØ€çŸx•åK~ªXg³Ù9°÷ÅÅ¿Ã㾟[²ˆ*Ù‘sÊ,¯“B‚hÀ [v²âhåÌš6§“yÛÏþÀ…ÍéäÇ#'øñÈ büÍ\Ü>©IhÀ«#qýòŸÉ*µx½nCåX,@`×µ±98UE£Á_ß°À¬2 €s­ebü*×U£ªªf+®×uãô~W?ÉÓÏž©¢6Í9FžÈÍ®ÌBmöדĩã ÿ<«v¦ãkgTŸmB‰Þ¼¤Úß½ÅóЋ®, ‡÷fóø?–¸«VM^N)óæüƧom¥çÀXlÏÀm+pû M`ÜåÉ,útWCÞJ½8Õy;FC5t|½ÑÏаñ--¶b·9Ñé]üº<…ÿ<ós½öãM¾:„B!„B!Dë•éÈ 3]X^²ŒÇ²öúöÓéôBµ¡g-{¦ªÆÙŽÊ¬i] ]IÔ'0+çI~(®üÍÏ¦ÚØgÝK±³ÜÄ]4M›mì¨ý] ] ׆W[^Þϱڸ&Ýc¨E®LÕsiiÈ™åÊ(¦ ŠCÛ%(ÛïŸcÛ· ãð»Ðu…ýè&Ðhpæ¤T›IÓYœ…Blû–S¶øÑ†í׃ºU9ŽmÁ²â9Ì—ÎF OÄ<þ_”.Q°ï­=£Z.Ð] IDATee¶Ý‹±í^Œ‡¾çDôý§¡„wÀoê[ÿ÷ Ô¢ÌF·­*mt”p×¹P¶ìl{~¨X§:l¨ûP­Ån.VóÓ ¦;Jdg¯´Å– 7BŸ][{²oõŒ87Û§_(`¥Ë›§}åÇ•&¸öóW9-@-nYëÃf³ñÍ7ßðÍ7ßÀå—_ÎôéÓéÔ©Ÿ|ò ãÆ#=½23¼ÕjÅét¢(ŠÛl³M%##ƒnݺ±dÉf̘ÑlûÍÌtËÁÁÁ„††’›[ÿg|ÕWU5t|Ëû9>>¾ÖmÆÅUž'åýÓRÜyç 2„’’-ZÄÔ©S¹ùæ›Y³f ›6mª³nŸ>}´/OŽ OúÙWcTŸý6‡ò{¥ ”»¡ç‚'|uløŠ'×gOúª*§³ÊDGM{z-W~\M>!Dk#O4ÅçocÎÁÆœûýúõãºë®`îܹõ _}ßB!„B!Zš¿t€r»„8ÚĹn9–v–Ò7í†ËxvöcÜvßßyïÓ× ª³¼NW{ÀZÊ¡#œL ­¾½»öWZÞtÇ5ôêÛÝÖ7œÎM°]L\4cÆ»nÌþúÓFÊjÉ*ÚP?|¿»ÝNHh03¹m#÷œN•ï¾tÍ=nÂh¦]?E«p$å[7Õ/Siú)WðQDT8auÏô¾lñ*Z­–é·ý_õ:¶cÌ%£N—]ýŒ¬·»ÿp=h1rô0Læ†ý¨ÕØãÊ[Êû `àÐ~g-ŸS%ÓvrwïÎÒݽWW&L À‹VÕèçªzþzƒNSóÒãoæÂv®3×¥ePæ¨ 8Ë­rNu nøþêÈšRPD¡Õìf"OêVuU—Df éÇ­½ºòΨ¡ôµ–]uÌõ”V£áºäš7f¦Î€Öòç 1˜tõ¿n,?š†CUÑj4LïžTc}‡ .l_QÖ~F¦Õr%•7:ΉŽ8ë~ÝÐ60Z×[cÔ\6ÿ|Œ¼*Y”jÏc¯aÈßÚ×6˜°H?bÛ‘Ü'šñWvG«sÿU&;½¸âu|û&]ӓضADÆЩ{$WÜÜ—]ÂÝÖõDvf e¥•הѓ:Ó{p<Ñþ$uäÊ[úá Q­Ná?_]Æ ¡ïÐB#üÐ뵘Ì:B#ý°Û+ƒá›*³q~N)%U‚vG]’DïAñDÆеWWyñýVÕZÆ÷§Å+^›ýôÌzç"&_ß‹NÝ#‰ˆñ'±k8ƒÎoÇõ÷ "±«÷Û ¾ë+!„B!„BÑz-.þ»j'T åÐGкK;ÜH#ÌçÓÙЀ-e¿5¨nOc/&¸D_Z¼»Zù[]Ž#»âuwC/´Ô;zûÐÝØ¨ H.·´d1hÑòpØ£^ígOè:¨È ë8¾ÅkÛu椂ӎ‹>y,μã®@_À¶g)h4^ï*›u°Z]ÛîE®`^s(¦Q‚Rÿ¾ò¤®;jY%_ÜŠãø6P´˜/š…6¾–,šJí÷gÙ‡QË\“Ýz3SµZ’SñZÓ­Aum{–Vdú5{ } hüÃÑÑÆöÄxþ} Ô~¯)Ïw*ø_ ÆAgpºÊè»BÐ=à6=´—Ù÷,§-†¡·ÔX¯„'¢ïvÑé²KÁYûýèÖ¢®ç 8@^žëlhhÍg&¶ow={1vìXüüšg2Õ¯¿þ»ÝNXXO<ñD£ž'iŒ;vT4ÝsÏ= 0 Aõ}ÑWÐøñýöÛo+žq—92))©"ˆpáÂ…u>›ÑœBBB˜={6Š¢ðÙgŸñý÷ßãt:yðÁ)..&>>žÇÜ«ûôäØð¤Ÿ}5FU÷ûôÓO7Û9x¦´4×ó€ÑÑÑDFFžµ¼'׺ÆòÕ±á+ž\Ÿ=½Æ–+?.Î;ï¼Fm£¾ZãyÂÓÏ_oƒ =÷µZ-³fÍBQRRRxë­·êÕ^_}ßB!„B!Zš³§nl!LFcÅ$S• *½^étöP§Ã‰Õf«VïÊK/¢¸¤„ÃGŽ“›W€Ãá ÀߤŽí2 †2‹…M[ÿh²¶ÿm܈Š×Á¡AôÔ›U?þ\kù—ßš…ÝncåkÙ»s?9Ùyèt:b⢘pù8ÂÂ]?°ìþ£ú,»ªªòâÓs˜óáó˜Ì&æ|ð<«–­eÝšMœ<‘ŽÃáÀÏßÄNí æÝ9ó¼þ^¯½éJÂÂCøeõFŠ ‹èœÜ‰ëo¹ ?3v»ÞüÄkûÊLÏâ¿ï,àï·ýã'¡ï9½øöóÅI9NNV£Ø¸hz÷ïÁ+ÏÎÅQ% ³ªï¿úëÿ1À ¦L›À/¬w;¶oÙ ¸fg|ö•ÇøèíùX,VÚ´‹'6>†w^ÿ¨¢lúÉLü÷k®ž~9ã&ŒÆìgæû/ ¨°ˆ½“¹öæ+ÑétäòÑ[ókìkÉÂåŒ=ŒðÈ0^}÷_üïÝÏH;~ ƒQOtlжö9{\yËÑ”cäæä­3¦£Õj9´?FCûĶ´éÏ›¯|PQþà¾CœJË &.Š»º£ÉÈÖMÛÉÏ+@¯×\¯ í.Ý“èÝ¿…ù…2øÜ\võDô=y¹ù|覟«jèùë ×$w$Ìdä×´tŠlv’Bƒ¸.¹~:v§Ê‡»T+0¿S%¥Äø™¹³O2F–­Ùä[¬´ !æ:~}é¼s°9UV;ÉÞœ|r-tІh?3ÛVdhÞ›“çÕºUý­MåÌâÁFý£"X}ü¤Û²©E,?šÆmãß¡ z=‹SSdµ‘ȤŽmñ«ã륩'C¸ÉÈìáùßžCœ,.Á ÕågB©%8½¤”Ïö§0­K"cÛÅcÖiYtøE6;ÝÃC¸6¹:ECÕÆG{ºÝÀÑÂbr-VBþѳ ZEá¼B4h@›Þú£2ëCfióödz÷$.î@ŸÈ0>ÊÑÂ"rʬ…3½#˜½mµz`´·Æ¨¹Ø¬Þ~~>7ª";prŸh’û¸ŸUyû¦4Žέ±|÷¶SôV™5xêM}™zSßje²N“²/û̪Q*[~9ʰ  1ñÐ Õ³'ìù=ܬwÕ$¡}0!áfF]’ĨKjÍWõÇæ¦™ˆEUaË/Ç9oÌé÷jâ¡«¿ßÝ^z¿Õ¶ÙJÆ÷—å‡>®#Ýû¹&Ä 2rÙô>\6½æÃj'Ró8¼×»íßõ•B!„B!„h½2é¼_ð·߯ĀKéoÀWEŸ“jK!Û‘Ac VO?c?žÏù*ïÁiÐðIìçüZú Û-[ÉtdbWíDh#lÂÔÀ+ÈqäðuÑ—µ¶!ÙоÆþ8ó R‚j>—+§aÐÈuæònþ›ÕÊï·îã¤ý$±ºXî }“ÆÄo–Mä9ò0hô„hÃ0iÌMÒ_ÿŠx\G›-¿qÒž†Mµ¦ gˆi(W^…‚B‘³ˆ¯Š¾¨Vï”ý$ÿ+øˆëƒþÎpóHÞ‹ù/ >á¨ý(Z¢u1h5Mñ€»ÿkçcOùljßqeº‡ý#жŒ¡ÏTÀèjÛþµ÷vë°áÈ:„6ª ­ëÖO+VÙ÷-ƒóï«ÈþëHßS­ªZ˜eÃû‡Þ‚¾çD´múcÛþ%ΜTÔâlÐP‚âÐ&ô¥låó®ÀQ/Ô­•ÝBé·÷àwÅ;(‘1O|™’ù×ãÌ;V­˜ßeo :lØ÷-Çqjjqhu® í^“+ßï©íÕûqœD ŠuëL8Žý†ZšZs(èk¹Çj·Pºh&æÉ¯£1øcãÝà¼ÆÊ ŸƒÁCæe VÎuKñç`†¾à%è“\Ëì)€ †Þo“³àÖÍcxúîãÑü°íøÕRˆ6¶†ÁE‡ZV€eý{ÞoÀi8ÎZ×—””x-Ðé¿ÿý/V«•Å‹³cDz²²ÐëõÄÅÅ1mÚ4""\3—ØVõå—_2fÌ¢¢¢˜7oo¾ù&GÅh4×$Á<§Nâ7Þ`ÆŒL:•ÁƒóÉ'ŸpèÐ!2331$$$pÎ9çðÄOÔú|˜ììlÂÃÃy衇ÐjµìÛçzN'))‰ÄÄDž{î9¯¼ßÖ8Fžðôó×[ç`CÏý«®ºŠ.]\i½øâ‹˜L&·‘KKK±Uy>ÙWß7„B!„Bˆ–¦Õ(?t÷ß1èkÎÆ;u☊×û¦0ï³ï*þV4ºtjÁ gð€Þn·[RZƧ_-¦¨Ø»3Ue¦gѹkÇŠ¿3NeÕZVQºõê‚ÉddàÐþµ–ûuÍFV/[[cùžûxà¶ÇyüßÎèq#=ndrÅEÅÊf?3Ú:[kSZRVãG½^Ç¥WŒçÒ+ÆW[îp8ø÷?gshJƒ÷S—ÿ¾ý)ƒ«§_N|›Xn¿ïF·åü÷kŽ9áv]~^K¿]Τ+. /7Ÿ¥ß­¨wŽMcù’Ÿ¸à¢‘ôè“ÌKoVÞ¼ÈÏ+¨  ðîœyDFGpáÅç3rô0FŽVm}aAÝù$™5…Ö­ÙÄ¢¯düä1tïÕ•çæqÁ¡A<ðøÕÖççT Pv:UfÍ|‰þóþÜ÷Øí nà¶r²syèŽ'ÉÎÌqS«RCÎ_oÑ+ “:¶eRǶՖ;T•ç6ïàÐél×圪ʳ›¶óü¹Ðë¹·ÙÓ†ä°LZ-ëÈæ»îd«ŸòZÝ3e––‘T%;uFii¥á•­»ˆñ7Ó3<”‘ 1ŒLˆ©³ü™íYœrœ‹;$Ð-,„«ýœ8Ó{;÷i6qAÛ8FÄÇ0"¾ú~ ­6ùu Y¥eµn骼·s?ôïA°ÑÀýýªgr(°Úª(ÌÛsƒVaZ—Dâü¸­WW·Ûþl ÇŠ*³¥zsŒšÓö 'xé‘ÕÜòÈP‚Bꞈ ]§P·Ê«à‚K»XkÝøv Ï8^_¼¿Þƒâ 2ºßoû`¶otÿ™ÔqõlÿÞíé,^°ÛãýÕæË~§÷ ¸ZÇÊ[ï·ªÖ2¾ªSeö£?qË#C9gx[·å+ëy/CFU¾ì+!„B!„BÑz½ŸÿF‘kƒn A׆»Cîs[îã‚yµ©ø»½¾IúÎ$é;ÓÝÖÉpdpæ …n׌òÍ(¿Ñ5–ç8²™‘y'YŽê÷kœ8y"{&¯F¾A ÈCaÖã]zNAa˜ù<ü4~L ¼Êm™|ggÝ_-Ës¹·òþCˆʤ€Éô0ôdV„w!ꢄµG‰LÂYûÄ—jQ¥ßÞj©}ŒÃyj7Ú¨. :±ïZT¹¿²ìW£ër!¨*Îô½5êZ׿‡FkÀ0ð:”Œ#jf °nþgîQ¯Õ­j)¢äëø_û s(æ‰/RüÉu`·¸ h”˜hô&tí‡Ôºû¡µØ÷ÕÿÞôÙæ¤léã˜/}1Óè‡TÝq|+%Ÿ\‹ñÜÛÑuZ×äñª¥ûÁŸÐ';…Z­{C^ä,„‚× äÐFAÀµPøvÕ3BŸã`0ôwýkj–_ç¢ ŒBŸ<]Ò(tI£ª­WË (ýfjQF“µaË–º³œß}÷Ý,Z´¨Î2õ¡ÕjéÝ»7f³™áÇ×ZnåÊ•,Y²¤ÆòU«VñùçŸ3uêTúöíË;ï¼ãq›êã7ÞÀh4rË-·Ð¶m[yä·åÞÿ}RR¼÷,ËöíÛ™>}:³gÏ&::šK.¹„K.¹¤F¹ÂÂÂÁs¾è+OÇ÷å—_&&&†‰'2vìXÆŽ[m}~~>7Ýtééé^o{cŒ9’ñãÇãt:yà(=ãÙ„ùóç3eÊzõêÅSO=Å…^èµ€2OŽ OúÙWc4{öl¸âŠ+èÓ§¯¾úªW·_©©©|÷ÝwL˜0~ýúñá‡V¬ËÍÍ­¤èé¹à _¾âÉõÙ“¾*çt:yå•WxöÙg åÙgŸ­¶>77×kÊÐ:ÇÈ_ožƒ 9÷n¸á†Š×sçέu»3gÎä³Ï>«¶ÌWß7„B!„Bˆ–¤Õ(7†ªª|¾ð:wlOB\ a¡Aôz,+™Ù¹ì?”ʦ­P\Rw œ§æ¾ü>QÑ‘Ä%İðË%ìܾ§Ö²ªªòÐO0üoÃèÑ;™ðˆPB‚Q*9Ù¹ܟªÖ²béO8îoúmûmW]rMͰ‘ƒèÔ9‘ @lV…E¤:Ê– ¿£Õjq8¼üæ3ôìÛ­Áïëž›g²yÃïÕ–ýðÝJôz}ÏéEphù¹lÛü¿ÿ9÷nð>ÎFUUÞyý#V,ý‰K§^Lß½ˆŠŽÀ`4PTPÌ‘”clýmùyunç³ÿ}ÄË/BQ4|õé÷X-ÖµãßÏæø‘\pÑH¢ã¢±Z,¤<ÊÚUëÐh4¨U2š:žyäEÖ®XÇ„ËǑܣ3&“‘S'3øõ§ÌÿðKrëÈdúÂS¯³}ËNÆOCǤøùûa³ÙÈÏÍçı“ìßsˆMë·Öè§ÆWÞ<6À•­:?¯€ÉW]BR—Dü)--åà¾Ö®¬ÙWÛ·îäÚÉÿà²ié7°‘ÑRR\J~^9Y¹M=Φu5o¼Î}å îC‡ŽíˆŒŽÀl6a±X8~ô$¿¬^ÏçKQaqz5¶Ó€ó×[~¶#}ÅÓ¶S(ÁFô-–R;ÙÅޗ͉#ùnë—•Øxò¶¥\z}ozˆ%<Ê­NCq•ܬöîÈ`ÃOGÜÖõTFZ!ÿ¼e —MïM÷þ±±”ÙÉL+b×¶Sü¶¶ö‡›¶o<Á´áó굟õ+SÉN/fÐùíéÚ;š¨¸Ì~zì6'ù¹¥9ÆÕGX¿*µ–ï Þy²ˆÞ¼„É7¸ú:8ÔDq‘•Ì“EüñÛI65A?{:¾ éç35t|KŠ­Ì~ì'ºöŠâ¼qéÜ=’°HLfeev²N³oG:V6Í(_ž B!„B!„¢õRQùOÞëüX¼”)S`<‡(]4F‘Bg©¶T6—ýFž³úïù'ì'øgö# 1 £«¡1º (T 9d=È/¥kXXü EÎ"·û}=o6MƒHÔw"Z…Y1S¦Z8n;ÆšÒÕ|Zøq­ÍÛ,[¹âÔ®˜ÆÓ9Di£ ÖSì,&ß™G¶#›T[ ÊÖyµŸþ™õÃÌçÑÝЃx]fÅL±³ˆT[ ëÊ~åëÂ/ÈuÖœhÀƒgsžbyÉ\0•žÆ^„jÃp¨òù·c—e'ëË~õZ›'([òÚöCÐF'£ ŠA£5 Z qfÂ~ègl;¢ZÜ‘'é{Ðs)ö”u8 NV[gÝþº.âÌ;†juwOÅò˰íýCŸËж€&0 Öèj{N*Žc›]™‚½Z·vjQe?>ƒyÒ+(0û–5¯^©RúÍ tI£ÐÆõDñ@ã ªgqÎÌýØ÷-Ƕ÷GPkÏ€ÛŽãÛ(ùïèû^‰¶Í”À(4¦`Tk1jY>jq6ΜTì©ëÝÖwf¦tá} 5 øG ªÔ¢LôÝ\“~«åØÍ¤ôð» ý\Y’‹>µÊa¢–@ήLÊæ‹ÁÐ ”PP­àÈÛ>°n»7w:([òOìV£ï5mL74z΂SØ­ÅúÛ<Ô’º'Ën-œN'7Þx#cÆŒ¡_¿~DFFŽÓé$++‹={ö°xñb¾ÿþûZ3:Ïœ9“M›6qÅWÐ¥K°Z­äææräÈvíÚÅÏ?ÿìÕv«ªÊK/½Ä÷ßÏÕW_ÍàÁƒ‰Åh4RPPÀ¡C‡Ø°a¹¹î¯ÑžØ¸q#£GfÊ”)Œ5ŠäädBCC±Z­äççsàÀ~ýõ׊çvªjî¾òt|÷Þ{/?þø#W]u½zõÂl6sâÄ V®\É;ï¼CvvÍI:|A§Óñ裮IL¾øâ ¶mÛV£ŒÓéä¹çžcþüù´oßž«®ºŠ?þØkmhì±áI?ûjŒ3gÎdñâÅ\}õÕôíÛ—ððp¹¹¹=z”íÛ·³vmÍÞôÐC‘ššÊ„ ˆ§¬¬Œ°lÙ²jÏ)yãZç _¾âéõÙ“kl¹ ““õ×^Krr2”””°gÏždž§Zãy¢±ãëís°¾ç>à6[rS¿_!„B!„âÏDsú_5O>ù¤f×®]šÌÌLMaa¡&11Q“™™© mqq±ât:õ~~~z›ÍfLŠ¢ø«ª¨ªjèÚµknÞ¼¹b[ hÆ·ã{:uòulî_ò8õ‡u_ààÏÛ¯}ÄÇïîí& ñƱ!êoÉÄ ð×ëxgç>>Ùëý€þ¿’“Ç WÞØ¾‡/¤úº9­Þü±#ˆðã•­»Xx¸~™„¢ªoÇ"ÔdäÙMÛYv4Í×ÍB!„B!„øË[°`Ûåµ{»BˆúSÂÚã×”~{/öCMP&„B!„B!„B!<ã.Îwøðá5M®F£)t:Å@™^¯·–””ØE±ùûû;­V«#22Òyøða500PŒmß¼M IDATŒT»wï®>ùä“5fuûSgPõsÛu÷ûº ¢…’cC!„B!„B!„B!„¾Ï宪ÇɾmŒB!„B!„B!„h$@Y!„B!„B!„B!„â/Î|Éó8sâHÛŽ³(lehcÐw‡¾û%Ø÷¯@-ÉñqK…B!„B!„B!DK ÊB!„¨—[zvá†nª-»vÙÏXm>j‘¢%º©Gg.nŸPmY°Ñà£Ö!„B!„B!„¨E‹.ñ\Ðk-âHßKÙŠçš±QB!„B!„B!„¢%“åäçK|²ßóz]ä“ý !„h]üõ:üõÕ¿:h4¯mþÚk½¶­Ö`Úðy¾n‚MÂ_¯#ÔTûlB!„B!„B!Z E‡eý»èÚD’€Æ/Ö€ZV€#cöý+±í^ ™¸V!„B!„B!„B¸H€r Òš…ǽÜ×M¢Õ»hár_7áOcô×?úº *Ó~XÓ<û‘€]!þ^ݶ›W·íöu3„B!„B!„B4„Ý‚uÓGX7}äë–!„B!„B!„BˆVBñu„B!„B!„B!„B!„B!„B!„B!„­‡( !„B!„B!„B!„B!„B!„B!„B!êM”…B!„B!„B!„B!„B!„B!„B!„õ¦óu„¢µ  ¢cçöädç‘z訯›#„h" ¨ª¯[!Üñ 0 (Š ,¾nÊ_‚œ B!„B!„¢5VBèdèD¾#Ÿƒ¶¾nŽø“Ð÷˜€6º+öc[°ï_éëæ!þÂ4 ·Ýv:ŽÕ«W³cÇ_7IˆéòË/§{÷îlܸ‘¥K—úº9B!„B!„BüéI€²HîÑ™'ž³Ÿ‰çžxõk7ùºIJ-­Ÿ¿Yñ?ô=s^xG”…h¡æA|€ŸÛu¾_I¾ÅZgýÄ®áL¿w0oþëN¤æ7E}êÃeÓ0šÜ |ëß¿²vé¡fnÑÙ…FøqÓƒCh“Bx”?ï¾°žÕ‹þá艹lzœN•ooeí ¯½Æqþø$’ºGjÂb±“ŸSÆ©ãlߘƚ%±”Ù¼]o{ø¥ÑôWëúW]ÍæŸÕ¹Æœ 3úvãÒŽíÜ®{vÓv–M«×v„B!„B!„hˆoã ðŸ¼×$@Yxqä½hŒ8 3|Ý!¼¦W¯^¼öÚkøùùñðózõj_7éOã†nà±Ç«±üÀŒ;Ö£m÷éÓ‡{ï½€eË–y´­ªš²ÍMíÉ'Ÿäšk®q»î¾ûîãÛo¿m扖àÑG%00S§N5zrB!„B!„¢þ_7@ˆÖlúmÿG|›XÂÂC¹ýÞ¿ûº9ZÒÏBøž¢Ñà‡¢Ñøº) RfwP`µUû§ž%¬V§póCCIìοÞÏØË’ieoûO) Ð@ŸÁñ„Gù7záQþÜpÏ ‚BM„„›¹éÁ!…˜´ëïÄÃ/fÐÈv„Eú¡Õ)øùˆmDß! \?c A¡ ÛfKÕØs¡ÔÝy×ôÍB!„B!„B!D=̘1ƒ¶mÛÁÃ?ìëæ4 EQhÛ¶-ŠÒz“3f ÇŽcÏž=>n{ÍÝÏ%%%äææVûw¶{Á†ã¹¥û+^'…B!„B!„h¬V™AÙd2ò÷«'Å'_.b÷¾†g¾Ô¿ÆžÀ7‹W²ù÷Þn¦ø p8¯íU^ ï’~·FGðÌÐ~˜´ZÆ~»ŒR{ë9çîØËÂà Ët~ÎymiÛ1½A˵wCŸ!ñ¼ýïuäf•4E3{Y2IÝ#‰oLFZ!¯<úS“í«¬ÄVñZ£Ñ`0j›l_-Ih„Ra«Õ)„„›)È+«Wý!kÏ…—v©³L~N)™'‹j,oÎñu§¸ÐJFZaeuiì¹ðöûxû}Õ–};~¡&c#[/„B!„B!ZŠË¦òPØ£<›óß}íõ}hÑ2%ðrÆûO¤¾='ìÇù©dΣÄYìõ}ž)P dnÔ»t5$ó@æ=üTºê¬uúûrMÐõô4öÆOãGšý+K–óß‚(Së÷d³Ñ(è:Dßu Ú¸^hüBQ휹G±Z‹m맨–š¿s Ñtm òô¥$û&°þ^³LÀMx3 BÎ]`Ùà~[údð›Æs@‰µ §Àº Š¿Çñ&{ÍfÒ¤I¼üòËg-·gÏÆïvÝn¯xíhE÷ß“““™6mÆ #&&‡ÃAJJ k×®eÁ‚?î~€‡Îܹs1›ÍôìÙ“’’¦»ß÷É'ŸðÕW_Uü}Ï=÷píµ×zeÛ^x!àÝìÉà½67g?—{á…xá…ª-Û¸q#M¾o_ñE?ÿµÖë¤B!„B!„¾Ðê”ÃB‚™vÙxb£ÿcrï]¹dÌù^l•ø«zïÿÉddÎ ïøº9ZÒÏBø–Ÿ^‡Iû×`ذ:•Œ“…Lº¦'ýÏm‹F½Î‰ão:óånžŠñ’1Sº@^vi“íàÖI_T¼n×)Œàþ•?›£‡rÉ8YDTliGò9q$¿ÞõÏ¿8©Úßóçná—å‡A…°(Ú$†`öÓ»­Ûœãëή­'yõŸkTÇWç‚B!„B!„h™Æú_̃a3›t~?fGÍ¡Ÿq@µåIúÎ$wæ"ÿñÜœ> Gz“µ!^—À ¯ÐÙP÷d…UM ¸œÃf¢P™É°ƒ>‘ƒoa”ßÜ”~=ÎúÿÙÔÌ_B×qxµeƒmt2ÚèdôÝ/¡dÁßQ‹2}ÔB!*úBà®×ÅŸÕœ¬ »Áÿ*¨r¢1€úÎà7Ò/µî¹;ÿfÏžMLL f³™Y³fùº9g¥Ñh¸ÿþû¹ùæ›kdŒíÞ½;Ý»wgúôé 4ˆÂÂÂõýýý1›ÍÍÒV«ÕŠÕj­ö·7téÒ…víÚ°|ùr¯l³œ·ÚÜœýüW&ýÜj(IÉ Æn³‘ŸWÈÁý‡Y·æÿÙ;ïð¨Šõölß$›ÞC€!T¥) i‚+^ÄŽ^ ׆b/(*׊ˆ,¨ Ò‘*½×@H#½l’m¿?6ÙdÙl’M6€÷7Ÿçه͙™3ï™™=‡ç¼ó}ßí,ùåO]㨇Ñåª$bâZŒV§¡ÌPNÚÙólX³……ó—PRìZÈäOÏkº“Ô¥mâ[‚—·2”ÊIOËäÅ+Yøýïµ¶OHlËÍ·¡s÷ŽøùûRTXÄ=‡ùá›_9¸÷ˆC]¥RÁ²?¢ÕiY¾x¯¿0«Ösj4j–mü•ZÅg|Åwsà–Ûoà‘§ïsªŸrò wŽ} ¡CFß½sóõ´ë‡F£&#=‹Íë·±à«_ÈËÍwª¯R«X³c/=ýkþüË©ÎÚ‹Qª”Ì~ûs~ún‘SySו;Œ¹ùzž|áaΞIc¨ÉuÖíÞ³3³> Y9ŒtÐôq9n(’ÚÑ&¾5AÁøøú —$²2/°cëæÏ[HzZ†Ëö …‚'ŒbÈÈD·Œ™ŒÔ”³¬\¶d²zûwg~›:VÓ˜{NcÙº]‚ˆñõ!D§A«PPf2“V\ÊÆóürâ %F“Ëö÷´£[h Á zµ¥$‘_^ÁÁœ<~N>Í¡çßBZ…œc[Ñ'"„Þ^è” J& +Œœ/)ewVóòxÛ*¢¼½x±Gg"½u,:™Êç5hÌ:0&&š¤ üÔjÌV y夕p('•©ç9_\j¯¯’K¬ks8¿¼m/kΦ;sõ¸¡(%‰ÿî;ÂÏɧkí÷ÚÈPÆÄDÓÖß\NF©-éYüpìyåλ9Zë}øjÈ5NÇÿ¼aˆÓ±]Y9ü{ÃöZûMð妨VtÀW­¢¸ÂÈœ<~<~šƒ9yµ¶ÏÌ‘'i¨ S¡”è=¨5Ýú´ u| >~jd2…yed¥±ûyÖ.I¦¸°€y+' Ö8ÿw,éêæo¸ÓéøWïogå¯Gއ{Ó©G$‰Ýˆlé‹_F\!Qf0‘“UBê‰<~œ³‡¬óžŸtUÓÞÀ‰Ã˜~ÿõ¶Q©å O÷k£‰jí‡Î[I™ÁDQ~Ùé%Þ“ÁŠ_ŽPfp}ÿ4&žQ:ê…¡ÄÈÉ#XþÓîrþ¸g€OßØÌ†å']öãªíµÃÚpí°6Nǧ?°œ‡²ëlëÎüÚÛ4bœ›!N@ @ øÿ…„Ä+o$æÛ¯XXü#÷û=Ø ¶T‰Üê3‘®šîøKþY ÙW¾—aù^§ú=4=‘°éû¡h¾Sù_†ud›³ –3H7Ä¥@¹•2†_ájMO¤ ,ùì,ßÁ×…óH®¨ý]~”¢‘Š(ΚRù86Ûʶ²6jS½× à*M¾-üÊ.N®â‡¢ï¹Sþ’?Ãt×»(«ej†z §¿v mUíð—ü1b¤À\@²ñ XTüK½ö4×ïùÌiûPÄ @¦PÛÒÏZ›.„S&C3øY,y©”|9®Îºò–W£»éc¬ÅÙ6ܹ<¬Ê®·¡hÑ™Ökyæ´½TìüóùºàMi[2­/º[¿D h‰%ç¥ îÅZîø^¦Ô¡ìz+Š6}‘ü£‘©¼°V”`-+À’Ÿ†ùì*¶ívßõ¡î}òèÈ|‚‘i|‘ÉUXKó0ŸßGÅîõ\¯ e»!(:ŒBÚ™FÕT޵4Kîi,1^Ž%ÿ¬Çí®‰ßs êX ÿ90;¿þÀ§Ò¥l: ¯á N®‰µ™âŽ*â®C™t#ò°öÈj,…˜Nm bÇ·XKs›§ÓFpÏ=÷ðüóÏ;ONNfذau¶}å•W˜0a¥¥¥Œ=š””§:ï½÷cÆŒ!55•#FPZZZË™ÜgêÔ©¤¤¤ðì³Ïºd_Ü_||<Ë—/wªwà€sÛ-[¶pÇξ÷àà`úõëG÷îÝi×®‘‘‘øøø “É(--åܹs,\¸¯¿öüo¸&-Z´ !!€U«VÕYwêÔ©ôéÓ‡ÐÐPüýýQ©Tö¬ËóæÍcÏž=µÍã\“ï¿ÿž:ð裲aÃÙéIÆO§NHHH $$___är9lÚ´‰Ï?ÿœ³gë¾?2„ &бcG´Z-iii¬Y³†9sæ““ãTßÓãÜn»í6^}õURRR4hPuûôéÃ7ß|Cff&½{÷v*w÷z«hŽß ŸŸ?ÿü3111œ8q‚›o¾™ÂÂB i÷IhúÚÉdŒ9’o¼‘ÄÄDôz=åååäääpêÔ)öíÛÇ¢E‹8sæLƒ¯W @ @ ¸ü#ÊÛwï'-=“ã'Nc±ZÑhÔnŸ£Ÿ«ˆmMJj+×nn+]óГÿ">!€Ûï½…MëþæÐþÚÅ'¾~z>úêZÆ´p8î£÷ÆGïMTtr¹äRHÚ¾c[^z{á‘aÇ•JZ–°ˆJK (?ôĽxy;†öòÖŸK|B,ãnÅ´G^âè¡äZÛ±à‚Cƒj-óöQ×.ÍÊÚ³]O™z7·ß{‹Ã±€@ú êCß½™õú'üöãR{™ÑhbÇÖ=ôØ›}º#“ɰZðÝ{uA¥¶eJܸÎsØår9Ͼúo†Œ¸Îáxt«(¢ïŽbÄØ!L{ä%'auSiêºr—ì¬ øùûÖ[7 Ѐ¬Ì éàá'ÿå´&"[„Ù"œÁ×÷ãñûžçH-¢R/o3?y…ÄN Ç«Ös]4f~==VîÞsšÂƒIíðR:>J¼” âýõÄûëÛ¦%ÿÙ¼‹cyµ¶ïL»‹®;X«áº¨púE†ñήƒüqúœS;½JÉû÷¤¥ÞÛá¸J‰JI¤·I&«UÀÚ”¶_{¼¿€‰íbØt>“õ¨B.“ñx—Œºè7¨@N˜NK˜NËÕ¡A”M.EÆA.“ñÌUI ŽŽp8íãE´Ok®oÅ3›wÕ)n,÷%¶eb»‡cþ5}#ø62Œ÷÷bÑÉT§vžš£KM|b0OïKP˜ó½'(Ì‹ 0/:‡±~Ù õyÝÈ8&?í:àŠF« ²¥/‘-}ùá³Ýë·)ëxîý!„·Ð;÷òVáå­",JOÇ«ÂYóûq¨C Üºm ý»ÒON—^QtéÅ—ïþÍêÅÇ›Í~@ @ àÿ÷øþ‹«5=Ù]¾“ÿæÐàvùMåný$‡cò@®Ó ¤¿noç¾ÁÂâʃå!¬rÍÎb+Vv”mãz¯‘´WupÙ÷¯QʃªÎ Ý^Êy?K–9µYXü‡+±Ù° |$Ÿ]g7õUvQõzÃ:§r“ÕÄfÃFFz¶ ™/&QՑׂÞ"Bép\‰BG¸"œK‰‡Ê®‘GvÀœyÄ#âdk±-¨£L[æmIg{÷k)Êt*S_û0ª«ïv8&ÓTf|¾Ž²µocÜ[»¯³)mkC¦òB;ö¤€–X‹21üú¨³8Yë‹nüH­kôÈ4z$¿È$©YÊòÖ}‡9þNd>!(ÚF?²•¯b<è\¦Ô¢õŠÖ½ŽË|µH¾к7Ö²b*v;ð>‚v¤í{á»Pþwíõm@YéÒ-ù¬Æf3ÉIŽfØK(…ôR@KTw Lƒá·Ç%~¿ÒxõÕWéÞ½;ñññÌž=›qãÆQQQyèСŒ3‹Å“O>é1qrll,III|öÙg—r‚aÑ¢E„……ÕZ¦×ëiß¾ý%ÉÜ>ÎÿOˆŽŽf„ Œ5Š»îº‹}ûö9Õ‘Ëå¼óÎ;Œ3ÆáxLL 111Ü|óÍLž<™Ý»/¿_73Óö¨·nPm¿Wzºc$‰¦^¯§ƒÞÞÞÌ;—˜˜ÒÓÓ¹çž{ìâdOДµ¡Óéøè£èÛ·¯ÓqNG‹-èׯ………Ì›7Ïc6 @ @ žàÊ}£[ƒ¢âRŽ&;G`m(¡!A\wmJK üøÛr,µˆQ›“°`G{ƒë Þ5å6ZÆ´ÀXadÎìoغiù¹(UJBÂiÛ>–ÒC­mÛÄ·fÖ篣óÒb1[X¹l›ÖÿÍùséÈd~þ¾$vj×lbÅõ«6ñÓw‹(*,ÆËKG¯¾Wqë]7äÏÛÍàž›&'»–(Á•ií?ÊŠ%k9uâ4…ùEF|ôÞ´ŽmY«Í'Ýl'ïÞ¾Ÿ9³¿&íl:-ZFòÀã“HìœÀÔÿLáà¾Ã$­²mÙ°¾{äOlÛ’:gNìÓ϶IàÜ™4ΜªŽ`¹pþï,ú¹:kᔩwsËí74xŒî›z—]¼ºzùz–üò'E…Å$vjϤ'âçïË[³_âî›"Ûƒ‚ݦ¬«ÆiÛ8âíã…R©ÀXG]ÿ@Ûf„š¢Û¦ŽsëWoæ÷Ÿÿ /·NKR×Ü}ÿ¼¼½xþõ'¸}Ì'úÓ/Nµ‹“—ý¶’?—¬¡¤¸„¸vm¸yâbÛÆÔÖиùmêX]Œ»÷O°þ\ “OSd4¢S(èÌøøÖhÔ¼uMwî]µ‰œ²r§vó%c²Z9_RJ‰Ñ„B&£]€/÷wlK´7wéÀ¦ó™V8:›ïJˆ¥¥Þ£ÅÂówF6ùå(%‰†¶þ¾”ºǦ´­IˆÎ1hB¨N[§@yR‡8»8ùpn>?O!µ¨ Ñiy©ggÔry½ýºËäÄx»8yÍÙó,9uŽ"£‘Ä@?îi‡ŸZÅ}º1iÕ&² eöv§ ‹üÛ ®ezÎŒú}5eE&¯í¹:¡mŒ]œ¼';‡9s¾¸”(/îïØ–Ä@íÜžƒ9ùœÈwtúyjŽ.%±‚yîƒ!(•uÏáéä\ ó«Ç¹¬´zm«Ô {‚v‹ÅбÂ9¼Éä¸L©jØš).,';£¸þŠ—€IOôt'_Lnv©=Ë´»ÜþðUìÞrŽÜìêÍ/5ÇY&“¡R7ü·V³mÍlÈf³“Ñysž¥F†á¦Î¯@ @ @p9‰UÆñ/ýò-y}:¼öÚk|ñÅìÚµËc6÷ìÙ«ÕÊÊ•+Ýj›œœLûöí›À÷ý÷m÷´nݺa08>_\ee®bÏž=,Z´ˆãÇ“——‡ÑhD¯×ÏÞ½{ݲ«1T ”ׯ_ï ¯>ø“ÉDjj*EEE(•J’’’xúé§iÓ¦ 3fÌ`ÕªUäç»ök»ƒ'ÇùŸÆŸþÉ‚ ÈÉÉÁËË‹îÝ»óÈ#àããÃÌ™32dˆÓ^”§žzÊ.Ö]²d ?üð………tíÚ•©S§Àœ9s1bÕÏ•Ë1ÎUýëõz”Jeä?“ IDATªÊ5m†Æ_ïÅxâ7èëë˼yóèÔ©iiiLœ8‘óçÏ;ÔiÊ}²&Y¯¾úª]œ¼dÉ.\Hff&jµš–-[2kÖ,äͰŸD @ @ ðÿrSÉdŒ½~ rIbéª —\rÖ­ØH|;›sº ¿]Ûœ#!Ö¤cgÛKå•ËÖ±àkÇHØÙ™8¸ÏufÝ'_x—–²²rž¼ÿöí>èTgûÏ9„.æØáØsØþ÷¡ýGÙ±u|ñþ~Ü=eï¾ú_—í·nØîí¸Š#ÁÁ!Lz`"Ölá…'^Çb±mŒÈËÍçñ)ϱ`É‚BÇ8^}n¦C?V«™LÆ5×õt(Ëår®½Î–‘rã:ÇpÌ‹…Šòj§ÅÜp1QXD·Þ1€?­âé³ìeÉGO±{Ç>æýüz_&=0‘·^jx$úúhʺj Y•‘Ðe2ƒÈ8osº>ðø$:vnϧïÏcÿžC‡Øœ™ç«³Mçš;”ÌŽ­{ìïßsˆ¢¢bž|þa¢[EÑ!©Ãµ·‰oÍ€¡×0ÿ«…|òÞ—ö²ä£§X±d-«¶ÿ†Ré|ûlìü6u¬.ÆÝ{Ž'8ž_Àxçæ³33‡Yý®Æ_­â®ö±¼·ûS»¿+¯½&›Ïg‘ZXÂ7C¯E%—è̪TGÇPÇ [&éU©çùá¸c‹lC‡r\;T›Ò¶&ëÎ¥çgYVÙíœÍ¡Š†[ãmbÝ­éY<·e7æ§E˜,VÜÐL6ˆP–ññ¶¨üËOŸãͪûÌ/dOV.s÷A¯RrwûXÞÙUý̰•¿»š¶-ûqWi5ÜÓ>€i™Lÿ{]ÄœW^ÁwðýÐ~iÕŒkÅk;7VyjŽ.’$ã¡ç¯q''ÊfÕoÇ8œK™ÁˆV«¤E'Qê7TG(Ÿµ`,¡‘¶ˆÊw¦ó擫ݶåà®tRŽæPTXNE¹VAH„&ã•áðWªätîYäÈÞLæ¼½• ™Å(¡‘zÚw ÅËG]ï¹Ö-MfÕoǰZá†;;Ò£KTj9=ú·dùÏÕ÷öšãÜ26€7¾Ù`›k¶ýzÍDû2u¯û([ùj³Ø¡V«k#Z­V'!«Ùlv¨ë®ˆ199™W_}•W_}•‰'²uëV–/_Îë¯¿Ž¿¿?ÇgÖ¬YõŸÈ bblþÕ´´4 Ü›`«ÕJy¹-®ÉT¢¢¢Â~¼¡¬[·Žï¾ûÎéøþýÍŸ;((ˆ®]mJü†ˆ´×¯_ïtlõêÕœ¡CÙÀaý¨(¯àëÏ8µ5›Íà" {cç×Ócåî=§¹Øw!—?RÎ0$:…$kpÛ³Å%d–Ú2%DxéœÊó+Åë ~èUJ·ìjJÛš|ôÓ·îáÓG¹oÍf Ê]G«®º~‹ÕÊ»»9~›“!-#d2L+óŸp*?STÌŠ36'á è·æ¨.GG ’K-fí9ä”a¹Ìdæ×“§¸:Ì9Ë…§æèRÑ¥w”]x °mÝ^zèO6­<Ź”|.d”p6%Ÿ-«Sر!µYmùöÃ,øl7Kbå¯Gùýûƒ|ñÎV¾z{³öÛPä ©Æ:+3ÉN/Âd´Pf0qæD.Ë>ÂÂ/ët}âðN'çræD.Ÿ¿µs á|L»Àf±_ @ @ øÿÂÍ>ãITudkÙþ¬E(ìŠá^#PÉÔ­FÞÎ{Í)ë²Ájà§"[fº^Ú>e»Êvj²½C}Ò£¼n XŒJ¦"TÆÝ újm~œ‹ë Ô&«s†¿,s&¿ÛÒ°öÕõC#s-pv­¤l”¼%o{™d{o\%^Ðʪ}qª¶tTÛ¬_|Z«8¹ù±‚ÅäpD ŒA}õÝÈTÎþ™F÷b(ÀZa›3™w¥_@&¡ìxòÈN(⮫îßˬגwÖ~L™0 j0)[ó–]`l?¿Ñ@ÅžìÙ=Ñöb¤€–ènû)(sÆ!J¸×¥8ÀZj›{yx"2­oç¾TXòRí6Ëü¢Ê” Ãl_Lå”oùüR›€×€V#}Œ-¢nH•Ãj¹Ä±m ÃA&ÅDÅVç±²ä¦`øÀ9YÁ‰'øõ×_=z´G÷ 5†üü|Š‹‹j²\.güøñtëÖÍžÙ»fù™3gìÇ®”뉉á矦mÛ¶ìß¿Ÿ[n¹¥VqrsS×Ú=z4eeeµŽ•@ @ @p¥ó?-PÖi5 êÛ «ÕÊ«7^V[þZ½™_ýBzške?·‹ÅJë6-™¿d÷=rQÑõ¶ëÒ½£ýûòÅ«šd¯§Ù¸v+Z–ض­=rÎÎÝl/lï?JNvn­uNŸ´mbðó÷ÅÏßÑé»êõĵ‹!<2Ì¡ìº!¶ º)'Ïpüˆ³¨¯±$v¶ ÈO%Ÿ&3Ý9s,Àæ¿¶ Ñ¨‰kã±¾»®šBÕz ·E:O씀޶1£ç5ÝíõB#låig/ÀPj ç‚mÍ\¼.Ú¶àäñJK n·)óëé±rçžÓœl<Ÿ €V!§¯³0ÞK©àövm˜Ý¿'?]ߟ•c‡°xÔ@>¾®—]˜ª®% ìÂäÓX¬VZë½ù~X?&'ÆåíÕ ›šÒöbþJË`Á±ÒëY+Uæm(kT_!1ÐÖï©‚"2Kk·qkåZÕÈåÄÖ2G¡SåõÎÍ'§¬öˆÍ§ mÎL?µ ?µÊ¡Ì“st)èÐÅñòÓÜ=X-—F„~9x÷»˜¿áNûgÚ;íe±íƒÊæo¸“^[ÙËËJœ9Q½‰¤K¯(f~w£'&áCc1”ÉJ+¶ÿíè¹s—‹¦Œ³@ @ @Ð|%?¦ø>„ ïçÍt«mµ-ËãÁŠý.³.Ÿ2žÀ_òÇ_ò··`á… ÿ¡ÈR„^òezà þˆ\Íæ;X¹‚·‚Þµ z‹,îgÝ[nËT'GNœª­ÛíkC†- £µREùwÙ¶•m¥ØRÌçŸ8Ô¹˜nêjÿÏ’’ß=b»XË‹)šÕ“âPº`Æ} ÁjAÑvÚ[>¹ªþ“4´¯[ÀTI€<" ™Ææ—P´ªË*Ë­ùÕey”m]™Ó`-©}]YrlëJ¦õG¦õ÷HÛšÈCÐÝ:IŽùÌv ?=€ÕP·*Ö¸{X-H1xMú õ5"ù_a LíªÇ=èÆÏÁkòR|¦nÆûÁUènûÒ.––)Ômä¡í0g'c-­ÝÿÞÜTØ’q"SBàg hÙÀ†u¸e­!ä7ÛGá™­ öìØæì.Eê¦S¶=*2¥yH¼g:¾xöÙgIKKÃÇLJ©S§ðá‡røða÷%“y&¸ò?™¡C‡°uëVŠŠŠê­ïããÃ<À?üÀÆ9tè;vì`áÂ…øûÛîog‚t4­V‹^¯wøH’ä²ìŸ=¶´´”¬¬,ʪ2a;vÌ¥@víÚµ€íúÛ·oߌ–6Œ³gmÏâÈÈHºtébЯ_?{½ªòšå+ázùé§ŸˆŒŒdóæÍLœ8ñ²<¨kmtìhÛïwôèQrrr.¹m@ @ AS¹¼á›™¾½»£Ñ¨Ù½ÿYÙÿœxÛ·ìâ¹Ç_áÉç&08€;&çŽÉã9¸÷?}·ˆ¿VovÊ Õ™W‹ ‹É͹Ä!‚롦H2(8Hnò9+3Évê–ÈÆýÔ[_ïëcÏ" °nåF{æ”J‡õ廹¶¨éJ•’þƒ¯`ùâÕM¶³6›]‰WmeYÕõƒ\Ös—Æ®«¦v6ض1„EØ¢¥^;À–­º¤¸„–1- #=-ƒˆJø¹Ôtö_e•"QÕEÂÈ€@?²2kß PM™ß+y¬šBzI©ý{Vͱ¾žVzof^{ÁZG¨Z.w¬ÖæwÞžy¶îáß];¨Qs{»6ÜÞ® sòø9ù4Ò2²öz¢mc ÔØ6xÔ'dö4Uýf\÷›QC¸¨Uƒüq•NíNAüuÓðzëû¨”ö¬Épyæ¨)†V‹§F3çêßðÿ™_ú‹éÅ7À–Y$4Ò‡[§tåÖ)]9¶?‹% ²{ó9·Ï[ZZ½†Tê+ƒ‚@ @ @p¥r—þ|$––üÎ)ãI·ÚÉmÙq»¨»±#z_½õõr_ò,Õ/¦Wâ¶ô›¸K=µ½ •‡b´É0g°­l+ƒuÖ»m@¶©ÚG yÆWj±ùAô’Mh[a­àá¬ûêè¥ê`¹kµß$¸r¬ -…äš/¯/ÛZVˆùü~Ìç÷c:¹í¸‘‡¶GÕi»ðH–üsHÁñv²"¶¿­ïòb¤ÀÖH¾X Î#ùFVÖ¯(Ë*³*Ë£ºâóÄÎzû’iõX yMn[E|eI«•òíó°Kê\ŒéôV ¿?…fÐ3ȼ‚Põ˜„ªÇ$Ìç÷S±k>¦äµN=ƒîÆÿ"ó q8.S¨‘;°pUÂekáåóC}Ò/à7ä!ø9\˜æ´Úë[+c—J~®Ï)S‚<ªú»'¨ZWÖ"×Á¢-5Ʊª¾§‰Çl67˹]QXXÈË/¿ÌgŸ}@II sçÎm–¾ lû;ª‘ÿßðöö¦W/Û¾•+WÖ[?66–¯¿þš°0ÇàÊÆAy¥¿gΜɰaÃj-ûðÃŽ5ªY„ðžÆPé›W«ƒ@Ûžûueï­Yâ²Þ¥"55•„„»yðàÁK‹-8{ö,QQ¶›lMò•p½Ã‡Ûö*X­V>ùäJKëv7'®ÖFUð€´4;@ @ à çZ Ü­Sº&%Ð5)Áe½±#2vÄ@ÖoÞΪõ[/•yu²iÝßlÛ´“Ãú1ææëIìœ`ÿœ9u–—¦½Å‰c§Uú¬Wh« …²†§ÏC¾™Ì9Õb¶4Èé¦T9z‹ ‹ù{ã®ЋA×÷· ”¯½®'Þ>^˜ÍfV.[çc«l®Š¢ÞÀ9ªY¯æwIjÜ 6j]53)¶a•Yû îC~^ó¿\ȃOÜ˵×õdñÏàèGYY9™é™ë»>\ÍAÕa“Ñäö9›2¿WòX5ee„cpÌ fôìB°VC¹ÙÌœƒÇÙ–InY9*¹D„—Ž×{w#Dç:zó¦ó™lËÈf@‹pFÇ´ 1Ðßþ9SXÌËÛör¢ v¡hSÚ6†ªkWÕ†Rs9¹ë,¶×nàcÁSª[”ÅjÅÜ€“Ö6.—zŽ<…©Âò?=lBàÒ’j1°\.¡ÖØþKi±X)3ê›ŒŽ›«ÒS yfÒRFOL¤ßõ±h½ªŸÏm“Bh›4€Ý[Î1ëùõ˜M ߘUsו²±¢)4uœ@ @ ‚Æ2ÚûFzf¤×h—õž x‘ç^äËÂ9|’ÿ_$*ýw˜1Yë÷ß©pÎЛiÎàí¼7œjȸÕg"ûËë?_Œ‰jßϼO»`¶­õ­Cé'· ëLVù–ê ÓÕ~“+ë²)e æóû‘G$!oÕ <%PÎ= €ä€"~VCÛ¿AÝo*Š6ý©Øÿ 2]Vc™CVZû;_«, ðáÉkÂm|Ûš˜NoEžˆLíƒnÜþ˜ŽéxýÁ®M'þ¢8e ʶCPvºÑ6®Ih#’°ä¤`Xö–ìãõÛÕ`dhG½i'›Ê)ßø¦k±”ä “«ùE¡»á=d>¡N-­¦rÛéò-[ yÅàÿ.Hð!äü ,µÙ5Uj¹äa ÓõiϪ}pWÖï÷R Iwß}·ýo///yäÞyç÷U%Ö‹ŠŠÂËË‹’’÷q%3`À”J%V«•Õ«ë¾ßÈd2>úè#ÂÂÂ(++cæÌ™¬X±‚ììlÔj5ÑÑÑ|þù焇‡_"ëÿÿâj¿HÕó¨1ûI.'Nœ`èСvò°aÃÈÍÍå³Ï>ã™gžaРA,X°€   ƒƒÀöJ¸Þ 6йsgôz=_~ù%O<ñüQŒæÂÕ5–•Ù,(ÿÓÛ8@ @ ÿÃüO¿ÙR(þÙÙóŒF.YßKÖÊÈqCÇXZÆ´àùorçØ¸P#3tî›GÎGﯟž‚üÂËeºÁ•Ùò<”ÝùBvqíbX»r3¦½Ý¨sü¾p9×èE›¸VÄĵâTòi†ÀÆu““[ï9,•Š(Y”×U6‡E:;|« ¯Ž š›Síe5V±X¬H’ /o¯Úš6w×USH9a‹ŽFûŽm å×–²fÅø÷$ú êÃÎm{‘Édœ9uK¢>wƹ)4dŽšÒÖÕüzr¬®$‚jdGÎ-+·óÓÓJï ÀÛ»²:µ:2®Ñb!9¿Sý›DŒ +Τ±âLa^ZF´Šâ–¸Ö´Ô{ó~¿ܽj# åoë.¹åå€O‚kW-,V+’L†—Ò½Çö…²rb0/­Ë:aºê²šsT“šÙŠt¯«ìwݹt^Þæþ&±*.å5…¼œê,ÔZ/%aQz2ιÿ vpH^B}íÅ÷“ú‚`¼pŸ£Ó¶SH¦½cËqêhÓï¯ß©›Ÿkà›Ù;Xðén:^Nþ­¸º_´]€ÛµwÃoN`é‚Cî\Jƒ0›766臻¸;¿žg@ @  1¨dêú+¹ ÛœEªlð‘ôøI~âå˵ؖmZ¦­#-­›X.ØÆJ¦@žˆ¤À¸÷'ŒÇV¢îû(Šø˜R·ƒL†%7Å!*¥¥äm1[EÙ²çÜë· mkb>»‹òÕo¢; )0íÈ×1ü!a:ZVSÌFŒ‡—a<¼ I²ã”Ý& ¶Fw˧”|=kqv£m«‰<´-R` e+_ÁxäO{™ÕlÄšu kEI­¯©­ç!¬Rp¼Gli åCþ³àÿ(¢!à=ȹ¬Ž±;1¨ü"¦V]ûªÖ•¬Rp_’¾Zj-ñÌ=Ç“Tù-Ü úúÈ#ЫW/JKKYºt)·Ür ÷ÝwýõÛ·o÷¨»wïl¢èþýû³lÙ²FÇb©¾Ÿ\ê ·M]2€½{÷’]÷=¢}ûöÄÆÆðÌ3Ïðûï¿ÛËŒF#‡¦¸¸¸Aý6ÖfwÇù¡‡r:¶xñb™}:sæÌ!..Ž÷ßI’XºtiƒÚ7ö>é.çΣS§N$$¸N¾"@ @ \ɸŸÊñÄŒ·?æ¹×>pù)5Ø"þ¶l ϽöA³fOî;°7·Ýu#aî‹2ÎgòÅ¿å¾ c2™ðÑ{3|Ì ‡:ûwl/F‡ŽØd›=Iï~W`6›9y<Å#ç<°Çv½Ý{vA­®=’u}lß²‹ô4[ôíc‡LÞÝøí‡†½.¯Çyyëê­[es›¸VöL¹sMÿž”ÊH>ê˜Í8§R8ܪMtƒl«†¬«¦r2€ˆÈP†ŒÀªeëÈÊÈæàÞ#tìÒžî=»pêÄé:ÏåÎ87…ª9j×!ÎAXïNÛÆÌ¯'Ç š~Ïñ½+Ùf«•S5²Ýúkª77ðP0…Œs%sÿÚ-˜,V|TJ†µŒjÖ¶×F†rk|ë:ÀGrm›Šbýô)çT ‡[ùx»Õî@eàŠ_BuµÛاr­–™Ìœ(¨}.Êj:"’®ê·[Hj¹g‚…4e~››cû3šßò¯Î4ÆGY^VM$0¸yïu51ÔÈÒ êÞ:sY A°Ñhf÷æs|òÚ&¿õ7r³«StéÕ<ó[\è(j ÷i–~.ærͯ@ @ @à.}ÏöäªÔN.?•BÚ×rgpUj'{öd€}å{¸ZÓu„ÎÓFËú»X]ºŠôZ„Àõq­¶/«ãÆc±kWùN{6æ¾Ú~NåräôÖ\À޲me{Ë÷¶À ×{òˆ=žBò·ù"­†Óœcó‹I¾(®ÀxäO¬E™•›;¡hió)W‰™ímÓlÁP-¯…{ëª)m/ÆRFéÿÂ|~?È$´Ã_Aïž_ÞRxžòÍŸPúý]`1!ÓèQvðÜüËtöïæ,÷23›ÎØÖ¨ä…"¶¿Çlj,eAᇶïÊDðyйNÅA0WÞ¼îä’퀩ZWò X!rMml÷«Ñàö\\ [^oï†û…zöìÉÃ? À³Ï>ËsÏ=Çßÿ$IÌœ9Ïú\öíÛÇùó¶@×÷ÝwòFú«®ð¸õQ^nóKétîù†Ôj5ýúÙÖЊ+ê­dÿ~øða·úº˜ÆÚ|9ÇùŸÀ®]»h×®KÑî A¶ý:¥¥¥.çñRŽs•@¹E‹Œ3°‰ÈÓÓÓÙ½{7ݺu£OŸ>?îxŸóÔõ6•³gÏ2~üxvïÞ\.ç½÷Þcøðá jÛ˜ûdcؼy3ÑÑÑ <¸Yû@ @ šƒÿiò•„{nâµYÏóà÷òÅ‚ðõÓ×Y_¡p-þJ9y†ÂJ‘ŸŸ¿ãyŽ:nÐÎß×ýþêÈxšRXLQ…Mpé[Kð‚¦´­ÉmmcxµWWHjÇçz£W)]Ö]{Ö¶3B.“qWB¬S¹$“Õ)h­8÷‹™£i IDAT C£høš\•z³ÕŠ\&cR‡8§òÖzo†DGÚëš\dæÎ*­vr^Tkš¬8“†ÉbÅO­bjçöÈÝTëzjŽ.;7ž%¿FåžZñüCé5°Ѿëo¡'¡s(#oí€\Qû¿r2Kìß#[ùqà ÖîMl‡`Æß×…ÖmÝ œÐr²K)3TßÝO§ž‘…z×!˜[§tÅ?È3‚Z¹Bâ£_nâ_Oõ¢Kï(üƒt(•r4ZþÁ:L¦j1|se6.È5PZC”=`TzDæM»¤nóàõÖärͯ@ @ @p)YV²“Õ„¿äÏSþÏ §éA,{jzñIèhdrÍ9ÌÊ{ÇístT'qƒ÷,/YæÉ¸)äšsìÂã;|îÆKòr(¿Õgr›`ôÏÒåe‡+q¼Âæû»ßï!:«»xĦ¦¢ˆígÏ k>·Ëcçµäž‹ IŽ2a–üs6¡/`<²d2TWßm«{á„C[ãá¥61¯ÖÍ€§AjøºjJÛÚ°–Rúó˜ÏíIŽöúW‘Gv®½²äÚ?kÉ9…µÌ8Ö“™ª­¥¹öïò°önµ5YnÏô«>eâhd^ÈÔ>ÈÃ;¢¾î \ûÚƒ’ù6¡2€×DP÷¸¨‚ÅV@ÙôC­é¡=ŒéÈ`1ƒ$GÕ{ŠS¹ƒ²ýõ•u—ƒÅ3÷OR%ü %88¸Þú~~~Ìš5 I’øñÇY²d ‹…§Ÿ~š’’"##™>}ºGm4›Í|ñÅ$&&òüóÏ»Ìd*I®·?U]+Àµ×^ëQë##Ã0?<<œððÚÅìµqÍ5ר«VÕŸüÂ…ê,ÝIIInZéHcm¾œãüO`Ñ¢Eöý$=ö˜Sy\\cÇŽl"à‹÷ Uq)ÇùäÉ“˜L&"##=z4©©©ìÙ³Çn£L&cÊÛ=ðØ1Çà/žº^OPPPÀwÜÁŽ;ËåÌš5‹îÝ»×ÛÎÝûdcY¼x1YYY¼ûî»ÜtÓM£×ëéÒ¥ /¼ðJå¥}þ @ @ îPÄ+Zmw$ij’”J%šÊLœ³… £ñr˜W'‡WGËöõ×Ó­G'Ö®Øè²þ»Ÿ¾ŠÉddÍŸ8zð8¹9ù( Â"B}ópmâÌãOZ­VÞyy6³ç½…F«aö—o±vå¶üµô´LÌf3:/1±-ñ ðeÎìo<~­wN¾•€@?6­ÛFqQ1ñ ±Ü=å6t^ZL&_~ò½ÇúÊμÀןÿÀ½ÞÎÈqCérU‹~ZÆ™”sä^ÈE¥VJ§n‰¼÷Úǘkˆ#k²ä—?¹ûþ øè½¹qÂh~þnqƒíØ·ë `Ë\ýÚ{ÏóÕgó)/¯ EËHÂ#Ãøüïìu3Ó³ùáë_™8éf†„V§eÉÂ?).*&±SwÞw+ …‚‚"¾út¾S_,^E¿A} àý9¯óíœ9.•ZIhx’ܵӭ±ëª)&N8C|»6(}}øùûêq]»bN›bï÷Øá®N¸7ÎM!3=›ùó~áŽÝÂ5ý{òñ73ùù»EœK=$I„„»ç¦Ì¯'ÇÊÝ{Ž'¸#¡ 5›ÏgRl4ç¯ç®„Xt &‹•y‡“êŸ(("£Ô@˜NË#P+äìÎÊ¡ ¼•\ÂO¥B[‡8|æµWa´XY{6£¹ä•—£d„ê´ŒŽ‰¶gh>Z)ìõTÛš lQíŒõU«èĺsµgl8]X̪Ôó ŽŽ`dëx+•,;}Žâ #1¾>ÜÐ&]A–ŸN£od5³ú^Í·GN’^RŠJ.'D§AráˆÏ,5ðãñ&´aXËH´ 9KO¥Øh¢C w&Ä¢dVùêˆëu•ZTB^yþj÷wl‹\’q2¿™ Zé½iáíŧªŽÙ†2¾9r‚IâÑ:ŠÎÁ,>•JjQ1¹e¨$‰0/-‚˜µçf«£0ÚSst©0V˜ùì­-<ýæ{và„Ρ$t®=ƒù¾íç9{*Ïéøá=tíS5ø–É]¸e²ã†´ %¤Ëñ õ`µXÙµ)•>ƒcÐûi˜ö¶cƇ#{3É»PZ[s·ˆjå‹_ –£â0ÊY4_“;Ï×YÞX¬Vصé×­¼^ ÓÞq¼Þú^‡s^¦ù@ @ .%YæLæ~Îßã=–nšîüRü§)ä˜sPÉT„+"éªîÊ[¹¯cÆÑ§•iÑK¾„+ÂIPu`n0Ij›ø3ל˓ã‚ùBm]ÛIPu ‹º…–ô’/½µ×p«ÏT2y–<æ|Rk;oÉY¥CÚ[ªÎ”§‘´øH¶ …&« ƒÕàÐî“üÿrUØÕ„)Âù8dŸ|B®9—>Úk˜ìkíl4üÅrÇàÈV¬¼žû2Ÿ…~‰V¦å³Ð¹¬*]É&ÃÒLi˜­&¼$oÚ(cñ—û;dªn2¼îœ)e3æ´½XгmÂa¯ ä­z¢ê|‹Í¾Ò\Œû~õPŸ€ÙˆùÂIä!m‘É•Tì^`/2[ ×=aÏþkÎ<âÐÔZ”EùßsQ÷ž‚²ãä-ºaÜ·Kîi¬%9 P!é#Gu¡lÍ[6á¨ÚºÄTŽaÑãèÆŽvÌ»”οKþY‡jº›þ‹ÕlÄtlæŒCXKrA®°‰´“ÆU_oÆÁÆŽªæ¬ãX Ó‘ôá6A±Bƒù쬆|«iýAé"¶©ÃÒgÑŽû™Ê ÍPÏŠMKÁ PýRøN‡ì› æÏ°ä'Ð Uðº”q¶c¦À ª«=o“¥0ƒŠß¡ºú.”F"Sé0îÿ kyòð$T=ïIµ¬ò­_xÞ°cÇÀæÿøã™={6ååå´nÝš¨¨(fΜéPÆŒ„„„’’Â+¯¼b?ž––ÆÛo¿ÍŒ37n‹/fÓ¦M³óÛo¿eèСôèу;3.]ºðý÷ßsôèQd2‘‘‘ôèуž={2|øp¬Vç€Ì§N"''‡ÀÀ@¦M›†\.·‹)ãâ∉‰áÍ7ßô˜Í5Ù½{7€=Ëôÿû_, ÑÑÑDEE1kÖ¬ZÛ :°e°=}út½ý9r„´´4"##yá…Ðjµlݺ•ÜÜ\Ôj5hµÚfµùrŽó?óçÏóÅ_0eÊÆ‡N§ãǤ°°.]ºðÐC¡P(ÈÏÏgöìÙ.Ïs)ÇÙh4rìØ1:t耟Ÿ_}õ•½lÙ²e¼ð öìÝh–ëõeeeLž<™ À§Ÿ~Ê7ÞÈ™3g\¶q÷>ÙÛ{ì1æÎ‹——o½õ–GÎ+@ @ \*þ1åiSïEUK4À[Æ µ?v"…o~üýRšÕ ²3/ß®ýï¬ ×NsI’hŸÔFÍÕ½»¹¬·ù¯m¬[¹Áéø‘ƒÇxêÁéLã)‚B4¼?ƒ†÷wªWR\b(kuZäu[]a(-sý*• ÆŽÉØñ#Ž›ÍfÞxa'§¸ÝO]|ýÙT*'ÝLd‹pzâ_µÖûáë_9{&­Ö²‚üB–/ZÅ ãGŸWÀòßW7؆s©çYõÇz_ߟÄÎ Ìü¤ÚW_è$œ3û‚Cƒ2â:úêCÿA}Ê‹ ‹™öÈKdg9 ”¶üµ¥¿®`両tHjÇ›³_l]WžXÇ%ß® ‹•?kŒkaAÖlaà°¾X­VŽ×!Ž÷ǹ)Ìýè[ü|9n(í;¶åÅ·¦5¸mSæ×ScåÎ=ÇS(%‰ÚDsC›h‡ãf«•7wîçde†î*,V+¯mßÇ[×tÇ[©äßnd|—d2üÐÈå\]G6ß-éY¬;—á±¶“m(#®Fvê,ƒ¡ŽÚðÞîC„yiéèOÿ¨0úG…ÕYÿb{–¥œcDë(ÚøñF׿ã‹ùâàq‚µGGÐ/2Œ~‘ŽýUyfó..Ê\žÃbµòÅÁã<Õ-_µŠ'»&:”VÊß9J.1¡m ‘Þ:LjWë¹<žÂÙâê̲žœ£Kɾ¿Ó˜ùÌ:¦<Ó½_Ýî[Æú×*P^»4™ÁcÛéã²mdK÷3Ž7„Ÿçî£SH¼õêÚûmå˾mµ?GÝ!¢öݗɲ7¹?W,ür/zD¸œ+O]oM.çü @ @ —’¹Ÿ£–©¹SQŠLõ{¢Özß~CªÉQòßTÆûÜæpÌŠ•¿ ëx'÷M²Ì™õö?@7ˆºANÇsÍ9<–ýˆKó‘«ÑÊœÅ[¯¾nÿ¾É°Ç³q(?Tqwrßä©€gh¯êÀûÁŽBâSÆSÌÈ©]èy¨â S³ä•À7 –3T7œ¡ºáNõŠ-Å(K­‚ãP»"i-ΰèI¬åE.ë4KÆaä!mÁjÁthiue…˜N¬CÑvX­X2:µ­Øú2¹ ÕÕw!ùE¡î眠bçwXòR=ÖÖÖòbJ} ¯;¿G¦õG;æJ¾¿ Lå¶ 2 ),™Rƒ¢U/—ç1Ü€éXÃ}Óõf¡lùt´cßG¦öA3è?n57ŸÛMé÷w¢¾æ!­{Ü<ÞZ^ŒéÄz” Ã+³P;‹@› K~~¯€<¼ï„¢ÏjV€ÜÇÀÿ-P÷U7Û§¹)ßü12Ÿ” ÃQÄ @7À¡ÜZVˆá·Ç°g5¿1àôéÓüþûïŒ=š®]»2oÞ<{Y^^žƒð®ÿþŒ9‹ÅÂSO=…á"¿èüùó¹ñÆIJJbÆŒ 2Äeyw±X,Lž<™>ø€ë®»ŽŽ;º_vèЃÿ‹…÷Þ{×^{ ^{í5‡ò¼¼¼fÎ;vŒÕ«W3hÐ zöìIÏž=ú­Mì+—Ë0À¶žV¬XÑ ~, O<ñsçÎE¯×óòË/_R›«l¸\ãüOáÝwß%,,Œ1cÆ0lØ0† æP^PPÀäÉ“ÉÌtýÿK=ΠC‡X,~ýµ:pI~~>+W®dĈX­V:äÔÖ×ëIŠŠŠ¸÷Þ{Yºt)|òÉ'Œ7޲²Ú÷J¸sŸl*Û¶mcìØ±<ùä“ôíÛ•Je·yÕªUŒ3¹\^k@ @ àró(ÿ“ùøÝ¹„„Æâ…ppß—u­V+Ó~‘¾ûØ)À ü|±Z¬äæäqâx kÿÜÀêåë±Xjé¸gÇ~n5™ëÇ ¢OÿÄÆÇ ÷óÁXa¤¨°˜”“©ìú{/r¹³ÙÌ»Ÿ¼BÇ.íݾ®Çï{–ïu8öçïkP*t¹* _=y…ìÙy€ïæþĉc§Üî£>¬V+Ÿø«—¯gì-#èru!¡A¨Ô*Š K8“r–Ý;öS_Xçy~üö7Fß|=’$ã—K¨(¯pËŽ7¦ÏâÜ™4_ߟЈP*ÊËI9‘ʆµ[Éd/ˆÍf3¯<óVoaôÍÃIHŒG£Q“‘žÅæõÛ˜?o!yud}{ƇìÛu‘7¥M\kt^:ŒF#y¤Mçø‘“ü{÷U™þü}Îô™ôÞH „@]Š EPE±7Tì®îÚ~º~-Ë뮮½®«®kït¤(½wB(IHïÉL¦œßI†I%z¿®k¯œsžó<§ÌÈ5g>Ͻjå:¿ót<÷U î[wsᥓøeÙjçú>|ýê“ï9kÒXÈ¥ºªõJ•í9Ïáv»yvÆ‹,𻄋¯¸€~3‹ÅãöP^VAΡ<¶oÞÅ/Ë×4Ùöx¯o ÎU{>seÞþôªÊàèBMFÊul(,á£{ÙSÞôW6•rãüe\š–ÂàèH¢­fBŒjœ.*꜔Ø쯬bÕ1kMÓøã²µŒMŒ%32ŒH³™0“ »ƒ½å•üp0EóðsOt¤í±^Û´ƒ‹™x›•¯³°µ¸åj¾5.øñ¦¦¥019‘ä`Š{Ë+™·?‡»f`P›Ÿ๵›ÙXTÂäÝH ª×ãôx(w8É­®aWi9«óýTåÖ4ž\µ‘¥9‡¹(5™>ᡘõ:Wײ"¯€Y;³(mÃgÞ·ûR^WÇÔž)¤……dÐSër³§¼‚ŸròQðý)м½e‹æ1%5™!1D[,u*UuNTV³®°˜ò:ß¾yN´õ+ñû+>g줞 ‘HrZ8Á¡& FŽZÅÕdí,&gy“íí5NfÜ5‡KnHÿ¡ñDÆØÐéª+ê(-ªaǦ~þ±ùœ;¢ ·’ÇoÿžË¦$ó´x‚CM8ì. s«Øºþ0«—6ÿƒ¬¿äpÍØÚÔÏÊEÙçW3b|wú Œ%&!‹Õ€Ë顼´–ý»Køyñ~VþÖÌ¿s¡0¯ŠÇoûž©7yÏuh¸™êª: óªØ¼:Upž;z}Ûsž…B!„B!„èJ¯–½Ä¼ê9\|CMÈÑÇbRLTz*Èvf³Æ¾š2ÿ÷êÕZ•žÊ#Ûícƒc=?Ô.d¿3»Õ~_*{áæ¤ÒˆÕÅ`Q-Ø5‡œYR»˜Y•Ré làö¨O«>f¯sׇÜÈÓ@,Š…]lJHŠÎˆæ¨ÄS´×ÞŸpnù ÍQÕᾎåÎߎKpí[§"Ïg]ÝÆÏÐ÷žˆ§ì Z]u­5Ë^ŹcÆA—¡ë6%8Egò޽$÷Á5ÞJÁmÛ<­ªû¼¿b¹øyÔ¨4LgÜcÉ‹GVjÔ~q/ú^Ð%ôGµE¡XÃAóà©.ÁS¸ ×Î8wÌÍÓ®~[ã>´žš÷¯Ä0ø*t݆¢Ç ˜CÑêªÑìåhÕÅxJ²qe¯l²½§8‹Ú¯Õ…¦¹Ñª 0ôõNú­ bŸ µsÁz ‡x«$W}Z£ÛD«’{¼•”-€±/¨á Õ»œ;¡îpòëû÷ãÚ½À©èâú¢Ìx*ãÚ»”ºÕ Õ”°ÃÀ{øá‡ÉÎÎæ¢‹."11»ÝÎîÝ»™?~ýów½^Ï£> À'Ÿ|Âúõëýöãñxxæ™g˜9s&Ý»wçꫯæÃ? Ø8«««¹å–[?~â‚ . ;;›ª*ÿ7êx)??ŸGy„7ß|“Þ½{sï½÷¶ènËçd ìÞ½›Ûo¿£ÑHLL n·»>¼}É%—4¦B!„B!„¢+)GþçcÆŒÊÖ­[•ÂÂB¥²²RIMMU U£Ñ¨«®®V=ÁjµœN§0«ªjÓ4-XÓ´ð¥K—~µfMChoèС'ðpº^ZZZW¡Ý^{ÿ¡Î]ñ ¶ o¾øþûã@Qt‘@Üâ×íû)ç`3èykËN>ÚøI~KN=ƒªòÊÆí|²;»«‡sÊ›9i‰AVž_·•¯²ÚVí@ˆ_›?þãl O`Õ’ýüëñ%]6–/'O Ülâ©U™ ·ËÆ!„B!„B!¼fÏžÝäòßÚ³]!DÛ©ݱÝô)µ_Þkoë!G!DûýéObÚ´iäææ2f̘®Î)ç—_~!**Šx€/¿ü²«‡#D‡õìÙ“ùóçpûí·³páÂ.‘B!„B!„8•4•ó;vìEQJE©ôx<Õ€Ý`0ÔÕÔÔ8UUuÚl6O]];::Ú“••¥kÑÑÑZff¦6cÆ ¿Yû¤‚²à®ìê!ˆ“”ÜB!„B!„B!„B! ƒ.÷¾Ð<¸óš¯T+„è˜sÎ9h_õd!į×u×]x«ÕoØ Å"„B!„B!ÄÉGÊB!„BüÊe‰ç©·/ðYöá«kؾ!¿‹F$„B!„B!„âdc¹ðY<¥pçnÄSUN;Jp†¾çaȼ×®…h5%]:Ž &`25ÿßß­[·òÄOœÀQ !„B!„BÑvP>‰ü´éû.éwÌ€ó»¤_!„¢³Ù zlßî(аýÏ\:-`û:\3öƒ®‚8Ø zÂÍÍ?@B!„B!„BqRõ8V¾>y8JXŠ5 EgD³Wà.؉k×"œÛ¾·L+Dg9P^¼x1n·»‹Gsò "**ª«‡!D‡ ^zé%FErr2‘‘‘FÊÊÊØ¶msçÎåóÏ?Çé”ÿþ !„B!„Bˆ““rä>f̘¡lݺU),,T*++•ÔÔT¥°°P5ºêêjÕãñ¬V«Áét³ªª6MÓ‚5M _ºtéWkÖ¬©ß×СCOàát½´´´Ö7B!„B!„B!„Bˆ.2{öì&—ÿÖží !„B!„B!„B!įUS9ß±cÇNQ¥TQ”JÇS Ø C]MMSUU§ÍfóÔÕÕ¹£££=YYYZpp°­effj3fÌÐŽíC=aG#„B!„B!„B!„B!„B!„B!„B!„8åI@Y!„B!„B!„B!„B!„B!„B!„BÑfPB!„B!„B!„B!„B!„B!„B!„B´™¾« „øm ¡gzwJŠËÈÞ{ «‡#įž¢€¦uõ(DS¬AFTU¡ªÂÑÕCÇÁl5`4ê¨(³·¸¼…B!„B!„âÔaèwºØ>¸®ÅµkQWG!„B!„B!„Bˆ“Š”…h§+®»˜{ºÍoù¾½û™vÉÖö×ê‹…ÿÅ`4ðòßß’€²­˜9i‰AÖ&×]ôÍ"Êu-¶OíÉôûOçõ§—‘“]ÞCìRÿ™ &sÓÿ´yãoËY:gï Q룬ÜúÐHº¥†cãí¿¯dñ·»Û½Ÿ³§¤sÙôAx<³ß\ÇÒ¹í?ÖÃ?¹½2£ 7ãp¸(/±søPÉeÉ÷{pØ]íÞﯙÅfàw¡[Ï0¢bƒøß[ëøú£-Ín<ïÁ{÷å’ž)M®{jÕFæÈ=®± !„B!„B!:G²>…›Bo&ÓØŸX}.ÍIž+íuÛXi_Î5 »zˆ¢LgÞb ÂSYÐÕCB!„B!„B!„â¤#e!„¿Yª¢g³p¸ºÏ)TÒÔîrSçñø,ÓZ¿N¯rÛãHîÎÓïLfÖë˜÷Ùv©äÚÅ‚‚ :=±CûˆŒ±qÓ}#PT€[ɆŸsZ­äÛØ÷`â%½}–YõF¬6#ñÝB<2‰õ+Q˜WÕ¡±þÚ˜Lz†œ‘Ô¦m÷=XërSQçôYl4 ï …B!„B!„¦¿i ¯Å¼…Y17,T ÄJocú›H@Y!„B!„B!„Bñ«qJ”Íf7_;•„¸>úô[¶íl¾J ª(dôîÉ€¾é$'%`³Yp¹\—±cw+VmÀîpœÀÑ‹SÝÇ÷_-¨ÿû–»§qéÕvz[!D` ⯣†`Öé˜ôå|j]î®R›½¶i_eµ¯âø°1É$÷ À`Ô1í÷Ã42‘7ÿ¶‚Ò¢šÎ&“.Ë Wf4‰ÝC)È­äùGì´¾ì5 !NEQ0štÖ×É$<ÊRNo6,ÒÒæ€òȳºû…“U^RÛd8ùD^ßSÝñ¾ßܼ“77ïôYöåä „›M:^!„B!„B!™s}Èô7 ĪXÉuå°¨fïW¼‹]kú;H•qÖñœk=¦A„«áÔiö»ö³´öGfW~D•§ùÉS =¹,è N3#QŸ„[sqÈuˆeö¥Ì¬ørOY›Çšy(£ÍãbB´.–bw×¾* ÇÛØúš_§ IDATã30+fª=U¼Zþ2«í¿àÖÜÄècèeHï´~ÛMQѧ‰¡Ï¹è XÃÑ\<¥pí]ŠsÝ,4‡LX)N }7ˆþÜûºøV¨Ûà¿MЭ| AÉïÁñsÓû2d€õR0 5 4;¸CÝ*¨þ ܇:í0„B!„B!„B!~“N¹€rDX(×\6™øØ¨6mÍe“ÉHOõY¦3IŒ!1>†!úòÖSQYÝÿBÎ:'ÎF• ÇT5쬶BˆÀ²ô˜u¿+ÀÏ‹³)È«äâëûsÚèd KଋÒùôÝ&~é ç^Ú‡ØÄ`ÊŠk;­€;/þ¤þuJZ{wr§öw²8°·”‚¼*bâƒÈÝ_NÎþò6·A/Ÿ¿g¾¶–e ²@ƒˆÝRðX M¶=‘×÷T×UïA!„B!„B!Ž×¥A—óPÄÿ¡¢Ö/ëaHå–ÐÛ™`=‡[óo¤Âãÿ]äsÑ/0Ör¦Ï2½¢'ÃØ— c_.´Má–ü(túl£¢rWØ=\r*¾¿WL¤{“nìÍdÛEÜœ‡]y-޽¿i÷‡?D?cŸå&Åðã=ª§!ïséçËžãëª/ë×t`­}M§ô{<,Sþ¾çXŸeŠQ.6]l†Ì ©™}3ZUa3{âÄ1†à[¼¯«ÿ×L8Y?€íjhôVB1‚†t°N…üs@«;£B!„B!„B!„øm8eʪª2|HÎ9s$fSÛ+ÆmÚº“¨ÈpÖmÜÆœ)5¬þõ¶õ‡ùvöÖú¿ËJjÉÚQÐñþ–É{P!„B!„Bœ*2ýx(âTTvÔmçÍò×(v3Æ2–›Co%ÕʌȿráïýÚΫžC²>…o«¿b“c•ž ¢u1Lºˆ‰ÖI$è¹'ì^ž(~Ô§]¬>Ž+ƒ¯AEÇŠÚe|[ý5]W#¸4ørÆYÆ£‹åÿ…ÿ‘ ÿÐìØ/ º˜?†?†A1pÀu€yÕ߳ѱ×!ª›©ÜÜ‘ã=*^_ÿzYíÒÖNqÀú=ÎsQÓqnýwîf4{jP †Ì Ð÷954Ó˜{°Ïy" ý Ñ^j„ÿ PÁ¹*_nz»Ð‡Àz™÷µs+T}èÝ^QÁ ¶«Àu@ÂÉB!„B!„B!„vJ”÷Ï`ÂØD„…°kï~Ò{¦´©íæm»Ø¼mZ£eùEìÚ»N%³O½R›m/„BüÚÜWÆ+ù NÁíÖZo𤨠z½wŠ}MÓp9Ûøí å¥v¾úðø‚®¶ †Š!ÅùÕR›œjç9Pä=(„B!„B!Nvw†ÝŠŽw>wÜBÕ‘`ïöº­Ôh5ü!ì~ÆXÆÑß4€ÍŽM>mÔÌcAÍ<´FOh÷8w³Ò¾}”ž Ö³ý*,ä¹ryºä/Tz*ý¾+íËy!úeF[Ær†e ÅB­Vë·Q–Ñ<ñ'Üš›¿—þÏ*?ÆCëß;väx2)æú×v½Õ>ÕïñpíX€kÇhtß5ŸO?úºÉ~Çž5Š)—ŸOŸÌ^˜Í&ç°üÇ_˜õÞg”–”ìüœ,2úõæòë¦0hhÂÂC©¬¨dóúmÌþàs¶lØÞd›ÉSÏ%s@z¦÷ *:‚àÐ`tªJA~«W®gæ>%/çp³}êõz.½æB&Nž@rJ"( ödþw‹AQÚ4îãy¯É=º18:‚ÔÐ`b¬f,z=v—›œª~Ê=Ìg{öSít5Ûþ¦¾½8-6’h³™“ƒªRæ¨cKq)ŸìÎfkqó÷•E¯ãҴC· Vƒž§‹Š:'¹Õ5¬+(fæÎ¬€·=*)ÈÆŸF "1ÈÊ—{ðÖ–m:gƒ¢#˜’šÌ€¨pÂL&Üš‡RG*«ÙZ\Êü¹äVÕÔooÔ©,¸ä\þòËÌóÛç©çbPU^Ù¸Ovg7Ùï˜ÄX¦¤&Ó;<³NÇášZVä0{g¥ÿ_(ô 潉£ý–Ͻx¢ß²µÅÜ¿tU“ýfD„rYZwEGj2RUçdsq)ÿÛ•Í–âÒ&Û@`®Q µ5©7¨Œ:»§Ñ鑇™P…ŠR;y•lZ•Ëß즪ÂÀæ_ƒÉìÿOŒÃ˜¹tšßò÷þµŠùŸïðYÄÀ‰ô;-ŽÄ”P¢¬˜Íztz{­‹â‚jì)åo¯§ ·ò8޾e†%ððsg°g[OÜñ}«mŒ&g]”ÎÐ1É$õÃdÀ^뢲ÌNa^5ÛÖfÞgÛ±×6ÿùqö”t.¼&“ÈXµÕNön/bÎÇÛÙ²Öÿ=ÒÜyxãoËY:go³ý4×v̤žŒ™ÔÓoùwÎaÏÖÂÛ¶çúÖ·9Žó 0xT.ìE¯ÌhlAF*+dm/fñw»Y»ì ßöf«ñ¤‘Ú'’¸¤‚CM‡š1uT–ÛÙµ¥9oc×–Âfûì?4žó¯ìKÏŒ(Œ&=…‡«Ø¾!¿MãmŽ„“…B!„B!ÄÉ(BÁ0óþ[ñ^}hö¨Ù•1-ä&ÂÕp&YÏ÷ Îj-<¡ÝäØÀëÙ˜3*ª_xxNõwͶW3—Ñ–±èУe¿3Ûg½Uµñ—ȧPQùSÉcÌma_uäx{Ò˜ÿ™ß>—t[é·ìÕ²y¯âÝ€ôÛqÍ_#wÎFô½& èMÞò³ZÇ'–4 ˜ŠùœÿÃSz€êw§¶¸­.e8ÖË^C«*¤êÍóü×Çebr5únCP,áhŽJÜ9¨[ó!îÜ–ÏQGÚ6E±„b½ê]Ôˆ<ÅYÔ̺ÍáûÌB1X1 ¹ }ϱ¨áÉ(FZ]5š½OY©[õ~»ûniÔmè’G G£˜CQtF´šRܹ©[7«•ãU0ô™ˆ>óBt±}PÌ!h.ZM)ž’l<‡·àÜ6O™ÿ÷ñö(({ÜþJ¾Íûÿ®ƒPþ47'ÖIs´ê{Ç0àRtq}Qô&<‡qe-¥nõÑjJ:§S!„B!„B!„Bˆ“Ä)P^µn9yùìÚ“GÓ0›MÙoJR<¹yNøÝƒ·ž‘Àu7_Á²Å?³uSÓA€Ð°^}ï9RR»ù, "8$ˆ¤ät:µÙ°oßþ½™ñ÷‡‰OŒóYn0è±X-Ä%ÄPS]ЀrWŽùY/Õä~ƒ‚õô꓊y¾ÙoN§ãÿž¼Ÿ‰Œ÷YžÜ=‰ä“¸à’‰<|ÏŒfC»§¢Ûÿp#×Ý|…ϲˆÈpÆ}cÏÅ O¿ÎÿûÖ¯ÝÝÞ‚-ÈJéÄnñ$v‹çœóÇqßm±½‰0«-ÈÊ?^ÿ+ýfø,OÏH«_´E{ßGq×€>Ø ¾6ƒžôðÒÃC¸¤g \¾–¥åM¶?=>š>á¡>Ë¢-fÆ'Å3.1ŽçÖnáûìC~íBŒ^9ótRB‚|–  $YQ¥ÉkGÚ{ìéá!\Û'•e¹ùlk!¨¯SîœÉ…Ǽ÷õ舳Zˆ³ZEµÓÕlÈøxè…G† àœäŸåÉÁ6’ƒ{p~÷$Y¾¶Å°ðñº­_o®í“ê³,Ülblbcãø×ú­|¹÷€_»@]£-½_4w?1–¨8ÿÏ€¨8Qq62Åñãw{ÖçøÉ½¸õ¡‘Í®7[ô$¦„’˜Êì7׬ߎˆˆ¶òè¿&ß-Äg¹-Ȉ-ÈH\Rý‡Å³èë]ÐB@¹GïÈú׆0ƒG&1xdïþóg~µ«Óƪ0šõÜõè —â³<,ÂÂ3’rFËægñúÓËÑ< ÿ¶‹Žµqý=ÚÜgx”•g¦0|\ oÿ}E“÷ò¤Ë2˜ö{ßöGïA!„B!„B!~mN3 CEàÇÚÅ~ë]š‹åµ?1ÙvQ}À¶­š°½n[›*7VãiH6U¡øò +UÃXm_Õæp2tîñžŒý¶F—8wþö€„“´*ïäŠ%¬ÕmU«÷{rO¥ÿ‘¦1wc~£Ï2Åq¤âóxì?ü熦ŸGw¤mS£ Ë%/¢F¤ UæSûùïýÃÉ–P¬W¾ƒÙÃw¹9Å‚Ö EU;% ¬ëqº¸Lß~ƒcÐ÷>}úYØç?‰s‹ÿߊÁ‚ùÂgÑ÷å·\ µ †&@Qhö*êÖÍ ø¸ ¾ ,“½¯+þ ŽŸ›ÞNß GCWš³Ó†äOÕaž4C†o^HÁq=†~S¨ýâÞã ¿ !„B!„B!„Bœ*N‰€reU ;vï ȾÌ&q1QŒ6Ì>i8.æ,ü) ûnNL\´Ïß±ñÑ-+o¸ýjRR»á¬sòö˰rÙjÊJÊ1 ÄÆEÓ»o5ÕµM¶í™ÞƒÞz«Í‚Çíaþw‹YöãÏäÊCQTÂÂCé7°OÀƒ]:æ#x·nÚÁ¼o~ kO6e•8N‚C‚è‘–ÒdÛÛþpC}8yáœùæ³¹TVTÑo`_¦ßu-aá¡<ûò n¼ìwææDu¡k§_^N^·jo¿ü>9óè–’È÷M§ß  þðÇÛÙ²q»w4üqár¾þä{JKʱZ- ’Éw\ƒ-ÈÆcO?ÀuSn÷ û?ô§?Ô‡“¿ûb>s¿YDuU5½úôäòk§Ö;µ©®ü´÷}?:̧»³©t:±êõŒŒæÊôD˜M<;z(7/XF±Ýá×î?[wãÒ4r«k¨vºÐ+ }"B¹£o’ƒƒ¸op&Ëró©¨ó}B~CF)!A8=ÞÙ²‹ŸRæ¨Ã ªÄXÍô¥¦™ÊÍiÛXŒÕ7Ìkµ´PžžÙ«>œ¼­¤ŒÿíÚÇÊjT ÆjaÆéƒ0ét­öÛ^·öK¯'/:˜Ë7Y‡¨t:éÆM}{f2ò·3Ncú‚eÖ6üH)»¢’s¾˜À˜„Xž1€ ¿^ˆÝíöéÃÓÄÄ×ôN­'¯/,æí-»È­ª!)ØÆý{Ó/2œßêË–â2ö”Uø´ Ô5:‘Ò2£yôʼn -_ÃìÝ%T”5œg{Mým4éë ¥{<Î:÷±Íq¹|àd0¶íž©ªpPx¸ªõ O€éœîN>VIaM}•éöºîîa¬[qˆ’†Jäϳ¢(Mm¯5nÛ¸²ÛíÁåôÿÁ™§Q¥ßŽ^ߎ¸ý£üÂÉÇ=1•ƒY¥|3sk»ö­(pã½#ØøK.¥E ç¹[0®»{èqW!„B!„BˆSQª¡'•žJ»¼%KïûMƒy¹ì_lrl`¯s7ÝôÉè=.­ùï·ƒÔ zÒ¹2øÆ[Ï®Ùy±ìŸí×xëYìsf‘ï>ì·~²m %žbþý/Ò }ˆÔER­U³Õ±™+g³Ò¾< Ç›åܡ{Çg™À“QÏpö¡qÔj¾ÏF]Ç$'}ž;B1¡F÷Â8ø*ô½& 9í8–ü+`û÷Té'tp7Ÿ"U¬hGÚe~C}ÀØ}p Že¯á);„žŒiìïÑ% À<þAܹñì XÛ&ÇhÁréËèâ2ñTäQûñíx*üïIãé·xÃÉî:Ë^ǵo9ZM)è ¨Áqèbû ÕÕ4ÑCÇÕ­x <.<å9hŽ*Põèâúbû{Ôˆî˜Ïz×Þ%hµ¾2›Îù¿úp²sÇ<\[¾ÆSUˆ¢7¡„%a9ÿIPÿì¯1ëTºÉûºz6TÜü¶Æ! ¯íþ9ÿNeý»úp²sÇ<œ›¾@sT KˆiÔm(–p,—ü‹ê®B«,heoB!„B!„B!„§¦S" f³‰Ç¸ÃgY~AŸ|=Ÿ¼üÂNí{ñ¼ŸHïã}À\^VÁÚ_6¶¸}ÿA}˜ÿÝbf½ÿ™ÏºÂü"¶ll¾¢ïƒßÕfÁnwðà³qÝ¿mV­XÛÞChÕÉ0æ•KW5Yýwûÿ‡Èq 1\uýT¾ÿr{â…úu»wd±nõFþóÉ«„„3ýÎkyvÆ‹­ö2‹Ž‰dú×°tÑ ài<o`¬´¤Œûn”Yß¼MTL$W^?•'ýG“ûÙ¹u7«W®¯ÿ{Óú­TVVñàcw“Ü=‰Ì}|®uÏôL8w 3ßû”ן·~ÝîYÌûæ¬úƒ¡õ¢ö¾aWY9›UàÝVRÆšüb^7œp“‘ú¦ñü:ÿÜχý?S–çp ¢šÎƒQ§2".šr}¶éÀ‚¹ÌÞå;)Ca­­ÅÍ…;Ò¶±Å‡òèæ YVÔ9YWXÜì¶1V3W¥{ú+ó xtÅ:ÜB½{Ê+qy4Ú‘™l“X«…+Ó½3ÍÏÉ>Ä3k67ôYVÁú‚þ}΄ ÜØ7çÖ6|¦h@Û{ï7«Óã©_Þœ(‹™›úöà§œ|žøy}}ˆ¹ÔQÇ?­æ£sÇe1qe¯î<µÚw6ô@]£EU~÷ØhŸpòî­…,øb'Ù»K°×:±X tëîJ½ó↠/̺„ØÄ`¶¬Éã™¶{,[Öæ±oG1•ênÌ=1 Á¸œþaØ®`0êtzbýßÛ7äóößWR”_…^¯›BßÁ±Ø‚M­îkñ·»YðÅN4 .žÖŸgzøF“Žg¦0ç“†ÏØÆç9%-‚¿½;¹ÍcnÜöýE×Ö_çå öñÆÓþ?Ðk®m ®o[õÏÈ Ýëÿ^óÓf¿¹ž’Âjº÷ŠàæO'±»·úÆä«û1÷“8›¹G>oKæì!8ÔÄ”ëú3ll2Ðpžç~ÚpžÏ»¢/ªªÔÿýÃ7»™óÉ6Eaèèn\qëàN8Z!„B!„B!ºN”Î;il¹Çû½õÓPn™ÀCápÝá+)s{CzEO˜F‘Û²ß`5˜’–ù,ÛãÜÍŸŠeWÝÎvii0Ø.൲—ýÖGê¢ènð>;8×ê[ÍÔ¨mËhËXÞ)“7Ë_ ØñjhÔiÞ‰)]4„‡Z]ýòæê½ }÷Q8·Ï©_¯ÆônÜnüûÂg|w¿Îû3ÐyeóX°ykS»*žoy{½÷ë}Üyà)oyÛ@RCâ1½ç–¯±ÏûKý:OÁ.ÜÖ`›6Å‚iämØç?yâ'„B!„B!„Bq©]=€F·Ç7|ɸQC1Úõ‡ÿþ˜ÇîŠ×žÿ7·^}/åÇTÕÿLôúS;ËÎã1šŒ8.žúµúpòQöZ;ŸÍú€£Ok×¾ç»ÇÒLÏèé³î¬Iã¨sÔñþ›³üÚºÝnh¢JmSÚû>ê,‹Jø~ß!&&'¢oZkÍÁªjòk¼UflV¿õeŽ:2"Â1Ú5®Ž´mì£Y<±r=olÞÁm‹–S~d¿M9züMãŸë¶ú~;ÓÄ”TEÁåÑøÏ¶=~ë÷WV1og''´ëµäœäŒ:§Çà ë·úUX¶»Ü|¾7€áÇTü†À]£eð¨¤úà)À/‹÷3ãwsY6?‹CûÊ(:\ÍÁ}e¬X¸ÕKtêXþûÒjf½¹Žogmeþç;øú£-¼óÜJÞûתNí·­tzÕ'Àj¯uR˜W‰ËéÁ^ëbÿžæ|²OßÝÐê¾öl+"{w û÷”ðÖ³+p7 Χö‰ì”ñŸ*ι¸wýë¢üj^žñ¹ʱ׺ر©€×žjø±Up¨‰žÍŸ¯â‚j óªÈÚQÌ[îsžm7xdCø¼•šÙ77NÐj¼×OßÅÚâ¾OOéú1+aI>ë “¼/\+Þ:ÑCÀv= ‚æ„Ê×ðÎ>ÜõÈiõœày€õ碂ÇEÝJÿså)Ù‡sÛwÞmûLõÔþ½B!„B!„B!Ds~3OAìOüíe,3Ñ‘á êׇ¡ƒûÑ¿o:᡼õþ'¸ÜW‰qÉ–«6öɇ_1|Ôiôè™ÂÌoÞæ«¿çû¯pè˜j«Ç<´ýë9_-8î±SmÌýyCÑY»³ÉÏkº‚öò%¿0y깘Í&zõIm²ó©bÐiýضiÅ…%Mn“½×0 %,<´>tÞšÚšZŠ‹JˆŽ‰$,Ü÷Ázï¾iìݵšêÚã~½ö¼:ÓO¹ù\˜Ú ‹^GÏÐvs®l=—ôLaD\4±V3a&#µ.79U5õÁT“ÎfñOwg3,6Š!A|4i_g`Nv‡ªª[SGÚkINó?¤hìhEà¥åÖÚÛÝÏñêéí7«¼’üš¦ï«•y…LîÑ ³NGZh;Úx?·dà‘ãÝVRF±½éªÙU„™Œ„™Œõ¡dì5:2Çùüýñ¿×£yNL½+üóˉOnz‚´¾QÌ\:ÍgÙË^ÊÊEÙØkœìßSJJš÷<2‰|x1‹¿ÝÍÏ‹÷S[y\cª­vRSU?®°ÈÎøñÙ‰Õ‘óÜwHÃ=Y]áà¼+2|¶UŽ™Œ ±{;6´:¦–ÎsH˜™ÐKýßëWjuB!„B!„Bœê¼ßµiG’?ÛWð‹}%™Æþ¼UþºÏ6-©òT1òài„¨¡t7ôà<Û\l›Ê9ÖsIÔ'qkþÔiÍO” ÐMŸÌ±ï®†³Û¹‹Å5¹]˜.¬þõ³%Oû¬ÛìØÈÝwðuâBÕ0. º‚ Žõ?Þöêª~ÓUT¾p:Š95¢;†¾çcè1úÞ±„%Q3ëp·|ÚÜWyJt:jH<îÜMè ˜½ßËê»ÂÁ (!ñÞíËʺ¤!¸ó6£U7]EÚSœåmo G±„£Õ–v¸mcºØ ŒC¯C±„áÞ¿ŠÚ¯DsÖ´xÌÎu³Ðw?52Ûô/pnüçÖoñ”vîįŠ)àËÑw…j GsÖà)=X–Vô&Ÿ6ºØ¾¸ w£Õ4ýL¹³Õ­ãPP ù&”Ü®ýmhØÂ#,}ˆ8R‰¹ä~píëø8VÇvîi6¤îÊú Cÿ‹Q ft1é¸oëxÇB!„B!„B!„'™ßL@ù¨ÚZ;åqàP;vïㆫ¦˰!ýY¹ºõʆ'ªkyô¾¿òàcwÁõ·^Éõ·^É– ÛùøÃ/Y²p¹_\€¨oſʊ*JŠOìÁ§Ú˜#£#š '{×5„š"£":}Léèñ<­?mú¾ÕíCBƒÛPof£É·yD¤÷Ç ùM?ì?UåU7üØ Êbbg£ß(t âc†m1û´1ét„5:?J¿'Y•_Äã+×sÿL"Í&®ëÓ“ëúôdKq)ŸìÎfiN¾_ÕÞ@´=^‘fïò>?ž~ók›ï÷p£àr¤Åþ¿#9Ž~½×t`TK.;¯Õ탟€rW\£ŽˆŒm¨^átº9|èøB¶¿/ÍXÂ/[fM æªÛ‡pÕíCع©€ofmaÝòö‡[kjî!£Ébƒß £Y-¨á34¥W)½Zþo³5ØØâúÆš;ÏA!¾?Î*/9q“1!„B!„BÑUj<Þç !ª7Û„¨ “ÖÖj-‡4%«?­ IDAT+<ålrl`“c?Õ.áÅèWékÌdjÐeÌ®œÙl»d} oÄþ›h]4ÙÎ}ÜSp'5Íôu´â0€Q1Q§ùN4Z£Õ°¨f!Sƒ.c°yH§o[uU¿MÑì¸s7áÎÝ„kïR,S_BÛãÀ©Ô­›>˽ %¼ñßõG‚ËZE^ÀÇÔV•o‚ú„ýt1ùMwNÓÛkÞ¹ƒQÚ^Þ°³.©áu ½¯´Êæ'~ö4:G·B!„B!„B!„øµù͔۵7›9y$'ÆÓ+5å¤ (,[ü3¿,[ÃY“Æ1åòóé7(£þû³2ãágÙ³3Ë·Ñ‘ç‡ZÜN¥1×ÏHÞÆ~»êœŠ¢¨xÜÜm¨n0¶ïÉlsççèb—ÓÕ®ýì ªZÿºñÌõ ðçÓm1ãp»y{Ë.–æäSbw`Ô©$ج<=ê4b¬æ&öêµ,7Ÿ_2¡[<¥v£_dxýÿöWTñ—_6°§¼é hGÚ£Çnlt>Úªñ-£4•Ön±ß£;i_q´8«GÓp·a§M—}ÅUçùUWOo@µ¦º!¤ªÓ©˜ÌÞ&y<öZ§Ïö.§ï†òTðÈôo¹èÚ~Œ;? ‹­ás´÷€z˜Àº‡xá±q»Úþc£Æ¿Kjï{ådt¼çY¯?ŽÏwÛïÙæÎó±§\ohÿ8„B!„B!„8Õ¹½ü†¶ø ÓyƒŒ.ÍE™§í“¯¨]ÆfÇFú›rºyT³åD}R}8y¿3›; n¡ØÝü„¸+1‡ª!ºý')ÎsyŽÑºhŸåy¼-éª~[ãÚ·¢¾Â±®ûHT@¹$54}ú´ÚRêV}€iÜÐ÷<“ºMŸ¡X#МvŸª´õßÛjð´á¹£®ñ¤ÁÇß¶1WöJtñýPLÁX§¾Hí÷OàÚµ°Õݹö,¡jß ½'bx©÷¼& À’0Oñ>j¿{Oá®ÖÇÕf – Ÿñ†“]?½ŠkÏxª‹QtF”°$¬?ë×Rs ö«];aª}!”VAø?A€ˆ— øð41!ñ‘·5º8P¬Ð‰9~ Ï+ÝÏÏ„B!„B!„B!Zó›(TTTA"ج–®Š§ÓÅÜo1÷›EÄ%Ä2yêD®¼þRR»ñÒ¿ŸaÚ%wRTX\¿}I‘÷‰\pH¡a!”—UȘ›QTXL¯>©Ä%ú?x=*6¾aFé’âæË¯v$¼|¢‚ÏG÷‡ùKùóÃ?!}6î·¥ó|*ŠjT¹ÄÞ0¯°º‡ð÷µ[Xx ·~ÓãawYÕ®Öøàôx˜·?‡yûsˆ³Y¸ {WôêAJHÿ7‚üDQ­#àmÛ«Äá‚[ \7ÇéñàÑ4TEÁfhߊŠìÒ€8[óŸÛq>Ó_£ÆW+Vh=øy´ßŇòøË/Û<ÞcÈkԥŠU¨-6qI!>ÔþÏhŸÏ¹˜¯õ¨VÕ–;ü6ßêòG$òðsÞjY;ŠyâŽÖ«Ï—•ÔòÁË«™õÆ:úgÄ™Ý>.¹>€;dTç]žÁ·³¶¶çPÚÄíö =·v¼ÒÞë{¼ç¹¶º—ÓS^¾`¯þõ§ãt;T”ùVLŽInfK!„B!„B!~=²œ{oUâ8}<‡]þÕT{zpÐu—Ö¾‰jóÝùôÂuáM®·©6ž~™h]4‡\¹£àæÃÉÐöˆ×'6PÖ)zìx;ûx›ÓUý¶…VU€bi¡,m;yŠ¼Ç«„$ ‹ï‡’€sÃÇ8wÎÇ4ö÷èÓ'à:° OÉ>Ÿ™%=ÕE¨ôƹsöïm_¿hÛ˜ûàZ ŸÁrÉ ¨‘©X&?Mí÷*®óÛÐØ‰sÛw8·}‡’€¡ÿ §]ƒÙëoPýþ•hUþ÷ìñÐÅöFLÀ>ÿ¯8·Ï­_§¹h;ÑꪛüJ_+Ï…¸LÔèô€Œ¥#?CÙÿAø³ O†ˆç¡ø6Ð|ç9ŹùÈ Ìg@í‚3¾£÷•r$pßõHµp­ºåÏ0!„B!„B!„BˆSÕo¾ \d„÷ÁwM­½•-;fìY£¸ú†K‰K8¾ æáÜ|Þyå¿ÜvÍ}¸\.‚C‚8oÊÙ>ÛlZ· ðÎ}î…guxÌu2yózo¿={u'.!¦ÉmFŸy:öZ;»wd5¹ €Ãá‘ÝbiȽ#mÛãèñ=}0&SÓ³~wf¿}2{Ùáýuô}(£Ž„×ÝšFV£j·áfSýë= Û®®åß[wsÇ+py4‚&¥$ujÛ1‰±\•Þ£Å0ÀöïLýia!ÇR.>îÔ®v›LlLl3“Kœqä}mw¹ÙSÞôµ°7 t¶%$}´ßÓb¢0é3s|G®ogÛ¹)ßçï+näWM¶-ö†ªí‘ÑÖŽ«ÍjU鈊mß}Ö^J£@°ÓéfÝòC¼þÔ2î»ê J ¦ë<²s®oU…o¨=&þÄiOÔõÕ4ؽµáÇYCÎH:!aáÊrEùÕõÝ ³å7?¿B!„B!„ø•[ëXƒïwèc-ãüÖëÐ1Ê<€Õö_Ú½ÿd} åžò&×ÿ_ĤR)ó”òû‚;)j%œ °£n{ýë3,£›Ü&ÝЀlg¶ÏòÎ>ÞætU¿m¡†' Õ6}އ»Øû¼U M@Ÿq>ÎísÑ*óTlˆ>e8Ðf®o›ã8VŸ2ô&Ú£#må)Ï¡fö-¸s7¢b9ï¯èÓÛ÷ŒÛS‘‹cùëÔ|tx\(æ ™vh\)Öˆú×î‚öUfví÷ÞgjXú´36¦ãe_/y_úAð]þÛÔm÷‘l¿m'ì0Gï+]TšO¹1}OïûZsÖ¶ûZ´Çĉ¹å–[HJjÿ3¨®j+„B!„B!„Bˆ_ßt@9#=•øØ(öí?Ôiý\sÓe<õÂcÜõÀͼ3ëEBÃBZÜ^¯o>ø²oï~*Ž"ÃÂ}÷³cë®ú í­w_Ï€Á™yÛjcžÿݸÝnt:ÓïºÎo}ž)œ{á„#Û.ÆÕBÕÛ¢oE蘸hbâ¢Û5ŽŽ´m¹ß,Âårʽ܉.@áÊÖ4>Ï÷?ö»õÛÞ÷Q èÿÈ8›…‰)Þ™°Wä`w7„óJUêíÚþþZ¨xº¯¢ŠÊ:oà2´‰yGÚ6vuïTž9„;ôá­ £1šÝö‡ƒÞ§ý:Eᆌ4¿õª¢´h=p—‡Yßö{cÁ\Üš†NQ˜žÙËo} &&'Öoëò4]©¼ ¦¡Bð°#ÿ-hɼý9¸<a&#Ô];ÓººF'ÊšŸRÖ¨ŠòéºóØ‹ç2ò¬î$$‡m%¾[ƒb™|U&:}Óÿ¤(nîLìÆÅ×÷'>9„èø Ò2£¹ò¶ÁôèÝñ üú-¬Á^ÛðÙ}öÅé <=‘¨X½2£¹êö!„G&P«Ó«¼úÙeÜòÿF2xTáQV f‹žðh+.WC¾³*——ÔRÓ(”=áÂ^ ‘Ht\}Äpu·±y}ünOýk‹ÕÀ“oÏÔ–MTœÔ>‘ŒŸÂ÷ µOàg7ôk3pß“ãéÑ;’p3Qq¶€õ#„B!„B!ÄÉ¢Ä]\ˆ½>øFlªï÷`W_C„΂œ[3§]ûgOº±7kí«ýÖgû1Ñ: €??ÎA×Á6í·È]Äf‡70x¾u2Åw‚ÓnúnŒ±Œ`IíbŸuy¼-éª~[£OW_A×}hmÀöë)É 5$CÆ$øŸ|ø%‡䢪*1qѨº¶Í“ÐÞ÷Q \ŸÑ“³‰å¹ùT9]ô ᆌ4¬z=.ƶíöÙ~Oy%‡kj‰³Z¸gP&½ŽuÅ”;ê0êTÂŒF,-„´ÿ1fNÆóØQRN©Ã^UˆµZ¸(5¹¾BóŽ#ÁÞ@µmì¬n 3|‡šŒœÅâCyMn›]QÅ‚¹œ“œÀäÝ2ø.ûUuNRCƒ¹¸g2Ö&/˜“ÃØÄ8"Í&^;œÿnßK^u FŽ«µ™p~M-ÿÛµkz§2)%‹^Ç·Y©rºÈŒ cZFzU¡¢ÎÉ{Û÷4¹€•Õ”:ê7¹£otªÂÞ²Jº‡Ñ-ÈÆ›wÖo_Xkçƒí{˜žÙ‹ z$1(:‚¯²p ²Š{FU%Îfa`T/¬ßŠ[ó Fê(Î:7o>»‚‡ž™P_8cP,ƒš®`¾qU.³Jý–o[˜!g4Ìœ~Å­ƒ¹âÖÁ>Û®fßÎâŽ4ÆÚe8ãœTBÂÌ<üwß*Û7äSZTÓTóvIêJX¤… öbÂ…þ¡ùÆ6¯ÉípMÑ4X»ìcÎ=r¼áf~Î÷x·èx}öy¯ï²YŒ=¯'™Câ 1qÙôA\6Ýÿ‡_9ÙedíÌ=õݬ­Œ;/àPï{´ÿ°xú» ûB!„B!„âdõzÙ+ ‹Nœ>ž×bÞæ­ò×)q—p†e4·†zÃx?Õ.©¥ ðQüÇ,¯]ÆFÇ: Ý…¸4QºhN7äŠà«(q—ðyÕ§~ýN ¹ €ÍŽltl X nr|žżÂK¥/pÈuˆ^Æ^<ñWôŠž O9WÎ ØñvT×ô«`›6×¾å¸s6à©*ô‡mQ躟ŽqЀ7èêÜøyàºu;qíEÓEg n]Ãupíœã¨¯þëÎßîÓT«,Àñó¿1ºCÿ)躆sã§xJ²Ñª‹AoD I@—4˜ÿÏÞ}‡GU¥ÿÞé%eÒ „„z‘ÞD) ¶Õµ"v×^WÙµüì‹u]ÝE\ۊؕҫAJ€Ð[ ém2íþþ˜d˜$$dB@ßÏóð0sî9÷œ{ÏÜ;yæÜ÷ûÂW¼£A([+W%ß?ˆåê÷ÐÄ´Ã<î5Ê?›€§Ð? Þrå¿PÝN\;æãÎÚŠZ–Z7H»ëåUÇ›µåtÏjwÎN<ÅGÑ„%xŠu&ÜA­(­ÅzSíÇõÓ“˜/ÿ'ŠÁŠiÔSAkWc= †/A áOAî• VͱKÙ—`†`½ôiÞ4×^@CŸà·ÉSœ…cݧúÜ„¾ÓXƒçæïP+KÐ&tÅÐïÐèPíÅT®z?ø 8nìØ±¾× 8™3gžÕe…B!„B!„BñûrÎ(?~ÿ-ô³ñþiÜ(ßë™{ùä‹|#‰&>¶ö•1‹KJùô«Ÿ°W[ù4Ør³Ñ®C[ßûœ¬cµæÕh4¤wmÉd¤Ï€^µæ[±d ‹æ- Hß¾eÞýO½ô(ѱQ\xÑ0.¼hX@¾²Ò2_°¯ÙbF[Ï Ñê*Êí¸Ýîfis0L}ûbâ¢9æ|†]8aôÛ^R\Êã÷>CnNÝN{vícùâÕ Öçu¥Çy]}ÛŠ Šë 2®oÙÆöÀÇS¦c0¸nâU$¶Jà/ßZc™Ï?þ–ƒû7¸®Úü÷ÿÎØËG‘Þ¥=O¿òøií§!×Q°è5Æ·Mb|Û$¿t·ªòòºÍì>¾2ø Uå…µ›xePoBôzjÀŠàE¡c¤ “VKŸ:Vó]y4‡E‡²‚Vöd¹vÒª­NSQQGnx}ÃVâ­fºDE0¬e<ÃZÆ×™ÿäöÌÜ{ˆ1mZ’i㥵ß?Nöþ–ĘMŒHjÁÐÄx†&ú×[âpòÄŠõ«°×ºªòþ–<Ú«3áFôìì·½Øáô Pød{&­†kÛ§báî®jÜ÷;÷r°´êÁ¨`öÑ™´iõa^}bw<1€0[-«—œQc€òÏ?íbÄeí‰K¬ù!2€Ä䆯8^_ýwÝú&f¬¹ÞÖálZÓøû]‹z¶?cS63?ßÖèújóõ¿Ò­o‹Zû*XÇ[Ý™ì_Õ£òƤÅÜñÄÎ’TgÞÄÖÁ›©¿¨ÀÎkOüÌ#/¯õ³$„B!„B!ÄïÍVÇ&ç¿Ì£‘OnèÄ›1ÿò۾ǹ‡góƒ[ëÛ¦oGš¾0±Æ}ç¸sx$÷J<%Ûº{ÐÅØŸ[.¯µ}ùî{1®ÌEèÚUÅ“PÖ±ê}­CŸ›ÐØZbú@u8Ö}Чà@ÐÊÖF­,¥üÛ°Þ8 ÅyÜdʦÝ®ãÏ(4ñQô&t­û׺×v,¨Wõk˜ûì§0_ö&Š1Ó…mPq÷¡ ”O»ã ¿ kÓ´ÞÉãÕÊR\™‹Ñw¼èø*ÔjÝ; "O ¿¶ç@ !7BÉ”ê ÿˆxŒýÀÐËû¯©U®x%4}NjХ G—æORíÅT|÷jiN“µ!++‹NªÆ¤©ÿD¹ÍUV!„B!„B!„¿/çL€òé((,âËïçÖ6™Ä„8la¡huZìöJ²sóÈØµ—õ¿nÅ^ÙtÁÉï¾ö_bãbhÑ2ž_ÏbË¦íµæUU•Çïyš! ¤s·ŽDEG`‹ Gõ¨äç¹s/?ÏYʂًñxjôÛøËfþ|Ém\<îBëKj»Âl¡8NJŠKÙ»ûëWÿŠV«ÅívóÚ¿Ÿ£Kô׃·?ɺտ6K›ƒÁívóÜ“Yº`%—^u;·Ãd2’u4‡‹×ðÙ‡_SPÏ•LŸ}ì&Üy-çLL\4ŽÊJöìÚϲE«PU­}€¶>eÛGàýl½÷ÏX0{1—ýi =út%6.ƒÑ@iqû÷dÃ/›)*,np=uq»Ý¼òÌ[,œ³„ñCçn±E†ãq{(*,æð¡£lÿm'kV¬«s? ¹Ž‚eîþÃè4zÄDn4PTéà×Ü|¦eì&³¨æ26+`¼å\‘šL˜(b,& zÊ.ŠNòí•ì/)eíIÖªªò×åë’G§(Q&6£•|{%»‹JøùàQ<Šç¤ÏScÊžìÝÍÄšM$X-ü°ç[óê¾Ê].î_¼†ËS“™”HR¨EÝE%Ìݘ{ºuD¯©=¸~òúߨt,Ÿ±mZ‘‚E§ÃéñPTéäHY9; Šø%;0Ý­ª<¿vKgqiJ"Â1é´d•U°òhÓwì¡ ÒQgÛ~Ú{"‡ƒËÛ&“j #D¯£Âå&³¨˜e‡³Qð¼B¦nÙɃG—’DÏØHbÌf Z ¥'JÊØ›G‘ÿî`öÑ™¶qÕ!îûÓ· Ý–î}IJ 4܈ޠ¥²ÂE^N{väqxQåíåNž¹{6—MèF—Þ DÅZÑêÊŠ+'cs«ïo’¶ç)áïwÌâʉÝèÔ+Ðp#•v¹GJÙº1‹_–ÖþѦ5‡¹vHý&ÅXµpyÙeô=¿5ºÅÛ"³EË顨 ‚ý»òY½h?«~Þ‡ZË÷`0ä-åï·Ïâò›½ç:<ÂDY©ƒÜ£¥üöËQÖ6Áynlÿ6ä<”—9xão‹éÐ5–Áµ¥]§"c¬˜Ì:ìvÇ²ÊØ±9›Õ ÷ãð|vnÉå‘ëg0úÊŽtïŸH\‹P F-e%J‹+9–]ƾ]ù¬_~ðÔ;B!„B!„âñué—ìvfrCغ»aVÌue~ù\>)þ 5p’ÓîÃü=ï ú›ÒÁN¼.JÔv;2Y^±„eßQê)­±N›¶qN)z—_+7ò§ÐkèlèJ˜&ŒOkì«øoÑ{rÕþÞéo0œéz=ұÏúÚÖýÑÆuD ‹GÑP+KðÛk÷2œ[f VÖÜGáÎÞŽžËpí]‰§ø¨ß6Ǧoе‰§ð ª£¬†Ò*•ËßÁ™1C÷+Ѷê‹¢5zÛž¿÷ÁuÞ•‚ƒZ¶vjiö¹Ïaÿ:šèTŒï¤rÉ[Ç7ªT|÷º´áh[tAcF±D€êÁS–'w'®óqfÌÕÓ zOÅ}h#å_¾Ç5h[õF‹b Gu”¡Ú‹PËòðäïõoUå=y{¨˜ñ0h h¬Ñ¨ªµ4}úïṚö‹“UÌËe`èé]%¹ôSP«}LÔrȿ׻’²y ÒAªܹàÜŽ5à æP‰Ç}ÖßqíZ„¾ëåhãÓQô&<ÅY¸v/ÅñË'¨åùA¬0ÐË/¿LBBIIILŸ>7žõe…B!„B!„Bñû¢ÿçç™gžQ¶nÝªäææ*%%%JJJŠ’››«1 Ú²²2ÇãÑ[,½Óé4&FcUU5TUÕˆ¥K—ÎX·®*аwïÞgðpš_jjjs7¡ÁÞýøÕF¿Š¦%}tfÍ7«^Ç{[v0-cOs7眶àòQè5þµi;_íÚ×ÜÍ9ç}6z(‰!^ß°•{ê7ƒ¿â÷çû±Ã‰0yaí&æU „B!„B!DÃ}þùç5¦ÿÑÆv…õ§‰lõ毨øþ!\»—6s‹„B!„B!„B!D]jŠó2dÈ8EQ E)ñxiî&Q+«^G„©ö‡Á„B!„B!„Bˆ Ðè¨\5]R[K‹ Ek@µãÎÙkçBœÛf‚[&ÌB!„B!„B!„^ |‘@a!ÎϘßÜMøÝ¸ðÛ¹Í݄ߕkç,93õHÀ®g77nãÍÛš»B!„B!„B!~ï\•8Ö~„cíGÍÝ!„B!„B!„BqŽÐ4w„B!„B!„B!„B!„B!„B!„B!„ç PB!„B!„B!„B!„B!„B!„B!„BÔ›( !„B!„B!„B!„B!„B!„B!„B!êM×Ü Bœ1±Q¤¤µ&?¯]»›»9Bˆs¢€ª6w+DM,!4…ÒâÊænÊYïz®äúB!„B!„âÜcÓØH5¤‘çÎc¯sOs7çIßùR´qp\kçÂænŽM*""‚öíÛsìØ1233ÏXYñÇe³Ùhß¾=………ìØ±£¹›#„B!„B!„â4H€² ô§ëÇsïc·¤ïݽŸf-ð IDAT/»«ÉÊ6Öÿ¾ÿÖ+SÞúH”…øúlôPC,5n»ôÇ…U:ê,ŸÒ!Љõãß/.ç𾢦hb³úpÞµM5ÿYôŸ—V°töÙwߌˆ¶pÛcýi•b#*ÖÊÔ¬bÑO»¼Ÿ ǵãʉÝñxT>Ÿ²¥s~¬]û´àü±i¤uŠ!<ÂDe¥‹¢|;Y‡ŠÙ´æKfeRiw5x¿Á¬su®:ë÷é\Ö6¹Æm/¬ÝļG‚ÙD!„B!„B!D f&ÎÇ x½`²(7ã°‡PŒ!xJrš»)B4¹•+Wb0xþùçdܘ²âkñâÅ„††2yòd P®ÃÍ7ßÌßþö·€ô]»v1zôèfh‘B!„B!„BTÑ4w„Bˆs‘FQhbA£(ÍÝ”±»Ü;œ~ÿÔS,«ªÕi¸ýñ¤tˆâÅ÷Ç2úÊŽœc‡ý»j {¿D¢b­§½¨X+7?Ø—°¶(3·=ÖŸ0›©Aû˜ð`_þúê…ô–LdŒ­NƒÅj ¡U=ú·dÂ}‹hØ>ƒ-çê\uº×oEM÷Цo®B!„B!„B!„4 IIIh4òh×ÙJúèì'}$„B!„B!DÓ;'WP6™ŒÜrÝå´ˆeÚ×?±mGÝ+ýÅÆDÑ·gR’[ŽÇã!¿ ˆ™{Y±f#åö3Ôrñ{ðÝ—3™5c¾ïý­÷ÜȾ¤ÉË !Î}â¢yn@OLZ-£¿ŸG…ËÝÜMª·w7g0cÏ•9opIm#дÜxßytïŸÈ”—VRp¬¼)š Àè+;’Ö)†ÄÖáä)áõI‹›¬.{¹Ó÷ZQ Fm“Õu6‰ˆ6£hª¢Uµ: ¶(3Å…õûÛ¨ÿ­yYû:óåW{´4 ýLöïÙé^¿S~ÛÁ”ßügªÿ~ìp"LÆ&m¯B!„B!„8»]ò'œÀ ùÏò}é·y4hj9ŸQ–‹èjìN„&‡ZÉ~×~–V,æó’i”z3¬®»±7„M ‹±ÅÂ×a–Ïçãâ°«ÁÛm«Oåó„oêÿº¬?±ÓáÿÛ™-W„^ÅXë8’õ­8ì:ÄâòŸù´äÊ=eÁlrã)t©ÃÐw…¶EWKª«OÁ\»—âÜ0µ²î>"Xt­ æø­$ï6pü˜'ä6½P!ÿ>¨\]ó¾ôÁrÏM4¨vpgc-”}îCMvÍbܸq¼þúëÑ·o_œNç)J‰sÁ!Cx÷Ýw1›ÍtéÒ…òò¦“§çLöÑ´iݻ¿U|ðAn¼ñÆ&«ï÷B®#!„B!„B!ÎŒs.@9ÒεWŽ%!.ú”yEaäùÔ¯WÀ — q1$ÄÅУK:ï}ü%…Å%MÕdñ;ãt8q:œ~ïÏDY!ÄÙâ×aÒþ1XV/ÚGÎÑÆßÐ…^ƒ’Pèz^ .¸´_PÃS"A2êŠÄ%†P˜WÑdõÜ5þ+ßëäÔH^ú`l“Öw¶8°»€œ£¥Ä&„pd‡÷Õ»üùcÒüÞöîz–Ïß*DÆZi•bÃlÑ×XöLöïYs]¿B!„B!„â÷g´u E>yÊ|“cÞ`ˆy˜_šNÑÑÑNGC:—XÇqköMäºsk,EÈU<ù$ªVºk£OáÖð;nÁmÙ(öÔÿw̦fQ,¼û6=½ýÒÓôíH oÇÅֱܞ=‘wv3µ0yÜ«èÚñKS :´qÑÆuDßéÊ?¿µ´æ>âL2ô€Ð[½¯Ë¾¨%8Y°ûÁúg¨vë@1€& ôíÀr9dÕq&Z}f\vÙeØívÂÃÃ6lóçÏ?E)q.°Z­˜Íææn†¨Ã™ì#‡ÃÃáð{/NM®#!„B!„B!ÎŒs&@Y£ÑЧgF ëÉX¿•Ûla¡ôïÝ¢°s÷>6lÞN^~!!V3}zv¥c»ÂÃB;jŸ~õcBqîÚ“‘Çë“Óªq7t¡e3þ÷[s7K4’£ÒÍÓwÎbؘ4<‹~ÊÄíòÔ»|Ë›ïõ¶YüôùVßûÂü öd j{Åé‘ëW!„B!„B4VwcžŠ|´Ô>‰çܲÙ$é’ù©l›+7Sâ)&FËØKiM ]"÷Ú੼Ie;:óXähÐáØÎ”¢wÉsç1Ø<„[Âo#EŸÂ3QÏñPî}A;¶ý®}\zä¢Z·kÐðJôk´7t ñ}ν~ÛŽxÜœüañû|Wú **ƒLC¸7âu-y>úeîÈžˆŠ´v7†3cšˆ$œ[Ä}ä7T{1šXôÆ ë0 Mx ŒƒïÅ>û©ænªøƒÓDCÄK€œPòvÍùÂË•Þ×έPú©7¿¢}'°^®¿¯à䨨X @^^Ó¦Mã¾ûîcܸq ,„B!„B!„Bˆ3êœPîÑ¥#Çô%ÒÀÎÝûi×6ù”å ŠŠù~ÖBì••dìò(Þ¹{?7^})íSÛÐ>µ5½‡SV³B!êrpo!ÿú¿ehµ n÷Ùñ ÕÙFÑ(ètÞéùUUÅå¬Àos(*°3ãÓÓ Vµ†|¯ó²Ë‚Õ¤z9×ÎóÙ@®_!„B!„Bq:"µ‘¼=½¢ç•ü¹Óv7á[­ùç—Ïe~ù\¿`ÜLç.VÙW ‹Ö1ÜraÀ Ë'Üe» ZrÜÙÜ•s+¥žR¶;¶R®–s¿í!›‡ÒÅØ•ß*7åø\ª‹£®#µn¿!lí p¨•L:ö8ŽjŽñºƆ\ xƒ“ß-¬Šžüºô ޹s™ó=Œ=écêÇûª ´¹±\óqėj}ä9–‰kßJÌZ=º´áèR‡6_…ÐAÄË ‰O1|8¡¡¡”””4wó„B!„B!„BñqN(GF„i '¯ y‹V’¹÷øÎz•ýuKF­Û6mÝIûÔ6h4ÂÂB8–W¬&ûi™Ô‚g'ÿ•ÄV |÷ÅL¦¼õÑ)˘-f®¼öRßVɉX¬fÊË*(*,æÈ¡,6¬ÝÄ´¾ªµ¼Ñhà‹‡1døÒ:¶ÅŽË館°„Ì{X¹d-?~3'ˆGÙ|mŽŒŽ ß Þtíщ¶íÚß"kˆE{E%Gg3kÆ<¾žöCõ¹`㮺˜Ò0™ŒdÍaÅâ5Lÿè ò ƒv~·öeÐùýHjÝ“Éȱcùü²rÿ{ÿ ²ŽäÔY¶¡çjÄÅÃ9v8©íÚÊ‘CY,[´š³qóÝ×Ó§OïŠó–ñöä©T”WÔXoÇÎí¹êúqtïÝ[D8%Å%ü¶qŸò-[~Ý~Êc>kðtmÓŠ1‘¤„‡k1aÖé°»Ü.-gÙ‘,¾ÉÜO™ÓUkù›ÓÓèEŒÉD˜Q^£¡°ÒÁ–¼¾Úµ­yµ&Í:-W¤¶f`‹XZ…X±èu”;];œ)+gCNŸíØô²'´ ±òtßî$†Xø~÷ÞÛ²£^ç¬{L$ãR’èÍhÄ­z(¨tp ¤Œ­yÌ;p„#¥å¾ü­†ù—àÿÖüʃGö¹àòQè5þµi;_íÚWc½ƒã—’DûˆpLZ-Yå¬<šÃç;öPPøtC›°P>9( }Îø‘iësòxhéÚëíΕ©­éI¸Ñ@©ÃÉoy|±s[êø FS}ƒuz .lC¯­hÓ.ŠP›EQ(.°“s´„Íkðó»(-®àÃy×b4þyÒµO >[zc@úGo®eÞ·þßõ1 !të›Hç^ñ$&‡c‹¶`2éÐê4Ø+\äå”q ³€/¦n$çHðÐèz^ Ÿ|™ÛŽñÔ³NYÆ`ÔrÁ¥íè=8‰–mlXBôØ+\”ÚÉ=ZƶYÌýf;öŠÚïŽkÇ%×v"*ÎJE™“ÝÛ1ûËílYxÔvžþóÒ –ÎÞ]k=µ•<º-ƒG· Hê®ÙdnÍ­³lCú×Wæ4Îó 9W'h4 ƒG·eÐÈ’S#0šuæU°eýQf¹C{ýïÏ&‹ž‘—µ'­S ­ÚFm¦²ÂEƦl–ÍÝËÚÒ®s,zƒ–Ì­¹üïí_8¸·æ{|-~Iib°†()®dÏö<ÍÜÅúåë}Ü'Hp²B!„B!„¨/ ž‹z‰hm ÿ+þˆ¯K¿àNÛÝu–©k•àÍ•¿2Ür!FÅ„ žjQ„‘ÚHÎ3õàÅù‚“Oø¼d7†ÝL„&‚Ñ–‹k P6*FFY/b˜ùÚ:¡‰À‰“"w»œ;XV±”ïK¿©×ñÇë¸=ü.þ[4•®ý~Ûûšú¡As¼}Ÿ”_R±ˆ\w.1Ú.´Œ¬1@Y§è¸:äÏ\dK’>…}νÌ)›‰‚R¯v6\í}ä>¼ ]ÚpÑ»ü¬ÚøÉ!õ]/Ç4âI<(ûàò:ój“û`¹ò]ÔÒ\J§®l­ï„¾çŸÑµê‰bŽ@­,Á}øWë>Å}¤î õÆ”­‰bÇrÍh"“ñäí¡|ú-¨•þãŠÞ‚¾ç5èÚA‘„b°¢:ÊPíEx ã>ø ޵7¸îS1¸mR_”ÐS8ŠÖ€Z^€ûÈ&¦ŸâxôF¢ët Ú¸(¦0TW%jyžü}x²¶àÜ6OaßnÛ$0tú®W OGÑñgáÚ³Ç/ÿC-ÏošJñãÇ0{öl<ÈÖ­[éÔ©#GŽä›oj¿Çét:nºé&ÆG›6mP…={ö0cÆ ¥î{NcÊ6Æý÷ßÏÀ‰‹‹#""ƒÁ@^^ëׯçÃ?dãÆA¯óꫯ¦[·ntìØ‘ØØXÂÃÃÑjµdee±|ùrÞ{ï=¬û9r$×^{-]ºtÁl6søða.\ÈÔ©SÉËË Èß®];fÏžþÛo ¯\¹’n¸¡Æz»uëÆ„ èÓ§QQQ±~ýzÞÿ}6lØPÏ3Ð0í£¶mÛ2yòd @tt4¬^½š)S¦°}{ÝÏ„4ô<F¶mÛæk÷O?ýgûöí žþy>üðC_z°ú¨9œNÝyç<úè£ 6¬ÆÏ|ß¾}ùì3ïß@W_}5ëÖ­ Ès®õ‘Åba„ \pÁ´iÓ†JKK),,äÀ¬ZµŠ)S¦”B!„B!„âêœP^»a3‡f³3sUÅd2e¿GUš³Ž€ÁÆúË#·Ò®c*×ßò'–/ZÍÖ͵N‡ÛÂxç£É$§´òK !4,„–I-Ðj5µû¦wiÏ3ÿxœ„Äx¿t½^‡Ùb&¾E,åeA PnÎ6¿?ý-bâ¢kÜoH¨Ž´)˜æ™¶iµZž|þ!FŽ9ß/=©uK’&´dÌe#yüÞgê{.éܽ£ßû„q\zåE\0z÷Nü+»2ƒÒN÷\]{󕤶Oñ½oÝ6‰Öm“¸áÖ?ùå»äŠÑDD†óÄýÏÔ}Çý¸þÿü‘Q ½p C.À/þ›ï¾Œ¨®¡×`cÜݵV½ÿ­Õª×Ñ."Œva\Ö6™¿®XÏŽ‚¢Ë÷Kˆ¡CD¸_ZŒÙÄù-šÏäõ[˜µïP@¹0ƒž ëGrXˆ_z¨AO¨AObˆ¢ÔÀÚ˜²'{»ˆ0®ëÂò#Ùl«#È_«(<Ø£—œtßС%Þb&Þb¦O\4eNW­AƧC«(]·wnÏuRüÒ"LF†$Æ381ž77nåûÝʫδvc¸ç©!DÇNIo%:ÞJÇîñ,ž™´:Ï›Æmõ¯u»É¬#19œÄäp>ŸÒ4ð caÒ›#Ihæ—n 1` 1ß2Œ.ç%°ð‡PG€r›öQ¾×z›–ý[Ò£K>xm5 fìl²öŸ‹z®Â"L<üâù¤uŠñK‰áü1i »(•iï®gÖ—Û|Û"£-\sGO¿üz½–Þƒ“è=8É/½sïžxcýù;¿ tƒIÇÝ“Ògh²_~[¤™ž[Òs`K–ÏÛÿ_\ê‘ c!„B!„B|7‡ßJS?6T®ã_…o5zÝŒ=ØîØæœ ÐËxž/ØwqÅ¢€².ÕÅŠŠeŒµ^ê d>YgC^ˆ~…ºD¿t=z,: ºÊ- "ÑÆP¡Vï °QQùž†‹­cI7t ØnÕXy;æßt1vóKï`èHCÇ€üg‚6ÑÛwöö '¨¥ÞI,sí+oŸ ±x¿õ”dl3¾CŸ ~iŠ%òøŠÏçcÿù8­y<º1ek¢¬˜/{ Md2jI6ßÞœlÇrõûh¢Úø§›ÂPLahl­P4š& PÖ¶ˆ6Þÿ3§„Æ¢k?]» °Ï{ç–À ¾½Ó%¯ k3 ] 7£ om ÚKql Ê–лÁ<Öûºø5¨\]s>][пTÊ>ÕÙdM ¤Ñbý úŽþôšÈd ‘7 ï<ŽŠï8­à÷SINN¦C‡;vŒ_~ù€9sæœ2@9$$„>úˆ=zø¥wêÔ‰NïQÁ*ÛXÆ £k×®~iñññŒ3†‹.ºˆ'Ÿ|’¯¾ªÿõ[O<ñ¡¡¡éIII\{íµ\rÉ%ÜtÓMlÚ´) V«eòäÉŒ7Î/=%%…””®ºê*n»í¶& ~ôÑG¹óNÿ¢££5j#GŽä™gžáÓO? z½í£Ë/÷Ÿ¼"&&†K.¹„‹/¾˜G}”3f”iÎó|.:>Z¼x±/@yÀ€|ñÅûíÓ§¥¥¥AÎçbÙl6¾øâ RSSýÒÃÃà '99­V+ÊB!„B!„BTsN(—”–“±koÐ÷›ÞÞûcbî±|ŠŠƒ¿‚â ±ñþÁ,q 1uGÞtÇŸINi…ÓádêÛŸ°jù/æ¡7艋¡}z*åe5¯4Û¶]ÞxïE,V3·‡y3±|ñjŽ:Š¢h°E„Ó¹[‡ g6k›ÏÄ»ussü™=™û(.,ÁétB›ÔäËÞ~ÿM¾€Û³óã7s().¥s·t&Þ}¶ˆp^yû&\ùr³çD~]÷ß}9“£‡²PU•^}»só]×a ±òÄÿ=ÈÄ?ÝP¦±çjêÛŸðõg3èÑ»+/¿ý4ß~þ¼û)ýŸÇ¤fÐùýiÓ6™½»«fž¿nâU¾àä k73õí9|ð(­’¹ëÁ‰tîÞ‘ûÿz[6mcWFí™ ½ƒañ¡,¾Þµ§‹NGÿ„®n׆H“‘Wõæ–ùËɳW”ûpë.\ªÊ‘²rÊœ.tŠB‡ÈpîìÒž¤ÐìщåG²)vø®ßÔ1•ä°œïoÙÉê¬\ +è5b-&ÚG„S^ËD )[]¬Å"€8‹¹Îå‰Ò|ÁÉÛò ùbç^””¡b-fžé×£V{Êzê¶Îí|ÁÉ áÇ=‡(q:éeãæô4lF/ ìÅÄùËÉ­°ûÊí+.aÄwsÜ"ާúvà’`w»ýêð¨‚×¶Oñ'oÌÍcê–)-§e¨•;»´§sT÷uOgK^!™…Å~eƒÕGgRj§&½5½¾î>Ü·+Ÿâªól/¯úlŒº·x<§Ã}rq\.ÿ‡£ô†ú}fJ‹+ÉÍ*=uÆ3`âÃý‚“O–Ÿ[î[eº¡®¿ç<6¬…QVoàáŠÞÁ¡:òØUïïÛfÅŒY1S¡Ž‡æ¹½cgÑÚÀß'E>í Nþ¡ô{f–ýH©ZB{}G® ½–v†öõjkc)Æ41iz\ƒ.m8ªÓNå’7ƒ¶OiÎñzBA«wíQ¤Š%õx™ }nò»®£rù»x ¡‰HÂ8ä>´-ºb:ÿÜG6áÉÙ´²5¶Ñ†ùŠ·ÑÆwÂS|”Š/ïÀSœÏÐïVop²ÛAåòãÚ»µ¼tz4¡ñhã: :Êk¨¡ñ+ß OÑaÔÊRÐèÐÆ§cršÈÖ˜.x×î%¨þ“*G<é NvfÌŵå<¥¹(:#Š­%拟MðÇ荒\!7{_—}e_Öž×PmžP{à¼MÊ8è/¾àdgÆ\œ›¿C­,FۢƷ£˜#0_ö&eŸ\ƒZ’sн5ÌÈ‘#X¸p!Ç÷úá‡fàÀ˜L&ìv{@¹_|Ñ`üÕW_ñÝwßQRRBzz:&L cÇÚ'FhLÙÆzë­·p¹\8p€’’ôz=]»vå±Ç£mÛ¶<ûì³ÌŸ?ŸÂÂÚǦOל9s˜>}:yyyX­Vz÷îͽ÷ÞKhh(¯¾ú*#GŽD=iløÑGõdþøã|þùçÓ³gOî¿ÿ~"##™:u*cÆŒ!+«êÞ±k×.ÒÓÓo¿ù¦÷>Ü«W/**ü¿_ÜîÀqµ;î¸Ãœ¼zõj^}õU8@›6mxüñÇéÙ³'O=õ6lð­N,í#§ÓÉôéÓ™;w.ÅÅŤ§§óÀÀ?þñvìØAF†ÿ3§{ž£±}ÔœN§222ÈÊÊ">>žÖ ¼zõê€c>ûèÞ{ï%55‡ÃÁk¯½ÆâÅ‹ÉÏÏÇ`0@—.](-=;ž3B!„B!„âlqN(7…äV-èÑÅ;@2oñÊ&­kÑÜe´ëàP/*,fýšÀT«ëÒÝûCé¼™‹˜þ±ÿ̶¹ÙÇØ²©ö}ùû=X¬fìöJ¹óïlÚ°% ÏÚ•ëz§t6´yÕÒµ5®¤»}Kà r|‹X®¹Á;ë¬ïçóÒSoø¶íÊØÃ†_6ñáWïÊÄ»®ã•g?#üÙbÍŠõü†ùŽøåéÀüGø|§p\n…­yµÆ6¦lu‹%Íæ ²,v8Ù¸RÀ ±×´óë®:šÃ¤•pW¸Í,*ÁåQi@Ìd½ÄYÌ\ÝÎ;Kýì}‡xyÝoUu³1'ŸÿŽH˜AÏ„ôT&¯¯º©€Ãíý Vo«Óãñ¥×&Úlâæô4–Îæ©Õ}AÌ•^ö ÓF %Úläê´Ö¼ð‹ÿÃQÁê£3E£QøËßù'ïÚšËüïv°oW>ö 'f³žVm#‚Rï_5+óÓ/#.Ñ;3ù–uGyù‘ nË–õGÙ›‘GIq%ŽJ7&³ŽØ¡¸œgÇ€°Þ ¥{¿ª•<¶ÿšÍÔ¬âXv):†¸Ä0Ò{Äa 5žr_‹~ÚÅüïv ª0þÆ.ôæ l5µô–Ì쯪¾‹«ŸçäÔH^ú`l½Û\½ìÇ ¯óõóŠù{ùÏ‹+ê]6ý{ºr®n뜼kk.Óÿ½ž‚¼ :÷JàÆûÎóÆ_ÿ—Þü²äΓ>_›²yáyÜx_F\æ} pÁ÷;øð͵Ü=i Gxï‡Imm¬˜ï-Ó¹wý‡·öícݲ|>e#ù¹e´N‹ä–Gú‘ØÚ»ÚÈØ?wfÎWõ !„B!„Bqº4h˜õ4:EÇkù“9ænød¾¡šP~n¹Ü/-Ó¹‹§ó&±Ó±# ÿ‰Þ"÷7ïžÆÞÜ6€Ç"žàú¬«)t{ƒ)uŠ›Ææ×®'"ÿ†EcŮڹ/ç.6V®Æ·Ú^ÿqáÃnFƒ†#®#Ì)›UcžŽª`©a–áÌ.›§Øã”Ô¤ñŸè5Mߎ–Qü¯ø#þYX5·Ó±ƒYe?²¬ÕôоÞmn(ÅJÈ=þQžc™TÌ~ª^ºõ¥–:R4Öh<ÅÞtopp7*—½ûð¯Þ,¡ÞU©OäPBb1ö¿×®ETüø¸ougwy>_ÿŸh¤ IDATëÄoQBb0ôºû짃R¶&JH –+ÞFŠ'?ßü¥Æàd¨ZÚ¹}ŽuÿóÛæ.Éi’•uOpí ü½Þµ{)žü}XoþtFt­àÜ>Û·]Û¾*àvÓר¼ì¿ƒìípѳ@Ó(›†€Õ;DLÅ|(~½îüº$ïÿî£à)ª;o0iÂ0ô¾ç–°Ïý?ß6OÎNÜÖa½ñ3SÆþ·cŸ÷|Pë5Ê{ïX¼x±/mÇŽ¾@ÂAƒ±`ÿ¸K‡3f S§Nåå—«úwÛ¶m|÷Ýwlݺ½>ðžÓ˜²ÁPý8OX°`»wïfîܹF†Zã*»õÛo¿±|yÕwÙºuë(..æ¹çž#%%…îÝ»û­›˜˜ÈĉÞﮯ¿þšÇÜ·mÛ¶m¬^½šŸ~ú ›ÍÆ}÷ÝÇ“O>éÛ®ª*••Þ ‹]®ª 8‡/½6qqqÜÿýÌ›7{î¹Ç|™——ÇM7ÝÄ‚ ˆ‹‹câĉ<òÈ#§{JjÔØ>zçwxûí·}ï·mÛÆòåË™5káááÜÿýÜu×]¾í9Ïј>jn§ÛG‹/æšk®aðàÁhµZ¿ ^­VK÷îމݗ-[æWî\í£^½z0cÆ Þÿ}¿mYYY«D !„B!„B!@ÓÜ h‘á\wåX¶fd²mÇî&­ïÓÿ~Éßzw_ÿ/·ýùŠNZód…Þ‘³ô®í ·Õ½¢bu©íSèÜÍtýÑ>«1з©œkm9f8­—ËÅÿþ4`ûþ=™ûãB.¼x:Ýï;–áœ%¾×:¥ùm ö¹*.ô®Vió¥åË $ÌêK1æ| FN§‹×_|ל|‚½ÂÎ7Ó ï ^uÖÙÐk°©l:–Ϭ½‡™”ˆN£œ¢D•ƒ¥ed—{g¹naµl/¬ôÎÚß1ÒF˜¡a¿)[Ý´Œ=<µj#ÿù-ƒÛ® ¨2p%N¿GUymÃV¿€ß¦42¹EÁåQùp[fÀöý%¥ÌÝ€ “Z4¨ê2"©­§Ç÷¬°lw¹ùv÷>úÄ® ¬>:Sz hé <X³h?ÏüeËçíáÐÞBŽe•qpo!+ìå—¥š´-ÿûç/LŸ²Ÿ¦oeÞ·ü0m ïO^ÅGo®mÒzëK«Ó ©ö9³W8É=Z‚ËéÁ^ábf>³¿ÚÎ×üzÊ}en;ƾ]ùìÏÌç½WVâ®8ŸÒ!ªIÚ®jȹ~I;ßëJ»‹ÉÿLÆæ²—°ð‡ü0­êo[”™nýZÔçryp»UÖ-«ú¼ÍzTÊêŸ÷ûÒÂlU(Ž_µ2ʱì2Þ~fGa¯p‘±9‡w_¨z¸,4ÜHÛŽÒÇB!„B!„"x® ½šÎ†.¬²¯dN A·õ¡¢ú­p ÞU’'„Ý‚Ec ÈoÖ˜ï Êà]yù„P÷7çÁËf¥j¼$ÍÐÞ·ñûEÿ©18¹!l#-£˜^ò?ÜÔ<9àzû/py÷{$âq.±Ž'FƒA1§g¸åB†˜‡Pæ)ó+;ÒêÝ¿C­äýâ÷öíÆJSŸ¨àñï#MT Æ>P ãQ§]KEªÃ{üJÈñqEƒ¾Ëx´‰ÝÐ¥_U¿5OÁA_š¾ãhÐÁíľð_€±oÿÎ ½«:žXý7eO¦‰LÆòçÐD§âÎÚJùç·Ôœ  –{?¯Ú„Î(æð:÷}¦x øÚ¬ØZúmÓwô~&qUR¹2ð3y&Xo4 :¡ä]8Õ% 9~Z=gx._]Ç‹@рDžcUà¹òäïŹÍ{ïÔu šà=oK÷îÝq:¬Xáˆ~"@ð‚ .(7v¬w²ÚÊÊJ¿@ÐÜnwÀJÀÁ(Û”öîÝË‘#Þ‰½“’’ÎX½ßÿ½ïù…Î;ûm?~•j‰Ý{yò¶mÎ /7¿Æ]ìÛí}àÃŽ-"Ü(_“†\ƒMiÙ‘l.Ii…Y§¥mx;Nj³U¯ã²¶Éô!ÎbÂf4Párs¸´Ü˜jÔÎJþõ®}œM›°¦Ê{0{ßa•–ä fÙ“-9\ûCÕX8£ ˆÜ {ƒë9]£¼õî)*!»¼¢Æ<«Žæ2¶M+LZ-©áadÔñ¹ª¯nÇw[~!yöšgåÝW\ €ÍhÀf4ø‚’!¸}t&têï÷þËÿnDõœù‡Δ×>OBRÍ“s¤¦GóÙÒýÒÞ~v)«îÀ^îdfÉ©ÞÏHþ-yõÓñ,úi«í'çHÉiµ©¢ÌIÎáR_»lQÁ{¬¹4æ<×¥®s¥7hý–7¬á"ëX ЇZÉ̲kÍçÁÃßý•ÅN!LÎSQÏÖš·Äã?nC:»œ»(÷4Ïïýje)%oôC1…¡‰l>ýbô]Æ£k?³­%åÓowíÒ6¨®¢Ã(1íЄ%à>²m‹®(&ïﲺ֨Ļ‚´–àÍ_Xõ;«¶eOÜGC-«y5oOÞoysŠ9µ¢ Ñe«ÓÆuÄÐûz³ ÷þµTÌxÕY^ç1;7LG׺š¨¬¿Ã¹ékœ[ÂSд“·(ÆôݯB×zJXKª³OÁA_°´¢3ú•ÑÆy?“îÜ]¨å5Ï65Ç:0ôEQS ÿnpí?u¹º™um òøJÌùkoãÛybulwnf­Aê®=ËÐw¢7¡m‡;k[ã+†Ž¢(¬]»–²2ÿ{ÇÒ¥K¹êª«|yª Ÿ¤ÍÈÈ(w*) ¡¡¡\ýõ :”ÄÄD"##)//gÿþýDDxÇØL&Ó)ö<åååäääOd¤ÿó={zï9;vìð}žìçŸæê«¯Æl6“žžÎæÍ_MýDàèÆÉÉ©y¼(3Ó;wdd$‘‘‘¾@Ì`hª>Z·nà]©·C‡¾Õk›ë<ŸËN·V¯^Mvv6qqqŒ1‚U«Vù¶øÜ8p€ü¿ÛÎÕ>úè£ûŒo¾ù†}ûö5wÓ„B!„B!„8ký¡”£##¸åú+ µ’›WÀGÓ¿Ãᜅ³¹­]¹žI>Ç#»‡¨˜Hn¸íjn¸íj¶üº/?ýž% V¬& ë  )).%?ïÌN|®µùDnm·ÞmUƒ6QÑ‘µæû½(+-'"Ò†Éä?Ý\çêD½ÝzufÙæY§ÌZg€òÙâhYÕƒ Ñf#;ª=ßÐ:,„WŸGŒÙÐǨÕb3|½Y›}Œ¿¯ÚÈC=;e2r}‡¶\ß¡-[ò øj×>–ÎXµ7eOWÔñÏÙÑ²šƒ„›Ê‰z³+j¯7«Zàr”ÙÏ œF½Þ>íÉ’+/:eþPƒÞ/@¹9ú¨1¢âªV¾p:Ýd:½ Û?Š>³„§þ9ŠðHï¬ßq‰¡\sGO®¹£';6çðãô-lXq¨Áû-/¯ú Œˆ*µ«ð“ß ×9‡?˹Y¥¨jÕ½ÙeÈsBõ´:7­ÚöAÇ“kHÕ}?9-’ä´º¿_-¡†:· !„B!„BQ_7…ÝL¨&”ŸÊ~`sw£÷Wì)bså¯l®ü•eKx+æÒ ¸<äJ>/ùÌ—¯ÜãC ÓxƒVªƒ{rîôÛW˜¦jÚ µjÌ%Fs¼®bòÝynópË…,ªøÙ·¢sm¶9¶òç£WrSØÍô3 N‡Su’åÎb}#,£‰ÑÆœËH÷7¿Wv£ÛÛXª½÷‘͸lƵ{)æËÿ‰6.C·Ëqlø<(ux ¡‰iç @Ö¥óÖ]YŠ&ª šðxŠŽ  O<ž¿*@Y9¾ª²¶eOB^wʺs˜/ȸ1e«Óµ;¾"­ªR¹öÃS'¸ö­¢â‡G1]øŠ5C߉úNÄ}d3ŽõŸáÚõsÀŠÎÁ ‰JÁrÅ¿PBcýÒ­9¢zŠÿöãËjñÑ ·©¾J¦€æ°= ÚXˆzŽM÷ášó«ÞùÑԱȥ¢m˪×Ápâs¥–Ô>y³§Úy<‘?Î?ß»âøâÅ‹¶-_¾·ÛMtt4ééélݺշ-:ÚÛ†¬¬úM8]]cÊ6Vjj*ü1ññþ$›L&¿à`¥¦Aô&Tq|¼Ùhô¾"&Æû}T[@æÉÛbcckÍ×'öÓ§Ovï>õw·Íf Z€rSöQvvÕwdTTÕ¤ÂÍužÏUé#ÇÃÌ™3™8q"cÆŒá…^ð­Ð=hÐ À{ï9Ù¹ÚGK—.å®»îâ¹çž#66–»ï¾›»ï¾› 6ðá‡2wî܀ʅB!„B!„ø£ûÃ(GÚÂ}ÁÉÇò øï§_SRzêAÃæ²|ÑjÖ,_Ç£‡2éܽ£ïßþ=yæñWÈܱǿÐñ߉Õf R;—Ú웽žõ6×9=“NŸ<àÐ\çJQ¼[·§^?îë AMnbzÆ÷ºú,ÿ ðl¿ĘMTºÝLݲ“¥‡³É·WbÐjhaµðâ€^ÄZjŸUxù‘lÖdå2¼U—¦´¢sT„ïßþâRþoͯdÕüMcÊžŽÇn¨v>ê«úG¬¡ƒ˜¾Üõü˜ëÒ?ßèQUÜõØiMçåL÷Q°¸žßõêÉà n-/« pÕj5MÞ?±<{…ÿd(.§ÿÃFGóÄÄŸ¸ôºÎ ½8³µê~Ö¾k,í»gÃÊC¼ñ·Å¸]õP©ú3Mgú¡Œ¦ÐØó\—Æœ+EQü&ŽÆ}C§;{£û÷} !„B!„Bˆ3çÒñŒµ^ÊX륵æ›ù4“"Ÿæƒâ©ü»ð_õÚ÷ÊŠåüV¹‰.Ænô3 ð P>æöN–^G¤¡Më  t©. =U“W¹4þw²Hm]ÞÕQ”Í«W™lwÿ(x)`ÒÓHm$ׄ^ÀæÊM5–urvM¨íڻҷ±¶uV€rþ>4á-еŽZQ€cí'‡Þ®í0›¿A±D¢:í~«Òú~·U=àqº2mõ‰O¿lu®}«Ð&tF1†b¹ü-*f=…kç‚SîΕ¹„Ò½+Ñ·‰¾ÛÞóÚ¢+æ]ñäí¥bæ$<¹;OÝ®zS0_ò²78ÙUIå²wpeþŒ§,Ek@±µÄ2þu”и€’ª«ÒûBÓ¼“žÚ@A)D¼šHˆü'äÝ ž&v\ÖÆƒbõ =R5æxf›×étôï߀I“&1iÒ¤Zó:Ô/@ùÄ8¾ÓÙð{NcÊ6†¢(¼óÎ;ÄÇÇc·ÛyõÕW™;w.¹¹¹F’’’xï½÷HHH8£í‚ÚŸ‹8qÏ9óÏWxëu»Ýõz¾Â`ÎÄ·MÝG.WÕ}»ú¹jÌy®þZsÏ+œk‚ÑGß~û-'N$::š²téRL&½{÷`É’%5Ö çf-X°€%K–0vìX®½öZzöìéû—™™É<ÀöíÛÏx»„B!„B!„8[ý!”F7\})a¡Vò ŠxÿÓoÎêàäœNÿÏÞ}‡WQ¬ÿžÞÒ{#BhAAz—¢ ‚ˆŠ® ëÅîU¯õZ¯ý§W¯¨WņQi‚ˆ‚( „^ô^Nßß$‡ä„”¡¼ŸçáyNvgvfgv7á̾3?|·Œ¾[FTL$ã&ⲫ'’ØŽÿ{÷Y®™x3ùyµ3€æWÈùø@Iq©ÔÙ‹ü¼’;'[àõ¨ÈèÚÙ9 ¼/¡Úš£Ó!ðÙ—m°eÓ6ªªªÈmdEæºåþ¸x%ßÿïæUúVguäB«­æsrPíüø÷ºÍ,ͬ)Öáv³³¸” çñ_šp¸Ý,ÚŸÅ¢ýYDYL\Ø>Ž)ÉHðã•!ç1}ÉÏäWÙ|ž·¹ m6À¿Ñ€kon7nEA­RaÑ5ï×X¾ÕFeñ¾Âi”¹v_Ý>ª«îjÅ*ŽÌx´ÜåóÄo ¿€Ô'³Z£¨ vj“EGT\Ù›ÿ|÷xFžÄøZ÷1ÕuWÐmÈÃ7z®òÞã¼Xî¾z%…=Û xä¦ã¯_\XÅì×~çÓÿ®§[ŸhÎÚž>Câkp{õc쥩|ÿé–ã©ù\.Ï@Þ㯯4·}ÑÎÍURdÅíVjÚ$,ʯ^š¨XŸ‹ò½ÿYQfgÃêêÕ°wgä{MWUaÇép£ÕU¸ÿ²d/ÿù×ÏÍ®¿B!„B!„-¡WŽŸ¨r\9t‚5ÁÛ®0ì¯ö'JM¶³þ*®uÉpfâTjÇM \ùGò¤ò^n®a¦á¨QcSl¬±þÚâãLö» 5jܸXQµÌc_ž+—:­‰iU'‚Rž €ÊÔȲ´Íäίî_U@ šè®¨bpüù9Ží‹1 þ;Ú”á83ׂJ…»p¯ÇÌ’îŠ|Ôt±} ÖùÞ2,·yërX‡m鳘&¾Œ:4Ó¸§©Z Æ¹­ Aì.Ž­óql: ]· èΙŠ:´æ)ÿ¥âƒËPÊ;m*Md'Ô¡‰Xÿ GÆ5û—%w;н¢Á¯å•’C•†:<Å'ui Û(~‚Ÿm<„¼7‚rL|¬ã¯#Ô`UKNNýŽ^Wª@ï÷¯: 6ØO©ð>&н{÷Æb±4)íàÁƒyã7j~ÎÍÍ¥K—.ÄÆÆ6»ÜÖäm.]º””À<À·ß~[³Ïáp°uëVÊËËOjާ)mS{Ýäå5|ï`š6¹îÑr,XÀwÜÑŒ·Î‰î#omÕšv¶Ûí¸ÝnÔj5þþþ em’æö‘/5ç]#_ôQFF6l ==I“&±råJúôéƒ^¯§²²²Á”O÷>r8Ì;—¹sçÇ¥—^ʵ×^KRRü1cÇŽõXá[!„B!„Bˆ³Ù™?$pñØD„…PYYÅûŸ~CYyÅI¯Ãàý¹bÚ%DÅxòlLö¡ÞyýCnœz'N§ÿ?ÆNé‘fÓú­@õ—ª£Çhu[ëT®ó_ªËí˜Üž¨˜ˆÓ Úk••Ûö4˜Àf«^ÍÑdòðx"òž,¾l+€ÿ¼øwßô0«þ½IåžÛ7ƒ¡õ³÷¶öô•þG‚¹]ŠÂž:«Ýk_öÙå£@ýìŠ*Þݲ“›~ü§[Á_¯cLBÜ Í;(6’ËS:4 QXýbPRP@‹‚” Ž·÷¯,ؘ¿ŽLŠèO¤¹á:8r[.v•4ÜÖ:M ’>Zî9a4¾™u¾5ý{¢mßä97åúž´dLÖf­Ý;4ÜÜÚj5YUUzÂ"›w5—ªN@°Ãábý/yó©UÜyù\ ójƒ]Óû˜þ-/õ jˆnù os´Uÿ6‡ÃîbïöÚ‰UzõÃhò¼ç‡ŽKöøyÛ&ïÑ9Ye<ÿ<ÿ|ýþ&¯évn©„ï5 Žˆ˜“Ó/B!„B!„B >Зޙ=¼þ+9üûTáãôÎìÑäÕ“Š×&Pâ.ñؾÎönª¿lR/Ÿ ýøÝú›Ç¾?m€êIE/°ŒoV}Ž5Ä<€ ¶õXk‹ÓQ—ÄÕÓXZ¹„ÃÇ\o´ý @CᚆÇàÚŠ:8¥ªä8)›ÎUP=†¨ŒA›zŽŒPÊrެØÜmB 6˜¹&oVõä¯Ú„> m^}kòË]’EåœëqÚ*5¦±ÿB›Ò¼1nwé!l¿¼IåÇÓÀíDe @—Öºk¶.•9¤æ³+·y+3;÷WßWê 8´IC}V§–²þ¥ÿWýY×üo©ŸÆ¾\Gn-Ë5œ´7`Ž^Wš°$@亴«ŸcŠ£ªÙ}áÍ!ÕÇœ;w.))) þ»úê«èÕ«—G`ߺuëèÞ½;‘‘Í3oMÞÖ «ù¼uëÖ“Vnkm«Î;{ Ì9²ú½™ÊÊJ¯çUUU;!tS4–;`ÀŒÆæ¿·Ô‰î£aÆõÛªµíœ›[=ÇÑÀÝ–hnù’ÍV=¾k6ŒÕW}ôÑG0fÌÂÂÂ5jË–-Ãj­ÿ÷Ò™ÔGäå—_fÒ¤I8N¹ä’KZ|¶&­ÓÝðÌù•µY½#ÃLS×¢ýY8Ý A=3{vAÓÌh]_õÑÉòÇÏ(®³Šrßáíùç«£é7¢=1ñ„„›‰n@jÏHÆ]ž†FÛðŸ#9µŠÄ¶ââ«»@x´Iiá\vc::…ú¼þy•X«jŸe#/N¡GßXÂ"-$§…sùŒ^‡ù& V£UóŸ¯&sý½ýHïGp˜NƒÑ¤%8ÜŒÓY ¢V6.)¬¢²NPöðñÉô8/–ð(?:wà žo]mտ͵üû5ŸMw>9Œ¤.aDÆú3îò4F_Ò¹fa^%;ä“rWÌßU[®YÇ“³.`Òôî$¥…e!±s(ç K`úç‘Ø¹íÛI!„B!„Bˆ¦bFо묞“Ùº j¯öŸŽEí¹JèåþS ÑT_þP¹ÐcßVûvØ·pSЭô4¤·¨~jÔt×w`Ó‘â–èkìÇ›‘ï`T)tðrÑóõÒ,¬œ 4ü#ä!4øf‚ÓÖÒ& ©YA×upÏŽë.Ün'ê€ht©cp¬ô A¥BßgzuÚü]y[¿¯æ5c~¨›ÞV­ÉÛÅZJå7ã:¸ÔL<‰&¶gÉÕÞÇÐÝ{P¬Õåúr¥j¥²°æ³&ªK³ò:2Ö¬ôkû8º®¡²„¢2ø£‰î†aØÝ ö>þw"T|R¨ `¹ ç“À]@×î„—‡ö1gÆp»@­AßF½ýêÐDt].8’v!¸}3†>hÐ 6mÚ„Ëåjðߟþ‰ÛíF£Ñзoßš¼ß|óM͸ÿO<Ѭñ÷ÖämüüÚ•§»wï~RÊl­ºmÕÐJÆÉÉÉLœ8€yóæy}¿âСÚñ¦£ýÞ˜¯¿þ§ÓIHH>úèÑGééé\~ùå@ý¶jm;oÜX=ÉÀ˜1cšäÛæö‘/eggMttÓ$å«>Z°`èt:¦NÊùçŸÀüùóLºöQcï¿íܹ“ââêwU‚ƒƒ[T'!„B!„B!ÎDÇ_öña4j’Œu°t:Æ#+º]nì‡G¾ÁýÎ 3ë0ûªI{,EQjV³õµckgø àœózð㢟½¦ñ¿Oât:XöÃJ¶mÞAaA1Z­–¨˜.ºt,!¡Õ_rnýËs–]EQxþ‰×xí½ç0šŒ¼ö¿çøqñJ~ýi-‡³rp¹\˜-f“ äí×fûìO·:çÎcÎ_såµ—2ö¢‘˜Ì&¾ûòÊËÊéÚ#•kn¼­VKiIïÿ÷“FõןճxªÕ*þùÔݼÿÖ§¸ÝnbÛEÉ;¯xBòž,¾l«æÈËÉçƒYs¸î–«7i4é½»óÍçóÙ¿÷ …ù…è z¢c"éqNW^zê \u‚}ÕÜ{ЮNíHˆÑÀ/‡r(w8I`Zjf­§[á½­;=Òï*)#»²Š(³‰Û{¦bÐjXŸ[@‰ÍŽ^£&H¯ÇÔÈ â ƒzãp+üxà0q k IDATÛ K(²ÙЪUDšM\”_³Bó¶Âú“4´&o]#ÚÕ|ôœÆòƒ‡L»¯´œ%™‡8?>†qÚá§Ó1ßAÊíý¹¸c<æF~îËbpl¡F/îÇ»9\Q‰^£!ÂlDí%8§²ŠÏvìej§DÆ$ÄbÒjø~ÏÊNÒBƒ¸&5 ­ZE©ÝÁû»<@fYE6;Á=7uë„F­bwq*´𣟅ÿþµ½&}^••Ù»¸6-™ ;ÄÑ3<„y{2É,+§ÐjG¯Ve1Ñ#,„—7lÁ¥xFûªN‡ÝÅ[ÏýÊ}ϯY8µg$©=žQ}ãÚCØSToûÖ ÙôP»jð”Ò™rƒçKeùÙ+Üú‚âVX·*“ç'däþ{®€ñgEù• eo–¸ö…š>>™áãëÍ×õ×¾ |=–¢ÀºU4úÈù¹ÿyÏóÝê£óõ8fõosý´`C.H"9­z"‘n½£éÖ»áþ_ÿW òÖXµdƒÇv$­W~&_Û“É×ÖÑ-k_1{¶µm; !„B!„BÕ+ý9¿T­b£m=y®<œŠ“0M8}ý˜â_hTè*äëò/ëå³øuzGõ!JÍo3«äM ]… 0 ä†Àê ÀŸ«~â/ÛF| O>Á[‘ÿä2ñVä»,©\̪ª•d9³p)N,j?:ê’Ö{]õ9A׋ڀͶ¿štÎ&•‰u ÑÚhRõiŒ4ŸOwCÏšó¼'ÿò]ùõòe;óaéûL¸ŽÁ¦¡¼õsJ?&Ó™‰5‘Ú(4ª`¦ÂrÍ'8÷þ‚+ëOÜåyÕÖ04íû¢ï9¨tulüÚwź¸òw£‰è„J£Ã¾þÓš]Îí‹aØÝ5«ÿºr2<²*e¹ØÖ¼‹¡ÿ tÝ& iwŽ_â.܇RQZ=ê€4qéX—=W8ꃼ^9mT}s'æËf¡OÁ4áE*?™Ž»ø€G2óä×Q\œÛ—àÊÞ‚RQmuv÷Iµç›½¹¥­Z+wîÒ被еF\~G©*•)t^VWuÚ¨úþAL“þ•Þ‚qô#>«Wk”<úÏA@ÞdPjçÉ¥âs0}:X.]rõ6ç^@}ß×É]šýÐ÷™†.m*½Ǧ¹(¶24ÑÝÑ÷½ÔZk)¶Õïø¤ÌÐÐP:uªžàaÓ¦M^ÓUVV²k×.RRR8p K–,ªõfÍšÅÍ7ßÌÈ‘#ùüóÏyÿý÷Ù·o†èèh¯A­­ÉÛdeeËÃ?ŒÉdbõêÕb0 Ád2ù¼ÜÖ8tèï¼ó3fÌ`Ò¤I˜Íf>ûì3JKKIOOçÖ[oE«ÕR\\Ìk¯½æõ8{öì¡  €ÐÐPî¿ÿ~4 Û·W?'''“˜˜È³Ï>[“>;;›×_;)S¦Ð·o_>þøcvïÞM^^ƒ¸¸8z÷îÍ£>ÚèûÍá«>êÖ­}úô¡¸¸˜   † ´iÓÐëõòÿ÷é[ÛÎ_~ù%£G&""‚Ù³góæ›o’™™‰Á` &&¦I×ssûÈ—Ö¯_€Z­æ…^àõ×_ÇívO\\/¿ürMZ_õ‘ÝngöìÙÜyçÜtÓM Š‹‹ùé§ŸLºöÑ|€ÝngþüùlÚ´‰üü|t:111L:µfEê£ÔB!„B!„BˆÓ(@ùþ™×¡×ÕŸwÊ„Ñ5Ÿ·ïÚËìϾõØß¾]õj¥ñ±Ñ<|÷M^_^QÉ3¯¼í£ÚzÊËÉ'¥sÇšŸs³ë@¥V«éÒ½F£>ýÏñšî—Ÿ~cùâ•õ¶glÞν·<Â#ÏÜKXD(#Çe䨡õÒU”WÔûšÌ&4šæ/¦]UiÅårµI}áí×fƨ ‡1t䆎౿¬´œûoŒ¼ÜÆ~öìÜǪk8´/é½»“Þ»vÆÑ’¢ÒFƒŒ›š·µ}ÔZ¾j«æúà­OÑëõ\yí¥Ä¶‹æÖ»¯o0Ýœ¾æÀþ,¯ÇiÎ=è+:µš‹;ÆsqÇxí.EáÙ?6±ûȪâG¹…§Önä¹çâ§ÓqW3VW«T¤†aÔhèÓÈj¾¿ÎeùÁlŸå=V^••ä:«SçVU5’^Z¿…(‹‰n¡Á ‹bh\T£é­Ïü½¹°C]B‚xf€÷gϱÞÙ¼ƒp“‘óãcÅXÏrËìøeùUV¯Çp+ ïlÞÁ½çt%Рçž^]=ö—Úʳ3v¡×¨™Ú)‘X?3·tïLC>Û±—åµ+Ëú²N¦k²xáåÌx ?A^^t9"!)¸Áå¿ßÉù;ëï5olBóWoŠ/ÞÝHóbñ hxb“ØölüÍûs§©bšXÿms˜?gk«ËóæËÿýIób¼ö•¯Î·®¶ìßæp¹^|p9÷<3œ¤. ߃n·ÂG¯ÿÁoË÷û¬\Å­ðòC+˜ñ@zŽo4ml{ß­®!„B!„B!Dk´×u Y—B².¸¶Á4¹®\îÉ»ƒ2wY½}[ì›y¾ðYî y€.ú4^ ÷ $ÞãØÃã Mn±offÞ-ü+ôYÂ5áŒ6e´yl½tåîr¯Êíuj>tfz;M·Íä2ÿ+<¶)(üTµœç Ÿ%וã5ï‹ÿC:˜‹ý&ÑUß'ÃNL S]êö¨Ã“ч{Ÿ4S)Ï¥ê›{Plõû¨5ÜÙ[ÑDtÅsË÷µåYKqîZ޶Ó(PÜ9Ûê嵯~•F¾Ï4ÔAq†Ô_ÀþÇG¸‹2}–×ÅVNå×w`¹æcT¦`Lž§âãià´U'P©QGuE¥3¢mßÏëqœ»Wâܾ´Ie6­bn¬ Á4ñTŒ#ÿѬ쮃ë©üø oEÛ¡hª'Wlå8w­@—:öÈ*ÔJãò!w”¾ AÿMø]eoÕM…w@ðs`è úsªÿh¶_Þ@å.u,Úäáh“‡{ìW¬¥Tͽ¥<×'åõëוJ…Óé$##£Ñ´6l %%…þýû{lùå— á²Ë.£gÏž¼òÊ+M.¿5y[Êívs÷Ýwóî»ïÀOò•íÛ·³téRFŽIß¾}=VK/**òPöå}4{öln¼ñF, P½ò±Ýî}1Ó­4 =zôÀd21xð`¯Ç]¶l ,hv}„B!„B!„8S6Ê-e2·ýl©o¼ø.‘áÄÄE1ïËlÞè}°HQî¿íQ@ש„†ˆâV(,(b׎½üøÃJ–.\ÛÝð ß†ß7qÅø¸`ÂH =¤”D‚üqØ”•–³ww&ëÖü‰F£Áårñâ›ÿ¢[z—fŸ×7>Èkþl“:û‚Ëåâ_<ÏÊ¥¿rÑ¥cIíš‚Ñh ûp.¿¬øOÞû’¢&®Fúø}Ï1ý¦© 5ˆðÈ0ì6{vîççå«Q©T(Š÷Ú¦ämmµ–/Ûª9EaÖÿ½ÏÒ…+˜8åBÒût'"2 ½AOyiû÷`ýï›().mô8͹}eÑþ,´j5éá!ô”Øìü™WÈÇÛv³«¤á—96å1}ñ*.IJ =<”p³‘½ŽJ‡“R»ƒB«ýeå¬=&ÀZQþ±jƒc#I "Ôh$È GA¡ÐjcwI?8̲‡qs-¶&ï±ÞØ´“‘h‹™o÷d²¥ ñk¢ÒédæŠß˜””À¨øXâý-¨T°»¤ŒEû³¸­G*:µ÷Àüç×ýÅÆüBÆuhGb f­‡ÛM‰ÍÁ¡ŠJv•ð{Ný`t—¢ðäÚ¬ÌÊæ¢Äx:bÔjÈ®¨â×ù|º}E6ïƒhG}¿÷%v;“:&€ŸNK•ÓÅ®’R~ÎÊA…ç« ðöæ,;p˜ ‰ñôŠ!ÜdB¯QSnwYVÁú¼JŽÀóelVäïS¾fð˜Žô›Ÿmm0Ⱦµ*+ì¼üÏtîÁ ±II '$܂ѤÅju’Ÿ]ÁöM9¬Yæ›—H„B!„B!„h­,g<@?ã:뻥Bž2¥ŒÝö]¬ªú‰ys)w—{=Ɨ埳۱‹«¦ÓÝГÊÄaça–T.bvé{T)Þ'H]gýƒKgœß™†¢K!P„;eîRö8v³Öú4¸¨?æ­©žüÚ›lWÓ&­PÊ)s—Qæ.eŸc/Ú6ðcÕRö;ö7¯ O>Î’ÊELö›B7Cw‚5!¸%î:°Å¶™ÕÖ_šT—¦p—fa]ðO4íû¡‰LE…J£G±•áÎßs÷Ï86ÏC±yråd c"ν¿â.=ì±Ï¾ñ+´Fá.>€b¯h ·‚mÕpl[„¾çd4íÎEåJc¨®{á>\þ¨^)اy½SÊs±.ú¦‹_B–„aÀMØ~zõÈN…ª¹w MŽ&¦jK*s0(nÜ…¸óvàܾǶE ¸›Uîñ¸n òƒËÐ¥_Ž¦Ý¹¨ý#PQì(Ö”ŠÜ…ûpî[Ý`~wÁªæÝ =jKŠâB)Ï@×åÂêÓ;ˆ}’Tý扠ïU½JrùG Ô¹L”J(¼½z%eÓ… ïê`PìàÊÇv°ÿN_w¸]X<ŒsçrtÝ'¡‰ê‚JgÄ]šs÷Jì¿ÏF©,ôYqGƒ·oߎÍÖxûoܸ‘Ë.»ŒÄÄD"##k‚ÿ\.>ø óçÏçÊ+¯$==ÐÐP\.EEEdff²qãFV®¬?ñ|kò¶Æï¿ÿΘ1c˜6mýúõ#**Š   ÊËË)..&//Ý»wû¼ÜÖp¹\Üu×],Z´ˆ+®¸‚îÝ»c2™ÈÊÊbÙ²eÌš5‹‚‚ãOþ>gÎ ¹æškHMMÅßߟÊÊJ222X¼xq½wQEá…^à»ï¾ãÊ+¯¤oß¾DGGc0(--e÷îݬY³†¢"ߎiµ¦ž}öY @JJ QQQ˜L&l6ûöícéÒ¥¼÷Þ{”–6ü>HkÛùÁdíÚµ\vÙetêÔ ???ìv;EEEìß¿Ÿ-[¶ðóÏ?7zîÍí#_ºãŽ;¸ýöÛ;v,ÑÑÑX­VvìØÁ’%Kê•ë«û¨´´”O>ù„n¸€Ï>û¬Ñô§[¹Ýn®¿þzFM¯^½'44·ÛM~~>ÌŸ?Ÿï¾û·Û·¿»…B!„B!„8©ŽüóðØc©¶lÙ¢ÊËËS•••©Uyyyj½^¯©¨¨P»ÝnÙlÖ9=`T«ÕEQüE ^¹rå¼?þø£æXçž{îI<¶—””ÔÖUh¶7>x¡Mƒ_ÅñI>L8‹NˬÍÛùxÛž¶®Îimé¤ÑèÔj^ߘÁ;÷µuuN{ŸŒB¬Ÿ™—ÖoaÞž¦Íþ/„u}3n8ÁFO­ÝÈâÌCm]!„B!„BÑ sæÌipûÙ6¶+„h:uH{,û€ªoî¹ûÔ Bqr\yå•<ñÄlذɓ'·uu„B!„B!„ÇÑPœïàÁƒ'¨Tª"•JUæv»+«N§³WVV:ÔjµÃb±¸ív»+<<ܽgÏÅßß_ WÒÒÒ”Ç{¬Þ¬Œgü Êâøn™vO[WA‡ô‘B!„B!„B!„Bˆ¶¢ëyiõÅëðæ¶­ŒBˆ“.,,ŒÛo¿€·Þz«k#„B!„B!„8UH€²B!„B!„B!„B!ÄYÎ4þ9ÜE™¸mÄ]ž +*ÿ(t]Æ¢K€sÇR”ÊÂ6®©Bˆ-%%…ªª*]»våÞ{ï%<<œU«V±dÉ’¶®žB!„B!„â!ÊB!ÄYdF·Nü­K’ǶkÿL©ÝÑF5BœŠnèšÂ…íã<¶ômT!„B!„B!„'œZƒ6q h ^“¸r¶a]úìI¬”Bˆ¶òÀ0xð`m»víâ®»îj£ !„B!„B!NE | ùyÓ‚6)wP÷ Ú¤\!„'ŸE§Å¢óüõ¯R©|vüOV^ã³c¦žÝÖUâ„°è´½¿„&„B!„B!„â £Öb[ý6Úø>¨‚âP™ƒPiô(ÖR\¹ÛqîX†cë|pɤ·Bq6¨ªª¢¤¤³ÙLVV‹-â?ÿùm]5!„B!„B!Ä)D”O!(,Äéï‚yKÚº gŒ‘_/jë*œQ¦þðÓÉ)Gv…8#¼²a+¯lØÚÖÕB!„B!„Bq²8mØ×¾}íûm]!„§€[n¹¥­« „B!„B!„8 ¨ÛºB!„B!„B!„B!„B!„B!„B!„BˆÓ‡( !„B!„B!„B!„B!„B!„B!„B!šL”…B!„B!„B!„B!„B!„B!„B!„M&ÊBÑLAôêÓöãÛº*BˆS”JÕÖ5Þ˜ýôøÚº§=£YG@±­«qBÈýÛtÒV§.yÖ\r/!„B!„g.]׋0ޏmʈ¶®ŠBœu‚ƒƒéÛ·/IIIm]•“âl;_!„B!„B!Ä™AÛÖât3媋¹ý¾ëmß»{?×L¼ù„åm _•›Ú5…GŸ»“Ùȳ¾Êê•k}YÍÓÆÜ¥¢Óëxí߳ط;³­«#„ð±OÆ !ÖÏÜྋ¾[F‰ÍÞhþÄΡ\{W_Þ|zYûJNDÛÔ{‹§b06ü'äŸù…• wŸä_p˜™îëG»Ä B#,¼ýïÕ,ÿ~g³3rB “¯í‰Û­0ç­õ¬ü¡ùçÚ½O ÃÆ%“œN`°›ÍII¡•샥lüí?-Ø…ÍêlöqO“EÇ­ÿD»ŽA„EúñÙ¬õ|ûñæ¶®–Oé÷¯/ém%Ϻ³óY7þÊ®Œ¿" k•“^ÿƒµ?í?nž–Ü w¤wabÇ„÷=µv#‹35«ÞB!„B!„8q CïBeðÃ]–ÛÖUBˆ³Î¯¿þŠ^¯çÉ'Ÿd×®]m]îl;_!„B!„B!Ä™AVPB4Ùµ·\El»hBBƒ¹õ®ëÚº:BˆÓ„Z¥"ÆÏŒú4[^ÐêtQjwxüS¥Ñ<­šïïObçPž~gc&§ÊªŠ§?==ûÆaiñ1B#,üíÎó6jâ†ûú5{áéwžÇ?^ÉyC 7£Ñª1[ôD· ½_ÓïèC@ð©»*±Á ¥×€8£üÎÈëZîߦ“¶:5ɳ®uâ:qÅŒ^ø‹´pË?¢÷¤~TKï…ª†þÆðÑy!„B!„B!„B!„B!„Bq²œ–+(®»r1Q|üå÷lÝÞôZ“W€¹ŸÏgÁ¼%5?_Û5\rÅøž·5|U®Ëåªùì¬óY!¼éÆ¿ú÷¨Ñ0æ›ÅT9OŸgÇ›¶1oOóVIï=(žøŽÁèô®ù{ozö‹å­g~¥(¿òDT€1“SIN '¶} ¹‡Êxé¡'¬,k¥£æ³J¥BoМ°²N%Áa&TêÚ¨3VMP¨‰Òbk“ò÷ÑžQ;5𦤰мÃåõ¶ŸÌþ=›µÕý{:’gÝ™ël~Ö…„›=~Ö4Èod¥ç–Þ oýµ·þÚî±í›qà 6ZqB!„BqrLö›Âý!ðTáã|Sþu½4jÔ 1c´y,Ý = VcWlìwîgeÕ æ”}L¹»þÿ JÔud²ßÎ1ö&V‡KqrÐyUÖ•|Rú%îâ&×÷ã¹ 4¡—±ášH \ù\}yóO¼šÒV4\â)ã,Hе Ëy•?òQÙl*ݾ¯œJ6i(ºÎ£ÑÄtGeFqÚpeâܽÇúOQlÞûH_Ò¶ƒð#·GÁ `ÿ³~¿ÀÿF@¿ƒmMÃÇÒ¥‚ù0ôu(Vpeƒ}-T|®ƒ'ì4NŠ~ýúqÏ=÷@@@›ÍFQQ,\¸yóæátzÿNK!„B!„B!„—N»å @¦NGtdØIÍ+ÄQ»‡ÝáñóÉÈÛ¾*÷×?$<2 £ÑÀkÿžå«ê !Î`f£æìêX³|¹‡Ë¸øênœ30• º÷ŽaÄE)|ù¿Þ¨ñ‘Ñ—t&2ր₪VÀÍQó9!)„gþ7î„–wªÈÜ]Dîár"¢ý8´¿„¬ý%MÎ?ìÂdŸ?yc«–ìB",´K ÂdÖ5˜÷döïÙ¬­îßÓ‘<ëÎ\gó³n×Ö|J‹¬5«;ïÝ^@Anã/€ËsC!„Bq¶c¹ûBÍMA·¨òš~Iå"–T.ò¨ÝåØÉjë/hô 7¬·Â2Àaç!ž.|‚2w«ªVzì[mý…—Ã_c i0Lƒ0©LT)UõŽÑß4‡BÅ¥¸øwÑ3|Uö9nNÞÿÅ›ÓVQÚhÆù]T'¿Q\yùeùgä»òx>üeÒ ½ècìËoÖÕ>«§sۜۖ@>rçï¹ïWLÚäáh“†ø¬nþq“F“Ö½3S:‚ ?µšÜœ|~_½OÞû’ÃYÙ#µk'.½j=ÏíFPp e¥eüµa+sfÍæ?3Z|nÑjµ\2u<£Æ '>!T*2÷`ñüå R7s®« —^À=߯ýYLC£Ç=·oO^žõ4ù¹LyuÍv_´3´ìyÕRã:´#=<„Ä@"ÌFLZ-V§‹¬òJ~>”ÍW»öSápzÍÿ·.ÉœJ¸ÑH€A‡N­¦ØfgsA_ìÜÇ–ï÷¯I«á’¤ö ˆ‰ Ÿ³NK¥ÃI©ÝÁ¡ŠJÖçðÉö=>Ï{TœŸ…GÏëI¬Ÿ™ovg2ksÓ^è„Äxº‡d0àRÜÙìd–U°¥ ˆÅ™‡8T^Y“^¯Q³dâhžøíO–8\ï˜K'F§VóúÆ ¾Ø¹¯ÁrÅF2!1žNÁ5²+«øõp.s¶ï¡ÈVÿMþ¼?j`½í?\<ªÞ¶u¹ܵrmƒå¦†29©==ÃC4è)·;ø« ˆÏvìcsAQƒyÀ7}äKM RÒêÔôÙs´£CJ(þAT*¥EVr—±ií!~ün'å¥6Þ[<ƒ±þŸrÝûÄðÉÊkêmÿ•µ,þz›Ç¶ðh?zœK×s¢ˆM$(̌ѨE£Uc­rR[Aæ®">{{¹‡ÊZpöëÞ;†ûŸÀ®­ù ?Ï`óºú÷ˆ·vøï3¿°rán¯åxË;hLGéXoû#7/d×–¼Fó6§kò´ »Í—u¡cjzƒ–¼ìr2þÌ9n>µZÅ 18*‘„¤` &-ÅUl^w˜…Ÿgpp¯çóùÖ‡2àüDÞzöW~Z°Ëë±_ûòB#ªß"»óйäd•a4ëva‰C‰Š À?Ѐ ^CY‰•›óXøùVvlÎkRýë:A†íÏF—“ ïЭÞHYþa27¬dã‚ÙT•zÍg ¥]D¥¤Ò.¿°h &?P©pت(Ï;ÄöŸ¿eóâOOø9€<ë#Ï:O§Ê³nâ5ݹôúž¦YöíÞ}aM£iŽ%ÁÉB!„Bˆ35ÿ }†0M8–¾Ï—åŸqSÐ-æil¥ßM¶?n‰AeDº^ððŠù^ó.ªü¦ÁhСd¿cŸÇ~³Ú¡O¡FÍ£…ÿä‡FŽåAe`´e,CM#è¤ïL°:J\%ìtlç窕|SþUƒy›ÛVçû¢¦z²­9eŸÔÛÿSÕrò\y„kÂiåÓeé#WÖF´ÉÃQi ÕËÏ*­ðÖuŸ„ñüqeRñ¿I¦Õ$ôÁ<ù ”ò<Êß[Tº^W m× •)ÅV†+ëOì|„ëPãµ&oCT¦@Ì—ÿuHî‚=T~zŠÍóû%•ÎŒ®×åh;FJoA±W XKpgá:ð;öµ4»ìã1ô¿Müy¨üÃQQiô(•E¸mľþÓ㜯 ]çQhÓÆ£‰ìŒÊ€â´¡Tá.܇;{3Ž­ qðy½ë zô=7?®ú_kàd(ÛyJžos('h>=mò0tÝ/AÕ•Ö€»4çž•Øÿ¥Òûw¼'ÂìÙ³™9³z…ùôôt¯Ê=zô`úôéôéÓ‡ÐÐPJJJX·nï¼óëׯ¯—þ¢‹.ââ‹/¦sçÎqàÀ–,Y·ß~ËÌ™34h.—‹ ðÔSOQYYÙ@©0jÔ(¦NJ·nÝ0™Ldee±lÙ2Þ~ûm <Òêt:Ö¯_Ùl櫯¾â¾ûîkð˜&“‰uëÖa0xþùçùïÿÛêóm ƒÁÀÖ­[˜9s&ßÿ}½4èõzž|òIÞ{ï=}—]v=zô 55•ˆˆÑh4dgg³jÕ*fÍšÅõï½Ö– `6›™>}:#FŒ C‡øùùQ^^Nqq1™™™¬^½š·ÞzËë¹·´µZ-Ó¦Mc„ tèЕJÅž={˜7oª&¼›ÑF£‘ñãÇ3jÔ(ºtéBhh(‡ƒ¢¢"222X¾|9sæÌi0os®çºZ{¾'ózB!„B!„Bˆ¦8-”×®ßDÖávìÚ‡[Q0 '%¯¯ÜzÏõ¤¤&pÕuSXµ| [65üR5@`PÿyÿyÛyl÷ðÃ?À¸ø4µ×`ß.Ý:ñØ¿ï':6Êc»N§Åd6AeE•O”Û²Îï|ú*á‘a ×Ï_KrçDŒ‹õöi4|ò.F]8Ìc{|û8â§ÇqáÄQÜûc',ölqÛ=×cñ«?ul»hbÛEsþC¸óÆ’á%@sÆÌé\uÝm!¡Á 9€Á#úóòÓo2÷³úƒk­añ3ó›ÿ¢kTí)©I5÷²7-¹®òró ª¹Ï«Ö¸¥{g,:Ï_C–”àR‚˜Ø1ü²ŽíE% æïNçcÚ,ÜddX\4Cb£x~Ýfì;X/_€^ÇëCû’àç±Ý_¯Ã_¯#ÖÏŒZ¥j0€µ5y=÷”à®ìœÈªC9lmdBJÅéiŒ?æ«EC”ÙD”ÙDŸÈ0*N¯AÆ-¡Q©x wwÎñØïo!Þ¿´ã_Ö5,ÜR7víÄ•=¶ ŽbPl¯lØÂ7»3ëåóUl)]ùí‘Á„Eտâ,„EYHíÅŠùÞ7›kظdn¸¯Ÿ×ýF“–Ø„@b™óÖ©1˜næ¡WFÝ.Àc»ÅOÅOOT\ÝzG³ìÛÐHÐ^‡N¡5ŸuAÒûÅ‘Þ/Žÿ½¸†¥óvœ°úŸ.ÆLNåš¿÷öØvôZ8ž€`#w?=Œä´píáQ~ »0™¡c“øøu,ø|k;¢üÚ•nLf]£Ç¯ÈXTP/<ÒÂÕ·÷n0}p˜™ó†&ÐgHoÿûWŸÞC­¥ÖhzÃã$õ¿Àc{Pt{‚¢ÛÓiÈ~xérvnl0ÿÄÇ?ÂÙà>ƒÙCB'´kM>¯wkȳ®iäY'„B!„âTò·ÀëécìËzÛ¼^üj«×Ã@†}k³W6®t×FZÝÖzû/õ›B :ˆß­k[œÜUߧž#Fë±]‡³ÖL´6š w…×åæ¶U¸&€*¥ŠBWý@&…ß­¿qe]ôiÍ>Ÿ–ÒÄöÀ•“á“àd¥¼z²2•ÉûÊÛG©ÍÕßi¸ËêO˜htú>Ó=¶©Ì!GV|†õÇãø³áñèÖämˆJoÁ4ñUÔ! (e9T}ý÷úÁɦ@Ì—½ƒ:´ƒçvc*cê v¨Ôê ¬é0M”çu£ò@Ûé|´)#°.~Çæú|«t&ŒãŸCÛ¡½íª@êÀèÐÅZŽ}}ýÀz_ñ¿Lãª?—¾6/sÈi;‚îÈnÅlP'¬Jõ©5Ç<†.Õ3^’€>äjt]'P5÷Ž¿·Tqq1UUU˜L&‚ƒƒLsï½÷rÓMž“ú‡……1zôhFÅc=ÆG}ä±ÿÆo$5µvì<))‰¤¤$n¾ÙsBóË/¿œ°°0f̘á±]£ÑðüóÏ3aÂ퉉‰$&&r饗rà 7xW:V­ZŨQ£ûŒ¤$Ï÷! $!!Fã5@¹¥íìççÇûï¿OzzºÇö´´4ÒÒNì゙={òÊ+¯Ð®ç¼N§Ãl6KEEE½å–\ÏGµö|O·ëY!„B!„Bqv8-”ËÊ+Ù¶sïIÏë+Qž‘ÑáüM›q ‰ípؼýÚlV¯úâÂtz‘Qátê’DeEUƒy;¦tàåYOc¶˜p»Ü,ž¿œU+ÖpèàaT*5AÁtíÑÙç‡mZç#3ˆnÙ´EßýÈž]û(-.ÃápààG‡¤„óÞ8sZMéÒ…+øî«(+-§k.\{Ë•òÜk1}ò­ä z6ùò“oùæ‹ÚÕÇf̜Δ«.nöqV,ý…o¿X@Qa f³‰î½Ò˜~ÓT,~þùôÝ\5aF½Å+¯½´&8yýÚM¼ýÚd8L»„Xn¾óZºöLeæ?f°yãVvnó]°á}ά Nž?w1?|·ŒŠò ’;wäÒ+'Ô)ÑkÞ–\Wy9Õ/øù[Ðé´8Y588´úÅc”jI;×ÕÜç•/¬8˜Í—;÷Qæp`ÖjéÎe)1xnà¹\·dV[½|ïmÙ‰SQ8TQI…ÉV¥¢sH 7uëD¼¿w¦§±êP¥vÏ7¦¥&‘à‡ÃíæÍ;X“G±ÍŽN­&Âl¤Sp •^ú 5yëŠ0{Nši65 |mZrMpòÖÂb>Û±—̲ Ô@„ÙÄc}{bÐhŽ[nsÝÐ5¥&8yÙC|·ç e]Cƒø[—d‚ zžp×.YE^UíË`ûJË8î"ÅDòÈyÕ«Žÿv)V—Ë£ w×ãÔN‰5ÁÉò x{ó•Wçoá¦nèÌß{vasA1»ŠK=òúªN¦¤´pzu:]ã}¸og!¥Åµíl­¬½¶õmÍâîn·‚Ãî:6;N§ç‹d:}Ó®™òRyÙåMJ{¢]{wßz{Ç*Ì«¬Yyµ¹®º­7ë=Ha^íÌþuÛY¥R¡74ý^«›·n`­ËåÆé¨ÿbŸ»Îª›­íß–j×!ˆ«n;·Ey5UƒÁÉu©Ô*®ºí\Š «øuiõßèŵ#Mµí×!PQn¯é“£íXUáÀnmú½¬RÁô;Îcão‡(Êox冓­÷¥·Õ'ïZýÛV|­¢ŒÈäœ3i&ÿ`ÆÜõ _>t9… ¬^}ä¢ÈÝõ;~™OÑÁ]XËKp;è-þ„Äu$g×_'ó”%Ϻ¦“g݉ÖUË…­çˆ·•¤…B!„âl”¤Kæú€»‹x(ÿþfå§ö#Y—ÂeþSfU±òjñ‹Í>Î0óö:öãÊ®·œ¥:P¨Ð]À ᯢëL¨&” ¥‚-¶¿ø¼l«­¿4xìd] ÿ‰x ³Ú‚ +°²jP£&HLwCþ²5hØ’¶²*ÕߘT&L*UJý±ÔWõxP˜Æûwn¾ 2ø¡OFŸ~9Úäá(+¶Ÿ^ñÙñÝå¹GÊñ\Þ£HUæ”#yŽÒ÷™V`ì:ð¶Uoà.>ˆ:8Ãà¿£‰éŽqØ=¸mÄ»Ãgy¬£1Ó%¯¡‰JÃ]z˜ªÏgà.­Mêû^_œì²c[õ&ν¿ TV‡Ú? Mdgû‰ù¾Òþë,p;q—d¡ØÊA­EÕÃà¿£iqÄý8wÿ„Rå9Q°áük‚“ÛáÜü-îò÷žVß«ö³uù ­V=†·Ö';¶-±i.Š­ML ýoDe Æ4ñ*f_ŽR–{œ£ù†ÅbÁdªž¸2'§þ÷Ê3f̨ n\³f /¼ð™™™tèÐû￟^½zñÈ#°~ýúšÕxëz饗xÿý÷éÛ·/³fÍàÃ?äÕW_eèС¼ð Œ9’äädvîÜY“ïÞ{ï­ æüî»ï˜3g¥¥¥ôêÕ‹™3gÂÛo¿Í…^Hvví½ôã?2jÔ(ÂÃÃIMMm°N#FTÿnØ·o»vyN~ÙÚómK?üðŸ~ú)X,Î=÷\n¿ývüýýyá…5jT£ãþÍuûí·“””„ÝnçÅ_dÅŠ¢×ë‰ŽŽ¦[·n”—7üzkÚùé§Ÿ® Öýâ‹/˜;w.eeetéÒ…éÓ§{ÆûRçΙ={6‹—ËżyóX¶l™™™¨T*BCCIOOgÆ õò¶ôzníùžÎ׳B!„B!„âÌ&oÞžËýLJ玔—²î·Æg2íÖ³ ‹ç/çÓ_ô.Qá\~ÍLž|è…Óê×ɺ÷èÊØ ç0ÿüùÒûÎu‡åçE+Y¶ù;ôú†Ãçé^W¹Ù5³Æk4„G†‘éx@}û=sè7°7o½ü»¶ï­9.Žlá9™îb·ô8Ÿ¬¥ã•7*.aw½ ¼û ‹Ù’SÀÜÑC 5¸®w/mÛÛ ÞÆšãVßo™¹¤•Vðñ„ó1h†ÅD²,-Ó¥L¿ÇláËÒ2ùâëyUÕì-hAGÜBõ/O¶I¿fÍš€Ífã÷ßwYÍ]wÝÀ/¿üÂ_ÿúWl5 pÝu×±|ùr¢££™3g÷Ýw_ƒígddPQQÁŠ+8räÝ»wgýúõñÝwßqÓM7Ñ«W/’““ÊñññÌ™3€ pÿý÷;··oß>6nÜÈ?þHHHÿûßyðÁëW­Z…ªªh4Æ× èR«Õ2~üx–-[æõýmO»wïfݺºß¡[¶l¡´´”'žx‚nݺ1pà@·Á³§kðàÁ,\¸y󿹬ËÎÎn´-OŽs¯^½˜2e ï¾û.Ï_À°ó{­ON €Ùd棷?o°Þf³A#3ŸîuUR\JE¹#8+"*EQ˜véDú%÷fÔ…#ÛˆˆtÌ⤠ۦ4uœOÖÒñªµìÌ/dɱ\Ô)]½`¹SI/¯ §Ò‘u Î߯Áú⚀û¤°‚ -{˜éIÝú>;p”G6lç­Ý¸eÅo”Ô›àdµûoWU^ܶ×%à·5]Ô9E£ÁjWù`_JƒõÇËÊùùxã:ŵè5e|§8 Z‹ÝÎÜí{dX®¶ÚøöH*CcfŒðÖ9j+É#;8ƒ±6­:Îcwþĺ_ŽrâX1ùÙ¤+fýòcü¾&­UûòÉ«¿óùÛÛøñó½üòí~ølóžßÀ‡/onÕv›K«S\g««,äe•aµØ©®²r<¥¥_ïgÁû;N¹­”}ù¤.äxJ!ï<»[½Àùn½Â[¥ÿg‹äu‘9eÌ{~©%œ8V̯‹ŽõÖÃùÙTmåùûWr`W.9e¬øá?|V÷w^H¸/†;2´×ÏâZ Ü£_”sYמá(ŠÆ¹ ?§¢Ñ~äV—UÎѼõôo.ç·{Ò™q~GNF£(ØmV¶~÷VƒõÅ™Ç8´Î1ñNÂÈI(Ú³ûoQëšOÆ:!„B!„gŠË/§¯¡ª×ó“›ÀÙæPQ±ªV—eÝôݹ>èFüÿfo§ƒ®#ÏEÎEƒ†U•+øµjeƒ2=ô=Ÿ”É-970!ãF§`Nεì69&d½)øV]'áK4ô¤ŸÑH:¯ä-·ÁÉM9ÝcµµúwÒ¬ŽïBî ½Ÿiþ3ˆÔFbÐˆÖÆ0Öo£|Ï­*ìæì®çH ï†qèõh Ÿ±œv+U%¨fÇ>hj¾Û×(èûÍ@?]âuíû;&ëµ¥;—é“&‚Î6 Õ+žu;·o©Â¼ýKgö_oÔ=™Ö¿+ßG‰HÀ–½—Ê/nl48@­tLšªí‹Æ7¸Ém·{Qš³Ïš.ëôI¬&Lëßië®à  €j²7pÌŠÛ¥æ°ÚÛx~Z]Ò$Ð(`·bÞÐðXÙ aÙçt½&‚Ò:ßñj4BBBèÛ·/=ô=ô_~ù%ééé.e/¾øbŒF#‹…G}ÔÜX«²²’?þ€Ñ£GŸ²íâbÇA¯û®17×1ÉvPPÝ;#3fÌ@«ÕbµZy商礤ðí·ß0}út—w3òóóÙ¼ÙñÝmm r}#GŽ$4Ô1yñ¢E‹ZuÏßÿ½ó½‰¾}ûzuÛ……… 8f×óä8Oê˜(Ód2ñÚk '±Ùl^Í]+))əŸµ×^sœÜO®gOö÷x= !„B!„B!þ8Îî7ÝÏ"«—79ª¾¯?]ÈБƒéÚ½3ó½Ë¯–°dá²S$&éçü¼tá²&JzßÙÖç¾AÑG§’“Õ0 +Ào«71uæ||Œ$öêæ6³ðLUeù…DF…êúP~à`ǵ}»PWè¶~êÇK!¡Á„„;å=ѳwG£²¢ñìŒîxr]eed“г1±QìÙ±Ÿ¾’ `øyCxý…wˆŽsle¤7?@¹©ãìNKƫִ63‡iÝ:â«ÓÒ=8ˆƒ'_½ŽKºwfXL$Ñ~>„ TYmd”W:SÚ†3¸/8œÊ9Ñt ೉£ùáhKS38Q~ê—{<©{²Õ¿°R_mFàE%äUU·¸ÓÕ7ÜÑîÑ’2r*Ýß ²ò˜Úµ#>Z- ÁAðÂ=8 f÷SPmr[&µ´€££Á” Þ=Gm¡OrŒËÏ_½·ÕÞ6AèíáÅOgÛÉýD& ½#˜¿æZ—e¯=¾† +R¨®´p<¥ˆÎ Žk$yD^øt«~<ÌÆUÇÉÍ,;­>UUXÈÍ(wö+$Ü{/ݵ—Ó=ÎA!>‡ù:—oßp¢Ùmê Z—€ÇmëOP^êz¯_~ŒK¿Kô| IDAToàü¹Wÿh¶¬M'/«Ü¹, ÐàX7 .@ÙÇWGçÄ0ÊKê¶—ÓÌó}¦žßèDÇq(LO¡¼Àýké5ætÂ;÷<£2"·”Œuud¬óO޳B!„Bˆ¦+!Ü|'vì¼\ôÂio§Ü^ΈôÁ)ÁtÑwe’ÿføÏd¼ßâu¸9çzÌjãxtÔuâ­èy„*¡¶ⱂ‡Ý– ÑÖS=[ø_—u»M;ùkîmü¿”`%„Kf³ÃT— r°qˆóó¢ŠZ´ž+;vþÿ¼õ6AJ0„?ÞhÙ2{ëL(«šÊ)›;OJXô½'£ï7]Ï‹ð é@åç7­ésÔì¶J2ÐDö@ ŠÅ–¹ m\4>ŽÿÛ뺌ÄÄ\4A±ŽòÅuÁ•Úƒ°eíF­pŸ¡Ú^pÔQß7o(jU‘ÇuëÓF'aò4¾!ØŽo¦já}¨–Êåê³lû]—á(áÝðŸó– °ìý{QëNÒ 1 xº.#ÑÅ¢ø…¢Z*±¥;ƒ¥5:£Kmtoly‡Q+Ý?Ÿmmæ-`=„¿ …w€õx3*6ñu£®+„Õdb.¼¬Ç<ïgmvl[^J£AêÖ£kÑ÷›Fïƒ6ª¶ì}nË®#Gޏ]þÓO?ñøã Ç“¡C‡°}ûvg ñÉRR•†……æ ZmŠFÓô$ƃ9îÁƒ’™éþ÷Ê•+¹üòËñõõ¥wïÞìÚU—]ü‡~`ذaôîÝ›Ž;º^Ož<€Ã‡³w¯ëwè­µ¿í©²²’ÜÜ\bbb óê¶?üðCÎ?ÿ|Y±bóçÏç›o¾!55µÉzžçÚ ëPQÑvÏr‡ æüüÍ7ß´¨®'׳'ûûG¼ž…B!„B!„ |Ú¼~+Ýó÷=üWÂ#øææË¹ææËÙ³c?_}ú=«—ÿÖ ›,Ôe^-+-§° m§>Ûú^“…¶± RǺº/õÃ#¼ûpGÔ©® ¸4 .ËkÏÑ€Á}Y»kÉ)·è•å°pÇ ,¹9î_PhŠ'×UFz–#@9.€óÇŽ ¢¼‚ÎÝ:CVF6qñŽŸiY-ê[cÇùL–UQ÷RG„¯‘ƒõÞéÀ çŸC¤¯K£VKH½}t÷<|sN>ÿÞ°{õ!ÜÇÈ_zuç/½º³§ ˆ¯§²&#§AÖ^oÔ=]á>Ž—C²Z0ï­vsªo7»^àr¸¯¾¯sí:Î逈0VÏštÊò½K€r{œ#O„G×e ±XldŸ8½À³?‹W[Í#¯NpÑFÇrÅ­ƒ¸âÖAܕˢÏ÷°í·æÕÖª¬¬»† ƆüY¹¾ŒVRØüI‚C}\²¾æf4¼–ó²ËQÕº±9$Üq‹ ª°YíhuŠsYï®­I£9°3§Éí7æL<¿~!Ž,0åÿ>/˯[W[þl%c]ËÈX'„B!„¢½]tJ ?VüÀQ‹û¸–(µ—°Ë´ƒ]¦¬­ZÍ+‘ÿ£·¡3fñEÙüFëuÒuæ­è÷ˆÔF’j9Æßro§Ru¨:?4F̪ëäy•j%+*—33`É>ƒ\ÖEj#kúYJ¡­ Eûæé±ÚgÞË•Y³¸.è†ûŽ$ZEµmËfSõÆûM$Ré•óеº[æ.l™»°YƒïÌWÑF÷Æ0`&æm_x¥ {ñ ”ÈÎd]ÂGÛ¦r”ð®(ÁqØK2Q‚ãkÊ×!jj²*k; "ð[NÙ–Æ7ÈdìIÝút=.t|PUL›?8ep2€5uU?üŸq ñÀ0l†as°eî¼u>ÖÃ+dtö%¼~—¾Ž&0Êe¹FgDëZ‰ëúšÀeµ´eÏ!½©ìmP¾ÇAáï@þ°e¸/¯ÖÌ©4‘ðU£m‡ºÏÞP{]©eOHl¯wkË·¶wß}—gžyÆíº¨(Çõ0tèÐFƒ›ë ñJ€cd¤cŒm,˜óäuµý¬µtéR{ì1ôz=S¦Lá­·ÞÀ`00q¢#ë·» ÓöÚßÖVUóìÖh4ž¢dˬY³†Ûo¿'žx‚¨¨(î¸ãî¸ã¶mÛÆ|ÀÏ?ÿÜ k/xvœ#"÷Evvó&öö–èhÇ;%%%äç·ì½O®gOö÷z= !„B!„B!þ$@ù µnÕF6­ÛÂ…Gsñe“é;0ÉùïøÑt»ÿYRu­TóüPm§À«³©Ïšš†›Ûn{Ó?ƒÆŽ­F£`·ÙÝ>è:™Þà§ÉµÝ±Z¬-®ëÉuuü˜ã%‹˜š ɣǟKqQ óß_Àÿ¸‘ó/ί—Buµ‰œ¬·ÛlN[g ½¢8?kê½ ¡žL¤¯&›w÷bMF…Õ& Z…8?þ;r0Q~>n¶ê°.3‡MÙyŒíËônéêüw¼´œÿlÚAJ‰ûà)OꞎÚ}7Ô;ÍUÿ´Ÿjöò†íÖn¤åmy¢6¾Ñ®ªØš±QwÇ¥­Ï‘·XÍö?tFQpÇUVÔÈiµ FÇŸ£v»Ju•Å¥¼ÕâúbVVZ)Ìù‘éW÷eôä|ýëÆþžý£èÙ,ÛÖŸ`îÿb³6ÿ¥®úïµô^9îq>y×uú–;MÑh4.mÔÞâª]¥ ·‚¨¸@BÂ| òwfE­(7ã` ÷À2Rë&"ineÇö]ûp&pþ^kî-þoŒŒu2Öy‹§ÇY!„B!Dã¦Ì`ªÿt¦úOo´ÜCaòPØ£¼_ú.o¿Þ¬m¯¯ZÇnÓNú0Ügd£ÊñºÎàäã–Tn˽‰[ãADõ31+AäÙN&›euD8Ö$ת{Ñòï,¼q¬rlÙžAŒ¿/Sºt`vbW:ðòèa\¿l-ùU&¯×m©B“ l2àº1»»ª¢h4øë[ö+?¿ÚDãïÛh™¿ºuõÏQ}õ³7gܨmwÕ‰,þ³éô_¸jËs䉢‚ºD|ýõÄt"ûD˺ŒëmsvòXT?ƒ®;ÿ¾e‰ËφÅsÿóެGðÈmKÜUsQ\XÅǯýÎçom£ßÐX†éÂÐÑœAiƒFv`ÒeIüøùÞ–ìJ³Øl®Ám§Ú_oiéù=Ýã\Zìš19*.Ðm9wJŠª±ÛUç1‰ˆ hP&&Þu{EùuoŠe¦•Hp¸/†Ç;û³â‡C\rm’’£Ù±±.cì‰cÅÍîÛ™¨¢8ðÎ= ˆŒm´L`Dݺʒ–eî9ÓÈX'c]s´ÕX'„B!„âÔ ïfeûì3&MšDNNÝdêžçæ\­¡ö &44”¢¢Æß:™'׳'ûÛ^׳B!„B!„B4‡÷§ënºp$W^w)1q-zÈÎÌaÞëŸpËU÷`µZ `ÒÅã\ÊìÚ¶pÌœ9aÚ…÷ÙSgrŸwow´Û=±‹3cíÉÎ3€êªj8ê¶ €É䘑Ý×·ñ ¾Ö¨ë ú\ÐçàçÕ>¬ö žŒÑØv³»Ö¶Û«O"‘Qá§U÷t®«cGÒˆ‹æ¢©cX¶x¹ÙyìÙ±Ÿ~ɽ2<€£)©-êWKy:^yËÈš`n›ªr´^¶ÛPŸº—}R¼4©AvEïí=Ìm+×cµ«ôLìÜ¡UëžÍ=º6 °¿Ðñ"TBHÐi)Ôw l,Ø”Ý5Ht $ÚÏ}Ï­¹Î«­6RJÜŸ‹êzANÍ ’®mwpTF­wfè÷äü¶¶ƒ»\³¡Ï¾i`ƒ,¶Íaª®›);<²uÇçúªêe®ˆˆnÙuÖRšzAr‹m¿àͧÖqÏßQ˜Wìš<¢uÎoy©kP{TlÛ¼XÒVç·¬ÄD~N…óç!çuÄÇ·y“XÌ6ެ ¢4²Cƒºc¦&ºü| Þõ_›Ù?ÀÀˆ±]ؾþ[×9‚’}ýô ¯Yn6ÙÈÎ8ó² ·DΡ„uH$ Â}rçA£°˜ª(8~°ÍúÖd¬këÚöü !„B!„hhTúpÎIÐè¿’šÞ§ 眴ÍΞ\«“®3%ö·ë {„núnÛ‹ø{îíäŸ"8à€¹.£ã¹¾ç¹-ÓCß €TKªËò¦í€c’ÍÉþÓNÙV}­u¬ºë¸&èz–W.#ËšÕ¢~yJ í€Zåþ[㹘‡.i2–ý?¡–åÔdl€®óP .˜ÙY7Ã1¡©®óPе,(Ü“º'³—dPùÅMØ2wFÁwÒèz´ì·½4ÓooRùÙu`·¢ñ Bß§e×]S4~aÎ϶ܖef¶ß€Ò]¯õétU¯†ÒWŸõ}!ðކeÌ{ÀVs{ø_K›½S{]i#\‘ëÓuw|Ç«ZªZ|.Zª¬¬ŒçžsLú}ÓM7Ñ¡CÃï·nÝ À¹çž‹OËŸ9žìé§Ÿæ†nà×_m²\m»½zõj40sÜ8Ç{$•••ìÛ·¯Áúµk×’žžÀe—]Fll,çŸ>Ÿ~úi“ízk[¢6`:!!á¬n÷ĉÌ;—™3gbµZ æÒK/u)ãÉq®­Û¿¢£ÛîÝ„-[¶Ž÷”.¹ä’ÕõäzödÛózB!„B!„BˆS‘å6pÕ ³xjîÃÜñ™÷ù+‡5Y^§k<䨑ã”Öê…„ºnçÀÞC΀Ǜÿz ý“ûxØóæ;ÛúüËâ•Øl6´Z-sîøKƒõ]»wf´±5eWam"k~®#'*&’¨˜ÈõÓºžð¤ÝœlÇ ¯Qá„E¸ŸÙÞ~Z´«ÕJHh0w?p;Z/*žJýkãÞ‡ïlQ»ž\WiÇÒ±Z­DÇE3~ò2ҳسs¿³¬F£áê9³8z8Õƒ=lZKÇ+oÐiþ*Šñ÷å¢ÎŽ™…×gæRm« X)ª—©·WhpËÛk" à±ÒrÊÌŽ ¤`7ñžÔ­ïÊžÝxrÄ nïß‹wÆŽ$È o´ìÊtÇ[Z†ë’>LV4š&ƒ¼jœGwˆÁG×üëyYZ&6UE«Ñ0§Obƒõ]ƒ¸¨S¼³¬µ‘¬Þ¹•uY3ωŽ8e»?ÏÀjW 1¸k`o´-Œ`óÖ9j+[Ö¦S\/³èð±]xø• Œ¸° q‚ ‹ô#¶cI£™zE´:÷ºÔ *ïÂŒkúÛ)ˆÈØúDrù-ÉtíÙ²I𣠝’ꪺ±lÜŒ OD´?‰}"¹âÖA„Fx'ÈL«Søß7³¸éŸ#HÙÐ?ôz->¾:B#ý°Zë‚á[+ÛgIa•õÇNKdÀ°x"cèÕ?Š+½¸¿õµåùݸ*ÕùÙ×_Ï=O^@מá…úãßdÝU?nP7¡wÑñL½¢.íå\_˜WÉÎMuYN¤Öe¥éÀæ5i=O~¶cÿ“:–g¤£62æœ-¯_‚ÝfCÑj2ó¶ëC㻓xîRÖ/ÁnküoѳŒuÍ'cC[ž_!„B!„mk´ïô0ô`kõï Ö÷1ôå"¿‰<^ðoÒ­éÍÚn¾-ŸÝ&GÀàd¿©øj\'Þì¨ëÈù¾£X]µÊeÝ>ó^™ÄÝr'É-Ø#ïî3‚7£çá£ñ¡ÐVÀÜ¢çÛ´}]Âhg]Û‰­^Û®½0ìV” XôI±Ÿpú–ýKA£Á0ôzGÙü—º–}?:‚y}Cñû/Pšÿ¼Ã“ºî¨Õ¥T~};¶ÛAÑâ;ùI´ñÝV†n/8ŠZí˜üÕ›™ªÕÊBçgmLïÕµì_êÌôë3éqô}§£ñGc DÛãÿ¥ñgZ­¡b¾#PÀÿj0;©€ÝQ@ß ‚î·é¡½Ìº Øm h1Œ¼µÁz%¼úÞ“kÊ.{ëÇûý÷ß³ÿ~ŒF#÷Þ{oƒõß~û-V«•°°0}ôÑ6{þþý÷ß;Ÿ¡»Ëüš˜˜è ]¸p¡Ûw3ìv;_|ñ3gÎä–[nA«ÕräÈ6lØà¶ÝöÚ_€;¿&NœˆŸ_ÛMÆèI»M½ósøðaŠ‹ÏqBC]ßñä8׿6þóŸÿ´Ù9Úµk—3pøž{îaÈ!Í®ëÉõìÉþ¶çõ,„B!„B!„§Ò¼”hg£Ñù ɧ^P‘^¯Ç§&›¦ÝfÇl±xµ®7\8i´ósphƒ‡ `åÏk-ÿâ[ObµZXñÓì9DaA1:Ž˜¸(¦_6‰°pÇþûv»Î²«ª*Ïÿç5^ûàY||}xíýgYùËÖ¯ÞLVF6› ??º%t&$,˜w_ûØkûx¶õ9'+/>ú–«ç\ƤéãðõóeÑ‚Ÿ(/+§ï€$®½å t:¥%e|øÖü&·µ{‡ãÁ…¢hxø©ðáÛŸc·Û‰ïKl|4ó^ÿ¤Uêz“vwnÝ8f“}ꥇùðíù˜Lf:vŽ'6>†w^ýÐ+}ÌËÉç£w¾àÆ;þÂÔ™H>§?ßµ˜ãÇNP˜_ˆÁh 6.šƒûòÒSo`«Àꉜ¬<æð ×Ü4›óÆ ç_àëO¿çDZ&Š¢‰¢u4ãÉue±X9šrœ½º£äëÏ:×­üy ¿ÿVç}tpŸëKÞÔÒñÊ®IêN˜‘ß2s(·XI ⺤üt:¬v•öv)ŸRRFve1~¾üm`F–m¹”˜Ì´ !¾M<{áüs°ØUV¦gq °„"“ ¢!ÚÏ—éÝ:934(,öjÝú.ìX7“z°ÑÀà¨VpŸý µ´œei™ŒïÇÔ® ÐëYœz‚r³…nÁÌèÞ ¿&/MÍ`T| á>FæŽÊ'ûUQ‰A«%ÊÏ¥‘àœÊ*¾‘õêºÏñÉë¿c«h™–R÷ÒœF•fvÿî8Meê}œ“1xû:nåÙìZú §^Oó¦¡7ú±ÿ×o1W–Пä‹oFÑê0U”°íûwÛ»»“±®ùd¬kûó+„B!„»4hø,ö+~«ZÇNÓ6òlyXU+ÚH†ûŒ`vàÚ ù¶|Aƒú×ÝÀnÓNvšv¨ºmÇŽ {…˲y¥ïðJäÿˆÑÅòrÔë¼Z4—Ö$y$ì t¥ö¾*ûÜ¥žŠÊ ÿÃÛÑïã«ñåíè÷XVù ëªÖaÍÀ¦ZñWè®O TÚâŒÑMñÕø¤«‹%ÉЇq~ãéot»Ú ¹/ÿîfen þ×ÎÇzì7l;°—ç9‡ý#ÐvŽaàlÀèjÙù­÷šµY°åAÕVy[Ýy°ü.ø‡3û¯-g¿KUµ,ÓÆ÷0޼}¿‹ÑvŒeçì…©¨ 3 Å¡íLõŠg£^¨Û(«‰ªïïÁïòwP"{à{ñ‹Tο{±k@½ß¬×Qm¬—aËÞ‹ZQZ#H»ÿ̺ýÍÞsºGµ[î!ì¥Y(A±Ž€b¶ôßQ«ŠAk@ã úF²oZMTýø ¾3_EcðÇgÂ#^ë—'JÃW D@ð#7 Ôºù©ø |Æ‚!ü¯}¢c™õ ‚a¨÷ûd/ÍÆ¼åS C¯Cßg*ƒ–]ß¡šÊÐÆöÇ0üFPt¨Õ¥˜6Ìó~ÜPU•7ß|“W_}•éÓ§óî»ï²ݽ”Í믿ÎÝwßÍìÙ³>|8Ÿ}öGŽ!//£ÑH‡8çœsxôÑG½öü=33“yóæqë­·2sæLüüüøòË/)--%99™;ï¼NGqq1¯½öZ£Ûùâ‹/øÛßþFpp0×^{-|ðA£åÛk,XÀ„ ˆŠŠâã?æÍ7ß$-- £ÑH\\\«—zÒîG}„ÙlfñâÅìÚµ‹üü|ôz=qqq\uÕUDD8&¢® ‚®åÉqÎÌÌäwÞáöÛogܸq|õÕW|øá‡¤¦¦¢Õj‰m•c¥ª*?ü0óçÏÇÏÏùóç³dÉV®\Izz:6›€€zôèAXX/½ô’KŸO÷zödÛózB!„B!„BˆS9k”ï¿ëF ú†³ñξx‚óóÁ”c|üå^­ë y9ùôèÕÝùsnvã‘E¡wÿžøø:rp£å~[½‰U¿¬i°|ÿžƒüóŽGxäéθIc7iLƒråÎ`__?_´\6¥ª²›ÍÖ.}ö†w_û˜Èè.šrcÆË˜q纬/+-çþ¿=F^nÓ/À=œÊº_7rÞ˜á$ŸÓŸäsú;ו•6ìÛܺžž#oöùDZ&Ë–üÊøÉcè;0‰Þ|¢®nq©×”>zûs WϹŒøŽ±Üù›Ü–ûâ£oI?žxçX½÷¿O fêÌ ôîדGŸ½¿ÙÛñäº:¸÷0=zuÇnWùé‡åÎå¥%e¬Y±ž 'ŽBUU5 ê©–ŒWÞ¢WftïÄŒî\–ÛT•g¶ìâHMöZvUå©Í;yö¼!èõÜÛ‚ÌëŠFCRX>Z-C›Èæ»>+—U'²½V÷dyUÕ$ÖËN[UÕDixiÛ^bü}éʘ1ŒéÓdù“û³øØ ¦tí@ï°ž>·ñqúdóö"ÒׇñâÃèx×vËÌøm+ùUÕnîªÌÛsˆîK°ÑÀ}ƒúº¬/5[\”>ÞŸ‚A«pUÏnÄøqGÿ^¸óå¡c¤—×½€æÍsÔ–vnÌà…Vqë# i䥠BÝí­üñ0ã/éIt¼û—õâ;·<ãxs|ýÞN ‹' Èè¾Ý.ÁìÜ”áq;qÍìÿ9,þbŸÇí5fÁû;0,®Ñså­ý)N IDAT­¯-ÏoIQ5/>°’ûžÛè9mŒÍ¦ò⃫¸ïé±$ôvÚí*Ÿ¾¾…M«Ž»,O;ZŒÙdÃ`t¼xñûšt¬GóúeǘzEÝXhO^‹úu¦ÚòÍÿ‹"aädºžs!]Ïq 5U”òÓKwSQ”ÛN=ô.ëšGƺö9¿B!„B!¼§‹¾+‰ú$ê{sܖɵår_ÞÝ”Ùˬh@?ãVvX×h;…¶&dŒuY¶¾jóJÞæ¦à[d‡1Ÿ¹¬¯R«øWþ½ÛN`¹×¼‡»òîà‰ðgˆÔF2Áoü&5(Wn/÷j€ò!wqyà•.ËTTVW­âùÂgȵåx­­ZJX”ÈD ‘Oަ–çRõý}¨¦†çÈöì}h£z‚jǺ÷ǺöªK±¦¬B×ó"PUì9Ô5o˜‡FkÀ0ô:”G7Ì\ `Þò)ö¢4¯ÕmŒj*§òÛ»ñ¿ö34¾¡ø^ü<Ÿ]V“£€FA‰é‹FˈF·c=²ëÁå®o1ÕNõÒGð½äe4Æ@|Æý_‹ªÛNl£ò³k1žw'º®#@ë˜^5•cMù}Ò¤š,ÔjÓò"{”¾!O€6 ®…²·ë€Â»!ôY0Ã`Ç¿Öfúí 4Qè“&¡K‹.ÑuLR«K©úînÔò¶ûŽwéÒ¥9r„îÝ»s×]wqÛm·¹¬ýõ×1Üzë­têÔ‰xÀívÞ{ï=Ž;æµ~½øâ‹ÄÄÄpñÅ3qâD&Nœè²¾¤¤„›o¾™œœÆÇ¼ââb¾ù殾új ùöÛ¦'Qh¯ý]¹r%_}õ³gÏ&99™wÞyÇkÛnvµZ- À××—Q£F5ZnÅŠ,Y²¤ÁrOŽóܹs ãòË/gàÀ¼üòËÍê³§vîÜÉœ9s˜;w.ÑÑÑL›6iÓ¦5(WVVæ  ž]Ïžìo{]ÏB!„B!„Bq*gM€òÙìß#*:’¸1,\°„=;÷7ZVUUîÿ료ºð\úH"<"”°`T»JaA)‡Ž±ò§5,_ú+v»û‡~ÛßÅ•ÓnfòÅã8wÌ0zt#($‹ÙBYi9ÇŽ¤±uã´Z-6›ß|‚~ɽ[¼_÷Üò [6îh—>{ƒÍf㉞gÍòõL¿lI}{àãc$;+—ß~ÝÄüPÔÌ ›ÿëY®¿í*.¸è|"£#0›L=|œµ«6 ÑhPÕÆÐ6§®§çÈÛ}~ú‘¹œ8žÁøÉcˆŽ‹Æl2q,%5+ן²nK¨ªÊ;¯~Èò¥¿rÉì)$íOTt£òÒ ŽKgÛï»().uÖñƱ²Ùl<ûØ+¬øi53fO¡ï€$B‚±Ûì”—’q"‹ý»±é·- ¶ãÉuu`ïa¦]:‘Më~';ÓõAõ¯—páÄQœHˤ¢Ü»ÙêêkÉxå-?Ï@§($G†l4Pb2³#¯Ï!¥Äý‹/»ò‹¸þ—u\šÐ™äÈp"ý|2è©´X)5[(¬6q¼¬œÍ'X«ªÊÿ­Ûʨøhú„‡îãCˆÑ€ŠJaµ‰#%e¬LÏbEzö“®cOêžì]ˆòõ!Ößަ±· é±¦Òjå®_713¡3uЧS ? ))ãçãüu@z¥ñÀüç·îfg~!S»v¤[p~:»“…ÌŠJ•ð{NÃ`t›ªò俬ÉÈfz·Nô ÆG§%»¢ŠõY¹|~ð(E&s“}øñX:%f33»w&!$ˆ½Ž*«”’RÖfä Áõ5xwÏ!V¤gqq·N Š #Ò׃V¡Ül!­¬‚my”˜]Ûöæ9jkÛ7œàﳿeÔÄî O§„Pƒè ZLUV r+8z°€Œã%nëWWZx쎥\rýú ‰%<Ê­NCE©™¢üJìÊeã¯ÇÝÖõTnfÿ¾u ³æ  ÏàXƒ˜ª­äe–³w{6¿¯iüe®›2¸jTó&Ù°"•‚œ †]Ð…^¢‰Š À×OÕb§¤¨Šã‡ Ù¸ê8V¦¢6ò÷†7äe•óï[–0óDZõ¡¢ÜL^V9»Ïbs+gOÏoKŽ38€ïûËB&ÎJbàˆx¢ã1µT”™)/5‘ŸSAêáB¶®KoP·´¨šÇîXʘ) œwQ7:v Å裣¸°Š½Û²Yòå>·§6«”}yôNvL„°îç#Îu©‡ ÉH-&¾Kˆ³v›•o=̱-+I{)‘]û 3øP^Åñíkعø#ªJ O½¡³ˆŒu§&c]ÛuîhËdGf“d™B!„Bˆ–ʰfðï‚ás.½ ½‰ÑÅ`À@™ZÆs ëªV³°â;Êíånë‡h=›œêí’7ØaÚÎìÀ+èkèOD‘½ˆMÕx¯äNX~§Ukkõ.ÍœÆÔ€‹9ßw4=ô=VB0c¦Ì^ÊQË6WoB‹Þù?c…ZN™½Œ2{)©–cì0mgeÕrŽ[R½²}wì¥T/ym—h£“ÐÅ ÑPMeØó`=²Ëž…¨&÷çȶœýè¹ë±õØK³\Ö™w~ƒ®çEØ‹ÓQÍnj«˜ÖýËŸ1 œ…¶ã4Qh´FGß S±¥oqd öjÝÆ©å¹Tÿü¾3^B‰HÀxîm˜V¿R³R¥ê»»Ñ%ŽE×Å?_(¨vì…Øóa=¸ ËŸAµ·¨ÝS±ØNåG—£O¾mÇ!(Qh|‚QͨÕ%¨Ø S±¦np[ß^p”ª…ÿ­Å?Uµ¡–;¾—Õ÷žâؽÚ@ì6Rõø]†AŽ,É埂Zï2Q+¡ðoŽLʾSÀДPPÍ`ËËA0o«7¿Ö²Û¨^òo¬‡W¡ï?mLo4zì¥ÙX¬ÁüûǨ•mû¯ÝnçÍ7ßä…^`ܸqôêÕ‹êþUUå…^`Ñ¢E\}õÕ >œØØXŒF#¥¥¥9r„7RTÔð{|OØl6î½÷^~þùg®¼òJú÷ﯯ/¬X±‚wÞy‡‚‚¦'ŽGàå•W^‰¢(|üñǘLM_‡íµ¿>ø ›7oæòË/§gÏž`6›)**âøñãìÝ»—µkמíÚívnºé&&L˜À AƒˆŒŒ$<<»ÝN~~>û÷ïgñâÅ,Z´»½áxåÉq¶Ùl<øàƒ,^¼˜«¯¾šäädÂÃñÙl‘––ÆÎ;Y³¦a2OmÚ´‰qãÆq饗2vìX’’’ Ål6SRRÂáÇùí·ß¼§äÉõìÉþ¶çõ,„B!„B!„MÑÔüsñØciöîÝ«ÉËËÓ”••iºuë¦ÉËËS ƒ¶¢¢B±Ûíz???½Åb1>Š¢ø«ª¨ªjèš5knÙR´7dÈ6Üö—ÐÞ]h±7>zÁëÁ¯Â»ä5Ÿ«³Ç’‹Çã¯×ñΞƒ|vàh{w笶|æôŠÂë;÷óõáÔöîÎYoþÄÑÄøñÒ¶½,<Ú¼L B!„8»„EúQ”_Iý9K¢âyù‹Kœ?õîv¾ÿdw›ôçû©c õ1òÔæü’–Ù&m !„B!þܾøâ ·ËÿlÏv…ͧ„uÁÿ†T}/Ö#ÞB!„B!„B!„Þã.ÎwÔ¨Qk4š"FSf·Û+€j½^o®¬¬´(Šbñ÷÷·›Íf[dd¤ýèÑ£j`` ©öéÓG}ì±ÇdX’ Ê‚;®»¯½» NAÎQóɱB!„BœÊ]ÿŸ¿žÕK°Gªª2kÎ@—2Göç·Sï„B!„B!Î<ú—9>¨vlY{Ú·3B!„B!„B!„⌠ÊB!„B!„øÓˆŠ $±O$WÝ>Øm™Ü¬römÏnËn !„B!„B´;ßiÏb/JÖ¹{y.XªÑÆ ï= }ŸiX-G­,lçž !„B!„B!„Bˆ3( !„B¸qk¿žÜÐ;ÁeÙµ¿¬¥Ôli§ !„Âú‰mr½©ÚÊ[O­ÃfS[¥ý›ûö`J—.Ë‚†ViK!„B!„¢Ù-ºnçÎØh[Ϊ—?Ó†B!„B!„B!„g2 P>ƒ¬Ýµ¤]Ú=¿ÿäviW!„8“ùëuøë]ÿTÒh4^Ûþü5×zm[gƒ«F}ÜÞ]B´ëÄ™¦9פÑGÇ#¯Ol°Ü[ç×_¯#Ô§ñ}…B!„B!Ú…¢Ã´á]t†¢ 逯/Ö€Z]Š-÷ ÖC+°ì[ 6™ÈU!„B!„B!„B8H€òD……&“.kï.üaŒûöçöîÂÊU?­n›v$ˆMñ' c8Óœ ×äËÛ÷ñòö}íÝ !„B!„BWVæÍbÞüa{÷D!„B!„B!„Bœ%”öî€B!„B!„B!„B!„B!„B!„B!„âì!ÊB!„B!„B!„B!„B!„B!„B!„Bˆf“e!„B!„B!„B!„B!„B!„B!„B!D³éÚ»B!„­E£Umï^wü (ІòRS{wEœ‚ÜGÍ'ÇêÌ%cΩéô q‚éØ5„ÌôRŽ,8ímɽ „B!„ât+!$(±•b9Üfu=Ñ^튶¡ï;mt/¬é[±ZÑÞÝB!„B!„B!„âŒ"ÊB´Ðì¿Ìàoÿº¥ÁòcGŽsí%··Z]Ox«Ý¤¾=xôÙûñõóá™G_aÚÍÞì¦B¸˜?q4ñ~n×M_´‚“¹ÉúÝz…3çÞá¼ùßud¤–´FÛÕ¿\…ÑÇýŸro=ýk–iãZh„7ÿk»…åÏ»Ïm`Õ-aoÜÅ=˜5g v»ÊoocÍO-ß×þCã¸`j"‰}" õÁd²RRXMö‰RvnÊdõ’LÕÖo÷æ~yÓýXɘóÇsb;ñÜGÓÑj>|yói(ŸÎ½pwro.éÞÙíº§6ïä—´ÌÓê‹B!„Bˆ³Ï÷q‹ Pø_ñ+-öõ¤®'Ú«]Ñ6ŒcîEc À^–ÛÞ]B!„B!„B!„⌣´w„g9wü…øŽ±„…‡rç½7¶ww„-¤h4Äø¡h4íÝ•©¶Ú(5[\þ©§H˨Õ)ÜrÿHºõ ç¿ó¦2qVgÙnÿ!8<žð(ÿÓÞFx”?7Ü3Œ PBÂ}¹ù_# ñiÑ6®¿gÿ÷Â8†éLX¤Z‚Ÿ¿ØŽA$èÀõw%(´eÛü#’û¨ùäX™dÌi>Vq'{âtï…*w¿ë=îB!„B!„B!„B!„B!„¢5•”}|ŒÜxõLâb¢ølÁì;xê V;ÆqþðÁtê‹Á §¸¸”Ýû³fÃ,ÉŽ'šï»¯³dá2çÏ7ýõZ.½rZ«×õ„·ÚµÙlÎÏÖzŸ…g¾¡Ñ<1r>Z-¿ÿ…*ëÙs¿±ë ¦µ¨Î9çw¢S÷Pô-×þýŽˆçí§×S”_ÙÝ`â¬$ûDß%˜ÜÌ2^zè×Vk«ºÒâü¬Ñh0µ­ÖÖ™$4ÂRí¦Õ)„„ûRZ\ݬú#.ìÂE—ôl²LIayYå –·åù=´×}t6’1çKÆœ–9Ý{áíÝy{÷A—eßOK¨±Uû+„B!„¢mÍ ˜ÍýaðTáã|_þm;÷ÈÕx¿ ü7â¹&Ëü_þ}¬¨\Öd™–Ò¢åÒÀ˘ê1õ]Ȱžà×Ê•|Zö1•ö ¯¶€FA—0}¯ hãú£ñ Eµš°¥a=²˶ÏQM ¿¯¢5è:BdÍpPp3˜w4,p3Þ¨Pøw0mt¿-}ø] Æs@‰µlÙ`Þ ߀íD«í†B!„B!„B!ÄŸÒY ÌU³¦Ñì:CõcúÄ ÐÔKÝÆØó‡Ñ7)‘w>þšªªæ½`.„ÅlÁb¶¸üÜu=á­vç½þ ‘Ñøøyí¹w¼Õ=!DðÓëðÑþ9‚É6®J%7«Œ×ôcðyÐh ÿ9q\8½ Þwóf‹—L¸´ÑñTµZ;·ÏøÚù¹sBO¿?µUÛ;S¤)"7«œ¨Ø2—q¼¤Ùõ/˜’èòóü7¶²nÙQP!,ÊŸŽÝBðõÓ»­Û–ç÷LÐ^÷ÑÙHÆœ?.sZFÆ !„B!„™è?……=ØÞÝh’Ÿâ×ömjü˜õƒŒC\–'ê{܃ÉþS¹%g¹¶¯¶ë{ñ èºrY¦1èÐF'¡NBßg•_܈ZžçÕv…8†d¼Éñ¹âËF‚“5tø_ (õ@ }ð› 9ãA5·E¯…B!„B!„B!þΚeEQ:¨ãÇŒÀÇØü,Jâb˜Vœœ™ËŠ5)+¯¤WbWÆœ7”¨ˆ0fMÏ'_-jÅÞ ñÇrð(7Îþ[{wC!šåè^zèW:v áâkúÑ¡k ?ÙÝÞÝ2›lSÐõš€‡ñü¿Q½ô¯µ)ÄéP" ôi@Ë({Í}¹àß,ÇgË^(ÿÔQ^£€¾ø_Ö4 NB!„B!„B!„ð¶³"@9¹_cG #,$€CGŽÓ£{çfÕ?fŠFCIi9ï}ú-Õ&Y9˜Ìf&]x>½»Ñ1>†ôŒìVÛ!„B´ôcżþŸµhµl6ï½ÀõG¢Q4ètŽ”ªªbµ4?ø®=”U³ðÓÓ vó08?äTx«KÍr¶çúä>j>9V§v¶Ý 2朹„B!„B„iÃx:âyô=Ïþ—ÛBî X 9uÅv¨Ph/ Ì^ÖêíÅèb™0p'¿Q\y¹ üKòmy<9—dã þŸ½ûŽ¢N8þ™Ù¾›Þ-„:¢T)"‚"*b=»ž]ïNOzžåôNÏvvï¬g;{”R¤éÒ{Ûlvwæ÷dž$K Ù$€ÏûõâåîÌ|çûìÌæ›83Ï÷nɪª•ëÛ³cžó ^Ò³–Ÿ†'}6ƒ c¯‰SƬ?!މŸ5´R(º¯ñcËéuÉÉÎYPüw Þ¥0O8ç€â訅B!„B!„B!~SNˆåˆðP"ÂB)(*fíËàá{n=j;‡ÃNÏî]øù—uµÉɇ­\½‘q£NÅa·1d@ßvKPNêšÀcÏþ…Ä.ñ|ýé,Þxé½£¶±Ùm\|Åùœ~ÆHºtKÄî°QYᤤ¸”̃٬_½‰Þù¼Éö‹™IS'0nâhz¥ö$,<ÛMIqi»ö²bÉj¾ÿòÇ~Ê΋9"*œ‘§ŸÊ ¡ýéÙ»q 18‚( T9]dÊaö·sùâ£ïíwÜ™£¹à’©ôíß «ÕBvV.˯bæ{_RTX°ãs¢ºôªéüá¾›,ß·g?×\xÛQÛO›1…þƒúÒ³w¢¢# Æ ªäæä³få>~÷ ²Žò³—: —\uCNHXx(e¥eüºaŸ|ð[6n?æÏÖ³ÅÌ‚5ßðè}O³àÇ% ¶Y¸ö[Lf¯<ó&Ÿ}øßºó.:›¡§ "¹Wwb㢱٭T9]:ÉÒ+øâãï©(?zrʱŒÇjZ. Ž 94˜»›ÑH•ÇË¡òJ~ÎÌæË´ýT¸=M¶¿¾_/†ÅFmµb1aRUŠ]Õl)(âóÝél-húçÈf4pQJwÆ$ÄÐ%ÈÝd¤Òí¡´ÚMfE%ës øxçÞ€·=,)ÈÁßF !1ÈÎ7{2xsËγ!Ñ\Ü•AQá„Y,xu"W5el-(bnF&™å•µÛ› *ó.œÀßWmdÁ¬ûœ?c &UåÕMÛù|wz£ýŽMŒå‚ä®ô Åj0]édEV.ŸìÜK‘«á=B‚yoòé –ÿ8}rƒeër øóÒÕö›ÊÅ)ÝA¨ÅLyµ›_ ŠøtW:[ Šm9GÔÒä(£Ieô¤ Ó…½# ³ ( ¥EUäf•±yu& ¿ßMy©ïïŠwç^ÅÚðOªAÃøxé5 –¿÷âjæ~µÃoYt|ƒG$2`X‰ÝB ‹²cµ1Uªœ r+ÈH+âÓ·6›øã–ÀýÏž @Ú¶|¹uöQÛ˜-Î<¿7§ŽíJR0ìA&ªœÊŠ«È˪`Û†l~úr;UΦÇIôæ¼+úëÀYáfÏö|æ|¶-ëþŒ4uœ^r9Kçìi²Ÿ¦ÚŽ=»'cÏîÙ`ù#·Í!mk^³m[s~kÛ´â8‘X»-ÀÓÿ·€M«Õ¾õË‹‰ˆ¶°aåAž½aí:«ÝĤ zÓ35ЏÄ`‚B-…ø¾ÇÅ•lß”ËO_l'}wa“ý7¥#’ »;ƒ~g^Lt~ÍVÊò³Èذ”M³?ÀYÚtÌöÐHº C\ï¡DtéEPT<[( n—“ò¼Lvþü[æÎl÷Ï2æ4GÆÇØӜ  Ï}4àP ·ÆßÿøSmÌG#ÉÉB!„Bqâº9ô6†[Gmˆ!L Ť˜)Ò ÙäÚÈ̲øÕµ©Ùö**ÿˆ|’(C4ÿ+}/Ê?åÖ°Û[ÔwwS2‹üí#‰P#(ÑŠYëZÃû¥ï²»ºùkùÇÚ6¨&A¹D+iQŒmíw„u$*¾ÉÅ>)û¸Áú%ÎEäyóˆ6D3É>9  Ê4SÙ{hÆ^QŒ_ùY½í“ž™ÍÀzÖ_ÑŠ2¨xgF³Ûº Ç~ñÐËó(㜆ëãúc:åw»œ‚b Gw•á=´‘êµâÍÜÜü¾Ûж1Š-ûåï FtC+ØKåÌߣ»ü¯§)&;¦S.ÇØsjxW³½º½ª­øÞk¨^ý~«û>Ëè›1tb E1˜Ñ+‹ðfn¢zýÌ£|^SßÉûŸ‡!¶/Š5ÝãB¯,B+LGËÞ‚{۴⻾°Á<РøAð6¼Œ@pÍ­lÏ(y¿ääúôvš?ÐØë Lƒ.Â×ÅhA+ÍÆ³w)Õkþ‡^ÙúëðB!„B!„B!„'’"AyõúÍÊÊaWZ:š®cµZZÔ.¹[Š¢°}gÃȽšÆÎ´tN”Z›ÈÜî¸÷Fz§¦pÕï/eÙ¢_غ¹ñ‡ÈBÃBø÷{ÏÒ-Ù?¦à ‚C‚HꚀÁ 6™ìÛo`}æ~âãü–›LFlvq 1TV8š Ü™1¿=ó%¢c£ÝoP°‘^}“±Îµ6Xg0øëãfò¹gø-ïÚ=‰®×%qî…“¹ÿ<ö·æÎ{oÄÔp:êÄ.ñ$v‰ç¬©ã¹ûæ‡ØÞDbè-ºŽ«~©ß²ˆÈpÆOø3GóÂ?_ãëOh—ØÅ÷ü¾ÁçuÙéšBïÔf\~÷ÿáQvlÝÝü~Z9n´Åíƒúâ0ùÿ:p˜Œô¡wxöìÆ_–¯cgQã䌌¦ox¨ß²h›•3’âŸdzë¶0;ý`ƒv!f¯NI· ¿åÁfÁf‰AvTEi4µ-müì½ÃC¸²o2Ë2sØÖÌÄEáî¡ý9Έ8»8»á±QT¸=M& ƒ¢ðÀiƒ8«k‚ßò®Áº÷`j÷$X¾®Ùdácuó€>\Ù7ÙoY¸Õ¸Ä8Æ&Æñ↭|³'£A»@£ŽÖ{@4w>2ލ¸†ãVTœƒ¨8©CâX<+-`}ž1­7Ý7ªÉõV›‘Än¡$v å“7֬߶ˆˆ¶óà‹“‰ïâ·ÜdÆd&.)„§Å³à»]ÐL²`>‘µ¯Ma†ŽJbè¨$Þyîæ»«Ýâ?ÙEÇ:¸â¶a®‹I&&!˜qg÷ä“7×óýG[:8º¦©nzŒ”ÑSý–‡Åw',¾;}Æ_ÀÏßEÎîÆ|½ð±qDÄ6ºÎbÆÒ­ÆÕ¶€ÇÝ2æ´ŒŒ9ëÊÛ‡Õ&'¼óü/-NNB!„Bqbc;~æ~Ëb ±œeŸÂ™ö³x¢ð1¾+ÿ¦‰Öp}è ·Žd½k-¯¿Ôª¾Ïuœç÷>ÒÅû9L²OæÑ‚‡ù±bVÀÛ†Â(ô´*Öcí7Ú€Sw6Ú§ŽÎšªULuL£Ÿ¹ÿ1Åt, ‰ƒðælHr2€^î»– ØŽ^=[µû®áhe9 ÖYÆÞ‰yøu~Ë{DMÅç3¨Zø îßnKÛÆ(f¶ _Bè†^–ƒó«?6LN¶…D*ï´ IDATb¿ìmÔÈþË­!(ÖÔ°.(ªÚ. ʆc0Äùo”àŒ}ÎÂØûLªæ>Ž{Kà ¾“ ëyOcì1ºÁr%Ô†š=F£W•S½¾ab} ß¶i¾×¥Ïë—Æ·3öSªïuÅ »Û-¤†TֳŔêŸH¯FtÃq5¦àüú®cJ~B!„B!„B!„8Qœ Êeå•ìØ½¯Õíb¢"¨ªrQ\ê»8eâº%%ðãÂedÌ"'7€ˆˆ0 ªŠW ÌMV¿8â¢ýÞÇÆG7›hxí-¿£[rÜÕnÞzåV.[Cqa &³‰Ø¸húôK¡²ÂÙhÛž½{ð›ÿÄî°¡y5æÎZIJſy0 EQ eÀà¾OtìÔ˜k’зnÞÁOß/doZ:¥Åe¸Ýn‚C‚è‘ҭѶ7ÿéÚÚääùsóý—?RVZ΀Áý¸áö+ åéW庋ï /'?0êôÅÇßñÍçuÕÖnùÓu\zÕôVïgñüå|÷ùlŠ K°Ûm :¥?×ÝzŽ ýó®ºàtݶö+o¸¤69yýêͼõÊû:E—n‰Üv÷ ’ÊŸþr [6mc÷Žã+Éqñ¼e|öá7”•–ãpØ5î4.¿ö""¢Âyæßqý%wR×ôŒÙ­7óÁl¾ØN™ÛÝhdT|4—õîA„ÕÂÓ§ŸÊïç-£ ÊÕ Ý»[wãÑu2+*©p{0* }#B¹u`ºq÷Ðþ,ËÌ¡´Úÿ‰€kSSè„[Óx{Ë.~ÉΣØUIU‰±[éJe•›ÛÒ¶¾»ÿä±v[³ Ê7ôïU›œ¼­°˜Owí#£¬ˆ±Ûxtä,ÃQûm­›ô®MN^p “ï÷¤Ìíf@d×÷ëE˜ÅÌ“c†qüeä9«jÛ¥—–qÖ×?06!–GF à¼ïæSåõúõ¡é «%\Ñ'¹69yC^omÙEfy%IÁn؇‘áüqH?¶“V\ê×6Pç¨#¥ôæÁ—&c25ÓwRZ\wœ«*ë¾Ûf‹ñð¯%4MÇ]í=²9ÿß&s˾3å¥.ò²Ë[´m{»áž‘ T˜WY[ñµµ®ºó4Ö¯8Ha^]%òúÇYQÌ––ÿ¬Õo[¿2©×«áq7üÛO«Wí³­ç÷x¥(ð»[N!?»œ• Ò;;N»äÎÚää´•?²cñW¸*ʈí5˜a3nÁÎÙ~‘/¼œŠÂ†'>9¹i¿²kù,ЦQU^‚æqcv‘Ô“œ´_;ò#5KÆœ–“1§óÆœ¡£’?5¥öýœÏ·4a^!„B!ÄñíÍ’×ñèyR®•aTŒô3àawÑÝÔƒûÃÿÊ’ÊÅ”h ¯«§˜zqcÈ-kE<˜?ZS%M›àÖÝ|Uþ‹ (ÕJécJå–°Ûˆ5Äñ·ˆ¿³§z7»ÝO8v¬m#Tß½åjÝ…Y±P­·îZCkû­Ò}×|lŠ ›bé7¼—ZàõÝ£Œ2D7XHŠ%5ºæ¡—cì5Ý]…kɋۿVž[ÓO0Làm:‹T±û΃^Óæ0óðkkŒ½ÖâZö´âƒ¨á]±Œû#†„AXϸoæ&´Ü]kÛhŒÖl½‚!®?ZiÎÏnA+Ín°yä¾ädo5®e¯áÙ·½²Œ&Ôà8 ±}Ñ«+é¡íªW¼ š­äº«T#†¸~XÆý5¢;Ö3ïdzg ºÓ‚bËY­MNvïø Ï–ïÐÊóPŒ”°$lS5ð÷Âê³Ï€ ë}¯+>ŠÏšÞÖ|JÝëªEíV–Óï¨MNvïø ÷æ¯Ñ]¥c}3Š-Û…/RñÁåèe¹GÙ›B!„B!„B!ĉé„HP>V!Á¾Jd•5ÉZ=º&2nÔ©œ7å þýßk×T»ÝFYyEÀãXôÓÏôîÛ€’âRÖ­j¼êÛa‡ô`î¬EÌ|ÿK¿uy9ùlÙÔtEß{¾»ÃFU•‹{o}˜MëVÅ[½b]k?ÂQ1¯\ººÑJºÛ·4¼‰—ÃåWÏ`ö7óxò‘j×íÞ±—õk6ñîçÿ&$4˜n»’§mݬî'MÓ¨vU×½÷[Äέ»Y³rCíûͶRVVνÝI×îIôÔ×ï{É ·] ÀÒ+xøž¢ÕL PTXÌÝ·<ÈÌïß"*&’Ë®žÁãþë˜âj/;·¥ñë†mµï·nÞÁš•xéí' ãº[®à¹Ç_m²}kÇ@ØU\¯õ*ðn+,fmN/ŒN¸Å̵ýRx~ýÖí~ÉnXAoyf.¥|0e,fƒÊˆ¸hæedúm30ÊW‰`^F&ŸìòŸ„"ÏYÅÖ‚¦…ÛÒ¶¾E³èæKx*­v³>¯éª1v+—÷ö%ë®ÌÊåÁëñÖKêM+)ãé´"©Ebí6.ëí›YNúAžZ[—\—V\ʆÜBþ{ÖBÌ&®ë—³ëêÆP¨®ù™­«[Ój—7%Êfåú~½øùPü²¡6‰¹ÈUÍ=?¯á£)㉲Y¸¬WwžXã?û{ ÎQGQU…;:Ý/Qp÷Ö<æ}½“ôÝ…T9ÝØl&ºô o vÛôºŠ /̼ØÄ`¶¬Íâ©{ç·:–-ë²Ø·£€²RÕ./V›‘˜„`<iÁd60ddbíûísx뙕äç”c4ªÄ&†Ðoh,Ž`K3{ñYôÃnæ}½]‡é× dÄ„n˜-FLèÆœÏë~/Ô?ÎÝR"xòi-޹~Û÷\Y{ž—ÏÛÇëÿ\Þâ¶8¿á“7Ö³ðûݘÌÆÝ“KoZ›ôxÅmÃX½x?^oÃI :RPT<ƒÎ¾€K¿cÉÛÖ®+ÈØIæö5\üø'X¡ ›~3KßùG“ûÊØô3Û4|b-ooÃßaEÆœ–“1§óÆœ°·ü¥®RÎúùèßk;4!„B!„k¹óçË–:“îÞÇç _cV,Œ²iPXEåÁÈ¿aTŒ‘9Tv.Õ|“ƒZUkƒu X‚ ºÓ?«SËOÃ9ç‘%ê¶”^V“¼«(¨Ž(´Ò,€šäàÁ¸~~M‚}•¥o Å`u3žÝ‹p~mugoe!Î/îÀqÃW(Aј‡]IÕœ¿¤mc” h콂•‚V¸ç—w4šœ uÕ¨ÝÛ¤zíÿüÖyËrÛµ²®g_ÃëPž=KÑ Óq\ÿ-»Æ½}Níz5¦O]Âí¦/¨šÿ”ÿr¶Ã9í— lß-bœó ôùæ·7võý×›ZIóÛ’ùÔ«poùŽªŸþ^»NËÝ…7c-Žk>F±†`u3Usï¸à„B!„B!„B!:ÐI l6™pÖTü´ZëZ·Õ¼®tÖÝH6›MíLJÿýŒû‘ÇâyË)9¢Ê䑊‹|wÎú êChXÈQ·?,¥O2§ðÞë7šèÛ^N´˜'Ÿ;Õ âñxx絬߿÷?}¿€i3¦0iêž{üßx<ÇW¥Ï“ÁÜñç¿Þª*ôNíé— |Ö¹g`¶˜q»=<ÿÏÿÔ&'Vå¬âË™ßsËŸ®cÄéÃ::ôc²iÝf}=—ó/>‡)ÓÎ१^oò{ÕÚq£½lÊ/dö¾ƒœ—Ü…É]yyã6Ú±—ƒe•$ÙX|0›’zÉøGšÜ5£ª é:Ï­ßê—ðÛž&wK@U<šÎ»ÛV,Ü_VÎOû1­G&uMà… [[|ŽšsV×Ì·¦ñ†­ *,Wy¼|µ'›ôax\ÃÊ :Geèè¤Ú$0€U‹öóòcKÑ8–öµbõÿ^^Ó!ý+ƒQEU•Ú÷UN7yYex½:·Æþ´Bö§5]!¾¾´mù¤ïömûæÓ+8ul €ä¾‘þ7ª¬ÄU[YöÛ%¾kãÎöM‚ã uH[Öe5·‹v×kôTUEózX÷õë Ögîcײè;áBRFŸÃ²÷ŸD󞸛ɘÓr2ætUU¸ã‘±„„û~Þ³=Ÿ—]Š€¿1„B!„Bœø2<ûÉöd“`L$ɘÔ`ý%Á—1À<•U+$/·”GoxM9כ×åŸq}ÈŒ³ÇªXk«¢í~w:ÅÞ"BÕ0âñ«Á ³žÊ0ë©\|5wçý}y]Õ2<t5våÞðû1bâ—ªå”h%„«ô· `œm<Zà'ÙöÑAó€Z÷Ø€™ŒeøuTÍ}<`Õ}ug zuŠÙ ¥Y ¨˜NG±†`ìuFm‚²êˆ@+:PÛÞ”z6-àuSµàéÚãÚý»ToøËØ;k«ÿ¢í‘ÔˆnØ.z5$oöVœ_ý ÝÙôµ5½Ò·Î?ÅÚ ZqgЊ2ÐJ³QCPÂü~M©gû^x\¸V¼Ù ÑÃ7%ºÊþƒo6Þf¨¡¾ÿ6RȽ]SÏEÍCõʆÇJ+܇{Û,L§cì{6ÌÊ÷³&„B!„B!„Bq’9©”áðƒì¾»V»÷ì'm_I ±,Xú‹o Ei¢m`-™ß|¥¬ú>ÿð[†FžÝøøû·øö³ÙÌþv¨>z¤¡§¬}=çÛyÇë±8Ñb0Ä—½ww:9Y «¿,_²Ši3¦`µZèÕ7¹ÑJÌ¢mœ•N ò ‰Ž‰$,<ÔoÝaضyy'¤ïÉ ,<”°ðÐÚDùãÙÏ WrþÅç`³ÛHéÓƒ[w7¹mkÆöôsfç%wÁf4Ð34„Gg‡ÉÈ…=»1".šX»•0‹§ÇË¡òJBj&~°ΤþÅîtN‹¢GH=žïöf0'ý[Pɾ-m´äPã³ÚépEàE%ä9>ðÔ^DúúÝ[RFNeãÕVfå1­G¬)¡!ìÀÏÂàšÏ»­°˜‚š‰>Ž”^Z@˜ÅL˜Å\›” =G¡ÿÐ8¿÷ŸýwCƒDÁ“ÉsN'¾kH£ëRúEññÒkü–½òØRV.H ªÒÍþ´"º¥ø¾#CG%ñ¯§³è‡Ýü²h?¹™eÇ“³ÂMî¡òÚ¸Â"Nlp¢iËqnOKf§Õ&(ƒ/1³³”c{ù*‰H£¼ ñq9cãÏôp!F³•Èn}Ž«ŠÈ­%cNs'cÎÔËúë û`)ÏÞ¿ê*y€R!„B!~k‚Ô .ºŒÑ¶Ó‰7Änˆ R¯ä ;ƒÐš¬@‹â_Ù7T ã–Ð;ÐÐx±è_i£k ô2÷áWצ€µýsÞk_«¨ô5§r^Ðtf]D¢1‰—¢ÿÃ¥YÓMŠ>–~54Îÿ ¯Æ¼AˆÊ#‘5¹2­}&²Õ]唽0Å‚ÑS¿©¾„Ê>“±…%Q9óFð6=¹k«ú*9„ÝÛ—Ü›¹C «ïZ†±ûh\¼€ïÛ¾¸.AÙt Þ¬_Ñ+¯È­ø’Ç[8Š-ÝYÔæ¶õbS1ŸzŠ- ïþÕ8¿½ÝÝ|·{ýLŒÝG¢F&ã¸ákÜ›¾À½õ´¢ŒfÛ‚b Â4äŒÝG£„Ä£ÚÃÑÝ•hEPl¾Ÿ_Åhñkcˆí€7o7zeË& ´êµ`>D¾…·ƒg 6syÕØ"j*1þ<ûÚçáêØÞ¼´&+h{öþìKÂ7Y1ÄôÆ›½­í !„B!„B!„BgNêåj·ïf©Íê»1îñzy÷ã¯ý¶9¼ ú8©î¸zÅ:¼ûÜûÐDFGpõM—qõM—±eãv>ûð–Ì_Þ š,@TŒ¯êWYi9…;Eð‰sdt@“Éɾu¹uÛGE´{L¿UU5‰žf‹Ùoùás4xØ~Þ<û¨û >!”³ê%ÃFEGM'(/²*ꮈ²YØYî!AükìiDÛü@² „Õ;§Í±:'Ÿ‡Wnàϧô'Òj᪾=¹ªoO¶ñùît–ÊiPµ7mU¤Õ÷FVEãIÂíåp¿9ΦûÍ®—¸i³@ÃçfŽ¡_ß9Á’‹Ï9êöÁf“_‚rgœ£¶ˆ¬IÂp»½d<¶„·ßŠ—]Â#/O!4Â@lb0—ßr —ßr ;7çòýÌ-¬_~°Õû­¬¬û™- '6qä÷ûðyìLö0_U”ò‚¦¥ËòëÖÞþD%cNëȘÓñ¢ê}G÷í*¤¬¤ã&gB!„Bq|èaJæÕ˜×‰1Äú-·(Â-áµï¼ümÈõ«ÁüPñ{Ý{Wž§îþ]„Úºûw­i«¡±­z+Û ·²¦jOG=G¼1žéA3ø¤ìã€õ»­z+¿Ëº˜kC®g¤m4±†Xܺ›lo6«ªVr–ýl¢ Ñír,ëÓ«JñfnÆ›¹Ïž¥Øf¼Œ!¶æÁ3¨^ÿI@úЊ¢F÷®M@6¦Lðõí*G욀V’‰šX³}]‚²RSUÙt Á÷¬=j_Š-¤6ɸ-më3ö>Ó÷B×q­~÷¨ÉÉžô•8¿û?¬“@qDaqæ7àÍÜLõºñì^Ø ¢s ¨‘ÉØ/z%8Æo¹b´`°…×_⿾&qY/í¼ -ËÞõK{ 1ù&äßÞCo¯ûæÒE kzŸŠ Iu¯áð÷J/kz"d­Þq<¼½B!„B!„B!ÄÉæ¤NP.-óUi´‘8Wßáu^M£²‰Ê”aÙ¢_Xµl-gž=ž .™Ê€!©µÿöï=À£÷?MÚνþjîê”ðu"ŬÔtÜÒ~;ë˜þ4ulE@ójx½Þ£îÇdÌÝäúñ¨jà+¬Mõâì˜îmfRÕÚ×J½ ౑C‰¶Yqy½¼µeKåPXåÂlPIpØùçèaÄØ›ƒ—eæ°*;‰]â9?¹ "Ãkÿí/-çï«6’VÒxÒV[ڋßÝ\ïx´Tý¯¹ÒX¶v³ýÞIëûj‹Ã_M×ñ¶`§—Ž>Gâ©ÖNêJ¦àKÊ«¬¨KÌ3T,Vߟ…š¦SåôŸ´Åãö@*+£”nøó¯Àø©)Øuc[ŸA1ô4‘õ+òÂC‹ñzZþpUýç°Zû³rò;h0îx¸«þ{µ£Õþ~iéÞIô·™Œ92æJ[s}öÑ%Ù÷°ê¨‰Ý)Ì­ä£ÿý^!„B!„'…§¢ž#Æ‹Kwñïâ—Yä\@7³b&ÉØ…ç¢_"Ö× íùAÓ˜æ8ŸiŽó›ìãÁˆ¿ñ`Äßx§ô-^+~µÅ±yðÔ¾Öh]bç±¶]X9ŸÕ;ècîËpëÈV'(­ßo6Ï=Ù`òÑC—_ ÀæVTŠn+ϾµŽ ÝGA ” ÓPC0öžˆî,¢zõXÆÿ cÏ ToþÅî®ò«J[{íF×@ó¹ë† õ'Ñ=ö¶õyÒWbˆ€b Æ>ã%œ³Á³kþQwçI[Bù¾˜úLÆ4ø"ßqM„-aZÁ>œ³DËÛuô¸ZLÁvÞS¾äd ×ÏÿÆ“¶­¢Å`F KÂ>ýy”àØ-uË÷BíÜÉüªæCQ9„?jD¼ 7‚ÖȽžšÄeC(vО7u÷ïNîk»B!„B!„B!„GsR'(çæ`µZ ¦¸´aTlŒo¦ÚÂÂb¼TøíLn·‡¿_Àß/ .!–i3&sÙÕÒ-¹ /ÿ÷)®¹ð6òó j·/Ì÷Ý‘  "4,„’âR‰¹ ùyôê›L\bï‡ÅÆ×Í(]XÐt9Ò¶$/wVâs[úÕj29”vή=|ŽÎ]Êc÷?Ó®}Õç®v£i:ªªàr½A+E×T (êàJçÇ*ªÞ$…U®Ú×½ÂBèÀ3ë¶0?#³v[ÓØ]\J…çèz¸5Ÿöâ§ý‡ˆsØ8·{—öêA· ^?‚ëæýL¾Óð¶­UèrÁÍ&\7Å­ihºŽª(8L­ûÕ›_å"ˆs4]á4Î^·®þ9ª¯~µâ–üüîwÑÁ,þ¾êØ|êÈsÔEu“”Ø&â’BÈ>ØúßI~ãkæºiG$7m‚…‡oö¯L?xD"÷?ë«þ°wGÜzôÊõÅ…N>xe 3__ÏÀáñŒ˜Ðáã»Ö&Ã2:‰s.I凙[[óQZÄëõÿ›­=&”hLkÏo[ŽsEyµßû `KË=ŠðHÿñ¤¼¤ó+ŠóˆìÖ‡ èø&· Žª[WYRÐäv'sdÌi‰ŽsŽ´à»Ý$ueÒô>œ{y?¦³dvZ‹÷!„B!„âÄÕÇÜ—dS2>ÊuÿOéÖÝì¬ÞA…Vä0š•À]ÇjLý¤èo~‡µÍðì§¹/‘†È£o ~/º  /‹ ZÝo[è循ϊ­™²´­¤åûª@+! â †$àÞøîs±Œû#ÆÞñd¬EA+Üç7»œV‘JÜ;çQ5ëÁÖõÛ†¶õy¬Ã5ÿ)l¾€™ŒmÚ?qÎVñì˜Û‚ÆnÜÛfáÞ6 5$ÓÀ 0 »5²öK_§âýËÐËóŽ9¶ú ±}P#}?¿Usÿ{ûµët¯=w'zuE£—›ô’LˆëÝ; ±´…ë(þ+„? Æ®ñ<Ü ºÿ|¸­y¡‚u 8çuL|‡¿WJMÂ}cÔºkÚzEëÆ!„B!„B!„BˆEëË@ž@öí?XûPwßÞÉ Ö«ªJŸžÝØ“~ ]cwæh~wíEÄ%4ÛœìÌÞ~õÜ|ÅÝx<‚C‚8ç‚I~Ûl^¿ ðÍ=å¼3Ûs[Ï1ÿºÁ×oÏ^݉Kˆit›Ó'Œ ÊYÅî{ÝÀåò%ÙlM'¶GÛ¶hSÌ5‰„Ž {@c:ÒástêÈ¡X,ÏTÞ^ j’è»÷ìð}?¯×Ëž]ûšÝ¶­ãF Œ®IÖ÷ê:{ëU» ·Ö=d” É²+œüwënn]¸¦l6qv·¤vm;61–Ë{÷h6`{¡/¡<%,䘒” j‡»µªÝ¯59$‡ko<Æ15ãX•ÇKZIã碪^rUK’¤÷;,& ‹!03å·åü¶·›süÞ_z㎥˜¦«ª®2mdtûŽ“õ9+ü“Y£b[÷=k-¥^ržÛíeýòƒ¼öÄ2î¾ük óêÊ Õ>ç·¼Ô?¡6&>¸]ú9RGžßÒ¢*¿÷É©QÛ÷)§wñ{Ÿ±·é‰X:JήD$õ"(ªñ$ån§ŒÀírR°g‡ÅÖdÌis:öüöÁ+kس½îÁÉîAÏŽEB!„B!Ž_õ’pwVïhUÛqFrZÆà&ÿ•h¾kíO>Æiƒ[U=`¬mNÝÉ.w뮵¥m\M’q™ÖpBìöè·§)…«C®`~å<²6«½é¿—„B!„Bœ ½µ¯û›tb$þZ1=è"æTÌ£·üQ[Ú¶ ¡¿ÅwMm“kc+">¶~GZGñZìÛX+…Þ^(z¶U}¶•1e|m]ïÁuÛ¯V˜š5$SêÙhÅ}‰¾€{ûPÌïóm›Ÿæ×Ö½í_2¯-ëÄû@mù}–¶´mŒ^UJåç·á=¸T¶©cHÒøÆjÓ÷е‚½èU¾IgY©Z¯,¬}mˆëת¶îísj+ýZÏy Ó€óQ‘(–` ñ±œq¨{m¨âc_¢2€ãJ°Œ8bÍ· €©/„Ü –‡0ÏöÙ yA5`}Kƒõjd2¦~Sk¶Zû\Ó¾ùæ›yíµ×xàøæ›o kùw©³Ú !„B!„B!„âärôŠÇ «ÅR{#ÉZ/™Éd2a­©â©y5ªÝn¿vó¯$¹{ÂB‚ùý•3X°ôÊ+œôIéÎc}w¯vìÞKÆ¡öKÌ8óœñµ¯CÃC6b0 ú¹ÉíŸ{ýq<7 ~\ÊŽ-»(,(Æh4—Ãù—œCD¤/)tÛ¯þ³ìêºÎ³…WÞ}«ÍÊ+ï<͹KY±d5Y‡rðz½Øv’SºÊ[¯|°Ïx¢Åœ“•Ç'ïÅ•7\Â9çOÂf·ñý?R^V΀Á©\sóåFJKÊxïõ›Ýׯ}•~UUá¡'îá½7f¢i‰]â‰OŒåíWÿ×.mÛ¢-ýnZ·ðU½~âù‡xïq¹ªéÒ-‘øÄ8Þ|ù½€Ä˜—“Ïûo~Âïo¿Ši3¦0ô´A|óÙ,öï;Ha~!f‹™ø„XÀóOüo½ÄÙ¶šýí<ÆOCdt/¾õOþ÷Ö§dÌÆl1ƒj8zRØ57]NDdË­¢¼¬œÞ©)\wËï°;lx<Þyí£fÛ·vÜ„«S{aµ°<3‡r·‡^á!\›š‚Ýhģ鼻m·ßöi%edW:‰³ÛøÃT,Fës (qUc6¨„™ÍØšI,ÿרÓpk: d±£°„"— £ªk·q~r×Ú Í;j{Õ¶¾3»ÔÍhj13,&ŠEÿ}^ZμŒLÎêšÀ´]2™˜•~òj7É¡ÁLïÙ{3“5ÌI?ĸÄ8"­^7œÿmßCVE%fƒ»µ‰àœJ'ŸîÚÇ}’9»["6£ö Üí¡dפ¦`TJ«Ý¼·=­Ñ}d”UPäª&ÜbæÖ}0¨ {ŠËPèD— ¯ÿZ7YGž³Š¶§qCÿ^œÛ#‰!Ñ|»7ƒŒ²r «ª1«*qƒ£"xaÃV¼ºbt ÎQGqW{yãéÜ÷ÔÄÚJ©CbIÒxóM«39ÐHÕÙm²9eLÝLñ—Þ4”Koê·M~vûvÙ´MtMgݲ Æœ• @H˜•ûŸñ¯Ú°}cEù•5o•¤î¡„EÚ˜x^/&ž×0i¾¾_×f¶¹¿Æè:¬[v±Sj>o¸•ûŸõÿ¼ÛôyýöÙç×ëÑX±`gžï{Ðl1pûC§Ó¾FœÑgtktÝüowú%šv–ò‚l6ÏùC¦]GïÓÏÃd±³}ñWTW–›2ˆ¡Ü„j0âª(aý7ouv¸m&cNËɘÓñç÷ÈýòÆz®¿Û÷ÿÎÑqA\ûÇÓxã©íÖ§B!„BˆÎ·«z'Yž,âñü9ü>¬Š•5®Õ{‹1+& X[»ÆjîÏPË0JµBÔPFÛNçòà+0+fŠ´"Þ*y- mÿõ EÞBÖºÖåÉÄ­»‰0D2Ê:šË‚‡ŠJ¹VΗ埴_›b#D %ÞOª¹?“ìg1ÈâKv-ôroþ]ä{óá6GÁqÍÇxö-Ç{h#Zyž/qØ…¡ûHÌC.|‰®îM_®[¯oþ 1}P &ª×Ϭ]åÙ9θ§¶ú¯7g»_S½,×/ÿÅ2úL/ÀÐeîM_ ¦£W€ÑŒ’€!i(U žö%Ž m“<.œßÜý²7Q£{c»à9*?¾­ø€ßfö‹_E÷ºñ윇7{+zE!Œ¾$íA3ê>oö–c=ª xsw¡•f¡†ÄûŠV¼Ö ;‹Á`F±…ƒ©‰ š=.œ?üÛŒ—Q̬S X\mQò˜?5 B¼‹A¯›ÿ‘ŠÏÀ:ÌCÁq9˜zù–yö:˜‡>&­4›êµb~-¦þÓPÌvÜ›¿Fw•aˆ„yäïA5¢W•âZùvà¨1mÚ´Ú×áááŒ3†Y³f×m…B!„B!„Bqr9a”ïÿÓï1›ÎÆ{éSj_ïLÛÇŸ~ç·þ`f6?ü´˜ó¦L 1>–k.»Ào}n~!_~?¯}‚®‘—“Oï¾=ëúÌnú&²ªªôÔ«ÕÂðÑÚÜnù’U,š»´Áòí[vò·?Â#OþQ1‘L:g“ΙÐ`»ŠòŠÚd_›Ý†¡ —GrVVáõz;%æ@x땈Žbò¹g0aÒ&Lã·¾¬´œûÿð(y¹Í?ð¿ww:ËÿÂéF2ô´A =mPíº’¢Òf“}[Ú¶­ç(1ÌÈdÞìÅœ5u†¤ò¯×þQ×¶¸4` Êï¿1³ÙÌ•7\Bb—xî¸çÆF·ûäý¯8°ÿ˜cµbÉj~øê'¦Í˜BÿA}yê•¿µz&“‘ /›Æ…—Mó[îõzyòáسk_³í[3nŠIU™Þ³+Ó{võ[îÕužZ»™=5•ÐÓt'VoâéÓO%ÈdâÏ­¨€®* ©aX †7SÍwEV.‹f¬í‘òœUôªW:×élfkx~ýVâ6F†3!)Ž IqÍnd<³öäÜIô‹ãÉ1M—Gz{Ë.¢mVÎêšÀøÄ8Æ'ú÷[VíæåëÈwV5¹M×y{Ë.þoØB-fî=Å¿êEiµÛ/Aàƒíi˜ *WôI&1ÈÎíƒú6ºïOwíã@y]•Ç@ž£Ž´é—CüëEÜòÀhBš¯žÞ-%¼ÑdÁ…?ìæ¬ û›ÜdÛÄn­¯8ÞŸÿwƒG$bi¼ßî¡lZu¨Íý$´0þ›r˜õɶ6÷×”/ÞÙÈà Mž«@}Þú:úü~öÖRǶø˜·Öžíù|þvë*¾´§µ_þ› ˆRFO¥ÇigÒã4ÿPWE)?>E¹a`ɘÓ22ætÎù­oþ7;;¥')ý|¿ÓÇOMaå‚t6¯iŸ„p!„B!„OCãoåÅèW Vƒ¹?âÁa¢}í“,/ôpWÞšMÚmm[•1¶±Ø;—ÿ®Ñ}–hÅü%ÿ^¿êÒˆùް?qÙ}êè,q.âÙ§Èõæ4Ùß±R#º£F÷ÂÝôdpzy.ÎoîEw•5¹Í±Ð²·aˆéº†gëuýU•âI[„±ÏdÐu´œ ÚV¯|Å`Æ<üZÔ°$,ãïj´êµ¢e¬mStW9•_Ý…ãšPláØ.x–Š®Ë·¢¢Æ @1Y1vÕä~<{–âÙ9¿E}¶,0ª9`»ðEK0ÖIiUsïÁõT~t –ÓïÀØc|“Çë®rvßÓ\wëœ1y,ѱQT»\ìݽŸŸ­DQt½é´-iÛÖs蘟|äî?ÄYS'›KµËž´ –.\qÔ¶­¡ë:o¾üóç,æÂKÏeèðAÄÄFa¶˜)/­`ÿ¾¬_³™’âÒÚ6:VÏ<ö2›ÖmaÚESèÙ«v‡·ÛMIQ ‡d±kûV¯\ßäþ~ün&“‘¡§ "4<„’¢R6¬ý•ÿûi;÷5žÖŒòÓþCU•¡Ñ„ZÌ”¸ªÙ˜WÈG;öVÒø(›ó‹¸nî2.JéÆÐèH¢íVBÌ&*ÝJ«ÝV¹Ø_VÎê#¬u]ç/ËÖ1.1–þ‘aDZ­„YÌèèV¹ØSRÆÂY,8…vÄ÷©-môŸÍ;ˆ±Y‰wØùno[ šÿ™¯ôxøÓâUÌHéÆä®‰t v (°§¤ŒŸöâÎÁ©˜Ô¦äŸ]÷+›ò ™Ö£ É¡AØFÜšF‰ËMfE%»ŠJX“Óð%¯®óøêM,=”ÍùÉ]éŠÕh »ÂÉŠ¬\fîÜK‘«ºÙØ~Øw€’êjfôìFJXA&#N—´’R~>”ƒ‚ÿã$:ðÖ–],8ÅÉ]9%&‚h› ³A¥¼ÚMFYëó (©öï;稣mXy?^úãÎîɉtM '8Ô‚ÉlÀåôP[ÁÞÚ_ÒhûªJ7Þ>‡ ¯ÌÀS㉌q`0*T”VS”_Ɏ͹ü²x»Äž›YÆÃ·ÌæâÓX<Á¡\Uò2ËÙº!›5K›~¨jÓªC\1®e“€¬\NAN#ÎèNßÁ±Ä$a³›ð¸5JŠœìß]È/‹ö³ra:z¿÷!/«œ‡ožÍŒë}Ç:4ÜJEy5yYåüº&‹ÕípœÛz~[sœÊJ\<|ël¦ý®?ÃÆt!:>“É@y©‹Òâ* ó*Ù»£€ +6»Ÿ• Ò±™èÑ'›ÝDnV9+æï㇙[qWæïª@м^¾þûÖ.$uâED÷èÑl¥¼ ‹ý–²iÖû8K ;;Ì€’1çèdÌé¸1§)ºÿg-¼zví²kþx÷]û]“ÿ'„B!„âÄ·ÁµžË²/â² +8Õz1†XB ¡Th”hÅx Hwïã—ªí÷åânA²)…XC 6ÕF•îâ ûKœ‹˜Yö!eZã÷,޵­ŽÎÃù0Æ6–þæ$“°©6*´rÒÝûXQµœ¯Ê>§Hk8\[c®ÐË)ÓÊ(ÓJIwïc£k óÙïN?æcx4Zé!ªf?„¡û( ±©(!q(3º« -ž=?ãÞò-º«<à}{s¶câB<ûV •fù­«Þô%Æ>“ÑŠ WW4ÒZǵì߸wü„yÈźœŠƒb°øb/LÇ{`­¯Rp@Û6M/Ï¥ê§`›þªlݺUÉËËSÊÊÊ”ääd%//O5›Í†ŠŠ UÓ4“Ýn7¹Ýn3`UUÕ¡ëz°®ëáK—.ývíÚµµû:õÔS;ðãt¾”””ΡÕþóþ¿žü*KÎQËuö±úqÅç8‚¼ñÒ{|øßÏÚ¼¿Ž0û‚³p˜Œ¼¹e'í8zò´hÚüS0©*¯nÚÎç»Ó;;œÞÇg'1ÈÎóë·òíÞ–U,B@—a<ýþùµïßzf%‹~ØÝ‰ !Dë}3m"áV O¬ÞÄÜ ©À"„B!„öÉ'Ÿ4ºü·voWÑrjDw×€ó›?ãÙ³´“#B!„B!„B!„Íi,Ïwܸq(ŠR¤(J™¦i@•Édª®¬¬t«ªêv8Zuuµ7::ZÛ»w¯¬GGGëýû÷×}ôÑÕ~”Eón¿öÞÎA…œ£–“c%„B!„B!„B!„er‰ï…®áÍÚÒ¹Á!„B!„B!„Bˆã‚$( !„B!„B!„B!„BüÆÙÎ{­(oæ&´ò\pW¡Çaêw¦þçàÙ5½²°“#B!„B!„B!„ÇIPB!Äqí–}¸¾_Šß²kæþLiµ»“"B!D Ý4 7çvOò[j1wR4B!„B!„¿Qªcòé`´4¹‰7gUóŸêÀ „B!„B!„B!ÄñL”#?ožÝ)ýŽ4µSúB!ZÂa2â0ùÿÉ¢(JÀöÿñÒk¶¯Áã>èì„øM“1GoÚò Ôùu˜Œ„[›~ðU!„B!„BtÕˆkå[»G KB±‡¡ÌèU¥xswâÙµ÷¶Yà• d…B!„B!„B!„$(G$QXˆßÙ£/éìZmê·ó:;„“Ƥ¯~êìN*Wü¸¤cú‘ä9q’9°¯X¾×Ç197âxs<|'_ܰ7lëì0„B!„B!~Û<.ªW¿Gõê÷:;!„B!„B!„Bq‚P;;!„B!„B!„B!„B!„B!„B!„B!ĉC”…B!„B!„B!„B!„B!„B!„B!„-& ÊB!„B!„B!„B!„B!„B!„B!„Bˆ3vvBq¢ ¡gï'£³ÃB‡t½³£±™QU…òRWg‡"~#¬vf³ÒâªÎ%àd¬B!„B!DG SÃH1÷¢À[À>÷ÞÎGü˜œ!¶/žëðìZÐÙá!„B!„B!„Bq\‘e!ZéÒ«¦ó‡ûnn°|ßžý\sámíÖV?¾žÿ?Lf¯<ó¦$( qúøìñ$Ù]wþ÷ (qU7Û>¹o$7üy$¯ýs‡ÒKÚ#ÄNõîÜ+°Xÿòõ'—³tΞŽèè£ìÜtß(º$‡ãà­gV²è‡Ý­ÞϤ zsñ CÐ4OÞXÏÒ[ÿY OàŒi½èÕ?šÐp+.—‡’Â*²–²iU&Kf§áªò´z¿âøbs˜¸ã¡±téFTlŸ¾¹žï>ÚÒÙaÔ±Œuw íÇ…=»5ºî‰Õ›˜›‘È…B!„Bqš•8³bæù¢g%AYtË„?£X‚ÐÊr;;!„B!„B!„B!Ž;’ ,„Bˆv¥* qÙN´¨Ôf•ÇKµ¦ù-Ó¿Á¨róý£éÚ3œ¾=™¯¯ç§/·K…ÑNlfÈÈÄ6í#2ÆÁõw@Qnºo9ôÿìÝw|uþÇñ×ÌöÝdÓ{HH%¡÷Þ‘¦ Š »b/ç§¿ó<=˽žzö^QÄŠ€€Ò齇ÞÛfw³í÷džM–Ý„„l@¹ïóñðáîÌ|g¾;3;á±3ïï§]Uq¯»{“.ìæ5M¯T£7¨‰ëb¤ß°D¶¬Ë£´°®C}ÎÞܱÏkÚ·ÓÆ¦ÕtjAAAAøß5@;‘Ú1ô×ö'JC¹£Œ«‹fù]VBbŠá\ff’©î†VÒRá,g“å7>©ù¶ý>mÒTé|÷U›ûseÑ¥ìohú}DFfŒ~“õSé­éK˜FƒËÊQûQVšWðyí§Ô9;a@CIF™>UÖdñ½‘ôa¸ìVœ•¹Ø­Ä¶y.«HQ8=”] êk÷ëò› a«ï2A7AðÍ€ *îëzÿëReƒþ"Ð 9\pAÃ0}޼Nû‚ ‚ ‚ ‚ ‚ ‚ ÿ“Îú€²Z­âšËf’ä]5/6:’ØèHúöÊâçQ]#n° mck°akVùÍvB¸Îj+‚ðG¤W)Ñ*þ7¬ë—çPRXËW÷bÀÈ$$ zŠgÂù™Ì{ÏÏ52ù¢,b‚¨*7wÚvn»àKÏëäôpž|oZ§nï÷"÷P%%…uDÇPp´šü£Õmn?î¼ ¯÷Ÿ½¶‰ÕKƒ £ tI E§Wùm{:¯ ´Å™ºÖ ‚ ‚ ‚ ‚ ´U/Moþö7zª{yM×Hj¿Ë+%%OG>ÏhÝX¯é1ŠXÎ5Lc’~ V<Ħíç³Q/úlS))ÉVw'[Ýé†ÜX|-¥ŽÒ€nW7ã9”i£½¦Ij%Š˜l1Ù¨zL§þópÕv»‚p*Ôý øF÷kÓ-„“%0þ —r³Éj ÊýL(ž.1~½ ‚ ‚ ‚ ‚ ‚ BÀœõåi“ÆxÂÉ+Ölä·-;q¹\tËHaÊø‘„‡†péSxç£y¸Îp_AAøã;¼·œXA—”Pf\݋ĔP¾ûxÇ™î–ÐA Vߺ±çeàt:YþÃAvg›Û'¦†z^ïÞRÄŸïò¼¯ª0sxoY@û+M\ëAAAAø½:?èþö *IE®=—Ŧ…l³n%ßž‡©…jÄ7…ÜÊhÝXœ8ø¨æ¾­ûš:g=5½økØßHR&ñÏðGØbÙD±£ÈÓî¨=‡ó ¦¶Ø™§#Ÿ§›:‹½ {ȱñš¿Ø´ˆ$e2?˜¾c»u;µÎ¢ÑL :ŸIú)Ä+øSè_x¨üÀìœF¶½?"‡%aÛ5GÁ\–ä hT=ÎC™59$ͨ?aYôP@·+í%GBØ“€ ¶½PûŠÿåBþú‹Ý¯m» î÷ò’ ª`˜ö\NAAAAAA´³: j ¦ïî€;œ¼tÅZϼ_7m§¶ÎÄ•O£k—ÒR’8x$÷LuUA„³Ì±#Uü÷_«P($1 Š?’,¡TºK¸\.ì¶¶~Ï„êJ ß}rjLCPSe–òbS ºÔ&´ý,ü±ˆk ‚ ‚ ‚ ¿'Ãu#y üa.ÏT>ÉWµsqÒúïa22] ÀG5òjÕËžykÌ«8аŸyñß¡“tL6L壚÷=óí.;…ö‚×}µñ:º©³hpYy ì>NHG.­_ÌÒúŸš ¥}Ðv€u–5(#•Œ×ŸãSa9ì{—bß»šm×Yv{ÎZt ÊŒñ(ÓÇ|»‚Ð.J{ äpÖ@åßüŒ5#›ÂÉæPõ/hþµ·ç‚yH†ÓÒkAAAAAA„ÿ)gu@9=5 I’X·q«Ïü=ûQSkÂl W÷ŒN ('&Åóè³'¡Kß|±€7_úà¤mtz_q>#Ç ¥KrzƒŽz“™êª òŠØ¼aŸ¾÷e‹í55çœ;–Ñ㇓‘FhXv›êªZî?ÌÚ_60ÿ«ø)Ï\ŸÃ#Ã:r ½ûõ -3…Øøh A$ ,f+…ùÅ,ün ó>ýÞïvGOÎŒKÎ%«GZ­†¢ÂÖ¬ø•9|EeEUÀöÏ™6ý¢)ôÔ›ÔŒ®ÄÄF¡Ók±˜­ä+`å²µÌûl>¦º–S³o»’CûAHˆ•ZEUE;¶îáËO¾eç¶=-¶•$‰ SF3uÆDºe§l ¢¡¡ÊŠ*ŽÉcÏŽ},Y°œ¼\ÿpd÷ìÆ%WÍ ïÀ^„†…P[SËŽ-»ùü£¯Ù¹µåív„R©ä¢+¦3iÚx’’@’È=rŒ% –Cãu¥5í9¯f\r.÷þóNŽÍçŠé7µºÞCûòâ[OPVRÎ…ç\í™>mædzôÎ"-3…Ȩp‚C‚QÈ2%Åel\·…ÏÞŸGa~Q+kv;•ëÕ©š–Ò…~Qᤆ­×¢S*±Øä×Õ³ª ˆ¯Åd³·Øþúî ˆ‰ J«Å¨Q¡’eª¬ ì,¯äË9ì*oùû«S*¸(½+#â£éd@¯RRo³SÓ`£ÀTÏúIÆ IDATæ’r>Ûw8àmK 2ðð¾$éùöP.oíÜצ}Ö7*œ©IôŽ #T£ÁárRim ·ÖÄ®òJ–äPPWïY^­YzádþõëV–+ôYçO3'£’eþ»m_Èñ»ÝQ 1ÌHM¢[XZ…‚¢z3k Kø|ßa*­¾O‚¤ƒù`ÒHŸé?^0ÉgÚ¦’rþºrƒßíf‡‡pqzWúF…¢QS×`cGy%_ìÏagy¥ß6˜cHm ì)U2ÃÏIaÀˆ.¤dFªA’$j*-”Ö²}C?Ï?@]€÷—\FëûO¹Þƒãùlå5>Ó?øÏ–|½×kZT\}†$Ðs@, É!„FêÑj•(”2³ò¹+ùâí-”Ԟ§o]ïAñÜ÷ìî.ã¡[ž´Z£`Âù™ •DbJ(ú ³Ú* ¥…&vo)bñW{°˜[¾~œ3#“éWô "Æ€ÙdãО2ÍÝÃÎM¾ß‘–ö3ÀO®aå¢C-n§¥¶£¦¤1jJšÏô‡n[ÄÁ]¥­¶mÏñõ´iÇ~ÖêUœ3#“´ìHb‚ ÑdtŸ‹UåõìÙVÂây{È9Pá·}rz8S.É&1%„0ÆP-’äwØUʲïö³{KËJ™aã»2t\Wºf†ªÁawQ[m¡¬ÈÄÁÝ¥l]ŸÏž­Å~Û÷žÈøédôˆÂ¤¦¶ÆÊá=å,_p€M«µ¸ÝŽè50Žs/ëNZv$j’Ò¢ºûw"Y–5%‘“RINC£SRUnfç¦BÍÝCÞï¿ewüs$#&¦ðæSkùeáÁ×ýʼ‹ˆˆv?qw÷åßPœ_‹V¯bÜyé¤fE›h$8DCpˆ•ZAmµ…ý;KY4w7ûw–¶{?ˆp² ‚ ‚ ‚ œz¨{2+øJúk&‡Që¬a›u+ŸÔ~Äv«ïý×@´UJJ. ºœ©†i$©’‘ȱáGÓ$Z¾G£— ü+âqdd®xM Úô#QåÖ[ÖøÌ/q³§aý5‰QÄ´i±Ê8n¹ €w«ß&×~Ôg™æÁäm·ne¼þ4’ù¤Aëöiy»Žüm(3Æ#)5îò³®ŽoWÕ{&Ú‰ÿÀY™‹é½™­.«HŒþâ×pÕ•R÷¦oujElTý/GÙ¥?’. —µGþV~ûGÁöÖ×ݶþHºô³ÞCOÆY~˜ú97à²zÿ–.©ô¨úÏB™69, ImÀÕ`Âe©ÆY•ãØF6|ØîmŸŒføÍ(’† G!iCj\õ•8 ¶Ñ°yÎI>¯„*kÊÓQÄd!i¸ìV\õ•8+rpíĶ{ΪÎùÍõ¸Ð@ÝpBÕàðý €à›Ýÿ·ƒêÇ¡¥¯Š«“ÆUfŒCÕû"±Ý‘”œ5Eد¤aãǸêýÿ–.‚ ‚ ‚ ‚ ‚ ‚p¶8«ÊÆà l6êLõ>ó]À¡œ\úõÊ&!®í7“ÛëŽ{o$3;€«n¸”ÕË׳k»ÿ @H¨‘W?x–äÔ.^ÓƒAƒHLŠG¡[ ûvïÕGž¹¸„X¯é*•^Gl|4õ&s@Êg²ÏïÌy‰¨˜H¿ë V’‘•Šv‰ÖgžB¡àý•IçóšžÔ5‘¤ë9ïÂIÜ÷§G:-{ºÝqÏ ‚¼‡…6éÉÌN'3;™³¦sߟaï®~Û5ˆìž™^Ó¢b"?yc'Žä™G_bÁ7K|ÚiuZ{ᆌà3=.!–¸„X†ŽH]­‰¹Ÿ|ëÓþ–?_ÇU7\ê5-<"Œ1çŒ`ô„á¼øÄë|óÅmÚmeÒóÜëÿ¦gŸl¯éÇ÷UkNå¼*-) 4,ä¤}  ¤¸Ìkú÷Þès|ºÄ‘Ð%މçŽáî›dÏI‚°í½^uÄí½³0¨¼ÿ TJ2ÃŒd†¹0-™¿¯ÙľÊj¿í‡ÆE‘uÂ>‹Òi—ǘ„XžÝ´“…9y>íŒjÿ;”dc×ô`µŠ`µŠ„ =²$ù °v¤í‰Ÿ=3ÌÀ•Y©¬.(fw+"($‰»ûõ`ú ×X% bõ:bõ:ÇDb²Ù[ Ÿ …$qÿ ÞLLŠ÷šžl )8…s»&rÿšM­†…OÕÍ=»qeVª×´0­†Ñ ±ŒJˆå?[vñí!ßEuŒN·ÌžQÜùÐh"c}¿Ç‘±"c d÷eÅ‚–Èí5nZ7ýmX‹óµ:% É!$$‡ðù››¶ÝŽÒóÀ&×Åè5ݤƤ&6ÑH¯Aq,û~?´PNéáy­ UÐoX"ý†%òÞóëùé»ýÖÿ?‚¨WÜ6Àï¼èø`¢ãƒ=%ÏßÚÌüOwú,£gÌTßðudŒÈÃÆwåËw¶òÍG¾¿EÅñ×ÇÆ’œî5]¥­.ˆ¨Ø ²ûƘêVk•ÜþÀIöš®£ÿˆDúHdõ’üþÄ\ÎÀi§\œÍ5w òšvü{s2Æ0-÷<1ŽŒQ^Ó£bƒw^c§¦óék›X8w·g^e™ÙóZ§Wµºþæ÷Êrw»¨WÿißåÃ"õ ›Ìà1ɼýÌÚ€^oAAAAøcº#ôÏ\gœí5-\Á8ýÆêÇóLœ̫û" m ²W¢^§—¦×ô,u6YêlŸå›»$èRBäP6Z6´9œ Pçªó¼î¢Lf¿ù,.»S,v´m`:€ÛCþ„VÒRd/ä“ÚöPûhú°§aw€ÃÉ­S$¸÷½£xO@ÂÉ®:÷€x’.ô¤ËÊz÷¾vÖúîkͨ;Q¾Îkš¤o¬ø<ËÏÏ`Ûêÿ~tGÚú#© è.| 9<Wm1æ¯ïò 'ëBÐ_örDŠ÷t­IkDí‚$ËPV¤Œ@ÛÃ{»ÁÑ(»MD™9˒ǰíôà[RéÐNeÊpŸéRˆ9$R†ã²ÔѰù³€÷û¸àÛA7Íýºæy°®÷¿œ2 T—ÓGà²uZ—|É ´SA•í¤—ÓQ‡_ªç Ìßüå”Âï‚ ‚ ‚ ‚ ‚ ‚ gu@¹Áæ¾û¤V©P«Tž÷Í.ýû%:Ö;tÕjàïÚ[.'9µ ¶o¿òëVo¤ª¢•ZELlݺ§So2ûm›–™Â‹o=Þ Ãép²dÁrV¯XOA^!’$BÏ>YžÑ>7V³Ýµ}/‹çÿÌáƒ9ÔTÕb³Ù6‘’žì·í;Ö"ýiÑ æõ#µ5uôìÓÙ·_IhXO¿ò×]|¥'„AÿÈV,]ÍÜO¾¥¶¦ƒAϰу˜uíE„G†ñÌ«rý%wR^ê;’óû¯ŠÝn§ ¯ˆºZJ•’ì™Üz÷õ$§tá¯ÿ¸ÕË×S]UãÕîÿú“'œüÓ¢,üv)e%¨5*ºÄñÐSC¡Pøí땳/ñ„“7oØÎÛ¯|Hþ±Bº$'pÛݳéÙ7›?ÿývnÛͽ þíá?{ÂÉ ¾YÂó—aª3‘‘•Æ%WÎ ½[j‹mOå¼*-. (Ø€J¥ÄÖJÕà°÷ƒ'”[ñÓ¾ÿr!•Õèõ:z÷ïÁu·^!ÈÀƒOÜÃU3nÁåj9˜ÕÞëU ¬È+bÞjm6ôJ%Ã⢸,3…p­†§G䆥«)·X}Ú½¿ëv—‹S=&›¥$‘­½º‘ÄÝýz°º ˜šïkÿµÙé$ƒ°9¼³s?ë‹J©²6 ’e¢õZº……PßÂ1èHÛæ¢õÞƒ&Äèu­”g÷Èð„“wWTñÅþ#äÖšh½ŽG†öEÓÂ÷¨#nê™é '/;VÀüÃyÔÚlôŒåúî„jÔ<9b³—®¦Ôlñ´Ë©©eâ7‹ÃCCú0ýûŸ°8^Ûpú9¯è–ê 'o)-çíû)¨«'1ØÀ­½ºÑ3"Œ»úvggyO¸æêNé=¢xà¥I¨T­ÜÔT5ígK}Ó¹­Ö(=ÅÝN¶ljͱ۽$S©ÛvÎÔÕX)-ª;ù‚§Áì{†ú„“OTQZï©2Ý^WÝ9ˆÍkó¨(mئù~–$ µ¦íßµæm›‡E'v›ïƒ}Îfh;z|;“$Áå·ô§¬¨ŽuËr¼æ;Ôòµì¸‹oèËÖ_ó9²¯Ü3M£Urÿóç›è}|-f;’D‹U¬»åïÃ}ÂÉ'9)•c‡+™ÿÙ®“ö±-º¤„rÕO©­B!ù '7'ÉWÝ9ª 3k:@UyÓ¿§µº¦}’˜Š˜ê<çïñ}f6Ùh°´ýº'IpÝ_†°í×*Ë|yAAAáõÆë=ãß,y­úòíÇHR&ó§Ð¿Ð[Ó—{Ãïc{ÃVö7ì XÛÂö„“¿¯û–¦ùÔ¹jé¦ÊfVðdª»µØçi†T8Ëy.ê?dª²ˆPD`r™ØeÝÁÜÚÏYç§Br½ÓÄž†Ýd«»3ÛxËê—Pël šÖ¥«*›ËÆ’ú¶ ¢Je²ÁZ|£úU\ mj$‘¡Êä²à+§Ÿ€ÅeᥪçÛÔ¶#$MrTê~³PfŒÇe³`ýå?[¿³®¤q;Á P£å©¤w`èjlsœz𵞀±ãØoXW¿†³*9, Íè»PÄ÷F;î^Ûp–ìX[¿}ÔÑ]ô ŠØ8k 1ϽgM‘Ïrê¡7ºÃÉŽ¬«_Ç~d ®úJPªƒcQÄdájèœßàÖ¾N;Îê|\Ö:•(b»£}rxW´îÃ~è\fï‚5ÿá 'Ûö.ƾó{œu¥HJ Rh"ºs9ð÷¤šÓÏ„ ëݯMŸƒinË˪û7½¶,ïÔnùÐŒ¼ÃN¶í]Œmû7¸¬5(âû ~3’. Ý…ÿÁôÑ,\µ%'Y› ‚ ‚ ‚ ‚ ‚ ÂÓYP.,*õ¼îÞ-­;}Cvf³;À¢Rµ^¬#–/^Ef–»’\uU ›~ÝÖêò½úv`É‚åÌùð+¯y¥ÅeìÜÖrEß{ÿy'zƒ‹Åʽ·þ“m›}+ÛmX»©½á¤~}^·rƒßJº{vúÞDŽfÖÕ3XøíRž|èEϼ{³yã6ÞÿòUŒ!Á̾íJž~䥓nÿbßîƒìØÒT‰o×ö½l\·…—Þy’°ðP®»å žì¿>íÖ­Úè3mõŠõ=rŒO¾}µFÍX² éÎoFVš'¬ûí xþñW}úòàã÷ú (GEG0û¶+X¹l-ÿ¼ç œNwøª²¢Š»oy€9óß&2:‚Ë®žÉc<†H†Ë2ºòøFïQçuŒNY–¸ãÁ‘^áä»JYúÍ>rT`1ÛÐéTtI ó ¥ÞvAS%‡ç\HLB0;+ä©{jw_vn*äÈÞrjk¬4XhuJ¢ãƒ±Û|ðg‚J­ ïÐÏû=[‹yû™u”סTÊÄ$éÞ/C°æ¤ëZþÖ~³— .¸¦Cƺƒ­j‚!c“YôeÓu²ù~NNçÉ÷¦µ¹ÏÍÛ~¸ìJÏq^³ôo<áû dKmq|OÕçonæçùP©Œž’Æ¥7õ󄥯¸mVÅÑ,X]V\Ç«ÿZEÎÁ ª+,XÌ6Â"ôœwy&]è~xT’`ø„¯€òÄ »y…“wo)âg×S”ç„àÕ¯/&,Rï·=Æ1l|WÏûßVåòù›[¨(5Ñ5#œîJBW÷Ó.ïÉ_îÅ€ózê¥Ý‘eÉóþçùXôån$IbàÈ.\zS¿ÛŽš’æN>°«”9¯o¢²ÜLÏq\s× Ï WÝ1¿äb³9¨,ozXQÛXA9*6ˆg><p/þ}×b ÉÓ¾y¨ùD_°_$8DÃŒ«z1htÐô]øq^ËÿfAAAá쥈ææÛX^ÿ3/»ÇSÁ·ÂQÁ%·òUü|¢Q\| —?¶ªL&ê'ðqͼ\ÕtŸeÃ>šæ³ªË¯¨$ßûºŠHºªÜ¿iOÖ{W3UKjFêF3R7šwªßäÍê×|Ú¿Tõ<¯F¿Eœ2Žb?åÕª—Yeþ…šÁ<ù4/V=G‘½°MûðãõÈÈØ øÑ´ð¤ËËÁüœ¸ÚkÚAÛ.À'ÄH’&˜ ;½Sβƒ˜=Ô¦ n[¹jû’„lˆÄYãÞîpp¬«^Á‘¿Õ½Hp´»5MûZ ŠF3ìfì–cžŸ§º³£¾ó¼;0Ìþ)( õ€+±,z8 mý‘‚¢Ð_ô rd:Ί£˜¿ºÃo8šªQÛöüHÃo{ÍsÔ–tje]ûßß í‡Vâ¬ÈÁpýÝ1P*„ƒé‘•NVcøÊbmÛ¨Õ§â“wçòà_çµÞå¦ËÿâSaöDU•î;gÝ{w#$´õ*Í¥wKõT}ýàÏü};˭ϓά±Ûí¼÷ú'>ó>ÆâùË8çܱ(•gu–Ÿm›v²à›%Lž6®]Ÿ÷ØÑ|Š‹ÜaÙø.q^ó&ž;«µ÷^ÿ´]}šxÞ8Ô56›žxÍN>Îb¶ðÕœù 9 ]ënÍ„)ch°6ðá›s|æ;h¡ñ©žWÕU5˜êÜ£ÈèdYfúESèÕ¯;£' ÷¬#2Ê=j|Þ ¡ÛÖ,ùa9N§»Ï™Ùi­.ÛÞëUgÙVVÁÂ#yLJJ@Ù,v2ÇêL×»«ÌÆ|ÃlU×ûìðPŒêö NÑ‘¶Í}º÷0­ÛÂ;öró²5T·ò7èøçwº\<¿y—Wà·3MJŽG–$ìNïï>è3ÿhm‹æpNR|»ŽQk&&Å£VÈØœN^ܲ˧²ÅîàëC9 Žõ­<¨ctºôžè žüºü(Üñ#«—&ïHeE&Ž©bíOGظ2·SûòñË™óæf~˜³‹%_ïåûOwòγëøà?:u»m¥PÊ^aP‹ÙFia-v›‹ÙÎу,úróÞÛzÒuÜ]FÎ Ž¬à­§×âhœOÍŠè”þÿQÕV[©«±RYVÏwŸì`ÕâCžyѲûÆz-ïrÁšŸŽŸSM]»ÍIiQ¼ø+Ç7 FÑ%5Ô«Ýñ8¸«&¿ôÐ/žpòñõ¶dâMUsÊŠM¼òÈ* r«±˜íìÝ^Âk7=ˆ¢!-;0Ǹ߰¦À|q~-ï<»ŽüœjòŽT±bïu³¹ñÓ3=¯­;ÏÞ÷3{·—Pœ_˲ï÷óý§Mÿ&ÐÑg¨»š}óêÞÇÊ™½¢=ÓRºE Ë’g¸÷IKÊKL”Öqxo9o<¹Æë»¨ý$‚ ‚ ‚ ÂÏTÃy¨% 6—g*÷Œ3»ÌÌ­ý €aºk;É0€—•wjÞòé—.üÿP”©júh^ÝÜ\|=“óÇ1æØ0f_ë{@ÖCn¡¯Æw`¹M–ßøsÉÔ8«IR&ótäó,O\ÃËѯ,óBå³|Yû¹ßmŸ(Te’ÞýYæÔ~Œƒ“–çÂ…Ýe÷š–ªJã:ã èeC›¶{j\àôÞ®‘ŠfðuHjÿžÒVÌոܿSIA¿íK2ª^ Hèƒ2c\Óö îÁz•Ç<ÓTÙS@©‡ ˲§=cÏúmf¶|à©þˆ¶'’ÓÑ_þrd:Ž¢]Ô~C‹ádW½ûYE\O$]H«ë>]œ•¹ž>K¡‰^óTÙîó»ëZßïàé`¸ÁeƒÚ× …¯¼‡Ü¸[§y|ZeöTdpÚiX绯œG°í^à^6k Èg÷ó‚ ‚ ‚ ‚ ‚ ‚ üï:«ï‚¸\.æ~÷#×_~!:–™Ó&¶¸¬ÅbéÔ¾üòSëUòšûò“ï<|)iÉ|6ÿm¾›»…ß-=i ±ßÀ^ž×‹¾[zÊ}=´>÷ìëE>Cq¡oV€5¿üÊ´™“Ñj5dd¥ú­Ä|6Yõó:οx*:½Žôn)ìÝuÀk¾!ÈÀ…³ÎcèÈÄÆEйÞL^nÆw(]£Q{µÉêᮂzhÿ*+ÚwW¸ï€žìÞ¾—òÒ ¿Ëär‡õBÃB ñå;¢[÷tÀÝçzSËýéÈyU˜_Dz·Tbã¢Ù¹u=ûdl `èÈü÷¹·ˆ‰w‡òµ= l®7S^VATt¡a'ø¡=׫δª ˜é©]Ð)¤…ÙwÂñ5¨”\˜–ÌØ(bôZB5jÌvùuõž`ªÆOuîyrIŠ1ˆO§Œáûù,ÊÉ'¯®åW Úžè—ü–XiîxEཕՔš;÷oUs=#ÜÛ=\]Kq½ÿïºÂR¦¥tA«Pbdo¾ƒ}?ïîŠ*Ê-V¿ËäÔÔªQªQ{BÉØct:ôèçîœûî\ÎÓB?žÿäâ’üd’Þ=’ÏV^ã5í•GW²nY–zGV’œî>Gú Kä¹O.`ùX¿ü(%µ§Ô'³ÉFI~§_¡{èîLéÈ~>™_dô”¦Á.R³"عɻjŒ$¹«M'$‡¥G–%êj¬˜j›¾«:ƒ÷]RÃ<¯÷n+¦¶Úÿ÷ߟîý›¾G¦+S/ÍöîÏ ($t eïö’6¯ßc¨–pçý–uymn«R+¼‚ð›×æQWãýy×þt„‹®ïãyŸÕ;†ßV£´°Î3-(Øýﮬ>Me­NIrF8uÍö_q¿gãwAAAA„SÓOÓ€ Û)s”ù]æ°í0arar•ÎÊ·ÍRwà€íõÎöý¦ªhïéŠ'¼æí°nãÎ’[ù>a!r(]ÊVëŸu Ò&X6Rï4ñ«åWh¢‘4\gœM®ý(kÌ«NÚ—©†i¨%5 .+ LóÛÔÿ:gÃŽ À(‡ÐU•ÂTÃy\`˜ÉDýd”‰ÜT| ®À¸í²ÖQûâP$­9¼+ªîç¢êuÊn“Ð…&R?çFpf»®ê|¤¨LdcŽ‚í(â{#iÝ¿E)»ÇŠ»b¶dtˆìªj (+Ýç•£p.“ÿóÊYî>¯$]’. —¹²Ãm›SÄd£x’.ÇÑ ˜¿»—­Þg¹æl›ç ì:9"Ãìo°m›‡m×8+;w@RI„ªï%(»G2Æ!ëÃpÙêqVó„¥%¥Æ«"Æýt”ÀUïÿþlgkø ÔARAÄ›Pq;ض¡a+·V”)ÞX‰¹â¯`?Òñ~¯Ží(=ØbHÝ~xª^ ©´(¢3qíîø†AAAAAA~gÎê€2@^A1/¿ý)£‡ #-™à`U5µ<œK¯î™ƒ ””™lþlX»‰îþ7÷>x'Qá\}Óe\}Óeìܺ‡¹Ÿ|Ë/?­ñ©& M•Wkkê¨(?½CÿÑúÑX…¶¥©{^Sp%"2¼Óût¦6 KFFEMå®iI¼ðÆcDÅDzµÑhÔ^WIò«i´?tüõГUÛžtycHp@ÊáîXJŠý? ÐšŽœWùÇ ÝåøF€©ÎDrjâb)Ì/">ÁÂÊËõƒŒ¥1ت>!Dþ{Vhjz¨#R§a_³gAºƒxnÔ ¢tZ¯6…‚ÐfŸQòSÔwCqÿ\·…¿öïA„VÃUYi\••ÆÎòJ¾<ÃÊübŸª½h{ª"´î‡C Û˜Ôv‹Í-o·¨Yp9B§ßçuNa»îcÚ'2œ_.žzÒåƒÕ*¯€ò™8FÓTùÂfsP”wj!Ûÿ/?ò ½<Ù IfÖ-ý™uKöm/aþœl^Óö èqõõMçZã;°ÐäÄs´yH ³g7Ý7œ„äÖÄhþo•Jáµß+ËZ¨¯9µV‰!¨éºŸœNrFëÿnÓwüoaÑûÁ½êж ¦õª^’ïû½/-ªÃåjú;áÞÏ•åfv' ¥ì™Öý„*ÖÙ}cØ»­¸Õõ·w·Ë IDATD|AAAAˆT¸+ÜöÓ `cÒ¶“.oT„xBÆi.»×)±·Öį`9ØóZ-ihpyWïªgYýOÌ º˜~Úþ>ío¹k³)´rKÉl íÈÈŒÓOà¶;IVuå™È¸¥x6;v´Ú—ñúsXnþ™Zgû~ó­qV³Ýº•íÖ­¬2ÿÂKQ¯Ò]݃™AóycåéÎà²Ôà(ØŽ£`;öC+ÑÍ|ELwÔ}fÒ°¹m•£OÆY•‡•é +ÓǺ·m­CŽHA‰ÇY]€’и|S@Yj¬ª¬HìOð=¿t[’Îè w¤msÊÌ î.Ö ïŸ4œ `ÏY‡ùûÿC{ÎýH†HÔCf£2GÁv6}†ýÀÏ>AŽHEÑ‘‚£½¦KJ ]Xó)ÞóƒË®šö݇ ¤Ú7Aþ BE4D¼e³Á‘ïyW㘎r¨ÿùà;+›^ÂñóÊUÛò€ÄÎfûñøò‚ ‚ ‚ ‚ ‚ ‚ g›³>  P]SËüÅ+|¦ z†î ÀѼ3w“ÍŸÕË×óëêߘ0e 3.9—ž}³=ÿ=|ŒGî{šƒû{7j¼è:CÁ«?RŸ¥Æ ·u»gjŸžNJU³»±ÍîEK’Ä¿ŸûQ1‘X­ ¼õÒü²l e•¨5jâãxê凈ŽòYgCcõS…Bnw$ÉÝÆépâp8Nº¼J˜»ÉǵÝfowÛŽœWG¸²ˆm¬€h½ÖÏZÝVókQ)ã»Äq~jzF„yþ;ZSÇ¿~ÝÊÁjÿ u¤í©8þÙÕrû¿GÍû‰œ|»ÇWÒþmuÄñÌžÓåÂц•úÛ/§ûнÁyVWOwø±ÞÔ€T(d4Z÷?GN³Íky»ÍûÁ¬ÂÜîŸýç_Ù“1ç¦{UáíÖ;šn½Ç³ym/>¸‡½íu5þ«½ß•ߣŽîçÖØZþ›×ÅÈý/Lôl«­ìv.§ËSéXoh{€X©<…k££ãß³O¥ªýýh}ý’×6Ž_]Nå%&¢ãƒ ×mðT<6Õ5`RÓ½o,ù9Mƒ¶´µ‚²{ýÞ}AAAá“Lã=Ø]'¿G£¦é÷œŽ´=ΆÍÏ’­k^]8D6RêðL¶ÐîN8F)¼ïiÅ)ã¸Þx#—ÿƒB{Nœ,«_Ê:óÞýˆtU7†ÜÂ_Jïl±áŠzkÜ•U2-i÷çhn­y5;¬Ûè¥éÃPíðN (7g?²ÖSáXÑu* \‘€€2s<.s% >B3æÏ(ÓÆÒ°ý+$}8.›Å«*­ç·*—œm¸‡§h>˜í©·mΞ³E\O$M0ú™/a^øöý?tuöƒ¿Pwd-ªn“Põ¹È½_ã{£‹ï³üæà,Ýò~µ™„núSîp²ÝŠuÕ«ØþŒÓTޤP#…&¢¿à¤àŸ–.{c°_>³ƒZ~‚Ê:{äpÊo§Ÿr¿Ö(bAÒƒ«íã_vHÓ}´³û¾Ž ‚ ‚ ‚ ‚ ‚ ÂÉüO”[2t@o$IÂér±{ßÁ3Ý6›ç/ãÇùˈaÚÌI\võ…$§váåwŸâš o£¬´Ü³|E™ûŽ\°1ˆP#ÕU5¢Ï-(+-'#+•Øß¯ÇÅÄ5(]QÞrYÐŽ?O¡Ñ¨Æj֕ͪYgd¥Ñ5- €§þK®ð̳ÙìØ{“ÉÿÞ‚²{u#½[j»ûsüý¼d%Þ÷L»ÛŸª¶œiÛÒyuäàQâbéÞ«qñ1|ýù,[¼’Ûþ:›1çŒà·_·"IGÃy–‡"›UG®°4U:È5ÒÕÀ3›vòSngžÍéä@U &ûÉ0±9,>šÏâ£ùÄtœ×5‘K3RH6ñŸ1C¸né*ÊÌÖ€·m¯ «n5pݛӉÓåB–$ ªöýÉ/³XIb º—‰Õ7Ík~Œšk^­Xâäa·ãÛ]žWÈ¿~=yu–œÎcÔ•åMU¨u±‰FŠòÚÿ·ÐëïÉiÌžx-j^ÖŸÞ¼Ðë}Ÿ! Ü÷¬»êÄá½åJ›8ÞAÞ“}Þ@iïñ Ä~nIX„÷5¡®ºé{4aF¦ç8¸\ðñ+YÿsµÕT%·?0‚£’|ÖérAY‰‰¨X÷µ=-;I–ÚØ7›°Ûœž€ðš¥Gxõß«NùóµUM•wÅäèøà–ôU]iÁétyÎŸÈÆÏÝ\l‚÷úšW•.È­!:>˜}†&xú³ìûý\xMo²ûŰu}S%ñ¼#U‚ ‚ ‚ ‚ ´G©£„Lº±´~ –ýý´·SÄ·«@Y³@rœ2Áo@YÙX:Õîò¾‡0T;¥¤¤ÌQÊëfŸvõ®z¾¬ýœûÃÿI¯ÆðqKÆéÆ##cuYYoYÛîÏq¢bG1½€0EØI— $W] ’®•²´íä,;ä^§1E\Odc<¶­s±í[‚fô](3ÇcÏÝ’„³âˆ×hzNS2ݰí[ŠeÁíÛnÚ6ç8¶ ëOO¡»ðEäˆTtÓžÀ¼Pƾ· At‡ ÛîØv/@6Æ£ê5Õ€+#RÐ_ú¦/ÃUç{Ξ EL7ä÷½YË’cÛó£gžËaÃU²WƒÉïOÍ®êˆí•¾t„u=Týže„¿å7ƒë„ñ lÇ šË 楧§ÇÏ+)¤åë•ÜX-Àe*;ÝAAAAAA8í[êë$&*‚QC°s÷ª:¹’âè ùüÚ‹ˆoè ¨ ˜wþû17_q7v»`cSgœãµÌöÍ»÷(Г§OèpŸ;ê÷Üç[ÜÛMËèê©X{¢‘c‡`1[8°÷°ße¬V÷ˆì:]Ë!¾ÎhhÃÇ ÀápphÿÏôðˆ¦œXû$6®s?Ä‘Ð%ŽQㇵ«íñc4ph?4š¶WRì¨ãÛÍê‘áÚnOÛS9¯ŽÊ >!†IÓÆ°tÁrJŠJÙ¹u½úugàÐ~>˜Ó®~µWG¯W2¼1Ìíp¹8Üì¦Õx^ РE&3ïî:À­?¯Åît¬V1%9±SÛŽJˆaVfJ«`€=î`Yz¨ñ”BÊåÁá®Á¾¸Öìh@"5$˜½ÿ>Žh<Ï-v«ý K³@g[BÒÇ·; :"0#ôwäøv¶}Û½«¡_zc_ŸÊ¬maµ4U"‰ˆÒw´[mfnV¥ 2¦}çY{IÍÁ6›ƒÍkòxýñÕÜ=ë*J›œý†uÎñ­«ñµGǵ=”ÚgêøúÓd¯÷¹‡›Ûˆiª-Ê«áÇy{¨ª0ãp¸°ÔÛ°ZZÜóÚQÒ¾ÊÌö£¿ ‡&¢L°>*Ë/Pó²ûµª'ßî»LÃNpº_®á´=sü¼RD¦{‘›S¦Àe3·ûX´Ç¤I“¸ñÆILlÿ½‘3ÕVAAAAA„³Çÿd@9=5‰®º•JI©ž…?­ìÔí]qýÅ<þâƒÜ~Ï ¼3ç%BB­.¯T¶n8rè(5A½Ð0ïõìݵßx¼éΫéݯG{Þv´>/Yð3‡…BÁìÛ¯ò™Ÿ’–Ìäéã—]޽•j¬e%î€ItlѱQíêGGÚž*¥Ÿ€`l| “§¹ož¯Yñ+–f•P+šUSÎîѾѲ—.XNyi>~/ç^0‘ðÈ0‚‚ ôèÅ]÷Ýâ·??Î_†Ýn'4,„¿ÜŠO¦ù¹ñ×ïh×v;r^å9†Ýn'&>†‰çŽ%ÿX!;·íñ,+IWξ€Ãr:ð [×ÞëU (%ß?E±“’Ý#ޝ-(Áâh çU6;?³ÂBÚ¿½V*ž©©£¶Á¸ ñŒïHÛæ.ï–ÊcÃús[ï,Þ?£ZÕâ²?s?U¡$®ÍN÷™/KR«Öãç1‰±h•m?Ÿ—æàp¹PH³{døÌO11))Á³¬½…J§%õMt Љ<évÍÇîtªQóç¾ÝQ´3­¨ctºü¶êUͪ(ß•_šÌ° ]‰O !mÓ»G“Ì´Y=˜|Q–g~Ei=Û~-ð¼ÏËiú·Y÷~±lX™Ëá½e”¹Ï•ì¾îéù9UmªD-‚ ‚ ‚ ‚ÐÜÓ|ì.;arÿv? ÚþÛrGÚ.ª_€ ü=üvµ-s”±Ãê ž«Ÿ†Nòx³‹² £t£øÅ¼Ük^¾=€De"Yêl¿ëŸ¨Ÿ@®ýh‹}‘é­î ÀöưuGŒÑ#SÝ €M–^_[)ÓÇx*è:ò6l½ÎŠpÚ‘q¨²§à¬Ês}ÛžE I¨_ç^¶ì W[ÛîÜa^]Úñ¹íçFGÚúã²ÔPÿåm8ò¶€¬@wîc(úú_Xnùº³ü0.‹{ð×@VªvÕWx^+b»·«­mÏ"O¥_íÔGQõ<ɤ F× Í¸{@nùžVg0}æ*®Ípº—Peñnð[:Àì{‚Ó²õð[|æË©¨ºŸÛ¸ì"p¶ü¼AGÜ|óͼþúëÜÿý|ûí·„†¶ý\:SmAAAAAA8»´­ÌטZ¥B§ÓLB\ ½²3HJt`k2ÕóÉ—ó©­3d-3aêÏë0#†ôáçÅ«Z\þù7Ãn·±ìÇ•ìݹŸŠò*”J%±ñÑœÉTÂ#ÂØ½Ã{”]—Ëųÿz…WÞ­NË+ï=ÍÏKV²ö— æãp8Ðô¤¦'ÂÛ¯|°ÏøGësqa)Ÿø5Wξ„©çŸƒN¯cþ¼©«­£gŸl®¹yJ¥’šêZ>xã³V×µc«»j®,K<øø=|ðæœN' ]âˆKˆáÿ~Ü)mOÕ57Í"<"”ÕË¥®¶ŽÌìt®»årôv»÷^ÿÔkùƒûQTPBl|4wÝw ­†Í¶Q]UƒJ¥"4<­ÎUW«µGî{šg_ûzƒŽûÿuw›ûYZ\Ƈo}Î ·_Å´™“é7¨7ßÎ]ÀÑ#yT”U Ö¨‰‹¡Ï€ž¼ðøk8šX;¢¸°”ÏÞÿŠ«o¼”‘c‡òÚGÏñå'ß’—[€,ËDÇF!+ü;r^ÙlvFÍNˆP®ÉNG)KÔ4Øø`OËçdn­‰Jka5·öê†B–8TU‹$AWc]‚ ¼±cŸgùR³…ödv ÎKI¤oT8ßÎ%·¶Ž KjY&Ö £Od8/nÙ…Ãå¼ Ô1:]l Þ|z-{j¼§:pvß²ûú¯`¾mCÇšU¬=n÷–"úh¡þÒ›úqéMý¼–)+2yUm —ÓŦչŒ˜˜ €1TË}ÏxW‹Ø³µ˜Ê²zÍÛ%±k¡:ÆOÏ`ütßÐ|s;~+huþ©r¹`ÓꘟSÅá½ÙO æìbÌÔt‚CÜו^ƒâè5è¼6µýeáAÆœ›NF¨fmýWÙøø¿q4 àçlzÀP’ ÞÔÀŽîs~ýЦÍêá †wÆ9!‚ ‚ ‚ ÂÙ¯ÄQÌ»5oqKÈí̺Ú|U7—ÛÊå¨%5qÊúkúótÅ8p¤m‘½k>à:ã ŒÖåØù¼æSrí¹(‰QÆ¢Zþýÿš·x)êUb•qü'ú¿¼\ù"yö<2Ô<þo”’’g5skçxµ[e^A³£ÂóQ/ñRå l°¬Çì2“¤êÊõýø¾î›·Ÿ¬êŠA`§uÇI÷³„ħqsYc^Í6ëfJ¥Ø]v"Q ÕãÒàYT8*øºnÞI××v†k>Ã~d Žü­8ëJÝÁaC$Š®CQ÷½p]mÛ¾Üf6e‡PDwCR¨hØÜtìû–À¸{<ÕÅ{¼šºjK°®Íð[Põš¢ËlÛæá¬ÈÁe*¥Ù"±–eO»ƒ£hÛ"»ó·w£¿ì-ä¨Lt3ž§þ³ëpVóZLñq9lØ÷-ÅQ´ —©JwH»÷̦Ï[´óT÷ªGÉ~œ5…ÈÆ8w X©Åql#.s(ÔHº0Pµð[­ÝŠù‡ ›ù2’Ú€vòCëWGT? ê¹ GBÈCPz14/xnš Úñ î†Y ÊpO³\ ø>9kŠhøíÔƒ¯EÕc’Zmû7¸¬µ(âz£zÈJ\–¬ëÞ |M›6Íó:,,Œ#F°`Á‚ßu[AAAAAAÎ.g}@yÒ¸ ÔÇkšË{öâ‡%+¨®©ëô>”—‘™•æy_RTÖâ²²,Ó½w7´Z ƒ‡hq¹5¿üÊò%¾•Ÿ÷ìÜÇÿÝþ=ùDFGpÎÔ±œ3u¬Ïr¦:“'ì«ÓëP´¸l¹Þ‚Ãá8#}„·_ùˆ¨˜H&7ޱçŒ`ì9#¼æ×ÖÔqߟ¡´¤õ`Çá9¬^±ž‘c‡ÒoPoú êí™W]YÓjȸ­m;zŒšS©”\xÙ4.¼lš×t‡ÃÁ“ÿ|‘CûxMw:]<öçxæÕG 6pσw´«[ÛÁÍ—ÿ…›ïº†!#¢j¬kª3±òçuL:o …—Ë·ºß‡oÎA­VsåìKHèÇ÷ÜèwŸø5ÇŽºG·ľz÷Õ aÚÌÉtïÕ‡Ÿ¾¯ÍëéÈyµo×2³Òp:]üøýOžé5Õµ¬\¶– SFãr¹ØßJ´£Ús½ •,sAZ¤%yMw¸\<õÛv5V`?Îérñø†m<=r A*mGåuY’ÈE«P0¸•j¾k KXžW°¶'*5[ÈhVºÄlneixaó.b :zE„161–±‰±­.bÉã¼”Dº‡‡ò䈖¯Ó'zgç~¢tZ&&Å3&!–ÿgï¾Ã£ªÒާ—ôž$„„Uª‚ÒDÁŠ¢«â®m׺‹º–uuÅŠõçêZ°, ‚ ¢téHïPRi¤·éóûc$0Î$$dBßÏóð89÷ž{Þ[æÞñÞûž3$Ö½ÝJ‹•§×oãd­©Þe8œN¦í=Ľ»¤Ó2¹WW·é«[‚2Àô‡Ñª”LLN ÖßÈŸÓ:ãÍׇޑsF'#¾ÜGçÓ®M¹¼ùô*îz Áõ'p´O ñš üÓŒ¸>™¨Ø€zëÆ¶oúˆã1ç³]tï‹ Î{»‚ص9·Ùí´idüé» øqöþf·WŸ¹Ÿï¤{¿6õî+_­ï™ZsÿÖçȓ̙æ> ̆•Ç8¼=œN¦65ŒQãû™{É:\ʨ›:Ó1%½ACYq-û¶çqÙ8Œ~®Q”v÷ß N‡“wž]ÍýOä²ÁqÞ]'¶ƒïFq(/5ñÖÓ?1ùµ¡õÿõ±Û¼õÌ*&¿:”ÄTïç+‡ÃÉŒoeó*÷Qy²–a1ÛÑê\/ãnY“ƒÍêJ`Þ°ücn=}]<´·¨Iq !„B!„BœòYù'è:î œD[u; þ›×ùfTL÷U¸9u?*û€`eãýo «¶SÂ_ktÌj×1­ücþt?½t}ø2Ú½SÞZg-Ožü+e÷,«Õ·eŸ5Þšx:i’è¤Iîñ:O¡½ÉEQé¨ô:ý\(C; Œè„6¢þŽ U…ÔΟŒÓì»vùûQE&ƒÓmß§Û3U`;¼ uòHp:q¤{Ôµlœ†B¥EÛ÷.”ÁmÑ yÌk–­3p”fû¬n}œæ*j¾} ¿;g¢0„`7•ê™wÍìšA¡DÝ…FºÃ€z—c;²ÛÁõNo2§Óâç1\ÿ. ]úáoRuûñíÔ̼ÝåA?T®û²Ns¶Ã«Ñ¤\óë(ÔžÏv[Š£*Þƒà—@ þwBåÇgÎ%AÈë ëÚÞ®-ͼþC‘hR®AÝi(êNCݦ;MÔ~÷Ϊ‹!??Ÿ.]Nß>q¢ñ¸¶V]!„B!„B!„B\Z.ùe³ÅŒÉd¦Öd¦¨¸„¬œìM?ÌÉbÏäž–òá[ŸA›¶Ñ,˜»ˆ½»Ô;¯Óé䩇þÉàaƒèÚ=…°ð‚Cƒp:œ”—røÐ1~Z²†‹Wãpxè·cËnn{/׎Π+û‘˜”@`pV‹•ÊŠ*ŽÉfÛ¦¨T*ìv;oýç%ºõLmòz=~ß3lÝ´³Ubö»ÝÎKOOeÍŠ \wó5¤tMB¯×‘ŸWÈúÕ›ùꋹ”6r„ÍŸ|»˜ÈU#¯ "*‹ÙÌÑŒ,Ö®ÚˆB¡ðš|Û”ºÍÝGgZòýJ45=/K#($òÒ vlÝÌϾáðÁ£^—³kû^î¼ánš8Ž^}Óˆˆ '0(€šêZÊË*(9YJvæq~Ù°ÍkýcG²xúÑ—Ðh5„…‡âp88YèJ|5Ö5ò¤Ùlñ¨çt:ùäÿ¾dÅâÕ\ËhzöM#2*­NKUE5YÇrؾe7åeuu|±­ìv;¯¿ð+—üÌø[FÓµ{ Á¡A8ìÊË*È=žÇ=‡Ø¼~«Çršs\¥ïË`ì£Ø¼n ù'ÜT/˜³ˆa£s<ûÕU¾™óLM9_ùÊÒ¬\ÔJ%=#B Òi)7[ØYTÂÌô#.÷þâËܽl7&¶§gDF=Z 5V+%&3Y•Uüò›k§ÓÉß×mcpl]‚ Óë Öiqâ¤ÄdæHy%?åä±2'Ço¾·Í©û[îN'Ò 'ÆÏÈ÷G³ÙWÜð¹¦ÆfãÑÕ›¹!±=#ãb‰ ðC¡€#å•,ÍÊå¡î)h”õ'æOݶ‡]'Kߎ„ Œj5V‡ƒr³•Õ5*-gKg2ºÝédÊ/»X“›Ïu qt B¯V‘_]ˆ¼Bf1„Eú¡R+¨®°Pz²†ôÝ…lZåµnsž¨ä÷/â¦{ºÓ¥w A:Ì&E'ªØ·#Ÿ-kê™k׿\&n\ç#WfR\PM¿«:й{‘mü15جÊÁwá IDATKkÉÊ(aÓª,6þ”‰³žß¾P”WÅ?î[Ä “\Û:(DOu•…¢¼*ölÉã—ØÎÍÝ¿MÙοµqe&F ñÉaŒ óªØ°â?ÌÚ‡Õâþ›ÌépòÖÓ«|MGúí@T›‚à h´*,f;•å&Š ªÉÍ*gÿvïìÚœë5Á»ÿÐuŸkª<Ï;5ÕÞyn5Ó"¹âšŽ$u‰ 4½AÉdãd~5w°iåéŽXƒõ¨5MïÔ¤²ÌŒÕêZ÷C{‹˜|ÇFÝ”B±Dµ @«SQ]i¡ªÂÌÉ‚j23Jض.Çc9¥&^øób®Èå#h—‚N¯¦¬¤–}ÛóYôõ~¯Ømï/"µ§«ÓˆuKÔMËÌ(!7³¬.[”…B!„Bq®œ8ù ìÿXZ½˜n¡î2"ÕQè:*dZ3ÙjÚâ‘ìÛܺvì¼\ò"Ëk–r“ÿ-tÓ¥¢ Åî´Sî(ç¸-‡}æ½l4­÷÷Çå²Ó¼ƒ[n¥«6@e ¥ŽR6›6òYù'·yÞ§ØlÚÈ„¼˜pýô‰VG£Sè(·—sКÎâêXR½gI™1ª68po?{'™¹¶\þQü4ôƒè¬M%Z-•ÎJŽX³®ögTG•÷n;*r1-zU‡¨¢RPF£Piqš+qœ<‚íÈZ¬{à4û¾£o{Á4\íØynÓ,»æ¡N‰£,§¥ÚKm'æu`M_жÇM¨ÚõA‰B¥sÅ^’‰=g«k¤`ŸÖ­Ÿ³ªÓÒ—0Œex"ºA`þù½_':©ýî1Ô†¢jÓ ¥_8 c88ªKpÂvp9Öô¥àt4©Ý³±ßAÍ' éy+ªv}PD¢Ðá´Tã4•ã¬.ÆQ’‰-s£×úŽâ£Ô.ø¨´(ýÂq:í8«\÷5©£]«w*û<©]ÆëAÛË5JrÕ pžq˜8k äa×HʆѠMe8-`/ëA°l›/oá;ì˜ý[Æ*4i7 ŠNE¡Ñã¨ÈÇvd –-ÓqÖ”ø°AO¯½ö111ÄÅÅ1kÖ,vìØqÁ×B!„B!„B!Ä¥Eñë?7/¼ð‚bß¾}Š¢¢"Eee¥"!!AQTT¤Ôjµªêêj¥ÃáÐFÕjÕz¥Réçt:œNgÈš5klÝz:i¯OŸ>çquZ_bbbk‡Ðdþ÷MŸ%¿Š–á‹}´dÃüüýøø½/™ñÙ7¾ñœ´oËŒŸðô#ÿbÝêMÍ^¦ÏEãFà§QóÉÞƒÌL÷ž/gÅ W£Q*ù÷®ÌÉÈlíp.z_B¬¿‘··ïcÁÑÆ” Ä¥¢]|0¯ÿ÷ºº¿?}c#«~Èhň 15œ}tmÝßs¦íä»é»›½Ü~0Šän‘M®÷Ê_—³wkÞÙg2ÌPBô:^þe˲e” !„B!„â|™={¶×òßÛ³]!Dã)C;à7i.µóÿŠíÈšVŽH!„B!„B!„B4Ä[žïàÁƒÇ)ŠR…BQép8ª“F£±ÔÔÔX•J¥ÕÏÏÏa±X쎣G:œÎ.]º8_xá/ù”ÅÙýù®É­‚8‹Ku]?a ‡“ý{Ò}²ÌKu[ !„—²øä0&ÜדuKrpO!å¥&”JI]"¸ëѾnóîÞ"I¬B!„B!„Bq¾izÜìúàt`ÏÛÛºÁ!„B!„B!„Bˆ ‚$( !ZÔKo=CNÖ öìÜÏÉ“ÔÖ˜ˆŠ‰äê1Wq͸¬Z¶–’â²VŽT!„­%¹[$i—µ!í²6 ηo{>GœkóÅ¿,ñÙ²DãÜÛ5‰ÑÚº•5ð;Q!„B!„Bq)U¨.µ®ÞYìé˜V¼vƒB!„B!„B!„2IP¾€¬Ý½¨UÚ½"íÚViW\úÔj_|ô½ûu'¶] Á!Ah´*Ê+9|ð(«–­cé•X­¶ÖU!<øiÔøiÜ*) Ÿ-ÿ«5wúlYƒ‰ƒ§·vâöý̽?VFjÏh"bü 3 T*¨,7“u¸„-k²Y¿ìV«½µCÍà§Q¢¯ÿåF!„B!„B!D+Rª1oüu\_ÁmQƒQ¨´8MØ b;´ëþÁ.¹ !„B!„B!„BIP¾€H¢°hI£Þ|ÞÛ4›-Ìøìf|öÍyo[\ø®]°¼µC¸d ÿvik‡pI™¸äçóÓŽ$ìŠ Pα²V96³”’}¤”ùÿÛsÞÛçÏ»;öóîŽý­†B!„B!„›Ë/_bùåËÖŽD!„B!„B!„B\$”­€B!„B!„B!„B!„B!„B!„B!„ââ! ÊB!„B!„B!„B!„B!„B!„B!„BˆF“e!„B!„B!„B!„B!„B!„B!„B!D£©[;!„Bˆ–¢P€ÓÙÚQoŒþZ”JUæÖEŸ‘sŽB!„B!„—M×ëPEuÆ–³ Û¡•­ŽB\p‚ƒƒINN¦¬¬Œƒ¶v8B\”¢¢¢HNNæäÉ“ìß¿¿µÃâ¢t1^n¾ùfºtéÂæÍ›Y¼xqk‡#„B!„Bœ3IP¢‰n¹c<?yŸGù±#YÜyýƒ-VW!~o¾5„X£×i×-\I¹ÙÒ`ý„ÎaÜó×þüç•uäf–·Dˆ­ê‹eÑé½ÿ”ûèÕõ¬Y|äÞãÞ{óü1C ÑëZ4^!„B!„Bˆ–ÒQ“Èì˜yžÿöü[8dñ>ºÕ?B_@¯ÐSí¨âƒò÷ÙbÚŒÝi'RI'M’¯Bö *n ¸™1~ãh¯é@®í8«k~bFåtjÕ^ë)Q2ÄxW¯!M׃e§™,[kjW3»r&UŽèHQ¡Dx%šÎW£j“†Â‚ÓfÆQšíȬÛgá4KŽâüP·ƒˆo]Ÿ‹ïËNÏyüï…€û'”<æMÞ—¥Iã » ”áà4=,¿@õ<°o±Õ8oÆÏ[o½uÖù8À˜1c¼N³ÙluŸíö‹ç™áïÍk¯½†Á` ªªŠ7ß|“ 6`·Û‰ŠŠ¢sçÎ-VW!„ïÌœ9“yóNÿÿÑã?ÎwÞÙâuÏ$×}!„B!„B´´K>AY¥TrÛ£IIJp+  g·Òº$3oárvíMo¥ÅÅÆj±b=c¤;ëoF½k©ºBÑF½ê÷‘À °iU&…y•ŒÿC7z_‡Bi—µaØuIÌýÜË›->rõ‰Š  ¬¸¶ÅÚxpüœºÏíCyõsï/™\j²”R˜WEdŒ?'²ÊÉÍ*otý«Fwrûû«·±nùQpBh¤í‚15^ëžÏý+..­uÎB!„B!„¸TuÔ$¯q=ß}»l*ßWͯ›–cËf›ikk…æÁ¨0òNäûôÒõq+ï¤I¢SP×úᾂ{(´xÔñƒ Wº•©jR´©¤hSë7Ž?ÜE‘½È§1ƽ‰ºã`·2…V**UT š.c©™ýGœU¾mWˆs¡í r}®þºžäd> ~·Ê3е  Mo€‚à´œ¨/lï¼óÑÑÑ ¦L™ÒÚá/’’’HLL`Ê”)Ì™sú¹`ff&›7on‘ºB!|Ëb±`±XÜþ>uÏ$×}!„B!„B´´K>Ayèà~¤$%àp:Y»q+[wìÃd6Ó.6šÑ#†Ì c†“™KyEek‡+„B9š^ÌÛÏ®¦]|0ãþжñÁ,øßžÖK4“ÅlçŸ,âÊÑp8¬úá0v›£ÑõÛ&×}Þ¿#Ÿfï«û»¬¤–£é'}¯øýsŽB!„B!dÙ2¹îÄ5õNW¢äõð·HÖv&Ýr€Lë1¯óŨcê>¯«]ãó8}éo!OÕ%'Q1ïªæáÄÉåúÁ<ò±ê¶L û îÁ‰Ó­îÒêÅÄ©ÛóCõv›wSé¨ BÉÿëiEu,?ÆóÅÏú4fkú”!qX÷-Ä~bNSJÿH4]F£î|5Ê 6è®xÓâç}Ú®M¥ ‡W%XÓ¡ò}ïó= Æ›\Ÿ­û j†k~…4]ÀïV°e_zÉɽ{÷ÆáðþŒ¤¡8Àu×]×Ra ˆ­ûüÓO?·ºB!.=rÝB!„B!DK»¤”• ýz¥°vã6–­ÚP7íàáLò OòØw¢ÕhèÞ%‰5·µV¨B!„h!9ÇÊø÷¿Ö¢R)°Ûg¯ð;¤P*P«]C 8NlÖÆ'ü¶†òR fœ[â§Ÿ¿¶îsqAµ¯Bj”‹m;‹s#ç!„B!„BüžÙœ6òl'êþ‡À»IÖvÆâ4óìɧ°Ô“-¨Sèë>›&ŸÇé+ÑêÆø»^öÿ¢b–Ξœ[õ5'íELx‡žº^ôÕ÷g³i£[ýå5KY^³Ô-qù°5ƒ¦õ¨ÃÕ 5÷aÙlé˱¥/‡3Úuœ<Œ-s•u§¡¨‡ø¼]!šD !¯2 Pú¤÷cÝå§““k„²gÜ~·eCíbPø—¨Ï«ÊÊÊ‘ÅÅK¯?}¬­­=ou…B!„B!„Bˆ¦º¤”ü0\7Þ3ŽfyL/¯¨"7¯ø¸X‚Z,޶qmxqê߉mÃw_ÿÈÇï}yÖ:£›&^ÇåWõ§]ûXŒ~jªk)/«àÄñ|¶ÿ²‹™ŸÏ©·¾N§eøµW2xè@:¥t$8$›ÕJyY%‡eÃÏ¿°pÞ®eëÅBÿËûÖ³ “â‰n‰Ÿ¿ ˜jÍäå°hÁ2æÎüÞk»ƒ‡ dÜÍ×Ò¹K'ôzùy…¬_½™Y_Σ´¤ÌgÛ§µ½q=/K#¡S¢¢#0õ˜jÍäæœ`ÍÊ Ìýj!ÕUõ'jÝóàíôéß“ð¨0‚‚Ñh5”•”±gçæÌ˜ÏÞ]ê­«P(6j0׌ArJ"þX,JKÊÈ:vœ{²ìÇUÏöþÂJJ×dn¾c=út#8$ˆÊŠJöìØÏìéß²wgýíž ­NËÊ-óxáÉ×Y¹ägy~ÚºVÃûo|Â73æ»Mkîv>å\ÎçjL|;zF„’@¤QA­Æd³“[UÃÚùÌ;œEµÕVoýI©èF„^O NƒF©¤Ìlaoq)s22ÙW\ÿ÷È Vqcbµ‰¤¿Fš« ‹•Õ5l/,櫃G}^÷”¶þ~ü³_býÌ?’Í'{6j›õˆe\Biá!ëtØJͲ+«ÙW\ʲ율ª©›_«R²üú«ø×æ¬ÌÉóX抮F£Tòï]˜“‘éµÝ+b£—GrHz•ŠüšZ6ä2ûàQJÍžodÄðåÈË=Ê—ŒéQ¶­°˜¿®ùÅk»)¡Aܔءé´TY¬ì).åëC™ì-.õZ|³|©±‰‚j’Ããé=¨ñIaëP(T”š(Ì«d÷/'øiaUf¾X6Þó'UZß6|µæNò/ßý…eߦ»•EÄøÓ½_,]{GÛ>ˆàp#z½•Z‰©ÖFqa5Ù‡KùúÓž¨<‡µoXÚemxjê0ï?Éó,:k­NŰë’èsEmãƒ1úk0ÕÚ¨,3Q”WÍþù,wSmýçáã’;± aQ~ÔV[9rà$‹¿9ÀÞmžß‘ú¶3ÀG¯®gÍâ#õ¶S_Ý+FuäŠQ=ÊŸp1‡÷5X·)û·®N¶³Þ¨aø¸$:¦„€ÿ@×±XV\Ã]…,{€ÌŒ¯õÛ'†2êæÚÆb 0XBáJîÎØWÄʇؿ#¿ÞöUj%†v ÿUèJ@°»ÍIe¹‰“ùÕÞ_ÄÎM¹ØYàµ~Ïm:¶ºDà篥²ÂÌÑŬú1ƒmërêm÷\tï[·]^b%»6çÖýýïy7a`ÇÆãL}êôhÍÝÎ ‘äd!„B!„B\ìî z¾úþD¨" V¡Qh)u”°Ë¼“Y•3ÙcÞÕ¤åE«c¸/èA>+ÿ”l›ûóÛŽšDfÇÌó¨÷s»e”½Ç—Ÿ{mG§Ðqµß5\iF²¶3!ʬX)·—“a=ÈÚÚ5̯òl ‹¶+·ÜN/}B”!T:*ØeÞÉŒÊéì6ïô˜¿Ÿ¾?J\ήüÊ3öÚUÙ‹ˆPE0Ü8Ò#Aù·#*Ÿi·y'CÃÑ)ô(QâÀ—Öß®=wêNCQ¨u®ágÍoW“vúÏà(ͦúóœWÕ¾/Æ›>ÄYUDÕÇž£q«¢» éuêv½PBpš+±çîIJuö»^v3êz£0a¼õs”¡íq¥fÖqšÝïá+4F4½nEÝq0Ê8Z?œ–jœ¦re¹Øs¶`ùå¿MnûltïC×E@ } •gM)ö»°lŸu–õU é<u—±¨¢:£Ðâ´™qÖ”â(ÉÄ‘¿ëþÅ8Ê|{¯÷·‚ŸmwÀeÏ‚ÝóÑ÷¹þkËò—¡¾¯Š³…ú,Uwº MÚ¨¢SQ¨u8*ò±]ƒeËÿpÖ4ýÞrK™4iÏ=÷œGyFF£Fj°îK/½Äĉ©©©áºë®ãرcó¼ýöÛŒ7ŽììlFMMM—%›G}”AƒEHHZ­–ââb¶mÛÆ_|ÁŽ;¼Ö›0aÝ»w'%%…ÈÈH‚‚‚P©Täçç³nÝ:>ùärrZî89r$'N¤[·n rssY¹r%Ÿ~ú)ÅÅÅó'%%±xñbò={<;í:u*}ô‘OêúJÇŽ™:u*$<<œÒÒR6mÚÄÇÌžïu<ðÀ<ñÄ\yå•^÷E¿~ýøê+×õu„ lݺէ17uŠ£¹ÇU÷îݹûî»éÛ·/aaa”——³mÛ6¦M›ÆöíÛ}ºŽ¾h7""‚!C†Ð§O:wîLll,( jjj8~ü8sçÎå¿ÿõ¼ž5§.œÛ>òE»MqÛm·1eÊŽ;ÆðáÜwРALŸ>‚‚è1}ذa >œ„„ ………¬]»–ÿüç?äææzYâiç²[ó4ÿØP(Œ3†o¼‘®]»ˆÙl¦¸¸˜£G²k×.æÏŸOV–ç;½ÍÕÔëÑ)çú{ã”s=&ëÌœ9sHHHàðáÃÜ|óÍTTT4º¾B!„Bq>]Ò Ê&Óéd­ðÐ`Že÷˜ÇßÏ•¬P^áûdŸSþ2ùO$¥$pÇoaݪMìÛí=q (8¾œJû„vnåþúÓ6® *•²ÞdßÔnɼðÆSÄÄF»•k4j FÑm"©©®õi‚rkÆ:ß’ºFðÐóƒ öìF?<Úðh?RzD³úÇÃ>kóª1¸÷ÉõN×ÔĶ"¶}³?n¹ÒMaäÙwGÓ.ЭÜÏ_‹Ÿ¿–è¶t»,†•ß‚”ã“Ãê>k‚UôЖžÚòù[›X±àP‹Å1ˆˆòc⃽½N‹l@d›êÈìO¶³pæ^y¢Œ ¹Æ3ù:<Êð(? íÀœi;ùnºçKh1þüuÊ•´ïêV®Ñ€ÞàOD´?)=¢hì‘ ¬Õ«ùó³ƒè;¤½[yp¨^ƒÚÒkP[Ö-;Ê^YÓÑú ¼ÍÝÎB!„B!„—²A†ËIÕvu+‹TE1Âx5ÃŒ#x¹äE¾¯ò|¶SŸ?=Œ^¡'ß–ÇŒJß'dtÕvãåð×i£Žu+× Á¨6£Ž¡ÚQí5Aù/Árwà=ne¡ª0®2ãJãPÞ(y•¹U_»MPEP묥Äî™àÄÉÓf®õCª¶K“Ö¥»®',û}œœÜ0Ulwì|’œ à¬ru©0Ÿu^¥ÑuߨQéÙ9¢îЇÐö½Û­La ýuÄç«0ýôÖÞŸG7§®7 ­†ëßCÚgeµß>♜lÂ8aʰx÷r} } Êàv(”ÊIPVÅBí~Ì)"Q'@4 Ó²)X÷zvð­ÐÐ}uü@rEePˆˆÓT…e»gR¾¯ü c\Ÿ+Þó&ïó©;‚&Åõ¹z:8­-’'¥ ý¨Ф¸'Ò+CÛ£ ýš®ã¨ýî±sJ~¿ÐL™2…>}ú””Äûï¿Ï 7Ü€Årú}œ«¯¾šqãÆáp8˜åþ¿ôHNþ­ËG&s´”…_í;kŒ‚†¶³B!„B!Ä¥ì“ò°9mäÚŽSå¨D­P“ªíÊÃÁÑAÏS!ÏðsÍjÊg¿¯Iàj?WßGå`qZ<æ9j= W"ÒU†¡L  €áLJPëtÎhó’…ØI“Ä‘cTúáÀÎâêE¬©]Íq[J”+CHÓugÙ3Yð®ÀIuÉÉ[M[ø°ü}rm9Ä©Ûópðc¤éz09ô)v[vrÈr°®žÉéºWlP0( qÛ]ÏÃUÓ~Ë_éO'M&r•q&§‰÷ÊÞ:k½æRèüQFtBÛóVԆⴚ0ÿü®Ï–ï¨*üµPiÀ^©ÂèJîqþZçmß»êŒí9[1¯ûGÙq”!qè?‚ªMú«&c?± Gá!ŸÕõ£>Ã"ÚoîÇQ‘ï1Ÿ¶ÿŸ\ÉÉv æuÿÁvl=ΚRPkPD£ŠêŒÓâÛDÎS,>‡ Gy.Ns(Õ¨¢SÑ ~ehôÞÂvägœµîëFIÇŽyñÅY¾|9eeÞ¯GK–,aÖ¬YãççGŸ>}xøá‡ àÍ7ßdäÈ‘8½<+=WO<ñD]ÛÂ… ™={6ôêÕ‹G}”ÐÐP>ýôSFM~þésGFF©©©€k„Îwßu‡{÷îMmío®ƒ6÷ç¬Í©ë+V«•Y³f±téR***HMMå±Ç#&&†7Þxƒƒ’ž~ú‡ôôtòó󉎎fРA &(oÚ´ »Ýó¹Ü¹:×}t¦s9®î¿ÿþº$ÒM›6ñæ›o’M||jnÌuªýÀÀ@4 Vký¿sN%(×óæÍ›™9s&9998NÈ#ÿNÝ´Œô£lß²‹/æ|@`P÷ÁìCÇܦÕšØW\ÿ MÍ©{¦UÇóèìJ«°XÙ^ä9ºÁ)‘F=·&¹’u7æòì†íØÏ¸É~¸¼›ÃIr&%Êh`B’«gýÅ™ÇymëžÓm–U°£°„ÏF "P«áîÔD¦n;}u»ë{sf¬V‡£®¼>á=“R;°6·€ç7í¨Kb.5[øÛÚ-̼zá:uàå-î/tùj/J¥‚¿8þt©ï̺ž¨XW/²{·æñÚäMŽeï¶<Ž¥SYaÆb¶£7¨‰l€Í껇î͡ѪèÑÿôè#vðé9YP…Z­$*6ÔžQøèκ¬U?d°ü»ƒ80þÎnô»Ò•تթèwe{Ï9ýûáÌíÜ>1”W?Óè˜Ï¬ûß•·×íçõËñÑ+ë]×û÷\Íþx;?-Ì@£U1xTGn¹·g]²ôÄ{óËê,ìg$VŸ,¨âƒ­%óp å%&LµVBÂŒŒ¾­ #¯O\‰·‡Å»%(¸>Ù-9yÿŽ|¦MÝDþqW'|{!áÞ{ïÚ'†C;Ôý½um6³?ÞAIQ5:…òÇÉý‰íà!eÌm]Y2'ër\ŸÒÔí,„B!„Bq)[_»Ö£lMíj2­Ç˜Óæ;´  ƒXRýãY—ugà$”(9a;Á’êE^çqâÄâtuzhãtò”Õi©+oÈÓ¡ÏaTúaršx¤ðAv˜=G/ÛdÚàQ¡Šä¾ XUó?ù·º‹Kì%©ëÂ?ãï£ OÄQ’Eí¼¿xMN†Ó£Q[,Á²õnÓì•…-:²®í˜ç½oÛ‘58J2ñ›4Ô:Ôb=°¸nº22ùtÂí®¹˜V¼æ¾€‚pÍ‹@Ë%”胟ë1µË¡âí†çWǹþkÏGyÃóú’20mŸ;°îýÓÒÕMsž½¿;¿B¡D7à>L˦´H:ÎkÒ¦ÓétáÀn·»ÍÛÔdÏŒŒ ¦L™Â”)S¸ýöÛÙ¸q#‹/æ•W^!$$„C‡ñÎ;ïœ}Aç`õêÕe+V¬àÈ‘#,]ºNÇ!CêqÏž=¬[wú»uëV***x饗HHH G>766–{îqux1wî\žzꩺiû÷ïgÓ¦MüðÃóÈ#ðÌ3ÏÔMw:˜Í¿^ÏH"¶X,uåõiN]_ùàƒxÿý÷ëþÞ¿?ëÖ­cÑ¢Eñè£òàƒºÕY½z5·Þz+W\q*•Êí¸T©Tôèáê€{íZÏß$çª9ûèLM=®¢¢¢xôÑGX¶l=ôPÝús×]w±bÅ ¢¢¢¸çž{˜—ëœûï _“àúNñÅ$''sôèQîºë.INB!„BqQP¶v-íXÖqþ;{µµ&ÂCC˜xãhþ1ùîºu#Æ'×}>YPÍû/¬åDv9¦Zé» ùðåÓ/Äéè˜ráíã¦ng!„B!„Bˆß£l[ù6WBf[u۳ά f¤q³*ÿ‡ßwZ×I›L7+tZùG^““ësßh´ V§•7J_®KN>¥ÖYË7•®ÑǹMÛfÚB¶ÍuÏxrÈSŒõO„*­BK”*š¡Æá 6  ÚQ]o NœØœî#Z&h:rwà1*ý½.Mç‡{»Ê°t}ïF¡õÞQá9µR[ŽÓâZ…ÿ¯ÏJ4ÝÆ£ŠíŽºÓU§Û÷s,è(Í©+Ó¤ŒµìVL+_¯K0®[¾µË×È›§FÿõEÝßR†¶ÇxÛç(ñçï£föëMNpÖ¸:kUÅtEajpÙç‹£4».fE°û÷W“âúžb3cÞðÉù ¿?JpZ¡òC\½ñ6@ùëfmÄ@î>¥N¹JpذlôÜVŽ’cX÷»ÌÔG²eÞ7سgû÷ï÷ø·jUË '=kÖ,/v%µ¿úê«<òÈ# >›ÍÆßþö7¤è–vìØ±º¤¸¸¸&Õ?~Ý;]»võYLãÇG¥Ra³Ùxï=ÏŽð>Ì·ß~ Àu×]wI½‹âmÔØüü|fÎt½+2lØ0 ƒÛôS‰˜u£%Ÿ’––†Ñèº56±«1Zr5t\7N‡ÕjåŸÿü§G²`MM Ó§O`È!MZ§†´V»Íq±}ÊÊÊêFû=•€¬R©˜0a½{÷fäÈ‘uóžšž••ÕèåÿðÃéÁ:ÒÒÒܦµäþm©ó$@II =zô 88ø,sŸ–’’BÏž=xÿý÷½&‚¶„‹í˜li ×]w&“Éë¶:ÎåzÔ†~oøò˜LHH`Μ9$''³{÷nn¹åINB!„BqѸ´ï†üªc|;ôz=f‹…#Çrˆoßͯ7‚† ìCqI)g¶h ?¯hxt¾3Í™±€¾{ß±=_-ü”ß,bÑ‚åÏnø†CÏ>Ýê>/^°üœc=[Ì]{¸’¢fdRç9ú+ÀúŸ73憫Ñëutêœàu$æKÉÚŸ6rÝM×`0HLŽ'}_†Ût??®¿u4ý/ïCtL$Á¡ÁÔÖÔr<ûA®¤tNëV§s×è«G£´¤iO…{ôvÝÀÜ¿;⢯ódq½ðDpHP]¢ü…ìlÛùLM9o´¤µ' ›ÐƒZEÇ @þf;ûiÔ\ß±=ý¢#ˆ2ê Öi©µÙÉ­ª©KLÕyéùrnF&—E…èÏÌQCøþh6‹3s9^Uÿ :¾¨û[?çÖÿâÈ™Nœ^ZNQ­©É휫®a®v–WRPSëužyEŒ‰o‡^¥"1(t|ºÿº¾ûKÊ(6yïU;³Âõ-X§%X§­KJßî£ó¡KO÷¤Ão>ÛÓq鎒úÖŒñÄÄyïP$15œ¯ÖÜéVöþ‹kظ2S•¬Ã¥´Ot#=´åÍãYõC›VeQx¢òœbª­¶R˜[UWp˜ï^~k-ÍÙÎgóó¢Ã Õ±îï„ÎaìÝ–ç6Bám:¶}!F”JUfª+OW ~î´K©ûœ¾«€ÊòÆ÷ªŸÚëô÷¨ºÂÌ5·¤¸Çó›b;“¾»°ÑËo ÙÎB!„B!„—*¥?7ùO` árbT1„¨B©qÖpÜšMЯY:Eý£Ÿrß´ -§™«¶H¬½u}ê>/¬þ¾Iu{êz°×²›“ö“^ç9j= @ˆ2„e¥W'€üãäßùwäÇ*ƒx>ìÅzÛ©tÔßm•£Š9½ TÑAÏ5~£ïw#ŒW«n˽wcqú>ñÏi®¢òþ(ô(C; I½M·ñ¨“GbnKͬ?Ý7í:ËsQD$¡ ŒÁ~b7ª6i(ô®û§ê1ãyUèêÙYv:AYÕÖµìy{pV{ßGŽb×>RBPBpÖ–6»î™TQ)hûÜÂŒ=ëjLÆi­ip­Ûg¡îÐeX~÷|‡u×\¬û~ÀQÚ²¡(tþhzÜŒºÃ@1(!8­58Jsê’¥j[UT*ö¢ œ5ޟ϶4ËVÐö…Â>†’?ƒ­19\ <ÒQÇCè¯#1—ülÇšç©Ñ±íE‡ëMR·]‹¦Ûx=ªÈ$ìùû›ßðà™gž!--ØØØºQ;ÿïÿþýû[ný¸ãŽ;2d±±±„††RSSCVV!!®çzýÙ¯Ggª©©¡°°èèhBCC}k¯^®sÎÁƒëM*úé§Ÿ˜0aƒÔÔTŸŽäÚ\ƒöšX—‘‘ANNŽ—gwjäX•JEçÎÝFÚÜ´iDEE1bÄ6nÜX7íTÂrvv6ÙÙõŸ7›sKî£†Ž«Së³cÇ ½?;|ØÕayhh(¡¡¡uIœÍÑZí6ÇÅø=ÊÉÉ!%%…ØØX¶oßNÏž= r]o‡ Â+¯¼¸Fâ…¦%(———S\\LXXîÇ·äþm©ó$À—_~ÉW\A§NX¹r%_}õóæÍ#33³Ázýúõ«ûé½Z„H("U)J‘b_˲*êþt±/ko»XY{/ ®+Ê*½ Ò{ïPBzÏôûûc …t2IžÏóð<“{ï{ßsÛÌ0÷ž÷x¢íù 6¹Ò8U\}’pS9ÛïéÒšûM¯¸l6BÕçfΣ_÷1íÄÊI£ê\Þ× ¯” ÜǨ1‚ÃË+PØíNÒOž_’íÅÛÏ­ä™·GàäU6<Ú—›¦ôâ¦)½8°3ƒ_¾ÝÍÖ5'¼Þ’’òsÈ`¬:°(wî9zöXœI(w?1€è¶µWå¨øÙ­×k+í÷ܬúßð2˜txû”¿ï·íDÛNµòò5Ô:ÿBP×~B!„B!„¸Xµ×w`fØ„iÃ+M7*FåƒÜUóóC½†°¢t9…®¦ùí5TëNÖ(pãl؃ð!gÚö4^ʦØu.ï§õ/KPØkÛÃͧ&q‡ßŸég@¸6»j'Ý™ÎË:®öI¨6”#öä:×]àÊg§u;;­Ûù½t%o…¾KWC"|&ñÝ™*ÎMAµàLÛ‰3m'ŽäU˜'¼6¼+†î°mýÎ#}¸òN¢ /K@ÖÅ q÷m-BÜ®ü44þÑg–/O*SÎTUÖÆôÂ÷‘Íuö¥˜ýÊ’ŒÓ¶"]üUuãçu&'8RÖQú¿Ç0 ›†â‚¡ïd }'ãLÛ‰mËl‡–W©èì šàxMœ‰âViº¢3¢5VœRyþ™Äeµ åi,ü4?BÀó  ƒà k28S«_^u¥‹¦–⋊´1å¯=áìy¥ÖüŒ‰«Â~<»¼§ÅÇÇW©–ÙÔ xá…øðÃ(..æÓO?m²þâââøòË/‰ˆ¨<ذÉdª”uî³ õQzæþ«Ñh¬cÉú;›]ö:88¸Ò<—Ëżyó˜^|ñE¸ÿþû¹ÿþûÙºu+Ÿþ9‹-ªöóílêüü|²²ªx¦)´Æs²©ÕtnœMäMM­áË[ ªíóè|¿oxêœ5Êý\–ªª¼ÿþû’œ,„B!„¢ÕÑ´tM)Àß—Á/à‡¹‹ÉÍwJíRUvï?Ä»Ÿ}ËéŒ,tZ-W^Þ·¶U5»Õ+ÖsýÈ;yùÉ7ؽ}à®úûÂëÓøjÎûÄuîPµÑ™ß?ÔJøjM1+g:®o¿-µO›“N_ánl…ßÒEáÅ×ÿAhxV«w^ýˆI#î`è¥c9`“ox€Œôê½mgª®jµ «Qw—Ó…Ýf¯óŸÞà™»ÉµFÓð›˜u©i?_Èôšòã§TZžïדP³ «ÓÉÌû¸aþo ›³ˆkæ.ᮥkÈ(©½Òðê´ÓÜ8ÿ7þ¹i'»³Ý{\ÈóýzòÅÕ—ç_õF¢'Úž³ÛnÐ4ü|®øÒЛãeK×ómÈSoWgO—ªbw¹êüWÝ~iîcä)›ë¢®ž îDà’âòV‹£lžË¥VšWRlÃa¯ü€Ô©ãL›ü+ ØGi±½Ò¼ÎIa<ú¯¡<:}(Z]î—ŠÏaσ$šÆîçÚØm5?pÙÆio^]grò¹g¥sßË»þ ĺkÕé™ëìÜëU«óܹSÛ~B!„B!„¸X)(Lyƒ0m8VÕÊ›¹¯1&m$NôfÈÉü)ýFN;ë7ðs6˜$£»ÒèÒâÅM³¸t ; IDAT[ÃsÒœ¹eî‰MµÕùÏ@ÕßÍN;Óy5÷_LHÃÀ}rr 7šÈ—Ÿ¬u?ü¾ÓZwòsEkKW³ëL›~¦ Þ®óå8ºgš»â›¶]­×•“€Æ? ]üPÔÒ\lë݉ºŽC@gDñ Bµ[*U¥-û½Xu¹+:×õOkðHÛJû%eªµ¯ o¡‹V¯ív^IÑÇc°,x¶|¿F%a3ï;¾G_ß]XO æ1ÓÝÉÉ+ÖoRüñh ÿÝŸ¢wSüõ­¨…§«m©:Ü÷vѴ좖¥û¨6ÐAÐÛ  ¬~YÇ™Üm(^Ícùý»‹û~Ru4 wÞygÙßÞÞÞ<ðÀMÒ—¢(¼ûî»DDD`±Xx饗¸âŠ+èÒ¥ Ý»wg̘1œ:uþ õMñÈÙ÷y¥œÃQ~¬ºí3g!!! 8p'„õîÝ€•+Wz4ž¦>F5-¶_§Ó‰Íf«óŸÁà™~[ªßÆh×ÑÙ*ÅgGŽINN3gÎ`ذa˜L&BBB(--mpòæÙdÝsï¡7õñmÊ}»téR Ä£>ÊÖ­[w¥âwÞy‡ùóç“P¥MCÏ OiçdS«i-÷sbÕU¶oi5}5æû†§ÎÉU«VQPP€¢(|öÙg\sÍ5ZŸB!„BÑÜ.¼_<¨S‡¶h5 ‹ŠI9Qõ‡=›ÍÎú-;7j(±1‘-aíìv YÆÂ_–Îè ùñ¶ñ´íІ·?Îíãï#+³|ðœ,wò—¯Ÿþ~äçHÌ5ÈÊ̦S—DD‡×¸Lxdùh†9Ù5—#mÌLÒ’¡aå#æV¨fÝ©KGÚuŒà•gÿÍ’ù¿•ͳÛÚŸLqqõ£öJË ¡[çê“Óëpö-_¼ŠçŸxµÁíÏ—ÝfÇåRÑh¼}¼ënÐ@5íç YH…êÈ9g’Î:øÑÎÏ€W·ìféñòÑ@í.‡ò (®ðãnMì.‹Ž¥²èX*Þf®mà ÚÓÖχîËK~'«Ôêñ¶ •cµ¾„y™ê\¶º8]ªŠFQðÖ7ì£7Ëb%ˆð®¹jg„Wù¼ŠÇ¨¢ŠÕŠ•zdÇŸíwÅÉS¼°¡aMUԜǨ1r³Ë«P›½õDÄø‘~²áŸI•Þ×›1¿ÖuN‚f],<}OåÊôÝûFóÄkîêGögó̽uW®ÏË)å«w6ñí[éÖ'’¾CÚÑgp,F“ûï5 †Q×'ðë·{²)õâtVNämŠ%ªÓÐãë‰ý\“ÀàÊï Eùå×ÑUãâËŽƒªÂ×ïlbýò ó-è:îr ½¯ˆ­²NU…¬ŒbB#ÜïíBP4J½öKÏ$Xëôî‡9×,9Ê»/þ~ÞÛ×ÅE¶JûøznïÚö³B!„B!ÄŪ³¡ ôî{;/å<ÇÂâò߱쪶ý»Š¡9ŒWš‡¢AƒUµ²Þ²¶©B&Ûé®Vå«ñ#@@ž«þ÷`2ÄÓ™%%‹y*ëïk’ÏhÐàÂÉo¥ËÜþ´ó4Ý€@m Ù™MD-Ê@1×R–¶\Yîª~Š_ÚÈKÐøEaßþìcô ºø¡8ŽoEÁ•s´Òˆ–®â,4tÆ~` –yO6¬ßF´­Èyb Ö¥Ó1Ÿ&¸æÑÿ¤t¾Çþz$Þ;íØ÷Îþw¿(ôÝÆ¡¿ô4ÁíñºáŠ¿¼µ¨ú¡JÞM°ûúµ,~û¾…eóT§5㪭¸ÚŸ¸Õü4ˆHl‚¤é†³®‡¼@à+ ‹… 7!ûP+™Š}×™0 „Ò%ÍßÙóJ9“p__ù3(jqóUy¬¯³÷<:`ì<@ÿþý)))á×_å†nàž{îaåÊ•lܸѣ1víÚ•¸¸8¦M›Æÿþ÷¿²yv»½{÷RTTäÑ>+##ƒ®]»–UQ­NTTùy“™é™kßSzôèáñuÖµ½ûöícÛ¶môìÙ“ &°jÕ*úôéƒÁ` ¤¤¤Î Ê ¹¥ŽÑÙ~çÏŸÏÔ©S=²Î ¹ßÆh×Ñ¡C‡w‚r=ˆ‰‰á믿fÞ¼yüýïgäÈ‘¬]»EQHNNÆåªÿÀÕµiÇ·"»ÝÎO?ýÄO?ýDLL ×_=“'O&..ŽY³f1jÔ¨JUoÏkÉÍ­ùy>Oòä9ÙRÏžïç~CÞî!rm6{ËXÏÌ3x¨újM]5€›ï˜HDTÍ ±µIO;Í'3¿æž[Âápàëçèq•GeÞ¹u/àþ!iĘ«sc]È1ïÚæî·c§vDD…U»ÌåCú`)µphÿ‘×eµº“bÌæš“›¢­§ Üpª™|ðhÙô àò¨y?TgÓ:÷—Ñm"¹bhÃFX?{Œz÷ë‰Ñؼ#´fŸI¢?›˜íI5íçê4ö}ÃSœIÖwª*Gò ˦šÊÀ{hpôâR>Ýsˆ{—¯ÅáRñ5èÙ6¦IÛ^ÎMñíkMØ—ã~˜).Àï¼’”³Ï$·óõiP»]grèàïK¸Wõ1<ó>fq89œ_ý±°THè¬O’ôÙ~/ Á¨õÌHù9¾MíÀÎÊÕn¸«çs_Æj)¯¶Ú|Cõ—WNÐ oØyÖPJ…„`»ÝÉÖ5'yÿåÕcumÈwå{,®úк¥žë×™í¾Ï¨ñB—à®fß·µð4δh£º£kë¾v6™¹¬mª{ U]Û> kØ1jLÛs¹òS)ùî.w%dEƒyÔ‹èâvÛU†uÍû”̺\“úóµQ¼‚Ê^;36¨­ãØ41èâ†x,¦óeY o»_ë/ßû«.cÛ Î3—–÷í4Û0gÏ+mH\¥DäŠt ÚK|,šCi©{ð^ŸúßSêׯÿ÷ÿÀ?þñž|òIÖ¯_F£áõ×_Ç×׳÷BBÊïß»w¯G×ÝT¶lÙ@—.]jLd6ÌýÜLIII«Ù®Æ¸òÊ+Ú·÷›o¾ÜUgCBB>|8Ë–-+«Æé)-uŒÎö;pà@L¦†?oÐÚúmŒÖxMPnÓ¦ ãÆ`îܹœ:uŠ­[·r饗–U?xÐsŸ ­ñøÖääɓ̘1ƒ &àp8ð÷÷gâĉ•–Ù¼y3à~ÎpüøñÍ›'ÏI«Õý¬ƒ—Wß7hLÛóùÜ?kÖ¬ 66–«¯¾ºIûj¨š>ó}Óçä‰'¸ñÆÙºu+Z­–7ß|“Q£F5jB!„B!Ds¹¨”sÎ$ÌúQ}j·„Nd×R!·±nùó$^žñ÷?ò>ùö-üüj]^§«9qìhò1 Î$V^Ïþ=Ëiïþ¿ÛHê™ØÈÈ믵żxÞrœN'Z­–É÷ÿ©ÊüöÛ2bÌÐ3Ë®ÀQKج w2kXD(a¡ Š£1mÏ—®šÄĈ¨pFŒvß<_óÛ,*°æT¨ò›Ø°Ñ²—Ì[AvfO½ü(×\w5A!øøz“˜Ô…Ÿ˜Rm< Y†Ãá П©ÓîCë¡ÉúØ»ëC† Äd>¿ðºŸÏÕÐ÷ OÐ)U?"¼Í oëArmZgyr^n…ø»ú7¼¿Z*ž-(¢ÐæN¸ô¯&A½1m+º¹s^êß‹û’ºðÑÐøÕ2XÅòî§´ŠÂ qUæk¥Ö„Ö³ ΃c"0éê>/9ž†SUÑ* “;U™ßÞχá±ÑeË:j¨tšQR^!ø²ðº“÷KÅáR 0ø[®h˜­ë©cÔ\6ÿ~‚¼ U”û mÇSo ÿU툊õ'(Ô‹È6~$ôgôM‰huÕ…Ê>]\ö:º]×ÝÖÈX?B#}ˆK åÆ{zÒ¾spµm#;³KiùgÕ°ëâéÞ/špo:%†rÓ”^†x&¡V«Óðë±þôC`ˆz½“YG`¨Gy2|SU6ÎÏ)¥¤BRöÐ1èÞ7šÐº$…q³··¢–:¾I—EÑ>>ˆpo.ÑënëV6Ïfu²gKùÃ%Eåƒó„EúУ_t½îÏÙ_©bò˜[/á³E7óé‚›yíëqxûÖ|Íþ6ïpÙk³—ž—>º† w&—JH„7ºÓ÷ʶÜùP_:tñÜ~ÊÉ*¡´¸|›‡\ÇåÃ;éClÇÀ²ªÎõÑý,„B!„Bq±Êqf—½N4\rÞëÑ !ÉÀÎ3IÀMe¯mmîû;÷ü•Æžõn;¯øªƒ@M NC[ŸÒÐuègêÏûáŸ`RLä8³™‘ûZƒ×1Ø|%ñ†Îl±ljtLõ¥‹\VA×yr‹ÇÖëÊI—_$ú„‘¸òNº}û¾ (úÜé^6ëp¥¶ö½¿º“y͘†>šú£Æ´­Žj) ä‡ûpžÜ-æk^B]CõNMÍ÷Ð]ÙGP-î縜 Ñb0¥Ê|Mpô]¯9³ìpÕü¼AKIKK <<œÐкŸU`ÆŒh4¾ÿþ{~ùå\.?þ8ÅÅÅDGGóÌ3Ïx4Ƭ¬òÊÓIII]wSùùçŸËžE©®ši§NʘæÎ[ë³(ƒž={rÓM7µoïüùóÉÎÎF¯×sË-·”%µÍ›7Ïã1µÔ1š3g‡ƒ   ž}öÙf{¦¥úmŒÖx%''ãp8ˆŽŽfìØ±?~œmÛÜèÌ;EQ˜2ÅýyqàÀõÛ/Ôþœá¡C‡ÈËs?_XiÞÎ;ËHzè!z÷îÝtAVàÉs2==€ÈÈH"#«ä¤)Ú6ôsÿ|Í;—ŒŒ Þxã &MšDhh(~~~ôìÙ“§Ÿ~½¾y¿OBíŸGù¾áés2??ŸÛn»M›6¡Õj™1cF³çB!„B!DcÔ]B±Û襥Ìfº~ —ýÎá”ØmvB‚<  ñؼ£éFS¼jÔà²×þ~\Ú·;Ëý^ãòo|ð‡e W±÷Ar²óÐétDD…1öúQ»|Û»«òˆŠªªòÚ ïðÎç¯`2›xç³WX¾xkWnäTêiœN'^Þ^tˆkK@?¿ó•Ƕ±µÅ|úT&ß}9‡['_Ϩ±Ã0{™ùå¿ )*,â’î Ü~ÏMèt: ò ùâƒÙµ®k×v÷¹£Ñ(<õò#|ñá·¸\.¢ÛDÎ'3¿n’¶çëö»o"(8€Õ+6PTXD|BwN¹/o3‡ƒÏÞŸUiùÃ’IOË "*ŒŸ˜‚ÑddëÆäç ×ë ò¯1‰×jµñܯðÚ{/àåmfÚ Õ;ÎÌÓY|ùÑwüåþ?1zÂz^–ÄÏÿ™Ç±£'ÉÉÊÁ`4N÷K/áÍ—ßÃY!q¶±æÏ]Âàa  âßÿ“¯?þž´“éŒzÂ#ÃÐhëNtjè~>WCß7<á¶„Ž™Œ¬I;M‘ÝA§@?îHˆÃK§ÃáRù|ï¡JËÎ/$½¤”/3ôHÀ¨Ó²5#›|« ƒVC€Á€¹–›¯_qv—Êò§ØŸ“O®ÕŠN£îefl‡Ø² Íûsò<Ú¶¢«Ú”ÿ`ïo4piX+NVŸ|–RPÄ’ãi\ÅèömðÑë™—r’"›þ¾\×1¯Zn¢,HIePtÁõáë}Éœ*.Á ÕæeBSCöàé’R¾?x”[:w`dÛhÌ:-¿9A‘ÝAbp·'Ä¡Ó(Øì|±ïpµë8^XL®ÕF ÑÀ½Ý:£Õ($ç¢(ÐÎχ6>Þ|°«üFXf©…¯öfrb'®mCÐ æ9ÎñÂ"r,6  Þfº‡1cÛœjåÄhO£æb·9ùð•µ<>}hYuà„á$ô¨¾‚ùŽiœ¨¦’êÞméôX^5ø†»{rÃÝ•„ËJ/æèìs›6ŠêRÙ²ú8¯v¯ñ 0ñÄ«•«6ìÛ~šÜ¬’êš7HL;‚Í Ó‰¡cª&ÍW´ksZ£û«ŽªÂ–Õ'¹bÄ™í 4ñÄk•·w¯‡¶·Ò:[èøô½²-}¯l[í¼¥sTJPß¹1­lßhuõ*JKìØÐhük|ãèl¾ÿx7MéU6M«Ó`®!)¿¢ÕKŽ0hTG{EàãgdÒäLš\õá¼Ô”<Žì÷Ì~r:\¬]v”«Æºš4µÜÿÔåçµ®†ìg!„B!„Bˆ‹ÕAÛN9N©‹äáÀÇ1)&6Y7’çÌàè ÐaRÌu®§­¾Þw…®ÝÖ]M³ŠÊ?s^àÃðÏ0+f> ÿ”%%‹Y]ºŠTG*NշƇŽú8µ¼Ÿ7³¬m†ó4Ÿ|Äÿûç3žKM½ù±è?¤Ø’íÌÆ ˆÔEÓËØ‹Wrþ‰“Ê÷¤ÌŠ??‘ºH ‰ óºš$£û7±gfM%˙ŹfEþ‡5¥«ÙaÝJ¦3‡ê DJ?Snð½©lsŠþëÁ½¥à}ûlG×àLÝŽ«(Ó8ì‚¶]? =npïÓ’ì;æx®[§gV2Ú°Î(Z=¶­ß–ÍrX W>RVý×yz_¥¦jaÖõŸb0}·qhÛ\Š}Çq夠gƒÎ€Æ/ mLO,Ë^q'Žz mVJ~¯?ByÜ”̾WÞ‰J‹yMš‰ê´ã8°gúÔâÐêÜIÚIÊ·7}÷ùîÕ*œqœBãéN(Ö™pžØ„ZšZŠ9ô5üFì°Rúë?0OxÅài„g“MÏWþó`øhBÀÿÈœjù˜³ÿLCÁмo}'÷4ÇQ@CÏÇä*HǶù }î@Ÿ8Åà…}çO¨ÖB´‘Iúý4:TKÖuŸx>Ø´É=ð¢(¼÷Þ{¼óÎ;X­VÚ·oOLL ¯¿þz¥åŸþyÂÂÂ8zô(/¾øbÙôÔÔT^}õUžþy&L˜ÀܹsY½zµGbÜ·o©©©DGGóôÓOc6›Y·n999F‚‚‚0›ëþ}ÈËË# €ÁƒsÇw`0ÈÉÉáí·ß®±­Íf㫯¾â¡‡âÞ{ïÅh4’——ÇÊ•+=gK£ôôtfΜÉÔ©S¹á†èׯ³fÍ"99™ÌÌLŒF#111\vÙe<ûì³{¦¥úmŒÖxÙív8@bb"|ñÅeóæÍ›ÇÓO?]V¥u×.Ï}/nÇàË/¿Äf³1oÞýôS¼½½yå•W<²Þ†hèçQc¾o4Å9i±X¸ûî»ùöÛoIHHàƒ>`âĉ;vÌ#ûG!„B!„h u‚²Õj㻟pë¤ÑøûùpãøQÕ.·÷@2ë6nk²82OgߥcÙßéUo@Ÿ¥ÑhèšÔ“ÉHŸ—ָܚ•X±xU•éûvà±ûŸá™=FHX0ÃF aب!U–+.*.Kö5{™ÑÖ#áò\¥%œNg‹Äì ¿ó¡á! ¿öJ† Èa+Í/,(≞#3£öä™#‡RXýÛz.Òž—%Ñó²ò‘ôòs jM2®oÛÆ£ŠôzãoÍøGWšît:ù×Ó3H>x´Òt—K奼Ϋï>¯7<õ×Ű}ó.î¹y*÷Ù}Ç.½£G{U®zQ`³WJPøjßa Z ·tî@´÷'u©vÝß<ʉ¢òʲž³vÙQ kGÏþåÉÔf/=f¯úDü¿Y»9v8—‘“ºÐ1!“YO^v){¶žâ²Á±xy»«(»œ•?»U—ÊŒ'cÊ´\6(¶ºU—‰n繊 ÿùx ÝÃë}~6TuûY!„B!„âbåÂųÙÿàß¡3ñÕøòDГ絞vúöe¯O:Ž{*¼í±íæo™÷óbðtBµ¡Œðůª÷‡‹\E•”>Íÿ£bäv¿?£kÃß©¶o ¾â¸£òƒá ø7úÞ\išŠÊÊÒ¼–3 çéj×ÕNßžNúx:éãÉÕ.“áÌàÑÌ©º «>4AíЄvÂZó”jQ¥??Šjõ\¿®ô½hÃ:ƒê±ç×òþ,8¯@×y8¨*®Óû«´µ­ûEkÀÐç41W­^`Ûü ®Üãk[ÕZDÉœ©xß> ňyÜkϺV÷ŠMÄ%(zºvýk\#yŽKëÕgýsaYð æñÿF1úbö÷5wžÜJɬÛ1^þWtíûƒÖý{°j-Âqø7ô £ÎT¡®zo·©¸ ¡à-x´aàs;~XqÈ™ ¯€±.uÿkjÖ5ï¡ø†¡O…®ÓPt†Vš¯Z (ýi*jQFÓsRRRøßÿþÇØ±céÕ«ŸþyÙ¼ÜÜÜJ‰JC† aôèѸ\.{ì1JϹ§:{öl&NœHRRÏ?ÿ<Ç÷HœËåâ‘GáÓO?ÅÏÏ^x¡Ñëlo¼ñŒ7Ž‘#G2räÈJóóóó¹ûî»9}ºúχ֪ºmweʻ¬¢fM¾úê+î¹ç¼½½w…K›ÍÖ$±¶Ô1š9s&F£‘)S¦Ë´iÓª]îÓO?åèÑÚŸ)i ý6Fk¼ŽvíÚEbb".—‹9sÊyÉËËcñâÅ\{íµ¨ªÊž={<Úok;¾Z­–îÝ»c6›4hPË-[¶ŒùóçW™¾cÇ&OžÌŒ3g̘1Œ3¦Êr………KPÏ“`éÒ¥ 6Œ~ýúѯ_¿²y¹¹¹µ&7¦mC>÷kÆ Œ?žG}”Aƒa0¸¿O²dÉÆW㳂žÐÐÏ£Æ~ßhŠs²°°¿üå/üúë¯ñþûï3aÂ,–šŸ B!„B!ZÒE  pøèqÞúðköíI\‡¶øù¢Ói)-µv:“í»ö³c÷þ&½}öÞŸJTLsÿ;ŸÝ;öÕ¸¬ªª<ñÏ2èª\Ò=à@‚üQ]*9Ù¹>x”å W±tÁo¸\ÕG½mÓNns7׌ÆÀ!}‰‹ï€_€/v›Â‚"Ž&gËúíhµZœN'o¼ÿ"Ýzvmðv=tÏ?ؼ~{‹Äì N§“§½Æª¥k{ý(.‰Çd2’~*ƒ5¿m`öçÿ%·ž•=Ÿüî¼÷®~¡á!جVŽ:Æï+Ö¡(J­?¨Õ§mcQE ÿ· ½^GÏË’ðô#?·€m›wñͧÿáð#Õ®gÇÖÝÜ>á^&Ý2Ž^}’ ÁÏß—’âRòó ÈÉÊåxÊI6®ÝRmû£Éǘö·Ñô‡ár¹ÈÊp'ÜŽã®xiµV½±¤ª*½ýKüÆø®¥gŸ$ÂÂC0 sìè ¶nÚI~^AYOí«WŸ›[v3zâ:vj—·v»üÜ|ROœâà¾d6®ÛZãúÎg?WÔ÷ OYt,FCÏÐ üò­6¶gæ0k2‡ó«egV.w.^Íĸ¶ô &ÔûfÞ÷ IDATË„ŸAO‰ÝAÍNŽÅʱÂ"6ž“`­ª*_½…AÑá$l2`4 ¢’c±’œ_Èò§Xvâ®s®ŸÆ´=×{;÷f6éíÅÿŽgOví×|‰ÃÁß~ÛÀ„¸¶ &Ö×EäüBKåÿº' ×Ôœ ÿÚ–]ìÈÊatû6tð÷ÁK§Ãîr‘oµ“V\ÂÁÜ|6®šŒîTU^Ú¸ƒU©éŒíK—@L:-éÅ¥¬=•Á·Ž[Í5t®_ž ßfcBǶÄøá£×Qêpr8¿€ßSO£Pùqøx÷A–8Ÿ±ô "ÔlÆ ÕPd³s¼°˜­™ÙäŸscؓǨ¹m[w’o˜Ã ‘éÑ7šØ¸@|ýè Z¬¥²3Š9r ›ÔcùÕ¶·”ØyîþŒ¿³;ÝzGæV§P\`#7«„ý;3Xÿ[ÓŒjš‘VÈÓSæ3irw/Ä×߈Õâ 3­ˆ=ÛÒÙ´ªæ‡ªvlHå–Aõdݲ²OÓ÷ÊvtéNX”f/=»‹üÜRŽÊaýŠc¬[ž‚ZÃç¾'dž*âé{æ3áÏî}íh¢¸ÈFæ©"vm:ÅÆ&ØÏ=¾ ÙÏçZ·,/=í;cöÒ“qªˆµKòë·{°Û*7R]*oL[Á Qé7´áQ¾›Ñ´Ø¬N ó-dŸ.&õX>{·V?HÀŽ ©Õ&x÷Ú®ìuIQÕ÷’b3žú.Ia\1ª#ñ‰¡…zc2ë°Xd¥s`çiÖ/+¿ùí`B§oøà"…yVìv÷¶æ[yúÞùŒ¾9‘K¶!4Ò½^KQ•‚< 9™%ٟͶu'k]gCö³B!„B!ÄÅl›u+7¦OäFŸ[èmºŒ0m8þZŠ]Åä»òÈvf“b?ÊzËÚ×©Ü ÏéÎæ¬r‹e3ÓÆ0ÚgW˜¯Ç_€ …®ŽØ“ÙhÙ€m¥JÈ**ïæ½Í¢âLô½ÞÆËÓ…cTŒº H±§°Ù²‰é¨â‡~`Û¶ªƒÿ»\.¦OŸÎìÙ³i×®7ß|3ß|óGbÜ´i#GŽäŽ;î ÿþDDD@QQyyydff’œœÌªUUËo)N§“‡~˜E‹qóÍ7“””„Ùl&55•eË–ñÑG‘]û@ù­ÉôéÓ8p ñññDDD`6›±Z­¤¤¤°téR>ÿüs ê\OAA³gÏæî»ïàûï¿o²˜[ꩪÊ믿Î/¿ü­·ÞJ¿~ýˆŒŒÄh4RPP@rr2ëׯ'7·ê@Ù­±ßÆh×Ñ®]»¸é¦›X¹r%©©•ï³Îš5‹k¯½–””ŠŠ<û«µ_—ËÅ]wÝň#èÕ«¡¡¡»Ÿ%ËÊbß¾}Ì›7_~ù—«úïH6l`ذaLœ8‘¡C‡’@`` 6›üü|:Äš5k<þœ¡§ÎÉ©S§òÀ0jÔ("##±X,À¬ýu'O‹š-0½FÃÌûøáPJK‡ÓêÍ9˜h/Þܺ‡¹Gš¾º†’6íxå˱eüê:Vüz¨#‚¸®!¼ðÁ5eÿðÉv~újg£×ûì»#éÜ-¬Áíþùðvo>U÷‚µ¸÷óÏ£‡h2òòÆ,>žÖ¢±!„B!„ââõÝwßU;ývoWQš vxÿù¿”þü0Žä '!Tqq¸õÖ[yá…ضm“&Mjép„BxXÇŽY¼x1S¦LaéÒ¥-‘B!„Bqñ«.ÏwРAãEÉU¥Ðår½^o+))±k4»···Ëf³9CCC]GŽQ}}}ÕÐÐP511Q}î¹çªŒrvÑWPu»ÿŽG[:Q‡‹õ¿q4.—ÊÞ]û=²Î‹u_ !„Í¡}ç`n¼§'«áÀ® òs-h4 ñ‰¡Üñ·>•–ݹI’g…B!„B!„âBßãz÷ Õ…óÔî– FqÑ áàÃ?láh„B4…?ýéO€»’ööíRG!„B!„¸XH‚²¢I½øÆ?8q,]Û÷’•‘Ei‰…ðÈ0FŒ¾’Qã®`ÅâßÉÉÎkáH…Bѹ[I—E‘tYT­ËíÙšNò¾¬fŠJ!„B!„B!Ds0yWîqœi;pe€Ý‚â¾ë(ô‰cp\ŠZ’Ó‘ !Z»øøxJKK±Ûí\rÉ%<öØc„††²zõj–,YÒÒá !„8O3gÎ$%%…-[¶púôiJJJˆŠŠâºë®câĉ,X°€¬,yÞ@!„B!„¸XH‚²¢ÉhµZ êƒÁh¨q™ƒûóæËï6cTBˆÖfJ·Îü¹k\¥i·/þ›½…"ââ×5¤ÎeŽÊáÝ÷XŸÏÿu¡ÇÖÕÚÜ}I<×¶‹©4Í¿–ïMB!„B!„BÑd4Zt.±ÆEœ§÷cY:½ƒB\¬¦M›Æ Aƒ*M;|ø0?üp E$„¢±´Z-C‡Åh¬ùûäž={xæ™gš1*!„B!„B45IP¾€ü¾s~‹ô{EÒ5-Ò¯¸øétZ>ÿ`6—öíNt›HýÑôärøÀV,^Í¢_–a·;Z:T!ÄÌ[¯Ã[_ù+‹¢([ÿìU·{l]­Á-ƒ¾jéÄì³vsòh]{FéC@°F¡0ßʱÃ9lZuœ5‹b·;[:Ô‹‚·^G ©æ›³B!„B!„BÑl4:¬ë>FÛ% Å+Ek@µàÌ8€ãà2ì{çSB4^ii)ùùùxyy‘ššÊ¢E‹x÷Ýw)..néЄBœ'½^ÏÛo¿Í€ˆ%88ƒÁ@^^{÷îeáÂ…Ì™3»]¾O !„B!„åÌ¿Jž{î9eÏž=Jff¦RXX¨tèÐAÉÌÌÔ mqq±Æåré½¼¼ôv»Ý˜4·ªª¾ªª®ZµjîæÍ›ËÖÕ»wïfÜœ–W÷BB!„B!„B!„BÑB¾ûî»j§ÿÑîí !„B!„B!„B!ÄŪº<ßAƒS%WQ”B—ËU Xôz½­¤¤Ä®ÑhìÞÞÞ.›Íæ u9rDõõõUCCCÕÄÄDõ¹çžSÏíCÓl[#„B!„B!„B!„B!„B!„B!„B!„hõ$AY!„B!„B!„B!„B!„B!„B!„BQo’ ,„B!„B!„B!„B!„B!„B!„B!„¨7IPâãàG¯>I´ëÛÒ¡\ðd_ ñÇ (-¨‰—?cK‡ñ‡!ׂB!„B!„ç/@@oÓe´×whéPÊøk¸ÔÔ›8}§–EÔ@ÉXLW=Ž.þª–Eˆ&H¿~ýˆ‹‹kÖ¶¢åзo_:wîÜÒ¡!„B!„B!„het-€¢²Ÿ–~Þ çW?"%ùxK‡SIÂ%ñ<ûʘ½LLö-Ö­ÚØ¢ñ\ÈûJá6{ä`¢}¼ª7ö—eä[mµ¶ïÐ%˜É÷ãý®&5%¿)BlQŸ/¾£©ú¯cük «$7sDu ñâîÇûÓ¦CÁaÞ|üê:Vüz¨Áë6.žI“{àr©|÷áVV-lø¶&õ‰âÊÑ蔊  «ÕA~Ž…ô“ìØÆÊù‡±Z ^ï…è|®…©=»2¾cÛjç½¼q‹§y2D!„B!„Bq‹ÕµåÏþ!ÑÐp]ÕÎ)Ç)öÙö²Î²†å%K[:Ä:Í‹^‚A1ðfîkµiépø9j>ÞÍ{‹Ãö†ÿÎ*šžqÈÃ(F\…-ŠMníÚµ ^zé%>ÜlmEËûí·ßðõõåµ×^ãÀ-ÎE/))‰·Þz ///þþ÷¿³bÅŠ–Éãþüç?óÔSOU™~èÐ!FŽÙdmEëÔ¾}{î»ï>ºwïNTT6›ÔÔTvïÞͪU«X¸paK‡(„B!„B!j! ÊBˆz›|ÿŸˆn À_þK‹'( ñG¤Q"¼Í¤—âRÕ–§Þ,'6—«Ò4µŽøµ: ÷<1€ØŽüó“Ñ|ûÁVý¸V´Ù%_=úE7jÁaÞüù¡¾(wIà»ïÏöõ©äY꽎;êËðñ•Gq÷Òðò6ÙÆžýcضî$™§Šë…à|¯…R‡“›½Ò4_ƒ)Ä,„B!„B!¢›±;ï…}„I1•OTÀÏàOgCº“ZE‚²Bq>4 111œü×Zr³Jš"LFNJ Sb(ÑíüÉH+äÍ'k²¾,%åɣТ`0j›¬¯ I`ˆ¹,9Ü ¸Áæz'(÷¿ª]•ääsåç”V›œÜœÇ÷¬]‚<*ŽÄ^‡{p:µ-kN°à?û(*°ÖÚþ|¯…wàÃ]•G¹ÿyôPMÆFn‘B!„B!„ø#y:è9LЉbWïæ¿Ã&Ëœª“0]ôñMÚ·¯Æ—÷Â>¦‹!Ç2â·ÒåMÚ_E—šzs¹i0½L½Õ†“íÌâ¶ô›*-ÓQÇw‘?Ö{·¦ßÀAÛP™RÑ ‹‚¾Ë´QI(^¨+®Üã8’Waßú-ªµõþ(Z]ã~}7ضW]Æçnð½P!çA°®¯~]úðšÆË@ªœé`ÛÅ?‚ód“mF‹7no¾ù&ùùùôíÛ»Ý^G+у â½÷ÞÃl6Ó­[7JJšî¥8?­ñ9޲×΋ôÙ›Y³fñãåß‘zè!n¿ýö&o+ZŸéÓ§c6›)**âõ×_gíÚµ8NÂÃÃéÒ¥KK‡WEk|ÏB!„B!„hju‚²³>™ù5¡á!˜LFÞyõ£–Gˆ?/½“ö‘À °~E § ¹î¶n\zy,ŠI—EqÕØxþûY5O§xȈ‰]ö /»´Éú¸ïºÊ^· â_ŸnÒþ.Ç“sÉ8UDX¤iÇòI=–_ïöW^Û©Òß³ßÛÂê%G@… 0oÚtÀ쥯¶ms_ƒQË]õçòáªÌ‹íHlÇ@®Ï+-åèÁœ×ÓRׂB!„B!„õq´×»ßz3ï5þWôsÙ¼Žãl±ln²¾£u1¼ò&ñ†Ú+ô´nÆ$|œK Ý*M7*†f£)™Ç½Ž®ã JÓƒmxÚðô‰c(ùî/¨E2¸·hy†žà{—ûuñ÷5$'+à÷7ð¾ÐT˜lèãÁkœ¾T[sDÝ<Æ€ÅbÁßߟ!C†°dÉ’Žêââíí]©ª§¸ð´Æc4cÆ """0›Í¼ôÒK-N“°ÙlØl¶J7G[ѺÄÇÇÀK/½Ä?”??‘’’† Z*´µÆ÷!„B!„Bˆ¦vQ'(geçòúÌÏkœ¯( 7O¼–¨ˆPÒÒ3È̪91D‡á/7<ÐÒa!þ@ŽìÏæÍ'£MûÆÝÖ˜öÌýzWK‡%Éfuòì½órm'\.+~=ŒÓáªwû˜e¯÷nKç×ïö”ý—SÊ‘ýY÷|M¸³{µÉÉùšxèå+yô¶¹Ø,Ž—“kA!„B!„B´„H]dÙëÕ¥«š¥O-Z&ú^Ï}þà£ñi–>Ïës| ½¢ç¸ã8‹Šç³ÃºTÇIŠ]U+ s¤06mTëÓ á•7èlèÂ~Û>RìG›2üz³ï_ˆ&0ûž_p¦íBµ ñ CŸx-º.#ÐøGa¼â, žiéPÅœ&ÿhÀ¾ ß©~9ÿÇÁk’ûµ}}ã^^Ñ€>¼oÇñ‹+99,,ŒͬY³xðÁ7nœ$( Ñ ìÛ·±cǶtB´¸èèè²×Ë—/oÁH„B!„B!Dc\Ô ÊN—‹Üü‚ç_ÑïR¢"Bq8œ|ÿÓBNg3F'„Bˆú:q4™/üŽV«àtª-ÎIÑ(ètªâ°×?á·%äçZ˜ûÍù%Øzû”W*É>]ì©ê¥!ûù—Ù»0¬=!áÞìØÊ’Ÿš’OT¬?úko"cý ÷æ²+bY³äHý˵ „B!„B!š“Q1•½¶¸,MÞßµÞc¸Ûÿ^¢u1¬³¬¡¿i`“÷ 0À|9O=‹Suòjî¿ø±ð?¸¨ýwV‡êà”#­Æù·ùÝIgClª•'³žÀvdG:ö/Á± Pþ£+ë0Ž”µ˜µzt†¢‹Ür  ƒÀé  Wä>^}‚±ñòòääÒy÷T¼tÇ¡t(ÞÍu³7nZ­–ùóç3gÎ|ðA†Н¯/………-žBQ'“©üÿ¥¥¥-‰B!„B!„hŒ‹:A¹6~¾\5¨+Vo$+'·ÉúЉâù×þNt›H~ú~¾õEmÌ^f&Ý2–˯ìG›¶Ñxy›)).%?¯€´“élݸƒYŸýPc{£ÑÀ°k†0hè:%t$ ЇÝN~^!‡aíÊüòãBneãcN¸¤3×ÿi=zw# П‚BvmÛËw_Ía÷ö}µöݘítÕÆ] ];a2I?•Ášß6ðí?’›“Wm›ÑF˜Ô…Žñí Â×ß­FCÆé,6­ÛÆìÏÿË©ÔôãÕétL¼e ÃG%¶m4( Çž`ñ¼ (µnkC»þ}úÿ8q,•[ÆÜ]ë²½ûõ`ÆGÿ$+#›ñÃnà†?]ÇßSeÙ£ÉǸ}ü}uößÒûª!Ç·±ûê\çsퟯÑíÛÐ34ˆþ¾„y™0ëtXNR‹Jø=-£Ø^seÎ?wíÄ¥áÁ„šLøõè5ò¬6vgçòáödW-˜uZ&Ƶc`Tm|¼ñÒë(±;(°ÙI+.akF6³TŸtט¶gÅøxólßDûxñsòq>Ú} ^û¬Ghã:Ä’H€ÑˆSu‘kµq¼°˜=Ù¹,>žFZQIÙò­†%ãGð†í,;qªÊ:—N^£aæŽ}üp(¥Ú~¯ˆg\‡X:úcÒjI/)eí© ¾;p„\kÕ§*ÚûùòÅðË«L_xÝð*Ó¶ddóðªÕö›äϤ¸vô Âßh ÈfgWv.ßLawvÍŸž8FžTß„L^Àaí¹t`ÚÇã`DQ r-dœ*dçÆ4–ÿrˆ¢+Ÿ/¾£©ê×¢¤>QÌ^u{•é_ü{#‹çì¯4-4Ò‡î}£¹äÒ¢Ûúâ…ɤC«Ó`)uQÌñù|ÿñ62Ò<ÿ`HÒeQ<ñÚUÞ›Å3÷ί³Á¨åª±ñô¾"–˜öxùè±”:(̳yª˜½ÛÒYôã>,¥5¿ Ϙ[ ÷¦´ØNò¾,üg»·T½FjÚÏük «$רOMm¯Ù‘+Fv¬2ý™ûpxOf­mr|ËÚ4`?Úx÷ÅßiÓ>€¥s–M?ZHa•Þ/¯¬Ò6.5 (j ÉÉB!„B!„¢©tÔÇñ]äU¦¯l³®Ê´wóÞ⋂ϪL¿Çÿ>ú˜úª #@ã^1ëÊa‡u;ßÎb—uGµ}ÇèÚ­‹á„ã8ïå½ÃË:–Ǭ®wì:EÇ>73Ê{4±ú¶((¤Ø²°x 5ßWòÒxóBðËhÐðlÎS,,žWï>k¡‹ä÷½´Oó?æ¸ãX˶ÓwàÙàécêG&ˆ|W›­›ø²àsÙêwߣajþ}Ñ™º]§¡(:£»ü¬ÚøÁ0õI0]ý\¹Ç)þlB­ËjÛöÁkÒ{¨E™}Xµ:µ6"}¯›Ñµé…bDµâLÝŽmó78ÓvÖ¾îF´­ŽböÇë¦Ïеŕ}„’oÿ‚j­üû¿¢÷Bßë&t¡ ŒE1x£ÚŠQ-ù¸òRqžØ„mã— î».Æ÷ í‹âŠbòGÑPKrq¦íÀ¶õÛ:¶WAße8ºÄ1hû ˜üPVÔ’\\9)¸Òwcß»WÞ Ç]QÀ“`è¸ ïIpV½í€ï™[ÙŽÿ2Ô4®€ÚDãê:]‰>i"Úˆ®(:#®‚tGVaÛô5jINÓt \wÝu,X°€'N°gÏ>|8?þXõ=¼,^Ž;qãÆÑ¾}{EáÈ‘#Ì;¥Žûïi{¾n¼ñFºwïNBBaÿÏÞy‡GU¥ü3=3é½ÒBH£) HQQÄ\ȪˆeÁ¶üììZVW+¢ «€Š"Hé©!„Bé½M¦Üß“L2̤LfBp=Ÿçááνç=çÜ÷”É3ç|Ï‚¯¯/ …‚¬¬,¶oßÎܹs¹p¡ñ¾8bÄî¹çºwïŽV«%33“7òÅ_ŸŸo—>66–_ýÕîþÑ£öïîܹ“ûïw¼_ gÏžLš4‰¾}ûHqq1`Þ¼y‡jÔ¾sçμóÎ; 0€   Ù½{7Ÿþ9ÉÉïÛqÖφ'NXëýË/¿Ø¥INNF­Vóúë¯3þ|ë}wµ‘³ÜvÛmŒ;–øøxüüü¸páëׯççŸfÚ´iÜpà ˜L&V¯^Ío¼AEEÝ~ƒ|—^zÉ.ÏÔÔTFÕ¬òu:“&MbذatêÔ ///ÊÊÊ(**"==]»vñùçŸ7hïááÁ˜1c1b‰‰‰b0(,,$99™Í›7³dɇ¶mÑŸ]¡¥cÁsŽ+¾º’ã¨Wû•³83~ßyç>ûì3‡ù´ÔÏ-é®Ì9îh£àà`LŸ>}ˆ'22oood2ddd°téR¾þÚñß”-õÕ•î@ @ þ¸üiÊ7Ý8•JIQI)ÛwhÕ²ö!bb¸ïoãÙ¾y7Ç8½øúùðñ‚wèÝÎæ¾·Þ>^Dµ@¡7(öMìÇÌÿÌ <2Ìæ¾J¥D«ÓBEy¥[Ê®ÖyÊ´IÜ÷·ñ6÷ý<| ƒ† `ö›Ÿ²ì;ûè åï«P(xáõ§qË6÷ÛwŒ¢ý¤(n¹c3žœéPýijáéeÄrd»p"Û…sÓ̓yê‘—Hv ”ôôÒ1ëÓ×èÖ3Áæ~lBŒµŸ¸“Üœ<üü}›Lè@NvžÛÊo+_µ¤}Ýí+gǾ+<Ö#O•í”î©RëïC¬¿wtîÀÿí8@Ja±Cû~áÁÄ_öÞÁZnŒ gpdï8Æê´ ;;µŠ†ô£ƒ—Í}oµ oµŠH/r™Ì¡€ÕÛËß=Öß…ôÞøh¶_ÌæD‡ (d2žJêÊ˜Ëæ+% ÂtZÂtZú†Qn06(2n ™Œç¯íÁMí#lî·÷ö¤½w'nîÅó;4*n)t‹ãÞøh›{þE†qCdï:Îò3évvîj£+ME)” IDATl·`žxeAaösOP˜'Aaž$ô c˪Ón+óÆ[»ðð?ú7øÜC«$²ƒ/‘|YòùÕ±@¬ãÅ÷GÞÎÇæ¾§—O/5aQ>t¿6œ?Ÿ‚FÊâ­×*?Iý£HêÅWïî¶åþYI9’CÊ‘»ûÙ%¶7Zgߎ@ @ @Ð& Ô^O¢º›Í½E(7éF2Lwoü“ŸË–ÛÙ--ûžÕÇÙQ¹ 3f¼åÞÍ.ÓSîÉœàOé®éis?^@¼:¡+ wyÇWîǾª½n'<æû$2²Œ—ø¦´qê-žcl>*‚©ÍpÝfæ¿ì¶:5E¤Å¦ìd·ˆ“¤2Ëa’2­_“iå:ËoÎæÒl»gšž@Ýw’Í=™. &âóTmú†ß¯G»bë™Úí è€TšMåO·'k}ÑM˜‡<°“í}d>ÈýÚ!“Ë[E ¬è4EXWÛr½CPÆÝ„2vUë^Çpìgû÷Riñó6ÊNìîË|µÈ}# Ó¤ª2ª.r{½kñ~ ´·Z®KÞýnÇé”AU3¼Ë‚dhµ*Ù#Wà1j&ª[!½< ê€ûQu»ÊeÓ[$~oŠ:O^^ûöí`Íš5M ”½¼¼X°`III6÷»víJ×®]Ú¸ÃÖžþy¼½í¿ Ú·oÏ=÷ÜØ1c˜8q"‡Û|¡P(xçw¸ýöÛmîGGGÍ]wÝÅÃ?Ü*âÊçž{ŽG}Ôæ^PP#GŽdĈÌœ9“o¾ùÆíå2„=zØÜ ã–[naôèѼð üðCÃsݸq¶‡H3fÌn¾ùfž{î9V¬XagÓ–~¾Ò<òÈ#$$ÔýMCLL S§Úî÷ÝwÄ”)SÜV¶ŸŸß}÷11¶{e|}}ñõõ¥C‡(ŠÅ‚½zõâý÷ß§];Û}*• NGdd$åååÊmÕŸ]¡¥cÁ•9Zî«¶G®ö«¶Â•>éê<Ù,_¾œ°°0‡Ï|||HLLD§Ó9|ÞR_ýQû†@ @ ‚¶áO)P  g×86lÙ…ÑdjÕòB‚m>‡†7*Rœ8å¯tˆn‡¡ÚÀs²kû>Š ŠQ©U„†—CEy¥CÛα˜=÷MtžZÌ&3ëVmfû–Ý\̸„L&ÇÏß—n=ãÝ.’t¥Î÷N¾Ë*N>¸÷_ÌùšÌ —h×!’©OM¦[¯¦ýߎ>AêI[œ+ïûÈ´‰Vñê†_·°òÇ5”–”Ñ­g"“»?_Þž3“IyœÜD¨[6ìàçVSXPŒN§¥Gï®Lzô<½^Ìfæ;Åî¬\ŠôÕ¨ärBtÄùûRÑ€]±­OˆÎÃæs¨NÛ¨@yr×.Vqò‰‚"¾;uŽôÒrä@ˆNËÌ~½Ð(M–ë,w‹µŠ“7^¸Èʳ” t ôãÁÄ.øiÔü{à5L^¿ÜÊ*«]ZI)7-[ À ¡¼r]/Æü¼ªË¾¿Ì’}ă{⢭âäC¹ù|qìË*ˆòöäÑîqt ôçï½9–_Äé"[Á¤»ÚèJÓ5˜?JÕx¦¥PRTç窊º¾­Ö(­ÚÍf Cµýß F£í¦,•ºy}¦¬DOnVY³Ò¶6“Ÿég'N¾œ‚Ü k”ig¹ï‰k9¸3ƒ‚ܺ“ÁëûY&“¡Ö4¬Õ·­ Ùd2c4Øo’3׋0ìjû¶}nhoóÙ‘ˆY @ @ h ÎÎ0ðB_nÔåõ ·ž1˜JÉv½ÏØ€pnñg%#™Æ ÊÌ¥(eJÕÝxÒo:U˜áÿ¿Ul¡Ølû{~¾)m•¿µ¨Þ/¼j'ÿ\¶œUå+)“J‰S%p·÷=Īã´½ÕÓ")0ç3+ø}bUñ*)—Ê9®?Ê÷¥KØUµ£Ùu養f¤§E´øYñÇTKÕ¦7H~*[Ê–Ê”˜KˆS%0Åo*¡Š0^ øgªSI5´Þ2òà.¨“îFÙe(’¡ ýoï»-sYNM9Þ P©a©L€Tfû›©ºïD«ÀØta?úíŸ`.Ê@îßÍ ¿£ˆèÇÏbºxsÎ)·Ù:¬£‡Ú;ç 늹ä•ßOÁ\’e—NÝï!‹8ÙT~û§Ïí@ª(¥ ¹wŠÐx¤ê %¸Nõι`6b.ÎDÒ—\‰",Í ¿#èˆÇ°Ïü†Ti{¸±æ¦¬âdÃɵýŒ¹,™RƒÌ/ íͯƒÜýëhõѯ-×åK üû†Óª{×]WmnÕjÙ¡¹þq«8Ùpr-†#Ëô%("z¢ð2­?Ú;Þ§|áÝH¥î]1b7nÄl6[¯Ÿy戇‡UUUvvo¾ù¦U`üÃ?°lÙ2JKKILLdÒ¤I6ÂKwÚºƒ5kÖ°xñbòóóñôô¤OŸ><ùä“x{{3kÖ,FŒa·ßà¹çž³ŠýV®\É’%K())¡wïÞL›6€€¾øâ n¹å²²êÆpjj*‰‰‰€Å×ï¿o™¯¹æ*+m¿MöM™2Å*Û½{7³fÍ"==N:1cÆ z÷îÍ+¯¼ÂÁƒ­Q5ÝÅ|€Ñh$==ÒÒRT*=zôàÿø;wæŸÿü'ëׯ§¨ÈñzºÁ``ñâŬ]»–’’™>}:áááüç?ÿ!%%…“'m÷<´ÔÏ®àj¹Ê{ï½Ç‚ èׯsçÎà¿ÿý/|ðC† aÖ¬Y >œ.]ºšš ÀÂ… Y´¨î`‡çž{Ž|°Ùe>ùä“ÄÄÄP]]Í»ï¾Ë–-[(((@­VN÷îÝ)+s¼ÏÂ… ñôôÄd2±bÅ 6nÜHzz:2™ŒÀÀ@’’’FŽmËþì ®Ž…–Ì9®øª-Ƹ֯ZŠ3ã×h´ßâjŸlIßhë9§–C‡±|ùrN:Eaa!ƒbccùý÷ßíһ⫶è@ @ þ¸ü)ʃú÷A&“QX\ÂáãöQ[ÝÍæµÛˆï @qQ ö8>E±–î½,?h­[µ™Å_Ûžl››Ç±Ãö}kyöå'Ðyj©ªÒóì£/søà1»4{wº?btKëÈä©÷°uãN^~æMëZaAOMy‘Å+¿ ($ ÷ãõgÙØ·ô}Ã"B¸û~Ëɯ«—¯ç̶߯>K=y–ƒû3ÿ‡ññõfòÔ{y{æëŸr<•}»ê~ ?rè8¥¥e<ûÒ´ïE×ñ6ïÞ9¶CGÞÀ¢Kùô½¯lÊ]»rë÷.C¥rßÐÌɪ9‘\€¬‹–ÅÏ©OM¦{¯D>{>G 8$€ì‹u ¤f³™j}ݦ ³©e¢­+é«–¶¯«¾ºgǾ;8UTÌÑzxO±?;ŸÙƒûâ¯Q311†÷·³Û]óîõÙq1‡ô’r޼µBÎuaÁ¬O¿h“¦{%’ôúô‹,9uÎæYneÇó »b[ŸÍ—èâgY–T8˜›ß`ÚwÇZĺ».åðâ΃˜ê-..Åh–pB3Ù,BuZ&ÄZNÇÿ5-ƒ·ö­+³¨„C9|yÓ@|Ô*&%Æðκ¹LªkÆ]ýºÌfëý†Òzð`b¶efóÊîCVs¡¾šg¶íãÛ‘ƒ Òj˜Ð¥#oì³=ÁÝ]mt¥Ëe<þÒõ6âäÔ㹬_–BZjU•´Zí:ûÛ‰R§Ž­;wöâ;´œŠ|lÿ%ÞzvƒÓu9vàçNæSZ¢§ZoÂC«$$£¡uEi.*µ‚^ý"­Ÿ“Ïæ‹ÿì"/» ¥RNh¤‰I¡xzkšÌkó/©¬_–‚$Áغsݨ5 ®Ò_¨›Ûëû¹CLÿþêÖf×¹¾í×ïµ¶óŽõçøìÍÆ7º»}]¥]'?î{¢õsZjwÚG©@ @ Ú ‰jÉrp¡‘:Q€Aª¶ÞoŠ•Ûìîm­ÜBšá?D,C-ÓÐ_;Ðm‘»¨b¹I7€ÿ–,à⺵¡SÕ)¬._ɶv{PÉTv¶Š :ª,¿áÔÙFBUËÔ\¯ÄõÚAÌ+þœÏ‹?iV}ðy9r./²¦|u“é¿*ù‚yÅuÑÇNU§°§j‹Ã—â#÷áaß©ü#ï©f•í 27^Oت:Íy§©üõ•f u›‹TZ#¤‘É{a.¹P#î‰~ÛL™Q…Ì;ÄRš42¯4ýÀ˜º™Ê•3¬ÑMT.}ÏÉ?!ó F}ͽTýúª[l!ó FwçäA1˜ ÎSùããÅÉPÚ¼†êýÿµyf*Íi•ȺµÏÙÿnn<³sAž.¥eÇ’µ>—‡ÄÕ n/¥jÃ[¶d'Ãè­'Pöž–íT®‡’÷O¯¬9 Ôt Ìŧu'rŸpÔ}îÀpìgªÖþËúÌœs Sú~<X„ÌÃMÿG¨Z÷º[Ë9Ò2ßmÙ²Åz/%%…¬¬,¸þúëÙ°Ávý#>>ž[n¹€/¾ø‚·Þªkß'N°lÙ2Ž?ŽJe?Oºbë.Ž=ÊöíÛ­Ÿ÷ïßOII ¯½öÑÑÑôêÕËF\ÉäÉ“Xºt)3f̰©óîÝ»ùå—_ðóóãïÿ;/¼ð‚õ¹$Ièõ5߃õÄqÕÕÕÖû Ê´iÓX·nO<ñ„U¬–ŸŸÏĉÙ°a¡¡¡Lž<™gŸ}¶¥.qHý>Qˆ 8sæ k×®E£Ñ0xð`‡‘>þøcæÌ™cý|âÄ ¶oßÎêÕ«ñõõeÚ´i6Ñ‚]ñ³+¸ÒFî 33“òòr6nÜÈ™3gèܹ3;w°eË–ñÐCORR’U l2™l„‹ÎН¹æV¬XÁ¼yólžeee9×òúë¯ãééIee%>ø 5òz}¶nÝjw¯­û³+¸:œs\ñU[#p­_µ”¶žc[Ò7ÚzΩeóæÍ£9bÿ7¥«¾j‹¾!@ à‹¼­+p¥Ñé´ôè ÀŽ=‡¬bØÖä›/¿ç¥§ßà“÷¾äá¿N§ø²•—SThY9K쇯_ã‘ ëm6»à³Eź­EKë|Ó-7¢Ö¨1Œ¼÷æ'víQUYÅ‹WpÝõרÏÌÇ×°}ÝY2Α—UÎ…sEìÜpŽ}[Ó[µ.ÿýp‹??È/‹³î§“üüí1æ½³‹ïïmÕr›‹B)G^¯ŸUUȽTŠÑ`¦ªÒÈùÓüúC2K¿²?e÷rNŸÈ#-µ€ó§ ˜ûöNLõ„óÑñ­Rÿ?2í:ùñÂì›Ðê,cÊh0óÕ{{ÌWf>@ @ Ú’tãy²Œ1g”2ÊmùŽð@µ¤g^É\»ç&LH8þ .VUYyiÙw<’ý #3odð…þLÎ~€£zË´ùN¡—&©ÉºøÉý¡³Ôgqé1Ñ´ÉQ$êS6?–YBÇÒ ÆCæÑd>Î#Ù62<0MßIÈÔöëB-.¥²©º°|-rTÝÇ¢ˆì‰²Ëuå{Z 6^°ÞS%Œ¥Lª6¾m[ó7TR}è;kô_wØ^Ž< º¿~…<(SÖq*–ü­Aq2€Ta9èUÞ ™Ö·Ñ¼¯æÂtke~¶cP•`é·õèwÚ£+çý€$”~ [+ò·š¯ð™ºÊ„Ñ “ƒÙHõ.{_™ Îa8a9€A? äî; <$$„^½za0رÃVˆ¾m›åpˆaÆÙÙÝz«åÐX½^o#@­Åd2ÙEu‡mk²|ùrë“nݺÙ<;v, …£ÑÈØHúôi~úé'n»í6§ö„4Æí·ßŽF£Á`0ðꫯډP+**X¸p!ƒvK™Íáܹs\¼hÙÛо}ûÓ ößGYYY|ûí·€¥oiµZë³¶òóÕDm”ÕÀÀºuÑœËA÷>>Íß?ÕôêÕ ??¿fÛ%$$X£ŸÏ™3Ç¡8¹!®Öþì Í ŽhlÎqÅWm9ŽZÚ¯ÚŠÖì“®ô«W}õGë@ @ Ú–?@¹W·x” F£‰CGŽDìn~Û°ƒÅ ~äRfà ”µüðÍ Ìf‰N;°hå<òäD¢ÚG4i—Ô§»õú×ë]ª¯³´´Î½®±ü`{âÈIòs ¦I;c‘ùùûâç_·pëÊûvëe6ŸMM#û’}äX€¿íÀÃCC—øèfç]YQI~^µÎõ‰KŒàÌ©sT”W:UgW¨íwaá–Ç»õLÀÛÇ €~××Ep °<ϼpeÊ­å+WÚ×ݾrfì·&Û.f U*èìk¿æ©Rr_|gæ éÇ÷7aÝ#X1fŸÜØß*LÕ(ìOC_šš†Y’èäãÅ·£óp·X¢¼<›U'Wl/ç·Ì,§œãR}¥6"ðÉÂbr+«ZTVKèh)÷lq)َ븫¦¯z(Ä8h£–гæ}O‘_åøÔÖ´’2ü4jü4j›gîl£+Aפ0›ÏßyèZôùî7cY´õë¿ïÔm6‰I ²y¶hëôÖÑú¼ªÂÀùÓuÑÖ“úG1ë›±Üvo7B"¼i)•år2ˬŸýÝ·­­pÅÏ—Ó5˜W>…o€eã†$ÁçÿÞÁé㎿«@ @ ‚?*^r/&ùü¹¡óY±†ííö².j _….Ä·FQ¨q£à6^@ª!• s¹S¶~Šº ÷o¼É!ýA LTHÕ扜G)®Q?Þé5¾ÉüF{ÞŠZ¦¦ZÒ³ª|¥Su¹œßõ–Èd tQÇ5‘Úy$}¥³ûQöñP*OÆpx)Hf”q#ÐŽÿ ê¦3inYÅ–ƒZå>á("z 󰬇(;Ö ƒe5Ï¥¢:²"ª7¦KG‘ÊóæoÎ?k±×ú#Óú»Å¶>ŠÐtw‰Ü'Óù½T~?©²qU¬áàbÌÈ£ñœ¼ Íõ!÷¿2‚™Æ õu¢›ðžÿ‚÷´x=¶Ý_¿²Š¥eJ"Ô2ŽL¹©HŽ×î[›êý–ÿe*ü”šiØÈr²„,³üSvr¹Š@]tlSîéEêÆ³±°Lå"$Ö=C‡E&“±wï^ÊËmç»Ú¨µiêS+¦;yò¤]S¸bÛšTTTX… 6Ïz÷¶Œý””«àìr6mÚ€V«%11Ñ-uêÛ·/‡²ÖírNŸ>m­óåõvooo¦NÊ’%KضmÇgß¾},]ºËüæááü÷ïþý–Á©P(ˆ·Þo+?_\>æÜÍ‚ 0›ÍtéÒ…7òÌ3ÏбcÇ&í®»î:ëõ?þèT™mÝŸ]¡5ÆBcsŽ+¾jËqÔÒ~ÕV¸£O¶Ö.úÍ•É7å¡–©‰R¶ãÝàU„5Y 0`h:ÑeTKu¿ÿùÊ}È5Ù€{ÉhQG+‚Í+@H%²ê†òuN×årŒÔ­“™q¿Õa™çvbºxEDûƒ»ÊiÈ}#PÆEª,¤zïB4ƒ§¡ì<„ê#?"Ó ªl¢ÒZk–Ì`nÆÚ¡¢þ¼-·­1mŠðnÈ4ÞèÆ}@åêW0žÚÐdvÆÓ¿Qvn'ª¸¨zÞiñkD´=0矣rÕ‹˜sO5]¯f#C;æ-‹8Ù¨G¿ícŒ§7a.ÏG¦P#ó‹B7ö=dÞ¡v–’±Fœ/oÛÃG«6@aø¿ òøò³ƒÃ}k†&Š0é@jZ7îêÖþ®ìZ”R©¤ËÛ/¾ø"/¾øbƒil#P®]7œŸ']±mmÚP;ö[kOHCÔ–k2™šµF­vO¤z™LÆÇLXXUUUÌš5‹µk×’››‹F£¡}ûöÌ;—ðððåo4ÖÍŸõ}功ë_Ë[°~ÿgdÆ üöÛoÜzë­ÜsÏ=ôîÝÛúïôéÓLŸ>äädgÛÈ‘í•îÏ®ÐÚc¡©9§%¾jëqÔ’~ÕV¸êçÖì ÑVs;Æï©o@ @ h[þTåĸÎÈd2 F#©gÏ·uušÄ`0²fåFÖ¬ÜHXD(·ŽÁ„ûï Ct;>üò-¸c*y¹ùÖôy–9o/|ý|(.*¹ê뜗›O—øh6­ÛÊ?güÇ—Ím IDAT©²\yßÚrÃ"í^k ¯;q² ß ¡L›Ynkpî´¥¿‡G†‘Ø=ŽðˆP~Zò ×neêÓ“<| û÷üŽL&ãüÙ ˜õ™k”g2·žko+¾r¥}Ýé««‰ zÑ‘ êEïâçCG/þsàÒëN]5˜Í¤•Pnlz³†ÁlfíùLÖžÏ$ÌSË-£ߥ|¼xðuLZ¿¼JÇQë]±u–½ðnTpݳ³$!—ÉðT9÷õ™W¥'óÔ6˜&LW÷¬~Õ§~´âæŒÁÚr7g\â_{7»¾—s%ÛÈ óë¢Pk=U„Eù•áüw¡ÍÂßÔ×^>ŸÈåþò#«m>÷¼.’ïX"8œ=™Ï+®vdfCQA% çìcñgéÞ7œë†t¤ïàöVnïQŒ¾+_o"'ç1™l7Ó5õ¾îÂÙöuÕÏZ%O¿y#^>–S´M&3sfncïoWÿߢ@ @ ³Ä©ã‰VEðzÁLÖ”×ý~f ¤TŸ¤Ü\nÖ?æšrˆ%ŽpE„Ó¶yõÉáÊH‡eeMØU£ÔøšÉÚ¡È‘£—ôì®Úét].§¾;ßä\ÔCWÊ,‘›eÚFÂÒ:‰9ϹMæ"¼rŸ ¿!ešAG;cú^É0œ³9 Ó\ž‡œ8 )ë©ZÕ° Óa¹.ØÖÇtáú o¡½c6òÀh´·¾Iåj9Ɠ͢› N¬ÂpbrŸTÝoGuÍ=È;¡ÿå_O@*³ïw-A‡<Ð2«Ö½†!yõ™d2 å¤ U—;üy\*¾a]‘Ǻ¥.® ß E/€ÿÛ lïAþ# ]¦5­¹ƒÇ@¨\eêWÛ¯d¾ Ï9rŸ:“Tîžñ{íµ×âééÙ¬´ƒ â“O>±~ÎÉÉ!11‘ÈÈH§ËuŶ­hN#"êÚ/7×ñ4›ëæ¢æÌ[[îêÕ«™>}º5vÄÄDbbbxþùçùùçŸ­Ï 'Nœ ¬¬¬Åù7ä+Wü\]]ÙlF.—ãííÝâº9ÛFîæÐ¡C”——7ýÖµk–ÎÖÙ`0°lÙ2–-[FTTwÝu“'O&&&†o¿ý–Ñ£GÛD¼®õ¹¯¯/þþþ6ÿ“;û³+‡8cÛÚc¡!\ñÕÕ0ŽœíWm…+~vWßpvÎqW9‹»Æï¥o@ @ h[þTGP&Æu -=ÃŽ`;hØþ:ñNÂ"Z&Lͺ˜Í¼þË#÷<…ÑhÄÛNjѷ·Isäà Àòã×È1Ã\®³«4§ÎGYêܧ_s'iºò¾µåvîÒÑ)÷r®Ò€ªÊ*ROº'Âam¹ñ]»è–<›Ã¹3éDD†2âÖ¡¬_µ™œ¬\ŽýžL÷¤DúôKàìé´FóÒ׈=½t­Wa\ó•+íëN_ëcß] ¨d›$‰³õ¢Ýú{h¬×§Ýt¨AVy%_OåÑM;1š%¼Õ*FuˆjUÛ"C¹;¶S£`€ä‚"bü|Z$RίwôörÊîhÍ Ñ¾Þ„ê×q`M_­2š8]ì¸-ªê :›#’®-÷š 4 ÷ìör¥}[›”#¶‹ãêEKÖ õUu§Ç·î\WŸÊzQz‚BëgÎ"«'6LÜ‘Á§olç©»—Q[b ©ë´oY‰­¨=$üÊ,Æ]éöû@B#ëÞíÛq²@ @ à–EÝšNJõÉ+Vîaýï$jº¬p¼6Ô'«ë¢~ Ô^ï0M¬*€4CZ£y ÖYÖ–éR%U9UGÜ @¥TÉ)CŠËù5¹{¤Êb·åiÊ·¬ÇÉ}#P&Ü €!y RivMÄæž(;ôêÄÌVÛLË!¬Ê}A©Á\±½sq&KÂtñÈähG¿†2Ö¹ujsÉEô;>¥âÛ‰`6"óðAÕuŒKõªL`½6å8™Ùx~r¿(”1CÜV§–Rõ”|h¹VuïÇìÓTÓ%˵ç\±0µýJc#D®²ó`$C¥Ómу[ò\¶l±±±ÿÝÿýôîÝÛFuàÀzôèAh¨sk׮ضµuŽoPô7|¸eÿJEE'Nœp˜¦²²î€äæËjË8p ίG·”   ëuCïâ 7Þx#`ï+Wýœ“c9£V4Øœm#wóïÿ›|-[¶8eW[o/¯–¯ gdd0{ölƇÑhÄ××—;ï¼Ó&ÍþýûËÞª;î¸Ã©üÝÙŸõzËÚ°Nçüú¬3¶­=Â_] ã¨>ÍéWm…+~vWßhÉœãî6j­ñ}t5÷ @ @ mËŸF ,“ÉhiYJϸtE˾çÁ¿ðÆì—x왿1oñøúù4š^©lXtvîÌyJjÄ…~þ¶ùœ<~Ê*´|ø‰ûé‘ÔÕÅš7Ÿ–ÖyÍÊFüü}™þüTNè\yßu«6a2™P(L~ì>»ç:w`䘡5i7clFYgË}ú¥Çz_WH?w£ÑHhD(7Ý<„Ì —8v8¹¦N›‘ÉdÜ;ù/œMMk4¯ì,ËIœA!ù·Z]ñ•+íëN_9;öÝRf?­‡yjÑÁršê΋9T™êÄy…õ"õÆûû:_^#OÏ•”QZm\ú:8€ÀÛúü5.š×û÷fjxæ€ZÕ`ÚM,ó¿B&cb‚ýÿr™¬QAk­ÀypTÊæ÷Éõé1I ™ŒÉ]»Ø=ïäãňö‘Ö´Æ"sçTÔ-t\ä0M}ÖžÏÄh–ðÓ¨™Ö+…“j]wµÑ•bÿ¶ Õ‹¢ÜohG^ú`$ý‡u$¢½/Á:ÂÛùÐ+”[ïîŠBéøÏ üìrëudG?ÆÞßðö>‡{Ó5˜ $Ñ)Îý‡LäçVPUY7 KÏ~‘…zÒ¥k0wOé{µ ¥œü =ן¤QøéP©xh•øë0ëÄð­Ù¸¸ ’Šz¢ì¡cºÐóºH‚üˆïÂ_Ýø¾õ¹’í«R)¸ilœõó…³E¬YšÜˆ…@ @ @ðǦÀ”o½îªîvÅÊýµb&L(Pð/¢p"Dsž)£z‹ØðfÝ­he¶¶S¶³ …«ÜÜ`>räôP÷àH`Úºkz0Ö˲áÿ×òUMFovʘÁÖº¦ŒnË×\f#rŸpT £0eX„¾€!ùWÉP÷dI›wÚÆÖp⋘WëÇЀ¼ùí늭#¤ª*~˜Š)ãÈho~Ed/Ç‰å ¯¡›óÏ"UY¬ug¤j©¢Àz­KtÊÖü«5Ò¯Çè¢êv2Ï@doáÝÑÜø È^‡k ÊY„Êž÷‚æºË˜-iTñàó8 ífŒÉ«Ál¹õ€)vÏåѨo®Iû+˜Ý3~o¸áŽ9‚Édrøï÷ßÇl6£P(èׯŸÕvùòåÖ5ôýë_N­¿»bÛVÔ¯³£È‘]ºt±Š5W¬XÑàžúQqkýß?ýôF£‘€€^}õÕ+櫼¼º(Ý=zôpkÞIIIÜ}÷Ý€½¯\õóáÖïßQ£FµH¸ ηÑÕBm½CCC n2}cû²RSS)*²ìeð÷·ÝÇsäȫ󩧞¢OŸ>Í®£;ûsVVááᄇ;>ØÁ¶­9Ã_µå8ji¿j+\ñ³»úFKæwÌuÎâêøý£õ @ @ mKÓáÿGô·Fè͸˜uEË6z°õÚ×߇k®ëɦµÛLÿîg¯c4ظf+'¢ ¿¥RIXD·Ý5š€@Ë;'ŽÚž²+Iïüks濇փ9_½Í¦u[ÙùÛ^.efc2™Ðyꈎé€_€/_ÌYè¶wlis³óøzîþöØ}Ü:n$I×ö`ù÷«8.ƒ‚¼Ô5á¡ô¼¦ï½ñ ¦zÂJWÞ7ûR.K¾þ‰{'ßÅèÛ†£ÕiY¹t e¥etë™ÀÜR©¤¤¸”Ÿ-r›Ÿ²/å²hþÜÿÐx®ÒOÎâ‡o–“‘~¹\NHX0r…ûÏ 0Œœ=}žØøÎ¨|½ùáÛÖg›Önåï3¦XÛ(åÄ醲àðc€EôÿÆ{/±àóEèõÕ´ëIxds?\à–:»â+WÚ×¾rv컃û:à¡aÇÅlÊ Fºøû01!R‰Ñ,1ÿDªMúÓÅ¥dUT¦Óòd¯4Jsò)ÖW£VÈñS«Ñ6ò#õ¬®Å`–Øtá' Š)ÔëQÊe„ê´ÜÝÞ¡ùd°×]¶õÖ®nÊW£æš 67pEZIëÓ/rSûníÔ/•ŠUi”Uˆöõflçöèù‘ý×´LE†è¡aö ¾ü7ù —Ê+P+„è<7 ή¨ä»Sç¸'.šQ"Ñ*üröe#]ýx !¥\FIµÉ ÷«ôÒr õÕøkÔ<Ú=…\Æ™¢Rd2èèãE;/O>;ZA!·²Š…ɧ™Üµ ·tŠ¢Wp+Φ“^ZFAU5j¹œ0O-=ƒ˜}è8&ÉVí®6ºRªM|þöNþñÖPktà„^¡$ôr|’ûá½¹p¶Ðîþ‰CYôX5xüÃIŒ8É&M^V9çRò/7u É,q`{:oŠÀÇσÿ±¼ü{6…yŽÌ"ª£/~Z†ŽéÂÐ1ö¢ùúݱÑç-E’àÀö nYó¾þÌxÇö}O¸é}mò¼‚íÓ5­gÝf­¨Ž¾|½ñÞÓ9k7[=Óàs@ @ àjçTu —Œ—W†ó´ÿ?ðy°O¿—"Sj™ ?E— €/ÇKî…¬Faè%¯‹*è!×â-·D)3JF*¥º+³Œ—øoÉ&ùüAÚ!Ì ûš%%ß’nLGœPe YÃëóJæòAðÇ„)Ãy?ä#>,œM†1ƒ.ê.¼ðJ™’s1ß—.n0ªŽxÖÔ÷˜þhÓΪG‚º+Išk(1ã#÷e€özîö¾µLM¡¹/Š?u*¿Æ‘áùÀ"Œçv`ÊüsY®E8ì„¢c?Խơ«áðOî+ÖdÀ”wEH2…Šêƒu¾4¦¬ƒŸ±Fÿ5eÛô(•æ ßý%šSPu¿E»k0^й ©<”jä>(¢’¨Úø¶E8êÛ1ê©\þº s‘Ç¢½ý]*MÂ\tÁ&™î/!™ SÖcÊ:ŽT^ ¥E¤Ýc\Ýûfk©Wí0åœÂ\r ¹O¸EP¬ôÀtaRe(ÔÈ´þ j ŠžQOå// ÷!2µ'#_q[½\¡øŸ þäAàû äþê Ê¿¡ NÏ»AÕÅrÏx@Ý×ýu2—dQ½ÿÔ}'¢êz+2µÑeHúRá=P÷ûÈ•HU%èwÍsK™ÄÅYE=räHƒé***8}ú4±±±\ýõ¬_¿°ªæÎËÔ©S>|8ßÿ= , -- …BAxxxƒâ%WlÛŠ‹/2oÞ<¦L™Â¸qãÐét|÷Ýw”””””Äã?ŽR©¤¨¨ˆ9sæ4˜ÏÙ³gÉÏÏ'003f P(HI±¬ÇvéÒ…èèhÞzë-kú¬¬,>úè#¦OŸÎøñãéׯß~û-gΜ!77FCTT×^{-¯¾úªÍWHNN&33“ÈÈH^~ùe´Z-»ví¢  FC@@Zmã߿ݻw§oß¾áççÇàÁƒ™8q"jµš‚‚>üðC›ô®úyéÒ¥Œ9’.\ȧŸ~Jzz:†ˆˆˆfõ+gÛèjaß¾}€eïÍ'Ÿ|œ9sÐëõtêÔ‰¨¨(fÍše“þ믿¦ººšU«VqäÈòòòP©TDDDpÏ=÷X£ÃÖ !k‘$‰—^z‰E‹¡ÓéX´h«W¯fÓ¦M\¸p“É„——±±±ðÞ{ïYmÝÙŸ<€\.gÖ¬Y|ôÑG˜ÍfÚ·oOTT³gÏv‹­»Æ‚³¸â«¶G-íWm…+~vWßhɜ㎹ÎY\¿´¾!@  mù󔃬×ùÅW´ìÜì‚Á‘a Ž´-·´ÚÀó;WYÕ`fIbÞ±SâxsøáËÃô¼./ãr;úrxO¦ÃgÎÑÌúŸ<œÍª%'\.¯!–~õ;=¯‹h°­Üõ¾õ¹’ípYh™\†ª‘è-ù®@ @ ®&̘y5ÿÞþo¹73^t:Ց좼ø¦õz{åVžÊ}ÒæùgEã'÷g¬×8º©»ózPóÅH;+·3¯øsòBoM„}kó¼RªäyOSdnøÀÎŽªNÖë cz³ËªÎPÝp»û¦|¦ç>IžÉ}kLò€ŽÈƒ» nøðJ©,‡ÊåÏ"éKLÓÌY'P„ÄdÆxü—ºòªJ0žÞŒ2nHæì“v¶Õ»æ!S¨Q÷ˆÜ/ Í`ûƒÕû¿Á\˜î6Û†ôeTü4ϾE¦õG{û;”;ŒzK™yX7d*”û7˜ñÌVŒ)|î4’™ª__A{ÇûÈ4Þx ÿ?§ÌM©øö4×?޲SPX—ôeOoA•0º& µÔxFnÄ\ %€ßk ¯ ôóú  `:ø¿ š~ ¾Æò¯µÑïø™wª„Ñ(» EÙe¨Ís©ª„ÊeÓ‘ÊrÜR^ÿþý‘ÉdF’““M{èÐ!bcc0`€ÍýÙ³gÀ„ èÕ«ï¿ÿ~³ËwŶ­x÷Ýw ãöÛogÔ¨QŒ5Êæyqq1?ü0ÙÙÙ æa6›yï½÷xã7ð÷÷ç7Þ°y^XXh'Dûè£Ðh4L™2…öíÛóüóÏ;ÌûË/¿äܹs-|;ûz>óÌ3|ùå—øøøð¯ý«Eù8òX">ôÐCääØ÷gWü¼iÓ&¾ÿþ{ÆORRsçÎuºÎ-i£«´´4~þùgn»í6z÷îÍüùó­Ï mÊ …‚ž={¢Õj4hPƒynܸ‘Õ«WÛÝ?|ø0“'OföìÙ„††2fÌÆŒc—®´´ÔF  îëÏ)))lذáÇӯ_?›ï……… ”±u×Xh ®øª-Æ‘«ýª­h©ŸÝÕ7Z2ç¸c®k -õÕµo@ @ h;þ4e?_‹E’$ŠJܻڟ¼û%!¡ÁDD…±béjŽnx±H’$f<ñ*ƒ† ¤[σüñ ðE2KärúÔ96­Ùʆ_·`6;^ô;´ïó07ß>œC®#&6?o ÕJKÊ8w&»G¡P`2™x÷Ó×èž”èô{=õÈ ìßý»Ëu–$‰¹.`ï[¸cü-$õíAHhjš²’rΟ»ÀÁ}G(.*qËûÖb2™xíùwغa'·Ý5š„n±xxhȺ”ÃŽ-{X4)…­Ôd2ñöÌظæ7ÆŽ¿…n=ð ðÅl2S\TBfÆ%’žbÏŽýVWÛàäñTÆÜ9Š=Û÷‘uÑvÑhÅ«6jé)/k:Rå¿_™MÆùLnºy¡¡Tëõœ;ÎÖM;‘ÉdH’{¤[â«ú¶-m_wùÊ™±ï.ÖžÏD)—“€¯FM±¾šßs øöäN;žûŽä2iÝvîŒé@Rp Á:|Ô** FJª Té9_ZÆÞËÖ’$ñÛ0(2”®~zxà§Q#!QP¥çLq)›.\bã…K˜/ë®Ø^Î'GN¢õ ÜSÇÏgÓ9žßø¸­0™¶eãb:0¢}$í½=‘ÉàLq)kÏgòDÏTò†E‚ï8Êá¼níÔŽh_/tJ%³™b½‹åœ*,f_¶ýF!“$ñúÞÃlÍÌâ¶èöÄûûâ¡TU^ÉÎK9,N9K¡¾ºÑºürîÅÕÕŒëÜ?¼TJ*&N—°-3¶[B$à‹c§Øxá·G·§wHÁZ-j…œ²jé¥åÌͧ¸Ú¶lw¶Ñ•æÐ® þ>þ'êL¯ë"iã·¯•Z¾ÒH~N9gSòÉ<ïøÀ’ª 3û•;&õ¤{ŸpCÏ®MiH ü½ár/•ñò#«÷ Å×¾þ”—U“{©Œ£û.±·üìjû:ãçÚHÞ@ @ ÁŸ‰CúƒLȺ“ ^÷ÐÇãZB¡ø*|)7—Sl."ß”Ošá»«vºµ\&Þ(ø'ë+Öò¯ñt×ôÀ_€I2Ql.&ÃxãúcìªÚáÐþóâOø]ˆñÞwÓMݹ…æBöTíâËâ¹d/8´«%\XDÚY¦æìùaÑlúz\G´*†PEZ¹–*IO†á¿Unfqé7”šÝ,.ɤjõK(:öGš€Ì' ™B¤/Åœwã™mŽ­@Ò—¹µ\°DFVqÆs;1—\²yV}øG”q#0]@ª.w`-¡ßþ1†“kQ÷ú Šv}y‡ Sh,u/HÃta¿%R°[mF*Ë¡jíkhǾ‡<(ÍÀGÑÿöAÍC‰ÊeÓQvŠ"¢;rÏ d:Ì˜Ë 0çžÂ˜²Ãɵ ™*·)L‡¨øzª¤»Q´ëƒÜ;™‡/Ru9RU1Ry>æ‚4Œi»Ú›óÏR¹âP¨‘{!I&¤²\T‰·X^¯Vˆ}…¨\º;@ÝÛ%¹ìêu© ž´DRÖÞêDûƒT ¦\0¤@õ0ºsÙÁl¢jõËS7£ê1EX"2•æ’,Œg¶R½o!REÛŠ«§¤¤ ×7îÿÇ3a¢££ µ ÚL&/¼ð«V­âÞ{ï%))‰ÀÀ@L&………¤§§søða¶nµ?xÞÛ¶Âd2ñôÓO³víZþú׿ңG´Z-™™™lܸ‘¹sç’ŸßôõK–,¡  €x€„„¼½½©¨¨ 99™uëÖÙí‘$‰Y³f±råJî½÷^úõëGxx8†’’Μ9ÃîÝ»),´?HÙöíÛǨQ£˜8q"ýû÷',, ???ÊÊÊ(**"77—3gÎ8l£·Þz‹KXXZ­½^OZZ6l`þüù””8޳㪟_xáöîÝË„ ˆ‹‹ÃËË‹êêj 9þ<ÇgÛ¶m¾»³mtµ0cÆ ÒÒÒ¸í¶ÛˆŒŒ¤ªªŠÔÔT»:›Ífzè!FŽIïÞ½ &00³ÙL^^ÉÉɬZµŠ•+Wb6;þNÙ³gÇçÎ;ïdèС$$$àïïOuu5ÅÅŤ¦¦²cÇ»½UîìÏÓ§OçÉ'ŸdôèÑ„‡‡SUUÅ©S§X¿~}“m䌭+cÁ\ñU[Œ#wô«¶À?»«o´dÎqÇ\w¥|õGí@ @ ÚYÍ?fΜ);~ü¸,77WVZZ*‹ŽŽ–åææÊÕjµ¢¼¼\n6›U:Ne0Ô€‡\.÷”$É[’$ÿ­[·®Ø¿¿N,اOŸ+ø:mOLLL[WÁi>ùz–ËâWAë"ÚHЫo¿ O•’¹ÇRøöäÙ¶®Îš ãF¢’Ëùèp2?¤¦µuuþð,5˜H/ï<Ί³ÎEŒîgù­Cñ÷ÐðÆÞìK¿ØÖÕ@ @ ´K–,qxÿ϶¶+š< #ž. rùÓÏ\=BT@ @ @ =Žt¾ƒ º]&“Êd²R³Ù\T©TªêŠŠ ƒ\.7xzzš«««MÁÁÁæ³gÏJÞÞÞRpp°ÔµkWiæÌ™v' þi"( 汉϶u6>ü( IDATM ÚH @ @ @ m…ª×]– ÉŒéÒ±¶­Œ@ @ @ àª@”@ @ @ @ þähǼ¹0ÓÅØËrÀP…Ì; UâhT]Ç`<µ©¢ k*@ @ðÿìÝwxÅùÀñïõ¦Þ‹U-YîÜ{Àé5ô8¡’H¿ BB ´BB¯¡Û€1ÛØØ`÷Þ$Y–ÕÛ®ýþ8늚u·'l¿ŸçÑó\Ù¹™Ýíì»#„B!z PB!D·»qH?XðÙ5Ÿ-§¶Ù¡ qò»~p?ÎÎíðY¬A¡Ü!„B!„B!„èÕÔ´ùAkèpgÙ6¬Ÿÿ¥3%„B!„B!„B!z3 PîE–o\‘õNzVDÖ+„âÔaÑi±è»*•*l¿ÿÚ²kÂö['‚+&¿é,ˆ€E§%ÞØñdB!„B!„B!„—Z‹mÕ³h³G£ŠëƒÊ‡J£Çm­Åyd;ŽK°oYNyø¬B!„B!„B!„ðå^D……¡:ëƒÅ‘ÎÂIc滟F: '•+>ùªgÖ#»B´ñõ[øÇú-‘ΆB!„B!„8Dßñ]¤³ „èeTæ´¹ãÐæŽÃ8ûžHgG!„B!„B!„Bô"êHg@!„B!„B!„B!„B!„B!„B!„Bqâe!„B!„B!„B!„B!„B!„B!„B!D—I€²B!„B!„B!„B!„B!„B!„B!„¢Ë$@YˆHrJ"c&Œ¢°ßHgå„ÃÈÑCÉí›é¬!º‘J鈎˜£ôDÅ"S†ì B!„B!„BˆE§"Þ$4Ã!Æ "Æpò”eom‘*ç“­~•è­m£»œjÛ{<²/øœŒmCêW!„B!„BˆÞOé !ºîå÷ŸÆeá™Ç^`ç¶Ý‘ÎNP îÇ}Ý…Élä/÷=ƪek"šŸ÷>^Çý7ûvˆh^„í{mÎ2£Ìí~wîGK¨±5wš>¿"ónË¿XAñ¾šîÈbD=ÿÙŒíwåž~ðk–-ê}ç‰ø$3×ÿzYùq$¦Xxö¯«XúñΠgæyý¸xÞp\.7o<³ŽeŸ¿­CGg0mn!…ƒ’‰7b³9¨©´røP-V—ðÕÂ]Ø¬Ž ·7 e_øåˆ\Ð7§Ýïþ¼fŸ( g…B!„B!D/ôϹQŒÏÖuøýüEõ,ÝkïÁuÍ%ƒ Ü<Ú„Ëíæ±UM|´½ókÉáðþ1äÆi:üþšwêØXÖ{¯7ŽÏÒqÁ@=CSµ$šÕXn*]¨qñõ;lk¦Éîî¶õ[ô*˜i¡0QCz´š'¾iâ¹uÖn[ßÉ,=ZÍ=SÌ&jH±¨ùíç ,ØÑýû@wé­m#Rå|²Õ¯½µmt—Sm{GöŸ“±mHýŠ®ˆDŸÿTéÿ„B!„BÑ»I€²¤V«HÏL£´ø0.×É}‘nÞ-W‘™•ÀÏnÿIÄ”…8©U*Ò,&74árŸ8Ç«ÃI³Ëð™û8ù×hÕÜp×x²ûÆóÀæòúÓëøô­œ@›}RŠŠÖ3|l¦¢ßHL±ðãùcP©=Oʾþ×ãøþ›bj«»>Ð~Ýü1̾ (à3³VÙ¢'=+†ãú°~Õ!ÊKëåµ7u_hr8©m¼¹4Z¯CžO.„B!„B!z³´(5wO6ã¹|¨â¾iV°SÕ$‡;r÷$3— 1|¥W¥×§aRŽŽåûíwcÀI«bJnÇÁð¢ëâM*&tò`Mom‘*ç“­~•è­m£»œjÛ{<²/øœŒmCêWôù{VoøA!„B!„½Û) œ—Ó‡þyäfgE}COý÷õHgKœbFÅŸÿqF£Ùc/¢©±)ÒYêVN§ÓûÚá÷ZÑ3F§&ñÇñ#1j4Ìyÿ3š'Î~øÏÛø`Op3Ÿ>)›ì¾ñèô®ùùé —É3®¤êhcwd€9 pP2™¹±)©ã‘ß~Ùmë²6ú‚GU*zCdzsœLâ“LÞàdðàÆ%šº u_xæ‡í<óÃö€ÏÞŸ;x£¡ƒB!„B!„âdVkss¨ÖÕæ³Þ&Ù¢Æïò!Z5$›ÕT5uï5ñ]Nü.ÙbÒB^|ï¿f;§Pß&Ø µŠFÅ­êÞ¤SqÙ`3óuäÄi0éTÔX]l-wòÞVKöôÌÌÚ&ŠgÎbhªç¶‡Ý•N.z£¶ÛÓž æê¹p€~IL:(op³ò€ç×[)­su˜nÉu±$šÕþöÏÖ³l_øÛH¨yö7>KÇßçX0éT¬-qð“÷Û^wï.S4LÎÑ1*CGŸ5±F×½[ÇŽŠÞ5¦ŽrޤHìû=Õ®ŒZs‹ôÌÌ×Q˜¨!Ö¨¦ÉîfO•“eûí¼µÉÖá¹[IÚÖ"¹õ.d`n‘žÜ8 5”Ö¹XqÀ΋ëmml_g9Céz{Ëy_ˆJûüW50$UK~‚†âZóõìƒËO¤ãd¨ÿ/„S°}$%}•½Ÿ#„B!„âÄÊxÊØ,wN0‘«¡¤ÎÉ«­|¾»¹Mºy#ü|¬ ›ÃÍ%oÖÝÿ?í) œ•™ÆÙ³¦•™ð¹NÛû‡ÅÉÇl1a<…‚|þóäË$§&a4xâ¯ÿŽtv„8å˜uZŒšSç|÷ÍÒ})­ãü«‡0jb6* ==ƒçöãíç¾ï¶õžqQR3£¨®èÞOÜ|þ[Þ×9 <øÜÜn]_oq`wGJëII d Åûkºœ~ÚÙ…ï_ûçZV,ÞnHH±•‡ÉÜþ¹{²~Ã%Rû‚B!„B!„8¹¬9dçÎO"ãÚQᤸÖEfŒg@o•“=UÝÜ׺l¦hxíâ˜n_¯Rçмte vxndHRQ Á¢W,“¥æ™s£È‰ sH4«™˜£fbŽŽOw5s÷â\ÝîVÁßf[¼A†=•öd§VÁ3-Ì) l}bT\:ØŒ÷Ë…õ¬)v´›>ªU{é JóÜò?aäæÑ&´ßvƒS´ÌobTFÛöcìùòìH8Ê9ÒzzßïÉv54MË?ÎŒ"ÁØf¢ *†¥i–¦åÒAnü°ž}Õΰ¥õÉý¨'ET’’¾ÊÉÐÏB!„Bqb v<%ɬæ±3-´žt9qþ:ÛÂÅo^ÉÓpãéFþ¹ÆÊšž¹öqÊŒ¸6ˆóΜ†F£¡¢²š ›·³ÿ` •Õ5Ølm£Å…áµkû~rém‘Άâ²g[üöK²òâ8ïê!ôɋプˆt¶„BÍ6'÷Ý´©gâr¹Xúñ.œŽ®wœûäÇy_oY˜ßØì}_]ÙÄžmGÚßP9šØ¬nŒ¾n¼Û öæŽ\e_B!„B!„§ ›ÃÍ5ïÖr~N7¼·ÕF—O9 ¾`£ïмø½Õûþh#l>Òöºã_fYÚ)¹ÿÛ(Î(гñ°ƒW7ÚÂe¯_Œ511§ý‡MvgÚ“Ý §Ûfø3ëTQî3œÌ(3ïï>À¿7mïR™ ONà¼ül†&Åg0àt»¨²5s ®ÍU|v „’zßi½FÍâ Îà«¿gÉÁÒ6¿ùù…g S«yrÃVÞÚ¹¯ÝõNÊLå¼ülŠâc1j4nlbeéÞØ¾‡*[s›åób¢yaöÄ6Ÿrþì6Ÿ­=RÁíËÖ´»Þ ±\\Ëðäb zê›íüPQÅ›;ö±©¢ªÝ4ž: §®djujÆÏÌcÔ„,òú%g@¥RQ[eåHi×”ðÅG;©¯õ °>ÿÙ³Ù¶::ƒ×–]Óæóþ±†ÏÞ ì$§G1lL&ƒG¥‘™K\’£Q‹F«ÆÚä âHvUñæ³ë9RRÂÖwnèéÜõ·ìÚr”{oZxÜ4zƒ†çöã´IÙôɋåÃÚä ®ÚJyi[ÖæÓw¶bmêøø1ó¼~œsÅ S-45ØÙ½õ(‹þ·•MkÛî#•3ÀÓ~ͲE»;\OGi'Íéˤ9}Û|~ï͋ص¹¼Ó´ÁÔ¯7MåÜšV§æò›Fzß—ì¯áç7õœ,„B!„B!ºƒEçyJ÷ÐT-…‰’-jínÖ—:øx»súž¦E¯e^ÑÄ®ÊÀà›¢$ W5Ò7AM‚IM‚I*¨lt³±ÌÁ[›m|WÜöšãªëã0éÚû¹÷‹>ÜÖöº¾Ï gPŠ–ìX5q&5ñFzŠj«‹ï;xeƒ ‡;¾Ö á.«sŠôœSÔvÖ°kÞ©cc™çw§ø®•6;á_6zg«[yÐÎ[›müt”çæþKûõ16KÇÕà NÑbÔBI‹ïJº^¶If5˜nñ¾¯±º½ÁQÝ™vr®Ž –ª%Úài›8yo«/÷Ú;M«SÙýôLÉÕ30YCœQ…Z•MnÕºXuÐÎ;›m3m†Z¿­MËóä» AƒQ ŵ.>ÙÕÌ‹ë­ØZžÍÌ×{ŸØosºùå¢zoðÇˬ¤E«¹r¨€3 t<ü57·ÄøÝPãrC­-¸kÑ¡´ %yN6«Â,L9dǪ¹gН-î«vrïl ò8ìz[Û&•¶ ¥í9’Ç`÷ýp´«P·÷ŸkšÚÜp¶¶ÄÁãß4ñð¾íÏküjÚpíGJޱÐsû´<_pr£ÝÍo7Ð`÷|÷UM$h¼³tŸY¨Peu=ß6ÂqÞ‡Ð΃þ‚­ßpCO4¡–³ZåéžÝÏ@Q’“NÅÑF«ÙyeƒÝ­úëJúüJÿ_PÒçï(íølßßßæó¿,oä”݇³¿Š`ë”ý¿ T¨}$%}¥ý!„B!„"X¡Œ§´„34‹°ûWÙ¨ñüVŸ5·5ðïïšÚýŸ¿;ôÊcF Ål2²gßÁˆ'üìΟÒo@WýäRV,ý†Í;ÎKl\ O½ð7rò³>މ":&Š>Ùh4êƒ})âþ¿ÞEzfZÀç:“ÙDZF Ma PVšçqWýäÒ€Ïã™2s“gŒçÑþÅ{o~ìýÎnwðíªõLž1ž1NC¥Rµ;+öiãF 7x.Œ-_ºJñz[ÜzçO±DYÚ|ž™•NfV:³ÎšÂüîakƒƒ5xø€€÷驜{ñ™Ì˜3™Ûæý†Û:Ò Fù‘£ÄÅÇwÙ„DÏÅÚ#eGònPVΖ(3ÿë XVýx÷ÇŽh4þïO·3ûìiŸgçö!ûº>œ}Álîºíþ€öp—U°Ç %nÚ‹.ðt`ÑiéC¿ø.è›Ão¾^ËöªšvÓMO¦«íN6™Ö')™iümí&î;Ô&]Œ^Ç“SÇ’ðy´^G´^Gf”µJÕn«’´­·½_| WöÏgEI[*;¨Ö¨TÌ1ˆsZë´hH3›H3›šDƒÝÑaq(4*wŸ>”YÙŸgG[ÈŽÎã¬Ü>ÜýõÚNƒ…CuÃà"®ìŸðY¼ÑÀäÌ4&e¦ñõ›y÷6éÂUG=­ßàdn½w2Iim=Ii’Ò, žÆ— v…mÓærý¯Çuø½Ñ¤%3'–ÌœXÞxf]ØÖ«DB²™ßþc6éY1Ÿ[¢ôX¢ô¤õ‰aÈéé,ùpt œW”è}­‹Ó0b\FŒëÃsÿ†Ï?ØÑmù?‘M=«€ä4ß~õÒßöú¯…B!„B!Ä©!%JÍÏ |·ÐkTLËÓôŒí£ãés5œûj-vß_Z”šsû·½é==ZEz´ž3 ô<µº‰g׆o¶´ôh5¿ò›¡Ë_²Eͬ¾zföÕóû¥ ¼¿µã ‡ž‰²òÕª=õëð»;_ç{H;eõmÇn¯jhSÖyñòâ5]Z¿ øóL ñ&Ïͯl°R˜¨eL‚>BMkÔªøÓ 33û–u’YÍ”\5Sru,ØÑÌï–4´¨0,MË_fYHV·ùÎSWjNËÔòÞÖÀ˜pÕoë|ç'h¸e´‰©¹z~úA]ÀþwZ¦¯,¾Úko33ÝÛ›mÞàŒD³šÜ8 {ª|7¸$Y|ÛXks¸jÛP’ç¯öÙ©ht‘hVS\ëâ‰ÕM\?ÊHß„®µGÁ”3À-£Mh×ÑFóÞ«£²)øH—`× ¡µI¥mCI{ŽÔq#Ô}_i»R²½ísºVUÝ^[ 5­ÒíUzŒmÑSûBfŒoÙC5.opr‹Ow5{”3cÔÄU3Ÿ(©£H´ ¥ç}ý<è/ØúD)ÒB-瓊œÅÐÔÀcbF´š 8¯¿GV6òÊ_:%}þpü¿p¢ g#X¡Ôo¤…ÚGRÒWQÚÏB!„B!‚ÊxJé±ÿW‡§i‰7©8=Cëý\Ü;Õ‚Q«bÇQ'ϯïùë^'}€òÈa¨ohäªKÎ!=5‰¨( 6[3‡JóÍwر{·æ!%-9à}jzr§†×Þø#rò³°7Ûyö‰—Xµâ[ª+kÐéu¤¦%S4°€Æ†¦vÓöí—Ç£ÿ~³Å„Ëéâ³KYñå7”*E¥RËàaýÃè¨$ÏWλÄ$¼nÍFž}âEŠ–’•“ÉÍóç1xø~ñ›Ù´a ;·ùÙV.[ÃäãIHЧ (¿Ý Ü SÆph1û÷ Ëzý}ùù×|øÖBª*k0›M 9ˆënºK”…{¸ƒ«Î»1 pzïîÌ8ý|&OÇ}ÝÀÜÉ—ÓÔxp9;6úþ»xï (=t·Ûͨ1ÃùñÍWb‰²p÷æ3ïÒ[;LŒò² ¢¢-ètZìÌ¢ŸݾýÚ‡¼ÿ–ovÈq—^u~Ðù¶œ~}ß/¼ÁÉ ÞûŒO>ZBC}…ýûrÉ•çQP”ßÞª¸á×zƒ“?_ô%½ó uµõ 6y·\I\|,=q?×]ü3Êm¯Ò²j-ØãF8|yè0oïÜGÝŽY«e\z2—õË#Áhࡉ§ñ“Å+¨°¶½(ýüæ8ÜnJi°;ЪTôOˆå¦!EdGG1Ä V””QÛødãk…Ýåâ?›vðÍárªmÍèÔjRÌFŠâciì •¤õ—b6¼O5›: Pž7¨Ðœ¼¥²š7wìå@]j Ålâþ±Ã1hÂ?ˆpýà~Þàä%KøhÏ!êìv'Æñã…Äô<8aó¯ ÜïX²¯¶ŽYï} À¤ŒTî3€s>ü«3ðb¹«‡<\Q”ï N^_^Á³›vPRßHŸh 7 )bpbMÕ쪮 H®:êIƒ’ùíc³Ñé:¯Ã};+©­ö•³µÑ×¶õ­w‚v—˽¹í „Ãx|×é»Öfêkm”®ïÒ²ÝmÞcÛ'·VYÞèe:XWÝz:ëV¢²Ü7¹9«T*ô†®ïkþiýgCv:]í÷ºüfVZ¿á¤R«˜û£AÞ÷Û6–±qMI·­O!„B!„B%ÜxÃü¹ÜžY¼À|45OǾ ßÇ¿Ñû–1&¾>`gK¹oYÿ µ ï Xá¢îždæëÊzÇÃQVþ3£9]¾§®ûsúüà73šZ÷N5sßÒFl7Š9…¾` Å»ƒ¹ 4Ü1¡ý@ð®ºp ÁT¸³ÂÉc«šxrnt·¦ýýô¶s­ÝOÏÎ '/´ºáchª–gÏ‹æxÃÛÊTµ ¼µ~»j`І_Œ3ñà2ßuø|¿ ·õ¥žºþõD3CS5üey›Ž8fžÍWg$ûÝPãvÃùôT[Ýìªpr¨¶ãýFIÛP’g‡ ž\m¥ÑîfÉžf.¸~”±íJh¯œ£ *føÚTU“›'çF“«¦ÎæfóïlifÕÁãÏÌz!ô6©´m„Úž#yÜußWҮ±½þb*&dë¸Ë/¨õ`‹o‹ß¶ºšVé~¤äÛáÞ¬~ÃÛ)Qj4jÏù³ÅáVAm©Qjª­·ÿ®–s¤Ú†’ó>(;vEGõÛÝçÐÞ&ÔrÖ¨áÑ3Û¯úS«àÎ f*Ý,ÚÙþƒzBéó‡šVIŸß?­Q§ò®×団mû³‡©iôD£=JêWÉÿ J(é#)é«(íç!„B!„Á e6SéÐAEßiÍ&Š ò(*Èã‹å«Y²ì›nËÇÒO—Ó¯_jªkY»zC§Ëî ªþlÁR^ñ€ïÊËŽ²iÃÖö’pçïnÅl1aµÚ¸ó¦ß±aݦ6ˬY¹6ØM8®P󜜒ȼ›¯`Ù’•üîŽp¹<{BUe5óoü-¯ô,I)‰\võ…üé·{Ó®Z¶·ÛJ¥bâ´±m”5 “¦yf¤\¾4°~•¬×ßöÍ;ùvÕzïûë7SWWÏ÷ÜJvn í°ín·›f›ç‚žÃá»PÕÜl÷~Þ«¿^ËŸ,ó¾ß¶y' õÜqÏÏ(ìŸOAQ>»Â0+é‘Ãå€',19Ã%G¸yþ<† ÈÓÿxžë7œ’@Ù±e\.WÀvutÝ™`˹o¿<¦Ÿ1 €×^x›=òœ÷»ÛöðéG_&žøM IDAT°xÍ{ètmi)\~õ…,|1Þûh@Úußnàù·ž"&6šy7_ÉC÷?(/«Ö‚=n„ÃŽê~ð›wKe5ß•Uðè”ÑÄô\;°€GÖmn“î›cÛîïë’#¨mà¥3&¡×¨“–ÌâAtC’<ÇçÅJxcÇÞ€ïÊ›¬l®è8PXIZK•Rç ²¬m¶³®¼¢ÃeSÌF.ïç Ö]Uz„ß®\p‘}WM—› b&»$Õlâ²~y,Úwˆ¿|÷ƒoÕµ¬?RÉgM F¯ãºüm­ï¸ïšíwþyµ»\ÞÏ;’d2òã…,/.ãÞoÖ{ƒ˜«lÍܱü[^=c I&—æòço7¤WõµZÅÏ¼ss9‹ßÛξ•X›ì˜L:²úÆ· J½ùü·¼¯}ýR3=75lú®”¿ÜùyÐyÙ´¶”½Û*¨«µÑlsb4iIɈÆ®0…tz ÃÇfzßoý¾ŒgÿºŠ£eõhµjR3c8"K´á¸¿µôã,~o»§c}ÍÆLÍ@oÐ0fj‹ÞòÛýË9§ Ÿ›Ûå<û§}qÉ•Þzþzñ^ž~àë.§ Gý*1|L&)¾›f>x¥m?O!„B!„BˆÞ`m‰ƒ>¬ã×Í\6Øs­ð›lüey#šaá¬~žÏû%jXè—®´ÎÅÝ‹Ø~ÔIE“‹Æf7É5×7rÙÏ切9…z¶”ûŽ<ã…ïë¢$ o^Úù;óÌwV>Üf#Ö¨â§#MLÏ÷ÌæfЪ˜ÝWÇ«{Ç cá(«57Æ{ƒYìhæÞ/:]çÖr'‹w73ëX0ÙœB=#3´¼ºÑÆä©Qž*vT8ymc` ÙUà Þ`€w·Øxeƒ • ¦åé¸uLàlz­%™Õürœg§ îYÒ@;ÏŸ kÚ1}´œá$±t¯Ç¿i¢¬ÞEÿ$ ÷L1“lö»ëFym£•–!µÊ3k«°Ð†Ãþ·Éƶ£Nížà®ÂDM»¡Öok‹w7óòå .F¦k¹gŠÙhráÿ\ÝDÍí-§%u.F¤k¹âØlq·O01ï½:Jë]Ä=•`œ¥1Ùì«àx“Šû§Y¼ï÷V9yn•¶·WÒ6”æ¹³;ƒL9ÎÔloa¢¯‘Dé=³{Îì«çÍl<¸<0èNÉz•´I¥åj{ŽÔqCɾ¡·+¥ÛÛâ¡Ù–€ü·8\ïâöOêél˜8”´¡n¯Òrö×SûÂÖr‡wfÞ8£ŠßN6óÏ5VŽ6º0hU´šÕÔAðd°å©¶¡ä¼¯ô<è/˜ú…ðCOJÊùÜ"ÃÒ´é[ÕDyƒ‹1Y:~5Ñ„Aã)ç;&˜X²§¹Í>jŸ?Ô´Júüþi?º2–¬XOûýæ [>îÞŇ«¿ %õ«äÿ%”ô‘”ôU”ös„B!„Bˆ`…2ž²±ÌÁ«m\9Ô£±hg3[Ž8yçrOúç×[Ùv421''u€rzªoÒÕk7²qóÊ+«°Ûí¤%'qæ¬Idg¦3}Òví=ÀþƒÝ3Ý+ÿý÷“Ñ'/MM«Y&[«®ò\ä8´ˆØ¸˜ã.ߢ (ß;cì O¿Önprw 5ϳΞ†Þ ÇnwðÈÿô ·°6Yyçõ¸ñ×1f⨀ï*+ªÙ°vÃO¤iãxþ_¯|?jÌ0bã="?_ôUØÖ{<Ÿ}¼”Ûÿïg¨Õ*ú èÛi@y8-ùä+î¸çgôT–åšêZê±D™IJIäpÉÔj5ç\4‡è˜(&Ïï ºMJNàО™É±³rž1g Ͷf^|æõ6iN§ç1í˜}ötÔ5‡ƒçþõJ›ï÷ï9ȧ-aî…g0ó¬©üýOOáp8Â^VÁ7ºË†£•,Ü{ˆsò³˜ÉãßoÁáêÚ“/Ö7PÖh%Ýb"ÃÒöi¾ÕÇ‚×$Ä£×µ™a¹3JÒú{uÛÕ5’eâËC‡©éäA³³3ѪU¸Ünþ¾nsØžz<³s2P«T8\nžß²«Í÷ûëêùt1s󲘙Á£ë7w¹Ž:3+;½FÝåâÑõ›Ṵ̂lu8yw÷>n\ÄèV3~Cøê¨§ŒßÇx °zé~ÿý2Ü­ÊòàÞî¬~ùño{d=¡ÒhÕ¨ýF…¬MvÊKëp:Ý8ì.öïªdÿ®Ê.ýÖ®-GÙ·Ó³ì¿ZÉi“²Ðh<ƒ9ùýßùܬ |Ü)=XËÆÕÅÌB!„B!„s¸<Á`K÷Ú½f —>ÛÕì 8ˆ7Íìl%u.\ÞÈÈ ­÷&õÖ@áTVÖEq-üäÆqì²%ƒR´@ïPŽTYÝóy*ðÎx™bQ3œ/0jÃa?_X­Õý“rtÞ×k\üáK_PAÕ}Ü઻&™ˆ6xÚËk?XÙÄ ¡¦½t°ov»Ò:w}Vï ÜXWêàž% ¼v‰g<:ΨbpŠ–uÇf]›œ«ó¾€'¸ê®Ïh=„³«²ý¼„«~¿ÜkgãaOžÔ5“dV3¼§¬u—­ã“cë1ûªˆúf7F¿Àº– »†fߘuû¯ÿÿ[Ë‹×ðǧjÛÌt©¤m(Ís¸SÎý“ºv›ÎeC l=êàý­_³^%mRi9‡Úž#uÜP²ï+¡t{gS™#¤Yj•¦íH8˹§ö……;›¹uŒ ‹þXpì@4àp¶C`]speÖQ9G²m„zÞWzôLýBdû“çéɉëøwßÚl£¬>|SØ()ç ú‚Õ­7?_XOÕ“ðàfIf7î)ç$³š Ù:–îm;‹z(}~¥iÅñ…£~{š’>’’¾JoéO !„B!„8u„:žò·¼½ÙFN¬šâ:;+œ<97 ‹^ÅÞ*'ÿþ.rã;©”Í&ßÑ?YðÝâRží=~uë<Ì&#cF í¶e€¯>ï|v>o½ò£Ç"¯o¯}ô,üo! ?X|ÜÀϧ ñ¾^ôÁâóŠPó<|Ô`¶lÜFEyûÁLûv .>–¸øXo04Àâ…_2ü´!öÏ'=3ÒâÃÞï¦ÍöÌ »w÷~vl êSºÞÎ456Qq´’ä”Dââc»”&êj멪¬&>!ŽÄc°áPZ|˜‚¢|ÒÒSØôýV@tLc'žÆ“? @jF Åݸù묜‹°{Ç^‚;Àî òß³se¥mgøú«Õ̽ð ŒF…ýóÙºiþ² æ¸Ñ–—”qN~&­†¾±1loµ/XtZ.è›Ã˜´dRÍFâ zšNŠë‰Ñ›U@Óvæíû8=5‰¼˜(^3…÷`ѾbÕÿi›JÒ¶ö•ßq£3-3o«ª¡¼Ézœ¥Ãgp¢g½{jê(kl¿=¯*-gn^F†‚ضuñxÕ™aǶwKe5Ööo¶ÚWëyŠlœAOœAï J†ðÖQO4"-àýÿþ»¾MpòÉäﯜOzvûO.˜ÄkË® øì‰ß/cÕ’}XíìßUEN§Œׇ‡_9Ÿ¥ï䛥û9RRRžšì)®÷æ+.±íƒ N4JʹµÔÌh†ñÍ\½ôã=kC!„B!„Bˆ^£Þo6»–`žZ¿Ïôš¶7w«ð̈–¯!%JFÕVw@º–ßên ÍnÖ:É=h’ÔËfËŠDYåÅk’ê»ÍÀ},-$k9¿¿¿÷¥Ä›T$ú•ÝòýÁ?œ–©õÎÞXmuóôš®Ó(I;:Ó·µ67W 3|¯jU´ù oðÜ険€ïžZmm,t<ÝQ¿K÷6{ƒº ãà,• ÖÛYyÀÎàT-Ï´sSKëÍy~•w·Ø0ëT¤F©é—¨aJ®ŽÁ~íå²ÁV°óå>OPÚ6”æ¹»tVÎþVµ67óÕ³í¨­&fëf½z˜±Óå`ÖŽ6 ¡—s°í9’Ç %û~¨Â¹/Ø´0;³¯ž)Z®{·Ž# íH*I¬î,çîÚj¬n~³¸¿a `k/8 Úª¼œ#Ý6B9ïCøŽ9íéʹ,RýÉ3 õŒÏÖuøý²}ö°(‡ZÎM˃w<¾Úg÷¯¶X´³ÙÀ 02CÛak(}þp¤í wýö”põ‘”ô {SR!„B!ÄÉ+”ñ”{«œì­ò<Œîœ"=³u¸ÜðЊ&~7ÕÂô|'|¼ÝÆ#«šp†ïRT§Nêe£Ñ7mµV«Áá|`s³M[w2zär³2z:{Z³r-¿ÿGî¼çV“¸úú˸úúËØôýVþ÷Êû|õù×mfüHJñÌ4XW[OeEÏμjž[i‡Ìò »ž˜Øè€@ᥟ-ç—wߌN§eƜɼòßÿ Óë˜:k"‹>ø<ìë=ë±àE½Aœ%롾‘ø„¸€¶¯TñÁROÐmF*“¦;¶®rò³¼á™žà¾CJöîã騜ã8Rv4èßli'{¾;â[>É Þ›ËJ‰ÒßS7’L¶Wù¾Ë‰âáI§“l ,4h4ÄùÕKëÁC€5eGùݪõÜ>r‰FWõïËUýû²©¢Š·vîcYqY›Y{Ñ6T‰Çö«Ò ƒÞõ޲¦Ž×{Ø/p9Ñd€ª b½ž:–”ÀWŸyÜå£õº€åHÔ‘‰©ïk»ÝÉáC¡Ùž*¿ÿ+î}ü b<V©™Ñ\~ãH.¿q$Û7á£×7±îëCAÿnc£¯ é Ý7ʉhüŒ<ï±Ôír³òó½‘ÍB!„B!„]àò»}»%ÆÿʰºÕøÁ°4-÷O3“ßùõÁÖ麓ÿlYÆŽãMz\$Ê*ޤ≳£¼Oveƒ•—7ظ`€žË‡‰3ªÐk`þxj<¿Þ3–g Œ„ªh înˆÛÇùhùüz+ ö®/„šÖ¨Uyg^OSQRç3TFû:¥Eù¶¹Ù jº>ã3t_ýiÜþ8£ïí`8v‰E§Âé‚[>®X>Êo›Z•eÍMͱ€¢mG|µÏγk­\4ÐÀï¦úêáâAï 5JÛ†Ò(/çÎtV¿Ð;û“Ý%ÔrŽ7©¶ÿ`MÛvURë HïìA=ÁöùÕV´/ÜõÛS”ô‘”ôUzkR!„B!ÄÉ+”ñ”ÖÍ*îœàYöµVÎë¯÷^ëCW3buÂßôLüÓI ìl6©­k{‘¼º¦€èè¨ËWW¬Xú «W|ÇŒ9S8ï’³<|€÷oÿžƒÜ×CìÚ¾'0QKÐJ„¾BɳJ幸årºp:‘T§õ¯«­ç›åß2iú8fž5Õ [°´Íï(]ïñDªZ‚ÀUíEƒ†hÿÞƒ¤›õwʬ TWÕðÚsosË?aÒ´±|ðÖBâã°Zm”•–…mÝÇÓQ9·|ì°ÿ”bÕ±©«uè¿\o.+%tjßEh•ß³pUÀïÇŽ ÙdÄætòì¦,+.£ÒjC¯Q“a1óÀøQ¤˜íüªÇŠ’2V.gzV:çæg181Þû·¿¶ž?¬þž]5íŠ*IŠ–m׫ƒ¿(ïßœ‚Ý?½Kwñ°®ÃOË`…ËíÆÙ…m¯\zºŽÂÅÑì:©gOO pcƒ/X£Qc0zº….—kS`GÖa°*=PËÝó>æÜ+3å¬Lßy²hh EC§³nå!½çKœŽ®’»ý ç¹,R”–³¿‘ûx_ïØTNeyc‡Ë !„B!„Bq"ʉSóô9QÞY±z ÿËŽ%g‘*«+†½AJ;+œ<²² —žþÖ°ôÇéž'³Ü4ÚÈûÛlT5µ½Þ® âù”ý“4 Lñ%˜?ÎÄüqí±õMÐðý-ñüPæàêwê¥ &-:j+v§;¨Y#»³~[úç«¢ÉE¼É³á}bÚKö}~´‹Arïl±qÝ#Y±ž´ý“;.Ü`˽»ò¬TgåluøÍÙÎm›Þ¿hVSkëZÀYgëUÒ&•”s¸ÚsO7”îûáJ>Z«oöw­-qdVsú±‹gôÕqïÝ—¶+º»œ»k_hq°ÆÅŸ¿ «›œ«cLß½g«ÿ~•Pʹ'Û†’ó~8ʹ#ÕooíOv—î,gµª÷ô}EøõÆúUÒGRÒWé­ýI!„B!„§ž`ÆSþo²…X£Šƒ5.^Ù`cáÕ±¼¸ÞJFŒšY}õ\2ÈÀS«%@Y±ºz_@r\lL»Ê§²\=5guìvŸ|´„O>ZBZF*s/œÍeW_@N~ÿ÷/\sÁÍ-¯ð._yÔ3eftL±q1ÔT×öú<-¯ °>_|¶Œßßõ×ÖùáÛ‹˜4}} sÉ/ÌeÏÎ}Ì9w&Ë—~CEye›4áX¯RþÁo½9kï®ý¤g¦1pH驼ûÆÇ,ùt7ß>)3'ðÝêïQ©TìßsW'W»]Ç"ÏTÝ|‰³¥~Ó2S»%mjzŠ÷ue…oªÚp–Uo’ä7;r¥Õæ}]CnŒg€í¯k7ñùïwv—‹Õµ48Ž?èfw¹øt1Ÿî/&ÍbâìÜ>\Z˜GNLÿ˜2†ë/çh“-ìiƒUi³Ñ\wÄîrár»Q«TXtÁzZmi–ŽŸfö}ç_Gþüg+îÊ>زޥ‡JùÃê ]Îok=YGJTUø:^&‹Ž´>1>üy4`0´í­'êãÝe§Êê¨Qñ§™¦åÿ¡Â­Ÿ™¨éÍq! WYk\–oŒãóÝÍA0 Ín~ÿeÓòãPŠQéZ>ßc§ª)°RúÄt=ºJ¯ ½þ”¤­·¹±;}`‹v6s÷â®ÏZÞàÛf‹^Ev¬šíÌ^מî¬ßŒVeï?çžJ' žïG¤kyucàøMËLu-öVuý‹â:§÷†£Ö÷JÚFwçY‰ÎÊÙFÕx“šhƒŠ:¿’ ­†íή)w¶^%mRI9‡Úž#uÜPºï‡Jé¾p<ûªÞ T‹N…Y§¢±‹3@*IÛ‘î.çîÚ:kTñë‰æ€ÏÞÛÜxGåɶêyº§œ[tV¿‘ê#µh=ëjw µœ«š\¸Ü¾×g¶”™XÎGê;þÝ`úüáJ«¤Ïï; ÿU{ýö%}$%}•ÞÚŸB!„Bqjêh<Åßì=3òu¸û—6£ö^x~½•ÌcÊ1Ñj ûÿ— ~ÈHÉá#Þ×E¹í.“žš @yEÛ Öpš ÀÙÌ&%-™1ãGðÞ·›&ëUÊjµz_[¢,ÉCWìÝ}€ŒÌTfÏÀâK9r¸œMßoeȈœ6v{víëô·lÇ‚-QæN—Sª¥~û*$9%1¤´} s½3!·6qêX¬MVvnóÍ βåÇp, Ûév³Ço¶Ûx£ÁûzW˜ˆp¸¡‰ÿnÞÉM_¬Äár­×1'§Ïñ*H;)3•Ëûåu °µ²€‚¸˜‚”+ŽçFGgÉ@?{øD~l4©æöó8áX[µ:œìªi¿.¬~] ’nY﨔$ šð r*©ßî¶}càŒæ—þtxHQ6«ï‰­‰ÉÝ{¬ó×ä7K/@Rjpí,X*¿€`»Ýɺ¯ñ¯?¯`þåïÌì;b\÷Ôo}mà€PJzt·¬§µHÕïÈ }ÚãÆ5%/,„B!„B!D/r°ÆÅm ê¹mA=Ï|gítÙ>~7ɨvòêFG]8]Ð`wÓÔÅ`¨kàríÝ¢ WY+Öè+Ë–ý¹Ýž¿QÇn䯶º)­óSLËÓaîâ̆·›úæŽÿüŸgér{f…l8¶ýJÒº~A2“suΨ֞õ‡lncêòsM»³~Ï* ßXæ»îý]‰ÿöêfЏt°olðh£‹ýÕ]›Õ×¢WÑ?É76åß”´î̳R•óö£¾×jLo(7%×÷¾Ñ®ë7u¶^%mRI9‡Úž#uÜPºï‡Jé¾ÐF¦ûöA›³ëÇ%i;ÓÝåÜ]ûB{òâ5<{^t@þ¿9hgmI×-;+çH¶PÏûþrö×YýFª)¡–³Í [Žøíƒ9mÛÕËy]iÇm:˜>¸Ò*éó[ýÚAj;mûDîúí)JúHJú*½µ?)„B!„âÔÓÙxJ‹X£ŠßLòÄ1¼µÉÆÚQzßÿýµ67Õ~×M,úžy:ÛÉw…ÅO]}ŠK>dz]àE‹Äø8Š óغcO›ôárÅ/æÏÞÃ-wü„ÿ¼þ±q1.¯Õv8¶w÷~jÆÅþζÍ;¼Á’×ßz5CG R˜ó® 5ÏŸ|´‡ÃA\|,¿¼ûfïŒÖÁp¹Ü|øö'œyîL®¸î"Ô5û÷dÝšögý Çz•*;\î}=züÈ_WØ{‡ÃAjF*³ÎšJñÁR6mØ Àg –¢R©¸rÞÅìÙ¹¯ÓßjÙæ¤”D’â»-ÏŸ-ø§Ó‰F£áö{~Týú§wËUm¾Ïë›ÃçL?¶ìR~3‡³¬‚=n„ƒVÕö”f11;'€•%G°:}Y«üfêíüú:™ñtom=uÍž€ËØv" $­¿åó§q#¹yhþ=}<1úŽŸ”ûÅAÏùD£Rq퀂6ß«UªNZ[œ§ôIèíz›\| §ÛF¥bÞ Â6ßçÅD1;;Ó»¬£ƒ™¹4úf>=5©Ýeü}º¿‡ËMœAÏ/† z†‰pÕQOùnùAªýfQ;=—{;ƒq3rÉÈŽ%!ÙLzV †§2÷òAh´íw¡*Ê|OöÎÌãü«‡žCrzƒ’¹ì†ä÷à„®¨(oÄÚä;Í<¿ÃÆf’”j¡pP2—ß8’ø¤ðÔj´jžzçb~ú«qŒ߇ø$3:£IK|²‡ß£Š»kfãšÊ&ý‚²§ŸSȰ1™$§EÑh ? ãöú‹Tý‘æ}mmrppOuØ×!„B!„B!D¤ÕûÍŽ•£abŽ.¤@–ŠFõ;ߺp  Ù:2¢ÕŒL×ò‹±¦vƒlN$á*«`ªõ]0ÀÀ†°èU¨UP áïs¢ð¿,¼£Â·üg»}×t-ẕ00YC‚IÕ&Àß–#N&þ§ºÃ?ÿ€‚½Užeoú°^qZ€÷ýf¿´èT¼rq 7žfdhª–ôh5S4Ìê«çîIf¦Žý,ÝÓÌQ¿gèùÏùÑÌ)Ô“¯!Å¢&'Nͨ -×7â?ìÎúM¶¨I2«é—¨á¶±&~2Ê÷Þ# .¾-¶{ß±ÇNó±*Ókà±³¢ž¦%-JÍOF¹d/8ãÓ]ö€™4§äêøÕD3ã³t¤E©‰Ò«H0©—¥ãɳ£ˆ3ú¶à«}¾uBèmCižÃ)˜rþú€›Ã—‘_O439WGj”šy#Ìêë;ûroçyf½JÚ¤’rVÒž#qÜeû¾Jö…É?+Šóè)HÐgTmP10YÃ3-ôMðåsÍ!GÀì¡JÒ*Îrî©}xþŽ4%}þR¿Ù‚ó4üt”‘Ü8 ™1j†¦j¹m¬‰É=/a8ˆõ«¤¤¤¯Ò[ú“B!„B!N JÆS~3ÉL‚IEi‹ÇVyâ_üÆcPüFCsÏü#{ü)OpK—¯áÚËÏ#.&šk.?O–¬ ²ªš´”$.:gµš¦&+«¾k?5fœ9Åû:6>†Qc†ñŧË;\þïOÿ ‡ÃÎ’O–±mÓ*+ªÑjµ¤e¤pî%g’è ìÜòÃŽ€tn·›¿ýá žxþ!Œ&#O<÷_|¶Œ•_­¡´¸ §Ó‰Ùb&¿ ‡¸„Xž}⥰mc¨y./;Ê‹ÿ~ƒŸÜrs/<ƒ§åýÿ-`ÿÞCT­DoГž‘ʰQƒyäÏÿÄélÿ t½ó ×ÝtÑ1Q\tʼõÊæ7\Ù˜äq IDATëUâÀÞƒTUVŸÇÍ¿œ‡F£a÷޽¨T*ró³ÉÊËä_<öõËnw°g×~úõï‹.6š·^õ•ëŸ.ãçwÝè­ßí[vuú[Ön<³|ÿù‘{xá™×°ÙšÉÊÉ$=3?þBXò\VZÎkÏ¿ÃÕ?½”‰SÇòÏ—æ­WÞçÐÔj5)iɨ5í_„.+-çßåÊy—pæ¹31™M|ôö'Ô×Õ3xØ®¹ár´Z-µ5u¼ðôkiÃYVÁ7Âáê}I0øº¤Œz»ƒÂø®P€Y«Åáróü–Ë睊ãpcif· €A«aÝ‘ jlÍè5jâôzL‡?<étì.7_,e[e U6ZµŠT³‰só³½34o«lˆ§$­¿YéÞ×±=£R’Xz¨´Ýe÷ÕÖ³ø@ ³²3˜›—E”NÇ‚}‡¨o¶“Íù}³1wò°†EûŠ™œ™F¢ÑÀ£“GóòÖÝ”64¢×hH1Qw\ÖØÄ›;örEQ>sr21i5|¼ç õvƒã¸f@ZµŠÚf;/lí¸]¨k ÊÖL¼AÏMCŠÐ¨Uì®®C¥‚ܘ(²¢,<ýÃvïòåMV^Úº‹yƒ 9;¯Óø`ÏÔÕSimF¯V“f11,)G×oÆé츄«ŽzнÙÉ3­ä×™îxÀðT oó kJ8¸§ªÍç[Öfä߬Á—^?‚K¯°ÌÑà ìÝ^ÆÜƒÛåfíŠL˜•@Lœ‘»þ:#`™­ß—Qu´í`x°ú䯗hbú9…L?§mм¿¾ëž™~ÝnX»â“Î8¶½ñFîú[àön Óöüf„ê·ïßCöí¨À%#^B!„B!„â$´ò ¹Ež›Îµjxòì(ìnj­nÔ*H4w-¨Øç†õ–ßJ0©xjnTÀ2ß•8(oèú¬¤½M¸Ê*Xoo¶1.Ëó°Wîšdæ®Ifœ.Ï{kKl9âc}é{+çõ7xoŠ›¥clVÇŽí ìhæœ"£ûxÆâŒ*nmâæÑm—Ý]å Ø^›îÿ¢‘ÇÏöoÊÐ2*£ý±¤•íì<ØÎúýå8¿gj÷»GW6á÷ÌQŽ6ºxm£•ëFxVú%jxáÂè6éšÝ<¿.p†Ãɹ:.hàÊ¡†6Ëû;\ïâ¥ïÓ*iJò žy.è˳Îohsd†–57úºý«OëÛ½‚+çúf7oü`ãÚcy¶èU<~VT›t6§›g¾kjóy¨ëUÒ&•”³’ö©ã†’}BoWJ¶÷´L“s=qºàß­f(U’Bß^¥å쯧ö€ÛƘ¸|HûǺƒ5.æ/ªo·¡¤œ#Õ6”œ÷•–³¿`ê7R}¤HQRÎl³q^=ÃÒ<ËvÖ®þ¶"°œ{%}þo‹í³ñÞ:ÆÄ­cÛXi‹-åá¹_0\ý`œˆõ«¤¤¤¯¢´?)„B!„BCÉxÊä\gz®…üé«Fo`òÎ '.7¨UpÓé&Ò¢<×ÀêlnJÚ™…¹;œôÊ;vïã‹å«™>i yÙ™Üüã˾o¶Ûyõ46v>°£DyÙQúõïë}äðÑ—U«Õ Z„Ñh`ôøQ.÷õW«YúÙ²6ŸoÝ´_Ýr/÷>ø+’R™yæTfž9µÍr õ Þe“Ù„¦ƒ`ÍÎ45Zq:Šóüâ3¯£×ë¹rÞ%df¥ó³;~Únú7^|—ƒû‹Ûý®¦º–Eï/æüËΠºª†E~Þiþñ^%\.7Ï>ñ¿¾ïçÄÆÇð«{o ø¾¦º6,ÊJë`ûæôëß—ËÍ'~åZ[SDz%+™1g2n·›G:PÂâ…_2묩 >€‡ÿõGïw5Õµa PøïS/ŸËÜ Ï`à"î{è®.§}ö‰—HNMböÙÓ˜:sSgNø¾®¶ž»n»Ÿò#mÐÂUVÁ7ÂE§Vs~ßlÎï›ð¹Óíæ/ßmd÷±™Ð[¸Ünþ¼fM<(ŽÛƒ˜µ]­R1 !£FÃèNfó]Yz„¥‡‡-mkåMV ýf§>ÒÔù¹à‘u›I³˜’ÏÔ>iLí“Öéò­ó³`ï!ÎÎëÃÀ„8œÐññ²µÿlÚA²ÉÈ¬ì ¦d¦1%3p½uÍvîþz-G›:¾îr»ùϦüjÔ`b zî98àûÚf{@€2ÀK[w¡×¨¹¢(ŸÌ(3· íßîo¿¹c/ë}3ˆ³ŽzÒ†oŠyøî¥Üx÷xbâŒ.›Sßn€òïdÖE¤f¶¬h‘™üŒã]ñÖ70lL&Q1íwV3scÙ°Zùù,£‹ùß¶¡ŒolQ¼¾Ž¼ýÜ÷ “Ña]…k{ýE¢~5Z5)¾õ•×u²´B!„B!„'®Ov6sf¡žI9¾ç-:]ðóÞýëÛ&&dëˆ7µŸ6?^Ó+f U8Ë*KöØyæ;+7œf ˜°õPäæ#~ýY}Àgn~±°žÇÏŠ"ÖxbÌeèrÃíŸÔó‡é¦çwØÕ7¾íC{W°ó‹…žôµÅý5Þ€¡î®_—[ÕÄ¢Ím¾{ruyñš€ Mv7óÕÌÖtåoG…“;?©§ÖøN¥m#Ô<ƒ'xMßÁó–U~§2k•óSkšÈí$ÏÍNø¿Å ì¯þÆ¡ÎÖj›„ÐËYI{ŽÔqCé¾j»R²½#»°6ØÝÜ÷E#?”9>W’Bß^¥å|<ݵ/øÏîéýÌéæý-Í<¾º©ÃI””s¤Ú†’ó>(+çãé¨~#ÕGФPËÙé‚ù‹êÿŸ½;ªºÿ8þž}’ɾﰯ‚‚"‹‚€Šà^‹Õª­»í¯Z[»¨¥ÕÖZµjµÖ­jµnU«TEDvdß!ÈBö}›ÉÌï $d!Ë„aù¼ž‡ç¹sî9÷|ï9÷Þ܇ä;‡g/ `Htë׉ÛO-«fÁž–÷ÑÉ «ïüo«ç{ƒí$·ý÷t½»ðÜiKO¾o´åTßî¼#uç°;mEDDDDDD:£«¿O °xp‚?ÿÛQßìÿ<Êj=,ØSÏÔTk³/Wüpk'j]´Ó>A`á’•dîÏąa$ÅÇ`÷³SUUCúÞ,-]EqIYöÿÂSÿ$*:’¸„æ|8—-··Y×ãñðÀ=¿cü¤± 6€ðˆPB‚ñ¸=•¾k/_¹„¯¾XÜæêyë×lâû—ÝÊ%3'3vâhRû¦ˆ³ÞIEy%{÷d±våL& <õG2b`§ÏëÞÛ~Ãw+7t;fÇÃË{ƒ¯¾XÌ×^ʈs†Õf¥²¼ŠÌ½ûY·fe¥åíÆóþ[3ãšK0 |ôî§Ô×µÿŸgÞê·;>ýèKÊJ˹òû—‘Ö/…€555¤ïÜË’…Ë1 x<Ý{tw~vlÝÍeWMcÕÒ5äåä7«7烹Lš6žY9TU¥ÊÇ~š™Ù\tÉD¢ã¢©¯«cozK¾öÎùÑÐÐÀ㳟eá—ßpùµ—2xØB‚q7¸)+-'û@.Û7ïbÕ²ïZmûȯŸ`ÉWË™qÍÅ Ü»ÝF^n>˯â×?¤¤U_½5Vynx˼ÌlÌF##"öY)««gCA1oïØCzYë q› K¸iþR®JMfDd8‘þv‚¬ª.Êë×Ö‘YQÉêc¬=¿Zº–ññÑ !Ün'ÄfчâÚ:ö”Uðõþ\îÏÅ}Ì5ѶÇzaÓ¢üìÄ:üù_F[‹Ú_Í·Úåâÿ¯âÊÔd¦$Å“èÀ`€=eÌËÌæža°ÛþÆk7³±°˜é½I ÀßlÆévSVç$§ªš]%e¬9Ø2½ÁãáÑÕY’ÇŒ”$ú‡c7›È«ªayn>ïîÌ ä8Ï<€Ïö¾ž+û$“D€ÅL«ô²r¾Í>ˆCß2{„xeË.îÏefJgE…éç‡Õd¤²ÞIVEë Š(«oÞ·7çèD[¿â?½ö¿ŒŸÖ‡á£ãIJ %0؆Åj¢®ÆEQ~;‹ÈÎlýÝ¡¶ÚÉì»¾àŠ›†1dT,áQLfUåõ”V³cS>+göHìù9<=øF[[ÉC·ÍåÊ›up¨ªÊz r+Ù¼&—Õ=0ÎÝßÎŒó¡~4]`½¸À»«B‹ˆˆˆˆˆˆˆˆœ,Üø¿¹•Ìèoejª•„ þlfµ.¥µr+Üì-i`MvË©¦²ËÝ\ÿa9wœíÇè3áþF*êÀFZ¸ »Ù@A•›eYN^__Kn+ß¶ÿ§oª™ÐÛÚØo Í@ƒÛCq‡m |µ§ž{êÛ\¯;×FWcîŽîŽs}ᘧ¥Y™ÑßÊ€H3V¥µnVpñÏuµ­¶ín¿Ðµkº>ÎÝ}^ùê¹ÑÝ{¿«ºz¾O.­fm¶•±fÒÂMD: ˜*ë=d”4°r¿“ÿn«o5±ª;m»««ãìË{¡Ú顬ÖCi­›]E |—}è½¢¸¦ýß‹vwœ}qm@÷~îwuœ»3¿¾|Gò¥®^ÏÅ5~øß .`ãÒ¾VÒÂMø™ V»Y“íâ­µJ?ѺúÎ_åôpÓÇåÜ6Ò1‰‡®k³Ñ@Y‡‚*7ër],ðòóÝNÅùíê;tïÐï“""""""rfêêïS~>Ö(‡‘Âj7O,k™Oð‡EÕ¸ÜpAo .7|¶³ž¿¯î¹Å|e8ü¯™Ù³g¶nÝj(((0TTTRRR F«Õjªªª2ºÝn‹¿¿¿ÅétZ»Ñhtx<ž@ǺdÉ’9ß}w4áoÔ¨Q'ìdN©©©¾¡Ó^ø×“ÝN`•“—æWŽgîÌ‹pX̼¼e'oïÈðu8§´¯®œŠÅhäùÛù`÷>_‡sÊ{gÚâüù뺭ÌÉh;¹VDNŒO¦_H¨ÝÆWod~VޝÑnxï½÷Z-¿àÝ£Û/L༤C+H}µ§žûçUˆÐN £L¼suPãç?ª`S+«NŠˆˆˆˆˆˆˆˆˆˆˆˆˆô”Eß?º}$Ïwüøñ3 C‰Á`¨p»ÝU@­Åb©¯®®vF§Ãáp×××7DFFº322<žÈÈHÏ Aƒ<³gÏnñmgÄ ÊÒ¾»~x¿¯C¤ùoR‚²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ´éœ ï\Ô¬ì©eÕ¬ÍѪÀONudjüì§ß‹ˆˆˆˆˆˆˆˆˆˆˆˆÈ@¿‘“ÚíCúqóÀÔfe7Îÿ–òz§"9ýÝ:¸/—öJhVl³ú(ñµ ›‘¦erHj¸‰^!¦ãW9(Aù$òí¦¹>éwÜÐK|Ò¯ˆˆHG8,f–æ¯,ƒ÷þðí%7zíX§‚Yãßôur pXÌ„Úm¾CDDDDDDDDDDDDDDDDDDDDDDDNRJP>‰(QXD|á’9 |Âicòçù:„Óʬ/¿91ý(aW¤…gÖoã™õÛ|†ˆˆˆˆˆˆˆˆœ`Ojܾá)rŠ™¤±‘“Í÷¿ëñ.Œ=Þƒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆœ6” ,"""""""""""""""""""""""""""""¦eé0³¯‰Œ '%­ÅE¥ìÞ±Ç×áÈi"8$ˆ”´^”•–“±{Ÿ¯ÃéK¯˜Bß©¬_³‰Å –ú:‘3žÁ¯£ÖøX1 T–×ù:”“ž7ÆJ÷‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆK Êâso}ò"Ž/=û†”O3×þàr~òËÛZ”ïÝ“ÉWÜÙcmÞŸûÏÆëêTIPþÉ/nÅà à`¡¯C9å½3mñþ­î›ñéBÊêêÛmŸÒ?œ[îÃ?þ´”ì}e=¢O½>6{ë¯/>¶Œ%_œ|?C#ü¹õ—ç’˜Bx”ƒWþ²‚EŸíîôq&ÏìËÕ· ÇíöðÞKëXòeçÏuè9q\0=´A‘‡Ú©«sQV\KÞr6®Ê᛹éÔÕº:}\oñÖXA×î…ŸÈ}’[Ý÷ÇÕ™Ÿ•Ó¥XDDDDDDDDDDDDDDDDDDDDDDDää¡e9.£Á@ŒÃ¼ªܧÐRªµ®êÝîfežãÄo2¹íóHêÊŸ^λ/®cÞGÛµ‚¬Z>&¾[Çrpó½£1 ÜúËsÙ°2›òÒÚã¦{G3åŠ~ÍÊüÍVüVbƒqnëW  ·²[±v‡7Æ º~/Ô¸(¯w6+ ´Z0t;"9Yœ ÊCöåº+.n·Î»ÍeËŽ®­,'"­ûø?Ÿ3w΂ÆÏ?¾çF®úþe=ÞVD¼ëœè9ï,ì&Ó>™O«Á×!uØ ›v0'#«SmΗDRŸP,V7þôl†ŸÏK-§¤°º'Â`ÚÕHI|¯`òs*øëo÷X_µÕG“G V›©Çú:™„Fø5&'áÜp¿'(Ÿ;©W‹ääc•×´šœ|"ç×[ºz/¼´y'/mÞÙ¬ì“éj·õh¼"""""""""""""""""""""""r✠Ê6«Å×!ˆœ‘œõNœMVPt³šbOµïò·˜±›ÎŒV€•‹ö‘Ÿ[Áå7 aäùI 0ôì8&Íèˇ¯mè±~§^ÕŸèø@J‹jz¬€;/ÿ q;95ŒÇ^›Þ£ý,²ö”Ÿ[ITl9™edg–u¸ý—¦5ûüÎ kYº <å 1%?ÿÖß;Oäüz‹¯î9ù Ê6+{3ðï?kµŽ’EDD䈌Eüõ·‹IìÂ̆Ð;„9omöuXÒMõu üL¼4 ·ÛÍ¢ÏÒip¹;Ü>!%¤q{Ûú<>{okãçÒâ2vz5Þ“îiÍ‘ l·Ù¨¬ª¦¶¶ÎÇшˆˆÈ©bÿÞRžÿ÷˜L<¾ç¤d00›x<\ÎŽ'üúBYI-sþݵ[G€µq»è`•·Bê_³îiêŒHPö³JP®®©õIÿ Iqüþ‰_ŸËÇïÎKϾqÜ6~þ~\=kç_0†Ääxü~TWÕPVZNÎ<Ö­ÞÈÛ¯}Ðf{›ÍÊäK&2þÂóHЇÐ`\N'e¥¤ïÊ`ù7«ùô£/½x–Ýyì„ÑœÁ’z%`·Û(,,fÍòu¼õêûäåä·Û÷øIç1óšKè?( »ÝF^n>˯âÝ7>¢¤¸´YÝ™×\ÂýÝÃþÌlf]vk»Ç5f8O¿ü' ó‹¸bò ŒãðÕü†E„2æüQ 1ˆ>}{…#ÀÁµ5uäfdîœù|øöÿZí·3ã|²HîÈo½QcFLyiëÖläí×>$}gF›ín¹ózFADt8ÁÁAX¬J‹KÙ¼a;üû¶lÜÞn¿Þ¾ƒC‚xáÍ'Iê•À¾=YÜyãÏ©¬h=9®+Ïœ®šÞ;‘‘a¤åoÇÏl¦ÖÕ@ve5ßæäñQz&UNW›ío˜ÆÈèp"ív‚l,F#¥uõl)*áƒÝûØZÔöuåg6qUj/ÆÆE‘àÀßb¦Ú颼ÞINU5ëò‹x§9îNÛ#ünôpâüùdO/oÙÙ¡1ÆÌ”$†F„b³ÑàqSRWOVE[‹J˜Ÿ•CNeuc}«ÉÈ‚+¦ð‡UX¸?·Å1¿ºr*£‘ç7nçƒÝûZíw\|43S’èŒÝd"¯º†å¹ù¼·3ƒ’ºúõ{òÆ”ó[”yù”ekó‹¸oÉêVûÌÕ©½F°ÍJe½“ÍE%¼¿k[ŠJZmÞ™#oêhB¦Ùbä¼É½96‘Þ}à ±a0(/©%?·‚M«søúÓÝT–ú”×çÏÂfoù:6ôœ8ÞYrc‹ò7žYÍüÿîhVÀ°Ññ C|r0!þØífLf#µ5.Šò«ÈJ/áýWÖ“ŸSÑ…³oßгãxà‰I¤o+äá;æ·ÕfbÒŒ¾Œ—DBïü,ÔÖ¸¨(­¥ ·Šmëó˜÷ÑvjkÚ~~LžÙ—Ëf "<ÚAM•“=Û ùâ?ÛÙ²¶å=ÒÖ8¼øØ2–|±§Í~Új;nZÆMëÓ¢üá;¿ }kA»m;3¿mº0ÎGtf¬ŽGÉÉ"""""""""""""""""""""""gH‚²Ãß8´‚²/Ü}ÿé; €üèZ–.ZÉÖM­'ŸÀ¡DÄ¿¿ñÉ)‰Íʃ !)“ÉØfëÀ!ý˜ý—ˆiVn±˜ñó÷#&.Šêª¯&(w7f€ÁÃ4ûÍŒ«/fÒ´ñüä–_±{GËä!“ÉÄo½)—^Ь<©WI7%péSxà'³Ù²áh2iA~!!¡ÁÇ=¯°ðPò·nGùr~_}÷Y"£#Z=n@ ™´þ)ØçÛ[ìëÊ8Ÿ,¦Í˜ÔìsXD(“/žÈSÆñ§ÿÊüϵÚn̸³0¸o³²Èè.œ:މÏ_~ÿ,Ÿ<¿Õ¶Þ¾þüåï¿'©WùyÜ×Cm&'CçŸ9Ýq×Ðþ8,Í”8,fú†Ñ74ˆ+ú$ó«ekÙYRÖjû1±‘ô?æ^Œô³sAB,âcxbíæî;Т]ÕÂóÇЬ<Ðj!Ðj!>À£ÁÐjkwÚ{î}Cƒ¸¾ Ks²­D}“ÁÀ½#qÙ1÷¾1þ~ÄøûqNtUNW›IÆ]a2øõÙC¹()®YyR ƒ¤ÀÞ\Ò+_/[Ûn²pWÝ6¸×÷OiVj·1>>†qñ1<³~+ŸìÉjÑÎ[st¢õÉ='"ÆÑb_DŒƒˆ†Ç°øót¯õyÁô4nýå¹mî·û™‰O&>9˜÷^Zçµ~»#,ÒŸß>3…ØÄ fåŽ+Ž+1 A 9;–…ÿÛí$(÷îÞ¸m 11âÜFœ›ÀkO­ä«9»z,þS‘ÆJDDDDDDDDDDDDDDDDDDDDDDD¼íÌHPvøàr5`6›p¹NhÿQ1‘Í>GÇF¶›,øÃÛ¿OrJ"Îz'¯<÷&+–®¡´¸ ‹ÕBtL$ý¦R]UÓjÛ>}{óôËÂßᇻÁÍüϱtñJräb0 fð°þ^OVìNÌGløn3ÿçsräáñx9z87ßy=Ž¿þýÜrí=-ÚÜö?lLšýê‹Å|úÑ—T”W2xØ@n¹ëzBBƒyü¹ÙÜtõÝN2.8X@@ ‹ÅŒ³Õ]CÃCï&(ût~ ¶nÚÁ¼O¿&#}å¥8NƒèšÜjÛ®ŒóÉÂétñ¿æ²äëåT”W’Ö¿?ºëDÅDòëGîeÏî}ìÙµ·E»×ÿñ6.—‹œyTVTa¶˜0¨/wÜ{3ɽ¹ï7w±tÑJÊJË›µóö=ÀSÿx„Cú‘—“ÏOô+æ´Û¦³ÏoX| wï£ÂéÄßlæÜØH¾×·7avŸ?Š-XJQm]‹v¯oÝËã!§ªš*§ ³Á@ÿ°`îÒ¤Àî1ˆ¥9)¯w6k÷é$àt»yuË.VæPZWÅh$ÊßN¿Ð`ªÛ¸·»Ó¶©(ÿæÉüÑþ~í&(ß2(­19y[q)ïïÚKVEF ÊßÙc†c3™ŽÛogÝ:¸ocròÂý9|šq€ §“Áá!Ü<0›•ÇÆŽä–K)¨©ml·¯¼‚‹>žÀ¸¸h=€Ëþ÷µ ÍŽº=-WTÕ/¥19y}A¯lÙENe5 îÒÁá¡ütø@¶•’~Ì}ä­9:‘REòÛg§`±´?‡ûvS^ztœk«^ÛV›ùÈc·Ûƒ³¾åûŠËånöÙbíØ5SY^GA^e‡êö´[~>¦Erò±Š ªW™î¬Üs6ë– ¸àèÓ4gƒÁ€ÕÖñ{­iÛ¦«!74¸q9Ý-ê»›¬0ÜÝùíi­•ˆˆˆ¨Æ » IDATˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHGœ ÊÁ‡W`œzáX¦^8–ÚÚ:r°eG:ë6n£Þé<κgѼoéÛ¿e¥å¬]µ±ÝúC†`þç‹x÷_5ÛWp°-Û^¥öþ‡îÁßáGmm÷ßñ×miQgõòµ=…ãêNÌG¬Z¶–¯¿\ÒøyÇÖÝTUVóóï&­ ©ýRHo²ZfL\×Ýp%s?YÀc?ݸo÷Ž Ö­ÙÈëü à@n¹ózŸý,ùy‡’; á‘aäåäpç½·0dø@^|æu6­ß @dÔ¡Õ†®ã 'Ãü®X²šßÿ¬Eùö--WQìê8Ÿ,Þ|å=ÞxñÆÏ»wd°fÅzþõÑ pË×óÛ{mÑnÅ·kZ”-]¼’̽ûù÷'/aµY=vd‹˜½yFD†óä‹Ð'­Yûpßí¿=nr2tþ™ã »JËØÜdÞmÅ¥|w°ˆ§'œC¨Íʦò×u[[´[™×ò|–åä“U^Å›SÇa5É‚¬œfu†DZÝ|AVï“`^PSËÖ¢¶…»Ó¶©ErI 9”dY^ïd]AQ›u£üí\×÷P²îŠÜ|~»| M’zÓË*p¹=t"g²C¢ýýø^ßÞ|±ïþnóÑ>KËYŸ_Ì?/KÕÂMSybíÑëÕÔ7J–l«Óín,oK„Ÿ›¦ðmöA^¹¾1‰¹¤®žŸ»†·§N ÂÏÆ÷ÒzñÇ5›šµ÷Ö(F£»<¿Yròî­,øx'ûvS[ãÄÏÏBbŸÐI©w^þAãöÓï^At| [¾ËåÏ÷ÕéX¶¬ÍeïŽ"*Ê먯kÀîg&*.—óÄ~9K[,VÃÇÄ7~Þ¾á ¯üe…+1›DÇ1pD4Ž@Ûqµè³Ý,øx'\~ãFOLÀj31zb2_|pôçiÓqNN ã±×¦w8æ¦mÿµðúÆy^¶`//þiY‡Ûzc~»ª3c%"""""""""""""""""""""""ÒgD‚raQ ÕÕµøûÙ Ân·Ñ;9ÞÉ Œ=‚7ßÿ…Å=Öÿ¿ÿùögf—ÃâËZ¬¸z¬Ò’2íGpHÐqë‘Ú/…ÁÃðƋﴚÙSºóñ,üò~þàÝô”Ö,AyÊ¥b4q¹\¼ö·h›™±ŸyŸ.dú•S™|ÉDžzôï¸\.ÊJË©ª¬ÆàODT8y9ùF.»jAŒŸt^c‚rDdŽIŽìŽSm~»:Î' W+«¬,ä“÷?ç†[¿Ç؉£±ÛmÔ¶²ºokögfs0/ŸØøâc›íóæ%õJà©%&.Ší[vñ‹»îðµÒÙgNOÙXXÌܽ¸,%‘)IñümÃ6\î–+í¶fe«k‰uøçðo±¿´®€a!Y--VXnOwÚ6õöŽ TTàÇây”>nk¦$Åc6p{<<µnk³„ßž4%9£Á€Ëíáõmé-ögVT2/3›é½™œÇÓë·vxŽÚsQRV“§ÛÍÓë·¶Xa¹ÖÕÀ÷ìã¶Áý8瘿Á{st¢Œ8/¡1ñ`Õ¢Lþöû%xŽËý{{>±ú­¿­9!ýt•ÉlÄh44~®­qR[ACƒ—ÓMfz1™é{'KßVȾ݇ê¾üørFKÄd2Ò?ÜûÁŸÂ4V"""""""""""""""""""""""âmgD‚ò[ÿù´qÛh0ÅYCröYC æ¦ëfòÌKoál%‘Ñ[¾ùªýöšúàßs8缑ôî“Ì;Ÿ¾ÂœÿÌeîœÇM’1jHãöst9Ö®èjÌÇSQ^IIq)¡a!„N>bððC‰ »÷µ¹ªì²oV1ýÊ©Øí6Òú§4®œ›Gj¿bb£Ø²a;ƒ‡ ððJÛcÎÅóO¾@t\Ùû½— |ªÍowÆùdv$ Ýd2‘Ú/¥ÅÊÕŽW\w)cÎELl!a!ÔT×p +‡ àC«æÚlÖfm¼5Gý¦rÝWÄw+×ó›Ÿ=JMuM§ŽÑ™gNOú6ç —¥$âg6Ñ'8ˆ‡ôpXÌ\Ñ'™Ñ1‘DûÛ ±Y©q5]YMÕ€ÍÔrYáwïãìèzðö´ ü/#‹/öes ²ê¸1u§í±¾ÉÎëP½#+ï()£ ¦¶ÓýtÕàðCýf”Up°khEnÓ{'b7™H bÇ1sÔßï¶âRŠÚHþßW^ @ˆÍJˆÍÚ˜” Þ£aЈ˜fŸÿóÏõ-’“O'Oýûrb“‚ZÝ—:0‚w–ÜØ¬ì¹ß/aÅÂ}ÔV;ÉL/!9õÐ52âÜžü÷å,úl7+e’ŸSÑ¥˜jªœägW6ÆÞò‹ N5ÝçöœŽc%"""""""""""""""""""""""'Þ‘ Ü”Ûãá@ÎAädϾý̺êRB‚ƒ5|0+Ölðux¬^¾–ßÞû÷?xá‘aÜpë÷¸áÖï±eÃvþóïOøæ«e¸Ýîí"¢­€WQ^Iqщ]=±«1wDUe5¡a!Øí¶fåG–ÛJš=´/ÿhýˆ£ ÎÙûs%(ÇE0îÂs÷UErJ"±ñ1äfç(éì@Vn—boÍ©6¿Ýç“YA~QãvHXp³}½ú$ñ×%2:¢Y¹Íf%$ôh]ƒÁÐl¿·æhâEçàñxxëÕÿt:9ùd’[UݸágcgÉÑ}½‚xrÜÙDúÙ›µ±™L„4Iþ>f˜X}°‡V¬ç¾³n·ñƒþ}øAÿ>l)*áƒÝûX’}°Åª½ÞhÛUᇟ_¹U'v.ô{°¦í~óš\_á~6(i³j'ú=4§Ã"Âøæê‹[?Ðji– ì‹9êŽðhGã¶ÓÙ@Þ®%Ùž)þ6ûþÛT‚ÃüˆŽäºÛÏâºÛÏbç¦|>}w ë–èôq««^CV[Ë/6£4V"""""""""""""""""""""""Ò]g\‚rS[w¤““W@\L$©½Oše€¥‹V²jéwLš6™×\Âàáÿefìgö“¾3£y£ÃI|%mu)æ8’¬{l2¨áð wô|›ÖËÜ»€˜Ã+$O¸h,¥%e¼óÚ‡Üõó1î‚1Ìù`.¡á!ÔÖÖq0÷`§ãnÏ©4¿Ýç“™ËutÅô¦+ yò7DFGPWWÏËϾÁ7 —Q\X‚Õf%.!–?ÿía¢b"[ÔKs´zùZéO@ ƒ'_øüæIÍÿ¶[Çô‹Ñظ}äZ:´ ¿3‚H?;u ¼²eK²R\[‡Õd$ÎáÏŸÎI”¿½•£²4ç «ò ¸01–)‰ mü—Y^ÉVm ½¬õDÑî´íŠ#çnm2Õôr:ö9xü~¤ó}u‡ñpÇn‡†´µq9Ñsä-®z÷i½z2Jn­®:šàj2±Ù½RºÝjkœÍ껜Ϳt#7«œ_ßò3®Ì„KRñsX÷õE¿¡²nùž~p1 ®Ž¹‰§IÕÎÞ+'£îŽs{N·±‘ïŒNP(*.!.&’‡ãø•O0§ÓÅ—Ÿ.äËOÍô+§ð½® 9%‘¿ýóÏÜxÅ]¶¸ðв—A‡QVZ~ÒÇÜ…E¤õO!&>ºÍ:ѱQÛÅEG—Ý›ž @l| ‡ô#6.šÿ¾÷ ç-áÎûnaÂä±|·jƒÌŒý¸{ ÙìT™ßîŒó±º“¸ëíÄçè˜ÖcNë߇^}’xüwϰ`îâÆ}N§‹Ý;öPÕdU়5Gë×læ©GÿΟŸû½û$3ûñ0,üò›.Ï—"š¬Ž\\[׸D¯ þ²v _eå4îsºÝì.-§ªIy[œn7ó2³™—™MŒÃK{%pmZo’ƒxfÂhnZð-…5u^oÛYÅuu@`» ×mqºÝ¸=ŒKç~lÖÖ‘ Ä8üÚ¬ãt_Ó9jªéjÅMÍ×üaÕÆÇ{¬9GÝQRttj?‡…˜„ òtþþoöœ;9£ÇþŒ3Ûïü¡Ûæ6û%8hÿÖc{ø¾®u5^Öú\Ô6IèìH’ô‘~GFE`3™:s[º3¿=m禃Í>_ûãáteQÚºÚ†ÆíðHÿî†Õa5MV鈈îÜuÖY†& ÁNgë–à\ʽ×}LqÁÑ/€qnÏÌoeyów¾¨ØÀéçX¾š_‘žpF'(''Ä‘@æþœãÔîºY7_ÍŸ~»~þ#^}÷Y‚C‚Ú­o6·üµwO&凓üBB›gÇÖ]‰–·ÞsCG êfä×Õ˜»cþç_ÓÐЀÉdâ–»~Ðbï>ÉL½ìÂÃuáj²kÖÞý¸\.¢ã¢¹è’‰dïÏeËÆíu ×ßr5»÷y-f8õæ·;ã|¬ÂüC+BGÅDÙ©8ºÓöXƒ†ögÆUÓ˜÷Ù×Íb..*mÜ0¨o§Žëí9ª(¯äg·þšë¶`2™xøÏ¿ìÐ1;ûÌñ³¡å“‡S’ãXž“OmÃÑä¼’&+õö î|í¬xº·¼’ŠúC —Á6«WÛ6õý~)'_Þ—ac≈v6(’ën?‹Ðï$ÔšÌFþþÑÕüøç2â¼B#ü±XLØýÌ„FúãrM†ï©•ËŠk¨n’”}áei OdLý‡Fñ}/žoS¾š_‘žpüeOq×]q UÕÕdd ¤´œ††þ¤õIæÜQÃ1 ÔÖÕ±zÝæ‹aÒÅ·ƒCƒ9z_Ïû¶ÍúO½ø(.—“…_.aÇ–]•b6›‰‰‹bÆ5 À¶Í»šµóx<<ñ‡çxîõDZûÙyîµÇùzþ–³šÜìƒ444àïð'%5™°`^yîM¯cWc¹¼÷¯ÿrý-×pñŒÉøùûñé‡_RYQÉàa¸ñ¶ë0›Í”—UðÆ‹ï4këtºÈHϤoÿ>X‚ùàí9û¾ž·„Ÿ>p{cÌ;·¥{-f8õæ·;ã|¬Í­0l4xð?ç—ÞÅívŸKl|4¯>ÿ–×Ûö”ư‘ƒ©(« 081çâêëgb±Z(-)ãõcbNß¹‡¼œ|bâ¢øé·c³ÛX·z#e¥åX,B‚±ûµ¾nOÌQ]]=Üó{žýqRû¥ð§gâŽÜǬ¶¿T¡³Ïo¸a@Âì6–å¤Òé"-4ˆHÅßlÆåöðú¶ÝÍê§—UW]CŒ¿?>›Ùĺü"Êê걚Œ„X­øµ³òî“ãÎÆéöðõþ\v—QRW‡Ùh Úß)I+4ï(.õjÛ¦&%Æ6nÛ¬ŒŒŠ`ÑÜVëî+¯dAV%Å1½w" Ÿï;@e½“”à@.ï“„;_^ðžlÆÇÇn·ñôøsxkûr«ª±šLDùÛ1¶‘|°º†÷wíeV¿¦%Çãg6ñYÆ~*.…‡pã€TÌFåõNÞØÞö³.«¢Š’ºzBmVîÒ“ÑÀžÒ è@b€ƒ7ïl¬_PSË›ÛÓ¹eP—öN`xds2²Èª¨¤¸¶«ÑHŒÃaa<½~+ žæ‰ÑÞš£ÅYßÀK/ç—¾°quàã0¼õÌ7®ÎaFI‹òmëó8kìÑUƒ¯½u×Þ:¢Y¼*öî,òbôàq{X»4‹±¥bç¿4_~û†ƒ”V·Ö¼SzîÇ…—¥qáe-“æ›Úü]Ï|yŒÇk—`ÜÔÃçjç'šŸï6/o³cúh~EDDDDDDDDDDDDDDDDDDDDDDDzÂi l4è—Ú «Õ˜QÃZ­S]SË»}Ne•w“Pš*8XHßþ}?çç¶Y×h42ph?ìvçœ7²Íz˾YÅ¢ùKZ”oß²“_Üõ0?ö "¢Â™|ñD&_<±E½ªÊªÆäH??L¦Î/¦]S]KCCC·cîŽWž{“Èè¦\z'eâä±ÍöW”WòÀOfSß2ÙgçÖÝôíß·Û×ÿûª±¼¼¬‚% —3iÚx<»š$íùz¬º2¿ÞÐqn*c÷>–.^ÉùÇ0â졌8{hã¾²’òv”»Ú¶µxŠ‹JxàžÙ7+w»=<ú›'ùËßO@ ƒŸ?xw»çt¬ž˜£ªÊ*~y÷ïxíƒç æÑ§äöY?£®®¾Õúyæx‹Åhäò>I\Þ'©YyƒÇß¿ÛÄžÃ+ƒáöxøãê<~þ(,îëÄjÓFƒa!ØM&Îig5ßå¹ù,:çµ¶Ç*¨©%­ÉêÔù55íÔ†¿®ÛJŒÃ!á¡LLˆabBL»õç󽸴wÃBxllÛÏc½ºe‘~v.JŠcB| â›÷[Qïä×ËÖRXSÛæ1ܯnÙÅ/F&Øfåþ³7Û_^ïl–  ðæöt¬&#³ú¥àÏ]Cû·zì÷wíeåÑ•e½9G'ÒÆ•Ù<ùëEÜþëó iýK ŽHN m5AùëÏvsÑýˆŽl³m|rçWïˆþ¹‘a£ã ²µÞo¯`6®Êîv?qŒÇƃ|þÞ¶n÷×–_ÛÀ°ÑqmΕ·Î·)_ίˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ·Ö ʇÿÌù’¾}z‘CXhV‹…ººz ŠJصg«×m¦ªºý¤²îzá©I\B s>œË–ÛÛù{~ÇøIcÎMwÌâ‚)ãˆŒŽ ¾®ŽŒÝ™|»hƒ§ík¤3m_øëkŒ3œÞ}’‰ŒŽÀÏÏN]]²rYºhÿù÷'TVTµÚÏÆu[¸ñÊ;¸zÖLÎ:g(‘ÑR]UCYi9Å…%dí;Àêåk[mßsT_Äã¿{–Çþö0}Òzñ£»oà…¿þ³Õºyæx˼ÌlÌF##"öY)««gCA1oïØCú1ÉÉGl*,á¦ùK¹*5™‘áDúÛ ²Z¨vº(¯wR\[GfE%«I°öx<üjéZÆÇG3(<„p»›ŠkëØSVÁ×ûsY¸?÷1×SwÚë…M;ˆò³ëðçYl-jÿ¨v¹ø¿Å«¸25™)Iñ$:0`OYó2³¹gØ,ƶ¿á‰µ›ÙXXÌôÞ‰¤ào6ãt»)«s’SUÍ®’2Öl™ŒÞàñðèê,ÉÎcFJýCƒ±›MäUÕ°<7ŸwwfPÒF²{SŸíÝOY}=WöI&5$ˆ‹™Wéeå|›}ÐtÄ<À+[v±p.3S’8+*ŒH??¬&#•õN²*ªXWPDY}ó¾½9G'Úúøéµÿeü´> ORj(Á6,Vu5.Šò«ÈØYDvfY«ík«Ì¾ë ®¸iCFÅåÀd6PU^OIa5;6å³rqfÄžŸSÁC·Ïåê[†1hd,Á6êj]äT²u}k–dµÙvãªlfïØ.¬X¸¢ƒUŒ¾ ý‡E€Ÿ¿—ÓMYI ™»‹Y¹(“_ïÃãåw†¦ r+yè¶¹\yó¡±µSUYOAn%›×䲺ƹ»óÛ™qéi†Ãÿš™={¶aëÖ­†‚‚CEE…!%%ÅPPP`´Z­¦ªª*£Ûí¶øûû[œN§°F‡Çã ôx<¡K–,™óÝwß5kÔ¨Q'ðt|/55Õ×!tÚ ÿz²[I·g•Hssg^„Ãbæå-;y{G†¯Ã9¥}uåT,F#ÏoÜλ÷ù:œSÞ;Ó&àÏ_×meNFÛɵ"rb|2ýBBí6þ¸z#ó³r|ŽˆˆˆˆˆˆˆÈï½÷ÞkµüLûÝ®ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ骵<ßñãÇÏ4 %ƒ¡ÂívWµ‹¥¾ººÚi4‡Ã]__ßéÎÈÈðz"##=ƒ òÌž=»ÅJt§õ ÊÒ1wýð~_‡pÊÐX‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈ™ÎèëDDDDDDDDDDDDDDDDDDDDDDDDDDDDDäÔ¡”EDDä´uû~Ü<0µYÙó¿¥¼Þ飈DN·îË¥½š•Û¬>ŠFDDDDDDDDDDDDDDDDDDDDDDDz‚”O"ßnšë“~Ç ½Ä'ýži|5¿rzÓý+Ò>‡ÅŒÃÒüuÇ`0xíøï,¹ÑkÇ:Ìÿ¦¯CãèÎ5é­ùuXÌ„Úm^9–ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆœœ” |Q¢áéMó+§£Kæ,ðu§ÉÿçëN+³¾üæÄô£„]9Éœ ×ä3ë·ñÌúm¾CDDDDDDDDºà»ï¾óu""""""""""""""rŠ0ú:9u(AYDDDDDDDDDDDDDDDDDDDDDDDDDDDDD:ÌìëDDDDDDDDDDDDDDÄ7FåëDDDDDDDDDDDDDD䤔Eº 2*œÑcG’Ö¿¯C9å‡qÖ9CéÕ'ÉסˆH2|´Å?ÀJ@Í×aœ1t/ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈé@+(ËIcÀà¾üîñðó·óçß=ËŠ%«}R›ÞúäE^zö vïØãëp:ådç¿z ‹ÕÂsy™}{²|‹ˆ´îiˆðouߌORVWßnû”þáÜrßþñ§¥dï+ë‰}êõù³°Ù[¥zñ±e,ùâäû9áÏ­¿<—Ä”£¼ò—,úlw§3yf_®¾e8n·‡÷^ZÇ’/;®Cωã‚éi¤ Š$8ÔN]‹²âZò”³qUßÌM§®ÖÕé㞌ºr/ülÄ@®è“Üê¾?®ÞÈü¬o†("""""""""""""""""""""""Ò!JP–“Æ-wý€øÄXî¾ïG'4qÖh4Cnvn·ç„õë ¾g9Äh0ãð#¯ª·çÔyæÔº¨w»›•yŽ¿Élä¶Î#©O(zu:ᄌŽymç:íÓR@ •ácâ»uŒð(7ß;ƒñÐ’À·þò\6¬Ì¦¼´¶ÃǸéÞÑL¹¢_³2³‡•ØÄ Fœ›Àú(È­ìV¬'ƒ®Þ 5®ÊëÍÊ­´³ˆˆˆˆˆˆˆˆôýÇ“ˆˆˆˆˆˆˆˆˆˆˆˆˆÈéáä Ê£GeÆ´ øøó…|·a‹#’†††ÆmW“ížvÎy#ùã3b·Û˜2æ*jªkNXß¾à«q‘CΉŽà‘óÎÂn21í“ùÔ¸Nûð…M;˜“ѹ•ÎÏ—DRŸP,V7þôl†ŸÏK-§¤°º'Â`ÚÕHI|¯`òs*øëo÷X_µÕG“G V›©Çú:™„Fø5&'áÜp¿'(Ÿ;©W‹ääc•×´šœ|"Mï{e IDATç·-)ýÃqn†GH@°ßßý™é%­Öïê½ðÒæ¼´yg³²O¦_H¨Ý潓é¤32AyØàþ\6õ_‡!Çxõù·ˆŒŽÀn·ñÜ_^>aýú;ü°ŸAI>¾g9ÄßbÆn:3XV.ÚG~n—ß0„‘ç'a0Àгã˜4£/¾¶¡ÇúzU¢ã(-êÙ/ž¸óò·“SÃxìµé=ÚßÉ"kO ù¹•DÅ“YFvfY‡Û_piZ³Ïï¼°–¥ 2ÀaQSBðó·´ÚöDÎï±ú ˆ`Ö#0<ºÅ>G`ÛᄎDDDDDDDDDDDDDDDDDDDDDDDDz— œœÇUÓ'ÜnF£Ñ×!Éaé;3øÑµ?ñu§=³ˆœh;Šøëo“Ø;„™7 !¡wsÞÚìë°¤›êëøÝs™xin·›EŸ¥Óàrw¸}BJHãö¶õy|öÞÖÆÏ¥Å5dì(ôj¼Þ0íê\×HLæÖßÖvÛë^‘ÓÅ• ìpøóý+/Ád2ñ¿/1y¹øûÙ}–ˆˆÈaÿÞRžÿ÷˜L<¾ç¤d00N~õx<¸œOøõ…²’Zæü»k ¶Ž€£É¼E«¼R‡teœ'^šÊ?=»ñ³ÇíaÓšÖ¯È&cg•euåwìÙ“ÅË[vvh̆G†13%‰¡¡„Øl4xÜ”ÔÕ“UQÅÖ¢ægåSYÝXßj2²àŠ©üaÕîÏmq̯®œŠÅhäùÛù`÷¾VûÍÌ”$ú…c7™È«®ayn>ïíÌ ¤®¾EýÞA¼1åüå_^>¥EÙÚü"î[²ºÕ~„suj/†G†l³RYïdsQ ïïÚÇ–¢’VÛ€wæÈ›:ši¶9oroFŽM¤wßpCl ÊKjÉÏ­`Óê¾þt7•åu¼>6{ËW›¡çÄñÎ’[”¿ñÌjæÿwG³²È؆ŽgðÈⓃ ‰ðÇn7c2©­qQ”_EVz ￲žüœŠ.œ}û†žÇOL }[!ß1÷¸m¬6“fôeÔ¸$z‡à`¡¶ÆEEi-¹Ul[ŸÇ¼¶S[Óöócò̾\6káÑjªœìÙ^ÈÿÙΖµ-ï‘¶ÆàÅÇ–±ä‹=möÓVÛqÓú0nZŸåßùé[ ÚmÛ™ùmlÓÉqŽIâG?Óø97«œ[Æîñu•’“EDDDDDDDDDŽZ¾|9V«•G}T Ê"""""""""""""§€3&AyâØ³IíÄÞ¬læ½ì„ö}÷ý?¦ï€T~ð£kYºh%[7µž0Äßßx‚ä”ÄfåA‡Édl3Ayà~ÌþËÄÆÇ4+·XÌøùûEuUW”»sW<÷ÄË =k)©ÉüáÉ_sÛõ÷â¬w6îŸ0i,S.½·ÛÃ|ª19Ù›Ðìsl\43®¾˜IÓÆó“[~Åîm'iuFA~!!¡ÁÇ­ @þÁB¯ô pÏý?ÆàhQŸK|b,]2{o{í­$•:üyò0xXó±ê; µñ¾h‹Édâ7ÞÇ”K/hVžôÿìÝwX×úÀñïîR—ÞQQì½bKÔMÔ«^s-)¦—kš&ùiš1½j¼¦˜MŒ½`'j4*Ø»(ˆ‘ÞaËïde¥ï. æý<O–™sæœ9sfðÉì{ÞÆN `ø˜Á¼ï×FÎŽFÛl¬q²±ÆßQR¡(7€Õœº·ž{s7g&„±'>‰S©T« žíÊÈ[ž9V¨ðUÛã«¶§«'9Eš ƒŒM¡R(˜Ý¥-÷úmtr Щ Ã0{ïáJƒ…M5½u &„ms³³%Ìß—>þ¾|u’ÕcËÔ³Ô5ªkÍ[{ñäaxú–}öxú:àéë@Ëö¾ìÚ`¹/(õÑŒi/U¼x‰½þ\ðoäÂòo"-Ö®9ܽԼúñ`4t6Úîàhƒƒ£ ¾δéÒ€íkÏA%ÊMZx>[»ªèÐ#€=Xòá~¶­9Wký¿S<ôh{T72.§§æñæ¬Íd¦YþßB!„B!„Bˆ›”J%ÄÅÅ¡Óéê»;B!„B!„B!„B!nñPöñö¤Ÿnäææñë›Ðéë6[·¯—qxUà8yÆ#4 jHQa‹>û¿ö$=5kk||½hÑ*˜Üœ¼rë6mÞ„¾ÚÁVGø†ìÙµŸø¸ %®n.´nbñKSûüÛÏkY½òfÖÂOOaìÄÑÕj³° ¹/¾Ë¢åŸÜ"ˆ§^œÎ‡ó¾ÀÍÝ•ߘÀòïçxÔ)£º—.Æ2°Kq;az0ç½—ö0y·2ë´ááÈ¡ãü±b q‰èõz:ukÏ¿›€ƒ£³ßz–©cŸ¬Ö¹T%9)G'¬­­(ª$‹®›‡+`tkÎ8—¶kÛ^Ö®ÜHZjjµ=m;†2eæxxmþóL5ý-÷×Ksž6'oø#œÍë¶““C³¦<4aÁ-‚Êk €éOO6'oÛ´‹u¿o&+3›ÖíZ1õñ ¸º¹ðÞgs™òà$ß8_sÇêV5½-aW\"¿¿LVQj++z4ðb\ó&¸ÛÙò^ïÎ<ºu)ùeêýïäy4z=ñ9¹äi°R(qwaf›:9òl‡PöÄ'‘Y*`rË`9;R¤Ó±øÄ9ö'&“^PˆµR‰·ÚŽn.äV0ŽæÔ-Í[mgô»Ú¾Òå©¡Í ÁɧRÓùõÜ%b³rPÞj{ævo­JUe»55­usCpòö+ñ¬‹Ž#«¨ˆÖ®ü»U3\mmx§W'¦nÝCr©gÉåÌ,îùc }ü|x£[{F®ÝF¾VkÔFy£Æ·2'G%§°èÄ9â³s pr`f›´öpã©ö­8‘’Î…ôL£º–ºFu)8Ô‹W?Œµuå×ðòùT2ÓoŽs~î͹mckeHЮÓé)*ÔÞZÆøùnmS½9“Y@rbvµÊÖ¶©Ïw/œ|«Ôä\C–éššød"÷Å‘š|3yéqV(ØØVÿ^+]·t6d­V‡¦¨ìß[]© Ãæ^_S©mèÖ¿‘á÷¬ô|^~ >Näf}æ:;ÖžçØÁx‹´'„B!„B!D}ëÙ³'3gΤiÓ¦¸¸¸`eeEzz:çÎãÏ?ÿdÅŠdd”¿˜ª¥„……ñå—_booO›6mÈÍÍ­º’¨’““GŽ`âĉüõ×_–ýõ×_éܹ3ß}÷óçϯ«.Öš{¯¿þºÒ2#GŽäÔ©S•–¹“M˜0·Þz €W^y…_ýµVÛsvvæ§Ÿ~"44”™3g²uëÖ*ëtîÜ™iӦѱcGÔj5qqqlÚ´‰o¾ù†¼¼ò¿#a ¦¶Û¬Y3&L˜@÷îÝiذ!Z­–˜˜vîÜÉ’%KHO¯ø}§©T*ƒ bäÈ‘tìØ ¸téÛ¶mcéÒ¥deeUZ„ <ðÀ¿Œ%<<œÅ‹“““cñ>ƒùce‰¹QÝ9Ù¼ys6mÚTís»Ýž¦ŽÕðáÃùôÓO+=ö“O>YflÌ“æôY!„B!„B!Dý»ë” c† D¥T²~kYÙµó2¥2;·üIó¦d¤grøÀÑJË·iß €ð ;ùåûßö%']çÄÑÓåUà…ןDí`O~~/Ì|£‘'Ê”ù{ßášžB•Lí³N§£° ðæï•—çÒÅ>{ÿ[^xýIFÎῲkë^š3 7g¢/İø‹ËÔÓëõ†v5š›AM……EFý©Ê½‡Ù±9Âðû™“çÉÉÎåùמ YHÁ-‚¸`¬¤×“âùìáåNbü5{v*mÚ·âëÿDZ¨“xy{t£ ˜?Î%Ξ<ÏÁ¿¢ ¿‹:IVV6/¼ö$mbt­›6o€!}øyéo|µp‰aßù3ÑlY·ƒ­ÿµuÙG‘¯Ÿ7ÿë~6®ÞÊ;o|dT7òàQþ·ò œ]œ˜úØÞ›û `þXݪ¦÷¯%œKÏàx© ¼§RÓ9””ÂG}»âfkÃäVÁ,ŒØ¨”tóõbk¬q]ÏâLÒ[cãY~î’Ѿä¼|N¦Tü2Øœº¥íŒK ™kqefa‘É)–õVÛñpóâ—å%\ãÕ}‘hKõ^ÈÈB£ÓSƒ˜ÉjñQÛ3®y6]ŽãÝCÇo¶™žIÔµT¾»§Î6ÖLi̇o>õ@áû®t_‹t:ÃöŠxÚÛñïVÍøójoì21§òüŸY6¤/žö¶ŒkÖ˜yÕ·Ô5ª+J¥‚'^ëmœ|þd2[ÿ8Ëåó©äçaooMæne‚R½Òðù£_ÆàãïÀ‰C ¼û¶÷åÄá.I!+³€Â-vöVxû9¡)* [¬mT´ïîoøýô‘$½ÿד²±²RâãïL«>88ÙVy¬ëϳõ³èõ0zRºõ+ȵ±UÑ­_#6­¼ùl/=΂ÝygɈj÷¹tÝï·O0\ç½[/ñõü½Õ®k‰ë[]¡}Q*†ß¹>«lðôq kßF„ÿq–¥¨µ~!„B!„BQWZ´hA¯^½Œ¶yyyáååE¯^½˜5kÿýïÙ¸qcG0ŸƒƒöööµvüªÒÞÖÖÖ•–µ²²*SGܹFÅ›o¾Ygí5lد¾úŠ–-[V»ÎøñãyóÍ7Q*•†mÁÁÁÌš5‹{ï½—qãÆÕJÀ¯)í*•J^xáþóŸÿ ºeÑäV­ZѪU+xàzè!âã-»Àé—_~É AƒŒ¶YYYѺukZ·nÍ<À¸qãHJJ*SW­V³xñbºuëf´=$$„FÍ#=r ®zÙà¯dç”›O{üÔeö§ß^oéu™ Ë•1§niËÎD—•‹Ÿ£=»âɨd¡€ÁþX)èôz>Œ„B!„B!„¸åää0lØ0<==éÖ­“'OÆÇLJÏ>û ¥RÉúõëë¹—¢&´Z-EEEX[[+RÀ\[ÙTëÚÎ;éСC™í-[¶ä矮‡ÕÎ;óÞ{ï¡×ëÑéte‚D-©$;ïsÏ=‡““SÕnh×®sçÎE©TròäI>þøc’““0`O<ñÁÁÁ¼ÿþûLŸ>Ý¢ý5µ]???&Mš„J¥b÷îÝüþûï\¾|&L˜À AƒðõõeΜ9̘1â}^·nMš4á÷ß'**ŠŒŒ |||xà1b 6䥗^âùçŸ/S÷7Þ0'ùå—üúë¯èt: ÀË/¿L`` ü1<òz ½ƒ5w¬Ì¦ÌÉèèhúöí[á~…BÁ_|Ahh('OžäÂ…ÛãݹcåèèÀþýûyì±ÇÊ-SÞ¢æÌÉúº÷…B!„B!„BXÎ] ¬¶·cPXôz=·ýY¯}Ù½­ò¬€¥­üi ]{v¢IÓFü¼nkVldãš­UœvèÜÆðyÓš­&÷Õ¦öÙRÞ›û !¡Íñõófêc€â íóg.ÖIû¥eef“–šŽ›»+^Õ jªŽ„«‰··7'Žœ¦u»–89¿ êÞ»3Ÿ/X€Ÿ7W¯ÔÍØçåæ‘r=/o\Ý\Œöµh ÀÅs—ÈÍÉ«Ñq[·/¶>™¤„²™öî>Àˆû‡`ggK³ NŸ8X~¬jrÿÖ¦?ã“Ô{+M]œ9{ca€ÖVŒiÚˆn¾^ø¨ípµµ!O£åjv.Î6Å_"±-ç ¿¿LOš8;²lh_ÖFDzéòU⪑qÞœº·Ú}µz+q—d>“–Ar^~Û1Ukâv£3²HÊ->ÿ•̈& ±S©vqæÌ-×Èínœï©ÔtRò Ê-s93W[\mm AÉ`ÙkTB;øý¾â»¨2ÁÉw“Mƒ@çr÷·òäçˆIFÛ>{3‚¿¶_ ?·ˆ˜ i4 .ž#z°à§Ñì\žý;c¸ŸeRŸòrЏv5ÛÐ/W² ÜiÌggW;Ãöœ¬B¾º“ËçSQ©”´ïîÏ£/tÇÖ®øŸÔÃÆ¶’e!„B!„Bq×ÐétÄÅÅÇ‘#GX¶l‹/¦K—.¼óÎ;üý÷ß\»v­ž{*j"//kkë*3(ßmʆÌ̲ ßí¢=<<øì³Ï°¶¶fΜ9<óÌ3¸¹¹ÕJ[cƌᩧž"00€ˆˆªU÷¹çžC¥R‘˜˜È„ ÈÊ*~Çqüøqrrr˜={6¤C‡DEEY¬Ï¦¶Çk¯½Fff&;vì0:fDD‹/¦ÿþôïßµZmÑy¶aÃ6lØ`@|öìY"""°²²bèСe²ÙBq ð<'øá‡†}?ýôIII|ýõ×téÒ…^½z±gÏ‹ô×ܱ2gn˜:'5áï_y¦M›Fhh(<ýôÓV¼øv]2÷>rv.~—–’’Rîó²"¦ÎIKôY!„B!„B!DýSÖwjSXÏÎØÙÙuü ×’Sê»;Õö÷¾Ã¼úìÛ¤$§âìâÄ¿¦ã—õ‹ùê‡é?¸Jeù—ÍÓ»8ÃaVf6©)u›ñÑÔ>[JvVŸ¼ûµá÷Üœ<–¿ªVÛ¬LNvñK3;;[‹óê•|ý|è3 Ç¶rhÔþÅA}~7þ›`±¶«’#HÔÆÖÆh»»‡+×’®×ø˜%ÁÝ'ï»ù…Ï›Áà·óX™#!çæËXO{ã¹ÕØÙ‘ï÷aZëæ´õtÃGm­J…«­ ¡®8XÏ)”ñwÒu^ÿ+Š”üœm¬™Ò”eCÃø¢wúø¢,¯’êšÊãÆ}•PàwKµ›”Wq»‰¥—=ì-sÿ{ØG¶ótg÷ƒ÷–û3¿g'Cy'ã/ÕÇ52‡‡ƒásQ‘–Ä8Ó‚lÿ)>»›ŒÔ›óÎÇ߉‡gtäãåc˜óùP:ö 0鸹¹7¿Hac[{™îjǛ۲2ò9}$‰¼œ"²3 ØMøª3†ýM\qp²)ï0B!„B!„Bܲ³³yúé§ÉÉÉA­V3uêÔrË=ýôÓ¬X±‚Ý»wsìØ1Μ9ÃÞ½{ùôÓOËÍb мys.^¼ÈÅ‹ùüóÏ Û?nØ^òóã?VØÇvíÚñÑG±wï^Μ9ÃøòË/騱cµÎ±qãÆ¬]»–#GŽðâ‹/V«Î¤$ø¯ª Ê%û+ ¬4uœ­¬¬xôÑGY»v-Ççĉ¬]»–G}Åmö΢„)ó`ܸqÌŸ?Ÿ?þøƒ½{÷râÄ NŸ>ÍÎ;yûí·iذa­ö[©TòÑGáííÍ¢E‹øé§Ÿjµ½FHLL ³fÍâé§Ÿ®V=zöì À·ß~kP,±téRRSS¸ï¾û*=VMî_sÛ]½zu™€ÛëÖ­г÷úúú–[Æ”>èõú ³GFF`ggWæ;½{÷6lûþûïËÔݶmIII 6¬Ê~Ô„©ceî52uNVÆÏÏÏpœ/¾ø‚K—.™}ÌÊ,[¶Œ#GŽTXm‰û¨$@9=½fß72uNZòÞB!„B!„BQîêåNíBèØ¶%ó^}ºÌÚ¾8èkÌðÌ{õiîé×£>»kdÏÎý<4t ó^ýGNÅeßZ0›V}Ep‹ ²•n¼¯­èü×6“úl!J¥‚'Ž2ü®v°gÊÌñµÖ^Ut:€E_¢Ç\º€ï¬¿}ïéEzZß³€>ý»ckkƒ›‡+ùù$%$Y¬íªT4çJ6kŠ45>¦âÆ„®î|.]îv+sX—zaW2>ÅŸáÍîð²·£@«åó£§»qƒVmaØš­ügÛ^®åVžixO|ã6îbþÁcœHIŠ3¿Ù½KïéM°‹S­Ô5Eɹۘ°ðAééTÓûÓPºšXK=Š•7ÖéõétUþ”7.u},ES¨»«³'Cq pnÎÍŸ‚ü›ÏKNo´/7§M‘Ψ~Bl&³§®góÊÓäåíkÑÖ›ÞÀ ï@eU³ûE_ª™Ûõ a5aÎ8–*k¯.›Q$ú¬ñ"8®îöµpB!„B!„BÜ>’’’X¿~=Pq[¿~ýèÔ©888`mm¯¯/ÇgÅŠ<ôÐCµÒ·_|‘U«Vqß}÷áë답µ5žžž 2„+V0qâÄ*1{ölBCCqrrbæÌ™• Þ‰²³³ªÌ \ \R¾4SÇÙÑÑ‘åË—óÊ+¯ŠZ­ÆÞÞžÐÐP^yå•*ûT_LϳgÏfܸq´mÛ___ìíí±±±!00ñãdznÝ:ÚµkWký~ì±ÇèÕ«àƒ>¨µvJ,[¶ŒéÓ§sÏ=÷°qãÆj×ëÞ½»!pqëÖ­eök4víÚ`f¬HMî_K¶{«Ò™Çó*Yü¸¦}®J§NÅ‹?~Üð…>>Å‹{çæærýzÙÆõz=ûöí M›6&÷¡¦*+s¯‘©s²2/¼ðöööÄÇdzhÑ"‹³2ŽŽŽ899U¹¨„%æ³»{ñ¢ðåÍSU6'kóB!„B!„BQw*ÿ?Øw8+«;;ã_Q‘†Íë¶³yÝv|ý|qÿ`Æýk ‚òéwï2iÌc\/•:õzqЙ“³#.®Îd¤gÞö}¾•îFDTéàËê˜2c<º¶#/7í›#qÿÆÿû!öï9ÄÑÃ'*­[:øívŽÁºt!€þ¾´jÓ‚~>¬Z¾ží["x칩ôÔ‹CŽ P(ˆ‰¾‚®’ >Sǹ¦®'§Ð,$_ŸZ©ëÓÀÛð9õFÐ%Xv¬n'ž7UHÍ/0|næêLcgGÞ?|‚m±ñ†}E:çÓ3ÉÑT$^¤Ó±%æ*[b®âë`ÏðÆŒmÖ„FÎŽ|Ü·S¶þÉŒAÕk IDATõ¼‹×­©Ô‚À oµ]•eËë§N¯G©P²JW×õü‚_‡Šƒ}Õ7÷•¾F¥éJE.Wç,iwg\o8ZíþÞª.¯‘9ÒRn~ñÀÞÁßgãjþ÷Ìhqƒ:|¶ßú—¶yóf~ùåRRRppp sçÎÌš5 ''',XÀàÁƒ-¾y‹-xê©§HKKã™gž)÷ž±´ääd¶oß^ãzÍš5ŠçZɳ䥗^¢S§N¼÷Þ{DFFröìY x®ZYY¡©àÝgMî_K¶{«!C†páÂ*-kî3ÇÉɉ&OžÌ!CÈËËãwÞ)S®ä9ªV«Q«ÕåfG/ L- f® ••¹×ÈÔ9Y‘àà`FŽ ÀÂ… ),,¬¢FݱÄ|öðð   [[[ L{w\Ý9Y›÷ B!„B!„BˆºsWgP~óý/yuÞ'þäæœü±a;¯Îû„­»þªµ¾„ ìÉ#“À×Ï´9‰ñI,þüG¦Fƒ“³#÷ŽdTæXdñ ^…BÁ‘Íî³¹ªÓç[ÜŽspTW»Ž]Û2yFq¶ä÷ßü”Þú”¨ƒÇP*¼6ï*­ŸŸ3𨪲õéÒÅXüü}öº1Wó5Z.d”-òKtV'Hº¤ÝNޞت,³ð†9×·¶=fœÑ|ìÚ›´xDAþÍ/ÚxxÕî³®´¼ã/"xúÔlžÕ”¢T@pQ‘–Ƚq|5oÏ>ü©É7¿XÒ¡Gí\ßìLã/&x7¨›lÜuy}cΧ>+• º„íïÔ«¡ás~ž†ë‰e³‰!„B!„Bq·‰Ž¾ù^Æßß¿Ìþ]»v±gÏbccIKKãÚµklÛ¶3f Õj±µµ¥oß¾Fuôz= ¶—·Šƒéž~úiÂÃÙ4iQQQ¤¤¤pèÐ!&OžLRR*•Š©S§Vzn¥³l¦¥¥2ŠÞ-J”K²q:;;³eË6mÚÄ¿ÿýoC¹’ý¥”Íç†À¢E‹øïÿË8uê¿ýö£F¢¨¨¨öNÜ ¦ÌçÒŽ?Ξ={8}ú4‡â믿fÞ¼yѾ}{‹öW©T2þ|¬¬¬xûí·¹víšEoiÞÞÅï×J¼»uëÆŒ3èܹ3sçΊïE(ž—%Y^ËS“û×’í–Ö¹sgÆŒÀ‚ ª,oê3ÇÙÙ™‹/räÈ–/_ν÷ÞËÙ³g;v,‡.S¾ô‚ƒ.÷˜ØÛWþ¾ÖRª«ÚºF¦š1cJ¥’¸¸8Ö®][«mÕ”%ƪ$Xþ¥—^âÔ©SDEE±lÙ2&Mš„Z]õû¸šÎÉÛíú !„B!„B!„0Í] |»ÿï™÷Ñk<þü£,þå\\+-_ò²·<—.Æy#0ÑÕÍø8gNž3iN{ò_´íjfÏ«ÏÔ>ß*)1OoÜ=ݪl×Ùʼn7Þy ¥RÁúU[ضi7:žù¯/$7'_?ožþïŒjµ еgÇ*Û¬/±—® Ñhðñóážaý¸z%GO¾a' …‚ S úüåJUÓq6Uø†hµZT*ϽöªW–®;õñ‰eö7iÚˆ!#Ü(»Óè‹(–«šÞ¿–`¥(ûhöu°gp#?öÅ_#¿Ô*çi¥2õ†¸¹Ô¼½J2ž^ÊÌ&ëÆÊÏ.¶6­[Ú#-‚ø¿y¬mß艳u…ew\)^9[¥P0¹ep™ýJ…¢Ò€Ö’ç¾¾ØYUNnG«×£R(˜Ú¬Ìþ&ÎŽ ô7”ÕT™ûZîÍ,]|<«lwKÌU4:=®¶6<ݾªFëZêÕ•C^!½TåîóÚ'Cè1°1~.¸{©iÐЙ–í}ñp(*«òÿ)“’”cøìߨ•ÑÿjCƒ@g¼8êŸéhÒ¢f 'TGJr.ùy7ŸGƒF7§]w<}hêÅÃ3:âæi™€Z••’/~ÿ¼Øƒ=póTcm­ÂÎÞ 7/5ÍÍ`øÚÊlœ‘šGn© ì#›Ñ®›?^¾Ž„´õæ žoiuy}ˆ§°àæ3wÒ¬.t耻—šû&´¦[¿F†}‡÷Ä–É¢-„B!„B!Äݨ$ÈÀÅ¥úï&.]ºdÈ’XEéê5j¶¶¶1gΜ2Ùbsssùá‡* $øúë¯yâ‰'x÷Ýw3fŒ!8ênqkåÞõ:ÔP®¼esÆyĈ@qfÎÏ>û¬L¿´Z­Å³×6sæóêÕ«ÑéŠÿ?~ëÖ­-Ú¯‰'Ò¾}{"""X³fE]JKæš“ÓÍÅP‹ßÍ–ÎN]Y dMî_K¶["00¯¾ú …BÁ–-[غuk•uL}æèõú2‹54kÖŒ™3gâàPvaöýû÷sùòe^ýu|ðA|||°±±¡Aƒ :”‹Â/ýŒ¯-Õ«Ú¸F¦rss3<Ç–,YR'YÉkÂcMdd$ÑÑÑàììL÷îÝ™3g6l 8¸ì»ùÒj:'o§ë+„B!„B!„ÂtU§nfxïÍ—¯.nÎtêÖŽ[þ¬°ü‡_ÿMÛ7GpæÄ9RSÒ±²²Â×Ï›ûºwâ€ÒSÇÏÕÓëõ|ðÖg|ö¿÷°³·ã³%ï±#<‚}»ÿ&ájZ­µƒš àF¸º»°è³,vަöùVGŸŠ³@Ï[øK¿ù™‚‚B6ò§¿/ß~ºÔ¨üs¯<އ—;Wb®òÉ»_¶'Æ_ãëÿÇs¯>ν÷ bë†ü+ªÜ6c/]!-57wW{f**•Š‹ç.¡P(hHÃ&þ|µp‰£cEE¢/ÄÐ<¤)Ö.N¬\vóeòŽ-<õò Ã8Ÿ=u¡ÒcÕtœM•”ÌÏÿûýg,½ûuç˰ò§ÕÄÅÆ£T*ñöõB©*?¸0)!™å߯bÂÔ‡¸÷¾AØ«íY÷Ûf²³²iÝ®%“¦?Œ••™Y,ýúg£º–«šÞ¿–ð¯–Mq·³eo|ÙEš¹93¹e0j++4:=ÿ;uÞ¨ü…Œ,sóðUÛ3«}Kl­TD^K!£ •Wì+ _Ч E:=;®$p&5ƒ´‚¬” |ÔöÜhÈÐ|&5Ý¢uKذ᳋­ ¼=Ù—PnÙË™Ùlçž@?F4iˆ£µ5.Ç‘]XD‹£›¢®dÑ„M—¯æï‹‡-…uåÇÓIÈÉÅF¥Â[m‡²‚à¤Ü<~=w‰ñ-‚ÚÈ{+룯]¤!ÔÕI-ƒ±R*È,,bééŠçUlVi…¸ÙÚ0³M TJÓ³P( ±³# øúøYCùä¼|~8}©¡ÍÞ$€ö^Ž%6+›ÔüBl”J|ìiçéÎGQ'ÑÞòåK]£ºRT¨å›÷öñÒ» Ù[¶÷¡eûò3˜ý;ž+Ñe¿¨q**‘޽nf ;­c§u0*s=1‡KgS,Ø{ÐëôÞK¯{‚pvµãå÷•9}$‰´ë¹åU¯‘€Æ.¸zØ3`d3Œ,4_ÚñCñf·W½ÏçëfÇËŸï) ¯Ñ1ëðúææ¾ê #)^øÅÞÁšßP¦\Q¡–UK™ÝžB!„B!„w‚’ÀÊŠ8991qâDúöí‹¿¿?îîîäææƒ›[ñ;;;;‹õ§k×®DEEU˜-öÂ…âÿwïî»;©©©oóæÍëÛí¦$¬$@yÈ!èt:öíÛGïÞ½iذ!W®\ÁƦxaÓ’Œª`Þ8—áž9s†œœœrëÞ®jc>çææríÚ5|}}-šÔÕÕ•gŸ}NÇüùó-vÜÚ¤¸ñn®$@=""‚={öЮ];>ùä£2ÕQÝû×Òí6nܘeË–áîîΙ3gxá…,ÞçÒ²²²hÑ¢®®®1zôhÆÇðáà dìØ±Þ\dV§Óñì³Ïòý÷ßãêêÊ{ï½Wá±K/LPª;V–¾Fæ=z4666ðÇÔJööö†gs ¥RiØW´["''Ç(m‰±š>}ºá³J¥"44”|‡~˜ÀÀ@–,YÂ!CÈËË+·~Mçäít}…B!„B!„B˜N”ë@rÒuš‡45ü~-ñz…e•J%­Ú¶ÀÎΖ®=;UXnïîì (³ýô‰³¼øø¼ñ΋xz{0èÞ~ º·_™r9Ù9†e{µ=ª ‚D+“—›V«5»Ï¥ÅÅÆ³uã.îÖÖí[²à«· û2Ò3g{ôéÂÀ{ûgL~m!ù¥²È¬Y¹{G ¢eëæ<÷ÊãL=³ÜUlu:=‹>û—æ<…‹›3/¾1ËhFz¦E”Íg€³'ÏÓ<¤):žÍk·Êdfd±}‡†¡×ë9WIp$ÔlœÍõÝ?âæîˆû‡ÐªM æ¼÷rµë.úì¼|<<¼?ýõ¢ß ^Fû³2³yyÖ\’¯• @³ÔXÕäþµk¥’ÑMÝÔx¥u­^Ï»‡Žq1ÃxÅj^ϼ¿ò^ïÎ8Z[ó\ ²§+ Zº»b§Rѵ’l¾û®±3.Ñbuo•œ—O³RÙ©¯UðR³ÄÂÈ“ø:ØÓÆÃ~¾ô ð­´ü­ýÙp)ŽáMhåîÊ;½*~nÝjñ‰sxÙÛqO }ý}éëoÜnVa³÷æz^~…ÇÐéõ,>qŽ;µÆÅÖ†:¯ŠŸYXd  ðÃé Ø¨”Œo„¿£šÇÛ†”{ì_Ï]âJöÍ/õXòÕ¥£û¯²`öNfÌkå_èiìVn€òŽõç¹gL |üÊ©UÌ¿QÍ3ŽWÇÊïŽÒ®›?ŽÎ¶å·ÛØ…£®šÝŽ_5ûæh–Ÿ2»½Šü¶äíºùUx­,u¾¥Õõõ]¹ø~.FAÑ¥iùü­?I¸R»_ØB!„B!„âvQ:Hªt+@pp0ßÿ=¾¾ÆÿÝÎÎÎ(Ó’AGÞÞÞ@qíÅ‹«,ïêêZi€òݬäzYYYaggGŸ>}ˆŠŠâ—_~¡wïÞ :”E‹aeeEaa¡Q0±9ãìéYüž"1ñöyQµ9ŸK‚ülmËŸ`Š™3gâìì̪U«8þ|Õn%s¬${aa!“'O6*S:S{n®eEµd»Mš4aÙ²eøøøpñâE¦L™b±~V%==ÈÈH"##Ù¾};K–,¡M›6<òÈ#|ÿý÷Fe;ưaØ1caaaøúúRTTD||<{öìaøðáøøøÔêÜ©ÉXÕ×Ü(OI†ùðððZ à^°`Q&ûÒ>ýôÓ2ÛFŽÉ©SÅï-=VZ­–cÇŽqìØ1öíÛÇ_|¿¿?cÇŽ-3¯nUÝ9y;]_!„B!„B!„¦“å:ðå‡ßáíã…_€/k~Ûȉ£§+,«×ëyùÉ9„ ìEëv-ñðtÃÕݽNOjJÎ]bÇæ¶mÚ…N§/÷QñÈÈi 5ˆ^ýºÜ<gW'Š ‹ÈÊÌæÒÅXï?‚J¥B«ÕòáWoÓ¦C«Ÿ×³Ó_áÐþ#ésiï¼ñq1W¹gX?|ü|(,(àÒ…X"vìC¡P ×ë±²²âɧ°qux¹cªÓéùê£%|úÝ»4òç¾ïå_×—Ûæºß7“‘žÉýŒ¤Y‹ ÈËËãÂÙKDl¿Ù®9Ìg€3'Ï3ò¡ØsÄxãUÉ׬ÜÈÀ¡aÄÅÆ““]õ‹™êŒ³%hµZÞ›û Û7ïfôØá´n×WwtZé™\KàôñsØ{¨ÜºoÏþ€ˆmû¸ï¡{iÙº9vv¶$&\cï®üü¿ßH« 뫥ƪ&÷¯¥l‰¹Š•RI/w\lmÈ((äHr*ËÎ\äÂ-ÁÉ%Ž]OcJønD/¼Ôv8ÛX“[¤!³°ˆÔüb²²ùû–k½^Ï÷&Ì߇PW<ììpµµAžÔü.fd±ãJÛ¯$ »eN˜S÷V_;ƒ·½ Ô¬ŽådJåÙ|s5žÞu€ûƒ18П@' ¸˜‘Å–˜«<Ù®%ÖÊŠøàðqŽ^OeD“†¹8¢¶²¢H§#£ ˆøœ\Î¥ep0©l0ºV¯çÿþ>JÄÕDî $ÄÍ;+‰9yìK¸Æ/g£I+(,§Ecë/]!£°û›6"ØÕGk+ò4Z.ddòçÕ$@éÓ‹Nœcû•FÒÑÛ/{{lTJ² ‹ˆÍÊ!29…ŒBã¶-yêZÔ_q<5vaC›Ò¾›?Án8¹Øbm£¢ OCʵ¢Ï¦p5&£Üúù¹EÌ}|c¦´£Mçxx; ²R“YHÚõ\λÆþ]1µÒ÷kñY¼>c#NmGh§8¹ØR¯!9>›“Q‰Œˆ­°îÑWöCµÚùkûeR’rèÖ¿1!í|ðösÄ^m¦HGFZ1çSÙ¿3†¿v\F_¿¿¦JNÈæõé¹ÿßÅcíâfGNv!É Ù?˜Àßµ0Îæ^ßšŒ3 øÊz lBؽMiÒܵƒ5YœŒL`ÍO'ˆ»t{d!B!„B!„¢.4mzsqׄ„Ãg…BÁ_|¯¯/ùùù,X°€-[¶œœŒ­­-|ûí·4hÐÀ¢ý) Õjµå.X|«’ìÀÿDiiÅ‹~ZYY†½½=áááDDDPPPÀ½÷ÞkP¾5K²9ã\ò¨ÈR§bq·¾­íùl©÷±¥=øàƒÜÿýÜÿý–›?>óçÏç‹/¾`áÂ…ïGM”Ì3WW× Ë”dªÖh4[\ÀRí6lØÐpÍ„ HNN¶Hkj÷îÝDEEÑ¡CÂÂÂÊ $MHH`îܹe¶{xx0eÊ"##k¥5«úš·òôô¤cÇŽlذ¡VÚ0WmŽÕæÍ›9yò$¡¡¡ôêÕ«ÊåÒ*›“·ËõB!„B!„Bažt€ò¼…ßÔI;±—ã˜:öÉj•ÕëõDþ}ŒÈ¿™Õf~^>«–¯gÕòòr-ÉR}.QTXÄ’¯–±ä«e–Ñh4L¸oz•ÇŠ:xŒ>m‡U«ÝˆíûˆØ¾¯Ze‡ö|¨ÒýÕé›)Öþ¶‰µ¿m*w_MΪ7Î%,q¾‡ö1Z×Ôîí{Ù½}oêXj¬jrÿZJLV6ËÎD׸^Rn_;S£:z *9…¨ä²Y¨k³î­®dåðè¶š]c­^ÏÊó—Yyþr™}O¶kYi]=Åà[bLËêq5‰ˆ«I&Õ-ñçÕ$þ¬á1¢3²ø(êdµË[òÕ‡Â| ÛVŸeÛê³U.GFZ>K?:Píòá«Î¾ªf÷PE’®fñÅÛ{,r¬Êœ;‘̹5ÿ’Ë•Ké•è¾1scŽ—œ˜Í7ïÔìž<°ê¿?•©éõ5—^û¶]bß¶KuÖ¦B!„B!„·«=zÅnqqq†í­Zµ"88€Ù³g³víZþ¢¢"N:Evvv•Ç×ét†ÏÕÉL{íÚ5ZµjÅÆyæ™gª}ÿD%Ê666 <€mÛ¶‘››ËÞ½{éß¿?(•JRRŒß/˜3Î%uýýý-s"¢V« Ÿ ŒöYj>×%Kfc®+%Ùzñóó#>>¾L™-Zpùòe4ÍmÓ®££#‹/ÆÇÇ‡ØØØz N.‘@‡Œ2|WÇĉQ*•hµZÂÃÃ-Þ/Sƪ¾æÆ­ŒR©$??Ÿ={jïýßOÝNj{¬üüüÈÌ̬qÝŠæäír}…B!„B!„B˜GYßB!„B!„B!„Bqû³µµeÁ‚8::RPPÀ¢E‹Œö_¿~Ýð¹mÛ¶&·S:‹bŸ>}ª,¿jÕ*4 îîîÌ™3•JerÛÓ§O端¾böìÙ¬^½WWW“u;*¹F}úôÁÅÅ…­[·ömÛ¶ ­Vk@/}=Á¼q^½z5Z­•JÅ[o½eÖ5ª©   r3q«T*ÆgòÌÊÊ2Úo©ù,*wýúuCðá´iÓptt4Ú?eÊ<<<Œ²X—§&÷¯¹í¶k×ÎÌÿâ‹/Siß,Ñçª 4ˆ–-[°ÿþjÕéÓ§Ë–-ÃÞÞžëׯ3oÞ<“Û¯ˆ©ceɹa*¥RIÇŽˆŒŒ¬•6,¡6ǪS§N´k×(^l¢&*›“·ÃõB!„B!„Ba>É ,„Bˆj™Ñ¦ÿnl´mRøŸdÕS„¸ûMkݜጶ¹ØÚÔSo„B!„B!Ä?‰R©$ €‚‚\]]éÔ©S§N¥iÓ¦¼úê«$&&Õ9}ú4W¯^Åßߟ×_{{{þúë/RSS±µµÅÝÝ{{û*ÛŽŽŽ&%%^~ùeT*gÏžŠ3Þñî»ïÊ'&&òùçŸóÌ3Ï0vìXºwïβe˸xñ"ÉÉÉØÚÚ@—.]˜3gZ­¶Â¶K‚èÜÜÜèÕ«6l¨ÑØÝÎJ²–¶hÑÀ(@9--ÇÓµkW€2YŽÍçøøx¾ýö[{ì1 ÄŠ+Xºt)—/_F¥RÑ AƒZ Z¶±±á§Ÿ~"99™¥K—rôèQôz=ÁÁÁ<ùä“´jÕ €ü±L]KÍç'''C0¸“““a»Z­ÆÙÙFCnn®Q½… Ò£Güüüøé§ŸøøãIII¡_¿~Ìš5 €íÛ·Uiû5½ÍiwúôéDEEqøðaÃùÝJ§Ó‘m‘>+ Ö¯_Ï®]»8tèIIIh4¼½½éÝ»7“&MгŸÿòË/eê«Õj\\\ð÷÷§M›6 6Ì|›’’ÂÌ™3MÎ]sÆÊܹaêœ,dœ=räHuO¹^˜3VŸ~ú))))ìß¿Ÿ¸¸8ŠŠŠðôô$,,ŒI“&¡T*ÉÊÊâçŸ6ªgԽ/„B!„B!„¢þH€òmäÏcë¥Ý>m‡ÕK»B!î,ÖV8XÿÓ¡¼Œ¦ú9b’ÅŽu'öC}wAܬ­p³³­ïn!„B!„Bˆ vïÞ]f{nn.¯½ökÖ¬)³O§ÓñüóÏóÝwßáììÌ[o½eRÛ:Ž… 2oÞ<ÜÜÜÊdôLKK3 PøüóϱµµeÆŒ2{öìrýÝwßqéÒ¥ ÛNLL$44Ôð{élÎwƒäädC&㤤$Ž;f´ëÖ­†å„„„2õÍç>úwwwÆGûöíùøã-tVkݺ5øøø°`Á‚rˬ^½ºÜÀ9KÍç’}ûö¡V«Ël_¸p¡áóÎ;ùÏþc´ÿèÑ£¼ùæ›Ì;—6mÚðÝwßí¿pá/½ôR•í×ôþ5§Ý.]ºÐ¡C‡Jƒ'¯_¿N·nÝ,Òç¦M›BHHH¥Ç›9s&™™™eö½øâ‹†€Ñz½žmÛ¶1wÒáf— IDATîÜ2‹NXŠ9ceîÜ0uN–(Y”09Kv]1u¬T*ýû÷G­V—™%ÒÒÒxòÉ'2˃ùsÒR÷¾B!„B!„Bˆú#Ê· âŸmØš­UÕ2hÕ–úîÂ]eüæ²_@«•v$`Wˆ2>Ž:ÅÇQ§ê»B!„B!„âäìÙ³ìÛ·   \]]±²²"--óçÏó矲bÅ ÒÓÓ+¬ðàA†ÊäÉ“éÑ£¾¾¾¸ºº’Mzz:ÉÉÉ\¼x‘ˆˆˆJû±|ùrRSS™4i-[¶ÄÉɉÜÜ\NŸ>Mxx8 …½^o(¯×ëY°`ëÖ­c„ tïÞ `kkKff&/^dÿþý¤¥¥UÚî»ï¾Kƒ  ä—_~¹ë²6jµZ®^½J`` Û·o7C€ððp^}õU ü@IsÆY«ÕòÊ+¯°aÃ&L˜@‡ððð@«Õ’––Fll,G­rnÔDdd$ƒ bâĉ„……áïï­­-iii?~œ•+W^a}KÍgQµeË–qîÜ9¦M›FÇŽQ«Õ\½z• 6ðí·ßV˜á¶4Sî_SÛuuu­ñ9šÛç+W®ðì³ÏF›6mðóóÃÆÆ†ÌÌLÎ;ÇŽ;X±bYYYåÖÏÊÊ"33“ŒŒ ¢££9tè›7o&::Ú"çRsÇÊsÃTþþþ@ñ‚õ±`ŨQ£jTÞ”±Òét<ûì³ôë×¶mÛˆZ­&++‹èèhvïÞÍÏ?ÿLjjj™ºæÎISû,„B!„B!„âö¡¸ñcdîܹГ'O*’““YYYŠ   Err²ÒÆÆF•““£ÔétÖjµÚº¨¨È°S*•z½ÞI¯×»EDD¬9tèáX;w®ÃÓ©ÁÁÁõÝ!„B!„B!„B!„¨ÐòåË Ÿ;w*õ>·Ì›c!„B!„B!„B!„w¤Òkßx6J¡P¤)Š,N—ä[[[æææ)•Ê"]aa¡ÖËËK­wrrÒ{yyéCCCõsçÎÕßÚ„²nÎD!„B!„B!„B!„B!„B!„B!„Bq7e!„B!„B!„B!„B!„B!„B!„B!DµI€²&ðòö [¯N4 iZß]¹ã¹¸:Ó±k[7 ¬ï®!j‘BQß=Q;Úàèl[ßÝøÇ{A!„B!„B!„B!„B!„B!„w«úî€w¢Wƒ£ß|²”óg.Öwwj¤eëæÌyïeìÕv¼;çþŠø»^ûóǶ±¶±æ³÷¿åòÅØzí‹¢|?í‹¿£ºÜ}÷­ÛNFAa¥õƒB<˜ú\w¾š¿‡«—3j£‹õêáã±µ+ÿŸT_¿³—ˆM·ßß 7O5Ó^êAà W<¼Xôþ_ì\¾ÆÇ4ª9NmN§gù7‘Dl®ù¹¶íêGÿÍhê…‹›2RóIŒËäèxvo¼@A¾¦ÆÇ½™r/<Ó¡cš6*wß¼¿oÉ. !„B!„B!„B!„B!„B!„BT‹dP§T*ðoØ¥òÎIx'öÙTSŸˆÃ¸{¸ñÄsÖww„øGR*ø9ªQÞa©Tó5Z2 ‹Œ~ôz}¥uTVJ¦¿Ü“ æ/ÁÐ[JÙÛ€£“ í»ûãáí`ò1<¼ø÷³Ýpv³ÃÕÞi/õÀÙÕ®Fǘòl7þ»`Ýú5ÂÝKÊJ‰ÚÁ† éÐ#€)ÏtÅÙ­fǼ]™z/ä•wßÕ~w…B!„B!„B!„B!„B!„B!*u×gPV*´lÑ”¶­šà‡ƒƒ=†ë)éœ9;¿_PPßݼktíÙ‰y¿†-ƒ»?@^n^}w©JwbŸÍ¡Õj Ÿ5¥> !êFWOÞîÙ;•Š¡«ÃÉÓÜ9÷á—Çΰ&ºf™Î»ô $°©Ö6*&=Õ…ö=üùæ}¤]Ï­n0ôÁ–4 õ¿± ×â³Xøê®Zk+?·ÈðY¡P`c«ªµ¶n'nžö(J-졲RâêaOfz~µê÷ؘÁcZTZä„ì2Ûëòú–Öc`cŒlN£`7lí¬H»žË±¿ãYûó ®'æTZ×Ô{á›ãgùæøY£m«G ÀÍÎÖüB!„B!„B!„B!„B!„B!„0Ñ] <þÁ´ld´MecƒoüxÓ±m+¾ýa™Y••ˆêQ;Øcw‡Ì܉}6ÇâÏÄËÇ;;[>{ÿÛúîŽÿ8jk+ìTÿŒV€ý;/s-!‹ÑÿjC§Þ(ж‹ïkÎoKŽÔZ»CÁÇß €ô”Ú]xâ±Ñ+ Ÿ»óÎ’µÚÞí"öbײñnà@|LWc2ª]¿ÿðfF¿ÿüåaöl=¸{;Ð0È{µu¹uëòú(” ž|½=66ÚîíçÄ Ñ-è=¤)ÎÞÁÉÈÄ Q_÷‚B!„B!„B!„B!„B!„B!Dm¸ë”<‹§‡‘GO{5¼ü\œèЦmC›ãæê̽Y¹fK}wUˆ:qál4ŽUßÝBüƒDŸIaá«»hØÄ•QÿjC@WÖüx¼¾»%ÌTX eÎÌôÞ NÇÎõÐjtÕ®äjø|**‘õËO~OOÍ#úÌu‹ö×÷On[&8¹4;{+ž›×Ÿç'¬&=µâ€i¹„B!„B!„B!„B!„B!„Bq·¸ë”Ÿ:ÇñSçЗږtí:ç.Æ R) ¦e³  ë !„Â2®\Jçó·þD¥R Õê«®ð¤P*°²R ×ëÑU?à·>d¤å³æ'Ólm ŸS’r,Õ¥j©É8;»Ú1r|kÃï—Î¥òÝ‚¿HIÊ¡×à Æ?Ö ¥R½ƒ5÷MlÍŸ¬²}¹„B!„B!„B!„B!„B!„Bq§»ë”+ ùˆ‰K 4$+k+ z}íˆúñæÿÅ¿aþøuß|²´Ê:öj{½ûw§a#Ôöäæä‘‘žI|\"‘eÙ’•Ö·µµaа~„ èI³–MqusASTDFzÎE³o÷߬û}³EÎ/(¸߯úªÌöðý¿—ÙvøÀž™öJ¹ÇiÙºMEûÎmpus!+3‹ãQ§XþÃ*N9]n÷!´mM›7ÁÓË''TJ%×’®sð¯(~þßo$\M¬µ>÷êÛÞý»Ø8;;[®_Oåà¾H~\ü+‰ñ×Ê­cŠQ ã…ןäJÌUÆœViÙÎÝÛóÑ·ó¹~-…1ƒþÀ؉£™õÒô2e/]ŒaҘǪlßÔq.aeeÅãG2xÄùƒBñÿìÝwxTUâÆñïÌd’Iï=$$¤ÑATš€«¨Xן]víº.ꪻ«®»kY×¶®[,»öŽ®EŠ¢  Té Bzïm&3¿?C†2IÞÏóø<3÷žsϹç̽3὇ì½ûYòÙr0ŽØþäi8ïâ³Hš‚ÅâEA~«V¬áíW> ¼¬Â¥lOÇêpGsý­Ù‰BR ?>¼=fê¬6ªš¬äÕÖ±¾¨”·vîq{݃âü|ùÃØQÄúùðÑîl^ز³Kc6*<„ó’âL—Í;åMdWײµ´œ%ÙyäÕÔ9Ë{šŒ,=&Z³‘eûóÛó‹ fb6ùǦíÌÏÈj·ÝI±‘œ—OZp “‰‚ºzVçñÎÎ=”76µ)ŸàÏ+3Nk³}Ñœm¶­+*厕kÛmwpH %dTx^žÔ4Yù±´œwwe±¥´¼Ý:àž9r§®2=ÌF&LOdÌÄ$¦†âä…Á` ª¼¢üj6¯ÍãËÔT5ðò’Ëð²´ýi3âÔÞZyU›í¯üm-Kþ·Ãe[x´#ÇÆ2lL± …ù`±x`ò0ÒPo£´¨–ìÌrÞ}qEyÕGqöqJ ÷<> €Ìm%~fêmTW4Pœ_˶ ,þ`; õß?¦Ÿ—Ê9— %4Ò—úZ+»·—ðù{ÛÙ²®í5ÒÑ8<÷è*V~¾»Ãv:ª;iÖ &ÍÔfû7}NæÖâNëvg~uº1ΧN‰ÇÓË€µ©™'û%eÅ-÷•…ïn#,—Y`üÔ¼þpØ»öW8YDDDDDDDDDDDDDDDDDDDDDDDŽUÇ}@¹3 qÑäåõZ8à–»~Iêàd®øÅ%|³ü;¶nn?0À?_yœ„¤.Ûýüðð#.>“ÉØa@yÈð4üë=DÇF¹l7›=ðöñ&*&‚ºÚz·”Ýá†Û¯áŠ_\â²-$4˜)Ó'2yÚž~äß|øî§mêÝz×/ñõóm³=v@4±¢9ó¬)Ì»þ>¶w1ìØ]ÃF vyɹýŒi³&sÛÜ{ÉØÑqH«;Š‹J ÷Üö K€ÝÝcÕÝë·'n‘ޝÙõ¶ìkö 58€ÔàΔÀ½«Ö±³¼²Ýúã¢ÃI?ì¼Ã½-œÍ”Ø(_·……Y9mêxšùÇéãHðsÙîïiÆßÓL¬ŸFƒ¡ÝkOê~î©Á\žžÄ7y…l+ë8Pm2˜7z(çvŸôÀD”7Q>ÞœF­ÕÖaÈøh˜ ~{ÊÎŒqÙïïK¼"g Œã·«Öu>Z×Kãòô$—mÁ/&ÇF1)6Š¿mØÊG»³ÛÔs×õµÔaáÜúÀd¢ÚÞ{¢| ‹òeð¨(V|–é¶6ϘÂuwïp¿Åۃ؄@byçùõnk·'BÂ}øýßf= Àe»¯Ÿ'¾~žDÅ0ü”h–}² : ('¦…:_›ƒLŒÇèñq¼ôäw|ññ®^ëÿ±`ðèC¿§Ö}³ßN>è‹w9Ê!ÞÄÄ›Õþ}ZDDDDDDDDDDDDDDDDDDDDDDDäxq”-^^DE„1þ”‘ MOÆjµñù_÷j›Qá.ï#£Ã; 8^}Ãÿ‘4k“•Ÿ}o¿ùžŠ²JÌžf"£ÂI’L]m}»u¥&òô àãë½ÙÎ’Ï–óÍŠïÈËÉÇ`0Ȱ‘én XîÝÍ´Sæ0yêxþðØ=Ìž|)õõ .eíÍö6õ/Ÿ{±3œ¼~íf^|öUr÷ç3 !–›æÍeبÁÜ~ï lÙ´ŒíèV|±ŠOæ/¤¼¬oFœ4”kn¼ _?_î{äN®8ï—zOû|ÐÆ~äÃ÷>#?§‡ÃÁ˜±£¸ö¦Ëñõóå·šÇÜKnít캪¸°?_Ìf¬¬¢¸†nßë>šhuÈn¿†K®˜Óí~twœîþÃíÎpòg.aÑ‚eÔÖÔ’’>ˆ‹/?ä´¤öšàúÛ¯v†“¿ø| >XDuU ÃFaîÍ—ÈcÏ>È5ÝBñóíéX®»×¯;¬È)àýŒ,ª­V|<<ÎÏS ±xñØi'ó‹¥ßPÚÐØ¦ÞË[3°9äÕÖQkµáa0ÈÃÓˆ÷÷cÞè¡|“WHU“Õ¥ÞÕƒ“IðÃj·óŸ-»ø® ˜ŠÆ&ÌF#>Ò‚©ë`{R·µ‹ËûHïNÊs‡¦8ÃÉÛÊ*xw×^²«k1>Þ<8n^&ÓÛí®ë†¥:ÃÉËöç±`OÕV+ÃBƒ¸vH A^ž<:q s—~Cq«{IVU5g~¸€I1‘<0vç|ò ÍÍ.mØÛy`ÆeiIÎpò†âR^ܲ‹¼š:âü}¹qxÃBƒùÕ¨!l)­ ³¢Ê¥®»æ¨/% ç÷ÏÌÀlî|³2ʨª84Î u‡>Ûž^ÎÚívÖ¦æÃ«c³¹ÞßÍž]ûÌÔT5R\PÓ¥²½mîãÚ„“WV\ç\eº»®¸õÖ¯Îq å¶gƒÁà\]¸+Z×m½rs³›µí÷­½Õ Ã=ߣ7ðЃvþXÀU¿:…”¡á¼ò·µìÞ^BMU#~^Ä&) ,"""""""""""""""""""""""ǽ& l±xqÿ7ºl+,*aþ'KÈ/,îÕ¶—/þšÔôATVT±nͦNË5€%Ÿ-çíW?pÙW\X–MÛÛ«À]÷ߊ¯7 ÜuãýlZ¿¥M™µ«×u÷:åp8hjlÀf;jj²:·w$<"”¹7]ÀÊe«¹ÿÎG°Û[EåeÌ»á÷¼½àEÂ"Bùù•ðÐïŸh÷8;·fðý·œï7oØJuu wÝw+ñã:"ÝeÜzÒçÖÖ¬ZÇ—‹V:ßïØšAmMwÞw )éI$§%‘é†UI‹ Z>£ƒÐð òZR7Í›ËðQCxîo/³yÃVÂ#Â(.Mm ë~›_ÄïW¯§¹U¨7³²›ÝA72“]éãÍÏSø<+‡¿üðã¡6+ªØPTÆÏœH€§™k†$óøºC÷_ÐtàºkÝW«ÝîÜÞ‘0o ×IàëÜBønƒ3Ä\ÞØÄ_Ï›3§æíÅÏSòð÷›]ê»kŽúŠÑhà–ûNs 'gl-fé‡;ÉÊ(£¡ÞŠ··™ƒ‚Û„Roš3ßùúé·Ï'2Ö€-?äó—»¾èv_¶¬ËgïŽRª«ijlÆâíADŒ?6kÛ0l0{š5.Öù~ûÆB^üë·”Öàáa$26€!£#ñõ÷:â±–šÁÒwâpÀœ«†3öô<½LŒ==Ï纷·ç„ä}iv—ûܺî«Ë.wÎóª¥{yî‘U]®ëŽùíªÀoçëâ‚ÒFD0뢖o\~ËþtëbJ kå€`K»Ç9žœ0eÐl·c2›"ÂC™2ád>ülM]¥v×ÿ}ýûr‰‰‹bÅÒUT¶ºåá*Ê[VÝ2"À €#–?(9-ɹRí+ϽÕn8ù§æÌ³ÏÀÓË«ÕÆSüËN>¨¡¾Þ^À ·_ÃØÓÆtëØK>]ﻣÑ@êàA»ÝiÙ¢¯¸ó¾[Hšâ–€reEµ5uøúùJA^F£‘s.œ…€“§Mp†nÃÂCÈ9,„Ú[:çi³¦ÐÔØÄ«Ï¿Ý¦nss3´³Z,ÀŒ³§b4±Ùl¼ôï7Úìß·g?‹,cö3™~Öé<ùÐ?±Ùln«î^¿½eSI ÷æpNÒfÄÇò÷Û°ÙÛ»Ãí¯©¥°®h_ob|}Úì¯8^D€§¹Í ËéIÝÖÞܱ‡œê:bü¼Y‘S@e' ˜‹‡Ñ€ÝáàÉõ[]¿½iFB Fƒ›ÝÁËÛ2ÛìßW]Ãâ}¹ÌNÀôøžÞ°µËsÔ™3ãcð4±Úí<½ak›–lÍüow×KãÔÃVü÷ÍQ_=!Î<X³|ÿãJ‡åþ½½¬~ýïß÷I;GËäaÄh48ß7Ô[)ί¦¹ÙÍjg_fû2˺t¬Ìm%de´”}á±Õœ‹··…ðÐ`F KçäÑÃ>$•à@^xu>¶æÞ[ñ«/:_°µùo|Ì©Æ8(·¼ÈÇï-dáÇK8}òpçëÏ?^zÔ}íK£Æ `Ûæ”·¢ÊÚ @Pp AÁÎ÷‘Ô×ÕSZRFxD(AÁîépTWÕP^VApH¡°îŸ[@rZQÑlÙ¸a#ãàÀ¸ÓNæO¼@dL¹ûû& ÜÙ8§ I`÷®½ÔÕÖwë¸ÃFµ„í÷ddQ˜ßþ*竾ZÃì fb±x‘’žÄö-»÷Uw®ßÞôu^!ç$ ÀÛÃÄ Àvv-øš=8Pc£Â‰ô±äåI½­™Üš:<[Bt^¦¶Ë ¿Ÿ‘Å)‘a$øñæ¬)|²'›Ï³rÉ©©=bŸzR÷p_åt©ÜÁw”WR\ßÐívŽÖ°Ð–v÷TVSX×þçùÛübf'Àb2‘ÀŽ.Þ¯:3òÀùn+« ´¡±Ý2YU5yyäåé %ƒ{ç¨/ åòþ½ÿnhN>ž<ùÆ¢ãÚÝ—<$Œ·V^å²íÙ?®äÛeY4ÔYÙ—YNBrËgdôø8žxcË?Íà»åû(Ê«>ª>Õ×Z)Ê­qö+(´íƒ Ž5=çÖ [×ç³ymƒ‡ñ¿W6Ø~¨L=3ADDDDDDDDDDDDDDDDDDDDDDD¤_0åƒêëÈÎÉ';'Ÿ{¹úÒóˆŽä”“†óí÷û»{¬]½ŽßÏû3wÝw+¡á!\yÝϹòºŸ³eãvÞ{ã#¾úbU›•†Â"ZV8¬®ª¡¬ô§»âck¼#Ç ãëÍ X> пËehYÀÓËóè:x”jkê ÂbñrÛ1s÷ç·„nc"˜4uü¶jIH@tlù¹ÄĶ„ûr²óÝÖö‘t4Î!¡A–tû˜?…“[ö*v( þS«žÈ¯­s¾óöbgù¡}üxbÒ)„{[\êx™Lµš—Ö!ºƒÖ–pÿ·¸ã¤¡„Z¼¸"}W¤bKi9ó3²X™[ØfÕ^wÔ=Z¡®«ün†ÞÝÕna}Çí´ .‡z{Ay‡E»ÑnËœŽ á«‹~vÄòþžf—€rÌQO„Fú:_[­Íä]ÈöDñ÷¿â¿Ï$0Ä€ÈX.½á$.½á$vn.bÁÛ[X¿*§ÛÇ­«;ôòôjû`ƒIC½Õ9š›üå®/\Êxû˜[•·õiÿDDDDDDDDDDDDDDDDDDDDDDDDúà Pnm×î,²só‰&%)á'Pøfùw¬ùæ¦ÍšÂyŸÅ°QƒÿíÛ³ŸïyŒÌ{\+:~BA³#1ŒØ›í4wak³§ùˆeZ믱8 7´—=Jûöî êÀª¿SΜHEy%o½ô>7ßù &1Žç/$84ˆ††F ó ÝÖö‘t4Î7Û¬Ýk| »:‡­Ëý”Ǫ'ÌF£óõÁñiy 7špo Íͼ¸e+s )khÄÓd$Æ×‡G&Œ!ÂÇÒÎQ[|“WÈš‚b¦ˆæÜ¤ vþ·¯ª†?­ÙHfeûAÑžÔ=ÏݳÕxtUëSw¯Ogé.ÞVÜuû1hØîpÐÜ…ƒ¶7.}=Gîbk²׫'CK¸®öPØd2âeiùyf·;h¨·º”·Y]P’Ÿ]Åoç~ʹ—cÊYÉxûúžLAÚˆ©¬_ÃÓ÷­ ÙÖöá&q´*êÎï²þÒ“q®,k ¨åþíßîñâüZ•ïÛ‡'ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆô‡:  PUU±àëãÝß]iÃjµ±hÁ2-XFTL$³/˜Áϯ<Ÿ„¤üý¿áªóo¢¤¸ÔY¾¬¤e©Nÿ?ƒ¨¬¨êó>·’u%ÏTR\JJz_.YÉïùk/ö¬cÝísÙ›¹€èØ(† O#:&’ÿ½ó)˯ä¦;æ2eúD~X³ƒÁÀ¾=û±wê³Hžµ¹ö†ƒóÙ+u#£#œ¯ËJ-Uëαú) kµ:rYC£óuJPZÂq]·…/²óœû¬v;UÔÚŽ·Úí,Þ—Ëâ}¹DùzsöÀ8.II$!À¿MË5K¿¦¤¾Ñíu»«¬±ðï4pݫݎÝáÀh0àkîÞW`IC#É@”oÇßQ­¾KZÏQk­W+îÊ5x°Ýå9ùüiͦ.÷÷p}9G=Q^z(Üéík&*.€‚œîŸ¹<Ü ïí‡ßOŒÆÎ¿ÿú….ïGŽåžÇ§°gG)ܸ°½j.*ÊêyíÙïyû¹õ ?5š±§äÔ)ñÎîIâøÙŃùôí­Ý9•.inv =é|Ý¥»óÛ“qÎͪ`@Ré##Xôþv—ýq‰Aøú{¶*_y䉈ˆˆˆˆˆˆˆˆˆˆˆª rî IDATˆˆˆˆˆˆˆˆˆˆˆ㺿üäq&4$€ºú†^mgò´ üßÕÓý &@A^!ÿùÇë\ÙŸ÷—ì½û±ÙlDÆDræY§“»?Ÿ-›ZVq\òÙr —Ͻ€=Yëà9‡E„Ük}^òÙ—477c2™¸ã¾[º5¿­ëνùŠ6û%0óœ©Ê.ÇÖj…`wŽUw¯_wð0´½5Gùz3#!€ÕyE44 ç•·Z©7=8°ûíu²âéÞªª›Z—íj¦n¦uÝ5G}凯÷SÑjåqSrß33?m 1ñ„„û= €Á£"™}éPLíÿ”)-¬u¾ŽÄœ+‡@x´ÉCÃùùõ£ILëÞƒº¢´¸Ž†úC÷£ésR9.–°H_R††sé 'æž@­ÉÃÈ??¸ˆ_þf<£'ÄæƒÙlÂâíAp¸6Û¡0|o­l\YVO]«PöÔsR96–ð(?ÒGDðn<ßÖúr~¿_™ÕÚrÏ5›MÜõèTR‡GéËyW gúy©Î²ß-ËÂÑÁµ/"""""""""""""""""""""""r<9òÒÇ0pëu—³33‹}û󨮩¡¹ÙŽ¿Ÿ/ÉIñŒ?yµµu¬Ýðc¯õcÚϦ8_0fìH¾\üu‡åŸ|î!l6+Ë­dÇ–]”•VàááATLç^ü3BB[¥Û~ÜåRÏápðøŸžåÙ—ÃâmáÙ—ãË%+YýÕZòs innÆÇׇ¤ä‚ByñÙ×Ü~®Ù{÷S^VApH7ýz.&“‰Ý»öb0˜Ï€ÄXþýÔKÎòÅ…%¼úÂ;üâæ+˜}ÁLFŸ2‚ÞûŒ}{s(+)ÃÓË“è˜HFŽÆSÿ‹æV¡Ìþês±ZmìÉÜGjú ÌþÌócç¾/¯äW÷ÜàülìÜ–Ùé±6­Û´¬¶ýðS÷ñÊóoÑØØÄ€„X¢c£xáﯸ¥Ï…ùżõò\ùËK8íôqüëµ'˜ÿÆGädça4‰ˆ Çhj?\X˜_Ì;¯þËç^ÌÏÎŽ·7 Þ_DMu ÃFæªë/ÅÃêÊj^yî-—ºî«î^¿îpåàA„X¼X•WHÕFJpWNÆÇÛÝÁËÛ2\ÊgVVSPWO”7·Œ—‡‰õE¥T66ái2äé‰w'áð'&‚ÕîàËýùì(«¤¼±£HoÎMŠw®Ð¼ã@°×]u[›6 Úù:ÐË“1a,ÏÉo·lVU K³ó83>†Ù‰ð3›ù,+‡š&+IþÌO'zø<+—ɱQ„Z¼xzò©¼¾}7ùµuxšLDøX0v.¬«çÝ]{¹,-‰Y ±x{˜øtÏ~j¬6††qÕàd<Œªš¬¼²½ãÏUvu-åM{yrãð4LF»+ª1``€ü|yîÇÎòÅõ ¼¶=“¹CS8;1ŽQá!|¼'›ìêÊšð4‰òõfdXOoØJ³Ã5é®9ê+Ö¦fžl5wÿeªsuàÁ£"<ªýÌ7­Ícÿžò6Û·m(उ‡V ¾äºÑ\rÝh—2%µìÝYêÆÞƒÃî`Ý7ÙL<3 €€ ÷üušK™í )/©k¯z·Ä $(Ô›©ç¤0õœ¶¡ùÖ~ü!¯ÇíµÇá€ußä0iæó ¶pÏã®ç»ÍMçërÌ>œßŠÒzÍßÎ9—  ~P0þsV›rõµV>ysKÛ9×å°°¢"ˆŠèx…ʪêÞ˜ÿ) ­V u·âÂRÓ9ß”tXÖh42dD‹§NÓa¹U_­aù’•m¶oß²“ßÜü<úÂ"B™þ³Ó™þ³ÓÛ”«­©u”½}¼1uíL}]C›À°ÝîàÅg_ãî?üŠÀà~óÀm.û++ªÚ„}_}þm<==¹|îÅĈæ–;Ùn{ï¼ú?öïËív?ähú|4Ü1Î;·fš>»ÝÁ¢O¾p–©ª¬få²ÕL›5‡ÃÁ®N‘9Ùy,]¸‚3Ï:a£óÄ¿ÿìÜWYQå¶€2Àÿù:Á!̾`&C†§ñ‡ÇîérÝŸ}ðÈ0fœ}§OŸÈéÓ'ºì¯®ªážÛ¤¸¨mÍ]cÕë×]ÌF#sÅ3gP¼Ëöf‡ƒ¿ü°™ÝVQ?ÈîpððÚM†)±QL‰um·ºÉÊoW­£¤¾¡ÃcØþ³e¿3Œ@/Oî:i˜Ëþª&«K@àµí™xšŒ\––D¬Ÿ7Ho÷ØïîÚËþšC+˺sŽúÒ¦ïryâ·Ë¹á·²tZ6!9¸Ý€ò—ŸfpæùiDÆúwX76¡û+ŽwÅüÿnbäØXü¼Úow` ›Öôüû,¦‹ýß±©ÏÞÙÖãö:òþK96¦Ã¹r×ù¶Ö×óûÞ6›äŠn­±ÁÆS¿_NEYç÷.‘ãÅqP.¯¨ä½‘2(ØèH‚ü1y˜hhh¤°¸”{Y·q+ ½Nø×“ÿ%"2œ˜¸(>~![6mï°¬Ãáàž[ÿÀäi6r0¡aÁ…â°;(+-'s×^¾\´’/>_Ýîh÷¾ßÌÿsg7‰§%95‰€ ¬MVª«jØ»;›ußmÄd2ÑÜÜÌ“ÿþ3ÃGéöyÍ»þwüðÝÆ6Û|°ˆÊŠ*.ø¿sHIKÂÏÏ—úúz2wîeå²Õ ­Vøt8¼ð÷WøâóœÉÙŒ>u‘axzyRSU˾½ûYÿýf*+ªºÝÇ®ênŸ†;ÆyÇÖ Î¹pk¾ùž‚¼"—rÏ_È´Y“ÉÉΣ¶æÈ+U>úÀÓäìËå̳N'2&’¦ÆFöff³òK÷œïAÍÍÍ<öà3,[ôs.9›a#ˆ½ÙNeE¹9ùlÿqkVýÐnÝ?ÿöqV~±šs/þƒ‡¥b±xQ_Īkxëå÷)ï`ÕWwUw®_wY¼/£‘Ñá!zyRÙØÄÆâ2Þܱ›ÌÃÂÉm.)çš%ßpar£ÃC ÷±ài¦Îj£ªÉJYC#ûªkX{XÀÚáppï7ë˜ÉÐÐ B-‚¼9ÿ@/Ìž&ëm”Õ²gg)¹û*Û­ßPgåÁ›?çükF2üähB#|1y¨­j¢¼¤Ž›‹ønž^é{Q^5÷ß°‹æŽdè˜hü½hl°QœWÃÖ |¿2»Ãº›ÖärÙä׺Ôη˲(-¬eìIIDŒÞ>flV;•åõìË(ã»åûøöË,üfp‡âüî¿~!\Û2ÖÁjkš(ίáÇïóYÛ ãÜÓùíÎ84Ûì<ù»/™4s§ŸÌ€¤`<-&ÊKêÙ¼&—OÞÚBIAí‘$"""""""""""""""""""""""rœ0øÏŃ>hغu«¡¸¸ØP]]mHJJ2===MµµµF»Ýnöññ1[­VOÀb4}‡¿Ãá^¹råÇ?üp(hxòÉ'÷áéô¿äääþîB·ýëÕ'ÜP–öiœåHžw&¾f^ز“7wìéïîÓ¾¸`&f£‘lÚÎüŒ¬þîÎ1ï­YSˆõóá©õ[ùxOÇáZéÍžJ°Å‹‡×nbIv^wGDDDDDDDDŽAï¼óŽóõÉcZý=·Í_ŽEDDDDDDDDDDDDDä˜Ôz­» žîOÑÑ\ ¿=„ó%´»ïáµ›X’çÎ.Šˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆt‰VP·3 ĈÆhì»%çÞ|±¢ æ–;~Ñgí‹4V"ýÏh0ãçƒñ[JµÁÖLU“Õå?‡ÃÑi“‡‘ëï™@Rz(üg6³.¬düü=5.–Ðߣ>Fh„/×ÎK@°… Po®»{<A–nãšyc¹÷‰éŒ==pLF||=‰Àèñq\óëS îÞ1ªŽöZ¨oïºëýˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆtê„XA9"<”±' ')!Žàà@ìv;eå•ìÌÜ˪5¨«oèï.7N0†‡ÿv‹3Æ]H}]}Ÿ´ÛÜÜì|mkõZÚÒX‰ô¯S#Ãøó„“°˜LÌúh õ¶cç:ü׿|¼§{+Ÿ2)žøAÁ˜=M\õ«S5>–ç]MyI]ot€Y &eh8±)Ê«æ©ß¯èµ¶ê¬Î׃O/S¯µõSæ¡ÕÃHLF‚B½©ªèÚïªñÓ2ãü´NËT–ÕSœ_Óf{_Î/€§ÅƒI3’8uJñƒ‚ð ð¢¡ÁFÞ¾JÖ¯Îá‹vR[ÝùJâG{-<ÿãNžÿq§Ë¶fO%ØâÕó9JÇu@Ù`00㌠œ6nL›U*£#Ã‰Ž gôð!¼ðê{TTU÷S//>¾ÞXú!0óŸ¼Nxd‹Ïþõ…>oÿX¢±é_>f,¦#À ðÝò,Šò«™såpÆœÁ#N‰aÚ¹©¼ÿÒÆ^kwæ…éDÆúPQÚ»˸iÎ|çë„ä}iv¯¶÷S‘½»œ¢ü"¢ýÈÛWIî¾Ê.×?ãì—÷oýkß,݉ðe@RÞ>ævëöåü¦ çÎGÎh³’³¯Ÿ')CÃIΙsÒxxÞò³«:h³mÝšüúºßµ{œ‰SÆrÚ㈇ÅâEII߯^Ïëÿy—‚¼¢6å/¹b·Ý}}›í{wïãªóoêRßC‚wÚÉŒ=”A©‰DÅDàëç‹Á õäç²ðã%¼ÿæ'mêzxxpáeç0cöTâbÁ` {ï~–|¶ †.µßUç]|wÝ+û÷årÙ9×uZöäq£xú…G()*åüéW=«ÙÌdèˆt¥&‚ ?&£‘¢Â¾ÿvo½ü>ù¹ÖïéXMž6ó.>‹ô¡)X,^ä±jÅÞ~åÊË*\Êöt¬w4×ïÑš8€Ñá!$úácÁÛÃ[3¹5u|WÀ™û¨µÚ:¬íÆD†n±àeÆl4RÑØÄ–Òrægd±µ´¢ÃºÞ&.LÈĘøùâcö Îj£ªÉJ^më‹Jykç·×=(ÎÏ—?ŒE¬ŸíÎæ…-]ûz£ÂC8/)žaÁyyÑì°SÞØDvu-[KËY’G^M³¼§ÉÈÒógð§5Y¶?¿Í1¿¸`&f£‘lÚÎüŒ¬vÛÉyIñ¤b1™(¨«gu~ïìÜCycS›ò‰þ¼2ã´6ÛÍ™ÑfÛº¢RîX¹¶Ýv‡rQò@F…‡èåIM“•KËywW[:ùsǹSW™f#¦'2fâSCñòÂ`0PUÞ@Q~5›×æñå‚ jªxyÉexYÚþ´qj o­¼ªÍöWþ¶–%ÿsýíÇȱ± ElB Aa>X,˜<Œ4ÔÛ(-ª%;³œw_Ü@Q^õQœ}çFœÃ=O s[ ܸðˆu<½LL;7•“'Å—„Ÿ™†zÕ çײmC‹?ØNC}Ç÷éç¥rÎeC ô¥¾ÖÊîí%|þÞv¶¬k{t4ÎÏ=ºŠ•Ÿïî°ŽêNš5ˆI³µÙþÀMŸ“¹µ¸ÓºÝ™_gnŽó{ÿ݈Ãîú¹Ý±©w_ØÀíšâÜ= °KåƒN9ö-^¼üqwä'eĈ<óÌ3øøøpï½÷²|ùòŸl»+V¬p^GÝù‡ÿ×^{-÷Ýw_›íÌš5«[ýþ)øÕ¯~Åí·ßÎÊ•+™;w.‡þŽp¬š|ï3òs p8Œ;Škoº_?_~û§y̽äV—òï¿õ Í?´âá ·_Ã%WÌé^ç¬Þ»uó/ø’=™YTUTcµZñð#19¡Ý±ºû·;·Ÿ}¸„E –Q[SKJú .¾ü<’Ó’ÚÔé‰â–Õýü}1›=: Ô‡®¡[·Œ°â‹U|2!åe•øøx3⤡\sãeøúùrß#wrÅy7´yŠsOÆêúÛ¯v†“¿ø| >XDuU ÃFaîÍ—ÈcÏ>È5ÝBñóíéX®»×¯;¬È)àýŒ,ª­V|<<ÎÏS ±xñØi'ó‹¥ßPÚÐØ¦ÞË[3°9äÕÖQkµáa0ŒjX- IDATÈÃÓˆ÷÷cÞè¡|“WHU“Õ¥ÞÕƒ“IðÃj·óŸ-»ø® ˜ŠÆ&ÌF#>Ò‚©ë`{R·µ×DúxwPž;4ÅNÞVVÁ»»ö’]]‹ˆðñæÁq£ð2™ŽØnw]7,ÕN^¶?{r¨¶ZĵCRòòäщc˜»ôŠ[Ýÿ²ªª9óÃÅLЉ䱣8ç“/hhnviÃÞΓÐ/KKr†“7—òâ–]äÕÔçïËÃÓ̯F aKi™U.uÝ5G})yh8¿ffsçs˜•QFUÅ¡qn¨;ôÙöôòp.Ðn·;°65^›Íõ;ÉìÙµÏLMU#Å5]*ÛÛæÞ9®M8ùpeÅuÎU¦»ëŠ[OaýêÊŠ­DÞzœ ž^]¿ÖZ×m½rs³›µío{«†{:¿îäàÅȱ±\}û)Îm…¹ÕlÛPÐkmŠˆˆˆˆˆˆˆˆHïX¹r%±±±].÷ÝwóÁôbDÜ£u¸µ¹¹íÿG?Ú}óÍ7]®ÇyóæqÕUWõj›½á /t†“ß~ûmî¿ÿþvWOž0a7Þx#ƒ "00***صk_ý5ï½÷••í?ì`Μ9<ùä“GìÏòåËùå/ÙáþÁƒsÙe—1qâD¢¢¢hnnfïÞ½¬\¹’wÞy‡œœCÍvç=¶;íBÏÎ÷£>bøðá|ðÁÜ}÷Ý.ûÂÃÃùöÛo1 Ì›7O>ù¤Í1—,YÂ7ÞÈóÏ?OBB/¼ð_|1V«µMY96Mž<™ýë_x{{3|øpêêêŽ\IzÝñò½p<;ÑæèD;_w9Vï±ùË_ðöö¦¦¦†'žx‚Õ«WÓÜÜLdd$ééé½V·?«s$'–3fÇçêɺûαvqwýŽÕýªë4V"r¬;aÊ b=¼%4¹dÅê^mkùâ¯IM@eEëÖlê´üðQCZúõÙrÞ~Õõ/Å…%lÙÔñ“œîºÿV||½ihhä®ïgÓú-mʬ]½®»§Ð)‡ÃAScËjÔ6Û¡?065YÛ»bͪu|¹h¥óýŽ­ÔÖÔqç}·’žDrZ™­Vø´Ûí.Çï,ü|$ß®\ˇï~Úfûö-mW”šÈÔ™“xë•÷ù÷S/9÷eìØÃâ_²t퇘Íî»¼Š Š– Xhxy-OÖ½iÞ\†Âs{™Í¶Ѳ"taÞ¡§ïºk¬vnÍàûo78ßoÞ°•êêîºïVâÆ1tDºËç³'cÁ¥W^À–òèO»Ô]ÿý&^žÿOý™{Óå<öà3@ÏÇêpݽ~ÝaWE%?¶Zw[Y?–òô”S öòäê!É<µ~k›zß8÷ÖVå‘]UËk3'ái226*œ¥Ùy.e†‡µ¬$½4;wvíuÙW\ßÀÖÒŽƒÂ=©ÛÚòœ|R‚ZB–UMVÖ—vX6ÂÇÂ¥©-aÝoó‹øýêõ4·ú}fe56»ƒnd&»$ÒÇ›Ÿ§&ðyVùáÇCmVT±¡¨Œÿž9‘O3× Iæñu‡î¿ éÀu׺¯V»Ý¹½#aÞ®’À×¹…<ðÝgˆ¹¼±‰;¿þž7gN!ÌÛ‹Ÿ§ äáï7»Ôw×õ£ÑÀ-÷æNÎØZÌÒw’•QFC½oo3· ¥Þ4g¾óõÓoŸOd¬?[~Èç/w}Ñí¾lY—ÏÞ¥TW5ÒÔØŒÅÛƒˆlÖ¾ûG<1{š5îÐ?èØ¾±ÿú-%…5xx‰Œ `ÈèH|ý½Žx¬åŸf°ôÃ80çªáŒ==O/cOOàóù‡îí­Ç9!9„G_šÝå>·®ûê²Ëó¼jé^ž{dU—ëºc~ÆmNfüÔm¶—ÕòÔïWÐÜÜþJË"""""""""""}íé§Ÿ&** ooozè¡ã²Ý¦¦&ššš\Þk’’’øãÿÀÒ¥KyàÚ '¤¥¥1qâD—mááᄇ‡3qâDn»í6î½÷^.\Ønýž2 Üu×]\ýõF—}C‡eèСÌ;—±cÇR]í¾Eú£Ý¨¨(¦NŠÉdr ÛO›6 Ã'éÆÄÄtxŒ+Vpï½÷òÄO0|øpî¾ûn~øa·ôOúŸ¯¯¯Ë*jòÓp<|/ïN´9:ÑÎ×]ŽÅ{ljj*ÉÉ- &=ôÐCÌŸè߸dee±fÍš^©Û_ŽÅ9’KZZ -ÿþméÒ¥ýÜ÷Ó5Ø7ŽÅû³ˆ»¸ëw¬îW]§±‘cÝ P äò‹fc0ÀÖ™lÛ¹»WÛ{ã¿ï±_.1qQ¬XºŠÊÃV·<\EyËm‡ŒH#0(àˆåJNKr®TûÊsoµN>Ö,[ôwÞw éCS\ÊýeÚ¬)456ñêóo·ÙßÜÜ üÁðhUVTQ[S‡¯Ÿa¡äa49çÂYøø1yÚgè6,<€œÃB¨½eɧ˹ãw·`4H<È% Ü“±šqöTŒ›—þýF›ýûöìgñ‚e̾`&ÓÏ:'ú'6›ÍícÕÝë··l*)cáÞÎIÀŒøXþ¾q6{×>gûkj)¬k Ú×›_Ÿ6û+„ׇàin³ÂrgzR·µ7wì!§ºŽ?oVäPÙÉà fÄÇâa4`w8xrýV—Àooš‘ƒÑ`Àfwðò¶Ì6û÷U×°x_.³0=>†§7líòuæÌøUWÕP^VApH¡¤ý-mHËÓvïÚK]mßý„üÜ’Ó’ˆŠŽ`ËÆí 9ÿ?Æv2ÿxâE"c"ÈÝß7åúºzJKÊ%(8Ðe_OÆjب–°ýžŒ, óÛ® °ê«5̾`&‹)éIίÝ=Vݹ~{Ó×y…œ“4oƒØyàaùš=8Pc£Â‰ô±äåI½­™Üš:<Íx™Ú.+ü~F§D†‘àÇ›³¦ðÉžl>ÏÊ%§¦öˆ}êIÝÃ}•[Ð¥rWÞQ^Iq}߇…¶´»§²šÂºö?Ïßæ3;q“‰äÀv6GGcäóÝVVAiCc»e²ªjòò$ÈËÓJ÷ÎQ_::Êåý{ÿÝÐ&œ|ÉC=Ô¬|!„Âyxxx˜þ¶ô¡V¶ì+„¨ß¸qãX¿~}³%D}¤B!„h¾k*@9$(ÿ»ûVü|½ÉÍ+àËoBÛ W’ܽ}ÿøË¿xêùG  âžÙÓ¹götŽLâûo–ñÛúmõ~a «Yá°¤¸”ü¼Ö»â£¥.•–€‡‡ÆÑY (8€œì‹-šnfú…š Û6á y=—J/Ñ®c["£"¸™E›¨šà¾Œ´ -–·ŠËA¢îw³×m)+c@zCÁÉ5ï]ùA58äJ{k.+[\¸t%è-ÄSCrÁ•÷Úûù0gèu„zz˜í£Q« ¨U/*uìÎ¾È ;ðdßî{h¸»['îîÖ‰£yürŽÍ™ÙuVíUb_k_î .´àj§›ÝÈ…†¬ZËÁž(hpS Ò­©ÓÞ!AüvÛ„&·÷uw3 PvDÙ"8ÜÛô·NWMV†uA¶×Šÿ½ü/þoþAž„Gùrçƒ}¹óÁ¾$ÎaÅ·GÙ¿-Ãâã–•]9‡Ü5ulp­úðµ­|øÚV¼¼Ýi×9‘Sº0dLB#|¸cv½Þ:j!„B!„B!„hY£FbôèÑtìØOOOrrrزe ~ø!™™™îÛ»woþð‡?0`À‚ƒƒ)**bß¾}ÌŸ?Ÿýû÷Û-ÏL™2…±cÇOpp0:Ž‚‚’’’ظq#‹/6m¯Ñh8~ü8?þx½+´&%%áîîΫ¯¾Ê_|QçýÐÐP†NÿþýéÖ­QQQøúú¢R©(++###ƒ%K–ðÕW_ÕÙ×ËË‹?üáŒ5Š:àããCii)………¤¥¥±cÇ>þøã?ïØ±c™9s&={ö4­X›˜˜È§Ÿ~J^^^ƒûÙ’gK¹¹¹±ÿ~¼¼¼øñÇùÛßþVïvžžžìÛ·FÃ[o½ÅG}Àý÷ßÏóÏ?_gû””Æ߬f…E,ú| üõÿzã –ÿ°šÀà***ɾÝbyk蜳¥¬T—OèæžÏµ·kÍee 7—++v˧æoøç B==¨¬®æÓ£'Ùœ™M~E%îjÚx{ñúà~„yyÔsÔ[Ïg³++—‘m#™Ú±-=‚MÿR‹Kye×ANÕÿß-ûZÃøÙÝ]\šØ²®Ú§“¥}Šiëfv±JuÅ.—Ö T7ã õ•KKבRª´ú«zõd¨ .»t%X­vAãQ3=Óë T”›?H¥Jgþ€’ iÅ<;k%SïêÁð‰±xz»™ÞëÚ+Œ®½F²{sŸßDuUóŸi¨µikmak9×9Þ%-I³I:˜M`ˆ'ñ—Wþ¾nXŒ( !„B!„BqêÛ·¯Ùÿ£££™1c“'OfæÌ™¦ïé§Ÿ®³šfHHãÆcìØ±¼üòË|óÍ7Šç·OŸ>¼óÎ;´mÛÖìu777¼¼¼ˆŠŠâÒ¥KõÞd‹eË–Qï{~~~ÄÇÇ×»j@@ß}÷±±±f¯ûûûãïïO»víP«ÕõÞŒ£V«yë­·¸é¦›Ì^ïØ±#;väöÛogöìÙ ÞDdmž­¡ÓéØºu+cÇŽeذa¨Tªz/2dMÍÃuׯ_¯HÚ`[9+aÚ´ifÿ eÊ”)Lœ8‘§Ÿ~šåË—+ž¦£Ú ‡‡£Fà믿Vä˜ÙÙÙ¬\¹’éÓ§3qâDÅ”cccéÕ«ü1:]Ë,à¨tƒƒk¨¬¬dýúõÜ~ûítîÜ™””ÆŒÀÊ•+ùë_ÿJPPPc‡2ùùçŸyæ™gf„ ÌŸ?_ñ|ÿýïÇ×××ì5ºwïN÷îݹçž{˜={v½7¹‚õ}-}¬­y¶¥ý¶dß°iÓ&S ÒàÁƒùî»ïêl3`À æJÞ ®DßnÍ<ÇÖñ×|||øòË/IHH0{ÝxNÚ›µã #Æ2///Þÿ}† Vçu///Ú¶mËðáÃ)..V4ˆ\‰óÊÚr1b„i\2Šˆˆ`Ò¤IL˜0çž{Ž~øÁÊOÖº<ûì³uúg€˜˜fΜɔ)S¸ï¾û8tèPmœ±íƒsÖ¯-mßQ߭ͳ³õÏÎ<î[Ú”ú«äX6vìX æ!FÛ¶5~—-sBkóì¨ïÝŽ¼6âˆ¹Š³ŽGr½®u^¯sæ<õ7ϱ¶œm™ƒãÊÙ}¬­c™-}£Æ#k÷µå¼rôµz!,uM(k4îÜ3}*~¾Þä1ÿ›[up²‘NWÅš‰¬Y‘HD›p&OËô{n¡]Ƕüï³7¸÷–‡¹˜{å)+ùk–êôõóÁ?À¢ÂâÏsí@²–ŽgÒ_ަª¸isóèÜ­#QM? WIgOÕügßQÖ§7½§ÓëI),æRUÓAâ:½žµ©™¬MÍ$ÂÛ“Ií£¹£sÚùùðÎðüaÝ.–W*¾¯¥ò++ßF®¢ÓëÑ ¸¨Tx»Y6^¬¨$ˆðölp›¯+ïÕ®£Új¯VÜœ6hLwcÆ^ÙUÿ—šæhÉ:²EAÞ•U¨=½Ýˆˆö#+ÃòñÌìBg ŽG¿ïO\\Oü…?®6ûïQ<óVÍÍ(gNäñâC«ëÛÍLa~9 æíáÛöÓs@$G´gÀðSnßÁÑL¸=ޕ߳ä£4Kuµy oSŸW)–Ö¯åÜóiŦeO/7<<]©(oÙ‡˜!„B!„B!o×®],\¸ôôt ƒæÏþ3¾¾¾¼ùæ›L™2¥Î>>ø é¦–;w2gÎÒÒÒèСÏ<ó }ûöåÅ_dÿþý 8[£[·n,X°oooª««Y¾|9‰‰‰¤¥¥¡R©&!!Á®«À8p€eË–qòäI ÐétøùùÑ¥K>ž'žx‚ÈÈHþóŸÿœœÌ‰',>nCÕ¡fÅ4ôz=‰‰‰ŠwÛ¶mLŸ>¨¨(Ú´iÃùóç›Þ© ƒ j~Ÿ±u¥ggH×t¬ÓéX³f ·ß~;cÇŽåôéÓÜxã$%%‘––FUUÍ:¦N§cãÆÜvÛmŒ1Â.ÊF¿üò _|ñEEEøúú2bÄxàBCCùì³Ï˜qâYYYDDD0dÈF•vîÜÙàjáÖ°e 5²fž£ÔøÛ’^ýuSðÛ?üÀO?ýDII ñññüá0­Æh/ÖŒƒŽË^}õUSpòŠ+X²d ÙÙÙh4ÚµkÇܹsQ«ÕŠ¥g¤Äyeí|ãÝwߥªªŠ´´4JJJpss£W¯^üío£S§NüóŸÿdݺu*þ¹eÍš5|ûí·äååáííMÿþýyì±ÇðõõeΜ9Œ;¶N ¢µudK«kê×’iϲ²”-m_©¾®%Ç#%ÊÙšóJ‰ë9B´¤k"@ùæ £ ¢¬¬œ/¿]FIé¥ÏðQƒ‰ŠŽd㺭d·|µÖ¬óÙÌïkÙÌç?ÌÃ×χ 7æëùW¾¸Þ_Ó™©T*ÆMÅ÷_ÿ¤Xþ›«¢¢Âô··7e—ÊÙZY•—ë¼}”rLmGçú¡×Ñ­{gBÂÉÍÉkz'œ=@›¨pÆN ÀºUÉÉÊåèÁ$z&ÄÓPÍE˜3§Î5z,g(+ã¾:·'¢MYçëþ@vÈš$+Ê+H9qeEq%Ë lo¿J|9 »Ú`àL­Õn=4¦¿O)ô`‚¬Kå|v,… é˜?ú|ÝÝß.šoNœ¶Û¾C£Â‰òöbSfYôIù… !6À0/rÊ*ܶ>y•„zzÐÞ×Ç¢ýŽ\,`PD(ý} ÷ò$»¬n‡\^µ»¢ªšSEõ×EE­€No7WÊš¸HaL·_XµšJ.HÚR¿ö–|8›±·t5ýÿŽú0-^‘º²âJ9‡Ú·¯«­ü’ùEÍpËÎ3K©\T¦‡ƒètÕìß–Áþm|û¡'¯~:‰ ËŸ=áúh»(—›µ‡EÖ}Ê“=8ª~O­Vѭו‡eè´ÕTVHp²B!„B!„ע͛7³jÕ*Óÿ9Bii)¯¼ò ñññÄÅÅ‘””dz?<<œÇ€_ý•G}Ôt“Q^^÷Ýwëׯ'<<œY³fñÔSO)–×W_}oooÊË˹ÿþûÙ³gO½ŸÇž6nÜX®wû~ýú°|ùò:}YYY Þ°ŬY³X²d Ï<óŒé½ãdzsçNV®\I@@þóŸyî¹ç˳µ6n܈Á`@¥R1zôè:75©ÕjÓ*®ëÖ­3{¯ººÚìf5Kot·¶œmM×èý÷ßgÞ¼y¦ÿ?~œ­[·²zõjüýýyüñÇyøá‡­:öï9² ¦•ÞΞ=KAAA[7ß™3W~7ŠŠj0@ùäÉ“õ¾¾k×.fΜiöZÇŽÈÌ̤¨¨H¡œ6MÉt-ù¼Æ”«ªªØ¶m%%%Œ=šÝ»wÈW_}Ôªxzz¢Ñh¨¬lúAлvíâ¶Ûn³û*Geß¾}¦ÿ8p€mÛ¶ñÍ7ßÌc=Æ /¼Ðàþ–ôuJõ±–æYÉökÉç5 ¦º®Œ Õj›ulÚ´‰;3¡C‡¢V«ÍúJµZMŸ>}زeK“Dz„µ}{m–Îs”[J·nݘ4iŸ~ú©Ù*ôÇç§Ÿ~âØ±c¸¹¹Ù-–ŽƒŽËâããM .äÅ_4{ÿèѣ̙3Gñe¥Î+kç›6mªóÚúõë9}ú4k×®E£Ñ0|øðW`vFGŽaëÖ­¦ÿïÝ»—ââbþõ¯ѱcGúôécÖ‡ØRG¶ö±¶²¦~mɳ-ûÚÚö­ý>è¨<;cÿ Î;î[Ólù«ôXBß¾}MÇk.Kæ„¶æÙÚ:²¥ :êÚˆ£æ*Î:Éõº­õz3æÙ¨¥ç±ŽœçÔfm9[:6jéù¤#¯mÚ2ßPª¯k©ñH©r¶æ¼RâzŽ-ÉÅѰ·è6ôêÞ€%/½¤Œ IDAT+Ö‘WÐòO¨›yÿm¼6÷yùëÿ1ÿÛwñðkt{W׆ãÆÏžN¥ør`b@ ùqN;i Òœýè=ôJ°ïõÉÎÊ5ý=`p_‡¤LPH ÝÒùuÕª««Q«Õ<ùüŸìò´Çú¤M§ªªŠð6ጙ8‚Ìô =”t9OQ©TÜ5ë6ΤœkôXÎPVµ÷õÈÝuÞïЩ㦌¼¼íF³I™’eeiûU‚«ªn×áíÉØvmØ~>‡ŠZ¬ j­ÔÛ-ÐßòôYñôlq)%—Ÿ"ç¯qWtßÚftíÈ«×÷åá^Ýødä`üܾ`¸!ýj•Šûâbë¼ï¢R5º‚{R~Í80<:׿Ÿ“ëÒÎSm0 V©˜Õ½s÷;øù06&Ê´mU+sçÔ l¾.<¤ÉtצfR¥7 qçñ>ñ¨-\ž^©:j){·¤SXkåA#Ûóü»ã¸~T{ÚÄøêEd[?âú„3ùÎî¨]ëŸÊäe_yITûn¾§'‘1~„FúÛ=”éL C×`ÅóŸ—[f¶zîè›»Ð{P!áÞtîÊö%0D™€Zµ« ïÿx<}= ƒ£ ñÂÍM‡§+¡^TU] †·×ÊÆEùå”Õ Ê9¥3½FáC·^aÌPðóÖÖ’õÛ¡k0O½1’“biÛ!_ ^>îtèÌ#/ %ºÃ•'ãÝwÁâ`z!„B!„B!ÄÕkåÊ•¦¿{õêeöÞM7Ý„F£A§ÓñÒK/Õ è,++cÁ‚ >\±<ÅÅÅ™Vžš7o^½7µFùùùôéÓ§Ù+–Ü|óͨÕjªªªx÷Ýwë¼êÔ)–.] ÀÔ©Sý­¾¥\¼x‘Ý»w˜nâ®mðàÁÖüÆ»bÅ EÓ¶¶œ•¢Óéê¼–••ÅÂ… šU·<==IËQmШ}ûö@M€²’JJ®<èÚßßòߎëc<Ž’Ô­9ÝÚÊ:ŽÄÄDzöìi d6:Ï׿¶ãJq~~~¦Uš[ÊîÝ»ùþûïš~Q©¾Îž}lcyvtûµ–1À×ÏÏÏ´j¢Q¯^½ðòªù]Ué {õíÍsœqü »¾æ©i™HÍ8G­•Fk«yú„¶Þ÷l5jÂ•ŽÆ?Ð~{³amÃO½zû£W©ªÒ‘¸f3'Žž$?¯WWW"Ú„1õö ×|Q;~Äü ¯ƒ·^™Ç¼/ÞÄÃÓƒyŸ¿É†_7³ý·Ý\È̦ºº/o/:ƶ# ÈŸOç-Pü³¦M§ ¿À ~bjµšÓ'Ï¢R©hß1†¶¢øð¿Ÿ+ž.À¡}Gš¤_ûïó|ùñ"*+µ´mEdTŸüïKEÒɾˢ/~äžîà†ƒø`Á~øfiçqqq!,"µò±ÿ:]gN¥Ò¥['Üü}ùaá•§§lX»™??ó éÜH>~ªÑc9CYe_ÈeñWK¹kÖíL˜:O/OV,YCiI)=zÇqïïÄÕՕ⢾üh‘Ù¾J–•¥íW ÷Äu"ÈCöóÙ”êªèèÇ}q±x¹ºR¥7ðÅñ³íO•UVN„—'õ‰CãªfNE•ZÜÕ.¸»ãÙHpøœ¡×¡ÓØ~ùETVâê¢"ÜË“©cL+4ŸÈ¯û€[ö­mTÛHÓßþwú……°1ãB½Ûž+.e]ÚyÆÄ´ar‡¶ø¸¹±ê\¥Zý}¹¹S ^|±ûå\&â"öÐ0wؾN:Í…Ke¸«Õ„yyàÒ@pvY9ß<ËÌ®ß. OW5+ϤSª«¢{p÷ÆÅâꢢX«ãˤ†Ï«´’KTj Ô¸óPÏ®¨]Tœ.,A¥‚ö~>´õñæ£#ɦísË+XtŠYÝ;3©C4}BƒX~&´’Rò+´¸»¸áíIï æ8Fõï.¸*UG-E§­æã7·ó·7F¢ºT×'œ¸>áõnh÷yÒÏÔ½)áø,ú‰6ýÿŽÙ Ü1;Ál›‹Y—8›Üü•ݛà7°okCÆÔ<ÑÝ/Àƒgþ3Êl›¤ƒÙ\,³9­èöþ{2rJgFN©4_Û‘½õ?ßVìÛšÁÐq—?o ϼeþy+ôyÍŽÙ‚õß'œ¾ƒ£é;8ºÑíª«õüô•}ž`'„B!„B!„pNEEEäååLhh¨Ù{Æ”8@NNN½ûƒÙ‚‚‚ 2Ýb‹šþþñÇm>^KùòË/:t(;w&11‘E‹ñã?rîܹF÷3®œ”œœÜàJ²6l`úôéxzzo·ÕJ,ñóÏ?3pà@âããiÛ¶-ééé¦÷&Nœ@JJ ÇŽS4]kËÙÞöîÝ Ô¬¼Õ­[7EV‡pT42ß*½"±ñ¦¶¦ôëׯÞmk?ÜHeᔕ¢dº–|^cÝQÖ¬YÃÍ7ßÌÔ©SIMM%99Ùì}___²³³›ÌCí@k???EϧæX·n3fÌÀËË‹¸¸8Ž9bó1íÝÇ6”gG·_kíܹ“ììlÂÃÃ3f ;vì0½güLiii¤¥¥)š®½úöÆæ9Î8þo>qâ—.]jbë–ÕÐ8訶гgO ¦¬òò”½ç¢1ö>¯ššoøúúr÷Ýw3|øp¢¢¢ ¢¬¬ŒÔÔTSà‡‡‡5Í©”••‘““CDDDn8cÛ7r¦úµ¥í;êû -yvÆþœwÜ·¶-XûVé±lܸqìØ±ÃìáMJ²5ÏŽøÞí¨þÙQsgäz]]­­Žœ1ÏF×Ê<Çž›µt9;²¬¬mûÎ8µg97u^µÖkõB4äªPnß¶fÅј¨H^øëC nWz©Œ¿ó©]ò›}‘.Ý:™þŸ“u±Ám]\\ˆïÕ ÷kp»m¿íbã¯uŸœ•t4™§y‘ÿý4!aÁŒž0‚ÑFÔÙîRé%S€²§—'j+jËË*ê<B¯7ðé¼üí¥?ãèÇÓ/>fö~Qa±Ý”3Òγnõ&ÆLA>qÌùð_fé*t ðÙû_äÏäiãˆïÙ•—Þ|¦É}”(çäc)téÖ ½ÞÀšŸ×›¶).*asâvF†Á`àd#Á‘ÐúËÊèÓy  aì¤1z#F1{¿¤¸”g{™Üœº»•*+KÚ¯RÜ\\¸¹S 7w2JNµÁÀ{sºÈü‰Þ`àµÝ‡xó†þø¸¹ñ¤«§»¨TÄà¡V3 ‘Õ|·_ÈacF–bûþ^nyk­NS^ÞÈÖðßýLjðö¤gp #¢#Ñèö¿ÏϪ³LêM|PÿÒp_û{óž$ÔÓƒ11mÁð(ótK´:žÝ¶‹å Co00ÿèIžî×;Oõ5âM±Vg  ° éîjfvíH”ôêVﱿ;y–ôÒ+b•¬£–thg&sžÝȃÏÆ/ ñ/cíbë PÞ°2…1·t%<Ê·Á}£Ú)óÔøßûá³Cô…_ýE‰jïÏ¡]™6§Ó¦™ù?q(›U‹Ûœ^C–|~ÞÛ4XWJ}ÞÚZ²~»5_[y™ŽOÞØÎ©ãö#„B!„B!„Î¥´´”ààà:«)………57¸œ>}ºÉã(rQxxÍ5Ï¢¢".^tžkš›7oæá‡æ_ÿúaaa<òÈ#<òÈ#ìß¿Ÿ/¾ø‚µk×Öùí0L5tãàïß3Ö‹£ýòË/¼üò˸¹¹1iÒ$>úè#ÜÝÝ?~<`Ÿ›¸¬-g{«üi\ÝÖVŽjƒFÆàÛæ7—Ÿß•ß\ ~.))iv]£ÔŠÌÍ¥dº–|^_ߚߟŒÁË›7o¦¬¬ ///ÓêÉZmÍ">>>Í:ní`hG¬¤”‘‘aú;<<\‘e{÷± åÙÑí×Zz½žU«V1kÖ,&MšÄk¯½f:/o¸á¶nݪxºöìÛšç8ãøRsOEVVë¹w¨¡qÐQmÁxs}f¦²÷4ÅÞçUcóØØX¾úê+""Ìïòðð0»‘ÜQõhiå—ïëÒhÌï‹qƶÎW¿¶´}G}´%ÏÎØ?ƒsŽû¶´k¿Ã*9–ùøøpýõטÍÛ•fkžñ½ÛQý³£æ*Î8ÉõººZ[9cžáÚšçØ[Cs`pL9;²¬¬mûÎ8µw97v^µÖkõB4äªPöôòlz#;ûàíÏ ¥MtË—¬æè¡¤·5 <óèK 5„½ã $ ȃÞ@~^§NžeÚͬÿez½¡ÞcØs˜Sf3ñ¦Ñ 1Ø.ñ ðE§ÕQR\ÊÙÓiìÛyµZMuu5oø/z&Ä[ü¹þòÇçØ»ó`×Wü¸†¢Âb¦Í˜Bç®ñññ¦¼¼œSÉgÙœ¸•J…ÁPÞmõïç’‘šÉ˜‰#o޶²’³§ÒؼAÙt«««yóåwI\ó7ß1‰½ãòG_­§¨°˜ÌŒ $9É®m{Mû(QÎ'Ž¥0åÖñìÚº‡¬óæOàXþÃjFFFÚy.•6½Rek.«Úûþëٷؼ~;SoŸ@\.xxhȺöM»XôÅ XõU©²²¤ý*emj&®..$„á¯q§¨RËÁÜ|ž8Í©¢úŸêvøbøu+·Æ¶#!4˜P/üÜÝ(ÓUQ¬Õ‘_QIjI)»`m0øûÖ} ‹ §{pÁhÜ1` ¿¢’ÓE%lH¿@búô¿;'lÙ÷÷>8|‚0O"½½øùLÇò_Í·¬ªŠÇ7íbZl;ÆÆDãëJ§‹JX›šÉ£½ãpsiøoí;¡‹ùLîЖŽþ>x¹º¢Óë)ªÔqþR' ŠØ“]wâ[m0ðêîClÎÌbjǺúãáª&ëR9Û/äðmò *µæ`åÙtŠ´Z¦ujGl€>n®”WUsª¨˜-™Ù¨€Ú%f>=z’Äô ÜÔ1†¾aA„zzâ®v¡T«#­äûsó(Òš§­dµ´;2øóK6¾}Fˆ¯¿7w5•åUäå\âLr™©õßXQQ¦ãåG~á–?ô¦gÿH‚üQ»ª¸T¬¥àb'ç°sSª]òžs¾„\Ím³zÓ½_$¾þ*+ªÈ=_ʱYìÙÜð“/íÊdæ°ÍJgGâ9ò²/1ðÆötëNX<½Ü¨Òé)*('5%ŸSÙ±á†æ JȽPÊ \Í´ûkÊÚ?ЃK¥Zr/”rdÏvÛ¡œm­_KÊùëy{I:˜MמaÄt $ ØWWÊ.éÈL-äÈž l\™Ba^ãVB!„B!„B\›Œ7ˆüþæ#ãÿ«««›u‰»»»"ù1¦kÍoµ÷qiäw{Y¿~=¿ýö“'OfæÌ™ôíÛ×ôïÔ©S<ñÄ$%™ÿ–géçµ×ïØ–***bÓ¦MŒ3†©S§šnî3f ~~~TWW³|ùr»¤mM9Û[íÀN¥êÈQmШ´´¸ «”N®<|ûÂ… ŠÓ€··w‹­\ç¨tAÞÆ’+++™8q"žžžfej¶¡<;ºýÚbéҥ̚5‹† ÂæÍ›ñðð ÿþüöÛovI×^}{SókÎ GÍ7ŒéÛ~kÒÐ8訶PQQóÐþ–~Ø‚½ûœÆÊùý÷ß'""‚ŠŠ æÌ™ÃÚµkÉÍÍE£ÑÃ'Ÿ|Bdd¤Eé9³†ÊÖçÞÎX¿¶´}[¾Ú–<;cÿläLã¾­mÁÚï°JŽe#GŽÄÍÍ ƒÁÀúõëÜÎVJä¹¥¿w;ªv–k_­e<¹^×g¬£Ö’çkižcoÍQÎŽ.«–hûJQbþl¯rnª,Zãµz!rÕ(¿ðúÿÒÎe0ëŽG›µ­Á``ÿîÃìß}ئ4+Ê+Xºx%K¯´é8ÖÚœ¸Í‰Û›µíøÁ·7úþ]SÿØìtuZŸ¸Ï?\Ø¬í§¾§ÙÇ®ÏÞë Ò¶—Ÿ—üÂÏK~©÷½{3´×ÄfË’²R¢Žl)«ß·ñ[â6‹öQª¬,i¿JI-)eá‰3ï—]V·OX´8›Çܺ«PÛsßßK/¹Äÿ­·¬Ž« ~H9Ç)çê¼÷hï¸F÷5P¾6Õº§¹nÎÌfsfvÓ6bKf6[,<Æ™¢æ8Öì핬#GÐVT±~Y2ë—%7½q=Š *ørî®foÿëÒüºÔ²6ÔìÌÞÿ—òO¹ü½“Gs9y4×âýÒÏ6 ûâC«-:^nV)ÿÛ²6|ߨæÕ ±´~­•s¾„Õßgõwö[…Z!„B!„BqíÉÉÉ!>>žÕ«WóÄO´Xº¹¹5×”ýýý ¤   ÙûjµZôz=...ŠU6—N§ã§Ÿ~â§Ÿ~"::šÛo¿Y³fËÂ… ™0a‚Ù*VÆrŽŠŠjð˜mÚ´1ým,ŸÖàÛo¿e̘1tíÚ•®]»’œœÌ´iÓX·n999MáÊ N–®Îai9+•nCš[G–ÜÜæ¨6hd ¾‰‰Qô¸ÆÃ.\¸`¶ú¬-öïßÔÜè† ‚‡‡G‹¥»wï^ æ&§[n¹Åâý7oºr¤ŒŒ æÎË´iÓ¨ªªÂßߟ[o½Õlc9wëÖ­ÁG @YYÇ·ž‡UnÙ²Åyûí·ÉСCøæ›ošuŒòòr ù+¼Ö§9åltk»ñƦ먲²//¯&é¨6htâDÍCs;wîܬü6Gpp0S¦L`íÚµŠàСCœ?€?þñ¨ÕjÅŽÝÓ5ÞЭÕjÝθjJs”{ôè@JJJ³V\QÚÈ‘#š|Ï?[Ù»m(ÏŽn¿p¥ŸËWB7öáãÇ'$$ÄL“˜˜hZ™ÖÞ¬éÛ-a빡Ô|Úq¡W¯^fÁñ­ACã £Ú¶m5/‰‰a̘16Ëš:²WŸÓP9‡„„˜þ¶u®hÉçuFJÕ‘-}¬¥”¬ß–bKÛ·õû ‘¥udKž±®ÍYÆ}%Ú‚5ßa•Ë4 Ç”ý.T{Œ¿–Îͬmƒ-}mÄQsg¼$×ëêjmuäŒyn óØ–œ38ŠRåììeÕœ¶¯Ô\ÔRJÌE©œ…p PB!„B!„B!„B!ZÐÒ¥K©ªª"((ˆ—^z©Åï>lºQê/ù ýû÷·hÿC‡57W·d`…««kƒï¥¤¤PXX@`` Ù{Ë–-£ººµZ]ï ;w6Ý µ|ùrÓŠ¨­^¯gñâÅL›6Í yúôivìØÑ¬cƒ;ÃÃà mr{kËÙÖt“ÀwÞ 4]GYYYDFFÙèqÕvî܉^¯ÇÍÍÍtÓ¾-4 sæÌÁÇLJÊÊJ>ýôSrY£ººšùóç5A¶Ï?ÿ|ƒ+¹¸¸(w’£Ò5ömM(WXnn€²1ض¹í×Znnnu^‹ŽŽ6õu‰‰‰f7½ÚB©>ÖÒ<;ºý•~°¸ ¯^½š¼¼<ÜÜܘ9s¦)ÀÓ^«„+Õ·[ÂÖsC©ù†%ãBí<¿òÊ+9¯êÓØ8訶°|ùrSÌÛo¿Ím·ÝFhh(~~~$$$ð /ÔÛ®ëcm)=¯k¬œk¯zß«W¯f³>–|ÞúŒ?žmÛ¶±}ûv›ƒÃíA©:²¥µ”’õÛRliû¶~4²´Žlɳ3öϵ9˸¯D[°æ;¬RcÙ 7Ü`š3¬[·Îªc4—­yVbnfitÔµGÍUœñZ\¯3×ëÈóÜæ±-9gp¥ÊÙ™ÊÊÚ¶¯Ô\ÔR¶”•3–³ŽÒð+„BQ˃=»r¼ùÖîýu ÅZƒr$ÄÕov.Ljmöš¿ÆÝA¹B!„B!„B(%++‹÷Þ{'žx‚;Aƒ±páBNŸ>Mnn.†èèh®»î:^zé%ÅVÛ4 <ÿüó,Z´///-ZÄêÕ«Ù°aéééTWWãããC—.] â¿ÿý¯ÙþK–,aܸq„……±`Á>üðCÒÒÒÐh4´iÓÆn7è|õÕWhµZV­ZÅáǹxñ"nnn´iÓ†™3gšVª0ÞitþüyæÏŸÏƒ>È´iÓðòòâ»ï¾£¸¸˜„„þô§?áêêJaa!óæÍ³KÞm±xñb{ì1üýý¹÷Þ{øâ‹/š½ÿž={€šU)>øàæÍ›Gee%:t ::š9sæ˜mom9Ûš®QÏž=0`………0|øpî»ï>ÜÝÝÉÏÏçÿû_£éîß¿¨ V3gï½÷z½ž˜˜¢££™;w®i[GµA£¼¼<öïßOÿþý™1c†E«|¹¸¸Mee%ôë×Y³fÑ©S'þñ˜nmˆ¯¯/z½¾Á÷ËÊÊÌn¦ýúë¯7näÞ{ï%!!… râÄ T*QQQ 8Aƒ1a C³?Oc”J×’Ïk 8nêfbã9áééÙäçˆ7­ l?ýéO„„„˜˜Hqq1Ý»wçÑGÅÛÛ›ªª*Þ}÷]ÅÒRªµ4ÏŽn¿gΜ!//àà`žyæÔj5ÉÉÉ@Íé;vä7Þ¨w_­VË‚ øË_þÂC=„F£¡°°ß~ûMñ|‚r}»%l=7”šoX2.œ?žO>ù„‡~˜Ñ£Góý÷ßóå—_rîÜ9Ôj5‘‘‘v¿ÙÒqÐQm¡¢¢‚'žx‚Ï>û oooÞ|óM«ei)ÑçXZÎIIIdffÅ /¼€§§';vì ??FCPPP³ÆK?ïﹺºòÖ[o™‚Žþýï³qãÆVüb¤TÙÒÇZJÉúm)¶´}[¿YZG¶äÙûçÚœeÜWª-XúV©±lܸq@M°Î¹sçšSTV³5ÏJÌÍ,mƒŽº6⨹Š3^ ’ëu­¿Žœ1Ï­aÛ’sGQªœ©¬¬mûJÍE-eKY9c9 á( ÜŠl9¼Ú!éí5Ñ!é !„p.Þn®x»™OzJ¹5m¾W±c9ƒ™Ã8:  x»¹è¡qt6„B!„B!„vðÞ{ï¡ÑhxðÁ‰‰‰áÙgŸ­w»Ï>ûŒ³gÏ*–î¡C‡˜5ksçÎ%<<œ)S¦0eÊ”:Û•””Ô¹ hÆ |ÿý÷ÜqÇ$$$ðÉ'Ÿ(–¯†¨Õjz÷î§§'Æ kp»ÄÄDV¯®û›ûÛo¿MDD7ÝtãÇgüøñfï1{öl²³³Ï»­ ùñǹ뮻ÈÏÏgéÒ¥ÍÞÿܹsüüóÏL:•¾}ûšÝ^PP`(lk9[›nmõÕÔ¬DòÀ˜VklHrr2ëׯgôèÑ 4ˆAƒ™¥ûû›%Õ.\Hÿþý:t(ýúõcß¾}ÍÚÏÛÛ»Þ€†²²2žþy–/_Þä1šJëñÇgåÊ•¦ÿëõzfϞͻï¾Ë7ÞHÏž= êÞ½;Gm2Í¡TºÍý¼jµw÷šÅ6ðeÉ Ê>ú(PsŽîÝ»·ÉímáææÆÝwßÍÝwßmözuu5ûÛß8qâ„¢é)ÑÇZ“gG·_½^Ïÿû_^{í5yíµ×ÌÞ/((h4xnÁ‚üñ4?Ë—/orÕnk(Ù·[Ê–sC©ù†¥ãÂܹs búôéôéÓ‡wÞyǪt­eÍ8訶°k×.n¹åžzê)† fê;KJJX·n7ÝtjµºÉVXZGJô9––³^¯ç¯ý+Ÿ}ö~~~¼òÊ+~¦ÆXúyk 2[100ÈÈHÒÓÓ­Î=(QG¶ö±–P²~[’-mß–ïƒFÖÔ‘-yvÆþ¹6g÷•j Ö|‡µu,S«ÕŒ9À¢?ÙÂÚ<+57³¦ :êÚˆ£æ*Îx-H®×µþ:r¶<·†ylKÏA©rv–²²µí+O¹®E IDAT1µ†-eåŒå,„#H€r+"ÂB\Û&.·ï“’¯%£—¶Ì…¦kÅÌ5öybct$`Wˆ:Þ9pœwwt6„B!„B!„v`0˜3g+V¬à®»îbРADFF¢Ñh(..æôéÓìܹ“‚‚ÅÓÞµk£GæÖ[oeäÈ‘ÄÅňV«¥¨¨ˆ””¶mÛ†Z­®óÔÿçž{ŽÝ»w3}útºvíŠZ­–‚‚RSS9vì[¶lQ,¯z½žx€qãÆÑ·o_BCC F¯×sñâE’’’Xµj+V¬¨w…Ôêêjž|òIÖ®]ËŒ3èÕ«žžždff’˜˜È'Ÿ|B^^žbùUÚgŸ}ÆŒ3pqqaÁ‚TVVZ´ÿ3Ï<ùsç˜:u*QQQTTT’’¯¿þŠJ¥2ÙZÎÖ¦ ðÆo0dȺtéBDDžžžTVVrîÜ9Ö¯_Ï_|Aqqq³>ïO<Ác=Æ„ ˆŒŒ¤¢¢‚“'O²nݺ:é:² ¬^½š?ÿùÏtèÐW^y…[n¹¥Ñ@…ääd¶oßNÇŽ ÀÕÕ•‚‚RRRزe ßÿ=………vÉ+À¥K—xà¸ñÆ™6m}ûö%88˜ªª*²²²8pàË–-S,8ÙéÖ^Ѧ©eãûµƒÅê3lØ0ÓŠnï½÷ž9lÚÒ¥KqwwgàÀ‘ŸŸÏîÝ»ùðÃIJJR<=%úXkòìèö 5+æççsï½÷‡¯¯/eee$%%ÕÛ×ÕV\\Ì¢E‹˜={6ß}÷]ò¨tßn [Ï ¥æ–Œ ÕÕÕ<÷Üs¬ZµŠ»îº‹„„‚ƒƒ©®®¦  €´´4:ÄæÍ›)##[ÆAG¶…””|ðAÜÝÝ £ººÚŒqË-·5«-7ÅÒ:²ö¼²¥œ÷ìÙÃøñã¹ï¾û¸þú뉈ˆ €ÒÒR ÉÍÍåôéÓÍ:7,ù¼µåää°sçN³`ÒÒÒ&ÓkiJͽméc-¥dý¶[Û¾-ß,­#[òìŒýsmÎ2î+Õ,ýkëù|Ýu×Àºu-s®µyVrnfitÔµGÍUœõZ\¯kÝuäŒyn óØ–œ38ŠRåì e¥ÄX¦Ä\ÔR¶”•³–³-MuùŸ™—_~YuìØ1Unn®ª¤¤DÕ±cGUnn®‹»»»úÒ¥K.z½ÞÍËËËM§Ó¹...ÞƒÁ×`0nÞ¼yyí§}öïß¿?ŽãÅÆÆ:: B!„B!„B!„BÑ Å‹›þî߯Öï¹u~9BaOÇçóÏ?júæüãΑPRXX+V¬ $$„;wšV’³‡ƒâëëË[o½ÅG}d·t”äŒyVÒ]wÝÅ+¯¼Â¸í¶Û!Ó©S'~ýõW|ðAÖ¯_ïà]=<<ÿüsBBB(,,ä©§žrt–D+Âc=ÀÇìàÜ¡¬»ï¾¨YñéàÁƒÎÍÕå†n`øðáÌ›7ÏÁ¹B4—Œûö5fÌ åVOB!„BÔåêè !„B!„B!„B!„Bq-zýõ×騱#7ÜpO>ù$*•Š÷Þ{ÏÑÙ6gþüùÄÅÅ¡Õjyì±Ç¸pá‚£³%¨K—.”——£ÓéèÑ£O?ý4¡¡¡lݺU‚i„Szï½÷8wîûöí#;;›²²2Ú´iÃÍ7ßÌ­·Þ À/¿üÂÅ‹œÓ«ÃŒ3x衇ˆŽŽàƒ>¾CˆVLÆý–Ó«W/"##øõ×_œ!„B!®] ì ×ì‹‹‹ §Ï¦’••Ûbû !„B!„B!„B!„BˆÖA§ÓñÐCñÉ'Ÿ0xð`n¿ýv>ûì3ÊËË5a¥1cÆOee%>ú(Û·owt–„ƒ=ûì³ 6ÌìµS§Nñä“O:(GBXO­V3räH4MƒÛ;vŒ_|±suuóòò"::šÔÔTþûßÿ²råJGgIÑ÷[ÎØ±c(((`Ïž=ÎB!„×. Pv€6‘áÜ0ä:RNm±}…B!„B!„B!„B!DëR^^Îý÷ßÏ /¼À²eË$8ÙÉ-\¸=z°páBŽ9âèìˆV ¼¼œ¢¢"¼¼¼ÈÌÌdíÚµ¼ÿþû\ºtÉÑYÂbnnnüïÿcðàÁÄÄÄŒ»»;………?~œ5kÖ°téRt:£³zÕøùçŸÙ¶mÉÉÉ GgGÑ÷[Ž1@yãÆTWW;87B!„B\»$@Ùºtî@QQ 9¹y-¶¯B!„B!„B!„B!„h}ªªªx饗 ¡ƒÁÀßÿþ÷M³OŸ>-šžœ1ÏÖzä‘G!SQQÁG}ÄG}äè¬\3rssÉÍÍut6„Í$ã~Ë1( !„B!ëš PöðÐðwM£MD —¬äxòéÏCll{ÀºmÙ·)ñq™4ad“Û9“ÆË~1ý¿O¯xÆŒ ÀÒek8}&µÎ>íb¢¸ã¶É\*+烘½>p@AxxhpqQQQQÉżÎKçðÑTTT*ðé×-–Ý»Œ‡FƒV«£¨¸„ÌóY$'Ÿ!#ó‚Ùö·Ü4ŽØNí9uú?-_[ï1ÃBƒ¹ïžÛøêë%õ“Çu‹¥Wn„†ãææFIi)gΦ³{ÏAJKë>)-¦mÃn@@€;...TUUSQQANNÉ)g8ž”‚^¯¯³ïƒÌÄÏÏ·ÙeòËÚM=–ÜàgëÝ+žví¢ðõñAoÐSPPÄÙsé>œDQq‰iÛñc‡Ó³G72Ïg±hñòzg<7>úäJ.v%ól‰íÛ2dpü¯”³V«£¬¬œâ’RRS38t8‰òŠŠz÷¯ÝŽÞ~çÓzë£)–ž¿gIøóÀ¬;øö»åddfÕ9Þàëû1äúþüðã*Î¥fXü™„B!„B!„B!„B!„B!„B!„B\=®©å fÞ6™Èð‡å!4$ˆÀRNk±}[Êð¡9s6 ƒÁЬíCB‚heöš··ÞÞ^´‹‰âúAýXóë&’OžQ<¯...L<šÎ±Ì^÷ðÐàá¡!<,„„ÞÝùàã¯)++·{ºþôKð§g÷®,]¾†ôôófïúföš««o||¼éØ1†¾ =X²tµ¢ù­mØ p]oT*U­WÕ„‡…Bÿ¾½øàãTVjí’~K 2¼œÝÝÝpww# À˜¶mè×·'K–®&;碢i[{nÔ¦tEGG2xP?ö8*ÁÉB!„B!„B!„B!„B!„B!„B!®eôíɘ×ã¡Ñ84/ÆÀò²r2Ï×]©Ô^ûZê½¾Bo¨åׯV„ ¤G÷®9z¢ô´Z_.ø/oOb¢ÛÐ7¡>>ÞL<†«9‘|Ê¢c6¥oBS™ž:}ŽýŽRPX„««+a¡!tŽmZí¢x°ïˆaƒLéîÛ„£Ç’Ñju´iΰàëëô›Æóù—ß™Vþ½>ù½Á€««?_ºwïJø.„‡…0iÂH~øq•Ùö_,X‚Y¼*ðÐì»pwwgËÖÝ8tÌ콪ªª:iŽºq}z““ÇþƒGÉÉÍC¥‚°ÐâºvB¥R)œ¬Džm¡Õjùxþ" nn®øùú×-–¾ =ðòòdÒ„‘|þÕ÷Цi빡ty{{1uÒhT*Ù9Ù¼e§rV!„B!„B!„B!„B!„B!„B!„Óºê”zÆ1rØ@‚.¯<|òt*]:µsX~:w6Ħ6{•a%öµT¥VÛh r}ªªªquU3äúþ$H¡ªªºÙû ŠŠK(*.áÂ…:έ·Œ':*’ñc‡‘žqžK—Ê,ÊScºÇuà\j?-_kö^~~¡âÑþ¦Òm;ö²}Ç>Ó{…EÅdd\à¾{nÃÃCÃаzÍÆzS;8µ¨¨„´ôó3äúþ´oMhH¹óMÛhµuR§®ªªÉ€ÕŽbLù>vü$k~ýÍìüÈÊÊåð‘$ÜÜÜš(æ³5϶2 ¢¢€ÊJ-¥¥eœ¿MqI)#† "88À@ ŠIÏÖsCé:rqqá¦)cðöö¢¢¢’å?ÿjQ›B!„B!„B!„B!„B!„B!„Bqõrqtì-(П ò ùvéj¾[ö‹ÃòâïïKXh0)§Î¶Ø¾-%;'— Y9øúzÓ§ww›§ÕjY±j=Z­777®ë×K\^à À¹s銷1=ºwE¥RQQQÉî=‡ê¼_\RÊÞý‡èÚ¥#îîîÍ>öþGM·in{fkr}ò ŠX»î·ƒ×u:¢é¶Fgk/®®Ê=ãÁÖsCé:7v8Qm"0 ¬XµÞô!„B!„B!„B!„B!„B!„B!„âªPÞ½ÿ0_ÿ3ï|¸€£I)ÍKçØšµ:©i™-¶oKÚ²u7ôÁÍÍöàÍÒÒ2N$Ÿj‚2•¤ÕÖjúø)zÜÆ´o Ô¬Ú\UUUï6ÉÉg€šà×¶Ñ‘Í>vEE%:]Í1== ÔvïÞ @rŸ$›Év¦ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ÜÆúôNÂd2¬nÛ‘Öne;еë7SQYI\l´Çe8kúTUUÕ,_±Æ§u r @ßd^àìÍë7l¡¶¶–`ŽwœËöÈÈRÇŒ`ë¶”—W´ê¸6neN.L:qœÏê &»ïò•¦í»'Ä3mê ÍîÛ40vOFVýúQ#‡¸ìì`èÐNûvt‘‘Œ= Uä­e¥oX¹G-YñÓZ¶{ÆIrŸ¤V—‘cWóšÇà`°Õ-7dq "$$€šê**}Ÿ½uà€¾È=ÈÁƒùíVÖª`‡ƒšÚšf·WVVQSÓüö:åålذ•Ñ£ZΠl³ÙˆŽŠ¤ªºšÐ`zôèθ±#‰‹‹à«oPXTìÙE´Àn·sÓõW’™µŸíÛw‘“KYY9G]âb;f$Ýâ»°~ãVŸ7ïà!V¯ÙÈèQÃ8qb*Áë7n¥¢¢‚‰ L9i’zvç¤IÇÈ®]{(++§K—X&NCxXèás¬÷Y}}Áf³BEe„‡‡‘Ò·7©cFÀÒe«Z<†'ϑվáí=:’/æÎãúë.'"<Œé§ŸÌ›ÿœEeeU«Ë‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈ±§S(?p× õ™ˆ»ìü3ê—·lßÅÛÿýħçµÙlôKéÀ¶í»Ú­¬/Ü~Ûµ-nÿôóoÙ¼e{«Žµjõ†#(;A̼ñ*—õ••|ýÍB6nÚæ´>((»½õ™`ëÔ„öHL <<Œý“Ð?¹Ùý×®Û̺õ›=>OKæ}¿˜è¨HRRz“:v$©cG6©c%}òEwë¶äå"..†&¦òÑ'_ú¬Îµµµüœ{Ö©¤¤ô¦{B<ÓOŸâvß„„x²³sêßÏ™;Ë.=‡è¨HNœ˜Ê‰S]Êü°xé{2}RW«}£ŽÃÔìsP]]Í·ó±Îž>GVú†•{Ô’òò ¾_°„³ÏœFdd8ÇÅ‹W´ª¬ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ›:E€²¿ôJJ$44€mÛÓÚ­lG“›wôô½ôîÝÓeÛyìNßK\l ¡¡ÁØívJKË8{´Ý¬]·‰²²r—r—^|={t÷¸.ï}ð»Ó÷’±7‹¼ý>Cõ'))‘¸¸hB‚ƒ©©©¥¨¸˜¬¬ý¬ß°…´Ý^]sKª«k˜ýц ȈaƒˆïBPP ……ÅìJÛòå«)(ô,8L€ê’e«8kúTôO&>¾‹Éžë#•Ìþh)}{3|Ø z$&BMM-…EÅdfe³qãV—À×Cù¼õ¯H3’~ýúM``%%¥dfeóÓªõìÉÈòY=­öÜ܃díÛOLtÁÁìv;ÕÕÕ”WT——OFF&ëÖoáP~Ïê\ÇjßðöÉÆMÛ9b0½’z0vô–¯XKEE…ÕË‘£T§PþÍ3¯úå¼ú÷   Èã€@+e½µqÓ6—LÅ­±zíFV¯ÝØâ>ÿýà3·ëw§ïewú^Ïé ä±ðÀ2Ë}øñ‘3ïÏÉåÙ^oqŸ ·²aãÖVŸ·5íìÉ1_zå­>wc;w¥³sWºGeÊË+øáÇüð£µÌ»ÞÖÙi»3,¦{û5æißhÊ“{tðPþû*À¬÷>õº>""""""""""""""""""""""""""rléÊþ2 2Ûv¤µkÙÎàÝYû» ÒA©oˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ´-»¿+p¬êÞ=žÈȶoßÕneEDDDDDDDDDDDDDDDDDDDDDDDDDDDDÚ’”ÛÈ€þ}(--cOFV»•iK Pn#ïØ•Nmmm»•iKm}‚ÚÚ™m}ŠeÀ€ïxóŸÿõúVÊŠˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ´%eP‘VS€²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ´š”EDDDDDDDDDDDDDDDDDDDDDDDDDDDD¤Õ ,"""""""""""""""""""""""""""""­¦ei5(‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH«ù5@¹¸¸Š‰?Âf{›í †¿ÅýgÍÚÁ)§|F×®oú&ýúÍâ¶Û±{wQ;ÕXDDDDDDDDDDDDDDDDDDDDDDDDDDDD¤só[€rMM-—]ö K–ìoÕ¾W^ù-W^ù-ß}—InneeÕìÜYÀk¯mdøð÷ùî»Ìv¨µˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHçæ·å\Æ_¤·jßßþö'fÍÚÑìö¢¢J.¼ð+öí+ñUõDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÄ ¿(þy:Ï>»¦Uûæä”ñÌ3 ûŽÓ•åË/dß¾kxþù Ø((¨à©§V·I}EDDDDDDDDDDDDDDDDäØ ©c¡×ÄYL ¤¦BJ_×DŽ&êÏ"""""""""Ò–Ú=@9+«„3æ×¿‹ nqÿÙ³wRZZ@HH|©©ñ$$„rÏ=#¹ýöaõûþ÷¿;¨©©m“z‹ˆˆˆˆˆˆˆˆˆˆˆˆˆÈ±kØPøäCøúK8i’¿k#""þòéGðÆ_:Þ\0÷sxã5˜0Áß5‘£‰ú³ˆˆˆˆˆˆˆˆˆ´¥v P®­…k®™GNN4!U IDAT¿øÅFîÚb™ùó³ê—Ï;¯IIáNÛo¹ehýrvv)›7òaEDDDDDDDDDDDDD¤3¸åfHJ‚.qp÷ž—·ÛMy{»M¸ˆˆˆˆˆˆˆˆˆˆˆˆˆHû lÏ“ýõ¯›øöÛ½ŒÇÓO笳æ´XfãÆƒõË“&uà®»³dÉ~þüç8þønÄÅ“—WÀ¦M‡:4¶®@DDDDDDDDDDDDDDŽEÕÕî—[câxþY IS ¤Ä·uk¬?xoVë÷¿òjزµcž7u¬Éè8f t‹‡Ü\¸êkõt' .¹Î;úô1ëöî…ïæÃ¿þ}äû5j\{ Œaa™ _ ÿ| ÊÊ\÷÷×=ªÓ/.½ÆŽ…¤žPU °hüû]ÈÏo¾¬ÍgN‡ ·AMŸÎ˃+áíöm¾«gc§ŸOÿ¾å}î¾ù¶mÎï ´•Ý'OégÀq#!6Ê+ }7|¿ÞEE¾?oS‘‘ðú«0x0üò>˜7¿íÏy4±:æøBkïQ[W—^=`–Ÿø|ø‘ûý¬ŒWVÊ6åé|äé¼P§½ç#«ü=æxs½þ®³ˆˆˆˆˆˆˆˆHgÓnÊûö•ðÀKÍIí¼ýöTŽ#uô¾} ¿yMNŽdÑ¢}¼ôÒzî½w œGŸ>‘õÊû÷—¶AíEDDDDDDDDDDDDDäXöêkЭ› 2|îÏʆ‡›rÒ:#FÀ½÷ÀˆáÎëÁ¾?WX¼øG;Æyý€æçì³à¦™½ß}ùK.†ïwΌݷ/̼N7Üù¾¯·7ìv¸ý6¸æhTß`Lí pÎ90ãطϵ|` <û˜2Ùy}B‚i§3N‡_ÿæÌõ}ÝÃÂ|̶䯶zþY×sÂ!æçÜsáú!'Ç·çm¬gOxþ8°íÎq4³:æø‚¿ïÑ™Ó͸Ù+ã•Õ±®1oæ#oç…£q>òç˜ãíõv„qRDDDDDDDD¤3i·å;ï\Ì¡C‡—‡3jT—V•+*ªª_ŽŠrPRÒ𾸸êðú úu……•¾¨®ˆˆˆˆˆˆˆˆˆˆˆˆˆˆt"[·ÁUÿçïZYÚn8ç¼æ·Ûì&prð Ø¼v¥u¬óžüêA ‚ôt˜ó%¬Y{¡¸Ø7umì¾_6ƒ½ùøðC¨©…É“àÎ;LÖÍß? 7Þ µµÎe‡ƒGmÞ ¯½n²jžtÜx¤¤Ào‡»ïq.ç¯{Ô=®¸Üìý°>ý Ò÷@\¬ ô:y $tƒîƒ_üÒµüÍ7™ ®êxëm“ñ´¨ÈîÝ{ôî ¿~~ZÙÙ¾©sðpóºb¥ÉöêNiú¾zµÕÜ/¡Ooøä3X» M¶×sÏ1AÑ={À]wÀ#ùîœuê2¿þüVˆˆðýñVÆ«¼¹G¾¯F‚Ç3×VScê䎕ñÊêXWÇ›ùÈÛyü3Yå¯1ÇÊõúsœéŒÚ%@yþüLÞ']»†ðøãc½:Nmm-Ó¦õàŒ3’X¶,‡Çsx}Ã>6›åꊈˆˆˆˆˆˆˆˆˆˆˆˆˆtHUU™Õüök¯1dåðÐÃPQÑqÎ{â ðèÃP] O?Ì6lm¥{w&ì•W¶½÷ä0™G†ñÇÃ’¥Îåo»ÕÀe·šT€› ´î¾ &Ÿd2p®[×PÎ_÷(3 žü=ÂÂEÎÛÿh2wž4 &¡¡Î¿v;\r‰Y~ûmxù•†m‹~€mÛà˜rÓÏ0A¹¾i^óòLý;2¶ÕW_›ŸÆ'³}»¹¿pÊ4×Ì¡¾pÎÙ0ó&@ æ|'LôýyŽvVÇ+¼½G¾¯ââà™§LÀïÓ€[oèh÷ûZ¯¬”­ãí|äí¼à¯ùÈ*9V®×_ué¬Ú%@ù¾û~kzÿýÇÔÂÞÎ"")-5™’ + ´3wîYNûT4Ú¿õÇ÷‚ƒMpÝ´“aÐ ˆ…ÊJÈÏ7Ù†.„ÿ}ä¾ìÔ“MáC!$²²`ÁBxû_&±©3§ÃYgÂÀ {3`þ˜;nž &@M5|ý-¼ðG()ñMÙ«®4ÙN›Ú±.½¼åöéßÞ›åº~Ñ÷®ë–-‡[nkùx¾Ð½»¹f€¿½ »Ó›ß×Êýõæ¼aaðäoMp磿†9s=¹2cø0¸ò “26ÖdE\³þõoX³Öuÿ ãÍùf¹¹W󿇜ˆ‡ÓNu‹‹ƒãÇ™å·ÿÕUçÝYpíÏL=ΚÞú€°¶¾G_Ìiþxs¿4A{&»hÚî†mñ]!:Ê,ÿ¸Äµlö~6vŒÉ^êË:DÎöšŸßü±[âiß°Rg_´ÕÍ3Mb·xˆŽGä4u~÷?°¶™þÔRÆÝ5kMà]p°é÷Í[zÓVII&ðuÏxùUó¬|ÿ]óuqÇʘãmYoÛ¹NßdøÍ¯Í1ââÌù–¯€¾eÎÛ”•1§N` É|Ö™& ¬ÍiiðÅÜ–“6øâ5åÉxe·Ã®]á­™ Û[oiùøÞŽWVËz;Y™:Â|Ô7Ù³þ ÖÇoú³ÕëõÅ8)"""""""""­×æÊ«V`ÅŠœú÷÷ß¿”ûïwÿ 6Äf{ƒñã»±dÉ$$„‘“SÀÎî¿&w÷î†ßDvï櫪‹ˆˆˆˆˆˆˆˆˆˆˆˆˆtJÇÃS¿ƒž=œ×™ÀžÄD(.v  0Á/gé¼>¹ù9ÿ<¸û®Ap×^6¼OI1?×_ç¼ßE@\,Üs¯oÊkn¿Í„ïÛg‚ ›ãíýµrÞË.5™4—/÷.8ùŽŸÃŒëœ×u‰ƒiSM@üž1qu‹7¯¥¥ë&0¾¶ÖŸ}– ¦o,ulC0Ù¼ù®e«ªL¶ÜsÏi¤j Ý#pÎ/-sÞVØ(¬w/X±Òµ|—8óº/Û÷uŽ5¯î¾ÀàH¼éVêì‹¶št" kÒçºÁé§Á©§À¿ƒ?q_¶9£Ž3¯›65tçm[½ÿlÜhú|MMCÆëÖ²Ò7¬”µÚÎçœíü¾K(}Ú©ðØã®c™•1 <^ù3Œá¼~ð`óÓ«÷ÈÖŽW×Ï0¯+‚?¿lýÜ-WVËz;Y™:Â|äi>’#9Þöç¶š[Sgñ\›(——[ûmÞС1¬_o~3»pawÝ5Üiû† 9x°¼þý!1–Î'"""""""""""""Ò™ ¯½áaP]sæÀ÷ #lvˆ‘#Ýgè»ýç ÁÉs¿4c…pÜH“…16þôG¸âJ“e´©W^ƒÿÌ2Á)zÁ¬{ï}øË&Ðì·ÃÉS _ŠÉrlµì¬ÿ³ŽqÇípõ•­k§;a‰fyÚTøý“fyê©&©±ö‚éÛ×¼ú¨¨p¿Ÿ•ûkå¼çc^sóà…ç`Ð@U\ ë7À߃Å?º/{ݵ A•ËWÀ+¯BÆ^èÝîºÃô¯ûî5ï[¶6”+;˜j~šÞ€¹æ5¾«óú”óZXh‚óî¼Ý7½øgs®í;Ìú^½L–Ȫ*÷õ¯ã¯{TgÚTóºkd7 œ-)1[C†À ×›Œã…¾C~üñœl²Ö~ù•ïëw8 ·¼ŽæÛ¦)oû†•:[m+€×ß0ý%c¯ÉhiïºÃ”}ð“QõH¥#"Ìu\y¹¹¿eeðÇ}ßV¹¹°`aËuiŽ•¾aµ_YmçÊJ˜ý?øn¾™Ë ‚[o†„óeÛwÀ¶F™g­Œ9>ÜÌùñ'ðÙç¦ÞƒÁUW8GSVî‘;­¯ú÷‡™7¡CðÐþ™óZ¯¬–õv>²2/t„ùÈÓþìŽ'cŽ·ýÙ×ó¯'uϵy€r` èhG³Û‹‹«¨ª2¿™¶ÛmDFT¿}Ê”¼÷žùßáÏ>Kg÷î"úô‰¨ßþê«ê—»wcàÀh__‚ˆˆˆˆˆˆˆˆˆˆˆˆˆH§ñðC&¬¬ ~~'¬ZåºÏK\×%&Âÿ]m–?ùÿmö-[aùJ˜õDGÁÌ›LæÊ¦²²Lðß‚…–fÈ–.3AOŸ}×\m‚LFŒp Pö¦lMsÐUMuëÛ©¶¶¡lãÀ˜ÊÊÖWúÒu?333[΂èíýµrÞ.]Ìý€†€·:œ4Éü¼ñ7øËëÎۻśàv€ïæÁý6¿ååÁm·ÃG³!>Þô¿GÝPvó–†å©'Ãs\ëVX`^CBœ×׈Õ.Žc<¸®ú?È?dÞBL 8àþúëøëŒÕ=óåWÝïóÇM0hb"¼ýOxùó²2/t„ùÈÓþܘ§cŽ•þì«ëõ´Î"""""""""â{[Ÿ 55žC‡®kögÊ”Äú}‡ ‰áСëøúë³ë×]xa2ÁÁ”—WsÞysùá‡}¤§ñÔS«ùË_6Õï{ùå)Øí¶¶¾$‘cÒÀ ÙîÞø›û`°æœu&ØM°î_Þpݾk— 8sº *iÉ¡Ã)u™U¡!%2²íÊbbàŒÓÍò;ÿêf­­Ü_+çÔ(Kâ{À 3áÔ3`Ò¸îzX{8ûéÌMpYcgži‚++áég\3s––¬÷Ìò ·­X ééfù¾{á¼sM¦ÃabO™“'›íÅÅÎeCCÍk]f܈†ïQ¯ïC‡e] uíuüu’’àùgÀf3Á©óæ»ßoÅJ¸ã.È/€>½áÙ?À‚yðòK暟{Ád%o‹:ïÞm²b¦í6Y”##M6ôî3Ás}ûº–±Ò7¬ÖÙÛ¶:’Ýé Aͽ’šß¯¶Ö5chJŠÉ溿•¶²ÂJ;·Å³P§µí\é&+kö~x¶Yž2Ù9˜ÔʘS7>”WÀ_ÿ†‹êjsßÛCkÇ+€Ë.…ÃáÇ[dn­ÖŽWÞ–µ2Y™:Â|äinÌÓ1ÇJöÕõzZgñN›gP¶*11Œ»îÎ3Ϭ`íÚ<&MúÄe¿¨(>8Êe½ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ´NêØ†åO?õ¬ìq#ÍëöíÍg ]¸.¼ÀÀ 6ù¸67ßQÝÚ¯­¶RöhrÖ™&È©¼¢!Ü+÷×Êycb–Ÿþƒó¶µëLöÖÏ?èh¸ôbX½ºaû˜ÑæuÝúæ3sî<œ;6Öü­á¯{Ô»¼þÓ.Û¶Ác·¼ÿñã *ŠKLfÍÔ±l¶Í¸ÎØ5ÍJë‹:ß}OòÝC›¾‹.‚¤žðò‹pñe&“n+}Ãuö¦­êDDÀe—À‰'˜,̱±&üž ˆ‰6ûÔË¢"8~¢é×Éɦ]xÉXšÔ®¿É9“»•¶²ÂJ;ûâYmçæÔQ&º.¨Õʘ3d°yݶÍÔÑŸZ;^EGí7›ë~áOÖÏëéxåMY+ó‘•y¡#ÍGM5ןóṯҟ}u½žÖYDDDDDDDDD¼Óᔞ|r›6âÓOw»ÝȇžN÷îúzCoÅǛׂÈÍó¬l×®æ5«™àd€¬,×ýźS§™×yó2ºcåþZ9oã¬Õ‡k@PI |ó-\|QC e}÷“1£á§åG®St”s`å†pÙ•0ãZ˜8º%@U¥é§K—š@¥øø†àÌÆuˆŠ2¯&p­é¹ê÷/m¹^þ¸G}zÃ1ÇLKƒÛîh9Pìæ™pݵæ9½éfÈÌ2ÁÂÓ¦Âm·Brxî¸ñfX¿¾mê &oÃFó³l¹ÉNœ˜hËþ3«Ñy-ô «uö¶­RúÂ+/CB7çõÁÁ&¸²Nkðò Læé5kaÁBøó‹0t¨y–|ÕVVXig«÷È—íÜÔþœ†å¸8çmÞŽ9]gÿ~Ïëãk­¯®»ÖŒïŸ~;v6¿_kx:^y[ÖÊ|du^è(óQS-õç¦Z;æXéϾ¾ÞÖÖYDDDDDDDDD¼sT(Ùùøã3xûí­üýï[X·.’’*zôcúô^<ðÀ(úô‰ðw5EDDDDDDDDDDDDDŽnuYë¼)Ú$ãÝ‘´v?iY—8y8{õ×ßag ÷×Êy€EGCNŽë>™‡ƒ×»Æ;¯·ÙÍku TW¹^A×uÙÙðô3®ëãâàÊ+ÌòšµÎÛr4Ô·9ч3qVUÁ¡CÍïç{Ô³g£€½ÝpÓ-›Ûüþ‰‰pà ³üȯîGM Ö[ü#üóMèßfÞwÞíû:»óíw°y ãw&³Ô7,ÔÙJ[ÙlðÌÓ&h¶¼þü |7Ï܇z%ÁŸ‡„ÏëõÃb“ùtäüè³¶²ÂJß°8µU;ƒyæëÔÔ¸n÷fÌ©»ÎÊJïêä+žŒWœg^Ï=Çü4çчÍÏ›‡W^sÝîéxe¥¬•ùÈó‚¿ç#wŽÔŸ›ÓÒ˜c¥?·åõ¶TgñŽß”¿ùæìVíg³Áµ×äÚk¶qDDDDDDDDDDDDDD:§º ž¨Hˆ‰ñ,è#' „=šß'1Ñõ\ÍY·JK`_ ™}]¶æpD§ 5= èñµ©SMæÖòrøqIËûZ¹¿VÎ{à@ÃrD÷aA‡ÿz¡ªIðd]¿úúkøÕ#Þ××K/1×P]óæ;o«Ë` Ý»»ïKýû™×={\ëÝX{ߣðpxñ°—‘3[ì7qš{µj•ëö’øïûððC&°Ë×unIzº PîÒÅy½•¾a¥ÎVÚjÐ HI1Ë¿}æÌmØVYi‚±‹ŠÁ˸Y²³Î‚¡mŸ£–Xig+eÛº»7*ØÚ@ZhyÌ©ŸCÝm7žŒW²{3^Y)ke>òå¼ÐT{ÍGîxÛŸáÈcŽ7ý¹­¯·¹:‹ˆˆˆˆˆˆˆˆˆwìþ®€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆt «W›W› Î>˳²kÖ˜×ý‘›2Ù¼–––­-ï/ÂÏï„E?xV+eËÊÌkx„wå"=,kÕÔ)æõ§UÎõpÇÊýµrÞM›–'è~Ÿ‡¿«<-Íy}]¿<{\Ífõï×^c–¿ù²²œ·¯\Ùx^×o €O0ËË–·|®ö¾GüÊg:džƒÆyÍég^KJšß§n[X˜óz_ö+wºw7¯……Îë­ô +u¶ÒVue¶lñ켭ѧ·yÍÏw^ßVÏÑ‘Xig_Ü#h›vž|’ymÍ\VçHcNÝ=:º5ÉÜÛž<¯Nœ cÆ5ÿSןøyï.{²7ã••²Væ#_Î µç|äŽ7ý¹Î‘Æoús[_osuï(@YDDDDDDDDDDDDDDذ±!8å¶[`Ô¨Ö—ý|TW›À‘[fºnï—Òd6g®çïÚC]–¾nñ®ÙZ[S`ÂßÖ©%v;Œi–×®=òþVó8k×™å³Ï‚ÐPçí½z5HÍÿÞyÛgŸ›¾ Ügú—U'Àë¯AHäæÁótÝ'7¯!ðéÚkL¦ÎÆ®¼âA6ÎÎÚT{ߣáÃàŒÓÍò¯c²K¶FÆ^󚔃»ßçôÓÌëîtßÖ¹%£Ž3× ou¬ô +u¶ÒV¹y ËÆµþœ­qò”†ÀÊ+·µÅsÔVÚÙJÙ¶lç#à ÌòsZ7—µfÌi<‡>ô`ûÝ£Æ<¯¬òv¼²RÖÊ|ä«y¡±öœÜñ¦?×ii̱ҟÛòz[ª³ˆˆˆˆˆˆˆˆˆx'Ðߑޡ¶~÷{øëë&h篯Ã×_ÃÂE°w¯ 6 7Ùþbc³!îÛÿú7\w-œ{ŽÉú¿¡°FŽ€›n€À@È/€7þê¿klɪUæÕfƒçž¿þ ÊËM¶½=áåWÜ—KÛ yy&`æ®;L ζí`ÃdwìÓ^|É÷õMîÓ¸³ný‘÷·r­œL[þùE“ ÷¥?™öØ“Àokèÿ}Ϲ\ö~øÛ›pËÍpÁù:ÞŸm2[È…`‡ÉØ=v <õs …†BT”Ùgè8íT8îp^^ÜsoóY7_} Æ3u~ýUøË¦Ì¤ᦛÌ> 6»ù¢­¬Þ£kf^×®ƒÕk 2Òýyjj ¸¸áý‚…¦ý££àÏß^„¥ËLFÍ>½áú ™,?þÄ·u~ú÷pð ,_™YPUiž¥‰áŠËMÐdQ|0Û¹œ•¾a¥ÎVÚjëV“51î½Ç%._ñ1âþžÙl0ë“~õÈÉ1Á„]»š/F¸ü2³_^ÌþŸïÚªND„©CÝr†~VUeÚÁíl¥¬•vnlè3 Ì8râ &8Òá0}öu7s™·cξ}ðÖ¿àúëLÿùûßà?³ =ìÐ=áÈAžÞܣƼÛ­ðv¼²ZÖÛù¬Í þž<íÏVÆ«ýÙÛëµRgñŽíð“ÇܶaÃ[NNŽ­°°Ð–’’bËÉɱ;Ž€ââb{MMMPXXXPee¥±Ûíáµµµ‘µµµ± ,øxÅŠõÇ;öv¼ÿ0à;WADDDDDDDDDDDDD¤Y³fͪ_N›Ú°¡Ñÿ§Ž…ß=ññͧ¨&Ou^¿ù5œu¦û2p×/`M“ÌŒ³Þ1íyÌdðkÎ+/™ Å?½oÿÛzYw~÷œ9Ýu}~>L=µùr]<ì~Û‘ÊzkÚTH pþE­Ï éíýµzÞ[n†™7ºßVZjú†»Œ†6üü6¸îg&Xµ9^ìš±öþ{Mkcµµ&3æ3ÏšÀÍ–\z‰É8ëî¼;w 3ÍýmN{ߣo¾lÈ,Ù’Ü<8í çuÆ›º†…5_nÞ|¸ïôç‹:Ûí°`^ËçÌχû„FŠRÏJßð¶Î`­­F6A‘á-”øç[ðÒË ïûö…Ùn&Û¿ß9nÜäºÍj[ý°À5ÛlS ™ç¸)+cŽ·e½mg0}²q€oS¹yp×ÝîÛÙʘ¿z°!£msž{Þýëz+÷¼¯š3†'~~äºÝÊxe¥,x?÷ó‚¿æ#oû³Õ1Çjöæz­ÖYDDDDDDDDä˜SÛhùðÿOž<ù|›ÍvÐf³ÖÔÔeAAA%%%•v»½2<<¼¦¢¢¢:>>¾fçε‘‘‘µñññµÃ† «}üñÇk›ž¢Í3(Ûl+@¹ÿþþ®‚ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ%+V›LÈSN2ÀÑÑPQ……°c',[f‚OgÚ¬®6Âß̓‹/‚aCMæÆ¬}°`ɦ——ç¿ëjß<é{àÌ3L–Ãòrs½ó盿Z—ÿv7þ÷‘ÉÎyÅe0p *-­ÛL{´TÖ[‰‰æµ¦Æd+l-oï¯ÕóþåuX½Úd01Üdpiö¾GÑ1­?GSK–Â%—ÃÕWÁÄñ&sep° Û²>Ÿsæ6ß½©sm-<ü¨ÉŠ9l$õ4–EÅæ~-^ üÏôw¬ô oëlµ­V­‚K/‡+/o¨ot´é«ùù› »Ò`ñçr{÷š¶:a" lÎép˜znßaO?úØë¶E[YaeÌñ¶¬·í ð§—`üñÐ/Ìs_^f²ìÎÿÞSº¿V+cNuµ æýêkœ9r„É]]m꜑ë7Àâ[Ûòžñv¼ò–•ñÊJYð~>ïçÍGÞög«cŽÕþìÍõZ­³ˆˆˆˆˆˆˆˆˆx®Í3(§¦¦6=ü1MÊ"""""""""""""Ò‘µ&ƒ²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÅÚ!ƒ²½}®DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDŽ P‘V ôwDü¥kh)Ñ‘,+gÛ¡W§S²× éG€ÍÎYûÙ|0¿]ÊŠˆq¤çè¬ä$ÆF±:'ùûüSÉ$:ØAJT$ËËI+(òwuŽIê“âQŽ R¢#)¨¨dg~¡¿«Ó¡éó³Hë„DÆ—ÔŸÒ‚<îÝéïꈴ™A“ϧkò²6­`çòoÚí¼á±ÝˆëÕŸÎúMÉ IDATÒü<ìÞÜnç•Fl6Æœw6{ék‘³sCû”ãÏ‘¿ÆçŽJŸÍÚú¤ˆˆˆˆˆˆˆˆˆˆˆˆˆˆH§¥å6686šÇÆ",0€?¬\ÇY9þ®’ööé'Èë·(ÀÂO†v‰á†aX¸×³@3+eemÌél×ëkGzŽn?náAä”–µwÕ,k‹¾1ûì©Ùí¼¼fS§P¾t@2·7Äeý®‚"®ûj¡¥c·GŸÔ¸!MÍ:óäúÏ„ Pn™>?wïNŸBψ0·ÛÎûô[òË+Ú¹FGŸ2ŒSn{Š àP¾󷤯ny>qÆUL¼ú^—õ÷îàý‡.µ\Ÿ«ÿ4—€ ?¾óœ‚`¤U|Õ'=}¬šxÕ/q„EPœ—ݦçiêÒ§>ÀÁ²÷þ¬e?Iè7‚Ô‹o må¼v+{,kïç×ß:ÛõúÚ‘ž#ϾÐ}CŸÍŒ¶ü Ü}²3wÊ…ýú¸Ýö»ekø*=³k$""""""""""""""Ò<»¿+p¬»~ØzF„Ì­#û»:Òì6="°ÛlíZöX0¹gw²ŠKÙîa@'e;S;w¶1§³]¯¯Yy;:õ£S{ôI«}Có¾ˆxêh}ö˪ª)¨¨tú©­­õwµÜJ½è¢º%Ý… WÜíïêtx6›¨nIØlíû+!·3ѳà+}²³÷義Ó(ÌÙKnúÖ6+Û™Ú¹³=¿íz}ÍÊ3ØÑ©oÚ£OZíGÓ¼_êîßbírfÏuº Ê!!ÁÜpõEôèÞw>øŒ[v´éùªýwuýcnñÞñ ]yâ„1„0ý£¯(­ªn—²ÇŠ“z$Þe@nmÙÎÖÎmÌél×ëkVžÁŽN}£í|´#9i{ëßß0lõwŸÕÅSíÑ'­ô Íû— Ó­ g÷MbX—Xº„SS[KvI?dfóî–TTú»šÒ ÍÏþ«k7óñÎô#î—4b"©ßJT·^8B#°PYVLiÁAŠr³ÈX¿”ÍófSV”ßfu­©®v»Üœß~À–…ŸÖ¿wñm ;íò6©[G“4b"§ßõ<Žþ1s•e%Çôy¾ê“ž> ™•>©þ Éc§°Ë‹ È­-ÛÙÚ¹³=¿íz}ÍÊ3ØÑ©o´¶ü Ü}ÒJß8Úæý××máõu[œÖ}tÎ4bC‚ÛüÜ"""""""""""""""žêTÊq1Ñ\uÉ9$&tm·s¾¹~+ñ¡!ðòšMív^iaA„´{ÙcAJt$=#ÂX˜™Ýfe;[;w¶1§³]¯/Yyêm§²¦†Êš§÷¾Ð^}ÒJßмßqõ‰Šà…ÉÇ»¬ïNïA)LMJäÖy?’WVî‡ÚIgÖžýØ}é–2Üi]PH8A!áDuK¢ÇqŒ8ã*橾qlJ+(â›ôL¶*`uNJˈvpQ¿>œ›Ò‹îá¡ülH?þ´j£¿«*r̪(-æ?÷œCmm Á!DvI¤ßÄé ?õrB£â˜zó“¼ÿÐ%mrîÜô­üïÑ«ÚäØ"G= Ò’ÇN ´ ì­kÚ­ì±®³=¿íz}éXŽÔ7Ž>íÕ'Õ7DDDDDDDDDDDDDDD:¦c>@yôˆ!L›<ž¸˜h¶îØÍÀ~}ü\+™Ü³;?dfSS[ÛneEÄÐs$ú¤XõÄ2ç?„Î-+繟ÖÓ/&’¡q1 ‹‹õSÍD:‰ÚZÊ‹ó¨()¤ä`ÙÛ×R”» WÜMlÏ¢z“Ÿî犊ˆˆ}SM Ú§¶¶¦ÝÊŠˆ¡çH:õIéh4h`ãF}Q´^lll}ßÙ¾}»¿«#íèÒK/eذa,]º”9sæø»:~×VÏ‚ÚÙ™Æ9–óÊq±ÑÄÅD“{ð_Í[Ìö]é<úË[Úôœ—Hæöㆸ¬ßUPÄu_-l±ì©½{pzïô‹Ž"ÊDfq ‹2³ù&=‹Ãú3.¡+5µµÌÏØÇËk6QZUírŒC06¡ ñ!!Dd·s¨¼‚õ¹y[ZÈJh¦õJäÌä$ÆD颢º†ƒå¤±)/Ÿ¯Ò÷²·¨Ämù!qÑ\Ò?™QñqD;(ª¨d]îAþ»5õ¹[n8 )"œ_Eψ0>Ú‘Îë·±ŒÕ²'$vcRzE„@ni9˳ð¯Í;È.)uÙ¿oT$ÿ<}’Ëú¹œî²nåþ\îY°Ì'eÎéÛ‹Ññq¤DGÒ-,„ÐÀ@ʪªÙ[TÂÂÌ}ÌÞ¾›âʪf¯540€‹û'sbnôŠ',(’Ê* **É,.á§ý¹¼»eg³åÁÚ=ª“Jÿ˜Hefû¼¬Õvˆ f|÷xFv¥_t$ a¡„bÃFYuûŠKù"-ƒÙÛw»”õô ²Ûùô¼S `NZO¯XçöºBøô¼SqØycýÞÙlî••1§Ž/ú†·‚8¥W"'õL``LÑÁªjjɯ¨`Ç¡Bgíç³]{ê÷÷ÅõZuRÏÎOéÍ ØhBØWRÊâ¬ýÌÚ²“ƒåÍ–³Ò¯¬ŽÏYyëD9‚xeêDzG†“VPÄÏç-¡¨²Òe?OÚª#< võOæôÞ=è6H/(æë=™G,kõyÚ¯®œÂÌჸbÎ|²Š]ç¬Qñq¼8e<·Ï_ºÎs±•Ï ¾ÔÖ}ÒJßð×¼ï‹ûk…§ó‚Õç·Ž/Ǻ:é…Å ‹!8ÀÞâ~}"#xhÜHR»u!&8˜‚Š VåäòîælÏ/l¶\{~f¨sNß^ ‰‹¦L]B‚‰t`³±¿¤ŒûðŸ-;Ýö™Æ<óôó³þþ÷‘7Ÿ‘|ñY¼ÿ·••>Ù2Ö.†+î Àì´- ÈÁ o.àÛWbÇ’/]Êßðæ‚üøÎs¬ûòÝúõ#Î¸Š‰Wßë²ÿÁ½;xÿ¡K}y nÙ~Úô?ñ,¢»÷Áf³q(3í‹¿Àf³µÙyƒBÂ~Úô3…èî} §²¬˜ò¢| r2ÈܸœÕŸýÓ©L\R.ùý{.ÇšñÆ"—u{7,ãó?¸þÎdì…7ÓsØxÂãºM@ ÃdÉÛ¶†u_¾Kööµ.e¬œ×JߨãM[¬> ƒ§\H·~ÃéÒ{ a1] ŽˆÆf³S|p?ë—°æó·(ÌÙëq½B"¢9ïÑ“˜ÌÁ½;ùø‰T”4?Ÿz£ÏèÉ$9™èÄ>:B(É?@ƺYõéß):岿•>iõ9|òEô2–¸¤„wI (8ŒªŠ2 ²÷¶ò;Ö=‹Š’¢f¯Õý9:¡7§üüi¢º%±ñ»÷YöÞŸ[ÜßÈøžté=€´Ÿæû¼¬/Æ«°è.ô:îDºM\¯DtM$84l6*ËK)ÊÉdËÂOXÿÕ\Êz:ÖÙƒ¸öÕy…„±uá'Ìÿëãn¯+е¯Í# (˜eïý™ÕŸýðÍ\æÏ±.ÐL¿ Óé›:.}KuU%åEùä¦oe÷ê…lžÿ¿úýý=w$ÊÐS.!¾ïP!È"}ÕÖ|ñ6¥yÍ–³Ò¯°Ùè?á žt.]û !8<ŠªÊrÊ ò8”•ÆþëÙ¶ø ²ÝönÌÊ3X§µã³'mÕžKŸÍ,Þ#OûÕ¨sfpüewðŸ_žëvží1$•sz€Ož¼ž}[W;m÷æ³Y[hë>i¥oøkÞ÷Åýk¾üòK"##yöÙg | 9r$/¾ø"aaa<øàƒÌ›7Ïò1/^ŒÃáàÉ'ŸT° —f̘Á#<â²~Û¶mLŸ>Ý5j‡~˜ÈÈHöíÛçïªxìhzÔÎÎ4æGë¸!""""""""""ÎŽùåe?­eoV6[·§QS[KHHð‘ ùÑ•Sêt’£"HŽŠàÿ÷sÚ½ˆ vððâŸ\Ž1!1žÁ±ÑNëâCC˜š”È”žÝyvåz¾HËp)Ào'Œf|÷x—õ‰¡$†‡2¾{<øÃJ¶Ìw)åâå“'Ð'*Âi}¤#ˆHG=#°ÛlG Bµrêœt8KfiU5+²sÛ­¬'Þ8åâCCÜn‹°Ñ?&ˆÐ@÷C¨§Ï`eM +²pRÏÆwǸ˚šÐÇáàªE{÷{u]îøªoxch\ Ebx¨Óú ;„†Ò=,”’ªªf¤Ú[€ÍÆCãFrZïNë{G†Ó;²/g%'ñÐ+› ò¶_YŸ›²ú…ò‡I©ôŽ gI÷/ZáœìM[ùûY äÙIãÖ%Æi}ÝÛ+÷ÈÛ~µ$+§>€ul·®nŸ“ãºÆP\YÅF7xÞ~fðµöè“G_Ü_oy3/øâùõõXà°3êp;-h e…‡ÈÏjŸ è¶æ çÌû^!¡ÿH§õ]“Ó5yp›7$"šóù;1=ú:­"8<Ѝ„^ØlmˆÖû¸Iħ sZ—@ÊøÓé{ü©,xó ¶,øØççõ–?Ûêh3áÊ_à‹pYÕ-‰¡Ó.¡ÿ„é|ñÌmìß¹¾ÕÇt„†3ý—/“˜LQ^6sž»ÝçÁÉ ŽszÙµC¦^L¿ñgðÙS39°{³ÏÏé­ WÜíÒÎŽÐðúqcè©—óå w‘³Ë5ˆÆWýy•¿¨£F3ƒ´Ÿæ³»û/•iNß±S¨,+aïú¥íVÖþæß„Ç%¸ÝIpŸA. u»ÝÓ±®¦ª’½ë—’œ:•¤‘'‚͵®Ÿ‚“†O ÈüNÚÛ>wü9Öuë7œSn{ŠÈxçÏÐöÀ ‚BˆèšHeY±S€²?Ù8ù¦ßÐÿ„³œÖÇ$&“˜Ì )ç3÷…»ÉÞ¶ÆmyoûU`p(§Ýñ,½Fžà´>(8” øžDÆ÷¤×È©()tûeMY}ŽZ3>{ÓVþ~¬|6³r¼íWékÕ°öz<›¿ÿÐ¥^uŸ¡+J‹Ù¿Ãu¬î(ŸÍÚ£Om|qÅ™Ýn'))‰ŒŒ jj”¥[Œ»ï¾›Þ½{ø,XPäh¤g¡}¨¥­èsŽˆˆˆˆˆˆˆˆˆ+Žùå¢6oÛծ眽}7ïløcñ™Ãqé€dŽñ· [™½m7£âãxêı|¸c7ÿظ ÝãùÕ¸‘Lê‘@ߨv8gXùdžmTÕÖ’Y\Bqe6ƒã¢¹eÄ zGFð‹ÑÃX”™MA…sàνc†×„|»'“/Òö’[Z†# €áa<:þ8šÉ6pÕ ”ú? _•“Ë_×o%³¨„¤Èpn1ˆá]b¹sÔPÖçb{  Ýœÿ>!,´ÕÁ¯Þ–]“ÇÇ;ÓÉ,*¡Û­ × íOxP ¦Žà†o~pÚ?­ Ó>4Ù›Nê‘ÀcãGpî'ßPV휱­¦ÉbY)ÛØüŒ}|°-ÂÊJ™˜ÏåûÌ&¥rÃ׋È-+w*síþô‰Š ²¦†¿­ßÊ’}9*¯ Èn§[Xƒb£)i!ûr+÷¨Îäæú–îË¡ÒÃÿhiMY_´s]Oߘwˆ/wïeW~TÖÔHßèÈfƒÁ¼ygí礞 Ä…Ó?&Êm`Ï ‰ÝÈ(*fwaÃsouÌñUßðT¿èHžŸ<ްÀ@jjkù:=“2÷³·¸;ì`X—X64é_¾c½uÓðõA¤ßîÉäÓVV2¼K 3† &ØÁS'Žåú¯‘SZæRÞÛ~ee|vÇÊ3éâÙIã;’Rîþ~©Ûl™Þ¶•?Ÿ…ûƯNþ"-ƒ/w泌²Š1Q\Ò?Ù)@®)+÷ÈÛ¶Ú‘_ÈÒ2º††0¶[÷¬ñ&0sUN.ÕnÆ;o?3øZ[÷I+}Ã_ó¾/¼¬<¿àû±În³ñPêHº‡‡’^XÄÛ›v´¸eM ŸìÜýÙVV2 &Šë‡ [X¦Ždg~!;ÜdRnïÏ }¿wŸìÜá²rBƒÙ5–k‡˜Ï±¿w?ûrK ¸·óocž~~þíÄÑL9üE­qÃ7?¸ü›Áÿ>òöY°úYÔê¿­¬ôI_q„†•Л~ãOgä™×@m-?¾û<ÕU>;Çú¯g±ñ»êßÙŒ8ãjŸ¿%“¯´>f˂ٺè3*JŠèš<ˆá§_UŸEÎׯœ1=úR]YÁòÙ¯²gÍ"J ä ".®}‡PYêša>oïÞ¼a}S§1íÖßðömS©,wž3k›™‡W~ø:5ÕUìÏ ¢´{@ ñ)Ãù]Ä$&3éÚÙýÓ|ÊŠ¾Áçõ–·mu4òÕ³°kù·lš7›Ò‚<‚BÂè>p4c.˜‰#,‚“oþ-ï=x±Û`³¦‚ã8ó¾—é–2œ¢Y|úÔLŠr³#vdzôwJ«ë6û‘+ÉMßâ²>kóJ6~û>9{¡¶–žÃŽgÌ7ã‹`Ê¿fö£W:ío¥Oúª?ï\þ ëç¾KyIA¡áô>î$Fžy aÑ]˜þË—˜ýÈ”:àTÆWý9¼‹speD—î('§š@´=kðxLoMYŸ´óáÏ‹û·¯cëŸs0c;eEùÔTUâ$.©ÙÍ\·7cÝîÕ HNJXtºöä60¾÷èÉäïKçPfÃï©­>¿þëâz àì^#($œÚš¶-þ‚Ý«¾§ ;›ÝFHd, ýGºÝùsîwéíõA¤ÛœËæùÿ£¼¸„Ç1ö¢› Œeú=⃇¯ 8ÏÍyÙ¯&Ïx¸>ðuûsÙºðŠæä *!‰i·ü{@@«¯ÃÊ3Øšñ¼o+> V>›Y¹GÞ¶UÞžmÜOxl7zï6€5ñpkæ¦åÔ4ù7x7^µ…¶î“Vú†¿æ}_ÜߎêüóÏç…^ ??ŸñãÇSÙÆ_8yòd^}õUBCC1b%%ÇÆgøŽ OŸ>|÷Ýw\~ùå¬X±ÂeŸ;3»îº‹ÚÚZf̘ÁÂ… Û»šÍªªjø}LõQô >œ«¯¾š‰'’@II ™™™,^¼˜wÞy‡ôô–¿è»£{çw˜={výû_üâüìg?ócŽ}þ|Î?ÿ|.¿ürŒÃá --O>ù„·Þz‹òòò#à(r´Ž9GƒÎ°/ý¢#Ú%Æåð—ìËq9Þ™ûI/(æí3NÂ`g|÷x§,pb¢êƒ£>Ú‘ÎWmp*¿å`>?ÒmPH×Ðf ðÿìyxSUúÇ?IÚ¤û¾ ”BiÙw,ˆ€(‚ ¢"î 3*?×ÁeFutdDÇDe@dÙ×–½,¥Ð•¶Ð½tIšä÷GHè’¶IîmZä|žÇÇ’{Ͻ'ïyß÷œ$÷{^¶gåò÷=I–÷\X¥å¹íûY|Ë0‚Ü5LéÔž·÷ið}ÿžyN~¦*•%Z‰m¯¢èhÛ}¹Ù’qÁòïS…Å\®®æÙÞ]‰ñó!Æ×›”b# Õ›:©)Ò –×BJÛšœ.*æhJš' Š8›ÏÜaðר™Ã‰µÇ°{©ÒÝÆôl–ž®-Ú¿XQÉqE RÆL•ßÌÀmYõ‚“£­\vØ}!Ïjuº“VªT›q$wç\ĈIP28"¤ž¨K¥P0$Â$êÚ‘]»â¤Ôœ#—oØËs}ºááâB¥^Ï Û÷säRýªÃûr/Õ{MŽë¡îLélªJôÛùLÞ=põÁÓ”¢’ò X0j0>jWŒáýƒ W³Ç¯¤ägkH‰Á w ïéO´¯7饗y~û~«âd)¶j©XèèëÍMmÂXr*•/Ž^@¤•°!-‹õGãªTÖk+eŒ¤úÕžœ‹ŒëЖaA¨ŠZ9O¥PÐ5À4Öû­Ä’¹}]šÊWrã Ÿ”â-9ïK_Gqt^¿rç:0m:0¢m8¹å<¿ýUM<8ô]òY¾MN±ü;¥¨„¹—øfÔ¼Õ®<߉WwׯÎkÆYk†šœ*,æ@ñ?z©2m5ÏöéJ”·'ñ~õÆËÑù·öqûÖÏràìÏGàx,H‰}9?[9â“RP{xñø¢ú1RYZÄ_½NZÒ6Yïg4дµþí Úv"zàh¯ý–½K?²ËO?Å™kxxþ.”.®²ß;´³Iìž²û7ެ]TëØå‚\rSð£½Îd+CÍ*«u–×›"ýðŽz¯¥%þAQöy&¿»•«†6=“²k­¬÷u‡mu "W,\‰6Ýo@©RÕ©*U*BbºytÖphm&3ÎðIIy£ç}©ãÛZ™8q"•••øúú2|øp6nÜØ¬÷ôôôÄݽ~…zAó3`Àþú׿°hÑ¢V%N˜;w.aaa¸»»óÖ[oµtwšD¡P0{ölzè!”5~cP«ÕøùùÏÔ©Séß¿ÿ5-ìÔjµhµÚZÿ4/- ...|üñÇŒ=ºÖëqqqÄÅÅqË-·0}útÊÊʸµǵ–s®%®ç¼!Ö9@ @ àÏD}• ÕQ|¥’—¿FmyÍ\×ËÕö‡ž3Ê.“[nª¼áéQëØÈ+‚*½ž…'ÎØÕ¿QQ¨UJts“Ž×ýTVëYqö<®TÅkˆÅ'Sùûî$¾8z’Ç7露Êö ¤´­KMÁE—+âŸÖÎáK¬=— Àè¨H\”µ!mZ¸7Wi¶º9³k-Æ+ócPû.žëÞŽ;^[H@Û.¦ç—·nPœüÇ‚7ùþ©Q6ÿW˜UÜg÷¬·üÜ¡«ÍíZ’ §9µm%nC©ª½Ÿ¤\þ|è×oØøñ ì]ú!?ÿã~*KíÛŒ¬}Ÿa(J Õ:«Â¸æjÛh,×Uçsá”iƒ³ø²&qpó6­Rö¬“µ_-‘ë£:[*Õ&®œgUœÜÚè”p ¥ƒ¾šƒ?QïxQö9Nïø€˜„[ëÅ £ÄÜ0€jmþRòõ#{ò³[µT,HY›I#©~eÞ`CãáMØ•jºf‚:Äãª1 2_Î\›9Ã'¯Ušk|[’ÈÏÏgÞ¼y€©r¦àÏIHHÿýïQ©T?~œ÷Þ{¯¥»TWÍ IDATäädÆϨQ£Øµ«õÇÒo¼Á#<‚R©äðáÃ<õÔSÜtÓMŒ9’çž{Ž#GްyóækZœ,hZ"^ýuFMee%o¿ý6 ôèу3fpñâEzõêÅ«¯¾ê”¾8‹k-ç@ @ @àlDåkõÅnÖäož®.LìØŽaÁ„z¸á§QSQ­'«¬Üò`½¦Ž¸¢‹¿é!¶³Å¥Ú)8íy¥²Ø‰‚"‹0 .ç¯T1óÓ¨ñÓ¨-û[ã;«'ÊÕ¶&¥Z…UZü5jÜ4²\ÓlÏÎåö趸»¨èèëéÕÑ–9OÿÐ :øx±xÌ0~IMç·óYd–]¶û>Rìl,%],ಮº‰³åkëL‰A€MÙô  ÆÏ‡pOw.\¾*¦2Wv=WRÆé:)¥"‡o  ÂÅJeÙs%¥µÞ‡™^!–¿»"¾lít 4åºÔâÒ…n»/˜ªº©TÄøúÈR¡PJ~¶†#qÔÙÏ—):à«Qs /ŸWw¤¢ºáJ¤RmÕ±[ÃÎåÕöå)c$ÕVI ¸TQE»†!¡$æ]­jß늠5ûr9ÙeåV¯íh¾’gøäµŠÔñu)ó‚£ñ+g®ëÀý]:b0ùûî$²/K³YÄ«R(èèçÝ`Õ\Ghެ¨ÖSPYE»éz5iÎù·±õs™N:Yo4ïç#wýl+r¶r&Úò2Î €R傇0qýèyÛuˆcü«_³ò(Ê>×Ä•Z7AâÈÏ8ƒ®RÞüÛG×ÿ6ÝoÀ?²#SÞ_ɉÍË8½}5Źõ+eËÚËø›'Õc0^Aá¸yû£«*§$7—Ilä¢n=Ÿ[ÒV&t•å”]ÂÓ?7oÿÏ êG[§áæíGÖñ½løè¹FãC[^Jse®ªË%T”à_P3ÝE~ÎÜJÜMwâêæA`Tg.ž;a9&§?ŸÛ¿Ùá>¶ï;€ìähËí«„%¥­3q4×¥ìþð.} l‹wp$¥¯®³¢Ž 0ë,—Ο¬×V rø†©ºgýŸ ³Rk½3á]úYþ>µ}µcw2æ ¯) Š Óm§Ëð‰¸¨ÝlÛh¥m[ êå¾§©()|=GâÈÞü,ÕV- RÖfRÆHª­²O ¼ð"þÁ´ï3¼VUûˆ.}(Éˤ$/Óêµ[ÃÚÌ>y­"u|[#&L@¥R±víZV¬XÁÓO?͈#ðöö¦´´ñMÆ×...|òÉ'S\\Ì“O>)D³1b÷Ýw+V¬àoûú•ÕÏ;ÇÊ•+ñòòj©. 6Ó³gO¦NŠÑhä‰'ž`Û¶m–c›6mÂh42oÞ<&MšÄܹsÉÍÍmÁÞ @ @ @ pB ü'£½snìO°»[­×5*U-‚¢Î“ûæó©<èfºWÏ þ¸ëÖ&Ï÷V»¶š‡è£\W¿Fí´Jyrp¡†'È]éEñöå^âµÝI<Û§+nîïÒ‘û»täX~!?9϶¬ÜzÚäÆÓÕ…>W„1Ûí9KiëLA€­™9<Ó+W¥’mÃY|2W¥’amL¾õiò?´$‡o¼>¨7ž®õ§”O'óÓ™óõ^º"\*Õê(l@|ÓÚ¼ÒçÜŠ†ódNè® SJÉÏuq4ކ· À,>y¶I!¨T[µD,økL}¾ØHŸBÚ*ÍV£‘-™˜Ü©=#Ú„ñÉádK¼ö 5 2ö7P]WJ¾’ gù䵊”ñ•‚”yÁÑø•3× »â›2.p¢@º˜øRE¥åos®ƒæŒAsL¨Uµ7iîù·5®Ÿ¥Ø¹%ÖÏ–ÏV}5e—.pzûjR÷mbÒ›‹ñ oÏ {f±îƒgZº{’p÷1Í[— òœ~ïÌ£»ÙøÑó yðe<ü‚è=þz„Ü3‡9ºþœ;°£¡~5x©øGFsÛ ŸâZëuµ÷Z¢Õf\4ØIKÙêÏHu•inV¹6<F÷iúÃh$iõ×-.4ÒU\ÆÝ'[Ó'·jŠø<üƒ¡Æ^­ÁŸÕîžDÆ÷àÜ-NkëL¤äºÔ}›<í%”.®t8šC¿~€ÊEM‡þ7pºļrøÆÈ¿¼‡Ú£¾f÷â9]ÿ¿z¯{úW6(ίw¼5bÞ¬À\UÖ¥—®“ks·+"ѲK ß×V#{ó³T[µD,HY›I#©¶2 œÝ»îcî£ãÀÑìþß,ñÙu™ÇöX½nkX›9Ë'¯U¤ŒokåŽ;îà·ß~###ƒãÇÓµkWFÍòåËë¯Ñh8q´áÊ3Ï<ï¿þZïœäädÔj5o½õß|óåõÎ;óÛo¿Õ;ÿèÑ£õ^ÛµkÓ¦M³Úç›o¾™‘#G»»;yyylß¾Ï?ÿœ¬¬Æ7m=z4÷Þ{/Ý»wÇÝݬ¬,6oÞÌüùóÉÏoxþ fذaôë×.]º‰··7 …‚òòr233Y¶lß~ûmƒ×hß¾=ÿýŠbñâżÿþûöUnþõ¯Ñ·o_ôz=Ï<ó ™™o­\]]ILLÄÃÃåË—óâ‹/Z½¦»»;D£ÑðþûïóŦJõ=ôÕª¬gΜa̘16½?¦OŸÎ„ èС …‚ÔÔTV­Z…¢™¾æÓ÷ iii¼üò˵ÄÉ5)+kx³{}ræÌ™¼ð >œŒŒŒzç 8ÿýÏ´Þ›2e ¨×ïÁƒŠ¿¿?jµšüü|<È7ß|CRR’mhE¨T*¢££9sæŒÍmüüüøé§ŸˆŽŽ&%%…»ï¾›’’ú›ç^/±ðä“O°nݺZâd3[¶l!??ŸÀÀ@øùçŸmê°s} ãÆãÎ;ï¤[·nøøøPUUE~~>©©©>|˜•+W’––fµ½ÈM3eÊzöìI\\!!!øúú¢R©ÈÉÉaÇŽÌ›7ϪjÒ³gO|ðA @`` ÅÅź-Ýý-ÿ¥•”ñæÞC¤7ßn÷7„‡àªTbvdÛ÷И”¶ÎBJ ‚I,´'ç"7F„2²m„EÔ5$"/WWôF#Ò²›¥ï-åÍ+‰—KDÙØi¹ôJRòs]£}¹—ˆðÅËÕ•éÇ[û³5³a1©T[µL,˜:¡3Ø?pRÆH¿Z>“ÉÚã說_hûr.¢Q©èq¥ 羜úV©ùJ.œå“×2ŽŒ¯8:/8¿ræºó%¥¬KËbs†t!@u¼ —µ¹c°©^6×üÛÐúÙËÕµžXº1Š«´6}®h 9ììì5ÒŸñ³UuU'6ýH´ ïÒ§öÁoQ¡hýï°LƆêf( nç·’~d'1ƒn!î¦; íÔÓò_Qö966›üôÓòÝP¡`ä_ÿg@(ÕÚ*öÿô1çl¡¼8W5>!mýsñª#‘Œ ¾át[ýI1Ú‹2î&¸c74ÞÜúÜÇüþåk¤îÛØàùjo\\Õ ¯KeY†â·†Á`>÷ÚùBGéâjùÛÚ÷9-íÏQ½†šúh4’–¸Õim†Ä\Wu¹„ôÃ;hß÷&bn¸Õ"Êl×wo z=gv­m–®;^0ÿqí|£c‰)[»,Óš¿ZgÚèHa¥Bµ½8Göæg©¶j‘X°6“2FrøÕé«é>æ>Ü}iÓmGvá¢ÖÖ¹™GvY¹q ­Íêà,Ÿ¼–qh|[)íÚµ£K—.\ºt‰ýûMÕ ×­[ר@¹5ЧOíÏŸmÚ´aêÔ©Œ7Ž{ï½×" ®‰J¥âý÷ßg„ µ^ŽŽ&::š»ï¾›Ç{̪à`åÊ•„……Y=æããC||<ö{öìÙtíÚ0‰Å6mÚä4A×sÏ=ǤI“x뭷ؾ}{ƒç:b+NÇŽ;=z4C‡E¡PXý¼1xð`4W6 Ü´i“o ///.\HïÞ½k½ÞµkW‹Íå¦sçÎtëÖ €yóæ¡ÓÙ7_9ê“[·nµ øá‡ê]{À€€ImÍdžN=j½ÆØ±c¹õÖ[yùå—ùé§Ÿìz?-…ŸŸ“'OfÚ´i(•J† bÓg]///,X@tt4.\ࡇª'š½žbÁËË‹aưtéR«çF222 ¤}ûö6÷Gع6|úé§ :´Þë´mÛ–aÆQRRRk“yÃfÏž··w½×£¢¢¸÷Þ{¹ýöÛ™>}:‡¶Úþ…^`æÌ™µ^ â–[naôèѼþúë|ÿý÷²õ·k×®üòË/¦Šÿ>xŒMéWÅ:ƒ3E%\®®¶Ú6§¼œ¸_:úúØÝ¿K•UÄ¿g^àͽֿœÿ³RS¤bíÒæjÛA5*Ã4POg0°>-‹õiY„yº3¶}&wê@;/>67nçREóT´½1Âô`Ô‰ü¢û'wÛæ°sCH‰A3«S3¸1"”h_o¢}½I-.eLûHÀ$É·á½;šs¤øÆm«ì{¬àJ¥?oµ+¾5Å*ÿIͱ¶bÎuažî žæqõ˜½>ÞRòs]£Có™›xœw÷¥ƒÿØ •âpƒâ?9låìX0÷9¼‘>7„s¨[¥—r<¿ˆ®~ŒiÁ¾œ‹ô ÀU©¤¢ZoµÂ®ùÊŒ”G·å“uq4o´Ä¼ïÈøÊ…£ó‚#ñ+g®û%5ƒ_RßÕÞB=š^_Ù‹œ1hrοöðb¿n ‹´þ€®5Ù´“”¢ú2Ì8ãóQM¤¬‘ìý?ëg«ËEpuóÄÕÍÃR)M_­Åh4 P(­Vo´£Ñ\!ÒU¡B¤ËE l‹wP„ý÷‘ CµŽÓ;~åôŽ_ñŠ vØts~7{?½|7å…­¶½j'Ûj‹d4Û¼IÊî«>´Õ:.¥DWQ4.‚±÷¾rù†[µ(Äq’bÁA²“°ãÛw¸åÿ>Ä?²#7?ù/J%g÷¬·zþ°Gþn©¤i Ë_J~ú)¹º Øï“rµmOÿËßå%Ö«òµ¤?·ïw¹gRngÕ\GÛ6‡BŽ\—üû Ú÷½‰€¶1´¡ #…ÎCn -q+åEM¯Û_)¾±pæP«¯7DE‘i 5>¸yûQYZdWûš8+_™çn¯àðÏñºzÌ^oˆ²‹Ù„Dw#0ª³äk9Göæg9låìX²6“2FrØ*?ý4¹)GéA§ÁãÈ8²‹ð.}Q¹ªÑU–“ylw½6r­ÍIë gùd]Í-1ï;2¾­•Ñ£G°yóf W*AoÞ¼™çž{ŽÁƒãææFee¥l÷;sæ ñññ–{øá‡ôíÛ—ŠŠÚß4&ÊÙ»w/‹/&##£ÑHBBO?ý4ÞÞÞ¼÷Þ{Ü~ûíõÚ¼ð A×êÕ«Yºt)%%%ôéÓ‡gžy†€€æÏŸÏرcÉÉix³Ä¤¤$V®\ÉéÓ§),,D§ÓáããCçÎ9tèP£ï?<¼v^‰ˆˆpŠ@yêÔ©–ʨß~û-‹-jô|GmµeËFMpp0qqqV…â7ßlú¬pþüyRRR,¯/Z´ÈR¹Ó܇‡zÈæ÷øÎ;ïX„‚?ýô?ÿü3¥¥¥ÄÇÇóàƒgóµleàÀ–¿×­[gw{Gí|òäIrrr cðàÁ ÷ìÙc5–>úè#ª««IOO§´´WWWzôèÁ‹/¾HÇŽyã7ظq#EEޝ››N:1}út&Nœˆ››é;ÞÒÒRÚ´iÓdUT___¾ùæzöìIVV÷ÝwÙÙõ7Þ¼žb!!!WWW´Z­eà €îÝ»óÄO0`Àüüü,¯ûø4ý]¿°³uÞzë-‹8yõêÕ,[¶ŒÜÜ\4 íÚµcîܹ¨T*«mEÞ°ŸuëÖ±dÉòóóñôô¤_¿~<õÔSx{{3gÎF]OÜ>cÆ ‹8yÏž=Ì™3‡ôôt:tèÀK/½DŸ>}øûßÿNbbb-¿“²Î‰‹‹C¯×Ó·o_úöíKNNß}÷K—.mu6@ @ ××H‰¢ksE8OWÇôàŸ9É Û÷³'§ñ‡ ýÝ4–¿{ ßrM‘Dzy0$¾Ýõ^* oHš~±‡#C¹§s‡FÅZÍÑÖ*õWN±w|¥´mˆ„pÓ­z£‘T*¹å\®`Áñ3Ìܲ‹jƒoµ+cÚµi²#vV«” `{¶}U.¥´m;7„”4³?÷.›~|º­}B<ÜÀʳé6]CjÎÇ}ÃVŽ^*L’Ý%MÜ!õýÚêÏæ\íëM¨‡õsG˜b°²ZOJ±c>P)ù¹&Râ ûr9OmÝñüB” ¯ èÉð6ÖÅfrØÊÙ±`îs¬¿o­ÍlAŽ9Tª_­<›ÀÐÈ0üÝ4 ½Ò]r©²ò€ùÊŒùúî.ö­œé“uq4o´Ô¼oïøZCêÉžyÁ‘ø•+×57„ËŸÛåŒA{sþmIœñù¨!ì]#Ùûr¶j-ø›6)Ðëª,âd3fÁ”D´¤{TW™ˆW»{ÚßVg˜»j¯d{Úô0yP‡øZ‚–¢ôR6–ÆÊ×À ¯FãéCìúÚ›©Ö^¨=êW©‹»O åo)Q{ï òù†{mÕ’Øã“õÚJˆ)”äeñË[{æ0 ¥’›f¼Etÿ‘Níƒ=8â“r´mˆv½oÀ ×S~¦Éóõçö}o¢ÇmØ%äS¹ªiÛ=€ó¶ØÜNjÛæ°sCÈ‘ë2î¦ôb±C'àjyïÇ7ÿhÓ5äˆßæÎu9WæA : +éZR߯­þlž»ÚtÂ+Ⱥ˜´]S%8]Uùiòlˆyl/>!mhß÷&‡¯#%ŽÀ¾ü,‡­œ RÖfRÆH.¿:±Éd“èþ7ãîhéGZÒ6ªµõ7A’kmޝ7œé“uq4o´Ô¼oïø¶Vn¹åÀTYÑÌ©S§ÈÉÉÁÝÝ!C†Èz?£ÑHUUUUUTרTL«ÕZ^·v¼.Û¶mcÍš59r„£Gòå—_òÎ;ï_OÉÃ? À²e˘5k{öìáĉ|ÿý÷L:N‡ŸŸO?ýt£ïá÷ßçûï¿gß¾}œ9s†óçÏsäÈ–-[VKüfµk¯Vš/,,d׮毶=räHÞxã Ö¬YÃ?ÿùÏFÏ—b«ßÿÝ"ò9²~ì«T*FÀƵ7ÆÕëõµÆßžª‘]ºtaìXÓÚeþüùüíocïÞ½œ8q‚eË–1a»«ÛB‡ÈÊʲ[<&Õ'Í1{ã7Ö2ªT*zõ2Uto¨RöÖ­[Ù±cééé’——ǦM›˜1cz½Fc©¦ÛšP*•Œ9’ï¾ûŽuëÖ1uêTÜÜÜHNNæ•W^!!!¡Iqrhh(K–,¡gÏž¤¦¦rÏ=÷Xms½ÅB—.]“À²ªÊ4;–åË—sË-·àïï^¯G¡0m$bþC;[·s||¼E`¼xñbf͚Ŏ;8sæ ÇŽcÍš5 öEä Ç8zô(;vì 99™ðÅ_ðöÛo¦ÊÓæ÷m&44”gžy€ 6ðÀ””D~~>`úôéäææ¢R©,ãaFÊ:gÙ²e >œÏ?ÿœ‚‚ÂÂÂxá…عs'ï¼ó±±±Ía@ @ @ ° !PvæÊ^AînÔxH^n kTtëâïkWÛéÙ–jv¯ èÁ­íÛà¦ÁËÕ•ø?žê‡‹Òº»¬OË¢Ú`ÄO£æ™^ñ¨šø±©1¦ÆFóÖ }x¢GæHÀGíê”¶Ž’W£j[ÿ+Âg´uQÔ‹0OwF·3=·+;Ê:?L¹(—s%e”jMô|5êFïí¨û…YÄkÛ³òlj#G[)v¶)1hÆ`4²úœI¼5¦]$÷tŽF©P^ZFbžmÕ(ìÍ9rù†=œ,(¶…éÚ™îAþ_KJŽµÇŸ7¦g£7Q)<ܵS½ã|¼i9·Ú ¥®líû:šŸk"%ŽÌ”ju<»m?G.¢R(xu@O«c'‡­œ 5ûülï®vÍeRÆH.¿ú=3‡Â*-®J%¢Û2䊨yK†uá¯ùÊÌ¥ Óƒš!în„xØ.îv¦OÖÅѼÑRó¾½ã[{çn©ó‚#ñ+W®S/õëÎÆ‰·ðѰ’7'‰ðãöè¶l1·Ëƒö çükßİe¿ÙüŸ\bb©v–cdoìËùÙªµàJ·ÑS¸p*±Þñ¼Ôãtè3.Ç7š*Ë7åDOÿ<|›8»6— Lóg`(^o’pf×Z z=J•Š!Óg£t¢\©j8§f¥ª¬7ï†cÛl'€6Ý5yÏŠ•\ƒ;tµ¥›²Ü¤ù†¶2Ó¡ÿÍÜ÷Ñ:îÿh½$™=Øã“u‘ R©º\š÷f’s* ¥Jň'Þ&¬s¯zçmüøæ=ÐÇæÿ䮞 Žù¤m•.õ×aÞA¡gzÒ¶ZB(ÏŸ{ŽÎègþà{f1ñïqó²mnlÓm®n&ñÚùƒ[mj#G[)v¶9rÑh ù÷tr;=ÆNG¡TRtá<Ù'ö7Þø öƯœ¹ÎVòη-ûÝù¤Õ·)ùÊ®9w÷›4³ÞqÿÈŽ–LÙµƒ¾a±›=¤ì^k©|ÓŒ7‰:ß@ÔÞ„Ät'á¾çQYÉ u‘GflÍÏrØÊÙ± em&eŒäò«Ô}›¨()@éâJüˆ»hßgø•×7Z=_®µ8¾Þp¦OÖÅѼÑRó¾½ãÛ ¡W¯^èt:vîÜYë˜Yœd®úè£zmSRRX±Â”߯‹KólˆûÅ_ð—¿ü…wß}—‰'RXXØ,÷©Éc=†J¥B§Ó1gΜzU"ë"ÅV—.]bß¾}Q`Mð÷7­]V¯^íð{ªË¸q㨪ªâã?®w\¯×7ù¾Á××´Fqd¥úäš5kS[sÕS3=zôÀÃÔ˷mÛfW¿Î;g©peWÛæÄÛÛ›‡~˜Í›7óå—_’€N§cõêÕL™2…qãÆ±téRÊË˽Ntt4?ýô±±±9r„É“'[­è ×_,ÄÄÄžnúîßÏÏwß}•JÅÞ½{>|8±±±6m¬ ìܰÇ@ee¥Õ÷Û"oÈÇÊ•+1L›vëÖ­Ö± & ÑhÐétüãÿ¨'///gÑ¢E² ²³³³™3g <ûì³$%%áææÆ”)SX»v-‹/fÔ¨Q(mø=M @ @ ä¤yˉ¶Ü4“Zp«ñ𸫫+nWD)½m3ìŒ päJ,ðÏzómòY´z=m¼< ÷tgþ±Ó²Ü'¥¸”œò Â<ÜyªW‰yùWiQ«”ø©Õ¸7ð€N•^Ï›{ñÞ~x¸¸ð·~Ým¾ïÅŠJ%§ðp×NŒíІ^Á¬JM'½´Œ‚J-j¥’0Owz07é8úF~ཹíÕj¾5}C‚ø=ó‚MýÒÖQÒK/SX¥Å_£ff÷XTJg‹JQ( ½m½<ùâ¨õi¥´ב7 ;³s)ÓUÓÉ߇éq1x¸¸Pm0ò͉úÕvæÜØÁÈ–Œ œ,(¦°ª ¥‚PwÆGGY*Ì,h|oGí<4ÒôÓ¹’22Ë.7y¾\m¥ØÙ^¤Ä`MV§f0=.oµ+wÆ´à§3çm9G.ß°#0'ñ ˆ›‹ŠÿÈï™Øuá".—£7ñtu¡ƒ¯7~j5_o8OJɱöøsny?œ>ǽ±ÑŒi‰»‹Š_S3(ÓUÓ5ÐâbpQ*(ÑêX˜Üx{’Ÿk"%Žêöço;ðßaƒˆñ󿄾Ìܲ‹¬²«uÈe+gÆBnyKN¥r—Ž Žá“›±ìÌy2ËÊQ)„x¸¡l@$&eŒä²•Î``EJtíÄ}±Q«””huìm º¨\ù àX¾)7( ^éß“o“S0Dxzîé΂ãÖ+À9Ó'ëâhÞh©yßÞñ­‹½s·ó‚½ñ+W®ëäÏmíMÕl{0!:ŠÿJµ©m¬¿/=ƒ(ÑêðQ»20,˜;;µÃU©¤¨JËB+ë+G‘QÞ%t IDAT3íAÎù÷Z@ªåˆ{c_ÎÏVÎF¡Tàæå‹¶²•‹+¾A´í9„cîÃ3 ŒF­þ¦^»SÛVÑ¡ß<ü‚÷Ò$­^@I^*W5^a(”¶ÅBΩ¤+Q0êé9$®šOµ¶ ß°vøG°ï§Ol››røJS%Ãgü“ÄUó1 ø„´Á;8’Ë?³œ[–ŸÃ‘µßÒëö‡i×gã_ýšc–Pœ“ŽB©Ä+Àö>ÛËm/~Š¡ºš³{×s1õåÅù(]\ð 'nĸ_iä¥kðEÙç©()ÀÝ'€SžA©R‘Ÿq ü#£ñ oÇÞ¥W`ÌO;MÙ¥ x…sÃýÏã¢q#ûÄ>*K‹Pºªq÷ö·Iÿ1®nž {ôu‡®#%Žêö§©ü,—­œ RÖfRÆH.[髵ßøýî|‚^ãD媡êr1‡wZ=_®|ޝ7œé“uq4o´Ô¼oïø¶FFŒB¡`ß¾}\¾\ûû»mÛ¶q÷Ýw[Îiq§Ü“ŸŸO`` ÁÁÁµŽõéÓ0U‡nH$·e˦L™‚»»;ñññ9r¤Yú¹nݺf¹nCìÙ³‡AƒáêêÊ’%K˜6m©© Ÿ&ÕV¿üò $>>ž¶mÛÖª˜zÛm·¦ ­Ç—ãíWÅe'Ož¬çË͉¹‚¬Yäf˜˜æÏ7Í=ö˜¥Ê¶T;ïÙ³‡ÜÜ\BCC5j»wï¶3 ÓÓÓ-bÓºx{{sÿý÷3lØ0"##  ¼¼œ´´4‹ ÓÍÍö K›“É“'óÚk¯YÄ“.\`É’%üðÃ\ºtÉæëtëÖG}vîÜÉÌ™34_o±hú|‘ŸoÚ0e̘1xxx Óé˜5kyy¦ÍO«nosÃtïÞÝÒÖlk[yC>ÊËËÉËË#,,Œ€€€ZÇ̶HJJ²ø}]̹< €€€ díŸN§cÕªU¬ZµŠøøxî¿ÿ~ÆÏ Aƒ4h™™™<ú補9#ßïZ@ @ @Ð×…@ù¥gAíZ§ûÉ®>Èt*å‹~ø¥YîŸYv™MéÙŒŒŠ [ ?ïég9V¢ÕÉ&P6¼½ï0ï 釗«+Ïö¶oýC ˜¹yvëÌÀ°`\¯ìªyYWÍöì\FEE R(°öˆÁ¢äÔ*%÷ÆFéåÁ“=ºX½Ç§Ï‘шébE%ü|,ÿΫ¨hð\9Û:ŠÁhä«c§y¡o7|5jžïS{÷Ô­®A±‘”¶®J%wtŒâŽŽµw˜Õ¼{àg‹Kk½®T(ˆ ðÃM¥b@#•Ûv]Èã÷ÌÆ«1:bg¥BÁà“m{–mÕåh ÒììȽ¤Ä`Í>ýv>Ë2¾EUZÖ¥eÙÜÞžœ#§oØKrA1/î8Àkzä®áæ¶ÜÜ6¢Þy—uÕ ¤¤äX{ýù«c§ vwcTTÃ"ÃVëx©VÇì-eåBJ~éqT—˺j^Úy€#ã§QóÖ }˜¹e7U5vˆ–ÃVÎŒ€¯ŸÁO£f\‡¶Äøñ÷¶W‚’2FrùÕŠ”4¦ÆvÀãÊŽçÓ³Ñ5ðà“\ù µ¸”Ùy Ž¡Wp½‚¯îª^\¥µ*Pn Ÿ¬‰£y£¥æ}°o|ëbO®“k^p$~¥æ:€ºŸ] kñ¦*¼/íôj­ã•eŵF£-_¾Ê­Ïý‡7C¦Ïv¨ÿöÞ÷ ¹l&Ñ›Yœlþ·W`(%y¶¯IÁ^Ÿ¬‰”X myëþó4“ÞZ‚»·?£Ÿþ+ߘFµV¾¹T*Žø¤m•.®Äß<™ø›'×zݠ׳uþëdÔ^;ËéÏ— òjwuN¹œŸÛèùæûGõ6Uû9wÀzŽo޶ ÍÎŽÜKŽ\WYVÌéí¿óÝT”rz‡íU¸ì‰_9}Ã^òR±î?O1bæÛxøsÃbnSï°üS¼BˆI¸ýo¦CÿÚÕ>«.—°îƒY\.´þp¹£\8yŸÿ1þwÿ…¶ÝP¹š6OÕ–—q>ñwbn¸ ¥JECš>©qT[ò³¶rf,€´µ™”1’˯Žm\Jϱàêæ À™kÑWk­ž+W¾ÇÖ-á“5q4o´Ô¼öok䦛n`ëÖ­õŽíر½^OPPñññ² »š“²²2qw¯-æ7 –tÕ=Ò<læÎKhh(ï¿ÿ>aaa,Y²„»îº«–ˆ¯&RmõÛo¿ñúë¯ãêêÊØ±cùâ Ó&=jµš1cLkŠåË—KzOu 2}·““#ïï\MQRR`æYC­V[*ŠªÕW7Z—jgƒÁÀš5kxøá‡;v,o¿ý¶¥Êç!CS[#&&†o¿ý–°°Úß•º¹¹Õê)ØÔÕÙÄÇÇ[ÄÉkÖ¬áÅ_¤²Òþßén½õVŒF#Ÿþy“Õ–¯·X0Û¸âÊï ]º˜ÖãÉÉÉ Š4­!ìÜ8æ|‘•eÿwO"oÈ‹Ù×5M­×Ív0`gÏžmò:~~~² ”krâÄ ^~ùeæÍ›Çüù󉎎¦M›6„‡‡ ²@ @ @ p×…@¹5ðî£d–•32*œPw´zçJJÙ‘‹‚zZ ‡9r©7ìàΘvô$ØÃ µ+åºjJ´: *«H+-c_Žõ݂ϕ”ñÊ®D\•JÝ5ŒF.U˜¹¥]$€U±˜ì4›3.0!:Š>!»»£V))ÓêH/½LâÅ|е?xñÙ‘“„¸»îéÁ/©éÏ·½b«”¶Røõ\ÅZ-“:¶#ÆÏ/W*ªõ¤—°=«ññu´íú´,\”Jzà«QS\¥åÐÅŸ?rÒr\.[9+Ì}~ÿà1¶d\àŽŽQt ôÇO£Æ`4R\¥#ûr9ÉE V­utŒä²U™NǪ³éLL¹¯1äÊWoî=Äôø†· #ØÝ ­Þ@jI);ˆÁ–ðɺ8š7ZbÞûÇ·&öä:9çGâWJ®8š_ÈêÔ FFEp¼ ˆ_R›¶ÓçGOÒ/$ˆö>^»»áJo «ì2;²óøéÌyÊtº&¯c/rÆ ½È5ÿ^ 8jg9cÁÞØ—볕³(Ì:G^ê1|BÚ¢v÷B©Ra¨ÖQUQFñ…ó\8™È©m+tnûúŸäœJ¤Ë°‰ø·Aíî‰^§£²¬ˆ’Ü .¥$óØž&ûòÇü7(ÎI'æ†[ñ §Z[EaÖYÎü Tÿ›?›MŸ;'zÀH¼B©ÖVQ™BZâÖzm z=Û¾þ'g÷n þæ» é›·?Fƒžª²bJò2ÉK=FÆ‘]ö˜²QŒF#ëþó4úÝLhL<ü‚póñÇh0PQR@~úiÎîÝÀÙÝë0Ï·'·® ²´n£î!°]gÔîÞè*ËÉÏ8Íù[ê½ßœSIü4ûnºžJD\<BÐxú¢«¼LUY1åÅ—(Ê>OæÑÆß¯½÷Ç|CN[•]";ù@-Á޶Â9Øã“u‘ rq¹0m Þä–Ys hC¿IO°g©c4Žø¤Ô¶§wüŠÊÅ•ð¸~¸yùQYVÄ…“9´úkòÓëo "§?ï]:¯€P¼CÚüû2rSš®øÛ7/_“ÿØ”¶f¤Œ‘½È•뎬ûž¸w¢P(9¾ñô:ûæk[ãWNßp„ìä,}ñbo¼v½‡Õ7/_ô:-Uå¥fž%ëÄ>Óº ‘õ»£ùÊ^6èõlùâUÎØB܈; îеeùHKÚÆá5ßRQÒ<ŒfeÇϢrQãá„Ñ çr¡é{…΃Ç ×YÐÈGui*?Ëe+gÅ‚¹ÏRÖfŽŽ‘\¶Ò–—rbË2zÞ6€“üÜèùrå+°½Ñ>YGóFKÌû`ÿø¶&\\\¸áÓ&¯¼ò ¯¼òJƒç6¬–@¹f5eå• èZ f¡U]”ùß¶V‚¾*FÛÚ5k())aÞ¼y±páBî¾ûn«‚*©¶*..fëÖ­Œ5ŠñãÇ[Ä‚£FÂÇǽ^ϪU«$¾#ë}Ð5Ãw|ayGFFâááѤ³&røäŠ+xøá‡ bðàÁlÛ¶ 777úõ3}Æýã?¬Þ÷ÓO?%,,ŒÊÊJæÌ™Ãúõë¹xñ"†¨¨(æÍ›Gxx¸Í凉9qâåååxxx0vìX ÀÒ¥KY²d ¹¹MoÌdfÛ¶môêÕ ¾þúkž{î9Ö®]Ûàù×[,˜7v0WH6 –í­ò+ìÜ8fq½‹‹ýr‰¼!/ ÙÑlg½^oYW4FÍÍ'šƒ=z0mÚ4Æg¹Wff&.\hÖû @ @ AM® òÿn¸²Œ³Ð |sâ ßœh|‡ÊG6Yßq´./lßßà±Üò >kDc :ƒœËW«ëEy{bþ©¾ ‘êq©Å¥ÌMr|—ôŒÒË<²i§SÚÞ¶ªñê!ÓÖo³ùZÛ³rÙžeûœRÛ¦•–±ødªÍ礋ù$]´ïBk82F7Fšªdæ–Wpª°Øimkb¯ï\ãøVrÄ`VY97-_çp{[sŽœ¾á(•Õz~>›ÆÏgÓ¾†­ï·.ŽæœmY¹ls æ¥ø•Gò³£qÔTžÜ™Ç°e¿5zŽ£¶2ã¬X¨ÉÁ¼|æ9ŽÎ¡Rmp¡ÜtßãùE¤ZÙ°¢.rä+€J½ž/žâK+Ò·¤Ošq4o€óç}3öޝ{rœó‚”øu4Žæ$cNâ1›ïµ:5ƒÕ6™¢%Ö r¬c™å\?ÛJK}>’{äHì;úÙJŽõ†=dÛMæ±ÝÒ.b4rzǯœÞñ«¤Ë諵üùKþü¥Ým«µ•ìûñ¿ìûñ¿6·É:¾—¬ã{í¾—Cd'°Z…ÚÎüÝ.QIY~{–Ìuú}ò ™mµî?O1üñ7‰0ŠKi'©,uÎfhŽø¤{baáÌ¡ÿñ¥I·MKüƒyôi²ö"¥Ïu±Û'%¶-Ê>Ç¡_¿±½Œþ\t!å¯Mµ«Mû~#S¸t>Ùimkb¯?S¿’¯­È‘ëJr3˜?½_Ó'6€Íñ+s®s„êª Žoú‘ã›~tøŽÎÝŽø3À¹[8w`‹Ýí¤ø•}µ–ÒKW«•ù…·7‰òbëkNGãHŽü쨭Ì8-j umæÈt[”^4Ý77å)Mž/×ÚÌÞõFKú¤)k~gÏûfìßÖBÿþýñôô´éÜ¡C‡òÙgW‹Õjµ ”J%ÞÞÞ÷Á`¸ºÉFsW\ÌËË#>>žÈÈÈωˆˆ°ü}ñ¢õM,¯e¶oßÎSO=ÅgŸ}Fûöí™?>÷ÜsO=¶Z²d £F"66–ØØXN:ŤI¦uüÆmªÆjŽÙâ¶ô¹9HJJLBý›nº‰5kÖØÜV;'''“””DïÞ½™4iÛ¶mcÀ€¨ÕjÊËË­VB'&&€Ù³góË/¿XŽét:Nœ8AYY™MïÁYBþü‘ß~ûÉ“'sÿý÷ÅSO=Å“O>ɺuëøþûïÙ·o_“×Ù»w/ÿûß™?>:uâÃ?D©Tòë¯Ö¿“¸Þb¡ªÊô½¼Y˜\ZjúÂÇÇÇ®ë;7Nff&={ö$..Îî¶"o8³×®]ˬY³¾Ž”uŽZ­fìØ±L›6ž={Z^ß»w/ .dÓ¦Mµ®/@ @ ÍMëÚ¶ZÐj¹£c; F#' ‰ ®OnŒ0 Ñ©’)¥­@p=`K~qÔ²8kõwÓð`œé€ÿ²}‹–@ø¤ý\KãÛˆµ¨@ ZŠ6Ýn mWÎoáÞÎ¥}ߛǪdJi+\Äœ €Ñh ï¬õ –Dµ,¶Œ‘¸ûÒçŽÇ8¼æÛf»Ÿ´Ÿki|ë2lØ0~þùg:wîlõ¿iÓ¦ЧOŸzBd³ØË,Xr„ŠŠ«›×I:ÛÂÁƒèÒ¥KƒÂ®‘#GP^^Ή'š­/£GæÑG¥M›6Ív†Ø´iï¾û.½zõâù矯wŽ¶Ú¾}»¥ºðÝwßMxx87Þx#ßÿ½M}5û‡——W“çšûÜ£GBCCmº¾:tˆ¬¬,f̘aWEq¹|ÒlÏ1cÆÄèÑ£ؼy³¥RkM‚‚‚,Kõóº‚Öæ¤´´” póÍ73cÆ vïÞJ¥bìØ±,Y²„µk×2uêÔ&û’‘‘Á”)SHLLD¥RñÁpë­·Z=÷z‹…’’üýý8yÒ´!d÷îÝíÎÑÂÎ ³s§i³Ù¨¨(FeW[‘7œ3‡šíi×êøZÃ,Ü:räz½Þê‡Â`0 R©4hP­ö‡Lâ&GEFÙÙW«š›ûÓ\¬\¹½^J¥²Z ±S§NLœ8€U«VQ]]Ý,ýxüñÇùüóÏ™={6+W®ÄÏϯYîÓ_ý5›6mà‘GaÈ!µŽËa+ƒÁÀÒ¥K˜4i?þ8*•гgϲ{÷n›úiöÐÐP‚ƒƒ=·fŸß|óMT*•M÷ŠÁ``Á‚tíÚ•W^yÅæ*™rùäÚµkÉÏÏÇÕÕ•{ï½×"xl¨šó¥K—,÷èÑæ¾6DNNááᄇ‡Kº–­ 6mÚÄý÷ßÏ­·ÞÊÒ¥K©¬¬$66–·Þz‹]»vѶmÛF¯Q\\Ì´iÓØ¿?*•йsçÒ¯_¿zç]o±––@»v¦ïê7lØ@yy9jµš9sæàëë €‹‹‹M×v¶ÎªU«,›|üç?ÿá®»î"88z÷îÍk¯½†««k“÷½󆳿Ð+VP]]M@@ÿøÇ?žSì]çÜu×]lݺ•™3gâïïONNsæÌ!!!Ù³g[6 @ @ ‚–À¶_zT  á!¨U kÖO–07é¸{%ø3pc¤é¡¥­ŽÃ— œÖV ø³ 5?‹8j~Zj}¢G,Ãj?‘VRÆ[ûËz¹>i×êø:ŠX‹ ­Ýcy(¾v¥«6l§D«k¡ ÎÅUãŽwP%¹ì_þg÷¬oé. N¥Ã•*™•eÅ\8•è´¶ÁŸ¥JE»^7¢rÕ4xÎ¥ó'Ù±ð_V‰8j~¤Ž‘£ ¼gm{$Ôz­(û¿ñª¬÷‘á“¶!Çø>Ö­3cÛ×®úç«QËÒ?[ $660 ”¢¼¼œ””:wîÌ!Cظq£åزe˸å–[ aÑ¢E|þù礧§£Ñhˆˆˆ°IÌ“ššJ~~>¼ôÒK¨T*N:˜DVÑÑÑ–j¿RÉÎÎæ«¯¾bÆŒLš4 ~øáJJJèÝ»7ùË_pqq¡¨¨ˆ?þX–{Zcܸq–¿ýýýKy3UgÖûå:@ ?ž®.xºÖþÊÀÖ*?ÁŸ”Ý¿‘y|/™) Ö,­‚Ç]ûb¨“ŸbÀä§šý>óè#ùíû ýÐ6Œv~èHÛ?Ãø^ Hñ–£k±Ï¶Ô¾ Ó?¯]QÕü~Eµ¬QsàÑiŸljöû8‚Ÿ¼©ÖVRu¹W;¥—.pîÀ’~ù ]e¹Í×ðtuÁß­aá¼3¸á†P(TWW“œœÜè¹IIItîܹžÈrË–-üøãLž<™Þ½{3oÞ<»ûa0øàƒxûí·ñ÷÷çí·ß®u¼°°P62˜*U†……1aÂÆŒØ1cj/..æ±Ç#77W¶{Ö%''‡®]»Zþ]³º¢3)))áÝwßåƒ> ,,ŒÇœ?üÐr\[±|ùrî»ï> X±b…Í}<þ<¿üò ãǧOŸ>µ„†………µÄ‚sçÎ% €)S¦Ð«W¯Zï§91 <úè£|úé§Üxã 4¨^Åñ†Ë'-ZÄã?ާ§'`ªœªÕjìïsÏ=Ç‚ ðññáÍ7ß´©¯Ö8uê›6mbäÈ‘õÞwaaa³ ”Íñå—_òÕW_ÑÆÏø¥¥¥<òÈ#üúë¯ðùçŸ3iÒ$*++-ç\O±°}ûvÜÜÜ0`;vì`ùòå\¸p3fЫW/4 9999r„ 6Øt]açúìÝ»—‰'òüóÏ3tèP‹è»´´”72aÂT*•U_¾žó†3çÐO>ùFÃŒ3ˆŠŠböìÙVÏ[°`çγzÌÞuÎñãÇ7n\“k3@ @ @ h „@Y˜D0‹O¦²ødjKw¥ÙBç2mýv§¶ãÛú¹ÇèZì³G‚Ö†”yázâµÝIN¿§ˆ}@pï:ë•0‚ëòâ|Ê‹ó[º‚È!ºØÎ/Mrj[1¾­ŸkqŒ®Å>›q$hmH™®'6þ÷yÉ×ø0é&¡7ŽcŸ:uŠªªªFÏ=|ø0S¦L!::šÐÐÐZ‚§—_~™}ûö1eÊbccñòòB«ÕRý ®3 IDATXXHZZÇ·ÞbéÒ¥ðÀ‡··7ååå$''³aà …ÍbæÐëõ<û쳬_¿ž©S§Ò£GÜÝÝÉÊÊbóæÍÌ›7üüæýŒðî»ïNTTK–,!)ÉùßšYµjS¦LaàÀ<øàƒ|õÕW”••òÙjÁ‚L:¥RÉ¢E‹šô·º¼ôÒKœ?žñãÇIee%gΜ±êz½ž—_~™5kÖpß}÷Ñ»woÑëõ’žžÎáÇٶm›}†²Ë—/óàƒ2fÌ&NœH= ¤ªªŠ¼¼<Ž?ÎŽ;HM­ý;½\v.))áÿÙ»ïè¨Êü㟙ôÞ;D¡%tPzD:‚² ‚«"XÔµ « «¨¿eQQ]\Á‚®R¤ƒ J¤“PB„d’™ß8cbÉ$ÈûuNιÜç¹÷ùÞçyîÀ9á;ßÏ>ûL#GŽ”$}ùå——íÿóÏ?«gÏž1b„Ú·o¯ððpùûûëÂ… JOOWjjªË4WãÆÓ˜1cÔ«W/EDDèâÅ‹:pà€V®\i×÷·, tðàÁ«º&%%EãÇׇ~¨† jܸqEkÒ»päÈíÝ»W7ÖСCµ~ýzIÒÆµqãÆ«Š÷Ϙçâ<¨Q£FÉÕÕU¡¡¡*((°ý;pà@I*’Ämﹺ?7ªòïP‹Å¢É“'kÑ¢E:t¨Úµk§ˆˆ¹¹¹)##C‰‰‰Ú´i“ÒÒÒ.{Ÿ«ýwÉɪ+Ãï?ELœ8Ѱ{÷nCjjª!33ÓcHMM5ººº:eeeÍf³‹§§§‹Édr•än4½,‹Åb X·nÝ‚-[¶ØîÕ¦M›*|Ç‹utPª/¾øÂvܦu¡ßçûÍ1€kÝСCõÊ+¯hûöí7A‚2À5nüøñJHH(rîСCzòÉ'®''OžÔàÁƒõᇪ~ýú7nœÆW¤Ï¦M›töìYExmsrrR×®]åææVjŸÝ»w륗^²ë¸|n*‚e€k\NNŽÎŸ?/OOO8qBË—/×´iÓ”••åèÐp8zô¨ú÷ï¯~ýúéŽ;îP:u¤ôôtíß¿_ÎÎü7¤òrqqÑÔ©SÕ¡CEGG+((H®®®JOOמ={´lÙ2}óÍ72™Lv—Ï @Eð›€kÜ#<âèPäææê믿Ö×_íèP®+/^ÔôéÓ5}úô*—Ï @EÔˆåÐ µmÕT17ÔR@€ŸÌf³Î¥×þC‡µaóveç\ttˆÀ5áºNP6 êÞ¥ƒ:µk-£ÁP¤-",Da!jÙ4N3>™§ôŒLE \;®ëe_µoÓBFƒAhÛν:{.]Þ^º©U35n#?_oõíq‹æ|µÈÑáÕÞu œv>Có—¬ÖÅÜ\í;x¸HÛÄ£>äv5Œ­«†±uäêâ¢<“ÉA‘Ps¨aÆ:sæŒ:äèp\ÑÑT¶¿î+–œlõËî’$£Ñ(__ïª ünãÆš;w®:wîìèP”ÁuŸ |9yyy¶c“)ß‘¬ŒF£¢££e4Öè_i@µåìè)®a¬$)õÌ9ÏÈtp4àX:tÐèÑ£U¯^=ùùùÉÙÙYééé:pà€þ÷¿ÿiÞ¼y:þ|¥Æ ÷ß_jÚ´©²³³+u¼šÂÇÇG;vì$ 6L?þøc©}¿üòKµiÓF}ô‘&MšTU!VšÛn»MÓ§O¿lŸ~ýúiÏž=UQÕ:t¨^yåIÒóÏ?¯/¿ü²RÆiÓ¦FŽ©V­ZÉÓÓSÇ×Ò¥Kõá‡*''§Ôë ƒú÷ï¯;ï¼SqqqòððЙ3g´iÓ&Íš5Kûöí«”xûô飩S§^¶Ïc=¦¥K—V›˜KRÖõurrÒСC5hÐ ÅÄÄH’Ž;¦+VhÖ¬YÊÊʪ”øêׯ¯¡C‡ª]»vª]»¶ tôèQýðÃúøã•žž~ÙëË»¯ óõõÕœ9s¯Ñ£GkåÊ•%ökРA‰ë]šêöÙQÞ¹*ï»àää¤nݺ©_¿~jÕª•‚‚‚”››«Ã‡kÕªUš={¶23/ÿ²ì±¾Ç¨± Ê7ÔŽT˦%I+Öltp4àx 6TÇŽ‹œ QHHˆ:vì¨1cÆè¹çžÓ’%K*-///yxxTÚýkªÂ‰Þ...—íëìì\ì\»ú÷ﯗ_~¹Òǹçž{ôòË/©|«1cƨW¯^2dH‰‰¨ÎÎΚ6mšºuëVä|DD„¨~ýúé™gžÑ‚ ì³——W¹®sdÌVÖõõôôÔ¬Y³Ô¶mÛ"ç5j¤FiÀ€ºûî»uêÔ)»Åf4õ·¿ýM>ø œœœŠ´ÅÅÅ)..Nƒ ÒwÞ©“'O–xòî«Âj×®­>ø@7®øCUc™«ò¾ ï¿ÿ~±÷ÀÙÙYMš4Q“&M4hÐ 2D)))vàx52A90ÀOC÷•Á íÞwH{ö'::$¨6²²²Ô»woIRpp°Ú¶m«#F(,,Lï¾û®ŒF£¾ûî;G‰«QPP “É$[ri¬ Ì•UMµªýðÃjÙ²e±ó7ÖgŸ}怈ªN›6môæ›oÊb±Èl6Kµ—æÍ›kâĉ2Ú½{·Þ~ûm¥¦¦ªk×®zôÑG«ÿû¿ÿÓC=TìÚÇ\ݺuSAAf̘¡/¿üR™™™jÑ¢…^|ñEÕ©SGo¼ñ†~úé'%''Û5noooIÒ¦M›ôð×ا¤D}GÆ\ØÕ¬ïK/½dKN~ÿý÷õå—_Êl6«k×®zöÙg­·ß~[wß}·,‹]⋌ŒÔðáÃåä䤵k×ê¿ÿý¯Ž9¢   :TݺuSxx¸&L˜ Q£F»¾"ûJú£bô“O>)Ÿ2Åœ””¤›o¾¹ÔvƒÁ iÓ¦)>>^»wïÖ¡C‡Ê6•¬¢sUÞwaÑ¢Eª[·®þûßÿjûöí:þ¼ÂÂÂ4hÐ õíÛWµk×Ö3Ï<£§žzÊî1¯Æ%(ú롃äåé¡S§ÏèëE+T+f³YÇ—$?~\;vìÐܹs5kÖ,Ýxãzýõ×õÓO?éôéÓŽW#''G...W¬ |½%(ççç+##£Øùë½BtPPÞ}÷]¹¸¸h„ 7nœ*e¬'Ÿ|RNNN:uꔆªÌÌLIÒ®]»”••¥ñãÇëÖ[oUË–-µ}ûvÛuÖRIš9s¦&Ožlk[³föíÛ§•+WÊÓÓSýúõÓŒ3ì·¯¯¯$éìÙ³%î‘’8:f««YßÈÈH 4HÒ¥ääýë_¶¶9sæ(%%EÓ§O×7Þ¨Ž;jýúõv‰ñøñãúûßÿ®ŒŒ }ÿý÷EÚÖ­[§Y³f©K—.êÒ¥‹<==‹½“åÝW’4pà@=þøãŠŽŽ¶—pŘóóómÿ•däÈ‘ŠWnn®ÆŽ«¼¼¼2ÍEe«È\Iå{$iñâÅZ¼xq‘¤öýû÷kݺurvvVÏž=‹UX¶WÌÇ3::€ª ‡ –Ÿ¯·RϦiöçß*/Ïäè° Ú»pá‚ÆŽ«¬¬,yzzêþûï/±ßرc5oÞ<­]»V;wîÔ¾}û´aÃM:µÄ*¶’Ô A%&&*11Qï½÷žíü®]»lç­?Ÿ~úi©16oÞ\o½õ–6lØ }ûöióæÍzÿý÷ÕªU«2=c:u´páBíØ±CO?ýt™®¹–X“ÿ®TAÙÚ^ZoyçÙÙÙY<ð€.\¨]»vé×_ÕÂ… õÀÈ`0”ã‰*_yö³$ 2D“&MÒ·ß~« 6è×_ÕÞ½{õÃ?èÿø‡j×®]©qF½õÖ[ ÕÌ™35gΜJ+((H:t$͘1Ödh5{öl;wN’tûí·i ‘¿¿¿¤K ¤vêÔ)íÚµK’qÙ8ÊóþZ“2ÓÓÓËÔ¿:Ä,]ýúvêÔIFã¥ÿ"ôÉ'Ÿk_µj•RRR$I½{÷.se1þübÉÉV‹-’t)é;<<¼H[Eö•$ÝpÃ ŠŽŽÖÑ£G5fÌ;¶ÂÏi»Ï´iÓtøðá ßóræÎ«;v\1±º¢s%•ï]$‹ÅRjÅímÛ¶I’ÜÝÝmûÏž1¯Æ$(úûéaƒäëã¥3gÓôÑœ¯•yáúþ6d°§””}÷Ýw’JOb»å–[ÔºukÕªUK^^^rqqQxx¸úôé£yóæéÎ;ﬔ؞~úi}óÍ7ºýöÛ.«Gš7ož† vÅ{Œ?^ñññòññÑèÑ£/›€z-ºpá‚$]±‚²5AÙÚ¿°òγ···¾øâ =ÿüóŠ—§§§<<<¯çŸþŠ19Jy÷óøñã5dÈ5kÖLáááòðð«««¢££uÏ=÷hÑ¢EjÞ¼y¥ÅýðëcÇŽÚ¼y³þùÏVÚ8’Ô®];[òáÊ•+‹µçççkÍš5’dKH´*œ”X·nÝï,IJNN¾låy%IgΜ¹b_+GÇ,]ýú†……Iºô¥%=«ÅbÑÆ%IM›6-S öP¸J{NNN‘¶Šì+éRrïC=¤Ûn»MK–,±K¼ûÛßäáá¡“'OjæÌ™v¹çåx{{ËÇÇçŠ_*Qѹ’Ê÷.\IëÖ­%]ú²³Ù\¤Í1¯F$(»¹¹êÞ!·Ë×ÇKçÒÎkÖœÿ’œ å°aÃIRTT”"##‹µ¿óÎ;1b„ºté¢6mÚ¨}ûö5j”e4õòË/ÛªZû¬öîÝkßµ£òìç–-[¦#F¨oß¾2dˆþùÏêâÅ‹òññÑäÉ“+¥rtÆ õøã+--MãÆSAAÝÇ(¬~ýú’.í—“'OJ’žyæ}ùå—¶ªÚû÷ï—ti¿N¶ÌÊÊÒ¯¿þ*Izä‘GlU\­:vì¨zõêÉd2Ù¾¡4åyƒ‚‚$I¹¹¹rss»bÿêsyÖךüëééYä]/Ìš˜jMf® =zô$:t¨X2wEö•$¥¦¦jõêÕvÛÿ±±±êׯŸ$iÊ”)ÊË˳Ë}í¡¢s%•ï](‰n¼ñF½÷Þ{êÑ£‡rrrôúë¯WJÌÇ« ÊzݪÐà@egçhöçó•y!ëÊŠIJJ²GEEk_³fÖ¯_¯cÇŽ)--M§OŸÖªU«4jÔ(ÈÍÍM7ß|s‘k,‹rss•››«üü|Ûù¼¼<Ûù’Ú¥KÉtcÇŽ•$­X±BÇ×öíÛuöìYmÙ²E#FŒPJJŠœœœtÿý÷_öÙ WÙLKK³U½^X”­‰^¾¾¾Z¾|¹–.]Z$ñÛÚ^8A¹"óܨQ#õéÓG’4sæL=÷ÜsÚ¼y³öìÙ£¯¿þZýû÷—Édª¼¯€òìçÂvíÚ¥õë×kïÞ½Ú²e‹¦OŸ®×^{M’£-ZØ5^£Ñ¨I“&ÉÙÙYÿøÇ?túôi»Þ¿$¡¡¡’¤ôôtIRÛ¶m5jÔ(µiÓF'N”té}’.í-k¥V«I“&©  @QQQúæ›oÔ³gO¹¸¸(!!Aï½÷ž$éµ×^³%1–¦<ï¯5Aø™gžÑž={´}ûvÍ;WÇ/5‘ב1—w}÷ìÙc;îÞ½{‰}Ο?/Iòðð(Ó=+ªM›68p $iòäÉÅÚ+º¯ìmÔ¨Q2:~ü¸.\X©c]-{ÌUyß+___%&&jÇŽúâ‹/Ô«W/íß¿_wÝu—¶nÝZ)1ïºOP®®fñ $I_/Z©³i鎮]Ö$WIòóó+óu‡¶%ëEGGÛ-žþýûËÍÍM&“I&L(V-3;;[ÿùÏ$鲉¤’4}út=úè£zã74pà@[rÔõâÏ”»víjKFîÙ³§­_I Ê™ç¾}ûJºT™óÝwß-WAA,K…ž­ªUd?ÏŸ?_f³Y’Ô¤I»Æ5lØ0µhÑBëÖ­Ó‚ ìzïÒX“­ûÅÇÇÇÖf­.lMB,ÜßjóæÍºÿþû•žž®ºuëjÚ´iÚ±c‡þýïË××W¯¾úª>ýôÓ+ÆQž÷7))IÛ¶mSRR’rssåëë«víÚi„ Z¼x±bccK¼ÎQ1—w}7mÚ¤#GŽH’^|ñE ø@ƒAË—/×Ê•+‹õ©è¾²§€€ÛçØÇ\éUɯ–=檼Åb)ö"õë××èÑ£åååU)1ÏÙÑT¶„ö­%IÇN$ëèñ“rww+±ß¥oäΫÊÐàšcM¬,† ¦›o¾YQQQ Tvv¶Ž=ª€€I’»»»Ýâ¹é¦›$IÛ·o/µšè¡C‡$I Ô¹sçJ½ß²eËì[ucM³&(÷èÑCf³Y7nT§NT»vmýöÛoruu•ôGEU©bólMÂÝ·oŸ²²²*áÉ*Oeìçììl>}Záááv­ êïï¯'žxBf³Y“&M²Û}¯Ä`0H’-É|ݺuZ¿~½š7o®wÞy§HŸÒtèÐA~~~ÊÊÊÒ† Ô¶m[Û¼Ž=Z‡Öš5k®ËÕ¾¿=ôíØÉÉIñññÖ±óóó‹ì­¨¨(=òÈ#’¤§žzJÇ—tiŸ-]ºTýû÷×þýûåêêª1cÆØ%Þ²X¶l™vïÞ-IêØ±c‘6GÅlõMNNÖĉÕµkWÅÅÅ©yóæêÕ«—¦OŸ®IÒ¶mÛìsaµk×¶%''%%ièСJMM-µEö•=«U«V’¤Å‹WÊU™su¹wáJÖ®]«íÛ·K’ª,f@Õ¹î+(¿8©ø·ˆʧ}ûö’.%ºYó$)..N±±±’¤ñãÇkáÂ…¶6“ɤ={öèÂ… W¼¿Ùl¶—¥2íéÓ§§%K–hܸqe~ŽšÈš ìêêªîÝ»K’V­Z¥ììlmذA]ºtQ­Zµd4uöìÙ"×Vdž­×FEEÙçAìÄÓÓÓvœ››[¤Í^û¹*Ù³óÕ°VÜõõõUdd¤NžýôS½úê«jÙ²e%=AÉŽ9¢øøx[⮕£b®Ìõ6l˜ŒF£ ´bÅ »ßßÛÛ[³fÍRXX˜Ž;vÅäd©bûÊžºwï.£Ñ¨‹/jýúõ•2†$=úè£ÅÎ-X°@Mš4ÑÈ‘#õý÷ß—zmeÏUiïBY$''«eË–EªÎWEÌ€ªqÝWPØGPPúõë'IZ¾|y‘¶àà`Ûñž={Ê=FNNŽíØÇÇçŠý·nÝ*éReGww÷rkÕ½{w=øàƒªU«V…ïUÝX”ÝÝÝÕµkW:tHGŽ‘$­X±BƒA}ûö•¤b Ê™gëµÍš5SXXXEÁ®êׯo;þs²¤½ösUjÚ´©êÕ«WêuýŸþyÕ«WOS¦L±Ë¸›7o¶}±@·nÝŠµ;99éæ›o–$mܸ±H›už³³³K½¿µÍËË늱ØóýŒŒ”$edd9礼+k}4h ‘#GJ’–.]ª'N”麫ñÚk¯)66Viiiºï¾ûlÕs/§"ûÊžn»í6IÒÏ?ÿ\äï§ê¤²çª´w¡,êÖ­+IJOO/r¾º¬/ bHP\‘›››&Ož,oooåææjæÌ™EÚÏœ9c;nÖ¬Y¹Ç)\E±sçÎWìÿÍ7ß(??_š0a‚œœœÊ=öC=¤>ø@ãÇ×üùóåïï_î{UGÖ5êܹ³üüü´råJ[ÛªU«TPP`K@/¼žRÅæyþüù*((“““^yå• ­ÑÕŠ‰‰)±·“““† "éR%ÏÌÌÌ"íöÚÏ5Á™3gl „#GŽ”··w‘öûî»OAAA’T¤µ$ýöÛo’¤èèhÅÇÇ—xÿÞ½{K’>|Ù8ìùþ¶nÝZÍ›7—ôG‚}u¹<:wsçÊÃÃCgΜÑk¯½f÷1š7onû⃧Ÿ~ZG-ÓuÙWöb4ÕªU+IÒ¶mÛ*e {¨Ì¹ºÜ»p%ݺuSãÆ%I›6mª²˜UÇÙѪ£Ñ¨Zµj)77Wþþþjݺµî¿ÿ~Õ«WO’ô /èÔ©SE®Ù»w¯Nœ8¡¨¨(½øâ‹òððÐ?þ¨sçÎÉÍÍMòðð¸âØIII:{ö¬‚‚‚ôì³ÏÊÉÉIû÷ï—t©âmLLŒÞxã [ÿS§Né½÷ÞÓ¸qãt×]w©]»vš;w®•šš*777ÕªUK7Þx£&L˜ ‚‚‚RǶ&ÑIR@@€:vì¨Å£­áë IDAT‹_ÕÜUgÖª¥ 6”¤" ÊiiiÚºu«nºé&IRJJJ‘k+2Ï'OžÔŒ3ôðë[·nš7ožfÏž­#GŽÈÉÉI•’´ìêêª9sæ(55U³gÏÖ/¿ü"‹Å¢ØØX=öØcŠ‹‹“$}úé§Å®µ×~®)¦L™¢öíÛ+22RsæÌÑÛo¿­³gÏê–[nј1c$I«W¯ÖöíÛ‹\·zõj¥§§Ëßß_3fÌÐ믿® 6(''GuëÖµíIúꫯ.ÃÕ¾¿S§NÕÙ³gµiÓ&?~\&“IÁÁÁJHHÐðáÃe4•™™©Ï>û¬ÚÄ\žžžòóóSTT”š6mªÞ½{Û’oÏž=«Ñ£G—©²ñÕz衇$IÛ·o×Ö­[åëë[b?³Ù¬ .9WÞ}eåããcû‚ÛyOOO[ùùù¥VÃŽ‰‰±%ÎîØ±£¬ì™«ò¾ ƒAß}÷Ö¬Y£-[¶(%%Eùùù U§N4|øpI—ö×çŸnטÕ Ê€"¼¼¼´víÚbç³³³õ÷¿ÿ] ,(Öf6›õÔSOé£>’¯¯¯^yå•rm6›5eʽöÚk (VÑ3--­H‚²$½÷Þ{rssÓ¨Q£­ñãÇ—xï>úè²MO:U¤"jájÎ׃ÔÔT[%ã””íܹ³HûÊ•+m ÊÉÉÉÅ®¯È<¿õÖ[ Ô!CÔ¢E ½ýöÛvzªÒ5iÒDAAA ÓäÉ“Kì3þüç쵟kŠ_~ùE/¿ü²&Nœ¨¦M›ê£>*Ò~èÐ!=óÌ3Å®»pá‚ÆŽ«>ø@ááázçwJ¼ÿÊ•+5{öìËÆp5ﯓ““ºté"OOO[埥¥¥é±Ç+VMÜQ1WÔÓO?]ìY-‹V­Z¥‰'ûÒ {¹ñÆ%I-[¶¼l¢é™3gÔ¶mÛ"çÊ»¯¬6nÜ(OOÏbç§L™b;þá‡ôàƒ–x½õK9$•¹ò³£”w®*ò.Ô«WO5R£FJëÔ©S=z´222ì3 ú A IÚ¿¿6nܨ˜˜ùûûËÙÙYiii:xð þ÷¿ÿiÞ¼yJOO/õúŸþY={öÔˆ#Ô¾}{…‡‡Ëßß_.\PzzºRSS•˜˜¨uëÖ]6Ž/¾øBçÎÓðáÃÕ¸qcùøø(;;[{÷îÕŠ+d0d±Xlý-‹&Ož¬E‹ièСj×®"""äææ¦ŒŒ %&&jÓ¦MJKK»ì¸o¼ñ†"""­Ï?ÿüº«ÚXPP 'N(::Z«W¯.2‡’´bÅ ½ð ’JN”¬È<èùçŸ×âÅ‹5tèPµlÙRAAA*((PZZšŽ;¦_~ùåŠ{ãjlÛ¶MݺuÓ°aÔ ¨¨(¹¹¹)--M»víÒW_}¥+V”z½½ösM1wî\8p@#GŽT«V­äéé©'NhñâÅš1cF©Ujׯ_¯=zèþûïWçÎ)777¥§§k÷îÝZ°`,XPl¿þÙÕ¼¿f³YO<ñ„n¹å5kÖLÑÑÑòôôTff¦’’’´víZ}öÙg:wî\µ‰¹¢233•‘‘¡óçÏ+))I[¶lѲeË”””TicJ’¿¿…®/ï¾²‡¨¨(I—ö‹#¾°¢ÿþWÕ¿¥={÷ký†ÍZµz£Cp8”qYO>ñˆ‚ƒ%I£FÞ§1ãžupD•£y³&šùáÛrww/tÖC~~¾jÔ¨š5¯v ÊF£QQ‘:q2Yf³ÙÑá€âºOP6 jܰžšÅ5Pt­Hyyy(??_gΦkßÁ$müi‡.ææ::Ì">Ÿ;Kñq´`á½8aR‘¶à @­^¹@ƒAÏ=ÿ²–,]Y©±äüql.¸LÏkÛËŸ“»»».deiê»jóæ­*0(,4D êÇ::¼b:th«·ÿõšÜÝÝÕ®ãmÊÎÎqtH †¸î”ïÜWÄ9çäꪨˆPEE„ªU³8ÍøÏž#ÄÆÆ(¦nIÒ?'OÕ·óÛÚŽ;®Ÿ·lwL`—áåéù§jÏUãºOPÞ¹{¿‚ƒ´í—=:v"Y9såç㥖MãÔ,¾ü}Õ£k'}µ`¹£C•$¹¸¸(((@’àï§Í›jÛö_lí·ÜÜÉvZéñlþi«nxO¥ãH‘á¶ãµë6:0€êïºOPÞµç€ví9 K¡s)§Ïè@âQ99ß(VëÇ”z}U –Á`Ѓ‰jP¿žºvélKPöðpWÛ›ÚØÚÂÃïp7”…›››íøâÅ‹Œ ú»î”-—i;zýB;~ÙUêøåY£«‰yóO[4rÔ8ÛŸÝ\]õóæï%IÏ<7QË–¯*vÍ–Í?ÈÕÕEÿ7yªæÌW¬½¢kTÞ¹òôôÐ=wß©.7wÒ 7Ô–——§²²²•~þ¼Ž?©Ÿ~ÚªgÏ-õz`_×}‚òåÜP+B’t2ùtµHN–¤ÀÀIRîÅ\ý°f½è£zõê*1ñ°-qxùòÕzü±‡äïï_â=:wj¯&ñ‹œ Uî]u[·[ôò?ÞÔ·óÛ5n'''½úÊ êÓ»{‘óuêDë¾:Ñؿƌ}¶ÔDÔÏçÎRXXh‰m>>ÞjÔ°¾Vx¸Û5æŠûøh=ð×aEΪۭ7ëÖ® šôÆ}9ïÛ¯uÄUTEÖ¨¼såïç§Ùÿž¦˜ºuŠœ÷õõ‘¯¯¢k×’““‘eªPKPvwsSxh°Úߨ\ñbe2åkéªÿ9:,›€€KIÇùùùZµz裮]:ëðá£êܹƒö8¤ßŽŸP~~¾üý}K¼ÇÓ?V~~¾Ž?©Ì äâì¬øøÆzbìê[÷=ÿÜSúá‡õJ?¾ØµO=ý¢œŒÆ"çš·hªY¾sٸǎeKN^ºl¥þûÍ"eddªyó&zdô ð׻IÁCF(%%µØõƒA’´sçn-Z¼L‡Vúùó2™LòõñQllŒv^¦òóÕJL<¬Ûv•$uíš 7_Ÿ(IJ¸¥rrrŠô5åç»þþû†Únúy›Þ}o†~;~B7ÜP[OŒ}X-š7ÕsÏŒÓ/¿üª}û»¾£¯®Pr ³Žb­ œŸŸ¯M›·èÂ… êrKgmÝú‹üýôùç_ÛÚÝÝÝåæêªÜ¼¼"÷øßú‹ÝwÍÚõ:|䍿3Wnn®êر­/YQ¬_~~¾þœŽk2™.sdD¸î½÷/’¤ù 륉¯ÛÚöí?¨ŸÞ¦¯¾œ-??_=<ê~M|åÍRïµnýÆ+éþº{ïec¸Z‹Å6oùù¶óy¦¼bóùg¡¡!zxô’¤Õ߯ÓSOÿ]æß‚ÏKÓ¨‡ŸÐ¢_(4$X÷¢^|µØ=ʳF‰Ùž®f*:W-Z4•$-^²BŸüçó"m))©úÅŽIë lŒWîr°¯*¤›;´‘›««ƒ‚*®pe“ɤ5k7(>®‘îºs€$iõë$I&Ó¥4b?¿2ßûèÑßt*9E’T»V”ÝbîÓ§»œŒFåççëƒékO:|T‹¾[&IêÝë69;_Ûyñ}zw—››«L&“&½þ/[­UNÎE["y§Ží®êÞ•µFŽRѹJKK—$5k'¿²ïuPy®íLÑ«p17W/½þ®<<Ü M©MË&j×@~šñÉWÊ/(¸ò*™Ÿ¯¯¤?*ä®Z½F}ûôPï^·éØoÇuð`¢¤?ªûx{éô颠½½½õ—»ªSÇvŠˆ W`€¿²³stì·ãòó¿t7w7»ÅÜ¢ù¥*·&*ùTJ‰}Ö®Û¨;ö“»»»5¬o÷ŠÈU©u«æ’¤»v+õÌÙû$&‘t)á< Àß–hkUÕkä(«9Ÿ}¥íoR½zuµhÁçš÷õ|-X¸DÇŽ¯ôØ@ÉjL‚²UNÎE;ž¬cÇ“µïàaøKEE„éÆVMõãÏ;ž|¼½%I¦üK’7lجììyzzèûï×Ùúåå]JPöôò,r}½˜:šþþ………9ïææf«Î,I;Æ$I¥&'KRrò)Ûqðïý¯UÖçmݪ…vn_Åþ~~¾E’n±FŽRѹڸq³žxêýý…¿)$8H#®‘ ׎_viÎÜyZµzm±ªÌ rÕ¸åÂ$ѱÉŠŽŠPý˜ªG‚²Ïï Ê¿WHÎÍËÓà!#äîî®S§NÛúü^íÙÛËËvÎ`0hò?_UXX¨rssõλjõêµ:söœÜ\]U«v”¦¾õ†ÂË&ÆV˜áR*­ÅR¶î–²v¬¦ F£$©ÀlVAþ•«n»º¸üq­ƒÖÈ¢?æÜh¬ºÔçŠÌ•Õkþ§õ6©g[uçàþjѼ©í'éð=ûÜDí?pÈî±€’ÕèeIÊȸ EI^žŽE’äý{‚rþï Ê’tüøÉbýò¯°\¸‚r£FõU/¦Ž$iÂËohÉÒ•¶6“ɤ}û(++Ëî1§¦žQ£†õ^jŸˆˆ?ÚΞ=g÷ª’õyW¬X­gÇ¿|U×ÚkÌ–?ª WN8ÎË3Él6Ëh4Êû÷*ÝU¡"sU˜ÉdÒ¢ï–iÑwË¡;ôÕ½ÃîRLÝ:úhæ»8ø^¥¦ž±_à TFGàhA’¤ìœ‹•:έ]4bøÝŠŒŒ¸l?oïK‘ó %(—$ÿ÷ Ê^ž$(ÚŽ÷ï?XÞP¯Úö»$Iõë×SdDÉIÊ·ÜÜI’”““£}U[e°>o»¶7ÊÍÍíª®µ×],´_­{æJ¬ ¼ÖéªP‘¹*ÍÉ“Ézïý™ºçÞ‡”ŸŸ/__õ¿½·]î ®¬F'(7n£ˆ°`IÒá£Ç+mœ¿Þ7Toýk’žzâQ}>w–üýüJíëéq©’³éJ ÊÖ Ê…*?Ÿ=÷GeâøøÆ ùª,^¼\rrrÒ#?P¬½^½ºê×·Ç¥¾KVÚb¿V-ún©òóóà¯ñÏ=!''§2_k¯5:u*ÅvÜ¡ýMeºfׯ{%IݺÝ"÷r}5*2W’äì\z‘÷ÄÄÃ:>C’à_ú;ì«ôì¿ë€AÒc#‡jÿ¡#:úÛIe^¸ ‚³|¼½­ömZH’²²²õÓö]•G¯·ÚŽüýÔ¶mk-_ñ}‰}=¯ˆœŸ_pÙ{ü^AÙÃãåýûédò)EF„ëÙ§ÇÊÝÝ]?ý¼Uéiçåâê¢ÀÿJILM>•¢Oþó¹îÿë0ÝÞ¯—<==ôõ7‹”™™©æÍšè¡GÈÙÙYçÏghúŒÛ}üª–’’ª3?Ñ#? ;ôÕmZjÞ¼ouøÈ19sVnn®ŠŒŒPëV-ôÚëÿ²­•d¿5:|ä˜ÎKS``€Æ}DNNN:p QƒA11uT·N´¦¼ý~‘k,\¬n·Þ¬à ÍœþŽf~ô?qRn®®Šˆ“““ý¿¯ "s%IÓߟ¢|“IËV|¯_wïÕÙ³çäìì¬ÈˆpÝ9¸¿‚‚.U¤¶&_€Êw]'(*<4Xá¡Á¥öÉȼ 9_}§‹s+-Ž””T5jÔÀöçS§N—ØÏh4ÊÕÕE’®Xe8ßô{åB Êf³YÏ¿ðM{÷ŸòññÖߟª¢¡—Ù»Óf*,,T}zwW·[oQ·[o)Òž‘‘©1cŸÕéÓ©USeúpæl¹º¹êþû†ªv­(=õäc%öûäÓÏuôèo¶?ÛkÌf³Þ6S^|Fþ~zéïÏiOO?_,Ayíºúfþwºc@_5k¯wßy³\c_­òΕÑhT³¦qrwwW‡mK½ÿÚµ´beÉ ÿÀþ®ëå´ôóš7™ê×»AQaò÷õ‘“³“.^ÌUJêYí;xX[wìÖÅÜÊKN–¤½=MaᡪU+R_½@¿ìüµÄ~…“ó ._AÙšÀìééQäü¶í¿èŽÁ÷êž{îÔMmZ*,,T~~¾ÊÊÊVúùó:s朎9ª?þT®g±X,%ž/((Ðø^Ѫï×êÎAýÕ$¾±ÜÝÝ•œ|JkÖmпgÏÕ¹siå³:²X,šúî‡Zºl•îºs€njÓJaa¡rssUFæ>|T?ÿ¼Mééç‹]k¯5úï7 •žž®»‡ RÆõåíã­œìlí?pH«¿_'ƒÁPl½^~åMmݺCƒöSýúõäåå)“ɤ´´óúíø íÝ»_?–soØ{®,‹{üÝÚõf5oÞDÁÁA ð—ÙlÑÙsçt`ÿ!-[±ZK—­’Ùl¶kÌ t†ßŠ˜8q¢a÷î݆ÔÔTCff¦!&&ÆššjtuuuÊÊÊ2šÍfOOO“Éä*ÉÝh4zY,‹Å°nݺ[¶l±Ý«M›6Uø8Žëèì®s§öšöî?%I7wí«´´tG ¼¾øâ Ûq›Ö…~Ÿ[ì7Ç€kRáÚ§¿ÿ.8!!¡¿Á`H3 ™f³9KÒE—¼ììl“Ñh4yyy™óòò BBBÌIIIKHHˆ%>>Þ2qâÄbÕoUó$¸ %ÿƒÛ´”$¥§Ÿ/±"0jgG€êãÎÁÔ¿_/-]¾JIIG”——§ŽÛéÞaC$IËW~/‹¥X’;j”aÓ»g75m§¦M㊵L>¥÷?øÈQ :!A6¯¿ù–z÷ºMmÛ¶QXhˆüü|uæÌ9­ýß}0ýc¥¥¥;:D8 ʰÙàö8äè0P€k ÊÊŒeeF‚2ª ___5oÞ\ÑÑÑŽ¥¨Žkäëë«fÍš©nݺŽåšW×÷zÄ<¸Ö9;:׎ hüøñòððД)SôÓO?]¶ÿÀ5zôèbç=ª‡z¨ÒÆEÙÙk*¢*×·:“‹‹‹¦OŸ®cÇŽ94–ëAe¬ou\£Ù³gËËËKü±>ìèpªLMY_«êöyUe™g{\‘‘‘ ÐÈ‘#+)ºê3.®Îµ¶¯®U×âgNy±7ªó|}c}¯o5m}yÞ«Ó¸qc½ÿþûêÞ½»¢££åáá!ÅÆÆªW¯^º÷Þ{+åÚš¦&ýÛ (¬ÆVPnÛº™nïÙE’ôíâÕÚ²ã×J¯ç“oËÍËO[þû¾¶-˜U©cIR—.]tÛm·)66VÞÞÞÊÉÉÑ©S§´gÏ­]»V¿þZ¹Ï[S´nÝZ&L›››  œœG‡tE‰¹   ÄãÒ|÷ÝwZ¹r¥íÏ#FŒÐí·ß~u—c\”½Ö¨*÷UEØëyåZüÌ©ˆkåÝ¿Ö÷Õµ2Ï(Ö÷úVÓÖ—ç½:O>ù¤ÜÜÜ”­ÿûßÚ¾}»Ìf³‚‚‚Si×Ö$5íßf@a52A¹y“Fê×£K•Ž™“‘&7/?åd¤Uê8NNNzá…Ô±cÇ"ç½½½«ØØXõíÛWwß}·ÒÓÓ+5–šÀÓÓSnnnŽãªT$æO>ùDÁÁÁrwwׇ~xÅþ&“I&“Éöç¼¼¼*eg¯5ªÊ}Uöz^G¹?s*âZy÷¯õ}u­Ì3ʇõ½¾Õ´õåyË®N:ŠŽŽ–$MŸ>]Ë—/·µ8qB;wkkššöo3 °— |CíH êÛM’Ef³EF£±RƩӺ‹ÎݯÌ3'%IYçRäQGYçR$IƒQµ›wÔ™#{•~Ænã0À–œüã?jÁ‚:qâ„ÜÜÜT¯^=uèÐAÎÎÎ$'£\’’’ôè£Ö˜qQ5X_”†½Q5˜çëë{}«iëËó–]hh¨íxóæÍUv-€š£F%({yyêî;zËÉéÿÙ»óø®ÿñã¯ìûD±$ŠÆÖÆ.(©­hi-mQE¿¥úi«õi«›îT??ºè‚ò¡U­­–ŠØ×*±'ˆ ²HˆÈ¾þþÈ÷Î7‘EîɽI½Ÿ‡Ç#™™3çÌ9gÎ÷æ=Ç‚î¢_¯`ìíl5ÏÇÌÌœîÏþ;'7.ýαu‹I=O£6qóêEZ÷ÁƒƒŸÅ¹¾–ÂÙð_5Ë»oß¾;vŒ÷Þ{ââbe_||<»wïÆÌÌL³ü„B!„BÔ.¥WõÍÍÍ5ZZ!„B!„â~äååE«V­HII!22ÒÔŵˆô !„B!„B!„BñOwß(›™™1jØœØwø;E¿^Á5’—‡oKìœÝ033§ùCà×¹·c).*âÑY_ãÚ ©r¬OÛ®š(7hÐ( P.œ\ZEÛ­­­ùã?øøãÙ½{w¹c6mÚ„••ß~û-ëÖ­+³/44”öíÛÓ´iSêÕ«‡¹¹¹\¿~°aÃ233+,š´:ݺucРA´lÙ’““9|ø0kÖ¬©rµh777:wîÌ<@³fÍðòòÂÁÁ€œœ’’’ cýúõJš¦M›²xñârç*}ŒÎñãÇyã7Êm·³³cذaãããƒÙÙÙ¤§§“À‰'øõWíú…š2>œ©S§–;.66–çŸ^³2ÞMm¾¡¡¡´jÕŠæÍ›ãî“æææÜ¸qƒˆˆÖ¬YCbbb¥éÍÌÌèÝ»7ýû÷Çßß'''òòòHKK#>>žóçϳcÇ®_¿®ê:uúôéCß¾}ˆ| IDATñóóÃÉɉÄÄD<È®]»?~<;v¤°°}ûö±xñb²³³•´jï_C™²_i1n¨ÑªU+†NÛ¶mquuåÎ;œ={–ßÿ]ó?0ÑbÌQSfCÆI5ýÙÔ÷þøñã ÂÓÓggg¬¬¬HKK#22’µk×uÏ2àAƒ˜1cW¯^eÒ¤IUÄ'Ÿ|Bjj*cÆŒL_Ï––– 6Œ|||033#>>ž;wVëE*úÌûjëJÇØs·š|µ˜»Õ¶‘1ÇÉÒ|}}yõÕW RòÕÕÑ¥K—Ê?zôh&NœÀ3Ï}˜={6çÏŸ/wŒ­­-o¿ý6:u*·ÝÛÛooo:wîLFF†fÁ¾£FÂÏÏOùÝ××___ž|òÉ2Ç…††âêêʻᆱI¾u•šqC­‰'2zôè2ÛÜÜÜèÞ½;ݺu㫯¾RÆk 5e6dœ4eVsïtéÒ…–-[–ÙæééIÏž=éÑ£ ,`Û¶mš•×P)))¸ººÞóX777nܸ¡YþjêÙÞÞž>úˆ€€€2Ûu÷oU ™÷µ¨+SÍݦÊWMiÇÉ~ýú•Ë·OŸ>ôìÙ“yóæ±sçÎ2û9¢(±uëÖrçlÛ¶-Pòœ­åK ¤}Cí¼`(µõ\ûyCm¾¦êB!„B!„PgæÌ™Êgj†ìš››ãããÃÕ«W)**ª‰"jJíõÖEu­LIêªú¤®„÷ë„B!„B!„)ÜÊ^õ=éÓã!²²²Y½n+E•¬,¬¥¼ìLâNî'þÔAzLø7æ–dÞLÂÁ½>ýÉKgk$ßÇ3xð` Ä©S§Ø»woäS™}ûö±nÝ:îܹƒƒƒ]ºtaäÈ‘¸¹¹ñÁ0mÚ4nÞ¼©YÚ &(AJ»víbëÖ­dddÈøñãqqqáý÷ßgêÔ©J€RE¢¢¢Ø±cW®\!==‚‚hÚ´)çÎ+slll,C† JVpÔ­ˆõÄO““SæØŠ>ì3f ¾¾¾äçç³lÙ2Ž9ÂíÛ·±²²¢^½z´hÑ¢Ìj¢ZPSæ 6°yófå÷‰'2|øpMËW­òÝ¿?›7o&-- {{{Ú´iÃØ±cqpp`Ö¬Y<÷ÜsåV饗”àä]»vFjj*ÖÖÖ4hЀ7Þx uX‰eË–±~ýzÚ·oÏ{ï½ÀÆY±b]ºtáµ×^#88˜&Mš[#e¨®ÚЯԌ9†5j”sòäI–.]JBB>>>Lš4‰ÀÀ@¦M›Fdd$111šä©vÌѪÌúŒ“:†ôgSÞû+V¬   €„„233±´´¤U«VLš4‰Æóâ‹/rèÐ!ÒÓÓõ.“–RSSpppÀÒÒ’‚‚‚JÕÝ–žMYÏ/¿ü²°·mÛ6ÂÃÃÉÌ̤yóæ >¼LpûÝ ™÷ÕÖ˜fîV“¯ÚöUÓF¦'K+((`óæÍ8p€ŒŒ š7oÎÓO?M½zõxå•W¸|ù2—/_VŽ¿|ù2)))xzzÞ3@ùäÉ“jVVißê1õ¼`(CëYÍõêóÌp÷X¨&-˜îyC‹|õíjŸÍ„B!„BÔ.NNNœ8q€qãÆqèСJ]½z5:uâÇä£>2VÅ]J6¡ïçu={öä믿ÆÎÎŽ¶mÛ’••¥uñ4§æz뢺ØFúZ¹r%¿ÿþ»òûË/¿ÌÓO?­÷yҊԕ¨ ´º÷…¨ŒŒuB!„B!„ÂTþñÊfff ´/æælÚ¾—;™FÍ¿û3³iÝ{)±ç8²z!ÎúŠA¯Ëƹ¹­y~?ýôíÚµÃ××—7ß|“~ûí7Μ9£y^‰ŽŽæìÙÿ ¾ŽŠŠ"""‚O?ýWWWÆŽËÂ… 5I[¿~}FŽ @XXóçÏWöÅÄÄpòäI¾ù朜œ7n_~ùe¥å>räH…«jU´újqq1yyy@Ù/„óóó•íUiÓ¦ ;wîä·ß~+³/%%EÓ•ùtÔ”¹¨¨¨Ì1Æúâ[«|/\¸@DD„òû™3gÈÈÈ`ÆŒøøøÐºuë2uîïﯿmÚ´©\ŽŽfÖ¬Y5 œœœLvv6‡&>>žÆsâÄ ÒÓÓ çñǧY³f˜<@¹6ô+5c޾<==?~<`îܹJÐIZZ³gÏfÉ’%xxx0räH>ûì3MòUSÏZ–YŸqRÇþlª{¿ôuÞíСCÄÇÇóý÷ßcmmM§NÊ­ÂjlÉÉÉ@ÉsŽ»»»òû¤I“hÓ¦ K–,Qæ~’’’”ô¦ªçf͚ѳgOÖ¬YÃ?ü ì‹‰‰aÇŽlܸKËò¨†Îûjë L3w«ÉWMûªi#S“¥­ZµŠ•+W–)sDD‹/ÆÑÑ‘ñãÇóþûï—Ió÷ßJÇŽ±°°(S_Jé±cÇ4-«´oõ˜z^0„šzVs½jžêâó†VùêÛ7ÔþP!„B!DíR:pÃÊʪÊcuÿ——`ÓZ°`ÞÞÞØÙÙ1wî\½Ò:88`ggWC%«j®·.ª‹m¤¯¼¼¼2Ÿ#ú™ÒýPWZ‘ºµV÷¾•‘±N!„B!„B˜Š¹© PÓîԎƼ‰¾ËÉ3¯ðXSÚ?ú4!%4ë¿çê™Cܸ‰µÿõìœÝ5Ï3==3f°iÓ&ŠŠŠfþüù,Z´ˆÌÍßä§OŸfÛ¶môíÛ·Â?Ä7$mß¾}177§  €+V”KÇöíÛ Ñ+ßštûömZ·n³³³‰KsÚ¹s§² Z‹-ÊìëÓ§¹¹¹ö+cÒ­Ðêêêªl+½¨¨˜š1§*!!!X[[SPPÀ¢E‹Ê­ˆ—““Æ ”¸M­6•¹6ôçªîý{¹zõªØÚ AÍ˦¯ôôtåà<==077çÑG¥M›6tíÚU9Vt{ýúu£”­ªzîÝ»7Pò…{é RÂÂÂJW05tÞ×¢®L5w›"_5mTÆœŠVvMIIQ~øalllÊìß³gŽŽŽÊjÉ:-[¶ÄÖÖ€£GjZVi_ÓS3/TEM=×E¦ê5™oMõ !„B!„µOaa!ùùù÷ü>AÀœ™iÜb‹²¢¢¢:t(ýû÷çàÁƒ¦.N»ß®W!„B!„B!„BÔ-ÿèe{;[úõ ¦¸¸˜-áûŒž¿¹…%ÅEE\=s˜+ÇvphUÉjyYXÙÕL@Vvv6 .äÙgŸeíÚµdddТE ^ýu¾þúk|}}k$ߪè¾,µ³³ÃÏÏO“´\¹rE »Û_ý€ÞùÖ”uëÖQ\\L“&MX²d Ï>û,52u±î+ÙÙÙJ`¤‹‹K™}-[¶àòåˤ¥¥½lÕefffê"ÔjjÆœÊ<ðÀ@É‚ܼy³Âcââ‒~uwß2…ºRfcõçªî}ž|òIæÏŸÏŠ+ظq#¿þú+_~ù¥@xwp£©$&&àåå”Ì‹ŽŽŽtîÜY9N·ßXÊUÕ³.ÈëòåËdggëu^5ó¾Úº2ÕÜmŠ|Õ´QmsΞ= ”¬ˆ|÷¼pâÄ ¥Ï—Ù§ XNHH !!AÓ2Iûš^uæC¨©çºÈT}£&ó­©¾!„B!„¢vÒýÿý^+(K€²B!„B!„B!„B”U;–”­!=»vÂÖÖ†ˆSQ$ßH5zþÇÿXBâ…d¥¥(ÛÏg÷÷ïpé¯0 òrk4ÿ¤¤$/^ÌÒ¥Kyì±Ç3f Íš5cÞ¼y¼ð ¤¤¤Üû$ÑÁÿ­N¨6­»{É Ô•)ݽOß|kʱcÇxï½÷˜1cîîî<õÔS<õÔSDFF²nÝ:öïß_nõ/¡½œœ¬­­ËlwrrªîW¢öS3æTFwž¶mÛ*+4WÅÉÉIYÓTêb™kZe÷>€¯¯/ü±²Ê®ŽM™à¤Úò‚€ëׯãççGýúõÿ ¬ÌÌÌÄ××oooñööVŽ7–ÊêÙÍÍ €7nè}N5ó¾Úº2ÕÜmŠ|Õ´QmsJ?÷–^É ¸¸˜={ö0bÄzõêÅâÅ‹•zíСPÒZ“ö­ªš ¥¦žë"SõšÎ·&ú†B!„BˆÚ)++ ggç{® ¬ÛŸ••Uáþ¾}ûÒ¯_?üüü°³³#99™}ûöñÍ7ßpíÚµ*Ïݾ}{ž}öYºt邇‡·oßæØ±cüðÃDDDT˜fôèÑ´oßž€€êׯ‹‹ $&&²ÿ~¾ûî;âãã«Qú³··çÙgŸ¥oß¾4kÖ GGG222HKK#..ŽC‡±xñbåø§žzйsçrùòeúõëWå¹»uëÆòåËIJJ¢k×®L˜0·Þz«Ü±ÑÑÑ 8°ÊóµlÙ’­[·–Û~úôérÛ<Èøñã+<­­-C† á‘G!00òóó¹uëQQQìÚµ‹_~ù¥Â´úö 5× êû†™™ƒfäÈ‘<ðÀ8;;“››Kjj*—.]âäÉ“¬_¿žØØØ{–¥:´j£Gy„1cÆÐ¶m[ììì¸ví;vìàûï¿W^F§µ—^z‰nݺáåå…››ÖÖÖ¤¦¦rìØ1–.]ÊñãÇ5ÍO«º2d̨W¯½zõ¢S§N´nÝšFáää„™™YYY\½z•ß~ûŸ~ú©L:µ}Òz6u]©¡ï{7CÇ+CÛWGM]ÕµyИ÷¾Ú9TM™§NÊk¯½@ïÞ½+¬Ï‡zˆU«V%mrôèÑ2ûÕögC™ª?«½^}óÕj¬SCß1ÇÆÆ†ÈÈH ¤_nÚ´©Ü9£¢¢°¶¶fîܹ,]º´Ü~5í«¶ }ÞPÛ'…B!„B!j³t€rÇömèÐ.€í*=nø ¾ Ô—Ýް}÷!MËp¾ü‡ƒöý¡i÷’——ǯ¿þÊÙ³gùøãqqqaôèÑ|õÕWÊ1ÅÅÅÊÏ5xu¯/ô I«+gé²W¥ºÇáC‡øûï¿éÝ»7ƒ "00PùÇÇÌ¥K—L]ÌûR^^ææugùš¾ë"5cNetu[TTDaaá=¿×J ÆPËl*fff¼ýöÛxzz’››ËÒ¥K9pà7oÞÄÚÚš† òî»ïR¯^=SU¡ûX·êo=¸}û6¿þú+“'O&88˜-[¶àêêJnn.III¦,.ðãUAAÞiÕÌûZÔ•©æncç«EÕÆ1§ty*êCÛ·ogĈ¸¹¹Ñ¡CŽ=вBëÝL¡iß&5õ\™ªoHŸB!„B¡•ŒŒ àÞÿwÔ}÷ ;þnº—ÝéøøøðÔSO1xð`ÆŒ£bÜíµ×^cêÔ©e¶yzz2`ÀyäÞ}÷]þûßÿ–K7{ölåÅ»¥ùúú2f̆ Â3Ï<ÃÉ“'«¼.}¹ºº²zõjüýýËlwqqÁÅÅ…&Mš`aaQ&°C÷™«îE”UѽD4!!AÃR«óàƒòå—_Ò¸qã2Û­¬¬°··§Q£FdffV lhß0”š¾aooÏW_}EÏž=Ëm···§qãÆôêÕ‹ôôô †LÁ‚Ï?ÿœaÆ•Ùîç營ŸO<ñ“'O®‘`ÒÞ½{Ó®]»2Û¼½½4h¡¡¡üûßÿfÍš5šç«†¡cÀúõë•—½ÞÍÙÙ™ÀÀ@ìííËíS;^™ªžÕÔ•¡ cKS3^Ú¾ ®®êÚ<Æí“ZÍ¡†”y÷îÝJ€r×®]Y½zu¹óvéÒ(y>º;ÈYmVÃýYíõšbÌQKí3’¡ m_5m¤öyCMŸB!„B!„¨íþÑÊ––¦.B­röìYvìØÁ£>ZîCçüü|Š‹‹133ÃÁÁAó¼K¯F™––¦IÚÔÔTš7o®UD·R"ÀÍ›7õÊ·:Ô¬jWPP@xx8áááxyy1pà@FŒ¯¯/Ÿþ9Ï?ÿ|¼ÉYíJ|º€ cÂ+ߤ¤$Zµj…ŸŸ_æSQQQdggßsõ½š¾«£¶õ+5cNetcΞ={øä“O49§¾ô­çÚPfêöç»ëÞoÞ¼9¾¾¾,X°€]»v)û ¸xñb¥«b˜ŠneoooZ·n——7ndÏž=<÷ÜstïÞ'N`ffF\\\•½ÆªçêÌÝjÒV6ïkUW¦š»Õæ«OûjÑFµa̹[é— TôLxéÒ%¢¢¢ _¿~=z”¶mÛbeeEvvv­‚Ò¾ú2Õ³¨>ÔÔóÝêÒõ»oÔ†>©õ*çB!„B!LãÎ;@Ùå¦M›bmmÍÕ«W•φ­­­HOO¯ð<ýõ+W®$>>žââbºvíÊŒ3prrâÓO?eÈ!åÒL™2E D9|ø0óæÍ#..ŽfÍšñúë¯Ó¡CæÌ™CDDD¥A¬þù'?ÿü3©©©888ЩS'¦OŸŽ““óæÍã‘GÑôEÎÓ§OÇßߟ¼¼<æÏŸÏîÝ»•—}6hЀ¶mÛ– âNLLJ‚/¬¬¬ÈÏϯôüºïxti–/_®¬Î%<&L¨Vy£££ JV¼ûòË/èØ±#ÙÙÙeŽ­è%h­[·fùòå888PXXȆ رcqqq˜™™áááAPPP•«eêÛ7Ô\oi†ô¹sç*ÁÉüñ¿ýöIIIØØØÐ¤I,X€……¶‡¡¶^{í5%Xè?þà—_~!==:ðÒK/áîîÎ÷ßÏ AƒÊô+-üç?ÿ¡  €¸¸8îܹƒ••íÚµcÖ¬Y4oÞœ÷Þ{íÛ·kö}¥ÚºÒbÌ8~ü8ëׯçÂ… ܺu‹üü|œiÙ²%'Nœ¨4¡ã•!õ\[êJ_†Œ±:ZŒW ûª©«º8‚qï}µs¨š2Ÿ;wŽÄÄD¼½½éÖ­[•ʇ.w/©éÏZ1fVs½†æ«v¬SC«1G }ÛWMiõ¼aè*„B!„BQ›ý£”ßûìë*÷¿ù¯)ØÛÙ²nóŽž8c¤R™–îC´ŠÞ¸—ššŠ§§'Mš4Ñ<߇z(ù°SßUà*K{öìYºtéB³fͨ_¿>ÉÉÉåÒ““S#«æææ*?;88”ûp·º’’’øé§ŸØ½{7_ý5ŽŽŽôïß_ó7H‚ú2ëÒòÖF]Z[[[ƒÓÖôÛ"#""èÙ³' 6¤k×®í«EÕ†1çn?ü0Põ3áüA@@=zô`ñâÅtëÖ (ù#c]‹´ï½k¼RCM=ß­.]¯±ûFmè“ZýP!„B!„ié”u+$;;;³mÛ6,--ùâ‹/øê«¯Êì¯,@yïÞ½lÞ¼YùýôéÓdddðþûïH@@QQQÊ~///^zé%ÂÂÂxñÅ•À‘ÔÔTžyæå¥v'NäÕW_­0ßÓ§O³ÿ~å÷£G’žžÎ|€ŸŸ>ø ¦!;v`Æ üðÃeö%&&V˜×õë×’—°Õ¯_Ÿk×®ðúë¯Ó±cG>ûì3Ž=  ¼ôMw ”|ßS:¨FŸ›ââbåÿðÊö¼¼¼j}ž0wî\åÿý&Làï¿ÿ.wÌÞ½{«<‡¾}CÍõ–¦oß ToV®\Éœ9sÊœïÌ™3Ì›7Oóe5mÔ¨Q#&NœÀo¿ýÆë¯¿®ì‹ŒŒäðáÃlÚ´ WWWf̘Á¿ÿýoM˾{÷îrÛÂÃɉ‰aÛ¶mØØØÐ«W/6lØ I~jêJ«1`×®]®âyêÔ©*Ë`èxeH=×–ºÒ—!c¬Žãè×¾jꪮ΃`Ü{_íª¶Ì»wïæÉ'Ÿ¤GXXX”™“,,,xðÁØ·o_¹ó«éÏZ1VïWM¾jŸsÔÐjÌQCßùÈÐ6ÒòyÃÐ9T!„B!„¢637u„¶ª †²²²¢S§N@IðÃÝÎ;@÷îÝ ªÒ}1_š——ýúõªðÐ7íÎ;),,Ä‚§Ÿ~º\Ú&Mš” B*ýA¬VJGé>ļ—Š®S'66Vù#u…«„!e®(½‡‡G™€¾êЭþW¿~ý2+Öt¾úعs§²²â¬Y³xä‘GpssÃÑÑ‘€€¦NZešŠ÷/ÞF¦êWjÆÐïzÃÃÃ)((ÀÅÅ…^xAó?¾¨}ë¹6”Y-cÝû·nÝR~nÕª•ªs©ëôOAA^^^ôéÓ‡ëׯ+À´sçNÌÌÌ5j—/_®ò\Æcus÷‹/¾¨WŸT3ï«­+SÍÝZå«Oûªi£Ú:æ ÀŽ;*}&Ü»w/iiiXZZ2hÐ %ས¾8—ö5Œ±Æ+5ÔÔóÝêÂõšªoÔ†>©öX!„B!Díp÷ Ê!!!Êg7TŽ»W€rE6mÚ¤üÜ®]»2û† † ùùù¼óÎ;å‚P³²²X¾|9½zõªvžëׯ§¨¨€x@¯´÷¢ûíÁÄÕÕµZiÒÒÒ”ië‚§,,,=z4;vä‘GQŽÕíÕ²Ø P^n¹pá o UUߨIUõ¡C‡%/züÏþc´2©ñØcaaaAAAA…e¾xñ"k×®J®ÏXßó^¾|Y *ôõõ5Jž÷R“cŽjÆ«šªgSÖ•!c,ÔìxU5uUWçÁªÔDŸ¬é9ô^eÖ½`ÃÙÙYY-Y§]»vÊ V+ú>ÍÐþl*jû¤¡×[[Ç窘jÌQËÐ6ª­ÏB!„B!„µ…|òbiiɲeËˆŠŠâàÁƒ\¼x‘ŒŒ ìììðõõeøðáøùù°}ûöréÃÂÂèÞ½;îîî|òÉ'üòË/$$$`mmMýúõ17¿w<û˜1cpssãСCdffâïïÏØ±c±³³£  €+Vh–699™ßÿQ£FÑ¿ìììØ²e ™™™0fÌ,--¹sç+W®Ô³6«'>>ž´´4\]]™4iJ`S“&Mðññ)÷ÆÅ>úˆüü|öìÙÃ… ¸uë–––Ô¯_ŸAƒ)çÏŸ¯5e.íÌ™’ÕÆÍÌ̘3g+W®$//FáííÍÒ¥K+M©¤5k+W®¤¨¨ˆ àííÍO?ýT#ùê#77—?þ˜¹sçbggÇ+¯¼¢Éykš÷/ÞF¦êWjÆ}¯7%%…U«VñôÓO3pà@ÚµkǦM›ˆçÖ­[X[[ãååEÛ¶mY´h‘Áo³¯Š¾õ\ʬ–±îý˜˜’’’ðòòbêÔ©ØØØpâÄ ÒÓÓ±²²ÂÅÅ¥ÚÁÿjÆ:}påÊüýýqrrbݺuʾ={ö0mÚ4eN‰ŽŽ®ò\ƪçäädÖ¬YÓO>Ipp0_|ñëׯçÚµk˜››S¯^½JÇ+5ó¾Úº2ÕÜ­U¾ú´¯š6ª cNË–-iÛ¶-wîÜÁÉɉÎ;óØcaeeÅíÛ·+|µN~~>7näé§ŸfôèÑX[[sçÎûB]Ú×0ƯÔPSÏw« ×kª¾Qú¤Úg`!„B!„µƒ.àX <`ÀŠŠŠ8xð Ý»w§qãÆÄÇÇcmm ÀíÛ·«}îÛ·o“ššŠ‡‡G¹Zê‚|Ž?^æ%X¥]¼xwwwÜÝÝ• Š{ÉÊÊ"99oooÜÝÝ«]ÞêX¶l=zô E‹ìرƒU«Vñûï¿såÊ•*ÓÅÇÇ@£Fˆˆˆ ((Hy9_¯^½øè£€’ê v(?ôÐCÊÏ¿ÿþ»¦ç®ªoÔ¤ªúFÛ¶m’#ë^ÆZÛuèÐ(ùU`w·;w2zôhììì Ôt…B'''ÆG¯^½hÔ¨îîîdee«|Æ«æåÒ˜XC] IDATZªÉ1GêŒWÆ®gSÖ•¡clMŽWUQSWuuã÷I-æPCË|øðaå{ôþýûsèÐ!eŸ® ãâ∋‹+—ÖÐþl*jû¤¡×[[Ç窘jÌQËÐ62õó†B!„B!Dm'Êÿ ­[·ÆÍÍ®]»Òµk×JÛºu+aaaå¶ÿõ×_üùçŸ 8€€Þ{ï=½Ë`iiÉ!C2dH™í………ÌŸ?¿Ê I»lÙ2<== ¡{÷îtïÞ½ÌþŒŒ æÌ™CJJŠÞ×RÅÅÅ,[¶Œ™3gâââÂK/½Tfzzz™?H777§uëÖØØØ(«YWäðáÃìÙ³§V”ùn×®]c×®]ôéÓ‡ÀÀ@>üðÃ2i« ’¸|ù2‡"88˜víÚ•yøíÛ·« ÚS“¯¾N:ÅôéÓ™0a:uRþ %33“ƒ‚……ÅÅÅšå©–÷/ÞF¦êWjÆC®wÕªUX[[3zôh6lÈóÏ?_áyÿýw®^½ZeÞ†0¤žM]fµŒuïóÙgŸ1wî\™>}ºÁçR3Öé+::Š‹‹Ë¼|äÎ;8p€^½zQ\\¬|aYcŽ±Ë—/ÇÅÅ…ÐÐPZ·nÍo¼Qí´jæ}CëÊTs·–ùêÛ¾jÚÈÔcNEýJVIŸ3gÎ=¿¬ß°aO<ñvvv@ÉŠËùùùš—SÚ×pƯÔPSÏ¥Õ•ë5Uß0uŸTû ,„B!„¢vÐ[ZZbkkK=8~ü8?ÿü3Ý»wgàÀ|ÿý÷XZZ’——Gff¦^çÏÈÈÀÃÃCùÌI§~ýú@IPJLLÌ=ÏãêêªW0Jvv6666z”öÞöîÝË´iĬ_¿>/¼ð/¼ð,]º”mÛ¶Uø¢°¸¸8%¸  ÿþ@Ég´þþþJ ¸P;”u+QÞ¾}»F¾o®¬oÔ´Êú†.@íÚµkF-ºàîÊ‚…îÞ§»ï´àïïÏO?ý„··w™í¶¶¶e"ÍÌÌ4ËSšsÔ¨j¼2E=›²® ckz¼ªŒšºª«ó )ú¤Ú9TM™‹ŠŠØ¼y3'NdРA|øá‡JÔ}'·ÿþ Ëmh6µ}ÒÐë­ÍãseL5æ¨eh™òyC!„B!„¢.å3gÎ0eÊz÷îMÛ¶miܸ1‘ššÊ¹sç #""¢Òs|ùå—œ>}šÐÐPš6mŠƒƒyyy¤§§“@tt4ÇŽ«4}xx8–––´oßgggÒÓÓ9uê¿üò —.]ª²ü†¤-,,äÓO?eÿþý 4ˆV­ZaccCRR‡fÍš5¤¥¥U¯ ´uëVÒÓÓ:t(Í›7ÇÁÁììl.]ºÄ033SY‹‹‹yûí·éÞ½;¸»»ãââBqq1·nÝâÒ¥KìÙ³‡]»vÕhð«>e®Èüùó¹ví}úôÁËË‹ÜÜ\bcc9xðà=Ó~üñÇŒ7Ž=zP¯^=rss¹rå ‡ªÑ|õ˻ヒ••îîî)ª÷ë×€¼¼<ÍòÓ‚ÚûWÇÐ62E¿R3ær½ÅÅÅ,]º”Ý»w3xð`Ú·o§§'ÖÖÖdddÏÉ“'õZ=A_úÖsm(³Zƺ÷Ïœ9ÃóÏ?ϰaÃxðÁñôôÄÉɉììlÒÓÓ¹yó&ñññ=zôžçR3ÖéãÂ… „††räÈ‘roSÞ´i½zõâÚµkdeeÝó\ƪçÂÂB¾üòKöìÙÃàÁƒ ÄÅÅ…¢¢"e¼:wî\…õ¬fÞ7´®L5wk¯>í«¦L5æüðÃÑ´iS<==±µµ%77—ëׯsèÐ!Ö­[GFFÆ=Ï“‘‘Á¦M›xâ‰'øóÏ?5-§Ž´¯:Æ|&4”šz¾[]¸^SõÚÐ'Õ> !„B!„0½[·n%Ê={öÄÎÎŽ°°0öîÝKnn.¡¡¡J€re«ÚUEäpwÐî÷ÂÂÂjçèVp®®šüÿhxx¸ò¹Ç˜1cèСƒòïâŋ̜9“¨¨¨2i.^¼È€”à©róæM/^ÌìÙ³éׯ?ÿü3žžždgg׊ Y]ÕT]VÖ7jZeד““”Ü u…¾m¤U[š™™ñÕW_áííMNNóæÍcÛ¶mܸq|}}ùî»ïhР&ùi¡¦Ç5*kSÕ³©ëÊ1¶¦Ç«Ê¨©«º8šªOª™Cµ(óÚµk™8q"žžžtëÖ½{÷bkk«¼„·ª—íÒŸME‹>©æþ­ãseÔŒ9¥Ó˜››kV¦ê2Æ+ß !„B!„â~Sw¾Yª~±ØÔEÐÜ•+WX¶l™Áé‹‹‹ '<<Ü ôqqq¬^½Úèi8ÀôN7vìXƒò34ÿââbNž<ÉÉ“'5ÉW Cë ??Ÿ+V°bÅ ½Óæææòã?òã?Öh¾#FŒ¨rÿ¤I“ªgRR’ò{ãÆ•žu°¢…iÓ¦Uë¸7ß|³Ò}jï_5mdì~¥fÜÐ1äz/_¾ÌÂ… U嫆!õlh™ 'µèÏ¥óÞONNæû￯V¹ª¢æ>ÒÇ–-[زeK…ûN:Å€ª}.c±ÇçøñãÕ._i†Ü†Ö•©æn­ó5dŒUÓFÆ'«j_}%&&ÅåË—59çݤ}Õ1Å3¡¡ÔÔ³Ž!í»oß>½æ­ÒóyCm¾Zö 5ÏÀB!„B!LO÷}µµ5<òP¸••ÅèÓ§>>>˜››“ššªY¾ÉÉɲeËfΜ©Ùy%??ŸuëÖ±nÝ:|||xâ‰'˜8q"þþþ¬\¹’ÐÐÐ2ß±EGGàããÃ>ˆ+V¬`óæÍ¼ñÆ 8Py![LL EEE•æ­ úÐ7°·ô9«“öƸ¸¸àææ¦éwƒú0ôzõuõêUÚ·oO@@@æS}ÛHwéV­HÆ •ŸumªV`` þþþÌž=›7*ûòó󉌌¬ÖK3Áð &Cëª.9ZÕs]¬+}ÇXSWjêª6Ô³¾Luï«™Cµ(sTTÇ'((ˆ#F°wï^ºt邵µ5YYY•® \:}ú³©hÕ'õ½^­òÕw¬SC͘“——GQQæææ899ÕT«dhûyC!„B!„¢®0þkè„¢2dPòeѹsçL\!„BhÉÍÍqãÆð믿š¸4B!„B!„Ât¶¶¶„„„pñâE®\¹@XXfff <@ÓåcÇŽЭ[7lmm5;¯)\½z• 0bÄ pqqaäÈ‘eŽÑW5nܘaưaȈˆ cÇŽtëÖ € .T™_vv6ŽŽŽz•S—¨V@ÌÑ£G’ ŸáÇ땗– ½^}é^ÀæëëKÿþýk4¯ÊèÛFºû¨uëÖ• õë×€¬¬,"##5(%xzz*?«=gnn.öööz¥3´®êÒ˜£U=×õºªÎkªñJM]Õ¶z®SÝûjæP­Êüßÿþ(Y½ÙÓÓSy©ËŽ;ÈÉÉ©öyªÓŸM¥&údu®W«|õëÔP;æ$''(Áó¦¤OûyC!„B!„¢®e!„¸Ë[o½Å„ èÒ¥ Í›7§Q£FñÊ+¯(_öìÝ»×doIB!„6š6mŠ··7žžžóÙgŸáææFDD4uñ„B!„B!„¤¤¤Ð£G\\\ؾ}»²/<<œÂÂB嶺cµ°víZ pwwçwÞÁÂÂB³s×$KKËJ÷EGG“––”¼ °´˜˜ hÔ¨C‡%..ŽãÇ%AVfffL™2€óçÏWY†ëׯàååE½zõª]v]:(iï{9uê”`òòË/Ó©S§jç¥%C¯W_6lP†æÏŸÏã?N½zõpvv&((ˆ·ß~++«Ëôo£õë×SXXˆ……E…«N¶hÑB œÚ°aš”³ôXЮ];UçJLL Aƒ4hРÚéô­«º8æhUÏu©® cM5^©©«û¹O‚~÷¾š9T«2oÙ²…ÔÔT¬¬¬3fŒò"‹Í›7WšÆÐþl*jû¤¡×«Õ½ ïX§†Ú1çäÉ“@IÀ»¾/èPÃÐ62Õó†B!„B!D]Qù§.Bq²°°à¡‡ÂÚÚºÒc.^¼ÈÂ… X*!„BÔ„É“'—ûÂ<..ŽO?ýÔD%B!„B!„Ʀ ÈlÕª@™å[·nqìØ1ºté@RR’fù&&&²hÑ"fΜɨQ£xøá‡Y¹r%111ܸq|||èܹ3ï¼ó………šå­ÆO?ýD^^›7oæÔ©S¤¤¤`eeEÆ 3fŒ²R£.ðD'??ŸóçÏÓ¦M\]]Y¶l™²oóæÍ¼ýöÛJÚÓ§OWY†¿ÿþ(Yµï믿fáÂ…äææÒ¬Y3|||˜7o^…é.]ºDjj*¼þúëXXX(\-Z´ÀÏÏO>ùD9¾¸¸˜·Þz‹U«VaooϪU«Ø²e ;wî$>>žÂÂBiÙ²%îîî|ñÅúUf5z½úÊÉÉaæÌ™üøã888˜äsR}ÛèúõëüðÃL™2…#F`ooÏêÕ«IOO'((ˆÿùŸÿÁÒÒ’´´4M¿ßŠŠâÚµk4jÔˆ·ß~;;;:ÄÍ›7±±±ÁÝÝ;;»j+""sssæÍ›Ç¢E‹(**Â××,XPa:}ëª.Ž9ZÕs]ª+CÇXSWjêê~î“ ß½¯fÕªÌyyy,_¾œ—_~™©S§bccCZZ{öì©4¡ýÙTÔöIC¯W«{Aß±N µcÎo¿ýÆ€¨_¿>Ë—/ç›o¾!..6lXc/,0´Lõ¼!„B!„BQWH€²B”biiÉÿû_‚‚‚hР...XYYqçÎbbbØ¿?Û·o—·] !„ÿ999ddd`kkKRR`ÕªUdgg›ºhB!„B!„ÂHnܸ¡¬ˆ–””Ä©S§Êìß¾}» œ iÞ‹-ÂÆÆ†)S¦àëëËìÙ³+<îÇäòåËšæm Ú·o={ö¬ô¸;v°eË–rÛOŸ>M›6m(**bíÚµÊö´´4ÂÂÂ4hÅÅÅœ={¶Êr\¹r…72tèP:tèÀÒ¥K•}·nݪ4`·¨¨ˆ/¾ø‚?ü777>üðÃ2ûoݺU.pçäÉ“Lœ8‘ àååÅ!C”µK»sçN(z½†øë¯¿>|8¯¾ú*={öT^ê|çζoßΰað°° ¸¸X³©özµ¸ ëÔP3æìܹ“_ý•Q£FÄwß}§Y¹*£¶Lñ¼!„B!„BQWH€²ÐĈ#L’V­åææ²zõjV¯^mꢈ*ȸ!„B |ð©‹ „B!„B!L¬°°k×®áëëËŽ;Ê^†……ñæ›o%«§i©¸¸˜yóæñÇ0vìX~øa4h€ éééÄÄÄpøðanݺ¥i¾†***â¹çžcÀ€tèÐzõêáááAQQ)))DEE±yófþøãŠŠŠÊ¥?}ú4O>ù${öìáÚµkeö­\¹’AƒqåÊ222îY–×_+W®0tèP5jDNNÑÑÑ„……affVií/¿üÂÍ›7yúé§ ÀÉɉ¬¬,¢¢¢*Mû×_ѯ_?FŽIHH¸¹¹‘——ÇíÛ·‰ŽŽæÀXXXÔØ Ÿ†^¯!¢££™2e ÖÖÖÔ¯_ŸÂÂB%Øføðá@ÉËkоmTXXÈ¿þõ/¶mÛÆSO=E»ví°³³ãÚµkìØ±ƒï¾ûŽÔÔTÍËù÷ß3pà@žy悃ƒñööÆÕÕ•ŒŒ ÒÒÒ¸qã111ìÝ»÷žçš9s&Ó§O'44” ““Ã… ؾ}»¦ý¹®9 ]=×…ºR;Æ‚iÆ+5uu?÷IÐïÞW3‡jUæôôtV­ZÅäÉ“ªü»-ú³)Ú'Õ^¯V÷‚!Ï9j¨sþýïsäÈFM«V­ptt$//[·nËÙ³gÙ·oŸfeUÛF¦zÞB!„B!„¨ Ìþ÷_ï¾û®ÙÙ³gÍnܸavçÎ3???³7n˜[[[[dffšYÙÛÛ[åçç[¶æææÅÅÅNÅÅÅn{÷îÝpôèQå\:u2â嘞¿¿¿©‹ „B!„B!„B!„•úå—_”Ÿ;u,õ}n¹oŽ…¢DóæÍ `Ê”)„‡‡›¸DB!ŒmìØ±¼ÿþû?~œÇÜÔÅB!„B!„BÜKé÷ÕýïwÁ={öfffvËÌÌìNQQQ&cee•—•••onnžïààP”——WX¯^½¢K—.;99׫W¯¸M›6Åï¾ûn¹7à™çJ„B!„B!„B!„B!D]4nÜ8 dÂ'N˜¸4B!ŒÍÓÓ“éÓ§°xñb—F!„B!„BQ[XšºB!„B!„B!„B!„´-ZÄ•+W8vìIIIdeeѰaC{ì1FŽ ÀÖ­[III1qI…BÔ´–-[’M~~><ð¯½öõêÕcÿþýlß¾ÝÔÅB!„B!„BÔ ,Ä}ÂÓÓ“¦M›’––ÆÅ‹M]adÎÎÎ4kÖŒ[·ngêâ!„µÆ€ð÷÷çÔ©SìÛ·ÏÔÅB!„B!„B“°°° $$›J9{ö,sæÌ1b©„B˜ÊìÙ³éÙ³g™m/^ä_ÿú—‰J$„B!„B!„¨$@¹ >œ©S§–ÛËóÏ?o‚‰Ú¨eË–Ìž=;;;¾øâ Ž9R£ù}÷Ýw888°dÉ P¾­Zµ +++¾ýöÛJ”Ý'…B­žŸ ™Ë¦L™‚ƒƒƒ¬ø!„B!„B!„¸¯YYYñÿþßÿ£k×®øúúâááµµ5iiiDFFò矲víZòóóM]T!„FÍíÛ·±··çÚµklÛ¶¯¾úŠÌÌLSM!„B!„BQ‹H€²¨UÌÌÌðöö&11‘ââbS§F=ýôÓ4l؀ɓ'ë z?ÕÜ×k jûd]$ýJü“HBæ2¹÷…B!„B!„†ÊÉÉáÛo¿åÛo¿5uQ„BÔ/¼ð‚©‹ „B!„B!„¨î‹å¶-yrxh•ÇüüûΜ‹Ö$¿M›6±}ûvå÷gžy†¡C‡jr;òÎ;ï`ccÃc=Fvv¶©‹T£ +ü¹:î·ººß®×TÔôɺHú•ø'‘þ,ê:­žŸe.“{_!„B!„B!„B!„B!„B!„qÜÊ6ÖVFÍ/??Ÿüü|å÷¼¼<£æ_WÙÛÛccccêbÍO?ý„§§'¶¶¶,^¼X¯´÷[]Ýo×k*júd]$ýJü“HuVÏÏ2— !„B!„B!„B!„B!„B!„Æq(ÛXp9ö*ÿýmS…ÇäçåW¸]ˆšréÒ%þçþÇÔÅB!}R!D]'s™B!„B!„B!„B!„B!„Ba÷E€²íÿ®*–‘™ENN®‰K#„B!„B!„B!„B!„B!„B!„B!DÝu_(ÛÙ–(ge瘸$Õ7~üx‚‚‚ðôôÄÙÙ+++ÒÒÒˆŒŒdíÚµDEE•K3zôh&NœÀ3Ï!55•1cÆ0|øp¦NZîØØØXžþù*ϧE]<üðÃÓ¸qclll¸yó&ÇŽãçŸ&99¹Ê2Ôµ¾a¨ÐÐPZµjEóæÍqwwÇÉÉ sssnܸADDkÖ¬©ðþ*­U«V >œ¶mÛâêêÊ;w8{ö,¿ÿþ;‘‘‘5’ÖÒÒ’aÆ‚fffÄÇdzsçNÌÌÌ*L£¦O‚úº233£wïÞôïßœœœÈËË#--øøxΟ?ÏŽ;¸~ýú=ËRZõ+}ï5ÔÜG:jÇI5ýÙP†Ìƒ Íý«†¾u5}útLvv6/¾ø"W¯^-wÌ믿NHHׯ_gÚ´iää”<ÏhÑŸÝÜÜèܹ3<ðÍš5ÃËË rrrHJJ",,¬ÂsÚFj„††Ò¾}{š6mJ½zõ°³³#77—ëׯsàÀ6lØ@fff¥éÕ\/~ï«ëŒÝF}úô¡oß¾øùùáääDbb"d×®]Œ?žŽ;RXXȾ}ûX¼x1ÙÙÙ•^·±¨ËªâììÌ‚ ðññ!..Ž—_~™ŒŒŒrÇsœTsï«i_5ó‘š±N!„B!„B!„B!„B!„B!Dít_(;ØÛ%+(×]ºt¡eË–e¶yzzÒ³gOzôèÁ‚ ضm[™ýGŽQ”ƒ‚‚غuk¹ó¶mÛ€¬¬¬rA)¼úê«„„„”ÙîããÃã?΀˜3gN£ÂÙÙ™ùóçãëë[f»££#ŽŽŽ4lØsssÍ”SRRpuu½ç±nnnܸqC“¼µXæw///}ôQzõêŬY³¸xñb¹4u±o¨1yòd%ø«´† Ò°aCúôéÃìÙ³9þ|…é'NœÈèÑ£Ëlsss£{÷îtëÖ¯¾úJ ðÑ*­½½=}ôe¶ûûûãïï_åõª¡¦®lmmyûí·éÔ©S¹íÞÞÞx{{Ó¹sg222* º5…ºx/¨'Õôg5 ™Aýý«†!uµxñbxàš6mÊ›o¾ÉŒ3ÈÏÏWöwëÖŠ‹‹™7ožæ{‹-ÂÓÓ³Â}º>bkk[á~CÛHŠÚ×ÞÞ^ë†Êœ9s¸páB…é ½^5÷¾Ú±ÎØm4jÔ(üüü”ß}}}ñõõåÉ'Ÿ,s\hh(®®®¼ûî»æýO`ooÏ|€7nÜàÍ7߬08ÙTã¤!LÕ¾¦ë„B!„B!„B!„B!„B!„BhïþPv°   KK M\¢{[±b$$$™™‰¥¥%­ZµbÒ¤I4nܘ_|‘C‡‘žž®¤¹|ù2)))xzzÞ3@ùäÉ“–­‡ &(7»víbëÖ­dddÈøñãqqqáý÷ßgêÔ©J ®Z±±± 2( LЭðöÄO” L(***—~̘1øúú’ŸŸÏ²eË8rä·o߯ÊÊŠzõêÑ¢E MWöKMMÀÁÁKKK *=V \º®6lØÀæÍ›•ß'NœÈðáë•·ÚºÒ9uê›6m"!!€|qãÆáààÀ¿þõ/^xá…riêbßÐÂþýûÙ¼y3iiiØÛÛÓ¦MÆŽ‹ƒƒ³fÍâ¹çž£¸¸¸LšQ£F)AJ'OždéÒ¥$$$àããäI“ dÚ´iDFF£YÚ—_~Y NÞ¶mááádffÒ¼ys†^&©45}Rm]½ôÒKJÀÞ®]» #55kkk4hÀo¼………Þe©ŠÚ~eŠ{A-5㤚>©–!ó`i†ôI5 ­«¼¼<>úè#.\ˆŸŸS§NeáÂ…@ÉË0^zé%Ö¬YÃÙ³gËä©å8ÅŽ;¸rå éééààà@Ó¦M9wî\…iÔ¶‘ûöícݺuܹsºtéÂÈ‘#qssãƒ>`Ú´iܼyS³ëUsïk5Ö»–-[Æúõëiß¾=ï½÷7ndÅŠtéÒ…×^{àà`š4iBllì=Ë_“´šËJsttä£>¢U«V$%%1kÖ,’““ËgŠqR‹{ߨí«f¬B!„B!„B!„B!„B!„BQ;ÝÊ.ÎŽ 鯀näää’tƒ3ç.q2’¼R«wÕGŽ)·íСCÄÇÇóý÷ßcmmM§Nعsg™cþþûoBCC騱#e‚-,,”ÆcÇŽ•IW¿~}FŽ @XXò.-) IDATóçÏWöÅÄÄpòäI¾ù朜œ7n_~ù¥&×Y\\L^^@™`ßüü|e{UÚ´iÀÎ;ùí·ßÊìKII)·J´ZºÀ333ÜÝÝ•ß'MšD›6mX²d gΜÀÃÀ¤¤$%}QQQ™ëº;H¼*jëJçèÑ£ìÙ³GùýÂ… dee1}útš7oŽŸŸ—.]Rö×Õ¾¡… .¡ü~æÌ222˜1c>>>´nݺLóôôdüøñ8p€¹sç*AiiiÌž=›%K–àááÁÈ‘#ùì³Ï4IÛ¬Y3zöì ”öüðÃʾ˜˜vìØÁƱ´,?ä«é“jêÊßß_ öÛ´i“¤¤ͬY³4PVÓ¯Lu/¨eè8©¦OjÁÐyPGß>©†ÚºŠeñâÅ̘1ƒÁƒsâÄ öíÛÇÌ™3qqqáÊ•+,_¾¼\¾ZŽ“GŽ©p…×ÊV"Ö¥¹›>m¤Fttt™ ƨ¨("""øôÓOquueìØ±åÆ•»Ë^ÝëUsïk9Ö»’““ÉÎÎæðáÃÄÇÇÓ¸qcNœ8Azz:ááá<þøã4kÖŒ€€“(k5—éxxxðá‡Ò¬Y3®^½ÊìÙ³+ N6Õ8©Å½oŠö5t¬B!„B!„B!„B!„B!„BQ;™›ºÆ’z‹¸« ¤¤Þ¢  [[š5ñaÈ€ÞL~,õ<ÝM]Äj»zõª Ñ Aƒrûu§ŽŽŽÊjÉ:-[¶ÄÖÖ( R-­oß¾˜››SPPÀŠ+Ê7..ŽíÛ·Ra £)ܾ}€Ö­[ãìì\ãù¥§§“••”¥˜››óè£Ò¦Mºvíª« P¾~ýz—K­Ý»w+?·jժ̾ºÚ7jÊÎ;•UW[´hQf_HHÖÖÖ°hÑ¢r«æää°aÃe5M-ÒöîÝ(YpåÊ•åÊ\XX¨éJ±ÕUU]õéÓ€ÜÜÜ ûUmTWïCÇI5}²&Ýk¬JU}R -êjóæÍìÛ·(Y}ܸqSPPÀçŸN~-|™JeÔ´‘§OŸfÛ¶m@ÉýªÕ=¨æÞ¯­c¾m¤[aÙÕÕUÙ–šš €ƒƒC ”Ðt|||X°`Íš5ãÂ… ¼üòË'Cí'õeÌöý'uB!„B!„B!„B!„B!„Bq¿«ÑS5lůÿ·Úœ¹™ Ô§C»@:wh‹»« Ï>9Œ/¯ ?¿ Š³—ƒƒC† ¡sçÎÔ¯_rrr¸~ýº`fccS.݉'HMMÅÃÃàà`Nœ8¡ìÓ,'$$P&]`` W®\©4㯿þ"44üüüª\±ÏXÖ­[G§NhÒ¤ K–,aÓ¦Mlß¾k×®ÕXž‰‰‰øùùáååEdd$8:–¬Òݹsg¾ûî;¼¼¼€ÿÏÞ}‡GUåÿ̤‘„ ÅÐB—¢`AŠ€¢ (vTEqÔuW н¯XP*º¸XA,H¯¡ HQ)¡‡’Þ“ùýqLRÈÌd’ð~=Ož¹¹÷ž{Μ:¾sªG€rJJЦºuö«kߨ(ééé:qâ„êׯ¯ÐÐP§kçž{®$³“çÉ“'KL¿ÿ~IRhh¨BCC ‚G­¤Í´üóÏ?•žžnåíyTYuÕºukI¦Ì Þ(žËªëXpwž´Ò'=ÁÝu°,eõI+i…'ÖÁÊæ©º²ÙlºöÚk ~ Ô°aÃôÑGy¦ R•ÛÈ××óm­Œ}oÍuU¹ª²õë׫mÛ¶ª]»¶&Ož¬—^zIË–-+õ~oÍ“Þâ©ÏuÕe®”í¬P–¤'O©QT„j{»(’¤–-[*::Z’ôúë¯kñâÅ×rrr´k×.¥¥¥•ùŒ={öhÇŽj×®.¿ür­_¿^;v”ŸŸŸÒÓÓµqãÆbiNœ8¡–-[Ý–$Ç`I:yòdÁqvv¶‡l6›‚-Ô£•Žsrr´`Á-X°@‘‘‘0`€®¿þzEGGëå—_Ö¨Q£tâÄ ·Ÿ_Ô¾}û$IQQQjÛ¶­"##5gÎ-]ºT÷Þ{¯zöì©M›6Éf³iÿþýe4å_s5ÈÃÓ»B—¥º÷Ê”_WK—.Õ /¼PéiËj£òr·OºêèÑ£jÓ¦Z´hQ¡ù”ÅÕ~ee,Xá©qäêéªü/JhÔ¨‘.¹ä’ Í«4®ö+«cÁ OŒ£¢Ê3OZé“Vxj¬Lž¨«Î;kذa’¤7ß|So¼ñ†¶lÙ"›Í¦GyäŒ}´2çɪÜF]t‘$)77×ccÐÊØ÷Ö\çé6úàƒôÄOhíÚµ–ŸU^®|~.-­;kÙáÇõðÃkûöí²ÛízôÑGÕ«W¯ïõÖoÍ“EUög$+ë‘'æ:@ÕQ±Ñ_UÀ-×]¥Ô´4íÙw@§’”››«ÚÁAjÕ²©ºwë"›Í¦ŒÌL­Ýøk…•aûöí’$›Í¦G}TÓ§OW^^ž6l¨¨¨(M›6­àÞÝ»wëèÑ£ŠŒŒÔèÑ£ M›6)))I~~~ -W0@vv¶æÌ™£áÇkèСò÷÷Wrr²Ö­[WâýÇŽÓÌ™3uóÍ7«ÿþ Ô?ü ÔÔTµk×N·Ýv›|}}•œœ¬éÓ§KÿóÏ?«gÏžª[·®^xá͘1C‡–¿¿¿4h »ý̱ðqqqJHHPXX˜î¹çùøøø6mÚTMš4ч~è”æ¹çžSvv¶–.]ª?þøC§N’¯¯¯4h Aƒ¥üþûïgÌ¿¼rrr´wï^ÅÄÄ($$D³fÍ*¸¶téRÝÿýùîܹ³ÌgmݺU’é&LÐôéÓ•••¥Æ+**Jüq‰éÜ©+wU×¾á Ç×矮áÇkÀ€êÔ©“æÎ«¸¸8:uJþþþŠŒŒTÇŽ5eÊåææz$í±cÇôÕW_é–[nQ÷îÝõÚk¯éÛo¿ÕÁƒe·ÛQ®z–Üï“®ÊÌÌÔóÏ?¯É“'+00Pÿüç?=ò\W¸Ú¯¬Ž+¬Œ#wçI+}Ò O­ƒ•Éj]3FuëÖÕôî»ïœ?vì˜þïÿþOcÆŒQÿþýµhÑ¢‚yOW™ódUh£Ûn»MáááŠUjjªbbb4lØ0*''GŸ}ö™Çò²2ö½5×U…6²Ê•ÏϧóÄZ–™™© &è•W^Q‹-ôôÓOëÁÔ¡C…_jä­y²¨ÊþŒde=òÄ\¨:jt€²ÝfS›˜fò÷÷ÓÅÝ:—xOZz†þ7ó{¥¤¦UX9þüóOÅÆÆª{÷îêÔ©“:uêTp-11Ñ)ÀÂáp襗^ÒäÉ“U»vm;Öí|gÏž­›nºI’¤… *;;»Ôû?ùäÕ¯__ýúõSÏž=Õ³gO§ë)))š0a‚Ž?^,íš5kôÓO?iÀ€j×®&Mšäry‡>ùä=ôÐC Õƒ>èt=))É)ÀÂn·«mÛ¶ P·nÝJ}îêÕ«µtéR—ËS–;w*&&F‡CóçÏ/8Ÿœœ¬•+WêÒK/•ÃáЮ]»Ê|ÎÁƒµxñbõíÛWí۷׳Ï>[p-))©ÔWëʪêÖ7¼éóÏ?—¿¿¿†ªFiÔ¨Q%Þ7sæL8pÀci?ýôS…††jàÀjÛ¶­ÆçVùÝí“îØ²e‹ÆŽ«#F¨[·nòóó“$¥¦¦jÕªUêׯŸ|||äp8<–gQîô++cÁ wÇ‘ÕyÒJŸt—'×ÁÊän]]xá…êÓ§‡^yå•b»þÎ;WW\q…Z·n­1cÆhäÈ‘%9Væ?ŸÎSkYjjªžzê)½óÎ; Õ„ ôàƒ:SoÌ“EUög$w×#OÍu€ª£F(;}9û'µnÙLME©nxùûù)33Kñ'NéÝ{µvã¯JMK¯ð²<ÿüóºýöÛÕ«W/EDD(33S{÷îUll¬l6›SPÊÖ­[5jÔ( 2D]ºtQýúõ¢ôôt%%%éäɓЋ‹ÓúõëËÌ3%%EsçÎÕM7Ý$Iú駟ʼ?77W/¾ø¢V¬X¡Aƒ©M›6 ÐÑ£Gµzõj}õÕWJHH(5ýo¼¡_ýUT³fͬ¬¬,%%%éðáÃÚ¹s§6lØPf~üñG%%%éšk®QË–-¬ôôtíÙ³G+W®tª+‡Ã¡§žzJ={öT»víT·n]…††ÊápèÔ©SÚ³g–.]ªÅ‹{<Àñ?þÐÀµvíZ;vÌéÚܹsu饗êàÁƒJK;sàû«¯¾ªƒªoß¾ŠŒŒTff¦öíÛ§U«VëE¹RWVU·¾áM‡Cü±–,Y¢Áƒ«sçΪ_¿¾üýý•’’¢¸¸8mÞ¼Y‰‰‰M›››«7ÞxCK—.ÕàÁƒÕ¾}{…††*//¯ žûí·3Î’û}ÒûöíÓĉåç秺uë*//¯ ÀïòË/—$eeey,¿Ó¹Ú¯¬Ž+ÜGVçI+}Ò O­ƒ•ɺòõõÕ}÷Ý'ɬÑ;vì(ñ¹|ð^~ùe5nÜXW]u•¾ûî»ËP™ó¤·ÛhÁ‚òõõUçÎU§N%%%iË–-š1c†öìÙãñü¬Ž}oÌuÞn#Opåóóé<µ–?~\¯¿þº&Nœ¨æÍ›køðáúàƒ ®{kž,ª²?#¹ºyz®T ¶¿~œLœ8ѶmÛ6[||¼-99ÙÖ¢E [||¼Ýßßß'55Õž——çä—í/©–Ýnv8!‡#|Ù²e³‹:”µccMãí"8>>ºè¢‹äïï_ê=»víÒ[o½U‰¥Ïb®5Ê5HFF†RRRT«V-=zT+W®Ô矮ôôto œøúúê¿ÿý¯Î;ï<5lØP¡¡¡òóóSrr²vïÞ­+VhþüùÊÉÉñvQÀmÌuð´yóæy»•êÊ+¯ôv¥ @¹yæ™g¼](—ÌÌL}ñÅúâ‹/¼]ÕÈõ×_ïí"¸„¹žFÀ. ª°{»ª””ÊÊeåF€2€r#@@¹ùz»Þмiµi®fÑU'¤¶RRSõöÿýÏÛŪ¼³*@ùœÆQÔÿRÓ8Ê鼟¯—JT/gM€r×Î4d`_ùøøèÄÉmÞö»öÅÒÉ„Deffy»x@µpV(·nÙL× ºLyyyúnÞ­Ù°E‡ÃÛÅà¬*µŠ‘¥]»¼]Ï “bb¤“'¤=Öü|Q½ÕÄ1XQ¨«šöÏ©ñÊþþºiÈ•²Ùlš9w6oýÍÛET1ÚKÏ?+Iÿ~FZ¾ÂÛ%ªY¾ûVª][zëíšöÓ÷’¿¿ôÊk•(ì­|Q1šFK#FH;H‘‘RvŽtø°´c‡´*VZ¸È3ùÔÄ1XQ©IsüЮ(ÛíR£FÒ¡CR^žçË æéÔQzï©V-çó¡u¤¶m¤Ž `­Îh_@MWã”ÏïÜ^’”’š¦ÛoºZ #ë«ví`efféÀ¡#Z½~³þؽÏË¥xSnnÉÇåÑýbéÕ—MZÏK¥´4Ï–­¼nºQÿ˜9~æYiÖ·Þ)GEéÒEºóôd‚Áç/”>™&ed”žîŠþÒ Ï•ýìGÇI z®¬v»ÔçRiÀ•RçNRx¸”™%íß'-]&}>CJIñ\~žÊ·e Óºv•š4–rr¥¤+¤ÿ~.%&z¾ÌùÜmߢBB¤©ïHmÛJÿ|DZ¼¤üù[I+IݺJ½zJçŸ/5ˆNœn»£ì4O?eæÔT³›ëÚuR^®Ô ÔªUÉi||¤o®,5mjÎ<(-Z"}ö_ïÍ?¡"ÆQeΓÍ&  ];DjÓÚ¤?yRZ¿Aúô¿ÒÎSVOýòÔ³§Û×1è ®æë‰¹®2Ä´”¾œQþûo&ýþ‡gò¶Ú7¼±îg« R;HõÂ%I:´qºæ¨61ÍÕ&¦¹-_£…ËV{£ˆ€*àwMÐX­ZÒ+¯¹–68¸ø™•màiÜ£Þ-CEºñóþìöÂsÍ›K£î•.ï'Ý3RJL*9mPPå”±¨W_–.íí|Î×Wj×Îü\}µt÷½R||ÕÈ×n—ÆüMºãɧHÈI¶i- ,¸G:rije–¬µo¾Æ¥W_’Z·v=+i;v”þõ°Ôñ\çóþe§‹iiÞ£dæœÙs ¯í3©§ ’Þ|]êz¾óùV­ÌÏ «¤‘£¤£Ç\U‘§ÇQeΓ¯¯ôò‹Åßsd¤iÛ+¯žž$ýø“çÊYc¿¼õì©öuw ZåN¾ž˜ëÎVû†7Ö}àlU£”FF¯Ù°E[¶ý¡ø“§”­¨ˆúØ¿—¢7T¿^iןûµ/îK ð–?vJ·ÝîíR¸§KiâÉáòòÌ«5ɹ¤Çþ èúí7éÝ©f‡Ê^½¤{ï‘Z´&M”z¸äôÁÁæuý³3nIÒÓ=[æŸæIM£¥9s¥-[¤¤d³³æÕƒMaãFÒƒc¥''T|£"¥[†šÅ•«¤ïæš Êºá& ®Ï¥Rdé±G¤üÓ³e¶Ú¾ù; ÿý~©vm×ò¶’V’†\#=>Nòó“öï—~œ'mÞ,8hvÍ-KÆ…ÇËW”/¿GþYœüK³fIy©wOé±fçÛç&K÷ÞgæƒêΓ㨲çIwÚ÷¾‘&(37Ošö©Ùu8%ÅÀþëa):ÚìʼñéèQÏ”ÓÓcß•zöDûZƒV¸“¯Õ¹®²íÝ' ¾¦ôë6» ¨oÛÆ¼Ÿ?÷z.o«}Ãë>p¶ªÑÊAÇs~ZìtmÿÁÃúøóYzdÌÝ ¬¥‹ºv"@P­Ô­+½ô¼ ’záEéþÑRh¨·KåY»ßÏ=&ºßìIÒöRzšôЃRï^f7Ë_-ž>$ļž<)%'WN™žo~ЉîÚ%­Š5»@^Ö¯øîÞÌ÷Ðaiòs¦~N¦\kvííÕSêÙC ôl`—•öfçÅöí¥Zµ¤Ã‡¥eË¥O?3Á"§8@ºj Ôº•T'T:x@Z²Lúé'é¾QÒÅKy¹Òü…Òk¯KiižI{Û­fWÊÓíÞ#Ý4´ìú‰i)}9£øùK‹Ÿ[»Ný·²Ÿç»]zö©~2li IDAT}iÚg&HñþÑåKk¥}­¤mÞLšô´  ¬[פY·^údšI{ººu¥ /0ÇŸ~VЕïóÒÃM®PJ€ò_;ã&&ž©VŠóõ5»‹^5Ðìæh³I{÷J?üdŽKSÖîµ›·˜àª€Ó†%¶y#ß~,=íOóL¢ÙMuï¾â÷Ü7Ê´kƒ)4Lò÷“Nž2»Š~þ?iK mcµ}›41ÆqqÒ”wLPîÒE¥¿O¥ ’&ÿÛÔãSOK?þT¾t®Ìo½-}üIáï_dò“¤%^Šˆú_^z€róf®Á¢*{Þ°:Ž$kódóf®Õ••ö¨/…Ö1DZ«‹ßô˜ díz¾Ùõ¸$îŒAÉúØ—Ü«g+íëî,ªy3×Ç‚»ùzb-“¼·vŸ.*Êô7Iúðÿ¤}ûK¿×cßʺÀ55:@¹h@rP`-%%§»'!1I’’ÿ&à,wî¹ÒóÏJOûžg??œÓ°¡”šZ< ÄÇÇû\5Ðù|³¦ægÈ5ÒCÿ0Á%EÝy‡Ôºuáï-Z˜Ÿ»ïr¾ïúk¥ºáÒÃÿòLÚêîî&°jÃFé­)åOçnûZM+™]k‹ªWÏ.õ¿\š0±x°W·®…A™‹—^NŽÙ]ôêÁ…Á_§ 7¯%Ç—%8Xzû-©SGçómÛšwuél^wì(9°Ê[ù–¥h`z)»Áöì!uhï|.²tEéòˤgž•fÏq¾nµ}¿úZÚ¾ÝÜ“—W¸kfyXI{óMfgØuëÜ ŒtGƒóšž.(¡/;æË]e¾¢4®ŽÁ|Þœ7JRÞþìî<)¹_WîH.°}Ž´~Cñ{êÕ5¯GŽ–ü wÆà™”gìKÖê¹$gj_OŒAwÚ×Ý|=±–U¥18æoæ hŽ‘>ûoé÷ykì»»îp]PNN) H ­Sb€²$)/×Å¿¾@ Ôª•ôîÛRp”›'ýø£´t™tà€d³KáaR§N%ïî7æï…ÁÉ?Í3'ÉIRçNf§½ðpé×¥[n5»Ažîíw¥ÿÍ0—J-[˜]Ž­¦ñ…ôõÌÂgŒ# »µ|õ´{tqsܯ¯ôÜdsÜ÷r@X”«Á å#ºWJHÆ?Qþ<¬´¯•´ù²³¥™ßH‹–˜¾Ñ¦tÿ}Rd¤ nßµ[ÚYdçÊ-Ìkr² „’¤Ƙ¥7ß2Áî»v›óçœcvÎÉqγî_A}™Y’¿¿”•U¾ºzê‰Â áÙs¤¹ß›]/Û´‘n»Å90þLj×6õwëPÓ_22¤×߬Zù–¥__óúçŸÒÑR‚#§¾oêþÀAS^__,ùàX©Y3iÜcf—ߢ;ZZmß'Ìîìî°’öšÁ=ã¤ôÚ+R›Ö&¸15UÚºMúâKiUlñt®Ì§÷㌿‚CÍÏé÷KÒñæ5¢~éewu JÞŸ7ò¹ÚŸÝ'ó¹ZWVÚ7-Í\¶k'Ýs·4¡ù.ºÐŒ£ìliÞÏ%—×1x&åûVë9Ÿ+íëî,ʱàn¾V纪2%©ysÈ-Iï¼WúšêͱïîºÀu5:@ùБ¿h·‰i¦ý»§a¤ùŠÙø’¾^Î2OŒ7Á$Òß~ù¥ø=±«‹ŸkØPº}˜9žó4ñß…×~ÿCZ·Aš1] ­#ivr<ÝáÃ&HkÙriï^Pµf­ zšû½tÇ0 Ò±cñewÒæå9­äå–¿žŽÂ´Eƒˆ²³+>Æn7A¬¾¾Ò˯JÇ—?­»ík5m¾ÿûHzÿÃÂßÿCZ³FúâR:Ò}#¥=Zx=?Ð2? ®ëùÒ]wšãÇ•n»]JL0¿ûúJaaÅë#2Ò¼>0Æü$'›|.2}µ¤@ÏV­Ì®£’4í3éÍÿ8—ùû¤UËÍ.e ‘–.r>·k—ôÔÓæ9U%ß²téR¸Óè”wJ¿oÅÊâç–.3ãñ믤é’îλŽz¢}+[½zf~‘ ƒôòùûK½zšŸ÷?”Þ›ê|ÝʼñÛï…Ç}ûH?üXüžä$óZ«VéÏqu JÞŸ7ÜéÏVæÉ|®Ö•Õuáõ7M@gÆҧŸHSÞ6kÚÝÌ.´’ôêë…®§sg –¥,~=7×#ž‰ÃQ|§Ô-¤wIAAU'ßÒ4i"½ú’d³I‹K‹—”?m¾}û *Ïiâ|Íí[ÙÚÙÁú˯¥{FI—_)õ¼TºëniË_»Žº×xzÊú Òþýæø‘I×\-ED˜ÀÈÈHé²~RïÞæzjjéÏqu V…yÃþìîó{¥¥¥{©„P5DD˜×¤$éÄI×ÒÖ¯o^—œ,I‡¿®¹ëN³àws¥Ý{\Kk¥}­¤-cñ…ÇEw¾ÎÒ­SǼfe™ °¢Bë¹ÿ úÏË3ñÛ¶Kk×™J64Oÿ›Qx_½¿Êpì˜kï£4‰If7ÇÍ[¤eË¥·Þ”Ú·—n¸¾jä{º¦ÑÒûï™vß»WúÛØ²¦[4—Þž"E6p>`‚ó€çéö­ Ewa÷÷/—–&-Xhêøüó<›÷¶íÒÍ·J#_,5ˆ”r²Í¼»f Ú‹ˆö¸87H¥Áª4o”·?[™'Ë£´º²ê¾Q¦ì‡K#ï“6Á•ýúJ»_jÖTzå%éÞû¤­[Óº;OçÊØ÷t=—·}+z –Ö¾Vòµ2×U¥1xy?óºxqánЕ‘¯»k™Tþu€{ìÞ.@eX¸lµ>þ|–vü±G©©iÊÍËSRrª6nÙ¡·>˜®?÷ðvÀûòwøs'éi»žIyk¯1¯W–6®+þú×.™O=a~ÿûýE[h_KiË!'§ð8/¯ð8þ¸yÍ_% +|FBBùó\¸Húíws|Ñ…Î×òßgvvùŸW^+WîÈÙý⪑oQ PÜ'-8Qúý6›ôÒ &023Szå5骫¥‹.‘zõ‘n»]:z´ä´Ù¾åôzKrè¯/c¨áùü•^xIr½Ô½‡©ã›o‘>ž&Õ«gîÙ¼Åõç–6«ê¼QV¶4O–C©ueAÆÒ=#Ìñ“Oö¡¼<ôzûpi×.;ê^ç´VÆ`Q®ŽýЬç²Ú·¢Ç`iík%_Ks]ƒõêJ:™ãù */ßÓ•w-+IYë>÷Ôø”óíús¿vý¹ßÛÅ€*+?©NˆæZ0`|¼Ô¦µÔ¨Qé÷4lX<¯Òüú«”ž&)cGfO§Íû+’æ LO硵òð÷w?­•öµ’¶<¢"‹ç%î"EE•ܦ1-Ík\œs`Yyìß/µmSØ™¯ ?7,9UGJêè¼³©7óÍ,½ùš P>RKÌñÚu®çe^““Ïç÷çöí¥Ò±Ѭhm^«F¾ùž|Ü:&$HÀ9 ¯4õêÿþ»kå©èö­;~+<îÙ£äÝŠ[·6¯{÷VJ‘ÓRºós¼`AÉóï™”6«ò¼QZ¶2O–GiueEþ8*kýÈ¿TrZÉõ1˜Ï±_Ñõ\ZûVô,­}­äke®«*c°ï¥æuã/Ο{*:ß’œi-+Kië>÷ؽ]@Õ°m{a0ÎßFK]º”?í÷?J¹¹&Èfô¨â×[¶0A*’Ùݱ*ì„zºü D¸¶³^Ñ/¾Ø³eò$+ík%í™tì(]w­9þáÇÓvŽû¯t×ÒÕƒÍßÌ’’S¤N¥‘÷H¾¾Rb’ôþÞ{eùåój³I¯¼$}ð¡”™ivêkÔXšòvÉéöî“Nž4ÁEŽ5A¥;wI6™)›6•ÞüO¥½RYi_+i‹jßN:ÿ<))IªSÇìyë-’¿¿tê”4µ„¾ñλÒ˜]§¾#½÷¾©ïž=¤‘#Í=Ë–ŽõÂsæ¹ëÖK‡K9Ù¦ºw—nj‚®RR¤¯g:§;rDšö™t÷]f·Ë>”þ7CÚ¿_²ûHQ‘¥ÛlÒŒéÒŠ•Ò¦ÍR|¼ r«_ß°½ÙÜwò¤4󛪑¯$Ý9ܼnùÕ¤ )9Ÿ¼<)5µð÷?þ0;ö6l(ýëa(»nt*Á´kx˜X«ägIÖÚW’j×6ï=ÿ8_­Z…ï!'Çì†ê©´|(½õ¦)óÞ0ã;î€Ôª•4iBá\wú.©VšqÓ°¡Ký/—:ÿ4xò¤ôð¿Î¼ó­«cÐ[ó†Õþì îÌWîZ¶Üô™Ð:Òë¯Jo¼)­Ykú^ÓhéîfN¤ÙsœÓZƒîŽ}+¬¶¯'Æ ;ík%_w纪°v7kZTýëÖÒëÔùZíî®ûÜC€2 ÀÖmÒØ¥gŸ‘""¤WšŸÓ¥¤dyû]©AéªÒeýÌOQIIÒCÿŽÅW\ù­Øgv.8ÀýM)Tœ˜Xz€r^ž wÛ7ß¼Šïd*™~šoù éÁx.íÊUÒûJ£î•ºž/}ú‰óõôté‘G¥„„ÒË펱7vE9f·Ö—^–Ž;ó3܃•=oXíÏžàN]¹+5Uÿ¸ùrŒÈÒóÏ–|ßâ%Òçÿs>gu º;ö­°Ú¾žƒî´¯•|­ÌuÞ^»›5+<Ž;Pò=ž*³•¾auÝà:”NÖo®½Áì„|i/©uk)4TÊÊ2Á »÷Hkך\ss ÓåæJON-–n¸^êÐÞìäxøˆ´l™Ùöd™ôŒ Tx¥Ù23Ó¼ß%KÌ®~GÉé¾ùÖìVyËÍRë6f7Öô4é¦>ÊJ[ÙÜm_+ißøtÑ…RËRd¤T+PÊÌ0NK–š€»²‚ ¿úZÚµ[ºó<^+Ðìúó|iÚ§%ïŽëpHO|¸5j$I9rdµR¬ íÚµÓ‹/¾¨€€§ó!!!Љ‰Q»víª\€òÙÔŸQ~Œýêñ @ùÔèåȈzz`Ôíå¾ʇŸëðÑø )Ë€‡ßP@p¨ÖÏ|GgX!yÕ·o_õïß_111ª]»¶ÒÓÓuäÈmß¾]K—.ÕÖ­[+¼ gƒ®]»êé§ŸV@@€®½öZ¥§§{»H7wî\ÍŸ?¿à÷;ï¼S×\sM…§ÅÙãlGEåææ–x\ÕT•ñûðÃ+ @iiiúøãõË/¿(//OõêÕS‹-*½>>>zâ‰'Ô£G§óµk×VLLŒbbb4xð`Ýzë­JHH¨Ð²œ ‚‚‚ŠíêYÓdgg+;;»à÷¬¬¬JI‹³ÇÙ0ŽŠš6mšêׯ¯ZµjiêÔ©Þ.N©ªÂømÖ¬™¢££%Iï½÷žæÍ›WpíàÁƒÚ²eK¥—éLζþŒò«.cÿlÆø­šªÂz(®F(?qJ¯Lù¸Ôë6›M·Þ0H¢"tèÈ1Å?é±¼›uí«û~WòñC’¤Ô“GÖ°™ROý+o»ÎéÜCÇ÷îPZÂqå{íµ×'ÇÆÆjöìÙ:xð Ô²eK]rÉ%òõõ%8¼dÏž=úûßÿîíbT 4(8^³fKXÇØ5IPÎÍËөĤR¯÷º¸«EE(''W_ÌúI9¹¹É×f³«ç]+0$\{Ö-ІYSubßïjÜá"<°Kmû\¯.ƒïRM´òÓ´mÁ—ÉW’.»ì2IÒ† 4iÒ$9Ž‚kqqqZ²d‰l6›Çò ¢ÝÉ433Ó‹%Tu‘‘‘jÓ¦Ž?®íÛ·{»8¨FÂÃà úή]»¼]T¢›nºI:tК5kôã?z»8^WQczvÆœ¨Ijt€rYÂê„è²ÞK’¯X«ã'OyìÙõ¢[+°N¸l6»Z^t…Z\p¹ì“#/OW=úŽÂ6+¸·IÇK< Ü°aCI&@¹hprQ%÷÷÷×wß}'IzþùçµdÉ’b÷Ì;W~~~zï½÷4kÖ,§kTçÎÕ¬Y3EDD(00P™™™:tèV®\©Ù³g+55µÄòXI›¯G4hZ·n­€€;vL«W¯ÖW_}UænÑáááºà‚ tî¹çªyóæŠŒŒTpp°$)##CGÕÏ?ÿ¬o¿ý¶ M³fÍ4uêÔbÏ*zO¾_~ùEãÆ+v>00PC† Q÷îÝÕ¤I*==]III:|ø°6mÚ¤/¿ô\¿ÈwÇwè¼óÎSýúõU§Nùùù)!!AÛ·o×7ß|£;vxiUeþ÷‚·xë3°'ú³Õ5¥ºÌ9€Š5oÞ<…„„èå—_æ¿k°N:éÍ7ßTPPƧŋ[~æªU«äïï¯É“',è¦#FèÉ'Ÿ,v~çÎ0`€JT>O<ñDÁÿK«nªÓX ž1çÕuÞ8;k”û÷½D~~¾JHJÖŠÕ<úìãû~Ó´Ñ—*ªõyªÝZ¡QÑŠ¹ä*Ùìvååäè×yÓ•xd¿ŽíúU'âþðhÞiii *T®,#GŽ,ø‡úù‚‚‚£˜˜]sÍ5š0a‚þø£øûµ’ÖÇÇGÿú׿ԯ_?§óMš4Ñ7Þ¨+¯¼R&L(õ!L™2Eõë×/ñZíÚµU»vmÕªU«Ì÷îª:uêèÕW_Uttt‰ù5jÔHv»½B”/¼ðBµnÝÚé\ýúõÕ»woõêÕK¯¿þºæÍ›çñ|+ÛÍ7߬-Zü­èèhÝrË-N÷ 8Paaaš8q¢Óy+ý*((HÏ=÷œÚµkçt>¿?ŸÉÝwß­¡C‡: WÏž=Õ£G½ýöÛ §s·?—4%©Q£FjÔ¨‘úöí«ñãÇë÷ß?cù+SeוÕ~e…Õ6:[Æ~>+}£:Ö••µÌݺòÔZ6räÈ‚¹qèÐ¡Š­Róù¼9O¶mÛVãÇWTT”Óy___*22RéééÅ‚A«ëZVyãó¤ä½zöFŸ´¢:þ÷‚»¼ùØ «kÊÙ6çÀÙÄn·«I“&:pà€òòò¼]T=ôPÁÿֲɚ IDATGðT° P1*õŒŠÂç5ÅY Q¿®:wh#IZ°$V9¹¹Ï#+=Uû7¯PÜ–Uê5âqÙ}|•zò¨‚ë6Ю؟¿g›Çó”¤Õ«WkðàÁ4h¶lÙ¢eË–UH>¥Y¾|¹fÍš¥äädë /Ô 7Ü ððp=óÌ3ºÿþûuòäI¥1bDÁ? _¼x±~üñG¥¤¤¨}ûöºãŽ;ªÿûß=z´Ž?^j¹wìØ¡… jïÞ½JJJRNNŽ‚ƒƒÕ¬Y3ýöÛoN÷îÛ·OW_}µ$³»XþNz7Ýt“222œî-é·Ýv›¢££•­O>ùDk×®Ubb¢üüü¡V­Z•º›™UŸ}ö™rrrtøða¥¦¦Ê××WmÚ´Ñ=÷Ü£sÎ9GcÆŒQll¬’’’*$ÿÊöÉ'ŸèÛo¿UçÎ5iÒ$IÒœ9sôÙgŸé /Ô#<¢îÝ»«iÓ¦Ú·o_A:+ýêÿøGA@×¼yó´`Á¥¦¦ªeË–ºîºëœ‚FNwóÍ7WlÞ¼Yü±>¬&Mšèž{îQûöíuÿý÷kûöíÚ½{w©Ïq¥?µbÅ }ÿý÷JHHPPP:tè aÆ)88X>ú¨î½÷ÞRwfw•Õqäͺr§_Íž=[ßÿ}Á3î¾ûn]wÝuå­®î¶Quû®ôœœœbé­ö wêÊjöWû³•ºòÔZQì÷ª œÏÕ1huì7oÞ\/¼ð‚•——§E‹)66V‡–ÍfShh¨Ú·o_bU÷µ¬²xrüº»þºÃ[õì­>i…7þ{ÁÛ¼ñØ +kJu›s º2dˆ^{í5IRbb¢.ºè"eggWhž½{÷Ö;ï¼£ÀÀ@uìØQiiišßÙ¤iÓ¦Z´h‘$óÅ‘ëׯ/vÏ< |P‡C#FŒÐòåË+»˜¥*ú·Ü ø;E9÷Üs5lØ0uïÞ]‘‘‘JKKÓ¡C‡´jÕ*MŸ>]û÷ï÷v-™>}ºfΜYðû?þñ >Ü‹%ªù¼9† ¢¡C‡ªmÛ¶ò÷÷×Þ½{5gÎM›6M™™™•Z–ŠV]çœêàlž7øœ &9+”{wï&›Í¦S‰IÚ¼­bwíyçxµís½ŽïûMk¿xKW=ú¶=öžæL¾['ãvz<¿iÓ¦©S§NŠŽŽÖO<¡~ýúé믿ÖÖ­[=žWIvîÜ©mÛ ƒ¯wìØ¡7êÅ_TXX˜† ¦·ÞzË#i4h n¸A’ôóÏ?ëÕW_-¸¶{÷nmÞ¼Yï¾û®BBBtûí·ë7Þ(µÜk×®-qW­’vmv8ÊÊÊ’äüǨììì‚óeéСƒ$iÑ¢Eúú믮?~¼B³Ö®][ì\ll¬âââôÁÈßß_ݺu+øG ÕݱcÇ”žž®Õ«W+..NçœsŽ6mÚ¤¤¤$-X°@7Þx£š7o®víÚgXéWÍ›7WïÞ½%I_}õ•>üðC§´ .Ôœ9säë[|ê­_¿¾î¸ãIÒÊ•+5yòä‚@¨„„?^}ô‘êÕ«§n¸A/½ôR©ïÛ•þ|úõ7ü¾uëV¥¤¤èP“&MÔ¶m[õO+ãÈÛuåN¿ÊËËsz_îþñÚÝ6ªNcßÛ}ú²º.xŠ+ýÙj]yj-[¶lYÁ޼IIIÚ´iS¹Òy‹«cÐêØðÁ¨ÌÌL=þøã%~žÛ°aC±s5a-«,ž¿î®¿®òf={£OZá­ÿ^ð¶Êþ l•»kJuœs ºÊÿÒ½ŒŒ …††ªOŸ>š?~…æ¬ÀÀÀ Í%»ð 5fÌIÒ§Ÿ~Z¥‚“%éõ×_WTT”5yòdoçŒl6›Æ¯#FÈn·œ÷÷÷WXX˜Ú·o¯[o½U\pAµìÌÊÊrúª•ù÷‘³•7Æ‚¯¯¯Þzë-]qÅNçÛµk§víÚéÊ+¯ÔwÞ©”””J)Oe¨nsNur6Ï|ÎP“ØÏ|KͨNZK’V®ù¥Bw2ì|Õpµëgþ‘÷Æo?Э±Šÿs»üƒ5àá7X§®ÇóLJJÒ< ¹sç*//OÝ»w׫¯¾ª)S¦¨_¿~Nô¬,¿þú«æÍ›'Iºì²ËJ hq'íe—]&»Ý®œœ}öÙgÅÒîß¿¿àGôë×Ï¥|+Rbb¢$©mÛ¶ªS§Ž—Kc8p@ÇŽ“$5lØÐË¥©ù»†……œ;qâ„$óÇŸ|VúUŸ>}$™?œMŸ>½XÚÜÜÜRw îׯŸüýý•““£)S¦››2224{ölIR·nÝÎø~=eÑ¢EenÕªU¥å[–ªTWåíWÉJÕ´±_‘}ƒºr橵ì‹/¾Ð3Ï<£?üPcÇŽ­»x»ª¢æÉ-Zìbüßÿþ×¥/›a-«Ù¼UÏÞê“VT×ÿ^ð¤Êø l•»k sTŽ è’K.щ'ôþûïK2;g¢fjРþóŸÿÈÇÇGÛ¶mÓ‹/¾èí"³cÇ]sÍ5êß¿¿V­ZåíâœÑ¤I“tÏ=÷Èn·kóæÍ;v¬úöí«Ë/¿\ÿüç?µeË-\¸°Z'Ã;¼1&Nœ¨+®¸BzöÙguÉ%—¨S§Nºï¾û¯.]ºèÉ'Ÿ¬”²T–ê6çPÙκå.ç¶•¯rrrõ˯·S­$Ù}|åÈËÓ­«µwÃbIRìçf'ª¬´ùVLðZzzºÞzë-Ýu×]úæ›o”’’¢V­Zé±ÇÓ;ï¼£èèè É·,ù¨ T‹-<’¶}ûö’¤½{÷nÍš5’¤€€—ó­(³fÍ’ÃáPÓ¦MõÿìÝwX×úÀñ/,E@:*AEÁ^bÃØb 64J[L,ñ^KŠÞ W£¹&š¨Ñ›ÄØK,ÑØ{ÅŽ5*–(Vì 6‘¾ðûƒßîYÊXÐ÷ó<<Ï23gÎÙ3çÌÌîì{΢E‹èß¿?eË–-”¼mlløè£˜>}:Ë–-cóæÍ¬^½š™3gªƒ,-- ¥,E‰‰‰‰úµ>íJ˜vóæMµ*CµjՀ̜Ϟ=Ó¸Í;w°··ÇÞÞ^«ýë*11QÄRXy楨ÖÕë^mW)?Çèméû†hRWÿ“[]òZÆš5kˆŠŠÒ)½±Ôy²Fê×ÚÎF#ײ7›¡ê¹nݺ4hÐ ÛŸ»»»ÆíÕ&õQ\?/CÝëK×kŠœs„B!„¢ptîÜ…BÁöíÛY¿~=9h”­­­‘K& ÍÌÌŒ_ýWWWž?ÎСC%hVO-[¶$88€õë×Ó½{w¶oßÎ;w¸yó&7n$00qãÆ¹¤Bä­fÍšôìÙ“ŒŒ >ûì3-ZDtt4/_¾$44”±cÇеkWÜÜÜŒ\Z!„B!„B!„B–7oЍ­ZµÂËË +++=zÄáÇ™={6÷ïßÏõý¶iÓ†^½zQ½zu¬¬¬¸ÿ>{÷îeþüùê 5quu¥Y³fÔ«W*UªP¶lYlmm111!!!{÷î±víZ~ÿý÷÷Q¾|y~þùg<==Y±bS§N͵¬†6yòdêÖ­‹R©dĈÜ»w/×íµ©+sssΜ9ƒµµ5ëÖ­côèÑ÷ieeÅéÓ§±´´dêÔ©Ì™3€?þX㬬׮]£]»vùzfffôë×Î;S¡BLLLˆŒŒdÓ¦Mö½ÿˆ#¸}û6cÆŒA©TjÜ.>>>Ç}hÛ&‡ ¨Q£hÞ¼9wïÞͶMƒ øã? âÔ©SÙÊíïï››ŽŽŽXXXðôéSNŸ>ÍâÅ‹ Ï_! …///®]»–ï4¬Y³///®_¿N÷î݉‹‹Ë¶ÝÛÒ† ÀÎ;9tèP¶õûöíãéÓ§8;;Ó¸qcß3k"õœ‰‰ :t [·nT«V ;;;’““yúô)‘‘‘œ;wŽ7rûömé弑·   jÖ¬‰¯¯/¥J•ÂÞÞ…BATTaaaÌ›7Oc=¼ªfÍšôïߟúõëãììÌóçÏ9}ú4 ,àÌ™3Ù¶×÷>Ç××—ˆˆ‚ˆC!„B!„B!tñV(—´±ÆÓ£4"òÿàI¯dÿÒùêá-…’·JJJ «W¯æâÅ‹Lž<{{{‚‚‚˜5k–z›ŒŒ õë‚xkf¦{SË)­ªœ¯–=7ùÝ®0;vŒ¿þú‹æÍ›€ŸŸŸúïÎ;Lž<™ÈÈHƒågbb¸qãpqq!99™Å‹säÈž={†……eÊ”a„ ¸ºº,ÏâJŸv¥z––¦s¾ééé9þ8áUæææZçñ¦ºÊ¿·­ïëÓ6ŒUW}ý͉!úQa_Ëôa¬zÖ‡¶×#}Òʵ¬ðéÓ&UÏÆj“ú(Ο ›!ίîG[º\Säœ#„B!„¯\¹rT©R…'Ožð×_™i¹(uêÔÉò¿‡‡={ö¤C‡ôêÕK@ý*…BÁÔ©Séܹs–å^^^xyyѽ{w¨1à`ãÆ¸»»k\ggg‡ŸŸÖÖÖ¹–;$$„ªU«™Áb¡¡¡…Ðõå—_ÒµkW&MšÄáÇsÜV—ºJMM%,,Œ6mÚдiSLLL4~áï便%¡¡¡†xk”,Y’%K–P»ví,Ë«V­ª®sC«\¹2ÕªU`Þ¼y¤¦¦j•^×6yàÀu aãÆùóÏ?³í»~ýú@f`´¦6Ö¼ysjÔ¨‘e™»»;´oßž1cưfÍ­Þ±888УGúô郩©)Mš4É×w`%K–dáÂ…xyyñðáC>þøãlA³oS_(Y²$Íš5`ÕªU·ÉÈÈàîÝ»8;;S¾|ù|—Gê9+kkkfÍšEÓ¦M³-·¶¶æwÞ¡Y³fÄÅÅeä伡lmm³-÷ôô¤W¯^tìØ‘~ýúqîÜ9éGÅ!C²,sqq¡mÛ¶´iÓ† &°|ùrƒ•·jÕªlÞ¼™Ó§O³dÉvíÚ•¯ïÅ…B!„B!„¢0¼UÊ~>111!5-k‘šG}“]¼x‘½{÷òÁd{0ššJFF&&&gRÓ׫³QÆÆÆ$íÓ§O©X±"nnn9¦-Uª”úõ³gÏ´Ê7?ô™2--ÐÐPBCCqss£]»vtíÚOOO¦NÊ Aƒr‰]+VÄÓÓ€3f°ÿþ,å¸~ý: É«¨Šˆˆ 111Ï!õiWùI›W¾dÊ”)Z§/δíGE©®òÛ®^§z^Ð’o[ß×§mª®´mÏ}ý͉¡úQa^Ëôa¬z~6}_5CmÉ’%±³³Ó8[@NäZ¦›Âœõ[Ÿ6i¨zVýà4¿ŒÕ&õQ>/[aÜê«í5¥¸Ÿs„B!„¢8hÓ¦ {÷îUw²wï^¾üòKüýý)Q¢IIIËïÚµkøùù©óž9s&uëÖ%111˶¹åœ8q‚+Vp÷î]222hܸ1ÇÇÖÖ–~øŽ;fK3jÔ(u@×–-[XµjqqqÔ©S‡#FàääÄüùó  ***ǼÃÃÃÙ¸q#W¯^%&&†ÔÔTììì¨\¹2gÏžÍõý—.]:ËÿeÊ”)”åž={ªgFýý÷ßYºti®ÛëZWûöí£M›6¸ººâëë«1Püý÷ßàÖ­[\¿~]½|éÒ¥ê™;Ueøøãóý¿ÿþ{u àš5kذa/^¼ÀÏÏþýûãëë›ï}åWƒ Ô¯wîÜ©uz]ëùòåËDEEáî¿®†Çר—þûßÿ’––Æ;wxñâæææÔ¨QƒÑ£GS±bE&NœÈž={´~î_˜*UªD¿~ý ¤D‰¼xñ}Š õêÕcذaØÚÚ2mÚ4Ú´i“-¸}ðàÁêàäãÇ3mÚ4îܹC… ø×¿þE:u?~>@ãݪ{—+WÎàùªÀ*•J­gSÌ)íÅ‹¨P¡B–Ë¿ªQ£F$%%È,ŽÉÉÉê×úü?::šßÿáÇ“––FÉ’%iݺµ!Š€£££úõ7ôÚ—ê=«äVZ}ÍŸ?Ÿ±cÇròäÉ\·Ó§]©ÒV®\9K`}~¨ÒÖ©SG=JóÛBÛ~T”ê*¿íêuª÷œ×l ú**}¿°èÓ6 UWº\ òú›“‚èGº^ËüýýùðÃu ˆÕ†1êùuÚôý¿ÿþÈ fnÕª•VùȵL7†º¯Ë/]Û¤±êÙXmòuÚ\ŠÂçc+Œ{`0ü96?×”â~ÎB!„Bˆâ mÛ¶@æÌŠ*W®\!** +++š4ibÐü222HNN&99™´´ÿ=ËMIIQ/×´þu‡bÛ¶mœ?ž .0wî\¾ÿþ{üüü²†•-[–°víZFŽÉñãǹtéË—/§gÏž¤¦¦âààÀðáÃs}û÷ïgùòåœi÷íÛ‡R©D¡PзoßliË•+§ñvß¾}¹þPAW=R¿®[·n¾ÒhzŸ*·o߿ŋ@æˆÁ†¢šñÐûÁ„*ø T©R¸ººZÚ¢O»z5í?ÿùÏG.Ö$44”´´4ìíí:t¨Vi‹;mûÑ›PWª÷ìììœ%0ÖЊJß/,ú´ CÕ•.×C\µ¥o?2Ôµ¬GŒ?žòË/¿äkD}]£ž_§Mß¿zõª:X¾_¿~T«V-ßù¼)ײ&Mš°bÅ þøã7n¬×¾òC—þ«]Û¤±®ƒÆj“¯ÓæzT>/¨v{Ö–¾u¥Ï9V×kÊ›pO(„B!„EY©R¥¨U«©©©9r$Ë:Up’ê³bq°uëVõë5jdY×¥K iiiü÷¿ÿÍ–öúõë¬_¿€N:åúYVsæÌáÿøS¦L!000Ë÷ÖeàÀ( RSS™6mZ¶Y"_§O]=yòD=ˆš¦Á-7n¬þÞtË–-:¿§×uèÐÈøî—_~ɶ^©Tæù¾u¡ú.C—ã¨o›Ü¶m9‹­jÖS•5j¨ÑÄ‚R¥JåëKì^½záèèȱcÇxùò%ÞÞÞceeEZZË–-3XÚG±nÝ:zôèAëÖ­±²²bûöí¼|ù___zõê…™™/^¼`ÅŠZÖfþܽ{—ØØXøä“OP(ܼyÈü¿‡‡ ,È’æûï¿'55•ƒrõêUbbb033£T©R¨‚]¹rÅ`å¼qãÑÑѸ¹¹1dÈ,--9{ö,qqq˜››cooŸï@‚K—.™Aÿ£GfÅŠ¤§§SºtiÜÝÝùý÷ß $maѧ]=zôˆ5kÖðÑGѨQ#~úé'6nÜÈýû÷155ÅÕÕ5Ç~ôäÉþøãúöíK»ví¨Q£[·nåîÝ»ÄÄÄ`aa››Õ«Wç×_Õj”æ¢NÛ~ô&ÔÕ«³PŽ?ž+V’’BÙ²eqwwgñâÅɧ¨ôý¢OÛ0T]ér]0ÄõW[úö#C]Ë^}0oooO­Zµ´þaC~£ž_§MßÏÈÈà¿ÿý/S§N¥D‰L:•ƒrâÄ ¢¢¢P*•ØØØP®\9X²d‰:í›p-333㫯¾ÂÊÊ €‘#GròäÉ Õ¥ÿêC×6i¬ë ±Úäë´¹…Ï `œö¬-}ëJŸs¬®×”7ážP!„B!в–-[bbbÂÉ“'yùòe–u‡¢{÷îêm "¸ÓО?ÎÓ§OqvvÎ6èY:u€ÌÏž9ÉíÛ·   ¬¬¬ðóóãüùóRÎ;wÈ~srüøq6lˆ¹¹9+W®¤OŸ>DFF渽¾uµyóf4h€ŸŸï¼óN–S?øà s†Ö‹/âíÿ .»|ùr¶¶\T3Ȫ‚Ü4ñööfþüù@f°¸j–m}ëùøñãêg­[·æØ±cêuªÀÃ;wM_gkkKïÞ½iÖ¬eË–ÅÉɉ„„nß¾­þ®ÆX¾®GŒ7N<ùðáCV®\ÉŸþÉ“'Oò½ŸjÕªñé§ŸâèèÈ‘#G2dH®Ío[_pvvþ7€d»ví°¶¶&55•‘#GªÍë;O©çÜU¯^]VU×ù%ç ÃIHHàÑ£G¸»»ãää”eª.ÂÃó |û*Õ¹ÜÉÉ '''ž={fÐò¥¦¦²iÓ&6mÚ„ŸŸ½{÷¦S§N4l؆ rïÞ=>ýôS®]»fÐ|…B!„B!„"'oO€²Ëÿ¾4~úì¹KRpªT©‚££#7ÎuV®;v°{÷îlËOœ8ÁÎ;i×®¾¾¾Lœ8Që2˜™™Ñ±cG:vì˜e¹R©dúôéê C¥]²d ...´lÙ’&MšÐ¤I“,ëããã?~¼Vµ‘‘‘Á’%K9r$öööŒ1"Ëú¸¸¸,,¦¦¦T©RKKKõlÖš?~œƒ´œ?þø#“&M¢dÉ’ 6Lç}ݼy“cǎѨQ#jÔ¨‘e”ùçϟ礨OÚ¤O»Zºt)ööö´oßž*Uªðõ×_ç;ß?þø ‚‚‚(S¦ ƒ Ҹݺuë¸wïžvoªÓ¶Añ¯«û÷ï³ÿ~Z´hŸŸß}÷z]\\œÁ”‹Jß/Lº¶ CÕ•.íÙ×_]èZW†¼–=yòD=ê>Àãǵ|ùg¬z~•¶}ÿÊ•+üûßÿæë¯¿ÆÙÙ™-›´™J IDATZТE‹lû}ùòe–`P(þ×2;;;u0'd°»ººòðáÃ|—E[ºô_}èÓ&u4V›|•¶×#c^ã´g]èSWº¶g}¯)ÅýžP!„B!Š2Õgþd[†R©ÄÅÅ???ƒv¤øøxœ³|NÔË9t½¾®T©RS@#˜1cnnnL:wwwV®\ɇ~˜%ˆïUúÖÕŽ;˜0aæææ0gÎ,,,h×®ù9Þ\\\ˆŠ*ÜAÌãââÔyšXXX¨gµ°°P/×·žÓÓÓÙ¶m €ï¾ûN=x›ê;Ÿ°°0ûõööæ÷ßÇÝÝ=Ëò%Jd ÔS`›ŸŸŸ:8yÛ¶mŒ=š¤¤$­÷Ó¾}{ ó{âÙ³gç9ÛòÛÖTuœ˜˜dþ6 """Ç MM¤žs§:_Ü¿_ë´rÞ0,U[·´´Ì²\Uoõë×çÆyîÇÁÁÁàʯºtécÆŒaÞ¼yÌŸ?///<<<(]º´( !„B!„B! Í[ ì`o d>èˆ{aäÒŒ¿ÿþ›ÁƒÓ¼ysªW¯Î;# ééé<}ú”Ë—/³{÷nΜ9“ã>fΜɅ hß¾=åË—ÇÆÆ†””âââxøð!×®]ãôéÓ9¦ ÅÌÌŒš5kbggG\\çÏŸgÕªU¹Ž¶­kZ¥RÉ?ü@XXøøø`iiItt4ÇgÍš5ÄÆÆæ¯u´cÇâââèÔ©+VÄÆÆ†ÄÄD"##9räH–‘ã3227nMš4Á××'''ìííÉÈÈ &&†ÈÈH<Èþýû >ÚüßÿÍ Aƒèܹ3µjÕÂÅÅ[[[‰‹‹ãÙ³gܽ{—S§N幯ɓ'Ó»woÞ{ï=\]]INNæÖ­[;v,Ï‘òõI[XôiWJ¥’™3grðàA:t耟Ÿööö¤§§«ûÑåË—5ÖsFF‹/æÀtèК5kâââ‚……ñññܽ{—sçÎñüù›7È‚6ýÞŒºš>}:÷ïß§E‹¸¹¹‘œœÌíÛ·9zô¨AûBQéû…EŸ¶a¨ºÒ¶=ƒþ×߬+C^ËæÏŸ««+¥K—fÛ¶mDDDô=¾Îõü:mûþùóç0`mÚ´¡AƒT¬X[[[RSS‰çöíÛ„‡‡£P(²ÌZܯeÏž=ãüùóY‚O cv]ú¯>tm“Ƽ£M¾N›ëQQø¼`¬ö¬-}ëJ—ö¬ï5åM¸'B!„Bˆ¢ÈÌÌŒF0vìXÆŽ›ã¶Íš5Ë üêç7SSÓ‚+¤TßU¼ ¥ú?¿ßû…ï iÛ¶mÄÅÅ1oÞ<\\\X²d Ý»w×P¥o]=þœкuk:uê¤lݺ5vvv(•J6mÚ¤ç;Ò\†ÔÔTƒî7/ª ï²eËbmmg æ« Ñ&ׯ_Ï€pqqÁßߟC‡Q¢D õ qšƒ311aÖ¬Y¸»»“””Ä´iÓØµk?ÆÒÒOOOæÍ›GéÒ¥óý^ Ú¥K—HHHÀÚÚš€€êׯϪU«X¹r%ÑÑÑùÞÏ¡C‡¨U«vvv,Z´ˆ/¿ü’íÛ·ç¸ýÛÖT;¨fHV,k;˯ÔsîTÁõffÚÿ”KΆ•S=ªêY©Tfy’“WŸ(5jÔ OŸ>tèÐA×½{÷ŠÜ©B!„B!„Bˆ7Û[ |äD8GN„»îÖ­[Ùf+ÓFFF¡¡¡„††ê”þÎ;üù矅žöÈ‘#9rDëtÁÁÁ:å§kþœ;wŽsçÎ$_m=zôˆùóç뽟ääd.\ÈÂ… 5m~}öÙgùÚ.·Ô€îí <<œðpÝÎ97oÞä—_~Ñ:®í¹k×®¹®ÿä“OtÚ¯¶t©ï¬+Cµ+•ÔÔT–-[ƲeËòÜVßcTú¾.>LÛ¶muJ«kÛ0T]iÛžõ¹þê{-Ó¶® y-»wïC‡Õ{?ù¥k=ò<©MßWIJJbóæÍlÞ¼9ßiTŠÛµìUÿþ÷¿ùꫯhÚ´)ׯ_WÏ8Rд­3}ú ¾÷Þ†¨g]«Mªèr=2öç…ÂhÏÆ¾Ö¥=êšb¬¾ „B!„oªwß}›|mÛ´iS~ûí7õÿ)))¤§§cjjŠ­­­ÎeHOOW¿.è=z„ŸŸeË–Íq›2eʨ_?~ü¸@Ëc ‡fذaüöÛo”/_žùóçóÑGe °3D]­\¹’Ö­[ãããƒW®\Q»gÏž|ÍÆª ËOÛÈO™ ‚ê»USSSZ´hÁ¶mÛòÖõAxx8µkצk×®:tˆúõëcaaABB‚Æ™Pýüüðöö $$$Ë÷©©©\ºt‰øøø|½‡Â ä_½z5;vì GôîÝOOO† ÆÐ¡CÙ¹s'Ë—/çäÉ“yîçĉŒ?žùóçS©R%fΜ‰©©)[·nÕ¸ýÛÖ’““ÿ&¿x‘9)€Vû‘zÎݽ{÷¨Y³&¾¾¾Z§•óFáPÕóöíÛ9r¤ÎûÑç>Ç‚€€úôéCÍš5ÕËOœ8Á’%K Ͳ!„B!„B!„(hEkØj!„B!„êÔ©Ã»ï¾ ÀŠ+Œ\!ô#íY!„B!DqÒ¬Y36lØ@åÊ•5þõéÓÈüÌûz ²*ØK°¤‹ÄÄDõk}óãôéÓT©R%ÇÀ®V­ZÀ¥K— ¬,mÚ´áÓO?ÅÃãÀòÈIhh(S¦L V­Z|õÕWÙ¶1D]>|X=»p÷îÝ)]º4ï½÷Ë—/ÏWYUí£dÉ’yn«*s5pssË×þ áìٳܿ€Áƒk5£¸¡Ú¤ª>Ûµk‡‹‹ mÚ´`ïÞ½ê™Z_åââ¢~­o;= µ ½xñ‚… òþûï3xð`Ž;†B¡ €•+W²}ûvzöì™gYîÞ½KPPgΜA¡PðÓO?Ѿ}{Û¾m}A5ࢣ£#—/_ zõêZŸ£¥žs¦8ÒÓÓ“Ö­[k•VÎ…s UÕ³¿¿?%J”Ðy?ºÜç”)S†Q£FqôèQ¦M›FÍš5INNfõêÕЫW/vïÞ-ÁÉB!„B!„BˆB'ÊB!„Bˆ"# €¥K—2a¬¬¬X¹r%G5v±„Љ´g!„B!„Å‘*pëüùó(•JgÏž%==…BAÆ ³¤?wîܤkу²•§ lܸ¥R‰B¡Ð8b¥J• `Ó¦M¤¥¥H9 ÄìÙ³ aãÆ888H>¹Y´h¡¡¡|òÉ'4iÒ$ËzCÔUzz:«V­ k×® 4…BÁ78vìX¾Ê©jnnn¸ººæºí«eþöÛoQ(ùÊC_ééé,\¸€ªU«2vìØ|Ï’i¨6¹}ûvž>}й¹9½zõR<æ4›ó“'OÔ¯kÔ¨‘¯²æ$** €Ò¥KSºti½ö•_éé鄆†Ò»woÚ·oϪU«HJJÂÇLJI“&qôèQÞyç\÷ñüùsúôéÃ_ý…B¡`ƌԫW/Ûvo[_¸}û6åÊ•`÷îÝ$$$`aaÁ´iÓ°··ÀÌÌ,_û“zÖlÓ¦MêA>¦OŸÎ‡~ˆ««+vvvÔ®]›qãÆannžg¾oãy£°®¡ëׯ'-- '''¾ùæ¯)ÚÞç|øá‡8p€!C†àèèHTTÓ¦M£qãÆ„„„¨ B!„B!„Bce!„B!D‘Q¢D ÜÜÜxðà“'OfÉ’%Æ.’:“ö,„B!„¢¸qvvÆÇÇÈ PÎIBBׯ_ÈĺvíZJ•*ÅÒ¥Kyÿý÷©T©ÕªU£M›6ù 扌ŒäéÓ§üë_ÿâ£>¢víÚÔ®]›=zðõ×_ëôþ4yðà ,2ƒ×fÍšEÓ¦M©U«ü1+W®ÄÌÌŒØØX~ùåƒåûº:¨_;::âïï_`yåfÔ¨QaëÖ­8991{ölºvíJRR’z›·©/>|ȱ~ýú„……±nÝ:>|ÈàÁƒ©U«–––DEEqþüyvïÞ¯ýJ=gwâÄ ùꫯhÚ´)@f]íÙ³‡Î;£P(4¶å·ù¼Q˜×Ð_ýKKKŒ§§'!!!·[¸p!7oÞÔ¸NÛûœ‹/Ò¡C‡<ïÍ„B!„B!„Â$@YD×®]’V!„"7¯¿Š¢/&&†˜˜cCƒö,„B!„¢¸Q_¹r…äää\·=wîAAAxyyáææ–%ài̘1œüðCcGS]ºtaúô餧§Ó»woNœ8aì"½u*V¬¨žzðàÁ„††X^rÞB!„B!„Bˆ7Ä«ã>þÿ³à¦M›v611‰111y‘žžþH277OIHHH555Mµ±±IOIIQººº¦GFFfØÚÚf¸ººfT­Z5c„ ÙF’4-œw"„B!„B!„B!„B! ‹‹‹ Æ `îܹF.(Î6oÞÌ… 055eæÌ™2x¿ôîÝ€ôôtΞ=[`ùÈyC!„B!„B!„6ÌŒ]!„B!„B!„B!„B¡ŸÊ•+“˜˜Hjj*ÕªUcÔ¨Q¸ººÆž={Œ]$@Y¼•2dH¶å·oßfРAF(‘n<<< ¢J•*¸ºº’––Ftt4×®]ãÔ©S„……»ˆ¢OOÏ,ËU} L™2˜šš4@Ùtí¿õë×§rå¬3º»¸¸Ð´iSÞ{ï=f̘Á®]»4¦5ô1²¶¶æ?ÿù<~ü˜±cÇj "Õ•¦ó$@™2e(S¦ -Z´ $$„+W®dÛ¦D‰Œ7Žzõêe[îî»;ï¾û.ñññß©U«VYþwtt¤E‹4mÚ”iÓ¦±oß>éÞ¶v5`À‚‚‚²,stt¤I“&øûû3kÖ,õ†¤k¾ÖÖÖ|ÿý÷øúúfY®ºî}ï7tmÆûŒgÏžå˜>""‚½{÷rëÖ-âââHKKÃÆÆ†òåËsùòålÛüñÇêÀŒýû÷³cÇâããñóó£OŸ>ØÛÛóí·ß2dÈžýôS222²¤1b„:8yÿþýìÞ½›§OŸbaaAéÒ¥ùúë¯Q(Z—¥0¤¥¥±mÛ6Ž9B||<+V¤oß¾¸ººòå—_róæMnÞ¼™cú7½]ôèÑC€zîÜ9/^ÌÇñððà“O>ÁÏÏÏ>ûŒK—.qãÆ u:}û¯®ù|þùçê Ò]»vÊË—/©X±"xyy嫎t¥ëý†®mC×ó³1‘¾t­+]ÎuÆjWú\uofˆ|u9FB!„B!„o¢Æ3dÈ*V¬ˆ½½=fffÄÆÆrõêU>ÌêÕ«yþüy–¡iÓ¦üöÛoXYYQ½zu 4¿·…­­-gÏž wïÞ;v,ÇmÿüóOêÕ«ÇÂ… ùþûï «ˆ¦uëÖÌ™3'×m:vìøF|Ì·ß~ À˜1cøóÏ? $Ÿzõê1pà@êÔ©ƒµµ5÷îÝcÇŽÌ;7×g»&&&tÉÃn IDATîÜ™îÝ»ãç燕•Ož<áøñã,X° Çç`úªT©ÁÁÁ4lØwÞy¥RÉíÛ·Ù¿?‹-"666Ç´ …‚àà`ºuë¦þÎþÎ;ìÞ½› ðòåKƒ—W¡PЪU+:vìH:upvv&99™›7oÊ’%KxñBóýú¤Õ—>õ º·«WÙÙÙ±|ùrªV­Ê!CسgÆí*W®¬ÕÀìEíÜ¡k]ðóÏ?çºïþóŸ'з]âø !„B!„B!„0Ž7:@`ÇÞà 舃½Ÿ}ÄîýG¹|í&Ë{Ô¥=ÛCkà”U®]»ÆÅ‹ÕÿGDDpæÌ~øáæ—_~É1ýÉ“'5Ψi&ÄR¥JÑ­[7vïÞÍôéÓÕënܸÁ¹sç˜={6¶¶¶ôîÝ›™3gª×gdd’’9ãô«Á­©©©êå9Ñ'_È 4´²²"99™1cÆð÷ßgËãôéÓÏ·¸)ŽÇH_U«V`ß¾}¬]»6˺'Ož< ô«ç×iÓ_MóºcÇŽq÷î]æÏŸ……õêÕË6Ë®!‘³³3ß}÷*TàÞ½{„„„h "MOOÏR'J¥2_ûÝÕ«W9sæŒúÿ¿ÿþ›øøx†އ‡UªTÉr¬½½½ÕAh[·nÍv½ví£G.²Êüñ+V¬PÿãÆ Îœ9Ãܹs)Y²$}úôQÿ8D“7½]¹¸¸Ð§OŽ9¤I“Ôª±±±„„„°hÑ"œéÖ­?þø£:­>ýWŸ|+T¨@Ó¦MX³f ,P¯»qã{÷îeóæÍ˜™Üm—®÷º¶ ]ÏÏÆ:F† k]©h{®3f»ÒõøëÞÌPùj{Œ„B!„B!ÞT>>>øûûgYæêꊫ«+þþþ 6Œ¯¿þšíÛ·Xlll°²²*°ý¿­^ ô677Ïu[Õwþfèܹ3'N,ð|zõêÅĉ155U/óööfذa´oßž   ¨fffÌš5‹V­ZeY^ºti騱#£GfÓ¦M+«©©)_}õŸ~úi¶çŠ~~~øùùÑ­[7ºwï΃²¥·¶¶fÁ‚4hÐ Ëò*UªP¥JºtéBÏž=‰ŠŠ2X™~ûí·lõdffFµjÕ¨V­ݺu#((ˆèèhƒ¦Õ•¾õ º·«W½óÎ;Ìž=[=0ì›JŸº²±±Ñ)O}Û•!ޝB!„B!„Bã1Í{“âíæí{ü¾j‰‰I¸89Ò«[ã¾B¿ºP¢„%Ûöâø©s…Z¦ .°k×.Þÿ}ƒ–¼ÿþû˜šš’––Ʋe˲­¿sçŽzØ–-[‰|½¼¼Ô€–/_®1ø­ ò}ÛëéK5ú~•*U°³³+´|‹¢{÷9K—.e!‘‡‡3fÌ B… \½z•Ï?ÿ\ciAÛ·oŸz–ÊJ•*eY×¢E ’““5¶ç¢NÓ çOžWQ*•F™uUŸûÜÚçül¬¶‘—¼ê*7¹ëŒÙ®t=¾Åñ^4/¹#!„B!„Bˆ7ÝË—/i͚֬5S  ¿üò :t0v…–”J%©©©y~O¦ `.ˆ`aÿþýÔ®];Û_¯^½Œ]´W¯^=~øá222tp8?j֬Ʉ 055åâÅ‹ 8.]ºðóÏ?£T*ñööÎqpÑáÇӪU+”J%³gϦyóæÔ­[—O>ù„[·naffÆ”)S´þ>7eÊ”¡oß¾( <ÈðáÃéÔ©ü1¡¡¡¸»»óÍ7ßhL?~üxupòo¿ýF³fÍxï½÷øæ›oHHHÀÓÓ“™3gbbbb°2lÙ²…7nðã?Ò³gO>øà>þøc¶nÝ dâŽ=Úàiu¥o=ëÓ® svß¾}û²eË–|'GFFª¯šþš7o®8øâÅ‹\¿~]ËZ)úÖUÉ’%8~ü¸ÆóeíÚµ5Î:­O»Ò·ÌB!„B!„B!Œï­ˆØ¬XáJ”(ArJ 7nÞ¥B9Ìÿÿk³Æõxú,†+×oj™Ž=Ê|€••^^^¹Î|™_~~~ܺu+ÇÀ¯'Nо}{,--‹D¾5jÔPo£éAFAåû¶1Ö1Ò׆ ¨W¯åÊ•cÑ¢Elݺ•={öpÿþýB-Ga²±±¡cÇŽ¼ûî»”*U {{{’’’xðà:HìõàUC£J•*Ñ­[7ìíí gâĉ$&&ê¼?}$&&òôéS\\\°··Ï²®råÊܼyó)Yõ[¡PàååeÐY:‹S»ªV­9ð³gÏ4nsçÎìíí±··WSêCŸ|UA‹7oÞ4ZŸÉI^÷º´ 0ÎùÙXmCE׺ÊMnç:c¶+]oq¼ÍKnÇH!„B!„âM—žžÎ½{÷€ÌúΞ=ËŠ+X°`ï¾û.“'OæäÉ“FèTè.11ssó|8žžžêüš6mšg™ÓÒÒÔ×?MHÕªUINNfĈ¤¤¤ä«. š>u¨Ÿw=}úTãù2'ú´+}Ë,„B!„B!„ÂøÞøå÷›6¤i£zÄ>cÁ²uÄ<ÃÔÄ?oZ7o„‹³#½>ìÀ‚ek¹{?ªÐÊõ¿¼œ ²O'''€\ð꺢¯êu||<111…–ïÛÆXÇH_§OŸfâĉ >'''zöìIÏž=¹té6l ,,,Û šÅ™§§'“'OÆÅÅ%ËrKKË,AQ¯²m¨côÞ{ï‘‘ÁªU«Œh™””€……E–å¶¶¶@îí¹8zòä‰úµƒƒƒÁö[ÜÚ•*ßêÕ««gÿÍ­­­A‚PõÉWõCžÇë]CËí~C×¶Æ9?«m€~u•—œÎuÆlWºßâx/š9#!„B!„Bˆ·Q||<#FŒ`Ïž=ØØØ0`À¦L™’m»#Fàïï››ŽŽŽXXXðôéSNŸ>ÍâÅ‹5U®\™;vd[~áÂ…lËŽ=JŸ>}4–±fÍšôïߟúõëãììÌóçÏ9}ú4 ,àÌ™3y¾ÇòåËóóÏ?ãééÉŠ+˜:ujžiŠ“„„ìììòœAYµ>§^]ëÙÌÌŒ~ýúѹsg*T¨€‰‰ ‘‘‘lÚ´Éà3ÍŠ.í ((ˆš5kâëë«øRˆƼyó¸{÷n•ÛÔÔ”3fPªT)æÏŸÏòåË9rdäåììLãÆ˜7ož:ÈPeÉ’% <''':uꔥÎ\]]ÕÏÆ:”mßQQQ\¸p ä9ƒ²¶ýwãÆ9®Û²e -Z´@¡PàîîNdd¤z]“&M055à÷ßÏ–644”èèhÜÜÜøàƒr Pֶ̯¾îÌ™3´k׎%J`jjší»|}ÒêC×zÖ§]”+WOOOn߾ʹiÓ Ó;ȵL™2Œ1€Y³fqóæM½ö——+VPµjU†®±¨è[Wð¿em ×µ]¢ÌB!„B!„B!ŒÏÔØ(Hö¶4ó€5›vóL:•K—.™3%Ž;–¹sçâåå¥Ó~‹Æ‡‹‹ ÉÉÉÌ™3‡>}ú@`` ÿøÇ?r RÓç½êÔ©SÄÇÇcbb¤I“ò5z´1¨F V=ôS(•JõkCžŸ‹[»R回žNjjjžyÍð_ú䫪£´´4ƒ”ÅrºßЧm¨öùÙ˜mCߺ҅±Û•.Ç·8Þ‹ !„B!„BíEGG³uëV>øàÛ4oÞœºuëâáá æææ¸»»ÀêÕ«éÞ½{”mÔ¨Q¬_¿žN:áî¹9...´mÛ–Õ«WÓ»wï<÷BÕªU±µµeÈ!Ô®]»@Êj,ñññy~‡ªú~Yµý«t­ç’%K²jÕ*ÆŒCÕªU±¶¶ÆÊÊŠªU«2f̃}¯khº¶ç‚‚‚¨Q£îîîXYYaaa§§'½zõbË–-Ô¬Y³ÀÊýÙgŸáïïω' <оaÆêgw{öìɶ>--¨U^ J¬P¡‚Æý«}øða®å0dÿ}uöðÿcï¾ã£ªòÿ¿'•ôBBB#IèH‘bèRmˆëOVED”²6D],ˆ®¢®ˆºêׂ"Š ŠŠ¸‚R MzB'RIÿý‘Ù é3“L¯çãáÃɽ÷Üsî)w†¹ó9çò xƒ‚‚$•𗞄ب¸¸X›7o–T2ñj]•¹K—.’J&v¨i€±5i­QY=[Ó¯¤’àÞñãÇkРAZ¾|¹MÊûÌ3ÏÈÍÍMgΜќ9slrÎÊxzzÊËË«ÊßY[WÒÿ&„-¯O[ª²~e‹2ìïŠ^A¹EäµrtpPFf–Ž<]f^^¾¶ìØ­áÃ(<¬ò™vm­ô |5}´")))ŠŠŠ2= +O“&ML¯/\¸Pî15}ØdM¾ÆU9===åíí­ôôô:É÷jc¯6ÊÏÏWqq± ƒ<<<,(y‰‚‚­^½Z«W¯VPP†ª;ï¼SááázóÍ75~üx¥¤¤X|þŠÔåƒ×¨¨(…‡‡K’Þ~ûmýöÛo¦}:räH…3Ô[ÓF¥íÞ½[ï¿ÿ¾^zé%]{íµš6mšLýªb øªíÙí“’’ÔªU«+&8Ý(00ÐôÚV÷«†Ø¯Œ÷«õë×—»êFuYú^fI¾Õ¹ÇÚKEŸ7¬é¥Ys®Ë6²†­êª¦êC¿ªiûÚ볟 êÞ¦M›4räH…††*$$DgΜ1Ûÿî»ïª  @'NœPFF†œÕ¡CM™2EQQQz饗´jÕ*³ï->¬¶mÛJ’¬wÞyGRIpÓåAk¥'ý4š0a‚&Nœ(IÚ²e‹fÍš¥'N(""BÿøÇ?Ô¹sgMŸ>]±±±¦IùÊsù ­!!!WÔªÆ`ÐÒÁÀÍš5“‹‹‹N:eú¾ÓÅÅE’Ê<°¦žgΜi ¾\¼x±–,Y¢ŒŒ µmÛVcÆŒQ›6mj碭dI.í×_Õ×_­””yxx¨k×®züñÇååå¥Y³fiðàÁ6ŸX±U«Vzâ‰'”ššª'Ÿ|²Ü1cK-Z´TÒ_Œ÷ƒ)S¦¨K—.zã7«ƒJ*éoNNN¦ :³²²´wï^]wÝuzä‘G´|ùr³~­¨¨(åçç›&G¨ˆ-Çï!C$IGŽ)m¼'¹»»ËÝݽÜçÆ Ïª¾ç·¶Ì^^^jݺµxà 2D999zíµ×j=­­TVÏÖô+I:þ¼Ö¬Yc³²6oÞ\·Ýv›$iöìÙ¦‰µëkëJ*YÑX’rssåêêªÜÜ\‹ÊRÝ~e‹2ìïÊZ~ò2žî’J‘+’ûß}..u;s÷î%+6*!!Á&çüóÏ?%•Ì*\:£´ž={J’.]ºTa¾¥2T'¨Ôš|÷îÝ+©$ qàÀUæe«|/g¼æFÕ¨ …½ÚH’)péÚk¯­qÚò$%%é‹/¾ÐO<¡‚‚yzzjРA69÷åj:¬áççgz_£´Ö¶Qi‰‰‰zê©§´oß>988hÊ”)êÝ»wµÒëËÝÝݪ2T%66VRÉÃù+i¦ä=zHªú~U ±_ïW;w–«««ÅyZú^fI¾Æ´-[¶4 ®*ú¼aMߨHMïÏuÙFÖ¨ºªŽúÖ¯ªÓ¾¶ülVöÊ·<ÑÑѺ뮻êå„¶Tú;–ÐÐÐ2û×­[§7êĉJMMÕ¹sç´zõjM˜0A………ruuUß¾}ÍÒ+77W¹¹¹fHyyy¦íåí—J'Mš$IZ¹r¥F­¸¸8¥¤¤hûöízà”””$GGG;¶Òk+½ÊfjjªiÔ+…1@Ù¸§···V¬X¡_~ùE>ø é8ãþÒ¢ÖÔsëÖ­uË-·H’æÌ™£©S§jëÖ­Ú·oŸ¾ûî; >\ùù?×·'Kúsi{öìÑÆµÿ~mß¾]}ô‘^}õUIRdd¤®¿þz›–×ÁÁA3gΔ“““þùÏêܹs6=yŒß̓´»wï® &¨k×®š1c†¤ÿMŽëäädZ©ÕhæÌ™*,,Thh¨~øá :TÎÎÎêÓ§Þÿ}IÒ«¯¾Zf2„ËÙjüvíÚU#FŒ$Íš5«ÌþÒÁ÷ƒ.÷/^”$¹¹¹Uš—¥eöööV||¼vîÜ©E‹iذa:xð î¾ûníØ±£ÖÒÚRUõlm¿²µ &ÈÁÁA§NÒO?ýT«yÕ”-êÊ,?eÊíÛ·OqqqZ°`F]­ßÔ´_Õ·öXæŠP¾Vò°ÔßÏG!Áå+´oS2#gJJj­”Áøà¶´   S°×–-[,žuôrk×®Uaa¡5zôè2û¯½öZÝtÓM¦c+šY´ôÊ.]ºÔj¾‡2û<ðÀºîºëªÌÏù^ÎDÛ¤I³UL««W¯^Z°`.\X/&íÕF’tàÀI%uTÓðòÆÑñãÇM? ðññ©Ñy««¦cÁÆkRÉŒæ5am].33SS§NÕÞ½{åè訩S§VëœÆújܸ±Y@Ÿ­­]»Ö´úå”)S4xð`ùùùÉÓÓSmÚ´Ñĉ+í;—«ã·M›66l˜$iÍš56›ù¹!ö«Õ«W«  @>>>zä‘GäèèhQ~5¿Öä[úûØcY\fkÔôó†5}£¢üŒª{®Ë6²†µue){ö+KÛ×–ŸÍjÂ^ù^îî»ïÖôéÓ5nÜ8½÷Þ{òöö®•|êãwDRÍžÓ=zÔ`n³ò >\®®®ÊÏÏ׋/¾XfµØììl}ùå—’Ti ©$}ôÑGzôÑGõúë¯kĈfß^ ._AyÀ€¦ï‡j:®¼ekêùÖ[o•T2yå{ï½W¦\………6_E¸¶YÓŸüñGI’ÕÏ`.7jÔ(]ýõÚ°aƒ–.]jÓsWļhì/^^^¦}ÆïJK¯0}y°ãÖ­[5vìX¥¥¥)""B|ðvîÜ©Ï?ÿ\ÞÞÞzå•W4þü*Ëa‹ñ®?üPƒA+V¬ÐªU«Ê³eË;vL’ô /˜&®tqqQÓ¦M5tèPÓ÷ҥ,sqqq™ï»[´h¡‰'V91¬5im¥:õlm¿²%???Ó}lîܹµ¾*yMÙ¢®«„„åææÊÛÛ[=zôЋ/¾¨eË–©yóæ•–¡¦ýª>µ/ÀrÕàj€NPNÎ%¹¹5Ò¨ÿw›~]ó»Ž;©ü¼|4öUß»©MËHIÒö]ûª8›eî½÷^ùùù)&&FYYYjÞ¼¹î»ï>¹¹¹©   ZѪëܹsúþûïu÷ÝwkРArssÓòåË•••¥6mÚèÞ{ï•“““222´`Á‚ ÏsòäI¥¥¥É××W=ôuôèQI%aaaúôÓOm’oqq±Þ}÷]½ùæ›jÔ¨‘Þ|óM­_¿^[·nÕÙ³gUXX(]{íµòõõÕ¼yól~½Òÿf86 š2eŠ,X ¢¢"5mÚTÁÁÁúâ‹/*Lëää¤gžyÆ4óñ“O>©mÛ¶ÕZð‹%ìÕFRÉìé½zõ’¿¿¿^ýu-Z´H‰‰‰rqqQ“&MäàPñ< 3gÎT~~¾Ö¯_¯C‡)55UNNNjÒ¤‰n¹åSìÁƒm^gRÍÇ‚5âãã•””¤   Mœ8Q®®®Ú¹s§ÒÓÓåìì,Ÿ ¼­m£òäææjúôéš5k–"##õâ‹/jÒ¤I•ÎJ^zÅÝéÓ§kÁ‚ÊËËShh¨‚ƒƒõùçŸ[T7å•íµ×^Ó+¯¼"777=ýôÓŸËã·eË–jß¾½222äåå¥n¸AwÜq‡œuñâE}õÕW6Ë«!ö«ääd-\¸P£GÖСCÕ¡CýüóÏ:yò¤RSSåâ⢠  µoß^ï¿ÿ~…ÿk:~­É÷ܹsZ¼x±þú׿ªgÏžš={¶~üñG>}Z ¬ô^g 5ý¼aMßls®Ë6²†µue){ö+KÛ×–ŸÍjÂ^ù^®ô.}||L?¸++âåå¥Q£F©oß¾ •¿¿¿²³³uüøqÓ÷K¶ü^­[·n’¤¸¸¸ W‹=räˆ$Éßß_þþþ¦ÉPËó믿ڬlõ1Ì µ/ÀrWt€rnnž-ùE÷Ýu«|¼=5rİrÛw0^1Ûâj¥ NNNºí¶ÛtÛm·™m/,,Ô[o½e ı•yóæ) @ P¯^½Ô«W/³ý™™™š>}º’““+>>š4i’Ùþôôô2A™Öä{ðàA=ÿüóš:uª7n¬þýû«ÿþeŽËÊÊ*g‹ë•Jf·Ž‰‰QÏž=Õ¡CuèÐÁ´ïâÅ‹•({{{›‚¥’€”ÀÀ@%&&Všg]³WmݺU¿þú«†ª6mÚ襗^ªVyÔºuk¹ººªk×®·eË­_¿¾Zç¬)KÆ‚5yýë_ÿÒ+¯¼"OOO=þøã5JoMU$++K/¼ð‚þïÿþO>>>š>}º&MšTáªï§OŸÖo¿ý¦þýû«mÛ¶zõÕWMûÒÓÓm ,I»wïÖã?®|P]»v5=¨ÍÊÊÒæÍ›5`À9::V9Ó¾=ÆoyãO*Y¥uúôé•þ ª¦j¿Z¸p¡\\\4räH…„„˜= /íûï¿×©S§ÊÝgÉøµ&ß/¿üR>>>6l˜Z·n­©S§VY¶TÓÏÖô [ÝŸëº,eí8²†=ú•µík«Ïf5e¯|KKNN6[=àüùóµ–€½•’*À*IÍ›7×_|¡àà`³í52 Ä´eÐQ“&M$•ÐÆÇÇWy¼¯¯¯M¿oHŒíåää¤F©wïÞŠ‹‹Ó×_­^½zièСš3gŽœœœ”——gLlM=H’Ξ=këKªUµÙŸA~®®®Ö²”‰'ÊÛÛ[?üðƒ>l³óVÅØOŒ+ªçååé0;¦ôjëÙÙÙfû&Mš¤ &èôéÓº÷Þ{uêÔ)9::jðàÁzê©§©?üP÷ÜsvîÜY+ס (((Hñññ3fL™r–¶{÷nÝ|óÍš0a‚úôé£àà`åççëÌ™3Ú¸q£n¹åÕz;¤¥¥)66V±±±Z³fæÎ«öíÛëž{î©ôwÖ¦µTMêÙÚ~eKÆæW®\Y­ sKÌš5Ël%ûÒþýï—ÙvÛm·™&ã·u]j÷îÝÚ½{·6oÞ¬>ø@¡¡¡ºûî»mÖ¯êSû,wE(KÒ‘£'ôîÇóݽ“šG^+_o/999*'ç’Î$×Î=´kïUÂf¹Õ«WËÉÉI;v”···ÒÓÓµ{÷n-Z´H 6ϯ°°Po¼ñ†éW«V­äêꪤ¤$mÙ²E‹/VZZZ•çùå—_”žž®Ûo¿]QQQòððPNNŽ´iÓ& ³À?kóݽ{·ÆŽ«Áƒ«{÷îŠŠŠ’———òóó•™hqnï IDAT™©ãÇ+..NŽŽŽf+"Úêz%éµ×^Ó¨Q£Ô»wo*77WÇŽSLLL™ë-íÂ… Ú½{·YPs}œõÛ^m$Iï¼óŽöìÙ£aÆ©Y³fòððP^^žÒÓÓ•˜˜¨Ã‡kÇŽfiŠ‹‹õ /¨W¯^jÓ¦üýýåãã£ââb¥¦¦*!!Aëׯ×o¿ýVeª5j:¬±wï^?^Ç×õ×_¯€€yyy)''Géééºpá‚Nž<©íÛ·—›Þš6ªHrr²Þ~ûm͘1C=z´æÌ™Sáño½õ–NŸ>­þýû+((H¹¹¹:~ü¸6oÞlÓº’¤ãÇkÆŒrvv–¿¿¿ŠŠŠLg”¤*gö®Ëñûé§ŸªS§NjÖ¬™Ô¨Q#åææêÌ™3Љ‰Ñ’%K”™™ió|b¿*..Ö矮uëÖéÖ[oUÇŽ effêäɓڵkW™½]®¦ãך| õÎ;ïhýúõºõÖ[Õ¶m[ùøø¨¨¨Èt¯;pà@…õl-K>oXÚ7ly®Ë6²†µãÈRöèWÖ¶¯-?›Õ„½ò-mΜ9 TÓ¦MµlÙ2íß¿¿V󰧨¨(ÓëÒ“~ }ðÁ Ö¥K—4kÖ,­X±BçÏŸ—«««ÂÃÃõÉ'Ÿ¨iÓ¦6-18´°°°ZßUW¾¥¦¦J* PîÓ§ÜÜÜ´råJmذA¹¹¹6l˜)@ùòU’­©gã÷‰ùùù¶º›»ü;ÏÚîϵñŒó®»î’$ÝyçºóÎ;+øàÍž=Ûê|}Å××·ÂcŒ«M˜MªGyD’ôôÓO›& -,,Ô/¿ü¢õë×ë»ï¾S«V­ôøã롇²º¼—»æškLA³ ºï¾ûª5 ebb¢f̘Qf{ãÆ5fÌIRll¬K[±õë×+..N:uRŸ>}jdlMÚêªi=[Ó¯l) @;w–$-[¶¬Vò°VmÖÕ¯¿þª?ÿüSíÚµStt´ÍúU}i_€u®øeIJKÏвUì’÷‰'ôÍ7ßÔ8Ý}÷ÝgU¾›6mÒ¦M›êüÖä{éÒ%ýôÓOúé§ŸjœÖ×›››«Ï>ûLŸ}öYÓ>ÿüózæ™gÔ§O9r¤ÖfÌ5úý÷ß5dÈ‹ÒÚ£Š‹‹µzõj­^½ºFivíÚ¥]»vÕ´˜6WÓ:³füž;w®ÒàªXÒF•ý8A’bbbªÝßòóó5þ|ÍŸ?ßê|«ûã‚üü|%%%™þ¾æškL?1þȦ2u5~—/_®åË—[œþjìWGÕ{ï½Wí<ËcÉ=Ïš|ãââgQZkXúyÃ’¾aëûs]·‘¥,G¶¸×Õe¿²UûÚâ³Y]åk«÷£S§N™~Dp¥ëÙ³§¤’àýôSéĉÕN®Ì¨Q£äàà ÂÂB­\¹ÒF%­žÄÄDuêÔÉl…ïºH[KêÙš~eKƒ–ƒƒƒ.]º¤7ÖJ’ô裖ٶtéR]wÝu7nœÖ®][aÚÚ®«cÇŽ©]»v ¬Q:©â~U_Ú`{¸tîÜY7Üpƒ$iÁ‚v. pu»í¶Û$•Ù8p Êã¿T_ãÆMßůX±Âl_@@€éõ¾}û,Î#''ÇôÚËË«ÊãwìØ!IŠŽŽV£F,Î×hðàÁzøá‡fõ¹êc€r£F4`À9rDÇŽ“$­\¹RƒA·Þz«$• P¶¦ži;tè    k.Á¦Z´haz}y°¤­ús]jß¾½¢¢¢*üÏØþÏ>û¬¢¢¢l²z²$mݺÕ4±ÀÀËìwttTß¾}%I›7o6Ûg¬çììì ÏoÜçááQeYj:~_}õU5oÞ\©©©3fL™•ÃkªeË–7nœ$é—_~ÑéÓ§m^æÊDDDH’ÒÒÒê4mU,©gkú•- 4H’ôǘ½?Õ'µ]W!!!’dÑdßõ«úÒ¾ë  Xá–[nÑ—_~©3fÈÍÍM_ý5F€:ðüóÏëÁT·nÝ¥ÐÐPuêÔIO?ý´†.IÚ°aC¥+(3~¨WWWÍš5KžžžÊÍÍÕœ9sÌö'''›^wèÐÁâ|J¯¢Ø»wï*ÿá‡TPP ½øâ‹rtt´8ïñãÇëÃ?Ô´iÓôã?Ê×××âsÕGÆ6êÝ»·|||´jÕ*Ó¾Õ«W«°°Ð€^º=%ëêùÇTaa¡õòË/[ÕF5YîJÜŽŽŽ9r¤¤’•<322ÌöÛª?_ ’““MÏÙÆ'OOO³ýcÆŒQãÆ%Él%jI:yò¤$)<<\íÚµ+÷ü7ß|³$éèÑ£•–£¦ã·cÇŽ¦€ü¿ÿýï:~üx¥ÇW¥wïÞZ°`ÜÜÜ”œœ¬W_}µÊ4¶¼ç 8PmÚ´‘$mÙ²¥ÎÒVÅÒz¶¦_ÙŠƒƒƒ:wî,IŠ­•ù¤î¾ûnõèÑC ,P||¼ÎŸ?/WWW………é†nЋ/¾¨Â ó6ÑI’ŸŸŸ¢££µlÙ²Õ]}f\µ´U«V’d œššª;v¨[·n’¤¤¤$³´ÖÔó™3gôÉ'Ÿèoû›¨o¿ýVóæÍÓ±cÇäè訦M›ÖJв‹‹‹¾úê+?^óæÍÓ®]»T\\¬æÍ›ë±ÇSÛ¶m%IóçÏ/“ÖVýùj1{ölõìÙS!!!úꫯôÎ;ï(%%EýúõÓã?.IZ³fâââÌÒ­Y³FiiiòõõÕ'Ÿ|¢×^{M›6mRNNŽ"""L}F’/^\ij:~Ç/IŠ‹‹ÓŽ;äíí]îqEEEÊÌÌ4Ûæîî.…††ª}ûöºùæ›M¬)))š8qbµV ®I™ ƒ~þùg­[·NÛ·oWRR’ Ô¤IõêÕK£G6åÿõ×_Û,­µ¬©gKû•‘———i‚///ÓvwwwS9 *\Á;22Ò8»sçÎê^²]XSWÿþ÷¿•’’¢-[¶èÔ©SÊÏÏW@@€úôé£Ñ£GËÁÁAZ¸p¡Y:kû•µí °?”+¬]»V±±±:v옊‹‹í]àªàä䤯¾úJ:uRÓ¦Måãã#gggedd(>>^7nÔªU«TPPPéy¿TÌÃÃCëׯ/³=;;[Ï?ÿ¼–.]Zf_QQ‘ž~úi}öÙgòööÖË/¿lQÞEEEš={¶^}õUùùù•Y…455Õ,@Y’Þÿ}¹ººj„ ×´iÓÊ=÷gŸ}Vé*¬gÏž5[ŵôjÎW‚óçÏ›V2NJJÒîÝ»Íö¯ZµÊ œ˜˜X&½5õüöÛoËßß_#GŽÔõ×_¯wÞyÇFWU±ë®»N7VPPfÍšUî1?þøc¹s¶êÏW‹]»v饗^ÒŒ3Ô¾}{}öÙgfû9¢)S¦”I—™™©I“&éÃ?Tpp°Þ}÷ÝrÏ¿jÕ*Í›7¯Ò2ÔtüÞpà ’¤N:U™œœ¬îÝ»›mûûßÿn ¾4*..ÖêÕ«5cÆŒ28Ø¢ÌQQQjݺµZ·n]éù&Nœ¨ôôt›¥µ–5õli¿2Ú¼y³ÜÝÝËlŸ={¶éõo¿ý¦‡~¸ÜôÆI9$Y½Âvm³´®Õ¿¹»»—éÓF©©©zì±ÇÌV–—¬ïWÖ¶/ÀþP®%wÞy§½‹€:ššªÔÔT{¸ªäææê›o¾Ñ7ß|cÕy¿¸ðy€­|X¿ÿþ»¾ýö[¥¥¥U˜þ?þÐСCõÀ¨gÏž –¯¯¯233•––¦óçÏ+>>^6l¨´‹-Ò… 4zôhµiÓF^^^ÊÎÎÖþýûµråJ ³ H‹‹‹5kÖ,ýç?ÿÑ}÷ݧ=z¨iÓ¦ruuUzzºâããµeË–*Ÿ ¼þúëjÚ´©ÂÃÃõõ×__q«6êôéÓ ך5kÊLâºråJ=÷Üs’Ê”´¦ž õì³ÏjÙ²eºï¾ûÔ©S'5nÜX………JMMÕ‰'´k×®*ûFMÄÆÆjàÀ5j”úôé£ÐÐP¹ºº*55U{öìÑâÅ‹µråÊ ÓÛª?_-,X C‡iܸqêܹ³ÜÝÝuúôi-[¶LŸ|òI…«ÔnܸQC† ÑØ±cÕ»wo…„„ÈÕÕUiiiúóÏ?µtéR-]º´ÊI‡k:~}}}-¾ÖŒŒ ¥§§ëâÅ‹JHHÐöíÛõ믿*!!¡Fç©I™Ož<©É“'«OŸ>jß¾½BBBäââ¢ôôt:tHk×®Õ·ß~«ŒŒ ›¦µ–5õ,YÞ¯l!44TRÉ„ö˜°bøðá5:Þ’º***Òäɓկ_?uèÐAááárwwWFF†´~ýz-\¸P.\(“ÖýÊží °žá¿ÿ™™1c†áÏ?ÿ4œ?Þ‘‘aˆŒŒ4œ?ÞÁÅÅÅ1++Ë¡¨¨ÈÙÝÝÝ9??ßER#ââb¯ââb¿ 6,ݾ}»é\]»v­Ã˱¿æÍ›Û»P¡E‹™^wíRêyn™'Ç€©ôܯÿ}ܧOŸáƒ!Õ`0deIºäì윗ïààïááQ”——WX”PìååUXÜ®]»â3f”™MÖ¡n®À•€eÕF€2€j#@@µ   Úœì]€ºààà nÛ«s‡¶ lì'IºvQûÆkã–XåæåÙ¹„@ÃpÅ(»¸8kôÈáŠ5ÛÜ$@ÁMt}ûÖútþwº˜ži§ Ç |ëྦàäu›þÐö¸½*..V«: —ü}}t÷Cõé—ß©ØÎeê;{ 6ùz{©s‡¶’J‚“W­Û¬Ô‹éJKÏÐÖ»µø§’¤fׄ**"ÜžE„+:@¹yd¸ ƒ$)æeöï?¯ôŒ,IRû¶-ê´l@CtE({{yJ’òòó•™•]f±¤øc'$I¡Mƒê²h@ƒtE(çåçK’\œåâì\î1ÆÀeoO:+ÐP]ÑʉgÏ›^·mUî199¹’$ç ˜ü“½ P›ŽŸRÊ…45ö÷Õ­ƒûÊÑÑA‡Ž+;û’<<ܤÖ-#$I—róì\Z þ»¢”‹‹‹õíÒ_õà=#äæÖHwÞ:¨Âc/]ºT‡%&{ ¶:“¤ÏY -Ûw)%5M…ÊÍÍSÒùmÚ§ôŒ,IÒ¹ä v.)Pÿ]Ñ+(]LÏÐV¬+³ÝÃÃ]7v»^’tüTb— hx®ø”+Ó£K kßÁ#ö.Pï]µÊAÕ»GIÒÞ}‡•v1ÃÎ%ê?'{ÀšG†ëîáCåìì¤Ì¬l-_½ÁÞE„+>@ÙÅÙYnnäëã¥Ð¦Ajߦ…ÂÚJ’²²²õÕâÿ(#3ËÎ¥†+>@ypÿhõ¼¡£Ù¶âbiÿ¡xý¼r.¦gÚ©d@ÃsÅ(çæåêÒ¥\å\ÊÕù” :~òŒö8¢ä”T{ hp®øåUëb´j]Œ½‹\ì] ʪeÕF€2€j#@@µ   ÚPPm(¨6'{pu P³fÍ”––¦#GŽØ»8¨G¼½½Õ¬Y3eddèèÑ£ö.Nµ 2DÍ›7×îÝ»õûï¿×Y¾ ±®%÷¥¦¦êĉö.ÔÊ$1B'N,³ýøñã?~|­¥®T-[¶Ô´iÓäææ¦Ù³gkÛ¶mö.R½óÉ'ŸÈÃÃCsçÎ%@¹²çû¼yóL}£¡ÝN˜0AJNN®Ó|ëK]………iäÈ‘jݺµUPP ¤¤$>|XÛ·oׯk%mCÂû`_õm .\¸PÎÎÎúè£PÐ  \G‚Zt”Á`Pæ…$e&'Ú»8€] ëìÙ³*..¶wqjÕèÑ£"I7nœÝƒ`êÂÕÔ¾þ§M›6zã7äêêj¶ÝËËKÍ›7W›6m* 2¶&mCs5¾/ þ»šÞ»ƒ`[ 2@¹Q#W=tß n¢ßý¬}ã«Lsí5!êÝ£‹ÂÚÊÅÅYiiéÚ³ÿ°6ÄlW~~A­—yèSïÈÕÃGÛ¿ÿ?Å.ý´Öó“¤èÿø‡$)33S#GŽTAAù×úóÏ?kÕªU¦¿xàÝ~ûíÕÊÇš´¸ztéÒE/¾ø¢\]]uÇw(''ÇÞEªU………å¾¾R]mí{5à}ÕõÔSOÉÕÕUÙÙÙúüóϧ¢¢"5nÜX‘‘‘µ–¶¡¹ÚÞPÿ]mïÝŒA°­ ìïë£{ïºUMƒª¦[çöº}h Ó¶À èÝ]×µi¡O¾\¬œœKµQ\“œôT¹zø('=µVó)màÀ’¤ÜÜ\yzzª[·nÚ¼ys¹Çæçç+??ßôw^^^µó±&-®îîîeVȼ’}ñÅ P£FôñÇÛ»8µîjkß«ï ¨ŽfÍš)<<\’ôÑGiÅŠ¦}§OŸÖîÝ»k%mCtµ½/ þ»ÚÞ»ƒ`[ &@ÙÁÁAÝ:·× ~=Õ¨?¤ Ömÿ N>söœÖlØ¢ŒÌlµn¡~½º©I€¿îºmæû›–·Y—þJ9~PÉg$IY’äÛ´™².$I’ ]Ó1ZÉÇö+;-Ù¦yK’¿¿¿:uꤴ´4ýüóÏ5j” Pa€2ÛJHHУ>jïb@­jÒ¤‰éõÖ­[ë,mCÄû`_ŒA°­ Ü©} èÓ]þ¾>’¤CñÇÕ2êÚj¥Ô¯§ ]LÏÔg_ý K¹¹’¤Ó‰IÊÍËÓ°›z«u‹H]¬“§ÏÚ¤¼ƒƒzyVn^~Jøcµv,ùX)Ç*´]w]8uD­ûÝ©ëo#ï&aÚôåëúsõ·6É·´›nºIÚ°aƒV­Z¥Q£F©{÷îòððPVV–ÍóWŸÒ«¯æþ÷3V]¤h¨‚‚‚ÔªU+%''kß¾}ö.€ÅD€²¿Ÿü}}”’š¦•¿mÖ‘£'ôÂÓ«Lçáᮨf×H’~߲Ül³m§úôì*w7]]k›(7o)7o? Šê>X‘7 ÔųÇU\T¤›§üŸ|›63ÖþÆZ P–¤ßÿ]gÏžÕ‘#GÔ¼ysEGGkåÊ•6ÏÏ¢££uË-·¨eË–ruuÕ¹sç´eË-^¼XiiifÇÞrË-zâ‰'têÔ)=ôÐC•ž·S§Nzýõו’’¢{ï½×lŸ›››†®ž={*,,LnnnÊÉÉQzzºµsçN}û­íÚgäÈ‘;v¬$éÐÙ³eû\‡ôæ›oJ’ž~úiíÝ»·Ì15©+IrqqÑþS²Jøk¯½¦uëÖ•9æçŸ–³³³>úè#-Y²ÄšË4iÖ¬™>þøã2ÛüñÇ2Ûâââ4uêÔrÏSÓëµ”“““¾ûî;¹¹¹iåÊ•zë­·Ê=ÎÕÕUß}÷\\\4wî\}óÍ7’¤#FhâIJ÷¦ãÇküøñÕ.G«V­4bĵoß^¾¾¾ÊÈÈПþ©ï¿ÿ¾Ìj[Kت}{ô衞={êšk®‘«««.\¸ ;vè믿ֹsç*-CMêÊV¬½o¸ººª_¿~ŠŽŽVTT”|}}•ŸŸ¯ôôt%$$hëÖ­úå—_ʤóóóÓ 7Ü ë®»N ’‡‡‡$éÒ¥KJJJÒÊ•+Ë­©îÆ‘-…‡‡ë™gžQ§NLík¬ß„„„ ÓÝÿýêÔ©“äíí-ggg¥¥¥iß¾}úᇴÿþJóµ´*âíí­·ß~[aaa:qâ„&Ož¬ÌÌÌj§¯ŽšÖ•5ï 5û¥ï‘Ö¦-ÍÒ±oí8ª)k߆ ¦V­Z)**Jþþþòòò’ƒƒƒÎŸ?¯ØØX-^¼¸Ü϶`í8²”µ÷XKúưaÃÔ±cG5kÖLrssSnn®Îœ9£M›6iéÒ¥•NðcM]YÓ'-É×VïÝuõþkíç{A''' >\ PXX˜ ƒNž<©µk×Ê`0T™¿=þ}jæÁÔóÏ?_fûáÇ5tèP;”@C°bÅ yyyéÍ7ß$@¹žëСƒÞ}÷]¹»»kêÔ©úí·ßì]$ê• ¼-v·N'&éБc**.V£F®U'’ym˜é‡ßûÆ—Ù_XT¤ƒGŽ©s‡6¦@f[H>~@_Lì«à–Ô8¼¥|‚ÃÕüÆ›eppPQAö¬X ‹gOèÜ‘=J9yÈfù…„„(""B©©©Ú³g¤’@åæÍ›ëÆo¬wÊŽŽŽzæ™g4`À³íaaaºë®»4dÈMŸ>ÝìÁ\rr²$É××·ÊóûùùI’Ο?o¶ÝÛÛ[o½õ–ÂÃÃͶ{zzÊÓÓS!!!rpp°i€ò¶mÛLÊ:u*7À­}ûö’¤ììì2%–ÔUCV××[PP ØØXEGGë†nÁ`Pqqq™ã:wî,IRLLŒMò6;v¬FŽi¶ÍÏÏO½zõRtt´>øàSP¡d›±`omÛ¶5û;((H7ß|³úöí«)S¦èÈ‘#妫i]Ù‚µ÷Ö­[kÚ´i 6Ûîää$777)''§Ü{Ãû￯€€€rÏkÌ¿Q£Feö5äûÆÀÍþöóóSÿþýÕ§OÍš5Kk×®-7]·nÝÔ²eK³mêÓ§z÷î­·ß~[+V¬(7­5mTwwwýóŸÿTXX˜ÎŸ?¯çž{ÎæÁÉ’åuÕY3ö-Gö2nÜ8S°ji!!! Qÿþý5mÚ4]‡•ÿ¹Ýšº²¦OÚ£¤º}ÿµ÷çkÆ »»»fΜ©6mÚ˜m7ö«ÊØëßGsO>ù¤é¹Êw‹?Á IDAT”Õ ”32³uàðѧkà/Iºt)Wié’¤!¢umXˆ~]»Q'N%*é\ɹýý}åèà Â¢"›”9/'K'vmÔÉÝ›ÕûÁgåà褬 Iòðo¢#1¿ê|Ÿ6ɧ<ÑÑÑ’¤-[¶˜‚+·nݪ|P;w–«««r/[MÚž|ðAÓïûí7ýòË/ÊÌÌTÛ¶muÿý÷ËÇÇG/¿ü²&Nœhúá}JJŠ$ÉÃÃCNNN*((¨ðüÆàÓÝ{ï½ W~~¾æÍ›§mÛ¶éâÅ‹rvvV`` Z´h¡œœ›^ëÑ£G•œœ¬€€€*”wíÚ¥ÂÂB³}–Ô•=?~\·Ýv›¤’~i\…ïÿý¿ÿ§K—.™[TÎØ³ÇõnݺUÑÑÑòóóSTTT¹Á±=zô$>}Z'Nœ0m_ºt©–-[fú{ìØ±1bDµó¾ûî»M?»víÒ矮ÄÄD………顇RÛ¶mõ·¿ýMûöíS||ɤ ¶ –²¶}vïÞ­ŸþY‰‰‰’¤ë¯¿^£F’‡‡‡žzê)=òÈ#eÒXRW¶`Í}#""B¯¿þºÜÜÜTTT¤µk×*&&F‰‰‰2 òññQÛ¶m«\•tÿþýZ³fŽ;¦ôôtÈÃÃCÍš5ÓÊßÐî¥hÙ²eÚ´i“233¥Ñ£G+00PO?ý´Ž=ª£GË~>˜?¾ ”˜˜¨¬¬,999©U«Vz衇tÍ5×è±ÇSLLŒÒÓÓÍÒÙªŒ<==5sæLµjÕJIIIš2eJ•«‚[ÊÒº²DMÆþå÷$kÒJ¶û5G–²ö}ÁhãÆZ¶l™ÒÒÒäîî®víÚé¾û‡‡¦L™¢‡~¸Ü 5¬aé8²†5÷X[ôßÿ]K–,QFF†<<<Ô­[7ýå/‘ŸŸŸþùÏêoû›.\¸P+ueIŸ´$_kß»ëúý×ÚÏ9öƒ“'O6'¯X±B«W¯VVV–¢¢¢4bÄEFFV˜Ÿ½þ}J >\³gÏ–$]¼xQÝ»wW~~~¹Ç.X°@ßÿ½éïÉ“'kôèÑuRNÔo7Þx£&Nœ¨¨¨(ùøøÈÉÉIiii:tè~ÿýw}ûí·ºxñb…éï¸ã½õÖ[UæóÛo¿éᇮp›6mtï½÷*::ZÁÁÁ*,,ÔÑ£GµaÃ-Z´H§N2»aÃ…††Vû§L™bÖÿ-ÍW²îzüñGµoß^ßÿ½¦L™b¶/00P1112 šû¬©]J»|Ü—gÛ¶må®LYÞÊž ñ¾QÚÂ… µ`ÁÓßñññŠÕÇ,OOOÝÿýzùå—ˤ۶m[™m111:yò¤æÌ™#uíڵ̪¶j#©d¼½ú꫊ˆˆÐ©S§4mÚ´Z N–,¯+KX3ö­Ik˱_“qd kÞJ;tèbccMïÝ»W™™™zâ‰'¦Ö­[Ûüs‹¥ãÈ–ÞcmÕ7>¬?ÿüß$Bû÷ïWll¬Þxã ùúúê¾ûîÓ{ï½W&-êÊ’>iI¾õe V—µŸsì5#""Ô§OIÒâÅ‹õé§ŸšöÅÇÇkÍš5úé§ŸääTöŸãöü÷(aœàìÒ¥KòññQ¿~ý´jÕªrÍËË3ûþ¡&ÏGpekÕª•é¹½Q`` ­Ç\S§NÕòåËk%ƒÁ gžyFãÇ—ƒƒƒÙ¾víÚ©]»v;v¬ºwﮌŒŒopp°$iÀ€ež¿ßtÓM2 ’¤›ä‡«ËÛo¿­àà`¹¹¹é•W^±wq¨wª>¤árqv–$å\*Y-¸Q#WÓ>·ÿ¾Î.µ ›‹‹³MóïxóhµPòãòØçèÔÞ?ºO.núÔ»róö·i~’äïï¯Ö­[«  ÀìGôÒÿ‚ªŒ«¿Ö7Ýt“TPP ùóç—ÙâÄ Óÿ˜~ÄŸžž®ììlI%Á’äàà ›o¾YíÚµÓ7Þh:‡ñøgΜ1;·qFêÖ­[ËÛÛÛÆWV1c ¦§§§iµd£–-[ªQ£F’J‚6K³´®*{]ojjªöìÙ#IfýÈèú믗¤’ºmeÀ€rqqQAAÞÿý2«^ºtIK—.•$uíÚÕ´Ýc¡>Z·néu«V­ÌöYZW¶`é}#22Ò4ùÀW_}Unàkmhè÷òVLNN6ñõèÑC®®®eŽ©È©S§L[M›65ÛgË6 ÓÛo¿­ˆˆ:tH“'O®ÕàdÉöuUÙsì×Gk×®5­ØÚ¢E‹:Ë·²qd-Kï±µÙ7öìÙ£+VH*¹§Öä>Y›ue|í1ëóçœÊÆ`¿~ý$•ü ¹ôäF………®znÏ€’ÉÃn¼ñF¥¤¤è“O>‘T²¢2`©¬¬,õíÛW}ûö5Mì—””$½÷Þ{ºõÖ[«kêª!²çõ£¢¢L3nWÃ;~üx™Õ•­qÝu×I*yÀyáÂ…r9qâ„$ÉÇÇÇ$-Y?ê£ÌÌL¥¥¥I*™x¡4kêÊZ–Þ7:tè`z]Ñ* µáJ½oW8utt,·Ìúë_ÿª·ÞzKóçÏ×O?ý¤o¿ýVï¼óŽ)èñò`][µQ‹-4{öl)..NS¦LQzzºÅç³VUuÕØsì×G999¦Ïµq­–Œ#kYz­í¾aüÁ‘›››Íî9¶P×ùÚk Ö×Ï9•AcÀòÑ£GËü›¬*öü÷( FvttÔòåËõÃ?H*™$ÌËËËÎ%CCUTT¤S§NéÔ©SÚ¹s§>þøc §=ÿ}¤;î¸C’ôË/¿èäÉ“úóÏ?Õ®]; úè£2ÇtìØQcÆŒQ·nÝÔ¸qc]¼xQ;vìЧŸ~ªØØXë+¦š2335iÒ$­ZµJ;v¬^ýu›Ò¤I’J&Ð{öÙgUXXXîqå77´|ß…ýþûï Ò Aƒ4sæLIR¯^½äêêªeË–©uëÖ¦‰û¬uÏ=÷è•W^ÑÑ£ÿŸ½;‹âÈÿþf¸ïKET */Ä(ŠŒÁ#1«nÔ˜'&j’]£¿dc4‰ÆlÜÍ¡®É7n6·W4&Ñ(Š'x "jð>E¹Ï™a~°ÓË8\3Ý0 ï×óð<ÃtWWuuWÕ0ͧê†Þ Íu’’’pèÐ!lÞ¼YØ_©TâÊ•+j®Stt´Á1“’’ P(°lÙ2¬Y³Æ`»‡‡† †tïÞ:t€ƒƒd2ÊÊÊpëÖ-lÙ²ëÖ­3Hk®1TL™‰ˆˆˆˆˆˆˆˆˆ6u€rQq)ÀÖÆºÞ}tÛ4ÕÕ(+“>ˆ(;ÙðÁϵ£;%Ï,--ѧOÀœ9s0gΜz÷ iʺ  ÝÌË©½ŸîîAâ!CPXXˆ_ý³fÍBhh(vïÞ gggTVV"77×àx øã?ðä“O"22AAAÂOFF>þøc¤¥¥‰=M111˜8q"\\\ŒÄÄD(•Jae:Ýj×µ‰©«Ú¯[ËêÙs¾b•””àÔ©S4hÂÃÃ…åÐÐPØÛÛC£ÑàÀ’åüï|«««ë}X_›•••ðZжÐé‚мgÅÔ•Lé7Œ½Ÿ¥bÎvÔœj_÷û·Å‹ÃÝÝ•••X³f âããqÿþ}( ´oßK—.…‡‡‡Á1¥ºF‰‰‰èÞ½;ìíí±lÙ2|öÙg8r䈨cŠQ_]µåqÁ\mÿQ!¦IALÛ\÷†¥eÝ2™«®Ì™/Ðòm°-~ÎÑõ±jµÚè´æþûˆˆˆˆˆˆˆèQÖ©S'tïÞyyyÂê¶{÷îmÖegggüòË/Ð{ßÉÉ NNNèÔ©äryÁUr¹Ë—/Ç„ ôÞ÷ó󃟟&Mš„Y³fIx+¦Ì@Í*»½zõÒ{ÏÛÛ‘‘‘ˆˆˆÀ»ï¾‹ß~ûMئR©pìØ1Œ5 C‡…L&«ó»“Áƒ “ÞÆÆÆlûí·ñꫯê½çîîŽÑ£GcÔ¨QXºt)~ú駦U‚rss)S¦àé§Ÿ–,@9 @¨ßo¾ùÆ`•ãæb®|uøUVV"66“&MÂc=†””a5åèèh¼õÖ[Âä€bé¾WkÊñt“Lfgg×¹]7¹ŽžþyŒ;S§N?dêý¼hÑ¢:W„÷õõÅÔ©S1nÜ8¼øâ‹8þ|£çfŒ¶Úo˜JL=ÛÚÚâßÿþ7†jð¾­­-:vìˆaÆ¡¨¨¨Î`_1úôéƒÏ?ÿ;vÔ{ßÊÊ ¶¶¶èСJKKõ”¥°}ûvabÍ9::"((¶¶¶ÛÌ9†šZf"""""""""¢‡ÑC |'ï>ÀÚZ gGìãåYó@èþýhšaµÜ–ôøãÃÆÆ¦Iûöïß_ò‡¦¸wïüýýœ­X7ë1Ü¿_x­› ÖÛÛ[˜ñxÇŽˆ‹‹Ã+¯¼‚°°0œ;w2™ õþ“¿Z­Fll,bccáåå…1cÆ`âĉðõõÅòåË1{ölÉgOKKCRR1bÄ$&&¢gÏž°²²Byyy9ÄÔ•J¥‚V«…L&ƒ¤çÒTÆ®F-æ|¥°{÷n 4]ºtA—.]pãÆ á!vBBB“òÓÝsM þÓo\\œÑÿ€ U[£9V¯˜º’бý†nE^{{{8::¢¨¨¨EÊiîvÔ\jÝÕ.³¿¿?|}}«V­Â¡C‡„mjµׯ_¯wV~©®Ñ… °zõj|øá‡èÔ©-Z >|ؤã‰U_]µ†qÁX­¡í‹e̸`.bÚ‘TŒíc›ûÞ¨½JqAAðÚ\u%U¾¦~6ké6(å眖jƒMŤmˆˆˆˆˆˆU£F8p@øîäÀxë­·0xð`X[[£¢¢BÒ<ç΋€€TUUaåÊ•8|ø°0]»víгgO”””Ô™öí·ß«vî܉͛7£¨¨ÁÁÁ˜7o\]]ñÝwß!22999­¢ÌðÅ_@­V###ÅÅŰ²²B¯^½°`ÁøûûãÃ?DLLŒÞwqĨQ£àááÀÀÀ:ƒ6Ÿzê)ÀÍ›7 &êž3gŽÌyâÄ ¬X±èÒ¥ ÞyçcÉ’%8sæL½¡Í!>>S¦LA‡о}{ܾ}[ô1 æ»°ýû÷‹>^kÏW$¬R©°wï^Lš4 £FBjj*ÂÃÑ””„ŒŒ ¨Õj8;;K’§®=9::ÂÊʪÁ`lÝ÷ËõµÁ“'ObãÆÈÌÌ„V«Å AƒðÆoÀÁÁŸ~ú)ÆgFŠûyïÞ½øùçŸqïÞ=ØÙÙ!$$sçÎ…ƒƒV¬XQ£FIúýa[ë7Ö¯_M›6 ¿¿ýöÛx饗Œ>oSêyÙ²eBpòÎ;±eËäææB©T¢S§NXµjär¹ÑeiL÷îݱ~ýzØÙÙA£Ñ ** @FFd2ÜÜÜзo_ƒÕª¥töìYlß¾×®]C~~>T*ѵkWœ;wÎ`ÿÖ0†[f"""""""""¢‡ÑC |#ý–|Ó½«N$êÏ>jaanþ©73ÍQDIõïß@̓ò•+WÖ¹O¯^½ðÉ'Ÿ 00vvv(--­s¿ÊÊJ€µuý«O×ǘ´—/_ÆO<.]ºÀÓÓwîÜ1Ø'44PQQ¡·bÞÍ›7Ôü¾îÁÑÁƒq÷î]\¹r=zô@ß¾}õömLnn.Ö­[‡Ã‡㫯¾‚½½=FŽÙ,ÁÜ;wîD`` † ‚o¾ùƒPóQW‡µ‰©+ &ØÁÝÝ:u’ü\š¢ö9ÙÙÙ¡¼¼áËÅž¯X‰‰‰ÈÉÉ··7F­[·"$$@͵k Ý97ef\ÝùC©TÖyÔ§9Ú‚±Œ½¾bˆ©«æÐ”~ãÒ¥Kj¢FŒßÿ½EÊ&e;j©q¡)tÿäò`™]\\„ש©©FSÊk”7ß|}ô‚‚‚°`Áh4=zÔäcšª¾ºÌ?.«µµ}S3.˜‹˜vÔšÒÇ6÷½1`À5+’KÕçˆ!U¾¦~6ké6(å眖jƒººêÚµ+ÜÝÝ‘——gtÚÖò÷Ñ£dôèÑ 7ádrr²ð¼(,,LÒ6 _¿~€¨¨(|ÿý÷zÛrrrê ëСfΜ زe ÞyçaÛ•+WpâÄ DGGÃÙÙo¼ñÞ}÷]³—Y§® =ccc‘ššŠ}ûöA©TbذaˆŠŠ¶:tHxî?bă@C¹\.L4£·ÍËË óæÍìß¿ýë_¡ÑhÔ|Oþâ‹/ “%Μ9ûÛßšP Ò¨ýÝN‡ê P¾víZïŸú~~~èÓ§¤¨m­ßÐh4B½ê~7…±õ$ÍnܸK–,Ñ;Þ¥K—°bÅŠf P^¶l™ð¬à¥—^Âüa°Ï‘#G$Ï·¶C‡Õ¹ò÷… êÜ¿5Œ¡Æ–™ˆˆˆˆˆˆˆˆˆèadaî4§’Ò2!ðxHh?(• ½í¡ýûÀήæŸÓÏ_JnñòIM÷åûÕ«W…&þ\½zZ­r¹½{÷®÷XºUé<==õV_l cÒ}úµºë3Ï<¹\µZ/¾øÂ`ûõë×…‰8ÇßàwoÆ2µÌ¹qã†øéëë«·-//§N! °¶Aƒ ß÷<8Ñð„  T*¡R©ðÁ–••aýúõ€aÆIs2M¤ûÎî™´î8µ¿Gl æÊ·v€²J¥ÂгgO!Y·š³n•c)îÙ‚‚aUV]²\.Ç”)SЯ_?a5öÚÛÓÓÓ›|üèèháu¯^½ô¶5çý¼}ûvaõx©Ÿiµµ~£95TÏãÇP39e]}{s &·üòË/ë NnÚâJDDDDDDDDDô0j3ߢZ+•€L÷úÆVVV°¶Vª5Õ¨úïƒ%˜Ã ðëÜÎŽxyÚD8r%¥åèÐáCjVC»š’†Œ¬ì–9‘fâììŒÎ;¨Fa(//Gzz::wîŒàà`?~¼Îýt³ÇÊd2,X°7nDuu5Úµkoooa¦a±iïܹƒ­[·bòäÉ9r$lll°{÷n”––"00S§N…¥¥%Š‹‹±qãF½|Ôj5nÞ¼‰€€888`Û¶m¶¸¸8¼öÚkÂ¥””ƒrþóŸÿ„J¥B\\®]»†üü|XZZÂÓÓ‘‘‘BÚääæ ^W©Tرcf̘)S¦@¡P ¸¸¸Þ‡=bê ¨yøWWW|òÉ'ؼy3²³³¡P(àéé ‹æ¯ 33pvvÆË/¿ ¹\.FtêÔ >>>z³ÚŠ=_)ìÙ³Ó¦Mƒ½½½0Sqíû¬1µWd]²d 6n܈ªª*tèÐÞÞÞX³f°o^^6mÚ„3f`̘1èÕ«¢££‘™™‰üü|( xyy¡gÏžX½zµÞÃf±mA Æ^_1ÄÔ•X¦öZ­_|ñ–/_kkk,_¾qqq8yò$rrr Ñh`gg‡N:ÁÙÙk×®•¤¼R¶£–jëÚµ+zöì‰ââb888 ÿþxæ™g`ee…ÂÂBƒÙ¨SSS‘›› ///¼úê«P*•8wŠ`ee''§zq›ãUVVbÉ’%X±büüüðÁ`Þ¼yõ®€ †±u˜\0–9Û¾Ti` IDATŒÌEL;ËÔ>Vª{cêÔ©pqqABBJKK€iÓ¦ÁÆÆjµ6lhu%U¾ÆŽÝæjƒR~Îi©6xçÎüöÛoøóŸÿŒÐÐPüë_ÿÂöíÛ‘•• xxxÔÛÇšóï#""""""¢GÙðáÃ!“ÉpêÔ)”––êm;rä&Mš$ì£Õj%ËwíÚµ2d{ì18p›6mÂÖ­[qóæÍÓ¨ù®¬¾ïœ<ˆ)S¦ÀÆÆAAA’­æhj™u0}út 6 :t€««+ÊÊÊžž.|wQ×÷[;vìÀ€„Ž;"33SØöôÓO¨ùÎãòåËzéžxâ ÀÙ³gõ&í«íúõëWWW¸ºº AoÍM¤Ø˜~ýúÕ¹o]ÏÊd2Ñå2…”ùs¾ºÀh]òÞ½{ñÌ3Ï`üøñHOO¾OÖmwpp@nn®è2fff"00:tÀ™3gзo_¡,Æ Ã?ÿùO5+µÆ(âÞ½{pss3˜ø·9ïç²²2ܹsÞÞÞpuumry›¢­õÍ©¡zîÙ³'€šI†u@·„¯·nÝÚbùŠÕÇP"""""""""¢‡Q› P~gÞËPXY¼?yÂháuòõXÿ˽í·nç zßaŒý$:´óÂŒ)ô¶ßÉ»­;cš§Ð-¨OŸ>ÉdP«ÕHKKkpߤ¤$tîÜY˜µ.7nÜ@BBBCCÑ«W/½™y  D36íÚµkáîîŽáÇ#,, aaazÛKJJ°dÉäååä•’’‚€€hµZÄÄüï:#>>Æ ƒV«ÂéXXX {÷îP*• ©÷\Nœ8¸¸¸z·‹…I“&ÁÆÆ@Í —ª‚ìkSW'OžÄÞ½{1fÌâÃ?”öd¡Õj±víZÌŸ?NNN˜7ožÞö¢¢"ƒV1ç+…¢¢"ÄÄÄ`ìØ±jîßÚ÷Yc²²²pèÐ!„‡‡#((ÿøÇ?ôŽý`̦M› P(0eÊ´oß³gÏ®ó¸[·nÅ­[·ôÞ3µ-HÅ”ë+†˜º2•Ø~#99ï¿ÿ>.\777„‡‡#<<Ü`¿ÒÒRÉ”éÚQKŽ :u•¨™}É’%ÿP¡ÕjñÙgŸaÙ²e°··Çܹs<§5Ç5*--ÅâÅ‹ñÕW_ÁÉÉ K–,Á¼yóôVa•‚±u˜\0…9Ú¾”ŒÌAl;2•Ø>VŠ{ÃÒÒãÆÃ¸qãôÞ×h4X¹r¥Áгæª+©ò5eì6W”êsNK¶Áõë×ÃÉÉ èÞ½;.\Øä´æøûˆˆˆˆˆˆˆèQ§û.øðáÃÛŽ;FwwwIÈväȼöÚkøè£àéé‰×_¯¿þ:Μ9ƒ5kÖ`ß¾}uN§ ZlhBÌÚÛ<==Í^fÀºuëàíí­÷¾µµµ^ ^]Á®{öìÁÒ¥Kaee…ÈÈH|ýõ×…B1cƨ;°NwîO<ñRSS=?ggç Pvtt^Ö»_qqq“'ÔGª™›JÊ|9_ÿ ^>räÊÊÊ`kk+¬ž UUU{{{Ñ倌Œ !@øß ½ÅÅÅ‚a}||  Ô|èææ&üNsßÏååå¥RiDi×ÖúæV_=ë‚­³²²Z´<º•¾ ›í/šC[C‰ˆˆˆˆˆˆˆˆˆFm&@YŒ“§/ ÷Î= †¯O{(¬¬PPX„ W®áhÂiƒU—Û¢>}únÞ¼)<\«Orr2"""àããww÷z0|üñǘ>}:† TVVâæÍ›HHHhtvpcÒj4|úé§8vì"##Ñ­[7(•Jäææâĉøí·ßPPPPg>×®]CDDN:e0Cptt4† †¬¬,”••émÓjµX¼x1ÂÂÂWWW899A«Õ"??iiiˆ‹‹Ã¡C‡$ýA%%%ˆŽŽÆ¤I“ÔÌèÜ1uŸþ9.^¼ˆˆˆtîÜvvv¨ªªBQQ²³³‘’’‚Ó§OKz޵íÙ³EEE?~<üýýagg‡òòr¤¥¥!>>^Ò{C*[·nEdd$d2¢¢¢m_Z¹r%²²²///TVV"==Ç78_­V‹5kÖàðáÃ;v,z÷î www( ””” 33çÏŸ¯óLm R2öúŠ!¦®Ää)¶ß¸páfΜ‰Q£FaÀ€ð÷÷‡ƒƒT*JJJžžŽ³gÏB.—K¶ò¤”í¨¥Æ…ï¿ÿ}ûöEçÎáîîkkkTVVâöíÛHHHÀ¶mÛPRRRg>—.]ÂìÙ³1aÂôéÓîîîppp@yy9ŠŠŠpÿþ}dff"11±ÎôÍqòòò°jÕ*,]º]ºtÁŒ3ðÝwß5)mcÄÔ`þqÁXæhûR3f\0±íÈbûX)îØØXXZZ¢wïÞpttDQQ.\¸€Í›7×;9êJÊ|»ÍÕ¥üœÓRmP£ÑàóÏ?G\\ÆŽ‹   899¡ººZèc¯^½Zç52ÇßGDDDDDDD2KKK„††Þ{ï=¼÷Þ{õî;lØ0ÉWÚŒ¾C˜:u*‚ƒƒ…ŸëׯcþüùHJJÒK£ ÄkêwRïhj™ÿýïÃÛÛX±böíÛ‡»wïB©TÂ××ß~û-ÚµkWgž………8|ø0FމñãÇ †#GŽ„££#4 ¢¢¢ ÒéêJ£Ñ4é{}…Balu˜Ìßß_x-É1u>>>°³³3X¼¹˜+_]·nðÊÊJ<ýôÓ°±±Ñ«S]³TÊׯ_ÇèÑ£…ä1cÆàþýûøæ›o°hÑ"Œ1?ÿü3ÜÝÝQ^^ntÀ©î^}0è¶¹ïçæ|FÑ–úæV_=WTT¨—Z’±cJmµÓXXXHV¦¦j‹c(ÑæÍ(øÙW¢ÒßÌÌÂÍÌ–e´%}þùçøüóÏ›´ïž={°gÏžF÷«¬¬Ä?ü€~øÁèò˜’6>>ñññFå³{÷nìÞ½»Îm.\ÀèÑ£ëܦÕjqþüyœ?Þ¨üšCNN€š•­\™¯>¦ÔPsÞ±±±ˆ5:­TL)»©ç+…Û·o ³'›B¥RaÆ ذaC“Óܸq_~ù¥Qù˜Ú¤f̵š8qbƒÛ_~ùåFaJ]™Jª~£¢¢;vìÀŽ;ŒJ7mÚ4QùJÑŽZj\hè~nŠ;wîˆ 6å5v?'$$4K;[WbÇ…£Gš|^bÒšÚöŶ#)3.HÑOšJl;2–T}¬˜q!##¿üò‹ÑéÄÔ•˜{RªkdÊøÐ’ã/ í眖nƒgÏžÅÙ³g›\¾ÚZòï#""""""¢GYÿþýaggפ}‡Н¾ªÿ¹µ©AL*• Û¶mömÛàããƒI“&aæÌ™ÀÆÜÜ\aÿ;wî ((HX½µ.íÛ·^ß½{פrIYæ   -Z¤÷¼J¥Â•+Wœp~þùgŒ9ݺuC·nÝœœ,|‡c0að¿ºÚ½{7æÏŸ/Å©KFŸ[·nIrÌ3gΨ |òÉ'±k×.IŽÛZóÕ­ ¬ª5)}ff¦Á~ºå¦¶õƤ¤¤¨ ÈîÓ§|||°aÃìÚµ .Ę1c„ISSSQ]]-I¾­ù~nжÒoktz]·.˜ÜœÚâJDDDDDDDDDÔÖ1@™¨uîÜÞÞÞpwwGhh(>ûì3¸¸¸àÌ™38~ü¸¹‹GDDDDDDDDDDDDôHѪ]¸p¦ÎŸsçΡººr¹¬÷X999€víÚ¡]»væmiiYï¶””¨™ô¸¶íÛ·C£Ñ@.—×¹Šêc=&™EEE «ÇJÁÔ2çåå ¯{õêeRÞÕÕÕØ¼y3`âĉB ljj*êLóûï¿C­VÃÕÕ|ðA‹Î6D©TbÅŠ°··Gee%¾ûî;ÉŽ­Ñhðý÷ßüq¼ÿþûõ®úja!Ý¿‹˜+_Ýd(ëVX–*@955jµ:tÀøñã‘‘‘³gϨis2™ sæÌ$''K’'Ð:ïç¦hkýƃtÁ÷^^^ððð0©M%û®\¹úÓŸàááGGGôíÛ‹/†•••äù^¸pAÂýÿïÿ!$$ĨôçÏŸŒ3FÔÆj‹c(Ñèþok‰Hr³fÍ2x˜“‘‘O?ýÔL%"""""""""""""z4¹¹¹¡[·nj´êSVV†ëׯ£k×® CLLLû9s@MæŠ+°zõjTWWÃ××>>>Xµj•ÞþëÖ­CUUvíÚ… . //VVVhß¾=¦N*¬ª þÒ¹}û6¾ÿþ{Ì™3'N„­­-~ùå¡oß¾øË_þKKKàË/¿4¹~êbj™“’’••…:`ñâ۱±ABBîß¿¥R WWWØØØ4šÿæÍ›1wî\899aÆŒ€5kÖÔ»NNV¯^ùóçcòäÉ8p 6n܈ÔÔTܽ{J¥>>>èß¿?>øàa¥]©XXXÀÇÇ•••pvvF¿~ý0sæLøûûÞ{ï=!°½>¨®®®w{YY™^݆ 0zôh 03fÌ@ß¾}±qãF\½z2™ :tÀ€0pà@DDD@«ÕJr®RåkÌùêŽ Ô]צÜcM¡R©œœŒ=zÀÙÙk×®¶íÚµ ‹/ÚÂÅ‹%É0ÿýlª¶Öo<è?þP³ÂðW_}…/¿ü•••èÒ¥ |||°bÅŠ&«!˜?>~øáØÙÙµØÿ‘hµZ¼ÿþûØ´ilmm±iÓ&ìÞ½Dff&4 ìííѵkW¸ººâ_ÿú—^ú-[¶`ôèÑðôôÄúõëñŸÿüP*•hß¾}³Ò·Å1”ˆˆˆˆˆˆˆˆˆèaÄe¢TQQ’’X[[#77ñññØ´iÊËËÍ]4"jÀ¾}ûÌ]z=ÚÜE """""""""z¤…††B&“A­V#))©Á}Ïž=‹®]»bРAõœŒØØXŒ1Ô[m9??_/@Y.—£wïÞ°±±ÁСCë=æ°{÷nƒ÷W®\ oooL˜0cÆŒÁ˜1cô¶bÖ¬YÈÍÍmð¼Œ!¦ÌÕÕÕxë­·ðÃ?ÀÑÑÿûßM*CAA¶nÝŠiÓ¦îß¿ßÿ½Á4«W¯†R©Äœ9sàëë‹E‹Õ¹ß?ü€7n˜T®úØÙÙ!..Îàý²²2¼ÿþûˆŠŠjô§OŸnpû¼yó-ü^]]Y³fá‹/¾@xx8zöì‰O>ù¤Î´=zôÀ¥K—-CSH•oSÏW.—C¡Ph<@YꔚÀã=z ººZï,((Àþýû ­V‹Ë—/K–'`ÞûÙmµß¨íæÍ›Ø±cÆàà`½àæüü|É”àäÉ“xöÙgñ·¿ý C‡îñââbÄÄÄ`„ Ëå’M, sþüyÌœ9«V­‚——ƇqãÆìW\\l |ðàAüú믘úÈÜE "0”ˆèá5qâDsˆˆˆˆˆˆˆˆÌDlœœœŒÊÊÊ÷=þ<¦L™???xyyÕ´4þ|Ì;h×®***píÚ5ÄÄÄ@&“ AeÕÕÕxå•W0zôhÃÃÃnnn¨®®F^^’’’°k×.ìܹ³ÎÕd5 Þ|óMìÛ·Ï?ÿ>r¹Ü`uîwß}§N”)SЭ[7ØÛÛ£ªª ùùùHOOÇåË—qôèQÉÊÚÇP"""""""""¢‡•ì¿?z–.]*»|ù²ìîÝ»²ââb™ŸŸŸìîÝ» …B^ZZjQ]]mekkk¥R©¬-,,ì´Z­ƒV«u9räHTbb¢p¬<ó 0wˆˆˆˆˆˆˆˆˆˆˆˆˆˆêµyófáuH¿ZÏs žQkàïïýû÷æÌ™ƒØØX3—ˆˆˆˆˆˆˆˆˆˆˆZ½Úókþ÷YðСC'Èd²|™LV\]]]  ÂÊʪª¬¬Leaa¡²³³«®ªªÒxxxT§¥¥i´Ú=zh—.]j0c§EËœ kúôéjV>wKCDDDDDDDDDDTÃÒÜ """""""""""""""""z”­^½7oÞÄéÓ§‘››‹²²2´oßÏ<ó ž{î9Àž={——gæ’Õ`€2Ñ#ÈÝÝ;wFAA®_¿nîâ=²är9†¥RYï>—/_Æ’%KZ°TDDDDDDDDDDD c€òCªk×®X´hlllð¯ý §N2w‘¨•ñññÁ”)Sн{wxxx@­V#77)))HLLıcÇÌ]D³c;"¢‡Ù·ß~ ;;;üøã PnÀ³Ï>‹W_}ÕàýôôtÌž=Û %""""""""""""¢‡••þïÿþƒ ‚¯¯/ÜÜÜ P(PPP€+W®`ïÞ½øý÷ß¡R©Ì]T"""""""""""”R3fÌ@ûöí³fÍb`%é ħŸ~j0󮃃ÈeˆoG2™ ÞÞÞÈÉÉV«mŽ"QWQQ¯¿þ_ýµ¹‹BDDDDDDDDDDÔdm2@ÙÚZ‰—§MD{oOlÜ+É©-’¶-Ñh4u¾&€7ß|J¥eeeX³f Ξ=‹êêj¸¹¹ÁÏÏÏÜÅk5Ä´£~ýúáƒ>€R©Ä3Ï<ƒòòr©‹GDD- ::111Âï/¾ø"ÆoÆ™_› PvuvÂÔ?E;/÷MÛÖ¬[·îîî°¶¶Æ7ß|cîâP+Ò¹sgøúú¾þúkìÛ·OØ–••… .˜«h­Ž˜vdkkk°B5µ=*• *•Jø½ªªÊŒ¥!"""""""""""""""""""""""jÚL€²……žO†ÂÚÈ ?1iÛª´´4üå/1w1¨òôô^Ÿû,^}ÕðÜÒÓÓ1{öìFËnݺÁßß®®®ppp€……îÞ½‹3gÎà·ß~CNNN½ée2ž|òIŒ9ppp@UU ™™‰ääd8p·oßn´,M1eÊÌœ9ðâ‹/ÖY¶^½zaùò倷Þz —.]2ØgðàÁˆŒŒD×®]¡T*qçΜ8q¿ýö ö—âúº¸¸ ÿþxüñÇÑ¥KxyyÁÎÎPQQÜÜ\ì߿۷ooz…4 sçÎøæ›o Þ¯ëø?þø#~ùåƒ÷_xáôíÛîîîptt„•• påÊüþûïHJJÒÛßÒÒ[¶l öïß•+WÖY6¥R‰-[¶@¡PÔ›·±×HÇ”zÓŽŒ©ç³gÏbáÂ…u§[·nxöÙgѳgO8;;£¸¸—/_ÆÖ­[qåÊ•Ë`ŠˆˆôîÝ;w†‡‡lllPYY‰Û·o#>>QQQ(--­7½±÷Fmbû Sëª¥Û ¾žÅ–ÙÔv$æ‰)³)÷Uxx8žzê)øùùÁÁÁ9998~ü8:„^xýúõƒF£ÁÑ£GñÍ7ß ¼¼¼Þó6…)c·c PÓ—>ùä“û¬Ñù;v »víBAAlmmÑ£GL›6 vvvX°`^yåƒ@Óyóæ l‡ÂþýûqïÞ=( ´k× .„\.7º, ¹qãòòòàîîÞh€òùóç¡Ñhô¶½ôÒKBÀÞ¡C‡°gÏ””” ((/¼ðœœœð÷¿ÿ¯¾ú*òòò$-»NRR8€›7o¢¨¨jµvvvèܹ3®^½*Y>ééé7n€šUTu+÷Nš4 zûªÕê:±aèÕjdgg£´´–––èÖ­^~ùetìØýë_‘€¢¢"!ÍÉ“'1xð`¸¸¸Àß߿Π·²²²‘‘¡·MªkdL=‹iGÆÔsuuµAúÉ“' lçÏŸÇš5k ¼üòË Âk¯½†+W® 55µIe2ÆÑ£G±mÛ6ÃÎÎO<ñž{î9¸¸¸à£>Âk¯½†û÷ï¤3åÞÄõRÕUKµÁÚL­gSË,¦IÕ·›RϦÞW°víZlß¾½{÷Ƈ~رc6lØ€'žxo¿ý6BCCÑ©S'¤§§7Zþ¦0uì«K—.øä“O`ccƒêêj˜>}:ìììðæ›oâõ×_—¼Ü¦^_sÕ³bú+1çÛ늈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÚŽ6 ü¨éÑ£ààÁƒØ²e‹Þ¶¼¼¼zƒŒª««QUU%üþ`@nS]»v gΜ~¿téJJJðÆoÀÇÇÝ»w×+C@@€ü/¿üRïx)))X°`äÊðÇ ""ýúõƒ\.×;g¹\ŽÀÀ@ÀéÓ§õÒyzzâ¹çžìß¿+W®¶¥¦¦âüùóøÏþLŸ>Ÿþ¹äejV®kÅÄúVP5•V«îÚÈ*•JïžiÈ©S§ ÞKHH@ff&¾ûî;( „„„ààÁƒzi´Z-d2h ,—Ë*«6)¯‘1õ,¦‰©gwww¼ð €øøx,[¶Lb.((À¢E‹ðã?ÂÍÍ Ï=÷>ûì³&—«©RRRpùòeá÷¤¤$œ9sŸ~ú)œ1mÚ4ƒö ˜voˆé7¤¬«–jƒµ™ZÏ:Æ”YL;’²o7¥žM¹¯tîܹƒòòrœ8q™™™èر#Î;‡¢¢"ÄÆÆâOúºté‚ÀÀ@É”M»Åš7olllPYY‰wß}—.]2ØçÁ1ðA‰‰‰ˆ‹‹~¿víÊÊÊ0wî\øûûÃÏÏiii’–ÛÔëk®z6•ØþJÌù¶µº"""""""""""""""""""""""¢¶ÅÂÜ C………€îÝ»ÃÑÑÑÌ¥©qðàAaÕäÇ{Lo[xx8 ²²6lhÑréªìíí…Õ’uºví kkk5ÁWµ=õÔS°°°€Z­®³Ìˆ‰‰ >––Œå¯Ï­[·pçÎ@»víô¶åççãâÅ‹€Aƒ¤íÓ§œœœÔ¬ÎZÛ£v†…BµZÕ«W¬°\QQ¨¨(V´m /^ľ}ûÔ\c깡{CL¿ÑZëJ 1õÜ1íÈœ}{Cº¯ê¢[×ÙÙYxïÞ½{;;;ÉÊeޱÛÏÏO˜ˆã§Ÿ~ª38ÙT‡^wëÖM²ã6¦±ëÛ?#5Dl%æ|ÛZ]QÛÒ¶#úRÛ¶mCHH:uê„üÑÑш‰‰AVV–ÙÊT^^Ž{÷îÁÝÝ](ÕéÚµ+àÆ(((hÑr;w÷î݃››BCCqîÜ9a›.`9;;ÙÙÙzé‚‚‚7oÞ¡tòäIDDD@©TÂÏϯYWTm ììì0nÜ8ôïßžžžprrBEEnß¾->)•Jƒt‡B¯^½àïïoooäääÛ† HOO7X]ùQ»F?þ8€šÕtïß¿_ç>'''899 ÁgÍíøñãxúé§accSg=›roˆé7Zs]‰ÑX=›BL;2gߘÞçC&“IQTæ»{õê%¼ÖšK¥¤¤pvv†«««¤ÇL¿¾­ñ3RCÄöWbη­Õµ- Pn…NŸ>?üo¼ñ\]]ñüóÏãùçŸÇ•+W°mÛ6;vÌ`¾–PQQP(zï;88@½ÁoÍI«Õ"..'NİaÃðÍ7ßu  ¦>¤ ¶j¨Ìµ·¹¹¹IYì6Ç××ü1ÜÝÝõÞW*•zëuû9rùË_`ii‰aÆá—_~XYY!,, @ÝuÚ5Ò•¿gÏžÂJº qpph± ÛÚAåÖ³©÷†˜~£5ו Õ³©Ä´#söíbús1ÇØ­»^%%%ÈÏÏ—ôØPVVgggÑàs}[ëg¤úˆí¯Äœo[«+"""""""""""""""""""""""j[ Ü ´Z­ðÚÔà©„„üñÇxòÉ'‰   á'##ü1ÒÒÒ¤*²(UUU ³äƒ‰'ÂÅÅÁÁÁHLL„R©V-LLL4H£».µ¯UCjï'ÅõmKd2/^ wwwTVVbÍš5ˆÇýû÷¡P(о}{,]ºu¦/))Á©S§0hÐ „‡‡ Ê¡¡¡°··‡F£ÁêÌ0íµEºó­®®†F£it++«æ.’ÀÒ²î¡B̽!¦ßhÍu%F}õ,†˜vd®¾]lŸcN¦ŒÝbÆc¯¯±tÁ«RŽuR\ß¶ôIŠþJÌù¶¥º"""""""""""""""""""""""¢¶…ÊÍ@¥RA«ÕB&“ÁÎÎÎäã¨ÕjÄÆÆ"66^^^3f &Nœ___,_¾³gÏÆ½{÷êM¯ Xjî ÚÜÜ\tëÖ ~~~ÍšO}ÒÒÒ””„ÀÀ@Œ1‰‰‰èÙ³'¬¬¬P^^Ž3gΤ¹wïüýýáååUïq===…×÷ïß^Ku}Û øúúV­Z…C‡ ÛÔj5®_¿Ž²²²±{÷n 4]ºtA—.]pãÆ Œ9@MðTíúÕs¤dj;2vUJÝùÆÅÅá“O>1*ms«½ÊiAAðZ̽!¦ßhÍu%F}õ,†˜vd®¾]Š>§¶¤¤$”——ãîÝ»’—µ.ÆŽÝbÆݪÉöööpttDQQ‘¤çÒ¤º¾b?#µ©ú+1çÛVꊈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÚó,yûÐztêÔI’ãåææbݺuxã7 V«aoo/xÖ§²²`kk+Iê£ nß¾= Ô¬yÕgç΀!C†ÀÅŃœ8qB¨‡Ú._¾ èÒ¥‹^p^m¡¡¡€ŠŠ ƒÕ¥¾¾­™‹‹‹ð:55Õ¤c$&&"''0zôhxxx $$Àÿ®ÝƒÄ^#©˜ÚŽjßwM :Ôopp0”J¥Qy5·4^=‹¹7Äô­¹®Ä¨¯žÅÓŽÌÕ·KÑçÔöÝwßá½÷ÞéS§DËXM»MS.]º f…#Fˆ/p úú¦}FC׿[[[7ºosôWbη¥ëŠˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ^ Pn&W¯^„……5)€¥6KËú¶NOOGqq1ÀÉÉ©Áãܹsàææ¦$µƒ «n.X°£F‚‹‹ ìííˆW_}µÁs’‘#GPPPKKKDFF wGŽ©·Ìr¹3fÌ0ØÞ©S'<õÔS¾jµZo»˜ëÛÖèVè€nݺ™t ­V‹Ý»wFމI“&Á™™™8wî\iÄ^#©˜ÚŽté _¿~î µZ '''¼þúëËåÆV¤ºÚ©———øø`À¿˜{CL¿ÑêJ cëY 1íÈ\}»}Ž9ˆ»MS®]»&ù¾øâ‹xüñÇ)²Yˆ½¾R}FCPîéé ÷Û_‰9ßÖPWDDDDDDDDDDDDDDDDDDDDDDDôðjÞ¨Q Y+•€L÷Z!¼oeekëšéª5Õ¨R©$Mkªýû÷#,, ®®®øä“O°yófdggC¡PÀÓÓõdžÿóŸÿ„J¥B\\®]»†üü|XZZÂÓÓ‘‘‘Bdrrrƒe¨½²â’%K°qãFTUU¡C‡ðööÆš5k$9×ÊÊJ|üñÇX¶llllðÖ[oIr\c¨T*ìØ±3fÌÀ”)S P(P\\Œ?þø£Îýïܹƒ­[·bòäÉ9r$lll°{÷n”––"00S§N…¥¥%Š‹‹±qãFƒôb®o[“ššŠÜÜ\xyyáÕW_…R©Ä¹sçPTT+++8995) nÏž=˜6mìíí1aÂÀ¶mÛêÝ_ì5’Š©í(33pvvÆË/¿ ¹\Ž7n¨ õññÁ÷ß/쟗—‡M›6aÆŒ3f zõê…èèhdff"?? …^^^èÙ³'V¯^ F#ù¹N:...HHH@ii)0mÚ4ØØØ@­VcÆ zû‹¹7Äô­¡®Ä0¶žÅÓŽÌÕ·KÕç´41c·©cŠV«Å_|åË—ÃÚÚË—/G\\Nž<‰œœh4ØÙÙ¡S§NpvvÆÚµk›³ šDìõ•ê3’W®\P3.,X°7nDuu5Úµkooo¬[·NØWl%æ|[C]ÑëÍ(¿3ïe(¬¬ ÞŸüðÃ&¥³°°@÷îÝ¡T*Rï~'Nœ@\\\ƒÇÊÊÊ¡C‡Ž   üãÿ¶I  .\ÀܹsñÒK/!$$Vÿ­ïÒÒR?~LJ\.‡V«•,ÏEEEaÒ¤I°±±8pª‚Î×®] www >aaa ÓÛ^RR‚%K– //Ï ­©×·-Òjµøì³Ï°lÙ2ØÛÛcîܹ&§¨¨111;v, °°111 ¦s¤bj;ÒjµX»v-æÏŸ'''Ì›7Oo{QQ‘^€2lÚ´ …S¦LAûöí1{öì:½uëVܺuK䙲´´Ä¸qã0nÜ8½÷5 V®\)X눽7Äôæ®+1Œ­g±Ä´#sôíRõ9-IìØ-fLINNÆûï¿… ÂÍÍ ááá7د´´´U(‹¹¾R~FãÆHHH@hh(zõê…^½z Û õ”Óû+1çÛZꊈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ^m&@¹-úüóÏqñâEDDD sçΰ³³CUUŠŠŠ””œ>}Z/V«ÅâÅ‹†ÀÀ@¸ººÂÉÉ Z­ùùùHKKC\\:Ô¤€°•+W"++ áááðòòBee%ÒÓÓqüøqÈd2IƒÊÒÓÓ±téRXYYÁÕÕÕÕÕBÀÛˆ#UUU’å÷ ’’DGGcÒ¤I€½{÷6¸¿F£Á§Ÿ~ŠcÇŽ!22ݺuƒR©Dnn.Nœ8ß~û õ¦7åú¶U—.]ÂìÙ³1aÂôéÓîîîppp@yy9ŠŠŠpÿþ}dff"11±Áãlݺ‘‘‘ÉdˆŠŠjô~{¤bj;Ú³gŠŠŠ0~üxøûûÃÎÎåååHKKC||¼AZ­V‹5kÖàðáÃ;v,z÷î www( ””” 33çÏŸGaaa³œgll,,--Ñ»wo8::¢¨¨.\ÀæÍ›‘––Vg±÷†©ý†¹ëJ SêY ±íÈ}»T}NK‘bì3¦\¸p3gÎĨQ£0`ÀøûûÃÁÁ*• %%%HOOÇÙ³g!—Ë[ÅŠâ¦^_©?#‰ññÇcúôé2d<<ýôSIó!"陫ߠ¦ã5"""""""""""""""""""""""""¢ú0@™D³´´ÄO?ý„¾}û¢]»vprr‚••Š‹‹‘ššŠcÇŽ!&&jµZÒ|+**PRRkkkäææ">>›6mByy¹¤ù‘ôÌÕoPÓñýöî;<Šªíãøw“^šH H¤ˆ"(‚A ú(øØ±ûˆ½w@_»‚ E@ºô.H‘ -”BÚûǸ›„lÊîÌfù}®+×NfæÌ93sæÌ&»÷Ü""""""""""""""R(‹iYYY|óÍ7|óÍ7Zï3ÏŽˆðPúõîÎç“~öðˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆT}U"@¹uR ztí@õȶlßM|ãe–;z<Í©¬,þÚº³È²-Ûwsã +h֤͚4Ä¿Z5Ngg{¤ý"""""""""""""""•AD4mǎömÞn÷EFB“&p$vì,{}«ÊJõÉòÓ±ªü¼uŽ}Ú1cÉ6EDDDDDDDDDDDDD¤êy;Ô¯oLß3Êõe¨[þþòò¬oŸˆˆœ=Z&Á¸÷ 0°èüˆphÞ ’’”iç­c¥sT1tœEDDDDDDDD*·* œ~"ƒ¿¶Zÿ΄fM8tøÇÓÒ-ß¾ˆˆˆˆˆˆˆˆˆˆˆˆˆˆT ¹¹Î§Ë£ãðêËFðL—n‘amÛœéu ¼ð\éë<ø0Ìšmm½¾¾põUpE?hÐÀ˜·oÌ™Ÿ}^1û^……Áø÷ ys¸ï˜;¯äu}| {7¸´7´j QQu’wÃüßá˯áĉ’Ë[Ù7Úµ… »@›6P+RSaÈв˹²¿V8ï<6Ôd 60s6|2N*¹œÍ}.…+ûC³xã>rV®‚O?‡­[K.Û8®¹Ú¶…úõ 'öî…… áó/áøqÏ´Ù›¬h³«}Ã̘cöZðæ9zòq£?ž†~€¼|èÚFÝmd‘}n,Ür;äç[[wUdÏüúŸ; 4´üå¦Ï€±0åX·ÒÒìÅ—÷3‚ÐêÕ…ÑwÃcO8/o¶oô¿yªUƒäd˜6Ö®…½ûŒ –%qwÍ87ú'Èð¯¿àýñF–ç /„[F@\<ýÜsoñ²·ßjûåæÁÄOá‡ì¥IçÁÙ±±FæÎÕkàÀ‚rµcàºAFpò¢Åðó/F \õ(cÿ»wƒ˜ZðÐðßû¬m³·˜m³»}Ãì˜ãîµàísT§NÁô‚…ž©Ã*UñXYÑfwê53¶»;^YÁc»]UºDDDDDDDDDÎVg]€rꑌ¸þ*B‚ƒØð0“þÍÛMqIX˜ñz䤧{¾¾Úµ *0ß}¯`Ù·“áÐa#;dëÖС=,]æù6UfýúÂm·”‹—@§Žå+ûÛLã§pÀå¶mÆ6üüàâųhf¦otî? ¹¹ðÂK0ù;ÈË+»œ™ý5ãÎ;Œ@áá¶;Œ€=€› 3î ]/42BÿùgA9¸újcúÓOáw –-\[·Â÷“!(.ímÚýcŸ3Ží™s‹—/ì]:åÏ €u·ÍÞd¦Íîö +Æw¯oŸ£€B™ÊO²~ûVªŠÇÊŠ6»S¯»c»™ñÊ,oívUéZ9[UÊ5«G1↫ áPêQ>ùêNŸÎöv³DDDDDDDDDDDDDD*€#Ð¥GwhÖ ¢¢ ;Ž7² /Xßÿè¼ìEÝl{ ))ðûøô3#PìL}.…Ëú@|S€}{aÞï0}:Ü~\päåÂÌÙðÚë‘aMÙ!ƒÌƒgÚ¾®TúñiÒ¾ýºøü…ó‹Ï[¾FÞYúö\öOÃãÇÝ+ߨ!<ý¤ØW½º±+ᓉÆù=ÓŒ )€¯ì÷¼ùpèDGÃ%= Þ~›Q_­hˆˆÿjp䨑÷˯`])ÁkfÊúùo/ëcd¯´Ù`×.øuº1]wËÖ¯otíÙï¼gùsJ¯Ë®´ìÓk×AlÆùp<ìn߆±ÿ3¶ûø“0mzùËšÙ_»F ]ë“Õ«CûóéO?+2´ûòkv£1v]viÑ@ÃèšnL/YZ|ÛÁŠmÛ“Ïôë´’÷cú #@Ù××Ȥ¼k·5m.¬QC׎Ua®ŽífÛìnß°bÌqçZðÖ9råžòö»ðñ'ÖÔkçÎXgÕ±rµOš9VfÚlö¹;¶›¯Àý{¨Ù±Ýz­ºÎM„Á×Ç%*ÊÈX½v-|ö¹q¼EDDDDDDDDÄgM€rõÈGpòáÔ£üßç“I?‘QvA‘³Ì¹çÂóÏB½ºEçW«f1Ö©'OPöõ5£.ëSt~ÃÆOÿ+àžÿ 6âã ~‹3~n¾©èz¯„êQpïýÖ”­Ê¢¢ŒWgßåѯoÑßkÔ0Ä.é O!󌌟fÚ\˜«ÇÊαÝl›ÝíVŒ9î\ Þ>Gf¹S¯»cÇÊÝ÷î²êüZ­´±ÝŠñÊÝ{¨Ù±ÝÌ}ߌ»ÿÃo*:¯Fuèq‘ñ_22±‹ˆˆˆˆˆˆˆˆˆygE€r@€?C]AxXGŽçÃÏ¿Sp²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆM›ÂûïBH0äæÁ´i0ÿwØ»l> -[:Ï„x× ‚“§Ï0ŠÒÓ UK#‹^ÒJ IDATT¼ñ:\7ØÈøw¦w߇¯¾6ˆÞx͘÷í$7ÁrùßSн4Ž3²›-ûõ70ù»‚mÜ}\?¸|Çiû¸ ³1Ýã"xn¬1}QO# ®°’IͨþO0RÖið÷‡Ó§]+Ÿ ß}sæç¨Y3¸ãvˆ‰1‚Ì·m‡­…²mžú'Ð2(Èø9s§¯Ñ5×9~‚üµwŸ‘µÒÏÏ\}74l?ddEu–íÔݲ?Zt÷ÓøeªQ¾Y3r]Ñàö3™)›šjd ·Bh¨q]dôµS§àõ7K^ßݾqE?ã5õ¼ö 4‹7‚Ož„õà›oañçe­Ø_Wûd\œñšžû÷Ó£î2ýÞ|Ûx¶íÆüsÎ1úLNŽñ{F†Ø¢Œ¸ÙȰžž^°íí~• 3~sm?z\d¼îÜ Î4Óf3Ç ÜÛͶÙݾaŘãεà­säÊ=ÅY}îÖ îuf•»}Ò̱2Óf«Î‘]yÇv+Æ+wï¡fÇvwê5{œoVœ¼b%¼ûžQl¬Qo«–ðÀýƹ޼Åý}ÃY |eŸ‹©U³:™|òÕ¤Ÿ8éí&‰ˆˆˆˆˆˆˆˆˆˆˆˆˆTJŽ1‚…N‚ÿŒ‚5kН³diñyuêÀ ×ÓS~†§þW°lóX± ¾þ"Âá¶[¬ygJI1q~_»vÁ+˖ñcFÀÔÐë`ž¤¤âÊî”ÍË+°–—[þ㔟_P¶p€Lv¶ëÁÂ1^GÝeü¤§Çyöãø; æ+ìÿ>‚ ü¾y ,[ß|áápû­pÿƒËÿÚ\0}QwøuZñm¦§¯Îë\¸¨ø¼ù¿çkò$ð‡Ngøt§lÓ¦F–F€‰ŸÁ›oÝß©¿ÂâF¦Î3™)k•°0˜?§è¼mÛàñ'Kªr§oÔ¨a\3`d[-Ìß.ìbüLøÆw{—JåjŸ´¥ÚÛÚ¶1Óz†ÜÇ¿ûùAd$>\Pþõ7àÈ:uàÓOàwñãüvFFW€W_/b,óÎ+È`ûÎ{Å—›m³«Ç ÜÛ­j³«¬sܹ¼uެº§¸Z¯™±Îì±r·Oš9VfÚlÕ9rgl7;^™¹ÿšáN½fŽs­hã8sæÂƒ<$æÈ¸ó.øñ;ˆŽ6Þ³>þ¤Û»&"""""""""ÿðñv<­~ÝÚ´L4å9ù癤=æå‰ˆˆˆˆˆˆˆˆˆˆˆˆˆTNñM ²(NøÐy°PI.ë¾>F0ɸ Å—ïÜi ô¹Ôü)ͱ‚‡ì0¡ H(,Ìse«ŠÝ»ì»vÙAÃÂŒìÑ=`¢5jTzùl'Y„Iÿd”îÖµhÐßÊUœlL?p?\q¹àãïo^ܺv5–Ÿtñ™á»“ ‚ªÎ©o]ÙÞ½Œ×¬ÓðÁ‡“›kB9c¦¬Uòógÿ~—\ξѬP†Ôo'È۠goèÒ nºÖý“Áô¶[Œ \OpµO¯öL¢¡¡Ëì×ù±BY9ƒƒŠn{å*¸{4Oƒ±ðò‹ðû\xç-£ü+¯YØË«~}xõ%°ÙŒÀ¸¹óНc¶Ív®+3c»Umv•cŽ;ׂ·Î‘U\­×ÌXgæX™é“fx«?æÎØnõxegæþk†§êíÓÇzÎΆ^*N¶ËÌ„¯¿5¦;u´®^‘³Y•É 6û´¿c~µjÕ /7ÓÙÙEÊuíØ€ä})ìÞû·cÝ3åçç“•U±©¤Úµ-˜þùg×ʶji¼nÛVr¿ aÀ•FpT³xذ±ìíÚlN敳MfÊVv÷Ü[0íã-š|BýzðΛpÕµFfJWüñ‡ñêëkÙSóòàÑÇá½wŒ,ØO=Qò6ÒÒÏ …k¯†ÎŒ,QQFÖë={!2ÂX'ÀùGún•mÑÜxݺÕX×fÊZåÄ hßÑ8Þ p¥‘í´~=¸ùVçÙ$Ýé‘‘Ó/¼Xt{ëþ4²NNpÍUý¤"”Ô'í×·=xrÉRXº ÎM„ñŠ®S’öçCxœÌ0²Ì¶k[ІßdÈ:Ëz¦Øs`ü8£_nÝ O<å|=+Ú\š’Ž•™±ÝÓm.‰cŽ;ׂ·Î‘§•T¯™±Î̱2Ó'ÍðV.ÌݱÝÌxeæþkFE×Û¦µñúçú’3¹ïØa¼FE?GZW¿ˆˆˆˆˆˆˆˆÈÙ¨Ê(?4zþÕª›mÿÞŽéÍÛvòé7SŠ,oxN]bëÕáñûF–¸ý'3xþ,j­ˆˆˆˆˆˆˆˆˆˆˆˆˆHÕm¼¦¥Aê×ÊÖ¬i¼¦”œ ’R|}1//ÏöÞ°–¯02+Ö©c<}õµkÛ:x¨`ºpj0¶í`> :^µb 'Û8çË–ÁUÑÑÁ?…Å5‚wߘZEçBvÎÃÜ-[ãŸö<è|_Kc¦¬ÕާY`×®ƒßÀÛoBB\5°ìó[Þ¾Q8³¸¿ñฌ ˜5Û¨ÓVQJê“ö`Êðpãõôi#º°ˆðBëg]vûmpÓ0c\ºõvø;ÅbíqÜy4l¯¼·Üëחܾ±0aœÑ÷wí‚;ï.9ÐÓl›ËRÒ±23¶{ºÍ¥13朩¼×‚·Î‘§•T¯™±Î̱2Ó'Íðf>“+c»™ñÊÌý× oÔýÏ{Ë6­aõв×W€²ˆˆˆˆˆˆˆˆˆY>Þn€§y» """"""""""""""Uƒ=³ ;EÏÈJX–ò®'®™=þÚlLwhïzùœœ‚é¼¼âË€^‚þ¡cg¸°;\{|<jÔ0ÖY»®h› ^zÁRÊÊ‚W^ƒË.‡ŒòCn0¶ëŒ™²ö.–]þý·¢¬'-Z\ù´ã®•-­oHŽˆp^þï0P3ÚµzÍ*©Oú';fI툈,ØÆ±cóëÔÃéÇž,Ø·¼<#û†lðþþpÛ-%o¿^½BÁÉ»áÖ‘šZòúfÚ\%^¿&ÆvO·¹,îŒ9e)íZðÚ9ò°’ê53Ö™:V&ú¤ÞîÏ%)ml73^™¹‡šáµzÿù&dnžq_+ë§š¿õm9ÛT™ ÊO¿ôž[åî-‹[""""""""""""""òïd¬ ƒÈH×s‚fñP·nÉëÔ©S¼®’üù'dfÀþR22[]6ïŸH)W“ùUdYy$'CófÁ{®¨S0]Ö9*ìš«l޹y0w^ÑeÍšA\œ1ý¿±0mzÁ²ìl#PðÄIˆ¡83e}²Ž“…e0SÖÓ’Šf ,¯’úÆáÃÓuëû¦jÿ|äp cE(©Oڳ憅AíÚί÷&×={ж»ãàçgì÷š5ÅËedÀ7“àÑ1Ð2Éy»BBàÍ׌àä½{á¶2‚“Ͷ¹ƒ²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ”ϯ6ô½Ìµ²kׯM› D.¬[Wã536o)}{¯¿ ÿ ¹Ö3eO2^CBÝ+æbYO¨]ÛxMOw½l× ×òœ#»&aØPczÖ,HI)º¼Fõ‚éÍ›]k™²ö>™µ\Ìúk¦¬§5ˆ5^w½lI}cÓ_Ó]:;/o¼îÚåz½f”Ô'W­*x8€}l)Ì×:w2¦—¯(ºÌÞ¯22J®×¾,8ØùòÇ1ðŽ3Æ›ÂAÞ%1Óæò(éX™Û=Ýfw”5æ”GIׂ·Î‘§•T¯™±Î̱2Ó'ͨŒýÙ®¤±ÝÌxeæj†·êµ÷çí!  âê9›)@YDDDDDDDDDDDDDDذ± péΑpÞyå/;uäæÁ=#o+¾¼q\AҴ韅µ<ì™kE»–}¸pÆ .°¶M®:¯œ›hLÛuÊ+) \iLÿ:­|ç¨ã0þ} „Ô#ðêëÅ×I=R0˜èZ›Ì”-Ü'Ç™z¤ €pØP#£qaƒ¯ƒêÿÉÎÞ °wŸñZ¿>4oî¼î^—¯»“‹/;7z÷2¦Ÿ|ÚÈ´ZfÚ\–ÒŽ•™±Ý“mvGyÆœ²”v-xëyRiõšëÌ+3}ÒŒÊÖŸíJÛÍŒWfî¡fx«Þ_¦ý;* z òÜ»EDDDDDDDDþÍü¼Ý©òóáÙçàƒñF€âãaæLX°öí3‚˜BBŒì•QQðîûe÷ï‡Ï>‡›†ÁåýŒ,~ßÿé' eÜ:üüàxLøÀ{ûXš5kŒW› ^y >ø²²Œ¬†uëÁ;ï:/·k79b5¾ÛˆÙº lV4€7ß²®/<GŠ•ðw äduwì× 8q&Wò6Z@›Ö–ááFÆÈÁ׿¿±íñNÎQP±n:FùKzB«–Ʋ#GàÞûg‘ݲÅÈpZ§Ü¯X¸b=fÔ AÎÛi¦ìþý0ñ3¸ù&#SæGÂW_Cr2øøB혒ƒ—Ì”µ 5ú’}Ú.0ÂÂŒéœ#£©Í_adÿþc-:d¬S³¦ü>èZc½#Gà»ï‹×i¦o|ð!¼ý¦‘Yö­7Œ>»g/4m O?Qpý~ó­uû[˜;}ò½÷áüó6ÆM0ŽM—Îpë­Æ:¿/(¾¶û}±/áðú«ðÆ›°l¹Ñ¶±póð‚ìª?M)^ï°×uçɾgÊ˃“'­i³™cefl·¢Íîö wÇ0w-xãYÅÕzÍŽuî+³}Ò +ί«ÌŒífÆ+3÷P;w®_+êuǃðáÿÁÈÛáÊþЮ-Lúví‚éào´©mxþE£Ÿ‰ˆˆˆˆˆˆˆˆˆ9 P‡õàîÑðì3 —ö6~ÎtâDñ€¡w߇Zµà²>pqã§°´4¸ç¿pðçÚoFò#cbŸK ¸w ?^r€r^žðôØ£ =RtùñãÖ(ûøATÁÁMg:~x¸hÃ39;?`”}ó ¿»ÿcö–ŸodÔ}ée#0È™¼/žqZDDDDDDDDD\§e)bå*¸ò*#r· !>""àôi#pfûX¾ÜȪX8û\n.<öÌ™ W „Ä#k^Ê~øýw#Kã‘R‚f+ƒ§Ÿ1•ûô6²ìeeû;ož‘A0?ßy¹ï42^w-Ä73² ffÀ–­Æñ(­¬+òóáÑÇà»ÄD¨_Ï:qÒȸx1LþÞÈ”éÌoA‡öÐ8bb 0²N™rçÍ7‚›Î ޲;yÒX––nÔõÇ0{Ž‘Aº,kÖÀ5ƒ`ð 8¿ÈalóøqHM…»`ñRkËææÂ3ÏÂo3áš«€Ò¨(cþñã°w¯¬¶x‰µeݵoŸq~;u„Í ŸþþÆqß¶Ýûñ'#`ïLfûÀ¸ñÆyt­¨n¬¿t™ôµw¯uûjg¦OLšl›aC ™;› ?-9cóÒepõ ¸~tì`ë€ãÜnÞ S§,pvÝFDšÛgwÛlöX¹;¶›i³îŽ9V\ Þ:Gî2S¯Ù±ÎLß0Ó'ͨèþlflsã•™{¨Þª7?ßx ÌôpÍUuÇ{×.#³zIÛרþù)â©§ž²mذÁvèÐ![zzº-..ÎvèÐ!ß“'OúäååU ®–íúøø„äçç‡åççGýþûï?­\¹Ò±­víÚUàîx_“&M¼Ý‘}ýõ׎évm }ž[ì“c©’ ?ÔðŸÏ‚»víÚßf³µÙléyyy'SÕªU;‘‘‘íãã“’wúôéÜèèè¼;v䇅…åGGGç'&&æ?õÔSÅ“èS1{""""""""""""""""""""""""""""""ÿ P‘róóvDDDÄsjÖ¬IÆ 9vìÛ¶móvsÊ¥*¶YDäl ñ¹r§Q£F=z”äädo7§L6›Áƒãëë˲eËØ²e‹·›DZaƤ§§³sçNo7GDDDDDDDDDDDDDDDDDDDD¤ÊQ€²ˆˆxU||úÈí`²Š>GV´¹" 0€‘#G›¿{÷nn»í6•kY1ÖÕ¯_ŸAƒѼys¢££ÉÉÉáÀlݺ••+W²páB´¼âTµñÙ*•í½Ê—_~IµjÕ7n\•PnÞ¼9Æ `Ñ¢E^nMO>ùÄÑŸ+*@Y÷}ù7ññvÎ1M[Q;þ)%Qß©|ªdåÀÀF\?ºµkñÅä_ظy{‰ëúØl´hÖ˜– ñÄÖ¯KHH999N=Æ_[w°xùœÊÊòx›/½÷ B"XùÝ{¬þéC×wÑEqÉ%—ФIBCCÉÌÌdÿþýlܸ‘ùóç³~ýz·álжm[ž|òI¸òÊ+ÉÌÌôv“ʤ6Ke“››ëtZ*£ÒýòË/Ìœ9Óñû°aøâŠ+<^VªÝË*?³cݽ÷ÞK@@|üñǬY³†¼¼hN§N€²³'Ÿ }R÷}÷œ }CDDDDDDDDDDDDDDDDDDD¤*ªrÊÕ##ru?êÄÔ,×úC®îG‹ø¢¾þþÔ«S‹zujѦe>ý–´ô“žh®CfÚQB"ÈL;êÑz|}}yôÑGéܹs‘ù¡¡¡4iÒ„&MšÐ¯_?̱cÇ<Ú–³App0Þn†KÔf©l&NœHÍš5 düøñÞnŽ8¡sTºììl²³³¿Ÿ>}ºBÊJÕ¢{Yågf¬kذ!±±±Œ7Ž3f8–íÛ·uëÖYÚV+¨O–ŸîƒîkÔ¨uëÖ`ñâÅ¥®{6ôIÝ÷Ýs6ô ‘ª¨Ê(ûøøÐ¾M—tïH  _L]·a35kD±zíF’÷¥y*‹ˆ°Z'%Ð21ž¨Èpz÷褟f”½14l{©»7“~øoN9@d†œâ›o¾qünÕµà*«ú¤™ñÙÌùu…Ù±Îì}Ðìû ???ú÷ïO=¨_¿>6›={ö0gΜr=pª2Üj×®M\œñ0°Å‹;]ÇÛ§ÄÆÆrÿý÷ÓºukGŸ´q;vì(µ¬7¸³¿Uñþëí¿»EDDDD¤jš1caaa¼üòË PþkÙ²%o¾ù&ÁÁÁ<üðÃÌ;×ô6/^Œ¿¿?cÇŽU° ›†Îc=VlþÖ­[¹ôÒK½Ð¢òyôÑG +õu•UUºtœ‹Ò˜c¨ªã†ˆˆˆˆˆˆˆˆˆˆU%”—¯^Ǿ”lÙ¶‹¼ü|Ê.T êÁ¼§´4›ÓáÝ1qd7jÇ·¦Fl<µciÒé2l>>äåäðçŒ/8¾?™ƒÛþ$uÏËêÈÈÈ 88ب\Qn½õVGÀ©]pp0Mš4¡I“&\qÅ<ñÄlÙR|Í”õõõåþûï§GEæ×¯_Ÿ«¯¾šÞ½{óÄO”ø%„wÞy‡š5k:]Jhh(¥î{E çÕW_%66¶È|{[ëÖ­‹eÁ‘…µoßžøøø"ójÖ¬I×®]¹ð yýõ×™1c†Ó²Uí8›é“f˜=¿7ß|3ƒ *2/**Š.]ºÐ¹sgÞ}÷]G€€Uõz«Oš¹ö_€ºuëR·n].ºè"ÆŒÃæÍ›‹­SÑû{øða"##Ë\7** €C‡9]žPä÷˜˜.»ì2ºuëÆƒ>è‘¿›7oΘ1c¨]»v‘ù~~~Cfff‰ÊÞh³™±Îܹ¬ìW®Z¾|¹#@ªuëÖNÏ}RR`¼§93ÈÊì}¿ªñÖþšëÌÞCݽ—ù1§"™½¼ÍÝñÙÌùu•7Ç:0÷~#88˜çž{Ž-Z™o¿ŽJS™î ;w 33“5kÖ”¹¾»ÌÞ»{öìYä÷¨¨(.ºè"ºvíÊ+¯¼Âœ9s<Ònw¹³¿ºÿŠˆˆˆˆHUåããCýúõÙ»w/yyyÞnŽT÷Üsã—V ŠTEº*†Ž³xŠÞ爈ˆˆˆˆˆˆˆÈ¿E•PN?‘Á_[wZ²­À€jתIÇó[‘ؼ ÙÙ9L›µÀ’mv:ó$Ék²gÝb.þ>¾~œ ý0*;;Û1ßS˜3g“'O.²ìðáÃ%úYÑæåË—›·dÉöìÙÃ|€¿¿?íÚµ+5ÃXU9Îvfú³;Ü=¿5kÖdèС,Z´ˆ±cÇ:¾¤ìØ1ÆŒÃG}D5¸êª«x饗,©×LÙ¼¼¼"çÑ•s­ºö·lÙÂêÕ«¿¯_¿ž'N0jÔ(êׯOóæÍ‹µß̱rÇÁƒ°ÙlT¯^Ýñûˆ#HLLä£>rŒï5jÔàÀN·µråJæÏŸïø}Ë–-dddp÷ÝwÓ¸qcâââØ±c‡c¹™s0zôh‚‚‚ÈÊÊâ‘GqzZµjU©ÛpµÍV°b¬«(î^ Vö+w¬X±‚>}úжm[|}}‹ô-___GPÞ™ýÃÊû~E1s/óæþZ1Ö¹z5{/swÌ13Ö™}¯âîµ`†Uï¯\ŸÍž_w˜ëÌÞí\}¿Ñ¨Q#ºví À¤I“øðÃ˶oßÎìÙ³™2e ~~Åÿ”¯L÷…¨¨(ÇX²xñâ׫ §|ùå—|ñÅŽß·oßÎêÕ«?~<¡¡¡ :”ÿýïåjKEpw«Úý·2ü=("""""ìí:uêtïÞ™3gz´Î‚‚‚ýôÓJœ ðúë¯S»vm‚‚‚;v¬·›S&›ÍƘ1c>|8>>>ŽùþþþDFF’ÀàÁƒ9ÿüó«t`çéÓ§‹üÍ®¿ß=ÏׂŸŸo¿ý6½zõ*2¿E‹´hт޽{3lØ0Nœ8Q!í©UmÌ©JÎæqCïsDDDDDDDDDäßħìUþ%ò!÷Œ¬:µ¢kЭS;üý=Re«Ën¤E㋼«ü€½ë—phçFüƒB¸ôÞ7 ¯nyiiiŒ5Š_~ù…¼¼<:vìÈ«¯¾Ê;ï¼C=Š|èYQþüóOf̘ÀÅ_ìôËôøâ‹ñññ!''‡Ï>û¬XÙäädÇ—#zôèáR½•ÕñãÇhÞ¼9ááá^naïÞ½Ž †:uêx¹5žg¦?—ÅÝóÛ£GüýýÉÉÉáwÞ)–AìÔ©SüôÓO´k×βzÍ–u—'¯ý9sæ8²6mÚ´ØòŠÞß´´4ÇÓ’kÖ¬ €—]v‰‰‰ŽÌ„P0ô÷ß—{ûóæÍsL7kÖÌ‚âââA.Ÿþ¹¥ÉðT›ËRÇ:w¯O÷«²ØƒCCCÙíâãã (–µãl»ï{s=5Ö•v5s/óä˜ãIî^ •Uiã³Ù÷*îðöXWšÒÞotïÞ0¾ˆU8hÖ.77·XÆe»Êt_èØ±#6›œœ§µ¡¼÷ng£>ìx°Ò\@@@€gi¡²öW÷_qW­ZµèÔ©©©©L˜002gÊ¿S­Zµxë­·ðõõeÆ ¼øâ‹ÞnR1›6mâŠ+®à’K.)õÁh•ÅÓO?͈#ðññaíÚµÜ}÷Ý\tÑEôìÙ“ûî»uëÖ1{öì*œ,Þáká©§ž¢W¯^œ:uŠgŸ}–N:ѲeKn¿ýv:ÄyçÇc=V!m©(UmÌ©hgM€ò©¬,žxþmƾ6žñ¿eÙªuäåç“”ψâçëky>¾~äçå±wýRv­š À’/lC§3NP-(Äò:233yûí·¹é¦›øþûï9qâM›6塇â½÷Þ#66Ö#õ–ÆþAMPPqqq–”MHH`×®]Ž/bŸiÙ²e¸\oeôÃ?ŸŸOƒ øè£¸é¦›¨W¯^…ÔÂu×]Ç«¯¾ÊgŸ}Æ”)SøöÛoyã7ÁKUá‹ûV0ÓŸKãîù=÷ÜsãÃÑ#GŽ8]'99€ˆˆ""",©×lYwyòÚÏÌÌ$55 Øqïìïþýûˆ‰‰Œý àüóÏw¬g_îJpÕ‰'8vìÕ«[÷ÐŒ–-[:¦­Î¢á©6ÛU¥±Î̵àÉ~U–?þøÃquìØ±È2{ÀTJJ )))E–m÷}oî¯'Ǻ’î¡fîežs<ÉÝk¡²*m|6û^Å]ÞëJSÚû {ÀòÎ;ÉÌÌti»•é¾Ð¹sgÀèç'Ožti?\å©{·= ¼¯¯o¥º§¸»¿ºÿŠˆˆˆˆˆ»ú÷ﯯ/¿þú+ßÿ=`< (,,ÌË-«ùùùñÎ;ïÍñãǹóÎ;4kR=¸þúëøþûï¹æškøõ×_INNfçÎüøã 0€ÇÜË-)[«V­|¸ìXÄþ…w(Ⱥe¶¬=ð¡¤/IŸ¹ÌÕz+£U«VñôÓO3jÔ(ªW¯ÎàÁƒ›}¯â.oŽue)éýFTT‡ry›•å¾ÌyçàñŒ"ž¼wþ{922ÒýFZÈÌþêþ+"""""îºòÊ+˜6m{öìaÆ $&&Ò«W/¾ûî»bë°qãFFÍ/¿üRlM›6áïïÏØ±cùøãóããã™6mZ±õÿüóÏbó/^ÌСC¶ùâ‹/¦gÏžÄÅÅÄÁƒY°`ï¿ÿ>ûöí+u{õêÅ!CHJJ"((ˆ}ûö1{öl>øàǃŸœ‰ŽŽ¦[·n´k׎æÍ›S¯^=°Ùlddd°wï^&OžÌĉKÜFÆ yë­·ˆå‹/¾àå—_.µ­V{þùçiÛ¶-¹¹¹Œ=š½{÷–º¾+ǪZµj¬^½šàà`¾ûî;|ðA§Û bÕªUðòË/3nÜ8†î4+ëÖ­[¹ôÒK˵~~~ 6ŒþýûÓ¨Q#l6;vìà§Ÿ~òØÿýG ÀîÝ»yä‘GÈÍÍuºÞ‰'J܆«}räÈ‘<ðÀtïÞ={ö[§C‡|ùå— 4ˆ•+WkwçΉ‰‰!** RSSYµjü1kÖ¬)ߨDì¡Ûºuk¹ËDFF2iÒ$âââØ¶m×\s iiiÅÖ;[®…;ï¼€éÓ§óûï¿[>gÎRSS©Q£:uâ‡~(W{tœ‹³Ùlôë׫®ºŠsÏ=—ððp²²²HMMeÇŽ¬]»–ü‘Ý»w;-¯q£lƒ ¢U«V´hÑ‚Zµj¯¯/û÷ïgáÂ…L˜0Áéq(¬U«VÜtÓM´oßž5jpüøqV­ZŇ~ÈêÕ«‹­oö}N‹-Ø´i“‹{*"""""""""âyg]€ra[¶ï"y_ ±õêÐ4®åÊ)›‹ÿÓyË‚Ÿ-¯§4§OŸæÛo¿eÆ <ÿüóDDD0hÐ Þ}÷]Ç:ùùùŽiO|ëçç~W+©¬½…Û^šò®WÙ-Y²„+Vн{wúöíKBB‚ã'99™çŸž;vXVŸÍfãñǧfÍšdeeññdzhÑ"Ž9‚¿¿?uëÖå©§ž"::Ú²:ͪÌý¹,îœ_û>æåå•øÅ†ÂªU«fI½V”u‡·¯ýŠÞ_ûŸö'_xá…?~œo¿ý–[o½•Ž;ò믿IVVpiûöÀ+¯WÏ‘«<Õæª6Ö™¹<ݯÊ2sæLHTTmÚ´aåÊ•8²¬žù¥0·¿ž¾/x¿u¬+ë};÷2O9žäεP™•4>[ñ^ÅÞëÜaïÇ999.—­,÷…:àççG~~¾G”=}ï.ÜW+ÃøbÅþêþ+"""""®jРÍ›7çðáìX±0ÓJ P® ìb²«_¿>ƒ¦_¿~ 2Ä@]˜¯¯//¿ü2ýû÷/2?..ޏ¸8®¹æn½õV§G?þø£ãÁ^g '!!àààRÛ=fÌ#XlÖ¬YÐuß}÷1pà@ÆŽË‚ J\×c•ÍÂ… éÕ«]»vÅf³9ý[³sçÎŽ‡ßÍš5ËŠ] 44”O>ù„Ö­[™Ÿ˜˜è8æV‹wüÍ=a²³³]*ïnŸœ7ož#аS§N|óÍ7Ŷݾ}{ÀŒvÖǺwïNË–-‹Ì«]»6}ûö¥OŸ><òÈ#Lš4É¥ýñ–ÈÈH®½öZ†Š]ºt)×ÿ9BCCù¿ÿû?âââHIIaøðáÅ‚fϦk!44”nݺðõ×_;]'??Ÿ={öP£F 6lXîöè8Ì»ï¾K×®]‹ÍæœsΡ[·n¤¥¥yÈhÜpŘ1c +6?66–!C†pùå—3lØ0Ö®]ë´ü<ÀÈ‘#‹Ì«Y³&½{÷¦W¯^<õÔS|þùç–µ711‘)S¦°jÕ*>ùäf̘Q®Ï[DDDDDDDDDD*ÂY  –vêAHp·›âq6l`öìÙ\vÙeÅ>ÈÎÎ&??›ÍFHHˆåuÎðtìØ1Kʦ¦¦Ò¸qcÇ—è±g8räˆKõ–‡'²—GNN³fÍbÖ¬YÄÄÄp饗2pà@bccyùå—¹í¶ÛJ|Š»«mnܸ1±±±¼þúëÌ;·H;¶mÛFFF†û;S®¶¹2÷çòpõüÚ¯…ùóçó /TX½V•…‚à…ò.T†kßìþºÂþäëÚµkÓ¼ysbbb˜2e óçÏç–[n¡K—.üñÇØl6’““=@ãÊ9²g0 %<<ÜéSÎ+›Ê0Ö¹Ê̵àí~µcÇ6mÚD‹-èÙ³'+W®$))‰jÕª‘™™éôK~fö×Ó÷…òpõ^öoëÊz_çνÌÊ1Ç•±Î î\ V©È÷±V½Wq••c]Eõò\ûfÊVÄ}¡sçÎüõ×_.e5¯l§ôõÄë*+ö·ªÞ½õw·ˆˆˆˆˆfÏžíxo>{ölî»ï>:wîL`` §N²¬¾­[·’à¨û7Þ mÛ¶dffY·´ œeË–ñÅ_°gÏòóóéÔ©£F",,Œ_|‘Ë/¿¼X™xÀÐõóÏ?óõ×_“––F›6m=z4Õ«Wçƒ> oß¾ìß¿¿Äº×¬YÃ?þÈ–-[8zô(ÙÙÙ„‡‡Ï”þ°ì:uêù½nݺ ¯¾úŠÔÔTBBBh×®wß}7aaa¼òÊ+ôêÕ«ØÿÃo¿ývGpòÒ¥Kyå•WHNN¦Q£F<ôÐC´iÓ†'žx‚Õ«WéwfÞç´hÑ‚ÜÜ\Ú¶mKÛ¶mÙ¿?Ÿ}ö_ýu¥;¦"""""""""röññv¼­Fõ(22­ûð¼2;qâ€Ó'tÛL4h`y½ö`sss]ζWRÙ 6ШQ£"_ˆ.¬cÇŽœ:uÊÒŒ¦vYYYŽio<8p€‰'2jÔ(rrr å’K.)q}WÛå˜Þ¾}»¹ÆºÉã\Yû³«Ês~í×B›6mOx®ˆz­,k?Çee€ÊqífæX•Ç®]»#`Èþ!ùœ9s8tè7n$11Ññ·}]Opå­_¿0‚¸zöìé±6YÉʱÎ~¬ì_xñTY3×BeèW?ÿü3`d錊Šr´-]º´È¸ogöÚ÷ä}¡<\½—ý[Ǻ²Þ×¹s/³rÌqe¬³Š«×‚U*ò}¬'Þ«”‡•c]Eõ û±Š/ÐïJYoÞüýýi×®‹-r©ý•íï” .¸ðìëÊ}ߪý­Š÷ßÊðw·ˆˆˆˆÈÙªwïÞ€‘YÑnóæÍìß¿Ÿ   ºtébi}ùùùdee‘••ENNŽcþéÓ§ó-?Óï¿ÿÎÔ©SY·nþù'ãÇç¹çž !!¡X`X½zõ¸ù曘ÿüs–/_ÎÖ­[ÙµkëÖ­còäÉE‚ßœùõ×_ÓGeñâÅ¥®o…ž={òôÓO0uêTžyæ™R×7s¬æÎëòrö<___ÇÿgΜYdYnnn‘óïJÖÈæÍ›Ó·o_>øà~øa–-[ÆÆ™}:ƒ&00M›6ñè£Ò©S§2ƒ“cbbøê«¯hÕª;vìàºë®sZæl»š7o–öÿÕôíÛ—ï¾ûŽÞ½{Enn®ãe=èQÇÙùqNHHpñÅÜsÏ=,\¸­[·²~ýz¦NZb[4n¸çÏ?ÿdáÂ…lÚ´‰•+W2nÜ8ž}öYÀÈ>KKK‚ƒƒuÉMû÷ï/t}cÛ¾÷cè{/+ë}¾÷PcîeJö9úôuJÑ·-(¥45öwC)ÙוVÝÈÛöß~ûm½ÊêI¸/4nÜ;;;½¿Dý$ýR»vmºuëäÎ fŠ¿%A¿û¾Rç[ï¿JôWmÛ¶eõêÕüôÓO´nÝÚ }!„Bñ¬ñôô¤aÆdff„J›œ¤ý{ ,ؼy³îçúõëç[öÒK/¡V«ÉÊÊâÛo¿-°íåË—ùý÷ßèÙ³g±ÏÏŒ±`ÁÞzë-fΜIïÞ½óý-h*#GŽD­V“™™ÉìÙ³ Ìù(cÊêþýû?~ ÐÁ[·n­{î¢`K Ý»wrÀš;wnåæ±çmíóSC®£±urË–-@î,¶ÚYOµêׯ¯„Oßg×®]ÓÍpëëë«×¶¦äèèȰaÃØµk .¤uëÖdffòÇB÷îÝY»v-)))ÅîÇÏÏuëÖÀ™3g0`@¡3ú³×üýý¸qã...Ìœ9µZͱcÇèС%z&(å\t9÷ìÙȰ°ó-ŽôÊÙ°aÙÙÙÞ9õêÕ 233™:uj„ñ””V®\  xBvTT³gϦuëÖ¼û>>,Y²D±ã͘1ƒÌÌLöíÛÇÅ‹‰‹‹ÃÒÒOOO‚ƒƒu/Ð.\¸ XÌW®\!&&///ÆŒƒ §N"!!+++œMžèeH9›»>ÂÐë{ÿþ}~úé'†JPPõë×góæÍܼy“¸¸8¬­­ñòò¢^½zÌ›7¯ÀK2cê•uòÏ~9eÊV¯^MFF•*UÂÛÛ›åË—ëÖ5gÛWê|õ‘••Åõë×ñ÷÷ÇÑÑ‘õë×ë–íÛ·7ÞxCwÜK—.)vÜGésrrrøöÛo™5k¶¶¶Ìš5‹}ûöqìØ1¢££Ñh4888P¥J\\\X±b…Éâ.)%ûºððp ·¬&MšÄêÕ«ÉÎΦB… x{{óÃ?(²­1máI¨W™™™lÚ´‰¡C‡‚µµ5‰‰‰üõ×_…®olÛWâ¾` }ïee½¯Ó÷j̽LÉ>GŸ¾N)ú¶¥”æï±Æþ®b(%ûºÒªwïÞeݺu¼üòË´jÕŠ¯¿þš 6pûömT*åË—/²¿zî ÚÙx###¹}û¶^çn®¿SjÖ¬I½zõHLLÄÑÑ‘fÍšñÒK/aeeÅÇùñÇõ:}èsßWê|ËâýרþÊÒÒ’‰'ê’ç'L˜ÀñãÇM–x.„B!ÄÓ¢S§NXXXpüøq’““ó-Û¿?ýû÷×­cŠäN¥=|øÑr‹œ IDATØØXÜÝÝ Õ¸qc ÷yWQIr»wï&$$;;;9sæŒIâüóÏ?M²ß¢=z”–-[beeÅš5k2dW¯^-r}cËjÓ¦M´hÑ‚ÀÀ@*W®œoÆÔ_|È}öpîÜ9%Nø_rÙùóç ÔeSÒÎ «Mr+Œ¿¿?‹/r“ŵ³l[ÎGÕ=GèÒ¥ GŽÑ-Ó&Þ¸qC—lú(GGGLûöí©T©nnn¤¤¤©{FdŽ@ 3`À>úè#]òä;wX³f ?ÿü3÷ïß/ñ~ê֭ˈ#puuåСCŒ3¦Ø„æg­-¸»»ÿp/(({{{233™0a‚n€¹Ç=o‘r.^½zõtÛj˺¤¤ßPNJJ wïÞÅÛÛ77·|Ë´eqòäÉ|+æ¥íËÝÜÜpssãÁƒŠÆ—™™ÉÆÙ¸q# <˜ž={Ò²eKZ¶lÉ­[·1b„I¿; „B!„B!„y•™å޵•UÏôêªûùÂåk¬üy“îÿnx{zàíéQä~“øqÝfÒÒ”›Õ\jÕª…««+­[·.vF mÛ¶±cÇŽŸ;vŒ?ÿü“   j×®ÍǬw –––ôèу=zäû\£ÑðÕW_;Û–!Û®X±:uêDÛ¶miÛ¶m¾åIIIL™2E¯—úÈÉÉaÅŠL˜0gggÆŸoyBB‚b‰*•ŠZµjacc£› »0Geß¾}ŠÅœ““×_~ÉgŸ}F¹rå;v¬ñ'£'CÊÙÜõY_Æ^ߟ~ú kkkBBB¨X±"£F*tûß~û[·þ7c¼1ÇUªNܾ}›={öбcG™>}ºnYBBB¤s´}%ÏW_—.]Âßߟœœœ|L$&&rèÐ!Ú·oONNŽîe§)è{.\¸ÀþóÞÿ}ÜÝÝ騱#;v,°ßäää'"AYɾîÚµk9r„V­ZQ¿~ý|³q<|ø°Øe}·5¦-< õjãÆôïß_—0´k×.2ó 6ó(cÎW‰û‚1 ¹—•å¾Î{¨¡÷2P®ÏÑ·¯SоmA ¥ù{,w}¡T_WšucåÊ•8;;Ó­[7jÕªÅûï¿_âmÍy_P©T´lÙ ÀÌZ%a®¿S +'ÈÝhÊ”)Šy,/}îûJþ®RÖî¿ÆöWNNNºs…ܬʗ/Ï;wôŽE!„Bˆg‰öÙÊÞ½{ ,;xð Mì2¥¤¤$ÜÝÝóýè–‹Jèzt™§§§i4ƒ9sæàååŬY³ðööfÍš5ôë×/__^Æ–Õ¶mÛ˜6mVVV³`Á¬­­ rŸ)ÉÃ#÷»ÑÑÑŠî÷qt‰y…±¶¶ÖÍ(jmý¿AÚ-çììl¶lÙ°aÃfúôéºAµ×‡˜?þcg[~ÖÚ‚¶ŒSSSÜï¦DDD™¤Y)çâiû }é7”¦­ë666ù>×–[óæÍ¹råÊc÷ãââbÒgÌááá|ðÁ,Z´ˆÅ‹ãçç‡*Te!„B!„B!D©)3 ʆˆ‹È/þ¤Fõ*Tªà…‹“#jK5iiéÄÜ‹åü¥kœ8uŽ´ô²Ÿœ ¹³z=š:P¯^=*W®ŒƒƒÙÙÙÄÆÆrþüyvìØAXXX‘ûøæ›o8{ö,ݺu£jÕª888‘‘ABBwîÜáÒ¥Kœ8q¢ÈíCCC±´´¤Aƒ899‘À™3gX»vm±£mº­F£á‹/¾ààÁƒ€ 111=z”uëÖ_²4жmÛHHH gÏžT¯^RSS¹zõ*‡Rläøœœ>úè#Ú¶mKíÚµqssÃÙÙ™œœâââ¸zõ*ûöícÏž==ž¾1ÿóÏ?Œ5Š^½zѰaC<<O¥bóÖg}{}srrX¾|9{÷î¥{÷î4hЬ­­IJJâæÍ›œ>}š‡*v\%ë$ÀW_}ÅíÛ·éØ±#^^^¤§§ÉáÇ \_s´}¥ÏW/^¤[·n?~¼ÀKþÍ›7Ó¾}{nß¾ýØ—øÆÒçœ9s†aÆñ /ТE ªW¯Ž££#™™™$%%ÉÉ“'Q«ÕŠÍ–i %ûºÏ?ÿœÁƒóÜsÏQ¾|yÒÓÓ¹~ý:GŽyì}AŸmi OB½JJJbóæÍôïßxüì Æ¶}cï ÆÒ÷^V–û:CÞË´”êsôíë” o[PJiý Æ__C)ÙוVÝÐh4|óÍ7ìÛ·îÝ»ˆ³³3ÙÙÙºþêüùó…ÞÌy_¨W¯NNN>|Ø s/Í¿S–,YB£F¨Zµ*ØÚÚ’žžNTTGŽaýúõ$%%túÐ羯Ôï*eñþkLõàÁΜ9“/¼4gÌB!„¢,²´´¤U«V|øá‡|øá‡E®Û¾}û| Êy7W©T¦ ÒÚgB&Hiÿ_Ò¿íËÂŒÑúزe ,Z´V¬XAÿþý M¨2¶¬>|ÈÞ½{éÒ¥ ={öÔ% véÒ'''4 7n4òŒ ÁÔ>J›ä]©R%ìííõzÖ®Düý÷ß6l´iÓ†ýû÷ckk«˜²°(-,,øî»ïðöö&--Ù³g³}ûvîÝ»‡ ¾¾¾,Z´ˆ *”ø\L-<<œ””ìíí ¦yóæ¬]»–5kÖSâýìß¿Ÿ† âääIJeËø×¿þÅÖ­[‹\ÿYk Ú´3$k–õåWʹxÚäzKKý¿Ê%ý†²Š*Gm9k4š½ßÎ;ø„)Ô¯_Ÿ!C†Ð½{wݱnݺ%ƒ3 !„B!„B!JU™IPþøËïõÞ&+KÃés8}î‚ "z2]¿~ݨ™(srr %44Ô íoܸÁÏ?ÿ\êÛ:tÈ Yº dÐñ”:¾>rrr8}ú4§OŸVdúÆ|÷î]/^lбÌUÎæ¬ÏúRêú^»v¹sç–Êq•®“™™™¬ZµŠU«V•xCÚ^Ÿ>}Š]>|øðB?Wú|õ±uëÖ"_Ο9s†®]»¹­¡ç[C®QZZ›6mbÓ¦M%ÞFɘõeL_—Wzz:K—.eéÒ¥¥²­!mÁ˜z¥$íò%ž™ÞÐû®±÷%{iüž¡¥T_gÌ=Tß{Y^†ô92¤¯;pà€Ñmƶ }ê—ý³1××JöuúÔ %ÊêäÉ“œZʹhÚÁù|}}éÒ¥‹^ÛJ¿Q:÷Pm9·iÓ[[[ƒ÷cÈï9+Vä½÷ÞãðáÃÌž=› žžÎ/¿üBpp0dÇŽ’œ,„B!„B!„(u’ ,„B!JEÕªUñööÆÃÃV­Zñå—_âêêJXX˜$´‰gŠ´ñ´©Y³&åË—$AùIô,÷9ÁÁÁ¬\¹’iÓ¦aggÇš5kžúsB!„B ÚÄ­3gΠÑh ýwêÔ)²³³Q«Õ´lÙ2ßö§OŸr“› M2ŠŠŠ*©lذFƒZ­.t6Ä5jлwo6nÜHVV–Iâ5jóçÏgòäÉlذ“§8Ë–-#44€áÇӶmÛ|Ë•(«ììlÖ®] @Ÿ>}5jjµš+W®päȑũ­^^^ºgEÉó'Ÿ|‚Z­.Ñ1Œ•ÍÒ¥K¨S§~øa‰gÉTªNnݺ•ØØX¬¬¬8p .ᱨٜïß¿¯û¹~ýú%е(ÑÑÑT¨P *µ¯’ÊÎÎ&44”ÁƒÓ­[7Ö®]KZZ|öÙg>|˜Ê•+»‡2dÈþúë/Ôj5sæÌ¡iÓ¦Ö{ÖÚBdd$UªT`ÇŽ¤¤¤`mmÍìÙ³qvvÀÒÒ²Dû“r.ÜÆuƒ||õÕWôë×òåËãääD£Føè£°²²zìqŸÅ~£´î¡¿ÿþ;YYY¸¹¹1uêTƒï)úþžÓ¯_?öîݢ1cpuu%::šÙ³gÓºuk&Ož¬4@!„B!„B!Ì¡do„B!„0ÒÈ‘# |ÁäÆ|ñÅfŠHó¶ ž6mÚ´rgR9{ö¬™£z–û[[[¼¼¼ˆŠŠâ‡~`ïÞ½æI!„Bˆ'ž»»;@n‚rQRRR¸|ù25kÖ¤mÛ¶ìܹS·ì×_¥k×®xzz²råJæÏŸÏ7°±±¡bÅŠ%Jæ¹zõ*±±±¸»»óïÿµZÍ… €Ü$+???Ýl¿ÆŠŠŠbÉ’%Œ=š>}ú`ooÏÏ?ÿLBB5â­·ÞÂÒÒ’øøxæÎ«È1 Ó½{wÝÏ®®®´iӦȄ0Szï½÷ؾ};žžž|ñÅtéÒ…””@¹²Z»v-cÇŽÅÙÙ™¡C‡°|ùòÇø×_`aaÁ÷ßÏܹsIOO§Zµjøøø0{ölݺQQQ,Z´ˆ7ÞxƒÎ;óË/¿°bÅ ®_¿ŽZ­¦B… &KZ^µjAAA4oÞœ×^{Zµj±jÕ*._¾LNN­[·.t;¥Ê9##ƒ•+WòÎ;ï0fÌlllˆgß¾}…®ÁíÛ·©T©}ôvvv9r„`ccƒ››vvv%:÷°°0T*³gÏfÞ¼ydggãëë‹sæÌ)Ñ~ uñâE>üðCfÍšEHHC† Á‚[·n=vÛ´´4FŽÉš5k¨]»6 , oß¾º$]xöÚ‚¶ÿ ÀÚÚš‡2mÚ4¾øâ :wîLXXX[[—8v)çÂËd„ ,]º½žß=ëýFiÝC£££™7o&L`À€´lÙ’Õ«WsåÊîÝ»‡ >>>4kÖŒ©S§¢Ñh ݾ¿çDDD V« cÅŠüùçŸEî[!„B!„B!J›$( !„BˆR‘––FRR¶¶¶ÄÄÄpèÐ!~úé'RSSÍš¥JÚ‚xÚh”;Fvv¶™£z–ûœÝ»wÆõë×ÉÉÉ1w8B!„B” ­ZµÂ‚¬¬,"""Š]÷äɓԬY³@’åîÝ»ùå—_0`5bÑ¢EzÇ‘Í×_ÍôéÓquueúôéù–ÇÅÅ)–  ¹3Uz{{Ó«W/‚‚‚ Ê·üáÇŒ9’˜˜ÅŽù¨èèhêÔ©£ûÞÙKSBB3gÎä믿ÆÛÛ›Q£FñÍ7ßè–+QVñññüöÛo 4€ðûï¿—8Æëׯ³iÓ&zöìIãÆó%ÆÅÅåK˜3gnnn„„„аaÃ|çcJÙÙÙŒ1‚ï¾ûŽçž{Ž–-[˜q¼(JÕÉ•+W2jÔ(€Ü™S322ŠŒ÷_ÿúK—.ÅÉɉO>ù¤D±æÂ… „††Ò¹sççgòe­øøx.\È’%Kðóó+ñóÄÄD†ÎæÍ›qsscþüùôéÓ‡´´4Ý:ÏR[8pà;\óæÍ9xð ¿ýöwîÜaôèÑ4lØ¢££9sæ ;vì(Ñ~¥œ :vì½{÷fâĉ´k×N—ô˜˜ÈÎ;éÕ«jµºÐºü,÷¥y7o666Œ=___&Ož\èzK—.åÚµk….Ó÷÷œsçÎѽ{÷Çþn&„B!„B!„æ ÊB}úô1˶B˜‚ÔI!„0O?ýÔÜ!“{hÉH[O›#F˜;QŒg¹Ï‰‹‹#..ÎÜa!„BQ¦h“/\¸@zzz±ëž>}šüüüðòòÊ—ðôÁpüøqBBB \¹rdddGdd$çÎÓ%¼eíÚµ}šýû÷ëWP%œœÌk¯½FPP½{÷¦~ýú¸»»“žžÎÝ»w9wîäêÕ«ù¶Sªœøé§Ÿ9r$?ÿüs±ëÿõ×_ñꫯҪU+¼½½qqq!))‰øøxîݻǕ+WJTV&L`ìØ±tëÖ *––ÆÅ‹Ù¹s§¢í·$4 —.]Òk›˜˜&OžÌÂ… `„ ùŸ¥¶pýúu"""¨]»6ƒ âàÁƒ>|˜Ã‡ëœ ºté£GÆÚÚOOO4îÛ»wo€|IÜJ—UYì7Jóš““ÃìÙ³ùã?4h-[¶¤B… ØØØÀ•+W8zôècŸKêû{Ž$' !„B!„B!žTÿÿ/ŸiÓ¦Yœ;wÎâÞ½{‰‰‰~~~÷îÝSY[[«“““UÙÙÙVöööV™™™Ö€­J¥rÈÉÉqÌÉÉqÝ¿ÿÆ¿ÿþ[·¯¦M›–â队¿¿¿¹CB!„B!„B!„Bˆ"­]»V÷sÓ&yÞçxs,„(ë Ä'Ÿ|ÂÉ“'éׯŸ¹ÃeÔK/½ÄW_}Evv6ƒæØ±cæé™S½zuÝìÔ£G&44ÔdÇ’~C!„B!„B!žyÇ}üÿwÁíÚµëeaagaa‘˜ ¤YYYe¤¤¤dªTªL‡ìŒŒ Mùò峯^½šãèè˜S¾|ùœ:uêäL›6­ÀH’ªÒ9!„B!„B!„B!„BQZ<<<;v, .4s4¢,Û´igÏžE¥RñÍ7ßÈàýf0xð`²³³9uê”ÉŽ#ý†B!„B!„B}Xš;!„B!„B!„B!„Baœš5k’ššJff&uëÖå½÷Þ£|ùò>ž .`i)_C2”••ÿýïiݺ5¾¾¾¸»»cmmM||<áááüùçŸüþûïdff*z\é7„B!„B!„BCÞ E :”Š+0räHIè,ƳXVx{{MNN޹Ãy¬gñ !r•µþJ<ýÊb,‹1 !„B!„B!DYöæ›oš;ñ HOOç×_å×_5w(O•´´4,XÀ‚ Jõ¸Òo!„B!„B!„0†ÊÜÂÖÖ†·†¿ÂôÇPÝ }´hRŸéŽgú‡ãiÚ°®Â>»4M¡?‹‚žµ²jÒ¤ 7ndÅŠØÚÚš;œyÖ®‘"WYì¯ÄÓ­,Öɲ³B!„B!„B!„B!„B!„B!J®ÌÍ ìæâÌÀ~Ý©àåað>Ô­E®ŒJhýðÃxxx`kkËÂ… ÍÎíY++{{{lll̆^žµk$„ÈUû+ñt+‹u²,Æ,„B!„B!„B!„B!„B!„Bˆ’+3 Ê*•ŠæëÑ¥C+lHv¨R¹"}»wrÈÎÎA¥*““H?±®^½Ê[o½eî0Ê)«'Ÿ\#!„B!„B!„B!„B!„B!„B!„¢ 2‘ Ü¨^m:µk›‹3¯DR³z½÷ãà`Ï+}^D­V³éÏ=tnß {;[¥ÃB!„B!„B!„B!„\]] àþýû\¾|ÙÜá!„B!„B!„B!£L$(»¹:ãæâLl\<;öæòµ|ô¯1zí½ºâXÎGOpìÄ:·o¥x¬ÁÁÁŒ7Ž[·n1|øðb×mÔ¨3gÎ$66–XÞ¦M‚ƒƒ©Y³&666ܽ{—£G²nÝ:âãã‹Ü¯««+Íš5£nݺT«V ///HKK#&&†;v°aÆŸ—““sæÌÁÇLJ7nðÎ;ï””@ïÞ½3¦àõˆŒŒdÔ¨QÝw·nÝ zõ긹¹áèèˆJ¥âÞ½{„……±nÝ:¢££‹ÜÞ‚:Ð¥Küýýqtt$##ƒøøxn޼Ʌ صkQQQ%>ß’°´´¤W¯^têÔ ,,,¸yó&»wïÆÂ¢ÐmŒ-+0þúлwoêÕ«‡‹‹ ‰‰‰œ;wŽß~ûðððbmccC‡hÓ¦ Õ«WÇÅÅ…ÌÌL¸zõ*ÇŽcÛ¶mºõ«V­ÊÂ… ì§°ØNž<Éûï¿_èqK³-(qÀðr¶³³£W¯^´jÕ ìììHMM%!!;wîpêÔ)~ùå—ÇQRC† ¡Q£Fxxxàää„••ñññ„‡‡óûï¿Qèvƶ_CÚ‘±ºuëFƒ ¨Zµ*åË—ÇÎÎŽôôt¢¢¢8tè7n$99¹Èímƒ†Ögcú:cb6¤ntìØ‘çŸ???‰ŽŽæðáÃìÙ³‡!C†Ð¤I4 `áÂ…¤¦¦ØGi·s÷WÆ0äúZ[[óÇðù石wïÞûݼy3VVV,X°€õë×ç[flÛ7–!ålΘ ©ÏJÔICûv0¬^³uÒ˜¾]!„B!„Ba~‡ÆÚÚšÏ>ûL”…B!„B!„B!„(ÊD‚òñ°3ܾÃÅË×ÉÎÉÁÖÖFï}thÓ ÿj¾\»q›»™ Ê\÷ïßÀÅÅå±ëºººpïÞ½|Ÿ«Õj&NœH§Nò}îããC¿~ýèÚµ+S¦L)2ÉqÞ¼yxxxº¬\¹r”+W[Û’ÏmooϧŸ~Š÷îÝãÃ?Ô%'+aäÈ‘º„—¼*V¬HÅŠ騱#“œ ô IDAT'OæÂ… Ö±µµå£>¢iÓ¦>÷ööÆÛÛ›fÍš‘””T ‘Åööö̘1ƒÚµkçûÜßßÅŽSc®ï°aà É÷™««+mÛ¶¥M›6|÷Ýwºä GÕªU‹É“'ãííïsKKKìììðòò"555_‚²±ž´¶PR†–³““_}õ¾¾¾…ÆZ±bET*•I”›7oNÍš5ó}æááA»víxî¹ç˜3gÛ·o/°1í×\í¨°˜íííuÇíÙ³'S¦LáâÅ‹…noh½2¦>Û×Ó © ÀÏÏO÷___|}}yùå—ó­×­[7\\\˜6mZ¾ÏÍÙ ele sôuÆ´}cSÎæŠ¹,öí`¾{¨¡ŒíÛ…B!„B!Ä“G¥Ráããí[·ÈÎÎ6w8B!„B!„B!„B!Q&”“R8éšÁÛ{yzÐñ¹¤¤¤òóúmdçä(]~±±±888`iiIVVV‘ëj”µIÍZ¯¿þº.ñfÏž=lÛ¶¤¤$2dÎÎÎ|òÉ'Œ3¦À¶yEDD°k×.®_¿NBBYYY888PµjUΟ?_¢ó)W®3fÌ €˜˜&MšÄÝ»wó­³qãF¶lÙ¢ûÿ°aÃèÝ»w‰öŸ×ÁƒÙ²e ñññØÛÛS§N „ƒƒ“&MbĈä['Áø¾ô«WJÄl,cûv!„B!„B­[·f̘1T¯^ggg,--‰çâÅ‹8p€_~ù…‡š4†víÚñý÷ßcggG½zõHII1éñžŽŽŽœ:u €ÁƒsäÈ‘"×ýùçŸiÚ´)K—.eÆŒ¥¢ÉtéÒ… »N=L2Ðè“bРA|òÉ'|ðÁüüóÏ&9NÓ¦M9r$7ÆÞÞž[·n±mÛ6.\Xìû zõêEÿþý ÄÎÎŽû÷ïsôèQ–,Yb²wy999ñã?R§NÆŒÃÎ;õÞGi•³¾Ç­Y³¦^ƒ+ÝjÔ¨Á AƒhÙ²%•+WF£ÑÉž={X¶lñññÅnoh½Ê«¤××Üee,CË*88˜ÿþ÷¿Åîûí·ß.P6jµšÎ;Ó£G7nŒ»»;ééé\»vÐÐPV¬XAbb¢IbB!„B!„Ba~e"AÙô~ñyÔ*›wî'1)Ù¤ÇÓ&ïZXXàææ¦ûÿðáéS§Ë–-ãŸþÀÝÝ€˜˜ÝöžžžôíÛ€;vðÕW_é–]¹r…Ó§O3þ|>žÉ“'³lÙ2ÜÝÝéÛ·/_~ùe¾íÇééé|ðÁº:œ×‰' |–““£;ß¼Éú™™™ùÊ¡0æj Æ\#c˹N:ìÞ½›_ý5ß²û÷ïHWÒñãÇ |väÈnÞ¼ÉâÅ‹±¶¶¦iÓ¦ìÞ½»Ðíõm¿Æ´#¥\ºt‰sçÎéþAXX_|ñ... 4¨@¿’—>õʘú¬d_gÈ}Á˜ºq÷î]RSS9zô(7oÞ¤råÊœ:uŠ„„BCCéׯÕªU£víÚù”ÍÑž”þÊÆÞ÷ ¡oÛ7†Rå\š1ƒáõÙ˜:©elß®ÝGIë•1ËØ¾]!„B!„B@@@mÚ´É÷Yùòå)_¾>>Ì™3‡jÕªqñâEÞyçB““Mm÷îݺY kÔ¨‘oYÇŽHOO/´¬L¥C‡ddd°zõêË5¢3/*¡S§NX[[“••żyó ÌZ˜––¦{™«¥UËÏÏO÷’îÇ,49Ùž”¶ cÊÐÍ6P«V-œœœLp ܺuK×ö+T¨ ×¶Åµß'µ={–íÛ·¹uP©zeL}6W_÷8úÖ í ­...ºÏbcc‚/»ŸÄ¶Pœ²Ø_™Rqmߦ,gSÅ Of}6¦o/‹LÕ· !„B!„B<í’““iß¾=íÛ·× ¼ƒƒƒsçÎ¥{÷îæQèI£Ñ™™ ðØçdÚæädÓ^ZöìÙC£F ü8p ¹C3¹¦M›òÅ_““cÔÚÓ A¦M›†J¥âܹsŒ9’—^z‰ÿþ÷¿h4üýý à¬5nÜ8:wîŒF£aþüùtèÐ&Mš0|øp®_¿Ž¥¥%3gÎ4É3mµZÍСCùã?ŒJ^-­r6ô¸W¯^Õõé…ýëСƒnÐsçÎqùòeEâ«X±"C‡E­V³oß>ÆGÏž=yýõ× ÀÛÛ›©S§º½1õ »¾æ*+c[VåÊ•àèÑ£…ö—5*tÖé?þøƒ+W®ðå—_òÊ+¯ðâ‹/òú믳yóf 79|Ò¤I&‰Y!„B!„B!„ù=Õßη·³¥s»Väää°5ô@©7::???¼¼¼'00P÷ ¿Y³f,Z´/// ‚r`` ׯ_/2!øØ±ctëÖ üüüŸ±FôíÛgggNž<ÉÇLjjª¢Ç(©ÔÔTbccñððÀÙÙ9ß²š5kpíÚµR-U›¸tíÚ5³•‹¾êÖ­ äÎ"øàÁƒB×¹qãÎÎÎ8;;ëªêׯ¯[§°—M¦ò$´}SÎëׯ§iÓ¦T©R…eË–±yófvîÜÉíÛ·M»ƒƒ=zô Y³fxzzâììLZZQQQº„:½öY\û}’ÛÑáÇyñű³³S¬^SŸÍÕ×i™¢n<ÊÂÂ"ßÿÍÙ Qû+S*®íÔålª˜áéëÛË*SôíB!„B!„O»ììlnݺäzwêÔ)V¯^Í’%KhÖ¬Ÿþ9Ç7Ë ÇÂp©©©XYY=vå§-A9++K7˜j^Oû ÑîîîÌ;+++¦NÊ„ puu5ɱÞ}÷]Ôj5ÑÑÑ 4ˆÄÄD wÉääd&OžÌóÏ?O£F8yò¤n;µZÍ AƒX¼x1³gÏÖ-Û»w/çÏŸgçÎØÛÛÓ£GÝ÷-”лwoƇ¯¯/û÷ï§]»vzï§4ËÙÐãfeeéúôÂŒ9’:uêžžÎøñãÉÈÈP$Æ[·nñŸÿü‡„„vïÞoÙþýûY²d ;v¤cÇŽØÛÛh“†Ö+0üúš«¬ŒeLYºwG±±±…ö—EÙ²e [¶lÉ7ù… Ø¿?–––˜aY©˜…B!„B!„B˜ßS Ü®uSlmm;ÁÝ{±¥vܨ¨(üüüðôô U«V@îË[___¼½½‰ŽŽÆÛÛ[·¾–››@±/òó.Óά¤çž{€œœÖ®]köäÁ´´4¬­­ó}îèè_V¦ }¡wïÞ½R=®1´õ¤^½zº‹ãèè¨KœÕn›””D\\œé‚|Ä“ÐôeL9œ8q‚?þ˜qãÆáææÆ+¯¼Â+¯¼Bxx8ëׯçàÁƒfeV‚¯¯/Ÿþ¹nÖw-›|‰z&‘–DQí÷InGÑÑѺŸ•ªWÆÔgsõu`ÚºQsµC•ÅþÊÔŠjûÆ0u9›"fx:ûö²È}»B!„B!ij())‰ñãdzsçN6l3gÎ,°ÞøñãiÓ¦ ^^^¸ººbmmMll,'Nœ`ùòå…&Õ¬Y“mÛ¶øüìÙ³>;|ø0C† )4Æ ðÚk¯Ñ¼ysÜÝÝyøð!'Nœ`É’%„……=ö«V­Êÿû_|}}Y½z5³fÍzì6eIJJ NNNAY»¼¨^CËÙÒÒ’W_}•^½zQ­Z5,,,¸zõ*7n|bŸWRŸBBBhРµk×Ö "©MÄ;xð ‹-âæÍ›&‹[¥R1gÎ<==Y¼x1?þø#&L0ɱÜÝÝiݺ5‹-Ò%j­X±‚Ñ£GãææFÏž=ó•YùòåqqqrHÍÙ³giÑ¢ÅcgPÖ·ýV©R___"##™={6Ô; ÒØr6´ÏQòúV¬X‘ñãÇðÝwßqíÚ5ƒöS” 6¹ì?þ cÇŽ¨Õj¼½½¹zõªn™1õ ”¹¾2uY=jõêÕÔ©S‡qãÆÚ>´Œ-+ø_‚²¾ƒfçML~TXXAAAØÚÚ¢R©ò½S"f!„B!„B!„æ÷T'(7iP€ÆõkÓ¸~í"×ëü<½ƒŸgï¡ãìÜ{Äèãj_"jgH~î¹çxøð!¿üò #GޤU«VlݺÒÓÓ‰‰‰Ñm«}éZÜü¼Jºž>þþûojÕªE¹råøì³ÏøòË/‹}Ña.ÚQhU*U©W[æYYY¥z\chëUvv6æ±ëç1]ß:©”'¡-è˘rÖ:räýõ:t 88˜ÀÀ@Ý¿7nðùçŸç{)«DÌ}ô¤§§³|ùr:ă°¶¶¦bÅŠL›6òåË+vLx²ÛÑã¾ccê³¹ú:sÕ ­Òn Æ(‹ýUÞžÔ/|=ª,–³Ö³Ò·ÃÔuÒ}»B!„B!ij*&&†Í›7‹/¾Xh‚r‡¨_¿~¾Ï¼½½ ¦[·n|ðÁ¬[·NñØÞ{ï=ÆŒ“ï3ºvíÊ /¼À´iÓøñÇ‹ÝÇäÉ“©S'÷=ó˜1c }ª’¢’’’€ÂßSå¥}¦¦]?/C˹\¹r¬X±‚Fåû¼N:º2ZŸ'Ož¬ˆ6/___H=xõÕW9}ú´Iâ~ã7hÓ¦ ÇŽ3y¢}Ë–-uï²vîÜY`yVV{÷î¥OŸ>º„D­¼I‰ÕªUãØ±c¶×ÆyçÎbãзý®^½š³gϲwï^4.ASÆ–³¡}Ž’×wâĉØÙÙÅâŋڗ¾òÎÒþèàùÆÔ+Pæú>ª´Ëª\¹r8::>ö=‡±eÿ,øþýûFFý?Mš4rytÀ^%bB!„B!„Ba~Oõ7õ--Õf9ndd$ûR²V­Zxyy±iÓ&öíÛLj#hÛ¶-§N‚7näKȈ¥zõêºäæÂhgfxðàâñŸ9s†yóæññÇS¥J&OžŒJ¥bïÞ½%Ú^{>¦NxЉ‰! ???“çQ%¹F%UZe¥yß¾}…~I¤8ÚY“Ë•+‡““ Å ïìOB[ý®‘1åœWVV¡¡¡„††âååEPP}úôÁ××—Y³f1jÔ(bc•™¾zõêøúú0gÎöìÙ“/ŽË—/92¾1”lGJË;Û¨¾£CŘúl®¾NéºAjjª^³f—f[È«¬öWúÈÌÌ$'' ÌN‰”År΢ú¬o4Wßž—¾1›ºNš¢oB!„B!„x–:tˆ*UªDÅŠ‰ŠŠÊ·üÛo¿%++‹7n˜˜ˆ••õë×gÒ¤IT¯^?þ˜;wæ{VséÒ%xá…øæ›o€Üä¦G“Ö (vôèѺ¤Ù£G2{ölnܸAµjÕø÷¿ÿMãÆ™2e aaa„‡‡ynÎÐZ±bŧ*AY› š7A¹jÕªX[[sëÖ-ݳCkkk€ï)ç3fè’“×­[ÇúõëILL$00×^{Úµ‹tÜœ ©Ïyýù矬Y³†ØØXhÚ´)cÇŽÅÑёٳgó /(>èf@@ãÆ#..Ž &”hpecÔ¨QÈ­/Úþ`Ò¤I4iÒ„/¾ø‚°°0.\¸äÖ7KKKÝ@ÆÉÉÉüóÏ?Ô­[—7ß|“­[·æ«wmÚ´¡zõêdff²yóæbãзýÞ»w]»véÂÿO‰r6¤ÏQòúúûûÓ£G¾þúkÝàÉ¥¥k×®\¾|¹@º1õ Œ¿¾2wYÇØ²‚ÜÒÓÓ±±±!==Ý X©U«¯¾ú*]»v%55•Ï?ÿÜ$1 !„B!„B!„0¿Òޱ”}üå÷|8ýÛ"ÿ¥¤¦°~Ë.>œþ­"³'\¿~ÈMP~þùçؽ{7÷îÝ#<<œ:uêè^¼j×Õ:wî;2pÞ$›¼Zµj@ZZšÉf¼sçï¾û.ááá¨T*&MšÄsÏ=W¢mµ/)ìííM›VXXû‚®4GKÕ^£š5kæKv1Di••6æÆccc£×¶ÿüó› Û¹sgƒcÈûòª$‰GOJ[ÐçSÎE‰‰‰á‡~`ܸqdeeQ®\9ºté¢È¾\]]u?_¹rE±ý>Ž’íHi-Z´r¿Ü¤T½2¦>›«¯Sºn,^¼˜?üãÇ´½©ÛB^eµ¿Ò—6¶J•*fޤdÊj9Fßú¬o4Wßž—¾1ƒië¤>}{›6mèׯß9ˆ†B!„B!Ä“"ï3–J•*X¾wï^<È7ˆ‹‹ãîÝ»„††2zôh4 666´oß>ß6999¤§§“žžž/)##C÷ya˼¼¼?~<;vì`èСœ\ò‚)´ ÊÚÙ8œœØ¾};Û¶mãõ×_×­§]ž7QÔ˜r®U«ÁÁÁ@î;ƒ÷ߟcÇŽί¿þJ¯^½ÈÌÌ4݉Áúœ×Ù³g9xð üý÷ß,X°€éÓ§àççGÆ W¥R1cÆ ,--ùôÓO¹{÷®¢û/Œö¹½6I»E‹Œ=š¦M›2mÚ4àc[ZZêfjÕš1c†J•*ñûï¿„••íÚµcÞ¼yLŸ>½À`*Íö«T9ë³Ò×wôèѨT*nݺŦM›ŒÚ—¾š6mJïÞ½˜={våÆÖ+¥™³¬G‰²Ò&ËOš4‰ððpNž<ÉêÕ«:th‰¾/áääÄ•+W8uêk×®¥[·n\¸ppâÄ “Ä,„B!„B!„Âüžêes¹yó&YYYxyyѱcG¢¢¢ˆˆˆr•-,,0`×®]Ë·íîÝ»Ñh4¨Õj†Z`ßUªTÉ—ôlÊÑA“’’xÿý÷ùçŸP«Õ¼ÿþûÔ­[÷±Ûi_€¹»»çKQÚîÝ»u³#Nš4‰^xWWWÊ•+GíÚµ3fŒîŹÒÇÕ^£·ß~µÚð™ºK«¬BCCÉÊÊÂÙÙ™7ß|S¯˜/^¼¨KnzõÕWKT “÷Åh“&M»þ“Òô¹FÆ”3Pl}ŒŒÔ}aÄÙÙY¯ýGûBrGÚ.-J¶#CVÞ^^^ºDü£G<*ô£Œ©ÏæêëÌU7ÀgÍ;Ãô£ÉŽÇŽcذaÄÇÇS­Z5¾ûî;N:ÅòåËqrrâ³Ï>cÕªU£4Û¯Rå¬oÌJ^_WWW]Û\¶l™ÉgÚÎË××—ùóçcaaÁöíÛÙ¹sguŒ­WJ2gY•„euõêU¸zõ*ééé899ѲeK¦NÊ–-[ð÷÷/6†œœœïçjÔ¨Á˜1c ÌöIº¾B!„B!„B! §|F“‰ØÚØ€…ögkÝçVVVØÚæÎTš­É&ã U9++‹ëׯãï#ëׯ×-Û·oo¼ñ†.ÑñÒ¥Kù¶½{÷.¿ýö  K—.ØÙÙ±uëV’““©]»6ÄÒÒ’ÄÄDV¯^mòsIOOgÊ”)Ìž=???¦NÊøñã‹™8S¦LaõêÕdddP©R%¼½½Y¾|¹b±}þùç|öÙgØÙÙñ¯ýK‘ý>ÎÝ»wY·n/¿ü2­Zµâ믿fÆ ܾ}•JEùòåQ©J–û_Zeuÿþ}~úé'†JPPõë×góæÍܼy“¸¸8¬­­ñòò¢^½zÌ›7/ßË´œœ¾ýö[fÍš…­­-³fÍbß¾};vŒèèh4 T©RV¬XQh 7oÞ$>>†ŽZ­Ö%èW©R–,Y¢[ÿIi ú\#cÊrGÏÌÌdß¾}\¼x‘¸¸8,--ñôô$88X×o\¸pA±ó»rå 111xyy1fÌlll8uê XYYáììl’ÄE%Û‘¡ˆ««+GŽ!99 „YYY%ú’CISŸÍÕ×™«n€yÚB^eµ¿Ò׎;hÛ¶-nnnÌœ9“µk×rçά­­ñôô4yÔWY-g%ê³¾uÒœí×ИA™:ilßž÷K“ÎÎκ/y !„B!„Bˆü´‰•EqttdðàÁ´oßžJ•*áææFJJ ‘‘‘ºgbJ>£jÞ¼9'Ož,r6ÑË—/àææ†›››npÐÂüù矊Åö¤Ñ&‚i”»víJvv6‡¦mÛ¶T®\™›7obmûNþáǺm)gmîùóçINN6Á™™Ž)êsJJ wïÞÅÛÛ[ÑYA]\\xçwÈÎÎfÆŒŠí÷q,,r¿Ì¡M2ß¿?¤Aƒ|ûí·ùÖ)JëÖ­qvv&99™C‡Ñ¢E ]¹Ž3†k×®±wïÞÇÆRíWér.iÌJ÷¥—^ÂÚÚšôôô|ßk1µªU«²zõjÜÜÜ8þ<'N,t=%ê•RJ£¬ìììt}³–ö݈]AU“““uß9P¢¬F¥ûY­VS§NúõëÇË/¿Œ¯¯/Ë–-£k×®¤¦¦º}bb"¸¸¸àççÇK/½DHHÁÁÁøúú2`À222të?I×W!„B!„B!„áÊL‚ò¿ÇÇú‘ñzuÕý|áò5Vþ¼©4Ã*Ò¥K—ð÷÷''''ßH¯‰‰‰:tˆöíÛ“““£{A›×Š+ððð S§N´mÛ–¶mÛæ[ž””Ä”)S¸ÿ¾ÉÏr_j|ôÑG|ÿý÷8;;3eÊÆ_äìs·oßfÏž=tìØ‘ÀÀ@¦OŸ®[– XÒ-À™3g;v,¯¿þ:M›6Õ½¬INNæðáÃtêÔ µZ­øhÛ+W®äÿØ»ïø(ªýÿãïÔM/$b€$B È¥Š" xQQ¸,W¾`Ár±\EÀ~« *Ø@@¥¤WA=ô^R i¿?òÛ½YRÈ–d³ðz><»3s朙ùœ63Ÿ9êÑ£‡âââ4zôh«ÖSûjÖ¬YòôôTÿþýavs©¤ï¿ÿ^G5›¶{÷n½ôÒK=z´BîÄ IDATBBÔ¥KuéÒ¥TÙ¬¬¬r”‹ŠŠ4}út=ýôÓ ÔÈ‘#Íæ§§§—JTª }ÁÒcdí~vuuU\\œ ƒZ·n]n{Ö®]«¤¤$·êŠŠŠôÎ;ïhܸqòóóÓ“O>i·u_‰½ú‘µÜÝÝÕ«W/õêÕËlzAAÞ{ï½R#ÜÛÊ–xvĹÎQ±á¨¾P’³ž¯,µnÝ:ýúë¯êÞ½»š4i¢×^{ÍÑMº"gÛÏöŠgKcÒ‘çö’m°´Ù#&m=·Ÿ={Öl€3gÎXÜ€kAÉ$©’ ¬’«/¾øBáááfÓ½¼¼Ì1í™tT§NIÅ ´û÷ï¿âòAAA&(_ÍŒÇËÝÝ]^^^êØ±£¶lÙ¢¯¿þZ:tP÷îÝ5uêT¹»»ëÒ¥KfÉĶìçÐÐPIÒÉ“'í½IUª*ãÙ˜äg0lkd ÇW@@€~øá‡R/K¯JÆ81ލ~éÒ% 2Äl™’£­ggg›Í9r¤{ì1;vL ÐÑ£Gåææ¦nݺéÙgŸUtt´>ýôSÝÿýúóÏ?«xk®ÌQûÙÞõGM_´h‘ÙhéU©aÆš9s¦Â´ÿ~=øàƒ¥âÁÈÖ¸²§êØWãÇ7ɾ¤>ø Ô´^½z)99Y’ý÷UAA¶mÛ¦mÛ¶iõêÕúøãU¯^=Ý{ï½úâ‹/*,›––¦Í›7kóæÍZºt©>ÿüs5oÞ\÷ß¿YÙšt|Ösšeg³gÏõèÑCëׯ/õöèùóçëæ›oÖ±cÇÊüzAAþýïkåÊ•êÙ³§7n,ƒÁ S§NiíÚµš3gŽÒÒÒªkS$'kLœ8Q¯¾úª6l¨ÁƒkêÔ©å.ÿÞ{ï騱cêÒ¥‹Â”››«C‡iõêÕrqq±kÝ¡C‡ôꫯÊÃÃCµjÕRaa¡)1©k×®’döV{(((ФI“”””¤;ï¼Sñññ Taa¡ÒÓÓuâÄ íÚµK7n¼âºªk_iÚ´iúý÷ßuçwªE‹ •§§§233uäÈmݺµÔC$FÛ¶mÓC=¤nݺ©mÛ¶Š‰‰‘¿¿¿òòò”™™©C‡iË–-rss+52°Ñ/¿ü¢ôôtõîÝ[111òõõUNNŽRRR´jÕªRÛ[Sú‚%ÇÈÚý\TT¤—_~Y:tP“&MT«V-ª¨¨H©©©JIIQRR’–/_n÷„ûíÛ·ëÑGUŸ>}tà 7(44TþþþÊÉÉQzzºÎŸ?¯#GŽT*ž-aÏ~d%K–ÈÝÝ]-Z´P@@€ÒÓÓµmÛ6}óÍ7JII±{}¶Æ³#ÎuŽˆ Gö…’œõ|e©I“&鯿þR=Ô AùúúêÒ¥K¦>¸wï^mÚ´ÉÑÍ4q¶ýlÏx¶4&un·¥Í’í1ië¹}êÔ©ª]»¶êÖ­« hçÎ6QLLŒéó‰'LŸ]\\ôñÇ+<<\/^ÔøñãõÛo¿éÌ™32 ŠŠŠÒ”)ST·n]»¶Ç˜ZPPPî}ª’Œ£_‹RSS%'(wêÔIÞÞÞZ´h‘V¬X¡ÜÜ\õèÑÔ |ù}n[ö³ñoyyyöÚ»»üï•UÏUqŸãïÿ»$©oß¾êÛ·o¹Ë½ùæ›zóÍ7õñÇk„ 6×kŒ•   r—1Ž6ŸŸoö‚€zõêéÿø‡$é¹çž3½ä¹  @¿üò‹’’’ôÝwß©qãÆzòÉ'õðÃÛÜ^[9j?Û³ÞÐÐPµlÙR’´`Á›ÛV×]w)99%%E¬ðE¡¶Ä•=9b_Yª*÷Õ¯¿þª;v¨iÓ¦jß¾ý”KJJJÒ–-[”˜˜¨N:™•­)Ç`§IP~íOì¾Î7&L¶û:.\¨… –9oÛ¶mºýöÛËœWÒªU«´jÕ*‹ë8p Åe$UxK’Ö¬YS©vKÅ7–g̘¡3fØ\oeo0æååéÔ©S¦ï×]wé&¹ñF»½mÙ²E[¶l±i–ì+ÉúãktàÀ}øá‡V•½xñ¢æÍ›§yó¬©Üš¸®î¾p9K‘dù~.**ÒÖ­[µuëVkšh³Ó§OWøÒòØ£ÿÚ£YãðáÃúöÛo-.gk\YÏFÖœëli³5±1bĈJ-÷â‹/–šæè¾PRuž¯laËñ-**Ò’%K´dÉ‹ÊÙëÚm-kö³#Úlïx¶t»­=·Kö»†ZÚfkcÒÈÚs»ÑÑ£GM |íÚµ“TœœlL&”¤øøxÅÆÆJ’ÆŒcvO)//OÉÉÉÊÌ̼âú MŸ+32íéÓ§¯… êé§Ÿ®ôv\‹Œ÷<==Õ­[7IÅ/þËÎÎÖªU«Ô¥KEFFÊÕÕUçÎ3+kË~6–­W¯ž}6ÄN|||LŸsssÍæÙ+ž«“=Gc¶„q4߀€EDDèøñ㥖iܸ±$éàÁƒÊÏÏ7MïØ±£)!~Æ ¥ÊeggkÆŒ7nœ«h ,ã¨ýlÏz»uë&WWW]¼xQ+W®´ÛzËãçç§ÿþ÷¿ Óáǯ˜œ,ÙWöT]ûêñÇ/5mîܹjÖ¬™† ¦eË–•[¶ª÷ÕÁƒÕ´iSÕ®]Û¢rRñÿÍF¯Ž6ª‡Ó$(–êÕ«—¤âD—]»v9¸5P58תSHHˆéoÓ¿ýö›Ù¼ÐÐPÓçääd«ëÈÉÉ1}ö÷÷WVVV…ËoÚ´I;wVûöíåå奋/Z]·TœŒ¥_ýÕ,ûj`LPöòòÒ-·Ü¢}ûöéàÁƒ’¤E‹é–[nÑwÞ)I¥”mÙÏÆ² 3{«#]ýõ¦Ï—'KÚ+ž«SóæÍ+œ¿qãFë…^°ée—[·n åêꪮ]»êË/¿4›ïææ¦›o¾Y’´zõj³yÆýœ]îúó|}}¯Ø–êè¿öÞÏ•m³=ë½í¶Û$I6l0;çV•7ÞxC±±±JMMÕƒ>Xj„ö²ØWöTÝûÊU½¯"""$Iééé—mذ¡$)--­ZÛ ¨®Žn`‹—^zIC‡U›6m£zõê)11QÏ=÷œúôé#IZ±bE•  Õs &0 ?~¼üüü”››«©S§šÍ?{ö¬ésBB‚Õõ”E±cÇŽW\þ‡~P~~¾jÕª¥W^yEnnnV×ýè£êÓO?Õ˜1côÓO?)((ÈêuÕDÆcÔ±cGjñâŦyK–,QAA)½äñ”lÛÏ?ýô“ äææ¦×_ݦcd©èèè2GâvssSÿþý%䙑‘a6ß^ñ|-8{ö¬)pذaòóó3›ÿàƒ*$$D’ÌF¢–¤#GŽH’¢¢¢Ô´iÓ2×ÇwH’8Pa;œ±ÿ:¢Í®®®jÙ²¥$ióæÍU^_‹-L/>xþùçuèСJ•³%®ì¥º÷•µªr_µjÕJ-Z´Tü² KtíÚUMš4‘$­]»¶ÚÚ ¨>Œ  §åææ¦¶mÛÊÓÓ³ÜeöíÛ§?ü°[öŹà®®®ŠŒŒTnn®‚‚‚ÔªU+=ôÐCЉ‰‘$½øâ‹:yò¤Y™;wêØ±cªW¯ž^~ùey{{kÍš5:þ¼ ƒjÕª%ooï+Ö’’¢sçÎ)$$Dÿ÷ÿ'777íÞ½[Rñˆ·ÑÑÑzûí·MËŸ}º<(777Õ­[·J’–===õÕW_éÌ™3š>}º¶nݪ¢¢"ÅÆÆê‰'žP||¼$iÆŒ¥ÊÚ+ž¯&LP»ví¡¯¾úJ“&MÒ¹sçÔ¹sg=ùä“’¤¥K—jË–-få–.]ª´´4iÊ”)zë­·´jÕ*åää¨aƦ˜‘¤9sæTØkú¯¿¿¿)Ýßßß4ÝÇÇG’¤üüü Gx¶…#Î9ÑÑѦdÐ?ÿü³Jë’Š“°%iË–-Ú´i“i¿^®°°P™™™fÓ¬+#[ouï+[ز¯>øà;wNk×®ÕÑ£G•——§ÐÐPuêÔIƒ–«««2224kÖ,³r...š?¾~ÿýwmܸQ§NR~~¾êÔ©£:hðàÁ’¤sçÎé믿¶k›5 ÊpZîîîúꫯ”˜˜¨ºuë*00PÊÈÈÐþýûµråJ-^¼XùùùŽn*XsÀ|}}•””Tjzvv¶^zé%Í;·Ô¼ÂÂB=÷Üsúì³Ï ×_ݪº 5a½ñÆ Öo¼a6?55Õ,AY’>úè# =öØcŠŠŠÒ˜1cÊ\÷gŸ}Vá(¬'Ož4ŵähÎWƒ3gΘF2>uê”¶mÛf6ñâŦå'N”*oË~ž8q¢jÕª¥þýûë†nФI“ì´UåkÖ¬™BBB¦ñãÇ—¹ÌO?ýTf✽âùZ±uëV½öÚkzõÕWÕ¼ys}öÙgfó÷íÛ§Q£F•*—™™©‘#GêÓO?Uxx¸Þÿý2׿xñbMŸ>½Â6XÓW¯^-ŸRÓ'L˜`ú¼|ùr=òÈ#W\—5qÎ1¾hBR¥G3¶Å7Þ(IJLL¬0ÑôìÙ³jÛ¶­Ù4kãÊÈÖã[ÝûÊÖî+777uéÒE>>>¦„âË¥¦¦ê‰'ž0Y^*Þ?qqqŠ‹‹+·]'OžÔðáÕžžn·6j”á´rssõí·ßêÛo¿utS8‘¾}û:º á\Wælçv€šl÷îÝZ½zµ¢££$www¥¦¦jïÞ½úã?4{öl¥¥¥•[~Æ êÞ½»† ¢víÚ)<<\AAAÊÌÌTZZšÎœ9£ýû÷kÅŠ¶ã›o¾Ñùóç5xð`5iÒDþþþÊÎÎÖÎ;µhÑ"¹¸¸¨¨¨È´|QQ‘ƯŸþYÔM7ݤºuëÊ`0(==]û÷ï×Úµk•ššZa½o¿ý¶êÖ­«¨¨(}ýõ×Wݨ:v옢¢¢´téR³}(I‹-Ò‹/¾(©ìDI[ösAA^xá-X°@Tbb¢BBBTPP ÔÔT>|X[·n½blXbóæÍêÚµ«xàuêÔIõêÕ“Á`Pjjªþúë/Í™3G‹-*·¼½âùZ1sæLíÙ³GÆ SË–-åãã£cÇŽiÁ‚š2eJ¹£Ô®\¹R·ß~»zè!uìØQ2 JKKÓŽ;4wî\Í;·T¼^Îû¯#Ú\¯^=IÅIøÕ‘dSykãʪ{_]®OŸ>-o;*,,Ô3Ï<£Î;+!!AQQQòññQFF†RRR”””¤Y³féüùó¥Ê9rDÏ<óŒ:uê¤æÍ›+""BžžžJOOמ={´lÙ2Íž=[vm3 æpùÿÿ̼úê«.;vìp9sæŒKFF†Ktt´Ë™3g\===ݲ²²\ =|||<òòò<%y¹ººúù¯X±bîÆMëjݺu5nŽãÅÆÆ:º P®o¾ùÆô¹u«÷sKÝ98¥’ï~ýÿ÷‚;uêÔÇÅÅ%ÕÅÅ%£°°0KÒEKÙÙÙy®®®y¾¾¾…—.]*¨]»vaJJJ‘¿¿QíÚµ‹š6mZôꫯ–z›¬kõl €« Ê*e•F‚2€J#A@¥¹;ºÖðò2èá}^G3¿›¯äÝû+\¾y|#Ýww —ùúû…Ú¾k¯=› \uœ.A¹VP üýNÕ ­tƒ§G¶¸v8M‚²«««Ú´l®Û:·“—Á`QYƒÁS’tàÐQ}õÝü2—É»”gs€«S$('6o¢[:µU­ @IÒžý‡Ô(¦~¥Ëš3³²uñbn•´¸¸:º•Q+8Pµ‚u.5M_ÿ°Pßþô‹E彽Д³s.VEó€k†SŒ ¼~ó6;qJ{öTaQ‘¼þÂqeùúxK*A€õœbåŒÌlíÚ{@…EEV•÷õõ‘$åçÈÝÝÍžM®)N1‚²­ü$I·ßÒ^·ßÒ^/æêÄ©3Ú¾kŸ6oMÖ¥¼<·p×D‚òÙs©Êξ(o/ÈËË †õ#Õ°~¤Ú·MÔ—ßÎÓ™³çÝL Æ»&”gÌþÙôÙÕÅEuë¨eB¼nlÙ\µ‚õà}}4iò ååå;°•@ÍçêèT·Â¢"=~Jó~]®o~X(I Pëš9¸e@ÍwÍ%(—´c×>?yF’Ûð:·¨ù®éeI:w>U’äçëëà–5ß5Ÿ è/Iº˜›ëà–5ß5 \?2B×E„K’9îàÖ5Ÿ»£PY^ƒäbüìišîáá!//ƒ$©° P—òòÌÊÝw÷ÊÊÎVÊ¡£JMKWAAü|}t}L}µk}ƒ\\\t17Wë7ÿUmÛ8+§IPþ¿‘ËÓãÔô{ûÜnú¼{ß}ùí<ÓwW5Žm OOÝÔºE™ëÍι¨¯¿_ Ì¬lû7¸Ê8M‚²5ŠŠŠ4{î¯jÓ@‘᪠Oåæ^Ò™s©Ú³ÿ ÖoþKYÙ9Žn*àœ&Aùµw>±¸L‘¤{R´sOŠý\ƒ\Ý΃e•F‚2€J#A@¥‘   ÒHPPi$(¨4”T Ê@5 UëÖ­ëè¦TÚí·ß®Ç\;v¬Öz” † Vk½5Q‡ìèfÀ5ɯÝUÉÝÑ Œ5j¤1cÆÈÛÛ[&LÐúõë+\þî»ïÖðáÃKM?tè}ôѪj¦Í¦L™"___}þùçÚ·oŸ£›S)=ö˜|}}uöìÙj­wúôé¦}uàÀJ—sÖØ(Ï< AƒiãÆz饗TTTäè&Ùìj;F(Ÿ¥çvX‡ý\µœñÚíhÄdÕáZýˆgËEFFªÿþŠ‹‹SíÚµ•ŸŸ¯S§NiïÞ½Ú¸q£V®\éè&°#(W“°ë[(¼Ñ ò ­ëè¦ÔXƒVDD„‚ƒƒ5lØ0G7¨† ¢AƒI’²³³åæææà–±õÜîâ⢺uëÊÅÅ¥ZË:®¡–¹–bÃQˆI\MˆgË4iÒDŸ|ò‰ºu릨¨(y{{Ëßß_±±±êÑ£‡éÿ¶œ›SŽ ìåeÐÃû*"¼Žf~7_É»÷[T¾aýHÅÅ6Tƒ¨z ð÷SfV–>þìë*jm±îÏN’Á7P¿ÿD›çþ·Êê¹õÖ[5jÔ¨+.·nÝ:;¶ÊÚa‚‚‚2?—gþüùZ¼x±éû!CÔ»wï*iœËÕݺuÓ€$I .Ô|PæèÉÏ<óŒºwï®;vèÙgŸ-s]‰‰‰zûí·%I4 »wïÞzüñÇ+lKzzºúõëgí¦”rµ#\™¥çö’Zµj¥W^yEƒAwÝu—rrrª¥¬3²e?_k®µØpb²êp ­~ÎÏÑÑÑêÙ³§Z¶l©ÐÐPèØ±cÚ¸q£.\¨S§NUI½Ï>û¬ ƒ²³³5mÚ4mÙ²E……… Qttt•Ô  ú9]‚r­ @ øûªjqÙëê…«çm7ëºzáfÓ=Ü«~DÒœôT|•“žZåu9«/¾øB¡¡¡òòòÒäÉ“¯¸|^^žòòòLß/]ºT•̓¹b#22RO<ñ„$iõêÕå&';««á¡r,=·—äãã#ƒÁ`U½¶”uF¶ìçk͵ŽBLV®¡ÕÏÙâÙÅÅEC‡Õ½÷Þ[j¤øØØXÅÆÆªoß¾ºï¾û”••e׺4h ¨¨(IÒþóýöÛo¦yÇŽÓ¶mÛìZÇqšeWWWµiÙ\·un'/+’JZµhª>=ºÈÍÍMçΧiëŽÝ:tä¸Î§]Pn®ýêoЪ‹ÎÚ­Œ³Ç%IYçO)¨ne/¥ÊÅÅU×µh¯³w*;ílE«²Z¿~ýTXXXæ¼üüü*©Ó)))WŸVŒ1BƒA§NÒøñã«49yáÂ…Z¶l™éûŒ3äãã£iÓ¦iþüù’TÎíÕƒýŒš†˜ÄÕÄÙâyĈêÓ§$iÿþýš;w®RRRäâ⢘˜uîÜY®®®vON–¤:uê˜>¯[·ÎîëPs8E‚rbó&º¥S[Õ ”$íÙHbêWº|£˜º»ç­*,,ÔÏ¿ý®u›¶Ui²Ÿ‹‹«:<ø‚¼ýƒ•²a‰6ý8YçíV½¦muþè>Åuî«î|Pu"µêË·µcÉì*iGVV– ªdݪN³fÍÔºukIÒäÉ“«$y¤¤üü|effš¾Ϲ¹¹fÓP³µiÓÆ”œ¼dÉM˜0Áì7áž={ôË/¿ÈÛÛ»Jê/9B}nnn•ÔÛ«qãÆ:{ö¬öíÛçèæÀ‰9E‚r­à@Õ Ô¹Ô4-Z¾ZûÖËÏ ¯TYƒ§§úõ¹]...ú~þmݾ«Š[+…D5’w@°\\\Ó¶›¢oìª '©¨°PwŒúDAu˜–lþ·*KP¶Æ Aƒ”˜˜¨ÐÐPÈÃÃCiiiJNNÖ?ü ;w–[ÖÛÛ[}úôQ»ví)oooåää(==]'NœÐŸþ©Ù³Í·õî»ïÖðá¥å¡C‡ôè£Ú}ûŒú÷﯇zH’4dÈ>Þì{XX˜î¸ãÝ|óÍ5jT¹7ƒ­=F’§1cÆ(<<Ülº»»»¼½½¦œœœJ'(ûøøè_ÿú—"##uæÌ½øâ‹eޏkK›%©k×®f߃ƒƒÕ¥KuêÔIãÇײeË*Õ^K<ôÐCêß¿©z;tè öíÛëã?ÖÏ?ÿl÷z ƒÚ¶m+Iš7ožÝ×5±&®ìÑ÷m‰>úH¡¡¡eÎ3ž/½¼¼ÊÙbËœ={V’tÅeƒƒƒ%IgΜ)5¯:Û\X{|‡ fJ†*)""BêÒ¥‹ÆŒ£Ý»wWYÛ-å¨6—U¯bcc«Þ½{kìØ±Ú³ÇüÿHÎzívssÓ?ÿùOÝrË-fÓ###õ÷¿ÿ]·ß~»ÆŽ[f¬3Æ•-lÙ^[÷•³œÛíÁ–˜´w>> RÓ¦M•˜˜H‚²Ùz|]]]©£Gª°°°Úê@õrŠåŒÌlíÚ{Àª²-['’dfeë~½T7,T~~¾Êͽ¤£ÇOjíÆ­Ú³ÿ=›+Iº”“¥Ã[WêȶÕê8ô¹º¹+ëü)ùÖª£}k~Õ™”v¯Óf̘¡üü|8qBYYYrwwWãÆõðÃëºë®ÓO<¡5kÖ(==ݬ܀¥¼¼]ëׯׅ äáá¡Úµkëúë¯/s”®¹sçjÁ‚¦ï=ôî¾ûî*ßÎèìÙ³ ½b’ÓÖ­[ËyÌÛ¶mÓüùóuâÄ IÒ 7Ü x@¾¾¾zöÙgõü£ÌrÖ£† êí·ß–··· µlÙ2­Y³F'Nœ‹‹‹_é„.???½ùæ›jܸ±N:¥Q£F•;z¤µm6ÊÏÏׂ ´jÕ*eff*&&FƒVíÚµõÜsÏéÀ:pÀºsDYî½÷^S’ÒÖ­[5mÚ48qB‘‘‘zøá‡¯#F(99Yû÷ï·[½Rñ[Á ƒŠŠŠ´víZ»®ûjcM\ÙÚ÷í;wîÔÒ¥KuðàA¥§§+??_¾¾¾jРví²ÏË4Î;'Iòõõ•»»{…IJÆecR³­m¶åÜ~èÐ!õêÕKRñHŠÆ‘lûõë§‹/š-{ù-¶”•ìs|W®\© (--M>>>jÚ´©(___5J<òˆŠŠŠ*µ/®Ä^×ÐêlsIüñ‡~üñGeddÈ××WmÚ´Ñ=÷Ü£àà`ýë_ÿÒˆ#tþüyÓò¶ô_[cÃÈšk÷СCMIwË—/×/¿ü¢ÌÌLÅÇÇkРA Ô믿®áÇ—ÛuŒ,UbÒš²Îtn·[bÒñliß—¬ÿ­a‹šÏ–jÑ¢…$©¨¨H«V­²Ë:+Ã’slYÿ±G\IÎÓ5[¯^½tÏ=÷¨iÓ¦ Tff¦Ž=ªM›6iáÂ…Ú°aC¹eKþî­Š{‹ö2sæL}ÿý÷¦ïÏ<óŒlñzlÝ^ã}ËÌÌL?^«W¯VAAÂÂÂgñú`_¶ßN:é“O>‘···š7o®ìììj©×YØ«ÔN‘ l-?Õ)NºJhÚØlž»·Ç6TãØ†ZöÇ:-]Q5‰€†ŒQ\ç¾:{h—Öû¡îõ±zþß4oÜC:do•Ôi´páÂ2§oÛ¶MÏ?ÿ|™óÖ¯__jÚš5ktäÈM:Užžžjݺu©k›6m*IZ¶l™¾ûî;³ygÏž-7éµ°°P—.]2}¯Î›Œ6lP=ÔªU+¹¹¹™Õíææ¦&MšH’6mÚT%õoܸQIII¦ï{öìQvv¶ž|òIÅÄÄ(::Z)))¥ÊY{ŒFŽ)oooåææê…^ÐöíÛK­§²Û¢7ÞxC 6ÔÑ£G5f̘r““mi³Ñ¬Y³4sæLÓ÷ýû÷kóæÍšýôSùûûëФI“ʬ×QÇÈR5!&--ëlçv[Ù“öŠgkú¾µ¿5lQâÙR‘‘‘’Šÿ™™i—uV†-çX{Å•ä}Ps¹¹¹é£>R·nÝ̦*00ÐôÒ±víÚ™^z¹‰'*<<\ÞÞÞ7n\u4Û*—.]2ûÍnÉßHK²e{5j¤ØØXIÒ¸qã4gÎÓ¼ƒjݺuVµ öcËñõõõ5»ºêuöêƒ5«£P•ê†Õ6}^·i›¦~ùÞœ4U¯½û‰&OŸ­ÃÇŠG¿»¥c[Õ¿.Âîõ·¸c°šÜRü°õ柦êèö5:s YžÞ¾êþìûò¨e÷:«ÊÑ£GMÉmuëÖ-5ÿÂ… ’¤¸¸8TkÛ¬eL0òóó3¸hÔ¨Q#yyyI*NFª.¿ÿþ»ésãÆË_° £èèhSÒÖW_}UfrreEFFjâĉjذ¡öìÙ£gžy¦ÂädkÛ\RY#­={Ö”€pÓM7É`0XÕ†ËÝrË-òôôT~~¾>úè£R#i^¼xQsçΕ$µnÝÚ.u–T¯^=IÅûÖ¹R\YÛ÷–JOO7½‘>44T’äêêª;î¸CM›6Õßþö7Ó²ÆåãÇWCkˆª<¾Ë–-3Žyýõ×Û§ÁUÌQmþ믿ôÛo¿I’n½õV¹»›¿KÇٮݷÞz«\]]•ŸŸ¯3f”*{øða-^¼XRq ^¾½qƸ²…-Û[QYg;·ÛÊ–˜¬Êx¾RßwÆß©ªþëïï/éûËTe\`‰|Дœ¼dÉ ð·Æõ×_¯{î¹GÚ²e‹^{í5åää\±œµqu%ÆÑ÷ÜÜÜm—Ñçš5k&©øæ÷ùóe÷ÏÇKúß[óí™bL,ÉÈȰÛ:¯VÖÆ•µ}ßѱa“'O*::ZaaaJNNV||¼üüü$I7Þx£¦L™"I “tm'(WåñÍÉÉѹsçªÀÀ@û4¸Š9²Í«W¯ÖwÜ!oooEGG›|él×îøøxIÅ#~”÷2uëÖ©G2 ¥¶·"ÎW¶°e{+*ëŒçv[Ø“UÏRÅ}ßkT¤ªú¯‹‹‹ÝÖU]ª:®¨¬»îºK’ôÇhøðᦗ‹IÒþýû5þ|§üí]S_6)©R÷ÔLWu‚²—×ÿÓÜÝÝ”Ÿož˜{éRž¶ïÜ«6-›«AŒ ¼åçÏurÏŸÊN;kšvr÷ý>õ¥¬[¤üK¹v¯³¤¬¬¬ “‘/¥·ÞzË4Ò¦‘Á`0{p¾¬›ï›6mÒk¯½¦§žzJµjÕÒý÷߯ûï¿_ÉÉÉúñǵråÊ2“¥©¨¨HIIIêÛ·¯n¾ùfMž<ÙÔÆ–-[J*ޮꖭ   2+­=FÆÑQ333•ššjuÛ:vì(©xß}óÍ7•z`À–¸º’³gÿ×·‚‚‚,._ã¾jÞ¼¹i$¿ŠøûûÛ5QɸJ>ø‚Òl‰+kû¾£cÃÇWtt´êÔ©#Ij×®¤âëCTT”ÂÃÃuòäI…‡‡›–¿VUõñ½xñ¢$ÉÓÓÓº:€£Ú|òäIÓgãq1r¶k·1a¹¼¤»Ëç]¾½WâŒqe [¶·¼²Îxn·…-1YÕñ\QßwÆßWRý733SÒÿ^xã ª:®¨¬¨¨(IÒÊ•+˽GSÖô¡C‡ê¥—^*5}ïÞ½êÞ½{…uöîÝ[wÝu—âââ¤#GŽhñâÅš7ožFŽ©Ž;ª  @ .Ôo¼¡ììl³ò÷ÝwŸÚ¶m«Æ«nݺòõõUNNŽ:¤ß~ûM_~ù¥Ý_ˆkËö6jÔH¿üòK©éýõW©iï¾û®þóŸÿ˜¾>\Ï?ÿ¼$©sçÎ:räH©2mÛ¶Õ¬Y³$Iýû÷ׯ+Þ yyy©W¯^êÖ­›âã㢼¼<¥¦¦jçÎZ¾|¹¾ùæ›2ËvëÖM PóæÍåíí­cÇŽiéÒ¥š:uj¹£r÷ïß_-Z´P“&ML/êussÓÉ“'µråJM™2¥Ìý`äîî®!C†¨OŸ>jذ¡\\\”’’¢¹sç–{_¶ºŽïêÕ«5hÐ »Ô[’#öóÈ‘#Õ¾}{………)88Xžžž:wîœ6mÚ¤iÓ¦iË–-•n?€3ºª”K&$ûx{)=#«Ô2iÒ%Iþþ~UÒ†»7—š¶çŸ«¤.[¸¸¸èå—_Vhh¨rss5mÚ4­ZµJçÏŸ—§§§"""ôꫯªvíÚå®cÍš5Ú°aƒ:w={*>>ÞôïðáÃzë­·”’’R[ue‹/Vß¾}¬–-[jãÆ2 ¦Ñôì}ãº2ŒÉ—ß¶åÙ+éuãÆŠ‹‹“ŸŸŸÆ§wÞyG+V¬(wy{ÄUEJ&àÛ+¡×¸¯ +•àïááa—zŒ—øúúVºŒqÛ]]]Ë]¦ä0a!¹cÇŽºpá‚fÏž­aÆ©]»vZ¸p¡‚‚‚”››«S§N9²¹åŒÇ÷jåî^ñOíÚ-Uþ¼ëìçggt­õ}[b²ªãùJ}ßkT7ãu<<<\ÞÞÞN1úçI@M‘™™)???]wÝuÕVç£>ª&Mš˜¾ÇÆÆ*66V#FŒ0[î¾ûîShh¨{ì1³é£G.õ¢2???5mÚTM›6Õ Aƒ4lذ2DÍï¿ÿnJPþÛßþ¦o¿ý¶Ô2mÚ´‘T|,ízà 7hÒ¤I¥âÃÃÃC>>>ªW¯ž²²²J%(»¹¹éÝwßUŸ>}̦GGG+::ZýúõÓ°aôység ÆŒSæ‹è¢¢¢4`ÀõêÕKC† ÑÖ­[K-ãçç§éÓ§+11Ñlº16®6ŽÚÏRqÂ|BB‚Ù´ððpõìÙS=zôÐ /¼ 9sæØ°u5ÛU œ‘ù¿„ä À€2”ÝÜÜ$I…Î5â–½ÅÄÄ˜Þ >qâD-_¾Ü4/??_ûöí+õVî²äççkÉ’%Z²d‰ÂÂÂÔ½{wõíÛWQQQz÷Ýwõ裖ûvbéœ[3š®5RRR´sçN5iÒD]»vÕÆÕ¼ysyxx(''§Ì›”ŽbË12Žšìçç§€€¥§§[Õ†mÛ¶é£>Òk¯½¦úõëk̘1ruuÕï¿ÿn÷6WFÉÔóçÏ[½ž’Î;§˜˜%%%éí·ß¶Ë:-aL,©[·n¥Ë“O*-/ ÀôÙ–}^Ø#®¬éûŽŽ k:tHRñƒqqq Ó¼yó”””¤GyD:tПþ)>|¸Ê’~¬=·Û2¦¥eñø^®º¯¡U¥äÈèiii¥æÛzí®ÎQVqe|I@YŒ#œKö»–ÕΓWCß·„-1YÕñ|¥¾/Ùþ[ÃÎÏÉÉÉ’ŠÛئM%%%9¸EWv­Ÿ'5DzeË4`ÀÝÿýZ¿~½,XP©r_~ù¥iÔ^Izþùç5tèP‹êž0a‚¦OŸ®›nºIS¦L‘$͘1Cï¿ÿ¾:wî¬ñãÇ«k×®ºþúëµwïÞRåùåM›6M.\¿¿¿:wî¬GyDµk×ÖgŸ}¦;ï¼S§OŸ¶¨Må±e{÷îÝ«øøxIÅ#ÝNš4I’ÔªU«R/ZËÏÏ7û¾k×.¬ŒŒ yxx(!!A£FRLLŒ^{í5-^¼¸Ü¿y8»ò‡Û¼ ?ù¿­c”¹LݰâÇ3ç®íƒƒƒMŸ÷ïßo—už:uJ_|ñ…žzê)åççËÏÏO·Ýv[…erss%I>>>×g,ëååeQ¹Ÿ.ѺcÇŽ Vûöí%ß¼6®³&°åmß¾]Rq²B×®]mjlj'ôì³Ï*99Y®®®5j”:vìXæ²UW%ÝtÓM’¤‹/V8bž%±±cÇIRË–-e0ìÐJË8p@’T¿~ýJDz1©9""¢Ü¾+IºpáBMÏ’cd¯¸²´ï;:6¬qðàAIÅ Ê·Þz«¤â‡¬Îœ9£ääd5mÚÔô€ŠqÙª`í¹½äq°dTqkÊ:ãñ½œ-×К¤mÛ¶’ŠP*ïÜn˵ۖ¸²”1®6lh–`WR»ví$]ùZ挜!&¯¦¾oÉÿs¬‰ÉªŽçÊôý’¬ù­a gˆç]»v™6îׯŸ\]kþÏýký< ¨9Þ{ï=íÛ·Onnnúàƒ4yòdµnÝúŠå ”››kúgMbì±cÇ”••¥¥K—šî{¬^½Z©©©úñǵk×.I*5®ÑöíÛµiÓ&íÛ·O[¶lÑĉ5tèP($$DO>ù¤Åm*-Û[TTd*W2ùÒ¥Kfë,o½Æ&wìØÑôr#777Ýpà ’¤?þøÃŠ-+߸qãäë뫜œ 8PÏ?ÿ¼~ýõW%''kÇŽZ±b…Þÿ}­X±Â¬\½zõôÐCI’¾ûî;=ýôÓZ»v­’““õÕW_éþûïW^^ž‚‚‚ôÔSO•[ÿ_ý¥•+WjçÎÚ¸q£þóŸÿè7ÞT}úTÛߌ£¬†„„˜¦ÿ.Péõ¬_¿^³gÏ–$Ýu×]þ}ÅYGµ0–l”`z±œ=ïñ6iÒÄ”þá‡jÆ •.{×]wÉÍÍMùùùzÿý÷KÍß·oŸ~øáIRïÞ½-:F?ýô“ %©Ô=Ú;ï¼SRñ ÷>üðÃRe Ê ØY9j?_ÉtüøqIRTT”Eeœ‰Ó܉ô2$ãgOÓtyyvVXP¨K—½íwùë5ä¾> ð×àûúè×¥+u>5MáuBuO¯Ûäæêªœœ‹Z³qkµmKuñõõ5Ý0+ËÅ‹Mxïß¿_§NRXX˜†.ƒÁ ?ÿüSéééòððP```…£²½ùæ›ÊËËSRR’öìÙ£ÔÔT¹»»«N:êÙ³§é!þÝ»wWØæ’#ýŽ;V3gÎÔ¥K—T¯^=…‡‡kÚ´iå–MNN6•5j”fΜ©ÂÂBÕ­[Wáááúâ‹/Ê,———§yóæiðàÁêß¿¿<==•‘‘aÑ æê`Ë1***Òû￯wß}W^^^z÷Ýw•””¤uëÖéäÉ“*((¯¯¯êׯ¯   MŸ>ýŠíÉÍÍÕØ±c5~üxEGGë•W^ÑÈ‘#M7ZmmsI5RóæÍ•‘‘!Ýxãºë®»äáá¡ .諯¾ª°¼%±qöìYÍš5KƒV÷îÝ• ùóçëÈ‘#JMM•§§§ÂÂÂÔ¼ys}ôÑGV½ ¿"iiiÚ±c‡š5k¦ž={jÕªUW,³oß>mß¾]Íš5ÓСCe0´aÃedd¨~ýú8p ©Λ7¯Tywww³ã`LX1 òóó“Tœð’mM,“%ÇÈ^qeißwtlX#??_Tll¬üýýõã?šæ%%%iĈ¦ØØ»wo•µÃÚsû‘#G”––¦   =üðÃrss3e<22RÿýïíRÖïål¹†:€¬5kÖ(++K±±±8p ¼½½•ŸŸ¯3f”[Ö–k·-qe©Ó§Oëûï¿×½÷Þ«Ûn»MÞÞÞZ¸p¡²²²Ô¤I 0@îîîÊÈÈÐÌ™3íRgYÜÝÝõÏþSÞÞÞ’¤§Ÿ~Zëׯ¯òD?gˆÉ«¡ï[r µ%&íÏÖô}{ýÖ°…3ij$Í;WíÛ·WBB‚z÷î­¸¸8ÍŸ?ßtž SBB‚Z´h¡Ç{Ìá£Ö”ó$’”­—_~Y“'OÖ!CtÏ=÷¨Y³fš0a‚{ì1=õÔSÚ·o_µ´Å/[¼x±î¿ÿ~ùøø¨I“&5ö%¶•µvíZÓý¡Ûn»MkÖ¬1Í3&,>|X‡¶[mÛ¶5}6¾®²Z¶l)©øoV%´lÙ2õïß_ÞÞފ׶mÛ*µîììl>}ZáááªU«–ÙùD;v¬FŽiõÎÖ6uèÐA:t(5=55UcÇŽÕùóç+,oilÌš5Kžžžêß¿¿"""ô裖¹Þï¿ÿ^Gµb‹*6þ|5kÖL­ZµRÓ¦MµcÇŽ+–?~¼þýï+,,Lƒ Ò AƒJ-óå—_j|Á“¶ IDATëÖÒ/c¸ãŽ;ôøã—š>tèP :TRqÿëׯŸ[S9–#{Å•dyßwtlXcïÞ½ŠUQQ‘/^lšž‘‘¡U«Véæ›oVQQQ•>Teí¹½¨¨HÓ§O×ÓO?­ÀÀ@9Òl~zzz¹‰¤Ö”uÆã[’-×PGpwwW¯^½Ô«W/³ézï½÷®8ª·µ×n[âÊÓ§OWhh¨n¹å–2¯g™™™;v¬Îž=k·:/`ÚORñ(³µk×Ö‰'ª¬NÉybÒÙû¾¥ÿϱ%&íÏ–ö}{þÖ°…³ÄsQQ‘ÆŽûÿØ»ïø¨ªüÿãïôFH!!"%t¦,EEAš «R…±`] ßµ€+‹¢€þD×¶¢°"а ¢ô:‚J':’BêÌüþ¸&$¤03w’Iäõ|<ò˜›{ï¹çsÏ=çÌHüÌѸqãÔ±cG5iÒDÏ<óL‰ç6jÔ¨\¿ Ä^•až °ãÇkâĉzûí·õàƒêñÇWÓ¦MõÕW_©oß¾:s挻C´KáËŠŠŠªò ÊV«UK–,ш#Ô§OMœ8±à óÿ=aݺu.­3**J’ñïlŽþÛDdd¤$•š4{ù±š5k:týÌLãÿoðóó+²?""B’túôi‡®WU¹«%ãß×¾øâ ÕªU«È~ÿ" Í®øÂ€ÊªÊ$(›±|ÍF%;©NíÛ¨nZòðWFF¦>ª•ë6))ù‚»C¬~ûí7=Z PÛ¶m¡àà`eff*55UIII:v옶nÝZ¤œÍfÓË/¿¬®]»ªyóæ WHHˆl6›’““¯Õ«WkåÊ•v­Ð5eÊ8qBÝ»wWTT”²³³•  6ÈÃãÌkLš4IÆ Ó7Þ¨ÈÈHeggëÈ‘#Š‹‹+³lzzº/^\€ùã?:ÐrÇÙg”o×®]1b„n»í6uìØQ 6Tpp°rss•žž®„„íØ±C^^^v¯xîÜ9M›6MãÇWƒ ôÀè“O>qIÌŸ~ú©Úµk§úõë+""BþþþÊÎÎÖÉ“'§ (==Ý®8é6›M3fÌЪU«Ô·o_µiÓFòõõUzzºŽ;¦;wêÂ…ò™;Ö®]«aÆ)&&FcÇŽÕØ±c¯˜twêÔ)=òÈ#4h:uê¤:uê¬0½gÏ-\¸ÐîowGž‘Ù±Ïѱïî¾áŒýû÷«wïÞÚ¼y³Îž=[äØâÅ‹uÓM7éĉåºB¶äüÜþÃ?(55Uýû÷WÆ ¤ÌÌLÅÇÇkýúõ.-[Ÿïå̼‡V´eË–ÉÛÛ[mÚ´QõêÕ•ššª]»viΜ9Š¿by3ïÝfú•£,‹Þ|óM­[·N}úôQÓ¦Måçç§3gÎhãÆš7ožRRR\RWi’’’´k×®"‰«µrFU蓆±ïÈ{¨™>éŠþìèØwõk˜Qú³düO“¯¼òŠ:tè ž={ªE‹ •ÅbQbb¢öìÙ£åË—WŠäd©rÌ“”$;;[}ô‘¶nݪ™3g*<<\cƌф Üš]|JøòïªîÛo¿Õˆ#¡.]ºhÍš5ò÷÷/øb;W]~b©3ÿîãhYGë(íüüý•í˸ˋ»ÚÙÃÃCï¿ÿ¾jÕª¥¬¬,½ýöÛZºt©åç秺uëêã?Vtt´CõT5U&AyÂäL•?xø¨>ê¢h*¯åË—kùòåN—?{öl‘äR{Øl6íܹ³Ä•Y‘››«Y³fiÖ¬Y—ÍÎÎÖþóýç?ÿq¸lþ·Hïٳ犫6š1hР29²ÌãÎ<£Â²²²´hÑ"-Z´èÊ'ÿáJ1ÇÅÅéöÛo/õ¸³1ÿý÷úþûï.WgúÆáÇõÞ{﹤~GäååéÃ?Ô믿® è±ÇÓ;ï¼sÅrNGûCyqô™ ùœûÎö¡C‡:\Ƭ²ÆÑ®]»Ê»’ëb63·¯_¿^ëׯwª^gÊ:ó|ÍÎí®âH;»;æ£Gjîܹ¦®aæ½Û‘¾áжr¦/ºò½ôÒKúûßÿ®nݺéàÁƒJMMu(gUTŸtE[U¥¹ýrÎ|Ωè¹5Ÿ£cßÕÿ­aFUšc%ióæÍÚ¼ys¹×SØÚµk¯øÙ¢4Îö«Ê0nÛ¶mÓ‚ 4xð`uêÔ©Ìsó“]1uÇŽÊÈÈ(s5X{å¯þ+IçÏŸ/õ<3_ºfö~µgÏíØ±CíÚµÓ Aƒ´fÍuèÐA¾¾¾ºxñ¢ËWPNLL”$…„„(,,LÉÉÉv—={ö¬Z´h¡:uê”zNíÚµ‹Õe–=õÚËÙçkµZ ¶éŽÔë®vnÑ¢…5j$I7n\‘¿µæææj÷îÝvÑveùâCgxº; 2 Ó°aÃ$I_ýµ›£¤-[¶ü!»wïÞ2dˆ›#úsbìUã×1×]wþò—¿H’¾üòK7GT-ù_øW­Zµ2ÏËÌÌ´ë¼ÒLš4I=ôV­ZåTùÂzôè!I²X,Ú»wo©çeggK’®Ãìý:ã¿ÿý¯$©W¯^ŠˆˆÐm·Ý&Éø"שּׁ,—ÖµuëVIF¢ìÀ*»mÛ6IR³fÍJMž½õÖ[%I/^ÔîÝ»MDZ¼ÞÖ­[IRw†³Ï7¿œ$—k½îj爈ˆ‚m³×43Üe\•êׯ¯Zµj)""B;wÖäÉ“¦íÛ·kÆ î$}ôÑGÚ¾}»$iøðá¬çŒ} êbü:§OŸ>š9s¦Æ¯€€}õÕW´p™²}}}Õ­[7IÒñãÇ˼NþÊÇQQQŠŒŒt]€eðññ)¶/&&¦ ¡vùòåEF/wúôiIRtt´¢££ªÛ÷ûý÷ßëüùóòññÑ!CÔ³gOIÒ’%K\^×®]» ’OŸ~úiµoßÞî²ß}÷,‹¼¼¼ôÔSO;Þ¸qã‚g´páBååå¹$æÂõ¾öÚkòòòrúZÎ>ßÂ+€ßxãåZ¯»ÚùܹsÛ­[·6u-3cÀݼÝà£F*öä£GêÍ7ßtSD@qyyy?~¼&L˜ víÚéöÛo×üùó ¾EŽcìUã×9þþþŠŠŠÒÉ“'õÅ_¸dåàÏÄÛÛ[+V¬Ð/¿ü¢Ÿ~úI»wïÖ… ¤F顇RóæÍ%Iß~ûm™×Ú²e‹$cÅÝ>ø@ï½÷ž²³³Õ AÅÄÄèí·ßvyü=ö˜"""´|ùr¥¦¦ªeË–züñǤ¼¼<½ûî»e–Ïÿ²\OOO½ýöÛš>}º¬V«êÖ­«˜˜M›6­Ô²î¸ßœœÍœ9SO?ý´ÆŒ#???¥¤¤hõêÕ.¯Ëf³é¥—^ÒìÙ³¨Ù³gëûï¿×Š+tìØ1Y,U«VMMš4Qxx¸¦NZPöäÉ“úôÓOõðÃkРA Ôܹs•ššªvíÚé±Ç“···RRRôÞ{ï¹,æ“'Oêã?Ö#<¢[o½U_ýµ>ÿüs9rD^^^ŠŽŽ¶;iÙÙç¯óçÏ«Fzá…äåå¥}ûöI2†cccõÆo¸¤^wµóž={tâÄ Õ©SG/¿ü²§¤¤$ùùù)<<\v]ËÌp7”qUÊÊÊRzzºüýýuæÌ­_¿^³gÏ.óÛÃwÈÎÎÖK/½¤1cÆhùòåÅ’“—.]ê–¸n¿ýv·Ôkc¨º¿ÎY±b…¶oß®#GŽÈf³¹; Òi×®"##Õ³gÏ‚ÕxK2wî\ÍŸ?¿Ìk9rD‹-RÿþýuÝu×iƌǒ““Ë%a×ÇÇGÆ Ó°aÊì·X,zþùçµwïÞ2ËïÛ·OË–-Ó­·ÞªN:©S§NEb.+9Ò÷+I3gÎÔèÑ£$ÉX7''§\êÚ¹s§FŒ¡iÓ¦)**JýúõS¿~ýŠ—––V$AY’¦L™¢ZµjiÀ€êÕ«—zõêUäø… 4jÔ(9sÆ¥1O›6Máááº÷Þ{Õ¶m[½óÎ;N]ÇÙçkµZ5uêTMœ8Qaaaš8qb‘ãÉÉÉe&(;Z¯;ÚÙjµêÙgŸÕþóU¯^]¯½öšÓ×23Üe\•þùϺ;Ànyyyš>}z‰Çªj¢°»0ö÷4hSå¿ÎINNVrr²»ÃœûåmË–-êÝ»·úõë§:(66VÕ«W—ÅbÑ™3g´sçNÍŸ?_ëÖ­³ëz/¼ð‚Ž9¢þýû«N:ÊÊÊÒôÓO?ÉÃÃÃå_$øí·ßÊ××W;vTxx¸’’’´yófýûßÿÖž={ìºÆSO=¥±cǪwïÞŠŽŽVVV–öï߯ŸþùŠ1WôýJRjjªfÏž­Q£FI2’ÇËÓ¦M›të­·ê®»îR=Ô¼ys………)''G.\д~ýzyyyÉb±”³X,zæ™g´téR >>9/^ÌõôôÌ ²æääX"##­ñññ¶àà`[dd¤­eË–¶ñãÇûVUÏŠ¹s"""4vìXIÒG}äæh€«—·»(I“&M”™™©ÜÜ\]{íµzî¹ç©uëÖéçŸvwxÀU‹eTˆêÕ««AƒJNNÖÑ£GK<ç–[nц ”™™YÁÑ¡²ŠˆˆPýúõ•’’¢ƒº;T"ôÊÁž¹¸0 üŒ7Nݺu+²ïàÁƒzæ™g܉eTÙ³gËÇÇG~øa‰‰;×_½ž{î9=zTÿøÇ?”˜˜è†(QÙ|üñÇ ÒgŸ}F*Š oTWšÛ1pà@3¦Øþ„„=Úîë4iÒDãÆS@@€¦NªÍ›7»$>”,&&F÷Þ{¯š5k¦ÈÈHåååéÌ™3:pà€¶nݪuëÖ¹;ÄrUc`ÈÌÌÔ… ¨'NhéÒ¥zÿý÷•‘‘áîЀ« ʨüýýe±XT¯^=Mžû¬’’’Ü\ÌÃÃCµjÕÒéÓ§e³ÙÜN¥vµµÕÕv¿(<ð€j×®-I5j Êå¨yóæzóÍ7åççWdpp°5j¤æÍ›ÿé” ¢µmÛÖÝ!T˜G}ÔÝ!(A•LPö÷÷ÓÈ¡ƒT»VM}9±vï;TâyQ‘5ôÄèav_wú§³uê +÷ºÃúõë5a½úꫪ]»¶&L˜ §Ÿ~Zyyyî­D·Ür‹žþyIÒwÜ!‹Åâæˆ*¿ë¯¿^¯¾úªüüütçw*33ÓÝ!UZW[[]m÷‹²-^¼X?ÿüsÁïÇWÿþý¾Náy™9º|=óÌ3òóóÓÅ‹5cÆ íØ±CV«U5jÔPll¬»Ã@9¨r Êá¡!rw_EGE¸;¸ØæÍ›5mÚ4=÷ÜsjÒ¤‰FŽ©>úÈÝaÁE‹­®‰’]mmuµÝ/Ê–››«ÜÜÜ‚ßsrrœºÎ_|¡ˆˆùûûó^RŽêׯ¯ºuëJ’>üðC-]º´à؉'´k×.w…€rTe”===ÕáºVêysgùÛ™Èvî|²Þž>£Ôã|WÕ®©“§Ï*ñ\’«Â…“–-[¦fÍš©_¿~ºóÎ;µtéR9rÄÝaª˜øøx=öØcîãO¯fÍšÛ›6mrc$¨HžîÀíZ5×Ó< ~·ß,??í?”`W9‹Õªä ©¥þ´lÖHµkE*/Ï¢¹ ~TžÅRÎw{|òÉ'JLL”§§§†îîp@) ¯~žíÆHP‘ªÄ Êáa!  Ñùäý´rƒ>ª—ŸcꚡՃuK·N’¤•ë6ë\R²+B-" @ PçΣ€€eff*55U§NÒ/¿ü¢¯¿þºX¹Þ½{«M›6ª_¿¾"## ììlû¬:uꤚ5kêìÙ³v—¯*œmggû•ٲΨ_¿¾>úè£bû¿ûî»bûvìØ¡_|±ÄëtêÔI;wÖ5×\#???%%%iÛ¶múꫯÊì÷߿ڵk§ˆˆU¯^]>>>JIIÑîÝ»õí·ßjÏž=%–ëÝ»·š6mª† *<<\ÁÁÁòôôTbb¢¶oß®yóæéôéÓv¶‚}\ÕVÎô«ª|¿Îö IêÒ¥‹úôé£&MšÈÏÏOgÏžÕÆ5oÞ<¥¤¤;ß××Wÿûßÿ$I“&MÒªU«Š³xñbùøøèÃ?Ô‚ Š73ÝÕŸ]5·W„j̘âŸ4zôè+–wÅXpÇÜn–£cÁ‘ñûÙgŸiîܹ.ÙÏÏO7ß|³ºt领 *44T¹¹¹JMMU||¼6mÚ¤~ø¡Ä²ŽÞo>³cÁÌg3€Ê¦J$(oÞ¾K'NÑþƒGdµÙäïïwåBWгû òññVJjšÖmÜæ‚(‹ª^½º¦L™¢ºuëÙ_­Z5U«VMµk×–§§g‰ÉF£FRPPP‘}jÔ¨‘5j¤þýûë•W^ÑþýûK¬{Ĉº÷Þ{‹ì S×®]Õ¥K½ÿþûIv®*¨ýë_jÞ¼y‘ýù1;jÅŠ9r¤BCCÕ­[7ÍŸ?ßákTfζ³™~e¦¬»µhÑ¢ÈïQQQºãŽ;tÓM7éùçŸ×ÁƒK,סC5iҤȾˆˆuëÖM7Þx£¦M›¦¥K—+WÒ”¤Úµk«víÚêÞ½»Æ§}ûö™¸+×s¶_UÕû•œë^^^úûßÿ®=zÙ£»ï¾[·ß~»^yå—' šƒîèÏ®žÛ+;³cÁs»î f5kÖLãÆS­ZµŠì÷ööV@@€¢¢¢”™™Y,AÙÌýš f>›TFU"A9-ý¢ö8ì²ëEF„«M˦’¤e«â”g±¸ìÚù† ¢ºuë*77WŸþ¹6oÞ¬ .ÈÇÇG‘‘‘jܸ±233˼ÆÚµkµ`Á¥¥¥)((H:tÐ]wÝ¥°°0ýóŸÿÔ#<¢¤¤¤"eî¹çž‚˜;wjÆŒ:uê”bbb4räHµhÑB<òˆvïÞ­C‡¹¬ìÓO?]´³téR-[¶Ljذ¡¨ØØX‡Ú///O›7oÖm·Ý¦¿üå/ªe3íl¦_¹¢O:*!!Aýúõ“d¬X™¿ î_ÿúWeee9×jµ–z]»viñâÅ:uê”$©mÛ¶6l˜‚‚‚ôÌ3ÏèÑG-±Ü¬Y³”——§S§N)##CÞÞÞjÚ´©FŽ©k®¹F?þ¸ââ┚šZbùuëÖiÉ’%JIIQ`` Z¶l©¡C‡*((HÏ?ÿ¼þö·¿Éf³9Ü.%1ÛVfúUU¼ß|Îô‡z¨ AqåÊ•úᇔžž®-ZèþûïWHHˆ^{í53FçÎsÉýJæÇ ;ú³«çöò¶páB-Y²¤à÷#FhàÀ_Ç™¶r×Ün†³cÁ‘ñ›——çÒ˜4h 7ÞxC²Z­Z±b…âââtêÔ)yxx($$D-Z´(qEq3cßÌXpÅü PÙT‰eWëÖ¹½<<<”|!U;/ŸA[¶l)ÉX øòäÚsçΕ˜8s¹è÷ß/ø}Ïž=Ú¾}»Þ|óM…††jèСzï½÷ ŽGDDèþûï—$­_¿^¯¿þzAb_JJŠÆ§Ï>ûL5jÔÐ]wݥɓ'»¤lƒ Ô­[7IÒ¼yóôé§Ÿ;tè–/_®E‹ÉÛÛ±î¶k×.ÝvÛmªU:Í´³d®_¹¢O:Êf³)''GRÑ$µÜÜÜ‚ýöغu«V¯^]ðûþýûuñâE;V 6Tll¬âãã‹•Û¼ys±}qqq:vì˜>ùäùúúª}ûöZ±bE‰õîß¿_Û·o/øý·ß~Szzºžxâ ÅÄĨY³f.k73me¶_å«*÷[˜£}£fÍšºë®»$I?ýô“¦L™RpìСCÚ¹s§þýï+88XÆ Ó;ï¼ãô=^Îì¬èþ\^s{y²Z­EúÅÉ/ q´­Ü9·;ËÌXpÕøuÆ“O>©€€eggëÿþïÿôÛo¿;gÛ¶mÅö™¹_3cÁUó3@eãéî*Z``€Z·l"IZ¿iG™+sšqáÂIR³fÍT½zu—]÷×_ÕÒ¥K%I·ÜrK‘d˜=zÈ××Wyyyš>}z±{ËÊÊÒÂ… %IíÛ·/rÌLÙ›o¾Y’”““£/¿ü²X̋ũUW$IÕªUSHHˆÃå+#3í,™ëWåÕ'ÝeÕªUÛM›6u¨ìñãÇuöìYIRtt´CeW¬XQП7nìPÙòb¶_•¥2Þï•”Õ7n¹åyzz*//O³fÍ*VöèÑ£úùçŸ%íêÊäÛòƒåÕŸËkn¯ªÊj+wÎíÎrçXpVlllÁ*ÆÿýïKLN.™û53Ês~p§«.A¹íµÍäí奼<‹vüêú ó-X°@6›MõêÕÓgŸ}¦|PuêÔqɵ7lØ I PlllÁþk¯½V’±ÒrRRR‰e=*I )’ôk¦l~¢ÖáÇ•™™éÔ=•$--­`»Zµj.»®;™igÉ\¿*Ï>ééééJII‘$…‡‡—xNPPî»ï>M™2E³fÍÒ¢E‹ôõ×_ëwÞ)Hôóós¨ÞÌÌL?^’*Mâ¼Ù~U–Êx¿WRVßhÑ¢…$éÈ‘#I½—Û´i“$£ožcÍ2;+º?—×Ü^U•ÕVîœÛåαà¬Ö­[lç'ÛËÌýš å9?¸“û—ë`×6k$Iڽ²²Ë­žmÛ¶i„ zâ‰'®ÁƒkðàÁÚ½{·,X uëÖ9½zóéÓ§ ¶kÔ¨Ql»U«V«,—%88¸`ÕF3eÃÂÂ$I‰‰‰vÞ}òòò ¶½¼¼\zmw1ÓÎ’¹~Už}Ò].^¼¨ÐÐГ2ëÖ­«I“&)""¢È~??¿" `×›••%Iòõõu¸ly0Û¯®¤²Ý¯=Jëù Ë¥%(^~¬ðk–™1èŽþ\^s{UVZ[¹snw–;Ç‚³òcHOOWrr²CeÍܯ™±PÞó3€»\U ÊÕ‚U7&Z’ôëžå^_\\œ¶lÙ¢›o¾Y}úôQ‹- ~Ž=ªI“&)>>Þáëz{—üØòÓ¬V«,˯ãããã’²6›MRÑ„bW ,ؾxñ¢K¯í.fÚ9Ÿ™~U^}Ò]òö.OÊôððÐË/¿¬ˆˆeggkÆŒZ¿~½’’’äëë«ÚµkküøñŠŒŒtGØ.çŠ~õgSVß.Í[WRø¼ÂÛÎ$KÎAwõçòšÛÿŒÜ=·›‰Ù™±à.ŽÆl¦lIcß™±Àü þ¬®ªåMÊÃÃC¹yy:ŸP!uæååiÙ²eZ¶l™¢¢¢Ô«W/ 4HuëÖÕ[o½¥Ñ£Gëüùó]³ð š)))ÛçÏŸWÆ µzõj½ñÆ]Óe£¢¢*w%ÑÑF2ynn®Ã+%VVfÚ¹03ýª<ú¤=*ruæ† ªnݺ’¤iÓ¦iåÊ•ÇòòòtðàÁJe°Í IDATôîh[¹ª_¹KEö {櫚5kl'%%lçææÊf³ÉÃÃCAAANÇàètW.¯¹½"å'–:›Pn¯Ê0·;³3cÁ]ò? T«VMÕ«WWjjªÝeÍܯ™±PÕçg€Òxº;€ŠÔ¢iCIÒ‘£'”›[ñ+Bž9sF_|ñ…žxâ ååå©ZµjêÙ³§Ã×騱£$Éb±YMñ÷ß—$]wÝuòóósèš®(Û¤I“"ÉÓf5nÜX’”`תƒ’Ô¥KÝ}÷Ý•6¡ÎL;—ÆL¿rUŸ´GvvvÁ¶™äN{„……l:t¨\ë*޶Uyô«ŠT‘}#¿­4hP$±°Î;K’²²²Š­X›ŸZ¯^=—ÄcÏtW.¯¹ÝQùýÃßßßé².ér•mn·‡Ù±à¿ýö›$#áüÖ[ou¨¬™û53\Ý7*ûçpõ¸j”=<oïÒ§NHHPZZš$)$$Ä¡kDEE$ålܸ±Hbß²eË”——§=úè£òòò²;^3eW¬X!‹Å"///=þøã•-K~"ö/¿üb×ù÷Üs^yå5Jï½÷žªW¯î’8\ÉL;Kæú•+ú¤gÏž-ؾþúëË¥Ž|…WÜnÚ´i¹ÖUm+³ýÊÝ*²ož¯xàbÇëÕ«§[n¹¥àܼ¼¢_f±wï^IR×®]N˜uv º«?—×Üî¨ü¤ðš5k*22Ò¡²ù}«FE½]Ís»³ÌŽwØ¿A’þðáÃuíµ×Ú]ÖÌýš ®œŸ«Âçpõ(=#¦’ñ÷ó“<ò·} öûøøÈßßX‘Îj±*'7·Äò‘5Âä÷G¹ã'O—o°’þõ¯)77W«W¯Öþýû•œœ,oooÕ¬YS}úô)H”Ú·o_©×2dˆÂ§ŒŒ 5jÔHC‡U@@€òòò4kÖ¬"çŸ;wN³gÏÖ< ^½z©uëÖZ¼x±Ž;¦äädùúú***J­ZµÒôéÓ‹¬Jl¦ìÙ³g5oÞ<Ýwß}êܹ³¦Nªï¾ûN'Nœ§§§"##åééX.|£F VPŽ‹‹³«ÌM7ÝT°¢¶mÛjÍš5Õ댠  Y­ÖRgee$:™igÉ\¿rEŸ4ãØ±cJIIQhh¨FŽ)///>|X’‘£O?ýÔ%u:tHgΜQTT”ÆŒ#???ýòË/JMM•BBBœZµ¢8ÚVfû•»Udß8{ö¬¾ùæÝsÏ=êÙ³§ôý÷ß+##CÍ›7×!Cäíí­´´4}ùå—ÅÊÿôÓOêÚµ«ÂÃÃõÆohΜ9:uê”|}}U³fÍ2ç:gÇ »úsyÌíÎØ½{·$ã‹Fžþy}ùå—²Z­ŠŽŽV­ZµôÅ_”Z¶ðŠ»¯¼òоüòKåää¨N:ªU«–f̘á’Ý9·;ËìXp›Í¦wß}Wo½õ–üýýõÖ[oiõêÕÚ´i“NŸ>-‹Å¢   Õ«WO¡¡¡úüóÏ Êš¹_3cÁ•ó³»>甤Ê$(¿ðäHùúøÛÏ€Û ¶÷<¬™s•X>2"¼`û|Ò×Xˆ§§§š5k&???µoß¾Ôó6nܨիW—zÜÛÛ[ýúõS¿~ýŠì·X,š2eJA_a³gÏ–¯¯¯î½÷^Õ®][£G.ñÚß|óŽ?î²²3gÎTHHˆz÷î­fÍšéÅ_,õ¾ì1xð`IÒáÇ Ì®äܹsjÔ¨QÁ‰¦b°×¼yóÊ<>iÒ$­ZµªàwgÛÙL¿rUŸ4Ãf³éóÏ?×SO=¥=ùä“Eާ¦¦º, Õf³iòäÉzýõ×U­Z5;Ö%×­(δ•™ñënÙ7$éóÏ?WDD„zôè¡®]»ªk×®Eާ§§ë•W^ѹs犕ݴi“~üñGõêÕKÍ›7ׄ ìªÓÌtgvõÜîŒÃ‡+..N;wVëÖ­Õºuë‚c.\(3AùĉZ¹r¥ºwï®-ZhâĉÇRSS]– ,¹gn7ËÌXp—}ûö饗^Ò‹/¾¨5j¨{÷îêÞ½{±ó222Š$(Kæî×ÌXpÕüì®Ï9%©2 Êf…†K2½RRÓʵ.›Í¦—_~Y]»vUóæÍ®Ùl6%''+>>^«W¯ÖÊ•+e³ÙJ½Î²eËäíí­6mÚ¨zõêJMMÕ®]»4gÎÅÇÇ—Z÷Œ3´jÕ*õíÛWmÚ´QDD„|}}•žž®cÇŽiçκp¡x’¶™²‹Eï¼óŽV¯^­¾}ûªE‹ ‘ÕjUjjªN:¥½{÷jëÖ­Wl¿ë¯¿¾ ihöìÙWé޶•™ñ[Tdß°X,zóÍ7µnÝ:õéÓGM›6•ŸŸŸÎœ9£7jÞ¼yJII)µü;ï¼£_ýU½{÷Výúõ¤œœœ‚¹îÀÚ¶m[‘2fÇ »ú³+çv3&Mš¤aÆéÆoTdd¤²³³uäÈÅÅÅ]±oL™2E'NœP÷îÝ¥ììl%$$hÆ .íWî˜ÛÍ2;Üe×®]1b„n»í6uìØQ 6Tpp°rss•žž®„„íØ±C^^^EV$6s¿fÆ‚«æçªò9\<þø)büøñ¿ÿþ»Gbb¢GZZšGll¬Gbb¢§¯¯¯WFF†§Õjõ ôÉÍÍõ•äïééd³Ù‚m6[Øš5kNÎ(k5À?£Â+Û9ëÛo¿UPP>ûì3Í;×QUáááúàƒ¦]»vé¹çžswHÀŸÊœ9s ¶Û__èï¹Åþr ¨’ ¯“÷Çß‚»uë6ÀÃÃ#ÙÃÃ#ÍjµfHÊòññɹxñb®§§gnPP5''Çi·Û"##m-[¶´?¾ØÊ{žs'À•U«VM'NTXX˜ÒÒÒ4yòdw‡€Ë ŒJ¡Fšª—ŸsÅrÁÁA ð—$ˆO(vüBjºNœ:«uë(¤z°ËãT -[H“&JÒkÿ”Ö®swD*R½ºÒCI­ZJQQRnžtê”´g´!NZ¾ÂÝÂ]èƒvvÞK$__éí©$(¨XU"Ayóö]:qêŒö<"«Í&?»ÊeeålG„‡êpÂñbçT ”$]HMsM°€*gÌÃRLŒ±ýÔŽ'({zJµkK'OJV«ëãP~Z·’>ü@ò÷/º?¤ºÔ¬©ÔªÉ‘W+úFÅ  jª Êiéµ÷€ã_£§ÎªNtMÝÜå/úuÏeeeoØ ®"k„Éb±h×ïû]2  ±XJÞ¶GçNÒ”·ŒÄª®7I/º6¶’xyIwß%õï+Õ«gì;qBZ±Jšõßò‹¡a¬ô×»¥ë¯—bêHyéøqiÝ:鿳¥ ì¿Vû륻J×]'ÕŒ”Ο—†Ü_ò¹·õ”ÞøWÙ×{þEiÙò¢û<=¥›o’zÝ.µi-……IÙ9ÒÑiõiö)=Ýþ˜álÌf˺Jp°ôÑR³fÒ³ÏI+W•|^£†Ò×sì¿îà¡Ò>;þ¿Þ-{ÁØþçDiÁwö×áhÙW_6ÆoF†ôÞûÒæ-’Õ"Õ¬)5nl_Žôgw#3\Ù'¹m[iøýFk` ñE?/—>ÿBÊÊ*~¾+û¤£}Ã]sŽ;ç:Éñgt9gÆ ‡‡Ô»—tç©i£|R’´u›4ó¿Ò¥×g¦ì圃öα®à®ñk¦Í|ÎqåóP¶*‘ lÆË×jÄ ©®GºW?­Ü ½«aýÝ{goIÒ÷ËÖ*…”àªõÁ¿D(éí©Ž• *¾êcy ”Þ&]]Ñý?}îF–Μu]žžÒãJ÷ß/yy^Úï'#ù§i©o_é¡‘ÒéÓe_«U+éïÏH­®-ºßׯô2ÎÅ=å-é¦nE÷y{KÍ›?ýúI#þ&%&:wý²8³Ù²®P§Ž4e²Ô¤‰{êïÝKzñùŠ)Û¨¡Ô ±ýöTiá¢KÇŽ3ÚÊâHv÷82Ã}Ò™˜ï¾Ëxžž…Ú«Aiôߤ[{H#GIRÍÇVgú†»æwÎufŸ‘3íìí-½õfñ{ŽŠ2Þo¿Mzu‚ôî-[˜™1XÑs¬;Ư™v6ó9ÇUÏ€}þô ʇŽë‹9 ußÀÞŠÓ»ú(7/O>ÞÆ­/ùy6nÝéæ(î´ÿ€4d˜»£°ÏsÏ^JÚùÏ iÁÉj“ºu•žk¬Èú¯×¥¿=,Ùl®©³V”tß½FRåú Òÿ‰cáaFrÚÍ7IQ5¥ž“ž~¶ôë è/ýß‹’tô¨ôÃRiçNéø cåÌÒ¯[·+M–$3³ø¾—JõêJ‹K»vI©iÆŠýúIJujKOŽ•^zÅþ¶°—³1›-kFþŠ•="U«f_™# Rßþ¥÷ð4’Åš5•öî•)ûzmÛJã_1ú®ÕjÄd/gÊFG_Ú^»Îþº$Çû³»Ç‘fû¤31_ÛRzáÄ×½{¥d¬ÖzãÒßFJ±±Ò„ñÒSÏ-çª>éLßpלã®z}F…9ÓÎ2P-Vé‹™Æ*éééFòìߟ‘êÖ5VeÞ¾C:sÆueó9;™c]Áã×L;›ùœãŠç À~úeIjØàùûû+;'G‡Sƒz1 Ê7ÝÐ^ç“’µïà÷ ÀÔªe$œIFÒÎû\:öõ|)ñœ±’f»vRÇÒÆM®©÷ä)éõIiiÅÈ6Ä+ÞØUêÚE (9Ñ©Ë ÒËÿ,éÉÒüoŒ$R{¯IIF öúégã§pÓÁƒFÌÞÞÒ-=Н²è*ÎÆl¶¬³úö‘F2¿$£nè|åryyFÿ(ÍðûDÐìiÜ?¤œœÒÏ —&O2’àÞxSzdŒb_üΖõ+´úgV–}uIÎõgw#3ÌôIgc~ô#™ûÌYiô#F’¡$íÞ#e^”žzRêv£±²ë¯¿^*çª>éLßpלã®z}F…9ÚΞžÒÝwÛ3gJÓß¿tlÝzéÀéÛùÆêu»‘¤êвùœíÏÎα®PÑã×L;›ùœãŠç À1úå[ºuR·Îí•r!UŸÎúFÉRåéá¡M©çÍQ#LCîî«OgÍ×±§Ý.T ~~FòF›¥¦M¥°0)7WºpÁXmxíZéÛïJ.Ûýfc…À-$éÔ)iÍZiæ,#9ær½{Iwô–š4–ª‡H'ŽK«ÖH?þ(=c…°0cµÍ;¥Yÿ•vî*¹Ì÷?”×KÄJ//cØ# EJ¯¿fÄþò«Ò?^ù^ þc¥É +WÖ Ò;wI{~~F\%%\=<ÚH€ª)…„J¾>RR²ÑV³¿’v•’pg&f³e9&ÆHœ;vLšþÑwV¯p¼þÂjÕ2⑤Oÿ#%-ý\OOiâ?¥ˆé‹YF"Ú#cì«ÇÑ²ŽŒß÷Þ—f|^tŸ™þìÎqäŽþìlÌááR‡¿Û3g]J|Í7{Ž4ücþº£Wéɯ—»RŸ4Û7ÌÎ9’sï¿î˜ëÌ<#3í!…T7¶ã6?ÿÌY#AúúëŒUË 3SV27ÍαÞÞÆ ìwô6VËöðŽ‘¾ÿÑØ.KE_3ílæsŽÙç ÀqêåÐ`ÝÔÅø—ðy Rò…TI’ÕfÓo{hü~¢jF¨{׎š9w¡;ÀJáÚk¥I¥:µ‹î÷ñ1’U¢£¥ŒŒâ R^^Ò„Wä™Âê×3~ô—žzºxìðû¥&M.ýküŒx°èyƒî”Âägþîš²UQÍHã53S:_B²·Íf$D÷¹ÃH/ÉØÇ¤‡,º¯F¸Ô£»‘\þæd#ÁÓ…¿3KXóž¿«ÙnÙâxR¥d$¸I%'¸;«mãuÏžÒ»v‘Z^ÖŽQ5¥ÛzJ·Þ"ýs¢´pQÉeÍÄl¦¬³1Ï›/íÞm¬2iµ^ZqÓŒÇ5¾¤àôi#ù½,#2$·m—Þ›îX=fÊ:Ãl.My#wôggcný¥$Å•«ŠÏË3új¿¾—’díáHŸt5{ægßÍÖëLß(¯gt%i…¡ë^#mÝVüœáÆëé3®++™ƒfæØ  éý÷¤Ö­ŠîoÖÌø¹’Š¿fÚÙÌç³Ï€ãþÔ ÊcëÉËÓSié:rìD±ã99¹Ú¸m—ô1Ñnˆ*—Æ¥¿/J«ôÃÒê5Òñã’‡§*µn]òj•?v)9ùÇ¥FUZªÔ¦µ±:cX˜ôÎ4é¾ÁÆ*v—{ÿßÒWsŒ¤§w¦û¾ž'}ø±‘<õÚxéæ›¤†±Æ*ÇfËΙ+ÍÿæÒ5Æ>. l_;Š—:u1¶{t—þõº±ÝýV#©¦°Òœ‘õGÒb@€ñsy]’tî¼ñQü؃Ã/%'oÙ*½ÿtü„T·®ôäXãY=÷w#‰|ß~ûãêÑÝx=|X:SBÒOÿ¾Æëù$iêÛRÓ&RF¢Ýo¿Ks¿–6Ä•~ýð?вs$__)'ÇþØ «VÍèãƒï5bÎÊ’¦½[úù}l$Ù?a¬êím$ñ=9Vª__zñc5Ç’V¥4³™²ÎÆ|þ¼±Ò¹«4h`¬+I|Xö=4j$þ›”’"û‡ccÆ™²ŽŒß¼¼âåÍöçÒ”÷8rGv6æØXã5-ÍH&–¤'7’mß}Ϙ£2ö_sq/%=«Âìé“fûÆå™s̼ÿš©Wr®o˜yFfÚùâE#ÙºysiäéçåF ù:v0bÎÍ•–þ亲’¹1hfŽ}ù—’“.’/1žSÓ¦ÒûŠ~QKI*züšig3ŸsÌ>_ŽûS'(W ”d$"—&ûc¾¾>Tfÿg$GeeI=!íØQüœ¸Å÷EGKÆÛ‹þ'íÒ±}û¥-Û¤9_J!եѣŒÕ/wꔑ\²f­t䈑D²i³‘x¸x‰tÿP#áªU«â ÊΔµZ‹&éX-ö·“Ív©láä©Ü\ç“gí±wߥíî7KßÿPüœ´TãÕß¿èþš‘F¢¸$­X)=ÿâ¥dΤ$éÑǥム"#gùò«öÅÔ¶­Ô·±=ýƒâÇkÔ0ž‡t)90Ÿ¯¯tcWãçãO¥?*¹Ž¨(ãõ‰ÇŸ´4£_-_aô·’˜ –V¯(ºïàAãËJÄ^·¾ø¾ÕkŒ>6žäç+Ýйä•%ÍÄl¦¬™˜]éÁŒÕUOž,».OO#ùÎÛ[zkŠtîœýu8[ÖÌøuE.IEŒ£ŠîÏfbÎO<ÌOˆ½þ:ã $é…ç¥!ä )ÆïÞÞRh蕟¿=}ÒUs»3s޳ï¿f땜ëfž‘Ùvžö®‘Ì-Íü\šþ¾ñþÿ—öÆ Ô’4eÚ¥ÄiW”-¯±%+YKÒ³¤wÿߥcûöKK¾—6¬5VÙ.ME_Éùv6ó9ÇL½œãéîÊSRŠñ¯‘áa!ª]«f‰ç´jÞX’tþ|r…Å•Q“Æ—VèûøÓ’“£JsGoÉËÓH4úðãâÇ6…%©w/#Y©,)$<å¯ú']Jl .¿²•ÝÖmÒÑ£Æös—ú÷3Š}}¤[zHݺÇ32Š–íÝÛH2Ë͕ޘ\|¥ÙÌLiÎׯö í‹'&Fš2Yòð0’žW®*~NÓB+;~=_9Zºõv©ëMÒƒ#¤]¬:úoF’fIŒÕ8$+@«e¿ðœ4÷+ceÔ²ØlÅWáŒ5V“ ´ï^‹ÄsôRrÓ51®Ùìý:³«„†J·ßflù•d)#ùÿž¿J­®•ââOš6SÖY®èÏ—«¨qTšòêÏfb0^óW?­VíÒ±üy<¥Ðj¾eߣ#}Òs̼ÿš©÷JÊê®~FŽØºMû¤t!UªWWzëMiÍJiúÿ3ê~{ªôõ<×–-Ï1X–ü~›#}òiñã‹ñÜËRÑãWr¾Í|Î1S/çT™”ýýü$ümß‚ý>>>ò÷÷“$Y-Våä^Z-yïxeff) À_ÃþÚO?._«ƒGŽ)7'W5BuÓ Ô¼I¬$iëÎÝw3P µ¿þÒöÿþçXÙ6­×ƒK_•ní:iàÆŠwM›H¿ÛñgZöÙ“™²••Õ*ýãeéƒéÆjÔã_)ýÜÔ´¢¿_×Îxýõ·ÒWÿcué°0ã'¹Œïú®{ôчÆyH¯Œ/ù¼ÐÐKÛo¼YôØ®_•›—,’BB¤¿Þ%ýòKñk<õÌ¥mOO©y3#iiÐ )¦Ž4ý]é®{Œ•GK’ž.uèl´YýúFBýÀ;U)cêH#F•¼jgµjÒ=wK]n0Vc 3Vê>v\ 1Îñó+¹N31›)k&fW¹£·‘L–sé‹ J"=ò°Ñ¯§¾ãXfÊšáŠþ\XEŽ£ŠîÏfbΟ¿ó/ã6J7I×¶”>ú¸è9ö°·OºŠ£sŽ™÷_3õæs¦o¸ú9ªÃ_¤êÁRÆEiÓ&£ óc|èA#ɵ¤•¡-ëê±o¯æÍŒ×Œg⌊¿ùœig3ŸsÌÔ À9U&Aù…'GÊ×ǧØþ{Ü^°½ïàaÍœ»¨à÷ììÍYðƒ†ÞÝW!Õ«éÞ½K¼öî}‡·Ùɯ€?‰ÈHã55U:ŸäXÙˆãõT)ÉÉ’têTñóá¸ßwK÷ –.uî$ÕŒ’òr¶ß´ÉHD‹Œ¼”lœ/ò6¿®´}Ë•ë ©^z‚r½ºÒÇõ9"=:¶ôĩ«VûúOŽ»xQZ¶\ºkÐ¥$ê²X­Fü¾[Ú¼ÅX1:ÚHÂûjNÙe/¤«HîÜ%­Y+½÷®Ô¢…Q÷åecHïO—¢jÝïçg$ïå³'ÏLÌŽ”ueÌfÜÚÃx]¹òÒêª%yp¸Ñ?þ·X:_úy®.k†+ûsEŽ#wôg31ç·CõêÆkNŽ‘YXHõBçg–³½}ÒÕìs̼ÿš©Wr¾o¸ú9âáÑÆpê”4êaéä)#ñ¶GwéÑG¤úõQ ¯< IDAT¤·'K{Xúí7×”uõ{™½j„¯gϺæz1~%sÏÈÙÏ9fëà8OwPÞ>ªw?𥠛wèì¹$åääÊjµ*#ã¢Ä'hÞÂ¥š=±¬ù_ç W«üÕ)zÙJŠWŸhÍ9sFzc²4`Ô¹‹tãÍÒ=÷I3¾jÔ0ÎÙ¹«h?þ‹ÕH4ºÒoÉuשS(©2A5F:¾ôX '5…„”|ÎÉ?’×#"¯xëE,_!íÝglwìàXÙõŒU %#ª0iòFÂ^v¶ôöTéŽ~RÇŒ¶2ÌxÎ0sYeË3fGÔ—Zÿ±¢úÏËÊ>÷ÎþÆk¿¾FÒüå?ùýåå¿?öˆkÊšáªþ\‘ãÈ]ýÙL̉çÊ.'I!¬ðš—'¥¤”~ž#}²<•5ç˜yÿ5S¯™¾áÊgäˆèhiäCÆöK¯^êCV«‘0;ìéàA#©vôß\W¶<ßËÊ’ß'rs]wÍ|å5~Í´s>g>縢^Ž©2+(O˜üÓeSRÓ´äç5.Œþ|ò“ãªK¡¡Ž%%&JM›Hµk—~NttñºJóë¯RæEét+2»º¬õ, G—µZ,PŽþz·±R Å*­\UôXþ3úùgéÿ^rîúAAÒ»S¤ÊãÇ¥ÑWHª”¤sç.m׎6⸜Ïÿ÷B^žã1=*5kz)aÉgÎHjUt•PIjÚTŠ5¶_{]úáÇKÇrs„®ô )Êñ*MÇ\ZÙòŽÙ^Ý»}0;[ŠÛXö¹¾¥$ÁÛÃLY3\ÑŸ+z¹«?›‰9eÔà`©V­’çóF ×cÇÊž;é“å­´9ÇÌû¯™zÍô W>#Gtî$y{ýkÇŽâÇ/^”æÎ“þ1NjÝÊueËû½¬4Ÿ¯¢¯|®3Êcüšiç+)ësNyÖ  dU&AP¾~ùÅxõðúÜ!}9Ûþ²;wJ]»H‰È§N?ç¦nÆkf¦´oÙ×›ö®ýu»ªlV–ñT͹r’\ÍH€q‡F ¥ÿÏÞ‡EU¶ÿÂÃŽ *¡â‚`îæž[®aš–’š–šK‹iY¾Yiõ¦•©Yo–[¥¹¤å’šZ*îûž¦’¹ã*Ê.ûüþ˜ßLŒÌ3g†½?×ååxÖû<ç9gÏ™ûy^¨ý]ðèÎQ³¦ Vk“õÌõþ»Úd¶ÄDxõuÃ&Sbþþ÷sëVG<¨UKû÷¥KæÇ¤ý;%Åüu«„hÿNJ2œ^ÞïßÏgΘ¿Ý¢(‰ÙÔº¶Ž¹¸Ú·Õþ}ô˜áµaL«6…Ïß­¹óãÉðëjë­«„5êsI_GöªÏJb>rDÛùƒ££ö»ãç_ ç«TЪ¥öóÁC…ÇgN´5S÷%ß¿Jö«¤nXó™CsaßµºyîîÖ[×Öße¦è¾»#" BÜ4’(¬„-®_%å\˜¢Ú9¶Ú¯B!„B!„Â4G{ „B!„B!„B!„¢t8uúßÄáWFBƒÅ_wýMH9¼àüê¡Ú¤+ÐŽÐhÍÑ­E7úc…óF¶Í?jdóæÖ©¸Z4‡9³ÀÕîÀô—Y·^[🷵çÊÖ.µŸ?øH;"fqܾ 'þÒ~Ž|ÜÜ ç?ò´y\ûyûóbjP_h“¸ÌÑ®í¿ÉU‡ÎK¸óïç:uÌÛnQ”Ä\غ¶Œ¹¸¡^=íçF’ÙJë³=®#{Õg¥1ë’Z_¨u:¿~Ïßÿ'#æõ÷~¥©NvÏQòý«d¿JꆵΑ¹®^Óþ µk_¦s'íß—c­·®-¿Ë “¿}5þó¿» c«ëWI9›RœvŽ-ö+„B!„B!„(œŒ ,„B!„B!„B!„&óæhQæÍÍ›a×n¸vM› ãá¡ÁÎ×¾™õïºqq°h1¼ø<Õ];2ݪ_!%êÕ…aCÁÉ ’’aî<ûcaŽÓþíàÓ>‡yßiG®•*ÃÌoŒ¯wé2ܹ£MÄ=J›"küMøî{9žî MÃò•Ú‘o'€ÚE»ÍÆàÓ)Úóß ƒ´Ÿø þ<^^ÆãË˃´4Ãi󾃯¿ÒŽÔø¿/µåqå*Ô¬ Mü·nÜ?'ÀgŸÀÝ»pè0\¿9ÙÚ²nÑž‹Ò& ¦¦ÂŠ•†ë98À²%°{6Þ[·´ ÚþþÚDò¨¾ÿ–ÙÊU†ëþóvdÆŠá­7µ Q‡ÁÝDpqßràæjüø•Ĭd]¥1xzjËM÷YÇÕõßó“£ݘªUþMRüëdáû*Ë”Ôg{\Gö¬ÏJÊêÛYðØcÚuç| ³çj¯×Ö­`Ø0í2;wý›DiLIÖI%÷%ß¿ö¼×Yã™kç.mññ†Óá˯àÀAí}©J ¬Ñ`ÍZë­ Êê3Xv‹ƒÁµ±ýð,]±±à¨‚ À“–íqý*-gKÛ9J÷+„B!„B!„0Ÿ$( !„B!„B!„B!„Ð;y F†ÉC@tí¢ýs¿ÔTÃ)Ðþ»Bx²<ÑAû'¿ädóܼe»ø•ˆ½¢å±[Wm"ÌÌ|IÅII¦”óò´IZï¿åÊÁûïÎOJ²n‚ò¨WµIEùi4Ú ?ŸªMD6eÞ÷ࢆiG|c´ñå-.8º`Ãÿѳ^]رÕô>î@§ûêÌž½0÷;þ’6záÃù÷îÁÛã 1Ñpº££6ÑÍÝýß$»û%%ÁÛïŽ Pµª6‰ªfMÓ±Þ¼©MtJI1œž—ï MÈòò‚ñÿ1½û)‰YɺJbÖÙ¸¡à(™ ½èìÚ £ß0¾~Õªÿ~¾rÕüý—–Ög°Ïud¯ú¬$fÐ~}>U;â{D„6þü.\ÐŽB]˜’¬“Jî9`ù÷¯½îuº˜•ž#s¥¥Áøwµ‰V€O'_nÛvøi©õÖeõ,¿ÇΚ­Mïõ4Ô}êN2¾ýûÙëúUZΖ¶s”îW!„B!„Ba>IPB!„B!„B!„BaàðxúíHÈm‡ZµÀDz²´ÉMç/ÀÁƒÚûò²›› ïO„­Ûà™ÞP'B;*à8عS;à# 0¥ÉGk•»uÑŽÜ—™©=ÞíÛµ£j4Æ×[µZ;âäs}¡V˜vdÄ{éðÏYmy¶®¹ÒÒ´ç!9E;úñŸ–­Ú‘œ‹¢Ñh­ÿØ}žÇšh“ÊÕjí6/]ÒŽ²h,¹Ê§œ²¸gÏÑÆÕW›`åí­ÕqÿmâôU#Ƀ ¼7A›`U§WÖ&w¥¦icÝ»V¬Ònç~×®i×mÙÂkkG€tqÑç¹óÚ$°Õk´É~Æ;}¢ _Ô¿åäã£-ÿ¤$HH€‹—`ï~ëŬd]%1[KÅŠÚ¿óò´£~>È,©Ï`ŸëìSŸ•Æ °|…öz}a ¶ãW7툿›6à Mæ­S’uRé=,ûþµ×½NGé9²Äþðl è-šiY­ÖÆ{æ ¬ÿ]Ûሱï]%낲úl©Ü\øx²¶Lû<«íàÀ×W;=)I»Ï“§`ï>Ãõìyý*)g%í¥çW!„B!„Ba‡ÿÿcàÃ?t8uê”í[·RRRBCCnݺåèââ¢JKKsÌËËsvwwwÎÎÎv\=4—F£ñݹsçšÃ‡ë·Õ¤I“<û«Q£†½CB!„B!„B!„B“–-[¦ÿܤq¾÷¹Þ !„B!„B!„B!„(“òwÔ÷ÿï‚Û´iÓÓÁÁᮃƒCJ^^^áì윕žžžíèè˜íáá‘—•••wá———& @S§N͇~X ë?Ç’9!„B!„B!„B!„B!„B!„B!„B!ă@”…B!„B!„B!„B!„B!„B!„B!„Å& ÊB!„(qÞÞÞÔ¯_Ÿ{‡"l@ί0EêFñIY !„B!„B!„B!„B!„B!„(Íœì€B¡Tpp0QQQÔ®]›€€rrrˆçìÙ³>|˜Ý»wÛ;DqŸŸ~ú gggfÏžMll¬½Ã1P«V-Æ››_|ñ´wHeNi>¿Â¾¤nŸ”•B!„B!„B!„B!„B!„BˆÒL”KH`Íú888z'žÔÛ7ìŽB<0ÂÃÙ2e jµÚ`º——5jÔ <<\”…Y D¥J•6l˜$(‹2ÏÁÁ   âââÐh4öG!„B!„B!„B!„B!„B!„€2™ ìêªfè€ÞT ªÀ’ë8}æ|¡Ë;::Ò´Q]Õ‹  ¼/w“8}æ<»÷%3+Ëæ1w}óKÔ>^ù-G×|g“}¼ñÆtíÚ•S§Nñæ›o]¦aÆ|öÙg 0€Û·oÛ$–²¤}ûötíÚ•ÐÐP\]]¹}û6dùòålùÔ¬Y“îݻӠAÊ—/OFF7oÞ䨱c¬[·Ž7 “èŸxâ ÆÀ“O>Innn‰Ä™¿…¹pá/¿ür Dd; .$00°ØËOŸ>M›6Ù0¢²ãÍ7ßD­V“žžÎüùó9vìyyy”/_žÐÐP{‡'Ê ü÷¸’ºß a+7æƒ>@­VóôÓOsïÞ={‡$„0ƒ9ív¥ÿìÑ£¯¾új¡ñ$''Ó§O+™B!„B!„B!„B!„B!„¢¬+s Ê~å|èÿlw*úkygEõ¤ZHeƒéAü ªàOƒºµùnÑ ’’Sm®Þ½ä»¨=|¸—|צûÅçääÄ»ï¾K«V­ ¦WªT‰§Ÿ~š.]º0qâDNœ8a§­ÏÁÁaÆѻwoôÓñòò¢zõêDFFÒ·o_²J q_¥ªV­JHH³gÏfãÆúy×®]{ ®_Qr~üñGüýýquueΜ9öGEÜÝÝ Œ0/„(ý¤Ý.„B!„B!„B!„B!„B!„(íÊL‚²näNíZàjF’E÷ÎmõÉÉÛ÷âð±“h4ÂjV£k‡Öø•ó¡ïÓ]ùná 4VŒ·jãö$\>CÊíë¤Ý‰§\Ū¤Ý‰ÀÁÁ‘Gê·âö¥ÒÌQzK»—^z‰V­Z¡ÑhX½z5›6mâÞ½{„‡‡3dÈøïÿËK/½ôÀŒ¤üÚk¯Ñ½{wΜ9Ê+8{ö,*•а°0ž~úi®]»V*“úôéC^^žÑy§#GŽÄÑÑÑ`Ú¢E‹pwwgþüù¬[·Î`^FFFI†WjU¨PAÿùÀvŒDCå:͸sõµÛõ¦A÷ñ®Ìž…Ÿq*ú«ìW_pp0={ö`ñâÅ,^¼X?ïÆœmïpDâë뫯;çγw8¢õéÓ‡:uêpàÀ~ÿýw{‡cw¶º¤œ É=G!„B!„B!ă¤L$(ûùúàW·„»‰lÚ¶—sc™0vd‘ëÕ ÁÁÁ€}‡þ,0?æÌy’SÒðöò nDM«%(—©…›·/ŽToÖ™ÐÇ:’wM^OŽû–r«ê— ®Û²T%(»¹¹Ñ³gOZ´hApp0nnnÜ»wäädnܸÁŸþÉ/¿˜Ž7,,Œ^½zQ·n]Ê•+GJJ §NbåÊ•…þ@é~ÍÕ©S'IMMeùòåæß¼y“U«V1hÐ Z·nÍÌ™3 H»uëFýúõ©Zµ*¸¹¹‘™™Éõë×Ù³gkÖ¬!--­Ð,)«nݺFõêÕñóóÃËË GGGnݺÅÑ£GY¾|9qqqF×8p ׯ_gÆŒ&G?3–(kMS§N¥zõêLž<™#GŽØt_¾¾¾<öØc<úè£T«VÀÀ@<<<íÄñññlÚ´‰Õ«W]ßÒú¬t]sEEE1dÈ^xá£u ^½zL:€±cÇròäIý<{ÕgKU­Z•9sæ˜nì<þðÃüüóÏF·ÓªU+"##©U«jµš›7o²ÿ~–/_Nbb¢Éý+­W–²G}VrÏprr¢gÏžtèÐàà`¸rå [·nÕ?ÆÒzeIYõêÕ‹‘# ¶-._¾ÌðáËŒUiY988Ю];:uêD5ðòò"++‹ÄÄD®\¹Â™3gزe ׯ_/2–’¢ôüZz BÙio€òºæ—•9÷ÉcÇŽñÎ;ïX~€FØãÚ/‹m3k”•–\ƒÖ¨Ï–8p 6ÄßßoooœILLäôéÓ¬ZµŠ˜˜«Æ¬´}¥ôXÁþív!„B!„¢¬Ù¸q#^^^L:U”`õêÕ㫯¾ÂÝÝwÞy‡mÛ¶)ÞæÞ½{qqqaÒ¤I’,h¡Áƒóþûï˜~öìYºvíj‡ˆŠç½÷ÞÃËËËfÏ5m©,] RΆ䞣UVïB!„B!„B! •‰åƒGOpíF<ÿœ»DžFƒ««ºè•o/O²²³IM32:)pþR, ë†S¹b Õâ½}ùo~Ù– Z )R Ÿ j´|GGòrrøkã’âb¹yî/®ücµý*åííÍôéÓ 1˜îé鉧§'•*UÂÑÑÑdâÎ!CˆŠŠ2˜æëëKëÖ­iÕªß|ó ¿ýö›Õ÷k‰ÆpäÈ“£®îرƒAƒ¡V«©[·.ÐÏ6l˜>ÙMÇÝÝ5jP£F zôèÁĉùçãç×Ò²2¶_€J•*Q©R%Ú·oÏøñã9sæŒÁüªU«R³fM~ùårrrŒÆUÜÜÜðððÀÉÉö·Ÿ™3gâïïotž®~¹ººoé9Rº®%<¨O iذ¡Ñ^§ëÖ­ hYîOà±W}¶•JÅ[o½E‡ ¦óì³ÏÒ¥K&NœhòÇKJê•ö¨Ï–Þs@[‡>ùäÂÃà ¦ëêUQ”Ô+{œ#%eåêêÊ„ hÒ¤IéAAAñØc‘ššÊ¯¿þjÕ¸-¥äü*½ËR{”Õ ¥eeöºöËZÛLŸ’²²”’z¥äx•jÚ´)µjÕ2˜æïïO›6mxüñÇ™1c7n´ZÌJÛW–*Mív!„B!„ÂÞ æêÕ«&;ðŸ1cÆèŸóZ+YPˆ²H®…’!å,lEÚ9B!„B!„BˆE™HPNIMçï³Í^/+;gg\œõÿÎO—¸ìíYðGëJdÝK#öøn®œØËãƒßÅQåDÚx<ü*pnßܺpʪû³†þýûBvv6 ,ààÁƒ$%%áììL@@5kÖäÞ½{F×íÛ·¯>©ãøñãÌŸ?Ÿ7nÌСC‰ˆˆàå—_æôéÓœ?Þjûµ„££#UªT´=¯šrõêUÒÓÓqww§fÍš Ê:»víâ×_%%%š6mÊ3Ï<ƒ¯¯/ü1/¿ü2wîÜ1XGIYéìÞ½›õëד˜˜ˆ»»;uêÔaÀ€xxx0nÜ8^zé%4~ùzõêé?ïÙ³§ø…õ€ˆ‰‰aË–-\ºt‰äädrrrððð jÕªüý÷ß–Wrެq~ÍuñâEnß¾¿¿‘ 4Ç'77×èvìUŸÍuùòežzê)@;ú£näÏ>}ú‘‘a°¬±¤žÁƒ듲¶mÛÆï¿ÿNjj* 8þûßÿ2räHnß¾m2s땵”d}Ö1÷žðÆoè“î6nÜHtt4iiiT¯^^½zjò­U¯Ì)«5kÖ°~ýzý¿‡ B¯^½LnÛKÊjôèÑúäämÛ¶±iÓ&pqq¡bÅŠ¼óÎ;¨T*³c±%%çWÉ5X–Ú÷³¤nXZVæÜ'­ýƒ{_ûe¥m¦´¬”°Æ÷ %ǫԢE‹ÈÉÉáÆ¤¥¥áääDXXC‡å‘Gáµ×^cß¾}$''[%fkµ¯Ìõ°·Û…B!„B”N={öä‹/¾ ))‰fÍš‘m佫5µiÓ†o¿ý777êÖ­KzzÁΨ…eªT©ÂÖ­[ˆŠŠâðáÖyýõ×=z4†Áƒ³k×®’Ó¤üï~¬õL¦$<úè£ 0€-ZHzz:ׯ_gïÞ½,Y²„ØØX{‡¨È’%KX¹r¥þßo¼ñƒ ²cD>{^ ={ö$**ŠÚµkãââÂ¥K—X»v-?þø£Éâ˪²zÏ) æû†´s„B!„B!„’2‘ l©q·ôŸ#ªóçÉ‚‰[÷îi_Ž8;;Û$†Ö/Œ§v»Þܾü7þš'Ç}Cäf³vÒî\1kuêÔ`ëÖ­¬X±Â`ÞíÛ·MŽ æïïÏÀíè'Mš¤OvILLdüøñüðÔ/_žgžy†Ï?ÿÜ*ûµ”§§'...ܺu«Ðeããã©V­šÉ‘8Ïž=Ë©Sÿ&›ÇÄÄpôèQ¦L™B¹rå0`_ýµ~¾Ò²ÒùçŸ8zô¨þß'Ož$55•×_àà`j×®mPn•+WÖ©¤ÒÎÙÙÙh‚žF£)òG04:ꡱQ•œ#k_K:tˆnݺѸqcT*•ÁËQ•J¥O€:räˆÉmØ«>›K£Ñ••¾ÎÎÎÖO7¥B… <óÌ3lÚ´‰éÓ§ëç?žãÇ3kÖ,¼¼¼xþùçùòË/MnËœzeM%UŸïß¶9÷œjժѦM–/_Îwß}§Ÿwþüy¶lÙÂÚµkޤnÍzeNYåååÔK``nYÕ¨QCŸ(¸nÝ:ƒk ´×å¸qãJU‚²’ó«ä,kíû™[7””•’û¤¥áÚ/+m3%e¥„µ¾Í=^k8xð`iûöíãÊ•+Ì›7š4i¢ÿq­5b¶FûÊ\B»]!„B!ăG×™cFF>>>´k׎͛7ÛtŸ¸¹¹Ùt¸¦M›òÚk¯°páÂR•œ 0cÆ ‚‚‚psscÒ¤Iö§HŒ?žÁƒãè訟îââB¹r刈ˆ _¿~<öØce:±3++Ëàù³-ŸE -{\ NNN|ýõ×tîÜÙ`zxx8ááátéÒ…^xÔÔÔ‰§$”µ{NYò0ß7¤#„B!„B!„x8½HÙuáòUî$нs[×ÀÛË'• o/êÔ®AíZÕÈÈ´þƒîúO"¼ƒ6àèêy\=¹[OãâæA×7¿ÂÍÛÏêûT")) €Úµkãíí]ìõ:t耋‹ 999Ìœ9³ÀH|¬Y³@?B¤5ök)wwwýç¢FJÔÍÏ¿NQþúë/6nÜÀO•øõ×_Ñh4T©R…~ø_|Q?‚Wa}ôQ@ûbæÎ;F—‰ÀÇÇ«ì×R6Y6?Ý‹)777BCCõÓ•–UaîÝ»GBB‚~ÝütÇQXv,]v IDAT¢KHHóçÏgþüù„„„{¿…Q«ÕxzzüÑõ îêêjrž=)9G¶<¿EùóÏ?õç¿E‹ót 57nÜàÆfoÛõÙV"""¸té’>™é~´õ7ÿñ–Eöºçè’¼.^¼XdG%³½VVµjÕ´e•˜˜Xâ±YBÉùUr –µöFqV7Êâýª4_û¥­m¦¤¬”°e½*ìx­ÁÃÃçž{ŽéÓ§³hÑ"Ö®]Ë/¿ü—_~©ït@­V›µÍ¢b¶eûÊ{µÛ…B!„BSzöì‰J¥bÆ ¬Zµ Ðvl¦ëdK<8œœœ˜9s&$%%ñÊ+¯HÒ¬B:t`À€¬ZµŠ>}ú°aÃbcc¹xñ"«W¯¦W¯^L˜0ÁΑ Q´úõëÓ¯_?4 /¿ü2?üðñññ¤¥¥Í{ï½@ïÞ½ ´s´B!„B!„B!„()öjÍÆ®^çó–ЦEcjV¯‚—¹¹¹$&§pîB,u#jáíåÁÍÛÆ”8öÛÄýó'鉷õÓâÎcû¼¸p`9Y¥ë…î‘#Gøè£xýõ×ñóó£_¿~ôë×Ó§Oó믿²{÷î£Ê”/_ÐþH_7:]a¼¼¼ô£*Ù¯¥ÒÒÒôŸÝÜÜ ]V7*ZzzºYûˆ‹‹ÓÖ•OþÏ––UQt‰ö...ÓSSS 1ÒÙÙ™J•*é?[øqãhݺµÑyï¾ûni¯¼ò çÏŸ7ºü“O>Inn®Uâ*Œ’sdëó[FÃŽ;èÝ»7mÛ¶eΜ9úë¦Q£F€öZ³„½ê³-øùiG®7•”uÿ¼üÇ[Ùëžãëë À­[·Š½-²X¯ŠÃTYé~ÄWX,m”œ_%×`Yko—©ºQïW¥ùÚ/mm3%e¥„­ë•©ãU*$$„O?ýƒéjµÚ ±Ø’Î… ‹Ù–í+SìÕnB!„B!Lyúé§øý÷ß¹rå §N¢N:tîÜ™•+WX^­VsúôiFͺuë ,ƒ‹‹ “&MbþüùúéµjÕâ÷ß/°ü_ýU`ÚÞ½{8p Ñ˜Ÿxâ :vìHhh(nnnܼy“]»v1kÖ,®]»VèñvîÜ™þýûS·n]ÜÜܸví[¶laÞ¼yúŽÌŒ  mÛ¶4iÒ„ÚµkS¹re¼¼¼ppp ==«W¯²bÅ ~üñG“Û¨Zµ*ÿûßÿ aÉ’%L:µÐX­íÓO?¥qãÆäææ2zôh®^½Zèò攕³³3GÅÝÝ•+W2nÜ8£ÛtssãÈ‘#¨Õj¦NÊìÙ³}HNN.°ÜÃr-¼òÊ+üñÇìܹ³Àü­[·’@ùòåiÙ²%¿þúk±â‘r.ÈÁÁîÝ»óÌ3Ïðè£âííMff& \¸pãdzzõj._¾lt}¹o-**ŠúõëN… ðññA¥RÇîÝ»™;w®Ñrȯ~ýú¼øâ‹4mÚ”òåË“””Ä‘#Gøî»ï8zôhå•¶sÂÃɉ‰1óH…B!„B!„Âöøe€¤ä~Û¸½ÀtwZ6mÀå«Öõ*¿g >tþg×o6Ù—n”­ÂF¡Í?ÏØ¨\ûöíãСC´k׎ÈÈH"""ôbccùôÓO¹pá‚Á:º—'yyyÅJ 5ö#zKök©ÔÔT²²²pqq!  Ðeu=ûÞ¾}»ÐåîçädüÒ²FYYB—”ˆ››[‰ŽÔWÖ(9Gö:¿:›7o¦wïÞøúúÒ¨Q#>ŒZ­ÖyÿKÂâ*mõY‰âŒJ˜_q—+­ìuŽtå–““cöºe±^)‘••þÝ]ÚXãüZr –µö†Reñ~Uš¯ýÒö]¦¤¬”(‹õÊÁÁ &àïïOff&óçÏgÏž=ܹs*UªÄ‡~Xd»ÞR¶j_™¢¤Ýnÿ !„B!„ùU©R…Úµksûöm:hÓ KP. t‹éÓ¯_?ºwïNÿþýõ Ôù©T*¦NJÏž= ¦‡††JŸ>}6l˜Ñ„#€Õ«Wdtž··7¸»»÷øñã©S§ M‹ŽŽ.±„®±cÇÒ»wo&MšÄ®]»L.kIYegg³{÷n:wîL›6mppp0úl¢U«V¨Õj¢££­qhxzz²`Á6lh0½N:ú2·¶ZµjéŸ!Í;—ììl³Ö·´Nnß¾]ŸhزeK~þùçÛnÚ´) }on¬Žµk׎zõêL "22’nݺñî»ï²|ùr³ŽÇ^Ê•+Gß¾}8p ŽŽŽ´nݺXÏÅ<==ùþûï åÆ <¸@ÒìÃt-xzzÒ¶m[–-[ftFÕ+W(_¾@îæ?~¼¾#éüBBBèß¿?O=õ/¼ðÇ7ºþÛo¿ÍÈ‘# ¦ùûûÓ¥K:wî̇~ÈâÅ‹­o:uX»v-GŽaÁ‚lܸ±D:øB!„B!„Bˆâx(”MiÞ¸äi4œ>sÎÞá(¦ûñº±‡è:ùGâ25*pNNÑÑÑDGGH×®]éÝ»7!!!L:•áÇôªš@õêÕÙ±cŸ}ö™Åñ›»_KåååqùòejÖ¬IÍš5M.¬ÿ¡À¹sæÕü£»%&&ê?[«¬Ì¥ëEÕÁÁ¦M›²cÇŽÙïÇ\`ÚÌ™3©Y³&'NäÀ%‡9”œ#{_ .Cxx8;väðáÃÔ­[gggîÝ»gòG3E)mõY ]̺ÎŒ©P¡‚þó;wJ",›±×9*N9µ®½ë•îG ¶5A'>>ž°°0BCCmºk²Æùµä,kí ¥¬u¿*ÉQ¡Kóµ_ھ˔”•­÷[Ú¾«W¯NHH3fÌ`Û¶múy999œ;wÎäÿk¬ÁVí+S”´Û­õÿA!„B!„B§sçÎlÙ²EÿœiË–-Œ;–V­ZáêêJFF†ÕöwöìY"""ôûþòË/hܸqN¼ KÊ9pàK–,áÊ•+h4Z¶lÉë¯¿Ž——S¦Lá©§ž*°ÎÛo¿­Oèúí·ßX¶lÉÉÉ4jԈѣGãççǼy󈌌Ôw0f̱cÇX½z5ÿüówïÞ%;;ooojժşþYèñW¬XÑàß•*U*‘å~ýúéGFýñÇY¸pa¡Ë[ZV[·n¥sçÎn4Qü‰'žàÒ¥Kïg.\¨¹SÃàÁƒ‹}ŒŸ|ò‰>Qpùòåüú믤¤¤Á‹/¾Hxxx±·U\Íš5Óþã?Ì^ßÒrþû￉‹‹#((ˆV­Zšh¸ÿ~£×ÒW_}ENN±±±¤¤¤àììL½zõ7nÕ«Wç£>bóæÍÏZK›š5kò /ЫW/\]]HII!88¸ÈQQ}||˜?>õë×çÚµk 0€ëׯXîaºZ¶l‰³³3YYYú+êÖ­ËË/¿LÓ¦M)W®œ~zþç¦H97iÒ$}ròo¿ýÆŠ+ˆG­VS¥Jf̘J¥2º®Ü7Ì÷ǰtéRððð I“&Œ5 ///¦M›FçÎ $·1BŸœ¼ÿ~¦M›Fll,ÕªUã?ÿù5bâĉ=zÔ Þ)i焇‡“››KãÆiܸ1qqq,Z´ˆeË–•º2B!„B!„B<|ÊÎp}VPžÇ›7àäé³$&¥Ø9"åâããíËjS=pרQ€¤¤¤bÆÏ?þÈ믿NNNžžžtêÔÉ`™S§NÚÞÈu½Ë*Uœý*¡K$hܸ±É˜u=geeñ×_™µ}Ý çÜÜ\ƒ‘mQVÅ£¯}ûöµyÂ]Y¦äÙëüæ÷ÛoÚÚüq|}}iÕª }1–™™iÑ6K[}VBsµjÕ °òkÑ¢¥f$UKÙëéö[«V-ƒ¤@sÖµw½Ò]/Eh¡”îû¨R¥J´lÙÒ¦û²kœ_K®Á²ØÞPÂZ÷«ü÷~+Gi¨4_û¥í»LIYYc¿eé{Ð××Wÿùüùóv‰Áí+S”´ÛmñÿA!„B!„·.]ºÚ‘uΜ9C\\nnn´nÝÚªûÓh4dff’™™INNŽ~zVV–~º±ù÷Û¹s'ëׯçĉüõ×_Ì™3‡O>ù€ˆˆˆ‰a•+WfÈ!¬X±‚1cưÿ~NŸ>ÍâÅ‹éׯÙÙÙ”+WŽ×_½Ðcضm‹/æàÁƒœ={–K—.qâÄ V¬XQd‡È6lо{÷.{÷î-tykèØ±#}ôëׯ7Úùp~JÊjÛ¶mú$¯Ž;ضJ¥Ò?ŸÝ¼y³Á¼ÜÜ\ƒóoΨ‘µk×&22€yóæñÎ;ïpàÀNŸ>ÍŠ+èÙ³§Ù£GµjÕ¸víšÙÉcJë¤îš}üñÇ $2ªT*4h`r¤ìíÛ·³{÷nbcc¹{÷.7oÞ$::š#F››‹Z­Ö¿K/M騱#‹-â?þ _¿~¸ººÃ{ï½GË–-‹LN déÒ¥Ô¯_Ÿ .ðÜsÏ]ça»j×® h,uÏD###Y¹r%]ºtÁ××—ÜÜ\ýóÌ¢žkJ9/爈}‚ñ’%K3f »wïæìÙ³œ|˜Ù³g3yòd@;ò´î¸u=z4›6mbРA;vŒ„„>Ì /¼@||<*•J>t”´sV¬XA»ví˜5kwîÜ!((ˆ·ß~›={öðÉ'Ÿf‹âB!„B!„Bˆby(”k„†0ôùgpvv"5- Ñ;í’Uœæлwo@û‚%--ÍèvŒÅ¨ÁuÒ‚Ò²²”F£aÕªU€6)aĈ’¤l‚’sd¯ó›ßÎ;ILLÄÉɉÈÈH}’ÑÎEßçÊJ}VbëÖ­äææ¢R©4hPùUªTÑß'·nÝZèœÊ{£üåüÚk¯•¹ëàæÍ›”/_Þ 9ÎÚ¶nݪ¡tܸqtîÜ___<== gäÈ‘…~OÞ¯uëÖ,Y²„Ÿ~úÉf ÏJί’k°,¶7”°ÖýJW—AÛ1‹-•†k¿¬|—))+kí·¬|Þ½{WÿÙ^?°QÒ¾2—’v»Òÿ !„B!„ùU¨P Íž={ æé’“tÿÏ, Ö­[§ÿ\¯^=ƒyO?ý4*•Šœœ¾úê«ëž;wNÿÿõ=z˜õÌÖ³gÏæÕW_å³Ï>£W¯^ÏEleذa¨T*²³³™6mZQ"理¬nß¾ÍÁƒŒvÙ²eKýóx]‡qÖн{w@Û™ã×_]`~nnn‘Çm ݳfKΣÒ:¹~ýz@;Š­nÔSzõêé;·3÷ùÖÅ‹õ#܆„„˜µ®-yyy1dȶlÙœ9shÙ²%ÙÙÙüöÛoDEEѽ{w–-[Fzzz¡Û eùòå„……qâÄ úöíktD_xø®]LJ±±±”+WŽÏ>û •JÅh×®aaaÅêXAÊÙt9÷èÑÐv jìx #÷ ëY½z5yyy<úè£ózöì‰Z­&;;›>ø @Âxzz: .°zBöõë×™6m-[¶äÍ7ß䨱c¸ººņ X²d :uÂÑñ¡ü) B!„B!„ÂŽlóöÔ\ÕjpÐ}vÑOwvvÆÕU;ÚY^nY÷õ4êâ쌛›+å|¼¨\1ºá5 ®@ZZ:‹—ÿFJªñäÓ²æÜ¹sœúel‘ÜimIII$$$P¾|y æ5jÔÐ>4•$·uëV¢¢¢pss#""‚'NØ$Î?þøÃ&Û5eÿþý4oÞggg–.]ÊÀ¹pá‚Éå•–ÕÚµkiÖ¬<òÈ##¦>ùä“€v„ÖS§NYãð€“Ëþþûo“RÛ‚îÙJaïUkÔ¨Á¼yóm²¸n”m¥å¼ÿ~ý3µN:±oß>ý<]âall¬>Ùô~^^^<ÿüó´mÛ–Ê•+ãççGzz:—/_Ö?_²õ3¹âêÛ·/&LÐ'OÞ¸qƒ¥K—òóÏ?sûöíboçÑG套^Â××—={ö0räÈBŸƒ=l×BùòåHHH k×®¸»»“͘1cô¥õNJʹpuëÖÕ¯«+ëâ’û†õ¤§§sóæM‚‚‚ðóó3˜§+‹cÇŽtœŸî^îç營ŸŸ¾³jkÉÎÎfÍš5¬Y³†ˆˆžþyzôèAóæÍiÞ¼9W¯^套^âìÙ³VݯB!„B!„B˜Rf”ÿ3z(.ÎΦ÷íÙEÿù̹‹,üÙð‡ÖÛ·¢Åcõ ¦i4óÏyÖmÚNRrªm¶“iÓ¦1eÊ8p ,°ÌÂ… 9~ü¸Á4GGGj×®Z­¦I“&&·¿ÿ~vìØQ`úO?ý„‹‹ QQQTªT‰áÇ]åÊ•\½zÕjûUbΜ9Ò¬Y3z÷î­1Y'##ƒ>úÈäKÐþˆÿ©§žâ©§ž2˜ž››ËôéÓõ @ùYZVJi4&L˜À„ hܸ1õêÕ+ÐC|q,_¾¼ÐùŸ~ú)Û·o·0ÊÒAÉ9²×ùÍoÍš5ôéÓGŸ¤¸e˲ïë¼Á˜²TŸ•X°`þþþtèÐÖ­[Óºukƒù©©©Lœ8Ѭ-”fö:G .ÄÇLJnݺQ»vmÞyçb¯[êÕµkר¶míÛ·'""‚É“'ëç%''[-AàĉŒ5ŠÁƒÓ¤Iœÿ¿½“––ÆÞ½{éС*•ªÈùy{{ë¯{ÐŽÎÀ7¬«Ž’ó«ä,‹í %¬q¿Òh4,X°€1cÆàããÃèÑ£ æ'''[-Aìí—¥ï2%e¥DYûÔh4|þùçLš4 OOOFe—8,m_YBI»ÝÒÿ‚öy¯¾újéƒfðàÁ€öžÑ§O3H!„B!DYÔ¾}{£ï|vïÞMnn.þþþDDDX5±Ë–RSS)_¾¼ÁsT@Ÿ°l*¡ëþy*T°M€v0cÆ ™:u*AAA,]º”gŸ}Ö ‰/?¥eõûï¿óá‡âììLdd$³gÏÀÅÅ…®]»ÚçpÖäïï@\\œU·[”ääd}bž1...úE]\þí¤]i9çåå±~ýz† Bdd$“'OÖw¾¨{¸{÷n£Û­Q£?þø#AAAÓ]]] õt Øö¡ON^¿~=ãÆ###ÃìítëÖ Ð>››5kV‘ô=lׂ®ŒïÝ»@íÚµˆ‰‰)ô÷÷“r.œî~qíÚ5³×•û†uéêºZ­6˜®+·¦M›rþüù"·S®\9«'(çwúôiÞ}÷]æÎ˼yó %88˜Š+J‚²B!„B!„¢Ä”™eKefe’‘‘ɽŒLn%Üáò•ëœüû·îÚ;4›¸qã/¿ü2½{÷¦yóæT®\ggg’’’ˆ‰‰aÍš5F{ôÖý¾uëÖ„‡‡ãç燆»wïráÂvìØÁ¶mÛŒ&Hi4æÏŸÏöíÛéÞ½;õë×ÇßßRSS¹rå Ç'))ɪûU"''‡>ø€'žx‚.]ºŠZ­æÖ­[>|˜åË—ù2-::'''êׯ··7ÉÉÉœ8q‚eË–™ì]ÜÒ²²†{÷îñî»ïÒºuk:vìHXX>>>dgg“À¹sç8zô¨MI_{í5›mÛZ”œ#{ž_ÔÔTÖ­[§O)noûe­>[*77—)S¦°{÷n"## C­VÏþýûY¾|9‰‰‰öÓjìuŽrssùòË/Ù±cÝ»w'""òòòHNNæÆüý÷ß>|¸ÔÄ|¿éÓ§síÚ5Ú·oO`` ™™™\¾|™½{÷Z}TË—/ë áççG^^ž>9°cÇŽdeeº;wîpâÄ ƒ$6[¡äü*¹Ëb{C kݯ~ÿýw’““éÑ£Õ«WÇÃÃ{÷îqáÂöìÙcÕúlïk¿,}—))+¥û-k߃'OždøðáôìÙ“ àïï——÷îÝ#99™;wîpåÊ«—U~–¶¯,ei»ÝÒÿ !„B!„ù999Ñ¢E Þ{ï=Þ{ï=“˶mÛÖ A9ÿs&GGGÛi]¢Õý Rº÷Yiz†h ëׯ'99™¹sçâïïÏ‚ èÓ§Ñ„*¥e•””ÄöíÛéÔ©=zôÐ' vêÔ ooorssY³fÂ#2ƒ­:›3E—ä]¹reÜÝÝ‹LÄÌÏurÕªU 2ZµjÅÎ;quuÕwâi¬³N¾ùæ‚‚‚ÈÈÈ`Ú´ilܸ‘[·n¡V« aîܹT¬X±ØÇbk§OŸ&==www"##iÚ´)Ë–-céÒ¥ÄÇÇ{;;wî¤Aƒx{{óÃ?0vìX6lØ`rù‡íZÐuì !Y—°lî(¿RÎ…Ó%×;9™ÿS.¹oX—©rÔ•snn®¾]Q˜üOØB½zõ8p Ý»w×ïëêÕ«6éÀZ!„B!„B!L)3 Ê}þ­EëmÞ¾ÍÛ÷Y9šÒ---E‹±hÑ¢b¯£Ñh8~ü¸Ñ‘´ÌqñâE¾þúë߯¥4 ÑÑÑDGG[´~ll,?ÿü³Eëš[V@Qžï7tèÐbmg÷îÝ&{·5fË–-lÙ²¥ØË[‹Òý0@Ñþ-9GÖXW§¨ó]]Ì111FG‹4¦¤ë³5ìÚµ‹.]ºX´îž={سgÙë)­W–²G}¶Æ=çØ±c;v̬ýêXZ¯¬u޲³³‹ý}j­ûsvv¶Áfyäý‹î»w‹î\åý÷ßç­·Þ¢M›6œ;wN?Bƒ­(9¿–^ƒP¶ÚÖ¨JÊÊšÛ0‡=®}(›m3%e¥„%uÂZ÷:Kܼy“y󿙽ž5c¶¤}¥”¹ív°ìÿƒk×®eíÚµf­#„B!„âÁôØcáááQ¬eÛ´i÷ßþû7++‹¼¼<ñòò²8†¼¼<ýg[¸xóæM"""¨\¹²Ée*Uª¤ÿ|ëÖ-›Æc»víbÔ¨Q|ûí·T­Z•yóæñÜsÏH°³FY-]º”N:FXXgΜÑ?ÃÙ¼ys±FcÕ%ާn'f[Ð=óstt¤}ûö¬_¿¾ØëZ£œcbb8vì 6¤wïÞìܹ“¦M›âââBzzºÑgNÔ¨Q€ñãÇ<+ÊÎÎæôéÓ¤¦¦ëJ*‘ÿ—_~á÷ß§oß¾<ÿüó„„„0jÔ(^yåþøã/^ÌÁƒ‹ÜΘ8q"óæÍ£fÍš|ùå—8::²nÝ:£Ë?l×Bff&ðobrJJ ÞÞûGÎu IDATÞfmGʹpW¯^¥~ýú„‡‡›½®Ü7J†®œ7lØÀ˜1c,ÞŽ’vŽ‹‹ ‘‘‘ 8úõëë§8p€ m°}!„B!„B!„°µÒÕmµBÅ|}}yþùçíKy!DÙõÔSOÚòÿýw‘Ë7jÔˆÇ{ €%K–Ø46!„x˜HûJ!„B!ÄämÛ¶üúë¯ÔªUËèŸÚg’÷'"ë’½t K–¸wïžþ³’Dçâ8räµk×6™ØÕ±cGÒÓÓ9}ú´Íbéܹ3/½ôÁÁÁ6Û‡)ÑÑÑ|öÙg4hЀ·Þz«À2Ö(«]»véGîÓ§+VäñÇ`ñâÅÅŠUW?<==‹\Vs½zõ ,Öö­áÏ?ÿäÚµkŒ1¬Å­U'uåÙµkWüýýéܹ3 í$Z7Rk~þþþúÏJëùý ­¶”’’Â÷ßÏO<Áˆ#Ø·o*•ŠÈÈH–.]ʆ èׯ_‘±\¹r…¨¨(Ž=ŠJ¥â‹/¾ [·nF—}Ø®]‡¸¾¾¾úwVuëÖ5û-ålš®SÑ:uêdÖºrß(™ïP]9·jÕ WWW‹·cI;§R¥J¼ýöÛìÝ»—iÓ¦Q¿~}233ùå—_ˆŒŒ¤ÿþlÚ´I’“…B!„B!„%N”…¢Œ«Zµ*AAAøûûÓ¢E >ÿüs|}}9zô({÷îµwxBˆ"¼ÿþû <˜¦M›R½zu*W®LÆ ;v,={ö`çÎ…Ž ÉÂ… ùðÃqsscéÒ¥rý !„Ò¾B!„Bñ0Ó%n8q‚ÜÜ\£þüóOòòòP©T4oÞÜ`ýãÇÚä&K“Œ®_¿^ [Y½z5¹¹¹¨T*££!Ö¬Y“^½z°fÍrrrlÇðáÙ5kãÇgõêÕ”+WÎ&û)Ì?ü@tt4C‡¥uëÖó­QVyyy,[¶ €Þ½{3|øpT*çÏŸgß¾}ÅŠSW? (tÙü1ÿ÷¿ÿE¥RkJåååñý÷ßP§NÞ{ï½b’i­:¹aÃpvv¦ÿþú„GS£9ß¾}[ÿ¹^½zÅŠÕ”¸¸8*V¬HÅŠm«¸òòòˆŽŽæù矧[·n,[¶ŒŒŒ ˜4i{÷îå‘G)tIII 8C‡¡R©˜1cMš4)°ÜÃv-\¾|€*Uª°iÓ&ÒÓÓqqqaÚ´iøøøàääT¬íI9·fÍ}'Ó§OçÙgŸ% ooo6lÈ„ pvv.r¿ã}£¤¾CW­ZENN~~~|ðÁ§˜ÛÎyöÙgÙ¾};#GŽÄ××—¸¸8¦M›FË–-?~|±:ºB!„B!„B[)ÞÛ!„¥Ö°aà ¼°eÊ”)vŠHQ\*•ŠfÍšáââbr™sçÎñõ×_ºWWW¹~ý:?þø#Û·o·r¤Bñp‘ö•B!„Bˆ‡Uùòå ´ ʦ¤§§sîÜ9jÕªEëÖ­Ù¼y³~ÞŠ+èÒ¥ *T`áÂ…Ìš5‹ØØXÔj5•*U*V2Ï… HHH |ùòüç?ÿA¥RqæÌ@›dªíW©ëׯóÝwß1bÄz÷î»»;?ÿü3ÉÉÉ4lØW_}'''‹|V«D÷îÝõŸ}}}iÕª•É„0[zûí·Ù¸q#*T`Ê”)têÔ‰ôôtÀzeµlÙ2F…ƒ `þüùÅŽñСC888ðí·ßòõ×_“™™IµjÕfÚ´iúe¯_¿Îܹsyùå—騱#¿üò ,àÒ¥K¨T**V¬h³¤åE‹ѵkWš6mÊ‹/¾HíÚµY´hçÎC£ÑвeK£ëY«œ³²²X¸p!o¼ñ#GŽD­V“˜˜ÈŽ;Œ.õkר\¹2&LÀÍÍ}ûöqçÎÔj5~~~¸¹¹ëØ= €££#Ó¦McæÌ™äååBpp03fÌ(Öv,õÏ?ÿðÞ{ï1uêT¢¢¢8p \½zµÈu3226lK—.%<<œÙ³góÌ3Ïè“táá»t÷ß°°0\\\HJJâÃ?dÊ”)tìØ‘£G’••Uèû®ûI9/“1cÆðý÷ßãááaÖóè‡ý¾QRß¡qqqÌœ9“1cÆÐ·o_š7oÎ’%K8þ<·nÝB­VÌc=Æ|@nn®Ñí˜ÛΉ‰‰A¥RqôèQ,XÀüarÛB!„B!„BQÒ$AY+©BÓ§OkïãXÏšnÞ¼‰iÓ¦ÁÔÔMš4Ayy¹êjIÜb×Uc>>ªÑ©§M›†#GŽÔÛºxÞ """""""""zBTî÷ñ¿Ï‚{õê5R"‘dJ$’\¹\ž ÈÄĤ¤   T*•–ZZZÊKJJÊå kkk…³³³¢M›6ŠE‹iô$)ÕÏ–‘¾899aÆŒ€5kÖ8jÌvïÞ¿ÿþR©«V­bçý0a€\.ÇåË—ëm=11S§N­µü´iÓ`ii)¨—ÖV­ZaÞ¼y077Ç矎óçÏë¼,ª§§'BCCѺuk8;;£¬¬ )))¸yó&.\¸€“'O .+´]5TÛ¶mƒ‰‰ ¾ûî;&IÔ£†\Ï<_5\b\¨vk×®…¥¥%6nÜÈåFBÈu¿¡{Rï7ˆ´õ¤ ùžˆˆˆˆˆˆˆ¨¡),,Dvv6,,,pÿþ}£GFóæÍáè般¬,\¿~ÆÆ| IW&&&øòË/ñôÓOÃËË ŽŽŽ055EVVbccqàÀìܹ¥¥¥¢®—ç """"""""""‚Oô@"‘ÀÕÕ>„B¡0t8 Vxx8ÜÝÝS¦LÑ:áõ\wþþþX¶l™FÏ»ÖÖÖðõõ…¿¿µ‰JBÊ=)„ž¯èÉÖ¯G1fª;^»‰*ð\GDDDDDDDDOº×^{ÍÐ!п@qq1vìØ;v:”'JQQ¾ûî;|÷Ýwz]/ÏDDDDDDDDDD$D£IPnâ숮áÝÌöö¶Ëåx”™ë·nãÔ¹hÕX¾YSwôìÖ^žn055AVVþŽ»‰¨3PZZVoqwìØ .„L&èQ£PXXXoëbïÞ½8|ø°êïI“&aĈz¡¼¼¼ÊÏuÑX깡xóÍ7!“ÉPPP€M›6!::r¹ŽŽŽðöö­lChWDõAÈùŠžlñzÔcªeË–6lÚ·oGGG!55ÑÑÑØ»w/’““ÕæŸ5küýýáääKKKH¥R!==±±±Ø·oþùçõÌ™3ƒ BLL Þ|óÍ*c ÂÒ¥Kaaaõ2ú·ë~cÀû ª‹ùŽÇéSƒOP–H$Ð÷iôèÖR‰Dmš›‹3Ü\œ€µ›·#+'·Êet鈃úBR©¼³“úõ슶þ-±vË/(¬%ÁYW£Õ5D¥¥¥(--Uý]RR¢÷6oÞ '''˜™™aÍš5Z•m,õÜ4oÞ^^^€ï¾ûTM»ÿ>®^½*ZنЮˆêƒó=Ùãõ¨1Ƭ+‰D‚)S¦`ôèÑj÷…&&&°¶¶††ŠqãÆ©]³ºté'''µe™™™ÁÓÓžžž0`vìØuëÖém[êJÈu¿±àýÕÅ¿á\Çcˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆô©Á'(ÛÙX#¸S{H%܈¿ƒKWãñ( V–æèÒ¡ü[yÃÖÆ ÃöÁÖ_öh”÷twÅðÿ&'?x˜Š£Qg‘›W€Ö-[ O.hâ䀱ßÅÛ5Ë’~%$$àõ×_7tO¼&Mš¨>Ÿ;wNoe‰ž$<_5No¼ñ† ¸~ý:vìØ›7oÂÈÈ~~~5jîß¿_mRßo¿ý†íÛ·C¡PÀÚÚM›6ÅØ±c€±cÇâÁƒØ·oŸ>7©V¼vQ}hð Ê™Ù9ø}ÿQ㟛·Õ¦ÝˆODxèøù¶€Ÿos˜š˜ ¤ÒˆQðlŸ`H%dçäaÃÖ(*.ÜONAqI ?Ó­[z£©‡+îÞ¨·í"2”Ê#Çÿ÷xÐGY"""CêÚµ«*9ùÈ‘#X±bär¹jú½{÷pôèQXXXT»Œüü|}úàÙgŸ…¯¯/¬­­QRR‚¬¬,ܽ{ׯ_ÇÑ£GñàÁƒZc©ÍСC1sæLÜ»w“'O®qÞ   ,]ºxá…4¦ëzü mÏU©éz$DC¸î*ænݺ!88M›6…L&ãGpñâEüøãHMM­1]_]Mœ8ðàÁ¬\¹R-9¹²‚‚­–+—˱ÿ~´jÕ ...pttDFF†àx…ëÚÝŽ_}Ðf{Åûì3&(ýË5Šåš”””¨>—––©Mónæ©z™9îz¼FÙr¹×oÝA‡vþªDæ†ÀÈÈo¿ý6úõë§ö½§§'ÆŽ‹bÁ‚U>ðR¶>XXXà?ÿù<==‘––†÷ß_”d01ØØØ`ÅŠðòòRûÞÊÊ VVVpww‡T*mP Ê mÿÖ7¡ÛÛ¥K´jÕJí;'''ôêÕ ={öÄÊ•+qðàArX²d üýýÕ¾÷õõ…¯¯o1²]}õÕWprrªršrýfffUNùå—ªö½½=zôèîÝ»ã믿ƞ={4ÊM™2E• U™»»;ÜÝÝÑ·o_Ì›7ׯ_טGH= ‰VWºRWfff˜?>:uê¤ñ½««+\]]ѹsgäååá·ß~kzz:ÀÎήÖyíííiiijß =~ÅÞG ùzÔ˜Ïíj»¸¸`È!èÝ»7æÎ‹[·nUYNÈñ«‹æÍ›£eË–€íÛ·£¬¬¬–Ú©œliiiiðe¡Úñ[ßtÙ^1Γ@ã»–ézŸsþüyU‚rPPþøãe¨è$àñDVCÞ_鲯oooÕß^^^ðòòÂóÏ?¯6ßàÁƒagg‡E‹‰·.ã½7=Ù¤R)<==qïÞ½j;$""""""""""""""Ãiô Ê~/,§¥?BvN®Ú´&N€¢¢bdýwÚÀ~ÝÑÌÓŽDÒ½d¤¤V$88ØÁH*E¹·1|øp£O)Gâzî¹çPTT¤6oUÓ_zé%ÕKáÇÇü¼¼<`âĉ°µµÅ‡~ˆéÓ§«’#Ä(+6+++,Y²~~~HIIÁܹs5FSܵköíÛ§úûå—_FHHH–/´ž_xáxyy¡´´ßÿ=Ο?ììl˜˜˜ÀÙÙ-[¶lp£™éºµ©«Ç“¶„”Jh{þá‡PVV†äädäççÃØØ~~~˜>> QK8y\ChWqqq8zô(îܹƒœœ”••ÁÒÒÍ›7Ç?ÿhŽH?nÜ8UâÍ•+W°iÓ&$''ÃÓÓ“'OF@@^}õUÄÆÆ">^³³8yò$öíÛ‡¬¬,XXX M›6 ƒ¥¥%æÎ‹W^y …B­Œz#fmëJÈùJh]Íš5K•œ|üøq:t055…››Þ}÷]iKu”É•–––066®ñØV&ÞÕ×õHÛö\•º\„0äußP1+]½z{÷îErr2 }ûö˜0a,--ñæ›oâµ×^Ó(#Öñ«víÚ©>Ÿ:uJ”eVV9IõñkŠ!½v7¤ãWtÙ^1Γ†¸– ¥ë}ÎíÛ·‘žž''§Z”¯\¹‚òòrQÖ+ô\'t}ÿý÷øý÷ßñÔSOañâŀݻwã‡~@—.]ðÎ;ï 88Íš5Cbb¢f…ëYc¼÷&"""""¢úñôÓOcúôéðññ­­-Œ‘••…7nàĉؾ};²³³ë5†^½zá›o¾¹¹9QPPP¯ëû7‰ŠŠ‚‡‡GçŸ;w.~ýõ×zŒ¨~5„öl-[¶DXXºu놦M›¢¼¼‰‰‰8~ü86n܈¬¬¬jË!,, cÆŒQý6“””„C‡aýúõÈÏϯ÷ømll°uëV´iÓÓ§OÇáǵ*ßµkWôë×]ºt‹‹ ÒÓÓ1bĈzŠV]XX>üðCÀ{gŸþ¹Úy;uê„)S¦ C‡°°°À½{÷ðÇ`Íš5z}WA›˜+ÓW= iÏ€8õܘۤ6t­«¡C‡âË/¿¬qÙo¼ñ†Æó###ôïßÇG‡àèèˆââbܾ}GŽÁ÷ßÜÜÜj–(,f""""""""""G£NPnÖÔA/2úó´Æt늑* +^>oáå^Á ^ÃöÅ×¶©¦I¥°°0Gnžð‡i …B5²såd…ÒÒRµŸ«Ò¤IŒ3pèÐ!¬X±B5->>W®\Á·ß~ kkkL˜0«V­¥¬ØññÇ£E‹¸wïæÍ›We2˜\.W«“Ç“j"¤ž M›6€cÇŽaÇŽjÓÒÓÓ5Fn34!ûWH] ­g]‰ÑžÏŸ?¯ñÝ™3gp÷î]¬[·¦¦¦èÔ©Ž;¦šÞ¢E ôêÕ ðË/¿`ýúõjë=zô(vïÞ cãªOŸ ¡]?¾ÊÑoܸ¡ñ““&Nœ "iï£>R%èdeeaÞ¼yظq#1fÌ|úé§U®óƸté’êïk×®!//3g΄§§'Z·n­¶íBêY¬˜µ­+!ç«Ç—­M]ùúúª’…öî݋իW«-ïæÍ›˜;w®¨ ÊÊóµD"ƒƒƒêïÉ“'£M›6ظq#®]» â|)))ªòb^´ÙGU©ëõHC]÷ se.\@dd¤êï7n   3fÌ€¼½½‘ š.æñ« åËv)))¢'K$ 0pïÞ½Z_‚ч†Ò&…¿ú ëö =OêZ&”ûœ¿þú ƒFÇŽadd¤v522R%¨^¼xQ´õ 9ÄØG©©©(,,ÄÙ³gq÷î]4mÚ—/_FNNŽ9‚±cÇ¢E‹ð÷÷7x‚rc½÷&"""""¢úáçç‡îÝ»«}çìì gggtïÞ3fÌÀ»ï¾‹ýû÷×[ –––077¯·åÓ¿GChÏú$•JñöÛoã•W^Ñxv€€€Œ3Ï=÷øà´oß^í{™L&Vx59r¤ª³ÂÚ¼ð X¼x1¤R©ê;___̘1ƒFhh¨^ž9h³’¾êYh{Ä©çÆÜ&µ!¤®,--uZç7ß|ƒþýû«}gllŒ¶mÛ¢mÛ¶3f BCCÕž±ˆ3‰CZû, “ƒ½-ÂÆƒDÄüs ±×5G¬251ÌÌþ÷¿ù?Tê-ÓÔÔ¤>C®“gžyR©eeeøá‡4¦'%%©zbíׯŸÚ‹ÚBÊŠÉÓÓ+W®D‹-pãÆ Ì™3Gôd01({Ânݺ5lll MíÊþÕ—úÜÞ{÷î©Ú¤›››Ú´>}úJJJ¡Q¶¼¼\ctÛÊ[»êׯLMMQVV†¯¾úJcôÀ¢¢"ìÚµ T#øÖÕ±cÇTuÕ²eKµiBê¹>c6”šêªoß¾€âââ*…ú““£ÂÉÉ @Å C† A›6mðôÓO«æU&ÞU~èßPÎWázÔPêJLþù§ê³ŸŸŸÚ4C¿ÖÖÖÄÝX"‘ÀÊÊ íÛ·ÇâŋѡCÐHœlŒžÄ6Y]·Wèy²±^Ë„Üç(;3°²²R–¬ÔªU+˜™™¨èø@ÌõêJì}¤<ÿTq½òH܆ÖXiˆˆˆˆˆ¨~åçç£wïÞèÝ»·ªƒ®””XZZbõêÕ6l˜¡C$ 2AAAjÿòòòË—/ט¶{÷nG,ŽK{vwwGxx8ŒŒŒ‰™3gbĈx饗päÈ€««+.\Xeù ¨’“¿ùæôîÝ={öÄÂ… QPP///¬Zµ ‰DôØŒŒŽ={öè”úÜsÏáÇDûöíqçÎ|ùå—˜4iúöí‹gŸ}VôxשS',[¶ …¢ÖŽŽŸzê),Z´R©111˜2e F…/¿üåååðõõ­W±bVÒg= mÏBë¹±·Im­++++ÀÙ³g5®#ÊU:½gÏÄÇÇãÓO?Åøñã1dȼôÒKØ»w/€Šäð¹sçÖKÌDDDDDDDDDD$ŽF™Qàè`‡Éac`iaއ©éرçP5s*ŠU¼Ð|3>·n'ÁÓÝG£ÎVÌQ΄ܹs§Ú$ªsçÎaðàÁÉdðööVŽ&¤¬XZ¶l‰1cÆÀÖÖÑÑÑX¼x1 +%7$¿ýö:uê„fÍšaãÆØ»w/>Œû÷ï:´*5„ý«Obl¯¥¥%†ŽÎ;£I“&°µµEQQjÿ'm¬÷ÞDDDDDDT¿är9îÝ» ¢ªË—/#""ëׯGçÎñÉ'Ÿàüùó ®cHª™2¹2åo§EEE¢uôØÐü[Úó½{÷ðÁ ''ÇŽS›…õë×£oß¾èÛ·/,,,T1É cÆŒP‘œ¼bÅ Õ´­[·"%%ß}÷:wîŒîÝ»ãäÉ“¢Å‚™3gÂËËKk¯^½ê\¾wïÞX²d ÊË˱hÑ"DDDht:XŸ±zõj˜˜˜`áÂ…˜={6ìíí«ÿÍ7ß„‘‘>|ˆ°°0äææþþûoäççcÞ¼yxæ™g„èèè3 ÿzÒžaõÜØÛ¤¶„¶IåoÀZ]GöíÛ‡}ûö©=û~ý:¢¢¢`llŒAƒiŒ°,VÌDDDDDDDDDD$ŽF— ìä`ÉÆÀÆÚi™øþÇßPRRZå¼%¥%óÿŽÆUV^ŽMÛ~S›G9 @µËÑ'e"OM>+OSŽÈ&´¬Xzöì  â!öO?ýÔ _2¿xñ"/^Œ™3gÂÁÁãÇÇøñã‹ß~û 'OžlPˆÂþÕ'¡Ûëåå…O>ùD5ª¡’L&SK}‰'VãSO=…_|]ºt££#²³³qñâE¬_¿—.]ªu›7oŽ/¿ü^^^ˆˆˆÀgŸ}Vk™£gžyýû÷‡··7ÌÍÍ‘ššŠ'NàÛo¿­²c9™L†ØØXíC9:feqqq055ÅG}„M›6Õû6Ôµ=ÂÚ•™™†Ž ŽŽŽ(--Eff&âââpüøqüôÓO¢m×ï¿ÿ^í´={ö oß¾022‚««+TÓzôè©T ؼy³FÙ#GŽ %%...2dˆ¨ ÊÍš5ƒ——±|ùrœƒÓ¶Ãíš:¾té 333H¥RµçbGDDDDDDDDDD$ŒÔÐhÃÁÎV•œœž‘‰ [w 7¯ ÚùsróæfÕΣœV.—£ ÀðÉKu᯲Êó )+– . //‰}ô‘V=È™3g0qâD|öÙgªâxÿý÷±fÍx{{8ÂÿiûWŸ„ óçχ““Š‹‹ñÝwßaâĉ:t(BBBðúë¯W›¡\NYY™Î±7Æv%—ËQZZZ뿺&íÕFH=*fC))©èlCùBˆ¾Ü½{ÀÿFþìÙ³'²³³±mÛ6‰x2™ vvv(..FJJŠªlC8_5–ëQC¨«ú |AàñD4C¿>PÑžÍÍÍu^ÎöíÛ1fÌ„„„`ðàÁxá…ðñÇW›œ¬Ü_5¿•§5„ýû¤¶ÉêÙ^1ΓñZ&ä>çðáÃ*’R•IÉ2™L5Zñ… êe½ºhÌûHùÞ›ˆˆˆˆˆˆô/%%E•\:dÈ*çéÓ§:vìOOOXZZÂÄÄ®®®:t(¶oߎçž{®^b{çw°sçNŒ1®®®011““ˆíÛ·c„ µ.cÞ¼yhÓ¦ ¬­­1}útÕK¬]‡[[[˜ššÂÓÓãÇǾ}û`èðê¬.íYH»jß¾=8€¥K—¢_¿~ªòððð@ÿþýÑ¥K—zÙ¶ªäçç«>?Þ¹«ò·Î‚‚¤§§k”U(8}ú4€ŠŽýÄ©S§âÙgŸÅþýûµ*;aÂØÛÛãÌ™3‚Au=ö_}õUtïÞçΫS‚p·nÝTÏ”¿™VVVV†?ÿüT ˜†Ž¯žÅTS{ZÏ ¡M eeekkk×ûì3L::/_, aÿê“íõññ——`åÊ•8~ü¸jZYYnݺ…‚‚ªÏuYo]4¶vYmðõ¹^]êÙP1?N×ó•¶RRRàçç§÷ÄöÄÄD€««+Z·n ìÞ½‘‘‘xå•WУG\¾|‰IIIj‰J á|%ôz¤+}^÷Å¢ÏQÝ uüÆÅŨ8^»té‚ÈÈH–SRR¢¹.”/Ã(GB¯JåQ«»6éSCh“ú$d{Å8OúZ¦+]ïsôïß.\@`` LLLPXXXëH3Bî¯t=?‹µâââPXXØ`G nì÷ÞDDDDDD¤§NBhh(<<<àîMÿâ‹/PVV†¤¤$äææÂÄÄíÚµÃܹsáããƒÅ‹ãðáÃj#-Þ¼yS•Ø:`À¬Zµ @E‚Òã‰gååå1M›6 Ó§Oœ={Ë—/GRRZ´hÿû¿ÿC‡°`Á\ºtIÕZUÜÜÜÔþvwwçÈ‹U8wî"""p÷î]( <ýôÓ˜9s&¬­­±lÙ2 >ÜÐ!ÖYMíYH»jݺ5¶lÙKKK”——c×®]8zô(’’’ ‘Hàè舠  ½¶¯nݺ…äädµiÊãÌÂÂUþ¦£L>û÷œ´´4=zT§²cÆŒPÛš5kàïïgggäååáÊ•+زeK£Ç*érìûùùaæÌ™ÈÌÌÄìÙ³«<7=®eË–€œœU[›;w.:vìˆeË–áÒ¥K¸~ý:€Š’«íàO_1âÕ³˜jjÏBë¹!´I}£M:::Š‹‹!“ÉP\\¬S,ÖÖÖhݺ5&Mš„¢°°Ÿ|òI½ÄLDDDDDDDDDDâh4#(ü š89   ßÿø;róòk-s;ñž* u+ÍÄ.©T ?Ÿf€ø;wÅ ø¿*ÿèniiYëü111€-Z¨½^Ypp0 ¨¨ ¢”­.n3³êGŸ®Nrr2Þ|óMÄÆÆB*•bîܹèÙ³gÊ*×kaa¡Õ:µ­çꤤ¤`óæÍ˜9s&ÊÊÊ`ee…gŸ}Vçå‰IÌýk(Ú´+!Ûkoo¯ú¯UŒÊõ¶jÕ NNNZ•­NchW:t€L&Óûzu©gCÅü8]ÏWÚR&k¹»»ëµwç;wî¨H¼{æ™gÇŽCZZbccѦMU/ìÊy•ÊùJÈõHWú¼î‹E¬kh]êø‹‹S^;nܸzïX@I¹Nww÷jϾ¾¾€ììl—, ¡!´I¡ôu¿!ÆyÒÐ×21h{Ÿ³gÏ#NÛÛÛ£{÷î*^îÔæ…%m׫ëùY¬}´nÝ:¼ÿþû8þ¼àeÕÕ¿ñÞ»{÷î;v,ž‰ˆˆˆˆˆô òÿ =<<4¦ÿùçŸ8yò$’’’™™‰ÔÔT9rÓ¦MCyy9d2z÷î­VF¡P ¸¸ÅÅÅjID%%%ªï«šT$KΚ5 pèÐ!„‡‡#::¸pá&Mš„””áå—_®qÛ*”™™™©1–ÔEEEaß¾}¸zõ*þþûo¬Y³K–,ÀßßßÀÖ]uíYh»úè£`ii‰ÂÂB„……áwÞÁ‹˜˜DEEá‹/¾Ð[¢b§NX¾|¹ÆôÊ Ö ¨rÙÙÙssózˆP{ÎÎÎðññ >ýû÷‡‡‡LMMáàà€¾}ûbÓ¦M˜={v­ËÒöØ—J¥X²d ŒñŸÿü©©©uŠYùû›²ƒ†®]»bÚ´ièÔ©-Z¤Z?«F¦5dÌbÖ³XjkÏbÖ³6b]ÕFŒºR&ËÏ;±±±ˆŽŽFDDÂÃÃëô<ÝÆÆñññ¸|ù2~úé' <ׯ_ǸqãpñâÅz‰™ˆˆˆˆˆˆˆˆˆˆÄÑ(”=Ý]Ñ®M+ÀŽ=‡‘‘™UK‰ yùªÄãžÁ!“™ªMîÜ––?„_¹v]Ĉÿ§òŽ;Ö:ÿ±cÇP^^###„‡‡kLoÖ¬™ZDå‡ïBÊ>N9òX“&Màìì\kÜËËËûヒk×®ÁÈÈï¾û.Ú¶m[k9e}9::ª½è^×r@Ýê¨xQÄÄDäæVŒ¸mkk[ë²zô興lÛ¶­ÞÅÜ¿†¢M»²½ÊM@EÐÚ¨¼Þ7ÞxFFFZ•³]éÑ#GPVV[[[¼öÚkZo¯®„Ô³¡b~œ®ç+m;vL5Jáܹs1`ÀØÛÛÃÊÊ þþþ˜>}zíNWwïÞEYY\\\зo_'** YYY066ÆÐ¡CUI¯5½„)Æzµ=×5Ö}TÙ¿áÞ»²qãÆaÁ‚˜2e V¯^­6B=‰Oùÿq@»g·oßVtèåå%Z<#GŽ„L&Cii).\¨1"hAA¶lÙ‰Ñûî»ïðúë¯céÒ¥ Qû¿/ÕlïÞ½ªÏíÚµ3`$Ú©®= iWþþþª W¯^¿þú«¾Â¯///|ûí·H$8xð >¬1ÏÙ³gU-Ο?_Õœ©©)ÜÜÜ0hÐ ÕoD•ëÌ*'ÂoݺÏ?ÿ<ºté‚ÀÀ@Œ;V5šðŒ3ЩS§—¥í±?a´oßQQQصkWcV&kæää¨1VIù›VåÑåkJîÔWÌbÖ³êҞŬgm4´ºª 1ê*!!—.]BBBŠ‹‹accƒnݺaáÂ…Ø·oŸªÃÞê( gN-[¶ÄôéÓ«ìtÔPû—ˆˆˆˆˆˆˆˆˆˆ4‰ŸÑTzW¼@žt?‰÷À̬ê¬*zÕ.QûîðŸgàݼ)ìl¬19l4ŽFE^~!ü|›£oÏ®€n& é~r½Ä~÷î]deeÁÎΓ'O†‘‘‘*A¡Y³fðôôÄúõëU󧦦â×_Ÿqãðì³ÏÂÜÜû÷ïG~~>üýýñ /ÀØØ¹¹¹ˆˆˆP[—²SöŽ,‘H0wî\DDD@.—ÃÍÍ ®®®Ø¼ys­Û^\\Œ `ùòåðööÆÂ… 1kÖ,ÕKUQ&òH$,X°())‡‡\]]±iÓ&Qê–,Y‚ÒÒRDFFâÆÈÌÌ„±±1š4i‚¡C‡ª¯_¯9yÝØØo¿ý¶ª—èÙ³gãüùó¢'숹 E›v%d{ããã‘’’LŸ>2™ —/_FNNLLL`kk[íHr©©©øå—_ðüóÏ#88Ÿþ9~ÿýwÜ¿R©ÎÎÎJ«ïÛA¬v¥/éé騶mÂÃÃ1hÐ ´k×{÷îÅÝ»w‘™™ SSS¸¸¸ 00_}õ•Æ‹ºRφŠùqºž¯´U\\ŒO>ù}ôÌÍÍñÖ[o‰²ÜÚ”••áÎ;ðõõ…µµ5~ûí7Õ´ÈÈH¼úꫪö|óæMµ² í|¥ËõHWú¼î*f! yüîÚµ =zô@`` BBBàããƒ]»v!)) …Bõ¢˜˜nݺ…k×®¡mÛ¶x饗 “Éð×_!77Íš5CXX˜ê8Ú½{·èë×ECh“Béë~CÈy²¡\Ë´%Æ}Nii)vïÞððp„††ÂÔÔ¹¹¹5¾ )Æzµ=×5Ö}TÙ¿áÞ»²Ê/ÛÚÚª^´$"""""¢ú!—Ëkœnmm & wïÞððð€ƒƒ ˜˜¨ú¿|uÿ_ÔE—.]ÑÑÑÕŽzëÖ-€ƒƒTƒVåÀ¢Åöo’ŒŒ 8::êÔ ¶¡Tמ…´«®]»ªæùõ×_Å WkÍ›7GDDðÏ?ÿàí·ß®r>¹\Ž9sæ`óæÍ°³³Ã²e˪]¦2)ÐÐ*ŠºpáBµiÑÑÑGTTìíí† .Ô¸¼ºûvvv˜3gär¹jäðºRv ªP(TtÞxòäI<õÔSøâ‹/Ôæ© }Ä,v= Q×ö,v=ו¡êÊÜÜ&&&jß)[577×èÐ1??_õ»¶u5uêTÕg###´iÓcÇŽÅóÏ?///lܸDaaa•åsssáçç;;;x{{cÔ¨Q ÅСCáåå…qãÆ¡¤äïƒjÿ‘¦F‘ Ü¼©;ÀËà óßš^í|yùødÕ:µïî=xˆ½ÿÄð}àáæ‚ðБjÓSÓá×=š½©ŠE¡Pàûï¿ÇìÙ³akk‹Y³f©MÏÉÉÑHúùþûïáää„~ýú¡GèÑ£‡Úô¼¼<,X°éééëR¶²Û·oãÌ™3F»víÔz¸ÎÎήS‚2PñPcþüùøæ›o`kk‹ `Ö¬Y(..®rþû÷ïãøñãèÛ·/ðñÇ«¦åääT›ð§m=K¥R´nÝ2™¬Æ^iÏž=‹ÈÈÈ·ÑÆÆF•œ T¼ ïììŒädñ“ÞÅÚ¿†¢m»Òu{ >ýôS|ôÑG°²²ÂŒ3´ŠsË–-°µµÅàÁƒÑºuk¼ûî»u*'f»Ò§mÛ¶ÁÔÔ¡¡¡pwwW{xXÙ¯¿þŠ{÷^]ë0\Ì•éz¾ÒÅÕ«W1cÆ ¼ôÒKèÔ©“êár~~>NŸ>~ýúÁÈÈHõV,7oÞ„¯¯/ …ZÏã¹¹¹8uêz÷î …B¡zù¦²†v¾Òöz¤+}_÷ ³†:~ æÏŸùóç£cÇŽסú²|ùr,[¶ ...˜8q"&Nœ¨1Ï–-[påÊ•z¥® Ý&…Ò×ý ì<Ù®eÚó>g×®]xî¹çT÷ÐGEiii½®W—s]cÛG{Òï½—žž®6 GZZšNË!"""""¢º©œè”­6Í××›7o†«««Ú÷fffj‰[b&5iÒ@EBi|||­óÛÙÙÕ˜ LºËË˃£££ÚóÓ†®ºö,¤]¹¸¸¨–gÈßR[´hˆˆ¸¸¸ >>/¾ø" ªÿêÕ«2d¦M›†^½zÁÕÕ¥¥¥xðàNž<‰¡C‡ÂÅÅE£SFC©¼ïd2™ÆsŸ‚‚8pãÇGçÎE[ïôéÓaccƒ;wj]ùùùþ7ZwII &Mš¤6O呼kÚ_Ú³¡êùqÚ´gCÕ³¡êjùòå4hP•Ó¾üòKêäRìº*//ÇÕ«WqõêUœ>}_ý5<<<0nܸZß5ÊÊÊÂ¥K—péÒ%=z7nD`` ƯVÖPû—ˆˆˆˆˆˆˆˆˆˆ45Šes a/Ï]¼Š”Ô ô î/Ow˜š˜ +;WcoàÄ™‹(©æex±üñÇÈÉÉÁˆ#àããKKK"!!§N‚D"QK*+//DzeËTøüüü “É’’‚³gÏâ—_~AVVV•ëRöqŸ|ò &L˜€ž={ÂÙÙÅÅŸsçΜ9£sMÒÓÓ±råJ,Z´-Z´@xx8Ö­[Wíü+V¬Àýû÷Ñ·o_¸¸¸ ¸¸‰‰‰8}útëÕ¦ž•IJ=zô€¿¿?`kk …BÌÌL$$$ 22ǯu;=z„«W¯ª½ð¯|"61÷¯¡hÓ®„lïµk×0uêTŒ9íÛ·‡““¬­­QXXˆœœÄÅÅ «<""""""ª‘êsåN{% ¾þúk¸ºº¢¨¨Ë—/ÇÁƒ‘––™L///¬]»nnn¢Æ£Lv.//WYSSSQ×OÿóøˆœJ•‡PŽêÙPÔÔžÝÚÕã£{BÓ¦MUÉœ  «Jİ IDATS§nÉÉÉX´h‘Æ÷ŽŽŽxñÅ—.]9ZÝTNþ´³³CJJŠÆ<Êßü• çb;v,`ôèÑ=ztµó-Y²K–,Á×_Ï?ÿT¿%ÛÙÙU[N9Ò|YY™h)‰ÙPõ\™¶íÙPõÜêJ[õYW@LL Ú´iƒîÝ»×y0ˆŒŒDtt4‚‚‚ЫW/µ²†Ú¿DDDDDDDDDD¤©Q$(Ï_¢Ù›§¶îܽ;wï‹nN:…S§NÕ{1Ê*cÆ ذaC­óÖô Μ9ƒÖi½¥¥¥øá‡ðÃ?ÔiþÊêºÝ …W®\m´Â>øo¿ý6zõê…[·n!''G”åVGÈþ=qâD÷…˜e•´iWJºnojjª äÃèèhDGG×y~±Û•¶Â•¿}û6V¯^­U™ÚŽýÉ“'׺ më¹2]b„ו’6ç+1êJ¹Îʲ›6mªzÉ%33³N˨«ýû÷cÿþýUN»zõjκ¿ºî#1¯GBèûº/mÖ/F{ÖõøÃÉ“'qòäÉ:Ï/ôœ‘ŸŸ¯ó½PB®Ýú>~Ť¯û 1Γ†¾–Õ•Ø÷9>ÄÅÅáöíÛz[¯.ûYÛ}ôꫯÖi¾÷ß_«8tñ$ß{?îÞ½{xíµ×t.ODDDDDDÚ P‘ÈX¹Ã¿€€øúúæÍ›‡Ý»w«¦•––"66yyyµ._.—«>×e¤åÔÔT`ÿþý˜={v·ƒô§¤¤r¹R©ÖÖÖ†GMuíYH»R&NÚÚÚÂÞÞ^ôg8µ±²²Âúõëáâ₤¤¤:''×d„ J¥(//Ç¡C‡DŠT˜ÊGzxxT™ jbb "IQ,2™Lç²ÊÑ‹mllàîîŽhÌãçç¸sçŽhq ‰ÙPõ¬¤K{6T=ª®^ýuïvíÚ…¶mÛbÊ”)8vìXµeë»®îܹƒ6mÚÀÙÙY«r@Åy9((z™ˆˆˆˆˆˆˆˆˆˆê®auMLÔHuèÐ;wDDD8"ú7>|8€Š®þùÇÀÑÕÎÞÞ&Llß¾ÝÀÑ‘¶U¿M}ºAÄ,v=kK—ö,v=ו¡ëJõ]Wîîî SGÿ-Z´dee©}o¨ýKDDDDDDDDDDš˜ L$ÀСC±eË,Z´æææøñÇùpƒˆD÷Áॗ^B—.]àããá­·ÞÂÈ‘#QQQzï}Ÿˆˆ¨.š7oWWW899!88Ÿ~ú)ìííqéÒ%Þ;522™ Ë—/‡••Š‹‹±nÝ:µééééªÏíÚµÓy=•GBìÙ³g­óïܹeeepppÀÂ… add¤óº§NŠo¿ýóæÍÃï¿ÿ;;;—Eê®\¹4h,,, MííYH»ºzõª*IΜ9èÔ©“¨±×ä©§žÂ°aÃï¼ó-¯gÏžˆˆˆ€¹¹9ÒÓÓññÇ‹¦(RSS  ÑhWÍš5C¿~ýGŽ©qYú:öÓÓÓU¿‹N™2VVVjÓ_|ñE8::€Ú(ô†ŒYÌzÖ–®íYÌzÖ†!ëJWõYW;vÄSO=à>ÔUÿþýáïï8{ö¬Þb&""""""""""í:¢ÆÌÌÌ ...xðà6oÞŒ?ÿüÓÐ!ÑÆÈÈ]»v…©©iµóܺu «W¯ÖcTDDDu7eÊ0“’’°lÙ2EDDDDDDDDu!•Jáéé‰ââbØÙÙ¡cÇŽxùå—áããxÿý÷ñðáCµ2qqq¸ÿ><<<0þ|˜››ãÌ™3xôèd2`nn^뺑‘GGGüßÿýŒŒŒpýúu@Ë–-áíí¥K—ªæøð!¾úê+Ìž=ãÆC·nÝøøx¤¥¥A&“ÁÓÓ;wÆÂ… Q^^^íº•‰p`ooîÝ»cß¾}ZÕUmÇŽ8p š4i‚-[¶àÛo¿ERRd2ÜÝÝ%–×F—ö,¤]) |ðÁضm,,,°mÛ6ì߿ǎÃÝ»wQ^^+++´jÕ j£Õ 5uêT@tt4.^¼›*ç“ËåÈËËSûζ¶¶ððð@`` † ‚:2220}útÁ£1WÇÚÚ‰Dõ¹rLÊm(++CAAZ¹Õ«WcãÆpwwÇúõë±lÙ2$&&¢uëÖøôÓOallŒ¬¬,lÙ²¥ÆõëóØÿüóÏ wwwlݺ«V­BFFúôéƒ3fŽ=ªJtm1‹UÏÚÒž…Ö³¡Û¤> ©«/¿ü8{ö,îÝ»‡ÒÒR899¡W¯^‡T*Enn.¶mÛ¦VN"‘`ïÞ½øóÏ?qᤤ¤ ¬¬ Mš4A= âÜóã?Š3‰‡ ÊD;v —.]Â;w P( =Œ±uëVÁÍÍ ¶¶¶011Ann.âããqòäI>|eee†•¨A:xð ¡CÐÚÀ ‘¨ŠŠŠ——333¤¤¤àÔ©Sضm ÕÀÒÒ‘‘‘ßàƒ>À®]»4¦Éår¼õÖ[ذalllðá‡ê´n¹\ŽÏ?ÿü1ìíí5FlÍÌÌTKP€¯¾ú 2™ Ó¦Mƒ——æÍ›Wå²7lØ€Û·oW»î‡¢M›6ª¿+æLÂ;v Û·oǸqㄵk×êmݺ´g@X»ºrå ^~ùe¬\¹...>|8†®Q677WÔåÎ;‚‚‚jLÌKOOG×®]Õ¾{çwTIJ …GŽÁ¢E‹4’¸Åtúôé*GÖ®\7ÇÇ+¯¼¢6=22«W¯ÆŒ3еkWìܹSmzAA^{í5dffÖ¸~}ûW®\ÁâÅ‹±hÑ"bÆ jÓoݺ…¹sçÖº}Æ,V=kKH{Zφn“ú¤k]¡oß¾°°°Ð8w(effâ7Þ@zzºÚ÷>>>hݺ5Z·n]m\>ÄôéÓ‘““#ZÌDDDDDDDDDD$.&( ™™Ù Ñ“§¸¸?ÿü3~þùgC‡BÔ(1Ù—ÈðþóŸÿ:"""""""ÒÂõë×qúôix{{ÃÎÎÆÆÆÈÌÌÄÍ›7qâÄ lß¾YYYÕ–ÿ믿0hÐ Lš4 ÁÁÁpuu…òòò••…´´4ÄÇÇ#**ªÆ8~úé'h×®¼¼¼`aaÜÜ\$$$ 22Û¶mãG4ÊÞ½{sæÌA¯^½www˜šš"''7nÜPuj‘››+jÌDDDDDDDDDD$.Éÿ©Y´h‘$&&F’––&ÉÍÍ•x{{KÒÒÒ¤¦¦¦FùùùR¹\nbaaaRZZj ÀL*•Z* k…BaµëÂ… ªeuêÔI›cx¾¾¾†ˆˆˆˆˆˆˆˆˆˆˆˆˆ¨Z?ýô“ês§Ž•žçj<9&"""""""""""""¢FIQéóŸ÷êÕk¤D"É”H$¹r¹<@‘‰‰IIAAA©T*-µ´´”—”””;;;ËÖÖÖ gggE›6m‹-R<¾ ©~¶„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆžLP&""""""""""""""""""""""""""""¢:c‚2Õ”‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¨Î˜ LDDDDDDDDDDDDDDDDDDDDDDDDDDDDDuflèꪉ³#ºv„w3OØÛÛB.—ãQf6®ßºSç¢QPXT§å˜™É09l4Ü]› bÇ^Ä^¯çȉˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆž >AY"‘`@ß§Ñ£[GH%µin.ÎpsqFP`ÖnÞŽ¬œÜ—å`g‹Æƒ›‹S}†LDDDDDDDDDDDDDDDDDDDDDDDDDDDDôÄjð Êv6ÖîÔR‰7âïàÒÕ8d<Ê‚•¥9ºthÿVÞ°µ±Â°}°õ—=U.C*•¢K‡@<Û'f2™ž·€ˆˆˆˆèÿÙ»óè(¨³ã¿™ÉdÏd…$’°ï‚(QK…"‹‚V¤ m}K­ÔJµµŠK׊ ‚ˆ *ŠŠ "›ìûvaËž=3óþ‰I Àd&ïçœgî½Ï½ÏŒœ“;Ͻ׎Z_ œž™¥Ï¾úNùÚðh¹¾‡kÄ þj×XÍâÉÝlVaQQ¹1Ú´Ðoâ»((À¿,¦il´Óò®%FW'PÛwï¯Pœ\jÇž’JnI¶X|+ôú+(À_©éš¿ø+-øìë͸–Õú”/¥°°°ìqQQq…þ[w*éôY8tL6»]žžÎL¸¦Ôùå–Íâ$IÉ)iÊÌʮП}>·ÊÛ—\£«¸Ñ‘ Ô¡M IÒ·+×¹8àÚWg ”ƒý5ôÞ¾2¤=ûioÂaW§\óÜ\À• ÐCï‘·—ΜKÑ¢/¾uuJÀu¡Î(‡êa÷Èâç£äÔt½?ÿS¹:-àº`tu—#(À¿¬89%5]ïÎ]¤ìó¹®N ¸nÔ™ew Ô_?¥¥gjæÜO(Nœ¬Î(ßÝ»‡ê‡)77OïÏÿLÙçs\pÝ©Ê ÂÔ¶USIÒ¢/–+5=ÃÅ×'7W'Pñ7Ý IJL:­ã'OÉÓÓ£Òqv»]…Ú==<$Céc÷²v³Ù\6—ÍjSaQ‘ƒ3®-u¢@¹QdIRTÃp=ù—«w>'WÏM›Q¡ýo? w³¹Bû}wõ*{œpè¨æ,Xâ€l€k—ÑÕ T‡—·—«S :rƒò“ϾvUñO¿ð–ƒ2®ouâeµʪeÕF2€j£@@µQ   Ú(PPm(¨6 ”T››«J}ø»[ÕÐ×»Ò¾þ_|§Ì‚ÂJûéÐRb£+íûÏÆú6ñ”Ãr¸ÞQ ìFƒAa>^:““'›Ýîêtj½üb« m¶rmö‹¼oyÅVe•kós7ËP#ÙצÁƒ»:\ƒÆŒ£ØØXW§2|øp­[·ÎÕij€QÒW'q°KÒ¾ýUÍñÌ3ÏÈ××·ìùÔ©SuæÌ™«Ì uÝvm¯ñ5êLrýzÁêÒ±b¢#è/›Í¦´ôL%:ªµ¶)7/¿Fb¯Ö¡!úw·Žò4™ô»Ï¾U^±µÆÖºV¼µs¿>?’XíñÓw%hú®„rmŸõý==à2Ì™3G÷ÝwŸZµjåêTPÞ}÷]=òÈ#Z¶l™«S8›¤©®Nâ:`5ôVTÔUÏ!??¿²çîîîW='Pµ¾@Ù`0¨çíÝtK×d4”¿7<´žÂCë©C›–zgöÇÊÈÊvX¬£x›Ýäi2ÕÈÜp½óððPAA«Ó@Š‹‹õÑGéî»ïÖ 7Üàêtà`îîîzýõ×õÄOháÂ…®Nàž’^•ïêD®q…F£^iÔHÛ-W§\±Z_ `ñÓMÚËh0èÀácÚºsŸRÓ2äëã¥;¶U‹¦1ò·øªo¯Û4wá‹Ô~#FŒPBB‚V­ZåêTP›Í¦Å‹+77WÝ»wwu:p0“ɤ©S§Êßß_3gÎtu:€«à'é’8r´fåšLz!&F >>N[3..NGŽ‘ÍfsÚš¸öÕúåôÌ,}öÕwÊ/(ÐþƒGËõ8|\#õW³¸Æj×Hîf³ ‹Š ¨ý¾ûî;9R‡Ò©S§\N­wà 7¨Aƒ:zô¨vïÞíÔµ¿ùæååå©gÏžN[sáÂ…Ú³gºté¢Þ½{;mÝëÑäÉ“ —^zÉÕ©®@°¤™’š»:‘k\¦››ž‹Õq//§­Ù¹sgMš4I7nÔ´iÓdµZ¶6®mµ¾@Y’¶ïÞ_eߎ=Ô,®±ŒF£,_¥¤¦;,öJ5¶øéýž·ThÿæîŠ›¬[Î¥êÑU+§{ÃPÝ¥fþò4™t&7OëNŸÓG G”^Pxѧ/ž¨2>Â×GÿìÒ^ }½õÙáD½³;á¯Ú1±p9Ž9¢M›6iРAzóÍ7UXxñ½ÔëÝwÞ)OOOeee¹dýüQyyyêß¿¿ C¯÷ŸÿüGÙÙÙ »â9vîÜ©‡~X¹¹¹š:uªn¿ývfxm™0a‚4eÊn`€:¤¡¤÷$E¹:‘k\²»»žÕ§­ÙµkW=úè£2™LêÖ­›$Q¤ ‡1º:«uáærQQ±Óbk’É`Ð?nl§gnê¨Î¡!²¸›ån2*ÊÏGƒ›6Öœ^ñjXe|Ë ÍîÙ]ëÔFÝÂë+ÄËSf£Q^n&…y{éæõÕ¾^ÐEsøcÛæjh‘ÙMC›Ç¨eP@µó¿šX¸\Ë–-“$ 0ÀÅ™ :6nܨ Ô™/¾L›6M‰‰‰JIIÑÔ©S/;Þf³)11ñŠ v¯&ÖUî¿ÿ~M›6MnnuâÌ|¸îÅJš'Š“kÚIOO=Õ¤‰S‹“»uëVVœ|±¶ë™Á`PXX˜SÖ½ÕùÝ –Íâ$IÉ)iÊÌÊvZìÅËÊÖŸ–l€woª)]ÚK’ú-Y¡ü_m°Úìö ñhÝTwD5$}w┾8rRÙEEj Ñ-›(ÀÃ]ÏÝ|ƒÆ,_£ä¼ür±±þ~úo|gy»¹Éf·kyâ)­=uNI9¹2J ðpW«à@íI˸èk¨ïíYîy¨·—ö^"Ʊp¹ŠŠŠ4þ|M˜0A]»vÕúõë].a×®]ÊÏÏ×СCe6›]ÎE]Xh{¹_ÖYµj•þøÇ?*//O»ví’···Sb]­OŸ>òóó+ËP;µ•4]’S¯§´Xdž;W†V­Tüàƒ²-_~ÙS‡•Û¿þ%I*þûße[°À)ë^©ÃÞÞš£óN<Ü366Výû÷×±cǤÀÀ@Y­V;vLõêÕÓ]wݥŋ;-ŸÚ¨}ûözì±Çäáá¡¡C‡*??ÿÒA(§N(GG6P‡6-$Iß®\ç´ØK±K*´–œ^l½ ¹Èf+k¯J¨·—5m,IúúØIMݼ«¬ïPF–¶KÓ»wÜ,‹»Y£ZÆéÅ-»ËÅÿ¥cky»¹)ßjÕ_WoÒΔô kl<›rÉ×ðÃÉÓj`‘$eikrê%c WâÌ™3Z²d‰îºë.­üü|ýãÿ¸¬Øœœœ+.нšØÚ >>^sæÌÑ< ¬¬,W§ø•®’Þ”äÌã1 ‘‘rûßÿdhÑâŠç0Þu—Üž~Úéë^©Ý~~úoãÆÊ7ºîáÇõøãK’î¿ÿ~Ý{ï½ÊÍÍÕc=æÔ¨=zè»ï¾sèüY?ŸÈïããsɱ¾¾¾’¤ÌÌÌríF£Q÷ÜsÚ·o_®=$$DÝ»wW§N4gÎ%&&V:ïÿøGùûûWÚg2™.w÷êß}àáá¡#F($$D™™™š={¶ÓŠ“KeeeiÆŒ9rdß¶{þüy;VGŽQxx¸fÍšUVœ\WÝvÛmeÊëÖ­Ó Aƒ*ŒÙ´i“¤’Ïe‡œš_hh¨æÏŸ¯±cÇj›ƒ¾fô—‚gHnÕn)ùq‹”d’D2èIã]°®mÞ<Ùwí’måJÉj•®à÷ñ¦ d¼ùfÙ7lõçß…;cÝ+± <\Ÿ9é0Öê*ÝÓ²WVŒxî¾ûn5jÔ¨ìydd¤"##5pàÀrãî¸ãùûûWz˜oÇŽW®-88XݺuÓM7ݤ·ÞzKßÿ}…8???=óÌ3Šˆˆ(×îëë+___…‡‡Ëh4V(Pv„aÆiÀ€åÚÔµkWuéÒE3gάòÀÛ^xAÁÁÁ•öùøø¨qãÆZ·nÃs®)u¦@ÙÃÃ]Ãõ—ÅÏGi陚9÷“j_MìÕ²]ð‡Ö K_Çž’_ 8Ia>^UŽ óþ¥/í‚›’Ó %I~îfù{¸+óççp½9wîœ>üðC1Biii+ˆ”~)Pöôô”Éd’Õj­rliriL©ž={–'ïܹS›6mR^^ž¢¢¢Ô£GùøøhĈzýõ×+7K’ÁP²ÿ|âÄ mÛ¶MgÏžUnn®¬V«¼¼¼Zeqó¯yyyiÔ¨QŠˆˆPFF†fΜ©ŒŒŒjÅ:Z^^žÞ{ï= :´Â—Q%33S£GÖŽ;Ô°aCÍ›7O ~u‹Áˆ#4dȲç/¾ø¢fÍšU­ù›4i¢½{÷J’¾ýö[=òó ›7o–··w¹±&“Éa±Í›7Whh¨Îž=«µk×VZ ¼qãFIR×®]+Ä;C@@€æÌ™£ &hÍš5W=ŸïØ’âd{¡”ý?©`­dË fÉ*™[H¶Úwv=8•QÒ“’»h}{r²ìWq˜¬¡Y3™þïÿ¤ôt?òHI±±Ö½\vIïEDhEHˆÓÖ¬®Ò}‚‚‚KŒ¼2~ø¡¾úê+µjÕJ“'O–$}ýõ×úøãÕ±cG=ôÐCºñÆ©'N”‹]°`¬VkÙ^—ÉdR\\œ†®† jܸqÚ´i“²³³ËÅýþ÷¿WDD„ŠŠŠ4þ|mÙ²EYYY2›Í QLLŒòòò*äzâÄ \ò§¡K—.š8q¢$iÔ¨QïµÙlâ PVœ¼{÷n}øá‡:sæŒ4h áÇ«Y³f3fŒtôèÑ ñ¥{|Ð?þ¨ÄÄDegg«¸¸X>>>ŠŠŠÒªõ¾×u¦@ùîÞ=T?$H¹¹yzþgÊ>Ÿã”Ø«•oýåCècvSnqñEÇïJIW×°zŠñ÷S¨·—ÎæVüCpsƒú%s[u(3ë‚Ø4I%·0÷Šj »ªÜ»7 UCo­L:£39ó¨©Xu—Á`——— .Z¸ë ‡ÒÂ… uï½÷*''Ça›ù¥Å»ƒA~~~eÏ{õê¥èèh-[¶LÇ—¤²[yÓÓÓËâtóÍ7K’¶l٢ŋ—õ>}ZGŽÑC=$///ýæ7¿¹èÉî Ú°aC…ö“'OVëµX,9RaaaJIIѬY³\Vœ\ª°°PsæÌÑ¿þõ/‡Ï}öìY=Z Љ‰ÑìÙ³+'K%Å¿ð^N1¯Á`‡‡‡$ÉÍí—¯exxx”µ×D¬$Ý~ûíú裴zõjY­Öry[­Vmß¾]’Ô½{÷j¿GóööÖÌ™3Õ¼yó«žË½mÉó¾‘ræ–ﳞ“ w]õPç='©¿«“¸RF£Üž}VrsSñ¿ÿ-û¹s®Î¨JoEGkM` Ks°ÛíZµj•’““ËÚÂÂÂÔºukI%üÖ„äädåååióæÍJJJRÆ µk×.eeeiåÊ•êß¿¿¢££Õ´iÓ Ê[·n­0ߦM›”””¤W_}Uf³Y:tЪU«Ê)ÝgXµj•>ÿüór}©©©JHH¨4W»Ý®¢¢"I*·—YTTTÖ^•   ²b7lØ —^z©¬ˆ933SO?ý´Þxã ©_¿~zíµ×ªœkË–-•Þ²|èС‹æPÛ]@uD4SÛVM%I‹¾X®Ôôêo†^M¬#œ» À¸sè¥O?XžxJV»]&ƒAcZ5©ÐßØâ«žQ ËÆÛ~¹¡yZ¦e”,?Ъ©Ú„\ù_h÷7‹Ñ37uÔ„¶ÍõÎoºÉânvJ,€º«iÓ¦úÛßþ¦'žxBO>ù¤     rc:tè Ñ£GWZZvíÚ¥¥K—jèСjÔ¨‘CæÌÍÍ-;a¾´Ùh4ªsçÎŠŽŽVË–-ËÆ–ö§¥¥•µµoß^F£QV«Ußÿ}…ù“““Ën|n×®]Ýt¢ñãÇ+,,L'OžÔôéÓ]^œ\*<<Üás9rD¿ÿýï• ¶mÛêã?vÚçÐYúôé#©äÆîÒÛ’KíܹS¹¹%× ÇÇÇ;=· íÛ·Ï!óØ~þ¸º·–Œþ™®9_JÊ¿ä¨ÚÉ4l˜ íÛ˶j•l¿*B­mnIO—G%7î:ËŽ;4iÒ$½öÚke7‡……iòäÉe{M;vì¨ñz{×/Õøgsó´àÀQ i£ßE7”—›I_9¡óEÅj -âäf4(«°Hïï+_ o—ôÒÖÝzõÖ.òt3éµ[»è‡“§µît²NçäÊj³ËÇì¦Æþ~ pw×Ì=UŸÞ#ò—Í^wÝP?D?œ<]­×|5±ê¦ððp >\F£Q¹¹¹òòòR§NÔ¡CmÚ´IÛ¶m“‡‡‡zõê%___åç;ï«07nTpp°†®©S§^òôóêHKKSxx¸”˜˜¨ÈÈHyyyI’š5k¦¯¿þZRÉmÉRÉIí¥¢¢¢$•Üæ[UAðþýûÕ©S'™Íf…‡‡WûFäêjРn¹åy{{ëðáÚ;w® ¿g~%bbb4|øp‡Î¹{÷nÍœ9Séééºùæ›õöÛoËÛÛÛ¡kÔ]»vUhh¨Îž=«å˗릛n*ë+-XŽŒŒ,û ºÂO?ý¤qãÆ9d®œù’GWÉ-Fª·XÊýDÊûB*>qéX¸^¬–ô€¤ÿI²¸8—Ë Óĉ’Í&ë³Ïº:›Kj—•¥É‡ë…˜åÖÐá³Uyî¹çÊÝìîî®~ýúiàÀòôô”$9s¦Ò{kŠÁ`¨V›···~÷»ß©cÇŽªW¯ž,‹òóóuúôiùúúJ’<<*Ö„.]ºT:tPdd¤Þxã -[¶L?üðƒNŸ®¹:ÆÒCŠ8PVtýk¥{z‹E‹EYYY5–OmP' ”E–œXÕ0\OþåÁ*ÇÏÉÕsÓf8,Ölv»fî> ¿ÞÐZþîšÔ±u¹þ¬Â¢rÊ’4s÷ÕóòÔQ tkÃ0ÝÚ0¬\va‘&¯Ý¢”¼ŠöûÒ2õØšÍzòÆö ñòPÈêYñÄ眢â‹('çå«IÀ/ÿäœËË«r¬#cÔM·ß~»ŒF£/^¬-[¶( @½zõRÛ¶mÕµkWuíÚµlì¦M›ÊÝ(\Ó,‹Zµj¥={ö8¤8Yú¥@900PÒ/_HÈÏÏW½zõ¨ôôô²þ ”KOq¿ØmÅöÕÄ©ï­[—ì]Ûív­\¹²Ö'·lÙRƒ ’››c¿ÎPZ0n04a„k²8Y*¹É»OŸ>zï½÷´téR=ñÄe·"¬Y³F’Ô½{w—å÷í·ßêá‡vØç­`½”þ˜äÿ¸d ‘|G—üî,)^Îÿ^’ë.«€Zc«¤’fJ qq.ÕezðAÉb‘mñbÙtu:ÕÒ,'Gÿw||¼¶oß®¬¬,3Fÿýïuçw:|Ú`àÀzï½÷”’’¢µk×*>>^ùùùÚ¼y³$éÖ[ouI^Ÿ|ò‰&Ož,«ÕêÐyó” ÖIž=%ï’{Û_~ŠJOHEuã{kP£$ •ôž¤†.Î¥:L÷Þ+I2(÷«çöì³Ò³ÏÊú曲¾ü²³Ò«RT^žþyèžU²»»ÓÖõööÖ_þòµoß¾¬ÍjµjéÒ¥š?~­9¬¶”Á`ФI“¬ÂÂBÍ›7OëׯWFF†Ìf³ÂÂÂôøã+$¤ê’ú7jëÖ­ºå–[Ô³gO5kÖ¬ìçäÉ“zå•WtìØ1‡æ,I6›­Zûf'©»J(P~òÙ×\ëH«“ÎjuÒÙËŠY•tV«.3¦T~±UŸ>®O¿¢øÙ9z`ÅZ§Ç¨›6nܨ7Vh?qâ„>øàdT²é?bÄåååiÁ‚=%ýìÙ’½ÜÀÀ@EFF*00Pëׯ׮]»ô»ßýN­[·ÖáÇe0tîܹrEÆYYY /+n®Ì…}çÏŸwXÞ¥Ž=ª%K–hذa Õ Aƒd4µsçN‡¯U7ß|³z÷î}ÙÅÛÕÕ¥K=ýôÓ7nœ<¨GyD6›M}ûö­V|i^—[,~a±µ³b[´h¡:hÛ¶mZ¼x±âããµqãFÊÛÛ[·ÜrËeåáï¾û®ž{î¹)¶—${‘”·´äÇ.yß%ù ‘ÜKAoK)ƒ%kr, uJ¢¤!’Þ•çâ\.ÉÃÃÕ\±°‚=}ð žÕIOÏ_ÏÍÍMS¦LQ“&MÊÚ>¬7ÞxC‰‰‰5¾þ…8 üüü²Ã~«Ò¸qcEFFJ’Þzë-­^½º¬¯¸¸XGU^^Þ%×+..ÖÊ•+µråJÕ¯__=zôPß¾}¡§Ÿ~Z'NTZZZ¥±î[Tg*==]7ÖÚµk5mÚ´KŽ¿8þØa\Ìh4êþûï—···æÎëð[[Ï;'I *;‰~ÇŽÊÌÌTbb¢¢¢¢WòÕžÒbæR¥_ «²H¹E‹’¤ÂÂB>}Ú¡¹—JKKÓŒ3”˜˜(£Ñ¨ßÿþ÷jݺu¬u1wÜq‡î¼óÎ+N.¥ ¨cÇŽ²Z­zôÑGõõ×_W+ÖËËKÒå‹—ÆIRvv¶Ób‡ &Iúæ›o”’’¢eË–I’zôè!O'|êB/¿ü²ž}öÙ+Nþ5ëi)ûm)e”d/–ŒÉ«zuèp]8'i˜$×YZ}…mÚ¨06¶Ê¥§K’ŠÿþwÆÆÖŠÛ“/XT¤<¨¸ÜÜ_ëŽ;î(Wœœ˜˜¨)S¦8½8Y’fÏž­ÿûßÚºuëEÇùûû—=>zô¨CÖ>wîœæÏŸ¯Ç\V«U¾¾¾ºýöÛ«_PPPöØÛÛû’óïß¿_’Ô®];¹;ñvìÚŒeÀ5çÎ;ïTDD„fÏž]­ÓÕ/Wrr²¬V«Ô®];¥¥¥•}ÉcÇŽ2 Š—T±@yûöí²Ùl2êÑ£G…¹ëׯ_®èÙÑÅÕÊËËÓ{ï½§cÇŽÉh4ê¾ûîSttt­w!ƒÁ þýûë¶ÛnsÊzRÉ—]>øàuîÜYV«U'NÔæÍ›/× AI%ÿ//uâeq’Êü_Ó±wÞy§‚ƒƒUTT¤?üP+V¬$õéÓç²æ¹6›MS¦LÑ›o¾Ys‹¸UÝU|D²g•<6V}Y9\—2%’ô“‹ó¸ÖùZ­úÇ¡Cjs™‘^®›nº©Üó¥K—*??¿F×¼Z™™™eKý½&“©Ê¾'N”þêççWå¸ ÷|ÚµkwÉ5W®\)«Õ*‹Å¢±cÇ^4‡ëÅE¶j×ߦ™F·,ÿ—ʈoW+«°¨ÒñhÝT}E”kó÷ààzÕ¥KuêÔIï¾û®ÒÒÒjd «Õª³gϪAƒòòòÒºuëÊúvîÜ©>}úÈ××W’”””T.6##CkÖ¬Q||¼:vì(mÚ´IùùùŠŒŒÔí·ß.“ɤ¼¼<}ÿý÷5’ÿ…ŠŠŠôÁhìØ± ×°aÃôöÛo+55µÆÖ4™Lº÷Þ{Õ¶mÛ[£*žžžš1c†î¿ÿ~íÛ·OãÇ×âÅ‹/Z˜Ý¹sgI’Ýn×ÿøG=ôÐCòððÐÑ£GuòäIMš4©Ò¸˜˜+55UÏ?ÿ¼Š‹‹Õ¼ysIÒÁƒuäÈ=þøãuww׈#ôÊ+¯èí·ßVAAtë­·Vû}ºÅÅÅúË_þ¢/¿ü²F× ~]²Iù˥½’-M2¸I¦0É{ d *W´§FÓ€:)OÒxI/IêYÓ‹ùùIƒ$ÉpaÁ¨··d±”<..–}Û°«Ö½€‡Í¦ÇŽÑëÑÑÚP3'j†……•{~âĉYÇ‘Ž=ªäädÕ«WOcÆŒ‘‡‡‡víÚ¥ììl™ÍfY,yxxT?eÊkíÚµ:tè222äææ¦zõê©gÏž øù½>tèP•s$%%)33Sþþþ>|¸L&“Ž?.ƒÁ ˆˆ5lØPsæÌ)Ÿššª… jðàÁêÑ£‡Zµj¥eË–)))I2›Íª_¿¾Z¶l©3fÔè!ĵÊöã½½]Âe»uÑ×®N¡³›|Ìå?š†Ÿÿ!¨j| gÕÙ¸~ÄÆÆªoß¾Z°`Aù"))I 4Ýn×Ö­[ËÚóòò´wï^µiÓFv»]§Nª»|ùrY,µoß^­ZµR«V­ÊõçååiΜ9ÊÊʪÑ×P*??_sæÌÑŸÿügùøøhÈ!zûí·UTTùAÒWÃl6kÈ!jÚ´©Ãç®.???Íœ9SýúõSZZš&L˜ Å‹ËÓÓ³Òñ5RÿþýµdÉmݺU£G.ë ¨²@Ùh4êÑGÕO<¡ôôtýãÿ(×Pe‘ñÕÄJÒˆ#ôÎ;ï(''G’t×]wÉݽæûÎËËÓŸþô'ýøã5»Q2·– ž’ÇMUË_-å­¨ÙT ®*’ô¨¤§$Ý[ƒë¸¯[WRü+n/¿\öØöÃ*;öšX·Âzv»>~\3­Výìðùýûÿ¼¼<‡¯áhv»]¯¾úªžxâ ùøøhܸqÕŽ5jÒ¤‰<<<Ô¾}û*ÇmÞ¼Yk×®½h~ø¡&L˜ ‹Å¢|°\vvv¹eIZ´h‘ÜÝÝ5`À………iäÈ‘•νdÉ’J÷¯5(;Xm+ö­K†|se›“Ó¶íÕ´m{œ €ºÆßß_ƒÖºuë´{÷î_/))I;wÖ”‘‘Q®oÆ jÓ¦RSSUPPP!Öf³iáÂ…Ú»w¯:wˆ™ÍfeddhÿþýZµjUYa©³deeéÓO?Õ°aæ=zè›o¾qèžžž1bÄEo+v–°°0=÷Üs?~¼ôÊ+¯hòäÉUŽþùçÕ¨Q#-Y²DIIIòôôT“&MÔ³gOÙíö*Þ}ú¨uëÖ –¯¯¯òòò”­ŒŒ %%%iûöíåâìv»ž}öYuíÚUM›6U`` üýýe³Ù”™™©cÇŽiíÚµZ½zµìvûEsX±b…²³³Õ»wo5nÜXÞÞÞÊÏÏ×±cÇ´aà †rsØívÍ›7OkÖ¬Q¯^½Êò6›ÍÊÉÉQRR’vïÞí´Cˆ]ÍðóO9O=õ”aÏž=†äädCvv¶!&&Æœœltww7åääm6›ÙÛÛÛ\TTä.ÉÓh4úØív?»Ý¸jÕªÏ7oÞ\6W§Nœør\/..ÎÕ)@•>ú裲Çnøe?wðýƒ]‘ŽÃ˜L&ýáÝn׌3d³Q‘XÛøúújÔ¨Q wu*×yóæiÊ”)êСƒ-ZT£k¥¤¤hÔ¨QÚ·o_®¨9PÉʨYŸ‡†ê#î—¼ÿþûòóó+{>qâD%&&:l~ÔMÛ·]PØýsq||ü]ƒ!Ý`0dÛl¶Iùf³¹077·Èh4ùøøØ ­õêÕ³9rÄîççg¯W¯ž½U«Vö§žzªBµ·ÑI¯€Ó«W/ë£>¢8¹ Ô¸qã(Nv¢””½þúë’¤ñãÇ×èZ'OžÔ}÷ÝGq2Ôq3$ýS;-5뮳g5öĉŠ7ÏuŒ›«àjÄÆÆê¦›nÒìÙ³•™™éêtð+õë××èÑ£e±X\Ê5íÀòòò’ÙlÖîÝ»õâ‹/*99Y·Ür‹î¸ãŽ[÷àÁƒ9r¤Îž=[ckœçcIY’^dvq.ײ©©ò±Zõft´Š ”*£n¢@PgyxxhàÀZ³f:äêtð+‘‘‘9r¤¼¼¼\Ê5ï¹çžÓªU«ÊµÅÅÅéå—_®±5·oß®x@5¶Àù¾‘t^%7*£ætÍÈ—Õª©±±®N¸"(ê¬Þ½{+''G+V¬pu*¨Ä˜1cäîîîê4® ^^^ò÷÷Wnn®6l¨^½zéOú“|||jlÍáÇ+77·Ææ¸ÎW'ph—}ÕsŒ?^† na.((¸ê9ê @ >úÈÕ)\‘ºš÷õ‚ÿ?®qìØ1MŸ>]Ó§Owu*€:¬…«¸^lßîê €+Rg ”ë× V—Žm¡À@Ùl6¥¥g*áÐQ­Ý°M¹yù•Æ µh«¶-›**¢||¼T\\¬”Ô í?xDë6nW>'ÕRë ” ƒzÞÞM·t½AÆ ®—¤ðÐz ­§mZêÙ+#«âuæCîí«Mcʵ™ÜÝÕ0¼¾†×WǶ-õΜ••S£¯¸Ôú募nêÔ^FƒAÓÖû”š–!_/ÝØ±­Z4‘¿ÅW}{ݦ¹ ¿¨¿sO‚B‚µuÇ^%&V^~üý|Ô¡MKµmÕTõúÍ-Zøù2¼: n©õÊé™Yúì«ï”_P ý–ë;pø¸F ê¯fqÕ,®‘ÜÍf•³kïíÚ{@ö ÚΞKÑÃÇe2ÕªyœZ4)Ã2 îP³fÍ”‘‘¡„„W§S«…††ªY³fJIIÑÞ½{]€:ÊèêªcûîýŠ“KíØs@’d4e±øVè·ÿüS™ã'OK’ÜÌn2 ŽHàd+W®Ô‡~>BÓ IDAT¨Ûo¿ÝÕ©ÔzË–-Ó¬Y³ïêTÔau¢@ùb Ë_VltD¸$éÔés²Û«*c×3£Ñ¨¨¨(uþk€C¸¹:«Õ²Yœ$)9%M™YÙ—ïéá¡°ú!º©s;µj§¢¢b}½buM§ uJÿþýuß}÷©yóæòööÖ™3g´råJMŸ>]gÏžuuz€ÓÄÇÇë­·Þ’———Ú´i£ÜÜ\W§¸\.PŽŽl mZH’¾]¹î¢c===ôä_,×vö\Š.ùV§Ï&×XŽP—¸¹¹éõ×_WÏž=˵GGGkäÈ‘º÷Þ{õ‡?üA6lpQ†€sùøøÈËËËÕiµŠÑÕ \© @ ½·¯ iÏþCÚ›pøâvÉj³•kª_/X·vë$w÷ÌêŽÉ“'«gÏž²Ûíš5k–úöí«Ûn»M>ú¨NŸ>-͘1Caaa®Nà"uòåà =0ôùx{é̹-úâÛKÆähÊs¯ËËËSõ‚Õ¾usuêÐZmZ6UP ¿Þ™½PÅV«²€Ú©qãÆ>|¸$éµ×^Ók¯½VÖwâÄ mÚ´I_~ù¥üýý5iÒ$Mš4ÉU©\¨Î(‡êa÷Èâç£äÔt½?ÿSU;>//_‰'O+ñäií?xT#ߥ†á¡êܱ~Ú´½3€Úíž{î‘ÉdRff¦Þyç ý§NÒ{ï½§‰'ªwïÞzê©§tþüù²þAƒ©]»vjÑ¢…êׯ/™L&9sFkÖ¬Ñ;ï¼£'NÔXþ±±±zñÅÕ­[7…„„(==]ëׯ×ôéÓµoß¾*ãêÕ«§[o½U:uRóæÍÕ°aCùùùÉ`0(77W'OžÔ¢E‹4{öì ±?ü°n¾ùf…††*00PîîîJMMÕ–-[4kÖ,mÛ¶­Ò5ñ^yzzª_¿~êÙ³§Z¶l©àà`)==]ûöíÓ?ü >ú¨ÒØ=zè·¿ý­bbbäåå¥sçÎiõêÕúßÿþ§¤¤¤‹®{¹ú÷ﯻï¾[Í›7W@@€Nœ8¡åË—kÉ’%zøá‡Õ½{wY­V}õÕWúÏþ£ÜÜÜ s\éû,IÞÞÞ5j”zôè¡ÆË××WçÏŸWFF†õÓO?iúôéåbš6mª¯¿þºÂ\»víªÐ¶nݺ²Âþ_k×®F¥o¼QÁÁÁÊÌÌÔ–-[4sæLmݺµÊœ¯æ3 8C*P ð/+NNIM×»s)û|ÅÉê:pø˜“N+ªa¸šÄDS  àºÖ½{wIÒš5k”ŸŸ_阯¾úJ'N”§§§n¼ñF}ÿý÷e}“'O–ŸŸ_…˜¨¨( 2DýúõÓÈ‘#µcÇŽÉàÀåž×«WOýúõÓwÞ©¿þõ¯úüóÏ+ûì³ÏViŸÅbQË–-åíí]iÿm·Ý¦¶mÛ–k SŸ>}Ô»woýýï×Â… +Ä]í{Õ¾}{M›6M‘‘‘åÚÍf³¼½½Õ°aCåääTY Ü±cÇrÏ#""tÿý÷«oß¾2dˆöîÝ[iÜ•7nœZ´hQö<..Nqqqš0aB¹qƒVHHˆÆ_aŽ+}Ÿ´`ÁÅÅÅ•k÷÷÷—¿¿¿¢££e2™*(;Â_ÿúW=øàƒåÚBBBÔ«W/õìÙSO=õ”æÎ[iìÕ|&g¨3Êî>¨¿,~>JKÏÔ̹Ÿ\Uqr©¬¬óRCÉÇÛËY@Ýd2™Ô¤II•ß[êÈ‘#:þ¼|}}ÕºuërÊ¥¾ùæÍŸ?_©©©òññQ§NôÐCÉÏÏO/½ô’zöì)»Ýîð×PTT¤ùóçkÙ²eÊÊÊRË–-õÈ#(<<\/¼ð‚´ÿþ*ã·mÛ¦Ï>ûLPzzºŠŠŠd±XÔ´iSmß^ùׯ¾úªŠ‹‹•˜˜¨ììl™ÍfµmÛV=ö˜bccõôÓOkùòåÊÈȨ4þJÞ«æÍ›kΜ9òññ‘ÕjÕ矮ï¾ûN‰‰‰2 V‡.z«ð† 4oÞ<8qBv»]ݺuÓÿýßÿÉÏÏOÏ?ÿ¼úõëWwüò¼üòËzÿý÷Õµkײº?øà½ú꫺í¶ÛôÒK/é·¿ý­š4i¢ƒ–‹½Ò÷ù¡‡R\\œ õßÿþW+W®TZZšÜÝÝ®6mÚ”»¼ÔÁƒÕ²eKIRÏž=5mÚ4IÒ 7Ü ¼¼¼rc­Vk…øñãÇ—'¯_¿^/½ô’Õ¸qcýíoSÇŽ5eÊmݺõ¢ÅàWò™œ¡Î(ßÝ»‡ê‡)77OïÏÿLÙçs2opP $)7¯òÓ¿àz`±Xäáá!I:}úôEÇ&%%©Y³f ­´×®]Z³fMÙóÍ›7+++Kÿþ÷¿£öíÛ_´xöJ½ùæ›zýõ×ËžïÝ»WkÖ¬ÑW_}%=üðÃní½Ð?üPé¶;wî¬2fåÊ•ÚV¬X¡Ã‡kÙ²eòððЭ·ÞZåíÍWò^=óÌ3òññQ^^žF­M›6U˜wÕªUUæ\Ú¿téÒryœ?^ÿú׿ԲeKµhÑBûöí»è—+))I999úî»ïtøðaÅÆÆjݺuJOO×§Ÿ~ª±cǪyóæêСC…å+}Ÿo¸áIÒ矮™3g–ë;sæL•ŸC»Ý®‚‚IRqqqY{aaaY{UBCCõðÃK’¾ýö[ýùÏ.+bNMMÕÈ‘#µbÅ …††j̘1š4iR•s]Égp£«¨ŽˆajÛª©$iÑË•š^ùÉÒ—«EÓ…‡†èÿÙ»ïð¨ªüãŸIH&½‡$¢„P$@@P@@i"*ˆaQWׂº*ÜÅÅ‚eQ~ ¢t)JDDBÀzh©¤B&™üþ`3KL!ÉL2 ¾_ÏÃóܹ÷”ç\†ïI:zü”MÚ€ºÈÃÃÃrœ““SnÙììË?(íééYáö—,Y"³Ù,Iºá†ªáÕ™L¦çΞ=«ØØXIRÏž=åêêZ-}ÿÑÑ£GuúôiIRXXX¥ê–7V‘‘‘Љ‰‘$}øá‡¥&'WÕòåË-ÇÑÑÑ6k·4E;ûûû[Î?^ÒådùŠºÚ8§¦¦J’Ú´i#Ÿ*Ç[ƒ ’Ñh”ÉdÒĉKì°œ““£9sæH’ºwï^#1¶V'vPîvÓå_4>‘xFÇO–‹‹±Ôr—Á8ÏòÚ éñGîסÃÇtüäiefe© À,OwE„‡é¦öm$IÙÙ9úu×¾jp-0 •®“““£óçÏ+88X~~~ÕUÙ¶oß.IrttT‹-lº{³§§§xàuïÞ]¡¡¡òóóSNNŽŽ?.___I’‹‹K¥Ú,o¬:vìh9^¸p¡õoà .\PJJŠüýýhÓ¶ËRÑ{©ªãRpp°.^¼¨)S¦hÕªUJJJ’ÑhTXX˜¦OŸ~Õ±,KYq%áV×X%ëV%©º:Øbœ×®]«üQýû÷×ðáÃÕ¶m[˟ÇküøñŠ‹‹³iÌÒ屬Hò³³³³ÍújJHP~ùŸT©^~~öì?¤=ûÙ8"¸¶(>>^7ÜpƒZµjUf¹ððpyxxH’öïß_SáY¥Aƒ–㤤$›´¥ˆˆIÒ /¼ o¿ýÖrÍd2éÀÅv¥¶•¢ø½½½åëë«´´4›÷QvíÚ¥ììl>}ºÜr¶g“ɤŋkñâÅjذ¡î¹ç5JŠÕí·ß^f½Ùl¶W$qûüùóŠŠŠÒÊ•+5~üø«–ê"{¨6mÚ$Iºùæ›åââRj™;î¸C’téÒ%ýúë¯5›5n½õVIRNNŽ8`“6,Ƕj³"¶oß.ér¢ìàÁƒk¬_[û׿þ¥‘#GjÆ å–«Žq>uꔦNª»îºKùùùòööÖ!CÊ,Ÿ››k9öôô¼jû;vì$uéÒ¥ÌyÔu$($I .”Ùl–···}ôÑ×CBB4jÔ(IÒwß}§ÌÌÌš±Òbbb4lØ0IÒÒ¥K•ŸŸo“v“““-ÇÑÑÑ6i³"öîÝkIÔ}ê©§Ô¾}ûëÛ¬çzõê•y->>^ééé’$__ß2Ë]¹Ës×®]¯Úç¢E‹”ŸŸ/???Mœ8QŽŽŽ•ˆ¨Êþ&ð§räÈÅÆÆêÁÔ“O>)OOO-\¸PÙÙÙŠ‰‰ÑsÏ='oooåääèÝwßµw¸%´jÕJ:tPzzº|||Ô½{w1BÎÎÎJMMÕ|`³¾ââ┘˜¨ÐÐP½üòËruuÕ/¿ü¢ÔÔTFùùùÉÕÕÕfý),,ÔK/½¤¹sçÊÍÍMsçÎÕÊ•+õÃ?èäÉ“*((‡‡‡š5k&??¿Zù9U†µã<{ölåååiÅŠÚ»w¯’““åää¤ høðá–š÷ìÙSfGŽQJJŠüýý5aÂ9::êСC’¤¦M›*<<\“'O¶”?{ö¬¦M›¦ñãÇëÞ{ïU§N«„„%%%Éh4ªaƺñÆ5qâDØh´€šC‚2ÀâÍ7ßTÆ uë­·jÔ¨Q–“‹ääähìØ±JLL´S„eëÛ·¯úöí[â|rr²F­óçÏÛ¬/³Ù¬§Ÿ~Z3fÌ———^ýu›µ}5{öìѨQ£4uêTiÀ€0`@‰r™™™u>AÙšqvttTëÖ­åêêªnݺ•YnݺuZ¹re¹1¼ûî»zóÍ7åëë«7ß|³Øõ´´´b Ê’4mÚ4F3Faaazá…Jm{ÆŒ:zôh…ßP[  °0™Lzä‘Gtçwêî»ïVdd¤\]]uöìYýøãš>}ºNŸ>mï0‹™·Ä7Ç€:©ðŠãÿ~Ü­[·Aƒ!Í`0dšÍælIœœòrrrL&wwws^^^A`` ùÈ‘#…žžž……-[¶,|õÕW ÿØ…Cͼ×”T Ê*ŒeF‚2€ «gï*ª~ ¿:¶m¥ðëÊ××[f³Y©itèðQý¼u—rr/Vª½Ží¢5°ï­’¤Å+Öiûîߪ#làšRë” ƒzßÚY7wj'ƒ¡Øµ @…*¦U”¦ÏþFé™j³õ -4 Ï­Õ.pM«õ Ê>^žº©}9 ú=á˜vîSJjº<Ü]Õ¡m´"›…ËÛËCýûÜ¢/ç/»j{×5j !ý{I*”Ù\(‡êÀ5¢Ö'(§]ÈÐ’•ëtñÒ%Œ?ZìÚï ÇõÐÐjÑXÍ#®—³““òL¦2ÛrwwÓ}wÝ!GGG}ûýzõê~“Ü\]ªû-®A>>>jÞ¼¹ÒÓÓuèÐ!{‡S«©yóæJNNÖìpU¾¾¾–{öðáÃö•Äšƒª0 zì±ÇT¯^=­_¿^{÷îµwHP«Õ‰íƒwÿv°Drr‘=û—$988ÈËË£Ì6 ƒîÔGžîúiËmÝÁ? ªnÆ š;w®n½õV{‡Rë­ZµJ3gÎT·nÝìÒtt´Ö¯_¯­[·òy¡B6oÞ¬ØØXuíÚÕÞ¡\jzÚ{Í‘$£Ñ¨„„%$$hܸqv‹£¢ìµNÖ¦õ¹M›6úûßÿ®'Ÿ|R¦r6É@Í©k󸳩 ÊåÉË˳›Lùe–»¥ËŠh¦£'µú‡Ÿk"4P Œ?^aaa ÐóÏ?oïp®i “ƒCÿ/)ÕîÏ4VÖÎÁº8Vf³Ùr\PP`ÇH*Æ^ëdmZŸûôé#I:yò¤âââìKu`°µºó¯eˆj!IJJNÕ…ŒÌRËÕЭ];*''W_/þNæÂš j½‡zȲC]ÇŽË-ûÁ(!!AÛ¶m“³³s ET]~þÿ~ðœ§êÓ­[7íÝ»Wëׯ—‹‹‹½Ã©Õþlceͬ«ce2™,É•WnÀP[Ùk¬MësïÞ½%I«W¯¶kÕy :Ôéåë5PL«HIÒê ›K-c04øŽžrtpÐò5•™•]“!@°hÑ"åääH’î¿ÿþ2ËXvœ7oÉ"¨¦Nªýû÷ëÈ‘#š4i’½Ã¹f¹»»ËÕÕÕÞaÔ ¶±²fÖå±*z®ff–¾éBmb¯u²¶¬ÏÍ›7×u×]'IZ³fÝâ¨.Ì#Õ¡ž½¨*?_oÝw Òþƒ‡uàPB©å:µV£Ð`Å9®=¿¬á( nÈÊÊÒ·ß~«aÆ©OŸ> TRRR‰rC‡U½zõTPP ¹sçÚ!R òâââ4pà@{‡üiýYçà… äáá¡ôôt{‡rUöúŒj˽Q´{rJJŠvìØaçhp¥º4€?›:¹ƒ²¿ŸF?p·ÜÝ\uö|²,[]j97Wõêv“ µríO5%Ô-ÿ÷ÿ'³Ù¬zõêéÞ{ï-qÝÁÁAÆ “$-]ºTgΜ©é¨3RSS%]NzEíÖ§OIÒÚµke6›í ®Ä<j¯:·ƒr€Ÿ¯þòÀyyº+)%M³¾Z¬¼û¬Ôä£Ñ¨H’ƧåË——('gggMš4I3gÎ,q=00PÝ»wWûöíÕ¢E …††ÊÓÓSƒA999:uê”,X Ù³gWehÊÕ¤I½ýöÛêܹ³”––¦-[¶è?ÿùâââʬgMÌãÆS—.]$___9;;[v}œ9s¦víÚUjŸC‡UëÖ­©úõëËÛÛ[ŽŽŽ:{ö¬6mÚ¤éÓ§ëäÉ“å¾_ 0@½{÷VTT”üýýe2™”––¦¸¸8­_¿^óæÍ+µnÏž=Õ«W/…‡‡ËÕÕUçÏŸ×O?ý¤O>ùD‰‰‰åö[Y#GŽÔK/½Tâ|||¼úöí[¡6ÜÜÜôðëgÏžjܸ±<<<”••¥ôôt8qB¿üò‹þóŸÿØ,fkç°aÃÔ±cG5oÞ\!!!rwwWnn®Ž?®U«ViΜ9ÊÌÌ´Y¼’Ô¬Y3}÷Ýw%ÎïÛ·¯Ä¹Í›7ëÁ,µÊ®¶P¯^=1Bƒ RãÆe0täÈ-]ºTƒ¡ÜºU™ƒ¶«Ö­[ëá‡V‡äïï¯ .hÇŽúüóϵsçÎ ¾û«»ï¾û4iÒ$=zT½zõ*·l—.]4gÎ;wN;w–dÝ´ÕXÕäšSšsçΩU«V:þ|…ëTu.Tå™b‹uÒ`0¨ÿþ2dˆn¸áyyyéÒ¥KJIIÑ‘#G´gÏ-Y²DÇ·Y¿¶x–]©Q£FŠŒŒ”$­Y³¦Ô2ÔwÞ©-ZÈÇÇG'OžÔš5kôí·ßjܸqêÚµ« ´råJ½ùæ›ÊÉÉ)ÑFUŸÝRÕžGö^slõw³ªÌ#5£N%(ûùx[’““SÒ4ãËÊÌ*ù¹EÚµn)Ij©¶Ñ‘e–ܯ§÷ë© ?ÿª5~±yÜPW|ôÑGêÛ·¯BBBt÷Ýwë믿¶\;v¬$iùòå:zôh‰ºŽŽŽzûí·5hРbçÃÃî{î¹G<òˆMèŠ,Y²DÁÁÁ¥^óòòRTT”ÜÜÜlÞ¯$Ýu×]Å^jÀ€ºãŽ;ôì³ÏjéÒ¥¥Ö³&æ[n¹EÑÑÑÅΫ_¿~ºýöÛõâ‹/jþüù%ê½ð òôô,q>,,LÇ×€4bÄíÙ³§Ô~Û´i£÷Þ{O5*vÞÉÉInnn Uvvv™ ÊmÛ¶-öºaƺï¾ûÔ¿ >Ü’œ[øøøè믿VDDD±óÞÞÞòööÖu×]'GGG›&([ëùçŸ/ñùzxx¨eË–jÙ²¥|ðA=òÈ#¥&§Ù‹½Ö Íš5K111ÅÎÕÕTuZëÙgŸÕ_ÿú×bçÔ§OõîÝ[¯¾úª¾üòK›ôuîÜ9I’ŸŸßUËH’Μ9c“¾mÅÞkÎÞ½{Õ´iÓ %C[;ìñtssÓG}¤nݺ•8ïææ¦F©{÷îÊÈÈ(õÇEªÊÚgÙõîÝ[’”““£Ÿþ¹Ô2>ú¨%‰Y’"""aù»Q‘aÆ) @cÆŒ)ÑFU× {>¬YsluOVf¨Yu&AÙhtÖƒCÊËÓ]©iôù— ËMN–¤zõk(:¸6ÄÅÅiÅŠêß¿¿üq-Z´H&“I]ºtQ›6md2™4uêÔRë>û쳖ĪeË–iÞ¼yÊÈÈPÛ¶m5nÜ8ùùùé³Ï>S¿~ýtöìÙj‰×®]Z²d‰~ÿýw¥¥¥Éd2ÉËËKÍš5ÓîÝ»«¥O“ɤ¯¾úJ«V­RFF†¢¢¢4~üx…„„èßÿþ·:¤ƒÚ4æ÷ß_ùùù:qâ„233åää¤èèh=÷ÜsjÒ¤‰^{í5­Y³Fééé¥ÖÿþûïõÕW_)%%Eîîîjß¾½žxâ yzzjÊ”)êÝ»· ‹ÕiÑ¢…æÌ™#wwwhéÒ¥Z·nNœ8!ƒÁ ÅÄÄ”»äÖ­[«“'Oª°°P;wÖ“O>)OOO½õÖ[0`@F¼bæÌ™£¹sçZ^?ûì³9rd…ë?ñÄŠˆˆP^^žÞyçmذA©©©rvvVHHˆZµj¥¬¬,›ÅkKß}÷fΜÝ\Ž IDAT© .ÈÓÓS·Ür‹F­ÀÀ@͘1Cýû÷·ÙN”ñññŠŠŠ’t9Éï½÷Þ“$µk×N¹¹¹ÅÊ^¹#{{­ÿüç?-ÉÉóçÏ×âÅ‹•™™©¨¨(=üðÃÅKS•9híX3Æ’(¸eËM™2E'NœPãÆ5aµmÛV¯¼òŠvîÜi“ÄÛ¢ñöòò’“““L&S™e‹”¯üŒ¬™ƒÖŽU‘š\sJóÑGé£>ªPY[Í…Ê]’ôÅ_èý÷ß×-·Ü¢)S¦¨W¯^jÚ´©âãã‹Õ­ê³»ªÏ£Ú²æXûw³ÊÌ#5«Î$(ßy{OÕðSNN®f}µD™YÙW­óÚ¿?.÷ú?þ>Fn®.Z¼b¶ïþÍV¡@6eÊõéÓG 4ÐСCõå—_ê©§ž’$Í;W'Ož,Q'44T£F’$-X°@&L°\;pà€¶lÙ¢åË—ËÇÇGO>ù¤^|ñÅj‰}ýúõ¥îä·wïÞjéOºœ8óá‡Z^8p@›6mÒÊ•+åíí­qãÆ•ØañJU‰yÆ %έ]»V Zµj•ŒF£ºwï^æîÍûöíÓ¦M›,¯·oß®ŒŒ ½ñÆ W›6mJ$Oš4IîîîÊÍÍÕÈ‘#µmÛ¶ínܸ±Ì˜‹®¯X±¢XYYYzýõ×¥ÈÈHÅÅÅ•ÛFEK¸*/‰±4íÚµ“$-]ºTŸþy±kgÏž-7ÛÞ~ûí7íØ±Ãòz×®]úùçŸõå—_Êßß_O<ñ„^~ùe›ôUXX¨K—.I’òóó-çóòò,çËb¯u£E‹êׯŸ$é³Ï>ÓäÉ“‹õ»xñbíß¿_NNNe¶Q•9hÍXiܸq’¤Õ«WëñÇ·ÜÓ)))1b„Ö®]«   5JÏ<óÌUFáêNŸ>-I2 ª_¿¾e÷Ò &¨]»vú÷¿ÿ­íÛ·[â“Tl‡Skæ 5cu¥š\s¬a˹P™gŠ5ŸQTT”%¡:66V¯¼òJ±ë¿ýö›¦L™Rj‚²µës‘ª<Ëþ( À²ÓöêÕ«¯Úgbb¢²³³µnÝ:%$$¨I“&Ú¼y³ÒÒÒ´xñb=Z-Z´PLLL‰åª>»«ú<ª-kŽ=þn f8Ø;€ŠhØ XÑ-›I’,[£”´Òá`½“'Oê‹/¾$=öØcºýöÛ£¬¬,M›6­Ô:wÞy§•ŸŸ¯÷ß¿ÄõÇkÑ¢E’¤ª^½:ó{ÚWUÚ®¢gÏžUll¬$©gÏžruu­‘XŽ=jI* «TÝ%K–Èl6K’n¸á†b×"##-»Í~øá‡¥&'WÕòåË-ÇÑÑÑ6k×Z©©©’¤6mÚÈÇÇÇÎÑXï×_Õ7ß|#éò|­ sÐ^ëFÿþý%I—.]*öãE *´ëji¬™ƒå4hŒF£L&“&NœX"¡3''GsæÌ‘$uïÞÝ&}¦§§[ve-J@vttÔСCÕ®];Ë®³W^?~ü¸Mú®NµqÍ©‹ÏÐJ’.^¼XjÌöRÞ³¬4½zõ’ƒƒƒL&S© Äå)ÚéØßßßr®hwz//¯ ·sµuÃÏ#{¬9êž:‘ Üí¦Ë¿y"ñŒŽŸ:-c©ŒFg;G ׆>ø@))) Ò;ï¼#Iš6mš%IæŠv|XÒåùûÇ9\U'Ož”ty‡_IЉ‰‘···¤âI‰E×ëB‚rm\sêâ3´U«V’.Ï£¢ñ¬ Ê{–•¦OŸ>’¤_~ùE™™™UêÓ`0T¨\U× {<ìµæ¨[ìÿsšp}£’¤°Ð½üô_Ë,—•£½÷YM…׬ÌÌL½ýöÛšø@žžž%ÎOš4I3gδi<¶Z7*s@@€¤Ë;WEuÎÁ²½÷:(!!áªå}||ÊüA‰Ê8qâ„"##- È·Ýv›¤Ëψˆˆ5jÔH'OžTÆ %Õe©ö­9uñZ”P›˜˜hçHJ*ëYöGºé¦›$I«W¯®Ö˜¬Y7ìñ<²×š n©;(»ºÕŽ/àÏdÁ‚JOO·çåå•Y¶(¡¦°°°Bm_YîÊc‡:ñ5v…äçç[Ž+:.Wc0ôÑG)88X/^Ô¤I“ÔµkWµhÑB­[·Ö€tæÌ™*·_Vœ•ý|+«(±Ê– ¶°víZuëÖMÏ<óŒvîÜ)éòN§~ø¡V®\Yæ.ÄUUÝsÁÉÉÉæmZÚuÃEí˜L¦J×­î9X^¿Òå¹’——wÕ?ÎÎÎ6é·h‡Ô¢ä¾}û*55UÓ¦M“$õêÕK... Pnnn­LV-Mm[sì5¬qñâEIR½zµoŒŠŽO=äää¤ÂÂB­]»¶Úâ±ÅºQÓÏ#{­9ê–Ú÷/Ä¥xùŸTK»o¾ûŸji®………–$Û«íÌwþüyEEEYvÙ,Mƒ ,ÇIII–ã¼¼<™Íf988”º j]UÖûµFTT”"""$I/¼ð‚¾ýö[Ë5“ɤ(++Ë&}]©(~oooùúú*--Íæ}T·¢„µÊ&$šL&-^¼X‹/VÆ uÏ=÷hÔ¨QŠˆˆPll¬n¿ýöb»e[£ºçBÑNØ’”’’Rj™6mÚT¹}³Ùl9®È8[³n\©²1W¤ß²ØjVu¬V®\©ñãÇW:—t9A¹M›6jذ¡¾øâ ­X±BÏ?ÿ¼úöí«Í›7Ë`0(!!¡Øûú£ªÎÁÊŽU]d«¹`­Ê|F§NRëÖ­m’[Õ{ÃZ½{÷–$íÞ½»Jcºk×.egg—»óµd»uÚçQ]YsÔ-×ÎOOìfÇŽ’¤-Z”™`Õ«W/IRNNŽ8PìÚùóç%É’Às-¸õÖ[%•þ~«* Àrl«6+bûöí’.'5 <¸Æúµ¥ÜÜ\I’‡‡G•Û8uꔦNª»îºKùùùòööÖ!Cl¢¤ê =zôtùÑ /¼ %K–ÈÇÇÇÞ!ל²ÿõ€ :}ú´>ÿüs3FwÝu—ÜÜÜôõ×_+##C111úÛßþ¦zõê)==]~øa‰ú ,PŸ>}T¿~}Í™3GŸ|ò‰Nœ8!£Ñ¨ ÔêĘV­Z©C‡JOO—ºwï®#FÈÙÙY©©©úàƒlÖW\\œª—_~Y®®®úå—_”šš*£Ñ(???¹ººÚ¬¿"………z饗4wî\¹¹¹iîܹZ¹r¥~øá£‹/jüøñš1c†ÜÝÝõÖ[oÕH¿¶Ò§OI—|;fóö¯díºa‹çQ]Ysl©ÿþ–c___uéÒE+V¬°cDÀµ‡e€M¼óÎ; Ö AƒÔ·o_õíÛ·Øõ .è‘GѹsçJÔýá‡ôÍ7ßèÞ{ïULLŒ¦OŸ^Sa[­´÷*]Þ1qôèÑ–&mÁl6ëé§ŸÖŒ3äåå¥×_Ýfm_Íž={4jÔ(M:UAAA0`€ P¢\fff­LP>v옾ýö[ 8PmÛ¶ÕÌ™3-×ÒÒÒŠ%À9::ªuëÖruuU·nÝÊlsݺuZ¹r¥Mã´Å\prrÒ< x Øù‚‚=÷Üs:xð ­Â-Æl6ëÝwßÕ›o¾)___½ùæ›Å®§¥¥•H$µfݰÆÔ©Såçç§¡C‡ªM›6zï½÷*TÏVs°*c5mÚ4F3Faaazá…Jm{ÆŒ:zôh•â*;}ûÔ²eK™Íf-Z´Èr>==]«W¯V¿~ýTXX¨ýû÷—ÛNeæà•ª2Vu‘½æÂ•*ûmݺUƒÖ3Ï<£nݺÉÙÙYÒåçÀš5k4hÐ 9::ª°°Ð¦ýZËÑÑQ=zô$­ZµÊ¦m—ÆšuÃVÏ£º´æØÊÙ³gÕ²eKËë+w‘`$(l¢  @ÿûßµjÕ*Ýwß}ŠŽŽ–«««µnÝ:MŸ>])))eÖñÅõ믿jèСjÞ¼¹<<<”——§´´4?~\û÷ï×O?ýTƒï¨|“'OV—.]Ô¬Y3ËÕÕU—.]Ò±cÇ´víZÍœ9S6ïwÛ¶mêÛ·¯FŒ¡›nºIÁÁÁòññQVV–ÒÓÓ•””¤„„mÜ¸Ñæ}oݺU½zõÒ!CÔ£GEFFÊ××Wyyyºpá‚âããõóÏ?ËÑѱVî¦8aÂ;vLThh¨.^¼¨øøx­^½ZƒÁ’Dg6›5zôhõéÓGmÛ¶U`` üýýe6›•œœ¬¸¸8­X±BË–-“Ùl¶yœÖÎ…E‹ÉÙÙY;v”ŸŸŸRSSõ믿ê“O>Q\\œÍã½Ò¼y󔚚ª‡zH‘‘‘òôôTNNŽâââJŒ³dýºQUzñŵbÅ ÝÿýЉ‰‘¿¿¿ ”––¦'NhÏž=¥Î#[ÍÁÊŽUaa¡¦L™¢eË–éþûïW§N"£Ñ¨ŒŒ %$$hË–-JKK³éXíÛ·OÆ Ó?þ¨ÄÄÄb×bccÕ¯_?;vLYYYWm«¢sð*;Vu‘½æÂUö3Š×˜1cäìì¬úõë«  À’D=xð`I—w[¶u¿Ö¸ñÆåëë+IZ³fÍÚ-OU× [>êÊšc+“'OVHHˆÂÂÂôÕW_i×®]ö ¸æþû§˜W_}Õ°ÿ~CRR’!33ÓnHJJrpvvvÌÎÎv0›ÍNnnnN&“ÉY’‹ƒƒƒ{aa¡gaa¡ïÆ—nß¾ÝÒVûöíkðíØ_DD„½C€2Í›7ÏrܾÝßç–øæ@]³{÷nyzzêí·ßÖ§Ÿ~jïpü‰5iÒD«W¯–$3Fk×®µsDÿ3qâD=ôÐC:}ú´ºvíjïp z\ù»ÿý.¸[·nƒ CšÁ`È4›ÍÙ’.:99ååää˜Lîîîæ¼¼¼‚ÀÀ@ó‘#G ===  [¶lYøê«¯–ø%I‡šy'€?ƒx@Òå€wïÞmçhŠ»í¶Û$ÕÜîÉp­ªgïuË´iÓtìØ1íØ±CçÎSNNŽ4h ;ï¼SC† ‘$}÷ÝwJNN¶s¤ÿ­I²ì𠨔æèè¨=zÈh4–Yfÿþýzå•Wj0ª«ëÝ»·$)--MÛ¶m³s4P·‘  TÒ÷ß«çžy²Äù„„£|÷ƒÕV·6¸¡e¤ÞšüªÜ\]5ñµÉÚøÓf{‡€æää¤>ø@;wVXX˜üýýåìì¬ôôt8p@ßÿ½-Z$“ÉdïP‹)JP^¿~½ ì Ôm$(ãšáàà Ð!J<}Ff³ÙÞáÔjU«ÇÆþE†J’þþÔc$(@-Ò¦M{‡àOââÅ‹úôÓOõé§ŸÚ;”J)JPX¯Î$(×ôWǶ­~]CùúzËl6+5í‚>ªŸ·îRNîÅ2ë¶Šj¦aƒo/·ý¯®Ôoãmvrß°!zaÂSå–IO¿ n·ö«¡ˆ*®sçŽzï7åââ¢N]nSNNnµõõÍüÅZúíJËëÇ{D÷ RíumÅš±*È/(õüyÔúeƒÁ Þ·vÖÍÚÉÁ`(v-$(P!AŠi¥é³¿QzFf©mj"TØ‘»››\\\j¤¯¼<“òòLÿ{m2•SÚvumÅš±šöñg ”‹‹‹þ=åGê‚ZŸ ìãå©›Ú·‘ƒÁ ßŽiçÞ8¥¤¦ËÃÝUÚF+²Y¸¼½<Ô¿Ï-úrþ²RÛ0%IGŸÒ— –—ZÆ”W󉢵͂…ßjùŠU–׫¾[(ww}ðáôõüÅ’¤Bs¡½ÂC-pè÷ú÷¾QöØQ­OPN»¡%+×éâ¥K:´ØµßŽë¡¡Õ<¢±šG\/g'§Rw¤u1%IYÙ9ºxñRÄ]™L&™®¿ÂËÉÈ/]Rff–¢€ò©yóæJNNÖì€kÜ=÷Ü£–-[jëÖ­úî»ïì€]ÔúeIÚýÛÁ2¯íÙÿ»šG4–ƒƒƒ¼¼<”œ’V¢Œ«ËååœÜ‹ÕãŸÝ]ƒ(ºU”š5‹P`€¿¼½½äàà¨sçÏë—-Û4sV¬Ï”YßÍÍUÃï»G·v¿Y×]×HîînÊÎÎQú… :uê´~ýu‡þoVl±:áZ4N‰¶¶ü¼¦Ä¹­¿n×#cÆ—8?ö¯£Ô©ã ª ooo9;;)55M»÷ü¦/c¿Ñž½¿Ua4ªWUb¶f¬¸ÿ^=÷Ì“%Ê%$Õ໬pÜ={tÓ=wß©–Q-äââ¢3gÎjÃÆŸ5kö\¥¦–œ·’õ÷þV­Z%OOO½ýöÛUNPŽŽŽÖûï¿/777=ÿüóZ¿~½£*‡{²öúÇ?þ!OOO={¶ÊmðùÂVFŽ©—^z©ÄùøøxõíÛ×þ,êD‚ryòòò,Ç&S~©eÜÝ\%]ÞAÕ㙿ÿM%Î7jªFw‡ê޾½ôèØ§ôÛoq%Êøx{kÖÌÞøúbç½¼<ååå©°F åèèP"AÙºÞ|“nhYì\PP}õéÝC·õºE¯½ñ–/Yaó~­Q×bvttÔ¤×ÿ¡~wô.vþúëÃôðõa<¨Ÿž7A»÷ì+Qךû u—ƒƒƒ6l¨S§NÉl6×HŸãÇWXX˜$ýi’í1Ψ8kïI>ßÚ5‡{€º®Î'(G5$%%§êBFf©eÜÝÝ$IùùªWÏQùùÕÓ»S&©WÏ[*\þÞa#uðP¼Õukƒµë6hþ‚¥JMM“›»›Ú¶‰Ö_ÇŒ”‡‡‡þùÆËt×ý*,,,VgÌ£+¼ñõÊË3éækÓ¦_”š–.gg')*ª¹²KI.OH8ª;ö$õèÑMoýëUIR·[ú)77·XÙ‚2¾ØúäÓÿS~~¾N:­Ì¬,9Õ«§–-#õÔ¸±jÜø:½øüÓZ¿~“Ò/\°~pl¤*1[3Vs¿Z ùó—X^{ò¯zàþ{+ï¸'ÆX’“¿û~.Z¦ŒŒLµn}ƒûë_äëë£ßKw¡sç’Jm£*÷ê¦nݺéã?–«««Zµj¥œœšù!êüüÿý vAAõ~§\ØkœQqÖÜ“|¾µk÷¤­ÄÆÆjáÂ…–×O=õ”zè!;Fø³¨Ó Ê×5j ˜V—w’]½as™å¼½.ïÀÚ§GõéÑE/^Ò™sIúíàaíÜs@y&SÄûg°ÿAý²e›åõ®]{•™™¥—þñŒ®¿>LÑ­ZjÏÞߊÕiÓ¦•$iÅÊÕš=ç«b×ÎK*Q¾Haa¡.ýwí+“ÎóLy–óWóÓ¦_JœÛðã&=v\KÅÊhtV—.µbåê µWª³5ce6›‹•)+Ù»4 B‚õàƒÃ$IK–®Ð+¯þËríà¡xmÛ¶Só¿ž%oo/3J¯¾þV©íTå¾@Ýäîî.WW×ïwêÔ© –«««&MšTãý×4{3*Κ{’Ï·öcÍ­äåå)ïŠÿבWÁÿ3€µêl‚²Ÿ¯·î¿»¿ iÿÁÃ:p(¡Ì²É)iÊɹ(7Wùx{ÉÅŨÆ×5TãëªKÇÍùú[%%§Ú,¶‰¯MÖ?ÿõn…˧¥ÿo§[kêÖVËW®Ò‹/ü]ŠŒlV"‘4--]’Ý*J>ÞÞµb·âãÇOêì™s Q£†¡ö§BjcÌýúõ–£ƒƒòóóõɧÿWâú‘£Çµlù÷ºkðÝqûmšôÏwŠýJty®v_•§Ú; À‚{òÚÆç êº:™ ìï磿Ü?Dîn®:{>Y –•¿»íß,³; jR_m££tcÛVòóñÖÃÃé½ÿ|!“©b‰‘W“™™¥L;Ô­­rrr•œœ¢úõåëëSâú—sç«óMÔ¤Ic-[ú•¾Y°DK¿]©'NU{lvï`ÝÜ¥“BËÏ×G99¹:qò”¼}¼$IFcµÇQu)æ6­/ 3gÏ•ZæÇ›u×àrqqQ‹æMõÛþ¸ µ}µû T:— àç«¿<0D^žîJJIÓ¬¯+/ÏTáúæÂB:}N§NŸS±“>¤Ÿ|¼½Ô¾Í úeÛîjŒüÏ-7÷¢$Éèì\âÚæÍ[õÔÓÿÐKÿxFþzä/é‘¿<¤Ý{öéËØo´vÝ2›Í6©IøõúôãwT¿Øy£ÑX,áÕ`óž«®®Åà/Ie&'KÒ™3g-Çÿ-_QåÝW¨š¡C‡ªuëÖŠŒŒTýúõåíí-GGG={V›6mÒôéÓuòäÉrÛèÝ»·†®V­ZÉÕÕU‰‰‰Z·n>ûì3¥¤¤”(߬Y3}÷Ýw%ÎïÛ·¯Ä¹Í›7ëÁ,µßž={ªW¯^ —«««ÎŸ?¯Ÿ~úIŸ|ò‰K”9r¤^zé¥çãããÕ·oßrߣdýX õïß_C† Ñ 7Ü /¥ ‹ IDAT//]ºtI))):räˆöìÙ£%K–èøñãW¥"l5Εý|mÅÅÅE PïÞ½%™L&¥¥¥)..Nëׯ׼yólóÀuçwªE‹òññÑÉ“'µfÍ}ûí·7nœºvíª‚‚­\¹Ro¾ù¦rrrlRך{ÒVŸoM¹ï¾û4iÒ$=zT½zõ*·l—.]4gÎ;wN;w.q½ª÷d`` ºwï®öíÛ«E‹ •§§§ ƒrrrtêÔ)-X°@³gÏ®ðûòññÑüùó®Ã‡ëž{îQFF†$Öœ"•¹'­ýŒZ·n­‡~X:t¿¿¿.\¸ ;vèóÏ?×Î;ËßšºÖ°f­³FUßï¸qãÔ¥KÉ××WÎÎÎJIIÑŽ;4sæLíÚµ«Ôz¶øûÀ¾êT‚²Ÿ·%999%M3¾\ Ì¬œ«W,Ãþƒ‡uúl’*¢q#›%({zzT*a2-ý‚ ¬®[›–{}ý†Ÿ´éç-êÛ§§î¹{Ú´neùsäè1MxþUúý°Íâ1 šòö$Õ×¥K—ôþ‡ÿѺu?*9%UFgg5lª¦NVppý«7VCêbÌ2\N•¾ÊÇoqµûÄÚò¸º^xAžžž%·……iøðá0`€FŒ¡={ö”(ãè訷ß~[ƒ *v><<\áááºçž{ôÈ#T[bWÛ¶m‹½nذ¡î»ï>õïß_Ç×lÚŸ5cåææ¦>úHݺu+qÞÍÍM5R÷îÝ•‘‘¡™3gÚ4ççÛ¦M½÷Þ{jÔ¨Q±óNNNrssShh¨²³³K$íU5æG}T‘‘‘–׊ˆˆÐرc‹•6l˜4fÌ›Ôý39wîò]ûùù]µl@@€$éÌ™3ÅÎ[{O.Y²DÁÁÁ¥^óòòRTT”ÜÜÜ®_͘1Cááá:sæŒFŽiIN¶…?Ûš#Y÷=ûì³úë_ÿZì\@@€úôé£Þ½{ëÕW_Õ—_~ióºÖ¨êZg-kÞï-·Ü¢èèèb炃ƒÕ¯_?Ý~ûízñÅ5þüõ¬¹ŸµCIP6õàÐòòtWjÚ}þåB«’“‹¤¤¦©Ap <ÜÝmåe¯M|^½zÞRáò÷©ƒ‡â­®[×™L&-[þ½–-ÿ^ „è®;ûëÁîUxãë5ã³5øî•””\j]sáÿvX6®¾p‹MÕ$üzIÒÄ×&kåwkŠÅqðàïÊÎήPÜÖ$ÉV¦®­b®ìXýQaÑnÖ¨›””¬Í›*´Aé_JRHÈÿ®¥¤¤V:Tï¿ÿ^_}õ•RRRäîî®öíÛë‰'ž§§§¦L™¢Þ½{—ø¾ëÙgŸµ$ .[¶LóæÍSFF†Ú¶m«qãÆÉÏÏOŸ}ö™úõë§³gÏZêÅÇÇ+**JÒåPß{ï=IR»ví”››[¬ò~ÀyëÖ­ŠÕÉ“'UXX¨Î;ëÉ'Ÿ”§§§Þzë- 0 Xù9sæhîܹÅâ9rdŒÕ¤I“,‰‚Ë–-Ó‚ tîÜ9F]wÝuš:uª+Ky¬çª~¾ÖjÑ¢…æÌ™#wwwhéÒ¥Z·nNœ8!ƒÁ ÅÄÄ”ºK§µ1¿û5k–:uê¤éÓ§K’¾øâ ½ÿþûºå–[4eÊõêÕKM›6U||¼Õu­¹'m5jJÑx{yyÉÉÉI&“©Ì²E ÊüŒluOîÚµKK–,Ñï¿ÿ®´´4™L&yyy©Y³fÚ½»b?vïíí­™3gªuëÖJLLÔý÷߯ӧO+ÚSõ{²²ŸÑ˜1c, ·[¶lÑ”)StâÄ 5nÜX&LPÛ¶mõÊ+¯hçÎ%~¼ÂšºÖ°f­³†µï÷ý÷ßW~~¾Nœ8¡ÌÌL999)::ZÏ=÷œš4i¢×^{MkÖ¬Qzzz©ýWå~Ôu&AùÎÛ{ª~€Ÿrrr5ë«%Ê̪XòèÕx{_þ%΋—.Ù¤=ØÆéÓg4íãÏôݪµš?o¦¼¼<5hàú|ÆœRË_̽h9öðpWvvùÉëþWüó!+¼/]¼|︺¹Vk][Å\Ù±ú£Ü‹—ë{¸_ýW¢wíÞ§®7ߤ¦M›¨AH°NŸ)ù…ï-Ýo¾Ünnî5“lp-Ø·oŸ6mÚdy½}ûveddè7ÞPxx¸Ú´iS,I*44T£F’$-X°@&L°\;pà€¶lÙ¢åË—ËÇÇGO>ù¤^|ñEËõÂÂB]úïw¶ùùù–óyyy–ó±qãF­X±¢Ø{ÈÊÊÒ믿®¨¨(EFF*..Îr½   XR\U“6+;VQQQ–¤ÊØØX½òÊ+ÅÚûí·ß4eÊ›' Z3ÎÖ|¾Öš4i’ÜÝÝ•››«‘#GjÛ¶m%Êlܸ±ZbNLLTvv¶Ö­[§„„5iÒD›7oVZZš/^¬Ñ£G«E‹Љ‰)‘ \•ºÖÜ“¶šG5¥(y×`0¨~ýúJLL”$M˜0AíÚµÓ¿ÿýomß¾]’$I–2’mïÉõë×—º;ìÞ½{+ô^‚‚‚4sæL5oÞ\GŽш#J$'K¬9EªrOVæ3 Ò¸qã$I«W¯Öã?në””1Bk×®UPPF¥gžyÆ&u­Uյζx¿6l(qníÚµJHHЪU«d4Õ½{w-]º´Ô*{?ãÿÙ»ïð(Ë´ïãß™ôÞII@:¡H@EQ𬂮ëó`yvåuEݦ®Š® KQQVT@AXz/JBhTÒ33ï1#1 ¤LIà÷9ŽLî«w™›{Îëi8ŒÎ &¢šFйC>ÿz52«žQ³¶šG5%ú—•]O¤V~0TWO?ûg:ÇßXãŸK“2ëÓ¶±ru­>O>9ùÙÙ9T[ïÌ™³Ö×}z_Å1/düºRo‡íjfµÎ¥§Þ„ˆˆ&vkk«˜k{¬ªkߤI¡!Á—­»bÅJL&...üþñßU*oÕªwÝ9°¬î7«+<‘†çË/¿Äl6бcÇ ewß}7...”––ò¯ý«RÛ¤¤$–.] ÀСC/ûœÐ––/_n}ݹsg‡Œ —?VC‡ °°°ÊcÕ9ëü¶k׎øøx¦OŸ^ež£b._ý3$$ĺíܹs@Ù*Àöj{µÊÊÊââÅ‹À¯ È...Œ9’îÝ»sûí·[ë–—Ÿ8qº­¡ÜsZ¶lÉ’%KhÛ¶-{÷îåþûï¯29ÙÞ®¶{N} 6 JJJxñÅ+%‚ççç3~Ùù7ß|³ÍÚÖG}îuõaÏý=vì˜õ½S«¶—»žEDDDDDDDDD¤áh+(÷íÝ€”´Óœ8y OO*ë•ͼZ\aÛÃï /?Ÿ£'N’™•ƒÉdÂ×Ǜ֭šÓ»GW …EElݹÏîûÑй¹¹U<¶žøùù`1[¸˜g›Õ«ËÍ|o¥%%|·j ûâÂ… \]]iÁ}÷#ä—$Ø}ûUÛDZã)dddÄäÿý=...>œŒÁ` eËXZÄÆ0íí÷¬õ“8uú M##øÓÿý/žžžlݶƒ¬ÌlÜÜÝ ÄË˳FñïÞ³£ÑÈßÿú³æ|„Ùd":ºÍš6eÆ{slÒÖV1×öXýÖŽ{€²Y¬§½ùwfÍþˆ¢¢"š7¡Y³HÞ™>ËZ÷ô™³Ì›¿ˆ fè]ƒñööâó¥_“››K—ΙøÈ8\]]ÉÎÎaæì¯»ˆˆˆˆˆˆˆˆˆˆˆˆ8W~~>çÎ#""‚ààŠ“ÙvëÖ €ÄÄÄj“óÖ¬YÃÈ‘#ñòò¢}ûö5^´>²³³¹pá!!!„……Ù}¼r—;V:uàçŸæÂ… ‹©>œu~{õêe}ýÅ_Ôª­½b6üò,½.êÓöj”ššJ»víhÖ¬;wî$>>ž€€²ÉËo¾ùfþñe«%CÅå†pÏ騱#<òAAAlܸ‘Ç{Œüü|›ŽQSWÛ=§>®¿¾l²ö]»vY'ø­¤¤$‚ƒƒ &ã—IãëÓ¶>ês¯«[쯟Ÿ£Gææ›o¦Y³f“ŸŸÏ‰' ÀÓ³fßÁ)w¹ëYDDDDDDDDDDŽF‘ Ý€˜f‘¼ðÌcÕÖ»˜—Ï+oÿšÐi4h‹»» =ºTÙ&¿ E_¬àbžs5$÷ŽÊ”?=Uiûÿ<9‰ÿyrYYÙôí7ÄfcF:wj§§'}úôª¶Þ?ndÕê5Õ–›Íf¦¿;‡_ø#ALýó+”geeWHº5›Íü¿çÿÊ»Ó_ÇÏÏ—?ÿ¿gê¼GŽ$³îÇŸ¸åæéÙ#žž=â­e™YÙ—MP®M[[Å\Ûcõ[))'ùæÛÕÜ1x]»tâßï¾Y¡í¥ ÊÓßCxx†Üq;·õ¿…ÛúßR¡<''—'ÿ÷Oœ;—^§ýÇ*((ÀãâÄÒåÉ¿—[9ôÒ²&MšØ!ºª]¼x‘¼¼¼6&T¬Ê¶ÒÒÒO}8ëü–¯œ›ÍùóçkÕ¶!_“R&%%Åš  0`Àrss‰‹‹#::šÔÔT¢¢¢€Š Ê áü<(›Pÿßÿþ·Ó’“Ë]M÷œú(?××_=ÉÉÉW¬hMº­OÛú¨Ï½®>껿qqqÌ›7ˆˆˆ õ<==+$×er†ê®gi8E‚²—wÝ[,>ûê;Ú´Š%ªiÁAþ¸»¹QTTLú…L'gëÎ}äåØ8b©)‹ÅÂþçô¿õfºtéHhhÁA˜Í.ddp81‰ïVýÀ·ß}Ùl¾l__,]FVV£FŽ mÛÖøúùRŸOâá$~X³ƒÁ€Åb±Öß¹k÷Ü;†¼ë{ÄÞ„€òòòÉÊÎæüù Ž?Á¦ÿn½â~üñ¹—xlâxnp+ááaq$ék×m¨4n}ÚÚ*æÚ«ßšúÒ?8‘’ʃÐ42‚¢¢"’’±fmå˜M&Sžÿ ߯ù‘ûF £c‡vxzzrúôÖ­ßȇ- ##óŠÇXDDDDDDDDDDDD†êž#•']î9SMú±“É8~õÚêö±°°W×FñÈpÞù­í¸õiëÈkRÊ$%%1pà@kò AƒÈÈÈ`Ö¬YL™2…Ûn»E‹JAAA…Û†p~ׯ_O×®]ñ÷÷gîܹ<óÌ3|óÍ76§¦®¦{N}”_&“Ézÿ¿www›´­úÜël1n]Õ»ï¾KDD………¼ñƬ\¹’ôôt<<<ˆ‰‰aöìÙDFFÖ)6Ý“EDDDDDDDDD¾Fñäá…¼S§vàÐá£:|Ô¶]¥}ú‹>ý¢NmûÜ4è²åC‡?Xåv‹ÅÂÖm;ÙºmgÆý­Ö¬ç‡5ëk\ÿô™³¼9mF½Ç-,,äíwfòö;3íÞÖV1×öX]ª¸¸„Ϝ˿gέùx?üÈ?üX«qêz]‰ˆˆˆˆˆˆˆˆˆˆˆˆã;wŽöíÛ[WB­JÓ¦M­¯ÓÓÓ«¬séÄÅÎJ(¶÷¸'Ož¤K—.´k×ήã\Nm³­Îom•÷@PP™™5ŸüØÖ1ïÚµ‹¼¼¼Ë®Økë¶u½&ù>ª#GŽE×®]‰ŠŠâã?fÅŠ<÷Üs 4ˆM›6a0HNN®°_κ&/µe˦NÊœ9shݺ5o¿ý6F£‘å˗ר½î9öQ~m|óÍ7Lž<Ùamë£>÷ºßªMbo}ö·}ûöÄÅÅ0eÊ–-[f-+))áàÁƒ\¼x±V}ŠˆˆˆˆˆˆˆˆˆHãbtv""""""""""""""ÒøíØ±€ë®»®Ú„ÁÛn» €üü|úÈZ¶bÅ ^xáë*­ûöí«Ð¶¡ßÂÂB}ôQ-ZD»ví˜9s&#FŒàĉÕ¶Ñ=Ç>÷ö3gÎ0cÆ &OžÌý÷ßOBB , 99™ôôt<<<ˆŠŠ¢gÏž¼øâ‹˜L&›´­úÜë~kçÎFÞxã f̘Ùl&&&†¨¨(Þzë-›ìï¡C‡HKK£Y³f¼ð xyyñßÿþ—ŒŒ <<<ÆËËË&ÇGDDDDDDDDDD&%(‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆM¼ùæ›DDD0lØ0 Ä Aƒ*”gggóè£röìÙjû0›ÍL›6¿ÿýïñ÷¿ÿ½Byff¦Ý”?βeË:t(ݺuãÃ?¬0®­’¶lÙÂðáÃyöÙgéÛ·/îîîäææ²zõj† †‹‹ ‹Åfc^ª.ÇÙç·.öìÙÄ xë­·ç®»îâ®»îªT/77·RÒž³b¶•º^“õ}[““‚‚‚ˆŒŒ$55µž{TÙ¾}ûèСf³™¥K—Z·gee±jÕ*† ‚ÅbáÀ•Ú6´ó›››Ëï~÷;–/_Npp0ÿþ÷¿¹çž{(,,¬²¾î9¿²õ½}ÆŒxxx0iÒ$bbb˜2eJ•õ>øàŽ;f³¶õQŸ{Ý¥ùþûï¹í¶ÛHHH !!ÁZ–™™Y!A꾿f³™gžy†>øþò—¿Ôv—EDDDDDDDDD¤‘S‚²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆØ„Édâé§ŸfåÊ•Œ5ŠÎ;ãååEZZ?üð³gÏæÂ… WìçÓO?%##ƒ±cÇÒ®];üüüÈÏÏçСC¬Zµ ƒÁ`·$º?ýéO?~œ¡C‡Ò¬Y3 9räˆ]Æ=rä“&MÂÝÝ&Mš`2™¬‰”Ǩ6±Ñj{œmu~ëbË–-ÜvÛmŒ1‚[o½•víÚDqq1ÙÙÙ9r„7âââRa…OgÆl+u½&ëó>:wî›7o®ØxñâE»ìß¾}ûxàøñÇIKK«P¶`Á† ÂñãÇ«¿!žß³gÏ2eÊfÍšEÛ¶m™ÉàÁƒ‰ŒŒ¤°°Ã‡³zõêJǹ>û»mÛ6 ĸqãèÝ»7rñâE²²²HOO'99™õë×ÛüX‰ˆˆˆˆˆˆˆˆˆˆó~ù©à¥—^28pÀžžnÈÍÍ5´lÙÒžžntwwwÉËË3šÍf7ooo·’’wÀÓh4úX,?‹Å´~ýú¯¶oßní«GÜç‹‹‹sv""""""""""""""ÕúôÓO­¯{t¿äyn¥'Çâ,­ZµbÕªULš4‰ï¿ÿÞÉɵÈÓÓ“×_;0tèPg‡$v¢{ŽˆˆˆˆˆˆˆˆˆˆÈUèÒ9AyÜ·oßaƒ!Ó`0äšÍæ< ÐÍÍ­8??¿Äh4–øøø˜‹‹‹Maaaæ£GZüüü,aaa–:X^zé¥J³Œ³'"""""""""""""""R£GÀl6³{÷n'G#תo¼‘›o¾€éÓ§;9±'ÝsDDDDDDDDDDD¤.\€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈµfÆŒ?~œ;vpöìYòóóiÚ´)wß}7#FŒàÛo¿åüùóNŽT®5£Fâ±Ç#** €÷Þ{Õ«W;9*©/ÝsDDDDDDDDDDDÄÖ” ,""""""""""""""â@...Üzë­xxxT[çÀL:ÕQ‰”ñöö&**Š'N0mÚ4–/_î줞tÏ{P‚²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¹¹¹ñÎ;ïЧObbb ÁÝݬ¬,<Èwß}ÇÒ¥K)))qv¨r Z¶l7n$11‹ÅâìpÄtÏ{P‚²ˆˆˆˆˆˆˆˆˆˆˆˆˆˆðÀ8;„kJVVß|óM•eƒ#F88"û˜0a­Zµrvb'cÆŒaÓ¦MÎC® °°™3g2sæLg‡"""""""""""UèÚµk½ÚÿíoÃ×××úû«¯¾Ê™3gê–4r»Ùm÷1M‚r“°zuëDËæQ`6›ÉÈÌ&1é·ì"¿ °Æ}µhÅuq-ˆi†¿Ÿ/óòx÷ƒEvŒ^DDDDDDDDDDDDDDäÚ3þ|î¿ÿ~:tèàìPÄ>øà&OžÌÊ•+ŠˆˆˆˆˆˆˆˆˆˆH£c0ˆ‰‰©w?QQQøùùYwww¯wŸ"5Ñà” ·÷ëà Ý1 Ê"ÃÈ #¾S{fÏûŒ¬œÜËöÝ,‚!n&ºYD…ín®.6[DDDDDDDDDDDDDDìÏÃâ¢"g‡!Õ(--åÓO?åî»ï¦{÷îÎGlÌÝÝéÓ§óüóϳdÉg‡#""""""""""ÒhFbccñ÷÷wv("uÖà”ýýèÝ£+FƒÃÉÇÙ¹÷2²ðõñâúniצ%þ¾Ü9ð>YòuµýtïÒaƒûáââÂ…Œ,öHäDê)2²²)**và‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ­Œ;–ÄÄDÖ¯_ïìP¤f³™¥K—’ŸŸÏM7ÝäìpÄÆ\\\xõÕW àý÷ßwv8""""""""""" ž‹‹ -[¶ÄÇÇÇacÆÅÅqôèQÌf³ÃÆ”«_ƒOPÎÌÎáËo~ °¨ˆŸ«Pv8ùcG¥m\ ÚÆÅâîæFqII¥>Ú´Šeøþ˜Íf¾^¹Ž-;öb±Xµ """"""""""""""b'?üðãÆ#))‰S§N9;œ¯{÷î4mÚ”cÇŽ±ÿ~‡ŽýÝwßQPPÀí·ßî°1—,YÂèÕ«ƒvظע)S¦Èo¼áìPDDDDDDDDDDD,WWWZµj…———ÃÆìÙ³'Ï>û,[·nåí·ßÆd29ll¹º@MìÞÿs¥äär{Ê–4÷÷÷­TîáîÎ}Ãb0øbù÷lÞ¾GÉÉ""""""""""""""W‰£G²mÛ6Fމ»»»³Ãiðî¸ã qÊø?þø#_}õ•ÞÛÿýïçã?æÄ‰uîcïÞ½ôë×^½z±víZFwõyüñÇùÛßþ†Ñhÿ¯£øŒ‚Èm•ÂÛ}h‘:qww§uëÖMNNHHàÿþïÿpuu¥OŸ>Lž<‡/W·F‘ |9ÅÅÅÖ×%%¥•Ê{u—'G§²gÿÏŽ MDDDDDDDDDDDDDD`åÊ• >ÜÉ‘HMlݺ•Å‹7šÙùß~ûmRRR8þ<¯¾új­Û›ÍfRRR0›Ímë,£Fâí·ßÆÕÕÕÙ¡ˆˆˆˆˆˆˆˆˆˆˆ4žžž´n݇٧Ož~úé ÉUm»– """0 Î¥Qjô ÊíÛÆ~>ƒìœÜJåݺ´àb^>£ï»‹ÿûÃüüÜøOMdìÈ¡´iÕÜ¡ñŠˆˆˆˆˆˆg¼ü© IDATˆˆˆˆˆˆˆˆm•””°hÑ"Ú·oOBB‚³Ã‘Ø·oü1%%%ÎåŠ.M´­í—uÖ¯_OçÎéׯ………këlC† aΜ9v]"ÿ 8{ë¯?yŸÙm(‘zñöö&..777‡ÙªU+†ÊñãÇÉÌÌÀd2‘œœLXXÆ sX, U×®]Y°`ï¾û®Cǯ&zºÚæÑM‰ïÔ€Uë6U*÷óõ&,$€ÎÚV(sõö¢m\ ÚÆµ`͆-ü°~³ý»8sæ Ë–-cذaœÞ^œ9wžÏ¿^Ue=o//ëëeß­åxjyyù—’všþ‡ü‚BzuïìØEDDDDDDDDDDDDDÄ~–-[FNN>ø ...ÎGjàÌ™3Ìž=›ÌÌLg‡"vpÝu×ñÙgŸíìPDDDDDDDDDDD&88XÉÉrÕkt+(‡ñ»Ñ#ð÷ó!ýB&-úÅÅ%UÖõôüuymWWJKMÊ‹‹KØè×wëDltS»Æ-""""""""""""""öWZZÊ'Ÿ|Âã?ÎðáÃùüóÏm>Æõ×_ϰaÃ8þ}úðñÇÛ¤íÌ™3yýõ×X·n]• Á›7o桇`ñâÅôèÑã²ûb+111,^¼˜ñãÇsøða‡ŒYoð ž}Á%Œ>`Îs6˜Ò x;\œçì(EDDDDDDDDD¤±iÒ¤ M›^ýùŠ7Ýt}ûö%66???Μ9ömÛØ°a#GޤK—.˜Íf6mÚÄG}Tås§‘#GÒ¹sg‚ƒƒñóóÃÍÍììlY¾|9‰‰‰ÕŽïééÉ!CèÙ³'‘‘‘xyyQPP@nn.gÏžeÿþýüç?ÿ©Ð&&&¦Êç{ ,¨´mïÞ½¼üòËUŽÝºuk† B‡ð÷÷çâÅ‹üüóÏ,[¶ì²1Ò­[7®»î:bcc ÃÛÛƒÁ@aa!çÎcíÚµ¬X±¢Ú>’F• `MN>!“>ùœÜ‹ùÕÖ¿4!ÙÛË“œÜÊo³²sðóóµ}À""""""""""""""âpyyyÌŸ?ŸÇ{ŒþýûóÃ?Ø´ÿœœ²çÌ>>>W¬ëë[ö,:;;»Âv£ÑȈ#èÚµk…í¡¡¡ÜtÓMôèуùóç“’’Re¿¿ÿýï ¨²ÌÅÅ…ÈÈHÜÝݯ_9ÆŽKhh(ÙÙÙÌ›7ÏaÉÉårrr˜3gãÆ³ûj»/^ä‘GáèÑ£DFFòá‡Z““«[n¹Åš ¼iÓ&FŽY©Î¶mÛ€²ë2>>Þ¡ñ…‡‡³hÑ"yävíÚåб«b €9àÚâ7ÛýË~\£@ Ê""""""""""R ‘‘‘›Œµ¦ÊŸiY,›ö{÷Ýwký=::šèèhî¹çž õ @@@@•“ùvëÖ¸¸¸ ÛBBBèÓ§½{÷æ½÷ÞcÍš5•Úùùùñ·¿ý¨¨¨ Û}}}ñõõ%22£ÑX)AÙFÍðáÃ+l $!!^½zñþûïW;áí?ÿùOBBBª,óññ¡E‹lÚ´Éæ1ÛK£IPöðpgÌÈ¡øûù‘™ÍûŸ|qÙäd€Ü‹¿&$øW™ ìââ€Ùd¶mÀ""""""""""""""â4çÎcáÂ…Œ;–ŒŒ ›&D–'({zzâââ‚Édª¶ny‚ry›r·ß~»59yïÞ½lÛ¶‚‚bbbèß¿?>>>Œ;–éÓ§WJn0 ¤¦¦²k×.Ξ=K~~>&“ ///ÂÃëMnþ-///ÆOTTYYY¼ÿþûdeeÕ¨­­0wî\zè¡J_F±•ììl~øaöìÙC³fÍX°`A¥U ÆŽ˃>hýýõ×_çÃ?¬Qÿ­[·æàÁƒ¬ZµŠÉ“'°}ûv¼½½+Ô-ÿ΂-Ú^wÝu„‡‡söìY6nÜXe‚òÖ­[HHH¨ÔÞ™?>?þ8?ýô“ÃÇ¿”ï#eÉÉ–bÈý7msÜÀ%ÜÚùò_K© **ŠÐÐPg‡QIùs¢¢"»ô¿páB¾ùæ:tèÀ”)SøöÛoùì³ÏèÖ­O>ù$×_=ÑÑѤ¦¦Vh»xñbL&“õY—‹‹ qqqŒ3†fÍš1qâD¶mÛFnnn…v÷ÝwQQQ”””°hÑ"vìØANNnnn„††Ò²eK *ÅšššÊ<@¯^½xê©§?~|¥É{ÍæÊ9§Ã‡·&'ïß¿Ÿ… ræÌš6mʘ1chÛ¶-&L 11‘cÇŽUj_þŒïðáÃüøã¤¤¤››Kii)>>>ÄÄÄpøðá÷† Ñ$(ß=¸?MBƒÉÏ/à£E_VH>®Î©3ç¬¯ÛÆÅ’ròt¥:‘áa¤_Ȱ]°""""""""""""""×(ƒÁ€——EEE—MÜu„¤¤$–,Y½÷ÞK^^žÍæ—'ï üüü¬¿8æÍ›³råJNœ8`]•733ÓÚ>00n¸€;v°téRkÙéÓ§9zô(O>ù$^^^Üzë­—Ù=11‘-[¶TÚ~òäÉí‹¿¿?ãÆ#""‚óçÏóá‡:-9¹\qq1óçÏç/ù‹Íû>{ö,?ü0‰‰‰´lÙ’yóæUJN†²äßKxk“Ìk0ðððÀÕõׯexxxX·Û£-@¿~ýøôÓOÙ°a&“©BÜ&“‰Ý»wpÓM7ÕxlÍÛÛ›÷ߟ뮻Îi1¸w.û³à;Èû¤b™éïs|L""""""""""Òx5oÞœ   §Æ`±XX¿~=éééÖmtìØ(›à×ÒÓÓ)((`ûöí¤¥¥Ñ¬Y3öíÛGNNëÖ­cèС4oÞœ6mÚTJPÞ¹sg¥þ¶mÛFZZÿú׿pss#>>žõë×W¨Sþœaýúõ|õÕWÊ.\¸@bbb•±Z,JJJ*<Ë,))±n¯Npp°u‚Ø-[¶ðÆoX“˜³³³yùå—™1cÁÁÁÜu×]¼óÎ;ÕöµcÇŽ*WYNJJºl ÑÙÔDTÓ:whÀç_¯æBf͆æ^Ì#%­,)¹k§v¸»¹U( ¤më:|Ô†‹ˆˆˆˆˆˆˆˆˆˆˆˆˆ\{Ú´ißþô'žþy^xá†Nppp…:ñññ<üðÃU&…Úþ}ûX±b=ô±±±6é3??ß:Ã|y²Ñh¤gÏž4oÞœöíÛ[ë–—gdü:iv×®]1˜L&Ö¬YS©ÿôôtëŠÏ]ºt±ÛJ·¡¡¡Lš4‰ˆˆNž<ɬY³œžœ\.22Òæ}=z”ûî»ÄÄD:wîÌgŸ}æ°ëÐQ† ”­Ø]¾Zr¹½{÷’Ÿ_¶$pß¾}Û¥:äÔñ¡lµd÷Ž` pn,""""""""""ÒøeffV¹â®£ìÙ³‡gŸ}–wÞyǺrpDDS¦L±>kÚ³gÝã(_é8 à×ÿ|/ŸÈ×ÇǧÆýœ:uŠóçÏ^©<;;({>éççWçxk£oß¾¸¹¹QZZÊœ9s*"¾ùæ ì™èµ Q¬ Ü·wwRÒNsâä)<=«žØb±PTT\aÛÚ [÷À0ýýûÀ0¾ûá'22³ˆhʈ»àb4RPPÈ·ÛÿÍ%"""""""""""""rµŠŒŒd̘1Fòóóñòò¢GÄÇdzmÛ6víÚ…‡‡Ä××—ÂÂB‡Å¶uëVBBB3f ¯¾úêg?¯‰ŒŒ "## $%%…èèh¼¼¼hÛ¶-ß~û-P¶Z2”ÍÔ^.&&([Í·º„àŸþ™=zàææFdddWD®©¦M›rã7âííMrr2Ÿ|ò ÅÅÅWnè-[¶d̘16ísÿþý¼ÿþûdffrà 70sæL¼½½m:FC@xx8gÏžeõêÕôîÝÛZVž°m½á¿ÿý/'NtÚøåòG¸¶„°¥ÿ| ¥©Wn+""""""""""ò[999$''Ó²eK»M>[W^y¥ÂŠÁîîîÜu×]ÜsÏ=xzzpæÌ™*W쵃ÁP£mÞÞÞ 4ˆnݺ†¿¿?………œ>}___<<*ç“®X±‚øøx¢££™1c+W®díÚµœ>}Úö;ó‹òIŠ>lMºþ­ògzþþþøûû“““c·x‚F‘ ]6cqL³H^xæ±jë]ÌËç•·çTØv8ù8k6láÖ›zÑ"¦?<²ByqI ¾XA~~í¹Fôë×£ÑÈÒ¥KÙ±c 8Î;“@BB‚µî¶mÛ*¬(loþþþtèÐØ$9~MP ~ýBBaa!aaa‘™™i-¿4A¹|÷Ë­V|i™=f}ïØ±#P6øºuëLrrûöí9r$®®¶ý:Cy¸Á`àñÇ¿*““¡l%ï!C†0wî\V¬XÁóÏ?oýÔO?ýÀM7Ýä´øV­ZÅÿþïÿ6ˆë­h3dþžc(ø>\öS¼·,y¹p ༅.DDDDDDDDDD¤ÊËË#))‰–-[âæææ°q/MNîÛ·/cÆŒ!88غ---W_}•¼¼<‡ÅTQQQL:• ÛÝÝÝñ÷÷¿lÛÝ»wóÏþ“‰'Ĉ#1b‰‰‰,_¾œÍ›7Û|EëKŸ ~ñÅW¬ïëë«å†ÀËÛ«^íX¿™©§HèÑ…˜fxzy’—W@Ò±Öþ´…ŒÌlE*"""""""""""""rmJJJ¢°°;ve ¶‹/fÓ¦MÜrË-´jÕŠ’’¶oßÎêÕ«———ãÇçÔ©S|ùå—6ë7==øu…ä:——Çúõëø€W^yÅ.Éöõe)‚e?.‘à= |×<Î?¦tgG)""""""""""IQQGŽ¡U«VxzzÚ}ùÄæ«¶ž;w€àà`ëLô{öì!;;›””bbbˆ‹‹~Mf.WþEˆˆˆj“”Ûµk@qq1§OŸ¶iìå222˜3g)))Fî»ï>:vìh—±.gÀ€ÜqÇvKN.ÃâÅ‹éÖ­&“‰§Ÿ~šo¿ý¶Fm½¼¼€Ú'‹—·ÈÍÍuXÛÑ£GðÝwßqþüyV®\ @ÿþýòE¨KM›6üãvON¶–ýiðº|½Ë1†Ü™p~ûl•íZ¶lIHH.\àµ×^£´´”ë®»€#GŽpôèQž{î9›·uwwgìØ±¼õÖ[Ìœ9“¢¢"¹ùæ›k|œê£´´”gžy†åË—;d<€â½¿¼0BàËû`×(piZ¶2ò¥B¦ƒ¥ WCñA0g€Á\"Àû0—Õ+9à°]‘«ÙlæèÑ£4oÞœÀ@ûÌŠQá÷ÔÔT»ŒcKÇŽ#==°°0&L˜€‡‡ûöí#77777üýýñðð¨¶ýÔ©S)--eãÆ$%%‘••…««+aaaÜ~ûíÖc””TmiiidggÀ˜1cpqqáĉ ¢¢¢hÖ¬óçÏ·Ö¿páK–,á ÿþtèЕ+W’––FVVnnn4iÒ„öíÛ3gλNBÜP(AYDDDDDDDDDDDDDD®­ZµâÎ;ïdñâÅvÿòEZZM›6Åb±°sçNëö‚‚”+,,dþüùüáÀÇLJ|™3gRRRbó±ÜÜÜxðÁiÓ¦Íû®)???Þÿ}îºë.222xüñÇYºt)žžžUÖeèС,[¶Œ;wòðÃ[Ë«MP6<ýôÓ<ÿüódffòç?ÿ¹By```µIÆõi 0vìXfÏžM^^Æ ÃÝݽÚú¶RPPÀO<Á?þh÷±.Uš…ëÁ³/¸w‡î¿–™³~“ l·Ž`ðÞ•º²*ÜßÛ-d¹FX,Nœ8Éd"$$Äæýÿöÿÿ l>†­Y,þõ¯ñüóÏãããÃĉkÜÖh4Òºuk<<<èÚµkµõ¶oßÎÆ/ÃÂ… yüñÇñ÷÷ç±Ç«Pž››[!AàóÏ?ÇÝÝáÇÁ¸qãªì{Ù²eU>#¼Ú(AYDDDDDDDDDDDDDD® <ðÀlÚ´‰ýû÷Û}¼´´4zöìÉáÇÉÊʪP¶eË:uêÄ… (**ªÔÖl6³dÉø sæÌ`äÈ‘µVU²žßGÀë606Š $  €å—ŠÈx <û{'0†‚10—­¤\r WAÁª²m"""""""""""õe±XHMMÅd2ѤIg‡Ó :tˆÉ“'3dÈ:vìHHH¾¾¾››KVViiiìÞ½»B;‹ÅÂ?þñhÓ¦ AAA`6›ÉÎÎæøñãlܸ‘ 6`±Xª½Ì÷ßOnn.ƒ¦E‹x{{SXXÈñãÇÙ²e ƒ¡B‹… ðÓO?1pà@kÜnnnäåå‘––Æþýû6 ±³~ù©à¥—^28pÀžžnÈÍÍ5´lÙÒžžntwwwÉËË3šÍf7ooo·’’wÀÓh4úX,?‹Å´~ýú¯¶oßní«GÜç‹‹‹sv""""""""""""""ÕúôÓO­¯{tÿõyî£pF86ãââ£>ŠÅbaΜ9˜ÍÊ*lh|}}?~<‘‘‘Îåš±`Á¦NJ||<Ÿþ¹]Ç:þ<ãÇçСCvGDDDDDDDDDD¤± ·éó’>ú???ëïO=õ)))6ë_§Ý».Iìþ%‹¸o߾à C¦Á`È5›Íy@¡››[q~~~‰Ñh,ñññ1›ÂÂÂÌGµøùùYÂÂÂ,:t°¼ôÒK•²½Ú»8p !!!|úé§JNn€‚‚‚˜8q¢’“èüùóLŸ>€I“&Ùu¬“'Orÿý÷+9YDDDDDDDDDD¤Ξ=Kjjª³Ã©7Wg """"""""""""""R­Zµ¢wïÞÌ›7ììlg‡#¿Ñ¤I~øaüýýÊUíðáÃxyyáææÆþýûyýõ×IOOçÆodÀ€v÷È‘#Œ7޳gÏÚm ‘«Í… 0™L4oÞƒÁàìpDêD Êv2pà@âââØ»w/6lpv8ÒˆøûûÓ¢E 233IIIqv8R#‘ª…††KVVIIIΧFœõ¹ÝßßŸØØXrss9vì˜ÃÆ•«›þ*""""""×*î¹ç~úé§FóÿR×’èèhƇ———³C¹ê½òÊ+¬_¿¾Â¶¸¸8¦M›f·1wïÞÍï~÷;²²²ì6†ˆˆˆˆˆˆˆˆˆˆÈÕ*++ “ÉD«V­œŠH(AÙN&Mš„çÏŸ¯smÚ´aÊ”)xyy1mÚ4¶nÝjï.WÓ±Z¸p!nnnÌœ9³Á%¿^Mǹ>ò9ÇŠŠŠbäÈ‘\wÝu„……QZZÊÙ³g9räÛ·oç§Ÿ~rvˆ"¡÷‚”›={6>>>Ì;·Ñ|ÔŸÛëâ£>²«º&(×ö³ÙðáÃyì±Ç*m?qâ'N´Û¸â8κžEDDDDDDœmðàÁäååñý÷ß;;©Â„ pwwwv×///ÈÏϧY³f 8'žx.V‹ë IDAT»9fÌòóóíÖ¿ˆˆˆˆˆˆˆˆˆˆÈÕ.77·Þ}Lš4©Â*ÌEEEõîS¤&” Ü€;–¦M›ðè£Öú‹ÿƒˆˆΜ9ƒÅbqX[g¨ï±’šÑqvœÆö¼µk׎×^{  Ûýüüˆ‹‹£]»vJÊ”k‚Þ "Îã¬ÏfÎüwŠˆˆˆˆˆˆˆØ×§Ÿ~êìꤱÆ}­ÐùqŽãÇ3kÖ,fÍšåìPDDDDDDDDDDDä vïÞíìDê¤Ñ$(7 ¡W·N´lEPPf³™ŒÌl“ޱqË.ò +µ  á&Ž®ñ3Þ_Èé³é¶ »^L&S•¯k¢{÷î¼øâ‹xxxp÷ÝwSPPà¶ÎRŸc%5§ãìñ=x-zúé§ñðð ??Ÿ?ü]»va6› ¡eË–ÎOÄaô^qžÚ~6[¾|9«W¯¶þ>nÜ8†j÷q/u­|Ι>}:mÚ´aÕªU¼ùæ›Ê‚‚‚X´hƒW_}•µk×:)J‘ºkð ʃÛûõáÆ„î/Yf 2<ŒÈð0â;µgö¼ÏÈÊ©ÿræ ɼyó ÅÓÓ³Ö³{{{WZÉÐm¥>ÇJjNÇÙ1ã{ðZKLL 3gÎdåʕֲ´´4öîÝë¬ÐDJïçªíg³’’JJJ¬¿;dÜK]+ŸsÂÂÂèÕ«F£³Ùl-ëÝ»7†_þmÛ¤I§Ä'"""""""""""""""""""""R_ >A9ÐßÞ=ºb48œ|œ{q!# _/®ïÖ™vmZàïËoá“%_Wh{þB&oÌø°Ú¾ £F ¡iD§Îœ#ý|†½w§VŽ=ÊO<áì0+ÇÐq)si2Ñ–-[œ‰ˆsé½ â\Îúl¦Ï„—çêêJ`` ´oßžýû÷[ˬ¯Ë™EDDDDDDDDDDDDDDDDDDDDD›Ÿ œ™Ã—ßü@aQ?9V¡ìpò ÆŽJÛ¸´‹ÅÝÍâKV3™ÍdfçTÛ÷M ÝiFi©‰ÅÿùŽR“Énû!""WKW~,**rb$"Î¥÷‚ˆHe¡¡¡ Ž;F‹-èÓ§5AÙÓÓ“øøxk™VP‘«™ÁÓKaõÏk¯wopñÀRéìPDD7ŒÁ±¸„¶ÂœqÓÙCÎŽHDDDDDDDDDDD.Ñà”vïÿ¹Ú²=Ó6®F£_Î_¨ÙCÝ@?ú÷-[¹jíO[9Ÿá¸‡Áþþþ¼õÖ[DEE‘’’ÂSO=ÅÅ‹>|8=öX¥6'Nœ`âĉ—í766–Y³fUÚþå—_VÚ¶k×.ž{î9›´9r$&L`ܸqœ9s¦R›Î;óúë¯ðÌ3ÏTXA¬®ês¬Êyyy1lØ0z÷îMTT^^^““ÃéÓ§Ù½{7Ÿ}öY½cý-WWW† Æ­·ÞJTTƒÔÔTÖ¬YƒÁ`¸bû¶mÛ2|øp:uêD`` ¹¹¹8p€/¾ø‚ƒVÛ®.ûk‹ãl0¸å–[0`qqqøùùQ\\LVV©©©$&&òÃ?pêÔ© íLÛ¶miÕªÁÁÁøùùa4IOOgçÎ,Y²¤ÊëÍǪ¾ç¨¶êó¼Ô 7ÜÀ!ChÓ¦ œ;wŽÍ›7³dɲ²²l7@PP={ö¤cÇŽ´hÑ‚ððp|||(,,äìÙ³¬ZµªÂ¾¸»»óõ×e«Þ¿òÊ+¬[·®R¿Ë—/ÇÍÍ™3gòŸÿü§B™-®ÚªÍ9š;w.‹/®´½.ÇêRµ=¿ýúõ£ÿþ´lÙ???Μ9æM›X»v-cÆŒ¡{÷î˜L&6lØÀ¬Y³(((¨ía¹¬úÞck»¿õ½® þçÈÃÃ[n¹…n¸V­ZHII 999=z”-[¶ðí·ßVÙ¶®÷+G³Å{ê~¿ªï9ªºž£1cÆOhh(þþþ¸¹¹‘••ÅÁƒYºt)‡Uÿešº¼œõÙìR ôîÝ›èèh<<<ÈÈÈ`ÇŽ,Z´ˆsçÎUÛ®>Ç ê÷¬Êå>·Û*昘ž}öYâãã­×Uùy=zôh¥ú¶ølVÎúwJC¸žk+$$€;vBïÞ½™={6Ý»wÇÝÝuëÖÑ¢E kÝߪïuU•š\Ïàœ¿êr¯kï7–¿»EDDDDDÉè‰ÇmSp ‹ÃàÛ„Âo¦Rrè‡ÆàÖe}&ÅLц”X~Ùú¾ÿ³ƒ›W•e…ß½Lɯë‡ÁÝÏ;þŠ1,£_$E?½KñÖêÔ—ˆÈµÈÜŸqŸÑ€¢5ÿ¬S‚rmÿ^‘«CçÎù׿þ…··7Ï=÷k×®uvH""""׬ÿÏÞ}‡GU¥ÿÎLf&=!…$ 5A@AZ¥ ¢‚ŠqA)ê"¬……ß*¢««kwÕÛ‚(ˆ«"  TƒHo¡wHH!}ÚïÙLfH›™;ÉdÂûyž<™[νçž[ι3÷½GÚfΓ²B!„/ò‰åê”––Ú> F§ÓõïÛ­Öœ¼Ë¤mÚVY«T`` ÿû߉çâÅ‹üío«ô¡p_²eË[Ð@§N* úhß¾=………n=L_BCCyóÍ7IHHpLpp0Mš4A­V{<@900üã$'';ŒoÙ²%-[¶¬1ýرc9r¤Ã¸FÑ«W/zöìÉ|`{Pßž·¶×ßߟçž{Ž.]ºTKll,7Üpùùù‚Æg °×¤Iš4iBß¾}™>}:¨tÝî–•Ò}ä †§Ÿ~š›o¾Ùa|||êÚµ+­[·vEjj*½{÷æí·ßfùòåÒ¹{Õ‡¶YJJŠÃpLL ·Þz+7ÝtS§N%##£Òtî–(;+ãl»]Ižúõëç0ܨQ#úöíKjj*o¼ñkÖ¬q*¿ U}8ž]X{–߸q#¤Y³f?~œîÝ»°nÝ:ÆŒCXXX¥ËPz\]ÉÙãÙõ‘·îS@Yr5ÕÝB!„Bá U@#ü{xoý!1øßòWP©ðð,Æ#¼Ós±Ö¿©u¿^!„h(Ô~¶àdwÕ«zAQ§¦L™bûíA;„B!¼KÚfΓ²rZ­&>>žS§Na6›½!„âªåóÊ)m¬Á‚3/‘›wÙ©4ÑQtl×€Uk7b4™j-ö‚ƒƒùÇ?þA›6m8þ>ž‡~˜””}ôQöîÝËáÇ=²½JËyòäɶàä_~ù…+V••…N§#..ŽiÓ¦¡ÑTÿ£bZZK—.%''‡ÀÀ@ÚµkÇ<@PPS§Nå‘GÁb±x¬¬”ì#w)9ÆŒc öûå—_øé§ŸÈÏÏ'%%…|°°0^|ñE&NœHff¦Çó°oß>V¯^ͱcÇÈËËÃh4DóæÍÙ¿­¬ÓcÃ]®ì#£±úf¸ZVJ÷ïœ9sX´h;vä…^`É’%|ñÅtíÚ•gžy†îݻۂ§½Ò‡ÂÍf³C¯Ð®4,-‹-­}ãÔ`08,ÓÓi~ÿýwÌõ×_F£qÈ·F£±{nÛæ¹Þª•”@»víX³f ß~û­Ã´ÌÌÌZé}-11‘ÔTë›Ò¿ùæ>ýôS۴dzzõj–,Y‚Ÿ_ÅS3**Š|€ 6ðÒK/Ù8rrr˜>}:ÿùψŒŒdĈ¼öÚkéÝÝ^%åܲeK[Ú?þÈ{ï½ç0ýСCL:µÆåƒ²}ûvÛðîÝ»ÉÏÏç‰'ž >>ž¶mÛ:ä_IY)ÙGJ(97n̈#X±bo¾ù¦CžwìØÁ‡~HHH£FâwÞñhÞËlÙ²¥Ò^â|ø0Û·oç£>"88˜|_|Ñ6]iØ]ÞºOïÏ®*ëAÙh4²}ûv èÑ£»ví",,ŒÅ‹Ö2Ôëõètº å ô¸*ãìñìÍúÈ÷eWr¥Nñź[!„B!®&¦‹‡0çžAÖó¥c˜³ŽV›&ÿöÏêÆ­ zp~­æQ!DÝq§^°§í4ux¼5mk/NV’V¡ÜÛo¿Mll,¼ôÒKÞÎŽBÔ io!|…´Íœ'eå¼   ¼ !„‚F‚ÆÚŒÅì#ÍX_̳uI]ó,õSD£0¸k(*ìÙŸÁÞÎõJ@‡v­ذ9½ÒžH=->>ž·ß~›ÄÄD<È_þò—jƒ|QYJpp°­³2­[·Æßß°«Ô¹¹¹´mÛ¶ÊžË<­OŸ>”––:¢”1™LUöözóÍ7£Óé0¼ÿþûŽÝââb[°CYÅö¼±½}ûö ¤¤„/¾øÂ£Ë^³f­¬Zµjå0MIY)ÙGÞrË-· V«1•–ó‰'X¹r%`-OW×7Õ¾ÈÓû·¬§Å²à)€¬¬,Àz³î)î^s|ñxNJJ²Ç}ùå—•FVEéµÝ×øâþ­Í}têÔ)[›0..®Ât%uw}l›­]»Öö¹M›6.¥­®¬”œƒWòd»½¦ý[¦²žÆ333mÁ’7Þx#zýÕÝkO}<ž«SÖƒ²ÑhÄh4²iÓ&ZµjÅСCøí7ë˵ €K緳Ǹv<{³>òÆ}ŠW[Ý-„B!„>ÇXBáü?Q’ö%ëÿEႇÁ\ñû!„W ©„¸jíÛ·aÆѿÛo3B!„Â;¤mæ<)+!„Bø"ïG}¸!2"œ‡AP`ç.dòí+œN{ݵmñÓh0M¤ïªýž˜Zµjň# #==^x¢¢¢Z_o]ûã?ÈÊÊ"22’îÝ»óÇئ•œ={–³gÏz+‹|ÿý÷téÒ…fÍšñŸÿü‡ü‘•+WrúôéZ[gY°äÑ£G]>®½öZÀzãqéÒ¥Jç9qâ` Š ³=ìÞÙÞÖ­­/8zô(999]vQQYYYDEEÙ‚@Ê()+%ûÈ[RRR8vìX•A'›7ofðàÁèõz’’’jµWco«îØðEu¹U*•Ûù¼’»×_<ž;tè`û\\ë,¥×v_ã‹û×û(((ˆÛn»n¸ÆFqq1gΜ±ãU€ª¤î®m³üü|rrr'""¢ÒyÜ)+%ç =wÛíîîßšìÙ³°öœ””T'½ÈÖWõñx®NHHPÞËtZZ·Ür }ûöåÌ™3=jí£,8=00°Â2”W®ÏÞ¬¼qŸ¢ÄÕVw !„B!„/²^¢tólogC!D=!õ‚B!„B!„BQ{|.@9*¢AhH³²™óÕ÷”–œNmÛ–ì=AqqImeÓ¦wïÞX,,Xà3®²X,¬[·ŽáÇsÓM7ñÑGÙz’êܹ3Û¶móf+ضm/¼ðO<ñÜwß}Üwß}ìÝ»—ï¿ÿž´´4÷°Ý¨Q#.^¼èrÚÈÈHÀ„±|ùòç qxÞÛ[œQ[=† ÓéÆ+)+%ûÈ[Ê‚¼ª+gûieåÓUulø"_Ý¿î^s|q{ËòŸŸOvv¶[iݽ¶û_Þ¿î„^y墢¢æÓëõ/Q¨ìJêîúÚ6+,,$<<¼ÒÀJwËJÉ9hÏv»’ý[“ÌÌLÛgû^ï¯Fõõx®JPPP€¼uëVŠŠŠ`Æ ¶ùÊzP¾2@ÙÇ•«Ç³7ë#oܧ(qµÕÝB!„B¡”_«>h;Ü:ª%*?=æÜÓö¯ të\0–:ÎÛ¼#þe.úî ŒÇÊ{ ž° UpcŒGÒ(ú~Jù´'~E¥ ¨4Å?¿€aϞܬ üšuC{ýhâ®ýßvžÁtj{­®S!®f*ÿP‚Æ.Dð¿ïÏM ¿éì.@Y½PUZ¿æÝ yjk…ñ%k^£4ý¿ŠÓ>ð9šØvX ²ÈŸ5Ða^U@8Á­² —ný’’uïT¹BxÓ°aøãŽ;hÛ¶-áááœ[aü¡C‡4hPù9r$;v$99ÙöYFùsçHKKãã?æäÉ“îJ=tï½÷Ò­[7Ú´iC\\AAAqüøq–/_Îܹs¹|ùr…t'Nä™gž OŸ>•–I·nݘ?>`-×­[+^…ðu*] ÚŽw¡‰m‡:<ÞÚ.ñC¥Ra.ÈÄtj;¥Û`¾p BZ%õ¾’ö†ÃüI½Ñv¸M“ö¨ô!XŠr1Ûƒa÷bŒë\+ !„KùÓŸþÄ-·ÜBbb"ÁÁÁ¶ŽNœ8ÁÆù裪Lß±cGþô§?ѵkW"##ÉÍÍeÛ¶m|úé§lß^õ÷QJÖëNZ¥m³2 àþûï§}ûöpúôiV¯^Í'Ÿ|BVVV¥iêº]§ÕjÙ¾};|÷ÝwL:µÒùضmz½ž×_Y³fÊÊÊmo_Òºuk~úé§ ãwíÚUaÜo¿ýƃ>Xa¼;÷eT*C‡eĈ\{íµ„††RRRBVVGŽaÇŽ,Z´ˆãÇWH«ôÜÂ×Å®U%_×é»CÜïÇç½›±è{Aà kª°äBé^(Z ÅÕ4cUzþ}À/ Ô!`.s6˜ÎBéVëú,v—IOåÙUª@ºv ¹ÔaÖ?T`΄Òt(X†Š·DÍ­õVsœ¿¢Q‡CŒ]_P_BÞ»Êó,„O(G„‡Ù‚“3³²ùìËo¹œï|#)8(„ø8ví;T[Ùt°uëVÚ¶mKpp0/½ô¯½öëׯ¯“u×µ•+W2|øp5jDçÎÙºu+z½ÞÖÃT}ü¢qãÆüþûïôéÓ‡!C†’’bû;q⯼ò GŽñØú, P¬àв³Ùlë­:Z­¶Â¸ºÞÞÒRëƒ%jµÚcËt†’²R²¼¥l{Ëò^gç«Möyðd¯½ ‘/îß2î\s”l¯·Ž+Wó\YZ%×v_â‹Ç³’}¤R©xî¹çˆŠŠ¢¤¤„Ù³g³aÃ.]º„N§£I“&Ìœ9“èèè*—§¤î®m³² Ã+ÏQ%e¥ä´çj»Ýû·:öÇ[}8¼­>ÏU ÊÛ“¥¥¥<úè£èõz‡—à”ícûeOWîÏà½úÈk·ëý«¥îB!„B¥üZÝì0¬ŽLBßs"~-S)úz"ƒo? ë|ú¾O9ŒSG&¢ŽLôRŽ„¢áÓß4¥<8(^ýª-8ÙW™Žþf TRE¢ŽhŽùÒ1ÛtMܵŽóÛX—ÙÂ%ãÇ'99Ù6ܲeKZ¶lÉ£>ê0ß½÷ÞKTT&L¨°Œ>}úСC‡q±±± 2„Áƒóÿ÷|óÍ7Í÷ôéÓm1ØKHHàþûïç¶Ûn㡇bÇŽ]¯·L›6­ÂöÓ®];Úµkǃ>ȸqã*{¬]»Ö Ü£G¾þúë ËîÚµ+`}ÉtuBø2UhúÔ'*¦kŠ:¬)Ú”¡”¤½Oé–Ϧ{³ÞWiýñüb…ûuUP$~-Rñk‘Šaï2Šž –úó"i!Šððp¾þúkZ¶lé0>,,Œ°°0š5k†F£©2Hñ™gžaâĉ㢢¢8p  `æÌ™|ùå—]¯Ò<»K£Ñðúë¯sûí·;ŒOJJ"))‰»ï¾›qãÆU”]×í:ƒÁ@ZZ 55•JUéó^={ö´uì±jÕª ÓÝቶ÷ÕÆÝ{ÀÀ@>øàRSS+Œ äšk®á¦›n"//Ù³g;Ìã­óHˆ†Dåá/€ÿÍWŒÿÞÖ¿¢Ÿ g&pE3VÓ">¿ÇñêëŸ_è»AáB¨Oëjâ ´ò[ 4M! ) Ë@¾ã­%˔Ցà׌Çʧk¯½bþMžÊµ¸ÚùL€²^¯ãÁ‘à âRv.Ÿ~ùKÁÉ)mZ R©0:Rñ­$µaçμÿþû¼ð 4kÖŒéÓ§£V«Y»v­Sé˧®>p­¤‡)wÓ9r„}ûö‘œœL¿~ýغu+íÛ·G«ÕRTTTí[™<Áݲ2¬ZµŠU«VàAƒ>|8 ¼þúëŒ?¾Ê7,¹*++‹-ZãvÚuëÖñꫯº¥ÛëJ9Ÿ?ž6mÚ””äv~Ý¡¤¬”ì#Oqõt&Ï7¶}¾té’ÛyóƒÁ€ÅbA¥RÙz•óôþÝ·oEEEuÖK¸«×%Ûë­ãª¬ÇÖàà`BCCÉËËs:­§®í¾Â¯WJöQ‹-HH°Þ;ýöÛüòË/¶iF£‘ŒŒ §ÞHènÝíí¶™+””•’sО«ívOíߪØ Vw.¸ÛVª®ïS|éx.«ƒÊzH8{öl…ùʘÊ_±ç©ãÊÕã¹>ÔG®^ë¼Uïׇ²B!„Bˆ†@“‚>uÅ«ÿ陊l¨TjðÓ{f¹5PGµ@ßç/u².!„V~I½Ð^;Ì6\ºm>†]‹gRR/اõó‡²ïÁ-f,Æ’ ³[LF¤5Ûˆ®û8Û°&ᆪ•Œ%OKÀŸ¨ÿÞzë-æÌ™Ã7ÞÈÇ À_|Á»ï¾KŸ>}xã7èׯ­ZµâÐ!ÇÎFÞ}÷]ŒF#'NœàòåËhµZ:tèÀÔ©SiÑ¢/¼ð+W®$''Ç–fîܹ¶^{ÁÀ3fÌ—óýóÏ?óÕW_‘••EPP]ºtaÒ¤I„„„ðÆo0`À€õ‚áŸ~ú‰Ù³g“››KHH}úôá‘G!::šÏ>ûŒ¡C‡ráÂÛüû÷ïçܹsÄÆÆÒ³gÏj”7mÚäÔ _…h°T*ô½'aÎ;‹qÿ ÛhEõ¾’¶ à?pF…àä+iSnÅœ™Aéïs«ß>!„Ë&MšDË–-)--åÍ7ßdíÚµ¶—ÖÇÅÅѾ}{òóó+M;aÂ[pò¦M›xã78q≉‰üõ¯¥sçÎ̘1ƒíÛ·³wï^­×Ý´JÛfÏ<óŒ-8ù‡~`Á‚äååѹsg&OžLDDŸ|ò C† áܹs•.£.ÛukÖ¬aÀ€DGG“œœ\aÜrË-;vŒŒŒ ÛxO´c•´½}É¡C‡HII¬½k¿óÎ;\Pùç( IDATýõ9Ì[U;Ô{ €—^zÉœüÃ?ðí·ßrþüyôz=Íš5ãí·ßF£ÑTºN%ç  …ÅîUùežšÁR±‹Åà86£bpò•ƒ1ò¯hƆM«œ|%Ó0_ñø±Ò<×*„üÙÚûsQù­%!ø‘òa]Çe]»òÏ–koÌBxBÝvkªÀƒo¡qT……EÌùj—ó \^FJ›;qƒ¡îzG={ö,O>ù${÷îE­V3uêTz÷îíTÚ’ëU˾W-WÒ.?¬­$í?ü@ïÞ½iÔ¨={ö¬7BöË­ î–•½óçÏóùçŸóÄO`4 ¦ÿþžÊ"{öì uëÖDEE¹•¶sçζ·')åÎöºRÎe"Mš4¡GÊ3ì$%e¥dyŠ«ç`YžûìuïÞ€ââbö’­DY€I³fͼœ“úÍÓû÷“O>áoû[¶lñlFàÌ5Géözã¸Ú½{7` ÒëׯŸKikãÚ^ŸùâõJÉ>jÔ¨‘íóáÇ=’Wëno¶Í\¡¤¬”œƒWr¥Ý^û×Þ7ÞÔ|.(i—¥õ÷÷w;m]Þ§xâxîÙ³'wÝuW­¾Œ¦¬Lì”+S¬m_†ž<®\9žë[}äìµÎõ~}++!„B!„¨ïŒWSøÕX >¹âe3°ÊŸæÐ¶¿•¨GÖ“ÿáòÿÕ›üõ¦à+׃PÜ¥»þP•ÿänØù=sî¡`Î=”¤ý»Îò!„W UP$þg؆G~¥dÝ;æSR/ا5çž._×ñͶñö† =’Ötv7–âò§ ýšwwÈ—¦IyïNÆ“ÛÀXêÒv á §OŸ¦  €Õ«WÛ~÷øí·ßÈÎÎæûï¿gÿþýtêÔ©BÚµk×’––Ɖ'ÈÎÎæÂ… ¬ZµŠ &`2™ÐëõÜtÓMiL&%%%¶?wcwíÚEZZûöícëÖ­Ìš5‹—_~°öØwÝu×¹µÜúj÷îÝlÛ¶ŒŒ ÒÓÓyûí·3f &“‰ÈÈH&MšT!MÙKq{÷î]!C£ÑØÊè×_­õü Q_”üú>ùÿ¾…üS’öؼù§Nuù¹¢¤ÞWÒÞÐ4ëŠ_›åi2ÖR0û.òÿ•Já×ã0g•?› »a4ht ×_=‹/æÓO?%##ƒK—.qîÜ9ÒÓÓ™;w. .¬.&&†É“'°bÅ FMzz:YYYlݺ•‡zˆóçÏ£Ñh;v¬ÇÖ«$­’¶YÓ¦MmÛñí·ß2eÊ6mÚÄÞ½{ùòË/¹ï¾û0 „‡‡óÄUt1Iݶë~ùå[°seϰi4Û³/+W®t˜æ‰v¬’¶·/±X,¶r*ë ´´Ô¡ ¯œnÏ{””[Àü¼yó˜2e iii:tˆÝ»w³téÒj÷›’sPˆ†âü@8—jý3•7c)Ù\>Þþ¯ðûòyô]!ÀîñÁâµpñn8wd£Ý#¶A‚Ê®«Ò¾gùpév¸8Îõ°¦Ï|òÞ‚¢%žÍ³']þÎ÷ƒ ·Z?Ûwóò`w[^ºÛ1ÐZE—¶£Ý¼ÛÁ"_1 ñ‰åø&±th×€oXIVvN )*R©T$4àĩнWÕ¶üü|¦M›ÆîÝ»Ñh4L›6k¯½¶ÆteoŒŒŒtxXÝÙtPÞ ©‹´ëׯ'''???† b 2Z¿~½KËq‡«eåçWuâÇçòåË„……y&ƒXߎd2™Ðh4üùÏ®ò-9•YµjF£‘°°0{ì1—Ò‚ç¶×•r^³f­Ç¿©S§2`À5jDpp0ÉÉÉLœ8±Ú|¹KIY)ÙGžâê9hŸçÑ£GW˜Þ¬Y3Û[·Ö¬YSå W]+»ÙíÕ«—[QW _Ý¿î^s”n¯7Ž«ƒÚ¾Ðy衇œªßË(½¶_©W¯^Ì›7ùóç×é‹!œå‹Ç³’}TÖ³/@›6m\^·'êno¶Í\¡¤¬”œƒ•q¶Ý®tÿV'99™Áƒ°zõêjÏwï <¸³qãÆ=6;Ã÷)Jç{3f0nÜ8Þ{ï=BC=óô•ÊzD®éVYÊž>®œ=ž=]¹BɵÎõ¾7ËJ!„B!|‘1c¦3;1çŰo¥¿}\>Q£EÓüFïeÎü’zÙ>›sNR¼òeÌYG0gÁ°{q5)…B¸L¥!àÖ—PF`:·‡â§ƒÅìåŒyˆÅŒñHy Ÿ&á†ò  •uly÷&¦cë:wB(VÖûXdd¤m\ÙïF®üfsôèQΜ9@BB ÝyТE‹l/ŸUú{¤/زe ÿýï¸ãŽ;*üž³téRÀºïÊzK.Ó¡CÛ zëÛïÒBÔ&KQ–¢\,ù)Ý<ÃÞ¥¶iª4ñv¿{©Þ×u¼ËöÙœwŽ¢ÿó¥cX …˜N¥SüÓóåyG×®²Å!({¦úºë®#<<Üét·ß~;z½ƒÁÀóÏ?_!²°°¹s­ÝE^X©d½JÓºëŽ;î@£Ñ`4y÷Ýw+LÏÈȰs6Ì¥gÑk«]—™™ië8¨²—ð÷èÑÃöŒUY' µÅSmï«Mu÷Æ ¬TvLÖÄç‘ I`y3Ó9Èù›µW`K¡µàœ™åÓÕá µoÆúá9i)ãkoÇ–B0„‚¯àòGµ» J˜sÀœ ¦‹?ŠÊo5ÐÄ€¾³ýÌP’V>¨ïb°­vìA¹ä·ZÌ´¸êx>2°¤v·Þ˜Ÿ8}–ã§Îàï_y/EÖ7¢T¾Ù½ÞzV:s®v2Zƒ’’f̘Áo¼ARRÏ?ÿ<“'O¶5d*cß#ÜŒ3˜7o¥¥¥4mÚ”ØØXfÏž]iº“'O’““Cxx8?ü0†£GÖàŸøøx>ýôS§5 ,Y²„Ñ£G3räHt:—/_æ÷ßwºœÜåjYýãÿÀ`0°nÝ:Z­&::µºò÷dff2þ|FÍ AƒèС?þø#'Ož$;;NGLL íÛ·çý÷߯póé©íu¥œKJJxå•Wx饗à©§žRR|NSRVJö‘§¸z^¸pï¾ûŽ{þýûÀ²eË((( 99™ûï¿???._¾Ì¼yój5ï®X±b½zõ"""‚W_}• pöìYt:7®õrö¾ºݽæ(Ý^oW‹…wß}—×_^ýuÖ­[ÇæÍ›9wî&“‰   š5kFxx8sæÌ±¥Uzm·çççÇÓO?m t›2e [¶l©A¾e|ñxV²>Ìùó牉‰aâĉèõzþøãòòòÐjµ„……UP牺ۛm3W()+%ç`Uœi·+Ý¿eZ·nMûöí¹|ù2!!!Üpà ÜqÇhµZrssùòË/«MïîýÀÞ½{mi§Nʼyó0›ÍÄÅÅËçŸîñõzó^Ãþ˜°°0®»îºZy(ÂÙå²ë…ýqâ©ãÊž3dz'ë#W)¹Öy£Þ÷fY !„B!DC`<¼ýM“mÚ¨–YáŹOÐÈ$`<²Á‹¹Bˆ†O{ý¨Cc0gŸ há,†b/çʳŒûW M€J€_ n@Ó¸ *]Pù|G¥Î¾K¥R95_HH£F⦛n¢iÓ¦DDDPXXÈñãÇm¿ÔåËð ¹pá±±±DDDÔœ X¹r%÷Ýw$''³k×.Û´M›6Ù~Óêß¿?7–P–,Ÿ8q‚'NÔy¾…¨/ »— m7Ô6¬‰MÁtb‹mØõ¾&á†òâ\t×ßï8ƒÊñ÷UuD"¦Sé[¿æÌ™CïÞ½iÕª«W¯fþüù|÷Ýw;v¬ÚteõkzzºCçö222ˆˆˆ ""©d½JÓº«sgk¤ÕªŒ³X³f #GŽ$ €””vîÜéÔ²k³]·dɺuëFJJ ×\s 'Ož´M»õÖ[8tè{öìñèz«âlÛûjãνFûöíkg e‚¸Âç‘ ‰®Kùgs]ÑŒåŠË_¢5pʃµÖ>SÑ÷‚ÆßBáb(ZéØ3²¯(üÊo5жƒ»Çh‹V@€µÚAº dhÛ€*°|> PžäÊͯi@BÓ8ž{jb•óåòÊ;ŸT:-:ª¼™u)׳tAAAÏ=÷ÿþ÷¿ cÆŒLž<™’’’Jç?}ú4¿üò }ûö%%%…—_~Ù6-//¯Êÿ- sæÌaÊ”)„……1yòd‡éyyyU>ø¯$-ÀâÅ‹¹ûî»mæ¯^½ƒÁPåüžâJY©ÕjÚ¶m‹^¯§K—.•-°~™ºnÝ:æsîܹ„……1xð`Ú¶mË´iÓœN;þ|t:#GޤI“&Œ?¾Òù¾ûî;N:eöäöºzLîܹ“I“&1f̺té‚V«¬çÂo¿ýÆÍ7ߌF£Áb±Ô¸ý®p·¬@Ù>òwÎÁ9sæÅÍ7ßL¯^½èÕ«—Ãôüü|f̘Afff­çßY›7oæçŸfРA$''ó /x;Kõ–¯í_¥×%Ûë­ãêÀ<ûì³L›6ÈÈHúöíKß¾}+ÌWPPP!8RÉõÊ^hh¨C/œaaaDGGsöìY÷6ª–øÚñ îï#‹ÅÂk¯½ÆK/½Dpp0“&Mrzž¬»½Õ6s…’²eç`Ujj·+Ís™Êΰö¤;cÆ ‡ *ãîýXßú¸qãFºwïN‡èСƒmZnnnµÊÞ¸OeÇsff&-[¶´ _¼xÑ©t®P«Õ¶önM©eÌö_h{긺’3÷¡žª\¡ôZç­zße%„B!„ …%ßñJU€ïö¡ s¶ºþ`šBç•'˜/ìÇR”ãÅÜÔãñÍXŠóPù[{´òku³5P)¾¼sÎ)ÌÙð'¶–-[òùçŸë0Þßßß!ˆ¤®.ŠŠŠÐë+ï\¥¡±ÿ#&&Æ!@Ùl6³téRÆŽË!Cxùå—m¿•ýö™––†W3sÎI‡aû\AÝ×û*­?*}ˆmXݸ úÆmªOãRít!„ëÖ¯_Ï£>Êßÿþw7nÌc=Æc=ÆöíÛ™={6Ë—/¯ôy“ÆÖ@åÇ׸žððp‡gŽÜ]¯Ò´îŠŽŽ¨¶8ûieåã¬Új×ýôÓOÌœ9­VË!C˜5k:ŽAƒÖgI„÷¸{¯Q¸|ú´{‘ŒÞ8„h(Tþ ¶k–j[—WE}E36çÿ òcPÿï4×ÄCÈãÖ¿Ò? `.ÿêÙ|×&“ã­†m»Ê”l¶r«­·ø÷µ(ëìzZ6£|Å(<È'”jž©áaÖ+ŒÅb!'ï²âå)‘™™ÉÛo¿ÍÌ™3ILLdôèÑ|òIåÕo¾ù&§OŸ¦oß¾ÄÄÄPRRÂñãÇùí·ßP©TUvþôÓOäåå1lØ0Z´hAPPEEE9r„ 6ÔZÚüü|~üñGî¾ûn~þùgKÈ}Ζ•Åbá¹çž£W¯^$''AXX‹…ììlŽ9ºuëøå—_<8k2™xçwX·nC‡%%%…°°0Ìf3yyyœ={–ýû÷³uëÖ i- ³gÏfíÚµ :”Ž;…N§#??Ÿ“'O²cÇrss+¤óäöºzL?~ÜvÃÙl¶žõë×€ÒÒÊ{?w—»eÊö‘§¸zšL&þùÏ’––Æ!ChÓ¦ z½žóçϳiÓ&¾ùærrêß´ï¼ó»víbðàÁ4oÞœ   JKKmå|èÐ!¶mÛæílz¯í_¥×¥Ûë­ãjçÎŒ;–Э[7Z´hAHHƒüü|Ž?Nzz:Æá‹%×+{—.]bçΆßN¥|íxeûh÷îÝŒ?žÛo¿ë®»Ž¨¨(BBB(**"//K—.qòäÉ uŠ'ëno¶Í\ánY•q÷¬NMív%yþôÓOéÔ©Í›7'** JJJ8sæ 7näûï¿'??ß©|º{¿ðÊ+¯0jÔ(z÷îMtt4%%%;vŒ7Ö˜Ö÷)JŽçO>ù„èèhâââXºt)ûöís:­³ìƒk:Îʦۿ\”Ÿ U©éxöT}ä O\ë¼Qï{£¬„B!„¢¡°XÌWŒ°¾bš¦¾ÿ”}E@ŒZël!ÄUœ™:ÊúJ¿6Ð_¾@ɺw¼œ+31\¶Ãøµì«^AsÍõ¶Y¤÷dÑЩT*>øàbcc)..æ7Þ`ùòå\¼x½^OBBü1qqquž7O?CVß•½”·* .dìØ±DEEѳgOÖ¯_¿¿¿í¥´žîDŸc¬¼Ó"›º®÷ݹg5›kžGá²U«VÙžO¾ÿþûéܹ³í/##ƒ)S¦Tx¦¥,XÒd29õÜ“N§óÈz=‘ÖeÛëlûËÕvZmµërssY»v-ýû÷gذa¶åþýûŠÉdbñâŵ²nQ3%÷ÅÅÅøù¹ÿu]ŸGB4*7š±–+ªJãq¸x?ÿ oUPù4ÝuÖ¿’_áÒTÀ¨$·uÃRíF(^wXýû@î« +¿Õ X¾bVßÕà¹üKñ26lNgÃætäÆ9ǯvúÆ8p SË2 |ñÅ|ñÅ.çcÆ lØàÞ•CIÚsçΰoß>Ž=êÖ2ÜálYY,vìØÁŽ;ê(g¥§§“žîÞ1yôèQÞ{ï=§ç÷ôöº{L Ο?o¾æškl7‘ÙÙÙæ¯éòwÎA%ç­»xà·ÓZ,V­ZŪU«\Jç‰cC‰_ýÕék¸=%e®ïßG}Ô©ùþö·¿¹›¥JyêšãîñìîqÊ÷Qqq1K–,aÉ’%.§Ur½*óì³ÏòôÓO“ššJFFyyyŠ–WwÏpÿ*ÝGJ¸».\¸PíËh*ã麻®ÚfJ¯Ï=wÎA¥ívwó¼lÙ2–-[ærºÊ(¹_())á³Ï>ã³Ï>«Óõzã^ãÔ©S<öØcn­ÓY………N_Ÿzê©*§¹{\yâ>Ôõ‘³œõë×ÓµkWt:………Òƒ²¸ê©‚£†-Å_n¬¸Þw¡½a)É“4ÖþŸ)^ölõËBÔƒÁÀ÷ßÏ÷ßO||€¦­ºg>KQæ¼s¶a¿–}Pi_—B—ÿò&¦s{lÃþý¦¡‰mWmEõ‚±¸<]HcçÓ)Hk:·óѶa}êdT:k·.–‚,L§ÿp-BÔ¯¼ò cÆŒaíÚµÕÎeû¼wï^Eë,** 88XÑr|É€xä‘GˆW¼¬›o¾°öÔXÕs]_~ù%ƒ "**аzõj[/sB\­üZÜä0lĮ̂0âzߥö†“Ý=¸_‹Þ®µ‹„µæÔ©S¼ýöÛ >£ÑHXX#FŒp˜gÛ¶môìÙÿ:[¯'ÓºÒ6+ÛÞ¶mÛV¤Ü¯_?ÀÚ™€Òvcu\m_ýú믜}:‹-"<<Ü©tZmÅvv||Mñòªê ÷ëÓÉ­øµ(ï’Dßë1ô½«Óù}MkÜ»K¯ÇPù‡:Œ7ìý©Šm¢áØ·o§OŸ¦iÓ¦<÷Üs°qãF.]º„^¯'""‚€€§–õûïÖ'tU*ÿþ÷¿yï½÷())!11‘øøxÞxãÚÜ”:7tèPÛçFѳgO§…üq¢¢¢X½z5yyy´k׎?ÿùÏa4y÷Ýw«L[ZZÊܹsùË_þÂĉÑëõäää°nÝ:l“¾Ä¯u?üZ÷«tZéŽï^†eOI½ïj{ðï'´í†¢I¸U@ú Ç„ŠËÎ:Šé|íõH*ÄÕêóÏ?§´´”¥K—²sçN233Ñjµ4iÒ„ûï¿ßÖÃ뎎ݞ;wŽ÷ߟ)S¦pÏ=÷pã72oÞ<>ÌÅ‹ÑëõÄÇÇsà 7ðüóÏc2™<²^¥ií¹Ò6;sæ Ÿ~ú)&L`øðáòõ×_“——G§NxüñÇñóó#''§VŸAw·}µ`Á&MšDXX£G`öìÙN¯÷jkǺëÈ‘#deeÉ_ÿúW4 ¬AìIII¼úê«¶ù•Ük3eÊ>ûì3‚‚‚\~vÍSç‘ EéVð·{¯@È£Ö?{¦³`øß×fE?AàÐY›±¨Ã d‚õïJ†#åé´‰ Ž‚À;¬Õ)Ùì¹<ÛóK Bð³æšêóbÏ¿Ÿõ¯2…ߥò[ Šˆ D IDAT–Zó¨½"|Å(j( ÅŠ‹‹ÉÏÏÇßߟóçϳaÃæÏŸ_å›ÅÕÃÏÏ/¿ü’N:GXXZ­–Ë—/søðaÒÒÒX¹re­½¹J!®kÖ¬aûöí;v ‹Åâíì/óFÛlùòåµ¶l!®”À×_]í<¬£Ü!„B!„Âe3%ëßðïç “JÒþ&¾3êˆæŠVQúÛGø%ö@PyêÈD8ö[åi7ÌÂ/±g…‡Ã+Kk)¼DÑ¢' ¸ó*çBáy†?¾E›2Mܵh¯†ñÀ ŒÇ6U:¿»õ‚a×"´×Ý:¼ê'Õ‘‰•çQAZ‹¡ÃÎ…èºþÉ6ΜyÓÙ]U.Kˆ+VÛKWU Ðëõn§½2ÆUf³™§žzŠÏ>ûŒÐÐP^|ÑÖX;vŒ%K–0lØ0:wîì’í‘ÀŽúTÎçΣ]»v¶aû媣Õj5j£Fro2™˜:u*û÷ï¯6ýܹs?~¬rº’zßåö†ÅLÑ’gðø<~­úV»lMd"†s „p…F£¡cÇŽššZå|«W¯fÙ²eÆ¿ÿþûèõz&L˜@BBÓ§O¯4ýgŸ}ÆÑ£G=²^¥y¶çjÛìÍ7ß$66–Ûo¿Aƒ1hÐ ‡é¹¹¹Œ7ŽóçÏS[Üm_åääðÝwßñÀpéÒ%.\èôzë¢Û˜ÍfÞzë-^~ùe5jÄË/¿ì0=;;Û!@Y齯æÍ›¹óÎ;yúé§IMMµuàvùòeV®\Éí·ßŽF£©ð ¯'Ï#!ŠÂExøU¤ëgÿµ™.M…ðà_}3mR5Ë©Fi:Ì«zºËy¶c8híéX¥·çwöÀåYUO·AáBþSù8ãa0ÈWŒ¢H€²Pìïÿ»·³ ê©’’¾þúëH„B(“Mvv¶·³!ê o´Í$T!„B!„B˜sNR²þ_hâ®E* •˜uZþEL'~§tûW˜³ŽTšÞR”CἇÐÝ0¿©¨Âš Òè°çb)ÌÆœó¹½¤UŸÜ3~ùºãðKè†*(KÉe̹g0ߌñÐêjÒž¶æ¡Çxüº¢ Çb(Â’{ãÉm3~q˜ßtf'ÿîúûÐ$ö´n·ŸKq–â<Ìyg1_8€1Cz‘BϱP²þ]G~b£ïû4Æ9÷€Å\anwëKi!…_=Œ¾û#hšÝˆ:$Ô~Öz)ÿ"ÆÓ`<¸Êãi û—;*v:ÿ0»sæÌáúë¯w9ÝèÑ£™Ìúõëk\Ö_ÿúWŽ;ưaÃhÚ´)ÅÅÅ:tˆ+V R©¿¼>•󫯾J\\ |õÕW¤§§;µ¼… ¢ÓéèÖ­\ºt‰-[¶ðᇲo_%]?]!//ùóç3nÜ8yNL\µŒû—ƒ>Ml2*m æÜ3ö/§të\0V´ïn½ïN{ÃR’OÑ’gÐÄwB›2M“ö¨BbPi¬÷¾yç0NÇp`¥Ëe „¨žÙlæ‘GaàÀtîÜ™èèh"##1›Ídff²oß>–.]Ê?ü€Ù\ñ¾Æb±ðÆoðÃ?ðÀpã7‡^¯'//dziÓ¦ Ï*Y¯Ò<_É•¶™ÉdâÉ'ŸdùòåÜwß}tèЀ€NŸ>ÍêÕ«ùøãÉÊÊrso8ÇÝöXÅï»ï>Ôj5sçÎ¥¤¤Ä¥u×v;¶¡X°`—.]bôèÑ$''Baa!ûöí«´¬”Þk:tˆ & Óéhܸ1&“É$çwÖfìyú<¢!°BÖ#òèº&T~`ÎS¦5X¸øŠ¯Í,ù=t `èÚÿ/]XŠ­½—¦CÑÍØ¢`:gíX× 4MA˜³¬ÁÃÅ«þ—®šSÐ<—1_‚ìiúÐDAÉF¸üžóåU´Ô! m ª 0†¢åPðXjx?Xñ ÇåÂï_¯®PýïÏÁÌ™3U{öìQ]¼xQuùòeURR’êâÅ‹jN§)((P›Ífm`` Ö`0èµZd±XB,K£õë×/Þºu«mY]ºt©ÃÍñ¾–-[z; B!„B!„B!„BQ¥ Ø>w¹Þî÷Ü ¿ !„Âô}ŸF×ù^,¥|<KÉe/çJø’ÿþ÷¿õ&p¶!óårþã? áõ×_gÖ¬jº\rÂ<À‹/¾Hzz:wÝu—â¼ á ÔQ-z¨< ¿xÅKv-rkYRï !„¾­E‹¬X±€ &°jUÕ/$Bˆšøµ€èòŸñÈ}ÙÚƒ³;BŸ‚ ë­–B¸0Ìr«qõ±¯Éÿ~ NMM½]¥Re«TªËf³¹(Öjµ¥………µZm 2—––𢣣ÍGޱ„„„X¢££-íÚµ³Ìœ9³Â›R¤e!„B!„B!„B!„B!„ð¿V7c>¿‹Ù€6åVtFÚ¦Ò¿– %á²{î¹Çí´W[±RÎŤI“øè£¼œ!|ƒÔûB!DÃ2jÔ(ÀÚ[òüáåÜ!®fþ}Á°0BÀ­T~«AÁ NµG”…B!„B!„B!„B!„ÂÔný;øé+L²\>Oé–9uŸ'!„¨BëÖ­)**Â`0píµ×òÌ3ÏMZZ+W®ôvö„¨ÿ¤ÞB!|Òûï¿Ï±cÇØ¶mçÏŸ§°°&MšpÇw0bÄ~úé'233½œS!ÄUKáUÅ[ Lç!ÿóºÏ’¸zH€r=EóæÍÉÉÉ!##ÃÛÙ¢Þ %11‘ììlNœ8áíìÔkRVB_!×+!„B!„B!„Bq5ÑD·©}:¼õÖ[lÙ²ÅÛYòŠùóç£Õj™5k–±Õ ¡–•œ ›ìßê5Ôz°®®Wî´Uä˜B!„B!„B!„µÁt*ud*}0–â\ŒÇ·PºñcÌÙ ç÷}!DÃPTTDnn.œ>}šåË—óÁPPPàí¬ á3¤ÞB!|‹V«å_ÿú=zô !!ÈÈHt:999ìÝ»—Ÿþ™… b0¼U!ÄU®4ü’@ æ\(ÙùŸ€Qn5D-“å: R©ˆåܹsX,og§Ö%''óÏþ³ÂbBBBhÙ²%ÉÉÉ P¾š=š&Mš0nÜ8 W-96_Ý¿W[½ï‹Üm«È1)„B!„B!„B!<Ít~/…_óv6„W™ë®»Î­t=ö˜‡s"„o2gæò›]\N'õ¾Bá{Š‹‹™5k³fÍòvV„Wãa8{ƒëé û «þ÷×)(Ÿ PnI·ÎíIjO£Fa˜Íf.eçr ã(6§SXT\eZÐñÚ¶t¹®q1Ñhµ~äräø)Ò6mçÜ…ÌZË÷õ×_ÏóÏ?^¯çŽ;î ¨¨¨ÖÖU_<ùä“èõz ™={6ééé˜Íf"##IJJòØz~üñGV®\i~衇6lX­§­L&S¥Ÿ…¸Úȹаùâþ­Ëzÿj®•r·­"ǤB!„B!„B!„B!„B!„B!„U½PV©T èÛƒ^7^Z¥r˜M\L4Ú§ðñçÿ%'ïr…ôµšûF !¹µc°IXhÚ'Ó¡]¾ûa%;vﯕüVè¯!kÞ¼9 Ìš5‹åË—Û¦>}š;wzl]ƒƒÁ`.--­“´õÁçŸNTTþþþ|ôÑGÞÎŽ^#çBÃæ‹û·.ëý«¹TBI[EŽI!„B!„B!„B!„B!„B!„B«z B÷.סV©8xøÛwî#ëRÁAtíÜäÖI„…3t`¾üæ‡ éoNíFrë$Ì ¿nÜÊÖô=—”pMÓX†ô¿‰Èˆp†íDZ§É­$ÀY¸¦qãÆ¶Ï›7oöbN¶#GŽðøã{;Bxœ ›ì_Q”´Uä˜B!„B!„B!„B!„B!„B!„°ª÷ÊÙ¹y,Z¶šâ’ö:ê0íàáãŒ9Œ6-iÓ²9:­–R»ÞÕ*Ý:wà×ÛXñËo¶i2ŽqîB&S&ŽF§ÕÒ±]kÖoÜV7Õ€Ù÷ÐWRRâÅœ!„BT$m!„B!„B!ê†:ÔúßœçÝ|Ôª@PéÁœííœ!„ÑhQG4GÕó¥ã˜ÎïóvŽ„BˆJI›_ÑÐ5jÔˆ6mÚ™™IFF†·³#„B!„¨Gê}€2À»÷W9mÇžƒ´i™ˆZ­&44˜Ì¬òoxBB‚ðàБãÒææåsúìšâ±ü6oÞœ>ú¨ÂøE‹U—žžÎ´iÓ*]Î7ÞH÷îÝùöÎ;<ªbýãŸmÙlz%…BB R‚Ò‹€ ݆¢^ØÐ«r媨÷b¹ "b¹WTÄŸ‚Téª4¤w!}³í÷Ça7»Én’Ýs’M`>ϳϳçÌÌ™wæLËf¾óÞtÓMèõz._¾Ì¶mÛø¿ÿû?.\¸P¦ 5bðàÁ4kÖŒˆˆrrrسgsæÌaïÞ½¾ÌÞ”÷Ûo¿å§Ÿ~rûœ:зo_6lˆ^¯çÂ… lÙ²…Ù³g“••¥¨ÍJáÍ}ûöå…^àÔ©S<þøãe>7-->ø€ÌÌL† ÀàÁƒ1bD©¸'Nœà©§ž*×Ö>}úШQ#’““‰ŠŠ"44µZÍŋپ};³gÏæÜ¹sÓ«T*ºvíJÏž=III!44”¢¢"²²²ÈÈÈàÀ¤§§sæÌ™rmñ­VËÀéÞ½;III¨T*222X½z5*•ªÜô¾ô…>}úТE n¾ùfbcc1 FΜ9ÃÆY°`yyy•’¯œw䯺’c3HbÁ®]»Ò¡C’““‰ˆˆÀd2‘ÍÑ£GÙºu+K—.uÄ—Ûä”À`00pà@ÚµkGRRƒ‚‚²³³9{ö,þù'³fͪ°å‘G!--˜˜ÂÂÂÐétdee±wï^æÎ˾}žÿÉm·ÝÆ-·ÜB½zõˆ‹‹#88€ÂÂBΟ?ÏŠ+ÜŽÛPµsŠ¿Ç:_Þ¯ó¾œ÷ëO|mrÇ+o‘³VQbÌ‘ÓýÕ&@ @ _Ð$@øÐ&ƒ¦d…‚¥å§S’ { ô)À ÙŸCÁ¢²ãǯ•Á}XÖ;å§÷„*"þ ºd©^r¾€Üi¾=KPŒ·ïWiô·CÐ Ð5uP–Ë`9 ÆÍÿ Ø ªÖ&àzEU—àGgZ€qõ‡> ”u-îAßþi°Y1nø Óž*8@pÝ"Öü 2iÞ¼9“&M"((ˆ×^{5kÖTIZOlÚ´‰€€Æ'Ê‚Šzõê1räHZ´hAbb"EEEœ>}šÝ»w³~ýz–-[æok?22€‹/*fó“O>éC9“˜˜Hbb"ݺuc̘18p TœÀÀ@Þ|óMZ·n]ê~||<ñññÜvÛmäææ2oÞ<Ål â½÷Þ£I“&.÷SRRHII)7½¯}Á]]9ò0`cÇŽåàÁƒ•ž/TìU§ºª¨Í7f̘1ÄÇÇ»Ü×jµ âââ(((p(+¯å c„ Ô©SÇå~HH!!!$&&¢V«+E Ü¦M6lèr/&&†Î;Ó©S'&NœÈòåËݦýì³Ïˆ‰‰qf·=00ÐmxM›Sä´Éšú~ý…¯mCîxUñµú³M @ @ ¾ Ž};ÿ寉ƒðÑ€ZºŒýãÅLª>ßë¿ßðÑt_‰›!  mÐw„Â_Á"Ê2¨µq²¯¨Bã¼ã ’ŽÀ^o`>º[po)ùˆ5¿@ ¨L^|ñEÇž!oEÆrÒ ®Ôj5IIIœ:u «Õêosª5iii̘1ƒ¡øtà  """hÚ´)iiiB ¬ÎíÐb±TY¾¢/T ¢ž+Ž¿ú‚@ (A(§6’„,/].%26qúìj'Ô¢k‡Ûøkß! ŽðäzuˆŽÄb±°k{¡¡/œ8q‚þýû’‡]»Wºûî»ÂÂB—¸eM²»víbÑ¢Eœ={€–-[òðÃÌßÿþwžyæ™Riî¿ÿ~‡XhçÎL:•³gÏ’””Äã?Njj*#GŽdïÞ½9r¤ÊËk6›K¥6l˜Cè»fÍ–.]Jnn.©©©<òÈ#„‡‡ó¯ý‹#F8D¾þÆ›333F«Õº­ ;v²sy,XÀâÅ‹×ÇgðàÁ^Ûþ믿²xñb²²² ¢iÓ¦<ôÐC3zôhžxâ l6›KšQ£F9ÄÉkÖ¬aÅŠdff@BB¯½ö¼ ºã¥—^rØ–/_ΪU«ÈËË#99™ÁƒS¿~}i•è 6l`Þ¼yäääL›6m¸çž{ˆŒŒäßÿþ7#GŽäòåËŠçëË;òw]ùbs½zõøàƒ0 X­VV¯^ÍæÍ›9{ö,*•ŠððpRSSKyŽ•Ûä”wèСԩS“ÉÄ´iÓøí·ß¸zõ*:ŽØØX4h@AAåì:™1cf³™³gÏ’——‡V«¥Q£F<þøãÜtÓM<÷ÜslÞ¼™ììlÏØ·oééé?~œììlÌf3ÁÁÁÜ|óÍìß¿¿T|Ì)þë|}¿JÌûJ¼ßªDNÛ3^ùŠœµŠRm¼ïƒþl“@ @ AMD‹C¼  Ò‚&¦l«‹·[5¨ô•e]åü€äÍW[,§áÊ«þ¶¨òðåý*…¡—qr ¬—Ár¦òmGë'K7´¨Bb*,Phõ š„[PG×Çzõ4 ^©pÞrÒú a³@ §]»v¼òÊ+Ô­[—°°04 F£‘+W®°oß>–.]Ê‚ <î4h&L(7Ÿ5kÖðÄOx 8p ü1W¯^¥mÛ¶˜L&·qÛ·oψ#HNN&<<­VKVVdÆ Ìš5‹«W¯zÌkþüù4kÖŒ9sæ0zôh—°ØØX6oÞŒJ¥â¥—^báÂ…•RÞ ç¶ã­HINZÁõMçÎùâ‹/0 4kÖŒüü|›T­±ïqÎÍÍeüøñlÚ´ ‹ÅB\\7ö·y× &“ «ÕŠZ­vq^X™Ü}aæÌ™Ì™3ÇqýÒK/ñ·¿ý­Jm¸êYIüÑ@)j´@¹îM‰¤5“.+Önrgiú†LDx#‡ aÅšMì?tŒä›“2¨KVm KAÊ6›Í1!8ÿ‘g2™¼š(þøãÖ­[ç¸>xð ùùù<ÿüó$''S¿~}Ž=ꉉá‘G`ãÆŒ7Î!:ÉÊÊb̘1|ûí·DGGsÏ=÷ðá‡Ê*§9å­U«÷Üs+V¬pùâÈ‘#ìܹ“/¿ü’ÐÐP~øa>ùäEl–ƒ¯6_¸p•JETT”ãúñǧiÓ¦|ûí·ìÞ½€èèhΟ?ïx¶Õju©O_48xð Û·ow\ïÞ½›ÜÜ\^xá’’’hܸ±‹ 4%%Å!Æ^´h“'OvyÞ¡C‡=z´âåzõêѹsgfÏžÍ×_í;räééé,\¸­¶ô0¦T_8tè{öìq\ïÛ·íÛ·óŸÿü‡ˆˆzè!—úP*_oßQu¨+omIøn00üóŸÿt´g¶mÛVêžœ¾ ·¼M›6`õêÕüüóÏ.a—.]*UF%ùí·ßJÝÛ¼y3L™2…€€Z·nÍêÕ«Ë|†;¶î¼ûkNñ×X¾¿_%æ}%ÞoU!§mȯä ç)Õ&Á»>þm“@ @ AMÄ|Hˆj¯]Ó±²Óœ¿³ø»®!Ä̬4ó*…à! I’¾[«ÇYÏ•†/ïW) ]¯³'AÁ2À&yvÖ%ƒ*¸jlÇrñÖ«gP‡K‡õòq¬™8tiCPGHƒ¬5Ï»AVNZ!l âÔ«W–-[ºÜÓëõÄÇÇO·nÝxôÑG6l˜Ã¹Me`?d¿°°ððpºvíÊÊ•+ÝÆmÔ¨:tp¹Kll,:tàùçŸçµ×^cÉ’%nÓÇÇÇн{w4Ëš;J@bb¢ìr `âĉÄÇÇc07n\•¥\ß»xx¦aƤ¤HŽôÆÇìÙ³aÇgëÖ­þ2íº$??Ÿrr”Óô”ÅÐŠŠŠ\ö‹úcïèPÏJSÕ}A ”B]~”êITd8ÝÛ• öì?ÌÞî=7;qŠï~\@AA!1Q‘ ½§/o¾2‚GD` žÅ+׳åUl½ï¬]»Öñ½Q£F.aÝ»w' ³ÙÌgŸ}VÊ#^aa! ,pxÃõ7wÜqjµ³ÙÌŒ3J…Ÿµ«KûÖ4J¹¹’-VŽÜÜ\ÇdåvË-·Ò–—/_v›þäÉ“„‡‡^‰–VŒÔÔT@:IÈ.À*‰ý„!½^Oýúõ«Ì6OȱùܹsÄÅÅ9žÀm·Ýæˆg¯*rAA㔾’í¢aÆ;v¬J:vñà±cÇ(((ð*me÷û6ƒÁåýVf¾e½£êZWeÙܼysÇwO'6VrË;oÞùä‡pQ¯×+–_MœSÊ£¬6 7Öû•ƒœ¶!g¼ºñg›@ @ j*ÖË; r§ƒõª¿­(¿Þ¯*´ø»å\Õå+äcË¿LÑÖ©ý>[˜@ (Ϲsç¸xñ"lÙ²…W_}•O?ý€Ž;–rFT’œœ²³³Ý~ìNqÜ1pà@4 K–,aîܹ€äx 44Ôc«ÕÊ©S§8uêþù'ÿûßÿèÕ«¿ÿþ;ï¿ÿ>µjÕrIJ¥bÿþýôìÙÓDûöíaåyPöµ¼@P•:¾‹½Ž•}/ª}¯@p£"ú‚@ ¨©øß­—ÄDEòøÃ÷ÌÅÌ+Lû¿y™<Æ¿£óítnך¬«Ù|=cW®f£V©Hm”BϮ툉Ždè½ýøzÆÏdœ®ÿIÌÏÏ'""¢”PÉîu·Y³f¯eê8aÃ_Ø;Bm IDATEÖž„¾%Ãìeô'rl>sæ õë×wüxÓ®];@:‘®N:ÄÇÇsîÜ9âããñ«ŠÂÂB\îÛ¬*«¼•Add$/^ô:me÷»ÐÜ9¯ªÈ×Ó;ªÎuåÉf{¾¹¹¹\¹r¥ÂÏ“‹ÜònÛ¶wÞy‡^x¨¨(|ðA|ðAöîÝ˼yóøõ×_Ky“U‚:uêðþûï;N¡´£×ë]ÄŸ*•J±-¾¾ü7_×Z škû£¿Âå—ŠÃâ׃ÊàÞ†¬w `‘"Åñˆ¾-?º¦×ÊyжW^~žÊ«o ¿—¾ŸýäÍr¿# †€f’×vŠöBÁ(\ç9M"èÛƒþ6ÐÞ êXÉ•lù`9¦Có…ôÎUA|?èn]PÇ€­Šv@Á0ôƒ€æ  €¢Ýý1˜”_^(ÿýª‚ h 蚀¶¨#¤`ÍÓ.ÈûŠv•Në)_C_éS’KÃÁôW‰›jê †> mª@Éó²ñw)_óQ϶ ϨÃ>•!Bºa1‘ÿÓSXÎJ0ä… ¨tîŽÂeï`Úó‹Çg{J«½¹¡/ÿQê¾qõ‡í˜%;mÐCß¡‰o €-/“ÜÿÞéWeˆ ä™UŽë¢?¾Ç¸îå¨(rlv‰_¿ºæƒÑ$6C¥ÅVp˹=˜v/À|¸ŒIE«' ù=htE]_JkÊÇ–köY,`Úþ6S±XI›}È·&¢ ‚ {  )hnu¸ôA%ÍGE; ïG0ðü oçý’x»Þð»Í2çn•ï„ÀΠk|mÝ¡–Y±œãVÈŸ ÖlùuåÈSAwKkom}P‡‚5¬WÀrŠþÖ‚67ÍYNZ9Tu»Ð5„௕3 Ô‘Híê2ýùs h›g›½]óË]Ë-¯¯Èéƒ1Ó¤ú°fÂùÞ®áêˆsòc‘÷=dORÖþêÄôéÓ5jiii8PÆÀå#ƒ `éÒ¥ddd°gÏš6mJ¯^½˜3gŽWÏÊÍÍeÔ¨Q¬\¹’àà`†Î|à·ïyݰaqqqôìÙ“÷Þ{DØz½žÅ‹Ó¸qc‡ƒžê¨Q£èСqqqDFF@ff&Û¶mcêÔ©ìØ±ÃcÚ   {ì1î¸ãêÕ«GHHˆÃÑÔÉ“'Ù¼y3ÿûßÿ<¦ ¤ÿþôêÕ‹ÔÔT¢££1™L\¹r…}ûö±fÍ~üñGGüaÆñÆo”zΡC‡èÝ»w©ûÎÈIkG«Õòè£2pà@êÕ«‡J¥âèÑ£,X° B{×zõêÅСCiÖ¬ƒÓ§O“žžÎ”)SÊZy[W5¹íªE‹<öØc´iÓ†èèh®^½Ê¶mÛøúë¯Ù¾½ôäÔ°aC–.]Zêþ_•üCràôÈ#8®õz={÷´hQéaöíÛG@@ãÆcêÔ©.a<ðmÛ¶¥Q£F$$$LAA'Nœ`ùòåLŸ>œœÏ•%oÛ•7uõÑGñßÿþ·Ô}•JE¿~ý¸çž{¸å–[ Ãh4’™™ÉÑ£GÙ¹s'óçÏçĉʶ†sþüyš5kV©z9}Áoûà€4h7&""‚ŒŒ V®\ÉÂ… 5j:uÂb±°dÉÞ}÷ÝR‡uø³ù2‡ú«žåâk=1‚W_}€®]»’‘‘Q*NÛ¶mùá‡2düQú· ;UÑ 2¨Q娈p‡8ùRæ¾ùþgrr=ÿúJ—’WÚÙ VpåªôËžÕfc÷þC'Ožäý÷ßçèQåv“¨T*Þ|óMbbb0L:•7rùòeHLLäí·ß&66V±<íùBÍšS”àFy¿rÓ6äŒW7*UÝ&@ @ % ìîz­­¡#$ÁFæHå…þ ø{Ùõž¶žô©®¨!âÒïG ¤OÁRÈz(qFbÐ ½Œg—?ç3鞦„>["^€$„ ìêz_ߢ?‡ w+Ó>4 öwa± ¹Cª‡«ã ¡üüœQGAÔxÐ5+‘o¢$šê/ 2ò~P6_àF@ßåÅbq2P˜þCœ\S±Ûä(«‚£QGÝŒõòqG¸&á×øÇ7SPé ìó/´ \'Up4ÚäÎh“;cÚ»„ÂeoƒÍuRQ…Ö"è¾ÿ¢Ž¬ãz_ŠJŠ:²Úºm1휞}Wxo³Ÿòõš{ÁCXm0Ô–ÝÈùr¿+Ç—yßæãzß6Ë»šCÄ8© ¥lO>·B~‰-ŠrÖfšZõ¥t‹KYB¥¶Ž$¬ÍŸ %wèÈI+´+Mœ$ .‰& ñ`è 9ÿ…ÜoJÇñeͯÄXNy}EN4n.(«£%ñ¹ùxq¸î–ñ·(csu%++‹‚‚ ƒã@%©[·.7æÒ¥KÏÇË–-óY  ’ fÑ¢E 2„»îºËE lwh`4Yµj÷Ýw 4àСCoÊ‹-âå—_v8ª.tíÚ•æÍ›»Ü‹§oß¾ôéÓ‡þóŸÌž=»Tºˆˆ~úé'RRR\‡NݺuÑh4…¤-[¶ä“O>ᦛnr¹¯Óé ¢víÚäååUÑmHHÓ¦M#--Íå~Ó¦MiÚ´i™i5 }ôt¹_¿~}êׯÏ}÷ÝÇ“O>éQPVÓêJrÛÕ«¯¾Êˆ#\îÅÄÄpçwÒ«W/Þ~ûm¾ÿþûJ³ß[^{íµR^ÝCBBíê‘GáÉ'Ÿt+\”‹?ÚUPPŸþ9;w.u?((ˆ›nº‰.]º]JÌ}£³k×.4hÀéÓnN§©FøÒŸzê)š4iâ¸NII!%%…‘#GºÄ{àˆ‰‰áé§Ÿv¹ïÏ~äë*Œu¾ÖóÚµkåöíÛóÓO?•zv›6mé@˜²FšÓ $5F ¬×ðÈ„…sùÊU¾þ~N™âd€õë¢Q«ÉÉÍãxF麨ÈÄ–m»ا;u’Üü2¨UéÕ.33“äädÖ­[çòÃ@uÆnsY'¦ÙO^¸|ùrU˜U&rl¶Ÿvï8)náÂ…¬[·Ž'žx‚Ž;ò矢R©8yòd™âM{Xe{Ô<þ<5¢~ýú•šOI*RÏ奭¬¾àìå4++«ÊòõDu®+Oؽ&‡„„Fv¶›£a+ˆ7}A©òšÍfV­ZŪU«ˆ‹‹£wïÞÜ}÷ÝÔ©S‡>úˆ§žzªÜÿ*Jrr2uêHÿ š8q"kÖ¬q±ãðáÃ¥NËR‚ê2§TÕX猜÷ëí¼ï¯÷+9mCÎxU]¸ÞÛ¤@ @ @PèR!ìy¸úežg+pºPKͪm2„½T~<¥q.¯*°ÿ\i›ÑMüâªð±¥E%1ôóaÈîz_P1­Ù’×=·Ø(¶Ù‘¸v^²:Z±,»½²ß¯ ÂFK‚ ËE'3ëÙÙQ§¥´pû}ˆt#prA-µk&,÷ÍtàFD[¿#º[8®‹¶ý€é¯j?SCL§R©AëÅÀáœVöÿ Ù¬ØÌ¥Y›Å¬HZóñÍ´{Òq­©s›g²ÙˆùtÙZ+ŒœòwŽ-%N.‰.õ.¬—Sô»ë¤ØcL)‘p©ür.`+,±Ÿ@®Í¾æ{½¢‚Ðç¤y»`E‰ ó¾œõF¹T†Í2çn]3Iì[^þ¦’wbgäÔUøk¥Æ%±\pï±YNZ9ø«]™—ŸgèÓ`ܦ}Å÷[ó{¹†JîGrðЛ!ä‰âë€Ö®å'}£Í(yc¾ž Æ`þ¨ G5½zõ ==ݱ7$==—_~™:Haa¡×Ïݸq#C† ¡víÚ$&&ræÌ‡èØd2±lÙ2î»ï>zõêÅ‘#GèÖ­ûöíãäÉ“˜Íf"""Êʢʙ4if³™“'O’““ƒN§£yóæŒ=šäädÞyçV®\é²àùçŸ'%%…¢¢"&L˜ÀÚµkN'hÖ¬¹¹¹nólܸ1Ó§O'88‹Å‚ HOOçäÉ“¨T*¢££IKK+%Rš>}ºÃÃ"H­aÆU¨œrÒ¼÷Þ{qòìÙ³™7o999¤¦¦òØc¹ˆëJòꫯ:ÄÉ¿üò ?þø#ÙÙÙ´jÕŠQ£FÅ”)SèÛ·/çÎsIëk]ÕTä´«§Ÿ~Ú!ØÛ²e ãÇçäɓԫWüã´jÕŠ±cDz}ûv‡×c¼h§¦¦ÒØñÉ'Ÿpë­·RPPà’GE–øÂÒ¥K™:u*W¯^%44”®]»òÄOË7ß|C¿~ýõêk»ò¦®Ü9i7nœCœüË/¿ðóÏ?sþüyôz=uëÖeâĉh4ÅÊy=ñùçŸóùçŸW(^E½ÂôïßßÑäö_û ?þ˜iÓ¦qûí·óÕW_0cÆ &MšD×®]?~<=zôpR’ªîGàÛêïz–‹·õ¼ÿ~Î;G||<:t(S ¼eË–rÇÙŠö@ ¨nÔò >wP+&Šüü¦ýß|rróÊMHBdO¯…TŽçG£±ø‡ïàààR“ª’ìÙ³‡6mÚЪU+ôz½KÞÕ»ÍõêÕ£V­ZnEíÚµ °°°Löòzm‡7iåØ|üøq@(ßqǬ^½š‹/²wï^š6mêøß·<›ƒ‚‚ʵYÛ·o§sçÎ$&&Ò¾}{6mÚT©ùÙ±×sÆ ‰‰‰áÒ¥K^§­¬¾Ð¶m[@Z;¿_õÁê\WžØ½{7 üzôèÁܹs}~–7}¡2Ê{þüy¾ûî;Ö®]Ë_|AHH={öTìT5ç49¢È3+Bu™Sªj¬ó„·ï×Ûy_É÷[Õó /mCÎxU]¸ÞÛ¤;:tè@BB6l¨”š @ @ ®_ Ó!o&X.A@KS,ô4 „œ/•<œ¿³ø»®!ÄÌ”ÿÌŠ<‡  þ5z*É+ZèH eâ\ÞZó@“$}7n…˼ÙÑ·‘¼ÃÙ)\+y?³\]£kB•kç?y?zã^Ãø;˜ö‚õ*`”<Þij{NS´Còžþ Ý+ÝËÿ®~oK m`YéòÊ}¿¹_Cþ/ ‡aØMº¯ÒCàRyí8翱XLS°²Þ);Ÿ ~à$p*ú r&Kh}ÉŸýya/Báš²ëY H¨‚£ ¼s¬ãÚ|tÆuŸ”Š—ûe/Çwu­†?RqWåÎiƒŸ:BdÍ'¶R0çùJKk9»6ªÀ0´7·Ãôg±"Mb±Ç"sÆ60+3hȱYS· ÚFÅé͇×bÜ𶜠¨ãIBàhiR ¸íomÿ,×ìÖ ­×Á‘Örj;…+ÆaÍ>‹J­C™„6©5ª@WïErm–“ïõ@Îç?Ošƒ }!ô‚ÉР ×7JPÑy_ÉõFUÙ,kîVK^n…·EAþlIl+òÕ¥([WªÐ7gжÃÕq`9è@›$ylV‡•®9i•¦ªÚ•åd½yM$~YòT¬ŽG è¾k‘T`èå*PVbÍïËXéu»¯xÓ‹vKßÙÛ¾½TN;ºÅß‹¶_ÿëß{ï•^¶Åbqx8öÄÁƒÝÞߺu+C‡uvçÒ,k×®uÜ;pà€C Ó±cGV­ZåµÝÎû!k×®í(Û=(›Íf6nÜHNN=zôà·ß~#22’モ\j›L& C™{Š|)¯œëÈΪU«8räË—/G¯×Ó¥K,p=ôæÖ[o`Á‚|ýõ×.açÎ+S0;nÜ8Ç>aƹmëׯ/uÏb±¸—¼‹ÊIÛ¸qcúöí À”)S\œVìÝ»—yóæ±gÏtºÒ{ík×®ÍðáÃøùçŸùÇ?þá’vË–-,Z´ˆˆˆ^xáþùϺ¤÷µ®j*¾¶«¸¸8FÀŠ+xî¹çï833“G}Ôáübøðá¼òÊ+Ž´6›ÍÑEµEEEUºgxÛ¶mŽë;v°qãF¾ÿþ{¢££yþùçyóÍ7ËÏ×v%§®RSSBý™3g2vìX—ðÝ»w3~üx!Pö#rÞ¯œ>hçôéÓäå呞žÎ‘#GHNNfÓ¦M\¹r…yóæñÄOиqcÒÒÒÜ ”«ºos¨¿ëY.¾ÔóÚµkyàèÔ©ÆeÖh4´lÙ€ 6(n¯@ TÔåGñ?I‰ñ4oÚ€ŸYI敬rRH\Î’þ›Nb|-·qš5i@fæ·árq¯Úÿ¨¨,V­Z…Ùl&<<œgžy¦F,`W¯^ÅbA£Ñð·¿ý­Txݺu]„¼îN²c÷X«V-bcc½²Ã›´rlÎÈÈÀl6G·nÝ8sæ ûöísÄU©TÜÿý;v¬L;ìm+::ÚEà¦4«W¯vx=z4½zõ"22’š4iˆ#Ðj•?ëÀ¹žŸ{î9¯Ú³R}Á]¹âââèÑ£ bã¼PöW¬uå-tˆ1}ôQn¹å–rRxÆ›¾ ·¼eµõ'N““@xx¸WÏ- »·i€F)öÜò¨.sJUu ÌûõvÞWòýVÕ<(§mȯª ×{›,Éý÷ßÏØ±cyòÉ'™cDÀ5‘Æë’W3[¾$œÈz»8\º¦%ŸàJöÈù òf@Þ,È&ÕCöGîãÛÌ€EXØQV(tÚ;¯®¤Ÿ_-çÁrFd½ƒ‹ I—ª\>AƒŠ¿Û áÊKRýZNAþ\Èû®8\#‰7A9¨4î‡*HòÞg9·‡ÂEcÀfõ³a a³b>Z¼QUSç6Ð\S;ªÔ¨ã‹dËñÍUm[ZO*Öìs,ú'ÖËDZ™ò±œÚAáÒ·á*Cš„â2¨ÔZPo[³åc½z,&l¦|¬R´ýŒ›þ§¨ÍþÊ·º`Í’D –‹Òœ]°¸8LúVe§¯è¼¯äz£Êl–1wvíMÅ×…« ó iýk>*­…ÍG$¯Ë…kJä+§®´¸ìþ´åƒù ØLÒwÓAÈû?Èqל夽†RëØ*kW6É;±ù˜Ô¦l&éÝ\ýPò@쨚d×dJ¬ù}Y+½n÷¯ú Œ¿_ê[; ÷Õ®”Uã#¥JQ©TDDDpË-·ðúë¯óúë¯ðÓO?‘‘‘¡h^µjÕ¢eË–˜L&6nÜèf¾Ø÷°z‹}/ ¸îGq(›L&ÒÓÓiÖ¬™CP¼b…äNÛd’œFU7/Êî8vì˜C€]§Ni—òö}³-[¶ôªûì3¯NǪ,.\¸Àœ9s¸ÿþûéÙ³'ƒ%K–——G“&M:t(Z­–œœfÎ,û(ì½{¥w¨R©=z43gÎÄjµ’@||¼ã„6¹iåØl6›9~ü8)))„††2oÞþøcæÏŸÏéÓ§Q«ÕÄÆÆ¢V»?cA©¾0tèP"##Ù¼y3yyy¤¤¤ðÐCa00›Í̘1£Rò­‰uå-6›I“&ñÑGÈG}ĺuëØºu+çÎÃb±Lݺu‰ˆˆ`Ú´iŸåM_[Þ÷Þ{“Éĺuë8xð W®\A«ÕR«V-úöíëè¿JýA ’WÝóçÏLj#ÐëõüùçŸdgg£Óé÷ÉcnyT—9¥ªÆ:Pæýz;ï+ù~«j”Ó6äŒWÕ…ë½M–ÄùGœððpZ¶l)~$@ @ øŒq0ªøZ›¬ð—5òPG‚:ªøÚ¸Ñsܲ0Ü úvžÃ •¼¤)E@ëâïÖìkáœQ¹^jëI¥±æ:etí^ŽÓ½*[˜O¶®t­‰Q湪W±sá†k(X!O_´t¬‚Òèn}uX<Ö+')˜û"6S¡Ÿ­RóþèR%Ïu*mÛ0Ûˆ¦V#TÁÅñŽù8é(Œ¦ÎmÅ…W ¸µÄ¤¢rý¿Ÿ:ª–SÒ¤b+ÊÇzñ êXÉa…¶~G‚‡ÍÁô×|ÌVJ¢áJÀ_ùVWòC¿âk]SÉ›­\*s½Q6Ë»Ë ó_ ‚g'È©+»X'5gô¡ÖÏ’h¶`%XÊhÎrÒÚ©‘ëX•Tfm=PÇ‚JsM€ë¼ )þ®Ôšßa·kàê²n/Iy}°`îºf¢n“êMר¸Ìpý ”íŽ:J²lÙ2ÞyçrÓßzë­X­¥O}ºwïŽJ¥â·ß~#//Ï%lýúõÜwß}Ž8žD¥žpg‹•íäeË–1hÐ  À‰'{Wìá¡¡¡œ?Þí³¼-¯\BCCyøá‡éÒ¥ µk×&**Šüü|Nœ8áØ{ãnÖ´iÓèÔ© 4 ==~ø9sæpüøñ2ókÛ¶­ãûœ9s-Keaw0³ÿþRmª,¸ETT”C ]Y¹r%>ø AAA4iÒ„¿þúKö3ýÕ®š5kHýÈî0F <ÙÙÙ~É·²ú J¥*7NyTF?²ãëê+Õy¬+«ž·lÙâØ Þ³gO6o.>XÎ^¦“'OròäÉ*±U üA(ß|S"uj'ðæË#<ÆËÍËçýO¦8®Æ"~œ·”‡îíGxXC÷q›nï#lþ­r~±ÙlL›6_|‘ððpFåž­˜@à‡~ €!C†˜˜ÈSO=å6Þœ9s8uê”bùÊaÚ´iÄÄÄн{w:vìHÇŽ]Âsss;v,—.]*ó9ÇŽcóæÍ´k׎æÍ›Ó¼ysGØÕ«WËfy›VŽÍ‡"%%›ÍÆÊ•+÷srrظq#]ºtÁf³9Ož8}ú4kÖ¬¡[·n¤¦¦òî»ï:²³³HíÚµ‹çŸžaÆѺukt:yyylÚ´‰îÝ»£Ñh¼þ1«<¦OŸNxx8}úô¡qãÆ¼öÚkN«D_Ðjµôïߟþýû»Ü·X,L˜0Á­—kõAו/8p€7Þxƒ×^{èèhºuëF·nÝJÅËËË+S ìm_ðµ¼jµšÆ£×ëiݺµÛ4 ý‘±nÝ:áÞb³ÙøðÃ7n!!!<ÿüóŠ=»<ªÃœRUcRï×Ûy_É÷[•󠜶!g¼ª\ïm²$—.]"%%Åq}ñâE/J!@ @ ¸b)ñó’:Ü}¼š@IÛ­5`ß¡*Ô¡Å׺†Å¢O8ÇW§½è*û®ç5VÑY–6§}×*…öÒ©£p±ßâæ_(–³Hå½¶Q­8Z ¸ž±‹“¬öc+Èò£5•ƒùÄVl…Ù¨%oIÚÝ%rR±{JkÖ)¬Wü¿¡U¥ D¥/ž$Ôµ¡¯Õ¨ì4®“JÁ¢1 ™âðŠ­ŽHBßé9ôžÃrúOŠ~ŸŽùˆòçú+ßꈥ„COg!¦¯Töz£2l–;wk⊿ۊ$/»A‰ºÊú'DU\š$}Vúý yÓ%Áµ;䤭j”¨«€æþ†$ä-3/'ˆâkþ ®«Õº½åõAãVIP­¾æ‚vR‰ IDATø/°›$Ppò´l9fÿOe•Δ)Søàƒ*7''Ç+çö=vk×®-ö믿b±Xˆ‰‰!55•={öTø¹àêµñêÕâÓBC¥Ff¯_¿žüü|‚‚‚Þ“ŠŠ$'S!!Njÿx[^9¤¤¤ðÝwßïr?00¨¨âìN ¶~ýzFŽÉ¿ÿýojÕªÅ3Ï<Ã3Ï<ÃöíÛ™:u*Ë—/w[ޏ8ib¸zõj¹ûž« 11ÒÄvîÜ9¯ÓÆÆÆx'— «U«–ã{M¬+¹øÚ®ìõÖ¦M‡"8Q#ÊÎ{ ãââVú«]ÙÅš§OßX‡Ý(Tç>XýäÍ¡¾RSëÙjµ²xñb†Nß¾}y÷Ýwc¹]gô믿V‰@à/j„@Ùdð9íác'™ô¿th›FJýºD„…¢Õj(((äÌù‹üù×~vîÞ²²JW–.]Jvv6 99™àà` 8zô(7nôé”2OØl6¦NÊÚµkéׯ-Z´ &&†€€rssÉÈÈ`çÎ.?ø‹ÅÂþó~ýõWúöíK£FÐëõœ?ž-[¶0{öl²²*ö¥÷ߟ‡~˜N:‹ÑhäøñãlÞ¼¹Üzö&­›}øí·ßJì²hÑ"ºtéÂéÓ§ÉÏÏ/·¼&LàôéÓtëÖ¸¸8ŒF#'Nœ`Ó¦Mж+€'NðöÛo£Ó鈊ŠÂjµ:þpëÑ£Püã’RX,>ùäÖ­[G¿~ýHMM%<<«ÕJvv6gÏžeÿþýüñÇ¥Ò*ÑV­Z…V«¥E‹„……‘Í®]»øñÇ9zô¨Û4þêƒþ®+_ÙµkǧW¯^´mÛ–äädBCC1™LäæærâÄ vìØF£)óGIoú‚¯åµÙl¼ùæ›tìØ‘&MšExx86›+W®pôèQÖ­[Çš5këïÞ½›§žzŠÒ²eKbbb ¥  €ììl._¾LFF†Û÷+‡ê2§TÅX§äûõvÞWòýVÕ<(§mȯª ×{›tfÊ”)ÄÆÆ’ÀâŋٷoŸì² @ @ n`J:Hr¾.ñ•ªºÿ'»ä¾+_¬ð •6ÚªfϸÿpnƒÊí¥+U‰ü*sÂ@p`½tuŒt¨ª¶Q/ô90®ûÄÏV)ŒÕŒù`:ºæƒЦt…UéVG”êâ=µ“J O‰ÖË'È›þ mCwË/ÑšÚ-1Ôn‰ùè ¼ Vå<*ú+ßêˆÍ¨ü3+{½Q6WˆŠÎÝ&*ì=Y‰º2Ÿ€‹C!ä1êªâæL@KécÜ—GfåÒV5rëJ[¢>“<úz—q‰ë*ZóWçu{¹}Ð …«!htØ®~ÅS…Õd*S’äädÇ÷I“&ѯ_?îºë.&MšDAA¢yiµZÚµ“Ü—¿þúë¼þúëãvéÒÅk²sYΞ=ëøn.Û=$Fîºë. ƒK<»€¹,rU¡R©øüóω§°°ñãdz|ùr.^¼ˆ^¯§N:|õÕW$$$x|ƪU«{œ†J«V­ŸÃ‡óâ‹/–ÚKcj)½‡°2±Ûj¿ÞàmyãÕĺR9íÊb±THà ˆ­ÎïF­Vþ49»Ã,%ñW»*,,¤qZPy„……¡×ë+ÿòåËŠŠá¯>X*«ÉC}Íjf=Ï;—áÇC‡X¿~=EJ:?‚êHX½ùÞ§²Ògeç°x¥O¶Ü¸q#7Vì—•»ï¾»ÌðǼÜg;vŒÉ“'W(?%Ù°awÞy§Oi½©#OF¾ùæ¾ùæ›*Ië‹ÍK–,aÉ’%nÃvíÚåUý™L&f̘ÁŒ3Ê«D»²çyþüyÇõM7ÝäX ^¹r¥BÏð–;v°c‡o^Îåô…“'OòÓO?UY¾J¼£ª®+%l.,,dáÂ…,\¸Ð«¼ñ¦/Øñ¶¼6›;w²sçN_L”Í… ˜2eŠOizè!YyûkN±ScÒï×ÛùAÎûu¦ªçA9mCÎx%9k;ÞŽ9¾ôA·I;§Nâ™gžQÄ@ @ @“èzmqò@fÍq Sùè]ÙVB<¡Òx‘¶„˜DUƾKk‰‹i“*ž3—_ð-›[k.ØLÅ‚‡‚eõ¦¼ü}Å– ÆkN#мØ//çýVÖËH¤kíGãfŸžæ¦i.–Ž#\1íš‹:º>º÷Ðúa¬™G1í.çÿÌ–‡7›ê½dJkúk¾C ¬2„£mÐÍU |0Ý;;¼Á ›mÆ\°˜@#M*¦}Ë(\ò†÷Yæeb\3ãúÉho¾mÃ;Ð6èŽJ'©µõ;pëPŠ~Ÿ.ÛfEó½NPǺ^[8›¼²×•b³Ì¹Ûêä˜O Ú›*æEY©º²fBöÈ™ ú¶ØCòZkãê;AðƒçæßÛrÒÊ]ÇzƒÜº ºÇIœlƒì¡`%X³@¥‡ˆw$!m©|ZóÛ©è¸2ú‘*@òm‘¹î¬HÌŸ_,PV‡Ku«wò \X‰SYuà7Þ M›6Ô®]›‘#GòñÇ+úüÛn»àààò#;wæ‹/¾ðêùvñóÙ³g]<Ú=(; X32JvvrEm¬LRSSII‘¸3fŒËþD“ÉÄÞ½{ÉÍÍ-÷9&“‰yóæ1oÞ<’’’¸ï¾û>|8)))Ìœ9“>}ú¸ì©½xQêháááDFFÊÚWkXúâÒ›´.\ 55•Úµk{OEÒ&&ÿ d¯çïJÔUMÃÛve¯ç%K–ðâ‹/úœ¯ÕéÐ Š´¢¢"¬V+jµÚ1(‰ÝÛ1@fff1+Ž¿ÚÕ©S§hÑ¢Mš4©’ünTÞÿ}z÷î]áøýû÷gïÞ½¥î{Û”êƒvvìØA^^^™Þç+JEû‘7¢}¥æP׳’”WÏûöícÇŽ¤¥¥q÷Ýw³~ýzÚ´iC@@ùùùƒ²@ ¸îQþ(@pCÑ¿@Z´îß¿ßÏÖ@ @ @ ª+†{ÇL»‹¿[/»†¤ú–‡5Ûõº¤(º,l%öT¹§8òÉ˹âëÀ.  ªx^Ja+,þ®©U^d0ýU|Ø4Þï=Vs\~Iúä~]ñtrÞoUa+““££ÀN¥ÛFÐ@×뢪?ÏS ¨‘®™€å\±¢+°Çkhâ›–™ÆVè:p¨Ã½øÌѬ:´¼AV™´–s{°^<è¸ÖwåððkËËÄrúOïìð¯l¶a9[<©h“;yW·àzˆ¥ó‘õ.}‹¼oa˹Püìú²YÁ|¯;»^›+ðÐJ^oT†Írçî¢Ý2t$ÓË+QWNÍÙV… ë-¸0,ÅÍ™@wÍYNÚªFf]iœ„Åæ ÈûQgc[>Ø<8¸UzÍ_á5°Âý(xÄ­ZK ffÙç”GEú i˜Š§2ÂF{è¶fB‘|CT999|øá‡<ñÄ$%ÉT¶— K—.Ì›7† ºý<òÈ#´jÕÊ+Aatt´c?èòåË]ÂìÏ)***óvo‡•)PîÕ«W…ê6&&ÆñÝ8ÍN:Åĉ¹ûî»1›Í„‡‡sÏ=÷¸Äùã?Iˆ5xð`YùÙ=pûâ‘Ú›´Û¶m yóæ.¬Š`OÛ¸qc"å=zŸŸïò.”¬«šLEÚ•½ž;tè@`` Ïy9{u¯èøpá‚´0°‹•¤{÷î€4v”·½¢}ß_íÊî<¤N:ôìÙ³Êòø†·}A©>hçý÷ßgذa¬]»Vö³*ÚŒF#AAå/h•šCý]Ï7*BEêùûï¿ wïÞÄÄÄЫW/ÒÓÓ^ÖàzE”A¹¼ñÆ 6Œ6mÚœœLíÚµIKKãå—_fà@éøõë×ßP§— @ @ @ ÊF êhÐ5€Ðg!dXq˜åÿpº¾¶¼âkÃ0ô‘¨ºÅÞÃÊÚé*4úvÒ&ü€4}N²Ë– ’@Á‘öзM<4“Êàœ¶pUñwU0D~º& Ž’·éß,ÅÎtÐևᠭ{­Þ®Ù¬srÜ’ïähT1ßAÈR\M‚7°„vMW]ó~«’üùÅßmãÉ£bðÃ’HÄŽån®z‚‰ÅDá/¯a+º6ahìÿ>ªÏ›kmy™’·ßkèš B{s{Ôa‰h’ÒÐwzUˆûÚ]¬JSG×' ípÔQuQ‡'¢Ih†¾ã³hâÜ–rÒíœ[œ6,ÞñÝ|(½„Ç`eñÖfÓ_ ßUÁ=4€vO¢Ih†:,M\*Ú†=¼c4š¸'¨µ„<½„Àž¯£­ßIzšTº Ô!µ°Y<_«»S§NìÚµ ‹ÅâöóçŸbµZÑh4Ü~ûíz®^¯güøñ„„„`4™2eŠK¸]ÌTž@Ùîa¹²ÊO=õ_~ù%cÆŒaþüùDDDxŒ{éRñàܼys¯óÒjµÃ:DVV‘‘‘.a»vírˆ¹^zé%Z·níuÞvìž5ãââˆõî]oÒΟ?‹Å‚F£á_ÿú¦Âù8§uçí²Aƒ‘è‚ ^¶AÙºª)øÚ®æÎ‹Ùl&**Š·ÞzË«w䌳·VûxR;wJ'KôîÝ»BÂFwèt¥ØKJJr´ôôt!cI¼éûþjW ,pˆ¹'L˜À½÷ÞKll,aaa¤¥¥ñæ›oº­w<ûì³$''WøãI\ëm_PªÊAn?:wNúû9!!„„²²rçP;þ¬goÆ gäÔó’%KÈÌÌD§Ó1tèPÇa‹/ö±@Psð¼Ê@£Ñжm[<Æ9|ø0“'O®B«@ @ @ ÕÐç¥;r&ã*|0CÁrº[ºTé!â_>djƒÂõÒæy„QŸºF)Ú& ¢Ka…Âu’0@ Q“J¤Ý^œ6wúúÚÞ&}[éS•ý!yù³:òš×>',g‹½,… ¾p›t­‡Ð§¥OILG]½ V ä¼ß*$ÿIdÐLº.«mdOĵ/‚2±fŸÅ¸á3ïøê°DôÝ^¡p¹§IÆùÈ:t©}PEa¸Çuà°dlÜ[zà°dü6¹ØU¤¾ã3è;>SÊËùÒƒ¥œ´æ½‹±u|U`˜Ë}ÓÞ¥ʨ ÞÚlÚ·]Ó~hêH“ŠÊ޾ýÓоô¤bÉ<†å|ñÆput}TÁ1èšF×¼l¯fæ[³Y©|k*=¤;òç¸Ô"%×Ue³œ¹ÛVYÿ†¨‰8ļ­¤;Œ[нÎÊ©+]=PÇH¶ *»|ÆÍYNZ!§®Œ›‹×*-D}"µëU@#­)=á¯5¿RýH[‡R"sÍM·Ã×>X°Xú»DV"MåNeÕ›ÍÆ—_~ɧŸ~Ê€˜2e ûöyìBCC±Z=+·óóó1›ÍDGGÓ¨Q#@à•ÿðáÃ4lØŽ;²råJ—pµZMRRF£‘ˆˆn½õV†Nrr2¯¿þºCÄdÇ.8v—ºÃîAÙ`0xŒSÑòº£_¿~Žï‘‘‘tèÐÁ£ègß¾}œ>}šÚµkóæ›ob0ؼy3—/_F¯×U¦ß}÷EEE,^¼˜]»vqéÒ%t:‰‰‰ :Ôá]Ò.Þ´c³Ùxã7øá‡ â‡~`É’%¬^½šŒŒ , !!!4lب¨(>þøc6üþ»t €J¥â‹/¾`òäÉFêÕ«GRRãÇW$í™3gøê«¯9r$=zô`Ö¬YL›6ãÇ£ÑhHHHð(;sæ _ý5O?ý4wß}7AAAüôÓOdgg“––ƳÏ>‹V«%++«Ô>c%몦àk»:wîŸ}ö/¾ø"÷ß?·ß~;3gÎäÈ‘#\¼x½^ORR·Ývo½õ–£/–äèÑ£dffÍ?þñ4 $1yýúõùàƒ\ÒüüóÏÜyçÔªU‹éÓ§óå—_ròäIôz=‰‰‰>ûì³ÄÄÄžžNvv6M›6å¹çž#88³Ṳ̀I“ÊLïMß÷W»*,,äÅ_ä›o¾!88˜ÿüç?ŠkÔ¨Q,Z´ˆvíÚ¡R©0›Íe žvìØAÆ iß¾}©°àà`·B™üü|Þxã ,Xàr_£Ñ8Ü”·O´"”+Z^wœ;wަM›:®=3–ÄjµòòË/óÍ7߯¿þUñSÐ4 -Z´À`0йsgñÒÓÓY²dI©û;wîdøðáLœ8‘¸¸8ú÷ïOÿþýKÅËÉÉ)Syüøq.\È€hÕªS§Nu„]¹r¥L²·i'NœHTTC† ¡eË–|òÉ'Ÿ]’ &ÏÀéÝ»7½{÷v ¿zõ*O>ù$çÏŸ/•V©ºª ÈmWŸ}öz½ž§Ÿ~š:uê0fÌ·é¿ùæŽ;æ6ÌjµòñÇóî»ïÉ»ï¾ë~åÊ•RåÕ«W3kÖ,î¿ÿ~ÒÒÒøê«¯Ê+j)t:?ü0?ü°Ë}‹ÅÂèÑ£Ù¿™é½éûà¿vµuëVÌ+¯¼BçÎcgNN+W®dàÀh4l6›by |×¾ D”ƒÜ~tàÀV­ZE=¸ýöÛ¹ýöÛaW®\q(Ë™Cñg={;nØ‘[ÏÓ§Oç©§žr¬…,X@QQQ…ò‚šL¥ ”Ù­ì,~äãÑ—Ø·Ãè—¼'NœHHHˆãú­·ÞªðÂAà[·neëVÏÇa&%%U¡5ecPËá½÷Þs|oݺµ\“À-$;;Ûßf@ @ Ô8n¾ùf›pÝ£R©X±b…¿ÍT"åmöË)É3²®)h’$/cêpøöî;<ª*}àø÷NMï=! ¡R!Ql€è"uý­ °°ÈZ•UaÛÂbAEA@Š4ЄPBI#!½Ofæ÷Ç8— 3 )“Lçó<<ÌÜ{ϽïÜÉræ¼çEÃ%(ßÅ+ òŒíö†<Èþ¸í@P…j0æƒ>×´Ýq(Ûy8Ò ûQpŸšÞ¦ŠhÆBÓòò? ls mSáòßÀm2h{›ƒ±*ÓLՊ˶Zn_q²îׇL‰Íª0@ Æ0üU½8ÉT™¹1Kàò$pŸš>  4U…3äƒ>Û”Tru±rg¦8Ç™**Arc™)æŠ(Ýdû˜ŽÖç·)r {"¸Œ4UìSµ1cÃeÓßRÑ—U’“A¨##åÛßÃåÁOä%ÚÛž¡rÙ`´®ÆgÈO£ä‹GÑô›Œ*¼’«ÆòB ùièÏýAe²ícE %+&¢í; eÄÍ(ÜA¡ÂX–±(‹ÊÔƒTž´=Ë@CÚèNl°HPÖ^es;ÉÙTu#a,ɽåÙúÄl,/¢ôÇgQ†õ@Ý)eH$÷@$µ3F])Æ‚ ô© è’,ßT*Ol¤¤ Uû¡(Ãz¢ð EÒ¸‚^‡¡ä2†K'©LÚdjgã9­oÌö:nKUºî î’«ésOé(þÜTØžìõy£)cnè{wùN¸4ÒTmWÛÏ”ˆ¬ðIcú<©Ï4%†V¦X¶«ï¹*Ýú Su[MP†‚ÂŒ:S̺“¦Ï¥›ƒýÚ:R½ÿ® ¦r—xpºÝô™]ákJÚ5–™¾‡è3¡ò¬é¹¾š£>óÛã:2ä@îsà1”~¦‰| U¿ýÕr –m´LP.ù¡öǽ >üðCÞ~ûm†J‡®™Ðr-æd㤤$ÊËk·{èÐ!|ðA¢¢¢ $33“¤¤$vïÞMTT^^^¨T*rssINNfÇŽ|ûí·äååYí«j…Äk%(›×»¸Ôb€z˜?>ÁÁÁ„‡‡³bÅ jÜþÏ?ÿäÎ;ïäÑG¥oß¾áååEQQyyydeeqúôi¶oßnÑÎ`00iÒ$† FÏž=ñ÷÷Ç×׃Á@vv6ÇççŸæ§Ÿ~ª¶ôüÁСC=z4ƒ¦cÇŽx{{SQQA~~>ÉÉÉìÚµ ¥RYcÈÙ³g“’’ÂÈ‘# ¥¬¬Œääd6n܈$I5&:Ö¥­^¯ç…^àçŸfܸqôèÑ___ôz=¹¹¹œ?žC‡Y+sÛ§žzŠ 60f̺v튳³3©©©lÞ¼™?þ˜Ë—/W§½ÎUs×п+£ÑÈÛo¿ÍO?ýĸqã¸ùæ› F«ÕRPPÀéÓ§Ù³g¹¹¹5Æñõ×_“““Ã#¯Ððó\PPÀW_}ÅäÉ“øæ›oju\A„–Nú럅yóæI‰‰‰RVV–TXX(EEEIYYY F£,..V µ‹‹‹Z§Ói'…Báj4ÝF£÷öíÛ×ìÛw¥—Æ·Wz3„§Rgä“×s9°³´Éýý÷ßãáqeZÂÉ“'“’’ÒäqÍ‹$I¸»»Ë³N ‚ 4WF£‘3gÎ4Zg„ ‚ ‚ ‚ ÂõF’$üüüj¬À"4œJ¥bÖ¬YÜvÛ5J4 -ZÕå›zU™¬Õê—cAAA{Û3hz>€±¢˜âã1–ZmçòÐg(C»Õyÿ%ß=ŽþÜÞÇ)4oª6àÿõ•ûù¯AÉjÇÅS-1fA¸žØóôxÚ”Ô ¦‰•.ŃÁú­LA¸ŽúÈÁÑ‚ 4•£Z>…}ÚwW9: ÑÑÑ$''c0ŠÐÄŠŠŠ08;;;:A„jI’Ddd$*•ŠŒŒ G‡#‚ ‚ ‚Pk*•Šgžy†Ý»w³mÛ6G‡#Ø™x~…æF¡P€“““£C¹®¹ººòꫯҹsg»ísêÔ©|öÙgøùù‰þ/AA„ê(”8xTZ«UÆÂL*ö.kú˜A¡.”àõ HÖoeè3¡èM’ ‚ 4µÅ‹“’’ÂþýûÉÌ̤¤’·ˆÆ IDAT¤„FÅèÑ£X¿~=ÙÙÙŽT{iß¾=¥¥¥èt::wî̳Ï>‹¿¿?;wîdÓ¦MŽO¡ÉˆeÁnîŸâ‰«»‚þ[àèPèÛ·/sçÎe×®]¼ñÆèõzG‡$4±ââb ÃuSQ£GH’Ä… ÈÊÊrt8‚àPNNNh4 šÇ{NC………¡T*IMMut(‚ ‚ ‚ µr÷ÝwãêêÊž={ŠÐÄóÛ¼¹¹¹JAAéé鎧Ñ)•JÑh4ŽåºæííÍüù󉊊²ë~õz=z½žÊÊJ»îWAáz¢ô¶œ¬+¡ô§Ù+Jªm[òõÄÆ MAjEÝÞvr²±rŸ3ý/‚ ×3¥RÉàÁƒÑjm¼!þ%11‘¹sç6aT‚ 4¶çŸžZ,;uêO=õ”ƒ"Ap ‘ ,ØÕˆ1+øòý<ŒFÇÅ1`À^|ñET*ƒ B’$^ýu‘¤|*--Åh4âæææèP$ €^½z’’âØ`„ÎСC¹ÿþû1 ¬X±‚íÛ·7IÛ«9;;óÿ÷„‡‡ãççÇ×_Í?þXïý57ÁÁÁ¨T*Î;çèPAAAh‘‘‘Lœ8­VËçŸΑ#GR½µoßž!C†ðÞ{ïQVVæèpì.00;3ÈÈH|||¨¬¬$''‡sçΑ˜˜HBB‚£ClT×ûó[ ¹~ãÚŸ?>*•Š•+W^÷ Ê*•ŠÀÀ@Ôjµ£C¹®òæ›oêèPAAnXú‹ (|£´nËò©<·—Šß?Æ{ÞÑ¡ ‚ B­T$€* n`ȇò½Pô TŠ·2Aá V«yÿý÷éׯáááøúú¢ÑhÈËËãØ±cüòË/¬Zµ NçèPA°£ÒÒRòóóqqq!55• 6ðŸÿü‡ââbG‡&‚ФD‚²`wƒâ]quWðéüô˜РA<ÿüó(•JyÙÀ‘$‰×^{M$)’$Lzz:FGf’7‘²²2ŒF#îîÞ"##(,,$''DZÁ7___{ì1$I`Ê”)k±þÖ[oeêÔ©€é|=ÿüóòxoÞÞÞ׌R©ÄËË«VIÆ i{#óññA©Trúôi ƒ£ÃAAÁNª~¾o©Ÿõ “'O&//U«V9:›:uêÄ´iÓÐh4̘1ƒòòò:µ?~<†²²2V¯^͉'0 xyyf÷x%I¢wïÞôïߟ°°04 ………$%%±iÓ&RSSí~Ìê´„ç×Qrý^×¾#hµZQ(MvL777,X@»ví˜7o»víªqû[o½•_|±Æm^~ùevìØ!ߊŠbúôé´oßžÜÜ\V¬XÁÚµk­Ú͘1ƒøøx–,YÂ÷ß_¿T :tàµ×^ÃÃãюќ3tèPöìÙ˜ú©=Zíö_ý5Ÿ|ò ‡¢¸¸˜† ÆìÙ³‰ˆˆhôxKKKY´h.\`òäÉtíÚµÑ)‚ ‚ ‚ ‚ ‚ ‚ ‚ uÑ씫Z²ç(÷uiKˆ‡k­Û”Wê™òý¶ŸM³X~!¿ˆ¯dÕÑÓ¼?€øŽ‘ëSr HÊʵX¦7É--gßÅKì»x‰ÿHdaü†¶ke±Ý¥¢+ Ÿ'³óHÉ- ÒûÊàŽu'ÎÉ·/—”U{Fa G«$'l8y®Æåæ$æ&'žzÓ÷ç\¦¤¨i^%''óÄO0aÂÆŽKqq±˜™¤ ggg´Z­£ÃpˆŠŠ ðððhQIÊ>>>ò±sçÎY­ "<<Üb™R©ÄÝÝèèh¢££‰çƒ>`ÿþý£9‰Ú,66¶ÚåððpzöìisPPAAAÜrË-$&&òî»ïRTTd±—וI( "##C^vóÍ7Ë·o”uéüùó\ºt‰€€ÒÒÒj=8º!motžžž´oßžäädôz½£ÃAAÁ~üñG¼½½Ñh4¬\¹ÒÑáÔ˨Q£ åõ×_§²²ÒÑáØääädQý¸.BBBàÛo¿e÷îÝòºK—.qòäI»Äh¦T*™2e ݺYNÊéííÍÍ7ßLll,ÿûßÿØ»w¯][–ðü:JC®ßëáÚojNNN4irrpp0óæÍ#**ªÖmœ­'°­‰R©dÞ¼y²iÓ&ºwïÎŒ38wîœEeíöíÛÇ™3gX½zuŽQ=zôà_ÿúWGKe0xàäääkm;nÜ8¾þúk‹ågΜáÃ?äóÏ?gÍš5 <¸±Â%;;›O?ýTô§ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ÍZ‹JP.ÕUòú–},UûªÀ/üò»UrrUz=3ÚAkb}êOayÿaë'ޤ­ï•*ÌYÅ–i7$gêÍå6»Ï¥ËëjJPþõÔ®®=üûù ŠÊu¸iÕuŠÕQÚÄhxö?Þ}þ2ù9"ÁJpM:À­!Ì•JKKÉÌ̬×>\\\˜9s&³gÏ®q@“N§«¶’KEEEµízõêe•ôƒ³³s½«tÇÄÄ0gÎþùÏ¢ÓéäåU”Á”ýÓO?¦Ç#¯»V‚r}濫¢‚¹sçrë­·b0غuk­fÒV0UíéС'Ož´¸AAAh™.^¼Èk¯½æè0ê­k×®Ü~ûí|ðÁdgg;:œFáëë+ß®š,ØXâããéÖ­ƒ7²sçNJKKiݺ5<ð<òÈ#$''“››{í6Àðü6DC®ß–~í75üýý›l‚I¥RI||<&LÀÕµö“ã‚)V€C‡1oÞ<›Û”•]ù ¨W¯^³fÍ/^LçÎù÷¿ÿM||¼üš#IO>ù$ï¿ÿ~£õ¥õïߟ_|µºeüÖdÏ=÷ëÖ­«Õ¶/¿ü²UrrUEEEÜsÏ=$%%d¯SrôÎ;Y»vm½ûÖAAAAAAA¡©´¨e€ŸO¤0%=†®Á~×ÜöPZ6«Žž–ïÇú0gH,nά;qŽ…Û0•olÝÇÝQí¾Ö<G»+ÉÙyüg÷a~?oªÖYi0°dÏÞŽ o{uÒñ/'ÏÉ Ê[O§¢Ó_I†Óé ”Uàád]ÕcÓÉóòm'•’²J=:½­g.rWÇÖ×|üÍEX”šÙÿöcáìl²3Dbšàx•••r’²R©tt8×d®L|þüyŒÆ«§-°6gÎ._¾LXX£F’v•J%#GŽäÃ?¬¶íÒ¥KÙºukcìÕ«—|»¢¢FƒJ¥¢GÕ†ªóÆo——GTT£GÆÏÏôÁèÑ£-ƒ]tÜ»wo9A¹{÷î¨TWÞÚT*...”””Øœ°°0<==ñðð@’$òóóINNæ×_­ñÚ×h4 2„ØØXÂÂÂpqq¡¬¬ŒÂÂB²²²HLLdÆ UYªR©Tôïߟž={…»»;’$QPP@ff&‡fË–-ò`ÊeË–¡ÕjmîkÉ’%üöÛoÕÆÚ¶f]ºt!..Ž6mÚ ÑhÈÊʪõ`<…BÁ-·ÜÂ-·ÜBDDZ­–¼¼<Ž=ʺuë¸xñbíëz®›V«•“”EÕAAA¨µZÍ¢E‹øôÓOÙ·oŸÕ6‹/F¥R±råJ6oÞl±nÀ€DFFÊßé\]]Q(äæærüøq6nÜh³êì!C¸ÿþû­–§¥¥ñòË/×óرc8p ååå¼þúëdffZmóØcÑ»wo²²²xõÕWeb#OOOþñpðàAÖ¯_o÷ý›5ä9 aîܹVÛÛJ;qâï¾ûn½Ú®^½š_~ù¥vèÌG€Íþ€ÜÜ\Î;Gûöíñññ±Ë1«‹£)ž_³øøx:v숗—®®®¨T* 9sæ ›7oæÌ™3Õ¶Õjµ <˜®]»ˆ““eee‘MRR6l¨¶½Z­&66–=zЪU+ÜÜÜÐëõqñâEŽ9ÂÎ;åírý6¤­™R©ä¶Ûn£OŸ> IìÝ»·Ví»wïÎÀ‰ˆˆ@£Ñ““ÃáÇٸq#………5¶­ë¹²Fý[·%88˜àà`RSSùïÿËêÔGmî§¼Öù4»º*´$IH’$OJéííÍ„ (((àÓO?­uuqß}÷1uêÔFÙws•žžÎ„ äû>>>äääT»ý÷ß/÷Á999±fÍÂÂÂxê©§8þ¼üñÍ7ßðïÿ»Údשּׁ,–.]Jvv6 `äÈ‘5ÆšMvv6þþþÜu×]tèСÚßkA¨—Ñà>0@Á t­£#ª;ɼ^uPCáP´ÌÑQÕ¬%Æ,‚ MEróÇéŽ9(ýÚ"¹R¶ñUtGV_»¡ ‚P+6lÀÝÝ·Þz«E$(O˜09sæX-ONN–Çd ‚ 7&u·ÑhûM£ò‹Ñ%6mç¦*²/ê.£PwArõÁ¨+ÃX’ƒ!÷<ú”ÝèŽþ„Q'Æ8 ‚ ܨZd‚ò®séìJI§dpÛí8›&ßî$''›ÝÛ¥œ lv¥¤3ºK›k_«Rè#'(ç–Zü+(3U×ðtÒàëâÄáôl6'_àî˜(¶I``T(_&$Éí#½-±ýÌ•JË7‡1¤m+9Aù·3©èF”W fiî¼|•<»Ð÷_¼Ì™ã[®T/¨MÅÙºxðÁ‰ŠŠ’ïGDDÁ˜1c,¶1b^^^¼ôÒKVûèÝ»7ÑÑÑËüýý4hdáÂ…6;zxxðïÿ›ððp‹åîî»ŠB¡°JP¶‡‰'òÐCY,óööfÀ€ôïߟŋÛLxÓàQ›ëÜÜÜpssÃÉÉÉî1_‹Á` //OOO‹ª»Í‰¹z²N§#--­æmÐét¤¤¤È Êîîîö €nݺÉçïØ±cìß¿_î ëÖ­ …ƒÁPÓ.,äååñã?òðæk¹S§N$$$àâbšH¢¨¨ˆüü|Ú´iCÏž=Ùµkݺuàðáà :0=挌 GjZ¾¾¾ 4Èj¹ŸŸ~~~ôíÛ—o¿ýÖæ HæÌ™#WY1suuÅÕÕ•   ºtéb5€Þ¬}ûö<ñÄ6+ИߩS'¶mÛV¿ggÇç‘G±XJhhè5ÛzxxðÌ3ÏЮ];‹åþþþÜvÛmÜzë­|ñŬ[·Îfûæz®Ôj5ÑÑÑ$''S\\ܤÇAAF³³³Õrüýý‰å½÷Þ«õäbµ±råJÚ¶mKHH“'OfþüùTVVÊë{ôèAïÞ½1,[¶¬Q’“µZ-ÿøÇ?¸|ù2_|ñ…Ý÷#«:U@@'Ož´ÚÆÝ¢ <<ܪoøj …‚¿ýíoôîÝÛby`` ·ß~;ýúõãƒ>àôéÓ6Û;â\y{{ãééi·ýÕÖÚµk9yò${÷îÅ`0È Çµååå˜&¨ÔTÓïC]»veÛ¶mÄÄÄ I’Üï;mÚ4\]]Y¸p!ö¯–5aÂÆŽk÷ýÖVII Ï<óŒÕòØØX|ðÁF9¦Ñhdüøñdee0sæL>\m?*`Ñï7räH99ÙlÚ´ir‚rff&'Nœ¨vbÐ~ø .°iÓ&ºvíjõXÕ€§S§N( 1Y¡ Ø™2ýôSžþy¸ÿþûY±b`šŒkܸq€)᩺DÆP(Lš4 µZÍ»ï¾k‘Ýܤ§§óÄO¦ª±'Nàé§Ÿ¦¢Âr¢Ä«û¾êÒ¶>}3Õ)++ãüù󄇇3|øp8@II‰¼¾cÇŽQYYi³štC9êù]»v-z½žììlJKKQ*•DDDpï½÷Ę1c8tèÕä\qqqSYYÉš5k8zô(………¨Õj¼½½ ¯6I?44”3fàää„Á``ïÞ½:tˆììl$IÂÍͨ¨(«þ˜†\¿ i 0~üx99y×®]üñÇ”––ÒªU+l•0YÕ¨Q£äää?ÿü“;wRRRBTTñññ¸»»óøãóꫯZ%ÖÖ÷\5„¯¯o£LªX999ìÙ³§ÞíÍ Êh4«×Œ«8p€´´4âããqss£sç΀éºèÞ½;ƒ&11Ñn•ÚÍ$IbúôéÄÇÇÛu¿uUZZÊ;ï¼cµüÑGm´åO>ùDNFîÒ¥ óçÏgĈ5¶©ZIgÀ€̘1ƒ={ö°hÑ"z÷îmQ…ùøñãÕ&(_}åääÔ˜ ìáá!ÿ]B]¸>ê. j úTÈ}ÖÑ5O äädIJ¿–— ,TO\ ×§Q£FÉŸ!Ú·o_§ïe<òˆÍ å«ÊÍÍ妛nªq›Ž;2vìXú÷ïOPPz½ž³gϲ}ûv¾þúk.^¼XmÌ5Ùºu+“&M’ï;V{2eÊ›“ªôïߟåË—“MŸ>}lî÷®»îbôèÑÄÄÄàééIQQ/^dÿþý¬[·Ž?ÿüÓªM}cA„Yß¾}yæ™gˆˆˆÀÃÃ¥RIyy9¹¹¹?~œõë׳fÍšjû^íõþ{÷Ýw³páBòóóéÓ§:Îæ¶ýúõcÚ´i´iÓF.ê’——ÇÉ“'Ù±cß~û-ùùù6Û¬^½š.]ºðý÷ß3kÖ,‹uþþþüþûïH’ÄÌ™3­ŠÝ´äÏäƒ>ÀÙÙ™.]ºXôåÛÛ—_~É÷ß/ߟ9s¦U¡AhñÝY¸žhzŽAÜ…o†üTJ×XO’z½P¸ùËÉɦ*$7¿&IPVu¸Ã*9ùjÆ’ ùu/Ä&‚ \?ZT‚r<´¶œ¾È¾‹—Ø•’N÷ÛUY/•Pµn®—“ÖjW•BAå_ƒÒ.]ûKãù¼Bí:ÌÙœ+‰A½[Zlc® l4Êâ݇Ùu.]ާOx Z•RÞ>¯ìªArF#[O_ù£oDN*%ÝCüØ{!€­§.¶Èe­“įúò÷áöùb4Ù¼y3—.]’—…„„н{w€F«œš™™III {öìáÂ… ´jÕŠ„„òóóÙ´i÷ÝwQQQtêÔÉ*AyïÞ½Vûûý÷ß¹páŸ}ö†ØØX«œbbbؼy3+W®´X—••e1p¦*£Ñ(ŽªÚá¥Óé®9hÊÏÏOîàØ¹s'¯¼òŠ<3//çž{ŽeË–áëëË}÷ÝÇ›o¾Yí¾þøã›U–“’’jŒ¡±™“”mULu$gggM¯/õ©ÀÀ½÷Þk‘Øz­Dð &ðè£Z-?qâóçÏ·Z.I=zôï;vŒŠŠ N:EÇŽSôë IDATSE§º&(W½žÁTAØÌ\AY¡PpèÐ!î¹ç:wîl‘_µ“µ¦Ê'u}¼ ‘ÍâÅ‹III!??Ÿ²²2¼½½‰çŽ;îLç³ÿþƒ<Õjµüz¦Ç÷ñÇ“J¥"00N:ÙLÄV(<þøã ·ÉÉÉlܸ‘””ÊÊÊpvv¦U«VVáÓ¦M“oGDDÔé|4¤íˆ#P(®|‰Þ²e ëÖ­C’$nºé¦+8Ð"9999™¯¾úŠÜÜ\:wîÌ£>*Ÿ‹ñãÇóçŸÊ+ 9WMI¡PЮ];öïßï°AAáFvþüy‹ïÖ§N¢¤¤„±cÇHëÖ­9s挼Þ`0X$ÄÖuVý´´4¾ýö[ÆÇ AƒHJJâÀ<üðø¹¹‘––f³¯ÅÆŒCXX ,°JmnŒF£üý®ê`õÊÊÊjbÙ£mC}÷Ýw<ù䓸úú2{ölV¯^Í‘#GˆŽŽ–¥¿ûî»F© ì¨ç÷èÑ£VË>Lff&/½ôjµš˜˜«þÓ6mÚ¦þÅM›6Y¬ËÍ͵¸î®6nÜ8œœœ¨¨¨àý÷ßçÔ©SVÛØêWmÈõÛ¶¡¡¡ôêÕ €7²jÕ*yÝ… سgï¿ÿ>*•õÏ;>>>ò¤}»wïfùòåm“’’˜3g®®®ÄÅÅYUή﹪/??¿:W-nNüýM¿OMš4‰I“&QTTÄéÓ§Ù±c6l°šT¯×3oÞùD¾_TTTc‚òàÁƒåÛååå,X°@®*™™‰··7£GL¯×ݺu“«Pµ¤sÕ˜³p ‚ ‚ ‚PwüñcÆŒA’$ÂÃÃkL”¬;vбcGzöìÉøñã ¡[·nèõz–.]Ú(“(ÝsÏ=ôèу·ß~Ûªú£`?'OždÑ¢ELš4‰ÀÀ@¦NŠN§“û+V®\ɶmÛì~Üæøüfff’““ƒŸŸŸœôY•y°ëÖ­quu­uRuXX˜\‰øçŸ¶™pÛܘûXu:Í€5%;÷éÓ…B^¯gíÚµVë322سg  wïÞ¬X±BDèˆseî×3\li.\¸@~~>âææF·nÝèÖ­£GfΜ9r©ÙÙ³gyòÉ'-–3†V­ZñÝwßÙý=Lž0­Öz"ߦ ÕjÑjµL›6MNŠÿꫯ9r$¿þú+£F™·|ñÅò톚>}ºü›ÊôéÓ­ WÇÜŸ¦ŠÆUûâ̯=ò²š’‘n¿ývüýý¹|ù2Ý»woÑ ù‚p=0–Cöp  d à¸ùHAh+V¬`õêÕòý;vàææÆÛo¿Í—_~ ÔüùzîܹòdîÇŽcùòå?~…BA§NˆG’¤?ôêÕ«ÚcÔô}¾mÛ¶Œ=šo¿ý¶ÆÇXÕßþö799ù×_eùò夤¤àääDÇŽ¹ãŽ;P«Õ×LªoÌ‚ ‚p#ëß¿?z½'''BCC=z4÷Üs111,\¸Ðfªêûþ@¿~ý¸|ù2_~ù%Ó§Oçî»ï®6AÙ¬¸¸˜#F¦Iûôéã>J`` ‹-B¡PXõ/ªÕj¹Œ··7={öäÏ?ÿ”×›'NlŽ}µÇãA„Ve9%_ý u—»Á Gwt šæ=Sá×F¾­¿°ŸŠ}Ÿ_¹_|}†ý&7AZ®æ—‘w }¸3:‚õIçØ{!“©ÕÏLnÉö—ÚND_ª³~÷wufþð~t ð±XnNt6(%‰þ‘Á¬Oº’.Nµ{Íȉƒå,žÛðáæÎKbb¢|_«Õrï½÷2vìXœœLç%--Ÿ~ú©ÁǪ-[©l-suueäÈ‘ÄÆÆˆ§§'eee¤¦¦Ê[l úᇈ%22’eË–ñÓO?±qãFRSSíÿ`þÒ¥KÀôƒ[uÕZÌÉ‘æ™wóóó-žÆ V«-5‘‘‘€éï¸.3áÙúÛÉËËã“O>©6‘µ¾ÌIÁgΜ‘“9OŸ>-/ˆˆ¨WB}դܪI¢æ¤esòvbb"½{÷–×'$$Èç®$47’$Ahh(>>>H’DQQ‘Å Ú«ã-++ãܹsDDD¦ÞwÞy‡-[¶°gÏž+ttêd9Æ·ß~k÷ ,öäáá§§§|ÿàÁƒµn«V«åA´°L°k×.9AL“=˜”[ʹ*,,$99ÙÑa‚ ‚ ‚PEyy9ùùùxyy5ZâÑ_|ADD¾¾¾ÄÇÇ¦ÂÆ˜D©[·nÜqÇ,X°À¢Š¤P³N:YMžžNvvõ3vwèÐÊÊÊ8qâíÛ·—”‡ Fff¦ÍªÃõåèç×ÙÙ™Aƒѹsg|||pww—'c3_?¶&”Û²e 111„„„ðòË/³}ûv~ÿý÷ûE‹j¥¿ÿþ»}L#1Ob—ššjU÷ZÌ•¦SSS«íË=rä @£ÑЪU+RRRÇœ«ÒÒR222 ´ªH×Ì;W¾­P(h×®Æ #..Žàà`^ýu&NœHyyyµû dܸqdgg³jÕ*þùÏÒ§OŠŠŠX¹r%ßÿ}ƒãüóÏ?™={6¯¾úªCdËÊÊä~Ðçž{ޏ¸8”J%•••òr{ @ݶm+W®LƒlçÍ›W¯ýF̰aÃØ»w¯üœWí7¼V‚}m£Ah†(Zæè(Ah*:îÊäùæ÷ð²²²kþv}ë­·ÊÉÉ«V­â¹çž³¨xøða¾þúëkþ]XXX§*È`êgÐjµÌ˜1ƒ5kÖÔøy²*óD/;vì`Ú´iŸYNŸ>ÍÚµkk59P}bA„]Õ¾Ö .°gÏ.\¸ÀŒ30`ÑÑÑ$%%UÛ¾¾ï¿wß}7J¥’uëÖ±jÕ*¦OŸÎàÁƒqww¯qƒÁÀÅ‹SQƒòå—_òé§ŸËo¼ÁÞ½{-ú_ƒ‚‚$‰'NСCn¿ýv9AÙÅÅ…~ýúÉë®UAY|ÞA„º3–äPñÇÒ&?®¤½òÛ’¡PŒAlkq ÊO ìÁ†“ç1|´Çöà,Wå &[ Æ%U–»ilWҬ΄›:2¸­e¥ËJÕ*˃©³`ë9A9ÂÛHoŽd\IÐ-ª°ŒÍ\i s¯|;&ðÊm#°3%‘Z×)fGKØYÊǯçR©kxÒWÕää!C†0iÒ$y†60uô¼ôÒKV jŽÁo¼aU D«ÕZ$æÙúahß¾}Ì›73fàããÃØ±c;v,‰‰‰¬ZµŠ;wÖ8Ão}øø˜ð»vízÍ™õÀ”`Ø’”5 îîîÍ®J‡Z­–;ễbýúõ8pàšÛ}üñÇlݺµÖû­š \5Ϊ·%I¢sçÎìÞ½»Öû5WÕ03_ÇJ¥Rìk´xèÐ!9A9##ƒŒŒ ‹DUó„¶Ôõñ6Dûöí™2e ¡¡¡5ngëoñ½÷Þ㥗^’_#3f cÆŒ!))‰üÑæóëë{å}C§Ó5ûåW4W8© OOO‹¬™™™VÛdeea4åsìíí-¯k ç*77×b"AAAšó`a[‰•öPRRÂ7ß|Ãã?˜SצŸ¦>Ξ=KNNƒ "%%E|©¥É“'Ë“ªUµråJ6oÞl³M||<Æ ãòåË,\¸Ë—/£P(èÞ½;wß}7L›6wÞy‡³gÏÚ%NG>¿ÁÁÁLŸ>Ýâû8˜®wwwù¾­¾‘cÇŽ±dÉÆŽ‹§§'Çgøðáœ>}š-[¶`³_ÔËË 0]Cu<ÏQÌ)Ö§ºµ¹ï¨ºää«×U´ÑQ窼¼\NR¶•äßR ’’’HJJ"!!¹sçȈ#øá‡ªm÷ÿ÷hµZ,XÀ´iÓ8p ;wî$""‚iÓ¦qéÒ%vìØÑàøyúé§yã7ä>G:~ü8ÿýï™ï_¹Ÿ3ʫ̉ð3(L·ËwBÎÌ+ëòüVw®òþ¥km¯»š¤§aà4Ôþ:¾Âô\éS¡ü(Y†«ßFàÎÃA ’²¡üOSÌ•gª?¦¶¸Žu HZЧUÍØlß„ÏoCcvÔµPßã6„ä.£AÊV ð4ýC2ýmT$@ñ× ³‘¿â·Ìtn —!óNËõ /¬òU±ø (xϾñß(f̘˜¾C½ð Õ&Д””ØýØGE¥RÑ­[7~øa>ûì³Zµ3Ov´sçÎj¿ë‰ïøBS‘4.¨»Ý‡2(…W’³8yš&¢/ÎFñ¾ÆpÉúÅÎeÜÿP™^ìŒÅ—)Z2ÌrßÎ^¸=þ«|¿bß”ÿö®uJ5êw¢js ŠÀŽHÎ^H’CIÆüT*Sö ;¼ cÙ•7oE@{4=Ç ðBrñEábêÃ0”äbH?LÅ¡ïÑ_¸ÆC=Ž[•ºÛh4± ðÂXQŒ>=‘Šý_¡?¿·ÆÃª¢nAÝõ”!]´îKóÑg$¢;º†ÊSôÆ/B–/_.¦èÑ£G Êõež dýúõ\¸pÄÄDbbb¸ãŽ;ê<ñ]QQ3fÌ`Ó¦M¸ººòØc1þ|y}@€é ÛŽ; äöÛoçõ×_`À€hµZ~þùg:tè@`` ¡ý 2„¡C‡…³³³Üïöá‡Ú,Ô¾}{Ö¯_oµüÈ‘#VËvïÞÍøñãåû#GŽdÔ¨QtèÐ///.\¸À¦M›øñÇ™1c·Ür z½žuëÖñÚk¯5ÊgJ¡y“´àr/8Ýú×÷Qw0”€!ôéP±ÏôÝÕXÍŸF]¿ï7ä»sƒûsêùý·!Ä÷îë›ÛôHjë?hUd_ÜŸÞgµ¼|Ë*¬;FëûùYá‚2²ªˆÞ(|"‘ÜüMñ(Tu% 21d¤|çòSMߺ?€2¸ ÿv(Üü0V”¢OM@wlê˜x”!]A¥Áv”²mï`ȾR$¬ºÇ PöË¿Ð%V_ÈOÒ¸ î< EPGÞá¦ï&Î^HJ ÆÒ<ôi‡©Øÿ%ú4ëNÕꎫSœÕò’¯& O¿ê=RR Ž‰GÝq8Š€h$µ“éûà¹?©Øÿ%†Ë5tŒ ‚ -N‹LPnëëÉÈN­Yx†]çÒmnàæŒ„)‘ ¿ÌzFÑü² 9™ØÔ¦ú™M·N½—HowÆ~µßÏ›’–þóûFwiK€Û•7ߢò+³¯þêØ¿­m£»˜*Ć™¾xW®tú—T\i“[ZÎÑ*ÉËŸìM䓽Wq«Ú™’Ö¢”wo,áïäbÏüYWWWæÌ™ÃM7Ý$/«¬¬dõêÕ,[¶¬Ö3É6I’øç?ÿ‰¿¿?åååü÷¿ÿeçÎäää Ñhä W'/Wµ{÷nöîÝËm·ÝF\\111ò¿óçÏóÚk¯qæŒý>°™þ C­f­k¬¸ÁÉɩ٠—Ï}]«Ïœ9“ŒŒ æÌ™CLŒé›ò¨Q£Ø¾}{>¯ÅÍÍÍ"8..ޏ8ë/`ªÄ]—es‡¦™¹ÒPÕ¾æÁª lß¾€'N–Õ—c€[]ó /جn]ééé<÷ÜsŒ9’[o½Õâ⥗^bܸqrr¼½$$$°oß•AH³fÍbÖ¬Y6·MLLD’$úôéÞ={ÓäYYYÕþÖRµÏ¾9œËæHÞo™ÿ,h@ébZ¯é ê(ȹ*qQr¯Óà«–û‚Ó-¦¥ë!oPå7Ge0xO[.3ÿ]‹£žß†Äì¨kÁÇUƒÇôjÖ…‚s(8ÇAá è–ëË¿2PZákš¡2åÊzuç«¶ßc¯¨o,mÛ¶¥k×®|ôÑGU˜›Ê;ï¼ÃòåË™6m+V¬¨UÒJQQnnn´jÕª "„šIÁhÚ~±Sx†¢ð EÝ)žò‹©Økùb§?»[NP–\}QøDbÈI‘×+ƒ-_ìô)¿s5eHWœâ^Cáaýæ­ð`”a½Ð±|óV¸¡Ž¹ËF› A¨¢ï |ׇTì±ýÆPßãZì#°£|[r֠Ѐ*je¿¾îu²¡¤vÂiøË¨ÚY¾ñK®¾¨Ú DÕf ºcë(ûe›Á;A¸äååQZZг³sýžõA‡ÈÎΖ+ÿòË/õNPSAˆµk×òàƒ2bÄ‹esñ‡òòr~ýõWî¿ÿ~ÚµkGrr2·ß~;k×®åé§Ÿnä]­gÏž÷ÃÂÂ3f ñññŒ;–cÇŽÙíXS¦L¡cÇ+¯çmÛ¶¥mÛ¶üýï·Øî¡‡ÂÏÏ©S§ÚíØBó§ ŸM°U¥p7ýS…›&ÿ*Yu%¬EöçÔóû¯£Ž+¾w_ÿòùYÝeNwÌ©aß.H¾­Qø¶¦|ÇLËÜÐÞòËíœ5¨ÚÞŠªí­Ë•½q¹ïŠ?»£®á“WHÁho³Ý©*¹ù£j?U»Á”m|ÝQûvªJ.>8ze°eǨÂ#E—»Qw¾‹òßÞ¥b¿ŽQA¡Ej±#½þѯ+5Õ;uÕ¨ õ¼’xxü’uµCéÙ÷;ø_{Äs·Ý$·¸BÇ¿w´X_µ"³þ¯üðC>üðC¹rÕ̶ªÙ‹Z­®UòСCåäd£ÑÈòåËùûßÿÎÃ?Ì„ ,ÌU'//åË—3uêTÞzë-vìØañ:׳gOFŒaѦj¥ggçz–»zr‚º ¯KÛ««óÔe6Íüü|‹JI¶&z¸úñW­d¯sÕ233EÕ2AAAh ª5æ÷Äk1ÇPÛïÓfqqqDGGS^^ή]»6líÚµ³{ŒYYY¼÷Þ{ôë×Ïê»fc±×sT×¾/{™9s&Ó¦M³úW]õ䘘”J%ùùùœ:uÊj}yy9Û¶m°˜ Îñü¶jÕŠà`ÓàÜÏ?ÿœÍ›7“““Cee%eee\¸p¡V}`•••ìÙ³‡·Þz‹_|‘uëÖQ^^Npp0O=õ”\AØÌÜ×àââÒà¾Àú^¿um›ŸŸ€ŸŸ_cn[SÿpÕÁUûbìy®ê£²²’ôôt‡$4s²|uƒ1µZ-?þ8:ŽE‹‰$I:t€ÔÔT.]ºd÷ë?--'Ÿ|’””»î·.z÷îV«%==… Ú=A¹¡¿ uêÔI¾m+9<11Ñ¢/±ê`SÁDrŸEÖÉÉÆ0–]»½ç\ëA–WsþÿìÝwxTUúÀñï”LzO„,‚ôJBhÒA\ òCQ°»ŠŠ(º°«²º²®àZÖÞ‚RA¤w‘Þ[ ©“d2åþþ¸Ìd&™Id¾ŸçáaæÞ{î937sïÜ3ç=/„Ü^“ÆAØSj@«7ëÕªV½-OÍ‚ãÌ\þk@9¡÷«™ƒ)E¥ÿ\F«Ú\×9þ•9½Öéûì+ޝËûPƒS„_'uà°»àdgæj¦#Dº Nv¡…°Ç!Ð51$ú$uyMùâøÖ¶Í¾ú,Ô´Þ:§Ð‡!ðZ×Ŧ21x†ežw(}¬˜Ô¬P¢úzõê¨ßãW¬Xá“6¬_¿ž7Å]wÝU¥2«W¯`ìØ±'¢AÑhðï÷ú¶®';K™€c]³ž®Ï”-&,gv”Y߉ [ßq$ìÌzþJ‘ëxBÛ…Ê/ þ½p "öF½U0`2šFå—ý{¹àвüÚÇÐãrúb'Ä•!88ØÑב‘áõý_{­zþ\µj•cÌ”½?ºOŸ>5Nêaÿ ¢iÓ¦ÄÇÇ;–Ûû¹Ìf3Ë—/w´A«Õ2pà@öíÛÇÉ“'±X,^ïïñ†M›61iÒ$n¼ñFFÍË/¿Lqq1¡¡¡üë_ÿ*·ý¡C‡hß¾=íÛ·ç±Çs,ïÞ½»c¹ýß„ ÜÖ9{öl:wîÌ}÷ÝçXöé§ŸÒ£G¦L™¨ã ëê·Ñ0…?]>8¹,ëyµ©\ÙÞï×öÞ¹Ny¸ÿõU½rß}0¡\ú‡ó˜ZÅæXîòÏê:!pm¾?kôUëVŠó°åyˆóq7Ø)Z¾ÕÕ¥ëœ_¯¥bc4OER¦SÕ¹^g6«Û÷Åi¬¸VGà¨WÊ'»Ö«ÅÀdüÚõ¼BˆËÊe;}Rt8’øéˆûŒ}Z4á«]‡Øp"sù…4 -Í’üÃMvÍi IDATÒε ½[Tò«"йI4#Ú%²dß1æï9Ä}©HŒ  È)@¹¢@c«Ó ç æõÇK•Öj4èu.åÌ6f«Z6=¿ãÙy´ˆ «´Ý¾´èã<¾û"ßëû½þúëiÛ¶­ãùñãÇ™2eJƒ9kãÝwß­ÒvÎŒGŽñJÝ|òÉ'üôÓO¼óÎ;„††ríµ×òå—_ºÝÞypNppp¥3íþöÛo¤¤¤Ð­[7üýý\Vêš "(ÈsÆtojÑ¢¡¡¡?~œüüª}t: µ(vôèQ6lØ@ïÞ½¸úê«Yºt)çιÏ<_];–þè£( %%%.ëu:#ãITT7&==½ÒýÆÇÇ» ޽xñ"‡©çrƒ¡ô殢@×úÈ ¾ö× pêÔ)¯ì3++‹o¿ý–­[·2mÚ4‚‚‚èÝ»·K¿‹=øÛž!ÕSÀxUÔäó[“²GŽ¡cÇŽ4oÞœˆˆrrrª\½lÓ¦M‰ŠŠr™œÍÎ>‘ Édr9Þ|¯jÊjµrîÜ9âââêäï¾>5j¤/Û7fwÇwÇœ9s8{ö,Íš5+·}AAAd×ÉÊÊbòäÉüóŸÿtù¥¾„……ñðÃ3kÖ,^~ùeÆŒãÕýëõúr“83Ž åZ­–ÐÐPBCC믾újGvù¥K—râÄ Çijo½õ–ãqãÆiݺlŠ`W»ví"33“®]»V8yÀ•$èf×A–%Û ÷E°\:å4úÞ}€0€Šš­Ô®xšÉÄzüÚ\Ày)n?ø0Î¥Äí®(ø —€6B&@À¥îa? VËÖE½¦-`þl¹€IÍ ¬k꾌5rþv)¸õ¢È­; È>ï¬F,iÞWZ.ÃiÜV£… K¸T÷&¸è!CL]½^_¨Îñu~¯üZCÌçÕ¨H«f&rB/Ù…óÕc¦©ÇׯUù÷(h:¹–ˬÔcöDé~ÃâŸJ÷ü¸L5_¸èR–e  €Pפ[.|u|kÓfðÍg¡6õzSþ¡p¡ú÷x=„>¤Ö : ŠV—Æx–ü¦R×^úzíß ¿.Ý—_—ÒÇ%ÛÞg÷raŸ$æÌ™3ŽI€jêàÁƒn—oÚ´‰ÿû¿ÿ«°ìo¼A¯^½˜8q"}ôQ¥÷·³fÍ"%%…V­Zñúë¯3räHÞÿý*M–í­6 á‰é—71ïY:~Fàßç!¸4‰W@ÿG)8¸ lêÉÎzî7”â<4êÉNß" óÎùŽ}éâK'È·œÚ§“FKÀð +½x[ÏîÆ¼ók¬ç÷ƒ¹ AèbZ¡XËGÞØòÎQüýt¬ç¢f¡”¢ ŽÅÐóvüºÞz© ú¶C±f8]jY¯3óžE”ìœ(ø§Þ¾õ`u…Þ¿ÖC(Ù^šaL×<}›Òq–Ãk0ýò&Jþy´qmò Úhõœfè9ž’ísÁ*!êËÍ7ß ¨}^ö ÇžÔäú;t¨úeØ>Ñ%¨ãŸÒÓÓiܸ1}ûöåǬv»Ô4mÚ”³gÕ+{¿†Åbaýúõäçç3dÈ6oÞLdd$ÿûŸš†Ôl6XáXS_|ßX»v-ß}÷ãùž={(((`ÆŒ´oßžvíÚ9’¨€:ÒÞ~{_¨}½UC{æÌŒF#«V­âÈ‘#$%%ñ믿’ÍÂ… ¹çž{hÛ¶-ÉÉÉŽñ‘âʦ1€ŸÒç%Û!÷õÞ?Ð'€¡{é=Ÿ³ÚÜï×öÞÙ[ªsÿë«zå¾»á+x»ôûoðÝ‹ÐF¨Ж›(úæ‘ Ëzûû³õäf¬éûPŠsÁR ~AhÛzüÎo=½Âù0p ~]ÕŽ'ó®¯)^õ2ÞǯÝ0´±WÁ¾eå^¯¶Qk‚ï¨yÆá’ ïcÞ»M@†Ô 诺ԩê¸×(=q®7ô±_÷:æ}ËÔìÒðë0Âå¾Ízv7¦_Þ@)¸€®Y Ÿ½ú; ÿ€Ç1úIîS„â pÙfP¸»gû ×ßÜ©•ãq‰ÕÊý߬fó© Ž]Ìãí {ørgéMnßMˆ ©ZÀâý“Ñ]ê$µÚÞüu·c]a”3(;•Ùx¢4xohëfì}bœË¿×FöwÙϦ“ÞŸYÍ[>=§N‚“úõëçò|Á‚> N®çYõÛ´iSíòö`OwNœ8ိhðs–çîÝ»WZç?þˆÅb!<<œ¿üå/ètºJË4d!!!õœÜ¹sg† Bjj*£Fªò º¦M›âççÔ.@`Þ¼yŽu:£G®Õþœ9g’ؼy3wÝu—Ë¿7ÞxÃeûŠ2I„‡‡Ó¬Y3†ÎóÏ?ï’)éÛo¿utò9¿‡U P¶¿—ÞÔ¨Q#î¼óNǾ›7oθqãÉYll¬#0±,{ß]]d×€ú=¾Î™z[´hQíò݇Ÿ={£ÑP.óï‰'A¸#GޤU«VåÊWUu?¿5-»iÓ&l6Z­–±cÇVØVQÙn¸¡ÜúøøxG6¸Í›7cµ–Žôñæ{U6›ôôôß×_‘:8Î?{÷î-·¾yóæÜtÓMœ9s†¹sÕ:ûëuþ ­t‚ÑšÊÏÏçÉ'Ÿdûöíu²ÿŠäää0mÚ4"""ÈÏÏçµ×^«ÖßyezôèANNŽÇW_]šy ]»väää°råJDzo¼Ñq 2™LŒ9’õë×sòäI^zé%ÞyçǶcÆŒ©°í?þø#|ð‹-âßÿþ·ã\u¥ \úX)„ì§Kƒ“Õ…žËÝ\úØš9ÓÀr\ÝOÉÈy®t½6ü:”݃Sù °žU sžÇep£_™Ÿ˜½Y/@Þ,ÈŒŸ‚q|¢içýÛÍÆ -Ë15 Y1«Y–s_‹S?}RÅuV‡7^oàõjÀ©§ºòÉý¼ª:Ç·6úþO¥Ï‹„¬{ hXŽªÇÊrŠ~PŒ9ý$§Cöãêûk= … Àø¿ÒõÚuÀ«£Þ¾¥-§.ùSë,\\q›}u|kÓfÀ'ŸŸÖëÄ–£Öm½ ž/ŠJc&ÐÅ7çÁ´®ô©§z­k&'SÝÏ1uŲ·pßá 7ndÛ¶mDFFrË-·Tº}NN7Þx#_|ñV«•!C†ðÕW_±xñbFuÙõ—7¥(¥(¥à%›>Æü{éÉN‡.Áiü’bÃrôÇS]³ž¥¿-ÚÆ¥';k™lËú¤~h#J/Þ–ƒ?R8÷Ìû¾Ç–u[Þ9l™G0ïÿˡՔ§`Þ·[ÖQ”¢\°š±å¥xÕËØ2K/ Ú× Cíë-e=÷¶ó°?Hñ3ÛÚÆ®}]†.¥~[^:EKÿŠíâqs!ÖÓ;(^ö¬c½&0]“J¾È !jE£ÑAÇŽ™6mÓ¦M૯¾òÚ¤vöñgf³Ù‘ñØî—_ÔsèàÁƒÝ­”sçq¨ÎÊf³™U«VÑ©S'G@ñŠ+5@hY”ËZºt©ã±}bǺb—æ<},ouû›ÅeLKä†R–³ê½¨Ræƒ`üòÝäÌòvÿ•/Tëþ×WõÊ}÷ÍÛߟ‹š…é—7(Ù2‡’ó(Ùü Å+_Ä´úe÷l°Y±^SºÌ/P½:Pú;…&°n®¡¶ü l¹g±fü®»Ükx¯SÕ¯ÓŽÇŠ¹˜¢Ec=½[ÎiÌ»P²¥´cTƒ>±·»Ý!„¸Ì\¶”AÍÜ®QûΗÏÐ#¡ÃÚ4gÙ¥LÉ{Ò³óùòrÛùé´üuP*×Û<2”k[7sìwñïG™Ü¯+MÃC(¶”^¨­¶Š2(—®3]t.¿9¥7÷—ŸI½K×à¬Í§2Óå*·u|¿ÿ+~æ± ¯ÞЗám[x\_V‹Â‡ÿÊfËšºDïòüĉ¶l8>LFFqqq<øàƒøûû³sçNrssñóó#<<¼Â,/½ô‹…5kÖpàÀ²³³ÑëõÄÅÅqýõ×;‚üœ³‚–uòäIrrrˆˆˆàž{îA§ÓqôèQ4 Í›7'!!÷ßß±ý… øüóϹóÎ;6l]ºtaÉ’%œ:uŠ‹/b0hܸ1:uâ7ÞpÔÖЄ††Öëd{&WP³£4mÚÔe†AOìƒ4³³³]oÖDFF[¶l!55€>}ú0þ|233Ýn÷Ýw3aÂû{뭷ظq#QQQ.Yݽ®²ËÚ¶mËO?ýTn;€çž{ÎíòíÛ·;:/¡f”Ë”UÕ×[VãÆË7nÜØã~vïÞí˜TA§Ó1uêTŠŠŠ0hµÚ 'HHH ""‚Aƒ1hÐ ÛÙëqf6›y÷Ýwyê©§ím×®ÇÚ»vírÛ!®( Û¶ms¼†°°0ž~úi—m~ÿýw·?ÒW·ìÒ¥K¹úê«YK:uêD§N¨ŠŸþ™pÕUWUZöÓO?u9_yë½òEQ8vì˜Û,GB!„Bˆšûõ×_INN&<<œÇ{ŒeË–‘™™‰^¯'**Ê«ÁQž8g(½ÿþûùþûï1›Í4jÔˆ˜˜-Zä²ým·ÝFxx8ŽlŽ ;.\¸±cÇ’––ÆæÍ›]fö÷¦uëÖÃý÷ßÏ¿þõ¯: –ï£ôôtòóó åÏþ3:ŽÓ§O£ÑhhÒ¤ qqq,X° Î^CUíÞ½£ÑHpp0>ø ß|ó û÷ïÇd2çè‡ê4»q}ßS§N‘••Ett4·Ür ƒýû÷SPP€^¯¯´ßnÒ¤IX­V¶nÝÊñãÇÉËËC§ÓM¿~ý¸Ž;æRNQ>ÿüsžxâ üýý™>žÐÐP/ö=SÝÏoMË^¼x‘+VpÝu×Ñ¥Kž|òIV¯^ÍùóçÑjµDFFzü,\¼x‘•+W2tèPÒÒÒð÷÷gݺuѲeK†ŽN§Ãh4ºd ñö{U[Š¢pþüybccë|²Éàà`G_Ppp°cy@@€#XØb±”ËV7}útrrrعs'˜Íf"##éÑ££GF£Ñ`4]9ÚMš4 ½^Ï›o¾é°yüøqE¡k×®€Ú'ËŽ;êäu3mÚ4þú׿–›¶.åææÉ3Ï<ÃÔ©Syï½÷ª<™c}hÒ¤ >ú(/¿¬ Ú½{7}ûö-·»~β¶mÛæxl49pàݺU<ÊÎ98ßù±Édr<×étö{ûšÞi~ƒ’êÀª28ý\kË»”‘ÕY™?}¢:³2Š,§A)¶®Ì\˜uUo•iÔ̾úDÐÆ‚Fwià¤ÓКÏū˯7p(ø§y®£xšÁ§>Tv|kÃPfAþ;€­òrƒk tñ/—2j;)Z!÷:ÕÕUÍ~¤mTér“k¬AµÚ\_Ç·¶mvn[}~|^¯…K pDés¿jfv»¢8üR»ÁÐS}ÏýÚ¨½íd tÍyó»I÷îÝŠ;sž„º"o¾ù&ü1'Nä‹/*Ï’TXXÈßþö7Þ}÷]î¼óNnºé&:vìÈìÙ³¹ÿþû™4i’ãþ¤®Ú,DU˜û¿¥';]ãöXOnv<·ì__ûëÐø¢oÖ˱õèµAc(½w³s½èèþäzñ6­”*\¼]hÐ6j.:MH#ÐhQŠsQŠKÇï8·Á{õ–§”±åœF¥~ÑÑ»~ÑÑ5ëYú¤8C÷2~kÿ6*ë麻ÏâìÈ‘#n—/_¾œçŸ¾ÒòÕ½þ4FÃæÍ›ËMˆ¶víZn¹åÇ6J‰–Üq×( V¶÷g-_¾œÑ£G3räHNœ8Á\Ö‡††zìon(ß7rssýÖ±±±õRgCêõÏ„ì×Z}îß}­NìU´¬g<—õyÿU¨ìþ×WõÊ}÷•«¡|VL¥U^º·PLNQúºu¨ì^£ÆôtNÁÎÖ£kÕÉŸœ˜÷-ÇvŸã¹.!Ù5h[!Äeé²P5‹ò”ïÖy\ÿïëû’YXÌ–Sîotýõ:^½¡mbÝg~ôXoJ{G€²Õ¦ðɶ}LÔÓ%rE”]”/5o<™î²M§&å/ôñaÁÄ’iT!löðºìõ—T,j­fÇCU•˜Þžq‘ß6W¾q-”°VW™¼IQþõ¯ñ /¤I“ª\V«ÕÒ®];üýýéÑÃs@ý† øùçŸ+lÃÇÌã?îìé,//Ï%@àóÏ?Ç`0pÛm·Ïý÷ßïvß_ý5§OŸ®òkª/†ÐÐÐz°c4]f¼+((¨`k•=PjŸ=Ùîûï¿w(ët:®»î:>ûÌýä:®Â™“탳'ƒûåÌÌLrss“ÕÉZ¤( «V­bΜ9.¤ÎŸûŠ:몚A¹ª¯·¬'NPRRâò7å©£`ýúõôîÝ›äädDzÀÀ@—LÑž4mÚ´ÒmöíÛWn`)ÀÎ;ù÷¿ÿÍɇ~˜   ÆŽ[å²Z­–ÄÄD C¹>)g»wïv ´;~ü8o¼ñ'N$""‚ž={Ò³gÏrÛUt[ÏomË~ûí·„„„зo_¹ûî»=ŋIJJ ݺu+ YXXÈ[o½åÈØáÌ[ï•7؃”cbbªÝGTsçÎu;i¨sàé¦M›˜>}ºã¹V«%%%…ÀÀ@Fåv¿yyyüãÿ(7¡ß5×\CçÎY»v-[·nu,ÏÍÍeýúõôíÛ—3fð§?©™·Üõ÷y“Åbá…^à±ÇcذauZ—ýooÒ¤I¼ùæ›u6 `m¼ð ìÛ·%K–¸]ÌÂ… +œ´ÔLAο™Ø'™­ÈôéÓË]óæÌ™ãxÜ¡CxàJ÷å hœ~¾«N€ª&´¡¥ÏýZ—ÖôÄyûÊ(Nãµ5®ë²ÞÊ:CøtuÐhE¼5~Ùׯ·®x:¾µ¥+«¥¤L6ð h£pɈduóó©õjFñKÇV{ih€¶Ìœ¶¶¬*6ßßÚ´Ù®¾? ¾®·"Ö2gÎÁߦMê`tí¥Ÿ²ª¥ N_û¬§Ár²nÛy%³ÿNWÑ$ÓU•ŸŸ_«IÞ×®]ËÞ½{éСC† ©Ò˜€Ó§Oóâ‹/òÊ+¯p×]wñðÃÓ¦M¾üòKFŒQáäTµm³UaËq=Ùi‚\Ov–›PŠóШ';ýUƒÔå„nNû8-Ûõd§ uºx[K°eWï~Cß™€kÿ†6º² C™À…ZÖ[¥ÄésïWúEGã€Æ¿ôB®mÔÿFm*Ü—&à2øb'Ääý÷ßgæÌ™UÚ¶º×ß°fÍšrëÖ­[‡Õj%&&†öíÛ³wïÞ*ï\³ù:_²'›°¯]»–ÂÂB‚‚‚\Øû5*êÓkHß7 ˆŽŽ®Ò8>!¼!ç¯ý^齞.Bÿ¢þ+Ù Æ9êDgήÔþœÊî}U¯Üw_™Ô÷g签ܲúšÌÂÓ½Fmhƒ¢\î—l9å;FmyçÔ×{éuj¼-„§.ûå‘íyùçmœ/pŸ©7Ø gîÿ eÞ®C,Ø{”ƒ²)4[ˆ ¢O‹&ÜŸÚ‘Ä¨ŠƒÜéÞ´]ãcØyVÍB:÷a&÷KvÉ \Q€²Íæ ¬ÜT&@¹cœûoÚ›D³ú°z±>[À¹<#M‚Ýn[ß l¼1=‹Ã{Ëžª={öpï½÷rã7Ò¥Kbcc ¥°°¼¼<²³³9uê”Ëà$PdMŸ>¾}ûÒ¾}{¢¢¢GQ²³³9rä?ÿü3«W¯®tÖ»ï¿ÿžÜÜ\FMRRÁÁÁqäÈÖ¯__næ§qãÆŽ \oe?xð ‡vl0€ùóçc2™j¼Ï²ƒA=S9rÄ1266–èèh²²²8uê{öì¡iÓ¦£×ë)**"##ƒýû÷óÓO?qæLùéàj’A¹.Ž}nn.¯½ö·ß~;‘‘‘ìÚµ‹/¿üÒãöŠ¢ðÊ+¯Ð¿ÒÒÒˆ‹‹#""???JJJÈÏÏ'33“³gÏ–ëþõ×_ÉÌ̤W¯^´mÛ–FˆÅb!77—'N°aÃ6lØàñ³¿cÇ&MšDÿþýéÒ¥ Í›7'44???L&YYY=zÔí{nwþüy¦OŸÎM7ÝD§NÇh4ráÂvïÞͦM›¼VöàÁƒ<ñÄ\wÝu$''‡Á`Àh4RPPÀ… 8~ü¸ÛAÇyyy<ûì³ 0€¾}ûÒ¬Y3üýýÉÉÉaïÞ½|÷ÝwzôÆ{USV«•C‡Uy`B!„¢ú>ûì3:Dß¾}‰wÜ_Ùï5Nž<Éï¿ÿ^§m˜3gçÏŸ'%%…¨¨(Ìf3gÏže×®]Ž>NÇ-·Ü¨“^¹›LQ,XÀäÉ“iÔ¨ýúõ«pÒºÚP…9sæðÌ3Ïp×]wñöÛoW;ëBUyã­[·Ž‚‚HBB˜L&NŸ>ÍÎ;k”5¢.ì۷矞Áƒ;úûüüü0œ:uŠM›6±yóæ:ok}ßÇ3cÆ H›6mˆŒŒ$88˜ââb ÈËË#==½ÜñU…ÿþ÷¿$''Ó²eK EQòòò8}ú4[·neË–-Û}ðàAž}öYÒÒÒèܹ3 c±X(,,äìÙ³ìß¿­V[a U>¿Þ(kŸ`mÛ¶môïߟ–-[ŠÍf£  €ÌÌLŽ;ævp¡Ífã£>bÇŽôë×-Z`0ÈÊÊb÷îݬX±‚üüürå¼ý^yKff&V«Õ+Á!Þ¢( /½ô)))´mÛ–&Mš@aa!'OždëÖ­,Y²¤\yHH÷ÝwEEE¼ýöÛåö;{ölE!%%£ÑÈ»ï¾[gçug6›Ù³g“ŸŸÏ­·ÞZçõÙ©0cÆ &L˜PçuV—ŸŸ‹/fΜ9|ôÑGìÙ³‡ÂÂBâãã¹îºë˜:uªc¢ÑŠŒ=šœœ233“o\é3jvÙK]ôÚjÌ/ ©AW¾R±ÌΧ,§ñ]u^oôÍ êM5K}ñåë¥ÌeRãÍ‘ ޝWÙÿ¾½Eƒk[§åΪqÌ|v|kÑfðÍgÁ—õVF©ì'\ ¯† ÑêÓ€; ÝK7)®ikàøÐþ]¸lVÂúöá‡2{ölÆÏ[o½U­²&“‰wß}—­[·2g΢¢¢xઔÉQˆ:e©ädg³`9¸ ¿Î7 o5~| ÝŸJOve³'«J/JŠÕ\­,ÆÚÈfÞü_4~5¹0Ô¼ÞJ¹ô58]tµ5¸ð×Ã}¼TIIIŽÇ¯½ö#FŒ`øðá¼öÚk¹Û\Sz½ž´´4¦M›Æ´iåc% IDATÓ|8.ÛÙ˜ërÒAo²JKfcQ_,'àÂÿAÈ]thœ†ÿºªÿL¿Àŧ€K9Ó®ÔþœJïëˆÜwÿAÉ÷çò<ÝkÔ5Æu6Àð»½BˆÚkðÊoÝ8 Âõ~:-›®xÀ„V£á¶®­¹­k%Ó9™Ø³={zÎÆ°püõå–]sÕŸ8öô•îÿ®í¸«‡k6Ñ™Ãz3sXïJË~xó`ëv?^õÌÞ–—mã?Ogrê¨Ùgm¨ž²—õÌ3Ïx\wþüyÞ}÷ÝjÕ«( ;wîdçÎÕ*çÉúõëY¿¾zwHÇŽãõ×_¯v]ÕɈâMZ­–°°0ôzßœêrssY¸paµÊ´hÑÀ1а*–-[ƲeË*Üæoû›Ûå§NªÑñyï½÷xï½÷*Ýîßÿþ·Ûå¿ýö¿ýö[µëݺuk•Ú»|ùr–/_^nyM_¯;Û·ogûöíUÞÞf³±fÍ·3WVæàÁƒ¿Þ,»oß>öíÛWíº@„mÇŽ5*ë÷Ê›²³³±ÙlUÊ>[]7ÜpCµË(Šâ˜0°: “O¸“ŸŸÏŒ3ªÝoyÿý÷ÉÏϯVÆîÚ?~<³gÏfÏž=õVç?þX¥í4 wÞy'wÞYùo~žÄÅÅ1uêÔj•™5kVëk°¦ƒ.^}ê×5X¹ ã¸lj€³}ÀeÑrÈqÿÓ†Wùª^€ ›œ#È› E+Á–£f¢Žx^Y¥Á¹Þz½'U¿Œ­ÌüÌ=¡XÊ´AWñö6§Ÿê4Á ÿSÕ²(Û.⬯kR~ÝŸÊ”¹péÿl×åú„ÊësìÃGÇ·6mß|¼Y¯£JƒšMÚz¡êeÜÑÆº>·¹™#¼pQé@im¸ÚN§LNÅ«j׆?:ûoÀZ­–ðÝwßù´=K—.åÉ'Ÿ¤W¯^Uþ.SÖ¶mÛX¸p!cÇŽ¥W¯^^n¡Õ§ q=Ù)ÅåOvæ=‹ÊšÀpôW t P>Xþd§KOÂC0ÚÈfå²,{â×åæÒàdEÁ´f6æ+PŠrÐèý 6C ”v£6õÖ”b*«tê…ß¼o9ÅßO¯Ó:…U3}útRRRhÚ´)>ø ³gÏöêþ{öìIppÕõï߿ڜ؃ŸÏ;ÇéÓ¥Yí”íÊ€Û$ö媶ñràU¶±ï^¯í¢ësCÅs…×Mò\ŸëÊsQRf¾›Ð©Òà]¥ÌNsŒôMë6A£ÊÔui^[Žèï({uù²ž+öÍñ­U›ñÑgÁ‹õ¸Ÿ Ñ÷ó¹û ôª èïúÜr¸ü6æ½`všÛ8ìÑÒ¬[¶,(ÙUóúìÚµË8rß}÷¡ÓU2›A³Z­|òÉ'Œ7®ÆûÉËSO‚—K6CqeÓ']íòÜ–YþdgMß‹íBéÉοÿ£h êÉN1fa=S~b:K™eþ}ªxñ´¥[Î)J¶‰bÌ›¥¤ÅìùÂP›zkNÁz®ô¯Oê‡6¼ž¾Ø !*”ŸŸÏË/¿ À=÷ÜCBB5gð©ÄÕW«çÐ… Òºuk·ÿî¸ãºuëæ,®ŠèèhÇ„~e'±´ï§¤¤¤Â}Ø3×e€òµ×^['ï­'ÎY°«ó~:{饗˜0aBµ'…4™ÔT¯AAÕ¸É ›Sä†RÅ¿@γpþF°:Åèôu*ãÅûýêÞ;×eNUîíä¾[¸e)ýƒÖ†VÞ1ÚP¾?ÛrNQ´ð1Š>FɆ÷«\N)víÜlßÿ-%X3J;FõIýÐø¹^Ãü:ºvŒº»·Bqù‘eQkg›ù×c8ÖRùÆBÔNGDD„Ï(¬®ØØXGÇÜñãÇ}Û!D½(**bÿþýŽÎd!„B!„hè6mÚÄúõë¹ë®»ða$.Wr|EC–ŸŸÏ… $kHûî»ïxñÅÙn¼¥S§N\wÝu <ØeyË–-¹îºë¸îºëˆ‹‹ójÂ7Œópɘr'Äý ×@ì<Іy.[ømécMÄüBî¿Nê C¿vjF™ð§ÔÇÞâ«z•‚ÒǺxðïCâX¬¥õ-!d"蛫ûôë¡qm·¯^¯õ(ÆÒç#!pØ¥v^Uš¨.Ù²\ß÷ ÑàŸ¦¾nC2„> :§,:Åk\³(\Ñï@ൠo¡n«o†n|;à4orá¢ÒÇš`ˆ|ü:ªY˜ƒoWÖÚYÏCñ§ztS¶h£*€ë«ã[›6ûê³à­zuñ6¹t2¿ÖêÀåªòO¿¶ k ÃÕv;ÚhÓ÷å :µ¡qéãâÕT)s½ðÌjµòÁбcG¦OŸî1Sž¶ž²}õÕW’˜˜èq›Š‚V ýû«£ð3! Q_ô-z¡‹k‹6¬1~í‡cHu:ÙYLXO¸?Ù•ìZàx¬ +=ÙY­*“-íÒòÃkPŒ¥o}›kó.ú¶×¢j&¤ÚÈfèºaèqhK/ÞŠ©4= 6<}bÕ/ µ©·6Ì{;k Á›ƒ!í^tM:¡ k‚.®=úÖCüº8Ì#ÄØ¢E‹Ø·oþþþLž<Ù«û¶Oð¶{÷n¬V«Û;wîÄf³¡ÓéèÕ«W•öëïïÏ+¯¼BHH&“‰÷ßw ˜²ר,@Ùža¹®”ï»ï>Þ~ûmžyæ-ZDDDDÔãÌ9ëq}O°—ž®ÎÕ¤Iš4©ED¦hô÷„Oÿ¾j¿‚Æ Þ¿ëÎ]²en5¼u¿_Ý{goöçÔôþWî»…'¶¼Òó´Ñ-1¤NDÕmx<º&ðïûtq¥Зû÷gŘ¥f‚¾Ä¯Óhô-z£ ‹G—Œ¿GЄÄV°‡úaÞSÚ1ª10êßèštDñ' =îÀÐí6Çz¥à<–c¿ú¢™B!¼ìòJ-*œcûKxí¯Yóå›¶hôz=ááá lÈš7o¨³ÞÙ;–„W.£ÑÈ¡C‡¼>ØS!„B!êÚW_}Å3Ï<ÃÍ7ßÌgŸ}æëæ/“ã+2£ÑˆÍf“@Ö:öóÏ?c4y饗|Ýq2ïƒü·ÕÁŒv=UúUºh]†žêsm8„Þ¯þ+WÏQ× µµá«zMÔA‘ ¾GQÿQ³¶ÚrØY%[Õ ½v¡^ÊôëÄz®´Ý¾z½X èú³úTã3¼´ïªR xméû®‚¨×]7)Ù¦¾5“QÎ? êUƒ ÝÔî˜6–fÝ)\¢Ú5tRŸû§ªÿÜÉ{—AÈŸBàÐFT^¶,_ßÚ´ÙWŸoÕ«oF¹ãº?U­,¨È†¸_WøÚ&wоS__Ù‰ —U½îËMhh(6›ç±)……….¿»ùùùèxnC@X˜úÆÙl6 (ëÓO?eèС¤¦¦2~üx’““ùüóÏÙ¿?†¦M›’ššJ¯^½6l˜ÇItªÛfOòóóùæ›oÙËÒëõ¬^½š;w²bÅ ~ÿýwrss ¦U«VL˜0víÔAÙ ,p»o·YgúÖCзv²+Ùõ ŠÙýÉÎòûw(}Bàz²3ÿîádg)¡ø‡ÞøШ'g]B7Ü_¼-Ç78²7[oįýõê ­žÀ?¿†RbD)ÎC£Ñ¡ ®àÂP‹zküo~F k¦^ø5áø÷¾z—¿ð[³ŽaÍø½Öu !ªFQÞ~ûm^ýuFŽÉûï¿Ï¾}ž¿|WõúM›6m5@¹¢í>LëÖ­éÛ·/+W®tY¯ÕjIHHÀd2A÷îÝ™8q"IIIL›6­ÜøE{Àqeß씿‡•U›ï#FŒp<ŽŒŒ¤OŸ>|÷Ýw¶©¶Ž=JVVÑÑÑL:NǸꪫhÙ²%3gά“º·oߨÇì•W^áÍ7ßÄf³Ñ¬Y3xõÕWë¤^Q7üA£N˜4ºâmM›\Ÿ{ë~¿º÷ÎÞìÏ©éý¯Üw O¬§¶¢O*M‰íß÷!üû>ä²-ïœ#£ïåÿýYÁrägÇ}‹&(ŠÀ›\;7­§¶a)¸à‹Æ9˜û¿7 ‹ï €¾y*úæî; ‹š 6écBˆ+(‹Z™õT&¦"ßd+7nœKjqq±OÚ!–Ë58 E‹œ£¯º©Ù‡}%ÿ]5k²6Òýz}K5pÕÎô+\|B}¿<•±ó»ª4@+dO¨Yjæd·ljp²söaÛEÈ~"_­8븧}úâøÖ¦Í¾ú,x«^óA5ã’Æßi™Ưš÷Bþ;ž×+EP¸Bî*]f9æ=µ¯»¡Ú¶m[…ë}ôQ–.]êx>vìXž}öÙrÛM™2…)S¦M=Êmc³Ù¸÷Þ{yíµ×8p :uòtÒ¡C~ûí7¯´¹"Ÿ}ö™Çåäädbcc¹æšk¸æšk<î㫯¾â믿®°o¶YˆÊXÓ÷R²þmësæÝ 0¤ÜåXfË<‚õœç“娝-šLÀuÏ¢ ¬øâ­‹mí6ïÿ}Û¡è[–^4†`4†ªe­i½µ¢Ø(úöI†>‹þªŠ/üºèD̵¯QQ Ë–-ãÈ‘#$%%ñè£òÀxܶª×ß´´44 ‹¥Ò~Û;vкukz÷î]n]pp0?ÿüs¹å………LŸ>Å‹»,×ét jêÒÊ”«’A¹6ß7ÒÓÓéСƒã¹svãºb³Ù˜={6/¾ø"‘‘‘¼øâ‹.ë³³³ë,@ùÀüøã 2„^½z¹dÄÎÎΖåËŒKÿLJv€ñó2 ½t¿_í~$ê¾?§²û_¹ïž˜÷,¯ë-h#<ÿAk£þ ¯€ïÏ%¿¾‹>±·Ç{mt"÷qFb›•¢ÅS=]£Š ÓšW±üÑýz!„—:P¾æªõu]…B8?~Ü×M¨1ð%„B!„BˆËÅ™3gxä‘G|Ý QGäøŠ†îr\uÕU¾n‚¨CsçέÓý›6¸yÚ:e+QÊ'¬D)€ì§À ׫Ùguqj³R¬fp)ÙE+Ë—­ ŸÔkS_ƒF@À5 Om´:ØR)[X3ÀrLÍnã±í…u„Þ†ÔKíÖ«Y`­™j»ËÀúê}¶å@æ]rø÷}SÀ”\°fƒí¼š¡§xwëuf= ™wBè}`HQ³ä*ùêrÓ&(^U¾Œiœ©föï­"k#@cP«Z3Ô±–ãe^ïEȼ‚Fª™zõI—ö³ÔcZð¹S@s%»áÂÍ|ø÷Qÿ>ð%ly—²€âò1>;¾5n³¯> ^ª×v²Ÿ†°ÇA£žûòߨúûV´´¡à×4Á`=£f§2~ªfñ®Hñ ×Ò… «^¯¨œÑhäž{îaàÀüùϦ[·nDGGc±XHOOgÇŽ,Z´Ècp²·>|˜ 6––VnÝ–-[6l7Üp)))´lÙ’°°0¬V+ìÚµ‹¯¿þšuëêð+M`$èýª]N)ÌQƒrkXkù“—eÿàŠ®q;4~AØrÏbÞÿ%[瀥â“yÿ.ÊæÝg°]‡ñýз>±7ÚØÖh#Ðè (æ"”ü ¬é¿c»xÌ©ñ6ŠMƯÃôm®E‘€&8ÞÅRŒR”ƒ’—Žíâq,'Ý_jTo-)¦о}]B2~íG ‹ï„&4_ Zg^:Ö3;0(½ð7¤¿ !®d6›·ß~›W^y…!C†Ð¶m[öïß_«}Úƒ8€ÉdªpÛ]»v1fÌZ¶lI\\8p€_ý•–-[^¯';;›C‡ñË/¿0oÞÙ¯û¶!ĕįµûAÒJ!d?­þ/„Î çÞ]ó²'6{±%U§‹mã>8Ù\HÑ’©(%r²ó†ËñoC!„¢®É}·B!DÍië³²ääd~øá–.]êX6fÌ~øáfÏž]ŸM¡uëÖ|üñÇÌ;—”””z+ëÉ_|ÁË/¿L÷îݽ²?o‘ϯB!„B!„B!„¨ˆñÿ6˜6ƒå(E ”€õ<˜ÖAî? kØ2}ÝR!„¸ü”ì[.`ÛE(Z™w€ù7_·L!¼ÇzzJQ.ج(…1ï[Ná§·c='';!„BQ·ä¾[!„¢f¼’A¹ªì–m6[¹e’}YøÊøñã‰àÞ{ïeóæªÏôX›²—ùü !„B!„B!„B\Ùn»í¶Úï¤øÅú àϵ¯B\^&NœHRR’¯›!êÈwÜÁ¯¿þZïõ~ûí·5.;räH/¶¤z,Gà\Ïê—3û¼ß!„¨ ¶Ì#äÏêQírÖŒß)üêÞ:h‘B!„¨o5½ÿõU½rß-„¢!èÚµk­Ê¿ð „„„8žÏœ9“ôôôÚ6K\æv²³Îë¨×e‹Å€Ùlv,³?.))q[¦k×®L˜0&Mš‚N§£¤¤„¼¼<Ž9ºuëX½zµcße <˜§žzªÒ¶mÚ´‰¿ÿýï×4ˆ©S§PPPÀ˜1c<Ö™œœÌ˜1cøÓŸþDhh(:Žüü|Ž?ζmÛX¶lëzã7hݺ5+V¬`Ö¬Y.ë"##ùòË/Ñh4Ìœ9“Ÿ~ú©N^ï‰Õjuû¸®Ë^njòùõ†æÍ›3bĺtéBãÆ±Ùlœ={–Í›7³`Áòòò<–½úê«ùë_ÿZáþ_xá~ùÅÓ(W#FŒà‘Gà?ÿùË–-+·ógpøðá—Íß…F£aРA\wÝu´lÙ’€€²³³Ù½{7óçÏçØ±cÕÚ_UÞ+NÇõ×_ϵ×^KBBééé¬_¿ž¯¿þ𢢢*×Ù¹sgRSSéܹ3ÑÑÑdggó—¿ü¥Â2-[¶äú믧[·nÄÄÄ`µZ9sæ [·nåûï¿'##£Êõ !„B!„B!„BˆòæÌ™Ã­·ÞJ‡|ÝQ>üðC{ì1~øá_7E!„B!„B!„¸ìh4š5kVëý$$$êxn0j½O!ª¢^”F#………ŽeöÇžv›6mJÛ¶m]– bbbˆ‰‰!55•Q£F1mÚ4rrrê¨å0dÈL&!!!¤¤¤xœ¸E‹$''»,‹ŒŒ$22’äädÆÇìÙ³Y»v­Ûò±±±¤¦¦¢Õj]2Ö¦¥¥¡ÑhhÔ¨Q­_—€ÿýïÄÄÄÀ»ï¾[oe/75ùüÖ†F£aâĉÜ|óÍhµZ—uIII$%%qÍ5×ðøãsþüy·û ôZ{ ÄÃ?ìµý5$z½žéÓ§“––æ²<66–ÁƒsõÕW3kÖ,V¯^]¥ýUõ½ dÆŒtîÜÙeybb"‰‰‰ <˜)S¦™™Yá~ÚµkÇ<àöZá‰F£a„ Üzë­Žsª]«V­hÕªþóŸ¹í¶ÛûB!„B!„B!„h˜üýý1™L¾n†ðÀb±0wî\FM÷îÝ}Ýáeƒ7ÞxƒiÓ¦1þ|_7G!„B!„B!„¸lhµZZ´hAXX˜¯›"þ`4¢Ñhoì«^”í™N3žº[æÉ¸qã°Z­øûûÇ5×\Ã!ChÕªS§Nå™gž©°ü-·ÜâìëÌS6d€¨¨(’““ÉÉÉaéÒ¥Ü~ûí 4Èc€²]QQ÷ß? (wîܙѣGÍ´iÓÐjµ¬Y³Æ¥Œ^¯'""€ððpÚ·oÏo¿ýæXß«W/Çc{ ³·_ïÍÑ£G+ͲZe/7µýüVW£F5jZ­–-[¶°råJΜ9CDD#FŒ --˜˜zè!ž{î9·û `÷îÝ<ÿüón·)..®´-;vä‰'žÔLÙ:®f/ªºýöÛIKKÃf³1oÞ<–/_ŽÑh¤mÛ¶<ðÀ4mڔɓ'³gÏ.\¸Pᾪó^=øàƒŽàä/¿ü’eË–¡( ©©©Ü}÷Ý4iÒ„gžy†)S¦ (î¯yC‡eÒ¤IèõzΜ9ÃO?ýÄÞ½{9wîœK0½»ºGÀ‘#GX¼x1GE£Ñ””Ä€Ðjµœ,„B!„B!„B\ÆÏû,;v$99™íÛ·—ÛGÏž=yüñDZZ­ü÷¿ÿeÉ’%™¥¤¤8‚“üñGfÏžír®>žcÇŽ¹L–]–/_NQQ‘ãw¢ú0þ|öîÝKjj*Æ «·zÿˆžyæ"""xå•W|Ý!„B!„B!„¢ÁÒëõ$%%ÕkÜJÏž=™2e ›7oæ?ÿùÄ ­V«):N©J\VYõšAÙf³‘™™Izzºc™ýñùóçk´ÏÅ‹sÇwЮ]» ”kjðàÁüòË/¤§§søðaZµjEŸ>}X±bEµöUXXÈ?ÿùO>üðC¹é¦›xÿý÷룣£ضmÑÑѤ¥¥ñÞ{ïêŃ5kÖ˜˜èض¡¸ãŽ;HNN&&&†°°0üüüÈÉÉá÷ßgÁ‚ìÛ·ÏcÙÀÀ@FEZZ RTTD^^çÎcçÎFúûû3`ÀúôéCRR˜Ífòòò8zô(›6mbÙ²eŽío¼ñFxàrû9qâ÷Ýw_…¯³6eíôz=£FbРA$$$ Ñh8uê«W¯F£ÑTZ¾OŸ>\ýõ´nÝΟ?ÏÆ™?>999–­î{eWŸßʬZµÊãº5kÖššŠN§#&&†Ó§O—Û&$$€üüüÕ¯Ñhxúé§‰ŠŠbþüù,Y²„ñãÇ×h_ UTT¡¡¡€ø]Vff&¤sçÎfm¯î{Õ­[7Çßúâŋ˭߰aYYYDGGÓ¿ÿrÊ<õÔSh4fÍšÅêÕ««ôzÇ5ãôéÓ¼úê«¿TUyŸB!„B!„B!„ð£G²eËÆŒÃÿû_JJJ|ݤmøðá——ç“úþùgŠŠŠ9rd•~­­_|‘üü|7n\ã}ìÞ½›G}”ÂÂBfΜÉÀ½ØÂ+˃>HDDÿûß%ƒB!„B!„BQ†Á` )) ÿz«³W¯^Lž<NGïÞ½$HYx¶¾+œ5kK–,q<ÏËËcÆŒnãª"??“ÉP'YMãããILL$;;›={öj 2àø@VWVVkÖ¬ _¿~.ë"""0™Llذøøxš7o@ZZ þ` ^£úëJJJ :t ..ŽÀÀ@ôz=111ôïߟW_}•¡C‡º-Æë¯¿Î„ hÛ¶-!!!èt:BBBˆ§{÷îtëÖÍc½mÛ¶å½÷Þcòäɤ¦¦ƒ^¯'00¸¸8ÒÒÒèܹs]½ìj â•W^á¾ûî£U«VàïïO«V­¸ï¾ûÐë=Ï Óé˜:u*ÿûßéÞ½;¡¡¡ ¸ùæ›ùàƒhß¾½Çòµ}¯¼ýù­ çàQû9 ,ûg$;;»FuŒ;–äädvïÞÍG}T£}4tÎYà›6mêv›ÈÈH.\¸àq?Õ}¯ì,»=>Š¢°sçNZ·n]ný 7Ü@XX;wî¬Vpr³fÍû›7o‹¥Êe…B!Äÿ·wçáQ•wÇïY’É„LÈF »,±l²)ˆ EŠ(T- Ê&Z[[¬ÚW^•¬—Z—Ú… ‚ˆ«•ŠVEdÙ7Ù×@À$²L–™9ïéL3d! “ôûñÊÅäœó,s˜L¸|æ~~\¹>ÿüsI%› ãÊ·iÓ&-^¼øªùàË«¯¾ª””={VÏ?ÿ|µÛ{<¥¤¤Ô(°{9më˨Q£ôꫯVºö ÀMHHˆÚ´iS§áän¸ÁN®ìØ™ÉdRãÆëdcÝï£:_ òÎJ[·n]û³Ûí¾ÊsçÎÕ¸ŸŠôîÝ[’´qãFyKTóÍ7ºï¾ûÔµkWÙl¶ ѕپ}»¬¸¸8ÅÆÆú*Ðz•n·[k×®Õ Aƒtà 7(%%E=zôÐÑ£GuæÌ¹\®Z d_Ž ÈåréÌ™3ÊËË“ÕjUÛ¶muÿý÷+11Q¿üå/µaÆ2;qßsÏ=JJJRqq±æÍ›§M›6);;[AAAЉ‰Q›6m*¬dÚ¢E =ÿüó²Ûíòx(±|ùrååå©U«VºãŽ;Ô²eË ÛÞwß}ºùæ›%I_ýµ>ûì3]¸pA:tИ1c¡gžyF>ø Îž=ë×¶¦÷ª´@ÿü^ïÏfJJJ…ÁYo࿨¨HÁÁÁÕÚ-¿E‹º÷Þ{•­™3g^U þÕát:uèÐ!µiÓF£FÒš5ktáÂßù.]º(11Q.—Ë·±ÂÅjr¯¼ï›!!! QAAA™k233%©Üjñ·Ür‹¤’ðùôéÓÕ²eK5jÔHùùùÚ¿¿–.]Znp¾S§N’JÐõõÚW\\¬E‹iòäÉêÕ«—6nÜXßSÂ%ìÞ½[º÷Þ{TßÓ©Té mu?¬³zõj=ôÐCr:Ú½{·BCCë¤m}2dˆ‡oþü…††ªeË–uº¹g«V­4tèP?~\5RÆ åv»uüøqÅÄÄhذaúðÃël>W¢Î;ë·¿ý­l6›î½÷ÞróM¨\•^Ñ{÷îURR’‘››[Ûó©6oU^Çã«p\‘O?ý´Üã»víÒã?^î9oróæÍ¾cÇŽÓÙ³g­®]»jÆ Õž÷É“'}K”½J—Ë¥mÛ¶)//O7ÜpƒvïÞ­ˆˆ}üñÇ’JÌ6›­ÒÐeMžï娴iS™c6lÐÉ“'5{öl«[·neª&''K’V¬X¡>øÀïÜÙ³g+ Ìþú׿–ÝnWaa¡þ÷ÿW{öì)sÍÖ­[Ëóx<~÷­:;s_NÛ-Z¨oß¾’¤%K–hΜ9¾sGŽÑW_}¥¥K—–ûË&66VwÝu—$é‹/¾ÐË/¿ì×vçÎúë_ÿ*‡Ã¡Ñ£GëÕW_õk_Ó{u%ºöÚkõãÿX’4wîÜ ¯‹‰‰‘$ÝÿýºÿþûuáÂ=zTkÖ¬Ñ_|Qá/ “ɤ)S¦ÈjµjÖ¬Y¾ ì÷Õ[o½¥çŸ^qqqzíµ×4wî\mܸQ;wÖÔ©S%Io¾ù¦ï}ª´šÞ«#GŽø÷îÝ[_}õU™k¼Aé‹w†iذ¡%Iýû÷÷;¡ž={ªgÏžz÷Ýwµ`Á¿ó ’¤ôôt¿ 6¸ú}÷ÝwZºt©† ¦S§NéÔ©Sõ=%\¡C‡ôöÛokܸq ©ïéTè‘GÑ™3gTPP §žzªZmóòòjнœ¶W‚¾}ûjþüùºÿþûËldÀ…ÃáP‹-d6›ëtÜ#GŽè‰'ž$5J?ûÙÏ”ŸŸ¯ßþö·u:+Yéâ¹(qîÜ9ÃápTùúº}U€Éd’ÃáP›6m4iÒ$Mœ8QRI÷»ï¾ èX5R»ví|aáÒ¼AÎ^½zը\<ßãÒaÞ Ê.—K.—K7nT›6mtÛm·I’Ö¯_/©dpIW\åòœ:uÊlŒ/s>;;[’Ô®]»j=Ÿ–-[ú*¿ûî»ån¯4ýúõ“TRÑwáÂ…eλÝn_¥î‹ 0@f³Y.—«LèR*©$üå—_J’n¾ùf¿óÕx¯*¯iÓ¦Éd2iíÚµ¾Ÿ‰òœ:uJ{÷îÕ©S§TTT¤°°0uìØQ¿øÅ/4kÖ,%%%•ÛnèСj×®¶lÙR&Pÿ}´k×.=õÔSÊÍÍUBB‚ž~úi}øá‡úýﯰ°0Íš5KK—.-·mMïÕŽ;”šš*Išÿüór¯]»Výë_/Ù~øðáòx}ZÇŽ“T`–JÊ»W¤ºÏ÷r5hÐ@·ß~»ºwï®ØØXEDD¨  @§OŸöËÛQà£>R·nÝÔ¬Y3½ýöÛúä“Oôå—_ú‹騱£ï±7˜{¥kÓ¦¤’*ÜÕÝéºC‡’¤ãÇ—[ÉV’¾ùæ \å~¥’0¯W頽ǽä-[¶ÈétÊn·kݺu¾ë¼”+ (W÷ù^ޤ¤$Íœ9SÑÑÑ~Çm6›_˜°¼7Ô­[·jÆŒúÕ¯~¥FiÔ¨Q5j”öîÝ«>úHk×®-7h%©$¼xþüù?£Úá]LÏÈȨvÛFIR…áä‹ÏyïOéÇWÓ½ºXBB‚^|ñEEEEéäÉ“š:ujµBÞGÔÁƒµ}ûv=ýôÓŠ‹‹ÓàÁƒõÏþÓw݈#¦/¿üR'Nœ¨§rÅ3fŒFŒ¡´´4=þøãJKK“ÙlVïÞ½5~üx%$$hÚ´izì±Ç´ÿ~_»Ë½WÔƒ>¨#F¨[·nŠŽŽ–ËåRzzº¶mÛ¦›nºIQQQeú.ýþ¬¢¢"¿óN§SkÖ¬Ñ!CÊTPö†KW®ß/.—Kï¾û®&Ož¬;î¸C|ðAÀÇèÑ£‡† ¦³gÏê•W^©ôÚV­Zi„ ÊÉÉÑ /¼Pæ|‡Ô£G%$$(((HYYYÚ·oŸÖ¬Y£¼¼¼ û SÛ¶mÕ¬Y35nÜX‘‘‘ ‘T²ž|þüymݺU6l¨òó Õ¤I“­ôôt½ùæ›*((¨rûË‘™™©·ÞzKãÇW\\\Œyþüy1BGUëÖ­µdÉßæÛsçÎÕ³Ï>[¦M›6môïÿ»Ò~<¨Áƒ—9þ£ý¨Ì±n¸A ,HÛY³f饗^’$­\¹R‰‰‰eÚlܸQ÷Þ{¯$iñâÅêÖ­[¥Ï%P’’’´xñb?Þ·Ñ6ßW±±±jÒ¤I}O£ÖÝxãêÛ·¯š7o.‡Ã¡ï¾ûN›7oÖš5k4räHuêÔIGëׯ׼yóÊ]w9r¤:vì¨FÉáp(((HÙÙÙ:pà€>ùä8p ÂñCBB4dÈuïÞ]ñññ²Ûír:ÊÍÍUZZšöìÙ£>úȯMRRR¹ë{ .,sl×®]š1cF¹c·iÓFC† Qrr²ÂÃÃuáÂíß¿_K—.­tΑ‘‘êÚµ«Úµk§æÍ›+&&F¡¡¡2™L*((Pzzº¾þúk-[¶¬Â>®$å”§OŸnLŸ>]ß~û­222®˜ˆþ Aƒ|§Nª~ýúéÆoÔüùóý* ‚ÕjUçÎ%I“&MÒ¤I“*¼¶[·nÕ('%%ù—«†……Iúo@¹¨¨H“'O–Ífó»Î<®, \WL&“ž~úiEGG«°°PsçÎÕºuë”™™©àà`5iÒDÓ§OWLLL…}lذA›7oV¿~ý4dÈuèÐÁ÷•’’¢™3gêèÑ£eÆ•*®F}%òÎÕû÷[Õ}¾¥¯»ïUiñññ¾pò©S§ôøã_VÐzíÚµ:|ø°Z·n­.]ºø”½ï3ÔÀ+ìcÊ”)š2eŠ-Z¤yóæÕx.õ-66Vwß}·$éÅ_TZZš¤’@÷š5k´e˽òÊ+jÑ¢…î½÷^=ýôÓ¾¶¸WúóŸÿ\¦Mdd¤î¸ãIÒÞ½{ýÎy7hJ‚ÆçÎ+ÓÞû¨諯¾ hÿ999’ü7V­ˆw 8;;Ûï¸ÙlÖ]wÝå[—öŠŽŽÖ7Þ¨nݺiþüùJII)·ß‡zÈo³èÒ,‹âãã|ÉùyÙl6;VÑÑÑÊÎÎÖ;ï¼Sgád¯œœÍž=[ãÆ+7\H.\Ð< £G*>>^sçÎõ…“¯Výúõó”ׯ_¯‘#G–¹fóæÍ’J^—]ºt©ÓùÅÅÅiÑ¢Ezà´}ûö:€º_g›±V•wM+ÐÙ²Ÿþô§jÞ¼¹ïûÄÄD%&&êÎ;ïô»nàÀŠˆˆ(w3ß®]»ªuëÖ~Ç¢¢¢tà 7èúë¯×_þò­X±¢L;‡Ã¡gŸ}V ~Çæøøx™Íæ2å@=z´/÷ä©^½z©gÏžš3gN…Þz3råiРZ´h¡õë×|Î5c$''Ó§O/÷ÅsÕVP~ýõ×Õ±cGÅÅÅiÔ¨Q^{íµ²ÛíUº¶{÷îzÿý÷«Õ¿w‘9##Ø“þûÃ^:€wæÌ™2í½תα6µjÕʸ~å•Wôõ×_ûι\.>|Xùùù—ìÇåriùòåZ¾|¹âââô“ŸüDwÞy§’’’ôÒK/iâĉ~ADo@5,,Lááá¾Ô„÷͵¼ Ïl{îÜ9µjÕªF¿dªÒ666Ö÷833Ó÷8÷ª®…††ê™gžQTT”NŸ>}Ùád¯ÔÔTµnÝÚW™Ú«:Òø>èÖ­›¬V«233µgÏž2çN§þõ¯éW¿ú•:tèàw®6ïÕí·ß.“É$ÇãW=^’ßû@\\\¹e«µä×ÛÅ›xÃÎ&“I=zôЪU«=up…HOO×{ï½§±cÇ*333 Hïz[HHˆ,‹oƒéòxʯÑÝrË-¾uã]»vióæÍr:JJJÒ€Ô A;VúÓŸÊ„›¥ÿ®Ožûì3ýýïW×®]õðëGJLLÔÉ“'ýÚ.^¼Xn·Û·Öe±XÔºuk3FM›6Õĉµyófåææúµ>|¸T\\¬E‹iëÖ­ÊÉÉQPP¢££Õ²eËr ž|¸Ö¬YSî?@Í™L&ÙívVÜ­ ‡Ö’%Kô³ŸýLyyy[Ì÷†wM&“‡ïûAƒ©Y³fúüóÏuâÄ IòUå-½ odd¤z÷î-IÚºu«ßúÝ™3gtôèQ=üðòÛíºùæ›+ÝÙýÀúæ›oÊ?uêT•žKxx¸Æ§ÆëìÙ³š;wn½…“½ŠŠŠ4þ|=óÌ3ï;--M÷ÝwŸ8 –-[êwÞ)N–J¿¥¼Õ óšL&Ùl6IÿÝXW*©Rí=^m%©ÿþzÿý÷µf͹Ýn¿y»ÝníØ±C’tã7VùùZhh¨æÌ™£víÚÕÛ´fÍšùåìêƒaZ½zµ222|Ç7n¬k¯½V’ÊÍ£BFF†œN§¶lÙ¢ÔÔT5mÚT»wïVNNŽV®\©¡C‡ªY³fºæškÊd}¶mÛV¦¿Í›7+55U¯½öš‚‚‚Ô¥K­^½Úïï:ÃêÕ«õñÇû;wîœ8Pî\ Ãðe7K¯e_2ÓÙ¨Q#ß±ß|óþð‡?ørIÙÙÙš1c†Þxã 5jÔH·ß~»^ýõ ûÚºuk¹U–K禮æúžÀåX±b…Ž=ªàà`?> }_wÝu’JÂln·»Ü¯ýû÷Ë0 Y,uêÔ©JýëñÇWhh¨ŠŠŠôÁø÷VD¾¸êçÅj»‚òˆ#4mÚ4ýüç?ןþô'ߢyyJ/¤·mÛ¶Úc•^T½Ø‰'|»DDDø;xð /=nÜ8ßeMxß\£¢¢ªý‹ :mW¬Xá[þå/Y­EìÒmÇŽ[æ|³fÍ4`Àßµ¥_C¼Wu©mÛ¶¾0ÿþð>}: ý&''û~ }ûí·é³6ôéÓG .Ô{ï½§n¸¡VÆðVhoÒ¤I…;Ð÷íÛWRIÕéÚvÝu×éÅ_”ÍfÓùóçõæ›o–¹&33Sûöí“$ 0 LpºI“&êÙ³§$iÆ ~ç<þñH*Ù}~òäÉV?¯IEu~讹æýÏÿüž|òI=ýôÓºãŽ;Ô¨Q#¿kºté¢ûÜPhmؽ{·–-[¦{ï½WÍ›7HŸùùù¾Œ½k©f³YÝ»wW³fÍÔ¡CßµÞó¥7âíܹ³Ìf³Ün·V¬XQ¦ÿŒŒ _ÅçN:ÕZ¥ÛèèhMš4I7Ö©S§ôæ›oÖ{8Ù+>>>à}=zTÇ×Ô±cGýýﯳ×a]2dˆ¤’ŠÝÞjÉ^»víR~~¾¤ÿ®ÖïzßçÏŸ¯×"z;wîÔc=¦×_ÝW¬°qãÆš:uªo­içε>ò²€Þüaƒ ªÜÏéÓ§}ÅAãââÊœÏÎΖT²>ép8j<ßêèÛ·¯‚‚‚är¹4{öì2ß………úôÓO%•¬‰þ\µ”¥’´ú¢E‹ôä“OªÿþZ²d‰_ÕØ‹5hРÒò‚‚¹\.EFFú¦+ÛAÛétêĉjÞ¼¹ºvíªõë×û7›ÍŠ‹‹SQQ‘ÂÃÃÕ¡CÝu×]JLL”$½öÚke*èV5 ìMç_Ì+­ªÏ·<7Ýt“ïqDD„:wî\f—¯#GŽ(--MqqqzðÁe³Ù´cÇ_IôˆˆˆJçùÜsÏ©¸¸X«V­ÒÁƒuþüyY­VÅÆÆjÈ!¾ÐïÅ»†¡×^{M/½ô’BBBôÒK/iÕªUúæ›oôÝwßÉív«AƒjÖ¬™"##5oÞ¼ çPºÂð´iÓ´páB©iÓ¦jܸ±æÎ¶éééZ²d‰î¾ûn]ýõúãÿ¨þóŸJMM•ÙlVLLŒÌæò÷ HOO×?þñ1B”Ýn×§Ÿ~ª¼¼<µoß^÷Üs¬V«rssµpáÂZ»WuiĈ’J§÷îÝ«°°°r¯óx<¾…t¯'Ÿ|RYYYÚ±c‡ÒÒÒär¹Ô°aC]wÝu6l˜L&“òòò´lÙ²Z›ÿåü Z­V=öÂ\¥ IDATØc¾÷„)S¦hÓ¦M—|o¨®7*77W‡C3fÌÐìÙ³µmÛ6ªiÓ¦5j”¯2÷çŸбCBBäp8§6mÚ¨oß¾¾ëdeeiÆŒVÌ^¸p¡ž}öYÅÆÆêw¿ûæÌ™£3gΨE‹zôÑG}? ï€"Iü±z÷î­Ž;jèСj×®>ùä;vLRÉ?Z:vì¨N:iÒ¤I2 # Ï€ï«øøx3Ff³Yùùù²ÛíêÖ­›ºté¢Í›7kûöí²Ùl4hÂÂÂTPPPgsÛ´i“¢¢¢4fÌ=ÿüó—Üý¼*233¯ÈÈH¥¤¤(11Ñ·¶Ó¶m[}öÙg’Jª%K%;µ{%%%I*©æ[Q xÿþýêÖ­›‚‚‚_åŠÈUÕ¤IõéÓG¡¡¡:räˆÞ}÷]tŒšjÙ²¥ÆŒÐ>÷ìÙ£9sæèüùóêÝ»·fÍš¥ÐÐЀŽq%èÕ«—âââ”––¦/¿üÒ·Ö'ÉXNLLô½ëÆ 4qâÄz€Ú““£#GލeË–µ¶ùlEfΜ闽 Öí·ß®;ï¼Ó—ëûî»ïÊ­Ø[[Ê+XÞ±ÐÐPýä'?Q×®]£ððpèÌ™3¾,™Íf+ÓnÙ²eêÒ¥‹õÆoèóÏ?××_í+æX¼¹'o²<Þ5½ððp…‡‡+''§Öæs%¸ªÊ’´fÍ}Ô§O¿ó.\дiÓÊߥÀÝ«ºä­ôܾ}{_ÕÛòœ?^wß}·ï{ïîôv»]C‡-·MNNŽž}öÙ Âåü †‡‡ûUHˆˆPLLLÀIæççë¹çžÓ´iÓ­©S§–{ÝúõëõÑGtì &hذa~Ç ÃІ ôç?ÿ¹Ü×±×æÍ›õî»ïjôèÑêØ±£^ýu¿ózæ™gÊý%n†¦M›¦©S§ªgÏžºæškô›ßü¦ÜqZ·n­C‡ÕàÙðÃÓ¿™Íf}øá‡Úºu«"##5hÐ uìØQ½zõR¯^½|×nÞ¼¹ÂJkCxx¸’““õí·ß$œ,ý7 ìÝpÙû„‚‚ÅÄĨaÆ:þ¼ï|進w÷ʪ—>W»¾{×â ÃÐÊ•+¯˜pr‡4räHY­ý8ƒ70n2™4yòäïe8Y*Y+2dˆÞ~ûm-[¶LO>ù¤ïCPk×®•$Ýxãõ6¿/¾øB¿þõ¯¯˜×”——§Ã‡«eË–¾œ`](NîÛ·¯ÆŒ£FùŽ¥¦¦êùçŸW^^^Í©*4mÚ4EEEùVxxx¥mwìØ¡_|Q'NTÆ u×]wé®»îÒôÉ'ŸhãÆ¯h]z]°²¬›WXXØ" \º4dÙúÎ0 ½ÿþûzüñÇuýõ׫E‹¾*˜5Õ¹sgIÒñãÇ/¹(vàÀ ¬‚‚mݺURIÀvñâÅZ¿~½úõë§V­Z©¸¸X[¶lÑ—_~Ygó²Ûí?~¼NŸ>­þóŸë׻ɳ·Brrr²òòò´zõj 6mÚ¤mÛ¶©OŸ>ºå–[Ô¶m[ßשS§ôÊ+¯èøñã³$y<ž*­wÔeH½Žù/¯ø ÊË–-Ó²eË*½fùòåZ¾|y¹ç¾úê+}õÕWÕóÕW_Õ«¯¾Z¥k?ûì3ßNË^Û·o×öíÛ«5¦TÖ4hP•®}ôÑGË=^“ç[žS§N顇ªV›ôôtÍž=»Zm ÃÐÎ;µsçÎjµ»XAA–.]ª¥K—Ö¸ââb-X°@ ,¨“¶5}HÒºuë´nݺµ Ľª+ƒ®Q;oÞ 6xFÒðáÃ+=¨ŸAIzê©§ôØc©oß¾:|øp­î˜‘žž®Y³f´ÏKÝ«yóæ]vµîmÛ¶iÛ¶m5n¿iÓ&mÚ´é²æJTôÿÝOžwáÂ…€ÍÛëØ±cZºt©F­¸¸89Rf³Y»ví øXUÑ»wo <¸ÚáíªêÙ³§f̘¡‰'êСCš2eŠ<n»í¶*µ÷ΫºañÒaëºjÛ¾}{uéÒEÛ·oׇ~¨¾}ûjÓ¦M***Rhh¨úôéS­yÂßþö7Íœ9³VÂö\i uèÐ!µjÕʯ¨im±Z­š6mšÚ´iã;väȽñÆJII©õñK;xð  |›ýV¤E‹JLL”$ýå/Ñš5k|ç\.—Ž;&§ÓyÉñ\.—V®\©•+W*66V Ðm·Ý¦„„͘1C<òˆ233Ëm[zÝ¢*kTçÏŸW‹-´nݺ*çO¿ï¿í0 ºvíªîÝ»K’.\Xϳ¸º˜Íf5J¡¡¡z÷Ýw^µ5==]’Ô¨Q#ßNô;wîTvv¶RRR”””¤Ö­[Kúo˜ÙËûAÆWRnß¾½$©¨¨HgΜ èܽ2335{öl¥¤¤Èl6køðáºöÚkke¬Ê 8P·Þzk­…“½’’’´xñbuíÚUn·[¿ùÍoÊlH^»Ý.©úaqo;IÊÍÍ­³¶£G–$ýûßÿÖÙ³gõùçŸK’ P'„*íü£ž{î9ÂÉ€”ââb:tHùùùµ>ÖÀýÂÉ)))š6mZ‡“%éwÞÑï~÷»K$Œˆˆð=>vìX@ÆNOO×¢E‹ôÄOÈív+,,Lýû÷¯ðúÂÂBßãÐÐÐKö¿ÿ~IR§Nê´:ö•Œ€2\a† ¢ùóçkúôé²ÛíZ´h‘Ö¯__ßÓ¸ªÜzë­JHHÐ;ï¼S¥ÝÕ«+##Cn·[‘‘‘êÔ©“233}òعs§L&“úöí+©l@yÇŽòx<2›Í0`@™¾cccýBÏW—æt:õöÛoëøñã2›Í1b„š5kVkã•f2™4tèPõëׯNÆ“J>ì²`ÁuïÞ]n·[<òˆ¶lÙrÉvMš4‘Tòwy©ÿËk'ÉoçÿÚn{ë­·***JÅÅÅzï½÷´|ùrI%k‘uÅãñhÚ´iúóŸÿ\gcp%q»Ý:|øpµ7"­®ë¯¿ÞïûeË–©   VǼ\ÙÙÙ¾ÇÞM«Ãb±TxîäÉ“¾{îp8*¼®ôšO§N.9æÊ•+åv»®x Ò9üPXë{!!!Š‹‹ÓéÓ§õÎ;ïhåÊ•õ=%€«JÏž=Õ­[7ýíoSfff­Œáv»•––¦&MšÈn·ûm8»k×. 2Daaa’¤ÔÔT¿¶YYYZ»v­úöí«®]»Êf³ióæÍ*((Pbb¢ú÷ï/‹Å"§Ó©+VÔÊüK+..Ö‚ ôÀ(>>^£GÖ¬Y³tîܹZÓb±èg?û™:vìXkcT$$$D³gÏÖ¨Q£´oß>Mš4I~øa¥ÁìîÝ»K’ ÃÐC=¤‡~X6›MÇŽÓ©S§ôØc•Û®eË–ŠŠŠÒ¹sçô /Èår©]»v’¤C‡éèÑ£zâ‰'Þ688XcÇŽÕ+¯¼¢Y³f©°°P‘‘‘ºé¦›ª|Ÿ.‡ËåÒ£>ªO>ù¤NÆàJåñxtôèQ5kÖL‘‘‘µ2FãÆý¾?yòd­ŒHÇŽSFF†bbb4aÂÙl6íÞ½[¹¹¹ Rxx¸l6[…í§M›&—Ë¥uëÖéðáÃÊÊÊ’ÕjULLŒn¹åß½>|øp…}¤¦¦*;;[3fŒ,‹Nœ8!“ɤ„„5mÚTóçÏ÷]îÜ9-Y²Dwß}·  ääd}þùçJMMUVV–‚‚‚«:höìÙµº ñ•‚€2\aV¬X¡mÛ¶éøñã2 £¾§pUiÕª•n»í6-^¼¸Ö?|‘ššª&MšÈ0 mÛ¶ÍwÜétjïÞ½úÑ~$Ã0túôé2m¿üòK…‡‡«sçÎJNNVrr²ßy§Ó©ùóç+''§VŸƒWAAæÏŸ¯_þò—jРî¹çÍš5KÅÅÅ+((H÷Üs®¹æš€÷]U‡CsæÌÑí·ß®ÌÌLMžù¤ÎŸ?¯§žzÊï|ddd…!ãËi+IcÇŽÕ[o½¥¼¼ø ßùÜÜ\¿€²$}ðÁ ÖwÜ¡Ækܸqåö½téÒr׿oj= üþûï×ö(""Bwß}·Ö¯_¯={öÔúx©©©êÞ½»<¨¬¬,¿sß|ó~ô£éܹs*,,,ÓÖãñhÉ’%Ú»w¯ºwﮄ„)++Kû÷ï×êÕ«}ÁÒº’““£>úH£GVãÆ5`Àýûßÿè!!!;vl¥ÕŠëJãÆ5sæLMš4IÐ+¯¼¢©S§Vxý /¼ æÍ›kéÒ¥JMMUHHˆÚ´i£[n¹E†aÈd2•Ûîî»ïV£F4þ|íÛ·O¹¹¹ Uûöíkµmxx¸î¹çÍž=[’4räÈjÞ¡êËÉÉÑ< ­[·ÖúX\M ÃÐÉ“'åv»[ßÓ¹"ìÛ·OS¦LÑ!Ctíµ×***Jaaar:ÊÍÍUVV–RSSµcÇ¿v†aè¹çžS¯^½tÍ5רaÃ†ŠˆˆÇãQvv¶Ž?®uëÖiÍš5—,¹|ùråææjðàÁjÑ¢…BCCUPP ãÇë›o¾‘ÉdòëÃ0 -\¸Pk×®Õ Aƒ|ó R^^žRSSµgÏž:Û„¸¾]¼Jåû~úôé¦o¿ýÖ”‘‘aÊÈÈ0'%%™ÒÓÓ-!!!“ÉdõxªH@¹¸¸X&“É0›ÍèPÇÞ_ô~}O¡FÞ׿}cýÎåóýý öýû¿ë¸Þüϵ*¯v»¯ÈP ­yc#pó vhG}O?&“) +%$ŠTÙe”Íf³/1èô4€Ëçv»ââb¿lpMY1!ÀUÈTß\j\AÙb±”©œìr¹1'âÍ—V:+\]5(øá©V@988Ø 2¬V«/m6› “Éäû üÔ”Ëå’TRIÙl6ûòÀ¥3ÃÕAeà{,ÐEŠ«P 1ÂÂÂü¶X,†Ùl6 üª(rr.7l2™|Ù`‹ÅbHRPP\­Œ°5Г d.Ï2À+V\¥ Ê^6›Í/]XXh˜Íf£ÔÄ\a¼Y`³Ùl–ɇ……!!!UÊ W+ \nf³a2™ —Ëex<Ïåö p<Çår&“ÉW¼ørTPž>}º‘œœlH’Ãá0öîÝë;gµZ ‹Åb˜ÍfÃl6¥&D@¸‚˜Íf·`±7l±X «Õj6›Í/´œœœlLŸ>½Â ³µ&“ÈÍÍ5Ìf³a³Ù¼)i$Ûí&  \A<Çb±x<ÏeWO–*© ìcHRHHˆa·ÛsçÎV«Õ$‹ÅbÅÅņÇãq[,w & 0,‹Ûãñ¸Ýn·Çåry‚ƒƒ=ùùùFnn®/°¼wï^9Û-®Ì%Ê•LÄp:†Õjõ&¦=’\5í@à†áöVQ¶Z­§ÓiX,ÃjµçÎ3ìv{µ*+_P6þó%Iš>}º‘œœlÄÄćà 3‚ƒƒ   ÃjµÁÁÁ·Ûí–ä r‰€2pE1™LÅÞ,pqq±'88ØcµZ   #88Ø 3BBB IJNN6¦OŸ^:°ì—?–ªYAyïÞ½²ÙlFpp°Q\\ì.,,ô{<»¸¸¸Øãñ^ö30n·»¨¨¨ÈåñxÜ!!!îÂÂBOqq±;88ذÙlÆÞ½{åp8Œ˜˜˜*UR®( ìK2{«(KRHHˆã)**r7hÐÀÓ A·$—Éd*¶Z­E†aP®,AAA…&“©Øív»m6›'((ÈÈÍÍõÄÄÄx*¨ž\¦r²—éƒùÎOŸ>Ý´råJsnn®)66Öœ••e¶ÙlIVIV·Ûd2™B,K¨Ëå²Y,–`Ã0‚L&“Åív[Ìf³Ùãñ˜Íf³Ù0 “÷K’¬VkÉ,ÿó½÷Oà‡Ìd2¥ÿt¹\¾ã¥¿<%A^a¾Å.—«8((¨Àívç»Ýî   "I.I®ÂÂBwdd¤'==Ýãp8Œ~ýúyJ…“¥ ÂÉÒ¥Ê~ו)·lÙÒ”‘‘a¶I²[,›Ùl¶I²šL&‹Ëå²X,³Ûí6†a²Z­&Çc.B¶X,å΃ 2~ˆ¼ä‹¹Ýn£ô5Þ/·Ûí1›Í†ÛíöX­V·þDöx<……“SRRŒ˜˜OLLŒ±dÉϺ­0˜ì·ªÏÁû`øðáæŒŒ Se•” ÃòxÞ¾}þù'¢££Ñ¿ܹs‡Ž bРAøþûï!“Éàææ†¯¿þºÄíãÀ1jÔ(À§Ÿ~*î/•nâïr¹¼H릤¤ Ë–ô†•”ëõOæDDE¥WÐP¦ Q9“€ââÅ‹ËåX¹r%>þøã·ŸÍš5ÃŽ;P¹reÄÅÅaÀ€¸ví éeÔ¨Qøæ›oÄ–{§NÂ7ß|SâösçÎØ¹s§ø·§§'~üñG˜˜˜ð –bú SSS666,?X~ÐV®?Ö?™é¢Ðw©©©øõ×_qþüyܼy±±±HJJ888àܹsLM*nß¾‹/âÒ¥Kxøð!ž|8îÝ»‡ÁƒcëÖ­hÖ¬Y™?V‘‘‘bË2???©ý_*•ª=ývuuEBBOr-†ŽéÓ§‹ïß¿_}õ”Ježee2"## ½mˆ»¸¸`ïÞ½HOOGzz:bccƒððpüñǸzõ*²³³óÝžR©ÄÌ™3ñìÙ3Œ?Э[7‚€I“&•‹ãÕ²eËBy{{ûÿTAC333H¥E{î« ZØÚÚ–ùòãÞ½{øðà µîܹsáååÅòÃÈåwy§ëõ׳gOܺu ÇǬY³Xÿ|ƒõÏÁƒãüùóhÞ¼9öíÛW¤ý-ïù•- A@PP–-[†çÏŸk\&¿÷‰JŠììl„„„`Æ Ïóv)˜R©Äĉ lß¾ŽŽŽ%~¿kÖ¬‰Ý»wÃËË ·nÝÂøñãqðàATªT©Ü»1cÆ`çÎj­”´œ(¯–-[bÆŒâß6lÀÂ… Öâ¾R¥J055…©©)¬­­Q©R%8;;£K—.˜2e îß¿åË—cÿþýZ·óÃ?àÙ³gâÍf÷îÝqõêU>$)¥F%v;/ªU«V±üÐ@[`™åJq^¬êææÍ›bùÏú'•g ýüüÄIÚ´iWWW4hЕ+W†R©„R©äÍ'•hqqq˜:uªøÄQ&“¡qãÆhРj×® *ÀÁÁ U€E‹!,, r¹kÖ¬)R…ÍÍÍ Ë–-ÓºŒ••Už÷nܸ‡Н¿þúK§}·³³ÃÚµkÑ«W/ÄÆÆbâĉزeK¹ãÍÁÁýúõömÛòTÄ9Î]Á*Uª„åË—‹iõË/¿àÛo¿-Ò6bccñâÅ‹|ÿÿôéSµ¿ jõV»vm,Y²7.p_6n܈êÕ«cĈ€éÓ§ãï¿ÿÆ•+WÊÅñ9rd¶Š+òD/C凣££ÖVF;vìÀ²eËP«V-ôèуå‡Êo¢Ò\ÿ¼ÿ¾Xf·jÕJç}/ïù• Zƒ†×®]†ß|ó  Ä£REÕ!&&666˜8q"z÷îÍÄ"úù矱aÃÀÂ… áââR¤õÍÌÌŠÜõOôêÕË`ß¡ZµjX¹r% „°°0|÷Ýw˜9sf¹9†cÇŽÅ®]»••%¾§-hX¯^=ãéÓ§j¯‡â?þÀßÿ­±[.,^¼mÚ´B¡@»víàéé‰>ú•*U–-[°zõjxzz¢_¿~hܸ1ÂÂÂðå—_æÛj½zõê6lÚ·oš5k"55‘‘‘سgO-íô%•J±lÙ2T­ZpçÎ|õÕWEÞÎ÷ßB/àÀœ:u 666°±±AåʕѲeK¼ûî»pvv—ûì³Ïpüøñ»a}÷ÝwpqqAëÖ­abb‚+V [·nâ0#e™••U©èzÌòÃpå‡L&Ó¸ŽR©Ä·ß~‹M›6ÁÕÕ°³³cùaàô§²-==&&&J¥âø¾e)ÿþkeÿûßÿXÿ$¢rMkÐðÂ… âïݺuÓ냣GâæÍ›èÓ§O­pêÔ)\¿~·nÝBBB’’’ðÕW_á“O>Ѻîµk×°iÓ&\¼x‰‰‰¨Q£ÜÝÝ1uêTX[[ý`‡††"((7oÞ„T*E‹-лwoÇö‡~ÀöíÛQ±bE;vLk¥ÀÇÇû÷ïGŸ>}°dÉ’u‚Oš4 111¨]»6vîÜ)ÞøÕÉ“'±{÷n\½z¯^½Bƒ àì쌢Q£F®Ÿ‘‘„††âÆxúô)233Õd†¾~ %55~~~€#Fà£>z#ÇN"‘`äÈ‘°°°€••¬­­qëÖ-lß¾]çm¶lÙ3g΄ŸŸ6mÚ„¢N:å"³¯^½:>þøcìÚµKíZÛòVVV°²²BíÚµÕþ7mÚ4ÄÄÄ`Ù²eÖXAVµÞ]»v­Ú¸C>>>hÖ¬:wî,¾÷Á`ܸqøî»ïòlkàÀ˜9s¦Ú¤r¹®®®puuÅûï¿É“'­Å{§Nðî»ï’““1fÌqLcR*•HHHPgò·ß~ôïßóæÍ'5ñðð(0h¨êÞõóÏ?£råʨZµ*FŒÖ„^³qãF¬\¹ݺuØ1càïï³gÏ¢Zµj˜9s&\\\°bÅ ?~ñññèÝ»7fΜ™ïƒº”AAAb¾›Ÿ'Nä¹6Uúõë‡?ÿüSãÿœœœpìØ±7’–ÅU~hòòåKLš4 §OŸÎs ±ü0,}êï+V¬À¦M›P¥J9rDëçL˜0GŽA›6mÄF†¸þô½Ð÷ú›1cvïÞ'_Ò4¬DAãIê[ŒÅpéÒ%ܾ} býµAƒ£Òšܸq@ÎÔÂ|ˆjÕª‰×”««kž}È=ð{FFnݺ…ääd4iÒD¬ÄwëÖ ×®]Ãúõë–wæäDGGûqܽ{7<<<àîî…¾¡IHHÀš5kÄ4«¿âþAßë/++Kì‚ûèÑ#dff¢B… {ÉT¨PÁ(õGA°téR¬^½:ߺ‚jr—²˜hÏ0%%ÑÑÑÈÈÈ(ÒÄ&Ì?ˆ¨´Ò:õ^»víФI93;~ûí·E®pcÆŒ077Ç‚ pîÜ9ܺu Q«V­ÂÉ“'ó¬[¥Jœ;w‡ƶmÛðÓO?aܸqhÑ¢d2._¾ŒâôéÓy¿˜TŠ   ìß¿¿ýö›Ø,>>£GƬY³ðüùs4jÔ?~<:vì¨ñ;¬_¿={öDhh(LMMѶm[Œ1S§NÅ7ß|ƒåË—ÃÃÃ#ß4HOOÇÙ³g1{ölù䘛›cüøñ8tèP¡Íððð@ûöíQ½zuØÚÚÂÎÎNíFLÕbZ%wÐP—nÃ5R ÜìÚµ r¹æææËåâK•¯çÎã )÷y_vòK›o¾ùF,7^÷³0r—Ê•+ÃÚÚ¯^½*³ç¿B¡Ð8 ñ}mùò›(?ÊŠ’P~„„„ 22‘‘‘ˆˆˆÀÉ“'qëÖ-áÝwßÅ×_­S+åòT~£ü.¨þngg‡N:áèÑ£Î3Ðþýûä4lÈ]5Æõ§ËýCq3DýÑÇÇ'NÄÍ›7ѵkWŒ1 €M™Ï?ž?ž§.Âú'•gEê#ªP(àëë‹AƒaÁ‚8sæ ‚ƒƒqóæMìÞ½[m`¥R)Þ˜lÛ¶ @zz:ÒÒÒÔ~ªçÕVñHKKÃáÇqöìYܾ}[m`aU°M•Áç'÷ ¨ v¥þkY¢jÑa”ðºéjS¡B( $%%áñãÇyþ߯_?,]º/^¼@HH>ýôSñª®ÉÆ ¨êC5iƒ âø]ºÞTkk©X±bEXYY!99QQQbW¿ˆˆ±‚©ª˜i;/_¯Œòúчꜰ··×k;îîîgý+NªÅu9?J™L†¸¸8ìܹC‡E½zõàááQ`P¤k×®ðóó+ðø¿>û{îZº s·411‹‹‹Æå222Ä—1ZÚæþÞúÕ.]º”ï0…×è­·Þš5k —Ë¡T*1}útµ± ëõV#e:h8tèÐ" ¢¯K÷}C–eEI(?j×®Úµk‹i›––†ãÇã‡~Àùóç1xð`ìÚµKk9]ÞË}Ò_Ÿú{¿~ýpôèQœ:u ây$8øè£ò”1†¾þt¹(N†ª?véÒÁÁÁXºt)Nž<‰E‹aÅŠèß¿?ƯWë¿’ž¨ÊHCwM.ù• :E¬êׯM›6aãÆ˜?>nß¾ ___±»ÓBUá¶°°@µjÕ`jj SSS˜™™åûûëŽ;†™3g"11ŽŽŽhܸ1lmm‘––†´´4\¼xÏž=+ð†'wpN©T*X—œœ, Ê2UeAÓ¬lVVVèß¿?±eË1h‡°°0XXX [·n%î;I¥RT©Rqqq¸}û¶N•®Ü•^mOVår9’““ÕZ:=}úTíÿÚöóõÏ3äõ£¯5j€Z7вBÀÑ÷)vi :ÏT­ år9&L˜ õæ§k×®øé§Ÿ ‘HðèÑ#øûûãêÕ«xñâär9:uê___績- sO¸• OOOÄÇÇ« ÇÖbbbÄóÃÑѱÀa0´Ù±cBBBt^ÿí·ßƆ P±bE(•JL™2E­‹xQ)¹Ë¹’4VcI oÐPßò£¬(‰å‡\.G÷îÝÑ®]; 8áááXºt)V®\ÉòÃÀô­¿»»»£J•*xòä BBBðÙgŸÈéN«zX¢ûИן.÷ÅÉõGlذ×®]ÃêÕ«ŠM›6a÷îÝ>|8ÆŒc´{¤âÌ?TìüX²þIDå^%ßðáÃqᄆ†âøñãÈÎÎo­­­ajjŠÌÌL¸»»cÚ´iEÞþÉ“'áíí ìÙ³Gã@Ã#GŽÄ‰'Ôž˜ªÐWµvQ5‘/‹âââÄàh~…ãСC±yófܾ}/^DëÖ­ñóÏ?#;;]»v-±AÕV­ZáçŸÆ¥K—˜˜X¤1ÏraòàÁT©REãrÉÉÉb€0wíÜË?|ø0ßÁ¢U×Ëë- qý‚““€ÿ&®(KTÝBÊØnªóìÉ“'ؾ};FŒ¡µµT*ÅìٳŠâˆ#Äñ…TrWä_æ¾iÓ¥UFîÖsR© 4Èw†rcºwïžX©/ή£;vÄòåËaii‰ÔÔTL™2Emöè¢Êý]Êrù¦+UÐP×Ö«ú–eEI.?lllЫW/„‡‡ë4¦ny*?taˆú»L&CŸ>}°fÍìÛ·O ªº&·nÝZcÝÊÐ×_I v²$cÔ›5k†U«VáþýûØ´i¶nÝŠ€€œ9sÛ¶m3ÊÅ™¨Z~ùå—â„†š„……ÁÉÉ …W®\aþADe÷^Rß ¨Ï0TQ¥ñ믿ê4È’%K#Fä;3™êé`ZZZ¡nŠr# ú̘˜½Z˜”dª™»êׯŸo¡fÍšb·-[¶ø¯krß¾}KìwëÕ«€œ§®¹[Áö¦Ou>k„;w…A4y÷Ýw5VZ/]ºTày©©E‹¾×!4lØ@NËÉÈÈÈ2sÞÇÆÆŠ•6cu?)Q}®¼yÍš5Ž¡Ú¨Q#888ˆç¦¦J{îîLæææjÁA}[þûï¿jÃ)S¦¨µŽ{SrO~òá‡êô]ô=n“'Oƺuë`ii‰û÷ï£oß¾z  sçÎâï¹g°&õsV×õ-?ÊŠ’\~‚€sçÎ(úòV~èÂPõwUóöíÛ¸yó&ÒÓÓÅÖ¹‡Ë1æõ§Ëýƒ!YXXÈyèWXƪ?Ö®]sæÌ[æþý÷ßøõ×_Ë\þQÔ‰_TãÓ3ÿ ¢2[7Ögå'NˆÁ#M“=Œ1@Ε±cÇzÜ&UÁ¬êVš_·AÄÊW>‘ IDATFAAÃÜO [€vèÐAœñ‹/¾È3»piƒ¥K—€Ö'i@N«R 'Èxþüyܸq5jÔÐ:ÈôëNŸ>Ý»wc÷îÝZ+r†òþûïãwÞìܹsæÌ[UÄÜÜ\x{Ë–-xøð¡Æ É?ü8p Ú“V;;;4nÜðÓO?©u·ÔtsªéœÔçú1777ñIþªU«Ê̹¿nÝ:dee¡N:èØ±c™Ïèsßô$$$`Û¶mZ—ÏÝrP*•ª™€œ¡ TAy•ÜÝ›ôÓPuݨT¯^GŽÁ÷ß^½zåÛrÄÐvîÜ)^›uëÖU8ߨ 6lØ€I“&A"‘àôéÓèÝ»7"""ôÚn“&MðÞ{ï‰ÇióæÍ¬ ås½è зü(+Jbù‘••… . _¿~8sæ d2ÆÇòÀ Y¯[·®X Fhh(^¾| …B®]»¾‘ëO—ûCRMPxñâEqVß‚»þèìì,>(4Öx¸Å™L›6 aaaù¾ÆŒxçw†­[·2ÿ ¢2MkûG!662™ &&&J¥xðànݺ…K—.áÂ… rž”|õÕWƒ6ÞÞÞÀ‰'жm[8;;£]»vhÖ¬ììì P(ÄWî‚Y&“¡FxðàV¬X'''ñIà“'OpéÒ%¬\¹R¬˜Ô=Y—'…–––X°`ÆŽ‹‡¢GèÑ£:uêgggXZZŠ3z–ôñˆ¶mÛ†úõë£N:ˆÇ… °lÙ2¼zõ cÆŒÁû￯uýV­ZÁÅÅ7nÜ»ˆxzz©ëáúõëÅ'û®®®oä|ÕªUèÛ·/C‡Ell,úôé???¼ýöÛP*•¸~ý:Ö¬Y#¶¦ÒtNêsýŠD"Á˜1cðÅ_àðáØ2eÊëF'Bž˜ªt!OšI¥ÒBÏž=î]»£G~ã­ÇŠÃëßqíÚµ4hØ‚áuP*•âµ±lÙ2ôèÑ?†““Z¶l™ç&K.—‹ù°¾- `ß¾}pvv†———¸ý?þXœx)55IIIHJJ½{÷Š4ÑEa=~ü„§§'`ìØ± Õ¹ZQìÝ»Wm¼£ªU«j½17n\¡Æ~Ê -“C¼.55‰‰‰Z—±±±Ïw}Ç44DùQgù‘˜˜ˆ[·n!>>^|…‡‡ãêÕ«bKk+++,X°nnn…Þny,?ŠÊÐõ÷¾}ûâÏ?ÿDHHˆ8LEß¾}µŽãlÈ미[º¹¹aÛ¶mHHH@ß¾}1`À¼ûV­*T¨ Nügèúcbb"ÌÍÍaff¼xñ÷ïßÇßÿµk×BØÙÙ¡Ge.ÿ°¶¶Î3Á[nªa™LMM‹4Q ó"*“AÃ}ûöáÇÔTÅÖ­[1jÔ(˧¤¤àûï¿ÇŒ3Ä›¦Ü­:?~ oooŠ×Œ\.ÏlÑu¦IAàçç‡Ë—/cÚ´iyºZXXˆƒ¼ÔÝZëÖ­CïÞ½!•JѼysŒ?oüªºjå§0!yzzŠW ‚€5kÖ”‹óíÚµX»v­Öe>,¶èQ]/ú õ-?ô5pà@¼|ùRí=U+¥ gÏžyÖñ÷÷/ò,Â%µü ƒ··w¾×RÏž=áéé)ö&)¬òX~èBŸúûëzôèyóæ!11Q7® ²^ŸëÏ÷†¼þºuë†K—.!((Hœ”¬0÷úÔSRRÄ.Ϊrüõ‡eMš4Á’%K4N¢XÚócaþADe2h˜;!‘H`gg4iÒ®®®èܹ³Ö'1*:uB§NpçΜ:u ø÷ßñøñc¤¦¦"-- Õ«Wϳž‡‡öìÙƒÕ«WãæÍ›xúô)¬¬¬Ð¡C <-Z´ÀÞ½{ó¤T•ý[·niÜŸ×ôwvvÖºÿï½÷Ž;†ß~û 'OžÄµk×ðøñcµ&ùÅ1ÞVA\]]1a„……!&&OŸ>…¹¹9j×®öíÛcРAâ¸e…Ñ£Gøûû‹­.U3›•ä ¡ªR÷Ã?`òäÉ8tèÂÂÂG‰•ǪU«j n¸»»ãÈ‘#Xµj®]»†ˆˆ˜šš¢qãÆèÓ§z÷î­µ3mÚ4´jÕ Û¶mÃßÿW¯^¡Aƒèß¿?úõëܸqCëÓk]¯C‘ÉdX²d ŒsçÎaÑ¢Eøúë¯KÜù^˜.«øå—_`bb‚eË–•ÉKó;†š)ƒ Ê7`±~ýzüóÏ?1bêׯKKKÄÄÄà·ß~úuëðâÅ ÄÅʼnyHîk:w°Eß þáÇñË/¿ÀÙÙîîîhÔ¨jÕª…jÕª‰-½9»bdd$~üñGq0ù)S¦àúõë8}ú´QÙƒ :³¢‹‹ æÏŸ/þ½råJ\½z•µ ÿ—{L*U«}[é[~h’{¬-…B¡õ¼Í¯ueFF†ÆúQ… ÊLù¡P(P±bEÔ¨Q5jÔ@õêÕQ³fM´iÓFçÀhy-?t¡OýýuVVVððð@pp0€œ–w…Éu½þ qÿ`èëoîܹ>|8Ž;†'N >>¯^½Â«W¯´ÞèZLMM…L&S›aÙÔÔ5jÔ€‹‹ :wî WWW –µú'ó"*ë$òô³R Ъª4 ‚‰DRªŸîƒê騩©i¹H›¨¨(xxx@©TªµÊ(­”J¥8Oa»¶–gAAAðóó3Èyi{JбcÇBøúúbÈ!%r?U3R *(%ÂÝÝðüùsôéÓÑÑÑ¥bÿ+W®Œàà`ñæð?þÀСCõjI§­œ ãY·n¾ûî;Ô¨QÃèk–¥¯ü bý“ù‘¡8˜‚j“õäá;w˜˜ˆçÏŸãÁƒ8wîœ8qÖÿþ÷?•ºr˜å1ÿ`þAD¥ƒ†¤Q||¼ÚŒ‚‰}ôf̘ʕ+3ʱŒŒ L:¿þú+ÀÛÛ[ï­¤Y¹r%~øá9ƒ‰ûûû—øqd4,Ùêׯ   q ÍôôtLš4©Äµ|hÓ¦ V¯^-Îò///DFFõsYÐ߬Y³òLÖäLþ3lØ0L˜0¡ÔÞx²ü "æDD¥ çz'*V¬ˆ*Uª }ûöðööÆÁƒáïïÏ€!ÁÌÌ Ë—/Ç'Ÿ| gpç}ûö•¸ýÇϳ¬¯¯/¶lÙ’ï¾ÔªU #FŒ@ûöíáàà€ääd\¿~AAA8yò¤Æu.]º„Š+ª½wöìY :`ffwwwtéÒÎÎÎ.°5fQòû@³fÍ0lØ0´nÝvvv¦¿¾éghorÿ?úè#Ìž=VVV=z4Ξ=«q»ÕªUÃáÇakk 5 ìííѾ}{4mÚMš4½½= -Z„]»vå»^‡п´hÑÖÖÖˆŒŒÄÍ›7±}ûvDDDø¹fffèÕ«>øà¸¸¸ R¥J055ÿ_Ð"Åqþ¬X±ݺuËóþ|€¨¨¨<ï»»»ãáÇK?æ%+ÿÐçúÑåûK¥R\¹rIIIâD; ¸wïΜ9ƒÿýWëçé{þèûùú¦_y/¿‰ˆˆˆˆÊ£ mmmaggGGGÌ;C† Q .Ô­[uëÖ…››>úè#(•Jõ31Att4 zõê055ÅË—/5vƒ~ùòe¾ûÑ¿øúúÂÜÜ ÌÍÍѾ}{´oß«V­Â’%KòÜð…‡‡£B… °¶¶†½½=lll`cc‰D‚`òäɨ\¹²¸Ža޾¿L&ÃüùóñÉ'Ÿ@*•:ýõI?C*Žý?tèzôèN:Áßß=zôÀ“'Oòì×Ò¥Kakk‹³gÏbÕªUFKƒ† bÚ´ièØ±#d2™Æ›yM,--±dÉtéÒ hÞ¼9š7oŽO?ýóæÍCPPP¾ŸÝ®];,Z´U«VÍw™ÜÇ¥¤œ?éé鈌Œÿ®Q£¬¬¬ðêÕ+pà@!**JˆŒŒ¼½½++«"§ß¥K—[[[é§ ŠîÛ·OH$jÿ¯W¯žpûömáîÝ»ùÞ”_»vMˆŠŠF]âÎ}ƒ†ú¦óâ?þ†¸~týþÚ^5kÖBBB„¨¨(áÌ™3‚™™Ù- ûùú¤Ëo¾øâ‹/¾øâ‹/¾ø*ý/ia›#Nž<QQQ_—/_Ö¸Žª»Vff¦Æ®k¯^½Â•+Wo½õ–Á›P>8rä®_¿ž·‰¥ `Ó¦M€V­ZiìvõúwÉÊʤI“pøða¤¤¤”ަ¤‚ Sú2ýJëþ_¿~óçÏL˜0ï¾û.*T¨€ü2™ Ë—/GXX˜Q¾·¦OŸ˜1cœœ\èõG Xµjž?®1ý~úé'9ÝmÕþÿÅ_ÀÄÄ»wïÎwÜ0Õq111)±ç®ôM?æÅ{üõ½~ôýþÚÄÄÄÀÇÇ@N×]WWW­Ëúü)Ìç*ýX~•^…&%%!::ZãëÁƒZ+êÚ*ó?XXXüË}ðÁoPîܹ#î£jÌ$M233ó Ž”fÚÒßéWš÷ëÖ­8|ø0¤R)–.] Ô¨QçÎÃÊ•+öݺté"ŽÁ·oß¾"­Û¨Q#T¯^´5?.þ^¯^=ñwtèÐpàÀ|×Wñ§é/ ç±ÒùGñ}®C|ÿ‚ܹsG\ÿí·ßÖº¬1Ο‚>ÿM¤Ëo""""¢’­Ð5èÍ›7cùòåEÚ¸*h¨m’M“‚L&[ 4½{÷†¹¹9är¹ÚÏÜ7¹gƒÍï»H$H$‚P&N€üÒßÐéWÚ÷ÆŒhÒ¤ êÔ©ƒ÷ßñññ˜6mš43†Æ€Úd…•»åS~A}xöì’““aee'''„††È š©n°U7æÚ®‹×oÆKËùc¬ôcþQüÇ_ŸëGß\.G÷îÝѶm[4lذ²²‚¥¥¥l´µµ-TYªËù£ë翉ôcùMDDDDT²õ±»ê†ª8ºZXXˆÁÊÔÔT<~ü™™™ÈÌÌDFFF¾¿ææP&“-ØYR:ýJûþ§§§«uQU*•F?¬¬¬@§.¹¯9¹\Ž/^ä»lZZ¬¬¬ÄÖ8P©R%µÿç'¿–†¥ýüÑ7ý˜ÿñ×çú1”Î;cÁ‚°³³Ctt4ÂÃÃñüùsÈårÈår´nÝ+V„µµu¡ÊÒ¢ž?ú|~q¦Ëo""""¢’Á¨AÃÂtO.*‰DR¨å^½z…ÌÌL˜ššâôéÓð÷÷×ësKÊMGa¿¿¾ ~oš¡÷ÆŒhÞ¼9""" P(ààà€%K–`Ô¨QFkµ’˜˜¨S§N‘×½wïžø{­ZµðäÉ“|+ªatt´ø~îåkÔ¨»wïj\_4|½¥ai?ôM?æÅüõ¹~ ¡C‡@ll,úõ뇫W¯æYfýúõèØ±c]³u9ôý|c¤_y/¿‰ˆˆˆˆJ©17^˜îÉ…•šš ¨R¥J¡×Q…ÔµkW½Ç2Ê=~q´œÔåûëËéW µÿ]»vŰaÃ’’‚ &`òäÉP*•èØ±#>ûì3£í¿ê&¿fÍšN”ðº{÷N:廜j»iii8þ¼ø~TT”ø{«V­tºÆKóù£oú1ÿ(þã¯Ïõc>>>J¥ Ô°þkO.—¼üÑ÷ó ™~å½ü&""""*­ÞHÐЕôˆˆ@ëÖ­QµjÕB­prrÂêÕ«áàà óççn™P7Àº|}2ýŠƒ!ößÑÑ‹-Ì™3ÿüó._¾,¶|ùâ‹/мys£ìÿÉ“'X¼x±Ö‰6^—žžŽ#Gކ ‚5jäYÆÔÔŸþ9`ûöíj³‰&%%!<<@άі––?'¿–†¥ýüÑ7ý˜ÿñ×çúÑ—L&CÆ  ßnë‰D Ö4,êùcˆÏ7dú•÷ò›ˆˆˆˆ¨´*tÐР…Bëëõà ª¢nˆ–†.\ØÛÛcïÞ½ðööÆ;#jÕªÁÚÚZc·§ßÿ€Ž;âìÙ³ >üðC´lÙõêÕƒ½½}7ÅÝRA—ï¯/C¦_qÐwÿÍÍÍkkkcÿþýâÿÖ¬YƒÓ§OÃÄÄË–-ƒÁ÷?%%3gÎDVVjÔ¨Ÿþ‹/†‡‡j×® {{{X[[ç;À·ß~‹””XZZâÀèÞ½; ,,,ЪU+ìÛ·5ÂÝ»w±téÒ<ë÷Ýwìß¿nnn°´´D… ЦMlÞ¼µjÕÊ÷š(íç¾éÇü£x¿¾×>”J%bbb'NÄ»ï¾+þ¯J•*èÞ½;~þùg´k×NÌk yþâó ™~å½ü&""""*­$´ÈvùòeØÙÙjcÝ»w[Àˆ#0sæL¼xñ-Z´Ð¸Î¬Y³0|øpܺu ={öÔºý¹sçÂËËKãÿŽ;†qãÆiü_§N0mÚ44jÔ(ßm¯^½‹/ÿ–Ë娳gø·••äÌ&›»õFRR† bôƒUÔï?dÈøúú"%%M›6Õ9ýuI?C(îý_¸p!ú÷ï{÷î¡W¯^yZ’ÙÙÙá矆ƒƒŽ=ŠñãÇ帿÷Þ{˜7ožxþåüwwwÇâÅ‹aoo/¾—-ò¯]»†±cÇæ;fßÔ©Sáíí-ÞÔç^÷ìÙ³P(pqqÁŽ;0kÖ¬uþx{{£cÇŽâßNNN°±±ARRþùçµeïܹƒ3f,ý˜ÿñ×÷úÑ÷û{xx`ÅŠⵓššŠôôt( dggcóæÍHKKøqãpõêUôíÛ× ç>Ÿo¨ü‡å7QéfÐæ?VûÛг'ûùù!00]ºtAÇŽQ¹reXYY¡B… Z'!8~ü8Ž?Žúõë£}ûöhÔ¨Þzë-T«V Ëåxôè‘Ú:R©Mš4Ѹ½úõë«ý}óæÍ7r°týþúÒ%ýJ]ö¿OŸ>èß¿?ÒÓÓ1iÒ$]O1yòdlß¾]ºt——‚‚‚ ¾ÿçÎCçÎñᇢC‡hÖ¬™ØBGåþýû×=}ú4<<<0nÜ84kÖ 5Bff&ÂÃñÿ~8p@­Îë–.]ŠË—/cРAhÚ´)*T¨€ÈÈHìÞ½{öìÁ’%Kàâ⢵¥Oq?ŽŽŽV(Š<ïÇÇÇ4ý˜”œüCŸëGGŽA¿~ý0vìX8;;£R¥JHNNÆÉ“'±uëVµ@Ýë-ý qþèóùÆH¿ò^~•F¶4$¢’I5Yff¦ÖÀñúaúQQ1hHDDDDDDDDDj¤L"""""""""ÊAC"""""""""Rà!©aЈˆˆˆˆˆˆˆˆÔ0hHDDDDDDDDDj4$"""""""""5 ‘ ‰ˆˆˆˆˆˆˆˆH ƒ†DDDDDDDDD¤†AC"""""""""Rà!©aЈˆˆˆˆˆˆˆˆÔ0hHDDDDDDDDDj4$"""""""""5† ÊY@ª`•V&†ØˆÔ¨0°è H,sÞSƯ6)õÛ¶©©),,,ðâÅ -""""""""¢7@ï–†K ÒÀ²7~xá¼þš) IDATZ`;°þL¿íûúúbß¾}ptt,×êСCˆŠŠÂ¬Y³xÖ‘Qé4´˜Ô^ü$~$ï^®>2þ*ŒÌZê¶í5j G¨[·.‚ƒƒáêêÊ#FDDDDDDDDddz eÕ‹.@ÆU yg®Úç´@|î Ù€õ0ݶÿðáC|üñÇˆŽŽ†B¡@PPú÷ïÏ£FDDDDDDDDdDz -{çl!eúû•wv‹¬@ÆÀ¼uN€QwïÞEŸ>}ðÇÀÄÄ .ÄôéÓ!•râg"""""""""ct]¹ÒZÀ¬Û@VÎ8†Èª†YÿOG–}Û¯¤¹@ê/ºï¨L&ìY³àåå8~ü8¦L™‚”””7š`öööhß¾=š6mŠ&MšÀÞÞ …‹-®]»Ô–•J¥¸rå ’’’ðäÉ}Zë>:tMš4ÁÆ1þ|ž¹DDDDDDDDd4:·4”ZçüÌNÎùùj}N«B… ‘ÿ·œ¬¾¼!„……¡wïÞX»v-6lˆíÛ·cÒ¤I 5x 83fÌ€R©„¿¿?6mÚ„äääB­«T*‹ØØXñ½#GŽjÖ¬‰€€¸¸¸`Á‚èÔ©222xFQ±Óy6‰EÎO!í¿÷ÒN Ã!ý¿÷„LJ@be؉‰Aß¾}qéÒ%˜››£sçÎO;;;LŸ>0cÆ :`X˜ý÷ññÓõØÕÕ•g#•: …ÔœŸóÿÿi–ó3ëõ@"¤dêDCyçwаaC0J+½.]ºÀÊÊ ¯^½Â¾}û ¾ý;wîˆã1¾ýöÛ<‰ˆˆˆˆˆˆˆ¨Dй{²ª[²Ô˜öÛ€”ƒ@ò6õå¤ÿßÂP0ð<^^^˜5kd2Ξ=‹E‹>>J¥ Ô0€ÌÌL9]˜µIMÍD²J•*¥Y³fb mïÞ½˜5kV±ÇÞ{ï=Ì›7ŽŽŽù.sìØ1Œ7Ní=¬X±B‡055éééP(ÈÎÎÆæÍ›‘––†qãÆáêÕ«èÛ·¯Öý˜;w.¼¼¼ ýùDDDDDDDDDºÐ«¥!d¿2®ò¶€…`Õ°ü0m¤’|dè¶í¸¸8˜››ãøñãX´hQžÖ|oʃ°mÛ6ܾ})))055…¹¹9ÌÌþ›&úĉ8{ö¬Úzwïþ{wU}/þÿ5ûL&™l“Éž! KH a‹‘%‚eQ­¢ÖêµµZÛÞVoÛ_o½õâmï½m¿úèµj½·µÖª(Úº ‚E(ˆ6Ã’@ !Bö=“ÌÌïtN3d&Ìdåý|ç|>ç}>K DEEa2™0›ÍÔ×׳eËüqÖ­[GBB×]wuuu¬]»¶Ïýضmo¿ý6çÎC§ÓÑÑÑÃá@¥R±cÇŽ^¿/„B!„B!Ä@ÜÒP¡ýtÐ&v·:ì<]åc;ñ<ãvvvzuB!„B!„b4 ^ÐP!„B!„B1&¨% „B!„B!„=IÐP!„B!„BáE‚†B!„B!„B/4B!„B!„Bx‘ ¡B!„B!„‹ …B!„B!„^$h(„B!„B!„ð"AC!„B!„B!„  !„B!„B!¼HÐP!„B!„BáE‚†B!„B!„B/4B!„B!„Bx‘ ¡⊣R©Ðëõ„††Jb!„B!„>hóËï¾ûnžxâ Z[[™:uª¤¶Cè–[náW¿úééé’ =ÜtÓM$%%QSSÃÚµk¯È4°ÙläææGWW¤°°pȶïÜÜ\2339sæ ›7oÇ/„B!„cV’@4Ñàv€«^’CŒLjµšØØXN:uE¦ÁUW]Enn.*•JùlîܹTWWS^^>èÛ÷—Ýn',,ŒúúúqüB!„Bq% ¡˜ÚaßÓW@Òý™ó 4ÿZß“ô#‹ÕjE§ÓPZZzÅÿܹs™>}:---ìÝ»­VK^^†äääKÍݾ¿T*V«€ššša?~!„B!„¸R (h8iÒ$¥¥Fbb"6›’’V¯^-)z…Q…@ô  íÛÁñ¨ÃÀ¸Âu 4ÿaxömýúõdffòþûïó½ï}Ïç:?þñùÆ7¾Aee%sçÎQiÃŽ;èèè ££ƒªª*Μ9ÃÑ£GùôÓOÙ³g.—kXömüøñüøÇ?æÅ_äÓO? ú÷¯X±‚øøxJKKÙ´iSŸëΚ5‹Ù³gãp8X»v-MMM}®Mcc#­­­œ?þŠº^322˜>}:uuuüõ¯¥­­ €„„ƧSkûˆŒŒD«í.ª Çþ%‹…›o¾™ºº:Þ{OÞ !„B1Ö]vÐP­VsÓM7qÿý÷3yòä^Ëëêê$5¯@á?î6þ?hyýŸ7ÿ ¢žƒ°o‚ã@w0QôÕjE«Õ¢Õj1›ÍDEE‘‘‘ÁâÅ‹yä‘G(//çé§ŸæÝwß²}ŠŒŒä{ßû_ûÚ×Ðh4„…… Jаªª »ÝŽÝnG¥Ráv»}®Mnn.Û·o¿dÀàÈ‘#9räÊ»VÃÃY°`¬_¿^ ˜tttÐØØ8hÛTLL ‡ã²ÎïHÛÿ±äšk®!,,ŒcÇŽIb!„Bq¸¬ all,O=õ³gÏÀéträÈŽ?NYYMMMTVVJj^a4 `ZŽBï€¡Ú 8¡á °®ƒÐ{¡vŒ |ðAÖ®];è†3gΰzõj, ááᄇ‡“••Åœ9s'99™§žzŠ””žyæ™A?öåË—ó‹_ü‚°°0œN'ï½÷Ï>ûì üVii)¹¹¹Fâââ8wî\¯uÔj5‹/F£ÑpâÄ Ž=:*òÍf#''‡ÃÁöíÛýDƒíꫯF§Ó±cÇŽ^y×f³PVV6hÛ”'hh+ÃáÚÿ±"99™´´4Ξ=+ "„B!Äà’AÃèèhÖ­[GRR<óÌ3¼óÎ;ÔÖÖŽúƒ7 tuuár¹†ìÁ}, Y ¨¡õÍ‹ò_‡®SPó8vanw€Ñ9ž3øÃ°aÆA655±}ûö^Ÿ«ÕjæÌ™ÃÏþs’““ùÞ÷¾ÇúõëuR‡zˆG}•JÅöíÛyâ‰'8}úô ý^UU---˜ÍfÆç3h8sæLbbbhmmå“O>ù'!!›nº Ft·z¬ªªôßµÙl¤§§ÓÞÞΡC‡¼–Y­V"##9sæŒßÀ\ Û"AÃáÜÿ±@­V3oÞ<Ün·¼$B!„â qÉ áÿüÏÿ””DYYwÜqG@c€åääpï½÷rÕUWIEEÛ·oçé§Ÿ¦¹¹¹Ïm.\ȪU«˜>}:¡¡¡?~œ/¿ü’×^{í²ZÅÆÆróÍ7“››Ë¤I“¼&C8~ü8Ë–-ësûäädî»ï>,X@\\---:tˆ—_~™­[·úÜæG?ú·Ýv~ø!ÿöoÿÆôéÓ¹ûî»ÉÍÍ%::º_Ç?é§.hß*¸Ý@—÷:íÛÁpM÷ºmWXãµZÍÞ½{©¯¯§ªªŠªª*ª««9yò$ò¹\.vîÜÉÃ?ÌúõëQ©TÌŸ?ÿ’ß·xñbî¹ç²²²p¹\òÎ;ïðá‡ö¹Ý=÷ÜÃc=†Óéä7¿ù Ï=÷ÜÙKKK™2e v»Ï>ûÌk™ÕjUº%oÙ²…ööv¿ßc±Xˆ'>>ž„„"##q¹\¼üòË´´´ iž˜7ož0ìì켬 ÕW¾òÒÒÒ8pà@¯t€î—7Ýtï½÷žÏ´˜1cÇŽÃétz-ó´ ï«›y Û˜Íf222HKKÃb± ×ëioo§©©‰ªª*öíÛçó>xqÐÐ`00uêT&NœHhh(çÎcË–-}žË`ì¿J¥"==])?BBBhjj¢¼¼œ/¾øbHòRJJ “&M"..³ÙLkk+gΜaçÎJë`¦hh(÷Þ{o¯tøæ7¿Ùëû7oÞ|EvûB!„b,ë3h8þ|åê»ßý†ÿøÿàöÛoG­V+Ÿ§¥¥‘––ÆìÙ³¹ñÆ{=Ì„„„ðë_ÿš%K–(€iÓ¦1mÚ4î¼óNž|òI^~ùe¿zÿüÏÿÌC=¤<¬_Ìh4ö¹ÿ«V­â‰'žÀ`0Ý--  ,`Á‚<ÿüóüú׿îµ]xx8‘‘‘Øív~ö³Ÿq÷Ýw£R©úuü=ýèG?RÖZ[[™:uêðå5è2 ë ¸ÛºgOÖOºz¯ÖUÒý·.Ú>¼².®ØØX, ‹…”””^Ë¿øâ þë¿þ‹ÂÂÂ}QQÕÕÕX­VBCCû\÷…^`ñâÅJþU©T,Z´ˆE‹‘››Ëš5k|§L™ÂOúS~ò“ŸðÖ[o Yúy‚†žãó4<Ý’Õj5_~ù¥ß`éܹs™8q"f³YùÌår¡R©¨¯¯ò€¡N§S`»víºä5o0HOOWº`û2}útl6.—Ëç÷ RSS•<ÓSRRãÆãøñã~[<º=@vv6sæÌé5шÙlÆl6ÇÞ½{{mç nAwÐ0>>ž%K–xåw»ÝÎÊ•+yíµ×|æá`ìtt4‹-Rº1{Ê¡ˆˆ"""HNNfݺu8ŽAÉ;‹…k¯½–¤¤¤^ŸgffbµZY·n]ÐÓ?**JI—ÈÈHt:--->¯i}(„B!ÄØÓgÐð–[nàË/¿ìÕ¥«? sçÎåÉ'ŸdïÞ½TTT˜˜ÈøC®¹æ222¸í¶Ûxýõ×½¶S«Õ<÷ÜsÌ›7²²2~ö³ŸñÅ݃ãÍœ9“'žx‚qãÆñøãSXXès~øayä:;;yýõ×Ù²e‹Ò Íh4b4ý=iðŸÿùŸ466²fÍ>ùäêêê?~<=ö ,ࡇâ‹/¾èÕâÐóÍ5×`·ÛY³f ………”——_Öñ_¬gÀñRÁ†Á¦• œgºÿïnýt°¾*Ã?Öë*ïþ[“på]\UUUÌ;W ,DFF’••ÅìÙ³ÉÎÎfÖ¬Y¼öÚk<øàƒ>»!_n  ¼¼ü’A‡|ÂÂBÚÚÚ˜:u*?ýéOÉÌÌäž{îaÿþý>'TùùÏŽF£á/ùË ¡{LÇÎÎNt:ãÆãðáÃäææbµZilldÇŽ~·ohh °°††ijjâÚk¯eüøñÃ2v]WWN§FCee%¸ä6ž€¡§5X¯¸V«¼<¸pá½Ö?~<†ªª*¯–‹…%K–ÐÐÐ@AAß}tûùóç“MKK ›7oæôéÓ¨T*"##™4iÙÙÙ477û Dy‚t©©©dggSRR±cÇhmmeæÌ™L˜0ÈÈHÆGiiiÐ÷?!!n¸½^ϱcÇ(**âüùó¸\.&L˜À¢E‹ˆˆˆ ==}PZÚÙl6V¬XÉdâìÙ³ìÙ³‡ÊÊJÜn7“'OfÁ‚Øl6âãã}vã$ýËÊÊ”keõêÕèt:>ýôS™E!„Bˆ+DŸAü¼<ŸbýÑÖÖÆâÅ‹½]õõõ|ûÛßfëÖ­DFF2cÆŒ^A³»îº‹yóæQ[[ËÊ•+ihhP–pÓM7ñÁ””ÄO<Á­·ÞÚ«¥É׿þu^~ùe~ñ‹_ôûamÍš5¸\.î¹ç¯ dQQ÷ß?o¿ý6S§NåßøF¯ aWW—òà5ã¿XÏVšžï.ê¿7ôqýý9³ù÷Ý­ #þT=nº[¼×¿’8N*++½Zàlذènáôì³Ï2eÊ~þóŸ³hÑ¢~·Rš5kááátvvöô¸óÎ;½þ¿{÷nn½õVÞ}÷]&L˜À£>Ê|à•¯òòò˜2e N§“ÿú¯ÿ"22’믿^i½WVVÆûï¿ï·\0Ò¯¼¼œ´´4ìv;‡&&&†™3gâv»Ù´i“Ï ™‡'Èè¡R©”–Z— ²†«®ºJyA…ÉdòšÁ×—‰'øMã””¥tEE…Ïu<ÇÜ3PªÓé¸þúëzÍ$Ìí§OŸ®¬þú׿zÝÃÏŸ?¯´ô׊½gË̉'òÞ{ïyçæÍ›IJJÂd2aµZ}–Uì¿Åbá†n@§Óùì~{ìØ1&L˜À¸qãzž1›ÍÜpà ˜L&8ÀÎ;•VއbÊ”)DGGc±Xz Mÿžéài±+“ !„BqåPû[ Ñh”¶@°Ýn·Ï–qÍÍÍJ—¨qãÆõZîéŠûüóÏ{=ìôÜþ·¿ý-ÐÝ]Ùn·û\ºÇ­Šˆˆè×~¯^½“ÉĆ |¶bt»Ý¼ôÒK@wë§‹[,z޹³³s@DZ?þ˜'Ÿ|’'Ÿ|Ògw衤2ý= z ŸÖ¾ªïw¡µÜ€TæÑuaL›6ãÇ÷úÓó\\¼ìºë®»ìï?sæ =öÐÝ’É ¿\Z­–ý×U®úúú~cGGO?ý4‰‰‰Œ?ÞkùòåËøüóϹï¾ûصkÿþïÿÎwÞÉÊ•+ùîw¿ËÆyôÑGí¸dÞèöÊðï¿ÿ¾Ï{xll,€ß®ÁV«UY¾víÚ^ç­««‹êêj¯nèÁ:þë®»½^Ͼ}ûü¶" Pö#˜.\HHH'Nœ   À+`èqäÈŽ;Ö+ðŒô÷ðäÃææfššš¤æ$„B!ÄÂoÐ0$$DéÛÚÚ:h;àyð7™L^Ÿgdd(*»wïö»ýæÍ›•_ôøõ¯Óé$++‹7òÍo~‹ÅrYûæÎÓ%Ú—ââb ;Èêiñãá öÕýÙßñûòùçŸóÒK/ñÒK/]²Uâ`sÿýùÔÓY¥ÿûC|©w 5 ñ$Ž¦×Ÿ¾–ùz ïKqq±rþ³³³ûµí¿üË¿ÍñãÇyî¹ç|Œ='HOO÷Z6sæL »ÅáüùóùÉO~ÂìÙ³™8q"óæÍãü#jµš‡~¸WKÆ`9uên·­VËŠ+ˆŽŽ¦ºººÏ{‚?žq%+**†¬{xx8·Þz+°~ýzvíÚ@ff¦Ï{–Gbb"jµš¶¶6¿RÏ1•——ûœÑ>$$„°°0êêê0™LÜ|óÍÄÇdzqãÆKŽCÈö3fÌ@£ÑPZZÊ… |®ã Zùkéæéž\RRâw²Oër_-uÙ»ÝN||<|þùç½–«T*òòò°Ùl\¸p“'O5ïÄÆÆ’ššJWW;wîô»ÞþýûÙ´iS¯.÷ÁHOY<”Áv!„B!ÄðóÛ=¹¥¥E™0árƒlᯛmÏ–w}µt¬­­¥¥¥³ÙLzz:ü±×ò>úˆ[n¹…ïÿû,\¸ýèG|ç;ßaݺu<÷Üs~g/Õh4Ê>Üu×]¬\¹ƒÁ€Ñhôú»g ðâAæ=‰žÝŠ/÷øG:O·dµ©{ædë«Ðú´¼ê½žúïÜ£¬qÊþýû{Ñà-¾òóó/{\<£ÑÈõ×_Ï5×\äI“0™L˜ÍfBBB”`qº6ÞrË-Üÿý466òƒü Ï.º—ÒÔÔD]]‘‘‘ÄÇÇ{-ó´Ðzá…xê©§¼‚¢gÏžå?þã?ÐëõÜu×]|ûÛßfíÚµA?mmmTVV*³;N6mÚ4  Ÿ'À6TãN˜0üü|šššxë­·”Ö\ûöí#))‰””òóó9wîœÏñä<Ýjýµ`ÓëõJ뺃ú\§gë;NÇŠ+P«Õüå/¹¬–qÝ^«Õ2iÒ$åZò%22R™äÄWK7³Ù¬\}µ¢¢¢hll êñgeepüøq¯üf0°ÛíL›6 ›ÍFEE7nì÷KƒKñtM///÷yl}ìAHÿž<÷†þ¶îB!„BŒn~ƒ†.—‹óçϧ<| ¥ž­ºŒFcŸMííí˜Íf¿Á“Çsÿý÷“““÷¾õ-/^̽÷Þ˪U«xñÅùßÿýß^í&“I öyZútvvÒÙÙ‰Ãáðûïž<Á¾ZŽV®p;@ª0p5å»`\øV‡šî¸ÎêáÛמÈøãkÖÕ`øÊW¾ÂÏþs"##9}ú4GŽ¡¡¡A™„窫®"**ê’³{Ü}÷Ýüìg?£±±‘»ï¾;(/ôœ¶'O@¼¨¨Èo@díÚµÜu×]ÄÇÇå³µ[ JKK• ÅîÝ»ýúûb0”VUC4´Ùl²wïÞ^é÷ñÇsçwb2™˜7o7nìµ}tt4ÐÝBΗÈÈH ;Xæoéž3ÃßxãÔÕÕ±aÆKŽ¥èö Ê}Ï_@Ê”®««óÙJÐ3<†ÛíîsfgϵãëåÒ@÷_­V“œœÜ]HjµäååFDD±±±¸\.JKKÙ³gOÀcþú“˜˜ ¬Ûs0Ò¿gzòšŒg(„B!Ä•¥Ï‰P¾øâ n¸árss‰ŒŒôûð:zvõJNNöûàc6›•‡ëÓ§O÷ùࡇ"99™Õ«Wóõ¯Gy„ùóçs×]wyuÃnnnVfnݾ};O=õT¿árº'ZÎî‰O´éઇšÀ¼ ÂþÇx‡Ú¿¹ÖytèwÑó°Ýs2…‹yƒÑ‚fáÂ…<ûì³TVVrÛm·QXXØkßÿþ÷äçç÷êÚîËC=Äc=F]]÷ÜsEEEïcll¬ÒëË/¿ôZvêÔ)233•o¾ôìöh±X%h蹎‡Ï4¼ÉÉɨT*ZZZe}é«Kikk+Û¶mcéÒ¥Œ?Þy²ÞV IDATgÀÕ¨ñ5æžF£aÚ´i@w—QAïžùêäÉ“lÛ¶­_-⺽gß[ZZü¾Ì¹T×XÏu[SSã÷;<Ýú+++}ŽÙ7Ðý QZŽOž<™††(//çàÁƒœ:uªßõ—çºÈx¥ÁHO×äööö!»v„B!„#ƒº¯…ï¾û.ÐÝêÎ3iÃP9yò¤òp·hÑ"¿ëy&hooç³Ï>»¬ï.//gÍš5<üðÃʃç’%Kz­çËpéÒ¥hµÚ;úêž<šu~Ù=¦¡>pAËëpávèè1Üœ~öß×=<ôûçi}•––æ7pëiÍ33?öØc¨Õj^|ñE¿Á.Ï}ÏQÓétüâ¿à±ÇãĉÜvÛmA J¾/..öšèÅs Â?Æ6ôÅ3&_ggç%ÇÇ(O𨺺zÀ-B{Žý7R”””(“Jxö¯'÷³ÙÌ-·Ü„ úüþ´´4æÏŸ¯ü×®]ý ²½§[±¿}f³Y9æK ý½0ÒëõJàÔטƒìÏ´íµ×X·n}ô»wïæøñãƒ0„´T¿œñn#ý/>CùÒP!„B12ôÍÚ²e ûöíàŽ;î`Íš5~g¨ ¶ŽŽ6lØtwÉôw.¦xfn}íµ×ú=aË—_~©!<ƒå÷ôâ‹/ÝDüîw¿Sºs]®`·4œ?>«V­bÕªU}R‡Jë@]Þã˜ÏAí#Ðô?Ý3&vOŽÒydè÷Ï3ΛÕjå¶Ûnëµ<99™«¯¾€={öõ·5Ò­ß_K•J¥ ý cbbxíµ×¸ýöÛÙºu+_ýêWƒÖ2))‰ïÿûüò—¿ìµÜ„_¼x1Ó§O÷ùßøÆ7Ø´i“߉*å Zø›Ìárx®Ý´Úìûøîï edd‚Ùl&;;›Ûo¿£Ñ¨œ_ÁE½^O~~¾W^ñu…î“§‹z°¶÷—Åb鵩©©ÜqÇÊX¹þºßzλ¯`´^¯gÅŠ Ž9Ò«Ëy ûßÔÔ¤œ_Ý¡à ÒMš4©ß/ž‚‘þžõëúB!„BŒ\—l>÷ÐCñÖ[o‘œœÌ]wÝŲeËøè£øôÓO9uêUUUÊÃm°Èñ‹_ŸŸOHHï¼óO<ñ;w£ƒ)S¦ðøã“‘‘AII O?ý´ÏˆÀápàp8èêêÂb±’’Bvv6ßüæ7Q©TÔÕÕñþûï÷ÚvË–-<ûì³|ûÛß&??Ÿ;vðå—_RPPÀ¨««£¾¾^ùsñ¤&žÿ«¥á<ÀܹsîV3=gŽ_Bç!¹Zÿêt„ðŸ€: šžžý{ï½÷¸ÿþû™>žO>ù„ææf&OžÌ£>ŠV«åðáüýöÛ—õžn꾺Böät:9sæ )))|ç;ßáĉJÇf³‘››ËÃ?¬}uOÎÎÎæùçŸ'..Ž·Þz‹_þò—h4"""|þfCCƒß–xwÝuÅÅÅ”––ÃìÙ³ùÞ÷¾Ghh(/¼ð[¶léµÍÛo¿Í}÷ÝGzz:üãY³f ü1MMM¤¦¦*“ ÕÔÔ°fÍšA9‡Féjy©Éúây)`µZ Åétb2™°ÙlØl6:::4#ó¥èt:4 ÊK³ÙŒÅb!;;«ÕŠËåò9&á™3g˜4i6›ûî»Où¼´´”Í›7+ã<úz)áp8øóŸÿŒÃá 99‹ÅÂÕW_Mmm-uuuFbbbÈÌÌ$--íÛ·søðá mï) ôz= .¤°°ÐÐP²²²HII¡  €üü|eÿ- 6›’’ ;ˆî9gF£‘¨¨(p¹\ÄÅÅ1þ|bbb(++cÛ¶mA?~§ÓIII &L`Þ¼y¸ÝnJJJ”{ºN§Ãf³K\\õõõ^3‘CQQ)))ÄÄİlÙ2eX[[˾}û8~ü¸ß®»Ù^­Vóõ¯]i¥æQWWÇÆ©©©á‘GéµìÕW»§_ONN榛nòZîv»q¹\h4\.`×®]—œI{ Ço6›ùêW¿ªƒÛí¦­­ µZÁ`@¥R)ÁÅýû÷Ô¶¯²gòäÉÊÿN'N§N§Cyy9;vìðš (Ðô¿øpýõ×{íƒ'PÝÙÙÉÑ£GÙ»w/ÍÍÍR£B!„bŒ¹¬úêëëyôÑGùÍo~Ê+ÈËËÃn·“ <Ÿ?~Pf Ý¾};Ë–-㡇"''‡ŒŒ :;;9räo¿ý6ï¼óŽß‡F“É„Óéôšá¸³³“ŠŠ >Ìßþö7vïÞ}ÉýÞ¼y3›7of„ ,X°€ŒŒ ÆG||<&“ £ÑèsVÉ`Ϟܳ5š§ûÙpë*‡Ú†ˆ‡ðÿÏ{Yûf¨’a Bwô¥K—òío›™3g2aÂ:::(..f÷îÝüßÿýß O¶aÃn»í6¾õ­o‘••Ett4---lݺ•W^yÅ+Pè«¥aEEE¿‚†Û½{7¿ýíoÉËË#))‰èèh:::”ÖY¯¼òÊ%Ç3+--å†nàž{îaÖ¬Yddd Óé(,,d×®]üþ÷¿¿ì™xÂf³)×R cªmÙ²…üü|¢££éêꢾ¾žÒÒRNœ81¨“;h4œN'.—K ø8jjj(//§¸¸Øoþkiiaݺuèõz:;;{ݧ.wÌÔcÇŽ¡V«™1c‹…ŽŽΟ?OQQÑeµÈö.—‹÷Þ{üü|l6 =z”Ç+÷ÅÇ“‘‘AMM ………^ãŠ666²gÏâãã WîåMMM”••qäÈ‘ËÎ=~OúϘ1ƒÔÔT"""0´µµqòäIÊËË9yòd¿‡ÅèÍ›7S^^NVV±±±¨Õj\.åååœ;wŽââbŸ-üMÿ‹ï;wî$;;³ÙŒÃá ²²’Ó§OS\\EEE‘ŸŸO||¼×çn·•J…Ûí–D ƒÏó#„B „ …B!„~ÅÅűråJ´Z-n·›³gÏR[[Kkk+ÍÍÍ4At:gÏžåìÙ³TTTP[[ËêÕ«%a„B HŸAÃ;ÕJqq1}ô‘ÏuæÎËôéÓinn楗^3 sà 70nܸ~mÓÖÖÆþðÉU#'/8p€‚‚I!äúB¹ÿ\FÃ’%KÐjµ;vŒÏ>ûŒææfÉ#ÔÁƒ9xð ò½^/‰"„bÀ¤¥¡f³YA!„B\ÑRRR £½½-[¶àt:%Q„Bˆ+„ ýx÷ÝwQ«½'—¶X,Üzë­lÞ¼™Ó§O{-—nB!„b,‰ŽŽ ¡¡A†B!ÄfXƒ†·ÛËåq ÓÞÞÞë3Nçµ¼µµUrâŠ4’ïßBò"x"""¤Þ+„B\†,hh6›ÉÈÈ !!èèhL&€ššÖ®]Ûçö‹…iÓ¦a·Û ÅápPUUÅÁƒ{µø)T*<ð€`lii¡µµ•ºº:ÊËË©¯¯ï×÷¥¦¦’MLL n·›ÊÊJŽ;FIIÉ ‹Ýn'33“¸¸8ôz=µµµ\¸pC‡QSSãs›ûï¿“ÉäõYyy9ï¾û®òИ’’Bzz:111=z” íóµ×^Kff¦×g999äääôZwÛ¶m:t¨Ïï‹%''‡„„L&”••±{÷nLj˿æ¿@Ï_0Ïó_rr27Ýt¿ÿýï}¾ð¸ë®»ˆŒŒdóæÍ9rdÈÄV­Z…^¯gÓ¦M;v,(ùgöìÙL™2…¶¶6^}õÕ>÷añâÅdddpìØ16mÚ4(÷ïá¾~rÿ !!!Øívl6V«•ŒF#;w¨hÐî? ÛÆò?Øå÷hË?Ã]~ Fú÷'ý‚yÿHþîúÓÒ¥K?~¼Ïzè#<Òëó?ýéO455ˆò?''‡Y³fQRR¾}û˜={6ÉÉÉ477SPPÀ… ÈÍÍ%55•Ž;ÆŽ;µ·P õ÷á~þ«õ/!„#,h˜——ÇÌ™3{u÷õèÙ‚Ï—ÌÌL,X ø€ÊÊJººº°ÙlÌ›7«ÕJvv6çÏŸ÷t(•JŲeËHII¡±±‘­[·rîÜ9âãã™?>Ì›7ÊÊJªªª”mÝn·òF ++‹üü|BBB”™©N'ÕÕÕÔ××S__Ï©S§‚ºÿü±òoÏì‡GŽé÷쇞7âœ;wަ¦&¸úê«INNÆjµ’™™É—_~9¢òo ù/ÐóŒóHþ»¸Òz©këâm†Â¢E‹ˆŠŠâüùóìØ±#¨÷¿ .PQQAbb"ÙÙÙ~óÖ¸qãÐëõ455qæÌ™ ß¿‡óú $ÿÓôéÓ™3gjµš®®.***¨©©¡££ƒ¶¶6:::¨®®úý'ÐãFúæò?˜å÷hÌ?ÃY~3ýš~Á¨? 4ÿŽ„úÓÅ­Î=¿[VVÆÆûÜv¸ËOp+**ŠpðàA ·Ývf³™S§N±aÃT*·Þz+F£‘„„„A ´þ>œ÷¿±^ÿB1‚†S§NàСC~Œý1›Í,\¸P©€ô,”.\¸ÀúõëYµj6›3fŒ¸ ¡Ûí¦¹¹™ææfå3O¥Äb±°téRl6ùùù¼òÊ+}.ý׿þÕëÿ¼ùæ›Ü~ûíJ¢¸¸8¨ãCM™2…””ÚÚÚxã7èèèP–•••±nÝ:î¸ã, ,àÍ7ßôû]žý åܹslܸ‘Ó§OÓÙÙ9â/’®®.þüç?{µÄhoogÆ ÜsÏ=Fâââz=t wþ fþ ôü dû@òŸ¿JkXX:ŽÚÚZ »5‰V«òJëŒ3?~ƒ†Ü¿‡[0ï_a4¹úê«øä“OسgÏ€½ÿzüÁH¿±Zþ£üéùg$•ùý`¥ß@3ÿŽæúÓp”ÿžüÞ³;>øîë µKÕ߇ûþ7Vë_B!fÐkÙ»víÂårÃ×¾ö5f̘qÙc¯xÆñTl}éùƪ瘣Amm­òÝf³ è;ÊËË•3hMXXÐýVÔŸž]Júú}O¥q´£Kñœ?_ãrôüÛŸüèùëïöÁÈžJ¨ç~Kxx8*•Š &xUZ;;;éêêô4·X,,Y²•JÅçŸÞg·º@óÛíV*&OžÜ+¦§§£Ñh8{ö¬ÏVˆÞ¿‡S°ï_‘žž®Œ6X¼û»ÿzüÁJ¿±\þ£ü©ùg¤•ùý¡H¿¡Ê¿£½þ4Ôå¿¿ áHÓWý}8ïcµþ%„bà½{ò‰'xë­·ÈËËÃn·sõÕW“››KQQ_|ñ…ß·K*•Jys5eÊ&Mš„F£QÆAêùo‘ÚÒP«Õ2aÂ’““‰ŽŽF§Ó)<û?ÐV<‡ƒöövŒF£RÈCÏ·†žÖJ¾´µµáp8ÐëõDFFRZZês½Áœ•n$T†Grþ Fþ ôüõwû`ä¿¶¶6"##•JëĉiiiÁáp0qâDöï߯TZû-·'Pèyˆ9wîœò–~0óÏ‘#GÈËËÃ`00qâD¯.ˆž®É}=Pôþ=Ü‚}ÿÏ@ûƒ9;³¿ûO Ç¬ô åÿ`–ß#5ÿŒ¤òc ¿?é7Ø÷ï±Rêòß“¯GzÐÐ_ý}¸ïc­þ%„"õáË­¢ªªŠõë×ËÌ™3IMM%''‡ÌÌLöïßOaaa¯n#:NùÝ®®.š››q:¸\.¯¿/þ÷H“––F~~>&“‰úúzª««éèèP ü„„L&“W3ýþòT‚Yðö¬€hµZŸÝ<<éÞ×HÏejµ:¨c/ŽD#%ÿ+ÿzþú»}0òŸçzÐëõ¨T*ÆOqq1äååyUh»ÒÚÔÔDkk+&“‰ˆˆbbbˆŽŽöû@¬üãp8(**bÚ´idgg+AC³ÙLbb"]]]œ8q"è÷ïáìû×@ôlE1ÚŽ?˜é7šËÿ¡(¿Gbþ)åG ¿?œéìü;ÚëOC]þ––†þêïÃ}ÿkõ/!„ƒ4liiÁjµÒgåÈóP|)çÏŸçÃ?Äb±““Cvv6¹¹¹ØívÞ~ûm¯ÊÃáÀét¢Ñh(++c×®]£.qív;Ë–-£¹¹™·Þz‹ÊÊÊ^ëxf’h׳٬TŽ/\¸´}¯««Sþm±XüŽû¢×땤ýuq¼¸B1*r ù7˜ù/Ðó×ß탑ÿ<÷$£ÑHbb"f³™ãÇãp8ÈËËcâĉÊXA—sÿ ħŸ~ʉ'Ðëõ¬ZµŠˆˆ–.]ʺuë|>Ô3ÿ}Zi¡±xñb¢¢¢†,züC‘~#¹üŠò{$çŸá.?‚ñûÁL¿Ô‚™¯´ a ÷ŸÑ4¼Tý}8ïc¹þ%„b`4ÀþÖÖÖ’––FHHv»µZMWWƒääd/^ŒÑh¤ªªŠíÛ·ûü£Ñ¨Ün·ƒÁ@tt4©©©\{íµ ÚÚÚØ¶m[¯Ù³êëëQ«Õ$$$Á´iÓ7n‹½^ÑhD§Ó¡V«q:ƒ>X´Ñh$''€ââbêëëû\òäÉ l6.\P Q³ÙŒÝnç+_ù ñññ@÷,†GõÚÞjµ’––@kk+Z­§ÓIxx8'NdÉ’% öíÛÇ¡C‡‚~¼•••dee¡Óé˜4i’2.@\\Ë–-#&&F ‚ôU¹ còäÉùLiZ­–ñãÇ£Ó锿{æ_ãÁÄÆÆ2nÜ8\.{÷îõù½v»¸¸8Z[[9|øðˆÊ¿æ¿`ž¿lhþS«ÕL:‹Å‚V«eÛ¶mJ—µ¦¦&¦M›Ftt4*•ŠC‡½{ªF£aÖ¬Y”””xµÆ®¯¯Çív“””Drr2§OŸVŽm0òOSSãÆ#44” & V«9xð`Ÿ3#zÿîë7˜÷¯>(×××3~üxŒF#™™™DDD(çK£Ñx¥m°ï?0Òo4—ÿÁ¼ŽÆü3ÜåG ¿húzÿ fþîút·Nˆˆ ¶¶–’’’]þ{êÎûlA0‹Å IDATD%î§Ÿ~ÊÒ¥K aåÊ•tuuÑÕÕ…ÑhÄívsðàANŸ>ÍÌ™3/ù¦~áÂ…½>s:(­ˆ‚­¹¹™ 6°xñbBBBXºt©’/<•mÏ8U¿eÔjµÜzë­^yÁã–[nñª`´··óÎ;ï ê¹())áàÁƒdgg¦¼!õ8yò¤Ò].˜†3ÿ’ÿ=Á8ÿä?ðîòR]]íUInii¡¢¢Bi)=oº¿øâ ¬V+ãÇgÙ²e¼þúë½Æ fþ9pà×]w—ËEQQQŸëãþ=œ×o ù'N:ÅúõëY¸p!áááddd‘‘Ñk½Á¸ÿzün?ÚËÿ`–ߣ1ÿ gù¬ôVú ´þ0Ðü;êOžñF="##HJJòÚ7èn`°eË–Sþ´1 Zäþ·`Á%¨~qZ\}õÕJÑ“¦ëÖ­ózŽëõ/!„A Bw¢µk×2kÖ,âãã‰ŠŠ¢««‹ÚÚZ***(,,ô;k—V«Åív÷šå«©©‰ªª*JKK/«{\ii)¥¥¥DEEa·Û±Z­„‡‡ŠN§C«ÕŽÈB§¤¤„·Þz‹™3gƒÉd¢³³“Ó§OsèÐ!*++•·¯¾*½ìÙ³‡ÄÄD, &“ §ÓICCƒòþ(–²²2Ö®]ËÌ™3‰%::—ËEuu5ÇŽãèÑ£>Æ*• «Õêó;/î&Ì \ú²}ûvöïßOzz:v»]„Z§Ó ê[ÎáÊ¿ä¿@Ï_°Îÿ@ót³ÓÚÚJHHÅÅŽ–?~|Ø+­›7o&""«ÕÊâÅ‹}>x+ÿ3{ölÂÂÂ(..¾ä6ÁºçõHþ –òòr^}õUÒÒÒ°ÛíÄÆÆêÕ%w°î? Ûöò?Ðò{´çŸá,?‚™þÁJ¿Ö’GBýÉb±×ës£ÑØëó‹[Éwùïùl8»r«þ>ÐûŸÅbñ{¼º777ûLDZ^ÿBqùT€[’A!ƶÈÈHî¼óNÔj5k×® êÄI¢ÿ<—Ëô®ÑBòôB!„J½I’@!Æ6‹ÅÂõ×_Z­æèÑ£0†c\2!ùGHú !„Bô‡ …bŒQ«ÕÄÅÅaµZINNV&²ªªªbëÖ­’@B!„B!.I‚†B1ÆFn¹å¯ÏŽ;ÆÎ;¥…B!„BˆË"AC!„cÚÚÚhii¡ººš .PRRBuuµ$ŒB!„BˆË&¡!„B!„B!¼¨% „B!„B!„=ùìž|âÄ I!„Bˆ!”žž.‰ „B!F ii(„B!„B!„ð"AC!„B!„B!„  !„B!„B!¼HÐP!„B!„BáE‚†B!„B!„B/4B!„B!„Bx‘ ¡B!„B!„‹V’`tÙ¶mûöíC«Õòï|gLkII ëׯ÷¹lùòåLš4iP·TQQ}ôßÿþ÷‡üø…B1úL:• ÐÙÙÉ /¼0"öéšk®aÚ´i8Nžþy9IÃìÁD§Ó±mÛ6:$çOò¿B š1ÕÒÐårQ__OKK˘=a †1Ÿ9;::¼þ¯R©†tûÑ~üB!„Á Óéhoo—Äó'é'„W1ÑÒ°µµ•õë׳oß>%ÐbµZ¹îºëÈËËS'Ì44c>svvv’˜˜Hbb"IIIDGGóÿ÷C¶ýh?~!„B ½^ÙlÆl6àv»ikk£¡¡§Ó9ú´Ý ¿Ðrþ$ý„bŒß/wÅÝÛùKûËu¦ÙÕH¬&¹ºkùšñ›D©­Ãv<óÌ3œ;wŽ)S¦0aÂÚÚÚøâ‹/X»v-õõõ,Y²dÈ÷ëÍ7ߤªªŠ¨¨(î¼óÎ>×Ý´i‡&44”ûî»FãwÝ®®.àÊhi8mÚ4¦M›æu®‡rûÑ~üâ^yå.\¸ÀŒ3X°`$ˆBô“i)D< nTΕôèKxx8wß}·Ïen·›ÊÊJŽ9‘#Gp»Ý£â˜<-­†º.rÇw`µZ9pà’¹FÙù“ôrý 1ú]2hèÆÍS-OðvÇ+Êg*T”;KyÝù6tü•ÿöG2´S‡åÞ|óMÎ;ÇÍ7ßì X´hÏ=÷7n$-- & é~eeeqæÌ*++)++#%%Åçz---9r€ÜÜÜ>†+V¬\+„B1 ©T*âãã‰'++‹÷ߟ¶¶¶¿ß~ø¡œ¼QLΟ¤ŸB Ô%Ç4ücÛ3¼Ýñ •‘ÇÌOò—ˆ6Dòdè3D¨¢hp×ñÃæhv7ùÎ×ÔÔ°wï^ÒÓÓ½†tttðµ¯} µZÍÇ<äû6yòd"""øüóÏý®WXXˆÓé$$$„)S¦HŽB!İÓMc>˜¿–GÁ|»¤É@°víZ^}õUÖ­[ÇîÝ»©­­ 66–åË—K" !„bÄê3hXá*ãÏmÏ¡FÆþŽ•†¯«N TF¾~9ÿcy j]Õ¼Ò6ô³»íÚµ ·ÛÍ5×\ãõùÿ÷ó‡?ü˜˜&MšÄñãÇ©©©Ò}S©T\uÕU”——SYYÙk‡ÃÁÁƒ˜5k–2^ÆhÑÕÕ…Ëå’«H!„KT`}" –ïƒùÐÉ{Íihh ¦¦†ºº:ªªªØ³g¯¿þ:ÅÅÅÄÇÇ“œœ|E¥‰F£A­VËþËñËþ !Ä(Ðg”ê¯í¦“Næèr•n^¯åiš‰¬0ÜÎ;¯±Ññ6†<†Š¡›áõĉ¨T*²²²”A¥/îÞ;eÊŠŠŠ8yò$ÑÑÑCš¸“'Of÷îÝ444°gÏž^]‹:DGGF£‘ììì^Û¿ñÆœ={ÖçwGEEñOÿôOCv,ÍÍÍ9r„ŠŠ ª««immUÒ<::š{î¹Çký;wrðàAL&÷Þ{oŸßýÑGQTTÄäÉ“Yºt鈹8Ün7Ï?ÿñ:O]]]œ:uŠS§NqÕUW1wîàŽj_]]ÍÎ;9uê”Ï|ÔÒÒôôw¹\J`±©© §Ó‰Á`Àd2õZW¯×Ki „=4þ梇ߥÃ4|ñÅq»Ý|ðÁ¬Y³fL¤o[[õõõDDD(3,ûªG.\¸¬¬,¯àPdd$‘‘‘$&&òÆoôšLÅl6c00 „‡‡÷úÞsçαsçNŸ½`<Á”®®.t:òÇd2ù¬«ö%//™3gúmÕåïûÔjµR†¢Ñhp8>Ç~ô4Ñét,^¼˜ôôt幺°±±±deeQPP ôø æþKJJ ‹-ò›?<š‘vþzŠŽŽföìÙØívŸß2hé7ÐýVúM:•¹sçöêIæ™UÝf³ár¹z F#&“‰ððpæÏŸß«aÉ¥®ÿ`Èù ôþŒë_\~ƒ†wU®sdj}·Àip×±»s»òÿ*Wå [ZZp8X­Vå¡ÿĉ<ýôÓ^Aµ˜˜eü˜¡6yòdvíÚEcc#{öìQfr>zô(ÍÍÍ ¯r{Z´hQ¯ÏvìØÁž={†lÿwïÞÍîÝ»Ñh4äääššJxx8&“‰®®.¿]”m6IIIœ9s†ýû÷û žªó<øþï̾hFûhC! dÛ, ¶Á±;ŽmìÄN\;IݤMÓ¼éÓ·i›¤mú´ošóþ1žAƒ„4£®ïç£b6Ýçœ9ç¾Îuo‡&;;;n=;Æ|@ @£Ñ0gÎÒÒÒ0 ‘›Íóý?tÕôðêÉ‹/–Õ“…b–1 ¬X±‚矞ï|ç;|ï{ß».¶Ëét’””„ËåñyµZM^^{÷¹™¾¾>, k×®%77—´´4Š‹‹9}úô°ùÙgŸ4” ÒÓÓÉÉÉÁf³‘••Å}÷ÝÇk¯½F}}ý°¿ûÞ{ï {lÍš5”••{ÛV®\Iyy9~¿ŸS§NQSSƒÃáÀét¢ÑhÐh4£&s†ÎE^=õìÙ³ã^=UQ¶lÙB^^‡ƒ÷Þ{ææÐ=MVVëÖ­#))‰[o½•–––aI›É–?,XÀm·Ý„F&?ž®®.ŒF#)))Ü~ûí£³îã¶|ùrÖ¬YƒJ¥ÂçóqéÒ%:;;q»Ý8NÜn7qÙ“),ößêÕ«Y¹r%~¿ŸÃ‡S[[‹ÃáÀl6“œœÌÚµk±Z­#¾7|_•››Kbb"{öì¡¥¥‡Ã1®ó?V&zü&{ý™ìù/„˜Â¤ak ‰ ¡–‹%-ê¹î@'/¹žáÿs¿€+88$iØ<¥V8 '²³³yá…¢ZÂÏO×Êt*•Š›nº‰·ß~›sçαvíZ, G`Ù²eèõúû©¨¨ˆ”sݺu×ôÞ+VÐØØHMMM¤5ýJçÎÖ }&P…„„"…‡9^}õUÚÚÚxë­·xüñÇÇ\ùúÁŒúÿœ9sغu+¿úÕ¯" ¼¢¢¢˜ ¼óÎ;(ŠÂý÷ßOFFFä9›ÍÆ}÷Ýǯ~õ+Z[[9zôh\’†•••ìÙ³•JÅÚµkY¾|ù¸{õÅrÿ !„˜½Ôj5~¿Ÿ/|á ¼ûî»ìÚµ‹C‡Íúm > '´®äóùxþùç£z¹\.^ýu{ì1 ™™™Ã’Á`þþ~úûû#…GuX­V6oÞŒÍfcãÆ¼ð ‘éfb©¤¤$’ðúàƒ¦tß.Y²„¼¼<œN'/¿ü2n·;ò\}}=¯¼ò [·nÅjµ²~ýz¶mÛ6£ÊŸ’’é8I5ôøwwwã÷ûQ«Õ#ö4œ ÇoÉ’%Ü|óÍ:DEEÅ”ö ›Îã———InÛ¶-*±ær¹èììdÙ²eX­Ö_8iØÛÛË‹/¾Õ9c<ç¬Î¡‰¿™pýBÄ֍ЖÀ% Š ƒêzÜhã?ÿ‰z×ó¢ë¿™¯^Ä,Ï2Wº‘ŸÊ¤aøÂ54QRRÂ7¾ñ¨îãáV¸¡ÃT[¼x1V«•@ ÀÑ£G¹xñ"]]]hµZV¬X1£¿ áýÛÐÐ0jKøh "ÝÒGþáv»©­­ffÒp,áJBC_¯ù34 k×®BI°X÷†ýðÃñù|E% ‡Z¾|9MMM1_ÔÆétFZ7mÚĪU«b6 8û_!ÄìpüøqÖ¬YƒÇãᡇâç?ÿ9o¿ý6ßûÞ÷Fì©>”——£×ëééé6}ÉЛz<žH¢ñZçWv8‘ž<‹…œœœ¸Æé999‘ü©Ž­;6büïñx"£v222F܇ÓYþpï®3gÎD% ¯ünqëí8™í7 ‘øv÷îÝ9rdʇ‘Nçñ[µjUäº5‘ž”ácFŒÍ'sþO÷ñ›ªë"¶F­i‚ý¿@¡=ÐÂÿžz6ð’ë,T/åÇ–ø©õnÒÞŠŸ!Q¦nõßpò!<9<_[x¢ã°ð7Þ󎌹“UªÈ|ЧNâÀ,]ºtÊ+²kuË-· R©hkkãþç8zôè¸°Š¢D’R§N6ãùóçñûýäääÄ¥Ò‹·ÔÔT, À¨ór\ÍÐ!Ù±N†oBÂóz޶ áó$Ö-}ÕÕÕx<t:]\櫌ÅþB1³­]»–ÂÂÂÈäù—.]bùòå<ñÄœ9s†7ß|“5kÖÌü€[¥Š,Êp÷Ýw³råJعsç„êßp/ž‰Ä·]]]‘÷Ç+ézðàAééé<òÈ#¬X±bJFÖ .]º4êëÂÖš#n¦”_¯×G¦\ ÆI8™¯ž†“ÙþÂÂBt:‡³gÏNËù6]ÇÏl6GêGz;Ò½ÒDŽídÎÿé>~SqýBÄÖ¨Y¾4Uè‚7àÁžxñP¦]ËãÆ?e™æ¦è“?jE±*Ö)+xx1·Ûßïç?ø«V­¶ D8Á5ÒâSiñâÅ>|˜¾¾>ÚÚÚÐh4×47Æt™7o[·nåÀÔÔÔ°wï^<È’%K¸é¦›®:ñâŋٿ?n·›sçÎE† †fÚ(Wòù|TUUQ__OGGGdQÇIVO´'«^¯Ç`0àr¹èëë‹Y™ƒÁ`䫲²’³gÏFæ ôûý‘߇.Žâ÷ûc|´··‡®%ii3vÿ !„˜¹>ó™ÏðùÏž{î¹'R§„븺º:êêêØ³g»víâæ›oŽ7SÜu×]Ãóx¹¹¹¤¦¦F-ì^œ!^×.\`ûöí¬Zµ »ÝÎÚµk)//çÌ™3=z4nÓ m„v8£¾ÎétF6“““©©©™åOMMô«19Þ= '³ýá¸o<«SÇËt¿¡ \m•àÉÛXŠÇñ›Îë"¶FMÚT™‘ß—jËxÒø”h†¥õâ¥?ª”íêySVp“É„F£¡«« §Ó‰ÑhdÇŽœþ óÕS7/J¥"++‹––Ìf3_ÿú×Ù³g¯½öZTÐÚÚ „ž˜nCWxÍËË›u_–ÌÌLî¾ûnz{{9~ü8'NœàСCÔÖÖòÀŒšZ¾|yd^ÆÆFæÌ™CUUÁ`ùóçÏØ £¦¦†?üá$$$°uëV²²²†½æw¿û555ÚÛßßù¾Æ²‹¾N§‹Lo·Û¹ùæ›§|ÿ…“ ÝÝÝ3fÿ47”Bˆ™C­Vóøãóo|ƒ‡~˜o}ë[¼ôÒK<òÈ#£¾ÇçóMë44cyçw8wîÜ”Ö?v»-[¶ÐßßÏöíÛGœÂã®»î"??JkmmeçÎX­VJKKYºt)åååØív~ûÛ߯4¹44æ°Z­ Œ'…ã”ÞÞÞSþ¡åµZ­£ö6 Ÿ¦"±t­ÛîÅ7S¦šÊã7ôx¥¥¥M¨·Þt' '{üfÚõG1y£6O©QG…ïy^õÞòì`n&ej{ÎÙív¼^//^DQÖ¯_Ï_ýÕ_±`Á‚ÈkªªªÈÏÏ—£#‰‰‰lذ»ï¾;RŸ?~Ô×[­V Ë«1φ¡Éûöí# ²bÅŠVá››ð ËD„WKMMô0Þ+…ç2¬®®Žë0†Ñ„÷™Ãá˜ÐB%±Üÿá›ÉÑn„BÌ eee<öØcÜzë­TVVò•¯|…öööQ“†:ާžzŠgŸ}vFnÓéœò«5kÖ ( 'NœuÎßp\ëQcq8ìÝ»—;w¡ÆÒp|8špBg¼£sº»»#û{îܹW‘£âUþk54é9ÖœÔSÑÓp¢ÛþÎY­ÖµÐÅT¿ÁÁÁÈ4 åååWMŠ”œÊ„ðH&{übyý¹Öó_cÖ4wêï`¿w7G¼Ã—«¯õWó†ûw<¨|Ê ÓM¡¹Ã+ ¤¤¤ðÔSOqÏ=÷àr¹¨¬¬$###jÁ C{Æ]­{x%»êêjhkkÃjµÎØã #+žUá_¹ϵ/û÷ïB ÎÄZxŸwuu±cÇŽ)Ÿëiîܹ‘Jþ7Þ¸¦ÖÖXïÿôôtgäœWB!BNœ8AZZZdêŒG}”oûÛ¼ùæ›|÷»ßöú¯~õ«lß¾}½گ7Š¢D-r6šðÍúT& ÆÎOyµÑ&áØ!;;{\‰¿ßY®¤¤$²(ÊPjµšÕ«W#/ÔËò_+—ˉV®\9jÚéL,]mûëêê"´›6m"%%eF#ñ<~jô†PO½û͆J¥BQ’’’X½zuäIø¼Ê„p¬Ž_¬¯?×zþ !âcÌ3u‹þ3¼âz– þs|»ÿOøºéïX¯»Ž{ñ£ÁïÒt°Eÿ–kWOyáóòòÈÏÏçðáÃÜ|óÍQ ¨¹sçòÊ+¯àt:Gœ„ZŒ?x:ïÛí¦§§‡ÖÖVŽ= „†¡íÝ9’œœl6mmmüîw¡DsqqñŒÝnEQ°Z­ôöörðàARRR"߯.]ºÄ¡C‡"ÝÕ’V¤¦¦’œœÌàà 8pÇCyy91߆‚‚nºé&>LMM O?ý46›üü|2331 F ƒ!æÁ‰V«å¶ÛncÇŽ8^|ñE,X@AAéééèt:4MäûÏý?gÎ***䥗^¢¤¤„ÜÜ\, z½^æTBˆ¨‹ðÇ?Q™–!¿_Y]?þ‰ÇÃ?üÃ?ðüóÏãr¹hlläSŸúÔˆ O‹…Ç<’¡dR__V«•òòòÈ<Šê­“••ÅÊ•+#£â5<Ð`0à÷ûñûýôz=‰‰‰Øl¶H£¦Óés¤ „û–,Y‚Édⳟý,§OŸæÒ¥KôõõáñxFl´þàƒ°ÛíhµZ|ðAÞÿ}ñù|Øl6n½õVÒÒÒèîîæÐ¡Cq-ÿD“NŸþô§IHHˆ”¿µµEQ°Ùl”••EæjWbi2ÛïõzÙ½{7wÞy'‹…‡zˆóçÏS[[K{{;^¯7²0ßD§÷™ªïßDœ?žììlJJJÈÌÌäÁŒl§Z­ÆårEj#ůÓÝÓp2Ç/Öן‰œÿBˆø„…üp @Kàêx„æ@ã7)?~Û­ºÛøû„ÿ@ËôÌ%ÓÞÞοþë¿¢ÑhøÔ§>EAAN§“ýû÷säÈŠ‹‹ùÒ—¾4mÞ¡zzzøå/ À=÷ÜsÕ.ñÛ¶m6óÀÀƒƒƒ¨Õê[~¶lÙ2fëÕµVÿùŸÿ9ækÒÓÓÙ¼yó¸†Öž={–]»vE‚œÇ|ÌjÞ}÷]ššš¢*¢p’Èjµ¢×룒L<òHÔqžì|߯L IDATûÏŸ?Ïþð‡ÈÿÓ÷º\.Eaùòåh4>LVV[·n*ÿ™3gxã7FÝ>µZÍ-·Ü ^b½ýa/^dß¾}‘÷ޤ¼¼<.½êëëyçwÆ\EnÞ¼y‘áî±ÚÿWÚ½{7'Nœ÷ßBˆ©ë¡re¼ ’¾3þ×÷~Û2üð‡?dÆ Ü{ï½$&&¢Õj©¬¬ŒºIý‹¿ø ~ô£ͨ㘘˜È£> Àþðjkk¯éý%%%¬_¿¯×ËÏþó_së­·RZZJGG/½ôÒ°:móæÍ‘ÿ‡3 ƒA*++ñù|”••ÑÒÒÂöíÛ£Þß}÷EÅá~£Ñˆßï±Wç›o¾™ÏM«Õò•¯|eÌmìèèà­·Þ×(„uëÖ±téÒŸ»xñbd¸éPyyylÚ´)ja‘`0‰“ÂóÜ4mI¬Ë?«V­¢¼¼|IJ744 ×ë±Ùlœ>}šÝ»wÏÈã—››Ë† ¢Vïñ›ŒÉ–²ûoèw°¤¤„´´4t:455qüøq~øaØ¿?~øaÔû–-[Æ-·Ü‚Ûíæé§Ÿ¾æó?V&zü&{ý‰Åù/„ˆ­«ŽIÈTåð\âN~ízšÝž×i \B‡žBõ>mx˜Mºé½ÑNOOç+_ù /¼ð¯¼òJÔs¥¥¥<üðÃ3"a8‘Éh¯ä÷û£º×‡]YÉM†×ëEQ”a«ìZ­V222(,,¼¦áÅ ,`ÿþý8ŠŠŠ®º¢uooïˆÛ¡¡½CY,–aÇy²ïŸ?>[·nåÈ‘#´µµ188ˆN§‹¬¾–••ÅéÓ§#â•æÌ™ÃªU«hllÄáp088ˆF£!11‘üü|JKKIHHˆÛö‡PPP@ggg¤•°§§‡¾¾>¼^/~¿Äá;±’——Ǿð.\¸@MM ---‘¡7XWšìþ¿ÒÆY±bÕÕÕÔÔÔ000i¥+ B16Gì?ó›ßü&_þò—ùÙÏ~¹/))áOþäOØ¿?Š¢ð裲aÃ9W¨®®fûö픕•‘žžŽÑhÄëõRWWÇÉ“'iiiaÑ¢E¡†¦¤¤D ¹’Z­±¡xh®ÑhƒQ=½ü~?}}}´µµQSSsMsïÙ³‡'NPXXˆÝnÇl6£ÓéÐjµ£.bR__ϯýkÊÊÊÈÈÈ 55•@ @GGUUUc.NëòOÄ¡C‡hnnfÉ’%ddd ÕjéêêâÌ™3œ9s†Ûn» ›Í6bì7SŽ_CC/¾ø"Øív222HHHˆÝqµEh&ts;ÉòOvÿ ýÖ××{\Q”ÈPÛ‘âüé^e²Ço²×ŸXœÿBˆØºjOÃY°úý\¼x‘ŽŽ4 ùùù‘yÌÄÌÐÕÕÅóÏ?O àÑGùÂbv 'úT*Õ´ÍÛ"„3ÉLéi8SÙív~ó›ßðƒü€„„Š‹‹#½ …³C8Q¦e¡¾é–——Ç=÷܃Óéä¹çž›ðbŠrü„SvÞ_/¢V«™?>óçÏ—£:õöö²cÇÅÅÅ’0Ó2ùºBˆÙ«®®ŽÛn»þð‡¨Õjžzê)Ù)BÌ2³-I+*• »ÝÎÆ8vìØ¬Ü7êñâFvÝô43K  ©©‰ŽŽêêꨭ­%`³Ùx衇$a$„B\Az !Äì§×ëIJJÂb±`±XHJJ¢   2ìùÌ™3¼û£„³‚dnD\8N¶mÛõØÂ… Y·n$ …B!„×¥’’’WuïîîæèÑ£TUUÉNBÌ’½qa2™0›Í¤§§c³Ù(**’9&…B!„×µ¾¾>\.ôõõÑÒÒBSSMMM²s„³Ž OB!„˜dx²B!„˜IdÉR!„B!„B!D”{ !„B!„B!n\ÒÓP!„B!„BE’†B!„B!„Bˆ(’4B!„B!„BD‘¤¡B!„B!„"Š$ …B!„B!„Q$i(„B!„B!„ˆ"IC!„B!„B!Dì!„B!ÄTHOO'??ŸÌÌL¬V+†çž{NvŒB1]·IÃd,É}ÕÊB!„bº¤¤¤°qãF²²²¢ƒ(ŠB0(»B1Ó\wIC›¾óY-Ü›ŠÑ¢çÿPÇOwËB!„˜mn+†ÕÐÐ' ²qâÁómP–©Pß /ÉSMÌÌLî½÷^4 Á`¦¦&ººº¤¿¿_’†B!Ä 5fÒP• ¶?ºÁßþfð÷ðSSPµ RÌÐç—7ôXª6/¥sU$›zÝpÏr…æãípЪžr;üt†íôÔÔT²³³ÉÎÎÆjµb2™èîîfÇŽqû›[·n%--ŠŠ öîÝ+ß|!„BŒÚ!}ûø^ëø ¼Ÿr,Ë…mßIÆœo#àôâs r©¶‡Wv»øén¸Ôs’ay䦀YnoèñÊF8ß =µ1׃i~6ƒÕMXJ ñ»Ü¸›:qÖ´B²’fÆŽV…¢¢"–/_NZZÚ°ç].—|…B1«¨âg-ÏU €·³- mŠ…yùü劾¸®†ún%¥‰xÛzQ[M˜ 3p^lÅçD—‘Ì…zÑzܬÉCgK è÷ãiï%àò°"¸' %þƒ¼¼<, .—‹wß}¿ß/'ŽB1KŒ™4ô5CןÊŠ5ô¯v!èV‚Ê êlHúPÏþgâWH½² <­=èl‰ägjX¸jŠVCïÁ³¨LüƒnÔ=ÆüL4I ô¸HpLhh6›¹ýöÛÉÉÉ ÐÑÑAWW½½½x<iqB!ÄŒàk€Ö;FÞô°|ü—ÀùfüʡӀ§µOk/ƒÕ͘ 3Q[L¸j[H+™CVz"Š¢ÐÛ3€J«Fm2¢hÔ(Z ¦Â,J ³ðv÷áªo } ZÅÀÙ‚äó%þ‹¿ÔÔTz{{%a(„BÌ2c†KÁ~pÔ«ýJHüv(qhù2¸Þ™ñÐï† õ lü}N¬« Ò†Š®hÔà÷£MNˆL¤  MJÀ\”ù}ÓºƒF#÷ß?V«·ÛÍ‘#G¨ªªÂétÊ·O!„3O]#ÇÖo€y+x>„î¿„@oüŠÑ7´^ Èàùft‰$”ÌEQ«ÇõÚd š¤œ›qÕµ‹/%þ‹¿¤¤PwÔÁÁA9·„BˆYfbm¬p‹i/ èׂïåøô3ð” ù¶HÂÀ²¬E£Á¼0€“Ôì:¨ãñO¹HÍJÁhi|Ó¶ƒï¸ã¬V+½½½üæ7¿a```ÜïU…'Ÿ|—ËÅàà  ÒÝÝMCC===c¾ÿŸøÅÅÅQ•––RZZ:ìµï¿ÿ>'Ož”3B!„Ãc’Hþ'ЯÁßCï?Ç?¼juDÿ_—‘„¹8/Ò@|-ñ”©0E­Ây±õòçÇ1áy#Ç›7ofÞ¼yß;w._ûÚ׆=þÜsÏÑ×׳í‰ÉdÂn·c³ÙHKKÃd2a0Ø·ogΜõ}V«•eË–a·ÛIHHÀãñÐÖÖFee%uuuraBqÝ›ÔÀ oU¨%Z•šó0žžÙ ¯…$[¨µò£Z2’,)Œ~ݶwuì©Ð‘–àñ»Üܵ>‘§žéœ–›——Çœ9sxã7®)`„а½^^¯'11qØóÍÍÍìÛ·–––߯R©èí EÄ ¨Õj<ψ­ÜGÎ!„B s!ùG ÉÇaà…©ù»g›‡Ä4&æE¹#'  ü¸¢„þ?ƒ=ŸcoG(Au¦Eâ¿xÄ~¿ŸÎÎ˱·ÅbA§Óáñx¢’ƒa@ ¦Û?Tjj*«W¯Æn·£R©†=o2~S\\ÌúõëQéÕj4±ÛíØívŽ;Æä!„⺦“šô/ãÐü†=Î7â[Øz@á¯þv)µM*¾øOL† ;ÿÕA0¤»[…Áäxµ†_¾fà/¶RœÀÑØÍÒ?ꦾµoÊwîí·ßNQQííí¼üòµwÃT%8F éééäää`³ÙP©Tøý~^{í5êëëÇü,Y=Y!„×JWÉÿZ¯ûÛàþ`jÿþ¡¿†B$,ÍG—–8âkü.•^KÀí%èó£6F~­ÓMïÁsx¼°øï ;#f%þ‹v×]w‘ŸŸOuu5»víš²í_¾|9kÖ¬A¥Ráóùhnn¦³³·ÛÓéÄívÓÑÑAww÷°÷.\¸M›6áv»Ù¿?µµµ¸\.RRR"IH€W_}Uz !„¸®Mª§¡nY(aôŽ2÷aŒuö…ò›iÉlÉR,¡–Éçž…·ßäOÿLÏÍå^Ö.ñâvïßÔÓÕjÅ럞ž†á‰¯'2Œ  Òßß5Ivuu5.±yófl67nä…^É¥…B3¦û!ñ[ôA××ÀsbêËðì~øþÃZ´©ÖÈc~?8Ýðq'±¡ B•^ zmäÿƒ®P ¹ñã—¨z´iV¶írÄ%a(ñßäÅbû—,YÂÍ7ßL àСCTTTŒ»W¥ÙlfÆ ƒA~ÿûßÓÖÖy®½½W_}•|›ÍÆŠ+$i(„⺦šð;5¡É°ž…€#þ…­i µ'‚üú»~òÍ~‚þ =$³ÈÇâEàwèh ‚Ës0H¢ÁÙš:ℸîX• ³Ù €Ãûãp8xûí·Ð°p€*„B –¯jPôúsH{¬ÿW¨Ñxªì< ÚTkdXrk—Â#ßµpÏÿ²òë7uc¾w_¥†Oÿ••ûþÚʇU—‡˜êҬ쬔øo6Ïö Ö®] ÀîÝ»9räÈ5 Ã.--E£ÑP]]•0ª¢¢€¬¬¬)¿ÇB!¦Ò„k9ëWA[ ¾ ÐÿË©)ìñv?ß®â;ôÔ4((?gªN~¤¦Þ›ÅÿÙÊÿ~ÁˆÖíAíô òènj¦úbý°ùRâM£¹Ü‰ÓëõÆåotuuEZam6›|›…B3B÷7¡ï'àz4sÀü¤> ©?mQü˰04ÖËóν¶_Gk·Š@Pá¹× c¾÷¥·õx} .Â+ïè/ÇhV 2%þ›­®¶ý………‘9Ïž={ÍŸ?wî\ 4wâXe€P’X=Ε¼…BˆÙhBÓwùs胞¿ Ož 5 mô6ûÈH( »#ˆßäe®ÉË?îJd¥!“ù &4‰§0 ¸ð‚l°9x`»‘üü$êë§6q84PÔét“@çÏŸOnn.©©©hµÚÈO885 òmB!DÌø/…~Øú¿¢ý­`ù“Ð\‡)?…Î/ïbüÊn•îòpc½öòTÜ:íØÓrëuÁW鵨¬ÿÍø›” nZZ@Ôb,ã¥( II¡E—,Y‚ P«Õh44MÔï‘ï“ô4Bq»æ¤¡éÐü6>èú*xÏO]aø¯·þ-«Ê³™,5»Qà[·´è´‚ªSzø‚ø½.´ê~4®Ajk§~ǃA0›Í‘àe" ظq#F£‘žž:::p»Ý‘€%;;£Ñ8éÀT!„bÌØÆ ®·ÁsR~êihùcèþËøýM•BÔjÈwßâáðY-õ­*¾vh5àþ~ø®'ðñÔv÷=èÁžä+÷ºèxV…Z䉻ÝC>UA­Hü7“MfûÃM¤§§V« …÷ù|ô÷÷ã÷û Qÿ^ù»Bq½º¦¤aÂCóÛz?NVMmaûûû1™Lüõv-ÿvï|ƒÉ¨4zŒZ2CÙˀߋÏ;€&Å .5?{þü%xÿ£©ß¹MMMÌŸ?Ÿììl .—ëšÞo·ÛÙ²e ýýýlß¾–––a¯ ¯H'C#„B1}à|=”4Ô.ˆcªÑPk  õ´šàÇ_¿¼@AÐ롾¥3gݤ§©yÔ’ A˜ŸãçÙo÷E½ è÷ãêÐëÜn·Ä3Ìd·ßé %“Ã=¯…ÇãÁï÷£V«©¯¯çàÁƒr !„¸¡«?½¢…Äo‡†¾Zèü£©O†õôôP]ÓÈ]ÿÇË]ÿ»÷+»ñ›3ñ›2$ÍC•¤ÂT˜CO§ŸÓKþÂlþûIL}Y«ªª"Aïš5k®ùýkÖ¬AQNœ81bÀD†\&1’pkkxrn!„Bˆ Q@¿*ô«¯!~F¯×sÖ‘Ï—þÃÆwaâ7ïéhjW £~4ª óWF >¾ý×&R’‚Ã^ÓÛ§°ë –yÁÈ—~ÈëõEq‹‰$þ›œÉnø=V«uB Å„ç2,,,”¡ÇB!nxW­ U©¡!(¦{Á½:_ýôxèêgï4¦‘°îïHXÿLe_D—”„T‘ž›ÁœEsì$àqñÌ“&ÖΛڲÖÖÖFÅ‹³aÆq#Q…ÔÔÔ¨Àh$á`éjAcx^—ììlI !„âÚi@Wi¿ýj ýÏÆïÏ pîÜY~x÷9¾pÛ ª`€ÓÕ ý§ké?]Ç`u®†ÜM]ÝîÝ”Œ=awS®†«›è?zmm#tõÀÝ«\üÛƒl9YÌBâ¿™#Û_WWÇÀÀ›6m"%%åšÊpâÄ ’““¹óÎ;IHHs_!Ä K |w´'µÅúSÐÀà«àøAhZÅ0òOÐ3õ‘àæ‡ïGQTðкÿ%‚V££¯­ µZƒ-3“ääd6Ã;§œ´:Bï}íë ÓÀ‰8¶’×ÕÕQXXˆ^¯Çf³Q\\Lbbbd2e 2©²Ïç‹zï¢E‹"ïkooÇáÜl6c·Û¹ýöÛÉÊÊBC·Ï;7fp5oÞ<´Zmäß`ðò¤à2‹B!T‰ +ÝÒPrÐø 0?‰jDVg@pzÿÜ{㤪՘,Ih5 Ô;’9× Åjð‡ƒ~ú’ïgî²Ï¡6-%¨™OPUHÙÂ\‚Úb‚Æ2”¤õøÒîâ­2øÝž:ì9&Þ9®§µKÍù¿=¦Æç‹ß|tÿ]VTTDRR]]]TWW_õõ“Ýþ@ @OOóæÍÃ`0P\\LRR*•*2ô8V«N‡Á`@«ÕF>o¤ÏB!® ‘^†KýoÐ-ÿ‡µÞ®©Ý€$Tï|ŠÔ’Oô{8ÿ‹û!¨•Ÿƒ×圈*¨&àóÓïpp¼º“-ÿÇ//æÍÑRþw^q¬ï ·Þz+ Œ>F:ð“Ÿü$ê±yóæ±yóæÈÿ}>>ŸƒÁ@0¤²²ŸÏGYY---lß¾}Ìr¬[·Ž¥K—ŽøÜŋٹs§œB!Ä Îð Hþ—‘ŸóUƒó p¾þöø–#!!´´4ÒŒN~üE59yšz´´w ògÏø1 ”••±xñb²²²Ðëõ¸Ýnš››9}ú4GÅívóÃÇÕæ±ütw8ùþ˃|xÉDÿ„VØ•øolåååØíöÈÿ“““Ñëõ¸\.zzz¢^ÛÕÕŻラíÏÍÍeÆ $&&ŽZÖ±¶îܹ¬ZµjÌmŽ;Æä¢!„âº5fOC}9hçÿÃ^€ sj7Àå…O¤W‘nE—¶Z? cŽ ƒÑDO{®¾AÔŠŠK—êéèÇjr¶.v@šØ’É3¯÷1Ç^’>Ÿ‹/RUU…Óé$ ¢( :.ÒÒÙßßOEEŰ@ª¾¾£ÑˆV«E«Õâv»©­­å½÷ÞãÌ™3X, p¹\œ:ujÌrÔÕÕqîÜ9úûû#­£á¡ 444È!„BÜàT)`¸|5à= îàz?†þgÀs"ÔÓ0Þ<===4u `O7ó›Š,Õ^î)qÑØäTƒŸ††Ž;Æ{ÞçľxóÝw8zì øý~n[äÏn RÕ áßßNÂÙÛÏÓ»Zèèê‰,˜!ñ_lã¿E‹1wî\HHHˆJ~,üÓ××Çùóçã²ý‡ƒS§NÑÙÙ‰×ëE­VG~ÂjkkGÝþžžN:Euu5‡§Óé>–çÏŸ§­­M.B!®[cö4œ-þñ~…§î7¢K]DËÉóø\æ•,¤á£‹ädæáv¹pôö¢  QTüð­þŸ]ð÷Ÿ†/l2Qò­A®©/·J¥BQ‚Áà˜ó¶!„B܈RSSÉÍÍ¥¯·—§lâ¦âTj-¾@¿¥bÛ>?_š£åÓ‹oÂd´2èrð»ÓÇøïz[Vªùö§è4 Á@€†KíÜûL¦Ä Z[[¸t©iZ¶Iâ¿éNbÙÿB!ÄUÌú¤aV"|~ |õ i¹&:}dæç¡Õë¹Xqš¬´4hpöÑéèÀðSÛ¡0à×pÓ|-‡ª½<ð^ù&!„BÌ0twwãñxÈN„_}EEÙÂTÔ:#.‡Ïù~<ín® *ƒ‚6U‹ºÀBBª€€ÏCmc[êãÔ¥Ð\‚6›-²X‰B!„Ù¬N–æÂ®¿3cIÐÑ×å!ÁZmÍh­rV{± “6TSn›Aw?Á@—ÊM0ähM€o¾ì£¡[¾B!„3^¹þd“„D *!2Ô÷JŸ×@¿Ú7Èw~݃²ÿ„B!®Å¬N>¶žþÓ ”€ŠÞN‰†ÔÈs¾€—î.RMéà|Að©îé`ÿõ3è!®ó !„BˆøH·ÀÃ7ÁK–è1é5(ªÐ_×Ïé7oUøõ¨éý%„B1³:i˜žß»WMn²–î/™f=Vƒš>7T\rb1Y9ÇH0ƒ.¨íñðO¯{8×"^!„âz RÀf³Ü>héŸLU'„B1i×ÅB(B!„B!„BˆØQÉ.B!„B!„B %IC!„B!„B!DI !„B!„B!¢HÒP!„B!„BE’†B!„B!„Bˆ(’4B!„B!„BD‘¤¡B!„B!„"Š$ …B!„B!„Q$i(„B!„B!„ˆ¢‘]pc¹å–[X¶l~¿ŸŸþô§R~1k¥§§“ŸŸOff&V«FÃsÏ=';æ:9ÿJJJX¿~=^¯—Ÿÿüç²ó¯qÿpçwŽøÜo¼Áùóçåú+„ú[ê©¿…\?ÆaÑ¢E|ò“Ÿà¿øN§S†¸aHÒð£Õjp¹\R~1+¥¤¤°qãF²²²¢ƒ(ŠB0”$çß ¿ÿõzýˆç‡!„ÔßR!×k£V«#¿û|>9 â†2k’†·Ãêhè‚ PÙ ^æÛ , R¡¾^<7Jœ¢Ñ„¹Ûí–ò‹Y'33“{ï½FC0¤©©‰®®.éïï—›9ÿdÿ¹Aljj¢©©‰K—.ÑÕÕÅã?.Ç_Ì:ÿIý-¤þrý˜îë‡$ Å ]‡ŒçE©?]9xOAÇãS_Èe¹°í;ɘómœ^|ŽA.ÕöðÊn?Ý —z`N2,σÜ0ëÁí =^Ùç[Á¢‡'n…Ïoбpq"šD3j“o§Õ?6ó?¦f[t:ÙÙÙdgg“žžŽÙlÆl6³cÇZ[[ãþ÷Ã-³5h˜í埭¶nÝJZZìÝ»wZÊ V«¹ãŽ;Ðh4TUUqàÀúûûåàÌ‚óo&|n´ý_YYIeeeTÝ#×_q-LŸ…Äÿuõ×u< Þsÿ+žNMÄ€V«“ÉDww7;vìú[Hý}~ÿÅõqýP©BKAøý~ià7œq% 5 CÿzNLO!—ç*ÀÛÙΖˆ6żü þrÅ_¼µ†ú^%Kñuõ¡hÕ˜ÎÁÕЧ¥}nªzÑzܬÉCgK è÷ãiwpyX‘G܃F‹ÅÂòåËY´hQ¤âêÊ¡dñ²sçÎYý…íå———‡ÅbÁårñî»ïâ÷ûe§Èù'û_Ž¿ˆ× ’e|¯ tNEüׇΖÿ­«¡¾[EIi"Þj“Óülœumx;ûÐg§ŽÿõNYü§( EEE,_¾œ´´´aÏßÃE¥þ–úCˆÙ~ý8~ü8Ç—"nHWMªs.ŽÓ•4ÔiÀÓÚ‹§µ—Áê&L…™¨-&\µ-¤-Í!+= EQ諸*³ÉˆJ§µ‚© ‹’‚,¼=}¸êÚ>Ž„U œk$èñE>?žŠŠŠØ°aC¤§G?ííítvvâr¹ðz½twwË·Qˆ1¤¦äKÎè IDAT¦ÐÛÛ+7Bg*kè_çkàø÷Ñ_ˆcøÿ5GÇ%—ã?Gß ŠFŠÿ4júrü×݇«~zâ?³ÙÌí·ßNNNNh_tttÐÕÕEoo/ç†èq'õ·B®BÌ^W —´ /ÿžBö m„ <ߌ.#‘„’¹(Cæs;’,hp^lÆU×õ\GZ ]i©±±‘ÇÓÔÔ$ßNúÛ!Ð5‹ã¿d š¤©ÿŒF#÷ß?V«·ÛÍ‘#G¨ªªº!WÜ”ú[‰_äú!Äì5¯=ÓSÈVGôÿuI˜‹ó®y%HEQ0f£¨U8/^ž?°µ7>åNIIaÆ œ8q‚>øàšÞÿÄO`4£khhà÷¿ÿ}䢟——Gaa!éééœ;w.ªÛôý÷ß?l…©°îîn^|ñÅ1ÿþÚµkY´h.\à½÷Þ#33“’’²³³1™L8êëë9tè'æïŸîò_ü/Y²»ÝNRRZ­—ËÅÀÀÍÍÍTUUÑÖÖ÷sÁd2a·Û±Ùl¤¥¥a2™0 ìÛ·3gÎ û¾?ù䓸\.`ppîînèéû„þÄ'>AqqqÔc¥¥¥”––{íûï¿ÏÉ“'cº­›7ofÞ¼yß;w._ûÚ׆=þÜsÏÑ×׳íŸìþÊjµ²lÙ2ìv; x<ÚÚÚ¨¬¬¤®®.æß“ÜÜ\>ýéOðÌ3ÏŒ9üísŸûÉÉɼóÎ;œ={6fç_¬¿?”––’Ñh¼¦ów²Ìf3 .$;;›ÔÔTŒFcdBìÎÎN~ýë_ÛΕ+WR]]͇~ÈêÕ«ÉÍÍ¥¿¿Ÿ½{÷ÒÞÞNyy9sçÎÅd2QUUÅ|5GÎd÷ÿdÉõwúÎß™"<Ê$à˜¾2ÌÖøàŽ;îÀjµÒÛÛËo~󮩼RKý-õ÷ÄIJü9þ“ýþNöþo2ñK¬ÙívŠ‹‹ÉÌÌD§ÓÑÕÕE{{;'Ož¤³³3.×ÉZºt)ëÖ­ó5Ï?ÿ<½½½1ßþÕ«W³dÉœNçUÏÓM›6±páBªªªxë­·$«%fFÒp¤¡ÉŠ 49€¼§ãWȳ͗W›ô˜åŽ0ª”¡Wl”',½’ÁžÏ1ˆ·#t9ÓŸr———£V«ikk»æ„¡¢(ttt ×ëÑjµ˜L&ôz}dîÃ%K–pÓM7a2™"ï¹r^ÄÎÎN|>Z­6òc4GœSqÄýd0`4ILLdݺu,]º4êùääd’““ÉÉÉáå—_6)ìdß?Ýå+))áæ›oެ<7´"6›ÍØl6@\oZSSSY½z5v»=2ï•ÁðHBø;“˜˜8ìùææföíÛGKËÈ'€J¥ŠTˆ ¨Õj<ψ½$âôùýþ¨ Õb± Óéðx<#W¶˜Nvû'»ÿÊ‹‹Y¿~}ÔªkF£»ÝŽÝnçØ±c8ÛIµ†#½^?æMGxÚ„+[p'{þÅêû£R©Ø°a‹/Žºî÷ü¬U«VQVV6âqF£Öh4’““üyó"Á¿ÉdbóæÍ8Ψ¹ÍJKKinn¦ºº:fû²äú;}çïŒI~|Ù öM_†Æ*“nôøOQ@¹ Ž–Tœªø///9sæðÆo\SÂPêo©¿¥þžäµ+FåŸèñŸÌ÷7÷“‰_bE«Õ²iÓ& CõÈÇÇ8##ƒŒŒ /^ÌÞ½{£l‹Õõc²\.uuu‘sG£Ñ ÕjÑétã^Tn¢ÛáÂV®\‰Á`Àn·š˜Öh4„êÉ! BLÒ°r„ f+XžÏ1èüãø²©.´A¡ Œó²FMš̹æ¦G&½é‚lšŸCoç9<^8x!öeV«Õ‘“y¬ÌуÁH‹Àâŋٸq#&“‰»îº‹üü|ü~?ôôôÐÓÓCmmmÔg¼÷Þ{Ã>wÍš5”••« á‹pnn.‰‰‰ìÙ³‡––‹…µk×’››KZZÅÅÅœ>}:¦ïŸîòC¨ÅgåÊ•øý~>Lmm-‡³ÙLrr2k×®ÅjµÆõ$]¾|9kÖ¬A¥Ráóù¸té¸ÝnœN'n·›ŽŽŽaïàÙgŸ$0 éééäää`³ÙÈÊÊâ¾ûîãµ×^£¾¾~Øûß~ûíÈïáÕçΞ=;e«Ï]ÙjþÞ××׳k×®«¾²Û?Ùý°páB>ñ‰Oàv»Ù³gµµµ¸\.RRR"71eee455Å´Ç•7c ?e0=Ùó/Vߟp‹úÞ½{inn¦¯¯oÜçïd­\¹’òòrü~?§N¢¦¦‡ÃÓéD£Ñ ÑhF ÆÃÁaJJ TVV¢×ëyà0›ÍÔÖÖòú믣( Ÿýìg1 dggG% '»ÿ'K®¿ÓwþÎJ¸§á4N¹74þ3ÍË5þK(Î%ôœÑž‰>;mÚâ¿ðw ½½}B m©¿¥þ–ú{âbQþÉÿÉ|cqÿ7™ø%&u‡¢°eËòòòp8¼÷Þ{47‡Z€²²²X·nIIIÜzë­´´´ »FNöú1Y}ô}ôѰdz²²¸ÿþûãºýííí\ºt‰œœ–.]:êµ%??NG__’ÑÓ›4Tg€*4Þ3Ó[Ðg÷Ã÷Ö¢MýA¥»Üb¢¨Õ¨M£Ïw£6êѦYÙ¶ËAw¦HÈÌÌŒ´LMdÅh7` 477³k×.êêêðz½qÛçá¿ÙÛÛË‹/¾Õ’ãr¹xýõ×yì±Ç0 dffŽš4œèû§»üyyy‘ÖmÛ¶E–.—‹ÎÎN–-[†Õj½æ¡RãµdÉn¾ùf‡¢¢¢bܽ‚Á ýýýQ“¬‡“V«•Í›7c³Ùظq#/¼ðÂu7¹p,¶2ûßl6³aÆHxePðꫯòàƒb³ÙX±bÅ”ÜtX,´Z-]]¡ ÊT*U¤×LgËçóñüóÏGõD˜Šë„z¹œøþ|Õà=Þ“à>§¦ãŠÿô—{(5jÍôÅ@dᓉÆRKý-õ÷ô™ìñåù;Ñû¿‰Æ/±ºwÉËËÃétòòË/ãv_ž<¶¾¾žW^y…­[·bµZY¿~=Û¶m»®®_“ÝþŠŠ rrr°Ûí$&&Ž8 º¨¨€sçÎI6KLML8æ“é_ü\à«Þ‚î< ÚÔ蛃¾A¨¬Vãtý^¿N_TÓÖ}c¡K³²³2~N˜Ã1ú„@Š¢ V«£º¾Uiøý~Þxã ª««ãš0 Wzá¿=R×oÇi9 ORË÷OwùW­ZÀñãÇGm‰Ž'ƒÁÀÚµkؽ{7GމÙ0"‡Ãi‰µX,‘œÅx¶²û¿´´FCuuõ¨=M**B«KeeeÅ´Å7D†4 ½é¸÷Þ{yøá‡#×§¡Ã,fêMG0qèR¼¯á¿N †k¾ö\™Ìiïk¶8›núgóõw:Ïß™Âù:¸Þo5¨SÁðI°ü1¤ü¤o6Qtñ/ÇHñŸÏ—ÚUøÇ1*­¥SÅàqb<ã?•J¹ÆŽÿIý-õ·Ôßñ«¿gêõÿZÏ߉ÞÿM4~‰…+VpìØ±¨„Ùв9r ׉ßéÜþp¯P¸œüJ¯×c·ÛIŠ©3vÒðãF]ïy`šXZ˜ ëåùê[U|þ{þìßøÂ÷-´÷ŒÜÓÀëƒ?ÿ±™¯þ(G¾kaÿÉË+5V 2ãSÞ¡•ùXsuðÔSOñä“OŽ«ÒPsµÀX.#ÝønEi^ŒÉ¾:Ëo6›ÉÈÈ}ׯúž.………‘9<â1_EWWWdûm6Û wñ»ÚöOvÿÏ; V†ðMf¬ÏíðMDø¦###ƒÄÄDEaþüùQ×)¯×‹Ïç›uÇ0ž×€ƒHOOç‘GaÅŠW.6ôš¯ȳÁl¿þN÷ù;ôýt :>-¡í^pü;Ù÷Ogù‡N\‹áå^(a´ÕÅ®åfþüùäææ’šš51vøæfª[!§ô"7ÁíŸÌþW%Òr¸dÉ,X€Z­ŽÌ#3ô÷Èõ6Æ=•œN'ÉÉÉ‘ ±¨¨ˆ<EEEœ8q"rÓ1S{)Œ71/.\`ûöí¬Zµ »ÝÎÚµk)//çÌ™3=ztÔý6ž„Ùõn6_gÂù;ù/ÁÀK¡Ã&Hú[Е€éAx~jâ?§ÇÀÏv$ÑÔé$ÕàB“šßîÑóÀz'Ï>ÛŠ× A>ó™4{Lì­Ð’b ÐåPø÷í‰üàOƒ$›»QÇ1þš(ï¤ùRKý-õ÷ÌËã‹ów¢÷_&kh¯¹±zZ;N<:Žäädjjj®‹kV¬¶ÿìÙ³¬Zµ ½^OQQQÔþðÐdYELi}<Ö“á•ófBÒP¥pye<`õb9éú¤‡gwêY>߇¢@]½›öv/zƒ •…9~î[çæK÷¸8rNCgÏÐ »‚:N÷tC‡¡…[ƪ ®vs9´rU©TSRÙNöÆwºoœ'ó÷‡F£qÄa…ñ6´y¢ ظq#F£‘žž:::p»Ý‘€';;£Ñ8é›™j2Û?™ý¯Õj#ß;ŸÏG?~¿Ÿ@ õï•¿Çú¦#¼Š¢0oÞ<Ο?ÛífÕªUQ7$³õ¦c*´µµñꫯ’‘‘AYYsçÎ¥´´”ââbNœ8ÁñãLJ {“ž†³ûú;Îß™Îõ68ËÀôYЗÇ7i¨R º£ˆ×=ÊáúM vf]Ù3üí£µüû6órü¨TPWï Åz• lÉÖ/óð‡\¼z —Ž<À—~ý%™°eÑïP+ñ™G- 200€ÙlŽZ%]êo©¿¥þžùbuücuþNæþo"ñˤ¯×CêoF3âðܰð~›© äéÜ~ÇÙ3gX¶lK—.$ Íf3999ø|>.\¸ '¬˜2c& •[a“¾ú5¹QYG Ð ­›âPH†€ZKЀoÆn.¹<~§+’ü‹?Ïâÿþ^_z2™ì,-àë„*Ôõ¥¿çãF› ßz½2æI=­­­ø|¾HÅPUUuÕÊ`¼•ÆT݈ÞÈIÃð°µXO¶·ßd‚ƉÎõa·ÛÙ²e ýýýlß¾–––a¯ ¯Hv=­›ìöOfÿ{<ü~?jµšúúz<8åÛîÝl0ÈÉÉÁl6óÑGáñxXµjEEE‘¹zFë -¢¯é;wîÄjµRZZÊÒ¥K)//Çn·óÛßþ6êæTzÎîëïL8gÅ1ž‚U•5-Õ ÿÈßìùf“c‚ Ÿä±;ŸC«òͭΨøï¯¿×Æ—¿Žÿü|ï‰PÂù³úx­á^Œ ‰\ìÛÂÞÿ$};1ÿ—3ö½Y›šš˜?>ÙÙÙ †¨Ñ'RKý-õ÷Ì‹ãËó7÷׿LVwwwäw«Õ:ê¼Í:.²Üõ4Ä6–Û_YYIii)©©©dggGêEQ¸páB̾BŒe\sŽ—¿5>…Ôëõœuäó¥ÿÌ໿0ñ›÷t4µ+ýÁa?¶4 ½É‹È³›G|¾·Oa×A-ÿò‚‘'ÈkuEQ‹–ÄŠßïÌÅTTT4joÉö4œ “í-3ݽm&ó÷#ó”——_µRÇ6†ƒ «Õ:¡‰Î׬Yƒ¢(œ8qbÄ€eè÷jè0‹‘„Šxœ+ñ2ÙíŸìþÏ…SXX8-CÃÃ"t:EEEôööÒÖÖFOOmmm,X° ÒS!“õÏöïÏXûuïÞ½ìܹÍGTXX8£®}3Ál¿þN÷ù;Ói—€é¾Ðï®ÿŸ½7úºïý_³oš­£ i@2B€„`6ǘ$6ÄCœ'7‹›üÚëæ×Ûþžöö¦¿›ÞÛöþÚ§M{“{Û$mnj7!Ž—$vhŒ¼a1›Ùíû®Í>óûc˜Aƒ„fF |^ÏÃÃhæ;ó=ß³|Îû|Î9Ÿóaòî“Uð¹K¿‰ÅlD¥R …°[>¡8£vLýן¶˜‚1ôŸ^9̆¢ýøý”J%)&=é >CáÒßIJº#Åjµšµk×Jÿ-ý·ôß3ÄTÒoù'²ý&rü7ý’§Y¤ÿĆ‹¼¼< ¼š³¹¹ù¾éùüƒƒƒÜ¸q€eË–E} [“…égBë3ôèx|üŽÃ×yÏ…ÿîýÝä$ÒétråÊe¾óÙË|yë0Ê`‹uJ—êq\¬gøz+îænÏOþG'OždÕªUÌŸ?Ÿ/ùËtvvÒÔÔDGG.— ·ÛÇ㉩K‰tÌ›7/ZŸGÖíõë×GOaLöJ…¹V"èõú˜ØE:«ÕŠÍfcåÊ•@xÜȼ§áýaãi¿¥¥¥påʲ²²X½z5ÇîDX³fM´ ž:ujö8nL )U>¨çª´+@•uû×[0ðÿA(‰ã½ŽêC¥L' 2ÐyoÎQ¾sØÂ²ÕO²u}Ê@/AOø‡ù£g}(T‚ê[úO•ÎÁ#g¸xò×<²± WÇk(U_@§ÕàvÓßþ^ÒÒ~àÀvíÚ…Åb¡¬¬Œââb®_¿Nss38Îh½¹}Yúoé¿¥ÿžÙôÇSþ‰n¿SÿMU¿$‚#GŽ`·ÛÑh4ìÞ½›C‡ÑÜÜŒßïÇf³±aÃ233éëëãØ±c÷þIäó·¶¶ÒÙÙ‰Íf㳟ýlŒ®„Yã4œ- ¬V+ÿ~ÚÍÿ\Öʼe)´ök0,Ôñßyý?¾Gee%K—.%7·N‡Çã¡­­‹/pòäI<÷)øøýG=ôö¸ø«Ÿc2¥ ‘´˜IgΜÁãñ°~ýz «W¯Ž‚Á`´¸³#P«ÕìÚµ+ú÷ÈãÖ?÷¹ÏÅtPn·›×_}Ô½wîÜݾ!2Ëf±XسgϨïüö·¿®¼œé˜†3~€C‡qóæMÊËËÉÌÌD«ÕÒÓÓCkk+§OŸfïÞ½ètº{ŽWt/×ýû÷³yóf¬V+¥¥¥”––ŽºîÆÑí>úè#¶mÛ†ÑhdÇŽøý~ü~?z½žP(Ĺsçhhh ²²ò®3uuuœ;wŽeË–a6›£3dÝ?^"ñV"¤¥¥EEôȶáhï½÷^Ÿ?žüøøãéèè ªªŠÌÌLl66›mÔu§NâèÑ£IttwwǬ¨v:´´´D$c­Tˆ·ýÍtý‰FÃsÏ=7á5ÝÝÝŠŠŠ°Ûídgg“’’³¥`¬ ºuuu¼öÚkTVV’••…Á`ÀçóÑÐÐÀùóçioogñâÅ£´ãñá‡ræÌŠ‹‹±Ûí˜L&´Z-&)AŒ- 99£·ŽéõúQïuºj¢žªùáæÍ›Ü¼y“ôôtìv;™™™X­VRRRÐh4¨Õê¤l/òûý c4ÇœI¾zõꄃŽxÛßLן¸;GµšP(4ê”Ä¡¡!:;;¹yóæ¸ÛC"b2ž­Dñæ¿Åb·1›Í1[fÇ(,öwêíw²NуÁÙ¶=+ØN4€?ò¯¼gÂŽÃiÕWÀÕ#œ/Èá×/à‘…v¯ ðÔJxc„þS*¤ë´ôz¼GÔçÇ–†Ø^àH]¿?™JEú‡z··7ù'vºÝn<ÈñãÇY¸p!ùùùX­VÌfs´mŒ(_úoé¿¥ÿNSMÿTË?žú›ˆñ_<ú%Q466òÒK/QYYIvv6ƒAº»»©­­åÊ•+ã:ÞâµÉB¯×G_ßíÕxžÿN®]»Fuu5f³™k×®ÉáGÂŒ  z–ðì&##ƒÂÂBúù—Ï·²fIJ•š@0Äw*xù£ ߘ§åÉ¥k0êÍ »‡xý ~ÐìáÓ•JþìÓ!4j¡`¦–.vü(£5›ŽŽvZZZ¥&÷Laa!O>ù$.—‹_|qÚWŠD„F0LøÖAò_Äþ ³Iÿ ôó£Ï·²fI:J•¾{^ù(È×óµ÷£Lô–lÚÛÛimý‰Ï …¤ÿþ[„9ÀÊ•+Y·nCCC¼øâ‹Óvß´´4öîÝ‹R©ä¥—^JÚîHA˜ˆ9ã4ÌÎΦ¯¯¯×Kž~ö %•¥¨´á™4÷ ï5Þ./Aw¥^&SƒzSFx6?è÷PßÔÞø¹Ðžm³ÙlÑ`Õ‚0Y±o·ÛÙ²e F£‘#GŽDƒ& ‚ b…dë¿tTÚð!3®?¾kCx»Gê?-ª¢RÒ#úÏK}SwŒþËÎΞ1§¡ ‚0w°Ùl|úÓŸÆd2qüøqŽ?>-÷µX,<ù䓤¦¦råÊÞyç) aF˜3NÃ;Ñ©á·ÁïmÕ“b5£TëÇÝô{p;ü¬ÆÉ·_‡¾a)xa’õL§#555º/55•¢¢¢è¶K—.ÍH, A±¿bÈz!úOAHiii¤§§£×ëÑëõX, °X,´µµñÆo$mwƒR©$''‡ÌÌL °Ûí(•J:;;ùå/)»*„cÎ: #d™aïx¼LÉŠ"-F…RI(Äë p±ÉÃÁsA^:7»¥À…{cÕªU£‚&ôõõqòäIjkk%“AÄþ 3¦ÿ¬(Ò‰þAâbóæÍ£«‚pœÑ³gÏrâĉ¤:îŒF#_ýêW8òDû IDATcÞ«­­¥¦¦fZã7 ¨çút Á÷Þ…ï½D©pc3ƒI?´€_B•q044„ÛíÆét244$[šAÄþ ³Aÿ…Dÿ ‚  app0z«Ãá ££ƒÆÆÆi9°Ìårát:éî«‹ºº:º»eÖK˜yæüJCAAAAA‹R²@AAAA„‘ˆÓPAAAA„Äi(‚ ‚ ‚ ‚ B â4AAAA!q ‚ ‚ ‚ ‚ ‚ƒ8 AAAAAˆAœ†‚ ‚ ‚ ‚ ‚ Ä NCAAAAAb§¡ ‚ ‚ ‚ ‚ 1¨% ,~øa–/_N àûßÿþ„×±}ûö1?{ûí·¹víZRï/Üßdee1þ|rrr°X,¨Õj^|ñEɘYÒþ㥼¼œM›6áóùøá(™/Ì)¤þ ¢ÿDÿ ¢ÿDÿͽþSúoÑ_Bâ§á†F£ÀívßõZNów(B¡PLÛý…û“ôôt¶lÙBnnî˜õ+ I&Í‚ö/‚ ˆþý'ˆþý'ƒ͜q>¶ª‹ ©Î4Á¹fN±oYhƒÊùP”}°ï<(ý”Z.rÇ3©¦µµ•ÖÖVZZZèííå+_ùÊ´Ý_¸ÿÈÉÉaÇŽ¨ÕjB¡­­­ôöö2<<ŒÃáÑ8‹Ú¿ ‚è?Ñ¢ÿÑ¢ÿAxÀmÈ”¿¸,ßçÏÀs"¹‰\^¯~; Ó|A—ÿ “–ú^yßÍ÷߇–~(H‡áÿ:ðøÂïŸk†k`ÖÁ×6À7k)]jEm5¡2êðõ ¢üË6þíhòuqq1óæÍ#++‹””ôz=‡ƒ^xaZ <2Ó4™Nãܹsœ;w.ú·V«Öû ‰cÏž=dffröìY><#iP©T<þøã¨Õjjkk9zô(‡C g™jû› õGæ²ý›k¤<æoLþúÞßÏÇÉѯ}; cTÿ ÓRߣÿæ¥ÁŠÂ°þ3‰þý'ˆþDÿ R~BbµÌ½~A™ 毃ñs€ )Éw®(e0ˆ¯g­-Mº™‡æçðÇ+|yãMû•”/³âïB¡Qa*‡»©o{?ºy™Ô]@ë÷P´¶­- €P €·k€ ÛËÊB’*+**X³fͨí"âq:xóÍ7g´ÂÍôý…™£°°³ÙŒÛíæ½÷Þ#H¦Hûa¢LéXQŠ`_­ÍzKÿeßÖ}J–UXñ£ÿ®_@ãKÿ Šþ“þGý'úOaÜ“ÓP¿R¿v×[àøqò©Uƒ·coÇÃum‹sP™ ¸ë;É\6ÜL+ …‚¡³7P (µjP)0粬8_ßîÆN@*ÎËM„¼èï'‹M›6Q^^@ss3---ôôô0<<ŒB¡@©TÆ'Fæ ˆ`A˜Å8þ†_øM9¤~BÃà«ý×zKÿq×wY>ܬ‰õ_yŒþ”JœWDÿ ‚è?Aa²LZ.¥|Ì¿(ÀsÿüMÓ“È¡‘1[ƒ!†¯µ¡Í¶’R¾…J9©ßФ™Q§¦àºÑ†»¡+V'i§DvvvT0~ðÁ\¸pAjœðÀ’š^º2<<,™!‚0‹ ö„ÿM„õ[·4ÔO Ø7Ýúo> •JôŸ ˆþa¡R©…BƒAÉŒ9Ĥœ†¦Ý`þ@†~xkuá4ƪíŒý[›“Šiqá=ÏÐ* ŒÅy(” \7;oÿþ@rÒŸŸ}]WWwOß­¨¨`ÕªUÔÕÕñÉ'ŸP]]MAA‡ƒÃ‡ÓÕÕÅêÕ«Y°`F£‘ÚÚZŽ9Døé§ŸuBY„¾¾>öíÛ—Ôr‹÷þëÖ­cñâÅ\¿~>ø€œœÊËËÉËËÃh4288Hcc#ÇŽÃëõNø[ƒ²²2ìv;©©©h4Ün7N§“¶¶6jkkéììLz]6Øívl6™™™Fôz=555\ºtiT}}î¹çp»Ý ãt:¦¯¯¦¦&úûû'¼×#<Â’%KFÕ«ŠŠŠQ×:tˆóçÏ'ôY·mÛÆC=4êý ðüóÏzÿÅ_dhh(aÏoþÄb±°|ùrìv;)))x½^:;;9wî ¯'<õÔSüèG?šð´»gŸ}–´´4Þ}÷]._¾œ°ö—èú“MEEyyy †{j¿ñb·ÛY²d 999hµZz{{éêêâüùóôôŒí)//gÍš5tvv²ÿ~ŠŠŠX¶l™™™„B!ÚÛÛ¹rå ׯ_¿ëý§Riÿî•Dô?ñæ¤þµµµñ‹_übÌköîÝKFF§OŸ¦¦¦æ¾­¿³ýЮ; ?›Fý—ŠiIúO¥Äu£CôŸè?Ñ¢ÿDÿ=ú/ÞûO¥üã­¿_ûÚ×0 1ï555ñÆoDn………“••Å•+W8}úô¬iÿ1>$“‰ÒÒRòòòÈÈÈÀ`0 º5á×ÓÓÃK/½”ðò‹7ÿ©ÿ(§¡f1Xþ(üzà/axÿô'òrÛï´I‡©´`lÁ¨TŒ¬1(”c¯BÔÏÏÁ?èÂ×î .µ''Ý#+eYY'Ožœôwu:ƒüü|z表ñ0lÛ¶ —ËEfffŒ1hkk‹§===øý~4MôŸÁ`ˆÃM6ñÞ_¯×c0°Z­lܸ‘eË–Å|ž––FZZùùù¼üòËãXËËËY¿~}ôä°‘†Ìd2a³ÙƒITWWc·ÛQŽQ/F㘆V§Ó¡Óé°Z­£>okk£¦¦†öö±+°R©d` <"JIIA¥Ráõzq¹\£®MF§bf³­V‹×ë‡îœqŠ÷ùãÍÿK–,aÓ¦MÑN.2±ÛíØívN:ÅÑ£‰ Š5²Œt:Ý„¢1 þÎüxÛ_¢êR©dóæÍ,]º4ÆnO¶ýƃF£aëÖ­Dï‘Mvv6K—.åðáÃ1ÿG~7bžxâ‰èoŒü,X°à®Á¥§Zeÿ¦B"úŸxó2D~o¬6}?ÔßY‹Ì¿~éø?áíÉÓ¡ÿ”F-¦Å·õŸß©¤ïŒ­5€r ý7ܤÅÙ %µ|5Ü¿ìÙø‡ñu‹þý'úOôŸè¿ûUÿ%âþS-ÿxê¯B¡ »»N‡F£Áh4F+ÒŸ¬Y³&¦ÞÞ3w¦Û„ªª**++Çlw˜Œò‹×~$Jÿ?pNC럆¢ëßgÆaÐÚ×;¡ØƇòÆušÍ»-8 ²¢A¯ÇjÆ…ù ô^Á냓ä(nll¤»»›ÌÌLª««Ñëõ;v ŸÏ7éÁPzz:gÏžåܹsèt:>ÿùÏc2™¨¯¯çÀ( víÚ…^¯'///F4~ðÁ£~wíÚµTVVNK¹Å{ÿˆˆ(((Àjµòá‡ÒÞÞÎàà f³™uëÖQPP@ff&K–,áâÅ‹£~£ººšU«V8~ü8õõõ b2™HKKcݺuX,–¤æÃŠ+X»v-J¥¿ßkäñxp¹\x<º»»G}Ïétò /Dz½ž¬¬,òóó±Ùläææ²sçN~ó›ßÐØØ8êûï¼óNôuäô¬Ë—/O›;xð`ÌߟùÌg˜?>¼õÖ[wý~¼Ïoþ”––òÈ#àñxøð鯯Çív“žž¡•••´¶¶&tÆùNÑx·æßIDûKTý‰Ìˆ>|˜¶¶6†††&Ý~ãA¡PðÄOPXXÈàà |ðmmaDnn.7n$55• 6ÐÞÞ>jбÁ©©©¸\.~ó›ßÐÑÑÏçÃf³±aÃ233©¨¨ ££ƒ«W¯&´þ$ÂþM•Dô?ñæ¼Nù^g3Ƨ@½­0üËiÔEy 7éÑeùñö¨9ùµT©‚¬X(ÿ‹æ¨þk}{!Mß\ŒF¥Å¯s°ì»W1—º®×¢Ï/Ä×sQôŸè?Ñ¢ÿDÿ݇ú/÷§üã©¿¡P(º¢`éÒ¥lÙ²£ÑmG@€îînúûûéïï§¾¾~Vµ€U«V±zõj.\àæÍ› âr¹P«Õ¨Õêq‰ñ–_¼ö#úÿsj+Ã+ Àà÷§éé·‚¦&4ƒë·à¯O~B_øþj¯uº9ú^ .¤Ür¶+µ·=Ö • •ñöÌÀ° 0ܲ¿*£M†™Wߢ/I³ä~¿Ÿýû÷óØc1oÞ<–/_NII GåÊ•+άDSGGGL#ïíí%##ƒãÇãt:£×ØíöQK™ç:‘<`ß¾}13‘n·›ð¥/} ½^ONNÎ(£QXXŒ¯¾újŒ0p»Ýôôô°|ùr,KÒ‚‘—••±~ýz‚Á ÇŽãìÙ³“žÕ …B8Gô½È Àb±°mÛ6l6[¶lá§?ýé}\:ÏOþ›L&6oÞíÀG:5ºººØ¿?»wïÆf³±råÊif³FCoooÔYYA1Ö âlÀï÷ó“Ÿü$ÆÞM¦ý&¢íâr¹xùå—ñx<1úW^y…={ö`±XØ´i¯¾ú꘢ÁãñŒÚÛÒÒ«¯¾Ê3Ï<uuu16*Þú¯ýK„í§ÿ‰7ÿïÅi˜ÌÃ$fªþÎV0#üzèò%ÿž/|ßÚ˜Âåçª ´¦ÔzPç atf£Ò…íßÀ»E8¾:€e‘›€[CÓK°o–2rþ[B-J—‰€n˜ùÿa€·û›Eÿ‰þý'úOôß}ÚNõþñ–"ÛoÄö¥¤¤ÐÖÖÆ[o½ECCä& f’HLßóçÏsäÈ‘i-¿xó?^ý¿2¡‹×°5ü¿÷0}lÀú'`üž€”߬—o’dÞ¾ÚÌÛ{G¯‚/ü¹™'ÿÄÂK¿ÕNøÝšsjžúÏvþ©…Ojo;µYVþýlrÓít:yýõ×9xð .— £ÑÈ£>ÊîÝ»cbÞLv04Váˆx¼ßˆäA0³1z½ÞèÊ•Hå‘TUUpúôéqg“‰^¯gݺu¼ÿþûœ8q"aËÀ£3If³yºt?2™ç7ÿ+**P«ÕÔÕÕ» êìÙ°ÉÍͽëŒÙ½˜"[RFŠÆ;v°wï^L&S؆iµc ÍÙÖŽÇ ß­ýÆËÊ•+8uêTŒÃjäýOœ8„·ËÞ™†»9¤Çދд´´„ÖŸxí_"lo<ýO¼ù/éLdÛ›-õw¶bú"(3À_®·§çžož‡¦_U¢ëÍÇl´`Qe¢hÎF¥º=ï­V©qw„'Ž=]”Û¶Q¡P îÉÄÊ&Å`Æ¢°Ñ°o-ožKnºEÿ‰þý'úOôßÌõŸS½2Ëÿ^ÛoÄþÞ~ûmêêê¦ÅaXUUÅóÏ??á¿;vŒûýH{ËÏÏG¯×Ïšú3™üWÿ?NCÍ­"ÚJЭ…¿‚ŽmÐV ŸçKá_HùJØ‘˜Lå€Ê|{&õÍ£Z:ú”C ^80qeüù;:|~n¯‚WÞ»m€Uf‹²§'£kkkÙ·oçÏŸ' ‘••ÅÎ;Ùºuë˜{ú§cÅl'b('ʃÈ,Âyh2™ÈÎîD[F*Mqqq4†ËÈʼn¢··7úü6›í«w{þxóÁ‚ÑŽi¼4DœªIžä9Y""0"³³³±Z­( .\#}>~¿Εáxí7^2220›Ã«Ò[ZZƽnä–Ž;;ýˆý™H 655ûýxëO<ö/Qö©ÚÅDä¢úˆ¹Xg­`L‡”/ÞÞÿLÓÄziøzÒP)UÑò6êM1×ø~Œaç´>×KHë 0èŒÑz¢P(:¬,š¦nSôŸè?Ñ¢ÿDÿÍ®þs¢û'»üï¥ýFla¢ëX"˜è4ô?þ˜`0HVV_øÂX¹rå]·ÛOWý¹[þÇ«ÿïW&Üž¬º•Žƒ¡ïÇ Ä@; þ=(4`Ü)_Mnl›+(u·gU´êÛžg&üÚ5àÇ/vá÷…ÿ~úé æåkÑiG^;Bë´äX§/³Ýnwô”¢‡~˜ÂÂBJKKÉÊÊâ¿øEÌ,ØL†f“YE2Þrà‘O§rÊZ"ˆ*ïtÐI7Rµš… RPP@FFFL`ãÈÖ„©ÎâÌ #5Åç'ÿ Etöª¬¬ŒE‹¡R©¢q8F¾ŽÚ“¯vr¹\¤¥¥E;Ù’’œN'^¯—’’Μ9³u–y²ÃD3ræqpppÂ<öz½hµZÒÒÒ¸yóæ= ܽ^/n·½^u’%ªþÄcÿ¦cÀžìü¿'gVWÎDý­˜¾ #øo€çÈôÝ7Ë –ùݸÍG£ÖŽ©üyݼp ‘ ?ÜnŠfcºž³1ª_ƒR–wb›Æ¢¢ÿDÿ‰þý'úoöôŸãÝ?‘埈ö;S‡¬8qâ®xM”¶ëׯóÚk¯QUU…Ýngݺu¬^½šK—.qòäɸëídêÏTó?ýÿÀ: ·´™¯–qg”‡vª²A™Á¾ä$T¯…êv£üìÃ^Ž_ÖÐØ¡äù§ÃO¡TÐØà¡«Ë‡N§Œ¦ünº_P¢V…øÚgÜ1†A5cÞÞ^~ýë_SQQÁ† ÈÈÈ`ãÆ1Ke¦9>á<Ò€ † gC’ÅÈYÀ©RTTÄ–-[0 ô÷÷ÓÝÝÇã‰vX‘ãçGnS¸ŸˆçùãÉFsû„N¿‡ÃA   ÆüçëD‹ÆÈs( zè!®]»†Ç㡪ª*FPÎUј,F¶µZ=æöبáV¹Ý)@&;»ù|d$¢þ̤ã Þþ'ùŸì>B¸Ç´6|JD÷Mk{VÀÂßëàÌõVhÎå8tº‡Xø|+o½ç¡û–þ{âw;hùOùXU™wÔ7?ú.*¿ÕÌ‘}¢ÿDÿ‰þý'úOH|ù'ªýŽÔFJ¥rÚœ­‰¸Ogg'û÷ï';;›ÊÊJ,X@EEK–,áÌ™3œ>}:i§7Ç“ÿñèÿÖièoM ¨óÆ¿&0bG™’§¡Z­ÆÐôùá–˜²á»ÿ·cÄ(ô:ø¹ü—ÿÞÅ×'¼\ „B,Ìð·†b®ùý¸Zt:Å„ƒšdqöìYæÍ›=º[¡PÄÄqÑ8õ<ˆ,‡ðŒc¼³½ñtúS×a·Ûyâ‰'p8¼öÚkc 9Ik6.[—xŸ?žü÷z½T*|üñÇÓþüCCa›¥×ëÉÏÏÇd2qõêU¼^/UUU”””Dc­D®ÂôõÝîˆ,˸q¿´Zmô1g4ÖŒj$09„ƒc'²þÌdqÿ#ó~<¦#¦¡Fÿhø0¼\oN£HU« (5¨ô~*þ¢›+ßQ1ø‰“.•J×çÁúh 9ø£eyüéëäë¿“ÎÂå!Ô¿ÛHË?ê1éSƒ {œhì*þ° }–OHôŸè?Ñ¢ÿDÿ ‰-ÿD¶ß‘λ¹Ú'tttðæ›ob±X¨¨¨`Ù²e¬^½»Ýί~õ«„ÇhŒ7ÿãÑÿ÷3*íÈ©ÈšŠ ]Ñ­ öA 39‰Ôét\²ó;ÿËÆŸÿ#¿ü@Kk—‚P 4êŸ-SMZ)v㘟 Â[kø›ŸxîïRy«¹$Tv&ˆ ¦î¬”2Ó_ Gã¬^½ú®F9ù1R‹eJª×®]‹B¡àÌ™3c¼‘ÉÈeòc1È3Y×§ûùãÍÿH,“âââqJD¶ujµZJJJ ³³“þþ~:;;Y´hQt¦y¢- ‰`®ÕŸ¾¾¾¨ýˆÄ¦‹¼¼ðŒ˜ßï§¹¹y\Ñ0^ù/Z´(z¿;¦ñÖŸ™ìâ½w"ò2un²NùhÿfÆÏߌÿ‚Ó8FÕét\šÏ×ÿ·¿~3Dm¥ ë^Šý øº Øz(ùš“P²³T ¤•Rh7@0HÁä¬î¡¸_ViOúh{|˜<áçëß1s q‘è?Ñ¢ÿDÿ‰þ“þ3¡åŸÈö{çJù\~ƒƒƒ>|˜7ß Ï<Úl6Š‹‹gýˆWÿ߯LXû¼áƒ ÑomùØ×D‚b{…g “%¬j/_æïŸºÌØ:Œ2äbÇ¥z¾ÞŠ»¹O[/ÞÎ~*2{ ¯O[/îæn†¯·â¸Ø€ãRõ- zûà³kÜ|w÷ ­bf%§“ùóçSRR„eÏ–ãla2H'¢¦¦Ï4îܹ›Í†R©ŒÆ«¨®®&###iéohhˆ ¶nÝJzzú¤¿«P(¢i›h‰xÄØÝ­Ó‰´¼¼¼9Ññ'âùãÉ€3gÎá·Û·o'%%eFD£Ñh¤¸¸˜«W¯F?»zõ*‹…ÂÂB ù3Ís­þ®_¿@yyù˜ñFT*ÕÕÕ\¸paÔLçÝfw³²²X½z5GMxý‰×þÍÔ€=Qù©ÿ)))c™V(Ñv·tεú;ÛÐ,º­‡1ý޵+W.ó·Û®ñÅU:T zÅŸIaùÿ£¥ü›”yƒ½á6ò…_‡ >¤âO”îIa0'À€'ÈöE:þá©6†ÛÏ‹þý'úOôŸè?é?Vþ‰n¿ñ: gcù\™—èð ‰Èÿxôÿ¢E‹¨ªª¢ªª £Ñ„Œ¼i·kÖ¬¡ªªŠÊÊÊ9Ñ.&¬©®7Áô,¨çCú÷`à;aç`ÐêB0ÿ_ [Á^ø»ä%R¥R¡1ZøÁ;F,ót´öª¨˜ïá;5–­ú,[7¬@éï!èéÿ0ô¬…JCPmB¡K% Îà·‡Osáä~>µ)È©«Úz”¤¸Œ4¹2Ðj‡’²§Þl6“’Þ  …BX,²²²ÈÍÍeÞ¼y@xÏÿG}$¢1Á×k×®‘——Gyy9999ìÞ½;wB¥Ráv»£†!'ù|>Þÿ}¶oߎÙlæ™gžáÚµkÔ××ÓÕÕ=ñl¬x¡Pˆ¡¡!, «W¯¦¯¯/ºÇd2‘››ËªU«¢Ážï6“ÞÜÜLYYF£‘]»vqñâEZZZ ×ýdÅ”ˆ§ìã}þxòÂ'»žúè#¶mÛ†ÑhdÇŽøý~ü~?z½žP(Ĺsçhhh ²²ò®3Uuuuœ;wŽeË–a6›£+|&º¼DâUDˆ¬š7o»v특¶··—÷Þ{/áÏOþ|üñÇtttPUUEff&6› ›Í6êºS§N¹Ú,¢ »»;fEŒÓ餥¥%*(ÇšiŽ·ýÍtý‰‡ÃÁغu+F£‘mÛ¶EmUĦD⬌Oe¤-Û²e˨χæìÙ³ã¦!žú3—c&"ÿ;;;¹ví .$++k”ͨ««£»»›’’’»¦s.ÖßÙ‚" á¢cøµé¿Dÿýûiÿó‹×É)µÓÒ¡A•Ö…BãáÍNöŸU:]Û»¸½šBâ«ý„ôF,þ ÏÏ÷1àkæüj£)… è?Ñ¢ÿDÿ‰þ»¯ô_"ˆ§üã©¿jµ:¦Dâæ|îsŸ‹qPºÝn^ýõY×þ5 Ï=÷Ü„×twwsðàÁ¤"¯ýˆGÿü½È„ÔXïtV&câjÚ†þFèzL»A»4  øÎƒç$8 !wrép8p8ÔïžÉ¦îh*.t°{U€§VŸ¸©©©¡¦¦•Ru:ú=#âV>¶4ħ—¨© ò'R)Kuñö©ÜÞäBtçê—Ë…[¼ Ä IDATÓ餫«‹––nܸ1®‡?ÞÓÓÓ£AæïD¥RE½ì#™‹Å2æ5žE¹åÌápŒ ïý5hnllŒzõcC E´MfÓ¦¦&öíÛGQQv»ììlRRRb–du@]]¯½ö•••deea0ðù|444pþüyÚÛÛY¼xñ(ƒ4~ø!gΜ¡¸¸»ÝŽÉdB«Õ¢ÑhÆ=„ , 999£Þ×ëõ£ÞëtÃD=ÿTó?ÂÍ›7¹yó&éééØív233±Z­¤¤¤ ÑhP«ÕIÙâ÷ûÆh4Ž9wõêÕ Ec¼ío¦ëO"hll䥗^¢²²’ììl222ƒtwwS[[Ë•+WÆ p<ÒþŒÄívÓßßOcc#.\˜Ô©œS­?³áôäx·FÇ“ÿ¤§§‡… bµZñz½tttpá¢3·“Iç\¬¿³ãg@¡‡Ð0¸ÞžþûÔÏçpÃåçхͬ²úAáÇjR™ã~ßjBil½Ž^%ÿûå>Þ:ÕƒËHZºEÿ‰þý'úOôßÜfªåOýU(ãÚÞ;·ÙOÖvMwù©ÕjB¡Ð¨S¦‡††èììäæÍ›£âX'’xíG<ú²NÑÎàD“,DÏžÝdddPXXÈÐ`?ÿ²«™ÕK2Qª4øƒ!¾÷Ž‚—kB|}ž†§–¬Âh´ât ñúÅüs“—O¯„ÿòZ5„‚AšZºxê_21¥fÓÑÞNKkkò2X¡ˆŠžé:&]˜………<ù䓸\.^|ñÅi÷ôGŒHdû’€ä¿0kX°`Ÿþô§øçþgÙÂ*3¬ÿúù—]­¬YšR¥¾å`ƒï~˜É[µ£cN-Íqó—Ot`ЄenDÿíüQ&k6ííí´Šþý'úOôŸ ‚èÿ‰íæ\2ð/^Äëõòìá¥ot°rQj­?üünµßµ¼]oàè ¡Ô+ؽ\Ãާͤ¤‡½¹A¿‡ÝìýA€ÚÖTªö1—'’P(4áJ aúQ*•Øíöè’ãS§NÍÈÒ๲ù~Eò_ané¿/þ~öv*K3Pi (𛺩žïäÐ ½N&]ˆ5Ãl-q ¾µX/è÷PßÔÞø¹Ür[ÿÝyr±è?Ñ¢?Dÿ ‚ wh±¹’ÐŽŽŽèëÖ~xüïƒüñ¶.~w«ž‹½Y¡2uÌïýÜNûŽ8ùó7 ïÖŠÒ@  ¶.ÜŸèt:RSS£ÛiRSS)**Š.Û¿téRô”,AAf±þˆÕf«¥ZOµÝEµÝ5®þûY“o¿.úOôŸè?AA¸WÔs5ánü÷ýðÃCnžYíæñ2+ŠtujJ%¡P¯7ÀÅfÏùÙ1¨ï‘Ð(//ô ¯¯“'OR[[+™$‚ sþâßá‡Üì]ãæñ2%+Š´·ô_xå ×àb“‡ƒç‚¼tnvK¾‰þý'‚ SA=× c¾÷.|ïÝJ…›Lº°¨l¿„ªx Âívãt:ŠÆ0Jf#AA’K×PDÿEÿ ¢ÿA!IÌ™ƒPAAAAA˜”’‚ ‚ ‚ ‚ ‚ ŒDœ†‚ ‚ ‚ ‚ ‚ Ä NCAAAAAb§¡ ‚ ‚ ‚ ‚ 1ˆÓPAAAA„Äi(‚ ‚ ‚ ‚ B â4AAAA!q ‚ ‚ ‚ ‚ ‚ƒ8 AAAAAˆA-Y ÌYYYÌŸ?Ÿœœ, jµš_|Q2&‰<üðÃ,_¾œ@ À÷¿ÿý¤Þ«¼¼œM›6áóùøá(™/ÜSý+**bûöíc~ööÛosíÚ5ÉPAÄ~JúÑÿ‚èÿ„!úóî|ãß@£ÑpèÐ!Ο?/ ì@œ†Â´“žžÎ–-[ÈÍÍy? ¡P(…B’IIB£Ñàv»%3„Y]ÿt:ݘöAA짤_ý/HûK¢?a4sÆi¸u1¬-†¦^8Óçš!8že¡ *íP” }°ïH?5=äää°cÇÔj5¡PˆÖÖVz{{ÆápˆhHvƒW‡›¼Çã‘ÌfuýÓh4´¶¶ÒÚÚJKK ½½½|å+_‘L„ŒÇ–@uQõß|(ʘ{úo®÷ߢ?Dÿ‹þ—ö7ý)cØÉ\¤Ð€ñiЭõ|P¦A |µàܾ«ÉMäòxíÏÓ0Í·tùð:i©ä•÷]|ÿ}hé‡yi°¢ ÒÁ¤/üþ¹f¸Öf|m|q‹–Ò%VÔV*£_Ï Ê¿lãߎN_¦gdd——G^^‹£ÑH__¿þõ¯“vÏ={ö™™ÉÙ³g9|øðŒT6•JÅã?ŽZ­¦¶¶–£Gâp8¤NsG8Ñ0êð`Õ¿sçÎqîܹèßZ­V2P¦%w‚~¨‚Bþ«à=ΟC°/ùúïÕoß©ÿxå}÷½ë¿ÍZJ—Nþ[¸p!?þ8?þñS >óÌ3(•J>ÌÙ³g“ÒÏuý!ˆþDÿO'¢?a4wuª‹ ý; šþ;ä€ÔÅá†í0ôàx!y‰\QÊ`_­ÍŠ&ÝÌCósøã•N¾¼á&J–-³âëB¡Qa*‡»©o{?º‚L®× ñz(Z[ˆÖ–~Ž@o× A·—•…$Ýi¨P(())aÅŠdffŽúüAX.^XXˆÙlÆívóÞ{ï¤N3o¾ù¦d‚ õO„» ÄHý )½õFPvuøŸq'ôþø.M‡þBkKÕoÒØ§¤|™Ÿc´þ›—Éõ«ãé¿iÓãiÂGy¥RIGGGÌõ~µŸbÿ\DÿKûaŽk E Òþ6ì0t‚¡ï‚¿)ü™2Ì¿ ƧÀüÁw<'’“H­¼x;®kÅXœƒÊlÄ]ßNæ²|r³RQ( ½€Êh@©UƒJ±(—ò¢\|ýC¸:o%^‰óJ3!¯?úûÉÄd2ñ©O}Šüü|‚Á ÝÝÝôöö200€×ë} fÜ222Á ‚ ³…Rÿ4 Á{¿¾+ 4„†Ö?ëÀÔ¿€î=òM‡þk‹ÕåwÑŹ”çâëÂÝxKÿ©”8/7ò¦EÿGyy9ÙÙÙÞ}÷]Ù–)ˆþAf-Ê%ýfPB úþ3à¿ýY°þ 4Å )ÝÆä9 ‡F. †¾Ö†6ÛJJù*Õ¤~C“jFmMÁu£ wCWÌgŽ$î”0 <ýôÓX,<'Nœ ¶¶—ËõÀU¶ÔÔT€1·é‚0½¨T*B¡Á`P2C„Rž ; ýuÐû<„¼·$ظßßeÈz-¬Ï€ó§³Xÿ¥™Q§N¿þ7oSR¨®®àäÉ“ôööÎ9û/ý‡ ú_D¿ NùMè4Ô, ÿè Æa%Þ a§¡Òš¼Dv Æþ­ÍNÅ´¤ðžO2R(‹óP¨”¸ntÜþýä¥ýñÇÇb±000À/ùKœNç=¥÷¹çžÃív3<<ŒÓédxx˜¾¾>šššèïïŸðû<òK–,‰y¯¢¢‚ŠŠŠQ×&ãÈômÛ¶ñÐCzÁ‚<ÿüó£ÞñÅJØó…ÑhÄn·c³ÙÈÌÌÄh4¢×ë©©©áÒ¥ñ÷XY,–/_ŽÝn'%%¯×Kgg'çΣ¡¡!áõ¦  €§žz €ýèGn_öÙgIKKãÝwßåòåËÑ÷Ÿ~úéQ'ÔEèëëcß¾}ÓZ²³³©¨¨ //ƒÁÀàà ;v ¯×;ëòïk_ûƒ!æÚ¦¦&Þxã¨Ñ/,,¤¸¸˜¬¬,®\¹ÂéÓ§¨®®¦¬¬ —Ëu×|Þºu+¥¥¥ÔÖÖrðàÁ¤Ø!“ÉDii)yyyddd`0PÝp÷ôôðÒK/*çU«VQWWÇ'Ÿ|Buu58>LWW«W¯fÁ‚Fjkk9räHÌj™xë_"™îö+sC8ΟßvŽ$ÐÃ¯é  ß˜<§á\Öã±iÓ&´Z-===œ:ujÌki?ïÕþ'âûñ¦ݺu,^¼˜ëׯóÁ““Cyy9yyyÆ{Òƒ²²2ìv;©©©h4Ün7N§“¶¶6jkkéììLz¹ß‹þý/ú_ôÿ̵¿Db·ÛY²d 999hµZz{{éêêâüùóôôô$Ý~Ç[U*%%%‘••sÿH[Mú=Ñã¯xó/Þò›3NCý-çáÒð(‘¿c‹·bÝxÏ&/‘—Ûn¿Vµ˜Œ]I•Š‘=. åØYoÏÆ?8Œ¯;ÜA]jONº ™7/ òí·ß¾'‡a¤¢ét:t:Vëh¯l[[555´·ýJ¥’°"NIIA¥RáõzÇ\å˜ £b ¢ÙlF«ÕâõzcÄA„;=îñ>ÿH222¨®®Æn·£T*ÇìLÆcÉ’%lÚ´)ÆH ìv;v»S§Nqôhbƒ",#N7¡hˆè½s·§§¿ßF£‰þ3 Ñ`Èw#QõG©T²yóf–.]ÓnÓÒÒHKK#??Ÿ—_~9¡Û³âÍ?…BAww7:FƒÑhŒÖE€²²2Ö¬YSo"Ÿ\¿~U«V¡×ë±Ûíãv,jµš¢¢¢°!øIUU•••cÖ{`Ìú Óé0 äççóÐCE§F£‘mÛ¶ár¹bb³VTTÐÖÖF]]]Âê_¢˜‰ö+s¨n7ý7Ç¿Ì{:ì4TÛg£þSΨþââb,X@(âÝwßw¥A¢ìçTì"¾oúõz=ƒ«ÕÊÆY¶lYÌç“Õååå¬_¿>zrìH}i2™°ÙlƒÁ¤: §¢?Eÿ‹þý?sí/h4¶nÝJqq1@ô³³³ÉÎÎféÒ¥>|xÂx¶ñÚïxëoaa!>ú(&“iÜk’é4œJú9þŠ7ÿâ-¿9å4t½¦/†aú÷ ÿÛa‘mhOƒvyøåá7’—ÈÖ~¸Þ Å60>”7®4-šw[pdEƒ^UÁ ó蹂×_ONºKKÃÕ®®®) §ÓÉ /¼Àëõz²²²ÈÏÏÇf³‘››ËÎ;ùÍo~Cccã¨ï¿óÎ;Ñבӯ._¾Ãüùóillä­·ÞJúóGX±bk×®E©Tâ÷ûiii¡§§ǃËåÂãñÐÝÝ=n>òÈ#x<>üðCêëëq»Ý¤§§G;¡ÊÊJZ[[:ãx§h˜ˆÈçwvæ|ðÁ¨k×®]Keeå¤Ò¨úY‘wøðaÚÚÚÂl6³nÝ: ÈÌÌdÉ’%\¼xqÖä_(Š®(Xºt)[¶lÁh4Fëq  »»›þþ~úûû©¯¯^ßÕÕEKK ùùù,[¶lܺ1þ|´Z-CCC477'¼ ®ZµŠÕ«W¸pá7oÞdpp—Ë…Z­F­VÙ™EÄMzz:gÏžåܹsèt:>ÿùÏc2™¨¯¯çÀ( víÚ…^¯'///ÆioýK” ž‰ö+sš„\ 0†ãŽ{YË­az8vÈ™ø¤LYÿeϬþo€¿qãFΜ93¡.L„ýœªýOÄ÷ãMĉTPP€ÕjåÃ?¤½½ÁÁÁIë‡êêjV­ZE àøñãÔ××388ˆÉd"--uëÖa±X’ZæSÕŸ¢ÿEÿ‹þŸ¹ö/ …‚'žx‚ÂÂBùàƒhk Ï€åææ²qãFRSSÙ°aííícöñÚïxëï¢E‹xì±Ç8þ<×®]£··ƒÁ@zz:ŸúÔ§P©T¦a&ô{¢Æ_ñæ_¼å7眆!7ô~Òÿ!|ŠrÆ?ƒëÍðIɦÝ`Üž£Ðÿ-ÆÞ¾œ@^øþj¯MÆø¼R{Ûc«P©PÇw£2èÐdZxõ­Aú’b#rðÉT–ÑGî‡#æ”È Üb±°mÛ6l6[¶lá§?ýé}\8Ï_VVÆúõë ƒ;vŒ³gÏNzVÕd2±yóæ¨i¤QïêêbÿþýìÞ½›ÍÆÊ•+§E4˜Íf4M4’R©ŒÎ ÏÖ8™~¿ŸŸüä'13‰n·›ð¥/} ½^ONNδ8 §š‘LJJ mmm¼õÖ[444àóýÿìÙ³äççc·Û±Z­ÑYÛ‘”””påÊ•¤ä}yyy´Ã?räȤ¿yÞŽŽŽ‘ØÛÛKFFÇ®œîèèÀn·ÚÊ=ÓÌdû„¹Ž¯´+À¸Üï# Žø#‰;̦¤ÿ 3«ÿÆbݺu˜L&8vìXÒï7UûŸ¨ïÇC¤`ß¾}1+Ñ&£ £ÃW_}5Æ1àv»éééaùòåX,–¤­”‰GŠþý/úæÚ_"î]XXˆËåâå—_Æã¹<·±±‘W^y…={ö`±XØ´i¯¾újBío¼õ7==G}€ýû÷Ç|îv»éëë# R©’b?ãM¼ã¯D´ÿ™ì?“Å]]œVèþ28Á°²^ãΰ³°÷›áÀØÉæÍó É°&´rj3­¼y.I«TF—ó&ü÷£3Af³9ê |P˜ÌóëõzÖ­[Àûï¿Ï‰'î©Ã¨¨¨@­VSWW7³gÃûòsss:c £[FІ;v°wïÞhÝŠlM˜Í¢! ¹õÀëõFgÞ"A²gkþE,@€·ß~›ººº †@tVidç1N‡ÝnOªÓ0RßóóóÑëõ÷Tf0zÛÁXAÌï5ìÂt1“íWæ:ŽoÙ©uúß@]pË!gÝÃáÝ'©ß¾eû’wzòmýëÜñû¡¥SA`qÄÛ{¸Üwê?KÒôß|õ«_åù矧¬¬,ªGü~Òï;UûŸ¨ïÇ«"}ïX[¸ï¦ªªª8}útRVÝxõ§èÑÿ¢ÿggû› +W®àÔ©S1ÑÏâDøôØììì1ó ûoý¬Î¼téÒ¸ñH¹&C;Ç›þxÇ_‰hÿ3Ù&‹I•´* Ôá-ùø"±BU`þ0<6= -͵%¼’Åé‚ïÿJÇoi¸Ñ¢Ä¸›ÑÜ©àÐi5?þwכí¶X”“œôŽŒŸr7çÂTéííÎÂÙl¶nPs·ç/..ŽÆP™J¼¸ D;¶ñÒ1šªIžä8Y"" "²³³±ZÃŽó… ƈŸÏ7-ƒ„Lo•_2â:$2ÿ"ƒ–{)ãP(íT/^<ê‹‹‹Q©T´¶¶Ž9 –>þøc‚Á YYY|á _`åÊ•wÝî2R $;Àq2™éö+sO ~Üš,þ%ä…œCáÝ'Á~p¸%ŽÏ&7-aýw;îTWŸ‚/ýE Ïþw _ÿëŠqì6ü¿ÿb`Ï·-ìú33ç®Ýnãj‹1iúïn$cœHûŸ¨ïÇë8¹[4ž~0™LdggL¸u5B2ú¹xõ§èÑÿ¢ÿgoû›ˆŒŒ Ìf3---ã^72¤QZZZBío<õw² &c£gJ¿Ç;þJDûŸÉþ3Y¨ïvn-¤ý5º¡ëYð×n=XþÔ…ú?@[ $/Ž)YæÛÛOB!xù]®¨jUˆŸþ×!¬F??þ×.üþ àé§ÓÉÏ×±ëÏ,ôÞö–û): ¶$…3é(94¥BR«Y¸p!dddĶ8'ï/v"Ÿ?rPÃdN§KDF„}YY‹-B¥REãŒ|!ѳ-.—‹´´´¨‘)))Áétâõz)))áÌ™3Ѻ5[g';0H‰Ì¿©i¾|ù2UUUèt:JJJb¶`D–Æ'SÐ\¿~×^{ªª*ìv;ëÖ­cõêÕ\ºt‰“'OŽûÜÉÓÁlh¿‚0×qþ܇ÀðiP/¼ào×;á](Ù¿ _7Þöå¤è¿ ‚—~«§µGEº9ÄõV¿úPËç7¹ø×: øÃ¶úsŸË ¹ßÈá³ZÒSBô:üàuÿøŸ†Q¨‚IÕwòãÿ˜ááa¶oßNQQëׯ§©©)i“EñÚÿD}?&³Še<ý0òàŒ©†Š—xô§èÑÿ¢ÿgGû› #'…&Úièr¹ðz½hµZÒÒÒ¸yófBìo¼õ7###úwÄ16U=“ú}ªã¯DÝ&ûÏqª !íï±{~‚·êާºƒù÷Â¥Ÿ38š¼„*Q!)Fxd¥÷> ÌŠb?ÿ?{wW}úÿ}Îìûhß,¬Í²l˲ecØÄC Á¦p›äÒ@š›&÷ö&¿þzÛÞß½I÷§÷¶M›öIÒ&i! !‡@0˜-Æ€1¶åM²åE’µïšÑlš™óûcŸh4J,Kù}áßó4$¶CQªªª8qâ¡PˆuëÖ¥×jÐIóY~“ƒUU/9Ø ‡Ã=z”††êëë“-›ÍFII ‘H„“'3Û__/¼ð466²xñbV®\I]]`ÿþýSšm\ë5 ¯†ãWˆëA´|?˜úºýPs!ÚÁ™]‡Dü§…õDzÝ,Vl[ nTøÎîq*‹b¨*´·‡èïŸÀdRPÕò³bܺ¾z›w« úcLtØÑ磘¢‹ÿf²k×. ±Z­lÞ¼™gŸ}6££†Îõü?ŸïO7¡0—kÐä8‹Å2m·™–Nü)ñ¿Äÿÿ/üñ7çëÕ¤ó^¯Ÿ¶yròúzn¿™éžb.çßt÷ßÉ£IÏVƒ5SIÃù:þæzÿ5ŸÇÿB]?$ihÿ(Æx20vA²Y›€±5,w‚í·2—4ÔëõÄtF´h,^ÍøÓÏûY¿l‚‰l^;˜M _ÿƒbþä/øâÝ@Óøò§ƒ,)‹2ìUÙ¼6ŒQ¯Z4Ê&L&f=¨çª««‹êêjŠ‹‹1›ÍÉ>*.•Çãáî»ïÆçó±}ûvzzz¦Ì“‘ìzlZ—îö'.¤si ‡“¼¶··óÞ{ï]ñí÷zã…šÍfJJJ°Ùl?~œp8̺u먩©Iöµ˜Wd¦ü&_Ð/÷&¦©©‰•+W’““Cqqqò¼ ( 'Ož¼bŒÞÞ^vìØÓédåÊ•Ô×׳víZ<¿üå/S‚«k½¦áÕpü qÝÞ5‚ãËñ¿Çþ6³ýÆã?Z"}n&ºrØè²q»MEëà¿®7`,›@g óõ¯ó'6Àï}ÑMq‘‘XPÇÿ·ÅÁDŸ›;³Í£1Ñ€¨‚®0È„fÄdR2ÿM' òúë¯sß}÷QTTĪU«øè£®ºó&Þ%“†“kÇäææ.Hm£tâO‰ÿ%þ—øa¿t 'ÿv:3öûm4“^¬ÖùåœÓÝ'¯¯Ó霱¶a¦*Ìçñ7—û¯LÿWúú™)³¦‡ Kã¿£³ô!|ýÜ‚ò€ ]·L&ÇÆ<|ñ_ øæ­<û¦‘¾!•-aîYƨjhÑøO~®ŽQW ee–äkJLãã«Ãï¼ó;vìâýUVV^‘`àJZèãWˆë‘å^ÈþÇxô8þ¾ÙÏ‹Çå|ñŸóøó§5ž?¦»_GÌk%6f!:ÿ­E ?GǨ»†Ò2 Z4FÌg:7ÝJÌketÈÈ«G'ø»—"|ñïí¼Ô^sůimmm>|ˆÖ‘““sÕÿ3ùþK•Î5Èï÷'ûK[»víE“j™¸Î¥Jü/ñ¿Äÿ wü¥cxx8yþJô7ââb ^›íìÙ³ózþMgÿœôL¬ãlçèLóuüÍõþ+SÇÿ•º~fʬ%;7`Œi–|W"±8qÈPë®ññqŽ5ãïï;Æ#[ü¨±GN(hmÚŸøQ›vÚ™³0< ÷ÝäŸ~ûžÃ³¶ÙOÇ™3g’;Þ²eËØ¸qã%7#P%LÎÖ2q±¼XÐxÒZ\\|MœøçcûÛÚÚ’OL6oÞLvvöe­Ã€xµ÷Üsv»}A‚«ÕJee%ÇON;~ü8N§“²²2 óO¯µýg¾Ë/¤!œe«¢¢‚E‹‘ŸŸ×ë½ä@!úûû“_x^º’† }ü q=Qsâ£%»¿ŠüÛaìÛ™ÿÜññqš›ñ÷w·ò¹5FtŠBËH4%þ-C‹Ä8vZ‡/ ðÊFüã Mhhuw'R IDATQâýmkÐ1b4áž%fþñS]ø3ÿÍæ7¿ù ###èt:6oÞ¼ I‰ÙÎÿWâý“¸æÎµlvïÞ ÄkmÛ¶üü|TUMöWµ~ýúŒ&lÓ‰?%þ—ø_âÿ…;þÒF“Í^W¬X‘e2NÇúõë8|øðe×4»Øù7ý7 &Gœ_³fÍŒÕdò>a>¿¹ÜeúøÏôõ3StÀ7g m`ºôÐeÃıxÿ†Šì¿ŽGãÁØèÿhG†VR§ÃæpcÒÛ83–ÅÑv.KŒºâ0D4ˆhDBà÷ƒ‘ÏüÆÂ½«œíSùÛ§ílª  DãóîÖñÚ½Ã:ZO…xvŸžH$sýYµµµQYY‰Éd"??Ÿºº:\.W²3ÍÄöéõú)},]º4ù¾þþþäEÄf³áñx¸óÎ;)**â£PÍ6Ê‘^¯§ªª ƒÁü=¹/+ÑŸWMM n·›¡¡!Z[[/:ºÛ‹Å¡ªª ³ÙL]]n·UU“U'»éúAUUŠ‹‹q»Ý444P^^ŽÓéÄh4b6›1 ÉåÍwßDªª²bÅ œN'z½ž·Þz+YåÞëõÒÐÐ@NNŠ¢pèСKêT½´´”ââb‚Á ‡ºäu™ËþSPP@yy9±XŒ}ûöM»\ÇCaa!~¿?Yûâj,?‡ÃÁÒ¥ñ'$û÷ï¿ì‘ê¼^/åååØívª««QU•¦¦¦YGV›f³9e7™Läää°xñbî¸ãL&@€·Þz+e›rss©¨¨  ÑÔÔ”|½¶¶—ËÅ’AÎâÅ‹ÉËËchhè¢ý3ÎuÿKœ'xûÙ_èãWˆë®œ¿î?‹?$ÖÂàýxÿõ }¾N‡ÕáFo´Ò>/†Ã¤£.Ï€j ¢³ûPC(ú ~¿‚Û¦q²SeÏ#·- ¢Lha=ŠíoõŒÑ s²g”g÷«‹ÿrrr¨ªªJ^3.ìþ¡··—¥K—&oF.åZp¹çϹžÿçëýé¬QQ¥¥¥D£Ñ›pÏ? a±X(((Àn·³lÙ2V¯^Íš5khhhH&ôz=ttÌï Lºñ§ÄÿÿKü¿pÇ_ºñgOOË–-Ã`0°dɼ^o²oÕÂÂBî¾ûnòòòæÕW_69žÎù7Ýýwtt”ÚÚZŒF#••• Ðëõ±iÓ¦ä¨åýýý´µµÍë÷7ŸÇß\î¿æãóçûúy5˜õñÔøÏA_ÖûÁú`ü'6 DãOQâIıˆŽ’)‹·Ëů> ðË;ùT½“Îa=±ñó…|¸ÝÀÿÚžEUA„±€ÊþÐŨ_á‹·¢"$G ÿõã!†üÕÏüXmvbZæFXòûý<ýôÓÜzë­,Y²‹ÅÂòåËY¾|ù”Üw¾ó”×Þ}÷]¶nÝŠÕjåþûï'‰‰D0›ÍhšFSSmmm466^ôIckk+MMMÔ××ãp8’O8N:•¬.;_íõCÊ/Z´ˆ|pJ€·k×®yßþ3gÎð /°qãF\.µµµÔÖÖN™o¦íï½÷èííeݺuäææ’ŸŸŸöìÙ3¯å7¹ÉÁÀÀ@ÊEj||œÎÎN-Z”<)^hÛ¶mS†wO<%t:<ôÐCSÞóꫯN{1\ˆýg!ËO¯×§ì£“Ÿ´}úÓŸN¹ÀƒAž{®ÏÁƒÙ²e :ŽX,ÆÑ£G3ºýƒÇ{lÖyعs甎´ç£OÃt÷¿Ûo¿=ySpáºÜ|óÍÉ.qA~úé§§\¸òøâzàü˜7^ï¿ÄG¹R, .—‹÷‡øÇÏž¢p©‡Î^#º¬>ЇPíÃ(ê±qEÖ…v•gí¬¯  EÆQ­=è\hf®HŒ¯”G›èà¯éÃf³£i 3Âfoo/~ø!7Ýtœ>}:ÙGÙ|œ?Ó9ÿÏÇûÓ]ÿù¸½õÖ[œ>}š+V››‹Ñhdpp®®.öïßÏÃ?ŒÉdºìþÆ/U:ñ§ÄÿÿKü¿pÇ_ºñ§Ïçã׿þ5›7oÆjµ²uëÖ伉e%ú¹›®–aºçßt÷ߎŽöîÝËÚµkÉÊÊâþûïOY÷ŽŽúúú’5¸3a>¿¹Ü¥óùóñý]sIC€Ñ¿‚ÀK`ûmÐWÆŸ:ÇÆ ü„ÁøOÏ%3Èçóáóù8 ¼~°“dññj«sÏh˳&øñçï5â­UɵG©)cÐAlÒùt OÏ·öºY‘ä•}CÂý/ä`0ÈÎ;ùàƒ¨®®¦¤¤—Ë…ÃáH€Óu”ÚÚÚÊöíÛill$//‹ÅÂÄÄmmm:tˆžžždí§‹ o¿ý6 ²²ǃÍfÃh4b0.é)Õeßl8N›}¿ðõéF·›¯íïèèàÉ'Ÿ¤¢¢Ç“|ò<¹JðlÛúôiNŸ>Mvv6‡ÜÜ\\.v»ƒÁ€^¯ÏHó€H$‚ßïÇjµrâĉ)Ó?>kÐìd÷B:nÚQ½g”ãJï? Y~Š¢Ì8êù…Í&W3ŸÍ‰'X¿~=‡ƒ'Nd¼I‰^¯GÓ´)£|y½^úúú8}úôŒÕó磯’t÷?§Ó9ãwàp8Rš|ø|¾Ÿ4.Ôñ+ÄõÀûo fž›8|å??ÿv*äT0ÂÇ«:X㌂FQÃÄ|çç¿)ß‹oe„7O؈y'€aT«LF†‡tüó›6ê³'xùÃáØ‚–í‡~˜ŒI¶lÙÂÏ~ö³d­tÏŸéœÿçãýé®ÿ| ÆÕÞÞN{{û”×EI&Q.õ>s?%þ—ø_âÿ…;þæ#þlooç©§ž¢±±‘‚‚rrrˆÅb ÐÒÒBssóŒqkºçßùØßÿ}º»»Y¾|9 †††8zô(GeË–-äççg´£ù:þæzÿ5×ÏŸ¯ïïj£ïí媗““ƒ§¬ŒÑ‘þí·ºY·,U§¿ìåh±]ýlû~.VwÝÝ=tuu-È6%úWÑ4mÖ~;Dæ’*‰àTÊ_dZVV?ü0ªªòÔSO-Hí!„¸ÖäääPVVÆØèß°‹›–e£ê¦ö³ôüa¯¶Øéõøí†~kåØÔøïl÷ÿ0««€ÞÞ:;»¤€o@eee|ò“Ÿ$ðÄO\ñæaJü/äûrÿuM7×Ò~øÈÂá0ŸýWxêK=4Öf£3Z/y±Hˆ3gy軎uv¢Óõ$³ä ÑŸ•œ¨ÖµÒ‡€¸ö9N>ñ‰O ª*ÍÍÍrÁBˆËˆÿŽLŠÿ~ú¥^ksÐSkÒܼØOUn˜Ò¬ œ¦Øñ_˜3<ô½Í“â?qcQUÇæM›€xÓ²…ˆ%þ”ø_È÷/äþëZrÍÔ4¼I¸¾ºÙŒÝå@Õ›g¬"‹„Žûøéîq¾ñ ûå‹BdöƤ°°ÜÜ\JKKñx<¨ªJ__Ï>û¬,B‘Fü÷G[áË›Í8$þ3í'&n·;ÙœÐívSQQ‘l¶yôèÑ)}é !„û/1Õ5›4LÈsÀÃ7Á]ËUVU±šô(j¼æ`x"Ê‘Ž;›b<µNÈ.„È<«Õʾð…”×ZZZؽ{÷´ý÷!„˜kü§°ªÂt.þSÑ´˜Ä‚5kÖL´`xx˜?ü––)$!„û/q ®ù¤ádªù°™ žQˆH `!Ä•>±* <òô÷÷ÓÚÚÊÀ€Üµ !„ÄâJX²d ·Þz+ãããx½^zzâ}˜/T?æB!äþëš-[®£¤¡B!„B!„"}ªB!„B!„b2I !„B!„B!RHÒP!„B!„B‘B’†B!„B!„Bˆ’4B!„B!„B¤¤¡B!„B!„"…$ …B!„B!„)$i(„B!„B!„H!IC!„B!„B!D ½¸’>ö±ÑÐÐ@4å»ßý®È ,//òòr q:èõzžxâ )!„X`–{ÁýøßÝk¥<„ÄoBâ7!„¸QIÒP\Qƒ€`0(…qƒÊÎÎfÓ¦M¥¼®iŠ¢ iš’B!ñ›øM!Ä»f’†›—†Jè‚Ðtbs¼6UçC£*r¡}ž|2u3Øl6l6[òÂ%Þx;œ>¾Ë…B!9ún@………Üÿýèõz4M£««‹¡¡!ü~?>ŸO‚N!„)¶ÔÁúŠyŒÿÊ¡"'óñŸÄoBâ7!„×E p-¬dC)lÿf¶ò|b "c~:ÏŒðôA¾ûtŽÀ¢,XU¥Ù`3Ah"þzÓY8Ñ ŸO¾!„3ÆÏ|cöø¯4V•Æ[/ÿ¹Ð»lÿf’““Cqq1ÅÅÅ8N¬V+ÃÃÃüêW¿ºê¿ ‰ß$~“øM!nL×DÒpU¨±ƒ^Œùn ÙªÊ ø£Æq¹í4í#*õõ.&†¼(¶ÚE;÷Ž`*ÉåäñQ áÊ0æg E£„ûG‰ì.㊊¢PTTDQQË–-ãÅ_$\÷;ÜŽ;䨻A•••áp8ƒìڵ놬i+„bâ¿Õçã¿õ."Æ=#˜åÒÚ<Š1²°ñŸ¢(ÔÔÔ°jÕ*rss§L¿VšûJü&ñ›ÄoBqcº&’†F=„{G ÷ŽâoíÆZYˆÎa%x¦—Ü‹(Ês¡( Þ¦Sè¬T£EU°V±¢²ˆ‰a/Áö¾øU•ñæ´p4¹üL{çw8{ö,±X ƒÁ€Ç㡺ºšììl ¸çž{øÅ/~!{¤¸nåääܰMó…BÌcüW¿ˆ¢ÜsñßÁÔø]<þ«O‰ÿP•+ÿÙl6î¼óNJJJˆÅb 044Äèè(ápXjl ‰ß„B\Õ®‰¤¡wòCؘ†ÿD7Æ7ö‹Qtê%-Ãå@ï¶8ÕM°­?ešï ´´epp0ù__ûöícË–-TWWSTTDii)²WŠë’ÛíÀï÷Ka!„¸®ã?‹ÅÂ<€Óé$ ±wï^ZZZnˆV%Bâ7!„×Ù“†*¼Ú(D 6ÑAˆ´Aø=ˆ\¡üVïXêÿÆ7¶º2E¹¬å(Š‚µ²E§8Õ{~ù£ Sø±XŒ·ß~›êêj<ÏŒICÇC]]………F†††èïïçСC)ÉÈÉî¸ãêêêèîîž±ãÃ?LNNû÷ïg÷îÝÓ¾²•+W²råÊ)Ëyë­·8tèPÊk<ðÀ”Ö†‡‡yòÉ'g-Ÿ›o¾™¥K—ròäIÞ|óM Y±bÅÅÅX­VÆÆÆhooçý÷ß'_4x_¾|9·ÛÁ`  2>>Nww7---ôõõeü;·Z­x<òóóÉÍÍÅjµb6›Ù½{7G²¿>öØcƒAü~?ãããøý~†‡‡éèè`dddÖÏJ÷ûK×Ö­[©ªªšòúâÅ‹ùêW¿:åõ'žx¯×;oÛŸnùOæt:ihhÀãñ`·Û ‡ÃôõõÑÔÔD[[›\I„×5óí`ý j(„C`_»Âñ_¡ÛÒ4â?U!pºïŠÄwÝuN§“ÑÑQž}öYÆÇÇ/ù½>ú(‹%嵎Žžþy ÞÇ\YY•••äååÑÜÜÌþýûX¿~=Ë—/'\4ÎÚ¼y3µµµ´´´°sçN‰ß$~“øM!ij& uy :èM>c߆‰C™]ÉcÝ“ÖÉjĶ´tú€qòkJ¼Ê´Á¯§€È˜Ÿ‰øîhÏÂ}@€‘‘Ünwr„åÉ ›7o¦²² 9`JAA,[¶ŒwÞy‡¦¦¦9}~byª:õ‰½ªªŒŽÆ#j»ÝŽN§#Oû”|º oppH$‚Á`HþX,–dgÚ½I1›±X,¸\.n»í6êëëS¦gee‘••EII ?ÿùÏgLfÅŠÜrË-É‘ÿ£Zççç‹Å2tæää°~ýz<Ï´emµZ§¼f³Ù0™L˜L&\.×”éÝÝÝìÞ½›žžéwàt¿¿tE£Ñ”„¶ÃáÀh4‡S‚Ë„X,6¯ÛŸnù'ÔÕÕqûí·£ÓéRnb<‡}ûö±gÏ„âz”õwñ¤aóÌ3)E0dpp††œNgƶùòåÜrË-Äb1Þÿ}ó™ÏŸŸÏêÕ«%èB\—/õÿð>ü]Èý1è+Àñûx ˆd2þ3¢Ïv$_‹F!û¹JF©ñŸõ|Í"0ÞøÄr®2žÎjÆãä™W2ÿ%>™K3Ì™b!»ÝNww7/¿ü2mmmLLLÌøžƒRRR‚ÇãÁår%k­MVSS@ss³Äo¿Iü&„bFê\ß톑ož À Á¸:³+ºãrÎ_(ȶÛBüø3þS]ÓoʈOákß¶ñwOY©^åÛ_?ßDĘëbGÓÂ~k×®Åd2122ÂÉ“©¼W¯Žê¾}ûR†ÉÀ=fïÞ½@¼¹r¢£â˽°Ãô5 ¯† #|^Øô!±ý‰DëtÛ¾nÝ:öïß?ã“ÈL2›ÍÜ|óͼñÆìÝ»wÞš‘Œ%ŸD;Žä ÊâR¶?Ýò_¹r%z½žÖÖÖkІ„"c×hÄFãý]ë2ø¶Ðªé|ÂI¡ &CO fl%õzb:Z4“ž¸þßßçÄYEQŒz@¯ðµ?(âOÿ¼ŸGÍ¢¸ÈšÆŸ~ÎÏCR’ÃlÎ-B‹F ÇŒ˜LʬI¹ùðúë¯ÓÜÜ|ÉOŒ‡‡ÏGàN§“ñññ‹%Þlg¦&&³mWsŸ†é‰fb™îÓâ¹sêkÀãñp÷Ýwãóùؾ};===SæIŒhw=6­HwûÓ)ÿp8L4E§ÓÑÞÞÎ{gBˆótyñ'Í™ù ½^/j$6IÆN+üÓø&2`6)|ý¿ñ'ÞÏ;ÿU—Dyüz9p¶Š?ùQ>zî1J‡¸³æY|Ñ3˜L‰ÿººº¨®®¦¸¸³ÙL0L;šK<ÔÔÔÄÊ•+ÉÉÉ¡¸¸8¹^Š¢pòäÉyë§Oâ7‰ß$~Bˆë׬™"ÇïÇçÿéô CíÜC L& M&Ç|å|ñ_ øæ­üò-#]ý :4jE0ê4´hü§ WÏhV-žrkò5b…QL:Q¯ÂËïøÛŸXxìÿ¸ØÑQ“ì°:ÓÈå41NΟè›c:ÅÅÅ@üiÚÙ³gS¦%žÐͶ}—š4¼”eÍ·tFvöûýÉþRÖ®]{Ñ ,5-A’ÓéœSG×6l@Q80mÀ590ŸÜÌâjùþÒ•îö§[þ‰¾p*++¥éŠB\À|GüwäD2Sa-ÿ•ó{ÿœÏ7~håÙsñ_"¾›ü“.þ+õX§L[^x§±§ÃÊHì&~tð/Øãú€üâUYï–––äµiÆ i-뚆—cllŒS§NP__d¾i²Äo¿Iü&„×u¶)†ªsÿ™j‡+çû4ÌdÒp||œcGñ÷÷ã‘-~”hŒ#­:´ˆ–òjì=ª#VØ{T‡×Ë”yΜU†ûn òíß>E çpÊSÍ«E4M6Y±bErP”Ét:ëׯàðáÃSªñ'úB´ÛíÓ’¢(Jòb}± +ñ¤·¸¸øŠ.‰€b®üÝ»wñ'•Û¶m#??UU“ý¬_¿žœœœŒ­[[[²†èæÍ›ÉÎξä÷*Š’\·Ùš"%v̯úXIDAT¾¿‹ ñý¥c>¶?ò8pà`èž{îÁn·ËC!ˆ˜lÿÒ¹XãŸ3ÿ57åï?uŒÿüq?JDãð‰©ñ_k»ÊÏ^71PØþ¦‰ý-zbç§«Ñ›«ž%ž@Q,f#yKÈ[òµŒ¬÷™3g’‰‹eË–±qãÆ97CM'içG‰­¨¨`Ñ¢Eäççãõz§ëŽªª ƒÁü=¹æä¥–_ii)ÅÅŃA:4ë¼EEE”––Fù裦ÇãñPXXˆßïçðáÃ)Ó†††°X,`·ÛY¶l«W¯fÍš5444$ƒ½^Ogg'ó4ŒŒPUU…Ùl¦®®·ÛªªÉ¦‰dítµP—.]ŠÉd"??ŸþþþdØf³áñx¸óÎ;)**â£677güûKGMM n·›¡¡!Z[[/:ºÛŸnùŒŒ ª*ÅÅŸÝn(//Çétb41›Í †äòæÚY½B\m 5ñ>­!Þ_¡bŠ?@Ö—‚å.ÈúPíà{üÛ3¤êtXín zícnš;ô¸,QêŠÃÑðzá/ž²ó_ÙØwÜ@$ªpø´žW>4±çˆ†ÒNc"Cƒ¼Óþ),k2¹ðûi;òýŒ%ž*++“×±ºº:\.Wr0†Äöéõz"‘ÈŒËq8,]º€ýû÷Ï:ït¼^/åååØívª««QU•¦¦&:;;/k9¿Iü&ñ›Bܘ’=üM“ôúx<0L @¢A Ÿ)9ã?-öG |¿™•´Ûíäææ’g ðè))uÐ5¢§±<ÞÍñ^_ÿQw®ðóñe ³¢ŒŒ«¼{ÜÄöì|å®1î\ïãh—§9ÊÐ@€¿þù8uÚðù|é3Åårñ¹Ï}€_|‘3gÎ\ö2ÊÊÊØ¼y3V«5%˜¸Xööö²cÇŽû<¼ë®»¨®®žvZkk+±XŒššÚÛÛùÕ¯~5ëºÜvÛmÉæ-:uê;vìHymÛ¶m˜L©UPm6‹…h4šÒoc«¯¾š¬ùÙÐÐÀÇ>ö1B¡ßÿþôAý­·ÞÊÊ•+àg?ûÙŒe¸bÅ rss1 ÒÕÕÅþýûyøá‡±Ûí¼ûî»3¶é*--eãÆ)#^JùUUU±uëÖäÿ‘H„H$‚ÙlFÓ4šššˆD"466ÒÓÓÃöíÛçõûK×Úµkñx<Éÿ³²²0™LƒÁ) ô¡¡!víÚ•‘íŸkù',^¼˜uëÖÍÚ¡ý¾}ûسg\Q„×˽àþÆÌÓµ0xÿÆŸÊìz$â¿[ˆø¼JI©®‹ãñßßüÊÅ®#VŒz\{›)F(¢0àÕá«”æLðï¿7ÿ: ìéÿ»úþ;³‰Px‚¦w¿Eóž?ÎØú›Ífn½õV–,Y2k‚ê;ßùNJ’èÁLþo0’ׯ¡¡¡”ÄÁ`çž{î¢ë±dɶlÙ’ü¼ÿøÇx½Þç—øMâ7‰ß„B$c“Ù&_‡ÁGÁöŸÁP%Y‡Ànð?OZï‹Ï›ÉæÉ>ŸŸÏÇ`çþBNíqóñšqVåě㶟5ðg÷ô±ªì\gÖdYaqC€Må>ÞnµóÆçèÕó­½n–g‡xyß0ÐÀUýµ··óÔSOÑØØHAA999Äb1hii¹èà*;wîdppêêj\.áp˜ÞÞ^>L[[k×®.­ ÉÛo¿Í¨¬¬Äãñ`³Ù0 †iaÉÎÎNÒr!N7íE|r§Üó5²s{{;íííS^W%ÙÔ£¿¿?cßaGGO>ù$x<žä“óÉM•¦+¿ÖÖV¶oßNcc#yyyX,&&&hkkãСCôôô$k\¬yË\¾¿t9N §½‰ºðõéFGœ¯íŸkù'œ>}šÓ§O“Çã!77—Ë…ÝnÇ`0 ×ëg½ùBˆkMxø~ÆFÐÇã?Â9 ¡=ñ0ÚŸùõ˜ÿí:X@ëûYÜQ5ΪÜxL·­n”–R‘7:)TЀ®=}^Ýùø¯OÏ{{Ÿ'ªŽðQ_¾áãtýAF×? ²sçN>øàª««)))Áåráp8’±Í…}E™1Éqa3ÍK]Nœ8Áúõëq8œ8qâ¢×,‰ß$~“øM!DòºË,5 ¯&999”••166Ê÷<ËMu9¨:Ãe/G‹EéèìgÛò°º éé馳³Kö„PYYŸüä' <ñÄ—Ýä']‰@)‹ÍÚï‹òBˆU"þóŽðýϲ¶.7­øïS?ÈÃæ* ··gÁâ¿Dÿ|š¦]‘ëOVV?ü0ªªòÔSO-ȈÄ¿ )!„¸FÏ»×ÒâÈ‘#„Ãa~ç{ðÔ—zi¬ÍFg´^ò2b‘gÎòÐw#ëìD§ë!???¸‰ƒªªx<6mÚÄ›&\é€XÏRþBq­%’ñß¿ÂSÿ¥—Õ5—ÿjäáïEhéZøøïJ&:œN'ŸøÄ'PU•æææk:a(ñ›òBˆ+ïš©ix!“þp+|u³»Ëª7ÏØ " ÷òÓÝ~¾ñ ûå‹¿Q˜L&Ün7‡‡ÃÛí¦¢¢"ÙìæèÑ£SúbB!ÄÕÉl€?Ú _ÞlÆî¼´øïÉßøùæó7Fü§ª*………äææRZZŠÇãAUUúúúxöÙg¯™„‹ÄoB!ÄÕášM&ä9àá›à®å «*ŒXMPã[žˆr¤#ÄΦOí…Óò…ßhÖ¬YÃúõë§¼><<̇~HKK‹’Bq)pÂo¯…»–«çâ?=Н9G9r6ÄÎC1~ú>œ¼qÊÅjµò…/¤ŽLØÒÒÂîÝ»§íNâ7!„BÌæšON¦*ï› Bè…ˆtuqC[²d ·Þz+ãããx½^zzzèêꢫKú±B!$þ»Î{Eá‘Ga``€þþ~Z[[¸öžšKü&„B\%±×QÒP!„B!„B‘>UŠ@!„B!„B1™$ …B!„B!„)$i(„B!„B!„H!IC!„B!„B!D I !„B!„B!RHÒP!„B!„B‘B’†B!„B!„Bˆ’4B!„B!„B¤¤¡B!„B!„"…^Š@ˆS^^åååât:Ñëõ<ñÄR0B!„B!„¤¡7šììl6mÚDQQQÊ뚦¡( š¦I! !„B!„7¸k&i¸¥ÖW@Ç耦³›cn£:Ë¡"Ú‡áÉ÷Aò$âFPXXÈý÷ß^¯GÓ4ºººÂï÷ãóù$i(„B!„BàI6”Â3ßÈÂVžO,0AdlœÎ3£<ýFï¾#°( V•Ai6ØLšˆ¿ÞtNô‚ÃÞ ŸÝ¨§vYz— ÕÄÄàê_vó£=ó»Îk×®eݺu~øÃÎ:ï]wÝEuu5ÇŽãõ×_—½ò:ôÐC‘››ËÁƒyçwdt:wÝuz½ž––öìÙƒÏç“/G!„B!„S\IÃUe ÆbL z1æ»1d;¨*/äVóÈ­§iúú,&†½(¶ÚE;÷Œ`Z”ËÉã£Â!*6”aÌÏ@‹F ÷ †Y]Ƽ' ƒÁ F£ñ¢ó&æ …B²GŠŒ)++Ãáp ÙµkÑhT E!„B!„Óº&’†F=„{G ÷ŽâoíÆZYˆÎa%x¦—ÜúEå¹PïÁSè¬T£E§`­,bEeÃ^‚í}ñª*ãÍháhrùó-Ç×E§C§ÓÍš ‘¤¡¸rrr•„¡B!„B!fuM$ ½ÁIÿÄ4ü'º1¸°¯(GÑé.i†,z·À©n‚mý)Ó|ÈÕ%j˜L&ü~ÿÌëf0’4™åv»fÝ…B!„B!`IC5L7ƒ±ô5ñÿUxÿüÏef%{ÇRÿ7¸±Õ•¡(Êe-GQ¬•Å(:•À©ÞóËÿuNÔ4„xMÂÙ5&“ ˜=ièt:ihhÀãñ`·Û ‡ÃôõõÑÔÔD[[ÛŒÛûØc ñûýŒã÷û¦££ƒ‘‘‘Y·áÑGÅb±¤¼ÖÑÑÁóÏ?ÄkQ–••QYYI^^ÍÍÍìß¿€õë׳|ùrO>ù䬟³yófjkkiiiaçÎÝá­V+‡üü|rss±Z­˜ÍfvïÞÍÑ£Gçµüî¸ãêêêR^[¹r%+W®œ2ï[o½Å¡C‡æu[·nÝJUUÕ”×/^ÌW¿úÕ)¯?ñÄx½ÞyÛþtË?Ýý_!„B!„swÉIC}8¾ æ[€i*÷©Ù™[ÉcÝ“>ÇjÄV[:mÂPQ'½¦( ªÓ.Ïì) 2ægb ž 9Ú3ÿë<¹¦áä~ W¯^Ûíf×®]S¦Ï”4¬««ãöÛoG7©V¥ÅbÁãñàñxØ·o{öLí”Ñf³a2™0™L¸\®)Ó»»»Ù½{7==S @Q0™L ¬VkrYË—/禛nÂjµ&ß“˜pòäIÖ¬YƒÙlÆãñ̘ØÑëõTTTÄ¿çcÇ2¶åää°~ýz<ê4ûÅäí˜òPU•ÑÑxFÚn·£Óé‡Ã)óNN2Ï—h4Êàà`ò‡ÃÑh$§$b±Ø¼nºåŸîþ/„B!„Bˆ¹Síb3Ù> ί:ÐB>‘“ƒØ(h£0q"¬ðóþŸBe>ØëË1溈†# î#ª•¡D;È©ÏE9—‹P´h”X(‚j20t¨›H´ %ÚEÖR7‡‰h Äè{Í„'`Ùÿ†áyn±i³ÙøÝßý]ž{î9Ξ= Àc=†ÙlæÉ'Ÿdxx€¯|å+(ŠÂ/~ñ º»»S–S[[ËæÍ› …B¼û9s†`0Hvvv2 ð /LIÌ)Š’LüX,Ìf3yyy”””ŸŸªªD£Q^zé%ÚÛÛgÝžeË–±iÓ&|>”——Ffdd„‘‘Μ9“’@Ú¶m%%%´µµñ /L»Üªª*¶nÝŠ×ëå‰'žÈȾ³jÕ*6lØ€ªªD"º»»$ …B $¿L”ßÕ0zò½÷ÞKyy9­­­¼üòË?9ÌÓöϵüÓÝÿ…B!„B1w­ih}œDÁû= ´èíñwá¯2`Èq¢Å4ú?%û“¯`*ZEx …þg?Ná†ÜäüŠN‡Îªcð@ÖuO`­¹‡ˆ·›¾Ÿ‚ü•!t†\'ϼ<6ï C˜Ú§!@^^f³€ÒÒR†‡‡ÑëõÉZ““ßñÄãÆÑ4矞¾¾¾ä´þþ~^xá>ó™ÏŸŸÏêÕ«§$M4MÃçóáóù’¯µ¶¶ñæž[·n%??ŸM›6ñ“ŸüdÖÁ1µÐìv;ÝÝݼüòË´µµ1111ã{ËïZ4ÛŸNù§»ÿ !„B!„bîÔY'ºÁùßâü%ø~¸0 C€‡ÀëDQÆ;†±­ù¦¢Us—`(y€H`j2"ÂR¬5÷ w‘ó‰2ÒÜwî}Nv4ef}£Ñh2‰’h~¼hÑ"¢Ñ(¡Pˆ²²2 µIï…Í“W®\‰^¯§µµ5%a2ÙÁƒ(**š¶ÙçLÆÆÆxíµ×€x³Õ’’’YçO$ £Ñ(¯¼ò ­­­³& NŸ>ÍØX¼CÊ+VL™n2™’5Å2‘44›ÍÜ|óͼñÆìÝ»wÞš_nù]o.eûÓ-ÿLîÿB!„B!„˜Ý¬wÙæ XA‡À‹ »¢µ… wÆû=ó÷ú±¯x(eº¢· ]Ð'€¢šSþ7­"-âË[R˜¹uN$IÃÒÒRº»»éèè ¤¤N—Òßá…IÃÅ‹Li²<ÙÐÐPü‹TÕ”>ß.ÅÐÐP²Y~~þ¬ó&’†—óš¦%“:K—.MŽPYY‰N§£««kÚZˆéª¬¬Löá—‰þ/§ü®GÛþtË?Óû¿B!„B!f6kódÃ’øï‰“ »’ª[êâ} )(ºó5ô4M#|v'nßÿnŠ|:C ‰h`%ëüu`Ådà–*øþÛ0˜ÿõ…BX­VŒF#:ŽââböîÝK  ªªŠÂÂÂdm½É5!ÞŸœÛíâM<—,Y‚N§C¯×£×ëSþN–Ó 5­ôz=ÕÕÕ”––’““ƒÁ`Hþ$ÞŸh6=MÓæTÇŽcݺu˜L&jjj8räHrZ¢ir¦@ÉÍ7WŸ<Èœ’y(¿kú$1ÇíO§üçsÿB!„B!Äò³Þ¸ŸÐt¡š$'l¨„ÿòŸ½è³ì˜sÍx>‰sõ#Œ¾ûX³{QÕlÚÚCô÷M`6«(Š‚³ÊÎàŽÿFÞ¶ÇQT¡îè¢'€bBg¸s«ÂïÑøÎ›ó¿Þ~¿Ÿ¬¬,L&èõz:::’£ç–––&HOy¯Á`Höu‰Dðù|D£Qb±XÊï ÿ¾PEE›6mÂb±022ÂÀÀ¡P(™p)..Æb±¤ÔxœÎä‘uUU2ÒîLÂá0G¥¡¡úúúdÒÐf³QRRB$áäÉÌd¥Ût±fÔ³™¯ò»V¥³ýé”ÿ|íÿB!„B!„˜›Y“†±‘s3•-ìJ†¢zº5#¥EcNvá¨(bðÀÿ ÷ÄKh^Œ†d--àkPÄŸþÅ>梸Ȉúߦçñõè\uĆ^#wU>¡îAÐõ1f32Ö€ð¼¯w"h4)--% Òßߦi SVV–ì«í¤a8&¢Óéhooç½÷Þ»ìÏ÷x<Ü}÷Ýø|>¶oßž2²qBbDÝ‹5휜$L$s.USS+W®$''‡ââbººº¨®®FQNž<9oý ^(‘œMÔX[Èò»¥»ýé”ÿ|ìÿB!„B!„˜»Y“†áC`tÅ`\ áf%ÛFLüû¯øàƒK®Ý—°aÃEáÀÓ&|à|2pr3ÏÙæƒxMÃË©Õ566Æ©S§¨¬¬¤¾¾ž®®®Œ7M’Ûìt:)))¡³³sÁÊ/QÛÎf³]3'‡t·?ÝòOwÿB!„B!ÄÜÍÚ Xh7Dû㻿 úÅ ³’ýÃã|vÅ1þã?â‹ÿ©ë¢-A‚§NêF›ˆ¡MÄÒøß?°2äUø«™éèÔ’Ó"Ã^ÇOÒ14LÀá·¶õò¯ÿï¾yïaºû†2²Þ‰D Ãá   €ŽŽŽä´öövE¡²²2eÞÉ8@VV÷Üsv»ý’?[QrrrfM¶$’=—›4¼\‰Q***X´hùùùx½ÞdóìLhkkK–ëæÍ›ÉÎÎ^°òKôëW\\|M$çcûÓ)ÿt÷!„B!„B¤G|sÆ©ˆ´y3¨.°ÞúÒø»´ Pô€ @+Å›>ºð“þãY4ŸqâvFX½ÚGdØËÄ(èLþúgv~sÄŒ†B÷žý'tÜ·:HdÔËÄàYìÕÐ>hçµ}yô ™éì±òÆ»z^ÚŸ™þÐ\.•••ØívEáwÞIŽì÷ûYµjN§€S§NM%vddUU)..ÆívÓÐÐ@yy9N§£ÑˆÙlÆ`0$kþ]8XÉÒ¥K1™LäççÓßßÏØØ¯íæñx¸óÎ;)**ÀçóÑÜÜ<ã¶8–.] Àþýû‰D"—U^¯—òòrìv;ÕÕÕ¨ªJSSÓe×>»±XŒ‘‘ªªª0›ÍÔÕÕáv»“å¥Óé’M­§èe>ËO¯×SUU…Á`Hþžü™W¢?¾ššÜn7CCC´¶¶^tþt·?ÝòOwÿB!„B!ÄÜ)ÀEï´M7óÏ% g|†ÿ(3+i·ÛÉËËãË·ùÙ|‡Fav˜Î!#kª¼øÚ&Ð;J¸÷[¥LDRkÁýÛc}ÅNá¨Ö¡G:l8-QÆüzš>Rù_ÛÍŒŒùÒaw:‹-âþûïâMtô£¥L¿ÿþûY´h;w¥eÚå,^¼˜uëÖ%G£Î¾}ûسgOÊkUUUlݺ5ù$!‰`6›Ñ4¦¦&"‘ôôô°}ûöä¼z½ž|0ù¿Á`H6¥J©} yî¹ç.ZK–,aË–-@<¡ôãÿ¯×›ñ¼´´”7&×:§NbÇŽóV~Ó¹í¶Û¨¯¯¿äÏO×Úµkñx<ÉÿƒòƒAFFFRæb×®]Ùþ¹–ºû¿B!„B!æN)3…>€þÏ€ùv0ÝÆe +eR+Ëhæ*Œáóùðù|<Å‹Šùv‹‡-õ#¬)‹×Ú3»U=£hÚÔ¬flÔ‹±XE ÇGr°òwop[Õ¿~³“§3WErr“ãÿ¿½ûùI#ã8þ™ÇAGE¬ˆ@bè$xéÛšMÜCÿõæÍËþ{Ø?£Ç&Mú'/&½õ°I[cãî¡=˜˜¸貚®A`+˜ÒèN¥I[Åj÷ýº@žÌ„g¾ó\øäùqziò‰ÝÝÝNhx²ÿa/ÙlVÙlVápX®ë*‰h||\Á`P@@¶m÷ ß2™ŒVVV4;;«©©) «^¯kggG›››ÊårÙƒ//µ,ë“!ÍÇËL …ÂgÕ#NknnNcccJ§Ó—žÔ~iiIÉdR®ë*‹) úNü-—ËZ¿^ÖÖÖ´±±¡™™¹®«ÑÑQ *ôüýó …BŠÇãgÚÇ9ÓÞkü]ÔómýÏ;þÀ×û¬™†Ÿ¼y¨ýÙ:–ÔçÕ•““a%7Õ¬–õø×¼’3ÝIJ¥–w*ºÿÇ-ýùOwß³›ášͧ4‘l'Ði?|ëiáAH͘r¹œööö —`bbB‹‹‹2Æhyy¹/³;¿ÄIÐÕl69dƒú€ÓÿÛÏss«z‰µÚÚÚR­VÓ³—Rrº;Û­½+Ú;ývï­~¾]ÑÓžRÅ!; ©u,«”Žºšy]ÒÓWÿj` §h4*˲Ø­ÏB¡æççeŒÑööö7 %}ñ¾Œ þü_Ø×¥£ûûûïùC©åÙ²,ÿþ…7†›ú1áI’îDÛ‰fÝ3jy’Ý] ™/µÂF£qæð\ cŒâñ¸"‘ˆ‰„\ו1Fù|^«««à ³¯c§÷JR㽑mœN[±t¤‘j^#C¶,Óž9X«7tPª*›”º×¾ù¯Î›ï3Çq´°°àkK¥RZ__g†Àw-CÃiéáï¯}mÏ·¥'›GŠŽI£CRõXÊ•¥»ÓÒ/?ýí»öé_¼ø~ó‡2¸° ÃIIEND®B`‚kitty-0.15.0/docs/support.html000066400000000000000000000035321356737523400163150ustar00rootroot00000000000000

kitty-0.15.0/docs/support.rst000066400000000000000000000017121356737523400161570ustar00rootroot00000000000000Support kitty development =========================== My goal with |kitty| is to move the stagnant terminal ecosystem forward. To that end kitty has many foundational features, such as: :doc:`image support `, :doc:`superlative performance `, :doc:`various enhancements to the terminal protocol `, etc. These features allow the development of rich terminal applications, such as :doc:`Side-by-side diff ` and :doc:`Unicode input `. If you wish to support this mission and see the terminal ecosystem evolve, consider donating so that I can devote more time to |kitty| development. I have personally written `almost all kitty code `_. You can choose to make either a one-time payment via PayPal or become a *patron* of kitty development via the Patreon or Liberapay services below: .. raw:: html :file: support.html kitty-0.15.0/gen-apc-parsers.py000077500000000000000000000216741356737523400163360ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2018, Kovid Goyal import subprocess from collections import defaultdict def resolve_keys(keymap): ans = defaultdict(list) for ch, (attr, atype) in keymap.items(): if atype not in ('int', 'uint'): atype = 'flag' ans[atype].append(ch) return ans def enum(keymap): lines = [] for ch, (attr, atype) in keymap.items(): lines.append(f"{attr}='{ch}'") return ''' enum KEYS {{ {} }}; '''.format(',\n'.join(lines)) def parse_key(keymap): lines = [] for attr, atype in keymap.values(): vs = atype.upper() if atype in ('uint', 'int') else 'FLAG' lines.append(f'case {attr}: value_state = {vs}; break;') return ' \n'.join(lines) def parse_flag(keymap, type_map, command_class): lines = [] for ch in type_map['flag']: attr, allowed_values = keymap[ch] q = ' && '.join(f"g.{attr} != '{x}'" for x in allowed_values) lines.append(f''' case {attr}: {{ g.{attr} = screen->parser_buf[pos++] & 0xff; if ({q}) {{ REPORT_ERROR("Malformed {command_class} control block, unknown flag value for {attr}: 0x%x", g.{attr}); return; }}; }} break; ''') return ' \n'.join(lines) def parse_number(keymap): int_keys = [f'I({attr})' for attr, atype in keymap.values() if atype == 'int'] uint_keys = [f'U({attr})' for attr, atype in keymap.values() if atype == 'uint'] return '; '.join(int_keys), '; '.join(uint_keys) def cmd_for_report(report_name, keymap, type_map, payload_allowed): def group(atype, conv): flag_fmt, flag_attrs = [], [] cv = {'flag': 'c', 'int': 'i', 'uint': 'I'}[atype] for ch in type_map[atype]: flag_fmt.append('s' + cv) attr = keymap[ch][0] flag_attrs.append(f'"{attr}", {conv}g.{attr}') return ' '.join(flag_fmt), ', '.join(flag_attrs) flag_fmt, flag_attrs = group('flag', '') int_fmt, int_attrs = group('int', '(int)') uint_fmt, uint_attrs = group('uint', '(unsigned int)') fmt = f'{flag_fmt} {uint_fmt} {int_fmt}' if payload_allowed: ans = [f'REPORT_VA_COMMAND("s {{{fmt} sI}} y#", "{report_name}",'] else: ans = [f'REPORT_VA_COMMAND("s {{{fmt}}}", "{report_name}",'] ans.append(',\n '.join((flag_attrs, uint_attrs, int_attrs))) if payload_allowed: ans.append(', "payload_sz", g.payload_sz, payload, g.payload_sz') ans.append(');') return '\n'.join(ans) def generate(function_name, callback_name, report_name, keymap, command_class, initial_key='a', payload_allowed=True): type_map = resolve_keys(keymap) keys_enum = enum(keymap) handle_key = parse_key(keymap) flag_keys = parse_flag(keymap, type_map, command_class) int_keys, uint_keys = parse_number(keymap) report_cmd = cmd_for_report(report_name, keymap, type_map, payload_allowed) if payload_allowed: payload_after_value = "case ';': state = PAYLOAD; break;" payload = ', PAYLOAD' parr = 'static uint8_t payload[4096];' payload_case = f''' case PAYLOAD: {{ sz = screen->parser_buf_pos - pos; const char *err = base64_decode(screen->parser_buf + pos, sz, payload, sizeof(payload), &g.payload_sz); if (err != NULL) {{ REPORT_ERROR("Failed to parse {command_class} command payload with error: %s", err); return; }} pos = screen->parser_buf_pos; }} break; ''' callback = f'{callback_name}(screen, &g, payload)' else: payload_after_value = payload = parr = payload_case = '' callback = f'{callback_name}(screen, &g)' return f''' static inline void {function_name}(Screen *screen, PyObject UNUSED *dump_callback) {{ unsigned int pos = 1; enum PARSER_STATES {{ KEY, EQUAL, UINT, INT, FLAG, AFTER_VALUE {payload} }}; enum PARSER_STATES state = KEY, value_state = FLAG; static {command_class} g; unsigned int i, code; uint64_t lcode; bool is_negative; memset(&g, 0, sizeof(g)); size_t sz; {parr} {keys_enum} enum KEYS key = '{initial_key}'; while (pos < screen->parser_buf_pos) {{ switch(state) {{ case KEY: key = screen->parser_buf[pos++]; state = EQUAL; switch(key) {{ {handle_key} default: REPORT_ERROR("Malformed {command_class} control block, invalid key character: 0x%x", key); return; }} break; case EQUAL: if (screen->parser_buf[pos++] != '=') {{ REPORT_ERROR("Malformed {command_class} control block, no = after key, found: 0x%x instead", screen->parser_buf[pos-1]); return; }} state = value_state; break; case FLAG: switch(key) {{ {flag_keys} default: break; }} state = AFTER_VALUE; break; case INT: #define READ_UINT \\ for (i = pos; i < MIN(screen->parser_buf_pos, pos + 10); i++) {{ \\ if (screen->parser_buf[i] < '0' || screen->parser_buf[i] > '9') break; \\ }} \\ if (i == pos) {{ REPORT_ERROR("Malformed {command_class} control block, expecting an integer value for key: %c", key & 0xFF); return; }} \\ lcode = utoi(screen->parser_buf + pos, i - pos); pos = i; \\ if (lcode > UINT32_MAX) {{ REPORT_ERROR("Malformed {command_class} control block, number is too large"); return; }} \\ code = lcode; is_negative = false; if(screen->parser_buf[pos] == '-') {{ is_negative = true; pos++; }} #define I(x) case x: g.x = is_negative ? 0 - (int32_t)code : (int32_t)code; break READ_UINT; switch(key) {{ {int_keys}; default: break; }} state = AFTER_VALUE; break; #undef I case UINT: READ_UINT; #define U(x) case x: g.x = code; break switch(key) {{ {uint_keys}; default: break; }} state = AFTER_VALUE; break; #undef U #undef READ_UINT case AFTER_VALUE: switch (screen->parser_buf[pos++]) {{ default: REPORT_ERROR("Malformed {command_class} control block, expecting a comma or semi-colon after a value, found: 0x%x", screen->parser_buf[pos - 1]); return; case ',': state = KEY; break; {payload_after_value} }} break; {payload_case} }} // end switch }} // end while switch(state) {{ case EQUAL: REPORT_ERROR("Malformed {command_class} control block, no = after key"); return; case INT: case UINT: REPORT_ERROR("Malformed {command_class} control block, expecting an integer value"); return; case FLAG: REPORT_ERROR("Malformed {command_class} control block, expecting a flag value"); return; default: break; }} {report_cmd} {callback}; }} ''' def write_header(text, path): with open(path, 'w') as f: print(f'// This file is generated by {__file__} do not edit!', file=f, end='\n\n') print('#pragma once', file=f) print(text, file=f) subprocess.check_call(['clang-format', '-i', path]) def graphics_parser(): flag = frozenset keymap = { 'a': ('action', flag('tTqpd')), 'd': ('delete_action', flag('aAiIcCpPqQxXyYzZ')), 't': ('transmission_type', flag('dfts')), 'o': ('compressed', flag('z')), 'f': ('format', 'uint'), 'm': ('more', 'uint'), 'i': ('id', 'uint'), 'w': ('width', 'uint'), 'h': ('height', 'uint'), 'x': ('x_offset', 'uint'), 'y': ('y_offset', 'uint'), 'v': ('data_height', 'uint'), 's': ('data_width', 'uint'), 'S': ('data_sz', 'uint'), 'O': ('data_offset', 'uint'), 'c': ('num_cells', 'uint'), 'r': ('num_lines', 'uint'), 'X': ('cell_x_offset', 'uint'), 'Y': ('cell_y_offset', 'uint'), 'z': ('z_index', 'int'), } text = generate('parse_graphics_code', 'screen_handle_graphics_command', 'graphics_command', keymap, 'GraphicsCommand') write_header(text, 'kitty/parse-graphics-command.h') graphics_parser() kitty-0.15.0/gen-wcwidth.py000077500000000000000000000367761356737523400156000ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import re import sys from collections import defaultdict from contextlib import contextmanager from datetime import date from functools import partial from html.entities import html5 from itertools import groupby from operator import itemgetter from urllib.request import urlopen os.chdir(os.path.dirname(os.path.abspath(__file__))) non_characters = frozenset(range(0xfffe, 0x10ffff, 0x10000)) non_characters |= frozenset(range(0xffff, 0x10ffff + 1, 0x10000)) non_characters |= frozenset(range(0xfdd0, 0xfdf0)) if len(non_characters) != 66: raise SystemExit('non_characters table incorrect') emoji_skin_tone_modifiers = frozenset(range(0x1f3fb, 0x1F3FF + 1)) def get_data(fname, folder='UCD'): url = f'https://www.unicode.org/Public/{folder}/latest/{fname}' bn = os.path.basename(url) local = os.path.join('/tmp', bn) if os.path.exists(local): with open(local, 'rb') as f: data = f.read() else: data = urlopen(url).read() with open(local, 'wb') as f: f.write(data) for line in data.decode('utf-8').splitlines(): line = line.strip() if line and not line.startswith('#'): yield line # Map of class names to set of codepoints in class class_maps = {} all_symbols = set() name_map = {} word_search_map = defaultdict(set) zwj = 0x200d marks = set(emoji_skin_tone_modifiers) | {zwj} not_assigned = set(range(0, sys.maxunicode)) def parse_ucd(): def add_word(w, c): if c <= 32 or c == 127 or 128 <= c <= 159: return if len(w) > 1: word_search_map[w.lower()].add(c) first = None for word, c in html5.items(): if len(c) == 1: add_word(word.rstrip(';'), ord(c)) word_search_map['nnbsp'].add(0x202f) for line in get_data('ucd/UnicodeData.txt'): parts = [x.strip() for x in line.split(';')] codepoint = int(parts[0], 16) name = parts[1] or parts[10] if name == '': name = parts[10] if name: name_map[codepoint] = name for word in name.lower().split(): add_word(word, codepoint) category = parts[2] s = class_maps.setdefault(category, set()) desc = parts[1] codepoints = (codepoint,) if first is None: if desc.endswith(', First>'): first = codepoint continue else: codepoints = range(first, codepoint + 1) first = None for codepoint in codepoints: s.add(codepoint) not_assigned.discard(codepoint) if category.startswith('M'): marks.add(codepoint) elif category.startswith('S'): all_symbols.add(codepoint) # Some common synonyms word_search_map['bee'] |= word_search_map['honeybee'] word_search_map['lambda'] |= word_search_map['lamda'] word_search_map['lamda'] |= word_search_map['lambda'] def split_two(line): spec, rest = line.split(';', 1) spec, rest = spec.strip(), rest.strip().split(' ', 1)[0].strip() if '..' in spec: chars = tuple(map(lambda x: int(x, 16), filter(None, spec.split('.')))) chars = set(range(chars[0], chars[1] + 1)) else: chars = {int(spec, 16)} return chars, rest all_emoji = set() emoji_categories = {} emoji_presentation_bases = set() def parse_emoji(): for line in get_data('emoji-data.txt', 'emoji'): chars, rest = split_two(line) s = emoji_categories.setdefault(rest, set()) s.update(chars) all_emoji.update(chars) for line in get_data('emoji-variation-sequences.txt', 'emoji'): base, var, *rest = line.split() if base.startswith('#'): continue base = int(base, 16) if var.upper() == 'FE0F': emoji_presentation_bases.add(base) doublewidth, ambiguous = set(), set() def parse_eaw(): global doublewidth, ambiguous seen = set() for line in get_data('ucd/EastAsianWidth.txt'): chars, eaw = split_two(line) if eaw == 'A': ambiguous |= chars seen |= chars elif eaw == 'W' or eaw == 'F': doublewidth |= chars seen |= chars doublewidth |= set(range(0x3400, 0x4DBF + 1)) - seen doublewidth |= set(range(0x4E00, 0x9FFF + 1)) - seen doublewidth |= set(range(0xF900, 0xFAFF + 1)) - seen doublewidth |= set(range(0x20000, 0x2FFFD + 1)) - seen doublewidth |= set(range(0x30000, 0x3FFFD + 1)) - seen def get_ranges(items): items.sort() for k, g in groupby(enumerate(items), lambda m: m[0]-m[1]): group = tuple(map(itemgetter(1), g)) a, b = group[0], group[-1] if a == b: yield a else: yield a, b def write_case(spec, p): if isinstance(spec, tuple): p('\t\tcase 0x{:x} ... 0x{:x}:'.format(*spec)) else: p('\t\tcase 0x{:x}:'.format(spec)) @contextmanager def create_header(path, include_data_types=True): with open(path, 'w') as f: p = partial(print, file=f) p('// unicode data, built from the unicode standard on:', date.today()) p('// see gen-wcwidth.py') if path.endswith('.h'): p('#pragma once') if include_data_types: p('#include "data-types.h"\n') p('START_ALLOW_CASE_RANGE') p() yield p p() if include_data_types: p('END_ALLOW_CASE_RANGE') def gen_emoji(): with create_header('kitty/emoji.h') as p: p('static inline bool\nis_emoji(char_type code) {') p('\tswitch(code) {') for spec in get_ranges(list(all_emoji)): write_case(spec, p) p('\t\t\treturn true;') p('\t\tdefault: return false;') p('\t}') p('\treturn false;\n}') p('static inline bool\nis_emoji_modifier(char_type code) {') p('\tswitch(code) {') for spec in get_ranges(list(emoji_categories['Emoji_Modifier'])): write_case(spec, p) p('\t\t\treturn true;') p('\t\tdefault: return false;') p('\t}') p('\treturn false;\n}') p('static inline bool\nis_symbol(char_type code) {') p('\tswitch(code) {') for spec in get_ranges(list(all_symbols)): write_case(spec, p) p('\t\t\treturn true;') p('\t\tdefault: return false;') p('\t}') p('\treturn false;\n}') def category_test(name, p, classes, comment, static=False, extra_chars=frozenset(), exclude=frozenset()): static = 'static inline ' if static else '' chars = set() for c in classes: chars |= class_maps[c] chars |= extra_chars chars -= exclude p(f'{static}bool\n{name}(char_type code) {{') p(f'\t// {comment} ({len(chars)} codepoints)' + ' {{' '{') p('\tswitch(code) {') for spec in get_ranges(list(chars)): write_case(spec, p) p(f'\t\t\treturn true;') p('\t} // }}}\n') p('\treturn false;\n}\n') def codepoint_to_mark_map(p, mark_map): p('\tswitch(c) { // {{{') rmap = {c: m for m, c in enumerate(mark_map)} for spec in get_ranges(mark_map): if isinstance(spec, tuple): s = rmap[spec[0]] cases = ' '.join(f'case {i}:' for i in range(spec[0], spec[1]+1)) p(f'\t\t{cases} return {s} + c - {spec[0]};') else: p(f'\t\tcase {spec}: return {rmap[spec]};') p('default: return 0;') p('\t} // }}}') return rmap def classes_to_regex(classes, exclude=''): chars = set() for c in classes: chars |= class_maps[c] for c in map(ord, exclude): chars.discard(c) def as_string(codepoint): if codepoint < 256: return r'\x{:02x}'.format(codepoint) if codepoint <= 0xffff: return r'\u{:04x}'.format(codepoint) return r'\U{:08x}'.format(codepoint) for spec in get_ranges(list(chars)): if isinstance(spec, tuple): yield '{}-{}'.format(*map(as_string, (spec[0], spec[1]))) else: yield as_string(spec) def gen_ucd(): cz = {c for c in class_maps if c[0] in 'CZ'} with create_header('kitty/unicode-data.c') as p: p('#include "unicode-data.h"') category_test( 'is_combining_char', p, {c for c in class_maps if c.startswith('M')}, 'M category (marks)', # See https://github.com/harfbuzz/harfbuzz/issues/169 extra_chars=emoji_skin_tone_modifiers | {zwj} ) category_test( 'is_ignored_char', p, 'Cc Cf Cs'.split(), 'Control characters and non-characters', extra_chars=non_characters, exclude={zwj}) category_test('is_word_char', p, {c for c in class_maps if c[0] in 'LN'}, 'L and N categories') category_test('is_CZ_category', p, cz, 'C and Z categories') category_test('is_P_category', p, {c for c in class_maps if c[0] == 'P'}, 'P category (punctuation)') mark_map = [0] + list(sorted(marks)) p('char_type codepoint_for_mark(combining_type m) {') p(f'\tstatic char_type map[{len(mark_map)}] =', '{', ', '.join(map(str, mark_map)), '}; // {{{ mapping }}}') p('\tif (m < arraysz(map)) return map[m];') p('\treturn 0;') p('}\n') p('combining_type mark_for_codepoint(char_type c) {') rmap = codepoint_to_mark_map(p, mark_map) p('}\n') with open('kitty/unicode-data.h') as f: unicode_data = f.read() expected = int(re.search(r'^#define VS15 (\d+)', unicode_data, re.M).group(1)) if rmap[0xfe0e] != expected: raise ValueError('The mark for 0xfe0e has changed, you have to update VS15 to {} and VS16 to {} in unicode-data.h'.format( rmap[0xfe0e], rmap[0xfe0f] )) with open('kittens/hints/url_regex.py', 'w') as f: f.write("url_delimiters = '{}' # noqa".format(''.join(classes_to_regex(cz, exclude='\n')))) def gen_names(): with create_header('kittens/unicode_input/names.h') as p: mark_to_cp = list(sorted(name_map)) cp_to_mark = {cp: m for m, cp in enumerate(mark_to_cp)} # Mapping of mark to codepoint name p(f'static const char* name_map[{len(mark_to_cp)}] = {{' ' // {{{') for cp in mark_to_cp: w = name_map[cp].replace('"', '\\"') p(f'\t"{w}",') p("}; // }}}\n") # Mapping of mark to codepoint p(f'static const char_type mark_to_cp[{len(mark_to_cp)}] = {{' ' // {{{') p(', '.join(map(str, mark_to_cp))) p('}; // }}}\n') # Function to get mark number for codepoint p('static char_type mark_for_codepoint(char_type c) {') codepoint_to_mark_map(p, mark_to_cp) p('}\n') p('static inline const char* name_for_codepoint(char_type cp) {') p('\tchar_type m = mark_for_codepoint(cp); if (m == 0) return NULL;') p('\treturn name_map[m];') p('}\n') # Array of all words word_map = tuple(sorted(word_search_map)) word_rmap = {w: i for i, w in enumerate(word_map)} p(f'static const char* all_words_map[{len(word_map)}] = {{' ' // {{{') cwords = (w.replace('"', '\\"') for w in word_map) p(', '.join(f'"{w}"' for w in cwords)) p('}; // }}}\n') # Array of sets of marks for each word word_to_marks = {word_rmap[w]: frozenset(map(cp_to_mark.__getitem__, cps)) for w, cps in word_search_map.items()} all_mark_groups = frozenset(word_to_marks.values()) array = [0] mg_to_offset = {} for mg in all_mark_groups: mg_to_offset[mg] = len(array) array.append(len(mg)) array.extend(sorted(mg)) p(f'static const char_type mark_groups[{len(array)}] = {{' ' // {{{') p(', '.join(map(str, array))) p('}; // }}}\n') offsets_array = [] for wi, w in enumerate(word_map): mg = word_to_marks[wi] offsets_array.append(mg_to_offset[mg]) p(f'static const char_type mark_to_offset[{len(offsets_array)}] = {{' ' // {{{') p(', '.join(map(str, offsets_array))) p('}; // }}}\n') # The trie p(f'typedef struct {{ uint32_t children_offset; uint32_t match_offset; }} word_trie;\n') all_trie_nodes = [] class TrieNode: def __init__(self): self.match_offset = 0 self.children_offset = 0 self.children = {} def add_letter(self, letter): if letter not in self.children: self.children[letter] = len(all_trie_nodes) all_trie_nodes.append(TrieNode()) return self.children[letter] def __str__(self): return f'{{ .children_offset={self.children_offset}, .match_offset={self.match_offset} }}' root = TrieNode() all_trie_nodes.append(root) def add_word(word_idx, word): parent = root for letter in map(ord, word): idx = parent.add_letter(letter) parent = all_trie_nodes[idx] parent.match_offset = offsets_array[word_idx] for i, word in enumerate(word_map): add_word(i, word) children_array = [0] for node in all_trie_nodes: if node.children: node.children_offset = len(children_array) children_array.append(len(node.children)) for letter, child_offset in node.children.items(): children_array.append((child_offset << 8) | (letter & 0xff)) p(f'static const word_trie all_trie_nodes[{len(all_trie_nodes)}] = {{' ' // {{{') p(',\n'.join(map(str, all_trie_nodes))) p('\n}; // }}}\n') p(f'static const uint32_t children_array[{len(children_array)}] = {{' ' // {{{') p(', '.join(map(str, children_array))) p('}; // }}}\n') def gen_wcwidth(): seen = set() def add(p, comment, chars_, ret): chars = chars_ - seen seen.update(chars) p(f'\t\t// {comment} ({len(chars)} codepoints)' + ' {{' '{') for spec in get_ranges(list(chars)): write_case(spec, p) p(f'\t\t\treturn {ret};') p('\t\t// }}}\n') with create_header('kitty/wcwidth-std.h') as p: p('static int\nwcwidth_std(int32_t code) {') p('\tswitch(code) {') non_printing = class_maps['Cc'] | class_maps['Cf'] | class_maps['Cs'] add(p, 'Marks', marks | {0}, 0) add(p, 'Non-printing characters', non_printing, -1) add(p, 'Private use', class_maps['Co'], -3) add(p, 'Text Presentation', emoji_categories['Emoji'] - emoji_categories['Emoji_Presentation'], 1) add(p, 'East Asian ambiguous width', ambiguous, -2) add(p, 'East Asian double width', doublewidth, 2) add(p, 'Emoji Presentation', emoji_categories['Emoji_Presentation'], 2) add(p, 'Not assigned in the unicode character database', not_assigned, -4) p('\t\tdefault: return 1;') p('\t}') p('\treturn 1;\n}') p('static bool\nis_emoji_presentation_base(uint32_t code) {') p('\tswitch(code) {') for spec in get_ranges(list(emoji_presentation_bases)): write_case(spec, p) p('\t\t\treturn true;') p('\t\tdefault: return false;') p('\t}') p('\treturn 1;\n}') parse_ucd() parse_emoji() parse_eaw() gen_ucd() gen_wcwidth() gen_emoji() gen_names() kitty-0.15.0/glad/000077500000000000000000000000001356737523400136675ustar00rootroot00000000000000kitty-0.15.0/glad/generate.py000077500000000000000000000020461356737523400160400ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import re import shlex import shutil import subprocess cmdline = ( 'glad --out-path {dest} --api gl:core=3.3 ' ' --extensions GL_ARB_texture_storage,GL_ARB_copy_image,GL_ARB_multisample,GL_ARB_robustness,GL_KHR_debug ' 'c --header-only --debug' ) def clean(x): if os.path.exists(x): shutil.rmtree(x) def regenerate(): clean('out') subprocess.check_call( shlex.split(cmdline.format(dest='out')) ) def strip_trailing_whitespace(c): return re.sub(r'\s+$', '', c, flags=re.MULTILINE) + '\n' def export(): with open('out/include/glad/gl.h', 'r', encoding='utf-8') as source: data = source.read() data = strip_trailing_whitespace(data) with open('../kitty/gl-wrapper.h', 'w', encoding='utf-8') as dest: dest.write(data) if __name__ == '__main__': os.chdir(os.path.dirname(os.path.abspath(__file__))) regenerate() export() kitty-0.15.0/glfw/000077500000000000000000000000001356737523400137175ustar00rootroot00000000000000kitty-0.15.0/glfw/backend_utils.c000066400000000000000000000256471356737523400167100ustar00rootroot00000000000000/* * backend_utils.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #define _GNU_SOURCE #include "backend_utils.h" #include "internal.h" #include #include #include #include #include #include #include #include #ifdef __NetBSD__ #define ppoll pollts #endif void update_fds(EventLoopData *eld) { for (nfds_t i = 0; i < eld->watches_count; i++) { Watch *w = eld->watches + i; eld->fds[i].fd = w->fd; eld->fds[i].events = w->enabled ? w->events : 0; } } static id_type watch_counter = 0; id_type addWatch(EventLoopData *eld, const char* name, int fd, int events, int enabled, watch_callback_func cb, void *cb_data) { if (eld->watches_count >= sizeof(eld->watches)/sizeof(eld->watches[0])) { _glfwInputError(GLFW_PLATFORM_ERROR, "Too many watches added"); return 0; } Watch *w = eld->watches + eld->watches_count++; w->name = name; w->fd = fd; w->events = events; w->enabled = enabled; w->callback = cb; w->callback_data = cb_data; w->free = NULL; w->id = ++watch_counter; update_fds(eld); return w->id; } #define removeX(which, item_id, update_func) {\ for (nfds_t i = 0; i < eld->which##_count; i++) { \ if (eld->which[i].id == item_id) { \ eld->which##_count--; \ if (eld->which[i].callback_data && eld->which[i].free) { \ eld->which[i].free(eld->which[i].id, eld->which[i].callback_data); \ eld->which[i].callback_data = NULL; eld->which[i].free = NULL; \ } \ if (i < eld->which##_count) { \ memmove(eld->which + i, eld->which + i + 1, sizeof(eld->which[0]) * (eld->which##_count - i)); \ } \ update_func(eld); break; \ }}} void removeWatch(EventLoopData *eld, id_type watch_id) { removeX(watches, watch_id, update_fds); } void toggleWatch(EventLoopData *eld, id_type watch_id, int enabled) { for (nfds_t i = 0; i < eld->watches_count; i++) { if (eld->watches[i].id == watch_id) { if (eld->watches[i].enabled != enabled) { eld->watches[i].enabled = enabled; update_fds(eld); } break; } } } static id_type timer_counter = 0; static int compare_timers(const void *a_, const void *b_) { const Timer *a = (const Timer*)a_, *b = (const Timer*)b_; return (a->trigger_at > b->trigger_at) ? 1 : (a->trigger_at < b->trigger_at) ? -1 : 0; } static inline void update_timers(EventLoopData *eld) { if (eld->timers_count > 1) qsort(eld->timers, eld->timers_count, sizeof(eld->timers[0]), compare_timers); } id_type addTimer(EventLoopData *eld, const char *name, monotonic_t interval, int enabled, bool repeats, timer_callback_func cb, void *cb_data, GLFWuserdatafreefun free) { if (eld->timers_count >= sizeof(eld->timers)/sizeof(eld->timers[0])) { _glfwInputError(GLFW_PLATFORM_ERROR, "Too many timers added"); return 0; } Timer *t = eld->timers + eld->timers_count++; t->interval = interval; t->name = name; t->trigger_at = enabled ? monotonic() + interval : MONOTONIC_T_MAX; t->repeats = repeats; t->callback = cb; t->callback_data = cb_data; t->free = free; t->id = ++timer_counter; update_timers(eld); return timer_counter; } void removeTimer(EventLoopData *eld, id_type timer_id) { removeX(timers, timer_id, update_timers); } void removeAllTimers(EventLoopData *eld) { for (nfds_t i = 0; i < eld->timers_count; i++) { if (eld->timers[i].free && eld->timers[i].callback_data) eld->timers[i].free(eld->timers[i].id, eld->timers[i].callback_data); } eld->timers_count = 0; } void toggleTimer(EventLoopData *eld, id_type timer_id, int enabled) { for (nfds_t i = 0; i < eld->timers_count; i++) { if (eld->timers[i].id == timer_id) { monotonic_t trigger_at = enabled ? (monotonic() + eld->timers[i].interval) : MONOTONIC_T_MAX; if (trigger_at != eld->timers[i].trigger_at) { eld->timers[i].trigger_at = trigger_at; update_timers(eld); } break; } } } void changeTimerInterval(EventLoopData *eld, id_type timer_id, monotonic_t interval) { for (nfds_t i = 0; i < eld->timers_count; i++) { if (eld->timers[i].id == timer_id) { eld->timers[i].interval = interval; break; } } } monotonic_t prepareForPoll(EventLoopData *eld, monotonic_t timeout) { for (nfds_t i = 0; i < eld->watches_count; i++) eld->fds[i].revents = 0; if (!eld->timers_count || eld->timers[0].trigger_at == MONOTONIC_T_MAX) return timeout; monotonic_t now = monotonic(), next_repeat_at = eld->timers[0].trigger_at; if (timeout < 0 || now + timeout > next_repeat_at) { timeout = next_repeat_at <= now ? 0 : next_repeat_at - now; } return timeout; } int pollWithTimeout(struct pollfd *fds, nfds_t nfds, monotonic_t timeout) { struct timespec tv = calc_time(timeout); return ppoll(fds, nfds, &tv, NULL); } static void dispatchEvents(EventLoopData *eld) { for (nfds_t i = 0; i < eld->watches_count; i++) { Watch *ww = eld->watches + i; struct pollfd *pfd = eld->fds + i; if (pfd->revents & ww->events) { ww->ready = 1; if (ww->callback) ww->callback(ww->fd, pfd->revents, ww->callback_data); } else ww->ready = 0; } } unsigned dispatchTimers(EventLoopData *eld) { if (!eld->timers_count || eld->timers[0].trigger_at == MONOTONIC_T_MAX) return 0; static struct { timer_callback_func func; id_type id; void* data; bool repeats; } dispatches[sizeof(eld->timers)/sizeof(eld->timers[0])]; unsigned num_dispatches = 0; monotonic_t now = monotonic(); for (nfds_t i = 0; i < eld->timers_count && eld->timers[i].trigger_at <= now; i++) { eld->timers[i].trigger_at = now + eld->timers[i].interval; dispatches[num_dispatches].func = eld->timers[i].callback; dispatches[num_dispatches].id = eld->timers[i].id; dispatches[num_dispatches].data = eld->timers[i].callback_data; dispatches[num_dispatches].repeats = eld->timers[i].repeats; num_dispatches++; } // we dispatch separately so that the callbacks can modify timers for (unsigned i = 0; i < num_dispatches; i++) { dispatches[i].func(dispatches[i].id, dispatches[i].data); if (!dispatches[i].repeats) { removeTimer(eld, dispatches[i].id); } } if (num_dispatches) update_timers(eld); return num_dispatches; } static void drain_wakeup_fd(int fd, EventLoopData* eld) { static char drain_buf[64]; eld->wakeup_data_read = false; while(true) { ssize_t ret = read(fd, drain_buf, sizeof(drain_buf)); if (ret < 0) { if (errno == EINTR) continue; break; } if (ret > 0) { eld->wakeup_data_read = true; continue; } break; } } static void mark_wakep_fd_ready(int fd UNUSED, int events UNUSED, void *data) { ((EventLoopData*)(data))->wakeup_fd_ready = true; } bool initPollData(EventLoopData *eld, int display_fd) { if (!addWatch(eld, "display", display_fd, POLLIN, 1, NULL, NULL)) return false; #ifdef HAS_EVENT_FD eld->wakeupFd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); if (eld->wakeupFd == -1) return false; const int wakeup_fd = eld->wakeupFd; #else if (pipe2(eld->wakeupFds, O_CLOEXEC | O_NONBLOCK) != 0) return false; const int wakeup_fd = eld->wakeupFds[0]; #endif if (!addWatch(eld, "wakeup", wakeup_fd, POLLIN, 1, mark_wakep_fd_ready, eld)) return false; return true; } void check_for_wakeup_events(EventLoopData *eld) { #ifdef HAS_EVENT_FD int fd = eld->wakeupFd; #else int fd = eld->wakeupFds[0]; #endif drain_wakeup_fd(fd, eld); } void wakeupEventLoop(EventLoopData *eld) { #ifdef HAS_EVENT_FD static const uint64_t value = 1; while (write(eld->wakeupFd, &value, sizeof value) < 0 && (errno == EINTR || errno == EAGAIN)); #else while (write(eld->wakeupFds[1], "w", 1) < 0 && (errno == EINTR || errno == EAGAIN)); #endif } #ifndef HAS_EVENT_FD static inline void closeFds(int *fds, size_t count) { while(count--) { if (*fds > 0) { close(*fds); *fds = -1; } fds++; } } #endif void finalizePollData(EventLoopData *eld) { #ifdef HAS_EVENT_FD close(eld->wakeupFd); eld->wakeupFd = -1; #else closeFds(eld->wakeupFds, arraysz(eld->wakeupFds)); #endif } int pollForEvents(EventLoopData *eld, monotonic_t timeout) { int read_ok = 0; timeout = prepareForPoll(eld, timeout); EVDBG("pollForEvents final timeout: %.3f", monotonic_t_to_s_double(timeout)); int result; monotonic_t end_time = monotonic() + timeout; eld->wakeup_fd_ready = false; while(1) { if (timeout >= 0) { errno = 0; result = pollWithTimeout(eld->fds, eld->watches_count, timeout); int saved_errno = errno; dispatchTimers(eld); if (result > 0) { dispatchEvents(eld); read_ok = eld->watches[0].ready; break; } timeout = end_time - monotonic(); if (timeout <= 0) break; if (result < 0 && (saved_errno == EINTR || saved_errno == EAGAIN)) continue; break; } else { errno = 0; result = poll(eld->fds, eld->watches_count, -1); int saved_errno = errno; dispatchTimers(eld); if (result > 0) { dispatchEvents(eld); read_ok = eld->watches[0].ready; } if (result < 0 && (saved_errno == EINTR || saved_errno == EAGAIN)) continue; break; } } return read_ok; } // Splits and translates a text/uri-list into separate file paths // NOTE: This function destroys the provided string // char** parseUriList(char* text, int* count) { const char* prefix = "file://"; char** paths = NULL; char* line; *count = 0; while ((line = strtok(text, "\r\n"))) { text = NULL; if (line[0] == '#') continue; if (strncmp(line, prefix, strlen(prefix)) == 0) { line += strlen(prefix); // TODO: Validate hostname while (*line != '/') line++; } (*count)++; char* path = calloc(strlen(line) + 1, 1); paths = realloc(paths, *count * sizeof(char*)); paths[*count - 1] = path; while (*line) { if (line[0] == '%' && line[1] && line[2]) { const char digits[3] = { line[1], line[2], '\0' }; *path = strtol(digits, NULL, 16); line += 2; } else *path = *line; path++; line++; } } return paths; } kitty-0.15.0/glfw/backend_utils.h000066400000000000000000000066431356737523400167100ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Wayland - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #pragma once #include "../kitty/monotonic.h" #include #include #include #ifdef __has_include #if __has_include() #define HAS_EVENT_FD #include #endif #else #define HAS_EVENT_FD #include #endif typedef unsigned long long id_type; typedef void(*watch_callback_func)(int, int, void*); typedef void(*timer_callback_func)(id_type, void*); typedef void (* GLFWuserdatafreefun)(id_type, void*); typedef struct { int fd, events, enabled, ready; watch_callback_func callback; void *callback_data; GLFWuserdatafreefun free; id_type id; const char *name; } Watch; typedef struct { id_type id; monotonic_t interval, trigger_at; timer_callback_func callback; void *callback_data; GLFWuserdatafreefun free; const char *name; bool repeats; } Timer; typedef struct { struct pollfd fds[32]; #ifdef HAS_EVENT_FD int wakeupFd; #else int wakeupFds[2]; #endif bool wakeup_data_read, wakeup_fd_ready; nfds_t watches_count, timers_count; Watch watches[32]; Timer timers[128]; } EventLoopData; void check_for_wakeup_events(EventLoopData *eld); id_type addWatch(EventLoopData *eld, const char *name, int fd, int events, int enabled, watch_callback_func cb, void *cb_data); void removeWatch(EventLoopData *eld, id_type watch_id); void toggleWatch(EventLoopData *eld, id_type watch_id, int enabled); id_type addTimer(EventLoopData *eld, const char *name, monotonic_t interval, int enabled, bool repeats, timer_callback_func cb, void *cb_data, GLFWuserdatafreefun free); void removeTimer(EventLoopData *eld, id_type timer_id); void removeAllTimers(EventLoopData *eld); void toggleTimer(EventLoopData *eld, id_type timer_id, int enabled); void changeTimerInterval(EventLoopData *eld, id_type timer_id, monotonic_t interval); monotonic_t prepareForPoll(EventLoopData *eld, monotonic_t timeout); int pollWithTimeout(struct pollfd *fds, nfds_t nfds, monotonic_t timeout); int pollForEvents(EventLoopData *eld, monotonic_t timeout); unsigned dispatchTimers(EventLoopData *eld); void finalizePollData(EventLoopData *eld); bool initPollData(EventLoopData *eld, int display_fd); char** parseUriList(char* text, int* count); void wakeupEventLoop(EventLoopData *eld); kitty-0.15.0/glfw/cocoa_init.m000066400000000000000000000667141356737523400162220ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include "../kitty/monotonic.h" #include // For MAXPATHLEN #include // Needed for _NSGetProgname #include // Change to our application bundle's resources directory, if present // static void changeToResourcesDirectory(void) { char resourcesPath[MAXPATHLEN]; CFBundleRef bundle = CFBundleGetMainBundle(); if (!bundle) return; CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(bundle); CFStringRef last = CFURLCopyLastPathComponent(resourcesURL); if (CFStringCompare(CFSTR("Resources"), last, 0) != kCFCompareEqualTo) { CFRelease(last); CFRelease(resourcesURL); return; } CFRelease(last); if (!CFURLGetFileSystemRepresentation(resourcesURL, true, (UInt8*) resourcesPath, MAXPATHLEN)) { CFRelease(resourcesURL); return; } CFRelease(resourcesURL); chdir(resourcesPath); } // Set up the menu bar (manually) // This is nasty, nasty stuff -- calls to undocumented semi-private APIs that // could go away at any moment, lots of stuff that really should be // localize(d|able), etc. Add a nib to save us this horror. // static void createMenuBar(void) { size_t i; NSString* appName = nil; NSDictionary* bundleInfo = [[NSBundle mainBundle] infoDictionary]; NSString* nameKeys[] = { @"CFBundleDisplayName", @"CFBundleName", @"CFBundleExecutable", }; // Try to figure out what the calling application is called for (i = 0; i < sizeof(nameKeys) / sizeof(nameKeys[0]); i++) { id name = bundleInfo[nameKeys[i]]; if (name && [name isKindOfClass:[NSString class]] && ![name isEqualToString:@""]) { appName = name; break; } } if (!appName) { char** progname = _NSGetProgname(); if (progname && *progname) appName = @(*progname); else appName = @"GLFW Application"; } NSMenu* bar = [[NSMenu alloc] init]; [NSApp setMainMenu:bar]; NSMenuItem* appMenuItem = [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; NSMenu* appMenu = [[NSMenu alloc] init]; [appMenuItem setSubmenu:appMenu]; [appMenu addItemWithTitle:[NSString stringWithFormat:@"About %@", appName] action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; NSMenu* servicesMenu = [[NSMenu alloc] init]; [NSApp setServicesMenu:servicesMenu]; [[appMenu addItemWithTitle:@"Services" action:NULL keyEquivalent:@""] setSubmenu:servicesMenu]; [servicesMenu release]; [appMenu addItem:[NSMenuItem separatorItem]]; [appMenu addItemWithTitle:[NSString stringWithFormat:@"Hide %@", appName] action:@selector(hide:) keyEquivalent:@"h"]; [[appMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"] setKeyEquivalentModifierMask:NSEventModifierFlagOption | NSEventModifierFlagCommand]; [appMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; [appMenu addItemWithTitle:[NSString stringWithFormat:@"Quit %@", appName] action:@selector(terminate:) keyEquivalent:@"q"]; NSMenuItem* windowMenuItem = [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; [bar release]; NSMenu* windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; [NSApp setWindowsMenu:windowMenu]; [windowMenuItem setSubmenu:windowMenu]; [windowMenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [windowMenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [windowMenu addItem:[NSMenuItem separatorItem]]; [windowMenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""]; // TODO: Make this appear at the bottom of the menu (for consistency) [windowMenu addItem:[NSMenuItem separatorItem]]; [[windowMenu addItemWithTitle:@"Enter Full Screen" action:@selector(toggleFullScreen:) keyEquivalent:@"f"] setKeyEquivalentModifierMask:NSEventModifierFlagControl | NSEventModifierFlagCommand]; // Prior to Snow Leopard, we need to use this oddly-named semi-private API // to get the application menu working properly. SEL setAppleMenuSelector = NSSelectorFromString(@"setAppleMenu:"); [NSApp performSelector:setAppleMenuSelector withObject:appMenu]; } // Create key code translation tables // static void createKeyTables(void) { int keycode; memset(_glfw.ns.keycodes, -1, sizeof(_glfw.ns.keycodes)); memset(_glfw.ns.key_to_keycode, -1, sizeof(_glfw.ns.key_to_keycode)); _glfw.ns.keycodes[0x1D] = GLFW_KEY_0; _glfw.ns.keycodes[0x12] = GLFW_KEY_1; _glfw.ns.keycodes[0x13] = GLFW_KEY_2; _glfw.ns.keycodes[0x14] = GLFW_KEY_3; _glfw.ns.keycodes[0x15] = GLFW_KEY_4; _glfw.ns.keycodes[0x17] = GLFW_KEY_5; _glfw.ns.keycodes[0x16] = GLFW_KEY_6; _glfw.ns.keycodes[0x1A] = GLFW_KEY_7; _glfw.ns.keycodes[0x1C] = GLFW_KEY_8; _glfw.ns.keycodes[0x19] = GLFW_KEY_9; _glfw.ns.keycodes[0x00] = GLFW_KEY_A; _glfw.ns.keycodes[0x0B] = GLFW_KEY_B; _glfw.ns.keycodes[0x08] = GLFW_KEY_C; _glfw.ns.keycodes[0x02] = GLFW_KEY_D; _glfw.ns.keycodes[0x0E] = GLFW_KEY_E; _glfw.ns.keycodes[0x03] = GLFW_KEY_F; _glfw.ns.keycodes[0x05] = GLFW_KEY_G; _glfw.ns.keycodes[0x04] = GLFW_KEY_H; _glfw.ns.keycodes[0x22] = GLFW_KEY_I; _glfw.ns.keycodes[0x26] = GLFW_KEY_J; _glfw.ns.keycodes[0x28] = GLFW_KEY_K; _glfw.ns.keycodes[0x25] = GLFW_KEY_L; _glfw.ns.keycodes[0x2E] = GLFW_KEY_M; _glfw.ns.keycodes[0x2D] = GLFW_KEY_N; _glfw.ns.keycodes[0x1F] = GLFW_KEY_O; _glfw.ns.keycodes[0x23] = GLFW_KEY_P; _glfw.ns.keycodes[0x0C] = GLFW_KEY_Q; _glfw.ns.keycodes[0x0F] = GLFW_KEY_R; _glfw.ns.keycodes[0x01] = GLFW_KEY_S; _glfw.ns.keycodes[0x11] = GLFW_KEY_T; _glfw.ns.keycodes[0x20] = GLFW_KEY_U; _glfw.ns.keycodes[0x09] = GLFW_KEY_V; _glfw.ns.keycodes[0x0D] = GLFW_KEY_W; _glfw.ns.keycodes[0x07] = GLFW_KEY_X; _glfw.ns.keycodes[0x10] = GLFW_KEY_Y; _glfw.ns.keycodes[0x06] = GLFW_KEY_Z; _glfw.ns.keycodes[0x27] = GLFW_KEY_APOSTROPHE; _glfw.ns.keycodes[0x2A] = GLFW_KEY_BACKSLASH; _glfw.ns.keycodes[0x2B] = GLFW_KEY_COMMA; _glfw.ns.keycodes[0x18] = GLFW_KEY_EQUAL; _glfw.ns.keycodes[0x32] = GLFW_KEY_GRAVE_ACCENT; _glfw.ns.keycodes[0x21] = GLFW_KEY_LEFT_BRACKET; _glfw.ns.keycodes[0x1B] = GLFW_KEY_MINUS; _glfw.ns.keycodes[0x2F] = GLFW_KEY_PERIOD; _glfw.ns.keycodes[0x1E] = GLFW_KEY_RIGHT_BRACKET; _glfw.ns.keycodes[0x29] = GLFW_KEY_SEMICOLON; _glfw.ns.keycodes[0x2C] = GLFW_KEY_SLASH; _glfw.ns.keycodes[0x0A] = GLFW_KEY_WORLD_1; _glfw.ns.keycodes[0x33] = GLFW_KEY_BACKSPACE; _glfw.ns.keycodes[0x39] = GLFW_KEY_CAPS_LOCK; _glfw.ns.keycodes[0x75] = GLFW_KEY_DELETE; _glfw.ns.keycodes[0x7D] = GLFW_KEY_DOWN; _glfw.ns.keycodes[0x77] = GLFW_KEY_END; _glfw.ns.keycodes[0x24] = GLFW_KEY_ENTER; _glfw.ns.keycodes[0x35] = GLFW_KEY_ESCAPE; _glfw.ns.keycodes[0x7A] = GLFW_KEY_F1; _glfw.ns.keycodes[0x78] = GLFW_KEY_F2; _glfw.ns.keycodes[0x63] = GLFW_KEY_F3; _glfw.ns.keycodes[0x76] = GLFW_KEY_F4; _glfw.ns.keycodes[0x60] = GLFW_KEY_F5; _glfw.ns.keycodes[0x61] = GLFW_KEY_F6; _glfw.ns.keycodes[0x62] = GLFW_KEY_F7; _glfw.ns.keycodes[0x64] = GLFW_KEY_F8; _glfw.ns.keycodes[0x65] = GLFW_KEY_F9; _glfw.ns.keycodes[0x6D] = GLFW_KEY_F10; _glfw.ns.keycodes[0x67] = GLFW_KEY_F11; _glfw.ns.keycodes[0x6F] = GLFW_KEY_F12; _glfw.ns.keycodes[0x69] = GLFW_KEY_F13; _glfw.ns.keycodes[0x6B] = GLFW_KEY_F14; _glfw.ns.keycodes[0x71] = GLFW_KEY_F15; _glfw.ns.keycodes[0x6A] = GLFW_KEY_F16; _glfw.ns.keycodes[0x40] = GLFW_KEY_F17; _glfw.ns.keycodes[0x4F] = GLFW_KEY_F18; _glfw.ns.keycodes[0x50] = GLFW_KEY_F19; _glfw.ns.keycodes[0x5A] = GLFW_KEY_F20; _glfw.ns.keycodes[0x73] = GLFW_KEY_HOME; _glfw.ns.keycodes[0x72] = GLFW_KEY_INSERT; _glfw.ns.keycodes[0x7B] = GLFW_KEY_LEFT; _glfw.ns.keycodes[0x3A] = GLFW_KEY_LEFT_ALT; _glfw.ns.keycodes[0x3B] = GLFW_KEY_LEFT_CONTROL; _glfw.ns.keycodes[0x38] = GLFW_KEY_LEFT_SHIFT; _glfw.ns.keycodes[0x37] = GLFW_KEY_LEFT_SUPER; _glfw.ns.keycodes[0x6E] = GLFW_KEY_MENU; _glfw.ns.keycodes[0x47] = GLFW_KEY_NUM_LOCK; _glfw.ns.keycodes[0x79] = GLFW_KEY_PAGE_DOWN; _glfw.ns.keycodes[0x74] = GLFW_KEY_PAGE_UP; _glfw.ns.keycodes[0x7C] = GLFW_KEY_RIGHT; _glfw.ns.keycodes[0x3D] = GLFW_KEY_RIGHT_ALT; _glfw.ns.keycodes[0x3E] = GLFW_KEY_RIGHT_CONTROL; _glfw.ns.keycodes[0x3C] = GLFW_KEY_RIGHT_SHIFT; _glfw.ns.keycodes[0x36] = GLFW_KEY_RIGHT_SUPER; _glfw.ns.keycodes[0x31] = GLFW_KEY_SPACE; _glfw.ns.keycodes[0x30] = GLFW_KEY_TAB; _glfw.ns.keycodes[0x7E] = GLFW_KEY_UP; _glfw.ns.keycodes[0x52] = GLFW_KEY_KP_0; _glfw.ns.keycodes[0x53] = GLFW_KEY_KP_1; _glfw.ns.keycodes[0x54] = GLFW_KEY_KP_2; _glfw.ns.keycodes[0x55] = GLFW_KEY_KP_3; _glfw.ns.keycodes[0x56] = GLFW_KEY_KP_4; _glfw.ns.keycodes[0x57] = GLFW_KEY_KP_5; _glfw.ns.keycodes[0x58] = GLFW_KEY_KP_6; _glfw.ns.keycodes[0x59] = GLFW_KEY_KP_7; _glfw.ns.keycodes[0x5B] = GLFW_KEY_KP_8; _glfw.ns.keycodes[0x5C] = GLFW_KEY_KP_9; _glfw.ns.keycodes[0x45] = GLFW_KEY_KP_ADD; _glfw.ns.keycodes[0x41] = GLFW_KEY_KP_DECIMAL; _glfw.ns.keycodes[0x4B] = GLFW_KEY_KP_DIVIDE; _glfw.ns.keycodes[0x4C] = GLFW_KEY_KP_ENTER; _glfw.ns.keycodes[0x51] = GLFW_KEY_KP_EQUAL; _glfw.ns.keycodes[0x43] = GLFW_KEY_KP_MULTIPLY; _glfw.ns.keycodes[0x4E] = GLFW_KEY_KP_SUBTRACT; for (keycode = 0; keycode < 256; keycode++) { // Store the reverse translation for faster key name lookup if (_glfw.ns.keycodes[keycode] >= 0) _glfw.ns.key_to_keycode[_glfw.ns.keycodes[keycode]] = keycode; } } // Retrieve Unicode data for the current keyboard layout // static bool updateUnicodeDataNS(void) { if (_glfw.ns.inputSource) { CFRelease(_glfw.ns.inputSource); _glfw.ns.inputSource = NULL; _glfw.ns.unicodeData = nil; } for (_GLFWwindow *window = _glfw.windowListHead; window; window = window->next) window->ns.deadKeyState = 0; _glfw.ns.inputSource = TISCopyCurrentKeyboardLayoutInputSource(); if (!_glfw.ns.inputSource) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to retrieve keyboard layout input source"); return false; } _glfw.ns.unicodeData = TISGetInputSourceProperty(_glfw.ns.inputSource, kTISPropertyUnicodeKeyLayoutData); if (!_glfw.ns.unicodeData) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to retrieve keyboard layout Unicode data"); return false; } return true; } // Load HIToolbox.framework and the TIS symbols we need from it // static bool initializeTIS(void) { // This works only because Cocoa has already loaded it properly _glfw.ns.tis.bundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.HIToolbox")); if (!_glfw.ns.tis.bundle) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to load HIToolbox.framework"); return false; } CFStringRef* kPropertyUnicodeKeyLayoutData = CFBundleGetDataPointerForName(_glfw.ns.tis.bundle, CFSTR("kTISPropertyUnicodeKeyLayoutData")); *(void **)&_glfw.ns.tis.CopyCurrentKeyboardLayoutInputSource = CFBundleGetFunctionPointerForName(_glfw.ns.tis.bundle, CFSTR("TISCopyCurrentKeyboardLayoutInputSource")); *(void **)&_glfw.ns.tis.GetInputSourceProperty = CFBundleGetFunctionPointerForName(_glfw.ns.tis.bundle, CFSTR("TISGetInputSourceProperty")); *(void **)&_glfw.ns.tis.GetKbdType = CFBundleGetFunctionPointerForName(_glfw.ns.tis.bundle, CFSTR("LMGetKbdType")); if (!kPropertyUnicodeKeyLayoutData || !TISCopyCurrentKeyboardLayoutInputSource || !TISGetInputSourceProperty || !LMGetKbdType) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to load TIS API symbols"); return false; } _glfw.ns.tis.kPropertyUnicodeKeyLayoutData = *kPropertyUnicodeKeyLayoutData; return updateUnicodeDataNS(); } static void display_reconfigured(CGDirectDisplayID display UNUSED, CGDisplayChangeSummaryFlags flags, void *userInfo UNUSED) { if (flags & kCGDisplayBeginConfigurationFlag) { return; } if (flags & kCGDisplaySetModeFlag) { // GPU possibly changed } } @interface GLFWHelper : NSObject @end @implementation GLFWHelper - (void)selectedKeyboardInputSourceChanged:(NSObject* )object { (void)object; updateUnicodeDataNS(); } - (void)doNothing:(id)object { (void)object; } @end // GLFWHelper // Delegate for application related notifications {{{ @interface GLFWApplicationDelegate : NSObject @end @implementation GLFWApplicationDelegate - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { (void)sender; _GLFWwindow* window; for (window = _glfw.windowListHead; window; window = window->next) _glfwInputWindowCloseRequest(window); return NSTerminateCancel; } static GLFWapplicationshouldhandlereopenfun handle_reopen_callback = NULL; - (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag { (void)sender; if (!handle_reopen_callback) return YES; if (handle_reopen_callback(flag)) return YES; return NO; } - (void)applicationDidChangeScreenParameters:(NSNotification *) notification { (void)notification; _GLFWwindow* window; for (window = _glfw.windowListHead; window; window = window->next) { if (window->context.client != GLFW_NO_API) [window->context.nsgl.object update]; } _glfwPollMonitorsNS(); } static GLFWapplicationwillfinishlaunchingfun finish_launching_callback = NULL; - (void)applicationWillFinishLaunching:(NSNotification *)notification { (void)notification; if (_glfw.hints.init.ns.menubar) { // In case we are unbundled, make us a proper UI application [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; // Menu bar setup must go between sharedApplication above and // finishLaunching below, in order to properly emulate the behavior // of NSApplicationMain if ([[NSBundle mainBundle] pathForResource:@"MainMenu" ofType:@"nib"]) { [[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:NSApp topLevelObjects:&_glfw.ns.nibObjects]; } else createMenuBar(); } if (finish_launching_callback) finish_launching_callback(); } - (void)applicationDidFinishLaunching:(NSNotification *)notification { (void)notification; [NSApp stop:nil]; CGDisplayRegisterReconfigurationCallback(display_reconfigured, NULL); _glfwCocoaPostEmptyEvent(); } - (void)applicationWillTerminate:(NSNotification *)aNotification { (void)aNotification; CGDisplayRemoveReconfigurationCallback(display_reconfigured, NULL); } - (void)applicationDidHide:(NSNotification *)notification { (void)notification; int i; for (i = 0; i < _glfw.monitorCount; i++) _glfwRestoreVideoModeNS(_glfw.monitors[i]); } @end // GLFWApplicationDelegate // }}} @interface GLFWApplication : NSApplication - (void)tick_callback; - (void)render_frame_received:(id)displayIDAsID; @end @implementation GLFWApplication - (void)tick_callback { _glfwDispatchTickCallback(); } - (void)render_frame_received:(id)displayIDAsID { CGDirectDisplayID displayID = [(NSNumber*)displayIDAsID unsignedIntValue]; _glfwDispatchRenderFrame(displayID); } @end ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// static inline bool is_ctrl_tab(NSEvent *event, NSEventModifierFlags modifierFlags) { if ( (modifierFlags == NSEventModifierFlagControl && [event.charactersIgnoringModifiers isEqualToString:@"\t"]) || (modifierFlags == (NSEventModifierFlagControl | NSEventModifierFlagShift) && [event.charactersIgnoringModifiers isEqualToString:@"\x19"]) ) return true; return false; } static inline bool is_cmd_period(NSEvent *event, NSEventModifierFlags modifierFlags) { if (modifierFlags != NSEventModifierFlagCommand) return false; if ([event.charactersIgnoringModifiers isEqualToString:@"."]) return true; return false; } GLFWAPI GLFWapplicationshouldhandlereopenfun glfwSetApplicationShouldHandleReopen(GLFWapplicationshouldhandlereopenfun callback) { GLFWapplicationshouldhandlereopenfun previous = handle_reopen_callback; handle_reopen_callback = callback; return previous; } GLFWAPI GLFWapplicationwillfinishlaunchingfun glfwSetApplicationWillFinishLaunching(GLFWapplicationwillfinishlaunchingfun callback) { GLFWapplicationwillfinishlaunchingfun previous = finish_launching_callback; finish_launching_callback = callback; return previous; } int _glfwPlatformInit(void) { @autoreleasepool { _glfw.ns.helper = [[GLFWHelper alloc] init]; [NSThread detachNewThreadSelector:@selector(doNothing:) toTarget:_glfw.ns.helper withObject:nil]; if (NSApp) _glfw.ns.finishedLaunching = true; [GLFWApplication sharedApplication]; _glfw.ns.delegate = [[GLFWApplicationDelegate alloc] init]; if (_glfw.ns.delegate == nil) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create application delegate"); return false; } [NSApp setDelegate:_glfw.ns.delegate]; NSEvent* (^keydown_block)(NSEvent*) = ^ NSEvent* (NSEvent* event) { NSEventModifierFlags modifierFlags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; if (is_ctrl_tab(event, modifierFlags) || is_cmd_period(event, modifierFlags)) { // Cocoa swallows Ctrl+Tab to cycle between views [[NSApp keyWindow].contentView keyDown:event]; } return event; }; NSEvent* (^keyup_block)(NSEvent*) = ^ NSEvent* (NSEvent* event) { NSEventModifierFlags modifierFlags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; if (modifierFlags & NSEventModifierFlagCommand) { // From http://cocoadev.com/index.pl?GameKeyboardHandlingAlmost // This works around an AppKit bug, where key up events while holding // down the command key don't get sent to the key window. [[NSApp keyWindow] sendEvent:event]; } if (is_ctrl_tab(event, modifierFlags) || is_cmd_period(event, modifierFlags)) { // Cocoa swallows Ctrl+Tab to cycle between views [[NSApp keyWindow].contentView keyUp:event]; } return event; }; _glfw.ns.keyUpMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyUp handler:keyup_block]; _glfw.ns.keyDownMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:keydown_block]; if (_glfw.hints.init.ns.chdir) changeToResourcesDirectory(); // Press and Hold prevents some keys from emitting repeated characters NSDictionary* defaults = @{@"ApplePressAndHoldEnabled":@NO}; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; [[NSNotificationCenter defaultCenter] addObserver:_glfw.ns.helper selector:@selector(selectedKeyboardInputSourceChanged:) name:NSTextInputContextKeyboardSelectionDidChangeNotification object:nil]; createKeyTables(); _glfw.ns.eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); if (!_glfw.ns.eventSource) return false; CGEventSourceSetLocalEventsSuppressionInterval(_glfw.ns.eventSource, 0.0); if (!initializeTIS()) return false; _glfwInitTimerNS(); _glfwInitJoysticksNS(); _glfwPollMonitorsNS(); return true; } // autoreleasepool } void _glfwPlatformTerminate(void) { @autoreleasepool { _glfwClearDisplayLinks(); if (_glfw.ns.inputSource) { CFRelease(_glfw.ns.inputSource); _glfw.ns.inputSource = NULL; _glfw.ns.unicodeData = nil; } if (_glfw.ns.eventSource) { CFRelease(_glfw.ns.eventSource); _glfw.ns.eventSource = NULL; } if (_glfw.ns.delegate) { [NSApp setDelegate:nil]; [_glfw.ns.delegate release]; _glfw.ns.delegate = nil; } if (_glfw.ns.helper) { [[NSNotificationCenter defaultCenter] removeObserver:_glfw.ns.helper name:NSTextInputContextKeyboardSelectionDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:_glfw.ns.helper]; [_glfw.ns.helper release]; _glfw.ns.helper = nil; } if (_glfw.ns.keyUpMonitor) [NSEvent removeMonitor:_glfw.ns.keyUpMonitor]; if (_glfw.ns.keyDownMonitor) [NSEvent removeMonitor:_glfw.ns.keyDownMonitor]; free(_glfw.ns.clipboardString); _glfwTerminateNSGL(); _glfwTerminateJoysticksNS(); } // autoreleasepool } const char* _glfwPlatformGetVersionString(void) { return _GLFW_VERSION_NUMBER " Cocoa NSGL EGL OSMesa" #if defined(_GLFW_BUILD_DLL) " dynamic" #endif ; } static GLFWtickcallback tick_callback = NULL; static void* tick_callback_data = NULL; static bool tick_callback_requested = false; static pthread_t main_thread; static NSLock *tick_lock = NULL; void _glfwDispatchTickCallback() { if (tick_lock && tick_callback) { [tick_lock lock]; while(tick_callback_requested) { tick_callback_requested = false; tick_callback(tick_callback_data); } [tick_lock unlock]; } } static void request_tick_callback() { if (!tick_callback_requested) { tick_callback_requested = true; [NSApp performSelectorOnMainThread:@selector(tick_callback) withObject:nil waitUntilDone:NO]; } } void _glfwPlatformPostEmptyEvent(void) { if (pthread_equal(pthread_self(), main_thread)) { request_tick_callback(); } else if (tick_lock) { [tick_lock lock]; request_tick_callback(); [tick_lock unlock]; } } void _glfwPlatformStopMainLoop(void) { [NSApp stop:nil]; _glfwCocoaPostEmptyEvent(); } void _glfwPlatformRunMainLoop(GLFWtickcallback callback, void* data) { main_thread = pthread_self(); tick_callback = callback; tick_callback_data = data; tick_lock = [NSLock new]; [NSApp run]; [tick_lock release]; tick_lock = NULL; tick_callback = NULL; tick_callback_data = NULL; } typedef struct { NSTimer *os_timer; unsigned long long id; bool repeats; monotonic_t interval; GLFWuserdatafun callback; void *callback_data; GLFWuserdatafun free_callback_data; } Timer; static Timer timers[128] = {{0}}; static size_t num_timers = 0; static inline void remove_timer_at(size_t idx) { if (idx < num_timers) { Timer *t = timers + idx; if (t->os_timer) { [t->os_timer invalidate]; t->os_timer = NULL; } if (t->callback_data && t->free_callback_data) { t->free_callback_data(t->id, t->callback_data); t->callback_data = NULL; } remove_i_from_array(timers, idx, num_timers); } } static void schedule_timer(Timer *t) { t->os_timer = [NSTimer scheduledTimerWithTimeInterval:monotonic_t_to_s_double(t->interval) repeats:(t->repeats ? YES: NO) block:^(NSTimer *os_timer) { for (size_t i = 0; i < num_timers; i++) { if (timers[i].os_timer == os_timer) { timers[i].callback(timers[i].id, timers[i].callback_data); if (!timers[i].repeats) remove_timer_at(i); break; } } }]; } unsigned long long _glfwPlatformAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void *callback_data, GLFWuserdatafun free_callback) { static unsigned long long timer_counter = 0; if (num_timers >= sizeof(timers)/sizeof(timers[0]) - 1) { _glfwInputError(GLFW_PLATFORM_ERROR, "Too many timers added"); return 0; } Timer *t = timers + num_timers++; t->id = ++timer_counter; t->repeats = repeats; t->interval = interval; t->callback = callback; t->callback_data = callback_data; t->free_callback_data = free_callback; schedule_timer(t); return timer_counter; } void _glfwPlatformRemoveTimer(unsigned long long timer_id) { for (size_t i = 0; i < num_timers; i++) { if (timers[i].id == timer_id) { remove_timer_at(i); break; } } } void _glfwPlatformUpdateTimer(unsigned long long timer_id, monotonic_t interval, bool enabled) { for (size_t i = 0; i < num_timers; i++) { if (timers[i].id == timer_id) { Timer *t = timers + i; if (t->os_timer) { [t->os_timer invalidate]; t->os_timer = NULL; } t->interval = interval; if (enabled) schedule_timer(t); break; } } } kitty-0.15.0/glfw/cocoa_joystick.h000066400000000000000000000033571356737523400171030ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Cocoa - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include #include #define _GLFW_PLATFORM_JOYSTICK_STATE _GLFWjoystickNS ns #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE #define _GLFW_PLATFORM_MAPPING_NAME "Mac OS X" // Cocoa-specific per-joystick data // typedef struct _GLFWjoystickNS { IOHIDDeviceRef device; CFMutableArrayRef axes; CFMutableArrayRef buttons; CFMutableArrayRef hats; } _GLFWjoystickNS; void _glfwInitJoysticksNS(void); void _glfwTerminateJoysticksNS(void); kitty-0.15.0/glfw/cocoa_joystick.m000066400000000000000000000360611356737523400171060ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Cocoa - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // Copyright (c) 2012 Torsten Walluhn // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #include #include #include #include // Joystick element information // typedef struct _GLFWjoyelementNS { IOHIDElementRef native; uint32_t usage; int index; long minimum; long maximum; } _GLFWjoyelementNS; // Returns the value of the specified element of the specified joystick // static long getElementValue(_GLFWjoystick* js, _GLFWjoyelementNS* element) { IOHIDValueRef valueRef; long value = 0; if (js->ns.device) { if (IOHIDDeviceGetValue(js->ns.device, element->native, &valueRef) == kIOReturnSuccess) { value = IOHIDValueGetIntegerValue(valueRef); } } return value; } // Comparison function for matching the SDL element order // static CFComparisonResult compareElements(const void* fp, const void* sp, void* user UNUSED) { const _GLFWjoyelementNS* fe = fp; const _GLFWjoyelementNS* se = sp; if (fe->usage < se->usage) return kCFCompareLessThan; if (fe->usage > se->usage) return kCFCompareGreaterThan; if (fe->index < se->index) return kCFCompareLessThan; if (fe->index > se->index) return kCFCompareGreaterThan; return kCFCompareEqualTo; } // Removes the specified joystick // static void closeJoystick(_GLFWjoystick* js) { int i; if (!js->present) return; for (i = 0; i < CFArrayGetCount(js->ns.axes); i++) free((void*) CFArrayGetValueAtIndex(js->ns.axes, i)); CFRelease(js->ns.axes); for (i = 0; i < CFArrayGetCount(js->ns.buttons); i++) free((void*) CFArrayGetValueAtIndex(js->ns.buttons, i)); CFRelease(js->ns.buttons); for (i = 0; i < CFArrayGetCount(js->ns.hats); i++) free((void*) CFArrayGetValueAtIndex(js->ns.hats, i)); CFRelease(js->ns.hats); _glfwFreeJoystick(js); _glfwInputJoystick(js, GLFW_DISCONNECTED); } // Callback for user-initiated joystick addition // static void matchCallback(void* context UNUSED, IOReturn result UNUSED, void* sender UNUSED, IOHIDDeviceRef device) { int jid; char name[256]; char guid[33]; CFIndex i; CFTypeRef property; uint32_t vendor = 0, product = 0, version = 0; _GLFWjoystick* js; CFMutableArrayRef axes, buttons, hats; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { if (_glfw.joysticks[jid].ns.device == device) return; } axes = CFArrayCreateMutable(NULL, 0, NULL); buttons = CFArrayCreateMutable(NULL, 0, NULL); hats = CFArrayCreateMutable(NULL, 0, NULL); property = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey)); if (property) { CFStringGetCString(property, name, sizeof(name), kCFStringEncodingUTF8); } else strncpy(name, "Unknown", sizeof(name)); property = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDVendorIDKey)); if (property) CFNumberGetValue(property, kCFNumberSInt32Type, &vendor); property = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductIDKey)); if (property) CFNumberGetValue(property, kCFNumberSInt32Type, &product); property = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDVersionNumberKey)); if (property) CFNumberGetValue(property, kCFNumberSInt32Type, &version); // Generate a joystick GUID that matches the SDL 2.0.5+ one if (vendor && product) { sprintf(guid, "03000000%02x%02x0000%02x%02x0000%02x%02x0000", (uint8_t) vendor, (uint8_t) (vendor >> 8), (uint8_t) product, (uint8_t) (product >> 8), (uint8_t) version, (uint8_t) (version >> 8)); } else { sprintf(guid, "05000000%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x00", name[0], name[1], name[2], name[3], name[4], name[5], name[6], name[7], name[8], name[9], name[10]); } CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone); for (i = 0; i < CFArrayGetCount(elements); i++) { IOHIDElementRef native = (IOHIDElementRef) CFArrayGetValueAtIndex(elements, i); if (CFGetTypeID(native) != IOHIDElementGetTypeID()) continue; const IOHIDElementType type = IOHIDElementGetType(native); if ((type != kIOHIDElementTypeInput_Axis) && (type != kIOHIDElementTypeInput_Button) && (type != kIOHIDElementTypeInput_Misc)) { continue; } CFMutableArrayRef target = NULL; const uint32_t usage = IOHIDElementGetUsage(native); const uint32_t page = IOHIDElementGetUsagePage(native); if (page == kHIDPage_GenericDesktop) { switch (usage) { case kHIDUsage_GD_X: case kHIDUsage_GD_Y: case kHIDUsage_GD_Z: case kHIDUsage_GD_Rx: case kHIDUsage_GD_Ry: case kHIDUsage_GD_Rz: case kHIDUsage_GD_Slider: case kHIDUsage_GD_Dial: case kHIDUsage_GD_Wheel: target = axes; break; case kHIDUsage_GD_Hatswitch: target = hats; break; case kHIDUsage_GD_DPadUp: case kHIDUsage_GD_DPadRight: case kHIDUsage_GD_DPadDown: case kHIDUsage_GD_DPadLeft: case kHIDUsage_GD_SystemMainMenu: case kHIDUsage_GD_Select: case kHIDUsage_GD_Start: target = buttons; break; } } else if (page == kHIDPage_Button || page == kHIDPage_Consumer) target = buttons; if (target) { _GLFWjoyelementNS* element = calloc(1, sizeof(_GLFWjoyelementNS)); element->native = native; element->usage = usage; element->index = (int) CFArrayGetCount(target); element->minimum = IOHIDElementGetLogicalMin(native); element->maximum = IOHIDElementGetLogicalMax(native); CFArrayAppendValue(target, element); } } CFRelease(elements); CFArraySortValues(axes, CFRangeMake(0, CFArrayGetCount(axes)), compareElements, NULL); CFArraySortValues(buttons, CFRangeMake(0, CFArrayGetCount(buttons)), compareElements, NULL); CFArraySortValues(hats, CFRangeMake(0, CFArrayGetCount(hats)), compareElements, NULL); js = _glfwAllocJoystick(name, guid, (int) CFArrayGetCount(axes), (int) CFArrayGetCount(buttons), (int) CFArrayGetCount(hats)); js->ns.device = device; js->ns.axes = axes; js->ns.buttons = buttons; js->ns.hats = hats; _glfwInputJoystick(js, GLFW_CONNECTED); } // Callback for user-initiated joystick removal // static void removeCallback(void* context UNUSED, IOReturn result UNUSED, void* sender UNUSED, IOHIDDeviceRef device) { int jid; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { if (_glfw.joysticks[jid].ns.device == device) { closeJoystick(_glfw.joysticks + jid); break; } } } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialize joystick interface // void _glfwInitJoysticksNS(void) { CFMutableArrayRef matching; const long usages[] = { kHIDUsage_GD_Joystick, kHIDUsage_GD_GamePad, kHIDUsage_GD_MultiAxisController }; _glfw.ns.hidManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); matching = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); if (!matching) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create array"); return; } for (size_t i = 0; i < sizeof(usages) / sizeof(long); i++) { const long page = kHIDPage_GenericDesktop; CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); if (!dict) continue; CFNumberRef pageRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberLongType, &page); CFNumberRef usageRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberLongType, &usages[i]); if (pageRef && usageRef) { CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsagePageKey), pageRef); CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsageKey), usageRef); CFArrayAppendValue(matching, dict); } if (pageRef) CFRelease(pageRef); if (usageRef) CFRelease(usageRef); CFRelease(dict); } IOHIDManagerSetDeviceMatchingMultiple(_glfw.ns.hidManager, matching); CFRelease(matching); IOHIDManagerRegisterDeviceMatchingCallback(_glfw.ns.hidManager, &matchCallback, NULL); IOHIDManagerRegisterDeviceRemovalCallback(_glfw.ns.hidManager, &removeCallback, NULL); IOHIDManagerScheduleWithRunLoop(_glfw.ns.hidManager, CFRunLoopGetMain(), kCFRunLoopDefaultMode); IOHIDManagerOpen(_glfw.ns.hidManager, kIOHIDOptionsTypeNone); // Execute the run loop once in order to register any initially-attached // joysticks CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, false); } // Close all opened joystick handles // void _glfwTerminateJoysticksNS(void) { int jid; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) closeJoystick(_glfw.joysticks + jid); CFRelease(_glfw.ns.hidManager); _glfw.ns.hidManager = NULL; } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode) { if (mode & _GLFW_POLL_AXES) { CFIndex i; for (i = 0; i < CFArrayGetCount(js->ns.axes); i++) { _GLFWjoyelementNS* axis = (_GLFWjoyelementNS*) CFArrayGetValueAtIndex(js->ns.axes, i); const long raw = getElementValue(js, axis); // Perform auto calibration if (raw < axis->minimum) axis->minimum = raw; if (raw > axis->maximum) axis->maximum = raw; const long size = axis->maximum - axis->minimum; if (size == 0) _glfwInputJoystickAxis(js, (int) i, 0.f); else { const float value = (2.f * (raw - axis->minimum) / size) - 1.f; _glfwInputJoystickAxis(js, (int) i, value); } } } if (mode & _GLFW_POLL_BUTTONS) { CFIndex i; for (i = 0; i < CFArrayGetCount(js->ns.buttons); i++) { _GLFWjoyelementNS* button = (_GLFWjoyelementNS*) CFArrayGetValueAtIndex(js->ns.buttons, i); const char value = getElementValue(js, button) - button->minimum; const int state = (value > 0) ? GLFW_PRESS : GLFW_RELEASE; _glfwInputJoystickButton(js, (int) i, state); } for (i = 0; i < CFArrayGetCount(js->ns.hats); i++) { const int states[9] = { GLFW_HAT_UP, GLFW_HAT_RIGHT_UP, GLFW_HAT_RIGHT, GLFW_HAT_RIGHT_DOWN, GLFW_HAT_DOWN, GLFW_HAT_LEFT_DOWN, GLFW_HAT_LEFT, GLFW_HAT_LEFT_UP, GLFW_HAT_CENTERED }; _GLFWjoyelementNS* hat = (_GLFWjoyelementNS*) CFArrayGetValueAtIndex(js->ns.hats, i); long state = getElementValue(js, hat) - hat->minimum; if (state < 0 || state > 8) state = 8; _glfwInputJoystickHat(js, (int) i, states[state]); } } return js->present; } void _glfwPlatformUpdateGamepadGUID(char* guid) { if ((strncmp(guid + 4, "000000000000", 12) == 0) && (strncmp(guid + 20, "000000000000", 12) == 0)) { char original[33]; strncpy(original, guid, sizeof(original) - 1); sprintf(guid, "03000000%.4s0000%.4s000000000000", original, original + 16); } } kitty-0.15.0/glfw/cocoa_monitor.m000066400000000000000000000442061356737523400167360ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #include #include #include #include // Get the name of the specified display, or NULL // static char* getDisplayName(CGDirectDisplayID displayID) { io_iterator_t it; io_service_t service; CFDictionaryRef info; if (IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"), &it) != 0) { // This may happen if a desktop Mac is running headless return NULL; } while ((service = IOIteratorNext(it)) != 0) { info = IODisplayCreateInfoDictionary(service, kIODisplayOnlyPreferredName); CFNumberRef vendorIDRef = CFDictionaryGetValue(info, CFSTR(kDisplayVendorID)); CFNumberRef productIDRef = CFDictionaryGetValue(info, CFSTR(kDisplayProductID)); if (!vendorIDRef || !productIDRef) { CFRelease(info); continue; } unsigned int vendorID, productID; CFNumberGetValue(vendorIDRef, kCFNumberIntType, &vendorID); CFNumberGetValue(productIDRef, kCFNumberIntType, &productID); if (CGDisplayVendorNumber(displayID) == vendorID && CGDisplayModelNumber(displayID) == productID) { // Info dictionary is used and freed below break; } CFRelease(info); } IOObjectRelease(it); if (!service) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to find service port for display"); return NULL; } CFDictionaryRef names = CFDictionaryGetValue(info, CFSTR(kDisplayProductName)); CFStringRef nameRef; if (!names || !CFDictionaryGetValueIfPresent(names, CFSTR("en_US"), (const void**) &nameRef)) { // This may happen if a desktop Mac is running headless CFRelease(info); return NULL; } const CFIndex size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(nameRef), kCFStringEncodingUTF8); char* name = calloc(size + 1, 1); CFStringGetCString(nameRef, name, size, kCFStringEncodingUTF8); CFRelease(info); return name; } // Check whether the display mode should be included in enumeration // static bool modeIsGood(CGDisplayModeRef mode) { uint32_t flags = CGDisplayModeGetIOFlags(mode); if (!(flags & kDisplayModeValidFlag) || !(flags & kDisplayModeSafeFlag)) return false; if (flags & kDisplayModeInterlacedFlag) return false; if (flags & kDisplayModeStretchedFlag) return false; #if MAC_OS_X_VERSION_MAX_ALLOWED <= 101100 CFStringRef format = CGDisplayModeCopyPixelEncoding(mode); if (CFStringCompare(format, CFSTR(IO16BitDirectPixels), 0) && CFStringCompare(format, CFSTR(IO32BitDirectPixels), 0)) { CFRelease(format); return false; } CFRelease(format); #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ return true; } // Convert Core Graphics display mode to GLFW video mode // static GLFWvidmode vidmodeFromCGDisplayMode(CGDisplayModeRef mode, CVDisplayLinkRef link) { GLFWvidmode result; result.width = (int) CGDisplayModeGetWidth(mode); result.height = (int) CGDisplayModeGetHeight(mode); result.refreshRate = (int) round(CGDisplayModeGetRefreshRate(mode)); if (result.refreshRate == 0) { const CVTime time = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link); if (!(time.flags & kCVTimeIsIndefinite)) result.refreshRate = (int) (time.timeScale / (double) time.timeValue); } #if MAC_OS_X_VERSION_MAX_ALLOWED <= 101100 CFStringRef format = CGDisplayModeCopyPixelEncoding(mode); if (CFStringCompare(format, CFSTR(IO16BitDirectPixels), 0) == 0) { result.redBits = 5; result.greenBits = 5; result.blueBits = 5; } else #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ { result.redBits = 8; result.greenBits = 8; result.blueBits = 8; } #if MAC_OS_X_VERSION_MAX_ALLOWED <= 101100 CFRelease(format); #endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ return result; } // Starts reservation for display fading // static CGDisplayFadeReservationToken beginFadeReservation(void) { CGDisplayFadeReservationToken token = kCGDisplayFadeReservationInvalidToken; if (CGAcquireDisplayFadeReservation(5, &token) == kCGErrorSuccess) { CGDisplayFade(token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE); } return token; } // Ends reservation for display fading // static void endFadeReservation(CGDisplayFadeReservationToken token) { if (token != kCGDisplayFadeReservationInvalidToken) { CGDisplayFade(token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE); CGReleaseDisplayFadeReservation(token); } } // Finds and caches the NSScreen corresponding to the specified monitor // static bool refreshMonitorScreen(_GLFWmonitor* monitor) { if (monitor->ns.screen) return true; for (NSScreen* screen in [NSScreen screens]) { NSNumber* displayID = [screen deviceDescription][@"NSScreenNumber"]; // HACK: Compare unit numbers instead of display IDs to work around // display replacement on machines with automatic graphics // switching if (monitor->ns.unitNumber == CGDisplayUnitNumber([displayID unsignedIntValue])) { monitor->ns.screen = screen; return true; } } _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to find a screen for monitor"); return false; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// void _glfwClearDisplayLinks() { for (size_t i = 0; i < _glfw.ns.displayLinks.count; i++) { if (_glfw.ns.displayLinks.entries[i].displayLink) { CVDisplayLinkStop(_glfw.ns.displayLinks.entries[i].displayLink); CVDisplayLinkRelease(_glfw.ns.displayLinks.entries[i].displayLink); _glfw.ns.displayLinks.entries[i].displayLink = nil; _glfw.ns.displayLinks.entries[i].lastRenderFrameRequestedAt = 0; } } _glfw.ns.displayLinks.count = 0; } static CVReturn displayLinkCallback( CVDisplayLinkRef displayLink UNUSED, const CVTimeStamp* now UNUSED, const CVTimeStamp* outputTime UNUSED, CVOptionFlags flagsIn UNUSED, CVOptionFlags* flagsOut UNUSED, void* userInfo) { CGDirectDisplayID displayID = (CGDirectDisplayID)userInfo; NSNumber *arg = [NSNumber numberWithUnsignedInt:displayID]; [NSApp performSelectorOnMainThread:@selector(render_frame_received:) withObject:arg waitUntilDone:NO]; [arg release]; return kCVReturnSuccess; } static inline void createDisplayLink(CGDirectDisplayID displayID) { if (_glfw.ns.displayLinks.count >= sizeof(_glfw.ns.displayLinks.entries)/sizeof(_glfw.ns.displayLinks.entries[0]) - 1) return; for (size_t i = 0; i < _glfw.ns.displayLinks.count; i++) { if (_glfw.ns.displayLinks.entries[i].displayID == displayID) return; } _GLFWDisplayLinkNS *entry = &_glfw.ns.displayLinks.entries[_glfw.ns.displayLinks.count++]; memset(entry, 0, sizeof(_GLFWDisplayLinkNS)); entry->displayID = displayID; CVDisplayLinkCreateWithCGDisplay(displayID, &entry->displayLink); CVDisplayLinkSetOutputCallback(entry->displayLink, &displayLinkCallback, (void*)(uintptr_t)displayID); } // Poll for changes in the set of connected monitors // void _glfwPollMonitorsNS(void) { uint32_t displayCount; CGGetOnlineDisplayList(0, NULL, &displayCount); CGDirectDisplayID* displays = calloc(displayCount, sizeof(CGDirectDisplayID)); CGGetOnlineDisplayList(displayCount, displays, &displayCount); _glfwClearDisplayLinks(); for (int i = 0; i < _glfw.monitorCount; i++) _glfw.monitors[i]->ns.screen = nil; _GLFWmonitor** disconnected = NULL; uint32_t disconnectedCount = _glfw.monitorCount; if (disconnectedCount) { disconnected = calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*)); memcpy(disconnected, _glfw.monitors, _glfw.monitorCount * sizeof(_GLFWmonitor*)); } for (uint32_t i = 0; i < displayCount; i++) { if (CGDisplayIsAsleep(displays[i])) continue; // HACK: Compare unit numbers instead of display IDs to work around // display replacement on machines with automatic graphics // switching const uint32_t unitNumber = CGDisplayUnitNumber(displays[i]); for (uint32_t j = 0; j < disconnectedCount; j++) { if (disconnected[j] && disconnected[j]->ns.unitNumber == unitNumber) { disconnected[j] = NULL; break; } } const CGSize size = CGDisplayScreenSize(displays[i]); char* name = getDisplayName(displays[i]); if (!name) name = _glfw_strdup("Unknown"); _GLFWmonitor* monitor = _glfwAllocMonitor(name, (int)size.width, (int)size.height); monitor->ns.displayID = displays[i]; monitor->ns.unitNumber = unitNumber; createDisplayLink(monitor->ns.displayID); free(name); _glfwInputMonitor(monitor, GLFW_CONNECTED, _GLFW_INSERT_LAST); } for (uint32_t i = 0; i < disconnectedCount; i++) { if (disconnected[i]) _glfwInputMonitor(disconnected[i], GLFW_DISCONNECTED, 0); } free(disconnected); free(displays); _glfwRestartDisplayLinks(); } // Change the current video mode // void _glfwSetVideoModeNS(_GLFWmonitor* monitor, const GLFWvidmode* desired) { GLFWvidmode current; _glfwPlatformGetVideoMode(monitor, ¤t); const GLFWvidmode* best = _glfwChooseVideoMode(monitor, desired); if (_glfwCompareVideoModes(¤t, best) == 0) return; CVDisplayLinkRef link; CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link); CFArrayRef modes = CGDisplayCopyAllDisplayModes(monitor->ns.displayID, NULL); const CFIndex count = CFArrayGetCount(modes); CGDisplayModeRef native = NULL; for (CFIndex i = 0; i < count; i++) { CGDisplayModeRef dm = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i); if (!modeIsGood(dm)) continue; const GLFWvidmode mode = vidmodeFromCGDisplayMode(dm, link); if (_glfwCompareVideoModes(best, &mode) == 0) { native = dm; break; } } if (native) { if (monitor->ns.previousMode == NULL) monitor->ns.previousMode = CGDisplayCopyDisplayMode(monitor->ns.displayID); CGDisplayFadeReservationToken token = beginFadeReservation(); CGDisplaySetDisplayMode(monitor->ns.displayID, native, NULL); endFadeReservation(token); } CFRelease(modes); CVDisplayLinkRelease(link); } // Restore the previously saved (original) video mode // void _glfwRestoreVideoModeNS(_GLFWmonitor* monitor) { if (monitor->ns.previousMode) { CGDisplayFadeReservationToken token = beginFadeReservation(); CGDisplaySetDisplayMode(monitor->ns.displayID, monitor->ns.previousMode, NULL); endFadeReservation(token); CGDisplayModeRelease(monitor->ns.previousMode); monitor->ns.previousMode = NULL; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor UNUSED) { } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) { const CGRect bounds = CGDisplayBounds(monitor->ns.displayID); if (xpos) *xpos = (int) bounds.origin.x; if (ypos) *ypos = (int) bounds.origin.y; } void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, float* xscale, float* yscale) { if (!refreshMonitorScreen(monitor)) return; const NSRect points = [monitor->ns.screen frame]; const NSRect pixels = [monitor->ns.screen convertRectToBacking:points]; if (xscale) *xscale = (float) (pixels.size.width / points.size.width); if (yscale) *yscale = (float) (pixels.size.height / points.size.height); } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height) { if (!refreshMonitorScreen(monitor)) return; const NSRect frameRect = [monitor->ns.screen visibleFrame]; if (xpos) *xpos = (int)frameRect.origin.x; if (ypos) *ypos = (int)_glfwTransformYNS(frameRect.origin.y + frameRect.size.height - 1); if (width) *width = (int)frameRect.size.width; if (height) *height = (int)frameRect.size.height; } GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) { *count = 0; CVDisplayLinkRef link; CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link); CFArrayRef modes = CGDisplayCopyAllDisplayModes(monitor->ns.displayID, NULL); const CFIndex found = CFArrayGetCount(modes); GLFWvidmode* result = calloc(found, sizeof(GLFWvidmode)); for (CFIndex i = 0; i < found; i++) { CGDisplayModeRef dm = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i); if (!modeIsGood(dm)) continue; const GLFWvidmode mode = vidmodeFromCGDisplayMode(dm, link); for (CFIndex j = 0; j < *count; j++) { if (_glfwCompareVideoModes(result + j, &mode) == 0) break; } // Skip duplicate modes if (i < *count) continue; (*count)++; result[*count - 1] = mode; } CFRelease(modes); CVDisplayLinkRelease(link); return result; } void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode *mode) { CVDisplayLinkRef link; CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link); CGDisplayModeRef native = CGDisplayCopyDisplayMode(monitor->ns.displayID); *mode = vidmodeFromCGDisplayMode(native, link); CGDisplayModeRelease(native); CVDisplayLinkRelease(link); } bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp) { uint32_t size = CGDisplayGammaTableCapacity(monitor->ns.displayID); CGGammaValue* values = calloc(size * 3, sizeof(CGGammaValue)); CGGetDisplayTransferByTable(monitor->ns.displayID, size, values, values + size, values + size * 2, &size); _glfwAllocGammaArrays(ramp, size); for (uint32_t i = 0; i < size; i++) { ramp->red[i] = (unsigned short) (values[i] * 65535); ramp->green[i] = (unsigned short) (values[i + size] * 65535); ramp->blue[i] = (unsigned short) (values[i + size * 2] * 65535); } free(values); return true; } void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp) { CGGammaValue* values = calloc(ramp->size * 3, sizeof(CGGammaValue)); for (unsigned int i = 0; i < ramp->size; i++) { values[i] = ramp->red[i] / 65535.f; values[i + ramp->size] = ramp->green[i] / 65535.f; values[i + ramp->size * 2] = ramp->blue[i] / 65535.f; } CGSetDisplayTransferByTable(monitor->ns.displayID, ramp->size, values, values + ramp->size, values + ramp->size * 2); free(values); } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(kCGNullDirectDisplay); return monitor->ns.displayID; } kitty-0.15.0/glfw/cocoa_platform.h000066400000000000000000000204101356737523400170550ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include #if defined(__OBJC__) #import #import #else typedef void* id; typedef void* CVDisplayLinkRef; #endif // NOTE: Many Cocoa enum values have been renamed and we need to build across // SDK versions where one is unavailable or the other deprecated // We use the newer names in code and these macros to handle compatibility #if MAC_OS_X_VERSION_MAX_ALLOWED < 101200 #define NSBitmapFormatAlphaNonpremultiplied NSAlphaNonpremultipliedBitmapFormat #define NSEventMaskAny NSAnyEventMask #define NSEventMaskKeyUp NSKeyUpMask #define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask #define NSEventModifierFlagCommand NSCommandKeyMask #define NSEventModifierFlagControl NSControlKeyMask #define NSEventModifierFlagDeviceIndependentFlagsMask NSDeviceIndependentModifierFlagsMask #define NSEventModifierFlagOption NSAlternateKeyMask #define NSEventModifierFlagShift NSShiftKeyMask #define NSEventTypeApplicationDefined NSApplicationDefined #define NSWindowStyleMaskBorderless NSBorderlessWindowMask #define NSWindowStyleMaskClosable NSClosableWindowMask #define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask #define NSWindowStyleMaskResizable NSResizableWindowMask #define NSWindowStyleMaskTitled NSTitledWindowMask #endif #if (MAC_OS_X_VERSION_MAX_ALLOWED < 101400) #define NSPasteboardTypeFileURL NSFilenamesPboardType #define NSBitmapFormatAlphaNonpremultiplied NSAlphaNonpremultipliedBitmapFormat #define NSPasteboardTypeString NSStringPboardType #define NSOpenGLContextParameterSurfaceOpacity NSOpenGLCPSurfaceOpacity #endif typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; typedef int (* GLFWcocoatextinputfilterfun)(int,int,unsigned int, unsigned long); typedef bool (* GLFWapplicationshouldhandlereopenfun)(int); typedef void (* GLFWapplicationwillfinishlaunchingfun)(void); typedef bool (* GLFWcocoatogglefullscreenfun)(GLFWwindow*); typedef void (* GLFWcocoarenderframefun)(GLFWwindow*); typedef struct VkMacOSSurfaceCreateInfoMVK { VkStructureType sType; const void* pNext; VkMacOSSurfaceCreateFlagsMVK flags; const void* pView; } VkMacOSSurfaceCreateInfoMVK; typedef VkResult (APIENTRY *PFN_vkCreateMacOSSurfaceMVK)(VkInstance,const VkMacOSSurfaceCreateInfoMVK*,const VkAllocationCallbacks*,VkSurfaceKHR*); #include "posix_thread.h" #include "cocoa_joystick.h" #include "nsgl_context.h" #include "egl_context.h" #include "osmesa_context.h" #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL) #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->ns.view) #define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNS ns #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryNS ns #define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerNS ns #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorNS ns #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorNS ns // HIToolbox.framework pointer typedefs #define kTISPropertyUnicodeKeyLayoutData _glfw.ns.tis.kPropertyUnicodeKeyLayoutData typedef TISInputSourceRef (*PFN_TISCopyCurrentKeyboardLayoutInputSource)(void); #define TISCopyCurrentKeyboardLayoutInputSource _glfw.ns.tis.CopyCurrentKeyboardLayoutInputSource typedef void* (*PFN_TISGetInputSourceProperty)(TISInputSourceRef,CFStringRef); #define TISGetInputSourceProperty _glfw.ns.tis.GetInputSourceProperty typedef UInt8 (*PFN_LMGetKbdType)(void); #define LMGetKbdType _glfw.ns.tis.GetKbdType // Cocoa-specific per-window data // typedef struct _GLFWwindowNS { id object; id delegate; id view; id layer; bool maximized; bool retina; // Cached window properties to filter out duplicate events int width, height; int fbWidth, fbHeight; float xscale, yscale; // The total sum of the distances the cursor has been warped // since the last cursor motion event was processed // This is kept to counteract Cocoa doing the same internally double cursorWarpDeltaX, cursorWarpDeltaY; // The text input filter callback GLFWcocoatextinputfilterfun textInputFilterCallback; // The toggle fullscreen intercept callback GLFWcocoatogglefullscreenfun toggleFullscreenCallback; // Dead key state UInt32 deadKeyState; // Whether a render frame has been requested for this window bool renderFrameRequested; GLFWcocoarenderframefun renderFrameCallback; } _GLFWwindowNS; typedef struct _GLFWDisplayLinkNS { CVDisplayLinkRef displayLink; CGDirectDisplayID displayID; monotonic_t lastRenderFrameRequestedAt; } _GLFWDisplayLinkNS; // Cocoa-specific global data // typedef struct _GLFWlibraryNS { CGEventSourceRef eventSource; id delegate; bool finishedLaunching; bool cursorHidden; TISInputSourceRef inputSource; IOHIDManagerRef hidManager; id unicodeData; id helper; id keyUpMonitor; id keyDownMonitor; id nibObjects; char keyName[64]; char text[256]; short int keycodes[256]; short int key_to_keycode[GLFW_KEY_LAST + 1]; char* clipboardString; CGPoint cascadePoint; // Where to place the cursor when re-enabled double restoreCursorPosX, restoreCursorPosY; // The window whose disabled cursor mode is active _GLFWwindow* disabledCursorWindow; struct { CFBundleRef bundle; PFN_TISCopyCurrentKeyboardLayoutInputSource CopyCurrentKeyboardLayoutInputSource; PFN_TISGetInputSourceProperty GetInputSourceProperty; PFN_LMGetKbdType GetKbdType; CFStringRef kPropertyUnicodeKeyLayoutData; } tis; struct { _GLFWDisplayLinkNS entries[256]; size_t count; } displayLinks; } _GLFWlibraryNS; // Cocoa-specific per-monitor data // typedef struct _GLFWmonitorNS { CGDirectDisplayID displayID; CGDisplayModeRef previousMode; uint32_t unitNumber; id screen; } _GLFWmonitorNS; // Cocoa-specific per-cursor data // typedef struct _GLFWcursorNS { id object; } _GLFWcursorNS; // Cocoa-specific global timer data // typedef struct _GLFWtimerNS { uint64_t frequency; } _GLFWtimerNS; void _glfwInitTimerNS(void); void _glfwPollMonitorsNS(void); void _glfwSetVideoModeNS(_GLFWmonitor* monitor, const GLFWvidmode* desired); void _glfwRestoreVideoModeNS(_GLFWmonitor* monitor); float _glfwTransformYNS(float y); void _glfwClearDisplayLinks(void); void _glfwRestartDisplayLinks(void); void _glfwDispatchTickCallback(void); void _glfwDispatchRenderFrame(CGDirectDisplayID); void _glfwShutdownCVDisplayLink(unsigned long long, void*); void _glfwCocoaPostEmptyEvent(void); kitty-0.15.0/glfw/cocoa_time.c000066400000000000000000000042721356737523400161720ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2016 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialise timer // void _glfwInitTimerNS(void) { mach_timebase_info_data_t info; mach_timebase_info(&info); _glfw.timer.ns.frequency = (unsigned long long)((info.denom * 1e9) / info.numer); } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// uint64_t _glfwPlatformGetTimerValue(void) { return mach_absolute_time(); } uint64_t _glfwPlatformGetTimerFrequency(void) { return _glfw.timer.ns.frequency; } kitty-0.15.0/glfw/cocoa_window.m000066400000000000000000002310451356737523400165550ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include "../kitty/monotonic.h" #include #include #define PARAGRAPH_UTF_8 0xc2a7 // § #define MASCULINE_UTF_8 0xc2ba // º #define A_DIAERESIS_UPPER_CASE_UTF_8 0xc384 // Ä #define O_DIAERESIS_UPPER_CASE_UTF_8 0xc396 // Ö #define U_DIAERESIS_UPPER_CASE_UTF_8 0xc39c // Ü #define S_SHARP_UTF_8 0xc39f // ß #define A_GRAVE_LOWER_CASE_UTF_8 0xc3a0 // à #define A_DIAERESIS_LOWER_CASE_UTF_8 0xc3a4 // ä #define A_RING_LOWER_CASE_UTF_8 0xc3a5 // Ã¥ #define AE_LOWER_CASE_UTF_8 0xc3a6 // æ #define C_CEDILLA_LOWER_CASE_UTF_8 0xc3a7 // ç #define E_GRAVE_LOWER_CASE_UTF_8 0xc3a8 // è #define E_ACUTE_LOWER_CASE_UTF_8 0xc3a9 // é #define I_GRAVE_LOWER_CASE_UTF_8 0xc3ac // ì #define N_TILDE_LOWER_CASE_UTF_8 0xc3b1 // ñ #define O_GRAVE_LOWER_CASE_UTF_8 0xc3b2 // ò #define O_DIAERESIS_LOWER_CASE_UTF_8 0xc3b6 // ö #define O_SLASH_LOWER_CASE_UTF_8 0xc3b8 // ø #define U_GRAVE_LOWER_CASE_UTF_8 0xc3b9 // ù #define U_DIAERESIS_LOWER_CASE_UTF_8 0xc3bc // ü #define CYRILLIC_A_LOWER_CASE_UTF_8 0xd0b0 // а #define CYRILLIC_BE_LOWER_CASE_UTF_8 0xd0b1 // б #define CYRILLIC_VE_LOWER_CASE_UTF_8 0xd0b2 // в #define CYRILLIC_GHE_LOWER_CASE_UTF_8 0xd0b3 // г #define CYRILLIC_DE_LOWER_CASE_UTF_8 0xd0b4 // д #define CYRILLIC_IE_LOWER_CASE_UTF_8 0xd0b5 // е #define CYRILLIC_ZHE_LOWER_CASE_UTF_8 0xd0b6 // ж #define CYRILLIC_ZE_LOWER_CASE_UTF_8 0xd0b7 // з #define CYRILLIC_I_LOWER_CASE_UTF_8 0xd0b8 // и #define CYRILLIC_SHORT_I_LOWER_CASE_UTF_8 0xd0b9 // й #define CYRILLIC_KA_LOWER_CASE_UTF_8 0xd0ba // к #define CYRILLIC_EL_LOWER_CASE_UTF_8 0xd0bb // л #define CYRILLIC_EM_LOWER_CASE_UTF_8 0xd0bc // м #define CYRILLIC_EN_LOWER_CASE_UTF_8 0xd0bd // н #define CYRILLIC_O_LOWER_CASE_UTF_8 0xd0be // о #define CYRILLIC_PE_LOWER_CASE_UTF_8 0xd0bf // п #define CYRILLIC_ER_LOWER_CASE_UTF_8 0xd180 // Ñ€ #define CYRILLIC_ES_LOWER_CASE_UTF_8 0xd181 // Ñ #define CYRILLIC_TE_LOWER_CASE_UTF_8 0xd182 // Ñ‚ #define CYRILLIC_U_LOWER_CASE_UTF_8 0xd183 // у #define CYRILLIC_EF_LOWER_CASE_UTF_8 0xd184 // Ñ„ #define CYRILLIC_HA_LOWER_CASE_UTF_8 0xd185 // Ñ… #define CYRILLIC_TSE_LOWER_CASE_UTF_8 0xd186 // ц #define CYRILLIC_CHE_LOWER_CASE_UTF_8 0xd187 // ч #define CYRILLIC_SHA_LOWER_CASE_UTF_8 0xd188 // ш #define CYRILLIC_SHCHA_LOWER_CASE_UTF_8 0xd189 // щ #define CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8 0xd18a // ÑŠ #define CYRILLIC_YERU_LOWER_CASE_UTF_8 0xd18b // Ñ‹ #define CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8 0xd18c // ÑŒ #define CYRILLIC_E_LOWER_CASE_UTF_8 0xd18d // Ñ #define CYRILLIC_YU_LOWER_CASE_UTF_8 0xd18e // ÑŽ #define CYRILLIC_YA_LOWER_CASE_UTF_8 0xd18f // Ñ #define CYRILLIC_IO_LOWER_CASE_UTF_8 0xd191 // Ñ‘ // Returns the style mask corresponding to the window settings // static NSUInteger getStyleMask(_GLFWwindow* window) { NSUInteger styleMask = NSWindowStyleMaskMiniaturizable; if (window->monitor || !window->decorated) styleMask |= NSWindowStyleMaskBorderless; else { styleMask |= NSWindowStyleMaskTitled | NSWindowStyleMaskClosable; if (window->resizable) styleMask |= NSWindowStyleMaskResizable; } return styleMask; } CGDirectDisplayID displayIDForWindow(_GLFWwindow *w) { NSWindow *nw = w->ns.object; NSDictionary *dict = [nw.screen deviceDescription]; NSNumber *displayIDns = dict[@"NSScreenNumber"]; if (displayIDns) return [displayIDns unsignedIntValue]; return (CGDirectDisplayID)-1; } static unsigned long long display_link_shutdown_timer = 0; #define DISPLAY_LINK_SHUTDOWN_CHECK_INTERVAL s_to_monotonic_t(30ll) void _glfwShutdownCVDisplayLink(unsigned long long timer_id UNUSED, void *user_data UNUSED) { display_link_shutdown_timer = 0; for (size_t i = 0; i < _glfw.ns.displayLinks.count; i++) { _GLFWDisplayLinkNS *dl = &_glfw.ns.displayLinks.entries[i]; if (dl->displayLink) CVDisplayLinkStop(dl->displayLink); dl->lastRenderFrameRequestedAt = 0; } } static inline void requestRenderFrame(_GLFWwindow *w, GLFWcocoarenderframefun callback) { if (!callback) { w->ns.renderFrameRequested = false; w->ns.renderFrameCallback = NULL; return; } w->ns.renderFrameCallback = callback; w->ns.renderFrameRequested = true; CGDirectDisplayID displayID = displayIDForWindow(w); if (display_link_shutdown_timer) { _glfwPlatformUpdateTimer(display_link_shutdown_timer, DISPLAY_LINK_SHUTDOWN_CHECK_INTERVAL, true); } else { display_link_shutdown_timer = _glfwPlatformAddTimer(DISPLAY_LINK_SHUTDOWN_CHECK_INTERVAL, false, _glfwShutdownCVDisplayLink, NULL, NULL); } monotonic_t now = glfwGetTime(); for (size_t i = 0; i < _glfw.ns.displayLinks.count; i++) { _GLFWDisplayLinkNS *dl = &_glfw.ns.displayLinks.entries[i]; if (dl->displayID == displayID) { dl->lastRenderFrameRequestedAt = now; if (!CVDisplayLinkIsRunning(dl->displayLink)) CVDisplayLinkStart(dl->displayLink); } else if (dl->displayLink && dl->lastRenderFrameRequestedAt && now - dl->lastRenderFrameRequestedAt >= DISPLAY_LINK_SHUTDOWN_CHECK_INTERVAL) { CVDisplayLinkStop(dl->displayLink); dl->lastRenderFrameRequestedAt = 0; } } } void _glfwRestartDisplayLinks(void) { _GLFWwindow* window; for (window = _glfw.windowListHead; window; window = window->next) { if (window->ns.renderFrameRequested && window->ns.renderFrameCallback) { requestRenderFrame(window, window->ns.renderFrameCallback); } } } // Returns whether the cursor is in the content area of the specified window // static bool cursorInContentArea(_GLFWwindow* window) { const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream]; return [window->ns.view mouse:pos inRect:[window->ns.view frame]]; } // Hides the cursor if not already hidden // static void hideCursor(_GLFWwindow* window UNUSED) { if (!_glfw.ns.cursorHidden) { [NSCursor hide]; _glfw.ns.cursorHidden = true; } } // Shows the cursor if not already shown // static void showCursor(_GLFWwindow* window UNUSED) { if (_glfw.ns.cursorHidden) { [NSCursor unhide]; _glfw.ns.cursorHidden = false; } } // Updates the cursor image according to its cursor mode // static void updateCursorImage(_GLFWwindow* window) { if (window->cursorMode == GLFW_CURSOR_NORMAL) { showCursor(window); if (window->cursor) [(NSCursor*) window->cursor->ns.object set]; else [[NSCursor arrowCursor] set]; } else hideCursor(window); } // Apply chosen cursor mode to a focused window // static void updateCursorMode(_GLFWwindow* window) { if (window->cursorMode == GLFW_CURSOR_DISABLED) { _glfw.ns.disabledCursorWindow = window; _glfwPlatformGetCursorPos(window, &_glfw.ns.restoreCursorPosX, &_glfw.ns.restoreCursorPosY); _glfwCenterCursorInContentArea(window); CGAssociateMouseAndMouseCursorPosition(false); } else if (_glfw.ns.disabledCursorWindow == window) { _glfw.ns.disabledCursorWindow = NULL; CGAssociateMouseAndMouseCursorPosition(true); _glfwPlatformSetCursorPos(window, _glfw.ns.restoreCursorPosX, _glfw.ns.restoreCursorPosY); } if (cursorInContentArea(window)) updateCursorImage(window); } // Make the specified window and its video mode active on its monitor // static void acquireMonitor(_GLFWwindow* window) { _glfwSetVideoModeNS(window->monitor, &window->videoMode); const CGRect bounds = CGDisplayBounds(window->monitor->ns.displayID); const NSRect frame = NSMakeRect(bounds.origin.x, _glfwTransformYNS(bounds.origin.y + bounds.size.height - 1), bounds.size.width, bounds.size.height); [window->ns.object setFrame:frame display:YES]; _glfwInputMonitorWindow(window->monitor, window); } // Remove the window and restore the original video mode // static void releaseMonitor(_GLFWwindow* window) { if (window->monitor->window != window) return; _glfwInputMonitorWindow(window->monitor, NULL); _glfwRestoreVideoModeNS(window->monitor); } // Translates macOS key modifiers into GLFW ones // static int translateFlags(NSUInteger flags) { int mods = 0; if (flags & NSEventModifierFlagShift) mods |= GLFW_MOD_SHIFT; if (flags & NSEventModifierFlagControl) mods |= GLFW_MOD_CONTROL; if (flags & NSEventModifierFlagOption) mods |= GLFW_MOD_ALT; if (flags & NSEventModifierFlagCommand) mods |= GLFW_MOD_SUPER; if (flags & NSEventModifierFlagCapsLock) mods |= GLFW_MOD_CAPS_LOCK; return mods; } #define debug_key(...) if (_glfw.hints.init.debugKeyboard) NSLog(__VA_ARGS__) static inline const char* format_mods(int mods) { static char buf[128]; char *p = buf, *s; #define pr(x) p += snprintf(p, sizeof(buf) - (p - buf) - 1, x) pr("mods: "); s = p; if (mods & GLFW_MOD_CONTROL) pr("ctrl+"); if (mods & GLFW_MOD_ALT) pr("alt+"); if (mods & GLFW_MOD_SHIFT) pr("shift+"); if (mods & GLFW_MOD_SUPER) pr("super+"); if (mods & GLFW_MOD_CAPS_LOCK) pr("capslock+"); if (mods & GLFW_MOD_NUM_LOCK) pr("numlock+"); if (p == s) pr("none"); else p--; pr(" "); #undef pr return buf; } static inline const char* format_text(const char *src) { static char buf[256]; char *p = buf; const char *last_char = buf + sizeof(buf) - 1; if (!src[0]) return ""; while (*src) { int num = snprintf(p, sizeof(buf) - (p - buf), "0x%x ", (unsigned char)*(src++)); if (num < 0) return ""; if (p + num >= last_char) break; p += num; } if (p != buf) *(--p) = 0; return buf; } static const char* safe_name_for_keycode(unsigned int keycode) { const char *ans = _glfwPlatformGetNativeKeyName(keycode); if (!ans) return ""; if ((1 <= ans[0] && ans[0] <= 31) || ans[0] == 127) ans = ""; return ans; } // Translates a macOS keycode to a GLFW keycode // static int translateKey(unsigned int key, bool apply_keymap) { if (apply_keymap) { // Look for the effective key name after applying any keyboard layouts/mappings const char *name_chars = _glfwPlatformGetNativeKeyName(key); uint32_t name = 0; if (name_chars) { for (int i = 0; i < 4; i++) { if (!name_chars[i]) break; name <<= 8; name |= (uint8_t)name_chars[i]; } } if (name) { // Key name switch(name) { #define K(ch, name) case ch: return GLFW_KEY_##name K('!', EXCLAM); K('"', DOUBLE_QUOTE); K('#', NUMBER_SIGN); K('$', DOLLAR); K('&', AMPERSAND); K('\'', APOSTROPHE); K('(', PARENTHESIS_LEFT); K(')', PARENTHESIS_RIGHT); K('+', PLUS); K(',', COMMA); K('-', MINUS); K('.', PERIOD); K('/', SLASH); K('0', 0); K('1', 1); K('2', 2); K('3', 3); K('5', 5); K('6', 6); K('7', 7); K('8', 8); K('9', 9); K(':', COLON); K(';', SEMICOLON); K('<', LESS); K('=', EQUAL); K('>', GREATER); K('@', AT); K('A', A); K('a', A); K('B', B); K('b', B); K('C', C); K('c', C); K('D', D); K('d', D); K('E', E); K('e', E); K('F', F); K('f', F); K('G', G); K('g', G); K('H', H); K('h', H); K('I', I); K('i', I); K('J', J); K('j', J); K('K', K); K('k', K); K('L', L); K('l', L); K('M', M); K('m', M); K('N', N); K('n', N); K('O', O); K('o', O); K('P', P); K('p', P); K('Q', Q); K('q', Q); K('R', R); K('r', R); K('S', S); K('s', S); K('T', T); K('t', T); K('U', U); K('u', U); K('V', V); K('v', V); K('W', W); K('w', W); K('X', X); K('x', X); K('Y', Y); K('y', Y); K('Z', Z); K('z', Z); K('[', LEFT_BRACKET); K('\\', BACKSLASH); K(']', RIGHT_BRACKET); K('_', UNDERSCORE); K('`', GRAVE_ACCENT); K(PARAGRAPH_UTF_8, PARAGRAPH); K(MASCULINE_UTF_8, MASCULINE); K(A_DIAERESIS_UPPER_CASE_UTF_8, A_DIAERESIS); K(O_DIAERESIS_UPPER_CASE_UTF_8, O_DIAERESIS); K(U_DIAERESIS_UPPER_CASE_UTF_8, U_DIAERESIS); K(S_SHARP_UTF_8, S_SHARP); K(A_GRAVE_LOWER_CASE_UTF_8, A_GRAVE); K(A_DIAERESIS_LOWER_CASE_UTF_8, A_DIAERESIS); K(A_RING_LOWER_CASE_UTF_8, A_RING); K(AE_LOWER_CASE_UTF_8, AE); K(C_CEDILLA_LOWER_CASE_UTF_8, C_CEDILLA); K(E_GRAVE_LOWER_CASE_UTF_8, E_GRAVE); K(E_ACUTE_LOWER_CASE_UTF_8, E_ACUTE); K(I_GRAVE_LOWER_CASE_UTF_8, I_GRAVE); K(N_TILDE_LOWER_CASE_UTF_8, N_TILDE); K(O_GRAVE_LOWER_CASE_UTF_8, O_GRAVE); K(O_DIAERESIS_LOWER_CASE_UTF_8, O_DIAERESIS); K(O_SLASH_LOWER_CASE_UTF_8, O_SLASH); K(U_GRAVE_LOWER_CASE_UTF_8, U_GRAVE); K(U_DIAERESIS_LOWER_CASE_UTF_8, U_DIAERESIS); K(CYRILLIC_A_LOWER_CASE_UTF_8, CYRILLIC_A); K(CYRILLIC_BE_LOWER_CASE_UTF_8, CYRILLIC_BE); K(CYRILLIC_VE_LOWER_CASE_UTF_8, CYRILLIC_VE); K(CYRILLIC_GHE_LOWER_CASE_UTF_8, CYRILLIC_GHE); K(CYRILLIC_DE_LOWER_CASE_UTF_8, CYRILLIC_DE); K(CYRILLIC_IE_LOWER_CASE_UTF_8, CYRILLIC_IE); K(CYRILLIC_ZHE_LOWER_CASE_UTF_8, CYRILLIC_ZHE); K(CYRILLIC_ZE_LOWER_CASE_UTF_8, CYRILLIC_ZE); K(CYRILLIC_I_LOWER_CASE_UTF_8, CYRILLIC_I); K(CYRILLIC_SHORT_I_LOWER_CASE_UTF_8, CYRILLIC_SHORT_I); K(CYRILLIC_KA_LOWER_CASE_UTF_8, CYRILLIC_KA); K(CYRILLIC_EL_LOWER_CASE_UTF_8, CYRILLIC_EL); K(CYRILLIC_EM_LOWER_CASE_UTF_8, CYRILLIC_EM); K(CYRILLIC_EN_LOWER_CASE_UTF_8, CYRILLIC_EN); K(CYRILLIC_O_LOWER_CASE_UTF_8, CYRILLIC_O); K(CYRILLIC_PE_LOWER_CASE_UTF_8, CYRILLIC_PE); K(CYRILLIC_ER_LOWER_CASE_UTF_8, CYRILLIC_ER); K(CYRILLIC_ES_LOWER_CASE_UTF_8, CYRILLIC_ES); K(CYRILLIC_TE_LOWER_CASE_UTF_8, CYRILLIC_TE); K(CYRILLIC_U_LOWER_CASE_UTF_8, CYRILLIC_U); K(CYRILLIC_EF_LOWER_CASE_UTF_8, CYRILLIC_EF); K(CYRILLIC_HA_LOWER_CASE_UTF_8, CYRILLIC_HA); K(CYRILLIC_TSE_LOWER_CASE_UTF_8, CYRILLIC_TSE); K(CYRILLIC_CHE_LOWER_CASE_UTF_8, CYRILLIC_CHE); K(CYRILLIC_SHA_LOWER_CASE_UTF_8, CYRILLIC_SHA); K(CYRILLIC_SHCHA_LOWER_CASE_UTF_8, CYRILLIC_SHCHA); K(CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8, CYRILLIC_HARD_SIGN); K(CYRILLIC_YERU_LOWER_CASE_UTF_8, CYRILLIC_YERU); K(CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8, CYRILLIC_SOFT_SIGN); K(CYRILLIC_E_LOWER_CASE_UTF_8, CYRILLIC_E); K(CYRILLIC_YU_LOWER_CASE_UTF_8, CYRILLIC_YU); K(CYRILLIC_YA_LOWER_CASE_UTF_8, CYRILLIC_YA); K(CYRILLIC_IO_LOWER_CASE_UTF_8, CYRILLIC_IO); #undef K default: break; } } } if (key >= sizeof(_glfw.ns.keycodes) / sizeof(_glfw.ns.keycodes[0])) return GLFW_KEY_UNKNOWN; return _glfw.ns.keycodes[key]; } // Translate a GLFW keycode to a Cocoa modifier flag // static NSUInteger translateKeyToModifierFlag(int key) { switch (key) { case GLFW_KEY_LEFT_SHIFT: case GLFW_KEY_RIGHT_SHIFT: return NSEventModifierFlagShift; case GLFW_KEY_LEFT_CONTROL: case GLFW_KEY_RIGHT_CONTROL: return NSEventModifierFlagControl; case GLFW_KEY_LEFT_ALT: case GLFW_KEY_RIGHT_ALT: return NSEventModifierFlagOption; case GLFW_KEY_LEFT_SUPER: case GLFW_KEY_RIGHT_SUPER: return NSEventModifierFlagCommand; case GLFW_KEY_CAPS_LOCK: return NSEventModifierFlagCapsLock; } return 0; } // Defines a constant for empty ranges in NSTextInputClient // static const NSRange kEmptyRange = { NSNotFound, 0 }; // Delegate for window related notifications {{{ @interface GLFWWindowDelegate : NSObject { _GLFWwindow* window; } - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow; @end @implementation GLFWWindowDelegate - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow { self = [super init]; if (self != nil) window = initWindow; return self; } - (BOOL)windowShouldClose:(id)sender { (void)sender; _glfwInputWindowCloseRequest(window); return NO; } - (void)windowDidResize:(NSNotification *)notification { (void)notification; if (window->context.client != GLFW_NO_API) [window->context.nsgl.object update]; if (_glfw.ns.disabledCursorWindow == window) _glfwCenterCursorInContentArea(window); const int maximized = [window->ns.object isZoomed]; if (window->ns.maximized != maximized) { window->ns.maximized = maximized; _glfwInputWindowMaximize(window, maximized); } const NSRect contentRect = [window->ns.view frame]; const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect]; if (fbRect.size.width != window->ns.fbWidth || fbRect.size.height != window->ns.fbHeight) { window->ns.fbWidth = (int)fbRect.size.width; window->ns.fbHeight = (int)fbRect.size.height; _glfwInputFramebufferSize(window, (int)fbRect.size.width, (int)fbRect.size.height); } if (contentRect.size.width != window->ns.width || contentRect.size.height != window->ns.height) { window->ns.width = (int)contentRect.size.width; window->ns.height = (int)contentRect.size.height; _glfwInputWindowSize(window, (int)contentRect.size.width, (int)contentRect.size.height); } } - (void)windowDidMove:(NSNotification *)notification { (void)notification; if (window->context.client != GLFW_NO_API) [window->context.nsgl.object update]; if (_glfw.ns.disabledCursorWindow == window) _glfwCenterCursorInContentArea(window); int x, y; _glfwPlatformGetWindowPos(window, &x, &y); _glfwInputWindowPos(window, x, y); } - (void)windowDidChangeOcclusionState:(NSNotification *)notification { (void)notification; _glfwInputWindowOcclusion(window, !([window->ns.object occlusionState] & NSWindowOcclusionStateVisible)); } - (void)windowDidMiniaturize:(NSNotification *)notification { (void)notification; if (window->monitor) releaseMonitor(window); _glfwInputWindowIconify(window, true); } - (void)windowDidDeminiaturize:(NSNotification *)notification { (void)notification; if (window->monitor) acquireMonitor(window); _glfwInputWindowIconify(window, false); } - (void)windowDidBecomeKey:(NSNotification *)notification { (void)notification; if (_glfw.ns.disabledCursorWindow == window) _glfwCenterCursorInContentArea(window); _glfwInputWindowFocus(window, true); updateCursorMode(window); if (window->cursorMode == GLFW_CURSOR_HIDDEN) hideCursor(window); if (_glfw.ns.disabledCursorWindow != window && cursorInContentArea(window)) { double x = 0, y = 0; _glfwPlatformGetCursorPos(window, &x, &y); _glfwInputCursorPos(window, x, y); } } - (void)windowDidResignKey:(NSNotification *)notification { (void)notification; if (window->monitor && window->autoIconify) _glfwPlatformIconifyWindow(window); showCursor(window); _glfwInputWindowFocus(window, false); } - (void)windowDidChangeScreen:(NSNotification *)notification { (void)notification; if (window->ns.renderFrameRequested && window->ns.renderFrameCallback) { // Ensure that if the window changed its monitor, CVDisplayLink // is running for the new monitor requestRenderFrame(window, window->ns.renderFrameCallback); } } @end // }}} // Content view class for the GLFW window {{{ @interface GLFWContentView : NSView { _GLFWwindow* window; NSTrackingArea* trackingArea; NSMutableAttributedString* markedText; NSRect markedRect; } - (void) removeGLFWWindow; - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow; @end @implementation GLFWContentView - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow { self = [super init]; if (self != nil) { window = initWindow; trackingArea = nil; markedText = [[NSMutableAttributedString alloc] init]; markedRect = NSMakeRect(0.0, 0.0, 0.0, 0.0); [self updateTrackingAreas]; [self registerForDraggedTypes:@[NSPasteboardTypeFileURL, NSPasteboardTypeString]]; } return self; } - (void)dealloc { [trackingArea release]; [markedText release]; [super dealloc]; } - (void) removeGLFWWindow { window = NULL; } - (_GLFWwindow*)glfwWindow { return window; } - (BOOL)isOpaque { return window && [window->ns.object isOpaque]; } - (BOOL)canBecomeKeyView { return YES; } - (BOOL)acceptsFirstResponder { return YES; } - (void) viewWillStartLiveResize { if (!window) return; _glfwInputLiveResize(window, true); } - (void)viewDidEndLiveResize { if (!window) return; _glfwInputLiveResize(window, false); } - (BOOL)wantsUpdateLayer { return YES; } - (void)updateLayer { if (!window) return; if (window->context.client != GLFW_NO_API) { @try { [window->context.nsgl.object update]; } @catch (NSException *e) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to update NSGL Context object with error: %s (%s)", [[e name] UTF8String], [[e reason] UTF8String]); } } _glfwInputWindowDamage(window); } - (void)cursorUpdate:(NSEvent *)event { (void)event; if (window) updateCursorImage(window); } - (BOOL)acceptsFirstMouse:(NSEvent *)event { (void)event; return NO; // changed by Kovid, to follow cocoa platform conventions } - (void)mouseDown:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS, translateFlags([event modifierFlags])); } - (void)mouseDragged:(NSEvent *)event { [self mouseMoved:event]; } - (void)mouseUp:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE, translateFlags([event modifierFlags])); } - (void)mouseMoved:(NSEvent *)event { if (!window) return; if (window->cursorMode == GLFW_CURSOR_DISABLED) { const double dx = [event deltaX] - window->ns.cursorWarpDeltaX; const double dy = [event deltaY] - window->ns.cursorWarpDeltaY; _glfwInputCursorPos(window, window->virtualCursorPosX + dx, window->virtualCursorPosY + dy); } else { const NSRect contentRect = [window->ns.view frame]; // NOTE: The returned location uses base 0,1 not 0,0 const NSPoint pos = [event locationInWindow]; _glfwInputCursorPos(window, pos.x, contentRect.size.height - pos.y); } window->ns.cursorWarpDeltaX = 0; window->ns.cursorWarpDeltaY = 0; } - (void)rightMouseDown:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS, translateFlags([event modifierFlags])); } - (void)rightMouseDragged:(NSEvent *)event { [self mouseMoved:event]; } - (void)rightMouseUp:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE, translateFlags([event modifierFlags])); } - (void)otherMouseDown:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, (int) [event buttonNumber], GLFW_PRESS, translateFlags([event modifierFlags])); } - (void)otherMouseDragged:(NSEvent *)event { [self mouseMoved:event]; } - (void)otherMouseUp:(NSEvent *)event { if (!window) return; _glfwInputMouseClick(window, (int) [event buttonNumber], GLFW_RELEASE, translateFlags([event modifierFlags])); } - (void)mouseExited:(NSEvent *)event { (void)event; if (!window) return; _glfwInputCursorEnter(window, false); } - (void)mouseEntered:(NSEvent *)event { (void)event; if (!window) return; _glfwInputCursorEnter(window, true); } - (void)viewDidChangeBackingProperties { if (!window) return; const NSRect contentRect = [window->ns.view frame]; const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect]; if (fbRect.size.width != window->ns.fbWidth || fbRect.size.height != window->ns.fbHeight) { window->ns.fbWidth = (int)fbRect.size.width; window->ns.fbHeight = (int)fbRect.size.height; _glfwInputFramebufferSize(window, (int)fbRect.size.width, (int)fbRect.size.height); } const float xscale = fbRect.size.width / contentRect.size.width; const float yscale = fbRect.size.height / contentRect.size.height; if (xscale != window->ns.xscale || yscale != window->ns.yscale) { window->ns.xscale = xscale; window->ns.yscale = yscale; _glfwInputWindowContentScale(window, xscale, yscale); if (window->ns.retina && window->ns.layer) [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; } } - (void)drawRect:(NSRect)rect { (void)rect; if (!window) return; _glfwInputWindowDamage(window); } - (void)updateTrackingAreas { if (trackingArea != nil) { [self removeTrackingArea:trackingArea]; [trackingArea release]; } const NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingEnabledDuringMouseDrag | NSTrackingCursorUpdate | NSTrackingInVisibleRect | NSTrackingAssumeInside; trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:options owner:self userInfo:nil]; [self addTrackingArea:trackingArea]; [super updateTrackingAreas]; } static inline UInt32 convert_cocoa_to_carbon_modifiers(NSUInteger flags) { UInt32 mods = 0; if (flags & NSEventModifierFlagShift) mods |= shiftKey; if (flags & NSEventModifierFlagControl) mods |= controlKey; if (flags & NSEventModifierFlagOption) mods |= optionKey; if (flags & NSEventModifierFlagCommand) mods |= cmdKey; if (flags & NSEventModifierFlagCapsLock) mods |= alphaLock; return (mods >> 8) & 0xFF; } static inline void convert_utf16_to_utf8(UniChar *src, UniCharCount src_length, char *dest, size_t dest_sz) { CFStringRef string = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, src, src_length, kCFAllocatorNull); CFStringGetCString(string, dest, dest_sz, kCFStringEncodingUTF8); CFRelease(string); } static inline bool is_ascii_control_char(char x) { return x == 0 || (1 <= x && x <= 31) || x == 127; } - (void)keyDown:(NSEvent *)event { const unsigned int keycode = [event keyCode]; const NSUInteger flags = [event modifierFlags]; const int mods = translateFlags(flags); const int key = translateKey(keycode, true); const bool process_text = !window->ns.textInputFilterCallback || window->ns.textInputFilterCallback(key, mods, keycode, flags) != 1; const bool previous_has_marked_text = [self hasMarkedText]; [self unmarkText]; _glfw.ns.text[0] = 0; GLFWkeyevent glfw_keyevent; _glfwInitializeKeyEvent(&glfw_keyevent, key, keycode, GLFW_PRESS, mods); if (!_glfw.ns.unicodeData) { // Using the cocoa API for key handling is disabled, as there is no // reliable way to handle dead keys using it. Only use it if the // keyboard unicode data is not available. if (process_text) { // this will call insertText with the text for this event, if any [self interpretKeyEvents:[NSArray arrayWithObject:event]]; } } else { static UniChar text[256]; UniCharCount char_count = 0; const bool in_compose_sequence = window->ns.deadKeyState != 0; if (UCKeyTranslate( [(NSData*) _glfw.ns.unicodeData bytes], keycode, kUCKeyActionDown, convert_cocoa_to_carbon_modifiers(flags), LMGetKbdType(), (process_text ? 0 : kUCKeyTranslateNoDeadKeysMask), &(window->ns.deadKeyState), sizeof(text)/sizeof(text[0]), &char_count, text ) != noErr) { debug_key(@"UCKeyTranslate failed for keycode: 0x%x (%@) %@\n", keycode, @(safe_name_for_keycode(keycode)), @(format_mods(mods))); window->ns.deadKeyState = 0; return; } debug_key(@"keycode: 0x%x (%@) %@char_count: %lu deadKeyState: %u repeat: %d", keycode, @(safe_name_for_keycode(keycode)), @(format_mods(mods)), char_count, window->ns.deadKeyState, event.ARepeat); if (process_text) { // this will call insertText which will fill up _glfw.ns.text [self interpretKeyEvents:[NSArray arrayWithObject:event]]; } else { window->ns.deadKeyState = 0; } if (window->ns.deadKeyState && (char_count == 0 || keycode == 0x75)) { // 0x75 is the delete key which needs to be ignored during a compose sequence debug_key(@"Sending pre-edit text for dead key (text: %@ markedText: %@).\n", @(format_text(_glfw.ns.text)), markedText); glfw_keyevent.text = [[markedText string] UTF8String]; glfw_keyevent.ime_state = 1; _glfwInputKeyboard(window, &glfw_keyevent); // update pre-edit text return; } if (in_compose_sequence) { debug_key(@"Clearing pre-edit text at end of compose sequence\n"); glfw_keyevent.text = NULL; glfw_keyevent.ime_state = 1; _glfwInputKeyboard(window, &glfw_keyevent); // clear pre-edit text } } if (is_ascii_control_char(_glfw.ns.text[0])) _glfw.ns.text[0] = 0; // don't send text for ascii control codes debug_key(@"text: %@ glfw_key: %@ marked_text: %@\n", @(format_text(_glfw.ns.text)), @(_glfwGetKeyName(key)), markedText); if (!window->ns.deadKeyState) { if ([self hasMarkedText]) { glfw_keyevent.text = [[markedText string] UTF8String]; glfw_keyevent.ime_state = 1; _glfwInputKeyboard(window, &glfw_keyevent); // update pre-edit text } else if (previous_has_marked_text) { glfw_keyevent.text = NULL; glfw_keyevent.ime_state = 1; _glfwInputKeyboard(window, &glfw_keyevent); // clear pre-edit text } if (([self hasMarkedText] || previous_has_marked_text) && !_glfw.ns.text[0]) { // do not pass keys like BACKSPACE while there's pre-edit text, let IME handle it return; } } glfw_keyevent.text = _glfw.ns.text; glfw_keyevent.ime_state = 0; _glfwInputKeyboard(window, &glfw_keyevent); } - (void)flagsChanged:(NSEvent *)event { int action; const unsigned int modifierFlags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; const int key = translateKey([event keyCode], false); const int mods = translateFlags(modifierFlags); const NSUInteger keyFlag = translateKeyToModifierFlag(key); if (keyFlag & modifierFlags) { if (window->keys[key] == GLFW_PRESS) action = GLFW_RELEASE; else action = GLFW_PRESS; } else action = GLFW_RELEASE; GLFWkeyevent glfw_keyevent; _glfwInitializeKeyEvent(&glfw_keyevent, key, [event keyCode], action, mods); _glfwInputKeyboard(window, &glfw_keyevent); } - (void)keyUp:(NSEvent *)event { const int key = translateKey([event keyCode], true); const int mods = translateFlags([event modifierFlags]); GLFWkeyevent glfw_keyevent; _glfwInitializeKeyEvent(&glfw_keyevent, key, [event keyCode], GLFW_RELEASE, mods); _glfwInputKeyboard(window, &glfw_keyevent); } - (void)scrollWheel:(NSEvent *)event { double deltaX = [event scrollingDeltaX]; double deltaY = [event scrollingDeltaY]; int flags = [event hasPreciseScrollingDeltas] ? 1 : 0; if (flags) { float xscale = 1, yscale = 1; _glfwPlatformGetWindowContentScale(window, &xscale, &yscale); if (xscale > 0) deltaX *= xscale; if (yscale > 0) deltaY *= yscale; } switch([event momentumPhase]) { case NSEventPhaseBegan: flags |= (1 << 1); break; case NSEventPhaseStationary: flags |= (2 << 1); break; case NSEventPhaseChanged: flags |= (3 << 1); break; case NSEventPhaseEnded: flags |= (4 << 1); break; case NSEventPhaseCancelled: flags |= (5 << 1); break; case NSEventPhaseMayBegin: flags |= (6 << 1); break; case NSEventPhaseNone: default: break; } _glfwInputScroll(window, deltaX, deltaY, flags); } - (NSDragOperation)draggingEntered:(id )sender { (void)sender; // HACK: We don't know what to say here because we don't know what the // application wants to do with the paths return NSDragOperationGeneric; } - (BOOL)performDragOperation:(id )sender { const NSRect contentRect = [window->ns.view frame]; // NOTE: The returned location uses base 0,1 not 0,0 const NSPoint pos = [sender draggingLocation]; _glfwInputCursorPos(window, pos.x, contentRect.size.height - pos.y); NSPasteboard* pasteboard = [sender draggingPasteboard]; NSDictionary* options = @{NSPasteboardURLReadingFileURLsOnlyKey:@YES}; NSArray* objs = [pasteboard readObjectsForClasses:@[[NSURL class], [NSString class]] options:options]; if (!objs) return NO; const NSUInteger count = [objs count]; if (count) { char** paths = calloc(count, sizeof(char*)); for (NSUInteger i = 0; i < count; i++) { id obj = objs[i]; if ([obj isKindOfClass:[NSURL class]]) { paths[i] = _glfw_strdup([obj fileSystemRepresentation]); } else if ([obj isKindOfClass:[NSString class]]) { paths[i] = _glfw_strdup([obj UTF8String]); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Object is neither a URL nor a string"); paths[i] = _glfw_strdup(""); } } _glfwInputDrop(window, (int) count, (const char**) paths); for (NSUInteger i = 0; i < count; i++) free(paths[i]); free(paths); } return YES; } - (BOOL)hasMarkedText { return [markedText length] > 0; } - (NSRange)markedRange { if ([markedText length] > 0) return NSMakeRange(0, [markedText length] - 1); else return kEmptyRange; } - (NSRange)selectedRange { return kEmptyRange; } - (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange { (void)selectedRange; (void)replacementRange; [markedText release]; if ([string isKindOfClass:[NSAttributedString class]]) markedText = [[NSMutableAttributedString alloc] initWithAttributedString:string]; else markedText = [[NSMutableAttributedString alloc] initWithString:string]; } - (void)unmarkText { [[markedText mutableString] setString:@""]; } void _glfwPlatformUpdateIMEState(_GLFWwindow *w, int which, int a, int b, int c, int d) { [w->ns.view updateIMEStateFor: which left:(CGFloat)a top:(CGFloat)b cellWidth:(CGFloat)c cellHeight:(CGFloat)d]; } - (void)updateIMEStateFor:(int)which left:(CGFloat)left top:(CGFloat)top cellWidth:(CGFloat)cellWidth cellHeight:(CGFloat)cellHeight { (void) which; left /= window->ns.xscale; top /= window->ns.yscale; cellWidth /= window->ns.xscale; cellHeight /= window->ns.yscale; debug_key(@"updateIMEState: %f, %f, %f, %f\n", left, top, cellWidth, cellHeight); const NSRect frame = [window->ns.view frame]; const NSRect rectInView = NSMakeRect(left, frame.size.height - top - cellHeight, cellWidth, cellHeight); markedRect = [window->ns.object convertRectToScreen: rectInView]; } - (NSArray*)validAttributesForMarkedText { return [NSArray array]; } - (NSAttributedString*)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange { (void)range; (void)actualRange; return nil; } - (NSUInteger)characterIndexForPoint:(NSPoint)point { (void)point; return 0; } - (NSRect)firstRectForCharacterRange:(NSRange)range actualRange:(NSRangePointer)actualRange { (void)range; (void)actualRange; return markedRect; } - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { (void)replacementRange; NSString* characters; if ([string isKindOfClass:[NSAttributedString class]]) characters = [string string]; else characters = (NSString*) string; // insertText can be called multiple times for a single key event char *s = _glfw.ns.text + strnlen(_glfw.ns.text, sizeof(_glfw.ns.text)); snprintf(s, sizeof(_glfw.ns.text) - (s - _glfw.ns.text), "%s", [characters UTF8String]); _glfw.ns.text[sizeof(_glfw.ns.text) - 1] = 0; } - (void)doCommandBySelector:(SEL)selector { (void)selector; } @end // }}} // GLFW window class {{{ @interface GLFWWindow : NSWindow { _GLFWwindow* glfw_window; } - (instancetype)initWithGlfwWindow:(NSRect)contentRect styleMask:(NSWindowStyleMask)style backing:(NSBackingStoreType)backingStoreType initWindow:(_GLFWwindow *)initWindow; - (void) removeGLFWWindow; @end @implementation GLFWWindow - (instancetype)initWithGlfwWindow:(NSRect)contentRect styleMask:(NSWindowStyleMask)style backing:(NSBackingStoreType)backingStoreType initWindow:(_GLFWwindow *)initWindow { self = [super initWithContentRect:contentRect styleMask:style backing:backingStoreType defer:NO]; if (self != nil) glfw_window = initWindow; return self; } - (void) removeGLFWWindow { glfw_window = NULL; } - (BOOL)canBecomeKeyWindow { // Required for NSWindowStyleMaskBorderless windows return YES; } - (BOOL)canBecomeMainWindow { return YES; } - (void)toggleFullScreen:(nullable id)sender { if (glfw_window && glfw_window->ns.toggleFullscreenCallback && glfw_window->ns.toggleFullscreenCallback((GLFWwindow*)glfw_window) == 1) return; [super toggleFullScreen:sender]; } @end // }}} // Create the Cocoa window // static bool createNativeWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWfbconfig* fbconfig) { window->ns.delegate = [[GLFWWindowDelegate alloc] initWithGlfwWindow:window]; if (window->ns.delegate == nil) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create window delegate"); return false; } NSRect contentRect; if (window->monitor) { GLFWvidmode mode; int xpos, ypos; _glfwPlatformGetVideoMode(window->monitor, &mode); _glfwPlatformGetMonitorPos(window->monitor, &xpos, &ypos); contentRect = NSMakeRect(xpos, ypos, mode.width, mode.height); } else contentRect = NSMakeRect(0, 0, wndconfig->width, wndconfig->height); window->ns.object = [[GLFWWindow alloc] initWithGlfwWindow:contentRect styleMask:getStyleMask(window) backing:NSBackingStoreBuffered initWindow:window ]; if (window->ns.object == nil) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create window"); return false; } if (window->monitor) [window->ns.object setLevel:NSMainMenuWindowLevel + 1]; else { [(NSWindow*) window->ns.object center]; _glfw.ns.cascadePoint = NSPointToCGPoint([window->ns.object cascadeTopLeftFromPoint: NSPointFromCGPoint(_glfw.ns.cascadePoint)]); if (wndconfig->resizable) { const NSWindowCollectionBehavior behavior = NSWindowCollectionBehaviorFullScreenPrimary | NSWindowCollectionBehaviorManaged; [window->ns.object setCollectionBehavior:behavior]; } if (wndconfig->floating) [window->ns.object setLevel:NSFloatingWindowLevel]; if (wndconfig->maximized) [window->ns.object zoom:nil]; } if (strlen(wndconfig->ns.frameName)) [window->ns.object setFrameAutosaveName:@(wndconfig->ns.frameName)]; window->ns.view = [[GLFWContentView alloc] initWithGlfwWindow:window]; window->ns.retina = wndconfig->ns.retina; if (fbconfig->transparent) { [window->ns.object setOpaque:NO]; [window->ns.object setHasShadow:NO]; [window->ns.object setBackgroundColor:[NSColor clearColor]]; } [window->ns.object setContentView:window->ns.view]; [window->ns.object makeFirstResponder:window->ns.view]; [window->ns.object setTitle:@(wndconfig->title)]; [window->ns.object setDelegate:window->ns.delegate]; [window->ns.object setAcceptsMouseMovedEvents:YES]; [window->ns.object setRestorable:NO]; _glfwPlatformGetWindowSize(window, &window->ns.width, &window->ns.height); _glfwPlatformGetFramebufferSize(window, &window->ns.fbWidth, &window->ns.fbHeight); return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { window->ns.deadKeyState = 0; if (!_glfw.ns.finishedLaunching) { [NSApp run]; _glfw.ns.finishedLaunching = true; } if (!createNativeWindow(window, wndconfig, fbconfig)) return false; if (ctxconfig->client != GLFW_NO_API) { if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API) { if (!_glfwInitNSGL()) return false; if (!_glfwCreateContextNSGL(window, ctxconfig, fbconfig)) return false; } else if (ctxconfig->source == GLFW_EGL_CONTEXT_API) { if (!_glfwInitEGL()) return false; if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) return false; } else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { if (!_glfwInitOSMesa()) return false; if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return false; } } if (window->monitor) { _glfwPlatformShowWindow(window); _glfwPlatformFocusWindow(window); acquireMonitor(window); } return true; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (_glfw.ns.disabledCursorWindow == window) _glfw.ns.disabledCursorWindow = NULL; [window->ns.object orderOut:nil]; if (window->monitor) releaseMonitor(window); if (window->context.destroy) window->context.destroy(window); [window->ns.object setDelegate:nil]; [window->ns.delegate release]; window->ns.delegate = nil; [window->ns.view removeGLFWWindow]; [window->ns.view release]; window->ns.view = nil; [window->ns.object removeGLFWWindow]; [window->ns.object close]; window->ns.object = nil; } void _glfwPlatformSetWindowTitle(_GLFWwindow* window UNUSED, const char *title) { NSString* string = @(title); [window->ns.object setTitle:string]; // HACK: Set the miniwindow title explicitly as setTitle: doesn't update it // if the window lacks NSWindowStyleMaskTitled [window->ns.object setMiniwindowTitle:string]; } void _glfwPlatformSetWindowIcon(_GLFWwindow* window UNUSED, int count UNUSED, const GLFWimage* images UNUSED) { // Regular windows do not have icons } void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos) { const NSRect contentRect = [window->ns.object contentRectForFrameRect:[window->ns.object frame]]; if (xpos) *xpos = (int)contentRect.origin.x; if (ypos) *ypos = (int)_glfwTransformYNS(contentRect.origin.y + contentRect.size.height - 1); } void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y) { const NSRect contentRect = [window->ns.view frame]; const NSRect dummyRect = NSMakeRect(x, _glfwTransformYNS(y + contentRect.size.height - 1), 0, 0); const NSRect frameRect = [window->ns.object frameRectForContentRect:dummyRect]; [window->ns.object setFrameOrigin:frameRect.origin]; } void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) { const NSRect contentRect = [window->ns.view frame]; if (width) *width = (int)contentRect.size.width; if (height) *height = (int)contentRect.size.height; } void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { if (window->monitor) { if (window->monitor->window == window) acquireMonitor(window); } else { NSRect contentRect = [window->ns.object contentRectForFrameRect:[window->ns.object frame]]; contentRect.origin.y += contentRect.size.height - height; contentRect.size = NSMakeSize(width, height); [window->ns.object setFrame:[window->ns.object frameRectForContentRect:contentRect] display:YES]; } } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight) { if (minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE) [window->ns.object setContentMinSize:NSMakeSize(0, 0)]; else [window->ns.object setContentMinSize:NSMakeSize(minwidth, minheight)]; if (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE) [window->ns.object setContentMaxSize:NSMakeSize(DBL_MAX, DBL_MAX)]; else [window->ns.object setContentMaxSize:NSMakeSize(maxwidth, maxheight)]; } void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom) { if (numer == GLFW_DONT_CARE || denom == GLFW_DONT_CARE) [window->ns.object setResizeIncrements:NSMakeSize(1.0, 1.0)]; else [window->ns.object setContentAspectRatio:NSMakeSize(numer, denom)]; } void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { const NSRect contentRect = [window->ns.view frame]; const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect]; if (width) *width = (int) fbRect.size.width; if (height) *height = (int) fbRect.size.height; } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom) { const NSRect contentRect = [window->ns.view frame]; const NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect]; if (left) *left = (int)(contentRect.origin.x - frameRect.origin.x); if (top) *top = (int)(frameRect.origin.y + frameRect.size.height - contentRect.origin.y - contentRect.size.height); if (right) *right = (int)(frameRect.origin.x + frameRect.size.width - contentRect.origin.x - contentRect.size.width); if (bottom) *bottom = (int)(contentRect.origin.y - frameRect.origin.y); } void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, float* xscale, float* yscale) { const NSRect points = [window->ns.view frame]; const NSRect pixels = [window->ns.view convertRectToBacking:points]; if (xscale) *xscale = (float) (pixels.size.width / points.size.width); if (yscale) *yscale = (float) (pixels.size.height / points.size.height); } monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window UNUSED) { return s_double_to_monotonic_t([NSEvent doubleClickInterval]); } void _glfwPlatformIconifyWindow(_GLFWwindow* window) { [window->ns.object miniaturize:nil]; } void _glfwPlatformRestoreWindow(_GLFWwindow* window) { if ([window->ns.object isMiniaturized]) [window->ns.object deminiaturize:nil]; else if ([window->ns.object isZoomed]) [window->ns.object zoom:nil]; } void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { if (![window->ns.object isZoomed]) [window->ns.object zoom:nil]; } void _glfwPlatformShowWindow(_GLFWwindow* window) { [window->ns.object orderFront:nil]; } void _glfwPlatformHideWindow(_GLFWwindow* window) { [window->ns.object orderOut:nil]; } void _glfwPlatformRequestWindowAttention(_GLFWwindow* window UNUSED) { [NSApp requestUserAttention:NSInformationalRequest]; } int _glfwPlatformWindowBell(_GLFWwindow* window UNUSED) { NSBeep(); return true; } void _glfwPlatformFocusWindow(_GLFWwindow* window) { // Make us the active application // HACK: This is here to prevent applications using only hidden windows from // being activated, but should probably not be done every time any // window is shown [NSApp activateIgnoringOtherApps:YES]; [window->ns.object makeKeyAndOrderFront:nil]; } void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate UNUSED) { if (window->monitor == monitor) { if (monitor) { if (monitor->window == window) acquireMonitor(window); } else { const NSRect contentRect = NSMakeRect(xpos, _glfwTransformYNS(ypos + height - 1), width, height); const NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect styleMask:getStyleMask(window)]; [window->ns.object setFrame:frameRect display:YES]; } return; } if (window->monitor) releaseMonitor(window); _glfwInputWindowMonitor(window, monitor); const NSUInteger styleMask = getStyleMask(window); [window->ns.object setStyleMask:styleMask]; // HACK: Changing the style mask can cause the first responder to be cleared [window->ns.object makeFirstResponder:window->ns.view]; if (window->monitor) { [window->ns.object setLevel:NSMainMenuWindowLevel + 1]; [window->ns.object setHasShadow:NO]; acquireMonitor(window); } else { NSRect contentRect = NSMakeRect(xpos, _glfwTransformYNS(ypos + height - 1), width, height); NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect styleMask:styleMask]; [window->ns.object setFrame:frameRect display:YES]; if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) { [window->ns.object setContentAspectRatio:NSMakeSize(window->numer, window->denom)]; } if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE) { [window->ns.object setContentMinSize:NSMakeSize(window->minwidth, window->minheight)]; } if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) { [window->ns.object setContentMaxSize:NSMakeSize(window->maxwidth, window->maxheight)]; } if (window->floating) [window->ns.object setLevel:NSFloatingWindowLevel]; else [window->ns.object setLevel:NSNormalWindowLevel]; [window->ns.object setHasShadow:YES]; // HACK: Clearing NSWindowStyleMaskTitled resets and disables the window // title property but the miniwindow title property is unaffected [window->ns.object setTitle:[window->ns.object miniwindowTitle]]; } } int _glfwPlatformWindowFocused(_GLFWwindow* window) { return [window->ns.object isKeyWindow]; } int _glfwPlatformWindowOccluded(_GLFWwindow* window) { return !([window->ns.object occlusionState] & NSWindowOcclusionStateVisible); } int _glfwPlatformWindowIconified(_GLFWwindow* window) { return [window->ns.object isMiniaturized]; } int _glfwPlatformWindowVisible(_GLFWwindow* window) { return [window->ns.object isVisible]; } int _glfwPlatformWindowMaximized(_GLFWwindow* window) { return [window->ns.object isZoomed]; } int _glfwPlatformWindowHovered(_GLFWwindow* window) { const NSPoint point = [NSEvent mouseLocation]; if ([NSWindow windowNumberAtPoint:point belowWindowWithWindowNumber:0] != [window->ns.object windowNumber]) { return false; } return NSMouseInRect(point, [window->ns.object convertRectToScreen:[window->ns.view frame]], NO); } int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { return ![window->ns.object isOpaque] && ![window->ns.view isOpaque]; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window, bool enabled UNUSED) { [window->ns.object setStyleMask:getStyleMask(window)]; } void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, bool enabled UNUSED) { [window->ns.object setStyleMask:getStyleMask(window)]; [window->ns.object makeFirstResponder:window->ns.view]; } void _glfwPlatformSetWindowFloating(_GLFWwindow* window, bool enabled) { if (enabled) [window->ns.object setLevel:NSFloatingWindowLevel]; else [window->ns.object setLevel:NSNormalWindowLevel]; } float _glfwPlatformGetWindowOpacity(_GLFWwindow* window) { return (float) [window->ns.object alphaValue]; } void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity) { [window->ns.object setAlphaValue:opacity]; } void _glfwDispatchRenderFrame(CGDirectDisplayID displayID) { _GLFWwindow *w = _glfw.windowListHead; while (w) { if (w->ns.renderFrameRequested && displayID == displayIDForWindow(w)) { w->ns.renderFrameRequested = false; w->ns.renderFrameCallback((GLFWwindow*)w); } w = w->next; } } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) { const NSRect contentRect = [window->ns.view frame]; // NOTE: The returned location uses base 0,1 not 0,0 const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream]; if (xpos) *xpos = pos.x; if (ypos) *ypos = contentRect.size.height - pos.y; } void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) { updateCursorImage(window); const NSRect contentRect = [window->ns.view frame]; // NOTE: The returned location uses base 0,1 not 0,0 const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream]; window->ns.cursorWarpDeltaX += x - pos.x; window->ns.cursorWarpDeltaY += y - contentRect.size.height + pos.y; if (window->monitor) { CGDisplayMoveCursorToPoint(window->monitor->ns.displayID, CGPointMake(x, y)); } else { const NSRect localRect = NSMakeRect(x, contentRect.size.height - y - 1, 0, 0); const NSRect globalRect = [window->ns.object convertRectToScreen:localRect]; const NSPoint globalPoint = globalRect.origin; CGWarpMouseCursorPosition(CGPointMake(globalPoint.x, _glfwTransformYNS(globalPoint.y))); } } void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode UNUSED) { if (_glfwPlatformWindowFocused(window)) updateCursorMode(window); } const char* _glfwPlatformGetNativeKeyName(int keycode) { UInt32 deadKeyState = 0; UniChar characters[8]; UniCharCount characterCount = 0; if (UCKeyTranslate([(NSData*) _glfw.ns.unicodeData bytes], keycode, kUCKeyActionDisplay, 0, LMGetKbdType(), kUCKeyTranslateNoDeadKeysBit, &deadKeyState, sizeof(characters) / sizeof(characters[0]), &characterCount, characters) != noErr) { return NULL; } if (!characterCount) return NULL; convert_utf16_to_utf8(characters, characterCount, _glfw.ns.keyName, sizeof(_glfw.ns.keyName)); return _glfw.ns.keyName; } int _glfwPlatformGetNativeKeyForKey(int key) { return _glfw.ns.key_to_keycode[key]; } int _glfwPlatformCreateCursor(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot, int count) { NSImage* native; NSBitmapImageRep* rep; native = [[NSImage alloc] initWithSize:NSMakeSize(image->width, image->height)]; if (native == nil) return false; for (int i = 0; i < count; i++) { const GLFWimage *src = image + i; rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:src->width pixelsHigh:src->height bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bitmapFormat:NSBitmapFormatAlphaNonpremultiplied bytesPerRow:src->width * 4 bitsPerPixel:32]; if (rep == nil) return false; memcpy([rep bitmapData], src->pixels, src->width * src->height * 4); [native addRepresentation:rep]; [rep release]; } cursor->ns.object = [[NSCursor alloc] initWithImage:native hotSpot:NSMakePoint(xhot, yhot)]; [native release]; if (cursor->ns.object == nil) return false; return true; } int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, GLFWCursorShape shape) { #define C(name, val) case name: cursor->ns.object = [NSCursor val]; break; #define U(name, val) case name: cursor->ns.object = [[NSCursor class] performSelector:@selector(val)]; break; switch(shape) { C(GLFW_ARROW_CURSOR, arrowCursor); C(GLFW_IBEAM_CURSOR, IBeamCursor); C(GLFW_CROSSHAIR_CURSOR, crosshairCursor); C(GLFW_HAND_CURSOR, pointingHandCursor); C(GLFW_HRESIZE_CURSOR, resizeLeftRightCursor); C(GLFW_VRESIZE_CURSOR, resizeUpDownCursor); U(GLFW_NW_RESIZE_CURSOR, _windowResizeNorthWestSouthEastCursor); U(GLFW_NE_RESIZE_CURSOR, _windowResizeNorthEastSouthWestCursor); U(GLFW_SW_RESIZE_CURSOR, _windowResizeNorthEastSouthWestCursor); U(GLFW_SE_RESIZE_CURSOR, _windowResizeNorthWestSouthEastCursor); case GLFW_INVALID_CURSOR: return false; } #undef C #undef U if (!cursor->ns.object) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to retrieve standard cursor"); return false; } [cursor->ns.object retain]; return true; } void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) { if (cursor->ns.object) [(NSCursor*) cursor->ns.object release]; } void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor UNUSED) { if (cursorInContentArea(window)) updateCursorImage(window); } bool _glfwPlatformToggleFullscreen(_GLFWwindow* w, unsigned int flags) { NSWindow *window = w->ns.object; bool made_fullscreen = true; bool traditional = !(flags & 1); NSWindowStyleMask sm = [window styleMask]; bool in_fullscreen = sm & NSWindowStyleMaskFullScreen; if (traditional) { if (!(in_fullscreen)) { sm |= NSWindowStyleMaskBorderless | NSWindowStyleMaskFullScreen; [[NSApplication sharedApplication] setPresentationOptions: NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock]; } else { made_fullscreen = false; sm &= ~(NSWindowStyleMaskBorderless | NSWindowStyleMaskFullScreen); [[NSApplication sharedApplication] setPresentationOptions: NSApplicationPresentationDefault]; } [window setStyleMask: sm]; } else { if (in_fullscreen) made_fullscreen = false; [window toggleFullScreen: nil]; } return made_fullscreen; } void _glfwPlatformSetClipboardString(const char* string) { NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; [pasteboard declareTypes:@[NSPasteboardTypeString] owner:nil]; [pasteboard setString:@(string) forType:NSPasteboardTypeString]; } const char* _glfwPlatformGetClipboardString(void) { NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; if (![[pasteboard types] containsObject:NSPasteboardTypeString]) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "Cocoa: Failed to retrieve string from pasteboard"); return NULL; } NSString* object = [pasteboard stringForType:NSPasteboardTypeString]; if (!object) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to retrieve object from pasteboard"); return NULL; } free(_glfw.ns.clipboardString); _glfw.ns.clipboardString = _glfw_strdup([object UTF8String]); return _glfw.ns.clipboardString; } void _glfwPlatformGetRequiredInstanceExtensions(char** extensions) { if (!_glfw.vk.KHR_surface || !_glfw.vk.MVK_macos_surface) return; extensions[0] = "VK_KHR_surface"; extensions[1] = "VK_MVK_macos_surface"; } int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance UNUSED, VkPhysicalDevice device UNUSED, uint32_t queuefamily UNUSED) { return true; } VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) { #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100 VkResult err; VkMacOSSurfaceCreateInfoMVK sci; PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK) vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK"); if (!vkCreateMacOSSurfaceMVK) { _glfwInputError(GLFW_API_UNAVAILABLE, "Cocoa: Vulkan instance missing VK_MVK_macos_surface extension"); return VK_ERROR_EXTENSION_NOT_PRESENT; } // HACK: Dynamically load Core Animation to avoid adding an extra // dependency for the majority who don't use MoltenVK NSBundle* bundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/QuartzCore.framework"]; if (!bundle) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to find QuartzCore.framework"); return VK_ERROR_EXTENSION_NOT_PRESENT; } // NOTE: Create the layer here as makeBackingLayer should not return nil window->ns.layer = [[bundle classNamed:@"CAMetalLayer"] layer]; if (!window->ns.layer) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create layer for view"); return VK_ERROR_EXTENSION_NOT_PRESENT; } if (window->ns.retina) [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; [window->ns.view setLayer:window->ns.layer]; [window->ns.view setWantsLayer:YES]; memset(&sci, 0, sizeof(sci)); sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; sci.pView = window->ns.view; err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create Vulkan surface: %s", _glfwGetVulkanResultString(err)); } return err; #else return VK_ERROR_EXTENSION_NOT_PRESENT; #endif } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI id glfwGetCocoaWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(nil); return window->ns.object; } GLFWAPI GLFWcocoatextinputfilterfun glfwSetCocoaTextInputFilter(GLFWwindow *handle, GLFWcocoatextinputfilterfun callback) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(nil); GLFWcocoatextinputfilterfun previous = window->ns.textInputFilterCallback; window->ns.textInputFilterCallback = callback; return previous; } GLFWAPI GLFWcocoatogglefullscreenfun glfwSetCocoaToggleFullscreenIntercept(GLFWwindow *handle, GLFWcocoatogglefullscreenfun callback) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(nil); GLFWcocoatogglefullscreenfun previous = window->ns.toggleFullscreenCallback; window->ns.toggleFullscreenCallback = callback; return previous; } GLFWAPI void glfwCocoaRequestRenderFrame(GLFWwindow *w, GLFWcocoarenderframefun callback) { requestRenderFrame((_GLFWwindow*)w, callback); } GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned short *cocoa_key, int *cocoa_mods) { *cocoa_key = 0; *cocoa_mods = 0; if (glfw_mods & GLFW_MOD_SHIFT) *cocoa_mods |= NSEventModifierFlagShift; if (glfw_mods & GLFW_MOD_CONTROL) *cocoa_mods |= NSEventModifierFlagControl; if (glfw_mods & GLFW_MOD_ALT) *cocoa_mods |= NSEventModifierFlagOption; if (glfw_mods & GLFW_MOD_SUPER) *cocoa_mods |= NSEventModifierFlagCommand; if (glfw_mods & GLFW_MOD_CAPS_LOCK) *cocoa_mods |= NSEventModifierFlagCapsLock; START_ALLOW_CASE_RANGE switch(glfw_key) { #define K(ch, name) case GLFW_KEY_##name: *cocoa_key = ch; break; K('!', EXCLAM); K('"', DOUBLE_QUOTE); K('#', NUMBER_SIGN); K('$', DOLLAR); K('&', AMPERSAND); K('\'', APOSTROPHE); K('(', PARENTHESIS_LEFT); K(')', PARENTHESIS_RIGHT); K('+', PLUS); K(',', COMMA); K('-', MINUS); K('.', PERIOD); K('/', SLASH); K('0', 0); K('1', 1); K('2', 2); K('3', 3); K('5', 5); K('6', 6); K('7', 7); K('8', 8); K('9', 9); K(':', COLON); K(';', SEMICOLON); K('<', LESS); K('=', EQUAL); K('>', GREATER); K('@', AT); K('[', LEFT_BRACKET); K('\\', BACKSLASH); K(']', RIGHT_BRACKET); K('_', UNDERSCORE); K('`', GRAVE_ACCENT); K('a', A); K('b', B); K('c', C); K('d', D); K('e', E); K('f', F); K('g', G); K('h', H); K('i', I); K('j', J); K('k', K); K('l', L); K('m', M); K('n', N); K('o', O); K('p', P); K('q', Q); K('r', R); K('s', S); K('t', T); K('u', U); K('v', V); K('w', W); K('x', X); K('y', Y); K('z', Z); K(PARAGRAPH_UTF_8, PARAGRAPH); K(MASCULINE_UTF_8, MASCULINE); K(S_SHARP_UTF_8, S_SHARP); K(A_GRAVE_LOWER_CASE_UTF_8, A_GRAVE); K(A_DIAERESIS_LOWER_CASE_UTF_8, A_DIAERESIS); K(A_RING_LOWER_CASE_UTF_8, A_RING); K(AE_LOWER_CASE_UTF_8, AE); K(C_CEDILLA_LOWER_CASE_UTF_8, C_CEDILLA); K(E_GRAVE_LOWER_CASE_UTF_8, E_GRAVE); K(E_ACUTE_LOWER_CASE_UTF_8, E_ACUTE); K(I_GRAVE_LOWER_CASE_UTF_8, I_GRAVE); K(N_TILDE_LOWER_CASE_UTF_8, N_TILDE); K(O_GRAVE_LOWER_CASE_UTF_8, O_GRAVE); K(O_DIAERESIS_LOWER_CASE_UTF_8, O_DIAERESIS); K(O_SLASH_LOWER_CASE_UTF_8, O_SLASH); K(U_GRAVE_LOWER_CASE_UTF_8, U_GRAVE); K(U_DIAERESIS_LOWER_CASE_UTF_8, U_DIAERESIS); K(CYRILLIC_A_LOWER_CASE_UTF_8, CYRILLIC_A); K(CYRILLIC_BE_LOWER_CASE_UTF_8, CYRILLIC_BE); K(CYRILLIC_VE_LOWER_CASE_UTF_8, CYRILLIC_VE); K(CYRILLIC_GHE_LOWER_CASE_UTF_8, CYRILLIC_GHE); K(CYRILLIC_DE_LOWER_CASE_UTF_8, CYRILLIC_DE); K(CYRILLIC_IE_LOWER_CASE_UTF_8, CYRILLIC_IE); K(CYRILLIC_ZHE_LOWER_CASE_UTF_8, CYRILLIC_ZHE); K(CYRILLIC_ZE_LOWER_CASE_UTF_8, CYRILLIC_ZE); K(CYRILLIC_I_LOWER_CASE_UTF_8, CYRILLIC_I); K(CYRILLIC_SHORT_I_LOWER_CASE_UTF_8, CYRILLIC_SHORT_I); K(CYRILLIC_KA_LOWER_CASE_UTF_8, CYRILLIC_KA); K(CYRILLIC_EL_LOWER_CASE_UTF_8, CYRILLIC_EL); K(CYRILLIC_EM_LOWER_CASE_UTF_8, CYRILLIC_EM); K(CYRILLIC_EN_LOWER_CASE_UTF_8, CYRILLIC_EN); K(CYRILLIC_O_LOWER_CASE_UTF_8, CYRILLIC_O); K(CYRILLIC_PE_LOWER_CASE_UTF_8, CYRILLIC_PE); K(CYRILLIC_ER_LOWER_CASE_UTF_8, CYRILLIC_ER); K(CYRILLIC_ES_LOWER_CASE_UTF_8, CYRILLIC_ES); K(CYRILLIC_TE_LOWER_CASE_UTF_8, CYRILLIC_TE); K(CYRILLIC_U_LOWER_CASE_UTF_8, CYRILLIC_U); K(CYRILLIC_EF_LOWER_CASE_UTF_8, CYRILLIC_EF); K(CYRILLIC_HA_LOWER_CASE_UTF_8, CYRILLIC_HA); K(CYRILLIC_TSE_LOWER_CASE_UTF_8, CYRILLIC_TSE); K(CYRILLIC_CHE_LOWER_CASE_UTF_8, CYRILLIC_CHE); K(CYRILLIC_SHA_LOWER_CASE_UTF_8, CYRILLIC_SHA); K(CYRILLIC_SHCHA_LOWER_CASE_UTF_8, CYRILLIC_SHCHA); K(CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8, CYRILLIC_HARD_SIGN); K(CYRILLIC_YERU_LOWER_CASE_UTF_8, CYRILLIC_YERU); K(CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8, CYRILLIC_SOFT_SIGN); K(CYRILLIC_E_LOWER_CASE_UTF_8, CYRILLIC_E); K(CYRILLIC_YU_LOWER_CASE_UTF_8, CYRILLIC_YU); K(CYRILLIC_YA_LOWER_CASE_UTF_8, CYRILLIC_YA); K(CYRILLIC_IO_LOWER_CASE_UTF_8, CYRILLIC_IO); K(0x35, ESCAPE); K('\r', ENTER); K('\t', TAB); K(NSBackspaceCharacter, BACKSPACE); K(NSInsertFunctionKey, INSERT); K(NSDeleteCharacter, DELETE); K(NSLeftArrowFunctionKey, LEFT); K(NSRightArrowFunctionKey, RIGHT); K(NSUpArrowFunctionKey, UP); K(NSDownArrowFunctionKey, DOWN); K(NSPageUpFunctionKey, PAGE_UP); K(NSPageDownFunctionKey, PAGE_DOWN); K(NSHomeFunctionKey, HOME); K(NSEndFunctionKey, END); K(NSPrintFunctionKey, PRINT_SCREEN); case GLFW_KEY_F1 ... GLFW_KEY_F24: *cocoa_key = NSF1FunctionKey + (glfw_key - GLFW_KEY_F1); break; case GLFW_KEY_KP_0 ... GLFW_KEY_KP_9: *cocoa_key = NSEventModifierFlagNumericPad | (0x52 + (glfw_key - GLFW_KEY_KP_0)); break; K((unichar)(0x41|NSEventModifierFlagNumericPad), KP_DECIMAL); K((unichar)(0x43|NSEventModifierFlagNumericPad), KP_MULTIPLY); K((unichar)(0x45|NSEventModifierFlagNumericPad), KP_ADD); K((unichar)(0x4B|NSEventModifierFlagNumericPad), KP_DIVIDE); K((unichar)(0x4E|NSEventModifierFlagNumericPad), KP_SUBTRACT); K((unichar)(0x51|NSEventModifierFlagNumericPad), KP_EQUAL); #undef K END_ALLOW_CASE_RANGE } } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Transforms a y-coordinate between the CG display and NS screen spaces // float _glfwTransformYNS(float y) { return CGDisplayBounds(CGMainDisplayID()).size.height - y - 1; } void _glfwCocoaPostEmptyEvent(void) { NSEvent* event = [NSEvent otherEventWithType:NSEventTypeApplicationDefined location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]; [NSApp postEvent:event atStart:YES]; } kitty-0.15.0/glfw/context.c000066400000000000000000000615171356737523400155610ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2016 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include #include #include #include #include ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Checks whether the desired context attributes are valid // // This function checks things like whether the specified client API version // exists and whether all relevant options have supported and non-conflicting // values // bool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig) { if (ctxconfig->share) { if (ctxconfig->client == GLFW_NO_API || ctxconfig->share->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return false; } } if (ctxconfig->source != GLFW_NATIVE_CONTEXT_API && ctxconfig->source != GLFW_EGL_CONTEXT_API && ctxconfig->source != GLFW_OSMESA_CONTEXT_API) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid context creation API 0x%08X", ctxconfig->source); return false; } if (ctxconfig->client != GLFW_NO_API && ctxconfig->client != GLFW_OPENGL_API && ctxconfig->client != GLFW_OPENGL_ES_API) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid client API 0x%08X", ctxconfig->client); return false; } if (ctxconfig->client == GLFW_OPENGL_API) { if ((ctxconfig->major < 1 || ctxconfig->minor < 0) || (ctxconfig->major == 1 && ctxconfig->minor > 5) || (ctxconfig->major == 2 && ctxconfig->minor > 1) || (ctxconfig->major == 3 && ctxconfig->minor > 3)) { // OpenGL 1.0 is the smallest valid version // OpenGL 1.x series ended with version 1.5 // OpenGL 2.x series ended with version 2.1 // OpenGL 3.x series ended with version 3.3 // For now, let everything else through _glfwInputError(GLFW_INVALID_VALUE, "Invalid OpenGL version %i.%i", ctxconfig->major, ctxconfig->minor); return false; } if (ctxconfig->profile) { if (ctxconfig->profile != GLFW_OPENGL_CORE_PROFILE && ctxconfig->profile != GLFW_OPENGL_COMPAT_PROFILE) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid OpenGL profile 0x%08X", ctxconfig->profile); return false; } if (ctxconfig->major <= 2 || (ctxconfig->major == 3 && ctxconfig->minor < 2)) { // Desktop OpenGL context profiles are only defined for version 3.2 // and above _glfwInputError(GLFW_INVALID_VALUE, "Context profiles are only defined for OpenGL version 3.2 and above"); return false; } } if (ctxconfig->forward && ctxconfig->major <= 2) { // Forward-compatible contexts are only defined for OpenGL version 3.0 and above _glfwInputError(GLFW_INVALID_VALUE, "Forward-compatibility is only defined for OpenGL version 3.0 and above"); return false; } } else if (ctxconfig->client == GLFW_OPENGL_ES_API) { if (ctxconfig->major < 1 || ctxconfig->minor < 0 || (ctxconfig->major == 1 && ctxconfig->minor > 1) || (ctxconfig->major == 2 && ctxconfig->minor > 0)) { // OpenGL ES 1.0 is the smallest valid version // OpenGL ES 1.x series ended with version 1.1 // OpenGL ES 2.x series ended with version 2.0 // For now, let everything else through _glfwInputError(GLFW_INVALID_VALUE, "Invalid OpenGL ES version %i.%i", ctxconfig->major, ctxconfig->minor); return false; } } if (ctxconfig->robustness) { if (ctxconfig->robustness != GLFW_NO_RESET_NOTIFICATION && ctxconfig->robustness != GLFW_LOSE_CONTEXT_ON_RESET) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid context robustness mode 0x%08X", ctxconfig->robustness); return false; } } if (ctxconfig->release) { if (ctxconfig->release != GLFW_RELEASE_BEHAVIOR_NONE && ctxconfig->release != GLFW_RELEASE_BEHAVIOR_FLUSH) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid context release behavior 0x%08X", ctxconfig->release); return false; } } return true; } // Chooses the framebuffer config that best matches the desired one // const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired, const _GLFWfbconfig* alternatives, unsigned int count) { unsigned int i; unsigned int missing, leastMissing = UINT_MAX; unsigned int colorDiff, leastColorDiff = UINT_MAX; unsigned int extraDiff, leastExtraDiff = UINT_MAX; const _GLFWfbconfig* current; const _GLFWfbconfig* closest = NULL; for (i = 0; i < count; i++) { current = alternatives + i; if (desired->stereo > 0 && current->stereo == 0) { // Stereo is a hard constraint continue; } if (desired->doublebuffer != current->doublebuffer) { // Double buffering is a hard constraint continue; } // Count number of missing buffers { missing = 0; if (desired->alphaBits > 0 && current->alphaBits == 0) missing++; if (desired->depthBits > 0 && current->depthBits == 0) missing++; if (desired->stencilBits > 0 && current->stencilBits == 0) missing++; if (desired->auxBuffers > 0 && current->auxBuffers < desired->auxBuffers) { missing += desired->auxBuffers - current->auxBuffers; } if (desired->samples > 0 && current->samples == 0) { // Technically, several multisampling buffers could be // involved, but that's a lower level implementation detail and // not important to us here, so we count them as one missing++; } if (desired->transparent != current->transparent) missing++; } // These polynomials make many small channel size differences matter // less than one large channel size difference // Calculate color channel size difference value { colorDiff = 0; if (desired->redBits != GLFW_DONT_CARE) { colorDiff += (desired->redBits - current->redBits) * (desired->redBits - current->redBits); } if (desired->greenBits != GLFW_DONT_CARE) { colorDiff += (desired->greenBits - current->greenBits) * (desired->greenBits - current->greenBits); } if (desired->blueBits != GLFW_DONT_CARE) { colorDiff += (desired->blueBits - current->blueBits) * (desired->blueBits - current->blueBits); } } // Calculate non-color channel size difference value { extraDiff = 0; if (desired->alphaBits != GLFW_DONT_CARE) { extraDiff += (desired->alphaBits - current->alphaBits) * (desired->alphaBits - current->alphaBits); } if (desired->depthBits != GLFW_DONT_CARE) { extraDiff += (desired->depthBits - current->depthBits) * (desired->depthBits - current->depthBits); } if (desired->stencilBits != GLFW_DONT_CARE) { extraDiff += (desired->stencilBits - current->stencilBits) * (desired->stencilBits - current->stencilBits); } if (desired->accumRedBits != GLFW_DONT_CARE) { extraDiff += (desired->accumRedBits - current->accumRedBits) * (desired->accumRedBits - current->accumRedBits); } if (desired->accumGreenBits != GLFW_DONT_CARE) { extraDiff += (desired->accumGreenBits - current->accumGreenBits) * (desired->accumGreenBits - current->accumGreenBits); } if (desired->accumBlueBits != GLFW_DONT_CARE) { extraDiff += (desired->accumBlueBits - current->accumBlueBits) * (desired->accumBlueBits - current->accumBlueBits); } if (desired->accumAlphaBits != GLFW_DONT_CARE) { extraDiff += (desired->accumAlphaBits - current->accumAlphaBits) * (desired->accumAlphaBits - current->accumAlphaBits); } if (desired->samples != GLFW_DONT_CARE) { extraDiff += (desired->samples - current->samples) * (desired->samples - current->samples); } if (desired->sRGB && !current->sRGB) extraDiff++; } // Figure out if the current one is better than the best one found so far // Least number of missing buffers is the most important heuristic, // then color buffer size match and lastly size match for other buffers if (missing < leastMissing) closest = current; else if (missing == leastMissing) { if ((colorDiff < leastColorDiff) || (colorDiff == leastColorDiff && extraDiff < leastExtraDiff)) { closest = current; } } if (current == closest) { leastMissing = missing; leastColorDiff = colorDiff; leastExtraDiff = extraDiff; } } return closest; } // Retrieves the attributes of the current context // bool _glfwRefreshContextAttribs(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig) { int i; _GLFWwindow* previous; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", NULL }; window->context.source = ctxconfig->source; window->context.client = GLFW_OPENGL_API; previous = _glfwPlatformGetTls(&_glfw.contextSlot); glfwMakeContextCurrent((GLFWwindow*) window); window->context.GetIntegerv = (PFNGLGETINTEGERVPROC) window->context.getProcAddress("glGetIntegerv"); window->context.GetString = (PFNGLGETSTRINGPROC) window->context.getProcAddress("glGetString"); if (!window->context.GetIntegerv || !window->context.GetString) { _glfwInputError(GLFW_PLATFORM_ERROR, "Entry point retrieval is broken"); glfwMakeContextCurrent((GLFWwindow*) previous); return false; } version = (const char*) window->context.GetString(GL_VERSION); if (!version) { if (ctxconfig->client == GLFW_OPENGL_API) { _glfwInputError(GLFW_PLATFORM_ERROR, "OpenGL version string retrieval is broken"); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "OpenGL ES version string retrieval is broken"); } glfwMakeContextCurrent((GLFWwindow*) previous); return false; } for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { version += length; window->context.client = GLFW_OPENGL_ES_API; break; } } if (!sscanf(version, "%d.%d.%d", &window->context.major, &window->context.minor, &window->context.revision)) { if (window->context.client == GLFW_OPENGL_API) { _glfwInputError(GLFW_PLATFORM_ERROR, "No version found in OpenGL version string"); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "No version found in OpenGL ES version string"); } glfwMakeContextCurrent((GLFWwindow*) previous); return false; } if (window->context.major < ctxconfig->major || (window->context.major == ctxconfig->major && window->context.minor < ctxconfig->minor)) { // The desired OpenGL version is greater than the actual version // This only happens if the machine lacks {GLX|WGL}_ARB_create_context // /and/ the user has requested an OpenGL version greater than 1.0 // For API consistency, we emulate the behavior of the // {GLX|WGL}_ARB_create_context extension and fail here if (window->context.client == GLFW_OPENGL_API) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "Requested OpenGL version %i.%i, got version %i.%i", ctxconfig->major, ctxconfig->minor, window->context.major, window->context.minor); } else { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "Requested OpenGL ES version %i.%i, got version %i.%i", ctxconfig->major, ctxconfig->minor, window->context.major, window->context.minor); } glfwMakeContextCurrent((GLFWwindow*) previous); return false; } if (window->context.major >= 3) { // OpenGL 3.0+ uses a different function for extension string retrieval // We cache it here instead of in glfwExtensionSupported mostly to alert // users as early as possible that their build may be broken window->context.GetStringi = (PFNGLGETSTRINGIPROC) window->context.getProcAddress("glGetStringi"); if (!window->context.GetStringi) { _glfwInputError(GLFW_PLATFORM_ERROR, "Entry point retrieval is broken"); glfwMakeContextCurrent((GLFWwindow*) previous); return false; } } if (window->context.client == GLFW_OPENGL_API) { // Read back context flags (OpenGL 3.0 and above) if (window->context.major >= 3) { GLint flags; window->context.GetIntegerv(GL_CONTEXT_FLAGS, &flags); if (flags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) window->context.forward = true; if (flags & GL_CONTEXT_FLAG_DEBUG_BIT) window->context.debug = true; else if (glfwExtensionSupported("GL_ARB_debug_output") && ctxconfig->debug) { // HACK: This is a workaround for older drivers (pre KHR_debug) // not setting the debug bit in the context flags for // debug contexts window->context.debug = true; } if (flags & GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR) window->context.noerror = true; } // Read back OpenGL context profile (OpenGL 3.2 and above) if (window->context.major >= 4 || (window->context.major == 3 && window->context.minor >= 2)) { GLint mask; window->context.GetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask); if (mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) window->context.profile = GLFW_OPENGL_COMPAT_PROFILE; else if (mask & GL_CONTEXT_CORE_PROFILE_BIT) window->context.profile = GLFW_OPENGL_CORE_PROFILE; else if (glfwExtensionSupported("GL_ARB_compatibility")) { // HACK: This is a workaround for the compatibility profile bit // not being set in the context flags if an OpenGL 3.2+ // context was created without having requested a specific // version window->context.profile = GLFW_OPENGL_COMPAT_PROFILE; } } // Read back robustness strategy if (glfwExtensionSupported("GL_ARB_robustness")) { // NOTE: We avoid using the context flags for detection, as they are // only present from 3.0 while the extension applies from 1.1 GLint strategy; window->context.GetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &strategy); if (strategy == GL_LOSE_CONTEXT_ON_RESET_ARB) window->context.robustness = GLFW_LOSE_CONTEXT_ON_RESET; else if (strategy == GL_NO_RESET_NOTIFICATION_ARB) window->context.robustness = GLFW_NO_RESET_NOTIFICATION; } } else { // Read back robustness strategy if (glfwExtensionSupported("GL_EXT_robustness")) { // NOTE: The values of these constants match those of the OpenGL ARB // one, so we can reuse them here GLint strategy; window->context.GetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &strategy); if (strategy == GL_LOSE_CONTEXT_ON_RESET_ARB) window->context.robustness = GLFW_LOSE_CONTEXT_ON_RESET; else if (strategy == GL_NO_RESET_NOTIFICATION_ARB) window->context.robustness = GLFW_NO_RESET_NOTIFICATION; } } if (glfwExtensionSupported("GL_KHR_context_flush_control")) { GLint behavior; window->context.GetIntegerv(GL_CONTEXT_RELEASE_BEHAVIOR, &behavior); if (behavior == GL_NONE) window->context.release = GLFW_RELEASE_BEHAVIOR_NONE; else if (behavior == GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH) window->context.release = GLFW_RELEASE_BEHAVIOR_FLUSH; } // Clearing the front buffer to black to avoid garbage pixels left over from // previous uses of our bit of VRAM { PFNGLCLEARPROC glClear = (PFNGLCLEARPROC) window->context.getProcAddress("glClear"); glClear(GL_COLOR_BUFFER_BIT); window->context.swapBuffers(window); } glfwMakeContextCurrent((GLFWwindow*) previous); return true; } // Searches an extension string for the specified extension // bool _glfwStringInExtensionString(const char* string, const char* extensions) { const char* start = extensions; for (;;) { const char* where; const char* terminator; where = strstr(start, string); if (!where) return false; terminator = where + strlen(string); if (where == start || *(where - 1) == ' ') { if (*terminator == ' ' || *terminator == '\0') break; } start = terminator; } return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI void glfwMakeContextCurrent(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFWwindow* previous = _glfwPlatformGetTls(&_glfw.contextSlot); _GLFW_REQUIRE_INIT(); if (window && window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, "Cannot make current with a window that has no OpenGL or OpenGL ES context"); return; } if (previous) { if (!window || window->context.source != previous->context.source) previous->context.makeCurrent(NULL); } if (window) window->context.makeCurrent(window); } GLFWAPI GLFWwindow* glfwGetCurrentContext(void) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return _glfwPlatformGetTls(&_glfw.contextSlot); } GLFWAPI void glfwSwapBuffers(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, "Cannot swap buffers of a window that has no OpenGL or OpenGL ES context"); return; } window->context.swapBuffers(window); } GLFWAPI void glfwSwapInterval(int interval) { _GLFWwindow* window; _GLFW_REQUIRE_INIT(); window = _glfwPlatformGetTls(&_glfw.contextSlot); if (!window) { _glfwInputError(GLFW_NO_CURRENT_CONTEXT, "Cannot set swap interval without a current OpenGL or OpenGL ES context"); return; } window->context.swapInterval(interval); } GLFWAPI int glfwExtensionSupported(const char* extension) { _GLFWwindow* window; assert(extension != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(false); window = _glfwPlatformGetTls(&_glfw.contextSlot); if (!window) { _glfwInputError(GLFW_NO_CURRENT_CONTEXT, "Cannot query extension without a current OpenGL or OpenGL ES context"); return false; } if (*extension == '\0') { _glfwInputError(GLFW_INVALID_VALUE, "Extension name cannot be an empty string"); return false; } if (window->context.major >= 3) { int i; GLint count; // Check if extension is in the modern OpenGL extensions string list window->context.GetIntegerv(GL_NUM_EXTENSIONS, &count); for (i = 0; i < count; i++) { const char* en = (const char*) window->context.GetStringi(GL_EXTENSIONS, i); if (!en) { _glfwInputError(GLFW_PLATFORM_ERROR, "Extension string retrieval is broken"); return false; } if (strcmp(en, extension) == 0) return true; } } else { // Check if extension is in the old style OpenGL extensions string const char* extensions = (const char*) window->context.GetString(GL_EXTENSIONS); if (!extensions) { _glfwInputError(GLFW_PLATFORM_ERROR, "Extension string retrieval is broken"); return false; } if (_glfwStringInExtensionString(extension, extensions)) return true; } // Check if extension is in the platform-specific string return window->context.extensionSupported(extension); } GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname) { _GLFWwindow* window; assert(procname != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); window = _glfwPlatformGetTls(&_glfw.contextSlot); if (!window) { _glfwInputError(GLFW_NO_CURRENT_CONTEXT, "Cannot query entry point without a current OpenGL or OpenGL ES context"); return NULL; } return window->context.getProcAddress(procname); } kitty-0.15.0/glfw/dbus_glfw.c000066400000000000000000000270531356737523400160460ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include "internal.h" #include "dbus_glfw.h" #include "../kitty/monotonic.h" #include #include static inline void report_error(DBusError *err, const char *fmt, ...) { static char buf[1024]; va_list args; va_start(args, fmt); int n = vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); snprintf(buf + n, sizeof(buf), ". DBUS error: %s", err->message); _glfwInputError(GLFW_PLATFORM_ERROR, "%s", buf); dbus_error_free(err); } static _GLFWDBUSData *dbus_data = NULL; static DBusConnection *session_bus = NULL; bool glfw_dbus_init(_GLFWDBUSData *dbus, EventLoopData *eld) { dbus->eld = eld; dbus_data = dbus; return true; } static void on_dbus_watch_ready(int fd UNUSED, int events, void *data) { DBusWatch *watch = (DBusWatch*)data; unsigned int flags = 0; if (events & POLLERR) flags |= DBUS_WATCH_ERROR; if (events & POLLHUP) flags |= DBUS_WATCH_HANGUP; if (events & POLLIN) flags |= DBUS_WATCH_READABLE; if (events & POLLOUT) flags |= DBUS_WATCH_WRITABLE; dbus_watch_handle(watch, flags); } static inline int events_for_watch(DBusWatch *watch) { int events = 0; unsigned int flags = dbus_watch_get_flags(watch); if (flags & DBUS_WATCH_READABLE) events |= POLLIN; if (flags & DBUS_WATCH_WRITABLE) events |= POLLOUT; return events; } static dbus_bool_t add_dbus_watch(DBusWatch *watch, void *data) { id_type watch_id = addWatch(dbus_data->eld, data, dbus_watch_get_unix_fd(watch), events_for_watch(watch), dbus_watch_get_enabled(watch), on_dbus_watch_ready, watch); if (!watch_id) return FALSE; id_type *idp = malloc(sizeof(id_type)); if (!idp) return FALSE; *idp = watch_id; dbus_watch_set_data(watch, idp, free); return TRUE; } static void remove_dbus_watch(DBusWatch *watch, void *data UNUSED) { id_type *idp = dbus_watch_get_data(watch); if (idp) removeWatch(dbus_data->eld, *idp); } static void toggle_dbus_watch(DBusWatch *watch, void *data UNUSED) { id_type *idp = dbus_watch_get_data(watch); if (idp) toggleWatch(dbus_data->eld, *idp, dbus_watch_get_enabled(watch)); } static void on_dbus_timer_ready(id_type timer_id UNUSED, void *data) { if (data) { DBusTimeout *t = (DBusTimeout*)data; dbus_timeout_handle(t); } } static dbus_bool_t add_dbus_timeout(DBusTimeout *timeout, void *data) { int enabled = dbus_timeout_get_enabled(timeout) ? 1 : 0; monotonic_t interval = ms_to_monotonic_t(dbus_timeout_get_interval(timeout)); if (interval < 0) return FALSE; id_type timer_id = addTimer(dbus_data->eld, data, interval, enabled, true, on_dbus_timer_ready, timeout, NULL); if (!timer_id) return FALSE; id_type *idp = malloc(sizeof(id_type)); if (!idp) { removeTimer(dbus_data->eld, timer_id); return FALSE; } *idp = timer_id; dbus_timeout_set_data(timeout, idp, free); return TRUE; } static void remove_dbus_timeout(DBusTimeout *timeout, void *data UNUSED) { id_type *idp = dbus_timeout_get_data(timeout); if (idp) removeTimer(dbus_data->eld, *idp); } static void toggle_dbus_timeout(DBusTimeout *timeout, void *data UNUSED) { id_type *idp = dbus_timeout_get_data(timeout); if (idp) toggleTimer(dbus_data->eld, *idp, dbus_timeout_get_enabled(timeout)); } DBusConnection* glfw_dbus_connect_to(const char *path, const char* err_msg, const char *name, bool register_on_bus) { DBusError err; dbus_error_init(&err); DBusConnection *ans = dbus_connection_open_private(path, &err); if (!ans) { report_error(&err, err_msg); return NULL; } dbus_connection_set_exit_on_disconnect(ans, FALSE); dbus_error_free(&err); if (register_on_bus) { if (!dbus_bus_register(ans, &err)) { report_error(&err, err_msg); return NULL; } } if (!dbus_connection_set_watch_functions(ans, add_dbus_watch, remove_dbus_watch, toggle_dbus_watch, (void*)name, NULL)) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to set DBUS watches on connection to: %s", path); dbus_connection_close(ans); dbus_connection_unref(ans); return NULL; } if (!dbus_connection_set_timeout_functions(ans, add_dbus_timeout, remove_dbus_timeout, toggle_dbus_timeout, (void*)name, NULL)) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to set DBUS timeout functions on connection to: %s", path); dbus_connection_close(ans); dbus_connection_unref(ans); return NULL; } return ans; } void glfw_dbus_dispatch(DBusConnection *conn) { while(dbus_connection_dispatch(conn) == DBUS_DISPATCH_DATA_REMAINS); } void glfw_dbus_session_bus_dispatch() { if (session_bus) glfw_dbus_dispatch(session_bus); } void glfw_dbus_terminate(_GLFWDBUSData *dbus UNUSED) { if (dbus_data) { dbus_data->eld = NULL; dbus_data = NULL; } if (session_bus) { dbus_connection_unref(session_bus); session_bus = NULL; } } void glfw_dbus_close_connection(DBusConnection *conn) { dbus_connection_close(conn); dbus_connection_unref(conn); } bool glfw_dbus_get_args(DBusMessage *msg, const char *failmsg, ...) { DBusError err; dbus_error_init(&err); va_list ap; va_start(ap, failmsg); int firstarg = va_arg(ap, int); bool ret = dbus_message_get_args_valist(msg, &err, firstarg, ap) ? true : false; va_end(ap); if (!ret) report_error(&err, failmsg); return ret; } typedef struct { dbus_pending_callback callback; void *user_data; } MethodResponse; static const char* format_message_error(DBusError *err) { static char buf[1024]; snprintf(buf, sizeof(buf), "[%s] %s", err->name ? err->name : "", err->message); return buf; } static void method_reply_received(DBusPendingCall *pending, void *user_data) { MethodResponse *res = (MethodResponse*)user_data; DBusMessage *msg = dbus_pending_call_steal_reply(pending); if (msg) { DBusError err; dbus_error_init(&err); if (dbus_set_error_from_message(&err, msg)) res->callback(NULL, format_message_error(&err), res->user_data); else res->callback(msg, NULL, res->user_data); dbus_message_unref(msg); } } bool call_method_with_msg(DBusConnection *conn, DBusMessage *msg, int timeout, dbus_pending_callback callback, void *user_data) { bool retval = false; #define REPORT(errs) _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to call DBUS method: node=%s path=%s interface=%s method=%s, with error: %s", dbus_message_get_destination(msg), dbus_message_get_path(msg), dbus_message_get_interface(msg), dbus_message_get_member(msg), errs) if (callback) { DBusPendingCall *pending = NULL; if (dbus_connection_send_with_reply(conn, msg, &pending, timeout)) { MethodResponse *res = malloc(sizeof(MethodResponse)); if (!res) return false; res->callback = callback; res->user_data = user_data; dbus_pending_call_set_notify(pending, method_reply_received, res, free); retval = true; } else { REPORT("out of memory"); } } else { if (dbus_connection_send(conn, msg, NULL)) { retval = true; } else { REPORT("out of memory"); } } return retval; #undef REPORT } static bool call_method(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, int timeout, dbus_pending_callback callback, void *user_data, va_list ap) { if (!conn) return false; DBusMessage *msg = dbus_message_new_method_call(node, path, interface, method); if (!msg) return false; bool retval = false; int firstarg = va_arg(ap, int); if ((firstarg == DBUS_TYPE_INVALID) || dbus_message_append_args_valist(msg, firstarg, ap)) { retval = call_method_with_msg(conn, msg, timeout, callback, user_data); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to call DBUS method: %s on node: %s and interface: %s could not add arguments", method, node, interface); } dbus_message_unref(msg); return retval; } bool glfw_dbus_call_method_with_reply(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, int timeout, dbus_pending_callback callback, void* user_data, ...) { bool retval; va_list ap; va_start(ap, user_data); retval = call_method(conn, node, path, interface, method, timeout, callback, user_data, ap); va_end(ap); return retval; } bool glfw_dbus_call_method_no_reply(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...) { bool retval; va_list ap; va_start(ap, method); retval = call_method(conn, node, path, interface, method, DBUS_TIMEOUT_USE_DEFAULT, NULL, NULL, ap); va_end(ap); return retval; } int glfw_dbus_match_signal(DBusMessage *msg, const char *interface, ...) { va_list ap; va_start(ap, interface); int ans = -1, num = -1; while(1) { num++; const char *name = va_arg(ap, const char*); if (!name) break; if (dbus_message_is_signal(msg, interface, name)) { ans = num; break; } } va_end(ap); return ans; } static void glfw_dbus_connect_to_session_bus(void) { DBusError error; dbus_error_init(&error); if (session_bus) { dbus_connection_unref(session_bus); } session_bus = dbus_bus_get(DBUS_BUS_SESSION, &error); if (dbus_error_is_set(&error)) { report_error(&error, "Failed to connect to DBUS session bus"); session_bus = NULL; return; } static const char *name = "session-bus"; if (!dbus_connection_set_watch_functions(session_bus, add_dbus_watch, remove_dbus_watch, toggle_dbus_watch, (void*)name, NULL)) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to set DBUS watches on connection to: %s", name); dbus_connection_close(session_bus); dbus_connection_unref(session_bus); return; } if (!dbus_connection_set_timeout_functions(session_bus, add_dbus_timeout, remove_dbus_timeout, toggle_dbus_timeout, (void*)name, NULL)) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to set DBUS timeout functions on connection to: %s", name); dbus_connection_close(session_bus); dbus_connection_unref(session_bus); return; } } DBusConnection * glfw_dbus_session_bus() { if (!session_bus) glfw_dbus_connect_to_session_bus(); return session_bus; } kitty-0.15.0/glfw/dbus_glfw.h000066400000000000000000000046121356737523400160470ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #pragma once #include #include "backend_utils.h" typedef void(*dbus_pending_callback)(DBusMessage *msg, const char* err, void* data); typedef struct { EventLoopData* eld; } _GLFWDBUSData; bool glfw_dbus_init(_GLFWDBUSData *dbus, EventLoopData *eld); void glfw_dbus_terminate(_GLFWDBUSData *dbus); DBusConnection* glfw_dbus_connect_to(const char *path, const char* err_msg, const char* name, bool register_on_bus); void glfw_dbus_close_connection(DBusConnection *conn); bool call_method_with_msg(DBusConnection *conn, DBusMessage *msg, int timeout, dbus_pending_callback callback, void *user_data); bool glfw_dbus_call_method_no_reply(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...); bool glfw_dbus_call_method_with_reply(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, int timeout_ms, dbus_pending_callback callback, void *user_data, ...); void glfw_dbus_dispatch(DBusConnection *); void glfw_dbus_session_bus_dispatch(void); bool glfw_dbus_get_args(DBusMessage *msg, const char *failmsg, ...); int glfw_dbus_match_signal(DBusMessage *msg, const char *interface, ...); DBusConnection* glfw_dbus_session_bus(void); kitty-0.15.0/glfw/egl_context.c000066400000000000000000000576571356737523400164220ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 EGL - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include #include #include #include // Return a description of the specified EGL error // static const char* getEGLErrorString(EGLint error) { switch (error) { case EGL_SUCCESS: return "Success"; case EGL_NOT_INITIALIZED: return "EGL is not or could not be initialized"; case EGL_BAD_ACCESS: return "EGL cannot access a requested resource"; case EGL_BAD_ALLOC: return "EGL failed to allocate resources for the requested operation"; case EGL_BAD_ATTRIBUTE: return "An unrecognized attribute or attribute value was passed in the attribute list"; case EGL_BAD_CONTEXT: return "An EGLContext argument does not name a valid EGL rendering context"; case EGL_BAD_CONFIG: return "An EGLConfig argument does not name a valid EGL frame buffer configuration"; case EGL_BAD_CURRENT_SURFACE: return "The current surface of the calling thread is a window, pixel buffer or pixmap that is no longer valid"; case EGL_BAD_DISPLAY: return "An EGLDisplay argument does not name a valid EGL display connection"; case EGL_BAD_SURFACE: return "An EGLSurface argument does not name a valid surface configured for GL rendering"; case EGL_BAD_MATCH: return "Arguments are inconsistent"; case EGL_BAD_PARAMETER: return "One or more argument values are invalid"; case EGL_BAD_NATIVE_PIXMAP: return "A NativePixmapType argument does not refer to a valid native pixmap"; case EGL_BAD_NATIVE_WINDOW: return "A NativeWindowType argument does not refer to a valid native window"; case EGL_CONTEXT_LOST: return "The application must destroy all contexts and reinitialise"; default: return "ERROR: UNKNOWN EGL ERROR"; } } // Returns the specified attribute of the specified EGLConfig // static int getEGLConfigAttrib(EGLConfig config, int attrib) { int value; eglGetConfigAttrib(_glfw.egl.display, config, attrib, &value); return value; } // Return the EGLConfig most closely matching the specified hints // static bool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* desired, EGLConfig* result) { EGLConfig* nativeConfigs; _GLFWfbconfig* usableConfigs; const _GLFWfbconfig* closest; int i, nativeCount, usableCount; eglGetConfigs(_glfw.egl.display, NULL, 0, &nativeCount); if (!nativeCount) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: No EGLConfigs returned"); return false; } nativeConfigs = calloc(nativeCount, sizeof(EGLConfig)); eglGetConfigs(_glfw.egl.display, nativeConfigs, nativeCount, &nativeCount); usableConfigs = calloc(nativeCount, sizeof(_GLFWfbconfig)); usableCount = 0; for (i = 0; i < nativeCount; i++) { const EGLConfig n = nativeConfigs[i]; _GLFWfbconfig* u = usableConfigs + usableCount; // Only consider RGB(A) EGLConfigs if (getEGLConfigAttrib(n, EGL_COLOR_BUFFER_TYPE) != EGL_RGB_BUFFER) continue; // Only consider window EGLConfigs if (!(getEGLConfigAttrib(n, EGL_SURFACE_TYPE) & EGL_WINDOW_BIT)) continue; #if defined(_GLFW_X11) XVisualInfo vi = {0}; // Only consider EGLConfigs with associated Visuals vi.visualid = getEGLConfigAttrib(n, EGL_NATIVE_VISUAL_ID); if (!vi.visualid) continue; if (desired->transparent) { int count; XVisualInfo* vis = XGetVisualInfo(_glfw.x11.display, VisualIDMask, &vi, &count); if (vis) { u->transparent = _glfwIsVisualTransparentX11(vis[0].visual); XFree(vis); } } #endif // _GLFW_X11 if (ctxconfig->client == GLFW_OPENGL_ES_API) { if (ctxconfig->major == 1) { if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_ES_BIT)) continue; } else { if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_ES2_BIT)) continue; } } else if (ctxconfig->client == GLFW_OPENGL_API) { if (!(getEGLConfigAttrib(n, EGL_RENDERABLE_TYPE) & EGL_OPENGL_BIT)) continue; } u->redBits = getEGLConfigAttrib(n, EGL_RED_SIZE); u->greenBits = getEGLConfigAttrib(n, EGL_GREEN_SIZE); u->blueBits = getEGLConfigAttrib(n, EGL_BLUE_SIZE); u->alphaBits = getEGLConfigAttrib(n, EGL_ALPHA_SIZE); u->depthBits = getEGLConfigAttrib(n, EGL_DEPTH_SIZE); u->stencilBits = getEGLConfigAttrib(n, EGL_STENCIL_SIZE); u->samples = getEGLConfigAttrib(n, EGL_SAMPLES); u->doublebuffer = true; u->handle = (uintptr_t) n; usableCount++; } closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount); if (closest) *result = (EGLConfig) closest->handle; free(nativeConfigs); free(usableConfigs); return closest != NULL; } static void makeContextCurrentEGL(_GLFWwindow* window) { if (window) { if (!eglMakeCurrent(_glfw.egl.display, window->context.egl.surface, window->context.egl.surface, window->context.egl.handle)) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: Failed to make context current: %s", getEGLErrorString(eglGetError())); return; } } else { if (!eglMakeCurrent(_glfw.egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: Failed to clear current context: %s", getEGLErrorString(eglGetError())); return; } } _glfwPlatformSetTls(&_glfw.contextSlot, window); } static void swapBuffersEGL(_GLFWwindow* window) { if (window != _glfwPlatformGetTls(&_glfw.contextSlot)) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: The context must be current on the calling thread when swapping buffers"); return; } eglSwapBuffers(_glfw.egl.display, window->context.egl.surface); } static void swapIntervalEGL(int interval) { eglSwapInterval(_glfw.egl.display, interval); } static int extensionSupportedEGL(const char* extension) { const char* extensions = eglQueryString(_glfw.egl.display, EGL_EXTENSIONS); if (extensions) { if (_glfwStringInExtensionString(extension, extensions)) return true; } return false; } static GLFWglproc getProcAddressEGL(const char* procname) { _GLFWwindow* window = _glfwPlatformGetTls(&_glfw.contextSlot); if (window->context.egl.client) { GLFWglproc proc = NULL; glfw_dlsym(proc, window->context.egl.client, procname); if (proc) return proc; } return eglGetProcAddress(procname); } static void destroyContextEGL(_GLFWwindow* window) { #if defined(_GLFW_X11) // NOTE: Do not unload libGL.so.1 while the X11 display is still open, // as it will make XCloseDisplay segfault if (window->context.client != GLFW_OPENGL_API) #endif // _GLFW_X11 { if (window->context.egl.client) { _glfw_dlclose(window->context.egl.client); window->context.egl.client = NULL; } } if (window->context.egl.surface) { eglDestroySurface(_glfw.egl.display, window->context.egl.surface); window->context.egl.surface = EGL_NO_SURFACE; } if (window->context.egl.handle) { eglDestroyContext(_glfw.egl.display, window->context.egl.handle); window->context.egl.handle = EGL_NO_CONTEXT; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialize EGL // bool _glfwInitEGL(void) { int i; const char* sonames[] = { #if defined(_GLFW_EGL_LIBRARY) _GLFW_EGL_LIBRARY, #elif defined(_GLFW_WIN32) "libEGL.dll", "EGL.dll", #elif defined(_GLFW_COCOA) "libEGL.dylib", #elif defined(__CYGWIN__) "libEGL-1.so", #else "libEGL.so.1", #endif NULL }; if (_glfw.egl.handle) return true; for (i = 0; sonames[i]; i++) { _glfw.egl.handle = _glfw_dlopen(sonames[i]); if (_glfw.egl.handle) break; } if (!_glfw.egl.handle) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Library not found"); return false; } _glfw.egl.prefix = (strncmp(sonames[i], "lib", 3) == 0); glfw_dlsym(_glfw.egl.GetConfigAttrib, _glfw.egl.handle, "eglGetConfigAttrib"); glfw_dlsym(_glfw.egl.GetConfigs, _glfw.egl.handle, "eglGetConfigs"); glfw_dlsym(_glfw.egl.GetDisplay, _glfw.egl.handle, "eglGetDisplay"); glfw_dlsym(_glfw.egl.GetError, _glfw.egl.handle, "eglGetError"); glfw_dlsym(_glfw.egl.Initialize, _glfw.egl.handle, "eglInitialize"); glfw_dlsym(_glfw.egl.Terminate, _glfw.egl.handle, "eglTerminate"); glfw_dlsym(_glfw.egl.BindAPI, _glfw.egl.handle, "eglBindAPI"); glfw_dlsym(_glfw.egl.CreateContext, _glfw.egl.handle, "eglCreateContext"); glfw_dlsym(_glfw.egl.DestroySurface, _glfw.egl.handle, "eglDestroySurface"); glfw_dlsym(_glfw.egl.DestroyContext, _glfw.egl.handle, "eglDestroyContext"); glfw_dlsym(_glfw.egl.CreateWindowSurface, _glfw.egl.handle, "eglCreateWindowSurface"); glfw_dlsym(_glfw.egl.MakeCurrent, _glfw.egl.handle, "eglMakeCurrent"); glfw_dlsym(_glfw.egl.SwapBuffers, _glfw.egl.handle, "eglSwapBuffers"); glfw_dlsym(_glfw.egl.SwapInterval, _glfw.egl.handle, "eglSwapInterval"); glfw_dlsym(_glfw.egl.QueryString, _glfw.egl.handle, "eglQueryString"); glfw_dlsym(_glfw.egl.GetProcAddress, _glfw.egl.handle, "eglGetProcAddress"); if (!_glfw.egl.GetConfigAttrib || !_glfw.egl.GetConfigs || !_glfw.egl.GetDisplay || !_glfw.egl.GetError || !_glfw.egl.Initialize || !_glfw.egl.Terminate || !_glfw.egl.BindAPI || !_glfw.egl.CreateContext || !_glfw.egl.DestroySurface || !_glfw.egl.DestroyContext || !_glfw.egl.CreateWindowSurface || !_glfw.egl.MakeCurrent || !_glfw.egl.SwapBuffers || !_glfw.egl.SwapInterval || !_glfw.egl.QueryString || !_glfw.egl.GetProcAddress) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: Failed to load required entry points"); _glfwTerminateEGL(); return false; } _glfw.egl.display = eglGetDisplay(_GLFW_EGL_NATIVE_DISPLAY); if (_glfw.egl.display == EGL_NO_DISPLAY) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Failed to get EGL display: %s", getEGLErrorString(eglGetError())); _glfwTerminateEGL(); return false; } if (!eglInitialize(_glfw.egl.display, &_glfw.egl.major, &_glfw.egl.minor)) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Failed to initialize EGL: %s", getEGLErrorString(eglGetError())); _glfwTerminateEGL(); return false; } _glfw.egl.KHR_create_context = extensionSupportedEGL("EGL_KHR_create_context"); _glfw.egl.KHR_create_context_no_error = extensionSupportedEGL("EGL_KHR_create_context_no_error"); _glfw.egl.KHR_gl_colorspace = extensionSupportedEGL("EGL_KHR_gl_colorspace"); _glfw.egl.KHR_get_all_proc_addresses = extensionSupportedEGL("EGL_KHR_get_all_proc_addresses"); _glfw.egl.KHR_context_flush_control = extensionSupportedEGL("EGL_KHR_context_flush_control"); return true; } // Terminate EGL // void _glfwTerminateEGL(void) { if (_glfw.egl.display) { eglTerminate(_glfw.egl.display); _glfw.egl.display = EGL_NO_DISPLAY; } if (_glfw.egl.handle) { _glfw_dlclose(_glfw.egl.handle); _glfw.egl.handle = NULL; } } #define setAttrib(a, v) \ { \ assert(((size_t) index + 1) < sizeof(attribs) / sizeof(attribs[0])); \ attribs[index++] = a; \ attribs[index++] = v; \ } // Create the OpenGL or OpenGL ES context // bool _glfwCreateContextEGL(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { EGLint attribs[40]; EGLConfig config; EGLContext share = NULL; int index = 0; if (!_glfw.egl.display) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: API not available"); return false; } if (ctxconfig->share) share = ctxconfig->share->context.egl.handle; if (!chooseEGLConfig(ctxconfig, fbconfig, &config)) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "EGL: Failed to find a suitable EGLConfig"); return false; } if (ctxconfig->client == GLFW_OPENGL_ES_API) { if (!eglBindAPI(EGL_OPENGL_ES_API)) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Failed to bind OpenGL ES: %s", getEGLErrorString(eglGetError())); return false; } } else { if (!eglBindAPI(EGL_OPENGL_API)) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Failed to bind OpenGL: %s", getEGLErrorString(eglGetError())); return false; } } if (_glfw.egl.KHR_create_context) { int mask = 0, flags = 0; if (ctxconfig->client == GLFW_OPENGL_API) { if (ctxconfig->forward) flags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR; if (ctxconfig->profile == GLFW_OPENGL_CORE_PROFILE) mask |= EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; else if (ctxconfig->profile == GLFW_OPENGL_COMPAT_PROFILE) mask |= EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR; } if (ctxconfig->debug) flags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR; if (ctxconfig->robustness) { if (ctxconfig->robustness == GLFW_NO_RESET_NOTIFICATION) { setAttrib(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_NO_RESET_NOTIFICATION_KHR); } else if (ctxconfig->robustness == GLFW_LOSE_CONTEXT_ON_RESET) { setAttrib(EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR); } flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR; } if (ctxconfig->noerror) { if (_glfw.egl.KHR_create_context_no_error) setAttrib(EGL_CONTEXT_OPENGL_NO_ERROR_KHR, true); } if (ctxconfig->major != 1 || ctxconfig->minor != 0) { setAttrib(EGL_CONTEXT_MAJOR_VERSION_KHR, ctxconfig->major); setAttrib(EGL_CONTEXT_MINOR_VERSION_KHR, ctxconfig->minor); } if (mask) setAttrib(EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, mask); if (flags) setAttrib(EGL_CONTEXT_FLAGS_KHR, flags); } else { if (ctxconfig->client == GLFW_OPENGL_ES_API) setAttrib(EGL_CONTEXT_CLIENT_VERSION, ctxconfig->major); } if (_glfw.egl.KHR_context_flush_control) { if (ctxconfig->release == GLFW_RELEASE_BEHAVIOR_NONE) { setAttrib(EGL_CONTEXT_RELEASE_BEHAVIOR_KHR, EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR); } else if (ctxconfig->release == GLFW_RELEASE_BEHAVIOR_FLUSH) { setAttrib(EGL_CONTEXT_RELEASE_BEHAVIOR_KHR, EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR); } } setAttrib(EGL_NONE, EGL_NONE); window->context.egl.handle = eglCreateContext(_glfw.egl.display, config, share, attribs); if (window->context.egl.handle == EGL_NO_CONTEXT) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "EGL: Failed to create context: %s", getEGLErrorString(eglGetError())); return false; } // Set up attributes for surface creation { int index = 0; if (fbconfig->sRGB) { if (_glfw.egl.KHR_gl_colorspace) setAttrib(EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_SRGB_KHR); } setAttrib(EGL_NONE, EGL_NONE); } window->context.egl.surface = eglCreateWindowSurface(_glfw.egl.display, config, _GLFW_EGL_NATIVE_WINDOW, attribs); if (window->context.egl.surface == EGL_NO_SURFACE) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: Failed to create window surface: %s", getEGLErrorString(eglGetError())); return false; } window->context.egl.config = config; EGLint a = EGL_MIN_SWAP_INTERVAL; if (!eglGetConfigAttrib(_glfw.egl.display, config, a, &a)) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "EGL: could not check for non-blocking buffer swap with error: %s", getEGLErrorString(eglGetError())); } else { if (a > 0) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "EGL: non-blocking swap buffers not available, minimum swap interval is: %d", a); } } // Load the appropriate client library if (!_glfw.egl.KHR_get_all_proc_addresses) { int i; const char** sonames; const char* es1sonames[] = { #if defined(_GLFW_GLESV1_LIBRARY) _GLFW_GLESV1_LIBRARY, #elif defined(_GLFW_WIN32) "GLESv1_CM.dll", "libGLES_CM.dll", #elif defined(_GLFW_COCOA) "libGLESv1_CM.dylib", #else "libGLESv1_CM.so.1", "libGLES_CM.so.1", #endif NULL }; const char* es2sonames[] = { #if defined(_GLFW_GLESV2_LIBRARY) _GLFW_GLESV2_LIBRARY, #elif defined(_GLFW_WIN32) "GLESv2.dll", "libGLESv2.dll", #elif defined(_GLFW_COCOA) "libGLESv2.dylib", #elif defined(__CYGWIN__) "libGLESv2-2.so", #else "libGLESv2.so.2", #endif NULL }; const char* glsonames[] = { #if defined(_GLFW_OPENGL_LIBRARY) _GLFW_OPENGL_LIBRARY, #elif defined(_GLFW_WIN32) #elif defined(_GLFW_COCOA) #else "libGL.so.1", #endif NULL }; if (ctxconfig->client == GLFW_OPENGL_ES_API) { if (ctxconfig->major == 1) sonames = es1sonames; else sonames = es2sonames; } else sonames = glsonames; for (i = 0; sonames[i]; i++) { // HACK: Match presence of lib prefix to increase chance of finding // a matching pair in the jungle that is Win32 EGL/GLES if (_glfw.egl.prefix != (strncmp(sonames[i], "lib", 3) == 0)) continue; window->context.egl.client = _glfw_dlopen(sonames[i]); if (window->context.egl.client) break; } if (!window->context.egl.client) { _glfwInputError(GLFW_API_UNAVAILABLE, "EGL: Failed to load client library"); return false; } } window->context.makeCurrent = makeContextCurrentEGL; window->context.swapBuffers = swapBuffersEGL; window->context.swapInterval = swapIntervalEGL; window->context.extensionSupported = extensionSupportedEGL; window->context.getProcAddress = getProcAddressEGL; window->context.destroy = destroyContextEGL; return true; } #undef setAttrib // Returns the Visual and depth of the chosen EGLConfig // #if defined(_GLFW_X11) bool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig UNUSED, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig, Visual** visual, int* depth) { XVisualInfo* result; XVisualInfo desired; EGLConfig native; EGLint visualID = 0, count = 0; const long vimask = VisualScreenMask | VisualIDMask; if (!chooseEGLConfig(ctxconfig, fbconfig, &native)) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "EGL: Failed to find a suitable EGLConfig"); return false; } eglGetConfigAttrib(_glfw.egl.display, native, EGL_NATIVE_VISUAL_ID, &visualID); desired.screen = _glfw.x11.screen; desired.visualid = visualID; result = XGetVisualInfo(_glfw.x11.display, vimask, &desired, &count); if (!result) { _glfwInputError(GLFW_PLATFORM_ERROR, "EGL: Failed to retrieve Visual for EGLConfig"); return false; } *visual = result->visual; *depth = result->depth; XFree(result); return true; } #endif // _GLFW_X11 ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI EGLDisplay glfwGetEGLDisplay(void) { _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_DISPLAY); return _glfw.egl.display; } GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_CONTEXT); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return EGL_NO_CONTEXT; } return window->context.egl.handle; } GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_SURFACE); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return EGL_NO_SURFACE; } return window->context.egl.surface; } kitty-0.15.0/glfw/egl_context.h000066400000000000000000000204661356737523400164130ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 EGL - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #if defined(_GLFW_USE_EGLPLATFORM_H) #include #elif defined(_GLFW_WIN32) #define EGLAPIENTRY __stdcall typedef HDC EGLNativeDisplayType; typedef HWND EGLNativeWindowType; #elif defined(_GLFW_COCOA) #define EGLAPIENTRY typedef void* EGLNativeDisplayType; typedef id EGLNativeWindowType; #elif defined(_GLFW_X11) #define EGLAPIENTRY typedef Display* EGLNativeDisplayType; typedef Window EGLNativeWindowType; #elif defined(_GLFW_WAYLAND) #define EGLAPIENTRY typedef struct wl_display* EGLNativeDisplayType; typedef struct wl_egl_window* EGLNativeWindowType; #else #error "No supported EGL platform selected" #endif #define EGL_SUCCESS 0x3000 #define EGL_NOT_INITIALIZED 0x3001 #define EGL_BAD_ACCESS 0x3002 #define EGL_BAD_ALLOC 0x3003 #define EGL_BAD_ATTRIBUTE 0x3004 #define EGL_BAD_CONFIG 0x3005 #define EGL_BAD_CONTEXT 0x3006 #define EGL_BAD_CURRENT_SURFACE 0x3007 #define EGL_BAD_DISPLAY 0x3008 #define EGL_BAD_MATCH 0x3009 #define EGL_BAD_NATIVE_PIXMAP 0x300a #define EGL_BAD_NATIVE_WINDOW 0x300b #define EGL_BAD_PARAMETER 0x300c #define EGL_BAD_SURFACE 0x300d #define EGL_CONTEXT_LOST 0x300e #define EGL_COLOR_BUFFER_TYPE 0x303f #define EGL_RGB_BUFFER 0x308e #define EGL_SURFACE_TYPE 0x3033 #define EGL_WINDOW_BIT 0x0004 #define EGL_RENDERABLE_TYPE 0x3040 #define EGL_OPENGL_ES_BIT 0x0001 #define EGL_OPENGL_ES2_BIT 0x0004 #define EGL_OPENGL_BIT 0x0008 #define EGL_ALPHA_SIZE 0x3021 #define EGL_BLUE_SIZE 0x3022 #define EGL_GREEN_SIZE 0x3023 #define EGL_RED_SIZE 0x3024 #define EGL_DEPTH_SIZE 0x3025 #define EGL_STENCIL_SIZE 0x3026 #define EGL_SAMPLES 0x3031 #define EGL_OPENGL_ES_API 0x30a0 #define EGL_OPENGL_API 0x30a2 #define EGL_NONE 0x3038 #define EGL_EXTENSIONS 0x3055 #define EGL_CONTEXT_CLIENT_VERSION 0x3098 #define EGL_NATIVE_VISUAL_ID 0x302e #define EGL_NO_SURFACE ((EGLSurface) 0) #define EGL_NO_DISPLAY ((EGLDisplay) 0) #define EGL_NO_CONTEXT ((EGLContext) 0) #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType) 0) #define EGL_MIN_SWAP_INTERVAL 0x303B #define EGL_MAX_SWAP_INTERVAL 0x303C #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31bd #define EGL_NO_RESET_NOTIFICATION_KHR 0x31be #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31bf #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 #define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30fb #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30fd #define EGL_CONTEXT_FLAGS_KHR 0x30fc #define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31b3 #define EGL_GL_COLORSPACE_KHR 0x309d #define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 #define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 #define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 #define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 typedef int EGLint; typedef unsigned int EGLBoolean; typedef unsigned int EGLenum; typedef void* EGLConfig; typedef void* EGLContext; typedef void* EGLDisplay; typedef void* EGLSurface; // EGL function pointer typedefs typedef EGLBoolean (EGLAPIENTRY * PFN_eglGetConfigAttrib)(EGLDisplay,EGLConfig,EGLint,EGLint*); typedef EGLBoolean (EGLAPIENTRY * PFN_eglGetConfigs)(EGLDisplay,EGLConfig*,EGLint,EGLint*); typedef EGLDisplay (EGLAPIENTRY * PFN_eglGetDisplay)(EGLNativeDisplayType); typedef EGLint (EGLAPIENTRY * PFN_eglGetError)(void); typedef EGLBoolean (EGLAPIENTRY * PFN_eglInitialize)(EGLDisplay,EGLint*,EGLint*); typedef EGLBoolean (EGLAPIENTRY * PFN_eglTerminate)(EGLDisplay); typedef EGLBoolean (EGLAPIENTRY * PFN_eglBindAPI)(EGLenum); typedef EGLContext (EGLAPIENTRY * PFN_eglCreateContext)(EGLDisplay,EGLConfig,EGLContext,const EGLint*); typedef EGLBoolean (EGLAPIENTRY * PFN_eglDestroySurface)(EGLDisplay,EGLSurface); typedef EGLBoolean (EGLAPIENTRY * PFN_eglDestroyContext)(EGLDisplay,EGLContext); typedef EGLSurface (EGLAPIENTRY * PFN_eglCreateWindowSurface)(EGLDisplay,EGLConfig,EGLNativeWindowType,const EGLint*); typedef EGLBoolean (EGLAPIENTRY * PFN_eglMakeCurrent)(EGLDisplay,EGLSurface,EGLSurface,EGLContext); typedef EGLBoolean (EGLAPIENTRY * PFN_eglSwapBuffers)(EGLDisplay,EGLSurface); typedef EGLBoolean (EGLAPIENTRY * PFN_eglSwapInterval)(EGLDisplay,EGLint); typedef const char* (EGLAPIENTRY * PFN_eglQueryString)(EGLDisplay,EGLint); typedef GLFWglproc (EGLAPIENTRY * PFN_eglGetProcAddress)(const char*); #define eglGetConfigAttrib _glfw.egl.GetConfigAttrib #define eglGetConfigs _glfw.egl.GetConfigs #define eglGetDisplay _glfw.egl.GetDisplay #define eglGetError _glfw.egl.GetError #define eglInitialize _glfw.egl.Initialize #define eglTerminate _glfw.egl.Terminate #define eglBindAPI _glfw.egl.BindAPI #define eglCreateContext _glfw.egl.CreateContext #define eglDestroySurface _glfw.egl.DestroySurface #define eglDestroyContext _glfw.egl.DestroyContext #define eglCreateWindowSurface _glfw.egl.CreateWindowSurface #define eglMakeCurrent _glfw.egl.MakeCurrent #define eglSwapBuffers _glfw.egl.SwapBuffers #define eglSwapInterval _glfw.egl.SwapInterval #define eglQueryString _glfw.egl.QueryString #define eglGetProcAddress _glfw.egl.GetProcAddress #define _GLFW_EGL_CONTEXT_STATE _GLFWcontextEGL egl #define _GLFW_EGL_LIBRARY_CONTEXT_STATE _GLFWlibraryEGL egl // EGL-specific per-context data // typedef struct _GLFWcontextEGL { EGLConfig config; EGLContext handle; EGLSurface surface; void* client; } _GLFWcontextEGL; // EGL-specific global data // typedef struct _GLFWlibraryEGL { EGLDisplay display; EGLint major, minor; bool prefix; bool KHR_create_context; bool KHR_create_context_no_error; bool KHR_gl_colorspace; bool KHR_get_all_proc_addresses; bool KHR_context_flush_control; void* handle; PFN_eglGetConfigAttrib GetConfigAttrib; PFN_eglGetConfigs GetConfigs; PFN_eglGetDisplay GetDisplay; PFN_eglGetError GetError; PFN_eglInitialize Initialize; PFN_eglTerminate Terminate; PFN_eglBindAPI BindAPI; PFN_eglCreateContext CreateContext; PFN_eglDestroySurface DestroySurface; PFN_eglDestroyContext DestroyContext; PFN_eglCreateWindowSurface CreateWindowSurface; PFN_eglMakeCurrent MakeCurrent; PFN_eglSwapBuffers SwapBuffers; PFN_eglSwapInterval SwapInterval; PFN_eglQueryString QueryString; PFN_eglGetProcAddress GetProcAddress; } _GLFWlibraryEGL; bool _glfwInitEGL(void); void _glfwTerminateEGL(void); bool _glfwCreateContextEGL(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig); #if defined(_GLFW_X11) bool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig, Visual** visual, int* depth); #endif /*_GLFW_X11*/ kitty-0.15.0/glfw/glfw.py000077500000000000000000000225351356737523400152420ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import json import os import re import sys _plat = sys.platform.lower() is_linux = 'linux' in _plat base = os.path.dirname(os.path.abspath(__file__)) def wayland_protocol_file_name(base, ext='c'): base = os.path.basename(base).rpartition('.')[0] return 'wayland-{}-client-protocol.{}'.format(base, ext) def init_env(env, pkg_config, at_least_version, test_compile, module='x11'): ans = env.copy() ans.cflags.append('-fpic') ans.cppflags.append('-D_GLFW_' + module.upper()) ans.cppflags.append('-D_GLFW_BUILD_DLL') with open(os.path.join(base, 'source-info.json')) as f: sinfo = json.load(f) module_sources = list(sinfo[module]['sources']) if module in ('x11', 'wayland'): remove = 'null_joystick.c' if is_linux else 'linux_joystick.c' module_sources.remove(remove) ans.sources = sinfo['common']['sources'] + module_sources ans.all_headers = [x for x in os.listdir(base) if x.endswith('.h')] if module in ('x11', 'wayland'): ans.cflags.append('-pthread') ans.ldpaths.append('-pthread') ans.ldpaths.extend('-lrt -lm -ldl'.split()) at_least_version('xkbcommon', 0, 5) if module == 'x11': for dep in 'x11 xrandr xinerama xcursor xkbcommon xkbcommon-x11 x11-xcb dbus-1'.split(): ans.cflags.extend(pkg_config(dep, '--cflags-only-I')) ans.ldpaths.extend(pkg_config(dep, '--libs')) elif module == 'cocoa': ans.cppflags.append('-DGL_SILENCE_DEPRECATION') for f in 'Cocoa IOKit CoreFoundation CoreVideo'.split(): ans.ldpaths.extend(('-framework', f)) elif module == 'wayland': at_least_version('wayland-protocols', *sinfo['wayland_protocols']) ans.wayland_packagedir = os.path.abspath(pkg_config('wayland-protocols', '--variable=pkgdatadir')[0]) ans.wayland_scanner = os.path.abspath(pkg_config('wayland-scanner', '--variable=wayland_scanner')[0]) scanner_version = tuple(map(int, pkg_config('wayland-scanner', '--modversion')[0].strip().split('.'))) ans.wayland_scanner_code = 'private-code' if scanner_version >= (1, 14, 91) else 'code' ans.wayland_protocols = tuple(sinfo[module]['protocols']) for p in ans.wayland_protocols: ans.sources.append(wayland_protocol_file_name(p)) ans.all_headers.append(wayland_protocol_file_name(p, 'h')) for dep in 'wayland-egl wayland-client wayland-cursor xkbcommon dbus-1'.split(): ans.cflags.extend(pkg_config(dep, '--cflags-only-I')) ans.ldpaths.extend(pkg_config(dep, '--libs')) has_memfd_create = test_compile(env.cc, '-Werror', src='''#define _GNU_SOURCE #include #include int main(void) { return syscall(__NR_memfd_create, "test", 0); }''') if has_memfd_create: ans.cppflags.append('-DHAS_MEMFD_CREATE') return ans def build_wayland_protocols(env, Command, parallel_run, emphasis, newer, dest_dir): items = [] for protocol in env.wayland_protocols: src = os.path.join(env.wayland_packagedir, protocol) if not os.path.exists(src): raise SystemExit('The wayland-protocols package on your system is missing the {} protocol definition file'.format(protocol)) for ext in 'hc': dest = wayland_protocol_file_name(src, ext) dest = os.path.join(dest_dir, dest) if newer(dest, src): q = 'client-header' if ext == 'h' else env.wayland_scanner_code items.append(Command( 'Generating {} ...'.format(emphasis(os.path.basename(dest))), [env.wayland_scanner, q, src, dest], lambda: True, None, None, None)) if items: parallel_run(items) class Arg: def __init__(self, decl): self.type, self.name = decl.rsplit(' ', 1) self.type = self.type.strip() self.name = self.name.strip() while self.name.startswith('*'): self.name = self.name[1:] self.type = self.type + '*' def __repr__(self): return 'Arg({}, {})'.format(self.type, self.name) class Function: def __init__(self, declaration, check_fail=True): self.check_fail = check_fail m = re.match( r'(.+?)\s+(glfw[A-Z][a-zA-Z0-9]+)[(](.+)[)]$', declaration ) if m is None: raise SystemExit('Failed to parse ' + repr(declaration)) self.restype = m.group(1).strip() self.name = m.group(2) args = m.group(3).strip().split(',') args = [x.strip() for x in args] self.args = [] for a in args: if a == 'void': continue self.args.append(Arg(a)) if not self.args: self.args = [Arg('void v')] def declaration(self): return 'typedef {restype} (*{name}_func)({args});\n{name}_func {name}_impl;\n#define {name} {name}_impl'.format( restype=self.restype, name=self.name, args=', '.join(a.type for a in self.args) ) def load(self): ans = '*(void **) (&{name}_impl) = dlsym(handle, "{name}");'.format( name=self.name ) if self.check_fail: ans += '\n if ({name}_impl == NULL) fail("Failed to load glfw function {name} with error: %s", dlerror());'.format( name=self.name ) return ans def generate_wrappers(glfw_header): with open(glfw_header) as f: src = f.read() functions = [] first = None for m in re.finditer(r'^GLFWAPI\s+(.+[)]);\s*$', src, flags=re.MULTILINE): if first is None: first = m.start() decl = m.group(1) if 'VkInstance' in decl: continue functions.append(Function(decl)) for line in '''\ void* glfwGetCocoaWindow(GLFWwindow* window) void* glfwGetNSGLContext(GLFWwindow *window) uint32_t glfwGetCocoaMonitor(GLFWmonitor* monitor) GLFWcocoatextinputfilterfun glfwSetCocoaTextInputFilter(GLFWwindow* window, GLFWcocoatextinputfilterfun callback) GLFWcocoatogglefullscreenfun glfwSetCocoaToggleFullscreenIntercept(GLFWwindow *window, GLFWcocoatogglefullscreenfun callback) GLFWapplicationshouldhandlereopenfun glfwSetApplicationShouldHandleReopen(GLFWapplicationshouldhandlereopenfun callback) GLFWapplicationwillfinishlaunchingfun glfwSetApplicationWillFinishLaunching(GLFWapplicationwillfinishlaunchingfun callback) void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, void* cocoa_key, void* cocoa_mods) void glfwCocoaRequestRenderFrame(GLFWwindow *w, GLFWcocoarenderframefun callback) void* glfwGetX11Display(void) int32_t glfwGetX11Window(GLFWwindow* window) void glfwSetPrimarySelectionString(GLFWwindow* window, const char* string) const char* glfwGetPrimarySelectionString(GLFWwindow* window, void) int glfwGetNativeKeyForName(const char* key_name, int case_sensitive) void glfwRequestWaylandFrameEvent(GLFWwindow *handle, unsigned long long id, GLFWwaylandframecallbackfunc callback) unsigned long long glfwDBusUserNotify(const char *app_name, const char* icon, const char *summary, const char *body, \ const char *action_text, int32_t timeout, GLFWDBusnotificationcreatedfun callback, void *data) void glfwDBusSetUserNotificationHandler(GLFWDBusnotificationactivatedfun handler) '''.splitlines(): if line: functions.append(Function(line.strip(), check_fail=False)) declarations = [f.declaration() for f in functions] p = src.find(' * GLFW API tokens') p = src.find('*/', p) preamble = src[p + 2:first] header = '''\ // // THIS FILE IS GENERATED BY glfw.py // // SAVE YOURSELF SOME TIME, DO NOT MANUALLY EDIT // #pragma once #include #include #include "monotonic.h" {} typedef int (* GLFWcocoatextinputfilterfun)(int,int,unsigned int,unsigned long); typedef bool (* GLFWapplicationshouldhandlereopenfun)(int); typedef void (* GLFWapplicationwillfinishlaunchingfun)(void); typedef bool (* GLFWcocoatogglefullscreenfun)(GLFWwindow*); typedef void (* GLFWcocoarenderframefun)(GLFWwindow*); typedef void (*GLFWwaylandframecallbackfunc)(unsigned long long id); typedef void (*GLFWDBusnotificationcreatedfun)(unsigned long long, uint32_t, void*); typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*); {} const char* load_glfw(const char* path); '''.format(preamble, '\n\n'.join(declarations)) with open('../kitty/glfw-wrapper.h', 'w') as f: f.write(header) code = ''' #include "data-types.h" #include "glfw-wrapper.h" #include static void* handle = NULL; #define fail(msg, ...) { snprintf(buf, sizeof(buf), msg, __VA_ARGS__); return buf; } const char* load_glfw(const char* path) { static char buf[2048]; handle = dlopen(path, RTLD_LAZY); if (handle == NULL) fail("Failed to dlopen %s with error: %s", path, dlerror()); dlerror(); LOAD return NULL; } void unload_glfw(void) { if (handle) { dlclose(handle); handle = NULL; } } '''.replace('LOAD', '\n\n '.join(f.load() for f in functions)) with open('../kitty/glfw-wrapper.c', 'w') as f: f.write(code) def main(): os.chdir(os.path.dirname(os.path.abspath(__file__))) generate_wrappers('glfw3.h') if __name__ == '__main__': main() kitty-0.15.0/glfw/glfw3.h000066400000000000000000006330271356737523400151250ustar00rootroot00000000000000/************************************************************************* * GLFW 3.4 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard * Copyright (c) 2006-2019 Camilla Löwy * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would * be appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not * be misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source * distribution. * *************************************************************************/ #ifndef _glfw3_h_ #define _glfw3_h_ #ifdef __cplusplus extern "C" { #endif /************************************************************************* * Doxygen documentation *************************************************************************/ /*! @file glfw3.h * @brief The header of the GLFW 3 API. * * This is the header file of the GLFW 3 API. It defines all its types and * declares all its functions. * * For more information about how to use this file, see @ref build_include. */ /*! @defgroup context Context reference * @brief Functions and types related to OpenGL and OpenGL ES contexts. * * This is the reference documentation for OpenGL and OpenGL ES context related * functions. For more task-oriented information, see the @ref context_guide. */ /*! @defgroup vulkan Vulkan reference * @brief Functions and types related to Vulkan. * * This is the reference documentation for Vulkan related functions and types. * For more task-oriented information, see the @ref vulkan_guide. */ /*! @defgroup init Initialization, version and error reference * @brief Functions and types related to initialization and error handling. * * This is the reference documentation for initialization and termination of * the library, version management and error handling. For more task-oriented * information, see the @ref intro_guide. */ /*! @defgroup input Input reference * @brief Functions and types related to input handling. * * This is the reference documentation for input related functions and types. * For more task-oriented information, see the @ref input_guide. */ /*! @defgroup monitor Monitor reference * @brief Functions and types related to monitors. * * This is the reference documentation for monitor related functions and types. * For more task-oriented information, see the @ref monitor_guide. */ /*! @defgroup window Window reference * @brief Functions and types related to windows. * * This is the reference documentation for window related functions and types, * including creation, deletion and event polling. For more task-oriented * information, see the @ref window_guide. */ /************************************************************************* * Compiler- and platform-specific preprocessor work *************************************************************************/ /* If we are we on Windows, we want a single define for it. */ #if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) #define _WIN32 #endif /* _WIN32 */ /* Include because most Windows GLU headers need wchar_t and * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h. * Include it unconditionally to avoid surprising side-effects. */ #include /* Include because it is needed by Vulkan and related functions. * Include it unconditionally to avoid surprising side-effects. */ #include #include #if defined(GLFW_INCLUDE_VULKAN) #include #endif /* Vulkan header */ /* The Vulkan header may have indirectly included windows.h (because of * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it. */ /* It is customary to use APIENTRY for OpenGL function pointer declarations on * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. */ #if !defined(APIENTRY) #if defined(_WIN32) #define APIENTRY __stdcall #else #define APIENTRY #endif #define GLFW_APIENTRY_DEFINED #endif /* APIENTRY */ /* Some Windows OpenGL headers need this. */ #if !defined(WINGDIAPI) && defined(_WIN32) #define WINGDIAPI __declspec(dllimport) #define GLFW_WINGDIAPI_DEFINED #endif /* WINGDIAPI */ /* Some Windows GLU headers need this. */ #if !defined(CALLBACK) && defined(_WIN32) #define CALLBACK __stdcall #define GLFW_CALLBACK_DEFINED #endif /* CALLBACK */ /* Include the chosen OpenGL or OpenGL ES headers. */ #if defined(GLFW_INCLUDE_ES1) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES2) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES3) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES31) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_ES32) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #elif defined(GLFW_INCLUDE_GLCOREARB) #if defined(__APPLE__) #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif /*GLFW_INCLUDE_GLEXT*/ #else /*__APPLE__*/ #include #endif /*__APPLE__*/ #elif !defined(GLFW_INCLUDE_NONE) #if defined(__APPLE__) #if !defined(GLFW_INCLUDE_GLEXT) #define GL_GLEXT_LEGACY #endif #include #if defined(GLFW_INCLUDE_GLU) #include #endif #else /*__APPLE__*/ #include #if defined(GLFW_INCLUDE_GLEXT) #include #endif #if defined(GLFW_INCLUDE_GLU) #include #endif #endif /*__APPLE__*/ #endif /* OpenGL and OpenGL ES headers */ #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) /* GLFW_DLL must be defined by applications that are linking against the DLL * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW * configuration header when compiling the DLL version of the library. */ #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" #endif /* GLFWAPI is used to declare public API functions for export * from the DLL / shared library / dynamic library. */ #if defined(_WIN32) && defined(_GLFW_BUILD_DLL) /* We are building GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllexport) #elif defined(_WIN32) && defined(GLFW_DLL) /* We are calling GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllimport) #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) /* We are building GLFW as a shared / dynamic library */ #define GLFWAPI __attribute__((visibility("default"))) #else /* We are building or calling GLFW as a static library */ #define GLFWAPI #endif /************************************************************************* * GLFW API tokens *************************************************************************/ /*! @name GLFW version macros * @{ */ /*! @brief The major version number of the GLFW library. * * This is incremented when the API is changed in non-compatible ways. * @ingroup init */ #define GLFW_VERSION_MAJOR 3 /*! @brief The minor version number of the GLFW library. * * This is incremented when features are added to the API but it remains * backward-compatible. * @ingroup init */ #define GLFW_VERSION_MINOR 4 /*! @brief The revision number of the GLFW library. * * This is incremented when a bug fix release is made that does not contain any * API changes. * @ingroup init */ #define GLFW_VERSION_REVISION 0 /*! @} */ /*! @name Key and button actions * @{ */ /*! @brief The key or mouse button was released. * * The key or mouse button was released. * * @ingroup input */ #define GLFW_RELEASE 0 /*! @brief The key or mouse button was pressed. * * The key or mouse button was pressed. * * @ingroup input */ #define GLFW_PRESS 1 /*! @brief The key was held down until it repeated. * * The key was held down until it repeated. * * @ingroup input */ #define GLFW_REPEAT 2 /*! @} */ /*! @defgroup hat_state Joystick hat states * @brief Joystick hat states. * * See [joystick hat input](@ref joystick_hat) for how these are used. * * @ingroup input * @{ */ #define GLFW_HAT_CENTERED 0 #define GLFW_HAT_UP 1 #define GLFW_HAT_RIGHT 2 #define GLFW_HAT_DOWN 4 #define GLFW_HAT_LEFT 8 #define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) #define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) #define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) #define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) /*! @} */ /*! @defgroup keys Keyboard keys * @brief Keyboard key IDs. * * See [key input](@ref input_key) for how these are used. * * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), * but re-arranged to map to 7-bit ASCII for printable keys (function keys are * put in the 256+ range). * * The naming of the key codes follow these rules: * - The US keyboard layout is used * - Names of printable alphanumeric characters are used (e.g. "A", "R", * "3", etc.) * - For non-alphanumeric characters, Unicode:ish names are used (e.g. * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not * correspond to the Unicode standard (usually for brevity) * - Keys that lack a clear US mapping are named "WORLD_x" * - For non-printable keys, custom names are used (e.g. "F4", * "BACKSPACE", etc.) * * @ingroup input * @{ */ /* The unknown key */ #define GLFW_KEY_UNKNOWN -1 /* Printable keys */ #define GLFW_KEY_SPACE 32 #define GLFW_KEY_EXCLAM 33 /* ! */ #define GLFW_KEY_DOUBLE_QUOTE 34 /* " */ #define GLFW_KEY_NUMBER_SIGN 35 /* # */ #define GLFW_KEY_DOLLAR 36 /* $ */ #define GLFW_KEY_AMPERSAND 38 /* & */ #define GLFW_KEY_APOSTROPHE 39 /* ' */ #define GLFW_KEY_PARENTHESIS_LEFT 40 /* ( */ #define GLFW_KEY_PARENTHESIS_RIGHT 41 /* ) */ #define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ #define GLFW_KEY_PERIOD 46 /* . */ #define GLFW_KEY_SLASH 47 /* / */ #define GLFW_KEY_0 48 #define GLFW_KEY_1 49 #define GLFW_KEY_2 50 #define GLFW_KEY_3 51 #define GLFW_KEY_4 52 #define GLFW_KEY_5 53 #define GLFW_KEY_6 54 #define GLFW_KEY_7 55 #define GLFW_KEY_8 56 #define GLFW_KEY_9 57 #define GLFW_KEY_COLON 58 /* : */ #define GLFW_KEY_SEMICOLON 59 /* ; */ #define GLFW_KEY_LESS 60 /* < */ #define GLFW_KEY_EQUAL 61 /* = */ #define GLFW_KEY_GREATER 62 /* > */ #define GLFW_KEY_AT 64 /* @ */ #define GLFW_KEY_A 65 #define GLFW_KEY_B 66 #define GLFW_KEY_C 67 #define GLFW_KEY_D 68 #define GLFW_KEY_E 69 #define GLFW_KEY_F 70 #define GLFW_KEY_G 71 #define GLFW_KEY_H 72 #define GLFW_KEY_I 73 #define GLFW_KEY_J 74 #define GLFW_KEY_K 75 #define GLFW_KEY_L 76 #define GLFW_KEY_M 77 #define GLFW_KEY_N 78 #define GLFW_KEY_O 79 #define GLFW_KEY_P 80 #define GLFW_KEY_Q 81 #define GLFW_KEY_R 82 #define GLFW_KEY_S 83 #define GLFW_KEY_T 84 #define GLFW_KEY_U 85 #define GLFW_KEY_V 86 #define GLFW_KEY_W 87 #define GLFW_KEY_X 88 #define GLFW_KEY_Y 89 #define GLFW_KEY_Z 90 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ #define GLFW_KEY_BACKSLASH 92 /* \ */ #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ #define GLFW_KEY_UNDERSCORE 95 /* _ */ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ #define GLFW_KEY_PARAGRAPH 167 /* § */ #define GLFW_KEY_MASCULINE 186 /* º */ #define GLFW_KEY_A_GRAVE 192 /* À */ #define GLFW_KEY_A_DIAERESIS 196 /* Ä */ #define GLFW_KEY_A_RING 197 /* Ã… */ #define GLFW_KEY_AE 198 /* Æ */ #define GLFW_KEY_C_CEDILLA 199 /* Ç */ #define GLFW_KEY_E_GRAVE 200 /* È */ #define GLFW_KEY_E_ACUTE 201 /* É */ #define GLFW_KEY_I_GRAVE 204 /* ÃŒ */ #define GLFW_KEY_N_TILDE 209 /* Ñ */ #define GLFW_KEY_O_GRAVE 210 /* Ã’ */ #define GLFW_KEY_O_DIAERESIS 214 /* Ö */ #define GLFW_KEY_O_SLASH 216 /* Ø */ #define GLFW_KEY_U_GRAVE 217 /* Ù */ #define GLFW_KEY_U_DIAERESIS 220 /* Ü */ #define GLFW_KEY_S_SHARP 222 /* ß */ #define GLFW_KEY_CYRILLIC_A 223 /* Ð */ #define GLFW_KEY_CYRILLIC_BE 224 /* Б */ #define GLFW_KEY_CYRILLIC_VE 225 /* Ð’ */ #define GLFW_KEY_CYRILLIC_GHE 226 /* Г */ #define GLFW_KEY_CYRILLIC_DE 227 /* Д */ #define GLFW_KEY_CYRILLIC_IE 228 /* Е */ #define GLFW_KEY_CYRILLIC_ZHE 229 /* Ж */ #define GLFW_KEY_CYRILLIC_ZE 230 /* З */ #define GLFW_KEY_CYRILLIC_I 231 /* И */ #define GLFW_KEY_CYRILLIC_SHORT_I 232 /* Й */ #define GLFW_KEY_CYRILLIC_KA 233 /* К */ #define GLFW_KEY_CYRILLIC_EL 234 /* Л */ #define GLFW_KEY_CYRILLIC_EM 235 /* М */ #define GLFW_KEY_CYRILLIC_EN 236 /* Ð */ #define GLFW_KEY_CYRILLIC_O 237 /* О */ #define GLFW_KEY_CYRILLIC_PE 238 /* П */ #define GLFW_KEY_CYRILLIC_ER 239 /* Р */ #define GLFW_KEY_CYRILLIC_ES 240 /* С */ #define GLFW_KEY_CYRILLIC_TE 241 /* Т */ #define GLFW_KEY_CYRILLIC_U 242 /* У */ #define GLFW_KEY_CYRILLIC_EF 243 /* Ф */ #define GLFW_KEY_CYRILLIC_HA 244 /* Ð¥ */ #define GLFW_KEY_CYRILLIC_TSE 245 /* Ц */ #define GLFW_KEY_CYRILLIC_CHE 246 /* Ч */ #define GLFW_KEY_CYRILLIC_SHA 247 /* Ш */ #define GLFW_KEY_CYRILLIC_SHCHA 248 /* Щ */ #define GLFW_KEY_CYRILLIC_HARD_SIGN 249 /* Ъ */ #define GLFW_KEY_CYRILLIC_YERU 250 /* Ы */ #define GLFW_KEY_CYRILLIC_SOFT_SIGN 251 /* Ь */ #define GLFW_KEY_CYRILLIC_E 252 /* Э */ #define GLFW_KEY_CYRILLIC_YU 253 /* Ю */ #define GLFW_KEY_CYRILLIC_YA 254 /* Я */ #define GLFW_KEY_CYRILLIC_IO 255 /* Ð */ #define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_CYRILLIC_IO /* Function keys */ #define GLFW_KEY_ESCAPE 256 #define GLFW_KEY_ENTER 257 #define GLFW_KEY_TAB 258 #define GLFW_KEY_BACKSPACE 259 #define GLFW_KEY_INSERT 260 #define GLFW_KEY_DELETE 261 #define GLFW_KEY_RIGHT 262 #define GLFW_KEY_LEFT 263 #define GLFW_KEY_DOWN 264 #define GLFW_KEY_UP 265 #define GLFW_KEY_PAGE_UP 266 #define GLFW_KEY_PAGE_DOWN 267 #define GLFW_KEY_HOME 268 #define GLFW_KEY_END 269 #define GLFW_KEY_CAPS_LOCK 280 #define GLFW_KEY_SCROLL_LOCK 281 #define GLFW_KEY_NUM_LOCK 282 #define GLFW_KEY_PRINT_SCREEN 283 #define GLFW_KEY_PAUSE 284 #define GLFW_KEY_F1 290 #define GLFW_KEY_F2 291 #define GLFW_KEY_F3 292 #define GLFW_KEY_F4 293 #define GLFW_KEY_F5 294 #define GLFW_KEY_F6 295 #define GLFW_KEY_F7 296 #define GLFW_KEY_F8 297 #define GLFW_KEY_F9 298 #define GLFW_KEY_F10 299 #define GLFW_KEY_F11 300 #define GLFW_KEY_F12 301 #define GLFW_KEY_F13 302 #define GLFW_KEY_F14 303 #define GLFW_KEY_F15 304 #define GLFW_KEY_F16 305 #define GLFW_KEY_F17 306 #define GLFW_KEY_F18 307 #define GLFW_KEY_F19 308 #define GLFW_KEY_F20 309 #define GLFW_KEY_F21 310 #define GLFW_KEY_F22 311 #define GLFW_KEY_F23 312 #define GLFW_KEY_F24 313 #define GLFW_KEY_F25 314 #define GLFW_KEY_KP_0 320 #define GLFW_KEY_KP_1 321 #define GLFW_KEY_KP_2 322 #define GLFW_KEY_KP_3 323 #define GLFW_KEY_KP_4 324 #define GLFW_KEY_KP_5 325 #define GLFW_KEY_KP_6 326 #define GLFW_KEY_KP_7 327 #define GLFW_KEY_KP_8 328 #define GLFW_KEY_KP_9 329 #define GLFW_KEY_KP_DECIMAL 330 #define GLFW_KEY_KP_DIVIDE 331 #define GLFW_KEY_KP_MULTIPLY 332 #define GLFW_KEY_KP_SUBTRACT 333 #define GLFW_KEY_KP_ADD 334 #define GLFW_KEY_KP_ENTER 335 #define GLFW_KEY_KP_EQUAL 336 #define GLFW_KEY_LEFT_SHIFT 340 #define GLFW_KEY_LEFT_CONTROL 341 #define GLFW_KEY_LEFT_ALT 342 #define GLFW_KEY_LEFT_SUPER 343 #define GLFW_KEY_RIGHT_SHIFT 344 #define GLFW_KEY_RIGHT_CONTROL 345 #define GLFW_KEY_RIGHT_ALT 346 #define GLFW_KEY_RIGHT_SUPER 347 #define GLFW_KEY_MENU 348 #define GLFW_KEY_LAST GLFW_KEY_MENU /*! @} */ /*! @defgroup mods Modifier key flags * @brief Modifier key flags. * * See [key input](@ref input_key) for how these are used. * * @ingroup input * @{ */ /*! @brief If this bit is set one or more Shift keys were held down. * * If this bit is set one or more Shift keys were held down. */ #define GLFW_MOD_SHIFT 0x0001 /*! @brief If this bit is set one or more Control keys were held down. * * If this bit is set one or more Control keys were held down. */ #define GLFW_MOD_CONTROL 0x0002 /*! @brief If this bit is set one or more Alt keys were held down. * * If this bit is set one or more Alt keys were held down. */ #define GLFW_MOD_ALT 0x0004 /*! @brief If this bit is set one or more Super keys were held down. * * If this bit is set one or more Super keys were held down. */ #define GLFW_MOD_SUPER 0x0008 /*! @brief If this bit is set the Caps Lock key is enabled. * * If this bit is set the Caps Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_CAPS_LOCK 0x0010 /*! @brief If this bit is set the Num Lock key is enabled. * * If this bit is set the Num Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_NUM_LOCK 0x0020 /*! @} */ /*! @defgroup buttons Mouse buttons * @brief Mouse button IDs. * * See [mouse button input](@ref input_mouse_button) for how these are used. * * @ingroup input * @{ */ #define GLFW_MOUSE_BUTTON_1 0 #define GLFW_MOUSE_BUTTON_2 1 #define GLFW_MOUSE_BUTTON_3 2 #define GLFW_MOUSE_BUTTON_4 3 #define GLFW_MOUSE_BUTTON_5 4 #define GLFW_MOUSE_BUTTON_6 5 #define GLFW_MOUSE_BUTTON_7 6 #define GLFW_MOUSE_BUTTON_8 7 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 /*! @} */ /*! @defgroup joysticks Joysticks * @brief Joystick IDs. * * See [joystick input](@ref joystick) for how these are used. * * @ingroup input * @{ */ #define GLFW_JOYSTICK_1 0 #define GLFW_JOYSTICK_2 1 #define GLFW_JOYSTICK_3 2 #define GLFW_JOYSTICK_4 3 #define GLFW_JOYSTICK_5 4 #define GLFW_JOYSTICK_6 5 #define GLFW_JOYSTICK_7 6 #define GLFW_JOYSTICK_8 7 #define GLFW_JOYSTICK_9 8 #define GLFW_JOYSTICK_10 9 #define GLFW_JOYSTICK_11 10 #define GLFW_JOYSTICK_12 11 #define GLFW_JOYSTICK_13 12 #define GLFW_JOYSTICK_14 13 #define GLFW_JOYSTICK_15 14 #define GLFW_JOYSTICK_16 15 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 /*! @} */ /*! @defgroup gamepad_buttons Gamepad buttons * @brief Gamepad buttons. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_BUTTON_A 0 #define GLFW_GAMEPAD_BUTTON_B 1 #define GLFW_GAMEPAD_BUTTON_X 2 #define GLFW_GAMEPAD_BUTTON_Y 3 #define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 #define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 #define GLFW_GAMEPAD_BUTTON_BACK 6 #define GLFW_GAMEPAD_BUTTON_START 7 #define GLFW_GAMEPAD_BUTTON_GUIDE 8 #define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 #define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 #define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 #define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 #define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 #define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 #define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT #define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A #define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B #define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X #define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y /*! @} */ /*! @defgroup gamepad_axes Gamepad axes * @brief Gamepad axes. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_AXIS_LEFT_X 0 #define GLFW_GAMEPAD_AXIS_LEFT_Y 1 #define GLFW_GAMEPAD_AXIS_RIGHT_X 2 #define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 #define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 #define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 #define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER /*! @} */ /*! @defgroup errors Error codes * @brief Error codes. * * See [error handling](@ref error_handling) for how these are used. * * @ingroup init * @{ */ /*! @brief No error has occurred. * * No error has occurred. * * @analysis Yay. */ #define GLFW_NO_ERROR 0 /*! @brief GLFW has not been initialized. * * This occurs if a GLFW function was called that must not be called unless the * library is [initialized](@ref intro_init). * * @analysis Application programmer error. Initialize GLFW before calling any * function that requires initialization. */ #define GLFW_NOT_INITIALIZED 0x00010001 /*! @brief No context is current for this thread. * * This occurs if a GLFW function was called that needs and operates on the * current OpenGL or OpenGL ES context but no context is current on the calling * thread. One such function is @ref glfwSwapInterval. * * @analysis Application programmer error. Ensure a context is current before * calling functions that require a current context. */ #define GLFW_NO_CURRENT_CONTEXT 0x00010002 /*! @brief One of the arguments to the function was an invalid enum value. * * One of the arguments to the function was an invalid enum value, for example * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_ENUM 0x00010003 /*! @brief One of the arguments to the function was an invalid value. * * One of the arguments to the function was an invalid value, for example * requesting a non-existent OpenGL or OpenGL ES version like 2.7. * * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead * result in a @ref GLFW_VERSION_UNAVAILABLE error. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_VALUE 0x00010004 /*! @brief A memory allocation failed. * * A memory allocation failed. * * @analysis A bug in GLFW or the underlying operating system. Report the bug * to our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_OUT_OF_MEMORY 0x00010005 /*! @brief GLFW could not find support for the requested API on the system. * * GLFW could not find support for the requested API on the system. * * @analysis The installed graphics driver does not support the requested * API, or does not support it via the chosen context creation backend. * Below are a few examples. * * @par * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only * supports OpenGL ES via EGL, while Nvidia and Intel only support it via * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary * driver. Older graphics drivers do not support Vulkan. */ #define GLFW_API_UNAVAILABLE 0x00010006 /*! @brief The requested OpenGL or OpenGL ES version is not available. * * The requested OpenGL or OpenGL ES version (including any requested context * or framebuffer hints) is not available on this machine. * * @analysis The machine does not support your requirements. If your * application is sufficiently flexible, downgrade your requirements and try * again. Otherwise, inform the user that their machine does not match your * requirements. * * @par * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 * comes out before the 4.x series gets that far, also fail with this error and * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions * will exist. */ #define GLFW_VERSION_UNAVAILABLE 0x00010007 /*! @brief A platform-specific error occurred that does not match any of the * more specific categories. * * A platform-specific error occurred that does not match any of the more * specific categories. * * @analysis A bug or configuration error in GLFW, the underlying operating * system or its drivers, or a lack of required resources. Report the issue to * our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_PLATFORM_ERROR 0x00010008 /*! @brief The requested format is not supported or available. * * If emitted during window creation, the requested pixel format is not * supported. * * If emitted when querying the clipboard, the contents of the clipboard could * not be converted to the requested format. * * @analysis If emitted during window creation, one or more * [hard constraints](@ref window_hints_hard) did not match any of the * available pixel formats. If your application is sufficiently flexible, * downgrade your requirements and try again. Otherwise, inform the user that * their machine does not match your requirements. * * @par * If emitted when querying the clipboard, ignore the error or report it to * the user, as appropriate. */ #define GLFW_FORMAT_UNAVAILABLE 0x00010009 /*! @brief The specified window does not have an OpenGL or OpenGL ES context. * * A window that does not have an OpenGL or OpenGL ES context was passed to * a function that requires it to have one. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_NO_WINDOW_CONTEXT 0x0001000A /*! @} */ /*! @addtogroup window * @{ */ /*! @brief Input focus window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUSED_hint) or * [window attribute](@ref GLFW_FOCUSED_attrib). */ #define GLFW_FOCUSED 0x00020001 /*! @brief Window iconification window attribute * * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). */ #define GLFW_ICONIFIED 0x00020002 /*! @brief Window resize-ability window hint and attribute * * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and * [window attribute](@ref GLFW_RESIZABLE_attrib). */ #define GLFW_RESIZABLE 0x00020003 /*! @brief Window visibility window hint and attribute * * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and * [window attribute](@ref GLFW_VISIBLE_attrib). */ #define GLFW_VISIBLE 0x00020004 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_DECORATED_hint) and * [window attribute](@ref GLFW_DECORATED_attrib). */ #define GLFW_DECORATED 0x00020005 /*! @brief Window auto-iconification window hint and attribute * * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). */ #define GLFW_AUTO_ICONIFY 0x00020006 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_FLOATING_hint) and * [window attribute](@ref GLFW_FLOATING_attrib). */ #define GLFW_FLOATING 0x00020007 /*! @brief Window maximization window hint and attribute * * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and * [window attribute](@ref GLFW_MAXIMIZED_attrib). */ #define GLFW_MAXIMIZED 0x00020008 /*! @brief Cursor centering window hint * * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). */ #define GLFW_CENTER_CURSOR 0x00020009 /*! @brief Window framebuffer transparency hint and attribute * * Window framebuffer transparency * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). */ #define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A /*! @brief Mouse cursor hover window attribute. * * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). */ #define GLFW_HOVERED 0x0002000B /*! @brief Input focus on calling show window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). */ #define GLFW_FOCUS_ON_SHOW 0x0002000C /*! @brief Occlusion window attribute * * Occlusion [window attribute](@ref GLFW_OCCLUDED_attrib). */ #define GLFW_OCCLUDED 0x0002000D /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). */ #define GLFW_RED_BITS 0x00021001 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). */ #define GLFW_GREEN_BITS 0x00021002 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). */ #define GLFW_BLUE_BITS 0x00021003 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). */ #define GLFW_ALPHA_BITS 0x00021004 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). */ #define GLFW_DEPTH_BITS 0x00021005 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). */ #define GLFW_STENCIL_BITS 0x00021006 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). */ #define GLFW_ACCUM_RED_BITS 0x00021007 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). */ #define GLFW_ACCUM_GREEN_BITS 0x00021008 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). */ #define GLFW_ACCUM_BLUE_BITS 0x00021009 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). */ #define GLFW_ACCUM_ALPHA_BITS 0x0002100A /*! @brief Framebuffer auxiliary buffer hint. * * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). */ #define GLFW_AUX_BUFFERS 0x0002100B /*! @brief OpenGL stereoscopic rendering hint. * * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). */ #define GLFW_STEREO 0x0002100C /*! @brief Framebuffer MSAA samples hint. * * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). */ #define GLFW_SAMPLES 0x0002100D /*! @brief Framebuffer sRGB hint. * * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). */ #define GLFW_SRGB_CAPABLE 0x0002100E /*! @brief Monitor refresh rate hint. * * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). */ #define GLFW_REFRESH_RATE 0x0002100F /*! @brief Framebuffer double buffering hint. * * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER). */ #define GLFW_DOUBLEBUFFER 0x00021010 /*! @brief Context client API hint and attribute. * * Context client API [hint](@ref GLFW_CLIENT_API_hint) and * [attribute](@ref GLFW_CLIENT_API_attrib). */ #define GLFW_CLIENT_API 0x00022001 /*! @brief Context client API major version hint and attribute. * * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). */ #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 /*! @brief Context client API minor version hint and attribute. * * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). */ #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 /*! @brief Context client API revision number hint and attribute. * * Context client API revision number * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). */ #define GLFW_CONTEXT_REVISION 0x00022004 /*! @brief Context robustness hint and attribute. * * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). */ #define GLFW_CONTEXT_ROBUSTNESS 0x00022005 /*! @brief OpenGL forward-compatibility hint and attribute. * * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). */ #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 /*! @brief OpenGL debug context hint and attribute. * * OpenGL debug context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). */ #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 /*! @brief OpenGL profile hint and attribute. * * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). */ #define GLFW_OPENGL_PROFILE 0x00022008 /*! @brief Context flush-on-release hint and attribute. * * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). */ #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 /*! @brief Context error suppression hint and attribute. * * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). */ #define GLFW_CONTEXT_NO_ERROR 0x0002200A /*! @brief Context creation API hint and attribute. * * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). */ #define GLFW_CONTEXT_CREATION_API 0x0002200B /*! @brief Window content area scaling window * [window hint](@ref GLFW_SCALE_TO_MONITOR). */ #define GLFW_SCALE_TO_MONITOR 0x0002200C /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). */ #define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). */ #define GLFW_COCOA_FRAME_NAME 0x00023002 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). */ #define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_CLASS_NAME 0x00024001 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_INSTANCE_NAME 0x00024002 #define GLFW_WAYLAND_APP_ID 0x00025001 /*! @} */ #define GLFW_NO_API 0 #define GLFW_OPENGL_API 0x00030001 #define GLFW_OPENGL_ES_API 0x00030002 #define GLFW_NO_ROBUSTNESS 0 #define GLFW_NO_RESET_NOTIFICATION 0x00031001 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 #define GLFW_OPENGL_ANY_PROFILE 0 #define GLFW_OPENGL_CORE_PROFILE 0x00032001 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 #define GLFW_CURSOR 0x00033001 #define GLFW_STICKY_KEYS 0x00033002 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 #define GLFW_LOCK_KEY_MODS 0x00033004 #define GLFW_CURSOR_NORMAL 0x00034001 #define GLFW_CURSOR_HIDDEN 0x00034002 #define GLFW_CURSOR_DISABLED 0x00034003 #define GLFW_ANY_RELEASE_BEHAVIOR 0 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 #define GLFW_NATIVE_CONTEXT_API 0x00036001 #define GLFW_EGL_CONTEXT_API 0x00036002 #define GLFW_OSMESA_CONTEXT_API 0x00036003 /*! @defgroup shapes Standard cursor shapes * @brief Standard system cursor shapes. * * See [standard cursor creation](@ref cursor_standard) for how these are used. * * @ingroup input * @{ */ typedef enum { GLFW_ARROW_CURSOR, GLFW_IBEAM_CURSOR, GLFW_CROSSHAIR_CURSOR, GLFW_HAND_CURSOR, GLFW_HRESIZE_CURSOR, GLFW_VRESIZE_CURSOR, GLFW_NW_RESIZE_CURSOR, GLFW_NE_RESIZE_CURSOR, GLFW_SW_RESIZE_CURSOR, GLFW_SE_RESIZE_CURSOR, GLFW_INVALID_CURSOR } GLFWCursorShape; /*! @} */ #define GLFW_CONNECTED 0x00040001 #define GLFW_DISCONNECTED 0x00040002 /*! @addtogroup init * @{ */ /*! @brief Joystick hat buttons init hint. * * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). */ #define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 #define GLFW_DEBUG_KEYBOARD 0x00050002 #define GLFW_ENABLE_JOYSTICKS 0x00050003 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). */ #define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). */ #define GLFW_COCOA_MENUBAR 0x00051002 /*! @} */ #define GLFW_DONT_CARE -1 /************************************************************************* * GLFW API types *************************************************************************/ /*! @brief Client API function pointer type. * * Generic function pointer used for returning client API function pointers * without forcing a cast from a regular pointer. * * @sa @ref context_glext * @sa @ref glfwGetProcAddress * * @since Added in version 3.0. * * @ingroup context */ typedef void (*GLFWglproc)(void); /*! @brief Vulkan API function pointer type. * * Generic function pointer used for returning Vulkan API function pointers * without forcing a cast from a regular pointer. * * @sa @ref vulkan_proc * @sa @ref glfwGetInstanceProcAddress * * @since Added in version 3.2. * * @ingroup vulkan */ typedef void (*GLFWvkproc)(void); /*! @brief Opaque monitor object. * * Opaque monitor object. * * @see @ref monitor_object * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWmonitor GLFWmonitor; /*! @brief Opaque window object. * * Opaque window object. * * @see @ref window_object * * @since Added in version 3.0. * * @ingroup window */ typedef struct GLFWwindow GLFWwindow; /*! @brief Opaque cursor object. * * Opaque cursor object. * * @see @ref cursor_object * * @since Added in version 3.1. * * @ingroup input */ typedef struct GLFWcursor GLFWcursor; typedef struct GLFWkeyevent { // The [keyboard key](@ref keys) that was pressed or released. int key; // The platform-specific identifier of the key. int native_key; // The event action. Either `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. int action; // Bit field describing which [modifier keys](@ref mods) were held down. int mods; // UTF-8 encoded text generated by this key event or empty string or NULL const char *text; // Used for Input Method events. Zero for normal key events. // A value of 1 means the pre-edit text for the input event has been changed. // A value of 2 means the text should be committed. int ime_state; } GLFWkeyevent; /*! @brief The function pointer type for error callbacks. * * This is the function pointer type for error callbacks. An error callback * function has the following signature: * @code * void callback_name(int error_code, const char* description) * @endcode * * @param[in] error_code An [error code](@ref errors). Future releases may add * more error codes. * @param[in] description A UTF-8 encoded string describing the error. * * @pointer_lifetime The error description string is valid until the callback * function returns. * * @sa @ref error_handling * @sa @ref glfwSetErrorCallback * * @since Added in version 3.0. * * @ingroup init */ typedef void (* GLFWerrorfun)(int,const char*); /*! @brief The function pointer type for window position callbacks. * * This is the function pointer type for window position callbacks. A window * position callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int xpos, int ypos) * @endcode * * @param[in] window The window that was moved. * @param[in] xpos The new x-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * @param[in] ypos The new y-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * * @sa @ref window_pos * @sa @ref glfwSetWindowPosCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window size callbacks. * * This is the function pointer type for window size callbacks. A window size * callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window that was resized. * @param[in] width The new width, in screen coordinates, of the window. * @param[in] height The new height, in screen coordinates, of the window. * * @sa @ref window_size * @sa @ref glfwSetWindowSizeCallback * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window close callbacks. * * This is the function pointer type for window close callbacks. A window * close callback function has the following signature: * @code * void function_name(GLFWwindow* window) * @endcode * * @param[in] window The window that the user attempted to close. * * @sa @ref window_close * @sa @ref glfwSetWindowCloseCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowclosefun)(GLFWwindow*); /*! @brief The function pointer type for window content refresh callbacks. * * This is the function pointer type for window content refresh callbacks. * A window content refresh callback function has the following signature: * @code * void function_name(GLFWwindow* window); * @endcode * * @param[in] window The window whose content needs to be refreshed. * * @sa @ref window_refresh * @sa @ref glfwSetWindowRefreshCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); /*! @brief The function pointer type for window focus callbacks. * * This is the function pointer type for window focus callbacks. A window * focus callback function has the following signature: * @code * void function_name(GLFWwindow* window, int focused) * @endcode * * @param[in] window The window that gained or lost input focus. * @param[in] focused `true` if the window was given input focus, or * `false` if it lost it. * * @sa @ref window_focus * @sa @ref glfwSetWindowFocusCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); /*! @brief The function signature for window occlusion callbacks. * * This is the function signature for window occlusion callback functions. * * @param[in] window The window whose occlusion state changed. * @param[in] occluded `true` if the window was occluded, or `false` * if the window is no longer occluded. * * @sa @ref window_occlusion * @sa @ref glfwSetWindowOcclusionCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowocclusionfun)(GLFWwindow*, bool); /*! @brief The function pointer type for window iconify callbacks. * * This is the function pointer type for window iconify callbacks. A window * iconify callback function has the following signature: * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * * @param[in] window The window that was iconified or restored. * @param[in] iconified `true` if the window was iconified, or * `false` if it was restored. * * @sa @ref window_iconify * @sa @ref glfwSetWindowIconifyCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); /*! @brief The function pointer type for window maximize callbacks. * * This is the function pointer type for window maximize callbacks. A window * maximize callback function has the following signature: * @code * void function_name(GLFWwindow* window, int maximized) * @endcode * * @param[in] window The window that was maximized or restored. * @param[in] iconified `true` if the window was maximized, or * `false` if it was restored. * * @sa @ref window_maximize * @sa glfwSetWindowMaximizeCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int); /*! @brief The function pointer type for framebuffer size callbacks. * * This is the function pointer type for framebuffer size callbacks. * A framebuffer size callback function has the following signature: * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window whose framebuffer was resized. * @param[in] width The new width, in pixels, of the framebuffer. * @param[in] height The new height, in pixels, of the framebuffer. * * @sa @ref window_fbsize * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window content scale callbacks. * * This is the function pointer type for window content scale callbacks. * A window content scale callback function has the following signature: * @code * void function_name(GLFWwindow* window, float xscale, float yscale) * @endcode * * @param[in] window The window whose content scale changed. * @param[in] xscale The new x-axis content scale of the window. * @param[in] yscale The new y-axis content scale of the window. * * @sa @ref window_scale * @sa @ref glfwSetWindowContentScaleCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float); /*! @brief The function pointer type for mouse button callbacks. * * This is the function pointer type for mouse button callback functions. * A mouse button callback function has the following signature: * @code * void function_name(GLFWwindow* window, int button, int action, int mods) * @endcode * * @param[in] window The window that received the event. * @param[in] button The [mouse button](@ref buttons) that was pressed or * released. * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases * may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_mouse_button * @sa @ref glfwSetMouseButtonCallback * * @since Added in version 1.0. * @glfw3 Added window handle and modifier mask parameters. * * @ingroup input */ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); /*! @brief The function pointer type for cursor position callbacks. * * This is the function pointer type for cursor position callbacks. A cursor * position callback function has the following signature: * @code * void function_name(GLFWwindow* window, double xpos, double ypos); * @endcode * * @param[in] window The window that received the event. * @param[in] xpos The new cursor x-coordinate, relative to the left edge of * the content area. * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the * content area. * * @sa @ref cursor_pos * @sa @ref glfwSetCursorPosCallback * * @since Added in version 3.0. Replaces `GLFWmouseposfun`. * * @ingroup input */ typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); /*! @brief The function pointer type for cursor enter/leave callbacks. * * This is the function pointer type for cursor enter/leave callbacks. * A cursor enter/leave callback function has the following signature: * @code * void function_name(GLFWwindow* window, int entered) * @endcode * * @param[in] window The window that received the event. * @param[in] entered `true` if the cursor entered the window's content * area, or `false` if it left it. * * @sa @ref cursor_enter * @sa @ref glfwSetCursorEnterCallback * * @since Added in version 3.0. * * @ingroup input */ typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); /*! @brief The function pointer type for scroll callbacks. * * This is the function pointer type for scroll callbacks. A scroll callback * function has the following signature: * @code * void function_name(GLFWwindow* window, double xoffset, double yoffset) * @endcode * * @param[in] window The window that received the event. * @param[in] xoffset The scroll offset along the x-axis. * @param[in] yoffset The scroll offset along the y-axis. * @param[in] flags A bit-mask providing extra data about the event. * flags & 1 will be true if and only if the offset values are "high-precision", * typically pixel values. Otherwise the offset values are number of lines. * (flags >> 1) & 7 will have value 1 for the start of momentum scrolling, * value 2 for stationary momentum scrolling, value 3 for momentum scrolling * in progress, value 4 for momentum scrolling ended, value 5 for momentum * scrolling cancelled and value 6 if scrolling may begin soon. * * @sa @ref scrolling * @sa @ref glfwSetScrollCallback * * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. * @since Changed in version 4.0. Added `flags` parameter. * * @ingroup input */ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double,int); /*! @brief The function pointer type for key callbacks. * * This is the function pointer type for key callbacks. A keyboard * key callback function has the following signature: * @code * void function_name(GLFWwindow* window, int key, int native_key, int action, int mods) * @endcode * The semantics of this function are that the key that is interacted with on the * keyboard is reported, and the text, if any generated by the key is reported. * So, for example, if on a US-ASCII keyboard the user presses Shift+= GLFW * will report the text "+" and the key as GLFW_KEY_EQUAL. The reported key takes into * account any current keyboard maps defined in the OS. So with a dvorak mapping, pressing * the "s" key will generate text "o" and GLFW_KEY_O. * * @param[in] window The window that received the event. * @param[in] ev The key event, see GLFWkeyevent. The data in this event is only valid for * the lifetime of the callback. * * @note On X11/Wayland if a modifier other than the modifiers GLFW reports * (ctrl/shift/alt/super) is used, GLFW will report the shifted key rather * than the unshifted key. So for example, if ISO_Shift_Level_5 is used to * convert the key A into UP GLFW will report the key as UP with no modifiers. * * @sa @ref input_key * @sa @ref glfwSetKeyboardCallback * * @since Added in version 4.0. * * @ingroup input */ typedef void (* GLFWkeyboardfun)(GLFWwindow*, GLFWkeyevent*); /*! @brief The function pointer type for path drop callbacks. * * This is the function pointer type for path drop callbacks. A path drop * callback function has the following signature: * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * * @param[in] window The window that received the event. * @param[in] path_count The number of dropped paths. * @param[in] paths The UTF-8 encoded file and/or directory path names. * * @pointer_lifetime The path array and its strings are valid until the * callback function returns. * * @sa @ref path_drop * @sa @ref glfwSetDropCallback * * @since Added in version 3.1. * * @ingroup input */ typedef void (* GLFWdropfun)(GLFWwindow*,int,const char*[]); typedef void (* GLFWliveresizefun)(GLFWwindow*, bool); /*! @brief The function pointer type for monitor configuration callbacks. * * This is the function pointer type for monitor configuration callbacks. * A monitor callback function has the following signature: * @code * void function_name(GLFWmonitor* monitor, int event) * @endcode * * @param[in] monitor The monitor that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref monitor_event * @sa @ref glfwSetMonitorCallback * * @since Added in version 3.0. * * @ingroup monitor */ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); /*! @brief The function pointer type for joystick configuration callbacks. * * This is the function pointer type for joystick configuration callbacks. * A joystick configuration callback function has the following signature: * @code * void function_name(int jid, int event) * @endcode * * @param[in] jid The joystick that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref joystick_event * @sa @ref glfwSetJoystickCallback * * @since Added in version 3.2. * * @ingroup input */ typedef void (* GLFWjoystickfun)(int,int); typedef void (* GLFWuserdatafun)(unsigned long long, void*); typedef void (* GLFWtickcallback)(void*); /*! @brief Video mode type. * * This describes a single video mode. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoMode * @sa @ref glfwGetVideoModes * * @since Added in version 1.0. * @glfw3 Added refresh rate member. * * @ingroup monitor */ typedef struct GLFWvidmode { /*! The width, in screen coordinates, of the video mode. */ int width; /*! The height, in screen coordinates, of the video mode. */ int height; /*! The bit depth of the red channel of the video mode. */ int redBits; /*! The bit depth of the green channel of the video mode. */ int greenBits; /*! The bit depth of the blue channel of the video mode. */ int blueBits; /*! The refresh rate, in Hz, of the video mode. */ int refreshRate; } GLFWvidmode; /*! @brief Gamma ramp. * * This describes the gamma ramp for a monitor. * * @sa @ref monitor_gamma * @sa @ref glfwGetGammaRamp * @sa @ref glfwSetGammaRamp * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWgammaramp { /*! An array of value describing the response of the red channel. */ unsigned short* red; /*! An array of value describing the response of the green channel. */ unsigned short* green; /*! An array of value describing the response of the blue channel. */ unsigned short* blue; /*! The number of elements in each array. */ unsigned int size; } GLFWgammaramp; /*! @brief Image data. * * This describes a single 2D image. See the documentation for each related * function what the expected pixel format is. * * @sa @ref cursor_custom * @sa @ref window_icon * * @since Added in version 2.1. * @glfw3 Removed format and bytes-per-pixel members. * * @ingroup window */ typedef struct GLFWimage { /*! The width, in pixels, of this image. */ int width; /*! The height, in pixels, of this image. */ int height; /*! The pixel data of this image, arranged left-to-right, top-to-bottom. */ unsigned char* pixels; } GLFWimage; /*! @brief Gamepad input state * * This describes the input state of a gamepad. * * @sa @ref gamepad * @sa @ref glfwGetGamepadState * * @since Added in version 3.3. * * @ingroup input */ typedef struct GLFWgamepadstate { /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` * or `GLFW_RELEASE`. */ unsigned char buttons[15]; /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 * to 1.0 inclusive. */ float axes[6]; } GLFWgamepadstate; /************************************************************************* * GLFW API functions *************************************************************************/ /*! @brief Initializes the GLFW library. * * This function initializes the GLFW library. Before most GLFW functions can * be used, GLFW must be initialized, and before an application terminates GLFW * should be terminated in order to free any resources allocated during or * after initialization. * * If this function fails, it calls @ref glfwTerminate before returning. If it * succeeds, you should call @ref glfwTerminate before the application exits. * * Additional calls to this function after successful initialization but before * termination will return `true` immediately. * * @return `true` if successful, or `false` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function will change the current directory of the * application to the `Contents/Resources` subdirectory of the application's * bundle, if present. This can be disabled with the @ref * GLFW_COCOA_CHDIR_RESOURCES init hint. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init * @sa @ref glfwTerminate * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI int glfwInit(monotonic_t start_time); GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *callback_data); GLFWAPI void glfwStopMainLoop(void); GLFWAPI unsigned long long glfwAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void * callback_data, GLFWuserdatafun free_callback); GLFWAPI void glfwUpdateTimer(unsigned long long timer_id, monotonic_t interval, bool enabled); GLFWAPI void glfwRemoveTimer(unsigned long long); /*! @brief Terminates the GLFW library. * * This function destroys all remaining windows and cursors, restores any * modified gamma ramps and frees any other allocated resources. Once this * function is called, you must again call @ref glfwInit successfully before * you will be able to use most GLFW functions. * * If GLFW has been successfully initialized, this function should be called * before the application exits. If initialization fails, there is no need to * call this function, as it is called by @ref glfwInit before it returns * failure. * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark This function may be called before @ref glfwInit. * * @warning The contexts of any remaining windows must not be current on any * other thread when this function is called. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init * @sa @ref glfwInit * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI void glfwTerminate(void); /*! @brief Sets the specified init hint to the desired value. * * This function sets hints for the next initialization of GLFW. * * The values you set hints to are never reset by GLFW, but they only take * effect during initialization. Once GLFW has been initialized, any values * you set will be ignored until the library is terminated and initialized * again. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [init hint](@ref init_hints) to set. * @param[in] value The new value of the init hint. * * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref * GLFW_INVALID_VALUE. * * @remarks This function may be called before @ref glfwInit. * * @thread_safety This function must only be called from the main thread. * * @sa init_hints * @sa glfwInit * * @since Added in version 3.3. * * @ingroup init */ GLFWAPI void glfwInitHint(int hint, int value); /*! @brief Retrieves the version of the GLFW library. * * This function retrieves the major, minor and revision numbers of the GLFW * library. It is intended for when you are using GLFW as a shared library and * want to ensure that you are using the minimum required version. * * Any or all of the version arguments may be `NULL`. * * @param[out] major Where to store the major version number, or `NULL`. * @param[out] minor Where to store the minor version number, or `NULL`. * @param[out] rev Where to store the revision number, or `NULL`. * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function may be called from any thread. * * @sa @ref intro_version * @sa @ref glfwGetVersionString * * @since Added in version 1.0. * * @ingroup init */ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); /*! @brief Returns a string describing the compile-time configuration. * * This function returns the compile-time generated * [version string](@ref intro_version_string) of the GLFW library binary. It * describes the version, platform, compiler and any platform-specific * compile-time options. It should not be confused with the OpenGL or OpenGL * ES version string, queried with `glGetString`. * * __Do not use the version string__ to parse the GLFW library version. The * @ref glfwGetVersion function provides the version of the running library * binary in numerical format. * * @return The ASCII encoded GLFW version string. * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @pointer_lifetime The returned string is static and compile-time generated. * * @thread_safety This function may be called from any thread. * * @sa @ref intro_version * @sa @ref glfwGetVersion * * @since Added in version 3.0. * * @ingroup init */ GLFWAPI const char* glfwGetVersionString(void); /*! @brief Returns and clears the last error for the calling thread. * * This function returns and clears the [error code](@ref errors) of the last * error that occurred on the calling thread, and optionally a UTF-8 encoded * human-readable description of it. If no error has occurred since the last * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is * set to `NULL`. * * @param[in] description Where to store the error description pointer, or `NULL`. * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR * (zero). * * @errors None. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * next error occurs or the library is terminated. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function may be called from any thread. * * @sa @ref error_handling * @sa @ref glfwSetErrorCallback * * @since Added in version 3.3. * * @ingroup init */ GLFWAPI int glfwGetError(const char** description); /*! @brief Sets the error callback. * * This function sets the error callback, which is called with an error code * and a human-readable description each time a GLFW error occurs. * * The error code is set before the callback is called. Calling @ref * glfwGetError from the error callback will return the same value as the error * code argument. * * The error callback is called on the thread where the error occurred. If you * are using GLFW from multiple threads, your error callback needs to be * written accordingly. * * Because the description string may have been generated specifically for that * error, it is not guaranteed to be valid after the callback has returned. If * you wish to use it after the callback returns, you need to make a copy. * * Once set, the error callback remains set even after the library has been * terminated. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set. * * @callback_signature * @code * void callback_name(int error_code, const char* description) * @endcode * For more information about the callback parameters, see the * [callback pointer type](@ref GLFWerrorfun). * * @errors None. * * @remark This function may be called before @ref glfwInit. * * @thread_safety This function must only be called from the main thread. * * @sa @ref error_handling * @sa @ref glfwGetError * * @since Added in version 3.0. * * @ingroup init */ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); /*! @brief Returns the currently connected monitors. * * This function returns an array of handles for all currently connected * monitors. The primary monitor is always first in the returned array. If no * monitors were found, this function returns `NULL`. * * @param[out] count Where to store the number of monitors in the returned * array. This is set to zero if an error occurred. * @return An array of monitor handles, or `NULL` if no monitors were found or * if an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * monitor configuration changes or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_monitors * @sa @ref monitor_event * @sa @ref glfwGetPrimaryMonitor * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); /*! @brief Returns the primary monitor. * * This function returns the primary monitor. This is usually the monitor * where elements like the task bar or global menu bar are located. * * @return The primary monitor, or `NULL` if no monitors were found or if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @remark The primary monitor is always first in the array returned by @ref * glfwGetMonitors. * * @sa @ref monitor_monitors * @sa @ref glfwGetMonitors * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); /*! @brief Returns the position of the monitor's viewport on the virtual screen. * * This function returns the position, in screen coordinates, of the upper-left * corner of the specified monitor. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); /*! @brief Retrieves the work area of the monitor. * * This function returns the position, in screen coordinates, of the upper-left * corner of the work area of the specified monitor along with the work area * size in screen coordinates. The work area is defined as the area of the * monitor not occluded by the operating system task bar where present. If no * task bar exists then the work area is the monitor resolution in screen * coordinates. * * Any or all of the position and size arguments may be `NULL`. If an error * occurs, all non-`NULL` position and size arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. * @param[out] width Where to store the monitor width, or `NULL`. * @param[out] height Where to store the monitor height, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_workarea * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height); /*! @brief Returns the physical size of the monitor. * * This function returns the size, in millimetres, of the display area of the * specified monitor. * * Some systems do not provide accurate monitor size information, either * because the monitor * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) * data is incorrect or because the driver does not report it accurately. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] monitor The monitor to query. * @param[out] widthMM Where to store the width, in millimetres, of the * monitor's display area, or `NULL`. * @param[out] heightMM Where to store the height, in millimetres, of the * monitor's display area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @win32 calculates the returned physical size from the * current resolution and system DPI instead of querying the monitor EDID data. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); /*! @brief Retrieves the content scale for the specified monitor. * * This function retrieves the content scale for the specified monitor. The * content scale is the ratio between the current DPI and the platform's * default DPI. This is especially important for text and any UI elements. If * the pixel dimensions of your UI scaled by this look appropriate on your * machine then it should appear at a reasonable size on other machines * regardless of their DPI and scaling settings. This relies on the system DPI * and scaling settings being somewhat correct. * * The content scale may depend on both the monitor resolution and pixel * density and on user settings. It may be very different from the raw DPI * calculated from the physical size and current resolution. * * @param[in] monitor The monitor to query. * @param[out] xscale Where to store the x-axis content scale, or `NULL`. * @param[out] yscale Where to store the y-axis content scale, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_scale * @sa @ref glfwGetWindowContentScale * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale); /*! @brief Returns the name of the specified monitor. * * This function returns a human-readable name, encoded as UTF-8, of the * specified monitor. The name typically reflects the make and model of the * monitor and is not guaranteed to be unique among the connected monitors. * * @param[in] monitor The monitor to query. * @return The UTF-8 encoded name of the monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_properties * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); /*! @brief Sets the user pointer of the specified monitor. * * This function sets the user-defined pointer of the specified monitor. The * current value is retained until the monitor is disconnected. The initial * value is `NULL`. * * This function may be called from the monitor callback, even for a monitor * that is being disconnected. * * @param[in] monitor The monitor whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref monitor_userptr * @sa @ref glfwGetMonitorUserPointer * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer); /*! @brief Returns the user pointer of the specified monitor. * * This function returns the current value of the user-defined pointer of the * specified monitor. The initial value is `NULL`. * * This function may be called from the monitor callback, even for a monitor * that is being disconnected. * * @param[in] monitor The monitor whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref monitor_userptr * @sa @ref glfwSetMonitorUserPointer * * @since Added in version 3.3. * * @ingroup monitor */ GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor); /*! @brief Sets the monitor configuration callback. * * This function sets the monitor configuration callback, or removes the * currently set callback. This is called when a monitor is connected to or * disconnected from the system. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWmonitor* monitor, int event) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWmonitorfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_event * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); /*! @brief Returns the available video modes for the specified monitor. * * This function returns an array of all video modes supported by the specified * monitor. The returned array is sorted in ascending order, first by color * bit depth (the sum of all channel depths) and then by resolution area (the * product of width and height). * * @param[in] monitor The monitor to query. * @param[out] count Where to store the number of video modes in the returned * array. This is set to zero if an error occurred. * @return An array of video modes, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected, this function is called again for that monitor or the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoMode * * @since Added in version 1.0. * @glfw3 Changed to return an array of modes for a specific monitor. * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); /*! @brief Returns the current mode of the specified monitor. * * This function returns the current video mode of the specified monitor. If * you have created a full screen window for that monitor, the return value * will depend on whether that window is iconified. * * @param[in] monitor The monitor to query. * @return The current mode of the monitor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified monitor is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoModes * * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); /*! @brief Generates a gamma ramp and sets it for the specified monitor. * * This function generates an appropriately sized gamma ramp from the specified * exponent and then calls @ref glfwSetGammaRamp with it. The value must be * a finite number greater than zero. * * The software controlled gamma ramp is applied _in addition_ to the hardware * gamma correction, which today is usually an approximation of sRGB gamma. * This means that setting a perfectly linear ramp, or gamma 1.0, will produce * the default (usually sRGB-like) behavior. * * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref * GLFW_SRGB_CAPABLE hint. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] gamma The desired exponent. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); /*! @brief Returns the current gamma ramp for the specified monitor. * * This function returns the current gamma ramp of the specified monitor. * * @param[in] monitor The monitor to query. * @return The current gamma ramp, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR while * returning `NULL`. * * @pointer_lifetime The returned structure and its arrays are allocated and * freed by GLFW. You should not free them yourself. They are valid until the * specified monitor is disconnected, this function is called again for that * monitor or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); /*! @brief Sets the current gamma ramp for the specified monitor. * * This function sets the current gamma ramp for the specified monitor. The * original gamma ramp for that monitor is saved by GLFW the first time this * function is called and is restored by @ref glfwTerminate. * * The software controlled gamma ramp is applied _in addition_ to the hardware * gamma correction, which today is usually an approximation of sRGB gamma. * This means that setting a perfectly linear ramp, or gamma 1.0, will produce * the default (usually sRGB-like) behavior. * * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref * GLFW_SRGB_CAPABLE hint. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] ramp The gamma ramp to use. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The size of the specified gamma ramp should match the size of the * current ramp for that monitor. * * @remark @win32 The gamma ramp size must be 256. * * @remark @wayland Gamma handling is a privileged protocol, this function * will thus never be implemented and emits @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified gamma ramp is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref monitor_gamma * * @since Added in version 3.0. * * @ingroup monitor */ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); /*! @brief Resets all window hints to their default values. * * This function resets all window hints to their * [default values](@ref window_hints_values). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHint * @sa @ref glfwWindowHintString * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwDefaultWindowHints(void); /*! @brief Sets the specified window hint to the desired value. * * This function sets hints for the next call to @ref glfwCreateWindow. The * hints, once set, retain their values until changed by a call to this * function or @ref glfwDefaultWindowHints, or until the library is terminated. * * Only integer value hints can be set with this function. String value hints * are set with @ref glfwWindowHintString. * * This function does not check whether the specified hint values are valid. * If you set hints to invalid values this will instead be reported by the next * call to @ref glfwCreateWindow. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [window hint](@ref window_hints) to set. * @param[in] value The new value of the window hint. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHintString * @sa @ref glfwDefaultWindowHints * * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. * * @ingroup window */ GLFWAPI void glfwWindowHint(int hint, int value); /*! @brief Sets the specified window hint to the desired value. * * This function sets hints for the next call to @ref glfwCreateWindow. The * hints, once set, retain their values until changed by a call to this * function or @ref glfwDefaultWindowHints, or until the library is terminated. * * Only string type hints can be set with this function. Integer value hints * are set with @ref glfwWindowHint. * * This function does not check whether the specified hint values are valid. * If you set hints to invalid values this will instead be reported by the next * call to @ref glfwCreateWindow. * * Some hints are platform specific. These may be set on any platform but they * will only affect their specific platform. Other platforms will ignore them. * Setting these hints requires no platform specific headers or functions. * * @param[in] hint The [window hint](@ref window_hints) to set. * @param[in] value The new value of the window hint. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @pointer_lifetime The specified string is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hints * @sa @ref glfwWindowHint * @sa @ref glfwDefaultWindowHints * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwWindowHintString(int hint, const char* value); /*! @brief Creates a window and its associated context. * * This function creates a window and its associated OpenGL or OpenGL ES * context. Most of the options controlling how the window and its context * should be created are specified with [window hints](@ref window_hints). * * Successful creation does not change which context is current. Before you * can use the newly created context, you need to * [make it current](@ref context_current). For information about the `share` * parameter, see @ref context_sharing. * * The created window, framebuffer and context may differ from what you * requested, as not all parameters and hints are * [hard constraints](@ref window_hints_hard). This includes the size of the * window, especially for full screen windows. To query the actual attributes * of the created window, framebuffer and context, see @ref * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. * * To create a full screen window, you need to specify the monitor the window * will cover. If no monitor is specified, the window will be windowed mode. * Unless you have a way for the user to choose a specific monitor, it is * recommended that you pick the primary monitor. For more information on how * to query connected monitors, see @ref monitor_monitors. * * For full screen windows, the specified size becomes the resolution of the * window's _desired video mode_. As long as a full screen window is not * iconified, the supported video mode most closely matching the desired video * mode is set for the specified monitor. For more information about full * screen windows, including the creation of so called _windowed full screen_ * or _borderless full screen_ windows, see @ref window_windowed_full_screen. * * Once you have created the window, you can switch it between windowed and * full screen mode with @ref glfwSetWindowMonitor. This will not affect its * OpenGL or OpenGL ES context. * * By default, newly created windows use the placement recommended by the * window system. To create the window at a specific position, make it * initially invisible using the [GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) * it. * * As long as at least one full screen window is not iconified, the screensaver * is prohibited from starting. * * Window systems put limits on window sizes. Very large or very small window * dimensions may be overridden by the window system on creation. Check the * actual [size](@ref window_size) after creation. * * The [swap interval](@ref buffer_swap) is not set during window creation and * the initial value may vary depending on driver settings and defaults. * * @param[in] width The desired width, in screen coordinates, of the window. * This must be greater than zero. * @param[in] height The desired height, in screen coordinates, of the window. * This must be greater than zero. * @param[in] title The initial, UTF-8 encoded window title. * @param[in] monitor The monitor to use for full screen mode, or `NULL` for * windowed mode. * @param[in] share The window whose context to share resources with, or `NULL` * to not share resources. * @return The handle of the created window, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref * GLFW_PLATFORM_ERROR. * * @remark @win32 Window creation will fail if the Microsoft GDI software * OpenGL implementation is the only one available. * * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it * will be set as the initial icon for the window. If no such icon is present, * the `IDI_APPLICATION` icon will be used instead. To set a different icon, * see @ref glfwSetWindowIcon. * * @remark @win32 The context to share resources with must not be current on * any other thread. * * @remark @macos The OS only supports forward-compatible core profile contexts * for OpenGL versions 3.2 and later. Before creating an OpenGL context of * version 3.2 or later you must set the * [GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) and * [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) hints accordingly. * OpenGL 3.0 and 3.1 contexts are not supported at all on macOS. * * @remark @macos The GLFW window has no icon, as it is not a document * window, but the dock icon will be the same as the application bundle's icon. * For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * * @remark @macos The first time a window is created the menu bar is created. * If GLFW finds a `MainMenu.nib` it is loaded and assumed to contain a menu * bar. Otherwise a minimal menu bar is created manually with common commands * like Hide, Quit and About. The About entry opens a minimal about dialog * with information from the application's bundle. Menu bar creation can be * disabled entirely with the @ref GLFW_COCOA_MENUBAR init hint. * * @remark @macos On OS X 10.10 and later the window frame will not be rendered * at full resolution on Retina displays unless the * [GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) * hint is `true` and the `NSHighResolutionCapable` key is enabled in the * application bundle's `Info.plist`. For more information, see * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) * in the Mac Developer Library. The GLFW test and example programs use * a custom `Info.plist` template for this, which can be found as * `CMake/MacOSXBundleInfo.plist.in` in the source tree. * * @remark @macos When activating frame autosaving with * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified * window size and position may be overridden by previously saved values. * * @remark @x11 Some window managers will not respect the placement of * initially hidden windows. * * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for * a window to reach its requested state. This means you may not be able to * query the final size, position or other attributes directly after window * creation. * * @remark @x11 The class part of the `WM_CLASS` window property will by * default be set to the window title passed to this function. The instance * part will use the contents of the `RESOURCE_NAME` environment variable, if * present and not empty, or fall back to the window title. Set the * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to * override this. * * @remark @wayland Compositors should implement the xdg-decoration protocol * for GLFW to decorate the window properly. If this protocol isn't * supported, or if the compositor prefers client-side decorations, a very * simple fallback frame will be drawn using the wp_viewporter protocol. A * compositor can still emit close, maximize or fullscreen events, using for * instance a keybind mechanism. If neither of these protocols is supported, * the window won't be decorated. * * @remark @wayland A full screen window will not attempt to change the mode, * no matter what the requested size or refresh rate. * * @remark @wayland Screensaver inhibition requires the idle-inhibit protocol * to be implemented in the user's compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation * @sa @ref glfwDestroyWindow * * @since Added in version 3.0. Replaces `glfwOpenWindow`. * * @ingroup window */ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); GLFWAPI bool glfwToggleFullscreen(GLFWwindow *window, unsigned int flags); /*! @brief Destroys the specified window and its context. * * This function destroys the specified window and its context. On calling * this function, no further callbacks will be called for that window. * * If the context of the specified window is current on the main thread, it is * detached before being destroyed. * * @param[in] window The window to destroy. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @note The context of the specified window must not be current on any other * thread when this function is called. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_creation * @sa @ref glfwCreateWindow * * @since Added in version 3.0. Replaces `glfwCloseWindow`. * * @ingroup window */ GLFWAPI void glfwDestroyWindow(GLFWwindow* window); /*! @brief Checks the close flag of the specified window. * * This function returns the value of the close flag of the specified window. * * @param[in] window The window to query. * @return The value of the close flag. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_close * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); /*! @brief Sets the close flag of the specified window. * * This function sets the value of the close flag of the specified window. * This can be used to override the user's attempt to close the window, or * to signal that it should be closed. * * @param[in] window The window whose flag to change. * @param[in] value The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_close * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); /*! @brief Sets the title of the specified window. * * This function sets the window title, encoded as UTF-8, of the specified * window. * * @param[in] window The window whose title to change. * @param[in] title The UTF-8 encoded window title. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @macos The window title will not be updated until the next time you * process events. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_title * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); /*! @brief Sets the icon for the specified window. * * This function sets the icon of the specified window. If passed an array of * candidate images, those of or closest to the sizes desired by the system are * selected. If no images are specified, the window reverts to its default * icon. * * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight * bits per channel with the red channel first. They are arranged canonically * as packed sequential rows, starting from the top-left corner. * * The desired image sizes varies depending on platform and system settings. * The selected images will be rescaled as needed. Good sizes include 16x16, * 32x32 and 48x48. * * @param[in] window The window whose icon to set. * @param[in] count The number of images in the specified array, or zero to * revert to the default window icon. * @param[in] images The images to create the icon from. This is ignored if * count is zero. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. * * @remark @macos The GLFW window has no icon, as it is not a document * window, so this function does nothing. The dock icon will be the same as * the application bundle's icon. For more information on bundles, see the * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) * in the Mac Developer Library. * * @remark @wayland There is no existing protocol to change an icon, the * window will thus inherit the one defined in the application's desktop file. * This function always emits @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_icon * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); /*! @brief Retrieves the position of the content area of the specified window. * * This function retrieves the position, in screen coordinates, of the * upper-left corner of the content area of the specified window. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] window The window to query. * @param[out] xpos Where to store the x-coordinate of the upper-left corner of * the content area, or `NULL`. * @param[out] ypos Where to store the y-coordinate of the upper-left corner of * the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland There is no way for an application to retrieve the global * position of its windows, this function will always emit @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * @sa @ref glfwSetWindowPos * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); /*! @brief Sets the position of the content area of the specified window. * * This function sets the position, in screen coordinates, of the upper-left * corner of the content area of the specified windowed mode window. If the * window is a full screen window, this function does nothing. * * __Do not use this function__ to move an already visible window unless you * have very good reasons for doing so, as it will confuse and annoy the user. * * The window manager may put limits on what positions are allowed. GLFW * cannot and should not override these limits. * * @param[in] window The window to query. * @param[in] xpos The x-coordinate of the upper-left corner of the content area. * @param[in] ypos The y-coordinate of the upper-left corner of the content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland There is no way for an application to set the global * position of its windows, this function will always emit @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * @sa @ref glfwGetWindowPos * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); /*! @brief Retrieves the size of the content area of the specified window. * * This function retrieves the size, in screen coordinates, of the content area * of the specified window. If you wish to retrieve the size of the * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose size to retrieve. * @param[out] width Where to store the width, in screen coordinates, of the * content area, or `NULL`. * @param[out] height Where to store the height, in screen coordinates, of the * content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * @sa @ref glfwSetWindowSize * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); /*! @brief Sets the size limits of the specified window. * * This function sets the size limits of the content area of the specified * window. If the window is full screen, the size limits only take effect * once it is made windowed. If the window is not resizable, this function * does nothing. * * The size limits are applied immediately to a windowed mode window and may * cause it to be resized. * * The maximum dimensions must be greater than or equal to the minimum * dimensions and all must be greater than or equal to zero. * * @param[in] window The window to set limits for. * @param[in] minwidth The minimum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] minheight The minimum height, in screen coordinates, of the * content area, or `GLFW_DONT_CARE`. * @param[in] maxwidth The maximum width, in screen coordinates, of the content * area, or `GLFW_DONT_CARE`. * @param[in] maxheight The maximum height, in screen coordinates, of the * content area, or `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * * @remark @wayland The size limits will not be applied until the window is * actually resized, either by the user or by the compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits * @sa @ref glfwSetWindowAspectRatio * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); /*! @brief Sets the aspect ratio of the specified window. * * This function sets the required aspect ratio of the content area of the * specified window. If the window is full screen, the aspect ratio only takes * effect once it is made windowed. If the window is not resizable, this * function does nothing. * * The aspect ratio is specified as a numerator and a denominator and both * values must be greater than zero. For example, the common 16:9 aspect ratio * is specified as 16 and 9, respectively. * * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect * ratio limit is disabled. * * The aspect ratio is applied immediately to a windowed mode window and may * cause it to be resized. * * @param[in] window The window to set limits for. * @param[in] numer The numerator of the desired aspect ratio, or * `GLFW_DONT_CARE`. * @param[in] denom The denominator of the desired aspect ratio, or * `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark If you set size limits and an aspect ratio that conflict, the * results are undefined. * * @remark @wayland The aspect ratio will not be applied until the window is * actually resized, either by the user or by the compositor. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_sizelimits * @sa @ref glfwSetWindowSizeLimits * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); /*! @brief Sets the size of the content area of the specified window. * * This function sets the size, in screen coordinates, of the content area of * the specified window. * * For full screen windows, this function updates the resolution of its desired * video mode and switches to the video mode closest to it, without affecting * the window's context. As the context is unaffected, the bit depths of the * framebuffer remain unchanged. * * If you wish to update the refresh rate of the desired video mode in addition * to its resolution, see @ref glfwSetWindowMonitor. * * The window manager may put limits on what sizes are allowed. GLFW cannot * and should not override these limits. * * @param[in] window The window to resize. * @param[in] width The desired width, in screen coordinates, of the window * content area. * @param[in] height The desired height, in screen coordinates, of the window * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland A full screen window will not attempt to change the mode, * no matter what the requested size. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * @sa @ref glfwGetWindowSize * @sa @ref glfwSetWindowMonitor * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); /*! @brief Retrieves the size of the framebuffer of the specified window. * * This function retrieves the size, in pixels, of the framebuffer of the * specified window. If you wish to retrieve the size of the window in screen * coordinates, see @ref glfwGetWindowSize. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose framebuffer to query. * @param[out] width Where to store the width, in pixels, of the framebuffer, * or `NULL`. * @param[out] height Where to store the height, in pixels, of the framebuffer, * or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_fbsize * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); /*! @brief Retrieves the size of the frame of the window. * * This function retrieves the size, in screen coordinates, of each edge of the * frame of the specified window. This size includes the title bar, if the * window has one. The size of the frame may vary depending on the * [window-related hints](@ref window_hints_wnd) used to create it. * * Because this function retrieves the size of each window frame edge and not * the offset along a particular coordinate axis, the retrieved values will * always be zero or positive. * * Any or all of the size arguments may be `NULL`. If an error occurs, all * non-`NULL` size arguments will be set to zero. * * @param[in] window The window whose frame size to query. * @param[out] left Where to store the size, in screen coordinates, of the left * edge of the window frame, or `NULL`. * @param[out] top Where to store the size, in screen coordinates, of the top * edge of the window frame, or `NULL`. * @param[out] right Where to store the size, in screen coordinates, of the * right edge of the window frame, or `NULL`. * @param[out] bottom Where to store the size, in screen coordinates, of the * bottom edge of the window frame, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * * @since Added in version 3.1. * * @ingroup window */ GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); /*! @brief Retrieves the content scale for the specified window. * * This function retrieves the content scale for the specified window. The * content scale is the ratio between the current DPI and the platform's * default DPI. This is especially important for text and any UI elements. If * the pixel dimensions of your UI scaled by this look appropriate on your * machine then it should appear at a reasonable size on other machines * regardless of their DPI and scaling settings. This relies on the system DPI * and scaling settings being somewhat correct. * * On systems where each monitors can have its own content scale, the window * content scale will depend on which monitor the system considers the window * to be on. * * @param[in] window The window to query. * @param[out] xscale Where to store the x-axis content scale, or `NULL`. * @param[out] yscale Where to store the y-axis content scale, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_scale * @sa @ref glfwSetWindowContentScaleCallback * @sa @ref glfwGetMonitorContentScale * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale); /*! @brief Returns the double click time interval. * * This function returns the maximum time between clicks to count as a * double click. * * The double click interval is a positive finite number greater than zero, * where zero means that no click is ever recognized as a double click. If the * system does not support a double click interval, this function always returns one half. * * @return The double click interval. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref double_click * @sa @ref click_interval * @sa @ref double_click_interval * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI monotonic_t glfwGetDoubleClickInterval(GLFWwindow* window); /*! @brief Returns the opacity of the whole window. * * This function returns the opacity of the window, including any decorations. * * The opacity (or alpha) value is a positive finite number between zero and * one, where zero is fully transparent and one is fully opaque. If the system * does not support whole window transparency, this function always returns one. * * The initial opacity value for newly created windows is one. * * @param[in] window The window to query. * @return The opacity value of the specified window. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_transparency * @sa @ref glfwSetWindowOpacity * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window); /*! @brief Sets the opacity of the whole window. * * This function sets the opacity of the window, including any decorations. * * The opacity (or alpha) value is a positive finite number between zero and * one, where zero is fully transparent and one is fully opaque. * * The initial opacity value for newly created windows is one. * * A window created with framebuffer transparency may not use whole window * transparency. The results of doing this are undefined. * * @param[in] window The window to set the opacity for. * @param[in] opacity The desired opacity of the specified window. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_transparency * @sa @ref glfwGetWindowOpacity * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); /*! @brief Iconifies the specified window. * * This function iconifies (minimizes) the specified window if it was * previously restored. If the window is already iconified, this function does * nothing. * * If the specified window is a full screen window, the original monitor * resolution is restored until the window is restored. * * @param[in] window The window to iconify. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland Once a window is iconified, @ref glfwRestoreWindow won’t * be able to restore it. This is a design decision of the xdg-shell * protocol. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwRestoreWindow * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwIconifyWindow(GLFWwindow* window); /*! @brief Restores the specified window. * * This function restores the specified window if it was previously iconified * (minimized) or maximized. If the window is already restored, this function * does nothing. * * If the specified window is a full screen window, the resolution chosen for * the window is restored on the selected monitor. * * @param[in] window The window to restore. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwIconifyWindow * @sa @ref glfwMaximizeWindow * * @since Added in version 2.1. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwRestoreWindow(GLFWwindow* window); /*! @brief Maximizes the specified window. * * This function maximizes the specified window if it was previously not * maximized. If the window is already maximized, this function does nothing. * * If the specified window is a full screen window, this function does nothing. * * @param[in] window The window to maximize. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @par Thread Safety * This function may only be called from the main thread. * * @sa @ref window_iconify * @sa @ref glfwIconifyWindow * @sa @ref glfwRestoreWindow * * @since Added in GLFW 3.2. * * @ingroup window */ GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); /*! @brief Makes the specified window visible. * * This function makes the specified window visible if it was previously * hidden. If the window is already visible or is in full screen mode, this * function does nothing. * * By default, windowed mode windows are focused when shown * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint * to change this behavior for all newly created windows, or change the * behavior for an existing window with @ref glfwSetWindowAttrib. * * @param[in] window The window to make visible. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide * @sa @ref glfwHideWindow * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwShowWindow(GLFWwindow* window); /*! @brief Hides the specified window. * * This function hides the specified window if it was previously visible. If * the window is already hidden or is in full screen mode, this function does * nothing. * * @param[in] window The window to hide. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide * @sa @ref glfwShowWindow * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwHideWindow(GLFWwindow* window); /*! @brief Brings the specified window to front and sets input focus. * * This function brings the specified window to front and sets input focus. * The window should already be visible and not iconified. * * By default, both windowed and full screen mode windows are focused when * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to * disable this behavior. * * Also by default, windowed mode windows are focused when shown * with @ref glfwShowWindow. Set the * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. * * __Do not use this function__ to steal focus from other applications unless * you are certain that is what the user wants. Focus stealing can be * extremely disruptive. * * For a less disruptive way of getting the user's attention, see * [attention requests](@ref window_attention). * * @param[in] window The window to give input focus. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland It is not possible for an application to bring its windows * to front, this function will always emit @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_focus * @sa @ref window_attention * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwFocusWindow(GLFWwindow* window); /*! @brief Requests user attention to the specified window. * * This function requests user attention to the specified window. On * platforms where this is not supported, attention is requested to the * application as a whole. * * Once the user has given attention, usually by focusing the window or * application, the system will end the request automatically. * * @param[in] window The window to request attention to. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @macos Attention is requested to the application as a whole, not the * specific window. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attention * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window); /*! @brief Sounds an audible bell associated with the window * * This function sounds an audible bell, on platforms where it is * supported. Currently (macOS, Windows, X11 and Wayland). * * @param[in] window The window with which the bell is associated. * @return true if the bell succeeded otherwise false * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @macos Bell is associated to the application as a whole, not the * specific window. * * @thread_safety This function must only be called from the main thread. * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI int glfwWindowBell(GLFWwindow* window); /*! @brief Returns the monitor that the window uses for full screen mode. * * This function returns the handle of the monitor that the specified window is * in full screen on. * * @param[in] window The window to query. * @return The monitor, or `NULL` if the window is in windowed mode or an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor * @sa @ref glfwSetWindowMonitor * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); /*! @brief Sets the mode, monitor, video mode and placement of a window. * * This function sets the monitor that the window uses for full screen mode or, * if the monitor is `NULL`, makes it windowed mode. * * When setting a monitor, this function updates the width, height and refresh * rate of the desired video mode and switches to the video mode closest to it. * The window position is ignored when setting a monitor. * * When the monitor is `NULL`, the position, width and height are used to * place the window content area. The refresh rate is ignored when no monitor * is specified. * * If you only wish to update the resolution of a full screen window or the * size of a windowed mode window, see @ref glfwSetWindowSize. * * When a window transitions from full screen to windowed mode, this function * restores any previous window settings such as whether it is decorated, * floating, resizable, has size or aspect ratio limits, etc. * * @param[in] window The window whose monitor, size or video mode to set. * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. * @param[in] xpos The desired x-coordinate of the upper-left corner of the * content area. * @param[in] ypos The desired y-coordinate of the upper-left corner of the * content area. * @param[in] width The desired with, in screen coordinates, of the content * area or video mode. * @param[in] height The desired height, in screen coordinates, of the content * area or video mode. * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, * or `GLFW_DONT_CARE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise * affected by any resizing or mode switching, although you may need to update * your viewport if the framebuffer size has changed. * * @remark @wayland The desired window position is ignored, as there is no way * for an application to set this property. * * @remark @wayland Setting the window to full screen will not attempt to * change the mode, no matter what the requested size or refresh rate. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_monitor * @sa @ref window_full_screen * @sa @ref glfwGetWindowMonitor * @sa @ref glfwSetWindowSize * * @since Added in version 3.2. * * @ingroup window */ GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); /*! @brief Returns an attribute of the specified window. * * This function returns the value of an attribute of the specified window or * its OpenGL or OpenGL ES context. * * @param[in] window The window to query. * @param[in] attrib The [window attribute](@ref window_attribs) whose value to * return. * @return The value of the attribute, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @remark Framebuffer related hints are not window attributes. See @ref * window_attribs_fb for more information. * * @remark Zero is a valid value for many window and context related * attributes so you cannot use a return value of zero as an indication of * errors. However, this function should not fail as long as it is passed * valid arguments and the library has been [initialized](@ref intro_init). * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs * @sa @ref glfwSetWindowAttrib * * @since Added in version 3.0. Replaces `glfwGetWindowParam` and * `glfwGetGLVersion`. * * @ingroup window */ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); /*! @brief Sets an attribute of the specified window. * * This function sets the value of an attribute of the specified window. * * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib), * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib). * * Some of these attributes are ignored for full screen windows. The new * value will take effect if the window is later made windowed. * * Some of these attributes are ignored for windowed mode windows. The new * value will take effect if the window is later made full screen. * * @param[in] window The window to set the attribute for. * @param[in] attrib A supported window attribute. * @param[in] value `true` or `false`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @remark Calling @ref glfwGetWindowAttrib will always return the latest * value, even if that value is ignored by the current mode of the window. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs * @sa @ref glfwGetWindowAttrib * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value); /*! @brief Sets the user pointer of the specified window. * * This function sets the user-defined pointer of the specified window. The * current value is retained until the window is destroyed. The initial value * is `NULL`. * * @param[in] window The window whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_userptr * @sa @ref glfwGetWindowUserPointer * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); /*! @brief Returns the user pointer of the specified window. * * This function returns the current value of the user-defined pointer of the * specified window. The initial value is `NULL`. * * @param[in] window The window whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref window_userptr * @sa @ref glfwSetWindowUserPointer * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); /*! @brief Sets the position callback for the specified window. * * This function sets the position callback of the specified window, which is * called when the window is moved. The callback is provided with the * position, in screen coordinates, of the upper-left corner of the content * area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int xpos, int ypos) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowposfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland This callback will never be called, as there is no way for * an application to know its global position. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_pos * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback); /*! @brief Sets the size callback for the specified window. * * This function sets the size callback of the specified window, which is * called when the window is resized. The callback is provided with the size, * in screen coordinates, of the content area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowsizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_size * * @since Added in version 1.0. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback); /*! @brief Sets the close callback for the specified window. * * This function sets the close callback of the specified window, which is * called when the user attempts to close the window, for example by clicking * the close widget in the title bar. * * The close flag is set before this callback is called, but you can modify it * at any time with @ref glfwSetWindowShouldClose. * * The close callback is not triggered by @ref glfwDestroyWindow. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowclosefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @macos Selecting Quit from the application menu will trigger the * close callback for all windows. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_close * * @since Added in version 2.5. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback); /*! @brief Sets the refresh callback for the specified window. * * This function sets the refresh callback of the specified window, which is * called when the content area of the window needs to be redrawn, for example * if the window has been exposed after having been covered by another window. * * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where * the window contents are saved off-screen, this callback may be called only * very infrequently or never at all. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window); * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowrefreshfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_refresh * * @since Added in version 2.5. * @glfw3 Added window handle parameter and return value. * * @ingroup window */ GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback); /*! @brief Sets the focus callback for the specified window. * * This function sets the focus callback of the specified window, which is * called when the window gains or loses input focus. * * After the focus callback is called for a window that lost input focus, * synthetic key and mouse button release events will be generated for all such * that had been pressed. For more information, see @ref glfwSetKeyCallback * and @ref glfwSetMouseButtonCallback. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int focused) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowfocusfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_focus * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback); /*! @brief Sets the occlusion callback for the specified window. * * This function sets the occlusion callback of the specified window, which is * called when the window becomes (fully) occluded by other windows or when (a * part of) the window becomes visible again because an overlapping window is * moved away. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowiconifyfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_occlusion * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI GLFWwindowocclusionfun glfwSetWindowOcclusionCallback(GLFWwindow* window, GLFWwindowocclusionfun callback); /*! @brief Sets the iconify callback for the specified window. * * This function sets the iconification callback of the specified window, which * is called when the window is iconified or restored. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowiconifyfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback); /*! @brief Sets the maximize callback for the specified window. * * This function sets the maximization callback of the specified window, which * is called when the window is maximized or restored. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int maximized) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowmaximizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_maximize * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback); /*! @brief Sets the framebuffer resize callback for the specified window. * * This function sets the framebuffer resize callback of the specified window, * which is called when the framebuffer of the specified window is resized. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWframebuffersizefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_fbsize * * @since Added in version 3.0. * * @ingroup window */ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback); /*! @brief Sets the window content scale callback for the specified window. * * This function sets the window content scale callback of the specified window, * which is called when the content scale of the specified window changes. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, float xscale, float yscale) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWwindowcontentscalefun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_scale * @sa @ref glfwGetWindowContentScale * * @since Added in version 3.3. * * @ingroup window */ GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback); /*! @brief Posts an empty event to the event queue. * * This function posts an empty event from the current thread to the event * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref events * @sa @ref glfwWaitEvents * @sa @ref glfwWaitEventsTimeout * * @since Added in version 3.1. * * @ingroup window */ GLFWAPI void glfwPostEmptyEvent(void); /*! @brief Returns the value of an input option for the specified window. * * This function returns the value of an input option for the specified window. * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, * @ref GLFW_STICKY_MOUSE_BUTTONS or @ref GLFW_LOCK_KEY_MODS. * * @param[in] window The window to query. * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, * `GLFW_STICKY_MOUSE_BUTTONS` or `GLFW_LOCK_KEY_MODS`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref glfwSetInputMode * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); /*! @brief Sets an input option for the specified window. * * This function sets an input mode option for the specified window. The mode * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, * @ref GLFW_STICKY_MOUSE_BUTTONS or @ref GLFW_LOCK_KEY_MODS. * * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor * modes: * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the * content area of the window but does not restrict the cursor from leaving. * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual * and unlimited cursor movement. This is useful for implementing for * example 3D camera controls. * * If the mode is `GLFW_STICKY_KEYS`, the value must be either `true` to * enable sticky keys, or `false` to disable it. If sticky keys are * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` * the next time it is called even if the key had been released before the * call. This is useful when you are only interested in whether keys have been * pressed but not when or in which order. * * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either * `true` to enable sticky mouse buttons, or `false` to disable it. * If sticky mouse buttons are enabled, a mouse button press will ensure that * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even * if the mouse button had been released before the call. This is useful when * you are only interested in whether mouse buttons have been pressed but not * when or in which order. * * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `true` to * enable lock key modifier bits, or `false` to disable them. If enabled, * callbacks that receive modifier bits will also have the @ref * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. * * @param[in] window The window whose input mode to set. * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, * `GLFW_STICKY_MOUSE_BUTTONS` or `GLFW_LOCK_KEY_MODS`. * @param[in] value The new value of the specified input mode. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref glfwGetInputMode * * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. * * @ingroup input */ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); /*! @brief Returns the layout-specific name of the specified printable key. * * This function returns the name of the specified printable key, encoded as * UTF-8. This is typically the character that key would produce without any * modifier keys, intended for displaying key bindings to the user. For dead * keys, it is typically the diacritic it would add to a character. * * __Do not use this function__ for [text input](@ref input_char). You will * break text input for many languages even if it happens to work for yours. * * If the key is `GLFW_KEY_UNKNOWN`, the keycode is used to identify the key, * otherwise the keycode is ignored. If you specify a non-printable key, or * `GLFW_KEY_UNKNOWN` and a keycode that maps to a non-printable key, this * function returns `NULL` but does not emit an error. * * This behavior allows you to always pass in the arguments in the * [key callback](@ref input_key) without modification. * * The printable keys are: * - `GLFW_KEY_SPACE` * - `GLFW_KEY_EXCLAM` * - `GLFW_KEY_DOUBLE_QUOTE` * - `GLFW_KEY_NUMBER_SIGN` * - `GLFW_KEY_DOLLAR` * - `GLFW_KEY_AMPERSAND` * - `GLFW_KEY_APOSTROPHE` * - `GLFW_KEY_PARENTHESIS_LEFT` * - `GLFW_KEY_PARENTHESIS_RIGHT` * - `GLFW_KEY_PLUS` * - `GLFW_KEY_COMMA` * - `GLFW_KEY_MINUS` * - `GLFW_KEY_PERIOD` * - `GLFW_KEY_SLASH` * - `GLFW_KEY_0` to `GLFW_KEY_9` * - `GLFW_KEY_COLON` * - `GLFW_KEY_SEMICOLON` * - `GLFW_KEY_LESS` * - `GLFW_KEY_EQUAL` * - `GLFW_KEY_GREATER` * - `GLFW_KEY_AT` * - `GLFW_KEY_A` to `GLFW_KEY_Z` * - `GLFW_KEY_LEFT_BRACKET` * - `GLFW_KEY_BACKSLASH` * - `GLFW_KEY_RIGHT_BRACKET` * - `GLFW_KEY_UNDERSCORE` * - `GLFW_KEY_GRAVE_ACCENT` * - `GLFW_KEY_WORLD_1` * - `GLFW_KEY_WORLD_2` * - `GLFW_KEY_PARAGRAPH` * - `GLFW_KEY_MASCULINE` * - `GLFW_KEY_A_GRAVE` * - `GLFW_KEY_A_DIAERESIS` * - `GLFW_KEY_A_RING` * - `GLFW_KEY_AE` * - `GLFW_KEY_C_CEDILLA` * - `GLFW_KEY_E_GRAVE` * - `GLFW_KEY_E_ACUTE` * - `GLFW_KEY_I_GRAVE` * - `GLFW_KEY_N_TILDE` * - `GLFW_KEY_O_GRAVE` * - `GLFW_KEY_O_DIAERESIS` * - `GLFW_KEY_O_SLASH` * - `GLFW_KEY_U_GRAVE` * - `GLFW_KEY_U_DIAERESIS` * - `GLFW_KEY_S_SHARP` * - `GLFW_KEY_CYRILLIC_A` * - `GLFW_KEY_CYRILLIC_BE` * - `GLFW_KEY_CYRILLIC_VE` * - `GLFW_KEY_CYRILLIC_GHE` * - `GLFW_KEY_CYRILLIC_DE` * - `GLFW_KEY_CYRILLIC_IE` * - `GLFW_KEY_CYRILLIC_ZHE` * - `GLFW_KEY_CYRILLIC_ZE` * - `GLFW_KEY_CYRILLIC_I` * - `GLFW_KEY_CYRILLIC_SHORT_I` * - `GLFW_KEY_CYRILLIC_KA` * - `GLFW_KEY_CYRILLIC_EL` * - `GLFW_KEY_CYRILLIC_EM` * - `GLFW_KEY_CYRILLIC_EN` * - `GLFW_KEY_CYRILLIC_O` * - `GLFW_KEY_CYRILLIC_PE` * - `GLFW_KEY_CYRILLIC_ER` * - `GLFW_KEY_CYRILLIC_ES` * - `GLFW_KEY_CYRILLIC_TE` * - `GLFW_KEY_CYRILLIC_U` * - `GLFW_KEY_CYRILLIC_EF` * - `GLFW_KEY_CYRILLIC_HA` * - `GLFW_KEY_CYRILLIC_TSE` * - `GLFW_KEY_CYRILLIC_CHE` * - `GLFW_KEY_CYRILLIC_SHA` * - `GLFW_KEY_CYRILLIC_SHCHA` * - `GLFW_KEY_CYRILLIC_HARD_SIGN` * - `GLFW_KEY_CYRILLIC_YERU` * - `GLFW_KEY_CYRILLIC_SOFT_SIGN` * - `GLFW_KEY_CYRILLIC_E` * - `GLFW_KEY_CYRILLIC_YU` * - `GLFW_KEY_CYRILLIC_YA` * - `GLFW_KEY_CYRILLIC_IO` * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` * - `GLFW_KEY_KP_DECIMAL` * - `GLFW_KEY_KP_DIVIDE` * - `GLFW_KEY_KP_MULTIPLY` * - `GLFW_KEY_KP_SUBTRACT` * - `GLFW_KEY_KP_ADD` * - `GLFW_KEY_KP_EQUAL` * * Names for printable keys depend on keyboard layout, while names for * non-printable keys are the same across layouts but depend on the application * language and should be localized along with other user interface text. * * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. * @param[in] native_key The platform-specifc identifier of the key to query. * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark The contents of the returned string may change when a keyboard * layout change event is received. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_key_name * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI const char* glfwGetKeyName(int key, int native_key); /*! @brief Returns the platform-specific identifier of the specified key. * * This function returns the platform-specific identifier of the specified key. * * If the key is `GLFW_KEY_UNKNOWN` or does not exist on the keyboard this * method will return `-1`. * * @param[in] key Any [named key](@ref keys). * @return The platform-specific identifier for the key, or `-1` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref input_key * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwGetNativeKeyForKey(int key); /*! @brief Returns the last reported state of a keyboard key for the specified * window. * * This function returns the last state reported for the specified key to the * specified window. The returned state is one of `GLFW_PRESS` or * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to * the key callback. * * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns * `GLFW_PRESS` the first time you call it for a key that was pressed, even if * that key has already been released. * * The key functions deal with physical keys, with [key tokens](@ref keys) * named after their use on the standard US keyboard layout. If you want to * input text, use the Unicode character callback instead. * * The [modifier key bit masks](@ref mods) are not key tokens and cannot be * used with this function. * * __Do not use this function__ to implement [text input](@ref input_char). * * @param[in] window The desired window. * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is * not a valid key for this function. * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_key * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup input */ GLFWAPI int glfwGetKey(GLFWwindow* window, int key); /*! @brief Returns the last reported state of a mouse button for the specified * window. * * This function returns the last state reported for the specified mouse button * to the specified window. The returned state is one of `GLFW_PRESS` or * `GLFW_RELEASE`. * * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function * returns `GLFW_PRESS` the first time you call it for a mouse button that was * pressed, even if that mouse button has already been released. * * @param[in] window The desired window. * @param[in] button The desired [mouse button](@ref buttons). * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_mouse_button * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup input */ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); /*! @brief Retrieves the position of the cursor relative to the content area of * the window. * * This function returns the position of the cursor, in screen coordinates, * relative to the upper-left corner of the content area of the specified * window. * * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor * position is unbounded and limited only by the minimum and maximum values of * a `double`. * * The coordinate can be converted to their integer equivalents with the * `floor` function. Casting directly to an integer type works for positive * coordinates, but fails for negative ones. * * Any or all of the position arguments may be `NULL`. If an error occurs, all * non-`NULL` position arguments will be set to zero. * * @param[in] window The desired window. * @param[out] xpos Where to store the cursor x-coordinate, relative to the * left edge of the content area, or `NULL`. * @param[out] ypos Where to store the cursor y-coordinate, relative to the to * top edge of the content area, or `NULL`. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * @sa @ref glfwSetCursorPos * * @since Added in version 3.0. Replaces `glfwGetMousePos`. * * @ingroup input */ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); /*! @brief Sets the position of the cursor, relative to the content area of the * window. * * This function sets the position, in screen coordinates, of the cursor * relative to the upper-left corner of the content area of the specified * window. The window must have input focus. If the window does not have * input focus when this function is called, it fails silently. * * __Do not use this function__ to implement things like camera controls. GLFW * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the * cursor, transparently re-centers it and provides unconstrained cursor * motion. See @ref glfwSetInputMode for more information. * * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is * unconstrained and limited only by the minimum and maximum values of * a `double`. * * @param[in] window The desired window. * @param[in] xpos The desired x-coordinate, relative to the left edge of the * content area. * @param[in] ypos The desired y-coordinate, relative to the top edge of the * content area. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland This function will only work when the cursor mode is * `GLFW_CURSOR_DISABLED`, otherwise it will do nothing. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * @sa @ref glfwGetCursorPos * * @since Added in version 3.0. Replaces `glfwSetMousePos`. * * @ingroup input */ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); /*! @brief Creates a custom cursor. * * Creates a new custom cursor image that can be set for a window with @ref * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. * Any remaining cursors are destroyed by @ref glfwTerminate. * * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight * bits per channel with the red channel first. They are arranged canonically * as packed sequential rows, starting from the top-left corner. * * The cursor hotspot is specified in pixels, relative to the upper-left corner * of the cursor image. Like all other coordinate systems in GLFW, the X-axis * points to the right and the Y-axis points down. * * @param[in] image The desired cursor image. * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. * @param[in] count The number of images. Used on Cocoa for retina cursors. The first image should be the 1:1 scale image. * @return The handle of the created cursor, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwDestroyCursor * @sa @ref glfwCreateStandardCursor * * @since Added in version 3.1. Changed in 4.0 to add the count parameter. * * @ingroup input */ GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot, int count); /*! @brief Creates a cursor with a standard shape. * * Returns a cursor with a [standard shape](@ref shapes), that can be set for * a window with @ref glfwSetCursor. * * @param[in] shape One of the [standard shapes](@ref shapes). * @return A new cursor ready to use or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWcursor* glfwCreateStandardCursor(GLFWCursorShape shape); /*! @brief Destroys a cursor. * * This function destroys a cursor previously created with @ref * glfwCreateCursor. Any remaining cursors will be destroyed by @ref * glfwTerminate. * * If the specified cursor is current for any window, that window will be * reverted to the default cursor. This does not affect the cursor mode. * * @param[in] cursor The cursor object to destroy. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @reentrancy This function must not be called from a callback. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * @sa @ref glfwCreateCursor * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); /*! @brief Sets the cursor for the window. * * This function sets the cursor image to be used when the cursor is over the * content area of the specified window. The set cursor will only be visible * when the [cursor mode](@ref cursor_mode) of the window is * `GLFW_CURSOR_NORMAL`. * * On some platforms, the set cursor may not be visible unless the window also * has input focus. * * @param[in] window The window to set the cursor for. * @param[in] cursor The cursor to set, or `NULL` to switch back to the default * arrow cursor. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_object * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); /*! @brief Sets the callback for handling keyboard events. * * @ingroup input */ GLFWAPI GLFWkeyboardfun glfwSetKeyboardCallback(GLFWwindow* window, GLFWkeyboardfun callback); /*! @brief Notifies the OS Input Method Event system of changes to application input state * * Used to notify the IME system of changes in state such as focus gained/lost * and text cursor position. * * @param which: What data to notify. 1 means focus and 2 means cursor position. * @param a, b, c, d: Interpreted based on the value of which. When which is 1 * a is interpreted as a boolean indicating focus gained/lost. When which is 2 * a, b, c, d are the cursor x, y, width and height values (in the window co-ordinate * system). * * @ingroup input * @since Added in version 4.0 */ GLFWAPI void glfwUpdateIMEState(GLFWwindow* window, int which, int a, int b, int c, int d); /*! @brief Sets the mouse button callback. * * This function sets the mouse button callback of the specified window, which * is called when a mouse button is pressed or released. * * When a window loses input focus, it will generate synthetic mouse button * release events for all pressed mouse buttons. You can tell these events * from user-generated events by the fact that the synthetic ones are generated * after the focus loss event has been processed, i.e. after the * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int button, int action, int mods) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWmousebuttonfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref input_mouse_button * * @since Added in version 1.0. * @glfw3 Added window handle parameter and return value. * * @ingroup input */ GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback); /*! @brief Sets the cursor position callback. * * This function sets the cursor position callback of the specified window, * which is called when the cursor is moved. The callback is provided with the * position, in screen coordinates, relative to the upper-left corner of the * content area of the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, double xpos, double ypos); * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcursorposfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_pos * * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. * * @ingroup input */ GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback); /*! @brief Sets the cursor enter/leave callback. * * This function sets the cursor boundary crossing callback of the specified * window, which is called when the cursor enters or leaves the content area of * the window. * * @param[in] window The window whose callback to set. * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int entered) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWcursorenterfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref cursor_enter * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback); /*! @brief Sets the scroll callback. * * This function sets the scroll callback of the specified window, which is * called when a scrolling device is used, such as a mouse wheel or scrolling * area of a touchpad. * * The scroll callback receives all scrolling input, like that from a mouse * wheel or a touchpad scrolling area. * * @param[in] window The window whose callback to set. * @param[in] callback The new scroll callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, double xoffset, double yoffset) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWscrollfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref scrolling * * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. * * @ingroup input */ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback); /*! @brief Sets the path drop callback. * * This function sets the path drop callback of the specified window, which is * called when one or more dragged paths are dropped on the window. * * Because the path array and its strings may have been generated specifically * for that event, they are not guaranteed to be valid after the callback has * returned. If you wish to use them after the callback returns, you need to * make a deep copy. * * @param[in] window The window whose callback to set. * @param[in] callback The new file drop callback, or `NULL` to remove the * currently set callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWdropfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @remark @wayland File drop is currently unimplemented. * * @thread_safety This function must only be called from the main thread. * * @sa @ref path_drop * * @since Added in version 3.1. * * @ingroup input */ GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback); GLFWAPI GLFWliveresizefun glfwSetLiveResizeCallback(GLFWwindow* window, GLFWliveresizefun callback); /*! @brief Returns whether the specified joystick is present. * * This function returns whether the specified joystick is present. * * There is no need to call this function before other functions that accept * a joystick ID, as they all check for presence before performing any other * work. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return `true` if the joystick is present, or `false` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick * * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. * * @ingroup input */ GLFWAPI int glfwJoystickPresent(int jid); /*! @brief Returns the values of all axes of the specified joystick. * * This function returns the values of all axes of the specified joystick. * Each element in the array is a value between -1.0 and 1.0. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of axis values in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of axis values, or `NULL` if the joystick is not present or * an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_axis * * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. * * @ingroup input */ GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count); /*! @brief Returns the state of all buttons of the specified joystick. * * This function returns the state of all buttons of the specified joystick. * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. * * For backward compatibility with earlier versions that did not have @ref * glfwGetJoystickHats, the button array also includes all hats, each * represented as four buttons. The hats are in the same order as returned by * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and * _left_. To disable these extra buttons, set the @ref * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of button states in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of button states, or `NULL` if the joystick is not present * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_button * * @since Added in version 2.2. * @glfw3 Changed to return a dynamic array. * * @ingroup input */ GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count); /*! @brief Returns the state of all hats of the specified joystick. * * This function returns the state of all hats of the specified joystick. * Each element in the array is one of the following values: * * Name | Value * ---- | ----- * `GLFW_HAT_CENTERED` | 0 * `GLFW_HAT_UP` | 1 * `GLFW_HAT_RIGHT` | 2 * `GLFW_HAT_DOWN` | 4 * `GLFW_HAT_LEFT` | 8 * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` * * The diagonal directions are bitwise combinations of the primary (up, right, * down and left) directions and you can test for these individually by ANDing * it with the corresponding direction. * * @code * if (hats[2] & GLFW_HAT_RIGHT) * { * // State of hat 2 could be right-up, right or right-down * } * @endcode * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] count Where to store the number of hat states in the returned * array. This is set to zero if the joystick is not present or an error * occurred. * @return An array of hat states, or `NULL` if the joystick is not present * or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected, this function is called again for that joystick or the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_hat * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count); /*! @brief Returns the name of the specified joystick. * * This function returns the name, encoded as UTF-8, of the specified joystick. * The returned string is allocated and freed by GLFW. You should not free it * yourself. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick * is not present or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_name * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI const char* glfwGetJoystickName(int jid); /*! @brief Returns the SDL compatible GUID of the specified joystick. * * This function returns the SDL compatible GUID, as a UTF-8 encoded * hexadecimal string, of the specified joystick. The returned string is * allocated and freed by GLFW. You should not free it yourself. * * The GUID is what connects a joystick to a gamepad mapping. A connected * joystick will always have a GUID even if there is no gamepad mapping * assigned to it. * * If the specified joystick is not present this function will return `NULL` * but will not generate an error. This can be used instead of first calling * @ref glfwJoystickPresent. * * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to * uniquely identify the make and model of a joystick but does not identify * a specific unit, e.g. all wired Xbox 360 controllers will have the same * GUID on that platform. The GUID for a unit may vary between platforms * depending on what hardware information the platform specific APIs provide. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick * is not present or an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const char* glfwGetJoystickGUID(int jid); /*! @brief Sets the user pointer of the specified joystick. * * This function sets the user-defined pointer of the specified joystick. The * current value is retained until the joystick is disconnected. The initial * value is `NULL`. * * This function may be called from the joystick callback, even for a joystick * that is being disconnected. * * @param[in] jid The joystick whose pointer to set. * @param[in] pointer The new value. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref joystick_userptr * @sa @ref glfwGetJoystickUserPointer * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer); /*! @brief Returns the user pointer of the specified joystick. * * This function returns the current value of the user-defined pointer of the * specified joystick. The initial value is `NULL`. * * This function may be called from the joystick callback, even for a joystick * that is being disconnected. * * @param[in] jid The joystick whose pointer to return. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Access is not * synchronized. * * @sa @ref joystick_userptr * @sa @ref glfwSetJoystickUserPointer * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI void* glfwGetJoystickUserPointer(int jid); /*! @brief Returns whether the specified joystick has a gamepad mapping. * * This function returns whether the specified joystick is both present and has * a gamepad mapping. * * If the specified joystick is present but does not have a gamepad mapping * this function will return `false` but will not generate an error. Call * @ref glfwJoystickPresent to check if a joystick is present regardless of * whether it has a mapping. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return `true` if a joystick is both present and has a gamepad mapping, * or `false` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwGetGamepadState * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwJoystickIsGamepad(int jid); /*! @brief Sets the joystick configuration callback. * * This function sets the joystick configuration callback, or removes the * currently set callback. This is called when a joystick is connected to or * disconnected from the system. * * For joystick connection and disconnection events to be delivered on all * platforms, you need to call one of the [event processing](@ref events) * functions. Joystick disconnection may also be detected and the callback * called by joystick functions. The function will then return whatever it * returns if the joystick is not present. * * @param[in] callback The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @callback_signature * @code * void function_name(int jid, int event) * @endcode * For more information about the callback parameters, see the * [function pointer type](@ref GLFWjoystickfun). * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function must only be called from the main thread. * * @sa @ref joystick_event * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); /*! @brief Adds the specified SDL_GameControllerDB gamepad mappings. * * This function parses the specified ASCII encoded string and updates the * internal list with any gamepad mappings it finds. This string may * contain either a single gamepad mapping or many mappings separated by * newlines. The parser supports the full format of the `gamecontrollerdb.txt` * source file including empty lines and comments. * * See @ref gamepad_mapping for a description of the format. * * If there is already a gamepad mapping for a given GUID in the internal list, * it will be replaced by the one passed to this function. If the library is * terminated and re-initialized the internal list will revert to the built-in * default. * * @param[in] string The string containing the gamepad mappings. * @return `true` if successful, or `false` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_VALUE. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwJoystickIsGamepad * @sa @ref glfwGetGamepadName * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwUpdateGamepadMappings(const char* string); /*! @brief Returns the human-readable gamepad name for the specified joystick. * * This function returns the human-readable name of the gamepad from the * gamepad mapping assigned to the specified joystick. * * If the specified joystick is not present or does not have a gamepad mapping * this function will return `NULL` but will not generate an error. Call * @ref glfwJoystickPresent to check whether it is present regardless of * whether it has a mapping. * * @param[in] jid The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the gamepad, or `NULL` if the * joystick is not present, does not have a mapping or an * [error](@ref error_handling) occurred. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected, the gamepad mappings are updated or the library is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwJoystickIsGamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI const char* glfwGetGamepadName(int jid); /*! @brief Retrieves the state of the specified joystick remapped as a gamepad. * * This function retrieves the state of the specified joystick remapped to * an Xbox-like gamepad. * * If the specified joystick is not present or does not have a gamepad mapping * this function will return `false` but will not generate an error. Call * @ref glfwJoystickPresent to check whether it is present regardless of * whether it has a mapping. * * The Guide button may not be available for input as it is often hooked by the * system or the Steam client. * * Not all devices have all the buttons or axes provided by @ref * GLFWgamepadstate. Unavailable buttons and axes will always report * `GLFW_RELEASE` and 0.0 respectively. * * @param[in] jid The [joystick](@ref joysticks) to query. * @param[out] state The gamepad input state of the joystick. * @return `true` if successful, or `false` if no joystick is * connected, it has no gamepad mapping or an [error](@ref error_handling) * occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_ENUM. * * @thread_safety This function must only be called from the main thread. * * @sa @ref gamepad * @sa @ref glfwUpdateGamepadMappings * @sa @ref glfwJoystickIsGamepad * * @since Added in version 3.3. * * @ingroup input */ GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state); /*! @brief Sets the clipboard to the specified string. * * This function sets the system clipboard to the specified, UTF-8 encoded * string. * * @param[in] window Deprecated. Any valid window or `NULL`. * @param[in] string A UTF-8 encoded string. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland Clipboard is currently unimplemented. * * @pointer_lifetime The specified string is copied before this function * returns. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa @ref glfwGetClipboardString * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); /*! @brief Returns the contents of the clipboard as a string. * * This function returns the contents of the system clipboard, if it contains * or is convertible to a UTF-8 encoded string. If the clipboard is empty or * if its contents cannot be converted, `NULL` is returned and a @ref * GLFW_FORMAT_UNAVAILABLE error is generated. * * @param[in] window Deprecated. Any valid window or `NULL`. * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` * if an [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * * @remark @wayland Clipboard is currently unimplemented. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the next call to @ref * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library * is terminated. * * @thread_safety This function must only be called from the main thread. * * @sa @ref clipboard * @sa @ref glfwSetClipboardString * * @since Added in version 3.0. * * @ingroup input */ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); /*! @brief Returns the GLFW time. * * This function returns the current GLFW time, in seconds. Unless the time * has been set using @ref glfwSetTime it measures time elapsed since GLFW was * initialized. * * This function and @ref glfwSetTime are helper functions on top of @ref * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * The resolution of the timer is system dependent, but is usually on the order * of a few micro- or nanoseconds. It uses the highest-resolution monotonic * time source on each supported platform. * * @return The current time, in seconds, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. Reading and * writing of the internal base time is not atomic, so it needs to be * externally synchronized with calls to @ref glfwSetTime. * * @sa @ref time * * @since Added in version 1.0. * * @ingroup input */ GLFWAPI monotonic_t glfwGetTime(void); /*! @brief Sets the GLFW time. * * This function sets the current GLFW time, in seconds. The value must be * a positive finite number less than or equal to 18446744073.0, which is * approximately 584.5 years. * * This function and @ref glfwGetTime are helper functions on top of @ref * glfwGetTimerFrequency and @ref glfwGetTimerValue. * * @param[in] time The new value, in seconds. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_INVALID_VALUE. * * @remark The upper limit of GLFW time is calculated as * floor((264 - 1) / 109) and is due to implementations * storing nanoseconds in 64 bits. The limit may be increased in the future. * * @thread_safety This function may be called from any thread. Reading and * writing of the internal base time is not atomic, so it needs to be * externally synchronized with calls to @ref glfwGetTime. * * @sa @ref time * * @since Added in version 2.2. * * @ingroup input */ GLFWAPI void glfwSetTime(monotonic_t time); /*! @brief Returns the current value of the raw timer. * * This function returns the current value of the raw timer, measured in * 1 / frequency seconds. To get the frequency, call @ref * glfwGetTimerFrequency. * * @return The value of the timer, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref time * @sa @ref glfwGetTimerFrequency * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI uint64_t glfwGetTimerValue(void); /*! @brief Returns the frequency, in Hz, of the raw timer. * * This function returns the frequency, in Hz, of the raw timer. * * @return The frequency of the timer, in Hz, or zero if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref time * @sa @ref glfwGetTimerValue * * @since Added in version 3.2. * * @ingroup input */ GLFWAPI uint64_t glfwGetTimerFrequency(void); /*! @brief Makes the context of the specified window current for the calling * thread. * * This function makes the OpenGL or OpenGL ES context of the specified window * current on the calling thread. A context must only be made current on * a single thread at a time and each thread can have only a single current * context at a time. * * When moving a context between threads, you must make it non-current on the * old thread before making it current on the new one. * * By default, making a context non-current implicitly forces a pipeline flush. * On machines that support `GL_KHR_context_flush_control`, you can control * whether a context performs this flush by setting the * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) * hint. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT * error. * * @param[in] window The window whose context to make current, or `NULL` to * detach the current context. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwGetCurrentContext * * @since Added in version 3.0. * * @ingroup context */ GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); /*! @brief Returns the window whose context is current on the calling thread. * * This function returns the window whose OpenGL or OpenGL ES context is * current on the calling thread. * * @return The window whose context is current, or `NULL` if no window's * context is current. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref context_current * @sa @ref glfwMakeContextCurrent * * @since Added in version 3.0. * * @ingroup context */ GLFWAPI GLFWwindow* glfwGetCurrentContext(void); /*! @brief Swaps the front and back buffers of the specified window. * * This function swaps the front and back buffers of the specified window when * rendering with OpenGL or OpenGL ES. If the swap interval is greater than * zero, the GPU driver waits the specified number of screen updates before * swapping the buffers. * * The specified window must have an OpenGL or OpenGL ES context. Specifying * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT * error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see `vkQueuePresentKHR` instead. * * @param[in] window The window whose buffers to swap. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark __EGL:__ The context of the specified window must be current on the * calling thread. * * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap * @sa @ref glfwSwapInterval * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ GLFWAPI void glfwSwapBuffers(GLFWwindow* window); /*! @brief Sets the swap interval for the current context. * * This function sets the swap interval for the current OpenGL or OpenGL ES * context, i.e. the number of screen updates to wait from the time @ref * glfwSwapBuffers was called before swapping the buffers and returning. This * is sometimes called _vertical synchronization_, _vertical retrace * synchronization_ or just _vsync_. * * A context that supports either of the `WGL_EXT_swap_control_tear` and * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap * intervals, which allows the driver to swap immediately even if a frame * arrives a little bit late. You can check for these extensions with @ref * glfwExtensionSupported. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see the present mode of your swapchain instead. * * @param[in] interval The minimum number of screen updates to wait for * until the buffers are swapped by @ref glfwSwapBuffers. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark This function is not called during context creation, leaving the * swap interval set to whatever is the default on that platform. This is done * because some swap interval extensions used by GLFW do not allow the swap * interval to be reset to zero once it has been set to a non-zero value. * * @remark Some GPU drivers do not honor the requested swap interval, either * because of a user setting that overrides the application's request or due to * bugs in the driver. * * @thread_safety This function may be called from any thread. * * @sa @ref buffer_swap * @sa @ref glfwSwapBuffers * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI void glfwSwapInterval(int interval); /*! @brief Returns whether the specified extension is available. * * This function returns whether the specified * [API extension](@ref context_glext) is supported by the current OpenGL or * OpenGL ES context. It searches both for client API extension and context * creation API extensions. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * As this functions retrieves and searches one or more extension strings each * call, it is recommended that you cache its results if it is going to be used * frequently. The extension strings will not change during the lifetime of * a context, so there is no danger in doing this. * * This function does not apply to Vulkan. If you are using Vulkan, see @ref * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` * and `vkEnumerateDeviceExtensionProperties` instead. * * @param[in] extension The ASCII encoded name of the extension. * @return `true` if the extension is available, or `false` * otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref * GLFW_PLATFORM_ERROR. * * @thread_safety This function may be called from any thread. * * @sa @ref context_glext * @sa @ref glfwGetProcAddress * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI int glfwExtensionSupported(const char* extension); /*! @brief Returns the address of the specified function for the current * context. * * This function returns the address of the specified OpenGL or OpenGL ES * [core or extension function](@ref context_glext), if it is supported * by the current context. * * A context must be current on the calling thread. Calling this function * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. * * This function does not apply to Vulkan. If you are rendering with Vulkan, * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and * `vkGetDeviceProcAddr` instead. * * @param[in] procname The ASCII encoded name of the function. * @return The address of the function, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. * * @remark The address of a given function is not guaranteed to be the same * between contexts. * * @remark This function may return a non-`NULL` address despite the * associated version or extension not being available. Always check the * context version or extension string first. * * @pointer_lifetime The returned function pointer is valid until the context * is destroyed or the library is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref context_glext * @sa @ref glfwExtensionSupported * * @since Added in version 1.0. * * @ingroup context */ GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); /*! @brief Returns whether the Vulkan loader and an ICD have been found. * * This function returns whether the Vulkan loader and any minimally functional * ICD have been found. * * The availability of a Vulkan loader and even an ICD does not by itself * guarantee that surface creation or even instance creation is possible. * For example, on Fermi systems Nvidia will install an ICD that provides no * actual Vulkan support. Call @ref glfwGetRequiredInstanceExtensions to check * whether the extensions necessary for Vulkan surface creation are available * and @ref glfwGetPhysicalDevicePresentationSupport to check whether a queue * family of a physical device supports image presentation. * * @return `true` if Vulkan is minimally available, or `false` * otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_support * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI int glfwVulkanSupported(void); /*! @brief Returns the Vulkan instance extensions required by GLFW. * * This function returns an array of names of Vulkan instance extensions required * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the * list will always contain `VK_KHR_surface`, so if you don't require any * additional extensions you can pass this list directly to the * `VkInstanceCreateInfo` struct. * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available. * * If Vulkan is available but no set of extensions allowing window surface * creation was found, this function returns `NULL`. You may still use Vulkan * for off-screen rendering and compute work. * * @param[out] count Where to store the number of extensions in the returned * array. This is set to zero if an error occurred. * @return An array of ASCII encoded extension names, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_API_UNAVAILABLE. * * @remark Additional extensions may be required by future versions of GLFW. * You should check if any extensions you wish to enable are already in the * returned array, as it is an error to specify an extension more than once in * the `VkInstanceCreateInfo` struct. * * @remark @macos This function currently only supports the * `VK_MVK_macos_surface` extension from MoltenVK. * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * library is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_ext * @sa @ref glfwCreateWindowSurface * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); #if defined(VK_VERSION_1_0) /*! @brief Returns the address of the specified Vulkan instance function. * * This function returns the address of the specified Vulkan core or extension * function for the specified instance. If instance is set to `NULL` it can * return any function exported from the Vulkan loader, including at least the * following functions: * * - `vkEnumerateInstanceExtensionProperties` * - `vkEnumerateInstanceLayerProperties` * - `vkCreateInstance` * - `vkGetInstanceProcAddr` * * If Vulkan is not available on the machine, this function returns `NULL` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available. * * This function is equivalent to calling `vkGetInstanceProcAddr` with * a platform-specific query of the Vulkan loader as a fallback. * * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve * functions related to instance creation. * @param[in] procname The ASCII encoded name of the function. * @return The address of the function, or `NULL` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_API_UNAVAILABLE. * * @pointer_lifetime The returned function pointer is valid until the library * is terminated. * * @thread_safety This function may be called from any thread. * * @sa @ref vulkan_proc * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); /*! @brief Returns whether the specified queue family can present images. * * This function returns whether the specified queue family of the specified * physical device supports presentation to the platform GLFW was built for. * * If Vulkan or the required window surface creation instance extensions are * not available on the machine, or if the specified instance was not created * with the required extensions, this function returns `false` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported * to check whether Vulkan is at least minimally available and @ref * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * * @param[in] instance The instance that the physical device belongs to. * @param[in] device The physical device that the queue family belongs to. * @param[in] queuefamily The index of the queue family to query. * @return `true` if the queue family supports presentation, or * `false` otherwise. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function currently always returns `true`, as the * `VK_MVK_macos_surface` extension does not provide * a `vkGetPhysicalDevice*PresentationSupport` type function. * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * * @sa @ref vulkan_present * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); /*! @brief Creates a Vulkan surface for the specified window. * * This function creates a Vulkan surface for the specified window. * * If the Vulkan loader or at least one minimally functional ICD were not found, * this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref * GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported to check whether * Vulkan is at least minimally available. * * If the required window surface creation instance extensions are not * available or if the specified instance was not created with these extensions * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref * glfwGetRequiredInstanceExtensions to check what instance extensions are * required. * * The window surface cannot be shared with another API so the window must * have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib) * set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error * and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. * * The window surface must be destroyed before the specified Vulkan instance. * It is the responsibility of the caller to destroy the window surface. GLFW * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the * surface. * * @param[in] instance The Vulkan instance to create the surface in. * @param[in] window The window to create the surface for. * @param[in] allocator The allocator to use, or `NULL` to use the default * allocator. * @param[out] surface Where to store the handle of the surface. This is set * to `VK_NULL_HANDLE` if an error occurred. * @return `VK_SUCCESS` if successful, or a Vulkan error code if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref * GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE * * @remark If an error occurs before the creation call is made, GLFW returns * the Vulkan error code most appropriate for the error. Appropriate use of * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should * eliminate almost all occurrences of these errors. * * @remark @macos This function currently only supports the * `VK_MVK_macos_surface` extension from MoltenVK. * * @remark @macos This function creates and sets a `CAMetalLayer` instance for * the window content view, which is required for MoltenVK to function. * * @thread_safety This function may be called from any thread. For * synchronization details of Vulkan objects, see the Vulkan specification. * * @sa @ref vulkan_surface * @sa @ref glfwGetRequiredInstanceExtensions * * @since Added in version 3.2. * * @ingroup vulkan */ GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); #endif /*VK_VERSION_1_0*/ /************************************************************************* * Global definition cleanup *************************************************************************/ /* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ #ifdef GLFW_WINGDIAPI_DEFINED #undef WINGDIAPI #undef GLFW_WINGDIAPI_DEFINED #endif #ifdef GLFW_CALLBACK_DEFINED #undef CALLBACK #undef GLFW_CALLBACK_DEFINED #endif /* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally * defined by some gl.h variants (OpenBSD) so define it after if needed. */ #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ #ifdef __cplusplus } #endif #endif /* _glfw3_h_ */ kitty-0.15.0/glfw/glx_context.c000066400000000000000000000532651356737523400164340ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 GLX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #ifndef GLXBadProfileARB #define GLXBadProfileARB 13 #endif // Returns the specified attribute of the specified GLXFBConfig // static int getGLXFBConfigAttrib(GLXFBConfig fbconfig, int attrib) { int value; glXGetFBConfigAttrib(_glfw.x11.display, fbconfig, attrib, &value); return value; } // Return the GLXFBConfig most closely matching the specified hints // static bool chooseGLXFBConfig(const _GLFWfbconfig* desired, GLXFBConfig* result) { GLXFBConfig* nativeConfigs; _GLFWfbconfig* usableConfigs; const _GLFWfbconfig* closest; int i, nativeCount, usableCount; const char* vendor; bool trustWindowBit = true; // HACK: This is a (hopefully temporary) workaround for Chromium // (VirtualBox GL) not setting the window bit on any GLXFBConfigs vendor = glXGetClientString(_glfw.x11.display, GLX_VENDOR); if (vendor && strcmp(vendor, "Chromium") == 0) trustWindowBit = false; nativeConfigs = glXGetFBConfigs(_glfw.x11.display, _glfw.x11.screen, &nativeCount); if (!nativeConfigs || !nativeCount) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: No GLXFBConfigs returned"); return false; } usableConfigs = calloc(nativeCount, sizeof(_GLFWfbconfig)); usableCount = 0; for (i = 0; i < nativeCount; i++) { const GLXFBConfig n = nativeConfigs[i]; _GLFWfbconfig* u = usableConfigs + usableCount; // Only consider RGBA GLXFBConfigs if (!(getGLXFBConfigAttrib(n, GLX_RENDER_TYPE) & GLX_RGBA_BIT)) continue; // Only consider window GLXFBConfigs if (!(getGLXFBConfigAttrib(n, GLX_DRAWABLE_TYPE) & GLX_WINDOW_BIT)) { if (trustWindowBit) continue; } if (desired->transparent) { XVisualInfo* vi = glXGetVisualFromFBConfig(_glfw.x11.display, n); if (vi) { u->transparent = _glfwIsVisualTransparentX11(vi->visual); XFree(vi); } } u->redBits = getGLXFBConfigAttrib(n, GLX_RED_SIZE); u->greenBits = getGLXFBConfigAttrib(n, GLX_GREEN_SIZE); u->blueBits = getGLXFBConfigAttrib(n, GLX_BLUE_SIZE); u->alphaBits = getGLXFBConfigAttrib(n, GLX_ALPHA_SIZE); u->depthBits = getGLXFBConfigAttrib(n, GLX_DEPTH_SIZE); u->stencilBits = getGLXFBConfigAttrib(n, GLX_STENCIL_SIZE); u->accumRedBits = getGLXFBConfigAttrib(n, GLX_ACCUM_RED_SIZE); u->accumGreenBits = getGLXFBConfigAttrib(n, GLX_ACCUM_GREEN_SIZE); u->accumBlueBits = getGLXFBConfigAttrib(n, GLX_ACCUM_BLUE_SIZE); u->accumAlphaBits = getGLXFBConfigAttrib(n, GLX_ACCUM_ALPHA_SIZE); u->auxBuffers = getGLXFBConfigAttrib(n, GLX_AUX_BUFFERS); if (getGLXFBConfigAttrib(n, GLX_STEREO)) u->stereo = true; if (getGLXFBConfigAttrib(n, GLX_DOUBLEBUFFER)) u->doublebuffer = true; if (_glfw.glx.ARB_multisample) u->samples = getGLXFBConfigAttrib(n, GLX_SAMPLES); if (_glfw.glx.ARB_framebuffer_sRGB || _glfw.glx.EXT_framebuffer_sRGB) u->sRGB = getGLXFBConfigAttrib(n, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB); u->handle = (uintptr_t) n; usableCount++; } closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount); if (closest) *result = (GLXFBConfig) closest->handle; XFree(nativeConfigs); free(usableConfigs); return closest != NULL; } // Create the OpenGL context using legacy API // static GLXContext createLegacyContextGLX(_GLFWwindow* window UNUSED, GLXFBConfig fbconfig, GLXContext share) { return glXCreateNewContext(_glfw.x11.display, fbconfig, GLX_RGBA_TYPE, share, True); } static void makeContextCurrentGLX(_GLFWwindow* window) { if (window) { if (!glXMakeCurrent(_glfw.x11.display, window->context.glx.window, window->context.glx.handle)) { _glfwInputError(GLFW_PLATFORM_ERROR, "GLX: Failed to make context current"); return; } } else { if (!glXMakeCurrent(_glfw.x11.display, None, NULL)) { _glfwInputError(GLFW_PLATFORM_ERROR, "GLX: Failed to clear current context"); return; } } _glfwPlatformSetTls(&_glfw.contextSlot, window); } static void swapBuffersGLX(_GLFWwindow* window) { glXSwapBuffers(_glfw.x11.display, window->context.glx.window); } static void swapIntervalGLX(int interval) { _GLFWwindow* window = _glfwPlatformGetTls(&_glfw.contextSlot); if (_glfw.glx.EXT_swap_control) { _glfw.glx.SwapIntervalEXT(_glfw.x11.display, window->context.glx.window, interval); } else if (_glfw.glx.MESA_swap_control) _glfw.glx.SwapIntervalMESA(interval); else if (_glfw.glx.SGI_swap_control) { if (interval > 0) _glfw.glx.SwapIntervalSGI(interval); } } static int extensionSupportedGLX(const char* extension) { const char* extensions = glXQueryExtensionsString(_glfw.x11.display, _glfw.x11.screen); if (extensions) { if (_glfwStringInExtensionString(extension, extensions)) return true; } return false; } static GLFWglproc getProcAddressGLX(const char* procname) { if (_glfw.glx.GetProcAddress) return _glfw.glx.GetProcAddress((const GLubyte*) procname); else if (_glfw.glx.GetProcAddressARB) return _glfw.glx.GetProcAddressARB((const GLubyte*) procname); else { GLFWglproc ans = NULL; glfw_dlsym(ans, _glfw.glx.handle, procname); return ans; } } static void destroyContextGLX(_GLFWwindow* window) { if (window->context.glx.window) { glXDestroyWindow(_glfw.x11.display, window->context.glx.window); window->context.glx.window = None; } if (window->context.glx.handle) { glXDestroyContext(_glfw.x11.display, window->context.glx.handle); window->context.glx.handle = NULL; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialize GLX // bool _glfwInitGLX(void) { int i; const char* sonames[] = { #if defined(_GLFW_GLX_LIBRARY) _GLFW_GLX_LIBRARY, #elif defined(__CYGWIN__) "libGL-1.so", #else "libGL.so.1", "libGL.so", #endif NULL }; if (_glfw.glx.handle) return true; for (i = 0; sonames[i]; i++) { _glfw.glx.handle = _glfw_dlopen(sonames[i]); if (_glfw.glx.handle) break; } if (!_glfw.glx.handle) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: Failed to load GLX"); return false; } glfw_dlsym(_glfw.glx.GetFBConfigs, _glfw.glx.handle, "glXGetFBConfigs"); glfw_dlsym(_glfw.glx.GetFBConfigAttrib, _glfw.glx.handle, "glXGetFBConfigAttrib"); glfw_dlsym(_glfw.glx.GetClientString, _glfw.glx.handle, "glXGetClientString"); glfw_dlsym(_glfw.glx.QueryExtension, _glfw.glx.handle, "glXQueryExtension"); glfw_dlsym(_glfw.glx.QueryVersion, _glfw.glx.handle, "glXQueryVersion"); glfw_dlsym(_glfw.glx.DestroyContext, _glfw.glx.handle, "glXDestroyContext"); glfw_dlsym(_glfw.glx.MakeCurrent, _glfw.glx.handle, "glXMakeCurrent"); glfw_dlsym(_glfw.glx.SwapBuffers, _glfw.glx.handle, "glXSwapBuffers"); glfw_dlsym(_glfw.glx.QueryExtensionsString, _glfw.glx.handle, "glXQueryExtensionsString"); glfw_dlsym(_glfw.glx.CreateNewContext, _glfw.glx.handle, "glXCreateNewContext"); glfw_dlsym(_glfw.glx.CreateWindow, _glfw.glx.handle, "glXCreateWindow"); glfw_dlsym(_glfw.glx.DestroyWindow, _glfw.glx.handle, "glXDestroyWindow"); glfw_dlsym(_glfw.glx.GetProcAddress, _glfw.glx.handle, "glXGetProcAddress"); glfw_dlsym(_glfw.glx.GetProcAddressARB, _glfw.glx.handle, "glXGetProcAddressARB"); glfw_dlsym(_glfw.glx.GetVisualFromFBConfig, _glfw.glx.handle, "glXGetVisualFromFBConfig"); if (!_glfw.glx.GetFBConfigs || !_glfw.glx.GetFBConfigAttrib || !_glfw.glx.GetClientString || !_glfw.glx.QueryExtension || !_glfw.glx.QueryVersion || !_glfw.glx.DestroyContext || !_glfw.glx.MakeCurrent || !_glfw.glx.SwapBuffers || !_glfw.glx.QueryExtensionsString || !_glfw.glx.CreateNewContext || !_glfw.glx.CreateWindow || !_glfw.glx.DestroyWindow || !_glfw.glx.GetProcAddress || !_glfw.glx.GetProcAddressARB || !_glfw.glx.GetVisualFromFBConfig) { _glfwInputError(GLFW_PLATFORM_ERROR, "GLX: Failed to load required entry points"); return false; } if (!glXQueryExtension(_glfw.x11.display, &_glfw.glx.errorBase, &_glfw.glx.eventBase)) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: GLX extension not found"); return false; } if (!glXQueryVersion(_glfw.x11.display, &_glfw.glx.major, &_glfw.glx.minor)) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: Failed to query GLX version"); return false; } if (_glfw.glx.major == 1 && _glfw.glx.minor < 3) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: GLX version 1.3 is required"); return false; } if (extensionSupportedGLX("GLX_EXT_swap_control")) { _glfw.glx.SwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) getProcAddressGLX("glXSwapIntervalEXT"); if (_glfw.glx.SwapIntervalEXT) _glfw.glx.EXT_swap_control = true; } if (extensionSupportedGLX("GLX_SGI_swap_control")) { _glfw.glx.SwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) getProcAddressGLX("glXSwapIntervalSGI"); if (_glfw.glx.SwapIntervalSGI) _glfw.glx.SGI_swap_control = true; } if (extensionSupportedGLX("GLX_MESA_swap_control")) { _glfw.glx.SwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC) getProcAddressGLX("glXSwapIntervalMESA"); if (_glfw.glx.SwapIntervalMESA) _glfw.glx.MESA_swap_control = true; } if (extensionSupportedGLX("GLX_ARB_multisample")) _glfw.glx.ARB_multisample = true; if (extensionSupportedGLX("GLX_ARB_framebuffer_sRGB")) _glfw.glx.ARB_framebuffer_sRGB = true; if (extensionSupportedGLX("GLX_EXT_framebuffer_sRGB")) _glfw.glx.EXT_framebuffer_sRGB = true; if (extensionSupportedGLX("GLX_ARB_create_context")) { _glfw.glx.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC) getProcAddressGLX("glXCreateContextAttribsARB"); if (_glfw.glx.CreateContextAttribsARB) _glfw.glx.ARB_create_context = true; } if (extensionSupportedGLX("GLX_ARB_create_context_robustness")) _glfw.glx.ARB_create_context_robustness = true; if (extensionSupportedGLX("GLX_ARB_create_context_profile")) _glfw.glx.ARB_create_context_profile = true; if (extensionSupportedGLX("GLX_EXT_create_context_es2_profile")) _glfw.glx.EXT_create_context_es2_profile = true; if (extensionSupportedGLX("GLX_ARB_create_context_no_error")) _glfw.glx.ARB_create_context_no_error = true; if (extensionSupportedGLX("GLX_ARB_context_flush_control")) _glfw.glx.ARB_context_flush_control = true; return true; } // Terminate GLX // void _glfwTerminateGLX(void) { // NOTE: This function must not call any X11 functions, as it is called // after XCloseDisplay (see _glfwPlatformTerminate for details) if (_glfw.glx.handle) { _glfw_dlclose(_glfw.glx.handle); _glfw.glx.handle = NULL; } } #define setAttrib(a, v) \ { \ assert(((size_t) index + 1) < sizeof(attribs) / sizeof(attribs[0])); \ attribs[index++] = a; \ attribs[index++] = v; \ } // Create the OpenGL or OpenGL ES context // bool _glfwCreateContextGLX(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { int attribs[40]; GLXFBConfig native = NULL; GLXContext share = NULL; if (ctxconfig->share) share = ctxconfig->share->context.glx.handle; if (!chooseGLXFBConfig(fbconfig, &native)) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "GLX: Failed to find a suitable GLXFBConfig"); return false; } if (ctxconfig->client == GLFW_OPENGL_ES_API) { if (!_glfw.glx.ARB_create_context || !_glfw.glx.ARB_create_context_profile || !_glfw.glx.EXT_create_context_es2_profile) { _glfwInputError(GLFW_API_UNAVAILABLE, "GLX: OpenGL ES requested but GLX_EXT_create_context_es2_profile is unavailable"); return false; } } if (ctxconfig->forward) { if (!_glfw.glx.ARB_create_context) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "GLX: Forward compatibility requested but GLX_ARB_create_context_profile is unavailable"); return false; } } if (ctxconfig->profile) { if (!_glfw.glx.ARB_create_context || !_glfw.glx.ARB_create_context_profile) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "GLX: An OpenGL profile requested but GLX_ARB_create_context_profile is unavailable"); return false; } } _glfwGrabErrorHandlerX11(); if (_glfw.glx.ARB_create_context) { int index = 0, mask = 0, flags = 0; if (ctxconfig->client == GLFW_OPENGL_API) { if (ctxconfig->forward) flags |= GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; if (ctxconfig->profile == GLFW_OPENGL_CORE_PROFILE) mask |= GLX_CONTEXT_CORE_PROFILE_BIT_ARB; else if (ctxconfig->profile == GLFW_OPENGL_COMPAT_PROFILE) mask |= GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; } else mask |= GLX_CONTEXT_ES2_PROFILE_BIT_EXT; if (ctxconfig->debug) flags |= GLX_CONTEXT_DEBUG_BIT_ARB; if (ctxconfig->robustness) { if (_glfw.glx.ARB_create_context_robustness) { if (ctxconfig->robustness == GLFW_NO_RESET_NOTIFICATION) { setAttrib(GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_NO_RESET_NOTIFICATION_ARB); } else if (ctxconfig->robustness == GLFW_LOSE_CONTEXT_ON_RESET) { setAttrib(GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB); } flags |= GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB; } } if (ctxconfig->release) { if (_glfw.glx.ARB_context_flush_control) { if (ctxconfig->release == GLFW_RELEASE_BEHAVIOR_NONE) { setAttrib(GLX_CONTEXT_RELEASE_BEHAVIOR_ARB, GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB); } else if (ctxconfig->release == GLFW_RELEASE_BEHAVIOR_FLUSH) { setAttrib(GLX_CONTEXT_RELEASE_BEHAVIOR_ARB, GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB); } } } if (ctxconfig->noerror) { if (_glfw.glx.ARB_create_context_no_error) setAttrib(GLX_CONTEXT_OPENGL_NO_ERROR_ARB, true); } // NOTE: Only request an explicitly versioned context when necessary, as // explicitly requesting version 1.0 does not always return the // highest version supported by the driver if (ctxconfig->major != 1 || ctxconfig->minor != 0) { setAttrib(GLX_CONTEXT_MAJOR_VERSION_ARB, ctxconfig->major); setAttrib(GLX_CONTEXT_MINOR_VERSION_ARB, ctxconfig->minor); } if (mask) setAttrib(GLX_CONTEXT_PROFILE_MASK_ARB, mask); if (flags) setAttrib(GLX_CONTEXT_FLAGS_ARB, flags); setAttrib(None, None); window->context.glx.handle = _glfw.glx.CreateContextAttribsARB(_glfw.x11.display, native, share, True, attribs); // HACK: This is a fallback for broken versions of the Mesa // implementation of GLX_ARB_create_context_profile that fail // default 1.0 context creation with a GLXBadProfileARB error in // violation of the extension spec if (!window->context.glx.handle) { if (_glfw.x11.errorCode == _glfw.glx.errorBase + GLXBadProfileARB && ctxconfig->client == GLFW_OPENGL_API && ctxconfig->profile == GLFW_OPENGL_ANY_PROFILE && ctxconfig->forward == false) { window->context.glx.handle = createLegacyContextGLX(window, native, share); } } } else { window->context.glx.handle = createLegacyContextGLX(window, native, share); } _glfwReleaseErrorHandlerX11(); if (!window->context.glx.handle) { _glfwInputErrorX11(GLFW_VERSION_UNAVAILABLE, "GLX: Failed to create context"); return false; } window->context.glx.window = glXCreateWindow(_glfw.x11.display, native, window->x11.handle, NULL); if (!window->context.glx.window) { _glfwInputError(GLFW_PLATFORM_ERROR, "GLX: Failed to create window"); return false; } window->context.makeCurrent = makeContextCurrentGLX; window->context.swapBuffers = swapBuffersGLX; window->context.swapInterval = swapIntervalGLX; window->context.extensionSupported = extensionSupportedGLX; window->context.getProcAddress = getProcAddressGLX; window->context.destroy = destroyContextGLX; return true; } #undef setAttrib // Returns the Visual and depth of the chosen GLXFBConfig // bool _glfwChooseVisualGLX(const _GLFWwndconfig* wndconfig UNUSED, const _GLFWctxconfig* ctxconfig UNUSED, const _GLFWfbconfig* fbconfig, Visual** visual, int* depth) { GLXFBConfig native; XVisualInfo* result; if (!chooseGLXFBConfig(fbconfig, &native)) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "GLX: Failed to find a suitable GLXFBConfig"); return false; } result = glXGetVisualFromFBConfig(_glfw.x11.display, native); if (!result) { _glfwInputError(GLFW_PLATFORM_ERROR, "GLX: Failed to retrieve Visual for GLXFBConfig"); return false; } *visual = result->visual; *depth = result->depth; XFree(result); return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return NULL; } return window->context.glx.handle; } GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(None); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return None; } return window->context.glx.window; } kitty-0.15.0/glfw/glx_context.h000066400000000000000000000166511356737523400164370ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 GLX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define GLX_VENDOR 1 #define GLX_RGBA_BIT 0x00000001 #define GLX_WINDOW_BIT 0x00000001 #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_RGBA_TYPE 0x8014 #define GLX_DOUBLEBUFFER 5 #define GLX_STEREO 6 #define GLX_AUX_BUFFERS 7 #define GLX_RED_SIZE 8 #define GLX_GREEN_SIZE 9 #define GLX_BLUE_SIZE 10 #define GLX_ALPHA_SIZE 11 #define GLX_DEPTH_SIZE 12 #define GLX_STENCIL_SIZE 13 #define GLX_ACCUM_RED_SIZE 14 #define GLX_ACCUM_GREEN_SIZE 15 #define GLX_ACCUM_BLUE_SIZE 16 #define GLX_ACCUM_ALPHA_SIZE 17 #define GLX_SAMPLES 0x186a1 #define GLX_VISUAL_ID 0x800b #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20b2 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 #define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 #define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 #define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 #define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31b3 typedef XID GLXWindow; typedef XID GLXDrawable; typedef struct __GLXFBConfig* GLXFBConfig; typedef struct __GLXcontext* GLXContext; typedef void (*__GLXextproc)(void); typedef int (*PFNGLXGETFBCONFIGATTRIBPROC)(Display*,GLXFBConfig,int,int*); typedef const char* (*PFNGLXGETCLIENTSTRINGPROC)(Display*,int); typedef Bool (*PFNGLXQUERYEXTENSIONPROC)(Display*,int*,int*); typedef Bool (*PFNGLXQUERYVERSIONPROC)(Display*,int*,int*); typedef void (*PFNGLXDESTROYCONTEXTPROC)(Display*,GLXContext); typedef Bool (*PFNGLXMAKECURRENTPROC)(Display*,GLXDrawable,GLXContext); typedef void (*PFNGLXSWAPBUFFERSPROC)(Display*,GLXDrawable); typedef const char* (*PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display*,int); typedef GLXFBConfig* (*PFNGLXGETFBCONFIGSPROC)(Display*,int,int*); typedef GLXContext (*PFNGLXCREATENEWCONTEXTPROC)(Display*,GLXFBConfig,int,GLXContext,Bool); typedef __GLXextproc (* PFNGLXGETPROCADDRESSPROC)(const GLubyte *procName); typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display*,GLXDrawable,int); typedef XVisualInfo* (*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display*,GLXFBConfig); typedef GLXWindow (*PFNGLXCREATEWINDOWPROC)(Display*,GLXFBConfig,Window,const int*); typedef void (*PFNGLXDESTROYWINDOWPROC)(Display*,GLXWindow); typedef int (*PFNGLXSWAPINTERVALMESAPROC)(int); typedef int (*PFNGLXSWAPINTERVALSGIPROC)(int); typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display*,GLXFBConfig,GLXContext,Bool,const int*); // libGL.so function pointer typedefs #define glXGetFBConfigs _glfw.glx.GetFBConfigs #define glXGetFBConfigAttrib _glfw.glx.GetFBConfigAttrib #define glXGetClientString _glfw.glx.GetClientString #define glXQueryExtension _glfw.glx.QueryExtension #define glXQueryVersion _glfw.glx.QueryVersion #define glXDestroyContext _glfw.glx.DestroyContext #define glXMakeCurrent _glfw.glx.MakeCurrent #define glXSwapBuffers _glfw.glx.SwapBuffers #define glXQueryExtensionsString _glfw.glx.QueryExtensionsString #define glXCreateNewContext _glfw.glx.CreateNewContext #define glXGetVisualFromFBConfig _glfw.glx.GetVisualFromFBConfig #define glXCreateWindow _glfw.glx.CreateWindow #define glXDestroyWindow _glfw.glx.DestroyWindow #define _GLFW_PLATFORM_CONTEXT_STATE _GLFWcontextGLX glx; #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE _GLFWlibraryGLX glx; // GLX-specific per-context data // typedef struct _GLFWcontextGLX { GLXContext handle; GLXWindow window; } _GLFWcontextGLX; // GLX-specific global data // typedef struct _GLFWlibraryGLX { int major, minor; int eventBase; int errorBase; // dlopen handle for libGL.so.1 void* handle; // GLX 1.3 functions PFNGLXGETFBCONFIGSPROC GetFBConfigs; PFNGLXGETFBCONFIGATTRIBPROC GetFBConfigAttrib; PFNGLXGETCLIENTSTRINGPROC GetClientString; PFNGLXQUERYEXTENSIONPROC QueryExtension; PFNGLXQUERYVERSIONPROC QueryVersion; PFNGLXDESTROYCONTEXTPROC DestroyContext; PFNGLXMAKECURRENTPROC MakeCurrent; PFNGLXSWAPBUFFERSPROC SwapBuffers; PFNGLXQUERYEXTENSIONSSTRINGPROC QueryExtensionsString; PFNGLXCREATENEWCONTEXTPROC CreateNewContext; PFNGLXGETVISUALFROMFBCONFIGPROC GetVisualFromFBConfig; PFNGLXCREATEWINDOWPROC CreateWindow; PFNGLXDESTROYWINDOWPROC DestroyWindow; // GLX 1.4 and extension functions PFNGLXGETPROCADDRESSPROC GetProcAddress; PFNGLXGETPROCADDRESSPROC GetProcAddressARB; PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI; PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT; PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA; PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB; bool SGI_swap_control; bool EXT_swap_control; bool MESA_swap_control; bool ARB_multisample; bool ARB_framebuffer_sRGB; bool EXT_framebuffer_sRGB; bool ARB_create_context; bool ARB_create_context_profile; bool ARB_create_context_robustness; bool EXT_create_context_es2_profile; bool ARB_create_context_no_error; bool ARB_context_flush_control; } _GLFWlibraryGLX; bool _glfwInitGLX(void); void _glfwTerminateGLX(void); bool _glfwCreateContextGLX(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig); void _glfwDestroyContextGLX(_GLFWwindow* window); bool _glfwChooseVisualGLX(const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig, Visual** visual, int* depth); kitty-0.15.0/glfw/ibus_glfw.c000066400000000000000000000355271356737523400160600ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define _GNU_SOURCE #include #include #include #include #include #include #include "internal.h" #include "ibus_glfw.h" #define debug(...) if (_glfw.hints.init.debugKeyboard) printf(__VA_ARGS__); static const char IBUS_SERVICE[] = "org.freedesktop.IBus"; static const char IBUS_PATH[] = "/org/freedesktop/IBus"; static const char IBUS_INTERFACE[] = "org.freedesktop.IBus"; static const char IBUS_INPUT_INTERFACE[] = "org.freedesktop.IBus.InputContext"; enum Capabilities { IBUS_CAP_PREEDIT_TEXT = 1 << 0, IBUS_CAP_AUXILIARY_TEXT = 1 << 1, IBUS_CAP_LOOKUP_TABLE = 1 << 2, IBUS_CAP_FOCUS = 1 << 3, IBUS_CAP_PROPERTY = 1 << 4, IBUS_CAP_SURROUNDING_TEXT = 1 << 5 }; static inline bool test_env_var(const char *name, const char *val) { const char *q = getenv(name); return (q && strcmp(q, val) == 0) ? true : false; } static inline size_t GLFW_MIN(size_t a, size_t b) { return a < b ? a : b; } static const char* get_ibus_text_from_message(DBusMessage *msg) { /* The message structure is (from dbus-monitor) variant struct { string "IBusText" array [ ] string "ash " variant struct { string "IBusAttrList" array [ ] array [ ] } } */ const char *text = NULL; const char *struct_id = NULL; DBusMessageIter iter, sub1, sub2; dbus_message_iter_init(msg, &iter); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) return NULL; dbus_message_iter_recurse(&iter, &sub1); if (dbus_message_iter_get_arg_type(&sub1) != DBUS_TYPE_STRUCT) return NULL; dbus_message_iter_recurse(&sub1, &sub2); if (dbus_message_iter_get_arg_type(&sub2) != DBUS_TYPE_STRING) return NULL; dbus_message_iter_get_basic(&sub2, &struct_id); if (!struct_id || strncmp(struct_id, "IBusText", sizeof("IBusText")) != 0) return NULL; dbus_message_iter_next(&sub2); dbus_message_iter_next(&sub2); if (dbus_message_iter_get_arg_type(&sub2) != DBUS_TYPE_STRING) return NULL; dbus_message_iter_get_basic(&sub2, &text); return text; } static inline void send_text(const char *text, int ime_state) { _GLFWwindow *w = _glfwFocusedWindow(); if (w && w->callbacks.keyboard) { GLFWkeyevent fake_ev; _glfwInitializeKeyEvent(&fake_ev, GLFW_KEY_UNKNOWN, 0, GLFW_PRESS, 0); fake_ev.text = text; fake_ev.ime_state = ime_state; w->callbacks.keyboard((GLFWwindow*) w, &fake_ev); } } // Connection handling {{{ static DBusHandlerResult message_handler(DBusConnection *conn UNUSED, DBusMessage *msg, void *user_data) { // To monitor signals from IBUS, use //  dbus-monitor --address `ibus address` "type='signal',interface='org.freedesktop.IBus.InputContext'" _GLFWIBUSData *ibus = (_GLFWIBUSData*)user_data; (void)ibus; const char *text; switch(glfw_dbus_match_signal(msg, IBUS_INPUT_INTERFACE, "CommitText", "UpdatePreeditText", "HidePreeditText", "ShowPreeditText", NULL)) { case 0: text = get_ibus_text_from_message(msg); debug("IBUS: CommitText: '%s'\n", text ? text : "(nil)"); send_text(text, 2); break; case 1: text = get_ibus_text_from_message(msg); send_text(text, 1); debug("IBUS: UpdatePreeditText: '%s'\n", text ? text : "(nil)"); break; case 2: debug("IBUS: HidePreeditText\n"); break; case 3: debug("IBUS: ShowPreeditText\n"); break; } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static inline const char* get_ibus_address_file_name(void) { const char *addr; static char ans[PATH_MAX]; addr = getenv("IBUS_ADDRESS"); int offset = 0; if (addr && addr[0]) { memcpy(ans, addr, GLFW_MIN(strlen(addr), sizeof(ans))); return ans; } const char *de = getenv("DISPLAY"); if (!de || !de[0]) de = ":0.0"; char *display = _glfw_strdup(de); const char *host = display; char *disp_num = strrchr(display, ':'); char *screen_num = strrchr(display, '.'); if (!disp_num) { _glfwInputError(GLFW_PLATFORM_ERROR, "Could not get IBUS address file name as DISPLAY env var has no colon"); free(display); return NULL; } *disp_num = 0; disp_num++; if (screen_num) *screen_num = 0; if (!*host) host = "unix"; memset(ans, 0, sizeof(ans)); const char *conf_env = getenv("XDG_CONFIG_HOME"); if (conf_env && conf_env[0]) { offset = snprintf(ans, sizeof(ans), "%s", conf_env); } else { conf_env = getenv("HOME"); if (!conf_env || !conf_env[0]) { _glfwInputError(GLFW_PLATFORM_ERROR, "Could not get IBUS address file name as no HOME env var is set"); free(display); return NULL; } offset = snprintf(ans, sizeof(ans), "%s/.config", conf_env); } char *key = dbus_get_local_machine_id(); snprintf(ans + offset, sizeof(ans) - offset, "/ibus/bus/%s-%s-%s", key, host, disp_num); dbus_free(key); free(display); return ans; } static inline bool read_ibus_address(_GLFWIBUSData *ibus) { static char buf[1024]; struct stat s; FILE *addr_file = fopen(ibus->address_file_name, "r"); if (!addr_file) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to open IBUS address file: %s with error: %s", ibus->address_file_name, strerror(errno)); return false; } int stat_result = fstat(fileno(addr_file), &s); bool found = false; while (fgets(buf, sizeof(buf), addr_file)) { if (strncmp(buf, "IBUS_ADDRESS=", sizeof("IBUS_ADDRESS=")-1) == 0) { size_t sz = strlen(buf); if (buf[sz-1] == '\n') buf[sz-1] = 0; if (buf[sz-2] == '\r') buf[sz-2] = 0; found = true; break; } } fclose(addr_file); addr_file = NULL; if (stat_result != 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to stat IBUS address file: %s with error: %s", ibus->address_file_name, strerror(errno)); return false; } ibus->address_file_mtime = s.st_mtime; if (found) { free((void*)ibus->address); ibus->address = _glfw_strdup(buf + sizeof("IBUS_ADDRESS=") - 1); return true; } _glfwInputError(GLFW_PLATFORM_ERROR, "Could not find IBUS_ADDRESS in %s", ibus->address_file_name); return false; } void input_context_created(DBusMessage *msg, const char* errmsg, void *data) { if (errmsg) { _glfwInputError(GLFW_PLATFORM_ERROR, "IBUS: Failed to create input context with error: %s", errmsg); return; } const char *path = NULL; if (!glfw_dbus_get_args(msg, "Failed to get IBUS context path from reply", DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) return; _GLFWIBUSData *ibus = (_GLFWIBUSData*)data; free((void*)ibus->input_ctx_path); ibus->input_ctx_path = _glfw_strdup(path); if (!ibus->input_ctx_path) return; dbus_bus_add_match(ibus->conn, "type='signal',interface='org.freedesktop.IBus.InputContext'", NULL); DBusObjectPathVTable ibus_vtable = {.message_function = message_handler}; dbus_connection_try_register_object_path(ibus->conn, ibus->input_ctx_path, &ibus_vtable, ibus, NULL); enum Capabilities caps = IBUS_CAP_FOCUS | IBUS_CAP_PREEDIT_TEXT; if (!glfw_dbus_call_method_no_reply(ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, "SetCapabilities", DBUS_TYPE_UINT32, &caps, DBUS_TYPE_INVALID)) return; ibus->ok = true; glfw_ibus_set_focused(ibus, false); glfw_ibus_set_cursor_geometry(ibus, 0, 0, 0, 0); debug("Connected to IBUS daemon for IME input management\n"); } bool setup_connection(_GLFWIBUSData *ibus) { const char *client_name = "GLFW_Application"; const char *address_file_name = get_ibus_address_file_name(); ibus->ok = false; if (!address_file_name) return false; free((void*)ibus->address_file_name); ibus->address_file_name = _glfw_strdup(address_file_name); if (!read_ibus_address(ibus)) return false; if (ibus->conn) { glfw_dbus_close_connection(ibus->conn); ibus->conn = NULL; } debug("Connecting to IBUS daemon @ %s for IME input management\n", ibus->address); ibus->conn = glfw_dbus_connect_to(ibus->address, "Failed to connect to the IBUS daemon, with error", "ibus", false); if (!ibus->conn) return false; free((void*)ibus->input_ctx_path); ibus->input_ctx_path = NULL; if (!glfw_dbus_call_method_with_reply( ibus->conn, IBUS_SERVICE, IBUS_PATH, IBUS_INTERFACE, "CreateInputContext", DBUS_TIMEOUT_USE_DEFAULT, input_context_created, ibus, DBUS_TYPE_STRING, &client_name, DBUS_TYPE_INVALID)) { return false; } return true; } void glfw_connect_to_ibus(_GLFWIBUSData *ibus) { if (ibus->inited) return; if (!test_env_var("GLFW_IM_MODULE", "ibus")) return; ibus->inited = true; setup_connection(ibus); } void glfw_ibus_terminate(_GLFWIBUSData *ibus) { if (ibus->conn) { glfw_dbus_close_connection(ibus->conn); ibus->conn = NULL; } #define F(x) if (ibus->x) { free((void*)ibus->x); ibus->x = NULL; } F(input_ctx_path); F(address); F(address_file_name); #undef F ibus->ok = false; } static bool check_connection(_GLFWIBUSData *ibus) { if (!ibus->inited) return false; if (ibus->conn && dbus_connection_get_is_connected(ibus->conn)) { return ibus->ok; } struct stat s; if (stat(ibus->address_file_name, &s) != 0 || s.st_mtime != ibus->address_file_mtime) { if (!read_ibus_address(ibus)) return false; setup_connection(ibus); } return false; } void glfw_ibus_dispatch(_GLFWIBUSData *ibus) { if (ibus->conn) glfw_dbus_dispatch(ibus->conn); } // }}} static void simple_message(_GLFWIBUSData *ibus, const char *method) { if (check_connection(ibus)) { glfw_dbus_call_method_no_reply(ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, method, DBUS_TYPE_INVALID); } } void glfw_ibus_set_focused(_GLFWIBUSData *ibus, bool focused) { simple_message(ibus, focused ? "FocusIn" : "FocusOut"); } void glfw_ibus_set_cursor_geometry(_GLFWIBUSData *ibus, int x, int y, int w, int h) { if (check_connection(ibus)) { glfw_dbus_call_method_no_reply(ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, "SetCursorLocation", DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, DBUS_TYPE_INT32, &w, DBUS_TYPE_INT32, &h, DBUS_TYPE_INVALID); } } typedef enum { IBUS_SHIFT_MASK = 1 << 0, IBUS_LOCK_MASK = 1 << 1, IBUS_CONTROL_MASK = 1 << 2, IBUS_MOD1_MASK = 1 << 3, IBUS_MOD2_MASK = 1 << 4, IBUS_MOD3_MASK = 1 << 5, IBUS_MOD4_MASK = 1 << 6, IBUS_MOD5_MASK = 1 << 7, IBUS_BUTTON1_MASK = 1 << 8, IBUS_BUTTON2_MASK = 1 << 9, IBUS_BUTTON3_MASK = 1 << 10, IBUS_BUTTON4_MASK = 1 << 11, IBUS_BUTTON5_MASK = 1 << 12, /* The next few modifiers are used by XKB, so we skip to the end. * Bits 15 - 23 are currently unused. Bit 29 is used internally. */ /* ibus mask */ IBUS_HANDLED_MASK = 1 << 24, IBUS_FORWARD_MASK = 1 << 25, IBUS_IGNORED_MASK = IBUS_FORWARD_MASK, IBUS_SUPER_MASK = 1 << 26, IBUS_HYPER_MASK = 1 << 27, IBUS_META_MASK = 1 << 28, IBUS_RELEASE_MASK = 1 << 30, IBUS_MODIFIER_MASK = 0x5f001fff } IBusModifierType; static inline uint32_t ibus_key_state(unsigned int glfw_modifiers, int action) { uint32_t ans = action == GLFW_RELEASE ? IBUS_RELEASE_MASK : 0; #define M(g, i) if(glfw_modifiers & GLFW_MOD_##g) ans |= i M(SHIFT, IBUS_SHIFT_MASK); M(CAPS_LOCK, IBUS_LOCK_MASK); M(CONTROL, IBUS_CONTROL_MASK); M(ALT, IBUS_MOD1_MASK); M(NUM_LOCK, IBUS_MOD2_MASK); M(SUPER, IBUS_MOD4_MASK); #undef M return ans; } void key_event_processed(DBusMessage *msg, const char* errmsg, void *data) { uint32_t handled = 0; _GLFWIBUSKeyEvent *ev = (_GLFWIBUSKeyEvent*)data; // Restore key's text from the text embedded in the structure. ev->glfw_ev.text = ev->__embedded_text; bool is_release = ev->glfw_ev.action == GLFW_RELEASE; bool failed = false; if (errmsg) { _glfwInputError(GLFW_PLATFORM_ERROR, "IBUS: Failed to process key with error: %s", errmsg); failed = true; } else { glfw_dbus_get_args(msg, "Failed to get IBUS handled key from reply", DBUS_TYPE_BOOLEAN, &handled, DBUS_TYPE_INVALID); debug("IBUS processed native_key: 0x%x release: %d handled: %u\n", ev->glfw_ev.native_key, is_release, handled); } glfw_xkb_key_from_ime(ev, handled ? true : false, failed); free(ev); } bool ibus_process_key(const _GLFWIBUSKeyEvent *ev_, _GLFWIBUSData *ibus) { if (!check_connection(ibus)) return false; _GLFWIBUSKeyEvent *ev = calloc(1, sizeof(_GLFWIBUSKeyEvent)); if (!ev) return false; memcpy(ev, ev_, sizeof(_GLFWIBUSKeyEvent)); // Put the key's text in a field IN the structure, for proper serialization. if (ev->glfw_ev.text) strncpy(ev->__embedded_text, ev->glfw_ev.text, sizeof(ev->__embedded_text) - 1); ev->glfw_ev.text = NULL; uint32_t state = ibus_key_state(ev->glfw_ev.mods, ev->glfw_ev.action); if (!glfw_dbus_call_method_with_reply( ibus->conn, IBUS_SERVICE, ibus->input_ctx_path, IBUS_INPUT_INTERFACE, "ProcessKeyEvent", 3000, key_event_processed, ev, DBUS_TYPE_UINT32, &ev->ibus_keysym, DBUS_TYPE_UINT32, &ev->ibus_keycode, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID)) { free(ev); return false; } return true; } kitty-0.15.0/glfw/ibus_glfw.h000066400000000000000000000037241356737523400160570ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #pragma once #include "internal.h" #include "dbus_glfw.h" #include typedef struct { bool ok, inited; time_t address_file_mtime; DBusConnection *conn; const char *input_ctx_path, *address_file_name, *address; } _GLFWIBUSData; typedef struct { xkb_keycode_t ibus_keycode; xkb_keysym_t ibus_keysym; GLFWid window_id; GLFWkeyevent glfw_ev; char __embedded_text[64]; } _GLFWIBUSKeyEvent; void glfw_connect_to_ibus(_GLFWIBUSData *ibus); void glfw_ibus_terminate(_GLFWIBUSData *ibus); void glfw_ibus_set_focused(_GLFWIBUSData *ibus, bool focused); void glfw_ibus_dispatch(_GLFWIBUSData *ibus); bool ibus_process_key(const _GLFWIBUSKeyEvent *ev_, _GLFWIBUSData *ibus); void glfw_ibus_set_cursor_geometry(_GLFWIBUSData *ibus, int x, int y, int w, int h); kitty-0.15.0/glfw/init.c000066400000000000000000000241131356737523400150270ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2018 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #define MONOTONIC_START_MODULE #include "internal.h" #include "mappings.h" #include #include #include #include #include // The global variables below comprise all mutable global data in GLFW // // Any other global variable is a bug // Global state shared between compilation units of GLFW // _GLFWlibrary _glfw = { false }; // These are outside of _glfw so they can be used before initialization and // after termination // static _GLFWerror _glfwMainThreadError; static GLFWerrorfun _glfwErrorCallback; static _GLFWinitconfig _glfwInitHints = { true, // hat buttons false, // debug keyboard true, // enable joystick { true, // macOS menu bar true // macOS bundle chdir } }; // Terminate the library // static void terminate(void) { int i; memset(&_glfw.callbacks, 0, sizeof(_glfw.callbacks)); while (_glfw.windowListHead) glfwDestroyWindow((GLFWwindow*) _glfw.windowListHead); while (_glfw.cursorListHead) glfwDestroyCursor((GLFWcursor*) _glfw.cursorListHead); for (i = 0; i < _glfw.monitorCount; i++) { _GLFWmonitor* monitor = _glfw.monitors[i]; if (monitor->originalRamp.size) _glfwPlatformSetGammaRamp(monitor, &monitor->originalRamp); _glfwFreeMonitor(monitor); } free(_glfw.monitors); _glfw.monitors = NULL; _glfw.monitorCount = 0; free(_glfw.mappings); _glfw.mappings = NULL; _glfw.mappingCount = 0; _glfwTerminateVulkan(); _glfwPlatformTerminate(); _glfw.initialized = false; while (_glfw.errorListHead) { _GLFWerror* error = _glfw.errorListHead; _glfw.errorListHead = error->next; free(error); } _glfwPlatformDestroyTls(&_glfw.contextSlot); _glfwPlatformDestroyTls(&_glfw.errorSlot); _glfwPlatformDestroyMutex(&_glfw.errorLock); memset(&_glfw, 0, sizeof(_glfw)); } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// char* _glfw_strdup(const char* source) { const size_t length = strlen(source); char* result = malloc(length + 1); memcpy(result, source, length); result[length] = 0; return result; } ////////////////////////////////////////////////////////////////////////// ////// GLFW event API ////// ////////////////////////////////////////////////////////////////////////// // Notifies shared code of an error // void _glfwInputError(int code, const char* format, ...) { _GLFWerror* error; char description[_GLFW_MESSAGE_SIZE]; if (format) { va_list vl; va_start(vl, format); vsnprintf(description, sizeof(description), format, vl); va_end(vl); description[sizeof(description) - 1] = '\0'; } else { if (code == GLFW_NOT_INITIALIZED) strcpy(description, "The GLFW library is not initialized"); else if (code == GLFW_NO_CURRENT_CONTEXT) strcpy(description, "There is no current context"); else if (code == GLFW_INVALID_ENUM) strcpy(description, "Invalid argument for enum parameter"); else if (code == GLFW_INVALID_VALUE) strcpy(description, "Invalid value for parameter"); else if (code == GLFW_OUT_OF_MEMORY) strcpy(description, "Out of memory"); else if (code == GLFW_API_UNAVAILABLE) strcpy(description, "The requested API is unavailable"); else if (code == GLFW_VERSION_UNAVAILABLE) strcpy(description, "The requested API version is unavailable"); else if (code == GLFW_PLATFORM_ERROR) strcpy(description, "A platform-specific error occurred"); else if (code == GLFW_FORMAT_UNAVAILABLE) strcpy(description, "The requested format is unavailable"); else if (code == GLFW_NO_WINDOW_CONTEXT) strcpy(description, "The specified window has no context"); else strcpy(description, "ERROR: UNKNOWN GLFW ERROR"); } if (_glfw.initialized) { error = _glfwPlatformGetTls(&_glfw.errorSlot); if (!error) { error = calloc(1, sizeof(_GLFWerror)); _glfwPlatformSetTls(&_glfw.errorSlot, error); _glfwPlatformLockMutex(&_glfw.errorLock); error->next = _glfw.errorListHead; _glfw.errorListHead = error; _glfwPlatformUnlockMutex(&_glfw.errorLock); } } else error = &_glfwMainThreadError; error->code = code; strcpy(error->description, description); if (_glfwErrorCallback) _glfwErrorCallback(code, description); } void _glfwDebug(const char *format, ...) { if (format) { va_list vl; fprintf(stderr, "[%.4f] ", monotonic_t_to_s_double(glfwGetTime())); va_start(vl, format); vfprintf(stderr, format, vl); va_end(vl); fprintf(stderr, "\n"); } } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI int glfwInit(monotonic_t start_time) { if (_glfw.initialized) return true; monotonic_start_time = start_time; memset(&_glfw, 0, sizeof(_glfw)); _glfw.hints.init = _glfwInitHints; if (!_glfwPlatformInit()) { terminate(); return false; } if (!_glfwPlatformCreateMutex(&_glfw.errorLock) || !_glfwPlatformCreateTls(&_glfw.errorSlot) || !_glfwPlatformCreateTls(&_glfw.contextSlot)) { terminate(); return false; } _glfwPlatformSetTls(&_glfw.errorSlot, &_glfwMainThreadError); _glfw.initialized = true; _glfw.timer.offset = _glfwPlatformGetTimerValue(); glfwDefaultWindowHints(); { int i; for (i = 0; _glfwDefaultMappings[i]; i++) { if (!glfwUpdateGamepadMappings(_glfwDefaultMappings[i])) { terminate(); return false; } } } return true; } GLFWAPI void glfwTerminate(void) { if (!_glfw.initialized) return; terminate(); } GLFWAPI void glfwInitHint(int hint, int value) { switch (hint) { case GLFW_ENABLE_JOYSTICKS: _glfwInitHints.enableJoysticks = value; return; case GLFW_JOYSTICK_HAT_BUTTONS: _glfwInitHints.hatButtons = value; return; case GLFW_DEBUG_KEYBOARD: _glfwInitHints.debugKeyboard = value; return; case GLFW_COCOA_CHDIR_RESOURCES: _glfwInitHints.ns.chdir = value; return; case GLFW_COCOA_MENUBAR: _glfwInitHints.ns.menubar = value; return; } _glfwInputError(GLFW_INVALID_ENUM, "Invalid init hint 0x%08X", hint); } GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev) { if (major != NULL) *major = GLFW_VERSION_MAJOR; if (minor != NULL) *minor = GLFW_VERSION_MINOR; if (rev != NULL) *rev = GLFW_VERSION_REVISION; } GLFWAPI const char* glfwGetVersionString(void) { return _glfwPlatformGetVersionString(); } GLFWAPI int glfwGetError(const char** description) { _GLFWerror* error; int code = GLFW_NO_ERROR; if (description) *description = NULL; if (_glfw.initialized) error = _glfwPlatformGetTls(&_glfw.errorSlot); else error = &_glfwMainThreadError; if (error) { code = error->code; error->code = GLFW_NO_ERROR; if (description && code) *description = error->description; } return code; } GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun) { _GLFW_SWAP_POINTERS(_glfwErrorCallback, cbfun); return cbfun; } GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *data) { _GLFW_REQUIRE_INIT(); _glfwPlatformRunMainLoop(callback, data); } GLFWAPI void glfwStopMainLoop(void) { _GLFW_REQUIRE_INIT(); _glfwPlatformStopMainLoop(); } GLFWAPI unsigned long long glfwAddTimer( monotonic_t interval, bool repeats, GLFWuserdatafun callback, void *callback_data, GLFWuserdatafun free_callback) { return _glfwPlatformAddTimer(interval, repeats, callback, callback_data, free_callback); } GLFWAPI void glfwUpdateTimer(unsigned long long timer_id, monotonic_t interval, bool enabled) { _glfwPlatformUpdateTimer(timer_id, interval, enabled); } GLFWAPI void glfwRemoveTimer(unsigned long long timer_id) { _glfwPlatformRemoveTimer(timer_id); } kitty-0.15.0/glfw/input.c000066400000000000000000001336151356737523400152330ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include "../kitty/monotonic.h" #include #include #include #include #include // Internal key state used for sticky keys #define _GLFW_STICK 3 // Internal constants for gamepad mapping source types #define _GLFW_JOYSTICK_AXIS 1 #define _GLFW_JOYSTICK_BUTTON 2 #define _GLFW_JOYSTICK_HATBIT 3 // Finds a mapping based on joystick GUID // static _GLFWmapping* findMapping(const char* guid) { int i; for (i = 0; i < _glfw.mappingCount; i++) { if (strcmp(_glfw.mappings[i].guid, guid) == 0) return _glfw.mappings + i; } return NULL; } // Checks whether a gamepad mapping element is present in the hardware // static bool isValidElementForJoystick(const _GLFWmapelement* e, const _GLFWjoystick* js) { if (e->type == _GLFW_JOYSTICK_HATBIT && (e->index >> 4) >= js->hatCount) return false; else if (e->type == _GLFW_JOYSTICK_BUTTON && e->index >= js->buttonCount) return false; else if (e->type == _GLFW_JOYSTICK_AXIS && e->index >= js->axisCount) return false; return true; } // Finds a mapping based on joystick GUID and verifies element indices // static _GLFWmapping* findValidMapping(const _GLFWjoystick* js) { _GLFWmapping* mapping = findMapping(js->guid); if (mapping) { int i; for (i = 0; i <= GLFW_GAMEPAD_BUTTON_LAST; i++) { if (!isValidElementForJoystick(mapping->buttons + i, js)) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid button in gamepad mapping %s (%s)", mapping->guid, mapping->name); return NULL; } } for (i = 0; i <= GLFW_GAMEPAD_AXIS_LAST; i++) { if (!isValidElementForJoystick(mapping->axes + i, js)) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid axis in gamepad mapping %s (%s)", mapping->guid, mapping->name); return NULL; } } } return mapping; } // Parses an SDL_GameControllerDB line and adds it to the mapping list // static bool parseMapping(_GLFWmapping* mapping, const char* string) { const char* c = string; size_t i, length; struct { const char* name; _GLFWmapelement* element; } fields[] = { { "platform", NULL }, { "a", mapping->buttons + GLFW_GAMEPAD_BUTTON_A }, { "b", mapping->buttons + GLFW_GAMEPAD_BUTTON_B }, { "x", mapping->buttons + GLFW_GAMEPAD_BUTTON_X }, { "y", mapping->buttons + GLFW_GAMEPAD_BUTTON_Y }, { "back", mapping->buttons + GLFW_GAMEPAD_BUTTON_BACK }, { "start", mapping->buttons + GLFW_GAMEPAD_BUTTON_START }, { "guide", mapping->buttons + GLFW_GAMEPAD_BUTTON_GUIDE }, { "leftshoulder", mapping->buttons + GLFW_GAMEPAD_BUTTON_LEFT_BUMPER }, { "rightshoulder", mapping->buttons + GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER }, { "leftstick", mapping->buttons + GLFW_GAMEPAD_BUTTON_LEFT_THUMB }, { "rightstick", mapping->buttons + GLFW_GAMEPAD_BUTTON_RIGHT_THUMB }, { "dpup", mapping->buttons + GLFW_GAMEPAD_BUTTON_DPAD_UP }, { "dpright", mapping->buttons + GLFW_GAMEPAD_BUTTON_DPAD_RIGHT }, { "dpdown", mapping->buttons + GLFW_GAMEPAD_BUTTON_DPAD_DOWN }, { "dpleft", mapping->buttons + GLFW_GAMEPAD_BUTTON_DPAD_LEFT }, { "lefttrigger", mapping->axes + GLFW_GAMEPAD_AXIS_LEFT_TRIGGER }, { "righttrigger", mapping->axes + GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER }, { "leftx", mapping->axes + GLFW_GAMEPAD_AXIS_LEFT_X }, { "lefty", mapping->axes + GLFW_GAMEPAD_AXIS_LEFT_Y }, { "rightx", mapping->axes + GLFW_GAMEPAD_AXIS_RIGHT_X }, { "righty", mapping->axes + GLFW_GAMEPAD_AXIS_RIGHT_Y } }; length = strcspn(c, ","); if (length != 32 || c[length] != ',') { _glfwInputError(GLFW_INVALID_VALUE, NULL); return false; } memcpy(mapping->guid, c, length); c += length + 1; length = strcspn(c, ","); if (length >= sizeof(mapping->name) || c[length] != ',') { _glfwInputError(GLFW_INVALID_VALUE, NULL); return false; } memcpy(mapping->name, c, length); c += length + 1; while (*c) { // TODO: Implement output modifiers if (*c == '+' || *c == '-') return false; for (i = 0; i < sizeof(fields) / sizeof(fields[0]); i++) { length = strlen(fields[i].name); if (strncmp(c, fields[i].name, length) != 0 || c[length] != ':') continue; c += length + 1; if (fields[i].element) { _GLFWmapelement* e = fields[i].element; int8_t minimum = -1; int8_t maximum = 1; if (*c == '+') { minimum = 0; c += 1; } else if (*c == '-') { maximum = 0; c += 1; } if (*c == 'a') e->type = _GLFW_JOYSTICK_AXIS; else if (*c == 'b') e->type = _GLFW_JOYSTICK_BUTTON; else if (*c == 'h') e->type = _GLFW_JOYSTICK_HATBIT; else break; if (e->type == _GLFW_JOYSTICK_HATBIT) { const unsigned long hat = strtoul(c + 1, (char**) &c, 10); const unsigned long bit = strtoul(c + 1, (char**) &c, 10); e->index = (uint8_t) ((hat << 4) | bit); } else e->index = (uint8_t) strtoul(c + 1, (char**) &c, 10); if (e->type == _GLFW_JOYSTICK_AXIS) { e->axisScale = 2 / (maximum - minimum); e->axisOffset = -(maximum + minimum); if (*c == '~') { e->axisScale = -e->axisScale; e->axisOffset = -e->axisOffset; } } } else { length = strlen(_GLFW_PLATFORM_MAPPING_NAME); if (strncmp(c, _GLFW_PLATFORM_MAPPING_NAME, length) != 0) return false; } break; } c += strcspn(c, ","); c += strspn(c, ","); } for (i = 0; i < 32; i++) { if (mapping->guid[i] >= 'A' && mapping->guid[i] <= 'F') mapping->guid[i] += 'a' - 'A'; } _glfwPlatformUpdateGamepadGUID(mapping->guid); return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW event API ////// ////////////////////////////////////////////////////////////////////////// void _glfwInitializeKeyEvent(GLFWkeyevent *ev, int key, int native_key, int action, int mods) { ev->key = key; ev->native_key = native_key; ev->action = action; ev->mods = mods; ev->text = NULL; ev->ime_state = 0; } // Notifies shared code of a physical key event // void _glfwInputKeyboard(_GLFWwindow* window, GLFWkeyevent* ev) { if (ev->key >= 0 && ev->key <= GLFW_KEY_LAST) { bool repeated = false; if (ev->action == GLFW_RELEASE && window->keys[ev->key] == GLFW_RELEASE) return; if (ev->action == GLFW_PRESS && window->keys[ev->key] == GLFW_PRESS) repeated = true; if (ev->action == GLFW_RELEASE && window->stickyKeys) window->keys[ev->key] = _GLFW_STICK; else window->keys[ev->key] = (char) ev->action; if (repeated) ev->action = GLFW_REPEAT; } // FIXME: will need to update ev->virtual_mods here too? if (window->callbacks.keyboard) { if (!window->lockKeyMods) ev->mods &= ~(GLFW_MOD_CAPS_LOCK | GLFW_MOD_NUM_LOCK); window->callbacks.keyboard((GLFWwindow*) window, ev); } } // Notifies shared code of a scroll event // void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset, int flags) { if (window->callbacks.scroll) window->callbacks.scroll((GLFWwindow*) window, xoffset, yoffset, flags); } // Notifies shared code of a mouse button click event // void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods) { if (button < 0 || button > GLFW_MOUSE_BUTTON_LAST) return; if (!window->lockKeyMods) mods &= ~(GLFW_MOD_CAPS_LOCK | GLFW_MOD_NUM_LOCK); if (action == GLFW_RELEASE && window->stickyMouseButtons) window->mouseButtons[button] = _GLFW_STICK; else window->mouseButtons[button] = (char) action; if (window->callbacks.mouseButton) window->callbacks.mouseButton((GLFWwindow*) window, button, action, mods); } // Notifies shared code of a cursor motion event // The position is specified in content area relative screen coordinates // void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos) { if (window->virtualCursorPosX == xpos && window->virtualCursorPosY == ypos) return; window->virtualCursorPosX = xpos; window->virtualCursorPosY = ypos; if (window->callbacks.cursorPos) window->callbacks.cursorPos((GLFWwindow*) window, xpos, ypos); } // Notifies shared code of a cursor enter/leave event // void _glfwInputCursorEnter(_GLFWwindow* window, bool entered) { if (window->callbacks.cursorEnter) window->callbacks.cursorEnter((GLFWwindow*) window, entered); } // Notifies shared code of files or directories dropped on a window // void _glfwInputDrop(_GLFWwindow* window, int count, const char** paths) { if (window->callbacks.drop) window->callbacks.drop((GLFWwindow*) window, count, paths); } // Notifies shared code of a joystick connection or disconnection // void _glfwInputJoystick(_GLFWjoystick* js, int event) { const int jid = (int) (js - _glfw.joysticks); if (_glfw.callbacks.joystick) _glfw.callbacks.joystick(jid, event); } // Notifies shared code of the new value of a joystick axis // void _glfwInputJoystickAxis(_GLFWjoystick* js, int axis, float value) { js->axes[axis] = value; } // Notifies shared code of the new value of a joystick button // void _glfwInputJoystickButton(_GLFWjoystick* js, int button, char value) { js->buttons[button] = value; } // Notifies shared code of the new value of a joystick hat // void _glfwInputJoystickHat(_GLFWjoystick* js, int hat, char value) { const int base = js->buttonCount + hat * 4; js->buttons[base + 0] = (value & 0x01) ? GLFW_PRESS : GLFW_RELEASE; js->buttons[base + 1] = (value & 0x02) ? GLFW_PRESS : GLFW_RELEASE; js->buttons[base + 2] = (value & 0x04) ? GLFW_PRESS : GLFW_RELEASE; js->buttons[base + 3] = (value & 0x08) ? GLFW_PRESS : GLFW_RELEASE; js->hats[hat] = value; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Returns an available joystick object with arrays and name allocated // _GLFWjoystick* _glfwAllocJoystick(const char* name, const char* guid, int axisCount, int buttonCount, int hatCount) { int jid; _GLFWjoystick* js; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { if (!_glfw.joysticks[jid].present) break; } if (jid > GLFW_JOYSTICK_LAST) return NULL; js = _glfw.joysticks + jid; js->present = true; js->name = _glfw_strdup(name); js->axes = calloc(axisCount, sizeof(float)); js->buttons = calloc(buttonCount + (size_t) hatCount * 4, 1); js->hats = calloc(hatCount, 1); js->axisCount = axisCount; js->buttonCount = buttonCount; js->hatCount = hatCount; strncpy(js->guid, guid, sizeof(js->guid) - 1); js->mapping = findValidMapping(js); return js; } // Frees arrays and name and flags the joystick object as unused // void _glfwFreeJoystick(_GLFWjoystick* js) { free(js->name); free(js->axes); free(js->buttons); free(js->hats); memset(js, 0, sizeof(_GLFWjoystick)); } const char* _glfwGetKeyName(int key) { switch (key) { // Printable keys case GLFW_KEY_SPACE: return "SPACE"; case GLFW_KEY_EXCLAM: return "EXCLAM"; case GLFW_KEY_DOUBLE_QUOTE: return "DOUBLE_QUOTE"; case GLFW_KEY_NUMBER_SIGN: return "NUMBER_SIGN"; case GLFW_KEY_DOLLAR: return "DOLLAR"; case GLFW_KEY_AMPERSAND: return "AMPERSAND"; case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; case GLFW_KEY_PARENTHESIS_LEFT: return "PARENTHESIS_LEFT"; case GLFW_KEY_PARENTHESIS_RIGHT: return "PARENTHESIS_RIGHT"; case GLFW_KEY_PLUS: return "PLUS"; case GLFW_KEY_COMMA: return "COMMA"; case GLFW_KEY_MINUS: return "MINUS"; case GLFW_KEY_PERIOD: return "PERIOD"; case GLFW_KEY_SLASH: return "SLASH"; case GLFW_KEY_0: return "0"; case GLFW_KEY_1: return "1"; case GLFW_KEY_2: return "2"; case GLFW_KEY_3: return "3"; case GLFW_KEY_4: return "4"; case GLFW_KEY_5: return "5"; case GLFW_KEY_6: return "6"; case GLFW_KEY_7: return "7"; case GLFW_KEY_8: return "8"; case GLFW_KEY_9: return "9"; case GLFW_KEY_COLON: return "COLON"; case GLFW_KEY_SEMICOLON: return "SEMICOLON"; case GLFW_KEY_LESS: return "LESS"; case GLFW_KEY_EQUAL: return "EQUAL"; case GLFW_KEY_GREATER: return "GREATER"; case GLFW_KEY_AT: return "AT"; case GLFW_KEY_A: return "A"; case GLFW_KEY_B: return "B"; case GLFW_KEY_C: return "C"; case GLFW_KEY_D: return "D"; case GLFW_KEY_E: return "E"; case GLFW_KEY_F: return "F"; case GLFW_KEY_G: return "G"; case GLFW_KEY_H: return "H"; case GLFW_KEY_I: return "I"; case GLFW_KEY_J: return "J"; case GLFW_KEY_K: return "K"; case GLFW_KEY_L: return "L"; case GLFW_KEY_M: return "M"; case GLFW_KEY_N: return "N"; case GLFW_KEY_O: return "O"; case GLFW_KEY_P: return "P"; case GLFW_KEY_Q: return "Q"; case GLFW_KEY_R: return "R"; case GLFW_KEY_S: return "S"; case GLFW_KEY_T: return "T"; case GLFW_KEY_U: return "U"; case GLFW_KEY_V: return "V"; case GLFW_KEY_W: return "W"; case GLFW_KEY_X: return "X"; case GLFW_KEY_Y: return "Y"; case GLFW_KEY_Z: return "Z"; case GLFW_KEY_LEFT_BRACKET: return "LEFT_BRACKET"; case GLFW_KEY_BACKSLASH: return "BACKSLASH"; case GLFW_KEY_RIGHT_BRACKET: return "RIGHT_BRACKET"; case GLFW_KEY_UNDERSCORE: return "UNDERSCORE"; case GLFW_KEY_GRAVE_ACCENT: return "GRAVE_ACCENT"; case GLFW_KEY_WORLD_1: return "WORLD_1"; case GLFW_KEY_WORLD_2: return "WORLD_2"; case GLFW_KEY_PARAGRAPH: return "PARAGRAPH"; case GLFW_KEY_MASCULINE: return "MASCULINE"; case GLFW_KEY_A_GRAVE: return "A_GRAVE"; case GLFW_KEY_A_DIAERESIS: return "A_DIAERESIS"; case GLFW_KEY_A_RING: return "A_RING"; case GLFW_KEY_AE: return "AE"; case GLFW_KEY_C_CEDILLA: return "C_CEDILLA"; case GLFW_KEY_E_GRAVE: return "E_GRAVE"; case GLFW_KEY_E_ACUTE: return "E_ACUTE"; case GLFW_KEY_I_GRAVE: return "I_GRAVE"; case GLFW_KEY_N_TILDE: return "N_TILDE"; case GLFW_KEY_O_GRAVE: return "O_GRAVE"; case GLFW_KEY_O_DIAERESIS: return "O_DIAERESIS"; case GLFW_KEY_O_SLASH: return "O_SLASH"; case GLFW_KEY_U_GRAVE: return "U_GRAVE"; case GLFW_KEY_U_DIAERESIS: return "U_DIAERESIS"; case GLFW_KEY_S_SHARP: return "S_SHARP"; case GLFW_KEY_CYRILLIC_A: return "CYRILLIC_A"; case GLFW_KEY_CYRILLIC_BE: return "CYRILLIC_BE"; case GLFW_KEY_CYRILLIC_VE: return "CYRILLIC_VE"; case GLFW_KEY_CYRILLIC_GHE: return "CYRILLIC_GHE"; case GLFW_KEY_CYRILLIC_DE: return "CYRILLIC_DE"; case GLFW_KEY_CYRILLIC_IE: return "CYRILLIC_IE"; case GLFW_KEY_CYRILLIC_ZHE: return "CYRILLIC_ZHE"; case GLFW_KEY_CYRILLIC_ZE: return "CYRILLIC_ZE"; case GLFW_KEY_CYRILLIC_I: return "CYRILLIC_I"; case GLFW_KEY_CYRILLIC_SHORT_I: return "CYRILLIC_SHORT_I"; case GLFW_KEY_CYRILLIC_KA: return "CYRILLIC_KA"; case GLFW_KEY_CYRILLIC_EL: return "CYRILLIC_EL"; case GLFW_KEY_CYRILLIC_EM: return "CYRILLIC_EM"; case GLFW_KEY_CYRILLIC_EN: return "CYRILLIC_EN"; case GLFW_KEY_CYRILLIC_O: return "CYRILLIC_O"; case GLFW_KEY_CYRILLIC_PE: return "CYRILLIC_PE"; case GLFW_KEY_CYRILLIC_ER: return "CYRILLIC_ER"; case GLFW_KEY_CYRILLIC_ES: return "CYRILLIC_ES"; case GLFW_KEY_CYRILLIC_TE: return "CYRILLIC_TE"; case GLFW_KEY_CYRILLIC_U: return "CYRILLIC_U"; case GLFW_KEY_CYRILLIC_EF: return "CYRILLIC_EF"; case GLFW_KEY_CYRILLIC_HA: return "CYRILLIC_HA"; case GLFW_KEY_CYRILLIC_TSE: return "CYRILLIC_TSE"; case GLFW_KEY_CYRILLIC_CHE: return "CYRILLIC_CHE"; case GLFW_KEY_CYRILLIC_SHA: return "CYRILLIC_SHA"; case GLFW_KEY_CYRILLIC_SHCHA: return "CYRILLIC_SHCHA"; case GLFW_KEY_CYRILLIC_HARD_SIGN: return "CYRILLIC_HARD_SIGN"; case GLFW_KEY_CYRILLIC_YERU: return "CYRILLIC_YERU"; case GLFW_KEY_CYRILLIC_SOFT_SIGN: return "CYRILLIC_SOFT_SIGN"; case GLFW_KEY_CYRILLIC_E: return "CYRILLIC_E"; case GLFW_KEY_CYRILLIC_YU: return "CYRILLIC_YU"; case GLFW_KEY_CYRILLIC_YA: return "CYRILLIC_YA"; case GLFW_KEY_CYRILLIC_IO: return "CYRILLIC_IO"; // Function keys case GLFW_KEY_ESCAPE: return "ESCAPE"; case GLFW_KEY_F1: return "F1"; case GLFW_KEY_F2: return "F2"; case GLFW_KEY_F3: return "F3"; case GLFW_KEY_F4: return "F4"; case GLFW_KEY_F5: return "F5"; case GLFW_KEY_F6: return "F6"; case GLFW_KEY_F7: return "F7"; case GLFW_KEY_F8: return "F8"; case GLFW_KEY_F9: return "F9"; case GLFW_KEY_F10: return "F10"; case GLFW_KEY_F11: return "F11"; case GLFW_KEY_F12: return "F12"; case GLFW_KEY_F13: return "F13"; case GLFW_KEY_F14: return "F14"; case GLFW_KEY_F15: return "F15"; case GLFW_KEY_F16: return "F16"; case GLFW_KEY_F17: return "F17"; case GLFW_KEY_F18: return "F18"; case GLFW_KEY_F19: return "F19"; case GLFW_KEY_F20: return "F20"; case GLFW_KEY_F21: return "F21"; case GLFW_KEY_F22: return "F22"; case GLFW_KEY_F23: return "F23"; case GLFW_KEY_F24: return "F24"; case GLFW_KEY_F25: return "F25"; case GLFW_KEY_UP: return "UP"; case GLFW_KEY_DOWN: return "DOWN"; case GLFW_KEY_LEFT: return "LEFT"; case GLFW_KEY_RIGHT: return "RIGHT"; case GLFW_KEY_LEFT_SHIFT: return "LEFT SHIFT"; case GLFW_KEY_RIGHT_SHIFT: return "RIGHT SHIFT"; case GLFW_KEY_LEFT_CONTROL: return "LEFT CONTROL"; case GLFW_KEY_RIGHT_CONTROL: return "RIGHT CONTROL"; case GLFW_KEY_LEFT_ALT: return "LEFT ALT"; case GLFW_KEY_RIGHT_ALT: return "RIGHT ALT"; case GLFW_KEY_TAB: return "TAB"; case GLFW_KEY_ENTER: return "ENTER"; case GLFW_KEY_BACKSPACE: return "BACKSPACE"; case GLFW_KEY_INSERT: return "INSERT"; case GLFW_KEY_DELETE: return "DELETE"; case GLFW_KEY_PAGE_UP: return "PAGE UP"; case GLFW_KEY_PAGE_DOWN: return "PAGE DOWN"; case GLFW_KEY_HOME: return "HOME"; case GLFW_KEY_END: return "END"; case GLFW_KEY_KP_0: return "KEYPAD 0"; case GLFW_KEY_KP_1: return "KEYPAD 1"; case GLFW_KEY_KP_2: return "KEYPAD 2"; case GLFW_KEY_KP_3: return "KEYPAD 3"; case GLFW_KEY_KP_4: return "KEYPAD 4"; case GLFW_KEY_KP_5: return "KEYPAD 5"; case GLFW_KEY_KP_6: return "KEYPAD 6"; case GLFW_KEY_KP_7: return "KEYPAD 7"; case GLFW_KEY_KP_8: return "KEYPAD 8"; case GLFW_KEY_KP_9: return "KEYPAD 9"; case GLFW_KEY_KP_DIVIDE: return "KEYPAD DIVIDE"; case GLFW_KEY_KP_MULTIPLY: return "KEYPAD MULTIPLY"; case GLFW_KEY_KP_SUBTRACT: return "KEYPAD SUBTRACT"; case GLFW_KEY_KP_ADD: return "KEYPAD ADD"; case GLFW_KEY_KP_DECIMAL: return "KEYPAD DECIMAL"; case GLFW_KEY_KP_EQUAL: return "KEYPAD EQUAL"; case GLFW_KEY_KP_ENTER: return "KEYPAD ENTER"; case GLFW_KEY_PRINT_SCREEN: return "PRINT SCREEN"; case GLFW_KEY_NUM_LOCK: return "NUM LOCK"; case GLFW_KEY_CAPS_LOCK: return "CAPS LOCK"; case GLFW_KEY_SCROLL_LOCK: return "SCROLL LOCK"; case GLFW_KEY_PAUSE: return "PAUSE"; case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER"; case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER"; case GLFW_KEY_MENU: return "MENU"; default: return "UNKNOWN"; } } // Center the cursor in the content area of the specified window // void _glfwCenterCursorInContentArea(_GLFWwindow* window) { int width, height; _glfwPlatformGetWindowSize(window, &width, &height); _glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0); } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI int glfwGetInputMode(GLFWwindow* handle, int mode) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(0); switch (mode) { case GLFW_CURSOR: return window->cursorMode; case GLFW_STICKY_KEYS: return window->stickyKeys; case GLFW_STICKY_MOUSE_BUTTONS: return window->stickyMouseButtons; case GLFW_LOCK_KEY_MODS: return window->lockKeyMods; } _glfwInputError(GLFW_INVALID_ENUM, "Invalid input mode 0x%08X", mode); return 0; } GLFWAPI void glfwSetInputMode(GLFWwindow* handle, int mode, int value) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (mode == GLFW_CURSOR) { if (value != GLFW_CURSOR_NORMAL && value != GLFW_CURSOR_HIDDEN && value != GLFW_CURSOR_DISABLED) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid cursor mode 0x%08X", value); return; } if (window->cursorMode == value) return; window->cursorMode = value; _glfwPlatformGetCursorPos(window, &window->virtualCursorPosX, &window->virtualCursorPosY); _glfwPlatformSetCursorMode(window, value); } else if (mode == GLFW_STICKY_KEYS) { value = value ? true : false; if (window->stickyKeys == value) return; if (!value) { int i; // Release all sticky keys for (i = 0; i <= GLFW_KEY_LAST; i++) { if (window->keys[i] == _GLFW_STICK) window->keys[i] = GLFW_RELEASE; } } window->stickyKeys = value; } else if (mode == GLFW_STICKY_MOUSE_BUTTONS) { value = value ? true : false; if (window->stickyMouseButtons == value) return; if (!value) { int i; // Release all sticky mouse buttons for (i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i++) { if (window->mouseButtons[i] == _GLFW_STICK) window->mouseButtons[i] = GLFW_RELEASE; } } window->stickyMouseButtons = value; } else if (mode == GLFW_LOCK_KEY_MODS) { window->lockKeyMods = value ? true : false; } else _glfwInputError(GLFW_INVALID_ENUM, "Invalid input mode 0x%08X", mode); } GLFWAPI const char* glfwGetKeyName(int key, int native_key) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (key != GLFW_KEY_UNKNOWN) { if (key != GLFW_KEY_KP_EQUAL && (key < GLFW_KEY_KP_0 || key > GLFW_KEY_KP_ADD) && (key < GLFW_KEY_APOSTROPHE || key > GLFW_KEY_LAST_PRINTABLE)) { return NULL; } native_key = _glfwPlatformGetNativeKeyForKey(key); } return _glfwPlatformGetNativeKeyName(native_key); } GLFWAPI int glfwGetNativeKeyForKey(int key) { _GLFW_REQUIRE_INIT_OR_RETURN(-1); if (key < GLFW_KEY_SPACE || key > GLFW_KEY_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid key %i", key); return GLFW_RELEASE; } return _glfwPlatformGetNativeKeyForKey(key); } GLFWAPI int glfwGetKey(GLFWwindow* handle, int key) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(GLFW_RELEASE); if (key < GLFW_KEY_SPACE || key > GLFW_KEY_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid key %i", key); return GLFW_RELEASE; } if (window->keys[key] == _GLFW_STICK) { // Sticky mode: release key now window->keys[key] = GLFW_RELEASE; return GLFW_PRESS; } return (int) window->keys[key]; } GLFWAPI int glfwGetMouseButton(GLFWwindow* handle, int button) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(GLFW_RELEASE); if (button < GLFW_MOUSE_BUTTON_1 || button > GLFW_MOUSE_BUTTON_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid mouse button %i", button); return GLFW_RELEASE; } if (window->mouseButtons[button] == _GLFW_STICK) { // Sticky mode: release mouse button now window->mouseButtons[button] = GLFW_RELEASE; return GLFW_PRESS; } return (int) window->mouseButtons[button]; } GLFWAPI void glfwGetCursorPos(GLFWwindow* handle, double* xpos, double* ypos) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (xpos) *xpos = 0; if (ypos) *ypos = 0; _GLFW_REQUIRE_INIT(); if (window->cursorMode == GLFW_CURSOR_DISABLED) { if (xpos) *xpos = window->virtualCursorPosX; if (ypos) *ypos = window->virtualCursorPosY; } else _glfwPlatformGetCursorPos(window, xpos, ypos); } GLFWAPI void glfwSetCursorPos(GLFWwindow* handle, double xpos, double ypos) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (xpos != xpos || xpos < -DBL_MAX || xpos > DBL_MAX || ypos != ypos || ypos < -DBL_MAX || ypos > DBL_MAX) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid cursor position %f %f", xpos, ypos); return; } if (!_glfwPlatformWindowFocused(window)) return; if (window->cursorMode == GLFW_CURSOR_DISABLED) { // Only update the accumulated position if the cursor is disabled window->virtualCursorPosX = xpos; window->virtualCursorPosY = ypos; } else { // Update system cursor position _glfwPlatformSetCursorPos(window, xpos, ypos); } } GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot, int count) { _GLFWcursor* cursor; assert(image != NULL); assert(count > 0); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); cursor = calloc(1, sizeof(_GLFWcursor)); cursor->next = _glfw.cursorListHead; _glfw.cursorListHead = cursor; if (!_glfwPlatformCreateCursor(cursor, image, xhot, yhot, count)) { glfwDestroyCursor((GLFWcursor*) cursor); return NULL; } return (GLFWcursor*) cursor; } GLFWAPI GLFWcursor* glfwCreateStandardCursor(GLFWCursorShape shape) { _GLFWcursor* cursor; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (shape >= GLFW_INVALID_CURSOR) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid standard cursor: %d", shape); return NULL; } cursor = calloc(1, sizeof(_GLFWcursor)); cursor->next = _glfw.cursorListHead; _glfw.cursorListHead = cursor; if (!_glfwPlatformCreateStandardCursor(cursor, shape)) { glfwDestroyCursor((GLFWcursor*) cursor); return NULL; } return (GLFWcursor*) cursor; } GLFWAPI void glfwDestroyCursor(GLFWcursor* handle) { _GLFWcursor* cursor = (_GLFWcursor*) handle; _GLFW_REQUIRE_INIT(); if (cursor == NULL) return; // Make sure the cursor is not being used by any window { _GLFWwindow* window; for (window = _glfw.windowListHead; window; window = window->next) { if (window->cursor == cursor) glfwSetCursor((GLFWwindow*) window, NULL); } } _glfwPlatformDestroyCursor(cursor); // Unlink cursor from global linked list { _GLFWcursor** prev = &_glfw.cursorListHead; while (*prev != cursor) prev = &((*prev)->next); *prev = cursor->next; } free(cursor); } GLFWAPI void glfwSetCursor(GLFWwindow* windowHandle, GLFWcursor* cursorHandle) { _GLFWwindow* window = (_GLFWwindow*) windowHandle; _GLFWcursor* cursor = (_GLFWcursor*) cursorHandle; assert(window != NULL); _GLFW_REQUIRE_INIT(); window->cursor = cursor; _glfwPlatformSetCursor(window, cursor); } GLFWAPI GLFWkeyboardfun glfwSetKeyboardCallback(GLFWwindow* handle, GLFWkeyboardfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.keyboard, cbfun); return cbfun; } GLFWAPI void glfwUpdateIMEState(GLFWwindow* handle, int which, int a, int b, int c, int d) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); #if defined(_GLFW_X11) || defined(_GLFW_WAYLAND) || defined(_GLFW_COCOA) _glfwPlatformUpdateIMEState(window, which, a, b, c, d); #else (void)window; (void)which; (void)a; (void)b; (void)c; (void)d; #endif } GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* handle, GLFWmousebuttonfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.mouseButton, cbfun); return cbfun; } GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* handle, GLFWcursorposfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.cursorPos, cbfun); return cbfun; } GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* handle, GLFWcursorenterfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.cursorEnter, cbfun); return cbfun; } GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* handle, GLFWscrollfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.scroll, cbfun); return cbfun; } GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* handle, GLFWdropfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.drop, cbfun); return cbfun; } GLFWAPI int glfwJoystickPresent(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return false; } js = _glfw.joysticks + jid; if (!js->present) return false; return _glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE); } GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_AXES)) return NULL; *count = js->axisCount; return js->axes; } GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_BUTTONS)) return NULL; if (_glfw.hints.init.hatButtons) *count = js->buttonCount + js->hatCount * 4; else *count = js->buttonCount; return js->buttons; } GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_BUTTONS)) return NULL; *count = js->hatCount; return js->hats; } GLFWAPI const char* glfwGetJoystickName(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) return NULL; return js->name; } GLFWAPI const char* glfwGetJoystickGUID(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) return NULL; return js->guid; } GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT(); js = _glfw.joysticks + jid; if (!js->present) return; js->userPointer = pointer; } GLFWAPI void* glfwGetJoystickUserPointer(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); js = _glfw.joysticks + jid; if (!js->present) return NULL; return js->userPointer; } GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(_glfw.callbacks.joystick, cbfun); return cbfun; } GLFWAPI int glfwUpdateGamepadMappings(const char* string) { int jid; const char* c = string; assert(string != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(false); while (*c) { if ((*c >= '0' && *c <= '9') || (*c >= 'a' && *c <= 'f') || (*c >= 'A' && *c <= 'F')) { char line[1024]; const size_t length = strcspn(c, "\r\n"); if (length < sizeof(line)) { _GLFWmapping mapping = {{0}}; memcpy(line, c, length); line[length] = '\0'; if (parseMapping(&mapping, line)) { _GLFWmapping* previous = findMapping(mapping.guid); if (previous) *previous = mapping; else { _glfw.mappingCount++; _glfw.mappings = realloc(_glfw.mappings, sizeof(_GLFWmapping) * _glfw.mappingCount); _glfw.mappings[_glfw.mappingCount - 1] = mapping; } } } c += length; } else { c += strcspn(c, "\r\n"); c += strspn(c, "\r\n"); } } for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { _GLFWjoystick* js = _glfw.joysticks + jid; if (js->present) js->mapping = findValidMapping(js); } return true; } GLFWAPI int glfwJoystickIsGamepad(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return false; } js = _glfw.joysticks + jid; if (!js->present) return false; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) return false; return js->mapping != NULL; } GLFWAPI const char* glfwGetGamepadName(int jid) { _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return NULL; } js = _glfw.joysticks + jid; if (!js->present) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) return NULL; if (!js->mapping) return NULL; return js->mapping->name; } GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state) { int i; _GLFWjoystick* js; assert(jid >= GLFW_JOYSTICK_1); assert(jid <= GLFW_JOYSTICK_LAST); assert(state != NULL); memset(state, 0, sizeof(GLFWgamepadstate)); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (jid < 0 || jid > GLFW_JOYSTICK_LAST) { _glfwInputError(GLFW_INVALID_ENUM, "Invalid joystick ID %i", jid); return false; } js = _glfw.joysticks + jid; if (!js->present) return false; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_ALL)) return false; if (!js->mapping) return false; for (i = 0; i <= GLFW_GAMEPAD_BUTTON_LAST; i++) { const _GLFWmapelement* e = js->mapping->buttons + i; if (e->type == _GLFW_JOYSTICK_AXIS) { const float value = js->axes[e->index] * e->axisScale + e->axisOffset; if (value > 0.f) state->buttons[i] = GLFW_PRESS; } else if (e->type == _GLFW_JOYSTICK_HATBIT) { const unsigned int hat = e->index >> 4; const unsigned int bit = e->index & 0xf; if (js->hats[hat] & bit) state->buttons[i] = GLFW_PRESS; } else if (e->type == _GLFW_JOYSTICK_BUTTON) state->buttons[i] = js->buttons[e->index]; } for (i = 0; i <= GLFW_GAMEPAD_AXIS_LAST; i++) { const _GLFWmapelement* e = js->mapping->axes + i; if (e->type == _GLFW_JOYSTICK_AXIS) { const float value = js->axes[e->index] * e->axisScale + e->axisOffset; state->axes[i] = fminf(fmaxf(value, -1.f), 1.f); } else if (e->type == _GLFW_JOYSTICK_HATBIT) { const unsigned int hat = e->index >> 4; const unsigned int bit = e->index & 0xf; if (js->hats[hat] & bit) state->axes[i] = 1.f; else state->axes[i] = -1.f; } else if (e->type == _GLFW_JOYSTICK_BUTTON) state->axes[i] = js->buttons[e->index] * 2.f - 1.f; } return true; } GLFWAPI void glfwSetClipboardString(GLFWwindow* handle UNUSED, const char* string) { assert(string != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformSetClipboardString(string); } GLFWAPI const char* glfwGetClipboardString(GLFWwindow* handle UNUSED) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return _glfwPlatformGetClipboardString(); } #if defined(_GLFW_X11) || defined(_GLFW_WAYLAND) GLFWAPI void glfwSetPrimarySelectionString(GLFWwindow* handle UNUSED, const char* string) { assert(string != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformSetPrimarySelectionString(string); } GLFWAPI const char* glfwGetPrimarySelectionString(GLFWwindow* handle UNUSED) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return _glfwPlatformGetPrimarySelectionString(); } #endif GLFWAPI monotonic_t glfwGetTime(void) { _GLFW_REQUIRE_INIT_OR_RETURN(0); return monotonic(); } GLFWAPI void glfwSetTime(monotonic_t time) { _GLFW_REQUIRE_INIT(); if (time < 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid time %f", monotonic_t_to_s_double(time)); return; } // Do nothing } GLFWAPI uint64_t glfwGetTimerValue(void) { _GLFW_REQUIRE_INIT_OR_RETURN(0); return _glfwPlatformGetTimerValue(); } GLFWAPI uint64_t glfwGetTimerFrequency(void) { _GLFW_REQUIRE_INIT_OR_RETURN(0); return _glfwPlatformGetTimerFrequency(); } kitty-0.15.0/glfw/internal.h000066400000000000000000000727151356737523400157200ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #pragma once #include "../kitty/monotonic.h" #if defined(_GLFW_USE_CONFIG_H) #include "glfw_config.h" #endif #define arraysz(x) (sizeof(x)/sizeof(x[0])) #if defined(GLFW_INCLUDE_GLCOREARB) || \ defined(GLFW_INCLUDE_ES1) || \ defined(GLFW_INCLUDE_ES2) || \ defined(GLFW_INCLUDE_ES3) || \ defined(GLFW_INCLUDE_ES31) || \ defined(GLFW_INCLUDE_ES32) || \ defined(GLFW_INCLUDE_NONE) || \ defined(GLFW_INCLUDE_GLEXT) || \ defined(GLFW_INCLUDE_GLU) || \ defined(GLFW_INCLUDE_VULKAN) || \ defined(GLFW_DLL) #error "You must not define any header option macros when compiling GLFW" #endif #define GLFW_INCLUDE_NONE #include "glfw3.h" #define _GLFW_INSERT_FIRST 0 #define _GLFW_INSERT_LAST 1 #define _GLFW_POLL_PRESENCE 0 #define _GLFW_POLL_AXES 1 #define _GLFW_POLL_BUTTONS 2 #define _GLFW_POLL_ALL (_GLFW_POLL_AXES | _GLFW_POLL_BUTTONS) #define _GLFW_MESSAGE_SIZE 1024 typedef unsigned long long GLFWid; typedef struct _GLFWerror _GLFWerror; typedef struct _GLFWinitconfig _GLFWinitconfig; typedef struct _GLFWwndconfig _GLFWwndconfig; typedef struct _GLFWctxconfig _GLFWctxconfig; typedef struct _GLFWfbconfig _GLFWfbconfig; typedef struct _GLFWcontext _GLFWcontext; typedef struct _GLFWwindow _GLFWwindow; typedef struct _GLFWlibrary _GLFWlibrary; typedef struct _GLFWmonitor _GLFWmonitor; typedef struct _GLFWcursor _GLFWcursor; typedef struct _GLFWmapelement _GLFWmapelement; typedef struct _GLFWmapping _GLFWmapping; typedef struct _GLFWjoystick _GLFWjoystick; typedef struct _GLFWtls _GLFWtls; typedef struct _GLFWmutex _GLFWmutex; typedef void (* _GLFWmakecontextcurrentfun)(_GLFWwindow*); typedef void (* _GLFWswapbuffersfun)(_GLFWwindow*); typedef void (* _GLFWswapintervalfun)(int); typedef int (* _GLFWextensionsupportedfun)(const char*); typedef GLFWglproc (* _GLFWgetprocaddressfun)(const char*); typedef void (* _GLFWdestroycontextfun)(_GLFWwindow*); #define GL_VERSION 0x1f02 #define GL_NONE 0 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_UNSIGNED_BYTE 0x1401 #define GL_EXTENSIONS 0x1f03 #define GL_NUM_EXTENSIONS 0x821d #define GL_CONTEXT_FLAGS 0x821e #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82fb #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82fc #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 typedef int GLint; typedef unsigned int GLuint; typedef unsigned int GLenum; typedef unsigned int GLbitfield; typedef unsigned char GLubyte; typedef void (APIENTRY * PFNGLCLEARPROC)(GLbitfield); typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGPROC)(GLenum); typedef void (APIENTRY * PFNGLGETINTEGERVPROC)(GLenum,GLint*); typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGIPROC)(GLenum,GLuint); #define VK_NULL_HANDLE 0 typedef void* VkInstance; typedef void* VkPhysicalDevice; typedef uint64_t VkSurfaceKHR; typedef uint32_t VkFlags; typedef uint32_t VkBool32; typedef enum VkStructureType { VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkStructureType; typedef enum VkResult { VK_SUCCESS = 0, VK_NOT_READY = 1, VK_TIMEOUT = 2, VK_EVENT_SET = 3, VK_EVENT_RESET = 4, VK_INCOMPLETE = 5, VK_ERROR_OUT_OF_HOST_MEMORY = -1, VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, VK_ERROR_INITIALIZATION_FAILED = -3, VK_ERROR_DEVICE_LOST = -4, VK_ERROR_MEMORY_MAP_FAILED = -5, VK_ERROR_LAYER_NOT_PRESENT = -6, VK_ERROR_EXTENSION_NOT_PRESENT = -7, VK_ERROR_FEATURE_NOT_PRESENT = -8, VK_ERROR_INCOMPATIBLE_DRIVER = -9, VK_ERROR_TOO_MANY_OBJECTS = -10, VK_ERROR_FORMAT_NOT_SUPPORTED = -11, VK_ERROR_SURFACE_LOST_KHR = -1000000000, VK_SUBOPTIMAL_KHR = 1000001003, VK_ERROR_OUT_OF_DATE_KHR = -1000001004, VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, VK_RESULT_MAX_ENUM = 0x7FFFFFFF } VkResult; typedef struct VkAllocationCallbacks VkAllocationCallbacks; typedef struct VkExtensionProperties { char extensionName[256]; uint32_t specVersion; } VkExtensionProperties; typedef void (APIENTRY * PFN_vkVoidFunction)(void); #if defined(_GLFW_VULKAN_STATIC) PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance,const char*); VkResult vkEnumerateInstanceExtensionProperties(const char*,uint32_t*,VkExtensionProperties*); #else typedef PFN_vkVoidFunction (APIENTRY * PFN_vkGetInstanceProcAddr)(VkInstance,const char*); typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const char*,uint32_t*,VkExtensionProperties*); #define vkEnumerateInstanceExtensionProperties _glfw.vk.EnumerateInstanceExtensionProperties #define vkGetInstanceProcAddr _glfw.vk.GetInstanceProcAddr #endif #if defined(_GLFW_COCOA) #include "cocoa_platform.h" #elif defined(_GLFW_WIN32) #include "win32_platform.h" #elif defined(_GLFW_X11) #include "x11_platform.h" #elif defined(_GLFW_WAYLAND) #include "wl_platform.h" #elif defined(_GLFW_OSMESA) #include "null_platform.h" #else #error "No supported window creation API selected" #endif #define remove_i_from_array(array, i, count) { \ (count)--; \ if ((i) < (count)) { \ memmove((array) + (i), (array) + (i) + 1, sizeof((array)[0]) * ((count) - (i))); \ }} // Constructs a version number string from the public header macros #define _GLFW_CONCAT_VERSION(m, n, r) #m "." #n "." #r #define _GLFW_MAKE_VERSION(m, n, r) _GLFW_CONCAT_VERSION(m, n, r) #define _GLFW_VERSION_NUMBER _GLFW_MAKE_VERSION(GLFW_VERSION_MAJOR, \ GLFW_VERSION_MINOR, \ GLFW_VERSION_REVISION) // Checks for whether the library has been initialized #define _GLFW_REQUIRE_INIT() \ if (!_glfw.initialized) \ { \ _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \ return; \ } #define _GLFW_REQUIRE_INIT_OR_RETURN(x) \ if (!_glfw.initialized) \ { \ _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \ return x; \ } // Swaps the provided pointers #define _GLFW_SWAP_POINTERS(x, y) \ do{ \ __typeof__(x) t; \ t = x; \ x = y; \ y = t; \ }while(0) // Suppress some pedantic warnings #ifdef __clang__ #define START_ALLOW_CASE_RANGE _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wpedantic\"") #define END_ALLOW_CASE_RANGE _Pragma("clang diagnostic pop") #define ALLOW_UNUSED_RESULT _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wunused-result\"") #define END_ALLOW_UNUSED_RESULT _Pragma("clang diagnostic pop") #else #define START_ALLOW_CASE_RANGE _Pragma("GCC diagnostic ignored \"-Wpedantic\"") #define END_ALLOW_CASE_RANGE _Pragma("GCC diagnostic pop") #define ALLOW_UNUSED_RESULT _Pragma("GCC diagnostic ignored \"-Wunused-result\"") #define END_ALLOW_UNUSED_RESULT _Pragma("GCC diagnostic pop") #endif // dlsym that works with -Wpedantic #define glfw_dlsym(dest, handle, name) do {*(void **)&(dest) = _glfw_dlsym(handle, name);}while (0) // Mark function arguments as unused #define UNUSED __attribute__ ((unused)) // Per-thread error structure // struct _GLFWerror { _GLFWerror* next; int code; char description[_GLFW_MESSAGE_SIZE]; }; // Initialization configuration // // Parameters relating to the initialization of the library // struct _GLFWinitconfig { bool hatButtons; bool debugKeyboard; bool enableJoysticks; struct { bool menubar; bool chdir; } ns; }; // Window configuration // // Parameters relating to the creation of the window but not directly related // to the framebuffer. This is used to pass window creation parameters from // shared code to the platform API. // struct _GLFWwndconfig { int width; int height; const char* title; bool resizable; bool visible; bool decorated; bool focused; bool autoIconify; bool floating; bool maximized; bool centerCursor; bool focusOnShow; bool scaleToMonitor; struct { bool retina; char frameName[256]; } ns; struct { char className[256]; char instanceName[256]; } x11; struct { char appId[256]; } wl; }; // Context configuration // // Parameters relating to the creation of the context but not directly related // to the framebuffer. This is used to pass context creation parameters from // shared code to the platform API. // struct _GLFWctxconfig { int client; int source; int major; int minor; bool forward; bool debug; bool noerror; int profile; int robustness; int release; _GLFWwindow* share; struct { bool offline; } nsgl; }; // Framebuffer configuration // // This describes buffers and their sizes. It also contains // a platform-specific ID used to map back to the backend API object. // // It is used to pass framebuffer parameters from shared code to the platform // API and also to enumerate and select available framebuffer configs. // struct _GLFWfbconfig { int redBits; int greenBits; int blueBits; int alphaBits; int depthBits; int stencilBits; int accumRedBits; int accumGreenBits; int accumBlueBits; int accumAlphaBits; int auxBuffers; bool stereo; int samples; bool sRGB; bool doublebuffer; bool transparent; uintptr_t handle; }; // Context structure // struct _GLFWcontext { int client; int source; int major, minor, revision; bool forward, debug, noerror; int profile; int robustness; int release; PFNGLGETSTRINGIPROC GetStringi; PFNGLGETINTEGERVPROC GetIntegerv; PFNGLGETSTRINGPROC GetString; _GLFWmakecontextcurrentfun makeCurrent; _GLFWswapbuffersfun swapBuffers; _GLFWswapintervalfun swapInterval; _GLFWextensionsupportedfun extensionSupported; _GLFWgetprocaddressfun getProcAddress; _GLFWdestroycontextfun destroy; // This is defined in the context API's context.h _GLFW_PLATFORM_CONTEXT_STATE // This is defined in egl_context.h _GLFW_EGL_CONTEXT_STATE; // This is defined in osmesa_context.h _GLFW_OSMESA_CONTEXT_STATE; }; // Window and context structure // struct _GLFWwindow { struct _GLFWwindow* next; // Window settings and state bool resizable; bool decorated; bool autoIconify; bool floating; bool focusOnShow; bool shouldClose; void* userPointer; GLFWid id; GLFWvidmode videoMode; _GLFWmonitor* monitor; _GLFWcursor* cursor; int minwidth, minheight; int maxwidth, maxheight; int numer, denom; bool stickyKeys; bool stickyMouseButtons; bool lockKeyMods; int cursorMode; char mouseButtons[GLFW_MOUSE_BUTTON_LAST + 1]; char keys[GLFW_KEY_LAST + 1]; // Virtual cursor position when cursor is disabled double virtualCursorPosX, virtualCursorPosY; _GLFWcontext context; struct { GLFWwindowposfun pos; GLFWwindowsizefun size; GLFWwindowclosefun close; GLFWwindowrefreshfun refresh; GLFWwindowfocusfun focus; GLFWwindowocclusionfun occlusion; GLFWwindowiconifyfun iconify; GLFWwindowmaximizefun maximize; GLFWframebuffersizefun fbsize; GLFWwindowcontentscalefun scale; GLFWmousebuttonfun mouseButton; GLFWcursorposfun cursorPos; GLFWcursorenterfun cursorEnter; GLFWscrollfun scroll; GLFWkeyboardfun keyboard; GLFWdropfun drop; GLFWliveresizefun liveResize; } callbacks; // This is defined in the window API's platform.h _GLFW_PLATFORM_WINDOW_STATE; }; // Monitor structure // struct _GLFWmonitor { char* name; void* userPointer; // Physical dimensions in millimeters. int widthMM, heightMM; // The window whose video mode is current on this monitor _GLFWwindow* window; GLFWvidmode* modes; int modeCount; GLFWvidmode currentMode; GLFWgammaramp originalRamp; GLFWgammaramp currentRamp; // This is defined in the window API's platform.h _GLFW_PLATFORM_MONITOR_STATE; }; // Cursor structure // struct _GLFWcursor { _GLFWcursor* next; // This is defined in the window API's platform.h _GLFW_PLATFORM_CURSOR_STATE; }; // Gamepad mapping element structure // struct _GLFWmapelement { uint8_t type; uint8_t index; int8_t axisScale; int8_t axisOffset; }; // Gamepad mapping structure // struct _GLFWmapping { char name[128]; char guid[33]; _GLFWmapelement buttons[15]; _GLFWmapelement axes[6]; }; // Joystick structure // struct _GLFWjoystick { bool present; float* axes; int axisCount; unsigned char* buttons; int buttonCount; unsigned char* hats; int hatCount; char* name; void* userPointer; char guid[33]; _GLFWmapping* mapping; // This is defined in the joystick API's joystick.h _GLFW_PLATFORM_JOYSTICK_STATE; }; // Thread local storage structure // struct _GLFWtls { // This is defined in the platform's thread.h _GLFW_PLATFORM_TLS_STATE; }; // Mutex structure // struct _GLFWmutex { // This is defined in the platform's thread.h _GLFW_PLATFORM_MUTEX_STATE; }; // Library global data // struct _GLFWlibrary { bool initialized; struct { _GLFWinitconfig init; _GLFWfbconfig framebuffer; _GLFWwndconfig window; _GLFWctxconfig context; int refreshRate; } hints; _GLFWerror* errorListHead; _GLFWcursor* cursorListHead; _GLFWwindow* windowListHead; GLFWid focusedWindowId; _GLFWmonitor** monitors; int monitorCount; _GLFWjoystick joysticks[GLFW_JOYSTICK_LAST + 1]; _GLFWmapping* mappings; int mappingCount; _GLFWtls errorSlot; _GLFWtls contextSlot; _GLFWmutex errorLock; struct { uint64_t offset; // This is defined in the platform's time.h _GLFW_PLATFORM_LIBRARY_TIMER_STATE; } timer; struct { bool available; void* handle; char* extensions[2]; #if !defined(_GLFW_VULKAN_STATIC) PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; PFN_vkGetInstanceProcAddr GetInstanceProcAddr; #endif bool KHR_surface; #if defined(_GLFW_WIN32) bool KHR_win32_surface; #elif defined(_GLFW_COCOA) bool MVK_macos_surface; #elif defined(_GLFW_X11) bool KHR_xlib_surface; bool KHR_xcb_surface; #elif defined(_GLFW_WAYLAND) bool KHR_wayland_surface; #endif } vk; struct { GLFWmonitorfun monitor; GLFWjoystickfun joystick; } callbacks; // This is defined in the window API's platform.h _GLFW_PLATFORM_LIBRARY_WINDOW_STATE; // This is defined in the context API's context.h _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE // This is defined in the platform's joystick.h _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE // This is defined in egl_context.h _GLFW_EGL_LIBRARY_CONTEXT_STATE; // This is defined in osmesa_context.h _GLFW_OSMESA_LIBRARY_CONTEXT_STATE; }; // Global state shared between compilation units of GLFW // extern _GLFWlibrary _glfw; ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformInit(void); void _glfwPlatformTerminate(void); const char* _glfwPlatformGetVersionString(void); void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos); void _glfwPlatformSetCursorPos(_GLFWwindow* window, double xpos, double ypos); void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode); int _glfwPlatformCreateCursor(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot, int count); int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, GLFWCursorShape shape); void _glfwPlatformDestroyCursor(_GLFWcursor* cursor); void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor); const char* _glfwPlatformGetNativeKeyName(int native_key); int _glfwPlatformGetNativeKeyForKey(int key); void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor); void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos); void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, float* xscale, float* yscale); void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int *width, int *height); GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count); void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode); bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp); void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp); void _glfwPlatformSetClipboardString(const char* string); const char* _glfwPlatformGetClipboardString(void); #if defined(_GLFW_X11) || defined(_GLFW_WAYLAND) void _glfwPlatformSetPrimarySelectionString(const char* string); const char* _glfwPlatformGetPrimarySelectionString(void); #endif int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode); void _glfwPlatformUpdateGamepadGUID(char* guid); uint64_t _glfwPlatformGetTimerValue(void); uint64_t _glfwPlatformGetTimerFrequency(void); int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig); void _glfwPlatformDestroyWindow(_GLFWwindow* window); void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title); void _glfwPlatformSetWindowIcon(_GLFWwindow* window, int count, const GLFWimage* images); void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos); void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos); void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height); void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height); void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom); void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height); void _glfwInputLiveResize(_GLFWwindow* window, bool started); void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom); void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, float* xscale, float* yscale); monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window); void _glfwPlatformIconifyWindow(_GLFWwindow* window); void _glfwPlatformRestoreWindow(_GLFWwindow* window); void _glfwPlatformMaximizeWindow(_GLFWwindow* window); void _glfwPlatformShowWindow(_GLFWwindow* window); void _glfwPlatformHideWindow(_GLFWwindow* window); void _glfwPlatformRequestWindowAttention(_GLFWwindow* window); int _glfwPlatformWindowBell(_GLFWwindow* window); void _glfwPlatformFocusWindow(_GLFWwindow* window); void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); bool _glfwPlatformToggleFullscreen(_GLFWwindow *w, unsigned int flags); int _glfwPlatformWindowFocused(_GLFWwindow* window); int _glfwPlatformWindowOccluded(_GLFWwindow* window); int _glfwPlatformWindowIconified(_GLFWwindow* window); int _glfwPlatformWindowVisible(_GLFWwindow* window); int _glfwPlatformWindowMaximized(_GLFWwindow* window); int _glfwPlatformWindowHovered(_GLFWwindow* window); int _glfwPlatformFramebufferTransparent(_GLFWwindow* window); float _glfwPlatformGetWindowOpacity(_GLFWwindow* window); void _glfwPlatformSetWindowResizable(_GLFWwindow* window, bool enabled); void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, bool enabled); void _glfwPlatformSetWindowFloating(_GLFWwindow* window, bool enabled); void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity); void _glfwPlatformUpdateIMEState(_GLFWwindow *w, int which, int a, int b, int c, int d); void _glfwPlatformPollEvents(void); void _glfwPlatformWaitEvents(void); void _glfwPlatformWaitEventsTimeout(monotonic_t timeout); void _glfwPlatformPostEmptyEvent(void); void _glfwPlatformGetRequiredInstanceExtensions(char** extensions); int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); bool _glfwPlatformCreateTls(_GLFWtls* tls); void _glfwPlatformDestroyTls(_GLFWtls* tls); void* _glfwPlatformGetTls(_GLFWtls* tls); void _glfwPlatformSetTls(_GLFWtls* tls, void* value); bool _glfwPlatformCreateMutex(_GLFWmutex* mutex); void _glfwPlatformDestroyMutex(_GLFWmutex* mutex); void _glfwPlatformLockMutex(_GLFWmutex* mutex); void _glfwPlatformUnlockMutex(_GLFWmutex* mutex); ////////////////////////////////////////////////////////////////////////// ////// GLFW event API ////// ////////////////////////////////////////////////////////////////////////// void _glfwInputWindowFocus(_GLFWwindow* window, bool focused); void _glfwInputWindowOcclusion(_GLFWwindow* window, bool occluded); void _glfwInputWindowPos(_GLFWwindow* window, int xpos, int ypos); void _glfwInputWindowSize(_GLFWwindow* window, int width, int height); void _glfwInputFramebufferSize(_GLFWwindow* window, int width, int height); void _glfwInputWindowContentScale(_GLFWwindow* window, float xscale, float yscale); void _glfwInputWindowIconify(_GLFWwindow* window, bool iconified); void _glfwInputWindowMaximize(_GLFWwindow* window, bool maximized); void _glfwInputWindowDamage(_GLFWwindow* window); void _glfwInputWindowCloseRequest(_GLFWwindow* window); void _glfwInputWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor); void _glfwInitializeKeyEvent(GLFWkeyevent *ev, int key, int native_key, int action, int mods); void _glfwInputKeyboard(_GLFWwindow *window, GLFWkeyevent *ev); void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset, int flags); void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods); void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos); void _glfwInputCursorEnter(_GLFWwindow* window, bool entered); void _glfwInputDrop(_GLFWwindow* window, int count, const char** names); void _glfwInputJoystick(_GLFWjoystick* js, int event); void _glfwInputJoystickAxis(_GLFWjoystick* js, int axis, float value); void _glfwInputJoystickButton(_GLFWjoystick* js, int button, char value); void _glfwInputJoystickHat(_GLFWjoystick* js, int hat, char value); void _glfwInputMonitor(_GLFWmonitor* monitor, int action, int placement); void _glfwInputMonitorWindow(_GLFWmonitor* monitor, _GLFWwindow* window); #if defined(__GNUC__) || defined(__clang__) void _glfwInputError(int code, const char* format, ...) __attribute__((format(printf, 2, 3))); void _glfwDebug(const char* format, ...) __attribute__((format(printf, 1, 2))); #else void _glfwInputError(int code, const char* format, ...); void _glfwDebug(const char* format, ...); #endif #ifdef DEBUG_EVENT_LOOP #define EVDBG(...) _glfwDebug(__VA_ARGS__) #else #define EVDBG(...) #endif ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// bool _glfwStringInExtensionString(const char* string, const char* extensions); const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired, const _GLFWfbconfig* alternatives, unsigned int count); bool _glfwRefreshContextAttribs(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig); bool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig); const GLFWvidmode* _glfwChooseVideoMode(_GLFWmonitor* monitor, const GLFWvidmode* desired); int _glfwCompareVideoModes(const GLFWvidmode* first, const GLFWvidmode* second); _GLFWmonitor* _glfwAllocMonitor(const char* name, int widthMM, int heightMM); void _glfwFreeMonitor(_GLFWmonitor* monitor); void _glfwAllocGammaArrays(GLFWgammaramp* ramp, unsigned int size); void _glfwFreeGammaArrays(GLFWgammaramp* ramp); void _glfwSplitBPP(int bpp, int* red, int* green, int* blue); _GLFWjoystick* _glfwAllocJoystick(const char* name, const char* guid, int axisCount, int buttonCount, int hatCount); void _glfwFreeJoystick(_GLFWjoystick* js); const char* _glfwGetKeyName(int key); void _glfwCenterCursorInContentArea(_GLFWwindow* window); bool _glfwInitVulkan(int mode); void _glfwTerminateVulkan(void); const char* _glfwGetVulkanResultString(VkResult result); _GLFWwindow* _glfwFocusedWindow(void); _GLFWwindow* _glfwWindowForId(GLFWid id); void _glfwPlatformRunMainLoop(GLFWtickcallback, void*); void _glfwPlatformStopMainLoop(void); unsigned long long _glfwPlatformAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void *callback_data, GLFWuserdatafun free_callback); void _glfwPlatformUpdateTimer(unsigned long long timer_id, monotonic_t interval, bool enabled); void _glfwPlatformRemoveTimer(unsigned long long timer_id); char* _glfw_strdup(const char* source); kitty-0.15.0/glfw/linux_joystick.c000066400000000000000000000301741356737523400171460ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Linux - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #include #include #include #include #include #include #include #ifndef SYN_DROPPED // < v2.6.39 kernel headers // Workaround for CentOS-6, which is supported till 2020-11-30, but still on v2.6.32 #define SYN_DROPPED 3 #endif // Apply an EV_KEY event to the specified joystick // static void handleKeyEvent(_GLFWjoystick* js, int code, int value) { _glfwInputJoystickButton(js, js->linjs.keyMap[code - BTN_MISC], value ? GLFW_PRESS : GLFW_RELEASE); } // Apply an EV_ABS event to the specified joystick // static void handleAbsEvent(_GLFWjoystick* js, int code, int value) { const int index = js->linjs.absMap[code]; if (code >= ABS_HAT0X && code <= ABS_HAT3Y) { static const char stateMap[3][3] = { { GLFW_HAT_CENTERED, GLFW_HAT_UP, GLFW_HAT_DOWN }, { GLFW_HAT_LEFT, GLFW_HAT_LEFT_UP, GLFW_HAT_LEFT_DOWN }, { GLFW_HAT_RIGHT, GLFW_HAT_RIGHT_UP, GLFW_HAT_RIGHT_DOWN }, }; const int hat = (code - ABS_HAT0X) / 2; const int axis = (code - ABS_HAT0X) % 2; int* state = js->linjs.hats[hat]; // NOTE: Looking at several input drivers, it seems all hat events use // -1 for left / up, 0 for centered and 1 for right / down if (value == 0) state[axis] = 0; else if (value < 0) state[axis] = 1; else if (value > 0) state[axis] = 2; _glfwInputJoystickHat(js, index, stateMap[state[0]][state[1]]); } else { const struct input_absinfo* info = &js->linjs.absInfo[code]; float normalized = value; const int range = info->maximum - info->minimum; if (range) { // Normalize to 0.0 -> 1.0 normalized = (normalized - info->minimum) / range; // Normalize to -1.0 -> 1.0 normalized = normalized * 2.0f - 1.0f; } _glfwInputJoystickAxis(js, index, normalized); } } // Poll state of absolute axes // static void pollAbsState(_GLFWjoystick* js) { for (int code = 0; code < ABS_CNT; code++) { if (js->linjs.absMap[code] < 0) continue; struct input_absinfo* info = &js->linjs.absInfo[code]; if (ioctl(js->linjs.fd, EVIOCGABS(code), info) < 0) continue; handleAbsEvent(js, code, info->value); } } #define isBitSet(bit, arr) (arr[(bit) / 8] & (1 << ((bit) % 8))) // Attempt to open the specified joystick device // static bool openJoystickDevice(const char* path) { for (int jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { if (!_glfw.joysticks[jid].present) continue; if (strcmp(_glfw.joysticks[jid].linjs.path, path) == 0) return false; } _GLFWjoystickLinux linjs = {0}; linjs.fd = open(path, O_RDONLY | O_NONBLOCK); if (linjs.fd == -1) return false; char evBits[(EV_CNT + 7) / 8] = {0}; char keyBits[(KEY_CNT + 7) / 8] = {0}; char absBits[(ABS_CNT + 7) / 8] = {0}; struct input_id id; if (ioctl(linjs.fd, (int32_t)EVIOCGBIT(0, sizeof(evBits)), evBits) < 0 || ioctl(linjs.fd, (int32_t)EVIOCGBIT(EV_KEY, sizeof(keyBits)), keyBits) < 0 || ioctl(linjs.fd, (int32_t)EVIOCGBIT(EV_ABS, sizeof(absBits)), absBits) < 0 || ioctl(linjs.fd, (int32_t)EVIOCGID, &id) < 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "Linux: Failed to query input device: %s", strerror(errno)); close(linjs.fd); return false; } // Ensure this device supports the events expected of a joystick if (!isBitSet(EV_KEY, evBits) || !isBitSet(EV_ABS, evBits)) { close(linjs.fd); return false; } char name[256] = ""; if (ioctl(linjs.fd, (int32_t)EVIOCGNAME(sizeof(name)), name) < 0) strncpy(name, "Unknown", sizeof(name)); char guid[33] = ""; // Generate a joystick GUID that matches the SDL 2.0.5+ one if (id.vendor && id.product && id.version) { sprintf(guid, "%02x%02x0000%02x%02x0000%02x%02x0000%02x%02x0000", id.bustype & 0xff, id.bustype >> 8, id.vendor & 0xff, id.vendor >> 8, id.product & 0xff, id.product >> 8, id.version & 0xff, id.version >> 8); } else { sprintf(guid, "%02x%02x0000%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x00", id.bustype & 0xff, id.bustype >> 8, name[0], name[1], name[2], name[3], name[4], name[5], name[6], name[7], name[8], name[9], name[10]); } int axisCount = 0, buttonCount = 0, hatCount = 0; for (int code = BTN_MISC; code < KEY_CNT; code++) { if (!isBitSet(code, keyBits)) continue; linjs.keyMap[code - BTN_MISC] = buttonCount; buttonCount++; } for (int code = 0; code < ABS_CNT; code++) { linjs.absMap[code] = -1; if (!isBitSet(code, absBits)) continue; if (code >= ABS_HAT0X && code <= ABS_HAT3Y) { linjs.absMap[code] = hatCount; hatCount++; // Skip the Y axis code++; } else { if (ioctl(linjs.fd, EVIOCGABS(code), &linjs.absInfo[code]) < 0) continue; linjs.absMap[code] = axisCount; axisCount++; } } _GLFWjoystick* js = _glfwAllocJoystick(name, guid, axisCount, buttonCount, hatCount); if (!js) { close(linjs.fd); return false; } strncpy(linjs.path, path, sizeof(linjs.path) - 1); memcpy(&js->linjs, &linjs, sizeof(linjs)); pollAbsState(js); _glfwInputJoystick(js, GLFW_CONNECTED); return true; } #undef isBitSet // Frees all resources associated with the specified joystick // static void closeJoystick(_GLFWjoystick* js) { close(js->linjs.fd); _glfwFreeJoystick(js); _glfwInputJoystick(js, GLFW_DISCONNECTED); } // Lexically compare joysticks by name; used by qsort // static int compareJoysticks(const void* fp, const void* sp) { const _GLFWjoystick* fj = fp; const _GLFWjoystick* sj = sp; return strcmp(fj->linjs.path, sj->linjs.path); } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialize joystick interface // bool _glfwInitJoysticksLinux(void) { const char* dirname = "/dev/input"; _glfw.linjs.inotify = inotify_init1(IN_NONBLOCK | IN_CLOEXEC); if (_glfw.linjs.inotify > 0) { // HACK: Register for IN_ATTRIB to get notified when udev is done // This works well in practice but the true way is libudev _glfw.linjs.watch = inotify_add_watch(_glfw.linjs.inotify, dirname, IN_CREATE | IN_ATTRIB | IN_DELETE); } // Continue without device connection notifications if inotify fails if (regcomp(&_glfw.linjs.regex, "^event[0-9]\\+$", 0) != 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "Linux: Failed to compile regex"); return false; } int count = 0; DIR* dir = opendir(dirname); if (dir) { struct dirent* entry; while ((entry = readdir(dir))) { regmatch_t match; if (regexec(&_glfw.linjs.regex, entry->d_name, 1, &match, 0) != 0) continue; char path[PATH_MAX]; snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name); if (openJoystickDevice(path)) count++; } closedir(dir); } // Continue with no joysticks if enumeration fails qsort(_glfw.joysticks, count, sizeof(_glfw.joysticks[0]), compareJoysticks); return true; } // Close all opened joystick handles // void _glfwTerminateJoysticksLinux(void) { int jid; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { _GLFWjoystick* js = _glfw.joysticks + jid; if (js->present) closeJoystick(js); } regfree(&_glfw.linjs.regex); if (_glfw.linjs.inotify > 0) { if (_glfw.linjs.watch > 0) inotify_rm_watch(_glfw.linjs.inotify, _glfw.linjs.watch); close(_glfw.linjs.inotify); } } void _glfwDetectJoystickConnectionLinux(void) { if (_glfw.linjs.inotify <= 0) return; ssize_t offset = 0; char buffer[16384]; const ssize_t size = read(_glfw.linjs.inotify, buffer, sizeof(buffer)); while (size > offset) { regmatch_t match; const struct inotify_event* e = (struct inotify_event*) (buffer + offset); offset += sizeof(struct inotify_event) + e->len; if (regexec(&_glfw.linjs.regex, e->name, 1, &match, 0) != 0) continue; char path[PATH_MAX]; snprintf(path, sizeof(path), "/dev/input/%s", e->name); if (e->mask & (IN_CREATE | IN_ATTRIB)) openJoystickDevice(path); else if (e->mask & IN_DELETE) { for (int jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { if (strcmp(_glfw.joysticks[jid].linjs.path, path) == 0) { closeJoystick(_glfw.joysticks + jid); break; } } } } } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode UNUSED) { // Read all queued events (non-blocking) for (;;) { struct input_event e; errno = 0; if (read(js->linjs.fd, &e, sizeof(e)) < 0) { // Reset the joystick slot if the device was disconnected if (errno == ENODEV) closeJoystick(js); break; } if (e.type == EV_SYN) { if (e.code == SYN_DROPPED) _glfw.linjs.dropped = true; else if (e.code == SYN_REPORT) { _glfw.linjs.dropped = false; pollAbsState(js); } } if (_glfw.linjs.dropped) continue; if (e.type == EV_KEY) handleKeyEvent(js, e.code, e.value); else if (e.type == EV_ABS) handleAbsEvent(js, e.code, e.value); } return js->present; } void _glfwPlatformUpdateGamepadGUID(char* guid UNUSED) { } kitty-0.15.0/glfw/linux_joystick.h000066400000000000000000000041761356737523400171560ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Linux - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include #define _GLFW_PLATFORM_JOYSTICK_STATE _GLFWjoystickLinux linjs #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE _GLFWlibraryLinux linjs; #define _GLFW_PLATFORM_MAPPING_NAME "Linux" // Linux-specific joystick data // typedef struct _GLFWjoystickLinux { int fd; char path[PATH_MAX]; int keyMap[KEY_CNT - BTN_MISC]; int absMap[ABS_CNT]; struct input_absinfo absInfo[ABS_CNT]; int hats[4][2]; } _GLFWjoystickLinux; // Linux-specific joystick API data // typedef struct _GLFWlibraryLinux { int inotify; int watch; regex_t regex; bool dropped; } _GLFWlibraryLinux; bool _glfwInitJoysticksLinux(void); void _glfwTerminateJoysticksLinux(void); void _glfwDetectJoystickConnectionLinux(void); kitty-0.15.0/glfw/linux_notify.c000066400000000000000000000110241356737523400166100ustar00rootroot00000000000000/* * linux_notify.c * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "internal.h" #include "linux_notify.h" #include #define NOTIFICATIONS_SERVICE "org.freedesktop.Notifications" #define NOTIFICATIONS_PATH "/org/freedesktop/Notifications" #define NOTIFICATIONS_IFACE "org.freedesktop.Notifications" static notification_id_type notification_id = 0; typedef struct { notification_id_type next_id; GLFWDBusnotificationcreatedfun callback; void *data; } NotificationCreatedData; static GLFWDBusnotificationactivatedfun activated_handler = NULL; void glfw_dbus_set_user_notification_activated_handler(GLFWDBusnotificationactivatedfun handler) { activated_handler = handler; } void notification_created(DBusMessage *msg, const char* errmsg, void *data) { if (errmsg) { _glfwInputError(GLFW_PLATFORM_ERROR, "Notify: Failed to create notification error: %s", errmsg); if (data) free(data); return; } uint32_t notification_id; if (!glfw_dbus_get_args(msg, "Failed to get Notification uid", DBUS_TYPE_UINT32, ¬ification_id, DBUS_TYPE_INVALID)) return; NotificationCreatedData *ncd = (NotificationCreatedData*)data; if (ncd->callback) ncd->callback(ncd->next_id, notification_id, ncd->data); if (data) free(data); } static DBusHandlerResult message_handler(DBusConnection *conn UNUSED, DBusMessage *msg, void *user_data UNUSED) { /* printf("session_bus message_handler invoked interface: %s member: %s\n", dbus_message_get_interface(msg), dbus_message_get_member(msg)); */ if (dbus_message_is_signal(msg, NOTIFICATIONS_IFACE, "ActionInvoked")) { uint32_t notification_id; const char *action; if (glfw_dbus_get_args(msg, "Failed to get args from ActionInvoked notification signal", DBUS_TYPE_UINT32, ¬ification_id, DBUS_TYPE_STRING, &action, DBUS_TYPE_INVALID)) { if (activated_handler) { activated_handler(notification_id, action); return DBUS_HANDLER_RESULT_HANDLED; } } } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } notification_id_type glfw_dbus_send_user_notification(const char *app_name, const char* icon, const char *summary, const char *body, const char* action_name, int32_t timeout, GLFWDBusnotificationcreatedfun callback, void *user_data) { DBusConnection *session_bus = glfw_dbus_session_bus(); static DBusConnection *added_signal_match = NULL; if (!session_bus) return 0; if (added_signal_match != session_bus) { dbus_bus_add_match(session_bus, "type='signal',interface='" NOTIFICATIONS_IFACE "',member='ActionInvoked'", NULL); dbus_connection_add_filter(session_bus, message_handler, NULL, NULL); added_signal_match = session_bus; } NotificationCreatedData *data = malloc(sizeof(NotificationCreatedData)); if (!data) return 0; data->next_id = ++notification_id; data->callback = callback; data->data = user_data; if (!data->next_id) data->next_id = ++notification_id; uint32_t replaces_id = 0; DBusMessage *msg = dbus_message_new_method_call(NOTIFICATIONS_SERVICE, NOTIFICATIONS_PATH, NOTIFICATIONS_IFACE, "Notify"); if (!msg) { free(data); return 0; } DBusMessageIter args, array; dbus_message_iter_init_append(msg, &args); #define OOMMSG { free(data); data = NULL; dbus_message_unref(msg); _glfwInputError(GLFW_PLATFORM_ERROR, "%s", "Out of memory allocating DBUS message for notification\n"); return 0; } #define APPEND(type, val) { if (!dbus_message_iter_append_basic(&args, type, val)) OOMMSG } APPEND(DBUS_TYPE_STRING, &app_name) APPEND(DBUS_TYPE_UINT32, &replaces_id) APPEND(DBUS_TYPE_STRING, &icon) APPEND(DBUS_TYPE_STRING, &summary) APPEND(DBUS_TYPE_STRING, &body) if (!dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, "s", &array)) OOMMSG; if (action_name) { static const char* default_action = "default"; dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING, &default_action); dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING, &action_name); } if (!dbus_message_iter_close_container(&args, &array)) OOMMSG; if (!dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, "{sv}", &array)) OOMMSG; if (!dbus_message_iter_close_container(&args, &array)) OOMMSG; APPEND(DBUS_TYPE_INT32, &timeout) #undef OOMMSG #undef APPEND if (!call_method_with_msg(session_bus, msg, 5000, notification_created, data)) return 0; return data->next_id; } kitty-0.15.0/glfw/linux_notify.h000066400000000000000000000012761356737523400166250ustar00rootroot00000000000000/* * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "dbus_glfw.h" #include "internal.h" typedef unsigned long long notification_id_type; typedef void (*GLFWDBusnotificationcreatedfun)(notification_id_type, uint32_t, void*); typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*); notification_id_type glfw_dbus_send_user_notification(const char *app_name, const char* icon, const char *summary, const char *body, const char *action_name, int32_t timeout, GLFWDBusnotificationcreatedfun, void*); void glfw_dbus_set_user_notification_activated_handler(GLFWDBusnotificationactivatedfun handler); kitty-0.15.0/glfw/main_loop.h000066400000000000000000000030751356737523400160520ustar00rootroot00000000000000/* * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "internal.h" #include "../kitty/monotonic.h" #ifndef GLFW_LOOP_BACKEND #define GLFW_LOOP_BACKEND x11 #endif static bool keep_going = false; void _glfwPlatformStopMainLoop(void) { if (keep_going) { keep_going = false; _glfwPlatformPostEmptyEvent(); } } void _glfwPlatformRunMainLoop(GLFWtickcallback tick_callback, void* data) { keep_going = 1; EventLoopData *eld = &_glfw.GLFW_LOOP_BACKEND.eventLoopData; while(keep_going) { _glfwPlatformWaitEvents(); EVDBG("--------- loop tick, wakeups_happened: %d ----------", eld->wakeup_data_read); if (eld->wakeup_data_read) { eld->wakeup_data_read = false; tick_callback(data); } } EVDBG("main loop exiting"); } unsigned long long _glfwPlatformAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafreefun callback, void *callback_data, GLFWuserdatafreefun free_callback) { return addTimer(&_glfw.GLFW_LOOP_BACKEND.eventLoopData, "user timer", interval, 1, repeats, callback, callback_data, free_callback); } void _glfwPlatformRemoveTimer(unsigned long long timer_id) { removeTimer(&_glfw.GLFW_LOOP_BACKEND.eventLoopData, timer_id); } void _glfwPlatformUpdateTimer(unsigned long long timer_id, monotonic_t interval, bool enabled) { changeTimerInterval(&_glfw.GLFW_LOOP_BACKEND.eventLoopData, timer_id, interval); toggleTimer(&_glfw.GLFW_LOOP_BACKEND.eventLoopData, timer_id, enabled); } kitty-0.15.0/glfw/mappings.h000066400000000000000000003410551356737523400157160ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2006-2018 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // As mappings.h.in, this file is used by CMake to produce the mappings.h // header file. If you are adding a GLFW specific gamepad mapping, this is // where to put it. //======================================================================== // As mappings.h, this provides all pre-defined gamepad mappings, including // all available in SDL_GameControllerDB. Do not edit this file. Any gamepad // mappings not specific to GLFW should be submitted to SDL_GameControllerDB. // This file can be re-generated from mappings.h.in and the upstream // gamecontrollerdb.txt with the GenerateMappings.cmake script. //======================================================================== // All gamepad mappings not labeled GLFW are copied from the // SDL_GameControllerDB project under the following license: // // Simple DirectMedia Layer // Copyright (C) 1997-2013 Sam Lantinga // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the // use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be // misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. const char* _glfwDefaultMappings[] = { "03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,", "03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", "03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", "03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", "03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,", "030000008f0e00001200000000000000,Acme,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,", "03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,", "030000006b1400000055000000000000,bigben ps3padstreetnew,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,", "03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", "03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,", "03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "030000004f04000023b3000000000000,Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,", "030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,", "03000000790000000600000000000000,G-Shark GS-GP702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", "03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,", "030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000451300000010000000000000,Generic USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005f00000000000000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005e00000000000000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00004d00000000000000,HORIPAD3 A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000250900000017000000000000,HRAP2 on PS/SS/N64 Joypad to USB BOX,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,", "030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows,", "03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000830500006020000000000000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Windows,", "03000000b50700001403000000000000,IMPACT BLACK,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "030000006f0e00002401000000000000,INJUSTICE FightStick for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", "030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,", "030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700005082000000000000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008433000000000000,Mad Catz FightStick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008483000000000000,Mad Catz FightStick TE S+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b6,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008134000000000000,Mad Catz FightStick TE2+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008184000000000000,Mad Catz FightStick TE2+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008532000000000000,Madcatz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700003888000000000000,Madcatz Arcade Fightstick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700001888000000000000,MadCatz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000008305000031b0000000000000,MaxfireBlaze3,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows,", "03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,back:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b4,leftstick:b0,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00001030000000000000,Mayflash USB Adapter for original Sega Saturn controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows,", "0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,", "03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Windows,", "03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,", "030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,leftx:h0.6,lefty:h0.12,rightshoulder:b5,rightstick:a2,righttrigger:b7,rightx:h0.9,righty:h0.4,start:b9,x:b2,y:b3,platform:Windows,", "03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,", "03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", "03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00007530000000000000,PS (R) Gamepad,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", "03000000100800000100000000000000,PS1 USB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", "03000000100800000300000000000000,PS2 USB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", "03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,", "030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,", "03000000250900000500000000000000,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,", "03000000100000008200000000000000,PS360+ v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00000011000000000000,QanBa Arcade JoyStick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows,", "03000000300f00001611000000000000,QanBa Arcade JoyStick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,", "03000000222c00000020000000000000,QANBA DRONE ARCADE JOYSTICK,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00001210000000000000,QanBa Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,", "03000000341a00000104000000000000,QanBa Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows,", "03000000222c00000223000000000000,Qanba Obsidian Arcade Joystick PS3 Mode,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000222c00000023000000000000,Qanba Obsidian Arcade Joystick PS4 Mode,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", "030000000d0f00001100000000000000,REAL ARCADE PRO.3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00007000000000000000,REAL ARCADE PRO.4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00002200000000000000,REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005b00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000790000001100000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,", "0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,", "0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,", "030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000006f0e00001e01000000000000,Rock Candy Gamepad for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000004f04000003d0000000000000,run'n'drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,x:b0,y:b1,platform:Windows,", "03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,", "03000000300f00001101000000000000,saitek rumble pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,", "030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,", "03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,", "030000008f0e00000800000000000000,SpeedLink Strike FX Wireless,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,platform:Windows,", "03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "030000004f04000015b3000000000000,Thrustmaster Dual Analog 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,", "030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows,", "030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,", "03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", "03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", "03000000380700006652000000000000,UnKnown,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,", "03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", "03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,", "030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,", "03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000790000000600000000000000,G-Shark GP-702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", "030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X,", "03000000830500006020000000010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,", "03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,", "030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X,", "0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,", "03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,", "03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", "030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,", "030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,", "030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X,", "03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,", "030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", "030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000005e0400008e02000001000000,Steam Virtual GamePad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X,", "03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,", "03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,", "03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,", "03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,", "030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X,", "030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X,", "03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000bd12000015d0000000000000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,", "050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,", "050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,", "030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,", "030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", "030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,", "03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,", "03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", "05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", "05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,", "05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,", "030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,", "03000000666600006706000000010000,boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,", "03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,", "03000000a306000022f6000011010000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", "03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,", "03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,", "030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:a0,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:a3,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006f0e00001f01000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,", "030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", "030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,", "03000000c9110000f055000011010000,HJC Game GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000000d0f00000d00000000010000,hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftx:b4,lefty:b5,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,", "030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux,", "03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,", "050000006964726f69643a636f6e0000,idroid:con,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000b50700001503000010010000,impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,", "03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,", "030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,", "03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,", "03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d04000015c2000010010000,Logitech Logitech Extreme 3D,a:b0,b:b4,back:b6,guide:b8,leftshoulder:b9,leftstick:h0.8,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:h0.2,start:b7,x:b2,y:b5,platform:Linux,", "030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux,", "05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700005082000011010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700008034000011010000,Mad Catz fightstick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700008084000011010000,Mad Catz fightstick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700008433000011010000,Mad Catz FightStick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700008483000011010000,Mad Catz FightStick TE S+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller (SFIV),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", "03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", "030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000062230000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000d102000001010000,Microsoft X-Box One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", "030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", "05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", "030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Linux,", "050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,", "05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,", "03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", "05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,", "05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,", "03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", "030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,", "030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,", "030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000790000001100000010010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,", "0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", "0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", "030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", "03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,", "03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,", "03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,", "03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,", "03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", "03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,a:b12,b:b10,back:b4,dpdown:b2,dpleft:b3,dpright:b1,dpup:b0,leftshoulder:b9,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b8,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b5,x:b13,y:b11,platform:Linux,", "03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,", "030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,", "030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux,", "030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,", "03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,", "03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,", "05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000a102000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,", "0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", "03000000450c00002043000010010000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,", "03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,", "03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,", "61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", "4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", "37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", "35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,", "05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,", "5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,", "34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,", "4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS,", "4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS,", "05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,", "78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757402000000000000000000,XInput Wheel (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757403000000000000000000,XInput Arcade Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757404000000000000000000,XInput Flight Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", NULL }; kitty-0.15.0/glfw/memfd.h000066400000000000000000000021431356737523400151600ustar00rootroot00000000000000/* * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #ifdef HAS_MEMFD_CREATE #include #include static inline int memfd_create(const char *name, unsigned int flags) { return syscall(__NR_memfd_create, name, flags); } #ifndef F_LINUX_SPECIFIC_BASE #define F_LINUX_SPECIFIC_BASE 1024 #endif #ifndef F_ADD_SEALS #define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) #define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) #define F_SEAL_SEAL 0x0001 /* prevent further seals from being set */ #define F_SEAL_SHRINK 0x0002 /* prevent file from shrinking */ #define F_SEAL_GROW 0x0004 /* prevent file from growing */ #define F_SEAL_WRITE 0x0008 /* prevent writes */ #endif #ifndef MFD_CLOEXEC #define MFD_CLOEXEC 0x0001U #define MFD_ALLOW_SEALING 0x0002U #endif #else #include #include #include static inline int createTmpfileCloexec(char* tmpname) { int fd; fd = mkostemp(tmpname, O_CLOEXEC); if (fd >= 0) unlink(tmpname); return fd; } #endif kitty-0.15.0/glfw/monitor.c000066400000000000000000000347621356737523400155660ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include #include #include #include #include #include // Lexically compare video modes, used by qsort // static int compareVideoModes(const void* fp, const void* sp) { const GLFWvidmode* fm = fp; const GLFWvidmode* sm = sp; const int fbpp = fm->redBits + fm->greenBits + fm->blueBits; const int sbpp = sm->redBits + sm->greenBits + sm->blueBits; const int farea = fm->width * fm->height; const int sarea = sm->width * sm->height; // First sort on color bits per pixel if (fbpp != sbpp) return fbpp - sbpp; // Then sort on screen area if (farea != sarea) return farea - sarea; // Then sort on width if (fm->width != sm->width) return fm->width - sm->width; // Lastly sort on refresh rate return fm->refreshRate - sm->refreshRate; } // Retrieves the available modes for the specified monitor // static bool refreshVideoModes(_GLFWmonitor* monitor) { int modeCount; GLFWvidmode* modes; if (monitor->modes) return true; modes = _glfwPlatformGetVideoModes(monitor, &modeCount); if (!modes) return false; qsort(modes, modeCount, sizeof(modes[0]), compareVideoModes); free(monitor->modes); monitor->modes = modes; monitor->modeCount = modeCount; return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW event API ////// ////////////////////////////////////////////////////////////////////////// // Notifies shared code of a monitor connection or disconnection // void _glfwInputMonitor(_GLFWmonitor* monitor, int action, int placement) { if (action == GLFW_CONNECTED) { _glfw.monitorCount++; _glfw.monitors = realloc(_glfw.monitors, sizeof(_GLFWmonitor*) * _glfw.monitorCount); if (placement == _GLFW_INSERT_FIRST) { memmove(_glfw.monitors + 1, _glfw.monitors, ((size_t) _glfw.monitorCount - 1) * sizeof(_GLFWmonitor*)); _glfw.monitors[0] = monitor; } else _glfw.monitors[_glfw.monitorCount - 1] = monitor; } else if (action == GLFW_DISCONNECTED) { int i; _GLFWwindow* window; for (window = _glfw.windowListHead; window; window = window->next) { if (window->monitor == monitor) { int width, height, xoff, yoff; _glfwPlatformGetWindowSize(window, &width, &height); _glfwPlatformSetWindowMonitor(window, NULL, 0, 0, width, height, 0); _glfwPlatformGetWindowFrameSize(window, &xoff, &yoff, NULL, NULL); _glfwPlatformSetWindowPos(window, xoff, yoff); } } for (i = 0; i < _glfw.monitorCount; i++) { if (_glfw.monitors[i] == monitor) { remove_i_from_array(_glfw.monitors, i, _glfw.monitorCount); break; } } } if (_glfw.callbacks.monitor) _glfw.callbacks.monitor((GLFWmonitor*) monitor, action); if (action == GLFW_DISCONNECTED) _glfwFreeMonitor(monitor); } // Notifies shared code that a full screen window has acquired or released // a monitor // void _glfwInputMonitorWindow(_GLFWmonitor* monitor, _GLFWwindow* window) { monitor->window = window; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Allocates and returns a monitor object with the specified name and dimensions // _GLFWmonitor* _glfwAllocMonitor(const char* name, int widthMM, int heightMM) { _GLFWmonitor* monitor = calloc(1, sizeof(_GLFWmonitor)); monitor->widthMM = widthMM; monitor->heightMM = heightMM; if (name) monitor->name = _glfw_strdup(name); return monitor; } // Frees a monitor object and any data associated with it // void _glfwFreeMonitor(_GLFWmonitor* monitor) { if (monitor == NULL) return; _glfwPlatformFreeMonitor(monitor); _glfwFreeGammaArrays(&monitor->originalRamp); _glfwFreeGammaArrays(&monitor->currentRamp); free(monitor->modes); free(monitor->name); free(monitor); } // Allocates red, green and blue value arrays of the specified size // void _glfwAllocGammaArrays(GLFWgammaramp* ramp, unsigned int size) { ramp->red = calloc(size, sizeof(unsigned short)); ramp->green = calloc(size, sizeof(unsigned short)); ramp->blue = calloc(size, sizeof(unsigned short)); ramp->size = size; } // Frees the red, green and blue value arrays and clears the struct // void _glfwFreeGammaArrays(GLFWgammaramp* ramp) { free(ramp->red); free(ramp->green); free(ramp->blue); memset(ramp, 0, sizeof(GLFWgammaramp)); } // Chooses the video mode most closely matching the desired one // const GLFWvidmode* _glfwChooseVideoMode(_GLFWmonitor* monitor, const GLFWvidmode* desired) { int i; unsigned int sizeDiff, leastSizeDiff = UINT_MAX; unsigned int rateDiff, leastRateDiff = UINT_MAX; unsigned int colorDiff, leastColorDiff = UINT_MAX; const GLFWvidmode* current; const GLFWvidmode* closest = NULL; if (!refreshVideoModes(monitor)) return NULL; for (i = 0; i < monitor->modeCount; i++) { current = monitor->modes + i; colorDiff = 0; if (desired->redBits != GLFW_DONT_CARE) colorDiff += abs(current->redBits - desired->redBits); if (desired->greenBits != GLFW_DONT_CARE) colorDiff += abs(current->greenBits - desired->greenBits); if (desired->blueBits != GLFW_DONT_CARE) colorDiff += abs(current->blueBits - desired->blueBits); sizeDiff = abs((current->width - desired->width) * (current->width - desired->width) + (current->height - desired->height) * (current->height - desired->height)); if (desired->refreshRate != GLFW_DONT_CARE) rateDiff = abs(current->refreshRate - desired->refreshRate); else rateDiff = UINT_MAX - current->refreshRate; if ((colorDiff < leastColorDiff) || (colorDiff == leastColorDiff && sizeDiff < leastSizeDiff) || (colorDiff == leastColorDiff && sizeDiff == leastSizeDiff && rateDiff < leastRateDiff)) { closest = current; leastSizeDiff = sizeDiff; leastRateDiff = rateDiff; leastColorDiff = colorDiff; } } return closest; } // Performs lexical comparison between two @ref GLFWvidmode structures // int _glfwCompareVideoModes(const GLFWvidmode* fm, const GLFWvidmode* sm) { return compareVideoModes(fm, sm); } // Splits a color depth into red, green and blue bit depths // void _glfwSplitBPP(int bpp, int* red, int* green, int* blue) { int delta; // We assume that by 32 the user really meant 24 if (bpp == 32) bpp = 24; // Convert "bits per pixel" to red, green & blue sizes *red = *green = *blue = bpp / 3; delta = bpp - (*red * 3); if (delta >= 1) *green = *green + 1; if (delta == 2) *red = *red + 1; } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI GLFWmonitor** glfwGetMonitors(int* count) { assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); *count = _glfw.monitorCount; return (GLFWmonitor**) _glfw.monitors; } GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (!_glfw.monitorCount) return NULL; return (GLFWmonitor*) _glfw.monitors[0]; } GLFWAPI void glfwGetMonitorPos(GLFWmonitor* handle, int* xpos, int* ypos) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); if (xpos) *xpos = 0; if (ypos) *ypos = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetMonitorPos(monitor, xpos, ypos); } GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* handle, int* xpos, int* ypos, int* width, int* height) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); if (xpos) *xpos = 0; if (ypos) *ypos = 0; if (width) *width = 0; if (height) *height = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetMonitorWorkarea(monitor, xpos, ypos, width, height); } GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* handle, int* widthMM, int* heightMM) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); if (widthMM) *widthMM = 0; if (heightMM) *heightMM = 0; _GLFW_REQUIRE_INIT(); if (widthMM) *widthMM = monitor->widthMM; if (heightMM) *heightMM = monitor->heightMM; } GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* handle, float* xscale, float* yscale) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); if (xscale) *xscale = 0.f; if (yscale) *yscale = 0.f; _GLFW_REQUIRE_INIT(); _glfwPlatformGetMonitorContentScale(monitor, xscale, yscale); } GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return monitor->name; } GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* handle, void* pointer) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); _GLFW_REQUIRE_INIT(); monitor->userPointer = pointer; } GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return monitor->userPointer; } GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(_glfw.callbacks.monitor, cbfun); return cbfun; } GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* handle, int* count) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (!refreshVideoModes(monitor)) return NULL; *count = monitor->modeCount; return monitor->modes; } GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _glfwPlatformGetVideoMode(monitor, &monitor->currentMode); return &monitor->currentMode; } GLFWAPI void glfwSetGamma(GLFWmonitor* handle, float gamma) { unsigned int i; unsigned short* values; GLFWgammaramp ramp; const GLFWgammaramp* original; assert(handle != NULL); assert(gamma > 0.f); assert(gamma <= FLT_MAX); _GLFW_REQUIRE_INIT(); if (gamma != gamma || gamma <= 0.f || gamma > FLT_MAX) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid gamma value %f", gamma); return; } original = glfwGetGammaRamp(handle); if (!original) return; values = calloc(original->size, sizeof(unsigned short)); for (i = 0; i < original->size; i++) { float value; // Calculate intensity value = i / (float) (original->size - 1); // Apply gamma curve value = powf(value, 1.f / gamma) * 65535.f + 0.5f; // Clamp to value range value = fminf(value, 65535.f); values[i] = (unsigned short) value; } ramp.red = values; ramp.green = values; ramp.blue = values; ramp.size = original->size; glfwSetGammaRamp(handle, &ramp); free(values); } GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _glfwFreeGammaArrays(&monitor->currentRamp); if (!_glfwPlatformGetGammaRamp(monitor, &monitor->currentRamp)) return NULL; return &monitor->currentRamp; } GLFWAPI void glfwSetGammaRamp(GLFWmonitor* handle, const GLFWgammaramp* ramp) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; assert(monitor != NULL); assert(ramp != NULL); assert(ramp->size > 0); assert(ramp->red != NULL); assert(ramp->green != NULL); assert(ramp->blue != NULL); if (ramp->size <= 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid gamma ramp size %i", ramp->size); return; } _GLFW_REQUIRE_INIT(); if (!monitor->originalRamp.size) { if (!_glfwPlatformGetGammaRamp(monitor, &monitor->originalRamp)) return; } _glfwPlatformSetGammaRamp(monitor, ramp); } kitty-0.15.0/glfw/nsgl_context.h000066400000000000000000000036701356737523400166050ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define _GLFW_PLATFORM_CONTEXT_STATE _GLFWcontextNSGL nsgl; #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE _GLFWlibraryNSGL nsgl; // NSGL-specific per-context data // typedef struct _GLFWcontextNSGL { id pixelFormat; id object; } _GLFWcontextNSGL; // NSGL-specific global data // typedef struct _GLFWlibraryNSGL { // dlopen handle for OpenGL.framework (for glfwGetProcAddress) CFBundleRef framework; } _GLFWlibraryNSGL; bool _glfwInitNSGL(void); void _glfwTerminateNSGL(void); bool _glfwCreateContextNSGL(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig); void _glfwDestroyContextNSGL(_GLFWwindow* window); kitty-0.15.0/glfw/nsgl_context.m000066400000000000000000000246271356737523400166170ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 macOS - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2009-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" static void makeContextCurrentNSGL(_GLFWwindow* window) { if (window) [window->context.nsgl.object makeCurrentContext]; else [NSOpenGLContext clearCurrentContext]; _glfwPlatformSetTls(&_glfw.contextSlot, window); } static void swapBuffersNSGL(_GLFWwindow* window) { // ARP appears to be unnecessary, but this is future-proof [window->context.nsgl.object flushBuffer]; } static void swapIntervalNSGL(int interval UNUSED) { // As of Mojave this does not work so we use CVDisplayLink instead _glfwInputError(GLFW_API_UNAVAILABLE, "NSGL: Swap intervals do not work on macOS"); } static int extensionSupportedNSGL(const char* extension UNUSED) { // There are no NSGL extensions return false; } static GLFWglproc getProcAddressNSGL(const char* procname) { CFStringRef symbolName = CFStringCreateWithCString(kCFAllocatorDefault, procname, kCFStringEncodingASCII); GLFWglproc symbol; *(void **) &symbol = CFBundleGetFunctionPointerForName(_glfw.nsgl.framework, symbolName); CFRelease(symbolName); return symbol; } static void destroyContextNSGL(_GLFWwindow* window) { [window->context.nsgl.pixelFormat release]; window->context.nsgl.pixelFormat = nil; [window->context.nsgl.object release]; window->context.nsgl.object = nil; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialize OpenGL support // bool _glfwInitNSGL(void) { if (_glfw.nsgl.framework) return true; _glfw.nsgl.framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengl")); if (_glfw.nsgl.framework == NULL) { _glfwInputError(GLFW_API_UNAVAILABLE, "NSGL: Failed to locate OpenGL framework"); return false; } return true; } // Terminate OpenGL support // void _glfwTerminateNSGL(void) { } // Create the OpenGL context // bool _glfwCreateContextNSGL(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { if (ctxconfig->client == GLFW_OPENGL_ES_API) { _glfwInputError(GLFW_API_UNAVAILABLE, "NSGL: OpenGL ES is not available on macOS"); return false; } if (ctxconfig->major > 2) { if (ctxconfig->major == 3 && ctxconfig->minor < 2) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "NSGL: The targeted version of macOS does not support OpenGL 3.0 or 3.1 but may support 3.2 and above"); return false; } } // Context robustness modes (GL_KHR_robustness) are not yet supported by // macOS but are not a hard constraint, so ignore and continue // Context release behaviors (GL_KHR_context_flush_control) are not yet // supported by macOS but are not a hard constraint, so ignore and continue // Debug contexts (GL_KHR_debug) are not yet supported by macOS but are not // a hard constraint, so ignore and continue // No-error contexts (GL_KHR_no_error) are not yet supported by macOS but // are not a hard constraint, so ignore and continue #define addAttrib(a) \ { \ assert((size_t) index < sizeof(attribs) / sizeof(attribs[0])); \ attribs[index++] = a; \ } #define setAttrib(a, v) { addAttrib(a); addAttrib(v); } NSOpenGLPixelFormatAttribute attribs[40]; int index = 0; addAttrib(NSOpenGLPFAAccelerated); addAttrib(NSOpenGLPFAClosestPolicy); if (ctxconfig->nsgl.offline) { addAttrib(NSOpenGLPFAAllowOfflineRenderers); // NOTE: This replaces the NSSupportsAutomaticGraphicsSwitching key in // Info.plist for unbundled applications // HACK: This assumes that NSOpenGLPixelFormat will remain // a straightforward wrapper of its CGL counterpart addAttrib(kCGLPFASupportsAutomaticGraphicsSwitching); } #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101000 if (ctxconfig->major >= 4) { setAttrib(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core); } else #endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/ if (ctxconfig->major >= 3) { setAttrib(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core); } if (ctxconfig->major <= 2) { if (fbconfig->auxBuffers != GLFW_DONT_CARE) setAttrib(NSOpenGLPFAAuxBuffers, fbconfig->auxBuffers); if (fbconfig->accumRedBits != GLFW_DONT_CARE && fbconfig->accumGreenBits != GLFW_DONT_CARE && fbconfig->accumBlueBits != GLFW_DONT_CARE && fbconfig->accumAlphaBits != GLFW_DONT_CARE) { const int accumBits = fbconfig->accumRedBits + fbconfig->accumGreenBits + fbconfig->accumBlueBits + fbconfig->accumAlphaBits; setAttrib(NSOpenGLPFAAccumSize, accumBits); } } if (fbconfig->redBits != GLFW_DONT_CARE && fbconfig->greenBits != GLFW_DONT_CARE && fbconfig->blueBits != GLFW_DONT_CARE) { int colorBits = fbconfig->redBits + fbconfig->greenBits + fbconfig->blueBits; // macOS needs non-zero color size, so set reasonable values if (colorBits == 0) colorBits = 24; else if (colorBits < 15) colorBits = 15; setAttrib(NSOpenGLPFAColorSize, colorBits); } if (fbconfig->alphaBits != GLFW_DONT_CARE) setAttrib(NSOpenGLPFAAlphaSize, fbconfig->alphaBits); if (fbconfig->depthBits != GLFW_DONT_CARE) setAttrib(NSOpenGLPFADepthSize, fbconfig->depthBits); if (fbconfig->stencilBits != GLFW_DONT_CARE) setAttrib(NSOpenGLPFAStencilSize, fbconfig->stencilBits); if (fbconfig->stereo) { #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "NSGL: Stereo rendering is deprecated"); return false; #else addAttrib(NSOpenGLPFAStereo); #endif } if (fbconfig->doublebuffer) addAttrib(NSOpenGLPFADoubleBuffer); if (fbconfig->samples != GLFW_DONT_CARE) { if (fbconfig->samples == 0) { setAttrib(NSOpenGLPFASampleBuffers, 0); } else { setAttrib(NSOpenGLPFASampleBuffers, 1); setAttrib(NSOpenGLPFASamples, fbconfig->samples); } } // NOTE: All NSOpenGLPixelFormats on the relevant cards support sRGB // framebuffer, so there's no need (and no way) to request it addAttrib(0); #undef addAttrib #undef setAttrib window->context.nsgl.pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs]; if (window->context.nsgl.pixelFormat == nil) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "NSGL: Failed to find a suitable pixel format"); return false; } NSOpenGLContext* share = nil; if (ctxconfig->share) share = ctxconfig->share->context.nsgl.object; window->context.nsgl.object = [[NSOpenGLContext alloc] initWithFormat:window->context.nsgl.pixelFormat shareContext:share]; if (window->context.nsgl.object == nil) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "NSGL: Failed to create OpenGL context"); return false; } if (fbconfig->transparent) { GLint opaque = 0; [window->context.nsgl.object setValues:&opaque forParameter:NSOpenGLContextParameterSurfaceOpacity]; } if (window->ns.retina) [window->ns.view setWantsBestResolutionOpenGLSurface:YES]; GLint interval = 0; [window->context.nsgl.object setValues:&interval forParameter:NSOpenGLContextParameterSwapInterval]; [window->context.nsgl.object setView:window->ns.view]; window->context.makeCurrent = makeContextCurrentNSGL; window->context.swapBuffers = swapBuffersNSGL; window->context.swapInterval = swapIntervalNSGL; window->context.extensionSupported = extensionSupportedNSGL; window->context.getProcAddress = getProcAddressNSGL; window->context.destroy = destroyContextNSGL; return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI id glfwGetNSGLContext(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(nil); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return nil; } return window->context.nsgl.object; } kitty-0.15.0/glfw/null_init.c000066400000000000000000000035221356737523400160620ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformInit(void) { _glfwInitTimerPOSIX(); return true; } void _glfwPlatformTerminate(void) { _glfwTerminateOSMesa(); } const char* _glfwPlatformGetVersionString(void) { return _GLFW_VERSION_NUMBER " null OSMesa"; } kitty-0.15.0/glfw/null_joystick.c000066400000000000000000000033271356737523400167610ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformPollJoystick(_GLFWjoystick* js UNUSED, int mode UNUSED) { return false; } void _glfwPlatformUpdateGamepadGUID(char* guid UNUSED) { } kitty-0.15.0/glfw/null_joystick.h000066400000000000000000000025061356737523400167640ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define _GLFW_PLATFORM_JOYSTICK_STATE int nulljs #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE int nulljs; #define _GLFW_PLATFORM_MAPPING_NAME "" kitty-0.15.0/glfw/null_monitor.c000066400000000000000000000051421356737523400166060ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor UNUSED) { } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor UNUSED, int* xpos UNUSED, int* ypos UNUSED) { } void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor UNUSED, float* xscale, float* yscale) { if (xscale) *xscale = 1.f; if (yscale) *yscale = 1.f; } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor UNUSED, int* xpos UNUSED, int* ypos UNUSED, int* width UNUSED, int* height UNUSED) { } GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor UNUSED, int* found UNUSED) { return NULL; } void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor UNUSED, GLFWvidmode* mode UNUSED) { } bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor UNUSED, GLFWgammaramp* ramp UNUSED) { return false; } void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor UNUSED, const GLFWgammaramp* ramp UNUSED) { } kitty-0.15.0/glfw/null_platform.h000066400000000000000000000042211356737523400167450ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNull null #define _GLFW_PLATFORM_CONTEXT_STATE #define _GLFW_PLATFORM_MONITOR_STATE #define _GLFW_PLATFORM_CURSOR_STATE #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE #define _GLFW_EGL_CONTEXT_STATE #define _GLFW_EGL_LIBRARY_CONTEXT_STATE #include "osmesa_context.h" #include "posix_time.h" #include "posix_thread.h" #include "null_joystick.h" #if defined(_GLFW_WIN32) #define _glfw_dlopen(name) LoadLibraryA(name) #define _glfw_dlclose(handle) FreeLibrary((HMODULE) handle) #define _glfw_dlsym(handle, name) GetProcAddress((HMODULE) handle, name) #else #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL) #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) #endif // Null-specific per-window data // typedef struct _GLFWwindowNull { int width; int height; } _GLFWwindowNull; kitty-0.15.0/glfw/null_window.c000066400000000000000000000207771356737523400164410ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include "../kitty/monotonic.h" static int createNativeWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig) { window->null.width = wndconfig->width; window->null.height = wndconfig->height; return true; } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { if (!createNativeWindow(window, wndconfig)) return false; if (ctxconfig->client != GLFW_NO_API) { if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API || ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { if (!_glfwInitOSMesa()) return false; if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return false; } else { _glfwInputError(GLFW_API_UNAVAILABLE, "Null: EGL not available"); return false; } } return true; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (window->context.destroy) window->context.destroy(window); } void _glfwPlatformSetWindowTitle(_GLFWwindow* window UNUSED, const char* title UNUSED) { } void _glfwPlatformSetWindowIcon(_GLFWwindow* window UNUSED, int count UNUSED, const GLFWimage* images UNUSED) { } void _glfwPlatformSetWindowMonitor(_GLFWwindow* window UNUSED, _GLFWmonitor* monitor UNUSED, int xpos UNUSED, int ypos UNUSED, int width UNUSED, int height UNUSED, int refreshRate UNUSED) { } void _glfwPlatformGetWindowPos(_GLFWwindow* window UNUSED, int* xpos UNUSED, int* ypos UNUSED) { } void _glfwPlatformSetWindowPos(_GLFWwindow* window UNUSED, int xpos UNUSED, int ypos UNUSED) { } void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) { if (width) *width = window->null.width; if (height) *height = window->null.height; } void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { window->null.width = width; window->null.height = height; } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window UNUSED, int minwidth UNUSED, int minheight UNUSED, int maxwidth UNUSED, int maxheight UNUSED) { } void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window UNUSED, int n UNUSED, int d UNUSED) { } void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { if (width) *width = window->null.width; if (height) *height = window->null.height; } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window UNUSED, int* left UNUSED, int* top UNUSED, int* right UNUSED, int* bottom UNUSED) { } void _glfwPlatformGetWindowContentScale(_GLFWwindow* window UNUSED, float* xscale, float* yscale) { if (xscale) *xscale = 1.f; if (yscale) *yscale = 1.f; } monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window UNUSED) { return ms_to_monotonic_t(500ll); } void _glfwPlatformIconifyWindow(_GLFWwindow* window UNUSED) { } void _glfwPlatformRestoreWindow(_GLFWwindow* window UNUSED) { } void _glfwPlatformMaximizeWindow(_GLFWwindow* window UNUSED) { } int _glfwPlatformWindowMaximized(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowHovered(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformFramebufferTransparent(_GLFWwindow* window UNUSED) { return false; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window UNUSED, bool enabled UNUSED) { } void _glfwPlatformSetWindowDecorated(_GLFWwindow* window UNUSED, bool enabled UNUSED) { } void _glfwPlatformSetWindowFloating(_GLFWwindow* window UNUSED, bool enabled UNUSED) { } float _glfwPlatformGetWindowOpacity(_GLFWwindow* window UNUSED) { return 1.f; } void _glfwPlatformSetWindowOpacity(_GLFWwindow* window UNUSED, float opacity UNUSED) { } void _glfwPlatformShowWindow(_GLFWwindow* window UNUSED) { } void _glfwPlatformRequestWindowAttention(_GLFWwindow* window UNUSED) { } int _glfwPlatformWindowBell(_GLFWwindow* window UNUSED) { return false; } void _glfwPlatformUnhideWindow(_GLFWwindow* window UNUSED) { } void _glfwPlatformHideWindow(_GLFWwindow* window UNUSED) { } void _glfwPlatformFocusWindow(_GLFWwindow* window UNUSED) { } int _glfwPlatformWindowFocused(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowOccluded(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowIconified(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowVisible(_GLFWwindow* window UNUSED) { return false; } void _glfwPlatformPollEvents(void) { } void _glfwPlatformWaitEvents(void) { } void _glfwPlatformWaitEventsTimeout(monotonic_t timeout UNUSED) { } void _glfwPlatformPostEmptyEvent(void) { } void _glfwPlatformGetCursorPos(_GLFWwindow* window UNUSED, double* xpos UNUSED, double* ypos UNUSED) { } void _glfwPlatformSetCursorPos(_GLFWwindow* window UNUSED, double x UNUSED, double y UNUSED) { } void _glfwPlatformSetCursorMode(_GLFWwindow* window UNUSED, int mode UNUSED) { } int _glfwPlatformCreateCursor(_GLFWcursor* cursor UNUSED, const GLFWimage* image UNUSED, int xhot UNUSED, int yhot UNUSED, int count UNUSED) { return true; } int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor UNUSED, int shape UNUSED) { return true; } void _glfwPlatformDestroyCursor(_GLFWcursor* cursor UNUSED) { } void _glfwPlatformSetCursor(_GLFWwindow* window UNUSED, _GLFWcursor* cursor UNUSED) { } void _glfwPlatformSetClipboardString(const char* string UNUSED) { } const char* _glfwPlatformGetClipboardString(void) { return NULL; } const char* _glfwPlatformGetNativeKeyName(int native_key UNUSED) { return ""; } int _glfwPlatformGetNativeKeyForKey(int key UNUSED) { return -1; } void _glfwPlatformGetRequiredInstanceExtensions(char** extensions UNUSED) { } int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance UNUSED, VkPhysicalDevice device UNUSED, uint32_t queuefamily UNUSED) { return false; } VkResult _glfwPlatformCreateWindowSurface(VkInstance instance UNUSED, _GLFWwindow* window UNUSED, const VkAllocationCallbacks* allocator UNUSED, VkSurfaceKHR* surface UNUSED) { // This seems like the most appropriate error to return here return VK_ERROR_INITIALIZATION_FAILED; } kitty-0.15.0/glfw/osmesa_context.c000066400000000000000000000256651356737523400171340ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 OSMesa - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include #include #include #include "internal.h" static void makeContextCurrentOSMesa(_GLFWwindow* window) { if (window) { int width, height; _glfwPlatformGetFramebufferSize(window, &width, &height); // Check to see if we need to allocate a new buffer if ((window->context.osmesa.buffer == NULL) || (width != window->context.osmesa.width) || (height != window->context.osmesa.height)) { free(window->context.osmesa.buffer); // Allocate the new buffer (width * height * 8-bit RGBA) window->context.osmesa.buffer = calloc(4, (size_t) width * height); window->context.osmesa.width = width; window->context.osmesa.height = height; } if (!OSMesaMakeCurrent(window->context.osmesa.handle, window->context.osmesa.buffer, GL_UNSIGNED_BYTE, width, height)) { _glfwInputError(GLFW_PLATFORM_ERROR, "OSMesa: Failed to make context current"); return; } } _glfwPlatformSetTls(&_glfw.contextSlot, window); } static GLFWglproc getProcAddressOSMesa(const char* procname) { return (GLFWglproc) OSMesaGetProcAddress(procname); } static void destroyContextOSMesa(_GLFWwindow* window) { if (window->context.osmesa.handle) { OSMesaDestroyContext(window->context.osmesa.handle); window->context.osmesa.handle = NULL; } if (window->context.osmesa.buffer) { free(window->context.osmesa.buffer); window->context.osmesa.width = 0; window->context.osmesa.height = 0; } } static void swapBuffersOSMesa(_GLFWwindow* window UNUSED) { // No double buffering on OSMesa } static void swapIntervalOSMesa(int interval UNUSED) { // No swap interval on OSMesa } static int extensionSupportedOSMesa(const char* extension UNUSED) { // OSMesa does not have extensions return false; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// bool _glfwInitOSMesa(void) { int i; const char* sonames[] = { #if defined(_GLFW_OSMESA_LIBRARY) _GLFW_OSMESA_LIBRARY, #elif defined(_WIN32) "libOSMesa.dll", "OSMesa.dll", #elif defined(__APPLE__) "libOSMesa.8.dylib", #elif defined(__CYGWIN__) "libOSMesa-8.so", #else "libOSMesa.so.8", "libOSMesa.so.6", #endif NULL }; if (_glfw.osmesa.handle) return true; for (i = 0; sonames[i]; i++) { _glfw.osmesa.handle = _glfw_dlopen(sonames[i]); if (_glfw.osmesa.handle) break; } if (!_glfw.osmesa.handle) { _glfwInputError(GLFW_API_UNAVAILABLE, "OSMesa: Library not found"); return false; } glfw_dlsym(_glfw.osmesa.CreateContextExt, _glfw.osmesa.handle, "OSMesaCreateContextExt"); glfw_dlsym(_glfw.osmesa.CreateContextAttribs, _glfw.osmesa.handle, "OSMesaCreateContextAttribs"); glfw_dlsym(_glfw.osmesa.DestroyContext, _glfw.osmesa.handle, "OSMesaDestroyContext"); glfw_dlsym(_glfw.osmesa.MakeCurrent, _glfw.osmesa.handle, "OSMesaMakeCurrent"); glfw_dlsym(_glfw.osmesa.GetColorBuffer, _glfw.osmesa.handle, "OSMesaGetColorBuffer"); glfw_dlsym(_glfw.osmesa.GetDepthBuffer, _glfw.osmesa.handle, "OSMesaGetDepthBuffer"); glfw_dlsym(_glfw.osmesa.GetProcAddress, _glfw.osmesa.handle, "OSMesaGetProcAddress"); if (!_glfw.osmesa.CreateContextExt || !_glfw.osmesa.DestroyContext || !_glfw.osmesa.MakeCurrent || !_glfw.osmesa.GetColorBuffer || !_glfw.osmesa.GetDepthBuffer || !_glfw.osmesa.GetProcAddress) { _glfwInputError(GLFW_PLATFORM_ERROR, "OSMesa: Failed to load required entry points"); _glfwTerminateOSMesa(); return false; } return true; } void _glfwTerminateOSMesa(void) { if (_glfw.osmesa.handle) { _glfw_dlclose(_glfw.osmesa.handle); _glfw.osmesa.handle = NULL; } } #define setAttrib(a, v) \ { \ assert(((size_t) index + 1) < sizeof(attribs) / sizeof(attribs[0])); \ attribs[index++] = a; \ attribs[index++] = v; \ } bool _glfwCreateContextOSMesa(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { OSMesaContext share = NULL; const int accumBits = fbconfig->accumRedBits + fbconfig->accumGreenBits + fbconfig->accumBlueBits + fbconfig->accumAlphaBits; if (ctxconfig->client == GLFW_OPENGL_ES_API) { _glfwInputError(GLFW_API_UNAVAILABLE, "OSMesa: OpenGL ES is not available on OSMesa"); return false; } if (ctxconfig->share) share = ctxconfig->share->context.osmesa.handle; if (OSMesaCreateContextAttribs) { int index = 0, attribs[40]; setAttrib(OSMESA_FORMAT, OSMESA_RGBA); setAttrib(OSMESA_DEPTH_BITS, fbconfig->depthBits); setAttrib(OSMESA_STENCIL_BITS, fbconfig->stencilBits); setAttrib(OSMESA_ACCUM_BITS, accumBits); if (ctxconfig->profile == GLFW_OPENGL_CORE_PROFILE) { setAttrib(OSMESA_PROFILE, OSMESA_CORE_PROFILE); } else if (ctxconfig->profile == GLFW_OPENGL_COMPAT_PROFILE) { setAttrib(OSMESA_PROFILE, OSMESA_COMPAT_PROFILE); } if (ctxconfig->major != 1 || ctxconfig->minor != 0) { setAttrib(OSMESA_CONTEXT_MAJOR_VERSION, ctxconfig->major); setAttrib(OSMESA_CONTEXT_MINOR_VERSION, ctxconfig->minor); } if (ctxconfig->forward) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "OSMesa: Forward-compatible contexts not supported"); return false; } setAttrib(0, 0); window->context.osmesa.handle = OSMesaCreateContextAttribs(attribs, share); } else { if (ctxconfig->profile) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "OSMesa: OpenGL profiles unavailable"); return false; } window->context.osmesa.handle = OSMesaCreateContextExt(OSMESA_RGBA, fbconfig->depthBits, fbconfig->stencilBits, accumBits, share); } if (window->context.osmesa.handle == NULL) { _glfwInputError(GLFW_VERSION_UNAVAILABLE, "OSMesa: Failed to create context"); return false; } window->context.makeCurrent = makeContextCurrentOSMesa; window->context.swapBuffers = swapBuffersOSMesa; window->context.swapInterval = swapIntervalOSMesa; window->context.extensionSupported = extensionSupportedOSMesa; window->context.getProcAddress = getProcAddressOSMesa; window->context.destroy = destroyContextOSMesa; return true; } #undef setAttrib ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* handle, int* width, int* height, int* format, void** buffer) { void* mesaBuffer; GLint mesaWidth, mesaHeight, mesaFormat; _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (!OSMesaGetColorBuffer(window->context.osmesa.handle, &mesaWidth, &mesaHeight, &mesaFormat, &mesaBuffer)) { _glfwInputError(GLFW_PLATFORM_ERROR, "OSMesa: Failed to retrieve color buffer"); return false; } if (width) *width = mesaWidth; if (height) *height = mesaHeight; if (format) *format = mesaFormat; if (buffer) *buffer = mesaBuffer; return true; } GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* handle, int* width, int* height, int* bytesPerValue, void** buffer) { void* mesaBuffer; GLint mesaWidth, mesaHeight, mesaBytes; _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (!OSMesaGetDepthBuffer(window->context.osmesa.handle, &mesaWidth, &mesaHeight, &mesaBytes, &mesaBuffer)) { _glfwInputError(GLFW_PLATFORM_ERROR, "OSMesa: Failed to retrieve depth buffer"); return false; } if (width) *width = mesaWidth; if (height) *height = mesaHeight; if (bytesPerValue) *bytesPerValue = mesaBytes; if (buffer) *buffer = mesaBuffer; return true; } GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return NULL; } return window->context.osmesa.handle; } kitty-0.15.0/glfw/osmesa_context.h000066400000000000000000000072601356737523400171300ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 OSMesa - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2016 Google Inc. // Copyright (c) 2016-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define OSMESA_RGBA 0x1908 #define OSMESA_FORMAT 0x22 #define OSMESA_DEPTH_BITS 0x30 #define OSMESA_STENCIL_BITS 0x31 #define OSMESA_ACCUM_BITS 0x32 #define OSMESA_PROFILE 0x33 #define OSMESA_CORE_PROFILE 0x34 #define OSMESA_COMPAT_PROFILE 0x35 #define OSMESA_CONTEXT_MAJOR_VERSION 0x36 #define OSMESA_CONTEXT_MINOR_VERSION 0x37 typedef void* OSMesaContext; typedef void (*OSMESAproc)(void); typedef OSMesaContext (GLAPIENTRY * PFN_OSMesaCreateContextExt)(GLenum,GLint,GLint,GLint,OSMesaContext); typedef OSMesaContext (GLAPIENTRY * PFN_OSMesaCreateContextAttribs)(const int*,OSMesaContext); typedef void (GLAPIENTRY * PFN_OSMesaDestroyContext)(OSMesaContext); typedef int (GLAPIENTRY * PFN_OSMesaMakeCurrent)(OSMesaContext,void*,int,int,int); typedef int (GLAPIENTRY * PFN_OSMesaGetColorBuffer)(OSMesaContext,int*,int*,int*,void**); typedef int (GLAPIENTRY * PFN_OSMesaGetDepthBuffer)(OSMesaContext,int*,int*,int*,void**); typedef GLFWglproc (GLAPIENTRY * PFN_OSMesaGetProcAddress)(const char*); #define OSMesaCreateContextExt _glfw.osmesa.CreateContextExt #define OSMesaCreateContextAttribs _glfw.osmesa.CreateContextAttribs #define OSMesaDestroyContext _glfw.osmesa.DestroyContext #define OSMesaMakeCurrent _glfw.osmesa.MakeCurrent #define OSMesaGetColorBuffer _glfw.osmesa.GetColorBuffer #define OSMesaGetDepthBuffer _glfw.osmesa.GetDepthBuffer #define OSMesaGetProcAddress _glfw.osmesa.GetProcAddress #define _GLFW_OSMESA_CONTEXT_STATE _GLFWcontextOSMesa osmesa #define _GLFW_OSMESA_LIBRARY_CONTEXT_STATE _GLFWlibraryOSMesa osmesa // OSMesa-specific per-context data // typedef struct _GLFWcontextOSMesa { OSMesaContext handle; int width; int height; void* buffer; } _GLFWcontextOSMesa; // OSMesa-specific global data // typedef struct _GLFWlibraryOSMesa { void* handle; PFN_OSMesaCreateContextExt CreateContextExt; PFN_OSMesaCreateContextAttribs CreateContextAttribs; PFN_OSMesaDestroyContext DestroyContext; PFN_OSMesaMakeCurrent MakeCurrent; PFN_OSMesaGetColorBuffer GetColorBuffer; PFN_OSMesaGetDepthBuffer GetDepthBuffer; PFN_OSMesaGetProcAddress GetProcAddress; } _GLFWlibraryOSMesa; bool _glfwInitOSMesa(void); void _glfwTerminateOSMesa(void); bool _glfwCreateContextOSMesa(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig); kitty-0.15.0/glfw/posix_thread.c000066400000000000000000000062731356737523400165640ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 POSIX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// bool _glfwPlatformCreateTls(_GLFWtls* tls) { assert(tls->posix.allocated == false); if (pthread_key_create(&tls->posix.key, NULL) != 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "POSIX: Failed to create context TLS"); return false; } tls->posix.allocated = true; return true; } void _glfwPlatformDestroyTls(_GLFWtls* tls) { if (tls->posix.allocated) pthread_key_delete(tls->posix.key); memset(tls, 0, sizeof(_GLFWtls)); } void* _glfwPlatformGetTls(_GLFWtls* tls) { assert(tls->posix.allocated == true); return pthread_getspecific(tls->posix.key); } void _glfwPlatformSetTls(_GLFWtls* tls, void* value) { assert(tls->posix.allocated == true); pthread_setspecific(tls->posix.key, value); } bool _glfwPlatformCreateMutex(_GLFWmutex* mutex) { assert(mutex->posix.allocated == false); if (pthread_mutex_init(&mutex->posix.handle, NULL) != 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "POSIX: Failed to create mutex"); return false; } return mutex->posix.allocated = true; } void _glfwPlatformDestroyMutex(_GLFWmutex* mutex) { if (mutex->posix.allocated) pthread_mutex_destroy(&mutex->posix.handle); memset(mutex, 0, sizeof(_GLFWmutex)); } void _glfwPlatformLockMutex(_GLFWmutex* mutex) { assert(mutex->posix.allocated == true); pthread_mutex_lock(&mutex->posix.handle); } void _glfwPlatformUnlockMutex(_GLFWmutex* mutex) { assert(mutex->posix.allocated == true); pthread_mutex_unlock(&mutex->posix.handle); } kitty-0.15.0/glfw/posix_thread.h000066400000000000000000000032221356737523400165600ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 POSIX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #define _GLFW_PLATFORM_TLS_STATE _GLFWtlsPOSIX posix #define _GLFW_PLATFORM_MUTEX_STATE _GLFWmutexPOSIX posix // POSIX-specific thread local storage data // typedef struct _GLFWtlsPOSIX { bool allocated; pthread_key_t key; } _GLFWtlsPOSIX; // POSIX-specific mutex data // typedef struct _GLFWmutexPOSIX { bool allocated; pthread_mutex_t handle; } _GLFWmutexPOSIX; kitty-0.15.0/glfw/posix_time.c000066400000000000000000000054351356737523400162520ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 POSIX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Initialise timer // void _glfwInitTimerPOSIX(void) { #if defined(CLOCK_MONOTONIC) struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) { _glfw.timer.posix.monotonic = true; _glfw.timer.posix.frequency = 1000000000; } else #endif { _glfw.timer.posix.monotonic = false; _glfw.timer.posix.frequency = 1000000; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// uint64_t _glfwPlatformGetTimerValue(void) { #if defined(CLOCK_MONOTONIC) if (_glfw.timer.posix.monotonic) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec; } else #endif { struct timeval tv; gettimeofday(&tv, NULL); return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec; } } uint64_t _glfwPlatformGetTimerFrequency(void) { return _glfw.timer.posix.frequency; } kitty-0.15.0/glfw/posix_time.h000066400000000000000000000027511356737523400162550ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 POSIX - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2017 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerPOSIX posix #include // POSIX-specific global timer data // typedef struct _GLFWtimerPOSIX { bool monotonic; uint64_t frequency; } _GLFWtimerPOSIX; void _glfwInitTimerPOSIX(void); kitty-0.15.0/glfw/source-info.json000066400000000000000000000063421356737523400170500ustar00rootroot00000000000000{ "cocoa": { "headers": [ "cocoa_platform.h", "cocoa_joystick.h", "posix_thread.h", "nsgl_context.h", "egl_context.h", "osmesa_context.h" ], "sources": [ "cocoa_init.m", "cocoa_joystick.m", "cocoa_monitor.m", "cocoa_window.m", "cocoa_time.c", "posix_thread.c", "nsgl_context.m", "egl_context.c", "osmesa_context.c" ] }, "common": { "headers": [ "internal.h", "mappings.h" ], "sources": [ "context.c", "init.c", "input.c", "monitor.c", "vulkan.c", "window.c" ] }, "osmesa": { "headers": [ "null_platform.h", "null_joystick.h", "posix_time.h", "posix_thread.h", "osmesa_context.h" ], "sources": [ "null_init.c", "null_monitor.c", "null_window.c", "null_joystick.c", "posix_time.c", "posix_thread.c", "osmesa_context.c" ] }, "wayland": { "headers": [ "wl_platform.h", "posix_time.h", "posix_thread.h", "xkb_glfw.h", "dbus_glfw.h", "ibus_glfw.h", "backend_utils.h", "egl_context.h", "osmesa_context.h", "linux_joystick.h", "null_joystick.h", "linux_notify.h", "main_loop.h" ], "protocols": [ "stable/xdg-shell/xdg-shell.xml", "stable/viewporter/viewporter.xml", "unstable/relative-pointer/relative-pointer-unstable-v1.xml", "unstable/pointer-constraints/pointer-constraints-unstable-v1.xml", "unstable/idle-inhibit/idle-inhibit-unstable-v1.xml", "unstable/xdg-decoration/xdg-decoration-unstable-v1.xml", "unstable/primary-selection/primary-selection-unstable-v1.xml" ], "sources": [ "wl_init.c", "wl_monitor.c", "wl_window.c", "posix_time.c", "posix_thread.c", "xkb_glfw.c", "dbus_glfw.c", "ibus_glfw.c", "egl_context.c", "osmesa_context.c", "backend_utils.c", "linux_joystick.c", "null_joystick.c", "linux_notify.c" ] }, "wayland_protocols": [ 1, 17 ], "win32": { "headers": [ "win32_platform.h", "win32_joystick.h", "wgl_context.h", "egl_context.h", "osmesa_context.h" ], "sources": [ "win32_init.c", "win32_joystick.c", "win32_monitor.c", "win32_time.c", "win32_thread.c", "win32_window.c", "wgl_context.c", "egl_context.c", "osmesa_context.c" ] }, "x11": { "headers": [ "x11_platform.h", "xkb_glfw.h", "dbus_glfw.h", "ibus_glfw.h", "backend_utils.h", "posix_time.h", "posix_thread.h", "glx_context.h", "egl_context.h", "osmesa_context.h", "linux_joystick.h", "null_joystick.h", "linux_notify.h", "main_loop.h" ], "sources": [ "x11_init.c", "x11_monitor.c", "x11_window.c", "xkb_glfw.c", "dbus_glfw.c", "ibus_glfw.c", "posix_time.c", "posix_thread.c", "glx_context.c", "egl_context.c", "osmesa_context.c", "backend_utils.c", "linux_joystick.c", "null_joystick.c", "linux_notify.c" ] } } kitty-0.15.0/glfw/vulkan.c000066400000000000000000000262451356737523400153740ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2018 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include #include #include #define _GLFW_FIND_LOADER 1 #define _GLFW_REQUIRE_LOADER 2 ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// bool _glfwInitVulkan(int mode) { VkResult err; VkExtensionProperties* ep; uint32_t i, count; if (_glfw.vk.available) return true; #if !defined(_GLFW_VULKAN_STATIC) #if defined(_GLFW_VULKAN_LIBRARY) _glfw.vk.handle = _glfw_dlopen(_GLFW_VULKAN_LIBRARY); #elif defined(_GLFW_WIN32) _glfw.vk.handle = _glfw_dlopen("vulkan-1.dll"); #elif defined(_GLFW_COCOA) _glfw.vk.handle = _glfw_dlopen("libvulkan.1.dylib"); #else _glfw.vk.handle = _glfw_dlopen("libvulkan.so.1"); #endif if (!_glfw.vk.handle) { if (mode == _GLFW_REQUIRE_LOADER) _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Loader not found"); return false; } *(void **) &_glfw.vk.GetInstanceProcAddr = _glfw_dlsym(_glfw.vk.handle, "vkGetInstanceProcAddr"); if (!_glfw.vk.GetInstanceProcAddr) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Loader does not export vkGetInstanceProcAddr"); _glfwTerminateVulkan(); return false; } _glfw.vk.EnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties) vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); if (!_glfw.vk.EnumerateInstanceExtensionProperties) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Failed to retrieve vkEnumerateInstanceExtensionProperties"); _glfwTerminateVulkan(); return false; } #endif // _GLFW_VULKAN_STATIC err = vkEnumerateInstanceExtensionProperties(NULL, &count, NULL); if (err) { // NOTE: This happens on systems with a loader but without any Vulkan ICD if (mode == _GLFW_REQUIRE_LOADER) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Failed to query instance extension count: %s", _glfwGetVulkanResultString(err)); } _glfwTerminateVulkan(); return false; } ep = calloc(count, sizeof(VkExtensionProperties)); err = vkEnumerateInstanceExtensionProperties(NULL, &count, ep); if (err) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Failed to query instance extensions: %s", _glfwGetVulkanResultString(err)); free(ep); _glfwTerminateVulkan(); return false; } for (i = 0; i < count; i++) { if (strcmp(ep[i].extensionName, "VK_KHR_surface") == 0) _glfw.vk.KHR_surface = true; #if defined(_GLFW_WIN32) else if (strcmp(ep[i].extensionName, "VK_KHR_win32_surface") == 0) _glfw.vk.KHR_win32_surface = true; #elif defined(_GLFW_COCOA) else if (strcmp(ep[i].extensionName, "VK_MVK_macos_surface") == 0) _glfw.vk.MVK_macos_surface = true; #elif defined(_GLFW_X11) else if (strcmp(ep[i].extensionName, "VK_KHR_xlib_surface") == 0) _glfw.vk.KHR_xlib_surface = true; else if (strcmp(ep[i].extensionName, "VK_KHR_xcb_surface") == 0) _glfw.vk.KHR_xcb_surface = true; #elif defined(_GLFW_WAYLAND) else if (strcmp(ep[i].extensionName, "VK_KHR_wayland_surface") == 0) _glfw.vk.KHR_wayland_surface = true; #endif } free(ep); _glfw.vk.available = true; _glfwPlatformGetRequiredInstanceExtensions(_glfw.vk.extensions); return true; } void _glfwTerminateVulkan(void) { #if !defined(_GLFW_VULKAN_STATIC) if (_glfw.vk.handle) _glfw_dlclose(_glfw.vk.handle); #endif } const char* _glfwGetVulkanResultString(VkResult result) { switch (result) { case VK_SUCCESS: return "Success"; case VK_NOT_READY: return "A fence or query has not yet completed"; case VK_TIMEOUT: return "A wait operation has not completed in the specified time"; case VK_EVENT_SET: return "An event is signaled"; case VK_EVENT_RESET: return "An event is unsignaled"; case VK_INCOMPLETE: return "A return array was too small for the result"; case VK_ERROR_OUT_OF_HOST_MEMORY: return "A host memory allocation has failed"; case VK_ERROR_OUT_OF_DEVICE_MEMORY: return "A device memory allocation has failed"; case VK_ERROR_INITIALIZATION_FAILED: return "Initialization of an object could not be completed for implementation-specific reasons"; case VK_ERROR_DEVICE_LOST: return "The logical or physical device has been lost"; case VK_ERROR_MEMORY_MAP_FAILED: return "Mapping of a memory object has failed"; case VK_ERROR_LAYER_NOT_PRESENT: return "A requested layer is not present or could not be loaded"; case VK_ERROR_EXTENSION_NOT_PRESENT: return "A requested extension is not supported"; case VK_ERROR_FEATURE_NOT_PRESENT: return "A requested feature is not supported"; case VK_ERROR_INCOMPATIBLE_DRIVER: return "The requested version of Vulkan is not supported by the driver or is otherwise incompatible"; case VK_ERROR_TOO_MANY_OBJECTS: return "Too many objects of the type have already been created"; case VK_ERROR_FORMAT_NOT_SUPPORTED: return "A requested format is not supported on this device"; case VK_ERROR_SURFACE_LOST_KHR: return "A surface is no longer available"; case VK_SUBOPTIMAL_KHR: return "A swapchain no longer matches the surface properties exactly, but can still be used"; case VK_ERROR_OUT_OF_DATE_KHR: return "A surface has changed in such a way that it is no longer compatible with the swapchain"; case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "The display used by a swapchain does not use the same presentable image layout"; case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "The requested window is already connected to a VkSurfaceKHR, or to some other non-Vulkan API"; case VK_ERROR_VALIDATION_FAILED_EXT: return "A validation layer found an error"; default: return "ERROR: UNKNOWN VULKAN ERROR"; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI int glfwVulkanSupported(void) { _GLFW_REQUIRE_INIT_OR_RETURN(false); return _glfwInitVulkan(_GLFW_FIND_LOADER); } GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count) { assert(count != NULL); *count = 0; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (!_glfwInitVulkan(_GLFW_REQUIRE_LOADER)) return NULL; if (!_glfw.vk.extensions[0]) return NULL; *count = 2; return (const char**) _glfw.vk.extensions; } GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname) { GLFWvkproc proc; assert(procname != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (!_glfwInitVulkan(_GLFW_REQUIRE_LOADER)) return NULL; proc = (GLFWvkproc) vkGetInstanceProcAddr(instance, procname); #if defined(_GLFW_VULKAN_STATIC) if (!proc) { if (strcmp(procname, "vkGetInstanceProcAddr") == 0) return (GLFWvkproc) vkGetInstanceProcAddr; } #else if (!proc) *(void **) &proc = _glfw_dlsym(_glfw.vk.handle, procname); #endif return proc; } GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily) { assert(instance != VK_NULL_HANDLE); assert(device != VK_NULL_HANDLE); _GLFW_REQUIRE_INIT_OR_RETURN(false); if (!_glfwInitVulkan(_GLFW_REQUIRE_LOADER)) return false; if (!_glfw.vk.extensions[0]) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Window surface creation extensions not found"); return false; } return _glfwPlatformGetPhysicalDevicePresentationSupport(instance, device, queuefamily); } GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* handle, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(instance != VK_NULL_HANDLE); assert(window != NULL); assert(surface != NULL); *surface = VK_NULL_HANDLE; _GLFW_REQUIRE_INIT_OR_RETURN(VK_ERROR_INITIALIZATION_FAILED); if (!_glfwInitVulkan(_GLFW_REQUIRE_LOADER)) return VK_ERROR_INITIALIZATION_FAILED; if (!_glfw.vk.extensions[0]) { _glfwInputError(GLFW_API_UNAVAILABLE, "Vulkan: Window surface creation extensions not found"); return VK_ERROR_EXTENSION_NOT_PRESENT; } if (window->context.client != GLFW_NO_API) { _glfwInputError(GLFW_INVALID_VALUE, "Vulkan: Window surface creation requires the window to have the client API set to GLFW_NO_API"); return VK_ERROR_NATIVE_WINDOW_IN_USE_KHR; } return _glfwPlatformCreateWindowSurface(instance, window, allocator, surface); } kitty-0.15.0/glfw/window.c000066400000000000000000001043441356737523400154000ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // Copyright (c) 2012 Torsten Walluhn // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // Please use C89 style variable declarations in this file because VS 2010 //======================================================================== #include "internal.h" #include "../kitty/monotonic.h" #include #include #include #include ////////////////////////////////////////////////////////////////////////// ////// GLFW event API ////// ////////////////////////////////////////////////////////////////////////// // Notifies shared code that a window has lost or received input focus // void _glfwInputWindowFocus(_GLFWwindow* window, bool focused) { if (window->callbacks.focus) window->callbacks.focus((GLFWwindow*) window, focused); if (!focused) { int key, button; _glfw.focusedWindowId = 0; for (key = 0; key <= GLFW_KEY_LAST; key++) { if (window->keys[key] == GLFW_PRESS) { const int native_key = _glfwPlatformGetNativeKeyForKey(key); GLFWkeyevent ev; _glfwInitializeKeyEvent(&ev, key, native_key, GLFW_RELEASE, 0); _glfwInputKeyboard(window, &ev); } } for (button = 0; button <= GLFW_MOUSE_BUTTON_LAST; button++) { if (window->mouseButtons[button] == GLFW_PRESS) _glfwInputMouseClick(window, button, GLFW_RELEASE, 0); } } else _glfw.focusedWindowId = window->id; } _GLFWwindow* _glfwFocusedWindow() { if (_glfw.focusedWindowId) { _GLFWwindow *w = _glfw.windowListHead; while (w) { if (w->id == _glfw.focusedWindowId) return w; w = w->next; } } return NULL; } _GLFWwindow* _glfwWindowForId(GLFWid id) { _GLFWwindow *w = _glfw.windowListHead; while (w) { if (w->id == id) return w; w = w->next; } return NULL; } // Notifies shared code that a window's occlusion state has changed // void _glfwInputWindowOcclusion(_GLFWwindow* window, bool occluded) { if (window->callbacks.occlusion) window->callbacks.occlusion((GLFWwindow*) window, occluded); } // Notifies shared code that a window has moved // The position is specified in content area relative screen coordinates // void _glfwInputWindowPos(_GLFWwindow* window, int x, int y) { if (window->callbacks.pos) window->callbacks.pos((GLFWwindow*) window, x, y); } // Notifies shared code that a window has been resized // The size is specified in screen coordinates // void _glfwInputWindowSize(_GLFWwindow* window, int width, int height) { if (window->callbacks.size) window->callbacks.size((GLFWwindow*) window, width, height); } // Notifies shared code that a window has been iconified or restored // void _glfwInputWindowIconify(_GLFWwindow* window, bool iconified) { if (window->callbacks.iconify) window->callbacks.iconify((GLFWwindow*) window, iconified); } // Notifies shared code that a window has been maximized or restored // void _glfwInputWindowMaximize(_GLFWwindow* window, bool maximized) { if (window->callbacks.maximize) window->callbacks.maximize((GLFWwindow*) window, maximized); } // Notifies shared code that a window framebuffer has been resized // The size is specified in pixels // void _glfwInputFramebufferSize(_GLFWwindow* window, int width, int height) { if (window->callbacks.fbsize) window->callbacks.fbsize((GLFWwindow*) window, width, height); } // Notifies shared code that a window live resize is in progress // void _glfwInputLiveResize(_GLFWwindow* window, bool started) { if (window && window->callbacks.liveResize) window->callbacks.liveResize((GLFWwindow*) window, started); } // Notifies shared code that a window content scale has changed // The scale is specified as the ratio between the current and default DPI // void _glfwInputWindowContentScale(_GLFWwindow* window, float xscale, float yscale) { if (window->callbacks.scale) window->callbacks.scale((GLFWwindow*) window, xscale, yscale); } // Notifies shared code that the window contents needs updating // void _glfwInputWindowDamage(_GLFWwindow* window) { if (window->callbacks.refresh) window->callbacks.refresh((GLFWwindow*) window); } // Notifies shared code that the user wishes to close a window // void _glfwInputWindowCloseRequest(_GLFWwindow* window) { window->shouldClose = true; if (window->callbacks.close) window->callbacks.close((GLFWwindow*) window); } // Notifies shared code that a window has changed its desired monitor // void _glfwInputWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor) { window->monitor = monitor; } ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share) { _GLFWfbconfig fbconfig; _GLFWctxconfig ctxconfig; _GLFWwndconfig wndconfig; _GLFWwindow* window; assert(title != NULL); assert(width >= 0); assert(height >= 0); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); if (width <= 0 || height <= 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window size %ix%i", width, height); return NULL; } fbconfig = _glfw.hints.framebuffer; ctxconfig = _glfw.hints.context; wndconfig = _glfw.hints.window; wndconfig.width = width; wndconfig.height = height; wndconfig.title = title; ctxconfig.share = (_GLFWwindow*) share; if (!_glfwIsValidContextConfig(&ctxconfig)) return NULL; static GLFWid windowIdCounter = 0; window = calloc(1, sizeof(_GLFWwindow)); window->next = _glfw.windowListHead; window->id = ++windowIdCounter; _glfw.windowListHead = window; window->videoMode.width = width; window->videoMode.height = height; window->videoMode.redBits = fbconfig.redBits; window->videoMode.greenBits = fbconfig.greenBits; window->videoMode.blueBits = fbconfig.blueBits; window->videoMode.refreshRate = _glfw.hints.refreshRate; window->monitor = (_GLFWmonitor*) monitor; window->resizable = wndconfig.resizable; window->decorated = wndconfig.decorated; window->autoIconify = wndconfig.autoIconify; window->floating = wndconfig.floating; window->focusOnShow = wndconfig.focusOnShow; window->cursorMode = GLFW_CURSOR_NORMAL; window->minwidth = GLFW_DONT_CARE; window->minheight = GLFW_DONT_CARE; window->maxwidth = GLFW_DONT_CARE; window->maxheight = GLFW_DONT_CARE; window->numer = GLFW_DONT_CARE; window->denom = GLFW_DONT_CARE; // Open the actual window and create its context if (!_glfwPlatformCreateWindow(window, &wndconfig, &ctxconfig, &fbconfig)) { glfwDestroyWindow((GLFWwindow*) window); return NULL; } if (ctxconfig.client != GLFW_NO_API) { if (!_glfwRefreshContextAttribs(window, &ctxconfig)) { glfwDestroyWindow((GLFWwindow*) window); return NULL; } } if (window->monitor) { if (wndconfig.centerCursor) _glfwCenterCursorInContentArea(window); } else { if (wndconfig.visible) { _glfwPlatformShowWindow(window); #ifndef _GLFW_WAYLAND if (wndconfig.focused) _glfwPlatformFocusWindow(window); #endif } } return (GLFWwindow*) window; } void glfwDefaultWindowHints(void) { _GLFW_REQUIRE_INIT(); // The default is OpenGL with minimum version 1.0 memset(&_glfw.hints.context, 0, sizeof(_glfw.hints.context)); _glfw.hints.context.client = GLFW_OPENGL_API; _glfw.hints.context.source = GLFW_NATIVE_CONTEXT_API; _glfw.hints.context.major = 1; _glfw.hints.context.minor = 0; // The default is a focused, visible, resizable window with decorations memset(&_glfw.hints.window, 0, sizeof(_glfw.hints.window)); _glfw.hints.window.resizable = true; _glfw.hints.window.visible = true; _glfw.hints.window.decorated = true; _glfw.hints.window.focused = true; _glfw.hints.window.autoIconify = true; _glfw.hints.window.centerCursor = true; _glfw.hints.window.focusOnShow = true; // The default is 24 bits of color, 24 bits of depth and 8 bits of stencil, // double buffered memset(&_glfw.hints.framebuffer, 0, sizeof(_glfw.hints.framebuffer)); _glfw.hints.framebuffer.redBits = 8; _glfw.hints.framebuffer.greenBits = 8; _glfw.hints.framebuffer.blueBits = 8; _glfw.hints.framebuffer.alphaBits = 8; _glfw.hints.framebuffer.depthBits = 24; _glfw.hints.framebuffer.stencilBits = 8; _glfw.hints.framebuffer.doublebuffer = true; // The default is to select the highest available refresh rate _glfw.hints.refreshRate = GLFW_DONT_CARE; // The default is to use full Retina resolution framebuffers _glfw.hints.window.ns.retina = true; } GLFWAPI void glfwWindowHint(int hint, int value) { _GLFW_REQUIRE_INIT(); switch (hint) { case GLFW_RED_BITS: _glfw.hints.framebuffer.redBits = value; return; case GLFW_GREEN_BITS: _glfw.hints.framebuffer.greenBits = value; return; case GLFW_BLUE_BITS: _glfw.hints.framebuffer.blueBits = value; return; case GLFW_ALPHA_BITS: _glfw.hints.framebuffer.alphaBits = value; return; case GLFW_DEPTH_BITS: _glfw.hints.framebuffer.depthBits = value; return; case GLFW_STENCIL_BITS: _glfw.hints.framebuffer.stencilBits = value; return; case GLFW_ACCUM_RED_BITS: _glfw.hints.framebuffer.accumRedBits = value; return; case GLFW_ACCUM_GREEN_BITS: _glfw.hints.framebuffer.accumGreenBits = value; return; case GLFW_ACCUM_BLUE_BITS: _glfw.hints.framebuffer.accumBlueBits = value; return; case GLFW_ACCUM_ALPHA_BITS: _glfw.hints.framebuffer.accumAlphaBits = value; return; case GLFW_AUX_BUFFERS: _glfw.hints.framebuffer.auxBuffers = value; return; case GLFW_STEREO: _glfw.hints.framebuffer.stereo = value ? true : false; return; case GLFW_DOUBLEBUFFER: _glfw.hints.framebuffer.doublebuffer = value ? true : false; return; case GLFW_TRANSPARENT_FRAMEBUFFER: _glfw.hints.framebuffer.transparent = value ? true : false; return; case GLFW_SAMPLES: _glfw.hints.framebuffer.samples = value; return; case GLFW_SRGB_CAPABLE: _glfw.hints.framebuffer.sRGB = value ? true : false; return; case GLFW_RESIZABLE: _glfw.hints.window.resizable = value ? true : false; return; case GLFW_DECORATED: _glfw.hints.window.decorated = value ? true : false; return; case GLFW_FOCUSED: _glfw.hints.window.focused = value ? true : false; return; case GLFW_AUTO_ICONIFY: _glfw.hints.window.autoIconify = value ? true : false; return; case GLFW_FLOATING: _glfw.hints.window.floating = value ? true : false; return; case GLFW_MAXIMIZED: _glfw.hints.window.maximized = value ? true : false; return; case GLFW_VISIBLE: _glfw.hints.window.visible = value ? true : false; return; case GLFW_COCOA_RETINA_FRAMEBUFFER: _glfw.hints.window.ns.retina = value ? true : false; return; case GLFW_COCOA_GRAPHICS_SWITCHING: _glfw.hints.context.nsgl.offline = value ? true : false; return; case GLFW_SCALE_TO_MONITOR: _glfw.hints.window.scaleToMonitor = value ? true : false; return; case GLFW_CENTER_CURSOR: _glfw.hints.window.centerCursor = value ? true : false; return; case GLFW_FOCUS_ON_SHOW: _glfw.hints.window.focusOnShow = value ? true : false; return; case GLFW_CLIENT_API: _glfw.hints.context.client = value; return; case GLFW_CONTEXT_CREATION_API: _glfw.hints.context.source = value; return; case GLFW_CONTEXT_VERSION_MAJOR: _glfw.hints.context.major = value; return; case GLFW_CONTEXT_VERSION_MINOR: _glfw.hints.context.minor = value; return; case GLFW_CONTEXT_ROBUSTNESS: _glfw.hints.context.robustness = value; return; case GLFW_OPENGL_FORWARD_COMPAT: _glfw.hints.context.forward = value ? true : false; return; case GLFW_OPENGL_DEBUG_CONTEXT: _glfw.hints.context.debug = value ? true : false; return; case GLFW_CONTEXT_NO_ERROR: _glfw.hints.context.noerror = value ? true : false; return; case GLFW_OPENGL_PROFILE: _glfw.hints.context.profile = value; return; case GLFW_CONTEXT_RELEASE_BEHAVIOR: _glfw.hints.context.release = value; return; case GLFW_REFRESH_RATE: _glfw.hints.refreshRate = value; return; } _glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint 0x%08X", hint); } GLFWAPI void glfwWindowHintString(int hint, const char* value) { assert(value != NULL); _GLFW_REQUIRE_INIT(); switch (hint) { case GLFW_COCOA_FRAME_NAME: strncpy(_glfw.hints.window.ns.frameName, value, sizeof(_glfw.hints.window.ns.frameName) - 1); return; case GLFW_X11_CLASS_NAME: strncpy(_glfw.hints.window.x11.className, value, sizeof(_glfw.hints.window.x11.className) - 1); return; case GLFW_X11_INSTANCE_NAME: strncpy(_glfw.hints.window.x11.instanceName, value, sizeof(_glfw.hints.window.x11.instanceName) - 1); return; case GLFW_WAYLAND_APP_ID: strncpy(_glfw.hints.window.wl.appId, value, sizeof(_glfw.hints.window.wl.appId) - 1); return; } _glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint string 0x%08X", hint); } GLFWAPI void glfwDestroyWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT(); // Allow closing of NULL (to match the behavior of free) if (window == NULL) return; // Clear all callbacks to avoid exposing a half torn-down window object memset(&window->callbacks, 0, sizeof(window->callbacks)); // The window's context must not be current on another thread when the // window is destroyed if (window == _glfwPlatformGetTls(&_glfw.contextSlot)) glfwMakeContextCurrent(NULL); _glfwPlatformDestroyWindow(window); // Unlink window from global linked list { _GLFWwindow** prev = &_glfw.windowListHead; while (*prev != window) prev = &((*prev)->next); *prev = window->next; } free(window); } GLFWAPI int glfwWindowShouldClose(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(0); return window->shouldClose; } GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* handle, int value) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); window->shouldClose = value; } GLFWAPI void glfwSetWindowTitle(GLFWwindow* handle, const char* title) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); assert(title != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformSetWindowTitle(window, title); } GLFWAPI void glfwSetWindowIcon(GLFWwindow* handle, int count, const GLFWimage* images) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); assert(count >= 0); assert(count == 0 || images != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformSetWindowIcon(window, count, images); } GLFWAPI void glfwGetWindowPos(GLFWwindow* handle, int* xpos, int* ypos) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (xpos) *xpos = 0; if (ypos) *ypos = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetWindowPos(window, xpos, ypos); } GLFWAPI void glfwSetWindowPos(GLFWwindow* handle, int xpos, int ypos) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (window->monitor) return; _glfwPlatformSetWindowPos(window, xpos, ypos); } GLFWAPI void glfwGetWindowSize(GLFWwindow* handle, int* width, int* height) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (width) *width = 0; if (height) *height = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetWindowSize(window, width, height); } GLFWAPI void glfwSetWindowSize(GLFWwindow* handle, int width, int height) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); assert(width >= 0); assert(height >= 0); _GLFW_REQUIRE_INIT(); window->videoMode.width = width; window->videoMode.height = height; _glfwPlatformSetWindowSize(window, width, height); } GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* handle, int minwidth, int minheight, int maxwidth, int maxheight) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (minwidth != GLFW_DONT_CARE && minheight != GLFW_DONT_CARE) { if (minwidth < 0 || minheight < 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window minimum size %ix%i", minwidth, minheight); return; } } if (maxwidth != GLFW_DONT_CARE && maxheight != GLFW_DONT_CARE) { if (maxwidth < 0 || maxheight < 0 || maxwidth < minwidth || maxheight < minheight) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window maximum size %ix%i", maxwidth, maxheight); return; } } window->minwidth = minwidth; window->minheight = minheight; window->maxwidth = maxwidth; window->maxheight = maxheight; if (window->monitor || !window->resizable) return; _glfwPlatformSetWindowSizeLimits(window, minwidth, minheight, maxwidth, maxheight); } GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* handle, int numer, int denom) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); assert(numer != 0); assert(denom != 0); _GLFW_REQUIRE_INIT(); if (numer != GLFW_DONT_CARE && denom != GLFW_DONT_CARE) { if (numer <= 0 || denom <= 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window aspect ratio %i:%i", numer, denom); return; } } window->numer = numer; window->denom = denom; if (window->monitor || !window->resizable) return; _glfwPlatformSetWindowAspectRatio(window, numer, denom); } GLFWAPI void glfwGetFramebufferSize(GLFWwindow* handle, int* width, int* height) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (width) *width = 0; if (height) *height = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetFramebufferSize(window, width, height); } GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* handle, int* left, int* top, int* right, int* bottom) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (left) *left = 0; if (top) *top = 0; if (right) *right = 0; if (bottom) *bottom = 0; _GLFW_REQUIRE_INIT(); _glfwPlatformGetWindowFrameSize(window, left, top, right, bottom); } GLFWAPI void glfwGetWindowContentScale(GLFWwindow* handle, float* xscale, float* yscale) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); if (xscale) *xscale = 0.f; if (yscale) *yscale = 0.f; _GLFW_REQUIRE_INIT(); _glfwPlatformGetWindowContentScale(window, xscale, yscale); } GLFWAPI monotonic_t glfwGetDoubleClickInterval(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(ms_to_monotonic_t(500ll)); return _glfwPlatformGetDoubleClickInterval(window); } GLFWAPI float glfwGetWindowOpacity(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(1.f); return _glfwPlatformGetWindowOpacity(window); } GLFWAPI void glfwSetWindowOpacity(GLFWwindow* handle, float opacity) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); assert(opacity == opacity); assert(opacity >= 0.f); assert(opacity <= 1.f); _GLFW_REQUIRE_INIT(); if (opacity != opacity || opacity < 0.f || opacity > 1.f) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window opacity %f", opacity); return; } _glfwPlatformSetWindowOpacity(window, opacity); } GLFWAPI void glfwIconifyWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformIconifyWindow(window); } GLFWAPI void glfwRestoreWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformRestoreWindow(window); } GLFWAPI void glfwMaximizeWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (window->monitor) return; _glfwPlatformMaximizeWindow(window); } GLFWAPI void glfwShowWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (window->monitor) return; _glfwPlatformShowWindow(window); #ifndef _GLFW_WAYLAND if (window->focusOnShow) _glfwPlatformFocusWindow(window); #endif } GLFWAPI void glfwRequestWindowAttention(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformRequestWindowAttention(window); } GLFWAPI int glfwWindowBell(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(false); return _glfwPlatformWindowBell(window); } GLFWAPI void glfwHideWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); if (window->monitor) return; _glfwPlatformHideWindow(window); } GLFWAPI void glfwFocusWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); _glfwPlatformFocusWindow(window); } GLFWAPI int glfwGetWindowAttrib(GLFWwindow* handle, int attrib) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(0); switch (attrib) { case GLFW_FOCUSED: return _glfwPlatformWindowFocused(window); case GLFW_ICONIFIED: return _glfwPlatformWindowIconified(window); case GLFW_VISIBLE: return _glfwPlatformWindowVisible(window); case GLFW_MAXIMIZED: return _glfwPlatformWindowMaximized(window); case GLFW_HOVERED: return _glfwPlatformWindowHovered(window); case GLFW_FOCUS_ON_SHOW: return window->focusOnShow; case GLFW_TRANSPARENT_FRAMEBUFFER: return _glfwPlatformFramebufferTransparent(window); case GLFW_OCCLUDED: return _glfwPlatformWindowOccluded(window); case GLFW_RESIZABLE: return window->resizable; case GLFW_DECORATED: return window->decorated; case GLFW_FLOATING: return window->floating; case GLFW_AUTO_ICONIFY: return window->autoIconify; case GLFW_CLIENT_API: return window->context.client; case GLFW_CONTEXT_CREATION_API: return window->context.source; case GLFW_CONTEXT_VERSION_MAJOR: return window->context.major; case GLFW_CONTEXT_VERSION_MINOR: return window->context.minor; case GLFW_CONTEXT_REVISION: return window->context.revision; case GLFW_CONTEXT_ROBUSTNESS: return window->context.robustness; case GLFW_OPENGL_FORWARD_COMPAT: return window->context.forward; case GLFW_OPENGL_DEBUG_CONTEXT: return window->context.debug; case GLFW_OPENGL_PROFILE: return window->context.profile; case GLFW_CONTEXT_RELEASE_BEHAVIOR: return window->context.release; case GLFW_CONTEXT_NO_ERROR: return window->context.noerror; } _glfwInputError(GLFW_INVALID_ENUM, "Invalid window attribute 0x%08X", attrib); return 0; } GLFWAPI void glfwSetWindowAttrib(GLFWwindow* handle, int attrib, int value) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); value = value ? true : false; if (attrib == GLFW_AUTO_ICONIFY) window->autoIconify = value; else if (attrib == GLFW_RESIZABLE) { if (window->resizable == value) return; window->resizable = value; if (!window->monitor) _glfwPlatformSetWindowResizable(window, value); } else if (attrib == GLFW_DECORATED) { if (window->decorated == value) return; window->decorated = value; if (!window->monitor) _glfwPlatformSetWindowDecorated(window, value); } else if (attrib == GLFW_FLOATING) { if (window->floating == value) return; window->floating = value; if (!window->monitor) _glfwPlatformSetWindowFloating(window, value); } else if (attrib == GLFW_FOCUS_ON_SHOW) window->focusOnShow = value; else _glfwInputError(GLFW_INVALID_ENUM, "Invalid window attribute 0x%08X", attrib); } GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return (GLFWmonitor*) window->monitor; } GLFWAPI void glfwSetWindowMonitor(GLFWwindow* wh, GLFWmonitor* mh, int xpos, int ypos, int width, int height, int refreshRate) { _GLFWwindow* window = (_GLFWwindow*) wh; _GLFWmonitor* monitor = (_GLFWmonitor*) mh; assert(window != NULL); assert(width >= 0); assert(height >= 0); _GLFW_REQUIRE_INIT(); if (width <= 0 || height <= 0) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid window size %ix%i", width, height); return; } if (refreshRate < 0 && refreshRate != GLFW_DONT_CARE) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid refresh rate %i", refreshRate); return; } window->videoMode.width = width; window->videoMode.height = height; window->videoMode.refreshRate = refreshRate; _glfwPlatformSetWindowMonitor(window, monitor, xpos, ypos, width, height, refreshRate); } GLFWAPI bool glfwToggleFullscreen(GLFWwindow* wh, unsigned int flags) { _GLFWwindow* window = (_GLFWwindow*) wh; if (window) return _glfwPlatformToggleFullscreen(window, flags); return false; } GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* handle, void* pointer) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT(); window->userPointer = pointer; } GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return window->userPointer; } GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* handle, GLFWwindowposfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.pos, cbfun); return cbfun; } GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* handle, GLFWwindowsizefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.size, cbfun); return cbfun; } GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* handle, GLFWwindowclosefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.close, cbfun); return cbfun; } GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* handle, GLFWwindowrefreshfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.refresh, cbfun); return cbfun; } GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* handle, GLFWwindowfocusfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.focus, cbfun); return cbfun; } GLFWAPI GLFWwindowocclusionfun glfwSetWindowOcclusionCallback(GLFWwindow* handle, GLFWwindowocclusionfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.occlusion, cbfun); return cbfun; } GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* handle, GLFWwindowiconifyfun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.iconify, cbfun); return cbfun; } GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* handle, GLFWwindowmaximizefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.maximize, cbfun); return cbfun; } GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* handle, GLFWframebuffersizefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.fbsize, cbfun); return cbfun; } GLFWAPI GLFWliveresizefun glfwSetLiveResizeCallback(GLFWwindow* handle, GLFWliveresizefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.liveResize, cbfun); return cbfun; } GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* handle, GLFWwindowcontentscalefun cbfun) { _GLFWwindow* window = (_GLFWwindow*) handle; assert(window != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); _GLFW_SWAP_POINTERS(window->callbacks.scale, cbfun); return cbfun; } GLFWAPI void glfwPostEmptyEvent(void) { _GLFW_REQUIRE_INIT(); _glfwPlatformPostEmptyEvent(); } kitty-0.15.0/glfw/wl_init.c000066400000000000000000000741611356737523400155410ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Wayland - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #define _GNU_SOURCE #include "internal.h" #include "backend_utils.h" #include "../kitty/monotonic.h" #include #include #include #include #include #include #include #include #include #include // Needed for the BTN_* defines #ifdef __has_include #if __has_include() #include #elif __has_include() #include #endif #else #include #endif static inline int min(int n1, int n2) { return n1 < n2 ? n1 : n2; } static _GLFWwindow* findWindowFromDecorationSurface(struct wl_surface* surface, int* which) { int focus; _GLFWwindow* window = _glfw.windowListHead; if (!which) which = &focus; while (window) { if (surface == window->wl.decorations.top.surface) { *which = topDecoration; break; } if (surface == window->wl.decorations.left.surface) { *which = leftDecoration; break; } if (surface == window->wl.decorations.right.surface) { *which = rightDecoration; break; } if (surface == window->wl.decorations.bottom.surface) { *which = bottomDecoration; break; } window = window->next; } return window; } static void pointerHandleEnter(void* data UNUSED, struct wl_pointer* pointer UNUSED, uint32_t serial, struct wl_surface* surface, wl_fixed_t sx UNUSED, wl_fixed_t sy UNUSED) { // Happens in the case we just destroyed the surface. if (!surface) return; int focus = 0; _GLFWwindow* window = wl_surface_get_user_data(surface); if (!window) { window = findWindowFromDecorationSurface(surface, &focus); if (!window) return; } window->wl.decorations.focus = focus; _glfw.wl.pointerSerial = serial; _glfw.wl.pointerFocus = window; window->wl.hovered = true; _glfwPlatformSetCursor(window, window->wl.currentCursor); _glfwInputCursorEnter(window, true); } static void pointerHandleLeave(void* data UNUSED, struct wl_pointer* pointer UNUSED, uint32_t serial, struct wl_surface* surface UNUSED) { _GLFWwindow* window = _glfw.wl.pointerFocus; if (!window) return; window->wl.hovered = false; _glfw.wl.pointerSerial = serial; _glfw.wl.pointerFocus = NULL; _glfwInputCursorEnter(window, false); } static void setCursor(GLFWCursorShape shape) { struct wl_buffer* buffer; struct wl_cursor* cursor; struct wl_cursor_image* image; struct wl_surface* surface = _glfw.wl.cursorSurface; cursor = _glfwLoadCursor(shape); if (!cursor) return; // TODO: handle animated cursors too. image = cursor->images[0]; if (!image) return; buffer = wl_cursor_image_get_buffer(image); if (!buffer) return; wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerSerial, surface, image->hotspot_x, image->hotspot_y); wl_surface_attach(surface, buffer, 0, 0); wl_surface_damage(surface, 0, 0, image->width, image->height); wl_surface_commit(surface); _glfw.wl.cursorPreviousShape = shape; } static void pointerHandleMotion(void* data UNUSED, struct wl_pointer* pointer UNUSED, uint32_t time UNUSED, wl_fixed_t sx, wl_fixed_t sy) { _GLFWwindow* window = _glfw.wl.pointerFocus; GLFWCursorShape cursorShape = GLFW_ARROW_CURSOR; double x, y; if (!window) return; if (window->cursorMode == GLFW_CURSOR_DISABLED) return; x = wl_fixed_to_double(sx); y = wl_fixed_to_double(sy); switch (window->wl.decorations.focus) { case mainWindow: window->wl.cursorPosX = x; window->wl.cursorPosY = y; _glfwInputCursorPos(window, x, y); return; case topDecoration: if (y < _GLFW_DECORATION_WIDTH) cursorShape = GLFW_VRESIZE_CURSOR; else cursorShape = GLFW_ARROW_CURSOR; break; case leftDecoration: if (y < _GLFW_DECORATION_WIDTH) cursorShape = GLFW_NW_RESIZE_CURSOR; else cursorShape = GLFW_HRESIZE_CURSOR; break; case rightDecoration: if (y < _GLFW_DECORATION_WIDTH) cursorShape = GLFW_NE_RESIZE_CURSOR; else cursorShape = GLFW_HRESIZE_CURSOR; break; case bottomDecoration: if (x < _GLFW_DECORATION_WIDTH) cursorShape = GLFW_SW_RESIZE_CURSOR; else if (x > window->wl.width + _GLFW_DECORATION_WIDTH) cursorShape = GLFW_SE_RESIZE_CURSOR; else cursorShape = GLFW_VRESIZE_CURSOR; break; default: assert(0); } if (_glfw.wl.cursorPreviousShape != cursorShape) setCursor(cursorShape); } static void pointerHandleButton(void* data UNUSED, struct wl_pointer* pointer UNUSED, uint32_t serial, uint32_t time UNUSED, uint32_t button, uint32_t state) { _GLFWwindow* window = _glfw.wl.pointerFocus; int glfwButton; uint32_t edges = XDG_TOPLEVEL_RESIZE_EDGE_NONE; if (!window) return; if (button == BTN_LEFT) { switch (window->wl.decorations.focus) { case mainWindow: break; case topDecoration: if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP; else { if (window->wl.xdg.toplevel) xdg_toplevel_move(window->wl.xdg.toplevel, _glfw.wl.seat, serial); } break; case leftDecoration: if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT; else edges = XDG_TOPLEVEL_RESIZE_EDGE_LEFT; break; case rightDecoration: if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT; else edges = XDG_TOPLEVEL_RESIZE_EDGE_RIGHT; break; case bottomDecoration: if (window->wl.cursorPosX < _GLFW_DECORATION_WIDTH) edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT; else if (window->wl.cursorPosX > window->wl.width + _GLFW_DECORATION_WIDTH) edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT; else edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM; break; default: assert(0); } if (edges != XDG_TOPLEVEL_RESIZE_EDGE_NONE) { xdg_toplevel_resize(window->wl.xdg.toplevel, _glfw.wl.seat, serial, edges); } } else if (button == BTN_RIGHT) { if (window->wl.decorations.focus != mainWindow && window->wl.xdg.toplevel) { xdg_toplevel_show_window_menu(window->wl.xdg.toplevel, _glfw.wl.seat, serial, (int32_t)window->wl.cursorPosX, (int32_t)window->wl.cursorPosY); return; } } // Don’t pass the button to the user if it was related to a decoration. if (window->wl.decorations.focus != mainWindow) return; _glfw.wl.pointerSerial = serial; /* Makes left, right and middle 0, 1 and 2. Overall order follows evdev * codes. */ glfwButton = button - BTN_LEFT; _glfwInputMouseClick(window, glfwButton, state == WL_POINTER_BUTTON_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE, _glfw.wl.xkb.states.modifiers); } static void pointerHandleAxis(void* data UNUSED, struct wl_pointer* pointer UNUSED, uint32_t time UNUSED, uint32_t axis, wl_fixed_t value) { _GLFWwindow* window = _glfw.wl.pointerFocus; double x = 0.0, y = 0.0; if (!window) return; assert(axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL || axis == WL_POINTER_AXIS_VERTICAL_SCROLL); if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL) x = wl_fixed_to_double(value) * -1; else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL) y = wl_fixed_to_double(value) * -1; _glfwInputScroll(window, x, y, 1); } static const struct wl_pointer_listener pointerListener = { pointerHandleEnter, pointerHandleLeave, pointerHandleMotion, pointerHandleButton, pointerHandleAxis, }; static void keyboardHandleKeymap(void* data UNUSED, struct wl_keyboard* keyboard UNUSED, uint32_t format, int fd, uint32_t size) { char* mapStr; if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) { close(fd); return; } mapStr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); if (mapStr == MAP_FAILED) { close(fd); return; } glfw_xkb_compile_keymap(&_glfw.wl.xkb, mapStr); munmap(mapStr, size); close(fd); } static void keyboardHandleEnter(void* data UNUSED, struct wl_keyboard* keyboard UNUSED, uint32_t serial UNUSED, struct wl_surface* surface, struct wl_array* keys) { // Happens in the case we just destroyed the surface. if (!surface) return; _GLFWwindow* window = wl_surface_get_user_data(surface); if (!window) { window = findWindowFromDecorationSurface(surface, NULL); if (!window) return; } _glfw.wl.keyboardFocus = window; _glfwInputWindowFocus(window, true); uint32_t* key; if (keys && _glfw.wl.keyRepeatInfo.key) { wl_array_for_each(key, keys) { if (*key == _glfw.wl.keyRepeatInfo.key) { toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, 1); break; } } } } static void keyboardHandleLeave(void* data UNUSED, struct wl_keyboard* keyboard UNUSED, uint32_t serial UNUSED, struct wl_surface* surface UNUSED) { _GLFWwindow* window = _glfw.wl.keyboardFocus; if (!window) return; _glfw.wl.keyboardFocus = NULL; _glfwInputWindowFocus(window, false); toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, 0); } static void dispatchPendingKeyRepeats(id_type timer_id UNUSED, void *data UNUSED) { if (_glfw.wl.keyRepeatInfo.keyboardFocus != _glfw.wl.keyboardFocus || _glfw.wl.keyboardRepeatRate == 0) return; glfw_xkb_handle_key_event(_glfw.wl.keyRepeatInfo.keyboardFocus, &_glfw.wl.xkb, _glfw.wl.keyRepeatInfo.key, GLFW_REPEAT); changeTimerInterval(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, (s_to_monotonic_t(1ll) / (monotonic_t)_glfw.wl.keyboardRepeatRate)); toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, 1); } static void keyboardHandleKey(void* data UNUSED, struct wl_keyboard* keyboard UNUSED, uint32_t serial UNUSED, uint32_t time UNUSED, uint32_t key, uint32_t state) { _GLFWwindow* window = _glfw.wl.keyboardFocus; if (!window) return; int action = state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE; glfw_xkb_handle_key_event(window, &_glfw.wl.xkb, key, action); bool repeatable = false; _glfw.wl.keyRepeatInfo.key = 0; if (action == GLFW_PRESS && _glfw.wl.keyboardRepeatRate > 0 && glfw_xkb_should_repeat(&_glfw.wl.xkb, key)) { _glfw.wl.keyRepeatInfo.key = key; repeatable = true; _glfw.wl.keyRepeatInfo.keyboardFocus = window; } if (repeatable) { changeTimerInterval(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, _glfw.wl.keyboardRepeatDelay); } toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.keyRepeatInfo.keyRepeatTimer, repeatable ? 1 : 0); } static void keyboardHandleModifiers(void* data UNUSED, struct wl_keyboard* keyboard UNUSED, uint32_t serial UNUSED, uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group) { glfw_xkb_update_modifiers(&_glfw.wl.xkb, modsDepressed, modsLatched, modsLocked, 0, 0, group); } static void keyboardHandleRepeatInfo(void* data UNUSED, struct wl_keyboard* keyboard, int32_t rate, int32_t delay) { if (keyboard != _glfw.wl.keyboard) return; _glfw.wl.keyboardRepeatRate = rate; _glfw.wl.keyboardRepeatDelay = ms_to_monotonic_t(delay); } static const struct wl_keyboard_listener keyboardListener = { keyboardHandleKeymap, keyboardHandleEnter, keyboardHandleLeave, keyboardHandleKey, keyboardHandleModifiers, keyboardHandleRepeatInfo, }; static void seatHandleCapabilities(void* data UNUSED, struct wl_seat* seat, enum wl_seat_capability caps) { if ((caps & WL_SEAT_CAPABILITY_POINTER) && !_glfw.wl.pointer) { _glfw.wl.pointer = wl_seat_get_pointer(seat); wl_pointer_add_listener(_glfw.wl.pointer, &pointerListener, NULL); } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && _glfw.wl.pointer) { wl_pointer_destroy(_glfw.wl.pointer); _glfw.wl.pointer = NULL; } if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !_glfw.wl.keyboard) { _glfw.wl.keyboard = wl_seat_get_keyboard(seat); wl_keyboard_add_listener(_glfw.wl.keyboard, &keyboardListener, NULL); } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && _glfw.wl.keyboard) { wl_keyboard_destroy(_glfw.wl.keyboard); _glfw.wl.keyboard = NULL; } } static void seatHandleName(void* data UNUSED, struct wl_seat* seat UNUSED, const char* name UNUSED) { } static const struct wl_seat_listener seatListener = { seatHandleCapabilities, seatHandleName, }; static void wmBaseHandlePing(void* data UNUSED, struct xdg_wm_base* wmBase, uint32_t serial) { xdg_wm_base_pong(wmBase, serial); } static const struct xdg_wm_base_listener wmBaseListener = { wmBaseHandlePing }; static void registryHandleGlobal(void* data UNUSED, struct wl_registry* registry, uint32_t name, const char* interface, uint32_t version) { if (strcmp(interface, "wl_compositor") == 0) { _glfw.wl.compositorVersion = min(3, version); _glfw.wl.compositor = wl_registry_bind(registry, name, &wl_compositor_interface, _glfw.wl.compositorVersion); } else if (strcmp(interface, "wl_subcompositor") == 0) { _glfw.wl.subcompositor = wl_registry_bind(registry, name, &wl_subcompositor_interface, 1); } else if (strcmp(interface, "wl_shm") == 0) { _glfw.wl.shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); } else if (strcmp(interface, "wl_output") == 0) { _glfwAddOutputWayland(name, version); } else if (strcmp(interface, "wl_seat") == 0) { if (!_glfw.wl.seat) { _glfw.wl.seatVersion = min(4, version); _glfw.wl.seat = wl_registry_bind(registry, name, &wl_seat_interface, _glfw.wl.seatVersion); wl_seat_add_listener(_glfw.wl.seat, &seatListener, NULL); } if (_glfw.wl.seat) { if (_glfw.wl.dataDeviceManager && !_glfw.wl.dataDevice) _glfwSetupWaylandDataDevice(); if (_glfw.wl.primarySelectionDeviceManager && !_glfw.wl.primarySelectionDevice) { _glfwSetupWaylandPrimarySelectionDevice(); } } } else if (strcmp(interface, "xdg_wm_base") == 0) { _glfw.wl.wmBase = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); xdg_wm_base_add_listener(_glfw.wl.wmBase, &wmBaseListener, NULL); } else if (strcmp(interface, "zxdg_decoration_manager_v1") == 0) { _glfw.wl.decorationManager = wl_registry_bind(registry, name, &zxdg_decoration_manager_v1_interface, 1); } else if (strcmp(interface, "wp_viewporter") == 0) { _glfw.wl.viewporter = wl_registry_bind(registry, name, &wp_viewporter_interface, 1); } else if (strcmp(interface, "zwp_relative_pointer_manager_v1") == 0) { _glfw.wl.relativePointerManager = wl_registry_bind(registry, name, &zwp_relative_pointer_manager_v1_interface, 1); } else if (strcmp(interface, "zwp_pointer_constraints_v1") == 0) { _glfw.wl.pointerConstraints = wl_registry_bind(registry, name, &zwp_pointer_constraints_v1_interface, 1); } else if (strcmp(interface, "zwp_idle_inhibit_manager_v1") == 0) { _glfw.wl.idleInhibitManager = wl_registry_bind(registry, name, &zwp_idle_inhibit_manager_v1_interface, 1); } else if (strcmp(interface, "wl_data_device_manager") == 0) { _glfw.wl.dataDeviceManager = wl_registry_bind(registry, name, &wl_data_device_manager_interface, 1); if (_glfw.wl.seat && _glfw.wl.dataDeviceManager && !_glfw.wl.dataDevice) { _glfwSetupWaylandDataDevice(); } } else if (strcmp(interface, "zwp_primary_selection_device_manager_v1") == 0) { _glfw.wl.primarySelectionDeviceManager = wl_registry_bind(registry, name, &zwp_primary_selection_device_manager_v1_interface, 1); if (_glfw.wl.seat && _glfw.wl.primarySelectionDeviceManager && !_glfw.wl.primarySelectionDevice) { _glfwSetupWaylandPrimarySelectionDevice(); } } } static void registryHandleGlobalRemove(void *data UNUSED, struct wl_registry *registry UNUSED, uint32_t name) { _GLFWmonitor* monitor; for (int i = 0; i < _glfw.monitorCount; ++i) { monitor = _glfw.monitors[i]; if (monitor->wl.name == name) { for (_GLFWwindow *window = _glfw.windowListHead; window; window = window->next) { for (int m = window->wl.monitorsCount - 1; m >= 0; m--) { if (window->wl.monitors[m] == monitor) { remove_i_from_array(window->wl.monitors, m, window->wl.monitorsCount); } } } _glfwInputMonitor(monitor, GLFW_DISCONNECTED, 0); return; } } } static const struct wl_registry_listener registryListener = { registryHandleGlobal, registryHandleGlobalRemove }; static void registry_handle_global(void* data, struct wl_registry* registry UNUSED, uint32_t name UNUSED, const char* interface, uint32_t version UNUSED) { if (strcmp(interface, "zxdg_decoration_manager_v1") == 0) { bool *has_ssd = (bool*)data; if (has_ssd) *has_ssd = true; } } static void registry_handle_global_remove(void *data UNUSED, struct wl_registry *registry UNUSED, uint32_t name UNUSED) {} GLFWAPI const char* glfwWaylandCheckForServerSideDecorations(void) { struct wl_display *display = wl_display_connect(NULL); if (!display) return "ERR: Failed to connect to Wayland display"; static const struct wl_registry_listener rl = { registry_handle_global, registry_handle_global_remove }; struct wl_registry *registry = wl_display_get_registry(display); bool has_ssd = false; wl_registry_add_listener(registry, &rl, &has_ssd); wl_display_roundtrip(display); wl_registry_destroy(registry); wl_display_flush(display); wl_display_flush(display); return has_ssd ? "YES" : "NO"; } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformInit(void) { _glfw.wl.cursor.handle = _glfw_dlopen("libwayland-cursor.so.0"); if (!_glfw.wl.cursor.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to open libwayland-cursor"); return false; } glfw_dlsym(_glfw.wl.cursor.theme_load, _glfw.wl.cursor.handle, "wl_cursor_theme_load"); glfw_dlsym(_glfw.wl.cursor.theme_destroy, _glfw.wl.cursor.handle, "wl_cursor_theme_destroy"); glfw_dlsym(_glfw.wl.cursor.theme_get_cursor, _glfw.wl.cursor.handle, "wl_cursor_theme_get_cursor"); glfw_dlsym(_glfw.wl.cursor.image_get_buffer, _glfw.wl.cursor.handle, "wl_cursor_image_get_buffer"); _glfw.wl.egl.handle = _glfw_dlopen("libwayland-egl.so.1"); if (!_glfw.wl.egl.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to open libwayland-egl"); return false; } glfw_dlsym(_glfw.wl.egl.window_create, _glfw.wl.egl.handle, "wl_egl_window_create"); glfw_dlsym(_glfw.wl.egl.window_destroy, _glfw.wl.egl.handle, "wl_egl_window_destroy"); glfw_dlsym(_glfw.wl.egl.window_resize, _glfw.wl.egl.handle, "wl_egl_window_resize"); _glfw.wl.display = wl_display_connect(NULL); if (!_glfw.wl.display) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to connect to display"); return false; } if (!initPollData(&_glfw.wl.eventLoopData, wl_display_get_fd(_glfw.wl.display))) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to initialize event loop data"); } glfw_dbus_init(&_glfw.wl.dbus, &_glfw.wl.eventLoopData); _glfw.wl.keyRepeatInfo.keyRepeatTimer = addTimer(&_glfw.wl.eventLoopData, "wayland-key-repeat", ms_to_monotonic_t(500ll), 0, true, dispatchPendingKeyRepeats, NULL, NULL); _glfw.wl.cursorAnimationTimer = addTimer(&_glfw.wl.eventLoopData, "wayland-cursor-animation", ms_to_monotonic_t(500ll), 0, true, animateCursorImage, NULL, NULL); _glfw.wl.registry = wl_display_get_registry(_glfw.wl.display); wl_registry_add_listener(_glfw.wl.registry, ®istryListener, NULL); if (!glfw_xkb_create_context(&_glfw.wl.xkb)) return false; // Sync so we got all registry objects wl_display_roundtrip(_glfw.wl.display); // Sync so we got all initial output events wl_display_roundtrip(_glfw.wl.display); #ifdef __linux__ if (_glfw.hints.init.enableJoysticks) { if (!_glfwInitJoysticksLinux()) return false; } #endif _glfwInitTimerPOSIX(); if (!_glfw.wl.wmBase) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to find xdg-shell in your compositor"); return false; } if (_glfw.wl.shm) { const char *cursorTheme = getenv("XCURSOR_THEME"), *cursorSizeStr = getenv("XCURSOR_SIZE"); char *cursorSizeEnd; int cursorSize = 32; if (cursorSizeStr) { errno = 0; long cursorSizeLong = strtol(cursorSizeStr, &cursorSizeEnd, 10); if (!*cursorSizeEnd && !errno && cursorSizeLong > 0 && cursorSizeLong <= INT_MAX) cursorSize = (int)cursorSizeLong; } _glfw.wl.cursorTheme = wl_cursor_theme_load(cursorTheme, cursorSize, _glfw.wl.shm); if (!_glfw.wl.cursorTheme) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Unable to load default cursor theme"); return false; } _glfw.wl.cursorSurface = wl_compositor_create_surface(_glfw.wl.compositor); } return true; } void _glfwPlatformTerminate(void) { #ifdef __linux__ _glfwTerminateJoysticksLinux(); #endif _glfwTerminateEGL(); if (_glfw.wl.egl.handle) { _glfw_dlclose(_glfw.wl.egl.handle); _glfw.wl.egl.handle = NULL; } glfw_xkb_release(&_glfw.wl.xkb); glfw_dbus_terminate(&_glfw.wl.dbus); if (_glfw.wl.cursorTheme) wl_cursor_theme_destroy(_glfw.wl.cursorTheme); if (_glfw.wl.cursor.handle) { _glfw_dlclose(_glfw.wl.cursor.handle); _glfw.wl.cursor.handle = NULL; } if (_glfw.wl.cursorSurface) wl_surface_destroy(_glfw.wl.cursorSurface); if (_glfw.wl.subcompositor) wl_subcompositor_destroy(_glfw.wl.subcompositor); if (_glfw.wl.compositor) wl_compositor_destroy(_glfw.wl.compositor); if (_glfw.wl.shm) wl_shm_destroy(_glfw.wl.shm); if (_glfw.wl.viewporter) wp_viewporter_destroy(_glfw.wl.viewporter); if (_glfw.wl.decorationManager) zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager); if (_glfw.wl.wmBase) xdg_wm_base_destroy(_glfw.wl.wmBase); if (_glfw.wl.pointer) wl_pointer_destroy(_glfw.wl.pointer); if (_glfw.wl.keyboard) wl_keyboard_destroy(_glfw.wl.keyboard); if (_glfw.wl.seat) wl_seat_destroy(_glfw.wl.seat); if (_glfw.wl.relativePointerManager) zwp_relative_pointer_manager_v1_destroy(_glfw.wl.relativePointerManager); if (_glfw.wl.pointerConstraints) zwp_pointer_constraints_v1_destroy(_glfw.wl.pointerConstraints); if (_glfw.wl.idleInhibitManager) zwp_idle_inhibit_manager_v1_destroy(_glfw.wl.idleInhibitManager); if (_glfw.wl.dataSourceForClipboard) wl_data_source_destroy(_glfw.wl.dataSourceForClipboard); for (size_t doi=0; doi < arraysz(_glfw.wl.dataOffers); doi++) { if (_glfw.wl.dataOffers[doi].id) { wl_data_offer_destroy(_glfw.wl.dataOffers[doi].id); } } if (_glfw.wl.dataDevice) wl_data_device_destroy(_glfw.wl.dataDevice); if (_glfw.wl.dataDeviceManager) wl_data_device_manager_destroy(_glfw.wl.dataDeviceManager); if (_glfw.wl.primarySelectionDevice) zwp_primary_selection_device_v1_destroy(_glfw.wl.primarySelectionDevice); if (_glfw.wl.primarySelectionDeviceManager) zwp_primary_selection_device_manager_v1_destroy(_glfw.wl.primarySelectionDeviceManager); if (_glfw.wl.registry) wl_registry_destroy(_glfw.wl.registry); if (_glfw.wl.display) { wl_display_flush(_glfw.wl.display); wl_display_disconnect(_glfw.wl.display); } finalizePollData(&_glfw.wl.eventLoopData); free(_glfw.wl.clipboardString); _glfw.wl.clipboardString = NULL; free(_glfw.wl.primarySelectionString); _glfw.wl.primarySelectionString = NULL; free(_glfw.wl.pasteString); _glfw.wl.pasteString = NULL; } const char* _glfwPlatformGetVersionString(void) { return _GLFW_VERSION_NUMBER " Wayland EGL OSMesa" #if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK) " clock_gettime" #else " gettimeofday" #endif " evdev" #if defined(_GLFW_BUILD_DLL) " shared" #endif ; } #define GLFW_LOOP_BACKEND wl #include "main_loop.h" kitty-0.15.0/glfw/wl_monitor.c000066400000000000000000000161001356737523400162520ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Wayland - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #include #include static void outputHandleGeometry(void* data, struct wl_output* output UNUSED, int32_t x, int32_t y, int32_t physicalWidth, int32_t physicalHeight, int32_t subpixel UNUSED, const char* make, const char* model, int32_t transform UNUSED) { struct _GLFWmonitor *monitor = data; char name[1024]; monitor->wl.x = x; monitor->wl.y = y; monitor->widthMM = physicalWidth; monitor->heightMM = physicalHeight; snprintf(name, sizeof(name), "%s %s", make, model); monitor->name = _glfw_strdup(name); } static void outputHandleMode(void* data, struct wl_output* output UNUSED, uint32_t flags, int32_t width, int32_t height, int32_t refresh) { struct _GLFWmonitor *monitor = data; GLFWvidmode mode; mode.width = width; mode.height = height; mode.redBits = 8; mode.greenBits = 8; mode.blueBits = 8; mode.refreshRate = (int) round(refresh / 1000.0); monitor->modeCount++; monitor->modes = realloc(monitor->modes, monitor->modeCount * sizeof(GLFWvidmode)); monitor->modes[monitor->modeCount - 1] = mode; if (flags & WL_OUTPUT_MODE_CURRENT) monitor->wl.currentMode = monitor->modeCount - 1; } static void outputHandleDone(void* data, struct wl_output* output UNUSED) { struct _GLFWmonitor *monitor = data; for (int i = 0; i < _glfw.monitorCount; i++) { if (_glfw.monitors[i] == monitor) return; } _glfwInputMonitor(monitor, GLFW_CONNECTED, _GLFW_INSERT_LAST); } static void outputHandleScale(void* data, struct wl_output* output UNUSED, int32_t factor) { struct _GLFWmonitor *monitor = data; if (factor > 0 && factor < 24) monitor->wl.scale = factor; } static const struct wl_output_listener outputListener = { outputHandleGeometry, outputHandleMode, outputHandleDone, outputHandleScale, }; ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// void _glfwAddOutputWayland(uint32_t name, uint32_t version) { _GLFWmonitor *monitor; struct wl_output *output; if (version < 2) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Unsupported output interface version"); return; } // The actual name of this output will be set in the geometry handler. monitor = _glfwAllocMonitor(NULL, 0, 0); output = wl_registry_bind(_glfw.wl.registry, name, &wl_output_interface, 2); if (!output) { _glfwFreeMonitor(monitor); return; } monitor->wl.scale = 1; monitor->wl.output = output; monitor->wl.name = name; wl_output_add_listener(output, &outputListener, monitor); } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor) { if (monitor->wl.output) wl_output_destroy(monitor->wl.output); } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) { if (xpos) *xpos = monitor->wl.x; if (ypos) *ypos = monitor->wl.y; } void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, float* xscale, float* yscale) { if (xscale) *xscale = (float) monitor->wl.scale; if (yscale) *yscale = (float) monitor->wl.scale; } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height) { if (xpos) *xpos = monitor->wl.x; if (ypos) *ypos = monitor->wl.y; if (width) *width = monitor->modes[monitor->wl.currentMode].width; if (height) *height = monitor->modes[monitor->wl.currentMode].height; } GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* found) { *found = monitor->modeCount; return monitor->modes; } void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode) { *mode = monitor->modes[monitor->wl.currentMode]; } bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor UNUSED, GLFWgammaramp* ramp UNUSED) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Gamma ramp access is not available"); return false; } void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor UNUSED, const GLFWgammaramp* ramp UNUSED) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Gamma ramp access is not available"); } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return monitor->wl.output; } kitty-0.15.0/glfw/wl_platform.h000066400000000000000000000257731356737523400164340ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Wayland - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; typedef struct VkWaylandSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkWaylandSurfaceCreateFlagsKHR flags; struct wl_display* display; struct wl_surface* surface; } VkWaylandSurfaceCreateInfoKHR; typedef VkResult (APIENTRY *PFN_vkCreateWaylandSurfaceKHR)(VkInstance,const VkWaylandSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*); typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice,uint32_t,struct wl_display*); #include "posix_thread.h" #include "posix_time.h" #ifdef __linux__ #include "linux_joystick.h" #else #include "null_joystick.h" #endif #include "backend_utils.h" #include "xkb_glfw.h" #include "egl_context.h" #include "osmesa_context.h" #include "wayland-xdg-shell-client-protocol.h" #include "wayland-viewporter-client-protocol.h" #include "wayland-xdg-decoration-unstable-v1-client-protocol.h" #include "wayland-relative-pointer-unstable-v1-client-protocol.h" #include "wayland-pointer-constraints-unstable-v1-client-protocol.h" #include "wayland-idle-inhibit-unstable-v1-client-protocol.h" #include "wayland-primary-selection-unstable-v1-client-protocol.h" #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL) #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->wl.native) #define _GLFW_EGL_NATIVE_DISPLAY ((EGLNativeDisplayType) _glfw.wl.display) #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowWayland wl #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryWayland wl #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorWayland wl #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorWayland wl #define _GLFW_PLATFORM_CONTEXT_STATE #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE struct wl_cursor_image { uint32_t width; uint32_t height; uint32_t hotspot_x; uint32_t hotspot_y; uint32_t delay; }; struct wl_cursor { unsigned int image_count; struct wl_cursor_image** images; char* name; }; typedef struct wl_cursor_theme* (* PFN_wl_cursor_theme_load)(const char*, int, struct wl_shm*); typedef void (* PFN_wl_cursor_theme_destroy)(struct wl_cursor_theme*); typedef struct wl_cursor* (* PFN_wl_cursor_theme_get_cursor)(struct wl_cursor_theme*, const char*); typedef struct wl_buffer* (* PFN_wl_cursor_image_get_buffer)(struct wl_cursor_image*); #define wl_cursor_theme_load _glfw.wl.cursor.theme_load #define wl_cursor_theme_destroy _glfw.wl.cursor.theme_destroy #define wl_cursor_theme_get_cursor _glfw.wl.cursor.theme_get_cursor #define wl_cursor_image_get_buffer _glfw.wl.cursor.image_get_buffer typedef struct wl_egl_window* (* PFN_wl_egl_window_create)(struct wl_surface*, int, int); typedef void (* PFN_wl_egl_window_destroy)(struct wl_egl_window*); typedef void (* PFN_wl_egl_window_resize)(struct wl_egl_window*, int, int, int, int); #define wl_egl_window_create _glfw.wl.egl.window_create #define wl_egl_window_destroy _glfw.wl.egl.window_destroy #define wl_egl_window_resize _glfw.wl.egl.window_resize #define _GLFW_DECORATION_WIDTH 4 #define _GLFW_DECORATION_TOP 24 #define _GLFW_DECORATION_VERTICAL (_GLFW_DECORATION_TOP + _GLFW_DECORATION_WIDTH) #define _GLFW_DECORATION_HORIZONTAL (2 * _GLFW_DECORATION_WIDTH) typedef enum _GLFWdecorationSideWayland { mainWindow, topDecoration, leftDecoration, rightDecoration, bottomDecoration, } _GLFWdecorationSideWayland; typedef struct _GLFWdecorationWayland { struct wl_surface* surface; struct wl_subsurface* subsurface; struct wp_viewport* viewport; } _GLFWdecorationWayland; // Wayland-specific per-window data // typedef struct _GLFWwindowWayland { int width, height; bool visible; bool maximized; bool hovered; bool transparent; struct wl_surface* surface; struct wl_egl_window* native; struct wl_callback* callback; struct { struct xdg_surface* surface; struct xdg_toplevel* toplevel; struct zxdg_toplevel_decoration_v1* decoration; } xdg; _GLFWcursor* currentCursor; double cursorPosX, cursorPosY; char* title; char appId[256]; // We need to track the monitors the window spans on to calculate the // optimal scaling factor. int scale; bool initial_scale_notified; _GLFWmonitor** monitors; int monitorsCount; int monitorsSize; struct { struct zwp_relative_pointer_v1* relativePointer; struct zwp_locked_pointer_v1* lockedPointer; } pointerLock; struct zwp_idle_inhibitor_v1* idleInhibitor; bool fullscreened; struct { bool serverSide; struct wl_buffer* buffer; _GLFWdecorationWayland top, left, right, bottom; int focus; } decorations; struct { unsigned long long id; void(*callback)(unsigned long long id); struct wl_callback *current_wl_callback; } frameCallbackData; } _GLFWwindowWayland; typedef enum _GLFWWaylandOfferType { EXPIRED, CLIPBOARD, DRAG_AND_DROP, PRIMARY_SELECTION }_GLFWWaylandOfferType ; typedef struct _GLFWWaylandDataOffer { struct wl_data_offer *id; const char *mime; _GLFWWaylandOfferType offer_type; size_t idx; int is_self_offer; int has_uri_list; uint32_t source_actions; uint32_t dnd_action; struct wl_surface *surface; } _GLFWWaylandDataOffer; typedef struct _GLFWWaylandPrimaryOffer { struct zwp_primary_selection_offer_v1 *id; const char *mime; _GLFWWaylandOfferType offer_type; size_t idx; int is_self_offer; int has_uri_list; struct wl_surface *surface; } _GLFWWaylandPrimaryOffer; // Wayland-specific global data // typedef struct _GLFWlibraryWayland { struct wl_display* display; struct wl_registry* registry; struct wl_compositor* compositor; struct wl_subcompositor* subcompositor; struct wl_shm* shm; struct wl_seat* seat; struct wl_pointer* pointer; struct wl_keyboard* keyboard; struct xdg_wm_base* wmBase; struct zxdg_decoration_manager_v1* decorationManager; struct wp_viewporter* viewporter; struct zwp_relative_pointer_manager_v1* relativePointerManager; struct zwp_pointer_constraints_v1* pointerConstraints; struct zwp_idle_inhibit_manager_v1* idleInhibitManager; struct wl_data_device_manager* dataDeviceManager; struct wl_data_device* dataDevice; struct wl_data_source* dataSourceForClipboard; struct zwp_primary_selection_device_manager_v1* primarySelectionDeviceManager; struct zwp_primary_selection_device_v1* primarySelectionDevice; struct zwp_primary_selection_source_v1* dataSourceForPrimarySelection; int compositorVersion; int seatVersion; struct wl_cursor_theme* cursorTheme; struct wl_surface* cursorSurface; GLFWCursorShape cursorPreviousShape; uint32_t pointerSerial; int32_t keyboardRepeatRate; monotonic_t keyboardRepeatDelay; struct { uint32_t key; id_type keyRepeatTimer; _GLFWwindow* keyboardFocus; } keyRepeatInfo; id_type cursorAnimationTimer; _GLFWXKBData xkb; _GLFWDBUSData dbus; _GLFWwindow* pointerFocus; _GLFWwindow* keyboardFocus; struct { void* handle; PFN_wl_cursor_theme_load theme_load; PFN_wl_cursor_theme_destroy theme_destroy; PFN_wl_cursor_theme_get_cursor theme_get_cursor; PFN_wl_cursor_image_get_buffer image_get_buffer; } cursor; struct { void* handle; PFN_wl_egl_window_create window_create; PFN_wl_egl_window_destroy window_destroy; PFN_wl_egl_window_resize window_resize; } egl; EventLoopData eventLoopData; char* pasteString; char* clipboardString; size_t dataOffersCounter; _GLFWWaylandDataOffer dataOffers[8]; char* primarySelectionString; size_t primarySelectionOffersCounter; _GLFWWaylandPrimaryOffer primarySelectionOffers[8]; } _GLFWlibraryWayland; // Wayland-specific per-monitor data // typedef struct _GLFWmonitorWayland { struct wl_output* output; uint32_t name; int currentMode; int x; int y; int scale; } _GLFWmonitorWayland; // Wayland-specific per-cursor data // typedef struct _GLFWcursorWayland { struct wl_cursor* cursor; struct wl_buffer* buffer; int width, height; int xhot, yhot; int currentImage; } _GLFWcursorWayland; void _glfwAddOutputWayland(uint32_t name, uint32_t version); void _glfwSetupWaylandDataDevice(void); void _glfwSetupWaylandPrimarySelectionDevice(void); void animateCursorImage(id_type timer_id, void *data); struct wl_cursor* _glfwLoadCursor(GLFWCursorShape); kitty-0.15.0/glfw/wl_window.c000066400000000000000000002156211356737523400161030ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 Wayland - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014 Jonas Ã…dahl // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #define _GNU_SOURCE #include "internal.h" #include "backend_utils.h" #include "memfd.h" #include "linux_notify.h" #include "../kitty/monotonic.h" #include #include #include #include #include #include #define URI_LIST_MIME "text/uri-list" static bool checkScaleChange(_GLFWwindow* window) { int scale = 1; int i; int monitorScale; // Check if we will be able to set the buffer scale or not. if (_glfw.wl.compositorVersion < 3) return false; // Get the scale factor from the highest scale monitor that this window is on for (i = 0; i < window->wl.monitorsCount; ++i) { monitorScale = window->wl.monitors[i]->wl.scale; if (scale < monitorScale) scale = monitorScale; } if (window->wl.monitorsCount < 1 && _glfw.monitorCount > 0) { // The window has not yet been assigned to any monitors, use the primary monitor _GLFWmonitor *m = _glfw.monitors[0]; if (m && m->wl.scale > scale) scale = m->wl.scale; } // Only change the framebuffer size if the scale changed. if (scale != window->wl.scale) { window->wl.scale = scale; wl_surface_set_buffer_scale(window->wl.surface, scale); return true; } if (window->wl.monitorsCount > 0 && !window->wl.initial_scale_notified) { window->wl.initial_scale_notified = true; return true; } return false; } // Makes the surface considered as XRGB instead of ARGB. static void setOpaqueRegion(_GLFWwindow* window) { struct wl_region* region; region = wl_compositor_create_region(_glfw.wl.compositor); if (!region) return; wl_region_add(region, 0, 0, window->wl.width, window->wl.height); wl_surface_set_opaque_region(window->wl.surface, region); wl_surface_commit(window->wl.surface); wl_region_destroy(region); } static void resizeFramebuffer(_GLFWwindow* window) { int scale = window->wl.scale; int scaledWidth = window->wl.width * scale; int scaledHeight = window->wl.height * scale; wl_egl_window_resize(window->wl.native, scaledWidth, scaledHeight, 0, 0); if (!window->wl.transparent) setOpaqueRegion(window); _glfwInputFramebufferSize(window, scaledWidth, scaledHeight); if (!window->wl.decorations.top.surface) return; // Top decoration. wp_viewport_set_destination(window->wl.decorations.top.viewport, window->wl.width, _GLFW_DECORATION_TOP); wl_surface_commit(window->wl.decorations.top.surface); // Left decoration. wp_viewport_set_destination(window->wl.decorations.left.viewport, _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); wl_surface_commit(window->wl.decorations.left.surface); // Right decoration. wl_subsurface_set_position(window->wl.decorations.right.subsurface, window->wl.width, -_GLFW_DECORATION_TOP); wp_viewport_set_destination(window->wl.decorations.right.viewport, _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); wl_surface_commit(window->wl.decorations.right.surface); // Bottom decoration. wl_subsurface_set_position(window->wl.decorations.bottom.subsurface, -_GLFW_DECORATION_WIDTH, window->wl.height); wp_viewport_set_destination(window->wl.decorations.bottom.viewport, window->wl.width + _GLFW_DECORATION_HORIZONTAL, _GLFW_DECORATION_WIDTH); wl_surface_commit(window->wl.decorations.bottom.surface); } static const char* clipboard_mime(void) { static char buf[128] = {0}; if (buf[0] == 0) { snprintf(buf, sizeof(buf), "application/glfw+clipboard-%d", getpid()); } return buf; } static void dispatchChangesAfterConfigure(_GLFWwindow *window, int32_t width, int32_t height) { if (width <= 0) width = window->wl.width; if (height <= 0) height = window->wl.height; bool size_changed = width != window->wl.width || height != window->wl.height; bool scale_changed = checkScaleChange(window); if (size_changed) { _glfwInputWindowSize(window, width, height); _glfwPlatformSetWindowSize(window, width, height); } if (scale_changed) { if (!size_changed) resizeFramebuffer(window); _glfwInputWindowContentScale(window, window->wl.scale, window->wl.scale); } _glfwInputWindowDamage(window); } /* * Create a new, unique, anonymous file of the given size, and * return the file descriptor for it. The file descriptor is set * CLOEXEC. The file is immediately suitable for mmap()'ing * the given size at offset zero. * * The file should not have a permanent backing store like a disk, * but may have if XDG_RUNTIME_DIR is not properly implemented in OS. * * The file name is deleted from the file system. * * The file is suitable for buffer sharing between processes by * transmitting the file descriptor over Unix sockets using the * SCM_RIGHTS methods. * * posix_fallocate() is used to guarantee that disk space is available * for the file at the given size. If disk space is insufficient, errno * is set to ENOSPC. If posix_fallocate() is not supported, program may * receive SIGBUS on accessing mmap()'ed file contents instead. */ static int createAnonymousFile(off_t size) { int ret, fd = -1, shm_anon = 0; #ifdef HAS_MEMFD_CREATE fd = memfd_create("glfw-shared", MFD_CLOEXEC | MFD_ALLOW_SEALING); if (fd < 0) return -1; // We can add this seal before calling posix_fallocate(), as the file // is currently zero-sized anyway. // // There is also no need to check for the return value, we couldn’t do // anything with it anyway. fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL); #elif defined(SHM_ANON) fd = shm_open(SHM_ANON, O_RDWR | O_CLOEXEC, 0600); if (fd < 0) return -1; shm_anon = 1; #else static const char template[] = "/glfw-shared-XXXXXX"; const char* path; char* name; path = getenv("XDG_RUNTIME_DIR"); if (!path) { errno = ENOENT; return -1; } name = calloc(strlen(path) + sizeof(template), 1); strcpy(name, path); strcat(name, template); fd = createTmpfileCloexec(name); free(name); if (fd < 0) return -1; #endif // posix_fallocate does not work on SHM descriptors ret = shm_anon ? ftruncate(fd, size) : posix_fallocate(fd, 0, size); if (ret != 0) { close(fd); errno = ret; return -1; } return fd; } static struct wl_buffer* createShmBuffer(const GLFWimage* image) { struct wl_shm_pool* pool; struct wl_buffer* buffer; int stride = image->width * 4; int length = image->width * image->height * 4; void* data; int fd, i; fd = createAnonymousFile(length); if (fd < 0) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Creating a buffer file for %d B failed: %s", length, strerror(errno)); return NULL; } data = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (data == MAP_FAILED) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: mmap failed: %s", strerror(errno)); close(fd); return NULL; } pool = wl_shm_create_pool(_glfw.wl.shm, fd, length); close(fd); unsigned char* source = (unsigned char*) image->pixels; unsigned char* target = data; for (i = 0; i < image->width * image->height; i++, source += 4) { unsigned int alpha = source[3]; *target++ = (unsigned char) ((source[2] * alpha) / 255); *target++ = (unsigned char) ((source[1] * alpha) / 255); *target++ = (unsigned char) ((source[0] * alpha) / 255); *target++ = (unsigned char) alpha; } buffer = wl_shm_pool_create_buffer(pool, 0, image->width, image->height, stride, WL_SHM_FORMAT_ARGB8888); munmap(data, length); wl_shm_pool_destroy(pool); return buffer; } static void createDecoration(_GLFWdecorationWayland* decoration, struct wl_surface* parent, struct wl_buffer* buffer, bool opaque, int x, int y, int width, int height) { struct wl_region* region; decoration->surface = wl_compositor_create_surface(_glfw.wl.compositor); decoration->subsurface = wl_subcompositor_get_subsurface(_glfw.wl.subcompositor, decoration->surface, parent); wl_subsurface_set_position(decoration->subsurface, x, y); decoration->viewport = wp_viewporter_get_viewport(_glfw.wl.viewporter, decoration->surface); wp_viewport_set_destination(decoration->viewport, width, height); wl_surface_attach(decoration->surface, buffer, 0, 0); if (opaque) { region = wl_compositor_create_region(_glfw.wl.compositor); wl_region_add(region, 0, 0, width, height); wl_surface_set_opaque_region(decoration->surface, region); wl_surface_commit(decoration->surface); wl_region_destroy(region); } else wl_surface_commit(decoration->surface); } static void createDecorations(_GLFWwindow* window) { unsigned char data[] = { 224, 224, 224, 255 }; const GLFWimage image = { 1, 1, data }; bool opaque = (data[3] == 255); if (!_glfw.wl.viewporter || !window->decorated || window->wl.decorations.serverSide) return; if (!window->wl.decorations.buffer) window->wl.decorations.buffer = createShmBuffer(&image); if (!window->wl.decorations.buffer) return; createDecoration(&window->wl.decorations.top, window->wl.surface, window->wl.decorations.buffer, opaque, 0, -_GLFW_DECORATION_TOP, window->wl.width, _GLFW_DECORATION_TOP); createDecoration(&window->wl.decorations.left, window->wl.surface, window->wl.decorations.buffer, opaque, -_GLFW_DECORATION_WIDTH, -_GLFW_DECORATION_TOP, _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); createDecoration(&window->wl.decorations.right, window->wl.surface, window->wl.decorations.buffer, opaque, window->wl.width, -_GLFW_DECORATION_TOP, _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); createDecoration(&window->wl.decorations.bottom, window->wl.surface, window->wl.decorations.buffer, opaque, -_GLFW_DECORATION_WIDTH, window->wl.height, window->wl.width + _GLFW_DECORATION_HORIZONTAL, _GLFW_DECORATION_WIDTH); } static void destroyDecoration(_GLFWdecorationWayland* decoration) { if (decoration->surface) wl_surface_destroy(decoration->surface); if (decoration->subsurface) wl_subsurface_destroy(decoration->subsurface); if (decoration->viewport) wp_viewport_destroy(decoration->viewport); decoration->surface = NULL; decoration->subsurface = NULL; decoration->viewport = NULL; } static void destroyDecorations(_GLFWwindow* window) { destroyDecoration(&window->wl.decorations.top); destroyDecoration(&window->wl.decorations.left); destroyDecoration(&window->wl.decorations.right); destroyDecoration(&window->wl.decorations.bottom); } static void xdgDecorationHandleConfigure(void* data, struct zxdg_toplevel_decoration_v1* decoration UNUSED, uint32_t mode) { _GLFWwindow* window = data; window->wl.decorations.serverSide = (mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); if (!window->wl.decorations.serverSide) createDecorations(window); } static const struct zxdg_toplevel_decoration_v1_listener xdgDecorationListener = { xdgDecorationHandleConfigure, }; static void handleEnter(void *data, struct wl_surface *surface UNUSED, struct wl_output *output) { _GLFWwindow* window = data; _GLFWmonitor* monitor = wl_output_get_user_data(output); if (window->wl.monitorsCount + 1 > window->wl.monitorsSize) { ++window->wl.monitorsSize; window->wl.monitors = realloc(window->wl.monitors, window->wl.monitorsSize * sizeof(_GLFWmonitor*)); } window->wl.monitors[window->wl.monitorsCount++] = monitor; if (checkScaleChange(window)) { resizeFramebuffer(window); _glfwInputWindowContentScale(window, window->wl.scale, window->wl.scale); } } static void handleLeave(void *data, struct wl_surface *surface UNUSED, struct wl_output *output) { _GLFWwindow* window = data; _GLFWmonitor* monitor = wl_output_get_user_data(output); bool found; int i; for (i = 0, found = false; i < window->wl.monitorsCount - 1; ++i) { if (monitor == window->wl.monitors[i]) found = true; if (found) window->wl.monitors[i] = window->wl.monitors[i + 1]; } window->wl.monitors[--window->wl.monitorsCount] = NULL; if (checkScaleChange(window)) { resizeFramebuffer(window); _glfwInputWindowContentScale(window, window->wl.scale, window->wl.scale); } } static const struct wl_surface_listener surfaceListener = { handleEnter, handleLeave }; static void setIdleInhibitor(_GLFWwindow* window, bool enable) { if (enable && !window->wl.idleInhibitor && _glfw.wl.idleInhibitManager) { window->wl.idleInhibitor = zwp_idle_inhibit_manager_v1_create_inhibitor( _glfw.wl.idleInhibitManager, window->wl.surface); if (!window->wl.idleInhibitor) _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Idle inhibitor creation failed"); } else if (!enable && window->wl.idleInhibitor) { zwp_idle_inhibitor_v1_destroy(window->wl.idleInhibitor); window->wl.idleInhibitor = NULL; } } static bool createSurface(_GLFWwindow* window, const _GLFWwndconfig* wndconfig) { window->wl.surface = wl_compositor_create_surface(_glfw.wl.compositor); if (!window->wl.surface) return false; wl_surface_add_listener(window->wl.surface, &surfaceListener, window); wl_surface_set_user_data(window->wl.surface, window); window->wl.native = wl_egl_window_create(window->wl.surface, wndconfig->width, wndconfig->height); if (!window->wl.native) return false; window->wl.width = wndconfig->width; window->wl.height = wndconfig->height; window->wl.scale = 1; if (!window->wl.transparent) setOpaqueRegion(window); return true; } static void setFullscreen(_GLFWwindow* window, _GLFWmonitor* monitor, bool on) { if (window->wl.xdg.toplevel) { if (on) { xdg_toplevel_set_fullscreen( window->wl.xdg.toplevel, monitor ? monitor->wl.output : NULL); if (!window->wl.decorations.serverSide) destroyDecorations(window); } else { xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); if (!_glfw.wl.decorationManager) createDecorations(window); } } setIdleInhibitor(window, on); } bool _glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) { bool already_fullscreen = window->wl.fullscreened; setFullscreen(window, NULL, !already_fullscreen); return !already_fullscreen; } static void xdgToplevelHandleConfigure(void* data, struct xdg_toplevel* toplevel UNUSED, int32_t width, int32_t height, struct wl_array* states) { _GLFWwindow* window = data; float aspectRatio; float targetRatio; uint32_t* state; bool maximized = false; bool fullscreen = false; bool activated = false; wl_array_for_each(state, states) { switch (*state) { case XDG_TOPLEVEL_STATE_MAXIMIZED: maximized = true; break; case XDG_TOPLEVEL_STATE_FULLSCREEN: fullscreen = true; break; case XDG_TOPLEVEL_STATE_RESIZING: break; case XDG_TOPLEVEL_STATE_ACTIVATED: activated = true; break; } } if (width != 0 && height != 0) { if (!maximized && !fullscreen) { if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) { aspectRatio = (float)width / (float)height; targetRatio = (float)window->numer / (float)window->denom; if (aspectRatio < targetRatio) height = (int32_t)((float)width / targetRatio); else if (aspectRatio > targetRatio) width = (int32_t)((float)height * targetRatio); } } } window->wl.fullscreened = fullscreen; if (!fullscreen) { if (window->decorated && !window->wl.decorations.serverSide && window->wl.decorations.buffer) { width -= _GLFW_DECORATION_HORIZONTAL; height -= _GLFW_DECORATION_VERTICAL; } } dispatchChangesAfterConfigure(window, width, height); _glfwInputWindowFocus(window, activated); } static void xdgToplevelHandleClose(void* data, struct xdg_toplevel* toplevel UNUSED) { _GLFWwindow* window = data; _glfwInputWindowCloseRequest(window); } static const struct xdg_toplevel_listener xdgToplevelListener = { xdgToplevelHandleConfigure, xdgToplevelHandleClose }; static void xdgSurfaceHandleConfigure(void* data UNUSED, struct xdg_surface* surface, uint32_t serial) { xdg_surface_ack_configure(surface, serial); } static const struct xdg_surface_listener xdgSurfaceListener = { xdgSurfaceHandleConfigure }; static void setXdgDecorations(_GLFWwindow* window) { if (_glfw.wl.decorationManager) { window->wl.xdg.decoration = zxdg_decoration_manager_v1_get_toplevel_decoration( _glfw.wl.decorationManager, window->wl.xdg.toplevel); zxdg_toplevel_decoration_v1_add_listener(window->wl.xdg.decoration, &xdgDecorationListener, window); zxdg_toplevel_decoration_v1_set_mode( window->wl.xdg.decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); } else { window->wl.decorations.serverSide = false; createDecorations(window); } } static bool createXdgSurface(_GLFWwindow* window) { window->wl.xdg.surface = xdg_wm_base_get_xdg_surface(_glfw.wl.wmBase, window->wl.surface); if (!window->wl.xdg.surface) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: xdg-surface creation failed"); return false; } xdg_surface_add_listener(window->wl.xdg.surface, &xdgSurfaceListener, window); window->wl.xdg.toplevel = xdg_surface_get_toplevel(window->wl.xdg.surface); if (!window->wl.xdg.toplevel) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: xdg-toplevel creation failed"); return false; } xdg_toplevel_add_listener(window->wl.xdg.toplevel, &xdgToplevelListener, window); if (window->wl.title) xdg_toplevel_set_title(window->wl.xdg.toplevel, window->wl.title); if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE) xdg_toplevel_set_min_size(window->wl.xdg.toplevel, window->minwidth, window->minheight); if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) xdg_toplevel_set_max_size(window->wl.xdg.toplevel, window->maxwidth, window->maxheight); if (window->monitor) { xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, window->monitor->wl.output); setIdleInhibitor(window, true); } else if (window->wl.maximized) { xdg_toplevel_set_maximized(window->wl.xdg.toplevel); setIdleInhibitor(window, false); setXdgDecorations(window); } else { setIdleInhibitor(window, false); setXdgDecorations(window); } if (strlen(window->wl.appId)) xdg_toplevel_set_app_id(window->wl.xdg.toplevel, window->wl.appId); wl_surface_commit(window->wl.surface); wl_display_roundtrip(_glfw.wl.display); return true; } static void setCursorImage(_GLFWcursorWayland* cursorWayland) { struct wl_cursor_image* image; struct wl_buffer* buffer; struct wl_surface* surface = _glfw.wl.cursorSurface; if (!cursorWayland->cursor) { buffer = cursorWayland->buffer; toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, 0); } else { image = cursorWayland->cursor->images[cursorWayland->currentImage]; buffer = wl_cursor_image_get_buffer(image); if (image->delay) { changeTimerInterval(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, ms_to_monotonic_t(image->delay)); toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, 1); } else { toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, 0); } if (!buffer) return; cursorWayland->width = image->width; cursorWayland->height = image->height; cursorWayland->xhot = image->hotspot_x; cursorWayland->yhot = image->hotspot_y; } wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerSerial, surface, cursorWayland->xhot, cursorWayland->yhot); wl_surface_attach(surface, buffer, 0, 0); wl_surface_damage(surface, 0, 0, cursorWayland->width, cursorWayland->height); wl_surface_commit(surface); } static void incrementCursorImage(_GLFWwindow* window) { if (window && window->wl.decorations.focus == mainWindow) { _GLFWcursor* cursor = window->wl.currentCursor; if (cursor && cursor->wl.cursor) { cursor->wl.currentImage += 1; cursor->wl.currentImage %= cursor->wl.cursor->image_count; setCursorImage(&cursor->wl); toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, cursor->wl.cursor->image_count > 1); return; } } toggleTimer(&_glfw.wl.eventLoopData, _glfw.wl.cursorAnimationTimer, 1); } void animateCursorImage(id_type timer_id UNUSED, void *data UNUSED) { incrementCursorImage(_glfw.wl.pointerFocus); } static void abortOnFatalError(int last_error) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: fatal display error: %s", strerror(last_error)); _GLFWwindow* window = _glfw.windowListHead; while (window) { _glfwInputWindowCloseRequest(window); window = window->next; } // ensure the tick callback is called _glfw.wl.eventLoopData.wakeup_data_read = true; } static void handleEvents(monotonic_t timeout) { struct wl_display* display = _glfw.wl.display; errno = 0; EVDBG("starting handleEvents(%.2f)", monotonic_t_to_s_double(timeout)); while (wl_display_prepare_read(display) != 0) { while(1) { errno = 0; int num_dispatched = wl_display_dispatch_pending(display); if (num_dispatched < 0) { if (errno == EAGAIN) continue; int last_error = wl_display_get_error(display); if (last_error) abortOnFatalError(last_error); wl_display_cancel_read(display); return; } break; } } // If an error different from EAGAIN happens, we have likely been // disconnected from the Wayland session, try to handle that the best we // can. errno = 0; if (wl_display_flush(display) < 0 && errno != EAGAIN) { abortOnFatalError(errno); wl_display_cancel_read(display); return; } bool display_read_ok = pollForEvents(&_glfw.wl.eventLoopData, timeout); EVDBG("display_read_ok: %d", display_read_ok); if (display_read_ok) { wl_display_read_events(display); int num = wl_display_dispatch_pending(display); (void)num; EVDBG("dispatched %d Wayland events", num); } else { wl_display_cancel_read(display); } glfw_ibus_dispatch(&_glfw.wl.xkb.ibus); glfw_dbus_session_bus_dispatch(); EVDBG("other dispatch done"); if (_glfw.wl.eventLoopData.wakeup_fd_ready) check_for_wakeup_events(&_glfw.wl.eventLoopData); } static struct wl_cursor* try_cursor_names(int arg_count, ...) { struct wl_cursor* ans = NULL; va_list ap; va_start(ap, arg_count); for (int i = 0; i < arg_count && !ans; i++) { const char *name = va_arg(ap, const char *); ans = wl_cursor_theme_get_cursor(_glfw.wl.cursorTheme, name); } va_end(ap); return ans; } struct wl_cursor* _glfwLoadCursor(GLFWCursorShape shape) { static bool warnings[GLFW_INVALID_CURSOR] = {0}; #define NUMARGS(...) (sizeof((const char*[]){__VA_ARGS__})/sizeof(const char*)) #define C(name, ...) case name: { \ ans = try_cursor_names(NUMARGS(__VA_ARGS__), __VA_ARGS__); \ if (!ans && !warnings[name]) {\ _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Could not find standard cursor: %s", #name); \ warnings[name] = true; \ } \ break; } struct wl_cursor* ans = NULL; switch (shape) { C(GLFW_ARROW_CURSOR, "arrow", "left_ptr", "default") C(GLFW_IBEAM_CURSOR, "xterm", "ibeam", "text") C(GLFW_CROSSHAIR_CURSOR, "crosshair", "cross") C(GLFW_HAND_CURSOR, "hand2", "grab", "grabbing", "closedhand") C(GLFW_HRESIZE_CURSOR, "sb_h_double_arrow", "h_double_arrow", "col-resize") C(GLFW_VRESIZE_CURSOR, "sb_v_double_arrow", "v_double_arrow", "row-resize") C(GLFW_NW_RESIZE_CURSOR, "top_left_corner", "nw-resize") C(GLFW_NE_RESIZE_CURSOR, "top_right_corner", "ne-resize") C(GLFW_SW_RESIZE_CURSOR, "bottom_left_corner", "sw-resize") C(GLFW_SE_RESIZE_CURSOR, "bottom_right_corner", "se-resize") case GLFW_INVALID_CURSOR: break; } return ans; #undef NUMARGS #undef C } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { window->wl.transparent = fbconfig->transparent; strncpy(window->wl.appId, wndconfig->wl.appId, sizeof(window->wl.appId)); if (!createSurface(window, wndconfig)) return false; if (ctxconfig->client != GLFW_NO_API) { if (ctxconfig->source == GLFW_EGL_CONTEXT_API || ctxconfig->source == GLFW_NATIVE_CONTEXT_API) { if (!_glfwInitEGL()) return false; if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) return false; } else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { if (!_glfwInitOSMesa()) return false; if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return false; } } if (wndconfig->title) window->wl.title = _glfw_strdup(wndconfig->title); if (wndconfig->visible) { if (!createXdgSurface(window)) return false; window->wl.visible = true; } else { window->wl.xdg.surface = NULL; window->wl.xdg.toplevel = NULL; window->wl.visible = false; } window->wl.currentCursor = NULL; window->wl.monitors = calloc(1, sizeof(_GLFWmonitor*)); window->wl.monitorsCount = 0; window->wl.monitorsSize = 1; return true; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (window == _glfw.wl.pointerFocus) { _glfw.wl.pointerFocus = NULL; _glfwInputCursorEnter(window, false); } if (window == _glfw.wl.keyboardFocus) { _glfw.wl.keyboardFocus = NULL; _glfwInputWindowFocus(window, false); } if (window->wl.idleInhibitor) zwp_idle_inhibitor_v1_destroy(window->wl.idleInhibitor); if (window->context.destroy) window->context.destroy(window); destroyDecorations(window); if (window->wl.xdg.decoration) zxdg_toplevel_decoration_v1_destroy(window->wl.xdg.decoration); if (window->wl.decorations.buffer) wl_buffer_destroy(window->wl.decorations.buffer); if (window->wl.native) wl_egl_window_destroy(window->wl.native); if (window->wl.xdg.toplevel) xdg_toplevel_destroy(window->wl.xdg.toplevel); if (window->wl.xdg.surface) xdg_surface_destroy(window->wl.xdg.surface); if (window->wl.surface) wl_surface_destroy(window->wl.surface); free(window->wl.title); free(window->wl.monitors); if (window->wl.frameCallbackData.current_wl_callback) wl_callback_destroy(window->wl.frameCallbackData.current_wl_callback); } void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) { if (window->wl.title) free(window->wl.title); window->wl.title = _glfw_strdup(title); if (window->wl.xdg.toplevel) xdg_toplevel_set_title(window->wl.xdg.toplevel, title); } void _glfwPlatformSetWindowIcon(_GLFWwindow* window UNUSED, int count UNUSED, const GLFWimage* images UNUSED) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Setting window icon not supported"); } void _glfwPlatformGetWindowPos(_GLFWwindow* window UNUSED, int* xpos UNUSED, int* ypos UNUSED) { // A Wayland client is not aware of its position, so just warn and leave it // as (0, 0) _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Window position retrieval not supported"); } void _glfwPlatformSetWindowPos(_GLFWwindow* window UNUSED, int xpos UNUSED, int ypos UNUSED) { // A Wayland client can not set its position, so just warn _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Window position setting not supported"); } void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) { if (width) *width = window->wl.width; if (height) *height = window->wl.height; } void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { if (width != window->wl.width || height != window->wl.height) { window->wl.width = width; window->wl.height = height; resizeFramebuffer(window); } } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight) { if (window->wl.xdg.toplevel) { if (minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE) minwidth = minheight = 0; if (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE) maxwidth = maxheight = 0; xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight); xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight); wl_surface_commit(window->wl.surface); } } void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window UNUSED, int numer UNUSED, int denom UNUSED) { // TODO: find out how to trigger a resize. // The actual limits are checked in the xdg_toplevel::configure handler. } void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { _glfwPlatformGetWindowSize(window, width, height); *width *= window->wl.scale; *height *= window->wl.scale; } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom) { if (window->decorated && !window->monitor && !window->wl.decorations.serverSide) { if (top) *top = _GLFW_DECORATION_TOP; if (left) *left = _GLFW_DECORATION_WIDTH; if (right) *right = _GLFW_DECORATION_WIDTH; if (bottom) *bottom = _GLFW_DECORATION_WIDTH; } } void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, float* xscale, float* yscale) { if (xscale) *xscale = (float) window->wl.scale; if (yscale) *yscale = (float) window->wl.scale; } monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window UNUSED) { return ms_to_monotonic_t(500ll); } void _glfwPlatformIconifyWindow(_GLFWwindow* window) { if (window->wl.xdg.toplevel) xdg_toplevel_set_minimized(window->wl.xdg.toplevel); } void _glfwPlatformRestoreWindow(_GLFWwindow* window) { if (window->wl.xdg.toplevel) { if (window->monitor) xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); if (window->wl.maximized) xdg_toplevel_unset_maximized(window->wl.xdg.toplevel); // There is no way to unset minimized, or even to know if we are // minimized, so there is nothing to do in this case. } _glfwInputWindowMonitor(window, NULL); window->wl.maximized = false; } void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { if (window->wl.xdg.toplevel) { xdg_toplevel_set_maximized(window->wl.xdg.toplevel); } window->wl.maximized = true; } void _glfwPlatformShowWindow(_GLFWwindow* window) { if (!window->wl.visible) { createXdgSurface(window); window->wl.visible = true; } } void _glfwPlatformHideWindow(_GLFWwindow* window) { if (window->wl.xdg.toplevel) { xdg_toplevel_destroy(window->wl.xdg.toplevel); xdg_surface_destroy(window->wl.xdg.surface); window->wl.xdg.toplevel = NULL; window->wl.xdg.surface = NULL; } window->wl.visible = false; } void _glfwPlatformRequestWindowAttention(_GLFWwindow* window UNUSED) { // TODO static bool notified = false; if (!notified) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Window attention request not implemented yet"); notified = true; } } int _glfwPlatformWindowBell(_GLFWwindow* window UNUSED) { // TODO: Use an actual Wayland API to implement this when one becomes available static char tty[L_ctermid + 1]; int fd = open(ctermid(tty), O_WRONLY | O_CLOEXEC); if (fd > -1) { int ret = write(fd, "\x07", 1) == 1 ? true : false; close(fd); return ret; } return false; } void _glfwPlatformFocusWindow(_GLFWwindow* window UNUSED) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Focusing a window requires user interaction"); } void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos UNUSED, int ypos UNUSED, int width UNUSED, int height UNUSED, int refreshRate UNUSED) { setFullscreen(window, monitor, monitor != NULL); _glfwInputWindowMonitor(window, monitor); } int _glfwPlatformWindowFocused(_GLFWwindow* window) { return _glfw.wl.keyboardFocus == window; } int _glfwPlatformWindowOccluded(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowIconified(_GLFWwindow* window UNUSED) { // xdg-shell doesn’t give any way to request whether a surface is // iconified. return false; } int _glfwPlatformWindowVisible(_GLFWwindow* window) { return window->wl.visible; } int _glfwPlatformWindowMaximized(_GLFWwindow* window) { return window->wl.maximized; } int _glfwPlatformWindowHovered(_GLFWwindow* window) { return window->wl.hovered; } int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { return window->wl.transparent; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window UNUSED, bool enabled UNUSED) { // TODO _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Window attribute setting not implemented yet"); } void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, bool enabled) { if (!window->monitor) { if (enabled) createDecorations(window); else destroyDecorations(window); } } void _glfwPlatformSetWindowFloating(_GLFWwindow* window UNUSED, bool enabled UNUSED) { // TODO _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Window attribute setting not implemented yet"); } float _glfwPlatformGetWindowOpacity(_GLFWwindow* window UNUSED) { return 1.f; } void _glfwPlatformSetWindowOpacity(_GLFWwindow* window UNUSED, float opacity UNUSED) { } void _glfwPlatformPollEvents(void) { wl_display_dispatch_pending(_glfw.wl.display); handleEvents(0); } void _glfwPlatformWaitEvents(void) { monotonic_t timeout = wl_display_dispatch_pending(_glfw.wl.display) > 0 ? 0 : -1; handleEvents(timeout); } void _glfwPlatformWaitEventsTimeout(monotonic_t timeout) { if (wl_display_dispatch_pending(_glfw.wl.display) > 0) timeout = 0; handleEvents(timeout); } void _glfwPlatformPostEmptyEvent(void) { wakeupEventLoop(&_glfw.wl.eventLoopData); } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) { if (xpos) *xpos = window->wl.cursorPosX; if (ypos) *ypos = window->wl.cursorPosY; } static bool isPointerLocked(_GLFWwindow* window); void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) { if (isPointerLocked(window)) { zwp_locked_pointer_v1_set_cursor_position_hint( window->wl.pointerLock.lockedPointer, wl_fixed_from_double(x), wl_fixed_from_double(y)); wl_surface_commit(window->wl.surface); } } void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode UNUSED) { _glfwPlatformSetCursor(window, window->wl.currentCursor); } const char* _glfwPlatformGetNativeKeyName(int native_key) { return glfw_xkb_keysym_name(native_key); } int _glfwPlatformGetNativeKeyForKey(int key) { return glfw_xkb_sym_for_key(key); } int _glfwPlatformCreateCursor(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot, int count UNUSED) { cursor->wl.buffer = createShmBuffer(image); if (!cursor->wl.buffer) return false; cursor->wl.width = image->width; cursor->wl.height = image->height; cursor->wl.xhot = xhot; cursor->wl.yhot = yhot; return true; } int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, GLFWCursorShape shape) { struct wl_cursor* standardCursor; standardCursor = _glfwLoadCursor(shape); if (!standardCursor) return false; cursor->wl.cursor = standardCursor; cursor->wl.currentImage = 0; return true; } void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) { // If it's a standard cursor we don't need to do anything here if (cursor->wl.cursor) return; if (cursor->wl.buffer) wl_buffer_destroy(cursor->wl.buffer); } static void handleRelativeMotion(void* data, struct zwp_relative_pointer_v1* pointer UNUSED, uint32_t timeHi UNUSED, uint32_t timeLo UNUSED, wl_fixed_t dx UNUSED, wl_fixed_t dy UNUSED, wl_fixed_t dxUnaccel, wl_fixed_t dyUnaccel) { _GLFWwindow* window = data; if (window->cursorMode != GLFW_CURSOR_DISABLED) return; _glfwInputCursorPos(window, window->virtualCursorPosX + wl_fixed_to_double(dxUnaccel), window->virtualCursorPosY + wl_fixed_to_double(dyUnaccel)); } static const struct zwp_relative_pointer_v1_listener relativePointerListener = { handleRelativeMotion }; static void handleLocked(void* data UNUSED, struct zwp_locked_pointer_v1* lockedPointer UNUSED) { } static void unlockPointer(_GLFWwindow* window) { struct zwp_relative_pointer_v1* relativePointer = window->wl.pointerLock.relativePointer; struct zwp_locked_pointer_v1* lockedPointer = window->wl.pointerLock.lockedPointer; zwp_relative_pointer_v1_destroy(relativePointer); zwp_locked_pointer_v1_destroy(lockedPointer); window->wl.pointerLock.relativePointer = NULL; window->wl.pointerLock.lockedPointer = NULL; } static void lockPointer(_GLFWwindow* window UNUSED); static void handleUnlocked(void* data UNUSED, struct zwp_locked_pointer_v1* lockedPointer UNUSED) { } static const struct zwp_locked_pointer_v1_listener lockedPointerListener = { handleLocked, handleUnlocked }; static void lockPointer(_GLFWwindow* window) { struct zwp_relative_pointer_v1* relativePointer; struct zwp_locked_pointer_v1* lockedPointer; if (!_glfw.wl.relativePointerManager) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: no relative pointer manager"); return; } relativePointer = zwp_relative_pointer_manager_v1_get_relative_pointer( _glfw.wl.relativePointerManager, _glfw.wl.pointer); zwp_relative_pointer_v1_add_listener(relativePointer, &relativePointerListener, window); lockedPointer = zwp_pointer_constraints_v1_lock_pointer( _glfw.wl.pointerConstraints, window->wl.surface, _glfw.wl.pointer, NULL, ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT); zwp_locked_pointer_v1_add_listener(lockedPointer, &lockedPointerListener, window); window->wl.pointerLock.relativePointer = relativePointer; window->wl.pointerLock.lockedPointer = lockedPointer; wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerSerial, NULL, 0, 0); } static bool isPointerLocked(_GLFWwindow* window) { return window->wl.pointerLock.lockedPointer != NULL; } void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor) { struct wl_cursor* defaultCursor; if (!_glfw.wl.pointer) return; window->wl.currentCursor = cursor; // If we're not in the correct window just save the cursor // the next time the pointer enters the window the cursor will change if (window != _glfw.wl.pointerFocus || window->wl.decorations.focus != mainWindow) return; // Unlock possible pointer lock if no longer disabled. if (window->cursorMode != GLFW_CURSOR_DISABLED && isPointerLocked(window)) unlockPointer(window); if (window->cursorMode == GLFW_CURSOR_NORMAL) { if (cursor) setCursorImage(&cursor->wl); else { defaultCursor = _glfwLoadCursor(GLFW_ARROW_CURSOR); if (!defaultCursor) return; _GLFWcursorWayland cursorWayland = { defaultCursor, NULL, 0, 0, 0, 0, 0 }; setCursorImage(&cursorWayland); } } else if (window->cursorMode == GLFW_CURSOR_DISABLED) { if (!isPointerLocked(window)) lockPointer(window); } else if (window->cursorMode == GLFW_CURSOR_HIDDEN) { wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerSerial, NULL, 0, 0); } } static void send_text(char *text, int fd) { if (text) { size_t len = strlen(text), pos = 0; monotonic_t start = glfwGetTime(); while (pos < len && glfwGetTime() - start < s_to_monotonic_t(2ll)) { ssize_t ret = write(fd, text + pos, len - pos); if (ret < 0) { if (errno == EAGAIN || errno == EINTR) continue; _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Could not copy writing to destination fd failed with error: %s", strerror(errno)); break; } if (ret > 0) { start = glfwGetTime(); pos += ret; } } } close(fd); } static void _glfwSendClipboardText(void *data UNUSED, struct wl_data_source *data_source UNUSED, const char *mime_type UNUSED, int fd) { send_text(_glfw.wl.clipboardString, fd); } static void _glfwSendPrimarySelectionText(void *data UNUSED, struct zwp_primary_selection_source_v1 *primary_selection_source UNUSED, const char *mime_type UNUSED, int fd) { send_text(_glfw.wl.primarySelectionString, fd); } static char* read_offer_string(int data_pipe) { wl_display_flush(_glfw.wl.display); size_t sz = 0, capacity = 0; char *buf = NULL; struct pollfd fds; fds.fd = data_pipe; fds.events = POLLIN; monotonic_t start = glfwGetTime(); #define bail(...) { \ _glfwInputError(GLFW_PLATFORM_ERROR, __VA_ARGS__); \ free(buf); buf = NULL; \ close(data_pipe); \ return NULL; \ } while (glfwGetTime() - start < s_to_monotonic_t(2ll)) { int ret = poll(&fds, 1, 2000); if (ret == -1) { if (errno == EINTR) continue; bail("Wayland: Failed to poll clipboard data from pipe with error: %s", strerror(errno)); } if (!ret) { bail("Wayland: Failed to read clipboard data from pipe (timed out)"); } if (capacity <= sz || capacity - sz <= 64) { capacity += 4096; buf = realloc(buf, capacity); if (!buf) { bail("Wayland: Failed to allocate memory to read clipboard data"); } } ret = read(data_pipe, buf + sz, capacity - sz - 1); if (ret == -1) { if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) continue; bail("Wayland: Failed to read clipboard data from pipe with error: %s", strerror(errno)); } if (ret == 0) { close(data_pipe); buf[sz] = 0; return buf; } sz += ret; start = glfwGetTime(); } bail("Wayland: Failed to read clipboard data from pipe (timed out)"); #undef bail } static char* read_primary_selection_offer(struct zwp_primary_selection_offer_v1 *primary_selection_offer, const char *mime) { int pipefd[2]; if (pipe2(pipefd, O_CLOEXEC) != 0) return NULL; zwp_primary_selection_offer_v1_receive(primary_selection_offer, mime, pipefd[1]); close(pipefd[1]); return read_offer_string(pipefd[0]); } static char* read_data_offer(struct wl_data_offer *data_offer, const char *mime) { int pipefd[2]; if (pipe2(pipefd, O_CLOEXEC) != 0) return NULL; wl_data_offer_receive(data_offer, mime, pipefd[1]); close(pipefd[1]); return read_offer_string(pipefd[0]); } static void data_source_canceled(void *data UNUSED, struct wl_data_source *wl_data_source) { if (_glfw.wl.dataSourceForClipboard == wl_data_source) _glfw.wl.dataSourceForClipboard = NULL; wl_data_source_destroy(wl_data_source); } static void primary_selection_source_canceled(void *data UNUSED, struct zwp_primary_selection_source_v1 *primary_selection_source) { if (_glfw.wl.dataSourceForPrimarySelection == primary_selection_source) _glfw.wl.dataSourceForPrimarySelection = NULL; zwp_primary_selection_source_v1_destroy(primary_selection_source); } static void data_source_target(void *data UNUSED, struct wl_data_source *wl_data_source UNUSED, const char* mime UNUSED) { } static const struct wl_data_source_listener data_source_listener = { .send = _glfwSendClipboardText, .cancelled = data_source_canceled, .target = data_source_target, }; static const struct zwp_primary_selection_source_v1_listener primary_selection_source_listener = { .send = _glfwSendPrimarySelectionText, .cancelled = primary_selection_source_canceled, }; static void prune_unclaimed_data_offers(void) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id && !_glfw.wl.dataOffers[i].offer_type) { wl_data_offer_destroy(_glfw.wl.dataOffers[i].id); memset(_glfw.wl.dataOffers + i, 0, sizeof(_glfw.wl.dataOffers[0])); } } } static void prune_unclaimed_primary_selection_offers(void) { for (size_t i = 0; i < arraysz(_glfw.wl.primarySelectionOffers); i++) { if (_glfw.wl.primarySelectionOffers[i].id && !_glfw.wl.dataOffers[i].offer_type) { zwp_primary_selection_offer_v1_destroy(_glfw.wl.primarySelectionOffers[i].id); memset(_glfw.wl.primarySelectionOffers + i, 0, sizeof(_glfw.wl.primarySelectionOffers[0])); } } } static void mark_selection_offer(void *data UNUSED, struct wl_data_device *data_device UNUSED, struct wl_data_offer *data_offer) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id == data_offer) { _glfw.wl.dataOffers[i].offer_type = CLIPBOARD; } else if (_glfw.wl.dataOffers[i].offer_type == CLIPBOARD) { _glfw.wl.dataOffers[i].offer_type = EXPIRED; // previous selection offer } } prune_unclaimed_data_offers(); } static void mark_primary_selection_offer(void *data UNUSED, struct zwp_primary_selection_device_v1* primary_selection_device UNUSED, struct zwp_primary_selection_offer_v1 *primary_selection_offer) { for (size_t i = 0; i < arraysz(_glfw.wl.primarySelectionOffers); i++) { if (_glfw.wl.primarySelectionOffers[i].id == primary_selection_offer) { _glfw.wl.primarySelectionOffers[i].offer_type = PRIMARY_SELECTION; } else if (_glfw.wl.primarySelectionOffers[i].offer_type == PRIMARY_SELECTION) { _glfw.wl.primarySelectionOffers[i].offer_type = EXPIRED; // previous selection offer } } prune_unclaimed_primary_selection_offers(); } static void set_offer_mimetype(struct _GLFWWaylandDataOffer* offer, const char* mime) { if (strcmp(mime, "text/plain;charset=utf-8") == 0) offer->mime = "text/plain;charset=utf-8"; else if (!offer->mime && strcmp(mime, "text/plain") == 0) offer->mime = "text/plain"; else if (strcmp(mime, clipboard_mime()) == 0) offer->is_self_offer = 1; else if (strcmp(mime, URI_LIST_MIME) == 0) offer->has_uri_list = 1; } static void handle_offer_mimetype(void *data UNUSED, struct wl_data_offer* id, const char *mime) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id == id) { set_offer_mimetype(&_glfw.wl.dataOffers[i], mime); break; } } } static void handle_primary_selection_offer_mimetype(void *data UNUSED, struct zwp_primary_selection_offer_v1* id, const char *mime) { for (size_t i = 0; i < arraysz(_glfw.wl.primarySelectionOffers); i++) { if (_glfw.wl.primarySelectionOffers[i].id == id) { set_offer_mimetype((struct _GLFWWaylandDataOffer*)&_glfw.wl.primarySelectionOffers[i], mime); break; } } } static void data_offer_source_actions(void *data UNUSED, struct wl_data_offer* id, uint32_t actions) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id == id) { _glfw.wl.dataOffers[i].source_actions = actions; break; } } } static void data_offer_action(void *data UNUSED, struct wl_data_offer* id, uint32_t action) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id == id) { _glfw.wl.dataOffers[i].dnd_action = action; break; } } } static const struct wl_data_offer_listener data_offer_listener = { .offer = handle_offer_mimetype, .source_actions = data_offer_source_actions, .action = data_offer_action, }; static const struct zwp_primary_selection_offer_v1_listener primary_selection_offer_listener = { .offer = handle_primary_selection_offer_mimetype, }; static void handle_data_offer(void *data UNUSED, struct wl_data_device *wl_data_device UNUSED, struct wl_data_offer *id) { size_t smallest_idx = SIZE_MAX, pos = 0; for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].idx && _glfw.wl.dataOffers[i].idx < smallest_idx) { smallest_idx = _glfw.wl.dataOffers[i].idx; pos = i; } if (_glfw.wl.dataOffers[i].id == NULL) { _glfw.wl.dataOffers[i].id = id; _glfw.wl.dataOffers[i].idx = ++_glfw.wl.dataOffersCounter; goto end; } } if (_glfw.wl.dataOffers[pos].id) wl_data_offer_destroy(_glfw.wl.dataOffers[pos].id); memset(_glfw.wl.dataOffers + pos, 0, sizeof(_glfw.wl.dataOffers[0])); _glfw.wl.dataOffers[pos].id = id; _glfw.wl.dataOffers[pos].idx = ++_glfw.wl.dataOffersCounter; end: wl_data_offer_add_listener(id, &data_offer_listener, NULL); } static void handle_primary_selection_offer(void *data UNUSED, struct zwp_primary_selection_device_v1 *zwp_primary_selection_device_v1 UNUSED, struct zwp_primary_selection_offer_v1 *id) { size_t smallest_idx = SIZE_MAX, pos = 0; for (size_t i = 0; i < arraysz(_glfw.wl.primarySelectionOffers); i++) { if (_glfw.wl.primarySelectionOffers[i].idx && _glfw.wl.primarySelectionOffers[i].idx < smallest_idx) { smallest_idx = _glfw.wl.primarySelectionOffers[i].idx; pos = i; } if (_glfw.wl.primarySelectionOffers[i].id == NULL) { _glfw.wl.primarySelectionOffers[i].id = id; _glfw.wl.primarySelectionOffers[i].idx = ++_glfw.wl.primarySelectionOffersCounter; goto end; } } if (_glfw.wl.primarySelectionOffers[pos].id) zwp_primary_selection_offer_v1_destroy(_glfw.wl.primarySelectionOffers[pos].id); memset(_glfw.wl.primarySelectionOffers + pos, 0, sizeof(_glfw.wl.primarySelectionOffers[0])); _glfw.wl.primarySelectionOffers[pos].id = id; _glfw.wl.primarySelectionOffers[pos].idx = ++_glfw.wl.primarySelectionOffersCounter; end: zwp_primary_selection_offer_v1_add_listener(id, &primary_selection_offer_listener, NULL); } static void drag_enter(void *data UNUSED, struct wl_data_device *wl_data_device UNUSED, uint32_t serial, struct wl_surface *surface, wl_fixed_t x UNUSED, wl_fixed_t y UNUSED, struct wl_data_offer *id) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id == id) { _glfw.wl.dataOffers[i].offer_type = DRAG_AND_DROP; _glfw.wl.dataOffers[i].surface = surface; const char *mime = _glfw.wl.dataOffers[i].has_uri_list ? URI_LIST_MIME : NULL; wl_data_offer_accept(id, serial, mime); } else if (_glfw.wl.dataOffers[i].offer_type == DRAG_AND_DROP) { _glfw.wl.dataOffers[i].offer_type = EXPIRED; // previous drag offer } } prune_unclaimed_data_offers(); } static void drag_leave(void *data UNUSED, struct wl_data_device *wl_data_device UNUSED) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].offer_type == DRAG_AND_DROP) { wl_data_offer_destroy(_glfw.wl.dataOffers[i].id); memset(_glfw.wl.dataOffers + i, 0, sizeof(_glfw.wl.dataOffers[0])); } } } static void drop(void *data, struct wl_data_device *wl_data_device UNUSED) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].offer_type == DRAG_AND_DROP) { char *uri_list = read_data_offer(_glfw.wl.dataOffers[i].id, URI_LIST_MIME); if (uri_list) { wl_data_offer_finish(_glfw.wl.dataOffers[i].id); int count; char** paths = parseUriList(data, &count); _GLFWwindow* window = _glfw.windowListHead; while (window) { if (window->wl.surface == _glfw.wl.dataOffers[i].surface) { _glfwInputDrop(window, count, (const char**) paths); break; } window = window->next; } for (int k = 0; k < count; k++) free(paths[k]); free(paths); free(uri_list); } wl_data_offer_destroy(_glfw.wl.dataOffers[i].id); memset(_glfw.wl.dataOffers + i, 0, sizeof(_glfw.wl.dataOffers[0])); break; } } } static void motion(void *data UNUSED, struct wl_data_device *wl_data_device UNUSED, uint32_t time UNUSED, wl_fixed_t x UNUSED, wl_fixed_t y UNUSED) { } static const struct wl_data_device_listener data_device_listener = { .data_offer = handle_data_offer, .selection = mark_selection_offer, .enter = drag_enter, .motion = motion, .drop = drop, .leave = drag_leave, }; static const struct zwp_primary_selection_device_v1_listener primary_selection_device_listener = { .data_offer = handle_primary_selection_offer, .selection = mark_primary_selection_offer, }; static void clipboard_copy_callback_done(void *data, struct wl_callback *callback, uint32_t serial) { if (_glfw.wl.dataDevice && data == (void*)_glfw.wl.dataSourceForClipboard) { wl_data_device_set_selection(_glfw.wl.dataDevice, data, serial); } wl_callback_destroy(callback); } static void primary_selection_copy_callback_done(void *data, struct wl_callback *callback, uint32_t serial) { if (_glfw.wl.primarySelectionDevice && data == (void*)_glfw.wl.dataSourceForPrimarySelection) { zwp_primary_selection_device_v1_set_selection(_glfw.wl.primarySelectionDevice, data, serial); } wl_callback_destroy(callback); } void _glfwSetupWaylandDataDevice() { _glfw.wl.dataDevice = wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager, _glfw.wl.seat); if (_glfw.wl.dataDevice) wl_data_device_add_listener(_glfw.wl.dataDevice, &data_device_listener, NULL); } void _glfwSetupWaylandPrimarySelectionDevice() { _glfw.wl.primarySelectionDevice = zwp_primary_selection_device_manager_v1_get_device(_glfw.wl.primarySelectionDeviceManager, _glfw.wl.seat); if (_glfw.wl.primarySelectionDevice) zwp_primary_selection_device_v1_add_listener(_glfw.wl.primarySelectionDevice, &primary_selection_device_listener, NULL); } static inline bool _glfwEnsureDataDevice(void) { if (!_glfw.wl.dataDeviceManager) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot use clipboard, data device manager is not ready"); return false; } if (!_glfw.wl.dataDevice) { if (!_glfw.wl.seat) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot use clipboard, seat is not ready"); return false; } if (!_glfw.wl.dataDevice) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot use clipboard, failed to create data device"); return false; } } return true; } void _glfwPlatformSetClipboardString(const char* string) { if (!_glfwEnsureDataDevice()) return; free(_glfw.wl.clipboardString); _glfw.wl.clipboardString = _glfw_strdup(string); if (_glfw.wl.dataSourceForClipboard) wl_data_source_destroy(_glfw.wl.dataSourceForClipboard); _glfw.wl.dataSourceForClipboard = wl_data_device_manager_create_data_source(_glfw.wl.dataDeviceManager); if (!_glfw.wl.dataSourceForClipboard) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot copy failed to create data source"); return; } wl_data_source_add_listener(_glfw.wl.dataSourceForClipboard, &data_source_listener, NULL); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, clipboard_mime()); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "text/plain"); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "text/plain;charset=utf-8"); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "TEXT"); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "STRING"); wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "UTF8_STRING"); struct wl_callback *callback = wl_display_sync(_glfw.wl.display); static const struct wl_callback_listener clipboard_copy_callback_listener = {.done = clipboard_copy_callback_done}; wl_callback_add_listener(callback, &clipboard_copy_callback_listener, _glfw.wl.dataSourceForClipboard); } const char* _glfwPlatformGetClipboardString(void) { for (size_t i = 0; i < arraysz(_glfw.wl.dataOffers); i++) { if (_glfw.wl.dataOffers[i].id && _glfw.wl.dataOffers[i].mime && _glfw.wl.dataOffers[i].offer_type == CLIPBOARD) { if (_glfw.wl.dataOffers[i].is_self_offer) return _glfw.wl.clipboardString; free(_glfw.wl.pasteString); _glfw.wl.pasteString = read_data_offer(_glfw.wl.dataOffers[i].id, _glfw.wl.dataOffers[i].mime); return _glfw.wl.pasteString; } } return NULL; } void _glfwPlatformSetPrimarySelectionString(const char* string) { if (!_glfw.wl.primarySelectionDevice) { static bool warned_about_primary_selection_device = false; if (!warned_about_primary_selection_device) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot copy no primary selection device available"); warned_about_primary_selection_device = true; } return; } if (_glfw.wl.primarySelectionString == string) return; free(_glfw.wl.primarySelectionString); _glfw.wl.primarySelectionString = _glfw_strdup(string); if (_glfw.wl.dataSourceForPrimarySelection) zwp_primary_selection_source_v1_destroy(_glfw.wl.dataSourceForPrimarySelection); _glfw.wl.dataSourceForPrimarySelection = zwp_primary_selection_device_manager_v1_create_source(_glfw.wl.primarySelectionDeviceManager); if (!_glfw.wl.dataSourceForPrimarySelection) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Cannot copy failed to create primary selection source"); return; } zwp_primary_selection_source_v1_add_listener(_glfw.wl.dataSourceForPrimarySelection, &primary_selection_source_listener, NULL); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, clipboard_mime()); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, "text/plain"); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, "text/plain;charset=utf-8"); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, "TEXT"); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, "STRING"); zwp_primary_selection_source_v1_offer(_glfw.wl.dataSourceForPrimarySelection, "UTF8_STRING"); struct wl_callback *callback = wl_display_sync(_glfw.wl.display); static const struct wl_callback_listener primary_selection_copy_callback_listener = {.done = primary_selection_copy_callback_done}; wl_callback_add_listener(callback, &primary_selection_copy_callback_listener, _glfw.wl.dataSourceForPrimarySelection); } const char* _glfwPlatformGetPrimarySelectionString(void) { if (_glfw.wl.dataSourceForPrimarySelection != NULL) return _glfw.wl.primarySelectionString; for (size_t i = 0; i < arraysz(_glfw.wl.primarySelectionOffers); i++) { if (_glfw.wl.primarySelectionOffers[i].id && _glfw.wl.primarySelectionOffers[i].mime && _glfw.wl.primarySelectionOffers[i].offer_type == PRIMARY_SELECTION) { if (_glfw.wl.primarySelectionOffers[i].is_self_offer) { return _glfw.wl.primarySelectionString; } free(_glfw.wl.pasteString); _glfw.wl.pasteString = read_primary_selection_offer(_glfw.wl.primarySelectionOffers[i].id, _glfw.wl.primarySelectionOffers[i].mime); return _glfw.wl.pasteString; } } return NULL; } void _glfwPlatformGetRequiredInstanceExtensions(char** extensions) { if (!_glfw.vk.KHR_surface || !_glfw.vk.KHR_wayland_surface) return; extensions[0] = "VK_KHR_surface"; extensions[1] = "VK_KHR_wayland_surface"; } int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily) { PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); if (!vkGetPhysicalDeviceWaylandPresentationSupportKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "Wayland: Vulkan instance missing VK_KHR_wayland_surface extension"); return VK_NULL_HANDLE; } return vkGetPhysicalDeviceWaylandPresentationSupportKHR(device, queuefamily, _glfw.wl.display); } VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) { VkResult err; VkWaylandSurfaceCreateInfoKHR sci; PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR) vkGetInstanceProcAddr(instance, "vkCreateWaylandSurfaceKHR"); if (!vkCreateWaylandSurfaceKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "Wayland: Vulkan instance missing VK_KHR_wayland_surface extension"); return VK_ERROR_EXTENSION_NOT_PRESENT; } memset(&sci, 0, sizeof(sci)); sci.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; sci.display = _glfw.wl.display; sci.surface = window->wl.surface; err = vkCreateWaylandSurfaceKHR(instance, &sci, allocator, surface); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to create Vulkan surface: %s", _glfwGetVulkanResultString(err)); } return err; } void _glfwPlatformUpdateIMEState(_GLFWwindow *w, int which, int a, int b, int c, int d) { glfw_xkb_update_ime_state(w, &_glfw.wl.xkb, which, a, b, c, d); } static void frame_handle_redraw(void *data, struct wl_callback *callback, uint32_t time UNUSED) { _GLFWwindow* window = (_GLFWwindow*) data; if (callback == window->wl.frameCallbackData.current_wl_callback) { window->wl.frameCallbackData.callback(window->wl.frameCallbackData.id); window->wl.frameCallbackData.current_wl_callback = NULL; } wl_callback_destroy(callback); } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI struct wl_display* glfwGetWaylandDisplay(void) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return _glfw.wl.display; } GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return window->wl.surface; } GLFWAPI int glfwGetNativeKeyForName(const char* keyName, bool caseSensitive) { return glfw_xkb_keysym_from_name(keyName, caseSensitive); } GLFWAPI void glfwRequestWaylandFrameEvent(GLFWwindow *handle, unsigned long long id, void(*callback)(unsigned long long id)) { _GLFWwindow* window = (_GLFWwindow*) handle; static const struct wl_callback_listener frame_listener = { .done = frame_handle_redraw }; if (window->wl.frameCallbackData.current_wl_callback) wl_callback_destroy(window->wl.frameCallbackData.current_wl_callback); window->wl.frameCallbackData.id = id; window->wl.frameCallbackData.callback = callback; window->wl.frameCallbackData.current_wl_callback = wl_surface_frame(window->wl.surface); if (window->wl.frameCallbackData.current_wl_callback) { wl_callback_add_listener(window->wl.frameCallbackData.current_wl_callback, &frame_listener, window); wl_surface_commit(window->wl.surface); } } GLFWAPI unsigned long long glfwDBusUserNotify(const char *app_name, const char* icon, const char *summary, const char *body, const char *action_name, int32_t timeout, GLFWDBusnotificationcreatedfun callback, void *data) { return glfw_dbus_send_user_notification(app_name, icon, summary, body, action_name, timeout, callback, data); } GLFWAPI void glfwDBusSetUserNotificationHandler(GLFWDBusnotificationactivatedfun handler) { glfw_dbus_set_user_notification_activated_handler(handler); } kitty-0.15.0/glfw/x11_init.c000066400000000000000000000644431356737523400155320ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 X11 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #define _GNU_SOURCE #include "internal.h" #include "backend_utils.h" #include #include #include #include #include #include #include #include // Check whether the specified atom is supported // static Atom getSupportedAtom(Atom* supportedAtoms, unsigned long atomCount, const char* atomName) { const Atom atom = XInternAtom(_glfw.x11.display, atomName, False); for (unsigned long i = 0; i < atomCount; i++) { if (supportedAtoms[i] == atom) return atom; } return None; } // Check whether the running window manager is EWMH-compliant // static void detectEWMH(void) { // First we read the _NET_SUPPORTING_WM_CHECK property on the root window Window* windowFromRoot = NULL; // Then we look for the _NET_SUPPORTING_WM_CHECK property of the root window if (!_glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.NET_SUPPORTING_WM_CHECK, XA_WINDOW, (unsigned char**) &windowFromRoot)) { return; } _glfwGrabErrorHandlerX11(); // If it exists, it should be the XID of a top-level window // Then we look for the same property on that window Window* windowFromChild = NULL; if (!_glfwGetWindowPropertyX11(*windowFromRoot, _glfw.x11.NET_SUPPORTING_WM_CHECK, XA_WINDOW, (unsigned char**) &windowFromChild)) { XFree(windowFromRoot); return; } _glfwReleaseErrorHandlerX11(); // If the property exists, it should contain the XID of the window if (*windowFromRoot != *windowFromChild) { XFree(windowFromRoot); XFree(windowFromChild); return; } XFree(windowFromRoot); XFree(windowFromChild); // We are now fairly sure that an EWMH-compliant window manager is running // We can now start querying the WM about what features it supports by // looking in the _NET_SUPPORTED property on the root window // It should contain a list of supported EWMH protocol and state atoms Atom* supportedAtoms = NULL; const unsigned long atomCount = _glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.NET_SUPPORTED, XA_ATOM, (unsigned char**) &supportedAtoms); if (!supportedAtoms) return; // See which of the atoms we support that are supported by the WM _glfw.x11.NET_WM_STATE = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE"); _glfw.x11.NET_WM_STATE_ABOVE = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_ABOVE"); _glfw.x11.NET_WM_STATE_FULLSCREEN = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_FULLSCREEN"); _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_VERT"); _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_HORZ"); _glfw.x11.NET_WM_STATE_DEMANDS_ATTENTION = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_DEMANDS_ATTENTION"); _glfw.x11.NET_WM_FULLSCREEN_MONITORS = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_FULLSCREEN_MONITORS"); _glfw.x11.NET_WM_WINDOW_TYPE = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE"); _glfw.x11.NET_WM_WINDOW_TYPE_NORMAL = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE_NORMAL"); _glfw.x11.NET_WORKAREA = getSupportedAtom(supportedAtoms, atomCount, "_NET_WORKAREA"); _glfw.x11.NET_CURRENT_DESKTOP = getSupportedAtom(supportedAtoms, atomCount, "_NET_CURRENT_DESKTOP"); _glfw.x11.NET_ACTIVE_WINDOW = getSupportedAtom(supportedAtoms, atomCount, "_NET_ACTIVE_WINDOW"); _glfw.x11.NET_FRAME_EXTENTS = getSupportedAtom(supportedAtoms, atomCount, "_NET_FRAME_EXTENTS"); _glfw.x11.NET_REQUEST_FRAME_EXTENTS = getSupportedAtom(supportedAtoms, atomCount, "_NET_REQUEST_FRAME_EXTENTS"); XFree(supportedAtoms); } // Look for and initialize supported X11 extensions // static bool initExtensions(void) { _glfw.x11.vidmode.handle = _glfw_dlopen("libXxf86vm.so.1"); if (_glfw.x11.vidmode.handle) { glfw_dlsym(_glfw.x11.vidmode.QueryExtension, _glfw.x11.vidmode.handle, "XF86VidModeQueryExtension"); glfw_dlsym(_glfw.x11.vidmode.GetGammaRamp, _glfw.x11.vidmode.handle, "XF86VidModeGetGammaRamp"); glfw_dlsym(_glfw.x11.vidmode.SetGammaRamp, _glfw.x11.vidmode.handle, "XF86VidModeSetGammaRamp"); glfw_dlsym(_glfw.x11.vidmode.GetGammaRampSize, _glfw.x11.vidmode.handle, "XF86VidModeGetGammaRampSize"); _glfw.x11.vidmode.available = XF86VidModeQueryExtension(_glfw.x11.display, &_glfw.x11.vidmode.eventBase, &_glfw.x11.vidmode.errorBase); } #if defined(__CYGWIN__) _glfw.x11.xi.handle = _glfw_dlopen("libXi-6.so"); #else _glfw.x11.xi.handle = _glfw_dlopen("libXi.so.6"); #endif if (_glfw.x11.xi.handle) { glfw_dlsym(_glfw.x11.xi.QueryVersion, _glfw.x11.xi.handle, "XIQueryVersion"); glfw_dlsym(_glfw.x11.xi.SelectEvents, _glfw.x11.xi.handle, "XISelectEvents"); if (XQueryExtension(_glfw.x11.display, "XInputExtension", &_glfw.x11.xi.majorOpcode, &_glfw.x11.xi.eventBase, &_glfw.x11.xi.errorBase)) { _glfw.x11.xi.major = 2; _glfw.x11.xi.minor = 0; if (XIQueryVersion(_glfw.x11.display, &_glfw.x11.xi.major, &_glfw.x11.xi.minor) == Success) { _glfw.x11.xi.available = true; } } } #if defined(__CYGWIN__) _glfw.x11.randr.handle = _glfw_dlopen("libXrandr-2.so"); #else _glfw.x11.randr.handle = _glfw_dlopen("libXrandr.so.2"); #endif if (_glfw.x11.randr.handle) { glfw_dlsym(_glfw.x11.randr.AllocGamma, _glfw.x11.randr.handle, "XRRAllocGamma"); glfw_dlsym(_glfw.x11.randr.FreeGamma, _glfw.x11.randr.handle, "XRRFreeGamma"); glfw_dlsym(_glfw.x11.randr.FreeCrtcInfo, _glfw.x11.randr.handle, "XRRFreeCrtcInfo"); glfw_dlsym(_glfw.x11.randr.FreeGamma, _glfw.x11.randr.handle, "XRRFreeGamma"); glfw_dlsym(_glfw.x11.randr.FreeOutputInfo, _glfw.x11.randr.handle, "XRRFreeOutputInfo"); glfw_dlsym(_glfw.x11.randr.FreeScreenResources, _glfw.x11.randr.handle, "XRRFreeScreenResources"); glfw_dlsym(_glfw.x11.randr.GetCrtcGamma, _glfw.x11.randr.handle, "XRRGetCrtcGamma"); glfw_dlsym(_glfw.x11.randr.GetCrtcGammaSize, _glfw.x11.randr.handle, "XRRGetCrtcGammaSize"); glfw_dlsym(_glfw.x11.randr.GetCrtcInfo, _glfw.x11.randr.handle, "XRRGetCrtcInfo"); glfw_dlsym(_glfw.x11.randr.GetOutputInfo, _glfw.x11.randr.handle, "XRRGetOutputInfo"); glfw_dlsym(_glfw.x11.randr.GetOutputPrimary, _glfw.x11.randr.handle, "XRRGetOutputPrimary"); glfw_dlsym(_glfw.x11.randr.GetScreenResourcesCurrent, _glfw.x11.randr.handle, "XRRGetScreenResourcesCurrent"); glfw_dlsym(_glfw.x11.randr.QueryExtension, _glfw.x11.randr.handle, "XRRQueryExtension"); glfw_dlsym(_glfw.x11.randr.QueryVersion, _glfw.x11.randr.handle, "XRRQueryVersion"); glfw_dlsym(_glfw.x11.randr.SelectInput, _glfw.x11.randr.handle, "XRRSelectInput"); glfw_dlsym(_glfw.x11.randr.SetCrtcConfig, _glfw.x11.randr.handle, "XRRSetCrtcConfig"); glfw_dlsym(_glfw.x11.randr.SetCrtcGamma, _glfw.x11.randr.handle, "XRRSetCrtcGamma"); glfw_dlsym(_glfw.x11.randr.UpdateConfiguration, _glfw.x11.randr.handle, "XRRUpdateConfiguration"); if (XRRQueryExtension(_glfw.x11.display, &_glfw.x11.randr.eventBase, &_glfw.x11.randr.errorBase)) { if (XRRQueryVersion(_glfw.x11.display, &_glfw.x11.randr.major, &_glfw.x11.randr.minor)) { // The GLFW RandR path requires at least version 1.3 if (_glfw.x11.randr.major > 1 || _glfw.x11.randr.minor >= 3) _glfw.x11.randr.available = true; } else { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to query RandR version"); } } } if (_glfw.x11.randr.available) { XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0])) { // This is likely an older Nvidia driver with broken gamma support // Flag it as useless and fall back to xf86vm gamma, if available _glfw.x11.randr.gammaBroken = true; } if (!sr->ncrtc) { // A system without CRTCs is likely a system with broken RandR // Disable the RandR monitor path and fall back to core functions _glfw.x11.randr.monitorBroken = true; } XRRFreeScreenResources(sr); } if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { XRRSelectInput(_glfw.x11.display, _glfw.x11.root, RROutputChangeNotifyMask); } #if defined(__CYGWIN__) _glfw.x11.xcursor.handle = _glfw_dlopen("libXcursor-1.so"); #else _glfw.x11.xcursor.handle = _glfw_dlopen("libXcursor.so.1"); #endif if (_glfw.x11.xcursor.handle) { glfw_dlsym(_glfw.x11.xcursor.ImageCreate, _glfw.x11.xcursor.handle, "XcursorImageCreate"); glfw_dlsym(_glfw.x11.xcursor.ImageDestroy, _glfw.x11.xcursor.handle, "XcursorImageDestroy"); glfw_dlsym(_glfw.x11.xcursor.ImageLoadCursor, _glfw.x11.xcursor.handle, "XcursorImageLoadCursor"); } #if defined(__CYGWIN__) _glfw.x11.xinerama.handle = _glfw_dlopen("libXinerama-1.so"); #else _glfw.x11.xinerama.handle = _glfw_dlopen("libXinerama.so.1"); #endif if (_glfw.x11.xinerama.handle) { glfw_dlsym(_glfw.x11.xinerama.IsActive, _glfw.x11.xinerama.handle, "XineramaIsActive"); glfw_dlsym(_glfw.x11.xinerama.QueryExtension, _glfw.x11.xinerama.handle, "XineramaQueryExtension"); glfw_dlsym(_glfw.x11.xinerama.QueryScreens, _glfw.x11.xinerama.handle, "XineramaQueryScreens"); if (XineramaQueryExtension(_glfw.x11.display, &_glfw.x11.xinerama.major, &_glfw.x11.xinerama.minor)) { if (XineramaIsActive(_glfw.x11.display)) _glfw.x11.xinerama.available = true; } } #if defined(__CYGWIN__) _glfw.x11.xrender.handle = _glfw_dlopen("libXrender-1.so"); #else _glfw.x11.xrender.handle = _glfw_dlopen("libXrender.so.1"); #endif if (_glfw.x11.xrender.handle) { glfw_dlsym(_glfw.x11.xrender.QueryExtension, _glfw.x11.xrender.handle, "XRenderQueryExtension"); glfw_dlsym(_glfw.x11.xrender.QueryVersion, _glfw.x11.xrender.handle, "XRenderQueryVersion"); glfw_dlsym(_glfw.x11.xrender.FindVisualFormat, _glfw.x11.xrender.handle, "XRenderFindVisualFormat"); if (XRenderQueryExtension(_glfw.x11.display, &_glfw.x11.xrender.errorBase, &_glfw.x11.xrender.eventBase)) { if (XRenderQueryVersion(_glfw.x11.display, &_glfw.x11.xrender.major, &_glfw.x11.xrender.minor)) { _glfw.x11.xrender.available = true; } } } _glfw.x11.xkb.major = 1; _glfw.x11.xkb.minor = 0; _glfw.x11.xkb.available = XkbQueryExtension(_glfw.x11.display, &_glfw.x11.xkb.majorOpcode, &_glfw.x11.xkb.eventBase, &_glfw.x11.xkb.errorBase, &_glfw.x11.xkb.major, &_glfw.x11.xkb.minor); if (!_glfw.x11.xkb.available) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to load Xkb extension"); return false; } Bool supported; if (XkbSetDetectableAutoRepeat(_glfw.x11.display, True, &supported)) { if (supported) _glfw.x11.xkb.detectable = true; } if (!glfw_xkb_set_x11_events_mask()) return false; if (!glfw_xkb_create_context(&_glfw.x11.xkb)) return false; if (!glfw_xkb_update_x11_keyboard_id(&_glfw.x11.xkb)) return false; if (!glfw_xkb_compile_keymap(&_glfw.x11.xkb, NULL)) return false; // String format atoms _glfw.x11.NULL_ = XInternAtom(_glfw.x11.display, "NULL", False); _glfw.x11.UTF8_STRING = XInternAtom(_glfw.x11.display, "UTF8_STRING", False); _glfw.x11.ATOM_PAIR = XInternAtom(_glfw.x11.display, "ATOM_PAIR", False); // Custom selection property atom _glfw.x11.GLFW_SELECTION = XInternAtom(_glfw.x11.display, "GLFW_SELECTION", False); // ICCCM standard clipboard atoms _glfw.x11.TARGETS = XInternAtom(_glfw.x11.display, "TARGETS", False); _glfw.x11.MULTIPLE = XInternAtom(_glfw.x11.display, "MULTIPLE", False); _glfw.x11.PRIMARY = XInternAtom(_glfw.x11.display, "PRIMARY", False); _glfw.x11.INCR = XInternAtom(_glfw.x11.display, "INCR", False); _glfw.x11.CLIPBOARD = XInternAtom(_glfw.x11.display, "CLIPBOARD", False); // Clipboard manager atoms _glfw.x11.CLIPBOARD_MANAGER = XInternAtom(_glfw.x11.display, "CLIPBOARD_MANAGER", False); _glfw.x11.SAVE_TARGETS = XInternAtom(_glfw.x11.display, "SAVE_TARGETS", False); // Xdnd (drag and drop) atoms _glfw.x11.XdndAware = XInternAtom(_glfw.x11.display, "XdndAware", False); _glfw.x11.XdndEnter = XInternAtom(_glfw.x11.display, "XdndEnter", False); _glfw.x11.XdndPosition = XInternAtom(_glfw.x11.display, "XdndPosition", False); _glfw.x11.XdndStatus = XInternAtom(_glfw.x11.display, "XdndStatus", False); _glfw.x11.XdndActionCopy = XInternAtom(_glfw.x11.display, "XdndActionCopy", False); _glfw.x11.XdndDrop = XInternAtom(_glfw.x11.display, "XdndDrop", False); _glfw.x11.XdndFinished = XInternAtom(_glfw.x11.display, "XdndFinished", False); _glfw.x11.XdndSelection = XInternAtom(_glfw.x11.display, "XdndSelection", False); _glfw.x11.XdndTypeList = XInternAtom(_glfw.x11.display, "XdndTypeList", False); _glfw.x11.text_uri_list = XInternAtom(_glfw.x11.display, "text/uri-list", False); // ICCCM, EWMH and Motif window property atoms // These can be set safely even without WM support // The EWMH atoms that require WM support are handled in detectEWMH _glfw.x11.WM_PROTOCOLS = XInternAtom(_glfw.x11.display, "WM_PROTOCOLS", False); _glfw.x11.WM_STATE = XInternAtom(_glfw.x11.display, "WM_STATE", False); _glfw.x11.WM_DELETE_WINDOW = XInternAtom(_glfw.x11.display, "WM_DELETE_WINDOW", False); _glfw.x11.NET_SUPPORTED = XInternAtom(_glfw.x11.display, "_NET_SUPPORTED", False); _glfw.x11.NET_SUPPORTING_WM_CHECK = XInternAtom(_glfw.x11.display, "_NET_SUPPORTING_WM_CHECK", False); _glfw.x11.NET_WM_ICON = XInternAtom(_glfw.x11.display, "_NET_WM_ICON", False); _glfw.x11.NET_WM_PING = XInternAtom(_glfw.x11.display, "_NET_WM_PING", False); _glfw.x11.NET_WM_PID = XInternAtom(_glfw.x11.display, "_NET_WM_PID", False); _glfw.x11.NET_WM_NAME = XInternAtom(_glfw.x11.display, "_NET_WM_NAME", False); _glfw.x11.NET_WM_ICON_NAME = XInternAtom(_glfw.x11.display, "_NET_WM_ICON_NAME", False); _glfw.x11.NET_WM_BYPASS_COMPOSITOR = XInternAtom(_glfw.x11.display, "_NET_WM_BYPASS_COMPOSITOR", False); _glfw.x11.NET_WM_WINDOW_OPACITY = XInternAtom(_glfw.x11.display, "_NET_WM_WINDOW_OPACITY", False); _glfw.x11.MOTIF_WM_HINTS = XInternAtom(_glfw.x11.display, "_MOTIF_WM_HINTS", False); // The compositing manager selection name contains the screen number { char name[32]; snprintf(name, sizeof(name), "_NET_WM_CM_S%u", _glfw.x11.screen); _glfw.x11.NET_WM_CM_Sx = XInternAtom(_glfw.x11.display, name, False); } // Detect whether an EWMH-conformant window manager is running detectEWMH(); return true; } // Retrieve system content scale via folklore heuristics // void _glfwGetSystemContentScaleX11(float* xscale, float* yscale, bool bypass_cache) { // Start by assuming the default X11 DPI // NOTE: Some desktop environments (KDE) may remove the Xft.dpi field when it // would be set to 96, so assume that is the case if we cannot find it float xdpi = 96.f, ydpi = 96.f; // NOTE: Basing the scale on Xft.dpi where available should provide the most // consistent user experience (matches Qt, Gtk, etc), although not // always the most accurate one char* rms = NULL; char* owned_rms = NULL; if (bypass_cache) { _glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.RESOURCE_MANAGER, XA_STRING, (unsigned char**) &owned_rms); rms = owned_rms; } else { rms = XResourceManagerString(_glfw.x11.display); } if (rms) { XrmDatabase db = XrmGetStringDatabase(rms); if (db) { XrmValue value; char* type = NULL; if (XrmGetResource(db, "Xft.dpi", "Xft.Dpi", &type, &value)) { if (type && strcmp(type, "String") == 0) xdpi = ydpi = (float)atof(value.addr); } XrmDestroyDatabase(db); } XFree(owned_rms); } *xscale = xdpi / 96.f; *yscale = ydpi / 96.f; } // Create a blank cursor for hidden and disabled cursor modes // static Cursor createHiddenCursor(void) { unsigned char pixels[16 * 16 * 4] = { 0 }; GLFWimage image = { 16, 16, pixels }; return _glfwCreateCursorX11(&image, 0, 0); } // Create a helper window for IPC // static Window createHelperWindow(void) { XSetWindowAttributes wa; wa.event_mask = PropertyChangeMask; return XCreateWindow(_glfw.x11.display, _glfw.x11.root, 0, 0, 1, 1, 0, 0, InputOnly, DefaultVisual(_glfw.x11.display, _glfw.x11.screen), CWEventMask, &wa); } // X error handler // static int errorHandler(Display *display UNUSED, XErrorEvent* event) { _glfw.x11.errorCode = event->error_code; return 0; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Sets the X error handler callback // void _glfwGrabErrorHandlerX11(void) { _glfw.x11.errorCode = Success; XSetErrorHandler(errorHandler); } // Clears the X error handler callback // void _glfwReleaseErrorHandlerX11(void) { // Synchronize to make sure all commands are processed XSync(_glfw.x11.display, False); XSetErrorHandler(NULL); } // Reports the specified error, appending information about the last X error // void _glfwInputErrorX11(int error, const char* message) { char buffer[_GLFW_MESSAGE_SIZE]; XGetErrorText(_glfw.x11.display, _glfw.x11.errorCode, buffer, sizeof(buffer)); _glfwInputError(error, "%s: %s", message, buffer); } // Creates a native cursor object from the specified image and hotspot // Cursor _glfwCreateCursorX11(const GLFWimage* image, int xhot, int yhot) { int i; Cursor cursor; if (!_glfw.x11.xcursor.handle) return None; XcursorImage* native = XcursorImageCreate(image->width, image->height); if (native == NULL) return None; native->xhot = xhot; native->yhot = yhot; unsigned char* source = (unsigned char*) image->pixels; XcursorPixel* target = native->pixels; for (i = 0; i < image->width * image->height; i++, target++, source += 4) { unsigned int alpha = source[3]; *target = (alpha << 24) | ((unsigned char) ((source[0] * alpha) / 255) << 16) | ((unsigned char) ((source[1] * alpha) / 255) << 8) | ((unsigned char) ((source[2] * alpha) / 255) << 0); } cursor = XcursorImageLoadCursor(_glfw.x11.display, native); XcursorImageDestroy(native); return cursor; } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformInit(void) { XInitThreads(); XrmInitialize(); _glfw.x11.display = XOpenDisplay(NULL); if (!_glfw.x11.display) { const char* display = getenv("DISPLAY"); if (display) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to open display %s", display); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: The DISPLAY environment variable is missing"); } return false; } if (!initPollData(&_glfw.x11.eventLoopData, ConnectionNumber(_glfw.x11.display))) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to initialize event loop data"); } glfw_dbus_init(&_glfw.x11.dbus, &_glfw.x11.eventLoopData); _glfw.x11.screen = DefaultScreen(_glfw.x11.display); _glfw.x11.root = RootWindow(_glfw.x11.display, _glfw.x11.screen); _glfw.x11.context = XUniqueContext(); _glfw.x11.RESOURCE_MANAGER = XInternAtom(_glfw.x11.display, "RESOURCE_MANAGER", True); XSelectInput(_glfw.x11.display, _glfw.x11.root, PropertyChangeMask); _glfwGetSystemContentScaleX11(&_glfw.x11.contentScaleX, &_glfw.x11.contentScaleY, false); if (!initExtensions()) return false; _glfw.x11.helperWindowHandle = createHelperWindow(); _glfw.x11.hiddenCursorHandle = createHiddenCursor(); #if defined(__linux__) if (_glfw.hints.init.enableJoysticks) { if (!_glfwInitJoysticksLinux()) return false; if (_glfw.linjs.inotify > 0) addWatch(&_glfw.x11.eventLoopData, "joystick", _glfw.linjs.inotify, POLLIN, 1, NULL, NULL); } #endif _glfwInitTimerPOSIX(); _glfwPollMonitorsX11(); return true; } void _glfwPlatformTerminate(void) { removeAllTimers(&_glfw.x11.eventLoopData); if (_glfw.x11.helperWindowHandle) { if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD) == _glfw.x11.helperWindowHandle) { _glfwPushSelectionToManagerX11(); } XDestroyWindow(_glfw.x11.display, _glfw.x11.helperWindowHandle); _glfw.x11.helperWindowHandle = None; } if (_glfw.x11.hiddenCursorHandle) { XFreeCursor(_glfw.x11.display, _glfw.x11.hiddenCursorHandle); _glfw.x11.hiddenCursorHandle = (Cursor) 0; } glfw_xkb_release(&_glfw.x11.xkb); glfw_dbus_terminate(&_glfw.x11.dbus); free(_glfw.x11.primarySelectionString); free(_glfw.x11.clipboardString); if (_glfw.x11.display) { XCloseDisplay(_glfw.x11.display); _glfw.x11.display = NULL; _glfw.x11.eventLoopData.fds[0].fd = -1; } if (_glfw.x11.xcursor.handle) { _glfw_dlclose(_glfw.x11.xcursor.handle); _glfw.x11.xcursor.handle = NULL; } if (_glfw.x11.randr.handle) { _glfw_dlclose(_glfw.x11.randr.handle); _glfw.x11.randr.handle = NULL; } if (_glfw.x11.xinerama.handle) { _glfw_dlclose(_glfw.x11.xinerama.handle); _glfw.x11.xinerama.handle = NULL; } if (_glfw.x11.xrender.handle) { _glfw_dlclose(_glfw.x11.xrender.handle); _glfw.x11.xrender.handle = NULL; } if (_glfw.x11.vidmode.handle) { _glfw_dlclose(_glfw.x11.vidmode.handle); _glfw.x11.vidmode.handle = NULL; } if (_glfw.x11.xi.handle) { _glfw_dlclose(_glfw.x11.xi.handle); _glfw.x11.xi.handle = NULL; } // NOTE: These need to be unloaded after XCloseDisplay, as they register // cleanup callbacks that get called by that function _glfwTerminateEGL(); _glfwTerminateGLX(); #if defined(__linux__) _glfwTerminateJoysticksLinux(); #endif finalizePollData(&_glfw.x11.eventLoopData); } const char* _glfwPlatformGetVersionString(void) { return _GLFW_VERSION_NUMBER " X11 GLX EGL OSMesa" #if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK) " clock_gettime" #else " gettimeofday" #endif #if defined(__linux__) " evdev" #endif #if defined(_GLFW_BUILD_DLL) " shared" #endif ; } #include "main_loop.h" kitty-0.15.0/glfw/x11_monitor.c000066400000000000000000000464621356737523400162570ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 X11 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #include "internal.h" #include #include #include #include // Check whether the display mode should be included in enumeration // static bool modeIsGood(const XRRModeInfo* mi) { return (mi->modeFlags & RR_Interlace) == 0; } // Calculates the refresh rate, in Hz, from the specified RandR mode info // static int calculateRefreshRate(const XRRModeInfo* mi) { if (mi->hTotal && mi->vTotal) return (int) round((double) mi->dotClock / ((double) mi->hTotal * (double) mi->vTotal)); else return 0; } // Returns the mode info for a RandR mode XID // static const XRRModeInfo* getModeInfo(const XRRScreenResources* sr, RRMode id) { for (int i = 0; i < sr->nmode; i++) { if (sr->modes[i].id == id) return sr->modes + i; } return NULL; } // Convert RandR mode info to GLFW video mode // static GLFWvidmode vidmodeFromModeInfo(const XRRModeInfo* mi, const XRRCrtcInfo* ci) { GLFWvidmode mode; if (ci->rotation == RR_Rotate_90 || ci->rotation == RR_Rotate_270) { mode.width = mi->height; mode.height = mi->width; } else { mode.width = mi->width; mode.height = mi->height; } mode.refreshRate = calculateRefreshRate(mi); _glfwSplitBPP(DefaultDepth(_glfw.x11.display, _glfw.x11.screen), &mode.redBits, &mode.greenBits, &mode.blueBits); return mode; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Poll for changes in the set of connected monitors // void _glfwPollMonitorsX11(void) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { int disconnectedCount, screenCount = 0; _GLFWmonitor** disconnected = NULL; XineramaScreenInfo* screens = NULL; XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); RROutput primary = XRRGetOutputPrimary(_glfw.x11.display, _glfw.x11.root); if (_glfw.x11.xinerama.available) screens = XineramaQueryScreens(_glfw.x11.display, &screenCount); disconnectedCount = _glfw.monitorCount; if (disconnectedCount) { disconnected = calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*)); memcpy(disconnected, _glfw.monitors, _glfw.monitorCount * sizeof(_GLFWmonitor*)); } for (int i = 0; i < sr->noutput; i++) { int j, type, widthMM, heightMM; XRROutputInfo* oi = XRRGetOutputInfo(_glfw.x11.display, sr, sr->outputs[i]); if (oi->connection != RR_Connected || oi->crtc == None) { XRRFreeOutputInfo(oi); continue; } for (j = 0; j < disconnectedCount; j++) { if (disconnected[j] && disconnected[j]->x11.output == sr->outputs[i]) { disconnected[j] = NULL; break; } } if (j < disconnectedCount) { XRRFreeOutputInfo(oi); continue; } XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, oi->crtc); if (!ci) { XRRFreeOutputInfo(oi); continue; } if (ci->rotation == RR_Rotate_90 || ci->rotation == RR_Rotate_270) { widthMM = oi->mm_height; heightMM = oi->mm_width; } else { widthMM = oi->mm_width; heightMM = oi->mm_height; } if (widthMM <= 0 || heightMM <= 0) { // HACK: If RandR does not provide a physical size, assume the // X11 default 96 DPI and calcuate from the CRTC viewport // NOTE: These members are affected by rotation, unlike the mode // info and output info members widthMM = (int) (ci->width * 25.4f / 96.f); heightMM = (int) (ci->height * 25.4f / 96.f); } _GLFWmonitor* monitor = _glfwAllocMonitor(oi->name, widthMM, heightMM); monitor->x11.output = sr->outputs[i]; monitor->x11.crtc = oi->crtc; for (j = 0; j < screenCount; j++) { if (screens[j].x_org == ci->x && screens[j].y_org == ci->y && screens[j].width == (short int)ci->width && screens[j].height == (short int)ci->height) { monitor->x11.index = j; break; } } if (monitor->x11.output == primary) type = _GLFW_INSERT_FIRST; else type = _GLFW_INSERT_LAST; _glfwInputMonitor(monitor, GLFW_CONNECTED, type); XRRFreeOutputInfo(oi); XRRFreeCrtcInfo(ci); } XRRFreeScreenResources(sr); if (screens) XFree(screens); for (int i = 0; i < disconnectedCount; i++) { if (disconnected[i]) _glfwInputMonitor(disconnected[i], GLFW_DISCONNECTED, 0); } free(disconnected); } else { const int widthMM = DisplayWidthMM(_glfw.x11.display, _glfw.x11.screen); const int heightMM = DisplayHeightMM(_glfw.x11.display, _glfw.x11.screen); _glfwInputMonitor(_glfwAllocMonitor("Display", widthMM, heightMM), GLFW_CONNECTED, _GLFW_INSERT_FIRST); } } // Set the current video mode for the specified monitor // void _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { GLFWvidmode current; RRMode native = None; const GLFWvidmode* best = _glfwChooseVideoMode(monitor, desired); _glfwPlatformGetVideoMode(monitor, ¤t); if (_glfwCompareVideoModes(¤t, best) == 0) return; XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRROutputInfo* oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); for (int i = 0; i < oi->nmode; i++) { const XRRModeInfo* mi = getModeInfo(sr, oi->modes[i]); if (!modeIsGood(mi)) continue; const GLFWvidmode mode = vidmodeFromModeInfo(mi, ci); if (_glfwCompareVideoModes(best, &mode) == 0) { native = mi->id; break; } } if (native) { if (monitor->x11.oldMode == None) monitor->x11.oldMode = ci->mode; XRRSetCrtcConfig(_glfw.x11.display, sr, monitor->x11.crtc, CurrentTime, ci->x, ci->y, native, ci->rotation, ci->outputs, ci->noutput); } XRRFreeOutputInfo(oi); XRRFreeCrtcInfo(ci); XRRFreeScreenResources(sr); } } // Restore the saved (original) video mode for the specified monitor // void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { if (monitor->x11.oldMode == None) return; XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRRSetCrtcConfig(_glfw.x11.display, sr, monitor->x11.crtc, CurrentTime, ci->x, ci->y, monitor->x11.oldMode, ci->rotation, ci->outputs, ci->noutput); XRRFreeCrtcInfo(ci); XRRFreeScreenResources(sr); monitor->x11.oldMode = None; } } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor UNUSED) { } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); if (ci) { if (xpos) *xpos = ci->x; if (ypos) *ypos = ci->y; XRRFreeCrtcInfo(ci); } XRRFreeScreenResources(sr); } } void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor UNUSED, float* xscale, float* yscale) { if (xscale) *xscale = _glfw.x11.contentScaleX; if (yscale) *yscale = _glfw.x11.contentScaleY; } void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height) { int areaX = 0, areaY = 0, areaWidth = 0, areaHeight = 0; if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); areaX = ci->x; areaY = ci->y; const XRRModeInfo* mi = getModeInfo(sr, ci->mode); if (ci->rotation == RR_Rotate_90 || ci->rotation == RR_Rotate_270) { areaWidth = mi->height; areaHeight = mi->width; } else { areaWidth = mi->width; areaHeight = mi->height; } XRRFreeCrtcInfo(ci); XRRFreeScreenResources(sr); } else { areaWidth = DisplayWidth(_glfw.x11.display, _glfw.x11.screen); areaHeight = DisplayHeight(_glfw.x11.display, _glfw.x11.screen); } if (_glfw.x11.NET_WORKAREA && _glfw.x11.NET_CURRENT_DESKTOP) { Atom* extents = NULL; Atom* desktop = NULL; const unsigned long extentCount = _glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.NET_WORKAREA, XA_CARDINAL, (unsigned char**) &extents); if (_glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.NET_CURRENT_DESKTOP, XA_CARDINAL, (unsigned char**) &desktop) > 0) { if (extentCount >= 4 && *desktop < extentCount / 4) { const int globalX = extents[*desktop * 4 + 0]; const int globalY = extents[*desktop * 4 + 1]; const int globalWidth = extents[*desktop * 4 + 2]; const int globalHeight = extents[*desktop * 4 + 3]; if (areaX < globalX) { areaWidth -= globalX - areaX; areaX = globalX; } if (areaY < globalY) { areaHeight -= globalY - areaY; areaY = globalY; } if (areaX + areaWidth > globalX + globalWidth) areaWidth = globalX - areaX + globalWidth; if (areaY + areaHeight > globalY + globalHeight) areaHeight = globalY - areaY + globalHeight; } } if (extents) XFree(extents); if (desktop) XFree(desktop); } if (xpos) *xpos = areaX; if (ypos) *ypos = areaY; if (width) *width = areaWidth; if (height) *height = areaHeight; } GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) { GLFWvidmode* result; *count = 0; if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRROutputInfo* oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); result = calloc(oi->nmode, sizeof(GLFWvidmode)); for (int i = 0; i < oi->nmode; i++) { const XRRModeInfo* mi = getModeInfo(sr, oi->modes[i]); if (!modeIsGood(mi)) continue; const GLFWvidmode mode = vidmodeFromModeInfo(mi, ci); int j; for (j = 0; j < *count; j++) { if (_glfwCompareVideoModes(result + j, &mode) == 0) break; } // Skip duplicate modes if (j < *count) continue; (*count)++; result[*count - 1] = mode; } XRRFreeOutputInfo(oi); XRRFreeCrtcInfo(ci); XRRFreeScreenResources(sr); } else { *count = 1; result = calloc(1, sizeof(GLFWvidmode)); _glfwPlatformGetVideoMode(monitor, result); } return result; } void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); if (ci) { const XRRModeInfo* mi = getModeInfo(sr, ci->mode); if (mi) // mi can be NULL if the monitor has been disconnected *mode = vidmodeFromModeInfo(mi, ci); XRRFreeCrtcInfo(ci); } XRRFreeScreenResources(sr); } else { mode->width = DisplayWidth(_glfw.x11.display, _glfw.x11.screen); mode->height = DisplayHeight(_glfw.x11.display, _glfw.x11.screen); mode->refreshRate = 0; _glfwSplitBPP(DefaultDepth(_glfw.x11.display, _glfw.x11.screen), &mode->redBits, &mode->greenBits, &mode->blueBits); } } bool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp) { if (_glfw.x11.randr.available && !_glfw.x11.randr.gammaBroken) { const size_t size = XRRGetCrtcGammaSize(_glfw.x11.display, monitor->x11.crtc); XRRCrtcGamma* gamma = XRRGetCrtcGamma(_glfw.x11.display, monitor->x11.crtc); _glfwAllocGammaArrays(ramp, size); memcpy(ramp->red, gamma->red, size * sizeof(unsigned short)); memcpy(ramp->green, gamma->green, size * sizeof(unsigned short)); memcpy(ramp->blue, gamma->blue, size * sizeof(unsigned short)); XRRFreeGamma(gamma); return true; } else if (_glfw.x11.vidmode.available) { int size; XF86VidModeGetGammaRampSize(_glfw.x11.display, _glfw.x11.screen, &size); _glfwAllocGammaArrays(ramp, size); XF86VidModeGetGammaRamp(_glfw.x11.display, _glfw.x11.screen, ramp->size, ramp->red, ramp->green, ramp->blue); return true; } else { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Gamma ramp access not supported by server"); return false; } } void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp) { if (_glfw.x11.randr.available && !_glfw.x11.randr.gammaBroken) { if (XRRGetCrtcGammaSize(_glfw.x11.display, monitor->x11.crtc) != (int)ramp->size) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Gamma ramp size must match current ramp size"); return; } XRRCrtcGamma* gamma = XRRAllocGamma(ramp->size); memcpy(gamma->red, ramp->red, ramp->size * sizeof(unsigned short)); memcpy(gamma->green, ramp->green, ramp->size * sizeof(unsigned short)); memcpy(gamma->blue, ramp->blue, ramp->size * sizeof(unsigned short)); XRRSetCrtcGamma(_glfw.x11.display, monitor->x11.crtc, gamma); XRRFreeGamma(gamma); } else if (_glfw.x11.vidmode.available) { XF86VidModeSetGammaRamp(_glfw.x11.display, _glfw.x11.screen, ramp->size, (unsigned short*) ramp->red, (unsigned short*) ramp->green, (unsigned short*) ramp->blue); } else { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Gamma ramp access not supported by server"); } } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(None); return monitor->x11.crtc; } GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* handle) { _GLFWmonitor* monitor = (_GLFWmonitor*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(None); return monitor->x11.output; } kitty-0.15.0/glfw/x11_platform.h000066400000000000000000000367441356737523400164230ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 X11 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include #include #include #include #include #include #include // The xcb library is needed to work with libxkb #include // The XRandR extension provides mode setting and gamma control #include // The Xkb extension provides improved keyboard support #include // The Xinerama extension provides legacy monitor indices #include // The XInput extension provides raw mouse motion input #include // The libxkb library is used for improved keyboard support #include "xkb_glfw.h" #include "backend_utils.h" typedef XRRCrtcGamma* (* PFN_XRRAllocGamma)(int); typedef void (* PFN_XRRFreeCrtcInfo)(XRRCrtcInfo*); typedef void (* PFN_XRRFreeGamma)(XRRCrtcGamma*); typedef void (* PFN_XRRFreeOutputInfo)(XRROutputInfo*); typedef void (* PFN_XRRFreeScreenResources)(XRRScreenResources*); typedef XRRCrtcGamma* (* PFN_XRRGetCrtcGamma)(Display*,RRCrtc); typedef int (* PFN_XRRGetCrtcGammaSize)(Display*,RRCrtc); typedef XRRCrtcInfo* (* PFN_XRRGetCrtcInfo) (Display*,XRRScreenResources*,RRCrtc); typedef XRROutputInfo* (* PFN_XRRGetOutputInfo)(Display*,XRRScreenResources*,RROutput); typedef RROutput (* PFN_XRRGetOutputPrimary)(Display*,Window); typedef XRRScreenResources* (* PFN_XRRGetScreenResourcesCurrent)(Display*,Window); typedef Bool (* PFN_XRRQueryExtension)(Display*,int*,int*); typedef Status (* PFN_XRRQueryVersion)(Display*,int*,int*); typedef void (* PFN_XRRSelectInput)(Display*,Window,int); typedef Status (* PFN_XRRSetCrtcConfig)(Display*,XRRScreenResources*,RRCrtc,Time,int,int,RRMode,Rotation,RROutput*,int); typedef void (* PFN_XRRSetCrtcGamma)(Display*,RRCrtc,XRRCrtcGamma*); typedef int (* PFN_XRRUpdateConfiguration)(XEvent*); #define XRRAllocGamma _glfw.x11.randr.AllocGamma #define XRRFreeCrtcInfo _glfw.x11.randr.FreeCrtcInfo #define XRRFreeGamma _glfw.x11.randr.FreeGamma #define XRRFreeOutputInfo _glfw.x11.randr.FreeOutputInfo #define XRRFreeScreenResources _glfw.x11.randr.FreeScreenResources #define XRRGetCrtcGamma _glfw.x11.randr.GetCrtcGamma #define XRRGetCrtcGammaSize _glfw.x11.randr.GetCrtcGammaSize #define XRRGetCrtcInfo _glfw.x11.randr.GetCrtcInfo #define XRRGetOutputInfo _glfw.x11.randr.GetOutputInfo #define XRRGetOutputPrimary _glfw.x11.randr.GetOutputPrimary #define XRRGetScreenResourcesCurrent _glfw.x11.randr.GetScreenResourcesCurrent #define XRRQueryExtension _glfw.x11.randr.QueryExtension #define XRRQueryVersion _glfw.x11.randr.QueryVersion #define XRRSelectInput _glfw.x11.randr.SelectInput #define XRRSetCrtcConfig _glfw.x11.randr.SetCrtcConfig #define XRRSetCrtcGamma _glfw.x11.randr.SetCrtcGamma #define XRRUpdateConfiguration _glfw.x11.randr.UpdateConfiguration typedef XcursorImage* (* PFN_XcursorImageCreate)(int,int); typedef void (* PFN_XcursorImageDestroy)(XcursorImage*); typedef Cursor (* PFN_XcursorImageLoadCursor)(Display*,const XcursorImage*); #define XcursorImageCreate _glfw.x11.xcursor.ImageCreate #define XcursorImageDestroy _glfw.x11.xcursor.ImageDestroy #define XcursorImageLoadCursor _glfw.x11.xcursor.ImageLoadCursor typedef Bool (* PFN_XineramaIsActive)(Display*); typedef Bool (* PFN_XineramaQueryExtension)(Display*,int*,int*); typedef XineramaScreenInfo* (* PFN_XineramaQueryScreens)(Display*,int*); #define XineramaIsActive _glfw.x11.xinerama.IsActive #define XineramaQueryExtension _glfw.x11.xinerama.QueryExtension #define XineramaQueryScreens _glfw.x11.xinerama.QueryScreens typedef Bool (* PFN_XF86VidModeQueryExtension)(Display*,int*,int*); typedef Bool (* PFN_XF86VidModeGetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*); typedef Bool (* PFN_XF86VidModeSetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*); typedef Bool (* PFN_XF86VidModeGetGammaRampSize)(Display*,int,int*); #define XF86VidModeQueryExtension _glfw.x11.vidmode.QueryExtension #define XF86VidModeGetGammaRamp _glfw.x11.vidmode.GetGammaRamp #define XF86VidModeSetGammaRamp _glfw.x11.vidmode.SetGammaRamp #define XF86VidModeGetGammaRampSize _glfw.x11.vidmode.GetGammaRampSize typedef Status (* PFN_XIQueryVersion)(Display*,int*,int*); typedef int (* PFN_XISelectEvents)(Display*,Window,XIEventMask*,int); #define XIQueryVersion _glfw.x11.xi.QueryVersion #define XISelectEvents _glfw.x11.xi.SelectEvents typedef Bool (* PFN_XRenderQueryExtension)(Display*,int*,int*); typedef Status (* PFN_XRenderQueryVersion)(Display*dpy,int*,int*); typedef XRenderPictFormat* (* PFN_XRenderFindVisualFormat)(Display*,Visual const*); #define XRenderQueryExtension _glfw.x11.xrender.QueryExtension #define XRenderQueryVersion _glfw.x11.xrender.QueryVersion #define XRenderFindVisualFormat _glfw.x11.xrender.FindVisualFormat typedef VkFlags VkXlibSurfaceCreateFlagsKHR; typedef VkFlags VkXcbSurfaceCreateFlagsKHR; typedef struct VkXlibSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkXlibSurfaceCreateFlagsKHR flags; Display* dpy; Window window; } VkXlibSurfaceCreateInfoKHR; typedef struct VkXcbSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkXcbSurfaceCreateFlagsKHR flags; xcb_connection_t* connection; xcb_window_t window; } VkXcbSurfaceCreateInfoKHR; typedef VkResult (APIENTRY *PFN_vkCreateXlibSurfaceKHR)(VkInstance,const VkXlibSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*); typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice,uint32_t,Display*,VisualID); typedef VkResult (APIENTRY *PFN_vkCreateXcbSurfaceKHR)(VkInstance,const VkXcbSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*); typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice,uint32_t,xcb_connection_t*,xcb_visualid_t); #include "posix_thread.h" #include "posix_time.h" #include "glx_context.h" #include "egl_context.h" #include "osmesa_context.h" #if defined(__linux__) #include "linux_joystick.h" #else #include "null_joystick.h" #endif #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL) #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->x11.handle) #define _GLFW_EGL_NATIVE_DISPLAY ((EGLNativeDisplayType) _glfw.x11.display) #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowX11 x11 #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryX11 x11 #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorX11 x11 #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorX11 x11 // X11-specific per-window data // typedef struct _GLFWwindowX11 { Colormap colormap; Window handle; bool iconified; bool maximized; // Whether the visual supports framebuffer transparency bool transparent; // Cached position and size used to filter out duplicate events int width, height; int xpos, ypos; // The last received cursor position, regardless of source int lastCursorPosX, lastCursorPosY; // The last position the cursor was warped to by GLFW int warpCursorPosX, warpCursorPosY; } _GLFWwindowX11; // X11-specific global data // typedef struct _GLFWlibraryX11 { Display* display; int screen; Window root; // System content scale float contentScaleX, contentScaleY; // Helper window for IPC Window helperWindowHandle; // Invisible cursor for hidden cursor mode Cursor hiddenCursorHandle; // Context for mapping window XIDs to _GLFWwindow pointers XContext context; // Most recent error code received by X error handler int errorCode; // Primary selection string (while the primary selection is owned) char* primarySelectionString; // Clipboard string (while the selection is owned) char* clipboardString; // Where to place the cursor when re-enabled double restoreCursorPosX, restoreCursorPosY; // The window whose disabled cursor mode is active _GLFWwindow* disabledCursorWindow; // Window manager atoms Atom NET_SUPPORTED; Atom NET_SUPPORTING_WM_CHECK; Atom WM_PROTOCOLS; Atom WM_STATE; Atom WM_DELETE_WINDOW; Atom NET_WM_NAME; Atom NET_WM_ICON_NAME; Atom NET_WM_ICON; Atom NET_WM_PID; Atom NET_WM_PING; Atom NET_WM_WINDOW_TYPE; Atom NET_WM_WINDOW_TYPE_NORMAL; Atom NET_WM_STATE; Atom NET_WM_STATE_ABOVE; Atom NET_WM_STATE_FULLSCREEN; Atom NET_WM_STATE_MAXIMIZED_VERT; Atom NET_WM_STATE_MAXIMIZED_HORZ; Atom NET_WM_STATE_DEMANDS_ATTENTION; Atom NET_WM_BYPASS_COMPOSITOR; Atom NET_WM_FULLSCREEN_MONITORS; Atom NET_WM_WINDOW_OPACITY; Atom NET_WM_CM_Sx; Atom NET_WORKAREA; Atom NET_CURRENT_DESKTOP; Atom NET_ACTIVE_WINDOW; Atom NET_FRAME_EXTENTS; Atom NET_REQUEST_FRAME_EXTENTS; Atom MOTIF_WM_HINTS; // Xdnd (drag and drop) atoms Atom XdndAware; Atom XdndEnter; Atom XdndPosition; Atom XdndStatus; Atom XdndActionCopy; Atom XdndDrop; Atom XdndFinished; Atom XdndSelection; Atom XdndTypeList; Atom text_uri_list; // Selection (clipboard) atoms Atom TARGETS; Atom MULTIPLE; Atom INCR; Atom CLIPBOARD; Atom PRIMARY; Atom CLIPBOARD_MANAGER; Atom SAVE_TARGETS; Atom NULL_; Atom UTF8_STRING; Atom COMPOUND_STRING; Atom ATOM_PAIR; Atom GLFW_SELECTION; // XRM database atom Atom RESOURCE_MANAGER; struct { bool available; void* handle; int eventBase; int errorBase; int major; int minor; bool gammaBroken; bool monitorBroken; PFN_XRRAllocGamma AllocGamma; PFN_XRRFreeCrtcInfo FreeCrtcInfo; PFN_XRRFreeGamma FreeGamma; PFN_XRRFreeOutputInfo FreeOutputInfo; PFN_XRRFreeScreenResources FreeScreenResources; PFN_XRRGetCrtcGamma GetCrtcGamma; PFN_XRRGetCrtcGammaSize GetCrtcGammaSize; PFN_XRRGetCrtcInfo GetCrtcInfo; PFN_XRRGetOutputInfo GetOutputInfo; PFN_XRRGetOutputPrimary GetOutputPrimary; PFN_XRRGetScreenResourcesCurrent GetScreenResourcesCurrent; PFN_XRRQueryExtension QueryExtension; PFN_XRRQueryVersion QueryVersion; PFN_XRRSelectInput SelectInput; PFN_XRRSetCrtcConfig SetCrtcConfig; PFN_XRRSetCrtcGamma SetCrtcGamma; PFN_XRRUpdateConfiguration UpdateConfiguration; } randr; _GLFWXKBData xkb; _GLFWDBUSData dbus; struct { int count; int timeout; int interval; int blanking; int exposure; } saver; struct { int version; Window source; Atom format; } xdnd; struct { void* handle; PFN_XcursorImageCreate ImageCreate; PFN_XcursorImageDestroy ImageDestroy; PFN_XcursorImageLoadCursor ImageLoadCursor; } xcursor; struct { bool available; void* handle; int major; int minor; PFN_XineramaIsActive IsActive; PFN_XineramaQueryExtension QueryExtension; PFN_XineramaQueryScreens QueryScreens; } xinerama; struct { bool available; void* handle; int eventBase; int errorBase; PFN_XF86VidModeQueryExtension QueryExtension; PFN_XF86VidModeGetGammaRamp GetGammaRamp; PFN_XF86VidModeSetGammaRamp SetGammaRamp; PFN_XF86VidModeGetGammaRampSize GetGammaRampSize; } vidmode; struct { bool available; void* handle; int majorOpcode; int eventBase; int errorBase; int major; int minor; PFN_XIQueryVersion QueryVersion; PFN_XISelectEvents SelectEvents; } xi; struct { bool available; void* handle; int major; int minor; int eventBase; int errorBase; PFN_XRenderQueryExtension QueryExtension; PFN_XRenderQueryVersion QueryVersion; PFN_XRenderFindVisualFormat FindVisualFormat; } xrender; EventLoopData eventLoopData; } _GLFWlibraryX11; // X11-specific per-monitor data // typedef struct _GLFWmonitorX11 { RROutput output; RRCrtc crtc; RRMode oldMode; // Index of corresponding Xinerama screen, // for EWMH full screen window placement int index; } _GLFWmonitorX11; // X11-specific per-cursor data // typedef struct _GLFWcursorX11 { Cursor handle; } _GLFWcursorX11; void _glfwPollMonitorsX11(void); void _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired); void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor); Cursor _glfwCreateCursorX11(const GLFWimage* image, int xhot, int yhot); unsigned long _glfwGetWindowPropertyX11(Window window, Atom property, Atom type, unsigned char** value); bool _glfwIsVisualTransparentX11(Visual* visual); void _glfwGrabErrorHandlerX11(void); void _glfwReleaseErrorHandlerX11(void); void _glfwInputErrorX11(int error, const char* message); void _glfwGetSystemContentScaleX11(float* xscale, float* yscale, bool bypass_cache); void _glfwPushSelectionToManagerX11(void); kitty-0.15.0/glfw/x11_window.c000066400000000000000000002634411356737523400160750ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 X11 - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2002-2006 Marcus Geelnard // Copyright (c) 2006-2019 Camilla Löwy // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== // It is fine to use C99 in this file because it will not be built with VS //======================================================================== #define _GNU_SOURCE #include "internal.h" #include "backend_utils.h" #include "linux_notify.h" #include "../kitty/monotonic.h" #include #include #include #include #include #include #include #include // Action for EWMH client messages #define _NET_WM_STATE_REMOVE 0 #define _NET_WM_STATE_ADD 1 #define _NET_WM_STATE_TOGGLE 2 // Additional mouse button names for XButtonEvent #define Button6 6 #define Button7 7 // Motif WM hints flags #define MWM_HINTS_DECORATIONS 2 #define MWM_DECOR_ALL 1 #define _GLFW_XDND_VERSION 5 // Wait for data to arrive using poll // This avoids blocking other threads via the per-display Xlib lock that also // covers GLX functions // static unsigned _glfwDispatchX11Events(void); static void handleEvents(monotonic_t timeout) { EVDBG("starting handleEvents(%.2f)", monotonic_t_to_s_double(timeout)); int display_read_ok = pollForEvents(&_glfw.x11.eventLoopData, timeout); EVDBG("display_read_ok: %d", display_read_ok); if (display_read_ok) { unsigned dispatched = _glfwDispatchX11Events(); (void)dispatched; EVDBG("dispatched %u X11 events", dispatched); } glfw_ibus_dispatch(&_glfw.x11.xkb.ibus); glfw_dbus_session_bus_dispatch(); EVDBG("other dispatch done"); if (_glfw.x11.eventLoopData.wakeup_fd_ready) check_for_wakeup_events(&_glfw.x11.eventLoopData); } static bool waitForX11Event(monotonic_t timeout) { // returns true if there is X11 data waiting to be read, does not run watches and timers monotonic_t end_time = glfwGetTime() + timeout; while(true) { if (timeout >= 0) { const int result = pollWithTimeout(_glfw.x11.eventLoopData.fds, 1, timeout); if (result > 0) return true; timeout = end_time - glfwGetTime(); if (timeout <= 0) return false; if (result < 0 && (errno == EINTR || errno == EAGAIN)) continue; return false; } else { const int result = poll(_glfw.x11.eventLoopData.fds, 1, -1); if (result > 0) return true; if (result < 0 && (errno == EINTR || errno == EAGAIN)) continue; return false; } } } // Waits until a VisibilityNotify event arrives for the specified window or the // timeout period elapses (ICCCM section 4.2.2) // static bool waitForVisibilityNotify(_GLFWwindow* window) { XEvent dummy; while (!XCheckTypedWindowEvent(_glfw.x11.display, window->x11.handle, VisibilityNotify, &dummy)) { if (!waitForX11Event(ms_to_monotonic_t(100ll))) return false; } return true; } // Returns whether the window is iconified // static int getWindowState(_GLFWwindow* window) { int result = WithdrawnState; struct { CARD32 state; Window icon; } *state = NULL; if (_glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.WM_STATE, _glfw.x11.WM_STATE, (unsigned char**) &state) >= 2) { result = state->state; } if (state) XFree(state); return result; } // Returns whether the event is a selection event // static Bool isSelectionEvent(Display* display UNUSED, XEvent* event, XPointer pointer UNUSED) { if (event->xany.window != _glfw.x11.helperWindowHandle) return False; return event->type == SelectionRequest || event->type == SelectionNotify || event->type == SelectionClear; } // Returns whether it is a _NET_FRAME_EXTENTS event for the specified window // static Bool isFrameExtentsEvent(Display* display UNUSED, XEvent* event, XPointer pointer) { _GLFWwindow* window = (_GLFWwindow*) pointer; return event->type == PropertyNotify && event->xproperty.state == PropertyNewValue && event->xproperty.window == window->x11.handle && event->xproperty.atom == _glfw.x11.NET_FRAME_EXTENTS; } // Returns whether it is a property event for the specified selection transfer // static Bool isSelPropNewValueNotify(Display* display UNUSED, XEvent* event, XPointer pointer) { XEvent* notification = (XEvent*) pointer; return event->type == PropertyNotify && event->xproperty.state == PropertyNewValue && event->xproperty.window == notification->xselection.requestor && event->xproperty.atom == notification->xselection.property; } // Translates an X event modifier state mask // static int translateState(int state) { int mods = 0; if (state & ShiftMask) mods |= GLFW_MOD_SHIFT; if (state & ControlMask) mods |= GLFW_MOD_CONTROL; if (state & Mod1Mask) mods |= GLFW_MOD_ALT; if (state & Mod4Mask) mods |= GLFW_MOD_SUPER; if (state & LockMask) mods |= GLFW_MOD_CAPS_LOCK; if (state & Mod2Mask) mods |= GLFW_MOD_NUM_LOCK; return mods; } // Sends an EWMH or ICCCM event to the window manager // static void sendEventToWM(_GLFWwindow* window, Atom type, long a, long b, long c, long d, long e) { XEvent event = { ClientMessage }; event.xclient.window = window->x11.handle; event.xclient.format = 32; // Data is 32-bit longs event.xclient.message_type = type; event.xclient.data.l[0] = a; event.xclient.data.l[1] = b; event.xclient.data.l[2] = c; event.xclient.data.l[3] = d; event.xclient.data.l[4] = e; XSendEvent(_glfw.x11.display, _glfw.x11.root, False, SubstructureNotifyMask | SubstructureRedirectMask, &event); } // Updates the normal hints according to the window settings // static void updateNormalHints(_GLFWwindow* window, int width, int height) { XSizeHints* hints = XAllocSizeHints(); if (!window->monitor) { if (window->resizable) { if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE) { hints->flags |= PMinSize; hints->min_width = window->minwidth; hints->min_height = window->minheight; } if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) { hints->flags |= PMaxSize; hints->max_width = window->maxwidth; hints->max_height = window->maxheight; } if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) { hints->flags |= PAspect; hints->min_aspect.x = hints->max_aspect.x = window->numer; hints->min_aspect.y = hints->max_aspect.y = window->denom; } } else { hints->flags |= (PMinSize | PMaxSize); hints->min_width = hints->max_width = width; hints->min_height = hints->max_height = height; } } hints->flags |= PWinGravity; hints->win_gravity = StaticGravity; XSetWMNormalHints(_glfw.x11.display, window->x11.handle, hints); XFree(hints); } static inline bool is_window_fullscreen(_GLFWwindow* window) { Atom* states; unsigned long i; bool ans = false; if (!_glfw.x11.NET_WM_STATE || !_glfw.x11.NET_WM_STATE_FULLSCREEN) return ans; const unsigned long count = _glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, (unsigned char**) &states); for (i = 0; i < count; i++) { if (states[i] == _glfw.x11.NET_WM_STATE_FULLSCREEN) { ans = true; break; } } if (states) XFree(states); return ans; } static inline void set_fullscreen(_GLFWwindow *window, bool on) { if (_glfw.x11.NET_WM_STATE && _glfw.x11.NET_WM_STATE_FULLSCREEN) { sendEventToWM(window, _glfw.x11.NET_WM_STATE, on ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE, _glfw.x11.NET_WM_STATE_FULLSCREEN, 0, 1, 0); // Enable compositor bypass if (!window->x11.transparent) { if (on) { const unsigned long value = 1; XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_BYPASS_COMPOSITOR, XA_CARDINAL, 32, PropModeReplace, (unsigned char*) &value, 1); } else { XDeleteProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_BYPASS_COMPOSITOR); } } } else { static bool warned = false; if (!warned) { warned = true; _glfwInputErrorX11(GLFW_PLATFORM_ERROR, "X11: Failed to toggle fullscreen, the window manager does not support it"); } } } bool _glfwPlatformToggleFullscreen(_GLFWwindow *window, unsigned int flags UNUSED) { bool already_fullscreen = is_window_fullscreen(window); set_fullscreen(window, !already_fullscreen); return !already_fullscreen; } // Updates the full screen status of the window // static void updateWindowMode(_GLFWwindow* window) { if (window->monitor) { if (_glfw.x11.xinerama.available && _glfw.x11.NET_WM_FULLSCREEN_MONITORS) { sendEventToWM(window, _glfw.x11.NET_WM_FULLSCREEN_MONITORS, window->monitor->x11.index, window->monitor->x11.index, window->monitor->x11.index, window->monitor->x11.index, 0); } set_fullscreen(window, true); } else { if (_glfw.x11.xinerama.available && _glfw.x11.NET_WM_FULLSCREEN_MONITORS) { XDeleteProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_FULLSCREEN_MONITORS); } set_fullscreen(window, false); } } // Encode a Unicode code point to a UTF-8 stream // Based on cutef8 by Jeff Bezanson (Public Domain) // static size_t encodeUTF8(char* s, unsigned int ch) { size_t count = 0; if (ch < 0x80) s[count++] = (char) ch; else if (ch < 0x800) { s[count++] = (ch >> 6) | 0xc0; s[count++] = (ch & 0x3f) | 0x80; } else if (ch < 0x10000) { s[count++] = (ch >> 12) | 0xe0; s[count++] = ((ch >> 6) & 0x3f) | 0x80; s[count++] = (ch & 0x3f) | 0x80; } else if (ch < 0x110000) { s[count++] = (ch >> 18) | 0xf0; s[count++] = ((ch >> 12) & 0x3f) | 0x80; s[count++] = ((ch >> 6) & 0x3f) | 0x80; s[count++] = (ch & 0x3f) | 0x80; } return count; } // Convert the specified Latin-1 string to UTF-8 // static char* convertLatin1toUTF8(const char* source) { size_t size = 1; const char* sp; for (sp = source; *sp; sp++) size += (*sp & 0x80) ? 2 : 1; char* target = calloc(size, 1); char* tp = target; for (sp = source; *sp; sp++) tp += encodeUTF8(tp, *sp); return target; } // Updates the cursor image according to its cursor mode // static void updateCursorImage(_GLFWwindow* window) { if (window->cursorMode == GLFW_CURSOR_NORMAL) { if (window->cursor) { XDefineCursor(_glfw.x11.display, window->x11.handle, window->cursor->x11.handle); } else XUndefineCursor(_glfw.x11.display, window->x11.handle); } else { XDefineCursor(_glfw.x11.display, window->x11.handle, _glfw.x11.hiddenCursorHandle); } } // Apply disabled cursor mode to a focused window // static void disableCursor(_GLFWwindow* window) { if (_glfw.x11.xi.available) { XIEventMask em; unsigned char mask[XIMaskLen(XI_RawMotion)] = { 0 }; em.deviceid = XIAllMasterDevices; em.mask_len = sizeof(mask); em.mask = mask; XISetMask(mask, XI_RawMotion); XISelectEvents(_glfw.x11.display, _glfw.x11.root, &em, 1); } _glfw.x11.disabledCursorWindow = window; _glfwPlatformGetCursorPos(window, &_glfw.x11.restoreCursorPosX, &_glfw.x11.restoreCursorPosY); updateCursorImage(window); _glfwCenterCursorInContentArea(window); XGrabPointer(_glfw.x11.display, window->x11.handle, True, ButtonPressMask | ButtonReleaseMask | PointerMotionMask, GrabModeAsync, GrabModeAsync, window->x11.handle, _glfw.x11.hiddenCursorHandle, CurrentTime); } // Exit disabled cursor mode for the specified window // static void enableCursor(_GLFWwindow* window) { if (_glfw.x11.xi.available) { XIEventMask em; unsigned char mask[] = { 0 }; em.deviceid = XIAllMasterDevices; em.mask_len = sizeof(mask); em.mask = mask; XISelectEvents(_glfw.x11.display, _glfw.x11.root, &em, 1); } _glfw.x11.disabledCursorWindow = NULL; XUngrabPointer(_glfw.x11.display, CurrentTime); _glfwPlatformSetCursorPos(window, _glfw.x11.restoreCursorPosX, _glfw.x11.restoreCursorPosY); updateCursorImage(window); } // Create the X11 window (and its colormap) // static bool createNativeWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, Visual* visual, int depth) { int width = wndconfig->width; int height = wndconfig->height; if (wndconfig->scaleToMonitor) { width *= (int)_glfw.x11.contentScaleX; height *= (int)_glfw.x11.contentScaleY; } // Create a colormap based on the visual used by the current context window->x11.colormap = XCreateColormap(_glfw.x11.display, _glfw.x11.root, visual, AllocNone); window->x11.transparent = _glfwIsVisualTransparentX11(visual); // Create the actual window { XSetWindowAttributes wa; const unsigned long wamask = CWBorderPixel | CWColormap | CWEventMask; wa.colormap = window->x11.colormap; wa.border_pixel = 0; wa.event_mask = StructureNotifyMask | KeyPressMask | KeyReleaseMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask | FocusChangeMask | VisibilityChangeMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask; _glfwGrabErrorHandlerX11(); window->x11.handle = XCreateWindow(_glfw.x11.display, _glfw.x11.root, 0, 0, width, height, 0, // Border width depth, // Color depth InputOutput, visual, wamask, &wa); _glfwReleaseErrorHandlerX11(); if (!window->x11.handle) { _glfwInputErrorX11(GLFW_PLATFORM_ERROR, "X11: Failed to create window"); return false; } XSaveContext(_glfw.x11.display, window->x11.handle, _glfw.x11.context, (XPointer) window); } if (!wndconfig->decorated) _glfwPlatformSetWindowDecorated(window, false); if (_glfw.x11.NET_WM_STATE && !window->monitor) { Atom states[3]; int count = 0; if (wndconfig->floating) { if (_glfw.x11.NET_WM_STATE_ABOVE) states[count++] = _glfw.x11.NET_WM_STATE_ABOVE; } if (wndconfig->maximized) { if (_glfw.x11.NET_WM_STATE_MAXIMIZED_VERT && _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ) { states[count++] = _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT; states[count++] = _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ; window->x11.maximized = true; } } if (count) { XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char*) &states, count); } } // Declare the WM protocols supported by GLFW { Atom protocols[] = { _glfw.x11.WM_DELETE_WINDOW, _glfw.x11.NET_WM_PING }; XSetWMProtocols(_glfw.x11.display, window->x11.handle, protocols, sizeof(protocols) / sizeof(Atom)); } // Declare our PID { const long pid = getpid(); XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_PID, XA_CARDINAL, 32, PropModeReplace, (unsigned char*) &pid, 1); } if (_glfw.x11.NET_WM_WINDOW_TYPE && _glfw.x11.NET_WM_WINDOW_TYPE_NORMAL) { Atom type = _glfw.x11.NET_WM_WINDOW_TYPE_NORMAL; XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (unsigned char*) &type, 1); } // Set ICCCM WM_HINTS property { XWMHints* hints = XAllocWMHints(); if (!hints) { _glfwInputError(GLFW_OUT_OF_MEMORY, "X11: Failed to allocate WM hints"); return false; } hints->flags = StateHint; hints->initial_state = NormalState; XSetWMHints(_glfw.x11.display, window->x11.handle, hints); XFree(hints); } updateNormalHints(window, width, height); // Set ICCCM WM_CLASS property { XClassHint* hint = XAllocClassHint(); if (strlen(wndconfig->x11.instanceName) && strlen(wndconfig->x11.className)) { hint->res_name = (char*) wndconfig->x11.instanceName; hint->res_class = (char*) wndconfig->x11.className; } else { const char* resourceName = getenv("RESOURCE_NAME"); if (resourceName && strlen(resourceName)) hint->res_name = (char*) resourceName; else if (strlen(wndconfig->title)) hint->res_name = (char*) wndconfig->title; else hint->res_name = (char*) "glfw-application"; if (strlen(wndconfig->title)) hint->res_class = (char*) wndconfig->title; else hint->res_class = (char*) "GLFW-Application"; } XSetClassHint(_glfw.x11.display, window->x11.handle, hint); XFree(hint); } // Announce support for Xdnd (drag and drop) { const Atom version = _GLFW_XDND_VERSION; XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.XdndAware, XA_ATOM, 32, PropModeReplace, (unsigned char*) &version, 1); } _glfwPlatformSetWindowTitle(window, wndconfig->title); _glfwPlatformGetWindowPos(window, &window->x11.xpos, &window->x11.ypos); _glfwPlatformGetWindowSize(window, &window->x11.width, &window->x11.height); return true; } // Set the specified property to the selection converted to the requested target // static Atom writeTargetToProperty(const XSelectionRequestEvent* request) { int i; char* selectionString = NULL; const Atom formats[] = { _glfw.x11.UTF8_STRING, XA_STRING }; const int formatCount = sizeof(formats) / sizeof(formats[0]); if (request->selection == _glfw.x11.PRIMARY) selectionString = _glfw.x11.primarySelectionString; else selectionString = _glfw.x11.clipboardString; if (request->property == None) { // The requester is a legacy client (ICCCM section 2.2) // We don't support legacy clients, so fail here return None; } if (request->target == _glfw.x11.TARGETS) { // The list of supported targets was requested const Atom targets[] = { _glfw.x11.TARGETS, _glfw.x11.MULTIPLE, _glfw.x11.UTF8_STRING, XA_STRING }; XChangeProperty(_glfw.x11.display, request->requestor, request->property, XA_ATOM, 32, PropModeReplace, (unsigned char*) targets, sizeof(targets) / sizeof(targets[0])); return request->property; } if (request->target == _glfw.x11.MULTIPLE) { // Multiple conversions were requested Atom* targets; unsigned long i, count; count = _glfwGetWindowPropertyX11(request->requestor, request->property, _glfw.x11.ATOM_PAIR, (unsigned char**) &targets); for (i = 0; i < count; i += 2) { int j; for (j = 0; j < formatCount; j++) { if (targets[i] == formats[j]) break; } if (j < formatCount) { XChangeProperty(_glfw.x11.display, request->requestor, targets[i + 1], targets[i], 8, PropModeReplace, (unsigned char *) selectionString, strlen(selectionString)); } else targets[i + 1] = None; } XChangeProperty(_glfw.x11.display, request->requestor, request->property, _glfw.x11.ATOM_PAIR, 32, PropModeReplace, (unsigned char*) targets, count); XFree(targets); return request->property; } if (request->target == _glfw.x11.SAVE_TARGETS) { // The request is a check whether we support SAVE_TARGETS // It should be handled as a no-op side effect target XChangeProperty(_glfw.x11.display, request->requestor, request->property, _glfw.x11.NULL_, 32, PropModeReplace, NULL, 0); return request->property; } // Conversion to a data target was requested for (i = 0; i < formatCount; i++) { if (request->target == formats[i]) { // The requested target is one we support XChangeProperty(_glfw.x11.display, request->requestor, request->property, request->target, 8, PropModeReplace, (unsigned char *) selectionString, strlen(selectionString)); return request->property; } } // The requested target is not supported return None; } static void handleSelectionClear(XEvent* event) { if (event->xselectionclear.selection == _glfw.x11.PRIMARY) { free(_glfw.x11.primarySelectionString); _glfw.x11.primarySelectionString = NULL; } else { free(_glfw.x11.clipboardString); _glfw.x11.clipboardString = NULL; } } static void handleSelectionRequest(XEvent* event) { const XSelectionRequestEvent* request = &event->xselectionrequest; XEvent reply = { SelectionNotify }; reply.xselection.property = writeTargetToProperty(request); reply.xselection.display = request->display; reply.xselection.requestor = request->requestor; reply.xselection.selection = request->selection; reply.xselection.target = request->target; reply.xselection.time = request->time; XSendEvent(_glfw.x11.display, request->requestor, False, 0, &reply); } static const char* getSelectionString(Atom selection) { char** selectionString = NULL; const Atom targets[] = { _glfw.x11.UTF8_STRING, XA_STRING }; const size_t targetCount = sizeof(targets) / sizeof(targets[0]); if (selection == _glfw.x11.PRIMARY) selectionString = &_glfw.x11.primarySelectionString; else selectionString = &_glfw.x11.clipboardString; if (XGetSelectionOwner(_glfw.x11.display, selection) == _glfw.x11.helperWindowHandle) { // Instead of doing a large number of X round-trips just to put this // string into a window property and then read it back, just return it return *selectionString; } free(*selectionString); *selectionString = NULL; for (size_t i = 0; i < targetCount; i++) { char* data; Atom actualType; int actualFormat; unsigned long itemCount, bytesAfter; monotonic_t start = glfwGetTime(); XEvent notification, dummy; XConvertSelection(_glfw.x11.display, selection, targets[i], _glfw.x11.GLFW_SELECTION, _glfw.x11.helperWindowHandle, CurrentTime); while (!XCheckTypedWindowEvent(_glfw.x11.display, _glfw.x11.helperWindowHandle, SelectionNotify, ¬ification)) { monotonic_t time = glfwGetTime(); if (time - start > s_to_monotonic_t(2ll)) return ""; waitForX11Event(s_to_monotonic_t(2ll) - (time - start)); } if (notification.xselection.property == None) continue; XCheckIfEvent(_glfw.x11.display, &dummy, isSelPropNewValueNotify, (XPointer) ¬ification); XGetWindowProperty(_glfw.x11.display, notification.xselection.requestor, notification.xselection.property, 0, LONG_MAX, True, AnyPropertyType, &actualType, &actualFormat, &itemCount, &bytesAfter, (unsigned char**) &data); if (actualType == _glfw.x11.INCR) { size_t size = 1; char* string = NULL; for (;;) { start = glfwGetTime(); while (!XCheckIfEvent(_glfw.x11.display, &dummy, isSelPropNewValueNotify, (XPointer) ¬ification)) { monotonic_t time = glfwGetTime(); if (time - start > s_to_monotonic_t(2ll)) return ""; waitForX11Event(s_to_monotonic_t(2ll) - (time - start)); } XFree(data); XGetWindowProperty(_glfw.x11.display, notification.xselection.requestor, notification.xselection.property, 0, LONG_MAX, True, AnyPropertyType, &actualType, &actualFormat, &itemCount, &bytesAfter, (unsigned char**) &data); if (itemCount) { size += itemCount; string = realloc(string, size); string[size - itemCount - 1] = '\0'; strcat(string, data); } if (!itemCount) { if (targets[i] == XA_STRING) { *selectionString = convertLatin1toUTF8(string); free(string); } else *selectionString = string; break; } } } else if (actualType == targets[i]) { if (targets[i] == XA_STRING) *selectionString = convertLatin1toUTF8(data); else *selectionString = _glfw_strdup(data); } XFree(data); if (*selectionString) break; } if (!*selectionString) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, "X11: Failed to convert selection to string"); } return *selectionString; } // Make the specified window and its video mode active on its monitor // static void acquireMonitor(_GLFWwindow* window) { if (_glfw.x11.saver.count == 0) { // Remember old screen saver settings XGetScreenSaver(_glfw.x11.display, &_glfw.x11.saver.timeout, &_glfw.x11.saver.interval, &_glfw.x11.saver.blanking, &_glfw.x11.saver.exposure); // Disable screen saver XSetScreenSaver(_glfw.x11.display, 0, 0, DontPreferBlanking, DefaultExposures); } if (!window->monitor->window) _glfw.x11.saver.count++; _glfwSetVideoModeX11(window->monitor, &window->videoMode); _glfwInputMonitorWindow(window->monitor, window); } // Remove the window and restore the original video mode // static void releaseMonitor(_GLFWwindow* window) { if (window->monitor->window != window) return; _glfwInputMonitorWindow(window->monitor, NULL); _glfwRestoreVideoModeX11(window->monitor); _glfw.x11.saver.count--; if (_glfw.x11.saver.count == 0) { // Restore old screen saver settings XSetScreenSaver(_glfw.x11.display, _glfw.x11.saver.timeout, _glfw.x11.saver.interval, _glfw.x11.saver.blanking, _glfw.x11.saver.exposure); } } static void onConfigChange(void) { float xscale, yscale; _glfwGetSystemContentScaleX11(&xscale, &yscale, true); if (xscale != _glfw.x11.contentScaleX || yscale != _glfw.x11.contentScaleY) { _GLFWwindow* window = _glfw.windowListHead; _glfw.x11.contentScaleX = xscale; _glfw.x11.contentScaleY = yscale; while (window) { _glfwInputWindowContentScale(window, xscale, yscale); window = window->next; } } } // Process the specified X event // static void processEvent(XEvent *event) { static bool keymap_dirty = false; #define UPDATE_KEYMAP_IF_NEEDED if (keymap_dirty) { keymap_dirty = false; glfw_xkb_compile_keymap(&_glfw.x11.xkb, NULL); } if (_glfw.x11.randr.available) { if (event->type == _glfw.x11.randr.eventBase + RRNotify) { XRRUpdateConfiguration(event); _glfwPollMonitorsX11(); return; } } if (event->type == PropertyNotify && event->xproperty.window == _glfw.x11.root && event->xproperty.atom == _glfw.x11.RESOURCE_MANAGER) { onConfigChange(); return; } if (event->type == GenericEvent) { if (_glfw.x11.xi.available) { _GLFWwindow* window = _glfw.x11.disabledCursorWindow; if (window && event->xcookie.extension == _glfw.x11.xi.majorOpcode && XGetEventData(_glfw.x11.display, &event->xcookie) && event->xcookie.evtype == XI_RawMotion) { XIRawEvent* re = event->xcookie.data; if (re->valuators.mask_len) { const double* values = re->raw_values; double xpos = window->virtualCursorPosX; double ypos = window->virtualCursorPosY; if (XIMaskIsSet(re->valuators.mask, 0)) { xpos += *values; values++; } if (XIMaskIsSet(re->valuators.mask, 1)) ypos += *values; _glfwInputCursorPos(window, xpos, ypos); } } XFreeEventData(_glfw.x11.display, &event->xcookie); } return; } if (event->type == SelectionClear) { handleSelectionClear(event); return; } else if (event->type == SelectionRequest) { handleSelectionRequest(event); return; } else if (event->type == _glfw.x11.xkb.eventBase) { XkbEvent *kb_event = (XkbEvent*)event; switch(kb_event->any.xkb_type) { case XkbNewKeyboardNotify: if(!glfw_xkb_update_x11_keyboard_id(&_glfw.x11.xkb)) return; /* fallthrough */ case XkbMapNotify: { keymap_dirty = true; return; } case XkbStateNotify: { UPDATE_KEYMAP_IF_NEEDED; XkbStateNotifyEvent *state_event = (XkbStateNotifyEvent*)kb_event; glfw_xkb_update_modifiers( &_glfw.x11.xkb, state_event->base_mods, state_event->latched_mods, state_event->locked_mods, state_event->base_group, state_event->latched_group, state_event->locked_group ); return; } } return; } _GLFWwindow* window = NULL; if (XFindContext(_glfw.x11.display, event->xany.window, _glfw.x11.context, (XPointer*) &window) != 0) { // This is an event for a window that has already been destroyed return; } switch (event->type) { case KeyPress: { UPDATE_KEYMAP_IF_NEEDED; glfw_xkb_handle_key_event(window, &_glfw.x11.xkb, event->xkey.keycode, GLFW_PRESS); return; } case KeyRelease: { UPDATE_KEYMAP_IF_NEEDED; if (!_glfw.x11.xkb.detectable) { // HACK: Key repeat events will arrive as KeyRelease/KeyPress // pairs with similar or identical time stamps // The key repeat logic in _glfwInputKey expects only key // presses to repeat, so detect and discard release events if (XEventsQueued(_glfw.x11.display, QueuedAfterReading)) { XEvent next; XPeekEvent(_glfw.x11.display, &next); if (next.type == KeyPress && next.xkey.window == event->xkey.window && next.xkey.keycode == event->xkey.keycode) { // HACK: The time of repeat events sometimes doesn't // match that of the press event, so add an // epsilon // Toshiyuki Takahashi can press a button // 16 times per second so it's fairly safe to // assume that no human is pressing the key 50 // times per second (value is ms) if ((next.xkey.time - event->xkey.time) < 20) { // This is very likely a server-generated key repeat // event, so ignore it return; } } } } glfw_xkb_handle_key_event(window, &_glfw.x11.xkb, event->xkey.keycode, GLFW_RELEASE); return; } case ButtonPress: { const int mods = translateState(event->xbutton.state); if (event->xbutton.button == Button1) _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS, mods); else if (event->xbutton.button == Button2) _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS, mods); else if (event->xbutton.button == Button3) _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS, mods); // Modern X provides scroll events as mouse button presses else if (event->xbutton.button == Button4) _glfwInputScroll(window, 0.0, 1.0, 0); else if (event->xbutton.button == Button5) _glfwInputScroll(window, 0.0, -1.0, 0); else if (event->xbutton.button == Button6) _glfwInputScroll(window, 1.0, 0.0, 0); else if (event->xbutton.button == Button7) _glfwInputScroll(window, -1.0, 0.0, 0); else { // Additional buttons after 7 are treated as regular buttons // We subtract 4 to fill the gap left by scroll input above _glfwInputMouseClick(window, event->xbutton.button - Button1 - 4, GLFW_PRESS, mods); } return; } case ButtonRelease: { const int mods = translateState(event->xbutton.state); if (event->xbutton.button == Button1) { _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE, mods); } else if (event->xbutton.button == Button2) { _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_MIDDLE, GLFW_RELEASE, mods); } else if (event->xbutton.button == Button3) { _glfwInputMouseClick(window, GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE, mods); } else if (event->xbutton.button > Button7) { // Additional buttons after 7 are treated as regular buttons // We subtract 4 to fill the gap left by scroll input above _glfwInputMouseClick(window, event->xbutton.button - Button1 - 4, GLFW_RELEASE, mods); } return; } case EnterNotify: { // XEnterWindowEvent is XCrossingEvent const int x = event->xcrossing.x; const int y = event->xcrossing.y; // HACK: This is a workaround for WMs (KWM, Fluxbox) that otherwise // ignore the defined cursor for hidden cursor mode if (window->cursorMode == GLFW_CURSOR_HIDDEN) updateCursorImage(window); _glfwInputCursorEnter(window, true); _glfwInputCursorPos(window, x, y); window->x11.lastCursorPosX = x; window->x11.lastCursorPosY = y; return; } case LeaveNotify: { _glfwInputCursorEnter(window, false); return; } case MotionNotify: { const int x = event->xmotion.x; const int y = event->xmotion.y; if (x != window->x11.warpCursorPosX || y != window->x11.warpCursorPosY) { // The cursor was moved by something other than GLFW if (window->cursorMode == GLFW_CURSOR_DISABLED) { if (_glfw.x11.disabledCursorWindow != window) return; if (_glfw.x11.xi.available) return; const int dx = x - window->x11.lastCursorPosX; const int dy = y - window->x11.lastCursorPosY; _glfwInputCursorPos(window, window->virtualCursorPosX + dx, window->virtualCursorPosY + dy); } else _glfwInputCursorPos(window, x, y); } window->x11.lastCursorPosX = x; window->x11.lastCursorPosY = y; return; } case ConfigureNotify: { if (event->xconfigure.width != window->x11.width || event->xconfigure.height != window->x11.height) { _glfwInputFramebufferSize(window, event->xconfigure.width, event->xconfigure.height); _glfwInputWindowSize(window, event->xconfigure.width, event->xconfigure.height); window->x11.width = event->xconfigure.width; window->x11.height = event->xconfigure.height; } if (event->xconfigure.x != window->x11.xpos || event->xconfigure.y != window->x11.ypos) { if (event->xany.send_event) { _glfwInputWindowPos(window, event->xconfigure.x, event->xconfigure.y); window->x11.xpos = event->xconfigure.x; window->x11.ypos = event->xconfigure.y; } } return; } case ClientMessage: { // Custom client message, probably from the window manager if (event->xclient.message_type == None) return; if (event->xclient.message_type == _glfw.x11.WM_PROTOCOLS) { const Atom protocol = event->xclient.data.l[0]; if (protocol == None) return; if (protocol == _glfw.x11.WM_DELETE_WINDOW) { // The window manager was asked to close the window, for // example by the user pressing a 'close' window decoration // button _glfwInputWindowCloseRequest(window); } else if (protocol == _glfw.x11.NET_WM_PING) { // The window manager is pinging the application to ensure // it's still responding to events XEvent reply = *event; reply.xclient.window = _glfw.x11.root; XSendEvent(_glfw.x11.display, _glfw.x11.root, False, SubstructureNotifyMask | SubstructureRedirectMask, &reply); } } else if (event->xclient.message_type == _glfw.x11.XdndEnter) { // A drag operation has entered the window unsigned long i, count; Atom* formats = NULL; const bool list = event->xclient.data.l[1] & 1; _glfw.x11.xdnd.source = event->xclient.data.l[0]; _glfw.x11.xdnd.version = event->xclient.data.l[1] >> 24; _glfw.x11.xdnd.format = None; if (_glfw.x11.xdnd.version > _GLFW_XDND_VERSION) return; if (list) { count = _glfwGetWindowPropertyX11(_glfw.x11.xdnd.source, _glfw.x11.XdndTypeList, XA_ATOM, (unsigned char**) &formats); } else { count = 3; formats = (Atom*) event->xclient.data.l + 2; } for (i = 0; i < count; i++) { if (formats[i] == _glfw.x11.text_uri_list) { _glfw.x11.xdnd.format = _glfw.x11.text_uri_list; break; } } if (list && formats) XFree(formats); } else if (event->xclient.message_type == _glfw.x11.XdndDrop) { // The drag operation has finished by dropping on the window Time time = CurrentTime; if (_glfw.x11.xdnd.version > _GLFW_XDND_VERSION) return; if (_glfw.x11.xdnd.format) { if (_glfw.x11.xdnd.version >= 1) time = event->xclient.data.l[2]; // Request the chosen format from the source window XConvertSelection(_glfw.x11.display, _glfw.x11.XdndSelection, _glfw.x11.xdnd.format, _glfw.x11.XdndSelection, window->x11.handle, time); } else if (_glfw.x11.xdnd.version >= 2) { XEvent reply = { ClientMessage }; reply.xclient.window = _glfw.x11.xdnd.source; reply.xclient.message_type = _glfw.x11.XdndFinished; reply.xclient.format = 32; reply.xclient.data.l[0] = window->x11.handle; reply.xclient.data.l[1] = 0; // The drag was rejected reply.xclient.data.l[2] = None; XSendEvent(_glfw.x11.display, _glfw.x11.xdnd.source, False, NoEventMask, &reply); XFlush(_glfw.x11.display); } } else if (event->xclient.message_type == _glfw.x11.XdndPosition) { // The drag operation has moved over the window const int xabs = (event->xclient.data.l[2] >> 16) & 0xffff; const int yabs = (event->xclient.data.l[2]) & 0xffff; Window dummy; int xpos, ypos; if (_glfw.x11.xdnd.version > _GLFW_XDND_VERSION) return; XTranslateCoordinates(_glfw.x11.display, _glfw.x11.root, window->x11.handle, xabs, yabs, &xpos, &ypos, &dummy); _glfwInputCursorPos(window, xpos, ypos); XEvent reply = { ClientMessage }; reply.xclient.window = _glfw.x11.xdnd.source; reply.xclient.message_type = _glfw.x11.XdndStatus; reply.xclient.format = 32; reply.xclient.data.l[0] = window->x11.handle; reply.xclient.data.l[2] = 0; // Specify an empty rectangle reply.xclient.data.l[3] = 0; if (_glfw.x11.xdnd.format) { // Reply that we are ready to copy the dragged data reply.xclient.data.l[1] = 1; // Accept with no rectangle if (_glfw.x11.xdnd.version >= 2) reply.xclient.data.l[4] = _glfw.x11.XdndActionCopy; } XSendEvent(_glfw.x11.display, _glfw.x11.xdnd.source, False, NoEventMask, &reply); XFlush(_glfw.x11.display); } return; } case SelectionNotify: { if (event->xselection.property == _glfw.x11.XdndSelection) { // The converted data from the drag operation has arrived char* data; const unsigned long result = _glfwGetWindowPropertyX11(event->xselection.requestor, event->xselection.property, event->xselection.target, (unsigned char**) &data); if (result) { int i, count; char** paths = parseUriList(data, &count); _glfwInputDrop(window, count, (const char**) paths); for (i = 0; i < count; i++) free(paths[i]); free(paths); } if (data) XFree(data); if (_glfw.x11.xdnd.version >= 2) { XEvent reply = { ClientMessage }; reply.xclient.window = _glfw.x11.xdnd.source; reply.xclient.message_type = _glfw.x11.XdndFinished; reply.xclient.format = 32; reply.xclient.data.l[0] = window->x11.handle; reply.xclient.data.l[1] = result; reply.xclient.data.l[2] = _glfw.x11.XdndActionCopy; XSendEvent(_glfw.x11.display, _glfw.x11.xdnd.source, False, NoEventMask, &reply); XFlush(_glfw.x11.display); } } return; } case FocusIn: { if (event->xfocus.mode == NotifyGrab || event->xfocus.mode == NotifyUngrab) { // Ignore focus events from popup indicator windows, window menu // key chords and window dragging return; } if (window->cursorMode == GLFW_CURSOR_DISABLED) disableCursor(window); _glfwInputWindowFocus(window, true); return; } case FocusOut: { if (event->xfocus.mode == NotifyGrab || event->xfocus.mode == NotifyUngrab) { // Ignore focus events from popup indicator windows, window menu // key chords and window dragging return; } if (window->cursorMode == GLFW_CURSOR_DISABLED) enableCursor(window); if (window->monitor && window->autoIconify) _glfwPlatformIconifyWindow(window); _glfwInputWindowFocus(window, false); return; } case Expose: { _glfwInputWindowDamage(window); return; } case PropertyNotify: { if (event->xproperty.state != PropertyNewValue) return; if (event->xproperty.atom == _glfw.x11.WM_STATE) { const int state = getWindowState(window); if (state != IconicState && state != NormalState) return; const bool iconified = (state == IconicState); if (window->x11.iconified != iconified) { if (window->monitor) { if (iconified) releaseMonitor(window); else acquireMonitor(window); } window->x11.iconified = iconified; _glfwInputWindowIconify(window, iconified); } } else if (event->xproperty.atom == _glfw.x11.NET_WM_STATE) { const bool maximized = _glfwPlatformWindowMaximized(window); if (window->x11.maximized != maximized) { window->x11.maximized = maximized; _glfwInputWindowMaximize(window, maximized); } } return; } case DestroyNotify: return; } #undef UPDATE_KEYMAP_IF_NEEDED } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// // Retrieve a single window property of the specified type // Inspired by fghGetWindowProperty from freeglut // unsigned long _glfwGetWindowPropertyX11(Window window, Atom property, Atom type, unsigned char** value) { Atom actualType; int actualFormat; unsigned long itemCount, bytesAfter; XGetWindowProperty(_glfw.x11.display, window, property, 0, LONG_MAX, False, type, &actualType, &actualFormat, &itemCount, &bytesAfter, value); return itemCount; } bool _glfwIsVisualTransparentX11(Visual* visual) { if (!_glfw.x11.xrender.available) return false; XRenderPictFormat* pf = XRenderFindVisualFormat(_glfw.x11.display, visual); return pf && pf->direct.alphaMask; } // Push contents of our selection to clipboard manager // void _glfwPushSelectionToManagerX11(void) { XConvertSelection(_glfw.x11.display, _glfw.x11.CLIPBOARD_MANAGER, _glfw.x11.SAVE_TARGETS, None, _glfw.x11.helperWindowHandle, CurrentTime); for (;;) { XEvent event; while (XCheckIfEvent(_glfw.x11.display, &event, isSelectionEvent, NULL)) { switch (event.type) { case SelectionRequest: handleSelectionRequest(&event); break; case SelectionClear: handleSelectionClear(&event); break; case SelectionNotify: { if (event.xselection.target == _glfw.x11.SAVE_TARGETS) { // This means one of two things; either the selection // was not owned, which means there is no clipboard // manager, or the transfer to the clipboard manager has // completed // In either case, it means we are done here return; } break; } } } waitForX11Event(-1); } } ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { Visual* visual; int depth; if (ctxconfig->client != GLFW_NO_API) { if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API) { if (!_glfwInitGLX()) return false; if (!_glfwChooseVisualGLX(wndconfig, ctxconfig, fbconfig, &visual, &depth)) return false; } else if (ctxconfig->source == GLFW_EGL_CONTEXT_API) { if (!_glfwInitEGL()) return false; if (!_glfwChooseVisualEGL(wndconfig, ctxconfig, fbconfig, &visual, &depth)) return false; } else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { if (!_glfwInitOSMesa()) return false; } } if (ctxconfig->client == GLFW_NO_API || ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { visual = DefaultVisual(_glfw.x11.display, _glfw.x11.screen); depth = DefaultDepth(_glfw.x11.display, _glfw.x11.screen); } if (!createNativeWindow(window, wndconfig, visual, depth)) return false; if (ctxconfig->client != GLFW_NO_API) { if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API) { if (!_glfwCreateContextGLX(window, ctxconfig, fbconfig)) return false; } else if (ctxconfig->source == GLFW_EGL_CONTEXT_API) { if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) return false; } else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API) { if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return false; } } if (window->monitor) { _glfwPlatformShowWindow(window); updateWindowMode(window); acquireMonitor(window); } XFlush(_glfw.x11.display); return true; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (_glfw.x11.disabledCursorWindow == window) _glfw.x11.disabledCursorWindow = NULL; if (window->monitor) releaseMonitor(window); if (window->context.destroy) window->context.destroy(window); if (window->x11.handle) { XDeleteContext(_glfw.x11.display, window->x11.handle, _glfw.x11.context); XUnmapWindow(_glfw.x11.display, window->x11.handle); XDestroyWindow(_glfw.x11.display, window->x11.handle); window->x11.handle = (Window) 0; } if (window->x11.colormap) { XFreeColormap(_glfw.x11.display, window->x11.colormap); window->x11.colormap = (Colormap) 0; } XFlush(_glfw.x11.display); } void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) { #if defined(X_HAVE_UTF8_STRING) Xutf8SetWMProperties(_glfw.x11.display, window->x11.handle, title, title, NULL, 0, NULL, NULL, NULL); #else // This may be a slightly better fallback than using XStoreName and // XSetIconName, which always store their arguments using STRING XmbSetWMProperties(_glfw.x11.display, window->x11.handle, title, title, NULL, 0, NULL, NULL, NULL); #endif XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_NAME, _glfw.x11.UTF8_STRING, 8, PropModeReplace, (unsigned char*) title, strlen(title)); XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_ICON_NAME, _glfw.x11.UTF8_STRING, 8, PropModeReplace, (unsigned char*) title, strlen(title)); XFlush(_glfw.x11.display); } void _glfwPlatformSetWindowIcon(_GLFWwindow* window, int count, const GLFWimage* images) { if (count) { int i, j, longCount = 0; for (i = 0; i < count; i++) longCount += 2 + images[i].width * images[i].height; long* icon = calloc(longCount, sizeof(long)); long* target = icon; for (i = 0; i < count; i++) { *target++ = images[i].width; *target++ = images[i].height; for (j = 0; j < images[i].width * images[i].height; j++) { *target++ = (images[i].pixels[j * 4 + 0] << 16) | (images[i].pixels[j * 4 + 1] << 8) | (images[i].pixels[j * 4 + 2] << 0) | (images[i].pixels[j * 4 + 3] << 24); } } XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_ICON, XA_CARDINAL, 32, PropModeReplace, (unsigned char*) icon, longCount); free(icon); } else { XDeleteProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_ICON); } XFlush(_glfw.x11.display); } void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos) { Window dummy; int x, y; XTranslateCoordinates(_glfw.x11.display, window->x11.handle, _glfw.x11.root, 0, 0, &x, &y, &dummy); if (xpos) *xpos = x; if (ypos) *ypos = y; } void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos) { // HACK: Explicitly setting PPosition to any value causes some WMs, notably // Compiz and Metacity, to honor the position of unmapped windows if (!_glfwPlatformWindowVisible(window)) { long supplied; XSizeHints* hints = XAllocSizeHints(); if (XGetWMNormalHints(_glfw.x11.display, window->x11.handle, hints, &supplied)) { hints->flags |= PPosition; hints->x = hints->y = 0; XSetWMNormalHints(_glfw.x11.display, window->x11.handle, hints); } XFree(hints); } XMoveWindow(_glfw.x11.display, window->x11.handle, xpos, ypos); XFlush(_glfw.x11.display); } void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) { XWindowAttributes attribs; XGetWindowAttributes(_glfw.x11.display, window->x11.handle, &attribs); if (width) *width = attribs.width; if (height) *height = attribs.height; } void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { if (window->monitor) { if (window->monitor->window == window) acquireMonitor(window); } else { if (!window->resizable) updateNormalHints(window, width, height); XResizeWindow(_glfw.x11.display, window->x11.handle, width, height); } XFlush(_glfw.x11.display); } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth UNUSED, int minheight UNUSED, int maxwidth UNUSED, int maxheight UNUSED) { int width, height; _glfwPlatformGetWindowSize(window, &width, &height); updateNormalHints(window, width, height); XFlush(_glfw.x11.display); } void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer UNUSED, int denom UNUSED) { int width, height; _glfwPlatformGetWindowSize(window, &width, &height); updateNormalHints(window, width, height); XFlush(_glfw.x11.display); } void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { _glfwPlatformGetWindowSize(window, width, height); } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom) { long* extents = NULL; if (window->monitor || !window->decorated) return; if (_glfw.x11.NET_FRAME_EXTENTS == None) return; if (!_glfwPlatformWindowVisible(window) && _glfw.x11.NET_REQUEST_FRAME_EXTENTS) { XEvent event; // Ensure _NET_FRAME_EXTENTS is set, allowing glfwGetWindowFrameSize to // function before the window is mapped sendEventToWM(window, _glfw.x11.NET_REQUEST_FRAME_EXTENTS, 0, 0, 0, 0, 0); // HACK: Use a timeout because earlier versions of some window managers // (at least Unity, Fluxbox and Xfwm) failed to send the reply // They have been fixed but broken versions are still in the wild // If you are affected by this and your window manager is NOT // listed above, PLEASE report it to their and our issue trackers while (!XCheckIfEvent(_glfw.x11.display, &event, isFrameExtentsEvent, (XPointer) window)) { if (!waitForX11Event(ms_to_monotonic_t(500ll))) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: The window manager has a broken _NET_REQUEST_FRAME_EXTENTS implementation; please report this issue"); return; } } } if (_glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_FRAME_EXTENTS, XA_CARDINAL, (unsigned char**) &extents) == 4) { if (left) *left = extents[0]; if (top) *top = extents[2]; if (right) *right = extents[1]; if (bottom) *bottom = extents[3]; } if (extents) XFree(extents); } void _glfwPlatformGetWindowContentScale(_GLFWwindow* window UNUSED, float* xscale, float* yscale) { if (xscale) *xscale = _glfw.x11.contentScaleX; if (yscale) *yscale = _glfw.x11.contentScaleY; } monotonic_t _glfwPlatformGetDoubleClickInterval(_GLFWwindow* window UNUSED) { return ms_to_monotonic_t(500ll); } void _glfwPlatformIconifyWindow(_GLFWwindow* window) { XIconifyWindow(_glfw.x11.display, window->x11.handle, _glfw.x11.screen); XFlush(_glfw.x11.display); } void _glfwPlatformRestoreWindow(_GLFWwindow* window) { if (_glfwPlatformWindowIconified(window)) { XMapWindow(_glfw.x11.display, window->x11.handle); waitForVisibilityNotify(window); } else if (_glfwPlatformWindowVisible(window)) { if (_glfw.x11.NET_WM_STATE && _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT && _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ) { sendEventToWM(window, _glfw.x11.NET_WM_STATE, _NET_WM_STATE_REMOVE, _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT, _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ, 1, 0); } } XFlush(_glfw.x11.display); } void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { if (_glfw.x11.NET_WM_STATE && _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT && _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ) { sendEventToWM(window, _glfw.x11.NET_WM_STATE, _NET_WM_STATE_ADD, _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT, _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ, 1, 0); XFlush(_glfw.x11.display); } } void _glfwPlatformShowWindow(_GLFWwindow* window) { if (_glfwPlatformWindowVisible(window)) return; XMapWindow(_glfw.x11.display, window->x11.handle); waitForVisibilityNotify(window); } void _glfwPlatformHideWindow(_GLFWwindow* window) { XUnmapWindow(_glfw.x11.display, window->x11.handle); XFlush(_glfw.x11.display); } void _glfwPlatformRequestWindowAttention(_GLFWwindow* window) { sendEventToWM(window, _glfw.x11.NET_WM_STATE, _NET_WM_STATE_ADD, _glfw.x11.NET_WM_STATE_DEMANDS_ATTENTION, 0, 1, 0); } int _glfwPlatformWindowBell(_GLFWwindow* window) { return XkbBell(_glfw.x11.display, window->x11.handle, 100, (Atom)0) ? true : false; } void _glfwPlatformFocusWindow(_GLFWwindow* window) { if (_glfw.x11.NET_ACTIVE_WINDOW) sendEventToWM(window, _glfw.x11.NET_ACTIVE_WINDOW, 1, 0, 0, 0, 0); else { XRaiseWindow(_glfw.x11.display, window->x11.handle); XSetInputFocus(_glfw.x11.display, window->x11.handle, RevertToParent, CurrentTime); } XFlush(_glfw.x11.display); } void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate UNUSED) { if (window->monitor == monitor) { if (monitor) { if (monitor->window == window) acquireMonitor(window); } else { if (!window->resizable) updateNormalHints(window, width, height); XMoveResizeWindow(_glfw.x11.display, window->x11.handle, xpos, ypos, width, height); } XFlush(_glfw.x11.display); return; } if (window->monitor) releaseMonitor(window); _glfwInputWindowMonitor(window, monitor); updateNormalHints(window, width, height); if (window->monitor) { if (!_glfwPlatformWindowVisible(window)) { XMapRaised(_glfw.x11.display, window->x11.handle); waitForVisibilityNotify(window); } updateWindowMode(window); acquireMonitor(window); } else { updateWindowMode(window); XMoveResizeWindow(_glfw.x11.display, window->x11.handle, xpos, ypos, width, height); } XFlush(_glfw.x11.display); } int _glfwPlatformWindowFocused(_GLFWwindow* window) { Window focused; int state; XGetInputFocus(_glfw.x11.display, &focused, &state); return window->x11.handle == focused; } int _glfwPlatformWindowOccluded(_GLFWwindow* window UNUSED) { return false; } int _glfwPlatformWindowIconified(_GLFWwindow* window) { return getWindowState(window) == IconicState; } int _glfwPlatformWindowVisible(_GLFWwindow* window) { XWindowAttributes wa; XGetWindowAttributes(_glfw.x11.display, window->x11.handle, &wa); return wa.map_state == IsViewable; } int _glfwPlatformWindowMaximized(_GLFWwindow* window) { Atom* states; unsigned long i; bool maximized = false; if (!_glfw.x11.NET_WM_STATE || !_glfw.x11.NET_WM_STATE_MAXIMIZED_VERT || !_glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ) { return maximized; } const unsigned long count = _glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, (unsigned char**) &states); for (i = 0; i < count; i++) { if (states[i] == _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT || states[i] == _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ) { maximized = true; break; } } if (states) XFree(states); return maximized; } int _glfwPlatformWindowHovered(_GLFWwindow* window) { Window w = _glfw.x11.root; while (w) { Window root; int rootX, rootY, childX, childY; unsigned int mask; if (!XQueryPointer(_glfw.x11.display, w, &root, &w, &rootX, &rootY, &childX, &childY, &mask)) { return false; } if (w == window->x11.handle) return true; } return false; } int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { if (!window->x11.transparent) return false; return XGetSelectionOwner(_glfw.x11.display, _glfw.x11.NET_WM_CM_Sx) != None; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window, bool enabled UNUSED) { int width, height; _glfwPlatformGetWindowSize(window, &width, &height); updateNormalHints(window, width, height); } void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, bool enabled) { struct { unsigned long flags; unsigned long functions; unsigned long decorations; long input_mode; unsigned long status; } hints = {0}; hints.flags = MWM_HINTS_DECORATIONS; hints.decorations = enabled ? MWM_DECOR_ALL : 0; XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.MOTIF_WM_HINTS, _glfw.x11.MOTIF_WM_HINTS, 32, PropModeReplace, (unsigned char*) &hints, sizeof(hints) / sizeof(long)); } void _glfwPlatformSetWindowFloating(_GLFWwindow* window, bool enabled) { if (!_glfw.x11.NET_WM_STATE || !_glfw.x11.NET_WM_STATE_ABOVE) return; if (_glfwPlatformWindowVisible(window)) { const Atom action = enabled ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; sendEventToWM(window, _glfw.x11.NET_WM_STATE, action, _glfw.x11.NET_WM_STATE_ABOVE, 0, 1, 0); } else { Atom* states; unsigned long i, count; count = _glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, (unsigned char**) &states); if (!states) return; if (enabled) { for (i = 0; i < count; i++) { if (states[i] == _glfw.x11.NET_WM_STATE_ABOVE) break; } if (i == count) { XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, 32, PropModeAppend, (unsigned char*) &_glfw.x11.NET_WM_STATE_ABOVE, 1); } } else { for (i = 0; i < count; i++) { if (states[i] == _glfw.x11.NET_WM_STATE_ABOVE) { states[i] = states[count - 1]; count--; } } XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char*) &states, count); } XFree(states); } XFlush(_glfw.x11.display); } float _glfwPlatformGetWindowOpacity(_GLFWwindow* window) { float opacity = 1.f; if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.NET_WM_CM_Sx)) { CARD32* value = NULL; if (_glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_WM_WINDOW_OPACITY, XA_CARDINAL, (unsigned char**) &value)) { opacity = (float) (*value / (double) 0xffffffffu); } if (value) XFree(value); } return opacity; } void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity) { const CARD32 value = (CARD32) (0xffffffffu * (double) opacity); XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_WINDOW_OPACITY, XA_CARDINAL, 32, PropModeReplace, (unsigned char*) &value, 1); } static inline unsigned dispatch_x11_queued_events(int num_events) { unsigned dispatched = num_events > 0 ? num_events : 0; while (num_events-- > 0) { XEvent event; XNextEvent(_glfw.x11.display, &event); processEvent(&event); } return dispatched; } static unsigned _glfwDispatchX11Events(void) { _GLFWwindow* window; unsigned dispatched = 0; #if defined(__linux__) if (_glfw.hints.init.enableJoysticks) _glfwDetectJoystickConnectionLinux(); #endif dispatched += dispatch_x11_queued_events(XEventsQueued(_glfw.x11.display, QueuedAfterFlush)); window = _glfw.x11.disabledCursorWindow; if (window) { int width, height; _glfwPlatformGetWindowSize(window, &width, &height); // NOTE: Re-center the cursor only if it has moved since the last call, // to avoid breaking glfwWaitEvents with MotionNotify if (window->x11.lastCursorPosX != width / 2 || window->x11.lastCursorPosY != height / 2) { _glfwPlatformSetCursorPos(window, width / 2, height / 2); } } XFlush(_glfw.x11.display); // XFlush can cause events to be queued, we don't use QueuedAfterFlush here // as something might have inserted events into the queue, but we want to guarantee // a flush. dispatched += dispatch_x11_queued_events(XEventsQueued(_glfw.x11.display, QueuedAlready)); return dispatched; } void _glfwPlatformPollEvents(void) { _glfwDispatchX11Events(); handleEvents(0); } void _glfwPlatformWaitEvents(void) { monotonic_t timeout = _glfwDispatchX11Events() ? 0 : -1; handleEvents(timeout); } void _glfwPlatformWaitEventsTimeout(monotonic_t timeout) { if (_glfwDispatchX11Events()) timeout = 0; handleEvents(timeout); } void _glfwPlatformPostEmptyEvent(void) { wakeupEventLoop(&_glfw.x11.eventLoopData); } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) { Window root, child; int rootX, rootY, childX, childY; unsigned int mask; XQueryPointer(_glfw.x11.display, window->x11.handle, &root, &child, &rootX, &rootY, &childX, &childY, &mask); if (xpos) *xpos = childX; if (ypos) *ypos = childY; } void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) { // Store the new position so it can be recognized later window->x11.warpCursorPosX = (int) x; window->x11.warpCursorPosY = (int) y; XWarpPointer(_glfw.x11.display, None, window->x11.handle, 0,0,0,0, (int) x, (int) y); XFlush(_glfw.x11.display); } void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) { if (mode == GLFW_CURSOR_DISABLED) { if (_glfwPlatformWindowFocused(window)) disableCursor(window); } else if (_glfw.x11.disabledCursorWindow == window) enableCursor(window); else updateCursorImage(window); XFlush(_glfw.x11.display); } const char* _glfwPlatformGetNativeKeyName(int native_key) { return glfw_xkb_keysym_name(native_key); } int _glfwPlatformGetNativeKeyForKey(int key) { return glfw_xkb_sym_for_key(key); } int _glfwPlatformCreateCursor(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot, int count UNUSED) { cursor->x11.handle = _glfwCreateCursorX11(image, xhot, yhot); if (!cursor->x11.handle) return false; return true; } int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, GLFWCursorShape shape) { int native = 0; #define C(name, val) case name: native = val; break; switch(shape) { C(GLFW_ARROW_CURSOR, XC_arrow); C(GLFW_IBEAM_CURSOR, XC_xterm); C(GLFW_CROSSHAIR_CURSOR, XC_crosshair); C(GLFW_HAND_CURSOR, XC_hand2); C(GLFW_HRESIZE_CURSOR, XC_sb_h_double_arrow); C(GLFW_VRESIZE_CURSOR, XC_sb_v_double_arrow); C(GLFW_NW_RESIZE_CURSOR, XC_top_left_corner); C(GLFW_NE_RESIZE_CURSOR, XC_top_right_corner); C(GLFW_SW_RESIZE_CURSOR, XC_bottom_left_corner); C(GLFW_SE_RESIZE_CURSOR, XC_bottom_right_corner); case GLFW_INVALID_CURSOR: return false; } #undef C cursor->x11.handle = XCreateFontCursor(_glfw.x11.display, native); if (!cursor->x11.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to create standard cursor"); return false; } return true; } void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) { if (cursor->x11.handle) XFreeCursor(_glfw.x11.display, cursor->x11.handle); } void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor UNUSED) { if (window->cursorMode == GLFW_CURSOR_NORMAL) { updateCursorImage(window); XFlush(_glfw.x11.display); } } void _glfwPlatformSetClipboardString(const char* string) { free(_glfw.x11.clipboardString); _glfw.x11.clipboardString = _glfw_strdup(string); XSetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD, _glfw.x11.helperWindowHandle, CurrentTime); if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD) != _glfw.x11.helperWindowHandle) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to become owner of clipboard selection"); } } const char* _glfwPlatformGetClipboardString(void) { return getSelectionString(_glfw.x11.CLIPBOARD); } void _glfwPlatformSetPrimarySelectionString(const char* string) { free(_glfw.x11.primarySelectionString); _glfw.x11.primarySelectionString = _glfw_strdup(string); XSetSelectionOwner(_glfw.x11.display, _glfw.x11.PRIMARY, _glfw.x11.helperWindowHandle, CurrentTime); if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.PRIMARY) != _glfw.x11.helperWindowHandle) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to become owner of primary selection"); } } const char* _glfwPlatformGetPrimarySelectionString(void) { return getSelectionString(_glfw.x11.PRIMARY); } void _glfwPlatformGetRequiredInstanceExtensions(char** extensions) { if (!_glfw.vk.KHR_surface) return; if (!_glfw.vk.KHR_xcb_surface) { if (!_glfw.vk.KHR_xlib_surface) return; } extensions[0] = "VK_KHR_surface"; // NOTE: VK_KHR_xcb_surface is preferred due to some early ICDs exposing but // not correctly implementing VK_KHR_xlib_surface if (_glfw.vk.KHR_xcb_surface) extensions[1] = "VK_KHR_xcb_surface"; else extensions[1] = "VK_KHR_xlib_surface"; } int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily) { VisualID visualID = XVisualIDFromVisual(DefaultVisual(_glfw.x11.display, _glfw.x11.screen)); if (_glfw.vk.KHR_xcb_surface) { PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); if (!vkGetPhysicalDeviceXcbPresentationSupportKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "X11: Vulkan instance missing VK_KHR_xcb_surface extension"); return false; } xcb_connection_t* connection = XGetXCBConnection(_glfw.x11.display); if (!connection) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to retrieve XCB connection"); return false; } return vkGetPhysicalDeviceXcbPresentationSupportKHR(device, queuefamily, connection, visualID); } else { PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); if (!vkGetPhysicalDeviceXlibPresentationSupportKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); return false; } return vkGetPhysicalDeviceXlibPresentationSupportKHR(device, queuefamily, _glfw.x11.display, visualID); } } VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) { if (_glfw.vk.KHR_xcb_surface) { VkResult err; VkXcbSurfaceCreateInfoKHR sci; PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; xcb_connection_t* connection = XGetXCBConnection(_glfw.x11.display); if (!connection) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to retrieve XCB connection"); return VK_ERROR_EXTENSION_NOT_PRESENT; } vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) vkGetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR"); if (!vkCreateXcbSurfaceKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "X11: Vulkan instance missing VK_KHR_xcb_surface extension"); return VK_ERROR_EXTENSION_NOT_PRESENT; } memset(&sci, 0, sizeof(sci)); sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; sci.connection = connection; sci.window = window->x11.handle; err = vkCreateXcbSurfaceKHR(instance, &sci, allocator, surface); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to create Vulkan XCB surface: %s", _glfwGetVulkanResultString(err)); } return err; } else { VkResult err; VkXlibSurfaceCreateInfoKHR sci; PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) vkGetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR"); if (!vkCreateXlibSurfaceKHR) { _glfwInputError(GLFW_API_UNAVAILABLE, "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); return VK_ERROR_EXTENSION_NOT_PRESENT; } memset(&sci, 0, sizeof(sci)); sci.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; sci.dpy = _glfw.x11.display; sci.window = window->x11.handle; err = vkCreateXlibSurfaceKHR(instance, &sci, allocator, surface); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to create Vulkan X11 surface: %s", _glfwGetVulkanResultString(err)); } return err; } } void _glfwPlatformUpdateIMEState(_GLFWwindow *w, int which, int a, int b, int c, int d) { glfw_xkb_update_ime_state(w, &_glfw.x11.xkb, which, a, b, c, d); } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI Display* glfwGetX11Display(void) { _GLFW_REQUIRE_INIT_OR_RETURN(NULL); return _glfw.x11.display; } GLFWAPI Window glfwGetX11Window(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(None); return window->x11.handle; } GLFWAPI int glfwGetNativeKeyForName(const char* keyName, bool caseSensitive) { return glfw_xkb_keysym_from_name(keyName, caseSensitive); } GLFWAPI unsigned long long glfwDBusUserNotify(const char *app_name, const char* icon, const char *summary, const char *body, const char *action_name, int32_t timeout, GLFWDBusnotificationcreatedfun callback, void *data) { return glfw_dbus_send_user_notification(app_name, icon, summary, body, action_name, timeout, callback, data); } GLFWAPI void glfwDBusSetUserNotificationHandler(GLFWDBusnotificationactivatedfun handler) { glfw_dbus_set_user_notification_activated_handler(handler); } kitty-0.15.0/glfw/xkb_glfw.c000066400000000000000000000613251356737523400156750ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #include #include #include "internal.h" #include "xkb_glfw.h" START_ALLOW_CASE_RANGE #define debug(...) if (_glfw.hints.init.debugKeyboard) printf(__VA_ARGS__); #define map_key(key) \ switch(key) { \ S(space, SPACE); \ S(exclam, EXCLAM); \ S(quotedbl, DOUBLE_QUOTE); \ S(numbersign, NUMBER_SIGN); \ S(dollar, DOLLAR); \ S(ampersand, AMPERSAND); \ S(apostrophe, APOSTROPHE); \ S(parenleft, PARENTHESIS_LEFT); \ S(parenright, PARENTHESIS_RIGHT); \ S(plus, PLUS); \ S(comma, COMMA); \ S(minus, MINUS); \ S(period, PERIOD); \ S(slash, SLASH); \ R(0, 9, 0, 9); \ S(colon, COLON); \ S(semicolon, SEMICOLON); \ S(less, LESS); \ S(equal, EQUAL); \ S(greater, GREATER); \ S(at, AT); \ D(A, Z, A, Z); \ S(bracketleft, LEFT_BRACKET); \ S(backslash, BACKSLASH); \ S(bracketright, RIGHT_BRACKET); \ S(underscore, UNDERSCORE); \ S(grave, GRAVE_ACCENT); \ R(a, z, A, Z); \ S(paragraph, PARAGRAPH); \ S(masculine, MASCULINE); \ S(agrave, A_GRAVE); \ F(Agrave, A_GRAVE); \ S(adiaeresis, A_DIAERESIS); \ F(Adiaeresis, A_DIAERESIS); \ S(aring, A_RING); \ F(Aring, A_RING); \ S(ae, AE); \ F(AE, AE); \ S(ccedilla, C_CEDILLA); \ F(Ccedilla, C_CEDILLA); \ S(egrave, E_GRAVE); \ F(Egrave, E_GRAVE); \ S(aacute, E_ACUTE); \ F(Eacute, E_ACUTE); \ S(igrave, I_GRAVE); \ F(Igrave, I_GRAVE); \ S(ntilde, N_TILDE); \ F(Ntilde, N_TILDE); \ S(ograve, O_GRAVE); \ F(Ograve, O_GRAVE); \ S(odiaeresis, O_DIAERESIS); \ F(Odiaeresis, O_DIAERESIS); \ S(oslash, O_SLASH); \ F(Oslash, O_SLASH); \ S(ugrave, U_GRAVE); \ F(Ugrave, U_GRAVE); \ S(udiaeresis, U_DIAERESIS); \ F(Udiaeresis, U_DIAERESIS); \ S(ssharp, S_SHARP); \ S(Cyrillic_a, CYRILLIC_A); \ F(Cyrillic_A, CYRILLIC_A); \ S(Cyrillic_be, CYRILLIC_BE); \ F(Cyrillic_BE, CYRILLIC_BE); \ S(Cyrillic_ve, CYRILLIC_VE); \ F(Cyrillic_VE, CYRILLIC_VE); \ S(Cyrillic_ghe, CYRILLIC_GHE); \ F(Cyrillic_GHE, CYRILLIC_GHE); \ S(Cyrillic_de, CYRILLIC_DE); \ F(Cyrillic_DE, CYRILLIC_DE); \ S(Cyrillic_ie, CYRILLIC_IE); \ F(Cyrillic_IE, CYRILLIC_IE); \ S(Cyrillic_zhe, CYRILLIC_ZHE); \ F(Cyrillic_ZHE, CYRILLIC_ZHE); \ S(Cyrillic_ze, CYRILLIC_ZE); \ F(Cyrillic_ZE, CYRILLIC_ZE); \ S(Cyrillic_i, CYRILLIC_I); \ F(Cyrillic_I, CYRILLIC_I); \ S(Cyrillic_shorti, CYRILLIC_SHORT_I); \ F(Cyrillic_SHORTI, CYRILLIC_SHORT_I); \ S(Cyrillic_ka, CYRILLIC_KA); \ F(Cyrillic_KA, CYRILLIC_KA); \ S(Cyrillic_el, CYRILLIC_EL); \ F(Cyrillic_EL, CYRILLIC_EL); \ S(Cyrillic_em, CYRILLIC_EM); \ F(Cyrillic_EM, CYRILLIC_EM); \ S(Cyrillic_en, CYRILLIC_EN); \ F(Cyrillic_EN, CYRILLIC_EN); \ S(Cyrillic_o, CYRILLIC_O); \ F(Cyrillic_O, CYRILLIC_O); \ S(Cyrillic_pe, CYRILLIC_PE); \ F(Cyrillic_PE, CYRILLIC_PE); \ S(Cyrillic_er, CYRILLIC_ER); \ F(Cyrillic_ER, CYRILLIC_ER); \ S(Cyrillic_es, CYRILLIC_ES); \ F(Cyrillic_ES, CYRILLIC_ES); \ S(Cyrillic_te, CYRILLIC_TE); \ F(Cyrillic_TE, CYRILLIC_TE); \ S(Cyrillic_u, CYRILLIC_U); \ F(Cyrillic_U, CYRILLIC_U); \ S(Cyrillic_ef, CYRILLIC_EF); \ F(Cyrillic_EF, CYRILLIC_EF); \ S(Cyrillic_ha, CYRILLIC_HA); \ F(Cyrillic_HA, CYRILLIC_HA); \ S(Cyrillic_tse, CYRILLIC_TSE); \ F(Cyrillic_TSE, CYRILLIC_TSE); \ S(Cyrillic_che, CYRILLIC_CHE); \ F(Cyrillic_CHE, CYRILLIC_CHE); \ S(Cyrillic_sha, CYRILLIC_SHA); \ F(Cyrillic_SHA, CYRILLIC_SHA); \ S(Cyrillic_shcha, CYRILLIC_SHCHA); \ F(Cyrillic_SHCHA, CYRILLIC_SHCHA); \ S(Cyrillic_hardsign, CYRILLIC_HARD_SIGN); \ F(Cyrillic_HARDSIGN, CYRILLIC_HARD_SIGN); \ S(Cyrillic_yeru, CYRILLIC_YERU); \ F(Cyrillic_YERU, CYRILLIC_YERU); \ S(Cyrillic_softsign, CYRILLIC_SOFT_SIGN); \ F(Cyrillic_SOFTSIGN, CYRILLIC_SOFT_SIGN); \ S(Cyrillic_e, CYRILLIC_E); \ F(Cyrillic_E, CYRILLIC_E); \ S(Cyrillic_yu, CYRILLIC_YU); \ F(Cyrillic_YU, CYRILLIC_YU); \ S(Cyrillic_ya, CYRILLIC_YA); \ F(Cyrillic_YA, CYRILLIC_YA); \ S(Cyrillic_io, CYRILLIC_IO); \ F(Cyrillic_IO, CYRILLIC_IO); \ S(Escape, ESCAPE); \ S(Return, ENTER); \ S(Tab, TAB); \ S(BackSpace, BACKSPACE); \ S(Insert, INSERT); \ S(Delete, DELETE); \ S(Right, RIGHT); \ S(Left, LEFT); \ S(Up, UP); \ S(Down, DOWN); \ S(Page_Up, PAGE_UP); \ S(Page_Down, PAGE_DOWN); \ S(Home, HOME); \ S(End, END); \ S(Caps_Lock, CAPS_LOCK); \ S(Scroll_Lock, SCROLL_LOCK); \ S(Num_Lock, NUM_LOCK); \ S(Print, PRINT_SCREEN); \ S(Pause, PAUSE); \ S(KP_Decimal, KP_DECIMAL); \ S(KP_Divide, KP_DIVIDE); \ S(KP_Multiply, KP_MULTIPLY); \ S(KP_Subtract, KP_SUBTRACT); \ S(KP_Add, KP_ADD); \ S(KP_Enter, KP_ENTER); \ S(KP_Equal, KP_EQUAL); \ F(KP_Home, HOME); \ F(KP_End, END); \ F(KP_Page_Up, PAGE_UP); \ F(KP_Page_Down, PAGE_DOWN); \ F(KP_Insert, INSERT); \ F(KP_Delete, DELETE); \ S(Shift_L, LEFT_SHIFT); \ S(Control_L, LEFT_CONTROL); \ S(Alt_L, LEFT_ALT); \ S(Super_L, LEFT_SUPER); \ S(Shift_R, RIGHT_SHIFT); \ S(Control_R, RIGHT_CONTROL); \ S(Alt_R, RIGHT_ALT); \ S(Super_R, RIGHT_SUPER); \ S(Menu, MENU); \ R(F1, F25, F1, F25); \ R(KP_0, KP_9, KP_0, KP_9); \ static int glfw_key_for_sym(xkb_keysym_t key) { #define S(f, t) case XKB_KEY_##f: return GLFW_KEY_##t #define F(f, t) S(f, t) #define R(s, e, gs, ...) case XKB_KEY_##s ... XKB_KEY_##e: return GLFW_KEY_##gs + key - XKB_KEY_##s #define D(s, e, gs, ...) R(s, e, gs, __VA_ARGS__) map_key(key) S(KP_Up, UP); S(KP_Down, DOWN); S(KP_Left, LEFT); S(KP_Right, RIGHT); default: break; } return GLFW_KEY_UNKNOWN; #undef F #undef D #undef R #undef S } xkb_keysym_t glfw_xkb_sym_for_key(int key) { #define S(f, t) case GLFW_KEY_##t: return XKB_KEY_##f #define F(...) #define R(s, e, gs, ge) case GLFW_KEY_##gs ... GLFW_KEY_##ge: return XKB_KEY_##s + key - GLFW_KEY_##gs #define D(...) map_key(key) default: break; } return GLFW_KEY_UNKNOWN; #undef F #undef D #undef R #undef S } END_ALLOW_CASE_RANGE #ifdef _GLFW_X11 bool glfw_xkb_set_x11_events_mask(void) { if (!XkbSelectEvents(_glfw.x11.display, XkbUseCoreKbd, XkbNewKeyboardNotifyMask | XkbMapNotifyMask | XkbStateNotifyMask, XkbNewKeyboardNotifyMask | XkbMapNotifyMask | XkbStateNotifyMask)) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to set XKB events mask"); return false; } return true; } bool glfw_xkb_update_x11_keyboard_id(_GLFWXKBData *xkb) { xkb->keyboard_device_id = -1; xcb_connection_t* conn = XGetXCBConnection(_glfw.x11.display); if (!conn) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to retrieve XCB connection"); return false; } xkb->keyboard_device_id = xkb_x11_get_core_keyboard_device_id(conn); if (xkb->keyboard_device_id == -1) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: Failed to retrieve core keyboard device id"); return false; } return true; } #define xkb_glfw_load_keymap(keymap, ...) {\ xcb_connection_t* conn = XGetXCBConnection(_glfw.x11.display); \ if (conn) keymap = xkb_x11_keymap_new_from_device(xkb->context, conn, xkb->keyboard_device_id, XKB_KEYMAP_COMPILE_NO_FLAGS); \ } #define xkb_glfw_load_state(keymap, state) {\ xcb_connection_t* conn = XGetXCBConnection(_glfw.x11.display); \ if (conn) state = xkb_x11_state_new_from_device(keymap, conn, xkb->keyboard_device_id); \ } #else #define xkb_glfw_load_keymap(keymap, map_str) keymap = xkb_keymap_new_from_string(xkb->context, map_str, XKB_KEYMAP_FORMAT_TEXT_V1, 0); #define xkb_glfw_load_state(keymap, state) state = xkb_state_new(keymap); #endif static void release_keyboard_data(_GLFWXKBData *xkb) { #define US(group, state, unref) if (xkb->group.state) { unref(xkb->group.state); xkb->group.state = NULL; } #define UK(keymap) if(xkb->keymap) { xkb_keymap_unref(xkb->keymap); xkb->keymap = NULL; } US(states, composeState, xkb_compose_state_unref); UK(keymap); UK(default_keymap); US(states, state, xkb_state_unref); US(states, clean_state, xkb_state_unref); US(states, default_state, xkb_state_unref); #undef US #undef UK } void glfw_xkb_release(_GLFWXKBData *xkb) { release_keyboard_data(xkb); if (xkb->context) { xkb_context_unref(xkb->context); xkb->context = NULL; } glfw_ibus_terminate(&xkb->ibus); } bool glfw_xkb_create_context(_GLFWXKBData *xkb) { xkb->context = xkb_context_new(0); if (!xkb->context) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to initialize XKB context"); return false; } glfw_connect_to_ibus(&xkb->ibus); return true; } static const char* load_keymaps(_GLFWXKBData *xkb, const char *map_str) { (void)(map_str); // not needed on X11 xkb_glfw_load_keymap(xkb->keymap, map_str); if (!xkb->keymap) return "Failed to compile XKB keymap"; // The system default keymap, can be overridden by the XKB_DEFAULT_RULES // env var, see // https://xkbcommon.org/doc/current/structxkb__rule__names.html static struct xkb_rule_names default_rule_names = {0}; xkb->default_keymap = xkb_keymap_new_from_names(xkb->context, &default_rule_names, XKB_KEYMAP_COMPILE_NO_FLAGS); if (!xkb->default_keymap) return "Failed to create default XKB keymap"; return NULL; } static const char* load_states(_GLFWXKBData *xkb) { xkb_glfw_load_state(xkb->keymap, xkb->states.state); xkb->states.clean_state = xkb_state_new(xkb->keymap); xkb->states.default_state = xkb_state_new(xkb->default_keymap); if (!xkb->states.state || !xkb->states.clean_state || !xkb->states.default_state) return "Failed to create XKB state"; return NULL; } static void load_compose_tables(_GLFWXKBData *xkb) { /* Look up the preferred locale, falling back to "C" as default. */ struct xkb_compose_table* compose_table = NULL; const char *locale = getenv("LC_ALL"); if (!locale) locale = getenv("LC_CTYPE"); if (!locale) locale = getenv("LANG"); if (!locale) locale = "C"; compose_table = xkb_compose_table_new_from_locale(xkb->context, locale, XKB_COMPOSE_COMPILE_NO_FLAGS); if (!compose_table) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to create XKB compose table for locale %s", locale); return; } xkb->states.composeState = xkb_compose_state_new(compose_table, XKB_COMPOSE_STATE_NO_FLAGS); if (!xkb->states.composeState) { _glfwInputError(GLFW_PLATFORM_ERROR, "Failed to create XKB compose state"); } xkb_compose_table_unref(compose_table); } bool glfw_xkb_compile_keymap(_GLFWXKBData *xkb, const char *map_str) { const char *err; release_keyboard_data(xkb); err = load_keymaps(xkb, map_str); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "%s", err); release_keyboard_data(xkb); return false; } err = load_states(xkb); if (err) { _glfwInputError(GLFW_PLATFORM_ERROR, "%s", err); release_keyboard_data(xkb); return false; } load_compose_tables(xkb); #define S(a, n) xkb->a##Idx = xkb_keymap_mod_get_index(xkb->keymap, n); xkb->a##Mask = 1 << xkb->a##Idx; S(control, XKB_MOD_NAME_CTRL); S(alt, XKB_MOD_NAME_ALT); S(shift, XKB_MOD_NAME_SHIFT); S(super, XKB_MOD_NAME_LOGO); S(capsLock, XKB_MOD_NAME_CAPS); S(numLock, XKB_MOD_NAME_NUM); #undef S size_t capacity = sizeof(xkb->unknownModifiers)/sizeof(xkb->unknownModifiers[0]), j = 0; for (xkb_mod_index_t i = 0; i < capacity; i++) xkb->unknownModifiers[i] = XKB_MOD_INVALID; for (xkb_mod_index_t i = 0; i < xkb_keymap_num_mods(xkb->keymap) && j < capacity - 1; i++) { if (i != xkb->controlIdx && i != xkb->altIdx && i != xkb->shiftIdx && i != xkb->superIdx && i != xkb->capsLockIdx && i != xkb->numLockIdx) xkb->unknownModifiers[j++] = i; } xkb->states.modifiers = 0; xkb->states.activeUnknownModifiers = 0; return true; } static inline xkb_mod_mask_t active_unknown_modifiers(_GLFWXKBData *xkb, struct xkb_state *state) { size_t i = 0; xkb_mod_mask_t ans = 0; while (xkb->unknownModifiers[i] != XKB_MOD_INVALID) { if (xkb_state_mod_index_is_active(state, xkb->unknownModifiers[i], XKB_STATE_MODS_EFFECTIVE)) ans |= (1 << xkb->unknownModifiers[i]); i++; } return ans; } static void update_modifiers(_GLFWXKBData *xkb, XKBStateGroup *group) { #define S(attr, name) if (xkb_state_mod_index_is_active(group->state, xkb->attr##Idx, XKB_STATE_MODS_EFFECTIVE)) group->modifiers |= GLFW_MOD_##name S(control, CONTROL); S(alt, ALT); S(shift, SHIFT); S(super, SUPER); S(capsLock, CAPS_LOCK); S(numLock, NUM_LOCK); #undef S xkb->states.activeUnknownModifiers = active_unknown_modifiers(xkb, xkb->states.state); } void glfw_xkb_update_modifiers(_GLFWXKBData *xkb, xkb_mod_mask_t depressed, xkb_mod_mask_t latched, xkb_mod_mask_t locked, xkb_layout_index_t base_group, xkb_layout_index_t latched_group, xkb_layout_index_t locked_group) { if (!xkb->keymap) return; xkb->states.modifiers = 0; xkb_state_update_mask(xkb->states.state, depressed, latched, locked, base_group, latched_group, locked_group); // We have to update the groups in clean_state, as they change for // different keyboard layouts, see https://github.com/kovidgoyal/kitty/issues/488 xkb_state_update_mask(xkb->states.clean_state, 0, 0, 0, base_group, latched_group, locked_group); update_modifiers(xkb, &xkb->states); } bool glfw_xkb_should_repeat(_GLFWXKBData *xkb, xkb_keycode_t keycode) { #ifdef _GLFW_WAYLAND keycode += 8; #endif return xkb_keymap_key_repeats(xkb->keymap, keycode); } static inline xkb_keysym_t compose_symbol(struct xkb_compose_state *composeState, xkb_keysym_t sym, int *compose_completed, char *key_text, int n) { *compose_completed = 0; if (sym == XKB_KEY_NoSymbol || !composeState) return sym; if (xkb_compose_state_feed(composeState, sym) != XKB_COMPOSE_FEED_ACCEPTED) return sym; switch (xkb_compose_state_get_status(composeState)) { case XKB_COMPOSE_COMPOSED: xkb_compose_state_get_utf8(composeState, key_text, n); *compose_completed = 1; return xkb_compose_state_get_one_sym(composeState); case XKB_COMPOSE_COMPOSING: case XKB_COMPOSE_CANCELLED: return XKB_KEY_NoSymbol; case XKB_COMPOSE_NOTHING: default: return sym; } } const char* glfw_xkb_keysym_name(xkb_keysym_t sym) { static char name[256]; name[0] = 0; xkb_keysym_get_name(sym, name, sizeof(name)); return name; } int glfw_xkb_keysym_from_name(const char *name, bool case_sensitive) { return (int)xkb_keysym_from_name(name, case_sensitive ? XKB_KEYSYM_NO_FLAGS : XKB_KEYSYM_CASE_INSENSITIVE); } static inline const char* format_mods(unsigned int mods) { static char buf[128]; char *p = buf, *s; #define pr(x) p += snprintf(p, sizeof(buf) - (p - buf) - 1, "%s", x) pr("mods: "); s = p; if (mods & GLFW_MOD_CONTROL) pr("ctrl+"); if (mods & GLFW_MOD_ALT) pr("alt+"); if (mods & GLFW_MOD_SHIFT) pr("shift+"); if (mods & GLFW_MOD_SUPER) pr("super+"); if (mods & GLFW_MOD_CAPS_LOCK) pr("capslock+"); if (mods & GLFW_MOD_NUM_LOCK) pr("numlock+"); if (p == s) pr("none"); else p--; pr(" "); #undef pr return buf; } static inline const char* format_xkb_mods(_GLFWXKBData *xkb, const char* name, xkb_mod_mask_t mods) { static char buf[512]; char *p = buf, *s; #define pr(x) p += snprintf(p, sizeof(buf) - (p - buf) - 1, "%s", x) pr(name); pr(": "); s = p; for (xkb_mod_index_t i = 0; i < xkb_keymap_num_mods(xkb->keymap); i++) { xkb_mod_mask_t m = 1 << i; if (m & mods) { pr(xkb_keymap_mod_get_name(xkb->keymap, i)); pr("+"); } } if (p == s) pr("none"); else p--; pr(" "); #undef pr return buf; } void glfw_xkb_update_ime_state(_GLFWwindow *w, _GLFWXKBData *xkb, int which, int a, int b, int c, int d) { int x = 0, y = 0; switch(which) { case 1: glfw_ibus_set_focused(&xkb->ibus, a ? true : false); break; case 2: _glfwPlatformGetWindowPos(w, &x, &y); x += a; y += b; glfw_ibus_set_cursor_geometry(&xkb->ibus, x, y, c, d); break; } } void glfw_xkb_key_from_ime(_GLFWIBUSKeyEvent *ev, bool handled_by_ime, bool failed) { _GLFWwindow *window = _glfwWindowForId(ev->window_id); if (failed && window && window->callbacks.keyboard) { // notify application to remove any existing pre-edit text GLFWkeyevent fake_ev; _glfwInitializeKeyEvent(&fake_ev, GLFW_KEY_UNKNOWN, 0, GLFW_PRESS, 0); fake_ev.ime_state = 1; window->callbacks.keyboard((GLFWwindow*) window, &fake_ev); } static xkb_keycode_t last_handled_press_keycode = 0; // We filter out release events that correspond to the last press event // handled by the IME system. This won't fix the case of multiple key // presses before a release, but is better than nothing. For that case // you'd need to implement a ring buffer to store pending key presses. xkb_keycode_t prev_handled_press = last_handled_press_keycode; last_handled_press_keycode = 0; bool is_release = ev->glfw_ev.action == GLFW_RELEASE; debug("From IBUS: native_key: 0x%x name: %s is_release: %d\n", ev->glfw_ev.native_key, glfw_xkb_keysym_name(ev->glfw_ev.key), is_release); if (window && !handled_by_ime && !(is_release && ev->glfw_ev.native_key == (int) prev_handled_press)) { debug("↳ to application: glfw_keycode: 0x%x (%s) keysym: 0x%x (%s) action: %s %s text: %s\n", ev->glfw_ev.native_key, _glfwGetKeyName(ev->glfw_ev.native_key), ev->glfw_ev.key, glfw_xkb_keysym_name(ev->glfw_ev.key), (ev->glfw_ev.action == GLFW_RELEASE ? "RELEASE" : (ev->glfw_ev.action == GLFW_PRESS ? "PRESS" : "REPEAT")), format_mods(ev->glfw_ev.mods), ev->glfw_ev.text ); ev->glfw_ev.ime_state = 0; _glfwInputKeyboard(window, &ev->glfw_ev); } else debug("↳ discarded\n"); if (!is_release && handled_by_ime) last_handled_press_keycode = ev->glfw_ev.native_key; } void glfw_xkb_handle_key_event(_GLFWwindow *window, _GLFWXKBData *xkb, xkb_keycode_t xkb_keycode, int action) { static char key_text[64] = {0}; const xkb_keysym_t *syms, *clean_syms, *default_syms; xkb_keysym_t xkb_sym; xkb_keycode_t code_for_sym = xkb_keycode, ibus_keycode = xkb_keycode; GLFWkeyevent glfw_ev; _glfwInitializeKeyEvent(&glfw_ev, GLFW_KEY_UNKNOWN, 0, GLFW_PRESS, 0); // init with default values #ifdef _GLFW_WAYLAND code_for_sym += 8; #else ibus_keycode -= 8; #endif debug("%s xkb_keycode: 0x%x ", action == GLFW_RELEASE ? "Release" : "Press", xkb_keycode); XKBStateGroup *sg = &xkb->states; int num_syms = xkb_state_key_get_syms(sg->state, code_for_sym, &syms); int num_clean_syms = xkb_state_key_get_syms(sg->clean_state, code_for_sym, &clean_syms); key_text[0] = 0; // According to the documentation of xkb_compose_state_feed it does not // support multi-sym events, so we ignore them if (num_syms != 1 || num_clean_syms != 1) { debug("num_syms: %d num_clean_syms: %d ignoring event\n", num_syms, num_clean_syms); return; } xkb_sym = clean_syms[0]; debug("clean_sym: %s ", glfw_xkb_keysym_name(clean_syms[0])); if (action == GLFW_PRESS || action == GLFW_REPEAT) { const char *text_type = "composed_text"; int compose_completed; xkb_sym = compose_symbol(sg->composeState, syms[0], &compose_completed, key_text, sizeof(key_text)); if (xkb_sym == XKB_KEY_NoSymbol && !compose_completed) { debug("compose not complete, ignoring.\n"); return; } debug("composed_sym: %s ", glfw_xkb_keysym_name(xkb_sym)); if (xkb_sym == syms[0]) { // composed sym is the same as non-composed sym // Only use the clean_sym if no mods other than the mods we report // are active (for example if ISO_Shift_Level_* mods are active // they are not reported by GLFW so the key should be the shifted // key). See https://github.com/kovidgoyal/kitty/issues/171#issuecomment-377557053 xkb_mod_mask_t consumed_unknown_mods = xkb_state_key_get_consumed_mods(sg->state, code_for_sym) & sg->activeUnknownModifiers; if (sg->activeUnknownModifiers) debug("%s", format_xkb_mods(xkb, "active_unknown_mods", sg->activeUnknownModifiers)); if (consumed_unknown_mods) { debug("%s", format_xkb_mods(xkb, "consumed_unknown_mods", consumed_unknown_mods)); } else xkb_sym = clean_syms[0]; // xkb returns text even if alt and/or super are pressed if ( ((GLFW_MOD_CONTROL | GLFW_MOD_ALT | GLFW_MOD_SUPER) & sg->modifiers) == 0) { xkb_state_key_get_utf8(sg->state, code_for_sym, key_text, sizeof(key_text)); } text_type = "text"; } if ((1 <= key_text[0] && key_text[0] <= 31) || key_text[0] == 127) { key_text[0] = 0; // don't send text for ascii control codes } if (key_text[0]) { debug("%s: %s ", text_type, key_text); } } int glfw_sym = glfw_key_for_sym(xkb_sym); bool is_fallback = false; if (glfw_sym == GLFW_KEY_UNKNOWN && !key_text[0]) { int num_default_syms = xkb_state_key_get_syms(sg->default_state, code_for_sym, &default_syms); if (num_default_syms > 0) { xkb_sym = default_syms[0]; glfw_sym = glfw_key_for_sym(xkb_sym); is_fallback = true; } } debug( "%s%s: %d (%s) xkb_key: %d (%s)\n", format_mods(sg->modifiers), is_fallback ? "glfw_fallback_key" : "glfw_key", glfw_sym, _glfwGetKeyName(glfw_sym), xkb_sym, glfw_xkb_keysym_name(xkb_sym) ); // NOTE: On linux, the reported native key identifier is the XKB keysym value. // Do not confuse `native_key` with `xkb_keycode` (the native keycode reported for the // glfw event VS the X internal code for a key). // // We use the XKB keysym instead of the X keycode to be able to go back-and-forth between // the GLFW keysym and the XKB keysym when needed, which is not possible using the X keycode, // because of the lost information when resolving the keycode to the keysym, like consumed // mods. glfw_ev.native_key = xkb_sym; glfw_ev.action = action; glfw_ev.key = glfw_sym; glfw_ev.mods = sg->modifiers; glfw_ev.text = key_text; _GLFWIBUSKeyEvent ibus_ev; ibus_ev.glfw_ev = glfw_ev; ibus_ev.ibus_keycode = ibus_keycode; ibus_ev.window_id = window->id; ibus_ev.ibus_keysym = syms[0]; if (ibus_process_key(&ibus_ev, &xkb->ibus)) { debug("↳ to IBUS: keycode: 0x%x keysym: 0x%x (%s) %s\n", ibus_ev.ibus_keycode, ibus_ev.ibus_keysym, glfw_xkb_keysym_name(ibus_ev.ibus_keysym), format_mods(ibus_ev.glfw_ev.mods)); } else { _glfwInputKeyboard(window, &glfw_ev); } } kitty-0.15.0/glfw/xkb_glfw.h000066400000000000000000000073111356737523400156750ustar00rootroot00000000000000//======================================================================== // GLFW 3.4 XKB - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2018 Kovid Goyal // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would // be appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source // distribution. // //======================================================================== #pragma once #include #include #ifdef _GLFW_X11 #include #endif #include "ibus_glfw.h" typedef struct { struct xkb_state* state; struct xkb_state* clean_state; struct xkb_state* default_state; struct xkb_compose_state* composeState; xkb_mod_mask_t activeUnknownModifiers; unsigned int modifiers; } XKBStateGroup; typedef struct { struct xkb_context* context; struct xkb_keymap* keymap; struct xkb_keymap* default_keymap; XKBStateGroup states; xkb_mod_index_t controlIdx; xkb_mod_index_t altIdx; xkb_mod_index_t shiftIdx; xkb_mod_index_t superIdx; xkb_mod_index_t capsLockIdx; xkb_mod_index_t numLockIdx; xkb_mod_mask_t controlMask; xkb_mod_mask_t altMask; xkb_mod_mask_t shiftMask; xkb_mod_mask_t superMask; xkb_mod_mask_t capsLockMask; xkb_mod_mask_t numLockMask; xkb_mod_index_t unknownModifiers[256]; _GLFWIBUSData ibus; #ifdef _GLFW_X11 int32_t keyboard_device_id; bool available; bool detectable; int majorOpcode; int eventBase; int errorBase; int major; int minor; #endif } _GLFWXKBData; #ifdef _GLFW_X11 bool glfw_xkb_set_x11_events_mask(void); bool glfw_xkb_update_x11_keyboard_id(_GLFWXKBData *xkb); #endif void glfw_xkb_release(_GLFWXKBData *xkb); bool glfw_xkb_create_context(_GLFWXKBData *xkb); bool glfw_xkb_compile_keymap(_GLFWXKBData *xkb, const char *map_str); void glfw_xkb_update_modifiers(_GLFWXKBData *xkb, xkb_mod_mask_t depressed, xkb_mod_mask_t latched, xkb_mod_mask_t locked, xkb_layout_index_t base_group, xkb_layout_index_t latched_group, xkb_layout_index_t locked_group); bool glfw_xkb_should_repeat(_GLFWXKBData *xkb, xkb_keycode_t keycode); const char* glfw_xkb_keysym_name(xkb_keysym_t sym); xkb_keysym_t glfw_xkb_sym_for_key(int key); void glfw_xkb_handle_key_event(_GLFWwindow *window, _GLFWXKBData *xkb, xkb_keycode_t keycode, int action); int glfw_xkb_keysym_from_name(const char *name, bool case_sensitive); void glfw_xkb_update_ime_state(_GLFWwindow *w, _GLFWXKBData *xkb, int which, int a, int b, int c, int d); void glfw_xkb_key_from_ime(_GLFWIBUSKeyEvent *ev, bool handled_by_ime, bool failed); kitty-0.15.0/graphics-protocol.asciidoc000066400000000000000000000000731356737523400201170ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/graphics-protocol.html kitty-0.15.0/key_encoding.asciidoc000066400000000000000000000000661356737523400171200ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/key-encoding.html kitty-0.15.0/key_encoding.json000066400000000000000000000035061356737523400163150ustar00rootroot00000000000000{ "0": "G", "1": "H", "2": "I", "3": "J", "4": "K", "5": "L", "6": "M", "7": "N", "8": "O", "9": "P", "A": "S", "APOSTROPHE": "B", "B": "T", "BACKSLASH": "t", "BACKSPACE": "1", "C": "U", "CAPS LOCK": ":", "COMMA": "C", "D": "V", "DELETE": "3", "DOWN": "6", "E": "W", "END": "-", "ENTER": "z", "EQUAL": "R", "ESCAPE": "y", "F": "X", "F1": "/", "F10": "]", "F11": "{", "F12": "}", "F13": "@", "F14": "%", "F15": "$", "F16": "#", "F17": "BA", "F18": "BB", "F19": "BC", "F2": "*", "F20": "BD", "F21": "BE", "F22": "BF", "F23": "BG", "F24": "BH", "F25": "BI", "F3": "?", "F4": "&", "F5": "<", "F6": ">", "F7": "(", "F8": ")", "F9": "[", "G": "Y", "GRAVE ACCENT": "v", "H": "Z", "HOME": ".", "I": "a", "INSERT": "2", "J": "b", "K": "c", "KP 0": "BJ", "KP 1": "BK", "KP 2": "BL", "KP 3": "BM", "KP 4": "BN", "KP 5": "BO", "KP 6": "BP", "KP 7": "BQ", "KP 8": "BR", "KP 9": "BS", "KP ADD": "BX", "KP DECIMAL": "BT", "KP DIVIDE": "BU", "KP ENTER": "BY", "KP EQUAL": "BZ", "KP MULTIPLY": "BV", "KP SUBTRACT": "BW", "L": "d", "LEFT": "5", "LEFT ALT": "Bc", "LEFT BRACKET": "s", "LEFT CONTROL": "Bb", "LEFT SHIFT": "Ba", "LEFT SUPER": "Bd", "M": "e", "MINUS": "D", "N": "f", "NUM LOCK": "=", "O": "g", "P": "h", "PAGE DOWN": "9", "PAGE UP": "8", "PAUSE": "!", "PERIOD": "E", "PRINT SCREEN": "^", "Q": "i", "R": "j", "RIGHT": "4", "RIGHT ALT": "Bg", "RIGHT BRACKET": "u", "RIGHT CONTROL": "Bf", "RIGHT SHIFT": "Be", "RIGHT SUPER": "Bh", "S": "k", "SCROLL LOCK": "+", "SEMICOLON": "Q", "SLASH": "F", "SPACE": "A", "T": "l", "TAB": "0", "U": "m", "UP": "7", "V": "n", "W": "o", "WORLD 1": "w", "WORLD 2": "x", "X": "p", "Y": "q", "Z": "r" }kitty-0.15.0/kittens/000077500000000000000000000000001356737523400144415ustar00rootroot00000000000000kitty-0.15.0/kittens/__init__.py000066400000000000000000000000001356737523400165400ustar00rootroot00000000000000kitty-0.15.0/kittens/ask/000077500000000000000000000000001356737523400152175ustar00rootroot00000000000000kitty-0.15.0/kittens/ask/__init__.py000066400000000000000000000000001356737523400173160ustar00rootroot00000000000000kitty-0.15.0/kittens/ask/main.py000066400000000000000000000062041356737523400165170ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os from contextlib import suppress from kitty.cli import parse_args from kitty.constants import cache_dir from ..tui.operations import alternate_screen, styled readline = None def get_history_items(): return list(map(readline.get_history_item, range(1, readline.get_current_history_length() + 1))) def sort_key(item): return len(item), item.lower() class HistoryCompleter: def __init__(self, name=None): self.matches = [] self.history_path = None if name: ddir = os.path.join(cache_dir(), 'ask') with suppress(FileExistsError): os.makedirs(ddir) self.history_path = os.path.join(ddir, name) def complete(self, text, state): response = None if state == 0: history_values = get_history_items() if text: self.matches = sorted( (h for h in history_values if h and h.startswith(text)), key=sort_key) else: self.matches = [] try: response = self.matches[state] except IndexError: response = None return response def __enter__(self): if self.history_path: with suppress(Exception): readline.read_history_file(self.history_path) readline.set_completer(self.complete) return self def __exit__(self, *a): if self.history_path: readline.write_history_file(self.history_path) def option_text(): return '''\ --type -t choices=line default=line Type of input. Defaults to asking for a line of text. --message -m The message to display to the user. If not specified a default message is shown. --name -n The name for this question. Used to store history of previous answers which can be used for completions and via the browse history readline bindings. ''' def main(args): # For some reason importing readline in a key handler in the main kitty process # causes a crash of the python interpreter, probably because of some global # lock global readline import readline as rl readline = rl from kitty.shell import init_readline msg = 'Ask the user for input' try: args, items = parse_args(args[1:], option_text, '', msg, 'kitty ask') except SystemExit as e: if e.code != 0: print(e.args[0]) input('Press enter to quit...') raise SystemExit(e.code) init_readline(readline) ans = {'items': items} with alternate_screen(), HistoryCompleter(args.name): if args.message: print(styled(args.message, bold=True)) prompt = '> ' with suppress(KeyboardInterrupt, EOFError): ans['response'] = input(prompt) return ans def handle_result(args, data, target_window_id, boss): if 'response' in data: func, *args = data['items'] getattr(boss, func)(data['response'], *args) if __name__ == '__main__': import sys ans = main(sys.argv) if ans: print(ans) kitty-0.15.0/kittens/choose/000077500000000000000000000000001356737523400157215ustar00rootroot00000000000000kitty-0.15.0/kittens/choose/__init__.py000066400000000000000000000000001356737523400200200ustar00rootroot00000000000000kitty-0.15.0/kittens/choose/choose-data-types.h000066400000000000000000000045141356737523400214270ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #if defined(_MSC_VER) #define ISWINDOWS #define STDCALL __stdcall #ifndef ssize_t #include typedef SSIZE_T ssize_t; #ifndef SSIZE_MAX #if defined(_WIN64) #define SSIZE_MAX _I64_MAX #else #define SSIZE_MAX LONG_MAX #endif #endif #endif #else #define STDCALL #endif #include "vector.h" typedef uint8_t len_t; typedef uint32_t text_t; #define LEN_MAX UINT8_MAX #define UTF8_ACCEPT 0 #define UTF8_REJECT 1 #define IS_LOWERCASE(x) (x) >= 'a' && (x) <= 'z' #define IS_UPPERCASE(x) (x) >= 'A' && (x) <= 'Z' #define LOWERCASE(x) ((IS_UPPERCASE(x)) ? (x) + 32 : (x)) #define arraysz(x) (sizeof(x)/sizeof(x[0])) typedef struct { text_t* src; ssize_t src_sz; len_t haystack_len; len_t *positions; double score; ssize_t idx; } Candidate; typedef struct { Candidate *haystack; size_t haystack_count; text_t level1[LEN_MAX], level2[LEN_MAX], level3[LEN_MAX], needle[LEN_MAX]; len_t level1_len, level2_len, level3_len, needle_len; size_t haystack_size; text_t *output; size_t output_sz, output_pos; int oom; } GlobalData; typedef struct { bool output_positions; size_t limit; int num_threads; text_t mark_before[128], mark_after[128], delimiter[128]; size_t mark_before_sz, mark_after_sz, delimiter_sz; } Options; VECTOR_OF(len_t, Positions) VECTOR_OF(text_t, Chars) VECTOR_OF(Candidate, Candidates) void output_results(GlobalData *, Candidate *haystack, size_t count, Options *opts, len_t needle_len); void* alloc_workspace(len_t max_haystack_len, GlobalData*); void* free_workspace(void *v); double score_item(void *v, text_t *haystack, len_t haystack_len, len_t *match_positions); unsigned int encode_codepoint(text_t ch, char* dest); size_t unescape(const char *src, char *dest, size_t destlen); int cpu_count(void); void* alloc_threads(size_t num_threads); #ifdef ISWINDOWS bool start_thread(void* threads, size_t i, unsigned int (STDCALL *start_routine) (void *), void *arg); ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream); #else bool start_thread(void* threads, size_t i, void *(*start_routine) (void *), void *arg); #endif void wait_for_thread(void *threads, size_t i); void free_threads(void *threads); kitty-0.15.0/kittens/choose/main.c000066400000000000000000000203541356737523400170150ustar00rootroot00000000000000/* * main.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "choose-data-types.h" #include "charsets.h" #include #include #include #include #include #include #ifndef ISWINDOWS #include #endif typedef struct { size_t start, count; void *workspace; len_t max_haystack_len; bool started; GlobalData *global; } JobData; static unsigned int STDCALL run_scoring(JobData *job_data) { GlobalData *global = job_data->global; for (size_t i = job_data->start; i < job_data->start + job_data->count; i++) { global->haystack[i].score = score_item(job_data->workspace, global->haystack[i].src, global->haystack[i].haystack_len, global->haystack[i].positions); } return 0; } static void* run_scoring_pthreads(void *job_data) { run_scoring((JobData*)job_data); return NULL; } #ifdef ISWINDOWS #define START_FUNC run_scoring #else #define START_FUNC run_scoring_pthreads #endif static JobData* create_job(size_t i, size_t blocksz, GlobalData *global) { JobData *ans = (JobData*)calloc(1, sizeof(JobData)); if (ans == NULL) return NULL; ans->start = i * blocksz; if (ans->start >= global->haystack_count) ans->count = 0; else ans->count = global->haystack_count - ans->start; ans->max_haystack_len = 0; for (size_t i = ans->start; i < ans->start + ans->count; i++) ans->max_haystack_len = MAX(ans->max_haystack_len, global->haystack[i].haystack_len); if (ans->count > 0) { ans->workspace = alloc_workspace(ans->max_haystack_len, global); if (!ans->workspace) { free(ans); return NULL; } } ans->global = global; return ans; } static JobData* free_job(JobData *job) { if (job) { if (job->workspace) free_workspace(job->workspace); free(job); } return NULL; } static int run_threaded(int num_threads_asked, GlobalData *global) { int ret = 0; size_t i, blocksz; size_t num_threads = MAX(1, num_threads_asked > 0 ? num_threads_asked : cpu_count()); if (global->haystack_size < 10000) num_threads = 1; /* printf("num_threads: %lu asked: %d sysconf: %ld\n", num_threads, num_threads_asked, sysconf(_SC_NPROCESSORS_ONLN)); */ void *threads = alloc_threads(num_threads); JobData **job_data = calloc(num_threads, sizeof(JobData*)); if (threads == NULL || job_data == NULL) { ret = 1; goto end; } blocksz = global->haystack_count / num_threads + global->haystack_count % num_threads; for (i = 0; i < num_threads; i++) { job_data[i] = create_job(i, blocksz, global); if (job_data[i] == NULL) { ret = 1; goto end; } } if (num_threads == 1) { run_scoring(job_data[0]); } else { for (i = 0; i < num_threads; i++) { job_data[i]->started = false; if (job_data[i]->count > 0) { if (!start_thread(threads, i, START_FUNC, job_data[i])) ret = 1; else job_data[i]->started = true; } } } end: if (num_threads > 1 && job_data) { for (i = 0; i < num_threads; i++) { if (job_data[i] && job_data[i]->started) wait_for_thread(threads, i); } } for (i = 0; i < num_threads; i++) job_data[i] = free_job(job_data[i]); free(job_data); free_threads(threads); return ret; } static int run_search(Options *opts, GlobalData *global, const char * const *lines, const size_t* sizes, size_t num_lines) { const char *linebuf = NULL; size_t idx = 0; ssize_t sz = 0; int ret = 0; Candidates candidates = {0}; Chars chars = {0}; ALLOC_VEC(text_t, chars, 8192 * 20); if (chars.data == NULL) return 1; ALLOC_VEC(Candidate, candidates, 8192); if (candidates.data == NULL) { FREE_VEC(chars) return 1; } for (size_t i = 0; i < num_lines; i++) { sz = sizes[i]; linebuf = lines[i]; if (sz > 0) { ENSURE_SPACE(text_t, chars, sz); ENSURE_SPACE(Candidate, candidates, 1); sz = decode_utf8_string(linebuf, sz, &(NEXT(chars))); NEXT(candidates).src_sz = sz; NEXT(candidates).haystack_len = (len_t)(MIN(LEN_MAX, sz)); global->haystack_size += NEXT(candidates).haystack_len; NEXT(candidates).idx = idx++; INC(candidates, 1); INC(chars, sz); } } // Prepare the haystack allocating space for positions arrays and settings // up the src pointers to point to the correct locations Candidate *haystack = &ITEM(candidates, 0); len_t *positions = (len_t*)calloc(SIZE(candidates), sizeof(len_t) * global->needle_len); if (positions) { text_t *cdata = &ITEM(chars, 0); for (size_t i = 0, off = 0; i < SIZE(candidates); i++) { haystack[i].positions = positions + (i * global->needle_len); haystack[i].src = cdata + off; off += haystack[i].src_sz; } global->haystack = haystack; global->haystack_count = SIZE(candidates); ret = run_threaded(opts->num_threads, global); if (ret == 0) output_results(global, haystack, SIZE(candidates), opts, global->needle_len); else { REPORT_OOM; } } else { ret = 1; REPORT_OOM; } FREE_VEC(chars); free(positions); FREE_VEC(candidates); return ret; } static size_t copy_unicode_object(PyObject *src, text_t *dest, size_t dest_sz) { PyUnicode_READY(src); int kind = PyUnicode_KIND(src); void *data = PyUnicode_DATA(src); size_t len = PyUnicode_GetLength(src); for (size_t i = 0; i < len && i < dest_sz; i++) { dest[i] = PyUnicode_READ(kind, data, i); } return len; } static PyObject* match(PyObject *self, PyObject *args) { (void)(self); int output_positions; unsigned long limit; PyObject *lines, *levels, *needle, *mark_before, *mark_after, *delimiter; Options opts = {0}; GlobalData global = {0}; if (!PyArg_ParseTuple(args, "O!O!UpkiUUU", &PyList_Type, &lines, &PyTuple_Type, &levels, &needle, &output_positions, &limit, &opts.num_threads, &mark_before, &mark_after, &delimiter )) return NULL; opts.output_positions = output_positions ? true : false; opts.limit = limit; global.level1_len = copy_unicode_object(PyTuple_GET_ITEM(levels, 0), global.level1, arraysz(global.level1)); global.level2_len = copy_unicode_object(PyTuple_GET_ITEM(levels, 1), global.level2, arraysz(global.level2)); global.level3_len = copy_unicode_object(PyTuple_GET_ITEM(levels, 2), global.level3, arraysz(global.level3)); global.needle_len = copy_unicode_object(needle, global.needle, arraysz(global.needle)); opts.mark_before_sz = copy_unicode_object(mark_before, opts.mark_before, arraysz(opts.mark_before)); opts.mark_after_sz = copy_unicode_object(mark_after, opts.mark_after, arraysz(opts.mark_after)); opts.delimiter_sz = copy_unicode_object(delimiter, opts.delimiter, arraysz(opts.delimiter)); size_t num_lines = PyList_GET_SIZE(lines); char **clines = malloc(sizeof(char*) * num_lines); if (!clines) { return PyErr_NoMemory(); } size_t *sizes = malloc(sizeof(size_t) * num_lines); if (!sizes) { free(clines); clines = NULL; return PyErr_NoMemory(); } for (size_t i = 0; i < num_lines; i++) { clines[i] = PyBytes_AS_STRING(PyList_GET_ITEM(lines, i)); sizes[i] = PyBytes_GET_SIZE(PyList_GET_ITEM(lines, i)); } Py_BEGIN_ALLOW_THREADS; run_search(&opts, &global, (const char* const *)clines, sizes, num_lines); Py_END_ALLOW_THREADS; free(clines); free(sizes); if (global.oom) { free(global.output); return PyErr_NoMemory(); } if (global.output) { PyObject *ans = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, global.output, global.output_pos); free(global.output); return ans; } Py_RETURN_NONE; } static PyMethodDef module_methods[] = { {"match", match, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; static struct PyModuleDef module = { .m_base = PyModuleDef_HEAD_INIT, .m_name = "subseq_matcher", /* name of module */ .m_doc = NULL, .m_size = -1, .m_methods = module_methods }; EXPORTED PyMODINIT_FUNC PyInit_subseq_matcher(void) { return PyModule_Create(&module); } kitty-0.15.0/kittens/choose/main.py000066400000000000000000000030361356737523400172210ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import sys from ..tui.handler import Handler from ..tui.loop import Loop from . import subseq_matcher def match( input_data, query, threads=0, positions=False, level1='/', level2='-_0123456789', level3='.', limit=0, mark_before='', mark_after='', delimiter='\n' ): if isinstance(input_data, str): input_data = input_data.encode('utf-8') if isinstance(input_data, bytes): input_data = input_data.split(delimiter.encode('utf-8')) else: input_data = [x.encode('utf-8') if isinstance(x, str) else x for x in input_data] query = query.lower() level1 = level1.lower() level2 = level2.lower() level3 = level3.lower() data = subseq_matcher.match( input_data, (level1, level2, level3), query, positions, limit, threads, mark_before, mark_after, delimiter) if data is None: return [] return list(filter(None, data.split(delimiter or '\n'))) class ChooseHandler(Handler): def initialize(self): pass def on_text(self, text, in_bracketed_paste=False): pass def on_key(self, key_event): pass def on_interrupt(self): self.quit_loop(1) def on_eot(self): self.quit_loop(1) def main(args): loop = Loop() handler = ChooseHandler() loop.loop(handler) raise SystemExit(loop.return_code) if __name__ == '__main__': main(sys.argv) kitty-0.15.0/kittens/choose/output.c000066400000000000000000000066211356737523400174320ustar00rootroot00000000000000/* * output.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "choose-data-types.h" #include #include #include #include #ifdef ISWINDOWS #include #define STDOUT_FILENO 1 static inline ssize_t ms_write(int fd, const void* buf, size_t count) { return _write(fd, buf, (unsigned int)count); } #define write ms_write #else #include #endif #include #define FIELD(x, which) (((Candidate*)(x))->which) static inline bool ensure_space(GlobalData *global, size_t sz) { if (global->output_sz < sz + global->output_pos || !global->output) { size_t before = global->output_sz; global->output_sz += MAX(sz, (64u * 1024u)); global->output = realloc(global->output, sizeof(text_t) * global->output_sz); if (!global->output) { global->output_sz = before; return false; } } return true; } static inline void output_text(GlobalData *global, const text_t *data, size_t sz) { if (ensure_space(global, sz)) { memcpy(global->output + global->output_pos, data, sizeof(text_t) * sz); global->output_pos += sz; } } static int cmpscore(const void *a, const void *b) { double sa = FIELD(a, score), sb = FIELD(b, score); // Sort descending return (sa > sb) ? -1 : ((sa == sb) ? ((int)FIELD(a, idx) - (int)FIELD(b, idx)) : 1); } static void output_with_marks(GlobalData *global, Options *opts, text_t *src, size_t src_sz, len_t *positions, len_t poslen) { size_t pos, i = 0; for (pos = 0; pos < poslen; pos++, i++) { output_text(global, src + i, MIN(src_sz, positions[pos]) - i); i = positions[pos]; if (i < src_sz) { if (opts->mark_before_sz > 0) output_text(global, opts->mark_before, opts->mark_before_sz); output_text(global, src + i, 1); if (opts->mark_after_sz > 0) output_text(global, opts->mark_after, opts->mark_after_sz); } } i = positions[poslen - 1]; if (i + 1 < src_sz) output_text(global, src + i + 1, src_sz - i - 1); } static void output_positions(GlobalData *global, len_t *positions, len_t num) { wchar_t buf[128]; for (len_t i = 0; i < num; i++) { int num = swprintf(buf, sizeof(buf)/sizeof(buf[0]), L"%u", positions[i]); if (num > 0 && ensure_space(global, num + 1)) { for (int i = 0; i < num; i++) global->output[global->output_pos++] = buf[i]; global->output[global->output_pos++] = (i == num - 1) ? ',' : ':'; } } } static void output_result(GlobalData *global, Candidate *c, Options *opts, len_t needle_len) { if (opts->output_positions) output_positions(global, c->positions, needle_len); if (opts->mark_before_sz > 0 || opts->mark_after_sz > 0) { output_with_marks(global, opts, c->src, c->src_sz, c->positions, needle_len); } else { output_text(global, c->src, c->src_sz); } output_text(global, opts->delimiter, opts->delimiter_sz); } void output_results(GlobalData *global, Candidate *haystack, size_t count, Options *opts, len_t needle_len) { Candidate *c; qsort(haystack, count, sizeof(*haystack), cmpscore); size_t left = opts->limit > 0 ? opts->limit : count; for (size_t i = 0; i < left; i++) { c = haystack + i; if (c->score > 0) output_result(global, c, opts, needle_len); } } kitty-0.15.0/kittens/choose/score.c000066400000000000000000000147531356737523400172120ustar00rootroot00000000000000/* * score.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "choose-data-types.h" #include #include #include #include typedef struct { len_t *positions_buf; // buffer to store positions for every char in needle len_t **positions; // Array of pointers into positions_buf len_t *positions_count; // Array of counts for positions len_t needle_len; // Length of the needle len_t max_haystack_len; // Max length of a string in the haystack len_t haystack_len; // Length of the current string in the haystack len_t *address; // Array of offsets into the positions array double max_score_per_char; uint8_t *level_factors; // Array of score factors for every character in the current haystack that matches a character in the needle text_t *level1, *level2, *level3; // The characters in the levels len_t level1_len, level2_len, level3_len; text_t *needle; // The current needle text_t *haystack; //The current haystack } WorkSpace; void* alloc_workspace(len_t max_haystack_len, GlobalData *global) { WorkSpace *ans = calloc(1, sizeof(WorkSpace)); if (ans == NULL) return NULL; ans->positions_buf = (len_t*) calloc(global->needle_len, sizeof(len_t) * max_haystack_len); ans->positions = (len_t**)calloc(global->needle_len, sizeof(len_t*)); ans->positions_count = (len_t*)calloc(2*global->needle_len, sizeof(len_t)); ans->level_factors = (uint8_t*)calloc(max_haystack_len, sizeof(uint8_t)); if (ans->positions == NULL || ans->positions_buf == NULL || ans->positions_count == NULL || ans->level_factors == NULL) { free_workspace(ans); return NULL; } ans->needle = global->needle; ans->needle_len = global->needle_len; ans->max_haystack_len = max_haystack_len; ans->level1 = global->level1; ans->level2 = global->level2; ans->level3 = global->level3; ans->level1_len = global->level1_len; ans->level2_len = global->level2_len; ans->level3_len = global->level3_len; ans->address = ans->positions_count + sizeof(len_t) * global->needle_len; for (len_t i = 0; i < global->needle_len; i++) ans->positions[i] = ans->positions_buf + i * max_haystack_len; return ans; } #define NUKE(x) free(x); x = NULL; void* free_workspace(void *v) { WorkSpace *w = (WorkSpace*)v; NUKE(w->positions_buf); NUKE(w->positions); NUKE(w->positions_count); NUKE(w->level_factors); free(w); return NULL; } static inline bool has_char(text_t *text, len_t sz, text_t ch) { for(len_t i = 0; i < sz; i++) { if(text[i] == ch) return true; } return false; } static inline uint8_t level_factor_for(text_t current, text_t last, WorkSpace *w) { text_t lch = LOWERCASE(last); if (has_char(w->level1, w->level1_len, lch)) return 90; if (has_char(w->level2, w->level2_len, lch)) return 80; if (IS_LOWERCASE(last) && IS_UPPERCASE(current)) return 80; // CamelCase if (has_char(w->level3, w->level3_len, lch)) return 70; return 0; } static void init_workspace(WorkSpace *w, text_t *haystack, len_t haystack_len) { // Calculate the positions and level_factors arrays for the specified haystack bool level_factor_calculated = false; memset(w->positions_count, 0, sizeof(*(w->positions_count)) * 2 * w->needle_len); memset(w->level_factors, 0, sizeof(*(w->level_factors)) * w->max_haystack_len); for (len_t i = 0; i < haystack_len; i++) { level_factor_calculated = false; for (len_t j = 0; j < w->needle_len; j++) { if (w->needle[j] == LOWERCASE(haystack[i])) { if (!level_factor_calculated) { level_factor_calculated = true; w->level_factors[i] = i > 0 ? level_factor_for(haystack[i], haystack[i-1], w) : 0; } w->positions[j][w->positions_count[j]++] = i; } } } w->haystack = haystack; w->haystack_len = haystack_len; w->max_score_per_char = (1.0 / haystack_len + 1.0 / w->needle_len) / 2.0; } static inline bool has_atleast_one_match(WorkSpace *w) { int p = -1; bool found; for (len_t i = 0; i < w->needle_len; i++) { if (w->positions_count[i] == 0) return false; // All characters of the needle are not present in the haystack found = false; for (len_t j = 0; j < w->positions_count[i]; j++) { if (w->positions[i][j] > p) { p = w->positions[i][j]; found = true; break; } } if (!found) return false; // Characters of needle not present in sequence in haystack } return true; } #define POSITION(x) w->positions[x][w->address[x]] static inline bool increment_address(WorkSpace *w) { len_t pos = w->needle_len - 1; while(true) { w->address[pos]++; if (w->address[pos] < w->positions_count[pos]) return true; if (pos == 0) break; w->address[pos--] = 0; } return false; } static inline bool address_is_monotonic(WorkSpace *w) { // Check if the character positions pointed to by the current address are monotonic for (len_t i = 1; i < w->needle_len; i++) { if (POSITION(i) <= POSITION(i-1)) return false; } return true; } static inline double calc_score(WorkSpace *w) { double ans = 0; len_t distance, pos; for (len_t i = 0; i < w->needle_len; i++) { pos = POSITION(i); if (i == 0) distance = pos < LEN_MAX ? pos + 1 : LEN_MAX; else { distance = pos - POSITION(i-1); if (distance < 2) { ans += w->max_score_per_char; // consecutive characters continue; } } if (w->level_factors[pos]) ans += (100 * w->max_score_per_char) / w->level_factors[pos]; // at a special location else ans += (0.75 * w->max_score_per_char) / distance; } return ans; } static double process_item(WorkSpace *w, len_t *match_positions) { double highscore = 0, score; do { if (!address_is_monotonic(w)) continue; score = calc_score(w); if (score > highscore) { highscore = score; for (len_t i = 0; i < w->needle_len; i++) match_positions[i] = POSITION(i); } } while(increment_address(w)); return highscore; } double score_item(void *v, text_t *haystack, len_t haystack_len, len_t *match_positions) { WorkSpace *w = (WorkSpace*)v; init_workspace(w, haystack, haystack_len); if (!has_atleast_one_match(w)) return 0; return process_item(w, match_positions); } kitty-0.15.0/kittens/choose/unix_compat.c000066400000000000000000000017471356737523400204240ustar00rootroot00000000000000/* * unix_compat.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "choose-data-types.h" #include #include #include #include #include #ifdef __APPLE__ #ifndef _SC_NPROCESSORS_ONLN #define _SC_NPROCESSORS_ONLN 58 #endif #endif int cpu_count() { return sysconf(_SC_NPROCESSORS_ONLN); } void* alloc_threads(size_t num_threads) { return calloc(num_threads, sizeof(pthread_t)); } bool start_thread(void* threads, size_t i, void *(*start_routine) (void *), void *arg) { int rc; if ((rc = pthread_create(((pthread_t*)threads) + i, NULL, start_routine, arg))) { fprintf(stderr, "Failed to create thread, with error: %s\n", strerror(rc)); return false; } return true; } void wait_for_thread(void *threads, size_t i) { pthread_join(((pthread_t*)(threads))[i], NULL); } void free_threads(void *threads) { free(threads); } kitty-0.15.0/kittens/choose/vector.h000066400000000000000000000020331356737523400173720ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #define REPORT_OOM global->oom = 1; #define VECTOR_OF(TYPE, NAME) typedef struct { \ TYPE *data; \ size_t size; \ size_t capacity; \ } NAME; #define ALLOC_VEC(TYPE, vec, cap) \ vec.size = 0; vec.capacity = cap; \ vec.data = (TYPE*)malloc(vec.capacity * sizeof(TYPE)); \ if (vec.data == NULL) { REPORT_OOM; } #define FREE_VEC(vec) \ if (vec.data) { free(vec.data); vec.data = NULL; } \ vec.size = 0; vec.capacity = 0; #define ENSURE_SPACE(TYPE, vec, amt) \ if (vec.size + amt >= vec.capacity) { \ vec.capacity = MAX(vec.capacity * 2, vec.size + amt); \ vec.data = (TYPE*)realloc(vec.data, sizeof(TYPE) * vec.capacity); \ if (vec.data == NULL) { REPORT_OOM; ret = 1; break; } \ } #define NEXT(vec) (vec.data[vec.size]) #define INC(vec, amt) vec.size += amt; #define SIZE(vec) (vec.size) #define ITEM(vec, n) (vec.data[n]) kitty-0.15.0/kittens/choose/windows_compat.c000066400000000000000000000044651356737523400211330ustar00rootroot00000000000000/* * windows_compat.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "choose-data-types.h" #include #include #include #include int cpu_count() { SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); return sysinfo.dwNumberOfProcessors; } void* alloc_threads(size_t num_threads) { return calloc(num_threads, sizeof(uintptr_t)); } bool start_thread(void* vt, size_t i, unsigned int (STDCALL *start_routine) (void *), void *arg) { uintptr_t *threads = (uintptr_t*)vt; errno = 0; threads[i] = _beginthreadex(NULL, 0, start_routine, arg, 0, NULL); if (threads[i] == 0) { perror("Failed to create thread, with error"); return false; } return true; } void wait_for_thread(void *vt, size_t i) { uintptr_t *threads = vt; WaitForSingleObject((HANDLE)threads[i], INFINITE); CloseHandle((HANDLE)threads[i]); threads[i] = 0; } void free_threads(void *threads) { free(threads); } ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream) { char c, *cur_pos, *new_lineptr; size_t new_lineptr_len; if (lineptr == NULL || n == NULL || stream == NULL) { errno = EINVAL; return -1; } if (*lineptr == NULL) { *n = 8192; /* init len */ if ((*lineptr = (char *)malloc(*n)) == NULL) { errno = ENOMEM; return -1; } } cur_pos = *lineptr; for (;;) { c = getc(stream); if (ferror(stream) || (c == EOF && cur_pos == *lineptr)) return -1; if (c == EOF) break; if ((*lineptr + *n - cur_pos) < 2) { if (SSIZE_MAX / 2 < *n) { #ifdef EOVERFLOW errno = EOVERFLOW; #else errno = ERANGE; /* no EOVERFLOW defined */ #endif return -1; } new_lineptr_len = *n * 2; if ((new_lineptr = (char *)realloc(*lineptr, new_lineptr_len)) == NULL) { errno = ENOMEM; return -1; } *lineptr = new_lineptr; *n = new_lineptr_len; } *cur_pos++ = c; if (c == delim) break; } *cur_pos = '\0'; return (ssize_t)(cur_pos - *lineptr); } kitty-0.15.0/kittens/clipboard/000077500000000000000000000000001356737523400164005ustar00rootroot00000000000000kitty-0.15.0/kittens/clipboard/__init__.py000066400000000000000000000000001356737523400204770ustar00rootroot00000000000000kitty-0.15.0/kittens/clipboard/main.py000066400000000000000000000056201356737523400177010ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import sys from kitty.cli import parse_args from ..tui.handler import Handler from ..tui.loop import Loop class Clipboard(Handler): def __init__(self, data_to_send, args): self.args = args self.clipboard_contents = None self.data_to_send = data_to_send def initialize(self): if self.data_to_send is not None: self.cmd.write_to_clipboard(self.data_to_send, self.args.use_primary) if not self.args.get_clipboard: if self.args.wait_for_completion: # ask kitty for the TN terminfo capability and # only quit after a response is received self.print('\x1bP+q544e\x1b\\', end='') self.print('Waiting for completion...') return self.quit_loop(0) return self.cmd.request_from_clipboard(self.args.use_primary) def on_clipboard_response(self, text, from_primary=False): self.clipboard_contents = text self.quit_loop(0) def on_capability_response(self, name, val): self.quit_loop(0) def on_interrupt(self): self.quit_loop(1) def on_eot(self): self.quit_loop(1) OPTIONS = r''' --get-clipboard default=False type=bool-set Output the current contents of the clipboard to stdout. Note that this will not work if you have not enabled the option to allow reading the clipboard in kitty.conf --use-primary default=False type=bool-set Use the primary selection rather than the clipboard on systems that support it, such as X11. --wait-for-completion default=False type=bool-set Wait till the copy to clipboard is complete before exiting. Useful if running the kitten in a dedicated, ephemeral window. '''.format help_text = '''\ Read or write to the system clipboard. To set the clipboard text, pipe in the new text on stdin. Use the :option:`--get-clipboard` option to output the current clipboard contents to :file:`stdout`. Note that you must enable reading of clipboard in :file:`kitty.conf` first. ''' usage = '' def main(args): args, items = parse_args(args[1:], OPTIONS, usage, help_text, 'kitty +kitten clipboard') if items: raise SystemExit('Unrecognized extra command line arguments') data = None if not sys.stdin.isatty(): data = sys.stdin.buffer.read() sys.stdin = open(os.ctermid(), 'r') loop = Loop() handler = Clipboard(data, args) loop.loop(handler) if loop.return_code == 0 and handler.clipboard_contents: sys.stdout.write(handler.clipboard_contents) sys.stdout.flush() raise SystemExit(loop.return_code) if __name__ == '__main__': main(sys.argv) elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = OPTIONS sys.cli_docs['help_text'] = help_text kitty-0.15.0/kittens/diff/000077500000000000000000000000001356737523400153515ustar00rootroot00000000000000kitty-0.15.0/kittens/diff/README.asciidoc000066400000000000000000000000661356737523400200100ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/kittens/diff.html kitty-0.15.0/kittens/diff/__init__.py000066400000000000000000000000001356737523400174500ustar00rootroot00000000000000kitty-0.15.0/kittens/diff/collect.py000066400000000000000000000124251356737523400173540ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import re from functools import lru_cache from hashlib import md5 from mimetypes import guess_type from contextlib import suppress path_name_map = {} class Segment: __slots__ = ('start', 'end', 'start_code', 'end_code') def __init__(self, start, start_code): self.start = start self.start_code = start_code def __repr__(self): return 'Segment(start={!r}, start_code={!r}, end={!r}, end_code={!r})'.format( self.start, self.start_code, getattr(self, 'end', None), getattr(self, 'end_code', None) ) class Collection: def __init__(self): self.changes = {} self.renames = {} self.adds = set() self.removes = set() self.all_paths = [] self.type_map = {} self.added_count = self.removed_count = 0 def add_change(self, left_path, right_path): self.changes[left_path] = right_path self.all_paths.append(left_path) self.type_map[left_path] = 'diff' def add_rename(self, left_path, right_path): self.renames[left_path] = right_path self.all_paths.append(left_path) self.type_map[left_path] = 'rename' def add_add(self, right_path): self.adds.add(right_path) self.all_paths.append(right_path) self.type_map[right_path] = 'add' if isinstance(data_for_path(right_path), str): self.added_count += len(lines_for_path(right_path)) def add_removal(self, left_path): self.removes.add(left_path) self.all_paths.append(left_path) self.type_map[left_path] = 'removal' if isinstance(data_for_path(left_path), str): self.removed_count += len(lines_for_path(left_path)) def finalize(self): self.all_paths.sort(key=path_name_map.get) def __iter__(self): for path in self.all_paths: typ = self.type_map[path] if typ == 'diff': data = self.changes[path] elif typ == 'rename': data = self.renames[path] else: data = None yield path, typ, data def __len__(self): return len(self.all_paths) def collect_files(collection, left, right): left_names, right_names = set(), set() left_path_map, right_path_map = {}, {} def walk(base, names, pmap): for dirpath, dirnames, filenames in os.walk(base): for filename in filenames: path = os.path.abspath(os.path.join(dirpath, filename)) path_name_map[path] = name = os.path.relpath(path, base) names.add(name) pmap[name] = path walk(left, left_names, left_path_map), walk(right, right_names, right_path_map) common_names = left_names & right_names changed_names = {n for n in common_names if data_for_path(left_path_map[n]) != data_for_path(right_path_map[n])} for n in changed_names: collection.add_change(left_path_map[n], right_path_map[n]) removed = left_names - common_names added = right_names - common_names ahash = {a: hash_for_path(right_path_map[a]) for a in added} rhash = {r: hash_for_path(left_path_map[r]) for r in removed} for name, rh in rhash.items(): for n, ah in ahash.items(): if ah == rh and data_for_path(left_path_map[name]) == data_for_path(right_path_map[n]): collection.add_rename(left_path_map[name], right_path_map[n]) added.discard(n) break else: collection.add_removal(left_path_map[name]) for name in added: collection.add_add(right_path_map[name]) sanitize_pat = re.compile('[\x00-\x09\x0b-\x1f\x7f\x80-\x9f]') def sanitize(text): ntext = text.replace('\r\n', 'âŽ\n') return sanitize_pat.sub('â–‘', ntext) @lru_cache(maxsize=1024) def mime_type_for_path(path): return guess_type(path)[0] or 'application/octet-stream' @lru_cache(maxsize=1024) def raw_data_for_path(path): with open(path, 'rb') as f: return f.read() def is_image(path): return mime_type_for_path(path).startswith('image/') @lru_cache(maxsize=1024) def data_for_path(path): ans = raw_data_for_path(path) if not is_image(path) and not os.path.samefile(path, os.devnull): with suppress(UnicodeDecodeError): ans = ans.decode('utf-8') return ans @lru_cache(maxsize=1024) def lines_for_path(path): data = data_for_path(path).replace('\t', lines_for_path.replace_tab_by) return tuple(sanitize(data).splitlines()) lines_for_path.replace_tab_by = ' ' * 4 @lru_cache(maxsize=1024) def hash_for_path(path): return md5(raw_data_for_path(path)).digest() def create_collection(left, right): collection = Collection() if os.path.isdir(left): collect_files(collection, left, right) else: pl, pr = os.path.abspath(left), os.path.abspath(right) path_name_map[pl] = left path_name_map[pr] = right collection.add_change(pl, pr) collection.finalize() return collection highlight_data = {} def set_highlight_data(data): global highlight_data highlight_data = data def highlights_for_path(path): return highlight_data.get(path, []) kitty-0.15.0/kittens/diff/config.py000066400000000000000000000075301356737523400171750ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os from kitty.conf.utils import ( init_config as _init_config, key_func, load_config as _load_config, merge_dicts, parse_config_base, parse_kittens_key, resolve_config ) from kitty.conf.definition import config_lines from kitty.constants import config_dir from kitty.rgb import color_as_sgr from .config_data import type_map, all_options defaults = None formats = { 'title': '', 'margin': '', 'text': '', } def set_formats(opts): formats['text'] = '48' + color_as_sgr(opts.background) formats['title'] = '38' + color_as_sgr(opts.title_fg) + ';48' + color_as_sgr(opts.title_bg) + ';1' formats['margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.margin_bg) formats['added_margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.added_margin_bg) formats['removed_margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.removed_margin_bg) formats['added'] = '48' + color_as_sgr(opts.added_bg) formats['removed'] = '48' + color_as_sgr(opts.removed_bg) formats['filler'] = '48' + color_as_sgr(opts.filler_bg) formats['hunk_margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.hunk_margin_bg) formats['hunk'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.hunk_bg) formats['removed_highlight'] = '48' + color_as_sgr(opts.highlight_removed_bg) formats['added_highlight'] = '48' + color_as_sgr(opts.highlight_added_bg) func_with_args, args_funcs = key_func() @func_with_args('scroll_by') def parse_scroll_by(func, rest): try: return func, int(rest) except Exception: return func, 1 @func_with_args('scroll_to') def parse_scroll_to(func, rest): rest = rest.lower() if rest not in {'start', 'end', 'next-change', 'prev-change', 'next-page', 'prev-page', 'next-match', 'prev-match'}: rest = 'start' return func, rest @func_with_args('change_context') def parse_change_context(func, rest): rest = rest.lower() if rest in {'all', 'default'}: return func, rest try: amount = int(rest) except Exception: amount = 5 return func, amount @func_with_args('start_search') def parse_start_search(func, rest): rest = rest.lower().split() is_regex = rest and rest[0] == 'regex' is_backward = len(rest) > 1 and rest[1] == 'backward' return func, (is_regex, is_backward) def special_handling(key, val, ans): if key == 'map': action, *key_def = parse_kittens_key(val, args_funcs) ans['key_definitions'][tuple(key_def)] = action return True def parse_config(lines, check_keys=True): ans = {'key_definitions': {}} parse_config_base( lines, defaults, type_map, special_handling, ans, check_keys=check_keys ) return ans def merge_configs(defaults, vals): ans = {} for k, v in defaults.items(): if isinstance(v, dict): newvals = vals.get(k, {}) ans[k] = merge_dicts(v, newvals) else: ans[k] = vals.get(k, v) return ans def parse_defaults(lines, check_keys=False): return parse_config(lines, check_keys) Options, defaults = _init_config(config_lines(all_options), parse_defaults) def load_config(*paths, overrides=None): return _load_config(Options, defaults, parse_config, merge_configs, *paths, overrides=overrides) SYSTEM_CONF = '/etc/xdg/kitty/diff.conf' defconf = os.path.join(config_dir, 'diff.conf') def init_config(args): config = tuple(resolve_config(SYSTEM_CONF, defconf, args.config)) overrides = (a.replace('=', ' ', 1) for a in args.override or ()) opts = load_config(*config, overrides=overrides) set_formats(opts) return opts kitty-0.15.0/kittens/diff/config_data.py000066400000000000000000000105201356737523400201570ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal # Utils {{{ from gettext import gettext as _ from functools import partial from kitty.conf.definition import option_func from kitty.conf.utils import ( positive_int, python_string, to_color ) # }}} all_options = {} o, k, g, all_groups = option_func(all_options, { 'colors': [_('Colors')], 'diff': [_('Diffing'), ], 'shortcuts': [_('Keyboard shortcuts')], }) g('diff') def syntax_aliases(raw): ans = {} for x in raw.split(): a, b = x.partition(':')[::2] if a and b: ans[a.lower()] = b return ans o('syntax_aliases', 'pyj:py recipe:py', option_type=syntax_aliases, long_text=_(''' File extension aliases for syntax highlight For example, to syntax highlight :file:`file.xyz` as :file:`file.abc` use a setting of :code:`xyz:abc` ''')) o('num_context_lines', 3, option_type=positive_int, long_text=_(''' The number of lines of context to show around each change.''')) o('diff_cmd', 'auto', long_text=_(''' The diff command to use. Must contain the placeholder :code:`_CONTEXT_` which will be replaced by the number of lines of context. The default is to search the system for either git or diff and use that, if found. ''')) o('replace_tab_by', r'\x20\x20\x20\x20', option_type=python_string, long_text=_(''' The string to replace tabs with. Default is to use four spaces.''')) g('colors') o('pygments_style', 'default', long_text=_(''' The pygments color scheme to use for syntax highlighting. See :link:`pygments colors schemes ` for a list of schemes.''')) c = partial(o, option_type=to_color) c('foreground', 'black', long_text=_('Basic colors')) c('background', 'white') c('title_fg', 'black', long_text=_('Title colors')) c('title_bg', 'white') c('margin_bg', '#fafbfc', long_text=_('Margin colors')) c('margin_fg', '#aaaaaa') c('removed_bg', '#ffeef0', long_text=_('Removed text backgrounds')) c('highlight_removed_bg', '#fdb8c0') c('removed_margin_bg', '#ffdce0') c('added_bg', '#e6ffed', long_text=_('Added text backgrounds')) c('highlight_added_bg', '#acf2bd') c('added_margin_bg', '#cdffd8') c('filler_bg', '#fafbfc', long_text=_('Filler (empty) line background')) c('hunk_margin_bg', '#dbedff', long_text=_('Hunk header colors')) c('hunk_bg', '#f1f8ff') c('search_bg', '#444', long_text=_('Highlighting')) c('search_fg', 'white') c('select_bg', '#b4d5fe') c('select_fg', 'black') g('shortcuts') k('quit', 'q', 'quit', _('Quit')) k('quit', 'esc', 'quit', _('Quit')) k('scroll_down', 'j', 'scroll_by 1', _('Scroll down')) k('scroll_down', 'down', 'scroll_by 1', _('Scroll down')) k('scroll_up', 'k', 'scroll_by -1', _('Scroll up')) k('scroll_up', 'up', 'scroll_by -1', _('Scroll up')) k('scroll_top', 'home', 'scroll_to start', _('Scroll to top')) k('scroll_bottom', 'end', 'scroll_to end', _('Scroll to bottom')) k('scroll_page_down', 'page_down', 'scroll_to next-page', _('Scroll to next page')) k('scroll_page_down', 'space', 'scroll_to next-page', _('Scroll to next page')) k('scroll_page_up', 'page_up', 'scroll_to prev-page', _('Scroll to previous page')) k('next_change', 'n', 'scroll_to next-change', _('Scroll to next change')) k('prev_change', 'p', 'scroll_to prev-change', _('Scroll to previous change')) k('all_context', 'a', 'change_context all', _('Show all context')) k('default_context', '=', 'change_context default', _('Show default context')) k('increase_context', '+', 'change_context 5', _('Increase context')) k('decrease_context', '-', 'change_context -5', _('Decrease context')) k('search_forward', '/', 'start_search regex forward', _('Search forward')) k('search_backward', '?', 'start_search regex backward', _('Search backward')) k('next_match', '.', 'scroll_to next-match', _('Scroll to next search match')) k('prev_match', ',', 'scroll_to prev-match', _('Scroll to previous search match')) k('next_match', '>', 'scroll_to next-match', _('Scroll to next search match')) k('prev_match', '<', 'scroll_to prev-match', _('Scroll to previous search match')) k('search_forward_simple', 'f', 'start_search substring forward', _('Search forward (no regex)')) k('search_backward_simple', 'b', 'start_search substring backward', _('Search backward (no regex)')) type_map = {o.name: o.option_type for o in all_options.values() if hasattr(o, 'option_type')} kitty-0.15.0/kittens/diff/highlight.py000066400000000000000000000117031356737523400176740ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import concurrent import os import re from pygments import highlight from pygments.formatter import Formatter from pygments.lexers import get_lexer_for_filename from pygments.util import ClassNotFound from kitty.rgb import color_as_sgr, parse_sharp from .collect import Segment, data_for_path, lines_for_path class StyleNotFound(Exception): pass class DiffFormatter(Formatter): def __init__(self, style='default'): try: Formatter.__init__(self, style=style) initialized = True except ClassNotFound: initialized = False if not initialized: raise StyleNotFound('pygments style "{}" not found'.format(style)) self.styles = {} for token, style in self.style: start = [] end = [] # a style item is a tuple in the following form: # colors are readily specified in hex: 'RRGGBB' if style['color']: start.append('38' + color_as_sgr(parse_sharp(style['color']))) end.append('39') if style['bold']: start.append('1') end.append('22') if style['italic']: start.append('3') end.append('23') if style['underline']: start.append('4') end.append('24') if start: start = '\033[{}m'.format(';'.join(start)) end = '\033[{}m'.format(';'.join(end)) self.styles[token] = start or '', end or '' def format(self, tokensource, outfile): for ttype, value in tokensource: not_found = True if value.rstrip('\n'): while ttype and not_found: tok = self.styles.get(ttype) if tok is None: ttype = ttype[:-1] else: on, off = tok lines = value.split('\n') for line in lines: if line: outfile.write(on + line + off) if line is not lines[-1]: outfile.write('\n') not_found = False if not_found: outfile.write(value) formatter = None def initialize_highlighter(style='default'): global formatter formatter = DiffFormatter(style) def highlight_data(code, filename, aliases=None): if aliases: base, ext = os.path.splitext(filename) alias = aliases.get(ext[1:]) if alias is not None: filename = base + '.' + alias try: lexer = get_lexer_for_filename(filename, stripnl=False) except ClassNotFound: pass else: return highlight(code, lexer, formatter) split_pat = re.compile(r'(\033\[.*?m)') def highlight_line(line): ans = [] current = None pos = 0 for x in split_pat.split(line): if x.startswith('\033'): if current is None: current = Segment(pos, x) else: current.end = pos current.end_code = x ans.append(current) current = None else: pos += len(x) return ans def highlight_for_diff(path, aliases): ans = [] lines = lines_for_path(path) hd = highlight_data('\n'.join(lines), path, aliases) if hd is not None: for line in hd.splitlines(): ans.append(highlight_line(line)) return ans def highlight_collection(collection, aliases=None): jobs = {} ans = {} with concurrent.futures.ProcessPoolExecutor(max_workers=os.cpu_count()) as executor: highlight_collection.processes = executor._processes for path, item_type, other_path in collection: if item_type != 'rename': for p in (path, other_path): if p: is_binary = isinstance(data_for_path(p), bytes) if not is_binary: jobs[executor.submit(highlight_for_diff, p, aliases)] = p for future in concurrent.futures.as_completed(jobs): path = jobs[future] try: highlights = future.result() except Exception as e: return 'Running syntax highlighting for {} generated an exception: {}'.format(path, e) ans[path] = highlights return ans def main(): from .config import defaults # kitty +runpy "from kittens.diff.highlight import main; main()" file import sys initialize_highlighter() with open(sys.argv[-1]) as f: highlighted = highlight_data(f.read(), f.name, defaults.syntax_aliases) if highlighted is None: raise SystemExit('Unknown filetype: {}'.format(sys.argv[-1])) print(highlighted) kitty-0.15.0/kittens/diff/main.py000066400000000000000000000512751356737523400166610ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import atexit import os import signal import subprocess import sys import tempfile import warnings from collections import defaultdict from contextlib import suppress from functools import partial from gettext import gettext as _ from kitty.cli import CONFIG_HELP, parse_args from kitty.constants import appname from kitty.fast_data_types import wcswidth from kitty.key_encoding import ESCAPE, RELEASE, enter_key from ..tui.handler import Handler from ..tui.images import ImageManager from ..tui.line_edit import LineEdit from ..tui.loop import Loop from ..tui.operations import styled from .collect import ( create_collection, data_for_path, lines_for_path, sanitize, set_highlight_data ) from .config import init_config from .patch import Differ, set_diff_command, worker_processes from .render import ImageSupportWarning, LineRef, render_diff from .search import BadRegex, Search try: from .highlight import initialize_highlighter, highlight_collection except ImportError: initialize_highlighter = highlight_collection = None INITIALIZING, COLLECTED, DIFFED, COMMAND, MESSAGE = range(5) def generate_diff(collection, context): d = Differ() for path, item_type, changed_path in collection: if item_type == 'diff': is_binary = isinstance(data_for_path(path), bytes) or isinstance(data_for_path(changed_path), bytes) if not is_binary: d.add_diff(path, changed_path) return d(context) class DiffHandler(Handler): image_manager_class = ImageManager def __init__(self, args, opts, left, right): self.state = INITIALIZING self.message = '' self.current_search_is_regex = True self.current_search = None self.line_edit = LineEdit() self.opts = opts self.left, self.right = left, right self.report_traceback_on_exit = None self.args = args self.scroll_pos = self.max_scroll_pos = 0 self.current_context_count = self.original_context_count = self.args.context if self.current_context_count < 0: self.current_context_count = self.original_context_count = self.opts.num_context_lines self.highlighting_done = False self.restore_position = None for key_def, action in self.opts.key_definitions.items(): self.add_shortcut(action, *key_def) def perform_action(self, action): func, args = action if func == 'quit': self.quit_loop(0) return if self.state <= DIFFED: if func == 'scroll_by': return self.scroll_lines(*args) if func == 'scroll_to': where = args[0] if 'change' in where: return self.scroll_to_next_change(backwards='prev' in where) if 'match' in where: return self.scroll_to_next_match(backwards='prev' in where) if 'page' in where: amt = self.num_lines * (1 if 'next' in where else -1) else: amt = len(self.diff_lines) * (1 if 'end' in where else -1) return self.scroll_lines(amt) if func == 'change_context': new_ctx = self.current_context_count to = args[0] if to == 'all': new_ctx = 100000 elif to == 'default': new_ctx = self.original_context_count else: new_ctx += to return self.change_context_count(new_ctx) if func == 'start_search': self.start_search(*args) return def create_collection(self): def collect_done(collection): self.collection = collection self.state = COLLECTED self.generate_diff() def collect(left, right): collection = create_collection(left, right) self.asyncio_loop.call_soon_threadsafe(collect_done, collection) self.asyncio_loop.run_in_executor(None, collect, self.left, self.right) def generate_diff(self): def diff_done(diff_map): if isinstance(diff_map, str): self.report_traceback_on_exit = diff_map self.quit_loop(1) return self.state = DIFFED self.diff_map = diff_map self.calculate_statistics() self.render_diff() self.scroll_pos = 0 if self.restore_position is not None: self.current_position = self.restore_position self.restore_position = None self.draw_screen() if initialize_highlighter is not None and not self.highlighting_done: from .highlight import StyleNotFound self.highlighting_done = True try: initialize_highlighter(self.opts.pygments_style) except StyleNotFound as e: self.report_traceback_on_exit = str(e) self.quit_loop(1) return self.syntax_highlight() def diff(collection, current_context_count): diff_map = generate_diff(collection, current_context_count) self.asyncio_loop.call_soon_threadsafe(diff_done, diff_map) self.asyncio_loop.run_in_executor(None, diff, self.collection, self.current_context_count) def syntax_highlight(self): def highlighting_done(hdata): if isinstance(hdata, str): self.report_traceback_on_exit = hdata self.quit_loop(1) return set_highlight_data(hdata) self.render_diff() self.draw_screen() def highlight(*a): result = highlight_collection(*a) self.asyncio_loop.call_soon_threadsafe(highlighting_done, result) self.asyncio_loop.run_in_executor(None, highlight, self.collection, self.opts.syntax_aliases) def calculate_statistics(self): self.added_count = self.collection.added_count self.removed_count = self.collection.removed_count for patch in self.diff_map.values(): self.added_count += patch.added_count self.removed_count += patch.removed_count def render_diff(self): self.diff_lines = tuple(render_diff(self.collection, self.diff_map, self.args, self.screen_size.cols, self.image_manager)) self.margin_size = render_diff.margin_size self.ref_path_map = defaultdict(list) for i, l in enumerate(self.diff_lines): self.ref_path_map[l.ref.path].append((i, l.ref)) self.max_scroll_pos = len(self.diff_lines) - self.num_lines if self.current_search is not None: self.current_search(self.diff_lines, self.margin_size, self.screen_size.cols) @property def current_position(self): return self.diff_lines[min(len(self.diff_lines) - 1, self.scroll_pos)].ref @current_position.setter def current_position(self, ref): num = None if isinstance(ref.extra, LineRef): sln = ref.extra.src_line_number for i, q in self.ref_path_map[ref.path]: if isinstance(q.extra, LineRef): if q.extra.src_line_number >= sln: if q.extra.src_line_number == sln: num = i break num = i if num is None: for i, q in self.ref_path_map[ref.path]: num = i break if num is not None: self.scroll_pos = max(0, min(num, self.max_scroll_pos)) @property def num_lines(self): return self.screen_size.rows - 1 def scroll_to_next_change(self, backwards=False): if backwards: r = range(self.scroll_pos - 1, -1, -1) else: r = range(self.scroll_pos + 1, len(self.diff_lines)) for i in r: line = self.diff_lines[i] if line.is_change_start: self.scroll_lines(i - self.scroll_pos) return self.cmd.bell() def scroll_to_next_match(self, backwards=False, include_current=False): if self.current_search is not None: offset = 0 if include_current else 1 if backwards: r = range(self.scroll_pos - offset, -1, -1) else: r = range(self.scroll_pos + offset, len(self.diff_lines)) for i in r: if i in self.current_search: self.scroll_lines(i - self.scroll_pos) return self.cmd.bell() def set_scrolling_region(self): self.cmd.set_scrolling_region(self.screen_size, 0, self.num_lines - 2) def scroll_lines(self, amt=1): new_pos = max(0, min(self.scroll_pos + amt, self.max_scroll_pos)) if new_pos == self.scroll_pos: self.cmd.bell() return if abs(new_pos - self.scroll_pos) >= self.num_lines - 1: self.scroll_pos = new_pos self.draw_screen() return self.enforce_cursor_state() self.cmd.scroll_screen(amt) self.scroll_pos = new_pos if amt < 0: self.cmd.set_cursor_position(0, 0) self.draw_lines(-amt) else: self.cmd.set_cursor_position(0, self.num_lines - amt) self.draw_lines(amt, self.num_lines - amt) self.draw_status_line() def init_terminal_state(self): self.cmd.set_line_wrapping(False) self.cmd.set_window_title(main.title) self.cmd.set_default_colors( fg=self.opts.foreground, bg=self.opts.background, cursor=self.opts.foreground, select_fg=self.opts.select_fg, select_bg=self.opts.select_bg) self.cmd.set_cursor_shape('bar') def finalize(self): self.cmd.set_default_colors() self.cmd.set_cursor_visible(True) self.cmd.set_scrolling_region() def initialize(self): self.init_terminal_state() self.set_scrolling_region() self.draw_screen() self.create_collection() def enforce_cursor_state(self): self.cmd.set_cursor_visible(self.state == COMMAND) def draw_lines(self, num, offset=0): offset += self.scroll_pos image_involved = False limit = len(self.diff_lines) for i in range(num): lpos = offset + i if lpos >= limit: text = '' else: line = self.diff_lines[lpos] text = line.text if line.image_data is not None: image_involved = True self.write('\r\x1b[K' + text + '\x1b[0m') if self.current_search is not None: self.current_search.highlight_line(self.write, lpos) if i < num - 1: self.write('\n') if image_involved: self.place_images() def place_images(self): self.cmd.clear_images_on_screen() offset = self.scroll_pos limit = len(self.diff_lines) in_image = False for row in range(self.num_lines): lpos = offset + row if lpos >= limit: break line = self.diff_lines[lpos] if in_image: if line.image_data is None: in_image = False continue if line.image_data is not None: left_placement, right_placement = line.image_data if left_placement is not None: self.place_image(row, left_placement, True) in_image = True if right_placement is not None: self.place_image(row, right_placement, False) in_image = True def place_image(self, row, placement, is_left): xpos = (0 if is_left else (self.screen_size.cols // 2)) + placement.image.margin_size image_height_in_rows = placement.image.rows topmost_visible_row = placement.row num_visible_rows = image_height_in_rows - topmost_visible_row visible_frac = min(num_visible_rows / image_height_in_rows, 1) if visible_frac > 0: height = int(visible_frac * placement.image.height) top = placement.image.height - height self.image_manager.show_image(placement.image.image_id, xpos, row, src_rect=( 0, top, placement.image.width, height)) def draw_screen(self): self.enforce_cursor_state() if self.state < DIFFED: self.cmd.clear_screen() self.write(_('Calculating diff, please wait...')) return self.cmd.clear_images_on_screen() self.cmd.set_cursor_position(0, 0) self.draw_lines(self.num_lines) self.draw_status_line() def draw_status_line(self): if self.state < DIFFED: return self.enforce_cursor_state() self.cmd.set_cursor_position(0, self.num_lines) self.cmd.clear_to_eol() if self.state is COMMAND: self.line_edit.write(self.write) elif self.state is MESSAGE: self.cmd.styled(self.message, reverse=True) else: sp = '{:.0%}'.format(self.scroll_pos/self.max_scroll_pos) if self.scroll_pos and self.max_scroll_pos else '0%' scroll_frac = styled(sp, fg=self.opts.margin_fg) if self.current_search is None: counts = '{}{}{}'.format( styled(str(self.added_count), fg=self.opts.highlight_added_bg), styled(',', fg=self.opts.margin_fg), styled(str(self.removed_count), fg=self.opts.highlight_removed_bg) ) else: counts = styled('{} matches'.format(len(self.current_search)), fg=self.opts.margin_fg) suffix = counts + ' ' + scroll_frac prefix = styled(':', fg=self.opts.margin_fg) filler = self.screen_size.cols - wcswidth(prefix) - wcswidth(suffix) text = '{}{}{}'.format(prefix, ' ' * filler, suffix) self.write(text) def change_context_count(self, new_ctx): new_ctx = max(0, new_ctx) if new_ctx != self.current_context_count: self.current_context_count = new_ctx self.state = COLLECTED self.generate_diff() self.restore_position = self.current_position self.draw_screen() def start_search(self, is_regex, is_backward): if self.state != DIFFED: self.cmd.bell() return self.state = COMMAND self.line_edit.clear() self.line_edit.add_text('?' if is_backward else '/') self.current_search_is_regex = is_regex self.draw_status_line() def do_search(self): self.current_search = None query = self.line_edit.current_input if len(query) < 2: return try: self.current_search = Search(self.opts, query[1:], self.current_search_is_regex, query[0] == '?') except BadRegex: self.state = MESSAGE self.message = sanitize(_('Bad regex: {}').format(query[1:])) self.cmd.bell() else: if self.current_search(self.diff_lines, self.margin_size, self.screen_size.cols): self.scroll_to_next_match(include_current=True) else: self.state = MESSAGE self.message = sanitize(_('No matches found')) self.cmd.bell() def on_text(self, text, in_bracketed_paste=False): if self.state is COMMAND: self.line_edit.on_text(text, in_bracketed_paste) self.draw_status_line() return if self.state is MESSAGE: self.state = DIFFED self.draw_status_line() return action = self.shortcut_action(text) if action is not None: return self.perform_action(action) def on_key(self, key_event): if self.state is MESSAGE: if key_event.type is not RELEASE: self.state = DIFFED self.draw_status_line() return if self.state is COMMAND: if self.line_edit.on_key(key_event): if not self.line_edit.current_input: self.state = DIFFED self.draw_status_line() return if key_event.type is RELEASE: return if self.state is COMMAND: if key_event.key is ESCAPE: self.state = DIFFED self.draw_status_line() return if key_event is enter_key: self.state = DIFFED self.do_search() self.line_edit.clear() self.draw_screen() return if self.state >= DIFFED and self.current_search is not None and key_event.key is ESCAPE: self.current_search = None self.draw_screen() return action = self.shortcut_action(key_event) if action is not None: return self.perform_action(action) def on_resize(self, screen_size): self.screen_size = screen_size self.set_scrolling_region() if self.state > COLLECTED: self.image_manager.delete_all_sent_images() self.render_diff() self.draw_screen() def on_interrupt(self): self.quit_loop(1) def on_eot(self): self.quit_loop(1) OPTIONS = partial('''\ --context type=int default=-1 Number of lines of context to show between changes. Negative values use the number set in diff.conf --config type=list {config_help} --override -o type=list Override individual configuration options, can be specified multiple times. Syntax: :italic:`name=value`. For example: :italic:`-o background=gray` '''.format, config_help=CONFIG_HELP.format(conf_name='diff', appname=appname)) def showwarning(message, category, filename, lineno, file=None, line=None): if category is ImageSupportWarning: showwarning.warnings.append(message) showwarning.warnings = [] help_text = 'Show a side-by-side diff of the specified files/directories. You can also use ssh:hostname:remote-file-path to diff remote files.' usage = 'file_or_directory_left file_or_directory_right' def terminate_processes(processes): for pid in processes: with suppress(Exception): os.kill(pid, signal.SIGKILL) def get_remote_file(path): if path.startswith('ssh:'): parts = path.split(':', 2) if len(parts) == 3: hostname, rpath = parts[1:] with tempfile.NamedTemporaryFile(suffix='-' + os.path.basename(rpath), prefix='remote:', delete=False) as tf: atexit.register(os.remove, tf.name) p = subprocess.Popen(['ssh', hostname, 'cat', rpath], stdout=tf) if p.wait() != 0: raise SystemExit(p.returncode) return tf.name return path def main(args): warnings.showwarning = showwarning args, items = parse_args(args[1:], OPTIONS, usage, help_text, 'kitty +kitten diff') if len(items) != 2: raise SystemExit('You must specify exactly two files/directories to compare') left, right = items main.title = _('{} vs. {}').format(left, right) if os.path.isdir(left) != os.path.isdir(right): raise SystemExit('The items to be diffed should both be either directories or files. Comparing a directory to a file is not valid.') opts = init_config(args) set_diff_command(opts.diff_cmd) lines_for_path.replace_tab_by = opts.replace_tab_by left, right = map(get_remote_file, (left, right)) for f in left, right: if not os.path.exists(f): raise SystemExit('{} does not exist'.format(f)) loop = Loop() handler = DiffHandler(args, opts, left, right) loop.loop(handler) for message in showwarning.warnings: from kitty.utils import safe_print safe_print(message, file=sys.stderr) highlight_processes = getattr(highlight_collection, 'processes', ()) terminate_processes(tuple(highlight_processes)) terminate_processes(tuple(worker_processes)) if loop.return_code != 0: if handler.report_traceback_on_exit: print(handler.report_traceback_on_exit, file=sys.stderr) input('Press Enter to quit.') raise SystemExit(loop.return_code) if __name__ == '__main__': main(sys.argv) elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = OPTIONS sys.cli_docs['help_text'] = help_text elif __name__ == '__conf__': from .config import all_options sys.all_options = all_options kitty-0.15.0/kittens/diff/patch.py000066400000000000000000000205551356737523400170310ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import concurrent.futures import os import shlex import shutil import subprocess from .collect import lines_for_path from .diff_speedup import changed_center left_lines = right_lines = None GIT_DIFF = 'git diff --no-color --no-ext-diff --exit-code -U_CONTEXT_ --no-index --' DIFF_DIFF = 'diff -p -U _CONTEXT_ --' worker_processes = [] def find_differ(): if shutil.which('git') and subprocess.Popen(['git', '--help'], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL).wait() == 0: return GIT_DIFF if shutil.which('diff'): return DIFF_DIFF def set_diff_command(opt): if opt == 'auto': cmd = find_differ() if cmd is None: raise SystemExit('Failed to find either the git or diff programs on your system') else: cmd = opt set_diff_command.cmd = cmd def run_diff(file1, file2, context=3): # returns: ok, is_different, patch cmd = shlex.split(set_diff_command.cmd.replace('_CONTEXT_', str(context))) # we resolve symlinks because git diff does not follow symlinks, while diff # does. We want consistent behavior, also for integration with git difftool # we always want symlinks to be followed. path1, path2 = map(os.path.realpath, (file1, file2)) p = subprocess.Popen( cmd + [path1, path2], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.DEVNULL) worker_processes.append(p.pid) stdout, stderr = p.communicate() returncode = p.wait() worker_processes.remove(p.pid) if returncode in (0, 1): return True, returncode == 1, stdout.decode('utf-8') return False, returncode, stderr.decode('utf-8') class Chunk: __slots__ = ('is_context', 'left_start', 'right_start', 'left_count', 'right_count', 'centers') def __init__(self, left_start, right_start, is_context=False): self.is_context = is_context self.left_start = left_start self.right_start = right_start self.left_count = self.right_count = 0 self.centers = None def add_line(self): self.right_count += 1 def remove_line(self): self.left_count += 1 def context_line(self): self.left_count += 1 self.right_count += 1 def finalize(self): if not self.is_context and self.left_count == self.right_count: self.centers = tuple( changed_center(left_lines[self.left_start + i], right_lines[self.right_start + i]) for i in range(self.left_count) ) def __repr__(self): return 'Chunk(is_context={}, left_start={}, left_count={}, right_start={}, right_count={})'.format( self.is_context, self.left_start, self.left_count, self.right_start, self.right_count) class Hunk: def __init__(self, title, left, right): self.left_start, self.left_count = left self.right_start, self.right_count = right self.left_start -= 1 # 0-index self.right_start -= 1 # 0-index self.title = title self.added_count = self.removed_count = 0 self.chunks = [] self.current_chunk = None self.largest_line_number = max(self.left_start + self.left_count, self.right_start + self.right_count) def new_chunk(self, is_context=False): if self.chunks: c = self.chunks[-1] left_start = c.left_start + c.left_count right_start = c.right_start + c.right_count else: left_start = self.left_start right_start = self.right_start return Chunk(left_start, right_start, is_context) def ensure_diff_chunk(self): if self.current_chunk is None: self.current_chunk = self.new_chunk(is_context=False) elif self.current_chunk.is_context: self.chunks.append(self.current_chunk) self.current_chunk = self.new_chunk(is_context=False) def ensure_context_chunk(self): if self.current_chunk is None: self.current_chunk = self.new_chunk(is_context=True) elif not self.current_chunk.is_context: self.chunks.append(self.current_chunk) self.current_chunk = self.new_chunk(is_context=True) def add_line(self): self.ensure_diff_chunk() self.current_chunk.add_line() self.added_count += 1 def remove_line(self): self.ensure_diff_chunk() self.current_chunk.remove_line() self.removed_count += 1 def context_line(self): self.ensure_context_chunk() self.current_chunk.context_line() def finalize(self): self.chunks.append(self.current_chunk) del self.current_chunk # Sanity check c = self.chunks[-1] if c.left_start + c.left_count != self.left_start + self.left_count: raise ValueError('Left side line mismatch {} != {}'.format(c.left_start + c.left_count, self.left_start + self.left_count)) if c.right_start + c.right_count != self.right_start + self.right_count: raise ValueError('Left side line mismatch {} != {}'.format(c.right_start + c.right_count, self.right_start + self.right_count)) for c in self.chunks: c.finalize() def parse_range(x): parts = x[1:].split(',', 1) start = abs(int(parts[0])) count = 1 if len(parts) < 2 else int(parts[1]) return start, count def parse_hunk_header(line): parts = tuple(filter(None, line.split('@@', 2))) linespec = parts[0].strip() title = '' if len(parts) == 2: title = parts[1].strip() left, right = map(parse_range, linespec.split()) return Hunk(title, left, right) class Patch: def __init__(self, all_hunks): self.all_hunks = all_hunks self.largest_line_number = self.all_hunks[-1].largest_line_number if self.all_hunks else 0 self.added_count = sum(h.added_count for h in all_hunks) self.removed_count = sum(h.removed_count for h in all_hunks) def __iter__(self): return iter(self.all_hunks) def __len__(self): return len(self.all_hunks) def parse_patch(raw): all_hunks = [] current_hunk = None for line in raw.splitlines(): if line.startswith('@@ '): current_hunk = parse_hunk_header(line) all_hunks.append(current_hunk) else: if current_hunk is None: continue q = line[0] if q == '+': current_hunk.add_line() elif q == '-': current_hunk.remove_line() elif q == '\\': continue else: current_hunk.context_line() for h in all_hunks: h.finalize() return Patch(all_hunks) class Differ: diff_executor = None def __init__(self): self.jmap = {} self.jobs = [] if Differ.diff_executor is None: Differ.diff_executor = self.diff_executor = concurrent.futures.ThreadPoolExecutor(max_workers=os.cpu_count()) def add_diff(self, file1, file2): self.jmap[file1] = file2 self.jobs.append(file1) def __call__(self, context=3): global left_lines, right_lines ans = {} executor = Differ.diff_executor jobs = {executor.submit(run_diff, key, self.jmap[key], context): key for key in self.jobs} for future in concurrent.futures.as_completed(jobs): key = jobs[future] left_path, right_path = key, self.jmap[key] try: ok, returncode, output = future.result() except FileNotFoundError as err: return 'Could not find the {} executable. Is it in your PATH?'.format(err.filename) except Exception as e: return 'Running git diff for {} vs. {} generated an exception: {}'.format(left_path, right_path, e) if not ok: return output + '\nRunning git diff for {} vs. {} failed'.format(left_path, right_path) left_lines = lines_for_path(left_path) right_lines = lines_for_path(right_path) try: patch = parse_patch(output) except Exception: import traceback return traceback.format_exc() + '\nParsing diff for {} vs. {} failed'.format(left_path, right_path) else: ans[key] = patch return ans kitty-0.15.0/kittens/diff/render.py000066400000000000000000000455601356737523400172140ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import warnings from gettext import gettext as _ from itertools import repeat, zip_longest from math import ceil from kitty.fast_data_types import truncate_point_for_length, wcswidth from ..tui.images import can_display_images from .collect import ( Segment, data_for_path, highlights_for_path, is_image, lines_for_path, path_name_map, sanitize ) from .config import formats from .diff_speedup import split_with_highlights as _split_with_highlights class ImageSupportWarning(Warning): pass def images_supported(): ans = getattr(images_supported, 'ans', None) if ans is None: images_supported.ans = ans = can_display_images() if not ans: warnings.warn('ImageMagick not found images cannot be displayed', ImageSupportWarning) return ans class Ref: def __setattr__(self, name, value): raise AttributeError("can't set attribute") def __repr__(self): return '{}({})'.format(self.__class__.__name__, ', '.join( '{}={}'.format(n, getattr(self, n)) for n in self.__slots__ if n != '_hash')) class LineRef(Ref): __slots__ = ('src_line_number', 'wrapped_line_idx') def __init__(self, sln, wli=0): object.__setattr__(self, 'src_line_number', sln) object.__setattr__(self, 'wrapped_line_idx', wli) class Reference(Ref): __slots__ = ('path', 'extra') def __init__(self, path, extra=None): object.__setattr__(self, 'path', path) object.__setattr__(self, 'extra', extra) class Line: __slots__ = ('text', 'ref', 'is_change_start', 'image_data') def __init__(self, text, ref, change_start=False, image_data=None): self.text = text self.ref = ref self.is_change_start = change_start self.image_data = image_data def yield_lines_from(iterator, reference, is_change_start=True): for text in iterator: yield Line(text, reference, is_change_start) is_change_start = False def human_readable(size, sep=' '): """ Convert a size in bytes into a human readable form """ divisor, suffix = 1, "B" for i, candidate in enumerate(('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB')): if size < (1 << ((i + 1) * 10)): divisor, suffix = (1 << (i * 10)), candidate break size = str(float(size)/divisor) if size.find(".") > -1: size = size[:size.find(".")+2] if size.endswith('.0'): size = size[:-2] return size + sep + suffix def fit_in(text, count): p = truncate_point_for_length(text, count) if p >= len(text): return text if count > 1: p = truncate_point_for_length(text, count - 1) return text[:p] + '…' def fill_in(text, sz): w = wcswidth(text) if w < sz: text += ' ' * (sz - w) return text def place_in(text, sz): return fill_in(fit_in(text, sz), sz) def format_func(which): def formatted(text): fmt = formats[which] return '\x1b[' + fmt + 'm' + text + '\x1b[0m' formatted.__name__ = which + '_format' return formatted text_format = format_func('text') title_format = format_func('title') margin_format = format_func('margin') added_format = format_func('added') removed_format = format_func('removed') removed_margin_format = format_func('removed_margin') added_margin_format = format_func('added_margin') filler_format = format_func('filler') hunk_margin_format = format_func('hunk_margin') hunk_format = format_func('hunk') highlight_map = {'remove': ('removed_highlight', 'removed'), 'add': ('added_highlight', 'added')} def highlight_boundaries(ltype): s, e = highlight_map[ltype] start = '\x1b[' + formats[s] + 'm' stop = '\x1b[' + formats[e] + 'm' return start, stop def title_lines(left_path, right_path, args, columns, margin_size): m = ' ' * margin_size left_name, right_name = map(path_name_map.get, (left_path, right_path)) if right_name and right_name != left_name: n1 = fit_in(m + sanitize(left_name), columns // 2 - margin_size) n1 = place_in(n1, columns // 2) n2 = fit_in(m + sanitize(right_name), columns // 2 - margin_size) n2 = place_in(n2, columns // 2) name = n1 + n2 else: name = place_in(m + sanitize(left_name), columns) yield title_format(place_in(name, columns)) yield title_format('â”' * columns) def binary_lines(path, other_path, columns, margin_size): template = _('Binary file: {}') available_cols = columns // 2 - margin_size def fl(path, fmt): text = template.format(human_readable(len(data_for_path(path)))) text = place_in(text, available_cols) return margin_format(' ' * margin_size) + fmt(text) if path is None: filler = render_diff_line('', '', 'filler', margin_size, available_cols) yield filler + fl(other_path, added_format) elif other_path is None: filler = render_diff_line('', '', 'filler', margin_size, available_cols) yield fl(path, removed_format) + filler else: yield fl(path, removed_format) + fl(other_path, added_format) def split_to_size(line, width): if not line: yield line while line: p = truncate_point_for_length(line, width) yield line[:p] line = line[p:] def truncate_points(line, width): pos = 0 sz = len(line) while True: pos = truncate_point_for_length(line, width, pos) if pos < sz: yield pos else: break def split_with_highlights(line, width, highlights, bg_highlight=None): truncate_pts = list(truncate_points(line, width)) return _split_with_highlights(line, truncate_pts, highlights, bg_highlight) margin_bg_map = {'filler': filler_format, 'remove': removed_margin_format, 'add': added_margin_format, 'context': margin_format} text_bg_map = {'filler': filler_format, 'remove': removed_format, 'add': added_format, 'context': text_format} class DiffData: def __init__(self, left_path, right_path, available_cols, margin_size): self.left_path, self.right_path = left_path, right_path self.available_cols = available_cols self.margin_size = margin_size self.left_lines, self.right_lines = map(lines_for_path, (left_path, right_path)) self.filler_line = render_diff_line('', '', 'filler', margin_size, available_cols) self.left_filler_line = render_diff_line('', '', 'remove', margin_size, available_cols) self.right_filler_line = render_diff_line('', '', 'add', margin_size, available_cols) self.left_hdata = highlights_for_path(left_path) self.right_hdata = highlights_for_path(right_path) def left_highlights_for_line(self, line_num): if line_num < len(self.left_hdata): return self.left_hdata[line_num] return [] def right_highlights_for_line(self, line_num): if line_num < len(self.right_hdata): return self.right_hdata[line_num] return [] def render_diff_line(number, text, ltype, margin_size, available_cols): margin = margin_bg_map[ltype](place_in(number, margin_size)) content = text_bg_map[ltype](fill_in(text or '', available_cols)) return margin + content def render_diff_pair(left_line_number, left, left_is_change, right_line_number, right, right_is_change, is_first, margin_size, available_cols): ltype = 'filler' if left_line_number is None else ('remove' if left_is_change else 'context') rtype = 'filler' if right_line_number is None else ('add' if right_is_change else 'context') return ( render_diff_line(left_line_number if is_first else None, left, ltype, margin_size, available_cols) + render_diff_line(right_line_number if is_first else None, right, rtype, margin_size, available_cols) ) def hunk_title(hunk_num, hunk, margin_size, available_cols): m = hunk_margin_format(' ' * margin_size) t = '@@ -{},{} +{},{} @@ {}'.format(hunk.left_start + 1, hunk.left_count, hunk.right_start + 1, hunk.right_count, hunk.title) return m + hunk_format(place_in(t, available_cols)) def render_half_line(line_number, line, highlights, ltype, margin_size, available_cols, changed_center=None): bg_highlight = None if changed_center is not None and changed_center[0]: prefix_count, suffix_count = changed_center line_sz = len(line) if prefix_count + suffix_count < line_sz: start, stop = highlight_boundaries(ltype) seg = Segment(prefix_count, start) seg.end = line_sz - suffix_count seg.end_code = stop bg_highlight = seg if highlights or bg_highlight: lines = split_with_highlights(line, available_cols, highlights, bg_highlight) else: lines = split_to_size(line, available_cols) line_number = str(line_number + 1) for line in lines: yield render_diff_line(line_number, line, ltype, margin_size, available_cols) line_number = '' def lines_for_chunk(data, hunk_num, chunk, chunk_num): if chunk.is_context: for i in range(chunk.left_count): left_line_number = line_ref = chunk.left_start + i right_line_number = chunk.right_start + i highlights = data.left_highlights_for_line(left_line_number) if highlights: lines = split_with_highlights(data.left_lines[left_line_number], data.available_cols, highlights) else: lines = split_to_size(data.left_lines[left_line_number], data.available_cols) left_line_number = str(left_line_number + 1) right_line_number = str(right_line_number + 1) for wli, text in enumerate(lines): line = render_diff_line(left_line_number, text, 'context', data.margin_size, data.available_cols) if right_line_number == left_line_number: r = line else: r = render_diff_line(right_line_number, text, 'context', data.margin_size, data.available_cols) ref = Reference(data.left_path, LineRef(line_ref, wli)) yield Line(line + r, ref) left_line_number = right_line_number = '' else: common = min(chunk.left_count, chunk.right_count) for i in range(max(chunk.left_count, chunk.right_count)): ll, rl = [], [] if i < chunk.left_count: rln = ref_ln = chunk.left_start + i ll.extend(render_half_line( rln, data.left_lines[rln], data.left_highlights_for_line(rln), 'remove', data.margin_size, data.available_cols, None if chunk.centers is None else chunk.centers[i])) ref_path = data.left_path if i < chunk.right_count: rln = ref_ln = chunk.right_start + i rl.extend(render_half_line( rln, data.right_lines[rln], data.right_highlights_for_line(rln), 'add', data.margin_size, data.available_cols, None if chunk.centers is None else chunk.centers[i])) ref_path = data.right_path if i < common: extra = len(ll) - len(rl) if extra != 0: if extra < 0: x, fl = ll, data.left_filler_line extra = -extra else: x, fl = rl, data.right_filler_line x.extend(repeat(fl, extra)) else: if ll: x, count = rl, len(ll) else: x, count = ll, len(rl) x.extend(repeat(data.filler_line, count)) for wli, (left_line, right_line) in enumerate(zip(ll, rl)): ref = Reference(ref_path, LineRef(ref_ln, wli)) yield Line(left_line + right_line, ref, i == 0 and wli == 0) def lines_for_diff(left_path, right_path, hunks, args, columns, margin_size): available_cols = columns // 2 - margin_size data = DiffData(left_path, right_path, available_cols, margin_size) for hunk_num, hunk in enumerate(hunks): yield Line(hunk_title(hunk_num, hunk, margin_size, columns - margin_size), Reference(left_path, LineRef(hunk.left_start))) for cnum, chunk in enumerate(hunk.chunks): yield from lines_for_chunk(data, hunk_num, chunk, cnum) def all_lines(path, args, columns, margin_size, is_add=True): available_cols = columns // 2 - margin_size ltype = 'add' if is_add else 'remove' lines = lines_for_path(path) filler = render_diff_line('', '', 'filler', margin_size, available_cols) msg_written = False hdata = highlights_for_path(path) def highlights(num): return hdata[num] if num < len(hdata) else [] for line_number, line in enumerate(lines): h = render_half_line(line_number, line, highlights(line_number), ltype, margin_size, available_cols) for i, hl in enumerate(h): ref = Reference(path, LineRef(line_number, i)) empty = filler if not msg_written: msg_written = True empty = render_diff_line( '', _('This file was added') if is_add else _('This file was removed'), 'filler', margin_size, available_cols) text = (empty + hl) if is_add else (hl + empty) yield Line(text, ref, line_number == 0 and i == 0) def rename_lines(path, other_path, args, columns, margin_size): m = ' ' * margin_size for line in split_to_size(_('The file {0} was renamed to {1}').format( sanitize(path_name_map[path]), sanitize(path_name_map[other_path])), columns - margin_size): yield m + line class Image: def __init__(self, image_id, width, height, margin_size, screen_size): self.image_id = image_id self.width, self.height = width, height self.rows = int(ceil(self.height / screen_size.cell_height)) self.columns = int(ceil(self.width / screen_size.cell_width)) self.margin_size = margin_size class ImagePlacement: def __init__(self, image, row): self.image = image self.row = row def render_image(path, is_left, available_cols, margin_size, image_manager): lnum = 0 margin_fmt = removed_margin_format if is_left else added_margin_format m = margin_fmt(' ' * margin_size) fmt = removed_format if is_left else added_format def yield_split(text): nonlocal lnum for i, line in enumerate(split_to_size(text, available_cols)): yield m + fmt(place_in(line, available_cols)), Reference(path, LineRef(lnum, i)), None lnum += 1 try: image_id, width, height = image_manager.send_image(path, available_cols - margin_size, image_manager.screen_size.rows - 2) except Exception as e: yield from yield_split(_('Failed to render image, with error:')) yield from yield_split(' '.join(str(e).splitlines())) return meta = _('Dimensions: {0}x{1} pixels Size: {2}').format( width, height, human_readable(len(data_for_path(path)))) yield from yield_split(meta) bg_line = m + fmt(' ' * available_cols) img = Image(image_id, width, height, margin_size, image_manager.screen_size) for r in range(img.rows): yield bg_line, Reference(path, LineRef(lnum)), ImagePlacement(img, r) lnum += 1 def image_lines(left_path, right_path, columns, margin_size, image_manager): available_cols = columns // 2 - margin_size left_lines, right_lines = iter(()), iter(()) if left_path is not None: left_lines = render_image(left_path, True, available_cols, margin_size, image_manager) if right_path is not None: right_lines = render_image(right_path, False, available_cols, margin_size, image_manager) filler = ' ' * (available_cols + margin_size) is_change_start = True for left, right in zip_longest(left_lines, right_lines): left_placement = right_placement = None if left is None: left = filler right, ref, right_placement = right elif right is None: right = filler left, ref, left_placement = left else: right, ref, right_placement = right left, ref, left_placement = left image_data = (left_placement, right_placement) if left_placement or right_placement else None yield Line(left + right, ref, is_change_start, image_data) is_change_start = False def render_diff(collection, diff_map, args, columns, image_manager): largest_line_number = 0 for path, item_type, other_path in collection: if item_type == 'diff': patch = diff_map.get(path) if patch is not None: largest_line_number = max(largest_line_number, patch.largest_line_number) margin_size = render_diff.margin_size = max(3, len(str(largest_line_number)) + 1) last_item_num = len(collection) - 1 for i, (path, item_type, other_path) in enumerate(collection): item_ref = Reference(path) is_binary = isinstance(data_for_path(path), bytes) if not is_binary and item_type == 'diff' and isinstance(data_for_path(other_path), bytes): is_binary = True is_img = is_binary and (is_image(path) or is_image(other_path)) and images_supported() yield from yield_lines_from(title_lines(path, other_path, args, columns, margin_size), item_ref, False) if item_type == 'diff': if is_binary: if is_img: ans = image_lines(path, other_path, columns, margin_size, image_manager) else: ans = yield_lines_from(binary_lines(path, other_path, columns, margin_size), item_ref) else: ans = lines_for_diff(path, other_path, diff_map[path], args, columns, margin_size) elif item_type == 'add': if is_binary: if is_img: ans = image_lines(None, path, columns, margin_size, image_manager) else: ans = yield_lines_from(binary_lines(None, path, columns, margin_size), item_ref) else: ans = all_lines(path, args, columns, margin_size, is_add=True) elif item_type == 'removal': if is_binary: if is_img: ans = image_lines(path, None, columns, margin_size, image_manager) else: ans = yield_lines_from(binary_lines(path, None, columns, margin_size), item_ref) else: ans = all_lines(path, args, columns, margin_size, is_add=False) elif item_type == 'rename': ans = yield_lines_from(rename_lines(path, other_path, args, columns, margin_size), item_ref) else: raise ValueError('Unsupported item type: {}'.format(item_type)) yield from ans if i < last_item_num: yield Line('', item_ref) kitty-0.15.0/kittens/diff/search.py000066400000000000000000000037261356737523400172000ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import re from kitty.fast_data_types import wcswidth from ..tui.operations import styled class BadRegex(ValueError): pass class Search: def __init__(self, opts, query, is_regex, is_backward): self.matches = {} self.count = 0 self.style = styled('|', fg=opts.search_fg, bg=opts.search_bg).split('|', 1)[0] if not is_regex: query = re.escape(query) try: self.pat = re.compile(query, flags=re.UNICODE | re.IGNORECASE) except Exception: raise BadRegex('Not a valid regex: {}'.format(query)) def __call__(self, diff_lines, margin_size, cols): self.matches = {} self.count = 0 half_width = cols // 2 strip_pat = re.compile('\033[[].*?m') right_offset = half_width + 1 + margin_size find = self.pat.finditer for i, line in enumerate(diff_lines): text = strip_pat.sub('', line.text) left, right = text[margin_size:half_width + 1], text[right_offset:] matches = [] def add(which, offset): for m in find(which): before = which[:m.start()] matches.append((wcswidth(before) + offset, m.group())) self.count += 1 add(left, margin_size) add(right, right_offset) if matches: self.matches[i] = matches return bool(self.matches) def __contains__(self, i): return i in self.matches def __len__(self): return self.count def highlight_line(self, write, line_num): highlights = self.matches.get(line_num) if not highlights: return False write(self.style) for start, text in highlights: write('\r\x1b[{}C{}'.format(start, text)) write('\x1b[m') return True kitty-0.15.0/kittens/diff/speedup.c000066400000000000000000000156731356737523400171760ustar00rootroot00000000000000/* * speedup.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" static PyObject* changed_center(PyObject *self UNUSED, PyObject *args) { unsigned int prefix_count = 0, suffix_count = 0; PyObject *lp, *rp; if (!PyArg_ParseTuple(args, "UU", &lp, &rp)) return NULL; const size_t left_len = PyUnicode_GET_LENGTH(lp), right_len = PyUnicode_GET_LENGTH(rp); #define R(which, index) PyUnicode_READ(PyUnicode_KIND(which), PyUnicode_DATA(which), index) while(prefix_count < MIN(left_len, right_len)) { if (R(lp, prefix_count) != R(rp, prefix_count)) break; prefix_count++; } if (left_len && right_len && prefix_count < MIN(left_len, right_len)) { while(suffix_count < MIN(left_len - prefix_count, right_len - prefix_count)) { if(R(lp, left_len - 1 - suffix_count) != R(rp, right_len - 1 - suffix_count)) break; suffix_count++; } } #undef R return Py_BuildValue("II", prefix_count, suffix_count); } typedef struct { unsigned int start_pos, end_pos, current_pos; PyObject *start_code, *end_code; } Segment; typedef struct { Segment sg; unsigned int num, pos; } SegmentPointer; static const Segment EMPTY_SEGMENT = { .current_pos = UINT_MAX }; static inline bool convert_segment(PyObject *highlight, Segment *dest) { PyObject *val = NULL; #define I #define A(x, d, c) { \ val = PyObject_GetAttrString(highlight, #x); \ if (val == NULL) return false; \ dest->d = c(val); Py_DECREF(val); \ } A(start, start_pos, PyLong_AsUnsignedLong); A(end, end_pos, PyLong_AsUnsignedLong); dest->current_pos = dest->start_pos; A(start_code, start_code, I); A(end_code, end_code, I); if (!PyUnicode_Check(dest->start_code)) { PyErr_SetString(PyExc_TypeError, "start_code is not a string"); return false; } if (!PyUnicode_Check(dest->end_code)) { PyErr_SetString(PyExc_TypeError, "end_code is not a string"); return false; } #undef A #undef I return true; } static inline bool next_segment(SegmentPointer *s, PyObject *highlights) { if (s->pos < s->num) { if (!convert_segment(PyList_GET_ITEM(highlights, s->pos), &s->sg)) return false; s->pos++; } else s->sg.current_pos = UINT_MAX; return true; } static inline bool insert_code(PyObject *code, Py_UCS4 *buf, size_t bufsz, unsigned int *buf_pos) { unsigned int csz = PyUnicode_GET_LENGTH(code); if (*buf_pos + csz >= bufsz) return false; for (unsigned int s = 0; s < csz; s++) buf[(*buf_pos)++] = PyUnicode_READ(PyUnicode_KIND(code), PyUnicode_DATA(code), s); return true; } static inline bool add_line(Segment *bg_segment, Segment *fg_segment, Py_UCS4 *buf, size_t bufsz, unsigned int *buf_pos, PyObject *ans) { bool bg_is_active = bg_segment->current_pos == bg_segment->end_pos, fg_is_active = fg_segment->current_pos == fg_segment->end_pos; if (bg_is_active) { if(!insert_code(bg_segment->end_code, buf, bufsz, buf_pos)) return false; } if (fg_is_active) { if(!insert_code(fg_segment->end_code, buf, bufsz, buf_pos)) return false; } PyObject *wl = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, *buf_pos); if (!wl) return false; int ret = PyList_Append(ans, wl); Py_DECREF(wl); if (ret != 0) return false; *buf_pos = 0; if (bg_is_active) { if(!insert_code(bg_segment->start_code, buf, bufsz, buf_pos)) return false; } if (fg_is_active) { if(!insert_code(fg_segment->start_code, buf, bufsz, buf_pos)) return false; } return true; } static PyObject* split_with_highlights(PyObject *self UNUSED, PyObject *args) { PyObject *line, *truncate_points_py, *fg_highlights, *bg_highlight; if (!PyArg_ParseTuple(args, "UO!O!O", &line, &PyList_Type, &truncate_points_py, &PyList_Type, &fg_highlights, &bg_highlight)) return NULL; PyObject *ans = PyList_New(0); if (!ans) return NULL; static unsigned int truncate_points[256]; unsigned int num_truncate_pts = PyList_GET_SIZE(truncate_points_py), truncate_pos = 0, truncate_point; for (unsigned int i = 0; i < MIN(num_truncate_pts, arraysz(truncate_points)); i++) { truncate_points[i] = PyLong_AsUnsignedLong(PyList_GET_ITEM(truncate_points_py, i)); } SegmentPointer fg_segment = { .sg = EMPTY_SEGMENT, .num = PyList_GET_SIZE(fg_highlights)}, bg_segment = { .sg = EMPTY_SEGMENT }; if (bg_highlight != Py_None) { if (!convert_segment(bg_highlight, &bg_segment.sg)) { Py_CLEAR(ans); return NULL; }; bg_segment.num = 1; } #define CHECK_CALL(func, ...) if (!func(__VA_ARGS__)) { Py_CLEAR(ans); if (!PyErr_Occurred()) PyErr_SetString(PyExc_ValueError, "line too long"); return NULL; } CHECK_CALL(next_segment, &fg_segment, fg_highlights); #define NEXT_TRUNCATE_POINT truncate_point = (truncate_pos < num_truncate_pts) ? truncate_points[truncate_pos++] : UINT_MAX NEXT_TRUNCATE_POINT; #define INSERT_CODE(x) { CHECK_CALL(insert_code, x, buf, arraysz(buf), &buf_pos); } #define ADD_LINE CHECK_CALL(add_line, &bg_segment.sg, &fg_segment.sg, buf, arraysz(buf), &buf_pos, ans); #define ADD_CHAR(x) { \ buf[buf_pos++] = x; \ if (buf_pos >= arraysz(buf)) { Py_CLEAR(ans); PyErr_SetString(PyExc_ValueError, "line too long"); return NULL; } \ } #define CHECK_SEGMENT(sgp, is_fg) { \ if (i == sgp.sg.current_pos) { \ INSERT_CODE(sgp.sg.current_pos == sgp.sg.start_pos ? sgp.sg.start_code : sgp.sg.end_code); \ if (sgp.sg.current_pos == sgp.sg.start_pos) sgp.sg.current_pos = sgp.sg.end_pos; \ else { \ if (is_fg) { \ CHECK_CALL(next_segment, &fg_segment, fg_highlights); \ if (sgp.sg.current_pos == i) { \ INSERT_CODE(sgp.sg.start_code); \ sgp.sg.current_pos = sgp.sg.end_pos; \ } \ } else sgp.sg.current_pos = UINT_MAX; \ } \ }\ } const unsigned int line_sz = PyUnicode_GET_LENGTH(line); static Py_UCS4 buf[4096]; unsigned int i = 0, buf_pos = 0; for (; i < line_sz; i++) { if (i == truncate_point) { ADD_LINE; NEXT_TRUNCATE_POINT; } CHECK_SEGMENT(bg_segment, false); CHECK_SEGMENT(fg_segment, true) ADD_CHAR(PyUnicode_READ(PyUnicode_KIND(line), PyUnicode_DATA(line), i)); } if (buf_pos) ADD_LINE; return ans; #undef INSERT_CODE #undef CHECK_SEGMENT #undef CHECK_CALL #undef ADD_CHAR #undef ADD_LINE #undef NEXT_TRUNCATE_POINT } static PyMethodDef module_methods[] = { {"changed_center", (PyCFunction)changed_center, METH_VARARGS, ""}, {"split_with_highlights", (PyCFunction)split_with_highlights, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; static struct PyModuleDef module = { .m_base = PyModuleDef_HEAD_INIT, .m_name = "diff_speedup", /* name of module */ .m_doc = NULL, .m_size = -1, .m_methods = module_methods }; EXPORTED PyMODINIT_FUNC PyInit_diff_speedup(void) { PyObject *m; m = PyModule_Create(&module); if (m == NULL) return NULL; return m; } kitty-0.15.0/kittens/hints/000077500000000000000000000000001356737523400155665ustar00rootroot00000000000000kitty-0.15.0/kittens/hints/__init__.py000066400000000000000000000000001356737523400176650ustar00rootroot00000000000000kitty-0.15.0/kittens/hints/main.py000066400000000000000000000431741356737523400170750ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import re import string import sys from functools import lru_cache from gettext import gettext as _ from itertools import repeat from kitty.cli import parse_args from kitty.fast_data_types import set_clipboard_string from kitty.key_encoding import ESCAPE, backspace_key, enter_key from kitty.utils import screen_size_function from ..tui.handler import Handler from ..tui.loop import Loop from ..tui.operations import faint, styled URL_PREFIXES = 'http https file ftp'.split() DEFAULT_HINT_ALPHABET = string.digits + string.ascii_lowercase screen_size = screen_size_function() class Mark: __slots__ = ('index', 'start', 'end', 'text', 'groupdict') def __init__(self, index, start, end, text, groupdict): self.index, self.start, self.end = index, start, end self.text = text self.groupdict = groupdict @lru_cache(maxsize=2048) def encode_hint(num, alphabet): res = '' d = len(alphabet) while not res or num > 0: num, i = divmod(num, d) res = alphabet[i] + res return res def decode_hint(x, alphabet=DEFAULT_HINT_ALPHABET): base = len(alphabet) index_map = {c: i for i, c in enumerate(alphabet)} i = 0 for char in x: i = i * base + index_map[char] return i def highlight_mark(m, text, current_input, alphabet): hint = encode_hint(m.index, alphabet) if current_input and not hint.startswith(current_input): return faint(text) hint = hint[len(current_input):] or ' ' text = text[len(hint):] return styled( hint, fg='black', bg='green', bold=True ) + styled( text, fg='gray', fg_intense=True, bold=True ) def render(text, current_input, all_marks, ignore_mark_indices, alphabet): for mark in reversed(all_marks): if mark.index in ignore_mark_indices: continue mtext = highlight_mark(mark, text[mark.start:mark.end], current_input, alphabet) text = text[:mark.start] + mtext + text[mark.end:] text = text.replace('\0', '') return text.replace('\n', '\r\n').rstrip() class Hints(Handler): def __init__(self, text, all_marks, index_map, args): self.text, self.index_map = text, index_map self.alphabet = args.alphabet or DEFAULT_HINT_ALPHABET self.all_marks = all_marks self.ignore_mark_indices = set() self.args = args self.window_title = _('Choose URL') if args.type == 'url' else _('Choose text') self.multiple = args.multiple self.match_suffix = self.get_match_suffix(args) self.chosen = [] self.reset() @property def text_matches(self): return [m.text + self.match_suffix for m in self.chosen] @property def groupdicts(self): return [m.groupdict for m in self.chosen] def get_match_suffix(self, args): if args.add_trailing_space == 'always': return ' ' if args.add_trailing_space == 'never': return '' return ' ' if args.multiple else '' def reset(self): self.current_input = '' self.current_text = None def init_terminal_state(self): self.cmd.set_cursor_visible(False) self.cmd.set_window_title(self.window_title) self.cmd.set_line_wrapping(False) def initialize(self): self.init_terminal_state() self.draw_screen() def on_text(self, text, in_bracketed_paste): changed = False for c in text: if c in self.alphabet: self.current_input += c changed = True if changed: matches = [ m for idx, m in self.index_map.items() if encode_hint(idx, self.alphabet).startswith(self.current_input) ] if len(matches) == 1: self.chosen.append(matches[0]) if self.multiple: self.ignore_mark_indices.add(matches[0].index) self.reset() else: self.quit_loop(0) return self.current_text = None self.draw_screen() def on_key(self, key_event): if key_event is backspace_key: self.current_input = self.current_input[:-1] self.current_text = None self.draw_screen() elif key_event is enter_key and self.current_input: try: idx = decode_hint(self.current_input, self.alphabet) self.chosen.append(self.index_map[idx]) self.ignore_mark_indices.add(idx) except Exception: self.current_input = '' self.current_text = None self.draw_screen() else: if self.multiple: self.reset() self.draw_screen() else: self.quit_loop(0) elif key_event.key is ESCAPE: self.quit_loop(0 if self.multiple else 1) def on_interrupt(self): self.quit_loop(1) def on_eot(self): self.quit_loop(1) def on_resize(self, new_size): self.draw_screen() def draw_screen(self): if self.current_text is None: self.current_text = render(self.text, self.current_input, self.all_marks, self.ignore_mark_indices, self.alphabet) self.cmd.clear_screen() self.write(self.current_text) def regex_finditer(pat, minimum_match_length, text): has_named_groups = bool(pat.groupindex) for m in pat.finditer(text): s, e = m.span(0 if has_named_groups else pat.groups) while e > s + 1 and text[e-1] == '\0': e -= 1 if e - s >= minimum_match_length: yield s, e, m.groupdict() closing_bracket_map = {'(': ')', '[': ']', '{': '}', '<': '>', '*': '*', '"': '"', "'": "'"} opening_brackets = ''.join(closing_bracket_map) postprocessor_map = {} def postprocessor(func): postprocessor_map[func.__name__] = func return func @postprocessor def url(text, s, e): if s > 4 and text[s - 5:s] == 'link:': # asciidoc URLs url = text[s:e] idx = url.rfind('[') if idx > -1: e -= len(url) - idx while text[e - 1] in '.,?!' and e > 1: # remove trailing punctuation e -= 1 # truncate url at closing bracket/quote if s > 0 and e <= len(text) and text[s-1] in opening_brackets: q = closing_bracket_map[text[s-1]] idx = text.find(q, s) if idx > s: e = idx # Restructured Text URLs if e > 3 and text[e-2:e] == '`_': e -= 2 return s, e @postprocessor def brackets(text, s, e): # Remove matching brackets if s < e <= len(text): before = text[s] if before in '({[<' and text[e-1] == closing_bracket_map[before]: s += 1 e -= 1 return s, e @postprocessor def quotes(text, s, e): # Remove matching quotes if s < e <= len(text): before = text[s] if before in '\'"' and text[e-1] == before: s += 1 e -= 1 return s, e def mark(pattern, post_processors, text, args): pat = re.compile(pattern) for idx, (s, e, groupdict) in enumerate(regex_finditer(pat, args.minimum_match_length, text)): for func in post_processors: s, e = func(text, s, e) mark_text = text[s:e].replace('\n', '').replace('\0', '') yield Mark(idx, s, e, mark_text, groupdict) def run_loop(args, text, all_marks, index_map, extra_cli_args=()): loop = Loop() handler = Hints(text, all_marks, index_map, args) loop.loop(handler) if handler.chosen and loop.return_code == 0: return { 'match': handler.text_matches, 'programs': args.program, 'multiple_joiner': args.multiple_joiner, 'customize_processing': args.customize_processing, 'type': args.type, 'groupdicts': handler.groupdicts, 'extra_cli_args': extra_cli_args } raise SystemExit(loop.return_code) def escape(chars): return chars.replace('\\', '\\\\').replace('-', r'\-').replace(']', r'\]') def functions_for(args): post_processors = [] if args.type == 'url': from .url_regex import url_delimiters pattern = '(?:{})://[^{}]{{3,}}'.format( '|'.join(args.url_prefixes.split(',')), url_delimiters ) post_processors.append(url) elif args.type == 'path': pattern = r'(?:\S*/\S+)|(?:\S+[.][a-zA-Z0-9]{2,7})' post_processors.extend((brackets, quotes)) elif args.type == 'line': pattern = '(?m)^\\s*(.+)[\\s\0]*$' elif args.type == 'hash': pattern = '[0-9a-f]{7,128}' elif args.type == 'word': chars = args.word_characters if chars is None: import json chars = json.loads(os.environ['KITTY_COMMON_OPTS'])['select_by_word_characters'] pattern = r'(?u)[{}\w]{{{},}}'.format(escape(chars), args.minimum_match_length) post_processors.extend((brackets, quotes)) else: pattern = args.regex return pattern, post_processors def convert_text(text, cols): lines = [] empty_line = '\0' * cols for full_line in text.split('\n'): if full_line: if not full_line.rstrip('\r'): # empty lines lines.extend(repeat(empty_line, len(full_line))) continue for line in full_line.split('\r'): if line: lines.append(line.ljust(cols, '\0')) return '\n'.join(lines) def parse_input(text): try: cols = int(os.environ['OVERLAID_WINDOW_COLS']) except KeyError: cols = screen_size().cols return convert_text(text, cols) def load_custom_processor(customize_processing): from kitty.constants import config_dir customize_processing = os.path.expandvars(os.path.expanduser(customize_processing)) if os.path.isabs(customize_processing): custom_path = customize_processing else: custom_path = os.path.join(config_dir, customize_processing) import runpy return runpy.run_path(custom_path, run_name='__main__') def run(args, text, extra_cli_args=()): try: text = parse_input(text) pattern, post_processors = functions_for(args) if args.customize_processing: m = load_custom_processor(args.customize_processing) if 'mark' in m: all_marks = tuple(m['mark'](text, args, Mark, extra_cli_args)) else: all_marks = tuple(mark(pattern, post_processors, text, args)) else: all_marks = tuple(mark(pattern, post_processors, text, args)) if not all_marks: input(_('No {} found, press Enter to quit.').format( 'URLs' if args.type == 'url' else 'matches' )) return largest_index = all_marks[-1].index offset = max(0, args.hints_offset) for m in all_marks: m.index = largest_index - m.index + offset index_map = {m.index: m for m in all_marks} except Exception: import traceback traceback.print_exc() input('Press Enter to quit.') raise SystemExit(1) return run_loop(args, text, all_marks, index_map, extra_cli_args) # CLI {{{ OPTIONS = r''' --program type=list What program to use to open matched text. Defaults to the default open program for the operating system. Use a value of :file:`-` to paste the match into the terminal window instead. A value of :file:`@` will copy the match to the clipboard. A value of :file:`default` will run the default open program. Can be specified multiple times to run multiple programs. --type default=url choices=url,regex,path,line,hash,word The type of text to search for. --regex default=(?m)^\s*(.+)\s*$ The regular expression to use when :option:`kitty +kitten hints --type`=regex. The regular expression is in python syntax. If you specify a numbered group in the regular expression only the group will be matched. This allow you to match text ignoring a prefix/suffix, as needed. The default expression matches lines. To match text over multiple lines you should prefix the regular expression with :code:`(?ms)`, which turns on MULTILINE and DOTALL modes for the regex engine. If you specify named groups and a :option:`kitty +kitten hints --program` then the program will be passed arguments corresponding to each named group of the form key=value. --url-prefixes default={0} Comma separated list of recognized URL prefixes. --word-characters Characters to consider as part of a word. In addition, all characters marked as alphanumeric in the unicode database will be considered as word characters. Defaults to the select_by_word_characters setting from kitty.conf. --minimum-match-length default=3 type=int The minimum number of characters to consider a match. --multiple type=bool-set Select multiple matches and perform the action on all of them together at the end. In this mode, press :kbd:`Esc` to finish selecting. --multiple-joiner default=auto String to use to join multiple selections when copying to the clipboard or inserting into the terminal. The special strings: "space", "newline", "empty", "json" and "auto" are interpreted as a space character, a newline an empty joiner, a JSON serialized list and an automatic choice, based on the type of text being selected. In addition, integers are interpreted as zero-based indices into the list of selections. You can use 0 for the first selection and -1 for the last. --add-trailing-space default=auto choices=auto,always,never Add trailing space after matched text. Defaults to auto, which adds the space when used together with --multiple. --hints-offset default=1 type=int The offset (from zero) at which to start hint numbering. Note that only numbers greater than or equal to zero are respected. --alphabet The list of characters to use for hints. The default is to use numbers and lowercase English alphabets. Specify your preference as a string of characters. Note that unless you specify the hints offset as zero the first match will be highlighted with the second character you specify. --customize-processing Name of a python file in the kitty config directory which will be imported to provide custom implementations for pattern finding and performing actions on selected matches. See https://sw.kovidgoyal.net/kitty/kittens/hints.html for details. You can also specify absolute paths to load the script from elsewhere. '''.format(','.join(sorted(URL_PREFIXES))).format help_text = 'Select text from the screen using the keyboard. Defaults to searching for URLs.' usage = '' def parse_hints_args(args): return parse_args(args, OPTIONS, usage, help_text, 'kitty +kitten hints') def main(args): text = '' if sys.stdin.isatty(): if '--help' not in args and '-h' not in args: print('You must pass the text to be hinted on STDIN', file=sys.stderr) input(_('Press Enter to quit')) return else: text = sys.stdin.buffer.read().decode('utf-8') sys.stdin = open(os.ctermid()) try: args, items = parse_hints_args(args[1:]) except SystemExit as e: if e.code != 0: print(e.args[0], file=sys.stderr) input(_('Press Enter to quit')) return if items and not args.customize_processing: print('Extra command line arguments present: {}'.format(' '.join(items)), file=sys.stderr) input(_('Press Enter to quit')) return run(args, text, items) def handle_result(args, data, target_window_id, boss): if data['customize_processing']: m = load_custom_processor(data['customize_processing']) if 'handle_result' in m: return m['handle_result'](args, data, target_window_id, boss, data['extra_cli_args']) programs = data['programs'] or ('default',) matches, groupdicts = [], [] for m, g in zip(data['match'], data['groupdicts']): if m: matches.append(m), groupdicts.append(g) joiner = data['multiple_joiner'] try: is_int = int(joiner) except Exception: is_int = None text_type = data['type'] @lru_cache() def joined_text(): if is_int is not None: try: return matches[is_int] except IndexError: return matches[-1] if joiner == 'json': import json return json.dumps(matches, ensure_ascii=False, indent='\t') if joiner == 'auto': q = '\n\r' if text_type in ('line', 'url') else ' ' else: q = {'newline': '\n\r', 'space': ' '}.get(joiner, '') return q.join(matches) for program in programs: if program == '-': w = boss.window_id_map.get(target_window_id) if w is not None: w.paste(joined_text()) elif program == '@': set_clipboard_string(joined_text()) else: cwd = None w = boss.window_id_map.get(target_window_id) if w is not None: cwd = w.cwd_of_child program = None if program == 'default' else program for m, groupdict in zip(matches, groupdicts): if groupdict: m = [] for k, v in groupdict.items(): m.append('{}={}'.format(k, v or '')) boss.open_url(m, program, cwd=cwd) handle_result.type_of_input = 'screen' if __name__ == '__main__': # Run with kitty +kitten hints ans = main(sys.argv) if ans: print(ans) elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = OPTIONS sys.cli_docs['help_text'] = help_text # }}} kitty-0.15.0/kittens/hints/url_regex.py000066400000000000000000000005411356737523400201340ustar00rootroot00000000000000url_delimiters = '\x00-\x09\x0b-\x20\x7f-\xa0\xad\u0600-\u0605\u061c\u06dd\u070f\u08e2\u1680\u180e\u2000-\u200f\u2028-\u202f\u205f-\u2064\u2066-\u206f\u3000\ud800-\uf8ff\ufeff\ufff9-\ufffb\U000110bd\U000110cd\U00013430-\U00013438\U0001bca0-\U0001bca3\U0001d173-\U0001d17a\U000e0001\U000e0020-\U000e007f\U000f0000-\U000ffffd\U00100000-\U0010fffd' # noqakitty-0.15.0/kittens/icat/000077500000000000000000000000001356737523400153615ustar00rootroot00000000000000kitty-0.15.0/kittens/icat/__init__.py000066400000000000000000000000001356737523400174600ustar00rootroot00000000000000kitty-0.15.0/kittens/icat/main.py000077500000000000000000000331261356737523400166670ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import mimetypes import os import re import signal import sys import zlib from base64 import standard_b64encode from collections import namedtuple from math import ceil from tempfile import NamedTemporaryFile from kitty.cli import parse_args from kitty.constants import appname from kitty.utils import TTYIO, fit_image, screen_size_function from ..tui.images import ( ConvertFailed, NoImageMagick, OpenFailed, convert, fsenc, identify ) from ..tui.operations import clear_images_on_screen, serialize_gr_command OPTIONS = '''\ --align type=choices choices=center,left,right default=center Horizontal alignment for the displayed image. --place Choose where on the screen to display the image. The image will be scaled to fit into the specified rectangle. The syntax for specifying rectangles is <:italic:`width`>x<:italic:`height`>@<:italic:`left`>x<:italic:`top`>. All measurements are in cells (i.e. cursor positions) with the origin :italic:`(0, 0)` at the top-left corner of the screen. --scale-up type=bool-set When used in combination with :option:`--place` it will cause images that are smaller than the specified area to be scaled up to use as much of the specified area as possible. --clear type=bool-set Remove all images currently displayed on the screen. --transfer-mode type=choices choices=detect,file,stream default=detect Which mechanism to use to transfer images to the terminal. The default is to auto-detect. :italic:`file` means to use a temporary file and :italic:`stream` means to send the data via terminal escape codes. Note that if you use the :italic:`file` transfer mode and you are connecting over a remote session then image display will not work. --detect-support type=bool-set Detect support for image display in the terminal. If not supported, will exit with exit code 1, otherwise will exit with code 0 and print the supported transfer mode to stderr, which can be used with the :option:`--transfer-mode` option. --detection-timeout type=float default=10 The amount of time (in seconds) to wait for a response form the terminal, when detecting image display support. --print-window-size type=bool-set Print out the window size as :italic:`widthxheight` (in pixels) and quit. This is a convenience method to query the window size if using kitty icat from a scripting language that cannot make termios calls. --stdin type=choices choices=detect,yes,no default=detect Read image data from stdin. The default is to do it automatically, when STDIN is not a terminal, but you can turn it off or on explicitly, if needed. --silent type=bool-set Do not print out anything to stdout during operation. ''' screen_size = None def get_screen_size_function(): global screen_size if screen_size is None: screen_size = screen_size_function() return screen_size def get_screen_size(): screen_size = get_screen_size_function() return screen_size() def options_spec(): if not hasattr(options_spec, 'ans'): options_spec.ans = OPTIONS.format( appname='{}-icat'.format(appname), ) return options_spec.ans def write_gr_cmd(cmd, payload=None): sys.stdout.buffer.write(serialize_gr_command(cmd, payload)) sys.stdout.flush() def calculate_in_cell_x_offset(width, cell_width, align): if align == 'left': return 0 extra_pixels = width % cell_width if not extra_pixels: return 0 if align == 'right': return cell_width - extra_pixels return (cell_width - extra_pixels) // 2 def set_cursor(cmd, width, height, align): ss = get_screen_size() cw = int(ss.width / ss.cols) num_of_cells_needed = int(ceil(width / cw)) if num_of_cells_needed > ss.cols: w, h = fit_image(width, height, ss.width, height) ch = int(ss.height / ss.rows) num_of_rows_needed = int(ceil(height / ch)) cmd['c'], cmd['r'] = ss.cols, num_of_rows_needed else: cmd['X'] = calculate_in_cell_x_offset(width, cw, align) extra_cells = 0 if align == 'center': extra_cells = (ss.cols - num_of_cells_needed) // 2 elif align == 'right': extra_cells = (ss.cols - num_of_cells_needed) if extra_cells: sys.stdout.buffer.write(b' ' * extra_cells) def set_cursor_for_place(place, cmd, width, height, align): x = place.left + 1 ss = get_screen_size() cw = int(ss.width / ss.cols) num_of_cells_needed = int(ceil(width / cw)) cmd['X'] = calculate_in_cell_x_offset(width, cw, align) extra_cells = 0 if align == 'center': extra_cells = (place.width - num_of_cells_needed) // 2 elif align == 'right': extra_cells = place.width - num_of_cells_needed sys.stdout.buffer.write('\033[{};{}H'.format(place.top + 1, x + extra_cells).encode('ascii')) def write_chunked(cmd, data): if cmd['f'] != 100: data = zlib.compress(data) cmd['o'] = 'z' data = standard_b64encode(data) while data: chunk, data = data[:4096], data[4096:] m = 1 if data else 0 cmd['m'] = m write_gr_cmd(cmd, chunk) cmd.clear() def show(outfile, width, height, fmt, transmit_mode='t', align='center', place=None): cmd = {'a': 'T', 'f': fmt, 's': width, 'v': height} if place: set_cursor_for_place(place, cmd, width, height, align) else: set_cursor(cmd, width, height, align) if detect_support.has_files: cmd['t'] = transmit_mode write_gr_cmd(cmd, standard_b64encode(os.path.abspath(outfile).encode(fsenc))) else: with open(outfile, 'rb') as f: data = f.read() if transmit_mode == 't': os.unlink(outfile) if fmt == 100: cmd['S'] = len(data) write_chunked(cmd, data) def process(path, args, is_tempfile): m = identify(path) ss = get_screen_size() available_width = args.place.width * (ss.width / ss.cols) if args.place else ss.width available_height = args.place.height * (ss.height / ss.rows) if args.place else 10 * m.height needs_scaling = m.width > available_width or m.height > available_height needs_scaling = needs_scaling or args.scale_up file_removed = False if m.fmt == 'png' and not needs_scaling: outfile = path transmit_mode = 't' if is_tempfile else 'f' fmt = 100 width, height = m.width, m.height file_removed = transmit_mode == 't' else: fmt = 24 if m.mode == 'rgb' else 32 transmit_mode = 't' outfile, width, height = convert(path, m, available_width, available_height, args.scale_up) show(outfile, width, height, fmt, transmit_mode, align=args.align, place=args.place) if not args.place: print() # ensure cursor is on a new line return file_removed def scan(d): for dirpath, dirnames, filenames in os.walk(d): for f in filenames: mt = mimetypes.guess_type(f)[0] if mt and mt.startswith('image/'): yield os.path.join(dirpath, f), mt def detect_support(wait_for=10, silent=False): if not silent: print('Checking for graphics ({}s max. wait)...'.format(wait_for), end='\r') sys.stdout.flush() try: received = b'' responses = {} def parse_responses(): for m in re.finditer(b'\033_Gi=([1|2]);(.+?)\033\\\\', received): iid = m.group(1) if iid in (b'1', b'2'): iid = int(iid.decode('ascii')) if iid not in responses: responses[iid] = m.group(2) == b'OK' def more_needed(data): nonlocal received received += data parse_responses() return 1 not in responses or 2 not in responses with NamedTemporaryFile() as f: f.write(b'abcd'), f.flush() write_gr_cmd(dict(a='q', s=1, v=1, i=1), standard_b64encode(b'abcd')) write_gr_cmd(dict(a='q', s=1, v=1, i=2, t='f'), standard_b64encode(f.name.encode(fsenc))) with TTYIO() as io: io.recv(more_needed, timeout=float(wait_for)) finally: if not silent: sys.stdout.buffer.write(b'\033[J'), sys.stdout.flush() detect_support.has_files = bool(responses.get(2)) return responses.get(1, False) def parse_place(raw): if raw: area, pos = raw.split('@', 1) w, h = map(int, area.split('x')) l, t = map(int, pos.split('x')) return namedtuple('Place', 'width height left top')(w, h, l, t) help_text = ( 'A cat like utility to display images in the terminal.' ' You can specify multiple image files and/or directories.' ' Directories are scanned recursively for image files. If STDIN' ' is not a terminal, image data will be read from it as well.' ' You can also specify HTTP(S) or FTP URLs which will be' ' automatically downloaded and displayed.' ) usage = 'image-file-or-url-or-directory ...' def process_single_item(item, args, url_pat=None, maybe_dir=True): is_tempfile = False file_removed = False try: if isinstance(item, bytes): tf = NamedTemporaryFile(prefix='stdin-image-data-', delete=False) tf.write(item), tf.close() item = tf.name is_tempfile = True if url_pat is not None and url_pat.match(item) is not None: from urllib.request import urlretrieve with NamedTemporaryFile(prefix='url-image-data-', delete=False) as tf: try: urlretrieve(item, filename=tf.name) except Exception as e: raise SystemExit('Failed to download image at URL: {} with error: {}'.format(item, e)) item = tf.name is_tempfile = True file_removed = process(item, args, is_tempfile) elif item.lower().startswith('file://'): from urllib.parse import urlparse from urllib.request import url2pathname item = urlparse(item) if os.sep == '\\': item = item.netloc + item.path else: item = item.path item = url2pathname(item) file_removed = process(item, args, is_tempfile) else: if maybe_dir and os.path.isdir(item): for (x, mt) in scan(item): process_single_item(x, args, url_pat=None, maybe_dir=False) else: file_removed = process(item, args, is_tempfile) finally: if is_tempfile and not file_removed: os.remove(item) def main(args=sys.argv): args, items = parse_args(args[1:], options_spec, usage, help_text, '{} +kitten icat'.format(appname)) if args.print_window_size: screen_size_function.ans = None with open(os.ctermid()) as tty: ss = screen_size_function(tty)() print('{}x{}'.format(ss.width, ss.height), end='') raise SystemExit(0) if not sys.stdout.isatty(): sys.stdout = open(os.ctermid(), 'w') stdin_data = None if args.stdin == 'yes' or (not sys.stdin.isatty() and args.stdin == 'detect'): stdin_data = sys.stdin.buffer.read() if stdin_data: items.insert(0, stdin_data) sys.stdin.close() sys.stdin = open(os.ctermid(), 'r') screen_size = get_screen_size_function() signal.signal(signal.SIGWINCH, lambda signum, frame: setattr(screen_size, 'changed', True)) if screen_size().width == 0: if args.detect_support: raise SystemExit(1) raise SystemExit( 'Terminal does not support reporting screen sizes via the TIOCGWINSZ ioctl' ) try: args.place = parse_place(args.place) except Exception: raise SystemExit('Not a valid place specification: {}'.format(args.place)) if args.detect_support: if not detect_support(wait_for=args.detection_timeout, silent=True): raise SystemExit(1) print('file' if detect_support.has_files else 'stream', end='', file=sys.stderr) return if args.transfer_mode == 'detect': if not detect_support(wait_for=args.detection_timeout, silent=args.silent): raise SystemExit('This terminal emulator does not support the graphics protocol, use a terminal emulator such as kitty that does support it') else: detect_support.has_files = args.transfer_mode == 'file' errors = [] if args.clear: sys.stdout.buffer.write(clear_images_on_screen(delete_data=True)) if not items: return if not items: raise SystemExit('You must specify at least one file to cat') if args.place: if len(items) > 1 or (isinstance(items[0], str) and os.path.isdir(items[0])): raise SystemExit(f'The --place option can only be used with a single image, not {items}') sys.stdout.buffer.write(b'\0337') # save cursor url_pat = re.compile(r'(?:https?|ftp)://', flags=re.I) for item in items: try: process_single_item(item, args, url_pat) except NoImageMagick as e: raise SystemExit(str(e)) except ConvertFailed as e: raise SystemExit(str(e)) except OpenFailed as e: errors.append(e) if args.place: sys.stdout.buffer.write(b'\0338') # restore cursor if not errors: return for err in errors: print(err, file=sys.stderr) raise SystemExit(1) if __name__ == '__main__': main() elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = options_spec sys.cli_docs['help_text'] = help_text kitty-0.15.0/kittens/key_demo/000077500000000000000000000000001356737523400162355ustar00rootroot00000000000000kitty-0.15.0/kittens/key_demo/__init__.py000066400000000000000000000000001356737523400203340ustar00rootroot00000000000000kitty-0.15.0/kittens/key_demo/main.py000066400000000000000000000027451356737523400175430ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import sys from kitty.key_encoding import ( ALT, CTRL, PRESS, RELEASE, REPEAT, SHIFT, SUPER, encode_key_event ) from ..tui.handler import Handler from ..tui.loop import Loop class KeysHandler(Handler): def initialize(self): self.cmd.set_window_title('Kitty extended keyboard protocol demo') self.cmd.set_cursor_visible(False) self.print('Press any keys - Ctrl+C or Ctrl+D will terminate') def on_text(self, text, in_bracketed_paste=False): self.print('Text input: ' + text) def on_key(self, key_event): etype = { PRESS: 'PRESS', REPEAT: 'REPEAT', RELEASE: 'RELEASE' }[key_event.type] mods = [] for m, name in { SHIFT: 'Shift', ALT: 'Alt', CTRL: 'Ctrl', SUPER: 'Super'}.items(): if key_event.mods & m: mods.append(name) mods = '+'.join(mods) if mods: mods += '+' self.print('Key {}: {}{} [{}]'.format(etype, mods, key_event.key, encode_key_event(key_event))) def on_interrupt(self): self.quit_loop(0) def on_eot(self): self.quit_loop(0) def main(args): loop = Loop() handler = KeysHandler() loop.loop(handler) raise SystemExit(loop.return_code) if __name__ == '__main__': main(sys.argv) kitty-0.15.0/kittens/panel/000077500000000000000000000000001356737523400155405ustar00rootroot00000000000000kitty-0.15.0/kittens/panel/__init__.py000066400000000000000000000000001356737523400176370ustar00rootroot00000000000000kitty-0.15.0/kittens/panel/main.py000066400000000000000000000112761356737523400170450ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import shutil import subprocess import sys from kitty.cli import parse_args from kitty.constants import is_macos OPTIONS = r''' --lines type=int default=1 The number of lines shown in the panel (the height of the panel). Applies to horizontal panels. --columns type=int default=20 The number of columns shown in the panel (the width of the panel). Applies to vertical panels. --edge choices=top,bottom,left,right default=top Which edge of the screen to place the panel on. Note that some window managers (such as i3) do not support placing docked windows on the left and right edges. --config -c type=list Path to config file to use for kitty when drawing the panel. --override -o type=list Override individual kitty configuration options, can be specified multiple times. Syntax: :italic:`name=value`. For example: :option:`kitty +kitten panel -o` font_size=20 '''.format args = None help_text = 'Use a command line program to draw a GPU accelerated panel on your X11 desktop' usage = 'program-to-run' def parse_panel_args(args): return parse_args(args, OPTIONS, usage, help_text, 'kitty +kitten panel') def call_xprop(*cmd, silent=False): cmd = ['xprop'] + list(cmd) try: cp = subprocess.run(cmd, stdout=subprocess.DEVNULL if silent else None) except FileNotFoundError: raise SystemExit('You must have the xprop program installed') if cp.returncode != 0: raise SystemExit(cp.returncode) def create_strut( win_id, left=0, right=0, top=0, bottom=0, left_start_y=0, left_end_y=0, right_start_y=0, right_end_y=0, top_start_x=0, top_end_x=0, bottom_start_x=0, bottom_end_x=0 ): call_xprop( '-id', str(int(win_id)), '-format', '_NET_WM_STRUT_PARTIAL', '32cccccccccccc', '-set', '_NET_WM_STRUT_PARTIAL', '{left},{right},{top},{bottom},' '{left_start_y},{left_end_y},{right_start_y},{right_end_y},' '{top_start_x},{top_end_x},{bottom_start_x},{bottom_end_x}'.format(**locals()) ) def create_top_strut(win_id, width, height): create_strut(win_id, top=height, top_end_x=width) def create_bottom_strut(win_id, width, height): create_strut(win_id, bottom=height, bottom_end_x=width) def create_left_strut(win_id, width, height): create_strut(win_id, left=width, left_end_y=height) def create_right_strut(win_id, width, height): create_strut(win_id, right=width, right_end_y=height) def setup_x11_window(win_id): call_xprop( '-id', str(win_id), '-format', '_NET_WM_WINDOW_TYPE', '32a', '-set', '_NET_WM_WINDOW_TYPE', '_NET_WM_WINDOW_TYPE_DOCK' ) func = globals()['create_{}_strut'.format(args.edge)] func(win_id, initial_window_size_func.width, initial_window_size_func.height) def initial_window_size_func(opts, *a): from kitty.fast_data_types import glfw_primary_monitor_size, set_smallest_allowed_resize def initial_window_size(cell_width, cell_height, dpi_x, dpi_y, xscale, yscale): monitor_width, monitor_height = glfw_primary_monitor_size() if args.edge in {'top', 'bottom'}: h = initial_window_size_func.height = cell_height * args.lines + 1 initial_window_size_func.width = monitor_width set_smallest_allowed_resize(100, h) else: w = initial_window_size_func.width = cell_width * args.columns + 1 initial_window_size_func.height = monitor_height set_smallest_allowed_resize(w, 100) return initial_window_size_func.width, initial_window_size_func.height return initial_window_size def main(sys_args): global args if is_macos or not os.environ.get('DISPLAY'): raise SystemExit('Currently the panel kitten is supported only on X11 desktops') if not shutil.which('xprop'): raise SystemExit('The xprop program is required for the panel kitten') args, items = parse_panel_args(sys_args[1:]) if not items: raise SystemExit('You must specify the program to run') sys.argv = ['kitty'] if args.config: sys.argv.append('--config={}'.format(args.config)) for override in args.override: sys.argv.append('--override={}'.format(override)) sys.argv.extend(items) from kitty.main import run_app, main run_app.cached_values_name = 'panel' run_app.first_window_callback = setup_x11_window run_app.initial_window_size_func = initial_window_size_func main() if __name__ == '__main__': main(sys.argv) elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = OPTIONS sys.cli_docs['help_text'] = help_text kitty-0.15.0/kittens/resize_window/000077500000000000000000000000001356737523400173315ustar00rootroot00000000000000kitty-0.15.0/kittens/resize_window/__init__.py000066400000000000000000000000001356737523400214300ustar00rootroot00000000000000kitty-0.15.0/kittens/resize_window/main.py000066400000000000000000000105741356737523400206360ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import sys from kitty.cli import parse_args from kitty.cmds import cmap, parse_subcommand_cli from kitty.constants import version from kitty.key_encoding import CTRL, ESCAPE, RELEASE, N, S, T, W from kitty.remote_control import encode_send, parse_rc_args from ..tui.handler import Handler from ..tui.loop import Loop from ..tui.operations import styled global_opts = None class Resize(Handler): print_on_fail = None def __init__(self, opts): self.opts = opts def initialize(self): global global_opts global_opts = parse_rc_args(['kitty', '@resize-window'])[0] self.original_size = self.screen_size self.cmd.set_cursor_visible(False) self.cmd.set_line_wrapping(False) self.draw_screen() def do_window_resize(self, is_decrease=False, is_horizontal=True, reset=False, multiplier=1): resize_window = cmap['resize-window'] increment = self.opts.horizontal_increment if is_horizontal else self.opts.vertical_increment increment *= multiplier if is_decrease: increment *= -1 axis = 'reset' if reset else ('horizontal' if is_horizontal else 'vertical') cmdline = [resize_window.name, '--self', '--increment={}'.format(increment), '--axis=' + axis] opts, items = parse_subcommand_cli(resize_window, cmdline) payload = resize_window(global_opts, opts, items) send = {'cmd': resize_window.name, 'version': version, 'payload': payload, 'no_response': False} self.write(encode_send(send)) def on_kitty_cmd_response(self, response): if not response.get('ok'): err = response['error'] if response.get('tb'): err += '\n' + response['tb'] self.print_on_fail = err self.quit_loop(1) return res = response.get('data') if res: self.cmd.bell() def on_text(self, text, in_bracketed_paste=False): text = text.upper() if text in 'WNTSR': self.do_window_resize(is_decrease=text in 'NS', is_horizontal=text in 'WN', reset=text == 'R') elif text == 'Q': self.quit_loop(0) def on_key(self, key_event): if key_event.type is RELEASE: return if key_event.key is ESCAPE: self.quit_loop(0) elif key_event.key in (W, N, T, S) and key_event.mods & CTRL: self.do_window_resize(is_decrease=key_event.key in (N, S), is_horizontal=key_event.key in (W, N), multiplier=2) def on_resize(self, new_size): self.draw_screen() def draw_screen(self): self.cmd.clear_screen() print = self.print print(styled('Resize this window', bold=True, fg='gray', fg_intense=True)) print() print('Press one of the following keys:') print(' {}ider'.format(styled('W', fg='green'))) print(' {}arrower'.format(styled('N', fg='green'))) print(' {}aller'.format(styled('T', fg='green'))) print(' {}horter'.format(styled('S', fg='green'))) print(' {}eset'.format(styled('R', fg='red'))) print() print('Press {} to quit resize mode'.format(styled('Esc', italic=True))) print('Hold down {} to double step size'.format(styled('Ctrl', italic=True))) print() print(styled('Sizes', bold=True, fg='white', fg_intense=True)) print('Original: {} rows {} cols'.format(self.original_size.rows, self.original_size.cols)) print('Current: {} rows {} cols'.format( styled(self.screen_size.rows, fg='magenta'), styled(self.screen_size.cols, fg='magenta'))) OPTIONS = r''' --horizontal-increment default=2 type=int The base horizontal increment. --vertical-increment default=2 type=int The base vertical increment. '''.format def main(args): msg = 'Resize the current window' try: args, items = parse_args(args[1:], OPTIONS, '', msg, 'resize_window') except SystemExit as e: if e.code != 0: print(e.args[0], file=sys.stderr) input('Press Enter to quit') return loop = Loop() handler = Resize(args) loop.loop(handler) if handler.print_on_fail: print(handler.print_on_fail, file=sys.stderr) input('Press Enter to quit') raise SystemExit(loop.return_code) kitty-0.15.0/kittens/runner.py000066400000000000000000000113671356737523400163340ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import importlib import os import sys from contextlib import suppress from functools import partial aliases = {'url_hints': 'hints'} def resolved_kitten(k): return aliases.get(k, k).replace('-', '_') def path_to_custom_kitten(config_dir, kitten): path = os.path.expanduser(kitten) if not os.path.isabs(path): path = os.path.join(config_dir, path) path = os.path.abspath(path) return path def import_kitten_main_module(config_dir, kitten): if kitten.endswith('.py'): path_modified = False path = path_to_custom_kitten(config_dir, kitten) if os.path.dirname(path): sys.path.insert(0, os.path.dirname(path)) path_modified = True with open(path) as f: src = f.read() code = compile(src, path, 'exec') g = {'__name__': 'kitten'} exec(code, g) hr = g.get('handle_result', lambda *a, **kw: None) if path_modified: del sys.path[0] return {'start': g['main'], 'end': hr} kitten = resolved_kitten(kitten) m = importlib.import_module('kittens.{}.main'.format(kitten)) return {'start': m.main, 'end': getattr(m, 'handle_result', lambda *a, **k: None)} def create_kitten_handler(kitten, orig_args): from kitty.constants import config_dir kitten = resolved_kitten(kitten) m = import_kitten_main_module(config_dir, kitten) ans = partial(m['end'], [kitten] + orig_args) ans.type_of_input = getattr(m['end'], 'type_of_input', None) ans.no_ui = getattr(m['end'], 'no_ui', False) return ans def set_debug(kitten): from kittens.tui.loop import debug import builtins builtins.debug = debug def launch(args): config_dir, kitten = args[:2] kitten = resolved_kitten(kitten) del args[:2] args = [kitten] + args os.environ['KITTY_CONFIG_DIRECTORY'] = config_dir from kittens.tui.operations import clear_screen, reset_mode set_debug(kitten) m = import_kitten_main_module(config_dir, kitten) try: result = m['start'](args) finally: sys.stdin = sys.__stdin__ print(reset_mode('ALTERNATE_SCREEN') + clear_screen(), end='') if result is not None: import json data = json.dumps(result) print('OK:', len(data), data) sys.stderr.flush() sys.stdout.flush() def deserialize(output): import json if output.startswith('OK: '): try: prefix, sz, rest = output.split(' ', 2) return json.loads(rest[:int(sz)]) except Exception: raise ValueError('Failed to parse kitten output: {!r}'.format(output)) def run_kitten(kitten, run_name='__main__'): import runpy original_kitten_name = kitten kitten = resolved_kitten(kitten) set_debug(kitten) with suppress(ImportError): runpy.run_module('kittens.{}.main'.format(kitten), run_name=run_name) return # Look for a custom kitten if not kitten.endswith('.py'): kitten += '.py' from kitty.constants import config_dir path = path_to_custom_kitten(config_dir, kitten) if not os.path.exists(path): print('Available builtin kittens:', file=sys.stderr) for kitten in all_kitten_names(): print(kitten, file=sys.stderr) raise SystemExit('No kitten named {}'.format(original_kitten_name)) m = runpy.run_path(path, init_globals={'sys': sys, 'os': os}, run_name='__run_kitten__') m['main'](sys.argv) def all_kitten_names(): ans = getattr(all_kitten_names, 'ans', None) if ans is None: n = [] import glob base = os.path.dirname(os.path.abspath(__file__)) for x in glob.glob(os.path.join(base, '*', '__init__.py')): q = os.path.basename(os.path.dirname(x)) if q != 'tui': n.append(q) all_kitten_names.ans = ans = frozenset(n) return ans def list_kittens(): print('You must specify the name of a kitten to run') print('Choose from:') print() for kitten in all_kitten_names(): print(kitten) def get_kitten_cli_docs(kitten): sys.cli_docs = {} run_kitten(kitten, run_name='__doc__') ans = sys.cli_docs del sys.cli_docs if 'help_text' in ans and 'usage' in ans and 'options' in ans: return ans def get_kitten_conf_docs(kitten): sys.all_options = None run_kitten(kitten, run_name='__conf__') ans = sys.all_options del sys.all_options return ans def main(): try: args = sys.argv[1:] launch(args) except Exception: print('Unhandled exception running kitten:') import traceback traceback.print_exc() input('Press Enter to quit...') kitty-0.15.0/kittens/show_error/000077500000000000000000000000001356737523400166325ustar00rootroot00000000000000kitty-0.15.0/kittens/show_error/__init__.py000066400000000000000000000000001356737523400207310ustar00rootroot00000000000000kitty-0.15.0/kittens/show_error/main.py000066400000000000000000000016771356737523400201430ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import sys from contextlib import suppress from kitty.cli import parse_args from ..tui.operations import styled OPTIONS = '''\ --title default=ERROR The title for the error message. '''.format def real_main(args): msg = 'Show an error message' args, items = parse_args(args[1:], OPTIONS, '', msg, 'hints') error_message = sys.stdin.buffer.read().decode('utf-8') sys.stdin = open(os.ctermid()) print(styled(args.title, fg_intense=True, fg='red', bold=True)) print() print(error_message) print() input('Press Enter to close.') def main(args): try: with suppress(KeyboardInterrupt): real_main(args) except Exception: import traceback traceback.print_exc() input('Press Enter to close.') if __name__ == '__main__': main(sys.argv) kitty-0.15.0/kittens/ssh/000077500000000000000000000000001356737523400152365ustar00rootroot00000000000000kitty-0.15.0/kittens/ssh/__init__.py000066400000000000000000000000001356737523400173350ustar00rootroot00000000000000kitty-0.15.0/kittens/ssh/main.py000066400000000000000000000102061356737523400165330ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import re import shlex import subprocess import sys SHELL_SCRIPT = '''\ #!/bin/sh # macOS ships with an ancient version of tic that cannot read from stdin, so we # create a temp file for it tmp=$(mktemp /tmp/terminfo.XXXXXX) cat >$tmp << 'TERMEOF' TERMINFO TERMEOF tic_out=$(tic -x -o ~/.terminfo $tmp 2>&1) rc=$? rm $tmp if [ "$rc" != "0" ]; then echo "$tic_out"; exit 1; fi if [ -z "$USER" ]; then export USER=$(whoami); fi EXEC_CMD shell_name=$(basename $0) # We need to pass the first argument to the executed program with a leading - # to make sure the shell executes as a login shell. Note that not all shells # support exec -a so we use the below to try to detect such shells case "dash" in *$shell_name*) python=$(command -v python3) if [ -z "$python" ]; then python=$(command -v python2); fi if [ -z "$python" ]; then python=python; fi exec $python -c "import os; os.execlp('$0', '-' '$shell_name')" ;; esac exec -a "-$shell_name" "$0" ''' def get_ssh_cli(): other_ssh_args, boolean_ssh_args = [], [] raw = subprocess.Popen(['ssh'], stderr=subprocess.PIPE).stderr.read().decode('utf-8') for m in re.finditer(r'\[(.+?)\]', raw): q = m.group(1) if len(q) < 2 or q[0] != '-': continue if ' ' in q: other_ssh_args.append(q[1]) else: boolean_ssh_args.extend(q[1:]) return set('-' + x for x in boolean_ssh_args), set('-' + x for x in other_ssh_args) def parse_ssh_args(args): boolean_ssh_args, other_ssh_args = get_ssh_cli() passthrough_args = {'-' + x for x in 'Nnf'} ssh_args = [] server_args = [] expecting_option_val = False passthrough = False for arg in args: if len(server_args) > 1: server_args.append(arg) continue if arg.startswith('-') and not expecting_option_val: all_args = arg[1:] for i, arg in enumerate(all_args): arg = '-' + arg if arg in passthrough_args: passthrough = True if arg in boolean_ssh_args: ssh_args.append(arg) continue if arg.startswith('-p') and arg[2:].isdigit(): ssh_args.append(arg) continue if arg in other_ssh_args: if i != len(all_args) - 1: raise SystemExit('Option {} cannot occur in the middle'.format(arg)) ssh_args.append(arg) expecting_option_val = True continue raise SystemExit('Unknown option: {}'.format(arg)) continue if expecting_option_val: ssh_args.append(arg) expecting_option_val = False continue server_args.append(arg) if not server_args: raise SystemExit('Must specify server to connect to') return ssh_args, server_args, passthrough def quote(x): # we have to escape unbalanced quotes and other unparsable # args as they will break the shell script # But we do not want to quote things like * or 'echo hello' # See https://github.com/kovidgoyal/kitty/issues/1787 try: shlex.split(x) except ValueError: x = shlex.quote(x) return x def main(args): ssh_args, server_args, passthrough = parse_ssh_args(args[1:]) if passthrough: cmd = ['ssh'] + ssh_args + server_args else: terminfo = subprocess.check_output(['infocmp']).decode('utf-8') sh_script = SHELL_SCRIPT.replace('TERMINFO', terminfo, 1) if len(server_args) > 1: command_to_execute = [quote(c) for c in server_args[1:]] command_to_execute = 'exec ' + ' '.join(command_to_execute) else: command_to_execute = '' sh_script = sh_script.replace('EXEC_CMD', command_to_execute) cmd = ['ssh'] + ssh_args + ['-t', server_args[0], sh_script] + server_args[1:] os.execvp('ssh', cmd) if __name__ == '__main__': main(sys.argv) kitty-0.15.0/kittens/tui/000077500000000000000000000000001356737523400152425ustar00rootroot00000000000000kitty-0.15.0/kittens/tui/__init__.py000066400000000000000000000000001356737523400173410ustar00rootroot00000000000000kitty-0.15.0/kittens/tui/handler.py000066400000000000000000000051171356737523400172350ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from .operations import commander class Handler: image_manager_class = None def _initialize(self, screen_size, term_manager, schedule_write, tui_loop, debug, image_manager=None): self.screen_size = screen_size self._term_manager = term_manager self._tui_loop = tui_loop self._schedule_write = schedule_write self.debug = debug self.cmd = commander(self) self.image_manager = image_manager @property def asyncio_loop(self): return self._tui_loop.asycio_loop def add_shortcut(self, action, key, mods=None, is_text=False): if not hasattr(self, '_text_shortcuts'): self._text_shortcuts, self._key_shortcuts = {}, {} if is_text: self._text_shortcuts[key] = action else: self._key_shortcuts[(key, mods or 0)] = action def shortcut_action(self, key_event_or_text): if isinstance(key_event_or_text, str): return self._text_shortcuts.get(key_event_or_text) return self._key_shortcuts.get((key_event_or_text.key, key_event_or_text.mods)) def __enter__(self): if self.image_manager is not None: self.image_manager.__enter__() self.debug.fobj = self self.initialize() def __exit__(self, *a): del self.debug.fobj self.finalize() if self.image_manager is not None: self.image_manager.__exit__(*a) def initialize(self): pass def finalize(self): pass def on_resize(self, screen_size): self.screen_size = screen_size def quit_loop(self, return_code=None): self._tui_loop.quit(return_code) def on_term(self): self._tui_loop.quit(1) def on_text(self, text, in_bracketed_paste=False): pass def on_key(self, key_event): pass def on_mouse(self, mouse_event): pass def on_interrupt(self): pass def on_eot(self): pass def on_kitty_cmd_response(self, response): pass def on_clipboard_response(self, text, from_primary=False): pass def on_capability_response(self, name, val): pass def write(self, data): if isinstance(data, str): data = data.encode('utf-8') self._schedule_write(data) def print(self, *args, sep=' ', end='\r\n'): data = sep.join(map(str, args)) + end self.write(data) def suspend(self): return self._term_manager.suspend() kitty-0.15.0/kittens/tui/images.py000066400000000000000000000226211356737523400170640ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import codecs import os import sys from base64 import standard_b64encode from collections import defaultdict, deque from itertools import count from contextlib import suppress from kitty.utils import fit_image from .operations import cursor try: fsenc = sys.getfilesystemencoding() or 'utf-8' codecs.lookup(fsenc) except Exception: fsenc = 'utf-8' class ImageData: def __init__(self, fmt, width, height, mode): self.width, self.height, self.fmt, self.mode = width, height, fmt, mode self.transmit_fmt = str(24 if self.mode == 'rgb' else 32) class OpenFailed(ValueError): def __init__(self, path, message): ValueError.__init__( self, 'Failed to open image: {} with error: {}'.format(path, message) ) self.path = path class ConvertFailed(ValueError): def __init__(self, path, message): ValueError.__init__( self, 'Failed to convert image: {} with error: {}'.format(path, message) ) self.path = path class NoImageMagick(Exception): pass def run_imagemagick(path, cmd, keep_stdout=True): import subprocess try: p = subprocess.run(cmd, stdout=subprocess.PIPE if keep_stdout else subprocess.DEVNULL, stderr=subprocess.PIPE) except FileNotFoundError: raise NoImageMagick('ImageMagick is required to process images') if p.returncode != 0: raise OpenFailed(path, p.stderr.decode('utf-8')) return p def identify(path): p = run_imagemagick(path, ['identify', '-format', '%m %w %h %A', '--', path]) parts = tuple(filter(None, p.stdout.decode('utf-8').split())) mode = 'rgb' if parts[3].lower() == 'false' else 'rgba' return ImageData(parts[0].lower(), int(parts[1]), int(parts[2]), mode) def convert(path, m, available_width, available_height, scale_up, tdir=None): from tempfile import NamedTemporaryFile width, height = m.width, m.height cmd = ['convert', '-background', 'none', '--', path] scaled = False if scale_up: if width < available_width: r = available_width / width width, height = available_width, int(height * r) scaled = True if scaled or width > available_width or height > available_height: width, height = fit_image(width, height, available_width, available_height) cmd += ['-resize', '{}x{}!'.format(width, height)] with NamedTemporaryFile(prefix='icat-', suffix='.' + m.mode, delete=False, dir=tdir) as outfile: run_imagemagick(path, cmd + [outfile.name]) # ImageMagick sometimes generated rgba images smaller than the specified # size. See https://github.com/kovidgoyal/kitty/issues/276 for examples sz = os.path.getsize(outfile.name) bytes_per_pixel = 3 if m.mode == 'rgb' else 4 expected_size = bytes_per_pixel * width * height if sz < expected_size: missing = expected_size - sz if missing % (bytes_per_pixel * width) != 0: raise ConvertFailed( path, 'ImageMagick failed to convert {} correctly,' ' it generated {} < {} of data (w={}, h={}, bpp={})'.format( path, sz, expected_size, width, height, bytes_per_pixel)) height -= missing // (bytes_per_pixel * width) return outfile.name, width, height def can_display_images(): import shutil ans = getattr(can_display_images, 'ans', None) if ans is None: ans = shutil.which('convert') is not None can_display_images.ans = ans return ans class ImageManager: def __init__(self, handler): self.image_id_counter = count() self.handler = handler self.filesystem_ok = None self.image_data = {} self.failed_images = {} self.converted_images = {} self.sent_images = {} self.image_id_to_image_data = {} self.image_id_to_converted_data = {} self.transmission_status = {} self.placements_in_flight = defaultdict(deque) @property def next_image_id(self): return next(self.image_id_counter) + 2 @property def screen_size(self): return self.handler.screen_size def __enter__(self): import tempfile self.tdir = tempfile.mkdtemp(prefix='kitten-images-') with tempfile.NamedTemporaryFile(dir=self.tdir, delete=False) as f: f.write(b'abcd') self.handler.cmd.gr_command(dict(a='q', s=1, v=1, i=1, t='f'), standard_b64encode(f.name.encode(fsenc))) def __exit__(self, *a): import shutil shutil.rmtree(self.tdir, ignore_errors=True) self.handler.cmd.clear_images_on_screen(delete_data=True) self.delete_all_sent_images() del self.handler def delete_all_sent_images(self): for img_id in self.transmission_status: self.handler.cmd.gr_command({'a': 'd', 'i': img_id}) self.transmission_status.clear() def handle_response(self, apc): cdata, payload = apc[1:].partition(';')[::2] control = {} for x in cdata.split(','): k, v = x.partition('=')[::2] control[k] = v try: image_id = int(control.get('i', '0')) except Exception: image_id = 0 if image_id == 1: self.filesystem_ok = payload == 'OK' return if not image_id: return if not self.transmission_status.get(image_id): self.transmission_status[image_id] = payload else: in_flight = self.placements_in_flight[image_id] if in_flight: pl = in_flight.popleft() if payload.startswith('ENOENT:'): with suppress(Exception): self.resend_image(image_id, pl) if not in_flight: self.placements_in_flight.pop(image_id, None) def resend_image(self, image_id, pl): image_data = self.image_id_to_image_data[image_id] skey = self.image_id_to_converted_data[image_id] self.transmit_image(image_data, image_id, *skey) with cursor(self.handler.write): self.handler.cmd.set_cursor_position(pl['x'], pl['y']) self.handler.cmd.gr_command(pl['cmd']) def send_image(self, path, max_cols=None, max_rows=None, scale_up=False): path = os.path.abspath(path) if path in self.failed_images: raise self.failed_images[path] if path not in self.image_data: try: self.image_data[path] = identify(path) except Exception as e: self.failed_images[path] = e raise m = self.image_data[path] ss = self.screen_size if max_cols is None: max_cols = ss.cols if max_rows is None: max_rows = ss.rows available_width = max_cols * ss.cell_width available_height = max_rows * ss.cell_height key = path, available_width, available_height skey = self.converted_images.get(key) if skey is None: try: self.converted_images[key] = skey = self.convert_image(path, available_width, available_height, m, scale_up) except Exception as e: self.failed_images[path] = e raise final_width, final_height = skey[1:] if final_width == 0: return 0, 0, 0 image_id = self.sent_images.get(skey) if image_id is None: image_id = self.next_image_id self.transmit_image(m, image_id, *skey) self.sent_images[skey] = image_id self.image_id_to_converted_data[image_id] = skey self.image_id_to_image_data[image_id] = m return image_id, skey[1], skey[2] def hide_image(self, image_id): self.handler.cmd.gr_command({'a': 'd', 'i': image_id}) def show_image(self, image_id, x, y, src_rect=None): cmd = {'a': 'p', 'i': image_id} if src_rect is not None: cmd['x'], cmd['y'], cmd['w'], cmd['h'] = map(int, src_rect) self.placements_in_flight[image_id].append({'cmd': cmd, 'x': x, 'y': y}) with cursor(self.handler.write): self.handler.cmd.set_cursor_position(x, y) self.handler.cmd.gr_command(cmd) def convert_image(self, path, available_width, available_height, image_data, scale_up=False): rgba_path, width, height = convert(path, image_data, available_width, available_height, scale_up, tdir=self.tdir) return rgba_path, width, height def transmit_image(self, image_data, image_id, rgba_path, width, height): self.transmission_status[image_id] = 0 cmd = {'a': 't', 'f': image_data.transmit_fmt, 's': width, 'v': height, 'i': image_id} if self.filesystem_ok: cmd['t'] = 'f' self.handler.cmd.gr_command( cmd, standard_b64encode(rgba_path.encode(fsenc))) else: import zlib with open(rgba_path, 'rb') as f: data = f.read() cmd['S'] = len(data) data = zlib.compress(data) cmd['o'] = 'z' data = standard_b64encode(data) while data: chunk, data = data[:4096], data[4096:] m = 1 if data else 0 cmd['m'] = m self.handler.cmd.gr_command(cmd, chunk) cmd.clear() return image_id kitty-0.15.0/kittens/tui/line_edit.py000066400000000000000000000075221356737523400175560ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from kitty.fast_data_types import truncate_point_for_length, wcswidth from kitty.key_encoding import RELEASE, HOME, END, BACKSPACE, DELETE, LEFT, RIGHT class LineEdit: def __init__(self): self.clear() def clear(self): self.current_input = '' self.cursor_pos = 0 self.pending_bell = False def split_at_cursor(self, delta=0): pos = max(0, self.cursor_pos + delta) x = truncate_point_for_length(self.current_input, pos) if pos else 0 before, after = self.current_input[:x], self.current_input[x:] return before, after def write(self, write, prompt=''): if self.pending_bell: write('\a') self.pending_bell = False write(prompt) write(self.current_input) write('\r\x1b[{}C'.format(self.cursor_pos + wcswidth(prompt))) def add_text(self, text): if self.current_input: x = truncate_point_for_length(self.current_input, self.cursor_pos) if self.cursor_pos else 0 self.current_input = self.current_input[:x] + text + self.current_input[x:] else: self.current_input = text self.cursor_pos += wcswidth(text) def on_text(self, text, in_bracketed_paste): self.add_text(text) def backspace(self, num=1): before, after = self.split_at_cursor() nbefore = before[:-num] if nbefore != before: self.current_input = nbefore + after self.cursor_pos = wcswidth(nbefore) return True self.pending_bell = True return False def delete(self, num=1): before, after = self.split_at_cursor() nafter = after[num:] if nafter != after: self.current_input = before + nafter self.cursor_pos = wcswidth(before) return True self.pending_bell = True return False def _left(self): if not self.current_input: self.cursor_pos = 0 return if self.cursor_pos: before, after = self.split_at_cursor(-1) self.cursor_pos = wcswidth(before) def _right(self): if not self.current_input: self.cursor_pos = 0 return max_pos = wcswidth(self.current_input) if self.cursor_pos >= max_pos: self.cursor_pos = max_pos return before, after = self.split_at_cursor(1) self.cursor_pos += 1 + int(wcswidth(before) == self.cursor_pos) def _move_loop(self, func, num): before = self.cursor_pos while func() and num > 0: num -= 1 changed = self.cursor_pos != before if not changed: self.pending_bell = True return changed def left(self, num=1): return self._move_loop(self._left, num) def right(self, num=1): return self._move_loop(self._right, num) def home(self): if self.cursor_pos: self.cursor_pos = 0 return True return False def end(self): orig = self.cursor_pos self.cursor_pos = wcswidth(self.current_input) + 1 return self.cursor_pos != orig def on_key(self, key_event): if key_event.type is RELEASE: return False elif key_event.key is HOME: return self.home() elif key_event.key is END: return self.end() elif key_event.key is BACKSPACE: self.backspace() return True elif key_event.key is DELETE: self.delete() return True elif key_event.key is LEFT: self.left() return True elif key_event.key is RIGHT: self.right() return True return False kitty-0.15.0/kittens/tui/loop.py000066400000000000000000000310771356737523400165750ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import asyncio import codecs import io import os import re import selectors import signal import sys from collections import namedtuple from contextlib import contextmanager from functools import partial from kitty.constants import is_macos from kitty.fast_data_types import ( close_tty, normal_tty, open_tty, parse_input_from_terminal, raw_tty ) from kitty.key_encoding import ( ALT, CTRL, PRESS, RELEASE, REPEAT, SHIFT, C, D, backspace_key, decode_key_event, enter_key ) from kitty.utils import screen_size_function, write_all from .handler import Handler from .operations import init_state, reset_state def debug(*a, **kw): from base64 import standard_b64encode buf = io.StringIO() kw['file'] = buf print(*a, **kw) text = buf.getvalue() text = b'\x1bP@kitty-print|' + standard_b64encode(text.encode('utf-8')) + b'\x1b\\' fobj = getattr(debug, 'fobj', sys.stdout.buffer) fobj.write(text) if hasattr(fobj, 'flush'): fobj.flush() class TermManager: def __init__(self): self.extra_finalize = None def set_state_for_loop(self, set_raw=True): if set_raw: raw_tty(self.tty_fd, self.original_termios) write_all(self.tty_fd, init_state()) def reset_state_to_original(self): normal_tty(self.tty_fd, self.original_termios) if self.extra_finalize: write_all(self.tty_fd, self.extra_finalize) write_all(self.tty_fd, reset_state()) @contextmanager def suspend(self): self.reset_state_to_original() yield self self.set_state_for_loop() def __enter__(self): self.tty_fd, self.original_termios = open_tty() self.set_state_for_loop(set_raw=False) return self def __exit__(self, *a): self.reset_state_to_original() close_tty(self.tty_fd, self.original_termios) del self.tty_fd, self.original_termios LEFT, MIDDLE, RIGHT, FOURTH, FIFTH = 1, 2, 4, 8, 16 DRAG = REPEAT MouseEvent = namedtuple('MouseEvent', 'x y type buttons mods') bmap = {0: LEFT, 1: MIDDLE, 2: RIGHT} MOTION_INDICATOR = 1 << 5 EXTRA_BUTTON_INDICATOR = 1 << 6 SHIFT_INDICATOR = 1 << 2 ALT_INDICATOR = 1 << 3 CTRL_INDICATOR = 1 << 4 def decode_sgr_mouse(text): cb, x, y = text.split(';') m, y = y[-1], y[:-1] cb, x, y = map(int, (cb, x, y)) typ = RELEASE if m == 'm' else (DRAG if cb & MOTION_INDICATOR else PRESS) buttons = 0 cb3 = cb & 3 if cb3 != 3: if cb & EXTRA_BUTTON_INDICATOR: buttons |= FIFTH if cb3 & 1 else FOURTH else: buttons |= bmap[cb3] mods = 0 if cb & SHIFT_INDICATOR: mods |= SHIFT if cb & ALT_INDICATOR: mods |= ALT if cb & CTRL_INDICATOR: mods |= CTRL return MouseEvent(x, y, typ, buttons, mods) class UnhandledException(Handler): def __init__(self, tb): self.tb = tb def initialize(self): self.cmd.clear_screen() self.cmd.set_scrolling_region() self.cmd.set_cursor_visible(True) self.cmd.set_default_colors() self.write(self.tb.replace('\n', '\r\n')) self.write('\r\n') self.write('Press the Enter key to quit') def on_key(self, key_event): if key_event is enter_key: self.quit_loop(1) def on_interrupt(self): self.quit_loop(1) on_eot = on_term = on_interrupt class SignalManager: def __init__(self, loop, on_winch, on_interrupt, on_term): self.asycio_loop = loop self.on_winch, self.on_interrupt, self.on_term = on_winch, on_interrupt, on_term def __enter__(self): tuple(map(lambda x: self.asycio_loop.add_signal_handler(*x), ( (signal.SIGWINCH, self.on_winch), (signal.SIGINT, self.on_interrupt), (signal.SIGTERM, self.on_term) ))) def __exit__(self, *a): tuple(map(self.asycio_loop.remove_signal_handler, ( signal.SIGWINCH, signal.SIGINT, signal.SIGTERM))) class Loop: def __init__(self, sanitize_bracketed_paste='[\x03\x04\x0e\x0f\r\x07\x7f\x8d\x8e\x8f\x90\x9b\x9d\x9e\x9f]'): if is_macos: # On macOS PTY devices are not supported by the KqueueSelector and # the PollSelector is broken, causes 100% CPU usage self.asycio_loop = asyncio.SelectorEventLoop(selectors.SelectSelector()) asyncio.set_event_loop(self.asycio_loop) else: self.asycio_loop = asyncio.get_event_loop() self.return_code = 0 self.read_buf = '' self.decoder = codecs.getincrementaldecoder('utf-8')('ignore') try: self.iov_limit = max(os.sysconf('SC_IOV_MAX') - 1, 255) except Exception: self.iov_limit = 255 self.parse_input_from_terminal = partial(parse_input_from_terminal, self._on_text, self._on_dcs, self._on_csi, self._on_osc, self._on_pm, self._on_apc) self.ebs_pat = re.compile('([\177\r\x03\x04])') self.in_bracketed_paste = False self.sanitize_bracketed_paste = bool(sanitize_bracketed_paste) if self.sanitize_bracketed_paste: self.sanitize_ibp_pat = re.compile(sanitize_bracketed_paste) def _read_ready(self, handler, fd): try: data = os.read(fd, io.DEFAULT_BUFFER_SIZE) except BlockingIOError: return if not data: raise EOFError('The input stream is closed') data = self.decoder.decode(data) if self.read_buf: data = self.read_buf + data self.read_buf = data self.handler = handler try: self.read_buf = self.parse_input_from_terminal(self.read_buf, self.in_bracketed_paste) except Exception: self.read_buf = '' raise finally: del self.handler # terminal input callbacks {{{ def _on_text(self, text): if self.in_bracketed_paste and self.sanitize_bracketed_paste: text = self.sanitize_ibp_pat.sub('', text) for chunk in self.ebs_pat.split(text): if len(chunk) == 1: if chunk == '\r': self.handler.on_key(enter_key) elif chunk == '\177': self.handler.on_key(backspace_key) elif chunk == '\x03': self.handler.on_interrupt() elif chunk == '\x04': self.handler.on_eot() else: self.handler.on_text(chunk, self.in_bracketed_paste) elif chunk: self.handler.on_text(chunk, self.in_bracketed_paste) def _on_dcs(self, dcs): debug(dcs) if dcs.startswith('@kitty-cmd'): import json self.handler.on_kitty_cmd_response(json.loads(dcs[len('@kitty-cmd'):])) elif dcs.startswith('1+r'): from binascii import unhexlify vals = dcs[3:].split(';') for q in vals: parts = q.split('=', 1) try: name, val = parts[0], unhexlify(parts[1]).decode('utf-8', 'replace') except Exception: continue self.handler.on_capability_response(name, val) def _on_csi(self, csi): q = csi[-1] if q in 'mM': if csi.startswith('<'): # SGR mouse event try: ev = decode_sgr_mouse(csi[1:]) except Exception: pass else: self.handler.on_mouse(ev) elif q == '~': if csi == '200~': self.in_bracketed_paste = True elif csi == '201~': self.in_bracketed_paste = False def _on_pm(self, pm): pass def _on_osc(self, osc): m = re.match(r'(\d+);', osc) if m is not None: code = int(m.group(1)) rest = osc[m.end():] if code == 52: where, rest = rest.partition(';')[::2] from_primary = 'p' in where from base64 import standard_b64decode self.handler.on_clipboard_response(standard_b64decode(rest).decode('utf-8'), from_primary) def _on_apc(self, apc): if apc.startswith('K'): try: k = decode_key_event(apc) except Exception: pass else: if k.mods is CTRL and k.type is not RELEASE: if k.key is C: self.handler.on_interrupt() return if k.key is D: self.handler.on_eot() return self.handler.on_key(k) elif apc.startswith('G'): if self.handler.image_manager is not None: self.handler.image_manager.handle_response(apc) # }}} def _write_ready(self, handler, fd): if len(self.write_buf) > self.iov_limit: self.write_buf[self.iov_limit - 1] = b''.join(self.write_buf[self.iov_limit - 1:]) del self.write_buf[self.iov_limit:] sizes = tuple(map(len, self.write_buf)) try: written = os.writev(fd, self.write_buf) except BlockingIOError: return if not written: raise EOFError('The output stream is closed') if written >= sum(sizes): self.write_buf = [] self.asycio_loop.remove_writer(fd) self.waiting_for_writes = False else: consumed = 0 for i, buf in enumerate(self.write_buf): if not written: break if len(buf) <= written: written -= len(buf) consumed += 1 continue self.write_buf[i] = buf[written:] break del self.write_buf[:consumed] def quit(self, return_code=None): if return_code is not None: self.return_code = return_code self.asycio_loop.stop() def loop_impl(self, handler, term_manager, image_manager=None): self.write_buf = [] tty_fd = term_manager.tty_fd tb = None self.waiting_for_writes = True def schedule_write(data): self.write_buf.append(data) if not self.waiting_for_writes: self.asycio_loop.add_writer(tty_fd, self._write_ready, handler, tty_fd) self.waiting_for_writes = True def handle_exception(loop, context): nonlocal tb loop.stop() tb = context['message'] exc = context.get('exception') if exc is not None: import traceback tb += '\n' + ''.join(traceback.format_exception(exc.__class__, exc, exc.__traceback__)) self.asycio_loop.set_exception_handler(handle_exception) handler._initialize(self._get_screen_size(), term_manager, schedule_write, self, debug, image_manager) with handler: self.asycio_loop.add_reader( tty_fd, self._read_ready, handler, tty_fd) self.asycio_loop.add_writer( tty_fd, self._write_ready, handler, tty_fd) self.asycio_loop.run_forever() self.asycio_loop.remove_reader(tty_fd) if self.waiting_for_writes: self.asycio_loop.remove_writer(tty_fd) return tb def loop(self, handler): tb = None def _on_sigwinch(): self._get_screen_size.changed = True handler.screen_size = self._get_screen_size() handler.on_resize(handler.screen_size) signal_manager = SignalManager(self.asycio_loop, _on_sigwinch, handler.on_interrupt, handler.on_term) with TermManager() as term_manager, signal_manager: self._get_screen_size = screen_size_function(term_manager.tty_fd) image_manager = None if handler.image_manager_class is not None: image_manager = handler.image_manager_class(handler) try: tb = self.loop_impl(handler, term_manager, image_manager) except Exception: import traceback tb = traceback.format_exc() term_manager.extra_finalize = b''.join(self.write_buf).decode('utf-8') if tb is not None: self.return_code = 1 self._report_error_loop(tb, term_manager) def _report_error_loop(self, tb, term_manager): self.loop_impl(UnhandledException(tb), term_manager) kitty-0.15.0/kittens/tui/operations.py000066400000000000000000000174661356737523400200150ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import sys from contextlib import contextmanager from functools import wraps from kitty.rgb import Color, color_as_sharp, to_color S7C1T = '\033 F' SAVE_CURSOR = '\0337' RESTORE_CURSOR = '\0338' SAVE_PRIVATE_MODE_VALUES = '\033[?s' RESTORE_PRIVATE_MODE_VALUES = '\033[?r' MODES = dict( LNM=(20, ''), IRM=(4, ''), DECKM=(1, '?'), DECSCNM=(5, '?'), DECOM=(6, '?'), DECAWM=(7, '?'), DECARM=(8, '?'), DECTCEM=(25, '?'), MOUSE_BUTTON_TRACKING=(1000, '?'), MOUSE_MOTION_TRACKING=(1002, '?'), MOUSE_MOVE_TRACKING=(1003, '?'), FOCUS_TRACKING=(1004, '?'), MOUSE_UTF8_MODE=(1005, '?'), MOUSE_SGR_MODE=(1006, '?'), MOUSE_URXVT_MODE=(1015, '?'), ALTERNATE_SCREEN=(1049, '?'), BRACKETED_PASTE=(2004, '?'), EXTENDED_KEYBOARD=(2017, '?'), ) def set_mode(which, private=True) -> str: num, private = MODES[which] return '\033[{}{}h'.format(private, num) def reset_mode(which) -> str: num, private = MODES[which] return '\033[{}{}l'.format(private, num) def clear_screen() -> str: return '\033[H\033[2J' def clear_to_eol() -> str: return '\033[K' def bell() -> str: return '\a' def beep() -> str: return '\a' def set_window_title(value) -> str: return ('\033]2;' + value.replace('\033', '').replace('\x9c', '') + '\033\\') def set_line_wrapping(yes_or_no) -> str: return (set_mode if yes_or_no else reset_mode)('DECAWM') def set_cursor_visible(yes_or_no) -> str: return (set_mode if yes_or_no else reset_mode)('DECTCEM') def set_cursor_position(x, y) -> str: # (0, 0) is top left return '\033[{};{}H'.format(y + 1, x + 1) def set_cursor_shape(shape='block', blink=True) -> str: val = {'block': 1, 'underline': 3, 'bar': 5}.get(shape, 1) if not blink: val += 1 return '\033[{} q'.format(val) def set_scrolling_region(screen_size=None, top=None, bottom=None) -> str: if screen_size is None: return '\033[r' if top is None: top = 0 if bottom is None: bottom = screen_size.rows - 1 if bottom < 0: bottom = screen_size.rows - 1 + bottom else: bottom += 1 return '\033[{};{}r'.format(top + 1, bottom + 1) def scroll_screen(amt=1) -> str: return '\033[' + str(abs(amt)) + ('T' if amt < 0 else 'S') STANDARD_COLORS = {name: i for i, name in enumerate( 'black red green yellow blue magenta cyan gray'.split())} STANDARD_COLORS['white'] = STANDARD_COLORS['gray'] UNDERLINE_STYLES = {name: i + 1 for i, name in enumerate( 'straight double curly'.split())} def color_code(color, intense=False, base=30): if isinstance(color, str): e = str((base + 60 if intense else base) + STANDARD_COLORS[color]) elif isinstance(color, int): e = '{}:5:{}'.format(base + 8, max(0, min(color, 255))) else: e = '{}:2:{}:{}:{}'.format(base + 8, *color) return e def sgr(*parts) -> str: return '\033[{}m'.format(';'.join(parts)) def colored(text, color, intense=False, reset_to=None, reset_to_intense=False) -> str: e = color_code(color, intense) return '\033[{}m{}\033[{}m'.format(e, text, 39 if reset_to is None else color_code(reset_to, reset_to_intense)) def faint(text) -> str: return colored(text, 'black', True) def styled(text, fg=None, bg=None, fg_intense=False, bg_intense=False, italic=None, bold=None, underline=None, underline_color=None, reverse=None) -> str: start, end = [], [] if fg is not None: start.append(color_code(fg, fg_intense)) end.append('39') if bg is not None: start.append(color_code(bg, bg_intense, 40)) end.append('49') if underline_color is not None: if isinstance(underline_color, str): underline_color = STANDARD_COLORS[underline_color] start.append(color_code(underline_color, base=50)) end.append('59') if underline is not None: start.append('4:{}'.format(UNDERLINE_STYLES[underline])) end.append('4:0') if italic is not None: s, e = (start, end) if italic else (end, start) s.append('3'), e.append('23') if bold is not None: s, e = (start, end) if bold else (end, start) s.append('1'), e.append('22') if reverse is not None: s, e = (start, end) if reverse else (end, start) s.append('7'), e.append('27') if not start: return text return '\033[{}m{}\033[{}m'.format(';'.join(start), text, ';'.join(end)) def serialize_gr_command(cmd, payload=None): cmd = ','.join('{}={}'.format(k, v) for k, v in cmd.items()) ans = [] w = ans.append w(b'\033_G'), w(cmd.encode('ascii')) if payload: w(b';') w(payload) w(b'\033\\') return b''.join(ans) def gr_command(cmd, payload=None) -> str: return serialize_gr_command(cmd, payload) def clear_images_on_screen(delete_data=False) -> str: return serialize_gr_command({'a': 'd', 'd': 'A' if delete_data else 'a'}) def init_state(alternate_screen=True): ans = ( S7C1T + SAVE_CURSOR + SAVE_PRIVATE_MODE_VALUES + reset_mode('LNM') + reset_mode('IRM') + reset_mode('DECKM') + reset_mode('DECSCNM') + set_mode('DECARM') + reset_mode('DECOM') + set_mode('DECAWM') + set_mode('DECTCEM') + reset_mode('MOUSE_BUTTON_TRACKING') + reset_mode('MOUSE_MOTION_TRACKING') + reset_mode('MOUSE_MOVE_TRACKING') + reset_mode('FOCUS_TRACKING') + reset_mode('MOUSE_UTF8_MODE') + reset_mode('MOUSE_SGR_MODE') + reset_mode('MOUSE_UTF8_MODE') + set_mode('BRACKETED_PASTE') + set_mode('EXTENDED_KEYBOARD') + '\033]30001\033\\' + '\033[*x' # reset DECSACE to default region select ) if alternate_screen: ans += set_mode('ALTERNATE_SCREEN') ans += clear_screen() return ans def reset_state(normal_screen=True): ans = '' if normal_screen: ans += reset_mode('ALTERNATE_SCREEN') ans += RESTORE_PRIVATE_MODE_VALUES ans += RESTORE_CURSOR ans += '\033]30101\033\\' return ans @contextmanager def cursor(write): write(SAVE_CURSOR) yield write(RESTORE_CURSOR) @contextmanager def alternate_screen(f=None): f = f or sys.stdout print(set_mode('ALTERNATE_SCREEN'), end='', file=f) yield print(reset_mode('ALTERNATE_SCREEN'), end='', file=f) def set_default_colors(fg=None, bg=None, cursor=None, select_bg=None, select_fg=None) -> str: ans = '' def item(which, num): nonlocal ans if which is None: ans += '\x1b]1{}\x1b\\'.format(num) else: ans += '\x1b]{};{}\x1b\\'.format(num, color_as_sharp(which if isinstance(which, Color) else to_color(which))) item(fg, 10) item(bg, 11) item(cursor, 12) item(select_bg, 17) item(select_fg, 19) return ans def write_to_clipboard(data, use_primary=False) -> str: if isinstance(data, str): data = data.encode('utf-8') from base64 import standard_b64encode fmt = 'p' if use_primary else 'c' def esc(chunk): return '\x1b]52;{};{}\x07'.format(fmt, chunk) ans = esc('!') # clear clipboard buffer for chunk in (data[i:i+512] for i in range(0, len(data), 512)): chunk = standard_b64encode(chunk).decode('ascii') ans += esc(chunk) return ans def request_from_clipboard(use_primary=False) -> str: return '\x1b]52;{};?\x07'.format('p' if use_primary else 'c') all_cmds = tuple( (name, obj) for name, obj in globals().items() if hasattr(obj, '__annotations__') and obj.__annotations__.get('return') is str) def writer(handler, func): @wraps(func) def f(self, *a, **kw): handler.write(func(*a, **kw)) return f def commander(handler): ans = {name: writer(handler, obj) for name, obj in all_cmds} return type('CMD', (), ans)() kitty-0.15.0/kittens/unicode_input/000077500000000000000000000000001356737523400173065ustar00rootroot00000000000000kitty-0.15.0/kittens/unicode_input/__init__.py000066400000000000000000000000001356737523400214050ustar00rootroot00000000000000kitty-0.15.0/kittens/unicode_input/main.py000066400000000000000000000455551356737523400206220ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import string import subprocess import sys from contextlib import suppress from functools import lru_cache from gettext import gettext as _ from kitty.cli import parse_args from kitty.config import cached_values_for from kitty.constants import config_dir from kitty.fast_data_types import wcswidth, is_emoji_presentation_base from kitty.key_encoding import ( DOWN, ESCAPE, F1, F2, F3, F4, F12, LEFT, RELEASE, RIGHT, SHIFT, TAB, UP, enter_key ) from kitty.utils import get_editor from ..tui.handler import Handler from ..tui.line_edit import LineEdit from ..tui.loop import Loop from ..tui.operations import ( clear_screen, colored, cursor, faint, set_line_wrapping, set_window_title, sgr, styled ) HEX, NAME, EMOTICONS, FAVORITES = 'HEX', 'NAME', 'EMOTICONS', 'FAVORITES' favorites_path = os.path.join(config_dir, 'unicode-input-favorites.conf') INDEX_CHAR = '.' DEFAULT_SET = tuple(map( ord, '‘’“â€â€¹â€ºÂ«Â»â€šâ€ž' '😀😛😇😈😉ðŸ˜ðŸ˜ŽðŸ˜®ðŸ‘👎' '—–§¶†‡©®™' '→⇒•·°±−×÷¼½½¾' '…µ¢£€¿¡¨´¸ˆ˜' 'ÀÃÂÃÄÅÆÇÈÉÊË' 'ÃŒÃÃŽÃÃÑÒÓÔÕÖØ' 'ŒŠÙÚÛÜßÞßàá' 'âãäåæçèéêëìí' 'îïðñòóôõöøœš' 'ùúûüýÿþªºαΩ∞' )) EMOTICONS_SET = tuple(range(0x1f600, 0x1f64f + 1)) def codepoint_ok(code): return not (code <= 32 or code == 127 or 128 <= code <= 159 or 0xd800 <= code <= 0xdbff or 0xDC00 <= code <= 0xDFFF) @lru_cache(maxsize=256) def points_for_word(w): from .unicode_names import codepoints_for_word return codepoints_for_word(w.lower()) @lru_cache(maxsize=4096) def name(cp): from .unicode_names import name_for_codepoint if isinstance(cp, str): cp = ord(cp[0]) return (name_for_codepoint(cp) or '').capitalize() @lru_cache(maxsize=256) def codepoints_matching_search(parts): ans = [] if parts and parts[0] and len(parts[0]) > 1: codepoints = points_for_word(parts[0]) for word in parts[1:]: pts = points_for_word(word) if pts: intersection = codepoints & pts if intersection: codepoints = intersection continue codepoints = {c for c in codepoints if word in name(c).lower()} if codepoints: ans = list(sorted(codepoints)) return ans def parse_favorites(raw): for line in raw.splitlines(): line = line.strip() if line.startswith('#') or not line: continue idx = line.find('#') if idx > -1: line = line[:idx] code_text = line.partition(' ')[0] try: code = int(code_text, 16) except Exception: pass else: if codepoint_ok(code): yield code def serialize_favorites(favorites): ans = '''\ # Favorite characters for unicode input # Enter the hex code for each favorite character on a new line. Blank lines are # ignored and anything after a # is considered a comment. '''.splitlines() for cp in favorites: ans.append('{:x} # {} {}'.format(cp, chr(cp), name(cp))) return '\n'.join(ans) def load_favorites(refresh=False): ans = getattr(load_favorites, 'ans', None) if ans is None or refresh: try: with open(favorites_path, 'rb') as f: raw = f.read().decode('utf-8') ans = load_favorites.ans = list(parse_favorites(raw)) or list(DEFAULT_SET) except FileNotFoundError: ans = load_favorites.ans = list(DEFAULT_SET) return ans def encode_hint(num, digits=string.digits + string.ascii_lowercase): res = '' d = len(digits) while not res or num > 0: num, i = divmod(num, d) res = digits[i] + res return res def decode_hint(x): return int(x, 36) class Table: def __init__(self, emoji_variation): self.emoji_variation = emoji_variation self.layout_dirty = True self.last_rows = self.last_cols = -1 self.codepoints = [] self.current_idx = 0 self.text = '' self.num_cols = 0 self.mode = HEX @property def current_codepoint(self): if self.codepoints: return self.codepoints[self.current_idx] def set_codepoints(self, codepoints, mode=HEX): self.codepoints = codepoints self.mode = mode self.layout_dirty = True self.current_idx = 0 def codepoint_at_hint(self, hint): return self.codepoints[decode_hint(hint)] def layout(self, rows, cols): if not self.layout_dirty and self.last_cols == cols and self.last_rows == rows: return self.text self.last_cols, self.last_rows = cols, rows self.layout_dirty = False def safe_chr(codepoint): ans = chr(codepoint).encode('utf-8', 'replace').decode('utf-8') if self.emoji_variation and is_emoji_presentation_base(codepoint): ans += self.emoji_variation return ans if self.mode is NAME: def as_parts(i, codepoint): return encode_hint(i).ljust(idx_size), safe_chr(codepoint), name(codepoint) def cell(i, idx, c, desc): is_current = i == self.current_idx text = colored(idx, 'green') + ' ' + sgr('49') + c + ' ' w = wcswidth(c) if w < 2: text += ' ' * (2 - w) if len(desc) > space_for_desc: text += desc[:space_for_desc - 1] + '…' else: text += desc extra = space_for_desc - len(desc) if extra > 0: text += ' ' * extra yield styled(text, reverse=True if is_current else None) else: def as_parts(i, codepoint): return encode_hint(i).ljust(idx_size), safe_chr(codepoint), '' def cell(i, idx, c, desc): yield colored(idx, 'green') + ' ' yield colored(c, 'gray', True) w = wcswidth(c) if w < 2: yield ' ' * (2 - w) num = len(self.codepoints) if num < 1: self.text = '' self.num_cols = 0 return self.text idx_size = len(encode_hint(num - 1)) parts = [as_parts(i, c) for i, c in enumerate(self.codepoints)] if self.mode is NAME: sizes = [idx_size + 2 + len(p[2]) + 2 for p in parts] else: sizes = [idx_size + 3] longest = max(sizes) if sizes else 0 col_width = longest + 2 col_width = min(col_width, 40) space_for_desc = col_width - 2 - idx_size - 4 num_cols = self.num_cols = max(cols // col_width, 1) buf = [] a = buf.append rows_left = rows for i, (idx, c, desc) in enumerate(parts): if i > 0 and i % num_cols == 0: rows_left -= 1 if rows_left == 0: break buf.append('\r\n') buf.extend(cell(i, idx, c, desc)) a(' ') self.text = ''.join(buf) return self.text def move_current(self, rows=0, cols=0): if len(self.codepoints) == 0: return if cols: self.current_idx = (self.current_idx + len(self.codepoints) + cols) % len(self.codepoints) self.layout_dirty = True if rows: amt = rows * self.num_cols self.current_idx += amt self.current_idx = max(0, min(self.current_idx, len(self.codepoints) - 1)) self.layout_dirty = True def is_index(w): with suppress(Exception): int(w.lstrip(INDEX_CHAR), 16) return True return False class UnicodeInput(Handler): def __init__(self, cached_values, emoji_variation='none'): self.cached_values = cached_values self.emoji_variation = '' if emoji_variation == 'text': self.emoji_variation = '\ufe0e' elif emoji_variation == 'graphic': self.emoji_variation = '\ufe0f' self.line_edit = LineEdit() self.recent = list(self.cached_values.get('recent', DEFAULT_SET)) self.current_char = None self.prompt_template = '{}> ' self.last_updated_code_point_at = None self.choice_line = '' self.mode = globals().get(cached_values.get('mode', 'HEX'), 'HEX') self.table = Table(self.emoji_variation) self.update_prompt() @property def resolved_current_char(self): ans = self.current_char if ans: if self.emoji_variation and is_emoji_presentation_base(ord(ans[0])): ans += self.emoji_variation return ans def update_codepoints(self): codepoints = None if self.mode is HEX: q = self.mode, None codepoints = self.recent elif self.mode is EMOTICONS: q = self.mode, None codepoints = list(EMOTICONS_SET) elif self.mode is FAVORITES: codepoints = load_favorites() q = self.mode, tuple(codepoints) elif self.mode is NAME: q = self.mode, self.line_edit.current_input if q != self.last_updated_code_point_at: words = self.line_edit.current_input.split() words = [w for w in words if w != INDEX_CHAR] index_words = [i for i, w in enumerate(words) if i > 0 and is_index(w)] if index_words: index_word = words[index_words[0]] words = words[:index_words[0]] codepoints = codepoints_matching_search(tuple(words)) if index_words: index_word = int(index_word.lstrip(INDEX_CHAR), 16) if index_word < len(codepoints): codepoints = [codepoints[index_word]] if q != self.last_updated_code_point_at: self.last_updated_code_point_at = q self.table.set_codepoints(codepoints, self.mode) def update_current_char(self): self.update_codepoints() self.current_char = None if self.mode is HEX: with suppress(Exception): if self.line_edit.current_input.startswith(INDEX_CHAR): if len(self.line_edit.current_input) > 1: self.current_char = chr(self.table.codepoint_at_hint(self.line_edit.current_input[1:])) elif self.line_edit.current_input: code = int(self.line_edit.current_input, 16) self.current_char = chr(code) elif self.mode is NAME: cc = self.table.current_codepoint if cc: self.current_char = chr(cc) else: with suppress(Exception): if self.line_edit.current_input: self.current_char = chr(self.table.codepoint_at_hint(self.line_edit.current_input.lstrip(INDEX_CHAR))) if self.current_char is not None: code = ord(self.current_char) if not codepoint_ok(code): self.current_char = None def update_prompt(self): self.update_current_char() if self.current_char is None: c, color = '??', 'red' self.choice_line = '' else: c, color = self.current_char, 'green' if self.emoji_variation and is_emoji_presentation_base(ord(c[0])): c += self.emoji_variation self.choice_line = _('Chosen:') + ' {} U+{} {}'.format( colored(c, 'green'), hex(ord(c[0]))[2:], faint(styled(name(c) or '', italic=True))) self.prompt = self.prompt_template.format(colored(c, color)) def init_terminal_state(self): self.write(set_line_wrapping(False)) self.write(set_window_title(_('Unicode input'))) def initialize(self): self.init_terminal_state() self.draw_screen() def draw_title_bar(self): entries = [] for name, key, mode in [ (_('Code'), 'F1', HEX), (_('Name'), 'F2', NAME), (_('Emoji'), 'F3', EMOTICONS), (_('Favorites'), 'F4', FAVORITES), ]: entry = ' {} ({}) '.format(name, key) if mode is self.mode: entry = styled(entry, reverse=False, bold=True) entries.append(entry) text = _('Search by:{}').format(' '.join(entries)) extra = self.screen_size.cols - wcswidth(text) if extra > 0: text += ' ' * extra self.print(styled(text, reverse=True)) def draw_screen(self): self.write(clear_screen()) self.draw_title_bar() y = 1 def writeln(text=''): nonlocal y self.print(text) y += 1 if self.mode is NAME: writeln(_('Enter words from the name of the character')) elif self.mode is HEX: writeln(_('Enter the hex code for the character')) else: writeln(_('Enter the index for the character you want from the list below')) self.line_edit.write(self.write, self.prompt) with cursor(self.write): writeln() writeln(self.choice_line) if self.mode is HEX: writeln(faint(_('Type {} followed by the index for the recent entries below').format(INDEX_CHAR))) elif self.mode is NAME: writeln(faint(_('Use Tab or the arrow keys to choose a character from below'))) elif self.mode is FAVORITES: writeln(faint(_('Press F12 to edit the list of favorites'))) self.table_at = y self.write(self.table.layout(self.screen_size.rows - self.table_at, self.screen_size.cols)) def refresh(self): self.update_prompt() self.draw_screen() def on_text(self, text, in_bracketed_paste): self.line_edit.on_text(text, in_bracketed_paste) self.refresh() def on_key(self, key_event): if self.mode is HEX and key_event.type is not RELEASE and not key_event.mods: try: val = int(self.line_edit.current_input, 16) except Exception: pass else: if key_event.key is TAB: self.line_edit.current_input = hex(val + 0x10)[2:] self.refresh() return if key_event.key is UP: self.line_edit.current_input = hex(val + 1)[2:] self.refresh() return if key_event.key is DOWN: self.line_edit.current_input = hex(val - 1)[2:] self.refresh() return if self.mode is NAME and key_event.type is not RELEASE and not key_event.mods: if key_event.key is TAB: if key_event.mods == SHIFT: self.table.move_current(cols=-1), self.refresh() elif not key_event.mods: self.table.move_current(cols=1), self.refresh() return elif key_event.key is LEFT and not key_event.mods: self.table.move_current(cols=-1), self.refresh() return elif key_event.key is RIGHT and not key_event.mods: self.table.move_current(cols=1), self.refresh() return elif key_event.key is UP and not key_event.mods: self.table.move_current(rows=-1), self.refresh() return elif key_event.key is DOWN and not key_event.mods: self.table.move_current(rows=1), self.refresh() return if self.line_edit.on_key(key_event): self.refresh() return if key_event is enter_key: self.quit_loop(0) elif key_event.type is RELEASE and not key_event.mods: if key_event.key is ESCAPE: self.quit_loop(1) elif key_event.key is F1: self.switch_mode(HEX) elif key_event.key is F2: self.switch_mode(NAME) elif key_event.key is F3: self.switch_mode(EMOTICONS) elif key_event.key is F4: self.switch_mode(FAVORITES) elif key_event.key is F12 and self.mode is FAVORITES: self.edit_favorites() def edit_favorites(self): if not os.path.exists(favorites_path): with open(favorites_path, 'wb') as f: f.write(serialize_favorites(load_favorites()).encode('utf-8')) with self.suspend(): p = subprocess.Popen(get_editor() + [favorites_path]) if p.wait() == 0: load_favorites(refresh=True) self.init_terminal_state() self.refresh() def switch_mode(self, mode): if mode is not self.mode: self.mode = mode self.cached_values['mode'] = mode self.line_edit.clear() self.current_char = None self.choice_line = '' self.refresh() def on_interrupt(self): self.quit_loop(1) def on_eot(self): self.quit_loop(1) def on_resize(self, new_size): self.refresh() help_text = 'Input a unicode character' usage = '' OPTIONS = ''' --emoji-variation type=choices default=none choices=none,graphic,text Whether to use the textual or the graphical form for emoji. By default the default form specified in the unicode standard for the symbol is used. '''.format def parse_unicode_input_args(args): return parse_args(args, OPTIONS, usage, help_text, 'kitty +kitten unicode_input') def main(args): try: args, items = parse_unicode_input_args(args[1:]) except SystemExit as e: if e.code != 0: print(e.args[0], file=sys.stderr) input(_('Press Enter to quit')) return loop = Loop() with cached_values_for('unicode-input') as cached_values: handler = UnicodeInput(cached_values, args.emoji_variation) loop.loop(handler) if handler.current_char and loop.return_code == 0: with suppress(Exception): handler.recent.remove(ord(handler.current_char)) recent = [ord(handler.current_char)] + handler.recent cached_values['recent'] = recent[:len(DEFAULT_SET)] return handler.resolved_current_char if loop.return_code != 0: raise SystemExit(loop.return_code) def handle_result(args, current_char, target_window_id, boss): w = boss.window_id_map.get(target_window_id) if w is not None: w.paste(current_char) if __name__ == '__main__': ans = main(sys.argv) if ans: print(ans) elif __name__ == '__doc__': sys.cli_docs['usage'] = usage sys.cli_docs['options'] = OPTIONS sys.cli_docs['help_text'] = help_text kitty-0.15.0/kittens/unicode_input/names.h000066400000000000000000215325471356737523400206050ustar00rootroot00000000000000// unicode data, built from the unicode standard on: 2019-10-01 // see gen-wcwidth.py #pragma once #include "data-types.h" START_ALLOW_CASE_RANGE static const char* name_map[32837] = { // {{{ "NULL", "START OF HEADING", "START OF TEXT", "END OF TEXT", "END OF TRANSMISSION", "ENQUIRY", "ACKNOWLEDGE", "BELL", "BACKSPACE", "CHARACTER TABULATION", "LINE FEED (LF)", "LINE TABULATION", "FORM FEED (FF)", "CARRIAGE RETURN (CR)", "SHIFT OUT", "SHIFT IN", "DATA LINK ESCAPE", "DEVICE CONTROL ONE", "DEVICE CONTROL TWO", "DEVICE CONTROL THREE", "DEVICE CONTROL FOUR", "NEGATIVE ACKNOWLEDGE", "SYNCHRONOUS IDLE", "END OF TRANSMISSION BLOCK", "CANCEL", "END OF MEDIUM", "SUBSTITUTE", "ESCAPE", "INFORMATION SEPARATOR FOUR", "INFORMATION SEPARATOR THREE", "INFORMATION SEPARATOR TWO", "INFORMATION SEPARATOR ONE", "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", "NUMBER SIGN", "DOLLAR SIGN", "PERCENT SIGN", "AMPERSAND", "APOSTROPHE", "LEFT PARENTHESIS", "RIGHT PARENTHESIS", "ASTERISK", "PLUS SIGN", "COMMA", "HYPHEN-MINUS", "FULL STOP", "SOLIDUS", "DIGIT ZERO", "DIGIT ONE", "DIGIT TWO", "DIGIT THREE", "DIGIT FOUR", "DIGIT FIVE", "DIGIT SIX", "DIGIT SEVEN", "DIGIT EIGHT", "DIGIT NINE", "COLON", "SEMICOLON", "LESS-THAN SIGN", "EQUALS SIGN", "GREATER-THAN SIGN", "QUESTION MARK", "COMMERCIAL AT", "LATIN CAPITAL LETTER A", "LATIN CAPITAL LETTER B", "LATIN CAPITAL LETTER C", "LATIN CAPITAL LETTER D", "LATIN CAPITAL LETTER E", "LATIN CAPITAL LETTER F", "LATIN CAPITAL LETTER G", "LATIN CAPITAL LETTER H", "LATIN CAPITAL LETTER I", "LATIN CAPITAL LETTER J", "LATIN CAPITAL LETTER K", "LATIN CAPITAL LETTER L", "LATIN CAPITAL LETTER M", "LATIN CAPITAL LETTER N", "LATIN CAPITAL LETTER O", "LATIN CAPITAL LETTER P", "LATIN CAPITAL LETTER Q", "LATIN CAPITAL LETTER R", "LATIN CAPITAL LETTER S", "LATIN CAPITAL LETTER T", "LATIN CAPITAL LETTER U", "LATIN CAPITAL LETTER V", "LATIN CAPITAL LETTER W", "LATIN CAPITAL LETTER X", "LATIN CAPITAL LETTER Y", "LATIN CAPITAL LETTER Z", "LEFT SQUARE BRACKET", "REVERSE SOLIDUS", "RIGHT SQUARE BRACKET", "CIRCUMFLEX ACCENT", "LOW LINE", "GRAVE ACCENT", "LATIN SMALL LETTER A", "LATIN SMALL LETTER B", "LATIN SMALL LETTER C", "LATIN SMALL LETTER D", "LATIN SMALL LETTER E", "LATIN SMALL LETTER F", "LATIN SMALL LETTER G", "LATIN SMALL LETTER H", "LATIN SMALL LETTER I", "LATIN SMALL LETTER J", "LATIN SMALL LETTER K", "LATIN SMALL LETTER L", "LATIN SMALL LETTER M", "LATIN SMALL LETTER N", "LATIN SMALL LETTER O", "LATIN SMALL LETTER P", "LATIN SMALL LETTER Q", "LATIN SMALL LETTER R", "LATIN SMALL LETTER S", "LATIN SMALL LETTER T", "LATIN SMALL LETTER U", "LATIN SMALL LETTER V", "LATIN SMALL LETTER W", "LATIN SMALL LETTER X", "LATIN SMALL LETTER Y", "LATIN SMALL LETTER Z", "LEFT CURLY BRACKET", "VERTICAL LINE", "RIGHT CURLY BRACKET", "TILDE", "DELETE", "BREAK PERMITTED HERE", "NO BREAK HERE", "NEXT LINE (NEL)", "START OF SELECTED AREA", "END OF SELECTED AREA", "CHARACTER TABULATION SET", "CHARACTER TABULATION WITH JUSTIFICATION", "LINE TABULATION SET", "PARTIAL LINE FORWARD", "PARTIAL LINE BACKWARD", "REVERSE LINE FEED", "SINGLE SHIFT TWO", "SINGLE SHIFT THREE", "DEVICE CONTROL STRING", "PRIVATE USE ONE", "PRIVATE USE TWO", "SET TRANSMIT STATE", "CANCEL CHARACTER", "MESSAGE WAITING", "START OF GUARDED AREA", "END OF GUARDED AREA", "START OF STRING", "SINGLE CHARACTER INTRODUCER", "CONTROL SEQUENCE INTRODUCER", "STRING TERMINATOR", "OPERATING SYSTEM COMMAND", "PRIVACY MESSAGE", "APPLICATION PROGRAM COMMAND", "NO-BREAK SPACE", "INVERTED EXCLAMATION MARK", "CENT SIGN", "POUND SIGN", "CURRENCY SIGN", "YEN SIGN", "BROKEN BAR", "SECTION SIGN", "DIAERESIS", "COPYRIGHT SIGN", "FEMININE ORDINAL INDICATOR", "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", "NOT SIGN", "SOFT HYPHEN", "REGISTERED SIGN", "MACRON", "DEGREE SIGN", "PLUS-MINUS SIGN", "SUPERSCRIPT TWO", "SUPERSCRIPT THREE", "ACUTE ACCENT", "MICRO SIGN", "PILCROW SIGN", "MIDDLE DOT", "CEDILLA", "SUPERSCRIPT ONE", "MASCULINE ORDINAL INDICATOR", "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", "VULGAR FRACTION ONE QUARTER", "VULGAR FRACTION ONE HALF", "VULGAR FRACTION THREE QUARTERS", "INVERTED QUESTION MARK", "LATIN CAPITAL LETTER A WITH GRAVE", "LATIN CAPITAL LETTER A WITH ACUTE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX", "LATIN CAPITAL LETTER A WITH TILDE", "LATIN CAPITAL LETTER A WITH DIAERESIS", "LATIN CAPITAL LETTER A WITH RING ABOVE", "LATIN CAPITAL LETTER AE", "LATIN CAPITAL LETTER C WITH CEDILLA", "LATIN CAPITAL LETTER E WITH GRAVE", "LATIN CAPITAL LETTER E WITH ACUTE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX", "LATIN CAPITAL LETTER E WITH DIAERESIS", "LATIN CAPITAL LETTER I WITH GRAVE", "LATIN CAPITAL LETTER I WITH ACUTE", "LATIN CAPITAL LETTER I WITH CIRCUMFLEX", "LATIN CAPITAL LETTER I WITH DIAERESIS", "LATIN CAPITAL LETTER ETH", "LATIN CAPITAL LETTER N WITH TILDE", "LATIN CAPITAL LETTER O WITH GRAVE", "LATIN CAPITAL LETTER O WITH ACUTE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX", "LATIN CAPITAL LETTER O WITH TILDE", "LATIN CAPITAL LETTER O WITH DIAERESIS", "MULTIPLICATION SIGN", "LATIN CAPITAL LETTER O WITH STROKE", "LATIN CAPITAL LETTER U WITH GRAVE", "LATIN CAPITAL LETTER U WITH ACUTE", "LATIN CAPITAL LETTER U WITH CIRCUMFLEX", "LATIN CAPITAL LETTER U WITH DIAERESIS", "LATIN CAPITAL LETTER Y WITH ACUTE", "LATIN CAPITAL LETTER THORN", "LATIN SMALL LETTER SHARP S", "LATIN SMALL LETTER A WITH GRAVE", "LATIN SMALL LETTER A WITH ACUTE", "LATIN SMALL LETTER A WITH CIRCUMFLEX", "LATIN SMALL LETTER A WITH TILDE", "LATIN SMALL LETTER A WITH DIAERESIS", "LATIN SMALL LETTER A WITH RING ABOVE", "LATIN SMALL LETTER AE", "LATIN SMALL LETTER C WITH CEDILLA", "LATIN SMALL LETTER E WITH GRAVE", "LATIN SMALL LETTER E WITH ACUTE", "LATIN SMALL LETTER E WITH CIRCUMFLEX", "LATIN SMALL LETTER E WITH DIAERESIS", "LATIN SMALL LETTER I WITH GRAVE", "LATIN SMALL LETTER I WITH ACUTE", "LATIN SMALL LETTER I WITH CIRCUMFLEX", "LATIN SMALL LETTER I WITH DIAERESIS", "LATIN SMALL LETTER ETH", "LATIN SMALL LETTER N WITH TILDE", "LATIN SMALL LETTER O WITH GRAVE", "LATIN SMALL LETTER O WITH ACUTE", "LATIN SMALL LETTER O WITH CIRCUMFLEX", "LATIN SMALL LETTER O WITH TILDE", "LATIN SMALL LETTER O WITH DIAERESIS", "DIVISION SIGN", "LATIN SMALL LETTER O WITH STROKE", "LATIN SMALL LETTER U WITH GRAVE", "LATIN SMALL LETTER U WITH ACUTE", "LATIN SMALL LETTER U WITH CIRCUMFLEX", "LATIN SMALL LETTER U WITH DIAERESIS", "LATIN SMALL LETTER Y WITH ACUTE", "LATIN SMALL LETTER THORN", "LATIN SMALL LETTER Y WITH DIAERESIS", "LATIN CAPITAL LETTER A WITH MACRON", "LATIN SMALL LETTER A WITH MACRON", "LATIN CAPITAL LETTER A WITH BREVE", "LATIN SMALL LETTER A WITH BREVE", "LATIN CAPITAL LETTER A WITH OGONEK", "LATIN SMALL LETTER A WITH OGONEK", "LATIN CAPITAL LETTER C WITH ACUTE", "LATIN SMALL LETTER C WITH ACUTE", "LATIN CAPITAL LETTER C WITH CIRCUMFLEX", "LATIN SMALL LETTER C WITH CIRCUMFLEX", "LATIN CAPITAL LETTER C WITH DOT ABOVE", "LATIN SMALL LETTER C WITH DOT ABOVE", "LATIN CAPITAL LETTER C WITH CARON", "LATIN SMALL LETTER C WITH CARON", "LATIN CAPITAL LETTER D WITH CARON", "LATIN SMALL LETTER D WITH CARON", "LATIN CAPITAL LETTER D WITH STROKE", "LATIN SMALL LETTER D WITH STROKE", "LATIN CAPITAL LETTER E WITH MACRON", "LATIN SMALL LETTER E WITH MACRON", "LATIN CAPITAL LETTER E WITH BREVE", "LATIN SMALL LETTER E WITH BREVE", "LATIN CAPITAL LETTER E WITH DOT ABOVE", "LATIN SMALL LETTER E WITH DOT ABOVE", "LATIN CAPITAL LETTER E WITH OGONEK", "LATIN SMALL LETTER E WITH OGONEK", "LATIN CAPITAL LETTER E WITH CARON", "LATIN SMALL LETTER E WITH CARON", "LATIN CAPITAL LETTER G WITH CIRCUMFLEX", "LATIN SMALL LETTER G WITH CIRCUMFLEX", "LATIN CAPITAL LETTER G WITH BREVE", "LATIN SMALL LETTER G WITH BREVE", "LATIN CAPITAL LETTER G WITH DOT ABOVE", "LATIN SMALL LETTER G WITH DOT ABOVE", "LATIN CAPITAL LETTER G WITH CEDILLA", "LATIN SMALL LETTER G WITH CEDILLA", "LATIN CAPITAL LETTER H WITH CIRCUMFLEX", "LATIN SMALL LETTER H WITH CIRCUMFLEX", "LATIN CAPITAL LETTER H WITH STROKE", "LATIN SMALL LETTER H WITH STROKE", "LATIN CAPITAL LETTER I WITH TILDE", "LATIN SMALL LETTER I WITH TILDE", "LATIN CAPITAL LETTER I WITH MACRON", "LATIN SMALL LETTER I WITH MACRON", "LATIN CAPITAL LETTER I WITH BREVE", "LATIN SMALL LETTER I WITH BREVE", "LATIN CAPITAL LETTER I WITH OGONEK", "LATIN SMALL LETTER I WITH OGONEK", "LATIN CAPITAL LETTER I WITH DOT ABOVE", "LATIN SMALL LETTER DOTLESS I", "LATIN CAPITAL LIGATURE IJ", "LATIN SMALL LIGATURE IJ", "LATIN CAPITAL LETTER J WITH CIRCUMFLEX", "LATIN SMALL LETTER J WITH CIRCUMFLEX", "LATIN CAPITAL LETTER K WITH CEDILLA", "LATIN SMALL LETTER K WITH CEDILLA", "LATIN SMALL LETTER KRA", "LATIN CAPITAL LETTER L WITH ACUTE", "LATIN SMALL LETTER L WITH ACUTE", "LATIN CAPITAL LETTER L WITH CEDILLA", "LATIN SMALL LETTER L WITH CEDILLA", "LATIN CAPITAL LETTER L WITH CARON", "LATIN SMALL LETTER L WITH CARON", "LATIN CAPITAL LETTER L WITH MIDDLE DOT", "LATIN SMALL LETTER L WITH MIDDLE DOT", "LATIN CAPITAL LETTER L WITH STROKE", "LATIN SMALL LETTER L WITH STROKE", "LATIN CAPITAL LETTER N WITH ACUTE", "LATIN SMALL LETTER N WITH ACUTE", "LATIN CAPITAL LETTER N WITH CEDILLA", "LATIN SMALL LETTER N WITH CEDILLA", "LATIN CAPITAL LETTER N WITH CARON", "LATIN SMALL LETTER N WITH CARON", "LATIN SMALL LETTER N PRECEDED BY APOSTROPHE", "LATIN CAPITAL LETTER ENG", "LATIN SMALL LETTER ENG", "LATIN CAPITAL LETTER O WITH MACRON", "LATIN SMALL LETTER O WITH MACRON", "LATIN CAPITAL LETTER O WITH BREVE", "LATIN SMALL LETTER O WITH BREVE", "LATIN CAPITAL LETTER O WITH DOUBLE ACUTE", "LATIN SMALL LETTER O WITH DOUBLE ACUTE", "LATIN CAPITAL LIGATURE OE", "LATIN SMALL LIGATURE OE", "LATIN CAPITAL LETTER R WITH ACUTE", "LATIN SMALL LETTER R WITH ACUTE", "LATIN CAPITAL LETTER R WITH CEDILLA", "LATIN SMALL LETTER R WITH CEDILLA", "LATIN CAPITAL LETTER R WITH CARON", "LATIN SMALL LETTER R WITH CARON", "LATIN CAPITAL LETTER S WITH ACUTE", "LATIN SMALL LETTER S WITH ACUTE", "LATIN CAPITAL LETTER S WITH CIRCUMFLEX", "LATIN SMALL LETTER S WITH CIRCUMFLEX", "LATIN CAPITAL LETTER S WITH CEDILLA", "LATIN SMALL LETTER S WITH CEDILLA", "LATIN CAPITAL LETTER S WITH CARON", "LATIN SMALL LETTER S WITH CARON", "LATIN CAPITAL LETTER T WITH CEDILLA", "LATIN SMALL LETTER T WITH CEDILLA", "LATIN CAPITAL LETTER T WITH CARON", "LATIN SMALL LETTER T WITH CARON", "LATIN CAPITAL LETTER T WITH STROKE", "LATIN SMALL LETTER T WITH STROKE", "LATIN CAPITAL LETTER U WITH TILDE", "LATIN SMALL LETTER U WITH TILDE", "LATIN CAPITAL LETTER U WITH MACRON", "LATIN SMALL LETTER U WITH MACRON", "LATIN CAPITAL LETTER U WITH BREVE", "LATIN SMALL LETTER U WITH BREVE", "LATIN CAPITAL LETTER U WITH RING ABOVE", "LATIN SMALL LETTER U WITH RING ABOVE", "LATIN CAPITAL LETTER U WITH DOUBLE ACUTE", "LATIN SMALL LETTER U WITH DOUBLE ACUTE", "LATIN CAPITAL LETTER U WITH OGONEK", "LATIN SMALL LETTER U WITH OGONEK", "LATIN CAPITAL LETTER W WITH CIRCUMFLEX", "LATIN SMALL LETTER W WITH CIRCUMFLEX", "LATIN CAPITAL LETTER Y WITH CIRCUMFLEX", "LATIN SMALL LETTER Y WITH CIRCUMFLEX", "LATIN CAPITAL LETTER Y WITH DIAERESIS", "LATIN CAPITAL LETTER Z WITH ACUTE", "LATIN SMALL LETTER Z WITH ACUTE", "LATIN CAPITAL LETTER Z WITH DOT ABOVE", "LATIN SMALL LETTER Z WITH DOT ABOVE", "LATIN CAPITAL LETTER Z WITH CARON", "LATIN SMALL LETTER Z WITH CARON", "LATIN SMALL LETTER LONG S", "LATIN SMALL LETTER B WITH STROKE", "LATIN CAPITAL LETTER B WITH HOOK", "LATIN CAPITAL LETTER B WITH TOPBAR", "LATIN SMALL LETTER B WITH TOPBAR", "LATIN CAPITAL LETTER TONE SIX", "LATIN SMALL LETTER TONE SIX", "LATIN CAPITAL LETTER OPEN O", "LATIN CAPITAL LETTER C WITH HOOK", "LATIN SMALL LETTER C WITH HOOK", "LATIN CAPITAL LETTER AFRICAN D", "LATIN CAPITAL LETTER D WITH HOOK", "LATIN CAPITAL LETTER D WITH TOPBAR", "LATIN SMALL LETTER D WITH TOPBAR", "LATIN SMALL LETTER TURNED DELTA", "LATIN CAPITAL LETTER REVERSED E", "LATIN CAPITAL LETTER SCHWA", "LATIN CAPITAL LETTER OPEN E", "LATIN CAPITAL LETTER F WITH HOOK", "LATIN SMALL LETTER F WITH HOOK", "LATIN CAPITAL LETTER G WITH HOOK", "LATIN CAPITAL LETTER GAMMA", "LATIN SMALL LETTER HV", "LATIN CAPITAL LETTER IOTA", "LATIN CAPITAL LETTER I WITH STROKE", "LATIN CAPITAL LETTER K WITH HOOK", "LATIN SMALL LETTER K WITH HOOK", "LATIN SMALL LETTER L WITH BAR", "LATIN SMALL LETTER LAMBDA WITH STROKE", "LATIN CAPITAL LETTER TURNED M", "LATIN CAPITAL LETTER N WITH LEFT HOOK", "LATIN SMALL LETTER N WITH LONG RIGHT LEG", "LATIN CAPITAL LETTER O WITH MIDDLE TILDE", "LATIN CAPITAL LETTER O WITH HORN", "LATIN SMALL LETTER O WITH HORN", "LATIN CAPITAL LETTER OI", "LATIN SMALL LETTER OI", "LATIN CAPITAL LETTER P WITH HOOK", "LATIN SMALL LETTER P WITH HOOK", "LATIN LETTER YR", "LATIN CAPITAL LETTER TONE TWO", "LATIN SMALL LETTER TONE TWO", "LATIN CAPITAL LETTER ESH", "LATIN LETTER REVERSED ESH LOOP", "LATIN SMALL LETTER T WITH PALATAL HOOK", "LATIN CAPITAL LETTER T WITH HOOK", "LATIN SMALL LETTER T WITH HOOK", "LATIN CAPITAL LETTER T WITH RETROFLEX HOOK", "LATIN CAPITAL LETTER U WITH HORN", "LATIN SMALL LETTER U WITH HORN", "LATIN CAPITAL LETTER UPSILON", "LATIN CAPITAL LETTER V WITH HOOK", "LATIN CAPITAL LETTER Y WITH HOOK", "LATIN SMALL LETTER Y WITH HOOK", "LATIN CAPITAL LETTER Z WITH STROKE", "LATIN SMALL LETTER Z WITH STROKE", "LATIN CAPITAL LETTER EZH", "LATIN CAPITAL LETTER EZH REVERSED", "LATIN SMALL LETTER EZH REVERSED", "LATIN SMALL LETTER EZH WITH TAIL", "LATIN LETTER TWO WITH STROKE", "LATIN CAPITAL LETTER TONE FIVE", "LATIN SMALL LETTER TONE FIVE", "LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE", "LATIN LETTER WYNN", "LATIN LETTER DENTAL CLICK", "LATIN LETTER LATERAL CLICK", "LATIN LETTER ALVEOLAR CLICK", "LATIN LETTER RETROFLEX CLICK", "LATIN CAPITAL LETTER DZ WITH CARON", "LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON", "LATIN SMALL LETTER DZ WITH CARON", "LATIN CAPITAL LETTER LJ", "LATIN CAPITAL LETTER L WITH SMALL LETTER J", "LATIN SMALL LETTER LJ", "LATIN CAPITAL LETTER NJ", "LATIN CAPITAL LETTER N WITH SMALL LETTER J", "LATIN SMALL LETTER NJ", "LATIN CAPITAL LETTER A WITH CARON", "LATIN SMALL LETTER A WITH CARON", "LATIN CAPITAL LETTER I WITH CARON", "LATIN SMALL LETTER I WITH CARON", "LATIN CAPITAL LETTER O WITH CARON", "LATIN SMALL LETTER O WITH CARON", "LATIN CAPITAL LETTER U WITH CARON", "LATIN SMALL LETTER U WITH CARON", "LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON", "LATIN SMALL LETTER U WITH DIAERESIS AND MACRON", "LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE", "LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE", "LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON", "LATIN SMALL LETTER U WITH DIAERESIS AND CARON", "LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE", "LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE", "LATIN SMALL LETTER TURNED E", "LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON", "LATIN SMALL LETTER A WITH DIAERESIS AND MACRON", "LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON", "LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON", "LATIN CAPITAL LETTER AE WITH MACRON", "LATIN SMALL LETTER AE WITH MACRON", "LATIN CAPITAL LETTER G WITH STROKE", "LATIN SMALL LETTER G WITH STROKE", "LATIN CAPITAL LETTER G WITH CARON", "LATIN SMALL LETTER G WITH CARON", "LATIN CAPITAL LETTER K WITH CARON", "LATIN SMALL LETTER K WITH CARON", "LATIN CAPITAL LETTER O WITH OGONEK", "LATIN SMALL LETTER O WITH OGONEK", "LATIN CAPITAL LETTER O WITH OGONEK AND MACRON", "LATIN SMALL LETTER O WITH OGONEK AND MACRON", "LATIN CAPITAL LETTER EZH WITH CARON", "LATIN SMALL LETTER EZH WITH CARON", "LATIN SMALL LETTER J WITH CARON", "LATIN CAPITAL LETTER DZ", "LATIN CAPITAL LETTER D WITH SMALL LETTER Z", "LATIN SMALL LETTER DZ", "LATIN CAPITAL LETTER G WITH ACUTE", "LATIN SMALL LETTER G WITH ACUTE", "LATIN CAPITAL LETTER HWAIR", "LATIN CAPITAL LETTER WYNN", "LATIN CAPITAL LETTER N WITH GRAVE", "LATIN SMALL LETTER N WITH GRAVE", "LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE", "LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE", "LATIN CAPITAL LETTER AE WITH ACUTE", "LATIN SMALL LETTER AE WITH ACUTE", "LATIN CAPITAL LETTER O WITH STROKE AND ACUTE", "LATIN SMALL LETTER O WITH STROKE AND ACUTE", "LATIN CAPITAL LETTER A WITH DOUBLE GRAVE", "LATIN SMALL LETTER A WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER A WITH INVERTED BREVE", "LATIN SMALL LETTER A WITH INVERTED BREVE", "LATIN CAPITAL LETTER E WITH DOUBLE GRAVE", "LATIN SMALL LETTER E WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER E WITH INVERTED BREVE", "LATIN SMALL LETTER E WITH INVERTED BREVE", "LATIN CAPITAL LETTER I WITH DOUBLE GRAVE", "LATIN SMALL LETTER I WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER I WITH INVERTED BREVE", "LATIN SMALL LETTER I WITH INVERTED BREVE", "LATIN CAPITAL LETTER O WITH DOUBLE GRAVE", "LATIN SMALL LETTER O WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER O WITH INVERTED BREVE", "LATIN SMALL LETTER O WITH INVERTED BREVE", "LATIN CAPITAL LETTER R WITH DOUBLE GRAVE", "LATIN SMALL LETTER R WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER R WITH INVERTED BREVE", "LATIN SMALL LETTER R WITH INVERTED BREVE", "LATIN CAPITAL LETTER U WITH DOUBLE GRAVE", "LATIN SMALL LETTER U WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER U WITH INVERTED BREVE", "LATIN SMALL LETTER U WITH INVERTED BREVE", "LATIN CAPITAL LETTER S WITH COMMA BELOW", "LATIN SMALL LETTER S WITH COMMA BELOW", "LATIN CAPITAL LETTER T WITH COMMA BELOW", "LATIN SMALL LETTER T WITH COMMA BELOW", "LATIN CAPITAL LETTER YOGH", "LATIN SMALL LETTER YOGH", "LATIN CAPITAL LETTER H WITH CARON", "LATIN SMALL LETTER H WITH CARON", "LATIN CAPITAL LETTER N WITH LONG RIGHT LEG", "LATIN SMALL LETTER D WITH CURL", "LATIN CAPITAL LETTER OU", "LATIN SMALL LETTER OU", "LATIN CAPITAL LETTER Z WITH HOOK", "LATIN SMALL LETTER Z WITH HOOK", "LATIN CAPITAL LETTER A WITH DOT ABOVE", "LATIN SMALL LETTER A WITH DOT ABOVE", "LATIN CAPITAL LETTER E WITH CEDILLA", "LATIN SMALL LETTER E WITH CEDILLA", "LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON", "LATIN SMALL LETTER O WITH DIAERESIS AND MACRON", "LATIN CAPITAL LETTER O WITH TILDE AND MACRON", "LATIN SMALL LETTER O WITH TILDE AND MACRON", "LATIN CAPITAL LETTER O WITH DOT ABOVE", "LATIN SMALL LETTER O WITH DOT ABOVE", "LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON", "LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON", "LATIN CAPITAL LETTER Y WITH MACRON", "LATIN SMALL LETTER Y WITH MACRON", "LATIN SMALL LETTER L WITH CURL", "LATIN SMALL LETTER N WITH CURL", "LATIN SMALL LETTER T WITH CURL", "LATIN SMALL LETTER DOTLESS J", "LATIN SMALL LETTER DB DIGRAPH", "LATIN SMALL LETTER QP DIGRAPH", "LATIN CAPITAL LETTER A WITH STROKE", "LATIN CAPITAL LETTER C WITH STROKE", "LATIN SMALL LETTER C WITH STROKE", "LATIN CAPITAL LETTER L WITH BAR", "LATIN CAPITAL LETTER T WITH DIAGONAL STROKE", "LATIN SMALL LETTER S WITH SWASH TAIL", "LATIN SMALL LETTER Z WITH SWASH TAIL", "LATIN CAPITAL LETTER GLOTTAL STOP", "LATIN SMALL LETTER GLOTTAL STOP", "LATIN CAPITAL LETTER B WITH STROKE", "LATIN CAPITAL LETTER U BAR", "LATIN CAPITAL LETTER TURNED V", "LATIN CAPITAL LETTER E WITH STROKE", "LATIN SMALL LETTER E WITH STROKE", "LATIN CAPITAL LETTER J WITH STROKE", "LATIN SMALL LETTER J WITH STROKE", "LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL", "LATIN SMALL LETTER Q WITH HOOK TAIL", "LATIN CAPITAL LETTER R WITH STROKE", "LATIN SMALL LETTER R WITH STROKE", "LATIN CAPITAL LETTER Y WITH STROKE", "LATIN SMALL LETTER Y WITH STROKE", "LATIN SMALL LETTER TURNED A", "LATIN SMALL LETTER ALPHA", "LATIN SMALL LETTER TURNED ALPHA", "LATIN SMALL LETTER B WITH HOOK", "LATIN SMALL LETTER OPEN O", "LATIN SMALL LETTER C WITH CURL", "LATIN SMALL LETTER D WITH TAIL", "LATIN SMALL LETTER D WITH HOOK", "LATIN SMALL LETTER REVERSED E", "LATIN SMALL LETTER SCHWA", "LATIN SMALL LETTER SCHWA WITH HOOK", "LATIN SMALL LETTER OPEN E", "LATIN SMALL LETTER REVERSED OPEN E", "LATIN SMALL LETTER REVERSED OPEN E WITH HOOK", "LATIN SMALL LETTER CLOSED REVERSED OPEN E", "LATIN SMALL LETTER DOTLESS J WITH STROKE", "LATIN SMALL LETTER G WITH HOOK", "LATIN SMALL LETTER SCRIPT G", "LATIN LETTER SMALL CAPITAL G", "LATIN SMALL LETTER GAMMA", "LATIN SMALL LETTER RAMS HORN", "LATIN SMALL LETTER TURNED H", "LATIN SMALL LETTER H WITH HOOK", "LATIN SMALL LETTER HENG WITH HOOK", "LATIN SMALL LETTER I WITH STROKE", "LATIN SMALL LETTER IOTA", "LATIN LETTER SMALL CAPITAL I", "LATIN SMALL LETTER L WITH MIDDLE TILDE", "LATIN SMALL LETTER L WITH BELT", "LATIN SMALL LETTER L WITH RETROFLEX HOOK", "LATIN SMALL LETTER LEZH", "LATIN SMALL LETTER TURNED M", "LATIN SMALL LETTER TURNED M WITH LONG LEG", "LATIN SMALL LETTER M WITH HOOK", "LATIN SMALL LETTER N WITH LEFT HOOK", "LATIN SMALL LETTER N WITH RETROFLEX HOOK", "LATIN LETTER SMALL CAPITAL N", "LATIN SMALL LETTER BARRED O", "LATIN LETTER SMALL CAPITAL OE", "LATIN SMALL LETTER CLOSED OMEGA", "LATIN SMALL LETTER PHI", "LATIN SMALL LETTER TURNED R", "LATIN SMALL LETTER TURNED R WITH LONG LEG", "LATIN SMALL LETTER TURNED R WITH HOOK", "LATIN SMALL LETTER R WITH LONG LEG", "LATIN SMALL LETTER R WITH TAIL", "LATIN SMALL LETTER R WITH FISHHOOK", "LATIN SMALL LETTER REVERSED R WITH FISHHOOK", "LATIN LETTER SMALL CAPITAL R", "LATIN LETTER SMALL CAPITAL INVERTED R", "LATIN SMALL LETTER S WITH HOOK", "LATIN SMALL LETTER ESH", "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", "LATIN SMALL LETTER SQUAT REVERSED ESH", "LATIN SMALL LETTER ESH WITH CURL", "LATIN SMALL LETTER TURNED T", "LATIN SMALL LETTER T WITH RETROFLEX HOOK", "LATIN SMALL LETTER U BAR", "LATIN SMALL LETTER UPSILON", "LATIN SMALL LETTER V WITH HOOK", "LATIN SMALL LETTER TURNED V", "LATIN SMALL LETTER TURNED W", "LATIN SMALL LETTER TURNED Y", "LATIN LETTER SMALL CAPITAL Y", "LATIN SMALL LETTER Z WITH RETROFLEX HOOK", "LATIN SMALL LETTER Z WITH CURL", "LATIN SMALL LETTER EZH", "LATIN SMALL LETTER EZH WITH CURL", "LATIN LETTER GLOTTAL STOP", "LATIN LETTER PHARYNGEAL VOICED FRICATIVE", "LATIN LETTER INVERTED GLOTTAL STOP", "LATIN LETTER STRETCHED C", "LATIN LETTER BILABIAL CLICK", "LATIN LETTER SMALL CAPITAL B", "LATIN SMALL LETTER CLOSED OPEN E", "LATIN LETTER SMALL CAPITAL G WITH HOOK", "LATIN LETTER SMALL CAPITAL H", "LATIN SMALL LETTER J WITH CROSSED-TAIL", "LATIN SMALL LETTER TURNED K", "LATIN LETTER SMALL CAPITAL L", "LATIN SMALL LETTER Q WITH HOOK", "LATIN LETTER GLOTTAL STOP WITH STROKE", "LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE", "LATIN SMALL LETTER DZ DIGRAPH", "LATIN SMALL LETTER DEZH DIGRAPH", "LATIN SMALL LETTER DZ DIGRAPH WITH CURL", "LATIN SMALL LETTER TS DIGRAPH", "LATIN SMALL LETTER TESH DIGRAPH", "LATIN SMALL LETTER TC DIGRAPH WITH CURL", "LATIN SMALL LETTER FENG DIGRAPH", "LATIN SMALL LETTER LS DIGRAPH", "LATIN SMALL LETTER LZ DIGRAPH", "LATIN LETTER BILABIAL PERCUSSIVE", "LATIN LETTER BIDENTAL PERCUSSIVE", "LATIN SMALL LETTER TURNED H WITH FISHHOOK", "LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL", "MODIFIER LETTER SMALL H", "MODIFIER LETTER SMALL H WITH HOOK", "MODIFIER LETTER SMALL J", "MODIFIER LETTER SMALL R", "MODIFIER LETTER SMALL TURNED R", "MODIFIER LETTER SMALL TURNED R WITH HOOK", "MODIFIER LETTER SMALL CAPITAL INVERTED R", "MODIFIER LETTER SMALL W", "MODIFIER LETTER SMALL Y", "MODIFIER LETTER PRIME", "MODIFIER LETTER DOUBLE PRIME", "MODIFIER LETTER TURNED COMMA", "MODIFIER LETTER APOSTROPHE", "MODIFIER LETTER REVERSED COMMA", "MODIFIER LETTER RIGHT HALF RING", "MODIFIER LETTER LEFT HALF RING", "MODIFIER LETTER GLOTTAL STOP", "MODIFIER LETTER REVERSED GLOTTAL STOP", "MODIFIER LETTER LEFT ARROWHEAD", "MODIFIER LETTER RIGHT ARROWHEAD", "MODIFIER LETTER UP ARROWHEAD", "MODIFIER LETTER DOWN ARROWHEAD", "MODIFIER LETTER CIRCUMFLEX ACCENT", "CARON", "MODIFIER LETTER VERTICAL LINE", "MODIFIER LETTER MACRON", "MODIFIER LETTER ACUTE ACCENT", "MODIFIER LETTER GRAVE ACCENT", "MODIFIER LETTER LOW VERTICAL LINE", "MODIFIER LETTER LOW MACRON", "MODIFIER LETTER LOW GRAVE ACCENT", "MODIFIER LETTER LOW ACUTE ACCENT", "MODIFIER LETTER TRIANGULAR COLON", "MODIFIER LETTER HALF TRIANGULAR COLON", "MODIFIER LETTER CENTRED RIGHT HALF RING", "MODIFIER LETTER CENTRED LEFT HALF RING", "MODIFIER LETTER UP TACK", "MODIFIER LETTER DOWN TACK", "MODIFIER LETTER PLUS SIGN", "MODIFIER LETTER MINUS SIGN", "BREVE", "DOT ABOVE", "RING ABOVE", "OGONEK", "SMALL TILDE", "DOUBLE ACUTE ACCENT", "MODIFIER LETTER RHOTIC HOOK", "MODIFIER LETTER CROSS ACCENT", "MODIFIER LETTER SMALL GAMMA", "MODIFIER LETTER SMALL L", "MODIFIER LETTER SMALL S", "MODIFIER LETTER SMALL X", "MODIFIER LETTER SMALL REVERSED GLOTTAL STOP", "MODIFIER LETTER EXTRA-HIGH TONE BAR", "MODIFIER LETTER HIGH TONE BAR", "MODIFIER LETTER MID TONE BAR", "MODIFIER LETTER LOW TONE BAR", "MODIFIER LETTER EXTRA-LOW TONE BAR", "MODIFIER LETTER YIN DEPARTING TONE MARK", "MODIFIER LETTER YANG DEPARTING TONE MARK", "MODIFIER LETTER VOICING", "MODIFIER LETTER UNASPIRATED", "MODIFIER LETTER DOUBLE APOSTROPHE", "MODIFIER LETTER LOW DOWN ARROWHEAD", "MODIFIER LETTER LOW UP ARROWHEAD", "MODIFIER LETTER LOW LEFT ARROWHEAD", "MODIFIER LETTER LOW RIGHT ARROWHEAD", "MODIFIER LETTER LOW RING", "MODIFIER LETTER MIDDLE GRAVE ACCENT", "MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT", "MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT", "MODIFIER LETTER LOW TILDE", "MODIFIER LETTER RAISED COLON", "MODIFIER LETTER BEGIN HIGH TONE", "MODIFIER LETTER END HIGH TONE", "MODIFIER LETTER BEGIN LOW TONE", "MODIFIER LETTER END LOW TONE", "MODIFIER LETTER SHELF", "MODIFIER LETTER OPEN SHELF", "MODIFIER LETTER LOW LEFT ARROW", "COMBINING GRAVE ACCENT", "COMBINING ACUTE ACCENT", "COMBINING CIRCUMFLEX ACCENT", "COMBINING TILDE", "COMBINING MACRON", "COMBINING OVERLINE", "COMBINING BREVE", "COMBINING DOT ABOVE", "COMBINING DIAERESIS", "COMBINING HOOK ABOVE", "COMBINING RING ABOVE", "COMBINING DOUBLE ACUTE ACCENT", "COMBINING CARON", "COMBINING VERTICAL LINE ABOVE", "COMBINING DOUBLE VERTICAL LINE ABOVE", "COMBINING DOUBLE GRAVE ACCENT", "COMBINING CANDRABINDU", "COMBINING INVERTED BREVE", "COMBINING TURNED COMMA ABOVE", "COMBINING COMMA ABOVE", "COMBINING REVERSED COMMA ABOVE", "COMBINING COMMA ABOVE RIGHT", "COMBINING GRAVE ACCENT BELOW", "COMBINING ACUTE ACCENT BELOW", "COMBINING LEFT TACK BELOW", "COMBINING RIGHT TACK BELOW", "COMBINING LEFT ANGLE ABOVE", "COMBINING HORN", "COMBINING LEFT HALF RING BELOW", "COMBINING UP TACK BELOW", "COMBINING DOWN TACK BELOW", "COMBINING PLUS SIGN BELOW", "COMBINING MINUS SIGN BELOW", "COMBINING PALATALIZED HOOK BELOW", "COMBINING RETROFLEX HOOK BELOW", "COMBINING DOT BELOW", "COMBINING DIAERESIS BELOW", "COMBINING RING BELOW", "COMBINING COMMA BELOW", "COMBINING CEDILLA", "COMBINING OGONEK", "COMBINING VERTICAL LINE BELOW", "COMBINING BRIDGE BELOW", "COMBINING INVERTED DOUBLE ARCH BELOW", "COMBINING CARON BELOW", "COMBINING CIRCUMFLEX ACCENT BELOW", "COMBINING BREVE BELOW", "COMBINING INVERTED BREVE BELOW", "COMBINING TILDE BELOW", "COMBINING MACRON BELOW", "COMBINING LOW LINE", "COMBINING DOUBLE LOW LINE", "COMBINING TILDE OVERLAY", "COMBINING SHORT STROKE OVERLAY", "COMBINING LONG STROKE OVERLAY", "COMBINING SHORT SOLIDUS OVERLAY", "COMBINING LONG SOLIDUS OVERLAY", "COMBINING RIGHT HALF RING BELOW", "COMBINING INVERTED BRIDGE BELOW", "COMBINING SQUARE BELOW", "COMBINING SEAGULL BELOW", "COMBINING X ABOVE", "COMBINING VERTICAL TILDE", "COMBINING DOUBLE OVERLINE", "COMBINING GRAVE TONE MARK", "COMBINING ACUTE TONE MARK", "COMBINING GREEK PERISPOMENI", "COMBINING GREEK KORONIS", "COMBINING GREEK DIALYTIKA TONOS", "COMBINING GREEK YPOGEGRAMMENI", "COMBINING BRIDGE ABOVE", "COMBINING EQUALS SIGN BELOW", "COMBINING DOUBLE VERTICAL LINE BELOW", "COMBINING LEFT ANGLE BELOW", "COMBINING NOT TILDE ABOVE", "COMBINING HOMOTHETIC ABOVE", "COMBINING ALMOST EQUAL TO ABOVE", "COMBINING LEFT RIGHT ARROW BELOW", "COMBINING UPWARDS ARROW BELOW", "COMBINING GRAPHEME JOINER", "COMBINING RIGHT ARROWHEAD ABOVE", "COMBINING LEFT HALF RING ABOVE", "COMBINING FERMATA", "COMBINING X BELOW", "COMBINING LEFT ARROWHEAD BELOW", "COMBINING RIGHT ARROWHEAD BELOW", "COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW", "COMBINING RIGHT HALF RING ABOVE", "COMBINING DOT ABOVE RIGHT", "COMBINING ASTERISK BELOW", "COMBINING DOUBLE RING BELOW", "COMBINING ZIGZAG ABOVE", "COMBINING DOUBLE BREVE BELOW", "COMBINING DOUBLE BREVE", "COMBINING DOUBLE MACRON", "COMBINING DOUBLE MACRON BELOW", "COMBINING DOUBLE TILDE", "COMBINING DOUBLE INVERTED BREVE", "COMBINING DOUBLE RIGHTWARDS ARROW BELOW", "COMBINING LATIN SMALL LETTER A", "COMBINING LATIN SMALL LETTER E", "COMBINING LATIN SMALL LETTER I", "COMBINING LATIN SMALL LETTER O", "COMBINING LATIN SMALL LETTER U", "COMBINING LATIN SMALL LETTER C", "COMBINING LATIN SMALL LETTER D", "COMBINING LATIN SMALL LETTER H", "COMBINING LATIN SMALL LETTER M", "COMBINING LATIN SMALL LETTER R", "COMBINING LATIN SMALL LETTER T", "COMBINING LATIN SMALL LETTER V", "COMBINING LATIN SMALL LETTER X", "GREEK CAPITAL LETTER HETA", "GREEK SMALL LETTER HETA", "GREEK CAPITAL LETTER ARCHAIC SAMPI", "GREEK SMALL LETTER ARCHAIC SAMPI", "GREEK NUMERAL SIGN", "GREEK LOWER NUMERAL SIGN", "GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA", "GREEK SMALL LETTER PAMPHYLIAN DIGAMMA", "GREEK YPOGEGRAMMENI", "GREEK SMALL REVERSED LUNATE SIGMA SYMBOL", "GREEK SMALL DOTTED LUNATE SIGMA SYMBOL", "GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL", "GREEK QUESTION MARK", "GREEK CAPITAL LETTER YOT", "GREEK TONOS", "GREEK DIALYTIKA TONOS", "GREEK CAPITAL LETTER ALPHA WITH TONOS", "GREEK ANO TELEIA", "GREEK CAPITAL LETTER EPSILON WITH TONOS", "GREEK CAPITAL LETTER ETA WITH TONOS", "GREEK CAPITAL LETTER IOTA WITH TONOS", "GREEK CAPITAL LETTER OMICRON WITH TONOS", "GREEK CAPITAL LETTER UPSILON WITH TONOS", "GREEK CAPITAL LETTER OMEGA WITH TONOS", "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS", "GREEK CAPITAL LETTER ALPHA", "GREEK CAPITAL LETTER BETA", "GREEK CAPITAL LETTER GAMMA", "GREEK CAPITAL LETTER DELTA", "GREEK CAPITAL LETTER EPSILON", "GREEK CAPITAL LETTER ZETA", "GREEK CAPITAL LETTER ETA", "GREEK CAPITAL LETTER THETA", "GREEK CAPITAL LETTER IOTA", "GREEK CAPITAL LETTER KAPPA", "GREEK CAPITAL LETTER LAMDA", "GREEK CAPITAL LETTER MU", "GREEK CAPITAL LETTER NU", "GREEK CAPITAL LETTER XI", "GREEK CAPITAL LETTER OMICRON", "GREEK CAPITAL LETTER PI", "GREEK CAPITAL LETTER RHO", "GREEK CAPITAL LETTER SIGMA", "GREEK CAPITAL LETTER TAU", "GREEK CAPITAL LETTER UPSILON", "GREEK CAPITAL LETTER PHI", "GREEK CAPITAL LETTER CHI", "GREEK CAPITAL LETTER PSI", "GREEK CAPITAL LETTER OMEGA", "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA", "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA", "GREEK SMALL LETTER ALPHA WITH TONOS", "GREEK SMALL LETTER EPSILON WITH TONOS", "GREEK SMALL LETTER ETA WITH TONOS", "GREEK SMALL LETTER IOTA WITH TONOS", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS", "GREEK SMALL LETTER ALPHA", "GREEK SMALL LETTER BETA", "GREEK SMALL LETTER GAMMA", "GREEK SMALL LETTER DELTA", "GREEK SMALL LETTER EPSILON", "GREEK SMALL LETTER ZETA", "GREEK SMALL LETTER ETA", "GREEK SMALL LETTER THETA", "GREEK SMALL LETTER IOTA", "GREEK SMALL LETTER KAPPA", "GREEK SMALL LETTER LAMDA", "GREEK SMALL LETTER MU", "GREEK SMALL LETTER NU", "GREEK SMALL LETTER XI", "GREEK SMALL LETTER OMICRON", "GREEK SMALL LETTER PI", "GREEK SMALL LETTER RHO", "GREEK SMALL LETTER FINAL SIGMA", "GREEK SMALL LETTER SIGMA", "GREEK SMALL LETTER TAU", "GREEK SMALL LETTER UPSILON", "GREEK SMALL LETTER PHI", "GREEK SMALL LETTER CHI", "GREEK SMALL LETTER PSI", "GREEK SMALL LETTER OMEGA", "GREEK SMALL LETTER IOTA WITH DIALYTIKA", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA", "GREEK SMALL LETTER OMICRON WITH TONOS", "GREEK SMALL LETTER UPSILON WITH TONOS", "GREEK SMALL LETTER OMEGA WITH TONOS", "GREEK CAPITAL KAI SYMBOL", "GREEK BETA SYMBOL", "GREEK THETA SYMBOL", "GREEK UPSILON WITH HOOK SYMBOL", "GREEK UPSILON WITH ACUTE AND HOOK SYMBOL", "GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL", "GREEK PHI SYMBOL", "GREEK PI SYMBOL", "GREEK KAI SYMBOL", "GREEK LETTER ARCHAIC KOPPA", "GREEK SMALL LETTER ARCHAIC KOPPA", "GREEK LETTER STIGMA", "GREEK SMALL LETTER STIGMA", "GREEK LETTER DIGAMMA", "GREEK SMALL LETTER DIGAMMA", "GREEK LETTER KOPPA", "GREEK SMALL LETTER KOPPA", "GREEK LETTER SAMPI", "GREEK SMALL LETTER SAMPI", "COPTIC CAPITAL LETTER SHEI", "COPTIC SMALL LETTER SHEI", "COPTIC CAPITAL LETTER FEI", "COPTIC SMALL LETTER FEI", "COPTIC CAPITAL LETTER KHEI", "COPTIC SMALL LETTER KHEI", "COPTIC CAPITAL LETTER HORI", "COPTIC SMALL LETTER HORI", "COPTIC CAPITAL LETTER GANGIA", "COPTIC SMALL LETTER GANGIA", "COPTIC CAPITAL LETTER SHIMA", "COPTIC SMALL LETTER SHIMA", "COPTIC CAPITAL LETTER DEI", "COPTIC SMALL LETTER DEI", "GREEK KAPPA SYMBOL", "GREEK RHO SYMBOL", "GREEK LUNATE SIGMA SYMBOL", "GREEK LETTER YOT", "GREEK CAPITAL THETA SYMBOL", "GREEK LUNATE EPSILON SYMBOL", "GREEK REVERSED LUNATE EPSILON SYMBOL", "GREEK CAPITAL LETTER SHO", "GREEK SMALL LETTER SHO", "GREEK CAPITAL LUNATE SIGMA SYMBOL", "GREEK CAPITAL LETTER SAN", "GREEK SMALL LETTER SAN", "GREEK RHO WITH STROKE SYMBOL", "GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL", "GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL", "GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL", "CYRILLIC CAPITAL LETTER IE WITH GRAVE", "CYRILLIC CAPITAL LETTER IO", "CYRILLIC CAPITAL LETTER DJE", "CYRILLIC CAPITAL LETTER GJE", "CYRILLIC CAPITAL LETTER UKRAINIAN IE", "CYRILLIC CAPITAL LETTER DZE", "CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I", "CYRILLIC CAPITAL LETTER YI", "CYRILLIC CAPITAL LETTER JE", "CYRILLIC CAPITAL LETTER LJE", "CYRILLIC CAPITAL LETTER NJE", "CYRILLIC CAPITAL LETTER TSHE", "CYRILLIC CAPITAL LETTER KJE", "CYRILLIC CAPITAL LETTER I WITH GRAVE", "CYRILLIC CAPITAL LETTER SHORT U", "CYRILLIC CAPITAL LETTER DZHE", "CYRILLIC CAPITAL LETTER A", "CYRILLIC CAPITAL LETTER BE", "CYRILLIC CAPITAL LETTER VE", "CYRILLIC CAPITAL LETTER GHE", "CYRILLIC CAPITAL LETTER DE", "CYRILLIC CAPITAL LETTER IE", "CYRILLIC CAPITAL LETTER ZHE", "CYRILLIC CAPITAL LETTER ZE", "CYRILLIC CAPITAL LETTER I", "CYRILLIC CAPITAL LETTER SHORT I", "CYRILLIC CAPITAL LETTER KA", "CYRILLIC CAPITAL LETTER EL", "CYRILLIC CAPITAL LETTER EM", "CYRILLIC CAPITAL LETTER EN", "CYRILLIC CAPITAL LETTER O", "CYRILLIC CAPITAL LETTER PE", "CYRILLIC CAPITAL LETTER ER", "CYRILLIC CAPITAL LETTER ES", "CYRILLIC CAPITAL LETTER TE", "CYRILLIC CAPITAL LETTER U", "CYRILLIC CAPITAL LETTER EF", "CYRILLIC CAPITAL LETTER HA", "CYRILLIC CAPITAL LETTER TSE", "CYRILLIC CAPITAL LETTER CHE", "CYRILLIC CAPITAL LETTER SHA", "CYRILLIC CAPITAL LETTER SHCHA", "CYRILLIC CAPITAL LETTER HARD SIGN", "CYRILLIC CAPITAL LETTER YERU", "CYRILLIC CAPITAL LETTER SOFT SIGN", "CYRILLIC CAPITAL LETTER E", "CYRILLIC CAPITAL LETTER YU", "CYRILLIC CAPITAL LETTER YA", "CYRILLIC SMALL LETTER A", "CYRILLIC SMALL LETTER BE", "CYRILLIC SMALL LETTER VE", "CYRILLIC SMALL LETTER GHE", "CYRILLIC SMALL LETTER DE", "CYRILLIC SMALL LETTER IE", "CYRILLIC SMALL LETTER ZHE", "CYRILLIC SMALL LETTER ZE", "CYRILLIC SMALL LETTER I", "CYRILLIC SMALL LETTER SHORT I", "CYRILLIC SMALL LETTER KA", "CYRILLIC SMALL LETTER EL", "CYRILLIC SMALL LETTER EM", "CYRILLIC SMALL LETTER EN", "CYRILLIC SMALL LETTER O", "CYRILLIC SMALL LETTER PE", "CYRILLIC SMALL LETTER ER", "CYRILLIC SMALL LETTER ES", "CYRILLIC SMALL LETTER TE", "CYRILLIC SMALL LETTER U", "CYRILLIC SMALL LETTER EF", "CYRILLIC SMALL LETTER HA", "CYRILLIC SMALL LETTER TSE", "CYRILLIC SMALL LETTER CHE", "CYRILLIC SMALL LETTER SHA", "CYRILLIC SMALL LETTER SHCHA", "CYRILLIC SMALL LETTER HARD SIGN", "CYRILLIC SMALL LETTER YERU", "CYRILLIC SMALL LETTER SOFT SIGN", "CYRILLIC SMALL LETTER E", "CYRILLIC SMALL LETTER YU", "CYRILLIC SMALL LETTER YA", "CYRILLIC SMALL LETTER IE WITH GRAVE", "CYRILLIC SMALL LETTER IO", "CYRILLIC SMALL LETTER DJE", "CYRILLIC SMALL LETTER GJE", "CYRILLIC SMALL LETTER UKRAINIAN IE", "CYRILLIC SMALL LETTER DZE", "CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I", "CYRILLIC SMALL LETTER YI", "CYRILLIC SMALL LETTER JE", "CYRILLIC SMALL LETTER LJE", "CYRILLIC SMALL LETTER NJE", "CYRILLIC SMALL LETTER TSHE", "CYRILLIC SMALL LETTER KJE", "CYRILLIC SMALL LETTER I WITH GRAVE", "CYRILLIC SMALL LETTER SHORT U", "CYRILLIC SMALL LETTER DZHE", "CYRILLIC CAPITAL LETTER OMEGA", "CYRILLIC SMALL LETTER OMEGA", "CYRILLIC CAPITAL LETTER YAT", "CYRILLIC SMALL LETTER YAT", "CYRILLIC CAPITAL LETTER IOTIFIED E", "CYRILLIC SMALL LETTER IOTIFIED E", "CYRILLIC CAPITAL LETTER LITTLE YUS", "CYRILLIC SMALL LETTER LITTLE YUS", "CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS", "CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS", "CYRILLIC CAPITAL LETTER BIG YUS", "CYRILLIC SMALL LETTER BIG YUS", "CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS", "CYRILLIC SMALL LETTER IOTIFIED BIG YUS", "CYRILLIC CAPITAL LETTER KSI", "CYRILLIC SMALL LETTER KSI", "CYRILLIC CAPITAL LETTER PSI", "CYRILLIC SMALL LETTER PSI", "CYRILLIC CAPITAL LETTER FITA", "CYRILLIC SMALL LETTER FITA", "CYRILLIC CAPITAL LETTER IZHITSA", "CYRILLIC SMALL LETTER IZHITSA", "CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", "CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", "CYRILLIC CAPITAL LETTER UK", "CYRILLIC SMALL LETTER UK", "CYRILLIC CAPITAL LETTER ROUND OMEGA", "CYRILLIC SMALL LETTER ROUND OMEGA", "CYRILLIC CAPITAL LETTER OMEGA WITH TITLO", "CYRILLIC SMALL LETTER OMEGA WITH TITLO", "CYRILLIC CAPITAL LETTER OT", "CYRILLIC SMALL LETTER OT", "CYRILLIC CAPITAL LETTER KOPPA", "CYRILLIC SMALL LETTER KOPPA", "CYRILLIC THOUSANDS SIGN", "COMBINING CYRILLIC TITLO", "COMBINING CYRILLIC PALATALIZATION", "COMBINING CYRILLIC DASIA PNEUMATA", "COMBINING CYRILLIC PSILI PNEUMATA", "COMBINING CYRILLIC POKRYTIE", "COMBINING CYRILLIC HUNDRED THOUSANDS SIGN", "COMBINING CYRILLIC MILLIONS SIGN", "CYRILLIC CAPITAL LETTER SHORT I WITH TAIL", "CYRILLIC SMALL LETTER SHORT I WITH TAIL", "CYRILLIC CAPITAL LETTER SEMISOFT SIGN", "CYRILLIC SMALL LETTER SEMISOFT SIGN", "CYRILLIC CAPITAL LETTER ER WITH TICK", "CYRILLIC SMALL LETTER ER WITH TICK", "CYRILLIC CAPITAL LETTER GHE WITH UPTURN", "CYRILLIC SMALL LETTER GHE WITH UPTURN", "CYRILLIC CAPITAL LETTER GHE WITH STROKE", "CYRILLIC SMALL LETTER GHE WITH STROKE", "CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER", "CYRILLIC SMALL LETTER ZHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER ZE WITH DESCENDER", "CYRILLIC SMALL LETTER ZE WITH DESCENDER", "CYRILLIC CAPITAL LETTER KA WITH DESCENDER", "CYRILLIC SMALL LETTER KA WITH DESCENDER", "CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE", "CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE", "CYRILLIC CAPITAL LETTER KA WITH STROKE", "CYRILLIC SMALL LETTER KA WITH STROKE", "CYRILLIC CAPITAL LETTER BASHKIR KA", "CYRILLIC SMALL LETTER BASHKIR KA", "CYRILLIC CAPITAL LETTER EN WITH DESCENDER", "CYRILLIC SMALL LETTER EN WITH DESCENDER", "CYRILLIC CAPITAL LIGATURE EN GHE", "CYRILLIC SMALL LIGATURE EN GHE", "CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER ABKHASIAN HA", "CYRILLIC SMALL LETTER ABKHASIAN HA", "CYRILLIC CAPITAL LETTER ES WITH DESCENDER", "CYRILLIC SMALL LETTER ES WITH DESCENDER", "CYRILLIC CAPITAL LETTER TE WITH DESCENDER", "CYRILLIC SMALL LETTER TE WITH DESCENDER", "CYRILLIC CAPITAL LETTER STRAIGHT U", "CYRILLIC SMALL LETTER STRAIGHT U", "CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE", "CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE", "CYRILLIC CAPITAL LETTER HA WITH DESCENDER", "CYRILLIC SMALL LETTER HA WITH DESCENDER", "CYRILLIC CAPITAL LIGATURE TE TSE", "CYRILLIC SMALL LIGATURE TE TSE", "CYRILLIC CAPITAL LETTER CHE WITH DESCENDER", "CYRILLIC SMALL LETTER CHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE", "CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE", "CYRILLIC CAPITAL LETTER SHHA", "CYRILLIC SMALL LETTER SHHA", "CYRILLIC CAPITAL LETTER ABKHASIAN CHE", "CYRILLIC SMALL LETTER ABKHASIAN CHE", "CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER", "CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER", "CYRILLIC LETTER PALOCHKA", "CYRILLIC CAPITAL LETTER ZHE WITH BREVE", "CYRILLIC SMALL LETTER ZHE WITH BREVE", "CYRILLIC CAPITAL LETTER KA WITH HOOK", "CYRILLIC SMALL LETTER KA WITH HOOK", "CYRILLIC CAPITAL LETTER EL WITH TAIL", "CYRILLIC SMALL LETTER EL WITH TAIL", "CYRILLIC CAPITAL LETTER EN WITH HOOK", "CYRILLIC SMALL LETTER EN WITH HOOK", "CYRILLIC CAPITAL LETTER EN WITH TAIL", "CYRILLIC SMALL LETTER EN WITH TAIL", "CYRILLIC CAPITAL LETTER KHAKASSIAN CHE", "CYRILLIC SMALL LETTER KHAKASSIAN CHE", "CYRILLIC CAPITAL LETTER EM WITH TAIL", "CYRILLIC SMALL LETTER EM WITH TAIL", "CYRILLIC SMALL LETTER PALOCHKA", "CYRILLIC CAPITAL LETTER A WITH BREVE", "CYRILLIC SMALL LETTER A WITH BREVE", "CYRILLIC CAPITAL LETTER A WITH DIAERESIS", "CYRILLIC SMALL LETTER A WITH DIAERESIS", "CYRILLIC CAPITAL LIGATURE A IE", "CYRILLIC SMALL LIGATURE A IE", "CYRILLIC CAPITAL LETTER IE WITH BREVE", "CYRILLIC SMALL LETTER IE WITH BREVE", "CYRILLIC CAPITAL LETTER SCHWA", "CYRILLIC SMALL LETTER SCHWA", "CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS", "CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS", "CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS", "CYRILLIC SMALL LETTER ZHE WITH DIAERESIS", "CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS", "CYRILLIC SMALL LETTER ZE WITH DIAERESIS", "CYRILLIC CAPITAL LETTER ABKHASIAN DZE", "CYRILLIC SMALL LETTER ABKHASIAN DZE", "CYRILLIC CAPITAL LETTER I WITH MACRON", "CYRILLIC SMALL LETTER I WITH MACRON", "CYRILLIC CAPITAL LETTER I WITH DIAERESIS", "CYRILLIC SMALL LETTER I WITH DIAERESIS", "CYRILLIC CAPITAL LETTER O WITH DIAERESIS", "CYRILLIC SMALL LETTER O WITH DIAERESIS", "CYRILLIC CAPITAL LETTER BARRED O", "CYRILLIC SMALL LETTER BARRED O", "CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS", "CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS", "CYRILLIC CAPITAL LETTER E WITH DIAERESIS", "CYRILLIC SMALL LETTER E WITH DIAERESIS", "CYRILLIC CAPITAL LETTER U WITH MACRON", "CYRILLIC SMALL LETTER U WITH MACRON", "CYRILLIC CAPITAL LETTER U WITH DIAERESIS", "CYRILLIC SMALL LETTER U WITH DIAERESIS", "CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE", "CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE", "CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS", "CYRILLIC SMALL LETTER CHE WITH DIAERESIS", "CYRILLIC CAPITAL LETTER GHE WITH DESCENDER", "CYRILLIC SMALL LETTER GHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS", "CYRILLIC SMALL LETTER YERU WITH DIAERESIS", "CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK", "CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK", "CYRILLIC CAPITAL LETTER HA WITH HOOK", "CYRILLIC SMALL LETTER HA WITH HOOK", "CYRILLIC CAPITAL LETTER HA WITH STROKE", "CYRILLIC SMALL LETTER HA WITH STROKE", "CYRILLIC CAPITAL LETTER KOMI DE", "CYRILLIC SMALL LETTER KOMI DE", "CYRILLIC CAPITAL LETTER KOMI DJE", "CYRILLIC SMALL LETTER KOMI DJE", "CYRILLIC CAPITAL LETTER KOMI ZJE", "CYRILLIC SMALL LETTER KOMI ZJE", "CYRILLIC CAPITAL LETTER KOMI DZJE", "CYRILLIC SMALL LETTER KOMI DZJE", "CYRILLIC CAPITAL LETTER KOMI LJE", "CYRILLIC SMALL LETTER KOMI LJE", "CYRILLIC CAPITAL LETTER KOMI NJE", "CYRILLIC SMALL LETTER KOMI NJE", "CYRILLIC CAPITAL LETTER KOMI SJE", "CYRILLIC SMALL LETTER KOMI SJE", "CYRILLIC CAPITAL LETTER KOMI TJE", "CYRILLIC SMALL LETTER KOMI TJE", "CYRILLIC CAPITAL LETTER REVERSED ZE", "CYRILLIC SMALL LETTER REVERSED ZE", "CYRILLIC CAPITAL LETTER EL WITH HOOK", "CYRILLIC SMALL LETTER EL WITH HOOK", "CYRILLIC CAPITAL LETTER LHA", "CYRILLIC SMALL LETTER LHA", "CYRILLIC CAPITAL LETTER RHA", "CYRILLIC SMALL LETTER RHA", "CYRILLIC CAPITAL LETTER YAE", "CYRILLIC SMALL LETTER YAE", "CYRILLIC CAPITAL LETTER QA", "CYRILLIC SMALL LETTER QA", "CYRILLIC CAPITAL LETTER WE", "CYRILLIC SMALL LETTER WE", "CYRILLIC CAPITAL LETTER ALEUT KA", "CYRILLIC SMALL LETTER ALEUT KA", "CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER PE WITH DESCENDER", "CYRILLIC SMALL LETTER PE WITH DESCENDER", "CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER", "CYRILLIC SMALL LETTER SHHA WITH DESCENDER", "CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK", "CYRILLIC SMALL LETTER EN WITH LEFT HOOK", "CYRILLIC CAPITAL LETTER DZZHE", "CYRILLIC SMALL LETTER DZZHE", "CYRILLIC CAPITAL LETTER DCHE", "CYRILLIC SMALL LETTER DCHE", "CYRILLIC CAPITAL LETTER EL WITH DESCENDER", "CYRILLIC SMALL LETTER EL WITH DESCENDER", "ARMENIAN CAPITAL LETTER AYB", "ARMENIAN CAPITAL LETTER BEN", "ARMENIAN CAPITAL LETTER GIM", "ARMENIAN CAPITAL LETTER DA", "ARMENIAN CAPITAL LETTER ECH", "ARMENIAN CAPITAL LETTER ZA", "ARMENIAN CAPITAL LETTER EH", "ARMENIAN CAPITAL LETTER ET", "ARMENIAN CAPITAL LETTER TO", "ARMENIAN CAPITAL LETTER ZHE", "ARMENIAN CAPITAL LETTER INI", "ARMENIAN CAPITAL LETTER LIWN", "ARMENIAN CAPITAL LETTER XEH", "ARMENIAN CAPITAL LETTER CA", "ARMENIAN CAPITAL LETTER KEN", "ARMENIAN CAPITAL LETTER HO", "ARMENIAN CAPITAL LETTER JA", "ARMENIAN CAPITAL LETTER GHAD", "ARMENIAN CAPITAL LETTER CHEH", "ARMENIAN CAPITAL LETTER MEN", "ARMENIAN CAPITAL LETTER YI", "ARMENIAN CAPITAL LETTER NOW", "ARMENIAN CAPITAL LETTER SHA", "ARMENIAN CAPITAL LETTER VO", "ARMENIAN CAPITAL LETTER CHA", "ARMENIAN CAPITAL LETTER PEH", "ARMENIAN CAPITAL LETTER JHEH", "ARMENIAN CAPITAL LETTER RA", "ARMENIAN CAPITAL LETTER SEH", "ARMENIAN CAPITAL LETTER VEW", "ARMENIAN CAPITAL LETTER TIWN", "ARMENIAN CAPITAL LETTER REH", "ARMENIAN CAPITAL LETTER CO", "ARMENIAN CAPITAL LETTER YIWN", "ARMENIAN CAPITAL LETTER PIWR", "ARMENIAN CAPITAL LETTER KEH", "ARMENIAN CAPITAL LETTER OH", "ARMENIAN CAPITAL LETTER FEH", "ARMENIAN MODIFIER LETTER LEFT HALF RING", "ARMENIAN APOSTROPHE", "ARMENIAN EMPHASIS MARK", "ARMENIAN EXCLAMATION MARK", "ARMENIAN COMMA", "ARMENIAN QUESTION MARK", "ARMENIAN ABBREVIATION MARK", "ARMENIAN SMALL LETTER TURNED AYB", "ARMENIAN SMALL LETTER AYB", "ARMENIAN SMALL LETTER BEN", "ARMENIAN SMALL LETTER GIM", "ARMENIAN SMALL LETTER DA", "ARMENIAN SMALL LETTER ECH", "ARMENIAN SMALL LETTER ZA", "ARMENIAN SMALL LETTER EH", "ARMENIAN SMALL LETTER ET", "ARMENIAN SMALL LETTER TO", "ARMENIAN SMALL LETTER ZHE", "ARMENIAN SMALL LETTER INI", "ARMENIAN SMALL LETTER LIWN", "ARMENIAN SMALL LETTER XEH", "ARMENIAN SMALL LETTER CA", "ARMENIAN SMALL LETTER KEN", "ARMENIAN SMALL LETTER HO", "ARMENIAN SMALL LETTER JA", "ARMENIAN SMALL LETTER GHAD", "ARMENIAN SMALL LETTER CHEH", "ARMENIAN SMALL LETTER MEN", "ARMENIAN SMALL LETTER YI", "ARMENIAN SMALL LETTER NOW", "ARMENIAN SMALL LETTER SHA", "ARMENIAN SMALL LETTER VO", "ARMENIAN SMALL LETTER CHA", "ARMENIAN SMALL LETTER PEH", "ARMENIAN SMALL LETTER JHEH", "ARMENIAN SMALL LETTER RA", "ARMENIAN SMALL LETTER SEH", "ARMENIAN SMALL LETTER VEW", "ARMENIAN SMALL LETTER TIWN", "ARMENIAN SMALL LETTER REH", "ARMENIAN SMALL LETTER CO", "ARMENIAN SMALL LETTER YIWN", "ARMENIAN SMALL LETTER PIWR", "ARMENIAN SMALL LETTER KEH", "ARMENIAN SMALL LETTER OH", "ARMENIAN SMALL LETTER FEH", "ARMENIAN SMALL LIGATURE ECH YIWN", "ARMENIAN SMALL LETTER YI WITH STROKE", "ARMENIAN FULL STOP", "ARMENIAN HYPHEN", "RIGHT-FACING ARMENIAN ETERNITY SIGN", "LEFT-FACING ARMENIAN ETERNITY SIGN", "ARMENIAN DRAM SIGN", "HEBREW ACCENT ETNAHTA", "HEBREW ACCENT SEGOL", "HEBREW ACCENT SHALSHELET", "HEBREW ACCENT ZAQEF QATAN", "HEBREW ACCENT ZAQEF GADOL", "HEBREW ACCENT TIPEHA", "HEBREW ACCENT REVIA", "HEBREW ACCENT ZARQA", "HEBREW ACCENT PASHTA", "HEBREW ACCENT YETIV", "HEBREW ACCENT TEVIR", "HEBREW ACCENT GERESH", "HEBREW ACCENT GERESH MUQDAM", "HEBREW ACCENT GERSHAYIM", "HEBREW ACCENT QARNEY PARA", "HEBREW ACCENT TELISHA GEDOLA", "HEBREW ACCENT PAZER", "HEBREW ACCENT ATNAH HAFUKH", "HEBREW ACCENT MUNAH", "HEBREW ACCENT MAHAPAKH", "HEBREW ACCENT MERKHA", "HEBREW ACCENT MERKHA KEFULA", "HEBREW ACCENT DARGA", "HEBREW ACCENT QADMA", "HEBREW ACCENT TELISHA QETANA", "HEBREW ACCENT YERAH BEN YOMO", "HEBREW ACCENT OLE", "HEBREW ACCENT ILUY", "HEBREW ACCENT DEHI", "HEBREW ACCENT ZINOR", "HEBREW MARK MASORA CIRCLE", "HEBREW POINT SHEVA", "HEBREW POINT HATAF SEGOL", "HEBREW POINT HATAF PATAH", "HEBREW POINT HATAF QAMATS", "HEBREW POINT HIRIQ", "HEBREW POINT TSERE", "HEBREW POINT SEGOL", "HEBREW POINT PATAH", "HEBREW POINT QAMATS", "HEBREW POINT HOLAM", "HEBREW POINT HOLAM HASER FOR VAV", "HEBREW POINT QUBUTS", "HEBREW POINT DAGESH OR MAPIQ", "HEBREW POINT METEG", "HEBREW PUNCTUATION MAQAF", "HEBREW POINT RAFE", "HEBREW PUNCTUATION PASEQ", "HEBREW POINT SHIN DOT", "HEBREW POINT SIN DOT", "HEBREW PUNCTUATION SOF PASUQ", "HEBREW MARK UPPER DOT", "HEBREW MARK LOWER DOT", "HEBREW PUNCTUATION NUN HAFUKHA", "HEBREW POINT QAMATS QATAN", "HEBREW LETTER ALEF", "HEBREW LETTER BET", "HEBREW LETTER GIMEL", "HEBREW LETTER DALET", "HEBREW LETTER HE", "HEBREW LETTER VAV", "HEBREW LETTER ZAYIN", "HEBREW LETTER HET", "HEBREW LETTER TET", "HEBREW LETTER YOD", "HEBREW LETTER FINAL KAF", "HEBREW LETTER KAF", "HEBREW LETTER LAMED", "HEBREW LETTER FINAL MEM", "HEBREW LETTER MEM", "HEBREW LETTER FINAL NUN", "HEBREW LETTER NUN", "HEBREW LETTER SAMEKH", "HEBREW LETTER AYIN", "HEBREW LETTER FINAL PE", "HEBREW LETTER PE", "HEBREW LETTER FINAL TSADI", "HEBREW LETTER TSADI", "HEBREW LETTER QOF", "HEBREW LETTER RESH", "HEBREW LETTER SHIN", "HEBREW LETTER TAV", "HEBREW YOD TRIANGLE", "HEBREW LIGATURE YIDDISH DOUBLE VAV", "HEBREW LIGATURE YIDDISH VAV YOD", "HEBREW LIGATURE YIDDISH DOUBLE YOD", "HEBREW PUNCTUATION GERESH", "HEBREW PUNCTUATION GERSHAYIM", "ARABIC NUMBER SIGN", "ARABIC SIGN SANAH", "ARABIC FOOTNOTE MARKER", "ARABIC SIGN SAFHA", "ARABIC SIGN SAMVAT", "ARABIC NUMBER MARK ABOVE", "ARABIC-INDIC CUBE ROOT", "ARABIC-INDIC FOURTH ROOT", "ARABIC RAY", "ARABIC-INDIC PER MILLE SIGN", "ARABIC-INDIC PER TEN THOUSAND SIGN", "AFGHANI SIGN", "ARABIC COMMA", "ARABIC DATE SEPARATOR", "ARABIC POETIC VERSE SIGN", "ARABIC SIGN MISRA", "ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM", "ARABIC SIGN ALAYHE ASSALLAM", "ARABIC SIGN RAHMATULLAH ALAYHE", "ARABIC SIGN RADI ALLAHOU ANHU", "ARABIC SIGN TAKHALLUS", "ARABIC SMALL HIGH TAH", "ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH", "ARABIC SMALL HIGH ZAIN", "ARABIC SMALL FATHA", "ARABIC SMALL DAMMA", "ARABIC SMALL KASRA", "ARABIC SEMICOLON", "ARABIC LETTER MARK", "ARABIC TRIPLE DOT PUNCTUATION MARK", "ARABIC QUESTION MARK", "ARABIC LETTER KASHMIRI YEH", "ARABIC LETTER HAMZA", "ARABIC LETTER ALEF WITH MADDA ABOVE", "ARABIC LETTER ALEF WITH HAMZA ABOVE", "ARABIC LETTER WAW WITH HAMZA ABOVE", "ARABIC LETTER ALEF WITH HAMZA BELOW", "ARABIC LETTER YEH WITH HAMZA ABOVE", "ARABIC LETTER ALEF", "ARABIC LETTER BEH", "ARABIC LETTER TEH MARBUTA", "ARABIC LETTER TEH", "ARABIC LETTER THEH", "ARABIC LETTER JEEM", "ARABIC LETTER HAH", "ARABIC LETTER KHAH", "ARABIC LETTER DAL", "ARABIC LETTER THAL", "ARABIC LETTER REH", "ARABIC LETTER ZAIN", "ARABIC LETTER SEEN", "ARABIC LETTER SHEEN", "ARABIC LETTER SAD", "ARABIC LETTER DAD", "ARABIC LETTER TAH", "ARABIC LETTER ZAH", "ARABIC LETTER AIN", "ARABIC LETTER GHAIN", "ARABIC LETTER KEHEH WITH TWO DOTS ABOVE", "ARABIC LETTER KEHEH WITH THREE DOTS BELOW", "ARABIC LETTER FARSI YEH WITH INVERTED V", "ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE", "ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE", "ARABIC TATWEEL", "ARABIC LETTER FEH", "ARABIC LETTER QAF", "ARABIC LETTER KAF", "ARABIC LETTER LAM", "ARABIC LETTER MEEM", "ARABIC LETTER NOON", "ARABIC LETTER HEH", "ARABIC LETTER WAW", "ARABIC LETTER ALEF MAKSURA", "ARABIC LETTER YEH", "ARABIC FATHATAN", "ARABIC DAMMATAN", "ARABIC KASRATAN", "ARABIC FATHA", "ARABIC DAMMA", "ARABIC KASRA", "ARABIC SHADDA", "ARABIC SUKUN", "ARABIC MADDAH ABOVE", "ARABIC HAMZA ABOVE", "ARABIC HAMZA BELOW", "ARABIC SUBSCRIPT ALEF", "ARABIC INVERTED DAMMA", "ARABIC MARK NOON GHUNNA", "ARABIC ZWARAKAY", "ARABIC VOWEL SIGN SMALL V ABOVE", "ARABIC VOWEL SIGN INVERTED SMALL V ABOVE", "ARABIC VOWEL SIGN DOT BELOW", "ARABIC REVERSED DAMMA", "ARABIC FATHA WITH TWO DOTS", "ARABIC WAVY HAMZA BELOW", "ARABIC-INDIC DIGIT ZERO", "ARABIC-INDIC DIGIT ONE", "ARABIC-INDIC DIGIT TWO", "ARABIC-INDIC DIGIT THREE", "ARABIC-INDIC DIGIT FOUR", "ARABIC-INDIC DIGIT FIVE", "ARABIC-INDIC DIGIT SIX", "ARABIC-INDIC DIGIT SEVEN", "ARABIC-INDIC DIGIT EIGHT", "ARABIC-INDIC DIGIT NINE", "ARABIC PERCENT SIGN", "ARABIC DECIMAL SEPARATOR", "ARABIC THOUSANDS SEPARATOR", "ARABIC FIVE POINTED STAR", "ARABIC LETTER DOTLESS BEH", "ARABIC LETTER DOTLESS QAF", "ARABIC LETTER SUPERSCRIPT ALEF", "ARABIC LETTER ALEF WASLA", "ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE", "ARABIC LETTER ALEF WITH WAVY HAMZA BELOW", "ARABIC LETTER HIGH HAMZA", "ARABIC LETTER HIGH HAMZA ALEF", "ARABIC LETTER HIGH HAMZA WAW", "ARABIC LETTER U WITH HAMZA ABOVE", "ARABIC LETTER HIGH HAMZA YEH", "ARABIC LETTER TTEH", "ARABIC LETTER TTEHEH", "ARABIC LETTER BEEH", "ARABIC LETTER TEH WITH RING", "ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS", "ARABIC LETTER PEH", "ARABIC LETTER TEHEH", "ARABIC LETTER BEHEH", "ARABIC LETTER HAH WITH HAMZA ABOVE", "ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE", "ARABIC LETTER NYEH", "ARABIC LETTER DYEH", "ARABIC LETTER HAH WITH THREE DOTS ABOVE", "ARABIC LETTER TCHEH", "ARABIC LETTER TCHEHEH", "ARABIC LETTER DDAL", "ARABIC LETTER DAL WITH RING", "ARABIC LETTER DAL WITH DOT BELOW", "ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH", "ARABIC LETTER DAHAL", "ARABIC LETTER DDAHAL", "ARABIC LETTER DUL", "ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS", "ARABIC LETTER DAL WITH FOUR DOTS ABOVE", "ARABIC LETTER RREH", "ARABIC LETTER REH WITH SMALL V", "ARABIC LETTER REH WITH RING", "ARABIC LETTER REH WITH DOT BELOW", "ARABIC LETTER REH WITH SMALL V BELOW", "ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE", "ARABIC LETTER REH WITH TWO DOTS ABOVE", "ARABIC LETTER JEH", "ARABIC LETTER REH WITH FOUR DOTS ABOVE", "ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE", "ARABIC LETTER SEEN WITH THREE DOTS BELOW", "ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE", "ARABIC LETTER SAD WITH TWO DOTS BELOW", "ARABIC LETTER SAD WITH THREE DOTS ABOVE", "ARABIC LETTER TAH WITH THREE DOTS ABOVE", "ARABIC LETTER AIN WITH THREE DOTS ABOVE", "ARABIC LETTER DOTLESS FEH", "ARABIC LETTER FEH WITH DOT MOVED BELOW", "ARABIC LETTER FEH WITH DOT BELOW", "ARABIC LETTER VEH", "ARABIC LETTER FEH WITH THREE DOTS BELOW", "ARABIC LETTER PEHEH", "ARABIC LETTER QAF WITH DOT ABOVE", "ARABIC LETTER QAF WITH THREE DOTS ABOVE", "ARABIC LETTER KEHEH", "ARABIC LETTER SWASH KAF", "ARABIC LETTER KAF WITH RING", "ARABIC LETTER KAF WITH DOT ABOVE", "ARABIC LETTER NG", "ARABIC LETTER KAF WITH THREE DOTS BELOW", "ARABIC LETTER GAF", "ARABIC LETTER GAF WITH RING", "ARABIC LETTER NGOEH", "ARABIC LETTER GAF WITH TWO DOTS BELOW", "ARABIC LETTER GUEH", "ARABIC LETTER GAF WITH THREE DOTS ABOVE", "ARABIC LETTER LAM WITH SMALL V", "ARABIC LETTER LAM WITH DOT ABOVE", "ARABIC LETTER LAM WITH THREE DOTS ABOVE", "ARABIC LETTER LAM WITH THREE DOTS BELOW", "ARABIC LETTER NOON WITH DOT BELOW", "ARABIC LETTER NOON GHUNNA", "ARABIC LETTER RNOON", "ARABIC LETTER NOON WITH RING", "ARABIC LETTER NOON WITH THREE DOTS ABOVE", "ARABIC LETTER HEH DOACHASHMEE", "ARABIC LETTER TCHEH WITH DOT ABOVE", "ARABIC LETTER HEH WITH YEH ABOVE", "ARABIC LETTER HEH GOAL", "ARABIC LETTER HEH GOAL WITH HAMZA ABOVE", "ARABIC LETTER TEH MARBUTA GOAL", "ARABIC LETTER WAW WITH RING", "ARABIC LETTER KIRGHIZ OE", "ARABIC LETTER OE", "ARABIC LETTER U", "ARABIC LETTER YU", "ARABIC LETTER KIRGHIZ YU", "ARABIC LETTER WAW WITH TWO DOTS ABOVE", "ARABIC LETTER VE", "ARABIC LETTER FARSI YEH", "ARABIC LETTER YEH WITH TAIL", "ARABIC LETTER YEH WITH SMALL V", "ARABIC LETTER WAW WITH DOT ABOVE", "ARABIC LETTER E", "ARABIC LETTER YEH WITH THREE DOTS BELOW", "ARABIC LETTER YEH BARREE", "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE", "ARABIC FULL STOP", "ARABIC LETTER AE", "ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA", "ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA", "ARABIC SMALL HIGH MEEM INITIAL FORM", "ARABIC SMALL HIGH LAM ALEF", "ARABIC SMALL HIGH JEEM", "ARABIC SMALL HIGH THREE DOTS", "ARABIC SMALL HIGH SEEN", "ARABIC END OF AYAH", "ARABIC START OF RUB EL HIZB", "ARABIC SMALL HIGH ROUNDED ZERO", "ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO", "ARABIC SMALL HIGH DOTLESS HEAD OF KHAH", "ARABIC SMALL HIGH MEEM ISOLATED FORM", "ARABIC SMALL LOW SEEN", "ARABIC SMALL HIGH MADDA", "ARABIC SMALL WAW", "ARABIC SMALL YEH", "ARABIC SMALL HIGH YEH", "ARABIC SMALL HIGH NOON", "ARABIC PLACE OF SAJDAH", "ARABIC EMPTY CENTRE LOW STOP", "ARABIC EMPTY CENTRE HIGH STOP", "ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE", "ARABIC SMALL LOW MEEM", "ARABIC LETTER DAL WITH INVERTED V", "ARABIC LETTER REH WITH INVERTED V", "EXTENDED ARABIC-INDIC DIGIT ZERO", "EXTENDED ARABIC-INDIC DIGIT ONE", "EXTENDED ARABIC-INDIC DIGIT TWO", "EXTENDED ARABIC-INDIC DIGIT THREE", "EXTENDED ARABIC-INDIC DIGIT FOUR", "EXTENDED ARABIC-INDIC DIGIT FIVE", "EXTENDED ARABIC-INDIC DIGIT SIX", "EXTENDED ARABIC-INDIC DIGIT SEVEN", "EXTENDED ARABIC-INDIC DIGIT EIGHT", "EXTENDED ARABIC-INDIC DIGIT NINE", "ARABIC LETTER SHEEN WITH DOT BELOW", "ARABIC LETTER DAD WITH DOT BELOW", "ARABIC LETTER GHAIN WITH DOT BELOW", "ARABIC SIGN SINDHI AMPERSAND", "ARABIC SIGN SINDHI POSTPOSITION MEN", "ARABIC LETTER HEH WITH INVERTED V", "SYRIAC END OF PARAGRAPH", "SYRIAC SUPRALINEAR FULL STOP", "SYRIAC SUBLINEAR FULL STOP", "SYRIAC SUPRALINEAR COLON", "SYRIAC SUBLINEAR COLON", "SYRIAC HORIZONTAL COLON", "SYRIAC COLON SKEWED LEFT", "SYRIAC COLON SKEWED RIGHT", "SYRIAC SUPRALINEAR COLON SKEWED LEFT", "SYRIAC SUBLINEAR COLON SKEWED RIGHT", "SYRIAC CONTRACTION", "SYRIAC HARKLEAN OBELUS", "SYRIAC HARKLEAN METOBELUS", "SYRIAC HARKLEAN ASTERISCUS", "SYRIAC ABBREVIATION MARK", "SYRIAC LETTER ALAPH", "SYRIAC LETTER SUPERSCRIPT ALAPH", "SYRIAC LETTER BETH", "SYRIAC LETTER GAMAL", "SYRIAC LETTER GAMAL GARSHUNI", "SYRIAC LETTER DALATH", "SYRIAC LETTER DOTLESS DALATH RISH", "SYRIAC LETTER HE", "SYRIAC LETTER WAW", "SYRIAC LETTER ZAIN", "SYRIAC LETTER HETH", "SYRIAC LETTER TETH", "SYRIAC LETTER TETH GARSHUNI", "SYRIAC LETTER YUDH", "SYRIAC LETTER YUDH HE", "SYRIAC LETTER KAPH", "SYRIAC LETTER LAMADH", "SYRIAC LETTER MIM", "SYRIAC LETTER NUN", "SYRIAC LETTER SEMKATH", "SYRIAC LETTER FINAL SEMKATH", "SYRIAC LETTER E", "SYRIAC LETTER PE", "SYRIAC LETTER REVERSED PE", "SYRIAC LETTER SADHE", "SYRIAC LETTER QAPH", "SYRIAC LETTER RISH", "SYRIAC LETTER SHIN", "SYRIAC LETTER TAW", "SYRIAC LETTER PERSIAN BHETH", "SYRIAC LETTER PERSIAN GHAMAL", "SYRIAC LETTER PERSIAN DHALATH", "SYRIAC PTHAHA ABOVE", "SYRIAC PTHAHA BELOW", "SYRIAC PTHAHA DOTTED", "SYRIAC ZQAPHA ABOVE", "SYRIAC ZQAPHA BELOW", "SYRIAC ZQAPHA DOTTED", "SYRIAC RBASA ABOVE", "SYRIAC RBASA BELOW", "SYRIAC DOTTED ZLAMA HORIZONTAL", "SYRIAC DOTTED ZLAMA ANGULAR", "SYRIAC HBASA ABOVE", "SYRIAC HBASA BELOW", "SYRIAC HBASA-ESASA DOTTED", "SYRIAC ESASA ABOVE", "SYRIAC ESASA BELOW", "SYRIAC RWAHA", "SYRIAC FEMININE DOT", "SYRIAC QUSHSHAYA", "SYRIAC RUKKAKHA", "SYRIAC TWO VERTICAL DOTS ABOVE", "SYRIAC TWO VERTICAL DOTS BELOW", "SYRIAC THREE DOTS ABOVE", "SYRIAC THREE DOTS BELOW", "SYRIAC OBLIQUE LINE ABOVE", "SYRIAC OBLIQUE LINE BELOW", "SYRIAC MUSIC", "SYRIAC BARREKH", "SYRIAC LETTER SOGDIAN ZHAIN", "SYRIAC LETTER SOGDIAN KHAPH", "SYRIAC LETTER SOGDIAN FE", "ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW", "ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE", "ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW", "ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE", "ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE", "ARABIC LETTER BEH WITH INVERTED SMALL V BELOW", "ARABIC LETTER BEH WITH SMALL V", "ARABIC LETTER HAH WITH TWO DOTS ABOVE", "ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW", "ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH", "ARABIC LETTER DAL WITH INVERTED SMALL V BELOW", "ARABIC LETTER REH WITH STROKE", "ARABIC LETTER SEEN WITH FOUR DOTS ABOVE", "ARABIC LETTER AIN WITH TWO DOTS ABOVE", "ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE", "ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE", "ARABIC LETTER FEH WITH TWO DOTS BELOW", "ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW", "ARABIC LETTER KEHEH WITH DOT ABOVE", "ARABIC LETTER KEHEH WITH THREE DOTS ABOVE", "ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW", "ARABIC LETTER MEEM WITH DOT ABOVE", "ARABIC LETTER MEEM WITH DOT BELOW", "ARABIC LETTER NOON WITH TWO DOTS BELOW", "ARABIC LETTER NOON WITH SMALL TAH", "ARABIC LETTER NOON WITH SMALL V", "ARABIC LETTER LAM WITH BAR", "ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE", "ARABIC LETTER REH WITH HAMZA ABOVE", "ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE", "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW", "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS", "ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS", "ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS", "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE", "ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", "ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW", "ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", "ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", "ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE", "ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE", "ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW", "ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE", "ARABIC LETTER SEEN WITH INVERTED V", "ARABIC LETTER KAF WITH TWO DOTS ABOVE", "THAANA LETTER HAA", "THAANA LETTER SHAVIYANI", "THAANA LETTER NOONU", "THAANA LETTER RAA", "THAANA LETTER BAA", "THAANA LETTER LHAVIYANI", "THAANA LETTER KAAFU", "THAANA LETTER ALIFU", "THAANA LETTER VAAVU", "THAANA LETTER MEEMU", "THAANA LETTER FAAFU", "THAANA LETTER DHAALU", "THAANA LETTER THAA", "THAANA LETTER LAAMU", "THAANA LETTER GAAFU", "THAANA LETTER GNAVIYANI", "THAANA LETTER SEENU", "THAANA LETTER DAVIYANI", "THAANA LETTER ZAVIYANI", "THAANA LETTER TAVIYANI", "THAANA LETTER YAA", "THAANA LETTER PAVIYANI", "THAANA LETTER JAVIYANI", "THAANA LETTER CHAVIYANI", "THAANA LETTER TTAA", "THAANA LETTER HHAA", "THAANA LETTER KHAA", "THAANA LETTER THAALU", "THAANA LETTER ZAA", "THAANA LETTER SHEENU", "THAANA LETTER SAADHU", "THAANA LETTER DAADHU", "THAANA LETTER TO", "THAANA LETTER ZO", "THAANA LETTER AINU", "THAANA LETTER GHAINU", "THAANA LETTER QAAFU", "THAANA LETTER WAAVU", "THAANA ABAFILI", "THAANA AABAAFILI", "THAANA IBIFILI", "THAANA EEBEEFILI", "THAANA UBUFILI", "THAANA OOBOOFILI", "THAANA EBEFILI", "THAANA EYBEYFILI", "THAANA OBOFILI", "THAANA OABOAFILI", "THAANA SUKUN", "THAANA LETTER NAA", "NKO DIGIT ZERO", "NKO DIGIT ONE", "NKO DIGIT TWO", "NKO DIGIT THREE", "NKO DIGIT FOUR", "NKO DIGIT FIVE", "NKO DIGIT SIX", "NKO DIGIT SEVEN", "NKO DIGIT EIGHT", "NKO DIGIT NINE", "NKO LETTER A", "NKO LETTER EE", "NKO LETTER I", "NKO LETTER E", "NKO LETTER U", "NKO LETTER OO", "NKO LETTER O", "NKO LETTER DAGBASINNA", "NKO LETTER N", "NKO LETTER BA", "NKO LETTER PA", "NKO LETTER TA", "NKO LETTER JA", "NKO LETTER CHA", "NKO LETTER DA", "NKO LETTER RA", "NKO LETTER RRA", "NKO LETTER SA", "NKO LETTER GBA", "NKO LETTER FA", "NKO LETTER KA", "NKO LETTER LA", "NKO LETTER NA WOLOSO", "NKO LETTER MA", "NKO LETTER NYA", "NKO LETTER NA", "NKO LETTER HA", "NKO LETTER WA", "NKO LETTER YA", "NKO LETTER NYA WOLOSO", "NKO LETTER JONA JA", "NKO LETTER JONA CHA", "NKO LETTER JONA RA", "NKO COMBINING SHORT HIGH TONE", "NKO COMBINING SHORT LOW TONE", "NKO COMBINING SHORT RISING TONE", "NKO COMBINING LONG DESCENDING TONE", "NKO COMBINING LONG HIGH TONE", "NKO COMBINING LONG LOW TONE", "NKO COMBINING LONG RISING TONE", "NKO COMBINING NASALIZATION MARK", "NKO COMBINING DOUBLE DOT ABOVE", "NKO HIGH TONE APOSTROPHE", "NKO LOW TONE APOSTROPHE", "NKO SYMBOL OO DENNEN", "NKO SYMBOL GBAKURUNEN", "NKO COMMA", "NKO EXCLAMATION MARK", "NKO LAJANYALAN", "NKO DANTAYALAN", "NKO DOROME SIGN", "NKO TAMAN SIGN", "SAMARITAN LETTER ALAF", "SAMARITAN LETTER BIT", "SAMARITAN LETTER GAMAN", "SAMARITAN LETTER DALAT", "SAMARITAN LETTER IY", "SAMARITAN LETTER BAA", "SAMARITAN LETTER ZEN", "SAMARITAN LETTER IT", "SAMARITAN LETTER TIT", "SAMARITAN LETTER YUT", "SAMARITAN LETTER KAAF", "SAMARITAN LETTER LABAT", "SAMARITAN LETTER MIM", "SAMARITAN LETTER NUN", "SAMARITAN LETTER SINGAAT", "SAMARITAN LETTER IN", "SAMARITAN LETTER FI", "SAMARITAN LETTER TSAADIY", "SAMARITAN LETTER QUF", "SAMARITAN LETTER RISH", "SAMARITAN LETTER SHAN", "SAMARITAN LETTER TAAF", "SAMARITAN MARK IN", "SAMARITAN MARK IN-ALAF", "SAMARITAN MARK OCCLUSION", "SAMARITAN MARK DAGESH", "SAMARITAN MODIFIER LETTER EPENTHETIC YUT", "SAMARITAN MARK EPENTHETIC YUT", "SAMARITAN VOWEL SIGN LONG E", "SAMARITAN VOWEL SIGN E", "SAMARITAN VOWEL SIGN OVERLONG AA", "SAMARITAN VOWEL SIGN LONG AA", "SAMARITAN VOWEL SIGN AA", "SAMARITAN VOWEL SIGN OVERLONG A", "SAMARITAN VOWEL SIGN LONG A", "SAMARITAN VOWEL SIGN A", "SAMARITAN MODIFIER LETTER SHORT A", "SAMARITAN VOWEL SIGN SHORT A", "SAMARITAN VOWEL SIGN LONG U", "SAMARITAN VOWEL SIGN U", "SAMARITAN MODIFIER LETTER I", "SAMARITAN VOWEL SIGN LONG I", "SAMARITAN VOWEL SIGN I", "SAMARITAN VOWEL SIGN O", "SAMARITAN VOWEL SIGN SUKUN", "SAMARITAN MARK NEQUDAA", "SAMARITAN PUNCTUATION NEQUDAA", "SAMARITAN PUNCTUATION AFSAAQ", "SAMARITAN PUNCTUATION ANGED", "SAMARITAN PUNCTUATION BAU", "SAMARITAN PUNCTUATION ATMAAU", "SAMARITAN PUNCTUATION SHIYYAALAA", "SAMARITAN ABBREVIATION MARK", "SAMARITAN PUNCTUATION MELODIC QITSA", "SAMARITAN PUNCTUATION ZIQAA", "SAMARITAN PUNCTUATION QITSA", "SAMARITAN PUNCTUATION ZAEF", "SAMARITAN PUNCTUATION TURU", "SAMARITAN PUNCTUATION ARKAANU", "SAMARITAN PUNCTUATION SOF MASHFAAT", "SAMARITAN PUNCTUATION ANNAAU", "MANDAIC LETTER HALQA", "MANDAIC LETTER AB", "MANDAIC LETTER AG", "MANDAIC LETTER AD", "MANDAIC LETTER AH", "MANDAIC LETTER USHENNA", "MANDAIC LETTER AZ", "MANDAIC LETTER IT", "MANDAIC LETTER ATT", "MANDAIC LETTER AKSA", "MANDAIC LETTER AK", "MANDAIC LETTER AL", "MANDAIC LETTER AM", "MANDAIC LETTER AN", "MANDAIC LETTER AS", "MANDAIC LETTER IN", "MANDAIC LETTER AP", "MANDAIC LETTER ASZ", "MANDAIC LETTER AQ", "MANDAIC LETTER AR", "MANDAIC LETTER ASH", "MANDAIC LETTER AT", "MANDAIC LETTER DUSHENNA", "MANDAIC LETTER KAD", "MANDAIC LETTER AIN", "MANDAIC AFFRICATION MARK", "MANDAIC VOCALIZATION MARK", "MANDAIC GEMINATION MARK", "MANDAIC PUNCTUATION", "SYRIAC LETTER MALAYALAM NGA", "SYRIAC LETTER MALAYALAM JA", "SYRIAC LETTER MALAYALAM NYA", "SYRIAC LETTER MALAYALAM TTA", "SYRIAC LETTER MALAYALAM NNA", "SYRIAC LETTER MALAYALAM NNNA", "SYRIAC LETTER MALAYALAM BHA", "SYRIAC LETTER MALAYALAM RA", "SYRIAC LETTER MALAYALAM LLA", "SYRIAC LETTER MALAYALAM LLLA", "SYRIAC LETTER MALAYALAM SSA", "ARABIC LETTER BEH WITH SMALL V BELOW", "ARABIC LETTER BEH WITH HAMZA ABOVE", "ARABIC LETTER JEEM WITH TWO DOTS ABOVE", "ARABIC LETTER TAH WITH TWO DOTS ABOVE", "ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE", "ARABIC LETTER QAF WITH DOT BELOW", "ARABIC LETTER LAM WITH DOUBLE BAR", "ARABIC LETTER MEEM WITH THREE DOTS ABOVE", "ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE", "ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE", "ARABIC LETTER REH WITH LOOP", "ARABIC LETTER WAW WITH DOT WITHIN", "ARABIC LETTER ROHINGYA YEH", "ARABIC LETTER LOW ALEF", "ARABIC LETTER DAL WITH THREE DOTS BELOW", "ARABIC LETTER SAD WITH THREE DOTS BELOW", "ARABIC LETTER GAF WITH INVERTED STROKE", "ARABIC LETTER STRAIGHT WAW", "ARABIC LETTER ZAIN WITH INVERTED V ABOVE", "ARABIC LETTER AIN WITH THREE DOTS BELOW", "ARABIC LETTER KAF WITH DOT BELOW", "ARABIC LETTER BEH WITH SMALL MEEM ABOVE", "ARABIC LETTER PEH WITH SMALL MEEM ABOVE", "ARABIC LETTER TEH WITH SMALL TEH ABOVE", "ARABIC LETTER REH WITH SMALL NOON ABOVE", "ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE", "ARABIC LETTER AFRICAN FEH", "ARABIC LETTER AFRICAN QAF", "ARABIC LETTER AFRICAN NOON", "ARABIC SMALL LOW WAW", "ARABIC SMALL HIGH WORD AR-RUB", "ARABIC SMALL HIGH SAD", "ARABIC SMALL HIGH AIN", "ARABIC SMALL HIGH QAF", "ARABIC SMALL HIGH NOON WITH KASRA", "ARABIC SMALL LOW NOON WITH KASRA", "ARABIC SMALL HIGH WORD ATH-THALATHA", "ARABIC SMALL HIGH WORD AS-SAJDA", "ARABIC SMALL HIGH WORD AN-NISF", "ARABIC SMALL HIGH WORD SAKTA", "ARABIC SMALL HIGH WORD QIF", "ARABIC SMALL HIGH WORD WAQFA", "ARABIC SMALL HIGH FOOTNOTE MARKER", "ARABIC SMALL HIGH SIGN SAFHA", "ARABIC DISPUTED END OF AYAH", "ARABIC TURNED DAMMA BELOW", "ARABIC CURLY FATHA", "ARABIC CURLY DAMMA", "ARABIC CURLY KASRA", "ARABIC CURLY FATHATAN", "ARABIC CURLY DAMMATAN", "ARABIC CURLY KASRATAN", "ARABIC TONE ONE DOT ABOVE", "ARABIC TONE TWO DOTS ABOVE", "ARABIC TONE LOOP ABOVE", "ARABIC TONE ONE DOT BELOW", "ARABIC TONE TWO DOTS BELOW", "ARABIC TONE LOOP BELOW", "ARABIC OPEN FATHATAN", "ARABIC OPEN DAMMATAN", "ARABIC OPEN KASRATAN", "ARABIC SMALL HIGH WAW", "ARABIC FATHA WITH RING", "ARABIC FATHA WITH DOT ABOVE", "ARABIC KASRA WITH DOT BELOW", "ARABIC LEFT ARROWHEAD ABOVE", "ARABIC RIGHT ARROWHEAD ABOVE", "ARABIC LEFT ARROWHEAD BELOW", "ARABIC RIGHT ARROWHEAD BELOW", "ARABIC DOUBLE RIGHT ARROWHEAD ABOVE", "ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT", "ARABIC RIGHT ARROWHEAD ABOVE WITH DOT", "ARABIC DAMMA WITH DOT", "ARABIC MARK SIDEWAYS NOON GHUNNA", "DEVANAGARI SIGN INVERTED CANDRABINDU", "DEVANAGARI SIGN CANDRABINDU", "DEVANAGARI SIGN ANUSVARA", "DEVANAGARI SIGN VISARGA", "DEVANAGARI LETTER SHORT A", "DEVANAGARI LETTER A", "DEVANAGARI LETTER AA", "DEVANAGARI LETTER I", "DEVANAGARI LETTER II", "DEVANAGARI LETTER U", "DEVANAGARI LETTER UU", "DEVANAGARI LETTER VOCALIC R", "DEVANAGARI LETTER VOCALIC L", "DEVANAGARI LETTER CANDRA E", "DEVANAGARI LETTER SHORT E", "DEVANAGARI LETTER E", "DEVANAGARI LETTER AI", "DEVANAGARI LETTER CANDRA O", "DEVANAGARI LETTER SHORT O", "DEVANAGARI LETTER O", "DEVANAGARI LETTER AU", "DEVANAGARI LETTER KA", "DEVANAGARI LETTER KHA", "DEVANAGARI LETTER GA", "DEVANAGARI LETTER GHA", "DEVANAGARI LETTER NGA", "DEVANAGARI LETTER CA", "DEVANAGARI LETTER CHA", "DEVANAGARI LETTER JA", "DEVANAGARI LETTER JHA", "DEVANAGARI LETTER NYA", "DEVANAGARI LETTER TTA", "DEVANAGARI LETTER TTHA", "DEVANAGARI LETTER DDA", "DEVANAGARI LETTER DDHA", "DEVANAGARI LETTER NNA", "DEVANAGARI LETTER TA", "DEVANAGARI LETTER THA", "DEVANAGARI LETTER DA", "DEVANAGARI LETTER DHA", "DEVANAGARI LETTER NA", "DEVANAGARI LETTER NNNA", "DEVANAGARI LETTER PA", "DEVANAGARI LETTER PHA", "DEVANAGARI LETTER BA", "DEVANAGARI LETTER BHA", "DEVANAGARI LETTER MA", "DEVANAGARI LETTER YA", "DEVANAGARI LETTER RA", "DEVANAGARI LETTER RRA", "DEVANAGARI LETTER LA", "DEVANAGARI LETTER LLA", "DEVANAGARI LETTER LLLA", "DEVANAGARI LETTER VA", "DEVANAGARI LETTER SHA", "DEVANAGARI LETTER SSA", "DEVANAGARI LETTER SA", "DEVANAGARI LETTER HA", "DEVANAGARI VOWEL SIGN OE", "DEVANAGARI VOWEL SIGN OOE", "DEVANAGARI SIGN NUKTA", "DEVANAGARI SIGN AVAGRAHA", "DEVANAGARI VOWEL SIGN AA", "DEVANAGARI VOWEL SIGN I", "DEVANAGARI VOWEL SIGN II", "DEVANAGARI VOWEL SIGN U", "DEVANAGARI VOWEL SIGN UU", "DEVANAGARI VOWEL SIGN VOCALIC R", "DEVANAGARI VOWEL SIGN VOCALIC RR", "DEVANAGARI VOWEL SIGN CANDRA E", "DEVANAGARI VOWEL SIGN SHORT E", "DEVANAGARI VOWEL SIGN E", "DEVANAGARI VOWEL SIGN AI", "DEVANAGARI VOWEL SIGN CANDRA O", "DEVANAGARI VOWEL SIGN SHORT O", "DEVANAGARI VOWEL SIGN O", "DEVANAGARI VOWEL SIGN AU", "DEVANAGARI SIGN VIRAMA", "DEVANAGARI VOWEL SIGN PRISHTHAMATRA E", "DEVANAGARI VOWEL SIGN AW", "DEVANAGARI OM", "DEVANAGARI STRESS SIGN UDATTA", "DEVANAGARI STRESS SIGN ANUDATTA", "DEVANAGARI GRAVE ACCENT", "DEVANAGARI ACUTE ACCENT", "DEVANAGARI VOWEL SIGN CANDRA LONG E", "DEVANAGARI VOWEL SIGN UE", "DEVANAGARI VOWEL SIGN UUE", "DEVANAGARI LETTER QA", "DEVANAGARI LETTER KHHA", "DEVANAGARI LETTER GHHA", "DEVANAGARI LETTER ZA", "DEVANAGARI LETTER DDDHA", "DEVANAGARI LETTER RHA", "DEVANAGARI LETTER FA", "DEVANAGARI LETTER YYA", "DEVANAGARI LETTER VOCALIC RR", "DEVANAGARI LETTER VOCALIC LL", "DEVANAGARI VOWEL SIGN VOCALIC L", "DEVANAGARI VOWEL SIGN VOCALIC LL", "DEVANAGARI DANDA", "DEVANAGARI DOUBLE DANDA", "DEVANAGARI DIGIT ZERO", "DEVANAGARI DIGIT ONE", "DEVANAGARI DIGIT TWO", "DEVANAGARI DIGIT THREE", "DEVANAGARI DIGIT FOUR", "DEVANAGARI DIGIT FIVE", "DEVANAGARI DIGIT SIX", "DEVANAGARI DIGIT SEVEN", "DEVANAGARI DIGIT EIGHT", "DEVANAGARI DIGIT NINE", "DEVANAGARI ABBREVIATION SIGN", "DEVANAGARI SIGN HIGH SPACING DOT", "DEVANAGARI LETTER CANDRA A", "DEVANAGARI LETTER OE", "DEVANAGARI LETTER OOE", "DEVANAGARI LETTER AW", "DEVANAGARI LETTER UE", "DEVANAGARI LETTER UUE", "DEVANAGARI LETTER MARWARI DDA", "DEVANAGARI LETTER ZHA", "DEVANAGARI LETTER HEAVY YA", "DEVANAGARI LETTER GGA", "DEVANAGARI LETTER JJA", "DEVANAGARI LETTER GLOTTAL STOP", "DEVANAGARI LETTER DDDA", "DEVANAGARI LETTER BBA", "BENGALI ANJI", "BENGALI SIGN CANDRABINDU", "BENGALI SIGN ANUSVARA", "BENGALI SIGN VISARGA", "BENGALI LETTER A", "BENGALI LETTER AA", "BENGALI LETTER I", "BENGALI LETTER II", "BENGALI LETTER U", "BENGALI LETTER UU", "BENGALI LETTER VOCALIC R", "BENGALI LETTER VOCALIC L", "BENGALI LETTER E", "BENGALI LETTER AI", "BENGALI LETTER O", "BENGALI LETTER AU", "BENGALI LETTER KA", "BENGALI LETTER KHA", "BENGALI LETTER GA", "BENGALI LETTER GHA", "BENGALI LETTER NGA", "BENGALI LETTER CA", "BENGALI LETTER CHA", "BENGALI LETTER JA", "BENGALI LETTER JHA", "BENGALI LETTER NYA", "BENGALI LETTER TTA", "BENGALI LETTER TTHA", "BENGALI LETTER DDA", "BENGALI LETTER DDHA", "BENGALI LETTER NNA", "BENGALI LETTER TA", "BENGALI LETTER THA", "BENGALI LETTER DA", "BENGALI LETTER DHA", "BENGALI LETTER NA", "BENGALI LETTER PA", "BENGALI LETTER PHA", "BENGALI LETTER BA", "BENGALI LETTER BHA", "BENGALI LETTER MA", "BENGALI LETTER YA", "BENGALI LETTER RA", "BENGALI LETTER LA", "BENGALI LETTER SHA", "BENGALI LETTER SSA", "BENGALI LETTER SA", "BENGALI LETTER HA", "BENGALI SIGN NUKTA", "BENGALI SIGN AVAGRAHA", "BENGALI VOWEL SIGN AA", "BENGALI VOWEL SIGN I", "BENGALI VOWEL SIGN II", "BENGALI VOWEL SIGN U", "BENGALI VOWEL SIGN UU", "BENGALI VOWEL SIGN VOCALIC R", "BENGALI VOWEL SIGN VOCALIC RR", "BENGALI VOWEL SIGN E", "BENGALI VOWEL SIGN AI", "BENGALI VOWEL SIGN O", "BENGALI VOWEL SIGN AU", "BENGALI SIGN VIRAMA", "BENGALI LETTER KHANDA TA", "BENGALI AU LENGTH MARK", "BENGALI LETTER RRA", "BENGALI LETTER RHA", "BENGALI LETTER YYA", "BENGALI LETTER VOCALIC RR", "BENGALI LETTER VOCALIC LL", "BENGALI VOWEL SIGN VOCALIC L", "BENGALI VOWEL SIGN VOCALIC LL", "BENGALI DIGIT ZERO", "BENGALI DIGIT ONE", "BENGALI DIGIT TWO", "BENGALI DIGIT THREE", "BENGALI DIGIT FOUR", "BENGALI DIGIT FIVE", "BENGALI DIGIT SIX", "BENGALI DIGIT SEVEN", "BENGALI DIGIT EIGHT", "BENGALI DIGIT NINE", "BENGALI LETTER RA WITH MIDDLE DIAGONAL", "BENGALI LETTER RA WITH LOWER DIAGONAL", "BENGALI RUPEE MARK", "BENGALI RUPEE SIGN", "BENGALI CURRENCY NUMERATOR ONE", "BENGALI CURRENCY NUMERATOR TWO", "BENGALI CURRENCY NUMERATOR THREE", "BENGALI CURRENCY NUMERATOR FOUR", "BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR", "BENGALI CURRENCY DENOMINATOR SIXTEEN", "BENGALI ISSHAR", "BENGALI GANDA MARK", "BENGALI LETTER VEDIC ANUSVARA", "BENGALI ABBREVIATION SIGN", "BENGALI SANDHI MARK", "GURMUKHI SIGN ADAK BINDI", "GURMUKHI SIGN BINDI", "GURMUKHI SIGN VISARGA", "GURMUKHI LETTER A", "GURMUKHI LETTER AA", "GURMUKHI LETTER I", "GURMUKHI LETTER II", "GURMUKHI LETTER U", "GURMUKHI LETTER UU", "GURMUKHI LETTER EE", "GURMUKHI LETTER AI", "GURMUKHI LETTER OO", "GURMUKHI LETTER AU", "GURMUKHI LETTER KA", "GURMUKHI LETTER KHA", "GURMUKHI LETTER GA", "GURMUKHI LETTER GHA", "GURMUKHI LETTER NGA", "GURMUKHI LETTER CA", "GURMUKHI LETTER CHA", "GURMUKHI LETTER JA", "GURMUKHI LETTER JHA", "GURMUKHI LETTER NYA", "GURMUKHI LETTER TTA", "GURMUKHI LETTER TTHA", "GURMUKHI LETTER DDA", "GURMUKHI LETTER DDHA", "GURMUKHI LETTER NNA", "GURMUKHI LETTER TA", "GURMUKHI LETTER THA", "GURMUKHI LETTER DA", "GURMUKHI LETTER DHA", "GURMUKHI LETTER NA", "GURMUKHI LETTER PA", "GURMUKHI LETTER PHA", "GURMUKHI LETTER BA", "GURMUKHI LETTER BHA", "GURMUKHI LETTER MA", "GURMUKHI LETTER YA", "GURMUKHI LETTER RA", "GURMUKHI LETTER LA", "GURMUKHI LETTER LLA", "GURMUKHI LETTER VA", "GURMUKHI LETTER SHA", "GURMUKHI LETTER SA", "GURMUKHI LETTER HA", "GURMUKHI SIGN NUKTA", "GURMUKHI VOWEL SIGN AA", "GURMUKHI VOWEL SIGN I", "GURMUKHI VOWEL SIGN II", "GURMUKHI VOWEL SIGN U", "GURMUKHI VOWEL SIGN UU", "GURMUKHI VOWEL SIGN EE", "GURMUKHI VOWEL SIGN AI", "GURMUKHI VOWEL SIGN OO", "GURMUKHI VOWEL SIGN AU", "GURMUKHI SIGN VIRAMA", "GURMUKHI SIGN UDAAT", "GURMUKHI LETTER KHHA", "GURMUKHI LETTER GHHA", "GURMUKHI LETTER ZA", "GURMUKHI LETTER RRA", "GURMUKHI LETTER FA", "GURMUKHI DIGIT ZERO", "GURMUKHI DIGIT ONE", "GURMUKHI DIGIT TWO", "GURMUKHI DIGIT THREE", "GURMUKHI DIGIT FOUR", "GURMUKHI DIGIT FIVE", "GURMUKHI DIGIT SIX", "GURMUKHI DIGIT SEVEN", "GURMUKHI DIGIT EIGHT", "GURMUKHI DIGIT NINE", "GURMUKHI TIPPI", "GURMUKHI ADDAK", "GURMUKHI IRI", "GURMUKHI URA", "GURMUKHI EK ONKAR", "GURMUKHI SIGN YAKASH", "GURMUKHI ABBREVIATION SIGN", "GUJARATI SIGN CANDRABINDU", "GUJARATI SIGN ANUSVARA", "GUJARATI SIGN VISARGA", "GUJARATI LETTER A", "GUJARATI LETTER AA", "GUJARATI LETTER I", "GUJARATI LETTER II", "GUJARATI LETTER U", "GUJARATI LETTER UU", "GUJARATI LETTER VOCALIC R", "GUJARATI LETTER VOCALIC L", "GUJARATI VOWEL CANDRA E", "GUJARATI LETTER E", "GUJARATI LETTER AI", "GUJARATI VOWEL CANDRA O", "GUJARATI LETTER O", "GUJARATI LETTER AU", "GUJARATI LETTER KA", "GUJARATI LETTER KHA", "GUJARATI LETTER GA", "GUJARATI LETTER GHA", "GUJARATI LETTER NGA", "GUJARATI LETTER CA", "GUJARATI LETTER CHA", "GUJARATI LETTER JA", "GUJARATI LETTER JHA", "GUJARATI LETTER NYA", "GUJARATI LETTER TTA", "GUJARATI LETTER TTHA", "GUJARATI LETTER DDA", "GUJARATI LETTER DDHA", "GUJARATI LETTER NNA", "GUJARATI LETTER TA", "GUJARATI LETTER THA", "GUJARATI LETTER DA", "GUJARATI LETTER DHA", "GUJARATI LETTER NA", "GUJARATI LETTER PA", "GUJARATI LETTER PHA", "GUJARATI LETTER BA", "GUJARATI LETTER BHA", "GUJARATI LETTER MA", "GUJARATI LETTER YA", "GUJARATI LETTER RA", "GUJARATI LETTER LA", "GUJARATI LETTER LLA", "GUJARATI LETTER VA", "GUJARATI LETTER SHA", "GUJARATI LETTER SSA", "GUJARATI LETTER SA", "GUJARATI LETTER HA", "GUJARATI SIGN NUKTA", "GUJARATI SIGN AVAGRAHA", "GUJARATI VOWEL SIGN AA", "GUJARATI VOWEL SIGN I", "GUJARATI VOWEL SIGN II", "GUJARATI VOWEL SIGN U", "GUJARATI VOWEL SIGN UU", "GUJARATI VOWEL SIGN VOCALIC R", "GUJARATI VOWEL SIGN VOCALIC RR", "GUJARATI VOWEL SIGN CANDRA E", "GUJARATI VOWEL SIGN E", "GUJARATI VOWEL SIGN AI", "GUJARATI VOWEL SIGN CANDRA O", "GUJARATI VOWEL SIGN O", "GUJARATI VOWEL SIGN AU", "GUJARATI SIGN VIRAMA", "GUJARATI OM", "GUJARATI LETTER VOCALIC RR", "GUJARATI LETTER VOCALIC LL", "GUJARATI VOWEL SIGN VOCALIC L", "GUJARATI VOWEL SIGN VOCALIC LL", "GUJARATI DIGIT ZERO", "GUJARATI DIGIT ONE", "GUJARATI DIGIT TWO", "GUJARATI DIGIT THREE", "GUJARATI DIGIT FOUR", "GUJARATI DIGIT FIVE", "GUJARATI DIGIT SIX", "GUJARATI DIGIT SEVEN", "GUJARATI DIGIT EIGHT", "GUJARATI DIGIT NINE", "GUJARATI ABBREVIATION SIGN", "GUJARATI RUPEE SIGN", "GUJARATI LETTER ZHA", "GUJARATI SIGN SUKUN", "GUJARATI SIGN SHADDA", "GUJARATI SIGN MADDAH", "GUJARATI SIGN THREE-DOT NUKTA ABOVE", "GUJARATI SIGN CIRCLE NUKTA ABOVE", "GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE", "ORIYA SIGN CANDRABINDU", "ORIYA SIGN ANUSVARA", "ORIYA SIGN VISARGA", "ORIYA LETTER A", "ORIYA LETTER AA", "ORIYA LETTER I", "ORIYA LETTER II", "ORIYA LETTER U", "ORIYA LETTER UU", "ORIYA LETTER VOCALIC R", "ORIYA LETTER VOCALIC L", "ORIYA LETTER E", "ORIYA LETTER AI", "ORIYA LETTER O", "ORIYA LETTER AU", "ORIYA LETTER KA", "ORIYA LETTER KHA", "ORIYA LETTER GA", "ORIYA LETTER GHA", "ORIYA LETTER NGA", "ORIYA LETTER CA", "ORIYA LETTER CHA", "ORIYA LETTER JA", "ORIYA LETTER JHA", "ORIYA LETTER NYA", "ORIYA LETTER TTA", "ORIYA LETTER TTHA", "ORIYA LETTER DDA", "ORIYA LETTER DDHA", "ORIYA LETTER NNA", "ORIYA LETTER TA", "ORIYA LETTER THA", "ORIYA LETTER DA", "ORIYA LETTER DHA", "ORIYA LETTER NA", "ORIYA LETTER PA", "ORIYA LETTER PHA", "ORIYA LETTER BA", "ORIYA LETTER BHA", "ORIYA LETTER MA", "ORIYA LETTER YA", "ORIYA LETTER RA", "ORIYA LETTER LA", "ORIYA LETTER LLA", "ORIYA LETTER VA", "ORIYA LETTER SHA", "ORIYA LETTER SSA", "ORIYA LETTER SA", "ORIYA LETTER HA", "ORIYA SIGN NUKTA", "ORIYA SIGN AVAGRAHA", "ORIYA VOWEL SIGN AA", "ORIYA VOWEL SIGN I", "ORIYA VOWEL SIGN II", "ORIYA VOWEL SIGN U", "ORIYA VOWEL SIGN UU", "ORIYA VOWEL SIGN VOCALIC R", "ORIYA VOWEL SIGN VOCALIC RR", "ORIYA VOWEL SIGN E", "ORIYA VOWEL SIGN AI", "ORIYA VOWEL SIGN O", "ORIYA VOWEL SIGN AU", "ORIYA SIGN VIRAMA", "ORIYA AI LENGTH MARK", "ORIYA AU LENGTH MARK", "ORIYA LETTER RRA", "ORIYA LETTER RHA", "ORIYA LETTER YYA", "ORIYA LETTER VOCALIC RR", "ORIYA LETTER VOCALIC LL", "ORIYA VOWEL SIGN VOCALIC L", "ORIYA VOWEL SIGN VOCALIC LL", "ORIYA DIGIT ZERO", "ORIYA DIGIT ONE", "ORIYA DIGIT TWO", "ORIYA DIGIT THREE", "ORIYA DIGIT FOUR", "ORIYA DIGIT FIVE", "ORIYA DIGIT SIX", "ORIYA DIGIT SEVEN", "ORIYA DIGIT EIGHT", "ORIYA DIGIT NINE", "ORIYA ISSHAR", "ORIYA LETTER WA", "ORIYA FRACTION ONE QUARTER", "ORIYA FRACTION ONE HALF", "ORIYA FRACTION THREE QUARTERS", "ORIYA FRACTION ONE SIXTEENTH", "ORIYA FRACTION ONE EIGHTH", "ORIYA FRACTION THREE SIXTEENTHS", "TAMIL SIGN ANUSVARA", "TAMIL SIGN VISARGA", "TAMIL LETTER A", "TAMIL LETTER AA", "TAMIL LETTER I", "TAMIL LETTER II", "TAMIL LETTER U", "TAMIL LETTER UU", "TAMIL LETTER E", "TAMIL LETTER EE", "TAMIL LETTER AI", "TAMIL LETTER O", "TAMIL LETTER OO", "TAMIL LETTER AU", "TAMIL LETTER KA", "TAMIL LETTER NGA", "TAMIL LETTER CA", "TAMIL LETTER JA", "TAMIL LETTER NYA", "TAMIL LETTER TTA", "TAMIL LETTER NNA", "TAMIL LETTER TA", "TAMIL LETTER NA", "TAMIL LETTER NNNA", "TAMIL LETTER PA", "TAMIL LETTER MA", "TAMIL LETTER YA", "TAMIL LETTER RA", "TAMIL LETTER RRA", "TAMIL LETTER LA", "TAMIL LETTER LLA", "TAMIL LETTER LLLA", "TAMIL LETTER VA", "TAMIL LETTER SHA", "TAMIL LETTER SSA", "TAMIL LETTER SA", "TAMIL LETTER HA", "TAMIL VOWEL SIGN AA", "TAMIL VOWEL SIGN I", "TAMIL VOWEL SIGN II", "TAMIL VOWEL SIGN U", "TAMIL VOWEL SIGN UU", "TAMIL VOWEL SIGN E", "TAMIL VOWEL SIGN EE", "TAMIL VOWEL SIGN AI", "TAMIL VOWEL SIGN O", "TAMIL VOWEL SIGN OO", "TAMIL VOWEL SIGN AU", "TAMIL SIGN VIRAMA", "TAMIL OM", "TAMIL AU LENGTH MARK", "TAMIL DIGIT ZERO", "TAMIL DIGIT ONE", "TAMIL DIGIT TWO", "TAMIL DIGIT THREE", "TAMIL DIGIT FOUR", "TAMIL DIGIT FIVE", "TAMIL DIGIT SIX", "TAMIL DIGIT SEVEN", "TAMIL DIGIT EIGHT", "TAMIL DIGIT NINE", "TAMIL NUMBER TEN", "TAMIL NUMBER ONE HUNDRED", "TAMIL NUMBER ONE THOUSAND", "TAMIL DAY SIGN", "TAMIL MONTH SIGN", "TAMIL YEAR SIGN", "TAMIL DEBIT SIGN", "TAMIL CREDIT SIGN", "TAMIL AS ABOVE SIGN", "TAMIL RUPEE SIGN", "TAMIL NUMBER SIGN", "TELUGU SIGN COMBINING CANDRABINDU ABOVE", "TELUGU SIGN CANDRABINDU", "TELUGU SIGN ANUSVARA", "TELUGU SIGN VISARGA", "TELUGU SIGN COMBINING ANUSVARA ABOVE", "TELUGU LETTER A", "TELUGU LETTER AA", "TELUGU LETTER I", "TELUGU LETTER II", "TELUGU LETTER U", "TELUGU LETTER UU", "TELUGU LETTER VOCALIC R", "TELUGU LETTER VOCALIC L", "TELUGU LETTER E", "TELUGU LETTER EE", "TELUGU LETTER AI", "TELUGU LETTER O", "TELUGU LETTER OO", "TELUGU LETTER AU", "TELUGU LETTER KA", "TELUGU LETTER KHA", "TELUGU LETTER GA", "TELUGU LETTER GHA", "TELUGU LETTER NGA", "TELUGU LETTER CA", "TELUGU LETTER CHA", "TELUGU LETTER JA", "TELUGU LETTER JHA", "TELUGU LETTER NYA", "TELUGU LETTER TTA", "TELUGU LETTER TTHA", "TELUGU LETTER DDA", "TELUGU LETTER DDHA", "TELUGU LETTER NNA", "TELUGU LETTER TA", "TELUGU LETTER THA", "TELUGU LETTER DA", "TELUGU LETTER DHA", "TELUGU LETTER NA", "TELUGU LETTER PA", "TELUGU LETTER PHA", "TELUGU LETTER BA", "TELUGU LETTER BHA", "TELUGU LETTER MA", "TELUGU LETTER YA", "TELUGU LETTER RA", "TELUGU LETTER RRA", "TELUGU LETTER LA", "TELUGU LETTER LLA", "TELUGU LETTER LLLA", "TELUGU LETTER VA", "TELUGU LETTER SHA", "TELUGU LETTER SSA", "TELUGU LETTER SA", "TELUGU LETTER HA", "TELUGU SIGN AVAGRAHA", "TELUGU VOWEL SIGN AA", "TELUGU VOWEL SIGN I", "TELUGU VOWEL SIGN II", "TELUGU VOWEL SIGN U", "TELUGU VOWEL SIGN UU", "TELUGU VOWEL SIGN VOCALIC R", "TELUGU VOWEL SIGN VOCALIC RR", "TELUGU VOWEL SIGN E", "TELUGU VOWEL SIGN EE", "TELUGU VOWEL SIGN AI", "TELUGU VOWEL SIGN O", "TELUGU VOWEL SIGN OO", "TELUGU VOWEL SIGN AU", "TELUGU SIGN VIRAMA", "TELUGU LENGTH MARK", "TELUGU AI LENGTH MARK", "TELUGU LETTER TSA", "TELUGU LETTER DZA", "TELUGU LETTER RRRA", "TELUGU LETTER VOCALIC RR", "TELUGU LETTER VOCALIC LL", "TELUGU VOWEL SIGN VOCALIC L", "TELUGU VOWEL SIGN VOCALIC LL", "TELUGU DIGIT ZERO", "TELUGU DIGIT ONE", "TELUGU DIGIT TWO", "TELUGU DIGIT THREE", "TELUGU DIGIT FOUR", "TELUGU DIGIT FIVE", "TELUGU DIGIT SIX", "TELUGU DIGIT SEVEN", "TELUGU DIGIT EIGHT", "TELUGU DIGIT NINE", "TELUGU SIGN SIDDHAM", "TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR", "TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR", "TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR", "TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR", "TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR", "TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR", "TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR", "TELUGU SIGN TUUMU", "KANNADA SIGN SPACING CANDRABINDU", "KANNADA SIGN CANDRABINDU", "KANNADA SIGN ANUSVARA", "KANNADA SIGN VISARGA", "KANNADA SIGN SIDDHAM", "KANNADA LETTER A", "KANNADA LETTER AA", "KANNADA LETTER I", "KANNADA LETTER II", "KANNADA LETTER U", "KANNADA LETTER UU", "KANNADA LETTER VOCALIC R", "KANNADA LETTER VOCALIC L", "KANNADA LETTER E", "KANNADA LETTER EE", "KANNADA LETTER AI", "KANNADA LETTER O", "KANNADA LETTER OO", "KANNADA LETTER AU", "KANNADA LETTER KA", "KANNADA LETTER KHA", "KANNADA LETTER GA", "KANNADA LETTER GHA", "KANNADA LETTER NGA", "KANNADA LETTER CA", "KANNADA LETTER CHA", "KANNADA LETTER JA", "KANNADA LETTER JHA", "KANNADA LETTER NYA", "KANNADA LETTER TTA", "KANNADA LETTER TTHA", "KANNADA LETTER DDA", "KANNADA LETTER DDHA", "KANNADA LETTER NNA", "KANNADA LETTER TA", "KANNADA LETTER THA", "KANNADA LETTER DA", "KANNADA LETTER DHA", "KANNADA LETTER NA", "KANNADA LETTER PA", "KANNADA LETTER PHA", "KANNADA LETTER BA", "KANNADA LETTER BHA", "KANNADA LETTER MA", "KANNADA LETTER YA", "KANNADA LETTER RA", "KANNADA LETTER RRA", "KANNADA LETTER LA", "KANNADA LETTER LLA", "KANNADA LETTER VA", "KANNADA LETTER SHA", "KANNADA LETTER SSA", "KANNADA LETTER SA", "KANNADA LETTER HA", "KANNADA SIGN NUKTA", "KANNADA SIGN AVAGRAHA", "KANNADA VOWEL SIGN AA", "KANNADA VOWEL SIGN I", "KANNADA VOWEL SIGN II", "KANNADA VOWEL SIGN U", "KANNADA VOWEL SIGN UU", "KANNADA VOWEL SIGN VOCALIC R", "KANNADA VOWEL SIGN VOCALIC RR", "KANNADA VOWEL SIGN E", "KANNADA VOWEL SIGN EE", "KANNADA VOWEL SIGN AI", "KANNADA VOWEL SIGN O", "KANNADA VOWEL SIGN OO", "KANNADA VOWEL SIGN AU", "KANNADA SIGN VIRAMA", "KANNADA LENGTH MARK", "KANNADA AI LENGTH MARK", "KANNADA LETTER FA", "KANNADA LETTER VOCALIC RR", "KANNADA LETTER VOCALIC LL", "KANNADA VOWEL SIGN VOCALIC L", "KANNADA VOWEL SIGN VOCALIC LL", "KANNADA DIGIT ZERO", "KANNADA DIGIT ONE", "KANNADA DIGIT TWO", "KANNADA DIGIT THREE", "KANNADA DIGIT FOUR", "KANNADA DIGIT FIVE", "KANNADA DIGIT SIX", "KANNADA DIGIT SEVEN", "KANNADA DIGIT EIGHT", "KANNADA DIGIT NINE", "KANNADA SIGN JIHVAMULIYA", "KANNADA SIGN UPADHMANIYA", "MALAYALAM SIGN COMBINING ANUSVARA ABOVE", "MALAYALAM SIGN CANDRABINDU", "MALAYALAM SIGN ANUSVARA", "MALAYALAM SIGN VISARGA", "MALAYALAM LETTER A", "MALAYALAM LETTER AA", "MALAYALAM LETTER I", "MALAYALAM LETTER II", "MALAYALAM LETTER U", "MALAYALAM LETTER UU", "MALAYALAM LETTER VOCALIC R", "MALAYALAM LETTER VOCALIC L", "MALAYALAM LETTER E", "MALAYALAM LETTER EE", "MALAYALAM LETTER AI", "MALAYALAM LETTER O", "MALAYALAM LETTER OO", "MALAYALAM LETTER AU", "MALAYALAM LETTER KA", "MALAYALAM LETTER KHA", "MALAYALAM LETTER GA", "MALAYALAM LETTER GHA", "MALAYALAM LETTER NGA", "MALAYALAM LETTER CA", "MALAYALAM LETTER CHA", "MALAYALAM LETTER JA", "MALAYALAM LETTER JHA", "MALAYALAM LETTER NYA", "MALAYALAM LETTER TTA", "MALAYALAM LETTER TTHA", "MALAYALAM LETTER DDA", "MALAYALAM LETTER DDHA", "MALAYALAM LETTER NNA", "MALAYALAM LETTER TA", "MALAYALAM LETTER THA", "MALAYALAM LETTER DA", "MALAYALAM LETTER DHA", "MALAYALAM LETTER NA", "MALAYALAM LETTER NNNA", "MALAYALAM LETTER PA", "MALAYALAM LETTER PHA", "MALAYALAM LETTER BA", "MALAYALAM LETTER BHA", "MALAYALAM LETTER MA", "MALAYALAM LETTER YA", "MALAYALAM LETTER RA", "MALAYALAM LETTER RRA", "MALAYALAM LETTER LA", "MALAYALAM LETTER LLA", "MALAYALAM LETTER LLLA", "MALAYALAM LETTER VA", "MALAYALAM LETTER SHA", "MALAYALAM LETTER SSA", "MALAYALAM LETTER SA", "MALAYALAM LETTER HA", "MALAYALAM LETTER TTTA", "MALAYALAM SIGN VERTICAL BAR VIRAMA", "MALAYALAM SIGN CIRCULAR VIRAMA", "MALAYALAM SIGN AVAGRAHA", "MALAYALAM VOWEL SIGN AA", "MALAYALAM VOWEL SIGN I", "MALAYALAM VOWEL SIGN II", "MALAYALAM VOWEL SIGN U", "MALAYALAM VOWEL SIGN UU", "MALAYALAM VOWEL SIGN VOCALIC R", "MALAYALAM VOWEL SIGN VOCALIC RR", "MALAYALAM VOWEL SIGN E", "MALAYALAM VOWEL SIGN EE", "MALAYALAM VOWEL SIGN AI", "MALAYALAM VOWEL SIGN O", "MALAYALAM VOWEL SIGN OO", "MALAYALAM VOWEL SIGN AU", "MALAYALAM SIGN VIRAMA", "MALAYALAM LETTER DOT REPH", "MALAYALAM SIGN PARA", "MALAYALAM LETTER CHILLU M", "MALAYALAM LETTER CHILLU Y", "MALAYALAM LETTER CHILLU LLL", "MALAYALAM AU LENGTH MARK", "MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH", "MALAYALAM FRACTION ONE FORTIETH", "MALAYALAM FRACTION THREE EIGHTIETHS", "MALAYALAM FRACTION ONE TWENTIETH", "MALAYALAM FRACTION ONE TENTH", "MALAYALAM FRACTION THREE TWENTIETHS", "MALAYALAM FRACTION ONE FIFTH", "MALAYALAM LETTER ARCHAIC II", "MALAYALAM LETTER VOCALIC RR", "MALAYALAM LETTER VOCALIC LL", "MALAYALAM VOWEL SIGN VOCALIC L", "MALAYALAM VOWEL SIGN VOCALIC LL", "MALAYALAM DIGIT ZERO", "MALAYALAM DIGIT ONE", "MALAYALAM DIGIT TWO", "MALAYALAM DIGIT THREE", "MALAYALAM DIGIT FOUR", "MALAYALAM DIGIT FIVE", "MALAYALAM DIGIT SIX", "MALAYALAM DIGIT SEVEN", "MALAYALAM DIGIT EIGHT", "MALAYALAM DIGIT NINE", "MALAYALAM NUMBER TEN", "MALAYALAM NUMBER ONE HUNDRED", "MALAYALAM NUMBER ONE THOUSAND", "MALAYALAM FRACTION ONE QUARTER", "MALAYALAM FRACTION ONE HALF", "MALAYALAM FRACTION THREE QUARTERS", "MALAYALAM FRACTION ONE SIXTEENTH", "MALAYALAM FRACTION ONE EIGHTH", "MALAYALAM FRACTION THREE SIXTEENTHS", "MALAYALAM DATE MARK", "MALAYALAM LETTER CHILLU NN", "MALAYALAM LETTER CHILLU N", "MALAYALAM LETTER CHILLU RR", "MALAYALAM LETTER CHILLU L", "MALAYALAM LETTER CHILLU LL", "MALAYALAM LETTER CHILLU K", "SINHALA SIGN ANUSVARAYA", "SINHALA SIGN VISARGAYA", "SINHALA LETTER AYANNA", "SINHALA LETTER AAYANNA", "SINHALA LETTER AEYANNA", "SINHALA LETTER AEEYANNA", "SINHALA LETTER IYANNA", "SINHALA LETTER IIYANNA", "SINHALA LETTER UYANNA", "SINHALA LETTER UUYANNA", "SINHALA LETTER IRUYANNA", "SINHALA LETTER IRUUYANNA", "SINHALA LETTER ILUYANNA", "SINHALA LETTER ILUUYANNA", "SINHALA LETTER EYANNA", "SINHALA LETTER EEYANNA", "SINHALA LETTER AIYANNA", "SINHALA LETTER OYANNA", "SINHALA LETTER OOYANNA", "SINHALA LETTER AUYANNA", "SINHALA LETTER ALPAPRAANA KAYANNA", "SINHALA LETTER MAHAAPRAANA KAYANNA", "SINHALA LETTER ALPAPRAANA GAYANNA", "SINHALA LETTER MAHAAPRAANA GAYANNA", "SINHALA LETTER KANTAJA NAASIKYAYA", "SINHALA LETTER SANYAKA GAYANNA", "SINHALA LETTER ALPAPRAANA CAYANNA", "SINHALA LETTER MAHAAPRAANA CAYANNA", "SINHALA LETTER ALPAPRAANA JAYANNA", "SINHALA LETTER MAHAAPRAANA JAYANNA", "SINHALA LETTER TAALUJA NAASIKYAYA", "SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA", "SINHALA LETTER SANYAKA JAYANNA", "SINHALA LETTER ALPAPRAANA TTAYANNA", "SINHALA LETTER MAHAAPRAANA TTAYANNA", "SINHALA LETTER ALPAPRAANA DDAYANNA", "SINHALA LETTER MAHAAPRAANA DDAYANNA", "SINHALA LETTER MUURDHAJA NAYANNA", "SINHALA LETTER SANYAKA DDAYANNA", "SINHALA LETTER ALPAPRAANA TAYANNA", "SINHALA LETTER MAHAAPRAANA TAYANNA", "SINHALA LETTER ALPAPRAANA DAYANNA", "SINHALA LETTER MAHAAPRAANA DAYANNA", "SINHALA LETTER DANTAJA NAYANNA", "SINHALA LETTER SANYAKA DAYANNA", "SINHALA LETTER ALPAPRAANA PAYANNA", "SINHALA LETTER MAHAAPRAANA PAYANNA", "SINHALA LETTER ALPAPRAANA BAYANNA", "SINHALA LETTER MAHAAPRAANA BAYANNA", "SINHALA LETTER MAYANNA", "SINHALA LETTER AMBA BAYANNA", "SINHALA LETTER YAYANNA", "SINHALA LETTER RAYANNA", "SINHALA LETTER DANTAJA LAYANNA", "SINHALA LETTER VAYANNA", "SINHALA LETTER TAALUJA SAYANNA", "SINHALA LETTER MUURDHAJA SAYANNA", "SINHALA LETTER DANTAJA SAYANNA", "SINHALA LETTER HAYANNA", "SINHALA LETTER MUURDHAJA LAYANNA", "SINHALA LETTER FAYANNA", "SINHALA SIGN AL-LAKUNA", "SINHALA VOWEL SIGN AELA-PILLA", "SINHALA VOWEL SIGN KETTI AEDA-PILLA", "SINHALA VOWEL SIGN DIGA AEDA-PILLA", "SINHALA VOWEL SIGN KETTI IS-PILLA", "SINHALA VOWEL SIGN DIGA IS-PILLA", "SINHALA VOWEL SIGN KETTI PAA-PILLA", "SINHALA VOWEL SIGN DIGA PAA-PILLA", "SINHALA VOWEL SIGN GAETTA-PILLA", "SINHALA VOWEL SIGN KOMBUVA", "SINHALA VOWEL SIGN DIGA KOMBUVA", "SINHALA VOWEL SIGN KOMBU DEKA", "SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA", "SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA", "SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA", "SINHALA VOWEL SIGN GAYANUKITTA", "SINHALA LITH DIGIT ZERO", "SINHALA LITH DIGIT ONE", "SINHALA LITH DIGIT TWO", "SINHALA LITH DIGIT THREE", "SINHALA LITH DIGIT FOUR", "SINHALA LITH DIGIT FIVE", "SINHALA LITH DIGIT SIX", "SINHALA LITH DIGIT SEVEN", "SINHALA LITH DIGIT EIGHT", "SINHALA LITH DIGIT NINE", "SINHALA VOWEL SIGN DIGA GAETTA-PILLA", "SINHALA VOWEL SIGN DIGA GAYANUKITTA", "SINHALA PUNCTUATION KUNDDALIYA", "THAI CHARACTER KO KAI", "THAI CHARACTER KHO KHAI", "THAI CHARACTER KHO KHUAT", "THAI CHARACTER KHO KHWAI", "THAI CHARACTER KHO KHON", "THAI CHARACTER KHO RAKHANG", "THAI CHARACTER NGO NGU", "THAI CHARACTER CHO CHAN", "THAI CHARACTER CHO CHING", "THAI CHARACTER CHO CHANG", "THAI CHARACTER SO SO", "THAI CHARACTER CHO CHOE", "THAI CHARACTER YO YING", "THAI CHARACTER DO CHADA", "THAI CHARACTER TO PATAK", "THAI CHARACTER THO THAN", "THAI CHARACTER THO NANGMONTHO", "THAI CHARACTER THO PHUTHAO", "THAI CHARACTER NO NEN", "THAI CHARACTER DO DEK", "THAI CHARACTER TO TAO", "THAI CHARACTER THO THUNG", "THAI CHARACTER THO THAHAN", "THAI CHARACTER THO THONG", "THAI CHARACTER NO NU", "THAI CHARACTER BO BAIMAI", "THAI CHARACTER PO PLA", "THAI CHARACTER PHO PHUNG", "THAI CHARACTER FO FA", "THAI CHARACTER PHO PHAN", "THAI CHARACTER FO FAN", "THAI CHARACTER PHO SAMPHAO", "THAI CHARACTER MO MA", "THAI CHARACTER YO YAK", "THAI CHARACTER RO RUA", "THAI CHARACTER RU", "THAI CHARACTER LO LING", "THAI CHARACTER LU", "THAI CHARACTER WO WAEN", "THAI CHARACTER SO SALA", "THAI CHARACTER SO RUSI", "THAI CHARACTER SO SUA", "THAI CHARACTER HO HIP", "THAI CHARACTER LO CHULA", "THAI CHARACTER O ANG", "THAI CHARACTER HO NOKHUK", "THAI CHARACTER PAIYANNOI", "THAI CHARACTER SARA A", "THAI CHARACTER MAI HAN-AKAT", "THAI CHARACTER SARA AA", "THAI CHARACTER SARA AM", "THAI CHARACTER SARA I", "THAI CHARACTER SARA II", "THAI CHARACTER SARA UE", "THAI CHARACTER SARA UEE", "THAI CHARACTER SARA U", "THAI CHARACTER SARA UU", "THAI CHARACTER PHINTHU", "THAI CURRENCY SYMBOL BAHT", "THAI CHARACTER SARA E", "THAI CHARACTER SARA AE", "THAI CHARACTER SARA O", "THAI CHARACTER SARA AI MAIMUAN", "THAI CHARACTER SARA AI MAIMALAI", "THAI CHARACTER LAKKHANGYAO", "THAI CHARACTER MAIYAMOK", "THAI CHARACTER MAITAIKHU", "THAI CHARACTER MAI EK", "THAI CHARACTER MAI THO", "THAI CHARACTER MAI TRI", "THAI CHARACTER MAI CHATTAWA", "THAI CHARACTER THANTHAKHAT", "THAI CHARACTER NIKHAHIT", "THAI CHARACTER YAMAKKAN", "THAI CHARACTER FONGMAN", "THAI DIGIT ZERO", "THAI DIGIT ONE", "THAI DIGIT TWO", "THAI DIGIT THREE", "THAI DIGIT FOUR", "THAI DIGIT FIVE", "THAI DIGIT SIX", "THAI DIGIT SEVEN", "THAI DIGIT EIGHT", "THAI DIGIT NINE", "THAI CHARACTER ANGKHANKHU", "THAI CHARACTER KHOMUT", "LAO LETTER KO", "LAO LETTER KHO SUNG", "LAO LETTER KHO TAM", "LAO LETTER PALI GHA", "LAO LETTER NGO", "LAO LETTER CO", "LAO LETTER PALI CHA", "LAO LETTER SO TAM", "LAO LETTER PALI JHA", "LAO LETTER NYO", "LAO LETTER PALI NYA", "LAO LETTER PALI TTA", "LAO LETTER PALI TTHA", "LAO LETTER PALI DDA", "LAO LETTER PALI DDHA", "LAO LETTER PALI NNA", "LAO LETTER DO", "LAO LETTER TO", "LAO LETTER THO SUNG", "LAO LETTER THO TAM", "LAO LETTER PALI DHA", "LAO LETTER NO", "LAO LETTER BO", "LAO LETTER PO", "LAO LETTER PHO SUNG", "LAO LETTER FO TAM", "LAO LETTER PHO TAM", "LAO LETTER FO SUNG", "LAO LETTER PALI BHA", "LAO LETTER MO", "LAO LETTER YO", "LAO LETTER LO LING", "LAO LETTER LO LOOT", "LAO LETTER WO", "LAO LETTER SANSKRIT SHA", "LAO LETTER SANSKRIT SSA", "LAO LETTER SO SUNG", "LAO LETTER HO SUNG", "LAO LETTER PALI LLA", "LAO LETTER O", "LAO LETTER HO TAM", "LAO ELLIPSIS", "LAO VOWEL SIGN A", "LAO VOWEL SIGN MAI KAN", "LAO VOWEL SIGN AA", "LAO VOWEL SIGN AM", "LAO VOWEL SIGN I", "LAO VOWEL SIGN II", "LAO VOWEL SIGN Y", "LAO VOWEL SIGN YY", "LAO VOWEL SIGN U", "LAO VOWEL SIGN UU", "LAO SIGN PALI VIRAMA", "LAO VOWEL SIGN MAI KON", "LAO SEMIVOWEL SIGN LO", "LAO SEMIVOWEL SIGN NYO", "LAO VOWEL SIGN E", "LAO VOWEL SIGN EI", "LAO VOWEL SIGN O", "LAO VOWEL SIGN AY", "LAO VOWEL SIGN AI", "LAO KO LA", "LAO TONE MAI EK", "LAO TONE MAI THO", "LAO TONE MAI TI", "LAO TONE MAI CATAWA", "LAO CANCELLATION MARK", "LAO NIGGAHITA", "LAO DIGIT ZERO", "LAO DIGIT ONE", "LAO DIGIT TWO", "LAO DIGIT THREE", "LAO DIGIT FOUR", "LAO DIGIT FIVE", "LAO DIGIT SIX", "LAO DIGIT SEVEN", "LAO DIGIT EIGHT", "LAO DIGIT NINE", "LAO HO NO", "LAO HO MO", "LAO LETTER KHMU GO", "LAO LETTER KHMU NYO", "TIBETAN SYLLABLE OM", "TIBETAN MARK GTER YIG MGO TRUNCATED A", "TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA", "TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA", "TIBETAN MARK INITIAL YIG MGO MDUN MA", "TIBETAN MARK CLOSING YIG MGO SGAB MA", "TIBETAN MARK CARET YIG MGO PHUR SHAD MA", "TIBETAN MARK YIG MGO TSHEG SHAD MA", "TIBETAN MARK SBRUL SHAD", "TIBETAN MARK BSKUR YIG MGO", "TIBETAN MARK BKA- SHOG YIG MGO", "TIBETAN MARK INTERSYLLABIC TSHEG", "TIBETAN MARK DELIMITER TSHEG BSTAR", "TIBETAN MARK SHAD", "TIBETAN MARK NYIS SHAD", "TIBETAN MARK TSHEG SHAD", "TIBETAN MARK NYIS TSHEG SHAD", "TIBETAN MARK RIN CHEN SPUNGS SHAD", "TIBETAN MARK RGYA GRAM SHAD", "TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN", "TIBETAN MARK GTER TSHEG", "TIBETAN LOGOTYPE SIGN CHAD RTAGS", "TIBETAN LOGOTYPE SIGN LHAG RTAGS", "TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS", "TIBETAN ASTROLOGICAL SIGN -KHYUD PA", "TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS", "TIBETAN SIGN RDEL DKAR GCIG", "TIBETAN SIGN RDEL DKAR GNYIS", "TIBETAN SIGN RDEL DKAR GSUM", "TIBETAN SIGN RDEL NAG GCIG", "TIBETAN SIGN RDEL NAG GNYIS", "TIBETAN SIGN RDEL DKAR RDEL NAG", "TIBETAN DIGIT ZERO", "TIBETAN DIGIT ONE", "TIBETAN DIGIT TWO", "TIBETAN DIGIT THREE", "TIBETAN DIGIT FOUR", "TIBETAN DIGIT FIVE", "TIBETAN DIGIT SIX", "TIBETAN DIGIT SEVEN", "TIBETAN DIGIT EIGHT", "TIBETAN DIGIT NINE", "TIBETAN DIGIT HALF ONE", "TIBETAN DIGIT HALF TWO", "TIBETAN DIGIT HALF THREE", "TIBETAN DIGIT HALF FOUR", "TIBETAN DIGIT HALF FIVE", "TIBETAN DIGIT HALF SIX", "TIBETAN DIGIT HALF SEVEN", "TIBETAN DIGIT HALF EIGHT", "TIBETAN DIGIT HALF NINE", "TIBETAN DIGIT HALF ZERO", "TIBETAN MARK BSDUS RTAGS", "TIBETAN MARK NGAS BZUNG NYI ZLA", "TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN", "TIBETAN MARK NGAS BZUNG SGOR RTAGS", "TIBETAN MARK CHE MGO", "TIBETAN MARK TSA -PHRU", "TIBETAN MARK GUG RTAGS GYON", "TIBETAN MARK GUG RTAGS GYAS", "TIBETAN MARK ANG KHANG GYON", "TIBETAN MARK ANG KHANG GYAS", "TIBETAN SIGN YAR TSHES", "TIBETAN SIGN MAR TSHES", "TIBETAN LETTER KA", "TIBETAN LETTER KHA", "TIBETAN LETTER GA", "TIBETAN LETTER GHA", "TIBETAN LETTER NGA", "TIBETAN LETTER CA", "TIBETAN LETTER CHA", "TIBETAN LETTER JA", "TIBETAN LETTER NYA", "TIBETAN LETTER TTA", "TIBETAN LETTER TTHA", "TIBETAN LETTER DDA", "TIBETAN LETTER DDHA", "TIBETAN LETTER NNA", "TIBETAN LETTER TA", "TIBETAN LETTER THA", "TIBETAN LETTER DA", "TIBETAN LETTER DHA", "TIBETAN LETTER NA", "TIBETAN LETTER PA", "TIBETAN LETTER PHA", "TIBETAN LETTER BA", "TIBETAN LETTER BHA", "TIBETAN LETTER MA", "TIBETAN LETTER TSA", "TIBETAN LETTER TSHA", "TIBETAN LETTER DZA", "TIBETAN LETTER DZHA", "TIBETAN LETTER WA", "TIBETAN LETTER ZHA", "TIBETAN LETTER ZA", "TIBETAN LETTER -A", "TIBETAN LETTER YA", "TIBETAN LETTER RA", "TIBETAN LETTER LA", "TIBETAN LETTER SHA", "TIBETAN LETTER SSA", "TIBETAN LETTER SA", "TIBETAN LETTER HA", "TIBETAN LETTER A", "TIBETAN LETTER KSSA", "TIBETAN LETTER FIXED-FORM RA", "TIBETAN LETTER KKA", "TIBETAN LETTER RRA", "TIBETAN VOWEL SIGN AA", "TIBETAN VOWEL SIGN I", "TIBETAN VOWEL SIGN II", "TIBETAN VOWEL SIGN U", "TIBETAN VOWEL SIGN UU", "TIBETAN VOWEL SIGN VOCALIC R", "TIBETAN VOWEL SIGN VOCALIC RR", "TIBETAN VOWEL SIGN VOCALIC L", "TIBETAN VOWEL SIGN VOCALIC LL", "TIBETAN VOWEL SIGN E", "TIBETAN VOWEL SIGN EE", "TIBETAN VOWEL SIGN O", "TIBETAN VOWEL SIGN OO", "TIBETAN SIGN RJES SU NGA RO", "TIBETAN SIGN RNAM BCAD", "TIBETAN VOWEL SIGN REVERSED I", "TIBETAN VOWEL SIGN REVERSED II", "TIBETAN SIGN NYI ZLA NAA DA", "TIBETAN SIGN SNA LDAN", "TIBETAN MARK HALANTA", "TIBETAN MARK PALUTA", "TIBETAN SIGN LCI RTAGS", "TIBETAN SIGN YANG RTAGS", "TIBETAN SIGN LCE TSA CAN", "TIBETAN SIGN MCHU CAN", "TIBETAN SIGN GRU CAN RGYINGS", "TIBETAN SIGN GRU MED RGYINGS", "TIBETAN SIGN INVERTED MCHU CAN", "TIBETAN SUBJOINED SIGN LCE TSA CAN", "TIBETAN SUBJOINED SIGN MCHU CAN", "TIBETAN SUBJOINED SIGN INVERTED MCHU CAN", "TIBETAN SUBJOINED LETTER KA", "TIBETAN SUBJOINED LETTER KHA", "TIBETAN SUBJOINED LETTER GA", "TIBETAN SUBJOINED LETTER GHA", "TIBETAN SUBJOINED LETTER NGA", "TIBETAN SUBJOINED LETTER CA", "TIBETAN SUBJOINED LETTER CHA", "TIBETAN SUBJOINED LETTER JA", "TIBETAN SUBJOINED LETTER NYA", "TIBETAN SUBJOINED LETTER TTA", "TIBETAN SUBJOINED LETTER TTHA", "TIBETAN SUBJOINED LETTER DDA", "TIBETAN SUBJOINED LETTER DDHA", "TIBETAN SUBJOINED LETTER NNA", "TIBETAN SUBJOINED LETTER TA", "TIBETAN SUBJOINED LETTER THA", "TIBETAN SUBJOINED LETTER DA", "TIBETAN SUBJOINED LETTER DHA", "TIBETAN SUBJOINED LETTER NA", "TIBETAN SUBJOINED LETTER PA", "TIBETAN SUBJOINED LETTER PHA", "TIBETAN SUBJOINED LETTER BA", "TIBETAN SUBJOINED LETTER BHA", "TIBETAN SUBJOINED LETTER MA", "TIBETAN SUBJOINED LETTER TSA", "TIBETAN SUBJOINED LETTER TSHA", "TIBETAN SUBJOINED LETTER DZA", "TIBETAN SUBJOINED LETTER DZHA", "TIBETAN SUBJOINED LETTER WA", "TIBETAN SUBJOINED LETTER ZHA", "TIBETAN SUBJOINED LETTER ZA", "TIBETAN SUBJOINED LETTER -A", "TIBETAN SUBJOINED LETTER YA", "TIBETAN SUBJOINED LETTER RA", "TIBETAN SUBJOINED LETTER LA", "TIBETAN SUBJOINED LETTER SHA", "TIBETAN SUBJOINED LETTER SSA", "TIBETAN SUBJOINED LETTER SA", "TIBETAN SUBJOINED LETTER HA", "TIBETAN SUBJOINED LETTER A", "TIBETAN SUBJOINED LETTER KSSA", "TIBETAN SUBJOINED LETTER FIXED-FORM WA", "TIBETAN SUBJOINED LETTER FIXED-FORM YA", "TIBETAN SUBJOINED LETTER FIXED-FORM RA", "TIBETAN KU RU KHA", "TIBETAN KU RU KHA BZHI MIG CAN", "TIBETAN CANTILLATION SIGN HEAVY BEAT", "TIBETAN CANTILLATION SIGN LIGHT BEAT", "TIBETAN CANTILLATION SIGN CANG TE-U", "TIBETAN CANTILLATION SIGN SBUB -CHAL", "TIBETAN SYMBOL DRIL BU", "TIBETAN SYMBOL RDO RJE", "TIBETAN SYMBOL PADMA GDAN", "TIBETAN SYMBOL RDO RJE RGYA GRAM", "TIBETAN SYMBOL PHUR PA", "TIBETAN SYMBOL NOR BU", "TIBETAN SYMBOL NOR BU NYIS -KHYIL", "TIBETAN SYMBOL NOR BU GSUM -KHYIL", "TIBETAN SYMBOL NOR BU BZHI -KHYIL", "TIBETAN SIGN RDEL NAG RDEL DKAR", "TIBETAN SIGN RDEL NAG GSUM", "TIBETAN MARK BSKA- SHOG GI MGO RGYAN", "TIBETAN MARK MNYAM YIG GI MGO RGYAN", "TIBETAN MARK NYIS TSHEG", "TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA", "TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA", "RIGHT-FACING SVASTI SIGN", "LEFT-FACING SVASTI SIGN", "RIGHT-FACING SVASTI SIGN WITH DOTS", "LEFT-FACING SVASTI SIGN WITH DOTS", "TIBETAN MARK LEADING MCHAN RTAGS", "TIBETAN MARK TRAILING MCHAN RTAGS", "MYANMAR LETTER KA", "MYANMAR LETTER KHA", "MYANMAR LETTER GA", "MYANMAR LETTER GHA", "MYANMAR LETTER NGA", "MYANMAR LETTER CA", "MYANMAR LETTER CHA", "MYANMAR LETTER JA", "MYANMAR LETTER JHA", "MYANMAR LETTER NYA", "MYANMAR LETTER NNYA", "MYANMAR LETTER TTA", "MYANMAR LETTER TTHA", "MYANMAR LETTER DDA", "MYANMAR LETTER DDHA", "MYANMAR LETTER NNA", "MYANMAR LETTER TA", "MYANMAR LETTER THA", "MYANMAR LETTER DA", "MYANMAR LETTER DHA", "MYANMAR LETTER NA", "MYANMAR LETTER PA", "MYANMAR LETTER PHA", "MYANMAR LETTER BA", "MYANMAR LETTER BHA", "MYANMAR LETTER MA", "MYANMAR LETTER YA", "MYANMAR LETTER RA", "MYANMAR LETTER LA", "MYANMAR LETTER WA", "MYANMAR LETTER SA", "MYANMAR LETTER HA", "MYANMAR LETTER LLA", "MYANMAR LETTER A", "MYANMAR LETTER SHAN A", "MYANMAR LETTER I", "MYANMAR LETTER II", "MYANMAR LETTER U", "MYANMAR LETTER UU", "MYANMAR LETTER E", "MYANMAR LETTER MON E", "MYANMAR LETTER O", "MYANMAR LETTER AU", "MYANMAR VOWEL SIGN TALL AA", "MYANMAR VOWEL SIGN AA", "MYANMAR VOWEL SIGN I", "MYANMAR VOWEL SIGN II", "MYANMAR VOWEL SIGN U", "MYANMAR VOWEL SIGN UU", "MYANMAR VOWEL SIGN E", "MYANMAR VOWEL SIGN AI", "MYANMAR VOWEL SIGN MON II", "MYANMAR VOWEL SIGN MON O", "MYANMAR VOWEL SIGN E ABOVE", "MYANMAR SIGN ANUSVARA", "MYANMAR SIGN DOT BELOW", "MYANMAR SIGN VISARGA", "MYANMAR SIGN VIRAMA", "MYANMAR SIGN ASAT", "MYANMAR CONSONANT SIGN MEDIAL YA", "MYANMAR CONSONANT SIGN MEDIAL RA", "MYANMAR CONSONANT SIGN MEDIAL WA", "MYANMAR CONSONANT SIGN MEDIAL HA", "MYANMAR LETTER GREAT SA", "MYANMAR DIGIT ZERO", "MYANMAR DIGIT ONE", "MYANMAR DIGIT TWO", "MYANMAR DIGIT THREE", "MYANMAR DIGIT FOUR", "MYANMAR DIGIT FIVE", "MYANMAR DIGIT SIX", "MYANMAR DIGIT SEVEN", "MYANMAR DIGIT EIGHT", "MYANMAR DIGIT NINE", "MYANMAR SIGN LITTLE SECTION", "MYANMAR SIGN SECTION", "MYANMAR SYMBOL LOCATIVE", "MYANMAR SYMBOL COMPLETED", "MYANMAR SYMBOL AFOREMENTIONED", "MYANMAR SYMBOL GENITIVE", "MYANMAR LETTER SHA", "MYANMAR LETTER SSA", "MYANMAR LETTER VOCALIC R", "MYANMAR LETTER VOCALIC RR", "MYANMAR LETTER VOCALIC L", "MYANMAR LETTER VOCALIC LL", "MYANMAR VOWEL SIGN VOCALIC R", "MYANMAR VOWEL SIGN VOCALIC RR", "MYANMAR VOWEL SIGN VOCALIC L", "MYANMAR VOWEL SIGN VOCALIC LL", "MYANMAR LETTER MON NGA", "MYANMAR LETTER MON JHA", "MYANMAR LETTER MON BBA", "MYANMAR LETTER MON BBE", "MYANMAR CONSONANT SIGN MON MEDIAL NA", "MYANMAR CONSONANT SIGN MON MEDIAL MA", "MYANMAR CONSONANT SIGN MON MEDIAL LA", "MYANMAR LETTER SGAW KAREN SHA", "MYANMAR VOWEL SIGN SGAW KAREN EU", "MYANMAR TONE MARK SGAW KAREN HATHI", "MYANMAR TONE MARK SGAW KAREN KE PHO", "MYANMAR LETTER WESTERN PWO KAREN THA", "MYANMAR LETTER WESTERN PWO KAREN PWA", "MYANMAR VOWEL SIGN WESTERN PWO KAREN EU", "MYANMAR VOWEL SIGN WESTERN PWO KAREN UE", "MYANMAR SIGN WESTERN PWO KAREN TONE-1", "MYANMAR SIGN WESTERN PWO KAREN TONE-2", "MYANMAR SIGN WESTERN PWO KAREN TONE-3", "MYANMAR SIGN WESTERN PWO KAREN TONE-4", "MYANMAR SIGN WESTERN PWO KAREN TONE-5", "MYANMAR LETTER EASTERN PWO KAREN NNA", "MYANMAR LETTER EASTERN PWO KAREN YWA", "MYANMAR LETTER EASTERN PWO KAREN GHWA", "MYANMAR VOWEL SIGN GEBA KAREN I", "MYANMAR VOWEL SIGN KAYAH OE", "MYANMAR VOWEL SIGN KAYAH U", "MYANMAR VOWEL SIGN KAYAH EE", "MYANMAR LETTER SHAN KA", "MYANMAR LETTER SHAN KHA", "MYANMAR LETTER SHAN GA", "MYANMAR LETTER SHAN CA", "MYANMAR LETTER SHAN ZA", "MYANMAR LETTER SHAN NYA", "MYANMAR LETTER SHAN DA", "MYANMAR LETTER SHAN NA", "MYANMAR LETTER SHAN PHA", "MYANMAR LETTER SHAN FA", "MYANMAR LETTER SHAN BA", "MYANMAR LETTER SHAN THA", "MYANMAR LETTER SHAN HA", "MYANMAR CONSONANT SIGN SHAN MEDIAL WA", "MYANMAR VOWEL SIGN SHAN AA", "MYANMAR VOWEL SIGN SHAN E", "MYANMAR VOWEL SIGN SHAN E ABOVE", "MYANMAR VOWEL SIGN SHAN FINAL Y", "MYANMAR SIGN SHAN TONE-2", "MYANMAR SIGN SHAN TONE-3", "MYANMAR SIGN SHAN TONE-5", "MYANMAR SIGN SHAN TONE-6", "MYANMAR SIGN SHAN COUNCIL TONE-2", "MYANMAR SIGN SHAN COUNCIL TONE-3", "MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE", "MYANMAR LETTER RUMAI PALAUNG FA", "MYANMAR SIGN RUMAI PALAUNG TONE-5", "MYANMAR SHAN DIGIT ZERO", "MYANMAR SHAN DIGIT ONE", "MYANMAR SHAN DIGIT TWO", "MYANMAR SHAN DIGIT THREE", "MYANMAR SHAN DIGIT FOUR", "MYANMAR SHAN DIGIT FIVE", "MYANMAR SHAN DIGIT SIX", "MYANMAR SHAN DIGIT SEVEN", "MYANMAR SHAN DIGIT EIGHT", "MYANMAR SHAN DIGIT NINE", "MYANMAR SIGN KHAMTI TONE-1", "MYANMAR SIGN KHAMTI TONE-3", "MYANMAR VOWEL SIGN AITON A", "MYANMAR VOWEL SIGN AITON AI", "MYANMAR SYMBOL SHAN ONE", "MYANMAR SYMBOL SHAN EXCLAMATION", "GEORGIAN CAPITAL LETTER AN", "GEORGIAN CAPITAL LETTER BAN", "GEORGIAN CAPITAL LETTER GAN", "GEORGIAN CAPITAL LETTER DON", "GEORGIAN CAPITAL LETTER EN", "GEORGIAN CAPITAL LETTER VIN", "GEORGIAN CAPITAL LETTER ZEN", "GEORGIAN CAPITAL LETTER TAN", "GEORGIAN CAPITAL LETTER IN", "GEORGIAN CAPITAL LETTER KAN", "GEORGIAN CAPITAL LETTER LAS", "GEORGIAN CAPITAL LETTER MAN", "GEORGIAN CAPITAL LETTER NAR", "GEORGIAN CAPITAL LETTER ON", "GEORGIAN CAPITAL LETTER PAR", "GEORGIAN CAPITAL LETTER ZHAR", "GEORGIAN CAPITAL LETTER RAE", "GEORGIAN CAPITAL LETTER SAN", "GEORGIAN CAPITAL LETTER TAR", "GEORGIAN CAPITAL LETTER UN", "GEORGIAN CAPITAL LETTER PHAR", "GEORGIAN CAPITAL LETTER KHAR", "GEORGIAN CAPITAL LETTER GHAN", "GEORGIAN CAPITAL LETTER QAR", "GEORGIAN CAPITAL LETTER SHIN", "GEORGIAN CAPITAL LETTER CHIN", "GEORGIAN CAPITAL LETTER CAN", "GEORGIAN CAPITAL LETTER JIL", "GEORGIAN CAPITAL LETTER CIL", "GEORGIAN CAPITAL LETTER CHAR", "GEORGIAN CAPITAL LETTER XAN", "GEORGIAN CAPITAL LETTER JHAN", "GEORGIAN CAPITAL LETTER HAE", "GEORGIAN CAPITAL LETTER HE", "GEORGIAN CAPITAL LETTER HIE", "GEORGIAN CAPITAL LETTER WE", "GEORGIAN CAPITAL LETTER HAR", "GEORGIAN CAPITAL LETTER HOE", "GEORGIAN CAPITAL LETTER YN", "GEORGIAN CAPITAL LETTER AEN", "GEORGIAN LETTER AN", "GEORGIAN LETTER BAN", "GEORGIAN LETTER GAN", "GEORGIAN LETTER DON", "GEORGIAN LETTER EN", "GEORGIAN LETTER VIN", "GEORGIAN LETTER ZEN", "GEORGIAN LETTER TAN", "GEORGIAN LETTER IN", "GEORGIAN LETTER KAN", "GEORGIAN LETTER LAS", "GEORGIAN LETTER MAN", "GEORGIAN LETTER NAR", "GEORGIAN LETTER ON", "GEORGIAN LETTER PAR", "GEORGIAN LETTER ZHAR", "GEORGIAN LETTER RAE", "GEORGIAN LETTER SAN", "GEORGIAN LETTER TAR", "GEORGIAN LETTER UN", "GEORGIAN LETTER PHAR", "GEORGIAN LETTER KHAR", "GEORGIAN LETTER GHAN", "GEORGIAN LETTER QAR", "GEORGIAN LETTER SHIN", "GEORGIAN LETTER CHIN", "GEORGIAN LETTER CAN", "GEORGIAN LETTER JIL", "GEORGIAN LETTER CIL", "GEORGIAN LETTER CHAR", "GEORGIAN LETTER XAN", "GEORGIAN LETTER JHAN", "GEORGIAN LETTER HAE", "GEORGIAN LETTER HE", "GEORGIAN LETTER HIE", "GEORGIAN LETTER WE", "GEORGIAN LETTER HAR", "GEORGIAN LETTER HOE", "GEORGIAN LETTER FI", "GEORGIAN LETTER YN", "GEORGIAN LETTER ELIFI", "GEORGIAN LETTER TURNED GAN", "GEORGIAN LETTER AIN", "GEORGIAN PARAGRAPH SEPARATOR", "MODIFIER LETTER GEORGIAN NAR", "GEORGIAN LETTER AEN", "GEORGIAN LETTER HARD SIGN", "GEORGIAN LETTER LABIAL SIGN", "HANGUL CHOSEONG KIYEOK", "HANGUL CHOSEONG SSANGKIYEOK", "HANGUL CHOSEONG NIEUN", "HANGUL CHOSEONG TIKEUT", "HANGUL CHOSEONG SSANGTIKEUT", "HANGUL CHOSEONG RIEUL", "HANGUL CHOSEONG MIEUM", "HANGUL CHOSEONG PIEUP", "HANGUL CHOSEONG SSANGPIEUP", "HANGUL CHOSEONG SIOS", "HANGUL CHOSEONG SSANGSIOS", "HANGUL CHOSEONG IEUNG", "HANGUL CHOSEONG CIEUC", "HANGUL CHOSEONG SSANGCIEUC", "HANGUL CHOSEONG CHIEUCH", "HANGUL CHOSEONG KHIEUKH", "HANGUL CHOSEONG THIEUTH", "HANGUL CHOSEONG PHIEUPH", "HANGUL CHOSEONG HIEUH", "HANGUL CHOSEONG NIEUN-KIYEOK", "HANGUL CHOSEONG SSANGNIEUN", "HANGUL CHOSEONG NIEUN-TIKEUT", "HANGUL CHOSEONG NIEUN-PIEUP", "HANGUL CHOSEONG TIKEUT-KIYEOK", "HANGUL CHOSEONG RIEUL-NIEUN", "HANGUL CHOSEONG SSANGRIEUL", "HANGUL CHOSEONG RIEUL-HIEUH", "HANGUL CHOSEONG KAPYEOUNRIEUL", "HANGUL CHOSEONG MIEUM-PIEUP", "HANGUL CHOSEONG KAPYEOUNMIEUM", "HANGUL CHOSEONG PIEUP-KIYEOK", "HANGUL CHOSEONG PIEUP-NIEUN", "HANGUL CHOSEONG PIEUP-TIKEUT", "HANGUL CHOSEONG PIEUP-SIOS", "HANGUL CHOSEONG PIEUP-SIOS-KIYEOK", "HANGUL CHOSEONG PIEUP-SIOS-TIKEUT", "HANGUL CHOSEONG PIEUP-SIOS-PIEUP", "HANGUL CHOSEONG PIEUP-SSANGSIOS", "HANGUL CHOSEONG PIEUP-SIOS-CIEUC", "HANGUL CHOSEONG PIEUP-CIEUC", "HANGUL CHOSEONG PIEUP-CHIEUCH", "HANGUL CHOSEONG PIEUP-THIEUTH", "HANGUL CHOSEONG PIEUP-PHIEUPH", "HANGUL CHOSEONG KAPYEOUNPIEUP", "HANGUL CHOSEONG KAPYEOUNSSANGPIEUP", "HANGUL CHOSEONG SIOS-KIYEOK", "HANGUL CHOSEONG SIOS-NIEUN", "HANGUL CHOSEONG SIOS-TIKEUT", "HANGUL CHOSEONG SIOS-RIEUL", "HANGUL CHOSEONG SIOS-MIEUM", "HANGUL CHOSEONG SIOS-PIEUP", "HANGUL CHOSEONG SIOS-PIEUP-KIYEOK", "HANGUL CHOSEONG SIOS-SSANGSIOS", "HANGUL CHOSEONG SIOS-IEUNG", "HANGUL CHOSEONG SIOS-CIEUC", "HANGUL CHOSEONG SIOS-CHIEUCH", "HANGUL CHOSEONG SIOS-KHIEUKH", "HANGUL CHOSEONG SIOS-THIEUTH", "HANGUL CHOSEONG SIOS-PHIEUPH", "HANGUL CHOSEONG SIOS-HIEUH", "HANGUL CHOSEONG CHITUEUMSIOS", "HANGUL CHOSEONG CHITUEUMSSANGSIOS", "HANGUL CHOSEONG CEONGCHIEUMSIOS", "HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS", "HANGUL CHOSEONG PANSIOS", "HANGUL CHOSEONG IEUNG-KIYEOK", "HANGUL CHOSEONG IEUNG-TIKEUT", "HANGUL CHOSEONG IEUNG-MIEUM", "HANGUL CHOSEONG IEUNG-PIEUP", "HANGUL CHOSEONG IEUNG-SIOS", "HANGUL CHOSEONG IEUNG-PANSIOS", "HANGUL CHOSEONG SSANGIEUNG", "HANGUL CHOSEONG IEUNG-CIEUC", "HANGUL CHOSEONG IEUNG-CHIEUCH", "HANGUL CHOSEONG IEUNG-THIEUTH", "HANGUL CHOSEONG IEUNG-PHIEUPH", "HANGUL CHOSEONG YESIEUNG", "HANGUL CHOSEONG CIEUC-IEUNG", "HANGUL CHOSEONG CHITUEUMCIEUC", "HANGUL CHOSEONG CHITUEUMSSANGCIEUC", "HANGUL CHOSEONG CEONGCHIEUMCIEUC", "HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC", "HANGUL CHOSEONG CHIEUCH-KHIEUKH", "HANGUL CHOSEONG CHIEUCH-HIEUH", "HANGUL CHOSEONG CHITUEUMCHIEUCH", "HANGUL CHOSEONG CEONGCHIEUMCHIEUCH", "HANGUL CHOSEONG PHIEUPH-PIEUP", "HANGUL CHOSEONG KAPYEOUNPHIEUPH", "HANGUL CHOSEONG SSANGHIEUH", "HANGUL CHOSEONG YEORINHIEUH", "HANGUL CHOSEONG KIYEOK-TIKEUT", "HANGUL CHOSEONG NIEUN-SIOS", "HANGUL CHOSEONG NIEUN-CIEUC", "HANGUL CHOSEONG NIEUN-HIEUH", "HANGUL CHOSEONG TIKEUT-RIEUL", "HANGUL CHOSEONG FILLER", "HANGUL JUNGSEONG FILLER", "HANGUL JUNGSEONG A", "HANGUL JUNGSEONG AE", "HANGUL JUNGSEONG YA", "HANGUL JUNGSEONG YAE", "HANGUL JUNGSEONG EO", "HANGUL JUNGSEONG E", "HANGUL JUNGSEONG YEO", "HANGUL JUNGSEONG YE", "HANGUL JUNGSEONG O", "HANGUL JUNGSEONG WA", "HANGUL JUNGSEONG WAE", "HANGUL JUNGSEONG OE", "HANGUL JUNGSEONG YO", "HANGUL JUNGSEONG U", "HANGUL JUNGSEONG WEO", "HANGUL JUNGSEONG WE", "HANGUL JUNGSEONG WI", "HANGUL JUNGSEONG YU", "HANGUL JUNGSEONG EU", "HANGUL JUNGSEONG YI", "HANGUL JUNGSEONG I", "HANGUL JUNGSEONG A-O", "HANGUL JUNGSEONG A-U", "HANGUL JUNGSEONG YA-O", "HANGUL JUNGSEONG YA-YO", "HANGUL JUNGSEONG EO-O", "HANGUL JUNGSEONG EO-U", "HANGUL JUNGSEONG EO-EU", "HANGUL JUNGSEONG YEO-O", "HANGUL JUNGSEONG YEO-U", "HANGUL JUNGSEONG O-EO", "HANGUL JUNGSEONG O-E", "HANGUL JUNGSEONG O-YE", "HANGUL JUNGSEONG O-O", "HANGUL JUNGSEONG O-U", "HANGUL JUNGSEONG YO-YA", "HANGUL JUNGSEONG YO-YAE", "HANGUL JUNGSEONG YO-YEO", "HANGUL JUNGSEONG YO-O", "HANGUL JUNGSEONG YO-I", "HANGUL JUNGSEONG U-A", "HANGUL JUNGSEONG U-AE", "HANGUL JUNGSEONG U-EO-EU", "HANGUL JUNGSEONG U-YE", "HANGUL JUNGSEONG U-U", "HANGUL JUNGSEONG YU-A", "HANGUL JUNGSEONG YU-EO", "HANGUL JUNGSEONG YU-E", "HANGUL JUNGSEONG YU-YEO", "HANGUL JUNGSEONG YU-YE", "HANGUL JUNGSEONG YU-U", "HANGUL JUNGSEONG YU-I", "HANGUL JUNGSEONG EU-U", "HANGUL JUNGSEONG EU-EU", "HANGUL JUNGSEONG YI-U", "HANGUL JUNGSEONG I-A", "HANGUL JUNGSEONG I-YA", "HANGUL JUNGSEONG I-O", "HANGUL JUNGSEONG I-U", "HANGUL JUNGSEONG I-EU", "HANGUL JUNGSEONG I-ARAEA", "HANGUL JUNGSEONG ARAEA", "HANGUL JUNGSEONG ARAEA-EO", "HANGUL JUNGSEONG ARAEA-U", "HANGUL JUNGSEONG ARAEA-I", "HANGUL JUNGSEONG SSANGARAEA", "HANGUL JUNGSEONG A-EU", "HANGUL JUNGSEONG YA-U", "HANGUL JUNGSEONG YEO-YA", "HANGUL JUNGSEONG O-YA", "HANGUL JUNGSEONG O-YAE", "HANGUL JONGSEONG KIYEOK", "HANGUL JONGSEONG SSANGKIYEOK", "HANGUL JONGSEONG KIYEOK-SIOS", "HANGUL JONGSEONG NIEUN", "HANGUL JONGSEONG NIEUN-CIEUC", "HANGUL JONGSEONG NIEUN-HIEUH", "HANGUL JONGSEONG TIKEUT", "HANGUL JONGSEONG RIEUL", "HANGUL JONGSEONG RIEUL-KIYEOK", "HANGUL JONGSEONG RIEUL-MIEUM", "HANGUL JONGSEONG RIEUL-PIEUP", "HANGUL JONGSEONG RIEUL-SIOS", "HANGUL JONGSEONG RIEUL-THIEUTH", "HANGUL JONGSEONG RIEUL-PHIEUPH", "HANGUL JONGSEONG RIEUL-HIEUH", "HANGUL JONGSEONG MIEUM", "HANGUL JONGSEONG PIEUP", "HANGUL JONGSEONG PIEUP-SIOS", "HANGUL JONGSEONG SIOS", "HANGUL JONGSEONG SSANGSIOS", "HANGUL JONGSEONG IEUNG", "HANGUL JONGSEONG CIEUC", "HANGUL JONGSEONG CHIEUCH", "HANGUL JONGSEONG KHIEUKH", "HANGUL JONGSEONG THIEUTH", "HANGUL JONGSEONG PHIEUPH", "HANGUL JONGSEONG HIEUH", "HANGUL JONGSEONG KIYEOK-RIEUL", "HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK", "HANGUL JONGSEONG NIEUN-KIYEOK", "HANGUL JONGSEONG NIEUN-TIKEUT", "HANGUL JONGSEONG NIEUN-SIOS", "HANGUL JONGSEONG NIEUN-PANSIOS", "HANGUL JONGSEONG NIEUN-THIEUTH", "HANGUL JONGSEONG TIKEUT-KIYEOK", "HANGUL JONGSEONG TIKEUT-RIEUL", "HANGUL JONGSEONG RIEUL-KIYEOK-SIOS", "HANGUL JONGSEONG RIEUL-NIEUN", "HANGUL JONGSEONG RIEUL-TIKEUT", "HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH", "HANGUL JONGSEONG SSANGRIEUL", "HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK", "HANGUL JONGSEONG RIEUL-MIEUM-SIOS", "HANGUL JONGSEONG RIEUL-PIEUP-SIOS", "HANGUL JONGSEONG RIEUL-PIEUP-HIEUH", "HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP", "HANGUL JONGSEONG RIEUL-SSANGSIOS", "HANGUL JONGSEONG RIEUL-PANSIOS", "HANGUL JONGSEONG RIEUL-KHIEUKH", "HANGUL JONGSEONG RIEUL-YEORINHIEUH", "HANGUL JONGSEONG MIEUM-KIYEOK", "HANGUL JONGSEONG MIEUM-RIEUL", "HANGUL JONGSEONG MIEUM-PIEUP", "HANGUL JONGSEONG MIEUM-SIOS", "HANGUL JONGSEONG MIEUM-SSANGSIOS", "HANGUL JONGSEONG MIEUM-PANSIOS", "HANGUL JONGSEONG MIEUM-CHIEUCH", "HANGUL JONGSEONG MIEUM-HIEUH", "HANGUL JONGSEONG KAPYEOUNMIEUM", "HANGUL JONGSEONG PIEUP-RIEUL", "HANGUL JONGSEONG PIEUP-PHIEUPH", "HANGUL JONGSEONG PIEUP-HIEUH", "HANGUL JONGSEONG KAPYEOUNPIEUP", "HANGUL JONGSEONG SIOS-KIYEOK", "HANGUL JONGSEONG SIOS-TIKEUT", "HANGUL JONGSEONG SIOS-RIEUL", "HANGUL JONGSEONG SIOS-PIEUP", "HANGUL JONGSEONG PANSIOS", "HANGUL JONGSEONG IEUNG-KIYEOK", "HANGUL JONGSEONG IEUNG-SSANGKIYEOK", "HANGUL JONGSEONG SSANGIEUNG", "HANGUL JONGSEONG IEUNG-KHIEUKH", "HANGUL JONGSEONG YESIEUNG", "HANGUL JONGSEONG YESIEUNG-SIOS", "HANGUL JONGSEONG YESIEUNG-PANSIOS", "HANGUL JONGSEONG PHIEUPH-PIEUP", "HANGUL JONGSEONG KAPYEOUNPHIEUPH", "HANGUL JONGSEONG HIEUH-NIEUN", "HANGUL JONGSEONG HIEUH-RIEUL", "HANGUL JONGSEONG HIEUH-MIEUM", "HANGUL JONGSEONG HIEUH-PIEUP", "HANGUL JONGSEONG YEORINHIEUH", "HANGUL JONGSEONG KIYEOK-NIEUN", "HANGUL JONGSEONG KIYEOK-PIEUP", "HANGUL JONGSEONG KIYEOK-CHIEUCH", "HANGUL JONGSEONG KIYEOK-KHIEUKH", "HANGUL JONGSEONG KIYEOK-HIEUH", "HANGUL JONGSEONG SSANGNIEUN", "ETHIOPIC SYLLABLE HA", "ETHIOPIC SYLLABLE HU", "ETHIOPIC SYLLABLE HI", "ETHIOPIC SYLLABLE HAA", "ETHIOPIC SYLLABLE HEE", "ETHIOPIC SYLLABLE HE", "ETHIOPIC SYLLABLE HO", "ETHIOPIC SYLLABLE HOA", "ETHIOPIC SYLLABLE LA", "ETHIOPIC SYLLABLE LU", "ETHIOPIC SYLLABLE LI", "ETHIOPIC SYLLABLE LAA", "ETHIOPIC SYLLABLE LEE", "ETHIOPIC SYLLABLE LE", "ETHIOPIC SYLLABLE LO", "ETHIOPIC SYLLABLE LWA", "ETHIOPIC SYLLABLE HHA", "ETHIOPIC SYLLABLE HHU", "ETHIOPIC SYLLABLE HHI", "ETHIOPIC SYLLABLE HHAA", "ETHIOPIC SYLLABLE HHEE", "ETHIOPIC SYLLABLE HHE", "ETHIOPIC SYLLABLE HHO", "ETHIOPIC SYLLABLE HHWA", "ETHIOPIC SYLLABLE MA", "ETHIOPIC SYLLABLE MU", "ETHIOPIC SYLLABLE MI", "ETHIOPIC SYLLABLE MAA", "ETHIOPIC SYLLABLE MEE", "ETHIOPIC SYLLABLE ME", "ETHIOPIC SYLLABLE MO", "ETHIOPIC SYLLABLE MWA", "ETHIOPIC SYLLABLE SZA", "ETHIOPIC SYLLABLE SZU", "ETHIOPIC SYLLABLE SZI", "ETHIOPIC SYLLABLE SZAA", "ETHIOPIC SYLLABLE SZEE", "ETHIOPIC SYLLABLE SZE", "ETHIOPIC SYLLABLE SZO", "ETHIOPIC SYLLABLE SZWA", "ETHIOPIC SYLLABLE RA", "ETHIOPIC SYLLABLE RU", "ETHIOPIC SYLLABLE RI", "ETHIOPIC SYLLABLE RAA", "ETHIOPIC SYLLABLE REE", "ETHIOPIC SYLLABLE RE", "ETHIOPIC SYLLABLE RO", "ETHIOPIC SYLLABLE RWA", "ETHIOPIC SYLLABLE SA", "ETHIOPIC SYLLABLE SU", "ETHIOPIC SYLLABLE SI", "ETHIOPIC SYLLABLE SAA", "ETHIOPIC SYLLABLE SEE", "ETHIOPIC SYLLABLE SE", "ETHIOPIC SYLLABLE SO", "ETHIOPIC SYLLABLE SWA", "ETHIOPIC SYLLABLE SHA", "ETHIOPIC SYLLABLE SHU", "ETHIOPIC SYLLABLE SHI", "ETHIOPIC SYLLABLE SHAA", "ETHIOPIC SYLLABLE SHEE", "ETHIOPIC SYLLABLE SHE", "ETHIOPIC SYLLABLE SHO", "ETHIOPIC SYLLABLE SHWA", "ETHIOPIC SYLLABLE QA", "ETHIOPIC SYLLABLE QU", "ETHIOPIC SYLLABLE QI", "ETHIOPIC SYLLABLE QAA", "ETHIOPIC SYLLABLE QEE", "ETHIOPIC SYLLABLE QE", "ETHIOPIC SYLLABLE QO", "ETHIOPIC SYLLABLE QOA", "ETHIOPIC SYLLABLE QWA", "ETHIOPIC SYLLABLE QWI", "ETHIOPIC SYLLABLE QWAA", "ETHIOPIC SYLLABLE QWEE", "ETHIOPIC SYLLABLE QWE", "ETHIOPIC SYLLABLE QHA", "ETHIOPIC SYLLABLE QHU", "ETHIOPIC SYLLABLE QHI", "ETHIOPIC SYLLABLE QHAA", "ETHIOPIC SYLLABLE QHEE", "ETHIOPIC SYLLABLE QHE", "ETHIOPIC SYLLABLE QHO", "ETHIOPIC SYLLABLE QHWA", "ETHIOPIC SYLLABLE QHWI", "ETHIOPIC SYLLABLE QHWAA", "ETHIOPIC SYLLABLE QHWEE", "ETHIOPIC SYLLABLE QHWE", "ETHIOPIC SYLLABLE BA", "ETHIOPIC SYLLABLE BU", "ETHIOPIC SYLLABLE BI", "ETHIOPIC SYLLABLE BAA", "ETHIOPIC SYLLABLE BEE", "ETHIOPIC SYLLABLE BE", "ETHIOPIC SYLLABLE BO", "ETHIOPIC SYLLABLE BWA", "ETHIOPIC SYLLABLE VA", "ETHIOPIC SYLLABLE VU", "ETHIOPIC SYLLABLE VI", "ETHIOPIC SYLLABLE VAA", "ETHIOPIC SYLLABLE VEE", "ETHIOPIC SYLLABLE VE", "ETHIOPIC SYLLABLE VO", "ETHIOPIC SYLLABLE VWA", "ETHIOPIC SYLLABLE TA", "ETHIOPIC SYLLABLE TU", "ETHIOPIC SYLLABLE TI", "ETHIOPIC SYLLABLE TAA", "ETHIOPIC SYLLABLE TEE", "ETHIOPIC SYLLABLE TE", "ETHIOPIC SYLLABLE TO", "ETHIOPIC SYLLABLE TWA", "ETHIOPIC SYLLABLE CA", "ETHIOPIC SYLLABLE CU", "ETHIOPIC SYLLABLE CI", "ETHIOPIC SYLLABLE CAA", "ETHIOPIC SYLLABLE CEE", "ETHIOPIC SYLLABLE CE", "ETHIOPIC SYLLABLE CO", "ETHIOPIC SYLLABLE CWA", "ETHIOPIC SYLLABLE XA", "ETHIOPIC SYLLABLE XU", "ETHIOPIC SYLLABLE XI", "ETHIOPIC SYLLABLE XAA", "ETHIOPIC SYLLABLE XEE", "ETHIOPIC SYLLABLE XE", "ETHIOPIC SYLLABLE XO", "ETHIOPIC SYLLABLE XOA", "ETHIOPIC SYLLABLE XWA", "ETHIOPIC SYLLABLE XWI", "ETHIOPIC SYLLABLE XWAA", "ETHIOPIC SYLLABLE XWEE", "ETHIOPIC SYLLABLE XWE", "ETHIOPIC SYLLABLE NA", "ETHIOPIC SYLLABLE NU", "ETHIOPIC SYLLABLE NI", "ETHIOPIC SYLLABLE NAA", "ETHIOPIC SYLLABLE NEE", "ETHIOPIC SYLLABLE NE", "ETHIOPIC SYLLABLE NO", "ETHIOPIC SYLLABLE NWA", "ETHIOPIC SYLLABLE NYA", "ETHIOPIC SYLLABLE NYU", "ETHIOPIC SYLLABLE NYI", "ETHIOPIC SYLLABLE NYAA", "ETHIOPIC SYLLABLE NYEE", "ETHIOPIC SYLLABLE NYE", "ETHIOPIC SYLLABLE NYO", "ETHIOPIC SYLLABLE NYWA", "ETHIOPIC SYLLABLE GLOTTAL A", "ETHIOPIC SYLLABLE GLOTTAL U", "ETHIOPIC SYLLABLE GLOTTAL I", "ETHIOPIC SYLLABLE GLOTTAL AA", "ETHIOPIC SYLLABLE GLOTTAL EE", "ETHIOPIC SYLLABLE GLOTTAL E", "ETHIOPIC SYLLABLE GLOTTAL O", "ETHIOPIC SYLLABLE GLOTTAL WA", "ETHIOPIC SYLLABLE KA", "ETHIOPIC SYLLABLE KU", "ETHIOPIC SYLLABLE KI", "ETHIOPIC SYLLABLE KAA", "ETHIOPIC SYLLABLE KEE", "ETHIOPIC SYLLABLE KE", "ETHIOPIC SYLLABLE KO", "ETHIOPIC SYLLABLE KOA", "ETHIOPIC SYLLABLE KWA", "ETHIOPIC SYLLABLE KWI", "ETHIOPIC SYLLABLE KWAA", "ETHIOPIC SYLLABLE KWEE", "ETHIOPIC SYLLABLE KWE", "ETHIOPIC SYLLABLE KXA", "ETHIOPIC SYLLABLE KXU", "ETHIOPIC SYLLABLE KXI", "ETHIOPIC SYLLABLE KXAA", "ETHIOPIC SYLLABLE KXEE", "ETHIOPIC SYLLABLE KXE", "ETHIOPIC SYLLABLE KXO", "ETHIOPIC SYLLABLE KXWA", "ETHIOPIC SYLLABLE KXWI", "ETHIOPIC SYLLABLE KXWAA", "ETHIOPIC SYLLABLE KXWEE", "ETHIOPIC SYLLABLE KXWE", "ETHIOPIC SYLLABLE WA", "ETHIOPIC SYLLABLE WU", "ETHIOPIC SYLLABLE WI", "ETHIOPIC SYLLABLE WAA", "ETHIOPIC SYLLABLE WEE", "ETHIOPIC SYLLABLE WE", "ETHIOPIC SYLLABLE WO", "ETHIOPIC SYLLABLE WOA", "ETHIOPIC SYLLABLE PHARYNGEAL A", "ETHIOPIC SYLLABLE PHARYNGEAL U", "ETHIOPIC SYLLABLE PHARYNGEAL I", "ETHIOPIC SYLLABLE PHARYNGEAL AA", "ETHIOPIC SYLLABLE PHARYNGEAL EE", "ETHIOPIC SYLLABLE PHARYNGEAL E", "ETHIOPIC SYLLABLE PHARYNGEAL O", "ETHIOPIC SYLLABLE ZA", "ETHIOPIC SYLLABLE ZU", "ETHIOPIC SYLLABLE ZI", "ETHIOPIC SYLLABLE ZAA", "ETHIOPIC SYLLABLE ZEE", "ETHIOPIC SYLLABLE ZE", "ETHIOPIC SYLLABLE ZO", "ETHIOPIC SYLLABLE ZWA", "ETHIOPIC SYLLABLE ZHA", "ETHIOPIC SYLLABLE ZHU", "ETHIOPIC SYLLABLE ZHI", "ETHIOPIC SYLLABLE ZHAA", "ETHIOPIC SYLLABLE ZHEE", "ETHIOPIC SYLLABLE ZHE", "ETHIOPIC SYLLABLE ZHO", "ETHIOPIC SYLLABLE ZHWA", "ETHIOPIC SYLLABLE YA", "ETHIOPIC SYLLABLE YU", "ETHIOPIC SYLLABLE YI", "ETHIOPIC SYLLABLE YAA", "ETHIOPIC SYLLABLE YEE", "ETHIOPIC SYLLABLE YE", "ETHIOPIC SYLLABLE YO", "ETHIOPIC SYLLABLE YOA", "ETHIOPIC SYLLABLE DA", "ETHIOPIC SYLLABLE DU", "ETHIOPIC SYLLABLE DI", "ETHIOPIC SYLLABLE DAA", "ETHIOPIC SYLLABLE DEE", "ETHIOPIC SYLLABLE DE", "ETHIOPIC SYLLABLE DO", "ETHIOPIC SYLLABLE DWA", "ETHIOPIC SYLLABLE DDA", "ETHIOPIC SYLLABLE DDU", "ETHIOPIC SYLLABLE DDI", "ETHIOPIC SYLLABLE DDAA", "ETHIOPIC SYLLABLE DDEE", "ETHIOPIC SYLLABLE DDE", "ETHIOPIC SYLLABLE DDO", "ETHIOPIC SYLLABLE DDWA", "ETHIOPIC SYLLABLE JA", "ETHIOPIC SYLLABLE JU", "ETHIOPIC SYLLABLE JI", "ETHIOPIC SYLLABLE JAA", "ETHIOPIC SYLLABLE JEE", "ETHIOPIC SYLLABLE JE", "ETHIOPIC SYLLABLE JO", "ETHIOPIC SYLLABLE JWA", "ETHIOPIC SYLLABLE GA", "ETHIOPIC SYLLABLE GU", "ETHIOPIC SYLLABLE GI", "ETHIOPIC SYLLABLE GAA", "ETHIOPIC SYLLABLE GEE", "ETHIOPIC SYLLABLE GE", "ETHIOPIC SYLLABLE GO", "ETHIOPIC SYLLABLE GOA", "ETHIOPIC SYLLABLE GWA", "ETHIOPIC SYLLABLE GWI", "ETHIOPIC SYLLABLE GWAA", "ETHIOPIC SYLLABLE GWEE", "ETHIOPIC SYLLABLE GWE", "ETHIOPIC SYLLABLE GGA", "ETHIOPIC SYLLABLE GGU", "ETHIOPIC SYLLABLE GGI", "ETHIOPIC SYLLABLE GGAA", "ETHIOPIC SYLLABLE GGEE", "ETHIOPIC SYLLABLE GGE", "ETHIOPIC SYLLABLE GGO", "ETHIOPIC SYLLABLE GGWAA", "ETHIOPIC SYLLABLE THA", "ETHIOPIC SYLLABLE THU", "ETHIOPIC SYLLABLE THI", "ETHIOPIC SYLLABLE THAA", "ETHIOPIC SYLLABLE THEE", "ETHIOPIC SYLLABLE THE", "ETHIOPIC SYLLABLE THO", "ETHIOPIC SYLLABLE THWA", "ETHIOPIC SYLLABLE CHA", "ETHIOPIC SYLLABLE CHU", "ETHIOPIC SYLLABLE CHI", "ETHIOPIC SYLLABLE CHAA", "ETHIOPIC SYLLABLE CHEE", "ETHIOPIC SYLLABLE CHE", "ETHIOPIC SYLLABLE CHO", "ETHIOPIC SYLLABLE CHWA", "ETHIOPIC SYLLABLE PHA", "ETHIOPIC SYLLABLE PHU", "ETHIOPIC SYLLABLE PHI", "ETHIOPIC SYLLABLE PHAA", "ETHIOPIC SYLLABLE PHEE", "ETHIOPIC SYLLABLE PHE", "ETHIOPIC SYLLABLE PHO", "ETHIOPIC SYLLABLE PHWA", "ETHIOPIC SYLLABLE TSA", "ETHIOPIC SYLLABLE TSU", "ETHIOPIC SYLLABLE TSI", "ETHIOPIC SYLLABLE TSAA", "ETHIOPIC SYLLABLE TSEE", "ETHIOPIC SYLLABLE TSE", "ETHIOPIC SYLLABLE TSO", "ETHIOPIC SYLLABLE TSWA", "ETHIOPIC SYLLABLE TZA", "ETHIOPIC SYLLABLE TZU", "ETHIOPIC SYLLABLE TZI", "ETHIOPIC SYLLABLE TZAA", "ETHIOPIC SYLLABLE TZEE", "ETHIOPIC SYLLABLE TZE", "ETHIOPIC SYLLABLE TZO", "ETHIOPIC SYLLABLE TZOA", "ETHIOPIC SYLLABLE FA", "ETHIOPIC SYLLABLE FU", "ETHIOPIC SYLLABLE FI", "ETHIOPIC SYLLABLE FAA", "ETHIOPIC SYLLABLE FEE", "ETHIOPIC SYLLABLE FE", "ETHIOPIC SYLLABLE FO", "ETHIOPIC SYLLABLE FWA", "ETHIOPIC SYLLABLE PA", "ETHIOPIC SYLLABLE PU", "ETHIOPIC SYLLABLE PI", "ETHIOPIC SYLLABLE PAA", "ETHIOPIC SYLLABLE PEE", "ETHIOPIC SYLLABLE PE", "ETHIOPIC SYLLABLE PO", "ETHIOPIC SYLLABLE PWA", "ETHIOPIC SYLLABLE RYA", "ETHIOPIC SYLLABLE MYA", "ETHIOPIC SYLLABLE FYA", "ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK", "ETHIOPIC COMBINING VOWEL LENGTH MARK", "ETHIOPIC COMBINING GEMINATION MARK", "ETHIOPIC SECTION MARK", "ETHIOPIC WORDSPACE", "ETHIOPIC FULL STOP", "ETHIOPIC COMMA", "ETHIOPIC SEMICOLON", "ETHIOPIC COLON", "ETHIOPIC PREFACE COLON", "ETHIOPIC QUESTION MARK", "ETHIOPIC PARAGRAPH SEPARATOR", "ETHIOPIC DIGIT ONE", "ETHIOPIC DIGIT TWO", "ETHIOPIC DIGIT THREE", "ETHIOPIC DIGIT FOUR", "ETHIOPIC DIGIT FIVE", "ETHIOPIC DIGIT SIX", "ETHIOPIC DIGIT SEVEN", "ETHIOPIC DIGIT EIGHT", "ETHIOPIC DIGIT NINE", "ETHIOPIC NUMBER TEN", "ETHIOPIC NUMBER TWENTY", "ETHIOPIC NUMBER THIRTY", "ETHIOPIC NUMBER FORTY", "ETHIOPIC NUMBER FIFTY", "ETHIOPIC NUMBER SIXTY", "ETHIOPIC NUMBER SEVENTY", "ETHIOPIC NUMBER EIGHTY", "ETHIOPIC NUMBER NINETY", "ETHIOPIC NUMBER HUNDRED", "ETHIOPIC NUMBER TEN THOUSAND", "ETHIOPIC SYLLABLE SEBATBEIT MWA", "ETHIOPIC SYLLABLE MWI", "ETHIOPIC SYLLABLE MWEE", "ETHIOPIC SYLLABLE MWE", "ETHIOPIC SYLLABLE SEBATBEIT BWA", "ETHIOPIC SYLLABLE BWI", "ETHIOPIC SYLLABLE BWEE", "ETHIOPIC SYLLABLE BWE", "ETHIOPIC SYLLABLE SEBATBEIT FWA", "ETHIOPIC SYLLABLE FWI", "ETHIOPIC SYLLABLE FWEE", "ETHIOPIC SYLLABLE FWE", "ETHIOPIC SYLLABLE SEBATBEIT PWA", "ETHIOPIC SYLLABLE PWI", "ETHIOPIC SYLLABLE PWEE", "ETHIOPIC SYLLABLE PWE", "ETHIOPIC TONAL MARK YIZET", "ETHIOPIC TONAL MARK DERET", "ETHIOPIC TONAL MARK RIKRIK", "ETHIOPIC TONAL MARK SHORT RIKRIK", "ETHIOPIC TONAL MARK DIFAT", "ETHIOPIC TONAL MARK KENAT", "ETHIOPIC TONAL MARK CHIRET", "ETHIOPIC TONAL MARK HIDET", "ETHIOPIC TONAL MARK DERET-HIDET", "ETHIOPIC TONAL MARK KURT", "CHEROKEE LETTER A", "CHEROKEE LETTER E", "CHEROKEE LETTER I", "CHEROKEE LETTER O", "CHEROKEE LETTER U", "CHEROKEE LETTER V", "CHEROKEE LETTER GA", "CHEROKEE LETTER KA", "CHEROKEE LETTER GE", "CHEROKEE LETTER GI", "CHEROKEE LETTER GO", "CHEROKEE LETTER GU", "CHEROKEE LETTER GV", "CHEROKEE LETTER HA", "CHEROKEE LETTER HE", "CHEROKEE LETTER HI", "CHEROKEE LETTER HO", "CHEROKEE LETTER HU", "CHEROKEE LETTER HV", "CHEROKEE LETTER LA", "CHEROKEE LETTER LE", "CHEROKEE LETTER LI", "CHEROKEE LETTER LO", "CHEROKEE LETTER LU", "CHEROKEE LETTER LV", "CHEROKEE LETTER MA", "CHEROKEE LETTER ME", "CHEROKEE LETTER MI", "CHEROKEE LETTER MO", "CHEROKEE LETTER MU", "CHEROKEE LETTER NA", "CHEROKEE LETTER HNA", "CHEROKEE LETTER NAH", "CHEROKEE LETTER NE", "CHEROKEE LETTER NI", "CHEROKEE LETTER NO", "CHEROKEE LETTER NU", "CHEROKEE LETTER NV", "CHEROKEE LETTER QUA", "CHEROKEE LETTER QUE", "CHEROKEE LETTER QUI", "CHEROKEE LETTER QUO", "CHEROKEE LETTER QUU", "CHEROKEE LETTER QUV", "CHEROKEE LETTER SA", "CHEROKEE LETTER S", "CHEROKEE LETTER SE", "CHEROKEE LETTER SI", "CHEROKEE LETTER SO", "CHEROKEE LETTER SU", "CHEROKEE LETTER SV", "CHEROKEE LETTER DA", "CHEROKEE LETTER TA", "CHEROKEE LETTER DE", "CHEROKEE LETTER TE", "CHEROKEE LETTER DI", "CHEROKEE LETTER TI", "CHEROKEE LETTER DO", "CHEROKEE LETTER DU", "CHEROKEE LETTER DV", "CHEROKEE LETTER DLA", "CHEROKEE LETTER TLA", "CHEROKEE LETTER TLE", "CHEROKEE LETTER TLI", "CHEROKEE LETTER TLO", "CHEROKEE LETTER TLU", "CHEROKEE LETTER TLV", "CHEROKEE LETTER TSA", "CHEROKEE LETTER TSE", "CHEROKEE LETTER TSI", "CHEROKEE LETTER TSO", "CHEROKEE LETTER TSU", "CHEROKEE LETTER TSV", "CHEROKEE LETTER WA", "CHEROKEE LETTER WE", "CHEROKEE LETTER WI", "CHEROKEE LETTER WO", "CHEROKEE LETTER WU", "CHEROKEE LETTER WV", "CHEROKEE LETTER YA", "CHEROKEE LETTER YE", "CHEROKEE LETTER YI", "CHEROKEE LETTER YO", "CHEROKEE LETTER YU", "CHEROKEE LETTER YV", "CHEROKEE LETTER MV", "CHEROKEE SMALL LETTER YE", "CHEROKEE SMALL LETTER YI", "CHEROKEE SMALL LETTER YO", "CHEROKEE SMALL LETTER YU", "CHEROKEE SMALL LETTER YV", "CHEROKEE SMALL LETTER MV", "CANADIAN SYLLABICS HYPHEN", "CANADIAN SYLLABICS E", "CANADIAN SYLLABICS AAI", "CANADIAN SYLLABICS I", "CANADIAN SYLLABICS II", "CANADIAN SYLLABICS O", "CANADIAN SYLLABICS OO", "CANADIAN SYLLABICS Y-CREE OO", "CANADIAN SYLLABICS CARRIER EE", "CANADIAN SYLLABICS CARRIER I", "CANADIAN SYLLABICS A", "CANADIAN SYLLABICS AA", "CANADIAN SYLLABICS WE", "CANADIAN SYLLABICS WEST-CREE WE", "CANADIAN SYLLABICS WI", "CANADIAN SYLLABICS WEST-CREE WI", "CANADIAN SYLLABICS WII", "CANADIAN SYLLABICS WEST-CREE WII", "CANADIAN SYLLABICS WO", "CANADIAN SYLLABICS WEST-CREE WO", "CANADIAN SYLLABICS WOO", "CANADIAN SYLLABICS WEST-CREE WOO", "CANADIAN SYLLABICS NASKAPI WOO", "CANADIAN SYLLABICS WA", "CANADIAN SYLLABICS WEST-CREE WA", "CANADIAN SYLLABICS WAA", "CANADIAN SYLLABICS WEST-CREE WAA", "CANADIAN SYLLABICS NASKAPI WAA", "CANADIAN SYLLABICS AI", "CANADIAN SYLLABICS Y-CREE W", "CANADIAN SYLLABICS GLOTTAL STOP", "CANADIAN SYLLABICS FINAL ACUTE", "CANADIAN SYLLABICS FINAL GRAVE", "CANADIAN SYLLABICS FINAL BOTTOM HALF RING", "CANADIAN SYLLABICS FINAL TOP HALF RING", "CANADIAN SYLLABICS FINAL RIGHT HALF RING", "CANADIAN SYLLABICS FINAL RING", "CANADIAN SYLLABICS FINAL DOUBLE ACUTE", "CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES", "CANADIAN SYLLABICS FINAL MIDDLE DOT", "CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE", "CANADIAN SYLLABICS FINAL PLUS", "CANADIAN SYLLABICS FINAL DOWN TACK", "CANADIAN SYLLABICS EN", "CANADIAN SYLLABICS IN", "CANADIAN SYLLABICS ON", "CANADIAN SYLLABICS AN", "CANADIAN SYLLABICS PE", "CANADIAN SYLLABICS PAAI", "CANADIAN SYLLABICS PI", "CANADIAN SYLLABICS PII", "CANADIAN SYLLABICS PO", "CANADIAN SYLLABICS POO", "CANADIAN SYLLABICS Y-CREE POO", "CANADIAN SYLLABICS CARRIER HEE", "CANADIAN SYLLABICS CARRIER HI", "CANADIAN SYLLABICS PA", "CANADIAN SYLLABICS PAA", "CANADIAN SYLLABICS PWE", "CANADIAN SYLLABICS WEST-CREE PWE", "CANADIAN SYLLABICS PWI", "CANADIAN SYLLABICS WEST-CREE PWI", "CANADIAN SYLLABICS PWII", "CANADIAN SYLLABICS WEST-CREE PWII", "CANADIAN SYLLABICS PWO", "CANADIAN SYLLABICS WEST-CREE PWO", "CANADIAN SYLLABICS PWOO", "CANADIAN SYLLABICS WEST-CREE PWOO", "CANADIAN SYLLABICS PWA", "CANADIAN SYLLABICS WEST-CREE PWA", "CANADIAN SYLLABICS PWAA", "CANADIAN SYLLABICS WEST-CREE PWAA", "CANADIAN SYLLABICS Y-CREE PWAA", "CANADIAN SYLLABICS P", "CANADIAN SYLLABICS WEST-CREE P", "CANADIAN SYLLABICS CARRIER H", "CANADIAN SYLLABICS TE", "CANADIAN SYLLABICS TAAI", "CANADIAN SYLLABICS TI", "CANADIAN SYLLABICS TII", "CANADIAN SYLLABICS TO", "CANADIAN SYLLABICS TOO", "CANADIAN SYLLABICS Y-CREE TOO", "CANADIAN SYLLABICS CARRIER DEE", "CANADIAN SYLLABICS CARRIER DI", "CANADIAN SYLLABICS TA", "CANADIAN SYLLABICS TAA", "CANADIAN SYLLABICS TWE", "CANADIAN SYLLABICS WEST-CREE TWE", "CANADIAN SYLLABICS TWI", "CANADIAN SYLLABICS WEST-CREE TWI", "CANADIAN SYLLABICS TWII", "CANADIAN SYLLABICS WEST-CREE TWII", "CANADIAN SYLLABICS TWO", "CANADIAN SYLLABICS WEST-CREE TWO", "CANADIAN SYLLABICS TWOO", "CANADIAN SYLLABICS WEST-CREE TWOO", "CANADIAN SYLLABICS TWA", "CANADIAN SYLLABICS WEST-CREE TWA", "CANADIAN SYLLABICS TWAA", "CANADIAN SYLLABICS WEST-CREE TWAA", "CANADIAN SYLLABICS NASKAPI TWAA", "CANADIAN SYLLABICS T", "CANADIAN SYLLABICS TTE", "CANADIAN SYLLABICS TTI", "CANADIAN SYLLABICS TTO", "CANADIAN SYLLABICS TTA", "CANADIAN SYLLABICS KE", "CANADIAN SYLLABICS KAAI", "CANADIAN SYLLABICS KI", "CANADIAN SYLLABICS KII", "CANADIAN SYLLABICS KO", "CANADIAN SYLLABICS KOO", "CANADIAN SYLLABICS Y-CREE KOO", "CANADIAN SYLLABICS KA", "CANADIAN SYLLABICS KAA", "CANADIAN SYLLABICS KWE", "CANADIAN SYLLABICS WEST-CREE KWE", "CANADIAN SYLLABICS KWI", "CANADIAN SYLLABICS WEST-CREE KWI", "CANADIAN SYLLABICS KWII", "CANADIAN SYLLABICS WEST-CREE KWII", "CANADIAN SYLLABICS KWO", "CANADIAN SYLLABICS WEST-CREE KWO", "CANADIAN SYLLABICS KWOO", "CANADIAN SYLLABICS WEST-CREE KWOO", "CANADIAN SYLLABICS KWA", "CANADIAN SYLLABICS WEST-CREE KWA", "CANADIAN SYLLABICS KWAA", "CANADIAN SYLLABICS WEST-CREE KWAA", "CANADIAN SYLLABICS NASKAPI KWAA", "CANADIAN SYLLABICS K", "CANADIAN SYLLABICS KW", "CANADIAN SYLLABICS SOUTH-SLAVEY KEH", "CANADIAN SYLLABICS SOUTH-SLAVEY KIH", "CANADIAN SYLLABICS SOUTH-SLAVEY KOH", "CANADIAN SYLLABICS SOUTH-SLAVEY KAH", "CANADIAN SYLLABICS CE", "CANADIAN SYLLABICS CAAI", "CANADIAN SYLLABICS CI", "CANADIAN SYLLABICS CII", "CANADIAN SYLLABICS CO", "CANADIAN SYLLABICS COO", "CANADIAN SYLLABICS Y-CREE COO", "CANADIAN SYLLABICS CA", "CANADIAN SYLLABICS CAA", "CANADIAN SYLLABICS CWE", "CANADIAN SYLLABICS WEST-CREE CWE", "CANADIAN SYLLABICS CWI", "CANADIAN SYLLABICS WEST-CREE CWI", "CANADIAN SYLLABICS CWII", "CANADIAN SYLLABICS WEST-CREE CWII", "CANADIAN SYLLABICS CWO", "CANADIAN SYLLABICS WEST-CREE CWO", "CANADIAN SYLLABICS CWOO", "CANADIAN SYLLABICS WEST-CREE CWOO", "CANADIAN SYLLABICS CWA", "CANADIAN SYLLABICS WEST-CREE CWA", "CANADIAN SYLLABICS CWAA", "CANADIAN SYLLABICS WEST-CREE CWAA", "CANADIAN SYLLABICS NASKAPI CWAA", "CANADIAN SYLLABICS C", "CANADIAN SYLLABICS SAYISI TH", "CANADIAN SYLLABICS ME", "CANADIAN SYLLABICS MAAI", "CANADIAN SYLLABICS MI", "CANADIAN SYLLABICS MII", "CANADIAN SYLLABICS MO", "CANADIAN SYLLABICS MOO", "CANADIAN SYLLABICS Y-CREE MOO", "CANADIAN SYLLABICS MA", "CANADIAN SYLLABICS MAA", "CANADIAN SYLLABICS MWE", "CANADIAN SYLLABICS WEST-CREE MWE", "CANADIAN SYLLABICS MWI", "CANADIAN SYLLABICS WEST-CREE MWI", "CANADIAN SYLLABICS MWII", "CANADIAN SYLLABICS WEST-CREE MWII", "CANADIAN SYLLABICS MWO", "CANADIAN SYLLABICS WEST-CREE MWO", "CANADIAN SYLLABICS MWOO", "CANADIAN SYLLABICS WEST-CREE MWOO", "CANADIAN SYLLABICS MWA", "CANADIAN SYLLABICS WEST-CREE MWA", "CANADIAN SYLLABICS MWAA", "CANADIAN SYLLABICS WEST-CREE MWAA", "CANADIAN SYLLABICS NASKAPI MWAA", "CANADIAN SYLLABICS M", "CANADIAN SYLLABICS WEST-CREE M", "CANADIAN SYLLABICS MH", "CANADIAN SYLLABICS ATHAPASCAN M", "CANADIAN SYLLABICS SAYISI M", "CANADIAN SYLLABICS NE", "CANADIAN SYLLABICS NAAI", "CANADIAN SYLLABICS NI", "CANADIAN SYLLABICS NII", "CANADIAN SYLLABICS NO", "CANADIAN SYLLABICS NOO", "CANADIAN SYLLABICS Y-CREE NOO", "CANADIAN SYLLABICS NA", "CANADIAN SYLLABICS NAA", "CANADIAN SYLLABICS NWE", "CANADIAN SYLLABICS WEST-CREE NWE", "CANADIAN SYLLABICS NWA", "CANADIAN SYLLABICS WEST-CREE NWA", "CANADIAN SYLLABICS NWAA", "CANADIAN SYLLABICS WEST-CREE NWAA", "CANADIAN SYLLABICS NASKAPI NWAA", "CANADIAN SYLLABICS N", "CANADIAN SYLLABICS CARRIER NG", "CANADIAN SYLLABICS NH", "CANADIAN SYLLABICS LE", "CANADIAN SYLLABICS LAAI", "CANADIAN SYLLABICS LI", "CANADIAN SYLLABICS LII", "CANADIAN SYLLABICS LO", "CANADIAN SYLLABICS LOO", "CANADIAN SYLLABICS Y-CREE LOO", "CANADIAN SYLLABICS LA", "CANADIAN SYLLABICS LAA", "CANADIAN SYLLABICS LWE", "CANADIAN SYLLABICS WEST-CREE LWE", "CANADIAN SYLLABICS LWI", "CANADIAN SYLLABICS WEST-CREE LWI", "CANADIAN SYLLABICS LWII", "CANADIAN SYLLABICS WEST-CREE LWII", "CANADIAN SYLLABICS LWO", "CANADIAN SYLLABICS WEST-CREE LWO", "CANADIAN SYLLABICS LWOO", "CANADIAN SYLLABICS WEST-CREE LWOO", "CANADIAN SYLLABICS LWA", "CANADIAN SYLLABICS WEST-CREE LWA", "CANADIAN SYLLABICS LWAA", "CANADIAN SYLLABICS WEST-CREE LWAA", "CANADIAN SYLLABICS L", "CANADIAN SYLLABICS WEST-CREE L", "CANADIAN SYLLABICS MEDIAL L", "CANADIAN SYLLABICS SE", "CANADIAN SYLLABICS SAAI", "CANADIAN SYLLABICS SI", "CANADIAN SYLLABICS SII", "CANADIAN SYLLABICS SO", "CANADIAN SYLLABICS SOO", "CANADIAN SYLLABICS Y-CREE SOO", "CANADIAN SYLLABICS SA", "CANADIAN SYLLABICS SAA", "CANADIAN SYLLABICS SWE", "CANADIAN SYLLABICS WEST-CREE SWE", "CANADIAN SYLLABICS SWI", "CANADIAN SYLLABICS WEST-CREE SWI", "CANADIAN SYLLABICS SWII", "CANADIAN SYLLABICS WEST-CREE SWII", "CANADIAN SYLLABICS SWO", "CANADIAN SYLLABICS WEST-CREE SWO", "CANADIAN SYLLABICS SWOO", "CANADIAN SYLLABICS WEST-CREE SWOO", "CANADIAN SYLLABICS SWA", "CANADIAN SYLLABICS WEST-CREE SWA", "CANADIAN SYLLABICS SWAA", "CANADIAN SYLLABICS WEST-CREE SWAA", "CANADIAN SYLLABICS NASKAPI SWAA", "CANADIAN SYLLABICS S", "CANADIAN SYLLABICS ATHAPASCAN S", "CANADIAN SYLLABICS SW", "CANADIAN SYLLABICS BLACKFOOT S", "CANADIAN SYLLABICS MOOSE-CREE SK", "CANADIAN SYLLABICS NASKAPI SKW", "CANADIAN SYLLABICS NASKAPI S-W", "CANADIAN SYLLABICS NASKAPI SPWA", "CANADIAN SYLLABICS NASKAPI STWA", "CANADIAN SYLLABICS NASKAPI SKWA", "CANADIAN SYLLABICS NASKAPI SCWA", "CANADIAN SYLLABICS SHE", "CANADIAN SYLLABICS SHI", "CANADIAN SYLLABICS SHII", "CANADIAN SYLLABICS SHO", "CANADIAN SYLLABICS SHOO", "CANADIAN SYLLABICS SHA", "CANADIAN SYLLABICS SHAA", "CANADIAN SYLLABICS SHWE", "CANADIAN SYLLABICS WEST-CREE SHWE", "CANADIAN SYLLABICS SHWI", "CANADIAN SYLLABICS WEST-CREE SHWI", "CANADIAN SYLLABICS SHWII", "CANADIAN SYLLABICS WEST-CREE SHWII", "CANADIAN SYLLABICS SHWO", "CANADIAN SYLLABICS WEST-CREE SHWO", "CANADIAN SYLLABICS SHWOO", "CANADIAN SYLLABICS WEST-CREE SHWOO", "CANADIAN SYLLABICS SHWA", "CANADIAN SYLLABICS WEST-CREE SHWA", "CANADIAN SYLLABICS SHWAA", "CANADIAN SYLLABICS WEST-CREE SHWAA", "CANADIAN SYLLABICS SH", "CANADIAN SYLLABICS YE", "CANADIAN SYLLABICS YAAI", "CANADIAN SYLLABICS YI", "CANADIAN SYLLABICS YII", "CANADIAN SYLLABICS YO", "CANADIAN SYLLABICS YOO", "CANADIAN SYLLABICS Y-CREE YOO", "CANADIAN SYLLABICS YA", "CANADIAN SYLLABICS YAA", "CANADIAN SYLLABICS YWE", "CANADIAN SYLLABICS WEST-CREE YWE", "CANADIAN SYLLABICS YWI", "CANADIAN SYLLABICS WEST-CREE YWI", "CANADIAN SYLLABICS YWII", "CANADIAN SYLLABICS WEST-CREE YWII", "CANADIAN SYLLABICS YWO", "CANADIAN SYLLABICS WEST-CREE YWO", "CANADIAN SYLLABICS YWOO", "CANADIAN SYLLABICS WEST-CREE YWOO", "CANADIAN SYLLABICS YWA", "CANADIAN SYLLABICS WEST-CREE YWA", "CANADIAN SYLLABICS YWAA", "CANADIAN SYLLABICS WEST-CREE YWAA", "CANADIAN SYLLABICS NASKAPI YWAA", "CANADIAN SYLLABICS Y", "CANADIAN SYLLABICS BIBLE-CREE Y", "CANADIAN SYLLABICS WEST-CREE Y", "CANADIAN SYLLABICS SAYISI YI", "CANADIAN SYLLABICS RE", "CANADIAN SYLLABICS R-CREE RE", "CANADIAN SYLLABICS WEST-CREE LE", "CANADIAN SYLLABICS RAAI", "CANADIAN SYLLABICS RI", "CANADIAN SYLLABICS RII", "CANADIAN SYLLABICS RO", "CANADIAN SYLLABICS ROO", "CANADIAN SYLLABICS WEST-CREE LO", "CANADIAN SYLLABICS RA", "CANADIAN SYLLABICS RAA", "CANADIAN SYLLABICS WEST-CREE LA", "CANADIAN SYLLABICS RWAA", "CANADIAN SYLLABICS WEST-CREE RWAA", "CANADIAN SYLLABICS R", "CANADIAN SYLLABICS WEST-CREE R", "CANADIAN SYLLABICS MEDIAL R", "CANADIAN SYLLABICS FE", "CANADIAN SYLLABICS FAAI", "CANADIAN SYLLABICS FI", "CANADIAN SYLLABICS FII", "CANADIAN SYLLABICS FO", "CANADIAN SYLLABICS FOO", "CANADIAN SYLLABICS FA", "CANADIAN SYLLABICS FAA", "CANADIAN SYLLABICS FWAA", "CANADIAN SYLLABICS WEST-CREE FWAA", "CANADIAN SYLLABICS F", "CANADIAN SYLLABICS THE", "CANADIAN SYLLABICS N-CREE THE", "CANADIAN SYLLABICS THI", "CANADIAN SYLLABICS N-CREE THI", "CANADIAN SYLLABICS THII", "CANADIAN SYLLABICS N-CREE THII", "CANADIAN SYLLABICS THO", "CANADIAN SYLLABICS THOO", "CANADIAN SYLLABICS THA", "CANADIAN SYLLABICS THAA", "CANADIAN SYLLABICS THWAA", "CANADIAN SYLLABICS WEST-CREE THWAA", "CANADIAN SYLLABICS TH", "CANADIAN SYLLABICS TTHE", "CANADIAN SYLLABICS TTHI", "CANADIAN SYLLABICS TTHO", "CANADIAN SYLLABICS TTHA", "CANADIAN SYLLABICS TTH", "CANADIAN SYLLABICS TYE", "CANADIAN SYLLABICS TYI", "CANADIAN SYLLABICS TYO", "CANADIAN SYLLABICS TYA", "CANADIAN SYLLABICS NUNAVIK HE", "CANADIAN SYLLABICS NUNAVIK HI", "CANADIAN SYLLABICS NUNAVIK HII", "CANADIAN SYLLABICS NUNAVIK HO", "CANADIAN SYLLABICS NUNAVIK HOO", "CANADIAN SYLLABICS NUNAVIK HA", "CANADIAN SYLLABICS NUNAVIK HAA", "CANADIAN SYLLABICS NUNAVIK H", "CANADIAN SYLLABICS NUNAVUT H", "CANADIAN SYLLABICS HK", "CANADIAN SYLLABICS QAAI", "CANADIAN SYLLABICS QI", "CANADIAN SYLLABICS QII", "CANADIAN SYLLABICS QO", "CANADIAN SYLLABICS QOO", "CANADIAN SYLLABICS QA", "CANADIAN SYLLABICS QAA", "CANADIAN SYLLABICS Q", "CANADIAN SYLLABICS TLHE", "CANADIAN SYLLABICS TLHI", "CANADIAN SYLLABICS TLHO", "CANADIAN SYLLABICS TLHA", "CANADIAN SYLLABICS WEST-CREE RE", "CANADIAN SYLLABICS WEST-CREE RI", "CANADIAN SYLLABICS WEST-CREE RO", "CANADIAN SYLLABICS WEST-CREE RA", "CANADIAN SYLLABICS NGAAI", "CANADIAN SYLLABICS NGI", "CANADIAN SYLLABICS NGII", "CANADIAN SYLLABICS NGO", "CANADIAN SYLLABICS NGOO", "CANADIAN SYLLABICS NGA", "CANADIAN SYLLABICS NGAA", "CANADIAN SYLLABICS NG", "CANADIAN SYLLABICS NNG", "CANADIAN SYLLABICS SAYISI SHE", "CANADIAN SYLLABICS SAYISI SHI", "CANADIAN SYLLABICS SAYISI SHO", "CANADIAN SYLLABICS SAYISI SHA", "CANADIAN SYLLABICS WOODS-CREE THE", "CANADIAN SYLLABICS WOODS-CREE THI", "CANADIAN SYLLABICS WOODS-CREE THO", "CANADIAN SYLLABICS WOODS-CREE THA", "CANADIAN SYLLABICS WOODS-CREE TH", "CANADIAN SYLLABICS LHI", "CANADIAN SYLLABICS LHII", "CANADIAN SYLLABICS LHO", "CANADIAN SYLLABICS LHOO", "CANADIAN SYLLABICS LHA", "CANADIAN SYLLABICS LHAA", "CANADIAN SYLLABICS LH", "CANADIAN SYLLABICS TH-CREE THE", "CANADIAN SYLLABICS TH-CREE THI", "CANADIAN SYLLABICS TH-CREE THII", "CANADIAN SYLLABICS TH-CREE THO", "CANADIAN SYLLABICS TH-CREE THOO", "CANADIAN SYLLABICS TH-CREE THA", "CANADIAN SYLLABICS TH-CREE THAA", "CANADIAN SYLLABICS TH-CREE TH", "CANADIAN SYLLABICS AIVILIK B", "CANADIAN SYLLABICS BLACKFOOT E", "CANADIAN SYLLABICS BLACKFOOT I", "CANADIAN SYLLABICS BLACKFOOT O", "CANADIAN SYLLABICS BLACKFOOT A", "CANADIAN SYLLABICS BLACKFOOT WE", "CANADIAN SYLLABICS BLACKFOOT WI", "CANADIAN SYLLABICS BLACKFOOT WO", "CANADIAN SYLLABICS BLACKFOOT WA", "CANADIAN SYLLABICS BLACKFOOT NE", "CANADIAN SYLLABICS BLACKFOOT NI", "CANADIAN SYLLABICS BLACKFOOT NO", "CANADIAN SYLLABICS BLACKFOOT NA", "CANADIAN SYLLABICS BLACKFOOT KE", "CANADIAN SYLLABICS BLACKFOOT KI", "CANADIAN SYLLABICS BLACKFOOT KO", "CANADIAN SYLLABICS BLACKFOOT KA", "CANADIAN SYLLABICS SAYISI HE", "CANADIAN SYLLABICS SAYISI HI", "CANADIAN SYLLABICS SAYISI HO", "CANADIAN SYLLABICS SAYISI HA", "CANADIAN SYLLABICS CARRIER GHU", "CANADIAN SYLLABICS CARRIER GHO", "CANADIAN SYLLABICS CARRIER GHE", "CANADIAN SYLLABICS CARRIER GHEE", "CANADIAN SYLLABICS CARRIER GHI", "CANADIAN SYLLABICS CARRIER GHA", "CANADIAN SYLLABICS CARRIER RU", "CANADIAN SYLLABICS CARRIER RO", "CANADIAN SYLLABICS CARRIER RE", "CANADIAN SYLLABICS CARRIER REE", "CANADIAN SYLLABICS CARRIER RI", "CANADIAN SYLLABICS CARRIER RA", "CANADIAN SYLLABICS CARRIER WU", "CANADIAN SYLLABICS CARRIER WO", "CANADIAN SYLLABICS CARRIER WE", "CANADIAN SYLLABICS CARRIER WEE", "CANADIAN SYLLABICS CARRIER WI", "CANADIAN SYLLABICS CARRIER WA", "CANADIAN SYLLABICS CARRIER HWU", "CANADIAN SYLLABICS CARRIER HWO", "CANADIAN SYLLABICS CARRIER HWE", "CANADIAN SYLLABICS CARRIER HWEE", "CANADIAN SYLLABICS CARRIER HWI", "CANADIAN SYLLABICS CARRIER HWA", "CANADIAN SYLLABICS CARRIER THU", "CANADIAN SYLLABICS CARRIER THO", "CANADIAN SYLLABICS CARRIER THE", "CANADIAN SYLLABICS CARRIER THEE", "CANADIAN SYLLABICS CARRIER THI", "CANADIAN SYLLABICS CARRIER THA", "CANADIAN SYLLABICS CARRIER TTU", "CANADIAN SYLLABICS CARRIER TTO", "CANADIAN SYLLABICS CARRIER TTE", "CANADIAN SYLLABICS CARRIER TTEE", "CANADIAN SYLLABICS CARRIER TTI", "CANADIAN SYLLABICS CARRIER TTA", "CANADIAN SYLLABICS CARRIER PU", "CANADIAN SYLLABICS CARRIER PO", "CANADIAN SYLLABICS CARRIER PE", "CANADIAN SYLLABICS CARRIER PEE", "CANADIAN SYLLABICS CARRIER PI", "CANADIAN SYLLABICS CARRIER PA", "CANADIAN SYLLABICS CARRIER P", "CANADIAN SYLLABICS CARRIER GU", "CANADIAN SYLLABICS CARRIER GO", "CANADIAN SYLLABICS CARRIER GE", "CANADIAN SYLLABICS CARRIER GEE", "CANADIAN SYLLABICS CARRIER GI", "CANADIAN SYLLABICS CARRIER GA", "CANADIAN SYLLABICS CARRIER KHU", "CANADIAN SYLLABICS CARRIER KHO", "CANADIAN SYLLABICS CARRIER KHE", "CANADIAN SYLLABICS CARRIER KHEE", "CANADIAN SYLLABICS CARRIER KHI", "CANADIAN SYLLABICS CARRIER KHA", "CANADIAN SYLLABICS CARRIER KKU", "CANADIAN SYLLABICS CARRIER KKO", "CANADIAN SYLLABICS CARRIER KKE", "CANADIAN SYLLABICS CARRIER KKEE", "CANADIAN SYLLABICS CARRIER KKI", "CANADIAN SYLLABICS CARRIER KKA", "CANADIAN SYLLABICS CARRIER KK", "CANADIAN SYLLABICS CARRIER NU", "CANADIAN SYLLABICS CARRIER NO", "CANADIAN SYLLABICS CARRIER NE", "CANADIAN SYLLABICS CARRIER NEE", "CANADIAN SYLLABICS CARRIER NI", "CANADIAN SYLLABICS CARRIER NA", "CANADIAN SYLLABICS CARRIER MU", "CANADIAN SYLLABICS CARRIER MO", "CANADIAN SYLLABICS CARRIER ME", "CANADIAN SYLLABICS CARRIER MEE", "CANADIAN SYLLABICS CARRIER MI", "CANADIAN SYLLABICS CARRIER MA", "CANADIAN SYLLABICS CARRIER YU", "CANADIAN SYLLABICS CARRIER YO", "CANADIAN SYLLABICS CARRIER YE", "CANADIAN SYLLABICS CARRIER YEE", "CANADIAN SYLLABICS CARRIER YI", "CANADIAN SYLLABICS CARRIER YA", "CANADIAN SYLLABICS CARRIER JU", "CANADIAN SYLLABICS SAYISI JU", "CANADIAN SYLLABICS CARRIER JO", "CANADIAN SYLLABICS CARRIER JE", "CANADIAN SYLLABICS CARRIER JEE", "CANADIAN SYLLABICS CARRIER JI", "CANADIAN SYLLABICS SAYISI JI", "CANADIAN SYLLABICS CARRIER JA", "CANADIAN SYLLABICS CARRIER JJU", "CANADIAN SYLLABICS CARRIER JJO", "CANADIAN SYLLABICS CARRIER JJE", "CANADIAN SYLLABICS CARRIER JJEE", "CANADIAN SYLLABICS CARRIER JJI", "CANADIAN SYLLABICS CARRIER JJA", "CANADIAN SYLLABICS CARRIER LU", "CANADIAN SYLLABICS CARRIER LO", "CANADIAN SYLLABICS CARRIER LE", "CANADIAN SYLLABICS CARRIER LEE", "CANADIAN SYLLABICS CARRIER LI", "CANADIAN SYLLABICS CARRIER LA", "CANADIAN SYLLABICS CARRIER DLU", "CANADIAN SYLLABICS CARRIER DLO", "CANADIAN SYLLABICS CARRIER DLE", "CANADIAN SYLLABICS CARRIER DLEE", "CANADIAN SYLLABICS CARRIER DLI", "CANADIAN SYLLABICS CARRIER DLA", "CANADIAN SYLLABICS CARRIER LHU", "CANADIAN SYLLABICS CARRIER LHO", "CANADIAN SYLLABICS CARRIER LHE", "CANADIAN SYLLABICS CARRIER LHEE", "CANADIAN SYLLABICS CARRIER LHI", "CANADIAN SYLLABICS CARRIER LHA", "CANADIAN SYLLABICS CARRIER TLHU", "CANADIAN SYLLABICS CARRIER TLHO", "CANADIAN SYLLABICS CARRIER TLHE", "CANADIAN SYLLABICS CARRIER TLHEE", "CANADIAN SYLLABICS CARRIER TLHI", "CANADIAN SYLLABICS CARRIER TLHA", "CANADIAN SYLLABICS CARRIER TLU", "CANADIAN SYLLABICS CARRIER TLO", "CANADIAN SYLLABICS CARRIER TLE", "CANADIAN SYLLABICS CARRIER TLEE", "CANADIAN SYLLABICS CARRIER TLI", "CANADIAN SYLLABICS CARRIER TLA", "CANADIAN SYLLABICS CARRIER ZU", "CANADIAN SYLLABICS CARRIER ZO", "CANADIAN SYLLABICS CARRIER ZE", "CANADIAN SYLLABICS CARRIER ZEE", "CANADIAN SYLLABICS CARRIER ZI", "CANADIAN SYLLABICS CARRIER ZA", "CANADIAN SYLLABICS CARRIER Z", "CANADIAN SYLLABICS CARRIER INITIAL Z", "CANADIAN SYLLABICS CARRIER DZU", "CANADIAN SYLLABICS CARRIER DZO", "CANADIAN SYLLABICS CARRIER DZE", "CANADIAN SYLLABICS CARRIER DZEE", "CANADIAN SYLLABICS CARRIER DZI", "CANADIAN SYLLABICS CARRIER DZA", "CANADIAN SYLLABICS CARRIER SU", "CANADIAN SYLLABICS CARRIER SO", "CANADIAN SYLLABICS CARRIER SE", "CANADIAN SYLLABICS CARRIER SEE", "CANADIAN SYLLABICS CARRIER SI", "CANADIAN SYLLABICS CARRIER SA", "CANADIAN SYLLABICS CARRIER SHU", "CANADIAN SYLLABICS CARRIER SHO", "CANADIAN SYLLABICS CARRIER SHE", "CANADIAN SYLLABICS CARRIER SHEE", "CANADIAN SYLLABICS CARRIER SHI", "CANADIAN SYLLABICS CARRIER SHA", "CANADIAN SYLLABICS CARRIER SH", "CANADIAN SYLLABICS CARRIER TSU", "CANADIAN SYLLABICS CARRIER TSO", "CANADIAN SYLLABICS CARRIER TSE", "CANADIAN SYLLABICS CARRIER TSEE", "CANADIAN SYLLABICS CARRIER TSI", "CANADIAN SYLLABICS CARRIER TSA", "CANADIAN SYLLABICS CARRIER CHU", "CANADIAN SYLLABICS CARRIER CHO", "CANADIAN SYLLABICS CARRIER CHE", "CANADIAN SYLLABICS CARRIER CHEE", "CANADIAN SYLLABICS CARRIER CHI", "CANADIAN SYLLABICS CARRIER CHA", "CANADIAN SYLLABICS CARRIER TTSU", "CANADIAN SYLLABICS CARRIER TTSO", "CANADIAN SYLLABICS CARRIER TTSE", "CANADIAN SYLLABICS CARRIER TTSEE", "CANADIAN SYLLABICS CARRIER TTSI", "CANADIAN SYLLABICS CARRIER TTSA", "CANADIAN SYLLABICS CHI SIGN", "CANADIAN SYLLABICS FULL STOP", "CANADIAN SYLLABICS QAI", "CANADIAN SYLLABICS NGAI", "CANADIAN SYLLABICS NNGI", "CANADIAN SYLLABICS NNGII", "CANADIAN SYLLABICS NNGO", "CANADIAN SYLLABICS NNGOO", "CANADIAN SYLLABICS NNGA", "CANADIAN SYLLABICS NNGAA", "CANADIAN SYLLABICS WOODS-CREE THWEE", "CANADIAN SYLLABICS WOODS-CREE THWI", "CANADIAN SYLLABICS WOODS-CREE THWII", "CANADIAN SYLLABICS WOODS-CREE THWO", "CANADIAN SYLLABICS WOODS-CREE THWOO", "CANADIAN SYLLABICS WOODS-CREE THWA", "CANADIAN SYLLABICS WOODS-CREE THWAA", "CANADIAN SYLLABICS WOODS-CREE FINAL TH", "CANADIAN SYLLABICS BLACKFOOT W", "OGHAM SPACE MARK", "OGHAM LETTER BEITH", "OGHAM LETTER LUIS", "OGHAM LETTER FEARN", "OGHAM LETTER SAIL", "OGHAM LETTER NION", "OGHAM LETTER UATH", "OGHAM LETTER DAIR", "OGHAM LETTER TINNE", "OGHAM LETTER COLL", "OGHAM LETTER CEIRT", "OGHAM LETTER MUIN", "OGHAM LETTER GORT", "OGHAM LETTER NGEADAL", "OGHAM LETTER STRAIF", "OGHAM LETTER RUIS", "OGHAM LETTER AILM", "OGHAM LETTER ONN", "OGHAM LETTER UR", "OGHAM LETTER EADHADH", "OGHAM LETTER IODHADH", "OGHAM LETTER EABHADH", "OGHAM LETTER OR", "OGHAM LETTER UILLEANN", "OGHAM LETTER IFIN", "OGHAM LETTER EAMHANCHOLL", "OGHAM LETTER PEITH", "OGHAM FEATHER MARK", "OGHAM REVERSED FEATHER MARK", "RUNIC LETTER FEHU FEOH FE F", "RUNIC LETTER V", "RUNIC LETTER URUZ UR U", "RUNIC LETTER YR", "RUNIC LETTER Y", "RUNIC LETTER W", "RUNIC LETTER THURISAZ THURS THORN", "RUNIC LETTER ETH", "RUNIC LETTER ANSUZ A", "RUNIC LETTER OS O", "RUNIC LETTER AC A", "RUNIC LETTER AESC", "RUNIC LETTER LONG-BRANCH-OSS O", "RUNIC LETTER SHORT-TWIG-OSS O", "RUNIC LETTER O", "RUNIC LETTER OE", "RUNIC LETTER ON", "RUNIC LETTER RAIDO RAD REID R", "RUNIC LETTER KAUNA", "RUNIC LETTER CEN", "RUNIC LETTER KAUN K", "RUNIC LETTER G", "RUNIC LETTER ENG", "RUNIC LETTER GEBO GYFU G", "RUNIC LETTER GAR", "RUNIC LETTER WUNJO WYNN W", "RUNIC LETTER HAGLAZ H", "RUNIC LETTER HAEGL H", "RUNIC LETTER LONG-BRANCH-HAGALL H", "RUNIC LETTER SHORT-TWIG-HAGALL H", "RUNIC LETTER NAUDIZ NYD NAUD N", "RUNIC LETTER SHORT-TWIG-NAUD N", "RUNIC LETTER DOTTED-N", "RUNIC LETTER ISAZ IS ISS I", "RUNIC LETTER E", "RUNIC LETTER JERAN J", "RUNIC LETTER GER", "RUNIC LETTER LONG-BRANCH-AR AE", "RUNIC LETTER SHORT-TWIG-AR A", "RUNIC LETTER IWAZ EOH", "RUNIC LETTER PERTHO PEORTH P", "RUNIC LETTER ALGIZ EOLHX", "RUNIC LETTER SOWILO S", "RUNIC LETTER SIGEL LONG-BRANCH-SOL S", "RUNIC LETTER SHORT-TWIG-SOL S", "RUNIC LETTER C", "RUNIC LETTER Z", "RUNIC LETTER TIWAZ TIR TYR T", "RUNIC LETTER SHORT-TWIG-TYR T", "RUNIC LETTER D", "RUNIC LETTER BERKANAN BEORC BJARKAN B", "RUNIC LETTER SHORT-TWIG-BJARKAN B", "RUNIC LETTER DOTTED-P", "RUNIC LETTER OPEN-P", "RUNIC LETTER EHWAZ EH E", "RUNIC LETTER MANNAZ MAN M", "RUNIC LETTER LONG-BRANCH-MADR M", "RUNIC LETTER SHORT-TWIG-MADR M", "RUNIC LETTER LAUKAZ LAGU LOGR L", "RUNIC LETTER DOTTED-L", "RUNIC LETTER INGWAZ", "RUNIC LETTER ING", "RUNIC LETTER DAGAZ DAEG D", "RUNIC LETTER OTHALAN ETHEL O", "RUNIC LETTER EAR", "RUNIC LETTER IOR", "RUNIC LETTER CWEORTH", "RUNIC LETTER CALC", "RUNIC LETTER CEALC", "RUNIC LETTER STAN", "RUNIC LETTER LONG-BRANCH-YR", "RUNIC LETTER SHORT-TWIG-YR", "RUNIC LETTER ICELANDIC-YR", "RUNIC LETTER Q", "RUNIC LETTER X", "RUNIC SINGLE PUNCTUATION", "RUNIC MULTIPLE PUNCTUATION", "RUNIC CROSS PUNCTUATION", "RUNIC ARLAUG SYMBOL", "RUNIC TVIMADUR SYMBOL", "RUNIC BELGTHOR SYMBOL", "RUNIC LETTER K", "RUNIC LETTER SH", "RUNIC LETTER OO", "RUNIC LETTER FRANKS CASKET OS", "RUNIC LETTER FRANKS CASKET IS", "RUNIC LETTER FRANKS CASKET EH", "RUNIC LETTER FRANKS CASKET AC", "RUNIC LETTER FRANKS CASKET AESC", "TAGALOG LETTER A", "TAGALOG LETTER I", "TAGALOG LETTER U", "TAGALOG LETTER KA", "TAGALOG LETTER GA", "TAGALOG LETTER NGA", "TAGALOG LETTER TA", "TAGALOG LETTER DA", "TAGALOG LETTER NA", "TAGALOG LETTER PA", "TAGALOG LETTER BA", "TAGALOG LETTER MA", "TAGALOG LETTER YA", "TAGALOG LETTER LA", "TAGALOG LETTER WA", "TAGALOG LETTER SA", "TAGALOG LETTER HA", "TAGALOG VOWEL SIGN I", "TAGALOG VOWEL SIGN U", "TAGALOG SIGN VIRAMA", "HANUNOO LETTER A", "HANUNOO LETTER I", "HANUNOO LETTER U", "HANUNOO LETTER KA", "HANUNOO LETTER GA", "HANUNOO LETTER NGA", "HANUNOO LETTER TA", "HANUNOO LETTER DA", "HANUNOO LETTER NA", "HANUNOO LETTER PA", "HANUNOO LETTER BA", "HANUNOO LETTER MA", "HANUNOO LETTER YA", "HANUNOO LETTER RA", "HANUNOO LETTER LA", "HANUNOO LETTER WA", "HANUNOO LETTER SA", "HANUNOO LETTER HA", "HANUNOO VOWEL SIGN I", "HANUNOO VOWEL SIGN U", "HANUNOO SIGN PAMUDPOD", "PHILIPPINE SINGLE PUNCTUATION", "PHILIPPINE DOUBLE PUNCTUATION", "BUHID LETTER A", "BUHID LETTER I", "BUHID LETTER U", "BUHID LETTER KA", "BUHID LETTER GA", "BUHID LETTER NGA", "BUHID LETTER TA", "BUHID LETTER DA", "BUHID LETTER NA", "BUHID LETTER PA", "BUHID LETTER BA", "BUHID LETTER MA", "BUHID LETTER YA", "BUHID LETTER RA", "BUHID LETTER LA", "BUHID LETTER WA", "BUHID LETTER SA", "BUHID LETTER HA", "BUHID VOWEL SIGN I", "BUHID VOWEL SIGN U", "TAGBANWA LETTER A", "TAGBANWA LETTER I", "TAGBANWA LETTER U", "TAGBANWA LETTER KA", "TAGBANWA LETTER GA", "TAGBANWA LETTER NGA", "TAGBANWA LETTER TA", "TAGBANWA LETTER DA", "TAGBANWA LETTER NA", "TAGBANWA LETTER PA", "TAGBANWA LETTER BA", "TAGBANWA LETTER MA", "TAGBANWA LETTER YA", "TAGBANWA LETTER LA", "TAGBANWA LETTER WA", "TAGBANWA LETTER SA", "TAGBANWA VOWEL SIGN I", "TAGBANWA VOWEL SIGN U", "KHMER LETTER KA", "KHMER LETTER KHA", "KHMER LETTER KO", "KHMER LETTER KHO", "KHMER LETTER NGO", "KHMER LETTER CA", "KHMER LETTER CHA", "KHMER LETTER CO", "KHMER LETTER CHO", "KHMER LETTER NYO", "KHMER LETTER DA", "KHMER LETTER TTHA", "KHMER LETTER DO", "KHMER LETTER TTHO", "KHMER LETTER NNO", "KHMER LETTER TA", "KHMER LETTER THA", "KHMER LETTER TO", "KHMER LETTER THO", "KHMER LETTER NO", "KHMER LETTER BA", "KHMER LETTER PHA", "KHMER LETTER PO", "KHMER LETTER PHO", "KHMER LETTER MO", "KHMER LETTER YO", "KHMER LETTER RO", "KHMER LETTER LO", "KHMER LETTER VO", "KHMER LETTER SHA", "KHMER LETTER SSO", "KHMER LETTER SA", "KHMER LETTER HA", "KHMER LETTER LA", "KHMER LETTER QA", "KHMER INDEPENDENT VOWEL QAQ", "KHMER INDEPENDENT VOWEL QAA", "KHMER INDEPENDENT VOWEL QI", "KHMER INDEPENDENT VOWEL QII", "KHMER INDEPENDENT VOWEL QU", "KHMER INDEPENDENT VOWEL QUK", "KHMER INDEPENDENT VOWEL QUU", "KHMER INDEPENDENT VOWEL QUUV", "KHMER INDEPENDENT VOWEL RY", "KHMER INDEPENDENT VOWEL RYY", "KHMER INDEPENDENT VOWEL LY", "KHMER INDEPENDENT VOWEL LYY", "KHMER INDEPENDENT VOWEL QE", "KHMER INDEPENDENT VOWEL QAI", "KHMER INDEPENDENT VOWEL QOO TYPE ONE", "KHMER INDEPENDENT VOWEL QOO TYPE TWO", "KHMER INDEPENDENT VOWEL QAU", "KHMER VOWEL INHERENT AQ", "KHMER VOWEL INHERENT AA", "KHMER VOWEL SIGN AA", "KHMER VOWEL SIGN I", "KHMER VOWEL SIGN II", "KHMER VOWEL SIGN Y", "KHMER VOWEL SIGN YY", "KHMER VOWEL SIGN U", "KHMER VOWEL SIGN UU", "KHMER VOWEL SIGN UA", "KHMER VOWEL SIGN OE", "KHMER VOWEL SIGN YA", "KHMER VOWEL SIGN IE", "KHMER VOWEL SIGN E", "KHMER VOWEL SIGN AE", "KHMER VOWEL SIGN AI", "KHMER VOWEL SIGN OO", "KHMER VOWEL SIGN AU", "KHMER SIGN NIKAHIT", "KHMER SIGN REAHMUK", "KHMER SIGN YUUKALEAPINTU", "KHMER SIGN MUUSIKATOAN", "KHMER SIGN TRIISAP", "KHMER SIGN BANTOC", "KHMER SIGN ROBAT", "KHMER SIGN TOANDAKHIAT", "KHMER SIGN KAKABAT", "KHMER SIGN AHSDA", "KHMER SIGN SAMYOK SANNYA", "KHMER SIGN VIRIAM", "KHMER SIGN COENG", "KHMER SIGN BATHAMASAT", "KHMER SIGN KHAN", "KHMER SIGN BARIYOOSAN", "KHMER SIGN CAMNUC PII KUUH", "KHMER SIGN LEK TOO", "KHMER SIGN BEYYAL", "KHMER SIGN PHNAEK MUAN", "KHMER SIGN KOOMUUT", "KHMER CURRENCY SYMBOL RIEL", "KHMER SIGN AVAKRAHASANYA", "KHMER SIGN ATTHACAN", "KHMER DIGIT ZERO", "KHMER DIGIT ONE", "KHMER DIGIT TWO", "KHMER DIGIT THREE", "KHMER DIGIT FOUR", "KHMER DIGIT FIVE", "KHMER DIGIT SIX", "KHMER DIGIT SEVEN", "KHMER DIGIT EIGHT", "KHMER DIGIT NINE", "KHMER SYMBOL LEK ATTAK SON", "KHMER SYMBOL LEK ATTAK MUOY", "KHMER SYMBOL LEK ATTAK PII", "KHMER SYMBOL LEK ATTAK BEI", "KHMER SYMBOL LEK ATTAK BUON", "KHMER SYMBOL LEK ATTAK PRAM", "KHMER SYMBOL LEK ATTAK PRAM-MUOY", "KHMER SYMBOL LEK ATTAK PRAM-PII", "KHMER SYMBOL LEK ATTAK PRAM-BEI", "KHMER SYMBOL LEK ATTAK PRAM-BUON", "MONGOLIAN BIRGA", "MONGOLIAN ELLIPSIS", "MONGOLIAN COMMA", "MONGOLIAN FULL STOP", "MONGOLIAN COLON", "MONGOLIAN FOUR DOTS", "MONGOLIAN TODO SOFT HYPHEN", "MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER", "MONGOLIAN MANCHU COMMA", "MONGOLIAN MANCHU FULL STOP", "MONGOLIAN NIRUGU", "MONGOLIAN FREE VARIATION SELECTOR ONE", "MONGOLIAN FREE VARIATION SELECTOR TWO", "MONGOLIAN FREE VARIATION SELECTOR THREE", "MONGOLIAN VOWEL SEPARATOR", "MONGOLIAN DIGIT ZERO", "MONGOLIAN DIGIT ONE", "MONGOLIAN DIGIT TWO", "MONGOLIAN DIGIT THREE", "MONGOLIAN DIGIT FOUR", "MONGOLIAN DIGIT FIVE", "MONGOLIAN DIGIT SIX", "MONGOLIAN DIGIT SEVEN", "MONGOLIAN DIGIT EIGHT", "MONGOLIAN DIGIT NINE", "MONGOLIAN LETTER A", "MONGOLIAN LETTER E", "MONGOLIAN LETTER I", "MONGOLIAN LETTER O", "MONGOLIAN LETTER U", "MONGOLIAN LETTER OE", "MONGOLIAN LETTER UE", "MONGOLIAN LETTER EE", "MONGOLIAN LETTER NA", "MONGOLIAN LETTER ANG", "MONGOLIAN LETTER BA", "MONGOLIAN LETTER PA", "MONGOLIAN LETTER QA", "MONGOLIAN LETTER GA", "MONGOLIAN LETTER MA", "MONGOLIAN LETTER LA", "MONGOLIAN LETTER SA", "MONGOLIAN LETTER SHA", "MONGOLIAN LETTER TA", "MONGOLIAN LETTER DA", "MONGOLIAN LETTER CHA", "MONGOLIAN LETTER JA", "MONGOLIAN LETTER YA", "MONGOLIAN LETTER RA", "MONGOLIAN LETTER WA", "MONGOLIAN LETTER FA", "MONGOLIAN LETTER KA", "MONGOLIAN LETTER KHA", "MONGOLIAN LETTER TSA", "MONGOLIAN LETTER ZA", "MONGOLIAN LETTER HAA", "MONGOLIAN LETTER ZRA", "MONGOLIAN LETTER LHA", "MONGOLIAN LETTER ZHI", "MONGOLIAN LETTER CHI", "MONGOLIAN LETTER TODO LONG VOWEL SIGN", "MONGOLIAN LETTER TODO E", "MONGOLIAN LETTER TODO I", "MONGOLIAN LETTER TODO O", "MONGOLIAN LETTER TODO U", "MONGOLIAN LETTER TODO OE", "MONGOLIAN LETTER TODO UE", "MONGOLIAN LETTER TODO ANG", "MONGOLIAN LETTER TODO BA", "MONGOLIAN LETTER TODO PA", "MONGOLIAN LETTER TODO QA", "MONGOLIAN LETTER TODO GA", "MONGOLIAN LETTER TODO MA", "MONGOLIAN LETTER TODO TA", "MONGOLIAN LETTER TODO DA", "MONGOLIAN LETTER TODO CHA", "MONGOLIAN LETTER TODO JA", "MONGOLIAN LETTER TODO TSA", "MONGOLIAN LETTER TODO YA", "MONGOLIAN LETTER TODO WA", "MONGOLIAN LETTER TODO KA", "MONGOLIAN LETTER TODO GAA", "MONGOLIAN LETTER TODO HAA", "MONGOLIAN LETTER TODO JIA", "MONGOLIAN LETTER TODO NIA", "MONGOLIAN LETTER TODO DZA", "MONGOLIAN LETTER SIBE E", "MONGOLIAN LETTER SIBE I", "MONGOLIAN LETTER SIBE IY", "MONGOLIAN LETTER SIBE UE", "MONGOLIAN LETTER SIBE U", "MONGOLIAN LETTER SIBE ANG", "MONGOLIAN LETTER SIBE KA", "MONGOLIAN LETTER SIBE GA", "MONGOLIAN LETTER SIBE HA", "MONGOLIAN LETTER SIBE PA", "MONGOLIAN LETTER SIBE SHA", "MONGOLIAN LETTER SIBE TA", "MONGOLIAN LETTER SIBE DA", "MONGOLIAN LETTER SIBE JA", "MONGOLIAN LETTER SIBE FA", "MONGOLIAN LETTER SIBE GAA", "MONGOLIAN LETTER SIBE HAA", "MONGOLIAN LETTER SIBE TSA", "MONGOLIAN LETTER SIBE ZA", "MONGOLIAN LETTER SIBE RAA", "MONGOLIAN LETTER SIBE CHA", "MONGOLIAN LETTER SIBE ZHA", "MONGOLIAN LETTER MANCHU I", "MONGOLIAN LETTER MANCHU KA", "MONGOLIAN LETTER MANCHU RA", "MONGOLIAN LETTER MANCHU FA", "MONGOLIAN LETTER MANCHU ZHA", "MONGOLIAN LETTER CHA WITH TWO DOTS", "MONGOLIAN LETTER ALI GALI ANUSVARA ONE", "MONGOLIAN LETTER ALI GALI VISARGA ONE", "MONGOLIAN LETTER ALI GALI DAMARU", "MONGOLIAN LETTER ALI GALI UBADAMA", "MONGOLIAN LETTER ALI GALI INVERTED UBADAMA", "MONGOLIAN LETTER ALI GALI BALUDA", "MONGOLIAN LETTER ALI GALI THREE BALUDA", "MONGOLIAN LETTER ALI GALI A", "MONGOLIAN LETTER ALI GALI I", "MONGOLIAN LETTER ALI GALI KA", "MONGOLIAN LETTER ALI GALI NGA", "MONGOLIAN LETTER ALI GALI CA", "MONGOLIAN LETTER ALI GALI TTA", "MONGOLIAN LETTER ALI GALI TTHA", "MONGOLIAN LETTER ALI GALI DDA", "MONGOLIAN LETTER ALI GALI NNA", "MONGOLIAN LETTER ALI GALI TA", "MONGOLIAN LETTER ALI GALI DA", "MONGOLIAN LETTER ALI GALI PA", "MONGOLIAN LETTER ALI GALI PHA", "MONGOLIAN LETTER ALI GALI SSA", "MONGOLIAN LETTER ALI GALI ZHA", "MONGOLIAN LETTER ALI GALI ZA", "MONGOLIAN LETTER ALI GALI AH", "MONGOLIAN LETTER TODO ALI GALI TA", "MONGOLIAN LETTER TODO ALI GALI ZHA", "MONGOLIAN LETTER MANCHU ALI GALI GHA", "MONGOLIAN LETTER MANCHU ALI GALI NGA", "MONGOLIAN LETTER MANCHU ALI GALI CA", "MONGOLIAN LETTER MANCHU ALI GALI JHA", "MONGOLIAN LETTER MANCHU ALI GALI TTA", "MONGOLIAN LETTER MANCHU ALI GALI DDHA", "MONGOLIAN LETTER MANCHU ALI GALI TA", "MONGOLIAN LETTER MANCHU ALI GALI DHA", "MONGOLIAN LETTER MANCHU ALI GALI SSA", "MONGOLIAN LETTER MANCHU ALI GALI CYA", "MONGOLIAN LETTER MANCHU ALI GALI ZHA", "MONGOLIAN LETTER MANCHU ALI GALI ZA", "MONGOLIAN LETTER ALI GALI HALF U", "MONGOLIAN LETTER ALI GALI HALF YA", "MONGOLIAN LETTER MANCHU ALI GALI BHA", "MONGOLIAN LETTER ALI GALI DAGALGA", "MONGOLIAN LETTER MANCHU ALI GALI LHA", "CANADIAN SYLLABICS OY", "CANADIAN SYLLABICS AY", "CANADIAN SYLLABICS AAY", "CANADIAN SYLLABICS WAY", "CANADIAN SYLLABICS POY", "CANADIAN SYLLABICS PAY", "CANADIAN SYLLABICS PWOY", "CANADIAN SYLLABICS TAY", "CANADIAN SYLLABICS KAY", "CANADIAN SYLLABICS KWAY", "CANADIAN SYLLABICS MAY", "CANADIAN SYLLABICS NOY", "CANADIAN SYLLABICS NAY", "CANADIAN SYLLABICS LAY", "CANADIAN SYLLABICS SOY", "CANADIAN SYLLABICS SAY", "CANADIAN SYLLABICS SHOY", "CANADIAN SYLLABICS SHAY", "CANADIAN SYLLABICS SHWOY", "CANADIAN SYLLABICS YOY", "CANADIAN SYLLABICS YAY", "CANADIAN SYLLABICS RAY", "CANADIAN SYLLABICS NWI", "CANADIAN SYLLABICS OJIBWAY NWI", "CANADIAN SYLLABICS NWII", "CANADIAN SYLLABICS OJIBWAY NWII", "CANADIAN SYLLABICS NWO", "CANADIAN SYLLABICS OJIBWAY NWO", "CANADIAN SYLLABICS NWOO", "CANADIAN SYLLABICS OJIBWAY NWOO", "CANADIAN SYLLABICS RWEE", "CANADIAN SYLLABICS RWI", "CANADIAN SYLLABICS RWII", "CANADIAN SYLLABICS RWO", "CANADIAN SYLLABICS RWOO", "CANADIAN SYLLABICS RWA", "CANADIAN SYLLABICS OJIBWAY P", "CANADIAN SYLLABICS OJIBWAY T", "CANADIAN SYLLABICS OJIBWAY K", "CANADIAN SYLLABICS OJIBWAY C", "CANADIAN SYLLABICS OJIBWAY M", "CANADIAN SYLLABICS OJIBWAY N", "CANADIAN SYLLABICS OJIBWAY S", "CANADIAN SYLLABICS OJIBWAY SH", "CANADIAN SYLLABICS EASTERN W", "CANADIAN SYLLABICS WESTERN W", "CANADIAN SYLLABICS FINAL SMALL RING", "CANADIAN SYLLABICS FINAL RAISED DOT", "CANADIAN SYLLABICS R-CREE RWE", "CANADIAN SYLLABICS WEST-CREE LOO", "CANADIAN SYLLABICS WEST-CREE LAA", "CANADIAN SYLLABICS THWE", "CANADIAN SYLLABICS THWA", "CANADIAN SYLLABICS TTHWE", "CANADIAN SYLLABICS TTHOO", "CANADIAN SYLLABICS TTHAA", "CANADIAN SYLLABICS TLHWE", "CANADIAN SYLLABICS TLHOO", "CANADIAN SYLLABICS SAYISI SHWE", "CANADIAN SYLLABICS SAYISI SHOO", "CANADIAN SYLLABICS SAYISI HOO", "CANADIAN SYLLABICS CARRIER GWU", "CANADIAN SYLLABICS CARRIER DENE GEE", "CANADIAN SYLLABICS CARRIER GAA", "CANADIAN SYLLABICS CARRIER GWA", "CANADIAN SYLLABICS SAYISI JUU", "CANADIAN SYLLABICS CARRIER JWA", "CANADIAN SYLLABICS BEAVER DENE L", "CANADIAN SYLLABICS BEAVER DENE R", "CANADIAN SYLLABICS CARRIER DENTAL S", "LIMBU VOWEL-CARRIER LETTER", "LIMBU LETTER KA", "LIMBU LETTER KHA", "LIMBU LETTER GA", "LIMBU LETTER GHA", "LIMBU LETTER NGA", "LIMBU LETTER CA", "LIMBU LETTER CHA", "LIMBU LETTER JA", "LIMBU LETTER JHA", "LIMBU LETTER YAN", "LIMBU LETTER TA", "LIMBU LETTER THA", "LIMBU LETTER DA", "LIMBU LETTER DHA", "LIMBU LETTER NA", "LIMBU LETTER PA", "LIMBU LETTER PHA", "LIMBU LETTER BA", "LIMBU LETTER BHA", "LIMBU LETTER MA", "LIMBU LETTER YA", "LIMBU LETTER RA", "LIMBU LETTER LA", "LIMBU LETTER WA", "LIMBU LETTER SHA", "LIMBU LETTER SSA", "LIMBU LETTER SA", "LIMBU LETTER HA", "LIMBU LETTER GYAN", "LIMBU LETTER TRA", "LIMBU VOWEL SIGN A", "LIMBU VOWEL SIGN I", "LIMBU VOWEL SIGN U", "LIMBU VOWEL SIGN EE", "LIMBU VOWEL SIGN AI", "LIMBU VOWEL SIGN OO", "LIMBU VOWEL SIGN AU", "LIMBU VOWEL SIGN E", "LIMBU VOWEL SIGN O", "LIMBU SUBJOINED LETTER YA", "LIMBU SUBJOINED LETTER RA", "LIMBU SUBJOINED LETTER WA", "LIMBU SMALL LETTER KA", "LIMBU SMALL LETTER NGA", "LIMBU SMALL LETTER ANUSVARA", "LIMBU SMALL LETTER TA", "LIMBU SMALL LETTER NA", "LIMBU SMALL LETTER PA", "LIMBU SMALL LETTER MA", "LIMBU SMALL LETTER RA", "LIMBU SMALL LETTER LA", "LIMBU SIGN MUKPHRENG", "LIMBU SIGN KEMPHRENG", "LIMBU SIGN SA-I", "LIMBU SIGN LOO", "LIMBU EXCLAMATION MARK", "LIMBU QUESTION MARK", "LIMBU DIGIT ZERO", "LIMBU DIGIT ONE", "LIMBU DIGIT TWO", "LIMBU DIGIT THREE", "LIMBU DIGIT FOUR", "LIMBU DIGIT FIVE", "LIMBU DIGIT SIX", "LIMBU DIGIT SEVEN", "LIMBU DIGIT EIGHT", "LIMBU DIGIT NINE", "TAI LE LETTER KA", "TAI LE LETTER XA", "TAI LE LETTER NGA", "TAI LE LETTER TSA", "TAI LE LETTER SA", "TAI LE LETTER YA", "TAI LE LETTER TA", "TAI LE LETTER THA", "TAI LE LETTER LA", "TAI LE LETTER PA", "TAI LE LETTER PHA", "TAI LE LETTER MA", "TAI LE LETTER FA", "TAI LE LETTER VA", "TAI LE LETTER HA", "TAI LE LETTER QA", "TAI LE LETTER KHA", "TAI LE LETTER TSHA", "TAI LE LETTER NA", "TAI LE LETTER A", "TAI LE LETTER I", "TAI LE LETTER EE", "TAI LE LETTER EH", "TAI LE LETTER U", "TAI LE LETTER OO", "TAI LE LETTER O", "TAI LE LETTER UE", "TAI LE LETTER E", "TAI LE LETTER AUE", "TAI LE LETTER AI", "TAI LE LETTER TONE-2", "TAI LE LETTER TONE-3", "TAI LE LETTER TONE-4", "TAI LE LETTER TONE-5", "TAI LE LETTER TONE-6", "NEW TAI LUE LETTER HIGH QA", "NEW TAI LUE LETTER LOW QA", "NEW TAI LUE LETTER HIGH KA", "NEW TAI LUE LETTER HIGH XA", "NEW TAI LUE LETTER HIGH NGA", "NEW TAI LUE LETTER LOW KA", "NEW TAI LUE LETTER LOW XA", "NEW TAI LUE LETTER LOW NGA", "NEW TAI LUE LETTER HIGH TSA", "NEW TAI LUE LETTER HIGH SA", "NEW TAI LUE LETTER HIGH YA", "NEW TAI LUE LETTER LOW TSA", "NEW TAI LUE LETTER LOW SA", "NEW TAI LUE LETTER LOW YA", "NEW TAI LUE LETTER HIGH TA", "NEW TAI LUE LETTER HIGH THA", "NEW TAI LUE LETTER HIGH NA", "NEW TAI LUE LETTER LOW TA", "NEW TAI LUE LETTER LOW THA", "NEW TAI LUE LETTER LOW NA", "NEW TAI LUE LETTER HIGH PA", "NEW TAI LUE LETTER HIGH PHA", "NEW TAI LUE LETTER HIGH MA", "NEW TAI LUE LETTER LOW PA", "NEW TAI LUE LETTER LOW PHA", "NEW TAI LUE LETTER LOW MA", "NEW TAI LUE LETTER HIGH FA", "NEW TAI LUE LETTER HIGH VA", "NEW TAI LUE LETTER HIGH LA", "NEW TAI LUE LETTER LOW FA", "NEW TAI LUE LETTER LOW VA", "NEW TAI LUE LETTER LOW LA", "NEW TAI LUE LETTER HIGH HA", "NEW TAI LUE LETTER HIGH DA", "NEW TAI LUE LETTER HIGH BA", "NEW TAI LUE LETTER LOW HA", "NEW TAI LUE LETTER LOW DA", "NEW TAI LUE LETTER LOW BA", "NEW TAI LUE LETTER HIGH KVA", "NEW TAI LUE LETTER HIGH XVA", "NEW TAI LUE LETTER LOW KVA", "NEW TAI LUE LETTER LOW XVA", "NEW TAI LUE LETTER HIGH SUA", "NEW TAI LUE LETTER LOW SUA", "NEW TAI LUE VOWEL SIGN VOWEL SHORTENER", "NEW TAI LUE VOWEL SIGN AA", "NEW TAI LUE VOWEL SIGN II", "NEW TAI LUE VOWEL SIGN U", "NEW TAI LUE VOWEL SIGN UU", "NEW TAI LUE VOWEL SIGN E", "NEW TAI LUE VOWEL SIGN AE", "NEW TAI LUE VOWEL SIGN O", "NEW TAI LUE VOWEL SIGN OA", "NEW TAI LUE VOWEL SIGN UE", "NEW TAI LUE VOWEL SIGN AY", "NEW TAI LUE VOWEL SIGN AAY", "NEW TAI LUE VOWEL SIGN UY", "NEW TAI LUE VOWEL SIGN OY", "NEW TAI LUE VOWEL SIGN OAY", "NEW TAI LUE VOWEL SIGN UEY", "NEW TAI LUE VOWEL SIGN IY", "NEW TAI LUE LETTER FINAL V", "NEW TAI LUE LETTER FINAL NG", "NEW TAI LUE LETTER FINAL N", "NEW TAI LUE LETTER FINAL M", "NEW TAI LUE LETTER FINAL K", "NEW TAI LUE LETTER FINAL D", "NEW TAI LUE LETTER FINAL B", "NEW TAI LUE TONE MARK-1", "NEW TAI LUE TONE MARK-2", "NEW TAI LUE DIGIT ZERO", "NEW TAI LUE DIGIT ONE", "NEW TAI LUE DIGIT TWO", "NEW TAI LUE DIGIT THREE", "NEW TAI LUE DIGIT FOUR", "NEW TAI LUE DIGIT FIVE", "NEW TAI LUE DIGIT SIX", "NEW TAI LUE DIGIT SEVEN", "NEW TAI LUE DIGIT EIGHT", "NEW TAI LUE DIGIT NINE", "NEW TAI LUE THAM DIGIT ONE", "NEW TAI LUE SIGN LAE", "NEW TAI LUE SIGN LAEV", "KHMER SYMBOL PATHAMASAT", "KHMER SYMBOL MUOY KOET", "KHMER SYMBOL PII KOET", "KHMER SYMBOL BEI KOET", "KHMER SYMBOL BUON KOET", "KHMER SYMBOL PRAM KOET", "KHMER SYMBOL PRAM-MUOY KOET", "KHMER SYMBOL PRAM-PII KOET", "KHMER SYMBOL PRAM-BEI KOET", "KHMER SYMBOL PRAM-BUON KOET", "KHMER SYMBOL DAP KOET", "KHMER SYMBOL DAP-MUOY KOET", "KHMER SYMBOL DAP-PII KOET", "KHMER SYMBOL DAP-BEI KOET", "KHMER SYMBOL DAP-BUON KOET", "KHMER SYMBOL DAP-PRAM KOET", "KHMER SYMBOL TUTEYASAT", "KHMER SYMBOL MUOY ROC", "KHMER SYMBOL PII ROC", "KHMER SYMBOL BEI ROC", "KHMER SYMBOL BUON ROC", "KHMER SYMBOL PRAM ROC", "KHMER SYMBOL PRAM-MUOY ROC", "KHMER SYMBOL PRAM-PII ROC", "KHMER SYMBOL PRAM-BEI ROC", "KHMER SYMBOL PRAM-BUON ROC", "KHMER SYMBOL DAP ROC", "KHMER SYMBOL DAP-MUOY ROC", "KHMER SYMBOL DAP-PII ROC", "KHMER SYMBOL DAP-BEI ROC", "KHMER SYMBOL DAP-BUON ROC", "KHMER SYMBOL DAP-PRAM ROC", "BUGINESE LETTER KA", "BUGINESE LETTER GA", "BUGINESE LETTER NGA", "BUGINESE LETTER NGKA", "BUGINESE LETTER PA", "BUGINESE LETTER BA", "BUGINESE LETTER MA", "BUGINESE LETTER MPA", "BUGINESE LETTER TA", "BUGINESE LETTER DA", "BUGINESE LETTER NA", "BUGINESE LETTER NRA", "BUGINESE LETTER CA", "BUGINESE LETTER JA", "BUGINESE LETTER NYA", "BUGINESE LETTER NYCA", "BUGINESE LETTER YA", "BUGINESE LETTER RA", "BUGINESE LETTER LA", "BUGINESE LETTER VA", "BUGINESE LETTER SA", "BUGINESE LETTER A", "BUGINESE LETTER HA", "BUGINESE VOWEL SIGN I", "BUGINESE VOWEL SIGN U", "BUGINESE VOWEL SIGN E", "BUGINESE VOWEL SIGN O", "BUGINESE VOWEL SIGN AE", "BUGINESE PALLAWA", "BUGINESE END OF SECTION", "TAI THAM LETTER HIGH KA", "TAI THAM LETTER HIGH KHA", "TAI THAM LETTER HIGH KXA", "TAI THAM LETTER LOW KA", "TAI THAM LETTER LOW KXA", "TAI THAM LETTER LOW KHA", "TAI THAM LETTER NGA", "TAI THAM LETTER HIGH CA", "TAI THAM LETTER HIGH CHA", "TAI THAM LETTER LOW CA", "TAI THAM LETTER LOW SA", "TAI THAM LETTER LOW CHA", "TAI THAM LETTER NYA", "TAI THAM LETTER RATA", "TAI THAM LETTER HIGH RATHA", "TAI THAM LETTER DA", "TAI THAM LETTER LOW RATHA", "TAI THAM LETTER RANA", "TAI THAM LETTER HIGH TA", "TAI THAM LETTER HIGH THA", "TAI THAM LETTER LOW TA", "TAI THAM LETTER LOW THA", "TAI THAM LETTER NA", "TAI THAM LETTER BA", "TAI THAM LETTER HIGH PA", "TAI THAM LETTER HIGH PHA", "TAI THAM LETTER HIGH FA", "TAI THAM LETTER LOW PA", "TAI THAM LETTER LOW FA", "TAI THAM LETTER LOW PHA", "TAI THAM LETTER MA", "TAI THAM LETTER LOW YA", "TAI THAM LETTER HIGH YA", "TAI THAM LETTER RA", "TAI THAM LETTER RUE", "TAI THAM LETTER LA", "TAI THAM LETTER LUE", "TAI THAM LETTER WA", "TAI THAM LETTER HIGH SHA", "TAI THAM LETTER HIGH SSA", "TAI THAM LETTER HIGH SA", "TAI THAM LETTER HIGH HA", "TAI THAM LETTER LLA", "TAI THAM LETTER A", "TAI THAM LETTER LOW HA", "TAI THAM LETTER I", "TAI THAM LETTER II", "TAI THAM LETTER U", "TAI THAM LETTER UU", "TAI THAM LETTER EE", "TAI THAM LETTER OO", "TAI THAM LETTER LAE", "TAI THAM LETTER GREAT SA", "TAI THAM CONSONANT SIGN MEDIAL RA", "TAI THAM CONSONANT SIGN MEDIAL LA", "TAI THAM CONSONANT SIGN LA TANG LAI", "TAI THAM SIGN MAI KANG LAI", "TAI THAM CONSONANT SIGN FINAL NGA", "TAI THAM CONSONANT SIGN LOW PA", "TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA", "TAI THAM CONSONANT SIGN MA", "TAI THAM CONSONANT SIGN BA", "TAI THAM CONSONANT SIGN SA", "TAI THAM SIGN SAKOT", "TAI THAM VOWEL SIGN A", "TAI THAM VOWEL SIGN MAI SAT", "TAI THAM VOWEL SIGN AA", "TAI THAM VOWEL SIGN TALL AA", "TAI THAM VOWEL SIGN I", "TAI THAM VOWEL SIGN II", "TAI THAM VOWEL SIGN UE", "TAI THAM VOWEL SIGN UUE", "TAI THAM VOWEL SIGN U", "TAI THAM VOWEL SIGN UU", "TAI THAM VOWEL SIGN O", "TAI THAM VOWEL SIGN OA BELOW", "TAI THAM VOWEL SIGN OY", "TAI THAM VOWEL SIGN E", "TAI THAM VOWEL SIGN AE", "TAI THAM VOWEL SIGN OO", "TAI THAM VOWEL SIGN AI", "TAI THAM VOWEL SIGN THAM AI", "TAI THAM VOWEL SIGN OA ABOVE", "TAI THAM SIGN MAI KANG", "TAI THAM SIGN TONE-1", "TAI THAM SIGN TONE-2", "TAI THAM SIGN KHUEN TONE-3", "TAI THAM SIGN KHUEN TONE-4", "TAI THAM SIGN KHUEN TONE-5", "TAI THAM SIGN RA HAAM", "TAI THAM SIGN MAI SAM", "TAI THAM SIGN KHUEN-LUE KARAN", "TAI THAM COMBINING CRYPTOGRAMMIC DOT", "TAI THAM HORA DIGIT ZERO", "TAI THAM HORA DIGIT ONE", "TAI THAM HORA DIGIT TWO", "TAI THAM HORA DIGIT THREE", "TAI THAM HORA DIGIT FOUR", "TAI THAM HORA DIGIT FIVE", "TAI THAM HORA DIGIT SIX", "TAI THAM HORA DIGIT SEVEN", "TAI THAM HORA DIGIT EIGHT", "TAI THAM HORA DIGIT NINE", "TAI THAM THAM DIGIT ZERO", "TAI THAM THAM DIGIT ONE", "TAI THAM THAM DIGIT TWO", "TAI THAM THAM DIGIT THREE", "TAI THAM THAM DIGIT FOUR", "TAI THAM THAM DIGIT FIVE", "TAI THAM THAM DIGIT SIX", "TAI THAM THAM DIGIT SEVEN", "TAI THAM THAM DIGIT EIGHT", "TAI THAM THAM DIGIT NINE", "TAI THAM SIGN WIANG", "TAI THAM SIGN WIANGWAAK", "TAI THAM SIGN SAWAN", "TAI THAM SIGN KEOW", "TAI THAM SIGN HOY", "TAI THAM SIGN DOKMAI", "TAI THAM SIGN REVERSED ROTATED RANA", "TAI THAM SIGN MAI YAMOK", "TAI THAM SIGN KAAN", "TAI THAM SIGN KAANKUU", "TAI THAM SIGN SATKAAN", "TAI THAM SIGN SATKAANKUU", "TAI THAM SIGN HANG", "TAI THAM SIGN CAANG", "COMBINING DOUBLED CIRCUMFLEX ACCENT", "COMBINING DIAERESIS-RING", "COMBINING INFINITY", "COMBINING DOWNWARDS ARROW", "COMBINING TRIPLE DOT", "COMBINING X-X BELOW", "COMBINING WIGGLY LINE BELOW", "COMBINING OPEN MARK BELOW", "COMBINING DOUBLE OPEN MARK BELOW", "COMBINING LIGHT CENTRALIZATION STROKE BELOW", "COMBINING STRONG CENTRALIZATION STROKE BELOW", "COMBINING PARENTHESES ABOVE", "COMBINING DOUBLE PARENTHESES ABOVE", "COMBINING PARENTHESES BELOW", "COMBINING PARENTHESES OVERLAY", "BALINESE SIGN ULU RICEM", "BALINESE SIGN ULU CANDRA", "BALINESE SIGN CECEK", "BALINESE SIGN SURANG", "BALINESE SIGN BISAH", "BALINESE LETTER AKARA", "BALINESE LETTER AKARA TEDUNG", "BALINESE LETTER IKARA", "BALINESE LETTER IKARA TEDUNG", "BALINESE LETTER UKARA", "BALINESE LETTER UKARA TEDUNG", "BALINESE LETTER RA REPA", "BALINESE LETTER RA REPA TEDUNG", "BALINESE LETTER LA LENGA", "BALINESE LETTER LA LENGA TEDUNG", "BALINESE LETTER EKARA", "BALINESE LETTER AIKARA", "BALINESE LETTER OKARA", "BALINESE LETTER OKARA TEDUNG", "BALINESE LETTER KA", "BALINESE LETTER KA MAHAPRANA", "BALINESE LETTER GA", "BALINESE LETTER GA GORA", "BALINESE LETTER NGA", "BALINESE LETTER CA", "BALINESE LETTER CA LACA", "BALINESE LETTER JA", "BALINESE LETTER JA JERA", "BALINESE LETTER NYA", "BALINESE LETTER TA LATIK", "BALINESE LETTER TA MURDA MAHAPRANA", "BALINESE LETTER DA MURDA ALPAPRANA", "BALINESE LETTER DA MURDA MAHAPRANA", "BALINESE LETTER NA RAMBAT", "BALINESE LETTER TA", "BALINESE LETTER TA TAWA", "BALINESE LETTER DA", "BALINESE LETTER DA MADU", "BALINESE LETTER NA", "BALINESE LETTER PA", "BALINESE LETTER PA KAPAL", "BALINESE LETTER BA", "BALINESE LETTER BA KEMBANG", "BALINESE LETTER MA", "BALINESE LETTER YA", "BALINESE LETTER RA", "BALINESE LETTER LA", "BALINESE LETTER WA", "BALINESE LETTER SA SAGA", "BALINESE LETTER SA SAPA", "BALINESE LETTER SA", "BALINESE LETTER HA", "BALINESE SIGN REREKAN", "BALINESE VOWEL SIGN TEDUNG", "BALINESE VOWEL SIGN ULU", "BALINESE VOWEL SIGN ULU SARI", "BALINESE VOWEL SIGN SUKU", "BALINESE VOWEL SIGN SUKU ILUT", "BALINESE VOWEL SIGN RA REPA", "BALINESE VOWEL SIGN RA REPA TEDUNG", "BALINESE VOWEL SIGN LA LENGA", "BALINESE VOWEL SIGN LA LENGA TEDUNG", "BALINESE VOWEL SIGN TALING", "BALINESE VOWEL SIGN TALING REPA", "BALINESE VOWEL SIGN TALING TEDUNG", "BALINESE VOWEL SIGN TALING REPA TEDUNG", "BALINESE VOWEL SIGN PEPET", "BALINESE VOWEL SIGN PEPET TEDUNG", "BALINESE ADEG ADEG", "BALINESE LETTER KAF SASAK", "BALINESE LETTER KHOT SASAK", "BALINESE LETTER TZIR SASAK", "BALINESE LETTER EF SASAK", "BALINESE LETTER VE SASAK", "BALINESE LETTER ZAL SASAK", "BALINESE LETTER ASYURA SASAK", "BALINESE DIGIT ZERO", "BALINESE DIGIT ONE", "BALINESE DIGIT TWO", "BALINESE DIGIT THREE", "BALINESE DIGIT FOUR", "BALINESE DIGIT FIVE", "BALINESE DIGIT SIX", "BALINESE DIGIT SEVEN", "BALINESE DIGIT EIGHT", "BALINESE DIGIT NINE", "BALINESE PANTI", "BALINESE PAMADA", "BALINESE WINDU", "BALINESE CARIK PAMUNGKAH", "BALINESE CARIK SIKI", "BALINESE CARIK PAREREN", "BALINESE PAMENENG", "BALINESE MUSICAL SYMBOL DONG", "BALINESE MUSICAL SYMBOL DENG", "BALINESE MUSICAL SYMBOL DUNG", "BALINESE MUSICAL SYMBOL DANG", "BALINESE MUSICAL SYMBOL DANG SURANG", "BALINESE MUSICAL SYMBOL DING", "BALINESE MUSICAL SYMBOL DAENG", "BALINESE MUSICAL SYMBOL DEUNG", "BALINESE MUSICAL SYMBOL DAING", "BALINESE MUSICAL SYMBOL DANG GEDE", "BALINESE MUSICAL SYMBOL COMBINING TEGEH", "BALINESE MUSICAL SYMBOL COMBINING ENDEP", "BALINESE MUSICAL SYMBOL COMBINING KEMPUL", "BALINESE MUSICAL SYMBOL COMBINING KEMPLI", "BALINESE MUSICAL SYMBOL COMBINING JEGOGAN", "BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN", "BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN", "BALINESE MUSICAL SYMBOL COMBINING BENDE", "BALINESE MUSICAL SYMBOL COMBINING GONG", "BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG", "BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG", "BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK", "BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK", "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG", "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG", "BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK", "BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK", "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING", "SUNDANESE SIGN PANYECEK", "SUNDANESE SIGN PANGLAYAR", "SUNDANESE SIGN PANGWISAD", "SUNDANESE LETTER A", "SUNDANESE LETTER I", "SUNDANESE LETTER U", "SUNDANESE LETTER AE", "SUNDANESE LETTER O", "SUNDANESE LETTER E", "SUNDANESE LETTER EU", "SUNDANESE LETTER KA", "SUNDANESE LETTER QA", "SUNDANESE LETTER GA", "SUNDANESE LETTER NGA", "SUNDANESE LETTER CA", "SUNDANESE LETTER JA", "SUNDANESE LETTER ZA", "SUNDANESE LETTER NYA", "SUNDANESE LETTER TA", "SUNDANESE LETTER DA", "SUNDANESE LETTER NA", "SUNDANESE LETTER PA", "SUNDANESE LETTER FA", "SUNDANESE LETTER VA", "SUNDANESE LETTER BA", "SUNDANESE LETTER MA", "SUNDANESE LETTER YA", "SUNDANESE LETTER RA", "SUNDANESE LETTER LA", "SUNDANESE LETTER WA", "SUNDANESE LETTER SA", "SUNDANESE LETTER XA", "SUNDANESE LETTER HA", "SUNDANESE CONSONANT SIGN PAMINGKAL", "SUNDANESE CONSONANT SIGN PANYAKRA", "SUNDANESE CONSONANT SIGN PANYIKU", "SUNDANESE VOWEL SIGN PANGHULU", "SUNDANESE VOWEL SIGN PANYUKU", "SUNDANESE VOWEL SIGN PANAELAENG", "SUNDANESE VOWEL SIGN PANOLONG", "SUNDANESE VOWEL SIGN PAMEPET", "SUNDANESE VOWEL SIGN PANEULEUNG", "SUNDANESE SIGN PAMAAEH", "SUNDANESE SIGN VIRAMA", "SUNDANESE CONSONANT SIGN PASANGAN MA", "SUNDANESE CONSONANT SIGN PASANGAN WA", "SUNDANESE LETTER KHA", "SUNDANESE LETTER SYA", "SUNDANESE DIGIT ZERO", "SUNDANESE DIGIT ONE", "SUNDANESE DIGIT TWO", "SUNDANESE DIGIT THREE", "SUNDANESE DIGIT FOUR", "SUNDANESE DIGIT FIVE", "SUNDANESE DIGIT SIX", "SUNDANESE DIGIT SEVEN", "SUNDANESE DIGIT EIGHT", "SUNDANESE DIGIT NINE", "SUNDANESE AVAGRAHA", "SUNDANESE LETTER REU", "SUNDANESE LETTER LEU", "SUNDANESE LETTER BHA", "SUNDANESE LETTER FINAL K", "SUNDANESE LETTER FINAL M", "BATAK LETTER A", "BATAK LETTER SIMALUNGUN A", "BATAK LETTER HA", "BATAK LETTER SIMALUNGUN HA", "BATAK LETTER MANDAILING HA", "BATAK LETTER BA", "BATAK LETTER KARO BA", "BATAK LETTER PA", "BATAK LETTER SIMALUNGUN PA", "BATAK LETTER NA", "BATAK LETTER MANDAILING NA", "BATAK LETTER WA", "BATAK LETTER SIMALUNGUN WA", "BATAK LETTER PAKPAK WA", "BATAK LETTER GA", "BATAK LETTER SIMALUNGUN GA", "BATAK LETTER JA", "BATAK LETTER DA", "BATAK LETTER RA", "BATAK LETTER SIMALUNGUN RA", "BATAK LETTER MA", "BATAK LETTER SIMALUNGUN MA", "BATAK LETTER SOUTHERN TA", "BATAK LETTER NORTHERN TA", "BATAK LETTER SA", "BATAK LETTER SIMALUNGUN SA", "BATAK LETTER MANDAILING SA", "BATAK LETTER YA", "BATAK LETTER SIMALUNGUN YA", "BATAK LETTER NGA", "BATAK LETTER LA", "BATAK LETTER SIMALUNGUN LA", "BATAK LETTER NYA", "BATAK LETTER CA", "BATAK LETTER NDA", "BATAK LETTER MBA", "BATAK LETTER I", "BATAK LETTER U", "BATAK SIGN TOMPI", "BATAK VOWEL SIGN E", "BATAK VOWEL SIGN PAKPAK E", "BATAK VOWEL SIGN EE", "BATAK VOWEL SIGN I", "BATAK VOWEL SIGN KARO I", "BATAK VOWEL SIGN O", "BATAK VOWEL SIGN KARO O", "BATAK VOWEL SIGN U", "BATAK VOWEL SIGN U FOR SIMALUNGUN SA", "BATAK CONSONANT SIGN NG", "BATAK CONSONANT SIGN H", "BATAK PANGOLAT", "BATAK PANONGONAN", "BATAK SYMBOL BINDU NA METEK", "BATAK SYMBOL BINDU PINARBORAS", "BATAK SYMBOL BINDU JUDUL", "BATAK SYMBOL BINDU PANGOLAT", "LEPCHA LETTER KA", "LEPCHA LETTER KLA", "LEPCHA LETTER KHA", "LEPCHA LETTER GA", "LEPCHA LETTER GLA", "LEPCHA LETTER NGA", "LEPCHA LETTER CA", "LEPCHA LETTER CHA", "LEPCHA LETTER JA", "LEPCHA LETTER NYA", "LEPCHA LETTER TA", "LEPCHA LETTER THA", "LEPCHA LETTER DA", "LEPCHA LETTER NA", "LEPCHA LETTER PA", "LEPCHA LETTER PLA", "LEPCHA LETTER PHA", "LEPCHA LETTER FA", "LEPCHA LETTER FLA", "LEPCHA LETTER BA", "LEPCHA LETTER BLA", "LEPCHA LETTER MA", "LEPCHA LETTER MLA", "LEPCHA LETTER TSA", "LEPCHA LETTER TSHA", "LEPCHA LETTER DZA", "LEPCHA LETTER YA", "LEPCHA LETTER RA", "LEPCHA LETTER LA", "LEPCHA LETTER HA", "LEPCHA LETTER HLA", "LEPCHA LETTER VA", "LEPCHA LETTER SA", "LEPCHA LETTER SHA", "LEPCHA LETTER WA", "LEPCHA LETTER A", "LEPCHA SUBJOINED LETTER YA", "LEPCHA SUBJOINED LETTER RA", "LEPCHA VOWEL SIGN AA", "LEPCHA VOWEL SIGN I", "LEPCHA VOWEL SIGN O", "LEPCHA VOWEL SIGN OO", "LEPCHA VOWEL SIGN U", "LEPCHA VOWEL SIGN UU", "LEPCHA VOWEL SIGN E", "LEPCHA CONSONANT SIGN K", "LEPCHA CONSONANT SIGN M", "LEPCHA CONSONANT SIGN L", "LEPCHA CONSONANT SIGN N", "LEPCHA CONSONANT SIGN P", "LEPCHA CONSONANT SIGN R", "LEPCHA CONSONANT SIGN T", "LEPCHA CONSONANT SIGN NYIN-DO", "LEPCHA CONSONANT SIGN KANG", "LEPCHA SIGN RAN", "LEPCHA SIGN NUKTA", "LEPCHA PUNCTUATION TA-ROL", "LEPCHA PUNCTUATION NYET THYOOM TA-ROL", "LEPCHA PUNCTUATION CER-WA", "LEPCHA PUNCTUATION TSHOOK CER-WA", "LEPCHA PUNCTUATION TSHOOK", "LEPCHA DIGIT ZERO", "LEPCHA DIGIT ONE", "LEPCHA DIGIT TWO", "LEPCHA DIGIT THREE", "LEPCHA DIGIT FOUR", "LEPCHA DIGIT FIVE", "LEPCHA DIGIT SIX", "LEPCHA DIGIT SEVEN", "LEPCHA DIGIT EIGHT", "LEPCHA DIGIT NINE", "LEPCHA LETTER TTA", "LEPCHA LETTER TTHA", "LEPCHA LETTER DDA", "OL CHIKI DIGIT ZERO", "OL CHIKI DIGIT ONE", "OL CHIKI DIGIT TWO", "OL CHIKI DIGIT THREE", "OL CHIKI DIGIT FOUR", "OL CHIKI DIGIT FIVE", "OL CHIKI DIGIT SIX", "OL CHIKI DIGIT SEVEN", "OL CHIKI DIGIT EIGHT", "OL CHIKI DIGIT NINE", "OL CHIKI LETTER LA", "OL CHIKI LETTER AT", "OL CHIKI LETTER AG", "OL CHIKI LETTER ANG", "OL CHIKI LETTER AL", "OL CHIKI LETTER LAA", "OL CHIKI LETTER AAK", "OL CHIKI LETTER AAJ", "OL CHIKI LETTER AAM", "OL CHIKI LETTER AAW", "OL CHIKI LETTER LI", "OL CHIKI LETTER IS", "OL CHIKI LETTER IH", "OL CHIKI LETTER INY", "OL CHIKI LETTER IR", "OL CHIKI LETTER LU", "OL CHIKI LETTER UC", "OL CHIKI LETTER UD", "OL CHIKI LETTER UNN", "OL CHIKI LETTER UY", "OL CHIKI LETTER LE", "OL CHIKI LETTER EP", "OL CHIKI LETTER EDD", "OL CHIKI LETTER EN", "OL CHIKI LETTER ERR", "OL CHIKI LETTER LO", "OL CHIKI LETTER OTT", "OL CHIKI LETTER OB", "OL CHIKI LETTER OV", "OL CHIKI LETTER OH", "OL CHIKI MU TTUDDAG", "OL CHIKI GAAHLAA TTUDDAAG", "OL CHIKI MU-GAAHLAA TTUDDAAG", "OL CHIKI RELAA", "OL CHIKI PHAARKAA", "OL CHIKI AHAD", "OL CHIKI PUNCTUATION MUCAAD", "OL CHIKI PUNCTUATION DOUBLE MUCAAD", "CYRILLIC SMALL LETTER ROUNDED VE", "CYRILLIC SMALL LETTER LONG-LEGGED DE", "CYRILLIC SMALL LETTER NARROW O", "CYRILLIC SMALL LETTER WIDE ES", "CYRILLIC SMALL LETTER TALL TE", "CYRILLIC SMALL LETTER THREE-LEGGED TE", "CYRILLIC SMALL LETTER TALL HARD SIGN", "CYRILLIC SMALL LETTER TALL YAT", "CYRILLIC SMALL LETTER UNBLENDED UK", "GEORGIAN MTAVRULI CAPITAL LETTER AN", "GEORGIAN MTAVRULI CAPITAL LETTER BAN", "GEORGIAN MTAVRULI CAPITAL LETTER GAN", "GEORGIAN MTAVRULI CAPITAL LETTER DON", "GEORGIAN MTAVRULI CAPITAL LETTER EN", "GEORGIAN MTAVRULI CAPITAL LETTER VIN", "GEORGIAN MTAVRULI CAPITAL LETTER ZEN", "GEORGIAN MTAVRULI CAPITAL LETTER TAN", "GEORGIAN MTAVRULI CAPITAL LETTER IN", "GEORGIAN MTAVRULI CAPITAL LETTER KAN", "GEORGIAN MTAVRULI CAPITAL LETTER LAS", "GEORGIAN MTAVRULI CAPITAL LETTER MAN", "GEORGIAN MTAVRULI CAPITAL LETTER NAR", "GEORGIAN MTAVRULI CAPITAL LETTER ON", "GEORGIAN MTAVRULI CAPITAL LETTER PAR", "GEORGIAN MTAVRULI CAPITAL LETTER ZHAR", "GEORGIAN MTAVRULI CAPITAL LETTER RAE", "GEORGIAN MTAVRULI CAPITAL LETTER SAN", "GEORGIAN MTAVRULI CAPITAL LETTER TAR", "GEORGIAN MTAVRULI CAPITAL LETTER UN", "GEORGIAN MTAVRULI CAPITAL LETTER PHAR", "GEORGIAN MTAVRULI CAPITAL LETTER KHAR", "GEORGIAN MTAVRULI CAPITAL LETTER GHAN", "GEORGIAN MTAVRULI CAPITAL LETTER QAR", "GEORGIAN MTAVRULI CAPITAL LETTER SHIN", "GEORGIAN MTAVRULI CAPITAL LETTER CHIN", "GEORGIAN MTAVRULI CAPITAL LETTER CAN", "GEORGIAN MTAVRULI CAPITAL LETTER JIL", "GEORGIAN MTAVRULI CAPITAL LETTER CIL", "GEORGIAN MTAVRULI CAPITAL LETTER CHAR", "GEORGIAN MTAVRULI CAPITAL LETTER XAN", "GEORGIAN MTAVRULI CAPITAL LETTER JHAN", "GEORGIAN MTAVRULI CAPITAL LETTER HAE", "GEORGIAN MTAVRULI CAPITAL LETTER HE", "GEORGIAN MTAVRULI CAPITAL LETTER HIE", "GEORGIAN MTAVRULI CAPITAL LETTER WE", "GEORGIAN MTAVRULI CAPITAL LETTER HAR", "GEORGIAN MTAVRULI CAPITAL LETTER HOE", "GEORGIAN MTAVRULI CAPITAL LETTER FI", "GEORGIAN MTAVRULI CAPITAL LETTER YN", "GEORGIAN MTAVRULI CAPITAL LETTER ELIFI", "GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN", "GEORGIAN MTAVRULI CAPITAL LETTER AIN", "GEORGIAN MTAVRULI CAPITAL LETTER AEN", "GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN", "GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN", "SUNDANESE PUNCTUATION BINDU SURYA", "SUNDANESE PUNCTUATION BINDU PANGLONG", "SUNDANESE PUNCTUATION BINDU PURNAMA", "SUNDANESE PUNCTUATION BINDU CAKRA", "SUNDANESE PUNCTUATION BINDU LEU SATANGA", "SUNDANESE PUNCTUATION BINDU KA SATANGA", "SUNDANESE PUNCTUATION BINDU DA SATANGA", "SUNDANESE PUNCTUATION BINDU BA SATANGA", "VEDIC TONE KARSHANA", "VEDIC TONE SHARA", "VEDIC TONE PRENKHA", "VEDIC SIGN NIHSHVASA", "VEDIC SIGN YAJURVEDIC MIDLINE SVARITA", "VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA", "VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA", "VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA", "VEDIC TONE CANDRA BELOW", "VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER", "VEDIC TONE DOUBLE SVARITA", "VEDIC TONE TRIPLE SVARITA", "VEDIC TONE KATHAKA ANUDATTA", "VEDIC TONE DOT BELOW", "VEDIC TONE TWO DOTS BELOW", "VEDIC TONE THREE DOTS BELOW", "VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA", "VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA", "VEDIC SIGN VISARGA SVARITA", "VEDIC SIGN VISARGA UDATTA", "VEDIC SIGN REVERSED VISARGA UDATTA", "VEDIC SIGN VISARGA ANUDATTA", "VEDIC SIGN REVERSED VISARGA ANUDATTA", "VEDIC SIGN VISARGA UDATTA WITH TAIL", "VEDIC SIGN VISARGA ANUDATTA WITH TAIL", "VEDIC SIGN ANUSVARA ANTARGOMUKHA", "VEDIC SIGN ANUSVARA BAHIRGOMUKHA", "VEDIC SIGN ANUSVARA VAMAGOMUKHA", "VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL", "VEDIC SIGN TIRYAK", "VEDIC SIGN HEXIFORM LONG ANUSVARA", "VEDIC SIGN LONG ANUSVARA", "VEDIC SIGN RTHANG LONG ANUSVARA", "VEDIC SIGN ANUSVARA UBHAYATO MUKHA", "VEDIC SIGN ARDHAVISARGA", "VEDIC SIGN ROTATED ARDHAVISARGA", "VEDIC TONE CANDRA ABOVE", "VEDIC SIGN JIHVAMULIYA", "VEDIC SIGN UPADHMANIYA", "VEDIC SIGN ATIKRAMA", "VEDIC TONE RING ABOVE", "VEDIC TONE DOUBLE RING ABOVE", "VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA", "LATIN LETTER SMALL CAPITAL A", "LATIN LETTER SMALL CAPITAL AE", "LATIN SMALL LETTER TURNED AE", "LATIN LETTER SMALL CAPITAL BARRED B", "LATIN LETTER SMALL CAPITAL C", "LATIN LETTER SMALL CAPITAL D", "LATIN LETTER SMALL CAPITAL ETH", "LATIN LETTER SMALL CAPITAL E", "LATIN SMALL LETTER TURNED OPEN E", "LATIN SMALL LETTER TURNED I", "LATIN LETTER SMALL CAPITAL J", "LATIN LETTER SMALL CAPITAL K", "LATIN LETTER SMALL CAPITAL L WITH STROKE", "LATIN LETTER SMALL CAPITAL M", "LATIN LETTER SMALL CAPITAL REVERSED N", "LATIN LETTER SMALL CAPITAL O", "LATIN LETTER SMALL CAPITAL OPEN O", "LATIN SMALL LETTER SIDEWAYS O", "LATIN SMALL LETTER SIDEWAYS OPEN O", "LATIN SMALL LETTER SIDEWAYS O WITH STROKE", "LATIN SMALL LETTER TURNED OE", "LATIN LETTER SMALL CAPITAL OU", "LATIN SMALL LETTER TOP HALF O", "LATIN SMALL LETTER BOTTOM HALF O", "LATIN LETTER SMALL CAPITAL P", "LATIN LETTER SMALL CAPITAL REVERSED R", "LATIN LETTER SMALL CAPITAL TURNED R", "LATIN LETTER SMALL CAPITAL T", "LATIN LETTER SMALL CAPITAL U", "LATIN SMALL LETTER SIDEWAYS U", "LATIN SMALL LETTER SIDEWAYS DIAERESIZED U", "LATIN SMALL LETTER SIDEWAYS TURNED M", "LATIN LETTER SMALL CAPITAL V", "LATIN LETTER SMALL CAPITAL W", "LATIN LETTER SMALL CAPITAL Z", "LATIN LETTER SMALL CAPITAL EZH", "LATIN LETTER VOICED LARYNGEAL SPIRANT", "LATIN LETTER AIN", "GREEK LETTER SMALL CAPITAL GAMMA", "GREEK LETTER SMALL CAPITAL LAMDA", "GREEK LETTER SMALL CAPITAL PI", "GREEK LETTER SMALL CAPITAL RHO", "GREEK LETTER SMALL CAPITAL PSI", "CYRILLIC LETTER SMALL CAPITAL EL", "MODIFIER LETTER CAPITAL A", "MODIFIER LETTER CAPITAL AE", "MODIFIER LETTER CAPITAL B", "MODIFIER LETTER CAPITAL BARRED B", "MODIFIER LETTER CAPITAL D", "MODIFIER LETTER CAPITAL E", "MODIFIER LETTER CAPITAL REVERSED E", "MODIFIER LETTER CAPITAL G", "MODIFIER LETTER CAPITAL H", "MODIFIER LETTER CAPITAL I", "MODIFIER LETTER CAPITAL J", "MODIFIER LETTER CAPITAL K", "MODIFIER LETTER CAPITAL L", "MODIFIER LETTER CAPITAL M", "MODIFIER LETTER CAPITAL N", "MODIFIER LETTER CAPITAL REVERSED N", "MODIFIER LETTER CAPITAL O", "MODIFIER LETTER CAPITAL OU", "MODIFIER LETTER CAPITAL P", "MODIFIER LETTER CAPITAL R", "MODIFIER LETTER CAPITAL T", "MODIFIER LETTER CAPITAL U", "MODIFIER LETTER CAPITAL W", "MODIFIER LETTER SMALL A", "MODIFIER LETTER SMALL TURNED A", "MODIFIER LETTER SMALL ALPHA", "MODIFIER LETTER SMALL TURNED AE", "MODIFIER LETTER SMALL B", "MODIFIER LETTER SMALL D", "MODIFIER LETTER SMALL E", "MODIFIER LETTER SMALL SCHWA", "MODIFIER LETTER SMALL OPEN E", "MODIFIER LETTER SMALL TURNED OPEN E", "MODIFIER LETTER SMALL G", "MODIFIER LETTER SMALL TURNED I", "MODIFIER LETTER SMALL K", "MODIFIER LETTER SMALL M", "MODIFIER LETTER SMALL ENG", "MODIFIER LETTER SMALL O", "MODIFIER LETTER SMALL OPEN O", "MODIFIER LETTER SMALL TOP HALF O", "MODIFIER LETTER SMALL BOTTOM HALF O", "MODIFIER LETTER SMALL P", "MODIFIER LETTER SMALL T", "MODIFIER LETTER SMALL U", "MODIFIER LETTER SMALL SIDEWAYS U", "MODIFIER LETTER SMALL TURNED M", "MODIFIER LETTER SMALL V", "MODIFIER LETTER SMALL AIN", "MODIFIER LETTER SMALL BETA", "MODIFIER LETTER SMALL GREEK GAMMA", "MODIFIER LETTER SMALL DELTA", "MODIFIER LETTER SMALL GREEK PHI", "MODIFIER LETTER SMALL CHI", "LATIN SUBSCRIPT SMALL LETTER I", "LATIN SUBSCRIPT SMALL LETTER R", "LATIN SUBSCRIPT SMALL LETTER U", "LATIN SUBSCRIPT SMALL LETTER V", "GREEK SUBSCRIPT SMALL LETTER BETA", "GREEK SUBSCRIPT SMALL LETTER GAMMA", "GREEK SUBSCRIPT SMALL LETTER RHO", "GREEK SUBSCRIPT SMALL LETTER PHI", "GREEK SUBSCRIPT SMALL LETTER CHI", "LATIN SMALL LETTER UE", "LATIN SMALL LETTER B WITH MIDDLE TILDE", "LATIN SMALL LETTER D WITH MIDDLE TILDE", "LATIN SMALL LETTER F WITH MIDDLE TILDE", "LATIN SMALL LETTER M WITH MIDDLE TILDE", "LATIN SMALL LETTER N WITH MIDDLE TILDE", "LATIN SMALL LETTER P WITH MIDDLE TILDE", "LATIN SMALL LETTER R WITH MIDDLE TILDE", "LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE", "LATIN SMALL LETTER S WITH MIDDLE TILDE", "LATIN SMALL LETTER T WITH MIDDLE TILDE", "LATIN SMALL LETTER Z WITH MIDDLE TILDE", "LATIN SMALL LETTER TURNED G", "MODIFIER LETTER CYRILLIC EN", "LATIN SMALL LETTER INSULAR G", "LATIN SMALL LETTER TH WITH STRIKETHROUGH", "LATIN SMALL CAPITAL LETTER I WITH STROKE", "LATIN SMALL LETTER IOTA WITH STROKE", "LATIN SMALL LETTER P WITH STROKE", "LATIN SMALL CAPITAL LETTER U WITH STROKE", "LATIN SMALL LETTER UPSILON WITH STROKE", "LATIN SMALL LETTER B WITH PALATAL HOOK", "LATIN SMALL LETTER D WITH PALATAL HOOK", "LATIN SMALL LETTER F WITH PALATAL HOOK", "LATIN SMALL LETTER G WITH PALATAL HOOK", "LATIN SMALL LETTER K WITH PALATAL HOOK", "LATIN SMALL LETTER L WITH PALATAL HOOK", "LATIN SMALL LETTER M WITH PALATAL HOOK", "LATIN SMALL LETTER N WITH PALATAL HOOK", "LATIN SMALL LETTER P WITH PALATAL HOOK", "LATIN SMALL LETTER R WITH PALATAL HOOK", "LATIN SMALL LETTER S WITH PALATAL HOOK", "LATIN SMALL LETTER ESH WITH PALATAL HOOK", "LATIN SMALL LETTER V WITH PALATAL HOOK", "LATIN SMALL LETTER X WITH PALATAL HOOK", "LATIN SMALL LETTER Z WITH PALATAL HOOK", "LATIN SMALL LETTER A WITH RETROFLEX HOOK", "LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK", "LATIN SMALL LETTER D WITH HOOK AND TAIL", "LATIN SMALL LETTER E WITH RETROFLEX HOOK", "LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK", "LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK", "LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK", "LATIN SMALL LETTER I WITH RETROFLEX HOOK", "LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK", "LATIN SMALL LETTER ESH WITH RETROFLEX HOOK", "LATIN SMALL LETTER U WITH RETROFLEX HOOK", "LATIN SMALL LETTER EZH WITH RETROFLEX HOOK", "MODIFIER LETTER SMALL TURNED ALPHA", "MODIFIER LETTER SMALL C", "MODIFIER LETTER SMALL C WITH CURL", "MODIFIER LETTER SMALL ETH", "MODIFIER LETTER SMALL REVERSED OPEN E", "MODIFIER LETTER SMALL F", "MODIFIER LETTER SMALL DOTLESS J WITH STROKE", "MODIFIER LETTER SMALL SCRIPT G", "MODIFIER LETTER SMALL TURNED H", "MODIFIER LETTER SMALL I WITH STROKE", "MODIFIER LETTER SMALL IOTA", "MODIFIER LETTER SMALL CAPITAL I", "MODIFIER LETTER SMALL CAPITAL I WITH STROKE", "MODIFIER LETTER SMALL J WITH CROSSED-TAIL", "MODIFIER LETTER SMALL L WITH RETROFLEX HOOK", "MODIFIER LETTER SMALL L WITH PALATAL HOOK", "MODIFIER LETTER SMALL CAPITAL L", "MODIFIER LETTER SMALL M WITH HOOK", "MODIFIER LETTER SMALL TURNED M WITH LONG LEG", "MODIFIER LETTER SMALL N WITH LEFT HOOK", "MODIFIER LETTER SMALL N WITH RETROFLEX HOOK", "MODIFIER LETTER SMALL CAPITAL N", "MODIFIER LETTER SMALL BARRED O", "MODIFIER LETTER SMALL PHI", "MODIFIER LETTER SMALL S WITH HOOK", "MODIFIER LETTER SMALL ESH", "MODIFIER LETTER SMALL T WITH PALATAL HOOK", "MODIFIER LETTER SMALL U BAR", "MODIFIER LETTER SMALL UPSILON", "MODIFIER LETTER SMALL CAPITAL U", "MODIFIER LETTER SMALL V WITH HOOK", "MODIFIER LETTER SMALL TURNED V", "MODIFIER LETTER SMALL Z", "MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK", "MODIFIER LETTER SMALL Z WITH CURL", "MODIFIER LETTER SMALL EZH", "MODIFIER LETTER SMALL THETA", "COMBINING DOTTED GRAVE ACCENT", "COMBINING DOTTED ACUTE ACCENT", "COMBINING SNAKE BELOW", "COMBINING SUSPENSION MARK", "COMBINING MACRON-ACUTE", "COMBINING GRAVE-MACRON", "COMBINING MACRON-GRAVE", "COMBINING ACUTE-MACRON", "COMBINING GRAVE-ACUTE-GRAVE", "COMBINING ACUTE-GRAVE-ACUTE", "COMBINING LATIN SMALL LETTER R BELOW", "COMBINING BREVE-MACRON", "COMBINING MACRON-BREVE", "COMBINING DOUBLE CIRCUMFLEX ABOVE", "COMBINING OGONEK ABOVE", "COMBINING ZIGZAG BELOW", "COMBINING IS BELOW", "COMBINING UR ABOVE", "COMBINING US ABOVE", "COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE", "COMBINING LATIN SMALL LETTER AE", "COMBINING LATIN SMALL LETTER AO", "COMBINING LATIN SMALL LETTER AV", "COMBINING LATIN SMALL LETTER C CEDILLA", "COMBINING LATIN SMALL LETTER INSULAR D", "COMBINING LATIN SMALL LETTER ETH", "COMBINING LATIN SMALL LETTER G", "COMBINING LATIN LETTER SMALL CAPITAL G", "COMBINING LATIN SMALL LETTER K", "COMBINING LATIN SMALL LETTER L", "COMBINING LATIN LETTER SMALL CAPITAL L", "COMBINING LATIN LETTER SMALL CAPITAL M", "COMBINING LATIN SMALL LETTER N", "COMBINING LATIN LETTER SMALL CAPITAL N", "COMBINING LATIN LETTER SMALL CAPITAL R", "COMBINING LATIN SMALL LETTER R ROTUNDA", "COMBINING LATIN SMALL LETTER S", "COMBINING LATIN SMALL LETTER LONG S", "COMBINING LATIN SMALL LETTER Z", "COMBINING LATIN SMALL LETTER ALPHA", "COMBINING LATIN SMALL LETTER B", "COMBINING LATIN SMALL LETTER BETA", "COMBINING LATIN SMALL LETTER SCHWA", "COMBINING LATIN SMALL LETTER F", "COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE", "COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE", "COMBINING LATIN SMALL LETTER P", "COMBINING LATIN SMALL LETTER ESH", "COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE", "COMBINING LATIN SMALL LETTER W", "COMBINING LATIN SMALL LETTER A WITH DIAERESIS", "COMBINING LATIN SMALL LETTER O WITH DIAERESIS", "COMBINING LATIN SMALL LETTER U WITH DIAERESIS", "COMBINING UP TACK ABOVE", "COMBINING KAVYKA ABOVE RIGHT", "COMBINING KAVYKA ABOVE LEFT", "COMBINING DOT ABOVE LEFT", "COMBINING WIDE INVERTED BRIDGE BELOW", "COMBINING DELETION MARK", "COMBINING DOUBLE INVERTED BREVE BELOW", "COMBINING ALMOST EQUAL TO BELOW", "COMBINING LEFT ARROWHEAD ABOVE", "COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW", "LATIN CAPITAL LETTER A WITH RING BELOW", "LATIN SMALL LETTER A WITH RING BELOW", "LATIN CAPITAL LETTER B WITH DOT ABOVE", "LATIN SMALL LETTER B WITH DOT ABOVE", "LATIN CAPITAL LETTER B WITH DOT BELOW", "LATIN SMALL LETTER B WITH DOT BELOW", "LATIN CAPITAL LETTER B WITH LINE BELOW", "LATIN SMALL LETTER B WITH LINE BELOW", "LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE", "LATIN SMALL LETTER C WITH CEDILLA AND ACUTE", "LATIN CAPITAL LETTER D WITH DOT ABOVE", "LATIN SMALL LETTER D WITH DOT ABOVE", "LATIN CAPITAL LETTER D WITH DOT BELOW", "LATIN SMALL LETTER D WITH DOT BELOW", "LATIN CAPITAL LETTER D WITH LINE BELOW", "LATIN SMALL LETTER D WITH LINE BELOW", "LATIN CAPITAL LETTER D WITH CEDILLA", "LATIN SMALL LETTER D WITH CEDILLA", "LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER E WITH MACRON AND GRAVE", "LATIN SMALL LETTER E WITH MACRON AND GRAVE", "LATIN CAPITAL LETTER E WITH MACRON AND ACUTE", "LATIN SMALL LETTER E WITH MACRON AND ACUTE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER E WITH TILDE BELOW", "LATIN SMALL LETTER E WITH TILDE BELOW", "LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE", "LATIN SMALL LETTER E WITH CEDILLA AND BREVE", "LATIN CAPITAL LETTER F WITH DOT ABOVE", "LATIN SMALL LETTER F WITH DOT ABOVE", "LATIN CAPITAL LETTER G WITH MACRON", "LATIN SMALL LETTER G WITH MACRON", "LATIN CAPITAL LETTER H WITH DOT ABOVE", "LATIN SMALL LETTER H WITH DOT ABOVE", "LATIN CAPITAL LETTER H WITH DOT BELOW", "LATIN SMALL LETTER H WITH DOT BELOW", "LATIN CAPITAL LETTER H WITH DIAERESIS", "LATIN SMALL LETTER H WITH DIAERESIS", "LATIN CAPITAL LETTER H WITH CEDILLA", "LATIN SMALL LETTER H WITH CEDILLA", "LATIN CAPITAL LETTER H WITH BREVE BELOW", "LATIN SMALL LETTER H WITH BREVE BELOW", "LATIN CAPITAL LETTER I WITH TILDE BELOW", "LATIN SMALL LETTER I WITH TILDE BELOW", "LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE", "LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE", "LATIN CAPITAL LETTER K WITH ACUTE", "LATIN SMALL LETTER K WITH ACUTE", "LATIN CAPITAL LETTER K WITH DOT BELOW", "LATIN SMALL LETTER K WITH DOT BELOW", "LATIN CAPITAL LETTER K WITH LINE BELOW", "LATIN SMALL LETTER K WITH LINE BELOW", "LATIN CAPITAL LETTER L WITH DOT BELOW", "LATIN SMALL LETTER L WITH DOT BELOW", "LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON", "LATIN SMALL LETTER L WITH DOT BELOW AND MACRON", "LATIN CAPITAL LETTER L WITH LINE BELOW", "LATIN SMALL LETTER L WITH LINE BELOW", "LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER M WITH ACUTE", "LATIN SMALL LETTER M WITH ACUTE", "LATIN CAPITAL LETTER M WITH DOT ABOVE", "LATIN SMALL LETTER M WITH DOT ABOVE", "LATIN CAPITAL LETTER M WITH DOT BELOW", "LATIN SMALL LETTER M WITH DOT BELOW", "LATIN CAPITAL LETTER N WITH DOT ABOVE", "LATIN SMALL LETTER N WITH DOT ABOVE", "LATIN CAPITAL LETTER N WITH DOT BELOW", "LATIN SMALL LETTER N WITH DOT BELOW", "LATIN CAPITAL LETTER N WITH LINE BELOW", "LATIN SMALL LETTER N WITH LINE BELOW", "LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER O WITH TILDE AND ACUTE", "LATIN SMALL LETTER O WITH TILDE AND ACUTE", "LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS", "LATIN SMALL LETTER O WITH TILDE AND DIAERESIS", "LATIN CAPITAL LETTER O WITH MACRON AND GRAVE", "LATIN SMALL LETTER O WITH MACRON AND GRAVE", "LATIN CAPITAL LETTER O WITH MACRON AND ACUTE", "LATIN SMALL LETTER O WITH MACRON AND ACUTE", "LATIN CAPITAL LETTER P WITH ACUTE", "LATIN SMALL LETTER P WITH ACUTE", "LATIN CAPITAL LETTER P WITH DOT ABOVE", "LATIN SMALL LETTER P WITH DOT ABOVE", "LATIN CAPITAL LETTER R WITH DOT ABOVE", "LATIN SMALL LETTER R WITH DOT ABOVE", "LATIN CAPITAL LETTER R WITH DOT BELOW", "LATIN SMALL LETTER R WITH DOT BELOW", "LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON", "LATIN SMALL LETTER R WITH DOT BELOW AND MACRON", "LATIN CAPITAL LETTER R WITH LINE BELOW", "LATIN SMALL LETTER R WITH LINE BELOW", "LATIN CAPITAL LETTER S WITH DOT ABOVE", "LATIN SMALL LETTER S WITH DOT ABOVE", "LATIN CAPITAL LETTER S WITH DOT BELOW", "LATIN SMALL LETTER S WITH DOT BELOW", "LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE", "LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE", "LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE", "LATIN SMALL LETTER S WITH CARON AND DOT ABOVE", "LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE", "LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE", "LATIN CAPITAL LETTER T WITH DOT ABOVE", "LATIN SMALL LETTER T WITH DOT ABOVE", "LATIN CAPITAL LETTER T WITH DOT BELOW", "LATIN SMALL LETTER T WITH DOT BELOW", "LATIN CAPITAL LETTER T WITH LINE BELOW", "LATIN SMALL LETTER T WITH LINE BELOW", "LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER U WITH DIAERESIS BELOW", "LATIN SMALL LETTER U WITH DIAERESIS BELOW", "LATIN CAPITAL LETTER U WITH TILDE BELOW", "LATIN SMALL LETTER U WITH TILDE BELOW", "LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER U WITH TILDE AND ACUTE", "LATIN SMALL LETTER U WITH TILDE AND ACUTE", "LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS", "LATIN SMALL LETTER U WITH MACRON AND DIAERESIS", "LATIN CAPITAL LETTER V WITH TILDE", "LATIN SMALL LETTER V WITH TILDE", "LATIN CAPITAL LETTER V WITH DOT BELOW", "LATIN SMALL LETTER V WITH DOT BELOW", "LATIN CAPITAL LETTER W WITH GRAVE", "LATIN SMALL LETTER W WITH GRAVE", "LATIN CAPITAL LETTER W WITH ACUTE", "LATIN SMALL LETTER W WITH ACUTE", "LATIN CAPITAL LETTER W WITH DIAERESIS", "LATIN SMALL LETTER W WITH DIAERESIS", "LATIN CAPITAL LETTER W WITH DOT ABOVE", "LATIN SMALL LETTER W WITH DOT ABOVE", "LATIN CAPITAL LETTER W WITH DOT BELOW", "LATIN SMALL LETTER W WITH DOT BELOW", "LATIN CAPITAL LETTER X WITH DOT ABOVE", "LATIN SMALL LETTER X WITH DOT ABOVE", "LATIN CAPITAL LETTER X WITH DIAERESIS", "LATIN SMALL LETTER X WITH DIAERESIS", "LATIN CAPITAL LETTER Y WITH DOT ABOVE", "LATIN SMALL LETTER Y WITH DOT ABOVE", "LATIN CAPITAL LETTER Z WITH CIRCUMFLEX", "LATIN SMALL LETTER Z WITH CIRCUMFLEX", "LATIN CAPITAL LETTER Z WITH DOT BELOW", "LATIN SMALL LETTER Z WITH DOT BELOW", "LATIN CAPITAL LETTER Z WITH LINE BELOW", "LATIN SMALL LETTER Z WITH LINE BELOW", "LATIN SMALL LETTER H WITH LINE BELOW", "LATIN SMALL LETTER T WITH DIAERESIS", "LATIN SMALL LETTER W WITH RING ABOVE", "LATIN SMALL LETTER Y WITH RING ABOVE", "LATIN SMALL LETTER A WITH RIGHT HALF RING", "LATIN SMALL LETTER LONG S WITH DOT ABOVE", "LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE", "LATIN SMALL LETTER LONG S WITH HIGH STROKE", "LATIN CAPITAL LETTER SHARP S", "LATIN SMALL LETTER DELTA", "LATIN CAPITAL LETTER A WITH DOT BELOW", "LATIN SMALL LETTER A WITH DOT BELOW", "LATIN CAPITAL LETTER A WITH HOOK ABOVE", "LATIN SMALL LETTER A WITH HOOK ABOVE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER A WITH BREVE AND ACUTE", "LATIN SMALL LETTER A WITH BREVE AND ACUTE", "LATIN CAPITAL LETTER A WITH BREVE AND GRAVE", "LATIN SMALL LETTER A WITH BREVE AND GRAVE", "LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE", "LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE", "LATIN CAPITAL LETTER A WITH BREVE AND TILDE", "LATIN SMALL LETTER A WITH BREVE AND TILDE", "LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW", "LATIN SMALL LETTER A WITH BREVE AND DOT BELOW", "LATIN CAPITAL LETTER E WITH DOT BELOW", "LATIN SMALL LETTER E WITH DOT BELOW", "LATIN CAPITAL LETTER E WITH HOOK ABOVE", "LATIN SMALL LETTER E WITH HOOK ABOVE", "LATIN CAPITAL LETTER E WITH TILDE", "LATIN SMALL LETTER E WITH TILDE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER I WITH HOOK ABOVE", "LATIN SMALL LETTER I WITH HOOK ABOVE", "LATIN CAPITAL LETTER I WITH DOT BELOW", "LATIN SMALL LETTER I WITH DOT BELOW", "LATIN CAPITAL LETTER O WITH DOT BELOW", "LATIN SMALL LETTER O WITH DOT BELOW", "LATIN CAPITAL LETTER O WITH HOOK ABOVE", "LATIN SMALL LETTER O WITH HOOK ABOVE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER O WITH HORN AND ACUTE", "LATIN SMALL LETTER O WITH HORN AND ACUTE", "LATIN CAPITAL LETTER O WITH HORN AND GRAVE", "LATIN SMALL LETTER O WITH HORN AND GRAVE", "LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE", "LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE", "LATIN CAPITAL LETTER O WITH HORN AND TILDE", "LATIN SMALL LETTER O WITH HORN AND TILDE", "LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW", "LATIN SMALL LETTER O WITH HORN AND DOT BELOW", "LATIN CAPITAL LETTER U WITH DOT BELOW", "LATIN SMALL LETTER U WITH DOT BELOW", "LATIN CAPITAL LETTER U WITH HOOK ABOVE", "LATIN SMALL LETTER U WITH HOOK ABOVE", "LATIN CAPITAL LETTER U WITH HORN AND ACUTE", "LATIN SMALL LETTER U WITH HORN AND ACUTE", "LATIN CAPITAL LETTER U WITH HORN AND GRAVE", "LATIN SMALL LETTER U WITH HORN AND GRAVE", "LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE", "LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE", "LATIN CAPITAL LETTER U WITH HORN AND TILDE", "LATIN SMALL LETTER U WITH HORN AND TILDE", "LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW", "LATIN SMALL LETTER U WITH HORN AND DOT BELOW", "LATIN CAPITAL LETTER Y WITH GRAVE", "LATIN SMALL LETTER Y WITH GRAVE", "LATIN CAPITAL LETTER Y WITH DOT BELOW", "LATIN SMALL LETTER Y WITH DOT BELOW", "LATIN CAPITAL LETTER Y WITH HOOK ABOVE", "LATIN SMALL LETTER Y WITH HOOK ABOVE", "LATIN CAPITAL LETTER Y WITH TILDE", "LATIN SMALL LETTER Y WITH TILDE", "LATIN CAPITAL LETTER MIDDLE-WELSH LL", "LATIN SMALL LETTER MIDDLE-WELSH LL", "LATIN CAPITAL LETTER MIDDLE-WELSH V", "LATIN SMALL LETTER MIDDLE-WELSH V", "LATIN CAPITAL LETTER Y WITH LOOP", "LATIN SMALL LETTER Y WITH LOOP", "GREEK SMALL LETTER ALPHA WITH PSILI", "GREEK SMALL LETTER ALPHA WITH DASIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA", "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA", "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI", "GREEK CAPITAL LETTER ALPHA WITH DASIA", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER EPSILON WITH PSILI", "GREEK SMALL LETTER EPSILON WITH DASIA", "GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA", "GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA", "GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA", "GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER EPSILON WITH PSILI", "GREEK CAPITAL LETTER EPSILON WITH DASIA", "GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA", "GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA", "GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA", "GREEK SMALL LETTER ETA WITH PSILI", "GREEK SMALL LETTER ETA WITH DASIA", "GREEK SMALL LETTER ETA WITH PSILI AND VARIA", "GREEK SMALL LETTER ETA WITH DASIA AND VARIA", "GREEK SMALL LETTER ETA WITH PSILI AND OXIA", "GREEK SMALL LETTER ETA WITH DASIA AND OXIA", "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER ETA WITH PSILI", "GREEK CAPITAL LETTER ETA WITH DASIA", "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER IOTA WITH PSILI", "GREEK SMALL LETTER IOTA WITH DASIA", "GREEK SMALL LETTER IOTA WITH PSILI AND VARIA", "GREEK SMALL LETTER IOTA WITH DASIA AND VARIA", "GREEK SMALL LETTER IOTA WITH PSILI AND OXIA", "GREEK SMALL LETTER IOTA WITH DASIA AND OXIA", "GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER IOTA WITH PSILI", "GREEK CAPITAL LETTER IOTA WITH DASIA", "GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER OMICRON WITH PSILI", "GREEK SMALL LETTER OMICRON WITH DASIA", "GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA", "GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA", "GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA", "GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER OMICRON WITH PSILI", "GREEK CAPITAL LETTER OMICRON WITH DASIA", "GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA", "GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA", "GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA", "GREEK SMALL LETTER UPSILON WITH PSILI", "GREEK SMALL LETTER UPSILON WITH DASIA", "GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA", "GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA", "GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA", "GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA", "GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER UPSILON WITH DASIA", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER OMEGA WITH PSILI", "GREEK SMALL LETTER OMEGA WITH DASIA", "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA", "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA", "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA", "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA", "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI", "GREEK CAPITAL LETTER OMEGA WITH DASIA", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER ALPHA WITH VARIA", "GREEK SMALL LETTER ALPHA WITH OXIA", "GREEK SMALL LETTER EPSILON WITH VARIA", "GREEK SMALL LETTER EPSILON WITH OXIA", "GREEK SMALL LETTER ETA WITH VARIA", "GREEK SMALL LETTER ETA WITH OXIA", "GREEK SMALL LETTER IOTA WITH VARIA", "GREEK SMALL LETTER IOTA WITH OXIA", "GREEK SMALL LETTER OMICRON WITH VARIA", "GREEK SMALL LETTER OMICRON WITH OXIA", "GREEK SMALL LETTER UPSILON WITH VARIA", "GREEK SMALL LETTER UPSILON WITH OXIA", "GREEK SMALL LETTER OMEGA WITH VARIA", "GREEK SMALL LETTER OMEGA WITH OXIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH VRACHY", "GREEK SMALL LETTER ALPHA WITH MACRON", "GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PERISPOMENI", "GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH VRACHY", "GREEK CAPITAL LETTER ALPHA WITH MACRON", "GREEK CAPITAL LETTER ALPHA WITH VARIA", "GREEK CAPITAL LETTER ALPHA WITH OXIA", "GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI", "GREEK KORONIS", "GREEK PROSGEGRAMMENI", "GREEK PSILI", "GREEK PERISPOMENI", "GREEK DIALYTIKA AND PERISPOMENI", "GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PERISPOMENI", "GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER EPSILON WITH VARIA", "GREEK CAPITAL LETTER EPSILON WITH OXIA", "GREEK CAPITAL LETTER ETA WITH VARIA", "GREEK CAPITAL LETTER ETA WITH OXIA", "GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI", "GREEK PSILI AND VARIA", "GREEK PSILI AND OXIA", "GREEK PSILI AND PERISPOMENI", "GREEK SMALL LETTER IOTA WITH VRACHY", "GREEK SMALL LETTER IOTA WITH MACRON", "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA", "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA", "GREEK SMALL LETTER IOTA WITH PERISPOMENI", "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI", "GREEK CAPITAL LETTER IOTA WITH VRACHY", "GREEK CAPITAL LETTER IOTA WITH MACRON", "GREEK CAPITAL LETTER IOTA WITH VARIA", "GREEK CAPITAL LETTER IOTA WITH OXIA", "GREEK DASIA AND VARIA", "GREEK DASIA AND OXIA", "GREEK DASIA AND PERISPOMENI", "GREEK SMALL LETTER UPSILON WITH VRACHY", "GREEK SMALL LETTER UPSILON WITH MACRON", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA", "GREEK SMALL LETTER RHO WITH PSILI", "GREEK SMALL LETTER RHO WITH DASIA", "GREEK SMALL LETTER UPSILON WITH PERISPOMENI", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI", "GREEK CAPITAL LETTER UPSILON WITH VRACHY", "GREEK CAPITAL LETTER UPSILON WITH MACRON", "GREEK CAPITAL LETTER UPSILON WITH VARIA", "GREEK CAPITAL LETTER UPSILON WITH OXIA", "GREEK CAPITAL LETTER RHO WITH DASIA", "GREEK DIALYTIKA AND VARIA", "GREEK DIALYTIKA AND OXIA", "GREEK VARIA", "GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PERISPOMENI", "GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMICRON WITH VARIA", "GREEK CAPITAL LETTER OMICRON WITH OXIA", "GREEK CAPITAL LETTER OMEGA WITH VARIA", "GREEK CAPITAL LETTER OMEGA WITH OXIA", "GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI", "GREEK OXIA", "GREEK DASIA", "EN QUAD", "EM QUAD", "EN SPACE", "EM SPACE", "THREE-PER-EM SPACE", "FOUR-PER-EM SPACE", "SIX-PER-EM SPACE", "FIGURE SPACE", "PUNCTUATION SPACE", "THIN SPACE", "HAIR SPACE", "ZERO WIDTH SPACE", "ZERO WIDTH NON-JOINER", "ZERO WIDTH JOINER", "LEFT-TO-RIGHT MARK", "RIGHT-TO-LEFT MARK", "HYPHEN", "NON-BREAKING HYPHEN", "FIGURE DASH", "EN DASH", "EM DASH", "HORIZONTAL BAR", "DOUBLE VERTICAL LINE", "DOUBLE LOW LINE", "LEFT SINGLE QUOTATION MARK", "RIGHT SINGLE QUOTATION MARK", "SINGLE LOW-9 QUOTATION MARK", "SINGLE HIGH-REVERSED-9 QUOTATION MARK", "LEFT DOUBLE QUOTATION MARK", "RIGHT DOUBLE QUOTATION MARK", "DOUBLE LOW-9 QUOTATION MARK", "DOUBLE HIGH-REVERSED-9 QUOTATION MARK", "DAGGER", "DOUBLE DAGGER", "BULLET", "TRIANGULAR BULLET", "ONE DOT LEADER", "TWO DOT LEADER", "HORIZONTAL ELLIPSIS", "HYPHENATION POINT", "LINE SEPARATOR", "PARAGRAPH SEPARATOR", "LEFT-TO-RIGHT EMBEDDING", "RIGHT-TO-LEFT EMBEDDING", "POP DIRECTIONAL FORMATTING", "LEFT-TO-RIGHT OVERRIDE", "RIGHT-TO-LEFT OVERRIDE", "NARROW NO-BREAK SPACE", "PER MILLE SIGN", "PER TEN THOUSAND SIGN", "PRIME", "DOUBLE PRIME", "TRIPLE PRIME", "REVERSED PRIME", "REVERSED DOUBLE PRIME", "REVERSED TRIPLE PRIME", "CARET", "SINGLE LEFT-POINTING ANGLE QUOTATION MARK", "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", "REFERENCE MARK", "DOUBLE EXCLAMATION MARK", "INTERROBANG", "OVERLINE", "UNDERTIE", "CHARACTER TIE", "CARET INSERTION POINT", "ASTERISM", "HYPHEN BULLET", "FRACTION SLASH", "LEFT SQUARE BRACKET WITH QUILL", "RIGHT SQUARE BRACKET WITH QUILL", "DOUBLE QUESTION MARK", "QUESTION EXCLAMATION MARK", "EXCLAMATION QUESTION MARK", "TIRONIAN SIGN ET", "REVERSED PILCROW SIGN", "BLACK LEFTWARDS BULLET", "BLACK RIGHTWARDS BULLET", "LOW ASTERISK", "REVERSED SEMICOLON", "CLOSE UP", "TWO ASTERISKS ALIGNED VERTICALLY", "COMMERCIAL MINUS SIGN", "SWUNG DASH", "INVERTED UNDERTIE", "FLOWER PUNCTUATION MARK", "THREE DOT PUNCTUATION", "QUADRUPLE PRIME", "FOUR DOT PUNCTUATION", "FIVE DOT PUNCTUATION", "TWO DOT PUNCTUATION", "FOUR DOT MARK", "DOTTED CROSS", "TRICOLON", "VERTICAL FOUR DOTS", "MEDIUM MATHEMATICAL SPACE", "WORD JOINER", "FUNCTION APPLICATION", "INVISIBLE TIMES", "INVISIBLE SEPARATOR", "INVISIBLE PLUS", "LEFT-TO-RIGHT ISOLATE", "RIGHT-TO-LEFT ISOLATE", "FIRST STRONG ISOLATE", "POP DIRECTIONAL ISOLATE", "INHIBIT SYMMETRIC SWAPPING", "ACTIVATE SYMMETRIC SWAPPING", "INHIBIT ARABIC FORM SHAPING", "ACTIVATE ARABIC FORM SHAPING", "NATIONAL DIGIT SHAPES", "NOMINAL DIGIT SHAPES", "SUPERSCRIPT ZERO", "SUPERSCRIPT LATIN SMALL LETTER I", "SUPERSCRIPT FOUR", "SUPERSCRIPT FIVE", "SUPERSCRIPT SIX", "SUPERSCRIPT SEVEN", "SUPERSCRIPT EIGHT", "SUPERSCRIPT NINE", "SUPERSCRIPT PLUS SIGN", "SUPERSCRIPT MINUS", "SUPERSCRIPT EQUALS SIGN", "SUPERSCRIPT LEFT PARENTHESIS", "SUPERSCRIPT RIGHT PARENTHESIS", "SUPERSCRIPT LATIN SMALL LETTER N", "SUBSCRIPT ZERO", "SUBSCRIPT ONE", "SUBSCRIPT TWO", "SUBSCRIPT THREE", "SUBSCRIPT FOUR", "SUBSCRIPT FIVE", "SUBSCRIPT SIX", "SUBSCRIPT SEVEN", "SUBSCRIPT EIGHT", "SUBSCRIPT NINE", "SUBSCRIPT PLUS SIGN", "SUBSCRIPT MINUS", "SUBSCRIPT EQUALS SIGN", "SUBSCRIPT LEFT PARENTHESIS", "SUBSCRIPT RIGHT PARENTHESIS", "LATIN SUBSCRIPT SMALL LETTER A", "LATIN SUBSCRIPT SMALL LETTER E", "LATIN SUBSCRIPT SMALL LETTER O", "LATIN SUBSCRIPT SMALL LETTER X", "LATIN SUBSCRIPT SMALL LETTER SCHWA", "LATIN SUBSCRIPT SMALL LETTER H", "LATIN SUBSCRIPT SMALL LETTER K", "LATIN SUBSCRIPT SMALL LETTER L", "LATIN SUBSCRIPT SMALL LETTER M", "LATIN SUBSCRIPT SMALL LETTER N", "LATIN SUBSCRIPT SMALL LETTER P", "LATIN SUBSCRIPT SMALL LETTER S", "LATIN SUBSCRIPT SMALL LETTER T", "EURO-CURRENCY SIGN", "COLON SIGN", "CRUZEIRO SIGN", "FRENCH FRANC SIGN", "LIRA SIGN", "MILL SIGN", "NAIRA SIGN", "PESETA SIGN", "RUPEE SIGN", "WON SIGN", "NEW SHEQEL SIGN", "DONG SIGN", "EURO SIGN", "KIP SIGN", "TUGRIK SIGN", "DRACHMA SIGN", "GERMAN PENNY SIGN", "PESO SIGN", "GUARANI SIGN", "AUSTRAL SIGN", "HRYVNIA SIGN", "CEDI SIGN", "LIVRE TOURNOIS SIGN", "SPESMILO SIGN", "TENGE SIGN", "INDIAN RUPEE SIGN", "TURKISH LIRA SIGN", "NORDIC MARK SIGN", "MANAT SIGN", "RUBLE SIGN", "LARI SIGN", "BITCOIN SIGN", "COMBINING LEFT HARPOON ABOVE", "COMBINING RIGHT HARPOON ABOVE", "COMBINING LONG VERTICAL LINE OVERLAY", "COMBINING SHORT VERTICAL LINE OVERLAY", "COMBINING ANTICLOCKWISE ARROW ABOVE", "COMBINING CLOCKWISE ARROW ABOVE", "COMBINING LEFT ARROW ABOVE", "COMBINING RIGHT ARROW ABOVE", "COMBINING RING OVERLAY", "COMBINING CLOCKWISE RING OVERLAY", "COMBINING ANTICLOCKWISE RING OVERLAY", "COMBINING THREE DOTS ABOVE", "COMBINING FOUR DOTS ABOVE", "COMBINING ENCLOSING CIRCLE", "COMBINING ENCLOSING SQUARE", "COMBINING ENCLOSING DIAMOND", "COMBINING ENCLOSING CIRCLE BACKSLASH", "COMBINING LEFT RIGHT ARROW ABOVE", "COMBINING ENCLOSING SCREEN", "COMBINING ENCLOSING KEYCAP", "COMBINING ENCLOSING UPWARD POINTING TRIANGLE", "COMBINING REVERSE SOLIDUS OVERLAY", "COMBINING DOUBLE VERTICAL STROKE OVERLAY", "COMBINING ANNUITY SYMBOL", "COMBINING TRIPLE UNDERDOT", "COMBINING WIDE BRIDGE ABOVE", "COMBINING LEFTWARDS ARROW OVERLAY", "COMBINING LONG DOUBLE SOLIDUS OVERLAY", "COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS", "COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS", "COMBINING LEFT ARROW BELOW", "COMBINING RIGHT ARROW BELOW", "COMBINING ASTERISK ABOVE", "ACCOUNT OF", "ADDRESSED TO THE SUBJECT", "DOUBLE-STRUCK CAPITAL C", "DEGREE CELSIUS", "CENTRE LINE SYMBOL", "CARE OF", "CADA UNA", "EULER CONSTANT", "SCRUPLE", "DEGREE FAHRENHEIT", "SCRIPT SMALL G", "SCRIPT CAPITAL H", "BLACK-LETTER CAPITAL H", "DOUBLE-STRUCK CAPITAL H", "PLANCK CONSTANT", "PLANCK CONSTANT OVER TWO PI", "SCRIPT CAPITAL I", "BLACK-LETTER CAPITAL I", "SCRIPT CAPITAL L", "SCRIPT SMALL L", "L B BAR SYMBOL", "DOUBLE-STRUCK CAPITAL N", "NUMERO SIGN", "SOUND RECORDING COPYRIGHT", "SCRIPT CAPITAL P", "DOUBLE-STRUCK CAPITAL P", "DOUBLE-STRUCK CAPITAL Q", "SCRIPT CAPITAL R", "BLACK-LETTER CAPITAL R", "DOUBLE-STRUCK CAPITAL R", "PRESCRIPTION TAKE", "RESPONSE", "SERVICE MARK", "TELEPHONE SIGN", "TRADE MARK SIGN", "VERSICLE", "DOUBLE-STRUCK CAPITAL Z", "OUNCE SIGN", "OHM SIGN", "INVERTED OHM SIGN", "BLACK-LETTER CAPITAL Z", "TURNED GREEK SMALL LETTER IOTA", "KELVIN SIGN", "ANGSTROM SIGN", "SCRIPT CAPITAL B", "BLACK-LETTER CAPITAL C", "ESTIMATED SYMBOL", "SCRIPT SMALL E", "SCRIPT CAPITAL E", "SCRIPT CAPITAL F", "TURNED CAPITAL F", "SCRIPT CAPITAL M", "SCRIPT SMALL O", "ALEF SYMBOL", "BET SYMBOL", "GIMEL SYMBOL", "DALET SYMBOL", "INFORMATION SOURCE", "ROTATED CAPITAL Q", "FACSIMILE SIGN", "DOUBLE-STRUCK SMALL PI", "DOUBLE-STRUCK SMALL GAMMA", "DOUBLE-STRUCK CAPITAL GAMMA", "DOUBLE-STRUCK CAPITAL PI", "DOUBLE-STRUCK N-ARY SUMMATION", "TURNED SANS-SERIF CAPITAL G", "TURNED SANS-SERIF CAPITAL L", "REVERSED SANS-SERIF CAPITAL L", "TURNED SANS-SERIF CAPITAL Y", "DOUBLE-STRUCK ITALIC CAPITAL D", "DOUBLE-STRUCK ITALIC SMALL D", "DOUBLE-STRUCK ITALIC SMALL E", "DOUBLE-STRUCK ITALIC SMALL I", "DOUBLE-STRUCK ITALIC SMALL J", "PROPERTY LINE", "TURNED AMPERSAND", "PER SIGN", "AKTIESELSKAB", "TURNED SMALL F", "SYMBOL FOR SAMARITAN SOURCE", "VULGAR FRACTION ONE SEVENTH", "VULGAR FRACTION ONE NINTH", "VULGAR FRACTION ONE TENTH", "VULGAR FRACTION ONE THIRD", "VULGAR FRACTION TWO THIRDS", "VULGAR FRACTION ONE FIFTH", "VULGAR FRACTION TWO FIFTHS", "VULGAR FRACTION THREE FIFTHS", "VULGAR FRACTION FOUR FIFTHS", "VULGAR FRACTION ONE SIXTH", "VULGAR FRACTION FIVE SIXTHS", "VULGAR FRACTION ONE EIGHTH", "VULGAR FRACTION THREE EIGHTHS", "VULGAR FRACTION FIVE EIGHTHS", "VULGAR FRACTION SEVEN EIGHTHS", "FRACTION NUMERATOR ONE", "ROMAN NUMERAL ONE", "ROMAN NUMERAL TWO", "ROMAN NUMERAL THREE", "ROMAN NUMERAL FOUR", "ROMAN NUMERAL FIVE", "ROMAN NUMERAL SIX", "ROMAN NUMERAL SEVEN", "ROMAN NUMERAL EIGHT", "ROMAN NUMERAL NINE", "ROMAN NUMERAL TEN", "ROMAN NUMERAL ELEVEN", "ROMAN NUMERAL TWELVE", "ROMAN NUMERAL FIFTY", "ROMAN NUMERAL ONE HUNDRED", "ROMAN NUMERAL FIVE HUNDRED", "ROMAN NUMERAL ONE THOUSAND", "SMALL ROMAN NUMERAL ONE", "SMALL ROMAN NUMERAL TWO", "SMALL ROMAN NUMERAL THREE", "SMALL ROMAN NUMERAL FOUR", "SMALL ROMAN NUMERAL FIVE", "SMALL ROMAN NUMERAL SIX", "SMALL ROMAN NUMERAL SEVEN", "SMALL ROMAN NUMERAL EIGHT", "SMALL ROMAN NUMERAL NINE", "SMALL ROMAN NUMERAL TEN", "SMALL ROMAN NUMERAL ELEVEN", "SMALL ROMAN NUMERAL TWELVE", "SMALL ROMAN NUMERAL FIFTY", "SMALL ROMAN NUMERAL ONE HUNDRED", "SMALL ROMAN NUMERAL FIVE HUNDRED", "SMALL ROMAN NUMERAL ONE THOUSAND", "ROMAN NUMERAL ONE THOUSAND C D", "ROMAN NUMERAL FIVE THOUSAND", "ROMAN NUMERAL TEN THOUSAND", "ROMAN NUMERAL REVERSED ONE HUNDRED", "LATIN SMALL LETTER REVERSED C", "ROMAN NUMERAL SIX LATE FORM", "ROMAN NUMERAL FIFTY EARLY FORM", "ROMAN NUMERAL FIFTY THOUSAND", "ROMAN NUMERAL ONE HUNDRED THOUSAND", "VULGAR FRACTION ZERO THIRDS", "TURNED DIGIT TWO", "TURNED DIGIT THREE", "LEFTWARDS ARROW", "UPWARDS ARROW", "RIGHTWARDS ARROW", "DOWNWARDS ARROW", "LEFT RIGHT ARROW", "UP DOWN ARROW", "NORTH WEST ARROW", "NORTH EAST ARROW", "SOUTH EAST ARROW", "SOUTH WEST ARROW", "LEFTWARDS ARROW WITH STROKE", "RIGHTWARDS ARROW WITH STROKE", "LEFTWARDS WAVE ARROW", "RIGHTWARDS WAVE ARROW", "LEFTWARDS TWO HEADED ARROW", "UPWARDS TWO HEADED ARROW", "RIGHTWARDS TWO HEADED ARROW", "DOWNWARDS TWO HEADED ARROW", "LEFTWARDS ARROW WITH TAIL", "RIGHTWARDS ARROW WITH TAIL", "LEFTWARDS ARROW FROM BAR", "UPWARDS ARROW FROM BAR", "RIGHTWARDS ARROW FROM BAR", "DOWNWARDS ARROW FROM BAR", "UP DOWN ARROW WITH BASE", "LEFTWARDS ARROW WITH HOOK", "RIGHTWARDS ARROW WITH HOOK", "LEFTWARDS ARROW WITH LOOP", "RIGHTWARDS ARROW WITH LOOP", "LEFT RIGHT WAVE ARROW", "LEFT RIGHT ARROW WITH STROKE", "DOWNWARDS ZIGZAG ARROW", "UPWARDS ARROW WITH TIP LEFTWARDS", "UPWARDS ARROW WITH TIP RIGHTWARDS", "DOWNWARDS ARROW WITH TIP LEFTWARDS", "DOWNWARDS ARROW WITH TIP RIGHTWARDS", "RIGHTWARDS ARROW WITH CORNER DOWNWARDS", "DOWNWARDS ARROW WITH CORNER LEFTWARDS", "ANTICLOCKWISE TOP SEMICIRCLE ARROW", "CLOCKWISE TOP SEMICIRCLE ARROW", "NORTH WEST ARROW TO LONG BAR", "LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR", "ANTICLOCKWISE OPEN CIRCLE ARROW", "CLOCKWISE OPEN CIRCLE ARROW", "LEFTWARDS HARPOON WITH BARB UPWARDS", "LEFTWARDS HARPOON WITH BARB DOWNWARDS", "UPWARDS HARPOON WITH BARB RIGHTWARDS", "UPWARDS HARPOON WITH BARB LEFTWARDS", "RIGHTWARDS HARPOON WITH BARB UPWARDS", "RIGHTWARDS HARPOON WITH BARB DOWNWARDS", "DOWNWARDS HARPOON WITH BARB RIGHTWARDS", "DOWNWARDS HARPOON WITH BARB LEFTWARDS", "RIGHTWARDS ARROW OVER LEFTWARDS ARROW", "UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW", "LEFTWARDS ARROW OVER RIGHTWARDS ARROW", "LEFTWARDS PAIRED ARROWS", "UPWARDS PAIRED ARROWS", "RIGHTWARDS PAIRED ARROWS", "DOWNWARDS PAIRED ARROWS", "LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON", "RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON", "LEFTWARDS DOUBLE ARROW WITH STROKE", "LEFT RIGHT DOUBLE ARROW WITH STROKE", "RIGHTWARDS DOUBLE ARROW WITH STROKE", "LEFTWARDS DOUBLE ARROW", "UPWARDS DOUBLE ARROW", "RIGHTWARDS DOUBLE ARROW", "DOWNWARDS DOUBLE ARROW", "LEFT RIGHT DOUBLE ARROW", "UP DOWN DOUBLE ARROW", "NORTH WEST DOUBLE ARROW", "NORTH EAST DOUBLE ARROW", "SOUTH EAST DOUBLE ARROW", "SOUTH WEST DOUBLE ARROW", "LEFTWARDS TRIPLE ARROW", "RIGHTWARDS TRIPLE ARROW", "LEFTWARDS SQUIGGLE ARROW", "RIGHTWARDS SQUIGGLE ARROW", "UPWARDS ARROW WITH DOUBLE STROKE", "DOWNWARDS ARROW WITH DOUBLE STROKE", "LEFTWARDS DASHED ARROW", "UPWARDS DASHED ARROW", "RIGHTWARDS DASHED ARROW", "DOWNWARDS DASHED ARROW", "LEFTWARDS ARROW TO BAR", "RIGHTWARDS ARROW TO BAR", "LEFTWARDS WHITE ARROW", "UPWARDS WHITE ARROW", "RIGHTWARDS WHITE ARROW", "DOWNWARDS WHITE ARROW", "UPWARDS WHITE ARROW FROM BAR", "UPWARDS WHITE ARROW ON PEDESTAL", "UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR", "UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR", "UPWARDS WHITE DOUBLE ARROW", "UPWARDS WHITE DOUBLE ARROW ON PEDESTAL", "RIGHTWARDS WHITE ARROW FROM WALL", "NORTH WEST ARROW TO CORNER", "SOUTH EAST ARROW TO CORNER", "UP DOWN WHITE ARROW", "RIGHT ARROW WITH SMALL CIRCLE", "DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW", "THREE RIGHTWARDS ARROWS", "LEFTWARDS ARROW WITH VERTICAL STROKE", "RIGHTWARDS ARROW WITH VERTICAL STROKE", "LEFT RIGHT ARROW WITH VERTICAL STROKE", "LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE", "RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE", "LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE", "LEFTWARDS OPEN-HEADED ARROW", "RIGHTWARDS OPEN-HEADED ARROW", "LEFT RIGHT OPEN-HEADED ARROW", "FOR ALL", "COMPLEMENT", "PARTIAL DIFFERENTIAL", "THERE EXISTS", "THERE DOES NOT EXIST", "EMPTY SET", "INCREMENT", "NABLA", "ELEMENT OF", "NOT AN ELEMENT OF", "SMALL ELEMENT OF", "CONTAINS AS MEMBER", "DOES NOT CONTAIN AS MEMBER", "SMALL CONTAINS AS MEMBER", "END OF PROOF", "N-ARY PRODUCT", "N-ARY COPRODUCT", "N-ARY SUMMATION", "MINUS SIGN", "MINUS-OR-PLUS SIGN", "DOT PLUS", "DIVISION SLASH", "SET MINUS", "ASTERISK OPERATOR", "RING OPERATOR", "BULLET OPERATOR", "SQUARE ROOT", "CUBE ROOT", "FOURTH ROOT", "PROPORTIONAL TO", "INFINITY", "RIGHT ANGLE", "ANGLE", "MEASURED ANGLE", "SPHERICAL ANGLE", "DIVIDES", "DOES NOT DIVIDE", "PARALLEL TO", "NOT PARALLEL TO", "LOGICAL AND", "LOGICAL OR", "INTERSECTION", "UNION", "INTEGRAL", "DOUBLE INTEGRAL", "TRIPLE INTEGRAL", "CONTOUR INTEGRAL", "SURFACE INTEGRAL", "VOLUME INTEGRAL", "CLOCKWISE INTEGRAL", "CLOCKWISE CONTOUR INTEGRAL", "ANTICLOCKWISE CONTOUR INTEGRAL", "THEREFORE", "BECAUSE", "RATIO", "PROPORTION", "DOT MINUS", "EXCESS", "GEOMETRIC PROPORTION", "HOMOTHETIC", "TILDE OPERATOR", "REVERSED TILDE", "INVERTED LAZY S", "SINE WAVE", "WREATH PRODUCT", "NOT TILDE", "MINUS TILDE", "ASYMPTOTICALLY EQUAL TO", "NOT ASYMPTOTICALLY EQUAL TO", "APPROXIMATELY EQUAL TO", "APPROXIMATELY BUT NOT ACTUALLY EQUAL TO", "NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO", "ALMOST EQUAL TO", "NOT ALMOST EQUAL TO", "ALMOST EQUAL OR EQUAL TO", "TRIPLE TILDE", "ALL EQUAL TO", "EQUIVALENT TO", "GEOMETRICALLY EQUIVALENT TO", "DIFFERENCE BETWEEN", "APPROACHES THE LIMIT", "GEOMETRICALLY EQUAL TO", "APPROXIMATELY EQUAL TO OR THE IMAGE OF", "IMAGE OF OR APPROXIMATELY EQUAL TO", "COLON EQUALS", "EQUALS COLON", "RING IN EQUAL TO", "RING EQUAL TO", "CORRESPONDS TO", "ESTIMATES", "EQUIANGULAR TO", "STAR EQUALS", "DELTA EQUAL TO", "EQUAL TO BY DEFINITION", "MEASURED BY", "QUESTIONED EQUAL TO", "NOT EQUAL TO", "IDENTICAL TO", "NOT IDENTICAL TO", "STRICTLY EQUIVALENT TO", "LESS-THAN OR EQUAL TO", "GREATER-THAN OR EQUAL TO", "LESS-THAN OVER EQUAL TO", "GREATER-THAN OVER EQUAL TO", "LESS-THAN BUT NOT EQUAL TO", "GREATER-THAN BUT NOT EQUAL TO", "MUCH LESS-THAN", "MUCH GREATER-THAN", "BETWEEN", "NOT EQUIVALENT TO", "NOT LESS-THAN", "NOT GREATER-THAN", "NEITHER LESS-THAN NOR EQUAL TO", "NEITHER GREATER-THAN NOR EQUAL TO", "LESS-THAN OR EQUIVALENT TO", "GREATER-THAN OR EQUIVALENT TO", "NEITHER LESS-THAN NOR EQUIVALENT TO", "NEITHER GREATER-THAN NOR EQUIVALENT TO", "LESS-THAN OR GREATER-THAN", "GREATER-THAN OR LESS-THAN", "NEITHER LESS-THAN NOR GREATER-THAN", "NEITHER GREATER-THAN NOR LESS-THAN", "PRECEDES", "SUCCEEDS", "PRECEDES OR EQUAL TO", "SUCCEEDS OR EQUAL TO", "PRECEDES OR EQUIVALENT TO", "SUCCEEDS OR EQUIVALENT TO", "DOES NOT PRECEDE", "DOES NOT SUCCEED", "SUBSET OF", "SUPERSET OF", "NOT A SUBSET OF", "NOT A SUPERSET OF", "SUBSET OF OR EQUAL TO", "SUPERSET OF OR EQUAL TO", "NEITHER A SUBSET OF NOR EQUAL TO", "NEITHER A SUPERSET OF NOR EQUAL TO", "SUBSET OF WITH NOT EQUAL TO", "SUPERSET OF WITH NOT EQUAL TO", "MULTISET", "MULTISET MULTIPLICATION", "MULTISET UNION", "SQUARE IMAGE OF", "SQUARE ORIGINAL OF", "SQUARE IMAGE OF OR EQUAL TO", "SQUARE ORIGINAL OF OR EQUAL TO", "SQUARE CAP", "SQUARE CUP", "CIRCLED PLUS", "CIRCLED MINUS", "CIRCLED TIMES", "CIRCLED DIVISION SLASH", "CIRCLED DOT OPERATOR", "CIRCLED RING OPERATOR", "CIRCLED ASTERISK OPERATOR", "CIRCLED EQUALS", "CIRCLED DASH", "SQUARED PLUS", "SQUARED MINUS", "SQUARED TIMES", "SQUARED DOT OPERATOR", "RIGHT TACK", "LEFT TACK", "DOWN TACK", "UP TACK", "ASSERTION", "MODELS", "TRUE", "FORCES", "TRIPLE VERTICAL BAR RIGHT TURNSTILE", "DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", "DOES NOT PROVE", "NOT TRUE", "DOES NOT FORCE", "NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE", "PRECEDES UNDER RELATION", "SUCCEEDS UNDER RELATION", "NORMAL SUBGROUP OF", "CONTAINS AS NORMAL SUBGROUP", "NORMAL SUBGROUP OF OR EQUAL TO", "CONTAINS AS NORMAL SUBGROUP OR EQUAL TO", "ORIGINAL OF", "IMAGE OF", "MULTIMAP", "HERMITIAN CONJUGATE MATRIX", "INTERCALATE", "XOR", "NAND", "NOR", "RIGHT ANGLE WITH ARC", "RIGHT TRIANGLE", "N-ARY LOGICAL AND", "N-ARY LOGICAL OR", "N-ARY INTERSECTION", "N-ARY UNION", "DIAMOND OPERATOR", "DOT OPERATOR", "STAR OPERATOR", "DIVISION TIMES", "BOWTIE", "LEFT NORMAL FACTOR SEMIDIRECT PRODUCT", "RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT", "LEFT SEMIDIRECT PRODUCT", "RIGHT SEMIDIRECT PRODUCT", "REVERSED TILDE EQUALS", "CURLY LOGICAL OR", "CURLY LOGICAL AND", "DOUBLE SUBSET", "DOUBLE SUPERSET", "DOUBLE INTERSECTION", "DOUBLE UNION", "PITCHFORK", "EQUAL AND PARALLEL TO", "LESS-THAN WITH DOT", "GREATER-THAN WITH DOT", "VERY MUCH LESS-THAN", "VERY MUCH GREATER-THAN", "LESS-THAN EQUAL TO OR GREATER-THAN", "GREATER-THAN EQUAL TO OR LESS-THAN", "EQUAL TO OR LESS-THAN", "EQUAL TO OR GREATER-THAN", "EQUAL TO OR PRECEDES", "EQUAL TO OR SUCCEEDS", "DOES NOT PRECEDE OR EQUAL", "DOES NOT SUCCEED OR EQUAL", "NOT SQUARE IMAGE OF OR EQUAL TO", "NOT SQUARE ORIGINAL OF OR EQUAL TO", "SQUARE IMAGE OF OR NOT EQUAL TO", "SQUARE ORIGINAL OF OR NOT EQUAL TO", "LESS-THAN BUT NOT EQUIVALENT TO", "GREATER-THAN BUT NOT EQUIVALENT TO", "PRECEDES BUT NOT EQUIVALENT TO", "SUCCEEDS BUT NOT EQUIVALENT TO", "NOT NORMAL SUBGROUP OF", "DOES NOT CONTAIN AS NORMAL SUBGROUP", "NOT NORMAL SUBGROUP OF OR EQUAL TO", "DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL", "VERTICAL ELLIPSIS", "MIDLINE HORIZONTAL ELLIPSIS", "UP RIGHT DIAGONAL ELLIPSIS", "DOWN RIGHT DIAGONAL ELLIPSIS", "ELEMENT OF WITH LONG HORIZONTAL STROKE", "ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", "SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", "ELEMENT OF WITH DOT ABOVE", "ELEMENT OF WITH OVERBAR", "SMALL ELEMENT OF WITH OVERBAR", "ELEMENT OF WITH UNDERBAR", "ELEMENT OF WITH TWO HORIZONTAL STROKES", "CONTAINS WITH LONG HORIZONTAL STROKE", "CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", "SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE", "CONTAINS WITH OVERBAR", "SMALL CONTAINS WITH OVERBAR", "Z NOTATION BAG MEMBERSHIP", "DIAMETER SIGN", "ELECTRIC ARROW", "HOUSE", "UP ARROWHEAD", "DOWN ARROWHEAD", "PROJECTIVE", "PERSPECTIVE", "WAVY LINE", "LEFT CEILING", "RIGHT CEILING", "LEFT FLOOR", "RIGHT FLOOR", "BOTTOM RIGHT CROP", "BOTTOM LEFT CROP", "TOP RIGHT CROP", "TOP LEFT CROP", "REVERSED NOT SIGN", "SQUARE LOZENGE", "ARC", "SEGMENT", "SECTOR", "TELEPHONE RECORDER", "POSITION INDICATOR", "VIEWDATA SQUARE", "PLACE OF INTEREST SIGN", "TURNED NOT SIGN", "WATCH", "HOURGLASS", "TOP LEFT CORNER", "TOP RIGHT CORNER", "BOTTOM LEFT CORNER", "BOTTOM RIGHT CORNER", "TOP HALF INTEGRAL", "BOTTOM HALF INTEGRAL", "FROWN", "SMILE", "UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS", "OPTION KEY", "ERASE TO THE RIGHT", "X IN A RECTANGLE BOX", "KEYBOARD", "LEFT-POINTING ANGLE BRACKET", "RIGHT-POINTING ANGLE BRACKET", "ERASE TO THE LEFT", "BENZENE RING", "CYLINDRICITY", "ALL AROUND-PROFILE", "SYMMETRY", "TOTAL RUNOUT", "DIMENSION ORIGIN", "CONICAL TAPER", "SLOPE", "COUNTERBORE", "COUNTERSINK", "APL FUNCTIONAL SYMBOL I-BEAM", "APL FUNCTIONAL SYMBOL SQUISH QUAD", "APL FUNCTIONAL SYMBOL QUAD EQUAL", "APL FUNCTIONAL SYMBOL QUAD DIVIDE", "APL FUNCTIONAL SYMBOL QUAD DIAMOND", "APL FUNCTIONAL SYMBOL QUAD JOT", "APL FUNCTIONAL SYMBOL QUAD CIRCLE", "APL FUNCTIONAL SYMBOL CIRCLE STILE", "APL FUNCTIONAL SYMBOL CIRCLE JOT", "APL FUNCTIONAL SYMBOL SLASH BAR", "APL FUNCTIONAL SYMBOL BACKSLASH BAR", "APL FUNCTIONAL SYMBOL QUAD SLASH", "APL FUNCTIONAL SYMBOL QUAD BACKSLASH", "APL FUNCTIONAL SYMBOL QUAD LESS-THAN", "APL FUNCTIONAL SYMBOL QUAD GREATER-THAN", "APL FUNCTIONAL SYMBOL LEFTWARDS VANE", "APL FUNCTIONAL SYMBOL RIGHTWARDS VANE", "APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW", "APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW", "APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH", "APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR", "APL FUNCTIONAL SYMBOL DELTA STILE", "APL FUNCTIONAL SYMBOL QUAD DOWN CARET", "APL FUNCTIONAL SYMBOL QUAD DELTA", "APL FUNCTIONAL SYMBOL DOWN TACK JOT", "APL FUNCTIONAL SYMBOL UPWARDS VANE", "APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW", "APL FUNCTIONAL SYMBOL UP TACK OVERBAR", "APL FUNCTIONAL SYMBOL DEL STILE", "APL FUNCTIONAL SYMBOL QUAD UP CARET", "APL FUNCTIONAL SYMBOL QUAD DEL", "APL FUNCTIONAL SYMBOL UP TACK JOT", "APL FUNCTIONAL SYMBOL DOWNWARDS VANE", "APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW", "APL FUNCTIONAL SYMBOL QUOTE UNDERBAR", "APL FUNCTIONAL SYMBOL DELTA UNDERBAR", "APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR", "APL FUNCTIONAL SYMBOL JOT UNDERBAR", "APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR", "APL FUNCTIONAL SYMBOL UP SHOE JOT", "APL FUNCTIONAL SYMBOL QUOTE QUAD", "APL FUNCTIONAL SYMBOL CIRCLE STAR", "APL FUNCTIONAL SYMBOL QUAD COLON", "APL FUNCTIONAL SYMBOL UP TACK DIAERESIS", "APL FUNCTIONAL SYMBOL DEL DIAERESIS", "APL FUNCTIONAL SYMBOL STAR DIAERESIS", "APL FUNCTIONAL SYMBOL JOT DIAERESIS", "APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS", "APL FUNCTIONAL SYMBOL DOWN SHOE STILE", "APL FUNCTIONAL SYMBOL LEFT SHOE STILE", "APL FUNCTIONAL SYMBOL TILDE DIAERESIS", "APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS", "APL FUNCTIONAL SYMBOL COMMA BAR", "APL FUNCTIONAL SYMBOL DEL TILDE", "APL FUNCTIONAL SYMBOL ZILDE", "APL FUNCTIONAL SYMBOL STILE TILDE", "APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR", "APL FUNCTIONAL SYMBOL QUAD NOT EQUAL", "APL FUNCTIONAL SYMBOL QUAD QUESTION", "APL FUNCTIONAL SYMBOL DOWN CARET TILDE", "APL FUNCTIONAL SYMBOL UP CARET TILDE", "APL FUNCTIONAL SYMBOL IOTA", "APL FUNCTIONAL SYMBOL RHO", "APL FUNCTIONAL SYMBOL OMEGA", "APL FUNCTIONAL SYMBOL ALPHA UNDERBAR", "APL FUNCTIONAL SYMBOL EPSILON UNDERBAR", "APL FUNCTIONAL SYMBOL IOTA UNDERBAR", "APL FUNCTIONAL SYMBOL OMEGA UNDERBAR", "APL FUNCTIONAL SYMBOL ALPHA", "NOT CHECK MARK", "RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW", "SHOULDERED OPEN BOX", "BELL SYMBOL", "VERTICAL LINE WITH MIDDLE DOT", "INSERTION SYMBOL", "CONTINUOUS UNDERLINE SYMBOL", "DISCONTINUOUS UNDERLINE SYMBOL", "EMPHASIS SYMBOL", "COMPOSITION SYMBOL", "WHITE SQUARE WITH CENTRE VERTICAL LINE", "ENTER SYMBOL", "ALTERNATIVE KEY SYMBOL", "HELM SYMBOL", "CIRCLED HORIZONTAL BAR WITH NOTCH", "CIRCLED TRIANGLE DOWN", "BROKEN CIRCLE WITH NORTHWEST ARROW", "UNDO SYMBOL", "MONOSTABLE SYMBOL", "HYSTERESIS SYMBOL", "OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL", "OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL", "PASSIVE-PULL-DOWN-OUTPUT SYMBOL", "PASSIVE-PULL-UP-OUTPUT SYMBOL", "DIRECT CURRENT SYMBOL FORM TWO", "SOFTWARE-FUNCTION SYMBOL", "APL FUNCTIONAL SYMBOL QUAD", "DECIMAL SEPARATOR KEY SYMBOL", "PREVIOUS PAGE", "NEXT PAGE", "PRINT SCREEN SYMBOL", "CLEAR SCREEN SYMBOL", "LEFT PARENTHESIS UPPER HOOK", "LEFT PARENTHESIS EXTENSION", "LEFT PARENTHESIS LOWER HOOK", "RIGHT PARENTHESIS UPPER HOOK", "RIGHT PARENTHESIS EXTENSION", "RIGHT PARENTHESIS LOWER HOOK", "LEFT SQUARE BRACKET UPPER CORNER", "LEFT SQUARE BRACKET EXTENSION", "LEFT SQUARE BRACKET LOWER CORNER", "RIGHT SQUARE BRACKET UPPER CORNER", "RIGHT SQUARE BRACKET EXTENSION", "RIGHT SQUARE BRACKET LOWER CORNER", "LEFT CURLY BRACKET UPPER HOOK", "LEFT CURLY BRACKET MIDDLE PIECE", "LEFT CURLY BRACKET LOWER HOOK", "CURLY BRACKET EXTENSION", "RIGHT CURLY BRACKET UPPER HOOK", "RIGHT CURLY BRACKET MIDDLE PIECE", "RIGHT CURLY BRACKET LOWER HOOK", "INTEGRAL EXTENSION", "HORIZONTAL LINE EXTENSION", "UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION", "UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION", "SUMMATION TOP", "SUMMATION BOTTOM", "TOP SQUARE BRACKET", "BOTTOM SQUARE BRACKET", "BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET", "RADICAL SYMBOL BOTTOM", "LEFT VERTICAL BOX LINE", "RIGHT VERTICAL BOX LINE", "HORIZONTAL SCAN LINE-1", "HORIZONTAL SCAN LINE-3", "HORIZONTAL SCAN LINE-7", "HORIZONTAL SCAN LINE-9", "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT", "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT", "DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE", "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE", "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE", "DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE", "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE", "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE", "DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE", "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE", "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE", "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL", "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL", "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT", "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT", "SQUARE FOOT", "RETURN SYMBOL", "EJECT SYMBOL", "VERTICAL LINE EXTENSION", "METRICAL BREVE", "METRICAL LONG OVER SHORT", "METRICAL SHORT OVER LONG", "METRICAL LONG OVER TWO SHORTS", "METRICAL TWO SHORTS OVER LONG", "METRICAL TWO SHORTS JOINED", "METRICAL TRISEME", "METRICAL TETRASEME", "METRICAL PENTASEME", "EARTH GROUND", "FUSE", "TOP PARENTHESIS", "BOTTOM PARENTHESIS", "TOP CURLY BRACKET", "BOTTOM CURLY BRACKET", "TOP TORTOISE SHELL BRACKET", "BOTTOM TORTOISE SHELL BRACKET", "WHITE TRAPEZIUM", "BENZENE RING WITH CIRCLE", "STRAIGHTNESS", "FLATNESS", "AC CURRENT", "ELECTRICAL INTERSECTION", "DECIMAL EXPONENT SYMBOL", "BLACK RIGHT-POINTING DOUBLE TRIANGLE", "BLACK LEFT-POINTING DOUBLE TRIANGLE", "BLACK UP-POINTING DOUBLE TRIANGLE", "BLACK DOWN-POINTING DOUBLE TRIANGLE", "BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR", "BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR", "BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR", "ALARM CLOCK", "STOPWATCH", "TIMER CLOCK", "HOURGLASS WITH FLOWING SAND", "BLACK MEDIUM LEFT-POINTING TRIANGLE", "BLACK MEDIUM RIGHT-POINTING TRIANGLE", "BLACK MEDIUM UP-POINTING TRIANGLE", "BLACK MEDIUM DOWN-POINTING TRIANGLE", "DOUBLE VERTICAL BAR", "BLACK SQUARE FOR STOP", "BLACK CIRCLE FOR RECORD", "POWER SYMBOL", "POWER ON-OFF SYMBOL", "POWER ON SYMBOL", "POWER SLEEP SYMBOL", "OBSERVER EYE SYMBOL", "SYMBOL FOR NULL", "SYMBOL FOR START OF HEADING", "SYMBOL FOR START OF TEXT", "SYMBOL FOR END OF TEXT", "SYMBOL FOR END OF TRANSMISSION", "SYMBOL FOR ENQUIRY", "SYMBOL FOR ACKNOWLEDGE", "SYMBOL FOR BELL", "SYMBOL FOR BACKSPACE", "SYMBOL FOR HORIZONTAL TABULATION", "SYMBOL FOR LINE FEED", "SYMBOL FOR VERTICAL TABULATION", "SYMBOL FOR FORM FEED", "SYMBOL FOR CARRIAGE RETURN", "SYMBOL FOR SHIFT OUT", "SYMBOL FOR SHIFT IN", "SYMBOL FOR DATA LINK ESCAPE", "SYMBOL FOR DEVICE CONTROL ONE", "SYMBOL FOR DEVICE CONTROL TWO", "SYMBOL FOR DEVICE CONTROL THREE", "SYMBOL FOR DEVICE CONTROL FOUR", "SYMBOL FOR NEGATIVE ACKNOWLEDGE", "SYMBOL FOR SYNCHRONOUS IDLE", "SYMBOL FOR END OF TRANSMISSION BLOCK", "SYMBOL FOR CANCEL", "SYMBOL FOR END OF MEDIUM", "SYMBOL FOR SUBSTITUTE", "SYMBOL FOR ESCAPE", "SYMBOL FOR FILE SEPARATOR", "SYMBOL FOR GROUP SEPARATOR", "SYMBOL FOR RECORD SEPARATOR", "SYMBOL FOR UNIT SEPARATOR", "SYMBOL FOR SPACE", "SYMBOL FOR DELETE", "BLANK SYMBOL", "OPEN BOX", "SYMBOL FOR NEWLINE", "SYMBOL FOR DELETE FORM TWO", "SYMBOL FOR SUBSTITUTE FORM TWO", "OCR HOOK", "OCR CHAIR", "OCR FORK", "OCR INVERTED FORK", "OCR BELT BUCKLE", "OCR BOW TIE", "OCR BRANCH BANK IDENTIFICATION", "OCR AMOUNT OF CHECK", "OCR DASH", "OCR CUSTOMER ACCOUNT NUMBER", "OCR DOUBLE BACKSLASH", "CIRCLED DIGIT ONE", "CIRCLED DIGIT TWO", "CIRCLED DIGIT THREE", "CIRCLED DIGIT FOUR", "CIRCLED DIGIT FIVE", "CIRCLED DIGIT SIX", "CIRCLED DIGIT SEVEN", "CIRCLED DIGIT EIGHT", "CIRCLED DIGIT NINE", "CIRCLED NUMBER TEN", "CIRCLED NUMBER ELEVEN", "CIRCLED NUMBER TWELVE", "CIRCLED NUMBER THIRTEEN", "CIRCLED NUMBER FOURTEEN", "CIRCLED NUMBER FIFTEEN", "CIRCLED NUMBER SIXTEEN", "CIRCLED NUMBER SEVENTEEN", "CIRCLED NUMBER EIGHTEEN", "CIRCLED NUMBER NINETEEN", "CIRCLED NUMBER TWENTY", "PARENTHESIZED DIGIT ONE", "PARENTHESIZED DIGIT TWO", "PARENTHESIZED DIGIT THREE", "PARENTHESIZED DIGIT FOUR", "PARENTHESIZED DIGIT FIVE", "PARENTHESIZED DIGIT SIX", "PARENTHESIZED DIGIT SEVEN", "PARENTHESIZED DIGIT EIGHT", "PARENTHESIZED DIGIT NINE", "PARENTHESIZED NUMBER TEN", "PARENTHESIZED NUMBER ELEVEN", "PARENTHESIZED NUMBER TWELVE", "PARENTHESIZED NUMBER THIRTEEN", "PARENTHESIZED NUMBER FOURTEEN", "PARENTHESIZED NUMBER FIFTEEN", "PARENTHESIZED NUMBER SIXTEEN", "PARENTHESIZED NUMBER SEVENTEEN", "PARENTHESIZED NUMBER EIGHTEEN", "PARENTHESIZED NUMBER NINETEEN", "PARENTHESIZED NUMBER TWENTY", "DIGIT ONE FULL STOP", "DIGIT TWO FULL STOP", "DIGIT THREE FULL STOP", "DIGIT FOUR FULL STOP", "DIGIT FIVE FULL STOP", "DIGIT SIX FULL STOP", "DIGIT SEVEN FULL STOP", "DIGIT EIGHT FULL STOP", "DIGIT NINE FULL STOP", "NUMBER TEN FULL STOP", "NUMBER ELEVEN FULL STOP", "NUMBER TWELVE FULL STOP", "NUMBER THIRTEEN FULL STOP", "NUMBER FOURTEEN FULL STOP", "NUMBER FIFTEEN FULL STOP", "NUMBER SIXTEEN FULL STOP", "NUMBER SEVENTEEN FULL STOP", "NUMBER EIGHTEEN FULL STOP", "NUMBER NINETEEN FULL STOP", "NUMBER TWENTY FULL STOP", "PARENTHESIZED LATIN SMALL LETTER A", "PARENTHESIZED LATIN SMALL LETTER B", "PARENTHESIZED LATIN SMALL LETTER C", "PARENTHESIZED LATIN SMALL LETTER D", "PARENTHESIZED LATIN SMALL LETTER E", "PARENTHESIZED LATIN SMALL LETTER F", "PARENTHESIZED LATIN SMALL LETTER G", "PARENTHESIZED LATIN SMALL LETTER H", "PARENTHESIZED LATIN SMALL LETTER I", "PARENTHESIZED LATIN SMALL LETTER J", "PARENTHESIZED LATIN SMALL LETTER K", "PARENTHESIZED LATIN SMALL LETTER L", "PARENTHESIZED LATIN SMALL LETTER M", "PARENTHESIZED LATIN SMALL LETTER N", "PARENTHESIZED LATIN SMALL LETTER O", "PARENTHESIZED LATIN SMALL LETTER P", "PARENTHESIZED LATIN SMALL LETTER Q", "PARENTHESIZED LATIN SMALL LETTER R", "PARENTHESIZED LATIN SMALL LETTER S", "PARENTHESIZED LATIN SMALL LETTER T", "PARENTHESIZED LATIN SMALL LETTER U", "PARENTHESIZED LATIN SMALL LETTER V", "PARENTHESIZED LATIN SMALL LETTER W", "PARENTHESIZED LATIN SMALL LETTER X", "PARENTHESIZED LATIN SMALL LETTER Y", "PARENTHESIZED LATIN SMALL LETTER Z", "CIRCLED LATIN CAPITAL LETTER A", "CIRCLED LATIN CAPITAL LETTER B", "CIRCLED LATIN CAPITAL LETTER C", "CIRCLED LATIN CAPITAL LETTER D", "CIRCLED LATIN CAPITAL LETTER E", "CIRCLED LATIN CAPITAL LETTER F", "CIRCLED LATIN CAPITAL LETTER G", "CIRCLED LATIN CAPITAL LETTER H", "CIRCLED LATIN CAPITAL LETTER I", "CIRCLED LATIN CAPITAL LETTER J", "CIRCLED LATIN CAPITAL LETTER K", "CIRCLED LATIN CAPITAL LETTER L", "CIRCLED LATIN CAPITAL LETTER M", "CIRCLED LATIN CAPITAL LETTER N", "CIRCLED LATIN CAPITAL LETTER O", "CIRCLED LATIN CAPITAL LETTER P", "CIRCLED LATIN CAPITAL LETTER Q", "CIRCLED LATIN CAPITAL LETTER R", "CIRCLED LATIN CAPITAL LETTER S", "CIRCLED LATIN CAPITAL LETTER T", "CIRCLED LATIN CAPITAL LETTER U", "CIRCLED LATIN CAPITAL LETTER V", "CIRCLED LATIN CAPITAL LETTER W", "CIRCLED LATIN CAPITAL LETTER X", "CIRCLED LATIN CAPITAL LETTER Y", "CIRCLED LATIN CAPITAL LETTER Z", "CIRCLED LATIN SMALL LETTER A", "CIRCLED LATIN SMALL LETTER B", "CIRCLED LATIN SMALL LETTER C", "CIRCLED LATIN SMALL LETTER D", "CIRCLED LATIN SMALL LETTER E", "CIRCLED LATIN SMALL LETTER F", "CIRCLED LATIN SMALL LETTER G", "CIRCLED LATIN SMALL LETTER H", "CIRCLED LATIN SMALL LETTER I", "CIRCLED LATIN SMALL LETTER J", "CIRCLED LATIN SMALL LETTER K", "CIRCLED LATIN SMALL LETTER L", "CIRCLED LATIN SMALL LETTER M", "CIRCLED LATIN SMALL LETTER N", "CIRCLED LATIN SMALL LETTER O", "CIRCLED LATIN SMALL LETTER P", "CIRCLED LATIN SMALL LETTER Q", "CIRCLED LATIN SMALL LETTER R", "CIRCLED LATIN SMALL LETTER S", "CIRCLED LATIN SMALL LETTER T", "CIRCLED LATIN SMALL LETTER U", "CIRCLED LATIN SMALL LETTER V", "CIRCLED LATIN SMALL LETTER W", "CIRCLED LATIN SMALL LETTER X", "CIRCLED LATIN SMALL LETTER Y", "CIRCLED LATIN SMALL LETTER Z", "CIRCLED DIGIT ZERO", "NEGATIVE CIRCLED NUMBER ELEVEN", "NEGATIVE CIRCLED NUMBER TWELVE", "NEGATIVE CIRCLED NUMBER THIRTEEN", "NEGATIVE CIRCLED NUMBER FOURTEEN", "NEGATIVE CIRCLED NUMBER FIFTEEN", "NEGATIVE CIRCLED NUMBER SIXTEEN", "NEGATIVE CIRCLED NUMBER SEVENTEEN", "NEGATIVE CIRCLED NUMBER EIGHTEEN", "NEGATIVE CIRCLED NUMBER NINETEEN", "NEGATIVE CIRCLED NUMBER TWENTY", "DOUBLE CIRCLED DIGIT ONE", "DOUBLE CIRCLED DIGIT TWO", "DOUBLE CIRCLED DIGIT THREE", "DOUBLE CIRCLED DIGIT FOUR", "DOUBLE CIRCLED DIGIT FIVE", "DOUBLE CIRCLED DIGIT SIX", "DOUBLE CIRCLED DIGIT SEVEN", "DOUBLE CIRCLED DIGIT EIGHT", "DOUBLE CIRCLED DIGIT NINE", "DOUBLE CIRCLED NUMBER TEN", "NEGATIVE CIRCLED DIGIT ZERO", "BOX DRAWINGS LIGHT HORIZONTAL", "BOX DRAWINGS HEAVY HORIZONTAL", "BOX DRAWINGS LIGHT VERTICAL", "BOX DRAWINGS HEAVY VERTICAL", "BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL", "BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL", "BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL", "BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL", "BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL", "BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL", "BOX DRAWINGS LIGHT DOWN AND RIGHT", "BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY", "BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT", "BOX DRAWINGS HEAVY DOWN AND RIGHT", "BOX DRAWINGS LIGHT DOWN AND LEFT", "BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY", "BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT", "BOX DRAWINGS HEAVY DOWN AND LEFT", "BOX DRAWINGS LIGHT UP AND RIGHT", "BOX DRAWINGS UP LIGHT AND RIGHT HEAVY", "BOX DRAWINGS UP HEAVY AND RIGHT LIGHT", "BOX DRAWINGS HEAVY UP AND RIGHT", "BOX DRAWINGS LIGHT UP AND LEFT", "BOX DRAWINGS UP LIGHT AND LEFT HEAVY", "BOX DRAWINGS UP HEAVY AND LEFT LIGHT", "BOX DRAWINGS HEAVY UP AND LEFT", "BOX DRAWINGS LIGHT VERTICAL AND RIGHT", "BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY", "BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT", "BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT", "BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY", "BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND RIGHT", "BOX DRAWINGS LIGHT VERTICAL AND LEFT", "BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY", "BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT", "BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY", "BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND LEFT", "BOX DRAWINGS LIGHT DOWN AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY", "BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY", "BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY", "BOX DRAWINGS HEAVY DOWN AND HORIZONTAL", "BOX DRAWINGS LIGHT UP AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY", "BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY", "BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY", "BOX DRAWINGS HEAVY UP AND HORIZONTAL", "BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT", "BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY", "BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT", "BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT", "BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY", "BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY", "BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY", "BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL", "BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL", "BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL", "BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL", "BOX DRAWINGS DOUBLE HORIZONTAL", "BOX DRAWINGS DOUBLE VERTICAL", "BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE DOWN AND RIGHT", "BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE DOWN AND LEFT", "BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE UP AND RIGHT", "BOX DRAWINGS UP SINGLE AND LEFT DOUBLE", "BOX DRAWINGS UP DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE UP AND LEFT", "BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE VERTICAL AND RIGHT", "BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE", "BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE VERTICAL AND LEFT", "BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE", "BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL", "BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE", "BOX DRAWINGS DOUBLE UP AND HORIZONTAL", "BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE", "BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL", "BOX DRAWINGS LIGHT ARC DOWN AND RIGHT", "BOX DRAWINGS LIGHT ARC DOWN AND LEFT", "BOX DRAWINGS LIGHT ARC UP AND LEFT", "BOX DRAWINGS LIGHT ARC UP AND RIGHT", "BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT", "BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT", "BOX DRAWINGS LIGHT DIAGONAL CROSS", "BOX DRAWINGS LIGHT LEFT", "BOX DRAWINGS LIGHT UP", "BOX DRAWINGS LIGHT RIGHT", "BOX DRAWINGS LIGHT DOWN", "BOX DRAWINGS HEAVY LEFT", "BOX DRAWINGS HEAVY UP", "BOX DRAWINGS HEAVY RIGHT", "BOX DRAWINGS HEAVY DOWN", "BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT", "BOX DRAWINGS LIGHT UP AND HEAVY DOWN", "BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT", "BOX DRAWINGS HEAVY UP AND LIGHT DOWN", "UPPER HALF BLOCK", "LOWER ONE EIGHTH BLOCK", "LOWER ONE QUARTER BLOCK", "LOWER THREE EIGHTHS BLOCK", "LOWER HALF BLOCK", "LOWER FIVE EIGHTHS BLOCK", "LOWER THREE QUARTERS BLOCK", "LOWER SEVEN EIGHTHS BLOCK", "FULL BLOCK", "LEFT SEVEN EIGHTHS BLOCK", "LEFT THREE QUARTERS BLOCK", "LEFT FIVE EIGHTHS BLOCK", "LEFT HALF BLOCK", "LEFT THREE EIGHTHS BLOCK", "LEFT ONE QUARTER BLOCK", "LEFT ONE EIGHTH BLOCK", "RIGHT HALF BLOCK", "LIGHT SHADE", "MEDIUM SHADE", "DARK SHADE", "UPPER ONE EIGHTH BLOCK", "RIGHT ONE EIGHTH BLOCK", "QUADRANT LOWER LEFT", "QUADRANT LOWER RIGHT", "QUADRANT UPPER LEFT", "QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT", "QUADRANT UPPER LEFT AND LOWER RIGHT", "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT", "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT", "QUADRANT UPPER RIGHT", "QUADRANT UPPER RIGHT AND LOWER LEFT", "QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT", "BLACK SQUARE", "WHITE SQUARE", "WHITE SQUARE WITH ROUNDED CORNERS", "WHITE SQUARE CONTAINING BLACK SMALL SQUARE", "SQUARE WITH HORIZONTAL FILL", "SQUARE WITH VERTICAL FILL", "SQUARE WITH ORTHOGONAL CROSSHATCH FILL", "SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL", "SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL", "SQUARE WITH DIAGONAL CROSSHATCH FILL", "BLACK SMALL SQUARE", "WHITE SMALL SQUARE", "BLACK RECTANGLE", "WHITE RECTANGLE", "BLACK VERTICAL RECTANGLE", "WHITE VERTICAL RECTANGLE", "BLACK PARALLELOGRAM", "WHITE PARALLELOGRAM", "BLACK UP-POINTING TRIANGLE", "WHITE UP-POINTING TRIANGLE", "BLACK UP-POINTING SMALL TRIANGLE", "WHITE UP-POINTING SMALL TRIANGLE", "BLACK RIGHT-POINTING TRIANGLE", "WHITE RIGHT-POINTING TRIANGLE", "BLACK RIGHT-POINTING SMALL TRIANGLE", "WHITE RIGHT-POINTING SMALL TRIANGLE", "BLACK RIGHT-POINTING POINTER", "WHITE RIGHT-POINTING POINTER", "BLACK DOWN-POINTING TRIANGLE", "WHITE DOWN-POINTING TRIANGLE", "BLACK DOWN-POINTING SMALL TRIANGLE", "WHITE DOWN-POINTING SMALL TRIANGLE", "BLACK LEFT-POINTING TRIANGLE", "WHITE LEFT-POINTING TRIANGLE", "BLACK LEFT-POINTING SMALL TRIANGLE", "WHITE LEFT-POINTING SMALL TRIANGLE", "BLACK LEFT-POINTING POINTER", "WHITE LEFT-POINTING POINTER", "BLACK DIAMOND", "WHITE DIAMOND", "WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND", "FISHEYE", "LOZENGE", "WHITE CIRCLE", "DOTTED CIRCLE", "CIRCLE WITH VERTICAL FILL", "BULLSEYE", "BLACK CIRCLE", "CIRCLE WITH LEFT HALF BLACK", "CIRCLE WITH RIGHT HALF BLACK", "CIRCLE WITH LOWER HALF BLACK", "CIRCLE WITH UPPER HALF BLACK", "CIRCLE WITH UPPER RIGHT QUADRANT BLACK", "CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK", "LEFT HALF BLACK CIRCLE", "RIGHT HALF BLACK CIRCLE", "INVERSE BULLET", "INVERSE WHITE CIRCLE", "UPPER HALF INVERSE WHITE CIRCLE", "LOWER HALF INVERSE WHITE CIRCLE", "UPPER LEFT QUADRANT CIRCULAR ARC", "UPPER RIGHT QUADRANT CIRCULAR ARC", "LOWER RIGHT QUADRANT CIRCULAR ARC", "LOWER LEFT QUADRANT CIRCULAR ARC", "UPPER HALF CIRCLE", "LOWER HALF CIRCLE", "BLACK LOWER RIGHT TRIANGLE", "BLACK LOWER LEFT TRIANGLE", "BLACK UPPER LEFT TRIANGLE", "BLACK UPPER RIGHT TRIANGLE", "WHITE BULLET", "SQUARE WITH LEFT HALF BLACK", "SQUARE WITH RIGHT HALF BLACK", "SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK", "SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK", "WHITE SQUARE WITH VERTICAL BISECTING LINE", "WHITE UP-POINTING TRIANGLE WITH DOT", "UP-POINTING TRIANGLE WITH LEFT HALF BLACK", "UP-POINTING TRIANGLE WITH RIGHT HALF BLACK", "LARGE CIRCLE", "WHITE SQUARE WITH UPPER LEFT QUADRANT", "WHITE SQUARE WITH LOWER LEFT QUADRANT", "WHITE SQUARE WITH LOWER RIGHT QUADRANT", "WHITE SQUARE WITH UPPER RIGHT QUADRANT", "WHITE CIRCLE WITH UPPER LEFT QUADRANT", "WHITE CIRCLE WITH LOWER LEFT QUADRANT", "WHITE CIRCLE WITH LOWER RIGHT QUADRANT", "WHITE CIRCLE WITH UPPER RIGHT QUADRANT", "UPPER LEFT TRIANGLE", "UPPER RIGHT TRIANGLE", "LOWER LEFT TRIANGLE", "WHITE MEDIUM SQUARE", "BLACK MEDIUM SQUARE", "WHITE MEDIUM SMALL SQUARE", "BLACK MEDIUM SMALL SQUARE", "LOWER RIGHT TRIANGLE", "BLACK SUN WITH RAYS", "CLOUD", "UMBRELLA", "SNOWMAN", "COMET", "BLACK STAR", "WHITE STAR", "LIGHTNING", "THUNDERSTORM", "SUN", "ASCENDING NODE", "DESCENDING NODE", "CONJUNCTION", "OPPOSITION", "BLACK TELEPHONE", "WHITE TELEPHONE", "BALLOT BOX", "BALLOT BOX WITH CHECK", "BALLOT BOX WITH X", "SALTIRE", "UMBRELLA WITH RAIN DROPS", "HOT BEVERAGE", "WHITE SHOGI PIECE", "BLACK SHOGI PIECE", "SHAMROCK", "REVERSED ROTATED FLORAL HEART BULLET", "BLACK LEFT POINTING INDEX", "BLACK RIGHT POINTING INDEX", "WHITE LEFT POINTING INDEX", "WHITE UP POINTING INDEX", "WHITE RIGHT POINTING INDEX", "WHITE DOWN POINTING INDEX", "SKULL AND CROSSBONES", "CAUTION SIGN", "RADIOACTIVE SIGN", "BIOHAZARD SIGN", "CADUCEUS", "ANKH", "ORTHODOX CROSS", "CHI RHO", "CROSS OF LORRAINE", "CROSS OF JERUSALEM", "STAR AND CRESCENT", "FARSI SYMBOL", "ADI SHAKTI", "HAMMER AND SICKLE", "PEACE SYMBOL", "YIN YANG", "TRIGRAM FOR HEAVEN", "TRIGRAM FOR LAKE", "TRIGRAM FOR FIRE", "TRIGRAM FOR THUNDER", "TRIGRAM FOR WIND", "TRIGRAM FOR WATER", "TRIGRAM FOR MOUNTAIN", "TRIGRAM FOR EARTH", "WHEEL OF DHARMA", "WHITE FROWNING FACE", "WHITE SMILING FACE", "BLACK SMILING FACE", "WHITE SUN WITH RAYS", "FIRST QUARTER MOON", "LAST QUARTER MOON", "MERCURY", "FEMALE SIGN", "EARTH", "MALE SIGN", "JUPITER", "SATURN", "URANUS", "NEPTUNE", "PLUTO", "ARIES", "TAURUS", "GEMINI", "CANCER", "LEO", "VIRGO", "LIBRA", "SCORPIUS", "SAGITTARIUS", "CAPRICORN", "AQUARIUS", "PISCES", "WHITE CHESS KING", "WHITE CHESS QUEEN", "WHITE CHESS ROOK", "WHITE CHESS BISHOP", "WHITE CHESS KNIGHT", "WHITE CHESS PAWN", "BLACK CHESS KING", "BLACK CHESS QUEEN", "BLACK CHESS ROOK", "BLACK CHESS BISHOP", "BLACK CHESS KNIGHT", "BLACK CHESS PAWN", "BLACK SPADE SUIT", "WHITE HEART SUIT", "WHITE DIAMOND SUIT", "BLACK CLUB SUIT", "WHITE SPADE SUIT", "BLACK HEART SUIT", "BLACK DIAMOND SUIT", "WHITE CLUB SUIT", "HOT SPRINGS", "QUARTER NOTE", "EIGHTH NOTE", "BEAMED EIGHTH NOTES", "BEAMED SIXTEENTH NOTES", "MUSIC FLAT SIGN", "MUSIC NATURAL SIGN", "MUSIC SHARP SIGN", "WEST SYRIAC CROSS", "EAST SYRIAC CROSS", "UNIVERSAL RECYCLING SYMBOL", "RECYCLING SYMBOL FOR TYPE-1 PLASTICS", "RECYCLING SYMBOL FOR TYPE-2 PLASTICS", "RECYCLING SYMBOL FOR TYPE-3 PLASTICS", "RECYCLING SYMBOL FOR TYPE-4 PLASTICS", "RECYCLING SYMBOL FOR TYPE-5 PLASTICS", "RECYCLING SYMBOL FOR TYPE-6 PLASTICS", "RECYCLING SYMBOL FOR TYPE-7 PLASTICS", "RECYCLING SYMBOL FOR GENERIC MATERIALS", "BLACK UNIVERSAL RECYCLING SYMBOL", "RECYCLED PAPER SYMBOL", "PARTIALLY-RECYCLED PAPER SYMBOL", "PERMANENT PAPER SIGN", "WHEELCHAIR SYMBOL", "DIE FACE-1", "DIE FACE-2", "DIE FACE-3", "DIE FACE-4", "DIE FACE-5", "DIE FACE-6", "WHITE CIRCLE WITH DOT RIGHT", "WHITE CIRCLE WITH TWO DOTS", "BLACK CIRCLE WITH WHITE DOT RIGHT", "BLACK CIRCLE WITH TWO WHITE DOTS", "MONOGRAM FOR YANG", "MONOGRAM FOR YIN", "DIGRAM FOR GREATER YANG", "DIGRAM FOR LESSER YIN", "DIGRAM FOR LESSER YANG", "DIGRAM FOR GREATER YIN", "WHITE FLAG", "BLACK FLAG", "HAMMER AND PICK", "ANCHOR", "CROSSED SWORDS", "STAFF OF AESCULAPIUS", "SCALES", "ALEMBIC", "FLOWER", "GEAR", "STAFF OF HERMES", "ATOM SYMBOL", "FLEUR-DE-LIS", "OUTLINED WHITE STAR", "THREE LINES CONVERGING RIGHT", "THREE LINES CONVERGING LEFT", "WARNING SIGN", "HIGH VOLTAGE SIGN", "DOUBLED FEMALE SIGN", "DOUBLED MALE SIGN", "INTERLOCKED FEMALE AND MALE SIGN", "MALE AND FEMALE SIGN", "MALE WITH STROKE SIGN", "MALE WITH STROKE AND MALE AND FEMALE SIGN", "VERTICAL MALE WITH STROKE SIGN", "HORIZONTAL MALE WITH STROKE SIGN", "MEDIUM WHITE CIRCLE", "MEDIUM BLACK CIRCLE", "MEDIUM SMALL WHITE CIRCLE", "MARRIAGE SYMBOL", "DIVORCE SYMBOL", "UNMARRIED PARTNERSHIP SYMBOL", "COFFIN", "FUNERAL URN", "NEUTER", "CERES", "PALLAS", "JUNO", "VESTA", "CHIRON", "BLACK MOON LILITH", "SEXTILE", "SEMISEXTILE", "QUINCUNX", "SESQUIQUADRATE", "SOCCER BALL", "BASEBALL", "SQUARED KEY", "WHITE DRAUGHTS MAN", "WHITE DRAUGHTS KING", "BLACK DRAUGHTS MAN", "BLACK DRAUGHTS KING", "SNOWMAN WITHOUT SNOW", "SUN BEHIND CLOUD", "RAIN", "BLACK SNOWMAN", "THUNDER CLOUD AND RAIN", "TURNED WHITE SHOGI PIECE", "TURNED BLACK SHOGI PIECE", "WHITE DIAMOND IN SQUARE", "CROSSING LANES", "DISABLED CAR", "OPHIUCHUS", "PICK", "CAR SLIDING", "HELMET WITH WHITE CROSS", "CIRCLED CROSSING LANES", "CHAINS", "NO ENTRY", "ALTERNATE ONE-WAY LEFT WAY TRAFFIC", "BLACK TWO-WAY LEFT WAY TRAFFIC", "WHITE TWO-WAY LEFT WAY TRAFFIC", "BLACK LEFT LANE MERGE", "WHITE LEFT LANE MERGE", "DRIVE SLOW SIGN", "HEAVY WHITE DOWN-POINTING TRIANGLE", "LEFT CLOSED ENTRY", "SQUARED SALTIRE", "FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE", "BLACK TRUCK", "RESTRICTED LEFT ENTRY-1", "RESTRICTED LEFT ENTRY-2", "ASTRONOMICAL SYMBOL FOR URANUS", "HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE", "PENTAGRAM", "RIGHT-HANDED INTERLACED PENTAGRAM", "LEFT-HANDED INTERLACED PENTAGRAM", "INVERTED PENTAGRAM", "BLACK CROSS ON SHIELD", "SHINTO SHRINE", "CHURCH", "CASTLE", "HISTORIC SITE", "GEAR WITHOUT HUB", "GEAR WITH HANDLES", "MAP SYMBOL FOR LIGHTHOUSE", "MOUNTAIN", "UMBRELLA ON GROUND", "FOUNTAIN", "FLAG IN HOLE", "FERRY", "SAILBOAT", "SQUARE FOUR CORNERS", "SKIER", "ICE SKATE", "PERSON WITH BALL", "TENT", "JAPANESE BANK SYMBOL", "HEADSTONE GRAVEYARD SYMBOL", "FUEL PUMP", "CUP ON BLACK SQUARE", "WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE", "BLACK SAFETY SCISSORS", "UPPER BLADE SCISSORS", "BLACK SCISSORS", "LOWER BLADE SCISSORS", "WHITE SCISSORS", "WHITE HEAVY CHECK MARK", "TELEPHONE LOCATION SIGN", "TAPE DRIVE", "AIRPLANE", "ENVELOPE", "RAISED FIST", "RAISED HAND", "VICTORY HAND", "WRITING HAND", "LOWER RIGHT PENCIL", "PENCIL", "UPPER RIGHT PENCIL", "WHITE NIB", "BLACK NIB", "CHECK MARK", "HEAVY CHECK MARK", "MULTIPLICATION X", "HEAVY MULTIPLICATION X", "BALLOT X", "HEAVY BALLOT X", "OUTLINED GREEK CROSS", "HEAVY GREEK CROSS", "OPEN CENTRE CROSS", "HEAVY OPEN CENTRE CROSS", "LATIN CROSS", "SHADOWED WHITE LATIN CROSS", "OUTLINED LATIN CROSS", "MALTESE CROSS", "STAR OF DAVID", "FOUR TEARDROP-SPOKED ASTERISK", "FOUR BALLOON-SPOKED ASTERISK", "HEAVY FOUR BALLOON-SPOKED ASTERISK", "FOUR CLUB-SPOKED ASTERISK", "BLACK FOUR POINTED STAR", "WHITE FOUR POINTED STAR", "SPARKLES", "STRESS OUTLINED WHITE STAR", "CIRCLED WHITE STAR", "OPEN CENTRE BLACK STAR", "BLACK CENTRE WHITE STAR", "OUTLINED BLACK STAR", "HEAVY OUTLINED BLACK STAR", "PINWHEEL STAR", "SHADOWED WHITE STAR", "HEAVY ASTERISK", "OPEN CENTRE ASTERISK", "EIGHT SPOKED ASTERISK", "EIGHT POINTED BLACK STAR", "EIGHT POINTED PINWHEEL STAR", "SIX POINTED BLACK STAR", "EIGHT POINTED RECTILINEAR BLACK STAR", "HEAVY EIGHT POINTED RECTILINEAR BLACK STAR", "TWELVE POINTED BLACK STAR", "SIXTEEN POINTED ASTERISK", "TEARDROP-SPOKED ASTERISK", "OPEN CENTRE TEARDROP-SPOKED ASTERISK", "HEAVY TEARDROP-SPOKED ASTERISK", "SIX PETALLED BLACK AND WHITE FLORETTE", "BLACK FLORETTE", "WHITE FLORETTE", "EIGHT PETALLED OUTLINED BLACK FLORETTE", "CIRCLED OPEN CENTRE EIGHT POINTED STAR", "HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK", "SNOWFLAKE", "TIGHT TRIFOLIATE SNOWFLAKE", "HEAVY CHEVRON SNOWFLAKE", "SPARKLE", "HEAVY SPARKLE", "BALLOON-SPOKED ASTERISK", "EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", "HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK", "CROSS MARK", "SHADOWED WHITE CIRCLE", "NEGATIVE SQUARED CROSS MARK", "LOWER RIGHT DROP-SHADOWED WHITE SQUARE", "UPPER RIGHT DROP-SHADOWED WHITE SQUARE", "LOWER RIGHT SHADOWED WHITE SQUARE", "UPPER RIGHT SHADOWED WHITE SQUARE", "BLACK QUESTION MARK ORNAMENT", "WHITE QUESTION MARK ORNAMENT", "WHITE EXCLAMATION MARK ORNAMENT", "BLACK DIAMOND MINUS WHITE X", "HEAVY EXCLAMATION MARK SYMBOL", "LIGHT VERTICAL BAR", "MEDIUM VERTICAL BAR", "HEAVY VERTICAL BAR", "HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT", "HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT", "HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT", "HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT", "HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT", "HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT", "CURVED STEM PARAGRAPH SIGN ORNAMENT", "HEAVY EXCLAMATION MARK ORNAMENT", "HEAVY HEART EXCLAMATION MARK ORNAMENT", "HEAVY BLACK HEART", "ROTATED HEAVY BLACK HEART BULLET", "FLORAL HEART", "ROTATED FLORAL HEART BULLET", "MEDIUM LEFT PARENTHESIS ORNAMENT", "MEDIUM RIGHT PARENTHESIS ORNAMENT", "MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT", "MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT", "MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT", "MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT", "HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT", "HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT", "HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT", "HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT", "LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT", "LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT", "MEDIUM LEFT CURLY BRACKET ORNAMENT", "MEDIUM RIGHT CURLY BRACKET ORNAMENT", "DINGBAT NEGATIVE CIRCLED DIGIT ONE", "DINGBAT NEGATIVE CIRCLED DIGIT TWO", "DINGBAT NEGATIVE CIRCLED DIGIT THREE", "DINGBAT NEGATIVE CIRCLED DIGIT FOUR", "DINGBAT NEGATIVE CIRCLED DIGIT FIVE", "DINGBAT NEGATIVE CIRCLED DIGIT SIX", "DINGBAT NEGATIVE CIRCLED DIGIT SEVEN", "DINGBAT NEGATIVE CIRCLED DIGIT EIGHT", "DINGBAT NEGATIVE CIRCLED DIGIT NINE", "DINGBAT NEGATIVE CIRCLED NUMBER TEN", "DINGBAT CIRCLED SANS-SERIF DIGIT ONE", "DINGBAT CIRCLED SANS-SERIF DIGIT TWO", "DINGBAT CIRCLED SANS-SERIF DIGIT THREE", "DINGBAT CIRCLED SANS-SERIF DIGIT FOUR", "DINGBAT CIRCLED SANS-SERIF DIGIT FIVE", "DINGBAT CIRCLED SANS-SERIF DIGIT SIX", "DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN", "DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT", "DINGBAT CIRCLED SANS-SERIF DIGIT NINE", "DINGBAT CIRCLED SANS-SERIF NUMBER TEN", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE", "DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN", "HEAVY WIDE-HEADED RIGHTWARDS ARROW", "HEAVY PLUS SIGN", "HEAVY MINUS SIGN", "HEAVY DIVISION SIGN", "HEAVY SOUTH EAST ARROW", "HEAVY RIGHTWARDS ARROW", "HEAVY NORTH EAST ARROW", "DRAFTING POINT RIGHTWARDS ARROW", "HEAVY ROUND-TIPPED RIGHTWARDS ARROW", "TRIANGLE-HEADED RIGHTWARDS ARROW", "HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW", "DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", "HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW", "BLACK RIGHTWARDS ARROW", "THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD", "THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD", "BLACK RIGHTWARDS ARROWHEAD", "HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW", "HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW", "SQUAT BLACK RIGHTWARDS ARROW", "HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW", "RIGHT-SHADED WHITE RIGHTWARDS ARROW", "LEFT-SHADED WHITE RIGHTWARDS ARROW", "BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW", "FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW", "HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", "HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", "NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", "CURLY LOOP", "NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW", "CIRCLED HEAVY WHITE RIGHTWARDS ARROW", "WHITE-FEATHERED RIGHTWARDS ARROW", "BLACK-FEATHERED SOUTH EAST ARROW", "BLACK-FEATHERED RIGHTWARDS ARROW", "BLACK-FEATHERED NORTH EAST ARROW", "HEAVY BLACK-FEATHERED SOUTH EAST ARROW", "HEAVY BLACK-FEATHERED RIGHTWARDS ARROW", "HEAVY BLACK-FEATHERED NORTH EAST ARROW", "TEARDROP-BARBED RIGHTWARDS ARROW", "HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW", "WEDGE-TAILED RIGHTWARDS ARROW", "HEAVY WEDGE-TAILED RIGHTWARDS ARROW", "OPEN-OUTLINED RIGHTWARDS ARROW", "DOUBLE CURLY LOOP", "THREE DIMENSIONAL ANGLE", "WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE", "PERPENDICULAR", "OPEN SUBSET", "OPEN SUPERSET", "LEFT S-SHAPED BAG DELIMITER", "RIGHT S-SHAPED BAG DELIMITER", "OR WITH DOT INSIDE", "REVERSE SOLIDUS PRECEDING SUBSET", "SUPERSET PRECEDING SOLIDUS", "VERTICAL BAR WITH HORIZONTAL STROKE", "MATHEMATICAL RISING DIAGONAL", "LONG DIVISION", "MATHEMATICAL FALLING DIAGONAL", "SQUARED LOGICAL AND", "SQUARED LOGICAL OR", "WHITE DIAMOND WITH CENTRED DOT", "AND WITH DOT", "ELEMENT OF OPENING UPWARDS", "LOWER RIGHT CORNER WITH DOT", "UPPER LEFT CORNER WITH DOT", "LEFT OUTER JOIN", "RIGHT OUTER JOIN", "FULL OUTER JOIN", "LARGE UP TACK", "LARGE DOWN TACK", "LEFT AND RIGHT DOUBLE TURNSTILE", "LEFT AND RIGHT TACK", "LEFT MULTIMAP", "LONG RIGHT TACK", "LONG LEFT TACK", "UP TACK WITH CIRCLE ABOVE", "LOZENGE DIVIDED BY HORIZONTAL RULE", "WHITE CONCAVE-SIDED DIAMOND", "WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK", "WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK", "WHITE SQUARE WITH LEFTWARDS TICK", "WHITE SQUARE WITH RIGHTWARDS TICK", "MATHEMATICAL LEFT WHITE SQUARE BRACKET", "MATHEMATICAL RIGHT WHITE SQUARE BRACKET", "MATHEMATICAL LEFT ANGLE BRACKET", "MATHEMATICAL RIGHT ANGLE BRACKET", "MATHEMATICAL LEFT DOUBLE ANGLE BRACKET", "MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET", "MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET", "MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET", "MATHEMATICAL LEFT FLATTENED PARENTHESIS", "MATHEMATICAL RIGHT FLATTENED PARENTHESIS", "UPWARDS QUADRUPLE ARROW", "DOWNWARDS QUADRUPLE ARROW", "ANTICLOCKWISE GAPPED CIRCLE ARROW", "CLOCKWISE GAPPED CIRCLE ARROW", "RIGHT ARROW WITH CIRCLED PLUS", "LONG LEFTWARDS ARROW", "LONG RIGHTWARDS ARROW", "LONG LEFT RIGHT ARROW", "LONG LEFTWARDS DOUBLE ARROW", "LONG RIGHTWARDS DOUBLE ARROW", "LONG LEFT RIGHT DOUBLE ARROW", "LONG LEFTWARDS ARROW FROM BAR", "LONG RIGHTWARDS ARROW FROM BAR", "LONG LEFTWARDS DOUBLE ARROW FROM BAR", "LONG RIGHTWARDS DOUBLE ARROW FROM BAR", "LONG RIGHTWARDS SQUIGGLE ARROW", "BRAILLE PATTERN BLANK", "BRAILLE PATTERN DOTS-1", "BRAILLE PATTERN DOTS-2", "BRAILLE PATTERN DOTS-12", "BRAILLE PATTERN DOTS-3", "BRAILLE PATTERN DOTS-13", "BRAILLE PATTERN DOTS-23", "BRAILLE PATTERN DOTS-123", "BRAILLE PATTERN DOTS-4", "BRAILLE PATTERN DOTS-14", "BRAILLE PATTERN DOTS-24", "BRAILLE PATTERN DOTS-124", "BRAILLE PATTERN DOTS-34", "BRAILLE PATTERN DOTS-134", "BRAILLE PATTERN DOTS-234", "BRAILLE PATTERN DOTS-1234", "BRAILLE PATTERN DOTS-5", "BRAILLE PATTERN DOTS-15", "BRAILLE PATTERN DOTS-25", "BRAILLE PATTERN DOTS-125", "BRAILLE PATTERN DOTS-35", "BRAILLE PATTERN DOTS-135", "BRAILLE PATTERN DOTS-235", "BRAILLE PATTERN DOTS-1235", "BRAILLE PATTERN DOTS-45", "BRAILLE PATTERN DOTS-145", "BRAILLE PATTERN DOTS-245", "BRAILLE PATTERN DOTS-1245", "BRAILLE PATTERN DOTS-345", "BRAILLE PATTERN DOTS-1345", "BRAILLE PATTERN DOTS-2345", "BRAILLE PATTERN DOTS-12345", "BRAILLE PATTERN DOTS-6", "BRAILLE PATTERN DOTS-16", "BRAILLE PATTERN DOTS-26", "BRAILLE PATTERN DOTS-126", "BRAILLE PATTERN DOTS-36", "BRAILLE PATTERN DOTS-136", "BRAILLE PATTERN DOTS-236", "BRAILLE PATTERN DOTS-1236", "BRAILLE PATTERN DOTS-46", "BRAILLE PATTERN DOTS-146", "BRAILLE PATTERN DOTS-246", "BRAILLE PATTERN DOTS-1246", "BRAILLE PATTERN DOTS-346", "BRAILLE PATTERN DOTS-1346", "BRAILLE PATTERN DOTS-2346", "BRAILLE PATTERN DOTS-12346", "BRAILLE PATTERN DOTS-56", "BRAILLE PATTERN DOTS-156", "BRAILLE PATTERN DOTS-256", "BRAILLE PATTERN DOTS-1256", "BRAILLE PATTERN DOTS-356", "BRAILLE PATTERN DOTS-1356", "BRAILLE PATTERN DOTS-2356", "BRAILLE PATTERN DOTS-12356", "BRAILLE PATTERN DOTS-456", "BRAILLE PATTERN DOTS-1456", "BRAILLE PATTERN DOTS-2456", "BRAILLE PATTERN DOTS-12456", "BRAILLE PATTERN DOTS-3456", "BRAILLE PATTERN DOTS-13456", "BRAILLE PATTERN DOTS-23456", "BRAILLE PATTERN DOTS-123456", "BRAILLE PATTERN DOTS-7", "BRAILLE PATTERN DOTS-17", "BRAILLE PATTERN DOTS-27", "BRAILLE PATTERN DOTS-127", "BRAILLE PATTERN DOTS-37", "BRAILLE PATTERN DOTS-137", "BRAILLE PATTERN DOTS-237", "BRAILLE PATTERN DOTS-1237", "BRAILLE PATTERN DOTS-47", "BRAILLE PATTERN DOTS-147", "BRAILLE PATTERN DOTS-247", "BRAILLE PATTERN DOTS-1247", "BRAILLE PATTERN DOTS-347", "BRAILLE PATTERN DOTS-1347", "BRAILLE PATTERN DOTS-2347", "BRAILLE PATTERN DOTS-12347", "BRAILLE PATTERN DOTS-57", "BRAILLE PATTERN DOTS-157", "BRAILLE PATTERN DOTS-257", "BRAILLE PATTERN DOTS-1257", "BRAILLE PATTERN DOTS-357", "BRAILLE PATTERN DOTS-1357", "BRAILLE PATTERN DOTS-2357", "BRAILLE PATTERN DOTS-12357", "BRAILLE PATTERN DOTS-457", "BRAILLE PATTERN DOTS-1457", "BRAILLE PATTERN DOTS-2457", "BRAILLE PATTERN DOTS-12457", "BRAILLE PATTERN DOTS-3457", "BRAILLE PATTERN DOTS-13457", "BRAILLE PATTERN DOTS-23457", "BRAILLE PATTERN DOTS-123457", "BRAILLE PATTERN DOTS-67", "BRAILLE PATTERN DOTS-167", "BRAILLE PATTERN DOTS-267", "BRAILLE PATTERN DOTS-1267", "BRAILLE PATTERN DOTS-367", "BRAILLE PATTERN DOTS-1367", "BRAILLE PATTERN DOTS-2367", "BRAILLE PATTERN DOTS-12367", "BRAILLE PATTERN DOTS-467", "BRAILLE PATTERN DOTS-1467", "BRAILLE PATTERN DOTS-2467", "BRAILLE PATTERN DOTS-12467", "BRAILLE PATTERN DOTS-3467", "BRAILLE PATTERN DOTS-13467", "BRAILLE PATTERN DOTS-23467", "BRAILLE PATTERN DOTS-123467", "BRAILLE PATTERN DOTS-567", "BRAILLE PATTERN DOTS-1567", "BRAILLE PATTERN DOTS-2567", "BRAILLE PATTERN DOTS-12567", "BRAILLE PATTERN DOTS-3567", "BRAILLE PATTERN DOTS-13567", "BRAILLE PATTERN DOTS-23567", "BRAILLE PATTERN DOTS-123567", "BRAILLE PATTERN DOTS-4567", "BRAILLE PATTERN DOTS-14567", "BRAILLE PATTERN DOTS-24567", "BRAILLE PATTERN DOTS-124567", "BRAILLE PATTERN DOTS-34567", "BRAILLE PATTERN DOTS-134567", "BRAILLE PATTERN DOTS-234567", "BRAILLE PATTERN DOTS-1234567", "BRAILLE PATTERN DOTS-8", "BRAILLE PATTERN DOTS-18", "BRAILLE PATTERN DOTS-28", "BRAILLE PATTERN DOTS-128", "BRAILLE PATTERN DOTS-38", "BRAILLE PATTERN DOTS-138", "BRAILLE PATTERN DOTS-238", "BRAILLE PATTERN DOTS-1238", "BRAILLE PATTERN DOTS-48", "BRAILLE PATTERN DOTS-148", "BRAILLE PATTERN DOTS-248", "BRAILLE PATTERN DOTS-1248", "BRAILLE PATTERN DOTS-348", "BRAILLE PATTERN DOTS-1348", "BRAILLE PATTERN DOTS-2348", "BRAILLE PATTERN DOTS-12348", "BRAILLE PATTERN DOTS-58", "BRAILLE PATTERN DOTS-158", "BRAILLE PATTERN DOTS-258", "BRAILLE PATTERN DOTS-1258", "BRAILLE PATTERN DOTS-358", "BRAILLE PATTERN DOTS-1358", "BRAILLE PATTERN DOTS-2358", "BRAILLE PATTERN DOTS-12358", "BRAILLE PATTERN DOTS-458", "BRAILLE PATTERN DOTS-1458", "BRAILLE PATTERN DOTS-2458", "BRAILLE PATTERN DOTS-12458", "BRAILLE PATTERN DOTS-3458", "BRAILLE PATTERN DOTS-13458", "BRAILLE PATTERN DOTS-23458", "BRAILLE PATTERN DOTS-123458", "BRAILLE PATTERN DOTS-68", "BRAILLE PATTERN DOTS-168", "BRAILLE PATTERN DOTS-268", "BRAILLE PATTERN DOTS-1268", "BRAILLE PATTERN DOTS-368", "BRAILLE PATTERN DOTS-1368", "BRAILLE PATTERN DOTS-2368", "BRAILLE PATTERN DOTS-12368", "BRAILLE PATTERN DOTS-468", "BRAILLE PATTERN DOTS-1468", "BRAILLE PATTERN DOTS-2468", "BRAILLE PATTERN DOTS-12468", "BRAILLE PATTERN DOTS-3468", "BRAILLE PATTERN DOTS-13468", "BRAILLE PATTERN DOTS-23468", "BRAILLE PATTERN DOTS-123468", "BRAILLE PATTERN DOTS-568", "BRAILLE PATTERN DOTS-1568", "BRAILLE PATTERN DOTS-2568", "BRAILLE PATTERN DOTS-12568", "BRAILLE PATTERN DOTS-3568", "BRAILLE PATTERN DOTS-13568", "BRAILLE PATTERN DOTS-23568", "BRAILLE PATTERN DOTS-123568", "BRAILLE PATTERN DOTS-4568", "BRAILLE PATTERN DOTS-14568", "BRAILLE PATTERN DOTS-24568", "BRAILLE PATTERN DOTS-124568", "BRAILLE PATTERN DOTS-34568", "BRAILLE PATTERN DOTS-134568", "BRAILLE PATTERN DOTS-234568", "BRAILLE PATTERN DOTS-1234568", "BRAILLE PATTERN DOTS-78", "BRAILLE PATTERN DOTS-178", "BRAILLE PATTERN DOTS-278", "BRAILLE PATTERN DOTS-1278", "BRAILLE PATTERN DOTS-378", "BRAILLE PATTERN DOTS-1378", "BRAILLE PATTERN DOTS-2378", "BRAILLE PATTERN DOTS-12378", "BRAILLE PATTERN DOTS-478", "BRAILLE PATTERN DOTS-1478", "BRAILLE PATTERN DOTS-2478", "BRAILLE PATTERN DOTS-12478", "BRAILLE PATTERN DOTS-3478", "BRAILLE PATTERN DOTS-13478", "BRAILLE PATTERN DOTS-23478", "BRAILLE PATTERN DOTS-123478", "BRAILLE PATTERN DOTS-578", "BRAILLE PATTERN DOTS-1578", "BRAILLE PATTERN DOTS-2578", "BRAILLE PATTERN DOTS-12578", "BRAILLE PATTERN DOTS-3578", "BRAILLE PATTERN DOTS-13578", "BRAILLE PATTERN DOTS-23578", "BRAILLE PATTERN DOTS-123578", "BRAILLE PATTERN DOTS-4578", "BRAILLE PATTERN DOTS-14578", "BRAILLE PATTERN DOTS-24578", "BRAILLE PATTERN DOTS-124578", "BRAILLE PATTERN DOTS-34578", "BRAILLE PATTERN DOTS-134578", "BRAILLE PATTERN DOTS-234578", "BRAILLE PATTERN DOTS-1234578", "BRAILLE PATTERN DOTS-678", "BRAILLE PATTERN DOTS-1678", "BRAILLE PATTERN DOTS-2678", "BRAILLE PATTERN DOTS-12678", "BRAILLE PATTERN DOTS-3678", "BRAILLE PATTERN DOTS-13678", "BRAILLE PATTERN DOTS-23678", "BRAILLE PATTERN DOTS-123678", "BRAILLE PATTERN DOTS-4678", "BRAILLE PATTERN DOTS-14678", "BRAILLE PATTERN DOTS-24678", "BRAILLE PATTERN DOTS-124678", "BRAILLE PATTERN DOTS-34678", "BRAILLE PATTERN DOTS-134678", "BRAILLE PATTERN DOTS-234678", "BRAILLE PATTERN DOTS-1234678", "BRAILLE PATTERN DOTS-5678", "BRAILLE PATTERN DOTS-15678", "BRAILLE PATTERN DOTS-25678", "BRAILLE PATTERN DOTS-125678", "BRAILLE PATTERN DOTS-35678", "BRAILLE PATTERN DOTS-135678", "BRAILLE PATTERN DOTS-235678", "BRAILLE PATTERN DOTS-1235678", "BRAILLE PATTERN DOTS-45678", "BRAILLE PATTERN DOTS-145678", "BRAILLE PATTERN DOTS-245678", "BRAILLE PATTERN DOTS-1245678", "BRAILLE PATTERN DOTS-345678", "BRAILLE PATTERN DOTS-1345678", "BRAILLE PATTERN DOTS-2345678", "BRAILLE PATTERN DOTS-12345678", "RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", "RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", "LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE", "RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE", "LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE", "RIGHTWARDS TWO-HEADED ARROW FROM BAR", "LEFTWARDS DOUBLE ARROW FROM BAR", "RIGHTWARDS DOUBLE ARROW FROM BAR", "DOWNWARDS ARROW WITH HORIZONTAL STROKE", "UPWARDS ARROW WITH HORIZONTAL STROKE", "UPWARDS TRIPLE ARROW", "DOWNWARDS TRIPLE ARROW", "LEFTWARDS DOUBLE DASH ARROW", "RIGHTWARDS DOUBLE DASH ARROW", "LEFTWARDS TRIPLE DASH ARROW", "RIGHTWARDS TRIPLE DASH ARROW", "RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW", "RIGHTWARDS ARROW WITH DOTTED STEM", "UPWARDS ARROW TO BAR", "DOWNWARDS ARROW TO BAR", "RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", "RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", "RIGHTWARDS TWO-HEADED ARROW WITH TAIL", "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", "LEFTWARDS ARROW-TAIL", "RIGHTWARDS ARROW-TAIL", "LEFTWARDS DOUBLE ARROW-TAIL", "RIGHTWARDS DOUBLE ARROW-TAIL", "LEFTWARDS ARROW TO BLACK DIAMOND", "RIGHTWARDS ARROW TO BLACK DIAMOND", "LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND", "RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND", "NORTH WEST AND SOUTH EAST ARROW", "NORTH EAST AND SOUTH WEST ARROW", "NORTH WEST ARROW WITH HOOK", "NORTH EAST ARROW WITH HOOK", "SOUTH EAST ARROW WITH HOOK", "SOUTH WEST ARROW WITH HOOK", "NORTH WEST ARROW AND NORTH EAST ARROW", "NORTH EAST ARROW AND SOUTH EAST ARROW", "SOUTH EAST ARROW AND SOUTH WEST ARROW", "SOUTH WEST ARROW AND NORTH WEST ARROW", "RISING DIAGONAL CROSSING FALLING DIAGONAL", "FALLING DIAGONAL CROSSING RISING DIAGONAL", "SOUTH EAST ARROW CROSSING NORTH EAST ARROW", "NORTH EAST ARROW CROSSING SOUTH EAST ARROW", "FALLING DIAGONAL CROSSING NORTH EAST ARROW", "RISING DIAGONAL CROSSING SOUTH EAST ARROW", "NORTH EAST ARROW CROSSING NORTH WEST ARROW", "NORTH WEST ARROW CROSSING NORTH EAST ARROW", "WAVE ARROW POINTING DIRECTLY RIGHT", "ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS", "ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS", "ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS", "ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS", "RIGHT-SIDE ARC CLOCKWISE ARROW", "LEFT-SIDE ARC ANTICLOCKWISE ARROW", "TOP ARC ANTICLOCKWISE ARROW", "BOTTOM ARC ANTICLOCKWISE ARROW", "TOP ARC CLOCKWISE ARROW WITH MINUS", "TOP ARC ANTICLOCKWISE ARROW WITH PLUS", "LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW", "LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW", "ANTICLOCKWISE CLOSED CIRCLE ARROW", "CLOCKWISE CLOSED CIRCLE ARROW", "RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW", "LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW", "SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW", "RIGHTWARDS ARROW WITH PLUS BELOW", "LEFTWARDS ARROW WITH PLUS BELOW", "RIGHTWARDS ARROW THROUGH X", "LEFT RIGHT ARROW THROUGH SMALL CIRCLE", "UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE", "LEFT BARB UP RIGHT BARB DOWN HARPOON", "LEFT BARB DOWN RIGHT BARB UP HARPOON", "UP BARB RIGHT DOWN BARB LEFT HARPOON", "UP BARB LEFT DOWN BARB RIGHT HARPOON", "LEFT BARB UP RIGHT BARB UP HARPOON", "UP BARB RIGHT DOWN BARB RIGHT HARPOON", "LEFT BARB DOWN RIGHT BARB DOWN HARPOON", "UP BARB LEFT DOWN BARB LEFT HARPOON", "LEFTWARDS HARPOON WITH BARB UP TO BAR", "RIGHTWARDS HARPOON WITH BARB UP TO BAR", "UPWARDS HARPOON WITH BARB RIGHT TO BAR", "DOWNWARDS HARPOON WITH BARB RIGHT TO BAR", "LEFTWARDS HARPOON WITH BARB DOWN TO BAR", "RIGHTWARDS HARPOON WITH BARB DOWN TO BAR", "UPWARDS HARPOON WITH BARB LEFT TO BAR", "DOWNWARDS HARPOON WITH BARB LEFT TO BAR", "LEFTWARDS HARPOON WITH BARB UP FROM BAR", "RIGHTWARDS HARPOON WITH BARB UP FROM BAR", "UPWARDS HARPOON WITH BARB RIGHT FROM BAR", "DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR", "LEFTWARDS HARPOON WITH BARB DOWN FROM BAR", "RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR", "UPWARDS HARPOON WITH BARB LEFT FROM BAR", "DOWNWARDS HARPOON WITH BARB LEFT FROM BAR", "LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN", "UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", "RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", "DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", "LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP", "LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN", "RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP", "RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN", "LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", "LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", "RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH", "RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH", "UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT", "DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT", "RIGHT DOUBLE ARROW WITH ROUNDED HEAD", "EQUALS SIGN ABOVE RIGHTWARDS ARROW", "TILDE OPERATOR ABOVE RIGHTWARDS ARROW", "LEFTWARDS ARROW ABOVE TILDE OPERATOR", "RIGHTWARDS ARROW ABOVE TILDE OPERATOR", "RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO", "LESS-THAN ABOVE LEFTWARDS ARROW", "LEFTWARDS ARROW THROUGH LESS-THAN", "GREATER-THAN ABOVE RIGHTWARDS ARROW", "SUBSET ABOVE RIGHTWARDS ARROW", "LEFTWARDS ARROW THROUGH SUBSET", "SUPERSET ABOVE LEFTWARDS ARROW", "LEFT FISH TAIL", "RIGHT FISH TAIL", "UP FISH TAIL", "DOWN FISH TAIL", "TRIPLE VERTICAL BAR DELIMITER", "Z NOTATION SPOT", "Z NOTATION TYPE COLON", "LEFT WHITE CURLY BRACKET", "RIGHT WHITE CURLY BRACKET", "LEFT WHITE PARENTHESIS", "RIGHT WHITE PARENTHESIS", "Z NOTATION LEFT IMAGE BRACKET", "Z NOTATION RIGHT IMAGE BRACKET", "Z NOTATION LEFT BINDING BRACKET", "Z NOTATION RIGHT BINDING BRACKET", "LEFT SQUARE BRACKET WITH UNDERBAR", "RIGHT SQUARE BRACKET WITH UNDERBAR", "LEFT SQUARE BRACKET WITH TICK IN TOP CORNER", "RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", "LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER", "RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER", "LEFT ANGLE BRACKET WITH DOT", "RIGHT ANGLE BRACKET WITH DOT", "LEFT ARC LESS-THAN BRACKET", "RIGHT ARC GREATER-THAN BRACKET", "DOUBLE LEFT ARC GREATER-THAN BRACKET", "DOUBLE RIGHT ARC LESS-THAN BRACKET", "LEFT BLACK TORTOISE SHELL BRACKET", "RIGHT BLACK TORTOISE SHELL BRACKET", "DOTTED FENCE", "VERTICAL ZIGZAG LINE", "MEASURED ANGLE OPENING LEFT", "RIGHT ANGLE VARIANT WITH SQUARE", "MEASURED RIGHT ANGLE WITH DOT", "ANGLE WITH S INSIDE", "ACUTE ANGLE", "SPHERICAL ANGLE OPENING LEFT", "SPHERICAL ANGLE OPENING UP", "TURNED ANGLE", "REVERSED ANGLE", "ANGLE WITH UNDERBAR", "REVERSED ANGLE WITH UNDERBAR", "OBLIQUE ANGLE OPENING UP", "OBLIQUE ANGLE OPENING DOWN", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN", "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN", "REVERSED EMPTY SET", "EMPTY SET WITH OVERBAR", "EMPTY SET WITH SMALL CIRCLE ABOVE", "EMPTY SET WITH RIGHT ARROW ABOVE", "EMPTY SET WITH LEFT ARROW ABOVE", "CIRCLE WITH HORIZONTAL BAR", "CIRCLED VERTICAL BAR", "CIRCLED PARALLEL", "CIRCLED REVERSE SOLIDUS", "CIRCLED PERPENDICULAR", "CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR", "CIRCLE WITH SUPERIMPOSED X", "CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN", "UP ARROW THROUGH CIRCLE", "CIRCLED WHITE BULLET", "CIRCLED BULLET", "CIRCLED LESS-THAN", "CIRCLED GREATER-THAN", "CIRCLE WITH SMALL CIRCLE TO THE RIGHT", "CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT", "SQUARED RISING DIAGONAL SLASH", "SQUARED FALLING DIAGONAL SLASH", "SQUARED ASTERISK", "SQUARED SMALL CIRCLE", "SQUARED SQUARE", "TWO JOINED SQUARES", "TRIANGLE WITH DOT ABOVE", "TRIANGLE WITH UNDERBAR", "S IN TRIANGLE", "TRIANGLE WITH SERIFS AT BOTTOM", "RIGHT TRIANGLE ABOVE LEFT TRIANGLE", "LEFT TRIANGLE BESIDE VERTICAL BAR", "VERTICAL BAR BESIDE RIGHT TRIANGLE", "BOWTIE WITH LEFT HALF BLACK", "BOWTIE WITH RIGHT HALF BLACK", "BLACK BOWTIE", "TIMES WITH LEFT HALF BLACK", "TIMES WITH RIGHT HALF BLACK", "WHITE HOURGLASS", "BLACK HOURGLASS", "LEFT WIGGLY FENCE", "RIGHT WIGGLY FENCE", "LEFT DOUBLE WIGGLY FENCE", "RIGHT DOUBLE WIGGLY FENCE", "INCOMPLETE INFINITY", "TIE OVER INFINITY", "INFINITY NEGATED WITH VERTICAL BAR", "DOUBLE-ENDED MULTIMAP", "SQUARE WITH CONTOURED OUTLINE", "INCREASES AS", "SHUFFLE PRODUCT", "EQUALS SIGN AND SLANTED PARALLEL", "EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE", "IDENTICAL TO AND SLANTED PARALLEL", "GLEICH STARK", "THERMODYNAMIC", "DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK", "DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK", "BLACK DIAMOND WITH DOWN ARROW", "BLACK LOZENGE", "WHITE CIRCLE WITH DOWN ARROW", "BLACK CIRCLE WITH DOWN ARROW", "ERROR-BARRED WHITE SQUARE", "ERROR-BARRED BLACK SQUARE", "ERROR-BARRED WHITE DIAMOND", "ERROR-BARRED BLACK DIAMOND", "ERROR-BARRED WHITE CIRCLE", "ERROR-BARRED BLACK CIRCLE", "RULE-DELAYED", "REVERSE SOLIDUS OPERATOR", "SOLIDUS WITH OVERBAR", "REVERSE SOLIDUS WITH HORIZONTAL STROKE", "BIG SOLIDUS", "BIG REVERSE SOLIDUS", "DOUBLE PLUS", "TRIPLE PLUS", "LEFT-POINTING CURVED ANGLE BRACKET", "RIGHT-POINTING CURVED ANGLE BRACKET", "TINY", "MINY", "N-ARY CIRCLED DOT OPERATOR", "N-ARY CIRCLED PLUS OPERATOR", "N-ARY CIRCLED TIMES OPERATOR", "N-ARY UNION OPERATOR WITH DOT", "N-ARY UNION OPERATOR WITH PLUS", "N-ARY SQUARE INTERSECTION OPERATOR", "N-ARY SQUARE UNION OPERATOR", "TWO LOGICAL AND OPERATOR", "TWO LOGICAL OR OPERATOR", "N-ARY TIMES OPERATOR", "MODULO TWO SUM", "SUMMATION WITH INTEGRAL", "QUADRUPLE INTEGRAL OPERATOR", "FINITE PART INTEGRAL", "INTEGRAL WITH DOUBLE STROKE", "INTEGRAL AVERAGE WITH SLASH", "CIRCULATION FUNCTION", "ANTICLOCKWISE INTEGRATION", "LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE", "LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE", "LINE INTEGRATION NOT INCLUDING THE POLE", "INTEGRAL AROUND A POINT OPERATOR", "QUATERNION INTEGRAL OPERATOR", "INTEGRAL WITH LEFTWARDS ARROW WITH HOOK", "INTEGRAL WITH TIMES SIGN", "INTEGRAL WITH INTERSECTION", "INTEGRAL WITH UNION", "INTEGRAL WITH OVERBAR", "INTEGRAL WITH UNDERBAR", "JOIN", "LARGE LEFT TRIANGLE OPERATOR", "Z NOTATION SCHEMA COMPOSITION", "Z NOTATION SCHEMA PIPING", "Z NOTATION SCHEMA PROJECTION", "PLUS SIGN WITH SMALL CIRCLE ABOVE", "PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE", "PLUS SIGN WITH TILDE ABOVE", "PLUS SIGN WITH DOT BELOW", "PLUS SIGN WITH TILDE BELOW", "PLUS SIGN WITH SUBSCRIPT TWO", "PLUS SIGN WITH BLACK TRIANGLE", "MINUS SIGN WITH COMMA ABOVE", "MINUS SIGN WITH DOT BELOW", "MINUS SIGN WITH FALLING DOTS", "MINUS SIGN WITH RISING DOTS", "PLUS SIGN IN LEFT HALF CIRCLE", "PLUS SIGN IN RIGHT HALF CIRCLE", "VECTOR OR CROSS PRODUCT", "MULTIPLICATION SIGN WITH DOT ABOVE", "MULTIPLICATION SIGN WITH UNDERBAR", "SEMIDIRECT PRODUCT WITH BOTTOM CLOSED", "SMASH PRODUCT", "MULTIPLICATION SIGN IN LEFT HALF CIRCLE", "MULTIPLICATION SIGN IN RIGHT HALF CIRCLE", "CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT", "MULTIPLICATION SIGN IN DOUBLE CIRCLE", "CIRCLED DIVISION SIGN", "PLUS SIGN IN TRIANGLE", "MINUS SIGN IN TRIANGLE", "MULTIPLICATION SIGN IN TRIANGLE", "INTERIOR PRODUCT", "RIGHTHAND INTERIOR PRODUCT", "Z NOTATION RELATIONAL COMPOSITION", "AMALGAMATION OR COPRODUCT", "INTERSECTION WITH DOT", "UNION WITH MINUS SIGN", "UNION WITH OVERBAR", "INTERSECTION WITH OVERBAR", "INTERSECTION WITH LOGICAL AND", "UNION WITH LOGICAL OR", "UNION ABOVE INTERSECTION", "INTERSECTION ABOVE UNION", "UNION ABOVE BAR ABOVE INTERSECTION", "INTERSECTION ABOVE BAR ABOVE UNION", "UNION BESIDE AND JOINED WITH UNION", "INTERSECTION BESIDE AND JOINED WITH INTERSECTION", "CLOSED UNION WITH SERIFS", "CLOSED INTERSECTION WITH SERIFS", "DOUBLE SQUARE INTERSECTION", "DOUBLE SQUARE UNION", "CLOSED UNION WITH SERIFS AND SMASH PRODUCT", "LOGICAL AND WITH DOT ABOVE", "LOGICAL OR WITH DOT ABOVE", "DOUBLE LOGICAL AND", "DOUBLE LOGICAL OR", "TWO INTERSECTING LOGICAL AND", "TWO INTERSECTING LOGICAL OR", "SLOPING LARGE OR", "SLOPING LARGE AND", "LOGICAL OR OVERLAPPING LOGICAL AND", "LOGICAL AND WITH MIDDLE STEM", "LOGICAL OR WITH MIDDLE STEM", "LOGICAL AND WITH HORIZONTAL DASH", "LOGICAL OR WITH HORIZONTAL DASH", "LOGICAL AND WITH DOUBLE OVERBAR", "LOGICAL AND WITH UNDERBAR", "LOGICAL AND WITH DOUBLE UNDERBAR", "SMALL VEE WITH UNDERBAR", "LOGICAL OR WITH DOUBLE OVERBAR", "LOGICAL OR WITH DOUBLE UNDERBAR", "Z NOTATION DOMAIN ANTIRESTRICTION", "Z NOTATION RANGE ANTIRESTRICTION", "EQUALS SIGN WITH DOT BELOW", "IDENTICAL WITH DOT ABOVE", "TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE", "TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE", "TILDE OPERATOR WITH DOT ABOVE", "TILDE OPERATOR WITH RISING DOTS", "SIMILAR MINUS SIMILAR", "CONGRUENT WITH DOT ABOVE", "EQUALS WITH ASTERISK", "ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT", "APPROXIMATELY EQUAL OR EQUAL TO", "EQUALS SIGN ABOVE PLUS SIGN", "PLUS SIGN ABOVE EQUALS SIGN", "EQUALS SIGN ABOVE TILDE OPERATOR", "DOUBLE COLON EQUAL", "TWO CONSECUTIVE EQUALS SIGNS", "THREE CONSECUTIVE EQUALS SIGNS", "EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW", "EQUIVALENT WITH FOUR DOTS ABOVE", "LESS-THAN WITH CIRCLE INSIDE", "GREATER-THAN WITH CIRCLE INSIDE", "LESS-THAN WITH QUESTION MARK ABOVE", "GREATER-THAN WITH QUESTION MARK ABOVE", "LESS-THAN OR SLANTED EQUAL TO", "GREATER-THAN OR SLANTED EQUAL TO", "LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", "GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE", "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE", "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT", "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT", "LESS-THAN OR APPROXIMATE", "GREATER-THAN OR APPROXIMATE", "LESS-THAN AND SINGLE-LINE NOT EQUAL TO", "GREATER-THAN AND SINGLE-LINE NOT EQUAL TO", "LESS-THAN AND NOT APPROXIMATE", "GREATER-THAN AND NOT APPROXIMATE", "LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN", "GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN", "LESS-THAN ABOVE SIMILAR OR EQUAL", "GREATER-THAN ABOVE SIMILAR OR EQUAL", "LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN", "GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN", "LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL", "GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL", "LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL", "GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL", "SLANTED EQUAL TO OR LESS-THAN", "SLANTED EQUAL TO OR GREATER-THAN", "SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE", "SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE", "DOUBLE-LINE EQUAL TO OR LESS-THAN", "DOUBLE-LINE EQUAL TO OR GREATER-THAN", "DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN", "DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN", "SIMILAR OR LESS-THAN", "SIMILAR OR GREATER-THAN", "SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN", "SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN", "DOUBLE NESTED LESS-THAN", "DOUBLE NESTED GREATER-THAN", "DOUBLE NESTED LESS-THAN WITH UNDERBAR", "GREATER-THAN OVERLAPPING LESS-THAN", "GREATER-THAN BESIDE LESS-THAN", "LESS-THAN CLOSED BY CURVE", "GREATER-THAN CLOSED BY CURVE", "LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", "GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL", "SMALLER THAN", "LARGER THAN", "SMALLER THAN OR EQUAL TO", "LARGER THAN OR EQUAL TO", "EQUALS SIGN WITH BUMPY ABOVE", "PRECEDES ABOVE SINGLE-LINE EQUALS SIGN", "SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN", "PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO", "SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO", "PRECEDES ABOVE EQUALS SIGN", "SUCCEEDS ABOVE EQUALS SIGN", "PRECEDES ABOVE NOT EQUAL TO", "SUCCEEDS ABOVE NOT EQUAL TO", "PRECEDES ABOVE ALMOST EQUAL TO", "SUCCEEDS ABOVE ALMOST EQUAL TO", "PRECEDES ABOVE NOT ALMOST EQUAL TO", "SUCCEEDS ABOVE NOT ALMOST EQUAL TO", "DOUBLE PRECEDES", "DOUBLE SUCCEEDS", "SUBSET WITH DOT", "SUPERSET WITH DOT", "SUBSET WITH PLUS SIGN BELOW", "SUPERSET WITH PLUS SIGN BELOW", "SUBSET WITH MULTIPLICATION SIGN BELOW", "SUPERSET WITH MULTIPLICATION SIGN BELOW", "SUBSET OF OR EQUAL TO WITH DOT ABOVE", "SUPERSET OF OR EQUAL TO WITH DOT ABOVE", "SUBSET OF ABOVE EQUALS SIGN", "SUPERSET OF ABOVE EQUALS SIGN", "SUBSET OF ABOVE TILDE OPERATOR", "SUPERSET OF ABOVE TILDE OPERATOR", "SUBSET OF ABOVE ALMOST EQUAL TO", "SUPERSET OF ABOVE ALMOST EQUAL TO", "SUBSET OF ABOVE NOT EQUAL TO", "SUPERSET OF ABOVE NOT EQUAL TO", "SQUARE LEFT OPEN BOX OPERATOR", "SQUARE RIGHT OPEN BOX OPERATOR", "CLOSED SUBSET", "CLOSED SUPERSET", "CLOSED SUBSET OR EQUAL TO", "CLOSED SUPERSET OR EQUAL TO", "SUBSET ABOVE SUPERSET", "SUPERSET ABOVE SUBSET", "SUBSET ABOVE SUBSET", "SUPERSET ABOVE SUPERSET", "SUPERSET BESIDE SUBSET", "SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET", "ELEMENT OF OPENING DOWNWARDS", "PITCHFORK WITH TEE TOP", "TRANSVERSAL INTERSECTION", "FORKING", "NONFORKING", "SHORT LEFT TACK", "SHORT DOWN TACK", "SHORT UP TACK", "PERPENDICULAR WITH S", "VERTICAL BAR TRIPLE RIGHT TURNSTILE", "DOUBLE VERTICAL BAR LEFT TURNSTILE", "VERTICAL BAR DOUBLE LEFT TURNSTILE", "DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE", "LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL", "SHORT DOWN TACK WITH OVERBAR", "SHORT UP TACK WITH UNDERBAR", "SHORT UP TACK ABOVE SHORT DOWN TACK", "DOUBLE DOWN TACK", "DOUBLE UP TACK", "DOUBLE STROKE NOT SIGN", "REVERSED DOUBLE STROKE NOT SIGN", "DOES NOT DIVIDE WITH REVERSED NEGATION SLASH", "VERTICAL LINE WITH CIRCLE ABOVE", "VERTICAL LINE WITH CIRCLE BELOW", "DOWN TACK WITH CIRCLE BELOW", "PARALLEL WITH HORIZONTAL STROKE", "PARALLEL WITH TILDE OPERATOR", "TRIPLE VERTICAL BAR BINARY RELATION", "TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE", "TRIPLE COLON OPERATOR", "TRIPLE NESTED LESS-THAN", "TRIPLE NESTED GREATER-THAN", "DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO", "DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO", "TRIPLE SOLIDUS BINARY RELATION", "LARGE TRIPLE VERTICAL BAR OPERATOR", "DOUBLE SOLIDUS OPERATOR", "WHITE VERTICAL BAR", "N-ARY WHITE VERTICAL BAR", "NORTH EAST WHITE ARROW", "NORTH WEST WHITE ARROW", "SOUTH EAST WHITE ARROW", "SOUTH WEST WHITE ARROW", "LEFT RIGHT WHITE ARROW", "LEFTWARDS BLACK ARROW", "UPWARDS BLACK ARROW", "DOWNWARDS BLACK ARROW", "NORTH EAST BLACK ARROW", "NORTH WEST BLACK ARROW", "SOUTH EAST BLACK ARROW", "SOUTH WEST BLACK ARROW", "LEFT RIGHT BLACK ARROW", "UP DOWN BLACK ARROW", "RIGHTWARDS ARROW WITH TIP DOWNWARDS", "RIGHTWARDS ARROW WITH TIP UPWARDS", "LEFTWARDS ARROW WITH TIP DOWNWARDS", "LEFTWARDS ARROW WITH TIP UPWARDS", "SQUARE WITH TOP HALF BLACK", "SQUARE WITH BOTTOM HALF BLACK", "SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK", "SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK", "DIAMOND WITH LEFT HALF BLACK", "DIAMOND WITH RIGHT HALF BLACK", "DIAMOND WITH TOP HALF BLACK", "DIAMOND WITH BOTTOM HALF BLACK", "DOTTED SQUARE", "BLACK LARGE SQUARE", "WHITE LARGE SQUARE", "BLACK VERY SMALL SQUARE", "WHITE VERY SMALL SQUARE", "BLACK PENTAGON", "WHITE PENTAGON", "WHITE HEXAGON", "BLACK HEXAGON", "HORIZONTAL BLACK HEXAGON", "BLACK LARGE CIRCLE", "BLACK MEDIUM DIAMOND", "WHITE MEDIUM DIAMOND", "BLACK MEDIUM LOZENGE", "WHITE MEDIUM LOZENGE", "BLACK SMALL DIAMOND", "BLACK SMALL LOZENGE", "WHITE SMALL LOZENGE", "BLACK HORIZONTAL ELLIPSE", "WHITE HORIZONTAL ELLIPSE", "BLACK VERTICAL ELLIPSE", "WHITE VERTICAL ELLIPSE", "LEFT ARROW WITH SMALL CIRCLE", "THREE LEFTWARDS ARROWS", "LEFT ARROW WITH CIRCLED PLUS", "LONG LEFTWARDS SQUIGGLE ARROW", "LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE", "LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE", "LEFTWARDS TWO-HEADED ARROW FROM BAR", "LEFTWARDS TWO-HEADED TRIPLE DASH ARROW", "LEFTWARDS ARROW WITH DOTTED STEM", "LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE", "LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", "LEFTWARDS TWO-HEADED ARROW WITH TAIL", "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE", "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE", "LEFTWARDS ARROW THROUGH X", "WAVE ARROW POINTING DIRECTLY LEFT", "EQUALS SIGN ABOVE LEFTWARDS ARROW", "REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW", "LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", "RIGHTWARDS ARROW THROUGH GREATER-THAN", "RIGHTWARDS ARROW THROUGH SUPERSET", "LEFTWARDS QUADRUPLE ARROW", "RIGHTWARDS QUADRUPLE ARROW", "REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW", "RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO", "TILDE OPERATOR ABOVE LEFTWARDS ARROW", "LEFTWARDS ARROW ABOVE ALMOST EQUAL TO", "LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", "RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR", "DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW", "SHORT SLANTED NORTH ARROW", "SHORT BACKSLANTED SOUTH ARROW", "WHITE MEDIUM STAR", "BLACK SMALL STAR", "WHITE SMALL STAR", "BLACK RIGHT-POINTING PENTAGON", "WHITE RIGHT-POINTING PENTAGON", "HEAVY LARGE CIRCLE", "HEAVY OVAL WITH OVAL INSIDE", "HEAVY CIRCLE WITH CIRCLE INSIDE", "HEAVY CIRCLE", "HEAVY CIRCLED SALTIRE", "SLANTED NORTH ARROW WITH HOOKED HEAD", "BACKSLANTED SOUTH ARROW WITH HOOKED TAIL", "SLANTED NORTH ARROW WITH HORIZONTAL TAIL", "BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL", "BENT ARROW POINTING DOWNWARDS THEN NORTH EAST", "SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST", "LEFTWARDS TRIANGLE-HEADED ARROW", "UPWARDS TRIANGLE-HEADED ARROW", "RIGHTWARDS TRIANGLE-HEADED ARROW", "DOWNWARDS TRIANGLE-HEADED ARROW", "LEFT RIGHT TRIANGLE-HEADED ARROW", "UP DOWN TRIANGLE-HEADED ARROW", "NORTH WEST TRIANGLE-HEADED ARROW", "NORTH EAST TRIANGLE-HEADED ARROW", "SOUTH EAST TRIANGLE-HEADED ARROW", "SOUTH WEST TRIANGLE-HEADED ARROW", "LEFTWARDS TRIANGLE-HEADED DASHED ARROW", "UPWARDS TRIANGLE-HEADED DASHED ARROW", "RIGHTWARDS TRIANGLE-HEADED DASHED ARROW", "DOWNWARDS TRIANGLE-HEADED DASHED ARROW", "CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW", "ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW", "LEFTWARDS TRIANGLE-HEADED ARROW TO BAR", "UPWARDS TRIANGLE-HEADED ARROW TO BAR", "RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR", "DOWNWARDS TRIANGLE-HEADED ARROW TO BAR", "NORTH WEST TRIANGLE-HEADED ARROW TO BAR", "NORTH EAST TRIANGLE-HEADED ARROW TO BAR", "SOUTH EAST TRIANGLE-HEADED ARROW TO BAR", "SOUTH WEST TRIANGLE-HEADED ARROW TO BAR", "LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE", "UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE", "DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE", "HORIZONTAL TAB KEY", "VERTICAL TAB KEY", "LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW", "UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW", "RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW", "DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW", "LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS", "UPWARDS TRIANGLE-HEADED PAIRED ARROWS", "RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS", "DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS", "LEFTWARDS BLACK CIRCLED WHITE ARROW", "UPWARDS BLACK CIRCLED WHITE ARROW", "RIGHTWARDS BLACK CIRCLED WHITE ARROW", "DOWNWARDS BLACK CIRCLED WHITE ARROW", "ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW", "ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW", "ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW", "ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW", "RETURN LEFT", "RETURN RIGHT", "NEWLINE LEFT", "NEWLINE RIGHT", "FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE", "RIGHTWARDS BLACK ARROW", "THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD", "THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD", "THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD", "THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD", "BLACK LEFTWARDS EQUILATERAL ARROWHEAD", "BLACK UPWARDS EQUILATERAL ARROWHEAD", "BLACK RIGHTWARDS EQUILATERAL ARROWHEAD", "BLACK DOWNWARDS EQUILATERAL ARROWHEAD", "DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS", "DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS", "UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS", "UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS", "LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS", "LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS", "BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW", "BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW", "BLACK CURVED UPWARDS AND LEFTWARDS ARROW", "BLACK CURVED UPWARDS AND RIGHTWARDS ARROW", "BLACK CURVED LEFTWARDS AND UPWARDS ARROW", "BLACK CURVED RIGHTWARDS AND UPWARDS ARROW", "BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW", "BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW", "RIBBON ARROW DOWN LEFT", "RIBBON ARROW DOWN RIGHT", "RIBBON ARROW UP LEFT", "RIBBON ARROW UP RIGHT", "RIBBON ARROW LEFT UP", "RIBBON ARROW RIGHT UP", "RIBBON ARROW LEFT DOWN", "RIBBON ARROW RIGHT DOWN", "UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR", "UP ARROWHEAD IN A RECTANGLE BOX", "OVERLAPPING WHITE SQUARES", "OVERLAPPING WHITE AND BLACK SQUARES", "OVERLAPPING BLACK SQUARES", "BALLOT BOX WITH LIGHT X", "CIRCLED X", "CIRCLED BOLD X", "BLACK SQUARE CENTRED", "BLACK DIAMOND CENTRED", "TURNED BLACK PENTAGON", "HORIZONTAL BLACK OCTAGON", "BLACK OCTAGON", "BLACK MEDIUM UP-POINTING TRIANGLE CENTRED", "BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED", "BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED", "BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED", "NEPTUNE FORM TWO", "TOP HALF BLACK CIRCLE", "BOTTOM HALF BLACK CIRCLE", "LIGHT FOUR POINTED BLACK CUSP", "ROTATED LIGHT FOUR POINTED BLACK CUSP", "WHITE FOUR POINTED CUSP", "ROTATED WHITE FOUR POINTED CUSP", "SQUARE POSITION INDICATOR", "UNCERTAINTY SIGN", "GROUP MARK", "PLUTO FORM TWO", "PLUTO FORM THREE", "PLUTO FORM FOUR", "PLUTO FORM FIVE", "TRANSPLUTO", "PROSERPINA", "ASTRAEA", "HYGIEA", "PHOLUS", "NESSUS", "WHITE MOON SELENA", "BLACK DIAMOND ON CROSS", "TRUE LIGHT MOON ARTA", "CUPIDO", "HADES", "ZEUS", "KRONOS", "APOLLON", "ADMETOS", "VULCANUS", "POSEIDON", "LEFT HALF BLACK STAR", "RIGHT HALF BLACK STAR", "STAR WITH LEFT HALF BLACK", "STAR WITH RIGHT HALF BLACK", "LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS", "UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS", "RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS", "DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS", "ERIS FORM ONE", "ERIS FORM TWO", "SEDNA", "RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE", "RUSSIAN ASTROLOGICAL SYMBOL NOVILE", "RUSSIAN ASTROLOGICAL SYMBOL QUINTILE", "RUSSIAN ASTROLOGICAL SYMBOL BINOVILE", "RUSSIAN ASTROLOGICAL SYMBOL SENTAGON", "RUSSIAN ASTROLOGICAL SYMBOL TREDECILE", "EQUALS SIGN WITH INFINITY BELOW", "UNITED SYMBOL", "SEPARATED SYMBOL", "DOUBLED SYMBOL", "PASSED SYMBOL", "REVERSED RIGHT ANGLE", "HELLSCHREIBER PAUSE SYMBOL", "GLAGOLITIC CAPITAL LETTER AZU", "GLAGOLITIC CAPITAL LETTER BUKY", "GLAGOLITIC CAPITAL LETTER VEDE", "GLAGOLITIC CAPITAL LETTER GLAGOLI", "GLAGOLITIC CAPITAL LETTER DOBRO", "GLAGOLITIC CAPITAL LETTER YESTU", "GLAGOLITIC CAPITAL LETTER ZHIVETE", "GLAGOLITIC CAPITAL LETTER DZELO", "GLAGOLITIC CAPITAL LETTER ZEMLJA", "GLAGOLITIC CAPITAL LETTER IZHE", "GLAGOLITIC CAPITAL LETTER INITIAL IZHE", "GLAGOLITIC CAPITAL LETTER I", "GLAGOLITIC CAPITAL LETTER DJERVI", "GLAGOLITIC CAPITAL LETTER KAKO", "GLAGOLITIC CAPITAL LETTER LJUDIJE", "GLAGOLITIC CAPITAL LETTER MYSLITE", "GLAGOLITIC CAPITAL LETTER NASHI", "GLAGOLITIC CAPITAL LETTER ONU", "GLAGOLITIC CAPITAL LETTER POKOJI", "GLAGOLITIC CAPITAL LETTER RITSI", "GLAGOLITIC CAPITAL LETTER SLOVO", "GLAGOLITIC CAPITAL LETTER TVRIDO", "GLAGOLITIC CAPITAL LETTER UKU", "GLAGOLITIC CAPITAL LETTER FRITU", "GLAGOLITIC CAPITAL LETTER HERU", "GLAGOLITIC CAPITAL LETTER OTU", "GLAGOLITIC CAPITAL LETTER PE", "GLAGOLITIC CAPITAL LETTER SHTA", "GLAGOLITIC CAPITAL LETTER TSI", "GLAGOLITIC CAPITAL LETTER CHRIVI", "GLAGOLITIC CAPITAL LETTER SHA", "GLAGOLITIC CAPITAL LETTER YERU", "GLAGOLITIC CAPITAL LETTER YERI", "GLAGOLITIC CAPITAL LETTER YATI", "GLAGOLITIC CAPITAL LETTER SPIDERY HA", "GLAGOLITIC CAPITAL LETTER YU", "GLAGOLITIC CAPITAL LETTER SMALL YUS", "GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL", "GLAGOLITIC CAPITAL LETTER YO", "GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS", "GLAGOLITIC CAPITAL LETTER BIG YUS", "GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS", "GLAGOLITIC CAPITAL LETTER FITA", "GLAGOLITIC CAPITAL LETTER IZHITSA", "GLAGOLITIC CAPITAL LETTER SHTAPIC", "GLAGOLITIC CAPITAL LETTER TROKUTASTI A", "GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE", "GLAGOLITIC SMALL LETTER AZU", "GLAGOLITIC SMALL LETTER BUKY", "GLAGOLITIC SMALL LETTER VEDE", "GLAGOLITIC SMALL LETTER GLAGOLI", "GLAGOLITIC SMALL LETTER DOBRO", "GLAGOLITIC SMALL LETTER YESTU", "GLAGOLITIC SMALL LETTER ZHIVETE", "GLAGOLITIC SMALL LETTER DZELO", "GLAGOLITIC SMALL LETTER ZEMLJA", "GLAGOLITIC SMALL LETTER IZHE", "GLAGOLITIC SMALL LETTER INITIAL IZHE", "GLAGOLITIC SMALL LETTER I", "GLAGOLITIC SMALL LETTER DJERVI", "GLAGOLITIC SMALL LETTER KAKO", "GLAGOLITIC SMALL LETTER LJUDIJE", "GLAGOLITIC SMALL LETTER MYSLITE", "GLAGOLITIC SMALL LETTER NASHI", "GLAGOLITIC SMALL LETTER ONU", "GLAGOLITIC SMALL LETTER POKOJI", "GLAGOLITIC SMALL LETTER RITSI", "GLAGOLITIC SMALL LETTER SLOVO", "GLAGOLITIC SMALL LETTER TVRIDO", "GLAGOLITIC SMALL LETTER UKU", "GLAGOLITIC SMALL LETTER FRITU", "GLAGOLITIC SMALL LETTER HERU", "GLAGOLITIC SMALL LETTER OTU", "GLAGOLITIC SMALL LETTER PE", "GLAGOLITIC SMALL LETTER SHTA", "GLAGOLITIC SMALL LETTER TSI", "GLAGOLITIC SMALL LETTER CHRIVI", "GLAGOLITIC SMALL LETTER SHA", "GLAGOLITIC SMALL LETTER YERU", "GLAGOLITIC SMALL LETTER YERI", "GLAGOLITIC SMALL LETTER YATI", "GLAGOLITIC SMALL LETTER SPIDERY HA", "GLAGOLITIC SMALL LETTER YU", "GLAGOLITIC SMALL LETTER SMALL YUS", "GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL", "GLAGOLITIC SMALL LETTER YO", "GLAGOLITIC SMALL LETTER IOTATED SMALL YUS", "GLAGOLITIC SMALL LETTER BIG YUS", "GLAGOLITIC SMALL LETTER IOTATED BIG YUS", "GLAGOLITIC SMALL LETTER FITA", "GLAGOLITIC SMALL LETTER IZHITSA", "GLAGOLITIC SMALL LETTER SHTAPIC", "GLAGOLITIC SMALL LETTER TROKUTASTI A", "GLAGOLITIC SMALL LETTER LATINATE MYSLITE", "LATIN CAPITAL LETTER L WITH DOUBLE BAR", "LATIN SMALL LETTER L WITH DOUBLE BAR", "LATIN CAPITAL LETTER L WITH MIDDLE TILDE", "LATIN CAPITAL LETTER P WITH STROKE", "LATIN CAPITAL LETTER R WITH TAIL", "LATIN SMALL LETTER A WITH STROKE", "LATIN SMALL LETTER T WITH DIAGONAL STROKE", "LATIN CAPITAL LETTER H WITH DESCENDER", "LATIN SMALL LETTER H WITH DESCENDER", "LATIN CAPITAL LETTER K WITH DESCENDER", "LATIN SMALL LETTER K WITH DESCENDER", "LATIN CAPITAL LETTER Z WITH DESCENDER", "LATIN SMALL LETTER Z WITH DESCENDER", "LATIN CAPITAL LETTER ALPHA", "LATIN CAPITAL LETTER M WITH HOOK", "LATIN CAPITAL LETTER TURNED A", "LATIN CAPITAL LETTER TURNED ALPHA", "LATIN SMALL LETTER V WITH RIGHT HOOK", "LATIN CAPITAL LETTER W WITH HOOK", "LATIN SMALL LETTER W WITH HOOK", "LATIN SMALL LETTER V WITH CURL", "LATIN CAPITAL LETTER HALF H", "LATIN SMALL LETTER HALF H", "LATIN SMALL LETTER TAILLESS PHI", "LATIN SMALL LETTER E WITH NOTCH", "LATIN SMALL LETTER TURNED R WITH TAIL", "LATIN SMALL LETTER O WITH LOW RING INSIDE", "LATIN LETTER SMALL CAPITAL TURNED E", "LATIN SUBSCRIPT SMALL LETTER J", "MODIFIER LETTER CAPITAL V", "LATIN CAPITAL LETTER S WITH SWASH TAIL", "LATIN CAPITAL LETTER Z WITH SWASH TAIL", "COPTIC CAPITAL LETTER ALFA", "COPTIC SMALL LETTER ALFA", "COPTIC CAPITAL LETTER VIDA", "COPTIC SMALL LETTER VIDA", "COPTIC CAPITAL LETTER GAMMA", "COPTIC SMALL LETTER GAMMA", "COPTIC CAPITAL LETTER DALDA", "COPTIC SMALL LETTER DALDA", "COPTIC CAPITAL LETTER EIE", "COPTIC SMALL LETTER EIE", "COPTIC CAPITAL LETTER SOU", "COPTIC SMALL LETTER SOU", "COPTIC CAPITAL LETTER ZATA", "COPTIC SMALL LETTER ZATA", "COPTIC CAPITAL LETTER HATE", "COPTIC SMALL LETTER HATE", "COPTIC CAPITAL LETTER THETHE", "COPTIC SMALL LETTER THETHE", "COPTIC CAPITAL LETTER IAUDA", "COPTIC SMALL LETTER IAUDA", "COPTIC CAPITAL LETTER KAPA", "COPTIC SMALL LETTER KAPA", "COPTIC CAPITAL LETTER LAULA", "COPTIC SMALL LETTER LAULA", "COPTIC CAPITAL LETTER MI", "COPTIC SMALL LETTER MI", "COPTIC CAPITAL LETTER NI", "COPTIC SMALL LETTER NI", "COPTIC CAPITAL LETTER KSI", "COPTIC SMALL LETTER KSI", "COPTIC CAPITAL LETTER O", "COPTIC SMALL LETTER O", "COPTIC CAPITAL LETTER PI", "COPTIC SMALL LETTER PI", "COPTIC CAPITAL LETTER RO", "COPTIC SMALL LETTER RO", "COPTIC CAPITAL LETTER SIMA", "COPTIC SMALL LETTER SIMA", "COPTIC CAPITAL LETTER TAU", "COPTIC SMALL LETTER TAU", "COPTIC CAPITAL LETTER UA", "COPTIC SMALL LETTER UA", "COPTIC CAPITAL LETTER FI", "COPTIC SMALL LETTER FI", "COPTIC CAPITAL LETTER KHI", "COPTIC SMALL LETTER KHI", "COPTIC CAPITAL LETTER PSI", "COPTIC SMALL LETTER PSI", "COPTIC CAPITAL LETTER OOU", "COPTIC SMALL LETTER OOU", "COPTIC CAPITAL LETTER DIALECT-P ALEF", "COPTIC SMALL LETTER DIALECT-P ALEF", "COPTIC CAPITAL LETTER OLD COPTIC AIN", "COPTIC SMALL LETTER OLD COPTIC AIN", "COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE", "COPTIC SMALL LETTER CRYPTOGRAMMIC EIE", "COPTIC CAPITAL LETTER DIALECT-P KAPA", "COPTIC SMALL LETTER DIALECT-P KAPA", "COPTIC CAPITAL LETTER DIALECT-P NI", "COPTIC SMALL LETTER DIALECT-P NI", "COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI", "COPTIC SMALL LETTER CRYPTOGRAMMIC NI", "COPTIC CAPITAL LETTER OLD COPTIC OOU", "COPTIC SMALL LETTER OLD COPTIC OOU", "COPTIC CAPITAL LETTER SAMPI", "COPTIC SMALL LETTER SAMPI", "COPTIC CAPITAL LETTER CROSSED SHEI", "COPTIC SMALL LETTER CROSSED SHEI", "COPTIC CAPITAL LETTER OLD COPTIC SHEI", "COPTIC SMALL LETTER OLD COPTIC SHEI", "COPTIC CAPITAL LETTER OLD COPTIC ESH", "COPTIC SMALL LETTER OLD COPTIC ESH", "COPTIC CAPITAL LETTER AKHMIMIC KHEI", "COPTIC SMALL LETTER AKHMIMIC KHEI", "COPTIC CAPITAL LETTER DIALECT-P HORI", "COPTIC SMALL LETTER DIALECT-P HORI", "COPTIC CAPITAL LETTER OLD COPTIC HORI", "COPTIC SMALL LETTER OLD COPTIC HORI", "COPTIC CAPITAL LETTER OLD COPTIC HA", "COPTIC SMALL LETTER OLD COPTIC HA", "COPTIC CAPITAL LETTER L-SHAPED HA", "COPTIC SMALL LETTER L-SHAPED HA", "COPTIC CAPITAL LETTER OLD COPTIC HEI", "COPTIC SMALL LETTER OLD COPTIC HEI", "COPTIC CAPITAL LETTER OLD COPTIC HAT", "COPTIC SMALL LETTER OLD COPTIC HAT", "COPTIC CAPITAL LETTER OLD COPTIC GANGIA", "COPTIC SMALL LETTER OLD COPTIC GANGIA", "COPTIC CAPITAL LETTER OLD COPTIC DJA", "COPTIC SMALL LETTER OLD COPTIC DJA", "COPTIC CAPITAL LETTER OLD COPTIC SHIMA", "COPTIC SMALL LETTER OLD COPTIC SHIMA", "COPTIC CAPITAL LETTER OLD NUBIAN SHIMA", "COPTIC SMALL LETTER OLD NUBIAN SHIMA", "COPTIC CAPITAL LETTER OLD NUBIAN NGI", "COPTIC SMALL LETTER OLD NUBIAN NGI", "COPTIC CAPITAL LETTER OLD NUBIAN NYI", "COPTIC SMALL LETTER OLD NUBIAN NYI", "COPTIC CAPITAL LETTER OLD NUBIAN WAU", "COPTIC SMALL LETTER OLD NUBIAN WAU", "COPTIC SYMBOL KAI", "COPTIC SYMBOL MI RO", "COPTIC SYMBOL PI RO", "COPTIC SYMBOL STAUROS", "COPTIC SYMBOL TAU RO", "COPTIC SYMBOL KHI RO", "COPTIC SYMBOL SHIMA SIMA", "COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI", "COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI", "COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA", "COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA", "COPTIC COMBINING NI ABOVE", "COPTIC COMBINING SPIRITUS ASPER", "COPTIC COMBINING SPIRITUS LENIS", "COPTIC CAPITAL LETTER BOHAIRIC KHEI", "COPTIC SMALL LETTER BOHAIRIC KHEI", "COPTIC OLD NUBIAN FULL STOP", "COPTIC OLD NUBIAN DIRECT QUESTION MARK", "COPTIC OLD NUBIAN INDIRECT QUESTION MARK", "COPTIC OLD NUBIAN VERSE DIVIDER", "COPTIC FRACTION ONE HALF", "COPTIC FULL STOP", "COPTIC MORPHOLOGICAL DIVIDER", "GEORGIAN SMALL LETTER AN", "GEORGIAN SMALL LETTER BAN", "GEORGIAN SMALL LETTER GAN", "GEORGIAN SMALL LETTER DON", "GEORGIAN SMALL LETTER EN", "GEORGIAN SMALL LETTER VIN", "GEORGIAN SMALL LETTER ZEN", "GEORGIAN SMALL LETTER TAN", "GEORGIAN SMALL LETTER IN", "GEORGIAN SMALL LETTER KAN", "GEORGIAN SMALL LETTER LAS", "GEORGIAN SMALL LETTER MAN", "GEORGIAN SMALL LETTER NAR", "GEORGIAN SMALL LETTER ON", "GEORGIAN SMALL LETTER PAR", "GEORGIAN SMALL LETTER ZHAR", "GEORGIAN SMALL LETTER RAE", "GEORGIAN SMALL LETTER SAN", "GEORGIAN SMALL LETTER TAR", "GEORGIAN SMALL LETTER UN", "GEORGIAN SMALL LETTER PHAR", "GEORGIAN SMALL LETTER KHAR", "GEORGIAN SMALL LETTER GHAN", "GEORGIAN SMALL LETTER QAR", "GEORGIAN SMALL LETTER SHIN", "GEORGIAN SMALL LETTER CHIN", "GEORGIAN SMALL LETTER CAN", "GEORGIAN SMALL LETTER JIL", "GEORGIAN SMALL LETTER CIL", "GEORGIAN SMALL LETTER CHAR", "GEORGIAN SMALL LETTER XAN", "GEORGIAN SMALL LETTER JHAN", "GEORGIAN SMALL LETTER HAE", "GEORGIAN SMALL LETTER HE", "GEORGIAN SMALL LETTER HIE", "GEORGIAN SMALL LETTER WE", "GEORGIAN SMALL LETTER HAR", "GEORGIAN SMALL LETTER HOE", "GEORGIAN SMALL LETTER YN", "GEORGIAN SMALL LETTER AEN", "TIFINAGH LETTER YA", "TIFINAGH LETTER YAB", "TIFINAGH LETTER YABH", "TIFINAGH LETTER YAG", "TIFINAGH LETTER YAGHH", "TIFINAGH LETTER BERBER ACADEMY YAJ", "TIFINAGH LETTER YAJ", "TIFINAGH LETTER YAD", "TIFINAGH LETTER YADH", "TIFINAGH LETTER YADD", "TIFINAGH LETTER YADDH", "TIFINAGH LETTER YEY", "TIFINAGH LETTER YAF", "TIFINAGH LETTER YAK", "TIFINAGH LETTER TUAREG YAK", "TIFINAGH LETTER YAKHH", "TIFINAGH LETTER YAH", "TIFINAGH LETTER BERBER ACADEMY YAH", "TIFINAGH LETTER TUAREG YAH", "TIFINAGH LETTER YAHH", "TIFINAGH LETTER YAA", "TIFINAGH LETTER YAKH", "TIFINAGH LETTER TUAREG YAKH", "TIFINAGH LETTER YAQ", "TIFINAGH LETTER TUAREG YAQ", "TIFINAGH LETTER YI", "TIFINAGH LETTER YAZH", "TIFINAGH LETTER AHAGGAR YAZH", "TIFINAGH LETTER TUAREG YAZH", "TIFINAGH LETTER YAL", "TIFINAGH LETTER YAM", "TIFINAGH LETTER YAN", "TIFINAGH LETTER TUAREG YAGN", "TIFINAGH LETTER TUAREG YANG", "TIFINAGH LETTER YAP", "TIFINAGH LETTER YU", "TIFINAGH LETTER YAR", "TIFINAGH LETTER YARR", "TIFINAGH LETTER YAGH", "TIFINAGH LETTER TUAREG YAGH", "TIFINAGH LETTER AYER YAGH", "TIFINAGH LETTER YAS", "TIFINAGH LETTER YASS", "TIFINAGH LETTER YASH", "TIFINAGH LETTER YAT", "TIFINAGH LETTER YATH", "TIFINAGH LETTER YACH", "TIFINAGH LETTER YATT", "TIFINAGH LETTER YAV", "TIFINAGH LETTER YAW", "TIFINAGH LETTER YAY", "TIFINAGH LETTER YAZ", "TIFINAGH LETTER TAWELLEMET YAZ", "TIFINAGH LETTER YAZZ", "TIFINAGH LETTER YE", "TIFINAGH LETTER YO", "TIFINAGH MODIFIER LETTER LABIALIZATION MARK", "TIFINAGH SEPARATOR MARK", "TIFINAGH CONSONANT JOINER", "ETHIOPIC SYLLABLE LOA", "ETHIOPIC SYLLABLE MOA", "ETHIOPIC SYLLABLE ROA", "ETHIOPIC SYLLABLE SOA", "ETHIOPIC SYLLABLE SHOA", "ETHIOPIC SYLLABLE BOA", "ETHIOPIC SYLLABLE TOA", "ETHIOPIC SYLLABLE COA", "ETHIOPIC SYLLABLE NOA", "ETHIOPIC SYLLABLE NYOA", "ETHIOPIC SYLLABLE GLOTTAL OA", "ETHIOPIC SYLLABLE ZOA", "ETHIOPIC SYLLABLE DOA", "ETHIOPIC SYLLABLE DDOA", "ETHIOPIC SYLLABLE JOA", "ETHIOPIC SYLLABLE THOA", "ETHIOPIC SYLLABLE CHOA", "ETHIOPIC SYLLABLE PHOA", "ETHIOPIC SYLLABLE POA", "ETHIOPIC SYLLABLE GGWA", "ETHIOPIC SYLLABLE GGWI", "ETHIOPIC SYLLABLE GGWEE", "ETHIOPIC SYLLABLE GGWE", "ETHIOPIC SYLLABLE SSA", "ETHIOPIC SYLLABLE SSU", "ETHIOPIC SYLLABLE SSI", "ETHIOPIC SYLLABLE SSAA", "ETHIOPIC SYLLABLE SSEE", "ETHIOPIC SYLLABLE SSE", "ETHIOPIC SYLLABLE SSO", "ETHIOPIC SYLLABLE CCA", "ETHIOPIC SYLLABLE CCU", "ETHIOPIC SYLLABLE CCI", "ETHIOPIC SYLLABLE CCAA", "ETHIOPIC SYLLABLE CCEE", "ETHIOPIC SYLLABLE CCE", "ETHIOPIC SYLLABLE CCO", "ETHIOPIC SYLLABLE ZZA", "ETHIOPIC SYLLABLE ZZU", "ETHIOPIC SYLLABLE ZZI", "ETHIOPIC SYLLABLE ZZAA", "ETHIOPIC SYLLABLE ZZEE", "ETHIOPIC SYLLABLE ZZE", "ETHIOPIC SYLLABLE ZZO", "ETHIOPIC SYLLABLE CCHA", "ETHIOPIC SYLLABLE CCHU", "ETHIOPIC SYLLABLE CCHI", "ETHIOPIC SYLLABLE CCHAA", "ETHIOPIC SYLLABLE CCHEE", "ETHIOPIC SYLLABLE CCHE", "ETHIOPIC SYLLABLE CCHO", "ETHIOPIC SYLLABLE QYA", "ETHIOPIC SYLLABLE QYU", "ETHIOPIC SYLLABLE QYI", "ETHIOPIC SYLLABLE QYAA", "ETHIOPIC SYLLABLE QYEE", "ETHIOPIC SYLLABLE QYE", "ETHIOPIC SYLLABLE QYO", "ETHIOPIC SYLLABLE KYA", "ETHIOPIC SYLLABLE KYU", "ETHIOPIC SYLLABLE KYI", "ETHIOPIC SYLLABLE KYAA", "ETHIOPIC SYLLABLE KYEE", "ETHIOPIC SYLLABLE KYE", "ETHIOPIC SYLLABLE KYO", "ETHIOPIC SYLLABLE XYA", "ETHIOPIC SYLLABLE XYU", "ETHIOPIC SYLLABLE XYI", "ETHIOPIC SYLLABLE XYAA", "ETHIOPIC SYLLABLE XYEE", "ETHIOPIC SYLLABLE XYE", "ETHIOPIC SYLLABLE XYO", "ETHIOPIC SYLLABLE GYA", "ETHIOPIC SYLLABLE GYU", "ETHIOPIC SYLLABLE GYI", "ETHIOPIC SYLLABLE GYAA", "ETHIOPIC SYLLABLE GYEE", "ETHIOPIC SYLLABLE GYE", "ETHIOPIC SYLLABLE GYO", "COMBINING CYRILLIC LETTER BE", "COMBINING CYRILLIC LETTER VE", "COMBINING CYRILLIC LETTER GHE", "COMBINING CYRILLIC LETTER DE", "COMBINING CYRILLIC LETTER ZHE", "COMBINING CYRILLIC LETTER ZE", "COMBINING CYRILLIC LETTER KA", "COMBINING CYRILLIC LETTER EL", "COMBINING CYRILLIC LETTER EM", "COMBINING CYRILLIC LETTER EN", "COMBINING CYRILLIC LETTER O", "COMBINING CYRILLIC LETTER PE", "COMBINING CYRILLIC LETTER ER", "COMBINING CYRILLIC LETTER ES", "COMBINING CYRILLIC LETTER TE", "COMBINING CYRILLIC LETTER HA", "COMBINING CYRILLIC LETTER TSE", "COMBINING CYRILLIC LETTER CHE", "COMBINING CYRILLIC LETTER SHA", "COMBINING CYRILLIC LETTER SHCHA", "COMBINING CYRILLIC LETTER FITA", "COMBINING CYRILLIC LETTER ES-TE", "COMBINING CYRILLIC LETTER A", "COMBINING CYRILLIC LETTER IE", "COMBINING CYRILLIC LETTER DJERV", "COMBINING CYRILLIC LETTER MONOGRAPH UK", "COMBINING CYRILLIC LETTER YAT", "COMBINING CYRILLIC LETTER YU", "COMBINING CYRILLIC LETTER IOTIFIED A", "COMBINING CYRILLIC LETTER LITTLE YUS", "COMBINING CYRILLIC LETTER BIG YUS", "COMBINING CYRILLIC LETTER IOTIFIED BIG YUS", "RIGHT ANGLE SUBSTITUTION MARKER", "RIGHT ANGLE DOTTED SUBSTITUTION MARKER", "LEFT SUBSTITUTION BRACKET", "RIGHT SUBSTITUTION BRACKET", "LEFT DOTTED SUBSTITUTION BRACKET", "RIGHT DOTTED SUBSTITUTION BRACKET", "RAISED INTERPOLATION MARKER", "RAISED DOTTED INTERPOLATION MARKER", "DOTTED TRANSPOSITION MARKER", "LEFT TRANSPOSITION BRACKET", "RIGHT TRANSPOSITION BRACKET", "RAISED SQUARE", "LEFT RAISED OMISSION BRACKET", "RIGHT RAISED OMISSION BRACKET", "EDITORIAL CORONIS", "PARAGRAPHOS", "FORKED PARAGRAPHOS", "REVERSED FORKED PARAGRAPHOS", "HYPODIASTOLE", "DOTTED OBELOS", "DOWNWARDS ANCORA", "UPWARDS ANCORA", "DOTTED RIGHT-POINTING ANGLE", "DOUBLE OBLIQUE HYPHEN", "INVERTED INTERROBANG", "PALM BRANCH", "HYPHEN WITH DIAERESIS", "TILDE WITH RING ABOVE", "LEFT LOW PARAPHRASE BRACKET", "RIGHT LOW PARAPHRASE BRACKET", "TILDE WITH DOT ABOVE", "TILDE WITH DOT BELOW", "LEFT VERTICAL BAR WITH QUILL", "RIGHT VERTICAL BAR WITH QUILL", "TOP LEFT HALF BRACKET", "TOP RIGHT HALF BRACKET", "BOTTOM LEFT HALF BRACKET", "BOTTOM RIGHT HALF BRACKET", "LEFT SIDEWAYS U BRACKET", "RIGHT SIDEWAYS U BRACKET", "LEFT DOUBLE PARENTHESIS", "RIGHT DOUBLE PARENTHESIS", "TWO DOTS OVER ONE DOT PUNCTUATION", "ONE DOT OVER TWO DOTS PUNCTUATION", "SQUARED FOUR DOT PUNCTUATION", "FIVE DOT MARK", "REVERSED QUESTION MARK", "VERTICAL TILDE", "RING POINT", "WORD SEPARATOR MIDDLE DOT", "TURNED COMMA", "RAISED DOT", "RAISED COMMA", "TURNED SEMICOLON", "DAGGER WITH LEFT GUARD", "DAGGER WITH RIGHT GUARD", "TURNED DAGGER", "TOP HALF SECTION SIGN", "TWO-EM DASH", "THREE-EM DASH", "STENOGRAPHIC FULL STOP", "VERTICAL SIX DOTS", "WIGGLY VERTICAL LINE", "CAPITULUM", "DOUBLE HYPHEN", "REVERSED COMMA", "DOUBLE LOW-REVERSED-9 QUOTATION MARK", "DASH WITH LEFT UPTURN", "DOUBLE SUSPENSION MARK", "INVERTED LOW KAVYKA", "INVERTED LOW KAVYKA WITH KAVYKA ABOVE", "LOW KAVYKA", "LOW KAVYKA WITH DOT", "DOUBLE STACKED COMMA", "DOTTED SOLIDUS", "TRIPLE DAGGER", "MEDIEVAL COMMA", "PARAGRAPHUS MARK", "PUNCTUS ELEVATUS MARK", "CORNISH VERSE DIVIDER", "CJK RADICAL REPEAT", "CJK RADICAL CLIFF", "CJK RADICAL SECOND ONE", "CJK RADICAL SECOND TWO", "CJK RADICAL SECOND THREE", "CJK RADICAL PERSON", "CJK RADICAL BOX", "CJK RADICAL TABLE", "CJK RADICAL KNIFE ONE", "CJK RADICAL KNIFE TWO", "CJK RADICAL DIVINATION", "CJK RADICAL SEAL", "CJK RADICAL SMALL ONE", "CJK RADICAL SMALL TWO", "CJK RADICAL LAME ONE", "CJK RADICAL LAME TWO", "CJK RADICAL LAME THREE", "CJK RADICAL LAME FOUR", "CJK RADICAL SNAKE", "CJK RADICAL THREAD", "CJK RADICAL SNOUT ONE", "CJK RADICAL SNOUT TWO", "CJK RADICAL HEART ONE", "CJK RADICAL HEART TWO", "CJK RADICAL HAND", "CJK RADICAL RAP", "CJK RADICAL CHOKE", "CJK RADICAL SUN", "CJK RADICAL MOON", "CJK RADICAL DEATH", "CJK RADICAL MOTHER", "CJK RADICAL CIVILIAN", "CJK RADICAL WATER ONE", "CJK RADICAL WATER TWO", "CJK RADICAL FIRE", "CJK RADICAL PAW ONE", "CJK RADICAL PAW TWO", "CJK RADICAL SIMPLIFIED HALF TREE TRUNK", "CJK RADICAL COW", "CJK RADICAL DOG", "CJK RADICAL JADE", "CJK RADICAL BOLT OF CLOTH", "CJK RADICAL EYE", "CJK RADICAL SPIRIT ONE", "CJK RADICAL SPIRIT TWO", "CJK RADICAL BAMBOO", "CJK RADICAL SILK", "CJK RADICAL C-SIMPLIFIED SILK", "CJK RADICAL NET ONE", "CJK RADICAL NET TWO", "CJK RADICAL NET THREE", "CJK RADICAL NET FOUR", "CJK RADICAL MESH", "CJK RADICAL SHEEP", "CJK RADICAL RAM", "CJK RADICAL EWE", "CJK RADICAL OLD", "CJK RADICAL BRUSH ONE", "CJK RADICAL BRUSH TWO", "CJK RADICAL MEAT", "CJK RADICAL MORTAR", "CJK RADICAL GRASS ONE", "CJK RADICAL GRASS TWO", "CJK RADICAL GRASS THREE", "CJK RADICAL TIGER", "CJK RADICAL CLOTHES", "CJK RADICAL WEST ONE", "CJK RADICAL WEST TWO", "CJK RADICAL C-SIMPLIFIED SEE", "CJK RADICAL SIMPLIFIED HORN", "CJK RADICAL HORN", "CJK RADICAL C-SIMPLIFIED SPEECH", "CJK RADICAL C-SIMPLIFIED SHELL", "CJK RADICAL FOOT", "CJK RADICAL C-SIMPLIFIED CART", "CJK RADICAL SIMPLIFIED WALK", "CJK RADICAL WALK ONE", "CJK RADICAL WALK TWO", "CJK RADICAL CITY", "CJK RADICAL C-SIMPLIFIED GOLD", "CJK RADICAL LONG ONE", "CJK RADICAL LONG TWO", "CJK RADICAL C-SIMPLIFIED LONG", "CJK RADICAL C-SIMPLIFIED GATE", "CJK RADICAL MOUND ONE", "CJK RADICAL MOUND TWO", "CJK RADICAL RAIN", "CJK RADICAL BLUE", "CJK RADICAL C-SIMPLIFIED TANNED LEATHER", "CJK RADICAL C-SIMPLIFIED LEAF", "CJK RADICAL C-SIMPLIFIED WIND", "CJK RADICAL C-SIMPLIFIED FLY", "CJK RADICAL EAT ONE", "CJK RADICAL EAT TWO", "CJK RADICAL EAT THREE", "CJK RADICAL C-SIMPLIFIED EAT", "CJK RADICAL HEAD", "CJK RADICAL C-SIMPLIFIED HORSE", "CJK RADICAL BONE", "CJK RADICAL GHOST", "CJK RADICAL C-SIMPLIFIED FISH", "CJK RADICAL C-SIMPLIFIED BIRD", "CJK RADICAL C-SIMPLIFIED SALT", "CJK RADICAL SIMPLIFIED WHEAT", "CJK RADICAL SIMPLIFIED YELLOW", "CJK RADICAL C-SIMPLIFIED FROG", "CJK RADICAL J-SIMPLIFIED EVEN", "CJK RADICAL C-SIMPLIFIED EVEN", "CJK RADICAL J-SIMPLIFIED TOOTH", "CJK RADICAL C-SIMPLIFIED TOOTH", "CJK RADICAL J-SIMPLIFIED DRAGON", "CJK RADICAL C-SIMPLIFIED DRAGON", "CJK RADICAL TURTLE", "CJK RADICAL J-SIMPLIFIED TURTLE", "CJK RADICAL C-SIMPLIFIED TURTLE", "KANGXI RADICAL ONE", "KANGXI RADICAL LINE", "KANGXI RADICAL DOT", "KANGXI RADICAL SLASH", "KANGXI RADICAL SECOND", "KANGXI RADICAL HOOK", "KANGXI RADICAL TWO", "KANGXI RADICAL LID", "KANGXI RADICAL MAN", "KANGXI RADICAL LEGS", "KANGXI RADICAL ENTER", "KANGXI RADICAL EIGHT", "KANGXI RADICAL DOWN BOX", "KANGXI RADICAL COVER", "KANGXI RADICAL ICE", "KANGXI RADICAL TABLE", "KANGXI RADICAL OPEN BOX", "KANGXI RADICAL KNIFE", "KANGXI RADICAL POWER", "KANGXI RADICAL WRAP", "KANGXI RADICAL SPOON", "KANGXI RADICAL RIGHT OPEN BOX", "KANGXI RADICAL HIDING ENCLOSURE", "KANGXI RADICAL TEN", "KANGXI RADICAL DIVINATION", "KANGXI RADICAL SEAL", "KANGXI RADICAL CLIFF", "KANGXI RADICAL PRIVATE", "KANGXI RADICAL AGAIN", "KANGXI RADICAL MOUTH", "KANGXI RADICAL ENCLOSURE", "KANGXI RADICAL EARTH", "KANGXI RADICAL SCHOLAR", "KANGXI RADICAL GO", "KANGXI RADICAL GO SLOWLY", "KANGXI RADICAL EVENING", "KANGXI RADICAL BIG", "KANGXI RADICAL WOMAN", "KANGXI RADICAL CHILD", "KANGXI RADICAL ROOF", "KANGXI RADICAL INCH", "KANGXI RADICAL SMALL", "KANGXI RADICAL LAME", "KANGXI RADICAL CORPSE", "KANGXI RADICAL SPROUT", "KANGXI RADICAL MOUNTAIN", "KANGXI RADICAL RIVER", "KANGXI RADICAL WORK", "KANGXI RADICAL ONESELF", "KANGXI RADICAL TURBAN", "KANGXI RADICAL DRY", "KANGXI RADICAL SHORT THREAD", "KANGXI RADICAL DOTTED CLIFF", "KANGXI RADICAL LONG STRIDE", "KANGXI RADICAL TWO HANDS", "KANGXI RADICAL SHOOT", "KANGXI RADICAL BOW", "KANGXI RADICAL SNOUT", "KANGXI RADICAL BRISTLE", "KANGXI RADICAL STEP", "KANGXI RADICAL HEART", "KANGXI RADICAL HALBERD", "KANGXI RADICAL DOOR", "KANGXI RADICAL HAND", "KANGXI RADICAL BRANCH", "KANGXI RADICAL RAP", "KANGXI RADICAL SCRIPT", "KANGXI RADICAL DIPPER", "KANGXI RADICAL AXE", "KANGXI RADICAL SQUARE", "KANGXI RADICAL NOT", "KANGXI RADICAL SUN", "KANGXI RADICAL SAY", "KANGXI RADICAL MOON", "KANGXI RADICAL TREE", "KANGXI RADICAL LACK", "KANGXI RADICAL STOP", "KANGXI RADICAL DEATH", "KANGXI RADICAL WEAPON", "KANGXI RADICAL DO NOT", "KANGXI RADICAL COMPARE", "KANGXI RADICAL FUR", "KANGXI RADICAL CLAN", "KANGXI RADICAL STEAM", "KANGXI RADICAL WATER", "KANGXI RADICAL FIRE", "KANGXI RADICAL CLAW", "KANGXI RADICAL FATHER", "KANGXI RADICAL DOUBLE X", "KANGXI RADICAL HALF TREE TRUNK", "KANGXI RADICAL SLICE", "KANGXI RADICAL FANG", "KANGXI RADICAL COW", "KANGXI RADICAL DOG", "KANGXI RADICAL PROFOUND", "KANGXI RADICAL JADE", "KANGXI RADICAL MELON", "KANGXI RADICAL TILE", "KANGXI RADICAL SWEET", "KANGXI RADICAL LIFE", "KANGXI RADICAL USE", "KANGXI RADICAL FIELD", "KANGXI RADICAL BOLT OF CLOTH", "KANGXI RADICAL SICKNESS", "KANGXI RADICAL DOTTED TENT", "KANGXI RADICAL WHITE", "KANGXI RADICAL SKIN", "KANGXI RADICAL DISH", "KANGXI RADICAL EYE", "KANGXI RADICAL SPEAR", "KANGXI RADICAL ARROW", "KANGXI RADICAL STONE", "KANGXI RADICAL SPIRIT", "KANGXI RADICAL TRACK", "KANGXI RADICAL GRAIN", "KANGXI RADICAL CAVE", "KANGXI RADICAL STAND", "KANGXI RADICAL BAMBOO", "KANGXI RADICAL RICE", "KANGXI RADICAL SILK", "KANGXI RADICAL JAR", "KANGXI RADICAL NET", "KANGXI RADICAL SHEEP", "KANGXI RADICAL FEATHER", "KANGXI RADICAL OLD", "KANGXI RADICAL AND", "KANGXI RADICAL PLOW", "KANGXI RADICAL EAR", "KANGXI RADICAL BRUSH", "KANGXI RADICAL MEAT", "KANGXI RADICAL MINISTER", "KANGXI RADICAL SELF", "KANGXI RADICAL ARRIVE", "KANGXI RADICAL MORTAR", "KANGXI RADICAL TONGUE", "KANGXI RADICAL OPPOSE", "KANGXI RADICAL BOAT", "KANGXI RADICAL STOPPING", "KANGXI RADICAL COLOR", "KANGXI RADICAL GRASS", "KANGXI RADICAL TIGER", "KANGXI RADICAL INSECT", "KANGXI RADICAL BLOOD", "KANGXI RADICAL WALK ENCLOSURE", "KANGXI RADICAL CLOTHES", "KANGXI RADICAL WEST", "KANGXI RADICAL SEE", "KANGXI RADICAL HORN", "KANGXI RADICAL SPEECH", "KANGXI RADICAL VALLEY", "KANGXI RADICAL BEAN", "KANGXI RADICAL PIG", "KANGXI RADICAL BADGER", "KANGXI RADICAL SHELL", "KANGXI RADICAL RED", "KANGXI RADICAL RUN", "KANGXI RADICAL FOOT", "KANGXI RADICAL BODY", "KANGXI RADICAL CART", "KANGXI RADICAL BITTER", "KANGXI RADICAL MORNING", "KANGXI RADICAL WALK", "KANGXI RADICAL CITY", "KANGXI RADICAL WINE", "KANGXI RADICAL DISTINGUISH", "KANGXI RADICAL VILLAGE", "KANGXI RADICAL GOLD", "KANGXI RADICAL LONG", "KANGXI RADICAL GATE", "KANGXI RADICAL MOUND", "KANGXI RADICAL SLAVE", "KANGXI RADICAL SHORT TAILED BIRD", "KANGXI RADICAL RAIN", "KANGXI RADICAL BLUE", "KANGXI RADICAL WRONG", "KANGXI RADICAL FACE", "KANGXI RADICAL LEATHER", "KANGXI RADICAL TANNED LEATHER", "KANGXI RADICAL LEEK", "KANGXI RADICAL SOUND", "KANGXI RADICAL LEAF", "KANGXI RADICAL WIND", "KANGXI RADICAL FLY", "KANGXI RADICAL EAT", "KANGXI RADICAL HEAD", "KANGXI RADICAL FRAGRANT", "KANGXI RADICAL HORSE", "KANGXI RADICAL BONE", "KANGXI RADICAL TALL", "KANGXI RADICAL HAIR", "KANGXI RADICAL FIGHT", "KANGXI RADICAL SACRIFICIAL WINE", "KANGXI RADICAL CAULDRON", "KANGXI RADICAL GHOST", "KANGXI RADICAL FISH", "KANGXI RADICAL BIRD", "KANGXI RADICAL SALT", "KANGXI RADICAL DEER", "KANGXI RADICAL WHEAT", "KANGXI RADICAL HEMP", "KANGXI RADICAL YELLOW", "KANGXI RADICAL MILLET", "KANGXI RADICAL BLACK", "KANGXI RADICAL EMBROIDERY", "KANGXI RADICAL FROG", "KANGXI RADICAL TRIPOD", "KANGXI RADICAL DRUM", "KANGXI RADICAL RAT", "KANGXI RADICAL NOSE", "KANGXI RADICAL EVEN", "KANGXI RADICAL TOOTH", "KANGXI RADICAL DRAGON", "KANGXI RADICAL TURTLE", "KANGXI RADICAL FLUTE", "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT", "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW", "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT", "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW", "IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT", "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT", "IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID", "IDEOGRAPHIC SPACE", "IDEOGRAPHIC COMMA", "IDEOGRAPHIC FULL STOP", "DITTO MARK", "JAPANESE INDUSTRIAL STANDARD SYMBOL", "IDEOGRAPHIC ITERATION MARK", "IDEOGRAPHIC CLOSING MARK", "IDEOGRAPHIC NUMBER ZERO", "LEFT ANGLE BRACKET", "RIGHT ANGLE BRACKET", "LEFT DOUBLE ANGLE BRACKET", "RIGHT DOUBLE ANGLE BRACKET", "LEFT CORNER BRACKET", "RIGHT CORNER BRACKET", "LEFT WHITE CORNER BRACKET", "RIGHT WHITE CORNER BRACKET", "LEFT BLACK LENTICULAR BRACKET", "RIGHT BLACK LENTICULAR BRACKET", "POSTAL MARK", "GETA MARK", "LEFT TORTOISE SHELL BRACKET", "RIGHT TORTOISE SHELL BRACKET", "LEFT WHITE LENTICULAR BRACKET", "RIGHT WHITE LENTICULAR BRACKET", "LEFT WHITE TORTOISE SHELL BRACKET", "RIGHT WHITE TORTOISE SHELL BRACKET", "LEFT WHITE SQUARE BRACKET", "RIGHT WHITE SQUARE BRACKET", "WAVE DASH", "REVERSED DOUBLE PRIME QUOTATION MARK", "DOUBLE PRIME QUOTATION MARK", "LOW DOUBLE PRIME QUOTATION MARK", "POSTAL MARK FACE", "HANGZHOU NUMERAL ONE", "HANGZHOU NUMERAL TWO", "HANGZHOU NUMERAL THREE", "HANGZHOU NUMERAL FOUR", "HANGZHOU NUMERAL FIVE", "HANGZHOU NUMERAL SIX", "HANGZHOU NUMERAL SEVEN", "HANGZHOU NUMERAL EIGHT", "HANGZHOU NUMERAL NINE", "IDEOGRAPHIC LEVEL TONE MARK", "IDEOGRAPHIC RISING TONE MARK", "IDEOGRAPHIC DEPARTING TONE MARK", "IDEOGRAPHIC ENTERING TONE MARK", "HANGUL SINGLE DOT TONE MARK", "HANGUL DOUBLE DOT TONE MARK", "WAVY DASH", "VERTICAL KANA REPEAT MARK", "VERTICAL KANA REPEAT WITH VOICED SOUND MARK", "VERTICAL KANA REPEAT MARK UPPER HALF", "VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF", "VERTICAL KANA REPEAT MARK LOWER HALF", "CIRCLED POSTAL MARK", "IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL", "HANGZHOU NUMERAL TEN", "HANGZHOU NUMERAL TWENTY", "HANGZHOU NUMERAL THIRTY", "VERTICAL IDEOGRAPHIC ITERATION MARK", "MASU MARK", "PART ALTERNATION MARK", "IDEOGRAPHIC VARIATION INDICATOR", "IDEOGRAPHIC HALF FILL SPACE", "HIRAGANA LETTER SMALL A", "HIRAGANA LETTER A", "HIRAGANA LETTER SMALL I", "HIRAGANA LETTER I", "HIRAGANA LETTER SMALL U", "HIRAGANA LETTER U", "HIRAGANA LETTER SMALL E", "HIRAGANA LETTER E", "HIRAGANA LETTER SMALL O", "HIRAGANA LETTER O", "HIRAGANA LETTER KA", "HIRAGANA LETTER GA", "HIRAGANA LETTER KI", "HIRAGANA LETTER GI", "HIRAGANA LETTER KU", "HIRAGANA LETTER GU", "HIRAGANA LETTER KE", "HIRAGANA LETTER GE", "HIRAGANA LETTER KO", "HIRAGANA LETTER GO", "HIRAGANA LETTER SA", "HIRAGANA LETTER ZA", "HIRAGANA LETTER SI", "HIRAGANA LETTER ZI", "HIRAGANA LETTER SU", "HIRAGANA LETTER ZU", "HIRAGANA LETTER SE", "HIRAGANA LETTER ZE", "HIRAGANA LETTER SO", "HIRAGANA LETTER ZO", "HIRAGANA LETTER TA", "HIRAGANA LETTER DA", "HIRAGANA LETTER TI", "HIRAGANA LETTER DI", "HIRAGANA LETTER SMALL TU", "HIRAGANA LETTER TU", "HIRAGANA LETTER DU", "HIRAGANA LETTER TE", "HIRAGANA LETTER DE", "HIRAGANA LETTER TO", "HIRAGANA LETTER DO", "HIRAGANA LETTER NA", "HIRAGANA LETTER NI", "HIRAGANA LETTER NU", "HIRAGANA LETTER NE", "HIRAGANA LETTER NO", "HIRAGANA LETTER HA", "HIRAGANA LETTER BA", "HIRAGANA LETTER PA", "HIRAGANA LETTER HI", "HIRAGANA LETTER BI", "HIRAGANA LETTER PI", "HIRAGANA LETTER HU", "HIRAGANA LETTER BU", "HIRAGANA LETTER PU", "HIRAGANA LETTER HE", "HIRAGANA LETTER BE", "HIRAGANA LETTER PE", "HIRAGANA LETTER HO", "HIRAGANA LETTER BO", "HIRAGANA LETTER PO", "HIRAGANA LETTER MA", "HIRAGANA LETTER MI", "HIRAGANA LETTER MU", "HIRAGANA LETTER ME", "HIRAGANA LETTER MO", "HIRAGANA LETTER SMALL YA", "HIRAGANA LETTER YA", "HIRAGANA LETTER SMALL YU", "HIRAGANA LETTER YU", "HIRAGANA LETTER SMALL YO", "HIRAGANA LETTER YO", "HIRAGANA LETTER RA", "HIRAGANA LETTER RI", "HIRAGANA LETTER RU", "HIRAGANA LETTER RE", "HIRAGANA LETTER RO", "HIRAGANA LETTER SMALL WA", "HIRAGANA LETTER WA", "HIRAGANA LETTER WI", "HIRAGANA LETTER WE", "HIRAGANA LETTER WO", "HIRAGANA LETTER N", "HIRAGANA LETTER VU", "HIRAGANA LETTER SMALL KA", "HIRAGANA LETTER SMALL KE", "COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK", "COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK", "KATAKANA-HIRAGANA VOICED SOUND MARK", "KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK", "HIRAGANA ITERATION MARK", "HIRAGANA VOICED ITERATION MARK", "HIRAGANA DIGRAPH YORI", "KATAKANA-HIRAGANA DOUBLE HYPHEN", "KATAKANA LETTER SMALL A", "KATAKANA LETTER A", "KATAKANA LETTER SMALL I", "KATAKANA LETTER I", "KATAKANA LETTER SMALL U", "KATAKANA LETTER U", "KATAKANA LETTER SMALL E", "KATAKANA LETTER E", "KATAKANA LETTER SMALL O", "KATAKANA LETTER O", "KATAKANA LETTER KA", "KATAKANA LETTER GA", "KATAKANA LETTER KI", "KATAKANA LETTER GI", "KATAKANA LETTER KU", "KATAKANA LETTER GU", "KATAKANA LETTER KE", "KATAKANA LETTER GE", "KATAKANA LETTER KO", "KATAKANA LETTER GO", "KATAKANA LETTER SA", "KATAKANA LETTER ZA", "KATAKANA LETTER SI", "KATAKANA LETTER ZI", "KATAKANA LETTER SU", "KATAKANA LETTER ZU", "KATAKANA LETTER SE", "KATAKANA LETTER ZE", "KATAKANA LETTER SO", "KATAKANA LETTER ZO", "KATAKANA LETTER TA", "KATAKANA LETTER DA", "KATAKANA LETTER TI", "KATAKANA LETTER DI", "KATAKANA LETTER SMALL TU", "KATAKANA LETTER TU", "KATAKANA LETTER DU", "KATAKANA LETTER TE", "KATAKANA LETTER DE", "KATAKANA LETTER TO", "KATAKANA LETTER DO", "KATAKANA LETTER NA", "KATAKANA LETTER NI", "KATAKANA LETTER NU", "KATAKANA LETTER NE", "KATAKANA LETTER NO", "KATAKANA LETTER HA", "KATAKANA LETTER BA", "KATAKANA LETTER PA", "KATAKANA LETTER HI", "KATAKANA LETTER BI", "KATAKANA LETTER PI", "KATAKANA LETTER HU", "KATAKANA LETTER BU", "KATAKANA LETTER PU", "KATAKANA LETTER HE", "KATAKANA LETTER BE", "KATAKANA LETTER PE", "KATAKANA LETTER HO", "KATAKANA LETTER BO", "KATAKANA LETTER PO", "KATAKANA LETTER MA", "KATAKANA LETTER MI", "KATAKANA LETTER MU", "KATAKANA LETTER ME", "KATAKANA LETTER MO", "KATAKANA LETTER SMALL YA", "KATAKANA LETTER YA", "KATAKANA LETTER SMALL YU", "KATAKANA LETTER YU", "KATAKANA LETTER SMALL YO", "KATAKANA LETTER YO", "KATAKANA LETTER RA", "KATAKANA LETTER RI", "KATAKANA LETTER RU", "KATAKANA LETTER RE", "KATAKANA LETTER RO", "KATAKANA LETTER SMALL WA", "KATAKANA LETTER WA", "KATAKANA LETTER WI", "KATAKANA LETTER WE", "KATAKANA LETTER WO", "KATAKANA LETTER N", "KATAKANA LETTER VU", "KATAKANA LETTER SMALL KA", "KATAKANA LETTER SMALL KE", "KATAKANA LETTER VA", "KATAKANA LETTER VI", "KATAKANA LETTER VE", "KATAKANA LETTER VO", "KATAKANA MIDDLE DOT", "KATAKANA-HIRAGANA PROLONGED SOUND MARK", "KATAKANA ITERATION MARK", "KATAKANA VOICED ITERATION MARK", "KATAKANA DIGRAPH KOTO", "BOPOMOFO LETTER B", "BOPOMOFO LETTER P", "BOPOMOFO LETTER M", "BOPOMOFO LETTER F", "BOPOMOFO LETTER D", "BOPOMOFO LETTER T", "BOPOMOFO LETTER N", "BOPOMOFO LETTER L", "BOPOMOFO LETTER G", "BOPOMOFO LETTER K", "BOPOMOFO LETTER H", "BOPOMOFO LETTER J", "BOPOMOFO LETTER Q", "BOPOMOFO LETTER X", "BOPOMOFO LETTER ZH", "BOPOMOFO LETTER CH", "BOPOMOFO LETTER SH", "BOPOMOFO LETTER R", "BOPOMOFO LETTER Z", "BOPOMOFO LETTER C", "BOPOMOFO LETTER S", "BOPOMOFO LETTER A", "BOPOMOFO LETTER O", "BOPOMOFO LETTER E", "BOPOMOFO LETTER EH", "BOPOMOFO LETTER AI", "BOPOMOFO LETTER EI", "BOPOMOFO LETTER AU", "BOPOMOFO LETTER OU", "BOPOMOFO LETTER AN", "BOPOMOFO LETTER EN", "BOPOMOFO LETTER ANG", "BOPOMOFO LETTER ENG", "BOPOMOFO LETTER ER", "BOPOMOFO LETTER I", "BOPOMOFO LETTER U", "BOPOMOFO LETTER IU", "BOPOMOFO LETTER V", "BOPOMOFO LETTER NG", "BOPOMOFO LETTER GN", "BOPOMOFO LETTER IH", "BOPOMOFO LETTER O WITH DOT ABOVE", "BOPOMOFO LETTER NN", "HANGUL LETTER KIYEOK", "HANGUL LETTER SSANGKIYEOK", "HANGUL LETTER KIYEOK-SIOS", "HANGUL LETTER NIEUN", "HANGUL LETTER NIEUN-CIEUC", "HANGUL LETTER NIEUN-HIEUH", "HANGUL LETTER TIKEUT", "HANGUL LETTER SSANGTIKEUT", "HANGUL LETTER RIEUL", "HANGUL LETTER RIEUL-KIYEOK", "HANGUL LETTER RIEUL-MIEUM", "HANGUL LETTER RIEUL-PIEUP", "HANGUL LETTER RIEUL-SIOS", "HANGUL LETTER RIEUL-THIEUTH", "HANGUL LETTER RIEUL-PHIEUPH", "HANGUL LETTER RIEUL-HIEUH", "HANGUL LETTER MIEUM", "HANGUL LETTER PIEUP", "HANGUL LETTER SSANGPIEUP", "HANGUL LETTER PIEUP-SIOS", "HANGUL LETTER SIOS", "HANGUL LETTER SSANGSIOS", "HANGUL LETTER IEUNG", "HANGUL LETTER CIEUC", "HANGUL LETTER SSANGCIEUC", "HANGUL LETTER CHIEUCH", "HANGUL LETTER KHIEUKH", "HANGUL LETTER THIEUTH", "HANGUL LETTER PHIEUPH", "HANGUL LETTER HIEUH", "HANGUL LETTER A", "HANGUL LETTER AE", "HANGUL LETTER YA", "HANGUL LETTER YAE", "HANGUL LETTER EO", "HANGUL LETTER E", "HANGUL LETTER YEO", "HANGUL LETTER YE", "HANGUL LETTER O", "HANGUL LETTER WA", "HANGUL LETTER WAE", "HANGUL LETTER OE", "HANGUL LETTER YO", "HANGUL LETTER U", "HANGUL LETTER WEO", "HANGUL LETTER WE", "HANGUL LETTER WI", "HANGUL LETTER YU", "HANGUL LETTER EU", "HANGUL LETTER YI", "HANGUL LETTER I", "HANGUL FILLER", "HANGUL LETTER SSANGNIEUN", "HANGUL LETTER NIEUN-TIKEUT", "HANGUL LETTER NIEUN-SIOS", "HANGUL LETTER NIEUN-PANSIOS", "HANGUL LETTER RIEUL-KIYEOK-SIOS", "HANGUL LETTER RIEUL-TIKEUT", "HANGUL LETTER RIEUL-PIEUP-SIOS", "HANGUL LETTER RIEUL-PANSIOS", "HANGUL LETTER RIEUL-YEORINHIEUH", "HANGUL LETTER MIEUM-PIEUP", "HANGUL LETTER MIEUM-SIOS", "HANGUL LETTER MIEUM-PANSIOS", "HANGUL LETTER KAPYEOUNMIEUM", "HANGUL LETTER PIEUP-KIYEOK", "HANGUL LETTER PIEUP-TIKEUT", "HANGUL LETTER PIEUP-SIOS-KIYEOK", "HANGUL LETTER PIEUP-SIOS-TIKEUT", "HANGUL LETTER PIEUP-CIEUC", "HANGUL LETTER PIEUP-THIEUTH", "HANGUL LETTER KAPYEOUNPIEUP", "HANGUL LETTER KAPYEOUNSSANGPIEUP", "HANGUL LETTER SIOS-KIYEOK", "HANGUL LETTER SIOS-NIEUN", "HANGUL LETTER SIOS-TIKEUT", "HANGUL LETTER SIOS-PIEUP", "HANGUL LETTER SIOS-CIEUC", "HANGUL LETTER PANSIOS", "HANGUL LETTER SSANGIEUNG", "HANGUL LETTER YESIEUNG", "HANGUL LETTER YESIEUNG-SIOS", "HANGUL LETTER YESIEUNG-PANSIOS", "HANGUL LETTER KAPYEOUNPHIEUPH", "HANGUL LETTER SSANGHIEUH", "HANGUL LETTER YEORINHIEUH", "HANGUL LETTER YO-YA", "HANGUL LETTER YO-YAE", "HANGUL LETTER YO-I", "HANGUL LETTER YU-YEO", "HANGUL LETTER YU-YE", "HANGUL LETTER YU-I", "HANGUL LETTER ARAEA", "HANGUL LETTER ARAEAE", "IDEOGRAPHIC ANNOTATION LINKING MARK", "IDEOGRAPHIC ANNOTATION REVERSE MARK", "IDEOGRAPHIC ANNOTATION ONE MARK", "IDEOGRAPHIC ANNOTATION TWO MARK", "IDEOGRAPHIC ANNOTATION THREE MARK", "IDEOGRAPHIC ANNOTATION FOUR MARK", "IDEOGRAPHIC ANNOTATION TOP MARK", "IDEOGRAPHIC ANNOTATION MIDDLE MARK", "IDEOGRAPHIC ANNOTATION BOTTOM MARK", "IDEOGRAPHIC ANNOTATION FIRST MARK", "IDEOGRAPHIC ANNOTATION SECOND MARK", "IDEOGRAPHIC ANNOTATION THIRD MARK", "IDEOGRAPHIC ANNOTATION FOURTH MARK", "IDEOGRAPHIC ANNOTATION HEAVEN MARK", "IDEOGRAPHIC ANNOTATION EARTH MARK", "IDEOGRAPHIC ANNOTATION MAN MARK", "BOPOMOFO LETTER BU", "BOPOMOFO LETTER ZI", "BOPOMOFO LETTER JI", "BOPOMOFO LETTER GU", "BOPOMOFO LETTER EE", "BOPOMOFO LETTER ENN", "BOPOMOFO LETTER OO", "BOPOMOFO LETTER ONN", "BOPOMOFO LETTER IR", "BOPOMOFO LETTER ANN", "BOPOMOFO LETTER INN", "BOPOMOFO LETTER UNN", "BOPOMOFO LETTER IM", "BOPOMOFO LETTER NGG", "BOPOMOFO LETTER AINN", "BOPOMOFO LETTER AUNN", "BOPOMOFO LETTER AM", "BOPOMOFO LETTER OM", "BOPOMOFO LETTER ONG", "BOPOMOFO LETTER INNN", "BOPOMOFO FINAL LETTER P", "BOPOMOFO FINAL LETTER T", "BOPOMOFO FINAL LETTER K", "BOPOMOFO FINAL LETTER H", "BOPOMOFO LETTER GH", "BOPOMOFO LETTER LH", "BOPOMOFO LETTER ZY", "CJK STROKE T", "CJK STROKE WG", "CJK STROKE XG", "CJK STROKE BXG", "CJK STROKE SW", "CJK STROKE HZZ", "CJK STROKE HZG", "CJK STROKE HP", "CJK STROKE HZWG", "CJK STROKE SZWG", "CJK STROKE HZT", "CJK STROKE HZZP", "CJK STROKE HPWG", "CJK STROKE HZW", "CJK STROKE HZZZ", "CJK STROKE N", "CJK STROKE H", "CJK STROKE S", "CJK STROKE P", "CJK STROKE SP", "CJK STROKE D", "CJK STROKE HZ", "CJK STROKE HG", "CJK STROKE SZ", "CJK STROKE SWZ", "CJK STROKE ST", "CJK STROKE SG", "CJK STROKE PD", "CJK STROKE PZ", "CJK STROKE TN", "CJK STROKE SZZ", "CJK STROKE SWG", "CJK STROKE HXWG", "CJK STROKE HZZZG", "CJK STROKE PG", "CJK STROKE Q", "KATAKANA LETTER SMALL KU", "KATAKANA LETTER SMALL SI", "KATAKANA LETTER SMALL SU", "KATAKANA LETTER SMALL TO", "KATAKANA LETTER SMALL NU", "KATAKANA LETTER SMALL HA", "KATAKANA LETTER SMALL HI", "KATAKANA LETTER SMALL HU", "KATAKANA LETTER SMALL HE", "KATAKANA LETTER SMALL HO", "KATAKANA LETTER SMALL MU", "KATAKANA LETTER SMALL RA", "KATAKANA LETTER SMALL RI", "KATAKANA LETTER SMALL RU", "KATAKANA LETTER SMALL RE", "KATAKANA LETTER SMALL RO", "PARENTHESIZED HANGUL KIYEOK", "PARENTHESIZED HANGUL NIEUN", "PARENTHESIZED HANGUL TIKEUT", "PARENTHESIZED HANGUL RIEUL", "PARENTHESIZED HANGUL MIEUM", "PARENTHESIZED HANGUL PIEUP", "PARENTHESIZED HANGUL SIOS", "PARENTHESIZED HANGUL IEUNG", "PARENTHESIZED HANGUL CIEUC", "PARENTHESIZED HANGUL CHIEUCH", "PARENTHESIZED HANGUL KHIEUKH", "PARENTHESIZED HANGUL THIEUTH", "PARENTHESIZED HANGUL PHIEUPH", "PARENTHESIZED HANGUL HIEUH", "PARENTHESIZED HANGUL KIYEOK A", "PARENTHESIZED HANGUL NIEUN A", "PARENTHESIZED HANGUL TIKEUT A", "PARENTHESIZED HANGUL RIEUL A", "PARENTHESIZED HANGUL MIEUM A", "PARENTHESIZED HANGUL PIEUP A", "PARENTHESIZED HANGUL SIOS A", "PARENTHESIZED HANGUL IEUNG A", "PARENTHESIZED HANGUL CIEUC A", "PARENTHESIZED HANGUL CHIEUCH A", "PARENTHESIZED HANGUL KHIEUKH A", "PARENTHESIZED HANGUL THIEUTH A", "PARENTHESIZED HANGUL PHIEUPH A", "PARENTHESIZED HANGUL HIEUH A", "PARENTHESIZED HANGUL CIEUC U", "PARENTHESIZED KOREAN CHARACTER OJEON", "PARENTHESIZED KOREAN CHARACTER O HU", "PARENTHESIZED IDEOGRAPH ONE", "PARENTHESIZED IDEOGRAPH TWO", "PARENTHESIZED IDEOGRAPH THREE", "PARENTHESIZED IDEOGRAPH FOUR", "PARENTHESIZED IDEOGRAPH FIVE", "PARENTHESIZED IDEOGRAPH SIX", "PARENTHESIZED IDEOGRAPH SEVEN", "PARENTHESIZED IDEOGRAPH EIGHT", "PARENTHESIZED IDEOGRAPH NINE", "PARENTHESIZED IDEOGRAPH TEN", "PARENTHESIZED IDEOGRAPH MOON", "PARENTHESIZED IDEOGRAPH FIRE", "PARENTHESIZED IDEOGRAPH WATER", "PARENTHESIZED IDEOGRAPH WOOD", "PARENTHESIZED IDEOGRAPH METAL", "PARENTHESIZED IDEOGRAPH EARTH", "PARENTHESIZED IDEOGRAPH SUN", "PARENTHESIZED IDEOGRAPH STOCK", "PARENTHESIZED IDEOGRAPH HAVE", "PARENTHESIZED IDEOGRAPH SOCIETY", "PARENTHESIZED IDEOGRAPH NAME", "PARENTHESIZED IDEOGRAPH SPECIAL", "PARENTHESIZED IDEOGRAPH FINANCIAL", "PARENTHESIZED IDEOGRAPH CONGRATULATION", "PARENTHESIZED IDEOGRAPH LABOR", "PARENTHESIZED IDEOGRAPH REPRESENT", "PARENTHESIZED IDEOGRAPH CALL", "PARENTHESIZED IDEOGRAPH STUDY", "PARENTHESIZED IDEOGRAPH SUPERVISE", "PARENTHESIZED IDEOGRAPH ENTERPRISE", "PARENTHESIZED IDEOGRAPH RESOURCE", "PARENTHESIZED IDEOGRAPH ALLIANCE", "PARENTHESIZED IDEOGRAPH FESTIVAL", "PARENTHESIZED IDEOGRAPH REST", "PARENTHESIZED IDEOGRAPH SELF", "PARENTHESIZED IDEOGRAPH REACH", "CIRCLED IDEOGRAPH QUESTION", "CIRCLED IDEOGRAPH KINDERGARTEN", "CIRCLED IDEOGRAPH SCHOOL", "CIRCLED IDEOGRAPH KOTO", "CIRCLED NUMBER TEN ON BLACK SQUARE", "CIRCLED NUMBER TWENTY ON BLACK SQUARE", "CIRCLED NUMBER THIRTY ON BLACK SQUARE", "CIRCLED NUMBER FORTY ON BLACK SQUARE", "CIRCLED NUMBER FIFTY ON BLACK SQUARE", "CIRCLED NUMBER SIXTY ON BLACK SQUARE", "CIRCLED NUMBER SEVENTY ON BLACK SQUARE", "CIRCLED NUMBER EIGHTY ON BLACK SQUARE", "PARTNERSHIP SIGN", "CIRCLED NUMBER TWENTY ONE", "CIRCLED NUMBER TWENTY TWO", "CIRCLED NUMBER TWENTY THREE", "CIRCLED NUMBER TWENTY FOUR", "CIRCLED NUMBER TWENTY FIVE", "CIRCLED NUMBER TWENTY SIX", "CIRCLED NUMBER TWENTY SEVEN", "CIRCLED NUMBER TWENTY EIGHT", "CIRCLED NUMBER TWENTY NINE", "CIRCLED NUMBER THIRTY", "CIRCLED NUMBER THIRTY ONE", "CIRCLED NUMBER THIRTY TWO", "CIRCLED NUMBER THIRTY THREE", "CIRCLED NUMBER THIRTY FOUR", "CIRCLED NUMBER THIRTY FIVE", "CIRCLED HANGUL KIYEOK", "CIRCLED HANGUL NIEUN", "CIRCLED HANGUL TIKEUT", "CIRCLED HANGUL RIEUL", "CIRCLED HANGUL MIEUM", "CIRCLED HANGUL PIEUP", "CIRCLED HANGUL SIOS", "CIRCLED HANGUL IEUNG", "CIRCLED HANGUL CIEUC", "CIRCLED HANGUL CHIEUCH", "CIRCLED HANGUL KHIEUKH", "CIRCLED HANGUL THIEUTH", "CIRCLED HANGUL PHIEUPH", "CIRCLED HANGUL HIEUH", "CIRCLED HANGUL KIYEOK A", "CIRCLED HANGUL NIEUN A", "CIRCLED HANGUL TIKEUT A", "CIRCLED HANGUL RIEUL A", "CIRCLED HANGUL MIEUM A", "CIRCLED HANGUL PIEUP A", "CIRCLED HANGUL SIOS A", "CIRCLED HANGUL IEUNG A", "CIRCLED HANGUL CIEUC A", "CIRCLED HANGUL CHIEUCH A", "CIRCLED HANGUL KHIEUKH A", "CIRCLED HANGUL THIEUTH A", "CIRCLED HANGUL PHIEUPH A", "CIRCLED HANGUL HIEUH A", "CIRCLED KOREAN CHARACTER CHAMKO", "CIRCLED KOREAN CHARACTER JUEUI", "CIRCLED HANGUL IEUNG U", "KOREAN STANDARD SYMBOL", "CIRCLED IDEOGRAPH ONE", "CIRCLED IDEOGRAPH TWO", "CIRCLED IDEOGRAPH THREE", "CIRCLED IDEOGRAPH FOUR", "CIRCLED IDEOGRAPH FIVE", "CIRCLED IDEOGRAPH SIX", "CIRCLED IDEOGRAPH SEVEN", "CIRCLED IDEOGRAPH EIGHT", "CIRCLED IDEOGRAPH NINE", "CIRCLED IDEOGRAPH TEN", "CIRCLED IDEOGRAPH MOON", "CIRCLED IDEOGRAPH FIRE", "CIRCLED IDEOGRAPH WATER", "CIRCLED IDEOGRAPH WOOD", "CIRCLED IDEOGRAPH METAL", "CIRCLED IDEOGRAPH EARTH", "CIRCLED IDEOGRAPH SUN", "CIRCLED IDEOGRAPH STOCK", "CIRCLED IDEOGRAPH HAVE", "CIRCLED IDEOGRAPH SOCIETY", "CIRCLED IDEOGRAPH NAME", "CIRCLED IDEOGRAPH SPECIAL", "CIRCLED IDEOGRAPH FINANCIAL", "CIRCLED IDEOGRAPH CONGRATULATION", "CIRCLED IDEOGRAPH LABOR", "CIRCLED IDEOGRAPH SECRET", "CIRCLED IDEOGRAPH MALE", "CIRCLED IDEOGRAPH FEMALE", "CIRCLED IDEOGRAPH SUITABLE", "CIRCLED IDEOGRAPH EXCELLENT", "CIRCLED IDEOGRAPH PRINT", "CIRCLED IDEOGRAPH ATTENTION", "CIRCLED IDEOGRAPH ITEM", "CIRCLED IDEOGRAPH REST", "CIRCLED IDEOGRAPH COPY", "CIRCLED IDEOGRAPH CORRECT", "CIRCLED IDEOGRAPH HIGH", "CIRCLED IDEOGRAPH CENTRE", "CIRCLED IDEOGRAPH LOW", "CIRCLED IDEOGRAPH LEFT", "CIRCLED IDEOGRAPH RIGHT", "CIRCLED IDEOGRAPH MEDICINE", "CIRCLED IDEOGRAPH RELIGION", "CIRCLED IDEOGRAPH STUDY", "CIRCLED IDEOGRAPH SUPERVISE", "CIRCLED IDEOGRAPH ENTERPRISE", "CIRCLED IDEOGRAPH RESOURCE", "CIRCLED IDEOGRAPH ALLIANCE", "CIRCLED IDEOGRAPH NIGHT", "CIRCLED NUMBER THIRTY SIX", "CIRCLED NUMBER THIRTY SEVEN", "CIRCLED NUMBER THIRTY EIGHT", "CIRCLED NUMBER THIRTY NINE", "CIRCLED NUMBER FORTY", "CIRCLED NUMBER FORTY ONE", "CIRCLED NUMBER FORTY TWO", "CIRCLED NUMBER FORTY THREE", "CIRCLED NUMBER FORTY FOUR", "CIRCLED NUMBER FORTY FIVE", "CIRCLED NUMBER FORTY SIX", "CIRCLED NUMBER FORTY SEVEN", "CIRCLED NUMBER FORTY EIGHT", "CIRCLED NUMBER FORTY NINE", "CIRCLED NUMBER FIFTY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER", "SQUARE HG", "SQUARE ERG", "SQUARE EV", "LIMITED LIABILITY SIGN", "CIRCLED KATAKANA A", "CIRCLED KATAKANA I", "CIRCLED KATAKANA U", "CIRCLED KATAKANA E", "CIRCLED KATAKANA O", "CIRCLED KATAKANA KA", "CIRCLED KATAKANA KI", "CIRCLED KATAKANA KU", "CIRCLED KATAKANA KE", "CIRCLED KATAKANA KO", "CIRCLED KATAKANA SA", "CIRCLED KATAKANA SI", "CIRCLED KATAKANA SU", "CIRCLED KATAKANA SE", "CIRCLED KATAKANA SO", "CIRCLED KATAKANA TA", "CIRCLED KATAKANA TI", "CIRCLED KATAKANA TU", "CIRCLED KATAKANA TE", "CIRCLED KATAKANA TO", "CIRCLED KATAKANA NA", "CIRCLED KATAKANA NI", "CIRCLED KATAKANA NU", "CIRCLED KATAKANA NE", "CIRCLED KATAKANA NO", "CIRCLED KATAKANA HA", "CIRCLED KATAKANA HI", "CIRCLED KATAKANA HU", "CIRCLED KATAKANA HE", "CIRCLED KATAKANA HO", "CIRCLED KATAKANA MA", "CIRCLED KATAKANA MI", "CIRCLED KATAKANA MU", "CIRCLED KATAKANA ME", "CIRCLED KATAKANA MO", "CIRCLED KATAKANA YA", "CIRCLED KATAKANA YU", "CIRCLED KATAKANA YO", "CIRCLED KATAKANA RA", "CIRCLED KATAKANA RI", "CIRCLED KATAKANA RU", "CIRCLED KATAKANA RE", "CIRCLED KATAKANA RO", "CIRCLED KATAKANA WA", "CIRCLED KATAKANA WI", "CIRCLED KATAKANA WE", "CIRCLED KATAKANA WO", "SQUARE ERA NAME REIWA", "SQUARE APAATO", "SQUARE ARUHUA", "SQUARE ANPEA", "SQUARE AARU", "SQUARE ININGU", "SQUARE INTI", "SQUARE UON", "SQUARE ESUKUUDO", "SQUARE EEKAA", "SQUARE ONSU", "SQUARE OOMU", "SQUARE KAIRI", "SQUARE KARATTO", "SQUARE KARORII", "SQUARE GARON", "SQUARE GANMA", "SQUARE GIGA", "SQUARE GINII", "SQUARE KYURII", "SQUARE GIRUDAA", "SQUARE KIRO", "SQUARE KIROGURAMU", "SQUARE KIROMEETORU", "SQUARE KIROWATTO", "SQUARE GURAMU", "SQUARE GURAMUTON", "SQUARE KURUZEIRO", "SQUARE KUROONE", "SQUARE KEESU", "SQUARE KORUNA", "SQUARE KOOPO", "SQUARE SAIKURU", "SQUARE SANTIIMU", "SQUARE SIRINGU", "SQUARE SENTI", "SQUARE SENTO", "SQUARE DAASU", "SQUARE DESI", "SQUARE DORU", "SQUARE TON", "SQUARE NANO", "SQUARE NOTTO", "SQUARE HAITU", "SQUARE PAASENTO", "SQUARE PAATU", "SQUARE BAARERU", "SQUARE PIASUTORU", "SQUARE PIKURU", "SQUARE PIKO", "SQUARE BIRU", "SQUARE HUARADDO", "SQUARE HUIITO", "SQUARE BUSSYERU", "SQUARE HURAN", "SQUARE HEKUTAARU", "SQUARE PESO", "SQUARE PENIHI", "SQUARE HERUTU", "SQUARE PENSU", "SQUARE PEEZI", "SQUARE BEETA", "SQUARE POINTO", "SQUARE BORUTO", "SQUARE HON", "SQUARE PONDO", "SQUARE HOORU", "SQUARE HOON", "SQUARE MAIKURO", "SQUARE MAIRU", "SQUARE MAHHA", "SQUARE MARUKU", "SQUARE MANSYON", "SQUARE MIKURON", "SQUARE MIRI", "SQUARE MIRIBAARU", "SQUARE MEGA", "SQUARE MEGATON", "SQUARE MEETORU", "SQUARE YAADO", "SQUARE YAARU", "SQUARE YUAN", "SQUARE RITTORU", "SQUARE RIRA", "SQUARE RUPII", "SQUARE RUUBURU", "SQUARE REMU", "SQUARE RENTOGEN", "SQUARE WATTO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR", "SQUARE HPA", "SQUARE DA", "SQUARE AU", "SQUARE BAR", "SQUARE OV", "SQUARE PC", "SQUARE DM", "SQUARE DM SQUARED", "SQUARE DM CUBED", "SQUARE IU", "SQUARE ERA NAME HEISEI", "SQUARE ERA NAME SYOUWA", "SQUARE ERA NAME TAISYOU", "SQUARE ERA NAME MEIZI", "SQUARE CORPORATION", "SQUARE PA AMPS", "SQUARE NA", "SQUARE MU A", "SQUARE MA", "SQUARE KA", "SQUARE KB", "SQUARE MB", "SQUARE GB", "SQUARE CAL", "SQUARE KCAL", "SQUARE PF", "SQUARE NF", "SQUARE MU F", "SQUARE MU G", "SQUARE MG", "SQUARE KG", "SQUARE HZ", "SQUARE KHZ", "SQUARE MHZ", "SQUARE GHZ", "SQUARE THZ", "SQUARE MU L", "SQUARE ML", "SQUARE DL", "SQUARE KL", "SQUARE FM", "SQUARE NM", "SQUARE MU M", "SQUARE MM", "SQUARE CM", "SQUARE KM", "SQUARE MM SQUARED", "SQUARE CM SQUARED", "SQUARE M SQUARED", "SQUARE KM SQUARED", "SQUARE MM CUBED", "SQUARE CM CUBED", "SQUARE M CUBED", "SQUARE KM CUBED", "SQUARE M OVER S", "SQUARE M OVER S SQUARED", "SQUARE PA", "SQUARE KPA", "SQUARE MPA", "SQUARE GPA", "SQUARE RAD", "SQUARE RAD OVER S", "SQUARE RAD OVER S SQUARED", "SQUARE PS", "SQUARE NS", "SQUARE MU S", "SQUARE MS", "SQUARE PV", "SQUARE NV", "SQUARE MU V", "SQUARE MV", "SQUARE KV", "SQUARE MV MEGA", "SQUARE PW", "SQUARE NW", "SQUARE MU W", "SQUARE MW", "SQUARE KW", "SQUARE MW MEGA", "SQUARE K OHM", "SQUARE M OHM", "SQUARE AM", "SQUARE BQ", "SQUARE CC", "SQUARE CD", "SQUARE C OVER KG", "SQUARE CO", "SQUARE DB", "SQUARE GY", "SQUARE HA", "SQUARE HP", "SQUARE IN", "SQUARE KK", "SQUARE KM CAPITAL", "SQUARE KT", "SQUARE LM", "SQUARE LN", "SQUARE LOG", "SQUARE LX", "SQUARE MB SMALL", "SQUARE MIL", "SQUARE MOL", "SQUARE PH", "SQUARE PM", "SQUARE PPM", "SQUARE PR", "SQUARE SR", "SQUARE SV", "SQUARE WB", "SQUARE V OVER M", "SQUARE A OVER M", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY", "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE", "SQUARE GAL", "", "", "HEXAGRAM FOR THE CREATIVE HEAVEN", "HEXAGRAM FOR THE RECEPTIVE EARTH", "HEXAGRAM FOR DIFFICULTY AT THE BEGINNING", "HEXAGRAM FOR YOUTHFUL FOLLY", "HEXAGRAM FOR WAITING", "HEXAGRAM FOR CONFLICT", "HEXAGRAM FOR THE ARMY", "HEXAGRAM FOR HOLDING TOGETHER", "HEXAGRAM FOR SMALL TAMING", "HEXAGRAM FOR TREADING", "HEXAGRAM FOR PEACE", "HEXAGRAM FOR STANDSTILL", "HEXAGRAM FOR FELLOWSHIP", "HEXAGRAM FOR GREAT POSSESSION", "HEXAGRAM FOR MODESTY", "HEXAGRAM FOR ENTHUSIASM", "HEXAGRAM FOR FOLLOWING", "HEXAGRAM FOR WORK ON THE DECAYED", "HEXAGRAM FOR APPROACH", "HEXAGRAM FOR CONTEMPLATION", "HEXAGRAM FOR BITING THROUGH", "HEXAGRAM FOR GRACE", "HEXAGRAM FOR SPLITTING APART", "HEXAGRAM FOR RETURN", "HEXAGRAM FOR INNOCENCE", "HEXAGRAM FOR GREAT TAMING", "HEXAGRAM FOR MOUTH CORNERS", "HEXAGRAM FOR GREAT PREPONDERANCE", "HEXAGRAM FOR THE ABYSMAL WATER", "HEXAGRAM FOR THE CLINGING FIRE", "HEXAGRAM FOR INFLUENCE", "HEXAGRAM FOR DURATION", "HEXAGRAM FOR RETREAT", "HEXAGRAM FOR GREAT POWER", "HEXAGRAM FOR PROGRESS", "HEXAGRAM FOR DARKENING OF THE LIGHT", "HEXAGRAM FOR THE FAMILY", "HEXAGRAM FOR OPPOSITION", "HEXAGRAM FOR OBSTRUCTION", "HEXAGRAM FOR DELIVERANCE", "HEXAGRAM FOR DECREASE", "HEXAGRAM FOR INCREASE", "HEXAGRAM FOR BREAKTHROUGH", "HEXAGRAM FOR COMING TO MEET", "HEXAGRAM FOR GATHERING TOGETHER", "HEXAGRAM FOR PUSHING UPWARD", "HEXAGRAM FOR OPPRESSION", "HEXAGRAM FOR THE WELL", "HEXAGRAM FOR REVOLUTION", "HEXAGRAM FOR THE CAULDRON", "HEXAGRAM FOR THE AROUSING THUNDER", "HEXAGRAM FOR THE KEEPING STILL MOUNTAIN", "HEXAGRAM FOR DEVELOPMENT", "HEXAGRAM FOR THE MARRYING MAIDEN", "HEXAGRAM FOR ABUNDANCE", "HEXAGRAM FOR THE WANDERER", "HEXAGRAM FOR THE GENTLE WIND", "HEXAGRAM FOR THE JOYOUS LAKE", "HEXAGRAM FOR DISPERSION", "HEXAGRAM FOR LIMITATION", "HEXAGRAM FOR INNER TRUTH", "HEXAGRAM FOR SMALL PREPONDERANCE", "HEXAGRAM FOR AFTER COMPLETION", "HEXAGRAM FOR BEFORE COMPLETION", "", "", "YI SYLLABLE IT", "YI SYLLABLE IX", "YI SYLLABLE I", "YI SYLLABLE IP", "YI SYLLABLE IET", "YI SYLLABLE IEX", "YI SYLLABLE IE", "YI SYLLABLE IEP", "YI SYLLABLE AT", "YI SYLLABLE AX", "YI SYLLABLE A", "YI SYLLABLE AP", "YI SYLLABLE UOX", "YI SYLLABLE UO", "YI SYLLABLE UOP", "YI SYLLABLE OT", "YI SYLLABLE OX", "YI SYLLABLE O", "YI SYLLABLE OP", "YI SYLLABLE EX", "YI SYLLABLE E", "YI SYLLABLE WU", "YI SYLLABLE BIT", "YI SYLLABLE BIX", "YI SYLLABLE BI", "YI SYLLABLE BIP", "YI SYLLABLE BIET", "YI SYLLABLE BIEX", "YI SYLLABLE BIE", "YI SYLLABLE BIEP", "YI SYLLABLE BAT", "YI SYLLABLE BAX", "YI SYLLABLE BA", "YI SYLLABLE BAP", "YI SYLLABLE BUOX", "YI SYLLABLE BUO", "YI SYLLABLE BUOP", "YI SYLLABLE BOT", "YI SYLLABLE BOX", "YI SYLLABLE BO", "YI SYLLABLE BOP", "YI SYLLABLE BEX", "YI SYLLABLE BE", "YI SYLLABLE BEP", "YI SYLLABLE BUT", "YI SYLLABLE BUX", "YI SYLLABLE BU", "YI SYLLABLE BUP", "YI SYLLABLE BURX", "YI SYLLABLE BUR", "YI SYLLABLE BYT", "YI SYLLABLE BYX", "YI SYLLABLE BY", "YI SYLLABLE BYP", "YI SYLLABLE BYRX", "YI SYLLABLE BYR", "YI SYLLABLE PIT", "YI SYLLABLE PIX", "YI SYLLABLE PI", "YI SYLLABLE PIP", "YI SYLLABLE PIEX", "YI SYLLABLE PIE", "YI SYLLABLE PIEP", "YI SYLLABLE PAT", "YI SYLLABLE PAX", "YI SYLLABLE PA", "YI SYLLABLE PAP", "YI SYLLABLE PUOX", "YI SYLLABLE PUO", "YI SYLLABLE PUOP", "YI SYLLABLE POT", "YI SYLLABLE POX", "YI SYLLABLE PO", "YI SYLLABLE POP", "YI SYLLABLE PUT", "YI SYLLABLE PUX", "YI SYLLABLE PU", "YI SYLLABLE PUP", "YI SYLLABLE PURX", "YI SYLLABLE PUR", "YI SYLLABLE PYT", "YI SYLLABLE PYX", "YI SYLLABLE PY", "YI SYLLABLE PYP", "YI SYLLABLE PYRX", "YI SYLLABLE PYR", "YI SYLLABLE BBIT", "YI SYLLABLE BBIX", "YI SYLLABLE BBI", "YI SYLLABLE BBIP", "YI SYLLABLE BBIET", "YI SYLLABLE BBIEX", "YI SYLLABLE BBIE", "YI SYLLABLE BBIEP", "YI SYLLABLE BBAT", "YI SYLLABLE BBAX", "YI SYLLABLE BBA", "YI SYLLABLE BBAP", "YI SYLLABLE BBUOX", "YI SYLLABLE BBUO", "YI SYLLABLE BBUOP", "YI SYLLABLE BBOT", "YI SYLLABLE BBOX", "YI SYLLABLE BBO", "YI SYLLABLE BBOP", "YI SYLLABLE BBEX", "YI SYLLABLE BBE", "YI SYLLABLE BBEP", "YI SYLLABLE BBUT", "YI SYLLABLE BBUX", "YI SYLLABLE BBU", "YI SYLLABLE BBUP", "YI SYLLABLE BBURX", "YI SYLLABLE BBUR", "YI SYLLABLE BBYT", "YI SYLLABLE BBYX", "YI SYLLABLE BBY", "YI SYLLABLE BBYP", "YI SYLLABLE NBIT", "YI SYLLABLE NBIX", "YI SYLLABLE NBI", "YI SYLLABLE NBIP", "YI SYLLABLE NBIEX", "YI SYLLABLE NBIE", "YI SYLLABLE NBIEP", "YI SYLLABLE NBAT", "YI SYLLABLE NBAX", "YI SYLLABLE NBA", "YI SYLLABLE NBAP", "YI SYLLABLE NBOT", "YI SYLLABLE NBOX", "YI SYLLABLE NBO", "YI SYLLABLE NBOP", "YI SYLLABLE NBUT", "YI SYLLABLE NBUX", "YI SYLLABLE NBU", "YI SYLLABLE NBUP", "YI SYLLABLE NBURX", "YI SYLLABLE NBUR", "YI SYLLABLE NBYT", "YI SYLLABLE NBYX", "YI SYLLABLE NBY", "YI SYLLABLE NBYP", "YI SYLLABLE NBYRX", "YI SYLLABLE NBYR", "YI SYLLABLE HMIT", "YI SYLLABLE HMIX", "YI SYLLABLE HMI", "YI SYLLABLE HMIP", "YI SYLLABLE HMIEX", "YI SYLLABLE HMIE", "YI SYLLABLE HMIEP", "YI SYLLABLE HMAT", "YI SYLLABLE HMAX", "YI SYLLABLE HMA", "YI SYLLABLE HMAP", "YI SYLLABLE HMUOX", "YI SYLLABLE HMUO", "YI SYLLABLE HMUOP", "YI SYLLABLE HMOT", "YI SYLLABLE HMOX", "YI SYLLABLE HMO", "YI SYLLABLE HMOP", "YI SYLLABLE HMUT", "YI SYLLABLE HMUX", "YI SYLLABLE HMU", "YI SYLLABLE HMUP", "YI SYLLABLE HMURX", "YI SYLLABLE HMUR", "YI SYLLABLE HMYX", "YI SYLLABLE HMY", "YI SYLLABLE HMYP", "YI SYLLABLE HMYRX", "YI SYLLABLE HMYR", "YI SYLLABLE MIT", "YI SYLLABLE MIX", "YI SYLLABLE MI", "YI SYLLABLE MIP", "YI SYLLABLE MIEX", "YI SYLLABLE MIE", "YI SYLLABLE MIEP", "YI SYLLABLE MAT", "YI SYLLABLE MAX", "YI SYLLABLE MA", "YI SYLLABLE MAP", "YI SYLLABLE MUOT", "YI SYLLABLE MUOX", "YI SYLLABLE MUO", "YI SYLLABLE MUOP", "YI SYLLABLE MOT", "YI SYLLABLE MOX", "YI SYLLABLE MO", "YI SYLLABLE MOP", "YI SYLLABLE MEX", "YI SYLLABLE ME", "YI SYLLABLE MUT", "YI SYLLABLE MUX", "YI SYLLABLE MU", "YI SYLLABLE MUP", "YI SYLLABLE MURX", "YI SYLLABLE MUR", "YI SYLLABLE MYT", "YI SYLLABLE MYX", "YI SYLLABLE MY", "YI SYLLABLE MYP", "YI SYLLABLE FIT", "YI SYLLABLE FIX", "YI SYLLABLE FI", "YI SYLLABLE FIP", "YI SYLLABLE FAT", "YI SYLLABLE FAX", "YI SYLLABLE FA", "YI SYLLABLE FAP", "YI SYLLABLE FOX", "YI SYLLABLE FO", "YI SYLLABLE FOP", "YI SYLLABLE FUT", "YI SYLLABLE FUX", "YI SYLLABLE FU", "YI SYLLABLE FUP", "YI SYLLABLE FURX", "YI SYLLABLE FUR", "YI SYLLABLE FYT", "YI SYLLABLE FYX", "YI SYLLABLE FY", "YI SYLLABLE FYP", "YI SYLLABLE VIT", "YI SYLLABLE VIX", "YI SYLLABLE VI", "YI SYLLABLE VIP", "YI SYLLABLE VIET", "YI SYLLABLE VIEX", "YI SYLLABLE VIE", "YI SYLLABLE VIEP", "YI SYLLABLE VAT", "YI SYLLABLE VAX", "YI SYLLABLE VA", "YI SYLLABLE VAP", "YI SYLLABLE VOT", "YI SYLLABLE VOX", "YI SYLLABLE VO", "YI SYLLABLE VOP", "YI SYLLABLE VEX", "YI SYLLABLE VEP", "YI SYLLABLE VUT", "YI SYLLABLE VUX", "YI SYLLABLE VU", "YI SYLLABLE VUP", "YI SYLLABLE VURX", "YI SYLLABLE VUR", "YI SYLLABLE VYT", "YI SYLLABLE VYX", "YI SYLLABLE VY", "YI SYLLABLE VYP", "YI SYLLABLE VYRX", "YI SYLLABLE VYR", "YI SYLLABLE DIT", "YI SYLLABLE DIX", "YI SYLLABLE DI", "YI SYLLABLE DIP", "YI SYLLABLE DIEX", "YI SYLLABLE DIE", "YI SYLLABLE DIEP", "YI SYLLABLE DAT", "YI SYLLABLE DAX", "YI SYLLABLE DA", "YI SYLLABLE DAP", "YI SYLLABLE DUOX", "YI SYLLABLE DUO", "YI SYLLABLE DOT", "YI SYLLABLE DOX", "YI SYLLABLE DO", "YI SYLLABLE DOP", "YI SYLLABLE DEX", "YI SYLLABLE DE", "YI SYLLABLE DEP", "YI SYLLABLE DUT", "YI SYLLABLE DUX", "YI SYLLABLE DU", "YI SYLLABLE DUP", "YI SYLLABLE DURX", "YI SYLLABLE DUR", "YI SYLLABLE TIT", "YI SYLLABLE TIX", "YI SYLLABLE TI", "YI SYLLABLE TIP", "YI SYLLABLE TIEX", "YI SYLLABLE TIE", "YI SYLLABLE TIEP", "YI SYLLABLE TAT", "YI SYLLABLE TAX", "YI SYLLABLE TA", "YI SYLLABLE TAP", "YI SYLLABLE TUOT", "YI SYLLABLE TUOX", "YI SYLLABLE TUO", "YI SYLLABLE TUOP", "YI SYLLABLE TOT", "YI SYLLABLE TOX", "YI SYLLABLE TO", "YI SYLLABLE TOP", "YI SYLLABLE TEX", "YI SYLLABLE TE", "YI SYLLABLE TEP", "YI SYLLABLE TUT", "YI SYLLABLE TUX", "YI SYLLABLE TU", "YI SYLLABLE TUP", "YI SYLLABLE TURX", "YI SYLLABLE TUR", "YI SYLLABLE DDIT", "YI SYLLABLE DDIX", "YI SYLLABLE DDI", "YI SYLLABLE DDIP", "YI SYLLABLE DDIEX", "YI SYLLABLE DDIE", "YI SYLLABLE DDIEP", "YI SYLLABLE DDAT", "YI SYLLABLE DDAX", "YI SYLLABLE DDA", "YI SYLLABLE DDAP", "YI SYLLABLE DDUOX", "YI SYLLABLE DDUO", "YI SYLLABLE DDUOP", "YI SYLLABLE DDOT", "YI SYLLABLE DDOX", "YI SYLLABLE DDO", "YI SYLLABLE DDOP", "YI SYLLABLE DDEX", "YI SYLLABLE DDE", "YI SYLLABLE DDEP", "YI SYLLABLE DDUT", "YI SYLLABLE DDUX", "YI SYLLABLE DDU", "YI SYLLABLE DDUP", "YI SYLLABLE DDURX", "YI SYLLABLE DDUR", "YI SYLLABLE NDIT", "YI SYLLABLE NDIX", "YI SYLLABLE NDI", "YI SYLLABLE NDIP", "YI SYLLABLE NDIEX", "YI SYLLABLE NDIE", "YI SYLLABLE NDAT", "YI SYLLABLE NDAX", "YI SYLLABLE NDA", "YI SYLLABLE NDAP", "YI SYLLABLE NDOT", "YI SYLLABLE NDOX", "YI SYLLABLE NDO", "YI SYLLABLE NDOP", "YI SYLLABLE NDEX", "YI SYLLABLE NDE", "YI SYLLABLE NDEP", "YI SYLLABLE NDUT", "YI SYLLABLE NDUX", "YI SYLLABLE NDU", "YI SYLLABLE NDUP", "YI SYLLABLE NDURX", "YI SYLLABLE NDUR", "YI SYLLABLE HNIT", "YI SYLLABLE HNIX", "YI SYLLABLE HNI", "YI SYLLABLE HNIP", "YI SYLLABLE HNIET", "YI SYLLABLE HNIEX", "YI SYLLABLE HNIE", "YI SYLLABLE HNIEP", "YI SYLLABLE HNAT", "YI SYLLABLE HNAX", "YI SYLLABLE HNA", "YI SYLLABLE HNAP", "YI SYLLABLE HNUOX", "YI SYLLABLE HNUO", "YI SYLLABLE HNOT", "YI SYLLABLE HNOX", "YI SYLLABLE HNOP", "YI SYLLABLE HNEX", "YI SYLLABLE HNE", "YI SYLLABLE HNEP", "YI SYLLABLE HNUT", "YI SYLLABLE NIT", "YI SYLLABLE NIX", "YI SYLLABLE NI", "YI SYLLABLE NIP", "YI SYLLABLE NIEX", "YI SYLLABLE NIE", "YI SYLLABLE NIEP", "YI SYLLABLE NAX", "YI SYLLABLE NA", "YI SYLLABLE NAP", "YI SYLLABLE NUOX", "YI SYLLABLE NUO", "YI SYLLABLE NUOP", "YI SYLLABLE NOT", "YI SYLLABLE NOX", "YI SYLLABLE NO", "YI SYLLABLE NOP", "YI SYLLABLE NEX", "YI SYLLABLE NE", "YI SYLLABLE NEP", "YI SYLLABLE NUT", "YI SYLLABLE NUX", "YI SYLLABLE NU", "YI SYLLABLE NUP", "YI SYLLABLE NURX", "YI SYLLABLE NUR", "YI SYLLABLE HLIT", "YI SYLLABLE HLIX", "YI SYLLABLE HLI", "YI SYLLABLE HLIP", "YI SYLLABLE HLIEX", "YI SYLLABLE HLIE", "YI SYLLABLE HLIEP", "YI SYLLABLE HLAT", "YI SYLLABLE HLAX", "YI SYLLABLE HLA", "YI SYLLABLE HLAP", "YI SYLLABLE HLUOX", "YI SYLLABLE HLUO", "YI SYLLABLE HLUOP", "YI SYLLABLE HLOX", "YI SYLLABLE HLO", "YI SYLLABLE HLOP", "YI SYLLABLE HLEX", "YI SYLLABLE HLE", "YI SYLLABLE HLEP", "YI SYLLABLE HLUT", "YI SYLLABLE HLUX", "YI SYLLABLE HLU", "YI SYLLABLE HLUP", "YI SYLLABLE HLURX", "YI SYLLABLE HLUR", "YI SYLLABLE HLYT", "YI SYLLABLE HLYX", "YI SYLLABLE HLY", "YI SYLLABLE HLYP", "YI SYLLABLE HLYRX", "YI SYLLABLE HLYR", "YI SYLLABLE LIT", "YI SYLLABLE LIX", "YI SYLLABLE LI", "YI SYLLABLE LIP", "YI SYLLABLE LIET", "YI SYLLABLE LIEX", "YI SYLLABLE LIE", "YI SYLLABLE LIEP", "YI SYLLABLE LAT", "YI SYLLABLE LAX", "YI SYLLABLE LA", "YI SYLLABLE LAP", "YI SYLLABLE LUOT", "YI SYLLABLE LUOX", "YI SYLLABLE LUO", "YI SYLLABLE LUOP", "YI SYLLABLE LOT", "YI SYLLABLE LOX", "YI SYLLABLE LO", "YI SYLLABLE LOP", "YI SYLLABLE LEX", "YI SYLLABLE LE", "YI SYLLABLE LEP", "YI SYLLABLE LUT", "YI SYLLABLE LUX", "YI SYLLABLE LU", "YI SYLLABLE LUP", "YI SYLLABLE LURX", "YI SYLLABLE LUR", "YI SYLLABLE LYT", "YI SYLLABLE LYX", "YI SYLLABLE LY", "YI SYLLABLE LYP", "YI SYLLABLE LYRX", "YI SYLLABLE LYR", "YI SYLLABLE GIT", "YI SYLLABLE GIX", "YI SYLLABLE GI", "YI SYLLABLE GIP", "YI SYLLABLE GIET", "YI SYLLABLE GIEX", "YI SYLLABLE GIE", "YI SYLLABLE GIEP", "YI SYLLABLE GAT", "YI SYLLABLE GAX", "YI SYLLABLE GA", "YI SYLLABLE GAP", "YI SYLLABLE GUOT", "YI SYLLABLE GUOX", "YI SYLLABLE GUO", "YI SYLLABLE GUOP", "YI SYLLABLE GOT", "YI SYLLABLE GOX", "YI SYLLABLE GO", "YI SYLLABLE GOP", "YI SYLLABLE GET", "YI SYLLABLE GEX", "YI SYLLABLE GE", "YI SYLLABLE GEP", "YI SYLLABLE GUT", "YI SYLLABLE GUX", "YI SYLLABLE GU", "YI SYLLABLE GUP", "YI SYLLABLE GURX", "YI SYLLABLE GUR", "YI SYLLABLE KIT", "YI SYLLABLE KIX", "YI SYLLABLE KI", "YI SYLLABLE KIP", "YI SYLLABLE KIEX", "YI SYLLABLE KIE", "YI SYLLABLE KIEP", "YI SYLLABLE KAT", "YI SYLLABLE KAX", "YI SYLLABLE KA", "YI SYLLABLE KAP", "YI SYLLABLE KUOX", "YI SYLLABLE KUO", "YI SYLLABLE KUOP", "YI SYLLABLE KOT", "YI SYLLABLE KOX", "YI SYLLABLE KO", "YI SYLLABLE KOP", "YI SYLLABLE KET", "YI SYLLABLE KEX", "YI SYLLABLE KE", "YI SYLLABLE KEP", "YI SYLLABLE KUT", "YI SYLLABLE KUX", "YI SYLLABLE KU", "YI SYLLABLE KUP", "YI SYLLABLE KURX", "YI SYLLABLE KUR", "YI SYLLABLE GGIT", "YI SYLLABLE GGIX", "YI SYLLABLE GGI", "YI SYLLABLE GGIEX", "YI SYLLABLE GGIE", "YI SYLLABLE GGIEP", "YI SYLLABLE GGAT", "YI SYLLABLE GGAX", "YI SYLLABLE GGA", "YI SYLLABLE GGAP", "YI SYLLABLE GGUOT", "YI SYLLABLE GGUOX", "YI SYLLABLE GGUO", "YI SYLLABLE GGUOP", "YI SYLLABLE GGOT", "YI SYLLABLE GGOX", "YI SYLLABLE GGO", "YI SYLLABLE GGOP", "YI SYLLABLE GGET", "YI SYLLABLE GGEX", "YI SYLLABLE GGE", "YI SYLLABLE GGEP", "YI SYLLABLE GGUT", "YI SYLLABLE GGUX", "YI SYLLABLE GGU", "YI SYLLABLE GGUP", "YI SYLLABLE GGURX", "YI SYLLABLE GGUR", "YI SYLLABLE MGIEX", "YI SYLLABLE MGIE", "YI SYLLABLE MGAT", "YI SYLLABLE MGAX", "YI SYLLABLE MGA", "YI SYLLABLE MGAP", "YI SYLLABLE MGUOX", "YI SYLLABLE MGUO", "YI SYLLABLE MGUOP", "YI SYLLABLE MGOT", "YI SYLLABLE MGOX", "YI SYLLABLE MGO", "YI SYLLABLE MGOP", "YI SYLLABLE MGEX", "YI SYLLABLE MGE", "YI SYLLABLE MGEP", "YI SYLLABLE MGUT", "YI SYLLABLE MGUX", "YI SYLLABLE MGU", "YI SYLLABLE MGUP", "YI SYLLABLE MGURX", "YI SYLLABLE MGUR", "YI SYLLABLE HXIT", "YI SYLLABLE HXIX", "YI SYLLABLE HXI", "YI SYLLABLE HXIP", "YI SYLLABLE HXIET", "YI SYLLABLE HXIEX", "YI SYLLABLE HXIE", "YI SYLLABLE HXIEP", "YI SYLLABLE HXAT", "YI SYLLABLE HXAX", "YI SYLLABLE HXA", "YI SYLLABLE HXAP", "YI SYLLABLE HXUOT", "YI SYLLABLE HXUOX", "YI SYLLABLE HXUO", "YI SYLLABLE HXUOP", "YI SYLLABLE HXOT", "YI SYLLABLE HXOX", "YI SYLLABLE HXO", "YI SYLLABLE HXOP", "YI SYLLABLE HXEX", "YI SYLLABLE HXE", "YI SYLLABLE HXEP", "YI SYLLABLE NGIEX", "YI SYLLABLE NGIE", "YI SYLLABLE NGIEP", "YI SYLLABLE NGAT", "YI SYLLABLE NGAX", "YI SYLLABLE NGA", "YI SYLLABLE NGAP", "YI SYLLABLE NGUOT", "YI SYLLABLE NGUOX", "YI SYLLABLE NGUO", "YI SYLLABLE NGOT", "YI SYLLABLE NGOX", "YI SYLLABLE NGO", "YI SYLLABLE NGOP", "YI SYLLABLE NGEX", "YI SYLLABLE NGE", "YI SYLLABLE NGEP", "YI SYLLABLE HIT", "YI SYLLABLE HIEX", "YI SYLLABLE HIE", "YI SYLLABLE HAT", "YI SYLLABLE HAX", "YI SYLLABLE HA", "YI SYLLABLE HAP", "YI SYLLABLE HUOT", "YI SYLLABLE HUOX", "YI SYLLABLE HUO", "YI SYLLABLE HUOP", "YI SYLLABLE HOT", "YI SYLLABLE HOX", "YI SYLLABLE HO", "YI SYLLABLE HOP", "YI SYLLABLE HEX", "YI SYLLABLE HE", "YI SYLLABLE HEP", "YI SYLLABLE WAT", "YI SYLLABLE WAX", "YI SYLLABLE WA", "YI SYLLABLE WAP", "YI SYLLABLE WUOX", "YI SYLLABLE WUO", "YI SYLLABLE WUOP", "YI SYLLABLE WOX", "YI SYLLABLE WO", "YI SYLLABLE WOP", "YI SYLLABLE WEX", "YI SYLLABLE WE", "YI SYLLABLE WEP", "YI SYLLABLE ZIT", "YI SYLLABLE ZIX", "YI SYLLABLE ZI", "YI SYLLABLE ZIP", "YI SYLLABLE ZIEX", "YI SYLLABLE ZIE", "YI SYLLABLE ZIEP", "YI SYLLABLE ZAT", "YI SYLLABLE ZAX", "YI SYLLABLE ZA", "YI SYLLABLE ZAP", "YI SYLLABLE ZUOX", "YI SYLLABLE ZUO", "YI SYLLABLE ZUOP", "YI SYLLABLE ZOT", "YI SYLLABLE ZOX", "YI SYLLABLE ZO", "YI SYLLABLE ZOP", "YI SYLLABLE ZEX", "YI SYLLABLE ZE", "YI SYLLABLE ZEP", "YI SYLLABLE ZUT", "YI SYLLABLE ZUX", "YI SYLLABLE ZU", "YI SYLLABLE ZUP", "YI SYLLABLE ZURX", "YI SYLLABLE ZUR", "YI SYLLABLE ZYT", "YI SYLLABLE ZYX", "YI SYLLABLE ZY", "YI SYLLABLE ZYP", "YI SYLLABLE ZYRX", "YI SYLLABLE ZYR", "YI SYLLABLE CIT", "YI SYLLABLE CIX", "YI SYLLABLE CI", "YI SYLLABLE CIP", "YI SYLLABLE CIET", "YI SYLLABLE CIEX", "YI SYLLABLE CIE", "YI SYLLABLE CIEP", "YI SYLLABLE CAT", "YI SYLLABLE CAX", "YI SYLLABLE CA", "YI SYLLABLE CAP", "YI SYLLABLE CUOX", "YI SYLLABLE CUO", "YI SYLLABLE CUOP", "YI SYLLABLE COT", "YI SYLLABLE COX", "YI SYLLABLE CO", "YI SYLLABLE COP", "YI SYLLABLE CEX", "YI SYLLABLE CE", "YI SYLLABLE CEP", "YI SYLLABLE CUT", "YI SYLLABLE CUX", "YI SYLLABLE CU", "YI SYLLABLE CUP", "YI SYLLABLE CURX", "YI SYLLABLE CUR", "YI SYLLABLE CYT", "YI SYLLABLE CYX", "YI SYLLABLE CY", "YI SYLLABLE CYP", "YI SYLLABLE CYRX", "YI SYLLABLE CYR", "YI SYLLABLE ZZIT", "YI SYLLABLE ZZIX", "YI SYLLABLE ZZI", "YI SYLLABLE ZZIP", "YI SYLLABLE ZZIET", "YI SYLLABLE ZZIEX", "YI SYLLABLE ZZIE", "YI SYLLABLE ZZIEP", "YI SYLLABLE ZZAT", "YI SYLLABLE ZZAX", "YI SYLLABLE ZZA", "YI SYLLABLE ZZAP", "YI SYLLABLE ZZOX", "YI SYLLABLE ZZO", "YI SYLLABLE ZZOP", "YI SYLLABLE ZZEX", "YI SYLLABLE ZZE", "YI SYLLABLE ZZEP", "YI SYLLABLE ZZUX", "YI SYLLABLE ZZU", "YI SYLLABLE ZZUP", "YI SYLLABLE ZZURX", "YI SYLLABLE ZZUR", "YI SYLLABLE ZZYT", "YI SYLLABLE ZZYX", "YI SYLLABLE ZZY", "YI SYLLABLE ZZYP", "YI SYLLABLE ZZYRX", "YI SYLLABLE ZZYR", "YI SYLLABLE NZIT", "YI SYLLABLE NZIX", "YI SYLLABLE NZI", "YI SYLLABLE NZIP", "YI SYLLABLE NZIEX", "YI SYLLABLE NZIE", "YI SYLLABLE NZIEP", "YI SYLLABLE NZAT", "YI SYLLABLE NZAX", "YI SYLLABLE NZA", "YI SYLLABLE NZAP", "YI SYLLABLE NZUOX", "YI SYLLABLE NZUO", "YI SYLLABLE NZOX", "YI SYLLABLE NZOP", "YI SYLLABLE NZEX", "YI SYLLABLE NZE", "YI SYLLABLE NZUX", "YI SYLLABLE NZU", "YI SYLLABLE NZUP", "YI SYLLABLE NZURX", "YI SYLLABLE NZUR", "YI SYLLABLE NZYT", "YI SYLLABLE NZYX", "YI SYLLABLE NZY", "YI SYLLABLE NZYP", "YI SYLLABLE NZYRX", "YI SYLLABLE NZYR", "YI SYLLABLE SIT", "YI SYLLABLE SIX", "YI SYLLABLE SI", "YI SYLLABLE SIP", "YI SYLLABLE SIEX", "YI SYLLABLE SIE", "YI SYLLABLE SIEP", "YI SYLLABLE SAT", "YI SYLLABLE SAX", "YI SYLLABLE SA", "YI SYLLABLE SAP", "YI SYLLABLE SUOX", "YI SYLLABLE SUO", "YI SYLLABLE SUOP", "YI SYLLABLE SOT", "YI SYLLABLE SOX", "YI SYLLABLE SO", "YI SYLLABLE SOP", "YI SYLLABLE SEX", "YI SYLLABLE SE", "YI SYLLABLE SEP", "YI SYLLABLE SUT", "YI SYLLABLE SUX", "YI SYLLABLE SU", "YI SYLLABLE SUP", "YI SYLLABLE SURX", "YI SYLLABLE SUR", "YI SYLLABLE SYT", "YI SYLLABLE SYX", "YI SYLLABLE SY", "YI SYLLABLE SYP", "YI SYLLABLE SYRX", "YI SYLLABLE SYR", "YI SYLLABLE SSIT", "YI SYLLABLE SSIX", "YI SYLLABLE SSI", "YI SYLLABLE SSIP", "YI SYLLABLE SSIEX", "YI SYLLABLE SSIE", "YI SYLLABLE SSIEP", "YI SYLLABLE SSAT", "YI SYLLABLE SSAX", "YI SYLLABLE SSA", "YI SYLLABLE SSAP", "YI SYLLABLE SSOT", "YI SYLLABLE SSOX", "YI SYLLABLE SSO", "YI SYLLABLE SSOP", "YI SYLLABLE SSEX", "YI SYLLABLE SSE", "YI SYLLABLE SSEP", "YI SYLLABLE SSUT", "YI SYLLABLE SSUX", "YI SYLLABLE SSU", "YI SYLLABLE SSUP", "YI SYLLABLE SSYT", "YI SYLLABLE SSYX", "YI SYLLABLE SSY", "YI SYLLABLE SSYP", "YI SYLLABLE SSYRX", "YI SYLLABLE SSYR", "YI SYLLABLE ZHAT", "YI SYLLABLE ZHAX", "YI SYLLABLE ZHA", "YI SYLLABLE ZHAP", "YI SYLLABLE ZHUOX", "YI SYLLABLE ZHUO", "YI SYLLABLE ZHUOP", "YI SYLLABLE ZHOT", "YI SYLLABLE ZHOX", "YI SYLLABLE ZHO", "YI SYLLABLE ZHOP", "YI SYLLABLE ZHET", "YI SYLLABLE ZHEX", "YI SYLLABLE ZHE", "YI SYLLABLE ZHEP", "YI SYLLABLE ZHUT", "YI SYLLABLE ZHUX", "YI SYLLABLE ZHU", "YI SYLLABLE ZHUP", "YI SYLLABLE ZHURX", "YI SYLLABLE ZHUR", "YI SYLLABLE ZHYT", "YI SYLLABLE ZHYX", "YI SYLLABLE ZHY", "YI SYLLABLE ZHYP", "YI SYLLABLE ZHYRX", "YI SYLLABLE ZHYR", "YI SYLLABLE CHAT", "YI SYLLABLE CHAX", "YI SYLLABLE CHA", "YI SYLLABLE CHAP", "YI SYLLABLE CHUOT", "YI SYLLABLE CHUOX", "YI SYLLABLE CHUO", "YI SYLLABLE CHUOP", "YI SYLLABLE CHOT", "YI SYLLABLE CHOX", "YI SYLLABLE CHO", "YI SYLLABLE CHOP", "YI SYLLABLE CHET", "YI SYLLABLE CHEX", "YI SYLLABLE CHE", "YI SYLLABLE CHEP", "YI SYLLABLE CHUX", "YI SYLLABLE CHU", "YI SYLLABLE CHUP", "YI SYLLABLE CHURX", "YI SYLLABLE CHUR", "YI SYLLABLE CHYT", "YI SYLLABLE CHYX", "YI SYLLABLE CHY", "YI SYLLABLE CHYP", "YI SYLLABLE CHYRX", "YI SYLLABLE CHYR", "YI SYLLABLE RRAX", "YI SYLLABLE RRA", "YI SYLLABLE RRUOX", "YI SYLLABLE RRUO", "YI SYLLABLE RROT", "YI SYLLABLE RROX", "YI SYLLABLE RRO", "YI SYLLABLE RROP", "YI SYLLABLE RRET", "YI SYLLABLE RREX", "YI SYLLABLE RRE", "YI SYLLABLE RREP", "YI SYLLABLE RRUT", "YI SYLLABLE RRUX", "YI SYLLABLE RRU", "YI SYLLABLE RRUP", "YI SYLLABLE RRURX", "YI SYLLABLE RRUR", "YI SYLLABLE RRYT", "YI SYLLABLE RRYX", "YI SYLLABLE RRY", "YI SYLLABLE RRYP", "YI SYLLABLE RRYRX", "YI SYLLABLE RRYR", "YI SYLLABLE NRAT", "YI SYLLABLE NRAX", "YI SYLLABLE NRA", "YI SYLLABLE NRAP", "YI SYLLABLE NROX", "YI SYLLABLE NRO", "YI SYLLABLE NROP", "YI SYLLABLE NRET", "YI SYLLABLE NREX", "YI SYLLABLE NRE", "YI SYLLABLE NREP", "YI SYLLABLE NRUT", "YI SYLLABLE NRUX", "YI SYLLABLE NRU", "YI SYLLABLE NRUP", "YI SYLLABLE NRURX", "YI SYLLABLE NRUR", "YI SYLLABLE NRYT", "YI SYLLABLE NRYX", "YI SYLLABLE NRY", "YI SYLLABLE NRYP", "YI SYLLABLE NRYRX", "YI SYLLABLE NRYR", "YI SYLLABLE SHAT", "YI SYLLABLE SHAX", "YI SYLLABLE SHA", "YI SYLLABLE SHAP", "YI SYLLABLE SHUOX", "YI SYLLABLE SHUO", "YI SYLLABLE SHUOP", "YI SYLLABLE SHOT", "YI SYLLABLE SHOX", "YI SYLLABLE SHO", "YI SYLLABLE SHOP", "YI SYLLABLE SHET", "YI SYLLABLE SHEX", "YI SYLLABLE SHE", "YI SYLLABLE SHEP", "YI SYLLABLE SHUT", "YI SYLLABLE SHUX", "YI SYLLABLE SHU", "YI SYLLABLE SHUP", "YI SYLLABLE SHURX", "YI SYLLABLE SHUR", "YI SYLLABLE SHYT", "YI SYLLABLE SHYX", "YI SYLLABLE SHY", "YI SYLLABLE SHYP", "YI SYLLABLE SHYRX", "YI SYLLABLE SHYR", "YI SYLLABLE RAT", "YI SYLLABLE RAX", "YI SYLLABLE RA", "YI SYLLABLE RAP", "YI SYLLABLE RUOX", "YI SYLLABLE RUO", "YI SYLLABLE RUOP", "YI SYLLABLE ROT", "YI SYLLABLE ROX", "YI SYLLABLE RO", "YI SYLLABLE ROP", "YI SYLLABLE REX", "YI SYLLABLE RE", "YI SYLLABLE REP", "YI SYLLABLE RUT", "YI SYLLABLE RUX", "YI SYLLABLE RU", "YI SYLLABLE RUP", "YI SYLLABLE RURX", "YI SYLLABLE RUR", "YI SYLLABLE RYT", "YI SYLLABLE RYX", "YI SYLLABLE RY", "YI SYLLABLE RYP", "YI SYLLABLE RYRX", "YI SYLLABLE RYR", "YI SYLLABLE JIT", "YI SYLLABLE JIX", "YI SYLLABLE JI", "YI SYLLABLE JIP", "YI SYLLABLE JIET", "YI SYLLABLE JIEX", "YI SYLLABLE JIE", "YI SYLLABLE JIEP", "YI SYLLABLE JUOT", "YI SYLLABLE JUOX", "YI SYLLABLE JUO", "YI SYLLABLE JUOP", "YI SYLLABLE JOT", "YI SYLLABLE JOX", "YI SYLLABLE JO", "YI SYLLABLE JOP", "YI SYLLABLE JUT", "YI SYLLABLE JUX", "YI SYLLABLE JU", "YI SYLLABLE JUP", "YI SYLLABLE JURX", "YI SYLLABLE JUR", "YI SYLLABLE JYT", "YI SYLLABLE JYX", "YI SYLLABLE JY", "YI SYLLABLE JYP", "YI SYLLABLE JYRX", "YI SYLLABLE JYR", "YI SYLLABLE QIT", "YI SYLLABLE QIX", "YI SYLLABLE QI", "YI SYLLABLE QIP", "YI SYLLABLE QIET", "YI SYLLABLE QIEX", "YI SYLLABLE QIE", "YI SYLLABLE QIEP", "YI SYLLABLE QUOT", "YI SYLLABLE QUOX", "YI SYLLABLE QUO", "YI SYLLABLE QUOP", "YI SYLLABLE QOT", "YI SYLLABLE QOX", "YI SYLLABLE QO", "YI SYLLABLE QOP", "YI SYLLABLE QUT", "YI SYLLABLE QUX", "YI SYLLABLE QU", "YI SYLLABLE QUP", "YI SYLLABLE QURX", "YI SYLLABLE QUR", "YI SYLLABLE QYT", "YI SYLLABLE QYX", "YI SYLLABLE QY", "YI SYLLABLE QYP", "YI SYLLABLE QYRX", "YI SYLLABLE QYR", "YI SYLLABLE JJIT", "YI SYLLABLE JJIX", "YI SYLLABLE JJI", "YI SYLLABLE JJIP", "YI SYLLABLE JJIET", "YI SYLLABLE JJIEX", "YI SYLLABLE JJIE", "YI SYLLABLE JJIEP", "YI SYLLABLE JJUOX", "YI SYLLABLE JJUO", "YI SYLLABLE JJUOP", "YI SYLLABLE JJOT", "YI SYLLABLE JJOX", "YI SYLLABLE JJO", "YI SYLLABLE JJOP", "YI SYLLABLE JJUT", "YI SYLLABLE JJUX", "YI SYLLABLE JJU", "YI SYLLABLE JJUP", "YI SYLLABLE JJURX", "YI SYLLABLE JJUR", "YI SYLLABLE JJYT", "YI SYLLABLE JJYX", "YI SYLLABLE JJY", "YI SYLLABLE JJYP", "YI SYLLABLE NJIT", "YI SYLLABLE NJIX", "YI SYLLABLE NJI", "YI SYLLABLE NJIP", "YI SYLLABLE NJIET", "YI SYLLABLE NJIEX", "YI SYLLABLE NJIE", "YI SYLLABLE NJIEP", "YI SYLLABLE NJUOX", "YI SYLLABLE NJUO", "YI SYLLABLE NJOT", "YI SYLLABLE NJOX", "YI SYLLABLE NJO", "YI SYLLABLE NJOP", "YI SYLLABLE NJUX", "YI SYLLABLE NJU", "YI SYLLABLE NJUP", "YI SYLLABLE NJURX", "YI SYLLABLE NJUR", "YI SYLLABLE NJYT", "YI SYLLABLE NJYX", "YI SYLLABLE NJY", "YI SYLLABLE NJYP", "YI SYLLABLE NJYRX", "YI SYLLABLE NJYR", "YI SYLLABLE NYIT", "YI SYLLABLE NYIX", "YI SYLLABLE NYI", "YI SYLLABLE NYIP", "YI SYLLABLE NYIET", "YI SYLLABLE NYIEX", "YI SYLLABLE NYIE", "YI SYLLABLE NYIEP", "YI SYLLABLE NYUOX", "YI SYLLABLE NYUO", "YI SYLLABLE NYUOP", "YI SYLLABLE NYOT", "YI SYLLABLE NYOX", "YI SYLLABLE NYO", "YI SYLLABLE NYOP", "YI SYLLABLE NYUT", "YI SYLLABLE NYUX", "YI SYLLABLE NYU", "YI SYLLABLE NYUP", "YI SYLLABLE XIT", "YI SYLLABLE XIX", "YI SYLLABLE XI", "YI SYLLABLE XIP", "YI SYLLABLE XIET", "YI SYLLABLE XIEX", "YI SYLLABLE XIE", "YI SYLLABLE XIEP", "YI SYLLABLE XUOX", "YI SYLLABLE XUO", "YI SYLLABLE XOT", "YI SYLLABLE XOX", "YI SYLLABLE XO", "YI SYLLABLE XOP", "YI SYLLABLE XYT", "YI SYLLABLE XYX", "YI SYLLABLE XY", "YI SYLLABLE XYP", "YI SYLLABLE XYRX", "YI SYLLABLE XYR", "YI SYLLABLE YIT", "YI SYLLABLE YIX", "YI SYLLABLE YI", "YI SYLLABLE YIP", "YI SYLLABLE YIET", "YI SYLLABLE YIEX", "YI SYLLABLE YIE", "YI SYLLABLE YIEP", "YI SYLLABLE YUOT", "YI SYLLABLE YUOX", "YI SYLLABLE YUO", "YI SYLLABLE YUOP", "YI SYLLABLE YOT", "YI SYLLABLE YOX", "YI SYLLABLE YO", "YI SYLLABLE YOP", "YI SYLLABLE YUT", "YI SYLLABLE YUX", "YI SYLLABLE YU", "YI SYLLABLE YUP", "YI SYLLABLE YURX", "YI SYLLABLE YUR", "YI SYLLABLE YYT", "YI SYLLABLE YYX", "YI SYLLABLE YY", "YI SYLLABLE YYP", "YI SYLLABLE YYRX", "YI SYLLABLE YYR", "YI RADICAL QOT", "YI RADICAL LI", "YI RADICAL KIT", "YI RADICAL NYIP", "YI RADICAL CYP", "YI RADICAL SSI", "YI RADICAL GGOP", "YI RADICAL GEP", "YI RADICAL MI", "YI RADICAL HXIT", "YI RADICAL LYR", "YI RADICAL BBUT", "YI RADICAL MOP", "YI RADICAL YO", "YI RADICAL PUT", "YI RADICAL HXUO", "YI RADICAL TAT", "YI RADICAL GA", "YI RADICAL ZUP", "YI RADICAL CYT", "YI RADICAL DDUR", "YI RADICAL BUR", "YI RADICAL GGUO", "YI RADICAL NYOP", "YI RADICAL TU", "YI RADICAL OP", "YI RADICAL JJUT", "YI RADICAL ZOT", "YI RADICAL PYT", "YI RADICAL HMO", "YI RADICAL YIT", "YI RADICAL VUR", "YI RADICAL SHY", "YI RADICAL VEP", "YI RADICAL ZA", "YI RADICAL JO", "YI RADICAL NZUP", "YI RADICAL JJY", "YI RADICAL GOT", "YI RADICAL JJIE", "YI RADICAL WO", "YI RADICAL DU", "YI RADICAL SHUR", "YI RADICAL LIE", "YI RADICAL CY", "YI RADICAL CUOP", "YI RADICAL CIP", "YI RADICAL HXOP", "YI RADICAL SHAT", "YI RADICAL ZUR", "YI RADICAL SHOP", "YI RADICAL CHE", "YI RADICAL ZZIET", "YI RADICAL NBIE", "YI RADICAL KE", "LISU LETTER BA", "LISU LETTER PA", "LISU LETTER PHA", "LISU LETTER DA", "LISU LETTER TA", "LISU LETTER THA", "LISU LETTER GA", "LISU LETTER KA", "LISU LETTER KHA", "LISU LETTER JA", "LISU LETTER CA", "LISU LETTER CHA", "LISU LETTER DZA", "LISU LETTER TSA", "LISU LETTER TSHA", "LISU LETTER MA", "LISU LETTER NA", "LISU LETTER LA", "LISU LETTER SA", "LISU LETTER ZHA", "LISU LETTER ZA", "LISU LETTER NGA", "LISU LETTER HA", "LISU LETTER XA", "LISU LETTER HHA", "LISU LETTER FA", "LISU LETTER WA", "LISU LETTER SHA", "LISU LETTER YA", "LISU LETTER GHA", "LISU LETTER A", "LISU LETTER AE", "LISU LETTER E", "LISU LETTER EU", "LISU LETTER I", "LISU LETTER O", "LISU LETTER U", "LISU LETTER UE", "LISU LETTER UH", "LISU LETTER OE", "LISU LETTER TONE MYA TI", "LISU LETTER TONE NA PO", "LISU LETTER TONE MYA CYA", "LISU LETTER TONE MYA BO", "LISU LETTER TONE MYA NA", "LISU LETTER TONE MYA JEU", "LISU PUNCTUATION COMMA", "LISU PUNCTUATION FULL STOP", "VAI SYLLABLE EE", "VAI SYLLABLE EEN", "VAI SYLLABLE HEE", "VAI SYLLABLE WEE", "VAI SYLLABLE WEEN", "VAI SYLLABLE PEE", "VAI SYLLABLE BHEE", "VAI SYLLABLE BEE", "VAI SYLLABLE MBEE", "VAI SYLLABLE KPEE", "VAI SYLLABLE MGBEE", "VAI SYLLABLE GBEE", "VAI SYLLABLE FEE", "VAI SYLLABLE VEE", "VAI SYLLABLE TEE", "VAI SYLLABLE THEE", "VAI SYLLABLE DHEE", "VAI SYLLABLE DHHEE", "VAI SYLLABLE LEE", "VAI SYLLABLE REE", "VAI SYLLABLE DEE", "VAI SYLLABLE NDEE", "VAI SYLLABLE SEE", "VAI SYLLABLE SHEE", "VAI SYLLABLE ZEE", "VAI SYLLABLE ZHEE", "VAI SYLLABLE CEE", "VAI SYLLABLE JEE", "VAI SYLLABLE NJEE", "VAI SYLLABLE YEE", "VAI SYLLABLE KEE", "VAI SYLLABLE NGGEE", "VAI SYLLABLE GEE", "VAI SYLLABLE MEE", "VAI SYLLABLE NEE", "VAI SYLLABLE NYEE", "VAI SYLLABLE I", "VAI SYLLABLE IN", "VAI SYLLABLE HI", "VAI SYLLABLE HIN", "VAI SYLLABLE WI", "VAI SYLLABLE WIN", "VAI SYLLABLE PI", "VAI SYLLABLE BHI", "VAI SYLLABLE BI", "VAI SYLLABLE MBI", "VAI SYLLABLE KPI", "VAI SYLLABLE MGBI", "VAI SYLLABLE GBI", "VAI SYLLABLE FI", "VAI SYLLABLE VI", "VAI SYLLABLE TI", "VAI SYLLABLE THI", "VAI SYLLABLE DHI", "VAI SYLLABLE DHHI", "VAI SYLLABLE LI", "VAI SYLLABLE RI", "VAI SYLLABLE DI", "VAI SYLLABLE NDI", "VAI SYLLABLE SI", "VAI SYLLABLE SHI", "VAI SYLLABLE ZI", "VAI SYLLABLE ZHI", "VAI SYLLABLE CI", "VAI SYLLABLE JI", "VAI SYLLABLE NJI", "VAI SYLLABLE YI", "VAI SYLLABLE KI", "VAI SYLLABLE NGGI", "VAI SYLLABLE GI", "VAI SYLLABLE MI", "VAI SYLLABLE NI", "VAI SYLLABLE NYI", "VAI SYLLABLE A", "VAI SYLLABLE AN", "VAI SYLLABLE NGAN", "VAI SYLLABLE HA", "VAI SYLLABLE HAN", "VAI SYLLABLE WA", "VAI SYLLABLE WAN", "VAI SYLLABLE PA", "VAI SYLLABLE BHA", "VAI SYLLABLE BA", "VAI SYLLABLE MBA", "VAI SYLLABLE KPA", "VAI SYLLABLE KPAN", "VAI SYLLABLE MGBA", "VAI SYLLABLE GBA", "VAI SYLLABLE FA", "VAI SYLLABLE VA", "VAI SYLLABLE TA", "VAI SYLLABLE THA", "VAI SYLLABLE DHA", "VAI SYLLABLE DHHA", "VAI SYLLABLE LA", "VAI SYLLABLE RA", "VAI SYLLABLE DA", "VAI SYLLABLE NDA", "VAI SYLLABLE SA", "VAI SYLLABLE SHA", "VAI SYLLABLE ZA", "VAI SYLLABLE ZHA", "VAI SYLLABLE CA", "VAI SYLLABLE JA", "VAI SYLLABLE NJA", "VAI SYLLABLE YA", "VAI SYLLABLE KA", "VAI SYLLABLE KAN", "VAI SYLLABLE NGGA", "VAI SYLLABLE GA", "VAI SYLLABLE MA", "VAI SYLLABLE NA", "VAI SYLLABLE NYA", "VAI SYLLABLE OO", "VAI SYLLABLE OON", "VAI SYLLABLE HOO", "VAI SYLLABLE WOO", "VAI SYLLABLE WOON", "VAI SYLLABLE POO", "VAI SYLLABLE BHOO", "VAI SYLLABLE BOO", "VAI SYLLABLE MBOO", "VAI SYLLABLE KPOO", "VAI SYLLABLE MGBOO", "VAI SYLLABLE GBOO", "VAI SYLLABLE FOO", "VAI SYLLABLE VOO", "VAI SYLLABLE TOO", "VAI SYLLABLE THOO", "VAI SYLLABLE DHOO", "VAI SYLLABLE DHHOO", "VAI SYLLABLE LOO", "VAI SYLLABLE ROO", "VAI SYLLABLE DOO", "VAI SYLLABLE NDOO", "VAI SYLLABLE SOO", "VAI SYLLABLE SHOO", "VAI SYLLABLE ZOO", "VAI SYLLABLE ZHOO", "VAI SYLLABLE COO", "VAI SYLLABLE JOO", "VAI SYLLABLE NJOO", "VAI SYLLABLE YOO", "VAI SYLLABLE KOO", "VAI SYLLABLE NGGOO", "VAI SYLLABLE GOO", "VAI SYLLABLE MOO", "VAI SYLLABLE NOO", "VAI SYLLABLE NYOO", "VAI SYLLABLE U", "VAI SYLLABLE UN", "VAI SYLLABLE HU", "VAI SYLLABLE HUN", "VAI SYLLABLE WU", "VAI SYLLABLE WUN", "VAI SYLLABLE PU", "VAI SYLLABLE BHU", "VAI SYLLABLE BU", "VAI SYLLABLE MBU", "VAI SYLLABLE KPU", "VAI SYLLABLE MGBU", "VAI SYLLABLE GBU", "VAI SYLLABLE FU", "VAI SYLLABLE VU", "VAI SYLLABLE TU", "VAI SYLLABLE THU", "VAI SYLLABLE DHU", "VAI SYLLABLE DHHU", "VAI SYLLABLE LU", "VAI SYLLABLE RU", "VAI SYLLABLE DU", "VAI SYLLABLE NDU", "VAI SYLLABLE SU", "VAI SYLLABLE SHU", "VAI SYLLABLE ZU", "VAI SYLLABLE ZHU", "VAI SYLLABLE CU", "VAI SYLLABLE JU", "VAI SYLLABLE NJU", "VAI SYLLABLE YU", "VAI SYLLABLE KU", "VAI SYLLABLE NGGU", "VAI SYLLABLE GU", "VAI SYLLABLE MU", "VAI SYLLABLE NU", "VAI SYLLABLE NYU", "VAI SYLLABLE O", "VAI SYLLABLE ON", "VAI SYLLABLE NGON", "VAI SYLLABLE HO", "VAI SYLLABLE HON", "VAI SYLLABLE WO", "VAI SYLLABLE WON", "VAI SYLLABLE PO", "VAI SYLLABLE BHO", "VAI SYLLABLE BO", "VAI SYLLABLE MBO", "VAI SYLLABLE KPO", "VAI SYLLABLE MGBO", "VAI SYLLABLE GBO", "VAI SYLLABLE GBON", "VAI SYLLABLE FO", "VAI SYLLABLE VO", "VAI SYLLABLE TO", "VAI SYLLABLE THO", "VAI SYLLABLE DHO", "VAI SYLLABLE DHHO", "VAI SYLLABLE LO", "VAI SYLLABLE RO", "VAI SYLLABLE DO", "VAI SYLLABLE NDO", "VAI SYLLABLE SO", "VAI SYLLABLE SHO", "VAI SYLLABLE ZO", "VAI SYLLABLE ZHO", "VAI SYLLABLE CO", "VAI SYLLABLE JO", "VAI SYLLABLE NJO", "VAI SYLLABLE YO", "VAI SYLLABLE KO", "VAI SYLLABLE NGGO", "VAI SYLLABLE GO", "VAI SYLLABLE MO", "VAI SYLLABLE NO", "VAI SYLLABLE NYO", "VAI SYLLABLE E", "VAI SYLLABLE EN", "VAI SYLLABLE NGEN", "VAI SYLLABLE HE", "VAI SYLLABLE HEN", "VAI SYLLABLE WE", "VAI SYLLABLE WEN", "VAI SYLLABLE PE", "VAI SYLLABLE BHE", "VAI SYLLABLE BE", "VAI SYLLABLE MBE", "VAI SYLLABLE KPE", "VAI SYLLABLE KPEN", "VAI SYLLABLE MGBE", "VAI SYLLABLE GBE", "VAI SYLLABLE GBEN", "VAI SYLLABLE FE", "VAI SYLLABLE VE", "VAI SYLLABLE TE", "VAI SYLLABLE THE", "VAI SYLLABLE DHE", "VAI SYLLABLE DHHE", "VAI SYLLABLE LE", "VAI SYLLABLE RE", "VAI SYLLABLE DE", "VAI SYLLABLE NDE", "VAI SYLLABLE SE", "VAI SYLLABLE SHE", "VAI SYLLABLE ZE", "VAI SYLLABLE ZHE", "VAI SYLLABLE CE", "VAI SYLLABLE JE", "VAI SYLLABLE NJE", "VAI SYLLABLE YE", "VAI SYLLABLE KE", "VAI SYLLABLE NGGE", "VAI SYLLABLE NGGEN", "VAI SYLLABLE GE", "VAI SYLLABLE GEN", "VAI SYLLABLE ME", "VAI SYLLABLE NE", "VAI SYLLABLE NYE", "VAI SYLLABLE NG", "VAI SYLLABLE LENGTHENER", "VAI COMMA", "VAI FULL STOP", "VAI QUESTION MARK", "VAI SYLLABLE NDOLE FA", "VAI SYLLABLE NDOLE KA", "VAI SYLLABLE NDOLE SOO", "VAI SYMBOL FEENG", "VAI SYMBOL KEENG", "VAI SYMBOL TING", "VAI SYMBOL NII", "VAI SYMBOL BANG", "VAI SYMBOL FAA", "VAI SYMBOL TAA", "VAI SYMBOL DANG", "VAI SYMBOL DOONG", "VAI SYMBOL KUNG", "VAI SYMBOL TONG", "VAI SYMBOL DO-O", "VAI SYMBOL JONG", "VAI DIGIT ZERO", "VAI DIGIT ONE", "VAI DIGIT TWO", "VAI DIGIT THREE", "VAI DIGIT FOUR", "VAI DIGIT FIVE", "VAI DIGIT SIX", "VAI DIGIT SEVEN", "VAI DIGIT EIGHT", "VAI DIGIT NINE", "VAI SYLLABLE NDOLE MA", "VAI SYLLABLE NDOLE DO", "CYRILLIC CAPITAL LETTER ZEMLYA", "CYRILLIC SMALL LETTER ZEMLYA", "CYRILLIC CAPITAL LETTER DZELO", "CYRILLIC SMALL LETTER DZELO", "CYRILLIC CAPITAL LETTER REVERSED DZE", "CYRILLIC SMALL LETTER REVERSED DZE", "CYRILLIC CAPITAL LETTER IOTA", "CYRILLIC SMALL LETTER IOTA", "CYRILLIC CAPITAL LETTER DJERV", "CYRILLIC SMALL LETTER DJERV", "CYRILLIC CAPITAL LETTER MONOGRAPH UK", "CYRILLIC SMALL LETTER MONOGRAPH UK", "CYRILLIC CAPITAL LETTER BROAD OMEGA", "CYRILLIC SMALL LETTER BROAD OMEGA", "CYRILLIC CAPITAL LETTER NEUTRAL YER", "CYRILLIC SMALL LETTER NEUTRAL YER", "CYRILLIC CAPITAL LETTER YERU WITH BACK YER", "CYRILLIC SMALL LETTER YERU WITH BACK YER", "CYRILLIC CAPITAL LETTER IOTIFIED YAT", "CYRILLIC SMALL LETTER IOTIFIED YAT", "CYRILLIC CAPITAL LETTER REVERSED YU", "CYRILLIC SMALL LETTER REVERSED YU", "CYRILLIC CAPITAL LETTER IOTIFIED A", "CYRILLIC SMALL LETTER IOTIFIED A", "CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS", "CYRILLIC SMALL LETTER CLOSED LITTLE YUS", "CYRILLIC CAPITAL LETTER BLENDED YUS", "CYRILLIC SMALL LETTER BLENDED YUS", "CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS", "CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS", "CYRILLIC CAPITAL LETTER YN", "CYRILLIC SMALL LETTER YN", "CYRILLIC CAPITAL LETTER REVERSED TSE", "CYRILLIC SMALL LETTER REVERSED TSE", "CYRILLIC CAPITAL LETTER SOFT DE", "CYRILLIC SMALL LETTER SOFT DE", "CYRILLIC CAPITAL LETTER SOFT EL", "CYRILLIC SMALL LETTER SOFT EL", "CYRILLIC CAPITAL LETTER SOFT EM", "CYRILLIC SMALL LETTER SOFT EM", "CYRILLIC CAPITAL LETTER MONOCULAR O", "CYRILLIC SMALL LETTER MONOCULAR O", "CYRILLIC CAPITAL LETTER BINOCULAR O", "CYRILLIC SMALL LETTER BINOCULAR O", "CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O", "CYRILLIC SMALL LETTER DOUBLE MONOCULAR O", "CYRILLIC LETTER MULTIOCULAR O", "COMBINING CYRILLIC VZMET", "COMBINING CYRILLIC TEN MILLIONS SIGN", "COMBINING CYRILLIC HUNDRED MILLIONS SIGN", "COMBINING CYRILLIC THOUSAND MILLIONS SIGN", "SLAVONIC ASTERISK", "COMBINING CYRILLIC LETTER UKRAINIAN IE", "COMBINING CYRILLIC LETTER I", "COMBINING CYRILLIC LETTER YI", "COMBINING CYRILLIC LETTER U", "COMBINING CYRILLIC LETTER HARD SIGN", "COMBINING CYRILLIC LETTER YERU", "COMBINING CYRILLIC LETTER SOFT SIGN", "COMBINING CYRILLIC LETTER OMEGA", "COMBINING CYRILLIC KAVYKA", "COMBINING CYRILLIC PAYEROK", "CYRILLIC KAVYKA", "CYRILLIC PAYEROK", "CYRILLIC CAPITAL LETTER DWE", "CYRILLIC SMALL LETTER DWE", "CYRILLIC CAPITAL LETTER DZWE", "CYRILLIC SMALL LETTER DZWE", "CYRILLIC CAPITAL LETTER ZHWE", "CYRILLIC SMALL LETTER ZHWE", "CYRILLIC CAPITAL LETTER CCHE", "CYRILLIC SMALL LETTER CCHE", "CYRILLIC CAPITAL LETTER DZZE", "CYRILLIC SMALL LETTER DZZE", "CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER TWE", "CYRILLIC SMALL LETTER TWE", "CYRILLIC CAPITAL LETTER TSWE", "CYRILLIC SMALL LETTER TSWE", "CYRILLIC CAPITAL LETTER TSSE", "CYRILLIC SMALL LETTER TSSE", "CYRILLIC CAPITAL LETTER TCHE", "CYRILLIC SMALL LETTER TCHE", "CYRILLIC CAPITAL LETTER HWE", "CYRILLIC SMALL LETTER HWE", "CYRILLIC CAPITAL LETTER SHWE", "CYRILLIC SMALL LETTER SHWE", "CYRILLIC CAPITAL LETTER DOUBLE O", "CYRILLIC SMALL LETTER DOUBLE O", "CYRILLIC CAPITAL LETTER CROSSED O", "CYRILLIC SMALL LETTER CROSSED O", "MODIFIER LETTER CYRILLIC HARD SIGN", "MODIFIER LETTER CYRILLIC SOFT SIGN", "COMBINING CYRILLIC LETTER EF", "COMBINING CYRILLIC LETTER IOTIFIED E", "BAMUM LETTER A", "BAMUM LETTER KA", "BAMUM LETTER U", "BAMUM LETTER KU", "BAMUM LETTER EE", "BAMUM LETTER REE", "BAMUM LETTER TAE", "BAMUM LETTER O", "BAMUM LETTER NYI", "BAMUM LETTER I", "BAMUM LETTER LA", "BAMUM LETTER PA", "BAMUM LETTER RII", "BAMUM LETTER RIEE", "BAMUM LETTER LEEEE", "BAMUM LETTER MEEEE", "BAMUM LETTER TAA", "BAMUM LETTER NDAA", "BAMUM LETTER NJAEM", "BAMUM LETTER M", "BAMUM LETTER SUU", "BAMUM LETTER MU", "BAMUM LETTER SHII", "BAMUM LETTER SI", "BAMUM LETTER SHEUX", "BAMUM LETTER SEUX", "BAMUM LETTER KYEE", "BAMUM LETTER KET", "BAMUM LETTER NUAE", "BAMUM LETTER NU", "BAMUM LETTER NJUAE", "BAMUM LETTER YOQ", "BAMUM LETTER SHU", "BAMUM LETTER YUQ", "BAMUM LETTER YA", "BAMUM LETTER NSHA", "BAMUM LETTER KEUX", "BAMUM LETTER PEUX", "BAMUM LETTER NJEE", "BAMUM LETTER NTEE", "BAMUM LETTER PUE", "BAMUM LETTER WUE", "BAMUM LETTER PEE", "BAMUM LETTER FEE", "BAMUM LETTER RU", "BAMUM LETTER LU", "BAMUM LETTER MI", "BAMUM LETTER NI", "BAMUM LETTER REUX", "BAMUM LETTER RAE", "BAMUM LETTER KEN", "BAMUM LETTER NGKWAEN", "BAMUM LETTER NGGA", "BAMUM LETTER NGA", "BAMUM LETTER SHO", "BAMUM LETTER PUAE", "BAMUM LETTER FU", "BAMUM LETTER FOM", "BAMUM LETTER WA", "BAMUM LETTER NA", "BAMUM LETTER LI", "BAMUM LETTER PI", "BAMUM LETTER LOQ", "BAMUM LETTER KO", "BAMUM LETTER MBEN", "BAMUM LETTER REN", "BAMUM LETTER MEN", "BAMUM LETTER MA", "BAMUM LETTER TI", "BAMUM LETTER KI", "BAMUM LETTER MO", "BAMUM LETTER MBAA", "BAMUM LETTER TET", "BAMUM LETTER KPA", "BAMUM LETTER TEN", "BAMUM LETTER NTUU", "BAMUM LETTER SAMBA", "BAMUM LETTER FAAMAE", "BAMUM LETTER KOVUU", "BAMUM LETTER KOGHOM", "BAMUM COMBINING MARK KOQNDON", "BAMUM COMBINING MARK TUKWENTIS", "BAMUM NJAEMLI", "BAMUM FULL STOP", "BAMUM COLON", "BAMUM COMMA", "BAMUM SEMICOLON", "BAMUM QUESTION MARK", "MODIFIER LETTER CHINESE TONE YIN PING", "MODIFIER LETTER CHINESE TONE YANG PING", "MODIFIER LETTER CHINESE TONE YIN SHANG", "MODIFIER LETTER CHINESE TONE YANG SHANG", "MODIFIER LETTER CHINESE TONE YIN QU", "MODIFIER LETTER CHINESE TONE YANG QU", "MODIFIER LETTER CHINESE TONE YIN RU", "MODIFIER LETTER CHINESE TONE YANG RU", "MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR", "MODIFIER LETTER HIGH DOTTED TONE BAR", "MODIFIER LETTER MID DOTTED TONE BAR", "MODIFIER LETTER LOW DOTTED TONE BAR", "MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR", "MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR", "MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR", "MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR", "MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR", "MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR", "MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR", "MODIFIER LETTER HIGH LEFT-STEM TONE BAR", "MODIFIER LETTER MID LEFT-STEM TONE BAR", "MODIFIER LETTER LOW LEFT-STEM TONE BAR", "MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR", "MODIFIER LETTER DOT VERTICAL BAR", "MODIFIER LETTER DOT SLASH", "MODIFIER LETTER DOT HORIZONTAL BAR", "MODIFIER LETTER LOWER RIGHT CORNER ANGLE", "MODIFIER LETTER RAISED UP ARROW", "MODIFIER LETTER RAISED DOWN ARROW", "MODIFIER LETTER RAISED EXCLAMATION MARK", "MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK", "MODIFIER LETTER LOW INVERTED EXCLAMATION MARK", "MODIFIER LETTER STRESS AND HIGH TONE", "MODIFIER LETTER STRESS AND LOW TONE", "LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF", "LATIN SMALL LETTER EGYPTOLOGICAL ALEF", "LATIN CAPITAL LETTER EGYPTOLOGICAL AIN", "LATIN SMALL LETTER EGYPTOLOGICAL AIN", "LATIN CAPITAL LETTER HENG", "LATIN SMALL LETTER HENG", "LATIN CAPITAL LETTER TZ", "LATIN SMALL LETTER TZ", "LATIN CAPITAL LETTER TRESILLO", "LATIN SMALL LETTER TRESILLO", "LATIN CAPITAL LETTER CUATRILLO", "LATIN SMALL LETTER CUATRILLO", "LATIN CAPITAL LETTER CUATRILLO WITH COMMA", "LATIN SMALL LETTER CUATRILLO WITH COMMA", "LATIN LETTER SMALL CAPITAL F", "LATIN LETTER SMALL CAPITAL S", "LATIN CAPITAL LETTER AA", "LATIN SMALL LETTER AA", "LATIN CAPITAL LETTER AO", "LATIN SMALL LETTER AO", "LATIN CAPITAL LETTER AU", "LATIN SMALL LETTER AU", "LATIN CAPITAL LETTER AV", "LATIN SMALL LETTER AV", "LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR", "LATIN SMALL LETTER AV WITH HORIZONTAL BAR", "LATIN CAPITAL LETTER AY", "LATIN SMALL LETTER AY", "LATIN CAPITAL LETTER REVERSED C WITH DOT", "LATIN SMALL LETTER REVERSED C WITH DOT", "LATIN CAPITAL LETTER K WITH STROKE", "LATIN SMALL LETTER K WITH STROKE", "LATIN CAPITAL LETTER K WITH DIAGONAL STROKE", "LATIN SMALL LETTER K WITH DIAGONAL STROKE", "LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE", "LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE", "LATIN CAPITAL LETTER BROKEN L", "LATIN SMALL LETTER BROKEN L", "LATIN CAPITAL LETTER L WITH HIGH STROKE", "LATIN SMALL LETTER L WITH HIGH STROKE", "LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY", "LATIN SMALL LETTER O WITH LONG STROKE OVERLAY", "LATIN CAPITAL LETTER O WITH LOOP", "LATIN SMALL LETTER O WITH LOOP", "LATIN CAPITAL LETTER OO", "LATIN SMALL LETTER OO", "LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER", "LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER", "LATIN CAPITAL LETTER P WITH FLOURISH", "LATIN SMALL LETTER P WITH FLOURISH", "LATIN CAPITAL LETTER P WITH SQUIRREL TAIL", "LATIN SMALL LETTER P WITH SQUIRREL TAIL", "LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER", "LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER", "LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE", "LATIN SMALL LETTER Q WITH DIAGONAL STROKE", "LATIN CAPITAL LETTER R ROTUNDA", "LATIN SMALL LETTER R ROTUNDA", "LATIN CAPITAL LETTER RUM ROTUNDA", "LATIN SMALL LETTER RUM ROTUNDA", "LATIN CAPITAL LETTER V WITH DIAGONAL STROKE", "LATIN SMALL LETTER V WITH DIAGONAL STROKE", "LATIN CAPITAL LETTER VY", "LATIN SMALL LETTER VY", "LATIN CAPITAL LETTER VISIGOTHIC Z", "LATIN SMALL LETTER VISIGOTHIC Z", "LATIN CAPITAL LETTER THORN WITH STROKE", "LATIN SMALL LETTER THORN WITH STROKE", "LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER", "LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER", "LATIN CAPITAL LETTER VEND", "LATIN SMALL LETTER VEND", "LATIN CAPITAL LETTER ET", "LATIN SMALL LETTER ET", "LATIN CAPITAL LETTER IS", "LATIN SMALL LETTER IS", "LATIN CAPITAL LETTER CON", "LATIN SMALL LETTER CON", "MODIFIER LETTER US", "LATIN SMALL LETTER DUM", "LATIN SMALL LETTER LUM", "LATIN SMALL LETTER MUM", "LATIN SMALL LETTER NUM", "LATIN SMALL LETTER RUM", "LATIN LETTER SMALL CAPITAL RUM", "LATIN SMALL LETTER TUM", "LATIN SMALL LETTER UM", "LATIN CAPITAL LETTER INSULAR D", "LATIN SMALL LETTER INSULAR D", "LATIN CAPITAL LETTER INSULAR F", "LATIN SMALL LETTER INSULAR F", "LATIN CAPITAL LETTER INSULAR G", "LATIN CAPITAL LETTER TURNED INSULAR G", "LATIN SMALL LETTER TURNED INSULAR G", "LATIN CAPITAL LETTER TURNED L", "LATIN SMALL LETTER TURNED L", "LATIN CAPITAL LETTER INSULAR R", "LATIN SMALL LETTER INSULAR R", "LATIN CAPITAL LETTER INSULAR S", "LATIN SMALL LETTER INSULAR S", "LATIN CAPITAL LETTER INSULAR T", "LATIN SMALL LETTER INSULAR T", "MODIFIER LETTER LOW CIRCUMFLEX ACCENT", "MODIFIER LETTER COLON", "MODIFIER LETTER SHORT EQUALS SIGN", "LATIN CAPITAL LETTER SALTILLO", "LATIN SMALL LETTER SALTILLO", "LATIN CAPITAL LETTER TURNED H", "LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT", "LATIN LETTER SINOLOGICAL DOT", "LATIN CAPITAL LETTER N WITH DESCENDER", "LATIN SMALL LETTER N WITH DESCENDER", "LATIN CAPITAL LETTER C WITH BAR", "LATIN SMALL LETTER C WITH BAR", "LATIN SMALL LETTER C WITH PALATAL HOOK", "LATIN SMALL LETTER H WITH PALATAL HOOK", "LATIN CAPITAL LETTER B WITH FLOURISH", "LATIN SMALL LETTER B WITH FLOURISH", "LATIN CAPITAL LETTER F WITH STROKE", "LATIN SMALL LETTER F WITH STROKE", "LATIN CAPITAL LETTER VOLAPUK AE", "LATIN SMALL LETTER VOLAPUK AE", "LATIN CAPITAL LETTER VOLAPUK OE", "LATIN SMALL LETTER VOLAPUK OE", "LATIN CAPITAL LETTER VOLAPUK UE", "LATIN SMALL LETTER VOLAPUK UE", "LATIN CAPITAL LETTER G WITH OBLIQUE STROKE", "LATIN SMALL LETTER G WITH OBLIQUE STROKE", "LATIN CAPITAL LETTER K WITH OBLIQUE STROKE", "LATIN SMALL LETTER K WITH OBLIQUE STROKE", "LATIN CAPITAL LETTER N WITH OBLIQUE STROKE", "LATIN SMALL LETTER N WITH OBLIQUE STROKE", "LATIN CAPITAL LETTER R WITH OBLIQUE STROKE", "LATIN SMALL LETTER R WITH OBLIQUE STROKE", "LATIN CAPITAL LETTER S WITH OBLIQUE STROKE", "LATIN SMALL LETTER S WITH OBLIQUE STROKE", "LATIN CAPITAL LETTER H WITH HOOK", "LATIN CAPITAL LETTER REVERSED OPEN E", "LATIN CAPITAL LETTER SCRIPT G", "LATIN CAPITAL LETTER L WITH BELT", "LATIN CAPITAL LETTER SMALL CAPITAL I", "LATIN LETTER SMALL CAPITAL Q", "LATIN CAPITAL LETTER TURNED K", "LATIN CAPITAL LETTER TURNED T", "LATIN CAPITAL LETTER J WITH CROSSED-TAIL", "LATIN CAPITAL LETTER CHI", "LATIN CAPITAL LETTER BETA", "LATIN SMALL LETTER BETA", "LATIN CAPITAL LETTER OMEGA", "LATIN SMALL LETTER OMEGA", "LATIN CAPITAL LETTER U WITH STROKE", "LATIN SMALL LETTER U WITH STROKE", "LATIN CAPITAL LETTER GLOTTAL A", "LATIN SMALL LETTER GLOTTAL A", "LATIN CAPITAL LETTER GLOTTAL I", "LATIN SMALL LETTER GLOTTAL I", "LATIN CAPITAL LETTER GLOTTAL U", "LATIN SMALL LETTER GLOTTAL U", "LATIN CAPITAL LETTER ANGLICANA W", "LATIN SMALL LETTER ANGLICANA W", "LATIN CAPITAL LETTER C WITH PALATAL HOOK", "LATIN CAPITAL LETTER S WITH HOOK", "LATIN CAPITAL LETTER Z WITH PALATAL HOOK", "LATIN EPIGRAPHIC LETTER SIDEWAYS I", "MODIFIER LETTER CAPITAL H WITH STROKE", "MODIFIER LETTER SMALL LIGATURE OE", "LATIN LETTER SMALL CAPITAL TURNED M", "LATIN EPIGRAPHIC LETTER REVERSED F", "LATIN EPIGRAPHIC LETTER REVERSED P", "LATIN EPIGRAPHIC LETTER INVERTED M", "LATIN EPIGRAPHIC LETTER I LONGA", "LATIN EPIGRAPHIC LETTER ARCHAIC M", "SYLOTI NAGRI LETTER A", "SYLOTI NAGRI LETTER I", "SYLOTI NAGRI SIGN DVISVARA", "SYLOTI NAGRI LETTER U", "SYLOTI NAGRI LETTER E", "SYLOTI NAGRI LETTER O", "SYLOTI NAGRI SIGN HASANTA", "SYLOTI NAGRI LETTER KO", "SYLOTI NAGRI LETTER KHO", "SYLOTI NAGRI LETTER GO", "SYLOTI NAGRI LETTER GHO", "SYLOTI NAGRI SIGN ANUSVARA", "SYLOTI NAGRI LETTER CO", "SYLOTI NAGRI LETTER CHO", "SYLOTI NAGRI LETTER JO", "SYLOTI NAGRI LETTER JHO", "SYLOTI NAGRI LETTER TTO", "SYLOTI NAGRI LETTER TTHO", "SYLOTI NAGRI LETTER DDO", "SYLOTI NAGRI LETTER DDHO", "SYLOTI NAGRI LETTER TO", "SYLOTI NAGRI LETTER THO", "SYLOTI NAGRI LETTER DO", "SYLOTI NAGRI LETTER DHO", "SYLOTI NAGRI LETTER NO", "SYLOTI NAGRI LETTER PO", "SYLOTI NAGRI LETTER PHO", "SYLOTI NAGRI LETTER BO", "SYLOTI NAGRI LETTER BHO", "SYLOTI NAGRI LETTER MO", "SYLOTI NAGRI LETTER RO", "SYLOTI NAGRI LETTER LO", "SYLOTI NAGRI LETTER RRO", "SYLOTI NAGRI LETTER SO", "SYLOTI NAGRI LETTER HO", "SYLOTI NAGRI VOWEL SIGN A", "SYLOTI NAGRI VOWEL SIGN I", "SYLOTI NAGRI VOWEL SIGN U", "SYLOTI NAGRI VOWEL SIGN E", "SYLOTI NAGRI VOWEL SIGN OO", "SYLOTI NAGRI POETRY MARK-1", "SYLOTI NAGRI POETRY MARK-2", "SYLOTI NAGRI POETRY MARK-3", "SYLOTI NAGRI POETRY MARK-4", "NORTH INDIC FRACTION ONE QUARTER", "NORTH INDIC FRACTION ONE HALF", "NORTH INDIC FRACTION THREE QUARTERS", "NORTH INDIC FRACTION ONE SIXTEENTH", "NORTH INDIC FRACTION ONE EIGHTH", "NORTH INDIC FRACTION THREE SIXTEENTHS", "NORTH INDIC QUARTER MARK", "NORTH INDIC PLACEHOLDER MARK", "NORTH INDIC RUPEE MARK", "NORTH INDIC QUANTITY MARK", "PHAGS-PA LETTER KA", "PHAGS-PA LETTER KHA", "PHAGS-PA LETTER GA", "PHAGS-PA LETTER NGA", "PHAGS-PA LETTER CA", "PHAGS-PA LETTER CHA", "PHAGS-PA LETTER JA", "PHAGS-PA LETTER NYA", "PHAGS-PA LETTER TA", "PHAGS-PA LETTER THA", "PHAGS-PA LETTER DA", "PHAGS-PA LETTER NA", "PHAGS-PA LETTER PA", "PHAGS-PA LETTER PHA", "PHAGS-PA LETTER BA", "PHAGS-PA LETTER MA", "PHAGS-PA LETTER TSA", "PHAGS-PA LETTER TSHA", "PHAGS-PA LETTER DZA", "PHAGS-PA LETTER WA", "PHAGS-PA LETTER ZHA", "PHAGS-PA LETTER ZA", "PHAGS-PA LETTER SMALL A", "PHAGS-PA LETTER YA", "PHAGS-PA LETTER RA", "PHAGS-PA LETTER LA", "PHAGS-PA LETTER SHA", "PHAGS-PA LETTER SA", "PHAGS-PA LETTER HA", "PHAGS-PA LETTER A", "PHAGS-PA LETTER I", "PHAGS-PA LETTER U", "PHAGS-PA LETTER E", "PHAGS-PA LETTER O", "PHAGS-PA LETTER QA", "PHAGS-PA LETTER XA", "PHAGS-PA LETTER FA", "PHAGS-PA LETTER GGA", "PHAGS-PA LETTER EE", "PHAGS-PA SUBJOINED LETTER WA", "PHAGS-PA SUBJOINED LETTER YA", "PHAGS-PA LETTER TTA", "PHAGS-PA LETTER TTHA", "PHAGS-PA LETTER DDA", "PHAGS-PA LETTER NNA", "PHAGS-PA LETTER ALTERNATE YA", "PHAGS-PA LETTER VOICELESS SHA", "PHAGS-PA LETTER VOICED HA", "PHAGS-PA LETTER ASPIRATED FA", "PHAGS-PA SUBJOINED LETTER RA", "PHAGS-PA SUPERFIXED LETTER RA", "PHAGS-PA LETTER CANDRABINDU", "PHAGS-PA SINGLE HEAD MARK", "PHAGS-PA DOUBLE HEAD MARK", "PHAGS-PA MARK SHAD", "PHAGS-PA MARK DOUBLE SHAD", "SAURASHTRA SIGN ANUSVARA", "SAURASHTRA SIGN VISARGA", "SAURASHTRA LETTER A", "SAURASHTRA LETTER AA", "SAURASHTRA LETTER I", "SAURASHTRA LETTER II", "SAURASHTRA LETTER U", "SAURASHTRA LETTER UU", "SAURASHTRA LETTER VOCALIC R", "SAURASHTRA LETTER VOCALIC RR", "SAURASHTRA LETTER VOCALIC L", "SAURASHTRA LETTER VOCALIC LL", "SAURASHTRA LETTER E", "SAURASHTRA LETTER EE", "SAURASHTRA LETTER AI", "SAURASHTRA LETTER O", "SAURASHTRA LETTER OO", "SAURASHTRA LETTER AU", "SAURASHTRA LETTER KA", "SAURASHTRA LETTER KHA", "SAURASHTRA LETTER GA", "SAURASHTRA LETTER GHA", "SAURASHTRA LETTER NGA", "SAURASHTRA LETTER CA", "SAURASHTRA LETTER CHA", "SAURASHTRA LETTER JA", "SAURASHTRA LETTER JHA", "SAURASHTRA LETTER NYA", "SAURASHTRA LETTER TTA", "SAURASHTRA LETTER TTHA", "SAURASHTRA LETTER DDA", "SAURASHTRA LETTER DDHA", "SAURASHTRA LETTER NNA", "SAURASHTRA LETTER TA", "SAURASHTRA LETTER THA", "SAURASHTRA LETTER DA", "SAURASHTRA LETTER DHA", "SAURASHTRA LETTER NA", "SAURASHTRA LETTER PA", "SAURASHTRA LETTER PHA", "SAURASHTRA LETTER BA", "SAURASHTRA LETTER BHA", "SAURASHTRA LETTER MA", "SAURASHTRA LETTER YA", "SAURASHTRA LETTER RA", "SAURASHTRA LETTER LA", "SAURASHTRA LETTER VA", "SAURASHTRA LETTER SHA", "SAURASHTRA LETTER SSA", "SAURASHTRA LETTER SA", "SAURASHTRA LETTER HA", "SAURASHTRA LETTER LLA", "SAURASHTRA CONSONANT SIGN HAARU", "SAURASHTRA VOWEL SIGN AA", "SAURASHTRA VOWEL SIGN I", "SAURASHTRA VOWEL SIGN II", "SAURASHTRA VOWEL SIGN U", "SAURASHTRA VOWEL SIGN UU", "SAURASHTRA VOWEL SIGN VOCALIC R", "SAURASHTRA VOWEL SIGN VOCALIC RR", "SAURASHTRA VOWEL SIGN VOCALIC L", "SAURASHTRA VOWEL SIGN VOCALIC LL", "SAURASHTRA VOWEL SIGN E", "SAURASHTRA VOWEL SIGN EE", "SAURASHTRA VOWEL SIGN AI", "SAURASHTRA VOWEL SIGN O", "SAURASHTRA VOWEL SIGN OO", "SAURASHTRA VOWEL SIGN AU", "SAURASHTRA SIGN VIRAMA", "SAURASHTRA SIGN CANDRABINDU", "SAURASHTRA DANDA", "SAURASHTRA DOUBLE DANDA", "SAURASHTRA DIGIT ZERO", "SAURASHTRA DIGIT ONE", "SAURASHTRA DIGIT TWO", "SAURASHTRA DIGIT THREE", "SAURASHTRA DIGIT FOUR", "SAURASHTRA DIGIT FIVE", "SAURASHTRA DIGIT SIX", "SAURASHTRA DIGIT SEVEN", "SAURASHTRA DIGIT EIGHT", "SAURASHTRA DIGIT NINE", "COMBINING DEVANAGARI DIGIT ZERO", "COMBINING DEVANAGARI DIGIT ONE", "COMBINING DEVANAGARI DIGIT TWO", "COMBINING DEVANAGARI DIGIT THREE", "COMBINING DEVANAGARI DIGIT FOUR", "COMBINING DEVANAGARI DIGIT FIVE", "COMBINING DEVANAGARI DIGIT SIX", "COMBINING DEVANAGARI DIGIT SEVEN", "COMBINING DEVANAGARI DIGIT EIGHT", "COMBINING DEVANAGARI DIGIT NINE", "COMBINING DEVANAGARI LETTER A", "COMBINING DEVANAGARI LETTER U", "COMBINING DEVANAGARI LETTER KA", "COMBINING DEVANAGARI LETTER NA", "COMBINING DEVANAGARI LETTER PA", "COMBINING DEVANAGARI LETTER RA", "COMBINING DEVANAGARI LETTER VI", "COMBINING DEVANAGARI SIGN AVAGRAHA", "DEVANAGARI SIGN SPACING CANDRABINDU", "DEVANAGARI SIGN CANDRABINDU VIRAMA", "DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA", "DEVANAGARI SIGN CANDRABINDU TWO", "DEVANAGARI SIGN CANDRABINDU THREE", "DEVANAGARI SIGN CANDRABINDU AVAGRAHA", "DEVANAGARI SIGN PUSHPIKA", "DEVANAGARI GAP FILLER", "DEVANAGARI CARET", "DEVANAGARI HEADSTROKE", "DEVANAGARI SIGN SIDDHAM", "DEVANAGARI JAIN OM", "DEVANAGARI LETTER AY", "DEVANAGARI VOWEL SIGN AY", "KAYAH LI DIGIT ZERO", "KAYAH LI DIGIT ONE", "KAYAH LI DIGIT TWO", "KAYAH LI DIGIT THREE", "KAYAH LI DIGIT FOUR", "KAYAH LI DIGIT FIVE", "KAYAH LI DIGIT SIX", "KAYAH LI DIGIT SEVEN", "KAYAH LI DIGIT EIGHT", "KAYAH LI DIGIT NINE", "KAYAH LI LETTER KA", "KAYAH LI LETTER KHA", "KAYAH LI LETTER GA", "KAYAH LI LETTER NGA", "KAYAH LI LETTER SA", "KAYAH LI LETTER SHA", "KAYAH LI LETTER ZA", "KAYAH LI LETTER NYA", "KAYAH LI LETTER TA", "KAYAH LI LETTER HTA", "KAYAH LI LETTER NA", "KAYAH LI LETTER PA", "KAYAH LI LETTER PHA", "KAYAH LI LETTER MA", "KAYAH LI LETTER DA", "KAYAH LI LETTER BA", "KAYAH LI LETTER RA", "KAYAH LI LETTER YA", "KAYAH LI LETTER LA", "KAYAH LI LETTER WA", "KAYAH LI LETTER THA", "KAYAH LI LETTER HA", "KAYAH LI LETTER VA", "KAYAH LI LETTER CA", "KAYAH LI LETTER A", "KAYAH LI LETTER OE", "KAYAH LI LETTER I", "KAYAH LI LETTER OO", "KAYAH LI VOWEL UE", "KAYAH LI VOWEL E", "KAYAH LI VOWEL U", "KAYAH LI VOWEL EE", "KAYAH LI VOWEL O", "KAYAH LI TONE PLOPHU", "KAYAH LI TONE CALYA", "KAYAH LI TONE CALYA PLOPHU", "KAYAH LI SIGN CWI", "KAYAH LI SIGN SHYA", "REJANG LETTER KA", "REJANG LETTER GA", "REJANG LETTER NGA", "REJANG LETTER TA", "REJANG LETTER DA", "REJANG LETTER NA", "REJANG LETTER PA", "REJANG LETTER BA", "REJANG LETTER MA", "REJANG LETTER CA", "REJANG LETTER JA", "REJANG LETTER NYA", "REJANG LETTER SA", "REJANG LETTER RA", "REJANG LETTER LA", "REJANG LETTER YA", "REJANG LETTER WA", "REJANG LETTER HA", "REJANG LETTER MBA", "REJANG LETTER NGGA", "REJANG LETTER NDA", "REJANG LETTER NYJA", "REJANG LETTER A", "REJANG VOWEL SIGN I", "REJANG VOWEL SIGN U", "REJANG VOWEL SIGN E", "REJANG VOWEL SIGN AI", "REJANG VOWEL SIGN O", "REJANG VOWEL SIGN AU", "REJANG VOWEL SIGN EU", "REJANG VOWEL SIGN EA", "REJANG CONSONANT SIGN NG", "REJANG CONSONANT SIGN N", "REJANG CONSONANT SIGN R", "REJANG CONSONANT SIGN H", "REJANG VIRAMA", "REJANG SECTION MARK", "HANGUL CHOSEONG TIKEUT-MIEUM", "HANGUL CHOSEONG TIKEUT-PIEUP", "HANGUL CHOSEONG TIKEUT-SIOS", "HANGUL CHOSEONG TIKEUT-CIEUC", "HANGUL CHOSEONG RIEUL-KIYEOK", "HANGUL CHOSEONG RIEUL-SSANGKIYEOK", "HANGUL CHOSEONG RIEUL-TIKEUT", "HANGUL CHOSEONG RIEUL-SSANGTIKEUT", "HANGUL CHOSEONG RIEUL-MIEUM", "HANGUL CHOSEONG RIEUL-PIEUP", "HANGUL CHOSEONG RIEUL-SSANGPIEUP", "HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP", "HANGUL CHOSEONG RIEUL-SIOS", "HANGUL CHOSEONG RIEUL-CIEUC", "HANGUL CHOSEONG RIEUL-KHIEUKH", "HANGUL CHOSEONG MIEUM-KIYEOK", "HANGUL CHOSEONG MIEUM-TIKEUT", "HANGUL CHOSEONG MIEUM-SIOS", "HANGUL CHOSEONG PIEUP-SIOS-THIEUTH", "HANGUL CHOSEONG PIEUP-KHIEUKH", "HANGUL CHOSEONG PIEUP-HIEUH", "HANGUL CHOSEONG SSANGSIOS-PIEUP", "HANGUL CHOSEONG IEUNG-RIEUL", "HANGUL CHOSEONG IEUNG-HIEUH", "HANGUL CHOSEONG SSANGCIEUC-HIEUH", "HANGUL CHOSEONG SSANGTHIEUTH", "HANGUL CHOSEONG PHIEUPH-HIEUH", "HANGUL CHOSEONG HIEUH-SIOS", "HANGUL CHOSEONG SSANGYEORINHIEUH", "JAVANESE SIGN PANYANGGA", "JAVANESE SIGN CECAK", "JAVANESE SIGN LAYAR", "JAVANESE SIGN WIGNYAN", "JAVANESE LETTER A", "JAVANESE LETTER I KAWI", "JAVANESE LETTER I", "JAVANESE LETTER II", "JAVANESE LETTER U", "JAVANESE LETTER PA CEREK", "JAVANESE LETTER NGA LELET", "JAVANESE LETTER NGA LELET RASWADI", "JAVANESE LETTER E", "JAVANESE LETTER AI", "JAVANESE LETTER O", "JAVANESE LETTER KA", "JAVANESE LETTER KA SASAK", "JAVANESE LETTER KA MURDA", "JAVANESE LETTER GA", "JAVANESE LETTER GA MURDA", "JAVANESE LETTER NGA", "JAVANESE LETTER CA", "JAVANESE LETTER CA MURDA", "JAVANESE LETTER JA", "JAVANESE LETTER NYA MURDA", "JAVANESE LETTER JA MAHAPRANA", "JAVANESE LETTER NYA", "JAVANESE LETTER TTA", "JAVANESE LETTER TTA MAHAPRANA", "JAVANESE LETTER DDA", "JAVANESE LETTER DDA MAHAPRANA", "JAVANESE LETTER NA MURDA", "JAVANESE LETTER TA", "JAVANESE LETTER TA MURDA", "JAVANESE LETTER DA", "JAVANESE LETTER DA MAHAPRANA", "JAVANESE LETTER NA", "JAVANESE LETTER PA", "JAVANESE LETTER PA MURDA", "JAVANESE LETTER BA", "JAVANESE LETTER BA MURDA", "JAVANESE LETTER MA", "JAVANESE LETTER YA", "JAVANESE LETTER RA", "JAVANESE LETTER RA AGUNG", "JAVANESE LETTER LA", "JAVANESE LETTER WA", "JAVANESE LETTER SA MURDA", "JAVANESE LETTER SA MAHAPRANA", "JAVANESE LETTER SA", "JAVANESE LETTER HA", "JAVANESE SIGN CECAK TELU", "JAVANESE VOWEL SIGN TARUNG", "JAVANESE VOWEL SIGN TOLONG", "JAVANESE VOWEL SIGN WULU", "JAVANESE VOWEL SIGN WULU MELIK", "JAVANESE VOWEL SIGN SUKU", "JAVANESE VOWEL SIGN SUKU MENDUT", "JAVANESE VOWEL SIGN TALING", "JAVANESE VOWEL SIGN DIRGA MURE", "JAVANESE VOWEL SIGN PEPET", "JAVANESE CONSONANT SIGN KERET", "JAVANESE CONSONANT SIGN PENGKAL", "JAVANESE CONSONANT SIGN CAKRA", "JAVANESE PANGKON", "JAVANESE LEFT RERENGGAN", "JAVANESE RIGHT RERENGGAN", "JAVANESE PADA ANDAP", "JAVANESE PADA MADYA", "JAVANESE PADA LUHUR", "JAVANESE PADA WINDU", "JAVANESE PADA PANGKAT", "JAVANESE PADA LINGSA", "JAVANESE PADA LUNGSI", "JAVANESE PADA ADEG", "JAVANESE PADA ADEG ADEG", "JAVANESE PADA PISELEH", "JAVANESE TURNED PADA PISELEH", "JAVANESE PANGRANGKEP", "JAVANESE DIGIT ZERO", "JAVANESE DIGIT ONE", "JAVANESE DIGIT TWO", "JAVANESE DIGIT THREE", "JAVANESE DIGIT FOUR", "JAVANESE DIGIT FIVE", "JAVANESE DIGIT SIX", "JAVANESE DIGIT SEVEN", "JAVANESE DIGIT EIGHT", "JAVANESE DIGIT NINE", "JAVANESE PADA TIRTA TUMETES", "JAVANESE PADA ISEN-ISEN", "MYANMAR LETTER SHAN GHA", "MYANMAR LETTER SHAN CHA", "MYANMAR LETTER SHAN JHA", "MYANMAR LETTER SHAN NNA", "MYANMAR LETTER SHAN BHA", "MYANMAR SIGN SHAN SAW", "MYANMAR MODIFIER LETTER SHAN REDUPLICATION", "MYANMAR LETTER TAI LAING NYA", "MYANMAR LETTER TAI LAING FA", "MYANMAR LETTER TAI LAING GA", "MYANMAR LETTER TAI LAING GHA", "MYANMAR LETTER TAI LAING JA", "MYANMAR LETTER TAI LAING JHA", "MYANMAR LETTER TAI LAING DDA", "MYANMAR LETTER TAI LAING DDHA", "MYANMAR LETTER TAI LAING NNA", "MYANMAR TAI LAING DIGIT ZERO", "MYANMAR TAI LAING DIGIT ONE", "MYANMAR TAI LAING DIGIT TWO", "MYANMAR TAI LAING DIGIT THREE", "MYANMAR TAI LAING DIGIT FOUR", "MYANMAR TAI LAING DIGIT FIVE", "MYANMAR TAI LAING DIGIT SIX", "MYANMAR TAI LAING DIGIT SEVEN", "MYANMAR TAI LAING DIGIT EIGHT", "MYANMAR TAI LAING DIGIT NINE", "MYANMAR LETTER TAI LAING LLA", "MYANMAR LETTER TAI LAING DA", "MYANMAR LETTER TAI LAING DHA", "MYANMAR LETTER TAI LAING BA", "MYANMAR LETTER TAI LAING BHA", "CHAM LETTER A", "CHAM LETTER I", "CHAM LETTER U", "CHAM LETTER E", "CHAM LETTER AI", "CHAM LETTER O", "CHAM LETTER KA", "CHAM LETTER KHA", "CHAM LETTER GA", "CHAM LETTER GHA", "CHAM LETTER NGUE", "CHAM LETTER NGA", "CHAM LETTER CHA", "CHAM LETTER CHHA", "CHAM LETTER JA", "CHAM LETTER JHA", "CHAM LETTER NHUE", "CHAM LETTER NHA", "CHAM LETTER NHJA", "CHAM LETTER TA", "CHAM LETTER THA", "CHAM LETTER DA", "CHAM LETTER DHA", "CHAM LETTER NUE", "CHAM LETTER NA", "CHAM LETTER DDA", "CHAM LETTER PA", "CHAM LETTER PPA", "CHAM LETTER PHA", "CHAM LETTER BA", "CHAM LETTER BHA", "CHAM LETTER MUE", "CHAM LETTER MA", "CHAM LETTER BBA", "CHAM LETTER YA", "CHAM LETTER RA", "CHAM LETTER LA", "CHAM LETTER VA", "CHAM LETTER SSA", "CHAM LETTER SA", "CHAM LETTER HA", "CHAM VOWEL SIGN AA", "CHAM VOWEL SIGN I", "CHAM VOWEL SIGN II", "CHAM VOWEL SIGN EI", "CHAM VOWEL SIGN U", "CHAM VOWEL SIGN OE", "CHAM VOWEL SIGN O", "CHAM VOWEL SIGN AI", "CHAM VOWEL SIGN AU", "CHAM VOWEL SIGN UE", "CHAM CONSONANT SIGN YA", "CHAM CONSONANT SIGN RA", "CHAM CONSONANT SIGN LA", "CHAM CONSONANT SIGN WA", "CHAM LETTER FINAL K", "CHAM LETTER FINAL G", "CHAM LETTER FINAL NG", "CHAM CONSONANT SIGN FINAL NG", "CHAM LETTER FINAL CH", "CHAM LETTER FINAL T", "CHAM LETTER FINAL N", "CHAM LETTER FINAL P", "CHAM LETTER FINAL Y", "CHAM LETTER FINAL R", "CHAM LETTER FINAL L", "CHAM LETTER FINAL SS", "CHAM CONSONANT SIGN FINAL M", "CHAM CONSONANT SIGN FINAL H", "CHAM DIGIT ZERO", "CHAM DIGIT ONE", "CHAM DIGIT TWO", "CHAM DIGIT THREE", "CHAM DIGIT FOUR", "CHAM DIGIT FIVE", "CHAM DIGIT SIX", "CHAM DIGIT SEVEN", "CHAM DIGIT EIGHT", "CHAM DIGIT NINE", "CHAM PUNCTUATION SPIRAL", "CHAM PUNCTUATION DANDA", "CHAM PUNCTUATION DOUBLE DANDA", "CHAM PUNCTUATION TRIPLE DANDA", "MYANMAR LETTER KHAMTI GA", "MYANMAR LETTER KHAMTI CA", "MYANMAR LETTER KHAMTI CHA", "MYANMAR LETTER KHAMTI JA", "MYANMAR LETTER KHAMTI JHA", "MYANMAR LETTER KHAMTI NYA", "MYANMAR LETTER KHAMTI TTA", "MYANMAR LETTER KHAMTI TTHA", "MYANMAR LETTER KHAMTI DDA", "MYANMAR LETTER KHAMTI DDHA", "MYANMAR LETTER KHAMTI DHA", "MYANMAR LETTER KHAMTI NA", "MYANMAR LETTER KHAMTI SA", "MYANMAR LETTER KHAMTI HA", "MYANMAR LETTER KHAMTI HHA", "MYANMAR LETTER KHAMTI FA", "MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION", "MYANMAR LETTER KHAMTI XA", "MYANMAR LETTER KHAMTI ZA", "MYANMAR LETTER KHAMTI RA", "MYANMAR LOGOGRAM KHAMTI OAY", "MYANMAR LOGOGRAM KHAMTI QN", "MYANMAR LOGOGRAM KHAMTI HM", "MYANMAR SYMBOL AITON EXCLAMATION", "MYANMAR SYMBOL AITON ONE", "MYANMAR SYMBOL AITON TWO", "MYANMAR LETTER AITON RA", "MYANMAR SIGN PAO KAREN TONE", "MYANMAR SIGN TAI LAING TONE-2", "MYANMAR SIGN TAI LAING TONE-5", "MYANMAR LETTER SHWE PALAUNG CHA", "MYANMAR LETTER SHWE PALAUNG SHA", "TAI VIET LETTER LOW KO", "TAI VIET LETTER HIGH KO", "TAI VIET LETTER LOW KHO", "TAI VIET LETTER HIGH KHO", "TAI VIET LETTER LOW KHHO", "TAI VIET LETTER HIGH KHHO", "TAI VIET LETTER LOW GO", "TAI VIET LETTER HIGH GO", "TAI VIET LETTER LOW NGO", "TAI VIET LETTER HIGH NGO", "TAI VIET LETTER LOW CO", "TAI VIET LETTER HIGH CO", "TAI VIET LETTER LOW CHO", "TAI VIET LETTER HIGH CHO", "TAI VIET LETTER LOW SO", "TAI VIET LETTER HIGH SO", "TAI VIET LETTER LOW NYO", "TAI VIET LETTER HIGH NYO", "TAI VIET LETTER LOW DO", "TAI VIET LETTER HIGH DO", "TAI VIET LETTER LOW TO", "TAI VIET LETTER HIGH TO", "TAI VIET LETTER LOW THO", "TAI VIET LETTER HIGH THO", "TAI VIET LETTER LOW NO", "TAI VIET LETTER HIGH NO", "TAI VIET LETTER LOW BO", "TAI VIET LETTER HIGH BO", "TAI VIET LETTER LOW PO", "TAI VIET LETTER HIGH PO", "TAI VIET LETTER LOW PHO", "TAI VIET LETTER HIGH PHO", "TAI VIET LETTER LOW FO", "TAI VIET LETTER HIGH FO", "TAI VIET LETTER LOW MO", "TAI VIET LETTER HIGH MO", "TAI VIET LETTER LOW YO", "TAI VIET LETTER HIGH YO", "TAI VIET LETTER LOW RO", "TAI VIET LETTER HIGH RO", "TAI VIET LETTER LOW LO", "TAI VIET LETTER HIGH LO", "TAI VIET LETTER LOW VO", "TAI VIET LETTER HIGH VO", "TAI VIET LETTER LOW HO", "TAI VIET LETTER HIGH HO", "TAI VIET LETTER LOW O", "TAI VIET LETTER HIGH O", "TAI VIET MAI KANG", "TAI VIET VOWEL AA", "TAI VIET VOWEL I", "TAI VIET VOWEL UE", "TAI VIET VOWEL U", "TAI VIET VOWEL E", "TAI VIET VOWEL O", "TAI VIET MAI KHIT", "TAI VIET VOWEL IA", "TAI VIET VOWEL UEA", "TAI VIET VOWEL UA", "TAI VIET VOWEL AUE", "TAI VIET VOWEL AY", "TAI VIET VOWEL AN", "TAI VIET VOWEL AM", "TAI VIET TONE MAI EK", "TAI VIET TONE MAI NUENG", "TAI VIET TONE MAI THO", "TAI VIET TONE MAI SONG", "TAI VIET SYMBOL KON", "TAI VIET SYMBOL NUENG", "TAI VIET SYMBOL SAM", "TAI VIET SYMBOL HO HOI", "TAI VIET SYMBOL KOI KOI", "MEETEI MAYEK LETTER E", "MEETEI MAYEK LETTER O", "MEETEI MAYEK LETTER CHA", "MEETEI MAYEK LETTER NYA", "MEETEI MAYEK LETTER TTA", "MEETEI MAYEK LETTER TTHA", "MEETEI MAYEK LETTER DDA", "MEETEI MAYEK LETTER DDHA", "MEETEI MAYEK LETTER NNA", "MEETEI MAYEK LETTER SHA", "MEETEI MAYEK LETTER SSA", "MEETEI MAYEK VOWEL SIGN II", "MEETEI MAYEK VOWEL SIGN UU", "MEETEI MAYEK VOWEL SIGN AAI", "MEETEI MAYEK VOWEL SIGN AU", "MEETEI MAYEK VOWEL SIGN AAU", "MEETEI MAYEK CHEIKHAN", "MEETEI MAYEK AHANG KHUDAM", "MEETEI MAYEK ANJI", "MEETEI MAYEK SYLLABLE REPETITION MARK", "MEETEI MAYEK WORD REPETITION MARK", "MEETEI MAYEK VOWEL SIGN VISARGA", "MEETEI MAYEK VIRAMA", "ETHIOPIC SYLLABLE TTHU", "ETHIOPIC SYLLABLE TTHI", "ETHIOPIC SYLLABLE TTHAA", "ETHIOPIC SYLLABLE TTHEE", "ETHIOPIC SYLLABLE TTHE", "ETHIOPIC SYLLABLE TTHO", "ETHIOPIC SYLLABLE DDHU", "ETHIOPIC SYLLABLE DDHI", "ETHIOPIC SYLLABLE DDHAA", "ETHIOPIC SYLLABLE DDHEE", "ETHIOPIC SYLLABLE DDHE", "ETHIOPIC SYLLABLE DDHO", "ETHIOPIC SYLLABLE DZU", "ETHIOPIC SYLLABLE DZI", "ETHIOPIC SYLLABLE DZAA", "ETHIOPIC SYLLABLE DZEE", "ETHIOPIC SYLLABLE DZE", "ETHIOPIC SYLLABLE DZO", "ETHIOPIC SYLLABLE CCHHA", "ETHIOPIC SYLLABLE CCHHU", "ETHIOPIC SYLLABLE CCHHI", "ETHIOPIC SYLLABLE CCHHAA", "ETHIOPIC SYLLABLE CCHHEE", "ETHIOPIC SYLLABLE CCHHE", "ETHIOPIC SYLLABLE CCHHO", "ETHIOPIC SYLLABLE BBA", "ETHIOPIC SYLLABLE BBU", "ETHIOPIC SYLLABLE BBI", "ETHIOPIC SYLLABLE BBAA", "ETHIOPIC SYLLABLE BBEE", "ETHIOPIC SYLLABLE BBE", "ETHIOPIC SYLLABLE BBO", "LATIN SMALL LETTER BARRED ALPHA", "LATIN SMALL LETTER A REVERSED-SCHWA", "LATIN SMALL LETTER BLACKLETTER E", "LATIN SMALL LETTER BARRED E", "LATIN SMALL LETTER E WITH FLOURISH", "LATIN SMALL LETTER LENIS F", "LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL", "LATIN SMALL LETTER L WITH INVERTED LAZY S", "LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE", "LATIN SMALL LETTER L WITH MIDDLE RING", "LATIN SMALL LETTER M WITH CROSSED-TAIL", "LATIN SMALL LETTER N WITH CROSSED-TAIL", "LATIN SMALL LETTER ENG WITH CROSSED-TAIL", "LATIN SMALL LETTER BLACKLETTER O", "LATIN SMALL LETTER BLACKLETTER O WITH STROKE", "LATIN SMALL LETTER OPEN O WITH STROKE", "LATIN SMALL LETTER INVERTED OE", "LATIN SMALL LETTER TURNED OE WITH STROKE", "LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE", "LATIN SMALL LETTER TURNED O OPEN-O", "LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE", "LATIN SMALL LETTER STIRRUP R", "LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG", "LATIN SMALL LETTER R WITHOUT HANDLE", "LATIN SMALL LETTER DOUBLE R", "LATIN SMALL LETTER R WITH CROSSED-TAIL", "LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL", "LATIN SMALL LETTER SCRIPT R", "LATIN SMALL LETTER SCRIPT R WITH RING", "LATIN SMALL LETTER BASELINE ESH", "LATIN SMALL LETTER U WITH SHORT RIGHT LEG", "LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG", "LATIN SMALL LETTER UI", "LATIN SMALL LETTER TURNED UI", "LATIN SMALL LETTER U WITH LEFT HOOK", "LATIN SMALL LETTER CHI", "LATIN SMALL LETTER CHI WITH LOW RIGHT RING", "LATIN SMALL LETTER CHI WITH LOW LEFT SERIF", "LATIN SMALL LETTER X WITH LOW RIGHT RING", "LATIN SMALL LETTER X WITH LONG LEFT LEG", "LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING", "LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF", "LATIN SMALL LETTER Y WITH SHORT RIGHT LEG", "MODIFIER BREVE WITH INVERTED BREVE", "MODIFIER LETTER SMALL HENG", "MODIFIER LETTER SMALL L WITH INVERTED LAZY S", "MODIFIER LETTER SMALL L WITH MIDDLE TILDE", "MODIFIER LETTER SMALL U WITH LEFT HOOK", "LATIN SMALL LETTER SAKHA YAT", "LATIN SMALL LETTER IOTIFIED E", "LATIN SMALL LETTER OPEN OE", "LATIN SMALL LETTER UO", "LATIN SMALL LETTER INVERTED ALPHA", "GREEK LETTER SMALL CAPITAL OMEGA", "LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK", "LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK", "CHEROKEE SMALL LETTER A", "CHEROKEE SMALL LETTER E", "CHEROKEE SMALL LETTER I", "CHEROKEE SMALL LETTER O", "CHEROKEE SMALL LETTER U", "CHEROKEE SMALL LETTER V", "CHEROKEE SMALL LETTER GA", "CHEROKEE SMALL LETTER KA", "CHEROKEE SMALL LETTER GE", "CHEROKEE SMALL LETTER GI", "CHEROKEE SMALL LETTER GO", "CHEROKEE SMALL LETTER GU", "CHEROKEE SMALL LETTER GV", "CHEROKEE SMALL LETTER HA", "CHEROKEE SMALL LETTER HE", "CHEROKEE SMALL LETTER HI", "CHEROKEE SMALL LETTER HO", "CHEROKEE SMALL LETTER HU", "CHEROKEE SMALL LETTER HV", "CHEROKEE SMALL LETTER LA", "CHEROKEE SMALL LETTER LE", "CHEROKEE SMALL LETTER LI", "CHEROKEE SMALL LETTER LO", "CHEROKEE SMALL LETTER LU", "CHEROKEE SMALL LETTER LV", "CHEROKEE SMALL LETTER MA", "CHEROKEE SMALL LETTER ME", "CHEROKEE SMALL LETTER MI", "CHEROKEE SMALL LETTER MO", "CHEROKEE SMALL LETTER MU", "CHEROKEE SMALL LETTER NA", "CHEROKEE SMALL LETTER HNA", "CHEROKEE SMALL LETTER NAH", "CHEROKEE SMALL LETTER NE", "CHEROKEE SMALL LETTER NI", "CHEROKEE SMALL LETTER NO", "CHEROKEE SMALL LETTER NU", "CHEROKEE SMALL LETTER NV", "CHEROKEE SMALL LETTER QUA", "CHEROKEE SMALL LETTER QUE", "CHEROKEE SMALL LETTER QUI", "CHEROKEE SMALL LETTER QUO", "CHEROKEE SMALL LETTER QUU", "CHEROKEE SMALL LETTER QUV", "CHEROKEE SMALL LETTER SA", "CHEROKEE SMALL LETTER S", "CHEROKEE SMALL LETTER SE", "CHEROKEE SMALL LETTER SI", "CHEROKEE SMALL LETTER SO", "CHEROKEE SMALL LETTER SU", "CHEROKEE SMALL LETTER SV", "CHEROKEE SMALL LETTER DA", "CHEROKEE SMALL LETTER TA", "CHEROKEE SMALL LETTER DE", "CHEROKEE SMALL LETTER TE", "CHEROKEE SMALL LETTER DI", "CHEROKEE SMALL LETTER TI", "CHEROKEE SMALL LETTER DO", "CHEROKEE SMALL LETTER DU", "CHEROKEE SMALL LETTER DV", "CHEROKEE SMALL LETTER DLA", "CHEROKEE SMALL LETTER TLA", "CHEROKEE SMALL LETTER TLE", "CHEROKEE SMALL LETTER TLI", "CHEROKEE SMALL LETTER TLO", "CHEROKEE SMALL LETTER TLU", "CHEROKEE SMALL LETTER TLV", "CHEROKEE SMALL LETTER TSA", "CHEROKEE SMALL LETTER TSE", "CHEROKEE SMALL LETTER TSI", "CHEROKEE SMALL LETTER TSO", "CHEROKEE SMALL LETTER TSU", "CHEROKEE SMALL LETTER TSV", "CHEROKEE SMALL LETTER WA", "CHEROKEE SMALL LETTER WE", "CHEROKEE SMALL LETTER WI", "CHEROKEE SMALL LETTER WO", "CHEROKEE SMALL LETTER WU", "CHEROKEE SMALL LETTER WV", "CHEROKEE SMALL LETTER YA", "MEETEI MAYEK LETTER KOK", "MEETEI MAYEK LETTER SAM", "MEETEI MAYEK LETTER LAI", "MEETEI MAYEK LETTER MIT", "MEETEI MAYEK LETTER PA", "MEETEI MAYEK LETTER NA", "MEETEI MAYEK LETTER CHIL", "MEETEI MAYEK LETTER TIL", "MEETEI MAYEK LETTER KHOU", "MEETEI MAYEK LETTER NGOU", "MEETEI MAYEK LETTER THOU", "MEETEI MAYEK LETTER WAI", "MEETEI MAYEK LETTER YANG", "MEETEI MAYEK LETTER HUK", "MEETEI MAYEK LETTER UN", "MEETEI MAYEK LETTER I", "MEETEI MAYEK LETTER PHAM", "MEETEI MAYEK LETTER ATIYA", "MEETEI MAYEK LETTER GOK", "MEETEI MAYEK LETTER JHAM", "MEETEI MAYEK LETTER RAI", "MEETEI MAYEK LETTER BA", "MEETEI MAYEK LETTER JIL", "MEETEI MAYEK LETTER DIL", "MEETEI MAYEK LETTER GHOU", "MEETEI MAYEK LETTER DHOU", "MEETEI MAYEK LETTER BHAM", "MEETEI MAYEK LETTER KOK LONSUM", "MEETEI MAYEK LETTER LAI LONSUM", "MEETEI MAYEK LETTER MIT LONSUM", "MEETEI MAYEK LETTER PA LONSUM", "MEETEI MAYEK LETTER NA LONSUM", "MEETEI MAYEK LETTER TIL LONSUM", "MEETEI MAYEK LETTER NGOU LONSUM", "MEETEI MAYEK LETTER I LONSUM", "MEETEI MAYEK VOWEL SIGN ONAP", "MEETEI MAYEK VOWEL SIGN INAP", "MEETEI MAYEK VOWEL SIGN ANAP", "MEETEI MAYEK VOWEL SIGN YENAP", "MEETEI MAYEK VOWEL SIGN SOUNAP", "MEETEI MAYEK VOWEL SIGN UNAP", "MEETEI MAYEK VOWEL SIGN CHEINAP", "MEETEI MAYEK VOWEL SIGN NUNG", "MEETEI MAYEK CHEIKHEI", "MEETEI MAYEK LUM IYEK", "MEETEI MAYEK APUN IYEK", "MEETEI MAYEK DIGIT ZERO", "MEETEI MAYEK DIGIT ONE", "MEETEI MAYEK DIGIT TWO", "MEETEI MAYEK DIGIT THREE", "MEETEI MAYEK DIGIT FOUR", "MEETEI MAYEK DIGIT FIVE", "MEETEI MAYEK DIGIT SIX", "MEETEI MAYEK DIGIT SEVEN", "MEETEI MAYEK DIGIT EIGHT", "MEETEI MAYEK DIGIT NINE", "", "", "HANGUL JUNGSEONG O-YEO", "HANGUL JUNGSEONG O-O-I", "HANGUL JUNGSEONG YO-A", "HANGUL JUNGSEONG YO-AE", "HANGUL JUNGSEONG YO-EO", "HANGUL JUNGSEONG U-YEO", "HANGUL JUNGSEONG U-I-I", "HANGUL JUNGSEONG YU-AE", "HANGUL JUNGSEONG YU-O", "HANGUL JUNGSEONG EU-A", "HANGUL JUNGSEONG EU-EO", "HANGUL JUNGSEONG EU-E", "HANGUL JUNGSEONG EU-O", "HANGUL JUNGSEONG I-YA-O", "HANGUL JUNGSEONG I-YAE", "HANGUL JUNGSEONG I-YEO", "HANGUL JUNGSEONG I-YE", "HANGUL JUNGSEONG I-O-I", "HANGUL JUNGSEONG I-YO", "HANGUL JUNGSEONG I-YU", "HANGUL JUNGSEONG I-I", "HANGUL JUNGSEONG ARAEA-A", "HANGUL JUNGSEONG ARAEA-E", "HANGUL JONGSEONG NIEUN-RIEUL", "HANGUL JONGSEONG NIEUN-CHIEUCH", "HANGUL JONGSEONG SSANGTIKEUT", "HANGUL JONGSEONG SSANGTIKEUT-PIEUP", "HANGUL JONGSEONG TIKEUT-PIEUP", "HANGUL JONGSEONG TIKEUT-SIOS", "HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK", "HANGUL JONGSEONG TIKEUT-CIEUC", "HANGUL JONGSEONG TIKEUT-CHIEUCH", "HANGUL JONGSEONG TIKEUT-THIEUTH", "HANGUL JONGSEONG RIEUL-SSANGKIYEOK", "HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH", "HANGUL JONGSEONG SSANGRIEUL-KHIEUKH", "HANGUL JONGSEONG RIEUL-MIEUM-HIEUH", "HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT", "HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH", "HANGUL JONGSEONG RIEUL-YESIEUNG", "HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH", "HANGUL JONGSEONG KAPYEOUNRIEUL", "HANGUL JONGSEONG MIEUM-NIEUN", "HANGUL JONGSEONG MIEUM-SSANGNIEUN", "HANGUL JONGSEONG SSANGMIEUM", "HANGUL JONGSEONG MIEUM-PIEUP-SIOS", "HANGUL JONGSEONG MIEUM-CIEUC", "HANGUL JONGSEONG PIEUP-TIKEUT", "HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH", "HANGUL JONGSEONG PIEUP-MIEUM", "HANGUL JONGSEONG SSANGPIEUP", "HANGUL JONGSEONG PIEUP-SIOS-TIKEUT", "HANGUL JONGSEONG PIEUP-CIEUC", "HANGUL JONGSEONG PIEUP-CHIEUCH", "HANGUL JONGSEONG SIOS-MIEUM", "HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP", "HANGUL JONGSEONG SSANGSIOS-KIYEOK", "HANGUL JONGSEONG SSANGSIOS-TIKEUT", "HANGUL JONGSEONG SIOS-PANSIOS", "HANGUL JONGSEONG SIOS-CIEUC", "HANGUL JONGSEONG SIOS-CHIEUCH", "HANGUL JONGSEONG SIOS-THIEUTH", "HANGUL JONGSEONG SIOS-HIEUH", "HANGUL JONGSEONG PANSIOS-PIEUP", "HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP", "HANGUL JONGSEONG YESIEUNG-MIEUM", "HANGUL JONGSEONG YESIEUNG-HIEUH", "HANGUL JONGSEONG CIEUC-PIEUP", "HANGUL JONGSEONG CIEUC-SSANGPIEUP", "HANGUL JONGSEONG SSANGCIEUC", "HANGUL JONGSEONG PHIEUPH-SIOS", "HANGUL JONGSEONG PHIEUPH-THIEUTH", "", "", "", "", "", "", "", "", "CJK COMPATIBILITY IDEOGRAPH-F900", "CJK COMPATIBILITY IDEOGRAPH-F901", "CJK COMPATIBILITY IDEOGRAPH-F902", "CJK COMPATIBILITY IDEOGRAPH-F903", "CJK COMPATIBILITY IDEOGRAPH-F904", "CJK COMPATIBILITY IDEOGRAPH-F905", "CJK COMPATIBILITY IDEOGRAPH-F906", "CJK COMPATIBILITY IDEOGRAPH-F907", "CJK COMPATIBILITY IDEOGRAPH-F908", "CJK COMPATIBILITY IDEOGRAPH-F909", "CJK COMPATIBILITY IDEOGRAPH-F90A", "CJK COMPATIBILITY IDEOGRAPH-F90B", "CJK COMPATIBILITY IDEOGRAPH-F90C", "CJK COMPATIBILITY IDEOGRAPH-F90D", "CJK COMPATIBILITY IDEOGRAPH-F90E", "CJK COMPATIBILITY IDEOGRAPH-F90F", "CJK COMPATIBILITY IDEOGRAPH-F910", "CJK COMPATIBILITY IDEOGRAPH-F911", "CJK COMPATIBILITY IDEOGRAPH-F912", "CJK COMPATIBILITY IDEOGRAPH-F913", "CJK COMPATIBILITY IDEOGRAPH-F914", "CJK COMPATIBILITY IDEOGRAPH-F915", "CJK COMPATIBILITY IDEOGRAPH-F916", "CJK COMPATIBILITY IDEOGRAPH-F917", "CJK COMPATIBILITY IDEOGRAPH-F918", "CJK COMPATIBILITY IDEOGRAPH-F919", "CJK COMPATIBILITY IDEOGRAPH-F91A", "CJK COMPATIBILITY IDEOGRAPH-F91B", "CJK COMPATIBILITY IDEOGRAPH-F91C", "CJK COMPATIBILITY IDEOGRAPH-F91D", "CJK COMPATIBILITY IDEOGRAPH-F91E", "CJK COMPATIBILITY IDEOGRAPH-F91F", "CJK COMPATIBILITY IDEOGRAPH-F920", "CJK COMPATIBILITY IDEOGRAPH-F921", "CJK COMPATIBILITY IDEOGRAPH-F922", "CJK COMPATIBILITY IDEOGRAPH-F923", "CJK COMPATIBILITY IDEOGRAPH-F924", "CJK COMPATIBILITY IDEOGRAPH-F925", "CJK COMPATIBILITY IDEOGRAPH-F926", "CJK COMPATIBILITY IDEOGRAPH-F927", "CJK COMPATIBILITY IDEOGRAPH-F928", "CJK COMPATIBILITY IDEOGRAPH-F929", "CJK COMPATIBILITY IDEOGRAPH-F92A", "CJK COMPATIBILITY IDEOGRAPH-F92B", "CJK COMPATIBILITY IDEOGRAPH-F92C", "CJK COMPATIBILITY IDEOGRAPH-F92D", "CJK COMPATIBILITY IDEOGRAPH-F92E", "CJK COMPATIBILITY IDEOGRAPH-F92F", "CJK COMPATIBILITY IDEOGRAPH-F930", "CJK COMPATIBILITY IDEOGRAPH-F931", "CJK COMPATIBILITY IDEOGRAPH-F932", "CJK COMPATIBILITY IDEOGRAPH-F933", "CJK COMPATIBILITY IDEOGRAPH-F934", "CJK COMPATIBILITY IDEOGRAPH-F935", "CJK COMPATIBILITY IDEOGRAPH-F936", "CJK COMPATIBILITY IDEOGRAPH-F937", "CJK COMPATIBILITY IDEOGRAPH-F938", "CJK COMPATIBILITY IDEOGRAPH-F939", "CJK COMPATIBILITY IDEOGRAPH-F93A", "CJK COMPATIBILITY IDEOGRAPH-F93B", "CJK COMPATIBILITY IDEOGRAPH-F93C", "CJK COMPATIBILITY IDEOGRAPH-F93D", "CJK COMPATIBILITY IDEOGRAPH-F93E", "CJK COMPATIBILITY IDEOGRAPH-F93F", "CJK COMPATIBILITY IDEOGRAPH-F940", "CJK COMPATIBILITY IDEOGRAPH-F941", "CJK COMPATIBILITY IDEOGRAPH-F942", "CJK COMPATIBILITY IDEOGRAPH-F943", "CJK COMPATIBILITY IDEOGRAPH-F944", "CJK COMPATIBILITY IDEOGRAPH-F945", "CJK COMPATIBILITY IDEOGRAPH-F946", "CJK COMPATIBILITY IDEOGRAPH-F947", "CJK COMPATIBILITY IDEOGRAPH-F948", "CJK COMPATIBILITY IDEOGRAPH-F949", "CJK COMPATIBILITY IDEOGRAPH-F94A", "CJK COMPATIBILITY IDEOGRAPH-F94B", "CJK COMPATIBILITY IDEOGRAPH-F94C", "CJK COMPATIBILITY IDEOGRAPH-F94D", "CJK COMPATIBILITY IDEOGRAPH-F94E", "CJK COMPATIBILITY IDEOGRAPH-F94F", "CJK COMPATIBILITY IDEOGRAPH-F950", "CJK COMPATIBILITY IDEOGRAPH-F951", "CJK COMPATIBILITY IDEOGRAPH-F952", "CJK COMPATIBILITY IDEOGRAPH-F953", "CJK COMPATIBILITY IDEOGRAPH-F954", "CJK COMPATIBILITY IDEOGRAPH-F955", "CJK COMPATIBILITY IDEOGRAPH-F956", "CJK COMPATIBILITY IDEOGRAPH-F957", "CJK COMPATIBILITY IDEOGRAPH-F958", "CJK COMPATIBILITY IDEOGRAPH-F959", "CJK COMPATIBILITY IDEOGRAPH-F95A", "CJK COMPATIBILITY IDEOGRAPH-F95B", "CJK COMPATIBILITY IDEOGRAPH-F95C", "CJK COMPATIBILITY IDEOGRAPH-F95D", "CJK COMPATIBILITY IDEOGRAPH-F95E", "CJK COMPATIBILITY IDEOGRAPH-F95F", "CJK COMPATIBILITY IDEOGRAPH-F960", "CJK COMPATIBILITY IDEOGRAPH-F961", "CJK COMPATIBILITY IDEOGRAPH-F962", "CJK COMPATIBILITY IDEOGRAPH-F963", "CJK COMPATIBILITY IDEOGRAPH-F964", "CJK COMPATIBILITY IDEOGRAPH-F965", "CJK COMPATIBILITY IDEOGRAPH-F966", "CJK COMPATIBILITY IDEOGRAPH-F967", "CJK COMPATIBILITY IDEOGRAPH-F968", "CJK COMPATIBILITY IDEOGRAPH-F969", "CJK COMPATIBILITY IDEOGRAPH-F96A", "CJK COMPATIBILITY IDEOGRAPH-F96B", "CJK COMPATIBILITY IDEOGRAPH-F96C", "CJK COMPATIBILITY IDEOGRAPH-F96D", "CJK COMPATIBILITY IDEOGRAPH-F96E", "CJK COMPATIBILITY IDEOGRAPH-F96F", "CJK COMPATIBILITY IDEOGRAPH-F970", "CJK COMPATIBILITY IDEOGRAPH-F971", "CJK COMPATIBILITY IDEOGRAPH-F972", "CJK COMPATIBILITY IDEOGRAPH-F973", "CJK COMPATIBILITY IDEOGRAPH-F974", "CJK COMPATIBILITY IDEOGRAPH-F975", "CJK COMPATIBILITY IDEOGRAPH-F976", "CJK COMPATIBILITY IDEOGRAPH-F977", "CJK COMPATIBILITY IDEOGRAPH-F978", "CJK COMPATIBILITY IDEOGRAPH-F979", "CJK COMPATIBILITY IDEOGRAPH-F97A", "CJK COMPATIBILITY IDEOGRAPH-F97B", "CJK COMPATIBILITY IDEOGRAPH-F97C", "CJK COMPATIBILITY IDEOGRAPH-F97D", "CJK COMPATIBILITY IDEOGRAPH-F97E", "CJK COMPATIBILITY IDEOGRAPH-F97F", "CJK COMPATIBILITY IDEOGRAPH-F980", "CJK COMPATIBILITY IDEOGRAPH-F981", "CJK COMPATIBILITY IDEOGRAPH-F982", "CJK COMPATIBILITY IDEOGRAPH-F983", "CJK COMPATIBILITY IDEOGRAPH-F984", "CJK COMPATIBILITY IDEOGRAPH-F985", "CJK COMPATIBILITY IDEOGRAPH-F986", "CJK COMPATIBILITY IDEOGRAPH-F987", "CJK COMPATIBILITY IDEOGRAPH-F988", "CJK COMPATIBILITY IDEOGRAPH-F989", "CJK COMPATIBILITY IDEOGRAPH-F98A", "CJK COMPATIBILITY IDEOGRAPH-F98B", "CJK COMPATIBILITY IDEOGRAPH-F98C", "CJK COMPATIBILITY IDEOGRAPH-F98D", "CJK COMPATIBILITY IDEOGRAPH-F98E", "CJK COMPATIBILITY IDEOGRAPH-F98F", "CJK COMPATIBILITY IDEOGRAPH-F990", "CJK COMPATIBILITY IDEOGRAPH-F991", "CJK COMPATIBILITY IDEOGRAPH-F992", "CJK COMPATIBILITY IDEOGRAPH-F993", "CJK COMPATIBILITY IDEOGRAPH-F994", "CJK COMPATIBILITY IDEOGRAPH-F995", "CJK COMPATIBILITY IDEOGRAPH-F996", "CJK COMPATIBILITY IDEOGRAPH-F997", "CJK COMPATIBILITY IDEOGRAPH-F998", "CJK COMPATIBILITY IDEOGRAPH-F999", "CJK COMPATIBILITY IDEOGRAPH-F99A", "CJK COMPATIBILITY IDEOGRAPH-F99B", "CJK COMPATIBILITY IDEOGRAPH-F99C", "CJK COMPATIBILITY IDEOGRAPH-F99D", "CJK COMPATIBILITY IDEOGRAPH-F99E", "CJK COMPATIBILITY IDEOGRAPH-F99F", "CJK COMPATIBILITY IDEOGRAPH-F9A0", "CJK COMPATIBILITY IDEOGRAPH-F9A1", "CJK COMPATIBILITY IDEOGRAPH-F9A2", "CJK COMPATIBILITY IDEOGRAPH-F9A3", "CJK COMPATIBILITY IDEOGRAPH-F9A4", "CJK COMPATIBILITY IDEOGRAPH-F9A5", "CJK COMPATIBILITY IDEOGRAPH-F9A6", "CJK COMPATIBILITY IDEOGRAPH-F9A7", "CJK COMPATIBILITY IDEOGRAPH-F9A8", "CJK COMPATIBILITY IDEOGRAPH-F9A9", "CJK COMPATIBILITY IDEOGRAPH-F9AA", "CJK COMPATIBILITY IDEOGRAPH-F9AB", "CJK COMPATIBILITY IDEOGRAPH-F9AC", "CJK COMPATIBILITY IDEOGRAPH-F9AD", "CJK COMPATIBILITY IDEOGRAPH-F9AE", "CJK COMPATIBILITY IDEOGRAPH-F9AF", "CJK COMPATIBILITY IDEOGRAPH-F9B0", "CJK COMPATIBILITY IDEOGRAPH-F9B1", "CJK COMPATIBILITY IDEOGRAPH-F9B2", "CJK COMPATIBILITY IDEOGRAPH-F9B3", "CJK COMPATIBILITY IDEOGRAPH-F9B4", "CJK COMPATIBILITY IDEOGRAPH-F9B5", "CJK COMPATIBILITY IDEOGRAPH-F9B6", "CJK COMPATIBILITY IDEOGRAPH-F9B7", "CJK COMPATIBILITY IDEOGRAPH-F9B8", "CJK COMPATIBILITY IDEOGRAPH-F9B9", "CJK COMPATIBILITY IDEOGRAPH-F9BA", "CJK COMPATIBILITY IDEOGRAPH-F9BB", "CJK COMPATIBILITY IDEOGRAPH-F9BC", "CJK COMPATIBILITY IDEOGRAPH-F9BD", "CJK COMPATIBILITY IDEOGRAPH-F9BE", "CJK COMPATIBILITY IDEOGRAPH-F9BF", "CJK COMPATIBILITY IDEOGRAPH-F9C0", "CJK COMPATIBILITY IDEOGRAPH-F9C1", "CJK COMPATIBILITY IDEOGRAPH-F9C2", "CJK COMPATIBILITY IDEOGRAPH-F9C3", "CJK COMPATIBILITY IDEOGRAPH-F9C4", "CJK COMPATIBILITY IDEOGRAPH-F9C5", "CJK COMPATIBILITY IDEOGRAPH-F9C6", "CJK COMPATIBILITY IDEOGRAPH-F9C7", "CJK COMPATIBILITY IDEOGRAPH-F9C8", "CJK COMPATIBILITY IDEOGRAPH-F9C9", "CJK COMPATIBILITY IDEOGRAPH-F9CA", "CJK COMPATIBILITY IDEOGRAPH-F9CB", "CJK COMPATIBILITY IDEOGRAPH-F9CC", "CJK COMPATIBILITY IDEOGRAPH-F9CD", "CJK COMPATIBILITY IDEOGRAPH-F9CE", "CJK COMPATIBILITY IDEOGRAPH-F9CF", "CJK COMPATIBILITY IDEOGRAPH-F9D0", "CJK COMPATIBILITY IDEOGRAPH-F9D1", "CJK COMPATIBILITY IDEOGRAPH-F9D2", "CJK COMPATIBILITY IDEOGRAPH-F9D3", "CJK COMPATIBILITY IDEOGRAPH-F9D4", "CJK COMPATIBILITY IDEOGRAPH-F9D5", "CJK COMPATIBILITY IDEOGRAPH-F9D6", "CJK COMPATIBILITY IDEOGRAPH-F9D7", "CJK COMPATIBILITY IDEOGRAPH-F9D8", "CJK COMPATIBILITY IDEOGRAPH-F9D9", "CJK COMPATIBILITY IDEOGRAPH-F9DA", "CJK COMPATIBILITY IDEOGRAPH-F9DB", "CJK COMPATIBILITY IDEOGRAPH-F9DC", "CJK COMPATIBILITY IDEOGRAPH-F9DD", "CJK COMPATIBILITY IDEOGRAPH-F9DE", "CJK COMPATIBILITY IDEOGRAPH-F9DF", "CJK COMPATIBILITY IDEOGRAPH-F9E0", "CJK COMPATIBILITY IDEOGRAPH-F9E1", "CJK COMPATIBILITY IDEOGRAPH-F9E2", "CJK COMPATIBILITY IDEOGRAPH-F9E3", "CJK COMPATIBILITY IDEOGRAPH-F9E4", "CJK COMPATIBILITY IDEOGRAPH-F9E5", "CJK COMPATIBILITY IDEOGRAPH-F9E6", "CJK COMPATIBILITY IDEOGRAPH-F9E7", "CJK COMPATIBILITY IDEOGRAPH-F9E8", "CJK COMPATIBILITY IDEOGRAPH-F9E9", "CJK COMPATIBILITY IDEOGRAPH-F9EA", "CJK COMPATIBILITY IDEOGRAPH-F9EB", "CJK COMPATIBILITY IDEOGRAPH-F9EC", "CJK COMPATIBILITY IDEOGRAPH-F9ED", "CJK COMPATIBILITY IDEOGRAPH-F9EE", "CJK COMPATIBILITY IDEOGRAPH-F9EF", "CJK COMPATIBILITY IDEOGRAPH-F9F0", "CJK COMPATIBILITY IDEOGRAPH-F9F1", "CJK COMPATIBILITY IDEOGRAPH-F9F2", "CJK COMPATIBILITY IDEOGRAPH-F9F3", "CJK COMPATIBILITY IDEOGRAPH-F9F4", "CJK COMPATIBILITY IDEOGRAPH-F9F5", "CJK COMPATIBILITY IDEOGRAPH-F9F6", "CJK COMPATIBILITY IDEOGRAPH-F9F7", "CJK COMPATIBILITY IDEOGRAPH-F9F8", "CJK COMPATIBILITY IDEOGRAPH-F9F9", "CJK COMPATIBILITY IDEOGRAPH-F9FA", "CJK COMPATIBILITY IDEOGRAPH-F9FB", "CJK COMPATIBILITY IDEOGRAPH-F9FC", "CJK COMPATIBILITY IDEOGRAPH-F9FD", "CJK COMPATIBILITY IDEOGRAPH-F9FE", "CJK COMPATIBILITY IDEOGRAPH-F9FF", "CJK COMPATIBILITY IDEOGRAPH-FA00", "CJK COMPATIBILITY IDEOGRAPH-FA01", "CJK COMPATIBILITY IDEOGRAPH-FA02", "CJK COMPATIBILITY IDEOGRAPH-FA03", "CJK COMPATIBILITY IDEOGRAPH-FA04", "CJK COMPATIBILITY IDEOGRAPH-FA05", "CJK COMPATIBILITY IDEOGRAPH-FA06", "CJK COMPATIBILITY IDEOGRAPH-FA07", "CJK COMPATIBILITY IDEOGRAPH-FA08", "CJK COMPATIBILITY IDEOGRAPH-FA09", "CJK COMPATIBILITY IDEOGRAPH-FA0A", "CJK COMPATIBILITY IDEOGRAPH-FA0B", "CJK COMPATIBILITY IDEOGRAPH-FA0C", "CJK COMPATIBILITY IDEOGRAPH-FA0D", "CJK COMPATIBILITY IDEOGRAPH-FA0E", "CJK COMPATIBILITY IDEOGRAPH-FA0F", "CJK COMPATIBILITY IDEOGRAPH-FA10", "CJK COMPATIBILITY IDEOGRAPH-FA11", "CJK COMPATIBILITY IDEOGRAPH-FA12", "CJK COMPATIBILITY IDEOGRAPH-FA13", "CJK COMPATIBILITY IDEOGRAPH-FA14", "CJK COMPATIBILITY IDEOGRAPH-FA15", "CJK COMPATIBILITY IDEOGRAPH-FA16", "CJK COMPATIBILITY IDEOGRAPH-FA17", "CJK COMPATIBILITY IDEOGRAPH-FA18", "CJK COMPATIBILITY IDEOGRAPH-FA19", "CJK COMPATIBILITY IDEOGRAPH-FA1A", "CJK COMPATIBILITY IDEOGRAPH-FA1B", "CJK COMPATIBILITY IDEOGRAPH-FA1C", "CJK COMPATIBILITY IDEOGRAPH-FA1D", "CJK COMPATIBILITY IDEOGRAPH-FA1E", "CJK COMPATIBILITY IDEOGRAPH-FA1F", "CJK COMPATIBILITY IDEOGRAPH-FA20", "CJK COMPATIBILITY IDEOGRAPH-FA21", "CJK COMPATIBILITY IDEOGRAPH-FA22", "CJK COMPATIBILITY IDEOGRAPH-FA23", "CJK COMPATIBILITY IDEOGRAPH-FA24", "CJK COMPATIBILITY IDEOGRAPH-FA25", "CJK COMPATIBILITY IDEOGRAPH-FA26", "CJK COMPATIBILITY IDEOGRAPH-FA27", "CJK COMPATIBILITY IDEOGRAPH-FA28", "CJK COMPATIBILITY IDEOGRAPH-FA29", "CJK COMPATIBILITY IDEOGRAPH-FA2A", "CJK COMPATIBILITY IDEOGRAPH-FA2B", "CJK COMPATIBILITY IDEOGRAPH-FA2C", "CJK COMPATIBILITY IDEOGRAPH-FA2D", "CJK COMPATIBILITY IDEOGRAPH-FA2E", "CJK COMPATIBILITY IDEOGRAPH-FA2F", "CJK COMPATIBILITY IDEOGRAPH-FA30", "CJK COMPATIBILITY IDEOGRAPH-FA31", "CJK COMPATIBILITY IDEOGRAPH-FA32", "CJK COMPATIBILITY IDEOGRAPH-FA33", "CJK COMPATIBILITY IDEOGRAPH-FA34", "CJK COMPATIBILITY IDEOGRAPH-FA35", "CJK COMPATIBILITY IDEOGRAPH-FA36", "CJK COMPATIBILITY IDEOGRAPH-FA37", "CJK COMPATIBILITY IDEOGRAPH-FA38", "CJK COMPATIBILITY IDEOGRAPH-FA39", "CJK COMPATIBILITY IDEOGRAPH-FA3A", "CJK COMPATIBILITY IDEOGRAPH-FA3B", "CJK COMPATIBILITY IDEOGRAPH-FA3C", "CJK COMPATIBILITY IDEOGRAPH-FA3D", "CJK COMPATIBILITY IDEOGRAPH-FA3E", "CJK COMPATIBILITY IDEOGRAPH-FA3F", "CJK COMPATIBILITY IDEOGRAPH-FA40", "CJK COMPATIBILITY IDEOGRAPH-FA41", "CJK COMPATIBILITY IDEOGRAPH-FA42", "CJK COMPATIBILITY IDEOGRAPH-FA43", "CJK COMPATIBILITY IDEOGRAPH-FA44", "CJK COMPATIBILITY IDEOGRAPH-FA45", "CJK COMPATIBILITY IDEOGRAPH-FA46", "CJK COMPATIBILITY IDEOGRAPH-FA47", "CJK COMPATIBILITY IDEOGRAPH-FA48", "CJK COMPATIBILITY IDEOGRAPH-FA49", "CJK COMPATIBILITY IDEOGRAPH-FA4A", "CJK COMPATIBILITY IDEOGRAPH-FA4B", "CJK COMPATIBILITY IDEOGRAPH-FA4C", "CJK COMPATIBILITY IDEOGRAPH-FA4D", "CJK COMPATIBILITY IDEOGRAPH-FA4E", "CJK COMPATIBILITY IDEOGRAPH-FA4F", "CJK COMPATIBILITY IDEOGRAPH-FA50", "CJK COMPATIBILITY IDEOGRAPH-FA51", "CJK COMPATIBILITY IDEOGRAPH-FA52", "CJK COMPATIBILITY IDEOGRAPH-FA53", "CJK COMPATIBILITY IDEOGRAPH-FA54", "CJK COMPATIBILITY IDEOGRAPH-FA55", "CJK COMPATIBILITY IDEOGRAPH-FA56", "CJK COMPATIBILITY IDEOGRAPH-FA57", "CJK COMPATIBILITY IDEOGRAPH-FA58", "CJK COMPATIBILITY IDEOGRAPH-FA59", "CJK COMPATIBILITY IDEOGRAPH-FA5A", "CJK COMPATIBILITY IDEOGRAPH-FA5B", "CJK COMPATIBILITY IDEOGRAPH-FA5C", "CJK COMPATIBILITY IDEOGRAPH-FA5D", "CJK COMPATIBILITY IDEOGRAPH-FA5E", "CJK COMPATIBILITY IDEOGRAPH-FA5F", "CJK COMPATIBILITY IDEOGRAPH-FA60", "CJK COMPATIBILITY IDEOGRAPH-FA61", "CJK COMPATIBILITY IDEOGRAPH-FA62", "CJK COMPATIBILITY IDEOGRAPH-FA63", "CJK COMPATIBILITY IDEOGRAPH-FA64", "CJK COMPATIBILITY IDEOGRAPH-FA65", "CJK COMPATIBILITY IDEOGRAPH-FA66", "CJK COMPATIBILITY IDEOGRAPH-FA67", "CJK COMPATIBILITY IDEOGRAPH-FA68", "CJK COMPATIBILITY IDEOGRAPH-FA69", "CJK COMPATIBILITY IDEOGRAPH-FA6A", "CJK COMPATIBILITY IDEOGRAPH-FA6B", "CJK COMPATIBILITY IDEOGRAPH-FA6C", "CJK COMPATIBILITY IDEOGRAPH-FA6D", "CJK COMPATIBILITY IDEOGRAPH-FA70", "CJK COMPATIBILITY IDEOGRAPH-FA71", "CJK COMPATIBILITY IDEOGRAPH-FA72", "CJK COMPATIBILITY IDEOGRAPH-FA73", "CJK COMPATIBILITY IDEOGRAPH-FA74", "CJK COMPATIBILITY IDEOGRAPH-FA75", "CJK COMPATIBILITY IDEOGRAPH-FA76", "CJK COMPATIBILITY IDEOGRAPH-FA77", "CJK COMPATIBILITY IDEOGRAPH-FA78", "CJK COMPATIBILITY IDEOGRAPH-FA79", "CJK COMPATIBILITY IDEOGRAPH-FA7A", "CJK COMPATIBILITY IDEOGRAPH-FA7B", "CJK COMPATIBILITY IDEOGRAPH-FA7C", "CJK COMPATIBILITY IDEOGRAPH-FA7D", "CJK COMPATIBILITY IDEOGRAPH-FA7E", "CJK COMPATIBILITY IDEOGRAPH-FA7F", "CJK COMPATIBILITY IDEOGRAPH-FA80", "CJK COMPATIBILITY IDEOGRAPH-FA81", "CJK COMPATIBILITY IDEOGRAPH-FA82", "CJK COMPATIBILITY IDEOGRAPH-FA83", "CJK COMPATIBILITY IDEOGRAPH-FA84", "CJK COMPATIBILITY IDEOGRAPH-FA85", "CJK COMPATIBILITY IDEOGRAPH-FA86", "CJK COMPATIBILITY IDEOGRAPH-FA87", "CJK COMPATIBILITY IDEOGRAPH-FA88", "CJK COMPATIBILITY IDEOGRAPH-FA89", "CJK COMPATIBILITY IDEOGRAPH-FA8A", "CJK COMPATIBILITY IDEOGRAPH-FA8B", "CJK COMPATIBILITY IDEOGRAPH-FA8C", "CJK COMPATIBILITY IDEOGRAPH-FA8D", "CJK COMPATIBILITY IDEOGRAPH-FA8E", "CJK COMPATIBILITY IDEOGRAPH-FA8F", "CJK COMPATIBILITY IDEOGRAPH-FA90", "CJK COMPATIBILITY IDEOGRAPH-FA91", "CJK COMPATIBILITY IDEOGRAPH-FA92", "CJK COMPATIBILITY IDEOGRAPH-FA93", "CJK COMPATIBILITY IDEOGRAPH-FA94", "CJK COMPATIBILITY IDEOGRAPH-FA95", "CJK COMPATIBILITY IDEOGRAPH-FA96", "CJK COMPATIBILITY IDEOGRAPH-FA97", "CJK COMPATIBILITY IDEOGRAPH-FA98", "CJK COMPATIBILITY IDEOGRAPH-FA99", "CJK COMPATIBILITY IDEOGRAPH-FA9A", "CJK COMPATIBILITY IDEOGRAPH-FA9B", "CJK COMPATIBILITY IDEOGRAPH-FA9C", "CJK COMPATIBILITY IDEOGRAPH-FA9D", "CJK COMPATIBILITY IDEOGRAPH-FA9E", "CJK COMPATIBILITY IDEOGRAPH-FA9F", "CJK COMPATIBILITY IDEOGRAPH-FAA0", "CJK COMPATIBILITY IDEOGRAPH-FAA1", "CJK COMPATIBILITY IDEOGRAPH-FAA2", "CJK COMPATIBILITY IDEOGRAPH-FAA3", "CJK COMPATIBILITY IDEOGRAPH-FAA4", "CJK COMPATIBILITY IDEOGRAPH-FAA5", "CJK COMPATIBILITY IDEOGRAPH-FAA6", "CJK COMPATIBILITY IDEOGRAPH-FAA7", "CJK COMPATIBILITY IDEOGRAPH-FAA8", "CJK COMPATIBILITY IDEOGRAPH-FAA9", "CJK COMPATIBILITY IDEOGRAPH-FAAA", "CJK COMPATIBILITY IDEOGRAPH-FAAB", "CJK COMPATIBILITY IDEOGRAPH-FAAC", "CJK COMPATIBILITY IDEOGRAPH-FAAD", "CJK COMPATIBILITY IDEOGRAPH-FAAE", "CJK COMPATIBILITY IDEOGRAPH-FAAF", "CJK COMPATIBILITY IDEOGRAPH-FAB0", "CJK COMPATIBILITY IDEOGRAPH-FAB1", "CJK COMPATIBILITY IDEOGRAPH-FAB2", "CJK COMPATIBILITY IDEOGRAPH-FAB3", "CJK COMPATIBILITY IDEOGRAPH-FAB4", "CJK COMPATIBILITY IDEOGRAPH-FAB5", "CJK COMPATIBILITY IDEOGRAPH-FAB6", "CJK COMPATIBILITY IDEOGRAPH-FAB7", "CJK COMPATIBILITY IDEOGRAPH-FAB8", "CJK COMPATIBILITY IDEOGRAPH-FAB9", "CJK COMPATIBILITY IDEOGRAPH-FABA", "CJK COMPATIBILITY IDEOGRAPH-FABB", "CJK COMPATIBILITY IDEOGRAPH-FABC", "CJK COMPATIBILITY IDEOGRAPH-FABD", "CJK COMPATIBILITY IDEOGRAPH-FABE", "CJK COMPATIBILITY IDEOGRAPH-FABF", "CJK COMPATIBILITY IDEOGRAPH-FAC0", "CJK COMPATIBILITY IDEOGRAPH-FAC1", "CJK COMPATIBILITY IDEOGRAPH-FAC2", "CJK COMPATIBILITY IDEOGRAPH-FAC3", "CJK COMPATIBILITY IDEOGRAPH-FAC4", "CJK COMPATIBILITY IDEOGRAPH-FAC5", "CJK COMPATIBILITY IDEOGRAPH-FAC6", "CJK COMPATIBILITY IDEOGRAPH-FAC7", "CJK COMPATIBILITY IDEOGRAPH-FAC8", "CJK COMPATIBILITY IDEOGRAPH-FAC9", "CJK COMPATIBILITY IDEOGRAPH-FACA", "CJK COMPATIBILITY IDEOGRAPH-FACB", "CJK COMPATIBILITY IDEOGRAPH-FACC", "CJK COMPATIBILITY IDEOGRAPH-FACD", "CJK COMPATIBILITY IDEOGRAPH-FACE", "CJK COMPATIBILITY IDEOGRAPH-FACF", "CJK COMPATIBILITY IDEOGRAPH-FAD0", "CJK COMPATIBILITY IDEOGRAPH-FAD1", "CJK COMPATIBILITY IDEOGRAPH-FAD2", "CJK COMPATIBILITY IDEOGRAPH-FAD3", "CJK COMPATIBILITY IDEOGRAPH-FAD4", "CJK COMPATIBILITY IDEOGRAPH-FAD5", "CJK COMPATIBILITY IDEOGRAPH-FAD6", "CJK COMPATIBILITY IDEOGRAPH-FAD7", "CJK COMPATIBILITY IDEOGRAPH-FAD8", "CJK COMPATIBILITY IDEOGRAPH-FAD9", "LATIN SMALL LIGATURE FF", "LATIN SMALL LIGATURE FI", "LATIN SMALL LIGATURE FL", "LATIN SMALL LIGATURE FFI", "LATIN SMALL LIGATURE FFL", "LATIN SMALL LIGATURE LONG S T", "LATIN SMALL LIGATURE ST", "ARMENIAN SMALL LIGATURE MEN NOW", "ARMENIAN SMALL LIGATURE MEN ECH", "ARMENIAN SMALL LIGATURE MEN INI", "ARMENIAN SMALL LIGATURE VEW NOW", "ARMENIAN SMALL LIGATURE MEN XEH", "HEBREW LETTER YOD WITH HIRIQ", "HEBREW POINT JUDEO-SPANISH VARIKA", "HEBREW LIGATURE YIDDISH YOD YOD PATAH", "HEBREW LETTER ALTERNATIVE AYIN", "HEBREW LETTER WIDE ALEF", "HEBREW LETTER WIDE DALET", "HEBREW LETTER WIDE HE", "HEBREW LETTER WIDE KAF", "HEBREW LETTER WIDE LAMED", "HEBREW LETTER WIDE FINAL MEM", "HEBREW LETTER WIDE RESH", "HEBREW LETTER WIDE TAV", "HEBREW LETTER ALTERNATIVE PLUS SIGN", "HEBREW LETTER SHIN WITH SHIN DOT", "HEBREW LETTER SHIN WITH SIN DOT", "HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT", "HEBREW LETTER SHIN WITH DAGESH AND SIN DOT", "HEBREW LETTER ALEF WITH PATAH", "HEBREW LETTER ALEF WITH QAMATS", "HEBREW LETTER ALEF WITH MAPIQ", "HEBREW LETTER BET WITH DAGESH", "HEBREW LETTER GIMEL WITH DAGESH", "HEBREW LETTER DALET WITH DAGESH", "HEBREW LETTER HE WITH MAPIQ", "HEBREW LETTER VAV WITH DAGESH", "HEBREW LETTER ZAYIN WITH DAGESH", "HEBREW LETTER TET WITH DAGESH", "HEBREW LETTER YOD WITH DAGESH", "HEBREW LETTER FINAL KAF WITH DAGESH", "HEBREW LETTER KAF WITH DAGESH", "HEBREW LETTER LAMED WITH DAGESH", "HEBREW LETTER MEM WITH DAGESH", "HEBREW LETTER NUN WITH DAGESH", "HEBREW LETTER SAMEKH WITH DAGESH", "HEBREW LETTER FINAL PE WITH DAGESH", "HEBREW LETTER PE WITH DAGESH", "HEBREW LETTER TSADI WITH DAGESH", "HEBREW LETTER QOF WITH DAGESH", "HEBREW LETTER RESH WITH DAGESH", "HEBREW LETTER SHIN WITH DAGESH", "HEBREW LETTER TAV WITH DAGESH", "HEBREW LETTER VAV WITH HOLAM", "HEBREW LETTER BET WITH RAFE", "HEBREW LETTER KAF WITH RAFE", "HEBREW LETTER PE WITH RAFE", "HEBREW LIGATURE ALEF LAMED", "ARABIC LETTER ALEF WASLA ISOLATED FORM", "ARABIC LETTER ALEF WASLA FINAL FORM", "ARABIC LETTER BEEH ISOLATED FORM", "ARABIC LETTER BEEH FINAL FORM", "ARABIC LETTER BEEH INITIAL FORM", "ARABIC LETTER BEEH MEDIAL FORM", "ARABIC LETTER PEH ISOLATED FORM", "ARABIC LETTER PEH FINAL FORM", "ARABIC LETTER PEH INITIAL FORM", "ARABIC LETTER PEH MEDIAL FORM", "ARABIC LETTER BEHEH ISOLATED FORM", "ARABIC LETTER BEHEH FINAL FORM", "ARABIC LETTER BEHEH INITIAL FORM", "ARABIC LETTER BEHEH MEDIAL FORM", "ARABIC LETTER TTEHEH ISOLATED FORM", "ARABIC LETTER TTEHEH FINAL FORM", "ARABIC LETTER TTEHEH INITIAL FORM", "ARABIC LETTER TTEHEH MEDIAL FORM", "ARABIC LETTER TEHEH ISOLATED FORM", "ARABIC LETTER TEHEH FINAL FORM", "ARABIC LETTER TEHEH INITIAL FORM", "ARABIC LETTER TEHEH MEDIAL FORM", "ARABIC LETTER TTEH ISOLATED FORM", "ARABIC LETTER TTEH FINAL FORM", "ARABIC LETTER TTEH INITIAL FORM", "ARABIC LETTER TTEH MEDIAL FORM", "ARABIC LETTER VEH ISOLATED FORM", "ARABIC LETTER VEH FINAL FORM", "ARABIC LETTER VEH INITIAL FORM", "ARABIC LETTER VEH MEDIAL FORM", "ARABIC LETTER PEHEH ISOLATED FORM", "ARABIC LETTER PEHEH FINAL FORM", "ARABIC LETTER PEHEH INITIAL FORM", "ARABIC LETTER PEHEH MEDIAL FORM", "ARABIC LETTER DYEH ISOLATED FORM", "ARABIC LETTER DYEH FINAL FORM", "ARABIC LETTER DYEH INITIAL FORM", "ARABIC LETTER DYEH MEDIAL FORM", "ARABIC LETTER NYEH ISOLATED FORM", "ARABIC LETTER NYEH FINAL FORM", "ARABIC LETTER NYEH INITIAL FORM", "ARABIC LETTER NYEH MEDIAL FORM", "ARABIC LETTER TCHEH ISOLATED FORM", "ARABIC LETTER TCHEH FINAL FORM", "ARABIC LETTER TCHEH INITIAL FORM", "ARABIC LETTER TCHEH MEDIAL FORM", "ARABIC LETTER TCHEHEH ISOLATED FORM", "ARABIC LETTER TCHEHEH FINAL FORM", "ARABIC LETTER TCHEHEH INITIAL FORM", "ARABIC LETTER TCHEHEH MEDIAL FORM", "ARABIC LETTER DDAHAL ISOLATED FORM", "ARABIC LETTER DDAHAL FINAL FORM", "ARABIC LETTER DAHAL ISOLATED FORM", "ARABIC LETTER DAHAL FINAL FORM", "ARABIC LETTER DUL ISOLATED FORM", "ARABIC LETTER DUL FINAL FORM", "ARABIC LETTER DDAL ISOLATED FORM", "ARABIC LETTER DDAL FINAL FORM", "ARABIC LETTER JEH ISOLATED FORM", "ARABIC LETTER JEH FINAL FORM", "ARABIC LETTER RREH ISOLATED FORM", "ARABIC LETTER RREH FINAL FORM", "ARABIC LETTER KEHEH ISOLATED FORM", "ARABIC LETTER KEHEH FINAL FORM", "ARABIC LETTER KEHEH INITIAL FORM", "ARABIC LETTER KEHEH MEDIAL FORM", "ARABIC LETTER GAF ISOLATED FORM", "ARABIC LETTER GAF FINAL FORM", "ARABIC LETTER GAF INITIAL FORM", "ARABIC LETTER GAF MEDIAL FORM", "ARABIC LETTER GUEH ISOLATED FORM", "ARABIC LETTER GUEH FINAL FORM", "ARABIC LETTER GUEH INITIAL FORM", "ARABIC LETTER GUEH MEDIAL FORM", "ARABIC LETTER NGOEH ISOLATED FORM", "ARABIC LETTER NGOEH FINAL FORM", "ARABIC LETTER NGOEH INITIAL FORM", "ARABIC LETTER NGOEH MEDIAL FORM", "ARABIC LETTER NOON GHUNNA ISOLATED FORM", "ARABIC LETTER NOON GHUNNA FINAL FORM", "ARABIC LETTER RNOON ISOLATED FORM", "ARABIC LETTER RNOON FINAL FORM", "ARABIC LETTER RNOON INITIAL FORM", "ARABIC LETTER RNOON MEDIAL FORM", "ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM", "ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM", "ARABIC LETTER HEH GOAL ISOLATED FORM", "ARABIC LETTER HEH GOAL FINAL FORM", "ARABIC LETTER HEH GOAL INITIAL FORM", "ARABIC LETTER HEH GOAL MEDIAL FORM", "ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM", "ARABIC LETTER HEH DOACHASHMEE FINAL FORM", "ARABIC LETTER HEH DOACHASHMEE INITIAL FORM", "ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM", "ARABIC LETTER YEH BARREE ISOLATED FORM", "ARABIC LETTER YEH BARREE FINAL FORM", "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM", "ARABIC SYMBOL DOT ABOVE", "ARABIC SYMBOL DOT BELOW", "ARABIC SYMBOL TWO DOTS ABOVE", "ARABIC SYMBOL TWO DOTS BELOW", "ARABIC SYMBOL THREE DOTS ABOVE", "ARABIC SYMBOL THREE DOTS BELOW", "ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE", "ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW", "ARABIC SYMBOL FOUR DOTS ABOVE", "ARABIC SYMBOL FOUR DOTS BELOW", "ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW", "ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE", "ARABIC SYMBOL TWO DOTS VERTICALLY BELOW", "ARABIC SYMBOL RING", "ARABIC SYMBOL SMALL TAH ABOVE", "ARABIC SYMBOL SMALL TAH BELOW", "ARABIC LETTER NG ISOLATED FORM", "ARABIC LETTER NG FINAL FORM", "ARABIC LETTER NG INITIAL FORM", "ARABIC LETTER NG MEDIAL FORM", "ARABIC LETTER U ISOLATED FORM", "ARABIC LETTER U FINAL FORM", "ARABIC LETTER OE ISOLATED FORM", "ARABIC LETTER OE FINAL FORM", "ARABIC LETTER YU ISOLATED FORM", "ARABIC LETTER YU FINAL FORM", "ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LETTER VE ISOLATED FORM", "ARABIC LETTER VE FINAL FORM", "ARABIC LETTER KIRGHIZ OE ISOLATED FORM", "ARABIC LETTER KIRGHIZ OE FINAL FORM", "ARABIC LETTER KIRGHIZ YU ISOLATED FORM", "ARABIC LETTER KIRGHIZ YU FINAL FORM", "ARABIC LETTER E ISOLATED FORM", "ARABIC LETTER E FINAL FORM", "ARABIC LETTER E INITIAL FORM", "ARABIC LETTER E MEDIAL FORM", "ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM", "ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM", "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM", "ARABIC LETTER FARSI YEH ISOLATED FORM", "ARABIC LETTER FARSI YEH FINAL FORM", "ARABIC LETTER FARSI YEH INITIAL FORM", "ARABIC LETTER FARSI YEH MEDIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM", "ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE BEH WITH HAH ISOLATED FORM", "ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM", "ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE BEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE TEH WITH HAH ISOLATED FORM", "ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM", "ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE TEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE THEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM", "ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM", "ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM", "ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM", "ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM", "ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM", "ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM", "ARABIC LIGATURE SAD WITH HAH ISOLATED FORM", "ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM", "ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM", "ARABIC LIGATURE DAD WITH HAH ISOLATED FORM", "ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM", "ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM", "ARABIC LIGATURE TAH WITH HAH ISOLATED FORM", "ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM", "ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM", "ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM", "ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM", "ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE FEH WITH HAH ISOLATED FORM", "ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM", "ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE FEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE QAF WITH HAH ISOLATED FORM", "ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM", "ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE QAF WITH YEH ISOLATED FORM", "ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM", "ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM", "ARABIC LIGATURE KAF WITH HAH ISOLATED FORM", "ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM", "ARABIC LIGATURE KAF WITH LAM ISOLATED FORM", "ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM", "ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE KAF WITH YEH ISOLATED FORM", "ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM", "ARABIC LIGATURE LAM WITH HAH ISOLATED FORM", "ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM", "ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM", "ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE LAM WITH YEH ISOLATED FORM", "ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM", "ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM", "ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM", "ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM", "ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM", "ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM", "ARABIC LIGATURE NOON WITH HAH ISOLATED FORM", "ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM", "ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM", "ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE NOON WITH YEH ISOLATED FORM", "ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE HEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAH ISOLATED FORM", "ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM", "ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM", "ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE YEH WITH YEH ISOLATED FORM", "ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM", "ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM", "ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM", "ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM", "ARABIC LIGATURE BEH WITH REH FINAL FORM", "ARABIC LIGATURE BEH WITH ZAIN FINAL FORM", "ARABIC LIGATURE BEH WITH MEEM FINAL FORM", "ARABIC LIGATURE BEH WITH NOON FINAL FORM", "ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE BEH WITH YEH FINAL FORM", "ARABIC LIGATURE TEH WITH REH FINAL FORM", "ARABIC LIGATURE TEH WITH ZAIN FINAL FORM", "ARABIC LIGATURE TEH WITH MEEM FINAL FORM", "ARABIC LIGATURE TEH WITH NOON FINAL FORM", "ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE TEH WITH YEH FINAL FORM", "ARABIC LIGATURE THEH WITH REH FINAL FORM", "ARABIC LIGATURE THEH WITH ZAIN FINAL FORM", "ARABIC LIGATURE THEH WITH MEEM FINAL FORM", "ARABIC LIGATURE THEH WITH NOON FINAL FORM", "ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE THEH WITH YEH FINAL FORM", "ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE FEH WITH YEH FINAL FORM", "ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE QAF WITH YEH FINAL FORM", "ARABIC LIGATURE KAF WITH ALEF FINAL FORM", "ARABIC LIGATURE KAF WITH LAM FINAL FORM", "ARABIC LIGATURE KAF WITH MEEM FINAL FORM", "ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE KAF WITH YEH FINAL FORM", "ARABIC LIGATURE LAM WITH MEEM FINAL FORM", "ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE LAM WITH YEH FINAL FORM", "ARABIC LIGATURE MEEM WITH ALEF FINAL FORM", "ARABIC LIGATURE MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE NOON WITH REH FINAL FORM", "ARABIC LIGATURE NOON WITH ZAIN FINAL FORM", "ARABIC LIGATURE NOON WITH MEEM FINAL FORM", "ARABIC LIGATURE NOON WITH NOON FINAL FORM", "ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE NOON WITH YEH FINAL FORM", "ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM", "ARABIC LIGATURE YEH WITH REH FINAL FORM", "ARABIC LIGATURE YEH WITH ZAIN FINAL FORM", "ARABIC LIGATURE YEH WITH MEEM FINAL FORM", "ARABIC LIGATURE YEH WITH NOON FINAL FORM", "ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE YEH WITH YEH FINAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM", "ARABIC LIGATURE BEH WITH JEEM INITIAL FORM", "ARABIC LIGATURE BEH WITH HAH INITIAL FORM", "ARABIC LIGATURE BEH WITH KHAH INITIAL FORM", "ARABIC LIGATURE BEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE BEH WITH HEH INITIAL FORM", "ARABIC LIGATURE TEH WITH JEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH HAH INITIAL FORM", "ARABIC LIGATURE TEH WITH KHAH INITIAL FORM", "ARABIC LIGATURE TEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH HEH INITIAL FORM", "ARABIC LIGATURE THEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE JEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE HAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH HAH INITIAL FORM", "ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM", "ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM", "ARABIC LIGATURE SAD WITH HAH INITIAL FORM", "ARABIC LIGATURE SAD WITH KHAH INITIAL FORM", "ARABIC LIGATURE SAD WITH MEEM INITIAL FORM", "ARABIC LIGATURE DAD WITH JEEM INITIAL FORM", "ARABIC LIGATURE DAD WITH HAH INITIAL FORM", "ARABIC LIGATURE DAD WITH KHAH INITIAL FORM", "ARABIC LIGATURE DAD WITH MEEM INITIAL FORM", "ARABIC LIGATURE TAH WITH HAH INITIAL FORM", "ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE AIN WITH JEEM INITIAL FORM", "ARABIC LIGATURE AIN WITH MEEM INITIAL FORM", "ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM", "ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM", "ARABIC LIGATURE FEH WITH JEEM INITIAL FORM", "ARABIC LIGATURE FEH WITH HAH INITIAL FORM", "ARABIC LIGATURE FEH WITH KHAH INITIAL FORM", "ARABIC LIGATURE FEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE QAF WITH HAH INITIAL FORM", "ARABIC LIGATURE QAF WITH MEEM INITIAL FORM", "ARABIC LIGATURE KAF WITH JEEM INITIAL FORM", "ARABIC LIGATURE KAF WITH HAH INITIAL FORM", "ARABIC LIGATURE KAF WITH KHAH INITIAL FORM", "ARABIC LIGATURE KAF WITH LAM INITIAL FORM", "ARABIC LIGATURE KAF WITH MEEM INITIAL FORM", "ARABIC LIGATURE LAM WITH JEEM INITIAL FORM", "ARABIC LIGATURE LAM WITH HAH INITIAL FORM", "ARABIC LIGATURE LAM WITH KHAH INITIAL FORM", "ARABIC LIGATURE LAM WITH MEEM INITIAL FORM", "ARABIC LIGATURE LAM WITH HEH INITIAL FORM", "ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM", "ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH JEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH HAH INITIAL FORM", "ARABIC LIGATURE NOON WITH KHAH INITIAL FORM", "ARABIC LIGATURE NOON WITH MEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH HEH INITIAL FORM", "ARABIC LIGATURE HEH WITH JEEM INITIAL FORM", "ARABIC LIGATURE HEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM", "ARABIC LIGATURE YEH WITH JEEM INITIAL FORM", "ARABIC LIGATURE YEH WITH HAH INITIAL FORM", "ARABIC LIGATURE YEH WITH KHAH INITIAL FORM", "ARABIC LIGATURE YEH WITH MEEM INITIAL FORM", "ARABIC LIGATURE YEH WITH HEH INITIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM", "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM", "ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE BEH WITH HEH MEDIAL FORM", "ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE TEH WITH HEH MEDIAL FORM", "ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE THEH WITH HEH MEDIAL FORM", "ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM", "ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM", "ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM", "ARABIC LIGATURE KAF WITH LAM MEDIAL FORM", "ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM", "ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM", "ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM", "ARABIC LIGATURE NOON WITH HEH MEDIAL FORM", "ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE YEH WITH HEH MEDIAL FORM", "ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM", "ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM", "ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM", "ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE TAH WITH YEH ISOLATED FORM", "ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE AIN WITH YEH ISOLATED FORM", "ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM", "ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM", "ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE HAH WITH YEH ISOLATED FORM", "ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM", "ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM", "ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE SAD WITH YEH ISOLATED FORM", "ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM", "ARABIC LIGATURE DAD WITH YEH ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM", "ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM", "ARABIC LIGATURE SEEN WITH REH ISOLATED FORM", "ARABIC LIGATURE SAD WITH REH ISOLATED FORM", "ARABIC LIGATURE DAD WITH REH ISOLATED FORM", "ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE TAH WITH YEH FINAL FORM", "ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE AIN WITH YEH FINAL FORM", "ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE GHAIN WITH YEH FINAL FORM", "ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SEEN WITH YEH FINAL FORM", "ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SHEEN WITH YEH FINAL FORM", "ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE HAH WITH YEH FINAL FORM", "ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE KHAH WITH YEH FINAL FORM", "ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SAD WITH YEH FINAL FORM", "ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE DAD WITH YEH FINAL FORM", "ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM", "ARABIC LIGATURE SHEEN WITH HAH FINAL FORM", "ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM", "ARABIC LIGATURE SHEEN WITH REH FINAL FORM", "ARABIC LIGATURE SEEN WITH REH FINAL FORM", "ARABIC LIGATURE SAD WITH REH FINAL FORM", "ARABIC LIGATURE DAD WITH REH FINAL FORM", "ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM", "ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM", "ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH HEH INITIAL FORM", "ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM", "ARABIC LIGATURE TAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM", "ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM", "ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM", "ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM", "ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM", "ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM", "ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM", "ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM", "ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM", "ORNATE LEFT PARENTHESIS", "ORNATE RIGHT PARENTHESIS", "ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM", "ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM", "ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM", "ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM", "ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM", "ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM", "ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM", "ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM", "ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM", "ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM", "ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM", "ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM", "ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM", "ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM", "ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM", "ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM", "ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM", "ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM", "ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM", "ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM", "ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM", "ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM", "ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM", "ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM", "ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM", "ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM", "ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM", "ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM", "ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM", "ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM", "ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM", "ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM", "ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM", "ARABIC LIGATURE ALLAH ISOLATED FORM", "ARABIC LIGATURE AKBAR ISOLATED FORM", "ARABIC LIGATURE MOHAMMAD ISOLATED FORM", "ARABIC LIGATURE SALAM ISOLATED FORM", "ARABIC LIGATURE RASOUL ISOLATED FORM", "ARABIC LIGATURE ALAYHE ISOLATED FORM", "ARABIC LIGATURE WASALLAM ISOLATED FORM", "ARABIC LIGATURE SALLA ISOLATED FORM", "ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM", "ARABIC LIGATURE JALLAJALALOUHOU", "RIAL SIGN", "ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM", "VARIATION SELECTOR-1", "VARIATION SELECTOR-2", "VARIATION SELECTOR-3", "VARIATION SELECTOR-4", "VARIATION SELECTOR-5", "VARIATION SELECTOR-6", "VARIATION SELECTOR-7", "VARIATION SELECTOR-8", "VARIATION SELECTOR-9", "VARIATION SELECTOR-10", "VARIATION SELECTOR-11", "VARIATION SELECTOR-12", "VARIATION SELECTOR-13", "VARIATION SELECTOR-14", "VARIATION SELECTOR-15", "VARIATION SELECTOR-16", "PRESENTATION FORM FOR VERTICAL COMMA", "PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA", "PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP", "PRESENTATION FORM FOR VERTICAL COLON", "PRESENTATION FORM FOR VERTICAL SEMICOLON", "PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK", "PRESENTATION FORM FOR VERTICAL QUESTION MARK", "PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET", "PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS", "COMBINING LIGATURE LEFT HALF", "COMBINING LIGATURE RIGHT HALF", "COMBINING DOUBLE TILDE LEFT HALF", "COMBINING DOUBLE TILDE RIGHT HALF", "COMBINING MACRON LEFT HALF", "COMBINING MACRON RIGHT HALF", "COMBINING CONJOINING MACRON", "COMBINING LIGATURE LEFT HALF BELOW", "COMBINING LIGATURE RIGHT HALF BELOW", "COMBINING TILDE LEFT HALF BELOW", "COMBINING TILDE RIGHT HALF BELOW", "COMBINING MACRON LEFT HALF BELOW", "COMBINING MACRON RIGHT HALF BELOW", "COMBINING CONJOINING MACRON BELOW", "COMBINING CYRILLIC TITLO LEFT HALF", "COMBINING CYRILLIC TITLO RIGHT HALF", "PRESENTATION FORM FOR VERTICAL TWO DOT LEADER", "PRESENTATION FORM FOR VERTICAL EM DASH", "PRESENTATION FORM FOR VERTICAL EN DASH", "PRESENTATION FORM FOR VERTICAL LOW LINE", "PRESENTATION FORM FOR VERTICAL WAVY LOW LINE", "PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS", "PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS", "PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET", "PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET", "SESAME DOT", "WHITE SESAME DOT", "PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET", "PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET", "DASHED OVERLINE", "CENTRELINE OVERLINE", "WAVY OVERLINE", "DOUBLE WAVY OVERLINE", "DASHED LOW LINE", "CENTRELINE LOW LINE", "WAVY LOW LINE", "SMALL COMMA", "SMALL IDEOGRAPHIC COMMA", "SMALL FULL STOP", "SMALL SEMICOLON", "SMALL COLON", "SMALL QUESTION MARK", "SMALL EXCLAMATION MARK", "SMALL EM DASH", "SMALL LEFT PARENTHESIS", "SMALL RIGHT PARENTHESIS", "SMALL LEFT CURLY BRACKET", "SMALL RIGHT CURLY BRACKET", "SMALL LEFT TORTOISE SHELL BRACKET", "SMALL RIGHT TORTOISE SHELL BRACKET", "SMALL NUMBER SIGN", "SMALL AMPERSAND", "SMALL ASTERISK", "SMALL PLUS SIGN", "SMALL HYPHEN-MINUS", "SMALL LESS-THAN SIGN", "SMALL GREATER-THAN SIGN", "SMALL EQUALS SIGN", "SMALL REVERSE SOLIDUS", "SMALL DOLLAR SIGN", "SMALL PERCENT SIGN", "SMALL COMMERCIAL AT", "ARABIC FATHATAN ISOLATED FORM", "ARABIC TATWEEL WITH FATHATAN ABOVE", "ARABIC DAMMATAN ISOLATED FORM", "ARABIC TAIL FRAGMENT", "ARABIC KASRATAN ISOLATED FORM", "ARABIC FATHA ISOLATED FORM", "ARABIC FATHA MEDIAL FORM", "ARABIC DAMMA ISOLATED FORM", "ARABIC DAMMA MEDIAL FORM", "ARABIC KASRA ISOLATED FORM", "ARABIC KASRA MEDIAL FORM", "ARABIC SHADDA ISOLATED FORM", "ARABIC SHADDA MEDIAL FORM", "ARABIC SUKUN ISOLATED FORM", "ARABIC SUKUN MEDIAL FORM", "ARABIC LETTER HAMZA ISOLATED FORM", "ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM", "ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM", "ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM", "ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM", "ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM", "ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM", "ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM", "ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM", "ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM", "ARABIC LETTER ALEF ISOLATED FORM", "ARABIC LETTER ALEF FINAL FORM", "ARABIC LETTER BEH ISOLATED FORM", "ARABIC LETTER BEH FINAL FORM", "ARABIC LETTER BEH INITIAL FORM", "ARABIC LETTER BEH MEDIAL FORM", "ARABIC LETTER TEH MARBUTA ISOLATED FORM", "ARABIC LETTER TEH MARBUTA FINAL FORM", "ARABIC LETTER TEH ISOLATED FORM", "ARABIC LETTER TEH FINAL FORM", "ARABIC LETTER TEH INITIAL FORM", "ARABIC LETTER TEH MEDIAL FORM", "ARABIC LETTER THEH ISOLATED FORM", "ARABIC LETTER THEH FINAL FORM", "ARABIC LETTER THEH INITIAL FORM", "ARABIC LETTER THEH MEDIAL FORM", "ARABIC LETTER JEEM ISOLATED FORM", "ARABIC LETTER JEEM FINAL FORM", "ARABIC LETTER JEEM INITIAL FORM", "ARABIC LETTER JEEM MEDIAL FORM", "ARABIC LETTER HAH ISOLATED FORM", "ARABIC LETTER HAH FINAL FORM", "ARABIC LETTER HAH INITIAL FORM", "ARABIC LETTER HAH MEDIAL FORM", "ARABIC LETTER KHAH ISOLATED FORM", "ARABIC LETTER KHAH FINAL FORM", "ARABIC LETTER KHAH INITIAL FORM", "ARABIC LETTER KHAH MEDIAL FORM", "ARABIC LETTER DAL ISOLATED FORM", "ARABIC LETTER DAL FINAL FORM", "ARABIC LETTER THAL ISOLATED FORM", "ARABIC LETTER THAL FINAL FORM", "ARABIC LETTER REH ISOLATED FORM", "ARABIC LETTER REH FINAL FORM", "ARABIC LETTER ZAIN ISOLATED FORM", "ARABIC LETTER ZAIN FINAL FORM", "ARABIC LETTER SEEN ISOLATED FORM", "ARABIC LETTER SEEN FINAL FORM", "ARABIC LETTER SEEN INITIAL FORM", "ARABIC LETTER SEEN MEDIAL FORM", "ARABIC LETTER SHEEN ISOLATED FORM", "ARABIC LETTER SHEEN FINAL FORM", "ARABIC LETTER SHEEN INITIAL FORM", "ARABIC LETTER SHEEN MEDIAL FORM", "ARABIC LETTER SAD ISOLATED FORM", "ARABIC LETTER SAD FINAL FORM", "ARABIC LETTER SAD INITIAL FORM", "ARABIC LETTER SAD MEDIAL FORM", "ARABIC LETTER DAD ISOLATED FORM", "ARABIC LETTER DAD FINAL FORM", "ARABIC LETTER DAD INITIAL FORM", "ARABIC LETTER DAD MEDIAL FORM", "ARABIC LETTER TAH ISOLATED FORM", "ARABIC LETTER TAH FINAL FORM", "ARABIC LETTER TAH INITIAL FORM", "ARABIC LETTER TAH MEDIAL FORM", "ARABIC LETTER ZAH ISOLATED FORM", "ARABIC LETTER ZAH FINAL FORM", "ARABIC LETTER ZAH INITIAL FORM", "ARABIC LETTER ZAH MEDIAL FORM", "ARABIC LETTER AIN ISOLATED FORM", "ARABIC LETTER AIN FINAL FORM", "ARABIC LETTER AIN INITIAL FORM", "ARABIC LETTER AIN MEDIAL FORM", "ARABIC LETTER GHAIN ISOLATED FORM", "ARABIC LETTER GHAIN FINAL FORM", "ARABIC LETTER GHAIN INITIAL FORM", "ARABIC LETTER GHAIN MEDIAL FORM", "ARABIC LETTER FEH ISOLATED FORM", "ARABIC LETTER FEH FINAL FORM", "ARABIC LETTER FEH INITIAL FORM", "ARABIC LETTER FEH MEDIAL FORM", "ARABIC LETTER QAF ISOLATED FORM", "ARABIC LETTER QAF FINAL FORM", "ARABIC LETTER QAF INITIAL FORM", "ARABIC LETTER QAF MEDIAL FORM", "ARABIC LETTER KAF ISOLATED FORM", "ARABIC LETTER KAF FINAL FORM", "ARABIC LETTER KAF INITIAL FORM", "ARABIC LETTER KAF MEDIAL FORM", "ARABIC LETTER LAM ISOLATED FORM", "ARABIC LETTER LAM FINAL FORM", "ARABIC LETTER LAM INITIAL FORM", "ARABIC LETTER LAM MEDIAL FORM", "ARABIC LETTER MEEM ISOLATED FORM", "ARABIC LETTER MEEM FINAL FORM", "ARABIC LETTER MEEM INITIAL FORM", "ARABIC LETTER MEEM MEDIAL FORM", "ARABIC LETTER NOON ISOLATED FORM", "ARABIC LETTER NOON FINAL FORM", "ARABIC LETTER NOON INITIAL FORM", "ARABIC LETTER NOON MEDIAL FORM", "ARABIC LETTER HEH ISOLATED FORM", "ARABIC LETTER HEH FINAL FORM", "ARABIC LETTER HEH INITIAL FORM", "ARABIC LETTER HEH MEDIAL FORM", "ARABIC LETTER WAW ISOLATED FORM", "ARABIC LETTER WAW FINAL FORM", "ARABIC LETTER ALEF MAKSURA ISOLATED FORM", "ARABIC LETTER ALEF MAKSURA FINAL FORM", "ARABIC LETTER YEH ISOLATED FORM", "ARABIC LETTER YEH FINAL FORM", "ARABIC LETTER YEH INITIAL FORM", "ARABIC LETTER YEH MEDIAL FORM", "ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM", "ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM", "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM", "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM", "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM", "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM", "ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM", "ARABIC LIGATURE LAM WITH ALEF FINAL FORM", "ZERO WIDTH NO-BREAK SPACE", "FULLWIDTH EXCLAMATION MARK", "FULLWIDTH QUOTATION MARK", "FULLWIDTH NUMBER SIGN", "FULLWIDTH DOLLAR SIGN", "FULLWIDTH PERCENT SIGN", "FULLWIDTH AMPERSAND", "FULLWIDTH APOSTROPHE", "FULLWIDTH LEFT PARENTHESIS", "FULLWIDTH RIGHT PARENTHESIS", "FULLWIDTH ASTERISK", "FULLWIDTH PLUS SIGN", "FULLWIDTH COMMA", "FULLWIDTH HYPHEN-MINUS", "FULLWIDTH FULL STOP", "FULLWIDTH SOLIDUS", "FULLWIDTH DIGIT ZERO", "FULLWIDTH DIGIT ONE", "FULLWIDTH DIGIT TWO", "FULLWIDTH DIGIT THREE", "FULLWIDTH DIGIT FOUR", "FULLWIDTH DIGIT FIVE", "FULLWIDTH DIGIT SIX", "FULLWIDTH DIGIT SEVEN", "FULLWIDTH DIGIT EIGHT", "FULLWIDTH DIGIT NINE", "FULLWIDTH COLON", "FULLWIDTH SEMICOLON", "FULLWIDTH LESS-THAN SIGN", "FULLWIDTH EQUALS SIGN", "FULLWIDTH GREATER-THAN SIGN", "FULLWIDTH QUESTION MARK", "FULLWIDTH COMMERCIAL AT", "FULLWIDTH LATIN CAPITAL LETTER A", "FULLWIDTH LATIN CAPITAL LETTER B", "FULLWIDTH LATIN CAPITAL LETTER C", "FULLWIDTH LATIN CAPITAL LETTER D", "FULLWIDTH LATIN CAPITAL LETTER E", "FULLWIDTH LATIN CAPITAL LETTER F", "FULLWIDTH LATIN CAPITAL LETTER G", "FULLWIDTH LATIN CAPITAL LETTER H", "FULLWIDTH LATIN CAPITAL LETTER I", "FULLWIDTH LATIN CAPITAL LETTER J", "FULLWIDTH LATIN CAPITAL LETTER K", "FULLWIDTH LATIN CAPITAL LETTER L", "FULLWIDTH LATIN CAPITAL LETTER M", "FULLWIDTH LATIN CAPITAL LETTER N", "FULLWIDTH LATIN CAPITAL LETTER O", "FULLWIDTH LATIN CAPITAL LETTER P", "FULLWIDTH LATIN CAPITAL LETTER Q", "FULLWIDTH LATIN CAPITAL LETTER R", "FULLWIDTH LATIN CAPITAL LETTER S", "FULLWIDTH LATIN CAPITAL LETTER T", "FULLWIDTH LATIN CAPITAL LETTER U", "FULLWIDTH LATIN CAPITAL LETTER V", "FULLWIDTH LATIN CAPITAL LETTER W", "FULLWIDTH LATIN CAPITAL LETTER X", "FULLWIDTH LATIN CAPITAL LETTER Y", "FULLWIDTH LATIN CAPITAL LETTER Z", "FULLWIDTH LEFT SQUARE BRACKET", "FULLWIDTH REVERSE SOLIDUS", "FULLWIDTH RIGHT SQUARE BRACKET", "FULLWIDTH CIRCUMFLEX ACCENT", "FULLWIDTH LOW LINE", "FULLWIDTH GRAVE ACCENT", "FULLWIDTH LATIN SMALL LETTER A", "FULLWIDTH LATIN SMALL LETTER B", "FULLWIDTH LATIN SMALL LETTER C", "FULLWIDTH LATIN SMALL LETTER D", "FULLWIDTH LATIN SMALL LETTER E", "FULLWIDTH LATIN SMALL LETTER F", "FULLWIDTH LATIN SMALL LETTER G", "FULLWIDTH LATIN SMALL LETTER H", "FULLWIDTH LATIN SMALL LETTER I", "FULLWIDTH LATIN SMALL LETTER J", "FULLWIDTH LATIN SMALL LETTER K", "FULLWIDTH LATIN SMALL LETTER L", "FULLWIDTH LATIN SMALL LETTER M", "FULLWIDTH LATIN SMALL LETTER N", "FULLWIDTH LATIN SMALL LETTER O", "FULLWIDTH LATIN SMALL LETTER P", "FULLWIDTH LATIN SMALL LETTER Q", "FULLWIDTH LATIN SMALL LETTER R", "FULLWIDTH LATIN SMALL LETTER S", "FULLWIDTH LATIN SMALL LETTER T", "FULLWIDTH LATIN SMALL LETTER U", "FULLWIDTH LATIN SMALL LETTER V", "FULLWIDTH LATIN SMALL LETTER W", "FULLWIDTH LATIN SMALL LETTER X", "FULLWIDTH LATIN SMALL LETTER Y", "FULLWIDTH LATIN SMALL LETTER Z", "FULLWIDTH LEFT CURLY BRACKET", "FULLWIDTH VERTICAL LINE", "FULLWIDTH RIGHT CURLY BRACKET", "FULLWIDTH TILDE", "FULLWIDTH LEFT WHITE PARENTHESIS", "FULLWIDTH RIGHT WHITE PARENTHESIS", "HALFWIDTH IDEOGRAPHIC FULL STOP", "HALFWIDTH LEFT CORNER BRACKET", "HALFWIDTH RIGHT CORNER BRACKET", "HALFWIDTH IDEOGRAPHIC COMMA", "HALFWIDTH KATAKANA MIDDLE DOT", "HALFWIDTH KATAKANA LETTER WO", "HALFWIDTH KATAKANA LETTER SMALL A", "HALFWIDTH KATAKANA LETTER SMALL I", "HALFWIDTH KATAKANA LETTER SMALL U", "HALFWIDTH KATAKANA LETTER SMALL E", "HALFWIDTH KATAKANA LETTER SMALL O", "HALFWIDTH KATAKANA LETTER SMALL YA", "HALFWIDTH KATAKANA LETTER SMALL YU", "HALFWIDTH KATAKANA LETTER SMALL YO", "HALFWIDTH KATAKANA LETTER SMALL TU", "HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK", "HALFWIDTH KATAKANA LETTER A", "HALFWIDTH KATAKANA LETTER I", "HALFWIDTH KATAKANA LETTER U", "HALFWIDTH KATAKANA LETTER E", "HALFWIDTH KATAKANA LETTER O", "HALFWIDTH KATAKANA LETTER KA", "HALFWIDTH KATAKANA LETTER KI", "HALFWIDTH KATAKANA LETTER KU", "HALFWIDTH KATAKANA LETTER KE", "HALFWIDTH KATAKANA LETTER KO", "HALFWIDTH KATAKANA LETTER SA", "HALFWIDTH KATAKANA LETTER SI", "HALFWIDTH KATAKANA LETTER SU", "HALFWIDTH KATAKANA LETTER SE", "HALFWIDTH KATAKANA LETTER SO", "HALFWIDTH KATAKANA LETTER TA", "HALFWIDTH KATAKANA LETTER TI", "HALFWIDTH KATAKANA LETTER TU", "HALFWIDTH KATAKANA LETTER TE", "HALFWIDTH KATAKANA LETTER TO", "HALFWIDTH KATAKANA LETTER NA", "HALFWIDTH KATAKANA LETTER NI", "HALFWIDTH KATAKANA LETTER NU", "HALFWIDTH KATAKANA LETTER NE", "HALFWIDTH KATAKANA LETTER NO", "HALFWIDTH KATAKANA LETTER HA", "HALFWIDTH KATAKANA LETTER HI", "HALFWIDTH KATAKANA LETTER HU", "HALFWIDTH KATAKANA LETTER HE", "HALFWIDTH KATAKANA LETTER HO", "HALFWIDTH KATAKANA LETTER MA", "HALFWIDTH KATAKANA LETTER MI", "HALFWIDTH KATAKANA LETTER MU", "HALFWIDTH KATAKANA LETTER ME", "HALFWIDTH KATAKANA LETTER MO", "HALFWIDTH KATAKANA LETTER YA", "HALFWIDTH KATAKANA LETTER YU", "HALFWIDTH KATAKANA LETTER YO", "HALFWIDTH KATAKANA LETTER RA", "HALFWIDTH KATAKANA LETTER RI", "HALFWIDTH KATAKANA LETTER RU", "HALFWIDTH KATAKANA LETTER RE", "HALFWIDTH KATAKANA LETTER RO", "HALFWIDTH KATAKANA LETTER WA", "HALFWIDTH KATAKANA LETTER N", "HALFWIDTH KATAKANA VOICED SOUND MARK", "HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK", "HALFWIDTH HANGUL FILLER", "HALFWIDTH HANGUL LETTER KIYEOK", "HALFWIDTH HANGUL LETTER SSANGKIYEOK", "HALFWIDTH HANGUL LETTER KIYEOK-SIOS", "HALFWIDTH HANGUL LETTER NIEUN", "HALFWIDTH HANGUL LETTER NIEUN-CIEUC", "HALFWIDTH HANGUL LETTER NIEUN-HIEUH", "HALFWIDTH HANGUL LETTER TIKEUT", "HALFWIDTH HANGUL LETTER SSANGTIKEUT", "HALFWIDTH HANGUL LETTER RIEUL", "HALFWIDTH HANGUL LETTER RIEUL-KIYEOK", "HALFWIDTH HANGUL LETTER RIEUL-MIEUM", "HALFWIDTH HANGUL LETTER RIEUL-PIEUP", "HALFWIDTH HANGUL LETTER RIEUL-SIOS", "HALFWIDTH HANGUL LETTER RIEUL-THIEUTH", "HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH", "HALFWIDTH HANGUL LETTER RIEUL-HIEUH", "HALFWIDTH HANGUL LETTER MIEUM", "HALFWIDTH HANGUL LETTER PIEUP", "HALFWIDTH HANGUL LETTER SSANGPIEUP", "HALFWIDTH HANGUL LETTER PIEUP-SIOS", "HALFWIDTH HANGUL LETTER SIOS", "HALFWIDTH HANGUL LETTER SSANGSIOS", "HALFWIDTH HANGUL LETTER IEUNG", "HALFWIDTH HANGUL LETTER CIEUC", "HALFWIDTH HANGUL LETTER SSANGCIEUC", "HALFWIDTH HANGUL LETTER CHIEUCH", "HALFWIDTH HANGUL LETTER KHIEUKH", "HALFWIDTH HANGUL LETTER THIEUTH", "HALFWIDTH HANGUL LETTER PHIEUPH", "HALFWIDTH HANGUL LETTER HIEUH", "HALFWIDTH HANGUL LETTER A", "HALFWIDTH HANGUL LETTER AE", "HALFWIDTH HANGUL LETTER YA", "HALFWIDTH HANGUL LETTER YAE", "HALFWIDTH HANGUL LETTER EO", "HALFWIDTH HANGUL LETTER E", "HALFWIDTH HANGUL LETTER YEO", "HALFWIDTH HANGUL LETTER YE", "HALFWIDTH HANGUL LETTER O", "HALFWIDTH HANGUL LETTER WA", "HALFWIDTH HANGUL LETTER WAE", "HALFWIDTH HANGUL LETTER OE", "HALFWIDTH HANGUL LETTER YO", "HALFWIDTH HANGUL LETTER U", "HALFWIDTH HANGUL LETTER WEO", "HALFWIDTH HANGUL LETTER WE", "HALFWIDTH HANGUL LETTER WI", "HALFWIDTH HANGUL LETTER YU", "HALFWIDTH HANGUL LETTER EU", "HALFWIDTH HANGUL LETTER YI", "HALFWIDTH HANGUL LETTER I", "FULLWIDTH CENT SIGN", "FULLWIDTH POUND SIGN", "FULLWIDTH NOT SIGN", "FULLWIDTH MACRON", "FULLWIDTH BROKEN BAR", "FULLWIDTH YEN SIGN", "FULLWIDTH WON SIGN", "HALFWIDTH FORMS LIGHT VERTICAL", "HALFWIDTH LEFTWARDS ARROW", "HALFWIDTH UPWARDS ARROW", "HALFWIDTH RIGHTWARDS ARROW", "HALFWIDTH DOWNWARDS ARROW", "HALFWIDTH BLACK SQUARE", "HALFWIDTH WHITE CIRCLE", "INTERLINEAR ANNOTATION ANCHOR", "INTERLINEAR ANNOTATION SEPARATOR", "INTERLINEAR ANNOTATION TERMINATOR", "OBJECT REPLACEMENT CHARACTER", "REPLACEMENT CHARACTER", "LINEAR B SYLLABLE B008 A", "LINEAR B SYLLABLE B038 E", "LINEAR B SYLLABLE B028 I", "LINEAR B SYLLABLE B061 O", "LINEAR B SYLLABLE B010 U", "LINEAR B SYLLABLE B001 DA", "LINEAR B SYLLABLE B045 DE", "LINEAR B SYLLABLE B007 DI", "LINEAR B SYLLABLE B014 DO", "LINEAR B SYLLABLE B051 DU", "LINEAR B SYLLABLE B057 JA", "LINEAR B SYLLABLE B046 JE", "LINEAR B SYLLABLE B036 JO", "LINEAR B SYLLABLE B065 JU", "LINEAR B SYLLABLE B077 KA", "LINEAR B SYLLABLE B044 KE", "LINEAR B SYLLABLE B067 KI", "LINEAR B SYLLABLE B070 KO", "LINEAR B SYLLABLE B081 KU", "LINEAR B SYLLABLE B080 MA", "LINEAR B SYLLABLE B013 ME", "LINEAR B SYLLABLE B073 MI", "LINEAR B SYLLABLE B015 MO", "LINEAR B SYLLABLE B023 MU", "LINEAR B SYLLABLE B006 NA", "LINEAR B SYLLABLE B024 NE", "LINEAR B SYLLABLE B030 NI", "LINEAR B SYLLABLE B052 NO", "LINEAR B SYLLABLE B055 NU", "LINEAR B SYLLABLE B003 PA", "LINEAR B SYLLABLE B072 PE", "LINEAR B SYLLABLE B039 PI", "LINEAR B SYLLABLE B011 PO", "LINEAR B SYLLABLE B050 PU", "LINEAR B SYLLABLE B016 QA", "LINEAR B SYLLABLE B078 QE", "LINEAR B SYLLABLE B021 QI", "LINEAR B SYLLABLE B032 QO", "LINEAR B SYLLABLE B060 RA", "LINEAR B SYLLABLE B027 RE", "LINEAR B SYLLABLE B053 RI", "LINEAR B SYLLABLE B002 RO", "LINEAR B SYLLABLE B026 RU", "LINEAR B SYLLABLE B031 SA", "LINEAR B SYLLABLE B009 SE", "LINEAR B SYLLABLE B041 SI", "LINEAR B SYLLABLE B012 SO", "LINEAR B SYLLABLE B058 SU", "LINEAR B SYLLABLE B059 TA", "LINEAR B SYLLABLE B004 TE", "LINEAR B SYLLABLE B037 TI", "LINEAR B SYLLABLE B005 TO", "LINEAR B SYLLABLE B069 TU", "LINEAR B SYLLABLE B054 WA", "LINEAR B SYLLABLE B075 WE", "LINEAR B SYLLABLE B040 WI", "LINEAR B SYLLABLE B042 WO", "LINEAR B SYLLABLE B017 ZA", "LINEAR B SYLLABLE B074 ZE", "LINEAR B SYLLABLE B020 ZO", "LINEAR B SYLLABLE B025 A2", "LINEAR B SYLLABLE B043 A3", "LINEAR B SYLLABLE B085 AU", "LINEAR B SYLLABLE B071 DWE", "LINEAR B SYLLABLE B090 DWO", "LINEAR B SYLLABLE B048 NWA", "LINEAR B SYLLABLE B029 PU2", "LINEAR B SYLLABLE B062 PTE", "LINEAR B SYLLABLE B076 RA2", "LINEAR B SYLLABLE B033 RA3", "LINEAR B SYLLABLE B068 RO2", "LINEAR B SYLLABLE B066 TA2", "LINEAR B SYLLABLE B087 TWE", "LINEAR B SYLLABLE B091 TWO", "LINEAR B SYMBOL B018", "LINEAR B SYMBOL B019", "LINEAR B SYMBOL B022", "LINEAR B SYMBOL B034", "LINEAR B SYMBOL B047", "LINEAR B SYMBOL B049", "LINEAR B SYMBOL B056", "LINEAR B SYMBOL B063", "LINEAR B SYMBOL B064", "LINEAR B SYMBOL B079", "LINEAR B SYMBOL B082", "LINEAR B SYMBOL B083", "LINEAR B SYMBOL B086", "LINEAR B SYMBOL B089", "LINEAR B IDEOGRAM B100 MAN", "LINEAR B IDEOGRAM B102 WOMAN", "LINEAR B IDEOGRAM B104 DEER", "LINEAR B IDEOGRAM B105 EQUID", "LINEAR B IDEOGRAM B105F MARE", "LINEAR B IDEOGRAM B105M STALLION", "LINEAR B IDEOGRAM B106F EWE", "LINEAR B IDEOGRAM B106M RAM", "LINEAR B IDEOGRAM B107F SHE-GOAT", "LINEAR B IDEOGRAM B107M HE-GOAT", "LINEAR B IDEOGRAM B108F SOW", "LINEAR B IDEOGRAM B108M BOAR", "LINEAR B IDEOGRAM B109F COW", "LINEAR B IDEOGRAM B109M BULL", "LINEAR B IDEOGRAM B120 WHEAT", "LINEAR B IDEOGRAM B121 BARLEY", "LINEAR B IDEOGRAM B122 OLIVE", "LINEAR B IDEOGRAM B123 SPICE", "LINEAR B IDEOGRAM B125 CYPERUS", "LINEAR B MONOGRAM B127 KAPO", "LINEAR B MONOGRAM B128 KANAKO", "LINEAR B IDEOGRAM B130 OIL", "LINEAR B IDEOGRAM B131 WINE", "LINEAR B IDEOGRAM B132", "LINEAR B MONOGRAM B133 AREPA", "LINEAR B MONOGRAM B135 MERI", "LINEAR B IDEOGRAM B140 BRONZE", "LINEAR B IDEOGRAM B141 GOLD", "LINEAR B IDEOGRAM B142", "LINEAR B IDEOGRAM B145 WOOL", "LINEAR B IDEOGRAM B146", "LINEAR B IDEOGRAM B150", "LINEAR B IDEOGRAM B151 HORN", "LINEAR B IDEOGRAM B152", "LINEAR B IDEOGRAM B153", "LINEAR B IDEOGRAM B154", "LINEAR B MONOGRAM B156 TURO2", "LINEAR B IDEOGRAM B157", "LINEAR B IDEOGRAM B158", "LINEAR B IDEOGRAM B159 CLOTH", "LINEAR B IDEOGRAM B160", "LINEAR B IDEOGRAM B161", "LINEAR B IDEOGRAM B162 GARMENT", "LINEAR B IDEOGRAM B163 ARMOUR", "LINEAR B IDEOGRAM B164", "LINEAR B IDEOGRAM B165", "LINEAR B IDEOGRAM B166", "LINEAR B IDEOGRAM B167", "LINEAR B IDEOGRAM B168", "LINEAR B IDEOGRAM B169", "LINEAR B IDEOGRAM B170", "LINEAR B IDEOGRAM B171", "LINEAR B IDEOGRAM B172", "LINEAR B IDEOGRAM B173 MONTH", "LINEAR B IDEOGRAM B174", "LINEAR B IDEOGRAM B176 TREE", "LINEAR B IDEOGRAM B177", "LINEAR B IDEOGRAM B178", "LINEAR B IDEOGRAM B179", "LINEAR B IDEOGRAM B180", "LINEAR B IDEOGRAM B181", "LINEAR B IDEOGRAM B182", "LINEAR B IDEOGRAM B183", "LINEAR B IDEOGRAM B184", "LINEAR B IDEOGRAM B185", "LINEAR B IDEOGRAM B189", "LINEAR B IDEOGRAM B190", "LINEAR B IDEOGRAM B191 HELMET", "LINEAR B IDEOGRAM B220 FOOTSTOOL", "LINEAR B IDEOGRAM B225 BATHTUB", "LINEAR B IDEOGRAM B230 SPEAR", "LINEAR B IDEOGRAM B231 ARROW", "LINEAR B IDEOGRAM B232", "LINEAR B IDEOGRAM B233 SWORD", "LINEAR B IDEOGRAM B234", "LINEAR B IDEOGRAM B236", "LINEAR B IDEOGRAM B240 WHEELED CHARIOT", "LINEAR B IDEOGRAM B241 CHARIOT", "LINEAR B IDEOGRAM B242 CHARIOT FRAME", "LINEAR B IDEOGRAM B243 WHEEL", "LINEAR B IDEOGRAM B245", "LINEAR B IDEOGRAM B246", "LINEAR B MONOGRAM B247 DIPTE", "LINEAR B IDEOGRAM B248", "LINEAR B IDEOGRAM B249", "LINEAR B IDEOGRAM B251", "LINEAR B IDEOGRAM B252", "LINEAR B IDEOGRAM B253", "LINEAR B IDEOGRAM B254 DART", "LINEAR B IDEOGRAM B255", "LINEAR B IDEOGRAM B256", "LINEAR B IDEOGRAM B257", "LINEAR B IDEOGRAM B258", "LINEAR B IDEOGRAM B259", "LINEAR B IDEOGRAM VESSEL B155", "LINEAR B IDEOGRAM VESSEL B200", "LINEAR B IDEOGRAM VESSEL B201", "LINEAR B IDEOGRAM VESSEL B202", "LINEAR B IDEOGRAM VESSEL B203", "LINEAR B IDEOGRAM VESSEL B204", "LINEAR B IDEOGRAM VESSEL B205", "LINEAR B IDEOGRAM VESSEL B206", "LINEAR B IDEOGRAM VESSEL B207", "LINEAR B IDEOGRAM VESSEL B208", "LINEAR B IDEOGRAM VESSEL B209", "LINEAR B IDEOGRAM VESSEL B210", "LINEAR B IDEOGRAM VESSEL B211", "LINEAR B IDEOGRAM VESSEL B212", "LINEAR B IDEOGRAM VESSEL B213", "LINEAR B IDEOGRAM VESSEL B214", "LINEAR B IDEOGRAM VESSEL B215", "LINEAR B IDEOGRAM VESSEL B216", "LINEAR B IDEOGRAM VESSEL B217", "LINEAR B IDEOGRAM VESSEL B218", "LINEAR B IDEOGRAM VESSEL B219", "LINEAR B IDEOGRAM VESSEL B221", "LINEAR B IDEOGRAM VESSEL B222", "LINEAR B IDEOGRAM VESSEL B226", "LINEAR B IDEOGRAM VESSEL B227", "LINEAR B IDEOGRAM VESSEL B228", "LINEAR B IDEOGRAM VESSEL B229", "LINEAR B IDEOGRAM VESSEL B250", "LINEAR B IDEOGRAM VESSEL B305", "AEGEAN WORD SEPARATOR LINE", "AEGEAN WORD SEPARATOR DOT", "AEGEAN CHECK MARK", "AEGEAN NUMBER ONE", "AEGEAN NUMBER TWO", "AEGEAN NUMBER THREE", "AEGEAN NUMBER FOUR", "AEGEAN NUMBER FIVE", "AEGEAN NUMBER SIX", "AEGEAN NUMBER SEVEN", "AEGEAN NUMBER EIGHT", "AEGEAN NUMBER NINE", "AEGEAN NUMBER TEN", "AEGEAN NUMBER TWENTY", "AEGEAN NUMBER THIRTY", "AEGEAN NUMBER FORTY", "AEGEAN NUMBER FIFTY", "AEGEAN NUMBER SIXTY", "AEGEAN NUMBER SEVENTY", "AEGEAN NUMBER EIGHTY", "AEGEAN NUMBER NINETY", "AEGEAN NUMBER ONE HUNDRED", "AEGEAN NUMBER TWO HUNDRED", "AEGEAN NUMBER THREE HUNDRED", "AEGEAN NUMBER FOUR HUNDRED", "AEGEAN NUMBER FIVE HUNDRED", "AEGEAN NUMBER SIX HUNDRED", "AEGEAN NUMBER SEVEN HUNDRED", "AEGEAN NUMBER EIGHT HUNDRED", "AEGEAN NUMBER NINE HUNDRED", "AEGEAN NUMBER ONE THOUSAND", "AEGEAN NUMBER TWO THOUSAND", "AEGEAN NUMBER THREE THOUSAND", "AEGEAN NUMBER FOUR THOUSAND", "AEGEAN NUMBER FIVE THOUSAND", "AEGEAN NUMBER SIX THOUSAND", "AEGEAN NUMBER SEVEN THOUSAND", "AEGEAN NUMBER EIGHT THOUSAND", "AEGEAN NUMBER NINE THOUSAND", "AEGEAN NUMBER TEN THOUSAND", "AEGEAN NUMBER TWENTY THOUSAND", "AEGEAN NUMBER THIRTY THOUSAND", "AEGEAN NUMBER FORTY THOUSAND", "AEGEAN NUMBER FIFTY THOUSAND", "AEGEAN NUMBER SIXTY THOUSAND", "AEGEAN NUMBER SEVENTY THOUSAND", "AEGEAN NUMBER EIGHTY THOUSAND", "AEGEAN NUMBER NINETY THOUSAND", "AEGEAN WEIGHT BASE UNIT", "AEGEAN WEIGHT FIRST SUBUNIT", "AEGEAN WEIGHT SECOND SUBUNIT", "AEGEAN WEIGHT THIRD SUBUNIT", "AEGEAN WEIGHT FOURTH SUBUNIT", "AEGEAN DRY MEASURE FIRST SUBUNIT", "AEGEAN LIQUID MEASURE FIRST SUBUNIT", "AEGEAN MEASURE SECOND SUBUNIT", "AEGEAN MEASURE THIRD SUBUNIT", "GREEK ACROPHONIC ATTIC ONE QUARTER", "GREEK ACROPHONIC ATTIC ONE HALF", "GREEK ACROPHONIC ATTIC ONE DRACHMA", "GREEK ACROPHONIC ATTIC FIVE", "GREEK ACROPHONIC ATTIC FIFTY", "GREEK ACROPHONIC ATTIC FIVE HUNDRED", "GREEK ACROPHONIC ATTIC FIVE THOUSAND", "GREEK ACROPHONIC ATTIC FIFTY THOUSAND", "GREEK ACROPHONIC ATTIC FIVE TALENTS", "GREEK ACROPHONIC ATTIC TEN TALENTS", "GREEK ACROPHONIC ATTIC FIFTY TALENTS", "GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS", "GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS", "GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS", "GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS", "GREEK ACROPHONIC ATTIC FIVE STATERS", "GREEK ACROPHONIC ATTIC TEN STATERS", "GREEK ACROPHONIC ATTIC FIFTY STATERS", "GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS", "GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS", "GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS", "GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS", "GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS", "GREEK ACROPHONIC ATTIC TEN MNAS", "GREEK ACROPHONIC HERAEUM ONE PLETHRON", "GREEK ACROPHONIC THESPIAN ONE", "GREEK ACROPHONIC HERMIONIAN ONE", "GREEK ACROPHONIC EPIDAUREAN TWO", "GREEK ACROPHONIC THESPIAN TWO", "GREEK ACROPHONIC CYRENAIC TWO DRACHMAS", "GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS", "GREEK ACROPHONIC TROEZENIAN FIVE", "GREEK ACROPHONIC TROEZENIAN TEN", "GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM", "GREEK ACROPHONIC HERMIONIAN TEN", "GREEK ACROPHONIC MESSENIAN TEN", "GREEK ACROPHONIC THESPIAN TEN", "GREEK ACROPHONIC THESPIAN THIRTY", "GREEK ACROPHONIC TROEZENIAN FIFTY", "GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM", "GREEK ACROPHONIC HERMIONIAN FIFTY", "GREEK ACROPHONIC THESPIAN FIFTY", "GREEK ACROPHONIC THESPIAN ONE HUNDRED", "GREEK ACROPHONIC THESPIAN THREE HUNDRED", "GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED", "GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED", "GREEK ACROPHONIC THESPIAN FIVE HUNDRED", "GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED", "GREEK ACROPHONIC NAXIAN FIVE HUNDRED", "GREEK ACROPHONIC THESPIAN ONE THOUSAND", "GREEK ACROPHONIC THESPIAN FIVE THOUSAND", "GREEK ACROPHONIC DELPHIC FIVE MNAS", "GREEK ACROPHONIC STRATIAN FIFTY MNAS", "GREEK ONE HALF SIGN", "GREEK ONE HALF SIGN ALTERNATE FORM", "GREEK TWO THIRDS SIGN", "GREEK THREE QUARTERS SIGN", "GREEK YEAR SIGN", "GREEK TALENT SIGN", "GREEK DRACHMA SIGN", "GREEK OBOL SIGN", "GREEK TWO OBOLS SIGN", "GREEK THREE OBOLS SIGN", "GREEK FOUR OBOLS SIGN", "GREEK FIVE OBOLS SIGN", "GREEK METRETES SIGN", "GREEK KYATHOS BASE SIGN", "GREEK LITRA SIGN", "GREEK OUNKIA SIGN", "GREEK XESTES SIGN", "GREEK ARTABE SIGN", "GREEK AROURA SIGN", "GREEK GRAMMA SIGN", "GREEK TRYBLION BASE SIGN", "GREEK ZERO SIGN", "GREEK ONE QUARTER SIGN", "GREEK SINUSOID SIGN", "GREEK INDICTION SIGN", "NOMISMA SIGN", "ROMAN SEXTANS SIGN", "ROMAN UNCIA SIGN", "ROMAN SEMUNCIA SIGN", "ROMAN SEXTULA SIGN", "ROMAN DIMIDIA SEXTULA SIGN", "ROMAN SILIQUA SIGN", "ROMAN DENARIUS SIGN", "ROMAN QUINARIUS SIGN", "ROMAN SESTERTIUS SIGN", "ROMAN DUPONDIUS SIGN", "ROMAN AS SIGN", "ROMAN CENTURIAL SIGN", "GREEK SYMBOL TAU RHO", "PHAISTOS DISC SIGN PEDESTRIAN", "PHAISTOS DISC SIGN PLUMED HEAD", "PHAISTOS DISC SIGN TATTOOED HEAD", "PHAISTOS DISC SIGN CAPTIVE", "PHAISTOS DISC SIGN CHILD", "PHAISTOS DISC SIGN WOMAN", "PHAISTOS DISC SIGN HELMET", "PHAISTOS DISC SIGN GAUNTLET", "PHAISTOS DISC SIGN TIARA", "PHAISTOS DISC SIGN ARROW", "PHAISTOS DISC SIGN BOW", "PHAISTOS DISC SIGN SHIELD", "PHAISTOS DISC SIGN CLUB", "PHAISTOS DISC SIGN MANACLES", "PHAISTOS DISC SIGN MATTOCK", "PHAISTOS DISC SIGN SAW", "PHAISTOS DISC SIGN LID", "PHAISTOS DISC SIGN BOOMERANG", "PHAISTOS DISC SIGN CARPENTRY PLANE", "PHAISTOS DISC SIGN DOLIUM", "PHAISTOS DISC SIGN COMB", "PHAISTOS DISC SIGN SLING", "PHAISTOS DISC SIGN COLUMN", "PHAISTOS DISC SIGN BEEHIVE", "PHAISTOS DISC SIGN SHIP", "PHAISTOS DISC SIGN HORN", "PHAISTOS DISC SIGN HIDE", "PHAISTOS DISC SIGN BULLS LEG", "PHAISTOS DISC SIGN CAT", "PHAISTOS DISC SIGN RAM", "PHAISTOS DISC SIGN EAGLE", "PHAISTOS DISC SIGN DOVE", "PHAISTOS DISC SIGN TUNNY", "PHAISTOS DISC SIGN BEE", "PHAISTOS DISC SIGN PLANE TREE", "PHAISTOS DISC SIGN VINE", "PHAISTOS DISC SIGN PAPYRUS", "PHAISTOS DISC SIGN ROSETTE", "PHAISTOS DISC SIGN LILY", "PHAISTOS DISC SIGN OX BACK", "PHAISTOS DISC SIGN FLUTE", "PHAISTOS DISC SIGN GRATER", "PHAISTOS DISC SIGN STRAINER", "PHAISTOS DISC SIGN SMALL AXE", "PHAISTOS DISC SIGN WAVY BAND", "PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE", "LYCIAN LETTER A", "LYCIAN LETTER E", "LYCIAN LETTER B", "LYCIAN LETTER BH", "LYCIAN LETTER G", "LYCIAN LETTER D", "LYCIAN LETTER I", "LYCIAN LETTER W", "LYCIAN LETTER Z", "LYCIAN LETTER TH", "LYCIAN LETTER J", "LYCIAN LETTER K", "LYCIAN LETTER Q", "LYCIAN LETTER L", "LYCIAN LETTER M", "LYCIAN LETTER N", "LYCIAN LETTER MM", "LYCIAN LETTER NN", "LYCIAN LETTER U", "LYCIAN LETTER P", "LYCIAN LETTER KK", "LYCIAN LETTER R", "LYCIAN LETTER S", "LYCIAN LETTER T", "LYCIAN LETTER TT", "LYCIAN LETTER AN", "LYCIAN LETTER EN", "LYCIAN LETTER H", "LYCIAN LETTER X", "CARIAN LETTER A", "CARIAN LETTER P2", "CARIAN LETTER D", "CARIAN LETTER L", "CARIAN LETTER UUU", "CARIAN LETTER R", "CARIAN LETTER LD", "CARIAN LETTER A2", "CARIAN LETTER Q", "CARIAN LETTER B", "CARIAN LETTER M", "CARIAN LETTER O", "CARIAN LETTER D2", "CARIAN LETTER T", "CARIAN LETTER SH", "CARIAN LETTER SH2", "CARIAN LETTER S", "CARIAN LETTER C-18", "CARIAN LETTER U", "CARIAN LETTER NN", "CARIAN LETTER X", "CARIAN LETTER N", "CARIAN LETTER TT2", "CARIAN LETTER P", "CARIAN LETTER SS", "CARIAN LETTER I", "CARIAN LETTER E", "CARIAN LETTER UUUU", "CARIAN LETTER K", "CARIAN LETTER K2", "CARIAN LETTER ND", "CARIAN LETTER UU", "CARIAN LETTER G", "CARIAN LETTER G2", "CARIAN LETTER ST", "CARIAN LETTER ST2", "CARIAN LETTER NG", "CARIAN LETTER II", "CARIAN LETTER C-39", "CARIAN LETTER TT", "CARIAN LETTER UUU2", "CARIAN LETTER RR", "CARIAN LETTER MB", "CARIAN LETTER MB2", "CARIAN LETTER MB3", "CARIAN LETTER MB4", "CARIAN LETTER LD2", "CARIAN LETTER E2", "CARIAN LETTER UUU3", "COPTIC EPACT THOUSANDS MARK", "COPTIC EPACT DIGIT ONE", "COPTIC EPACT DIGIT TWO", "COPTIC EPACT DIGIT THREE", "COPTIC EPACT DIGIT FOUR", "COPTIC EPACT DIGIT FIVE", "COPTIC EPACT DIGIT SIX", "COPTIC EPACT DIGIT SEVEN", "COPTIC EPACT DIGIT EIGHT", "COPTIC EPACT DIGIT NINE", "COPTIC EPACT NUMBER TEN", "COPTIC EPACT NUMBER TWENTY", "COPTIC EPACT NUMBER THIRTY", "COPTIC EPACT NUMBER FORTY", "COPTIC EPACT NUMBER FIFTY", "COPTIC EPACT NUMBER SIXTY", "COPTIC EPACT NUMBER SEVENTY", "COPTIC EPACT NUMBER EIGHTY", "COPTIC EPACT NUMBER NINETY", "COPTIC EPACT NUMBER ONE HUNDRED", "COPTIC EPACT NUMBER TWO HUNDRED", "COPTIC EPACT NUMBER THREE HUNDRED", "COPTIC EPACT NUMBER FOUR HUNDRED", "COPTIC EPACT NUMBER FIVE HUNDRED", "COPTIC EPACT NUMBER SIX HUNDRED", "COPTIC EPACT NUMBER SEVEN HUNDRED", "COPTIC EPACT NUMBER EIGHT HUNDRED", "COPTIC EPACT NUMBER NINE HUNDRED", "OLD ITALIC LETTER A", "OLD ITALIC LETTER BE", "OLD ITALIC LETTER KE", "OLD ITALIC LETTER DE", "OLD ITALIC LETTER E", "OLD ITALIC LETTER VE", "OLD ITALIC LETTER ZE", "OLD ITALIC LETTER HE", "OLD ITALIC LETTER THE", "OLD ITALIC LETTER I", "OLD ITALIC LETTER KA", "OLD ITALIC LETTER EL", "OLD ITALIC LETTER EM", "OLD ITALIC LETTER EN", "OLD ITALIC LETTER ESH", "OLD ITALIC LETTER O", "OLD ITALIC LETTER PE", "OLD ITALIC LETTER SHE", "OLD ITALIC LETTER KU", "OLD ITALIC LETTER ER", "OLD ITALIC LETTER ES", "OLD ITALIC LETTER TE", "OLD ITALIC LETTER U", "OLD ITALIC LETTER EKS", "OLD ITALIC LETTER PHE", "OLD ITALIC LETTER KHE", "OLD ITALIC LETTER EF", "OLD ITALIC LETTER ERS", "OLD ITALIC LETTER CHE", "OLD ITALIC LETTER II", "OLD ITALIC LETTER UU", "OLD ITALIC LETTER ESS", "OLD ITALIC NUMERAL ONE", "OLD ITALIC NUMERAL FIVE", "OLD ITALIC NUMERAL TEN", "OLD ITALIC NUMERAL FIFTY", "OLD ITALIC LETTER YE", "OLD ITALIC LETTER NORTHERN TSE", "OLD ITALIC LETTER SOUTHERN TSE", "GOTHIC LETTER AHSA", "GOTHIC LETTER BAIRKAN", "GOTHIC LETTER GIBA", "GOTHIC LETTER DAGS", "GOTHIC LETTER AIHVUS", "GOTHIC LETTER QAIRTHRA", "GOTHIC LETTER IUJA", "GOTHIC LETTER HAGL", "GOTHIC LETTER THIUTH", "GOTHIC LETTER EIS", "GOTHIC LETTER KUSMA", "GOTHIC LETTER LAGUS", "GOTHIC LETTER MANNA", "GOTHIC LETTER NAUTHS", "GOTHIC LETTER JER", "GOTHIC LETTER URUS", "GOTHIC LETTER PAIRTHRA", "GOTHIC LETTER NINETY", "GOTHIC LETTER RAIDA", "GOTHIC LETTER SAUIL", "GOTHIC LETTER TEIWS", "GOTHIC LETTER WINJA", "GOTHIC LETTER FAIHU", "GOTHIC LETTER IGGWS", "GOTHIC LETTER HWAIR", "GOTHIC LETTER OTHAL", "GOTHIC LETTER NINE HUNDRED", "OLD PERMIC LETTER AN", "OLD PERMIC LETTER BUR", "OLD PERMIC LETTER GAI", "OLD PERMIC LETTER DOI", "OLD PERMIC LETTER E", "OLD PERMIC LETTER ZHOI", "OLD PERMIC LETTER DZHOI", "OLD PERMIC LETTER ZATA", "OLD PERMIC LETTER DZITA", "OLD PERMIC LETTER I", "OLD PERMIC LETTER KOKE", "OLD PERMIC LETTER LEI", "OLD PERMIC LETTER MENOE", "OLD PERMIC LETTER NENOE", "OLD PERMIC LETTER VOOI", "OLD PERMIC LETTER PEEI", "OLD PERMIC LETTER REI", "OLD PERMIC LETTER SII", "OLD PERMIC LETTER TAI", "OLD PERMIC LETTER U", "OLD PERMIC LETTER CHERY", "OLD PERMIC LETTER SHOOI", "OLD PERMIC LETTER SHCHOOI", "OLD PERMIC LETTER YRY", "OLD PERMIC LETTER YERU", "OLD PERMIC LETTER O", "OLD PERMIC LETTER OO", "OLD PERMIC LETTER EF", "OLD PERMIC LETTER HA", "OLD PERMIC LETTER TSIU", "OLD PERMIC LETTER VER", "OLD PERMIC LETTER YER", "OLD PERMIC LETTER YERI", "OLD PERMIC LETTER YAT", "OLD PERMIC LETTER IE", "OLD PERMIC LETTER YU", "OLD PERMIC LETTER YA", "OLD PERMIC LETTER IA", "COMBINING OLD PERMIC LETTER AN", "COMBINING OLD PERMIC LETTER DOI", "COMBINING OLD PERMIC LETTER ZATA", "COMBINING OLD PERMIC LETTER NENOE", "COMBINING OLD PERMIC LETTER SII", "UGARITIC LETTER ALPA", "UGARITIC LETTER BETA", "UGARITIC LETTER GAMLA", "UGARITIC LETTER KHA", "UGARITIC LETTER DELTA", "UGARITIC LETTER HO", "UGARITIC LETTER WO", "UGARITIC LETTER ZETA", "UGARITIC LETTER HOTA", "UGARITIC LETTER TET", "UGARITIC LETTER YOD", "UGARITIC LETTER KAF", "UGARITIC LETTER SHIN", "UGARITIC LETTER LAMDA", "UGARITIC LETTER MEM", "UGARITIC LETTER DHAL", "UGARITIC LETTER NUN", "UGARITIC LETTER ZU", "UGARITIC LETTER SAMKA", "UGARITIC LETTER AIN", "UGARITIC LETTER PU", "UGARITIC LETTER SADE", "UGARITIC LETTER QOPA", "UGARITIC LETTER RASHA", "UGARITIC LETTER THANNA", "UGARITIC LETTER GHAIN", "UGARITIC LETTER TO", "UGARITIC LETTER I", "UGARITIC LETTER U", "UGARITIC LETTER SSU", "UGARITIC WORD DIVIDER", "OLD PERSIAN SIGN A", "OLD PERSIAN SIGN I", "OLD PERSIAN SIGN U", "OLD PERSIAN SIGN KA", "OLD PERSIAN SIGN KU", "OLD PERSIAN SIGN GA", "OLD PERSIAN SIGN GU", "OLD PERSIAN SIGN XA", "OLD PERSIAN SIGN CA", "OLD PERSIAN SIGN JA", "OLD PERSIAN SIGN JI", "OLD PERSIAN SIGN TA", "OLD PERSIAN SIGN TU", "OLD PERSIAN SIGN DA", "OLD PERSIAN SIGN DI", "OLD PERSIAN SIGN DU", "OLD PERSIAN SIGN THA", "OLD PERSIAN SIGN PA", "OLD PERSIAN SIGN BA", "OLD PERSIAN SIGN FA", "OLD PERSIAN SIGN NA", "OLD PERSIAN SIGN NU", "OLD PERSIAN SIGN MA", "OLD PERSIAN SIGN MI", "OLD PERSIAN SIGN MU", "OLD PERSIAN SIGN YA", "OLD PERSIAN SIGN VA", "OLD PERSIAN SIGN VI", "OLD PERSIAN SIGN RA", "OLD PERSIAN SIGN RU", "OLD PERSIAN SIGN LA", "OLD PERSIAN SIGN SA", "OLD PERSIAN SIGN ZA", "OLD PERSIAN SIGN SHA", "OLD PERSIAN SIGN SSA", "OLD PERSIAN SIGN HA", "OLD PERSIAN SIGN AURAMAZDAA", "OLD PERSIAN SIGN AURAMAZDAA-2", "OLD PERSIAN SIGN AURAMAZDAAHA", "OLD PERSIAN SIGN XSHAAYATHIYA", "OLD PERSIAN SIGN DAHYAAUSH", "OLD PERSIAN SIGN DAHYAAUSH-2", "OLD PERSIAN SIGN BAGA", "OLD PERSIAN SIGN BUUMISH", "OLD PERSIAN WORD DIVIDER", "OLD PERSIAN NUMBER ONE", "OLD PERSIAN NUMBER TWO", "OLD PERSIAN NUMBER TEN", "OLD PERSIAN NUMBER TWENTY", "OLD PERSIAN NUMBER HUNDRED", "DESERET CAPITAL LETTER LONG I", "DESERET CAPITAL LETTER LONG E", "DESERET CAPITAL LETTER LONG A", "DESERET CAPITAL LETTER LONG AH", "DESERET CAPITAL LETTER LONG O", "DESERET CAPITAL LETTER LONG OO", "DESERET CAPITAL LETTER SHORT I", "DESERET CAPITAL LETTER SHORT E", "DESERET CAPITAL LETTER SHORT A", "DESERET CAPITAL LETTER SHORT AH", "DESERET CAPITAL LETTER SHORT O", "DESERET CAPITAL LETTER SHORT OO", "DESERET CAPITAL LETTER AY", "DESERET CAPITAL LETTER OW", "DESERET CAPITAL LETTER WU", "DESERET CAPITAL LETTER YEE", "DESERET CAPITAL LETTER H", "DESERET CAPITAL LETTER PEE", "DESERET CAPITAL LETTER BEE", "DESERET CAPITAL LETTER TEE", "DESERET CAPITAL LETTER DEE", "DESERET CAPITAL LETTER CHEE", "DESERET CAPITAL LETTER JEE", "DESERET CAPITAL LETTER KAY", "DESERET CAPITAL LETTER GAY", "DESERET CAPITAL LETTER EF", "DESERET CAPITAL LETTER VEE", "DESERET CAPITAL LETTER ETH", "DESERET CAPITAL LETTER THEE", "DESERET CAPITAL LETTER ES", "DESERET CAPITAL LETTER ZEE", "DESERET CAPITAL LETTER ESH", "DESERET CAPITAL LETTER ZHEE", "DESERET CAPITAL LETTER ER", "DESERET CAPITAL LETTER EL", "DESERET CAPITAL LETTER EM", "DESERET CAPITAL LETTER EN", "DESERET CAPITAL LETTER ENG", "DESERET CAPITAL LETTER OI", "DESERET CAPITAL LETTER EW", "DESERET SMALL LETTER LONG I", "DESERET SMALL LETTER LONG E", "DESERET SMALL LETTER LONG A", "DESERET SMALL LETTER LONG AH", "DESERET SMALL LETTER LONG O", "DESERET SMALL LETTER LONG OO", "DESERET SMALL LETTER SHORT I", "DESERET SMALL LETTER SHORT E", "DESERET SMALL LETTER SHORT A", "DESERET SMALL LETTER SHORT AH", "DESERET SMALL LETTER SHORT O", "DESERET SMALL LETTER SHORT OO", "DESERET SMALL LETTER AY", "DESERET SMALL LETTER OW", "DESERET SMALL LETTER WU", "DESERET SMALL LETTER YEE", "DESERET SMALL LETTER H", "DESERET SMALL LETTER PEE", "DESERET SMALL LETTER BEE", "DESERET SMALL LETTER TEE", "DESERET SMALL LETTER DEE", "DESERET SMALL LETTER CHEE", "DESERET SMALL LETTER JEE", "DESERET SMALL LETTER KAY", "DESERET SMALL LETTER GAY", "DESERET SMALL LETTER EF", "DESERET SMALL LETTER VEE", "DESERET SMALL LETTER ETH", "DESERET SMALL LETTER THEE", "DESERET SMALL LETTER ES", "DESERET SMALL LETTER ZEE", "DESERET SMALL LETTER ESH", "DESERET SMALL LETTER ZHEE", "DESERET SMALL LETTER ER", "DESERET SMALL LETTER EL", "DESERET SMALL LETTER EM", "DESERET SMALL LETTER EN", "DESERET SMALL LETTER ENG", "DESERET SMALL LETTER OI", "DESERET SMALL LETTER EW", "SHAVIAN LETTER PEEP", "SHAVIAN LETTER TOT", "SHAVIAN LETTER KICK", "SHAVIAN LETTER FEE", "SHAVIAN LETTER THIGH", "SHAVIAN LETTER SO", "SHAVIAN LETTER SURE", "SHAVIAN LETTER CHURCH", "SHAVIAN LETTER YEA", "SHAVIAN LETTER HUNG", "SHAVIAN LETTER BIB", "SHAVIAN LETTER DEAD", "SHAVIAN LETTER GAG", "SHAVIAN LETTER VOW", "SHAVIAN LETTER THEY", "SHAVIAN LETTER ZOO", "SHAVIAN LETTER MEASURE", "SHAVIAN LETTER JUDGE", "SHAVIAN LETTER WOE", "SHAVIAN LETTER HA-HA", "SHAVIAN LETTER LOLL", "SHAVIAN LETTER MIME", "SHAVIAN LETTER IF", "SHAVIAN LETTER EGG", "SHAVIAN LETTER ASH", "SHAVIAN LETTER ADO", "SHAVIAN LETTER ON", "SHAVIAN LETTER WOOL", "SHAVIAN LETTER OUT", "SHAVIAN LETTER AH", "SHAVIAN LETTER ROAR", "SHAVIAN LETTER NUN", "SHAVIAN LETTER EAT", "SHAVIAN LETTER AGE", "SHAVIAN LETTER ICE", "SHAVIAN LETTER UP", "SHAVIAN LETTER OAK", "SHAVIAN LETTER OOZE", "SHAVIAN LETTER OIL", "SHAVIAN LETTER AWE", "SHAVIAN LETTER ARE", "SHAVIAN LETTER OR", "SHAVIAN LETTER AIR", "SHAVIAN LETTER ERR", "SHAVIAN LETTER ARRAY", "SHAVIAN LETTER EAR", "SHAVIAN LETTER IAN", "SHAVIAN LETTER YEW", "OSMANYA LETTER ALEF", "OSMANYA LETTER BA", "OSMANYA LETTER TA", "OSMANYA LETTER JA", "OSMANYA LETTER XA", "OSMANYA LETTER KHA", "OSMANYA LETTER DEEL", "OSMANYA LETTER RA", "OSMANYA LETTER SA", "OSMANYA LETTER SHIIN", "OSMANYA LETTER DHA", "OSMANYA LETTER CAYN", "OSMANYA LETTER GA", "OSMANYA LETTER FA", "OSMANYA LETTER QAAF", "OSMANYA LETTER KAAF", "OSMANYA LETTER LAAN", "OSMANYA LETTER MIIN", "OSMANYA LETTER NUUN", "OSMANYA LETTER WAW", "OSMANYA LETTER HA", "OSMANYA LETTER YA", "OSMANYA LETTER A", "OSMANYA LETTER E", "OSMANYA LETTER I", "OSMANYA LETTER O", "OSMANYA LETTER U", "OSMANYA LETTER AA", "OSMANYA LETTER EE", "OSMANYA LETTER OO", "OSMANYA DIGIT ZERO", "OSMANYA DIGIT ONE", "OSMANYA DIGIT TWO", "OSMANYA DIGIT THREE", "OSMANYA DIGIT FOUR", "OSMANYA DIGIT FIVE", "OSMANYA DIGIT SIX", "OSMANYA DIGIT SEVEN", "OSMANYA DIGIT EIGHT", "OSMANYA DIGIT NINE", "OSAGE CAPITAL LETTER A", "OSAGE CAPITAL LETTER AI", "OSAGE CAPITAL LETTER AIN", "OSAGE CAPITAL LETTER AH", "OSAGE CAPITAL LETTER BRA", "OSAGE CAPITAL LETTER CHA", "OSAGE CAPITAL LETTER EHCHA", "OSAGE CAPITAL LETTER E", "OSAGE CAPITAL LETTER EIN", "OSAGE CAPITAL LETTER HA", "OSAGE CAPITAL LETTER HYA", "OSAGE CAPITAL LETTER I", "OSAGE CAPITAL LETTER KA", "OSAGE CAPITAL LETTER EHKA", "OSAGE CAPITAL LETTER KYA", "OSAGE CAPITAL LETTER LA", "OSAGE CAPITAL LETTER MA", "OSAGE CAPITAL LETTER NA", "OSAGE CAPITAL LETTER O", "OSAGE CAPITAL LETTER OIN", "OSAGE CAPITAL LETTER PA", "OSAGE CAPITAL LETTER EHPA", "OSAGE CAPITAL LETTER SA", "OSAGE CAPITAL LETTER SHA", "OSAGE CAPITAL LETTER TA", "OSAGE CAPITAL LETTER EHTA", "OSAGE CAPITAL LETTER TSA", "OSAGE CAPITAL LETTER EHTSA", "OSAGE CAPITAL LETTER TSHA", "OSAGE CAPITAL LETTER DHA", "OSAGE CAPITAL LETTER U", "OSAGE CAPITAL LETTER WA", "OSAGE CAPITAL LETTER KHA", "OSAGE CAPITAL LETTER GHA", "OSAGE CAPITAL LETTER ZA", "OSAGE CAPITAL LETTER ZHA", "OSAGE SMALL LETTER A", "OSAGE SMALL LETTER AI", "OSAGE SMALL LETTER AIN", "OSAGE SMALL LETTER AH", "OSAGE SMALL LETTER BRA", "OSAGE SMALL LETTER CHA", "OSAGE SMALL LETTER EHCHA", "OSAGE SMALL LETTER E", "OSAGE SMALL LETTER EIN", "OSAGE SMALL LETTER HA", "OSAGE SMALL LETTER HYA", "OSAGE SMALL LETTER I", "OSAGE SMALL LETTER KA", "OSAGE SMALL LETTER EHKA", "OSAGE SMALL LETTER KYA", "OSAGE SMALL LETTER LA", "OSAGE SMALL LETTER MA", "OSAGE SMALL LETTER NA", "OSAGE SMALL LETTER O", "OSAGE SMALL LETTER OIN", "OSAGE SMALL LETTER PA", "OSAGE SMALL LETTER EHPA", "OSAGE SMALL LETTER SA", "OSAGE SMALL LETTER SHA", "OSAGE SMALL LETTER TA", "OSAGE SMALL LETTER EHTA", "OSAGE SMALL LETTER TSA", "OSAGE SMALL LETTER EHTSA", "OSAGE SMALL LETTER TSHA", "OSAGE SMALL LETTER DHA", "OSAGE SMALL LETTER U", "OSAGE SMALL LETTER WA", "OSAGE SMALL LETTER KHA", "OSAGE SMALL LETTER GHA", "OSAGE SMALL LETTER ZA", "OSAGE SMALL LETTER ZHA", "ELBASAN LETTER A", "ELBASAN LETTER BE", "ELBASAN LETTER CE", "ELBASAN LETTER CHE", "ELBASAN LETTER DE", "ELBASAN LETTER NDE", "ELBASAN LETTER DHE", "ELBASAN LETTER EI", "ELBASAN LETTER E", "ELBASAN LETTER FE", "ELBASAN LETTER GE", "ELBASAN LETTER GJE", "ELBASAN LETTER HE", "ELBASAN LETTER I", "ELBASAN LETTER JE", "ELBASAN LETTER KE", "ELBASAN LETTER LE", "ELBASAN LETTER LLE", "ELBASAN LETTER ME", "ELBASAN LETTER NE", "ELBASAN LETTER NA", "ELBASAN LETTER NJE", "ELBASAN LETTER O", "ELBASAN LETTER PE", "ELBASAN LETTER QE", "ELBASAN LETTER RE", "ELBASAN LETTER RRE", "ELBASAN LETTER SE", "ELBASAN LETTER SHE", "ELBASAN LETTER TE", "ELBASAN LETTER THE", "ELBASAN LETTER U", "ELBASAN LETTER VE", "ELBASAN LETTER XE", "ELBASAN LETTER Y", "ELBASAN LETTER ZE", "ELBASAN LETTER ZHE", "ELBASAN LETTER GHE", "ELBASAN LETTER GHAMMA", "ELBASAN LETTER KHE", "CAUCASIAN ALBANIAN LETTER ALT", "CAUCASIAN ALBANIAN LETTER BET", "CAUCASIAN ALBANIAN LETTER GIM", "CAUCASIAN ALBANIAN LETTER DAT", "CAUCASIAN ALBANIAN LETTER EB", "CAUCASIAN ALBANIAN LETTER ZARL", "CAUCASIAN ALBANIAN LETTER EYN", "CAUCASIAN ALBANIAN LETTER ZHIL", "CAUCASIAN ALBANIAN LETTER TAS", "CAUCASIAN ALBANIAN LETTER CHA", "CAUCASIAN ALBANIAN LETTER YOWD", "CAUCASIAN ALBANIAN LETTER ZHA", "CAUCASIAN ALBANIAN LETTER IRB", "CAUCASIAN ALBANIAN LETTER SHA", "CAUCASIAN ALBANIAN LETTER LAN", "CAUCASIAN ALBANIAN LETTER INYA", "CAUCASIAN ALBANIAN LETTER XEYN", "CAUCASIAN ALBANIAN LETTER DYAN", "CAUCASIAN ALBANIAN LETTER CAR", "CAUCASIAN ALBANIAN LETTER JHOX", "CAUCASIAN ALBANIAN LETTER KAR", "CAUCASIAN ALBANIAN LETTER LYIT", "CAUCASIAN ALBANIAN LETTER HEYT", "CAUCASIAN ALBANIAN LETTER QAY", "CAUCASIAN ALBANIAN LETTER AOR", "CAUCASIAN ALBANIAN LETTER CHOY", "CAUCASIAN ALBANIAN LETTER CHI", "CAUCASIAN ALBANIAN LETTER CYAY", "CAUCASIAN ALBANIAN LETTER MAQ", "CAUCASIAN ALBANIAN LETTER QAR", "CAUCASIAN ALBANIAN LETTER NOWC", "CAUCASIAN ALBANIAN LETTER DZYAY", "CAUCASIAN ALBANIAN LETTER SHAK", "CAUCASIAN ALBANIAN LETTER JAYN", "CAUCASIAN ALBANIAN LETTER ON", "CAUCASIAN ALBANIAN LETTER TYAY", "CAUCASIAN ALBANIAN LETTER FAM", "CAUCASIAN ALBANIAN LETTER DZAY", "CAUCASIAN ALBANIAN LETTER CHAT", "CAUCASIAN ALBANIAN LETTER PEN", "CAUCASIAN ALBANIAN LETTER GHEYS", "CAUCASIAN ALBANIAN LETTER RAT", "CAUCASIAN ALBANIAN LETTER SEYK", "CAUCASIAN ALBANIAN LETTER VEYZ", "CAUCASIAN ALBANIAN LETTER TIWR", "CAUCASIAN ALBANIAN LETTER SHOY", "CAUCASIAN ALBANIAN LETTER IWN", "CAUCASIAN ALBANIAN LETTER CYAW", "CAUCASIAN ALBANIAN LETTER CAYN", "CAUCASIAN ALBANIAN LETTER YAYD", "CAUCASIAN ALBANIAN LETTER PIWR", "CAUCASIAN ALBANIAN LETTER KIW", "CAUCASIAN ALBANIAN CITATION MARK", "LINEAR A SIGN AB001", "LINEAR A SIGN AB002", "LINEAR A SIGN AB003", "LINEAR A SIGN AB004", "LINEAR A SIGN AB005", "LINEAR A SIGN AB006", "LINEAR A SIGN AB007", "LINEAR A SIGN AB008", "LINEAR A SIGN AB009", "LINEAR A SIGN AB010", "LINEAR A SIGN AB011", "LINEAR A SIGN AB013", "LINEAR A SIGN AB016", "LINEAR A SIGN AB017", "LINEAR A SIGN AB020", "LINEAR A SIGN AB021", "LINEAR A SIGN AB021F", "LINEAR A SIGN AB021M", "LINEAR A SIGN AB022", "LINEAR A SIGN AB022F", "LINEAR A SIGN AB022M", "LINEAR A SIGN AB023", "LINEAR A SIGN AB023M", "LINEAR A SIGN AB024", "LINEAR A SIGN AB026", "LINEAR A SIGN AB027", "LINEAR A SIGN AB028", "LINEAR A SIGN A028B", "LINEAR A SIGN AB029", "LINEAR A SIGN AB030", "LINEAR A SIGN AB031", "LINEAR A SIGN AB034", "LINEAR A SIGN AB037", "LINEAR A SIGN AB038", "LINEAR A SIGN AB039", "LINEAR A SIGN AB040", "LINEAR A SIGN AB041", "LINEAR A SIGN AB044", "LINEAR A SIGN AB045", "LINEAR A SIGN AB046", "LINEAR A SIGN AB047", "LINEAR A SIGN AB048", "LINEAR A SIGN AB049", "LINEAR A SIGN AB050", "LINEAR A SIGN AB051", "LINEAR A SIGN AB053", "LINEAR A SIGN AB054", "LINEAR A SIGN AB055", "LINEAR A SIGN AB056", "LINEAR A SIGN AB057", "LINEAR A SIGN AB058", "LINEAR A SIGN AB059", "LINEAR A SIGN AB060", "LINEAR A SIGN AB061", "LINEAR A SIGN AB065", "LINEAR A SIGN AB066", "LINEAR A SIGN AB067", "LINEAR A SIGN AB069", "LINEAR A SIGN AB070", "LINEAR A SIGN AB073", "LINEAR A SIGN AB074", "LINEAR A SIGN AB076", "LINEAR A SIGN AB077", "LINEAR A SIGN AB078", "LINEAR A SIGN AB079", "LINEAR A SIGN AB080", "LINEAR A SIGN AB081", "LINEAR A SIGN AB082", "LINEAR A SIGN AB085", "LINEAR A SIGN AB086", "LINEAR A SIGN AB087", "LINEAR A SIGN A100-102", "LINEAR A SIGN AB118", "LINEAR A SIGN AB120", "LINEAR A SIGN A120B", "LINEAR A SIGN AB122", "LINEAR A SIGN AB123", "LINEAR A SIGN AB131A", "LINEAR A SIGN AB131B", "LINEAR A SIGN A131C", "LINEAR A SIGN AB164", "LINEAR A SIGN AB171", "LINEAR A SIGN AB180", "LINEAR A SIGN AB188", "LINEAR A SIGN AB191", "LINEAR A SIGN A301", "LINEAR A SIGN A302", "LINEAR A SIGN A303", "LINEAR A SIGN A304", "LINEAR A SIGN A305", "LINEAR A SIGN A306", "LINEAR A SIGN A307", "LINEAR A SIGN A308", "LINEAR A SIGN A309A", "LINEAR A SIGN A309B", "LINEAR A SIGN A309C", "LINEAR A SIGN A310", "LINEAR A SIGN A311", "LINEAR A SIGN A312", "LINEAR A SIGN A313A", "LINEAR A SIGN A313B", "LINEAR A SIGN A313C", "LINEAR A SIGN A314", "LINEAR A SIGN A315", "LINEAR A SIGN A316", "LINEAR A SIGN A317", "LINEAR A SIGN A318", "LINEAR A SIGN A319", "LINEAR A SIGN A320", "LINEAR A SIGN A321", "LINEAR A SIGN A322", "LINEAR A SIGN A323", "LINEAR A SIGN A324", "LINEAR A SIGN A325", "LINEAR A SIGN A326", "LINEAR A SIGN A327", "LINEAR A SIGN A328", "LINEAR A SIGN A329", "LINEAR A SIGN A330", "LINEAR A SIGN A331", "LINEAR A SIGN A332", "LINEAR A SIGN A333", "LINEAR A SIGN A334", "LINEAR A SIGN A335", "LINEAR A SIGN A336", "LINEAR A SIGN A337", "LINEAR A SIGN A338", "LINEAR A SIGN A339", "LINEAR A SIGN A340", "LINEAR A SIGN A341", "LINEAR A SIGN A342", "LINEAR A SIGN A343", "LINEAR A SIGN A344", "LINEAR A SIGN A345", "LINEAR A SIGN A346", "LINEAR A SIGN A347", "LINEAR A SIGN A348", "LINEAR A SIGN A349", "LINEAR A SIGN A350", "LINEAR A SIGN A351", "LINEAR A SIGN A352", "LINEAR A SIGN A353", "LINEAR A SIGN A354", "LINEAR A SIGN A355", "LINEAR A SIGN A356", "LINEAR A SIGN A357", "LINEAR A SIGN A358", "LINEAR A SIGN A359", "LINEAR A SIGN A360", "LINEAR A SIGN A361", "LINEAR A SIGN A362", "LINEAR A SIGN A363", "LINEAR A SIGN A364", "LINEAR A SIGN A365", "LINEAR A SIGN A366", "LINEAR A SIGN A367", "LINEAR A SIGN A368", "LINEAR A SIGN A369", "LINEAR A SIGN A370", "LINEAR A SIGN A371", "LINEAR A SIGN A400-VAS", "LINEAR A SIGN A401-VAS", "LINEAR A SIGN A402-VAS", "LINEAR A SIGN A403-VAS", "LINEAR A SIGN A404-VAS", "LINEAR A SIGN A405-VAS", "LINEAR A SIGN A406-VAS", "LINEAR A SIGN A407-VAS", "LINEAR A SIGN A408-VAS", "LINEAR A SIGN A409-VAS", "LINEAR A SIGN A410-VAS", "LINEAR A SIGN A411-VAS", "LINEAR A SIGN A412-VAS", "LINEAR A SIGN A413-VAS", "LINEAR A SIGN A414-VAS", "LINEAR A SIGN A415-VAS", "LINEAR A SIGN A416-VAS", "LINEAR A SIGN A417-VAS", "LINEAR A SIGN A418-VAS", "LINEAR A SIGN A501", "LINEAR A SIGN A502", "LINEAR A SIGN A503", "LINEAR A SIGN A504", "LINEAR A SIGN A505", "LINEAR A SIGN A506", "LINEAR A SIGN A508", "LINEAR A SIGN A509", "LINEAR A SIGN A510", "LINEAR A SIGN A511", "LINEAR A SIGN A512", "LINEAR A SIGN A513", "LINEAR A SIGN A515", "LINEAR A SIGN A516", "LINEAR A SIGN A520", "LINEAR A SIGN A521", "LINEAR A SIGN A523", "LINEAR A SIGN A524", "LINEAR A SIGN A525", "LINEAR A SIGN A526", "LINEAR A SIGN A527", "LINEAR A SIGN A528", "LINEAR A SIGN A529", "LINEAR A SIGN A530", "LINEAR A SIGN A531", "LINEAR A SIGN A532", "LINEAR A SIGN A534", "LINEAR A SIGN A535", "LINEAR A SIGN A536", "LINEAR A SIGN A537", "LINEAR A SIGN A538", "LINEAR A SIGN A539", "LINEAR A SIGN A540", "LINEAR A SIGN A541", "LINEAR A SIGN A542", "LINEAR A SIGN A545", "LINEAR A SIGN A547", "LINEAR A SIGN A548", "LINEAR A SIGN A549", "LINEAR A SIGN A550", "LINEAR A SIGN A551", "LINEAR A SIGN A552", "LINEAR A SIGN A553", "LINEAR A SIGN A554", "LINEAR A SIGN A555", "LINEAR A SIGN A556", "LINEAR A SIGN A557", "LINEAR A SIGN A559", "LINEAR A SIGN A563", "LINEAR A SIGN A564", "LINEAR A SIGN A565", "LINEAR A SIGN A566", "LINEAR A SIGN A568", "LINEAR A SIGN A569", "LINEAR A SIGN A570", "LINEAR A SIGN A571", "LINEAR A SIGN A572", "LINEAR A SIGN A573", "LINEAR A SIGN A574", "LINEAR A SIGN A575", "LINEAR A SIGN A576", "LINEAR A SIGN A577", "LINEAR A SIGN A578", "LINEAR A SIGN A579", "LINEAR A SIGN A580", "LINEAR A SIGN A581", "LINEAR A SIGN A582", "LINEAR A SIGN A583", "LINEAR A SIGN A584", "LINEAR A SIGN A585", "LINEAR A SIGN A586", "LINEAR A SIGN A587", "LINEAR A SIGN A588", "LINEAR A SIGN A589", "LINEAR A SIGN A591", "LINEAR A SIGN A592", "LINEAR A SIGN A594", "LINEAR A SIGN A595", "LINEAR A SIGN A596", "LINEAR A SIGN A598", "LINEAR A SIGN A600", "LINEAR A SIGN A601", "LINEAR A SIGN A602", "LINEAR A SIGN A603", "LINEAR A SIGN A604", "LINEAR A SIGN A606", "LINEAR A SIGN A608", "LINEAR A SIGN A609", "LINEAR A SIGN A610", "LINEAR A SIGN A611", "LINEAR A SIGN A612", "LINEAR A SIGN A613", "LINEAR A SIGN A614", "LINEAR A SIGN A615", "LINEAR A SIGN A616", "LINEAR A SIGN A617", "LINEAR A SIGN A618", "LINEAR A SIGN A619", "LINEAR A SIGN A620", "LINEAR A SIGN A621", "LINEAR A SIGN A622", "LINEAR A SIGN A623", "LINEAR A SIGN A624", "LINEAR A SIGN A626", "LINEAR A SIGN A627", "LINEAR A SIGN A628", "LINEAR A SIGN A629", "LINEAR A SIGN A634", "LINEAR A SIGN A637", "LINEAR A SIGN A638", "LINEAR A SIGN A640", "LINEAR A SIGN A642", "LINEAR A SIGN A643", "LINEAR A SIGN A644", "LINEAR A SIGN A645", "LINEAR A SIGN A646", "LINEAR A SIGN A648", "LINEAR A SIGN A649", "LINEAR A SIGN A651", "LINEAR A SIGN A652", "LINEAR A SIGN A653", "LINEAR A SIGN A654", "LINEAR A SIGN A655", "LINEAR A SIGN A656", "LINEAR A SIGN A657", "LINEAR A SIGN A658", "LINEAR A SIGN A659", "LINEAR A SIGN A660", "LINEAR A SIGN A661", "LINEAR A SIGN A662", "LINEAR A SIGN A663", "LINEAR A SIGN A664", "LINEAR A SIGN A701 A", "LINEAR A SIGN A702 B", "LINEAR A SIGN A703 D", "LINEAR A SIGN A704 E", "LINEAR A SIGN A705 F", "LINEAR A SIGN A706 H", "LINEAR A SIGN A707 J", "LINEAR A SIGN A708 K", "LINEAR A SIGN A709 L", "LINEAR A SIGN A709-2 L2", "LINEAR A SIGN A709-3 L3", "LINEAR A SIGN A709-4 L4", "LINEAR A SIGN A709-6 L6", "LINEAR A SIGN A710 W", "LINEAR A SIGN A711 X", "LINEAR A SIGN A712 Y", "LINEAR A SIGN A713 OMEGA", "LINEAR A SIGN A714 ABB", "LINEAR A SIGN A715 BB", "LINEAR A SIGN A717 DD", "LINEAR A SIGN A726 EYYY", "LINEAR A SIGN A732 JE", "LINEAR A SIGN A800", "LINEAR A SIGN A801", "LINEAR A SIGN A802", "LINEAR A SIGN A803", "LINEAR A SIGN A804", "LINEAR A SIGN A805", "LINEAR A SIGN A806", "LINEAR A SIGN A807", "CYPRIOT SYLLABLE A", "CYPRIOT SYLLABLE E", "CYPRIOT SYLLABLE I", "CYPRIOT SYLLABLE O", "CYPRIOT SYLLABLE U", "CYPRIOT SYLLABLE JA", "CYPRIOT SYLLABLE JO", "CYPRIOT SYLLABLE KA", "CYPRIOT SYLLABLE KE", "CYPRIOT SYLLABLE KI", "CYPRIOT SYLLABLE KO", "CYPRIOT SYLLABLE KU", "CYPRIOT SYLLABLE LA", "CYPRIOT SYLLABLE LE", "CYPRIOT SYLLABLE LI", "CYPRIOT SYLLABLE LO", "CYPRIOT SYLLABLE LU", "CYPRIOT SYLLABLE MA", "CYPRIOT SYLLABLE ME", "CYPRIOT SYLLABLE MI", "CYPRIOT SYLLABLE MO", "CYPRIOT SYLLABLE MU", "CYPRIOT SYLLABLE NA", "CYPRIOT SYLLABLE NE", "CYPRIOT SYLLABLE NI", "CYPRIOT SYLLABLE NO", "CYPRIOT SYLLABLE NU", "CYPRIOT SYLLABLE PA", "CYPRIOT SYLLABLE PE", "CYPRIOT SYLLABLE PI", "CYPRIOT SYLLABLE PO", "CYPRIOT SYLLABLE PU", "CYPRIOT SYLLABLE RA", "CYPRIOT SYLLABLE RE", "CYPRIOT SYLLABLE RI", "CYPRIOT SYLLABLE RO", "CYPRIOT SYLLABLE RU", "CYPRIOT SYLLABLE SA", "CYPRIOT SYLLABLE SE", "CYPRIOT SYLLABLE SI", "CYPRIOT SYLLABLE SO", "CYPRIOT SYLLABLE SU", "CYPRIOT SYLLABLE TA", "CYPRIOT SYLLABLE TE", "CYPRIOT SYLLABLE TI", "CYPRIOT SYLLABLE TO", "CYPRIOT SYLLABLE TU", "CYPRIOT SYLLABLE WA", "CYPRIOT SYLLABLE WE", "CYPRIOT SYLLABLE WI", "CYPRIOT SYLLABLE WO", "CYPRIOT SYLLABLE XA", "CYPRIOT SYLLABLE XE", "CYPRIOT SYLLABLE ZA", "CYPRIOT SYLLABLE ZO", "IMPERIAL ARAMAIC LETTER ALEPH", "IMPERIAL ARAMAIC LETTER BETH", "IMPERIAL ARAMAIC LETTER GIMEL", "IMPERIAL ARAMAIC LETTER DALETH", "IMPERIAL ARAMAIC LETTER HE", "IMPERIAL ARAMAIC LETTER WAW", "IMPERIAL ARAMAIC LETTER ZAYIN", "IMPERIAL ARAMAIC LETTER HETH", "IMPERIAL ARAMAIC LETTER TETH", "IMPERIAL ARAMAIC LETTER YODH", "IMPERIAL ARAMAIC LETTER KAPH", "IMPERIAL ARAMAIC LETTER LAMEDH", "IMPERIAL ARAMAIC LETTER MEM", "IMPERIAL ARAMAIC LETTER NUN", "IMPERIAL ARAMAIC LETTER SAMEKH", "IMPERIAL ARAMAIC LETTER AYIN", "IMPERIAL ARAMAIC LETTER PE", "IMPERIAL ARAMAIC LETTER SADHE", "IMPERIAL ARAMAIC LETTER QOPH", "IMPERIAL ARAMAIC LETTER RESH", "IMPERIAL ARAMAIC LETTER SHIN", "IMPERIAL ARAMAIC LETTER TAW", "IMPERIAL ARAMAIC SECTION SIGN", "IMPERIAL ARAMAIC NUMBER ONE", "IMPERIAL ARAMAIC NUMBER TWO", "IMPERIAL ARAMAIC NUMBER THREE", "IMPERIAL ARAMAIC NUMBER TEN", "IMPERIAL ARAMAIC NUMBER TWENTY", "IMPERIAL ARAMAIC NUMBER ONE HUNDRED", "IMPERIAL ARAMAIC NUMBER ONE THOUSAND", "IMPERIAL ARAMAIC NUMBER TEN THOUSAND", "PALMYRENE LETTER ALEPH", "PALMYRENE LETTER BETH", "PALMYRENE LETTER GIMEL", "PALMYRENE LETTER DALETH", "PALMYRENE LETTER HE", "PALMYRENE LETTER WAW", "PALMYRENE LETTER ZAYIN", "PALMYRENE LETTER HETH", "PALMYRENE LETTER TETH", "PALMYRENE LETTER YODH", "PALMYRENE LETTER KAPH", "PALMYRENE LETTER LAMEDH", "PALMYRENE LETTER MEM", "PALMYRENE LETTER FINAL NUN", "PALMYRENE LETTER NUN", "PALMYRENE LETTER SAMEKH", "PALMYRENE LETTER AYIN", "PALMYRENE LETTER PE", "PALMYRENE LETTER SADHE", "PALMYRENE LETTER QOPH", "PALMYRENE LETTER RESH", "PALMYRENE LETTER SHIN", "PALMYRENE LETTER TAW", "PALMYRENE LEFT-POINTING FLEURON", "PALMYRENE RIGHT-POINTING FLEURON", "PALMYRENE NUMBER ONE", "PALMYRENE NUMBER TWO", "PALMYRENE NUMBER THREE", "PALMYRENE NUMBER FOUR", "PALMYRENE NUMBER FIVE", "PALMYRENE NUMBER TEN", "PALMYRENE NUMBER TWENTY", "NABATAEAN LETTER FINAL ALEPH", "NABATAEAN LETTER ALEPH", "NABATAEAN LETTER FINAL BETH", "NABATAEAN LETTER BETH", "NABATAEAN LETTER GIMEL", "NABATAEAN LETTER DALETH", "NABATAEAN LETTER FINAL HE", "NABATAEAN LETTER HE", "NABATAEAN LETTER WAW", "NABATAEAN LETTER ZAYIN", "NABATAEAN LETTER HETH", "NABATAEAN LETTER TETH", "NABATAEAN LETTER FINAL YODH", "NABATAEAN LETTER YODH", "NABATAEAN LETTER FINAL KAPH", "NABATAEAN LETTER KAPH", "NABATAEAN LETTER FINAL LAMEDH", "NABATAEAN LETTER LAMEDH", "NABATAEAN LETTER FINAL MEM", "NABATAEAN LETTER MEM", "NABATAEAN LETTER FINAL NUN", "NABATAEAN LETTER NUN", "NABATAEAN LETTER SAMEKH", "NABATAEAN LETTER AYIN", "NABATAEAN LETTER PE", "NABATAEAN LETTER SADHE", "NABATAEAN LETTER QOPH", "NABATAEAN LETTER RESH", "NABATAEAN LETTER FINAL SHIN", "NABATAEAN LETTER SHIN", "NABATAEAN LETTER TAW", "NABATAEAN NUMBER ONE", "NABATAEAN NUMBER TWO", "NABATAEAN NUMBER THREE", "NABATAEAN NUMBER FOUR", "NABATAEAN CRUCIFORM NUMBER FOUR", "NABATAEAN NUMBER FIVE", "NABATAEAN NUMBER TEN", "NABATAEAN NUMBER TWENTY", "NABATAEAN NUMBER ONE HUNDRED", "HATRAN LETTER ALEPH", "HATRAN LETTER BETH", "HATRAN LETTER GIMEL", "HATRAN LETTER DALETH-RESH", "HATRAN LETTER HE", "HATRAN LETTER WAW", "HATRAN LETTER ZAYN", "HATRAN LETTER HETH", "HATRAN LETTER TETH", "HATRAN LETTER YODH", "HATRAN LETTER KAPH", "HATRAN LETTER LAMEDH", "HATRAN LETTER MEM", "HATRAN LETTER NUN", "HATRAN LETTER SAMEKH", "HATRAN LETTER AYN", "HATRAN LETTER PE", "HATRAN LETTER SADHE", "HATRAN LETTER QOPH", "HATRAN LETTER SHIN", "HATRAN LETTER TAW", "HATRAN NUMBER ONE", "HATRAN NUMBER FIVE", "HATRAN NUMBER TEN", "HATRAN NUMBER TWENTY", "HATRAN NUMBER ONE HUNDRED", "PHOENICIAN LETTER ALF", "PHOENICIAN LETTER BET", "PHOENICIAN LETTER GAML", "PHOENICIAN LETTER DELT", "PHOENICIAN LETTER HE", "PHOENICIAN LETTER WAU", "PHOENICIAN LETTER ZAI", "PHOENICIAN LETTER HET", "PHOENICIAN LETTER TET", "PHOENICIAN LETTER YOD", "PHOENICIAN LETTER KAF", "PHOENICIAN LETTER LAMD", "PHOENICIAN LETTER MEM", "PHOENICIAN LETTER NUN", "PHOENICIAN LETTER SEMK", "PHOENICIAN LETTER AIN", "PHOENICIAN LETTER PE", "PHOENICIAN LETTER SADE", "PHOENICIAN LETTER QOF", "PHOENICIAN LETTER ROSH", "PHOENICIAN LETTER SHIN", "PHOENICIAN LETTER TAU", "PHOENICIAN NUMBER ONE", "PHOENICIAN NUMBER TEN", "PHOENICIAN NUMBER TWENTY", "PHOENICIAN NUMBER ONE HUNDRED", "PHOENICIAN NUMBER TWO", "PHOENICIAN NUMBER THREE", "PHOENICIAN WORD SEPARATOR", "LYDIAN LETTER A", "LYDIAN LETTER B", "LYDIAN LETTER G", "LYDIAN LETTER D", "LYDIAN LETTER E", "LYDIAN LETTER V", "LYDIAN LETTER I", "LYDIAN LETTER Y", "LYDIAN LETTER K", "LYDIAN LETTER L", "LYDIAN LETTER M", "LYDIAN LETTER N", "LYDIAN LETTER O", "LYDIAN LETTER R", "LYDIAN LETTER SS", "LYDIAN LETTER T", "LYDIAN LETTER U", "LYDIAN LETTER F", "LYDIAN LETTER Q", "LYDIAN LETTER S", "LYDIAN LETTER TT", "LYDIAN LETTER AN", "LYDIAN LETTER EN", "LYDIAN LETTER LY", "LYDIAN LETTER NN", "LYDIAN LETTER C", "LYDIAN TRIANGULAR MARK", "MEROITIC HIEROGLYPHIC LETTER A", "MEROITIC HIEROGLYPHIC LETTER E", "MEROITIC HIEROGLYPHIC LETTER I", "MEROITIC HIEROGLYPHIC LETTER O", "MEROITIC HIEROGLYPHIC LETTER YA", "MEROITIC HIEROGLYPHIC LETTER WA", "MEROITIC HIEROGLYPHIC LETTER BA", "MEROITIC HIEROGLYPHIC LETTER BA-2", "MEROITIC HIEROGLYPHIC LETTER PA", "MEROITIC HIEROGLYPHIC LETTER MA", "MEROITIC HIEROGLYPHIC LETTER NA", "MEROITIC HIEROGLYPHIC LETTER NA-2", "MEROITIC HIEROGLYPHIC LETTER NE", "MEROITIC HIEROGLYPHIC LETTER NE-2", "MEROITIC HIEROGLYPHIC LETTER RA", "MEROITIC HIEROGLYPHIC LETTER RA-2", "MEROITIC HIEROGLYPHIC LETTER LA", "MEROITIC HIEROGLYPHIC LETTER KHA", "MEROITIC HIEROGLYPHIC LETTER HHA", "MEROITIC HIEROGLYPHIC LETTER SA", "MEROITIC HIEROGLYPHIC LETTER SA-2", "MEROITIC HIEROGLYPHIC LETTER SE", "MEROITIC HIEROGLYPHIC LETTER KA", "MEROITIC HIEROGLYPHIC LETTER QA", "MEROITIC HIEROGLYPHIC LETTER TA", "MEROITIC HIEROGLYPHIC LETTER TA-2", "MEROITIC HIEROGLYPHIC LETTER TE", "MEROITIC HIEROGLYPHIC LETTER TE-2", "MEROITIC HIEROGLYPHIC LETTER TO", "MEROITIC HIEROGLYPHIC LETTER DA", "MEROITIC HIEROGLYPHIC SYMBOL VIDJ", "MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2", "MEROITIC CURSIVE LETTER A", "MEROITIC CURSIVE LETTER E", "MEROITIC CURSIVE LETTER I", "MEROITIC CURSIVE LETTER O", "MEROITIC CURSIVE LETTER YA", "MEROITIC CURSIVE LETTER WA", "MEROITIC CURSIVE LETTER BA", "MEROITIC CURSIVE LETTER PA", "MEROITIC CURSIVE LETTER MA", "MEROITIC CURSIVE LETTER NA", "MEROITIC CURSIVE LETTER NE", "MEROITIC CURSIVE LETTER RA", "MEROITIC CURSIVE LETTER LA", "MEROITIC CURSIVE LETTER KHA", "MEROITIC CURSIVE LETTER HHA", "MEROITIC CURSIVE LETTER SA", "MEROITIC CURSIVE LETTER ARCHAIC SA", "MEROITIC CURSIVE LETTER SE", "MEROITIC CURSIVE LETTER KA", "MEROITIC CURSIVE LETTER QA", "MEROITIC CURSIVE LETTER TA", "MEROITIC CURSIVE LETTER TE", "MEROITIC CURSIVE LETTER TO", "MEROITIC CURSIVE LETTER DA", "MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS", "MEROITIC CURSIVE FRACTION ONE HALF", "MEROITIC CURSIVE LOGOGRAM RMT", "MEROITIC CURSIVE LOGOGRAM IMN", "MEROITIC CURSIVE NUMBER ONE", "MEROITIC CURSIVE NUMBER TWO", "MEROITIC CURSIVE NUMBER THREE", "MEROITIC CURSIVE NUMBER FOUR", "MEROITIC CURSIVE NUMBER FIVE", "MEROITIC CURSIVE NUMBER SIX", "MEROITIC CURSIVE NUMBER SEVEN", "MEROITIC CURSIVE NUMBER EIGHT", "MEROITIC CURSIVE NUMBER NINE", "MEROITIC CURSIVE NUMBER TEN", "MEROITIC CURSIVE NUMBER TWENTY", "MEROITIC CURSIVE NUMBER THIRTY", "MEROITIC CURSIVE NUMBER FORTY", "MEROITIC CURSIVE NUMBER FIFTY", "MEROITIC CURSIVE NUMBER SIXTY", "MEROITIC CURSIVE NUMBER SEVENTY", "MEROITIC CURSIVE NUMBER ONE HUNDRED", "MEROITIC CURSIVE NUMBER TWO HUNDRED", "MEROITIC CURSIVE NUMBER THREE HUNDRED", "MEROITIC CURSIVE NUMBER FOUR HUNDRED", "MEROITIC CURSIVE NUMBER FIVE HUNDRED", "MEROITIC CURSIVE NUMBER SIX HUNDRED", "MEROITIC CURSIVE NUMBER SEVEN HUNDRED", "MEROITIC CURSIVE NUMBER EIGHT HUNDRED", "MEROITIC CURSIVE NUMBER NINE HUNDRED", "MEROITIC CURSIVE NUMBER ONE THOUSAND", "MEROITIC CURSIVE NUMBER TWO THOUSAND", "MEROITIC CURSIVE NUMBER THREE THOUSAND", "MEROITIC CURSIVE NUMBER FOUR THOUSAND", "MEROITIC CURSIVE NUMBER FIVE THOUSAND", "MEROITIC CURSIVE NUMBER SIX THOUSAND", "MEROITIC CURSIVE NUMBER SEVEN THOUSAND", "MEROITIC CURSIVE NUMBER EIGHT THOUSAND", "MEROITIC CURSIVE NUMBER NINE THOUSAND", "MEROITIC CURSIVE NUMBER TEN THOUSAND", "MEROITIC CURSIVE NUMBER TWENTY THOUSAND", "MEROITIC CURSIVE NUMBER THIRTY THOUSAND", "MEROITIC CURSIVE NUMBER FORTY THOUSAND", "MEROITIC CURSIVE NUMBER FIFTY THOUSAND", "MEROITIC CURSIVE NUMBER SIXTY THOUSAND", "MEROITIC CURSIVE NUMBER SEVENTY THOUSAND", "MEROITIC CURSIVE NUMBER EIGHTY THOUSAND", "MEROITIC CURSIVE NUMBER NINETY THOUSAND", "MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND", "MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND", "MEROITIC CURSIVE FRACTION ONE TWELFTH", "MEROITIC CURSIVE FRACTION TWO TWELFTHS", "MEROITIC CURSIVE FRACTION THREE TWELFTHS", "MEROITIC CURSIVE FRACTION FOUR TWELFTHS", "MEROITIC CURSIVE FRACTION FIVE TWELFTHS", "MEROITIC CURSIVE FRACTION SIX TWELFTHS", "MEROITIC CURSIVE FRACTION SEVEN TWELFTHS", "MEROITIC CURSIVE FRACTION EIGHT TWELFTHS", "MEROITIC CURSIVE FRACTION NINE TWELFTHS", "MEROITIC CURSIVE FRACTION TEN TWELFTHS", "KHAROSHTHI LETTER A", "KHAROSHTHI VOWEL SIGN I", "KHAROSHTHI VOWEL SIGN U", "KHAROSHTHI VOWEL SIGN VOCALIC R", "KHAROSHTHI VOWEL SIGN E", "KHAROSHTHI VOWEL SIGN O", "KHAROSHTHI VOWEL LENGTH MARK", "KHAROSHTHI SIGN DOUBLE RING BELOW", "KHAROSHTHI SIGN ANUSVARA", "KHAROSHTHI SIGN VISARGA", "KHAROSHTHI LETTER KA", "KHAROSHTHI LETTER KHA", "KHAROSHTHI LETTER GA", "KHAROSHTHI LETTER GHA", "KHAROSHTHI LETTER CA", "KHAROSHTHI LETTER CHA", "KHAROSHTHI LETTER JA", "KHAROSHTHI LETTER NYA", "KHAROSHTHI LETTER TTA", "KHAROSHTHI LETTER TTHA", "KHAROSHTHI LETTER DDA", "KHAROSHTHI LETTER DDHA", "KHAROSHTHI LETTER NNA", "KHAROSHTHI LETTER TA", "KHAROSHTHI LETTER THA", "KHAROSHTHI LETTER DA", "KHAROSHTHI LETTER DHA", "KHAROSHTHI LETTER NA", "KHAROSHTHI LETTER PA", "KHAROSHTHI LETTER PHA", "KHAROSHTHI LETTER BA", "KHAROSHTHI LETTER BHA", "KHAROSHTHI LETTER MA", "KHAROSHTHI LETTER YA", "KHAROSHTHI LETTER RA", "KHAROSHTHI LETTER LA", "KHAROSHTHI LETTER VA", "KHAROSHTHI LETTER SHA", "KHAROSHTHI LETTER SSA", "KHAROSHTHI LETTER SA", "KHAROSHTHI LETTER ZA", "KHAROSHTHI LETTER HA", "KHAROSHTHI LETTER KKA", "KHAROSHTHI LETTER TTTHA", "KHAROSHTHI LETTER TTTA", "KHAROSHTHI LETTER VHA", "KHAROSHTHI SIGN BAR ABOVE", "KHAROSHTHI SIGN CAUDA", "KHAROSHTHI SIGN DOT BELOW", "KHAROSHTHI VIRAMA", "KHAROSHTHI DIGIT ONE", "KHAROSHTHI DIGIT TWO", "KHAROSHTHI DIGIT THREE", "KHAROSHTHI DIGIT FOUR", "KHAROSHTHI NUMBER TEN", "KHAROSHTHI NUMBER TWENTY", "KHAROSHTHI NUMBER ONE HUNDRED", "KHAROSHTHI NUMBER ONE THOUSAND", "KHAROSHTHI FRACTION ONE HALF", "KHAROSHTHI PUNCTUATION DOT", "KHAROSHTHI PUNCTUATION SMALL CIRCLE", "KHAROSHTHI PUNCTUATION CIRCLE", "KHAROSHTHI PUNCTUATION CRESCENT BAR", "KHAROSHTHI PUNCTUATION MANGALAM", "KHAROSHTHI PUNCTUATION LOTUS", "KHAROSHTHI PUNCTUATION DANDA", "KHAROSHTHI PUNCTUATION DOUBLE DANDA", "KHAROSHTHI PUNCTUATION LINES", "OLD SOUTH ARABIAN LETTER HE", "OLD SOUTH ARABIAN LETTER LAMEDH", "OLD SOUTH ARABIAN LETTER HETH", "OLD SOUTH ARABIAN LETTER MEM", "OLD SOUTH ARABIAN LETTER QOPH", "OLD SOUTH ARABIAN LETTER WAW", "OLD SOUTH ARABIAN LETTER SHIN", "OLD SOUTH ARABIAN LETTER RESH", "OLD SOUTH ARABIAN LETTER BETH", "OLD SOUTH ARABIAN LETTER TAW", "OLD SOUTH ARABIAN LETTER SAT", "OLD SOUTH ARABIAN LETTER KAPH", "OLD SOUTH ARABIAN LETTER NUN", "OLD SOUTH ARABIAN LETTER KHETH", "OLD SOUTH ARABIAN LETTER SADHE", "OLD SOUTH ARABIAN LETTER SAMEKH", "OLD SOUTH ARABIAN LETTER FE", "OLD SOUTH ARABIAN LETTER ALEF", "OLD SOUTH ARABIAN LETTER AYN", "OLD SOUTH ARABIAN LETTER DHADHE", "OLD SOUTH ARABIAN LETTER GIMEL", "OLD SOUTH ARABIAN LETTER DALETH", "OLD SOUTH ARABIAN LETTER GHAYN", "OLD SOUTH ARABIAN LETTER TETH", "OLD SOUTH ARABIAN LETTER ZAYN", "OLD SOUTH ARABIAN LETTER DHALETH", "OLD SOUTH ARABIAN LETTER YODH", "OLD SOUTH ARABIAN LETTER THAW", "OLD SOUTH ARABIAN LETTER THETH", "OLD SOUTH ARABIAN NUMBER ONE", "OLD SOUTH ARABIAN NUMBER FIFTY", "OLD SOUTH ARABIAN NUMERIC INDICATOR", "OLD NORTH ARABIAN LETTER HEH", "OLD NORTH ARABIAN LETTER LAM", "OLD NORTH ARABIAN LETTER HAH", "OLD NORTH ARABIAN LETTER MEEM", "OLD NORTH ARABIAN LETTER QAF", "OLD NORTH ARABIAN LETTER WAW", "OLD NORTH ARABIAN LETTER ES-2", "OLD NORTH ARABIAN LETTER REH", "OLD NORTH ARABIAN LETTER BEH", "OLD NORTH ARABIAN LETTER TEH", "OLD NORTH ARABIAN LETTER ES-1", "OLD NORTH ARABIAN LETTER KAF", "OLD NORTH ARABIAN LETTER NOON", "OLD NORTH ARABIAN LETTER KHAH", "OLD NORTH ARABIAN LETTER SAD", "OLD NORTH ARABIAN LETTER ES-3", "OLD NORTH ARABIAN LETTER FEH", "OLD NORTH ARABIAN LETTER ALEF", "OLD NORTH ARABIAN LETTER AIN", "OLD NORTH ARABIAN LETTER DAD", "OLD NORTH ARABIAN LETTER GEEM", "OLD NORTH ARABIAN LETTER DAL", "OLD NORTH ARABIAN LETTER GHAIN", "OLD NORTH ARABIAN LETTER TAH", "OLD NORTH ARABIAN LETTER ZAIN", "OLD NORTH ARABIAN LETTER THAL", "OLD NORTH ARABIAN LETTER YEH", "OLD NORTH ARABIAN LETTER THEH", "OLD NORTH ARABIAN LETTER ZAH", "OLD NORTH ARABIAN NUMBER ONE", "OLD NORTH ARABIAN NUMBER TEN", "OLD NORTH ARABIAN NUMBER TWENTY", "MANICHAEAN LETTER ALEPH", "MANICHAEAN LETTER BETH", "MANICHAEAN LETTER BHETH", "MANICHAEAN LETTER GIMEL", "MANICHAEAN LETTER GHIMEL", "MANICHAEAN LETTER DALETH", "MANICHAEAN LETTER HE", "MANICHAEAN LETTER WAW", "MANICHAEAN SIGN UD", "MANICHAEAN LETTER ZAYIN", "MANICHAEAN LETTER ZHAYIN", "MANICHAEAN LETTER JAYIN", "MANICHAEAN LETTER JHAYIN", "MANICHAEAN LETTER HETH", "MANICHAEAN LETTER TETH", "MANICHAEAN LETTER YODH", "MANICHAEAN LETTER KAPH", "MANICHAEAN LETTER XAPH", "MANICHAEAN LETTER KHAPH", "MANICHAEAN LETTER LAMEDH", "MANICHAEAN LETTER DHAMEDH", "MANICHAEAN LETTER THAMEDH", "MANICHAEAN LETTER MEM", "MANICHAEAN LETTER NUN", "MANICHAEAN LETTER SAMEKH", "MANICHAEAN LETTER AYIN", "MANICHAEAN LETTER AAYIN", "MANICHAEAN LETTER PE", "MANICHAEAN LETTER FE", "MANICHAEAN LETTER SADHE", "MANICHAEAN LETTER QOPH", "MANICHAEAN LETTER XOPH", "MANICHAEAN LETTER QHOPH", "MANICHAEAN LETTER RESH", "MANICHAEAN LETTER SHIN", "MANICHAEAN LETTER SSHIN", "MANICHAEAN LETTER TAW", "MANICHAEAN ABBREVIATION MARK ABOVE", "MANICHAEAN ABBREVIATION MARK BELOW", "MANICHAEAN NUMBER ONE", "MANICHAEAN NUMBER FIVE", "MANICHAEAN NUMBER TEN", "MANICHAEAN NUMBER TWENTY", "MANICHAEAN NUMBER ONE HUNDRED", "MANICHAEAN PUNCTUATION STAR", "MANICHAEAN PUNCTUATION FLEURON", "MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT", "MANICHAEAN PUNCTUATION DOT WITHIN DOT", "MANICHAEAN PUNCTUATION DOT", "MANICHAEAN PUNCTUATION TWO DOTS", "MANICHAEAN PUNCTUATION LINE FILLER", "AVESTAN LETTER A", "AVESTAN LETTER AA", "AVESTAN LETTER AO", "AVESTAN LETTER AAO", "AVESTAN LETTER AN", "AVESTAN LETTER AAN", "AVESTAN LETTER AE", "AVESTAN LETTER AEE", "AVESTAN LETTER E", "AVESTAN LETTER EE", "AVESTAN LETTER O", "AVESTAN LETTER OO", "AVESTAN LETTER I", "AVESTAN LETTER II", "AVESTAN LETTER U", "AVESTAN LETTER UU", "AVESTAN LETTER KE", "AVESTAN LETTER XE", "AVESTAN LETTER XYE", "AVESTAN LETTER XVE", "AVESTAN LETTER GE", "AVESTAN LETTER GGE", "AVESTAN LETTER GHE", "AVESTAN LETTER CE", "AVESTAN LETTER JE", "AVESTAN LETTER TE", "AVESTAN LETTER THE", "AVESTAN LETTER DE", "AVESTAN LETTER DHE", "AVESTAN LETTER TTE", "AVESTAN LETTER PE", "AVESTAN LETTER FE", "AVESTAN LETTER BE", "AVESTAN LETTER BHE", "AVESTAN LETTER NGE", "AVESTAN LETTER NGYE", "AVESTAN LETTER NGVE", "AVESTAN LETTER NE", "AVESTAN LETTER NYE", "AVESTAN LETTER NNE", "AVESTAN LETTER ME", "AVESTAN LETTER HME", "AVESTAN LETTER YYE", "AVESTAN LETTER YE", "AVESTAN LETTER VE", "AVESTAN LETTER RE", "AVESTAN LETTER LE", "AVESTAN LETTER SE", "AVESTAN LETTER ZE", "AVESTAN LETTER SHE", "AVESTAN LETTER ZHE", "AVESTAN LETTER SHYE", "AVESTAN LETTER SSHE", "AVESTAN LETTER HE", "AVESTAN ABBREVIATION MARK", "TINY TWO DOTS OVER ONE DOT PUNCTUATION", "SMALL TWO DOTS OVER ONE DOT PUNCTUATION", "LARGE TWO DOTS OVER ONE DOT PUNCTUATION", "LARGE ONE DOT OVER TWO DOTS PUNCTUATION", "LARGE TWO RINGS OVER ONE RING PUNCTUATION", "LARGE ONE RING OVER TWO RINGS PUNCTUATION", "INSCRIPTIONAL PARTHIAN LETTER ALEPH", "INSCRIPTIONAL PARTHIAN LETTER BETH", "INSCRIPTIONAL PARTHIAN LETTER GIMEL", "INSCRIPTIONAL PARTHIAN LETTER DALETH", "INSCRIPTIONAL PARTHIAN LETTER HE", "INSCRIPTIONAL PARTHIAN LETTER WAW", "INSCRIPTIONAL PARTHIAN LETTER ZAYIN", "INSCRIPTIONAL PARTHIAN LETTER HETH", "INSCRIPTIONAL PARTHIAN LETTER TETH", "INSCRIPTIONAL PARTHIAN LETTER YODH", "INSCRIPTIONAL PARTHIAN LETTER KAPH", "INSCRIPTIONAL PARTHIAN LETTER LAMEDH", "INSCRIPTIONAL PARTHIAN LETTER MEM", "INSCRIPTIONAL PARTHIAN LETTER NUN", "INSCRIPTIONAL PARTHIAN LETTER SAMEKH", "INSCRIPTIONAL PARTHIAN LETTER AYIN", "INSCRIPTIONAL PARTHIAN LETTER PE", "INSCRIPTIONAL PARTHIAN LETTER SADHE", "INSCRIPTIONAL PARTHIAN LETTER QOPH", "INSCRIPTIONAL PARTHIAN LETTER RESH", "INSCRIPTIONAL PARTHIAN LETTER SHIN", "INSCRIPTIONAL PARTHIAN LETTER TAW", "INSCRIPTIONAL PARTHIAN NUMBER ONE", "INSCRIPTIONAL PARTHIAN NUMBER TWO", "INSCRIPTIONAL PARTHIAN NUMBER THREE", "INSCRIPTIONAL PARTHIAN NUMBER FOUR", "INSCRIPTIONAL PARTHIAN NUMBER TEN", "INSCRIPTIONAL PARTHIAN NUMBER TWENTY", "INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED", "INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND", "INSCRIPTIONAL PAHLAVI LETTER ALEPH", "INSCRIPTIONAL PAHLAVI LETTER BETH", "INSCRIPTIONAL PAHLAVI LETTER GIMEL", "INSCRIPTIONAL PAHLAVI LETTER DALETH", "INSCRIPTIONAL PAHLAVI LETTER HE", "INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH", "INSCRIPTIONAL PAHLAVI LETTER ZAYIN", "INSCRIPTIONAL PAHLAVI LETTER HETH", "INSCRIPTIONAL PAHLAVI LETTER TETH", "INSCRIPTIONAL PAHLAVI LETTER YODH", "INSCRIPTIONAL PAHLAVI LETTER KAPH", "INSCRIPTIONAL PAHLAVI LETTER LAMEDH", "INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH", "INSCRIPTIONAL PAHLAVI LETTER NUN", "INSCRIPTIONAL PAHLAVI LETTER SAMEKH", "INSCRIPTIONAL PAHLAVI LETTER PE", "INSCRIPTIONAL PAHLAVI LETTER SADHE", "INSCRIPTIONAL PAHLAVI LETTER SHIN", "INSCRIPTIONAL PAHLAVI LETTER TAW", "INSCRIPTIONAL PAHLAVI NUMBER ONE", "INSCRIPTIONAL PAHLAVI NUMBER TWO", "INSCRIPTIONAL PAHLAVI NUMBER THREE", "INSCRIPTIONAL PAHLAVI NUMBER FOUR", "INSCRIPTIONAL PAHLAVI NUMBER TEN", "INSCRIPTIONAL PAHLAVI NUMBER TWENTY", "INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED", "INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND", "PSALTER PAHLAVI LETTER ALEPH", "PSALTER PAHLAVI LETTER BETH", "PSALTER PAHLAVI LETTER GIMEL", "PSALTER PAHLAVI LETTER DALETH", "PSALTER PAHLAVI LETTER HE", "PSALTER PAHLAVI LETTER WAW-AYIN-RESH", "PSALTER PAHLAVI LETTER ZAYIN", "PSALTER PAHLAVI LETTER HETH", "PSALTER PAHLAVI LETTER YODH", "PSALTER PAHLAVI LETTER KAPH", "PSALTER PAHLAVI LETTER LAMEDH", "PSALTER PAHLAVI LETTER MEM-QOPH", "PSALTER PAHLAVI LETTER NUN", "PSALTER PAHLAVI LETTER SAMEKH", "PSALTER PAHLAVI LETTER PE", "PSALTER PAHLAVI LETTER SADHE", "PSALTER PAHLAVI LETTER SHIN", "PSALTER PAHLAVI LETTER TAW", "PSALTER PAHLAVI SECTION MARK", "PSALTER PAHLAVI TURNED SECTION MARK", "PSALTER PAHLAVI FOUR DOTS WITH CROSS", "PSALTER PAHLAVI FOUR DOTS WITH DOT", "PSALTER PAHLAVI NUMBER ONE", "PSALTER PAHLAVI NUMBER TWO", "PSALTER PAHLAVI NUMBER THREE", "PSALTER PAHLAVI NUMBER FOUR", "PSALTER PAHLAVI NUMBER TEN", "PSALTER PAHLAVI NUMBER TWENTY", "PSALTER PAHLAVI NUMBER ONE HUNDRED", "OLD TURKIC LETTER ORKHON A", "OLD TURKIC LETTER YENISEI A", "OLD TURKIC LETTER YENISEI AE", "OLD TURKIC LETTER ORKHON I", "OLD TURKIC LETTER YENISEI I", "OLD TURKIC LETTER YENISEI E", "OLD TURKIC LETTER ORKHON O", "OLD TURKIC LETTER ORKHON OE", "OLD TURKIC LETTER YENISEI OE", "OLD TURKIC LETTER ORKHON AB", "OLD TURKIC LETTER YENISEI AB", "OLD TURKIC LETTER ORKHON AEB", "OLD TURKIC LETTER YENISEI AEB", "OLD TURKIC LETTER ORKHON AG", "OLD TURKIC LETTER YENISEI AG", "OLD TURKIC LETTER ORKHON AEG", "OLD TURKIC LETTER YENISEI AEG", "OLD TURKIC LETTER ORKHON AD", "OLD TURKIC LETTER YENISEI AD", "OLD TURKIC LETTER ORKHON AED", "OLD TURKIC LETTER ORKHON EZ", "OLD TURKIC LETTER YENISEI EZ", "OLD TURKIC LETTER ORKHON AY", "OLD TURKIC LETTER YENISEI AY", "OLD TURKIC LETTER ORKHON AEY", "OLD TURKIC LETTER YENISEI AEY", "OLD TURKIC LETTER ORKHON AEK", "OLD TURKIC LETTER YENISEI AEK", "OLD TURKIC LETTER ORKHON OEK", "OLD TURKIC LETTER YENISEI OEK", "OLD TURKIC LETTER ORKHON AL", "OLD TURKIC LETTER YENISEI AL", "OLD TURKIC LETTER ORKHON AEL", "OLD TURKIC LETTER ORKHON ELT", "OLD TURKIC LETTER ORKHON EM", "OLD TURKIC LETTER ORKHON AN", "OLD TURKIC LETTER ORKHON AEN", "OLD TURKIC LETTER YENISEI AEN", "OLD TURKIC LETTER ORKHON ENT", "OLD TURKIC LETTER YENISEI ENT", "OLD TURKIC LETTER ORKHON ENC", "OLD TURKIC LETTER YENISEI ENC", "OLD TURKIC LETTER ORKHON ENY", "OLD TURKIC LETTER YENISEI ENY", "OLD TURKIC LETTER YENISEI ANG", "OLD TURKIC LETTER ORKHON ENG", "OLD TURKIC LETTER YENISEI AENG", "OLD TURKIC LETTER ORKHON EP", "OLD TURKIC LETTER ORKHON OP", "OLD TURKIC LETTER ORKHON IC", "OLD TURKIC LETTER ORKHON EC", "OLD TURKIC LETTER YENISEI EC", "OLD TURKIC LETTER ORKHON AQ", "OLD TURKIC LETTER YENISEI AQ", "OLD TURKIC LETTER ORKHON IQ", "OLD TURKIC LETTER YENISEI IQ", "OLD TURKIC LETTER ORKHON OQ", "OLD TURKIC LETTER YENISEI OQ", "OLD TURKIC LETTER ORKHON AR", "OLD TURKIC LETTER YENISEI AR", "OLD TURKIC LETTER ORKHON AER", "OLD TURKIC LETTER ORKHON AS", "OLD TURKIC LETTER ORKHON AES", "OLD TURKIC LETTER ORKHON ASH", "OLD TURKIC LETTER YENISEI ASH", "OLD TURKIC LETTER ORKHON ESH", "OLD TURKIC LETTER YENISEI ESH", "OLD TURKIC LETTER ORKHON AT", "OLD TURKIC LETTER YENISEI AT", "OLD TURKIC LETTER ORKHON AET", "OLD TURKIC LETTER YENISEI AET", "OLD TURKIC LETTER ORKHON OT", "OLD TURKIC LETTER ORKHON BASH", "OLD HUNGARIAN CAPITAL LETTER A", "OLD HUNGARIAN CAPITAL LETTER AA", "OLD HUNGARIAN CAPITAL LETTER EB", "OLD HUNGARIAN CAPITAL LETTER AMB", "OLD HUNGARIAN CAPITAL LETTER EC", "OLD HUNGARIAN CAPITAL LETTER ENC", "OLD HUNGARIAN CAPITAL LETTER ECS", "OLD HUNGARIAN CAPITAL LETTER ED", "OLD HUNGARIAN CAPITAL LETTER AND", "OLD HUNGARIAN CAPITAL LETTER E", "OLD HUNGARIAN CAPITAL LETTER CLOSE E", "OLD HUNGARIAN CAPITAL LETTER EE", "OLD HUNGARIAN CAPITAL LETTER EF", "OLD HUNGARIAN CAPITAL LETTER EG", "OLD HUNGARIAN CAPITAL LETTER EGY", "OLD HUNGARIAN CAPITAL LETTER EH", "OLD HUNGARIAN CAPITAL LETTER I", "OLD HUNGARIAN CAPITAL LETTER II", "OLD HUNGARIAN CAPITAL LETTER EJ", "OLD HUNGARIAN CAPITAL LETTER EK", "OLD HUNGARIAN CAPITAL LETTER AK", "OLD HUNGARIAN CAPITAL LETTER UNK", "OLD HUNGARIAN CAPITAL LETTER EL", "OLD HUNGARIAN CAPITAL LETTER ELY", "OLD HUNGARIAN CAPITAL LETTER EM", "OLD HUNGARIAN CAPITAL LETTER EN", "OLD HUNGARIAN CAPITAL LETTER ENY", "OLD HUNGARIAN CAPITAL LETTER O", "OLD HUNGARIAN CAPITAL LETTER OO", "OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE", "OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE", "OLD HUNGARIAN CAPITAL LETTER OEE", "OLD HUNGARIAN CAPITAL LETTER EP", "OLD HUNGARIAN CAPITAL LETTER EMP", "OLD HUNGARIAN CAPITAL LETTER ER", "OLD HUNGARIAN CAPITAL LETTER SHORT ER", "OLD HUNGARIAN CAPITAL LETTER ES", "OLD HUNGARIAN CAPITAL LETTER ESZ", "OLD HUNGARIAN CAPITAL LETTER ET", "OLD HUNGARIAN CAPITAL LETTER ENT", "OLD HUNGARIAN CAPITAL LETTER ETY", "OLD HUNGARIAN CAPITAL LETTER ECH", "OLD HUNGARIAN CAPITAL LETTER U", "OLD HUNGARIAN CAPITAL LETTER UU", "OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE", "OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE", "OLD HUNGARIAN CAPITAL LETTER EV", "OLD HUNGARIAN CAPITAL LETTER EZ", "OLD HUNGARIAN CAPITAL LETTER EZS", "OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN", "OLD HUNGARIAN CAPITAL LETTER US", "OLD HUNGARIAN SMALL LETTER A", "OLD HUNGARIAN SMALL LETTER AA", "OLD HUNGARIAN SMALL LETTER EB", "OLD HUNGARIAN SMALL LETTER AMB", "OLD HUNGARIAN SMALL LETTER EC", "OLD HUNGARIAN SMALL LETTER ENC", "OLD HUNGARIAN SMALL LETTER ECS", "OLD HUNGARIAN SMALL LETTER ED", "OLD HUNGARIAN SMALL LETTER AND", "OLD HUNGARIAN SMALL LETTER E", "OLD HUNGARIAN SMALL LETTER CLOSE E", "OLD HUNGARIAN SMALL LETTER EE", "OLD HUNGARIAN SMALL LETTER EF", "OLD HUNGARIAN SMALL LETTER EG", "OLD HUNGARIAN SMALL LETTER EGY", "OLD HUNGARIAN SMALL LETTER EH", "OLD HUNGARIAN SMALL LETTER I", "OLD HUNGARIAN SMALL LETTER II", "OLD HUNGARIAN SMALL LETTER EJ", "OLD HUNGARIAN SMALL LETTER EK", "OLD HUNGARIAN SMALL LETTER AK", "OLD HUNGARIAN SMALL LETTER UNK", "OLD HUNGARIAN SMALL LETTER EL", "OLD HUNGARIAN SMALL LETTER ELY", "OLD HUNGARIAN SMALL LETTER EM", "OLD HUNGARIAN SMALL LETTER EN", "OLD HUNGARIAN SMALL LETTER ENY", "OLD HUNGARIAN SMALL LETTER O", "OLD HUNGARIAN SMALL LETTER OO", "OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE", "OLD HUNGARIAN SMALL LETTER RUDIMENTA OE", "OLD HUNGARIAN SMALL LETTER OEE", "OLD HUNGARIAN SMALL LETTER EP", "OLD HUNGARIAN SMALL LETTER EMP", "OLD HUNGARIAN SMALL LETTER ER", "OLD HUNGARIAN SMALL LETTER SHORT ER", "OLD HUNGARIAN SMALL LETTER ES", "OLD HUNGARIAN SMALL LETTER ESZ", "OLD HUNGARIAN SMALL LETTER ET", "OLD HUNGARIAN SMALL LETTER ENT", "OLD HUNGARIAN SMALL LETTER ETY", "OLD HUNGARIAN SMALL LETTER ECH", "OLD HUNGARIAN SMALL LETTER U", "OLD HUNGARIAN SMALL LETTER UU", "OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE", "OLD HUNGARIAN SMALL LETTER RUDIMENTA UE", "OLD HUNGARIAN SMALL LETTER EV", "OLD HUNGARIAN SMALL LETTER EZ", "OLD HUNGARIAN SMALL LETTER EZS", "OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN", "OLD HUNGARIAN SMALL LETTER US", "OLD HUNGARIAN NUMBER ONE", "OLD HUNGARIAN NUMBER FIVE", "OLD HUNGARIAN NUMBER TEN", "OLD HUNGARIAN NUMBER FIFTY", "OLD HUNGARIAN NUMBER ONE HUNDRED", "OLD HUNGARIAN NUMBER ONE THOUSAND", "HANIFI ROHINGYA LETTER A", "HANIFI ROHINGYA LETTER BA", "HANIFI ROHINGYA LETTER PA", "HANIFI ROHINGYA LETTER TA", "HANIFI ROHINGYA LETTER TTA", "HANIFI ROHINGYA LETTER JA", "HANIFI ROHINGYA LETTER CA", "HANIFI ROHINGYA LETTER HA", "HANIFI ROHINGYA LETTER KHA", "HANIFI ROHINGYA LETTER FA", "HANIFI ROHINGYA LETTER DA", "HANIFI ROHINGYA LETTER DDA", "HANIFI ROHINGYA LETTER RA", "HANIFI ROHINGYA LETTER RRA", "HANIFI ROHINGYA LETTER ZA", "HANIFI ROHINGYA LETTER SA", "HANIFI ROHINGYA LETTER SHA", "HANIFI ROHINGYA LETTER KA", "HANIFI ROHINGYA LETTER GA", "HANIFI ROHINGYA LETTER LA", "HANIFI ROHINGYA LETTER MA", "HANIFI ROHINGYA LETTER NA", "HANIFI ROHINGYA LETTER WA", "HANIFI ROHINGYA LETTER KINNA WA", "HANIFI ROHINGYA LETTER YA", "HANIFI ROHINGYA LETTER KINNA YA", "HANIFI ROHINGYA LETTER NGA", "HANIFI ROHINGYA LETTER NYA", "HANIFI ROHINGYA LETTER VA", "HANIFI ROHINGYA VOWEL A", "HANIFI ROHINGYA VOWEL I", "HANIFI ROHINGYA VOWEL U", "HANIFI ROHINGYA VOWEL E", "HANIFI ROHINGYA VOWEL O", "HANIFI ROHINGYA MARK SAKIN", "HANIFI ROHINGYA MARK NA KHONNA", "HANIFI ROHINGYA SIGN HARBAHAY", "HANIFI ROHINGYA SIGN TAHALA", "HANIFI ROHINGYA SIGN TANA", "HANIFI ROHINGYA SIGN TASSI", "HANIFI ROHINGYA DIGIT ZERO", "HANIFI ROHINGYA DIGIT ONE", "HANIFI ROHINGYA DIGIT TWO", "HANIFI ROHINGYA DIGIT THREE", "HANIFI ROHINGYA DIGIT FOUR", "HANIFI ROHINGYA DIGIT FIVE", "HANIFI ROHINGYA DIGIT SIX", "HANIFI ROHINGYA DIGIT SEVEN", "HANIFI ROHINGYA DIGIT EIGHT", "HANIFI ROHINGYA DIGIT NINE", "RUMI DIGIT ONE", "RUMI DIGIT TWO", "RUMI DIGIT THREE", "RUMI DIGIT FOUR", "RUMI DIGIT FIVE", "RUMI DIGIT SIX", "RUMI DIGIT SEVEN", "RUMI DIGIT EIGHT", "RUMI DIGIT NINE", "RUMI NUMBER TEN", "RUMI NUMBER TWENTY", "RUMI NUMBER THIRTY", "RUMI NUMBER FORTY", "RUMI NUMBER FIFTY", "RUMI NUMBER SIXTY", "RUMI NUMBER SEVENTY", "RUMI NUMBER EIGHTY", "RUMI NUMBER NINETY", "RUMI NUMBER ONE HUNDRED", "RUMI NUMBER TWO HUNDRED", "RUMI NUMBER THREE HUNDRED", "RUMI NUMBER FOUR HUNDRED", "RUMI NUMBER FIVE HUNDRED", "RUMI NUMBER SIX HUNDRED", "RUMI NUMBER SEVEN HUNDRED", "RUMI NUMBER EIGHT HUNDRED", "RUMI NUMBER NINE HUNDRED", "RUMI FRACTION ONE HALF", "RUMI FRACTION ONE QUARTER", "RUMI FRACTION ONE THIRD", "RUMI FRACTION TWO THIRDS", "OLD SOGDIAN LETTER ALEPH", "OLD SOGDIAN LETTER FINAL ALEPH", "OLD SOGDIAN LETTER BETH", "OLD SOGDIAN LETTER FINAL BETH", "OLD SOGDIAN LETTER GIMEL", "OLD SOGDIAN LETTER HE", "OLD SOGDIAN LETTER FINAL HE", "OLD SOGDIAN LETTER WAW", "OLD SOGDIAN LETTER ZAYIN", "OLD SOGDIAN LETTER HETH", "OLD SOGDIAN LETTER YODH", "OLD SOGDIAN LETTER KAPH", "OLD SOGDIAN LETTER LAMEDH", "OLD SOGDIAN LETTER MEM", "OLD SOGDIAN LETTER NUN", "OLD SOGDIAN LETTER FINAL NUN", "OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL", "OLD SOGDIAN LETTER SAMEKH", "OLD SOGDIAN LETTER AYIN", "OLD SOGDIAN LETTER ALTERNATE AYIN", "OLD SOGDIAN LETTER PE", "OLD SOGDIAN LETTER SADHE", "OLD SOGDIAN LETTER FINAL SADHE", "OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL", "OLD SOGDIAN LETTER RESH-AYIN-DALETH", "OLD SOGDIAN LETTER SHIN", "OLD SOGDIAN LETTER TAW", "OLD SOGDIAN LETTER FINAL TAW", "OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL", "OLD SOGDIAN NUMBER ONE", "OLD SOGDIAN NUMBER TWO", "OLD SOGDIAN NUMBER THREE", "OLD SOGDIAN NUMBER FOUR", "OLD SOGDIAN NUMBER FIVE", "OLD SOGDIAN NUMBER TEN", "OLD SOGDIAN NUMBER TWENTY", "OLD SOGDIAN NUMBER THIRTY", "OLD SOGDIAN NUMBER ONE HUNDRED", "OLD SOGDIAN FRACTION ONE HALF", "OLD SOGDIAN LIGATURE AYIN-DALETH", "SOGDIAN LETTER ALEPH", "SOGDIAN LETTER BETH", "SOGDIAN LETTER GIMEL", "SOGDIAN LETTER HE", "SOGDIAN LETTER WAW", "SOGDIAN LETTER ZAYIN", "SOGDIAN LETTER HETH", "SOGDIAN LETTER YODH", "SOGDIAN LETTER KAPH", "SOGDIAN LETTER LAMEDH", "SOGDIAN LETTER MEM", "SOGDIAN LETTER NUN", "SOGDIAN LETTER SAMEKH", "SOGDIAN LETTER AYIN", "SOGDIAN LETTER PE", "SOGDIAN LETTER SADHE", "SOGDIAN LETTER RESH-AYIN", "SOGDIAN LETTER SHIN", "SOGDIAN LETTER TAW", "SOGDIAN LETTER FETH", "SOGDIAN LETTER LESH", "SOGDIAN INDEPENDENT SHIN", "SOGDIAN COMBINING DOT BELOW", "SOGDIAN COMBINING TWO DOTS BELOW", "SOGDIAN COMBINING DOT ABOVE", "SOGDIAN COMBINING TWO DOTS ABOVE", "SOGDIAN COMBINING CURVE ABOVE", "SOGDIAN COMBINING CURVE BELOW", "SOGDIAN COMBINING HOOK ABOVE", "SOGDIAN COMBINING HOOK BELOW", "SOGDIAN COMBINING LONG HOOK BELOW", "SOGDIAN COMBINING RESH BELOW", "SOGDIAN COMBINING STROKE BELOW", "SOGDIAN NUMBER ONE", "SOGDIAN NUMBER TEN", "SOGDIAN NUMBER TWENTY", "SOGDIAN NUMBER ONE HUNDRED", "SOGDIAN PUNCTUATION TWO VERTICAL BARS", "SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS", "SOGDIAN PUNCTUATION CIRCLE WITH DOT", "SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS", "SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT", "ELYMAIC LETTER ALEPH", "ELYMAIC LETTER BETH", "ELYMAIC LETTER GIMEL", "ELYMAIC LETTER DALETH", "ELYMAIC LETTER HE", "ELYMAIC LETTER WAW", "ELYMAIC LETTER ZAYIN", "ELYMAIC LETTER HETH", "ELYMAIC LETTER TETH", "ELYMAIC LETTER YODH", "ELYMAIC LETTER KAPH", "ELYMAIC LETTER LAMEDH", "ELYMAIC LETTER MEM", "ELYMAIC LETTER NUN", "ELYMAIC LETTER SAMEKH", "ELYMAIC LETTER AYIN", "ELYMAIC LETTER PE", "ELYMAIC LETTER SADHE", "ELYMAIC LETTER QOPH", "ELYMAIC LETTER RESH", "ELYMAIC LETTER SHIN", "ELYMAIC LETTER TAW", "ELYMAIC LIGATURE ZAYIN-YODH", "BRAHMI SIGN CANDRABINDU", "BRAHMI SIGN ANUSVARA", "BRAHMI SIGN VISARGA", "BRAHMI SIGN JIHVAMULIYA", "BRAHMI SIGN UPADHMANIYA", "BRAHMI LETTER A", "BRAHMI LETTER AA", "BRAHMI LETTER I", "BRAHMI LETTER II", "BRAHMI LETTER U", "BRAHMI LETTER UU", "BRAHMI LETTER VOCALIC R", "BRAHMI LETTER VOCALIC RR", "BRAHMI LETTER VOCALIC L", "BRAHMI LETTER VOCALIC LL", "BRAHMI LETTER E", "BRAHMI LETTER AI", "BRAHMI LETTER O", "BRAHMI LETTER AU", "BRAHMI LETTER KA", "BRAHMI LETTER KHA", "BRAHMI LETTER GA", "BRAHMI LETTER GHA", "BRAHMI LETTER NGA", "BRAHMI LETTER CA", "BRAHMI LETTER CHA", "BRAHMI LETTER JA", "BRAHMI LETTER JHA", "BRAHMI LETTER NYA", "BRAHMI LETTER TTA", "BRAHMI LETTER TTHA", "BRAHMI LETTER DDA", "BRAHMI LETTER DDHA", "BRAHMI LETTER NNA", "BRAHMI LETTER TA", "BRAHMI LETTER THA", "BRAHMI LETTER DA", "BRAHMI LETTER DHA", "BRAHMI LETTER NA", "BRAHMI LETTER PA", "BRAHMI LETTER PHA", "BRAHMI LETTER BA", "BRAHMI LETTER BHA", "BRAHMI LETTER MA", "BRAHMI LETTER YA", "BRAHMI LETTER RA", "BRAHMI LETTER LA", "BRAHMI LETTER VA", "BRAHMI LETTER SHA", "BRAHMI LETTER SSA", "BRAHMI LETTER SA", "BRAHMI LETTER HA", "BRAHMI LETTER LLA", "BRAHMI LETTER OLD TAMIL LLLA", "BRAHMI LETTER OLD TAMIL RRA", "BRAHMI LETTER OLD TAMIL NNNA", "BRAHMI VOWEL SIGN AA", "BRAHMI VOWEL SIGN BHATTIPROLU AA", "BRAHMI VOWEL SIGN I", "BRAHMI VOWEL SIGN II", "BRAHMI VOWEL SIGN U", "BRAHMI VOWEL SIGN UU", "BRAHMI VOWEL SIGN VOCALIC R", "BRAHMI VOWEL SIGN VOCALIC RR", "BRAHMI VOWEL SIGN VOCALIC L", "BRAHMI VOWEL SIGN VOCALIC LL", "BRAHMI VOWEL SIGN E", "BRAHMI VOWEL SIGN AI", "BRAHMI VOWEL SIGN O", "BRAHMI VOWEL SIGN AU", "BRAHMI VIRAMA", "BRAHMI DANDA", "BRAHMI DOUBLE DANDA", "BRAHMI PUNCTUATION DOT", "BRAHMI PUNCTUATION DOUBLE DOT", "BRAHMI PUNCTUATION LINE", "BRAHMI PUNCTUATION CRESCENT BAR", "BRAHMI PUNCTUATION LOTUS", "BRAHMI NUMBER ONE", "BRAHMI NUMBER TWO", "BRAHMI NUMBER THREE", "BRAHMI NUMBER FOUR", "BRAHMI NUMBER FIVE", "BRAHMI NUMBER SIX", "BRAHMI NUMBER SEVEN", "BRAHMI NUMBER EIGHT", "BRAHMI NUMBER NINE", "BRAHMI NUMBER TEN", "BRAHMI NUMBER TWENTY", "BRAHMI NUMBER THIRTY", "BRAHMI NUMBER FORTY", "BRAHMI NUMBER FIFTY", "BRAHMI NUMBER SIXTY", "BRAHMI NUMBER SEVENTY", "BRAHMI NUMBER EIGHTY", "BRAHMI NUMBER NINETY", "BRAHMI NUMBER ONE HUNDRED", "BRAHMI NUMBER ONE THOUSAND", "BRAHMI DIGIT ZERO", "BRAHMI DIGIT ONE", "BRAHMI DIGIT TWO", "BRAHMI DIGIT THREE", "BRAHMI DIGIT FOUR", "BRAHMI DIGIT FIVE", "BRAHMI DIGIT SIX", "BRAHMI DIGIT SEVEN", "BRAHMI DIGIT EIGHT", "BRAHMI DIGIT NINE", "BRAHMI NUMBER JOINER", "KAITHI SIGN CANDRABINDU", "KAITHI SIGN ANUSVARA", "KAITHI SIGN VISARGA", "KAITHI LETTER A", "KAITHI LETTER AA", "KAITHI LETTER I", "KAITHI LETTER II", "KAITHI LETTER U", "KAITHI LETTER UU", "KAITHI LETTER E", "KAITHI LETTER AI", "KAITHI LETTER O", "KAITHI LETTER AU", "KAITHI LETTER KA", "KAITHI LETTER KHA", "KAITHI LETTER GA", "KAITHI LETTER GHA", "KAITHI LETTER NGA", "KAITHI LETTER CA", "KAITHI LETTER CHA", "KAITHI LETTER JA", "KAITHI LETTER JHA", "KAITHI LETTER NYA", "KAITHI LETTER TTA", "KAITHI LETTER TTHA", "KAITHI LETTER DDA", "KAITHI LETTER DDDHA", "KAITHI LETTER DDHA", "KAITHI LETTER RHA", "KAITHI LETTER NNA", "KAITHI LETTER TA", "KAITHI LETTER THA", "KAITHI LETTER DA", "KAITHI LETTER DHA", "KAITHI LETTER NA", "KAITHI LETTER PA", "KAITHI LETTER PHA", "KAITHI LETTER BA", "KAITHI LETTER BHA", "KAITHI LETTER MA", "KAITHI LETTER YA", "KAITHI LETTER RA", "KAITHI LETTER LA", "KAITHI LETTER VA", "KAITHI LETTER SHA", "KAITHI LETTER SSA", "KAITHI LETTER SA", "KAITHI LETTER HA", "KAITHI VOWEL SIGN AA", "KAITHI VOWEL SIGN I", "KAITHI VOWEL SIGN II", "KAITHI VOWEL SIGN U", "KAITHI VOWEL SIGN UU", "KAITHI VOWEL SIGN E", "KAITHI VOWEL SIGN AI", "KAITHI VOWEL SIGN O", "KAITHI VOWEL SIGN AU", "KAITHI SIGN VIRAMA", "KAITHI SIGN NUKTA", "KAITHI ABBREVIATION SIGN", "KAITHI ENUMERATION SIGN", "KAITHI NUMBER SIGN", "KAITHI SECTION MARK", "KAITHI DOUBLE SECTION MARK", "KAITHI DANDA", "KAITHI DOUBLE DANDA", "KAITHI NUMBER SIGN ABOVE", "SORA SOMPENG LETTER SAH", "SORA SOMPENG LETTER TAH", "SORA SOMPENG LETTER BAH", "SORA SOMPENG LETTER CAH", "SORA SOMPENG LETTER DAH", "SORA SOMPENG LETTER GAH", "SORA SOMPENG LETTER MAH", "SORA SOMPENG LETTER NGAH", "SORA SOMPENG LETTER LAH", "SORA SOMPENG LETTER NAH", "SORA SOMPENG LETTER VAH", "SORA SOMPENG LETTER PAH", "SORA SOMPENG LETTER YAH", "SORA SOMPENG LETTER RAH", "SORA SOMPENG LETTER HAH", "SORA SOMPENG LETTER KAH", "SORA SOMPENG LETTER JAH", "SORA SOMPENG LETTER NYAH", "SORA SOMPENG LETTER AH", "SORA SOMPENG LETTER EEH", "SORA SOMPENG LETTER IH", "SORA SOMPENG LETTER UH", "SORA SOMPENG LETTER OH", "SORA SOMPENG LETTER EH", "SORA SOMPENG LETTER MAE", "SORA SOMPENG DIGIT ZERO", "SORA SOMPENG DIGIT ONE", "SORA SOMPENG DIGIT TWO", "SORA SOMPENG DIGIT THREE", "SORA SOMPENG DIGIT FOUR", "SORA SOMPENG DIGIT FIVE", "SORA SOMPENG DIGIT SIX", "SORA SOMPENG DIGIT SEVEN", "SORA SOMPENG DIGIT EIGHT", "SORA SOMPENG DIGIT NINE", "CHAKMA SIGN CANDRABINDU", "CHAKMA SIGN ANUSVARA", "CHAKMA SIGN VISARGA", "CHAKMA LETTER AA", "CHAKMA LETTER I", "CHAKMA LETTER U", "CHAKMA LETTER E", "CHAKMA LETTER KAA", "CHAKMA LETTER KHAA", "CHAKMA LETTER GAA", "CHAKMA LETTER GHAA", "CHAKMA LETTER NGAA", "CHAKMA LETTER CAA", "CHAKMA LETTER CHAA", "CHAKMA LETTER JAA", "CHAKMA LETTER JHAA", "CHAKMA LETTER NYAA", "CHAKMA LETTER TTAA", "CHAKMA LETTER TTHAA", "CHAKMA LETTER DDAA", "CHAKMA LETTER DDHAA", "CHAKMA LETTER NNAA", "CHAKMA LETTER TAA", "CHAKMA LETTER THAA", "CHAKMA LETTER DAA", "CHAKMA LETTER DHAA", "CHAKMA LETTER NAA", "CHAKMA LETTER PAA", "CHAKMA LETTER PHAA", "CHAKMA LETTER BAA", "CHAKMA LETTER BHAA", "CHAKMA LETTER MAA", "CHAKMA LETTER YYAA", "CHAKMA LETTER YAA", "CHAKMA LETTER RAA", "CHAKMA LETTER LAA", "CHAKMA LETTER WAA", "CHAKMA LETTER SAA", "CHAKMA LETTER HAA", "CHAKMA VOWEL SIGN A", "CHAKMA VOWEL SIGN I", "CHAKMA VOWEL SIGN II", "CHAKMA VOWEL SIGN U", "CHAKMA VOWEL SIGN UU", "CHAKMA VOWEL SIGN E", "CHAKMA VOWEL SIGN AI", "CHAKMA VOWEL SIGN O", "CHAKMA VOWEL SIGN AU", "CHAKMA VOWEL SIGN OI", "CHAKMA O MARK", "CHAKMA AU MARK", "CHAKMA VIRAMA", "CHAKMA MAAYYAA", "CHAKMA DIGIT ZERO", "CHAKMA DIGIT ONE", "CHAKMA DIGIT TWO", "CHAKMA DIGIT THREE", "CHAKMA DIGIT FOUR", "CHAKMA DIGIT FIVE", "CHAKMA DIGIT SIX", "CHAKMA DIGIT SEVEN", "CHAKMA DIGIT EIGHT", "CHAKMA DIGIT NINE", "CHAKMA SECTION MARK", "CHAKMA DANDA", "CHAKMA DOUBLE DANDA", "CHAKMA QUESTION MARK", "CHAKMA LETTER LHAA", "CHAKMA VOWEL SIGN AA", "CHAKMA VOWEL SIGN EI", "MAHAJANI LETTER A", "MAHAJANI LETTER I", "MAHAJANI LETTER U", "MAHAJANI LETTER E", "MAHAJANI LETTER O", "MAHAJANI LETTER KA", "MAHAJANI LETTER KHA", "MAHAJANI LETTER GA", "MAHAJANI LETTER GHA", "MAHAJANI LETTER CA", "MAHAJANI LETTER CHA", "MAHAJANI LETTER JA", "MAHAJANI LETTER JHA", "MAHAJANI LETTER NYA", "MAHAJANI LETTER TTA", "MAHAJANI LETTER TTHA", "MAHAJANI LETTER DDA", "MAHAJANI LETTER DDHA", "MAHAJANI LETTER NNA", "MAHAJANI LETTER TA", "MAHAJANI LETTER THA", "MAHAJANI LETTER DA", "MAHAJANI LETTER DHA", "MAHAJANI LETTER NA", "MAHAJANI LETTER PA", "MAHAJANI LETTER PHA", "MAHAJANI LETTER BA", "MAHAJANI LETTER BHA", "MAHAJANI LETTER MA", "MAHAJANI LETTER RA", "MAHAJANI LETTER LA", "MAHAJANI LETTER VA", "MAHAJANI LETTER SA", "MAHAJANI LETTER HA", "MAHAJANI LETTER RRA", "MAHAJANI SIGN NUKTA", "MAHAJANI ABBREVIATION SIGN", "MAHAJANI SECTION MARK", "MAHAJANI LIGATURE SHRI", "SHARADA SIGN CANDRABINDU", "SHARADA SIGN ANUSVARA", "SHARADA SIGN VISARGA", "SHARADA LETTER A", "SHARADA LETTER AA", "SHARADA LETTER I", "SHARADA LETTER II", "SHARADA LETTER U", "SHARADA LETTER UU", "SHARADA LETTER VOCALIC R", "SHARADA LETTER VOCALIC RR", "SHARADA LETTER VOCALIC L", "SHARADA LETTER VOCALIC LL", "SHARADA LETTER E", "SHARADA LETTER AI", "SHARADA LETTER O", "SHARADA LETTER AU", "SHARADA LETTER KA", "SHARADA LETTER KHA", "SHARADA LETTER GA", "SHARADA LETTER GHA", "SHARADA LETTER NGA", "SHARADA LETTER CA", "SHARADA LETTER CHA", "SHARADA LETTER JA", "SHARADA LETTER JHA", "SHARADA LETTER NYA", "SHARADA LETTER TTA", "SHARADA LETTER TTHA", "SHARADA LETTER DDA", "SHARADA LETTER DDHA", "SHARADA LETTER NNA", "SHARADA LETTER TA", "SHARADA LETTER THA", "SHARADA LETTER DA", "SHARADA LETTER DHA", "SHARADA LETTER NA", "SHARADA LETTER PA", "SHARADA LETTER PHA", "SHARADA LETTER BA", "SHARADA LETTER BHA", "SHARADA LETTER MA", "SHARADA LETTER YA", "SHARADA LETTER RA", "SHARADA LETTER LA", "SHARADA LETTER LLA", "SHARADA LETTER VA", "SHARADA LETTER SHA", "SHARADA LETTER SSA", "SHARADA LETTER SA", "SHARADA LETTER HA", "SHARADA VOWEL SIGN AA", "SHARADA VOWEL SIGN I", "SHARADA VOWEL SIGN II", "SHARADA VOWEL SIGN U", "SHARADA VOWEL SIGN UU", "SHARADA VOWEL SIGN VOCALIC R", "SHARADA VOWEL SIGN VOCALIC RR", "SHARADA VOWEL SIGN VOCALIC L", "SHARADA VOWEL SIGN VOCALIC LL", "SHARADA VOWEL SIGN E", "SHARADA VOWEL SIGN AI", "SHARADA VOWEL SIGN O", "SHARADA VOWEL SIGN AU", "SHARADA SIGN VIRAMA", "SHARADA SIGN AVAGRAHA", "SHARADA SIGN JIHVAMULIYA", "SHARADA SIGN UPADHMANIYA", "SHARADA OM", "SHARADA DANDA", "SHARADA DOUBLE DANDA", "SHARADA ABBREVIATION SIGN", "SHARADA SEPARATOR", "SHARADA SANDHI MARK", "SHARADA SIGN NUKTA", "SHARADA VOWEL MODIFIER MARK", "SHARADA EXTRA SHORT VOWEL MARK", "SHARADA SUTRA MARK", "SHARADA DIGIT ZERO", "SHARADA DIGIT ONE", "SHARADA DIGIT TWO", "SHARADA DIGIT THREE", "SHARADA DIGIT FOUR", "SHARADA DIGIT FIVE", "SHARADA DIGIT SIX", "SHARADA DIGIT SEVEN", "SHARADA DIGIT EIGHT", "SHARADA DIGIT NINE", "SHARADA EKAM", "SHARADA SIGN SIDDHAM", "SHARADA HEADSTROKE", "SHARADA CONTINUATION SIGN", "SHARADA SECTION MARK-1", "SHARADA SECTION MARK-2", "SINHALA ARCHAIC DIGIT ONE", "SINHALA ARCHAIC DIGIT TWO", "SINHALA ARCHAIC DIGIT THREE", "SINHALA ARCHAIC DIGIT FOUR", "SINHALA ARCHAIC DIGIT FIVE", "SINHALA ARCHAIC DIGIT SIX", "SINHALA ARCHAIC DIGIT SEVEN", "SINHALA ARCHAIC DIGIT EIGHT", "SINHALA ARCHAIC DIGIT NINE", "SINHALA ARCHAIC NUMBER TEN", "SINHALA ARCHAIC NUMBER TWENTY", "SINHALA ARCHAIC NUMBER THIRTY", "SINHALA ARCHAIC NUMBER FORTY", "SINHALA ARCHAIC NUMBER FIFTY", "SINHALA ARCHAIC NUMBER SIXTY", "SINHALA ARCHAIC NUMBER SEVENTY", "SINHALA ARCHAIC NUMBER EIGHTY", "SINHALA ARCHAIC NUMBER NINETY", "SINHALA ARCHAIC NUMBER ONE HUNDRED", "SINHALA ARCHAIC NUMBER ONE THOUSAND", "KHOJKI LETTER A", "KHOJKI LETTER AA", "KHOJKI LETTER I", "KHOJKI LETTER U", "KHOJKI LETTER E", "KHOJKI LETTER AI", "KHOJKI LETTER O", "KHOJKI LETTER AU", "KHOJKI LETTER KA", "KHOJKI LETTER KHA", "KHOJKI LETTER GA", "KHOJKI LETTER GGA", "KHOJKI LETTER GHA", "KHOJKI LETTER NGA", "KHOJKI LETTER CA", "KHOJKI LETTER CHA", "KHOJKI LETTER JA", "KHOJKI LETTER JJA", "KHOJKI LETTER NYA", "KHOJKI LETTER TTA", "KHOJKI LETTER TTHA", "KHOJKI LETTER DDA", "KHOJKI LETTER DDHA", "KHOJKI LETTER NNA", "KHOJKI LETTER TA", "KHOJKI LETTER THA", "KHOJKI LETTER DA", "KHOJKI LETTER DDDA", "KHOJKI LETTER DHA", "KHOJKI LETTER NA", "KHOJKI LETTER PA", "KHOJKI LETTER PHA", "KHOJKI LETTER BA", "KHOJKI LETTER BBA", "KHOJKI LETTER BHA", "KHOJKI LETTER MA", "KHOJKI LETTER YA", "KHOJKI LETTER RA", "KHOJKI LETTER LA", "KHOJKI LETTER VA", "KHOJKI LETTER SA", "KHOJKI LETTER HA", "KHOJKI LETTER LLA", "KHOJKI VOWEL SIGN AA", "KHOJKI VOWEL SIGN I", "KHOJKI VOWEL SIGN II", "KHOJKI VOWEL SIGN U", "KHOJKI VOWEL SIGN E", "KHOJKI VOWEL SIGN AI", "KHOJKI VOWEL SIGN O", "KHOJKI VOWEL SIGN AU", "KHOJKI SIGN ANUSVARA", "KHOJKI SIGN VIRAMA", "KHOJKI SIGN NUKTA", "KHOJKI SIGN SHADDA", "KHOJKI DANDA", "KHOJKI DOUBLE DANDA", "KHOJKI WORD SEPARATOR", "KHOJKI SECTION MARK", "KHOJKI DOUBLE SECTION MARK", "KHOJKI ABBREVIATION SIGN", "KHOJKI SIGN SUKUN", "MULTANI LETTER A", "MULTANI LETTER I", "MULTANI LETTER U", "MULTANI LETTER E", "MULTANI LETTER KA", "MULTANI LETTER KHA", "MULTANI LETTER GA", "MULTANI LETTER GHA", "MULTANI LETTER CA", "MULTANI LETTER CHA", "MULTANI LETTER JA", "MULTANI LETTER JJA", "MULTANI LETTER NYA", "MULTANI LETTER TTA", "MULTANI LETTER TTHA", "MULTANI LETTER DDA", "MULTANI LETTER DDDA", "MULTANI LETTER DDHA", "MULTANI LETTER NNA", "MULTANI LETTER TA", "MULTANI LETTER THA", "MULTANI LETTER DA", "MULTANI LETTER DHA", "MULTANI LETTER NA", "MULTANI LETTER PA", "MULTANI LETTER PHA", "MULTANI LETTER BA", "MULTANI LETTER BHA", "MULTANI LETTER MA", "MULTANI LETTER YA", "MULTANI LETTER RA", "MULTANI LETTER LA", "MULTANI LETTER VA", "MULTANI LETTER SA", "MULTANI LETTER HA", "MULTANI LETTER RRA", "MULTANI LETTER RHA", "MULTANI SECTION MARK", "KHUDAWADI LETTER A", "KHUDAWADI LETTER AA", "KHUDAWADI LETTER I", "KHUDAWADI LETTER II", "KHUDAWADI LETTER U", "KHUDAWADI LETTER UU", "KHUDAWADI LETTER E", "KHUDAWADI LETTER AI", "KHUDAWADI LETTER O", "KHUDAWADI LETTER AU", "KHUDAWADI LETTER KA", "KHUDAWADI LETTER KHA", "KHUDAWADI LETTER GA", "KHUDAWADI LETTER GGA", "KHUDAWADI LETTER GHA", "KHUDAWADI LETTER NGA", "KHUDAWADI LETTER CA", "KHUDAWADI LETTER CHA", "KHUDAWADI LETTER JA", "KHUDAWADI LETTER JJA", "KHUDAWADI LETTER JHA", "KHUDAWADI LETTER NYA", "KHUDAWADI LETTER TTA", "KHUDAWADI LETTER TTHA", "KHUDAWADI LETTER DDA", "KHUDAWADI LETTER DDDA", "KHUDAWADI LETTER RRA", "KHUDAWADI LETTER DDHA", "KHUDAWADI LETTER NNA", "KHUDAWADI LETTER TA", "KHUDAWADI LETTER THA", "KHUDAWADI LETTER DA", "KHUDAWADI LETTER DHA", "KHUDAWADI LETTER NA", "KHUDAWADI LETTER PA", "KHUDAWADI LETTER PHA", "KHUDAWADI LETTER BA", "KHUDAWADI LETTER BBA", "KHUDAWADI LETTER BHA", "KHUDAWADI LETTER MA", "KHUDAWADI LETTER YA", "KHUDAWADI LETTER RA", "KHUDAWADI LETTER LA", "KHUDAWADI LETTER VA", "KHUDAWADI LETTER SHA", "KHUDAWADI LETTER SA", "KHUDAWADI LETTER HA", "KHUDAWADI SIGN ANUSVARA", "KHUDAWADI VOWEL SIGN AA", "KHUDAWADI VOWEL SIGN I", "KHUDAWADI VOWEL SIGN II", "KHUDAWADI VOWEL SIGN U", "KHUDAWADI VOWEL SIGN UU", "KHUDAWADI VOWEL SIGN E", "KHUDAWADI VOWEL SIGN AI", "KHUDAWADI VOWEL SIGN O", "KHUDAWADI VOWEL SIGN AU", "KHUDAWADI SIGN NUKTA", "KHUDAWADI SIGN VIRAMA", "KHUDAWADI DIGIT ZERO", "KHUDAWADI DIGIT ONE", "KHUDAWADI DIGIT TWO", "KHUDAWADI DIGIT THREE", "KHUDAWADI DIGIT FOUR", "KHUDAWADI DIGIT FIVE", "KHUDAWADI DIGIT SIX", "KHUDAWADI DIGIT SEVEN", "KHUDAWADI DIGIT EIGHT", "KHUDAWADI DIGIT NINE", "GRANTHA SIGN COMBINING ANUSVARA ABOVE", "GRANTHA SIGN CANDRABINDU", "GRANTHA SIGN ANUSVARA", "GRANTHA SIGN VISARGA", "GRANTHA LETTER A", "GRANTHA LETTER AA", "GRANTHA LETTER I", "GRANTHA LETTER II", "GRANTHA LETTER U", "GRANTHA LETTER UU", "GRANTHA LETTER VOCALIC R", "GRANTHA LETTER VOCALIC L", "GRANTHA LETTER EE", "GRANTHA LETTER AI", "GRANTHA LETTER OO", "GRANTHA LETTER AU", "GRANTHA LETTER KA", "GRANTHA LETTER KHA", "GRANTHA LETTER GA", "GRANTHA LETTER GHA", "GRANTHA LETTER NGA", "GRANTHA LETTER CA", "GRANTHA LETTER CHA", "GRANTHA LETTER JA", "GRANTHA LETTER JHA", "GRANTHA LETTER NYA", "GRANTHA LETTER TTA", "GRANTHA LETTER TTHA", "GRANTHA LETTER DDA", "GRANTHA LETTER DDHA", "GRANTHA LETTER NNA", "GRANTHA LETTER TA", "GRANTHA LETTER THA", "GRANTHA LETTER DA", "GRANTHA LETTER DHA", "GRANTHA LETTER NA", "GRANTHA LETTER PA", "GRANTHA LETTER PHA", "GRANTHA LETTER BA", "GRANTHA LETTER BHA", "GRANTHA LETTER MA", "GRANTHA LETTER YA", "GRANTHA LETTER RA", "GRANTHA LETTER LA", "GRANTHA LETTER LLA", "GRANTHA LETTER VA", "GRANTHA LETTER SHA", "GRANTHA LETTER SSA", "GRANTHA LETTER SA", "GRANTHA LETTER HA", "COMBINING BINDU BELOW", "GRANTHA SIGN NUKTA", "GRANTHA SIGN AVAGRAHA", "GRANTHA VOWEL SIGN AA", "GRANTHA VOWEL SIGN I", "GRANTHA VOWEL SIGN II", "GRANTHA VOWEL SIGN U", "GRANTHA VOWEL SIGN UU", "GRANTHA VOWEL SIGN VOCALIC R", "GRANTHA VOWEL SIGN VOCALIC RR", "GRANTHA VOWEL SIGN EE", "GRANTHA VOWEL SIGN AI", "GRANTHA VOWEL SIGN OO", "GRANTHA VOWEL SIGN AU", "GRANTHA SIGN VIRAMA", "GRANTHA OM", "GRANTHA AU LENGTH MARK", "GRANTHA SIGN PLUTA", "GRANTHA LETTER VEDIC ANUSVARA", "GRANTHA LETTER VEDIC DOUBLE ANUSVARA", "GRANTHA LETTER VOCALIC RR", "GRANTHA LETTER VOCALIC LL", "GRANTHA VOWEL SIGN VOCALIC L", "GRANTHA VOWEL SIGN VOCALIC LL", "COMBINING GRANTHA DIGIT ZERO", "COMBINING GRANTHA DIGIT ONE", "COMBINING GRANTHA DIGIT TWO", "COMBINING GRANTHA DIGIT THREE", "COMBINING GRANTHA DIGIT FOUR", "COMBINING GRANTHA DIGIT FIVE", "COMBINING GRANTHA DIGIT SIX", "COMBINING GRANTHA LETTER A", "COMBINING GRANTHA LETTER KA", "COMBINING GRANTHA LETTER NA", "COMBINING GRANTHA LETTER VI", "COMBINING GRANTHA LETTER PA", "NEWA LETTER A", "NEWA LETTER AA", "NEWA LETTER I", "NEWA LETTER II", "NEWA LETTER U", "NEWA LETTER UU", "NEWA LETTER VOCALIC R", "NEWA LETTER VOCALIC RR", "NEWA LETTER VOCALIC L", "NEWA LETTER VOCALIC LL", "NEWA LETTER E", "NEWA LETTER AI", "NEWA LETTER O", "NEWA LETTER AU", "NEWA LETTER KA", "NEWA LETTER KHA", "NEWA LETTER GA", "NEWA LETTER GHA", "NEWA LETTER NGA", "NEWA LETTER NGHA", "NEWA LETTER CA", "NEWA LETTER CHA", "NEWA LETTER JA", "NEWA LETTER JHA", "NEWA LETTER NYA", "NEWA LETTER NYHA", "NEWA LETTER TTA", "NEWA LETTER TTHA", "NEWA LETTER DDA", "NEWA LETTER DDHA", "NEWA LETTER NNA", "NEWA LETTER TA", "NEWA LETTER THA", "NEWA LETTER DA", "NEWA LETTER DHA", "NEWA LETTER NA", "NEWA LETTER NHA", "NEWA LETTER PA", "NEWA LETTER PHA", "NEWA LETTER BA", "NEWA LETTER BHA", "NEWA LETTER MA", "NEWA LETTER MHA", "NEWA LETTER YA", "NEWA LETTER RA", "NEWA LETTER RHA", "NEWA LETTER LA", "NEWA LETTER LHA", "NEWA LETTER WA", "NEWA LETTER SHA", "NEWA LETTER SSA", "NEWA LETTER SA", "NEWA LETTER HA", "NEWA VOWEL SIGN AA", "NEWA VOWEL SIGN I", "NEWA VOWEL SIGN II", "NEWA VOWEL SIGN U", "NEWA VOWEL SIGN UU", "NEWA VOWEL SIGN VOCALIC R", "NEWA VOWEL SIGN VOCALIC RR", "NEWA VOWEL SIGN VOCALIC L", "NEWA VOWEL SIGN VOCALIC LL", "NEWA VOWEL SIGN E", "NEWA VOWEL SIGN AI", "NEWA VOWEL SIGN O", "NEWA VOWEL SIGN AU", "NEWA SIGN VIRAMA", "NEWA SIGN CANDRABINDU", "NEWA SIGN ANUSVARA", "NEWA SIGN VISARGA", "NEWA SIGN NUKTA", "NEWA SIGN AVAGRAHA", "NEWA SIGN FINAL ANUSVARA", "NEWA OM", "NEWA SIDDHI", "NEWA DANDA", "NEWA DOUBLE DANDA", "NEWA COMMA", "NEWA GAP FILLER", "NEWA ABBREVIATION SIGN", "NEWA DIGIT ZERO", "NEWA DIGIT ONE", "NEWA DIGIT TWO", "NEWA DIGIT THREE", "NEWA DIGIT FOUR", "NEWA DIGIT FIVE", "NEWA DIGIT SIX", "NEWA DIGIT SEVEN", "NEWA DIGIT EIGHT", "NEWA DIGIT NINE", "NEWA PLACEHOLDER MARK", "NEWA INSERTION SIGN", "NEWA SANDHI MARK", "NEWA LETTER VEDIC ANUSVARA", "TIRHUTA ANJI", "TIRHUTA LETTER A", "TIRHUTA LETTER AA", "TIRHUTA LETTER I", "TIRHUTA LETTER II", "TIRHUTA LETTER U", "TIRHUTA LETTER UU", "TIRHUTA LETTER VOCALIC R", "TIRHUTA LETTER VOCALIC RR", "TIRHUTA LETTER VOCALIC L", "TIRHUTA LETTER VOCALIC LL", "TIRHUTA LETTER E", "TIRHUTA LETTER AI", "TIRHUTA LETTER O", "TIRHUTA LETTER AU", "TIRHUTA LETTER KA", "TIRHUTA LETTER KHA", "TIRHUTA LETTER GA", "TIRHUTA LETTER GHA", "TIRHUTA LETTER NGA", "TIRHUTA LETTER CA", "TIRHUTA LETTER CHA", "TIRHUTA LETTER JA", "TIRHUTA LETTER JHA", "TIRHUTA LETTER NYA", "TIRHUTA LETTER TTA", "TIRHUTA LETTER TTHA", "TIRHUTA LETTER DDA", "TIRHUTA LETTER DDHA", "TIRHUTA LETTER NNA", "TIRHUTA LETTER TA", "TIRHUTA LETTER THA", "TIRHUTA LETTER DA", "TIRHUTA LETTER DHA", "TIRHUTA LETTER NA", "TIRHUTA LETTER PA", "TIRHUTA LETTER PHA", "TIRHUTA LETTER BA", "TIRHUTA LETTER BHA", "TIRHUTA LETTER MA", "TIRHUTA LETTER YA", "TIRHUTA LETTER RA", "TIRHUTA LETTER LA", "TIRHUTA LETTER VA", "TIRHUTA LETTER SHA", "TIRHUTA LETTER SSA", "TIRHUTA LETTER SA", "TIRHUTA LETTER HA", "TIRHUTA VOWEL SIGN AA", "TIRHUTA VOWEL SIGN I", "TIRHUTA VOWEL SIGN II", "TIRHUTA VOWEL SIGN U", "TIRHUTA VOWEL SIGN UU", "TIRHUTA VOWEL SIGN VOCALIC R", "TIRHUTA VOWEL SIGN VOCALIC RR", "TIRHUTA VOWEL SIGN VOCALIC L", "TIRHUTA VOWEL SIGN VOCALIC LL", "TIRHUTA VOWEL SIGN E", "TIRHUTA VOWEL SIGN SHORT E", "TIRHUTA VOWEL SIGN AI", "TIRHUTA VOWEL SIGN O", "TIRHUTA VOWEL SIGN SHORT O", "TIRHUTA VOWEL SIGN AU", "TIRHUTA SIGN CANDRABINDU", "TIRHUTA SIGN ANUSVARA", "TIRHUTA SIGN VISARGA", "TIRHUTA SIGN VIRAMA", "TIRHUTA SIGN NUKTA", "TIRHUTA SIGN AVAGRAHA", "TIRHUTA GVANG", "TIRHUTA ABBREVIATION SIGN", "TIRHUTA OM", "TIRHUTA DIGIT ZERO", "TIRHUTA DIGIT ONE", "TIRHUTA DIGIT TWO", "TIRHUTA DIGIT THREE", "TIRHUTA DIGIT FOUR", "TIRHUTA DIGIT FIVE", "TIRHUTA DIGIT SIX", "TIRHUTA DIGIT SEVEN", "TIRHUTA DIGIT EIGHT", "TIRHUTA DIGIT NINE", "SIDDHAM LETTER A", "SIDDHAM LETTER AA", "SIDDHAM LETTER I", "SIDDHAM LETTER II", "SIDDHAM LETTER U", "SIDDHAM LETTER UU", "SIDDHAM LETTER VOCALIC R", "SIDDHAM LETTER VOCALIC RR", "SIDDHAM LETTER VOCALIC L", "SIDDHAM LETTER VOCALIC LL", "SIDDHAM LETTER E", "SIDDHAM LETTER AI", "SIDDHAM LETTER O", "SIDDHAM LETTER AU", "SIDDHAM LETTER KA", "SIDDHAM LETTER KHA", "SIDDHAM LETTER GA", "SIDDHAM LETTER GHA", "SIDDHAM LETTER NGA", "SIDDHAM LETTER CA", "SIDDHAM LETTER CHA", "SIDDHAM LETTER JA", "SIDDHAM LETTER JHA", "SIDDHAM LETTER NYA", "SIDDHAM LETTER TTA", "SIDDHAM LETTER TTHA", "SIDDHAM LETTER DDA", "SIDDHAM LETTER DDHA", "SIDDHAM LETTER NNA", "SIDDHAM LETTER TA", "SIDDHAM LETTER THA", "SIDDHAM LETTER DA", "SIDDHAM LETTER DHA", "SIDDHAM LETTER NA", "SIDDHAM LETTER PA", "SIDDHAM LETTER PHA", "SIDDHAM LETTER BA", "SIDDHAM LETTER BHA", "SIDDHAM LETTER MA", "SIDDHAM LETTER YA", "SIDDHAM LETTER RA", "SIDDHAM LETTER LA", "SIDDHAM LETTER VA", "SIDDHAM LETTER SHA", "SIDDHAM LETTER SSA", "SIDDHAM LETTER SA", "SIDDHAM LETTER HA", "SIDDHAM VOWEL SIGN AA", "SIDDHAM VOWEL SIGN I", "SIDDHAM VOWEL SIGN II", "SIDDHAM VOWEL SIGN U", "SIDDHAM VOWEL SIGN UU", "SIDDHAM VOWEL SIGN VOCALIC R", "SIDDHAM VOWEL SIGN VOCALIC RR", "SIDDHAM VOWEL SIGN E", "SIDDHAM VOWEL SIGN AI", "SIDDHAM VOWEL SIGN O", "SIDDHAM VOWEL SIGN AU", "SIDDHAM SIGN CANDRABINDU", "SIDDHAM SIGN ANUSVARA", "SIDDHAM SIGN VISARGA", "SIDDHAM SIGN VIRAMA", "SIDDHAM SIGN NUKTA", "SIDDHAM SIGN SIDDHAM", "SIDDHAM DANDA", "SIDDHAM DOUBLE DANDA", "SIDDHAM SEPARATOR DOT", "SIDDHAM SEPARATOR BAR", "SIDDHAM REPETITION MARK-1", "SIDDHAM REPETITION MARK-2", "SIDDHAM REPETITION MARK-3", "SIDDHAM END OF TEXT MARK", "SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS", "SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS", "SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS", "SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS", "SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS", "SIDDHAM SECTION MARK DOUBLE RING", "SIDDHAM SECTION MARK DOUBLE RING WITH RAYS", "SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS", "SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS", "SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS", "SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS", "SIDDHAM SECTION MARK WITH CIRCLES AND RAYS", "SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES", "SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES", "SIDDHAM LETTER THREE-CIRCLE ALTERNATE I", "SIDDHAM LETTER TWO-CIRCLE ALTERNATE I", "SIDDHAM LETTER TWO-CIRCLE ALTERNATE II", "SIDDHAM LETTER ALTERNATE U", "SIDDHAM VOWEL SIGN ALTERNATE U", "SIDDHAM VOWEL SIGN ALTERNATE UU", "MODI LETTER A", "MODI LETTER AA", "MODI LETTER I", "MODI LETTER II", "MODI LETTER U", "MODI LETTER UU", "MODI LETTER VOCALIC R", "MODI LETTER VOCALIC RR", "MODI LETTER VOCALIC L", "MODI LETTER VOCALIC LL", "MODI LETTER E", "MODI LETTER AI", "MODI LETTER O", "MODI LETTER AU", "MODI LETTER KA", "MODI LETTER KHA", "MODI LETTER GA", "MODI LETTER GHA", "MODI LETTER NGA", "MODI LETTER CA", "MODI LETTER CHA", "MODI LETTER JA", "MODI LETTER JHA", "MODI LETTER NYA", "MODI LETTER TTA", "MODI LETTER TTHA", "MODI LETTER DDA", "MODI LETTER DDHA", "MODI LETTER NNA", "MODI LETTER TA", "MODI LETTER THA", "MODI LETTER DA", "MODI LETTER DHA", "MODI LETTER NA", "MODI LETTER PA", "MODI LETTER PHA", "MODI LETTER BA", "MODI LETTER BHA", "MODI LETTER MA", "MODI LETTER YA", "MODI LETTER RA", "MODI LETTER LA", "MODI LETTER VA", "MODI LETTER SHA", "MODI LETTER SSA", "MODI LETTER SA", "MODI LETTER HA", "MODI LETTER LLA", "MODI VOWEL SIGN AA", "MODI VOWEL SIGN I", "MODI VOWEL SIGN II", "MODI VOWEL SIGN U", "MODI VOWEL SIGN UU", "MODI VOWEL SIGN VOCALIC R", "MODI VOWEL SIGN VOCALIC RR", "MODI VOWEL SIGN VOCALIC L", "MODI VOWEL SIGN VOCALIC LL", "MODI VOWEL SIGN E", "MODI VOWEL SIGN AI", "MODI VOWEL SIGN O", "MODI VOWEL SIGN AU", "MODI SIGN ANUSVARA", "MODI SIGN VISARGA", "MODI SIGN VIRAMA", "MODI SIGN ARDHACANDRA", "MODI DANDA", "MODI DOUBLE DANDA", "MODI ABBREVIATION SIGN", "MODI SIGN HUVA", "MODI DIGIT ZERO", "MODI DIGIT ONE", "MODI DIGIT TWO", "MODI DIGIT THREE", "MODI DIGIT FOUR", "MODI DIGIT FIVE", "MODI DIGIT SIX", "MODI DIGIT SEVEN", "MODI DIGIT EIGHT", "MODI DIGIT NINE", "MONGOLIAN BIRGA WITH ORNAMENT", "MONGOLIAN ROTATED BIRGA", "MONGOLIAN DOUBLE BIRGA WITH ORNAMENT", "MONGOLIAN TRIPLE BIRGA WITH ORNAMENT", "MONGOLIAN BIRGA WITH DOUBLE ORNAMENT", "MONGOLIAN ROTATED BIRGA WITH ORNAMENT", "MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT", "MONGOLIAN INVERTED BIRGA", "MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT", "MONGOLIAN SWIRL BIRGA", "MONGOLIAN SWIRL BIRGA WITH ORNAMENT", "MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT", "MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT", "TAKRI LETTER A", "TAKRI LETTER AA", "TAKRI LETTER I", "TAKRI LETTER II", "TAKRI LETTER U", "TAKRI LETTER UU", "TAKRI LETTER E", "TAKRI LETTER AI", "TAKRI LETTER O", "TAKRI LETTER AU", "TAKRI LETTER KA", "TAKRI LETTER KHA", "TAKRI LETTER GA", "TAKRI LETTER GHA", "TAKRI LETTER NGA", "TAKRI LETTER CA", "TAKRI LETTER CHA", "TAKRI LETTER JA", "TAKRI LETTER JHA", "TAKRI LETTER NYA", "TAKRI LETTER TTA", "TAKRI LETTER TTHA", "TAKRI LETTER DDA", "TAKRI LETTER DDHA", "TAKRI LETTER NNA", "TAKRI LETTER TA", "TAKRI LETTER THA", "TAKRI LETTER DA", "TAKRI LETTER DHA", "TAKRI LETTER NA", "TAKRI LETTER PA", "TAKRI LETTER PHA", "TAKRI LETTER BA", "TAKRI LETTER BHA", "TAKRI LETTER MA", "TAKRI LETTER YA", "TAKRI LETTER RA", "TAKRI LETTER LA", "TAKRI LETTER VA", "TAKRI LETTER SHA", "TAKRI LETTER SA", "TAKRI LETTER HA", "TAKRI LETTER RRA", "TAKRI SIGN ANUSVARA", "TAKRI SIGN VISARGA", "TAKRI VOWEL SIGN AA", "TAKRI VOWEL SIGN I", "TAKRI VOWEL SIGN II", "TAKRI VOWEL SIGN U", "TAKRI VOWEL SIGN UU", "TAKRI VOWEL SIGN E", "TAKRI VOWEL SIGN AI", "TAKRI VOWEL SIGN O", "TAKRI VOWEL SIGN AU", "TAKRI SIGN VIRAMA", "TAKRI SIGN NUKTA", "TAKRI LETTER ARCHAIC KHA", "TAKRI DIGIT ZERO", "TAKRI DIGIT ONE", "TAKRI DIGIT TWO", "TAKRI DIGIT THREE", "TAKRI DIGIT FOUR", "TAKRI DIGIT FIVE", "TAKRI DIGIT SIX", "TAKRI DIGIT SEVEN", "TAKRI DIGIT EIGHT", "TAKRI DIGIT NINE", "AHOM LETTER KA", "AHOM LETTER KHA", "AHOM LETTER NGA", "AHOM LETTER NA", "AHOM LETTER TA", "AHOM LETTER ALTERNATE TA", "AHOM LETTER PA", "AHOM LETTER PHA", "AHOM LETTER BA", "AHOM LETTER MA", "AHOM LETTER JA", "AHOM LETTER CHA", "AHOM LETTER THA", "AHOM LETTER RA", "AHOM LETTER LA", "AHOM LETTER SA", "AHOM LETTER NYA", "AHOM LETTER HA", "AHOM LETTER A", "AHOM LETTER DA", "AHOM LETTER DHA", "AHOM LETTER GA", "AHOM LETTER ALTERNATE GA", "AHOM LETTER GHA", "AHOM LETTER BHA", "AHOM LETTER JHA", "AHOM LETTER ALTERNATE BA", "AHOM CONSONANT SIGN MEDIAL LA", "AHOM CONSONANT SIGN MEDIAL RA", "AHOM CONSONANT SIGN MEDIAL LIGATING RA", "AHOM VOWEL SIGN A", "AHOM VOWEL SIGN AA", "AHOM VOWEL SIGN I", "AHOM VOWEL SIGN II", "AHOM VOWEL SIGN U", "AHOM VOWEL SIGN UU", "AHOM VOWEL SIGN E", "AHOM VOWEL SIGN AW", "AHOM VOWEL SIGN O", "AHOM VOWEL SIGN AI", "AHOM VOWEL SIGN AM", "AHOM SIGN KILLER", "AHOM DIGIT ZERO", "AHOM DIGIT ONE", "AHOM DIGIT TWO", "AHOM DIGIT THREE", "AHOM DIGIT FOUR", "AHOM DIGIT FIVE", "AHOM DIGIT SIX", "AHOM DIGIT SEVEN", "AHOM DIGIT EIGHT", "AHOM DIGIT NINE", "AHOM NUMBER TEN", "AHOM NUMBER TWENTY", "AHOM SIGN SMALL SECTION", "AHOM SIGN SECTION", "AHOM SIGN RULAI", "AHOM SYMBOL VI", "DOGRA LETTER A", "DOGRA LETTER AA", "DOGRA LETTER I", "DOGRA LETTER II", "DOGRA LETTER U", "DOGRA LETTER UU", "DOGRA LETTER E", "DOGRA LETTER AI", "DOGRA LETTER O", "DOGRA LETTER AU", "DOGRA LETTER KA", "DOGRA LETTER KHA", "DOGRA LETTER GA", "DOGRA LETTER GHA", "DOGRA LETTER NGA", "DOGRA LETTER CA", "DOGRA LETTER CHA", "DOGRA LETTER JA", "DOGRA LETTER JHA", "DOGRA LETTER NYA", "DOGRA LETTER TTA", "DOGRA LETTER TTHA", "DOGRA LETTER DDA", "DOGRA LETTER DDHA", "DOGRA LETTER NNA", "DOGRA LETTER TA", "DOGRA LETTER THA", "DOGRA LETTER DA", "DOGRA LETTER DHA", "DOGRA LETTER NA", "DOGRA LETTER PA", "DOGRA LETTER PHA", "DOGRA LETTER BA", "DOGRA LETTER BHA", "DOGRA LETTER MA", "DOGRA LETTER YA", "DOGRA LETTER RA", "DOGRA LETTER LA", "DOGRA LETTER VA", "DOGRA LETTER SHA", "DOGRA LETTER SSA", "DOGRA LETTER SA", "DOGRA LETTER HA", "DOGRA LETTER RRA", "DOGRA VOWEL SIGN AA", "DOGRA VOWEL SIGN I", "DOGRA VOWEL SIGN II", "DOGRA VOWEL SIGN U", "DOGRA VOWEL SIGN UU", "DOGRA VOWEL SIGN VOCALIC R", "DOGRA VOWEL SIGN VOCALIC RR", "DOGRA VOWEL SIGN E", "DOGRA VOWEL SIGN AI", "DOGRA VOWEL SIGN O", "DOGRA VOWEL SIGN AU", "DOGRA SIGN ANUSVARA", "DOGRA SIGN VISARGA", "DOGRA SIGN VIRAMA", "DOGRA SIGN NUKTA", "DOGRA ABBREVIATION SIGN", "WARANG CITI CAPITAL LETTER NGAA", "WARANG CITI CAPITAL LETTER A", "WARANG CITI CAPITAL LETTER WI", "WARANG CITI CAPITAL LETTER YU", "WARANG CITI CAPITAL LETTER YA", "WARANG CITI CAPITAL LETTER YO", "WARANG CITI CAPITAL LETTER II", "WARANG CITI CAPITAL LETTER UU", "WARANG CITI CAPITAL LETTER E", "WARANG CITI CAPITAL LETTER O", "WARANG CITI CAPITAL LETTER ANG", "WARANG CITI CAPITAL LETTER GA", "WARANG CITI CAPITAL LETTER KO", "WARANG CITI CAPITAL LETTER ENY", "WARANG CITI CAPITAL LETTER YUJ", "WARANG CITI CAPITAL LETTER UC", "WARANG CITI CAPITAL LETTER ENN", "WARANG CITI CAPITAL LETTER ODD", "WARANG CITI CAPITAL LETTER TTE", "WARANG CITI CAPITAL LETTER NUNG", "WARANG CITI CAPITAL LETTER DA", "WARANG CITI CAPITAL LETTER AT", "WARANG CITI CAPITAL LETTER AM", "WARANG CITI CAPITAL LETTER BU", "WARANG CITI CAPITAL LETTER PU", "WARANG CITI CAPITAL LETTER HIYO", "WARANG CITI CAPITAL LETTER HOLO", "WARANG CITI CAPITAL LETTER HORR", "WARANG CITI CAPITAL LETTER HAR", "WARANG CITI CAPITAL LETTER SSUU", "WARANG CITI CAPITAL LETTER SII", "WARANG CITI CAPITAL LETTER VIYO", "WARANG CITI SMALL LETTER NGAA", "WARANG CITI SMALL LETTER A", "WARANG CITI SMALL LETTER WI", "WARANG CITI SMALL LETTER YU", "WARANG CITI SMALL LETTER YA", "WARANG CITI SMALL LETTER YO", "WARANG CITI SMALL LETTER II", "WARANG CITI SMALL LETTER UU", "WARANG CITI SMALL LETTER E", "WARANG CITI SMALL LETTER O", "WARANG CITI SMALL LETTER ANG", "WARANG CITI SMALL LETTER GA", "WARANG CITI SMALL LETTER KO", "WARANG CITI SMALL LETTER ENY", "WARANG CITI SMALL LETTER YUJ", "WARANG CITI SMALL LETTER UC", "WARANG CITI SMALL LETTER ENN", "WARANG CITI SMALL LETTER ODD", "WARANG CITI SMALL LETTER TTE", "WARANG CITI SMALL LETTER NUNG", "WARANG CITI SMALL LETTER DA", "WARANG CITI SMALL LETTER AT", "WARANG CITI SMALL LETTER AM", "WARANG CITI SMALL LETTER BU", "WARANG CITI SMALL LETTER PU", "WARANG CITI SMALL LETTER HIYO", "WARANG CITI SMALL LETTER HOLO", "WARANG CITI SMALL LETTER HORR", "WARANG CITI SMALL LETTER HAR", "WARANG CITI SMALL LETTER SSUU", "WARANG CITI SMALL LETTER SII", "WARANG CITI SMALL LETTER VIYO", "WARANG CITI DIGIT ZERO", "WARANG CITI DIGIT ONE", "WARANG CITI DIGIT TWO", "WARANG CITI DIGIT THREE", "WARANG CITI DIGIT FOUR", "WARANG CITI DIGIT FIVE", "WARANG CITI DIGIT SIX", "WARANG CITI DIGIT SEVEN", "WARANG CITI DIGIT EIGHT", "WARANG CITI DIGIT NINE", "WARANG CITI NUMBER TEN", "WARANG CITI NUMBER TWENTY", "WARANG CITI NUMBER THIRTY", "WARANG CITI NUMBER FORTY", "WARANG CITI NUMBER FIFTY", "WARANG CITI NUMBER SIXTY", "WARANG CITI NUMBER SEVENTY", "WARANG CITI NUMBER EIGHTY", "WARANG CITI NUMBER NINETY", "WARANG CITI OM", "NANDINAGARI LETTER A", "NANDINAGARI LETTER AA", "NANDINAGARI LETTER I", "NANDINAGARI LETTER II", "NANDINAGARI LETTER U", "NANDINAGARI LETTER UU", "NANDINAGARI LETTER VOCALIC R", "NANDINAGARI LETTER VOCALIC RR", "NANDINAGARI LETTER E", "NANDINAGARI LETTER AI", "NANDINAGARI LETTER O", "NANDINAGARI LETTER AU", "NANDINAGARI LETTER KA", "NANDINAGARI LETTER KHA", "NANDINAGARI LETTER GA", "NANDINAGARI LETTER GHA", "NANDINAGARI LETTER NGA", "NANDINAGARI LETTER CA", "NANDINAGARI LETTER CHA", "NANDINAGARI LETTER JA", "NANDINAGARI LETTER JHA", "NANDINAGARI LETTER NYA", "NANDINAGARI LETTER TTA", "NANDINAGARI LETTER TTHA", "NANDINAGARI LETTER DDA", "NANDINAGARI LETTER DDHA", "NANDINAGARI LETTER NNA", "NANDINAGARI LETTER TA", "NANDINAGARI LETTER THA", "NANDINAGARI LETTER DA", "NANDINAGARI LETTER DHA", "NANDINAGARI LETTER NA", "NANDINAGARI LETTER PA", "NANDINAGARI LETTER PHA", "NANDINAGARI LETTER BA", "NANDINAGARI LETTER BHA", "NANDINAGARI LETTER MA", "NANDINAGARI LETTER YA", "NANDINAGARI LETTER RA", "NANDINAGARI LETTER LA", "NANDINAGARI LETTER VA", "NANDINAGARI LETTER SHA", "NANDINAGARI LETTER SSA", "NANDINAGARI LETTER SA", "NANDINAGARI LETTER HA", "NANDINAGARI LETTER LLA", "NANDINAGARI LETTER RRA", "NANDINAGARI VOWEL SIGN AA", "NANDINAGARI VOWEL SIGN I", "NANDINAGARI VOWEL SIGN II", "NANDINAGARI VOWEL SIGN U", "NANDINAGARI VOWEL SIGN UU", "NANDINAGARI VOWEL SIGN VOCALIC R", "NANDINAGARI VOWEL SIGN VOCALIC RR", "NANDINAGARI VOWEL SIGN E", "NANDINAGARI VOWEL SIGN AI", "NANDINAGARI VOWEL SIGN O", "NANDINAGARI VOWEL SIGN AU", "NANDINAGARI SIGN ANUSVARA", "NANDINAGARI SIGN VISARGA", "NANDINAGARI SIGN VIRAMA", "NANDINAGARI SIGN AVAGRAHA", "NANDINAGARI SIGN SIDDHAM", "NANDINAGARI HEADSTROKE", "NANDINAGARI VOWEL SIGN PRISHTHAMATRA E", "ZANABAZAR SQUARE LETTER A", "ZANABAZAR SQUARE VOWEL SIGN I", "ZANABAZAR SQUARE VOWEL SIGN UE", "ZANABAZAR SQUARE VOWEL SIGN U", "ZANABAZAR SQUARE VOWEL SIGN E", "ZANABAZAR SQUARE VOWEL SIGN OE", "ZANABAZAR SQUARE VOWEL SIGN O", "ZANABAZAR SQUARE VOWEL SIGN AI", "ZANABAZAR SQUARE VOWEL SIGN AU", "ZANABAZAR SQUARE VOWEL SIGN REVERSED I", "ZANABAZAR SQUARE VOWEL LENGTH MARK", "ZANABAZAR SQUARE LETTER KA", "ZANABAZAR SQUARE LETTER KHA", "ZANABAZAR SQUARE LETTER GA", "ZANABAZAR SQUARE LETTER GHA", "ZANABAZAR SQUARE LETTER NGA", "ZANABAZAR SQUARE LETTER CA", "ZANABAZAR SQUARE LETTER CHA", "ZANABAZAR SQUARE LETTER JA", "ZANABAZAR SQUARE LETTER NYA", "ZANABAZAR SQUARE LETTER TTA", "ZANABAZAR SQUARE LETTER TTHA", "ZANABAZAR SQUARE LETTER DDA", "ZANABAZAR SQUARE LETTER DDHA", "ZANABAZAR SQUARE LETTER NNA", "ZANABAZAR SQUARE LETTER TA", "ZANABAZAR SQUARE LETTER THA", "ZANABAZAR SQUARE LETTER DA", "ZANABAZAR SQUARE LETTER DHA", "ZANABAZAR SQUARE LETTER NA", "ZANABAZAR SQUARE LETTER PA", "ZANABAZAR SQUARE LETTER PHA", "ZANABAZAR SQUARE LETTER BA", "ZANABAZAR SQUARE LETTER BHA", "ZANABAZAR SQUARE LETTER MA", "ZANABAZAR SQUARE LETTER TSA", "ZANABAZAR SQUARE LETTER TSHA", "ZANABAZAR SQUARE LETTER DZA", "ZANABAZAR SQUARE LETTER DZHA", "ZANABAZAR SQUARE LETTER ZHA", "ZANABAZAR SQUARE LETTER ZA", "ZANABAZAR SQUARE LETTER -A", "ZANABAZAR SQUARE LETTER YA", "ZANABAZAR SQUARE LETTER RA", "ZANABAZAR SQUARE LETTER LA", "ZANABAZAR SQUARE LETTER VA", "ZANABAZAR SQUARE LETTER SHA", "ZANABAZAR SQUARE LETTER SSA", "ZANABAZAR SQUARE LETTER SA", "ZANABAZAR SQUARE LETTER HA", "ZANABAZAR SQUARE LETTER KSSA", "ZANABAZAR SQUARE FINAL CONSONANT MARK", "ZANABAZAR SQUARE SIGN VIRAMA", "ZANABAZAR SQUARE SIGN CANDRABINDU", "ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT", "ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT", "ZANABAZAR SQUARE SIGN ANUSVARA", "ZANABAZAR SQUARE SIGN VISARGA", "ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA", "ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA", "ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA", "ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA", "ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA", "ZANABAZAR SQUARE INITIAL HEAD MARK", "ZANABAZAR SQUARE CLOSING HEAD MARK", "ZANABAZAR SQUARE MARK TSHEG", "ZANABAZAR SQUARE MARK SHAD", "ZANABAZAR SQUARE MARK DOUBLE SHAD", "ZANABAZAR SQUARE MARK LONG TSHEG", "ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK", "ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK", "ZANABAZAR SQUARE SUBJOINER", "SOYOMBO LETTER A", "SOYOMBO VOWEL SIGN I", "SOYOMBO VOWEL SIGN UE", "SOYOMBO VOWEL SIGN U", "SOYOMBO VOWEL SIGN E", "SOYOMBO VOWEL SIGN O", "SOYOMBO VOWEL SIGN OE", "SOYOMBO VOWEL SIGN AI", "SOYOMBO VOWEL SIGN AU", "SOYOMBO VOWEL SIGN VOCALIC R", "SOYOMBO VOWEL SIGN VOCALIC L", "SOYOMBO VOWEL LENGTH MARK", "SOYOMBO LETTER KA", "SOYOMBO LETTER KHA", "SOYOMBO LETTER GA", "SOYOMBO LETTER GHA", "SOYOMBO LETTER NGA", "SOYOMBO LETTER CA", "SOYOMBO LETTER CHA", "SOYOMBO LETTER JA", "SOYOMBO LETTER JHA", "SOYOMBO LETTER NYA", "SOYOMBO LETTER TTA", "SOYOMBO LETTER TTHA", "SOYOMBO LETTER DDA", "SOYOMBO LETTER DDHA", "SOYOMBO LETTER NNA", "SOYOMBO LETTER TA", "SOYOMBO LETTER THA", "SOYOMBO LETTER DA", "SOYOMBO LETTER DHA", "SOYOMBO LETTER NA", "SOYOMBO LETTER PA", "SOYOMBO LETTER PHA", "SOYOMBO LETTER BA", "SOYOMBO LETTER BHA", "SOYOMBO LETTER MA", "SOYOMBO LETTER TSA", "SOYOMBO LETTER TSHA", "SOYOMBO LETTER DZA", "SOYOMBO LETTER ZHA", "SOYOMBO LETTER ZA", "SOYOMBO LETTER -A", "SOYOMBO LETTER YA", "SOYOMBO LETTER RA", "SOYOMBO LETTER LA", "SOYOMBO LETTER VA", "SOYOMBO LETTER SHA", "SOYOMBO LETTER SSA", "SOYOMBO LETTER SA", "SOYOMBO LETTER HA", "SOYOMBO LETTER KSSA", "SOYOMBO SIGN JIHVAMULIYA", "SOYOMBO SIGN UPADHMANIYA", "SOYOMBO CLUSTER-INITIAL LETTER RA", "SOYOMBO CLUSTER-INITIAL LETTER LA", "SOYOMBO CLUSTER-INITIAL LETTER SHA", "SOYOMBO CLUSTER-INITIAL LETTER SA", "SOYOMBO FINAL CONSONANT SIGN G", "SOYOMBO FINAL CONSONANT SIGN K", "SOYOMBO FINAL CONSONANT SIGN NG", "SOYOMBO FINAL CONSONANT SIGN D", "SOYOMBO FINAL CONSONANT SIGN N", "SOYOMBO FINAL CONSONANT SIGN B", "SOYOMBO FINAL CONSONANT SIGN M", "SOYOMBO FINAL CONSONANT SIGN R", "SOYOMBO FINAL CONSONANT SIGN L", "SOYOMBO FINAL CONSONANT SIGN SH", "SOYOMBO FINAL CONSONANT SIGN S", "SOYOMBO FINAL CONSONANT SIGN -A", "SOYOMBO SIGN ANUSVARA", "SOYOMBO SIGN VISARGA", "SOYOMBO GEMINATION MARK", "SOYOMBO SUBJOINER", "SOYOMBO MARK TSHEG", "SOYOMBO MARK SHAD", "SOYOMBO MARK DOUBLE SHAD", "SOYOMBO MARK PLUTA", "SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME", "SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME", "SOYOMBO HEAD MARK WITH MOON AND SUN", "SOYOMBO TERMINAL MARK-1", "SOYOMBO TERMINAL MARK-2", "PAU CIN HAU LETTER PA", "PAU CIN HAU LETTER KA", "PAU CIN HAU LETTER LA", "PAU CIN HAU LETTER MA", "PAU CIN HAU LETTER DA", "PAU CIN HAU LETTER ZA", "PAU CIN HAU LETTER VA", "PAU CIN HAU LETTER NGA", "PAU CIN HAU LETTER HA", "PAU CIN HAU LETTER GA", "PAU CIN HAU LETTER KHA", "PAU CIN HAU LETTER SA", "PAU CIN HAU LETTER BA", "PAU CIN HAU LETTER CA", "PAU CIN HAU LETTER TA", "PAU CIN HAU LETTER THA", "PAU CIN HAU LETTER NA", "PAU CIN HAU LETTER PHA", "PAU CIN HAU LETTER RA", "PAU CIN HAU LETTER FA", "PAU CIN HAU LETTER CHA", "PAU CIN HAU LETTER A", "PAU CIN HAU LETTER E", "PAU CIN HAU LETTER I", "PAU CIN HAU LETTER O", "PAU CIN HAU LETTER U", "PAU CIN HAU LETTER UA", "PAU CIN HAU LETTER IA", "PAU CIN HAU LETTER FINAL P", "PAU CIN HAU LETTER FINAL K", "PAU CIN HAU LETTER FINAL T", "PAU CIN HAU LETTER FINAL M", "PAU CIN HAU LETTER FINAL N", "PAU CIN HAU LETTER FINAL L", "PAU CIN HAU LETTER FINAL W", "PAU CIN HAU LETTER FINAL NG", "PAU CIN HAU LETTER FINAL Y", "PAU CIN HAU RISING TONE LONG", "PAU CIN HAU RISING TONE", "PAU CIN HAU SANDHI GLOTTAL STOP", "PAU CIN HAU RISING TONE LONG FINAL", "PAU CIN HAU RISING TONE FINAL", "PAU CIN HAU SANDHI GLOTTAL STOP FINAL", "PAU CIN HAU SANDHI TONE LONG", "PAU CIN HAU SANDHI TONE", "PAU CIN HAU SANDHI TONE LONG FINAL", "PAU CIN HAU SANDHI TONE FINAL", "PAU CIN HAU MID-LEVEL TONE", "PAU CIN HAU GLOTTAL STOP VARIANT", "PAU CIN HAU MID-LEVEL TONE LONG FINAL", "PAU CIN HAU MID-LEVEL TONE FINAL", "PAU CIN HAU LOW-FALLING TONE LONG", "PAU CIN HAU LOW-FALLING TONE", "PAU CIN HAU GLOTTAL STOP", "PAU CIN HAU LOW-FALLING TONE LONG FINAL", "PAU CIN HAU LOW-FALLING TONE FINAL", "PAU CIN HAU GLOTTAL STOP FINAL", "BHAIKSUKI LETTER A", "BHAIKSUKI LETTER AA", "BHAIKSUKI LETTER I", "BHAIKSUKI LETTER II", "BHAIKSUKI LETTER U", "BHAIKSUKI LETTER UU", "BHAIKSUKI LETTER VOCALIC R", "BHAIKSUKI LETTER VOCALIC RR", "BHAIKSUKI LETTER VOCALIC L", "BHAIKSUKI LETTER E", "BHAIKSUKI LETTER AI", "BHAIKSUKI LETTER O", "BHAIKSUKI LETTER AU", "BHAIKSUKI LETTER KA", "BHAIKSUKI LETTER KHA", "BHAIKSUKI LETTER GA", "BHAIKSUKI LETTER GHA", "BHAIKSUKI LETTER NGA", "BHAIKSUKI LETTER CA", "BHAIKSUKI LETTER CHA", "BHAIKSUKI LETTER JA", "BHAIKSUKI LETTER JHA", "BHAIKSUKI LETTER NYA", "BHAIKSUKI LETTER TTA", "BHAIKSUKI LETTER TTHA", "BHAIKSUKI LETTER DDA", "BHAIKSUKI LETTER DDHA", "BHAIKSUKI LETTER NNA", "BHAIKSUKI LETTER TA", "BHAIKSUKI LETTER THA", "BHAIKSUKI LETTER DA", "BHAIKSUKI LETTER DHA", "BHAIKSUKI LETTER NA", "BHAIKSUKI LETTER PA", "BHAIKSUKI LETTER PHA", "BHAIKSUKI LETTER BA", "BHAIKSUKI LETTER BHA", "BHAIKSUKI LETTER MA", "BHAIKSUKI LETTER YA", "BHAIKSUKI LETTER RA", "BHAIKSUKI LETTER LA", "BHAIKSUKI LETTER VA", "BHAIKSUKI LETTER SHA", "BHAIKSUKI LETTER SSA", "BHAIKSUKI LETTER SA", "BHAIKSUKI LETTER HA", "BHAIKSUKI VOWEL SIGN AA", "BHAIKSUKI VOWEL SIGN I", "BHAIKSUKI VOWEL SIGN II", "BHAIKSUKI VOWEL SIGN U", "BHAIKSUKI VOWEL SIGN UU", "BHAIKSUKI VOWEL SIGN VOCALIC R", "BHAIKSUKI VOWEL SIGN VOCALIC RR", "BHAIKSUKI VOWEL SIGN VOCALIC L", "BHAIKSUKI VOWEL SIGN E", "BHAIKSUKI VOWEL SIGN AI", "BHAIKSUKI VOWEL SIGN O", "BHAIKSUKI VOWEL SIGN AU", "BHAIKSUKI SIGN CANDRABINDU", "BHAIKSUKI SIGN ANUSVARA", "BHAIKSUKI SIGN VISARGA", "BHAIKSUKI SIGN VIRAMA", "BHAIKSUKI SIGN AVAGRAHA", "BHAIKSUKI DANDA", "BHAIKSUKI DOUBLE DANDA", "BHAIKSUKI WORD SEPARATOR", "BHAIKSUKI GAP FILLER-1", "BHAIKSUKI GAP FILLER-2", "BHAIKSUKI DIGIT ZERO", "BHAIKSUKI DIGIT ONE", "BHAIKSUKI DIGIT TWO", "BHAIKSUKI DIGIT THREE", "BHAIKSUKI DIGIT FOUR", "BHAIKSUKI DIGIT FIVE", "BHAIKSUKI DIGIT SIX", "BHAIKSUKI DIGIT SEVEN", "BHAIKSUKI DIGIT EIGHT", "BHAIKSUKI DIGIT NINE", "BHAIKSUKI NUMBER ONE", "BHAIKSUKI NUMBER TWO", "BHAIKSUKI NUMBER THREE", "BHAIKSUKI NUMBER FOUR", "BHAIKSUKI NUMBER FIVE", "BHAIKSUKI NUMBER SIX", "BHAIKSUKI NUMBER SEVEN", "BHAIKSUKI NUMBER EIGHT", "BHAIKSUKI NUMBER NINE", "BHAIKSUKI NUMBER TEN", "BHAIKSUKI NUMBER TWENTY", "BHAIKSUKI NUMBER THIRTY", "BHAIKSUKI NUMBER FORTY", "BHAIKSUKI NUMBER FIFTY", "BHAIKSUKI NUMBER SIXTY", "BHAIKSUKI NUMBER SEVENTY", "BHAIKSUKI NUMBER EIGHTY", "BHAIKSUKI NUMBER NINETY", "BHAIKSUKI HUNDREDS UNIT MARK", "MARCHEN HEAD MARK", "MARCHEN MARK SHAD", "MARCHEN LETTER KA", "MARCHEN LETTER KHA", "MARCHEN LETTER GA", "MARCHEN LETTER NGA", "MARCHEN LETTER CA", "MARCHEN LETTER CHA", "MARCHEN LETTER JA", "MARCHEN LETTER NYA", "MARCHEN LETTER TA", "MARCHEN LETTER THA", "MARCHEN LETTER DA", "MARCHEN LETTER NA", "MARCHEN LETTER PA", "MARCHEN LETTER PHA", "MARCHEN LETTER BA", "MARCHEN LETTER MA", "MARCHEN LETTER TSA", "MARCHEN LETTER TSHA", "MARCHEN LETTER DZA", "MARCHEN LETTER WA", "MARCHEN LETTER ZHA", "MARCHEN LETTER ZA", "MARCHEN LETTER -A", "MARCHEN LETTER YA", "MARCHEN LETTER RA", "MARCHEN LETTER LA", "MARCHEN LETTER SHA", "MARCHEN LETTER SA", "MARCHEN LETTER HA", "MARCHEN LETTER A", "MARCHEN SUBJOINED LETTER KA", "MARCHEN SUBJOINED LETTER KHA", "MARCHEN SUBJOINED LETTER GA", "MARCHEN SUBJOINED LETTER NGA", "MARCHEN SUBJOINED LETTER CA", "MARCHEN SUBJOINED LETTER CHA", "MARCHEN SUBJOINED LETTER JA", "MARCHEN SUBJOINED LETTER NYA", "MARCHEN SUBJOINED LETTER TA", "MARCHEN SUBJOINED LETTER THA", "MARCHEN SUBJOINED LETTER DA", "MARCHEN SUBJOINED LETTER NA", "MARCHEN SUBJOINED LETTER PA", "MARCHEN SUBJOINED LETTER PHA", "MARCHEN SUBJOINED LETTER BA", "MARCHEN SUBJOINED LETTER MA", "MARCHEN SUBJOINED LETTER TSA", "MARCHEN SUBJOINED LETTER TSHA", "MARCHEN SUBJOINED LETTER DZA", "MARCHEN SUBJOINED LETTER WA", "MARCHEN SUBJOINED LETTER ZHA", "MARCHEN SUBJOINED LETTER ZA", "MARCHEN SUBJOINED LETTER YA", "MARCHEN SUBJOINED LETTER RA", "MARCHEN SUBJOINED LETTER LA", "MARCHEN SUBJOINED LETTER SHA", "MARCHEN SUBJOINED LETTER SA", "MARCHEN SUBJOINED LETTER HA", "MARCHEN SUBJOINED LETTER A", "MARCHEN VOWEL SIGN AA", "MARCHEN VOWEL SIGN I", "MARCHEN VOWEL SIGN U", "MARCHEN VOWEL SIGN E", "MARCHEN VOWEL SIGN O", "MARCHEN SIGN ANUSVARA", "MARCHEN SIGN CANDRABINDU", "MASARAM GONDI LETTER A", "MASARAM GONDI LETTER AA", "MASARAM GONDI LETTER I", "MASARAM GONDI LETTER II", "MASARAM GONDI LETTER U", "MASARAM GONDI LETTER UU", "MASARAM GONDI LETTER E", "MASARAM GONDI LETTER AI", "MASARAM GONDI LETTER O", "MASARAM GONDI LETTER AU", "MASARAM GONDI LETTER KA", "MASARAM GONDI LETTER KHA", "MASARAM GONDI LETTER GA", "MASARAM GONDI LETTER GHA", "MASARAM GONDI LETTER NGA", "MASARAM GONDI LETTER CA", "MASARAM GONDI LETTER CHA", "MASARAM GONDI LETTER JA", "MASARAM GONDI LETTER JHA", "MASARAM GONDI LETTER NYA", "MASARAM GONDI LETTER TTA", "MASARAM GONDI LETTER TTHA", "MASARAM GONDI LETTER DDA", "MASARAM GONDI LETTER DDHA", "MASARAM GONDI LETTER NNA", "MASARAM GONDI LETTER TA", "MASARAM GONDI LETTER THA", "MASARAM GONDI LETTER DA", "MASARAM GONDI LETTER DHA", "MASARAM GONDI LETTER NA", "MASARAM GONDI LETTER PA", "MASARAM GONDI LETTER PHA", "MASARAM GONDI LETTER BA", "MASARAM GONDI LETTER BHA", "MASARAM GONDI LETTER MA", "MASARAM GONDI LETTER YA", "MASARAM GONDI LETTER RA", "MASARAM GONDI LETTER LA", "MASARAM GONDI LETTER VA", "MASARAM GONDI LETTER SHA", "MASARAM GONDI LETTER SSA", "MASARAM GONDI LETTER SA", "MASARAM GONDI LETTER HA", "MASARAM GONDI LETTER LLA", "MASARAM GONDI LETTER KSSA", "MASARAM GONDI LETTER JNYA", "MASARAM GONDI LETTER TRA", "MASARAM GONDI VOWEL SIGN AA", "MASARAM GONDI VOWEL SIGN I", "MASARAM GONDI VOWEL SIGN II", "MASARAM GONDI VOWEL SIGN U", "MASARAM GONDI VOWEL SIGN UU", "MASARAM GONDI VOWEL SIGN VOCALIC R", "MASARAM GONDI VOWEL SIGN E", "MASARAM GONDI VOWEL SIGN AI", "MASARAM GONDI VOWEL SIGN O", "MASARAM GONDI VOWEL SIGN AU", "MASARAM GONDI SIGN ANUSVARA", "MASARAM GONDI SIGN VISARGA", "MASARAM GONDI SIGN NUKTA", "MASARAM GONDI SIGN CANDRA", "MASARAM GONDI SIGN HALANTA", "MASARAM GONDI VIRAMA", "MASARAM GONDI REPHA", "MASARAM GONDI RA-KARA", "MASARAM GONDI DIGIT ZERO", "MASARAM GONDI DIGIT ONE", "MASARAM GONDI DIGIT TWO", "MASARAM GONDI DIGIT THREE", "MASARAM GONDI DIGIT FOUR", "MASARAM GONDI DIGIT FIVE", "MASARAM GONDI DIGIT SIX", "MASARAM GONDI DIGIT SEVEN", "MASARAM GONDI DIGIT EIGHT", "MASARAM GONDI DIGIT NINE", "GUNJALA GONDI LETTER A", "GUNJALA GONDI LETTER AA", "GUNJALA GONDI LETTER I", "GUNJALA GONDI LETTER II", "GUNJALA GONDI LETTER U", "GUNJALA GONDI LETTER UU", "GUNJALA GONDI LETTER EE", "GUNJALA GONDI LETTER AI", "GUNJALA GONDI LETTER OO", "GUNJALA GONDI LETTER AU", "GUNJALA GONDI LETTER YA", "GUNJALA GONDI LETTER VA", "GUNJALA GONDI LETTER BA", "GUNJALA GONDI LETTER BHA", "GUNJALA GONDI LETTER MA", "GUNJALA GONDI LETTER KA", "GUNJALA GONDI LETTER KHA", "GUNJALA GONDI LETTER TA", "GUNJALA GONDI LETTER THA", "GUNJALA GONDI LETTER LA", "GUNJALA GONDI LETTER GA", "GUNJALA GONDI LETTER GHA", "GUNJALA GONDI LETTER DA", "GUNJALA GONDI LETTER DHA", "GUNJALA GONDI LETTER NA", "GUNJALA GONDI LETTER CA", "GUNJALA GONDI LETTER CHA", "GUNJALA GONDI LETTER TTA", "GUNJALA GONDI LETTER TTHA", "GUNJALA GONDI LETTER LLA", "GUNJALA GONDI LETTER JA", "GUNJALA GONDI LETTER JHA", "GUNJALA GONDI LETTER DDA", "GUNJALA GONDI LETTER DDHA", "GUNJALA GONDI LETTER NGA", "GUNJALA GONDI LETTER PA", "GUNJALA GONDI LETTER PHA", "GUNJALA GONDI LETTER HA", "GUNJALA GONDI LETTER RA", "GUNJALA GONDI LETTER SA", "GUNJALA GONDI VOWEL SIGN AA", "GUNJALA GONDI VOWEL SIGN I", "GUNJALA GONDI VOWEL SIGN II", "GUNJALA GONDI VOWEL SIGN U", "GUNJALA GONDI VOWEL SIGN UU", "GUNJALA GONDI VOWEL SIGN EE", "GUNJALA GONDI VOWEL SIGN AI", "GUNJALA GONDI VOWEL SIGN OO", "GUNJALA GONDI VOWEL SIGN AU", "GUNJALA GONDI SIGN ANUSVARA", "GUNJALA GONDI SIGN VISARGA", "GUNJALA GONDI VIRAMA", "GUNJALA GONDI OM", "GUNJALA GONDI DIGIT ZERO", "GUNJALA GONDI DIGIT ONE", "GUNJALA GONDI DIGIT TWO", "GUNJALA GONDI DIGIT THREE", "GUNJALA GONDI DIGIT FOUR", "GUNJALA GONDI DIGIT FIVE", "GUNJALA GONDI DIGIT SIX", "GUNJALA GONDI DIGIT SEVEN", "GUNJALA GONDI DIGIT EIGHT", "GUNJALA GONDI DIGIT NINE", "MAKASAR LETTER KA", "MAKASAR LETTER GA", "MAKASAR LETTER NGA", "MAKASAR LETTER PA", "MAKASAR LETTER BA", "MAKASAR LETTER MA", "MAKASAR LETTER TA", "MAKASAR LETTER DA", "MAKASAR LETTER NA", "MAKASAR LETTER CA", "MAKASAR LETTER JA", "MAKASAR LETTER NYA", "MAKASAR LETTER YA", "MAKASAR LETTER RA", "MAKASAR LETTER LA", "MAKASAR LETTER VA", "MAKASAR LETTER SA", "MAKASAR LETTER A", "MAKASAR ANGKA", "MAKASAR VOWEL SIGN I", "MAKASAR VOWEL SIGN U", "MAKASAR VOWEL SIGN E", "MAKASAR VOWEL SIGN O", "MAKASAR PASSIMBANG", "MAKASAR END OF SECTION", "TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH", "TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH", "TAMIL FRACTION ONE EIGHTIETH", "TAMIL FRACTION ONE SIXTY-FOURTH", "TAMIL FRACTION ONE FORTIETH", "TAMIL FRACTION ONE THIRTY-SECOND", "TAMIL FRACTION THREE EIGHTIETHS", "TAMIL FRACTION THREE SIXTY-FOURTHS", "TAMIL FRACTION ONE TWENTIETH", "TAMIL FRACTION ONE SIXTEENTH-1", "TAMIL FRACTION ONE SIXTEENTH-2", "TAMIL FRACTION ONE TENTH", "TAMIL FRACTION ONE EIGHTH", "TAMIL FRACTION THREE TWENTIETHS", "TAMIL FRACTION THREE SIXTEENTHS", "TAMIL FRACTION ONE FIFTH", "TAMIL FRACTION ONE QUARTER", "TAMIL FRACTION ONE HALF-1", "TAMIL FRACTION ONE HALF-2", "TAMIL FRACTION THREE QUARTERS", "TAMIL FRACTION DOWNSCALING FACTOR KIIZH", "TAMIL SIGN NEL", "TAMIL SIGN CEVITU", "TAMIL SIGN AAZHAAKKU", "TAMIL SIGN UZHAKKU", "TAMIL SIGN MUUVUZHAKKU", "TAMIL SIGN KURUNI", "TAMIL SIGN PATHAKKU", "TAMIL SIGN MUKKURUNI", "TAMIL SIGN KAACU", "TAMIL SIGN PANAM", "TAMIL SIGN PON", "TAMIL SIGN VARAAKAN", "TAMIL SIGN PAARAM", "TAMIL SIGN KUZHI", "TAMIL SIGN VELI", "TAMIL WET CULTIVATION SIGN", "TAMIL DRY CULTIVATION SIGN", "TAMIL LAND SIGN", "TAMIL SALT PAN SIGN", "TAMIL TRADITIONAL CREDIT SIGN", "TAMIL TRADITIONAL NUMBER SIGN", "TAMIL CURRENT SIGN", "TAMIL AND ODD SIGN", "TAMIL SPENT SIGN", "TAMIL TOTAL SIGN", "TAMIL IN POSSESSION SIGN", "TAMIL STARTING FROM SIGN", "TAMIL SIGN MUTHALIYA", "TAMIL SIGN VAKAIYARAA", "TAMIL PUNCTUATION END OF TEXT", "CUNEIFORM SIGN A", "CUNEIFORM SIGN A TIMES A", "CUNEIFORM SIGN A TIMES BAD", "CUNEIFORM SIGN A TIMES GAN2 TENU", "CUNEIFORM SIGN A TIMES HA", "CUNEIFORM SIGN A TIMES IGI", "CUNEIFORM SIGN A TIMES LAGAR GUNU", "CUNEIFORM SIGN A TIMES MUSH", "CUNEIFORM SIGN A TIMES SAG", "CUNEIFORM SIGN A2", "CUNEIFORM SIGN AB", "CUNEIFORM SIGN AB TIMES ASH2", "CUNEIFORM SIGN AB TIMES DUN3 GUNU", "CUNEIFORM SIGN AB TIMES GAL", "CUNEIFORM SIGN AB TIMES GAN2 TENU", "CUNEIFORM SIGN AB TIMES HA", "CUNEIFORM SIGN AB TIMES IGI GUNU", "CUNEIFORM SIGN AB TIMES IMIN", "CUNEIFORM SIGN AB TIMES LAGAB", "CUNEIFORM SIGN AB TIMES SHESH", "CUNEIFORM SIGN AB TIMES U PLUS U PLUS U", "CUNEIFORM SIGN AB GUNU", "CUNEIFORM SIGN AB2", "CUNEIFORM SIGN AB2 TIMES BALAG", "CUNEIFORM SIGN AB2 TIMES GAN2 TENU", "CUNEIFORM SIGN AB2 TIMES ME PLUS EN", "CUNEIFORM SIGN AB2 TIMES SHA3", "CUNEIFORM SIGN AB2 TIMES TAK4", "CUNEIFORM SIGN AD", "CUNEIFORM SIGN AK", "CUNEIFORM SIGN AK TIMES ERIN2", "CUNEIFORM SIGN AK TIMES SHITA PLUS GISH", "CUNEIFORM SIGN AL", "CUNEIFORM SIGN AL TIMES AL", "CUNEIFORM SIGN AL TIMES DIM2", "CUNEIFORM SIGN AL TIMES GISH", "CUNEIFORM SIGN AL TIMES HA", "CUNEIFORM SIGN AL TIMES KAD3", "CUNEIFORM SIGN AL TIMES KI", "CUNEIFORM SIGN AL TIMES SHE", "CUNEIFORM SIGN AL TIMES USH", "CUNEIFORM SIGN ALAN", "CUNEIFORM SIGN ALEPH", "CUNEIFORM SIGN AMAR", "CUNEIFORM SIGN AMAR TIMES SHE", "CUNEIFORM SIGN AN", "CUNEIFORM SIGN AN OVER AN", "CUNEIFORM SIGN AN THREE TIMES", "CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA", "CUNEIFORM SIGN AN PLUS NAGA SQUARED", "CUNEIFORM SIGN ANSHE", "CUNEIFORM SIGN APIN", "CUNEIFORM SIGN ARAD", "CUNEIFORM SIGN ARAD TIMES KUR", "CUNEIFORM SIGN ARKAB", "CUNEIFORM SIGN ASAL2", "CUNEIFORM SIGN ASH", "CUNEIFORM SIGN ASH ZIDA TENU", "CUNEIFORM SIGN ASH KABA TENU", "CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP", "CUNEIFORM SIGN ASH OVER ASH OVER ASH", "CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH", "CUNEIFORM SIGN ASH2", "CUNEIFORM SIGN ASHGAB", "CUNEIFORM SIGN BA", "CUNEIFORM SIGN BAD", "CUNEIFORM SIGN BAG3", "CUNEIFORM SIGN BAHAR2", "CUNEIFORM SIGN BAL", "CUNEIFORM SIGN BAL OVER BAL", "CUNEIFORM SIGN BALAG", "CUNEIFORM SIGN BAR", "CUNEIFORM SIGN BARA2", "CUNEIFORM SIGN BI", "CUNEIFORM SIGN BI TIMES A", "CUNEIFORM SIGN BI TIMES GAR", "CUNEIFORM SIGN BI TIMES IGI GUNU", "CUNEIFORM SIGN BU", "CUNEIFORM SIGN BU OVER BU AB", "CUNEIFORM SIGN BU OVER BU UN", "CUNEIFORM SIGN BU CROSSING BU", "CUNEIFORM SIGN BULUG", "CUNEIFORM SIGN BULUG OVER BULUG", "CUNEIFORM SIGN BUR", "CUNEIFORM SIGN BUR2", "CUNEIFORM SIGN DA", "CUNEIFORM SIGN DAG", "CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH", "CUNEIFORM SIGN DAG KISIM5 TIMES AMAR", "CUNEIFORM SIGN DAG KISIM5 TIMES BALAG", "CUNEIFORM SIGN DAG KISIM5 TIMES BI", "CUNEIFORM SIGN DAG KISIM5 TIMES GA", "CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH", "CUNEIFORM SIGN DAG KISIM5 TIMES GI", "CUNEIFORM SIGN DAG KISIM5 TIMES GIR2", "CUNEIFORM SIGN DAG KISIM5 TIMES GUD", "CUNEIFORM SIGN DAG KISIM5 TIMES HA", "CUNEIFORM SIGN DAG KISIM5 TIMES IR", "CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU", "CUNEIFORM SIGN DAG KISIM5 TIMES KAK", "CUNEIFORM SIGN DAG KISIM5 TIMES LA", "CUNEIFORM SIGN DAG KISIM5 TIMES LU", "CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2", "CUNEIFORM SIGN DAG KISIM5 TIMES LUM", "CUNEIFORM SIGN DAG KISIM5 TIMES NE", "CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP", "CUNEIFORM SIGN DAG KISIM5 TIMES SI", "CUNEIFORM SIGN DAG KISIM5 TIMES TAK4", "CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2", "CUNEIFORM SIGN DAG KISIM5 TIMES USH", "CUNEIFORM SIGN DAM", "CUNEIFORM SIGN DAR", "CUNEIFORM SIGN DARA3", "CUNEIFORM SIGN DARA4", "CUNEIFORM SIGN DI", "CUNEIFORM SIGN DIB", "CUNEIFORM SIGN DIM", "CUNEIFORM SIGN DIM TIMES SHE", "CUNEIFORM SIGN DIM2", "CUNEIFORM SIGN DIN", "CUNEIFORM SIGN DIN KASKAL U GUNU DISH", "CUNEIFORM SIGN DISH", "CUNEIFORM SIGN DU", "CUNEIFORM SIGN DU OVER DU", "CUNEIFORM SIGN DU GUNU", "CUNEIFORM SIGN DU SHESHIG", "CUNEIFORM SIGN DUB", "CUNEIFORM SIGN DUB TIMES ESH2", "CUNEIFORM SIGN DUB2", "CUNEIFORM SIGN DUG", "CUNEIFORM SIGN DUGUD", "CUNEIFORM SIGN DUH", "CUNEIFORM SIGN DUN", "CUNEIFORM SIGN DUN3", "CUNEIFORM SIGN DUN3 GUNU", "CUNEIFORM SIGN DUN3 GUNU GUNU", "CUNEIFORM SIGN DUN4", "CUNEIFORM SIGN DUR2", "CUNEIFORM SIGN E", "CUNEIFORM SIGN E TIMES PAP", "CUNEIFORM SIGN E OVER E NUN OVER NUN", "CUNEIFORM SIGN E2", "CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA", "CUNEIFORM SIGN E2 TIMES GAR", "CUNEIFORM SIGN E2 TIMES MI", "CUNEIFORM SIGN E2 TIMES SAL", "CUNEIFORM SIGN E2 TIMES SHE", "CUNEIFORM SIGN E2 TIMES U", "CUNEIFORM SIGN EDIN", "CUNEIFORM SIGN EGIR", "CUNEIFORM SIGN EL", "CUNEIFORM SIGN EN", "CUNEIFORM SIGN EN TIMES GAN2", "CUNEIFORM SIGN EN TIMES GAN2 TENU", "CUNEIFORM SIGN EN TIMES ME", "CUNEIFORM SIGN EN CROSSING EN", "CUNEIFORM SIGN EN OPPOSING EN", "CUNEIFORM SIGN EN SQUARED", "CUNEIFORM SIGN EREN", "CUNEIFORM SIGN ERIN2", "CUNEIFORM SIGN ESH2", "CUNEIFORM SIGN EZEN", "CUNEIFORM SIGN EZEN TIMES A", "CUNEIFORM SIGN EZEN TIMES A PLUS LAL", "CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL", "CUNEIFORM SIGN EZEN TIMES AN", "CUNEIFORM SIGN EZEN TIMES BAD", "CUNEIFORM SIGN EZEN TIMES DUN3 GUNU", "CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU", "CUNEIFORM SIGN EZEN TIMES HA", "CUNEIFORM SIGN EZEN TIMES HA GUNU", "CUNEIFORM SIGN EZEN TIMES IGI GUNU", "CUNEIFORM SIGN EZEN TIMES KASKAL", "CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED", "CUNEIFORM SIGN EZEN TIMES KU3", "CUNEIFORM SIGN EZEN TIMES LA", "CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL", "CUNEIFORM SIGN EZEN TIMES LI", "CUNEIFORM SIGN EZEN TIMES LU", "CUNEIFORM SIGN EZEN TIMES U2", "CUNEIFORM SIGN EZEN TIMES UD", "CUNEIFORM SIGN GA", "CUNEIFORM SIGN GA GUNU", "CUNEIFORM SIGN GA2", "CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA", "CUNEIFORM SIGN GA2 TIMES A PLUS HA", "CUNEIFORM SIGN GA2 TIMES A PLUS IGI", "CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB", "CUNEIFORM SIGN GA2 TIMES AN", "CUNEIFORM SIGN GA2 TIMES ASH", "CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL", "CUNEIFORM SIGN GA2 TIMES BAD", "CUNEIFORM SIGN GA2 TIMES BAR PLUS RA", "CUNEIFORM SIGN GA2 TIMES BUR", "CUNEIFORM SIGN GA2 TIMES BUR PLUS RA", "CUNEIFORM SIGN GA2 TIMES DA", "CUNEIFORM SIGN GA2 TIMES DI", "CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE", "CUNEIFORM SIGN GA2 TIMES DUB", "CUNEIFORM SIGN GA2 TIMES EL", "CUNEIFORM SIGN GA2 TIMES EL PLUS LA", "CUNEIFORM SIGN GA2 TIMES EN", "CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU", "CUNEIFORM SIGN GA2 TIMES GAN2 TENU", "CUNEIFORM SIGN GA2 TIMES GAR", "CUNEIFORM SIGN GA2 TIMES GI", "CUNEIFORM SIGN GA2 TIMES GI4", "CUNEIFORM SIGN GA2 TIMES GI4 PLUS A", "CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU", "CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2", "CUNEIFORM SIGN GA2 TIMES HAL", "CUNEIFORM SIGN GA2 TIMES HAL PLUS LA", "CUNEIFORM SIGN GA2 TIMES HI PLUS LI", "CUNEIFORM SIGN GA2 TIMES HUB2", "CUNEIFORM SIGN GA2 TIMES IGI GUNU", "CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH", "CUNEIFORM SIGN GA2 TIMES KAK", "CUNEIFORM SIGN GA2 TIMES KASKAL", "CUNEIFORM SIGN GA2 TIMES KID", "CUNEIFORM SIGN GA2 TIMES KID PLUS LAL", "CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN", "CUNEIFORM SIGN GA2 TIMES LA", "CUNEIFORM SIGN GA2 TIMES ME PLUS EN", "CUNEIFORM SIGN GA2 TIMES MI", "CUNEIFORM SIGN GA2 TIMES NUN", "CUNEIFORM SIGN GA2 TIMES NUN OVER NUN", "CUNEIFORM SIGN GA2 TIMES PA", "CUNEIFORM SIGN GA2 TIMES SAL", "CUNEIFORM SIGN GA2 TIMES SAR", "CUNEIFORM SIGN GA2 TIMES SHE", "CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR", "CUNEIFORM SIGN GA2 TIMES SHID", "CUNEIFORM SIGN GA2 TIMES SUM", "CUNEIFORM SIGN GA2 TIMES TAK4", "CUNEIFORM SIGN GA2 TIMES U", "CUNEIFORM SIGN GA2 TIMES UD", "CUNEIFORM SIGN GA2 TIMES UD PLUS DU", "CUNEIFORM SIGN GA2 OVER GA2", "CUNEIFORM SIGN GABA", "CUNEIFORM SIGN GABA CROSSING GABA", "CUNEIFORM SIGN GAD", "CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR", "CUNEIFORM SIGN GAL", "CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR", "CUNEIFORM SIGN GALAM", "CUNEIFORM SIGN GAM", "CUNEIFORM SIGN GAN", "CUNEIFORM SIGN GAN2", "CUNEIFORM SIGN GAN2 TENU", "CUNEIFORM SIGN GAN2 OVER GAN2", "CUNEIFORM SIGN GAN2 CROSSING GAN2", "CUNEIFORM SIGN GAR", "CUNEIFORM SIGN GAR3", "CUNEIFORM SIGN GASHAN", "CUNEIFORM SIGN GESHTIN", "CUNEIFORM SIGN GESHTIN TIMES KUR", "CUNEIFORM SIGN GI", "CUNEIFORM SIGN GI TIMES E", "CUNEIFORM SIGN GI TIMES U", "CUNEIFORM SIGN GI CROSSING GI", "CUNEIFORM SIGN GI4", "CUNEIFORM SIGN GI4 OVER GI4", "CUNEIFORM SIGN GI4 CROSSING GI4", "CUNEIFORM SIGN GIDIM", "CUNEIFORM SIGN GIR2", "CUNEIFORM SIGN GIR2 GUNU", "CUNEIFORM SIGN GIR3", "CUNEIFORM SIGN GIR3 TIMES A PLUS IGI", "CUNEIFORM SIGN GIR3 TIMES GAN2 TENU", "CUNEIFORM SIGN GIR3 TIMES IGI", "CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI", "CUNEIFORM SIGN GIR3 TIMES PA", "CUNEIFORM SIGN GISAL", "CUNEIFORM SIGN GISH", "CUNEIFORM SIGN GISH CROSSING GISH", "CUNEIFORM SIGN GISH TIMES BAD", "CUNEIFORM SIGN GISH TIMES TAK4", "CUNEIFORM SIGN GISH TENU", "CUNEIFORM SIGN GU", "CUNEIFORM SIGN GU CROSSING GU", "CUNEIFORM SIGN GU2", "CUNEIFORM SIGN GU2 TIMES KAK", "CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU", "CUNEIFORM SIGN GU2 TIMES NUN", "CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2", "CUNEIFORM SIGN GU2 GUNU", "CUNEIFORM SIGN GUD", "CUNEIFORM SIGN GUD TIMES A PLUS KUR", "CUNEIFORM SIGN GUD TIMES KUR", "CUNEIFORM SIGN GUD OVER GUD LUGAL", "CUNEIFORM SIGN GUL", "CUNEIFORM SIGN GUM", "CUNEIFORM SIGN GUM TIMES SHE", "CUNEIFORM SIGN GUR", "CUNEIFORM SIGN GUR7", "CUNEIFORM SIGN GURUN", "CUNEIFORM SIGN GURUSH", "CUNEIFORM SIGN HA", "CUNEIFORM SIGN HA TENU", "CUNEIFORM SIGN HA GUNU", "CUNEIFORM SIGN HAL", "CUNEIFORM SIGN HI", "CUNEIFORM SIGN HI TIMES ASH", "CUNEIFORM SIGN HI TIMES ASH2", "CUNEIFORM SIGN HI TIMES BAD", "CUNEIFORM SIGN HI TIMES DISH", "CUNEIFORM SIGN HI TIMES GAD", "CUNEIFORM SIGN HI TIMES KIN", "CUNEIFORM SIGN HI TIMES NUN", "CUNEIFORM SIGN HI TIMES SHE", "CUNEIFORM SIGN HI TIMES U", "CUNEIFORM SIGN HU", "CUNEIFORM SIGN HUB2", "CUNEIFORM SIGN HUB2 TIMES AN", "CUNEIFORM SIGN HUB2 TIMES HAL", "CUNEIFORM SIGN HUB2 TIMES KASKAL", "CUNEIFORM SIGN HUB2 TIMES LISH", "CUNEIFORM SIGN HUB2 TIMES UD", "CUNEIFORM SIGN HUL2", "CUNEIFORM SIGN I", "CUNEIFORM SIGN I A", "CUNEIFORM SIGN IB", "CUNEIFORM SIGN IDIM", "CUNEIFORM SIGN IDIM OVER IDIM BUR", "CUNEIFORM SIGN IDIM OVER IDIM SQUARED", "CUNEIFORM SIGN IG", "CUNEIFORM SIGN IGI", "CUNEIFORM SIGN IGI DIB", "CUNEIFORM SIGN IGI RI", "CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD", "CUNEIFORM SIGN IGI GUNU", "CUNEIFORM SIGN IL", "CUNEIFORM SIGN IL TIMES GAN2 TENU", "CUNEIFORM SIGN IL2", "CUNEIFORM SIGN IM", "CUNEIFORM SIGN IM TIMES TAK4", "CUNEIFORM SIGN IM CROSSING IM", "CUNEIFORM SIGN IM OPPOSING IM", "CUNEIFORM SIGN IM SQUARED", "CUNEIFORM SIGN IMIN", "CUNEIFORM SIGN IN", "CUNEIFORM SIGN IR", "CUNEIFORM SIGN ISH", "CUNEIFORM SIGN KA", "CUNEIFORM SIGN KA TIMES A", "CUNEIFORM SIGN KA TIMES AD", "CUNEIFORM SIGN KA TIMES AD PLUS KU3", "CUNEIFORM SIGN KA TIMES ASH2", "CUNEIFORM SIGN KA TIMES BAD", "CUNEIFORM SIGN KA TIMES BALAG", "CUNEIFORM SIGN KA TIMES BAR", "CUNEIFORM SIGN KA TIMES BI", "CUNEIFORM SIGN KA TIMES ERIN2", "CUNEIFORM SIGN KA TIMES ESH2", "CUNEIFORM SIGN KA TIMES GA", "CUNEIFORM SIGN KA TIMES GAL", "CUNEIFORM SIGN KA TIMES GAN2 TENU", "CUNEIFORM SIGN KA TIMES GAR", "CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A", "CUNEIFORM SIGN KA TIMES GI", "CUNEIFORM SIGN KA TIMES GIR2", "CUNEIFORM SIGN KA TIMES GISH PLUS SAR", "CUNEIFORM SIGN KA TIMES GISH CROSSING GISH", "CUNEIFORM SIGN KA TIMES GU", "CUNEIFORM SIGN KA TIMES GUR7", "CUNEIFORM SIGN KA TIMES IGI", "CUNEIFORM SIGN KA TIMES IM", "CUNEIFORM SIGN KA TIMES KAK", "CUNEIFORM SIGN KA TIMES KI", "CUNEIFORM SIGN KA TIMES KID", "CUNEIFORM SIGN KA TIMES LI", "CUNEIFORM SIGN KA TIMES LU", "CUNEIFORM SIGN KA TIMES ME", "CUNEIFORM SIGN KA TIMES ME PLUS DU", "CUNEIFORM SIGN KA TIMES ME PLUS GI", "CUNEIFORM SIGN KA TIMES ME PLUS TE", "CUNEIFORM SIGN KA TIMES MI", "CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ", "CUNEIFORM SIGN KA TIMES NE", "CUNEIFORM SIGN KA TIMES NUN", "CUNEIFORM SIGN KA TIMES PI", "CUNEIFORM SIGN KA TIMES RU", "CUNEIFORM SIGN KA TIMES SA", "CUNEIFORM SIGN KA TIMES SAR", "CUNEIFORM SIGN KA TIMES SHA", "CUNEIFORM SIGN KA TIMES SHE", "CUNEIFORM SIGN KA TIMES SHID", "CUNEIFORM SIGN KA TIMES SHU", "CUNEIFORM SIGN KA TIMES SIG", "CUNEIFORM SIGN KA TIMES SUHUR", "CUNEIFORM SIGN KA TIMES TAR", "CUNEIFORM SIGN KA TIMES U", "CUNEIFORM SIGN KA TIMES U2", "CUNEIFORM SIGN KA TIMES UD", "CUNEIFORM SIGN KA TIMES UMUM TIMES PA", "CUNEIFORM SIGN KA TIMES USH", "CUNEIFORM SIGN KA TIMES ZI", "CUNEIFORM SIGN KA2", "CUNEIFORM SIGN KA2 CROSSING KA2", "CUNEIFORM SIGN KAB", "CUNEIFORM SIGN KAD2", "CUNEIFORM SIGN KAD3", "CUNEIFORM SIGN KAD4", "CUNEIFORM SIGN KAD5", "CUNEIFORM SIGN KAD5 OVER KAD5", "CUNEIFORM SIGN KAK", "CUNEIFORM SIGN KAK TIMES IGI GUNU", "CUNEIFORM SIGN KAL", "CUNEIFORM SIGN KAL TIMES BAD", "CUNEIFORM SIGN KAL CROSSING KAL", "CUNEIFORM SIGN KAM2", "CUNEIFORM SIGN KAM4", "CUNEIFORM SIGN KASKAL", "CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U", "CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U", "CUNEIFORM SIGN KESH2", "CUNEIFORM SIGN KI", "CUNEIFORM SIGN KI TIMES BAD", "CUNEIFORM SIGN KI TIMES U", "CUNEIFORM SIGN KI TIMES UD", "CUNEIFORM SIGN KID", "CUNEIFORM SIGN KIN", "CUNEIFORM SIGN KISAL", "CUNEIFORM SIGN KISH", "CUNEIFORM SIGN KISIM5", "CUNEIFORM SIGN KISIM5 OVER KISIM5", "CUNEIFORM SIGN KU", "CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2", "CUNEIFORM SIGN KU3", "CUNEIFORM SIGN KU4", "CUNEIFORM SIGN KU4 VARIANT FORM", "CUNEIFORM SIGN KU7", "CUNEIFORM SIGN KUL", "CUNEIFORM SIGN KUL GUNU", "CUNEIFORM SIGN KUN", "CUNEIFORM SIGN KUR", "CUNEIFORM SIGN KUR OPPOSING KUR", "CUNEIFORM SIGN KUSHU2", "CUNEIFORM SIGN KWU318", "CUNEIFORM SIGN LA", "CUNEIFORM SIGN LAGAB", "CUNEIFORM SIGN LAGAB TIMES A", "CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA", "CUNEIFORM SIGN LAGAB TIMES A PLUS GAR", "CUNEIFORM SIGN LAGAB TIMES A PLUS LAL", "CUNEIFORM SIGN LAGAB TIMES AL", "CUNEIFORM SIGN LAGAB TIMES AN", "CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU", "CUNEIFORM SIGN LAGAB TIMES BAD", "CUNEIFORM SIGN LAGAB TIMES BI", "CUNEIFORM SIGN LAGAB TIMES DAR", "CUNEIFORM SIGN LAGAB TIMES EN", "CUNEIFORM SIGN LAGAB TIMES GA", "CUNEIFORM SIGN LAGAB TIMES GAR", "CUNEIFORM SIGN LAGAB TIMES GUD", "CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD", "CUNEIFORM SIGN LAGAB TIMES HA", "CUNEIFORM SIGN LAGAB TIMES HAL", "CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN", "CUNEIFORM SIGN LAGAB TIMES IGI GUNU", "CUNEIFORM SIGN LAGAB TIMES IM", "CUNEIFORM SIGN LAGAB TIMES IM PLUS HA", "CUNEIFORM SIGN LAGAB TIMES IM PLUS LU", "CUNEIFORM SIGN LAGAB TIMES KI", "CUNEIFORM SIGN LAGAB TIMES KIN", "CUNEIFORM SIGN LAGAB TIMES KU3", "CUNEIFORM SIGN LAGAB TIMES KUL", "CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A", "CUNEIFORM SIGN LAGAB TIMES LAGAB", "CUNEIFORM SIGN LAGAB TIMES LISH", "CUNEIFORM SIGN LAGAB TIMES LU", "CUNEIFORM SIGN LAGAB TIMES LUL", "CUNEIFORM SIGN LAGAB TIMES ME", "CUNEIFORM SIGN LAGAB TIMES ME PLUS EN", "CUNEIFORM SIGN LAGAB TIMES MUSH", "CUNEIFORM SIGN LAGAB TIMES NE", "CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM", "CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2", "CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU", "CUNEIFORM SIGN LAGAB TIMES SHU2", "CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2", "CUNEIFORM SIGN LAGAB TIMES SUM", "CUNEIFORM SIGN LAGAB TIMES TAG", "CUNEIFORM SIGN LAGAB TIMES TAK4", "CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA", "CUNEIFORM SIGN LAGAB TIMES U", "CUNEIFORM SIGN LAGAB TIMES U PLUS A", "CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U", "CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH", "CUNEIFORM SIGN LAGAB TIMES UD", "CUNEIFORM SIGN LAGAB TIMES USH", "CUNEIFORM SIGN LAGAB SQUARED", "CUNEIFORM SIGN LAGAR", "CUNEIFORM SIGN LAGAR TIMES SHE", "CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM", "CUNEIFORM SIGN LAGAR GUNU", "CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE", "CUNEIFORM SIGN LAHSHU", "CUNEIFORM SIGN LAL", "CUNEIFORM SIGN LAL TIMES LAL", "CUNEIFORM SIGN LAM", "CUNEIFORM SIGN LAM TIMES KUR", "CUNEIFORM SIGN LAM TIMES KUR PLUS RU", "CUNEIFORM SIGN LI", "CUNEIFORM SIGN LIL", "CUNEIFORM SIGN LIMMU2", "CUNEIFORM SIGN LISH", "CUNEIFORM SIGN LU", "CUNEIFORM SIGN LU TIMES BAD", "CUNEIFORM SIGN LU2", "CUNEIFORM SIGN LU2 TIMES AL", "CUNEIFORM SIGN LU2 TIMES BAD", "CUNEIFORM SIGN LU2 TIMES ESH2", "CUNEIFORM SIGN LU2 TIMES ESH2 TENU", "CUNEIFORM SIGN LU2 TIMES GAN2 TENU", "CUNEIFORM SIGN LU2 TIMES HI TIMES BAD", "CUNEIFORM SIGN LU2 TIMES IM", "CUNEIFORM SIGN LU2 TIMES KAD2", "CUNEIFORM SIGN LU2 TIMES KAD3", "CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH", "CUNEIFORM SIGN LU2 TIMES KI", "CUNEIFORM SIGN LU2 TIMES LA PLUS ASH", "CUNEIFORM SIGN LU2 TIMES LAGAB", "CUNEIFORM SIGN LU2 TIMES ME PLUS EN", "CUNEIFORM SIGN LU2 TIMES NE", "CUNEIFORM SIGN LU2 TIMES NU", "CUNEIFORM SIGN LU2 TIMES SI PLUS ASH", "CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU", "CUNEIFORM SIGN LU2 TIMES TUG2", "CUNEIFORM SIGN LU2 TENU", "CUNEIFORM SIGN LU2 CROSSING LU2", "CUNEIFORM SIGN LU2 OPPOSING LU2", "CUNEIFORM SIGN LU2 SQUARED", "CUNEIFORM SIGN LU2 SHESHIG", "CUNEIFORM SIGN LU3", "CUNEIFORM SIGN LUGAL", "CUNEIFORM SIGN LUGAL OVER LUGAL", "CUNEIFORM SIGN LUGAL OPPOSING LUGAL", "CUNEIFORM SIGN LUGAL SHESHIG", "CUNEIFORM SIGN LUH", "CUNEIFORM SIGN LUL", "CUNEIFORM SIGN LUM", "CUNEIFORM SIGN LUM OVER LUM", "CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR", "CUNEIFORM SIGN MA", "CUNEIFORM SIGN MA TIMES TAK4", "CUNEIFORM SIGN MA GUNU", "CUNEIFORM SIGN MA2", "CUNEIFORM SIGN MAH", "CUNEIFORM SIGN MAR", "CUNEIFORM SIGN MASH", "CUNEIFORM SIGN MASH2", "CUNEIFORM SIGN ME", "CUNEIFORM SIGN MES", "CUNEIFORM SIGN MI", "CUNEIFORM SIGN MIN", "CUNEIFORM SIGN MU", "CUNEIFORM SIGN MU OVER MU", "CUNEIFORM SIGN MUG", "CUNEIFORM SIGN MUG GUNU", "CUNEIFORM SIGN MUNSUB", "CUNEIFORM SIGN MURGU2", "CUNEIFORM SIGN MUSH", "CUNEIFORM SIGN MUSH TIMES A", "CUNEIFORM SIGN MUSH TIMES KUR", "CUNEIFORM SIGN MUSH TIMES ZA", "CUNEIFORM SIGN MUSH OVER MUSH", "CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA", "CUNEIFORM SIGN MUSH CROSSING MUSH", "CUNEIFORM SIGN MUSH3", "CUNEIFORM SIGN MUSH3 TIMES A", "CUNEIFORM SIGN MUSH3 TIMES A PLUS DI", "CUNEIFORM SIGN MUSH3 TIMES DI", "CUNEIFORM SIGN MUSH3 GUNU", "CUNEIFORM SIGN NA", "CUNEIFORM SIGN NA2", "CUNEIFORM SIGN NAGA", "CUNEIFORM SIGN NAGA INVERTED", "CUNEIFORM SIGN NAGA TIMES SHU TENU", "CUNEIFORM SIGN NAGA OPPOSING NAGA", "CUNEIFORM SIGN NAGAR", "CUNEIFORM SIGN NAM NUTILLU", "CUNEIFORM SIGN NAM", "CUNEIFORM SIGN NAM2", "CUNEIFORM SIGN NE", "CUNEIFORM SIGN NE TIMES A", "CUNEIFORM SIGN NE TIMES UD", "CUNEIFORM SIGN NE SHESHIG", "CUNEIFORM SIGN NI", "CUNEIFORM SIGN NI TIMES E", "CUNEIFORM SIGN NI2", "CUNEIFORM SIGN NIM", "CUNEIFORM SIGN NIM TIMES GAN2 TENU", "CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU", "CUNEIFORM SIGN NINDA2", "CUNEIFORM SIGN NINDA2 TIMES AN", "CUNEIFORM SIGN NINDA2 TIMES ASH", "CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH", "CUNEIFORM SIGN NINDA2 TIMES GUD", "CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU", "CUNEIFORM SIGN NINDA2 TIMES NE", "CUNEIFORM SIGN NINDA2 TIMES NUN", "CUNEIFORM SIGN NINDA2 TIMES SHE", "CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN", "CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH", "CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH", "CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH", "CUNEIFORM SIGN NINDA2 TIMES USH", "CUNEIFORM SIGN NISAG", "CUNEIFORM SIGN NU", "CUNEIFORM SIGN NU11", "CUNEIFORM SIGN NUN", "CUNEIFORM SIGN NUN LAGAR TIMES GAR", "CUNEIFORM SIGN NUN LAGAR TIMES MASH", "CUNEIFORM SIGN NUN LAGAR TIMES SAL", "CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL", "CUNEIFORM SIGN NUN LAGAR TIMES USH", "CUNEIFORM SIGN NUN TENU", "CUNEIFORM SIGN NUN OVER NUN", "CUNEIFORM SIGN NUN CROSSING NUN", "CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR", "CUNEIFORM SIGN NUNUZ", "CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB", "CUNEIFORM SIGN NUNUZ AB2 TIMES BI", "CUNEIFORM SIGN NUNUZ AB2 TIMES DUG", "CUNEIFORM SIGN NUNUZ AB2 TIMES GUD", "CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU", "CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3", "CUNEIFORM SIGN NUNUZ AB2 TIMES LA", "CUNEIFORM SIGN NUNUZ AB2 TIMES NE", "CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3", "CUNEIFORM SIGN NUNUZ AB2 TIMES U2", "CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI", "CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U", "CUNEIFORM SIGN PA", "CUNEIFORM SIGN PAD", "CUNEIFORM SIGN PAN", "CUNEIFORM SIGN PAP", "CUNEIFORM SIGN PESH2", "CUNEIFORM SIGN PI", "CUNEIFORM SIGN PI TIMES A", "CUNEIFORM SIGN PI TIMES AB", "CUNEIFORM SIGN PI TIMES BI", "CUNEIFORM SIGN PI TIMES BU", "CUNEIFORM SIGN PI TIMES E", "CUNEIFORM SIGN PI TIMES I", "CUNEIFORM SIGN PI TIMES IB", "CUNEIFORM SIGN PI TIMES U", "CUNEIFORM SIGN PI TIMES U2", "CUNEIFORM SIGN PI CROSSING PI", "CUNEIFORM SIGN PIRIG", "CUNEIFORM SIGN PIRIG TIMES KAL", "CUNEIFORM SIGN PIRIG TIMES UD", "CUNEIFORM SIGN PIRIG TIMES ZA", "CUNEIFORM SIGN PIRIG OPPOSING PIRIG", "CUNEIFORM SIGN RA", "CUNEIFORM SIGN RAB", "CUNEIFORM SIGN RI", "CUNEIFORM SIGN RU", "CUNEIFORM SIGN SA", "CUNEIFORM SIGN SAG NUTILLU", "CUNEIFORM SIGN SAG", "CUNEIFORM SIGN SAG TIMES A", "CUNEIFORM SIGN SAG TIMES DU", "CUNEIFORM SIGN SAG TIMES DUB", "CUNEIFORM SIGN SAG TIMES HA", "CUNEIFORM SIGN SAG TIMES KAK", "CUNEIFORM SIGN SAG TIMES KUR", "CUNEIFORM SIGN SAG TIMES LUM", "CUNEIFORM SIGN SAG TIMES MI", "CUNEIFORM SIGN SAG TIMES NUN", "CUNEIFORM SIGN SAG TIMES SAL", "CUNEIFORM SIGN SAG TIMES SHID", "CUNEIFORM SIGN SAG TIMES TAB", "CUNEIFORM SIGN SAG TIMES U2", "CUNEIFORM SIGN SAG TIMES UB", "CUNEIFORM SIGN SAG TIMES UM", "CUNEIFORM SIGN SAG TIMES UR", "CUNEIFORM SIGN SAG TIMES USH", "CUNEIFORM SIGN SAG OVER SAG", "CUNEIFORM SIGN SAG GUNU", "CUNEIFORM SIGN SAL", "CUNEIFORM SIGN SAL LAGAB TIMES ASH2", "CUNEIFORM SIGN SANGA2", "CUNEIFORM SIGN SAR", "CUNEIFORM SIGN SHA", "CUNEIFORM SIGN SHA3", "CUNEIFORM SIGN SHA3 TIMES A", "CUNEIFORM SIGN SHA3 TIMES BAD", "CUNEIFORM SIGN SHA3 TIMES GISH", "CUNEIFORM SIGN SHA3 TIMES NE", "CUNEIFORM SIGN SHA3 TIMES SHU2", "CUNEIFORM SIGN SHA3 TIMES TUR", "CUNEIFORM SIGN SHA3 TIMES U", "CUNEIFORM SIGN SHA3 TIMES U PLUS A", "CUNEIFORM SIGN SHA6", "CUNEIFORM SIGN SHAB6", "CUNEIFORM SIGN SHAR2", "CUNEIFORM SIGN SHE", "CUNEIFORM SIGN SHE HU", "CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR", "CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR", "CUNEIFORM SIGN SHEG9", "CUNEIFORM SIGN SHEN", "CUNEIFORM SIGN SHESH", "CUNEIFORM SIGN SHESH2", "CUNEIFORM SIGN SHESHLAM", "CUNEIFORM SIGN SHID", "CUNEIFORM SIGN SHID TIMES A", "CUNEIFORM SIGN SHID TIMES IM", "CUNEIFORM SIGN SHIM", "CUNEIFORM SIGN SHIM TIMES A", "CUNEIFORM SIGN SHIM TIMES BAL", "CUNEIFORM SIGN SHIM TIMES BULUG", "CUNEIFORM SIGN SHIM TIMES DIN", "CUNEIFORM SIGN SHIM TIMES GAR", "CUNEIFORM SIGN SHIM TIMES IGI", "CUNEIFORM SIGN SHIM TIMES IGI GUNU", "CUNEIFORM SIGN SHIM TIMES KUSHU2", "CUNEIFORM SIGN SHIM TIMES LUL", "CUNEIFORM SIGN SHIM TIMES MUG", "CUNEIFORM SIGN SHIM TIMES SAL", "CUNEIFORM SIGN SHINIG", "CUNEIFORM SIGN SHIR", "CUNEIFORM SIGN SHIR TENU", "CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR", "CUNEIFORM SIGN SHITA", "CUNEIFORM SIGN SHU", "CUNEIFORM SIGN SHU OVER INVERTED SHU", "CUNEIFORM SIGN SHU2", "CUNEIFORM SIGN SHUBUR", "CUNEIFORM SIGN SI", "CUNEIFORM SIGN SI GUNU", "CUNEIFORM SIGN SIG", "CUNEIFORM SIGN SIG4", "CUNEIFORM SIGN SIG4 OVER SIG4 SHU2", "CUNEIFORM SIGN SIK2", "CUNEIFORM SIGN SILA3", "CUNEIFORM SIGN SU", "CUNEIFORM SIGN SU OVER SU", "CUNEIFORM SIGN SUD", "CUNEIFORM SIGN SUD2", "CUNEIFORM SIGN SUHUR", "CUNEIFORM SIGN SUM", "CUNEIFORM SIGN SUMASH", "CUNEIFORM SIGN SUR", "CUNEIFORM SIGN SUR9", "CUNEIFORM SIGN TA", "CUNEIFORM SIGN TA ASTERISK", "CUNEIFORM SIGN TA TIMES HI", "CUNEIFORM SIGN TA TIMES MI", "CUNEIFORM SIGN TA GUNU", "CUNEIFORM SIGN TAB", "CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH", "CUNEIFORM SIGN TAB SQUARED", "CUNEIFORM SIGN TAG", "CUNEIFORM SIGN TAG TIMES BI", "CUNEIFORM SIGN TAG TIMES GUD", "CUNEIFORM SIGN TAG TIMES SHE", "CUNEIFORM SIGN TAG TIMES SHU", "CUNEIFORM SIGN TAG TIMES TUG2", "CUNEIFORM SIGN TAG TIMES UD", "CUNEIFORM SIGN TAK4", "CUNEIFORM SIGN TAR", "CUNEIFORM SIGN TE", "CUNEIFORM SIGN TE GUNU", "CUNEIFORM SIGN TI", "CUNEIFORM SIGN TI TENU", "CUNEIFORM SIGN TIL", "CUNEIFORM SIGN TIR", "CUNEIFORM SIGN TIR TIMES TAK4", "CUNEIFORM SIGN TIR OVER TIR", "CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR", "CUNEIFORM SIGN TU", "CUNEIFORM SIGN TUG2", "CUNEIFORM SIGN TUK", "CUNEIFORM SIGN TUM", "CUNEIFORM SIGN TUR", "CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA", "CUNEIFORM SIGN U", "CUNEIFORM SIGN U GUD", "CUNEIFORM SIGN U U U", "CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR", "CUNEIFORM SIGN U OVER U SUR OVER SUR", "CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED", "CUNEIFORM SIGN U2", "CUNEIFORM SIGN UB", "CUNEIFORM SIGN UD", "CUNEIFORM SIGN UD KUSHU2", "CUNEIFORM SIGN UD TIMES BAD", "CUNEIFORM SIGN UD TIMES MI", "CUNEIFORM SIGN UD TIMES U PLUS U PLUS U", "CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU", "CUNEIFORM SIGN UD GUNU", "CUNEIFORM SIGN UD SHESHIG", "CUNEIFORM SIGN UD SHESHIG TIMES BAD", "CUNEIFORM SIGN UDUG", "CUNEIFORM SIGN UM", "CUNEIFORM SIGN UM TIMES LAGAB", "CUNEIFORM SIGN UM TIMES ME PLUS DA", "CUNEIFORM SIGN UM TIMES SHA3", "CUNEIFORM SIGN UM TIMES U", "CUNEIFORM SIGN UMBIN", "CUNEIFORM SIGN UMUM", "CUNEIFORM SIGN UMUM TIMES KASKAL", "CUNEIFORM SIGN UMUM TIMES PA", "CUNEIFORM SIGN UN", "CUNEIFORM SIGN UN GUNU", "CUNEIFORM SIGN UR", "CUNEIFORM SIGN UR CROSSING UR", "CUNEIFORM SIGN UR SHESHIG", "CUNEIFORM SIGN UR2", "CUNEIFORM SIGN UR2 TIMES A PLUS HA", "CUNEIFORM SIGN UR2 TIMES A PLUS NA", "CUNEIFORM SIGN UR2 TIMES AL", "CUNEIFORM SIGN UR2 TIMES HA", "CUNEIFORM SIGN UR2 TIMES NUN", "CUNEIFORM SIGN UR2 TIMES U2", "CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH", "CUNEIFORM SIGN UR2 TIMES U2 PLUS BI", "CUNEIFORM SIGN UR4", "CUNEIFORM SIGN URI", "CUNEIFORM SIGN URI3", "CUNEIFORM SIGN URU", "CUNEIFORM SIGN URU TIMES A", "CUNEIFORM SIGN URU TIMES ASHGAB", "CUNEIFORM SIGN URU TIMES BAR", "CUNEIFORM SIGN URU TIMES DUN", "CUNEIFORM SIGN URU TIMES GA", "CUNEIFORM SIGN URU TIMES GAL", "CUNEIFORM SIGN URU TIMES GAN2 TENU", "CUNEIFORM SIGN URU TIMES GAR", "CUNEIFORM SIGN URU TIMES GU", "CUNEIFORM SIGN URU TIMES HA", "CUNEIFORM SIGN URU TIMES IGI", "CUNEIFORM SIGN URU TIMES IM", "CUNEIFORM SIGN URU TIMES ISH", "CUNEIFORM SIGN URU TIMES KI", "CUNEIFORM SIGN URU TIMES LUM", "CUNEIFORM SIGN URU TIMES MIN", "CUNEIFORM SIGN URU TIMES PA", "CUNEIFORM SIGN URU TIMES SHE", "CUNEIFORM SIGN URU TIMES SIG4", "CUNEIFORM SIGN URU TIMES TU", "CUNEIFORM SIGN URU TIMES U PLUS GUD", "CUNEIFORM SIGN URU TIMES UD", "CUNEIFORM SIGN URU TIMES URUDA", "CUNEIFORM SIGN URUDA", "CUNEIFORM SIGN URUDA TIMES U", "CUNEIFORM SIGN USH", "CUNEIFORM SIGN USH TIMES A", "CUNEIFORM SIGN USH TIMES KU", "CUNEIFORM SIGN USH TIMES KUR", "CUNEIFORM SIGN USH TIMES TAK4", "CUNEIFORM SIGN USHX", "CUNEIFORM SIGN USH2", "CUNEIFORM SIGN USHUMX", "CUNEIFORM SIGN UTUKI", "CUNEIFORM SIGN UZ3", "CUNEIFORM SIGN UZ3 TIMES KASKAL", "CUNEIFORM SIGN UZU", "CUNEIFORM SIGN ZA", "CUNEIFORM SIGN ZA TENU", "CUNEIFORM SIGN ZA SQUARED TIMES KUR", "CUNEIFORM SIGN ZAG", "CUNEIFORM SIGN ZAMX", "CUNEIFORM SIGN ZE2", "CUNEIFORM SIGN ZI", "CUNEIFORM SIGN ZI OVER ZI", "CUNEIFORM SIGN ZI3", "CUNEIFORM SIGN ZIB", "CUNEIFORM SIGN ZIB KABA TENU", "CUNEIFORM SIGN ZIG", "CUNEIFORM SIGN ZIZ2", "CUNEIFORM SIGN ZU", "CUNEIFORM SIGN ZU5", "CUNEIFORM SIGN ZU5 TIMES A", "CUNEIFORM SIGN ZUBUR", "CUNEIFORM SIGN ZUM", "CUNEIFORM SIGN KAP ELAMITE", "CUNEIFORM SIGN AB TIMES NUN", "CUNEIFORM SIGN AB2 TIMES A", "CUNEIFORM SIGN AMAR TIMES KUG", "CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH", "CUNEIFORM SIGN DAG3", "CUNEIFORM SIGN DISH PLUS SHU", "CUNEIFORM SIGN DUB TIMES SHE", "CUNEIFORM SIGN EZEN TIMES GUD", "CUNEIFORM SIGN EZEN TIMES SHE", "CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A", "CUNEIFORM SIGN GA2 TIMES ASH2", "CUNEIFORM SIGN GE22", "CUNEIFORM SIGN GIG", "CUNEIFORM SIGN HUSH", "CUNEIFORM SIGN KA TIMES ANSHE", "CUNEIFORM SIGN KA TIMES ASH3", "CUNEIFORM SIGN KA TIMES GISH", "CUNEIFORM SIGN KA TIMES GUD", "CUNEIFORM SIGN KA TIMES HI TIMES ASH2", "CUNEIFORM SIGN KA TIMES LUM", "CUNEIFORM SIGN KA TIMES PA", "CUNEIFORM SIGN KA TIMES SHUL", "CUNEIFORM SIGN KA TIMES TU", "CUNEIFORM SIGN KA TIMES UR2", "CUNEIFORM SIGN LAGAB TIMES GI", "CUNEIFORM SIGN LU2 SHESHIG TIMES BAD", "CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL", "CUNEIFORM SIGN LU2 TIMES SHU", "CUNEIFORM SIGN MESH", "CUNEIFORM SIGN MUSH3 TIMES ZA", "CUNEIFORM SIGN NA4", "CUNEIFORM SIGN NIN", "CUNEIFORM SIGN NIN9", "CUNEIFORM SIGN NINDA2 TIMES BAL", "CUNEIFORM SIGN NINDA2 TIMES GI", "CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES", "CUNEIFORM SIGN PESH2 ASTERISK", "CUNEIFORM SIGN PIR2", "CUNEIFORM SIGN SAG TIMES IGI GUNU", "CUNEIFORM SIGN TI2", "CUNEIFORM SIGN UM TIMES ME", "CUNEIFORM SIGN U U", "CUNEIFORM NUMERIC SIGN TWO ASH", "CUNEIFORM NUMERIC SIGN THREE ASH", "CUNEIFORM NUMERIC SIGN FOUR ASH", "CUNEIFORM NUMERIC SIGN FIVE ASH", "CUNEIFORM NUMERIC SIGN SIX ASH", "CUNEIFORM NUMERIC SIGN SEVEN ASH", "CUNEIFORM NUMERIC SIGN EIGHT ASH", "CUNEIFORM NUMERIC SIGN NINE ASH", "CUNEIFORM NUMERIC SIGN THREE DISH", "CUNEIFORM NUMERIC SIGN FOUR DISH", "CUNEIFORM NUMERIC SIGN FIVE DISH", "CUNEIFORM NUMERIC SIGN SIX DISH", "CUNEIFORM NUMERIC SIGN SEVEN DISH", "CUNEIFORM NUMERIC SIGN EIGHT DISH", "CUNEIFORM NUMERIC SIGN NINE DISH", "CUNEIFORM NUMERIC SIGN FOUR U", "CUNEIFORM NUMERIC SIGN FIVE U", "CUNEIFORM NUMERIC SIGN SIX U", "CUNEIFORM NUMERIC SIGN SEVEN U", "CUNEIFORM NUMERIC SIGN EIGHT U", "CUNEIFORM NUMERIC SIGN NINE U", "CUNEIFORM NUMERIC SIGN ONE GESH2", "CUNEIFORM NUMERIC SIGN TWO GESH2", "CUNEIFORM NUMERIC SIGN THREE GESH2", "CUNEIFORM NUMERIC SIGN FOUR GESH2", "CUNEIFORM NUMERIC SIGN FIVE GESH2", "CUNEIFORM NUMERIC SIGN SIX GESH2", "CUNEIFORM NUMERIC SIGN SEVEN GESH2", "CUNEIFORM NUMERIC SIGN EIGHT GESH2", "CUNEIFORM NUMERIC SIGN NINE GESH2", "CUNEIFORM NUMERIC SIGN ONE GESHU", "CUNEIFORM NUMERIC SIGN TWO GESHU", "CUNEIFORM NUMERIC SIGN THREE GESHU", "CUNEIFORM NUMERIC SIGN FOUR GESHU", "CUNEIFORM NUMERIC SIGN FIVE GESHU", "CUNEIFORM NUMERIC SIGN TWO SHAR2", "CUNEIFORM NUMERIC SIGN THREE SHAR2", "CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM", "CUNEIFORM NUMERIC SIGN FOUR SHAR2", "CUNEIFORM NUMERIC SIGN FIVE SHAR2", "CUNEIFORM NUMERIC SIGN SIX SHAR2", "CUNEIFORM NUMERIC SIGN SEVEN SHAR2", "CUNEIFORM NUMERIC SIGN EIGHT SHAR2", "CUNEIFORM NUMERIC SIGN NINE SHAR2", "CUNEIFORM NUMERIC SIGN ONE SHARU", "CUNEIFORM NUMERIC SIGN TWO SHARU", "CUNEIFORM NUMERIC SIGN THREE SHARU", "CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM", "CUNEIFORM NUMERIC SIGN FOUR SHARU", "CUNEIFORM NUMERIC SIGN FIVE SHARU", "CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH", "CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN", "CUNEIFORM NUMERIC SIGN ONE BURU", "CUNEIFORM NUMERIC SIGN TWO BURU", "CUNEIFORM NUMERIC SIGN THREE BURU", "CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM", "CUNEIFORM NUMERIC SIGN FOUR BURU", "CUNEIFORM NUMERIC SIGN FIVE BURU", "CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16", "CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21", "CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU", "CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4", "CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A", "CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B", "CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9", "CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3", "CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A", "CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B", "CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU", "CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3", "CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU", "CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3", "CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4", "CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A", "CUNEIFORM NUMERIC SIGN TWO ASH TENU", "CUNEIFORM NUMERIC SIGN THREE ASH TENU", "CUNEIFORM NUMERIC SIGN FOUR ASH TENU", "CUNEIFORM NUMERIC SIGN FIVE ASH TENU", "CUNEIFORM NUMERIC SIGN SIX ASH TENU", "CUNEIFORM NUMERIC SIGN ONE BAN2", "CUNEIFORM NUMERIC SIGN TWO BAN2", "CUNEIFORM NUMERIC SIGN THREE BAN2", "CUNEIFORM NUMERIC SIGN FOUR BAN2", "CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM", "CUNEIFORM NUMERIC SIGN FIVE BAN2", "CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM", "CUNEIFORM NUMERIC SIGN NIGIDAMIN", "CUNEIFORM NUMERIC SIGN NIGIDAESH", "CUNEIFORM NUMERIC SIGN ONE ESHE3", "CUNEIFORM NUMERIC SIGN TWO ESHE3", "CUNEIFORM NUMERIC SIGN ONE THIRD DISH", "CUNEIFORM NUMERIC SIGN TWO THIRDS DISH", "CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH", "CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A", "CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A", "CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH", "CUNEIFORM NUMERIC SIGN ONE QUARTER ASH", "CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH", "CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER", "CUNEIFORM NUMERIC SIGN ONE QUARTER GUR", "CUNEIFORM NUMERIC SIGN ONE HALF GUR", "CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD", "CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS", "CUNEIFORM NUMERIC SIGN ELAMITE FORTY", "CUNEIFORM NUMERIC SIGN ELAMITE FIFTY", "CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM", "CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM", "CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM", "CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM", "CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM", "CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM", "CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER", "CUNEIFORM PUNCTUATION SIGN VERTICAL COLON", "CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON", "CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON", "CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON", "CUNEIFORM SIGN AB TIMES NUN TENU", "CUNEIFORM SIGN AB TIMES SHU2", "CUNEIFORM SIGN AD TIMES ESH2", "CUNEIFORM SIGN BAD TIMES DISH TENU", "CUNEIFORM SIGN BAHAR2 TIMES AB2", "CUNEIFORM SIGN BAHAR2 TIMES NI", "CUNEIFORM SIGN BAHAR2 TIMES ZA", "CUNEIFORM SIGN BU OVER BU TIMES NA2", "CUNEIFORM SIGN DA TIMES TAK4", "CUNEIFORM SIGN DAG TIMES KUR", "CUNEIFORM SIGN DIM TIMES IGI", "CUNEIFORM SIGN DIM TIMES U U U", "CUNEIFORM SIGN DIM2 TIMES UD", "CUNEIFORM SIGN DUG TIMES ANSHE", "CUNEIFORM SIGN DUG TIMES ASH", "CUNEIFORM SIGN DUG TIMES ASH AT LEFT", "CUNEIFORM SIGN DUG TIMES DIN", "CUNEIFORM SIGN DUG TIMES DUN", "CUNEIFORM SIGN DUG TIMES ERIN2", "CUNEIFORM SIGN DUG TIMES GA", "CUNEIFORM SIGN DUG TIMES GI", "CUNEIFORM SIGN DUG TIMES GIR2 GUNU", "CUNEIFORM SIGN DUG TIMES GISH", "CUNEIFORM SIGN DUG TIMES HA", "CUNEIFORM SIGN DUG TIMES HI", "CUNEIFORM SIGN DUG TIMES IGI GUNU", "CUNEIFORM SIGN DUG TIMES KASKAL", "CUNEIFORM SIGN DUG TIMES KUR", "CUNEIFORM SIGN DUG TIMES KUSHU2", "CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL", "CUNEIFORM SIGN DUG TIMES LAK-020", "CUNEIFORM SIGN DUG TIMES LAM", "CUNEIFORM SIGN DUG TIMES LAM TIMES KUR", "CUNEIFORM SIGN DUG TIMES LUH PLUS GISH", "CUNEIFORM SIGN DUG TIMES MASH", "CUNEIFORM SIGN DUG TIMES MES", "CUNEIFORM SIGN DUG TIMES MI", "CUNEIFORM SIGN DUG TIMES NI", "CUNEIFORM SIGN DUG TIMES PI", "CUNEIFORM SIGN DUG TIMES SHE", "CUNEIFORM SIGN DUG TIMES SI GUNU", "CUNEIFORM SIGN E2 TIMES KUR", "CUNEIFORM SIGN E2 TIMES PAP", "CUNEIFORM SIGN ERIN2 X", "CUNEIFORM SIGN ESH2 CROSSING ESH2", "CUNEIFORM SIGN EZEN SHESHIG TIMES ASH", "CUNEIFORM SIGN EZEN SHESHIG TIMES HI", "CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU", "CUNEIFORM SIGN EZEN SHESHIG TIMES LA", "CUNEIFORM SIGN EZEN SHESHIG TIMES LAL", "CUNEIFORM SIGN EZEN SHESHIG TIMES ME", "CUNEIFORM SIGN EZEN SHESHIG TIMES MES", "CUNEIFORM SIGN EZEN SHESHIG TIMES SU", "CUNEIFORM SIGN EZEN TIMES SU", "CUNEIFORM SIGN GA2 TIMES BAHAR2", "CUNEIFORM SIGN GA2 TIMES DIM GUNU", "CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU", "CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL", "CUNEIFORM SIGN GA2 TIMES EREN", "CUNEIFORM SIGN GA2 TIMES GA", "CUNEIFORM SIGN GA2 TIMES GAR PLUS DI", "CUNEIFORM SIGN GA2 TIMES GAR PLUS NE", "CUNEIFORM SIGN GA2 TIMES HA PLUS A", "CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL", "CUNEIFORM SIGN GA2 TIMES LAM", "CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR", "CUNEIFORM SIGN GA2 TIMES LUH", "CUNEIFORM SIGN GA2 TIMES MUSH", "CUNEIFORM SIGN GA2 TIMES NE", "CUNEIFORM SIGN GA2 TIMES NE PLUS E2", "CUNEIFORM SIGN GA2 TIMES NE PLUS GI", "CUNEIFORM SIGN GA2 TIMES SHIM", "CUNEIFORM SIGN GA2 TIMES ZIZ2", "CUNEIFORM SIGN GABA ROTATED NINETY DEGREES", "CUNEIFORM SIGN GESHTIN TIMES U", "CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH", "CUNEIFORM SIGN GU2 TIMES IGI GUNU", "CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4", "CUNEIFORM SIGN HA TENU GUNU", "CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH", "CUNEIFORM SIGN KA TIMES BU", "CUNEIFORM SIGN KA TIMES KA", "CUNEIFORM SIGN KA TIMES U U U", "CUNEIFORM SIGN KA TIMES UR", "CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU", "CUNEIFORM SIGN LAK-003", "CUNEIFORM SIGN LAK-021", "CUNEIFORM SIGN LAK-025", "CUNEIFORM SIGN LAK-030", "CUNEIFORM SIGN LAK-050", "CUNEIFORM SIGN LAK-051", "CUNEIFORM SIGN LAK-062", "CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU", "CUNEIFORM SIGN LAK-080", "CUNEIFORM SIGN LAK-081 OVER LAK-081", "CUNEIFORM SIGN LAK-092", "CUNEIFORM SIGN LAK-130", "CUNEIFORM SIGN LAK-142", "CUNEIFORM SIGN LAK-210", "CUNEIFORM SIGN LAK-219", "CUNEIFORM SIGN LAK-220", "CUNEIFORM SIGN LAK-225", "CUNEIFORM SIGN LAK-228", "CUNEIFORM SIGN LAK-238", "CUNEIFORM SIGN LAK-265", "CUNEIFORM SIGN LAK-266", "CUNEIFORM SIGN LAK-343", "CUNEIFORM SIGN LAK-347", "CUNEIFORM SIGN LAK-348", "CUNEIFORM SIGN LAK-383", "CUNEIFORM SIGN LAK-384", "CUNEIFORM SIGN LAK-390", "CUNEIFORM SIGN LAK-441", "CUNEIFORM SIGN LAK-449", "CUNEIFORM SIGN LAK-449 TIMES GU", "CUNEIFORM SIGN LAK-449 TIMES IGI", "CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3", "CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3", "CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA", "CUNEIFORM SIGN LAK-450", "CUNEIFORM SIGN LAK-457", "CUNEIFORM SIGN LAK-470", "CUNEIFORM SIGN LAK-483", "CUNEIFORM SIGN LAK-490", "CUNEIFORM SIGN LAK-492", "CUNEIFORM SIGN LAK-493", "CUNEIFORM SIGN LAK-495", "CUNEIFORM SIGN LAK-550", "CUNEIFORM SIGN LAK-608", "CUNEIFORM SIGN LAK-617", "CUNEIFORM SIGN LAK-617 TIMES ASH", "CUNEIFORM SIGN LAK-617 TIMES BAD", "CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU", "CUNEIFORM SIGN LAK-617 TIMES KU3", "CUNEIFORM SIGN LAK-617 TIMES LA", "CUNEIFORM SIGN LAK-617 TIMES TAR", "CUNEIFORM SIGN LAK-617 TIMES TE", "CUNEIFORM SIGN LAK-617 TIMES U2", "CUNEIFORM SIGN LAK-617 TIMES UD", "CUNEIFORM SIGN LAK-617 TIMES URUDA", "CUNEIFORM SIGN LAK-636", "CUNEIFORM SIGN LAK-648", "CUNEIFORM SIGN LAK-648 TIMES DUB", "CUNEIFORM SIGN LAK-648 TIMES GA", "CUNEIFORM SIGN LAK-648 TIMES IGI", "CUNEIFORM SIGN LAK-648 TIMES IGI GUNU", "CUNEIFORM SIGN LAK-648 TIMES NI", "CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3", "CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI", "CUNEIFORM SIGN LAK-648 TIMES UD", "CUNEIFORM SIGN LAK-648 TIMES URUDA", "CUNEIFORM SIGN LAK-724", "CUNEIFORM SIGN LAK-749", "CUNEIFORM SIGN LU2 GUNU TIMES ASH", "CUNEIFORM SIGN LU2 TIMES DISH", "CUNEIFORM SIGN LU2 TIMES HAL", "CUNEIFORM SIGN LU2 TIMES PAP", "CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3", "CUNEIFORM SIGN LU2 TIMES TAK4", "CUNEIFORM SIGN MI PLUS ZA7", "CUNEIFORM SIGN MUSH OVER MUSH TIMES GA", "CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK", "CUNEIFORM SIGN NINDA2 TIMES DIM GUNU", "CUNEIFORM SIGN NINDA2 TIMES GISH", "CUNEIFORM SIGN NINDA2 TIMES GUL", "CUNEIFORM SIGN NINDA2 TIMES HI", "CUNEIFORM SIGN NINDA2 TIMES KESH2", "CUNEIFORM SIGN NINDA2 TIMES LAK-050", "CUNEIFORM SIGN NINDA2 TIMES MASH", "CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP", "CUNEIFORM SIGN NINDA2 TIMES U", "CUNEIFORM SIGN NINDA2 TIMES U PLUS U", "CUNEIFORM SIGN NINDA2 TIMES URUDA", "CUNEIFORM SIGN SAG GUNU TIMES HA", "CUNEIFORM SIGN SAG TIMES EN", "CUNEIFORM SIGN SAG TIMES SHE AT LEFT", "CUNEIFORM SIGN SAG TIMES TAK4", "CUNEIFORM SIGN SHA6 TENU", "CUNEIFORM SIGN SHE OVER SHE", "CUNEIFORM SIGN SHE PLUS HUB2", "CUNEIFORM SIGN SHE PLUS NAM2", "CUNEIFORM SIGN SHE PLUS SAR", "CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI", "CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN", "CUNEIFORM SIGN SI TIMES TAK4", "CUNEIFORM SIGN TAK4 PLUS SAG", "CUNEIFORM SIGN TUM TIMES GAN2 TENU", "CUNEIFORM SIGN TUM TIMES THREE DISH", "CUNEIFORM SIGN UR2 INVERTED", "CUNEIFORM SIGN UR2 TIMES UD", "CUNEIFORM SIGN URU TIMES DARA3", "CUNEIFORM SIGN URU TIMES LAK-668", "CUNEIFORM SIGN URU TIMES LU3", "CUNEIFORM SIGN ZA7", "CUNEIFORM SIGN ZU OVER ZU PLUS SAR", "CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU", "EGYPTIAN HIEROGLYPH A001", "EGYPTIAN HIEROGLYPH A002", "EGYPTIAN HIEROGLYPH A003", "EGYPTIAN HIEROGLYPH A004", "EGYPTIAN HIEROGLYPH A005", "EGYPTIAN HIEROGLYPH A005A", "EGYPTIAN HIEROGLYPH A006", "EGYPTIAN HIEROGLYPH A006A", "EGYPTIAN HIEROGLYPH A006B", "EGYPTIAN HIEROGLYPH A007", "EGYPTIAN HIEROGLYPH A008", "EGYPTIAN HIEROGLYPH A009", "EGYPTIAN HIEROGLYPH A010", "EGYPTIAN HIEROGLYPH A011", "EGYPTIAN HIEROGLYPH A012", "EGYPTIAN HIEROGLYPH A013", "EGYPTIAN HIEROGLYPH A014", "EGYPTIAN HIEROGLYPH A014A", "EGYPTIAN HIEROGLYPH A015", "EGYPTIAN HIEROGLYPH A016", "EGYPTIAN HIEROGLYPH A017", "EGYPTIAN HIEROGLYPH A017A", "EGYPTIAN HIEROGLYPH A018", "EGYPTIAN HIEROGLYPH A019", "EGYPTIAN HIEROGLYPH A020", "EGYPTIAN HIEROGLYPH A021", "EGYPTIAN HIEROGLYPH A022", "EGYPTIAN HIEROGLYPH A023", "EGYPTIAN HIEROGLYPH A024", "EGYPTIAN HIEROGLYPH A025", "EGYPTIAN HIEROGLYPH A026", "EGYPTIAN HIEROGLYPH A027", "EGYPTIAN HIEROGLYPH A028", "EGYPTIAN HIEROGLYPH A029", "EGYPTIAN HIEROGLYPH A030", "EGYPTIAN HIEROGLYPH A031", "EGYPTIAN HIEROGLYPH A032", "EGYPTIAN HIEROGLYPH A032A", "EGYPTIAN HIEROGLYPH A033", "EGYPTIAN HIEROGLYPH A034", "EGYPTIAN HIEROGLYPH A035", "EGYPTIAN HIEROGLYPH A036", "EGYPTIAN HIEROGLYPH A037", "EGYPTIAN HIEROGLYPH A038", "EGYPTIAN HIEROGLYPH A039", "EGYPTIAN HIEROGLYPH A040", "EGYPTIAN HIEROGLYPH A040A", "EGYPTIAN HIEROGLYPH A041", "EGYPTIAN HIEROGLYPH A042", "EGYPTIAN HIEROGLYPH A042A", "EGYPTIAN HIEROGLYPH A043", "EGYPTIAN HIEROGLYPH A043A", "EGYPTIAN HIEROGLYPH A044", "EGYPTIAN HIEROGLYPH A045", "EGYPTIAN HIEROGLYPH A045A", "EGYPTIAN HIEROGLYPH A046", "EGYPTIAN HIEROGLYPH A047", "EGYPTIAN HIEROGLYPH A048", "EGYPTIAN HIEROGLYPH A049", "EGYPTIAN HIEROGLYPH A050", "EGYPTIAN HIEROGLYPH A051", "EGYPTIAN HIEROGLYPH A052", "EGYPTIAN HIEROGLYPH A053", "EGYPTIAN HIEROGLYPH A054", "EGYPTIAN HIEROGLYPH A055", "EGYPTIAN HIEROGLYPH A056", "EGYPTIAN HIEROGLYPH A057", "EGYPTIAN HIEROGLYPH A058", "EGYPTIAN HIEROGLYPH A059", "EGYPTIAN HIEROGLYPH A060", "EGYPTIAN HIEROGLYPH A061", "EGYPTIAN HIEROGLYPH A062", "EGYPTIAN HIEROGLYPH A063", "EGYPTIAN HIEROGLYPH A064", "EGYPTIAN HIEROGLYPH A065", "EGYPTIAN HIEROGLYPH A066", "EGYPTIAN HIEROGLYPH A067", "EGYPTIAN HIEROGLYPH A068", "EGYPTIAN HIEROGLYPH A069", "EGYPTIAN HIEROGLYPH A070", "EGYPTIAN HIEROGLYPH B001", "EGYPTIAN HIEROGLYPH B002", "EGYPTIAN HIEROGLYPH B003", "EGYPTIAN HIEROGLYPH B004", "EGYPTIAN HIEROGLYPH B005", "EGYPTIAN HIEROGLYPH B005A", "EGYPTIAN HIEROGLYPH B006", "EGYPTIAN HIEROGLYPH B007", "EGYPTIAN HIEROGLYPH B008", "EGYPTIAN HIEROGLYPH B009", "EGYPTIAN HIEROGLYPH C001", "EGYPTIAN HIEROGLYPH C002", "EGYPTIAN HIEROGLYPH C002A", "EGYPTIAN HIEROGLYPH C002B", "EGYPTIAN HIEROGLYPH C002C", "EGYPTIAN HIEROGLYPH C003", "EGYPTIAN HIEROGLYPH C004", "EGYPTIAN HIEROGLYPH C005", "EGYPTIAN HIEROGLYPH C006", "EGYPTIAN HIEROGLYPH C007", "EGYPTIAN HIEROGLYPH C008", "EGYPTIAN HIEROGLYPH C009", "EGYPTIAN HIEROGLYPH C010", "EGYPTIAN HIEROGLYPH C010A", "EGYPTIAN HIEROGLYPH C011", "EGYPTIAN HIEROGLYPH C012", "EGYPTIAN HIEROGLYPH C013", "EGYPTIAN HIEROGLYPH C014", "EGYPTIAN HIEROGLYPH C015", "EGYPTIAN HIEROGLYPH C016", "EGYPTIAN HIEROGLYPH C017", "EGYPTIAN HIEROGLYPH C018", "EGYPTIAN HIEROGLYPH C019", "EGYPTIAN HIEROGLYPH C020", "EGYPTIAN HIEROGLYPH C021", "EGYPTIAN HIEROGLYPH C022", "EGYPTIAN HIEROGLYPH C023", "EGYPTIAN HIEROGLYPH C024", "EGYPTIAN HIEROGLYPH D001", "EGYPTIAN HIEROGLYPH D002", "EGYPTIAN HIEROGLYPH D003", "EGYPTIAN HIEROGLYPH D004", "EGYPTIAN HIEROGLYPH D005", "EGYPTIAN HIEROGLYPH D006", "EGYPTIAN HIEROGLYPH D007", "EGYPTIAN HIEROGLYPH D008", "EGYPTIAN HIEROGLYPH D008A", "EGYPTIAN HIEROGLYPH D009", "EGYPTIAN HIEROGLYPH D010", "EGYPTIAN HIEROGLYPH D011", "EGYPTIAN HIEROGLYPH D012", "EGYPTIAN HIEROGLYPH D013", "EGYPTIAN HIEROGLYPH D014", "EGYPTIAN HIEROGLYPH D015", "EGYPTIAN HIEROGLYPH D016", "EGYPTIAN HIEROGLYPH D017", "EGYPTIAN HIEROGLYPH D018", "EGYPTIAN HIEROGLYPH D019", "EGYPTIAN HIEROGLYPH D020", "EGYPTIAN HIEROGLYPH D021", "EGYPTIAN HIEROGLYPH D022", "EGYPTIAN HIEROGLYPH D023", "EGYPTIAN HIEROGLYPH D024", "EGYPTIAN HIEROGLYPH D025", "EGYPTIAN HIEROGLYPH D026", "EGYPTIAN HIEROGLYPH D027", "EGYPTIAN HIEROGLYPH D027A", "EGYPTIAN HIEROGLYPH D028", "EGYPTIAN HIEROGLYPH D029", "EGYPTIAN HIEROGLYPH D030", "EGYPTIAN HIEROGLYPH D031", "EGYPTIAN HIEROGLYPH D031A", "EGYPTIAN HIEROGLYPH D032", "EGYPTIAN HIEROGLYPH D033", "EGYPTIAN HIEROGLYPH D034", "EGYPTIAN HIEROGLYPH D034A", "EGYPTIAN HIEROGLYPH D035", "EGYPTIAN HIEROGLYPH D036", "EGYPTIAN HIEROGLYPH D037", "EGYPTIAN HIEROGLYPH D038", "EGYPTIAN HIEROGLYPH D039", "EGYPTIAN HIEROGLYPH D040", "EGYPTIAN HIEROGLYPH D041", "EGYPTIAN HIEROGLYPH D042", "EGYPTIAN HIEROGLYPH D043", "EGYPTIAN HIEROGLYPH D044", "EGYPTIAN HIEROGLYPH D045", "EGYPTIAN HIEROGLYPH D046", "EGYPTIAN HIEROGLYPH D046A", "EGYPTIAN HIEROGLYPH D047", "EGYPTIAN HIEROGLYPH D048", "EGYPTIAN HIEROGLYPH D048A", "EGYPTIAN HIEROGLYPH D049", "EGYPTIAN HIEROGLYPH D050", "EGYPTIAN HIEROGLYPH D050A", "EGYPTIAN HIEROGLYPH D050B", "EGYPTIAN HIEROGLYPH D050C", "EGYPTIAN HIEROGLYPH D050D", "EGYPTIAN HIEROGLYPH D050E", "EGYPTIAN HIEROGLYPH D050F", "EGYPTIAN HIEROGLYPH D050G", "EGYPTIAN HIEROGLYPH D050H", "EGYPTIAN HIEROGLYPH D050I", "EGYPTIAN HIEROGLYPH D051", "EGYPTIAN HIEROGLYPH D052", "EGYPTIAN HIEROGLYPH D052A", "EGYPTIAN HIEROGLYPH D053", "EGYPTIAN HIEROGLYPH D054", "EGYPTIAN HIEROGLYPH D054A", "EGYPTIAN HIEROGLYPH D055", "EGYPTIAN HIEROGLYPH D056", "EGYPTIAN HIEROGLYPH D057", "EGYPTIAN HIEROGLYPH D058", "EGYPTIAN HIEROGLYPH D059", "EGYPTIAN HIEROGLYPH D060", "EGYPTIAN HIEROGLYPH D061", "EGYPTIAN HIEROGLYPH D062", "EGYPTIAN HIEROGLYPH D063", "EGYPTIAN HIEROGLYPH D064", "EGYPTIAN HIEROGLYPH D065", "EGYPTIAN HIEROGLYPH D066", "EGYPTIAN HIEROGLYPH D067", "EGYPTIAN HIEROGLYPH D067A", "EGYPTIAN HIEROGLYPH D067B", "EGYPTIAN HIEROGLYPH D067C", "EGYPTIAN HIEROGLYPH D067D", "EGYPTIAN HIEROGLYPH D067E", "EGYPTIAN HIEROGLYPH D067F", "EGYPTIAN HIEROGLYPH D067G", "EGYPTIAN HIEROGLYPH D067H", "EGYPTIAN HIEROGLYPH E001", "EGYPTIAN HIEROGLYPH E002", "EGYPTIAN HIEROGLYPH E003", "EGYPTIAN HIEROGLYPH E004", "EGYPTIAN HIEROGLYPH E005", "EGYPTIAN HIEROGLYPH E006", "EGYPTIAN HIEROGLYPH E007", "EGYPTIAN HIEROGLYPH E008", "EGYPTIAN HIEROGLYPH E008A", "EGYPTIAN HIEROGLYPH E009", "EGYPTIAN HIEROGLYPH E009A", "EGYPTIAN HIEROGLYPH E010", "EGYPTIAN HIEROGLYPH E011", "EGYPTIAN HIEROGLYPH E012", "EGYPTIAN HIEROGLYPH E013", "EGYPTIAN HIEROGLYPH E014", "EGYPTIAN HIEROGLYPH E015", "EGYPTIAN HIEROGLYPH E016", "EGYPTIAN HIEROGLYPH E016A", "EGYPTIAN HIEROGLYPH E017", "EGYPTIAN HIEROGLYPH E017A", "EGYPTIAN HIEROGLYPH E018", "EGYPTIAN HIEROGLYPH E019", "EGYPTIAN HIEROGLYPH E020", "EGYPTIAN HIEROGLYPH E020A", "EGYPTIAN HIEROGLYPH E021", "EGYPTIAN HIEROGLYPH E022", "EGYPTIAN HIEROGLYPH E023", "EGYPTIAN HIEROGLYPH E024", "EGYPTIAN HIEROGLYPH E025", "EGYPTIAN HIEROGLYPH E026", "EGYPTIAN HIEROGLYPH E027", "EGYPTIAN HIEROGLYPH E028", "EGYPTIAN HIEROGLYPH E028A", "EGYPTIAN HIEROGLYPH E029", "EGYPTIAN HIEROGLYPH E030", "EGYPTIAN HIEROGLYPH E031", "EGYPTIAN HIEROGLYPH E032", "EGYPTIAN HIEROGLYPH E033", "EGYPTIAN HIEROGLYPH E034", "EGYPTIAN HIEROGLYPH E034A", "EGYPTIAN HIEROGLYPH E036", "EGYPTIAN HIEROGLYPH E037", "EGYPTIAN HIEROGLYPH E038", "EGYPTIAN HIEROGLYPH F001", "EGYPTIAN HIEROGLYPH F001A", "EGYPTIAN HIEROGLYPH F002", "EGYPTIAN HIEROGLYPH F003", "EGYPTIAN HIEROGLYPH F004", "EGYPTIAN HIEROGLYPH F005", "EGYPTIAN HIEROGLYPH F006", "EGYPTIAN HIEROGLYPH F007", "EGYPTIAN HIEROGLYPH F008", "EGYPTIAN HIEROGLYPH F009", "EGYPTIAN HIEROGLYPH F010", "EGYPTIAN HIEROGLYPH F011", "EGYPTIAN HIEROGLYPH F012", "EGYPTIAN HIEROGLYPH F013", "EGYPTIAN HIEROGLYPH F013A", "EGYPTIAN HIEROGLYPH F014", "EGYPTIAN HIEROGLYPH F015", "EGYPTIAN HIEROGLYPH F016", "EGYPTIAN HIEROGLYPH F017", "EGYPTIAN HIEROGLYPH F018", "EGYPTIAN HIEROGLYPH F019", "EGYPTIAN HIEROGLYPH F020", "EGYPTIAN HIEROGLYPH F021", "EGYPTIAN HIEROGLYPH F021A", "EGYPTIAN HIEROGLYPH F022", "EGYPTIAN HIEROGLYPH F023", "EGYPTIAN HIEROGLYPH F024", "EGYPTIAN HIEROGLYPH F025", "EGYPTIAN HIEROGLYPH F026", "EGYPTIAN HIEROGLYPH F027", "EGYPTIAN HIEROGLYPH F028", "EGYPTIAN HIEROGLYPH F029", "EGYPTIAN HIEROGLYPH F030", "EGYPTIAN HIEROGLYPH F031", "EGYPTIAN HIEROGLYPH F031A", "EGYPTIAN HIEROGLYPH F032", "EGYPTIAN HIEROGLYPH F033", "EGYPTIAN HIEROGLYPH F034", "EGYPTIAN HIEROGLYPH F035", "EGYPTIAN HIEROGLYPH F036", "EGYPTIAN HIEROGLYPH F037", "EGYPTIAN HIEROGLYPH F037A", "EGYPTIAN HIEROGLYPH F038", "EGYPTIAN HIEROGLYPH F038A", "EGYPTIAN HIEROGLYPH F039", "EGYPTIAN HIEROGLYPH F040", "EGYPTIAN HIEROGLYPH F041", "EGYPTIAN HIEROGLYPH F042", "EGYPTIAN HIEROGLYPH F043", "EGYPTIAN HIEROGLYPH F044", "EGYPTIAN HIEROGLYPH F045", "EGYPTIAN HIEROGLYPH F045A", "EGYPTIAN HIEROGLYPH F046", "EGYPTIAN HIEROGLYPH F046A", "EGYPTIAN HIEROGLYPH F047", "EGYPTIAN HIEROGLYPH F047A", "EGYPTIAN HIEROGLYPH F048", "EGYPTIAN HIEROGLYPH F049", "EGYPTIAN HIEROGLYPH F050", "EGYPTIAN HIEROGLYPH F051", "EGYPTIAN HIEROGLYPH F051A", "EGYPTIAN HIEROGLYPH F051B", "EGYPTIAN HIEROGLYPH F051C", "EGYPTIAN HIEROGLYPH F052", "EGYPTIAN HIEROGLYPH F053", "EGYPTIAN HIEROGLYPH G001", "EGYPTIAN HIEROGLYPH G002", "EGYPTIAN HIEROGLYPH G003", "EGYPTIAN HIEROGLYPH G004", "EGYPTIAN HIEROGLYPH G005", "EGYPTIAN HIEROGLYPH G006", "EGYPTIAN HIEROGLYPH G006A", "EGYPTIAN HIEROGLYPH G007", "EGYPTIAN HIEROGLYPH G007A", "EGYPTIAN HIEROGLYPH G007B", "EGYPTIAN HIEROGLYPH G008", "EGYPTIAN HIEROGLYPH G009", "EGYPTIAN HIEROGLYPH G010", "EGYPTIAN HIEROGLYPH G011", "EGYPTIAN HIEROGLYPH G011A", "EGYPTIAN HIEROGLYPH G012", "EGYPTIAN HIEROGLYPH G013", "EGYPTIAN HIEROGLYPH G014", "EGYPTIAN HIEROGLYPH G015", "EGYPTIAN HIEROGLYPH G016", "EGYPTIAN HIEROGLYPH G017", "EGYPTIAN HIEROGLYPH G018", "EGYPTIAN HIEROGLYPH G019", "EGYPTIAN HIEROGLYPH G020", "EGYPTIAN HIEROGLYPH G020A", "EGYPTIAN HIEROGLYPH G021", "EGYPTIAN HIEROGLYPH G022", "EGYPTIAN HIEROGLYPH G023", "EGYPTIAN HIEROGLYPH G024", "EGYPTIAN HIEROGLYPH G025", "EGYPTIAN HIEROGLYPH G026", "EGYPTIAN HIEROGLYPH G026A", "EGYPTIAN HIEROGLYPH G027", "EGYPTIAN HIEROGLYPH G028", "EGYPTIAN HIEROGLYPH G029", "EGYPTIAN HIEROGLYPH G030", "EGYPTIAN HIEROGLYPH G031", "EGYPTIAN HIEROGLYPH G032", "EGYPTIAN HIEROGLYPH G033", "EGYPTIAN HIEROGLYPH G034", "EGYPTIAN HIEROGLYPH G035", "EGYPTIAN HIEROGLYPH G036", "EGYPTIAN HIEROGLYPH G036A", "EGYPTIAN HIEROGLYPH G037", "EGYPTIAN HIEROGLYPH G037A", "EGYPTIAN HIEROGLYPH G038", "EGYPTIAN HIEROGLYPH G039", "EGYPTIAN HIEROGLYPH G040", "EGYPTIAN HIEROGLYPH G041", "EGYPTIAN HIEROGLYPH G042", "EGYPTIAN HIEROGLYPH G043", "EGYPTIAN HIEROGLYPH G043A", "EGYPTIAN HIEROGLYPH G044", "EGYPTIAN HIEROGLYPH G045", "EGYPTIAN HIEROGLYPH G045A", "EGYPTIAN HIEROGLYPH G046", "EGYPTIAN HIEROGLYPH G047", "EGYPTIAN HIEROGLYPH G048", "EGYPTIAN HIEROGLYPH G049", "EGYPTIAN HIEROGLYPH G050", "EGYPTIAN HIEROGLYPH G051", "EGYPTIAN HIEROGLYPH G052", "EGYPTIAN HIEROGLYPH G053", "EGYPTIAN HIEROGLYPH G054", "EGYPTIAN HIEROGLYPH H001", "EGYPTIAN HIEROGLYPH H002", "EGYPTIAN HIEROGLYPH H003", "EGYPTIAN HIEROGLYPH H004", "EGYPTIAN HIEROGLYPH H005", "EGYPTIAN HIEROGLYPH H006", "EGYPTIAN HIEROGLYPH H006A", "EGYPTIAN HIEROGLYPH H007", "EGYPTIAN HIEROGLYPH H008", "EGYPTIAN HIEROGLYPH I001", "EGYPTIAN HIEROGLYPH I002", "EGYPTIAN HIEROGLYPH I003", "EGYPTIAN HIEROGLYPH I004", "EGYPTIAN HIEROGLYPH I005", "EGYPTIAN HIEROGLYPH I005A", "EGYPTIAN HIEROGLYPH I006", "EGYPTIAN HIEROGLYPH I007", "EGYPTIAN HIEROGLYPH I008", "EGYPTIAN HIEROGLYPH I009", "EGYPTIAN HIEROGLYPH I009A", "EGYPTIAN HIEROGLYPH I010", "EGYPTIAN HIEROGLYPH I010A", "EGYPTIAN HIEROGLYPH I011", "EGYPTIAN HIEROGLYPH I011A", "EGYPTIAN HIEROGLYPH I012", "EGYPTIAN HIEROGLYPH I013", "EGYPTIAN HIEROGLYPH I014", "EGYPTIAN HIEROGLYPH I015", "EGYPTIAN HIEROGLYPH K001", "EGYPTIAN HIEROGLYPH K002", "EGYPTIAN HIEROGLYPH K003", "EGYPTIAN HIEROGLYPH K004", "EGYPTIAN HIEROGLYPH K005", "EGYPTIAN HIEROGLYPH K006", "EGYPTIAN HIEROGLYPH K007", "EGYPTIAN HIEROGLYPH K008", "EGYPTIAN HIEROGLYPH L001", "EGYPTIAN HIEROGLYPH L002", "EGYPTIAN HIEROGLYPH L002A", "EGYPTIAN HIEROGLYPH L003", "EGYPTIAN HIEROGLYPH L004", "EGYPTIAN HIEROGLYPH L005", "EGYPTIAN HIEROGLYPH L006", "EGYPTIAN HIEROGLYPH L006A", "EGYPTIAN HIEROGLYPH L007", "EGYPTIAN HIEROGLYPH L008", "EGYPTIAN HIEROGLYPH M001", "EGYPTIAN HIEROGLYPH M001A", "EGYPTIAN HIEROGLYPH M001B", "EGYPTIAN HIEROGLYPH M002", "EGYPTIAN HIEROGLYPH M003", "EGYPTIAN HIEROGLYPH M003A", "EGYPTIAN HIEROGLYPH M004", "EGYPTIAN HIEROGLYPH M005", "EGYPTIAN HIEROGLYPH M006", "EGYPTIAN HIEROGLYPH M007", "EGYPTIAN HIEROGLYPH M008", "EGYPTIAN HIEROGLYPH M009", "EGYPTIAN HIEROGLYPH M010", "EGYPTIAN HIEROGLYPH M010A", "EGYPTIAN HIEROGLYPH M011", "EGYPTIAN HIEROGLYPH M012", "EGYPTIAN HIEROGLYPH M012A", "EGYPTIAN HIEROGLYPH M012B", "EGYPTIAN HIEROGLYPH M012C", "EGYPTIAN HIEROGLYPH M012D", "EGYPTIAN HIEROGLYPH M012E", "EGYPTIAN HIEROGLYPH M012F", "EGYPTIAN HIEROGLYPH M012G", "EGYPTIAN HIEROGLYPH M012H", "EGYPTIAN HIEROGLYPH M013", "EGYPTIAN HIEROGLYPH M014", "EGYPTIAN HIEROGLYPH M015", "EGYPTIAN HIEROGLYPH M015A", "EGYPTIAN HIEROGLYPH M016", "EGYPTIAN HIEROGLYPH M016A", "EGYPTIAN HIEROGLYPH M017", "EGYPTIAN HIEROGLYPH M017A", "EGYPTIAN HIEROGLYPH M018", "EGYPTIAN HIEROGLYPH M019", "EGYPTIAN HIEROGLYPH M020", "EGYPTIAN HIEROGLYPH M021", "EGYPTIAN HIEROGLYPH M022", "EGYPTIAN HIEROGLYPH M022A", "EGYPTIAN HIEROGLYPH M023", "EGYPTIAN HIEROGLYPH M024", "EGYPTIAN HIEROGLYPH M024A", "EGYPTIAN HIEROGLYPH M025", "EGYPTIAN HIEROGLYPH M026", "EGYPTIAN HIEROGLYPH M027", "EGYPTIAN HIEROGLYPH M028", "EGYPTIAN HIEROGLYPH M028A", "EGYPTIAN HIEROGLYPH M029", "EGYPTIAN HIEROGLYPH M030", "EGYPTIAN HIEROGLYPH M031", "EGYPTIAN HIEROGLYPH M031A", "EGYPTIAN HIEROGLYPH M032", "EGYPTIAN HIEROGLYPH M033", "EGYPTIAN HIEROGLYPH M033A", "EGYPTIAN HIEROGLYPH M033B", "EGYPTIAN HIEROGLYPH M034", "EGYPTIAN HIEROGLYPH M035", "EGYPTIAN HIEROGLYPH M036", "EGYPTIAN HIEROGLYPH M037", "EGYPTIAN HIEROGLYPH M038", "EGYPTIAN HIEROGLYPH M039", "EGYPTIAN HIEROGLYPH M040", "EGYPTIAN HIEROGLYPH M040A", "EGYPTIAN HIEROGLYPH M041", "EGYPTIAN HIEROGLYPH M042", "EGYPTIAN HIEROGLYPH M043", "EGYPTIAN HIEROGLYPH M044", "EGYPTIAN HIEROGLYPH N001", "EGYPTIAN HIEROGLYPH N002", "EGYPTIAN HIEROGLYPH N003", "EGYPTIAN HIEROGLYPH N004", "EGYPTIAN HIEROGLYPH N005", "EGYPTIAN HIEROGLYPH N006", "EGYPTIAN HIEROGLYPH N007", "EGYPTIAN HIEROGLYPH N008", "EGYPTIAN HIEROGLYPH N009", "EGYPTIAN HIEROGLYPH N010", "EGYPTIAN HIEROGLYPH N011", "EGYPTIAN HIEROGLYPH N012", "EGYPTIAN HIEROGLYPH N013", "EGYPTIAN HIEROGLYPH N014", "EGYPTIAN HIEROGLYPH N015", "EGYPTIAN HIEROGLYPH N016", "EGYPTIAN HIEROGLYPH N017", "EGYPTIAN HIEROGLYPH N018", "EGYPTIAN HIEROGLYPH N018A", "EGYPTIAN HIEROGLYPH N018B", "EGYPTIAN HIEROGLYPH N019", "EGYPTIAN HIEROGLYPH N020", "EGYPTIAN HIEROGLYPH N021", "EGYPTIAN HIEROGLYPH N022", "EGYPTIAN HIEROGLYPH N023", "EGYPTIAN HIEROGLYPH N024", "EGYPTIAN HIEROGLYPH N025", "EGYPTIAN HIEROGLYPH N025A", "EGYPTIAN HIEROGLYPH N026", "EGYPTIAN HIEROGLYPH N027", "EGYPTIAN HIEROGLYPH N028", "EGYPTIAN HIEROGLYPH N029", "EGYPTIAN HIEROGLYPH N030", "EGYPTIAN HIEROGLYPH N031", "EGYPTIAN HIEROGLYPH N032", "EGYPTIAN HIEROGLYPH N033", "EGYPTIAN HIEROGLYPH N033A", "EGYPTIAN HIEROGLYPH N034", "EGYPTIAN HIEROGLYPH N034A", "EGYPTIAN HIEROGLYPH N035", "EGYPTIAN HIEROGLYPH N035A", "EGYPTIAN HIEROGLYPH N036", "EGYPTIAN HIEROGLYPH N037", "EGYPTIAN HIEROGLYPH N037A", "EGYPTIAN HIEROGLYPH N038", "EGYPTIAN HIEROGLYPH N039", "EGYPTIAN HIEROGLYPH N040", "EGYPTIAN HIEROGLYPH N041", "EGYPTIAN HIEROGLYPH N042", "EGYPTIAN HIEROGLYPH NL001", "EGYPTIAN HIEROGLYPH NL002", "EGYPTIAN HIEROGLYPH NL003", "EGYPTIAN HIEROGLYPH NL004", "EGYPTIAN HIEROGLYPH NL005", "EGYPTIAN HIEROGLYPH NL005A", "EGYPTIAN HIEROGLYPH NL006", "EGYPTIAN HIEROGLYPH NL007", "EGYPTIAN HIEROGLYPH NL008", "EGYPTIAN HIEROGLYPH NL009", "EGYPTIAN HIEROGLYPH NL010", "EGYPTIAN HIEROGLYPH NL011", "EGYPTIAN HIEROGLYPH NL012", "EGYPTIAN HIEROGLYPH NL013", "EGYPTIAN HIEROGLYPH NL014", "EGYPTIAN HIEROGLYPH NL015", "EGYPTIAN HIEROGLYPH NL016", "EGYPTIAN HIEROGLYPH NL017", "EGYPTIAN HIEROGLYPH NL017A", "EGYPTIAN HIEROGLYPH NL018", "EGYPTIAN HIEROGLYPH NL019", "EGYPTIAN HIEROGLYPH NL020", "EGYPTIAN HIEROGLYPH NU001", "EGYPTIAN HIEROGLYPH NU002", "EGYPTIAN HIEROGLYPH NU003", "EGYPTIAN HIEROGLYPH NU004", "EGYPTIAN HIEROGLYPH NU005", "EGYPTIAN HIEROGLYPH NU006", "EGYPTIAN HIEROGLYPH NU007", "EGYPTIAN HIEROGLYPH NU008", "EGYPTIAN HIEROGLYPH NU009", "EGYPTIAN HIEROGLYPH NU010", "EGYPTIAN HIEROGLYPH NU010A", "EGYPTIAN HIEROGLYPH NU011", "EGYPTIAN HIEROGLYPH NU011A", "EGYPTIAN HIEROGLYPH NU012", "EGYPTIAN HIEROGLYPH NU013", "EGYPTIAN HIEROGLYPH NU014", "EGYPTIAN HIEROGLYPH NU015", "EGYPTIAN HIEROGLYPH NU016", "EGYPTIAN HIEROGLYPH NU017", "EGYPTIAN HIEROGLYPH NU018", "EGYPTIAN HIEROGLYPH NU018A", "EGYPTIAN HIEROGLYPH NU019", "EGYPTIAN HIEROGLYPH NU020", "EGYPTIAN HIEROGLYPH NU021", "EGYPTIAN HIEROGLYPH NU022", "EGYPTIAN HIEROGLYPH NU022A", "EGYPTIAN HIEROGLYPH O001", "EGYPTIAN HIEROGLYPH O001A", "EGYPTIAN HIEROGLYPH O002", "EGYPTIAN HIEROGLYPH O003", "EGYPTIAN HIEROGLYPH O004", "EGYPTIAN HIEROGLYPH O005", "EGYPTIAN HIEROGLYPH O005A", "EGYPTIAN HIEROGLYPH O006", "EGYPTIAN HIEROGLYPH O006A", "EGYPTIAN HIEROGLYPH O006B", "EGYPTIAN HIEROGLYPH O006C", "EGYPTIAN HIEROGLYPH O006D", "EGYPTIAN HIEROGLYPH O006E", "EGYPTIAN HIEROGLYPH O006F", "EGYPTIAN HIEROGLYPH O007", "EGYPTIAN HIEROGLYPH O008", "EGYPTIAN HIEROGLYPH O009", "EGYPTIAN HIEROGLYPH O010", "EGYPTIAN HIEROGLYPH O010A", "EGYPTIAN HIEROGLYPH O010B", "EGYPTIAN HIEROGLYPH O010C", "EGYPTIAN HIEROGLYPH O011", "EGYPTIAN HIEROGLYPH O012", "EGYPTIAN HIEROGLYPH O013", "EGYPTIAN HIEROGLYPH O014", "EGYPTIAN HIEROGLYPH O015", "EGYPTIAN HIEROGLYPH O016", "EGYPTIAN HIEROGLYPH O017", "EGYPTIAN HIEROGLYPH O018", "EGYPTIAN HIEROGLYPH O019", "EGYPTIAN HIEROGLYPH O019A", "EGYPTIAN HIEROGLYPH O020", "EGYPTIAN HIEROGLYPH O020A", "EGYPTIAN HIEROGLYPH O021", "EGYPTIAN HIEROGLYPH O022", "EGYPTIAN HIEROGLYPH O023", "EGYPTIAN HIEROGLYPH O024", "EGYPTIAN HIEROGLYPH O024A", "EGYPTIAN HIEROGLYPH O025", "EGYPTIAN HIEROGLYPH O025A", "EGYPTIAN HIEROGLYPH O026", "EGYPTIAN HIEROGLYPH O027", "EGYPTIAN HIEROGLYPH O028", "EGYPTIAN HIEROGLYPH O029", "EGYPTIAN HIEROGLYPH O029A", "EGYPTIAN HIEROGLYPH O030", "EGYPTIAN HIEROGLYPH O030A", "EGYPTIAN HIEROGLYPH O031", "EGYPTIAN HIEROGLYPH O032", "EGYPTIAN HIEROGLYPH O033", "EGYPTIAN HIEROGLYPH O033A", "EGYPTIAN HIEROGLYPH O034", "EGYPTIAN HIEROGLYPH O035", "EGYPTIAN HIEROGLYPH O036", "EGYPTIAN HIEROGLYPH O036A", "EGYPTIAN HIEROGLYPH O036B", "EGYPTIAN HIEROGLYPH O036C", "EGYPTIAN HIEROGLYPH O036D", "EGYPTIAN HIEROGLYPH O037", "EGYPTIAN HIEROGLYPH O038", "EGYPTIAN HIEROGLYPH O039", "EGYPTIAN HIEROGLYPH O040", "EGYPTIAN HIEROGLYPH O041", "EGYPTIAN HIEROGLYPH O042", "EGYPTIAN HIEROGLYPH O043", "EGYPTIAN HIEROGLYPH O044", "EGYPTIAN HIEROGLYPH O045", "EGYPTIAN HIEROGLYPH O046", "EGYPTIAN HIEROGLYPH O047", "EGYPTIAN HIEROGLYPH O048", "EGYPTIAN HIEROGLYPH O049", "EGYPTIAN HIEROGLYPH O050", "EGYPTIAN HIEROGLYPH O050A", "EGYPTIAN HIEROGLYPH O050B", "EGYPTIAN HIEROGLYPH O051", "EGYPTIAN HIEROGLYPH P001", "EGYPTIAN HIEROGLYPH P001A", "EGYPTIAN HIEROGLYPH P002", "EGYPTIAN HIEROGLYPH P003", "EGYPTIAN HIEROGLYPH P003A", "EGYPTIAN HIEROGLYPH P004", "EGYPTIAN HIEROGLYPH P005", "EGYPTIAN HIEROGLYPH P006", "EGYPTIAN HIEROGLYPH P007", "EGYPTIAN HIEROGLYPH P008", "EGYPTIAN HIEROGLYPH P009", "EGYPTIAN HIEROGLYPH P010", "EGYPTIAN HIEROGLYPH P011", "EGYPTIAN HIEROGLYPH Q001", "EGYPTIAN HIEROGLYPH Q002", "EGYPTIAN HIEROGLYPH Q003", "EGYPTIAN HIEROGLYPH Q004", "EGYPTIAN HIEROGLYPH Q005", "EGYPTIAN HIEROGLYPH Q006", "EGYPTIAN HIEROGLYPH Q007", "EGYPTIAN HIEROGLYPH R001", "EGYPTIAN HIEROGLYPH R002", "EGYPTIAN HIEROGLYPH R002A", "EGYPTIAN HIEROGLYPH R003", "EGYPTIAN HIEROGLYPH R003A", "EGYPTIAN HIEROGLYPH R003B", "EGYPTIAN HIEROGLYPH R004", "EGYPTIAN HIEROGLYPH R005", "EGYPTIAN HIEROGLYPH R006", "EGYPTIAN HIEROGLYPH R007", "EGYPTIAN HIEROGLYPH R008", "EGYPTIAN HIEROGLYPH R009", "EGYPTIAN HIEROGLYPH R010", "EGYPTIAN HIEROGLYPH R010A", "EGYPTIAN HIEROGLYPH R011", "EGYPTIAN HIEROGLYPH R012", "EGYPTIAN HIEROGLYPH R013", "EGYPTIAN HIEROGLYPH R014", "EGYPTIAN HIEROGLYPH R015", "EGYPTIAN HIEROGLYPH R016", "EGYPTIAN HIEROGLYPH R016A", "EGYPTIAN HIEROGLYPH R017", "EGYPTIAN HIEROGLYPH R018", "EGYPTIAN HIEROGLYPH R019", "EGYPTIAN HIEROGLYPH R020", "EGYPTIAN HIEROGLYPH R021", "EGYPTIAN HIEROGLYPH R022", "EGYPTIAN HIEROGLYPH R023", "EGYPTIAN HIEROGLYPH R024", "EGYPTIAN HIEROGLYPH R025", "EGYPTIAN HIEROGLYPH R026", "EGYPTIAN HIEROGLYPH R027", "EGYPTIAN HIEROGLYPH R028", "EGYPTIAN HIEROGLYPH R029", "EGYPTIAN HIEROGLYPH S001", "EGYPTIAN HIEROGLYPH S002", "EGYPTIAN HIEROGLYPH S002A", "EGYPTIAN HIEROGLYPH S003", "EGYPTIAN HIEROGLYPH S004", "EGYPTIAN HIEROGLYPH S005", "EGYPTIAN HIEROGLYPH S006", "EGYPTIAN HIEROGLYPH S006A", "EGYPTIAN HIEROGLYPH S007", "EGYPTIAN HIEROGLYPH S008", "EGYPTIAN HIEROGLYPH S009", "EGYPTIAN HIEROGLYPH S010", "EGYPTIAN HIEROGLYPH S011", "EGYPTIAN HIEROGLYPH S012", "EGYPTIAN HIEROGLYPH S013", "EGYPTIAN HIEROGLYPH S014", "EGYPTIAN HIEROGLYPH S014A", "EGYPTIAN HIEROGLYPH S014B", "EGYPTIAN HIEROGLYPH S015", "EGYPTIAN HIEROGLYPH S016", "EGYPTIAN HIEROGLYPH S017", "EGYPTIAN HIEROGLYPH S017A", "EGYPTIAN HIEROGLYPH S018", "EGYPTIAN HIEROGLYPH S019", "EGYPTIAN HIEROGLYPH S020", "EGYPTIAN HIEROGLYPH S021", "EGYPTIAN HIEROGLYPH S022", "EGYPTIAN HIEROGLYPH S023", "EGYPTIAN HIEROGLYPH S024", "EGYPTIAN HIEROGLYPH S025", "EGYPTIAN HIEROGLYPH S026", "EGYPTIAN HIEROGLYPH S026A", "EGYPTIAN HIEROGLYPH S026B", "EGYPTIAN HIEROGLYPH S027", "EGYPTIAN HIEROGLYPH S028", "EGYPTIAN HIEROGLYPH S029", "EGYPTIAN HIEROGLYPH S030", "EGYPTIAN HIEROGLYPH S031", "EGYPTIAN HIEROGLYPH S032", "EGYPTIAN HIEROGLYPH S033", "EGYPTIAN HIEROGLYPH S034", "EGYPTIAN HIEROGLYPH S035", "EGYPTIAN HIEROGLYPH S035A", "EGYPTIAN HIEROGLYPH S036", "EGYPTIAN HIEROGLYPH S037", "EGYPTIAN HIEROGLYPH S038", "EGYPTIAN HIEROGLYPH S039", "EGYPTIAN HIEROGLYPH S040", "EGYPTIAN HIEROGLYPH S041", "EGYPTIAN HIEROGLYPH S042", "EGYPTIAN HIEROGLYPH S043", "EGYPTIAN HIEROGLYPH S044", "EGYPTIAN HIEROGLYPH S045", "EGYPTIAN HIEROGLYPH S046", "EGYPTIAN HIEROGLYPH T001", "EGYPTIAN HIEROGLYPH T002", "EGYPTIAN HIEROGLYPH T003", "EGYPTIAN HIEROGLYPH T003A", "EGYPTIAN HIEROGLYPH T004", "EGYPTIAN HIEROGLYPH T005", "EGYPTIAN HIEROGLYPH T006", "EGYPTIAN HIEROGLYPH T007", "EGYPTIAN HIEROGLYPH T007A", "EGYPTIAN HIEROGLYPH T008", "EGYPTIAN HIEROGLYPH T008A", "EGYPTIAN HIEROGLYPH T009", "EGYPTIAN HIEROGLYPH T009A", "EGYPTIAN HIEROGLYPH T010", "EGYPTIAN HIEROGLYPH T011", "EGYPTIAN HIEROGLYPH T011A", "EGYPTIAN HIEROGLYPH T012", "EGYPTIAN HIEROGLYPH T013", "EGYPTIAN HIEROGLYPH T014", "EGYPTIAN HIEROGLYPH T015", "EGYPTIAN HIEROGLYPH T016", "EGYPTIAN HIEROGLYPH T016A", "EGYPTIAN HIEROGLYPH T017", "EGYPTIAN HIEROGLYPH T018", "EGYPTIAN HIEROGLYPH T019", "EGYPTIAN HIEROGLYPH T020", "EGYPTIAN HIEROGLYPH T021", "EGYPTIAN HIEROGLYPH T022", "EGYPTIAN HIEROGLYPH T023", "EGYPTIAN HIEROGLYPH T024", "EGYPTIAN HIEROGLYPH T025", "EGYPTIAN HIEROGLYPH T026", "EGYPTIAN HIEROGLYPH T027", "EGYPTIAN HIEROGLYPH T028", "EGYPTIAN HIEROGLYPH T029", "EGYPTIAN HIEROGLYPH T030", "EGYPTIAN HIEROGLYPH T031", "EGYPTIAN HIEROGLYPH T032", "EGYPTIAN HIEROGLYPH T032A", "EGYPTIAN HIEROGLYPH T033", "EGYPTIAN HIEROGLYPH T033A", "EGYPTIAN HIEROGLYPH T034", "EGYPTIAN HIEROGLYPH T035", "EGYPTIAN HIEROGLYPH T036", "EGYPTIAN HIEROGLYPH U001", "EGYPTIAN HIEROGLYPH U002", "EGYPTIAN HIEROGLYPH U003", "EGYPTIAN HIEROGLYPH U004", "EGYPTIAN HIEROGLYPH U005", "EGYPTIAN HIEROGLYPH U006", "EGYPTIAN HIEROGLYPH U006A", "EGYPTIAN HIEROGLYPH U006B", "EGYPTIAN HIEROGLYPH U007", "EGYPTIAN HIEROGLYPH U008", "EGYPTIAN HIEROGLYPH U009", "EGYPTIAN HIEROGLYPH U010", "EGYPTIAN HIEROGLYPH U011", "EGYPTIAN HIEROGLYPH U012", "EGYPTIAN HIEROGLYPH U013", "EGYPTIAN HIEROGLYPH U014", "EGYPTIAN HIEROGLYPH U015", "EGYPTIAN HIEROGLYPH U016", "EGYPTIAN HIEROGLYPH U017", "EGYPTIAN HIEROGLYPH U018", "EGYPTIAN HIEROGLYPH U019", "EGYPTIAN HIEROGLYPH U020", "EGYPTIAN HIEROGLYPH U021", "EGYPTIAN HIEROGLYPH U022", "EGYPTIAN HIEROGLYPH U023", "EGYPTIAN HIEROGLYPH U023A", "EGYPTIAN HIEROGLYPH U024", "EGYPTIAN HIEROGLYPH U025", "EGYPTIAN HIEROGLYPH U026", "EGYPTIAN HIEROGLYPH U027", "EGYPTIAN HIEROGLYPH U028", "EGYPTIAN HIEROGLYPH U029", "EGYPTIAN HIEROGLYPH U029A", "EGYPTIAN HIEROGLYPH U030", "EGYPTIAN HIEROGLYPH U031", "EGYPTIAN HIEROGLYPH U032", "EGYPTIAN HIEROGLYPH U032A", "EGYPTIAN HIEROGLYPH U033", "EGYPTIAN HIEROGLYPH U034", "EGYPTIAN HIEROGLYPH U035", "EGYPTIAN HIEROGLYPH U036", "EGYPTIAN HIEROGLYPH U037", "EGYPTIAN HIEROGLYPH U038", "EGYPTIAN HIEROGLYPH U039", "EGYPTIAN HIEROGLYPH U040", "EGYPTIAN HIEROGLYPH U041", "EGYPTIAN HIEROGLYPH U042", "EGYPTIAN HIEROGLYPH V001", "EGYPTIAN HIEROGLYPH V001A", "EGYPTIAN HIEROGLYPH V001B", "EGYPTIAN HIEROGLYPH V001C", "EGYPTIAN HIEROGLYPH V001D", "EGYPTIAN HIEROGLYPH V001E", "EGYPTIAN HIEROGLYPH V001F", "EGYPTIAN HIEROGLYPH V001G", "EGYPTIAN HIEROGLYPH V001H", "EGYPTIAN HIEROGLYPH V001I", "EGYPTIAN HIEROGLYPH V002", "EGYPTIAN HIEROGLYPH V002A", "EGYPTIAN HIEROGLYPH V003", "EGYPTIAN HIEROGLYPH V004", "EGYPTIAN HIEROGLYPH V005", "EGYPTIAN HIEROGLYPH V006", "EGYPTIAN HIEROGLYPH V007", "EGYPTIAN HIEROGLYPH V007A", "EGYPTIAN HIEROGLYPH V007B", "EGYPTIAN HIEROGLYPH V008", "EGYPTIAN HIEROGLYPH V009", "EGYPTIAN HIEROGLYPH V010", "EGYPTIAN HIEROGLYPH V011", "EGYPTIAN HIEROGLYPH V011A", "EGYPTIAN HIEROGLYPH V011B", "EGYPTIAN HIEROGLYPH V011C", "EGYPTIAN HIEROGLYPH V012", "EGYPTIAN HIEROGLYPH V012A", "EGYPTIAN HIEROGLYPH V012B", "EGYPTIAN HIEROGLYPH V013", "EGYPTIAN HIEROGLYPH V014", "EGYPTIAN HIEROGLYPH V015", "EGYPTIAN HIEROGLYPH V016", "EGYPTIAN HIEROGLYPH V017", "EGYPTIAN HIEROGLYPH V018", "EGYPTIAN HIEROGLYPH V019", "EGYPTIAN HIEROGLYPH V020", "EGYPTIAN HIEROGLYPH V020A", "EGYPTIAN HIEROGLYPH V020B", "EGYPTIAN HIEROGLYPH V020C", "EGYPTIAN HIEROGLYPH V020D", "EGYPTIAN HIEROGLYPH V020E", "EGYPTIAN HIEROGLYPH V020F", "EGYPTIAN HIEROGLYPH V020G", "EGYPTIAN HIEROGLYPH V020H", "EGYPTIAN HIEROGLYPH V020I", "EGYPTIAN HIEROGLYPH V020J", "EGYPTIAN HIEROGLYPH V020K", "EGYPTIAN HIEROGLYPH V020L", "EGYPTIAN HIEROGLYPH V021", "EGYPTIAN HIEROGLYPH V022", "EGYPTIAN HIEROGLYPH V023", "EGYPTIAN HIEROGLYPH V023A", "EGYPTIAN HIEROGLYPH V024", "EGYPTIAN HIEROGLYPH V025", "EGYPTIAN HIEROGLYPH V026", "EGYPTIAN HIEROGLYPH V027", "EGYPTIAN HIEROGLYPH V028", "EGYPTIAN HIEROGLYPH V028A", "EGYPTIAN HIEROGLYPH V029", "EGYPTIAN HIEROGLYPH V029A", "EGYPTIAN HIEROGLYPH V030", "EGYPTIAN HIEROGLYPH V030A", "EGYPTIAN HIEROGLYPH V031", "EGYPTIAN HIEROGLYPH V031A", "EGYPTIAN HIEROGLYPH V032", "EGYPTIAN HIEROGLYPH V033", "EGYPTIAN HIEROGLYPH V033A", "EGYPTIAN HIEROGLYPH V034", "EGYPTIAN HIEROGLYPH V035", "EGYPTIAN HIEROGLYPH V036", "EGYPTIAN HIEROGLYPH V037", "EGYPTIAN HIEROGLYPH V037A", "EGYPTIAN HIEROGLYPH V038", "EGYPTIAN HIEROGLYPH V039", "EGYPTIAN HIEROGLYPH V040", "EGYPTIAN HIEROGLYPH V040A", "EGYPTIAN HIEROGLYPH W001", "EGYPTIAN HIEROGLYPH W002", "EGYPTIAN HIEROGLYPH W003", "EGYPTIAN HIEROGLYPH W003A", "EGYPTIAN HIEROGLYPH W004", "EGYPTIAN HIEROGLYPH W005", "EGYPTIAN HIEROGLYPH W006", "EGYPTIAN HIEROGLYPH W007", "EGYPTIAN HIEROGLYPH W008", "EGYPTIAN HIEROGLYPH W009", "EGYPTIAN HIEROGLYPH W009A", "EGYPTIAN HIEROGLYPH W010", "EGYPTIAN HIEROGLYPH W010A", "EGYPTIAN HIEROGLYPH W011", "EGYPTIAN HIEROGLYPH W012", "EGYPTIAN HIEROGLYPH W013", "EGYPTIAN HIEROGLYPH W014", "EGYPTIAN HIEROGLYPH W014A", "EGYPTIAN HIEROGLYPH W015", "EGYPTIAN HIEROGLYPH W016", "EGYPTIAN HIEROGLYPH W017", "EGYPTIAN HIEROGLYPH W017A", "EGYPTIAN HIEROGLYPH W018", "EGYPTIAN HIEROGLYPH W018A", "EGYPTIAN HIEROGLYPH W019", "EGYPTIAN HIEROGLYPH W020", "EGYPTIAN HIEROGLYPH W021", "EGYPTIAN HIEROGLYPH W022", "EGYPTIAN HIEROGLYPH W023", "EGYPTIAN HIEROGLYPH W024", "EGYPTIAN HIEROGLYPH W024A", "EGYPTIAN HIEROGLYPH W025", "EGYPTIAN HIEROGLYPH X001", "EGYPTIAN HIEROGLYPH X002", "EGYPTIAN HIEROGLYPH X003", "EGYPTIAN HIEROGLYPH X004", "EGYPTIAN HIEROGLYPH X004A", "EGYPTIAN HIEROGLYPH X004B", "EGYPTIAN HIEROGLYPH X005", "EGYPTIAN HIEROGLYPH X006", "EGYPTIAN HIEROGLYPH X006A", "EGYPTIAN HIEROGLYPH X007", "EGYPTIAN HIEROGLYPH X008", "EGYPTIAN HIEROGLYPH X008A", "EGYPTIAN HIEROGLYPH Y001", "EGYPTIAN HIEROGLYPH Y001A", "EGYPTIAN HIEROGLYPH Y002", "EGYPTIAN HIEROGLYPH Y003", "EGYPTIAN HIEROGLYPH Y004", "EGYPTIAN HIEROGLYPH Y005", "EGYPTIAN HIEROGLYPH Y006", "EGYPTIAN HIEROGLYPH Y007", "EGYPTIAN HIEROGLYPH Y008", "EGYPTIAN HIEROGLYPH Z001", "EGYPTIAN HIEROGLYPH Z002", "EGYPTIAN HIEROGLYPH Z002A", "EGYPTIAN HIEROGLYPH Z002B", "EGYPTIAN HIEROGLYPH Z002C", "EGYPTIAN HIEROGLYPH Z002D", "EGYPTIAN HIEROGLYPH Z003", "EGYPTIAN HIEROGLYPH Z003A", "EGYPTIAN HIEROGLYPH Z003B", "EGYPTIAN HIEROGLYPH Z004", "EGYPTIAN HIEROGLYPH Z004A", "EGYPTIAN HIEROGLYPH Z005", "EGYPTIAN HIEROGLYPH Z005A", "EGYPTIAN HIEROGLYPH Z006", "EGYPTIAN HIEROGLYPH Z007", "EGYPTIAN HIEROGLYPH Z008", "EGYPTIAN HIEROGLYPH Z009", "EGYPTIAN HIEROGLYPH Z010", "EGYPTIAN HIEROGLYPH Z011", "EGYPTIAN HIEROGLYPH Z012", "EGYPTIAN HIEROGLYPH Z013", "EGYPTIAN HIEROGLYPH Z014", "EGYPTIAN HIEROGLYPH Z015", "EGYPTIAN HIEROGLYPH Z015A", "EGYPTIAN HIEROGLYPH Z015B", "EGYPTIAN HIEROGLYPH Z015C", "EGYPTIAN HIEROGLYPH Z015D", "EGYPTIAN HIEROGLYPH Z015E", "EGYPTIAN HIEROGLYPH Z015F", "EGYPTIAN HIEROGLYPH Z015G", "EGYPTIAN HIEROGLYPH Z015H", "EGYPTIAN HIEROGLYPH Z015I", "EGYPTIAN HIEROGLYPH Z016", "EGYPTIAN HIEROGLYPH Z016A", "EGYPTIAN HIEROGLYPH Z016B", "EGYPTIAN HIEROGLYPH Z016C", "EGYPTIAN HIEROGLYPH Z016D", "EGYPTIAN HIEROGLYPH Z016E", "EGYPTIAN HIEROGLYPH Z016F", "EGYPTIAN HIEROGLYPH Z016G", "EGYPTIAN HIEROGLYPH Z016H", "EGYPTIAN HIEROGLYPH AA001", "EGYPTIAN HIEROGLYPH AA002", "EGYPTIAN HIEROGLYPH AA003", "EGYPTIAN HIEROGLYPH AA004", "EGYPTIAN HIEROGLYPH AA005", "EGYPTIAN HIEROGLYPH AA006", "EGYPTIAN HIEROGLYPH AA007", "EGYPTIAN HIEROGLYPH AA007A", "EGYPTIAN HIEROGLYPH AA007B", "EGYPTIAN HIEROGLYPH AA008", "EGYPTIAN HIEROGLYPH AA009", "EGYPTIAN HIEROGLYPH AA010", "EGYPTIAN HIEROGLYPH AA011", "EGYPTIAN HIEROGLYPH AA012", "EGYPTIAN HIEROGLYPH AA013", "EGYPTIAN HIEROGLYPH AA014", "EGYPTIAN HIEROGLYPH AA015", "EGYPTIAN HIEROGLYPH AA016", "EGYPTIAN HIEROGLYPH AA017", "EGYPTIAN HIEROGLYPH AA018", "EGYPTIAN HIEROGLYPH AA019", "EGYPTIAN HIEROGLYPH AA020", "EGYPTIAN HIEROGLYPH AA021", "EGYPTIAN HIEROGLYPH AA022", "EGYPTIAN HIEROGLYPH AA023", "EGYPTIAN HIEROGLYPH AA024", "EGYPTIAN HIEROGLYPH AA025", "EGYPTIAN HIEROGLYPH AA026", "EGYPTIAN HIEROGLYPH AA027", "EGYPTIAN HIEROGLYPH AA028", "EGYPTIAN HIEROGLYPH AA029", "EGYPTIAN HIEROGLYPH AA030", "EGYPTIAN HIEROGLYPH AA031", "EGYPTIAN HIEROGLYPH AA032", "EGYPTIAN HIEROGLYPH VERTICAL JOINER", "EGYPTIAN HIEROGLYPH HORIZONTAL JOINER", "EGYPTIAN HIEROGLYPH INSERT AT TOP START", "EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START", "EGYPTIAN HIEROGLYPH INSERT AT TOP END", "EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END", "EGYPTIAN HIEROGLYPH OVERLAY MIDDLE", "EGYPTIAN HIEROGLYPH BEGIN SEGMENT", "EGYPTIAN HIEROGLYPH END SEGMENT", "ANATOLIAN HIEROGLYPH A001", "ANATOLIAN HIEROGLYPH A002", "ANATOLIAN HIEROGLYPH A003", "ANATOLIAN HIEROGLYPH A004", "ANATOLIAN HIEROGLYPH A005", "ANATOLIAN HIEROGLYPH A006", "ANATOLIAN HIEROGLYPH A007", "ANATOLIAN HIEROGLYPH A008", "ANATOLIAN HIEROGLYPH A009", "ANATOLIAN HIEROGLYPH A010", "ANATOLIAN HIEROGLYPH A010A", "ANATOLIAN HIEROGLYPH A011", "ANATOLIAN HIEROGLYPH A012", "ANATOLIAN HIEROGLYPH A013", "ANATOLIAN HIEROGLYPH A014", "ANATOLIAN HIEROGLYPH A015", "ANATOLIAN HIEROGLYPH A016", "ANATOLIAN HIEROGLYPH A017", "ANATOLIAN HIEROGLYPH A018", "ANATOLIAN HIEROGLYPH A019", "ANATOLIAN HIEROGLYPH A020", "ANATOLIAN HIEROGLYPH A021", "ANATOLIAN HIEROGLYPH A022", "ANATOLIAN HIEROGLYPH A023", "ANATOLIAN HIEROGLYPH A024", "ANATOLIAN HIEROGLYPH A025", "ANATOLIAN HIEROGLYPH A026", "ANATOLIAN HIEROGLYPH A026A", "ANATOLIAN HIEROGLYPH A027", "ANATOLIAN HIEROGLYPH A028", "ANATOLIAN HIEROGLYPH A029", "ANATOLIAN HIEROGLYPH A030", "ANATOLIAN HIEROGLYPH A031", "ANATOLIAN HIEROGLYPH A032", "ANATOLIAN HIEROGLYPH A033", "ANATOLIAN HIEROGLYPH A034", "ANATOLIAN HIEROGLYPH A035", "ANATOLIAN HIEROGLYPH A036", "ANATOLIAN HIEROGLYPH A037", "ANATOLIAN HIEROGLYPH A038", "ANATOLIAN HIEROGLYPH A039", "ANATOLIAN HIEROGLYPH A039A", "ANATOLIAN HIEROGLYPH A040", "ANATOLIAN HIEROGLYPH A041", "ANATOLIAN HIEROGLYPH A041A", "ANATOLIAN HIEROGLYPH A042", "ANATOLIAN HIEROGLYPH A043", "ANATOLIAN HIEROGLYPH A044", "ANATOLIAN HIEROGLYPH A045", "ANATOLIAN HIEROGLYPH A045A", "ANATOLIAN HIEROGLYPH A046", "ANATOLIAN HIEROGLYPH A046A", "ANATOLIAN HIEROGLYPH A046B", "ANATOLIAN HIEROGLYPH A047", "ANATOLIAN HIEROGLYPH A048", "ANATOLIAN HIEROGLYPH A049", "ANATOLIAN HIEROGLYPH A050", "ANATOLIAN HIEROGLYPH A051", "ANATOLIAN HIEROGLYPH A052", "ANATOLIAN HIEROGLYPH A053", "ANATOLIAN HIEROGLYPH A054", "ANATOLIAN HIEROGLYPH A055", "ANATOLIAN HIEROGLYPH A056", "ANATOLIAN HIEROGLYPH A057", "ANATOLIAN HIEROGLYPH A058", "ANATOLIAN HIEROGLYPH A059", "ANATOLIAN HIEROGLYPH A060", "ANATOLIAN HIEROGLYPH A061", "ANATOLIAN HIEROGLYPH A062", "ANATOLIAN HIEROGLYPH A063", "ANATOLIAN HIEROGLYPH A064", "ANATOLIAN HIEROGLYPH A065", "ANATOLIAN HIEROGLYPH A066", "ANATOLIAN HIEROGLYPH A066A", "ANATOLIAN HIEROGLYPH A066B", "ANATOLIAN HIEROGLYPH A066C", "ANATOLIAN HIEROGLYPH A067", "ANATOLIAN HIEROGLYPH A068", "ANATOLIAN HIEROGLYPH A069", "ANATOLIAN HIEROGLYPH A070", "ANATOLIAN HIEROGLYPH A071", "ANATOLIAN HIEROGLYPH A072", "ANATOLIAN HIEROGLYPH A073", "ANATOLIAN HIEROGLYPH A074", "ANATOLIAN HIEROGLYPH A075", "ANATOLIAN HIEROGLYPH A076", "ANATOLIAN HIEROGLYPH A077", "ANATOLIAN HIEROGLYPH A078", "ANATOLIAN HIEROGLYPH A079", "ANATOLIAN HIEROGLYPH A080", "ANATOLIAN HIEROGLYPH A081", "ANATOLIAN HIEROGLYPH A082", "ANATOLIAN HIEROGLYPH A083", "ANATOLIAN HIEROGLYPH A084", "ANATOLIAN HIEROGLYPH A085", "ANATOLIAN HIEROGLYPH A086", "ANATOLIAN HIEROGLYPH A087", "ANATOLIAN HIEROGLYPH A088", "ANATOLIAN HIEROGLYPH A089", "ANATOLIAN HIEROGLYPH A090", "ANATOLIAN HIEROGLYPH A091", "ANATOLIAN HIEROGLYPH A092", "ANATOLIAN HIEROGLYPH A093", "ANATOLIAN HIEROGLYPH A094", "ANATOLIAN HIEROGLYPH A095", "ANATOLIAN HIEROGLYPH A096", "ANATOLIAN HIEROGLYPH A097", "ANATOLIAN HIEROGLYPH A097A", "ANATOLIAN HIEROGLYPH A098", "ANATOLIAN HIEROGLYPH A098A", "ANATOLIAN HIEROGLYPH A099", "ANATOLIAN HIEROGLYPH A100", "ANATOLIAN HIEROGLYPH A100A", "ANATOLIAN HIEROGLYPH A101", "ANATOLIAN HIEROGLYPH A101A", "ANATOLIAN HIEROGLYPH A102", "ANATOLIAN HIEROGLYPH A102A", "ANATOLIAN HIEROGLYPH A103", "ANATOLIAN HIEROGLYPH A104", "ANATOLIAN HIEROGLYPH A104A", "ANATOLIAN HIEROGLYPH A104B", "ANATOLIAN HIEROGLYPH A104C", "ANATOLIAN HIEROGLYPH A105", "ANATOLIAN HIEROGLYPH A105A", "ANATOLIAN HIEROGLYPH A105B", "ANATOLIAN HIEROGLYPH A106", "ANATOLIAN HIEROGLYPH A107", "ANATOLIAN HIEROGLYPH A107A", "ANATOLIAN HIEROGLYPH A107B", "ANATOLIAN HIEROGLYPH A107C", "ANATOLIAN HIEROGLYPH A108", "ANATOLIAN HIEROGLYPH A109", "ANATOLIAN HIEROGLYPH A110", "ANATOLIAN HIEROGLYPH A110A", "ANATOLIAN HIEROGLYPH A110B", "ANATOLIAN HIEROGLYPH A111", "ANATOLIAN HIEROGLYPH A112", "ANATOLIAN HIEROGLYPH A113", "ANATOLIAN HIEROGLYPH A114", "ANATOLIAN HIEROGLYPH A115", "ANATOLIAN HIEROGLYPH A115A", "ANATOLIAN HIEROGLYPH A116", "ANATOLIAN HIEROGLYPH A117", "ANATOLIAN HIEROGLYPH A118", "ANATOLIAN HIEROGLYPH A119", "ANATOLIAN HIEROGLYPH A120", "ANATOLIAN HIEROGLYPH A121", "ANATOLIAN HIEROGLYPH A122", "ANATOLIAN HIEROGLYPH A123", "ANATOLIAN HIEROGLYPH A124", "ANATOLIAN HIEROGLYPH A125", "ANATOLIAN HIEROGLYPH A125A", "ANATOLIAN HIEROGLYPH A126", "ANATOLIAN HIEROGLYPH A127", "ANATOLIAN HIEROGLYPH A128", "ANATOLIAN HIEROGLYPH A129", "ANATOLIAN HIEROGLYPH A130", "ANATOLIAN HIEROGLYPH A131", "ANATOLIAN HIEROGLYPH A132", "ANATOLIAN HIEROGLYPH A133", "ANATOLIAN HIEROGLYPH A134", "ANATOLIAN HIEROGLYPH A135", "ANATOLIAN HIEROGLYPH A135A", "ANATOLIAN HIEROGLYPH A136", "ANATOLIAN HIEROGLYPH A137", "ANATOLIAN HIEROGLYPH A138", "ANATOLIAN HIEROGLYPH A139", "ANATOLIAN HIEROGLYPH A140", "ANATOLIAN HIEROGLYPH A141", "ANATOLIAN HIEROGLYPH A142", "ANATOLIAN HIEROGLYPH A143", "ANATOLIAN HIEROGLYPH A144", "ANATOLIAN HIEROGLYPH A145", "ANATOLIAN HIEROGLYPH A146", "ANATOLIAN HIEROGLYPH A147", "ANATOLIAN HIEROGLYPH A148", "ANATOLIAN HIEROGLYPH A149", "ANATOLIAN HIEROGLYPH A150", "ANATOLIAN HIEROGLYPH A151", "ANATOLIAN HIEROGLYPH A152", "ANATOLIAN HIEROGLYPH A153", "ANATOLIAN HIEROGLYPH A154", "ANATOLIAN HIEROGLYPH A155", "ANATOLIAN HIEROGLYPH A156", "ANATOLIAN HIEROGLYPH A157", "ANATOLIAN HIEROGLYPH A158", "ANATOLIAN HIEROGLYPH A159", "ANATOLIAN HIEROGLYPH A160", "ANATOLIAN HIEROGLYPH A161", "ANATOLIAN HIEROGLYPH A162", "ANATOLIAN HIEROGLYPH A163", "ANATOLIAN HIEROGLYPH A164", "ANATOLIAN HIEROGLYPH A165", "ANATOLIAN HIEROGLYPH A166", "ANATOLIAN HIEROGLYPH A167", "ANATOLIAN HIEROGLYPH A168", "ANATOLIAN HIEROGLYPH A169", "ANATOLIAN HIEROGLYPH A170", "ANATOLIAN HIEROGLYPH A171", "ANATOLIAN HIEROGLYPH A172", "ANATOLIAN HIEROGLYPH A173", "ANATOLIAN HIEROGLYPH A174", "ANATOLIAN HIEROGLYPH A175", "ANATOLIAN HIEROGLYPH A176", "ANATOLIAN HIEROGLYPH A177", "ANATOLIAN HIEROGLYPH A178", "ANATOLIAN HIEROGLYPH A179", "ANATOLIAN HIEROGLYPH A180", "ANATOLIAN HIEROGLYPH A181", "ANATOLIAN HIEROGLYPH A182", "ANATOLIAN HIEROGLYPH A183", "ANATOLIAN HIEROGLYPH A184", "ANATOLIAN HIEROGLYPH A185", "ANATOLIAN HIEROGLYPH A186", "ANATOLIAN HIEROGLYPH A187", "ANATOLIAN HIEROGLYPH A188", "ANATOLIAN HIEROGLYPH A189", "ANATOLIAN HIEROGLYPH A190", "ANATOLIAN HIEROGLYPH A191", "ANATOLIAN HIEROGLYPH A192", "ANATOLIAN HIEROGLYPH A193", "ANATOLIAN HIEROGLYPH A194", "ANATOLIAN HIEROGLYPH A195", "ANATOLIAN HIEROGLYPH A196", "ANATOLIAN HIEROGLYPH A197", "ANATOLIAN HIEROGLYPH A198", "ANATOLIAN HIEROGLYPH A199", "ANATOLIAN HIEROGLYPH A200", "ANATOLIAN HIEROGLYPH A201", "ANATOLIAN HIEROGLYPH A202", "ANATOLIAN HIEROGLYPH A202A", "ANATOLIAN HIEROGLYPH A202B", "ANATOLIAN HIEROGLYPH A203", "ANATOLIAN HIEROGLYPH A204", "ANATOLIAN HIEROGLYPH A205", "ANATOLIAN HIEROGLYPH A206", "ANATOLIAN HIEROGLYPH A207", "ANATOLIAN HIEROGLYPH A207A", "ANATOLIAN HIEROGLYPH A208", "ANATOLIAN HIEROGLYPH A209", "ANATOLIAN HIEROGLYPH A209A", "ANATOLIAN HIEROGLYPH A210", "ANATOLIAN HIEROGLYPH A211", "ANATOLIAN HIEROGLYPH A212", "ANATOLIAN HIEROGLYPH A213", "ANATOLIAN HIEROGLYPH A214", "ANATOLIAN HIEROGLYPH A215", "ANATOLIAN HIEROGLYPH A215A", "ANATOLIAN HIEROGLYPH A216", "ANATOLIAN HIEROGLYPH A216A", "ANATOLIAN HIEROGLYPH A217", "ANATOLIAN HIEROGLYPH A218", "ANATOLIAN HIEROGLYPH A219", "ANATOLIAN HIEROGLYPH A220", "ANATOLIAN HIEROGLYPH A221", "ANATOLIAN HIEROGLYPH A222", "ANATOLIAN HIEROGLYPH A223", "ANATOLIAN HIEROGLYPH A224", "ANATOLIAN HIEROGLYPH A225", "ANATOLIAN HIEROGLYPH A226", "ANATOLIAN HIEROGLYPH A227", "ANATOLIAN HIEROGLYPH A227A", "ANATOLIAN HIEROGLYPH A228", "ANATOLIAN HIEROGLYPH A229", "ANATOLIAN HIEROGLYPH A230", "ANATOLIAN HIEROGLYPH A231", "ANATOLIAN HIEROGLYPH A232", "ANATOLIAN HIEROGLYPH A233", "ANATOLIAN HIEROGLYPH A234", "ANATOLIAN HIEROGLYPH A235", "ANATOLIAN HIEROGLYPH A236", "ANATOLIAN HIEROGLYPH A237", "ANATOLIAN HIEROGLYPH A238", "ANATOLIAN HIEROGLYPH A239", "ANATOLIAN HIEROGLYPH A240", "ANATOLIAN HIEROGLYPH A241", "ANATOLIAN HIEROGLYPH A242", "ANATOLIAN HIEROGLYPH A243", "ANATOLIAN HIEROGLYPH A244", "ANATOLIAN HIEROGLYPH A245", "ANATOLIAN HIEROGLYPH A246", "ANATOLIAN HIEROGLYPH A247", "ANATOLIAN HIEROGLYPH A248", "ANATOLIAN HIEROGLYPH A249", "ANATOLIAN HIEROGLYPH A250", "ANATOLIAN HIEROGLYPH A251", "ANATOLIAN HIEROGLYPH A252", "ANATOLIAN HIEROGLYPH A253", "ANATOLIAN HIEROGLYPH A254", "ANATOLIAN HIEROGLYPH A255", "ANATOLIAN HIEROGLYPH A256", "ANATOLIAN HIEROGLYPH A257", "ANATOLIAN HIEROGLYPH A258", "ANATOLIAN HIEROGLYPH A259", "ANATOLIAN HIEROGLYPH A260", "ANATOLIAN HIEROGLYPH A261", "ANATOLIAN HIEROGLYPH A262", "ANATOLIAN HIEROGLYPH A263", "ANATOLIAN HIEROGLYPH A264", "ANATOLIAN HIEROGLYPH A265", "ANATOLIAN HIEROGLYPH A266", "ANATOLIAN HIEROGLYPH A267", "ANATOLIAN HIEROGLYPH A267A", "ANATOLIAN HIEROGLYPH A268", "ANATOLIAN HIEROGLYPH A269", "ANATOLIAN HIEROGLYPH A270", "ANATOLIAN HIEROGLYPH A271", "ANATOLIAN HIEROGLYPH A272", "ANATOLIAN HIEROGLYPH A273", "ANATOLIAN HIEROGLYPH A274", "ANATOLIAN HIEROGLYPH A275", "ANATOLIAN HIEROGLYPH A276", "ANATOLIAN HIEROGLYPH A277", "ANATOLIAN HIEROGLYPH A278", "ANATOLIAN HIEROGLYPH A279", "ANATOLIAN HIEROGLYPH A280", "ANATOLIAN HIEROGLYPH A281", "ANATOLIAN HIEROGLYPH A282", "ANATOLIAN HIEROGLYPH A283", "ANATOLIAN HIEROGLYPH A284", "ANATOLIAN HIEROGLYPH A285", "ANATOLIAN HIEROGLYPH A286", "ANATOLIAN HIEROGLYPH A287", "ANATOLIAN HIEROGLYPH A288", "ANATOLIAN HIEROGLYPH A289", "ANATOLIAN HIEROGLYPH A289A", "ANATOLIAN HIEROGLYPH A290", "ANATOLIAN HIEROGLYPH A291", "ANATOLIAN HIEROGLYPH A292", "ANATOLIAN HIEROGLYPH A293", "ANATOLIAN HIEROGLYPH A294", "ANATOLIAN HIEROGLYPH A294A", "ANATOLIAN HIEROGLYPH A295", "ANATOLIAN HIEROGLYPH A296", "ANATOLIAN HIEROGLYPH A297", "ANATOLIAN HIEROGLYPH A298", "ANATOLIAN HIEROGLYPH A299", "ANATOLIAN HIEROGLYPH A299A", "ANATOLIAN HIEROGLYPH A300", "ANATOLIAN HIEROGLYPH A301", "ANATOLIAN HIEROGLYPH A302", "ANATOLIAN HIEROGLYPH A303", "ANATOLIAN HIEROGLYPH A304", "ANATOLIAN HIEROGLYPH A305", "ANATOLIAN HIEROGLYPH A306", "ANATOLIAN HIEROGLYPH A307", "ANATOLIAN HIEROGLYPH A308", "ANATOLIAN HIEROGLYPH A309", "ANATOLIAN HIEROGLYPH A309A", "ANATOLIAN HIEROGLYPH A310", "ANATOLIAN HIEROGLYPH A311", "ANATOLIAN HIEROGLYPH A312", "ANATOLIAN HIEROGLYPH A313", "ANATOLIAN HIEROGLYPH A314", "ANATOLIAN HIEROGLYPH A315", "ANATOLIAN HIEROGLYPH A316", "ANATOLIAN HIEROGLYPH A317", "ANATOLIAN HIEROGLYPH A318", "ANATOLIAN HIEROGLYPH A319", "ANATOLIAN HIEROGLYPH A320", "ANATOLIAN HIEROGLYPH A321", "ANATOLIAN HIEROGLYPH A322", "ANATOLIAN HIEROGLYPH A323", "ANATOLIAN HIEROGLYPH A324", "ANATOLIAN HIEROGLYPH A325", "ANATOLIAN HIEROGLYPH A326", "ANATOLIAN HIEROGLYPH A327", "ANATOLIAN HIEROGLYPH A328", "ANATOLIAN HIEROGLYPH A329", "ANATOLIAN HIEROGLYPH A329A", "ANATOLIAN HIEROGLYPH A330", "ANATOLIAN HIEROGLYPH A331", "ANATOLIAN HIEROGLYPH A332A", "ANATOLIAN HIEROGLYPH A332B", "ANATOLIAN HIEROGLYPH A332C", "ANATOLIAN HIEROGLYPH A333", "ANATOLIAN HIEROGLYPH A334", "ANATOLIAN HIEROGLYPH A335", "ANATOLIAN HIEROGLYPH A336", "ANATOLIAN HIEROGLYPH A336A", "ANATOLIAN HIEROGLYPH A336B", "ANATOLIAN HIEROGLYPH A336C", "ANATOLIAN HIEROGLYPH A337", "ANATOLIAN HIEROGLYPH A338", "ANATOLIAN HIEROGLYPH A339", "ANATOLIAN HIEROGLYPH A340", "ANATOLIAN HIEROGLYPH A341", "ANATOLIAN HIEROGLYPH A342", "ANATOLIAN HIEROGLYPH A343", "ANATOLIAN HIEROGLYPH A344", "ANATOLIAN HIEROGLYPH A345", "ANATOLIAN HIEROGLYPH A346", "ANATOLIAN HIEROGLYPH A347", "ANATOLIAN HIEROGLYPH A348", "ANATOLIAN HIEROGLYPH A349", "ANATOLIAN HIEROGLYPH A350", "ANATOLIAN HIEROGLYPH A351", "ANATOLIAN HIEROGLYPH A352", "ANATOLIAN HIEROGLYPH A353", "ANATOLIAN HIEROGLYPH A354", "ANATOLIAN HIEROGLYPH A355", "ANATOLIAN HIEROGLYPH A356", "ANATOLIAN HIEROGLYPH A357", "ANATOLIAN HIEROGLYPH A358", "ANATOLIAN HIEROGLYPH A359", "ANATOLIAN HIEROGLYPH A359A", "ANATOLIAN HIEROGLYPH A360", "ANATOLIAN HIEROGLYPH A361", "ANATOLIAN HIEROGLYPH A362", "ANATOLIAN HIEROGLYPH A363", "ANATOLIAN HIEROGLYPH A364", "ANATOLIAN HIEROGLYPH A364A", "ANATOLIAN HIEROGLYPH A365", "ANATOLIAN HIEROGLYPH A366", "ANATOLIAN HIEROGLYPH A367", "ANATOLIAN HIEROGLYPH A368", "ANATOLIAN HIEROGLYPH A368A", "ANATOLIAN HIEROGLYPH A369", "ANATOLIAN HIEROGLYPH A370", "ANATOLIAN HIEROGLYPH A371", "ANATOLIAN HIEROGLYPH A371A", "ANATOLIAN HIEROGLYPH A372", "ANATOLIAN HIEROGLYPH A373", "ANATOLIAN HIEROGLYPH A374", "ANATOLIAN HIEROGLYPH A375", "ANATOLIAN HIEROGLYPH A376", "ANATOLIAN HIEROGLYPH A377", "ANATOLIAN HIEROGLYPH A378", "ANATOLIAN HIEROGLYPH A379", "ANATOLIAN HIEROGLYPH A380", "ANATOLIAN HIEROGLYPH A381", "ANATOLIAN HIEROGLYPH A381A", "ANATOLIAN HIEROGLYPH A382", "ANATOLIAN HIEROGLYPH A383 RA OR RI", "ANATOLIAN HIEROGLYPH A383A", "ANATOLIAN HIEROGLYPH A384", "ANATOLIAN HIEROGLYPH A385", "ANATOLIAN HIEROGLYPH A386", "ANATOLIAN HIEROGLYPH A386A", "ANATOLIAN HIEROGLYPH A387", "ANATOLIAN HIEROGLYPH A388", "ANATOLIAN HIEROGLYPH A389", "ANATOLIAN HIEROGLYPH A390", "ANATOLIAN HIEROGLYPH A391", "ANATOLIAN HIEROGLYPH A392", "ANATOLIAN HIEROGLYPH A393 EIGHT", "ANATOLIAN HIEROGLYPH A394", "ANATOLIAN HIEROGLYPH A395", "ANATOLIAN HIEROGLYPH A396", "ANATOLIAN HIEROGLYPH A397", "ANATOLIAN HIEROGLYPH A398", "ANATOLIAN HIEROGLYPH A399", "ANATOLIAN HIEROGLYPH A400", "ANATOLIAN HIEROGLYPH A401", "ANATOLIAN HIEROGLYPH A402", "ANATOLIAN HIEROGLYPH A403", "ANATOLIAN HIEROGLYPH A404", "ANATOLIAN HIEROGLYPH A405", "ANATOLIAN HIEROGLYPH A406", "ANATOLIAN HIEROGLYPH A407", "ANATOLIAN HIEROGLYPH A408", "ANATOLIAN HIEROGLYPH A409", "ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK", "ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK", "ANATOLIAN HIEROGLYPH A411", "ANATOLIAN HIEROGLYPH A412", "ANATOLIAN HIEROGLYPH A413", "ANATOLIAN HIEROGLYPH A414", "ANATOLIAN HIEROGLYPH A415", "ANATOLIAN HIEROGLYPH A416", "ANATOLIAN HIEROGLYPH A417", "ANATOLIAN HIEROGLYPH A418", "ANATOLIAN HIEROGLYPH A419", "ANATOLIAN HIEROGLYPH A420", "ANATOLIAN HIEROGLYPH A421", "ANATOLIAN HIEROGLYPH A422", "ANATOLIAN HIEROGLYPH A423", "ANATOLIAN HIEROGLYPH A424", "ANATOLIAN HIEROGLYPH A425", "ANATOLIAN HIEROGLYPH A426", "ANATOLIAN HIEROGLYPH A427", "ANATOLIAN HIEROGLYPH A428", "ANATOLIAN HIEROGLYPH A429", "ANATOLIAN HIEROGLYPH A430", "ANATOLIAN HIEROGLYPH A431", "ANATOLIAN HIEROGLYPH A432", "ANATOLIAN HIEROGLYPH A433", "ANATOLIAN HIEROGLYPH A434", "ANATOLIAN HIEROGLYPH A435", "ANATOLIAN HIEROGLYPH A436", "ANATOLIAN HIEROGLYPH A437", "ANATOLIAN HIEROGLYPH A438", "ANATOLIAN HIEROGLYPH A439", "ANATOLIAN HIEROGLYPH A440", "ANATOLIAN HIEROGLYPH A441", "ANATOLIAN HIEROGLYPH A442", "ANATOLIAN HIEROGLYPH A443", "ANATOLIAN HIEROGLYPH A444", "ANATOLIAN HIEROGLYPH A445", "ANATOLIAN HIEROGLYPH A446", "ANATOLIAN HIEROGLYPH A447", "ANATOLIAN HIEROGLYPH A448", "ANATOLIAN HIEROGLYPH A449", "ANATOLIAN HIEROGLYPH A450", "ANATOLIAN HIEROGLYPH A450A", "ANATOLIAN HIEROGLYPH A451", "ANATOLIAN HIEROGLYPH A452", "ANATOLIAN HIEROGLYPH A453", "ANATOLIAN HIEROGLYPH A454", "ANATOLIAN HIEROGLYPH A455", "ANATOLIAN HIEROGLYPH A456", "ANATOLIAN HIEROGLYPH A457", "ANATOLIAN HIEROGLYPH A457A", "ANATOLIAN HIEROGLYPH A458", "ANATOLIAN HIEROGLYPH A459", "ANATOLIAN HIEROGLYPH A460", "ANATOLIAN HIEROGLYPH A461", "ANATOLIAN HIEROGLYPH A462", "ANATOLIAN HIEROGLYPH A463", "ANATOLIAN HIEROGLYPH A464", "ANATOLIAN HIEROGLYPH A465", "ANATOLIAN HIEROGLYPH A466", "ANATOLIAN HIEROGLYPH A467", "ANATOLIAN HIEROGLYPH A468", "ANATOLIAN HIEROGLYPH A469", "ANATOLIAN HIEROGLYPH A470", "ANATOLIAN HIEROGLYPH A471", "ANATOLIAN HIEROGLYPH A472", "ANATOLIAN HIEROGLYPH A473", "ANATOLIAN HIEROGLYPH A474", "ANATOLIAN HIEROGLYPH A475", "ANATOLIAN HIEROGLYPH A476", "ANATOLIAN HIEROGLYPH A477", "ANATOLIAN HIEROGLYPH A478", "ANATOLIAN HIEROGLYPH A479", "ANATOLIAN HIEROGLYPH A480", "ANATOLIAN HIEROGLYPH A481", "ANATOLIAN HIEROGLYPH A482", "ANATOLIAN HIEROGLYPH A483", "ANATOLIAN HIEROGLYPH A484", "ANATOLIAN HIEROGLYPH A485", "ANATOLIAN HIEROGLYPH A486", "ANATOLIAN HIEROGLYPH A487", "ANATOLIAN HIEROGLYPH A488", "ANATOLIAN HIEROGLYPH A489", "ANATOLIAN HIEROGLYPH A490", "ANATOLIAN HIEROGLYPH A491", "ANATOLIAN HIEROGLYPH A492", "ANATOLIAN HIEROGLYPH A493", "ANATOLIAN HIEROGLYPH A494", "ANATOLIAN HIEROGLYPH A495", "ANATOLIAN HIEROGLYPH A496", "ANATOLIAN HIEROGLYPH A497", "ANATOLIAN HIEROGLYPH A501", "ANATOLIAN HIEROGLYPH A502", "ANATOLIAN HIEROGLYPH A503", "ANATOLIAN HIEROGLYPH A504", "ANATOLIAN HIEROGLYPH A505", "ANATOLIAN HIEROGLYPH A506", "ANATOLIAN HIEROGLYPH A507", "ANATOLIAN HIEROGLYPH A508", "ANATOLIAN HIEROGLYPH A509", "ANATOLIAN HIEROGLYPH A510", "ANATOLIAN HIEROGLYPH A511", "ANATOLIAN HIEROGLYPH A512", "ANATOLIAN HIEROGLYPH A513", "ANATOLIAN HIEROGLYPH A514", "ANATOLIAN HIEROGLYPH A515", "ANATOLIAN HIEROGLYPH A516", "ANATOLIAN HIEROGLYPH A517", "ANATOLIAN HIEROGLYPH A518", "ANATOLIAN HIEROGLYPH A519", "ANATOLIAN HIEROGLYPH A520", "ANATOLIAN HIEROGLYPH A521", "ANATOLIAN HIEROGLYPH A522", "ANATOLIAN HIEROGLYPH A523", "ANATOLIAN HIEROGLYPH A524", "ANATOLIAN HIEROGLYPH A525", "ANATOLIAN HIEROGLYPH A526", "ANATOLIAN HIEROGLYPH A527", "ANATOLIAN HIEROGLYPH A528", "ANATOLIAN HIEROGLYPH A529", "ANATOLIAN HIEROGLYPH A530", "BAMUM LETTER PHASE-A NGKUE MFON", "BAMUM LETTER PHASE-A GBIEE FON", "BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE", "BAMUM LETTER PHASE-A PON MFON PIPAEMBA", "BAMUM LETTER PHASE-A NAA MFON", "BAMUM LETTER PHASE-A SHUENSHUET", "BAMUM LETTER PHASE-A TITA MFON", "BAMUM LETTER PHASE-A NZA MFON", "BAMUM LETTER PHASE-A SHINDA PA NJI", "BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE", "BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA", "BAMUM LETTER PHASE-A MAEMBGBIEE", "BAMUM LETTER PHASE-A TU MAEMBA", "BAMUM LETTER PHASE-A NGANGU", "BAMUM LETTER PHASE-A MAEMVEUX", "BAMUM LETTER PHASE-A MANSUAE", "BAMUM LETTER PHASE-A MVEUAENGAM", "BAMUM LETTER PHASE-A SEUNYAM", "BAMUM LETTER PHASE-A NTOQPEN", "BAMUM LETTER PHASE-A KEUKEUTNDA", "BAMUM LETTER PHASE-A NKINDI", "BAMUM LETTER PHASE-A SUU", "BAMUM LETTER PHASE-A NGKUENZEUM", "BAMUM LETTER PHASE-A LAPAQ", "BAMUM LETTER PHASE-A LET KUT", "BAMUM LETTER PHASE-A NTAP MFAA", "BAMUM LETTER PHASE-A MAEKEUP", "BAMUM LETTER PHASE-A PASHAE", "BAMUM LETTER PHASE-A GHEUAERAE", "BAMUM LETTER PHASE-A PAMSHAE", "BAMUM LETTER PHASE-A MON NGGEUAET", "BAMUM LETTER PHASE-A NZUN MEUT", "BAMUM LETTER PHASE-A U YUQ NAE", "BAMUM LETTER PHASE-A GHEUAEGHEUAE", "BAMUM LETTER PHASE-A NTAP NTAA", "BAMUM LETTER PHASE-A SISA", "BAMUM LETTER PHASE-A MGBASA", "BAMUM LETTER PHASE-A MEUNJOMNDEUQ", "BAMUM LETTER PHASE-A MOOMPUQ", "BAMUM LETTER PHASE-A KAFA", "BAMUM LETTER PHASE-A PA LEERAEWA", "BAMUM LETTER PHASE-A NDA LEERAEWA", "BAMUM LETTER PHASE-A PET", "BAMUM LETTER PHASE-A MAEMKPEN", "BAMUM LETTER PHASE-A NIKA", "BAMUM LETTER PHASE-A PUP", "BAMUM LETTER PHASE-A TUAEP", "BAMUM LETTER PHASE-A LUAEP", "BAMUM LETTER PHASE-A SONJAM", "BAMUM LETTER PHASE-A TEUTEUWEN", "BAMUM LETTER PHASE-A MAENYI", "BAMUM LETTER PHASE-A KET", "BAMUM LETTER PHASE-A NDAANGGEUAET", "BAMUM LETTER PHASE-A KUOQ", "BAMUM LETTER PHASE-A MOOMEUT", "BAMUM LETTER PHASE-A SHUM", "BAMUM LETTER PHASE-A LOMMAE", "BAMUM LETTER PHASE-A FIRI", "BAMUM LETTER PHASE-A ROM", "BAMUM LETTER PHASE-A KPOQ", "BAMUM LETTER PHASE-A SOQ", "BAMUM LETTER PHASE-A MAP PIEET", "BAMUM LETTER PHASE-A SHIRAE", "BAMUM LETTER PHASE-A NTAP", "BAMUM LETTER PHASE-A SHOQ NSHUT YUM", "BAMUM LETTER PHASE-A NYIT MONGKEUAEQ", "BAMUM LETTER PHASE-A PAARAE", "BAMUM LETTER PHASE-A NKAARAE", "BAMUM LETTER PHASE-A UNKNOWN", "BAMUM LETTER PHASE-A NGGEN", "BAMUM LETTER PHASE-A MAESI", "BAMUM LETTER PHASE-A NJAM", "BAMUM LETTER PHASE-A MBANYI", "BAMUM LETTER PHASE-A NYET", "BAMUM LETTER PHASE-A TEUAEN", "BAMUM LETTER PHASE-A SOT", "BAMUM LETTER PHASE-A PAAM", "BAMUM LETTER PHASE-A NSHIEE", "BAMUM LETTER PHASE-A MAEM", "BAMUM LETTER PHASE-A NYI", "BAMUM LETTER PHASE-A KAQ", "BAMUM LETTER PHASE-A NSHA", "BAMUM LETTER PHASE-A VEE", "BAMUM LETTER PHASE-A LU", "BAMUM LETTER PHASE-A NEN", "BAMUM LETTER PHASE-A NAQ", "BAMUM LETTER PHASE-A MBAQ", "BAMUM LETTER PHASE-B NSHUET", "BAMUM LETTER PHASE-B TU MAEMGBIEE", "BAMUM LETTER PHASE-B SIEE", "BAMUM LETTER PHASE-B SET TU", "BAMUM LETTER PHASE-B LOM NTEUM", "BAMUM LETTER PHASE-B MBA MAELEE", "BAMUM LETTER PHASE-B KIEEM", "BAMUM LETTER PHASE-B YEURAE", "BAMUM LETTER PHASE-B MBAARAE", "BAMUM LETTER PHASE-B KAM", "BAMUM LETTER PHASE-B PEESHI", "BAMUM LETTER PHASE-B YAFU LEERAEWA", "BAMUM LETTER PHASE-B LAM NSHUT NYAM", "BAMUM LETTER PHASE-B NTIEE SHEUOQ", "BAMUM LETTER PHASE-B NDU NJAA", "BAMUM LETTER PHASE-B GHEUGHEUAEM", "BAMUM LETTER PHASE-B PIT", "BAMUM LETTER PHASE-B TU NSIEE", "BAMUM LETTER PHASE-B SHET NJAQ", "BAMUM LETTER PHASE-B SHEUAEQTU", "BAMUM LETTER PHASE-B MFON TEUAEQ", "BAMUM LETTER PHASE-B MBIT MBAAKET", "BAMUM LETTER PHASE-B NYI NTEUM", "BAMUM LETTER PHASE-B KEUPUQ", "BAMUM LETTER PHASE-B GHEUGHEN", "BAMUM LETTER PHASE-B KEUYEUX", "BAMUM LETTER PHASE-B LAANAE", "BAMUM LETTER PHASE-B PARUM", "BAMUM LETTER PHASE-B VEUM", "BAMUM LETTER PHASE-B NGKINDI MVOP", "BAMUM LETTER PHASE-B NGGEU MBU", "BAMUM LETTER PHASE-B WUAET", "BAMUM LETTER PHASE-B SAKEUAE", "BAMUM LETTER PHASE-B TAAM", "BAMUM LETTER PHASE-B MEUQ", "BAMUM LETTER PHASE-B NGGUOQ", "BAMUM LETTER PHASE-B NGGUOQ LARGE", "BAMUM LETTER PHASE-B MFIYAQ", "BAMUM LETTER PHASE-B SUE", "BAMUM LETTER PHASE-B MBEURI", "BAMUM LETTER PHASE-B MONTIEEN", "BAMUM LETTER PHASE-B NYAEMAE", "BAMUM LETTER PHASE-B PUNGAAM", "BAMUM LETTER PHASE-B MEUT NGGEET", "BAMUM LETTER PHASE-B FEUX", "BAMUM LETTER PHASE-B MBUOQ", "BAMUM LETTER PHASE-B FEE", "BAMUM LETTER PHASE-B KEUAEM", "BAMUM LETTER PHASE-B MA NJEUAENA", "BAMUM LETTER PHASE-B MA NJUQA", "BAMUM LETTER PHASE-B LET", "BAMUM LETTER PHASE-B NGGAAM", "BAMUM LETTER PHASE-B NSEN", "BAMUM LETTER PHASE-B MA", "BAMUM LETTER PHASE-B KIQ", "BAMUM LETTER PHASE-B NGOM", "BAMUM LETTER PHASE-C NGKUE MAEMBA", "BAMUM LETTER PHASE-C NZA", "BAMUM LETTER PHASE-C YUM", "BAMUM LETTER PHASE-C WANGKUOQ", "BAMUM LETTER PHASE-C NGGEN", "BAMUM LETTER PHASE-C NDEUAEREE", "BAMUM LETTER PHASE-C NGKAQ", "BAMUM LETTER PHASE-C GHARAE", "BAMUM LETTER PHASE-C MBEEKEET", "BAMUM LETTER PHASE-C GBAYI", "BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN", "BAMUM LETTER PHASE-C NTU MBIT", "BAMUM LETTER PHASE-C MBEUM", "BAMUM LETTER PHASE-C PIRIEEN", "BAMUM LETTER PHASE-C NDOMBU", "BAMUM LETTER PHASE-C MBAA CABBAGE-TREE", "BAMUM LETTER PHASE-C KEUSHEUAEP", "BAMUM LETTER PHASE-C GHAP", "BAMUM LETTER PHASE-C KEUKAQ", "BAMUM LETTER PHASE-C YU MUOMAE", "BAMUM LETTER PHASE-C NZEUM", "BAMUM LETTER PHASE-C MBUE", "BAMUM LETTER PHASE-C NSEUAEN", "BAMUM LETTER PHASE-C MBIT", "BAMUM LETTER PHASE-C YEUQ", "BAMUM LETTER PHASE-C KPARAQ", "BAMUM LETTER PHASE-C KAA", "BAMUM LETTER PHASE-C SEUX", "BAMUM LETTER PHASE-C NDIDA", "BAMUM LETTER PHASE-C TAASHAE", "BAMUM LETTER PHASE-C NJUEQ", "BAMUM LETTER PHASE-C TITA YUE", "BAMUM LETTER PHASE-C SUAET", "BAMUM LETTER PHASE-C NGGUAEN NYAM", "BAMUM LETTER PHASE-C VEUX", "BAMUM LETTER PHASE-C NANSANAQ", "BAMUM LETTER PHASE-C MA KEUAERI", "BAMUM LETTER PHASE-C NTAA", "BAMUM LETTER PHASE-C NGGUON", "BAMUM LETTER PHASE-C LAP", "BAMUM LETTER PHASE-C MBIRIEEN", "BAMUM LETTER PHASE-C MGBASAQ", "BAMUM LETTER PHASE-C NTEUNGBA", "BAMUM LETTER PHASE-C TEUTEUX", "BAMUM LETTER PHASE-C NGGUM", "BAMUM LETTER PHASE-C FUE", "BAMUM LETTER PHASE-C NDEUT", "BAMUM LETTER PHASE-C NSA", "BAMUM LETTER PHASE-C NSHAQ", "BAMUM LETTER PHASE-C BUNG", "BAMUM LETTER PHASE-C VEUAEPEN", "BAMUM LETTER PHASE-C MBERAE", "BAMUM LETTER PHASE-C RU", "BAMUM LETTER PHASE-C NJAEM", "BAMUM LETTER PHASE-C LAM", "BAMUM LETTER PHASE-C TITUAEP", "BAMUM LETTER PHASE-C NSUOT NGOM", "BAMUM LETTER PHASE-C NJEEEE", "BAMUM LETTER PHASE-C KET", "BAMUM LETTER PHASE-C NGGU", "BAMUM LETTER PHASE-C MAESI", "BAMUM LETTER PHASE-C MBUAEM", "BAMUM LETTER PHASE-C LU", "BAMUM LETTER PHASE-C KUT", "BAMUM LETTER PHASE-C NJAM", "BAMUM LETTER PHASE-C NGOM", "BAMUM LETTER PHASE-C WUP", "BAMUM LETTER PHASE-C NGGUEET", "BAMUM LETTER PHASE-C NSOM", "BAMUM LETTER PHASE-C NTEN", "BAMUM LETTER PHASE-C KUOP NKAARAE", "BAMUM LETTER PHASE-C NSUN", "BAMUM LETTER PHASE-C NDAM", "BAMUM LETTER PHASE-C MA NSIEE", "BAMUM LETTER PHASE-C YAA", "BAMUM LETTER PHASE-C NDAP", "BAMUM LETTER PHASE-C SHUEQ", "BAMUM LETTER PHASE-C SETFON", "BAMUM LETTER PHASE-C MBI", "BAMUM LETTER PHASE-C MAEMBA", "BAMUM LETTER PHASE-C MBANYI", "BAMUM LETTER PHASE-C KEUSEUX", "BAMUM LETTER PHASE-C MBEUX", "BAMUM LETTER PHASE-C KEUM", "BAMUM LETTER PHASE-C MBAA PICKET", "BAMUM LETTER PHASE-C YUWOQ", "BAMUM LETTER PHASE-C NJEUX", "BAMUM LETTER PHASE-C MIEE", "BAMUM LETTER PHASE-C MUAE", "BAMUM LETTER PHASE-C SHIQ", "BAMUM LETTER PHASE-C KEN LAW", "BAMUM LETTER PHASE-C KEN FATIGUE", "BAMUM LETTER PHASE-C NGAQ", "BAMUM LETTER PHASE-C NAQ", "BAMUM LETTER PHASE-C LIQ", "BAMUM LETTER PHASE-C PIN", "BAMUM LETTER PHASE-C PEN", "BAMUM LETTER PHASE-C TET", "BAMUM LETTER PHASE-D MBUO", "BAMUM LETTER PHASE-D WAP", "BAMUM LETTER PHASE-D NJI", "BAMUM LETTER PHASE-D MFON", "BAMUM LETTER PHASE-D NJIEE", "BAMUM LETTER PHASE-D LIEE", "BAMUM LETTER PHASE-D NJEUT", "BAMUM LETTER PHASE-D NSHEE", "BAMUM LETTER PHASE-D NGGAAMAE", "BAMUM LETTER PHASE-D NYAM", "BAMUM LETTER PHASE-D WUAEN", "BAMUM LETTER PHASE-D NGKUN", "BAMUM LETTER PHASE-D SHEE", "BAMUM LETTER PHASE-D NGKAP", "BAMUM LETTER PHASE-D KEUAETMEUN", "BAMUM LETTER PHASE-D TEUT", "BAMUM LETTER PHASE-D SHEUAE", "BAMUM LETTER PHASE-D NJAP", "BAMUM LETTER PHASE-D SUE", "BAMUM LETTER PHASE-D KET", "BAMUM LETTER PHASE-D YAEMMAE", "BAMUM LETTER PHASE-D KUOM", "BAMUM LETTER PHASE-D SAP", "BAMUM LETTER PHASE-D MFEUT", "BAMUM LETTER PHASE-D NDEUX", "BAMUM LETTER PHASE-D MALEERI", "BAMUM LETTER PHASE-D MEUT", "BAMUM LETTER PHASE-D SEUAEQ", "BAMUM LETTER PHASE-D YEN", "BAMUM LETTER PHASE-D NJEUAEM", "BAMUM LETTER PHASE-D KEUOT MBUAE", "BAMUM LETTER PHASE-D NGKEURI", "BAMUM LETTER PHASE-D TU", "BAMUM LETTER PHASE-D GHAA", "BAMUM LETTER PHASE-D NGKYEE", "BAMUM LETTER PHASE-D FEUFEUAET", "BAMUM LETTER PHASE-D NDEE", "BAMUM LETTER PHASE-D MGBOFUM", "BAMUM LETTER PHASE-D LEUAEP", "BAMUM LETTER PHASE-D NDON", "BAMUM LETTER PHASE-D MONI", "BAMUM LETTER PHASE-D MGBEUN", "BAMUM LETTER PHASE-D PUUT", "BAMUM LETTER PHASE-D MGBIEE", "BAMUM LETTER PHASE-D MFO", "BAMUM LETTER PHASE-D LUM", "BAMUM LETTER PHASE-D NSIEEP", "BAMUM LETTER PHASE-D MBAA", "BAMUM LETTER PHASE-D KWAET", "BAMUM LETTER PHASE-D NYET", "BAMUM LETTER PHASE-D TEUAEN", "BAMUM LETTER PHASE-D SOT", "BAMUM LETTER PHASE-D YUWOQ", "BAMUM LETTER PHASE-D KEUM", "BAMUM LETTER PHASE-D RAEM", "BAMUM LETTER PHASE-D TEEEE", "BAMUM LETTER PHASE-D NGKEUAEQ", "BAMUM LETTER PHASE-D MFEUAE", "BAMUM LETTER PHASE-D NSIEET", "BAMUM LETTER PHASE-D KEUP", "BAMUM LETTER PHASE-D PIP", "BAMUM LETTER PHASE-D PEUTAE", "BAMUM LETTER PHASE-D NYUE", "BAMUM LETTER PHASE-D LET", "BAMUM LETTER PHASE-D NGGAAM", "BAMUM LETTER PHASE-D MFIEE", "BAMUM LETTER PHASE-D NGGWAEN", "BAMUM LETTER PHASE-D YUOM", "BAMUM LETTER PHASE-D PAP", "BAMUM LETTER PHASE-D YUOP", "BAMUM LETTER PHASE-D NDAM", "BAMUM LETTER PHASE-D NTEUM", "BAMUM LETTER PHASE-D SUAE", "BAMUM LETTER PHASE-D KUN", "BAMUM LETTER PHASE-D NGGEUX", "BAMUM LETTER PHASE-D NGKIEE", "BAMUM LETTER PHASE-D TUOT", "BAMUM LETTER PHASE-D MEUN", "BAMUM LETTER PHASE-D KUQ", "BAMUM LETTER PHASE-D NSUM", "BAMUM LETTER PHASE-D TEUN", "BAMUM LETTER PHASE-D MAENJET", "BAMUM LETTER PHASE-D NGGAP", "BAMUM LETTER PHASE-D LEUM", "BAMUM LETTER PHASE-D NGGUOM", "BAMUM LETTER PHASE-D NSHUT", "BAMUM LETTER PHASE-D NJUEQ", "BAMUM LETTER PHASE-D GHEUAE", "BAMUM LETTER PHASE-D KU", "BAMUM LETTER PHASE-D REN OLD", "BAMUM LETTER PHASE-D TAE", "BAMUM LETTER PHASE-D TOQ", "BAMUM LETTER PHASE-D NYI", "BAMUM LETTER PHASE-D RII", "BAMUM LETTER PHASE-D LEEEE", "BAMUM LETTER PHASE-D MEEEE", "BAMUM LETTER PHASE-D M", "BAMUM LETTER PHASE-D SUU", "BAMUM LETTER PHASE-D MU", "BAMUM LETTER PHASE-D SHII", "BAMUM LETTER PHASE-D SHEUX", "BAMUM LETTER PHASE-D KYEE", "BAMUM LETTER PHASE-D NU", "BAMUM LETTER PHASE-D SHU", "BAMUM LETTER PHASE-D NTEE", "BAMUM LETTER PHASE-D PEE", "BAMUM LETTER PHASE-D NI", "BAMUM LETTER PHASE-D SHOQ", "BAMUM LETTER PHASE-D PUQ", "BAMUM LETTER PHASE-D MVOP", "BAMUM LETTER PHASE-D LOQ", "BAMUM LETTER PHASE-D REN MUCH", "BAMUM LETTER PHASE-D TI", "BAMUM LETTER PHASE-D NTUU", "BAMUM LETTER PHASE-D MBAA SEVEN", "BAMUM LETTER PHASE-D SAQ", "BAMUM LETTER PHASE-D FAA", "BAMUM LETTER PHASE-E NDAP", "BAMUM LETTER PHASE-E TOON", "BAMUM LETTER PHASE-E MBEUM", "BAMUM LETTER PHASE-E LAP", "BAMUM LETTER PHASE-E VOM", "BAMUM LETTER PHASE-E LOON", "BAMUM LETTER PHASE-E PAA", "BAMUM LETTER PHASE-E SOM", "BAMUM LETTER PHASE-E RAQ", "BAMUM LETTER PHASE-E NSHUOP", "BAMUM LETTER PHASE-E NDUN", "BAMUM LETTER PHASE-E PUAE", "BAMUM LETTER PHASE-E TAM", "BAMUM LETTER PHASE-E NGKA", "BAMUM LETTER PHASE-E KPEUX", "BAMUM LETTER PHASE-E WUO", "BAMUM LETTER PHASE-E SEE", "BAMUM LETTER PHASE-E NGGEUAET", "BAMUM LETTER PHASE-E PAAM", "BAMUM LETTER PHASE-E TOO", "BAMUM LETTER PHASE-E KUOP", "BAMUM LETTER PHASE-E LOM", "BAMUM LETTER PHASE-E NSHIEE", "BAMUM LETTER PHASE-E NGOP", "BAMUM LETTER PHASE-E MAEM", "BAMUM LETTER PHASE-E NGKEUX", "BAMUM LETTER PHASE-E NGOQ", "BAMUM LETTER PHASE-E NSHUE", "BAMUM LETTER PHASE-E RIMGBA", "BAMUM LETTER PHASE-E NJEUX", "BAMUM LETTER PHASE-E PEEM", "BAMUM LETTER PHASE-E SAA", "BAMUM LETTER PHASE-E NGGURAE", "BAMUM LETTER PHASE-E MGBA", "BAMUM LETTER PHASE-E GHEUX", "BAMUM LETTER PHASE-E NGKEUAEM", "BAMUM LETTER PHASE-E NJAEMLI", "BAMUM LETTER PHASE-E MAP", "BAMUM LETTER PHASE-E LOOT", "BAMUM LETTER PHASE-E NGGEEEE", "BAMUM LETTER PHASE-E NDIQ", "BAMUM LETTER PHASE-E TAEN NTEUM", "BAMUM LETTER PHASE-E SET", "BAMUM LETTER PHASE-E PUM", "BAMUM LETTER PHASE-E NDAA SOFTNESS", "BAMUM LETTER PHASE-E NGGUAESHAE NYAM", "BAMUM LETTER PHASE-E YIEE", "BAMUM LETTER PHASE-E GHEUN", "BAMUM LETTER PHASE-E TUAE", "BAMUM LETTER PHASE-E YEUAE", "BAMUM LETTER PHASE-E PO", "BAMUM LETTER PHASE-E TUMAE", "BAMUM LETTER PHASE-E KEUAE", "BAMUM LETTER PHASE-E SUAEN", "BAMUM LETTER PHASE-E TEUAEQ", "BAMUM LETTER PHASE-E VEUAE", "BAMUM LETTER PHASE-E WEUX", "BAMUM LETTER PHASE-E LAAM", "BAMUM LETTER PHASE-E PU", "BAMUM LETTER PHASE-E TAAQ", "BAMUM LETTER PHASE-E GHAAMAE", "BAMUM LETTER PHASE-E NGEUREUT", "BAMUM LETTER PHASE-E SHEUAEQ", "BAMUM LETTER PHASE-E MGBEN", "BAMUM LETTER PHASE-E MBEE", "BAMUM LETTER PHASE-E NZAQ", "BAMUM LETTER PHASE-E NKOM", "BAMUM LETTER PHASE-E GBET", "BAMUM LETTER PHASE-E TUM", "BAMUM LETTER PHASE-E KUET", "BAMUM LETTER PHASE-E YAP", "BAMUM LETTER PHASE-E NYI CLEAVER", "BAMUM LETTER PHASE-E YIT", "BAMUM LETTER PHASE-E MFEUQ", "BAMUM LETTER PHASE-E NDIAQ", "BAMUM LETTER PHASE-E PIEEQ", "BAMUM LETTER PHASE-E YUEQ", "BAMUM LETTER PHASE-E LEUAEM", "BAMUM LETTER PHASE-E FUE", "BAMUM LETTER PHASE-E GBEUX", "BAMUM LETTER PHASE-E NGKUP", "BAMUM LETTER PHASE-E KET", "BAMUM LETTER PHASE-E MAE", "BAMUM LETTER PHASE-E NGKAAMI", "BAMUM LETTER PHASE-E GHET", "BAMUM LETTER PHASE-E FA", "BAMUM LETTER PHASE-E NTUM", "BAMUM LETTER PHASE-E PEUT", "BAMUM LETTER PHASE-E YEUM", "BAMUM LETTER PHASE-E NGGEUAE", "BAMUM LETTER PHASE-E NYI BETWEEN", "BAMUM LETTER PHASE-E NZUQ", "BAMUM LETTER PHASE-E POON", "BAMUM LETTER PHASE-E MIEE", "BAMUM LETTER PHASE-E FUET", "BAMUM LETTER PHASE-E NAE", "BAMUM LETTER PHASE-E MUAE", "BAMUM LETTER PHASE-E GHEUAE", "BAMUM LETTER PHASE-E FU I", "BAMUM LETTER PHASE-E MVI", "BAMUM LETTER PHASE-E PUAQ", "BAMUM LETTER PHASE-E NGKUM", "BAMUM LETTER PHASE-E KUT", "BAMUM LETTER PHASE-E PIET", "BAMUM LETTER PHASE-E NTAP", "BAMUM LETTER PHASE-E YEUAET", "BAMUM LETTER PHASE-E NGGUP", "BAMUM LETTER PHASE-E PA PEOPLE", "BAMUM LETTER PHASE-E FU CALL", "BAMUM LETTER PHASE-E FOM", "BAMUM LETTER PHASE-E NJEE", "BAMUM LETTER PHASE-E A", "BAMUM LETTER PHASE-E TOQ", "BAMUM LETTER PHASE-E O", "BAMUM LETTER PHASE-E I", "BAMUM LETTER PHASE-E LAQ", "BAMUM LETTER PHASE-E PA PLURAL", "BAMUM LETTER PHASE-E TAA", "BAMUM LETTER PHASE-E TAQ", "BAMUM LETTER PHASE-E NDAA MY HOUSE", "BAMUM LETTER PHASE-E SHIQ", "BAMUM LETTER PHASE-E YEUX", "BAMUM LETTER PHASE-E NGUAE", "BAMUM LETTER PHASE-E YUAEN", "BAMUM LETTER PHASE-E YOQ SWIMMING", "BAMUM LETTER PHASE-E YOQ COVER", "BAMUM LETTER PHASE-E YUQ", "BAMUM LETTER PHASE-E YUN", "BAMUM LETTER PHASE-E KEUX", "BAMUM LETTER PHASE-E PEUX", "BAMUM LETTER PHASE-E NJEE EPOCH", "BAMUM LETTER PHASE-E PUE", "BAMUM LETTER PHASE-E WUE", "BAMUM LETTER PHASE-E FEE", "BAMUM LETTER PHASE-E VEE", "BAMUM LETTER PHASE-E LU", "BAMUM LETTER PHASE-E MI", "BAMUM LETTER PHASE-E REUX", "BAMUM LETTER PHASE-E RAE", "BAMUM LETTER PHASE-E NGUAET", "BAMUM LETTER PHASE-E NGA", "BAMUM LETTER PHASE-E SHO", "BAMUM LETTER PHASE-E SHOQ", "BAMUM LETTER PHASE-E FU REMEDY", "BAMUM LETTER PHASE-E NA", "BAMUM LETTER PHASE-E PI", "BAMUM LETTER PHASE-E LOQ", "BAMUM LETTER PHASE-E KO", "BAMUM LETTER PHASE-E MEN", "BAMUM LETTER PHASE-E MA", "BAMUM LETTER PHASE-E MAQ", "BAMUM LETTER PHASE-E TEU", "BAMUM LETTER PHASE-E KI", "BAMUM LETTER PHASE-E MON", "BAMUM LETTER PHASE-E TEN", "BAMUM LETTER PHASE-E FAQ", "BAMUM LETTER PHASE-E GHOM", "BAMUM LETTER PHASE-F KA", "BAMUM LETTER PHASE-F U", "BAMUM LETTER PHASE-F KU", "BAMUM LETTER PHASE-F EE", "BAMUM LETTER PHASE-F REE", "BAMUM LETTER PHASE-F TAE", "BAMUM LETTER PHASE-F NYI", "BAMUM LETTER PHASE-F LA", "BAMUM LETTER PHASE-F RII", "BAMUM LETTER PHASE-F RIEE", "BAMUM LETTER PHASE-F MEEEE", "BAMUM LETTER PHASE-F TAA", "BAMUM LETTER PHASE-F NDAA", "BAMUM LETTER PHASE-F NJAEM", "BAMUM LETTER PHASE-F M", "BAMUM LETTER PHASE-F SUU", "BAMUM LETTER PHASE-F SHII", "BAMUM LETTER PHASE-F SI", "BAMUM LETTER PHASE-F SEUX", "BAMUM LETTER PHASE-F KYEE", "BAMUM LETTER PHASE-F KET", "BAMUM LETTER PHASE-F NUAE", "BAMUM LETTER PHASE-F NU", "BAMUM LETTER PHASE-F NJUAE", "BAMUM LETTER PHASE-F YOQ", "BAMUM LETTER PHASE-F SHU", "BAMUM LETTER PHASE-F YA", "BAMUM LETTER PHASE-F NSHA", "BAMUM LETTER PHASE-F PEUX", "BAMUM LETTER PHASE-F NTEE", "BAMUM LETTER PHASE-F WUE", "BAMUM LETTER PHASE-F PEE", "BAMUM LETTER PHASE-F RU", "BAMUM LETTER PHASE-F NI", "BAMUM LETTER PHASE-F REUX", "BAMUM LETTER PHASE-F KEN", "BAMUM LETTER PHASE-F NGKWAEN", "BAMUM LETTER PHASE-F NGGA", "BAMUM LETTER PHASE-F SHO", "BAMUM LETTER PHASE-F PUAE", "BAMUM LETTER PHASE-F FOM", "BAMUM LETTER PHASE-F WA", "BAMUM LETTER PHASE-F LI", "BAMUM LETTER PHASE-F LOQ", "BAMUM LETTER PHASE-F KO", "BAMUM LETTER PHASE-F MBEN", "BAMUM LETTER PHASE-F REN", "BAMUM LETTER PHASE-F MA", "BAMUM LETTER PHASE-F MO", "BAMUM LETTER PHASE-F MBAA", "BAMUM LETTER PHASE-F TET", "BAMUM LETTER PHASE-F KPA", "BAMUM LETTER PHASE-F SAMBA", "BAMUM LETTER PHASE-F VUEQ", "MRO LETTER TA", "MRO LETTER NGI", "MRO LETTER YO", "MRO LETTER MIM", "MRO LETTER BA", "MRO LETTER DA", "MRO LETTER A", "MRO LETTER PHI", "MRO LETTER KHAI", "MRO LETTER HAO", "MRO LETTER DAI", "MRO LETTER CHU", "MRO LETTER KEAAE", "MRO LETTER OL", "MRO LETTER MAEM", "MRO LETTER NIN", "MRO LETTER PA", "MRO LETTER OO", "MRO LETTER O", "MRO LETTER RO", "MRO LETTER SHI", "MRO LETTER THEA", "MRO LETTER EA", "MRO LETTER WA", "MRO LETTER E", "MRO LETTER KO", "MRO LETTER LAN", "MRO LETTER LA", "MRO LETTER HAI", "MRO LETTER RI", "MRO LETTER TEK", "MRO DIGIT ZERO", "MRO DIGIT ONE", "MRO DIGIT TWO", "MRO DIGIT THREE", "MRO DIGIT FOUR", "MRO DIGIT FIVE", "MRO DIGIT SIX", "MRO DIGIT SEVEN", "MRO DIGIT EIGHT", "MRO DIGIT NINE", "MRO DANDA", "MRO DOUBLE DANDA", "BASSA VAH LETTER ENNI", "BASSA VAH LETTER KA", "BASSA VAH LETTER SE", "BASSA VAH LETTER FA", "BASSA VAH LETTER MBE", "BASSA VAH LETTER YIE", "BASSA VAH LETTER GAH", "BASSA VAH LETTER DHII", "BASSA VAH LETTER KPAH", "BASSA VAH LETTER JO", "BASSA VAH LETTER HWAH", "BASSA VAH LETTER WA", "BASSA VAH LETTER ZO", "BASSA VAH LETTER GBU", "BASSA VAH LETTER DO", "BASSA VAH LETTER CE", "BASSA VAH LETTER UWU", "BASSA VAH LETTER TO", "BASSA VAH LETTER BA", "BASSA VAH LETTER VU", "BASSA VAH LETTER YEIN", "BASSA VAH LETTER PA", "BASSA VAH LETTER WADDA", "BASSA VAH LETTER A", "BASSA VAH LETTER O", "BASSA VAH LETTER OO", "BASSA VAH LETTER U", "BASSA VAH LETTER EE", "BASSA VAH LETTER E", "BASSA VAH LETTER I", "BASSA VAH COMBINING HIGH TONE", "BASSA VAH COMBINING LOW TONE", "BASSA VAH COMBINING MID TONE", "BASSA VAH COMBINING LOW-MID TONE", "BASSA VAH COMBINING HIGH-LOW TONE", "BASSA VAH FULL STOP", "PAHAWH HMONG VOWEL KEEB", "PAHAWH HMONG VOWEL KEEV", "PAHAWH HMONG VOWEL KIB", "PAHAWH HMONG VOWEL KIV", "PAHAWH HMONG VOWEL KAUB", "PAHAWH HMONG VOWEL KAUV", "PAHAWH HMONG VOWEL KUB", "PAHAWH HMONG VOWEL KUV", "PAHAWH HMONG VOWEL KEB", "PAHAWH HMONG VOWEL KEV", "PAHAWH HMONG VOWEL KAIB", "PAHAWH HMONG VOWEL KAIV", "PAHAWH HMONG VOWEL KOOB", "PAHAWH HMONG VOWEL KOOV", "PAHAWH HMONG VOWEL KAWB", "PAHAWH HMONG VOWEL KAWV", "PAHAWH HMONG VOWEL KUAB", "PAHAWH HMONG VOWEL KUAV", "PAHAWH HMONG VOWEL KOB", "PAHAWH HMONG VOWEL KOV", "PAHAWH HMONG VOWEL KIAB", "PAHAWH HMONG VOWEL KIAV", "PAHAWH HMONG VOWEL KAB", "PAHAWH HMONG VOWEL KAV", "PAHAWH HMONG VOWEL KWB", "PAHAWH HMONG VOWEL KWV", "PAHAWH HMONG VOWEL KAAB", "PAHAWH HMONG VOWEL KAAV", "PAHAWH HMONG CONSONANT VAU", "PAHAWH HMONG CONSONANT NTSAU", "PAHAWH HMONG CONSONANT LAU", "PAHAWH HMONG CONSONANT HAU", "PAHAWH HMONG CONSONANT NLAU", "PAHAWH HMONG CONSONANT RAU", "PAHAWH HMONG CONSONANT NKAU", "PAHAWH HMONG CONSONANT QHAU", "PAHAWH HMONG CONSONANT YAU", "PAHAWH HMONG CONSONANT HLAU", "PAHAWH HMONG CONSONANT MAU", "PAHAWH HMONG CONSONANT CHAU", "PAHAWH HMONG CONSONANT NCHAU", "PAHAWH HMONG CONSONANT HNAU", "PAHAWH HMONG CONSONANT PLHAU", "PAHAWH HMONG CONSONANT NTHAU", "PAHAWH HMONG CONSONANT NAU", "PAHAWH HMONG CONSONANT AU", "PAHAWH HMONG CONSONANT XAU", "PAHAWH HMONG CONSONANT CAU", "PAHAWH HMONG MARK CIM TUB", "PAHAWH HMONG MARK CIM SO", "PAHAWH HMONG MARK CIM KES", "PAHAWH HMONG MARK CIM KHAV", "PAHAWH HMONG MARK CIM SUAM", "PAHAWH HMONG MARK CIM HOM", "PAHAWH HMONG MARK CIM TAUM", "PAHAWH HMONG SIGN VOS THOM", "PAHAWH HMONG SIGN VOS TSHAB CEEB", "PAHAWH HMONG SIGN CIM CHEEM", "PAHAWH HMONG SIGN VOS THIAB", "PAHAWH HMONG SIGN VOS FEEM", "PAHAWH HMONG SIGN XYEEM NTXIV", "PAHAWH HMONG SIGN XYEEM RHO", "PAHAWH HMONG SIGN XYEEM TOV", "PAHAWH HMONG SIGN XYEEM FAIB", "PAHAWH HMONG SIGN VOS SEEV", "PAHAWH HMONG SIGN MEEJ SUAB", "PAHAWH HMONG SIGN VOS NRUA", "PAHAWH HMONG SIGN IB YAM", "PAHAWH HMONG SIGN XAUS", "PAHAWH HMONG SIGN CIM TSOV ROG", "PAHAWH HMONG DIGIT ZERO", "PAHAWH HMONG DIGIT ONE", "PAHAWH HMONG DIGIT TWO", "PAHAWH HMONG DIGIT THREE", "PAHAWH HMONG DIGIT FOUR", "PAHAWH HMONG DIGIT FIVE", "PAHAWH HMONG DIGIT SIX", "PAHAWH HMONG DIGIT SEVEN", "PAHAWH HMONG DIGIT EIGHT", "PAHAWH HMONG DIGIT NINE", "PAHAWH HMONG NUMBER TENS", "PAHAWH HMONG NUMBER HUNDREDS", "PAHAWH HMONG NUMBER TEN THOUSANDS", "PAHAWH HMONG NUMBER MILLIONS", "PAHAWH HMONG NUMBER HUNDRED MILLIONS", "PAHAWH HMONG NUMBER TEN BILLIONS", "PAHAWH HMONG NUMBER TRILLIONS", "PAHAWH HMONG SIGN VOS LUB", "PAHAWH HMONG SIGN XYOO", "PAHAWH HMONG SIGN HLI", "PAHAWH HMONG SIGN THIRD-STAGE HLI", "PAHAWH HMONG SIGN ZWJ THAJ", "PAHAWH HMONG SIGN HNUB", "PAHAWH HMONG SIGN NQIG", "PAHAWH HMONG SIGN XIAB", "PAHAWH HMONG SIGN NTUJ", "PAHAWH HMONG SIGN AV", "PAHAWH HMONG SIGN TXHEEJ CEEV", "PAHAWH HMONG SIGN MEEJ TSEEB", "PAHAWH HMONG SIGN TAU", "PAHAWH HMONG SIGN LOS", "PAHAWH HMONG SIGN MUS", "PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG", "PAHAWH HMONG SIGN CIM CUAM TSHOOJ", "PAHAWH HMONG SIGN CIM TXWV", "PAHAWH HMONG SIGN CIM TXWV CHWV", "PAHAWH HMONG SIGN CIM PUB DAWB", "PAHAWH HMONG SIGN CIM NRES TOS", "PAHAWH HMONG CLAN SIGN TSHEEJ", "PAHAWH HMONG CLAN SIGN YEEG", "PAHAWH HMONG CLAN SIGN LIS", "PAHAWH HMONG CLAN SIGN LAUJ", "PAHAWH HMONG CLAN SIGN XYOOJ", "PAHAWH HMONG CLAN SIGN KOO", "PAHAWH HMONG CLAN SIGN HAWJ", "PAHAWH HMONG CLAN SIGN MUAS", "PAHAWH HMONG CLAN SIGN THOJ", "PAHAWH HMONG CLAN SIGN TSAB", "PAHAWH HMONG CLAN SIGN PHAB", "PAHAWH HMONG CLAN SIGN KHAB", "PAHAWH HMONG CLAN SIGN HAM", "PAHAWH HMONG CLAN SIGN VAJ", "PAHAWH HMONG CLAN SIGN FAJ", "PAHAWH HMONG CLAN SIGN YAJ", "PAHAWH HMONG CLAN SIGN TSWB", "PAHAWH HMONG CLAN SIGN KWM", "PAHAWH HMONG CLAN SIGN VWJ", "MEDEFAIDRIN CAPITAL LETTER M", "MEDEFAIDRIN CAPITAL LETTER S", "MEDEFAIDRIN CAPITAL LETTER V", "MEDEFAIDRIN CAPITAL LETTER W", "MEDEFAIDRIN CAPITAL LETTER ATIU", "MEDEFAIDRIN CAPITAL LETTER Z", "MEDEFAIDRIN CAPITAL LETTER KP", "MEDEFAIDRIN CAPITAL LETTER P", "MEDEFAIDRIN CAPITAL LETTER T", "MEDEFAIDRIN CAPITAL LETTER G", "MEDEFAIDRIN CAPITAL LETTER F", "MEDEFAIDRIN CAPITAL LETTER I", "MEDEFAIDRIN CAPITAL LETTER K", "MEDEFAIDRIN CAPITAL LETTER A", "MEDEFAIDRIN CAPITAL LETTER J", "MEDEFAIDRIN CAPITAL LETTER E", "MEDEFAIDRIN CAPITAL LETTER B", "MEDEFAIDRIN CAPITAL LETTER C", "MEDEFAIDRIN CAPITAL LETTER U", "MEDEFAIDRIN CAPITAL LETTER YU", "MEDEFAIDRIN CAPITAL LETTER L", "MEDEFAIDRIN CAPITAL LETTER Q", "MEDEFAIDRIN CAPITAL LETTER HP", "MEDEFAIDRIN CAPITAL LETTER NY", "MEDEFAIDRIN CAPITAL LETTER X", "MEDEFAIDRIN CAPITAL LETTER D", "MEDEFAIDRIN CAPITAL LETTER OE", "MEDEFAIDRIN CAPITAL LETTER N", "MEDEFAIDRIN CAPITAL LETTER R", "MEDEFAIDRIN CAPITAL LETTER O", "MEDEFAIDRIN CAPITAL LETTER AI", "MEDEFAIDRIN CAPITAL LETTER Y", "MEDEFAIDRIN SMALL LETTER M", "MEDEFAIDRIN SMALL LETTER S", "MEDEFAIDRIN SMALL LETTER V", "MEDEFAIDRIN SMALL LETTER W", "MEDEFAIDRIN SMALL LETTER ATIU", "MEDEFAIDRIN SMALL LETTER Z", "MEDEFAIDRIN SMALL LETTER KP", "MEDEFAIDRIN SMALL LETTER P", "MEDEFAIDRIN SMALL LETTER T", "MEDEFAIDRIN SMALL LETTER G", "MEDEFAIDRIN SMALL LETTER F", "MEDEFAIDRIN SMALL LETTER I", "MEDEFAIDRIN SMALL LETTER K", "MEDEFAIDRIN SMALL LETTER A", "MEDEFAIDRIN SMALL LETTER J", "MEDEFAIDRIN SMALL LETTER E", "MEDEFAIDRIN SMALL LETTER B", "MEDEFAIDRIN SMALL LETTER C", "MEDEFAIDRIN SMALL LETTER U", "MEDEFAIDRIN SMALL LETTER YU", "MEDEFAIDRIN SMALL LETTER L", "MEDEFAIDRIN SMALL LETTER Q", "MEDEFAIDRIN SMALL LETTER HP", "MEDEFAIDRIN SMALL LETTER NY", "MEDEFAIDRIN SMALL LETTER X", "MEDEFAIDRIN SMALL LETTER D", "MEDEFAIDRIN SMALL LETTER OE", "MEDEFAIDRIN SMALL LETTER N", "MEDEFAIDRIN SMALL LETTER R", "MEDEFAIDRIN SMALL LETTER O", "MEDEFAIDRIN SMALL LETTER AI", "MEDEFAIDRIN SMALL LETTER Y", "MEDEFAIDRIN DIGIT ZERO", "MEDEFAIDRIN DIGIT ONE", "MEDEFAIDRIN DIGIT TWO", "MEDEFAIDRIN DIGIT THREE", "MEDEFAIDRIN DIGIT FOUR", "MEDEFAIDRIN DIGIT FIVE", "MEDEFAIDRIN DIGIT SIX", "MEDEFAIDRIN DIGIT SEVEN", "MEDEFAIDRIN DIGIT EIGHT", "MEDEFAIDRIN DIGIT NINE", "MEDEFAIDRIN NUMBER TEN", "MEDEFAIDRIN NUMBER ELEVEN", "MEDEFAIDRIN NUMBER TWELVE", "MEDEFAIDRIN NUMBER THIRTEEN", "MEDEFAIDRIN NUMBER FOURTEEN", "MEDEFAIDRIN NUMBER FIFTEEN", "MEDEFAIDRIN NUMBER SIXTEEN", "MEDEFAIDRIN NUMBER SEVENTEEN", "MEDEFAIDRIN NUMBER EIGHTEEN", "MEDEFAIDRIN NUMBER NINETEEN", "MEDEFAIDRIN DIGIT ONE ALTERNATE FORM", "MEDEFAIDRIN DIGIT TWO ALTERNATE FORM", "MEDEFAIDRIN DIGIT THREE ALTERNATE FORM", "MEDEFAIDRIN COMMA", "MEDEFAIDRIN FULL STOP", "MEDEFAIDRIN SYMBOL AIVA", "MEDEFAIDRIN EXCLAMATION OH", "MIAO LETTER PA", "MIAO LETTER BA", "MIAO LETTER YI PA", "MIAO LETTER PLA", "MIAO LETTER MA", "MIAO LETTER MHA", "MIAO LETTER ARCHAIC MA", "MIAO LETTER FA", "MIAO LETTER VA", "MIAO LETTER VFA", "MIAO LETTER TA", "MIAO LETTER DA", "MIAO LETTER YI TTA", "MIAO LETTER YI TA", "MIAO LETTER TTA", "MIAO LETTER DDA", "MIAO LETTER NA", "MIAO LETTER NHA", "MIAO LETTER YI NNA", "MIAO LETTER ARCHAIC NA", "MIAO LETTER NNA", "MIAO LETTER NNHA", "MIAO LETTER LA", "MIAO LETTER LYA", "MIAO LETTER LHA", "MIAO LETTER LHYA", "MIAO LETTER TLHA", "MIAO LETTER DLHA", "MIAO LETTER TLHYA", "MIAO LETTER DLHYA", "MIAO LETTER KA", "MIAO LETTER GA", "MIAO LETTER YI KA", "MIAO LETTER QA", "MIAO LETTER QGA", "MIAO LETTER NGA", "MIAO LETTER NGHA", "MIAO LETTER ARCHAIC NGA", "MIAO LETTER HA", "MIAO LETTER XA", "MIAO LETTER GHA", "MIAO LETTER GHHA", "MIAO LETTER TSSA", "MIAO LETTER DZZA", "MIAO LETTER NYA", "MIAO LETTER NYHA", "MIAO LETTER TSHA", "MIAO LETTER DZHA", "MIAO LETTER YI TSHA", "MIAO LETTER YI DZHA", "MIAO LETTER REFORMED TSHA", "MIAO LETTER SHA", "MIAO LETTER SSA", "MIAO LETTER ZHA", "MIAO LETTER ZSHA", "MIAO LETTER TSA", "MIAO LETTER DZA", "MIAO LETTER YI TSA", "MIAO LETTER SA", "MIAO LETTER ZA", "MIAO LETTER ZSA", "MIAO LETTER ZZA", "MIAO LETTER ZZSA", "MIAO LETTER ARCHAIC ZZA", "MIAO LETTER ZZYA", "MIAO LETTER ZZSYA", "MIAO LETTER WA", "MIAO LETTER AH", "MIAO LETTER HHA", "MIAO LETTER BRI", "MIAO LETTER SYI", "MIAO LETTER DZYI", "MIAO LETTER TE", "MIAO LETTER TSE", "MIAO LETTER RTE", "MIAO SIGN CONSONANT MODIFIER BAR", "MIAO LETTER NASALIZATION", "MIAO SIGN ASPIRATION", "MIAO SIGN REFORMED VOICING", "MIAO SIGN REFORMED ASPIRATION", "MIAO VOWEL SIGN A", "MIAO VOWEL SIGN AA", "MIAO VOWEL SIGN AHH", "MIAO VOWEL SIGN AN", "MIAO VOWEL SIGN ANG", "MIAO VOWEL SIGN O", "MIAO VOWEL SIGN OO", "MIAO VOWEL SIGN WO", "MIAO VOWEL SIGN W", "MIAO VOWEL SIGN E", "MIAO VOWEL SIGN EN", "MIAO VOWEL SIGN ENG", "MIAO VOWEL SIGN OEY", "MIAO VOWEL SIGN I", "MIAO VOWEL SIGN IA", "MIAO VOWEL SIGN IAN", "MIAO VOWEL SIGN IANG", "MIAO VOWEL SIGN IO", "MIAO VOWEL SIGN IE", "MIAO VOWEL SIGN II", "MIAO VOWEL SIGN IU", "MIAO VOWEL SIGN ING", "MIAO VOWEL SIGN U", "MIAO VOWEL SIGN UA", "MIAO VOWEL SIGN UAN", "MIAO VOWEL SIGN UANG", "MIAO VOWEL SIGN UU", "MIAO VOWEL SIGN UEI", "MIAO VOWEL SIGN UNG", "MIAO VOWEL SIGN Y", "MIAO VOWEL SIGN YI", "MIAO VOWEL SIGN AE", "MIAO VOWEL SIGN AEE", "MIAO VOWEL SIGN ERR", "MIAO VOWEL SIGN ROUNDED ERR", "MIAO VOWEL SIGN ER", "MIAO VOWEL SIGN ROUNDED ER", "MIAO VOWEL SIGN AI", "MIAO VOWEL SIGN EI", "MIAO VOWEL SIGN AU", "MIAO VOWEL SIGN OU", "MIAO VOWEL SIGN N", "MIAO VOWEL SIGN NG", "MIAO VOWEL SIGN UOG", "MIAO VOWEL SIGN YUI", "MIAO VOWEL SIGN OG", "MIAO VOWEL SIGN OER", "MIAO VOWEL SIGN VW", "MIAO VOWEL SIGN IG", "MIAO VOWEL SIGN EA", "MIAO VOWEL SIGN IONG", "MIAO VOWEL SIGN UI", "MIAO TONE RIGHT", "MIAO TONE TOP RIGHT", "MIAO TONE ABOVE", "MIAO TONE BELOW", "MIAO LETTER TONE-2", "MIAO LETTER TONE-3", "MIAO LETTER TONE-4", "MIAO LETTER TONE-5", "MIAO LETTER TONE-6", "MIAO LETTER TONE-7", "MIAO LETTER TONE-8", "MIAO LETTER REFORMED TONE-1", "MIAO LETTER REFORMED TONE-2", "MIAO LETTER REFORMED TONE-4", "MIAO LETTER REFORMED TONE-5", "MIAO LETTER REFORMED TONE-6", "MIAO LETTER REFORMED TONE-8", "TANGUT ITERATION MARK", "NUSHU ITERATION MARK", "OLD CHINESE HOOK MARK", "OLD CHINESE ITERATION MARK", "", "", "TANGUT COMPONENT-001", "TANGUT COMPONENT-002", "TANGUT COMPONENT-003", "TANGUT COMPONENT-004", "TANGUT COMPONENT-005", "TANGUT COMPONENT-006", "TANGUT COMPONENT-007", "TANGUT COMPONENT-008", "TANGUT COMPONENT-009", "TANGUT COMPONENT-010", "TANGUT COMPONENT-011", "TANGUT COMPONENT-012", "TANGUT COMPONENT-013", "TANGUT COMPONENT-014", "TANGUT COMPONENT-015", "TANGUT COMPONENT-016", "TANGUT COMPONENT-017", "TANGUT COMPONENT-018", "TANGUT COMPONENT-019", "TANGUT COMPONENT-020", "TANGUT COMPONENT-021", "TANGUT COMPONENT-022", "TANGUT COMPONENT-023", "TANGUT COMPONENT-024", "TANGUT COMPONENT-025", "TANGUT COMPONENT-026", "TANGUT COMPONENT-027", "TANGUT COMPONENT-028", "TANGUT COMPONENT-029", "TANGUT COMPONENT-030", "TANGUT COMPONENT-031", "TANGUT COMPONENT-032", "TANGUT COMPONENT-033", "TANGUT COMPONENT-034", "TANGUT COMPONENT-035", "TANGUT COMPONENT-036", "TANGUT COMPONENT-037", "TANGUT COMPONENT-038", "TANGUT COMPONENT-039", "TANGUT COMPONENT-040", "TANGUT COMPONENT-041", "TANGUT COMPONENT-042", "TANGUT COMPONENT-043", "TANGUT COMPONENT-044", "TANGUT COMPONENT-045", "TANGUT COMPONENT-046", "TANGUT COMPONENT-047", "TANGUT COMPONENT-048", "TANGUT COMPONENT-049", "TANGUT COMPONENT-050", "TANGUT COMPONENT-051", "TANGUT COMPONENT-052", "TANGUT COMPONENT-053", "TANGUT COMPONENT-054", "TANGUT COMPONENT-055", "TANGUT COMPONENT-056", "TANGUT COMPONENT-057", "TANGUT COMPONENT-058", "TANGUT COMPONENT-059", "TANGUT COMPONENT-060", "TANGUT COMPONENT-061", "TANGUT COMPONENT-062", "TANGUT COMPONENT-063", "TANGUT COMPONENT-064", "TANGUT COMPONENT-065", "TANGUT COMPONENT-066", "TANGUT COMPONENT-067", "TANGUT COMPONENT-068", "TANGUT COMPONENT-069", "TANGUT COMPONENT-070", "TANGUT COMPONENT-071", "TANGUT COMPONENT-072", "TANGUT COMPONENT-073", "TANGUT COMPONENT-074", "TANGUT COMPONENT-075", "TANGUT COMPONENT-076", "TANGUT COMPONENT-077", "TANGUT COMPONENT-078", "TANGUT COMPONENT-079", "TANGUT COMPONENT-080", "TANGUT COMPONENT-081", "TANGUT COMPONENT-082", "TANGUT COMPONENT-083", "TANGUT COMPONENT-084", "TANGUT COMPONENT-085", "TANGUT COMPONENT-086", "TANGUT COMPONENT-087", "TANGUT COMPONENT-088", "TANGUT COMPONENT-089", "TANGUT COMPONENT-090", "TANGUT COMPONENT-091", "TANGUT COMPONENT-092", "TANGUT COMPONENT-093", "TANGUT COMPONENT-094", "TANGUT COMPONENT-095", "TANGUT COMPONENT-096", "TANGUT COMPONENT-097", "TANGUT COMPONENT-098", "TANGUT COMPONENT-099", "TANGUT COMPONENT-100", "TANGUT COMPONENT-101", "TANGUT COMPONENT-102", "TANGUT COMPONENT-103", "TANGUT COMPONENT-104", "TANGUT COMPONENT-105", "TANGUT COMPONENT-106", "TANGUT COMPONENT-107", "TANGUT COMPONENT-108", "TANGUT COMPONENT-109", "TANGUT COMPONENT-110", "TANGUT COMPONENT-111", "TANGUT COMPONENT-112", "TANGUT COMPONENT-113", "TANGUT COMPONENT-114", "TANGUT COMPONENT-115", "TANGUT COMPONENT-116", "TANGUT COMPONENT-117", "TANGUT COMPONENT-118", "TANGUT COMPONENT-119", "TANGUT COMPONENT-120", "TANGUT COMPONENT-121", "TANGUT COMPONENT-122", "TANGUT COMPONENT-123", "TANGUT COMPONENT-124", "TANGUT COMPONENT-125", "TANGUT COMPONENT-126", "TANGUT COMPONENT-127", "TANGUT COMPONENT-128", "TANGUT COMPONENT-129", "TANGUT COMPONENT-130", "TANGUT COMPONENT-131", "TANGUT COMPONENT-132", "TANGUT COMPONENT-133", "TANGUT COMPONENT-134", "TANGUT COMPONENT-135", "TANGUT COMPONENT-136", "TANGUT COMPONENT-137", "TANGUT COMPONENT-138", "TANGUT COMPONENT-139", "TANGUT COMPONENT-140", "TANGUT COMPONENT-141", "TANGUT COMPONENT-142", "TANGUT COMPONENT-143", "TANGUT COMPONENT-144", "TANGUT COMPONENT-145", "TANGUT COMPONENT-146", "TANGUT COMPONENT-147", "TANGUT COMPONENT-148", "TANGUT COMPONENT-149", "TANGUT COMPONENT-150", "TANGUT COMPONENT-151", "TANGUT COMPONENT-152", "TANGUT COMPONENT-153", "TANGUT COMPONENT-154", "TANGUT COMPONENT-155", "TANGUT COMPONENT-156", "TANGUT COMPONENT-157", "TANGUT COMPONENT-158", "TANGUT COMPONENT-159", "TANGUT COMPONENT-160", "TANGUT COMPONENT-161", "TANGUT COMPONENT-162", "TANGUT COMPONENT-163", "TANGUT COMPONENT-164", "TANGUT COMPONENT-165", "TANGUT COMPONENT-166", "TANGUT COMPONENT-167", "TANGUT COMPONENT-168", "TANGUT COMPONENT-169", "TANGUT COMPONENT-170", "TANGUT COMPONENT-171", "TANGUT COMPONENT-172", "TANGUT COMPONENT-173", "TANGUT COMPONENT-174", "TANGUT COMPONENT-175", "TANGUT COMPONENT-176", "TANGUT COMPONENT-177", "TANGUT COMPONENT-178", "TANGUT COMPONENT-179", "TANGUT COMPONENT-180", "TANGUT COMPONENT-181", "TANGUT COMPONENT-182", "TANGUT COMPONENT-183", "TANGUT COMPONENT-184", "TANGUT COMPONENT-185", "TANGUT COMPONENT-186", "TANGUT COMPONENT-187", "TANGUT COMPONENT-188", "TANGUT COMPONENT-189", "TANGUT COMPONENT-190", "TANGUT COMPONENT-191", "TANGUT COMPONENT-192", "TANGUT COMPONENT-193", "TANGUT COMPONENT-194", "TANGUT COMPONENT-195", "TANGUT COMPONENT-196", "TANGUT COMPONENT-197", "TANGUT COMPONENT-198", "TANGUT COMPONENT-199", "TANGUT COMPONENT-200", "TANGUT COMPONENT-201", "TANGUT COMPONENT-202", "TANGUT COMPONENT-203", "TANGUT COMPONENT-204", "TANGUT COMPONENT-205", "TANGUT COMPONENT-206", "TANGUT COMPONENT-207", "TANGUT COMPONENT-208", "TANGUT COMPONENT-209", "TANGUT COMPONENT-210", "TANGUT COMPONENT-211", "TANGUT COMPONENT-212", "TANGUT COMPONENT-213", "TANGUT COMPONENT-214", "TANGUT COMPONENT-215", "TANGUT COMPONENT-216", "TANGUT COMPONENT-217", "TANGUT COMPONENT-218", "TANGUT COMPONENT-219", "TANGUT COMPONENT-220", "TANGUT COMPONENT-221", "TANGUT COMPONENT-222", "TANGUT COMPONENT-223", "TANGUT COMPONENT-224", "TANGUT COMPONENT-225", "TANGUT COMPONENT-226", "TANGUT COMPONENT-227", "TANGUT COMPONENT-228", "TANGUT COMPONENT-229", "TANGUT COMPONENT-230", "TANGUT COMPONENT-231", "TANGUT COMPONENT-232", "TANGUT COMPONENT-233", "TANGUT COMPONENT-234", "TANGUT COMPONENT-235", "TANGUT COMPONENT-236", "TANGUT COMPONENT-237", "TANGUT COMPONENT-238", "TANGUT COMPONENT-239", "TANGUT COMPONENT-240", "TANGUT COMPONENT-241", "TANGUT COMPONENT-242", "TANGUT COMPONENT-243", "TANGUT COMPONENT-244", "TANGUT COMPONENT-245", "TANGUT COMPONENT-246", "TANGUT COMPONENT-247", "TANGUT COMPONENT-248", "TANGUT COMPONENT-249", "TANGUT COMPONENT-250", "TANGUT COMPONENT-251", "TANGUT COMPONENT-252", "TANGUT COMPONENT-253", "TANGUT COMPONENT-254", "TANGUT COMPONENT-255", "TANGUT COMPONENT-256", "TANGUT COMPONENT-257", "TANGUT COMPONENT-258", "TANGUT COMPONENT-259", "TANGUT COMPONENT-260", "TANGUT COMPONENT-261", "TANGUT COMPONENT-262", "TANGUT COMPONENT-263", "TANGUT COMPONENT-264", "TANGUT COMPONENT-265", "TANGUT COMPONENT-266", "TANGUT COMPONENT-267", "TANGUT COMPONENT-268", "TANGUT COMPONENT-269", "TANGUT COMPONENT-270", "TANGUT COMPONENT-271", "TANGUT COMPONENT-272", "TANGUT COMPONENT-273", "TANGUT COMPONENT-274", "TANGUT COMPONENT-275", "TANGUT COMPONENT-276", "TANGUT COMPONENT-277", "TANGUT COMPONENT-278", "TANGUT COMPONENT-279", "TANGUT COMPONENT-280", "TANGUT COMPONENT-281", "TANGUT COMPONENT-282", "TANGUT COMPONENT-283", "TANGUT COMPONENT-284", "TANGUT COMPONENT-285", "TANGUT COMPONENT-286", "TANGUT COMPONENT-287", "TANGUT COMPONENT-288", "TANGUT COMPONENT-289", "TANGUT COMPONENT-290", "TANGUT COMPONENT-291", "TANGUT COMPONENT-292", "TANGUT COMPONENT-293", "TANGUT COMPONENT-294", "TANGUT COMPONENT-295", "TANGUT COMPONENT-296", "TANGUT COMPONENT-297", "TANGUT COMPONENT-298", "TANGUT COMPONENT-299", "TANGUT COMPONENT-300", "TANGUT COMPONENT-301", "TANGUT COMPONENT-302", "TANGUT COMPONENT-303", "TANGUT COMPONENT-304", "TANGUT COMPONENT-305", "TANGUT COMPONENT-306", "TANGUT COMPONENT-307", "TANGUT COMPONENT-308", "TANGUT COMPONENT-309", "TANGUT COMPONENT-310", "TANGUT COMPONENT-311", "TANGUT COMPONENT-312", "TANGUT COMPONENT-313", "TANGUT COMPONENT-314", "TANGUT COMPONENT-315", "TANGUT COMPONENT-316", "TANGUT COMPONENT-317", "TANGUT COMPONENT-318", "TANGUT COMPONENT-319", "TANGUT COMPONENT-320", "TANGUT COMPONENT-321", "TANGUT COMPONENT-322", "TANGUT COMPONENT-323", "TANGUT COMPONENT-324", "TANGUT COMPONENT-325", "TANGUT COMPONENT-326", "TANGUT COMPONENT-327", "TANGUT COMPONENT-328", "TANGUT COMPONENT-329", "TANGUT COMPONENT-330", "TANGUT COMPONENT-331", "TANGUT COMPONENT-332", "TANGUT COMPONENT-333", "TANGUT COMPONENT-334", "TANGUT COMPONENT-335", "TANGUT COMPONENT-336", "TANGUT COMPONENT-337", "TANGUT COMPONENT-338", "TANGUT COMPONENT-339", "TANGUT COMPONENT-340", "TANGUT COMPONENT-341", "TANGUT COMPONENT-342", "TANGUT COMPONENT-343", "TANGUT COMPONENT-344", "TANGUT COMPONENT-345", "TANGUT COMPONENT-346", "TANGUT COMPONENT-347", "TANGUT COMPONENT-348", "TANGUT COMPONENT-349", "TANGUT COMPONENT-350", "TANGUT COMPONENT-351", "TANGUT COMPONENT-352", "TANGUT COMPONENT-353", "TANGUT COMPONENT-354", "TANGUT COMPONENT-355", "TANGUT COMPONENT-356", "TANGUT COMPONENT-357", "TANGUT COMPONENT-358", "TANGUT COMPONENT-359", "TANGUT COMPONENT-360", "TANGUT COMPONENT-361", "TANGUT COMPONENT-362", "TANGUT COMPONENT-363", "TANGUT COMPONENT-364", "TANGUT COMPONENT-365", "TANGUT COMPONENT-366", "TANGUT COMPONENT-367", "TANGUT COMPONENT-368", "TANGUT COMPONENT-369", "TANGUT COMPONENT-370", "TANGUT COMPONENT-371", "TANGUT COMPONENT-372", "TANGUT COMPONENT-373", "TANGUT COMPONENT-374", "TANGUT COMPONENT-375", "TANGUT COMPONENT-376", "TANGUT COMPONENT-377", "TANGUT COMPONENT-378", "TANGUT COMPONENT-379", "TANGUT COMPONENT-380", "TANGUT COMPONENT-381", "TANGUT COMPONENT-382", "TANGUT COMPONENT-383", "TANGUT COMPONENT-384", "TANGUT COMPONENT-385", "TANGUT COMPONENT-386", "TANGUT COMPONENT-387", "TANGUT COMPONENT-388", "TANGUT COMPONENT-389", "TANGUT COMPONENT-390", "TANGUT COMPONENT-391", "TANGUT COMPONENT-392", "TANGUT COMPONENT-393", "TANGUT COMPONENT-394", "TANGUT COMPONENT-395", "TANGUT COMPONENT-396", "TANGUT COMPONENT-397", "TANGUT COMPONENT-398", "TANGUT COMPONENT-399", "TANGUT COMPONENT-400", "TANGUT COMPONENT-401", "TANGUT COMPONENT-402", "TANGUT COMPONENT-403", "TANGUT COMPONENT-404", "TANGUT COMPONENT-405", "TANGUT COMPONENT-406", "TANGUT COMPONENT-407", "TANGUT COMPONENT-408", "TANGUT COMPONENT-409", "TANGUT COMPONENT-410", "TANGUT COMPONENT-411", "TANGUT COMPONENT-412", "TANGUT COMPONENT-413", "TANGUT COMPONENT-414", "TANGUT COMPONENT-415", "TANGUT COMPONENT-416", "TANGUT COMPONENT-417", "TANGUT COMPONENT-418", "TANGUT COMPONENT-419", "TANGUT COMPONENT-420", "TANGUT COMPONENT-421", "TANGUT COMPONENT-422", "TANGUT COMPONENT-423", "TANGUT COMPONENT-424", "TANGUT COMPONENT-425", "TANGUT COMPONENT-426", "TANGUT COMPONENT-427", "TANGUT COMPONENT-428", "TANGUT COMPONENT-429", "TANGUT COMPONENT-430", "TANGUT COMPONENT-431", "TANGUT COMPONENT-432", "TANGUT COMPONENT-433", "TANGUT COMPONENT-434", "TANGUT COMPONENT-435", "TANGUT COMPONENT-436", "TANGUT COMPONENT-437", "TANGUT COMPONENT-438", "TANGUT COMPONENT-439", "TANGUT COMPONENT-440", "TANGUT COMPONENT-441", "TANGUT COMPONENT-442", "TANGUT COMPONENT-443", "TANGUT COMPONENT-444", "TANGUT COMPONENT-445", "TANGUT COMPONENT-446", "TANGUT COMPONENT-447", "TANGUT COMPONENT-448", "TANGUT COMPONENT-449", "TANGUT COMPONENT-450", "TANGUT COMPONENT-451", "TANGUT COMPONENT-452", "TANGUT COMPONENT-453", "TANGUT COMPONENT-454", "TANGUT COMPONENT-455", "TANGUT COMPONENT-456", "TANGUT COMPONENT-457", "TANGUT COMPONENT-458", "TANGUT COMPONENT-459", "TANGUT COMPONENT-460", "TANGUT COMPONENT-461", "TANGUT COMPONENT-462", "TANGUT COMPONENT-463", "TANGUT COMPONENT-464", "TANGUT COMPONENT-465", "TANGUT COMPONENT-466", "TANGUT COMPONENT-467", "TANGUT COMPONENT-468", "TANGUT COMPONENT-469", "TANGUT COMPONENT-470", "TANGUT COMPONENT-471", "TANGUT COMPONENT-472", "TANGUT COMPONENT-473", "TANGUT COMPONENT-474", "TANGUT COMPONENT-475", "TANGUT COMPONENT-476", "TANGUT COMPONENT-477", "TANGUT COMPONENT-478", "TANGUT COMPONENT-479", "TANGUT COMPONENT-480", "TANGUT COMPONENT-481", "TANGUT COMPONENT-482", "TANGUT COMPONENT-483", "TANGUT COMPONENT-484", "TANGUT COMPONENT-485", "TANGUT COMPONENT-486", "TANGUT COMPONENT-487", "TANGUT COMPONENT-488", "TANGUT COMPONENT-489", "TANGUT COMPONENT-490", "TANGUT COMPONENT-491", "TANGUT COMPONENT-492", "TANGUT COMPONENT-493", "TANGUT COMPONENT-494", "TANGUT COMPONENT-495", "TANGUT COMPONENT-496", "TANGUT COMPONENT-497", "TANGUT COMPONENT-498", "TANGUT COMPONENT-499", "TANGUT COMPONENT-500", "TANGUT COMPONENT-501", "TANGUT COMPONENT-502", "TANGUT COMPONENT-503", "TANGUT COMPONENT-504", "TANGUT COMPONENT-505", "TANGUT COMPONENT-506", "TANGUT COMPONENT-507", "TANGUT COMPONENT-508", "TANGUT COMPONENT-509", "TANGUT COMPONENT-510", "TANGUT COMPONENT-511", "TANGUT COMPONENT-512", "TANGUT COMPONENT-513", "TANGUT COMPONENT-514", "TANGUT COMPONENT-515", "TANGUT COMPONENT-516", "TANGUT COMPONENT-517", "TANGUT COMPONENT-518", "TANGUT COMPONENT-519", "TANGUT COMPONENT-520", "TANGUT COMPONENT-521", "TANGUT COMPONENT-522", "TANGUT COMPONENT-523", "TANGUT COMPONENT-524", "TANGUT COMPONENT-525", "TANGUT COMPONENT-526", "TANGUT COMPONENT-527", "TANGUT COMPONENT-528", "TANGUT COMPONENT-529", "TANGUT COMPONENT-530", "TANGUT COMPONENT-531", "TANGUT COMPONENT-532", "TANGUT COMPONENT-533", "TANGUT COMPONENT-534", "TANGUT COMPONENT-535", "TANGUT COMPONENT-536", "TANGUT COMPONENT-537", "TANGUT COMPONENT-538", "TANGUT COMPONENT-539", "TANGUT COMPONENT-540", "TANGUT COMPONENT-541", "TANGUT COMPONENT-542", "TANGUT COMPONENT-543", "TANGUT COMPONENT-544", "TANGUT COMPONENT-545", "TANGUT COMPONENT-546", "TANGUT COMPONENT-547", "TANGUT COMPONENT-548", "TANGUT COMPONENT-549", "TANGUT COMPONENT-550", "TANGUT COMPONENT-551", "TANGUT COMPONENT-552", "TANGUT COMPONENT-553", "TANGUT COMPONENT-554", "TANGUT COMPONENT-555", "TANGUT COMPONENT-556", "TANGUT COMPONENT-557", "TANGUT COMPONENT-558", "TANGUT COMPONENT-559", "TANGUT COMPONENT-560", "TANGUT COMPONENT-561", "TANGUT COMPONENT-562", "TANGUT COMPONENT-563", "TANGUT COMPONENT-564", "TANGUT COMPONENT-565", "TANGUT COMPONENT-566", "TANGUT COMPONENT-567", "TANGUT COMPONENT-568", "TANGUT COMPONENT-569", "TANGUT COMPONENT-570", "TANGUT COMPONENT-571", "TANGUT COMPONENT-572", "TANGUT COMPONENT-573", "TANGUT COMPONENT-574", "TANGUT COMPONENT-575", "TANGUT COMPONENT-576", "TANGUT COMPONENT-577", "TANGUT COMPONENT-578", "TANGUT COMPONENT-579", "TANGUT COMPONENT-580", "TANGUT COMPONENT-581", "TANGUT COMPONENT-582", "TANGUT COMPONENT-583", "TANGUT COMPONENT-584", "TANGUT COMPONENT-585", "TANGUT COMPONENT-586", "TANGUT COMPONENT-587", "TANGUT COMPONENT-588", "TANGUT COMPONENT-589", "TANGUT COMPONENT-590", "TANGUT COMPONENT-591", "TANGUT COMPONENT-592", "TANGUT COMPONENT-593", "TANGUT COMPONENT-594", "TANGUT COMPONENT-595", "TANGUT COMPONENT-596", "TANGUT COMPONENT-597", "TANGUT COMPONENT-598", "TANGUT COMPONENT-599", "TANGUT COMPONENT-600", "TANGUT COMPONENT-601", "TANGUT COMPONENT-602", "TANGUT COMPONENT-603", "TANGUT COMPONENT-604", "TANGUT COMPONENT-605", "TANGUT COMPONENT-606", "TANGUT COMPONENT-607", "TANGUT COMPONENT-608", "TANGUT COMPONENT-609", "TANGUT COMPONENT-610", "TANGUT COMPONENT-611", "TANGUT COMPONENT-612", "TANGUT COMPONENT-613", "TANGUT COMPONENT-614", "TANGUT COMPONENT-615", "TANGUT COMPONENT-616", "TANGUT COMPONENT-617", "TANGUT COMPONENT-618", "TANGUT COMPONENT-619", "TANGUT COMPONENT-620", "TANGUT COMPONENT-621", "TANGUT COMPONENT-622", "TANGUT COMPONENT-623", "TANGUT COMPONENT-624", "TANGUT COMPONENT-625", "TANGUT COMPONENT-626", "TANGUT COMPONENT-627", "TANGUT COMPONENT-628", "TANGUT COMPONENT-629", "TANGUT COMPONENT-630", "TANGUT COMPONENT-631", "TANGUT COMPONENT-632", "TANGUT COMPONENT-633", "TANGUT COMPONENT-634", "TANGUT COMPONENT-635", "TANGUT COMPONENT-636", "TANGUT COMPONENT-637", "TANGUT COMPONENT-638", "TANGUT COMPONENT-639", "TANGUT COMPONENT-640", "TANGUT COMPONENT-641", "TANGUT COMPONENT-642", "TANGUT COMPONENT-643", "TANGUT COMPONENT-644", "TANGUT COMPONENT-645", "TANGUT COMPONENT-646", "TANGUT COMPONENT-647", "TANGUT COMPONENT-648", "TANGUT COMPONENT-649", "TANGUT COMPONENT-650", "TANGUT COMPONENT-651", "TANGUT COMPONENT-652", "TANGUT COMPONENT-653", "TANGUT COMPONENT-654", "TANGUT COMPONENT-655", "TANGUT COMPONENT-656", "TANGUT COMPONENT-657", "TANGUT COMPONENT-658", "TANGUT COMPONENT-659", "TANGUT COMPONENT-660", "TANGUT COMPONENT-661", "TANGUT COMPONENT-662", "TANGUT COMPONENT-663", "TANGUT COMPONENT-664", "TANGUT COMPONENT-665", "TANGUT COMPONENT-666", "TANGUT COMPONENT-667", "TANGUT COMPONENT-668", "TANGUT COMPONENT-669", "TANGUT COMPONENT-670", "TANGUT COMPONENT-671", "TANGUT COMPONENT-672", "TANGUT COMPONENT-673", "TANGUT COMPONENT-674", "TANGUT COMPONENT-675", "TANGUT COMPONENT-676", "TANGUT COMPONENT-677", "TANGUT COMPONENT-678", "TANGUT COMPONENT-679", "TANGUT COMPONENT-680", "TANGUT COMPONENT-681", "TANGUT COMPONENT-682", "TANGUT COMPONENT-683", "TANGUT COMPONENT-684", "TANGUT COMPONENT-685", "TANGUT COMPONENT-686", "TANGUT COMPONENT-687", "TANGUT COMPONENT-688", "TANGUT COMPONENT-689", "TANGUT COMPONENT-690", "TANGUT COMPONENT-691", "TANGUT COMPONENT-692", "TANGUT COMPONENT-693", "TANGUT COMPONENT-694", "TANGUT COMPONENT-695", "TANGUT COMPONENT-696", "TANGUT COMPONENT-697", "TANGUT COMPONENT-698", "TANGUT COMPONENT-699", "TANGUT COMPONENT-700", "TANGUT COMPONENT-701", "TANGUT COMPONENT-702", "TANGUT COMPONENT-703", "TANGUT COMPONENT-704", "TANGUT COMPONENT-705", "TANGUT COMPONENT-706", "TANGUT COMPONENT-707", "TANGUT COMPONENT-708", "TANGUT COMPONENT-709", "TANGUT COMPONENT-710", "TANGUT COMPONENT-711", "TANGUT COMPONENT-712", "TANGUT COMPONENT-713", "TANGUT COMPONENT-714", "TANGUT COMPONENT-715", "TANGUT COMPONENT-716", "TANGUT COMPONENT-717", "TANGUT COMPONENT-718", "TANGUT COMPONENT-719", "TANGUT COMPONENT-720", "TANGUT COMPONENT-721", "TANGUT COMPONENT-722", "TANGUT COMPONENT-723", "TANGUT COMPONENT-724", "TANGUT COMPONENT-725", "TANGUT COMPONENT-726", "TANGUT COMPONENT-727", "TANGUT COMPONENT-728", "TANGUT COMPONENT-729", "TANGUT COMPONENT-730", "TANGUT COMPONENT-731", "TANGUT COMPONENT-732", "TANGUT COMPONENT-733", "TANGUT COMPONENT-734", "TANGUT COMPONENT-735", "TANGUT COMPONENT-736", "TANGUT COMPONENT-737", "TANGUT COMPONENT-738", "TANGUT COMPONENT-739", "TANGUT COMPONENT-740", "TANGUT COMPONENT-741", "TANGUT COMPONENT-742", "TANGUT COMPONENT-743", "TANGUT COMPONENT-744", "TANGUT COMPONENT-745", "TANGUT COMPONENT-746", "TANGUT COMPONENT-747", "TANGUT COMPONENT-748", "TANGUT COMPONENT-749", "TANGUT COMPONENT-750", "TANGUT COMPONENT-751", "TANGUT COMPONENT-752", "TANGUT COMPONENT-753", "TANGUT COMPONENT-754", "TANGUT COMPONENT-755", "KATAKANA LETTER ARCHAIC E", "HIRAGANA LETTER ARCHAIC YE", "HENTAIGANA LETTER A-1", "HENTAIGANA LETTER A-2", "HENTAIGANA LETTER A-3", "HENTAIGANA LETTER A-WO", "HENTAIGANA LETTER I-1", "HENTAIGANA LETTER I-2", "HENTAIGANA LETTER I-3", "HENTAIGANA LETTER I-4", "HENTAIGANA LETTER U-1", "HENTAIGANA LETTER U-2", "HENTAIGANA LETTER U-3", "HENTAIGANA LETTER U-4", "HENTAIGANA LETTER U-5", "HENTAIGANA LETTER E-2", "HENTAIGANA LETTER E-3", "HENTAIGANA LETTER E-4", "HENTAIGANA LETTER E-5", "HENTAIGANA LETTER E-6", "HENTAIGANA LETTER O-1", "HENTAIGANA LETTER O-2", "HENTAIGANA LETTER O-3", "HENTAIGANA LETTER KA-1", "HENTAIGANA LETTER KA-2", "HENTAIGANA LETTER KA-3", "HENTAIGANA LETTER KA-4", "HENTAIGANA LETTER KA-5", "HENTAIGANA LETTER KA-6", "HENTAIGANA LETTER KA-7", "HENTAIGANA LETTER KA-8", "HENTAIGANA LETTER KA-9", "HENTAIGANA LETTER KA-10", "HENTAIGANA LETTER KA-11", "HENTAIGANA LETTER KA-KE", "HENTAIGANA LETTER KI-1", "HENTAIGANA LETTER KI-2", "HENTAIGANA LETTER KI-3", "HENTAIGANA LETTER KI-4", "HENTAIGANA LETTER KI-5", "HENTAIGANA LETTER KI-6", "HENTAIGANA LETTER KI-7", "HENTAIGANA LETTER KI-8", "HENTAIGANA LETTER KU-1", "HENTAIGANA LETTER KU-2", "HENTAIGANA LETTER KU-3", "HENTAIGANA LETTER KU-4", "HENTAIGANA LETTER KU-5", "HENTAIGANA LETTER KU-6", "HENTAIGANA LETTER KU-7", "HENTAIGANA LETTER KE-1", "HENTAIGANA LETTER KE-2", "HENTAIGANA LETTER KE-3", "HENTAIGANA LETTER KE-4", "HENTAIGANA LETTER KE-5", "HENTAIGANA LETTER KE-6", "HENTAIGANA LETTER KO-1", "HENTAIGANA LETTER KO-2", "HENTAIGANA LETTER KO-3", "HENTAIGANA LETTER KO-KI", "HENTAIGANA LETTER SA-1", "HENTAIGANA LETTER SA-2", "HENTAIGANA LETTER SA-3", "HENTAIGANA LETTER SA-4", "HENTAIGANA LETTER SA-5", "HENTAIGANA LETTER SA-6", "HENTAIGANA LETTER SA-7", "HENTAIGANA LETTER SA-8", "HENTAIGANA LETTER SI-1", "HENTAIGANA LETTER SI-2", "HENTAIGANA LETTER SI-3", "HENTAIGANA LETTER SI-4", "HENTAIGANA LETTER SI-5", "HENTAIGANA LETTER SI-6", "HENTAIGANA LETTER SU-1", "HENTAIGANA LETTER SU-2", "HENTAIGANA LETTER SU-3", "HENTAIGANA LETTER SU-4", "HENTAIGANA LETTER SU-5", "HENTAIGANA LETTER SU-6", "HENTAIGANA LETTER SU-7", "HENTAIGANA LETTER SU-8", "HENTAIGANA LETTER SE-1", "HENTAIGANA LETTER SE-2", "HENTAIGANA LETTER SE-3", "HENTAIGANA LETTER SE-4", "HENTAIGANA LETTER SE-5", "HENTAIGANA LETTER SO-1", "HENTAIGANA LETTER SO-2", "HENTAIGANA LETTER SO-3", "HENTAIGANA LETTER SO-4", "HENTAIGANA LETTER SO-5", "HENTAIGANA LETTER SO-6", "HENTAIGANA LETTER SO-7", "HENTAIGANA LETTER TA-1", "HENTAIGANA LETTER TA-2", "HENTAIGANA LETTER TA-3", "HENTAIGANA LETTER TA-4", "HENTAIGANA LETTER TI-1", "HENTAIGANA LETTER TI-2", "HENTAIGANA LETTER TI-3", "HENTAIGANA LETTER TI-4", "HENTAIGANA LETTER TI-5", "HENTAIGANA LETTER TI-6", "HENTAIGANA LETTER TI-7", "HENTAIGANA LETTER TU-1", "HENTAIGANA LETTER TU-2", "HENTAIGANA LETTER TU-3", "HENTAIGANA LETTER TU-4", "HENTAIGANA LETTER TU-TO", "HENTAIGANA LETTER TE-1", "HENTAIGANA LETTER TE-2", "HENTAIGANA LETTER TE-3", "HENTAIGANA LETTER TE-4", "HENTAIGANA LETTER TE-5", "HENTAIGANA LETTER TE-6", "HENTAIGANA LETTER TE-7", "HENTAIGANA LETTER TE-8", "HENTAIGANA LETTER TE-9", "HENTAIGANA LETTER TO-1", "HENTAIGANA LETTER TO-2", "HENTAIGANA LETTER TO-3", "HENTAIGANA LETTER TO-4", "HENTAIGANA LETTER TO-5", "HENTAIGANA LETTER TO-6", "HENTAIGANA LETTER TO-RA", "HENTAIGANA LETTER NA-1", "HENTAIGANA LETTER NA-2", "HENTAIGANA LETTER NA-3", "HENTAIGANA LETTER NA-4", "HENTAIGANA LETTER NA-5", "HENTAIGANA LETTER NA-6", "HENTAIGANA LETTER NA-7", "HENTAIGANA LETTER NA-8", "HENTAIGANA LETTER NA-9", "HENTAIGANA LETTER NI-1", "HENTAIGANA LETTER NI-2", "HENTAIGANA LETTER NI-3", "HENTAIGANA LETTER NI-4", "HENTAIGANA LETTER NI-5", "HENTAIGANA LETTER NI-6", "HENTAIGANA LETTER NI-7", "HENTAIGANA LETTER NI-TE", "HENTAIGANA LETTER NU-1", "HENTAIGANA LETTER NU-2", "HENTAIGANA LETTER NU-3", "HENTAIGANA LETTER NE-1", "HENTAIGANA LETTER NE-2", "HENTAIGANA LETTER NE-3", "HENTAIGANA LETTER NE-4", "HENTAIGANA LETTER NE-5", "HENTAIGANA LETTER NE-6", "HENTAIGANA LETTER NE-KO", "HENTAIGANA LETTER NO-1", "HENTAIGANA LETTER NO-2", "HENTAIGANA LETTER NO-3", "HENTAIGANA LETTER NO-4", "HENTAIGANA LETTER NO-5", "HENTAIGANA LETTER HA-1", "HENTAIGANA LETTER HA-2", "HENTAIGANA LETTER HA-3", "HENTAIGANA LETTER HA-4", "HENTAIGANA LETTER HA-5", "HENTAIGANA LETTER HA-6", "HENTAIGANA LETTER HA-7", "HENTAIGANA LETTER HA-8", "HENTAIGANA LETTER HA-9", "HENTAIGANA LETTER HA-10", "HENTAIGANA LETTER HA-11", "HENTAIGANA LETTER HI-1", "HENTAIGANA LETTER HI-2", "HENTAIGANA LETTER HI-3", "HENTAIGANA LETTER HI-4", "HENTAIGANA LETTER HI-5", "HENTAIGANA LETTER HI-6", "HENTAIGANA LETTER HI-7", "HENTAIGANA LETTER HU-1", "HENTAIGANA LETTER HU-2", "HENTAIGANA LETTER HU-3", "HENTAIGANA LETTER HE-1", "HENTAIGANA LETTER HE-2", "HENTAIGANA LETTER HE-3", "HENTAIGANA LETTER HE-4", "HENTAIGANA LETTER HE-5", "HENTAIGANA LETTER HE-6", "HENTAIGANA LETTER HE-7", "HENTAIGANA LETTER HO-1", "HENTAIGANA LETTER HO-2", "HENTAIGANA LETTER HO-3", "HENTAIGANA LETTER HO-4", "HENTAIGANA LETTER HO-5", "HENTAIGANA LETTER HO-6", "HENTAIGANA LETTER HO-7", "HENTAIGANA LETTER HO-8", "HENTAIGANA LETTER MA-1", "HENTAIGANA LETTER MA-2", "HENTAIGANA LETTER MA-3", "HENTAIGANA LETTER MA-4", "HENTAIGANA LETTER MA-5", "HENTAIGANA LETTER MA-6", "HENTAIGANA LETTER MA-7", "HENTAIGANA LETTER MI-1", "HENTAIGANA LETTER MI-2", "HENTAIGANA LETTER MI-3", "HENTAIGANA LETTER MI-4", "HENTAIGANA LETTER MI-5", "HENTAIGANA LETTER MI-6", "HENTAIGANA LETTER MI-7", "HENTAIGANA LETTER MU-1", "HENTAIGANA LETTER MU-2", "HENTAIGANA LETTER MU-3", "HENTAIGANA LETTER MU-4", "HENTAIGANA LETTER ME-1", "HENTAIGANA LETTER ME-2", "HENTAIGANA LETTER ME-MA", "HENTAIGANA LETTER MO-1", "HENTAIGANA LETTER MO-2", "HENTAIGANA LETTER MO-3", "HENTAIGANA LETTER MO-4", "HENTAIGANA LETTER MO-5", "HENTAIGANA LETTER MO-6", "HENTAIGANA LETTER YA-1", "HENTAIGANA LETTER YA-2", "HENTAIGANA LETTER YA-3", "HENTAIGANA LETTER YA-4", "HENTAIGANA LETTER YA-5", "HENTAIGANA LETTER YA-YO", "HENTAIGANA LETTER YU-1", "HENTAIGANA LETTER YU-2", "HENTAIGANA LETTER YU-3", "HENTAIGANA LETTER YU-4", "HENTAIGANA LETTER YO-1", "HENTAIGANA LETTER YO-2", "HENTAIGANA LETTER YO-3", "HENTAIGANA LETTER YO-4", "HENTAIGANA LETTER YO-5", "HENTAIGANA LETTER YO-6", "HENTAIGANA LETTER RA-1", "HENTAIGANA LETTER RA-2", "HENTAIGANA LETTER RA-3", "HENTAIGANA LETTER RA-4", "HENTAIGANA LETTER RI-1", "HENTAIGANA LETTER RI-2", "HENTAIGANA LETTER RI-3", "HENTAIGANA LETTER RI-4", "HENTAIGANA LETTER RI-5", "HENTAIGANA LETTER RI-6", "HENTAIGANA LETTER RI-7", "HENTAIGANA LETTER RU-1", "HENTAIGANA LETTER RU-2", "HENTAIGANA LETTER RU-3", "HENTAIGANA LETTER RU-4", "HENTAIGANA LETTER RU-5", "HENTAIGANA LETTER RU-6", "HENTAIGANA LETTER RE-1", "HENTAIGANA LETTER RE-2", "HENTAIGANA LETTER RE-3", "HENTAIGANA LETTER RE-4", "HENTAIGANA LETTER RO-1", "HENTAIGANA LETTER RO-2", "HENTAIGANA LETTER RO-3", "HENTAIGANA LETTER RO-4", "HENTAIGANA LETTER RO-5", "HENTAIGANA LETTER RO-6", "HENTAIGANA LETTER WA-1", "HENTAIGANA LETTER WA-2", "HENTAIGANA LETTER WA-3", "HENTAIGANA LETTER WA-4", "HENTAIGANA LETTER WA-5", "HENTAIGANA LETTER WI-1", "HENTAIGANA LETTER WI-2", "HENTAIGANA LETTER WI-3", "HENTAIGANA LETTER WI-4", "HENTAIGANA LETTER WI-5", "HENTAIGANA LETTER WE-1", "HENTAIGANA LETTER WE-2", "HENTAIGANA LETTER WE-3", "HENTAIGANA LETTER WE-4", "HENTAIGANA LETTER WO-1", "HENTAIGANA LETTER WO-2", "HENTAIGANA LETTER WO-3", "HENTAIGANA LETTER WO-4", "HENTAIGANA LETTER WO-5", "HENTAIGANA LETTER WO-6", "HENTAIGANA LETTER WO-7", "HENTAIGANA LETTER N-MU-MO-1", "HENTAIGANA LETTER N-MU-MO-2", "HIRAGANA LETTER SMALL WI", "HIRAGANA LETTER SMALL WE", "HIRAGANA LETTER SMALL WO", "KATAKANA LETTER SMALL WI", "KATAKANA LETTER SMALL WE", "KATAKANA LETTER SMALL WO", "KATAKANA LETTER SMALL N", "NUSHU CHARACTER-1B170", "NUSHU CHARACTER-1B171", "NUSHU CHARACTER-1B172", "NUSHU CHARACTER-1B173", "NUSHU CHARACTER-1B174", "NUSHU CHARACTER-1B175", "NUSHU CHARACTER-1B176", "NUSHU CHARACTER-1B177", "NUSHU CHARACTER-1B178", "NUSHU CHARACTER-1B179", "NUSHU CHARACTER-1B17A", "NUSHU CHARACTER-1B17B", "NUSHU CHARACTER-1B17C", "NUSHU CHARACTER-1B17D", "NUSHU CHARACTER-1B17E", "NUSHU CHARACTER-1B17F", "NUSHU CHARACTER-1B180", "NUSHU CHARACTER-1B181", "NUSHU CHARACTER-1B182", "NUSHU CHARACTER-1B183", "NUSHU CHARACTER-1B184", "NUSHU CHARACTER-1B185", "NUSHU CHARACTER-1B186", "NUSHU CHARACTER-1B187", "NUSHU CHARACTER-1B188", "NUSHU CHARACTER-1B189", "NUSHU CHARACTER-1B18A", "NUSHU CHARACTER-1B18B", "NUSHU CHARACTER-1B18C", "NUSHU CHARACTER-1B18D", "NUSHU CHARACTER-1B18E", "NUSHU CHARACTER-1B18F", "NUSHU CHARACTER-1B190", "NUSHU CHARACTER-1B191", "NUSHU CHARACTER-1B192", "NUSHU CHARACTER-1B193", "NUSHU CHARACTER-1B194", "NUSHU CHARACTER-1B195", "NUSHU CHARACTER-1B196", "NUSHU CHARACTER-1B197", "NUSHU CHARACTER-1B198", "NUSHU CHARACTER-1B199", "NUSHU CHARACTER-1B19A", "NUSHU CHARACTER-1B19B", "NUSHU CHARACTER-1B19C", "NUSHU CHARACTER-1B19D", "NUSHU CHARACTER-1B19E", "NUSHU CHARACTER-1B19F", "NUSHU CHARACTER-1B1A0", "NUSHU CHARACTER-1B1A1", "NUSHU CHARACTER-1B1A2", "NUSHU CHARACTER-1B1A3", "NUSHU CHARACTER-1B1A4", "NUSHU CHARACTER-1B1A5", "NUSHU CHARACTER-1B1A6", "NUSHU CHARACTER-1B1A7", "NUSHU CHARACTER-1B1A8", "NUSHU CHARACTER-1B1A9", "NUSHU CHARACTER-1B1AA", "NUSHU CHARACTER-1B1AB", "NUSHU CHARACTER-1B1AC", "NUSHU CHARACTER-1B1AD", "NUSHU CHARACTER-1B1AE", "NUSHU CHARACTER-1B1AF", "NUSHU CHARACTER-1B1B0", "NUSHU CHARACTER-1B1B1", "NUSHU CHARACTER-1B1B2", "NUSHU CHARACTER-1B1B3", "NUSHU CHARACTER-1B1B4", "NUSHU CHARACTER-1B1B5", "NUSHU CHARACTER-1B1B6", "NUSHU CHARACTER-1B1B7", "NUSHU CHARACTER-1B1B8", "NUSHU CHARACTER-1B1B9", "NUSHU CHARACTER-1B1BA", "NUSHU CHARACTER-1B1BB", "NUSHU CHARACTER-1B1BC", "NUSHU CHARACTER-1B1BD", "NUSHU CHARACTER-1B1BE", "NUSHU CHARACTER-1B1BF", "NUSHU CHARACTER-1B1C0", "NUSHU CHARACTER-1B1C1", "NUSHU CHARACTER-1B1C2", "NUSHU CHARACTER-1B1C3", "NUSHU CHARACTER-1B1C4", "NUSHU CHARACTER-1B1C5", "NUSHU CHARACTER-1B1C6", "NUSHU CHARACTER-1B1C7", "NUSHU CHARACTER-1B1C8", "NUSHU CHARACTER-1B1C9", "NUSHU CHARACTER-1B1CA", "NUSHU CHARACTER-1B1CB", "NUSHU CHARACTER-1B1CC", "NUSHU CHARACTER-1B1CD", "NUSHU CHARACTER-1B1CE", "NUSHU CHARACTER-1B1CF", "NUSHU CHARACTER-1B1D0", "NUSHU CHARACTER-1B1D1", "NUSHU CHARACTER-1B1D2", "NUSHU CHARACTER-1B1D3", "NUSHU CHARACTER-1B1D4", "NUSHU CHARACTER-1B1D5", "NUSHU CHARACTER-1B1D6", "NUSHU CHARACTER-1B1D7", "NUSHU CHARACTER-1B1D8", "NUSHU CHARACTER-1B1D9", "NUSHU CHARACTER-1B1DA", "NUSHU CHARACTER-1B1DB", "NUSHU CHARACTER-1B1DC", "NUSHU CHARACTER-1B1DD", "NUSHU CHARACTER-1B1DE", "NUSHU CHARACTER-1B1DF", "NUSHU CHARACTER-1B1E0", "NUSHU CHARACTER-1B1E1", "NUSHU CHARACTER-1B1E2", "NUSHU CHARACTER-1B1E3", "NUSHU CHARACTER-1B1E4", "NUSHU CHARACTER-1B1E5", "NUSHU CHARACTER-1B1E6", "NUSHU CHARACTER-1B1E7", "NUSHU CHARACTER-1B1E8", "NUSHU CHARACTER-1B1E9", "NUSHU CHARACTER-1B1EA", "NUSHU CHARACTER-1B1EB", "NUSHU CHARACTER-1B1EC", "NUSHU CHARACTER-1B1ED", "NUSHU CHARACTER-1B1EE", "NUSHU CHARACTER-1B1EF", "NUSHU CHARACTER-1B1F0", "NUSHU CHARACTER-1B1F1", "NUSHU CHARACTER-1B1F2", "NUSHU CHARACTER-1B1F3", "NUSHU CHARACTER-1B1F4", "NUSHU CHARACTER-1B1F5", "NUSHU CHARACTER-1B1F6", "NUSHU CHARACTER-1B1F7", "NUSHU CHARACTER-1B1F8", "NUSHU CHARACTER-1B1F9", "NUSHU CHARACTER-1B1FA", "NUSHU CHARACTER-1B1FB", "NUSHU CHARACTER-1B1FC", "NUSHU CHARACTER-1B1FD", "NUSHU CHARACTER-1B1FE", "NUSHU CHARACTER-1B1FF", "NUSHU CHARACTER-1B200", "NUSHU CHARACTER-1B201", "NUSHU CHARACTER-1B202", "NUSHU CHARACTER-1B203", "NUSHU CHARACTER-1B204", "NUSHU CHARACTER-1B205", "NUSHU CHARACTER-1B206", "NUSHU CHARACTER-1B207", "NUSHU CHARACTER-1B208", "NUSHU CHARACTER-1B209", "NUSHU CHARACTER-1B20A", "NUSHU CHARACTER-1B20B", "NUSHU CHARACTER-1B20C", "NUSHU CHARACTER-1B20D", "NUSHU CHARACTER-1B20E", "NUSHU CHARACTER-1B20F", "NUSHU CHARACTER-1B210", "NUSHU CHARACTER-1B211", "NUSHU CHARACTER-1B212", "NUSHU CHARACTER-1B213", "NUSHU CHARACTER-1B214", "NUSHU CHARACTER-1B215", "NUSHU CHARACTER-1B216", "NUSHU CHARACTER-1B217", "NUSHU CHARACTER-1B218", "NUSHU CHARACTER-1B219", "NUSHU CHARACTER-1B21A", "NUSHU CHARACTER-1B21B", "NUSHU CHARACTER-1B21C", "NUSHU CHARACTER-1B21D", "NUSHU CHARACTER-1B21E", "NUSHU CHARACTER-1B21F", "NUSHU CHARACTER-1B220", "NUSHU CHARACTER-1B221", "NUSHU CHARACTER-1B222", "NUSHU CHARACTER-1B223", "NUSHU CHARACTER-1B224", "NUSHU CHARACTER-1B225", "NUSHU CHARACTER-1B226", "NUSHU CHARACTER-1B227", "NUSHU CHARACTER-1B228", "NUSHU CHARACTER-1B229", "NUSHU CHARACTER-1B22A", "NUSHU CHARACTER-1B22B", "NUSHU CHARACTER-1B22C", "NUSHU CHARACTER-1B22D", "NUSHU CHARACTER-1B22E", "NUSHU CHARACTER-1B22F", "NUSHU CHARACTER-1B230", "NUSHU CHARACTER-1B231", "NUSHU CHARACTER-1B232", "NUSHU CHARACTER-1B233", "NUSHU CHARACTER-1B234", "NUSHU CHARACTER-1B235", "NUSHU CHARACTER-1B236", "NUSHU CHARACTER-1B237", "NUSHU CHARACTER-1B238", "NUSHU CHARACTER-1B239", "NUSHU CHARACTER-1B23A", "NUSHU CHARACTER-1B23B", "NUSHU CHARACTER-1B23C", "NUSHU CHARACTER-1B23D", "NUSHU CHARACTER-1B23E", "NUSHU CHARACTER-1B23F", "NUSHU CHARACTER-1B240", "NUSHU CHARACTER-1B241", "NUSHU CHARACTER-1B242", "NUSHU CHARACTER-1B243", "NUSHU CHARACTER-1B244", "NUSHU CHARACTER-1B245", "NUSHU CHARACTER-1B246", "NUSHU CHARACTER-1B247", "NUSHU CHARACTER-1B248", "NUSHU CHARACTER-1B249", "NUSHU CHARACTER-1B24A", "NUSHU CHARACTER-1B24B", "NUSHU CHARACTER-1B24C", "NUSHU CHARACTER-1B24D", "NUSHU CHARACTER-1B24E", "NUSHU CHARACTER-1B24F", "NUSHU CHARACTER-1B250", "NUSHU CHARACTER-1B251", "NUSHU CHARACTER-1B252", "NUSHU CHARACTER-1B253", "NUSHU CHARACTER-1B254", "NUSHU CHARACTER-1B255", "NUSHU CHARACTER-1B256", "NUSHU CHARACTER-1B257", "NUSHU CHARACTER-1B258", "NUSHU CHARACTER-1B259", "NUSHU CHARACTER-1B25A", "NUSHU CHARACTER-1B25B", "NUSHU CHARACTER-1B25C", "NUSHU CHARACTER-1B25D", "NUSHU CHARACTER-1B25E", "NUSHU CHARACTER-1B25F", "NUSHU CHARACTER-1B260", "NUSHU CHARACTER-1B261", "NUSHU CHARACTER-1B262", "NUSHU CHARACTER-1B263", "NUSHU CHARACTER-1B264", "NUSHU CHARACTER-1B265", "NUSHU CHARACTER-1B266", "NUSHU CHARACTER-1B267", "NUSHU CHARACTER-1B268", "NUSHU CHARACTER-1B269", "NUSHU CHARACTER-1B26A", "NUSHU CHARACTER-1B26B", "NUSHU CHARACTER-1B26C", "NUSHU CHARACTER-1B26D", "NUSHU CHARACTER-1B26E", "NUSHU CHARACTER-1B26F", "NUSHU CHARACTER-1B270", "NUSHU CHARACTER-1B271", "NUSHU CHARACTER-1B272", "NUSHU CHARACTER-1B273", "NUSHU CHARACTER-1B274", "NUSHU CHARACTER-1B275", "NUSHU CHARACTER-1B276", "NUSHU CHARACTER-1B277", "NUSHU CHARACTER-1B278", "NUSHU CHARACTER-1B279", "NUSHU CHARACTER-1B27A", "NUSHU CHARACTER-1B27B", "NUSHU CHARACTER-1B27C", "NUSHU CHARACTER-1B27D", "NUSHU CHARACTER-1B27E", "NUSHU CHARACTER-1B27F", "NUSHU CHARACTER-1B280", "NUSHU CHARACTER-1B281", "NUSHU CHARACTER-1B282", "NUSHU CHARACTER-1B283", "NUSHU CHARACTER-1B284", "NUSHU CHARACTER-1B285", "NUSHU CHARACTER-1B286", "NUSHU CHARACTER-1B287", "NUSHU CHARACTER-1B288", "NUSHU CHARACTER-1B289", "NUSHU CHARACTER-1B28A", "NUSHU CHARACTER-1B28B", "NUSHU CHARACTER-1B28C", "NUSHU CHARACTER-1B28D", "NUSHU CHARACTER-1B28E", "NUSHU CHARACTER-1B28F", "NUSHU CHARACTER-1B290", "NUSHU CHARACTER-1B291", "NUSHU CHARACTER-1B292", "NUSHU CHARACTER-1B293", "NUSHU CHARACTER-1B294", "NUSHU CHARACTER-1B295", "NUSHU CHARACTER-1B296", "NUSHU CHARACTER-1B297", "NUSHU CHARACTER-1B298", "NUSHU CHARACTER-1B299", "NUSHU CHARACTER-1B29A", "NUSHU CHARACTER-1B29B", "NUSHU CHARACTER-1B29C", "NUSHU CHARACTER-1B29D", "NUSHU CHARACTER-1B29E", "NUSHU CHARACTER-1B29F", "NUSHU CHARACTER-1B2A0", "NUSHU CHARACTER-1B2A1", "NUSHU CHARACTER-1B2A2", "NUSHU CHARACTER-1B2A3", "NUSHU CHARACTER-1B2A4", "NUSHU CHARACTER-1B2A5", "NUSHU CHARACTER-1B2A6", "NUSHU CHARACTER-1B2A7", "NUSHU CHARACTER-1B2A8", "NUSHU CHARACTER-1B2A9", "NUSHU CHARACTER-1B2AA", "NUSHU CHARACTER-1B2AB", "NUSHU CHARACTER-1B2AC", "NUSHU CHARACTER-1B2AD", "NUSHU CHARACTER-1B2AE", "NUSHU CHARACTER-1B2AF", "NUSHU CHARACTER-1B2B0", "NUSHU CHARACTER-1B2B1", "NUSHU CHARACTER-1B2B2", "NUSHU CHARACTER-1B2B3", "NUSHU CHARACTER-1B2B4", "NUSHU CHARACTER-1B2B5", "NUSHU CHARACTER-1B2B6", "NUSHU CHARACTER-1B2B7", "NUSHU CHARACTER-1B2B8", "NUSHU CHARACTER-1B2B9", "NUSHU CHARACTER-1B2BA", "NUSHU CHARACTER-1B2BB", "NUSHU CHARACTER-1B2BC", "NUSHU CHARACTER-1B2BD", "NUSHU CHARACTER-1B2BE", "NUSHU CHARACTER-1B2BF", "NUSHU CHARACTER-1B2C0", "NUSHU CHARACTER-1B2C1", "NUSHU CHARACTER-1B2C2", "NUSHU CHARACTER-1B2C3", "NUSHU CHARACTER-1B2C4", "NUSHU CHARACTER-1B2C5", "NUSHU CHARACTER-1B2C6", "NUSHU CHARACTER-1B2C7", "NUSHU CHARACTER-1B2C8", "NUSHU CHARACTER-1B2C9", "NUSHU CHARACTER-1B2CA", "NUSHU CHARACTER-1B2CB", "NUSHU CHARACTER-1B2CC", "NUSHU CHARACTER-1B2CD", "NUSHU CHARACTER-1B2CE", "NUSHU CHARACTER-1B2CF", "NUSHU CHARACTER-1B2D0", "NUSHU CHARACTER-1B2D1", "NUSHU CHARACTER-1B2D2", "NUSHU CHARACTER-1B2D3", "NUSHU CHARACTER-1B2D4", "NUSHU CHARACTER-1B2D5", "NUSHU CHARACTER-1B2D6", "NUSHU CHARACTER-1B2D7", "NUSHU CHARACTER-1B2D8", "NUSHU CHARACTER-1B2D9", "NUSHU CHARACTER-1B2DA", "NUSHU CHARACTER-1B2DB", "NUSHU CHARACTER-1B2DC", "NUSHU CHARACTER-1B2DD", "NUSHU CHARACTER-1B2DE", "NUSHU CHARACTER-1B2DF", "NUSHU CHARACTER-1B2E0", "NUSHU CHARACTER-1B2E1", "NUSHU CHARACTER-1B2E2", "NUSHU CHARACTER-1B2E3", "NUSHU CHARACTER-1B2E4", "NUSHU CHARACTER-1B2E5", "NUSHU CHARACTER-1B2E6", "NUSHU CHARACTER-1B2E7", "NUSHU CHARACTER-1B2E8", "NUSHU CHARACTER-1B2E9", "NUSHU CHARACTER-1B2EA", "NUSHU CHARACTER-1B2EB", "NUSHU CHARACTER-1B2EC", "NUSHU CHARACTER-1B2ED", "NUSHU CHARACTER-1B2EE", "NUSHU CHARACTER-1B2EF", "NUSHU CHARACTER-1B2F0", "NUSHU CHARACTER-1B2F1", "NUSHU CHARACTER-1B2F2", "NUSHU CHARACTER-1B2F3", "NUSHU CHARACTER-1B2F4", "NUSHU CHARACTER-1B2F5", "NUSHU CHARACTER-1B2F6", "NUSHU CHARACTER-1B2F7", "NUSHU CHARACTER-1B2F8", "NUSHU CHARACTER-1B2F9", "NUSHU CHARACTER-1B2FA", "NUSHU CHARACTER-1B2FB", "DUPLOYAN LETTER H", "DUPLOYAN LETTER X", "DUPLOYAN LETTER P", "DUPLOYAN LETTER T", "DUPLOYAN LETTER F", "DUPLOYAN LETTER K", "DUPLOYAN LETTER L", "DUPLOYAN LETTER B", "DUPLOYAN LETTER D", "DUPLOYAN LETTER V", "DUPLOYAN LETTER G", "DUPLOYAN LETTER R", "DUPLOYAN LETTER P N", "DUPLOYAN LETTER D S", "DUPLOYAN LETTER F N", "DUPLOYAN LETTER K M", "DUPLOYAN LETTER R S", "DUPLOYAN LETTER TH", "DUPLOYAN LETTER SLOAN DH", "DUPLOYAN LETTER DH", "DUPLOYAN LETTER KK", "DUPLOYAN LETTER SLOAN J", "DUPLOYAN LETTER HL", "DUPLOYAN LETTER LH", "DUPLOYAN LETTER RH", "DUPLOYAN LETTER M", "DUPLOYAN LETTER N", "DUPLOYAN LETTER J", "DUPLOYAN LETTER S", "DUPLOYAN LETTER M N", "DUPLOYAN LETTER N M", "DUPLOYAN LETTER J M", "DUPLOYAN LETTER S J", "DUPLOYAN LETTER M WITH DOT", "DUPLOYAN LETTER N WITH DOT", "DUPLOYAN LETTER J WITH DOT", "DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE", "DUPLOYAN LETTER S WITH DOT", "DUPLOYAN LETTER S WITH DOT BELOW", "DUPLOYAN LETTER M S", "DUPLOYAN LETTER N S", "DUPLOYAN LETTER J S", "DUPLOYAN LETTER S S", "DUPLOYAN LETTER M N S", "DUPLOYAN LETTER N M S", "DUPLOYAN LETTER J M S", "DUPLOYAN LETTER S J S", "DUPLOYAN LETTER J S WITH DOT", "DUPLOYAN LETTER J N", "DUPLOYAN LETTER J N S", "DUPLOYAN LETTER S T", "DUPLOYAN LETTER S T R", "DUPLOYAN LETTER S P", "DUPLOYAN LETTER S P R", "DUPLOYAN LETTER T S", "DUPLOYAN LETTER T R S", "DUPLOYAN LETTER W", "DUPLOYAN LETTER WH", "DUPLOYAN LETTER W R", "DUPLOYAN LETTER S N", "DUPLOYAN LETTER S M", "DUPLOYAN LETTER K R S", "DUPLOYAN LETTER G R S", "DUPLOYAN LETTER S K", "DUPLOYAN LETTER S K R", "DUPLOYAN LETTER A", "DUPLOYAN LETTER SLOAN OW", "DUPLOYAN LETTER OA", "DUPLOYAN LETTER O", "DUPLOYAN LETTER AOU", "DUPLOYAN LETTER I", "DUPLOYAN LETTER E", "DUPLOYAN LETTER IE", "DUPLOYAN LETTER SHORT I", "DUPLOYAN LETTER UI", "DUPLOYAN LETTER EE", "DUPLOYAN LETTER SLOAN EH", "DUPLOYAN LETTER ROMANIAN I", "DUPLOYAN LETTER SLOAN EE", "DUPLOYAN LETTER LONG I", "DUPLOYAN LETTER YE", "DUPLOYAN LETTER U", "DUPLOYAN LETTER EU", "DUPLOYAN LETTER XW", "DUPLOYAN LETTER U N", "DUPLOYAN LETTER LONG U", "DUPLOYAN LETTER ROMANIAN U", "DUPLOYAN LETTER UH", "DUPLOYAN LETTER SLOAN U", "DUPLOYAN LETTER OOH", "DUPLOYAN LETTER OW", "DUPLOYAN LETTER OU", "DUPLOYAN LETTER WA", "DUPLOYAN LETTER WO", "DUPLOYAN LETTER WI", "DUPLOYAN LETTER WEI", "DUPLOYAN LETTER WOW", "DUPLOYAN LETTER NASAL U", "DUPLOYAN LETTER NASAL O", "DUPLOYAN LETTER NASAL I", "DUPLOYAN LETTER NASAL A", "DUPLOYAN LETTER PERNIN AN", "DUPLOYAN LETTER PERNIN AM", "DUPLOYAN LETTER SLOAN EN", "DUPLOYAN LETTER SLOAN AN", "DUPLOYAN LETTER SLOAN ON", "DUPLOYAN LETTER VOCALIC M", "DUPLOYAN AFFIX LEFT HORIZONTAL SECANT", "DUPLOYAN AFFIX MID HORIZONTAL SECANT", "DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT", "DUPLOYAN AFFIX LOW VERTICAL SECANT", "DUPLOYAN AFFIX MID VERTICAL SECANT", "DUPLOYAN AFFIX HIGH VERTICAL SECANT", "DUPLOYAN AFFIX ATTACHED SECANT", "DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT", "DUPLOYAN AFFIX ATTACHED TANGENT", "DUPLOYAN AFFIX ATTACHED TAIL", "DUPLOYAN AFFIX ATTACHED E HOOK", "DUPLOYAN AFFIX ATTACHED I HOOK", "DUPLOYAN AFFIX ATTACHED TANGENT HOOK", "DUPLOYAN AFFIX HIGH ACUTE", "DUPLOYAN AFFIX HIGH TIGHT ACUTE", "DUPLOYAN AFFIX HIGH GRAVE", "DUPLOYAN AFFIX HIGH LONG GRAVE", "DUPLOYAN AFFIX HIGH DOT", "DUPLOYAN AFFIX HIGH CIRCLE", "DUPLOYAN AFFIX HIGH LINE", "DUPLOYAN AFFIX HIGH WAVE", "DUPLOYAN AFFIX HIGH VERTICAL", "DUPLOYAN AFFIX LOW ACUTE", "DUPLOYAN AFFIX LOW TIGHT ACUTE", "DUPLOYAN AFFIX LOW GRAVE", "DUPLOYAN AFFIX LOW LONG GRAVE", "DUPLOYAN AFFIX LOW DOT", "DUPLOYAN AFFIX LOW CIRCLE", "DUPLOYAN AFFIX LOW LINE", "DUPLOYAN AFFIX LOW WAVE", "DUPLOYAN AFFIX LOW VERTICAL", "DUPLOYAN AFFIX LOW ARROW", "DUPLOYAN SIGN O WITH CROSS", "DUPLOYAN THICK LETTER SELECTOR", "DUPLOYAN DOUBLE MARK", "DUPLOYAN PUNCTUATION CHINOOK FULL STOP", "SHORTHAND FORMAT LETTER OVERLAP", "SHORTHAND FORMAT CONTINUING OVERLAP", "SHORTHAND FORMAT DOWN STEP", "SHORTHAND FORMAT UP STEP", "BYZANTINE MUSICAL SYMBOL PSILI", "BYZANTINE MUSICAL SYMBOL DASEIA", "BYZANTINE MUSICAL SYMBOL PERISPOMENI", "BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON", "BYZANTINE MUSICAL SYMBOL OXEIA DIPLI", "BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON", "BYZANTINE MUSICAL SYMBOL VAREIA DIPLI", "BYZANTINE MUSICAL SYMBOL KATHISTI", "BYZANTINE MUSICAL SYMBOL SYRMATIKI", "BYZANTINE MUSICAL SYMBOL PARAKLITIKI", "BYZANTINE MUSICAL SYMBOL YPOKRISIS", "BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI", "BYZANTINE MUSICAL SYMBOL KREMASTI", "BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON", "BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON", "BYZANTINE MUSICAL SYMBOL TELEIA", "BYZANTINE MUSICAL SYMBOL KENTIMATA", "BYZANTINE MUSICAL SYMBOL APOSTROFOS", "BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI", "BYZANTINE MUSICAL SYMBOL SYNEVMA", "BYZANTINE MUSICAL SYMBOL THITA", "BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION", "BYZANTINE MUSICAL SYMBOL GORGON ARCHAION", "BYZANTINE MUSICAL SYMBOL PSILON", "BYZANTINE MUSICAL SYMBOL CHAMILON", "BYZANTINE MUSICAL SYMBOL VATHY", "BYZANTINE MUSICAL SYMBOL ISON ARCHAION", "BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION", "BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION", "BYZANTINE MUSICAL SYMBOL SAXIMATA", "BYZANTINE MUSICAL SYMBOL PARICHON", "BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA", "BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION", "BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION", "BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION", "BYZANTINE MUSICAL SYMBOL APOTHEMA", "BYZANTINE MUSICAL SYMBOL KLASMA", "BYZANTINE MUSICAL SYMBOL REVMA", "BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION", "BYZANTINE MUSICAL SYMBOL TINAGMA", "BYZANTINE MUSICAL SYMBOL ANATRICHISMA", "BYZANTINE MUSICAL SYMBOL SEISMA", "BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION", "BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU", "BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION", "BYZANTINE MUSICAL SYMBOL THEMA", "BYZANTINE MUSICAL SYMBOL LEMOI", "BYZANTINE MUSICAL SYMBOL DYO", "BYZANTINE MUSICAL SYMBOL TRIA", "BYZANTINE MUSICAL SYMBOL TESSERA", "BYZANTINE MUSICAL SYMBOL KRATIMATA", "BYZANTINE MUSICAL SYMBOL APESO EXO NEO", "BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION", "BYZANTINE MUSICAL SYMBOL IMIFTHORA", "BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION", "BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON", "BYZANTINE MUSICAL SYMBOL PELASTON", "BYZANTINE MUSICAL SYMBOL PSIFISTON", "BYZANTINE MUSICAL SYMBOL KONTEVMA", "BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION", "BYZANTINE MUSICAL SYMBOL RAPISMA", "BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION", "BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION", "BYZANTINE MUSICAL SYMBOL ICHADIN", "BYZANTINE MUSICAL SYMBOL NANA", "BYZANTINE MUSICAL SYMBOL PETASMA", "BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO", "BYZANTINE MUSICAL SYMBOL TROMIKON ALLO", "BYZANTINE MUSICAL SYMBOL STRAGGISMATA", "BYZANTINE MUSICAL SYMBOL GRONTHISMATA", "BYZANTINE MUSICAL SYMBOL ISON NEO", "BYZANTINE MUSICAL SYMBOL OLIGON NEO", "BYZANTINE MUSICAL SYMBOL OXEIA NEO", "BYZANTINE MUSICAL SYMBOL PETASTI", "BYZANTINE MUSICAL SYMBOL KOUFISMA", "BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA", "BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA", "BYZANTINE MUSICAL SYMBOL PELASTON NEO", "BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO", "BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO", "BYZANTINE MUSICAL SYMBOL YPSILI", "BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO", "BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO", "BYZANTINE MUSICAL SYMBOL YPORROI", "BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON", "BYZANTINE MUSICAL SYMBOL ELAFRON", "BYZANTINE MUSICAL SYMBOL CHAMILI", "BYZANTINE MUSICAL SYMBOL MIKRON ISON", "BYZANTINE MUSICAL SYMBOL VAREIA NEO", "BYZANTINE MUSICAL SYMBOL PIASMA NEO", "BYZANTINE MUSICAL SYMBOL PSIFISTON NEO", "BYZANTINE MUSICAL SYMBOL OMALON", "BYZANTINE MUSICAL SYMBOL ANTIKENOMA", "BYZANTINE MUSICAL SYMBOL LYGISMA", "BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO", "BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO", "BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA", "BYZANTINE MUSICAL SYMBOL KYLISMA", "BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA", "BYZANTINE MUSICAL SYMBOL TROMIKON NEO", "BYZANTINE MUSICAL SYMBOL EKSTREPTON", "BYZANTINE MUSICAL SYMBOL SYNAGMA NEO", "BYZANTINE MUSICAL SYMBOL SYRMA", "BYZANTINE MUSICAL SYMBOL CHOREVMA NEO", "BYZANTINE MUSICAL SYMBOL EPEGERMA", "BYZANTINE MUSICAL SYMBOL SEISMA NEO", "BYZANTINE MUSICAL SYMBOL XIRON KLASMA", "BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON", "BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA", "BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA", "BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA", "BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA", "BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA", "BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA", "BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON", "BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON", "BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON", "BYZANTINE MUSICAL SYMBOL OYRANISMA NEO", "BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO", "BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO", "BYZANTINE MUSICAL SYMBOL THEMA APLOUN", "BYZANTINE MUSICAL SYMBOL THES KAI APOTHES", "BYZANTINE MUSICAL SYMBOL KATAVASMA", "BYZANTINE MUSICAL SYMBOL ENDOFONON", "BYZANTINE MUSICAL SYMBOL YFEN KATO", "BYZANTINE MUSICAL SYMBOL YFEN ANO", "BYZANTINE MUSICAL SYMBOL STAVROS", "BYZANTINE MUSICAL SYMBOL KLASMA ANO", "BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION", "BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION", "BYZANTINE MUSICAL SYMBOL KRATIMA ALLO", "BYZANTINE MUSICAL SYMBOL KRATIMA NEO", "BYZANTINE MUSICAL SYMBOL APODERMA NEO", "BYZANTINE MUSICAL SYMBOL APLI", "BYZANTINE MUSICAL SYMBOL DIPLI", "BYZANTINE MUSICAL SYMBOL TRIPLI", "BYZANTINE MUSICAL SYMBOL TETRAPLI", "BYZANTINE MUSICAL SYMBOL KORONIS", "BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU", "BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON", "BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON", "BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON", "BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU", "BYZANTINE MUSICAL SYMBOL GORGON NEO ANO", "BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA", "BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA", "BYZANTINE MUSICAL SYMBOL DIGORGON", "BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO", "BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO", "BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA", "BYZANTINE MUSICAL SYMBOL TRIGORGON", "BYZANTINE MUSICAL SYMBOL ARGON", "BYZANTINE MUSICAL SYMBOL IMIDIARGON", "BYZANTINE MUSICAL SYMBOL DIARGON", "BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI", "BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI", "BYZANTINE MUSICAL SYMBOL AGOGI ARGI", "BYZANTINE MUSICAL SYMBOL AGOGI METRIA", "BYZANTINE MUSICAL SYMBOL AGOGI MESI", "BYZANTINE MUSICAL SYMBOL AGOGI GORGI", "BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI", "BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI", "BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS", "BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS", "BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS", "BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS", "BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS", "BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS", "BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS", "BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS", "BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS", "BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN", "BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN", "BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU", "BYZANTINE MUSICAL SYMBOL IMIFONON", "BYZANTINE MUSICAL SYMBOL IMIFTHORON", "BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA", "BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI", "BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO", "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO", "BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS", "BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS", "BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS", "BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI", "BYZANTINE MUSICAL SYMBOL FTHORA NENANO", "BYZANTINE MUSICAL SYMBOL CHROA ZYGOS", "BYZANTINE MUSICAL SYMBOL CHROA KLITON", "BYZANTINE MUSICAL SYMBOL CHROA SPATHI", "BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION", "BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA", "BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION", "BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION", "BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION", "BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA", "BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA", "BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA", "BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA", "BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA", "BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA", "BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA", "BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA", "BYZANTINE MUSICAL SYMBOL GENIKI DIESIS", "BYZANTINE MUSICAL SYMBOL GENIKI YFESIS", "BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI", "BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI", "BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI", "BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS", "BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS", "BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU", "BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU", "BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU", "BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS", "BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU", "BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU", "BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU", "BYZANTINE MUSICAL SYMBOL DIGRAMMA GG", "BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU", "BYZANTINE MUSICAL SYMBOL STIGMA", "BYZANTINE MUSICAL SYMBOL ARKTIKO PA", "BYZANTINE MUSICAL SYMBOL ARKTIKO VOU", "BYZANTINE MUSICAL SYMBOL ARKTIKO GA", "BYZANTINE MUSICAL SYMBOL ARKTIKO DI", "BYZANTINE MUSICAL SYMBOL ARKTIKO KE", "BYZANTINE MUSICAL SYMBOL ARKTIKO ZO", "BYZANTINE MUSICAL SYMBOL ARKTIKO NI", "BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO", "BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO", "BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO", "BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO", "BYZANTINE MUSICAL SYMBOL KLASMA KATO", "BYZANTINE MUSICAL SYMBOL GORGON NEO KATO", "MUSICAL SYMBOL SINGLE BARLINE", "MUSICAL SYMBOL DOUBLE BARLINE", "MUSICAL SYMBOL FINAL BARLINE", "MUSICAL SYMBOL REVERSE FINAL BARLINE", "MUSICAL SYMBOL DASHED BARLINE", "MUSICAL SYMBOL SHORT BARLINE", "MUSICAL SYMBOL LEFT REPEAT SIGN", "MUSICAL SYMBOL RIGHT REPEAT SIGN", "MUSICAL SYMBOL REPEAT DOTS", "MUSICAL SYMBOL DAL SEGNO", "MUSICAL SYMBOL DA CAPO", "MUSICAL SYMBOL SEGNO", "MUSICAL SYMBOL CODA", "MUSICAL SYMBOL REPEATED FIGURE-1", "MUSICAL SYMBOL REPEATED FIGURE-2", "MUSICAL SYMBOL REPEATED FIGURE-3", "MUSICAL SYMBOL FERMATA", "MUSICAL SYMBOL FERMATA BELOW", "MUSICAL SYMBOL BREATH MARK", "MUSICAL SYMBOL CAESURA", "MUSICAL SYMBOL BRACE", "MUSICAL SYMBOL BRACKET", "MUSICAL SYMBOL ONE-LINE STAFF", "MUSICAL SYMBOL TWO-LINE STAFF", "MUSICAL SYMBOL THREE-LINE STAFF", "MUSICAL SYMBOL FOUR-LINE STAFF", "MUSICAL SYMBOL FIVE-LINE STAFF", "MUSICAL SYMBOL SIX-LINE STAFF", "MUSICAL SYMBOL SIX-STRING FRETBOARD", "MUSICAL SYMBOL FOUR-STRING FRETBOARD", "MUSICAL SYMBOL G CLEF", "MUSICAL SYMBOL G CLEF OTTAVA ALTA", "MUSICAL SYMBOL G CLEF OTTAVA BASSA", "MUSICAL SYMBOL C CLEF", "MUSICAL SYMBOL F CLEF", "MUSICAL SYMBOL F CLEF OTTAVA ALTA", "MUSICAL SYMBOL F CLEF OTTAVA BASSA", "MUSICAL SYMBOL DRUM CLEF-1", "MUSICAL SYMBOL DRUM CLEF-2", "MUSICAL SYMBOL MULTIPLE MEASURE REST", "MUSICAL SYMBOL DOUBLE SHARP", "MUSICAL SYMBOL DOUBLE FLAT", "MUSICAL SYMBOL FLAT UP", "MUSICAL SYMBOL FLAT DOWN", "MUSICAL SYMBOL NATURAL UP", "MUSICAL SYMBOL NATURAL DOWN", "MUSICAL SYMBOL SHARP UP", "MUSICAL SYMBOL SHARP DOWN", "MUSICAL SYMBOL QUARTER TONE SHARP", "MUSICAL SYMBOL QUARTER TONE FLAT", "MUSICAL SYMBOL COMMON TIME", "MUSICAL SYMBOL CUT TIME", "MUSICAL SYMBOL OTTAVA ALTA", "MUSICAL SYMBOL OTTAVA BASSA", "MUSICAL SYMBOL QUINDICESIMA ALTA", "MUSICAL SYMBOL QUINDICESIMA BASSA", "MUSICAL SYMBOL MULTI REST", "MUSICAL SYMBOL WHOLE REST", "MUSICAL SYMBOL HALF REST", "MUSICAL SYMBOL QUARTER REST", "MUSICAL SYMBOL EIGHTH REST", "MUSICAL SYMBOL SIXTEENTH REST", "MUSICAL SYMBOL THIRTY-SECOND REST", "MUSICAL SYMBOL SIXTY-FOURTH REST", "MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST", "MUSICAL SYMBOL X NOTEHEAD", "MUSICAL SYMBOL PLUS NOTEHEAD", "MUSICAL SYMBOL CIRCLE X NOTEHEAD", "MUSICAL SYMBOL SQUARE NOTEHEAD WHITE", "MUSICAL SYMBOL SQUARE NOTEHEAD BLACK", "MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE", "MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK", "MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE", "MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK", "MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE", "MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK", "MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE", "MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK", "MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE", "MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK", "MUSICAL SYMBOL MOON NOTEHEAD WHITE", "MUSICAL SYMBOL MOON NOTEHEAD BLACK", "MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE", "MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK", "MUSICAL SYMBOL PARENTHESIS NOTEHEAD", "MUSICAL SYMBOL VOID NOTEHEAD", "MUSICAL SYMBOL NOTEHEAD BLACK", "MUSICAL SYMBOL NULL NOTEHEAD", "MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE", "MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK", "MUSICAL SYMBOL BREVE", "MUSICAL SYMBOL WHOLE NOTE", "MUSICAL SYMBOL HALF NOTE", "MUSICAL SYMBOL QUARTER NOTE", "MUSICAL SYMBOL EIGHTH NOTE", "MUSICAL SYMBOL SIXTEENTH NOTE", "MUSICAL SYMBOL THIRTY-SECOND NOTE", "MUSICAL SYMBOL SIXTY-FOURTH NOTE", "MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE", "MUSICAL SYMBOL COMBINING STEM", "MUSICAL SYMBOL COMBINING SPRECHGESANG STEM", "MUSICAL SYMBOL COMBINING TREMOLO-1", "MUSICAL SYMBOL COMBINING TREMOLO-2", "MUSICAL SYMBOL COMBINING TREMOLO-3", "MUSICAL SYMBOL FINGERED TREMOLO-1", "MUSICAL SYMBOL FINGERED TREMOLO-2", "MUSICAL SYMBOL FINGERED TREMOLO-3", "MUSICAL SYMBOL COMBINING AUGMENTATION DOT", "MUSICAL SYMBOL COMBINING FLAG-1", "MUSICAL SYMBOL COMBINING FLAG-2", "MUSICAL SYMBOL COMBINING FLAG-3", "MUSICAL SYMBOL COMBINING FLAG-4", "MUSICAL SYMBOL COMBINING FLAG-5", "MUSICAL SYMBOL BEGIN BEAM", "MUSICAL SYMBOL END BEAM", "MUSICAL SYMBOL BEGIN TIE", "MUSICAL SYMBOL END TIE", "MUSICAL SYMBOL BEGIN SLUR", "MUSICAL SYMBOL END SLUR", "MUSICAL SYMBOL BEGIN PHRASE", "MUSICAL SYMBOL END PHRASE", "MUSICAL SYMBOL COMBINING ACCENT", "MUSICAL SYMBOL COMBINING STACCATO", "MUSICAL SYMBOL COMBINING TENUTO", "MUSICAL SYMBOL COMBINING STACCATISSIMO", "MUSICAL SYMBOL COMBINING MARCATO", "MUSICAL SYMBOL COMBINING MARCATO-STACCATO", "MUSICAL SYMBOL COMBINING ACCENT-STACCATO", "MUSICAL SYMBOL COMBINING LOURE", "MUSICAL SYMBOL ARPEGGIATO UP", "MUSICAL SYMBOL ARPEGGIATO DOWN", "MUSICAL SYMBOL COMBINING DOIT", "MUSICAL SYMBOL COMBINING RIP", "MUSICAL SYMBOL COMBINING FLIP", "MUSICAL SYMBOL COMBINING SMEAR", "MUSICAL SYMBOL COMBINING BEND", "MUSICAL SYMBOL COMBINING DOUBLE TONGUE", "MUSICAL SYMBOL COMBINING TRIPLE TONGUE", "MUSICAL SYMBOL RINFORZANDO", "MUSICAL SYMBOL SUBITO", "MUSICAL SYMBOL Z", "MUSICAL SYMBOL PIANO", "MUSICAL SYMBOL MEZZO", "MUSICAL SYMBOL FORTE", "MUSICAL SYMBOL CRESCENDO", "MUSICAL SYMBOL DECRESCENDO", "MUSICAL SYMBOL GRACE NOTE SLASH", "MUSICAL SYMBOL GRACE NOTE NO SLASH", "MUSICAL SYMBOL TR", "MUSICAL SYMBOL TURN", "MUSICAL SYMBOL INVERTED TURN", "MUSICAL SYMBOL TURN SLASH", "MUSICAL SYMBOL TURN UP", "MUSICAL SYMBOL ORNAMENT STROKE-1", "MUSICAL SYMBOL ORNAMENT STROKE-2", "MUSICAL SYMBOL ORNAMENT STROKE-3", "MUSICAL SYMBOL ORNAMENT STROKE-4", "MUSICAL SYMBOL ORNAMENT STROKE-5", "MUSICAL SYMBOL ORNAMENT STROKE-6", "MUSICAL SYMBOL ORNAMENT STROKE-7", "MUSICAL SYMBOL ORNAMENT STROKE-8", "MUSICAL SYMBOL ORNAMENT STROKE-9", "MUSICAL SYMBOL ORNAMENT STROKE-10", "MUSICAL SYMBOL ORNAMENT STROKE-11", "MUSICAL SYMBOL HAUPTSTIMME", "MUSICAL SYMBOL NEBENSTIMME", "MUSICAL SYMBOL END OF STIMME", "MUSICAL SYMBOL DEGREE SLASH", "MUSICAL SYMBOL COMBINING DOWN BOW", "MUSICAL SYMBOL COMBINING UP BOW", "MUSICAL SYMBOL COMBINING HARMONIC", "MUSICAL SYMBOL COMBINING SNAP PIZZICATO", "MUSICAL SYMBOL PEDAL MARK", "MUSICAL SYMBOL PEDAL UP MARK", "MUSICAL SYMBOL HALF PEDAL MARK", "MUSICAL SYMBOL GLISSANDO UP", "MUSICAL SYMBOL GLISSANDO DOWN", "MUSICAL SYMBOL WITH FINGERNAILS", "MUSICAL SYMBOL DAMP", "MUSICAL SYMBOL DAMP ALL", "MUSICAL SYMBOL MAXIMA", "MUSICAL SYMBOL LONGA", "MUSICAL SYMBOL BREVIS", "MUSICAL SYMBOL SEMIBREVIS WHITE", "MUSICAL SYMBOL SEMIBREVIS BLACK", "MUSICAL SYMBOL MINIMA", "MUSICAL SYMBOL MINIMA BLACK", "MUSICAL SYMBOL SEMIMINIMA WHITE", "MUSICAL SYMBOL SEMIMINIMA BLACK", "MUSICAL SYMBOL FUSA WHITE", "MUSICAL SYMBOL FUSA BLACK", "MUSICAL SYMBOL LONGA PERFECTA REST", "MUSICAL SYMBOL LONGA IMPERFECTA REST", "MUSICAL SYMBOL BREVIS REST", "MUSICAL SYMBOL SEMIBREVIS REST", "MUSICAL SYMBOL MINIMA REST", "MUSICAL SYMBOL SEMIMINIMA REST", "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA", "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA", "MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1", "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA", "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA", "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1", "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2", "MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3", "MUSICAL SYMBOL CROIX", "MUSICAL SYMBOL GREGORIAN C CLEF", "MUSICAL SYMBOL GREGORIAN F CLEF", "MUSICAL SYMBOL SQUARE B", "MUSICAL SYMBOL VIRGA", "MUSICAL SYMBOL PODATUS", "MUSICAL SYMBOL CLIVIS", "MUSICAL SYMBOL SCANDICUS", "MUSICAL SYMBOL CLIMACUS", "MUSICAL SYMBOL TORCULUS", "MUSICAL SYMBOL PORRECTUS", "MUSICAL SYMBOL PORRECTUS FLEXUS", "MUSICAL SYMBOL SCANDICUS FLEXUS", "MUSICAL SYMBOL TORCULUS RESUPINUS", "MUSICAL SYMBOL PES SUBPUNCTIS", "MUSICAL SYMBOL KIEVAN C CLEF", "MUSICAL SYMBOL KIEVAN END OF PIECE", "MUSICAL SYMBOL KIEVAN FINAL NOTE", "MUSICAL SYMBOL KIEVAN RECITATIVE MARK", "MUSICAL SYMBOL KIEVAN WHOLE NOTE", "MUSICAL SYMBOL KIEVAN HALF NOTE", "MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN", "MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP", "MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN", "MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP", "MUSICAL SYMBOL KIEVAN FLAT SIGN", "GREEK VOCAL NOTATION SYMBOL-1", "GREEK VOCAL NOTATION SYMBOL-2", "GREEK VOCAL NOTATION SYMBOL-3", "GREEK VOCAL NOTATION SYMBOL-4", "GREEK VOCAL NOTATION SYMBOL-5", "GREEK VOCAL NOTATION SYMBOL-6", "GREEK VOCAL NOTATION SYMBOL-7", "GREEK VOCAL NOTATION SYMBOL-8", "GREEK VOCAL NOTATION SYMBOL-9", "GREEK VOCAL NOTATION SYMBOL-10", "GREEK VOCAL NOTATION SYMBOL-11", "GREEK VOCAL NOTATION SYMBOL-12", "GREEK VOCAL NOTATION SYMBOL-13", "GREEK VOCAL NOTATION SYMBOL-14", "GREEK VOCAL NOTATION SYMBOL-15", "GREEK VOCAL NOTATION SYMBOL-16", "GREEK VOCAL NOTATION SYMBOL-17", "GREEK VOCAL NOTATION SYMBOL-18", "GREEK VOCAL NOTATION SYMBOL-19", "GREEK VOCAL NOTATION SYMBOL-20", "GREEK VOCAL NOTATION SYMBOL-21", "GREEK VOCAL NOTATION SYMBOL-22", "GREEK VOCAL NOTATION SYMBOL-23", "GREEK VOCAL NOTATION SYMBOL-24", "GREEK VOCAL NOTATION SYMBOL-50", "GREEK VOCAL NOTATION SYMBOL-51", "GREEK VOCAL NOTATION SYMBOL-52", "GREEK VOCAL NOTATION SYMBOL-53", "GREEK VOCAL NOTATION SYMBOL-54", "GREEK INSTRUMENTAL NOTATION SYMBOL-1", "GREEK INSTRUMENTAL NOTATION SYMBOL-2", "GREEK INSTRUMENTAL NOTATION SYMBOL-4", "GREEK INSTRUMENTAL NOTATION SYMBOL-5", "GREEK INSTRUMENTAL NOTATION SYMBOL-7", "GREEK INSTRUMENTAL NOTATION SYMBOL-8", "GREEK INSTRUMENTAL NOTATION SYMBOL-11", "GREEK INSTRUMENTAL NOTATION SYMBOL-12", "GREEK INSTRUMENTAL NOTATION SYMBOL-13", "GREEK INSTRUMENTAL NOTATION SYMBOL-14", "GREEK INSTRUMENTAL NOTATION SYMBOL-17", "GREEK INSTRUMENTAL NOTATION SYMBOL-18", "GREEK INSTRUMENTAL NOTATION SYMBOL-19", "GREEK INSTRUMENTAL NOTATION SYMBOL-23", "GREEK INSTRUMENTAL NOTATION SYMBOL-24", "GREEK INSTRUMENTAL NOTATION SYMBOL-25", "GREEK INSTRUMENTAL NOTATION SYMBOL-26", "GREEK INSTRUMENTAL NOTATION SYMBOL-27", "GREEK INSTRUMENTAL NOTATION SYMBOL-29", "GREEK INSTRUMENTAL NOTATION SYMBOL-30", "GREEK INSTRUMENTAL NOTATION SYMBOL-32", "GREEK INSTRUMENTAL NOTATION SYMBOL-36", "GREEK INSTRUMENTAL NOTATION SYMBOL-37", "GREEK INSTRUMENTAL NOTATION SYMBOL-38", "GREEK INSTRUMENTAL NOTATION SYMBOL-39", "GREEK INSTRUMENTAL NOTATION SYMBOL-40", "GREEK INSTRUMENTAL NOTATION SYMBOL-42", "GREEK INSTRUMENTAL NOTATION SYMBOL-43", "GREEK INSTRUMENTAL NOTATION SYMBOL-45", "GREEK INSTRUMENTAL NOTATION SYMBOL-47", "GREEK INSTRUMENTAL NOTATION SYMBOL-48", "GREEK INSTRUMENTAL NOTATION SYMBOL-49", "GREEK INSTRUMENTAL NOTATION SYMBOL-50", "GREEK INSTRUMENTAL NOTATION SYMBOL-51", "GREEK INSTRUMENTAL NOTATION SYMBOL-52", "GREEK INSTRUMENTAL NOTATION SYMBOL-53", "GREEK INSTRUMENTAL NOTATION SYMBOL-54", "COMBINING GREEK MUSICAL TRISEME", "COMBINING GREEK MUSICAL TETRASEME", "COMBINING GREEK MUSICAL PENTASEME", "GREEK MUSICAL LEIMMA", "MAYAN NUMERAL ZERO", "MAYAN NUMERAL ONE", "MAYAN NUMERAL TWO", "MAYAN NUMERAL THREE", "MAYAN NUMERAL FOUR", "MAYAN NUMERAL FIVE", "MAYAN NUMERAL SIX", "MAYAN NUMERAL SEVEN", "MAYAN NUMERAL EIGHT", "MAYAN NUMERAL NINE", "MAYAN NUMERAL TEN", "MAYAN NUMERAL ELEVEN", "MAYAN NUMERAL TWELVE", "MAYAN NUMERAL THIRTEEN", "MAYAN NUMERAL FOURTEEN", "MAYAN NUMERAL FIFTEEN", "MAYAN NUMERAL SIXTEEN", "MAYAN NUMERAL SEVENTEEN", "MAYAN NUMERAL EIGHTEEN", "MAYAN NUMERAL NINETEEN", "MONOGRAM FOR EARTH", "DIGRAM FOR HEAVENLY EARTH", "DIGRAM FOR HUMAN EARTH", "DIGRAM FOR EARTHLY HEAVEN", "DIGRAM FOR EARTHLY HUMAN", "DIGRAM FOR EARTH", "TETRAGRAM FOR CENTRE", "TETRAGRAM FOR FULL CIRCLE", "TETRAGRAM FOR MIRED", "TETRAGRAM FOR BARRIER", "TETRAGRAM FOR KEEPING SMALL", "TETRAGRAM FOR CONTRARIETY", "TETRAGRAM FOR ASCENT", "TETRAGRAM FOR OPPOSITION", "TETRAGRAM FOR BRANCHING OUT", "TETRAGRAM FOR DEFECTIVENESS OR DISTORTION", "TETRAGRAM FOR DIVERGENCE", "TETRAGRAM FOR YOUTHFULNESS", "TETRAGRAM FOR INCREASE", "TETRAGRAM FOR PENETRATION", "TETRAGRAM FOR REACH", "TETRAGRAM FOR CONTACT", "TETRAGRAM FOR HOLDING BACK", "TETRAGRAM FOR WAITING", "TETRAGRAM FOR FOLLOWING", "TETRAGRAM FOR ADVANCE", "TETRAGRAM FOR RELEASE", "TETRAGRAM FOR RESISTANCE", "TETRAGRAM FOR EASE", "TETRAGRAM FOR JOY", "TETRAGRAM FOR CONTENTION", "TETRAGRAM FOR ENDEAVOUR", "TETRAGRAM FOR DUTIES", "TETRAGRAM FOR CHANGE", "TETRAGRAM FOR DECISIVENESS", "TETRAGRAM FOR BOLD RESOLUTION", "TETRAGRAM FOR PACKING", "TETRAGRAM FOR LEGION", "TETRAGRAM FOR CLOSENESS", "TETRAGRAM FOR KINSHIP", "TETRAGRAM FOR GATHERING", "TETRAGRAM FOR STRENGTH", "TETRAGRAM FOR PURITY", "TETRAGRAM FOR FULLNESS", "TETRAGRAM FOR RESIDENCE", "TETRAGRAM FOR LAW OR MODEL", "TETRAGRAM FOR RESPONSE", "TETRAGRAM FOR GOING TO MEET", "TETRAGRAM FOR ENCOUNTERS", "TETRAGRAM FOR STOVE", "TETRAGRAM FOR GREATNESS", "TETRAGRAM FOR ENLARGEMENT", "TETRAGRAM FOR PATTERN", "TETRAGRAM FOR RITUAL", "TETRAGRAM FOR FLIGHT", "TETRAGRAM FOR VASTNESS OR WASTING", "TETRAGRAM FOR CONSTANCY", "TETRAGRAM FOR MEASURE", "TETRAGRAM FOR ETERNITY", "TETRAGRAM FOR UNITY", "TETRAGRAM FOR DIMINISHMENT", "TETRAGRAM FOR CLOSED MOUTH", "TETRAGRAM FOR GUARDEDNESS", "TETRAGRAM FOR GATHERING IN", "TETRAGRAM FOR MASSING", "TETRAGRAM FOR ACCUMULATION", "TETRAGRAM FOR EMBELLISHMENT", "TETRAGRAM FOR DOUBT", "TETRAGRAM FOR WATCH", "TETRAGRAM FOR SINKING", "TETRAGRAM FOR INNER", "TETRAGRAM FOR DEPARTURE", "TETRAGRAM FOR DARKENING", "TETRAGRAM FOR DIMMING", "TETRAGRAM FOR EXHAUSTION", "TETRAGRAM FOR SEVERANCE", "TETRAGRAM FOR STOPPAGE", "TETRAGRAM FOR HARDNESS", "TETRAGRAM FOR COMPLETION", "TETRAGRAM FOR CLOSURE", "TETRAGRAM FOR FAILURE", "TETRAGRAM FOR AGGRAVATION", "TETRAGRAM FOR COMPLIANCE", "TETRAGRAM FOR ON THE VERGE", "TETRAGRAM FOR DIFFICULTIES", "TETRAGRAM FOR LABOURING", "TETRAGRAM FOR FOSTERING", "COUNTING ROD UNIT DIGIT ONE", "COUNTING ROD UNIT DIGIT TWO", "COUNTING ROD UNIT DIGIT THREE", "COUNTING ROD UNIT DIGIT FOUR", "COUNTING ROD UNIT DIGIT FIVE", "COUNTING ROD UNIT DIGIT SIX", "COUNTING ROD UNIT DIGIT SEVEN", "COUNTING ROD UNIT DIGIT EIGHT", "COUNTING ROD UNIT DIGIT NINE", "COUNTING ROD TENS DIGIT ONE", "COUNTING ROD TENS DIGIT TWO", "COUNTING ROD TENS DIGIT THREE", "COUNTING ROD TENS DIGIT FOUR", "COUNTING ROD TENS DIGIT FIVE", "COUNTING ROD TENS DIGIT SIX", "COUNTING ROD TENS DIGIT SEVEN", "COUNTING ROD TENS DIGIT EIGHT", "COUNTING ROD TENS DIGIT NINE", "IDEOGRAPHIC TALLY MARK ONE", "IDEOGRAPHIC TALLY MARK TWO", "IDEOGRAPHIC TALLY MARK THREE", "IDEOGRAPHIC TALLY MARK FOUR", "IDEOGRAPHIC TALLY MARK FIVE", "TALLY MARK ONE", "TALLY MARK FIVE", "MATHEMATICAL BOLD CAPITAL A", "MATHEMATICAL BOLD CAPITAL B", "MATHEMATICAL BOLD CAPITAL C", "MATHEMATICAL BOLD CAPITAL D", "MATHEMATICAL BOLD CAPITAL E", "MATHEMATICAL BOLD CAPITAL F", "MATHEMATICAL BOLD CAPITAL G", "MATHEMATICAL BOLD CAPITAL H", "MATHEMATICAL BOLD CAPITAL I", "MATHEMATICAL BOLD CAPITAL J", "MATHEMATICAL BOLD CAPITAL K", "MATHEMATICAL BOLD CAPITAL L", "MATHEMATICAL BOLD CAPITAL M", "MATHEMATICAL BOLD CAPITAL N", "MATHEMATICAL BOLD CAPITAL O", "MATHEMATICAL BOLD CAPITAL P", "MATHEMATICAL BOLD CAPITAL Q", "MATHEMATICAL BOLD CAPITAL R", "MATHEMATICAL BOLD CAPITAL S", "MATHEMATICAL BOLD CAPITAL T", "MATHEMATICAL BOLD CAPITAL U", "MATHEMATICAL BOLD CAPITAL V", "MATHEMATICAL BOLD CAPITAL W", "MATHEMATICAL BOLD CAPITAL X", "MATHEMATICAL BOLD CAPITAL Y", "MATHEMATICAL BOLD CAPITAL Z", "MATHEMATICAL BOLD SMALL A", "MATHEMATICAL BOLD SMALL B", "MATHEMATICAL BOLD SMALL C", "MATHEMATICAL BOLD SMALL D", "MATHEMATICAL BOLD SMALL E", "MATHEMATICAL BOLD SMALL F", "MATHEMATICAL BOLD SMALL G", "MATHEMATICAL BOLD SMALL H", "MATHEMATICAL BOLD SMALL I", "MATHEMATICAL BOLD SMALL J", "MATHEMATICAL BOLD SMALL K", "MATHEMATICAL BOLD SMALL L", "MATHEMATICAL BOLD SMALL M", "MATHEMATICAL BOLD SMALL N", "MATHEMATICAL BOLD SMALL O", "MATHEMATICAL BOLD SMALL P", "MATHEMATICAL BOLD SMALL Q", "MATHEMATICAL BOLD SMALL R", "MATHEMATICAL BOLD SMALL S", "MATHEMATICAL BOLD SMALL T", "MATHEMATICAL BOLD SMALL U", "MATHEMATICAL BOLD SMALL V", "MATHEMATICAL BOLD SMALL W", "MATHEMATICAL BOLD SMALL X", "MATHEMATICAL BOLD SMALL Y", "MATHEMATICAL BOLD SMALL Z", "MATHEMATICAL ITALIC CAPITAL A", "MATHEMATICAL ITALIC CAPITAL B", "MATHEMATICAL ITALIC CAPITAL C", "MATHEMATICAL ITALIC CAPITAL D", "MATHEMATICAL ITALIC CAPITAL E", "MATHEMATICAL ITALIC CAPITAL F", "MATHEMATICAL ITALIC CAPITAL G", "MATHEMATICAL ITALIC CAPITAL H", "MATHEMATICAL ITALIC CAPITAL I", "MATHEMATICAL ITALIC CAPITAL J", "MATHEMATICAL ITALIC CAPITAL K", "MATHEMATICAL ITALIC CAPITAL L", "MATHEMATICAL ITALIC CAPITAL M", "MATHEMATICAL ITALIC CAPITAL N", "MATHEMATICAL ITALIC CAPITAL O", "MATHEMATICAL ITALIC CAPITAL P", "MATHEMATICAL ITALIC CAPITAL Q", "MATHEMATICAL ITALIC CAPITAL R", "MATHEMATICAL ITALIC CAPITAL S", "MATHEMATICAL ITALIC CAPITAL T", "MATHEMATICAL ITALIC CAPITAL U", "MATHEMATICAL ITALIC CAPITAL V", "MATHEMATICAL ITALIC CAPITAL W", "MATHEMATICAL ITALIC CAPITAL X", "MATHEMATICAL ITALIC CAPITAL Y", "MATHEMATICAL ITALIC CAPITAL Z", "MATHEMATICAL ITALIC SMALL A", "MATHEMATICAL ITALIC SMALL B", "MATHEMATICAL ITALIC SMALL C", "MATHEMATICAL ITALIC SMALL D", "MATHEMATICAL ITALIC SMALL E", "MATHEMATICAL ITALIC SMALL F", "MATHEMATICAL ITALIC SMALL G", "MATHEMATICAL ITALIC SMALL I", "MATHEMATICAL ITALIC SMALL J", "MATHEMATICAL ITALIC SMALL K", "MATHEMATICAL ITALIC SMALL L", "MATHEMATICAL ITALIC SMALL M", "MATHEMATICAL ITALIC SMALL N", "MATHEMATICAL ITALIC SMALL O", "MATHEMATICAL ITALIC SMALL P", "MATHEMATICAL ITALIC SMALL Q", "MATHEMATICAL ITALIC SMALL R", "MATHEMATICAL ITALIC SMALL S", "MATHEMATICAL ITALIC SMALL T", "MATHEMATICAL ITALIC SMALL U", "MATHEMATICAL ITALIC SMALL V", "MATHEMATICAL ITALIC SMALL W", "MATHEMATICAL ITALIC SMALL X", "MATHEMATICAL ITALIC SMALL Y", "MATHEMATICAL ITALIC SMALL Z", "MATHEMATICAL BOLD ITALIC CAPITAL A", "MATHEMATICAL BOLD ITALIC CAPITAL B", "MATHEMATICAL BOLD ITALIC CAPITAL C", "MATHEMATICAL BOLD ITALIC CAPITAL D", "MATHEMATICAL BOLD ITALIC CAPITAL E", "MATHEMATICAL BOLD ITALIC CAPITAL F", "MATHEMATICAL BOLD ITALIC CAPITAL G", "MATHEMATICAL BOLD ITALIC CAPITAL H", "MATHEMATICAL BOLD ITALIC CAPITAL I", "MATHEMATICAL BOLD ITALIC CAPITAL J", "MATHEMATICAL BOLD ITALIC CAPITAL K", "MATHEMATICAL BOLD ITALIC CAPITAL L", "MATHEMATICAL BOLD ITALIC CAPITAL M", "MATHEMATICAL BOLD ITALIC CAPITAL N", "MATHEMATICAL BOLD ITALIC CAPITAL O", "MATHEMATICAL BOLD ITALIC CAPITAL P", "MATHEMATICAL BOLD ITALIC CAPITAL Q", "MATHEMATICAL BOLD ITALIC CAPITAL R", "MATHEMATICAL BOLD ITALIC CAPITAL S", "MATHEMATICAL BOLD ITALIC CAPITAL T", "MATHEMATICAL BOLD ITALIC CAPITAL U", "MATHEMATICAL BOLD ITALIC CAPITAL V", "MATHEMATICAL BOLD ITALIC CAPITAL W", "MATHEMATICAL BOLD ITALIC CAPITAL X", "MATHEMATICAL BOLD ITALIC CAPITAL Y", "MATHEMATICAL BOLD ITALIC CAPITAL Z", "MATHEMATICAL BOLD ITALIC SMALL A", "MATHEMATICAL BOLD ITALIC SMALL B", "MATHEMATICAL BOLD ITALIC SMALL C", "MATHEMATICAL BOLD ITALIC SMALL D", "MATHEMATICAL BOLD ITALIC SMALL E", "MATHEMATICAL BOLD ITALIC SMALL F", "MATHEMATICAL BOLD ITALIC SMALL G", "MATHEMATICAL BOLD ITALIC SMALL H", "MATHEMATICAL BOLD ITALIC SMALL I", "MATHEMATICAL BOLD ITALIC SMALL J", "MATHEMATICAL BOLD ITALIC SMALL K", "MATHEMATICAL BOLD ITALIC SMALL L", "MATHEMATICAL BOLD ITALIC SMALL M", "MATHEMATICAL BOLD ITALIC SMALL N", "MATHEMATICAL BOLD ITALIC SMALL O", "MATHEMATICAL BOLD ITALIC SMALL P", "MATHEMATICAL BOLD ITALIC SMALL Q", "MATHEMATICAL BOLD ITALIC SMALL R", "MATHEMATICAL BOLD ITALIC SMALL S", "MATHEMATICAL BOLD ITALIC SMALL T", "MATHEMATICAL BOLD ITALIC SMALL U", "MATHEMATICAL BOLD ITALIC SMALL V", "MATHEMATICAL BOLD ITALIC SMALL W", "MATHEMATICAL BOLD ITALIC SMALL X", "MATHEMATICAL BOLD ITALIC SMALL Y", "MATHEMATICAL BOLD ITALIC SMALL Z", "MATHEMATICAL SCRIPT CAPITAL A", "MATHEMATICAL SCRIPT CAPITAL C", "MATHEMATICAL SCRIPT CAPITAL D", "MATHEMATICAL SCRIPT CAPITAL G", "MATHEMATICAL SCRIPT CAPITAL J", "MATHEMATICAL SCRIPT CAPITAL K", "MATHEMATICAL SCRIPT CAPITAL N", "MATHEMATICAL SCRIPT CAPITAL O", "MATHEMATICAL SCRIPT CAPITAL P", "MATHEMATICAL SCRIPT CAPITAL Q", "MATHEMATICAL SCRIPT CAPITAL S", "MATHEMATICAL SCRIPT CAPITAL T", "MATHEMATICAL SCRIPT CAPITAL U", "MATHEMATICAL SCRIPT CAPITAL V", "MATHEMATICAL SCRIPT CAPITAL W", "MATHEMATICAL SCRIPT CAPITAL X", "MATHEMATICAL SCRIPT CAPITAL Y", "MATHEMATICAL SCRIPT CAPITAL Z", "MATHEMATICAL SCRIPT SMALL A", "MATHEMATICAL SCRIPT SMALL B", "MATHEMATICAL SCRIPT SMALL C", "MATHEMATICAL SCRIPT SMALL D", "MATHEMATICAL SCRIPT SMALL F", "MATHEMATICAL SCRIPT SMALL H", "MATHEMATICAL SCRIPT SMALL I", "MATHEMATICAL SCRIPT SMALL J", "MATHEMATICAL SCRIPT SMALL K", "MATHEMATICAL SCRIPT SMALL L", "MATHEMATICAL SCRIPT SMALL M", "MATHEMATICAL SCRIPT SMALL N", "MATHEMATICAL SCRIPT SMALL P", "MATHEMATICAL SCRIPT SMALL Q", "MATHEMATICAL SCRIPT SMALL R", "MATHEMATICAL SCRIPT SMALL S", "MATHEMATICAL SCRIPT SMALL T", "MATHEMATICAL SCRIPT SMALL U", "MATHEMATICAL SCRIPT SMALL V", "MATHEMATICAL SCRIPT SMALL W", "MATHEMATICAL SCRIPT SMALL X", "MATHEMATICAL SCRIPT SMALL Y", "MATHEMATICAL SCRIPT SMALL Z", "MATHEMATICAL BOLD SCRIPT CAPITAL A", "MATHEMATICAL BOLD SCRIPT CAPITAL B", "MATHEMATICAL BOLD SCRIPT CAPITAL C", "MATHEMATICAL BOLD SCRIPT CAPITAL D", "MATHEMATICAL BOLD SCRIPT CAPITAL E", "MATHEMATICAL BOLD SCRIPT CAPITAL F", "MATHEMATICAL BOLD SCRIPT CAPITAL G", "MATHEMATICAL BOLD SCRIPT CAPITAL H", "MATHEMATICAL BOLD SCRIPT CAPITAL I", "MATHEMATICAL BOLD SCRIPT CAPITAL J", "MATHEMATICAL BOLD SCRIPT CAPITAL K", "MATHEMATICAL BOLD SCRIPT CAPITAL L", "MATHEMATICAL BOLD SCRIPT CAPITAL M", "MATHEMATICAL BOLD SCRIPT CAPITAL N", "MATHEMATICAL BOLD SCRIPT CAPITAL O", "MATHEMATICAL BOLD SCRIPT CAPITAL P", "MATHEMATICAL BOLD SCRIPT CAPITAL Q", "MATHEMATICAL BOLD SCRIPT CAPITAL R", "MATHEMATICAL BOLD SCRIPT CAPITAL S", "MATHEMATICAL BOLD SCRIPT CAPITAL T", "MATHEMATICAL BOLD SCRIPT CAPITAL U", "MATHEMATICAL BOLD SCRIPT CAPITAL V", "MATHEMATICAL BOLD SCRIPT CAPITAL W", "MATHEMATICAL BOLD SCRIPT CAPITAL X", "MATHEMATICAL BOLD SCRIPT CAPITAL Y", "MATHEMATICAL BOLD SCRIPT CAPITAL Z", "MATHEMATICAL BOLD SCRIPT SMALL A", "MATHEMATICAL BOLD SCRIPT SMALL B", "MATHEMATICAL BOLD SCRIPT SMALL C", "MATHEMATICAL BOLD SCRIPT SMALL D", "MATHEMATICAL BOLD SCRIPT SMALL E", "MATHEMATICAL BOLD SCRIPT SMALL F", "MATHEMATICAL BOLD SCRIPT SMALL G", "MATHEMATICAL BOLD SCRIPT SMALL H", "MATHEMATICAL BOLD SCRIPT SMALL I", "MATHEMATICAL BOLD SCRIPT SMALL J", "MATHEMATICAL BOLD SCRIPT SMALL K", "MATHEMATICAL BOLD SCRIPT SMALL L", "MATHEMATICAL BOLD SCRIPT SMALL M", "MATHEMATICAL BOLD SCRIPT SMALL N", "MATHEMATICAL BOLD SCRIPT SMALL O", "MATHEMATICAL BOLD SCRIPT SMALL P", "MATHEMATICAL BOLD SCRIPT SMALL Q", "MATHEMATICAL BOLD SCRIPT SMALL R", "MATHEMATICAL BOLD SCRIPT SMALL S", "MATHEMATICAL BOLD SCRIPT SMALL T", "MATHEMATICAL BOLD SCRIPT SMALL U", "MATHEMATICAL BOLD SCRIPT SMALL V", "MATHEMATICAL BOLD SCRIPT SMALL W", "MATHEMATICAL BOLD SCRIPT SMALL X", "MATHEMATICAL BOLD SCRIPT SMALL Y", "MATHEMATICAL BOLD SCRIPT SMALL Z", "MATHEMATICAL FRAKTUR CAPITAL A", "MATHEMATICAL FRAKTUR CAPITAL B", "MATHEMATICAL FRAKTUR CAPITAL D", "MATHEMATICAL FRAKTUR CAPITAL E", "MATHEMATICAL FRAKTUR CAPITAL F", "MATHEMATICAL FRAKTUR CAPITAL G", "MATHEMATICAL FRAKTUR CAPITAL J", "MATHEMATICAL FRAKTUR CAPITAL K", "MATHEMATICAL FRAKTUR CAPITAL L", "MATHEMATICAL FRAKTUR CAPITAL M", "MATHEMATICAL FRAKTUR CAPITAL N", "MATHEMATICAL FRAKTUR CAPITAL O", "MATHEMATICAL FRAKTUR CAPITAL P", "MATHEMATICAL FRAKTUR CAPITAL Q", "MATHEMATICAL FRAKTUR CAPITAL S", "MATHEMATICAL FRAKTUR CAPITAL T", "MATHEMATICAL FRAKTUR CAPITAL U", "MATHEMATICAL FRAKTUR CAPITAL V", "MATHEMATICAL FRAKTUR CAPITAL W", "MATHEMATICAL FRAKTUR CAPITAL X", "MATHEMATICAL FRAKTUR CAPITAL Y", "MATHEMATICAL FRAKTUR SMALL A", "MATHEMATICAL FRAKTUR SMALL B", "MATHEMATICAL FRAKTUR SMALL C", "MATHEMATICAL FRAKTUR SMALL D", "MATHEMATICAL FRAKTUR SMALL E", "MATHEMATICAL FRAKTUR SMALL F", "MATHEMATICAL FRAKTUR SMALL G", "MATHEMATICAL FRAKTUR SMALL H", "MATHEMATICAL FRAKTUR SMALL I", "MATHEMATICAL FRAKTUR SMALL J", "MATHEMATICAL FRAKTUR SMALL K", "MATHEMATICAL FRAKTUR SMALL L", "MATHEMATICAL FRAKTUR SMALL M", "MATHEMATICAL FRAKTUR SMALL N", "MATHEMATICAL FRAKTUR SMALL O", "MATHEMATICAL FRAKTUR SMALL P", "MATHEMATICAL FRAKTUR SMALL Q", "MATHEMATICAL FRAKTUR SMALL R", "MATHEMATICAL FRAKTUR SMALL S", "MATHEMATICAL FRAKTUR SMALL T", "MATHEMATICAL FRAKTUR SMALL U", "MATHEMATICAL FRAKTUR SMALL V", "MATHEMATICAL FRAKTUR SMALL W", "MATHEMATICAL FRAKTUR SMALL X", "MATHEMATICAL FRAKTUR SMALL Y", "MATHEMATICAL FRAKTUR SMALL Z", "MATHEMATICAL DOUBLE-STRUCK CAPITAL A", "MATHEMATICAL DOUBLE-STRUCK CAPITAL B", "MATHEMATICAL DOUBLE-STRUCK CAPITAL D", "MATHEMATICAL DOUBLE-STRUCK CAPITAL E", "MATHEMATICAL DOUBLE-STRUCK CAPITAL F", "MATHEMATICAL DOUBLE-STRUCK CAPITAL G", "MATHEMATICAL DOUBLE-STRUCK CAPITAL I", "MATHEMATICAL DOUBLE-STRUCK CAPITAL J", "MATHEMATICAL DOUBLE-STRUCK CAPITAL K", "MATHEMATICAL DOUBLE-STRUCK CAPITAL L", "MATHEMATICAL DOUBLE-STRUCK CAPITAL M", "MATHEMATICAL DOUBLE-STRUCK CAPITAL O", "MATHEMATICAL DOUBLE-STRUCK CAPITAL S", "MATHEMATICAL DOUBLE-STRUCK CAPITAL T", "MATHEMATICAL DOUBLE-STRUCK CAPITAL U", "MATHEMATICAL DOUBLE-STRUCK CAPITAL V", "MATHEMATICAL DOUBLE-STRUCK CAPITAL W", "MATHEMATICAL DOUBLE-STRUCK CAPITAL X", "MATHEMATICAL DOUBLE-STRUCK CAPITAL Y", "MATHEMATICAL DOUBLE-STRUCK SMALL A", "MATHEMATICAL DOUBLE-STRUCK SMALL B", "MATHEMATICAL DOUBLE-STRUCK SMALL C", "MATHEMATICAL DOUBLE-STRUCK SMALL D", "MATHEMATICAL DOUBLE-STRUCK SMALL E", "MATHEMATICAL DOUBLE-STRUCK SMALL F", "MATHEMATICAL DOUBLE-STRUCK SMALL G", "MATHEMATICAL DOUBLE-STRUCK SMALL H", "MATHEMATICAL DOUBLE-STRUCK SMALL I", "MATHEMATICAL DOUBLE-STRUCK SMALL J", "MATHEMATICAL DOUBLE-STRUCK SMALL K", "MATHEMATICAL DOUBLE-STRUCK SMALL L", "MATHEMATICAL DOUBLE-STRUCK SMALL M", "MATHEMATICAL DOUBLE-STRUCK SMALL N", "MATHEMATICAL DOUBLE-STRUCK SMALL O", "MATHEMATICAL DOUBLE-STRUCK SMALL P", "MATHEMATICAL DOUBLE-STRUCK SMALL Q", "MATHEMATICAL DOUBLE-STRUCK SMALL R", "MATHEMATICAL DOUBLE-STRUCK SMALL S", "MATHEMATICAL DOUBLE-STRUCK SMALL T", "MATHEMATICAL DOUBLE-STRUCK SMALL U", "MATHEMATICAL DOUBLE-STRUCK SMALL V", "MATHEMATICAL DOUBLE-STRUCK SMALL W", "MATHEMATICAL DOUBLE-STRUCK SMALL X", "MATHEMATICAL DOUBLE-STRUCK SMALL Y", "MATHEMATICAL DOUBLE-STRUCK SMALL Z", "MATHEMATICAL BOLD FRAKTUR CAPITAL A", "MATHEMATICAL BOLD FRAKTUR CAPITAL B", "MATHEMATICAL BOLD FRAKTUR CAPITAL C", "MATHEMATICAL BOLD FRAKTUR CAPITAL D", "MATHEMATICAL BOLD FRAKTUR CAPITAL E", "MATHEMATICAL BOLD FRAKTUR CAPITAL F", "MATHEMATICAL BOLD FRAKTUR CAPITAL G", "MATHEMATICAL BOLD FRAKTUR CAPITAL H", "MATHEMATICAL BOLD FRAKTUR CAPITAL I", "MATHEMATICAL BOLD FRAKTUR CAPITAL J", "MATHEMATICAL BOLD FRAKTUR CAPITAL K", "MATHEMATICAL BOLD FRAKTUR CAPITAL L", "MATHEMATICAL BOLD FRAKTUR CAPITAL M", "MATHEMATICAL BOLD FRAKTUR CAPITAL N", "MATHEMATICAL BOLD FRAKTUR CAPITAL O", "MATHEMATICAL BOLD FRAKTUR CAPITAL P", "MATHEMATICAL BOLD FRAKTUR CAPITAL Q", "MATHEMATICAL BOLD FRAKTUR CAPITAL R", "MATHEMATICAL BOLD FRAKTUR CAPITAL S", "MATHEMATICAL BOLD FRAKTUR CAPITAL T", "MATHEMATICAL BOLD FRAKTUR CAPITAL U", "MATHEMATICAL BOLD FRAKTUR CAPITAL V", "MATHEMATICAL BOLD FRAKTUR CAPITAL W", "MATHEMATICAL BOLD FRAKTUR CAPITAL X", "MATHEMATICAL BOLD FRAKTUR CAPITAL Y", "MATHEMATICAL BOLD FRAKTUR CAPITAL Z", "MATHEMATICAL BOLD FRAKTUR SMALL A", "MATHEMATICAL BOLD FRAKTUR SMALL B", "MATHEMATICAL BOLD FRAKTUR SMALL C", "MATHEMATICAL BOLD FRAKTUR SMALL D", "MATHEMATICAL BOLD FRAKTUR SMALL E", "MATHEMATICAL BOLD FRAKTUR SMALL F", "MATHEMATICAL BOLD FRAKTUR SMALL G", "MATHEMATICAL BOLD FRAKTUR SMALL H", "MATHEMATICAL BOLD FRAKTUR SMALL I", "MATHEMATICAL BOLD FRAKTUR SMALL J", "MATHEMATICAL BOLD FRAKTUR SMALL K", "MATHEMATICAL BOLD FRAKTUR SMALL L", "MATHEMATICAL BOLD FRAKTUR SMALL M", "MATHEMATICAL BOLD FRAKTUR SMALL N", "MATHEMATICAL BOLD FRAKTUR SMALL O", "MATHEMATICAL BOLD FRAKTUR SMALL P", "MATHEMATICAL BOLD FRAKTUR SMALL Q", "MATHEMATICAL BOLD FRAKTUR SMALL R", "MATHEMATICAL BOLD FRAKTUR SMALL S", "MATHEMATICAL BOLD FRAKTUR SMALL T", "MATHEMATICAL BOLD FRAKTUR SMALL U", "MATHEMATICAL BOLD FRAKTUR SMALL V", "MATHEMATICAL BOLD FRAKTUR SMALL W", "MATHEMATICAL BOLD FRAKTUR SMALL X", "MATHEMATICAL BOLD FRAKTUR SMALL Y", "MATHEMATICAL BOLD FRAKTUR SMALL Z", "MATHEMATICAL SANS-SERIF CAPITAL A", "MATHEMATICAL SANS-SERIF CAPITAL B", "MATHEMATICAL SANS-SERIF CAPITAL C", "MATHEMATICAL SANS-SERIF CAPITAL D", "MATHEMATICAL SANS-SERIF CAPITAL E", "MATHEMATICAL SANS-SERIF CAPITAL F", "MATHEMATICAL SANS-SERIF CAPITAL G", "MATHEMATICAL SANS-SERIF CAPITAL H", "MATHEMATICAL SANS-SERIF CAPITAL I", "MATHEMATICAL SANS-SERIF CAPITAL J", "MATHEMATICAL SANS-SERIF CAPITAL K", "MATHEMATICAL SANS-SERIF CAPITAL L", "MATHEMATICAL SANS-SERIF CAPITAL M", "MATHEMATICAL SANS-SERIF CAPITAL N", "MATHEMATICAL SANS-SERIF CAPITAL O", "MATHEMATICAL SANS-SERIF CAPITAL P", "MATHEMATICAL SANS-SERIF CAPITAL Q", "MATHEMATICAL SANS-SERIF CAPITAL R", "MATHEMATICAL SANS-SERIF CAPITAL S", "MATHEMATICAL SANS-SERIF CAPITAL T", "MATHEMATICAL SANS-SERIF CAPITAL U", "MATHEMATICAL SANS-SERIF CAPITAL V", "MATHEMATICAL SANS-SERIF CAPITAL W", "MATHEMATICAL SANS-SERIF CAPITAL X", "MATHEMATICAL SANS-SERIF CAPITAL Y", "MATHEMATICAL SANS-SERIF CAPITAL Z", "MATHEMATICAL SANS-SERIF SMALL A", "MATHEMATICAL SANS-SERIF SMALL B", "MATHEMATICAL SANS-SERIF SMALL C", "MATHEMATICAL SANS-SERIF SMALL D", "MATHEMATICAL SANS-SERIF SMALL E", "MATHEMATICAL SANS-SERIF SMALL F", "MATHEMATICAL SANS-SERIF SMALL G", "MATHEMATICAL SANS-SERIF SMALL H", "MATHEMATICAL SANS-SERIF SMALL I", "MATHEMATICAL SANS-SERIF SMALL J", "MATHEMATICAL SANS-SERIF SMALL K", "MATHEMATICAL SANS-SERIF SMALL L", "MATHEMATICAL SANS-SERIF SMALL M", "MATHEMATICAL SANS-SERIF SMALL N", "MATHEMATICAL SANS-SERIF SMALL O", "MATHEMATICAL SANS-SERIF SMALL P", "MATHEMATICAL SANS-SERIF SMALL Q", "MATHEMATICAL SANS-SERIF SMALL R", "MATHEMATICAL SANS-SERIF SMALL S", "MATHEMATICAL SANS-SERIF SMALL T", "MATHEMATICAL SANS-SERIF SMALL U", "MATHEMATICAL SANS-SERIF SMALL V", "MATHEMATICAL SANS-SERIF SMALL W", "MATHEMATICAL SANS-SERIF SMALL X", "MATHEMATICAL SANS-SERIF SMALL Y", "MATHEMATICAL SANS-SERIF SMALL Z", "MATHEMATICAL SANS-SERIF BOLD CAPITAL A", "MATHEMATICAL SANS-SERIF BOLD CAPITAL B", "MATHEMATICAL SANS-SERIF BOLD CAPITAL C", "MATHEMATICAL SANS-SERIF BOLD CAPITAL D", "MATHEMATICAL SANS-SERIF BOLD CAPITAL E", "MATHEMATICAL SANS-SERIF BOLD CAPITAL F", "MATHEMATICAL SANS-SERIF BOLD CAPITAL G", "MATHEMATICAL SANS-SERIF BOLD CAPITAL H", "MATHEMATICAL SANS-SERIF BOLD CAPITAL I", "MATHEMATICAL SANS-SERIF BOLD CAPITAL J", "MATHEMATICAL SANS-SERIF BOLD CAPITAL K", "MATHEMATICAL SANS-SERIF BOLD CAPITAL L", "MATHEMATICAL SANS-SERIF BOLD CAPITAL M", "MATHEMATICAL SANS-SERIF BOLD CAPITAL N", "MATHEMATICAL SANS-SERIF BOLD CAPITAL O", "MATHEMATICAL SANS-SERIF BOLD CAPITAL P", "MATHEMATICAL SANS-SERIF BOLD CAPITAL Q", "MATHEMATICAL SANS-SERIF BOLD CAPITAL R", "MATHEMATICAL SANS-SERIF BOLD CAPITAL S", "MATHEMATICAL SANS-SERIF BOLD CAPITAL T", "MATHEMATICAL SANS-SERIF BOLD CAPITAL U", "MATHEMATICAL SANS-SERIF BOLD CAPITAL V", "MATHEMATICAL SANS-SERIF BOLD CAPITAL W", "MATHEMATICAL SANS-SERIF BOLD CAPITAL X", "MATHEMATICAL SANS-SERIF BOLD CAPITAL Y", "MATHEMATICAL SANS-SERIF BOLD CAPITAL Z", "MATHEMATICAL SANS-SERIF BOLD SMALL A", "MATHEMATICAL SANS-SERIF BOLD SMALL B", "MATHEMATICAL SANS-SERIF BOLD SMALL C", "MATHEMATICAL SANS-SERIF BOLD SMALL D", "MATHEMATICAL SANS-SERIF BOLD SMALL E", "MATHEMATICAL SANS-SERIF BOLD SMALL F", "MATHEMATICAL SANS-SERIF BOLD SMALL G", "MATHEMATICAL SANS-SERIF BOLD SMALL H", "MATHEMATICAL SANS-SERIF BOLD SMALL I", "MATHEMATICAL SANS-SERIF BOLD SMALL J", "MATHEMATICAL SANS-SERIF BOLD SMALL K", "MATHEMATICAL SANS-SERIF BOLD SMALL L", "MATHEMATICAL SANS-SERIF BOLD SMALL M", "MATHEMATICAL SANS-SERIF BOLD SMALL N", "MATHEMATICAL SANS-SERIF BOLD SMALL O", "MATHEMATICAL SANS-SERIF BOLD SMALL P", "MATHEMATICAL SANS-SERIF BOLD SMALL Q", "MATHEMATICAL SANS-SERIF BOLD SMALL R", "MATHEMATICAL SANS-SERIF BOLD SMALL S", "MATHEMATICAL SANS-SERIF BOLD SMALL T", "MATHEMATICAL SANS-SERIF BOLD SMALL U", "MATHEMATICAL SANS-SERIF BOLD SMALL V", "MATHEMATICAL SANS-SERIF BOLD SMALL W", "MATHEMATICAL SANS-SERIF BOLD SMALL X", "MATHEMATICAL SANS-SERIF BOLD SMALL Y", "MATHEMATICAL SANS-SERIF BOLD SMALL Z", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL A", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL B", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL C", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL D", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL E", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL F", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL G", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL H", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL I", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL J", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL K", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL L", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL M", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL N", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL O", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL P", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL R", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL S", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL T", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL U", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL V", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL W", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL X", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y", "MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z", "MATHEMATICAL SANS-SERIF ITALIC SMALL A", "MATHEMATICAL SANS-SERIF ITALIC SMALL B", "MATHEMATICAL SANS-SERIF ITALIC SMALL C", "MATHEMATICAL SANS-SERIF ITALIC SMALL D", "MATHEMATICAL SANS-SERIF ITALIC SMALL E", "MATHEMATICAL SANS-SERIF ITALIC SMALL F", "MATHEMATICAL SANS-SERIF ITALIC SMALL G", "MATHEMATICAL SANS-SERIF ITALIC SMALL H", "MATHEMATICAL SANS-SERIF ITALIC SMALL I", "MATHEMATICAL SANS-SERIF ITALIC SMALL J", "MATHEMATICAL SANS-SERIF ITALIC SMALL K", "MATHEMATICAL SANS-SERIF ITALIC SMALL L", "MATHEMATICAL SANS-SERIF ITALIC SMALL M", "MATHEMATICAL SANS-SERIF ITALIC SMALL N", "MATHEMATICAL SANS-SERIF ITALIC SMALL O", "MATHEMATICAL SANS-SERIF ITALIC SMALL P", "MATHEMATICAL SANS-SERIF ITALIC SMALL Q", "MATHEMATICAL SANS-SERIF ITALIC SMALL R", "MATHEMATICAL SANS-SERIF ITALIC SMALL S", "MATHEMATICAL SANS-SERIF ITALIC SMALL T", "MATHEMATICAL SANS-SERIF ITALIC SMALL U", "MATHEMATICAL SANS-SERIF ITALIC SMALL V", "MATHEMATICAL SANS-SERIF ITALIC SMALL W", "MATHEMATICAL SANS-SERIF ITALIC SMALL X", "MATHEMATICAL SANS-SERIF ITALIC SMALL Y", "MATHEMATICAL SANS-SERIF ITALIC SMALL Z", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z", "MATHEMATICAL MONOSPACE CAPITAL A", "MATHEMATICAL MONOSPACE CAPITAL B", "MATHEMATICAL MONOSPACE CAPITAL C", "MATHEMATICAL MONOSPACE CAPITAL D", "MATHEMATICAL MONOSPACE CAPITAL E", "MATHEMATICAL MONOSPACE CAPITAL F", "MATHEMATICAL MONOSPACE CAPITAL G", "MATHEMATICAL MONOSPACE CAPITAL H", "MATHEMATICAL MONOSPACE CAPITAL I", "MATHEMATICAL MONOSPACE CAPITAL J", "MATHEMATICAL MONOSPACE CAPITAL K", "MATHEMATICAL MONOSPACE CAPITAL L", "MATHEMATICAL MONOSPACE CAPITAL M", "MATHEMATICAL MONOSPACE CAPITAL N", "MATHEMATICAL MONOSPACE CAPITAL O", "MATHEMATICAL MONOSPACE CAPITAL P", "MATHEMATICAL MONOSPACE CAPITAL Q", "MATHEMATICAL MONOSPACE CAPITAL R", "MATHEMATICAL MONOSPACE CAPITAL S", "MATHEMATICAL MONOSPACE CAPITAL T", "MATHEMATICAL MONOSPACE CAPITAL U", "MATHEMATICAL MONOSPACE CAPITAL V", "MATHEMATICAL MONOSPACE CAPITAL W", "MATHEMATICAL MONOSPACE CAPITAL X", "MATHEMATICAL MONOSPACE CAPITAL Y", "MATHEMATICAL MONOSPACE CAPITAL Z", "MATHEMATICAL MONOSPACE SMALL A", "MATHEMATICAL MONOSPACE SMALL B", "MATHEMATICAL MONOSPACE SMALL C", "MATHEMATICAL MONOSPACE SMALL D", "MATHEMATICAL MONOSPACE SMALL E", "MATHEMATICAL MONOSPACE SMALL F", "MATHEMATICAL MONOSPACE SMALL G", "MATHEMATICAL MONOSPACE SMALL H", "MATHEMATICAL MONOSPACE SMALL I", "MATHEMATICAL MONOSPACE SMALL J", "MATHEMATICAL MONOSPACE SMALL K", "MATHEMATICAL MONOSPACE SMALL L", "MATHEMATICAL MONOSPACE SMALL M", "MATHEMATICAL MONOSPACE SMALL N", "MATHEMATICAL MONOSPACE SMALL O", "MATHEMATICAL MONOSPACE SMALL P", "MATHEMATICAL MONOSPACE SMALL Q", "MATHEMATICAL MONOSPACE SMALL R", "MATHEMATICAL MONOSPACE SMALL S", "MATHEMATICAL MONOSPACE SMALL T", "MATHEMATICAL MONOSPACE SMALL U", "MATHEMATICAL MONOSPACE SMALL V", "MATHEMATICAL MONOSPACE SMALL W", "MATHEMATICAL MONOSPACE SMALL X", "MATHEMATICAL MONOSPACE SMALL Y", "MATHEMATICAL MONOSPACE SMALL Z", "MATHEMATICAL ITALIC SMALL DOTLESS I", "MATHEMATICAL ITALIC SMALL DOTLESS J", "MATHEMATICAL BOLD CAPITAL ALPHA", "MATHEMATICAL BOLD CAPITAL BETA", "MATHEMATICAL BOLD CAPITAL GAMMA", "MATHEMATICAL BOLD CAPITAL DELTA", "MATHEMATICAL BOLD CAPITAL EPSILON", "MATHEMATICAL BOLD CAPITAL ZETA", "MATHEMATICAL BOLD CAPITAL ETA", "MATHEMATICAL BOLD CAPITAL THETA", "MATHEMATICAL BOLD CAPITAL IOTA", "MATHEMATICAL BOLD CAPITAL KAPPA", "MATHEMATICAL BOLD CAPITAL LAMDA", "MATHEMATICAL BOLD CAPITAL MU", "MATHEMATICAL BOLD CAPITAL NU", "MATHEMATICAL BOLD CAPITAL XI", "MATHEMATICAL BOLD CAPITAL OMICRON", "MATHEMATICAL BOLD CAPITAL PI", "MATHEMATICAL BOLD CAPITAL RHO", "MATHEMATICAL BOLD CAPITAL THETA SYMBOL", "MATHEMATICAL BOLD CAPITAL SIGMA", "MATHEMATICAL BOLD CAPITAL TAU", "MATHEMATICAL BOLD CAPITAL UPSILON", "MATHEMATICAL BOLD CAPITAL PHI", "MATHEMATICAL BOLD CAPITAL CHI", "MATHEMATICAL BOLD CAPITAL PSI", "MATHEMATICAL BOLD CAPITAL OMEGA", "MATHEMATICAL BOLD NABLA", "MATHEMATICAL BOLD SMALL ALPHA", "MATHEMATICAL BOLD SMALL BETA", "MATHEMATICAL BOLD SMALL GAMMA", "MATHEMATICAL BOLD SMALL DELTA", "MATHEMATICAL BOLD SMALL EPSILON", "MATHEMATICAL BOLD SMALL ZETA", "MATHEMATICAL BOLD SMALL ETA", "MATHEMATICAL BOLD SMALL THETA", "MATHEMATICAL BOLD SMALL IOTA", "MATHEMATICAL BOLD SMALL KAPPA", "MATHEMATICAL BOLD SMALL LAMDA", "MATHEMATICAL BOLD SMALL MU", "MATHEMATICAL BOLD SMALL NU", "MATHEMATICAL BOLD SMALL XI", "MATHEMATICAL BOLD SMALL OMICRON", "MATHEMATICAL BOLD SMALL PI", "MATHEMATICAL BOLD SMALL RHO", "MATHEMATICAL BOLD SMALL FINAL SIGMA", "MATHEMATICAL BOLD SMALL SIGMA", "MATHEMATICAL BOLD SMALL TAU", "MATHEMATICAL BOLD SMALL UPSILON", "MATHEMATICAL BOLD SMALL PHI", "MATHEMATICAL BOLD SMALL CHI", "MATHEMATICAL BOLD SMALL PSI", "MATHEMATICAL BOLD SMALL OMEGA", "MATHEMATICAL BOLD PARTIAL DIFFERENTIAL", "MATHEMATICAL BOLD EPSILON SYMBOL", "MATHEMATICAL BOLD THETA SYMBOL", "MATHEMATICAL BOLD KAPPA SYMBOL", "MATHEMATICAL BOLD PHI SYMBOL", "MATHEMATICAL BOLD RHO SYMBOL", "MATHEMATICAL BOLD PI SYMBOL", "MATHEMATICAL ITALIC CAPITAL ALPHA", "MATHEMATICAL ITALIC CAPITAL BETA", "MATHEMATICAL ITALIC CAPITAL GAMMA", "MATHEMATICAL ITALIC CAPITAL DELTA", "MATHEMATICAL ITALIC CAPITAL EPSILON", "MATHEMATICAL ITALIC CAPITAL ZETA", "MATHEMATICAL ITALIC CAPITAL ETA", "MATHEMATICAL ITALIC CAPITAL THETA", "MATHEMATICAL ITALIC CAPITAL IOTA", "MATHEMATICAL ITALIC CAPITAL KAPPA", "MATHEMATICAL ITALIC CAPITAL LAMDA", "MATHEMATICAL ITALIC CAPITAL MU", "MATHEMATICAL ITALIC CAPITAL NU", "MATHEMATICAL ITALIC CAPITAL XI", "MATHEMATICAL ITALIC CAPITAL OMICRON", "MATHEMATICAL ITALIC CAPITAL PI", "MATHEMATICAL ITALIC CAPITAL RHO", "MATHEMATICAL ITALIC CAPITAL THETA SYMBOL", "MATHEMATICAL ITALIC CAPITAL SIGMA", "MATHEMATICAL ITALIC CAPITAL TAU", "MATHEMATICAL ITALIC CAPITAL UPSILON", "MATHEMATICAL ITALIC CAPITAL PHI", "MATHEMATICAL ITALIC CAPITAL CHI", "MATHEMATICAL ITALIC CAPITAL PSI", "MATHEMATICAL ITALIC CAPITAL OMEGA", "MATHEMATICAL ITALIC NABLA", "MATHEMATICAL ITALIC SMALL ALPHA", "MATHEMATICAL ITALIC SMALL BETA", "MATHEMATICAL ITALIC SMALL GAMMA", "MATHEMATICAL ITALIC SMALL DELTA", "MATHEMATICAL ITALIC SMALL EPSILON", "MATHEMATICAL ITALIC SMALL ZETA", "MATHEMATICAL ITALIC SMALL ETA", "MATHEMATICAL ITALIC SMALL THETA", "MATHEMATICAL ITALIC SMALL IOTA", "MATHEMATICAL ITALIC SMALL KAPPA", "MATHEMATICAL ITALIC SMALL LAMDA", "MATHEMATICAL ITALIC SMALL MU", "MATHEMATICAL ITALIC SMALL NU", "MATHEMATICAL ITALIC SMALL XI", "MATHEMATICAL ITALIC SMALL OMICRON", "MATHEMATICAL ITALIC SMALL PI", "MATHEMATICAL ITALIC SMALL RHO", "MATHEMATICAL ITALIC SMALL FINAL SIGMA", "MATHEMATICAL ITALIC SMALL SIGMA", "MATHEMATICAL ITALIC SMALL TAU", "MATHEMATICAL ITALIC SMALL UPSILON", "MATHEMATICAL ITALIC SMALL PHI", "MATHEMATICAL ITALIC SMALL CHI", "MATHEMATICAL ITALIC SMALL PSI", "MATHEMATICAL ITALIC SMALL OMEGA", "MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL", "MATHEMATICAL ITALIC EPSILON SYMBOL", "MATHEMATICAL ITALIC THETA SYMBOL", "MATHEMATICAL ITALIC KAPPA SYMBOL", "MATHEMATICAL ITALIC PHI SYMBOL", "MATHEMATICAL ITALIC RHO SYMBOL", "MATHEMATICAL ITALIC PI SYMBOL", "MATHEMATICAL BOLD ITALIC CAPITAL ALPHA", "MATHEMATICAL BOLD ITALIC CAPITAL BETA", "MATHEMATICAL BOLD ITALIC CAPITAL GAMMA", "MATHEMATICAL BOLD ITALIC CAPITAL DELTA", "MATHEMATICAL BOLD ITALIC CAPITAL EPSILON", "MATHEMATICAL BOLD ITALIC CAPITAL ZETA", "MATHEMATICAL BOLD ITALIC CAPITAL ETA", "MATHEMATICAL BOLD ITALIC CAPITAL THETA", "MATHEMATICAL BOLD ITALIC CAPITAL IOTA", "MATHEMATICAL BOLD ITALIC CAPITAL KAPPA", "MATHEMATICAL BOLD ITALIC CAPITAL LAMDA", "MATHEMATICAL BOLD ITALIC CAPITAL MU", "MATHEMATICAL BOLD ITALIC CAPITAL NU", "MATHEMATICAL BOLD ITALIC CAPITAL XI", "MATHEMATICAL BOLD ITALIC CAPITAL OMICRON", "MATHEMATICAL BOLD ITALIC CAPITAL PI", "MATHEMATICAL BOLD ITALIC CAPITAL RHO", "MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL", "MATHEMATICAL BOLD ITALIC CAPITAL SIGMA", "MATHEMATICAL BOLD ITALIC CAPITAL TAU", "MATHEMATICAL BOLD ITALIC CAPITAL UPSILON", "MATHEMATICAL BOLD ITALIC CAPITAL PHI", "MATHEMATICAL BOLD ITALIC CAPITAL CHI", "MATHEMATICAL BOLD ITALIC CAPITAL PSI", "MATHEMATICAL BOLD ITALIC CAPITAL OMEGA", "MATHEMATICAL BOLD ITALIC NABLA", "MATHEMATICAL BOLD ITALIC SMALL ALPHA", "MATHEMATICAL BOLD ITALIC SMALL BETA", "MATHEMATICAL BOLD ITALIC SMALL GAMMA", "MATHEMATICAL BOLD ITALIC SMALL DELTA", "MATHEMATICAL BOLD ITALIC SMALL EPSILON", "MATHEMATICAL BOLD ITALIC SMALL ZETA", "MATHEMATICAL BOLD ITALIC SMALL ETA", "MATHEMATICAL BOLD ITALIC SMALL THETA", "MATHEMATICAL BOLD ITALIC SMALL IOTA", "MATHEMATICAL BOLD ITALIC SMALL KAPPA", "MATHEMATICAL BOLD ITALIC SMALL LAMDA", "MATHEMATICAL BOLD ITALIC SMALL MU", "MATHEMATICAL BOLD ITALIC SMALL NU", "MATHEMATICAL BOLD ITALIC SMALL XI", "MATHEMATICAL BOLD ITALIC SMALL OMICRON", "MATHEMATICAL BOLD ITALIC SMALL PI", "MATHEMATICAL BOLD ITALIC SMALL RHO", "MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA", "MATHEMATICAL BOLD ITALIC SMALL SIGMA", "MATHEMATICAL BOLD ITALIC SMALL TAU", "MATHEMATICAL BOLD ITALIC SMALL UPSILON", "MATHEMATICAL BOLD ITALIC SMALL PHI", "MATHEMATICAL BOLD ITALIC SMALL CHI", "MATHEMATICAL BOLD ITALIC SMALL PSI", "MATHEMATICAL BOLD ITALIC SMALL OMEGA", "MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL", "MATHEMATICAL BOLD ITALIC EPSILON SYMBOL", "MATHEMATICAL BOLD ITALIC THETA SYMBOL", "MATHEMATICAL BOLD ITALIC KAPPA SYMBOL", "MATHEMATICAL BOLD ITALIC PHI SYMBOL", "MATHEMATICAL BOLD ITALIC RHO SYMBOL", "MATHEMATICAL BOLD ITALIC PI SYMBOL", "MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON", "MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL MU", "MATHEMATICAL SANS-SERIF BOLD CAPITAL NU", "MATHEMATICAL SANS-SERIF BOLD CAPITAL XI", "MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON", "MATHEMATICAL SANS-SERIF BOLD CAPITAL PI", "MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO", "MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA", "MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU", "MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON", "MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI", "MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI", "MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI", "MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA", "MATHEMATICAL SANS-SERIF BOLD NABLA", "MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA", "MATHEMATICAL SANS-SERIF BOLD SMALL BETA", "MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA", "MATHEMATICAL SANS-SERIF BOLD SMALL DELTA", "MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON", "MATHEMATICAL SANS-SERIF BOLD SMALL ZETA", "MATHEMATICAL SANS-SERIF BOLD SMALL ETA", "MATHEMATICAL SANS-SERIF BOLD SMALL THETA", "MATHEMATICAL SANS-SERIF BOLD SMALL IOTA", "MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA", "MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA", "MATHEMATICAL SANS-SERIF BOLD SMALL MU", "MATHEMATICAL SANS-SERIF BOLD SMALL NU", "MATHEMATICAL SANS-SERIF BOLD SMALL XI", "MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON", "MATHEMATICAL SANS-SERIF BOLD SMALL PI", "MATHEMATICAL SANS-SERIF BOLD SMALL RHO", "MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA", "MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA", "MATHEMATICAL SANS-SERIF BOLD SMALL TAU", "MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON", "MATHEMATICAL SANS-SERIF BOLD SMALL PHI", "MATHEMATICAL SANS-SERIF BOLD SMALL CHI", "MATHEMATICAL SANS-SERIF BOLD SMALL PSI", "MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA", "MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL", "MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL", "MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL", "MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL", "MATHEMATICAL SANS-SERIF BOLD PI SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI", "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA", "MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI", "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA", "MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL", "MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL", "MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL", "MATHEMATICAL BOLD CAPITAL DIGAMMA", "MATHEMATICAL BOLD SMALL DIGAMMA", "MATHEMATICAL BOLD DIGIT ZERO", "MATHEMATICAL BOLD DIGIT ONE", "MATHEMATICAL BOLD DIGIT TWO", "MATHEMATICAL BOLD DIGIT THREE", "MATHEMATICAL BOLD DIGIT FOUR", "MATHEMATICAL BOLD DIGIT FIVE", "MATHEMATICAL BOLD DIGIT SIX", "MATHEMATICAL BOLD DIGIT SEVEN", "MATHEMATICAL BOLD DIGIT EIGHT", "MATHEMATICAL BOLD DIGIT NINE", "MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO", "MATHEMATICAL DOUBLE-STRUCK DIGIT ONE", "MATHEMATICAL DOUBLE-STRUCK DIGIT TWO", "MATHEMATICAL DOUBLE-STRUCK DIGIT THREE", "MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR", "MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE", "MATHEMATICAL DOUBLE-STRUCK DIGIT SIX", "MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN", "MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT", "MATHEMATICAL DOUBLE-STRUCK DIGIT NINE", "MATHEMATICAL SANS-SERIF DIGIT ZERO", "MATHEMATICAL SANS-SERIF DIGIT ONE", "MATHEMATICAL SANS-SERIF DIGIT TWO", "MATHEMATICAL SANS-SERIF DIGIT THREE", "MATHEMATICAL SANS-SERIF DIGIT FOUR", "MATHEMATICAL SANS-SERIF DIGIT FIVE", "MATHEMATICAL SANS-SERIF DIGIT SIX", "MATHEMATICAL SANS-SERIF DIGIT SEVEN", "MATHEMATICAL SANS-SERIF DIGIT EIGHT", "MATHEMATICAL SANS-SERIF DIGIT NINE", "MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO", "MATHEMATICAL SANS-SERIF BOLD DIGIT ONE", "MATHEMATICAL SANS-SERIF BOLD DIGIT TWO", "MATHEMATICAL SANS-SERIF BOLD DIGIT THREE", "MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR", "MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE", "MATHEMATICAL SANS-SERIF BOLD DIGIT SIX", "MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN", "MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT", "MATHEMATICAL SANS-SERIF BOLD DIGIT NINE", "MATHEMATICAL MONOSPACE DIGIT ZERO", "MATHEMATICAL MONOSPACE DIGIT ONE", "MATHEMATICAL MONOSPACE DIGIT TWO", "MATHEMATICAL MONOSPACE DIGIT THREE", "MATHEMATICAL MONOSPACE DIGIT FOUR", "MATHEMATICAL MONOSPACE DIGIT FIVE", "MATHEMATICAL MONOSPACE DIGIT SIX", "MATHEMATICAL MONOSPACE DIGIT SEVEN", "MATHEMATICAL MONOSPACE DIGIT EIGHT", "MATHEMATICAL MONOSPACE DIGIT NINE", "SIGNWRITING HAND-FIST INDEX", "SIGNWRITING HAND-CIRCLE INDEX", "SIGNWRITING HAND-CUP INDEX", "SIGNWRITING HAND-OVAL INDEX", "SIGNWRITING HAND-HINGE INDEX", "SIGNWRITING HAND-ANGLE INDEX", "SIGNWRITING HAND-FIST INDEX BENT", "SIGNWRITING HAND-CIRCLE INDEX BENT", "SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT", "SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE", "SIGNWRITING HAND-FIST INDEX CUPPED", "SIGNWRITING HAND-FIST INDEX HINGED", "SIGNWRITING HAND-FIST INDEX HINGED LOW", "SIGNWRITING HAND-CIRCLE INDEX HINGE", "SIGNWRITING HAND-FIST INDEX MIDDLE", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE", "SIGNWRITING HAND-FIST INDEX MIDDLE BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES", "SIGNWRITING HAND-FIST INDEX MIDDLE HINGED", "SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED", "SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED", "SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED", "SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX", "SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB", "SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE", "SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE", "SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED", "SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE", "SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED", "SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT", "SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP", "SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE", "SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD", "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD", "SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP", "SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP", "SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP", "SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED", "SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP", "SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP", "SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT", "SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED", "SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP", "SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED", "SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP", "SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED", "SIGNWRITING HAND-FLAT FOUR FINGERS", "SIGNWRITING HAND-FLAT FOUR FINGERS BENT", "SIGNWRITING HAND-FLAT FOUR FINGERS HINGED", "SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED", "SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT", "SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED", "SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT", "SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD", "SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT", "SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT", "SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD", "SIGNWRITING HAND-CUP FIVE FINGERS SPREAD", "SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN", "SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN", "SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE", "SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB", "SIGNWRITING HAND-FLAT", "SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS", "SIGNWRITING HAND-FLAT HEEL", "SIGNWRITING HAND-FLAT THUMB SIDE", "SIGNWRITING HAND-FLAT HEEL THUMB SIDE", "SIGNWRITING HAND-FLAT THUMB BENT", "SIGNWRITING HAND-FLAT THUMB FORWARD", "SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE", "SIGNWRITING HAND-FLAT SPLIT CENTRE", "SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE", "SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT", "SIGNWRITING HAND-FLAT SPLIT LITTLE", "SIGNWRITING HAND-CLAW", "SIGNWRITING HAND-CLAW THUMB SIDE", "SIGNWRITING HAND-CLAW NO THUMB", "SIGNWRITING HAND-CLAW THUMB FORWARD", "SIGNWRITING HAND-HOOK CURLICUE", "SIGNWRITING HAND-HOOK", "SIGNWRITING HAND-CUP OPEN", "SIGNWRITING HAND-CUP", "SIGNWRITING HAND-CUP OPEN THUMB SIDE", "SIGNWRITING HAND-CUP THUMB SIDE", "SIGNWRITING HAND-CUP OPEN NO THUMB", "SIGNWRITING HAND-CUP NO THUMB", "SIGNWRITING HAND-CUP OPEN THUMB FORWARD", "SIGNWRITING HAND-CUP THUMB FORWARD", "SIGNWRITING HAND-CURLICUE OPEN", "SIGNWRITING HAND-CURLICUE", "SIGNWRITING HAND-CIRCLE", "SIGNWRITING HAND-OVAL", "SIGNWRITING HAND-OVAL THUMB SIDE", "SIGNWRITING HAND-OVAL NO THUMB", "SIGNWRITING HAND-OVAL THUMB FORWARD", "SIGNWRITING HAND-HINGE OPEN", "SIGNWRITING HAND-HINGE OPEN THUMB FORWARD", "SIGNWRITING HAND-HINGE", "SIGNWRITING HAND-HINGE SMALL", "SIGNWRITING HAND-HINGE OPEN THUMB SIDE", "SIGNWRITING HAND-HINGE THUMB SIDE", "SIGNWRITING HAND-HINGE OPEN NO THUMB", "SIGNWRITING HAND-HINGE NO THUMB", "SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX", "SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING", "SIGNWRITING HAND-ANGLE", "SIGNWRITING HAND-FIST INDEX MIDDLE RING", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING", "SIGNWRITING HAND-HINGE INDEX MIDDLE RING", "SIGNWRITING HAND-ANGLE INDEX MIDDLE RING", "SIGNWRITING HAND-HINGE LITTLE", "SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT", "SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED", "SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED", "SIGNWRITING HAND-FIST LITTLE DOWN", "SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT", "SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED", "SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED", "SIGNWRITING HAND-FIST LITTLE UP", "SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP", "SIGNWRITING HAND-CIRCLE LITTLE UP", "SIGNWRITING HAND-OVAL LITTLE UP", "SIGNWRITING HAND-ANGLE LITTLE UP", "SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE", "SIGNWRITING HAND-FIST LITTLE BENT", "SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB", "SIGNWRITING HAND-FIST LITTLE THUMB", "SIGNWRITING HAND-HINGE LITTLE THUMB", "SIGNWRITING HAND-FIST LITTLE INDEX THUMB", "SIGNWRITING HAND-HINGE LITTLE INDEX THUMB", "SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT", "SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB", "SIGNWRITING HAND-FIST LITTLE INDEX", "SIGNWRITING HAND-CIRCLE LITTLE INDEX", "SIGNWRITING HAND-HINGE LITTLE INDEX", "SIGNWRITING HAND-ANGLE LITTLE INDEX", "SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE", "SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE", "SIGNWRITING HAND-HINGE RING", "SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE", "SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE", "SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE", "SIGNWRITING HAND-FIST RING DOWN", "SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE", "SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS", "SIGNWRITING HAND-FIST RING UP", "SIGNWRITING HAND-FIST RING RAISED KNUCKLE", "SIGNWRITING HAND-FIST RING LITTLE", "SIGNWRITING HAND-CIRCLE RING LITTLE", "SIGNWRITING HAND-OVAL RING LITTLE", "SIGNWRITING HAND-ANGLE RING LITTLE", "SIGNWRITING HAND-FIST RING MIDDLE", "SIGNWRITING HAND-FIST RING MIDDLE CONJOINED", "SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES", "SIGNWRITING HAND-FIST RING INDEX", "SIGNWRITING HAND-FIST RING THUMB", "SIGNWRITING HAND-HOOK RING THUMB", "SIGNWRITING HAND-FIST INDEX RING LITTLE", "SIGNWRITING HAND-CIRCLE INDEX RING LITTLE", "SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON", "SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT", "SIGNWRITING HAND-HOOK INDEX RING LITTLE IN", "SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER", "SIGNWRITING HAND-CUP INDEX RING LITTLE", "SIGNWRITING HAND-HINGE INDEX RING LITTLE", "SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT", "SIGNWRITING HAND-ANGLE INDEX RING LITTLE", "SIGNWRITING HAND-FIST MIDDLE DOWN", "SIGNWRITING HAND-HINGE MIDDLE", "SIGNWRITING HAND-FIST MIDDLE UP", "SIGNWRITING HAND-CIRCLE MIDDLE UP", "SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE", "SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE", "SIGNWRITING HAND-HOOK MIDDLE THUMB", "SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE", "SIGNWRITING HAND-FIST MIDDLE LITTLE", "SIGNWRITING HAND-FIST MIDDLE RING LITTLE", "SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE", "SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON", "SIGNWRITING HAND-CUP MIDDLE RING LITTLE", "SIGNWRITING HAND-HINGE MIDDLE RING LITTLE", "SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT", "SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN", "SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE", "SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT", "SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED", "SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE", "SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT", "SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN", "SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED", "SIGNWRITING HAND-HINGE INDEX HINGED", "SIGNWRITING HAND-FIST INDEX THUMB SIDE", "SIGNWRITING HAND-HINGE INDEX THUMB SIDE", "SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL", "SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED", "SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT", "SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT", "SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT", "SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE", "SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT", "SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT", "SIGNWRITING HAND-FIST INDEX THUMB HOOK", "SIGNWRITING HAND-FIST INDEX THUMB CURLICUE", "SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE", "SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE", "SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER", "SIGNWRITING HAND-FIST INDEX THUMB CIRCLE", "SIGNWRITING HAND-CUP INDEX THUMB", "SIGNWRITING HAND-CUP INDEX THUMB OPEN", "SIGNWRITING HAND-HINGE INDEX THUMB OPEN", "SIGNWRITING HAND-HINGE INDEX THUMB LARGE", "SIGNWRITING HAND-HINGE INDEX THUMB", "SIGNWRITING HAND-HINGE INDEX THUMB SMALL", "SIGNWRITING HAND-ANGLE INDEX THUMB OUT", "SIGNWRITING HAND-ANGLE INDEX THUMB IN", "SIGNWRITING HAND-ANGLE INDEX THUMB", "SIGNWRITING HAND-FIST THUMB", "SIGNWRITING HAND-FIST THUMB HEEL", "SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL", "SIGNWRITING HAND-FIST THUMB SIDE CONJOINED", "SIGNWRITING HAND-FIST THUMB SIDE BENT", "SIGNWRITING HAND-FIST THUMB FORWARD", "SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE", "SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING", "SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE", "SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS", "SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS", "SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS", "SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS", "SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES", "SIGNWRITING HAND-FIST", "SIGNWRITING HAND-FIST HEEL", "SIGNWRITING TOUCH SINGLE", "SIGNWRITING TOUCH MULTIPLE", "SIGNWRITING TOUCH BETWEEN", "SIGNWRITING GRASP SINGLE", "SIGNWRITING GRASP MULTIPLE", "SIGNWRITING GRASP BETWEEN", "SIGNWRITING STRIKE SINGLE", "SIGNWRITING STRIKE MULTIPLE", "SIGNWRITING STRIKE BETWEEN", "SIGNWRITING BRUSH SINGLE", "SIGNWRITING BRUSH MULTIPLE", "SIGNWRITING BRUSH BETWEEN", "SIGNWRITING RUB SINGLE", "SIGNWRITING RUB MULTIPLE", "SIGNWRITING RUB BETWEEN", "SIGNWRITING SURFACE SYMBOLS", "SIGNWRITING SURFACE BETWEEN", "SIGNWRITING SQUEEZE LARGE SINGLE", "SIGNWRITING SQUEEZE SMALL SINGLE", "SIGNWRITING SQUEEZE LARGE MULTIPLE", "SIGNWRITING SQUEEZE SMALL MULTIPLE", "SIGNWRITING SQUEEZE SEQUENTIAL", "SIGNWRITING FLICK LARGE SINGLE", "SIGNWRITING FLICK SMALL SINGLE", "SIGNWRITING FLICK LARGE MULTIPLE", "SIGNWRITING FLICK SMALL MULTIPLE", "SIGNWRITING FLICK SEQUENTIAL", "SIGNWRITING SQUEEZE FLICK ALTERNATING", "SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE", "SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL", "SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL", "SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL", "SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE", "SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL", "SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS", "SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT", "SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT", "SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL", "SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE", "SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST", "SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX", "SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT", "SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX", "SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING", "SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX", "SIGNWRITING MOVEMENT-WALLPLANE CROSS", "SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT", "SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX", "SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING", "SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX", "SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL", "SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE", "SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE", "SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION", "SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE", "SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL", "SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE", "SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL", "SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE", "SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL", "SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE", "SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING", "SIGNWRITING TRAVEL-WALLPLANE SHAKING", "SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE", "SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE", "SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE", "SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL", "SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM", "SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE", "SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST", "SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL", "SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM", "SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE", "SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE", "SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST", "SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST", "SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX", "SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT", "SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX", "SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING", "SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX", "SIGNWRITING MOVEMENT-FLOORPLANE CROSS", "SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT", "SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX", "SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT", "SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX", "SIGNWRITING MOVEMENT-FLOORPLANE BEND", "SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE CHECK", "SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE", "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING", "SIGNWRITING TRAVEL-FLOORPLANE SHAKING", "SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE", "SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST", "SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL", "SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE", "SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL", "SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE", "SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE", "SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT", "SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL", "SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM", "SIGNWRITING ROTATION-WALLPLANE SINGLE", "SIGNWRITING ROTATION-WALLPLANE DOUBLE", "SIGNWRITING ROTATION-WALLPLANE ALTERNATE", "SIGNWRITING MOVEMENT-WALLPLANE SHAKING", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL", "SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL", "SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL", "SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL", "SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL", "SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL", "SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL", "SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST", "SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST", "SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST", "SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST", "SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST", "SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST", "SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST", "SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL", "SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM", "SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE", "SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING", "SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING", "SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE", "SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR", "SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR", "SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST", "SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED", "SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL", "SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE", "SIGNWRITING ROTATION-FLOORPLANE SINGLE", "SIGNWRITING ROTATION-FLOORPLANE DOUBLE", "SIGNWRITING ROTATION-FLOORPLANE ALTERNATING", "SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL", "SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE", "SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE", "SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE", "SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE", "SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE", "SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE", "SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE", "SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE", "SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE", "SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE", "SIGNWRITING DYNAMIC ARROWHEAD SMALL", "SIGNWRITING DYNAMIC ARROWHEAD LARGE", "SIGNWRITING DYNAMIC FAST", "SIGNWRITING DYNAMIC SLOW", "SIGNWRITING DYNAMIC TENSE", "SIGNWRITING DYNAMIC RELAXED", "SIGNWRITING DYNAMIC SIMULTANEOUS", "SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING", "SIGNWRITING DYNAMIC EVERY OTHER TIME", "SIGNWRITING DYNAMIC GRADUAL", "SIGNWRITING HEAD", "SIGNWRITING HEAD RIM", "SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT", "SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT", "SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT", "SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE", "SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE", "SIGNWRITING HEAD MOVEMENT CIRCLE", "SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING", "SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN", "SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING", "SIGNWRITING EYEBROWS STRAIGHT UP", "SIGNWRITING EYEBROWS STRAIGHT NEUTRAL", "SIGNWRITING EYEBROWS STRAIGHT DOWN", "SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN", "SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL", "SIGNWRITING DREAMY EYEBROWS UP NEUTRAL", "SIGNWRITING DREAMY EYEBROWS NEUTRAL UP", "SIGNWRITING FOREHEAD NEUTRAL", "SIGNWRITING FOREHEAD CONTACT", "SIGNWRITING FOREHEAD WRINKLED", "SIGNWRITING EYES OPEN", "SIGNWRITING EYES SQUEEZED", "SIGNWRITING EYES CLOSED", "SIGNWRITING EYE BLINK SINGLE", "SIGNWRITING EYE BLINK MULTIPLE", "SIGNWRITING EYES HALF OPEN", "SIGNWRITING EYES WIDE OPEN", "SIGNWRITING EYES HALF CLOSED", "SIGNWRITING EYES WIDENING MOVEMENT", "SIGNWRITING EYE WINK", "SIGNWRITING EYELASHES UP", "SIGNWRITING EYELASHES DOWN", "SIGNWRITING EYELASHES FLUTTERING", "SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT", "SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE", "SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING", "SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT", "SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE", "SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING", "SIGNWRITING EYEGAZE-WALLPLANE CURVED", "SIGNWRITING EYEGAZE-FLOORPLANE CURVED", "SIGNWRITING EYEGAZE-WALLPLANE CIRCLING", "SIGNWRITING CHEEKS PUFFED", "SIGNWRITING CHEEKS NEUTRAL", "SIGNWRITING CHEEKS SUCKED", "SIGNWRITING TENSE CHEEKS HIGH", "SIGNWRITING TENSE CHEEKS MIDDLE", "SIGNWRITING TENSE CHEEKS LOW", "SIGNWRITING EARS", "SIGNWRITING NOSE NEUTRAL", "SIGNWRITING NOSE CONTACT", "SIGNWRITING NOSE WRINKLES", "SIGNWRITING NOSE WIGGLES", "SIGNWRITING AIR BLOWING OUT", "SIGNWRITING AIR SUCKING IN", "SIGNWRITING AIR BLOW SMALL ROTATIONS", "SIGNWRITING AIR SUCK SMALL ROTATIONS", "SIGNWRITING BREATH INHALE", "SIGNWRITING BREATH EXHALE", "SIGNWRITING MOUTH CLOSED NEUTRAL", "SIGNWRITING MOUTH CLOSED FORWARD", "SIGNWRITING MOUTH CLOSED CONTACT", "SIGNWRITING MOUTH SMILE", "SIGNWRITING MOUTH SMILE WRINKLED", "SIGNWRITING MOUTH SMILE OPEN", "SIGNWRITING MOUTH FROWN", "SIGNWRITING MOUTH FROWN WRINKLED", "SIGNWRITING MOUTH FROWN OPEN", "SIGNWRITING MOUTH OPEN CIRCLE", "SIGNWRITING MOUTH OPEN FORWARD", "SIGNWRITING MOUTH OPEN WRINKLED", "SIGNWRITING MOUTH OPEN OVAL", "SIGNWRITING MOUTH OPEN OVAL WRINKLED", "SIGNWRITING MOUTH OPEN OVAL YAWN", "SIGNWRITING MOUTH OPEN RECTANGLE", "SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED", "SIGNWRITING MOUTH OPEN RECTANGLE YAWN", "SIGNWRITING MOUTH KISS", "SIGNWRITING MOUTH KISS FORWARD", "SIGNWRITING MOUTH KISS WRINKLED", "SIGNWRITING MOUTH TENSE", "SIGNWRITING MOUTH TENSE FORWARD", "SIGNWRITING MOUTH TENSE SUCKED", "SIGNWRITING LIPS PRESSED TOGETHER", "SIGNWRITING LIP LOWER OVER UPPER", "SIGNWRITING LIP UPPER OVER LOWER", "SIGNWRITING MOUTH CORNERS", "SIGNWRITING MOUTH WRINKLES SINGLE", "SIGNWRITING MOUTH WRINKLES DOUBLE", "SIGNWRITING TONGUE STICKING OUT FAR", "SIGNWRITING TONGUE LICKING LIPS", "SIGNWRITING TONGUE TIP BETWEEN LIPS", "SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH", "SIGNWRITING TONGUE INSIDE MOUTH RELAXED", "SIGNWRITING TONGUE MOVES AGAINST CHEEK", "SIGNWRITING TONGUE CENTRE STICKING OUT", "SIGNWRITING TONGUE CENTRE INSIDE MOUTH", "SIGNWRITING TEETH", "SIGNWRITING TEETH MOVEMENT", "SIGNWRITING TEETH ON TONGUE", "SIGNWRITING TEETH ON TONGUE MOVEMENT", "SIGNWRITING TEETH ON LIPS", "SIGNWRITING TEETH ON LIPS MOVEMENT", "SIGNWRITING TEETH BITE LIPS", "SIGNWRITING MOVEMENT-WALLPLANE JAW", "SIGNWRITING MOVEMENT-FLOORPLANE JAW", "SIGNWRITING NECK", "SIGNWRITING HAIR", "SIGNWRITING EXCITEMENT", "SIGNWRITING SHOULDER HIP SPINE", "SIGNWRITING SHOULDER HIP POSITIONS", "SIGNWRITING WALLPLANE SHOULDER HIP MOVE", "SIGNWRITING FLOORPLANE SHOULDER HIP MOVE", "SIGNWRITING SHOULDER TILTING FROM WAIST", "SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH", "SIGNWRITING TORSO-WALLPLANE CURVED BEND", "SIGNWRITING TORSO-FLOORPLANE TWISTING", "SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS", "SIGNWRITING LIMB COMBINATION", "SIGNWRITING LIMB LENGTH-1", "SIGNWRITING LIMB LENGTH-2", "SIGNWRITING LIMB LENGTH-3", "SIGNWRITING LIMB LENGTH-4", "SIGNWRITING LIMB LENGTH-5", "SIGNWRITING LIMB LENGTH-6", "SIGNWRITING LIMB LENGTH-7", "SIGNWRITING FINGER", "SIGNWRITING LOCATION-WALLPLANE SPACE", "SIGNWRITING LOCATION-FLOORPLANE SPACE", "SIGNWRITING LOCATION HEIGHT", "SIGNWRITING LOCATION WIDTH", "SIGNWRITING LOCATION DEPTH", "SIGNWRITING LOCATION HEAD NECK", "SIGNWRITING LOCATION TORSO", "SIGNWRITING LOCATION LIMBS DIGITS", "SIGNWRITING COMMA", "SIGNWRITING FULL STOP", "SIGNWRITING SEMICOLON", "SIGNWRITING COLON", "SIGNWRITING PARENTHESIS", "SIGNWRITING FILL MODIFIER-2", "SIGNWRITING FILL MODIFIER-3", "SIGNWRITING FILL MODIFIER-4", "SIGNWRITING FILL MODIFIER-5", "SIGNWRITING FILL MODIFIER-6", "SIGNWRITING ROTATION MODIFIER-2", "SIGNWRITING ROTATION MODIFIER-3", "SIGNWRITING ROTATION MODIFIER-4", "SIGNWRITING ROTATION MODIFIER-5", "SIGNWRITING ROTATION MODIFIER-6", "SIGNWRITING ROTATION MODIFIER-7", "SIGNWRITING ROTATION MODIFIER-8", "SIGNWRITING ROTATION MODIFIER-9", "SIGNWRITING ROTATION MODIFIER-10", "SIGNWRITING ROTATION MODIFIER-11", "SIGNWRITING ROTATION MODIFIER-12", "SIGNWRITING ROTATION MODIFIER-13", "SIGNWRITING ROTATION MODIFIER-14", "SIGNWRITING ROTATION MODIFIER-15", "SIGNWRITING ROTATION MODIFIER-16", "COMBINING GLAGOLITIC LETTER AZU", "COMBINING GLAGOLITIC LETTER BUKY", "COMBINING GLAGOLITIC LETTER VEDE", "COMBINING GLAGOLITIC LETTER GLAGOLI", "COMBINING GLAGOLITIC LETTER DOBRO", "COMBINING GLAGOLITIC LETTER YESTU", "COMBINING GLAGOLITIC LETTER ZHIVETE", "COMBINING GLAGOLITIC LETTER ZEMLJA", "COMBINING GLAGOLITIC LETTER IZHE", "COMBINING GLAGOLITIC LETTER INITIAL IZHE", "COMBINING GLAGOLITIC LETTER I", "COMBINING GLAGOLITIC LETTER DJERVI", "COMBINING GLAGOLITIC LETTER KAKO", "COMBINING GLAGOLITIC LETTER LJUDIJE", "COMBINING GLAGOLITIC LETTER MYSLITE", "COMBINING GLAGOLITIC LETTER NASHI", "COMBINING GLAGOLITIC LETTER ONU", "COMBINING GLAGOLITIC LETTER POKOJI", "COMBINING GLAGOLITIC LETTER RITSI", "COMBINING GLAGOLITIC LETTER SLOVO", "COMBINING GLAGOLITIC LETTER TVRIDO", "COMBINING GLAGOLITIC LETTER UKU", "COMBINING GLAGOLITIC LETTER FRITU", "COMBINING GLAGOLITIC LETTER HERU", "COMBINING GLAGOLITIC LETTER SHTA", "COMBINING GLAGOLITIC LETTER TSI", "COMBINING GLAGOLITIC LETTER CHRIVI", "COMBINING GLAGOLITIC LETTER SHA", "COMBINING GLAGOLITIC LETTER YERU", "COMBINING GLAGOLITIC LETTER YERI", "COMBINING GLAGOLITIC LETTER YATI", "COMBINING GLAGOLITIC LETTER YU", "COMBINING GLAGOLITIC LETTER SMALL YUS", "COMBINING GLAGOLITIC LETTER YO", "COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS", "COMBINING GLAGOLITIC LETTER BIG YUS", "COMBINING GLAGOLITIC LETTER IOTATED BIG YUS", "COMBINING GLAGOLITIC LETTER FITA", "NYIAKENG PUACHUE HMONG LETTER MA", "NYIAKENG PUACHUE HMONG LETTER TSA", "NYIAKENG PUACHUE HMONG LETTER NTA", "NYIAKENG PUACHUE HMONG LETTER TA", "NYIAKENG PUACHUE HMONG LETTER HA", "NYIAKENG PUACHUE HMONG LETTER NA", "NYIAKENG PUACHUE HMONG LETTER XA", "NYIAKENG PUACHUE HMONG LETTER NKA", "NYIAKENG PUACHUE HMONG LETTER CA", "NYIAKENG PUACHUE HMONG LETTER LA", "NYIAKENG PUACHUE HMONG LETTER SA", "NYIAKENG PUACHUE HMONG LETTER ZA", "NYIAKENG PUACHUE HMONG LETTER NCA", "NYIAKENG PUACHUE HMONG LETTER NTSA", "NYIAKENG PUACHUE HMONG LETTER KA", "NYIAKENG PUACHUE HMONG LETTER DA", "NYIAKENG PUACHUE HMONG LETTER NYA", "NYIAKENG PUACHUE HMONG LETTER NRA", "NYIAKENG PUACHUE HMONG LETTER VA", "NYIAKENG PUACHUE HMONG LETTER NTXA", "NYIAKENG PUACHUE HMONG LETTER TXA", "NYIAKENG PUACHUE HMONG LETTER FA", "NYIAKENG PUACHUE HMONG LETTER RA", "NYIAKENG PUACHUE HMONG LETTER QA", "NYIAKENG PUACHUE HMONG LETTER YA", "NYIAKENG PUACHUE HMONG LETTER NQA", "NYIAKENG PUACHUE HMONG LETTER PA", "NYIAKENG PUACHUE HMONG LETTER XYA", "NYIAKENG PUACHUE HMONG LETTER NPA", "NYIAKENG PUACHUE HMONG LETTER DLA", "NYIAKENG PUACHUE HMONG LETTER NPLA", "NYIAKENG PUACHUE HMONG LETTER HAH", "NYIAKENG PUACHUE HMONG LETTER MLA", "NYIAKENG PUACHUE HMONG LETTER PLA", "NYIAKENG PUACHUE HMONG LETTER GA", "NYIAKENG PUACHUE HMONG LETTER RRA", "NYIAKENG PUACHUE HMONG LETTER A", "NYIAKENG PUACHUE HMONG LETTER AA", "NYIAKENG PUACHUE HMONG LETTER I", "NYIAKENG PUACHUE HMONG LETTER U", "NYIAKENG PUACHUE HMONG LETTER O", "NYIAKENG PUACHUE HMONG LETTER OO", "NYIAKENG PUACHUE HMONG LETTER E", "NYIAKENG PUACHUE HMONG LETTER EE", "NYIAKENG PUACHUE HMONG LETTER W", "NYIAKENG PUACHUE HMONG TONE-B", "NYIAKENG PUACHUE HMONG TONE-M", "NYIAKENG PUACHUE HMONG TONE-J", "NYIAKENG PUACHUE HMONG TONE-V", "NYIAKENG PUACHUE HMONG TONE-S", "NYIAKENG PUACHUE HMONG TONE-G", "NYIAKENG PUACHUE HMONG TONE-D", "NYIAKENG PUACHUE HMONG SIGN FOR PERSON", "NYIAKENG PUACHUE HMONG SIGN FOR THING", "NYIAKENG PUACHUE HMONG SIGN FOR LOCATION", "NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL", "NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE", "NYIAKENG PUACHUE HMONG SIGN XW XW", "NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER", "NYIAKENG PUACHUE HMONG DIGIT ZERO", "NYIAKENG PUACHUE HMONG DIGIT ONE", "NYIAKENG PUACHUE HMONG DIGIT TWO", "NYIAKENG PUACHUE HMONG DIGIT THREE", "NYIAKENG PUACHUE HMONG DIGIT FOUR", "NYIAKENG PUACHUE HMONG DIGIT FIVE", "NYIAKENG PUACHUE HMONG DIGIT SIX", "NYIAKENG PUACHUE HMONG DIGIT SEVEN", "NYIAKENG PUACHUE HMONG DIGIT EIGHT", "NYIAKENG PUACHUE HMONG DIGIT NINE", "NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ", "NYIAKENG PUACHUE HMONG CIRCLED CA", "WANCHO LETTER AA", "WANCHO LETTER A", "WANCHO LETTER BA", "WANCHO LETTER CA", "WANCHO LETTER DA", "WANCHO LETTER GA", "WANCHO LETTER YA", "WANCHO LETTER PHA", "WANCHO LETTER LA", "WANCHO LETTER NA", "WANCHO LETTER PA", "WANCHO LETTER TA", "WANCHO LETTER THA", "WANCHO LETTER FA", "WANCHO LETTER SA", "WANCHO LETTER SHA", "WANCHO LETTER JA", "WANCHO LETTER ZA", "WANCHO LETTER WA", "WANCHO LETTER VA", "WANCHO LETTER KA", "WANCHO LETTER O", "WANCHO LETTER AU", "WANCHO LETTER RA", "WANCHO LETTER MA", "WANCHO LETTER KHA", "WANCHO LETTER HA", "WANCHO LETTER E", "WANCHO LETTER I", "WANCHO LETTER NGA", "WANCHO LETTER U", "WANCHO LETTER LLHA", "WANCHO LETTER TSA", "WANCHO LETTER TRA", "WANCHO LETTER ONG", "WANCHO LETTER AANG", "WANCHO LETTER ANG", "WANCHO LETTER ING", "WANCHO LETTER ON", "WANCHO LETTER EN", "WANCHO LETTER AAN", "WANCHO LETTER NYA", "WANCHO LETTER UEN", "WANCHO LETTER YIH", "WANCHO TONE TUP", "WANCHO TONE TUPNI", "WANCHO TONE KOI", "WANCHO TONE KOINI", "WANCHO DIGIT ZERO", "WANCHO DIGIT ONE", "WANCHO DIGIT TWO", "WANCHO DIGIT THREE", "WANCHO DIGIT FOUR", "WANCHO DIGIT FIVE", "WANCHO DIGIT SIX", "WANCHO DIGIT SEVEN", "WANCHO DIGIT EIGHT", "WANCHO DIGIT NINE", "WANCHO NGUN SIGN", "MENDE KIKAKUI SYLLABLE M001 KI", "MENDE KIKAKUI SYLLABLE M002 KA", "MENDE KIKAKUI SYLLABLE M003 KU", "MENDE KIKAKUI SYLLABLE M065 KEE", "MENDE KIKAKUI SYLLABLE M095 KE", "MENDE KIKAKUI SYLLABLE M076 KOO", "MENDE KIKAKUI SYLLABLE M048 KO", "MENDE KIKAKUI SYLLABLE M179 KUA", "MENDE KIKAKUI SYLLABLE M004 WI", "MENDE KIKAKUI SYLLABLE M005 WA", "MENDE KIKAKUI SYLLABLE M006 WU", "MENDE KIKAKUI SYLLABLE M126 WEE", "MENDE KIKAKUI SYLLABLE M118 WE", "MENDE KIKAKUI SYLLABLE M114 WOO", "MENDE KIKAKUI SYLLABLE M045 WO", "MENDE KIKAKUI SYLLABLE M194 WUI", "MENDE KIKAKUI SYLLABLE M143 WEI", "MENDE KIKAKUI SYLLABLE M061 WVI", "MENDE KIKAKUI SYLLABLE M049 WVA", "MENDE KIKAKUI SYLLABLE M139 WVE", "MENDE KIKAKUI SYLLABLE M007 MIN", "MENDE KIKAKUI SYLLABLE M008 MAN", "MENDE KIKAKUI SYLLABLE M009 MUN", "MENDE KIKAKUI SYLLABLE M059 MEN", "MENDE KIKAKUI SYLLABLE M094 MON", "MENDE KIKAKUI SYLLABLE M154 MUAN", "MENDE KIKAKUI SYLLABLE M189 MUEN", "MENDE KIKAKUI SYLLABLE M010 BI", "MENDE KIKAKUI SYLLABLE M011 BA", "MENDE KIKAKUI SYLLABLE M012 BU", "MENDE KIKAKUI SYLLABLE M150 BEE", "MENDE KIKAKUI SYLLABLE M097 BE", "MENDE KIKAKUI SYLLABLE M103 BOO", "MENDE KIKAKUI SYLLABLE M138 BO", "MENDE KIKAKUI SYLLABLE M013 I", "MENDE KIKAKUI SYLLABLE M014 A", "MENDE KIKAKUI SYLLABLE M015 U", "MENDE KIKAKUI SYLLABLE M163 EE", "MENDE KIKAKUI SYLLABLE M100 E", "MENDE KIKAKUI SYLLABLE M165 OO", "MENDE KIKAKUI SYLLABLE M147 O", "MENDE KIKAKUI SYLLABLE M137 EI", "MENDE KIKAKUI SYLLABLE M131 IN", "MENDE KIKAKUI SYLLABLE M135 IN", "MENDE KIKAKUI SYLLABLE M195 AN", "MENDE KIKAKUI SYLLABLE M178 EN", "MENDE KIKAKUI SYLLABLE M019 SI", "MENDE KIKAKUI SYLLABLE M020 SA", "MENDE KIKAKUI SYLLABLE M021 SU", "MENDE KIKAKUI SYLLABLE M162 SEE", "MENDE KIKAKUI SYLLABLE M116 SE", "MENDE KIKAKUI SYLLABLE M136 SOO", "MENDE KIKAKUI SYLLABLE M079 SO", "MENDE KIKAKUI SYLLABLE M196 SIA", "MENDE KIKAKUI SYLLABLE M025 LI", "MENDE KIKAKUI SYLLABLE M026 LA", "MENDE KIKAKUI SYLLABLE M027 LU", "MENDE KIKAKUI SYLLABLE M084 LEE", "MENDE KIKAKUI SYLLABLE M073 LE", "MENDE KIKAKUI SYLLABLE M054 LOO", "MENDE KIKAKUI SYLLABLE M153 LO", "MENDE KIKAKUI SYLLABLE M110 LONG LE", "MENDE KIKAKUI SYLLABLE M016 DI", "MENDE KIKAKUI SYLLABLE M017 DA", "MENDE KIKAKUI SYLLABLE M018 DU", "MENDE KIKAKUI SYLLABLE M089 DEE", "MENDE KIKAKUI SYLLABLE M180 DOO", "MENDE KIKAKUI SYLLABLE M181 DO", "MENDE KIKAKUI SYLLABLE M022 TI", "MENDE KIKAKUI SYLLABLE M023 TA", "MENDE KIKAKUI SYLLABLE M024 TU", "MENDE KIKAKUI SYLLABLE M091 TEE", "MENDE KIKAKUI SYLLABLE M055 TE", "MENDE KIKAKUI SYLLABLE M104 TOO", "MENDE KIKAKUI SYLLABLE M069 TO", "MENDE KIKAKUI SYLLABLE M028 JI", "MENDE KIKAKUI SYLLABLE M029 JA", "MENDE KIKAKUI SYLLABLE M030 JU", "MENDE KIKAKUI SYLLABLE M157 JEE", "MENDE KIKAKUI SYLLABLE M113 JE", "MENDE KIKAKUI SYLLABLE M160 JOO", "MENDE KIKAKUI SYLLABLE M063 JO", "MENDE KIKAKUI SYLLABLE M175 LONG JO", "MENDE KIKAKUI SYLLABLE M031 YI", "MENDE KIKAKUI SYLLABLE M032 YA", "MENDE KIKAKUI SYLLABLE M033 YU", "MENDE KIKAKUI SYLLABLE M109 YEE", "MENDE KIKAKUI SYLLABLE M080 YE", "MENDE KIKAKUI SYLLABLE M141 YOO", "MENDE KIKAKUI SYLLABLE M121 YO", "MENDE KIKAKUI SYLLABLE M034 FI", "MENDE KIKAKUI SYLLABLE M035 FA", "MENDE KIKAKUI SYLLABLE M036 FU", "MENDE KIKAKUI SYLLABLE M078 FEE", "MENDE KIKAKUI SYLLABLE M075 FE", "MENDE KIKAKUI SYLLABLE M133 FOO", "MENDE KIKAKUI SYLLABLE M088 FO", "MENDE KIKAKUI SYLLABLE M197 FUA", "MENDE KIKAKUI SYLLABLE M101 FAN", "MENDE KIKAKUI SYLLABLE M037 NIN", "MENDE KIKAKUI SYLLABLE M038 NAN", "MENDE KIKAKUI SYLLABLE M039 NUN", "MENDE KIKAKUI SYLLABLE M117 NEN", "MENDE KIKAKUI SYLLABLE M169 NON", "MENDE KIKAKUI SYLLABLE M176 HI", "MENDE KIKAKUI SYLLABLE M041 HA", "MENDE KIKAKUI SYLLABLE M186 HU", "MENDE KIKAKUI SYLLABLE M040 HEE", "MENDE KIKAKUI SYLLABLE M096 HE", "MENDE KIKAKUI SYLLABLE M042 HOO", "MENDE KIKAKUI SYLLABLE M140 HO", "MENDE KIKAKUI SYLLABLE M083 HEEI", "MENDE KIKAKUI SYLLABLE M128 HOOU", "MENDE KIKAKUI SYLLABLE M053 HIN", "MENDE KIKAKUI SYLLABLE M130 HAN", "MENDE KIKAKUI SYLLABLE M087 HUN", "MENDE KIKAKUI SYLLABLE M052 HEN", "MENDE KIKAKUI SYLLABLE M193 HON", "MENDE KIKAKUI SYLLABLE M046 HUAN", "MENDE KIKAKUI SYLLABLE M090 NGGI", "MENDE KIKAKUI SYLLABLE M043 NGGA", "MENDE KIKAKUI SYLLABLE M082 NGGU", "MENDE KIKAKUI SYLLABLE M115 NGGEE", "MENDE KIKAKUI SYLLABLE M146 NGGE", "MENDE KIKAKUI SYLLABLE M156 NGGOO", "MENDE KIKAKUI SYLLABLE M120 NGGO", "MENDE KIKAKUI SYLLABLE M159 NGGAA", "MENDE KIKAKUI SYLLABLE M127 NGGUA", "MENDE KIKAKUI SYLLABLE M086 LONG NGGE", "MENDE KIKAKUI SYLLABLE M106 LONG NGGOO", "MENDE KIKAKUI SYLLABLE M183 LONG NGGO", "MENDE KIKAKUI SYLLABLE M155 GI", "MENDE KIKAKUI SYLLABLE M111 GA", "MENDE KIKAKUI SYLLABLE M168 GU", "MENDE KIKAKUI SYLLABLE M190 GEE", "MENDE KIKAKUI SYLLABLE M166 GUEI", "MENDE KIKAKUI SYLLABLE M167 GUAN", "MENDE KIKAKUI SYLLABLE M184 NGEN", "MENDE KIKAKUI SYLLABLE M057 NGON", "MENDE KIKAKUI SYLLABLE M177 NGUAN", "MENDE KIKAKUI SYLLABLE M068 PI", "MENDE KIKAKUI SYLLABLE M099 PA", "MENDE KIKAKUI SYLLABLE M050 PU", "MENDE KIKAKUI SYLLABLE M081 PEE", "MENDE KIKAKUI SYLLABLE M051 PE", "MENDE KIKAKUI SYLLABLE M102 POO", "MENDE KIKAKUI SYLLABLE M066 PO", "MENDE KIKAKUI SYLLABLE M145 MBI", "MENDE KIKAKUI SYLLABLE M062 MBA", "MENDE KIKAKUI SYLLABLE M122 MBU", "MENDE KIKAKUI SYLLABLE M047 MBEE", "MENDE KIKAKUI SYLLABLE M188 MBEE", "MENDE KIKAKUI SYLLABLE M072 MBE", "MENDE KIKAKUI SYLLABLE M172 MBOO", "MENDE KIKAKUI SYLLABLE M174 MBO", "MENDE KIKAKUI SYLLABLE M187 MBUU", "MENDE KIKAKUI SYLLABLE M161 LONG MBE", "MENDE KIKAKUI SYLLABLE M105 LONG MBOO", "MENDE KIKAKUI SYLLABLE M142 LONG MBO", "MENDE KIKAKUI SYLLABLE M132 KPI", "MENDE KIKAKUI SYLLABLE M092 KPA", "MENDE KIKAKUI SYLLABLE M074 KPU", "MENDE KIKAKUI SYLLABLE M044 KPEE", "MENDE KIKAKUI SYLLABLE M108 KPE", "MENDE KIKAKUI SYLLABLE M112 KPOO", "MENDE KIKAKUI SYLLABLE M158 KPO", "MENDE KIKAKUI SYLLABLE M124 GBI", "MENDE KIKAKUI SYLLABLE M056 GBA", "MENDE KIKAKUI SYLLABLE M148 GBU", "MENDE KIKAKUI SYLLABLE M093 GBEE", "MENDE KIKAKUI SYLLABLE M107 GBE", "MENDE KIKAKUI SYLLABLE M071 GBOO", "MENDE KIKAKUI SYLLABLE M070 GBO", "MENDE KIKAKUI SYLLABLE M171 RA", "MENDE KIKAKUI SYLLABLE M123 NDI", "MENDE KIKAKUI SYLLABLE M129 NDA", "MENDE KIKAKUI SYLLABLE M125 NDU", "MENDE KIKAKUI SYLLABLE M191 NDEE", "MENDE KIKAKUI SYLLABLE M119 NDE", "MENDE KIKAKUI SYLLABLE M067 NDOO", "MENDE KIKAKUI SYLLABLE M064 NDO", "MENDE KIKAKUI SYLLABLE M152 NJA", "MENDE KIKAKUI SYLLABLE M192 NJU", "MENDE KIKAKUI SYLLABLE M149 NJEE", "MENDE KIKAKUI SYLLABLE M134 NJOO", "MENDE KIKAKUI SYLLABLE M182 VI", "MENDE KIKAKUI SYLLABLE M185 VA", "MENDE KIKAKUI SYLLABLE M151 VU", "MENDE KIKAKUI SYLLABLE M173 VEE", "MENDE KIKAKUI SYLLABLE M085 VE", "MENDE KIKAKUI SYLLABLE M144 VOO", "MENDE KIKAKUI SYLLABLE M077 VO", "MENDE KIKAKUI SYLLABLE M164 NYIN", "MENDE KIKAKUI SYLLABLE M058 NYAN", "MENDE KIKAKUI SYLLABLE M170 NYUN", "MENDE KIKAKUI SYLLABLE M098 NYEN", "MENDE KIKAKUI SYLLABLE M060 NYON", "MENDE KIKAKUI DIGIT ONE", "MENDE KIKAKUI DIGIT TWO", "MENDE KIKAKUI DIGIT THREE", "MENDE KIKAKUI DIGIT FOUR", "MENDE KIKAKUI DIGIT FIVE", "MENDE KIKAKUI DIGIT SIX", "MENDE KIKAKUI DIGIT SEVEN", "MENDE KIKAKUI DIGIT EIGHT", "MENDE KIKAKUI DIGIT NINE", "MENDE KIKAKUI COMBINING NUMBER TEENS", "MENDE KIKAKUI COMBINING NUMBER TENS", "MENDE KIKAKUI COMBINING NUMBER HUNDREDS", "MENDE KIKAKUI COMBINING NUMBER THOUSANDS", "MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS", "MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS", "MENDE KIKAKUI COMBINING NUMBER MILLIONS", "ADLAM CAPITAL LETTER ALIF", "ADLAM CAPITAL LETTER DAALI", "ADLAM CAPITAL LETTER LAAM", "ADLAM CAPITAL LETTER MIIM", "ADLAM CAPITAL LETTER BA", "ADLAM CAPITAL LETTER SINNYIIYHE", "ADLAM CAPITAL LETTER PE", "ADLAM CAPITAL LETTER BHE", "ADLAM CAPITAL LETTER RA", "ADLAM CAPITAL LETTER E", "ADLAM CAPITAL LETTER FA", "ADLAM CAPITAL LETTER I", "ADLAM CAPITAL LETTER O", "ADLAM CAPITAL LETTER DHA", "ADLAM CAPITAL LETTER YHE", "ADLAM CAPITAL LETTER WAW", "ADLAM CAPITAL LETTER NUN", "ADLAM CAPITAL LETTER KAF", "ADLAM CAPITAL LETTER YA", "ADLAM CAPITAL LETTER U", "ADLAM CAPITAL LETTER JIIM", "ADLAM CAPITAL LETTER CHI", "ADLAM CAPITAL LETTER HA", "ADLAM CAPITAL LETTER QAAF", "ADLAM CAPITAL LETTER GA", "ADLAM CAPITAL LETTER NYA", "ADLAM CAPITAL LETTER TU", "ADLAM CAPITAL LETTER NHA", "ADLAM CAPITAL LETTER VA", "ADLAM CAPITAL LETTER KHA", "ADLAM CAPITAL LETTER GBE", "ADLAM CAPITAL LETTER ZAL", "ADLAM CAPITAL LETTER KPO", "ADLAM CAPITAL LETTER SHA", "ADLAM SMALL LETTER ALIF", "ADLAM SMALL LETTER DAALI", "ADLAM SMALL LETTER LAAM", "ADLAM SMALL LETTER MIIM", "ADLAM SMALL LETTER BA", "ADLAM SMALL LETTER SINNYIIYHE", "ADLAM SMALL LETTER PE", "ADLAM SMALL LETTER BHE", "ADLAM SMALL LETTER RA", "ADLAM SMALL LETTER E", "ADLAM SMALL LETTER FA", "ADLAM SMALL LETTER I", "ADLAM SMALL LETTER O", "ADLAM SMALL LETTER DHA", "ADLAM SMALL LETTER YHE", "ADLAM SMALL LETTER WAW", "ADLAM SMALL LETTER NUN", "ADLAM SMALL LETTER KAF", "ADLAM SMALL LETTER YA", "ADLAM SMALL LETTER U", "ADLAM SMALL LETTER JIIM", "ADLAM SMALL LETTER CHI", "ADLAM SMALL LETTER HA", "ADLAM SMALL LETTER QAAF", "ADLAM SMALL LETTER GA", "ADLAM SMALL LETTER NYA", "ADLAM SMALL LETTER TU", "ADLAM SMALL LETTER NHA", "ADLAM SMALL LETTER VA", "ADLAM SMALL LETTER KHA", "ADLAM SMALL LETTER GBE", "ADLAM SMALL LETTER ZAL", "ADLAM SMALL LETTER KPO", "ADLAM SMALL LETTER SHA", "ADLAM ALIF LENGTHENER", "ADLAM VOWEL LENGTHENER", "ADLAM GEMINATION MARK", "ADLAM HAMZA", "ADLAM CONSONANT MODIFIER", "ADLAM GEMINATE CONSONANT MODIFIER", "ADLAM NUKTA", "ADLAM NASALIZATION MARK", "ADLAM DIGIT ZERO", "ADLAM DIGIT ONE", "ADLAM DIGIT TWO", "ADLAM DIGIT THREE", "ADLAM DIGIT FOUR", "ADLAM DIGIT FIVE", "ADLAM DIGIT SIX", "ADLAM DIGIT SEVEN", "ADLAM DIGIT EIGHT", "ADLAM DIGIT NINE", "ADLAM INITIAL EXCLAMATION MARK", "ADLAM INITIAL QUESTION MARK", "INDIC SIYAQ NUMBER ONE", "INDIC SIYAQ NUMBER TWO", "INDIC SIYAQ NUMBER THREE", "INDIC SIYAQ NUMBER FOUR", "INDIC SIYAQ NUMBER FIVE", "INDIC SIYAQ NUMBER SIX", "INDIC SIYAQ NUMBER SEVEN", "INDIC SIYAQ NUMBER EIGHT", "INDIC SIYAQ NUMBER NINE", "INDIC SIYAQ NUMBER TEN", "INDIC SIYAQ NUMBER TWENTY", "INDIC SIYAQ NUMBER THIRTY", "INDIC SIYAQ NUMBER FORTY", "INDIC SIYAQ NUMBER FIFTY", "INDIC SIYAQ NUMBER SIXTY", "INDIC SIYAQ NUMBER SEVENTY", "INDIC SIYAQ NUMBER EIGHTY", "INDIC SIYAQ NUMBER NINETY", "INDIC SIYAQ NUMBER ONE HUNDRED", "INDIC SIYAQ NUMBER TWO HUNDRED", "INDIC SIYAQ NUMBER THREE HUNDRED", "INDIC SIYAQ NUMBER FOUR HUNDRED", "INDIC SIYAQ NUMBER FIVE HUNDRED", "INDIC SIYAQ NUMBER SIX HUNDRED", "INDIC SIYAQ NUMBER SEVEN HUNDRED", "INDIC SIYAQ NUMBER EIGHT HUNDRED", "INDIC SIYAQ NUMBER NINE HUNDRED", "INDIC SIYAQ NUMBER ONE THOUSAND", "INDIC SIYAQ NUMBER TWO THOUSAND", "INDIC SIYAQ NUMBER THREE THOUSAND", "INDIC SIYAQ NUMBER FOUR THOUSAND", "INDIC SIYAQ NUMBER FIVE THOUSAND", "INDIC SIYAQ NUMBER SIX THOUSAND", "INDIC SIYAQ NUMBER SEVEN THOUSAND", "INDIC SIYAQ NUMBER EIGHT THOUSAND", "INDIC SIYAQ NUMBER NINE THOUSAND", "INDIC SIYAQ NUMBER TEN THOUSAND", "INDIC SIYAQ NUMBER TWENTY THOUSAND", "INDIC SIYAQ NUMBER THIRTY THOUSAND", "INDIC SIYAQ NUMBER FORTY THOUSAND", "INDIC SIYAQ NUMBER FIFTY THOUSAND", "INDIC SIYAQ NUMBER SIXTY THOUSAND", "INDIC SIYAQ NUMBER SEVENTY THOUSAND", "INDIC SIYAQ NUMBER EIGHTY THOUSAND", "INDIC SIYAQ NUMBER NINETY THOUSAND", "INDIC SIYAQ NUMBER LAKH", "INDIC SIYAQ NUMBER LAKHAN", "INDIC SIYAQ LAKH MARK", "INDIC SIYAQ NUMBER KAROR", "INDIC SIYAQ NUMBER KARORAN", "INDIC SIYAQ NUMBER PREFIXED ONE", "INDIC SIYAQ NUMBER PREFIXED TWO", "INDIC SIYAQ NUMBER PREFIXED THREE", "INDIC SIYAQ NUMBER PREFIXED FOUR", "INDIC SIYAQ NUMBER PREFIXED FIVE", "INDIC SIYAQ NUMBER PREFIXED SIX", "INDIC SIYAQ NUMBER PREFIXED SEVEN", "INDIC SIYAQ NUMBER PREFIXED EIGHT", "INDIC SIYAQ NUMBER PREFIXED NINE", "INDIC SIYAQ PLACEHOLDER", "INDIC SIYAQ FRACTION ONE QUARTER", "INDIC SIYAQ FRACTION ONE HALF", "INDIC SIYAQ FRACTION THREE QUARTERS", "INDIC SIYAQ RUPEE MARK", "INDIC SIYAQ NUMBER ALTERNATE ONE", "INDIC SIYAQ NUMBER ALTERNATE TWO", "INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND", "INDIC SIYAQ ALTERNATE LAKH MARK", "OTTOMAN SIYAQ NUMBER ONE", "OTTOMAN SIYAQ NUMBER TWO", "OTTOMAN SIYAQ NUMBER THREE", "OTTOMAN SIYAQ NUMBER FOUR", "OTTOMAN SIYAQ NUMBER FIVE", "OTTOMAN SIYAQ NUMBER SIX", "OTTOMAN SIYAQ NUMBER SEVEN", "OTTOMAN SIYAQ NUMBER EIGHT", "OTTOMAN SIYAQ NUMBER NINE", "OTTOMAN SIYAQ NUMBER TEN", "OTTOMAN SIYAQ NUMBER TWENTY", "OTTOMAN SIYAQ NUMBER THIRTY", "OTTOMAN SIYAQ NUMBER FORTY", "OTTOMAN SIYAQ NUMBER FIFTY", "OTTOMAN SIYAQ NUMBER SIXTY", "OTTOMAN SIYAQ NUMBER SEVENTY", "OTTOMAN SIYAQ NUMBER EIGHTY", "OTTOMAN SIYAQ NUMBER NINETY", "OTTOMAN SIYAQ NUMBER ONE HUNDRED", "OTTOMAN SIYAQ NUMBER TWO HUNDRED", "OTTOMAN SIYAQ NUMBER THREE HUNDRED", "OTTOMAN SIYAQ NUMBER FOUR HUNDRED", "OTTOMAN SIYAQ NUMBER FIVE HUNDRED", "OTTOMAN SIYAQ NUMBER SIX HUNDRED", "OTTOMAN SIYAQ NUMBER SEVEN HUNDRED", "OTTOMAN SIYAQ NUMBER EIGHT HUNDRED", "OTTOMAN SIYAQ NUMBER NINE HUNDRED", "OTTOMAN SIYAQ NUMBER ONE THOUSAND", "OTTOMAN SIYAQ NUMBER TWO THOUSAND", "OTTOMAN SIYAQ NUMBER THREE THOUSAND", "OTTOMAN SIYAQ NUMBER FOUR THOUSAND", "OTTOMAN SIYAQ NUMBER FIVE THOUSAND", "OTTOMAN SIYAQ NUMBER SIX THOUSAND", "OTTOMAN SIYAQ NUMBER SEVEN THOUSAND", "OTTOMAN SIYAQ NUMBER EIGHT THOUSAND", "OTTOMAN SIYAQ NUMBER NINE THOUSAND", "OTTOMAN SIYAQ NUMBER TEN THOUSAND", "OTTOMAN SIYAQ NUMBER TWENTY THOUSAND", "OTTOMAN SIYAQ NUMBER THIRTY THOUSAND", "OTTOMAN SIYAQ NUMBER FORTY THOUSAND", "OTTOMAN SIYAQ NUMBER FIFTY THOUSAND", "OTTOMAN SIYAQ NUMBER SIXTY THOUSAND", "OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND", "OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND", "OTTOMAN SIYAQ NUMBER NINETY THOUSAND", "OTTOMAN SIYAQ MARRATAN", "OTTOMAN SIYAQ ALTERNATE NUMBER TWO", "OTTOMAN SIYAQ ALTERNATE NUMBER THREE", "OTTOMAN SIYAQ ALTERNATE NUMBER FOUR", "OTTOMAN SIYAQ ALTERNATE NUMBER FIVE", "OTTOMAN SIYAQ ALTERNATE NUMBER SIX", "OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN", "OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT", "OTTOMAN SIYAQ ALTERNATE NUMBER NINE", "OTTOMAN SIYAQ ALTERNATE NUMBER TEN", "OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED", "OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED", "OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND", "OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND", "OTTOMAN SIYAQ FRACTION ONE HALF", "OTTOMAN SIYAQ FRACTION ONE SIXTH", "ARABIC MATHEMATICAL ALEF", "ARABIC MATHEMATICAL BEH", "ARABIC MATHEMATICAL JEEM", "ARABIC MATHEMATICAL DAL", "ARABIC MATHEMATICAL WAW", "ARABIC MATHEMATICAL ZAIN", "ARABIC MATHEMATICAL HAH", "ARABIC MATHEMATICAL TAH", "ARABIC MATHEMATICAL YEH", "ARABIC MATHEMATICAL KAF", "ARABIC MATHEMATICAL LAM", "ARABIC MATHEMATICAL MEEM", "ARABIC MATHEMATICAL NOON", "ARABIC MATHEMATICAL SEEN", "ARABIC MATHEMATICAL AIN", "ARABIC MATHEMATICAL FEH", "ARABIC MATHEMATICAL SAD", "ARABIC MATHEMATICAL QAF", "ARABIC MATHEMATICAL REH", "ARABIC MATHEMATICAL SHEEN", "ARABIC MATHEMATICAL TEH", "ARABIC MATHEMATICAL THEH", "ARABIC MATHEMATICAL KHAH", "ARABIC MATHEMATICAL THAL", "ARABIC MATHEMATICAL DAD", "ARABIC MATHEMATICAL ZAH", "ARABIC MATHEMATICAL GHAIN", "ARABIC MATHEMATICAL DOTLESS BEH", "ARABIC MATHEMATICAL DOTLESS NOON", "ARABIC MATHEMATICAL DOTLESS FEH", "ARABIC MATHEMATICAL DOTLESS QAF", "ARABIC MATHEMATICAL INITIAL BEH", "ARABIC MATHEMATICAL INITIAL JEEM", "ARABIC MATHEMATICAL INITIAL HEH", "ARABIC MATHEMATICAL INITIAL HAH", "ARABIC MATHEMATICAL INITIAL YEH", "ARABIC MATHEMATICAL INITIAL KAF", "ARABIC MATHEMATICAL INITIAL LAM", "ARABIC MATHEMATICAL INITIAL MEEM", "ARABIC MATHEMATICAL INITIAL NOON", "ARABIC MATHEMATICAL INITIAL SEEN", "ARABIC MATHEMATICAL INITIAL AIN", "ARABIC MATHEMATICAL INITIAL FEH", "ARABIC MATHEMATICAL INITIAL SAD", "ARABIC MATHEMATICAL INITIAL QAF", "ARABIC MATHEMATICAL INITIAL SHEEN", "ARABIC MATHEMATICAL INITIAL TEH", "ARABIC MATHEMATICAL INITIAL THEH", "ARABIC MATHEMATICAL INITIAL KHAH", "ARABIC MATHEMATICAL INITIAL DAD", "ARABIC MATHEMATICAL INITIAL GHAIN", "ARABIC MATHEMATICAL TAILED JEEM", "ARABIC MATHEMATICAL TAILED HAH", "ARABIC MATHEMATICAL TAILED YEH", "ARABIC MATHEMATICAL TAILED LAM", "ARABIC MATHEMATICAL TAILED NOON", "ARABIC MATHEMATICAL TAILED SEEN", "ARABIC MATHEMATICAL TAILED AIN", "ARABIC MATHEMATICAL TAILED SAD", "ARABIC MATHEMATICAL TAILED QAF", "ARABIC MATHEMATICAL TAILED SHEEN", "ARABIC MATHEMATICAL TAILED KHAH", "ARABIC MATHEMATICAL TAILED DAD", "ARABIC MATHEMATICAL TAILED GHAIN", "ARABIC MATHEMATICAL TAILED DOTLESS NOON", "ARABIC MATHEMATICAL TAILED DOTLESS QAF", "ARABIC MATHEMATICAL STRETCHED BEH", "ARABIC MATHEMATICAL STRETCHED JEEM", "ARABIC MATHEMATICAL STRETCHED HEH", "ARABIC MATHEMATICAL STRETCHED HAH", "ARABIC MATHEMATICAL STRETCHED TAH", "ARABIC MATHEMATICAL STRETCHED YEH", "ARABIC MATHEMATICAL STRETCHED KAF", "ARABIC MATHEMATICAL STRETCHED MEEM", "ARABIC MATHEMATICAL STRETCHED NOON", "ARABIC MATHEMATICAL STRETCHED SEEN", "ARABIC MATHEMATICAL STRETCHED AIN", "ARABIC MATHEMATICAL STRETCHED FEH", "ARABIC MATHEMATICAL STRETCHED SAD", "ARABIC MATHEMATICAL STRETCHED QAF", "ARABIC MATHEMATICAL STRETCHED SHEEN", "ARABIC MATHEMATICAL STRETCHED TEH", "ARABIC MATHEMATICAL STRETCHED THEH", "ARABIC MATHEMATICAL STRETCHED KHAH", "ARABIC MATHEMATICAL STRETCHED DAD", "ARABIC MATHEMATICAL STRETCHED ZAH", "ARABIC MATHEMATICAL STRETCHED GHAIN", "ARABIC MATHEMATICAL STRETCHED DOTLESS BEH", "ARABIC MATHEMATICAL STRETCHED DOTLESS FEH", "ARABIC MATHEMATICAL LOOPED ALEF", "ARABIC MATHEMATICAL LOOPED BEH", "ARABIC MATHEMATICAL LOOPED JEEM", "ARABIC MATHEMATICAL LOOPED DAL", "ARABIC MATHEMATICAL LOOPED HEH", "ARABIC MATHEMATICAL LOOPED WAW", "ARABIC MATHEMATICAL LOOPED ZAIN", "ARABIC MATHEMATICAL LOOPED HAH", "ARABIC MATHEMATICAL LOOPED TAH", "ARABIC MATHEMATICAL LOOPED YEH", "ARABIC MATHEMATICAL LOOPED LAM", "ARABIC MATHEMATICAL LOOPED MEEM", "ARABIC MATHEMATICAL LOOPED NOON", "ARABIC MATHEMATICAL LOOPED SEEN", "ARABIC MATHEMATICAL LOOPED AIN", "ARABIC MATHEMATICAL LOOPED FEH", "ARABIC MATHEMATICAL LOOPED SAD", "ARABIC MATHEMATICAL LOOPED QAF", "ARABIC MATHEMATICAL LOOPED REH", "ARABIC MATHEMATICAL LOOPED SHEEN", "ARABIC MATHEMATICAL LOOPED TEH", "ARABIC MATHEMATICAL LOOPED THEH", "ARABIC MATHEMATICAL LOOPED KHAH", "ARABIC MATHEMATICAL LOOPED THAL", "ARABIC MATHEMATICAL LOOPED DAD", "ARABIC MATHEMATICAL LOOPED ZAH", "ARABIC MATHEMATICAL LOOPED GHAIN", "ARABIC MATHEMATICAL DOUBLE-STRUCK BEH", "ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM", "ARABIC MATHEMATICAL DOUBLE-STRUCK DAL", "ARABIC MATHEMATICAL DOUBLE-STRUCK WAW", "ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN", "ARABIC MATHEMATICAL DOUBLE-STRUCK HAH", "ARABIC MATHEMATICAL DOUBLE-STRUCK TAH", "ARABIC MATHEMATICAL DOUBLE-STRUCK YEH", "ARABIC MATHEMATICAL DOUBLE-STRUCK LAM", "ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM", "ARABIC MATHEMATICAL DOUBLE-STRUCK NOON", "ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN", "ARABIC MATHEMATICAL DOUBLE-STRUCK AIN", "ARABIC MATHEMATICAL DOUBLE-STRUCK FEH", "ARABIC MATHEMATICAL DOUBLE-STRUCK SAD", "ARABIC MATHEMATICAL DOUBLE-STRUCK QAF", "ARABIC MATHEMATICAL DOUBLE-STRUCK REH", "ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN", "ARABIC MATHEMATICAL DOUBLE-STRUCK TEH", "ARABIC MATHEMATICAL DOUBLE-STRUCK THEH", "ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH", "ARABIC MATHEMATICAL DOUBLE-STRUCK THAL", "ARABIC MATHEMATICAL DOUBLE-STRUCK DAD", "ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH", "ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN", "ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL", "ARABIC MATHEMATICAL OPERATOR HAH WITH DAL", "MAHJONG TILE EAST WIND", "MAHJONG TILE SOUTH WIND", "MAHJONG TILE WEST WIND", "MAHJONG TILE NORTH WIND", "MAHJONG TILE RED DRAGON", "MAHJONG TILE GREEN DRAGON", "MAHJONG TILE WHITE DRAGON", "MAHJONG TILE ONE OF CHARACTERS", "MAHJONG TILE TWO OF CHARACTERS", "MAHJONG TILE THREE OF CHARACTERS", "MAHJONG TILE FOUR OF CHARACTERS", "MAHJONG TILE FIVE OF CHARACTERS", "MAHJONG TILE SIX OF CHARACTERS", "MAHJONG TILE SEVEN OF CHARACTERS", "MAHJONG TILE EIGHT OF CHARACTERS", "MAHJONG TILE NINE OF CHARACTERS", "MAHJONG TILE ONE OF BAMBOOS", "MAHJONG TILE TWO OF BAMBOOS", "MAHJONG TILE THREE OF BAMBOOS", "MAHJONG TILE FOUR OF BAMBOOS", "MAHJONG TILE FIVE OF BAMBOOS", "MAHJONG TILE SIX OF BAMBOOS", "MAHJONG TILE SEVEN OF BAMBOOS", "MAHJONG TILE EIGHT OF BAMBOOS", "MAHJONG TILE NINE OF BAMBOOS", "MAHJONG TILE ONE OF CIRCLES", "MAHJONG TILE TWO OF CIRCLES", "MAHJONG TILE THREE OF CIRCLES", "MAHJONG TILE FOUR OF CIRCLES", "MAHJONG TILE FIVE OF CIRCLES", "MAHJONG TILE SIX OF CIRCLES", "MAHJONG TILE SEVEN OF CIRCLES", "MAHJONG TILE EIGHT OF CIRCLES", "MAHJONG TILE NINE OF CIRCLES", "MAHJONG TILE PLUM", "MAHJONG TILE ORCHID", "MAHJONG TILE BAMBOO", "MAHJONG TILE CHRYSANTHEMUM", "MAHJONG TILE SPRING", "MAHJONG TILE SUMMER", "MAHJONG TILE AUTUMN", "MAHJONG TILE WINTER", "MAHJONG TILE JOKER", "MAHJONG TILE BACK", "DOMINO TILE HORIZONTAL BACK", "DOMINO TILE HORIZONTAL-00-00", "DOMINO TILE HORIZONTAL-00-01", "DOMINO TILE HORIZONTAL-00-02", "DOMINO TILE HORIZONTAL-00-03", "DOMINO TILE HORIZONTAL-00-04", "DOMINO TILE HORIZONTAL-00-05", "DOMINO TILE HORIZONTAL-00-06", "DOMINO TILE HORIZONTAL-01-00", "DOMINO TILE HORIZONTAL-01-01", "DOMINO TILE HORIZONTAL-01-02", "DOMINO TILE HORIZONTAL-01-03", "DOMINO TILE HORIZONTAL-01-04", "DOMINO TILE HORIZONTAL-01-05", "DOMINO TILE HORIZONTAL-01-06", "DOMINO TILE HORIZONTAL-02-00", "DOMINO TILE HORIZONTAL-02-01", "DOMINO TILE HORIZONTAL-02-02", "DOMINO TILE HORIZONTAL-02-03", "DOMINO TILE HORIZONTAL-02-04", "DOMINO TILE HORIZONTAL-02-05", "DOMINO TILE HORIZONTAL-02-06", "DOMINO TILE HORIZONTAL-03-00", "DOMINO TILE HORIZONTAL-03-01", "DOMINO TILE HORIZONTAL-03-02", "DOMINO TILE HORIZONTAL-03-03", "DOMINO TILE HORIZONTAL-03-04", "DOMINO TILE HORIZONTAL-03-05", "DOMINO TILE HORIZONTAL-03-06", "DOMINO TILE HORIZONTAL-04-00", "DOMINO TILE HORIZONTAL-04-01", "DOMINO TILE HORIZONTAL-04-02", "DOMINO TILE HORIZONTAL-04-03", "DOMINO TILE HORIZONTAL-04-04", "DOMINO TILE HORIZONTAL-04-05", "DOMINO TILE HORIZONTAL-04-06", "DOMINO TILE HORIZONTAL-05-00", "DOMINO TILE HORIZONTAL-05-01", "DOMINO TILE HORIZONTAL-05-02", "DOMINO TILE HORIZONTAL-05-03", "DOMINO TILE HORIZONTAL-05-04", "DOMINO TILE HORIZONTAL-05-05", "DOMINO TILE HORIZONTAL-05-06", "DOMINO TILE HORIZONTAL-06-00", "DOMINO TILE HORIZONTAL-06-01", "DOMINO TILE HORIZONTAL-06-02", "DOMINO TILE HORIZONTAL-06-03", "DOMINO TILE HORIZONTAL-06-04", "DOMINO TILE HORIZONTAL-06-05", "DOMINO TILE HORIZONTAL-06-06", "DOMINO TILE VERTICAL BACK", "DOMINO TILE VERTICAL-00-00", "DOMINO TILE VERTICAL-00-01", "DOMINO TILE VERTICAL-00-02", "DOMINO TILE VERTICAL-00-03", "DOMINO TILE VERTICAL-00-04", "DOMINO TILE VERTICAL-00-05", "DOMINO TILE VERTICAL-00-06", "DOMINO TILE VERTICAL-01-00", "DOMINO TILE VERTICAL-01-01", "DOMINO TILE VERTICAL-01-02", "DOMINO TILE VERTICAL-01-03", "DOMINO TILE VERTICAL-01-04", "DOMINO TILE VERTICAL-01-05", "DOMINO TILE VERTICAL-01-06", "DOMINO TILE VERTICAL-02-00", "DOMINO TILE VERTICAL-02-01", "DOMINO TILE VERTICAL-02-02", "DOMINO TILE VERTICAL-02-03", "DOMINO TILE VERTICAL-02-04", "DOMINO TILE VERTICAL-02-05", "DOMINO TILE VERTICAL-02-06", "DOMINO TILE VERTICAL-03-00", "DOMINO TILE VERTICAL-03-01", "DOMINO TILE VERTICAL-03-02", "DOMINO TILE VERTICAL-03-03", "DOMINO TILE VERTICAL-03-04", "DOMINO TILE VERTICAL-03-05", "DOMINO TILE VERTICAL-03-06", "DOMINO TILE VERTICAL-04-00", "DOMINO TILE VERTICAL-04-01", "DOMINO TILE VERTICAL-04-02", "DOMINO TILE VERTICAL-04-03", "DOMINO TILE VERTICAL-04-04", "DOMINO TILE VERTICAL-04-05", "DOMINO TILE VERTICAL-04-06", "DOMINO TILE VERTICAL-05-00", "DOMINO TILE VERTICAL-05-01", "DOMINO TILE VERTICAL-05-02", "DOMINO TILE VERTICAL-05-03", "DOMINO TILE VERTICAL-05-04", "DOMINO TILE VERTICAL-05-05", "DOMINO TILE VERTICAL-05-06", "DOMINO TILE VERTICAL-06-00", "DOMINO TILE VERTICAL-06-01", "DOMINO TILE VERTICAL-06-02", "DOMINO TILE VERTICAL-06-03", "DOMINO TILE VERTICAL-06-04", "DOMINO TILE VERTICAL-06-05", "DOMINO TILE VERTICAL-06-06", "PLAYING CARD BACK", "PLAYING CARD ACE OF SPADES", "PLAYING CARD TWO OF SPADES", "PLAYING CARD THREE OF SPADES", "PLAYING CARD FOUR OF SPADES", "PLAYING CARD FIVE OF SPADES", "PLAYING CARD SIX OF SPADES", "PLAYING CARD SEVEN OF SPADES", "PLAYING CARD EIGHT OF SPADES", "PLAYING CARD NINE OF SPADES", "PLAYING CARD TEN OF SPADES", "PLAYING CARD JACK OF SPADES", "PLAYING CARD KNIGHT OF SPADES", "PLAYING CARD QUEEN OF SPADES", "PLAYING CARD KING OF SPADES", "PLAYING CARD ACE OF HEARTS", "PLAYING CARD TWO OF HEARTS", "PLAYING CARD THREE OF HEARTS", "PLAYING CARD FOUR OF HEARTS", "PLAYING CARD FIVE OF HEARTS", "PLAYING CARD SIX OF HEARTS", "PLAYING CARD SEVEN OF HEARTS", "PLAYING CARD EIGHT OF HEARTS", "PLAYING CARD NINE OF HEARTS", "PLAYING CARD TEN OF HEARTS", "PLAYING CARD JACK OF HEARTS", "PLAYING CARD KNIGHT OF HEARTS", "PLAYING CARD QUEEN OF HEARTS", "PLAYING CARD KING OF HEARTS", "PLAYING CARD RED JOKER", "PLAYING CARD ACE OF DIAMONDS", "PLAYING CARD TWO OF DIAMONDS", "PLAYING CARD THREE OF DIAMONDS", "PLAYING CARD FOUR OF DIAMONDS", "PLAYING CARD FIVE OF DIAMONDS", "PLAYING CARD SIX OF DIAMONDS", "PLAYING CARD SEVEN OF DIAMONDS", "PLAYING CARD EIGHT OF DIAMONDS", "PLAYING CARD NINE OF DIAMONDS", "PLAYING CARD TEN OF DIAMONDS", "PLAYING CARD JACK OF DIAMONDS", "PLAYING CARD KNIGHT OF DIAMONDS", "PLAYING CARD QUEEN OF DIAMONDS", "PLAYING CARD KING OF DIAMONDS", "PLAYING CARD BLACK JOKER", "PLAYING CARD ACE OF CLUBS", "PLAYING CARD TWO OF CLUBS", "PLAYING CARD THREE OF CLUBS", "PLAYING CARD FOUR OF CLUBS", "PLAYING CARD FIVE OF CLUBS", "PLAYING CARD SIX OF CLUBS", "PLAYING CARD SEVEN OF CLUBS", "PLAYING CARD EIGHT OF CLUBS", "PLAYING CARD NINE OF CLUBS", "PLAYING CARD TEN OF CLUBS", "PLAYING CARD JACK OF CLUBS", "PLAYING CARD KNIGHT OF CLUBS", "PLAYING CARD QUEEN OF CLUBS", "PLAYING CARD KING OF CLUBS", "PLAYING CARD WHITE JOKER", "PLAYING CARD FOOL", "PLAYING CARD TRUMP-1", "PLAYING CARD TRUMP-2", "PLAYING CARD TRUMP-3", "PLAYING CARD TRUMP-4", "PLAYING CARD TRUMP-5", "PLAYING CARD TRUMP-6", "PLAYING CARD TRUMP-7", "PLAYING CARD TRUMP-8", "PLAYING CARD TRUMP-9", "PLAYING CARD TRUMP-10", "PLAYING CARD TRUMP-11", "PLAYING CARD TRUMP-12", "PLAYING CARD TRUMP-13", "PLAYING CARD TRUMP-14", "PLAYING CARD TRUMP-15", "PLAYING CARD TRUMP-16", "PLAYING CARD TRUMP-17", "PLAYING CARD TRUMP-18", "PLAYING CARD TRUMP-19", "PLAYING CARD TRUMP-20", "PLAYING CARD TRUMP-21", "DIGIT ZERO FULL STOP", "DIGIT ZERO COMMA", "DIGIT ONE COMMA", "DIGIT TWO COMMA", "DIGIT THREE COMMA", "DIGIT FOUR COMMA", "DIGIT FIVE COMMA", "DIGIT SIX COMMA", "DIGIT SEVEN COMMA", "DIGIT EIGHT COMMA", "DIGIT NINE COMMA", "DINGBAT CIRCLED SANS-SERIF DIGIT ZERO", "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO", "PARENTHESIZED LATIN CAPITAL LETTER A", "PARENTHESIZED LATIN CAPITAL LETTER B", "PARENTHESIZED LATIN CAPITAL LETTER C", "PARENTHESIZED LATIN CAPITAL LETTER D", "PARENTHESIZED LATIN CAPITAL LETTER E", "PARENTHESIZED LATIN CAPITAL LETTER F", "PARENTHESIZED LATIN CAPITAL LETTER G", "PARENTHESIZED LATIN CAPITAL LETTER H", "PARENTHESIZED LATIN CAPITAL LETTER I", "PARENTHESIZED LATIN CAPITAL LETTER J", "PARENTHESIZED LATIN CAPITAL LETTER K", "PARENTHESIZED LATIN CAPITAL LETTER L", "PARENTHESIZED LATIN CAPITAL LETTER M", "PARENTHESIZED LATIN CAPITAL LETTER N", "PARENTHESIZED LATIN CAPITAL LETTER O", "PARENTHESIZED LATIN CAPITAL LETTER P", "PARENTHESIZED LATIN CAPITAL LETTER Q", "PARENTHESIZED LATIN CAPITAL LETTER R", "PARENTHESIZED LATIN CAPITAL LETTER S", "PARENTHESIZED LATIN CAPITAL LETTER T", "PARENTHESIZED LATIN CAPITAL LETTER U", "PARENTHESIZED LATIN CAPITAL LETTER V", "PARENTHESIZED LATIN CAPITAL LETTER W", "PARENTHESIZED LATIN CAPITAL LETTER X", "PARENTHESIZED LATIN CAPITAL LETTER Y", "PARENTHESIZED LATIN CAPITAL LETTER Z", "TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S", "CIRCLED ITALIC LATIN CAPITAL LETTER C", "CIRCLED ITALIC LATIN CAPITAL LETTER R", "CIRCLED CD", "CIRCLED WZ", "COPYLEFT SYMBOL", "SQUARED LATIN CAPITAL LETTER A", "SQUARED LATIN CAPITAL LETTER B", "SQUARED LATIN CAPITAL LETTER C", "SQUARED LATIN CAPITAL LETTER D", "SQUARED LATIN CAPITAL LETTER E", "SQUARED LATIN CAPITAL LETTER F", "SQUARED LATIN CAPITAL LETTER G", "SQUARED LATIN CAPITAL LETTER H", "SQUARED LATIN CAPITAL LETTER I", "SQUARED LATIN CAPITAL LETTER J", "SQUARED LATIN CAPITAL LETTER K", "SQUARED LATIN CAPITAL LETTER L", "SQUARED LATIN CAPITAL LETTER M", "SQUARED LATIN CAPITAL LETTER N", "SQUARED LATIN CAPITAL LETTER O", "SQUARED LATIN CAPITAL LETTER P", "SQUARED LATIN CAPITAL LETTER Q", "SQUARED LATIN CAPITAL LETTER R", "SQUARED LATIN CAPITAL LETTER S", "SQUARED LATIN CAPITAL LETTER T", "SQUARED LATIN CAPITAL LETTER U", "SQUARED LATIN CAPITAL LETTER V", "SQUARED LATIN CAPITAL LETTER W", "SQUARED LATIN CAPITAL LETTER X", "SQUARED LATIN CAPITAL LETTER Y", "SQUARED LATIN CAPITAL LETTER Z", "SQUARED HV", "SQUARED MV", "SQUARED SD", "SQUARED SS", "SQUARED PPV", "SQUARED WC", "NEGATIVE CIRCLED LATIN CAPITAL LETTER A", "NEGATIVE CIRCLED LATIN CAPITAL LETTER B", "NEGATIVE CIRCLED LATIN CAPITAL LETTER C", "NEGATIVE CIRCLED LATIN CAPITAL LETTER D", "NEGATIVE CIRCLED LATIN CAPITAL LETTER E", "NEGATIVE CIRCLED LATIN CAPITAL LETTER F", "NEGATIVE CIRCLED LATIN CAPITAL LETTER G", "NEGATIVE CIRCLED LATIN CAPITAL LETTER H", "NEGATIVE CIRCLED LATIN CAPITAL LETTER I", "NEGATIVE CIRCLED LATIN CAPITAL LETTER J", "NEGATIVE CIRCLED LATIN CAPITAL LETTER K", "NEGATIVE CIRCLED LATIN CAPITAL LETTER L", "NEGATIVE CIRCLED LATIN CAPITAL LETTER M", "NEGATIVE CIRCLED LATIN CAPITAL LETTER N", "NEGATIVE CIRCLED LATIN CAPITAL LETTER O", "NEGATIVE CIRCLED LATIN CAPITAL LETTER P", "NEGATIVE CIRCLED LATIN CAPITAL LETTER Q", "NEGATIVE CIRCLED LATIN CAPITAL LETTER R", "NEGATIVE CIRCLED LATIN CAPITAL LETTER S", "NEGATIVE CIRCLED LATIN CAPITAL LETTER T", "NEGATIVE CIRCLED LATIN CAPITAL LETTER U", "NEGATIVE CIRCLED LATIN CAPITAL LETTER V", "NEGATIVE CIRCLED LATIN CAPITAL LETTER W", "NEGATIVE CIRCLED LATIN CAPITAL LETTER X", "NEGATIVE CIRCLED LATIN CAPITAL LETTER Y", "NEGATIVE CIRCLED LATIN CAPITAL LETTER Z", "RAISED MC SIGN", "RAISED MD SIGN", "RAISED MR SIGN", "NEGATIVE SQUARED LATIN CAPITAL LETTER A", "NEGATIVE SQUARED LATIN CAPITAL LETTER B", "NEGATIVE SQUARED LATIN CAPITAL LETTER C", "NEGATIVE SQUARED LATIN CAPITAL LETTER D", "NEGATIVE SQUARED LATIN CAPITAL LETTER E", "NEGATIVE SQUARED LATIN CAPITAL LETTER F", "NEGATIVE SQUARED LATIN CAPITAL LETTER G", "NEGATIVE SQUARED LATIN CAPITAL LETTER H", "NEGATIVE SQUARED LATIN CAPITAL LETTER I", "NEGATIVE SQUARED LATIN CAPITAL LETTER J", "NEGATIVE SQUARED LATIN CAPITAL LETTER K", "NEGATIVE SQUARED LATIN CAPITAL LETTER L", "NEGATIVE SQUARED LATIN CAPITAL LETTER M", "NEGATIVE SQUARED LATIN CAPITAL LETTER N", "NEGATIVE SQUARED LATIN CAPITAL LETTER O", "NEGATIVE SQUARED LATIN CAPITAL LETTER P", "NEGATIVE SQUARED LATIN CAPITAL LETTER Q", "NEGATIVE SQUARED LATIN CAPITAL LETTER R", "NEGATIVE SQUARED LATIN CAPITAL LETTER S", "NEGATIVE SQUARED LATIN CAPITAL LETTER T", "NEGATIVE SQUARED LATIN CAPITAL LETTER U", "NEGATIVE SQUARED LATIN CAPITAL LETTER V", "NEGATIVE SQUARED LATIN CAPITAL LETTER W", "NEGATIVE SQUARED LATIN CAPITAL LETTER X", "NEGATIVE SQUARED LATIN CAPITAL LETTER Y", "NEGATIVE SQUARED LATIN CAPITAL LETTER Z", "CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P", "NEGATIVE SQUARED IC", "NEGATIVE SQUARED PA", "NEGATIVE SQUARED SA", "NEGATIVE SQUARED AB", "NEGATIVE SQUARED WC", "SQUARE DJ", "SQUARED CL", "SQUARED COOL", "SQUARED FREE", "SQUARED ID", "SQUARED NEW", "SQUARED NG", "SQUARED OK", "SQUARED SOS", "SQUARED UP WITH EXCLAMATION MARK", "SQUARED VS", "SQUARED THREE D", "SQUARED SECOND SCREEN", "SQUARED TWO K", "SQUARED FOUR K", "SQUARED EIGHT K", "SQUARED FIVE POINT ONE", "SQUARED SEVEN POINT ONE", "SQUARED TWENTY-TWO POINT TWO", "SQUARED SIXTY P", "SQUARED ONE HUNDRED TWENTY P", "SQUARED LATIN SMALL LETTER D", "SQUARED HC", "SQUARED HDR", "SQUARED HI-RES", "SQUARED LOSSLESS", "SQUARED SHV", "SQUARED UHD", "SQUARED VOD", "REGIONAL INDICATOR SYMBOL LETTER A", "REGIONAL INDICATOR SYMBOL LETTER B", "REGIONAL INDICATOR SYMBOL LETTER C", "REGIONAL INDICATOR SYMBOL LETTER D", "REGIONAL INDICATOR SYMBOL LETTER E", "REGIONAL INDICATOR SYMBOL LETTER F", "REGIONAL INDICATOR SYMBOL LETTER G", "REGIONAL INDICATOR SYMBOL LETTER H", "REGIONAL INDICATOR SYMBOL LETTER I", "REGIONAL INDICATOR SYMBOL LETTER J", "REGIONAL INDICATOR SYMBOL LETTER K", "REGIONAL INDICATOR SYMBOL LETTER L", "REGIONAL INDICATOR SYMBOL LETTER M", "REGIONAL INDICATOR SYMBOL LETTER N", "REGIONAL INDICATOR SYMBOL LETTER O", "REGIONAL INDICATOR SYMBOL LETTER P", "REGIONAL INDICATOR SYMBOL LETTER Q", "REGIONAL INDICATOR SYMBOL LETTER R", "REGIONAL INDICATOR SYMBOL LETTER S", "REGIONAL INDICATOR SYMBOL LETTER T", "REGIONAL INDICATOR SYMBOL LETTER U", "REGIONAL INDICATOR SYMBOL LETTER V", "REGIONAL INDICATOR SYMBOL LETTER W", "REGIONAL INDICATOR SYMBOL LETTER X", "REGIONAL INDICATOR SYMBOL LETTER Y", "REGIONAL INDICATOR SYMBOL LETTER Z", "SQUARE HIRAGANA HOKA", "SQUARED KATAKANA KOKO", "SQUARED KATAKANA SA", "SQUARED CJK UNIFIED IDEOGRAPH-624B", "SQUARED CJK UNIFIED IDEOGRAPH-5B57", "SQUARED CJK UNIFIED IDEOGRAPH-53CC", "SQUARED KATAKANA DE", "SQUARED CJK UNIFIED IDEOGRAPH-4E8C", "SQUARED CJK UNIFIED IDEOGRAPH-591A", "SQUARED CJK UNIFIED IDEOGRAPH-89E3", "SQUARED CJK UNIFIED IDEOGRAPH-5929", "SQUARED CJK UNIFIED IDEOGRAPH-4EA4", "SQUARED CJK UNIFIED IDEOGRAPH-6620", "SQUARED CJK UNIFIED IDEOGRAPH-7121", "SQUARED CJK UNIFIED IDEOGRAPH-6599", "SQUARED CJK UNIFIED IDEOGRAPH-524D", "SQUARED CJK UNIFIED IDEOGRAPH-5F8C", "SQUARED CJK UNIFIED IDEOGRAPH-518D", "SQUARED CJK UNIFIED IDEOGRAPH-65B0", "SQUARED CJK UNIFIED IDEOGRAPH-521D", "SQUARED CJK UNIFIED IDEOGRAPH-7D42", "SQUARED CJK UNIFIED IDEOGRAPH-751F", "SQUARED CJK UNIFIED IDEOGRAPH-8CA9", "SQUARED CJK UNIFIED IDEOGRAPH-58F0", "SQUARED CJK UNIFIED IDEOGRAPH-5439", "SQUARED CJK UNIFIED IDEOGRAPH-6F14", "SQUARED CJK UNIFIED IDEOGRAPH-6295", "SQUARED CJK UNIFIED IDEOGRAPH-6355", "SQUARED CJK UNIFIED IDEOGRAPH-4E00", "SQUARED CJK UNIFIED IDEOGRAPH-4E09", "SQUARED CJK UNIFIED IDEOGRAPH-904A", "SQUARED CJK UNIFIED IDEOGRAPH-5DE6", "SQUARED CJK UNIFIED IDEOGRAPH-4E2D", "SQUARED CJK UNIFIED IDEOGRAPH-53F3", "SQUARED CJK UNIFIED IDEOGRAPH-6307", "SQUARED CJK UNIFIED IDEOGRAPH-8D70", "SQUARED CJK UNIFIED IDEOGRAPH-6253", "SQUARED CJK UNIFIED IDEOGRAPH-7981", "SQUARED CJK UNIFIED IDEOGRAPH-7A7A", "SQUARED CJK UNIFIED IDEOGRAPH-5408", "SQUARED CJK UNIFIED IDEOGRAPH-6E80", "SQUARED CJK UNIFIED IDEOGRAPH-6709", "SQUARED CJK UNIFIED IDEOGRAPH-6708", "SQUARED CJK UNIFIED IDEOGRAPH-7533", "SQUARED CJK UNIFIED IDEOGRAPH-5272", "SQUARED CJK UNIFIED IDEOGRAPH-55B6", "SQUARED CJK UNIFIED IDEOGRAPH-914D", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD", "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557", "CIRCLED IDEOGRAPH ADVANTAGE", "CIRCLED IDEOGRAPH ACCEPT", "ROUNDED SYMBOL FOR FU", "ROUNDED SYMBOL FOR LU", "ROUNDED SYMBOL FOR SHOU", "ROUNDED SYMBOL FOR XI", "ROUNDED SYMBOL FOR SHUANGXI", "ROUNDED SYMBOL FOR CAI", "CYCLONE", "FOGGY", "CLOSED UMBRELLA", "NIGHT WITH STARS", "SUNRISE OVER MOUNTAINS", "SUNRISE", "CITYSCAPE AT DUSK", "SUNSET OVER BUILDINGS", "RAINBOW", "BRIDGE AT NIGHT", "WATER WAVE", "VOLCANO", "MILKY WAY", "EARTH GLOBE EUROPE-AFRICA", "EARTH GLOBE AMERICAS", "EARTH GLOBE ASIA-AUSTRALIA", "GLOBE WITH MERIDIANS", "NEW MOON SYMBOL", "WAXING CRESCENT MOON SYMBOL", "FIRST QUARTER MOON SYMBOL", "WAXING GIBBOUS MOON SYMBOL", "FULL MOON SYMBOL", "WANING GIBBOUS MOON SYMBOL", "LAST QUARTER MOON SYMBOL", "WANING CRESCENT MOON SYMBOL", "CRESCENT MOON", "NEW MOON WITH FACE", "FIRST QUARTER MOON WITH FACE", "LAST QUARTER MOON WITH FACE", "FULL MOON WITH FACE", "SUN WITH FACE", "GLOWING STAR", "SHOOTING STAR", "THERMOMETER", "BLACK DROPLET", "WHITE SUN", "WHITE SUN WITH SMALL CLOUD", "WHITE SUN BEHIND CLOUD", "WHITE SUN BEHIND CLOUD WITH RAIN", "CLOUD WITH RAIN", "CLOUD WITH SNOW", "CLOUD WITH LIGHTNING", "CLOUD WITH TORNADO", "FOG", "WIND BLOWING FACE", "HOT DOG", "TACO", "BURRITO", "CHESTNUT", "SEEDLING", "EVERGREEN TREE", "DECIDUOUS TREE", "PALM TREE", "CACTUS", "HOT PEPPER", "TULIP", "CHERRY BLOSSOM", "ROSE", "HIBISCUS", "SUNFLOWER", "BLOSSOM", "EAR OF MAIZE", "EAR OF RICE", "HERB", "FOUR LEAF CLOVER", "MAPLE LEAF", "FALLEN LEAF", "LEAF FLUTTERING IN WIND", "MUSHROOM", "TOMATO", "AUBERGINE", "GRAPES", "MELON", "WATERMELON", "TANGERINE", "LEMON", "BANANA", "PINEAPPLE", "RED APPLE", "GREEN APPLE", "PEAR", "PEACH", "CHERRIES", "STRAWBERRY", "HAMBURGER", "SLICE OF PIZZA", "MEAT ON BONE", "POULTRY LEG", "RICE CRACKER", "RICE BALL", "COOKED RICE", "CURRY AND RICE", "STEAMING BOWL", "SPAGHETTI", "BREAD", "FRENCH FRIES", "ROASTED SWEET POTATO", "DANGO", "ODEN", "SUSHI", "FRIED SHRIMP", "FISH CAKE WITH SWIRL DESIGN", "SOFT ICE CREAM", "SHAVED ICE", "ICE CREAM", "DOUGHNUT", "COOKIE", "CHOCOLATE BAR", "CANDY", "LOLLIPOP", "CUSTARD", "HONEY POT", "SHORTCAKE", "BENTO BOX", "POT OF FOOD", "COOKING", "FORK AND KNIFE", "TEACUP WITHOUT HANDLE", "SAKE BOTTLE AND CUP", "WINE GLASS", "COCKTAIL GLASS", "TROPICAL DRINK", "BEER MUG", "CLINKING BEER MUGS", "BABY BOTTLE", "FORK AND KNIFE WITH PLATE", "BOTTLE WITH POPPING CORK", "POPCORN", "RIBBON", "WRAPPED PRESENT", "BIRTHDAY CAKE", "JACK-O-LANTERN", "CHRISTMAS TREE", "FATHER CHRISTMAS", "FIREWORKS", "FIREWORK SPARKLER", "BALLOON", "PARTY POPPER", "CONFETTI BALL", "TANABATA TREE", "CROSSED FLAGS", "PINE DECORATION", "JAPANESE DOLLS", "CARP STREAMER", "WIND CHIME", "MOON VIEWING CEREMONY", "SCHOOL SATCHEL", "GRADUATION CAP", "HEART WITH TIP ON THE LEFT", "BOUQUET OF FLOWERS", "MILITARY MEDAL", "REMINDER RIBBON", "MUSICAL KEYBOARD WITH JACKS", "STUDIO MICROPHONE", "LEVEL SLIDER", "CONTROL KNOBS", "BEAMED ASCENDING MUSICAL NOTES", "BEAMED DESCENDING MUSICAL NOTES", "FILM FRAMES", "ADMISSION TICKETS", "CAROUSEL HORSE", "FERRIS WHEEL", "ROLLER COASTER", "FISHING POLE AND FISH", "MICROPHONE", "MOVIE CAMERA", "CINEMA", "HEADPHONE", "ARTIST PALETTE", "TOP HAT", "CIRCUS TENT", "TICKET", "CLAPPER BOARD", "PERFORMING ARTS", "VIDEO GAME", "DIRECT HIT", "SLOT MACHINE", "BILLIARDS", "GAME DIE", "BOWLING", "FLOWER PLAYING CARDS", "MUSICAL NOTE", "MULTIPLE MUSICAL NOTES", "SAXOPHONE", "GUITAR", "MUSICAL KEYBOARD", "TRUMPET", "VIOLIN", "MUSICAL SCORE", "RUNNING SHIRT WITH SASH", "TENNIS RACQUET AND BALL", "SKI AND SKI BOOT", "BASKETBALL AND HOOP", "CHEQUERED FLAG", "SNOWBOARDER", "RUNNER", "SURFER", "SPORTS MEDAL", "TROPHY", "HORSE RACING", "AMERICAN FOOTBALL", "RUGBY FOOTBALL", "SWIMMER", "WEIGHT LIFTER", "GOLFER", "RACING MOTORCYCLE", "RACING CAR", "CRICKET BAT AND BALL", "VOLLEYBALL", "FIELD HOCKEY STICK AND BALL", "ICE HOCKEY STICK AND PUCK", "TABLE TENNIS PADDLE AND BALL", "SNOW CAPPED MOUNTAIN", "CAMPING", "BEACH WITH UMBRELLA", "BUILDING CONSTRUCTION", "HOUSE BUILDINGS", "CITYSCAPE", "DERELICT HOUSE BUILDING", "CLASSICAL BUILDING", "DESERT", "DESERT ISLAND", "NATIONAL PARK", "STADIUM", "HOUSE BUILDING", "HOUSE WITH GARDEN", "OFFICE BUILDING", "JAPANESE POST OFFICE", "EUROPEAN POST OFFICE", "HOSPITAL", "BANK", "AUTOMATED TELLER MACHINE", "HOTEL", "LOVE HOTEL", "CONVENIENCE STORE", "SCHOOL", "DEPARTMENT STORE", "FACTORY", "IZAKAYA LANTERN", "JAPANESE CASTLE", "EUROPEAN CASTLE", "WHITE PENNANT", "BLACK PENNANT", "WAVING WHITE FLAG", "WAVING BLACK FLAG", "ROSETTE", "BLACK ROSETTE", "LABEL", "BADMINTON RACQUET AND SHUTTLECOCK", "BOW AND ARROW", "AMPHORA", "EMOJI MODIFIER FITZPATRICK TYPE-1-2", "EMOJI MODIFIER FITZPATRICK TYPE-3", "EMOJI MODIFIER FITZPATRICK TYPE-4", "EMOJI MODIFIER FITZPATRICK TYPE-5", "EMOJI MODIFIER FITZPATRICK TYPE-6", "RAT", "MOUSE", "OX", "WATER BUFFALO", "COW", "TIGER", "LEOPARD", "RABBIT", "CAT", "DRAGON", "CROCODILE", "WHALE", "SNAIL", "SNAKE", "HORSE", "RAM", "GOAT", "SHEEP", "MONKEY", "ROOSTER", "CHICKEN", "DOG", "PIG", "BOAR", "ELEPHANT", "OCTOPUS", "SPIRAL SHELL", "BUG", "ANT", "HONEYBEE", "LADY BEETLE", "FISH", "TROPICAL FISH", "BLOWFISH", "TURTLE", "HATCHING CHICK", "BABY CHICK", "FRONT-FACING BABY CHICK", "BIRD", "PENGUIN", "KOALA", "POODLE", "DROMEDARY CAMEL", "BACTRIAN CAMEL", "DOLPHIN", "MOUSE FACE", "COW FACE", "TIGER FACE", "RABBIT FACE", "CAT FACE", "DRAGON FACE", "SPOUTING WHALE", "HORSE FACE", "MONKEY FACE", "DOG FACE", "PIG FACE", "FROG FACE", "HAMSTER FACE", "WOLF FACE", "BEAR FACE", "PANDA FACE", "PIG NOSE", "PAW PRINTS", "CHIPMUNK", "EYES", "EYE", "EAR", "NOSE", "MOUTH", "TONGUE", "WHITE UP POINTING BACKHAND INDEX", "WHITE DOWN POINTING BACKHAND INDEX", "WHITE LEFT POINTING BACKHAND INDEX", "WHITE RIGHT POINTING BACKHAND INDEX", "FISTED HAND SIGN", "WAVING HAND SIGN", "OK HAND SIGN", "THUMBS UP SIGN", "THUMBS DOWN SIGN", "CLAPPING HANDS SIGN", "OPEN HANDS SIGN", "CROWN", "WOMANS HAT", "EYEGLASSES", "NECKTIE", "T-SHIRT", "JEANS", "DRESS", "KIMONO", "BIKINI", "WOMANS CLOTHES", "PURSE", "HANDBAG", "POUCH", "MANS SHOE", "ATHLETIC SHOE", "HIGH-HEELED SHOE", "WOMANS SANDAL", "WOMANS BOOTS", "FOOTPRINTS", "BUST IN SILHOUETTE", "BUSTS IN SILHOUETTE", "BOY", "GIRL", "MAN", "WOMAN", "FAMILY", "MAN AND WOMAN HOLDING HANDS", "TWO MEN HOLDING HANDS", "TWO WOMEN HOLDING HANDS", "POLICE OFFICER", "WOMAN WITH BUNNY EARS", "BRIDE WITH VEIL", "PERSON WITH BLOND HAIR", "MAN WITH GUA PI MAO", "MAN WITH TURBAN", "OLDER MAN", "OLDER WOMAN", "BABY", "CONSTRUCTION WORKER", "PRINCESS", "JAPANESE OGRE", "JAPANESE GOBLIN", "GHOST", "BABY ANGEL", "EXTRATERRESTRIAL ALIEN", "ALIEN MONSTER", "IMP", "SKULL", "INFORMATION DESK PERSON", "GUARDSMAN", "DANCER", "LIPSTICK", "NAIL POLISH", "FACE MASSAGE", "HAIRCUT", "BARBER POLE", "SYRINGE", "PILL", "KISS MARK", "LOVE LETTER", "RING", "GEM STONE", "KISS", "BOUQUET", "COUPLE WITH HEART", "WEDDING", "BEATING HEART", "BROKEN HEART", "TWO HEARTS", "SPARKLING HEART", "GROWING HEART", "HEART WITH ARROW", "BLUE HEART", "GREEN HEART", "YELLOW HEART", "PURPLE HEART", "HEART WITH RIBBON", "REVOLVING HEARTS", "HEART DECORATION", "DIAMOND SHAPE WITH A DOT INSIDE", "ELECTRIC LIGHT BULB", "ANGER SYMBOL", "BOMB", "SLEEPING SYMBOL", "COLLISION SYMBOL", "SPLASHING SWEAT SYMBOL", "DROPLET", "DASH SYMBOL", "PILE OF POO", "FLEXED BICEPS", "DIZZY SYMBOL", "SPEECH BALLOON", "THOUGHT BALLOON", "WHITE FLOWER", "HUNDRED POINTS SYMBOL", "MONEY BAG", "CURRENCY EXCHANGE", "HEAVY DOLLAR SIGN", "CREDIT CARD", "BANKNOTE WITH YEN SIGN", "BANKNOTE WITH DOLLAR SIGN", "BANKNOTE WITH EURO SIGN", "BANKNOTE WITH POUND SIGN", "MONEY WITH WINGS", "CHART WITH UPWARDS TREND AND YEN SIGN", "SEAT", "PERSONAL COMPUTER", "BRIEFCASE", "MINIDISC", "FLOPPY DISK", "OPTICAL DISC", "DVD", "FILE FOLDER", "OPEN FILE FOLDER", "PAGE WITH CURL", "PAGE FACING UP", "CALENDAR", "TEAR-OFF CALENDAR", "CARD INDEX", "CHART WITH UPWARDS TREND", "CHART WITH DOWNWARDS TREND", "BAR CHART", "CLIPBOARD", "PUSHPIN", "ROUND PUSHPIN", "PAPERCLIP", "STRAIGHT RULER", "TRIANGULAR RULER", "BOOKMARK TABS", "LEDGER", "NOTEBOOK", "NOTEBOOK WITH DECORATIVE COVER", "CLOSED BOOK", "OPEN BOOK", "GREEN BOOK", "BLUE BOOK", "ORANGE BOOK", "BOOKS", "NAME BADGE", "SCROLL", "MEMO", "TELEPHONE RECEIVER", "PAGER", "FAX MACHINE", "SATELLITE ANTENNA", "PUBLIC ADDRESS LOUDSPEAKER", "CHEERING MEGAPHONE", "OUTBOX TRAY", "INBOX TRAY", "PACKAGE", "E-MAIL SYMBOL", "INCOMING ENVELOPE", "ENVELOPE WITH DOWNWARDS ARROW ABOVE", "CLOSED MAILBOX WITH LOWERED FLAG", "CLOSED MAILBOX WITH RAISED FLAG", "OPEN MAILBOX WITH RAISED FLAG", "OPEN MAILBOX WITH LOWERED FLAG", "POSTBOX", "POSTAL HORN", "NEWSPAPER", "MOBILE PHONE", "MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT", "VIBRATION MODE", "MOBILE PHONE OFF", "NO MOBILE PHONES", "ANTENNA WITH BARS", "CAMERA", "CAMERA WITH FLASH", "VIDEO CAMERA", "TELEVISION", "RADIO", "VIDEOCASSETTE", "FILM PROJECTOR", "PORTABLE STEREO", "PRAYER BEADS", "TWISTED RIGHTWARDS ARROWS", "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS", "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY", "CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", "ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", "LOW BRIGHTNESS SYMBOL", "HIGH BRIGHTNESS SYMBOL", "SPEAKER WITH CANCELLATION STROKE", "SPEAKER", "SPEAKER WITH ONE SOUND WAVE", "SPEAKER WITH THREE SOUND WAVES", "BATTERY", "ELECTRIC PLUG", "LEFT-POINTING MAGNIFYING GLASS", "RIGHT-POINTING MAGNIFYING GLASS", "LOCK WITH INK PEN", "CLOSED LOCK WITH KEY", "KEY", "LOCK", "OPEN LOCK", "BELL", "BELL WITH CANCELLATION STROKE", "BOOKMARK", "LINK SYMBOL", "RADIO BUTTON", "BACK WITH LEFTWARDS ARROW ABOVE", "END WITH LEFTWARDS ARROW ABOVE", "ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE", "SOON WITH RIGHTWARDS ARROW ABOVE", "TOP WITH UPWARDS ARROW ABOVE", "NO ONE UNDER EIGHTEEN SYMBOL", "KEYCAP TEN", "INPUT SYMBOL FOR LATIN CAPITAL LETTERS", "INPUT SYMBOL FOR LATIN SMALL LETTERS", "INPUT SYMBOL FOR NUMBERS", "INPUT SYMBOL FOR SYMBOLS", "INPUT SYMBOL FOR LATIN LETTERS", "FIRE", "ELECTRIC TORCH", "WRENCH", "HAMMER", "NUT AND BOLT", "HOCHO", "PISTOL", "MICROSCOPE", "TELESCOPE", "CRYSTAL BALL", "SIX POINTED STAR WITH MIDDLE DOT", "JAPANESE SYMBOL FOR BEGINNER", "TRIDENT EMBLEM", "BLACK SQUARE BUTTON", "WHITE SQUARE BUTTON", "LARGE RED CIRCLE", "LARGE BLUE CIRCLE", "LARGE ORANGE DIAMOND", "LARGE BLUE DIAMOND", "SMALL ORANGE DIAMOND", "SMALL BLUE DIAMOND", "UP-POINTING RED TRIANGLE", "DOWN-POINTING RED TRIANGLE", "UP-POINTING SMALL RED TRIANGLE", "DOWN-POINTING SMALL RED TRIANGLE", "LOWER RIGHT SHADOWED WHITE CIRCLE", "UPPER RIGHT SHADOWED WHITE CIRCLE", "CIRCLED CROSS POMMEE", "CROSS POMMEE WITH HALF-CIRCLE BELOW", "CROSS POMMEE", "NOTCHED LEFT SEMICIRCLE WITH THREE DOTS", "NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS", "SYMBOL FOR MARKS CHAPTER", "WHITE LATIN CROSS", "HEAVY LATIN CROSS", "CELTIC CROSS", "OM SYMBOL", "DOVE OF PEACE", "KAABA", "MOSQUE", "SYNAGOGUE", "MENORAH WITH NINE BRANCHES", "BOWL OF HYGIEIA", "CLOCK FACE ONE OCLOCK", "CLOCK FACE TWO OCLOCK", "CLOCK FACE THREE OCLOCK", "CLOCK FACE FOUR OCLOCK", "CLOCK FACE FIVE OCLOCK", "CLOCK FACE SIX OCLOCK", "CLOCK FACE SEVEN OCLOCK", "CLOCK FACE EIGHT OCLOCK", "CLOCK FACE NINE OCLOCK", "CLOCK FACE TEN OCLOCK", "CLOCK FACE ELEVEN OCLOCK", "CLOCK FACE TWELVE OCLOCK", "CLOCK FACE ONE-THIRTY", "CLOCK FACE TWO-THIRTY", "CLOCK FACE THREE-THIRTY", "CLOCK FACE FOUR-THIRTY", "CLOCK FACE FIVE-THIRTY", "CLOCK FACE SIX-THIRTY", "CLOCK FACE SEVEN-THIRTY", "CLOCK FACE EIGHT-THIRTY", "CLOCK FACE NINE-THIRTY", "CLOCK FACE TEN-THIRTY", "CLOCK FACE ELEVEN-THIRTY", "CLOCK FACE TWELVE-THIRTY", "RIGHT SPEAKER", "RIGHT SPEAKER WITH ONE SOUND WAVE", "RIGHT SPEAKER WITH THREE SOUND WAVES", "BULLHORN", "BULLHORN WITH SOUND WAVES", "RINGING BELL", "BOOK", "CANDLE", "MANTELPIECE CLOCK", "BLACK SKULL AND CROSSBONES", "NO PIRACY", "HOLE", "MAN IN BUSINESS SUIT LEVITATING", "SLEUTH OR SPY", "DARK SUNGLASSES", "SPIDER", "SPIDER WEB", "JOYSTICK", "MAN DANCING", "LEFT HAND TELEPHONE RECEIVER", "TELEPHONE RECEIVER WITH PAGE", "RIGHT HAND TELEPHONE RECEIVER", "WHITE TOUCHTONE TELEPHONE", "BLACK TOUCHTONE TELEPHONE", "TELEPHONE ON TOP OF MODEM", "CLAMSHELL MOBILE PHONE", "BACK OF ENVELOPE", "STAMPED ENVELOPE", "ENVELOPE WITH LIGHTNING", "FLYING ENVELOPE", "PEN OVER STAMPED ENVELOPE", "LINKED PAPERCLIPS", "BLACK PUSHPIN", "LOWER LEFT PENCIL", "LOWER LEFT BALLPOINT PEN", "LOWER LEFT FOUNTAIN PEN", "LOWER LEFT PAINTBRUSH", "LOWER LEFT CRAYON", "LEFT WRITING HAND", "TURNED OK HAND SIGN", "RAISED HAND WITH FINGERS SPLAYED", "REVERSED RAISED HAND WITH FINGERS SPLAYED", "REVERSED THUMBS UP SIGN", "REVERSED THUMBS DOWN SIGN", "REVERSED VICTORY HAND", "REVERSED HAND WITH MIDDLE FINGER EXTENDED", "RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS", "WHITE DOWN POINTING LEFT HAND INDEX", "SIDEWAYS WHITE LEFT POINTING INDEX", "SIDEWAYS WHITE RIGHT POINTING INDEX", "SIDEWAYS BLACK LEFT POINTING INDEX", "SIDEWAYS BLACK RIGHT POINTING INDEX", "BLACK LEFT POINTING BACKHAND INDEX", "BLACK RIGHT POINTING BACKHAND INDEX", "SIDEWAYS WHITE UP POINTING INDEX", "SIDEWAYS WHITE DOWN POINTING INDEX", "SIDEWAYS BLACK UP POINTING INDEX", "SIDEWAYS BLACK DOWN POINTING INDEX", "BLACK UP POINTING BACKHAND INDEX", "BLACK DOWN POINTING BACKHAND INDEX", "BLACK HEART", "DESKTOP COMPUTER", "KEYBOARD AND MOUSE", "THREE NETWORKED COMPUTERS", "PRINTER", "POCKET CALCULATOR", "BLACK HARD SHELL FLOPPY DISK", "WHITE HARD SHELL FLOPPY DISK", "SOFT SHELL FLOPPY DISK", "TAPE CARTRIDGE", "WIRED KEYBOARD", "ONE BUTTON MOUSE", "TWO BUTTON MOUSE", "THREE BUTTON MOUSE", "TRACKBALL", "OLD PERSONAL COMPUTER", "HARD DISK", "SCREEN", "PRINTER ICON", "FAX ICON", "OPTICAL DISC ICON", "DOCUMENT WITH TEXT", "DOCUMENT WITH TEXT AND PICTURE", "DOCUMENT WITH PICTURE", "FRAME WITH PICTURE", "FRAME WITH TILES", "FRAME WITH AN X", "BLACK FOLDER", "FOLDER", "OPEN FOLDER", "CARD INDEX DIVIDERS", "CARD FILE BOX", "FILE CABINET", "EMPTY NOTE", "EMPTY NOTE PAGE", "EMPTY NOTE PAD", "NOTE", "NOTE PAGE", "NOTE PAD", "EMPTY DOCUMENT", "EMPTY PAGE", "EMPTY PAGES", "DOCUMENT", "PAGE", "PAGES", "WASTEBASKET", "SPIRAL NOTE PAD", "SPIRAL CALENDAR PAD", "DESKTOP WINDOW", "MINIMIZE", "MAXIMIZE", "OVERLAP", "CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS", "CANCELLATION X", "INCREASE FONT SIZE SYMBOL", "DECREASE FONT SIZE SYMBOL", "COMPRESSION", "OLD KEY", "ROLLED-UP NEWSPAPER", "PAGE WITH CIRCLED TEXT", "STOCK CHART", "DAGGER KNIFE", "LIPS", "SPEAKING HEAD IN SILHOUETTE", "THREE RAYS ABOVE", "THREE RAYS BELOW", "THREE RAYS LEFT", "THREE RAYS RIGHT", "LEFT SPEECH BUBBLE", "RIGHT SPEECH BUBBLE", "TWO SPEECH BUBBLES", "THREE SPEECH BUBBLES", "LEFT THOUGHT BUBBLE", "RIGHT THOUGHT BUBBLE", "LEFT ANGER BUBBLE", "RIGHT ANGER BUBBLE", "MOOD BUBBLE", "LIGHTNING MOOD BUBBLE", "LIGHTNING MOOD", "BALLOT BOX WITH BALLOT", "BALLOT SCRIPT X", "BALLOT BOX WITH SCRIPT X", "BALLOT BOLD SCRIPT X", "BALLOT BOX WITH BOLD SCRIPT X", "LIGHT CHECK MARK", "BALLOT BOX WITH BOLD CHECK", "WORLD MAP", "MOUNT FUJI", "TOKYO TOWER", "STATUE OF LIBERTY", "SILHOUETTE OF JAPAN", "MOYAI", "GRINNING FACE", "GRINNING FACE WITH SMILING EYES", "FACE WITH TEARS OF JOY", "SMILING FACE WITH OPEN MOUTH", "SMILING FACE WITH OPEN MOUTH AND SMILING EYES", "SMILING FACE WITH OPEN MOUTH AND COLD SWEAT", "SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES", "SMILING FACE WITH HALO", "SMILING FACE WITH HORNS", "WINKING FACE", "SMILING FACE WITH SMILING EYES", "FACE SAVOURING DELICIOUS FOOD", "RELIEVED FACE", "SMILING FACE WITH HEART-SHAPED EYES", "SMILING FACE WITH SUNGLASSES", "SMIRKING FACE", "NEUTRAL FACE", "EXPRESSIONLESS FACE", "UNAMUSED FACE", "FACE WITH COLD SWEAT", "PENSIVE FACE", "CONFUSED FACE", "CONFOUNDED FACE", "KISSING FACE", "FACE THROWING A KISS", "KISSING FACE WITH SMILING EYES", "KISSING FACE WITH CLOSED EYES", "FACE WITH STUCK-OUT TONGUE", "FACE WITH STUCK-OUT TONGUE AND WINKING EYE", "FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES", "DISAPPOINTED FACE", "WORRIED FACE", "ANGRY FACE", "POUTING FACE", "CRYING FACE", "PERSEVERING FACE", "FACE WITH LOOK OF TRIUMPH", "DISAPPOINTED BUT RELIEVED FACE", "FROWNING FACE WITH OPEN MOUTH", "ANGUISHED FACE", "FEARFUL FACE", "WEARY FACE", "SLEEPY FACE", "TIRED FACE", "GRIMACING FACE", "LOUDLY CRYING FACE", "FACE WITH OPEN MOUTH", "HUSHED FACE", "FACE WITH OPEN MOUTH AND COLD SWEAT", "FACE SCREAMING IN FEAR", "ASTONISHED FACE", "FLUSHED FACE", "SLEEPING FACE", "DIZZY FACE", "FACE WITHOUT MOUTH", "FACE WITH MEDICAL MASK", "GRINNING CAT FACE WITH SMILING EYES", "CAT FACE WITH TEARS OF JOY", "SMILING CAT FACE WITH OPEN MOUTH", "SMILING CAT FACE WITH HEART-SHAPED EYES", "CAT FACE WITH WRY SMILE", "KISSING CAT FACE WITH CLOSED EYES", "POUTING CAT FACE", "CRYING CAT FACE", "WEARY CAT FACE", "SLIGHTLY FROWNING FACE", "SLIGHTLY SMILING FACE", "UPSIDE-DOWN FACE", "FACE WITH ROLLING EYES", "FACE WITH NO GOOD GESTURE", "FACE WITH OK GESTURE", "PERSON BOWING DEEPLY", "SEE-NO-EVIL MONKEY", "HEAR-NO-EVIL MONKEY", "SPEAK-NO-EVIL MONKEY", "HAPPY PERSON RAISING ONE HAND", "PERSON RAISING BOTH HANDS IN CELEBRATION", "PERSON FROWNING", "PERSON WITH POUTING FACE", "PERSON WITH FOLDED HANDS", "NORTH WEST POINTING LEAF", "SOUTH WEST POINTING LEAF", "NORTH EAST POINTING LEAF", "SOUTH EAST POINTING LEAF", "TURNED NORTH WEST POINTING LEAF", "TURNED SOUTH WEST POINTING LEAF", "TURNED NORTH EAST POINTING LEAF", "TURNED SOUTH EAST POINTING LEAF", "NORTH WEST POINTING VINE LEAF", "SOUTH WEST POINTING VINE LEAF", "NORTH EAST POINTING VINE LEAF", "SOUTH EAST POINTING VINE LEAF", "HEAVY NORTH WEST POINTING VINE LEAF", "HEAVY SOUTH WEST POINTING VINE LEAF", "HEAVY NORTH EAST POINTING VINE LEAF", "HEAVY SOUTH EAST POINTING VINE LEAF", "NORTH WEST POINTING BUD", "SOUTH WEST POINTING BUD", "NORTH EAST POINTING BUD", "SOUTH EAST POINTING BUD", "HEAVY NORTH WEST POINTING BUD", "HEAVY SOUTH WEST POINTING BUD", "HEAVY NORTH EAST POINTING BUD", "HEAVY SOUTH EAST POINTING BUD", "HOLLOW QUILT SQUARE ORNAMENT", "HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE", "SOLID QUILT SQUARE ORNAMENT", "SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE", "LEFTWARDS ROCKET", "UPWARDS ROCKET", "RIGHTWARDS ROCKET", "DOWNWARDS ROCKET", "SCRIPT LIGATURE ET ORNAMENT", "HEAVY SCRIPT LIGATURE ET ORNAMENT", "LIGATURE OPEN ET ORNAMENT", "HEAVY LIGATURE OPEN ET ORNAMENT", "HEAVY AMPERSAND ORNAMENT", "SWASH AMPERSAND ORNAMENT", "SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT", "SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT", "SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT", "HEAVY INTERROBANG ORNAMENT", "SANS-SERIF INTERROBANG ORNAMENT", "HEAVY SANS-SERIF INTERROBANG ORNAMENT", "VERY HEAVY SOLIDUS", "VERY HEAVY REVERSE SOLIDUS", "CHECKER BOARD", "REVERSE CHECKER BOARD", "ROCKET", "HELICOPTER", "STEAM LOCOMOTIVE", "RAILWAY CAR", "HIGH-SPEED TRAIN", "HIGH-SPEED TRAIN WITH BULLET NOSE", "TRAIN", "METRO", "LIGHT RAIL", "STATION", "TRAM", "TRAM CAR", "BUS", "ONCOMING BUS", "TROLLEYBUS", "BUS STOP", "MINIBUS", "AMBULANCE", "FIRE ENGINE", "POLICE CAR", "ONCOMING POLICE CAR", "TAXI", "ONCOMING TAXI", "AUTOMOBILE", "ONCOMING AUTOMOBILE", "RECREATIONAL VEHICLE", "DELIVERY TRUCK", "ARTICULATED LORRY", "TRACTOR", "MONORAIL", "MOUNTAIN RAILWAY", "SUSPENSION RAILWAY", "MOUNTAIN CABLEWAY", "AERIAL TRAMWAY", "SHIP", "ROWBOAT", "SPEEDBOAT", "HORIZONTAL TRAFFIC LIGHT", "VERTICAL TRAFFIC LIGHT", "CONSTRUCTION SIGN", "POLICE CARS REVOLVING LIGHT", "TRIANGULAR FLAG ON POST", "DOOR", "NO ENTRY SIGN", "SMOKING SYMBOL", "NO SMOKING SYMBOL", "PUT LITTER IN ITS PLACE SYMBOL", "DO NOT LITTER SYMBOL", "POTABLE WATER SYMBOL", "NON-POTABLE WATER SYMBOL", "BICYCLE", "NO BICYCLES", "BICYCLIST", "MOUNTAIN BICYCLIST", "PEDESTRIAN", "NO PEDESTRIANS", "CHILDREN CROSSING", "MENS SYMBOL", "WOMENS SYMBOL", "RESTROOM", "BABY SYMBOL", "TOILET", "WATER CLOSET", "SHOWER", "BATH", "BATHTUB", "PASSPORT CONTROL", "CUSTOMS", "BAGGAGE CLAIM", "LEFT LUGGAGE", "TRIANGLE WITH ROUNDED CORNERS", "PROHIBITED SIGN", "CIRCLED INFORMATION SOURCE", "BOYS SYMBOL", "GIRLS SYMBOL", "COUCH AND LAMP", "SLEEPING ACCOMMODATION", "SHOPPING BAGS", "BELLHOP BELL", "BED", "PLACE OF WORSHIP", "OCTAGONAL SIGN", "SHOPPING TROLLEY", "STUPA", "PAGODA", "HINDU TEMPLE", "HAMMER AND WRENCH", "SHIELD", "OIL DRUM", "MOTORWAY", "RAILWAY TRACK", "MOTOR BOAT", "UP-POINTING MILITARY AIRPLANE", "UP-POINTING AIRPLANE", "UP-POINTING SMALL AIRPLANE", "SMALL AIRPLANE", "NORTHEAST-POINTING AIRPLANE", "AIRPLANE DEPARTURE", "AIRPLANE ARRIVING", "SATELLITE", "ONCOMING FIRE ENGINE", "DIESEL LOCOMOTIVE", "PASSENGER SHIP", "SCOOTER", "MOTOR SCOOTER", "CANOE", "SLED", "FLYING SAUCER", "SKATEBOARD", "AUTO RICKSHAW", "ALCHEMICAL SYMBOL FOR QUINTESSENCE", "ALCHEMICAL SYMBOL FOR AIR", "ALCHEMICAL SYMBOL FOR FIRE", "ALCHEMICAL SYMBOL FOR EARTH", "ALCHEMICAL SYMBOL FOR WATER", "ALCHEMICAL SYMBOL FOR AQUAFORTIS", "ALCHEMICAL SYMBOL FOR AQUA REGIA", "ALCHEMICAL SYMBOL FOR AQUA REGIA-2", "ALCHEMICAL SYMBOL FOR AQUA VITAE", "ALCHEMICAL SYMBOL FOR AQUA VITAE-2", "ALCHEMICAL SYMBOL FOR VINEGAR", "ALCHEMICAL SYMBOL FOR VINEGAR-2", "ALCHEMICAL SYMBOL FOR VINEGAR-3", "ALCHEMICAL SYMBOL FOR SULFUR", "ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR", "ALCHEMICAL SYMBOL FOR BLACK SULFUR", "ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE", "ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2", "ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3", "ALCHEMICAL SYMBOL FOR CINNABAR", "ALCHEMICAL SYMBOL FOR SALT", "ALCHEMICAL SYMBOL FOR NITRE", "ALCHEMICAL SYMBOL FOR VITRIOL", "ALCHEMICAL SYMBOL FOR VITRIOL-2", "ALCHEMICAL SYMBOL FOR ROCK SALT", "ALCHEMICAL SYMBOL FOR ROCK SALT-2", "ALCHEMICAL SYMBOL FOR GOLD", "ALCHEMICAL SYMBOL FOR SILVER", "ALCHEMICAL SYMBOL FOR IRON ORE", "ALCHEMICAL SYMBOL FOR IRON ORE-2", "ALCHEMICAL SYMBOL FOR CROCUS OF IRON", "ALCHEMICAL SYMBOL FOR REGULUS OF IRON", "ALCHEMICAL SYMBOL FOR COPPER ORE", "ALCHEMICAL SYMBOL FOR IRON-COPPER ORE", "ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER", "ALCHEMICAL SYMBOL FOR CROCUS OF COPPER", "ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2", "ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE", "ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE", "ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER", "ALCHEMICAL SYMBOL FOR VERDIGRIS", "ALCHEMICAL SYMBOL FOR TIN ORE", "ALCHEMICAL SYMBOL FOR LEAD ORE", "ALCHEMICAL SYMBOL FOR ANTIMONY ORE", "ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY", "ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY", "ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY", "ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY", "ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY", "ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2", "ALCHEMICAL SYMBOL FOR REGULUS", "ALCHEMICAL SYMBOL FOR REGULUS-2", "ALCHEMICAL SYMBOL FOR REGULUS-3", "ALCHEMICAL SYMBOL FOR REGULUS-4", "ALCHEMICAL SYMBOL FOR ALKALI", "ALCHEMICAL SYMBOL FOR ALKALI-2", "ALCHEMICAL SYMBOL FOR MARCASITE", "ALCHEMICAL SYMBOL FOR SAL-AMMONIAC", "ALCHEMICAL SYMBOL FOR ARSENIC", "ALCHEMICAL SYMBOL FOR REALGAR", "ALCHEMICAL SYMBOL FOR REALGAR-2", "ALCHEMICAL SYMBOL FOR AURIPIGMENT", "ALCHEMICAL SYMBOL FOR BISMUTH ORE", "ALCHEMICAL SYMBOL FOR TARTAR", "ALCHEMICAL SYMBOL FOR TARTAR-2", "ALCHEMICAL SYMBOL FOR QUICK LIME", "ALCHEMICAL SYMBOL FOR BORAX", "ALCHEMICAL SYMBOL FOR BORAX-2", "ALCHEMICAL SYMBOL FOR BORAX-3", "ALCHEMICAL SYMBOL FOR ALUM", "ALCHEMICAL SYMBOL FOR OIL", "ALCHEMICAL SYMBOL FOR SPIRIT", "ALCHEMICAL SYMBOL FOR TINCTURE", "ALCHEMICAL SYMBOL FOR GUM", "ALCHEMICAL SYMBOL FOR WAX", "ALCHEMICAL SYMBOL FOR POWDER", "ALCHEMICAL SYMBOL FOR CALX", "ALCHEMICAL SYMBOL FOR TUTTY", "ALCHEMICAL SYMBOL FOR CAPUT MORTUUM", "ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE", "ALCHEMICAL SYMBOL FOR CADUCEUS", "ALCHEMICAL SYMBOL FOR TRIDENT", "ALCHEMICAL SYMBOL FOR STARRED TRIDENT", "ALCHEMICAL SYMBOL FOR LODESTONE", "ALCHEMICAL SYMBOL FOR SOAP", "ALCHEMICAL SYMBOL FOR URINE", "ALCHEMICAL SYMBOL FOR HORSE DUNG", "ALCHEMICAL SYMBOL FOR ASHES", "ALCHEMICAL SYMBOL FOR POT ASHES", "ALCHEMICAL SYMBOL FOR BRICK", "ALCHEMICAL SYMBOL FOR POWDERED BRICK", "ALCHEMICAL SYMBOL FOR AMALGAM", "ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM", "ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2", "ALCHEMICAL SYMBOL FOR SUBLIMATION", "ALCHEMICAL SYMBOL FOR PRECIPITATE", "ALCHEMICAL SYMBOL FOR DISTILL", "ALCHEMICAL SYMBOL FOR DISSOLVE", "ALCHEMICAL SYMBOL FOR DISSOLVE-2", "ALCHEMICAL SYMBOL FOR PURIFY", "ALCHEMICAL SYMBOL FOR PUTREFACTION", "ALCHEMICAL SYMBOL FOR CRUCIBLE", "ALCHEMICAL SYMBOL FOR CRUCIBLE-2", "ALCHEMICAL SYMBOL FOR CRUCIBLE-3", "ALCHEMICAL SYMBOL FOR CRUCIBLE-4", "ALCHEMICAL SYMBOL FOR CRUCIBLE-5", "ALCHEMICAL SYMBOL FOR ALEMBIC", "ALCHEMICAL SYMBOL FOR BATH OF MARY", "ALCHEMICAL SYMBOL FOR BATH OF VAPOURS", "ALCHEMICAL SYMBOL FOR RETORT", "ALCHEMICAL SYMBOL FOR HOUR", "ALCHEMICAL SYMBOL FOR NIGHT", "ALCHEMICAL SYMBOL FOR DAY-NIGHT", "ALCHEMICAL SYMBOL FOR MONTH", "ALCHEMICAL SYMBOL FOR HALF DRAM", "ALCHEMICAL SYMBOL FOR HALF OUNCE", "BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE", "BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE", "BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE", "BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE", "BLACK SLIGHTLY SMALL CIRCLE", "MEDIUM BOLD WHITE CIRCLE", "BOLD WHITE CIRCLE", "HEAVY WHITE CIRCLE", "VERY HEAVY WHITE CIRCLE", "EXTREMELY HEAVY WHITE CIRCLE", "WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE", "ROUND TARGET", "BLACK TINY SQUARE", "BLACK SLIGHTLY SMALL SQUARE", "LIGHT WHITE SQUARE", "MEDIUM WHITE SQUARE", "BOLD WHITE SQUARE", "HEAVY WHITE SQUARE", "VERY HEAVY WHITE SQUARE", "EXTREMELY HEAVY WHITE SQUARE", "WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE", "WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE", "SQUARE TARGET", "BLACK TINY DIAMOND", "BLACK VERY SMALL DIAMOND", "BLACK MEDIUM SMALL DIAMOND", "WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND", "WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND", "DIAMOND TARGET", "BLACK TINY LOZENGE", "BLACK VERY SMALL LOZENGE", "BLACK MEDIUM SMALL LOZENGE", "WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE", "THIN GREEK CROSS", "LIGHT GREEK CROSS", "MEDIUM GREEK CROSS", "BOLD GREEK CROSS", "VERY BOLD GREEK CROSS", "VERY HEAVY GREEK CROSS", "EXTREMELY HEAVY GREEK CROSS", "THIN SALTIRE", "LIGHT SALTIRE", "MEDIUM SALTIRE", "BOLD SALTIRE", "HEAVY SALTIRE", "VERY HEAVY SALTIRE", "EXTREMELY HEAVY SALTIRE", "LIGHT FIVE SPOKED ASTERISK", "MEDIUM FIVE SPOKED ASTERISK", "BOLD FIVE SPOKED ASTERISK", "HEAVY FIVE SPOKED ASTERISK", "VERY HEAVY FIVE SPOKED ASTERISK", "EXTREMELY HEAVY FIVE SPOKED ASTERISK", "LIGHT SIX SPOKED ASTERISK", "MEDIUM SIX SPOKED ASTERISK", "BOLD SIX SPOKED ASTERISK", "HEAVY SIX SPOKED ASTERISK", "VERY HEAVY SIX SPOKED ASTERISK", "EXTREMELY HEAVY SIX SPOKED ASTERISK", "LIGHT EIGHT SPOKED ASTERISK", "MEDIUM EIGHT SPOKED ASTERISK", "BOLD EIGHT SPOKED ASTERISK", "HEAVY EIGHT SPOKED ASTERISK", "VERY HEAVY EIGHT SPOKED ASTERISK", "LIGHT THREE POINTED BLACK STAR", "MEDIUM THREE POINTED BLACK STAR", "THREE POINTED BLACK STAR", "MEDIUM THREE POINTED PINWHEEL STAR", "LIGHT FOUR POINTED BLACK STAR", "MEDIUM FOUR POINTED BLACK STAR", "FOUR POINTED BLACK STAR", "MEDIUM FOUR POINTED PINWHEEL STAR", "REVERSE LIGHT FOUR POINTED PINWHEEL STAR", "LIGHT FIVE POINTED BLACK STAR", "HEAVY FIVE POINTED BLACK STAR", "MEDIUM SIX POINTED BLACK STAR", "HEAVY SIX POINTED BLACK STAR", "SIX POINTED PINWHEEL STAR", "MEDIUM EIGHT POINTED BLACK STAR", "HEAVY EIGHT POINTED BLACK STAR", "VERY HEAVY EIGHT POINTED BLACK STAR", "HEAVY EIGHT POINTED PINWHEEL STAR", "LIGHT TWELVE POINTED BLACK STAR", "HEAVY TWELVE POINTED BLACK STAR", "HEAVY TWELVE POINTED PINWHEEL STAR", "CIRCLED TRIANGLE", "NEGATIVE CIRCLED TRIANGLE", "CIRCLED SQUARE", "NEGATIVE CIRCLED SQUARE", "LARGE ORANGE CIRCLE", "LARGE YELLOW CIRCLE", "LARGE GREEN CIRCLE", "LARGE PURPLE CIRCLE", "LARGE BROWN CIRCLE", "LARGE RED SQUARE", "LARGE BLUE SQUARE", "LARGE ORANGE SQUARE", "LARGE YELLOW SQUARE", "LARGE GREEN SQUARE", "LARGE PURPLE SQUARE", "LARGE BROWN SQUARE", "LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD", "UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD", "RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD", "DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD", "LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD", "UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD", "RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD", "DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD", "LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD", "UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD", "RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD", "DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD", "LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD", "UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD", "RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD", "DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD", "LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD", "UPWARDS ARROW WITH EQUILATERAL ARROWHEAD", "RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD", "DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD", "HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD", "HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD", "HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD", "HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD", "HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD", "HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD", "HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD", "HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD", "LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT", "UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT", "DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT", "LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT", "UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT", "DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT", "LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT", "UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT", "DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT", "LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT", "UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT", "DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT", "LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT", "UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT", "RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT", "DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT", "LEFTWARDS FINGER-POST ARROW", "UPWARDS FINGER-POST ARROW", "RIGHTWARDS FINGER-POST ARROW", "DOWNWARDS FINGER-POST ARROW", "LEFTWARDS SQUARED ARROW", "UPWARDS SQUARED ARROW", "RIGHTWARDS SQUARED ARROW", "DOWNWARDS SQUARED ARROW", "LEFTWARDS COMPRESSED ARROW", "UPWARDS COMPRESSED ARROW", "RIGHTWARDS COMPRESSED ARROW", "DOWNWARDS COMPRESSED ARROW", "LEFTWARDS HEAVY COMPRESSED ARROW", "UPWARDS HEAVY COMPRESSED ARROW", "RIGHTWARDS HEAVY COMPRESSED ARROW", "DOWNWARDS HEAVY COMPRESSED ARROW", "LEFTWARDS HEAVY ARROW", "UPWARDS HEAVY ARROW", "RIGHTWARDS HEAVY ARROW", "DOWNWARDS HEAVY ARROW", "LEFTWARDS SANS-SERIF ARROW", "UPWARDS SANS-SERIF ARROW", "RIGHTWARDS SANS-SERIF ARROW", "DOWNWARDS SANS-SERIF ARROW", "NORTH WEST SANS-SERIF ARROW", "NORTH EAST SANS-SERIF ARROW", "SOUTH EAST SANS-SERIF ARROW", "SOUTH WEST SANS-SERIF ARROW", "LEFT RIGHT SANS-SERIF ARROW", "UP DOWN SANS-SERIF ARROW", "WIDE-HEADED LEFTWARDS LIGHT BARB ARROW", "WIDE-HEADED UPWARDS LIGHT BARB ARROW", "WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW", "WIDE-HEADED DOWNWARDS LIGHT BARB ARROW", "WIDE-HEADED NORTH WEST LIGHT BARB ARROW", "WIDE-HEADED NORTH EAST LIGHT BARB ARROW", "WIDE-HEADED SOUTH EAST LIGHT BARB ARROW", "WIDE-HEADED SOUTH WEST LIGHT BARB ARROW", "WIDE-HEADED LEFTWARDS BARB ARROW", "WIDE-HEADED UPWARDS BARB ARROW", "WIDE-HEADED RIGHTWARDS BARB ARROW", "WIDE-HEADED DOWNWARDS BARB ARROW", "WIDE-HEADED NORTH WEST BARB ARROW", "WIDE-HEADED NORTH EAST BARB ARROW", "WIDE-HEADED SOUTH EAST BARB ARROW", "WIDE-HEADED SOUTH WEST BARB ARROW", "WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW", "WIDE-HEADED UPWARDS MEDIUM BARB ARROW", "WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW", "WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW", "WIDE-HEADED NORTH WEST MEDIUM BARB ARROW", "WIDE-HEADED NORTH EAST MEDIUM BARB ARROW", "WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW", "WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW", "WIDE-HEADED LEFTWARDS HEAVY BARB ARROW", "WIDE-HEADED UPWARDS HEAVY BARB ARROW", "WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW", "WIDE-HEADED DOWNWARDS HEAVY BARB ARROW", "WIDE-HEADED NORTH WEST HEAVY BARB ARROW", "WIDE-HEADED NORTH EAST HEAVY BARB ARROW", "WIDE-HEADED SOUTH EAST HEAVY BARB ARROW", "WIDE-HEADED SOUTH WEST HEAVY BARB ARROW", "WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW", "WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW", "WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW", "WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW", "WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW", "WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW", "WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW", "WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW", "LEFTWARDS TRIANGLE ARROWHEAD", "UPWARDS TRIANGLE ARROWHEAD", "RIGHTWARDS TRIANGLE ARROWHEAD", "DOWNWARDS TRIANGLE ARROWHEAD", "LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD", "UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD", "RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD", "DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD", "LEFTWARDS ARROW WITH NOTCHED TAIL", "UPWARDS ARROW WITH NOTCHED TAIL", "RIGHTWARDS ARROW WITH NOTCHED TAIL", "DOWNWARDS ARROW WITH NOTCHED TAIL", "HEAVY ARROW SHAFT WIDTH ONE", "HEAVY ARROW SHAFT WIDTH TWO THIRDS", "HEAVY ARROW SHAFT WIDTH ONE HALF", "HEAVY ARROW SHAFT WIDTH ONE THIRD", "LEFTWARDS BOTTOM-SHADED WHITE ARROW", "RIGHTWARDS BOTTOM SHADED WHITE ARROW", "LEFTWARDS TOP SHADED WHITE ARROW", "RIGHTWARDS TOP SHADED WHITE ARROW", "LEFTWARDS LEFT-SHADED WHITE ARROW", "RIGHTWARDS RIGHT-SHADED WHITE ARROW", "LEFTWARDS RIGHT-SHADED WHITE ARROW", "RIGHTWARDS LEFT-SHADED WHITE ARROW", "LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW", "RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW", "LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW", "RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW", "WHITE ARROW SHAFT WIDTH ONE", "WHITE ARROW SHAFT WIDTH TWO THIRDS", "CIRCLED CROSS FORMEE WITH FOUR DOTS", "CIRCLED CROSS FORMEE WITH TWO DOTS", "CIRCLED CROSS FORMEE", "LEFT HALF CIRCLE WITH FOUR DOTS", "LEFT HALF CIRCLE WITH THREE DOTS", "LEFT HALF CIRCLE WITH TWO DOTS", "LEFT HALF CIRCLE WITH DOT", "LEFT HALF CIRCLE", "DOWNWARD FACING HOOK", "DOWNWARD FACING NOTCHED HOOK", "DOWNWARD FACING HOOK WITH DOT", "DOWNWARD FACING NOTCHED HOOK WITH DOT", "WHITE HEART", "BROWN HEART", "PINCHING HAND", "ZIPPER-MOUTH FACE", "MONEY-MOUTH FACE", "FACE WITH THERMOMETER", "NERD FACE", "THINKING FACE", "FACE WITH HEAD-BANDAGE", "ROBOT FACE", "HUGGING FACE", "SIGN OF THE HORNS", "CALL ME HAND", "RAISED BACK OF HAND", "LEFT-FACING FIST", "RIGHT-FACING FIST", "HANDSHAKE", "HAND WITH INDEX AND MIDDLE FINGERS CROSSED", "I LOVE YOU HAND SIGN", "FACE WITH COWBOY HAT", "CLOWN FACE", "NAUSEATED FACE", "ROLLING ON THE FLOOR LAUGHING", "DROOLING FACE", "LYING FACE", "FACE PALM", "SNEEZING FACE", "FACE WITH ONE EYEBROW RAISED", "GRINNING FACE WITH STAR EYES", "GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE", "FACE WITH FINGER COVERING CLOSED LIPS", "SERIOUS FACE WITH SYMBOLS COVERING MOUTH", "SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH", "FACE WITH OPEN MOUTH VOMITING", "SHOCKED FACE WITH EXPLODING HEAD", "PREGNANT WOMAN", "BREAST-FEEDING", "PALMS UP TOGETHER", "SELFIE", "PRINCE", "MAN IN TUXEDO", "MOTHER CHRISTMAS", "SHRUG", "PERSON DOING CARTWHEEL", "JUGGLING", "FENCER", "MODERN PENTATHLON", "WRESTLERS", "WATER POLO", "HANDBALL", "DIVING MASK", "WILTED FLOWER", "DRUM WITH DRUMSTICKS", "CLINKING GLASSES", "TUMBLER GLASS", "SPOON", "GOAL NET", "RIFLE", "FIRST PLACE MEDAL", "SECOND PLACE MEDAL", "THIRD PLACE MEDAL", "BOXING GLOVE", "MARTIAL ARTS UNIFORM", "CURLING STONE", "LACROSSE STICK AND BALL", "SOFTBALL", "FLYING DISC", "CROISSANT", "AVOCADO", "CUCUMBER", "BACON", "POTATO", "CARROT", "BAGUETTE BREAD", "GREEN SALAD", "SHALLOW PAN OF FOOD", "STUFFED FLATBREAD", "EGG", "GLASS OF MILK", "PEANUTS", "KIWIFRUIT", "PANCAKES", "DUMPLING", "FORTUNE COOKIE", "TAKEOUT BOX", "CHOPSTICKS", "BOWL WITH SPOON", "CUP WITH STRAW", "COCONUT", "BROCCOLI", "PIE", "PRETZEL", "CUT OF MEAT", "SANDWICH", "CANNED FOOD", "LEAFY GREEN", "MANGO", "MOON CAKE", "BAGEL", "SMILING FACE WITH SMILING EYES AND THREE HEARTS", "YAWNING FACE", "FACE WITH PARTY HORN AND PARTY HAT", "FACE WITH UNEVEN EYES AND WAVY MOUTH", "OVERHEATED FACE", "FREEZING FACE", "FACE WITH PLEADING EYES", "SARI", "LAB COAT", "GOGGLES", "HIKING BOOT", "FLAT SHOE", "CRAB", "LION FACE", "SCORPION", "TURKEY", "UNICORN FACE", "EAGLE", "DUCK", "BAT", "SHARK", "OWL", "FOX FACE", "BUTTERFLY", "DEER", "GORILLA", "LIZARD", "RHINOCEROS", "SHRIMP", "SQUID", "GIRAFFE FACE", "ZEBRA FACE", "HEDGEHOG", "SAUROPOD", "T-REX", "CRICKET", "KANGAROO", "LLAMA", "PEACOCK", "HIPPOPOTAMUS", "PARROT", "RACCOON", "LOBSTER", "MOSQUITO", "MICROBE", "BADGER", "SWAN", "SLOTH", "OTTER", "ORANGUTAN", "SKUNK", "FLAMINGO", "OYSTER", "GUIDE DOG", "PROBING CANE", "EMOJI COMPONENT RED HAIR", "EMOJI COMPONENT CURLY HAIR", "EMOJI COMPONENT BALD", "EMOJI COMPONENT WHITE HAIR", "BONE", "LEG", "FOOT", "TOOTH", "SUPERHERO", "SUPERVILLAIN", "SAFETY VEST", "EAR WITH HEARING AID", "MOTORIZED WHEELCHAIR", "MANUAL WHEELCHAIR", "MECHANICAL ARM", "MECHANICAL LEG", "CHEESE WEDGE", "CUPCAKE", "SALT SHAKER", "BEVERAGE BOX", "GARLIC", "ONION", "FALAFEL", "WAFFLE", "BUTTER", "MATE DRINK", "ICE CUBE", "STANDING PERSON", "KNEELING PERSON", "DEAF PERSON", "FACE WITH MONOCLE", "ADULT", "CHILD", "OLDER ADULT", "BEARDED PERSON", "PERSON WITH HEADSCARF", "PERSON IN STEAMY ROOM", "PERSON CLIMBING", "PERSON IN LOTUS POSITION", "MAGE", "FAIRY", "VAMPIRE", "MERPERSON", "ELF", "GENIE", "ZOMBIE", "BRAIN", "ORANGE HEART", "BILLED CAP", "SCARF", "GLOVES", "COAT", "SOCKS", "RED GIFT ENVELOPE", "FIRECRACKER", "JIGSAW PUZZLE PIECE", "TEST TUBE", "PETRI DISH", "DNA DOUBLE HELIX", "COMPASS", "ABACUS", "FIRE EXTINGUISHER", "TOOLBOX", "BRICK", "MAGNET", "LUGGAGE", "LOTION BOTTLE", "SPOOL OF THREAD", "BALL OF YARN", "SAFETY PIN", "TEDDY BEAR", "BROOM", "BASKET", "ROLL OF PAPER", "BAR OF SOAP", "SPONGE", "RECEIPT", "NAZAR AMULET", "NEUTRAL CHESS KING", "NEUTRAL CHESS QUEEN", "NEUTRAL CHESS ROOK", "NEUTRAL CHESS BISHOP", "NEUTRAL CHESS KNIGHT", "NEUTRAL CHESS PAWN", "WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES", "BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES", "NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES", "WHITE CHESS KING ROTATED NINETY DEGREES", "WHITE CHESS QUEEN ROTATED NINETY DEGREES", "WHITE CHESS ROOK ROTATED NINETY DEGREES", "WHITE CHESS BISHOP ROTATED NINETY DEGREES", "WHITE CHESS KNIGHT ROTATED NINETY DEGREES", "WHITE CHESS PAWN ROTATED NINETY DEGREES", "BLACK CHESS KING ROTATED NINETY DEGREES", "BLACK CHESS QUEEN ROTATED NINETY DEGREES", "BLACK CHESS ROOK ROTATED NINETY DEGREES", "BLACK CHESS BISHOP ROTATED NINETY DEGREES", "BLACK CHESS KNIGHT ROTATED NINETY DEGREES", "BLACK CHESS PAWN ROTATED NINETY DEGREES", "NEUTRAL CHESS KING ROTATED NINETY DEGREES", "NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES", "NEUTRAL CHESS ROOK ROTATED NINETY DEGREES", "NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES", "NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES", "NEUTRAL CHESS PAWN ROTATED NINETY DEGREES", "WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES", "BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES", "NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES", "WHITE CHESS TURNED KING", "WHITE CHESS TURNED QUEEN", "WHITE CHESS TURNED ROOK", "WHITE CHESS TURNED BISHOP", "WHITE CHESS TURNED KNIGHT", "WHITE CHESS TURNED PAWN", "BLACK CHESS TURNED KING", "BLACK CHESS TURNED QUEEN", "BLACK CHESS TURNED ROOK", "BLACK CHESS TURNED BISHOP", "BLACK CHESS TURNED KNIGHT", "BLACK CHESS TURNED PAWN", "NEUTRAL CHESS TURNED KING", "NEUTRAL CHESS TURNED QUEEN", "NEUTRAL CHESS TURNED ROOK", "NEUTRAL CHESS TURNED BISHOP", "NEUTRAL CHESS TURNED KNIGHT", "NEUTRAL CHESS TURNED PAWN", "WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES", "BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES", "NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES", "WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES", "BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES", "NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES", "WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES", "BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES", "NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES", "WHITE CHESS EQUIHOPPER", "BLACK CHESS EQUIHOPPER", "NEUTRAL CHESS EQUIHOPPER", "WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES", "BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES", "NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES", "WHITE CHESS KNIGHT-QUEEN", "WHITE CHESS KNIGHT-ROOK", "WHITE CHESS KNIGHT-BISHOP", "BLACK CHESS KNIGHT-QUEEN", "BLACK CHESS KNIGHT-ROOK", "BLACK CHESS KNIGHT-BISHOP", "XIANGQI RED GENERAL", "XIANGQI RED MANDARIN", "XIANGQI RED ELEPHANT", "XIANGQI RED HORSE", "XIANGQI RED CHARIOT", "XIANGQI RED CANNON", "XIANGQI RED SOLDIER", "XIANGQI BLACK GENERAL", "XIANGQI BLACK MANDARIN", "XIANGQI BLACK ELEPHANT", "XIANGQI BLACK HORSE", "XIANGQI BLACK CHARIOT", "XIANGQI BLACK CANNON", "XIANGQI BLACK SOLDIER", "BALLET SHOES", "ONE-PIECE SWIMSUIT", "BRIEFS", "SHORTS", "DROP OF BLOOD", "ADHESIVE BANDAGE", "STETHOSCOPE", "YO-YO", "KITE", "PARACHUTE", "RINGED PLANET", "CHAIR", "RAZOR", "AXE", "DIYA LAMP", "BANJO", "", "", "", "", "", "", "", "", "", "", "CJK COMPATIBILITY IDEOGRAPH-2F800", "CJK COMPATIBILITY IDEOGRAPH-2F801", "CJK COMPATIBILITY IDEOGRAPH-2F802", "CJK COMPATIBILITY IDEOGRAPH-2F803", "CJK COMPATIBILITY IDEOGRAPH-2F804", "CJK COMPATIBILITY IDEOGRAPH-2F805", "CJK COMPATIBILITY IDEOGRAPH-2F806", "CJK COMPATIBILITY IDEOGRAPH-2F807", "CJK COMPATIBILITY IDEOGRAPH-2F808", "CJK COMPATIBILITY IDEOGRAPH-2F809", "CJK COMPATIBILITY IDEOGRAPH-2F80A", "CJK COMPATIBILITY IDEOGRAPH-2F80B", "CJK COMPATIBILITY IDEOGRAPH-2F80C", "CJK COMPATIBILITY IDEOGRAPH-2F80D", "CJK COMPATIBILITY IDEOGRAPH-2F80E", "CJK COMPATIBILITY IDEOGRAPH-2F80F", "CJK COMPATIBILITY IDEOGRAPH-2F810", "CJK COMPATIBILITY IDEOGRAPH-2F811", "CJK COMPATIBILITY IDEOGRAPH-2F812", "CJK COMPATIBILITY IDEOGRAPH-2F813", "CJK COMPATIBILITY IDEOGRAPH-2F814", "CJK COMPATIBILITY IDEOGRAPH-2F815", "CJK COMPATIBILITY IDEOGRAPH-2F816", "CJK COMPATIBILITY IDEOGRAPH-2F817", "CJK COMPATIBILITY IDEOGRAPH-2F818", "CJK COMPATIBILITY IDEOGRAPH-2F819", "CJK COMPATIBILITY IDEOGRAPH-2F81A", "CJK COMPATIBILITY IDEOGRAPH-2F81B", "CJK COMPATIBILITY IDEOGRAPH-2F81C", "CJK COMPATIBILITY IDEOGRAPH-2F81D", "CJK COMPATIBILITY IDEOGRAPH-2F81E", "CJK COMPATIBILITY IDEOGRAPH-2F81F", "CJK COMPATIBILITY IDEOGRAPH-2F820", "CJK COMPATIBILITY IDEOGRAPH-2F821", "CJK COMPATIBILITY IDEOGRAPH-2F822", "CJK COMPATIBILITY IDEOGRAPH-2F823", "CJK COMPATIBILITY IDEOGRAPH-2F824", "CJK COMPATIBILITY IDEOGRAPH-2F825", "CJK COMPATIBILITY IDEOGRAPH-2F826", "CJK COMPATIBILITY IDEOGRAPH-2F827", "CJK COMPATIBILITY IDEOGRAPH-2F828", "CJK COMPATIBILITY IDEOGRAPH-2F829", "CJK COMPATIBILITY IDEOGRAPH-2F82A", "CJK COMPATIBILITY IDEOGRAPH-2F82B", "CJK COMPATIBILITY IDEOGRAPH-2F82C", "CJK COMPATIBILITY IDEOGRAPH-2F82D", "CJK COMPATIBILITY IDEOGRAPH-2F82E", "CJK COMPATIBILITY IDEOGRAPH-2F82F", "CJK COMPATIBILITY IDEOGRAPH-2F830", "CJK COMPATIBILITY IDEOGRAPH-2F831", "CJK COMPATIBILITY IDEOGRAPH-2F832", "CJK COMPATIBILITY IDEOGRAPH-2F833", "CJK COMPATIBILITY IDEOGRAPH-2F834", "CJK COMPATIBILITY IDEOGRAPH-2F835", "CJK COMPATIBILITY IDEOGRAPH-2F836", "CJK COMPATIBILITY IDEOGRAPH-2F837", "CJK COMPATIBILITY IDEOGRAPH-2F838", "CJK COMPATIBILITY IDEOGRAPH-2F839", "CJK COMPATIBILITY IDEOGRAPH-2F83A", "CJK COMPATIBILITY IDEOGRAPH-2F83B", "CJK COMPATIBILITY IDEOGRAPH-2F83C", "CJK COMPATIBILITY IDEOGRAPH-2F83D", "CJK COMPATIBILITY IDEOGRAPH-2F83E", "CJK COMPATIBILITY IDEOGRAPH-2F83F", "CJK COMPATIBILITY IDEOGRAPH-2F840", "CJK COMPATIBILITY IDEOGRAPH-2F841", "CJK COMPATIBILITY IDEOGRAPH-2F842", "CJK COMPATIBILITY IDEOGRAPH-2F843", "CJK COMPATIBILITY IDEOGRAPH-2F844", "CJK COMPATIBILITY IDEOGRAPH-2F845", "CJK COMPATIBILITY IDEOGRAPH-2F846", "CJK COMPATIBILITY IDEOGRAPH-2F847", "CJK COMPATIBILITY IDEOGRAPH-2F848", "CJK COMPATIBILITY IDEOGRAPH-2F849", "CJK COMPATIBILITY IDEOGRAPH-2F84A", "CJK COMPATIBILITY IDEOGRAPH-2F84B", "CJK COMPATIBILITY IDEOGRAPH-2F84C", "CJK COMPATIBILITY IDEOGRAPH-2F84D", "CJK COMPATIBILITY IDEOGRAPH-2F84E", "CJK COMPATIBILITY IDEOGRAPH-2F84F", "CJK COMPATIBILITY IDEOGRAPH-2F850", "CJK COMPATIBILITY IDEOGRAPH-2F851", "CJK COMPATIBILITY IDEOGRAPH-2F852", "CJK COMPATIBILITY IDEOGRAPH-2F853", "CJK COMPATIBILITY IDEOGRAPH-2F854", "CJK COMPATIBILITY IDEOGRAPH-2F855", "CJK COMPATIBILITY IDEOGRAPH-2F856", "CJK COMPATIBILITY IDEOGRAPH-2F857", "CJK COMPATIBILITY IDEOGRAPH-2F858", "CJK COMPATIBILITY IDEOGRAPH-2F859", "CJK COMPATIBILITY IDEOGRAPH-2F85A", "CJK COMPATIBILITY IDEOGRAPH-2F85B", "CJK COMPATIBILITY IDEOGRAPH-2F85C", "CJK COMPATIBILITY IDEOGRAPH-2F85D", "CJK COMPATIBILITY IDEOGRAPH-2F85E", "CJK COMPATIBILITY IDEOGRAPH-2F85F", "CJK COMPATIBILITY IDEOGRAPH-2F860", "CJK COMPATIBILITY IDEOGRAPH-2F861", "CJK COMPATIBILITY IDEOGRAPH-2F862", "CJK COMPATIBILITY IDEOGRAPH-2F863", "CJK COMPATIBILITY IDEOGRAPH-2F864", "CJK COMPATIBILITY IDEOGRAPH-2F865", "CJK COMPATIBILITY IDEOGRAPH-2F866", "CJK COMPATIBILITY IDEOGRAPH-2F867", "CJK COMPATIBILITY IDEOGRAPH-2F868", "CJK COMPATIBILITY IDEOGRAPH-2F869", "CJK COMPATIBILITY IDEOGRAPH-2F86A", "CJK COMPATIBILITY IDEOGRAPH-2F86B", "CJK COMPATIBILITY IDEOGRAPH-2F86C", "CJK COMPATIBILITY IDEOGRAPH-2F86D", "CJK COMPATIBILITY IDEOGRAPH-2F86E", "CJK COMPATIBILITY IDEOGRAPH-2F86F", "CJK COMPATIBILITY IDEOGRAPH-2F870", "CJK COMPATIBILITY IDEOGRAPH-2F871", "CJK COMPATIBILITY IDEOGRAPH-2F872", "CJK COMPATIBILITY IDEOGRAPH-2F873", "CJK COMPATIBILITY IDEOGRAPH-2F874", "CJK COMPATIBILITY IDEOGRAPH-2F875", "CJK COMPATIBILITY IDEOGRAPH-2F876", "CJK COMPATIBILITY IDEOGRAPH-2F877", "CJK COMPATIBILITY IDEOGRAPH-2F878", "CJK COMPATIBILITY IDEOGRAPH-2F879", "CJK COMPATIBILITY IDEOGRAPH-2F87A", "CJK COMPATIBILITY IDEOGRAPH-2F87B", "CJK COMPATIBILITY IDEOGRAPH-2F87C", "CJK COMPATIBILITY IDEOGRAPH-2F87D", "CJK COMPATIBILITY IDEOGRAPH-2F87E", "CJK COMPATIBILITY IDEOGRAPH-2F87F", "CJK COMPATIBILITY IDEOGRAPH-2F880", "CJK COMPATIBILITY IDEOGRAPH-2F881", "CJK COMPATIBILITY IDEOGRAPH-2F882", "CJK COMPATIBILITY IDEOGRAPH-2F883", "CJK COMPATIBILITY IDEOGRAPH-2F884", "CJK COMPATIBILITY IDEOGRAPH-2F885", "CJK COMPATIBILITY IDEOGRAPH-2F886", "CJK COMPATIBILITY IDEOGRAPH-2F887", "CJK COMPATIBILITY IDEOGRAPH-2F888", "CJK COMPATIBILITY IDEOGRAPH-2F889", "CJK COMPATIBILITY IDEOGRAPH-2F88A", "CJK COMPATIBILITY IDEOGRAPH-2F88B", "CJK COMPATIBILITY IDEOGRAPH-2F88C", "CJK COMPATIBILITY IDEOGRAPH-2F88D", "CJK COMPATIBILITY IDEOGRAPH-2F88E", "CJK COMPATIBILITY IDEOGRAPH-2F88F", "CJK COMPATIBILITY IDEOGRAPH-2F890", "CJK COMPATIBILITY IDEOGRAPH-2F891", "CJK COMPATIBILITY IDEOGRAPH-2F892", "CJK COMPATIBILITY IDEOGRAPH-2F893", "CJK COMPATIBILITY IDEOGRAPH-2F894", "CJK COMPATIBILITY IDEOGRAPH-2F895", "CJK COMPATIBILITY IDEOGRAPH-2F896", "CJK COMPATIBILITY IDEOGRAPH-2F897", "CJK COMPATIBILITY IDEOGRAPH-2F898", "CJK COMPATIBILITY IDEOGRAPH-2F899", "CJK COMPATIBILITY IDEOGRAPH-2F89A", "CJK COMPATIBILITY IDEOGRAPH-2F89B", "CJK COMPATIBILITY IDEOGRAPH-2F89C", "CJK COMPATIBILITY IDEOGRAPH-2F89D", "CJK COMPATIBILITY IDEOGRAPH-2F89E", "CJK COMPATIBILITY IDEOGRAPH-2F89F", "CJK COMPATIBILITY IDEOGRAPH-2F8A0", "CJK COMPATIBILITY IDEOGRAPH-2F8A1", "CJK COMPATIBILITY IDEOGRAPH-2F8A2", "CJK COMPATIBILITY IDEOGRAPH-2F8A3", "CJK COMPATIBILITY IDEOGRAPH-2F8A4", "CJK COMPATIBILITY IDEOGRAPH-2F8A5", "CJK COMPATIBILITY IDEOGRAPH-2F8A6", "CJK COMPATIBILITY IDEOGRAPH-2F8A7", "CJK COMPATIBILITY IDEOGRAPH-2F8A8", "CJK COMPATIBILITY IDEOGRAPH-2F8A9", "CJK COMPATIBILITY IDEOGRAPH-2F8AA", "CJK COMPATIBILITY IDEOGRAPH-2F8AB", "CJK COMPATIBILITY IDEOGRAPH-2F8AC", "CJK COMPATIBILITY IDEOGRAPH-2F8AD", "CJK COMPATIBILITY IDEOGRAPH-2F8AE", "CJK COMPATIBILITY IDEOGRAPH-2F8AF", "CJK COMPATIBILITY IDEOGRAPH-2F8B0", "CJK COMPATIBILITY IDEOGRAPH-2F8B1", "CJK COMPATIBILITY IDEOGRAPH-2F8B2", "CJK COMPATIBILITY IDEOGRAPH-2F8B3", "CJK COMPATIBILITY IDEOGRAPH-2F8B4", "CJK COMPATIBILITY IDEOGRAPH-2F8B5", "CJK COMPATIBILITY IDEOGRAPH-2F8B6", "CJK COMPATIBILITY IDEOGRAPH-2F8B7", "CJK COMPATIBILITY IDEOGRAPH-2F8B8", "CJK COMPATIBILITY IDEOGRAPH-2F8B9", "CJK COMPATIBILITY IDEOGRAPH-2F8BA", "CJK COMPATIBILITY IDEOGRAPH-2F8BB", "CJK COMPATIBILITY IDEOGRAPH-2F8BC", "CJK COMPATIBILITY IDEOGRAPH-2F8BD", "CJK COMPATIBILITY IDEOGRAPH-2F8BE", "CJK COMPATIBILITY IDEOGRAPH-2F8BF", "CJK COMPATIBILITY IDEOGRAPH-2F8C0", "CJK COMPATIBILITY IDEOGRAPH-2F8C1", "CJK COMPATIBILITY IDEOGRAPH-2F8C2", "CJK COMPATIBILITY IDEOGRAPH-2F8C3", "CJK COMPATIBILITY IDEOGRAPH-2F8C4", "CJK COMPATIBILITY IDEOGRAPH-2F8C5", "CJK COMPATIBILITY IDEOGRAPH-2F8C6", "CJK COMPATIBILITY IDEOGRAPH-2F8C7", "CJK COMPATIBILITY IDEOGRAPH-2F8C8", "CJK COMPATIBILITY IDEOGRAPH-2F8C9", "CJK COMPATIBILITY IDEOGRAPH-2F8CA", "CJK COMPATIBILITY IDEOGRAPH-2F8CB", "CJK COMPATIBILITY IDEOGRAPH-2F8CC", "CJK COMPATIBILITY IDEOGRAPH-2F8CD", "CJK COMPATIBILITY IDEOGRAPH-2F8CE", "CJK COMPATIBILITY IDEOGRAPH-2F8CF", "CJK COMPATIBILITY IDEOGRAPH-2F8D0", "CJK COMPATIBILITY IDEOGRAPH-2F8D1", "CJK COMPATIBILITY IDEOGRAPH-2F8D2", "CJK COMPATIBILITY IDEOGRAPH-2F8D3", "CJK COMPATIBILITY IDEOGRAPH-2F8D4", "CJK COMPATIBILITY IDEOGRAPH-2F8D5", "CJK COMPATIBILITY IDEOGRAPH-2F8D6", "CJK COMPATIBILITY IDEOGRAPH-2F8D7", "CJK COMPATIBILITY IDEOGRAPH-2F8D8", "CJK COMPATIBILITY IDEOGRAPH-2F8D9", "CJK COMPATIBILITY IDEOGRAPH-2F8DA", "CJK COMPATIBILITY IDEOGRAPH-2F8DB", "CJK COMPATIBILITY IDEOGRAPH-2F8DC", "CJK COMPATIBILITY IDEOGRAPH-2F8DD", "CJK COMPATIBILITY IDEOGRAPH-2F8DE", "CJK COMPATIBILITY IDEOGRAPH-2F8DF", "CJK COMPATIBILITY IDEOGRAPH-2F8E0", "CJK COMPATIBILITY IDEOGRAPH-2F8E1", "CJK COMPATIBILITY IDEOGRAPH-2F8E2", "CJK COMPATIBILITY IDEOGRAPH-2F8E3", "CJK COMPATIBILITY IDEOGRAPH-2F8E4", "CJK COMPATIBILITY IDEOGRAPH-2F8E5", "CJK COMPATIBILITY IDEOGRAPH-2F8E6", "CJK COMPATIBILITY IDEOGRAPH-2F8E7", "CJK COMPATIBILITY IDEOGRAPH-2F8E8", "CJK COMPATIBILITY IDEOGRAPH-2F8E9", "CJK COMPATIBILITY IDEOGRAPH-2F8EA", "CJK COMPATIBILITY IDEOGRAPH-2F8EB", "CJK COMPATIBILITY IDEOGRAPH-2F8EC", "CJK COMPATIBILITY IDEOGRAPH-2F8ED", "CJK COMPATIBILITY IDEOGRAPH-2F8EE", "CJK COMPATIBILITY IDEOGRAPH-2F8EF", "CJK COMPATIBILITY IDEOGRAPH-2F8F0", "CJK COMPATIBILITY IDEOGRAPH-2F8F1", "CJK COMPATIBILITY IDEOGRAPH-2F8F2", "CJK COMPATIBILITY IDEOGRAPH-2F8F3", "CJK COMPATIBILITY IDEOGRAPH-2F8F4", "CJK COMPATIBILITY IDEOGRAPH-2F8F5", "CJK COMPATIBILITY IDEOGRAPH-2F8F6", "CJK COMPATIBILITY IDEOGRAPH-2F8F7", "CJK COMPATIBILITY IDEOGRAPH-2F8F8", "CJK COMPATIBILITY IDEOGRAPH-2F8F9", "CJK COMPATIBILITY IDEOGRAPH-2F8FA", "CJK COMPATIBILITY IDEOGRAPH-2F8FB", "CJK COMPATIBILITY IDEOGRAPH-2F8FC", "CJK COMPATIBILITY IDEOGRAPH-2F8FD", "CJK COMPATIBILITY IDEOGRAPH-2F8FE", "CJK COMPATIBILITY IDEOGRAPH-2F8FF", "CJK COMPATIBILITY IDEOGRAPH-2F900", "CJK COMPATIBILITY IDEOGRAPH-2F901", "CJK COMPATIBILITY IDEOGRAPH-2F902", "CJK COMPATIBILITY IDEOGRAPH-2F903", "CJK COMPATIBILITY IDEOGRAPH-2F904", "CJK COMPATIBILITY IDEOGRAPH-2F905", "CJK COMPATIBILITY IDEOGRAPH-2F906", "CJK COMPATIBILITY IDEOGRAPH-2F907", "CJK COMPATIBILITY IDEOGRAPH-2F908", "CJK COMPATIBILITY IDEOGRAPH-2F909", "CJK COMPATIBILITY IDEOGRAPH-2F90A", "CJK COMPATIBILITY IDEOGRAPH-2F90B", "CJK COMPATIBILITY IDEOGRAPH-2F90C", "CJK COMPATIBILITY IDEOGRAPH-2F90D", "CJK COMPATIBILITY IDEOGRAPH-2F90E", "CJK COMPATIBILITY IDEOGRAPH-2F90F", "CJK COMPATIBILITY IDEOGRAPH-2F910", "CJK COMPATIBILITY IDEOGRAPH-2F911", "CJK COMPATIBILITY IDEOGRAPH-2F912", "CJK COMPATIBILITY IDEOGRAPH-2F913", "CJK COMPATIBILITY IDEOGRAPH-2F914", "CJK COMPATIBILITY IDEOGRAPH-2F915", "CJK COMPATIBILITY IDEOGRAPH-2F916", "CJK COMPATIBILITY IDEOGRAPH-2F917", "CJK COMPATIBILITY IDEOGRAPH-2F918", "CJK COMPATIBILITY IDEOGRAPH-2F919", "CJK COMPATIBILITY IDEOGRAPH-2F91A", "CJK COMPATIBILITY IDEOGRAPH-2F91B", "CJK COMPATIBILITY IDEOGRAPH-2F91C", "CJK COMPATIBILITY IDEOGRAPH-2F91D", "CJK COMPATIBILITY IDEOGRAPH-2F91E", "CJK COMPATIBILITY IDEOGRAPH-2F91F", "CJK COMPATIBILITY IDEOGRAPH-2F920", "CJK COMPATIBILITY IDEOGRAPH-2F921", "CJK COMPATIBILITY IDEOGRAPH-2F922", "CJK COMPATIBILITY IDEOGRAPH-2F923", "CJK COMPATIBILITY IDEOGRAPH-2F924", "CJK COMPATIBILITY IDEOGRAPH-2F925", "CJK COMPATIBILITY IDEOGRAPH-2F926", "CJK COMPATIBILITY IDEOGRAPH-2F927", "CJK COMPATIBILITY IDEOGRAPH-2F928", "CJK COMPATIBILITY IDEOGRAPH-2F929", "CJK COMPATIBILITY IDEOGRAPH-2F92A", "CJK COMPATIBILITY IDEOGRAPH-2F92B", "CJK COMPATIBILITY IDEOGRAPH-2F92C", "CJK COMPATIBILITY IDEOGRAPH-2F92D", "CJK COMPATIBILITY IDEOGRAPH-2F92E", "CJK COMPATIBILITY IDEOGRAPH-2F92F", "CJK COMPATIBILITY IDEOGRAPH-2F930", "CJK COMPATIBILITY IDEOGRAPH-2F931", "CJK COMPATIBILITY IDEOGRAPH-2F932", "CJK COMPATIBILITY IDEOGRAPH-2F933", "CJK COMPATIBILITY IDEOGRAPH-2F934", "CJK COMPATIBILITY IDEOGRAPH-2F935", "CJK COMPATIBILITY IDEOGRAPH-2F936", "CJK COMPATIBILITY IDEOGRAPH-2F937", "CJK COMPATIBILITY IDEOGRAPH-2F938", "CJK COMPATIBILITY IDEOGRAPH-2F939", "CJK COMPATIBILITY IDEOGRAPH-2F93A", "CJK COMPATIBILITY IDEOGRAPH-2F93B", "CJK COMPATIBILITY IDEOGRAPH-2F93C", "CJK COMPATIBILITY IDEOGRAPH-2F93D", "CJK COMPATIBILITY IDEOGRAPH-2F93E", "CJK COMPATIBILITY IDEOGRAPH-2F93F", "CJK COMPATIBILITY IDEOGRAPH-2F940", "CJK COMPATIBILITY IDEOGRAPH-2F941", "CJK COMPATIBILITY IDEOGRAPH-2F942", "CJK COMPATIBILITY IDEOGRAPH-2F943", "CJK COMPATIBILITY IDEOGRAPH-2F944", "CJK COMPATIBILITY IDEOGRAPH-2F945", "CJK COMPATIBILITY IDEOGRAPH-2F946", "CJK COMPATIBILITY IDEOGRAPH-2F947", "CJK COMPATIBILITY IDEOGRAPH-2F948", "CJK COMPATIBILITY IDEOGRAPH-2F949", "CJK COMPATIBILITY IDEOGRAPH-2F94A", "CJK COMPATIBILITY IDEOGRAPH-2F94B", "CJK COMPATIBILITY IDEOGRAPH-2F94C", "CJK COMPATIBILITY IDEOGRAPH-2F94D", "CJK COMPATIBILITY IDEOGRAPH-2F94E", "CJK COMPATIBILITY IDEOGRAPH-2F94F", "CJK COMPATIBILITY IDEOGRAPH-2F950", "CJK COMPATIBILITY IDEOGRAPH-2F951", "CJK COMPATIBILITY IDEOGRAPH-2F952", "CJK COMPATIBILITY IDEOGRAPH-2F953", "CJK COMPATIBILITY IDEOGRAPH-2F954", "CJK COMPATIBILITY IDEOGRAPH-2F955", "CJK COMPATIBILITY IDEOGRAPH-2F956", "CJK COMPATIBILITY IDEOGRAPH-2F957", "CJK COMPATIBILITY IDEOGRAPH-2F958", "CJK COMPATIBILITY IDEOGRAPH-2F959", "CJK COMPATIBILITY IDEOGRAPH-2F95A", "CJK COMPATIBILITY IDEOGRAPH-2F95B", "CJK COMPATIBILITY IDEOGRAPH-2F95C", "CJK COMPATIBILITY IDEOGRAPH-2F95D", "CJK COMPATIBILITY IDEOGRAPH-2F95E", "CJK COMPATIBILITY IDEOGRAPH-2F95F", "CJK COMPATIBILITY IDEOGRAPH-2F960", "CJK COMPATIBILITY IDEOGRAPH-2F961", "CJK COMPATIBILITY IDEOGRAPH-2F962", "CJK COMPATIBILITY IDEOGRAPH-2F963", "CJK COMPATIBILITY IDEOGRAPH-2F964", "CJK COMPATIBILITY IDEOGRAPH-2F965", "CJK COMPATIBILITY IDEOGRAPH-2F966", "CJK COMPATIBILITY IDEOGRAPH-2F967", "CJK COMPATIBILITY IDEOGRAPH-2F968", "CJK COMPATIBILITY IDEOGRAPH-2F969", "CJK COMPATIBILITY IDEOGRAPH-2F96A", "CJK COMPATIBILITY IDEOGRAPH-2F96B", "CJK COMPATIBILITY IDEOGRAPH-2F96C", "CJK COMPATIBILITY IDEOGRAPH-2F96D", "CJK COMPATIBILITY IDEOGRAPH-2F96E", "CJK COMPATIBILITY IDEOGRAPH-2F96F", "CJK COMPATIBILITY IDEOGRAPH-2F970", "CJK COMPATIBILITY IDEOGRAPH-2F971", "CJK COMPATIBILITY IDEOGRAPH-2F972", "CJK COMPATIBILITY IDEOGRAPH-2F973", "CJK COMPATIBILITY IDEOGRAPH-2F974", "CJK COMPATIBILITY IDEOGRAPH-2F975", "CJK COMPATIBILITY IDEOGRAPH-2F976", "CJK COMPATIBILITY IDEOGRAPH-2F977", "CJK COMPATIBILITY IDEOGRAPH-2F978", "CJK COMPATIBILITY IDEOGRAPH-2F979", "CJK COMPATIBILITY IDEOGRAPH-2F97A", "CJK COMPATIBILITY IDEOGRAPH-2F97B", "CJK COMPATIBILITY IDEOGRAPH-2F97C", "CJK COMPATIBILITY IDEOGRAPH-2F97D", "CJK COMPATIBILITY IDEOGRAPH-2F97E", "CJK COMPATIBILITY IDEOGRAPH-2F97F", "CJK COMPATIBILITY IDEOGRAPH-2F980", "CJK COMPATIBILITY IDEOGRAPH-2F981", "CJK COMPATIBILITY IDEOGRAPH-2F982", "CJK COMPATIBILITY IDEOGRAPH-2F983", "CJK COMPATIBILITY IDEOGRAPH-2F984", "CJK COMPATIBILITY IDEOGRAPH-2F985", "CJK COMPATIBILITY IDEOGRAPH-2F986", "CJK COMPATIBILITY IDEOGRAPH-2F987", "CJK COMPATIBILITY IDEOGRAPH-2F988", "CJK COMPATIBILITY IDEOGRAPH-2F989", "CJK COMPATIBILITY IDEOGRAPH-2F98A", "CJK COMPATIBILITY IDEOGRAPH-2F98B", "CJK COMPATIBILITY IDEOGRAPH-2F98C", "CJK COMPATIBILITY IDEOGRAPH-2F98D", "CJK COMPATIBILITY IDEOGRAPH-2F98E", "CJK COMPATIBILITY IDEOGRAPH-2F98F", "CJK COMPATIBILITY IDEOGRAPH-2F990", "CJK COMPATIBILITY IDEOGRAPH-2F991", "CJK COMPATIBILITY IDEOGRAPH-2F992", "CJK COMPATIBILITY IDEOGRAPH-2F993", "CJK COMPATIBILITY IDEOGRAPH-2F994", "CJK COMPATIBILITY IDEOGRAPH-2F995", "CJK COMPATIBILITY IDEOGRAPH-2F996", "CJK COMPATIBILITY IDEOGRAPH-2F997", "CJK COMPATIBILITY IDEOGRAPH-2F998", "CJK COMPATIBILITY IDEOGRAPH-2F999", "CJK COMPATIBILITY IDEOGRAPH-2F99A", "CJK COMPATIBILITY IDEOGRAPH-2F99B", "CJK COMPATIBILITY IDEOGRAPH-2F99C", "CJK COMPATIBILITY IDEOGRAPH-2F99D", "CJK COMPATIBILITY IDEOGRAPH-2F99E", "CJK COMPATIBILITY IDEOGRAPH-2F99F", "CJK COMPATIBILITY IDEOGRAPH-2F9A0", "CJK COMPATIBILITY IDEOGRAPH-2F9A1", "CJK COMPATIBILITY IDEOGRAPH-2F9A2", "CJK COMPATIBILITY IDEOGRAPH-2F9A3", "CJK COMPATIBILITY IDEOGRAPH-2F9A4", "CJK COMPATIBILITY IDEOGRAPH-2F9A5", "CJK COMPATIBILITY IDEOGRAPH-2F9A6", "CJK COMPATIBILITY IDEOGRAPH-2F9A7", "CJK COMPATIBILITY IDEOGRAPH-2F9A8", "CJK COMPATIBILITY IDEOGRAPH-2F9A9", "CJK COMPATIBILITY IDEOGRAPH-2F9AA", "CJK COMPATIBILITY IDEOGRAPH-2F9AB", "CJK COMPATIBILITY IDEOGRAPH-2F9AC", "CJK COMPATIBILITY IDEOGRAPH-2F9AD", "CJK COMPATIBILITY IDEOGRAPH-2F9AE", "CJK COMPATIBILITY IDEOGRAPH-2F9AF", "CJK COMPATIBILITY IDEOGRAPH-2F9B0", "CJK COMPATIBILITY IDEOGRAPH-2F9B1", "CJK COMPATIBILITY IDEOGRAPH-2F9B2", "CJK COMPATIBILITY IDEOGRAPH-2F9B3", "CJK COMPATIBILITY IDEOGRAPH-2F9B4", "CJK COMPATIBILITY IDEOGRAPH-2F9B5", "CJK COMPATIBILITY IDEOGRAPH-2F9B6", "CJK COMPATIBILITY IDEOGRAPH-2F9B7", "CJK COMPATIBILITY IDEOGRAPH-2F9B8", "CJK COMPATIBILITY IDEOGRAPH-2F9B9", "CJK COMPATIBILITY IDEOGRAPH-2F9BA", "CJK COMPATIBILITY IDEOGRAPH-2F9BB", "CJK COMPATIBILITY IDEOGRAPH-2F9BC", "CJK COMPATIBILITY IDEOGRAPH-2F9BD", "CJK COMPATIBILITY IDEOGRAPH-2F9BE", "CJK COMPATIBILITY IDEOGRAPH-2F9BF", "CJK COMPATIBILITY IDEOGRAPH-2F9C0", "CJK COMPATIBILITY IDEOGRAPH-2F9C1", "CJK COMPATIBILITY IDEOGRAPH-2F9C2", "CJK COMPATIBILITY IDEOGRAPH-2F9C3", "CJK COMPATIBILITY IDEOGRAPH-2F9C4", "CJK COMPATIBILITY IDEOGRAPH-2F9C5", "CJK COMPATIBILITY IDEOGRAPH-2F9C6", "CJK COMPATIBILITY IDEOGRAPH-2F9C7", "CJK COMPATIBILITY IDEOGRAPH-2F9C8", "CJK COMPATIBILITY IDEOGRAPH-2F9C9", "CJK COMPATIBILITY IDEOGRAPH-2F9CA", "CJK COMPATIBILITY IDEOGRAPH-2F9CB", "CJK COMPATIBILITY IDEOGRAPH-2F9CC", "CJK COMPATIBILITY IDEOGRAPH-2F9CD", "CJK COMPATIBILITY IDEOGRAPH-2F9CE", "CJK COMPATIBILITY IDEOGRAPH-2F9CF", "CJK COMPATIBILITY IDEOGRAPH-2F9D0", "CJK COMPATIBILITY IDEOGRAPH-2F9D1", "CJK COMPATIBILITY IDEOGRAPH-2F9D2", "CJK COMPATIBILITY IDEOGRAPH-2F9D3", "CJK COMPATIBILITY IDEOGRAPH-2F9D4", "CJK COMPATIBILITY IDEOGRAPH-2F9D5", "CJK COMPATIBILITY IDEOGRAPH-2F9D6", "CJK COMPATIBILITY IDEOGRAPH-2F9D7", "CJK COMPATIBILITY IDEOGRAPH-2F9D8", "CJK COMPATIBILITY IDEOGRAPH-2F9D9", "CJK COMPATIBILITY IDEOGRAPH-2F9DA", "CJK COMPATIBILITY IDEOGRAPH-2F9DB", "CJK COMPATIBILITY IDEOGRAPH-2F9DC", "CJK COMPATIBILITY IDEOGRAPH-2F9DD", "CJK COMPATIBILITY IDEOGRAPH-2F9DE", "CJK COMPATIBILITY IDEOGRAPH-2F9DF", "CJK COMPATIBILITY IDEOGRAPH-2F9E0", "CJK COMPATIBILITY IDEOGRAPH-2F9E1", "CJK COMPATIBILITY IDEOGRAPH-2F9E2", "CJK COMPATIBILITY IDEOGRAPH-2F9E3", "CJK COMPATIBILITY IDEOGRAPH-2F9E4", "CJK COMPATIBILITY IDEOGRAPH-2F9E5", "CJK COMPATIBILITY IDEOGRAPH-2F9E6", "CJK COMPATIBILITY IDEOGRAPH-2F9E7", "CJK COMPATIBILITY IDEOGRAPH-2F9E8", "CJK COMPATIBILITY IDEOGRAPH-2F9E9", "CJK COMPATIBILITY IDEOGRAPH-2F9EA", "CJK COMPATIBILITY IDEOGRAPH-2F9EB", "CJK COMPATIBILITY IDEOGRAPH-2F9EC", "CJK COMPATIBILITY IDEOGRAPH-2F9ED", "CJK COMPATIBILITY IDEOGRAPH-2F9EE", "CJK COMPATIBILITY IDEOGRAPH-2F9EF", "CJK COMPATIBILITY IDEOGRAPH-2F9F0", "CJK COMPATIBILITY IDEOGRAPH-2F9F1", "CJK COMPATIBILITY IDEOGRAPH-2F9F2", "CJK COMPATIBILITY IDEOGRAPH-2F9F3", "CJK COMPATIBILITY IDEOGRAPH-2F9F4", "CJK COMPATIBILITY IDEOGRAPH-2F9F5", "CJK COMPATIBILITY IDEOGRAPH-2F9F6", "CJK COMPATIBILITY IDEOGRAPH-2F9F7", "CJK COMPATIBILITY IDEOGRAPH-2F9F8", "CJK COMPATIBILITY IDEOGRAPH-2F9F9", "CJK COMPATIBILITY IDEOGRAPH-2F9FA", "CJK COMPATIBILITY IDEOGRAPH-2F9FB", "CJK COMPATIBILITY IDEOGRAPH-2F9FC", "CJK COMPATIBILITY IDEOGRAPH-2F9FD", "CJK COMPATIBILITY IDEOGRAPH-2F9FE", "CJK COMPATIBILITY IDEOGRAPH-2F9FF", "CJK COMPATIBILITY IDEOGRAPH-2FA00", "CJK COMPATIBILITY IDEOGRAPH-2FA01", "CJK COMPATIBILITY IDEOGRAPH-2FA02", "CJK COMPATIBILITY IDEOGRAPH-2FA03", "CJK COMPATIBILITY IDEOGRAPH-2FA04", "CJK COMPATIBILITY IDEOGRAPH-2FA05", "CJK COMPATIBILITY IDEOGRAPH-2FA06", "CJK COMPATIBILITY IDEOGRAPH-2FA07", "CJK COMPATIBILITY IDEOGRAPH-2FA08", "CJK COMPATIBILITY IDEOGRAPH-2FA09", "CJK COMPATIBILITY IDEOGRAPH-2FA0A", "CJK COMPATIBILITY IDEOGRAPH-2FA0B", "CJK COMPATIBILITY IDEOGRAPH-2FA0C", "CJK COMPATIBILITY IDEOGRAPH-2FA0D", "CJK COMPATIBILITY IDEOGRAPH-2FA0E", "CJK COMPATIBILITY IDEOGRAPH-2FA0F", "CJK COMPATIBILITY IDEOGRAPH-2FA10", "CJK COMPATIBILITY IDEOGRAPH-2FA11", "CJK COMPATIBILITY IDEOGRAPH-2FA12", "CJK COMPATIBILITY IDEOGRAPH-2FA13", "CJK COMPATIBILITY IDEOGRAPH-2FA14", "CJK COMPATIBILITY IDEOGRAPH-2FA15", "CJK COMPATIBILITY IDEOGRAPH-2FA16", "CJK COMPATIBILITY IDEOGRAPH-2FA17", "CJK COMPATIBILITY IDEOGRAPH-2FA18", "CJK COMPATIBILITY IDEOGRAPH-2FA19", "CJK COMPATIBILITY IDEOGRAPH-2FA1A", "CJK COMPATIBILITY IDEOGRAPH-2FA1B", "CJK COMPATIBILITY IDEOGRAPH-2FA1C", "CJK COMPATIBILITY IDEOGRAPH-2FA1D", "LANGUAGE TAG", "TAG SPACE", "TAG EXCLAMATION MARK", "TAG QUOTATION MARK", "TAG NUMBER SIGN", "TAG DOLLAR SIGN", "TAG PERCENT SIGN", "TAG AMPERSAND", "TAG APOSTROPHE", "TAG LEFT PARENTHESIS", "TAG RIGHT PARENTHESIS", "TAG ASTERISK", "TAG PLUS SIGN", "TAG COMMA", "TAG HYPHEN-MINUS", "TAG FULL STOP", "TAG SOLIDUS", "TAG DIGIT ZERO", "TAG DIGIT ONE", "TAG DIGIT TWO", "TAG DIGIT THREE", "TAG DIGIT FOUR", "TAG DIGIT FIVE", "TAG DIGIT SIX", "TAG DIGIT SEVEN", "TAG DIGIT EIGHT", "TAG DIGIT NINE", "TAG COLON", "TAG SEMICOLON", "TAG LESS-THAN SIGN", "TAG EQUALS SIGN", "TAG GREATER-THAN SIGN", "TAG QUESTION MARK", "TAG COMMERCIAL AT", "TAG LATIN CAPITAL LETTER A", "TAG LATIN CAPITAL LETTER B", "TAG LATIN CAPITAL LETTER C", "TAG LATIN CAPITAL LETTER D", "TAG LATIN CAPITAL LETTER E", "TAG LATIN CAPITAL LETTER F", "TAG LATIN CAPITAL LETTER G", "TAG LATIN CAPITAL LETTER H", "TAG LATIN CAPITAL LETTER I", "TAG LATIN CAPITAL LETTER J", "TAG LATIN CAPITAL LETTER K", "TAG LATIN CAPITAL LETTER L", "TAG LATIN CAPITAL LETTER M", "TAG LATIN CAPITAL LETTER N", "TAG LATIN CAPITAL LETTER O", "TAG LATIN CAPITAL LETTER P", "TAG LATIN CAPITAL LETTER Q", "TAG LATIN CAPITAL LETTER R", "TAG LATIN CAPITAL LETTER S", "TAG LATIN CAPITAL LETTER T", "TAG LATIN CAPITAL LETTER U", "TAG LATIN CAPITAL LETTER V", "TAG LATIN CAPITAL LETTER W", "TAG LATIN CAPITAL LETTER X", "TAG LATIN CAPITAL LETTER Y", "TAG LATIN CAPITAL LETTER Z", "TAG LEFT SQUARE BRACKET", "TAG REVERSE SOLIDUS", "TAG RIGHT SQUARE BRACKET", "TAG CIRCUMFLEX ACCENT", "TAG LOW LINE", "TAG GRAVE ACCENT", "TAG LATIN SMALL LETTER A", "TAG LATIN SMALL LETTER B", "TAG LATIN SMALL LETTER C", "TAG LATIN SMALL LETTER D", "TAG LATIN SMALL LETTER E", "TAG LATIN SMALL LETTER F", "TAG LATIN SMALL LETTER G", "TAG LATIN SMALL LETTER H", "TAG LATIN SMALL LETTER I", "TAG LATIN SMALL LETTER J", "TAG LATIN SMALL LETTER K", "TAG LATIN SMALL LETTER L", "TAG LATIN SMALL LETTER M", "TAG LATIN SMALL LETTER N", "TAG LATIN SMALL LETTER O", "TAG LATIN SMALL LETTER P", "TAG LATIN SMALL LETTER Q", "TAG LATIN SMALL LETTER R", "TAG LATIN SMALL LETTER S", "TAG LATIN SMALL LETTER T", "TAG LATIN SMALL LETTER U", "TAG LATIN SMALL LETTER V", "TAG LATIN SMALL LETTER W", "TAG LATIN SMALL LETTER X", "TAG LATIN SMALL LETTER Y", "TAG LATIN SMALL LETTER Z", "TAG LEFT CURLY BRACKET", "TAG VERTICAL LINE", "TAG RIGHT CURLY BRACKET", "TAG TILDE", "CANCEL TAG", "VARIATION SELECTOR-17", "VARIATION SELECTOR-18", "VARIATION SELECTOR-19", "VARIATION SELECTOR-20", "VARIATION SELECTOR-21", "VARIATION SELECTOR-22", "VARIATION SELECTOR-23", "VARIATION SELECTOR-24", "VARIATION SELECTOR-25", "VARIATION SELECTOR-26", "VARIATION SELECTOR-27", "VARIATION SELECTOR-28", "VARIATION SELECTOR-29", "VARIATION SELECTOR-30", "VARIATION SELECTOR-31", "VARIATION SELECTOR-32", "VARIATION SELECTOR-33", "VARIATION SELECTOR-34", "VARIATION SELECTOR-35", "VARIATION SELECTOR-36", "VARIATION SELECTOR-37", "VARIATION SELECTOR-38", "VARIATION SELECTOR-39", "VARIATION SELECTOR-40", "VARIATION SELECTOR-41", "VARIATION SELECTOR-42", "VARIATION SELECTOR-43", "VARIATION SELECTOR-44", "VARIATION SELECTOR-45", "VARIATION SELECTOR-46", "VARIATION SELECTOR-47", "VARIATION SELECTOR-48", "VARIATION SELECTOR-49", "VARIATION SELECTOR-50", "VARIATION SELECTOR-51", "VARIATION SELECTOR-52", "VARIATION SELECTOR-53", "VARIATION SELECTOR-54", "VARIATION SELECTOR-55", "VARIATION SELECTOR-56", "VARIATION SELECTOR-57", "VARIATION SELECTOR-58", "VARIATION SELECTOR-59", "VARIATION SELECTOR-60", "VARIATION SELECTOR-61", "VARIATION SELECTOR-62", "VARIATION SELECTOR-63", "VARIATION SELECTOR-64", "VARIATION SELECTOR-65", "VARIATION SELECTOR-66", "VARIATION SELECTOR-67", "VARIATION SELECTOR-68", "VARIATION SELECTOR-69", "VARIATION SELECTOR-70", "VARIATION SELECTOR-71", "VARIATION SELECTOR-72", "VARIATION SELECTOR-73", "VARIATION SELECTOR-74", "VARIATION SELECTOR-75", "VARIATION SELECTOR-76", "VARIATION SELECTOR-77", "VARIATION SELECTOR-78", "VARIATION SELECTOR-79", "VARIATION SELECTOR-80", "VARIATION SELECTOR-81", "VARIATION SELECTOR-82", "VARIATION SELECTOR-83", "VARIATION SELECTOR-84", "VARIATION SELECTOR-85", "VARIATION SELECTOR-86", "VARIATION SELECTOR-87", "VARIATION SELECTOR-88", "VARIATION SELECTOR-89", "VARIATION SELECTOR-90", "VARIATION SELECTOR-91", "VARIATION SELECTOR-92", "VARIATION SELECTOR-93", "VARIATION SELECTOR-94", "VARIATION SELECTOR-95", "VARIATION SELECTOR-96", "VARIATION SELECTOR-97", "VARIATION SELECTOR-98", "VARIATION SELECTOR-99", "VARIATION SELECTOR-100", "VARIATION SELECTOR-101", "VARIATION SELECTOR-102", "VARIATION SELECTOR-103", "VARIATION SELECTOR-104", "VARIATION SELECTOR-105", "VARIATION SELECTOR-106", "VARIATION SELECTOR-107", "VARIATION SELECTOR-108", "VARIATION SELECTOR-109", "VARIATION SELECTOR-110", "VARIATION SELECTOR-111", "VARIATION SELECTOR-112", "VARIATION SELECTOR-113", "VARIATION SELECTOR-114", "VARIATION SELECTOR-115", "VARIATION SELECTOR-116", "VARIATION SELECTOR-117", "VARIATION SELECTOR-118", "VARIATION SELECTOR-119", "VARIATION SELECTOR-120", "VARIATION SELECTOR-121", "VARIATION SELECTOR-122", "VARIATION SELECTOR-123", "VARIATION SELECTOR-124", "VARIATION SELECTOR-125", "VARIATION SELECTOR-126", "VARIATION SELECTOR-127", "VARIATION SELECTOR-128", "VARIATION SELECTOR-129", "VARIATION SELECTOR-130", "VARIATION SELECTOR-131", "VARIATION SELECTOR-132", "VARIATION SELECTOR-133", "VARIATION SELECTOR-134", "VARIATION SELECTOR-135", "VARIATION SELECTOR-136", "VARIATION SELECTOR-137", "VARIATION SELECTOR-138", "VARIATION SELECTOR-139", "VARIATION SELECTOR-140", "VARIATION SELECTOR-141", "VARIATION SELECTOR-142", "VARIATION SELECTOR-143", "VARIATION SELECTOR-144", "VARIATION SELECTOR-145", "VARIATION SELECTOR-146", "VARIATION SELECTOR-147", "VARIATION SELECTOR-148", "VARIATION SELECTOR-149", "VARIATION SELECTOR-150", "VARIATION SELECTOR-151", "VARIATION SELECTOR-152", "VARIATION SELECTOR-153", "VARIATION SELECTOR-154", "VARIATION SELECTOR-155", "VARIATION SELECTOR-156", "VARIATION SELECTOR-157", "VARIATION SELECTOR-158", "VARIATION SELECTOR-159", "VARIATION SELECTOR-160", "VARIATION SELECTOR-161", "VARIATION SELECTOR-162", "VARIATION SELECTOR-163", "VARIATION SELECTOR-164", "VARIATION SELECTOR-165", "VARIATION SELECTOR-166", "VARIATION SELECTOR-167", "VARIATION SELECTOR-168", "VARIATION SELECTOR-169", "VARIATION SELECTOR-170", "VARIATION SELECTOR-171", "VARIATION SELECTOR-172", "VARIATION SELECTOR-173", "VARIATION SELECTOR-174", "VARIATION SELECTOR-175", "VARIATION SELECTOR-176", "VARIATION SELECTOR-177", "VARIATION SELECTOR-178", "VARIATION SELECTOR-179", "VARIATION SELECTOR-180", "VARIATION SELECTOR-181", "VARIATION SELECTOR-182", "VARIATION SELECTOR-183", "VARIATION SELECTOR-184", "VARIATION SELECTOR-185", "VARIATION SELECTOR-186", "VARIATION SELECTOR-187", "VARIATION SELECTOR-188", "VARIATION SELECTOR-189", "VARIATION SELECTOR-190", "VARIATION SELECTOR-191", "VARIATION SELECTOR-192", "VARIATION SELECTOR-193", "VARIATION SELECTOR-194", "VARIATION SELECTOR-195", "VARIATION SELECTOR-196", "VARIATION SELECTOR-197", "VARIATION SELECTOR-198", "VARIATION SELECTOR-199", "VARIATION SELECTOR-200", "VARIATION SELECTOR-201", "VARIATION SELECTOR-202", "VARIATION SELECTOR-203", "VARIATION SELECTOR-204", "VARIATION SELECTOR-205", "VARIATION SELECTOR-206", "VARIATION SELECTOR-207", "VARIATION SELECTOR-208", "VARIATION SELECTOR-209", "VARIATION SELECTOR-210", "VARIATION SELECTOR-211", "VARIATION SELECTOR-212", "VARIATION SELECTOR-213", "VARIATION SELECTOR-214", "VARIATION SELECTOR-215", "VARIATION SELECTOR-216", "VARIATION SELECTOR-217", "VARIATION SELECTOR-218", "VARIATION SELECTOR-219", "VARIATION SELECTOR-220", "VARIATION SELECTOR-221", "VARIATION SELECTOR-222", "VARIATION SELECTOR-223", "VARIATION SELECTOR-224", "VARIATION SELECTOR-225", "VARIATION SELECTOR-226", "VARIATION SELECTOR-227", "VARIATION SELECTOR-228", "VARIATION SELECTOR-229", "VARIATION SELECTOR-230", "VARIATION SELECTOR-231", "VARIATION SELECTOR-232", "VARIATION SELECTOR-233", "VARIATION SELECTOR-234", "VARIATION SELECTOR-235", "VARIATION SELECTOR-236", "VARIATION SELECTOR-237", "VARIATION SELECTOR-238", "VARIATION SELECTOR-239", "VARIATION SELECTOR-240", "VARIATION SELECTOR-241", "VARIATION SELECTOR-242", "VARIATION SELECTOR-243", "VARIATION SELECTOR-244", "VARIATION SELECTOR-245", "VARIATION SELECTOR-246", "VARIATION SELECTOR-247", "VARIATION SELECTOR-248", "VARIATION SELECTOR-249", "VARIATION SELECTOR-250", "VARIATION SELECTOR-251", "VARIATION SELECTOR-252", "VARIATION SELECTOR-253", "VARIATION SELECTOR-254", "VARIATION SELECTOR-255", "VARIATION SELECTOR-256", "", "", "", "", }; // }}} static const char_type mark_to_cp[32837] = { // {{{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 890, 891, 892, 893, 894, 895, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1421, 1422, 1423, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1519, 1520, 1521, 1522, 1523, 1524, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2142, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2447, 2448, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2482, 2486, 2487, 2488, 2489, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2503, 2504, 2507, 2508, 2509, 2510, 2519, 2524, 2525, 2527, 2528, 2529, 2530, 2531, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2561, 2562, 2563, 2565, 2566, 2567, 2568, 2569, 2570, 2575, 2576, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2622, 2623, 2624, 2625, 2626, 2631, 2632, 2635, 2636, 2637, 2641, 2649, 2650, 2651, 2652, 2654, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2689, 2690, 2691, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2703, 2704, 2705, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2738, 2739, 2741, 2742, 2743, 2744, 2745, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2759, 2760, 2761, 2763, 2764, 2765, 2768, 2784, 2785, 2786, 2787, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2817, 2818, 2819, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2831, 2832, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2866, 2867, 2869, 2870, 2871, 2872, 2873, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2887, 2888, 2891, 2892, 2893, 2902, 2903, 2908, 2909, 2911, 2912, 2913, 2914, 2915, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2946, 2947, 2949, 2950, 2951, 2952, 2953, 2954, 2958, 2959, 2960, 2962, 2963, 2964, 2965, 2969, 2970, 2972, 2974, 2975, 2979, 2980, 2984, 2985, 2986, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3006, 3007, 3008, 3009, 3010, 3014, 3015, 3016, 3018, 3019, 3020, 3021, 3024, 3031, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3086, 3087, 3088, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3142, 3143, 3144, 3146, 3147, 3148, 3149, 3157, 3158, 3160, 3161, 3162, 3168, 3169, 3170, 3171, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3214, 3215, 3216, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3253, 3254, 3255, 3256, 3257, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3270, 3271, 3272, 3274, 3275, 3276, 3277, 3285, 3286, 3294, 3296, 3297, 3298, 3299, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3313, 3314, 3328, 3329, 3330, 3331, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3342, 3343, 3344, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3398, 3399, 3400, 3402, 3403, 3404, 3405, 3406, 3407, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3458, 3459, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3517, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3530, 3535, 3536, 3537, 3538, 3539, 3540, 3542, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3570, 3571, 3572, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3713, 3714, 3716, 3718, 3719, 3720, 3721, 3722, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3749, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3776, 3777, 3778, 3779, 3780, 3782, 3784, 3785, 3786, 3787, 3788, 3789, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3804, 3805, 3806, 3807, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4295, 4301, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4682, 4683, 4684, 4685, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4696, 4698, 4699, 4700, 4701, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4746, 4747, 4748, 4749, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4786, 4787, 4788, 4789, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4800, 4802, 4803, 4804, 4805, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4882, 4883, 4884, 4885, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5112, 5113, 5114, 5115, 5116, 5117, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 5582, 5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5952, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5998, 5999, 6000, 6002, 6003, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6167, 6168, 6169, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, 6193, 6194, 6195, 6196, 6197, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6400, 6401, 6402, 6403, 6404, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6464, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6512, 6513, 6514, 6515, 6516, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7259, 7260, 7261, 7262, 7263, 7264, 7265, 7266, 7267, 7268, 7269, 7270, 7271, 7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279, 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7287, 7288, 7289, 7290, 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298, 7299, 7300, 7301, 7302, 7303, 7304, 7312, 7313, 7314, 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322, 7323, 7324, 7325, 7326, 7327, 7328, 7329, 7330, 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338, 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354, 7357, 7358, 7359, 7360, 7361, 7362, 7363, 7364, 7365, 7366, 7367, 7376, 7377, 7378, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7424, 7425, 7426, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486, 7487, 7488, 7489, 7490, 7491, 7492, 7493, 7494, 7495, 7496, 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7523, 7524, 7525, 7526, 7527, 7528, 7529, 7530, 7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538, 7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607, 7608, 7609, 7610, 7611, 7612, 7613, 7614, 7615, 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7672, 7673, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686, 7687, 7688, 7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712, 7713, 7714, 7715, 7716, 7717, 7718, 7719, 7720, 7721, 7722, 7723, 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756, 7757, 7758, 7759, 7760, 7761, 7762, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, 7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811, 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840, 7841, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906, 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7960, 7961, 7962, 7963, 7964, 7965, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, 8000, 8001, 8002, 8003, 8004, 8005, 8008, 8009, 8010, 8011, 8012, 8013, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8025, 8027, 8029, 8031, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8150, 8151, 8152, 8153, 8154, 8155, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8178, 8179, 8180, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271, 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347, 8348, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8576, 8577, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8613, 8614, 8615, 8616, 8617, 8618, 8619, 8620, 8621, 8622, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8633, 8634, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8663, 8664, 8665, 8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, 8677, 8678, 8679, 8680, 8681, 8682, 8683, 8684, 8685, 8686, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 8695, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705, 8706, 8707, 8708, 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716, 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8725, 8726, 8727, 8728, 8729, 8730, 8731, 8732, 8733, 8734, 8735, 8736, 8737, 8738, 8739, 8740, 8741, 8742, 8743, 8744, 8745, 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766, 8767, 8768, 8769, 8770, 8771, 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779, 8780, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798, 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, 8812, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850, 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863, 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8873, 8874, 8875, 8876, 8877, 8878, 8879, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8918, 8919, 8920, 8921, 8922, 8923, 8924, 8925, 8926, 8927, 8928, 8929, 8930, 8931, 8932, 8933, 8934, 8935, 8936, 8937, 8938, 8939, 8940, 8941, 8942, 8943, 8944, 8945, 8946, 8947, 8948, 8949, 8950, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, 8972, 8973, 8974, 8975, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8984, 8985, 8986, 8987, 8988, 8989, 8990, 8991, 8992, 8993, 8994, 8995, 8996, 8997, 8998, 8999, 9000, 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, 9034, 9035, 9036, 9037, 9038, 9039, 9040, 9041, 9042, 9043, 9044, 9045, 9046, 9047, 9048, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9057, 9058, 9059, 9060, 9061, 9062, 9063, 9064, 9065, 9066, 9067, 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9107, 9108, 9109, 9110, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120, 9121, 9122, 9123, 9124, 9125, 9126, 9127, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9135, 9136, 9137, 9138, 9139, 9140, 9141, 9142, 9143, 9144, 9145, 9146, 9147, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 9155, 9156, 9157, 9158, 9159, 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167, 9168, 9169, 9170, 9171, 9172, 9173, 9174, 9175, 9176, 9177, 9178, 9179, 9180, 9181, 9182, 9183, 9184, 9185, 9186, 9187, 9188, 9189, 9190, 9191, 9192, 9193, 9194, 9195, 9196, 9197, 9198, 9199, 9200, 9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288, 9289, 9290, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 9471, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9625, 9626, 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9647, 9648, 9649, 9650, 9651, 9652, 9653, 9654, 9655, 9656, 9657, 9658, 9659, 9660, 9661, 9662, 9663, 9664, 9665, 9666, 9667, 9668, 9669, 9670, 9671, 9672, 9673, 9674, 9675, 9676, 9677, 9678, 9679, 9680, 9681, 9682, 9683, 9684, 9685, 9686, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 9708, 9709, 9710, 9711, 9712, 9713, 9714, 9715, 9716, 9717, 9718, 9719, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 9727, 9728, 9729, 9730, 9731, 9732, 9733, 9734, 9735, 9736, 9737, 9738, 9739, 9740, 9741, 9742, 9743, 9744, 9745, 9746, 9747, 9748, 9749, 9750, 9751, 9752, 9753, 9754, 9755, 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9768, 9769, 9770, 9771, 9772, 9773, 9774, 9775, 9776, 9777, 9778, 9779, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9791, 9792, 9793, 9794, 9795, 9796, 9797, 9798, 9799, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809, 9810, 9811, 9812, 9813, 9814, 9815, 9816, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 9828, 9829, 9830, 9831, 9832, 9833, 9834, 9835, 9836, 9837, 9838, 9839, 9840, 9841, 9842, 9843, 9844, 9845, 9846, 9847, 9848, 9849, 9850, 9851, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9863, 9864, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887, 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9896, 9897, 9898, 9899, 9900, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9910, 9911, 9912, 9913, 9914, 9915, 9916, 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, 9930, 9931, 9932, 9933, 9934, 9935, 9936, 9937, 9938, 9939, 9940, 9941, 9942, 9943, 9944, 9945, 9946, 9947, 9948, 9949, 9950, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9958, 9959, 9960, 9961, 9962, 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970, 9971, 9972, 9973, 9974, 9975, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, 10011, 10012, 10013, 10014, 10015, 10016, 10017, 10018, 10019, 10020, 10021, 10022, 10023, 10024, 10025, 10026, 10027, 10028, 10029, 10030, 10031, 10032, 10033, 10034, 10035, 10036, 10037, 10038, 10039, 10040, 10041, 10042, 10043, 10044, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 10064, 10065, 10066, 10067, 10068, 10069, 10070, 10071, 10072, 10073, 10074, 10075, 10076, 10077, 10078, 10079, 10080, 10081, 10082, 10083, 10084, 10085, 10086, 10087, 10088, 10089, 10090, 10091, 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10099, 10100, 10101, 10102, 10103, 10104, 10105, 10106, 10107, 10108, 10109, 10110, 10111, 10112, 10113, 10114, 10115, 10116, 10117, 10118, 10119, 10120, 10121, 10122, 10123, 10124, 10125, 10126, 10127, 10128, 10129, 10130, 10131, 10132, 10133, 10134, 10135, 10136, 10137, 10138, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10147, 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10162, 10163, 10164, 10165, 10166, 10167, 10168, 10169, 10170, 10171, 10172, 10173, 10174, 10175, 10176, 10177, 10178, 10179, 10180, 10181, 10182, 10183, 10184, 10185, 10186, 10187, 10188, 10189, 10190, 10191, 10192, 10193, 10194, 10195, 10196, 10197, 10198, 10199, 10200, 10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208, 10209, 10210, 10211, 10212, 10213, 10214, 10215, 10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10225, 10226, 10227, 10228, 10229, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10240, 10241, 10242, 10243, 10244, 10245, 10246, 10247, 10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255, 10256, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10271, 10272, 10273, 10274, 10275, 10276, 10277, 10278, 10279, 10280, 10281, 10282, 10283, 10284, 10285, 10286, 10287, 10288, 10289, 10290, 10291, 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331, 10332, 10333, 10334, 10335, 10336, 10337, 10338, 10339, 10340, 10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10350, 10351, 10352, 10353, 10354, 10355, 10356, 10357, 10358, 10359, 10360, 10361, 10362, 10363, 10364, 10365, 10366, 10367, 10368, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, 10389, 10390, 10391, 10392, 10393, 10394, 10395, 10396, 10397, 10398, 10399, 10400, 10401, 10402, 10403, 10404, 10405, 10406, 10407, 10408, 10409, 10410, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, 10432, 10433, 10434, 10435, 10436, 10437, 10438, 10439, 10440, 10441, 10442, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452, 10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462, 10463, 10464, 10465, 10466, 10467, 10468, 10469, 10470, 10471, 10472, 10473, 10474, 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10483, 10484, 10485, 10486, 10487, 10488, 10489, 10490, 10491, 10492, 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518, 10519, 10520, 10521, 10522, 10523, 10524, 10525, 10526, 10527, 10528, 10529, 10530, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10539, 10540, 10541, 10542, 10543, 10544, 10545, 10546, 10547, 10548, 10549, 10550, 10551, 10552, 10553, 10554, 10555, 10556, 10557, 10558, 10559, 10560, 10561, 10562, 10563, 10564, 10565, 10566, 10567, 10568, 10569, 10570, 10571, 10572, 10573, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582, 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, 10594, 10595, 10596, 10597, 10598, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10607, 10608, 10609, 10610, 10611, 10612, 10613, 10614, 10615, 10616, 10617, 10618, 10619, 10620, 10621, 10622, 10623, 10624, 10625, 10626, 10627, 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10649, 10650, 10651, 10652, 10653, 10654, 10655, 10656, 10657, 10658, 10659, 10660, 10661, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10669, 10670, 10671, 10672, 10673, 10674, 10675, 10676, 10677, 10678, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686, 10687, 10688, 10689, 10690, 10691, 10692, 10693, 10694, 10695, 10696, 10697, 10698, 10699, 10700, 10701, 10702, 10703, 10704, 10705, 10706, 10707, 10708, 10709, 10710, 10711, 10712, 10713, 10714, 10715, 10716, 10717, 10718, 10719, 10720, 10721, 10722, 10723, 10724, 10725, 10726, 10727, 10728, 10729, 10730, 10731, 10732, 10733, 10734, 10735, 10736, 10737, 10738, 10739, 10740, 10741, 10742, 10743, 10744, 10745, 10746, 10747, 10748, 10749, 10750, 10751, 10752, 10753, 10754, 10755, 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10763, 10764, 10765, 10766, 10767, 10768, 10769, 10770, 10771, 10772, 10773, 10774, 10775, 10776, 10777, 10778, 10779, 10780, 10781, 10782, 10783, 10784, 10785, 10786, 10787, 10788, 10789, 10790, 10791, 10792, 10793, 10794, 10795, 10796, 10797, 10798, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10810, 10811, 10812, 10813, 10814, 10815, 10816, 10817, 10818, 10819, 10820, 10821, 10822, 10823, 10824, 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, 10836, 10837, 10838, 10839, 10840, 10841, 10842, 10843, 10844, 10845, 10846, 10847, 10848, 10849, 10850, 10851, 10852, 10853, 10854, 10855, 10856, 10857, 10858, 10859, 10860, 10861, 10862, 10863, 10864, 10865, 10866, 10867, 10868, 10869, 10870, 10871, 10872, 10873, 10874, 10875, 10876, 10877, 10878, 10879, 10880, 10881, 10882, 10883, 10884, 10885, 10886, 10887, 10888, 10889, 10890, 10891, 10892, 10893, 10894, 10895, 10896, 10897, 10898, 10899, 10900, 10901, 10902, 10903, 10904, 10905, 10906, 10907, 10908, 10909, 10910, 10911, 10912, 10913, 10914, 10915, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10930, 10931, 10932, 10933, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941, 10942, 10943, 10944, 10945, 10946, 10947, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10956, 10957, 10958, 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969, 10970, 10971, 10972, 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984, 10985, 10986, 10987, 10988, 10989, 10990, 10991, 10992, 10993, 10994, 10995, 10996, 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11004, 11005, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, 11015, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, 11025, 11026, 11027, 11028, 11029, 11030, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11045, 11046, 11047, 11048, 11049, 11050, 11051, 11052, 11053, 11054, 11055, 11056, 11057, 11058, 11059, 11060, 11061, 11062, 11063, 11064, 11065, 11066, 11067, 11068, 11069, 11070, 11071, 11072, 11073, 11074, 11075, 11076, 11077, 11078, 11079, 11080, 11081, 11082, 11083, 11084, 11085, 11086, 11087, 11088, 11089, 11090, 11091, 11092, 11093, 11094, 11095, 11096, 11097, 11098, 11099, 11100, 11101, 11102, 11103, 11104, 11105, 11106, 11107, 11108, 11109, 11110, 11111, 11112, 11113, 11114, 11115, 11116, 11117, 11118, 11119, 11120, 11121, 11122, 11123, 11126, 11127, 11128, 11129, 11130, 11131, 11132, 11133, 11134, 11135, 11136, 11137, 11138, 11139, 11140, 11141, 11142, 11143, 11144, 11145, 11146, 11147, 11148, 11149, 11150, 11151, 11152, 11153, 11154, 11155, 11156, 11157, 11160, 11161, 11162, 11163, 11164, 11165, 11166, 11167, 11168, 11169, 11170, 11171, 11172, 11173, 11174, 11175, 11176, 11177, 11178, 11179, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11201, 11202, 11203, 11204, 11205, 11206, 11207, 11208, 11209, 11210, 11211, 11212, 11213, 11214, 11215, 11216, 11217, 11218, 11219, 11220, 11221, 11222, 11223, 11224, 11225, 11226, 11227, 11228, 11229, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11240, 11241, 11242, 11243, 11244, 11245, 11246, 11247, 11248, 11249, 11250, 11251, 11252, 11253, 11254, 11255, 11256, 11257, 11258, 11259, 11260, 11261, 11262, 11263, 11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, 11272, 11273, 11274, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, 11309, 11310, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 11360, 11361, 11362, 11363, 11364, 11365, 11366, 11367, 11368, 11369, 11370, 11371, 11372, 11373, 11374, 11375, 11376, 11377, 11378, 11379, 11380, 11381, 11382, 11383, 11384, 11385, 11386, 11387, 11388, 11389, 11390, 11391, 11392, 11393, 11394, 11395, 11396, 11397, 11398, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11406, 11407, 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 11424, 11425, 11426, 11427, 11428, 11429, 11430, 11431, 11432, 11433, 11434, 11435, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454, 11455, 11456, 11457, 11458, 11459, 11460, 11461, 11462, 11463, 11464, 11465, 11466, 11467, 11468, 11469, 11470, 11471, 11472, 11473, 11474, 11475, 11476, 11477, 11478, 11479, 11480, 11481, 11482, 11483, 11484, 11485, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11493, 11494, 11495, 11496, 11497, 11498, 11499, 11500, 11501, 11502, 11503, 11504, 11505, 11506, 11507, 11513, 11514, 11515, 11516, 11517, 11518, 11519, 11520, 11521, 11522, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11546, 11547, 11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11559, 11565, 11568, 11569, 11570, 11571, 11572, 11573, 11574, 11575, 11576, 11577, 11578, 11579, 11580, 11581, 11582, 11583, 11584, 11585, 11586, 11587, 11588, 11589, 11590, 11591, 11592, 11593, 11594, 11595, 11596, 11597, 11598, 11599, 11600, 11601, 11602, 11603, 11604, 11605, 11606, 11607, 11608, 11609, 11610, 11611, 11612, 11613, 11614, 11615, 11616, 11617, 11618, 11619, 11620, 11621, 11622, 11623, 11631, 11632, 11647, 11648, 11649, 11650, 11651, 11652, 11653, 11654, 11655, 11656, 11657, 11658, 11659, 11660, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668, 11669, 11670, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11688, 11689, 11690, 11691, 11692, 11693, 11694, 11696, 11697, 11698, 11699, 11700, 11701, 11702, 11704, 11705, 11706, 11707, 11708, 11709, 11710, 11712, 11713, 11714, 11715, 11716, 11717, 11718, 11720, 11721, 11722, 11723, 11724, 11725, 11726, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11736, 11737, 11738, 11739, 11740, 11741, 11742, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11759, 11760, 11761, 11762, 11763, 11764, 11765, 11766, 11767, 11768, 11769, 11770, 11771, 11772, 11773, 11774, 11775, 11776, 11777, 11778, 11779, 11780, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 11790, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11803, 11804, 11805, 11806, 11807, 11808, 11809, 11810, 11811, 11812, 11813, 11814, 11815, 11816, 11817, 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839, 11840, 11841, 11842, 11843, 11844, 11845, 11846, 11847, 11848, 11849, 11850, 11851, 11852, 11853, 11854, 11855, 11904, 11905, 11906, 11907, 11908, 11909, 11910, 11911, 11912, 11913, 11914, 11915, 11916, 11917, 11918, 11919, 11920, 11921, 11922, 11923, 11924, 11925, 11926, 11927, 11928, 11929, 11931, 11932, 11933, 11934, 11935, 11936, 11937, 11938, 11939, 11940, 11941, 11942, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 11968, 11969, 11970, 11971, 11972, 11973, 11974, 11975, 11976, 11977, 11978, 11979, 11980, 11981, 11982, 11983, 11984, 11985, 11986, 11987, 11988, 11989, 11990, 11991, 11992, 11993, 11994, 11995, 11996, 11997, 11998, 11999, 12000, 12001, 12002, 12003, 12004, 12005, 12006, 12007, 12008, 12009, 12010, 12011, 12012, 12013, 12014, 12015, 12016, 12017, 12018, 12019, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12040, 12041, 12042, 12043, 12044, 12045, 12046, 12047, 12048, 12049, 12050, 12051, 12052, 12053, 12054, 12055, 12056, 12057, 12058, 12059, 12060, 12061, 12062, 12063, 12064, 12065, 12066, 12067, 12068, 12069, 12070, 12071, 12072, 12073, 12074, 12075, 12076, 12077, 12078, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 12110, 12111, 12112, 12113, 12114, 12115, 12116, 12117, 12118, 12119, 12120, 12121, 12122, 12123, 12124, 12125, 12126, 12127, 12128, 12129, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12159, 12160, 12161, 12162, 12163, 12164, 12165, 12166, 12167, 12168, 12169, 12170, 12171, 12172, 12173, 12174, 12175, 12176, 12177, 12178, 12179, 12180, 12181, 12182, 12183, 12184, 12185, 12186, 12187, 12188, 12189, 12190, 12191, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223, 12224, 12225, 12226, 12227, 12228, 12229, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12288, 12289, 12290, 12291, 12292, 12293, 12294, 12295, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12441, 12442, 12443, 12444, 12445, 12446, 12447, 12448, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12540, 12541, 12542, 12543, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 12586, 12587, 12588, 12589, 12590, 12591, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 12688, 12689, 12690, 12691, 12692, 12693, 12694, 12695, 12696, 12697, 12698, 12699, 12700, 12701, 12702, 12703, 12704, 12705, 12706, 12707, 12708, 12709, 12710, 12711, 12712, 12713, 12714, 12715, 12716, 12717, 12718, 12719, 12720, 12721, 12722, 12723, 12724, 12725, 12726, 12727, 12728, 12729, 12730, 12736, 12737, 12738, 12739, 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, 12750, 12751, 12752, 12753, 12754, 12755, 12756, 12757, 12758, 12759, 12760, 12761, 12762, 12763, 12764, 12765, 12766, 12767, 12768, 12769, 12770, 12771, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 12794, 12795, 12796, 12797, 12798, 12799, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 12828, 12829, 12830, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847, 12848, 12849, 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12858, 12859, 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12868, 12869, 12870, 12871, 12872, 12873, 12874, 12875, 12876, 12877, 12878, 12879, 12880, 12881, 12882, 12883, 12884, 12885, 12886, 12887, 12888, 12889, 12890, 12891, 12892, 12893, 12894, 12895, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 12924, 12925, 12926, 12927, 12928, 12929, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12945, 12946, 12947, 12948, 12949, 12950, 12951, 12952, 12953, 12954, 12955, 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12963, 12964, 12965, 12966, 12967, 12968, 12969, 12970, 12971, 12972, 12973, 12974, 12975, 12976, 12977, 12978, 12979, 12980, 12981, 12982, 12983, 12984, 12985, 12986, 12987, 12988, 12989, 12990, 12991, 12992, 12993, 12994, 12995, 12996, 12997, 12998, 12999, 13000, 13001, 13002, 13003, 13004, 13005, 13006, 13007, 13008, 13009, 13010, 13011, 13012, 13013, 13014, 13015, 13016, 13017, 13018, 13019, 13020, 13021, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031, 13032, 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042, 13043, 13044, 13045, 13046, 13047, 13048, 13049, 13050, 13051, 13052, 13053, 13054, 13055, 13056, 13057, 13058, 13059, 13060, 13061, 13062, 13063, 13064, 13065, 13066, 13067, 13068, 13069, 13070, 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13081, 13082, 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093, 13094, 13095, 13096, 13097, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107, 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, 13119, 13120, 13121, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131, 13132, 13133, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13148, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170, 13171, 13172, 13173, 13174, 13175, 13176, 13177, 13178, 13179, 13180, 13181, 13182, 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13192, 13193, 13194, 13195, 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251, 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13274, 13275, 13276, 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13295, 13296, 13297, 13298, 13299, 13300, 13301, 13302, 13303, 13304, 13305, 13306, 13307, 13308, 13309, 13310, 13311, 13312, 19893, 19904, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19917, 19918, 19919, 19920, 19921, 19922, 19923, 19924, 19925, 19926, 19927, 19928, 19929, 19930, 19931, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 19939, 19940, 19941, 19942, 19943, 19944, 19945, 19946, 19947, 19948, 19949, 19950, 19951, 19952, 19953, 19954, 19955, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 19968, 40943, 40960, 40961, 40962, 40963, 40964, 40965, 40966, 40967, 40968, 40969, 40970, 40971, 40972, 40973, 40974, 40975, 40976, 40977, 40978, 40979, 40980, 40981, 40982, 40983, 40984, 40985, 40986, 40987, 40988, 40989, 40990, 40991, 40992, 40993, 40994, 40995, 40996, 40997, 40998, 40999, 41000, 41001, 41002, 41003, 41004, 41005, 41006, 41007, 41008, 41009, 41010, 41011, 41012, 41013, 41014, 41015, 41016, 41017, 41018, 41019, 41020, 41021, 41022, 41023, 41024, 41025, 41026, 41027, 41028, 41029, 41030, 41031, 41032, 41033, 41034, 41035, 41036, 41037, 41038, 41039, 41040, 41041, 41042, 41043, 41044, 41045, 41046, 41047, 41048, 41049, 41050, 41051, 41052, 41053, 41054, 41055, 41056, 41057, 41058, 41059, 41060, 41061, 41062, 41063, 41064, 41065, 41066, 41067, 41068, 41069, 41070, 41071, 41072, 41073, 41074, 41075, 41076, 41077, 41078, 41079, 41080, 41081, 41082, 41083, 41084, 41085, 41086, 41087, 41088, 41089, 41090, 41091, 41092, 41093, 41094, 41095, 41096, 41097, 41098, 41099, 41100, 41101, 41102, 41103, 41104, 41105, 41106, 41107, 41108, 41109, 41110, 41111, 41112, 41113, 41114, 41115, 41116, 41117, 41118, 41119, 41120, 41121, 41122, 41123, 41124, 41125, 41126, 41127, 41128, 41129, 41130, 41131, 41132, 41133, 41134, 41135, 41136, 41137, 41138, 41139, 41140, 41141, 41142, 41143, 41144, 41145, 41146, 41147, 41148, 41149, 41150, 41151, 41152, 41153, 41154, 41155, 41156, 41157, 41158, 41159, 41160, 41161, 41162, 41163, 41164, 41165, 41166, 41167, 41168, 41169, 41170, 41171, 41172, 41173, 41174, 41175, 41176, 41177, 41178, 41179, 41180, 41181, 41182, 41183, 41184, 41185, 41186, 41187, 41188, 41189, 41190, 41191, 41192, 41193, 41194, 41195, 41196, 41197, 41198, 41199, 41200, 41201, 41202, 41203, 41204, 41205, 41206, 41207, 41208, 41209, 41210, 41211, 41212, 41213, 41214, 41215, 41216, 41217, 41218, 41219, 41220, 41221, 41222, 41223, 41224, 41225, 41226, 41227, 41228, 41229, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41240, 41241, 41242, 41243, 41244, 41245, 41246, 41247, 41248, 41249, 41250, 41251, 41252, 41253, 41254, 41255, 41256, 41257, 41258, 41259, 41260, 41261, 41262, 41263, 41264, 41265, 41266, 41267, 41268, 41269, 41270, 41271, 41272, 41273, 41274, 41275, 41276, 41277, 41278, 41279, 41280, 41281, 41282, 41283, 41284, 41285, 41286, 41287, 41288, 41289, 41290, 41291, 41292, 41293, 41294, 41295, 41296, 41297, 41298, 41299, 41300, 41301, 41302, 41303, 41304, 41305, 41306, 41307, 41308, 41309, 41310, 41311, 41312, 41313, 41314, 41315, 41316, 41317, 41318, 41319, 41320, 41321, 41322, 41323, 41324, 41325, 41326, 41327, 41328, 41329, 41330, 41331, 41332, 41333, 41334, 41335, 41336, 41337, 41338, 41339, 41340, 41341, 41342, 41343, 41344, 41345, 41346, 41347, 41348, 41349, 41350, 41351, 41352, 41353, 41354, 41355, 41356, 41357, 41358, 41359, 41360, 41361, 41362, 41363, 41364, 41365, 41366, 41367, 41368, 41369, 41370, 41371, 41372, 41373, 41374, 41375, 41376, 41377, 41378, 41379, 41380, 41381, 41382, 41383, 41384, 41385, 41386, 41387, 41388, 41389, 41390, 41391, 41392, 41393, 41394, 41395, 41396, 41397, 41398, 41399, 41400, 41401, 41402, 41403, 41404, 41405, 41406, 41407, 41408, 41409, 41410, 41411, 41412, 41413, 41414, 41415, 41416, 41417, 41418, 41419, 41420, 41421, 41422, 41423, 41424, 41425, 41426, 41427, 41428, 41429, 41430, 41431, 41432, 41433, 41434, 41435, 41436, 41437, 41438, 41439, 41440, 41441, 41442, 41443, 41444, 41445, 41446, 41447, 41448, 41449, 41450, 41451, 41452, 41453, 41454, 41455, 41456, 41457, 41458, 41459, 41460, 41461, 41462, 41463, 41464, 41465, 41466, 41467, 41468, 41469, 41470, 41471, 41472, 41473, 41474, 41475, 41476, 41477, 41478, 41479, 41480, 41481, 41482, 41483, 41484, 41485, 41486, 41487, 41488, 41489, 41490, 41491, 41492, 41493, 41494, 41495, 41496, 41497, 41498, 41499, 41500, 41501, 41502, 41503, 41504, 41505, 41506, 41507, 41508, 41509, 41510, 41511, 41512, 41513, 41514, 41515, 41516, 41517, 41518, 41519, 41520, 41521, 41522, 41523, 41524, 41525, 41526, 41527, 41528, 41529, 41530, 41531, 41532, 41533, 41534, 41535, 41536, 41537, 41538, 41539, 41540, 41541, 41542, 41543, 41544, 41545, 41546, 41547, 41548, 41549, 41550, 41551, 41552, 41553, 41554, 41555, 41556, 41557, 41558, 41559, 41560, 41561, 41562, 41563, 41564, 41565, 41566, 41567, 41568, 41569, 41570, 41571, 41572, 41573, 41574, 41575, 41576, 41577, 41578, 41579, 41580, 41581, 41582, 41583, 41584, 41585, 41586, 41587, 41588, 41589, 41590, 41591, 41592, 41593, 41594, 41595, 41596, 41597, 41598, 41599, 41600, 41601, 41602, 41603, 41604, 41605, 41606, 41607, 41608, 41609, 41610, 41611, 41612, 41613, 41614, 41615, 41616, 41617, 41618, 41619, 41620, 41621, 41622, 41623, 41624, 41625, 41626, 41627, 41628, 41629, 41630, 41631, 41632, 41633, 41634, 41635, 41636, 41637, 41638, 41639, 41640, 41641, 41642, 41643, 41644, 41645, 41646, 41647, 41648, 41649, 41650, 41651, 41652, 41653, 41654, 41655, 41656, 41657, 41658, 41659, 41660, 41661, 41662, 41663, 41664, 41665, 41666, 41667, 41668, 41669, 41670, 41671, 41672, 41673, 41674, 41675, 41676, 41677, 41678, 41679, 41680, 41681, 41682, 41683, 41684, 41685, 41686, 41687, 41688, 41689, 41690, 41691, 41692, 41693, 41694, 41695, 41696, 41697, 41698, 41699, 41700, 41701, 41702, 41703, 41704, 41705, 41706, 41707, 41708, 41709, 41710, 41711, 41712, 41713, 41714, 41715, 41716, 41717, 41718, 41719, 41720, 41721, 41722, 41723, 41724, 41725, 41726, 41727, 41728, 41729, 41730, 41731, 41732, 41733, 41734, 41735, 41736, 41737, 41738, 41739, 41740, 41741, 41742, 41743, 41744, 41745, 41746, 41747, 41748, 41749, 41750, 41751, 41752, 41753, 41754, 41755, 41756, 41757, 41758, 41759, 41760, 41761, 41762, 41763, 41764, 41765, 41766, 41767, 41768, 41769, 41770, 41771, 41772, 41773, 41774, 41775, 41776, 41777, 41778, 41779, 41780, 41781, 41782, 41783, 41784, 41785, 41786, 41787, 41788, 41789, 41790, 41791, 41792, 41793, 41794, 41795, 41796, 41797, 41798, 41799, 41800, 41801, 41802, 41803, 41804, 41805, 41806, 41807, 41808, 41809, 41810, 41811, 41812, 41813, 41814, 41815, 41816, 41817, 41818, 41819, 41820, 41821, 41822, 41823, 41824, 41825, 41826, 41827, 41828, 41829, 41830, 41831, 41832, 41833, 41834, 41835, 41836, 41837, 41838, 41839, 41840, 41841, 41842, 41843, 41844, 41845, 41846, 41847, 41848, 41849, 41850, 41851, 41852, 41853, 41854, 41855, 41856, 41857, 41858, 41859, 41860, 41861, 41862, 41863, 41864, 41865, 41866, 41867, 41868, 41869, 41870, 41871, 41872, 41873, 41874, 41875, 41876, 41877, 41878, 41879, 41880, 41881, 41882, 41883, 41884, 41885, 41886, 41887, 41888, 41889, 41890, 41891, 41892, 41893, 41894, 41895, 41896, 41897, 41898, 41899, 41900, 41901, 41902, 41903, 41904, 41905, 41906, 41907, 41908, 41909, 41910, 41911, 41912, 41913, 41914, 41915, 41916, 41917, 41918, 41919, 41920, 41921, 41922, 41923, 41924, 41925, 41926, 41927, 41928, 41929, 41930, 41931, 41932, 41933, 41934, 41935, 41936, 41937, 41938, 41939, 41940, 41941, 41942, 41943, 41944, 41945, 41946, 41947, 41948, 41949, 41950, 41951, 41952, 41953, 41954, 41955, 41956, 41957, 41958, 41959, 41960, 41961, 41962, 41963, 41964, 41965, 41966, 41967, 41968, 41969, 41970, 41971, 41972, 41973, 41974, 41975, 41976, 41977, 41978, 41979, 41980, 41981, 41982, 41983, 41984, 41985, 41986, 41987, 41988, 41989, 41990, 41991, 41992, 41993, 41994, 41995, 41996, 41997, 41998, 41999, 42000, 42001, 42002, 42003, 42004, 42005, 42006, 42007, 42008, 42009, 42010, 42011, 42012, 42013, 42014, 42015, 42016, 42017, 42018, 42019, 42020, 42021, 42022, 42023, 42024, 42025, 42026, 42027, 42028, 42029, 42030, 42031, 42032, 42033, 42034, 42035, 42036, 42037, 42038, 42039, 42040, 42041, 42042, 42043, 42044, 42045, 42046, 42047, 42048, 42049, 42050, 42051, 42052, 42053, 42054, 42055, 42056, 42057, 42058, 42059, 42060, 42061, 42062, 42063, 42064, 42065, 42066, 42067, 42068, 42069, 42070, 42071, 42072, 42073, 42074, 42075, 42076, 42077, 42078, 42079, 42080, 42081, 42082, 42083, 42084, 42085, 42086, 42087, 42088, 42089, 42090, 42091, 42092, 42093, 42094, 42095, 42096, 42097, 42098, 42099, 42100, 42101, 42102, 42103, 42104, 42105, 42106, 42107, 42108, 42109, 42110, 42111, 42112, 42113, 42114, 42115, 42116, 42117, 42118, 42119, 42120, 42121, 42122, 42123, 42124, 42128, 42129, 42130, 42131, 42132, 42133, 42134, 42135, 42136, 42137, 42138, 42139, 42140, 42141, 42142, 42143, 42144, 42145, 42146, 42147, 42148, 42149, 42150, 42151, 42152, 42153, 42154, 42155, 42156, 42157, 42158, 42159, 42160, 42161, 42162, 42163, 42164, 42165, 42166, 42167, 42168, 42169, 42170, 42171, 42172, 42173, 42174, 42175, 42176, 42177, 42178, 42179, 42180, 42181, 42182, 42192, 42193, 42194, 42195, 42196, 42197, 42198, 42199, 42200, 42201, 42202, 42203, 42204, 42205, 42206, 42207, 42208, 42209, 42210, 42211, 42212, 42213, 42214, 42215, 42216, 42217, 42218, 42219, 42220, 42221, 42222, 42223, 42224, 42225, 42226, 42227, 42228, 42229, 42230, 42231, 42232, 42233, 42234, 42235, 42236, 42237, 42238, 42239, 42240, 42241, 42242, 42243, 42244, 42245, 42246, 42247, 42248, 42249, 42250, 42251, 42252, 42253, 42254, 42255, 42256, 42257, 42258, 42259, 42260, 42261, 42262, 42263, 42264, 42265, 42266, 42267, 42268, 42269, 42270, 42271, 42272, 42273, 42274, 42275, 42276, 42277, 42278, 42279, 42280, 42281, 42282, 42283, 42284, 42285, 42286, 42287, 42288, 42289, 42290, 42291, 42292, 42293, 42294, 42295, 42296, 42297, 42298, 42299, 42300, 42301, 42302, 42303, 42304, 42305, 42306, 42307, 42308, 42309, 42310, 42311, 42312, 42313, 42314, 42315, 42316, 42317, 42318, 42319, 42320, 42321, 42322, 42323, 42324, 42325, 42326, 42327, 42328, 42329, 42330, 42331, 42332, 42333, 42334, 42335, 42336, 42337, 42338, 42339, 42340, 42341, 42342, 42343, 42344, 42345, 42346, 42347, 42348, 42349, 42350, 42351, 42352, 42353, 42354, 42355, 42356, 42357, 42358, 42359, 42360, 42361, 42362, 42363, 42364, 42365, 42366, 42367, 42368, 42369, 42370, 42371, 42372, 42373, 42374, 42375, 42376, 42377, 42378, 42379, 42380, 42381, 42382, 42383, 42384, 42385, 42386, 42387, 42388, 42389, 42390, 42391, 42392, 42393, 42394, 42395, 42396, 42397, 42398, 42399, 42400, 42401, 42402, 42403, 42404, 42405, 42406, 42407, 42408, 42409, 42410, 42411, 42412, 42413, 42414, 42415, 42416, 42417, 42418, 42419, 42420, 42421, 42422, 42423, 42424, 42425, 42426, 42427, 42428, 42429, 42430, 42431, 42432, 42433, 42434, 42435, 42436, 42437, 42438, 42439, 42440, 42441, 42442, 42443, 42444, 42445, 42446, 42447, 42448, 42449, 42450, 42451, 42452, 42453, 42454, 42455, 42456, 42457, 42458, 42459, 42460, 42461, 42462, 42463, 42464, 42465, 42466, 42467, 42468, 42469, 42470, 42471, 42472, 42473, 42474, 42475, 42476, 42477, 42478, 42479, 42480, 42481, 42482, 42483, 42484, 42485, 42486, 42487, 42488, 42489, 42490, 42491, 42492, 42493, 42494, 42495, 42496, 42497, 42498, 42499, 42500, 42501, 42502, 42503, 42504, 42505, 42506, 42507, 42508, 42509, 42510, 42511, 42512, 42513, 42514, 42515, 42516, 42517, 42518, 42519, 42520, 42521, 42522, 42523, 42524, 42525, 42526, 42527, 42528, 42529, 42530, 42531, 42532, 42533, 42534, 42535, 42536, 42537, 42538, 42539, 42560, 42561, 42562, 42563, 42564, 42565, 42566, 42567, 42568, 42569, 42570, 42571, 42572, 42573, 42574, 42575, 42576, 42577, 42578, 42579, 42580, 42581, 42582, 42583, 42584, 42585, 42586, 42587, 42588, 42589, 42590, 42591, 42592, 42593, 42594, 42595, 42596, 42597, 42598, 42599, 42600, 42601, 42602, 42603, 42604, 42605, 42606, 42607, 42608, 42609, 42610, 42611, 42612, 42613, 42614, 42615, 42616, 42617, 42618, 42619, 42620, 42621, 42622, 42623, 42624, 42625, 42626, 42627, 42628, 42629, 42630, 42631, 42632, 42633, 42634, 42635, 42636, 42637, 42638, 42639, 42640, 42641, 42642, 42643, 42644, 42645, 42646, 42647, 42648, 42649, 42650, 42651, 42652, 42653, 42654, 42655, 42656, 42657, 42658, 42659, 42660, 42661, 42662, 42663, 42664, 42665, 42666, 42667, 42668, 42669, 42670, 42671, 42672, 42673, 42674, 42675, 42676, 42677, 42678, 42679, 42680, 42681, 42682, 42683, 42684, 42685, 42686, 42687, 42688, 42689, 42690, 42691, 42692, 42693, 42694, 42695, 42696, 42697, 42698, 42699, 42700, 42701, 42702, 42703, 42704, 42705, 42706, 42707, 42708, 42709, 42710, 42711, 42712, 42713, 42714, 42715, 42716, 42717, 42718, 42719, 42720, 42721, 42722, 42723, 42724, 42725, 42726, 42727, 42728, 42729, 42730, 42731, 42732, 42733, 42734, 42735, 42736, 42737, 42738, 42739, 42740, 42741, 42742, 42743, 42752, 42753, 42754, 42755, 42756, 42757, 42758, 42759, 42760, 42761, 42762, 42763, 42764, 42765, 42766, 42767, 42768, 42769, 42770, 42771, 42772, 42773, 42774, 42775, 42776, 42777, 42778, 42779, 42780, 42781, 42782, 42783, 42784, 42785, 42786, 42787, 42788, 42789, 42790, 42791, 42792, 42793, 42794, 42795, 42796, 42797, 42798, 42799, 42800, 42801, 42802, 42803, 42804, 42805, 42806, 42807, 42808, 42809, 42810, 42811, 42812, 42813, 42814, 42815, 42816, 42817, 42818, 42819, 42820, 42821, 42822, 42823, 42824, 42825, 42826, 42827, 42828, 42829, 42830, 42831, 42832, 42833, 42834, 42835, 42836, 42837, 42838, 42839, 42840, 42841, 42842, 42843, 42844, 42845, 42846, 42847, 42848, 42849, 42850, 42851, 42852, 42853, 42854, 42855, 42856, 42857, 42858, 42859, 42860, 42861, 42862, 42863, 42864, 42865, 42866, 42867, 42868, 42869, 42870, 42871, 42872, 42873, 42874, 42875, 42876, 42877, 42878, 42879, 42880, 42881, 42882, 42883, 42884, 42885, 42886, 42887, 42888, 42889, 42890, 42891, 42892, 42893, 42894, 42895, 42896, 42897, 42898, 42899, 42900, 42901, 42902, 42903, 42904, 42905, 42906, 42907, 42908, 42909, 42910, 42911, 42912, 42913, 42914, 42915, 42916, 42917, 42918, 42919, 42920, 42921, 42922, 42923, 42924, 42925, 42926, 42927, 42928, 42929, 42930, 42931, 42932, 42933, 42934, 42935, 42936, 42937, 42938, 42939, 42940, 42941, 42942, 42943, 42946, 42947, 42948, 42949, 42950, 42999, 43000, 43001, 43002, 43003, 43004, 43005, 43006, 43007, 43008, 43009, 43010, 43011, 43012, 43013, 43014, 43015, 43016, 43017, 43018, 43019, 43020, 43021, 43022, 43023, 43024, 43025, 43026, 43027, 43028, 43029, 43030, 43031, 43032, 43033, 43034, 43035, 43036, 43037, 43038, 43039, 43040, 43041, 43042, 43043, 43044, 43045, 43046, 43047, 43048, 43049, 43050, 43051, 43056, 43057, 43058, 43059, 43060, 43061, 43062, 43063, 43064, 43065, 43072, 43073, 43074, 43075, 43076, 43077, 43078, 43079, 43080, 43081, 43082, 43083, 43084, 43085, 43086, 43087, 43088, 43089, 43090, 43091, 43092, 43093, 43094, 43095, 43096, 43097, 43098, 43099, 43100, 43101, 43102, 43103, 43104, 43105, 43106, 43107, 43108, 43109, 43110, 43111, 43112, 43113, 43114, 43115, 43116, 43117, 43118, 43119, 43120, 43121, 43122, 43123, 43124, 43125, 43126, 43127, 43136, 43137, 43138, 43139, 43140, 43141, 43142, 43143, 43144, 43145, 43146, 43147, 43148, 43149, 43150, 43151, 43152, 43153, 43154, 43155, 43156, 43157, 43158, 43159, 43160, 43161, 43162, 43163, 43164, 43165, 43166, 43167, 43168, 43169, 43170, 43171, 43172, 43173, 43174, 43175, 43176, 43177, 43178, 43179, 43180, 43181, 43182, 43183, 43184, 43185, 43186, 43187, 43188, 43189, 43190, 43191, 43192, 43193, 43194, 43195, 43196, 43197, 43198, 43199, 43200, 43201, 43202, 43203, 43204, 43205, 43214, 43215, 43216, 43217, 43218, 43219, 43220, 43221, 43222, 43223, 43224, 43225, 43232, 43233, 43234, 43235, 43236, 43237, 43238, 43239, 43240, 43241, 43242, 43243, 43244, 43245, 43246, 43247, 43248, 43249, 43250, 43251, 43252, 43253, 43254, 43255, 43256, 43257, 43258, 43259, 43260, 43261, 43262, 43263, 43264, 43265, 43266, 43267, 43268, 43269, 43270, 43271, 43272, 43273, 43274, 43275, 43276, 43277, 43278, 43279, 43280, 43281, 43282, 43283, 43284, 43285, 43286, 43287, 43288, 43289, 43290, 43291, 43292, 43293, 43294, 43295, 43296, 43297, 43298, 43299, 43300, 43301, 43302, 43303, 43304, 43305, 43306, 43307, 43308, 43309, 43310, 43311, 43312, 43313, 43314, 43315, 43316, 43317, 43318, 43319, 43320, 43321, 43322, 43323, 43324, 43325, 43326, 43327, 43328, 43329, 43330, 43331, 43332, 43333, 43334, 43335, 43336, 43337, 43338, 43339, 43340, 43341, 43342, 43343, 43344, 43345, 43346, 43347, 43359, 43360, 43361, 43362, 43363, 43364, 43365, 43366, 43367, 43368, 43369, 43370, 43371, 43372, 43373, 43374, 43375, 43376, 43377, 43378, 43379, 43380, 43381, 43382, 43383, 43384, 43385, 43386, 43387, 43388, 43392, 43393, 43394, 43395, 43396, 43397, 43398, 43399, 43400, 43401, 43402, 43403, 43404, 43405, 43406, 43407, 43408, 43409, 43410, 43411, 43412, 43413, 43414, 43415, 43416, 43417, 43418, 43419, 43420, 43421, 43422, 43423, 43424, 43425, 43426, 43427, 43428, 43429, 43430, 43431, 43432, 43433, 43434, 43435, 43436, 43437, 43438, 43439, 43440, 43441, 43442, 43443, 43444, 43445, 43446, 43447, 43448, 43449, 43450, 43451, 43452, 43453, 43454, 43455, 43456, 43457, 43458, 43459, 43460, 43461, 43462, 43463, 43464, 43465, 43466, 43467, 43468, 43469, 43471, 43472, 43473, 43474, 43475, 43476, 43477, 43478, 43479, 43480, 43481, 43486, 43487, 43488, 43489, 43490, 43491, 43492, 43493, 43494, 43495, 43496, 43497, 43498, 43499, 43500, 43501, 43502, 43503, 43504, 43505, 43506, 43507, 43508, 43509, 43510, 43511, 43512, 43513, 43514, 43515, 43516, 43517, 43518, 43520, 43521, 43522, 43523, 43524, 43525, 43526, 43527, 43528, 43529, 43530, 43531, 43532, 43533, 43534, 43535, 43536, 43537, 43538, 43539, 43540, 43541, 43542, 43543, 43544, 43545, 43546, 43547, 43548, 43549, 43550, 43551, 43552, 43553, 43554, 43555, 43556, 43557, 43558, 43559, 43560, 43561, 43562, 43563, 43564, 43565, 43566, 43567, 43568, 43569, 43570, 43571, 43572, 43573, 43574, 43584, 43585, 43586, 43587, 43588, 43589, 43590, 43591, 43592, 43593, 43594, 43595, 43596, 43597, 43600, 43601, 43602, 43603, 43604, 43605, 43606, 43607, 43608, 43609, 43612, 43613, 43614, 43615, 43616, 43617, 43618, 43619, 43620, 43621, 43622, 43623, 43624, 43625, 43626, 43627, 43628, 43629, 43630, 43631, 43632, 43633, 43634, 43635, 43636, 43637, 43638, 43639, 43640, 43641, 43642, 43643, 43644, 43645, 43646, 43647, 43648, 43649, 43650, 43651, 43652, 43653, 43654, 43655, 43656, 43657, 43658, 43659, 43660, 43661, 43662, 43663, 43664, 43665, 43666, 43667, 43668, 43669, 43670, 43671, 43672, 43673, 43674, 43675, 43676, 43677, 43678, 43679, 43680, 43681, 43682, 43683, 43684, 43685, 43686, 43687, 43688, 43689, 43690, 43691, 43692, 43693, 43694, 43695, 43696, 43697, 43698, 43699, 43700, 43701, 43702, 43703, 43704, 43705, 43706, 43707, 43708, 43709, 43710, 43711, 43712, 43713, 43714, 43739, 43740, 43741, 43742, 43743, 43744, 43745, 43746, 43747, 43748, 43749, 43750, 43751, 43752, 43753, 43754, 43755, 43756, 43757, 43758, 43759, 43760, 43761, 43762, 43763, 43764, 43765, 43766, 43777, 43778, 43779, 43780, 43781, 43782, 43785, 43786, 43787, 43788, 43789, 43790, 43793, 43794, 43795, 43796, 43797, 43798, 43808, 43809, 43810, 43811, 43812, 43813, 43814, 43816, 43817, 43818, 43819, 43820, 43821, 43822, 43824, 43825, 43826, 43827, 43828, 43829, 43830, 43831, 43832, 43833, 43834, 43835, 43836, 43837, 43838, 43839, 43840, 43841, 43842, 43843, 43844, 43845, 43846, 43847, 43848, 43849, 43850, 43851, 43852, 43853, 43854, 43855, 43856, 43857, 43858, 43859, 43860, 43861, 43862, 43863, 43864, 43865, 43866, 43867, 43868, 43869, 43870, 43871, 43872, 43873, 43874, 43875, 43876, 43877, 43878, 43879, 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43895, 43896, 43897, 43898, 43899, 43900, 43901, 43902, 43903, 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, 43920, 43921, 43922, 43923, 43924, 43925, 43926, 43927, 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, 43936, 43937, 43938, 43939, 43940, 43941, 43942, 43943, 43944, 43945, 43946, 43947, 43948, 43949, 43950, 43951, 43952, 43953, 43954, 43955, 43956, 43957, 43958, 43959, 43960, 43961, 43962, 43963, 43964, 43965, 43966, 43967, 43968, 43969, 43970, 43971, 43972, 43973, 43974, 43975, 43976, 43977, 43978, 43979, 43980, 43981, 43982, 43983, 43984, 43985, 43986, 43987, 43988, 43989, 43990, 43991, 43992, 43993, 43994, 43995, 43996, 43997, 43998, 43999, 44000, 44001, 44002, 44003, 44004, 44005, 44006, 44007, 44008, 44009, 44010, 44011, 44012, 44013, 44016, 44017, 44018, 44019, 44020, 44021, 44022, 44023, 44024, 44025, 44032, 55203, 55216, 55217, 55218, 55219, 55220, 55221, 55222, 55223, 55224, 55225, 55226, 55227, 55228, 55229, 55230, 55231, 55232, 55233, 55234, 55235, 55236, 55237, 55238, 55243, 55244, 55245, 55246, 55247, 55248, 55249, 55250, 55251, 55252, 55253, 55254, 55255, 55256, 55257, 55258, 55259, 55260, 55261, 55262, 55263, 55264, 55265, 55266, 55267, 55268, 55269, 55270, 55271, 55272, 55273, 55274, 55275, 55276, 55277, 55278, 55279, 55280, 55281, 55282, 55283, 55284, 55285, 55286, 55287, 55288, 55289, 55290, 55291, 55296, 56191, 56192, 56319, 56320, 57343, 57344, 63743, 63744, 63745, 63746, 63747, 63748, 63749, 63750, 63751, 63752, 63753, 63754, 63755, 63756, 63757, 63758, 63759, 63760, 63761, 63762, 63763, 63764, 63765, 63766, 63767, 63768, 63769, 63770, 63771, 63772, 63773, 63774, 63775, 63776, 63777, 63778, 63779, 63780, 63781, 63782, 63783, 63784, 63785, 63786, 63787, 63788, 63789, 63790, 63791, 63792, 63793, 63794, 63795, 63796, 63797, 63798, 63799, 63800, 63801, 63802, 63803, 63804, 63805, 63806, 63807, 63808, 63809, 63810, 63811, 63812, 63813, 63814, 63815, 63816, 63817, 63818, 63819, 63820, 63821, 63822, 63823, 63824, 63825, 63826, 63827, 63828, 63829, 63830, 63831, 63832, 63833, 63834, 63835, 63836, 63837, 63838, 63839, 63840, 63841, 63842, 63843, 63844, 63845, 63846, 63847, 63848, 63849, 63850, 63851, 63852, 63853, 63854, 63855, 63856, 63857, 63858, 63859, 63860, 63861, 63862, 63863, 63864, 63865, 63866, 63867, 63868, 63869, 63870, 63871, 63872, 63873, 63874, 63875, 63876, 63877, 63878, 63879, 63880, 63881, 63882, 63883, 63884, 63885, 63886, 63887, 63888, 63889, 63890, 63891, 63892, 63893, 63894, 63895, 63896, 63897, 63898, 63899, 63900, 63901, 63902, 63903, 63904, 63905, 63906, 63907, 63908, 63909, 63910, 63911, 63912, 63913, 63914, 63915, 63916, 63917, 63918, 63919, 63920, 63921, 63922, 63923, 63924, 63925, 63926, 63927, 63928, 63929, 63930, 63931, 63932, 63933, 63934, 63935, 63936, 63937, 63938, 63939, 63940, 63941, 63942, 63943, 63944, 63945, 63946, 63947, 63948, 63949, 63950, 63951, 63952, 63953, 63954, 63955, 63956, 63957, 63958, 63959, 63960, 63961, 63962, 63963, 63964, 63965, 63966, 63967, 63968, 63969, 63970, 63971, 63972, 63973, 63974, 63975, 63976, 63977, 63978, 63979, 63980, 63981, 63982, 63983, 63984, 63985, 63986, 63987, 63988, 63989, 63990, 63991, 63992, 63993, 63994, 63995, 63996, 63997, 63998, 63999, 64000, 64001, 64002, 64003, 64004, 64005, 64006, 64007, 64008, 64009, 64010, 64011, 64012, 64013, 64014, 64015, 64016, 64017, 64018, 64019, 64020, 64021, 64022, 64023, 64024, 64025, 64026, 64027, 64028, 64029, 64030, 64031, 64032, 64033, 64034, 64035, 64036, 64037, 64038, 64039, 64040, 64041, 64042, 64043, 64044, 64045, 64046, 64047, 64048, 64049, 64050, 64051, 64052, 64053, 64054, 64055, 64056, 64057, 64058, 64059, 64060, 64061, 64062, 64063, 64064, 64065, 64066, 64067, 64068, 64069, 64070, 64071, 64072, 64073, 64074, 64075, 64076, 64077, 64078, 64079, 64080, 64081, 64082, 64083, 64084, 64085, 64086, 64087, 64088, 64089, 64090, 64091, 64092, 64093, 64094, 64095, 64096, 64097, 64098, 64099, 64100, 64101, 64102, 64103, 64104, 64105, 64106, 64107, 64108, 64109, 64112, 64113, 64114, 64115, 64116, 64117, 64118, 64119, 64120, 64121, 64122, 64123, 64124, 64125, 64126, 64127, 64128, 64129, 64130, 64131, 64132, 64133, 64134, 64135, 64136, 64137, 64138, 64139, 64140, 64141, 64142, 64143, 64144, 64145, 64146, 64147, 64148, 64149, 64150, 64151, 64152, 64153, 64154, 64155, 64156, 64157, 64158, 64159, 64160, 64161, 64162, 64163, 64164, 64165, 64166, 64167, 64168, 64169, 64170, 64171, 64172, 64173, 64174, 64175, 64176, 64177, 64178, 64179, 64180, 64181, 64182, 64183, 64184, 64185, 64186, 64187, 64188, 64189, 64190, 64191, 64192, 64193, 64194, 64195, 64196, 64197, 64198, 64199, 64200, 64201, 64202, 64203, 64204, 64205, 64206, 64207, 64208, 64209, 64210, 64211, 64212, 64213, 64214, 64215, 64216, 64217, 64256, 64257, 64258, 64259, 64260, 64261, 64262, 64275, 64276, 64277, 64278, 64279, 64285, 64286, 64287, 64288, 64289, 64290, 64291, 64292, 64293, 64294, 64295, 64296, 64297, 64298, 64299, 64300, 64301, 64302, 64303, 64304, 64305, 64306, 64307, 64308, 64309, 64310, 64312, 64313, 64314, 64315, 64316, 64318, 64320, 64321, 64323, 64324, 64326, 64327, 64328, 64329, 64330, 64331, 64332, 64333, 64334, 64335, 64336, 64337, 64338, 64339, 64340, 64341, 64342, 64343, 64344, 64345, 64346, 64347, 64348, 64349, 64350, 64351, 64352, 64353, 64354, 64355, 64356, 64357, 64358, 64359, 64360, 64361, 64362, 64363, 64364, 64365, 64366, 64367, 64368, 64369, 64370, 64371, 64372, 64373, 64374, 64375, 64376, 64377, 64378, 64379, 64380, 64381, 64382, 64383, 64384, 64385, 64386, 64387, 64388, 64389, 64390, 64391, 64392, 64393, 64394, 64395, 64396, 64397, 64398, 64399, 64400, 64401, 64402, 64403, 64404, 64405, 64406, 64407, 64408, 64409, 64410, 64411, 64412, 64413, 64414, 64415, 64416, 64417, 64418, 64419, 64420, 64421, 64422, 64423, 64424, 64425, 64426, 64427, 64428, 64429, 64430, 64431, 64432, 64433, 64434, 64435, 64436, 64437, 64438, 64439, 64440, 64441, 64442, 64443, 64444, 64445, 64446, 64447, 64448, 64449, 64467, 64468, 64469, 64470, 64471, 64472, 64473, 64474, 64475, 64476, 64477, 64478, 64479, 64480, 64481, 64482, 64483, 64484, 64485, 64486, 64487, 64488, 64489, 64490, 64491, 64492, 64493, 64494, 64495, 64496, 64497, 64498, 64499, 64500, 64501, 64502, 64503, 64504, 64505, 64506, 64507, 64508, 64509, 64510, 64511, 64512, 64513, 64514, 64515, 64516, 64517, 64518, 64519, 64520, 64521, 64522, 64523, 64524, 64525, 64526, 64527, 64528, 64529, 64530, 64531, 64532, 64533, 64534, 64535, 64536, 64537, 64538, 64539, 64540, 64541, 64542, 64543, 64544, 64545, 64546, 64547, 64548, 64549, 64550, 64551, 64552, 64553, 64554, 64555, 64556, 64557, 64558, 64559, 64560, 64561, 64562, 64563, 64564, 64565, 64566, 64567, 64568, 64569, 64570, 64571, 64572, 64573, 64574, 64575, 64576, 64577, 64578, 64579, 64580, 64581, 64582, 64583, 64584, 64585, 64586, 64587, 64588, 64589, 64590, 64591, 64592, 64593, 64594, 64595, 64596, 64597, 64598, 64599, 64600, 64601, 64602, 64603, 64604, 64605, 64606, 64607, 64608, 64609, 64610, 64611, 64612, 64613, 64614, 64615, 64616, 64617, 64618, 64619, 64620, 64621, 64622, 64623, 64624, 64625, 64626, 64627, 64628, 64629, 64630, 64631, 64632, 64633, 64634, 64635, 64636, 64637, 64638, 64639, 64640, 64641, 64642, 64643, 64644, 64645, 64646, 64647, 64648, 64649, 64650, 64651, 64652, 64653, 64654, 64655, 64656, 64657, 64658, 64659, 64660, 64661, 64662, 64663, 64664, 64665, 64666, 64667, 64668, 64669, 64670, 64671, 64672, 64673, 64674, 64675, 64676, 64677, 64678, 64679, 64680, 64681, 64682, 64683, 64684, 64685, 64686, 64687, 64688, 64689, 64690, 64691, 64692, 64693, 64694, 64695, 64696, 64697, 64698, 64699, 64700, 64701, 64702, 64703, 64704, 64705, 64706, 64707, 64708, 64709, 64710, 64711, 64712, 64713, 64714, 64715, 64716, 64717, 64718, 64719, 64720, 64721, 64722, 64723, 64724, 64725, 64726, 64727, 64728, 64729, 64730, 64731, 64732, 64733, 64734, 64735, 64736, 64737, 64738, 64739, 64740, 64741, 64742, 64743, 64744, 64745, 64746, 64747, 64748, 64749, 64750, 64751, 64752, 64753, 64754, 64755, 64756, 64757, 64758, 64759, 64760, 64761, 64762, 64763, 64764, 64765, 64766, 64767, 64768, 64769, 64770, 64771, 64772, 64773, 64774, 64775, 64776, 64777, 64778, 64779, 64780, 64781, 64782, 64783, 64784, 64785, 64786, 64787, 64788, 64789, 64790, 64791, 64792, 64793, 64794, 64795, 64796, 64797, 64798, 64799, 64800, 64801, 64802, 64803, 64804, 64805, 64806, 64807, 64808, 64809, 64810, 64811, 64812, 64813, 64814, 64815, 64816, 64817, 64818, 64819, 64820, 64821, 64822, 64823, 64824, 64825, 64826, 64827, 64828, 64829, 64830, 64831, 64848, 64849, 64850, 64851, 64852, 64853, 64854, 64855, 64856, 64857, 64858, 64859, 64860, 64861, 64862, 64863, 64864, 64865, 64866, 64867, 64868, 64869, 64870, 64871, 64872, 64873, 64874, 64875, 64876, 64877, 64878, 64879, 64880, 64881, 64882, 64883, 64884, 64885, 64886, 64887, 64888, 64889, 64890, 64891, 64892, 64893, 64894, 64895, 64896, 64897, 64898, 64899, 64900, 64901, 64902, 64903, 64904, 64905, 64906, 64907, 64908, 64909, 64910, 64911, 64914, 64915, 64916, 64917, 64918, 64919, 64920, 64921, 64922, 64923, 64924, 64925, 64926, 64927, 64928, 64929, 64930, 64931, 64932, 64933, 64934, 64935, 64936, 64937, 64938, 64939, 64940, 64941, 64942, 64943, 64944, 64945, 64946, 64947, 64948, 64949, 64950, 64951, 64952, 64953, 64954, 64955, 64956, 64957, 64958, 64959, 64960, 64961, 64962, 64963, 64964, 64965, 64966, 64967, 65008, 65009, 65010, 65011, 65012, 65013, 65014, 65015, 65016, 65017, 65018, 65019, 65020, 65021, 65024, 65025, 65026, 65027, 65028, 65029, 65030, 65031, 65032, 65033, 65034, 65035, 65036, 65037, 65038, 65039, 65040, 65041, 65042, 65043, 65044, 65045, 65046, 65047, 65048, 65049, 65056, 65057, 65058, 65059, 65060, 65061, 65062, 65063, 65064, 65065, 65066, 65067, 65068, 65069, 65070, 65071, 65072, 65073, 65074, 65075, 65076, 65077, 65078, 65079, 65080, 65081, 65082, 65083, 65084, 65085, 65086, 65087, 65088, 65089, 65090, 65091, 65092, 65093, 65094, 65095, 65096, 65097, 65098, 65099, 65100, 65101, 65102, 65103, 65104, 65105, 65106, 65108, 65109, 65110, 65111, 65112, 65113, 65114, 65115, 65116, 65117, 65118, 65119, 65120, 65121, 65122, 65123, 65124, 65125, 65126, 65128, 65129, 65130, 65131, 65136, 65137, 65138, 65139, 65140, 65142, 65143, 65144, 65145, 65146, 65147, 65148, 65149, 65150, 65151, 65152, 65153, 65154, 65155, 65156, 65157, 65158, 65159, 65160, 65161, 65162, 65163, 65164, 65165, 65166, 65167, 65168, 65169, 65170, 65171, 65172, 65173, 65174, 65175, 65176, 65177, 65178, 65179, 65180, 65181, 65182, 65183, 65184, 65185, 65186, 65187, 65188, 65189, 65190, 65191, 65192, 65193, 65194, 65195, 65196, 65197, 65198, 65199, 65200, 65201, 65202, 65203, 65204, 65205, 65206, 65207, 65208, 65209, 65210, 65211, 65212, 65213, 65214, 65215, 65216, 65217, 65218, 65219, 65220, 65221, 65222, 65223, 65224, 65225, 65226, 65227, 65228, 65229, 65230, 65231, 65232, 65233, 65234, 65235, 65236, 65237, 65238, 65239, 65240, 65241, 65242, 65243, 65244, 65245, 65246, 65247, 65248, 65249, 65250, 65251, 65252, 65253, 65254, 65255, 65256, 65257, 65258, 65259, 65260, 65261, 65262, 65263, 65264, 65265, 65266, 65267, 65268, 65269, 65270, 65271, 65272, 65273, 65274, 65275, 65276, 65279, 65281, 65282, 65283, 65284, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65340, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65374, 65375, 65376, 65377, 65378, 65379, 65380, 65381, 65382, 65383, 65384, 65385, 65386, 65387, 65388, 65389, 65390, 65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398, 65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406, 65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414, 65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422, 65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430, 65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438, 65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446, 65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454, 65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462, 65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470, 65474, 65475, 65476, 65477, 65478, 65479, 65482, 65483, 65484, 65485, 65486, 65487, 65490, 65491, 65492, 65493, 65494, 65495, 65498, 65499, 65500, 65504, 65505, 65506, 65507, 65508, 65509, 65510, 65512, 65513, 65514, 65515, 65516, 65517, 65518, 65529, 65530, 65531, 65532, 65533, 65536, 65537, 65538, 65539, 65540, 65541, 65542, 65543, 65544, 65545, 65546, 65547, 65549, 65550, 65551, 65552, 65553, 65554, 65555, 65556, 65557, 65558, 65559, 65560, 65561, 65562, 65563, 65564, 65565, 65566, 65567, 65568, 65569, 65570, 65571, 65572, 65573, 65574, 65576, 65577, 65578, 65579, 65580, 65581, 65582, 65583, 65584, 65585, 65586, 65587, 65588, 65589, 65590, 65591, 65592, 65593, 65594, 65596, 65597, 65599, 65600, 65601, 65602, 65603, 65604, 65605, 65606, 65607, 65608, 65609, 65610, 65611, 65612, 65613, 65616, 65617, 65618, 65619, 65620, 65621, 65622, 65623, 65624, 65625, 65626, 65627, 65628, 65629, 65664, 65665, 65666, 65667, 65668, 65669, 65670, 65671, 65672, 65673, 65674, 65675, 65676, 65677, 65678, 65679, 65680, 65681, 65682, 65683, 65684, 65685, 65686, 65687, 65688, 65689, 65690, 65691, 65692, 65693, 65694, 65695, 65696, 65697, 65698, 65699, 65700, 65701, 65702, 65703, 65704, 65705, 65706, 65707, 65708, 65709, 65710, 65711, 65712, 65713, 65714, 65715, 65716, 65717, 65718, 65719, 65720, 65721, 65722, 65723, 65724, 65725, 65726, 65727, 65728, 65729, 65730, 65731, 65732, 65733, 65734, 65735, 65736, 65737, 65738, 65739, 65740, 65741, 65742, 65743, 65744, 65745, 65746, 65747, 65748, 65749, 65750, 65751, 65752, 65753, 65754, 65755, 65756, 65757, 65758, 65759, 65760, 65761, 65762, 65763, 65764, 65765, 65766, 65767, 65768, 65769, 65770, 65771, 65772, 65773, 65774, 65775, 65776, 65777, 65778, 65779, 65780, 65781, 65782, 65783, 65784, 65785, 65786, 65792, 65793, 65794, 65799, 65800, 65801, 65802, 65803, 65804, 65805, 65806, 65807, 65808, 65809, 65810, 65811, 65812, 65813, 65814, 65815, 65816, 65817, 65818, 65819, 65820, 65821, 65822, 65823, 65824, 65825, 65826, 65827, 65828, 65829, 65830, 65831, 65832, 65833, 65834, 65835, 65836, 65837, 65838, 65839, 65840, 65841, 65842, 65843, 65847, 65848, 65849, 65850, 65851, 65852, 65853, 65854, 65855, 65856, 65857, 65858, 65859, 65860, 65861, 65862, 65863, 65864, 65865, 65866, 65867, 65868, 65869, 65870, 65871, 65872, 65873, 65874, 65875, 65876, 65877, 65878, 65879, 65880, 65881, 65882, 65883, 65884, 65885, 65886, 65887, 65888, 65889, 65890, 65891, 65892, 65893, 65894, 65895, 65896, 65897, 65898, 65899, 65900, 65901, 65902, 65903, 65904, 65905, 65906, 65907, 65908, 65909, 65910, 65911, 65912, 65913, 65914, 65915, 65916, 65917, 65918, 65919, 65920, 65921, 65922, 65923, 65924, 65925, 65926, 65927, 65928, 65929, 65930, 65931, 65932, 65933, 65934, 65936, 65937, 65938, 65939, 65940, 65941, 65942, 65943, 65944, 65945, 65946, 65947, 65952, 66000, 66001, 66002, 66003, 66004, 66005, 66006, 66007, 66008, 66009, 66010, 66011, 66012, 66013, 66014, 66015, 66016, 66017, 66018, 66019, 66020, 66021, 66022, 66023, 66024, 66025, 66026, 66027, 66028, 66029, 66030, 66031, 66032, 66033, 66034, 66035, 66036, 66037, 66038, 66039, 66040, 66041, 66042, 66043, 66044, 66045, 66176, 66177, 66178, 66179, 66180, 66181, 66182, 66183, 66184, 66185, 66186, 66187, 66188, 66189, 66190, 66191, 66192, 66193, 66194, 66195, 66196, 66197, 66198, 66199, 66200, 66201, 66202, 66203, 66204, 66208, 66209, 66210, 66211, 66212, 66213, 66214, 66215, 66216, 66217, 66218, 66219, 66220, 66221, 66222, 66223, 66224, 66225, 66226, 66227, 66228, 66229, 66230, 66231, 66232, 66233, 66234, 66235, 66236, 66237, 66238, 66239, 66240, 66241, 66242, 66243, 66244, 66245, 66246, 66247, 66248, 66249, 66250, 66251, 66252, 66253, 66254, 66255, 66256, 66272, 66273, 66274, 66275, 66276, 66277, 66278, 66279, 66280, 66281, 66282, 66283, 66284, 66285, 66286, 66287, 66288, 66289, 66290, 66291, 66292, 66293, 66294, 66295, 66296, 66297, 66298, 66299, 66304, 66305, 66306, 66307, 66308, 66309, 66310, 66311, 66312, 66313, 66314, 66315, 66316, 66317, 66318, 66319, 66320, 66321, 66322, 66323, 66324, 66325, 66326, 66327, 66328, 66329, 66330, 66331, 66332, 66333, 66334, 66335, 66336, 66337, 66338, 66339, 66349, 66350, 66351, 66352, 66353, 66354, 66355, 66356, 66357, 66358, 66359, 66360, 66361, 66362, 66363, 66364, 66365, 66366, 66367, 66368, 66369, 66370, 66371, 66372, 66373, 66374, 66375, 66376, 66377, 66378, 66384, 66385, 66386, 66387, 66388, 66389, 66390, 66391, 66392, 66393, 66394, 66395, 66396, 66397, 66398, 66399, 66400, 66401, 66402, 66403, 66404, 66405, 66406, 66407, 66408, 66409, 66410, 66411, 66412, 66413, 66414, 66415, 66416, 66417, 66418, 66419, 66420, 66421, 66422, 66423, 66424, 66425, 66426, 66432, 66433, 66434, 66435, 66436, 66437, 66438, 66439, 66440, 66441, 66442, 66443, 66444, 66445, 66446, 66447, 66448, 66449, 66450, 66451, 66452, 66453, 66454, 66455, 66456, 66457, 66458, 66459, 66460, 66461, 66463, 66464, 66465, 66466, 66467, 66468, 66469, 66470, 66471, 66472, 66473, 66474, 66475, 66476, 66477, 66478, 66479, 66480, 66481, 66482, 66483, 66484, 66485, 66486, 66487, 66488, 66489, 66490, 66491, 66492, 66493, 66494, 66495, 66496, 66497, 66498, 66499, 66504, 66505, 66506, 66507, 66508, 66509, 66510, 66511, 66512, 66513, 66514, 66515, 66516, 66517, 66560, 66561, 66562, 66563, 66564, 66565, 66566, 66567, 66568, 66569, 66570, 66571, 66572, 66573, 66574, 66575, 66576, 66577, 66578, 66579, 66580, 66581, 66582, 66583, 66584, 66585, 66586, 66587, 66588, 66589, 66590, 66591, 66592, 66593, 66594, 66595, 66596, 66597, 66598, 66599, 66600, 66601, 66602, 66603, 66604, 66605, 66606, 66607, 66608, 66609, 66610, 66611, 66612, 66613, 66614, 66615, 66616, 66617, 66618, 66619, 66620, 66621, 66622, 66623, 66624, 66625, 66626, 66627, 66628, 66629, 66630, 66631, 66632, 66633, 66634, 66635, 66636, 66637, 66638, 66639, 66640, 66641, 66642, 66643, 66644, 66645, 66646, 66647, 66648, 66649, 66650, 66651, 66652, 66653, 66654, 66655, 66656, 66657, 66658, 66659, 66660, 66661, 66662, 66663, 66664, 66665, 66666, 66667, 66668, 66669, 66670, 66671, 66672, 66673, 66674, 66675, 66676, 66677, 66678, 66679, 66680, 66681, 66682, 66683, 66684, 66685, 66686, 66687, 66688, 66689, 66690, 66691, 66692, 66693, 66694, 66695, 66696, 66697, 66698, 66699, 66700, 66701, 66702, 66703, 66704, 66705, 66706, 66707, 66708, 66709, 66710, 66711, 66712, 66713, 66714, 66715, 66716, 66717, 66720, 66721, 66722, 66723, 66724, 66725, 66726, 66727, 66728, 66729, 66736, 66737, 66738, 66739, 66740, 66741, 66742, 66743, 66744, 66745, 66746, 66747, 66748, 66749, 66750, 66751, 66752, 66753, 66754, 66755, 66756, 66757, 66758, 66759, 66760, 66761, 66762, 66763, 66764, 66765, 66766, 66767, 66768, 66769, 66770, 66771, 66776, 66777, 66778, 66779, 66780, 66781, 66782, 66783, 66784, 66785, 66786, 66787, 66788, 66789, 66790, 66791, 66792, 66793, 66794, 66795, 66796, 66797, 66798, 66799, 66800, 66801, 66802, 66803, 66804, 66805, 66806, 66807, 66808, 66809, 66810, 66811, 66816, 66817, 66818, 66819, 66820, 66821, 66822, 66823, 66824, 66825, 66826, 66827, 66828, 66829, 66830, 66831, 66832, 66833, 66834, 66835, 66836, 66837, 66838, 66839, 66840, 66841, 66842, 66843, 66844, 66845, 66846, 66847, 66848, 66849, 66850, 66851, 66852, 66853, 66854, 66855, 66864, 66865, 66866, 66867, 66868, 66869, 66870, 66871, 66872, 66873, 66874, 66875, 66876, 66877, 66878, 66879, 66880, 66881, 66882, 66883, 66884, 66885, 66886, 66887, 66888, 66889, 66890, 66891, 66892, 66893, 66894, 66895, 66896, 66897, 66898, 66899, 66900, 66901, 66902, 66903, 66904, 66905, 66906, 66907, 66908, 66909, 66910, 66911, 66912, 66913, 66914, 66915, 66927, 67072, 67073, 67074, 67075, 67076, 67077, 67078, 67079, 67080, 67081, 67082, 67083, 67084, 67085, 67086, 67087, 67088, 67089, 67090, 67091, 67092, 67093, 67094, 67095, 67096, 67097, 67098, 67099, 67100, 67101, 67102, 67103, 67104, 67105, 67106, 67107, 67108, 67109, 67110, 67111, 67112, 67113, 67114, 67115, 67116, 67117, 67118, 67119, 67120, 67121, 67122, 67123, 67124, 67125, 67126, 67127, 67128, 67129, 67130, 67131, 67132, 67133, 67134, 67135, 67136, 67137, 67138, 67139, 67140, 67141, 67142, 67143, 67144, 67145, 67146, 67147, 67148, 67149, 67150, 67151, 67152, 67153, 67154, 67155, 67156, 67157, 67158, 67159, 67160, 67161, 67162, 67163, 67164, 67165, 67166, 67167, 67168, 67169, 67170, 67171, 67172, 67173, 67174, 67175, 67176, 67177, 67178, 67179, 67180, 67181, 67182, 67183, 67184, 67185, 67186, 67187, 67188, 67189, 67190, 67191, 67192, 67193, 67194, 67195, 67196, 67197, 67198, 67199, 67200, 67201, 67202, 67203, 67204, 67205, 67206, 67207, 67208, 67209, 67210, 67211, 67212, 67213, 67214, 67215, 67216, 67217, 67218, 67219, 67220, 67221, 67222, 67223, 67224, 67225, 67226, 67227, 67228, 67229, 67230, 67231, 67232, 67233, 67234, 67235, 67236, 67237, 67238, 67239, 67240, 67241, 67242, 67243, 67244, 67245, 67246, 67247, 67248, 67249, 67250, 67251, 67252, 67253, 67254, 67255, 67256, 67257, 67258, 67259, 67260, 67261, 67262, 67263, 67264, 67265, 67266, 67267, 67268, 67269, 67270, 67271, 67272, 67273, 67274, 67275, 67276, 67277, 67278, 67279, 67280, 67281, 67282, 67283, 67284, 67285, 67286, 67287, 67288, 67289, 67290, 67291, 67292, 67293, 67294, 67295, 67296, 67297, 67298, 67299, 67300, 67301, 67302, 67303, 67304, 67305, 67306, 67307, 67308, 67309, 67310, 67311, 67312, 67313, 67314, 67315, 67316, 67317, 67318, 67319, 67320, 67321, 67322, 67323, 67324, 67325, 67326, 67327, 67328, 67329, 67330, 67331, 67332, 67333, 67334, 67335, 67336, 67337, 67338, 67339, 67340, 67341, 67342, 67343, 67344, 67345, 67346, 67347, 67348, 67349, 67350, 67351, 67352, 67353, 67354, 67355, 67356, 67357, 67358, 67359, 67360, 67361, 67362, 67363, 67364, 67365, 67366, 67367, 67368, 67369, 67370, 67371, 67372, 67373, 67374, 67375, 67376, 67377, 67378, 67379, 67380, 67381, 67382, 67392, 67393, 67394, 67395, 67396, 67397, 67398, 67399, 67400, 67401, 67402, 67403, 67404, 67405, 67406, 67407, 67408, 67409, 67410, 67411, 67412, 67413, 67424, 67425, 67426, 67427, 67428, 67429, 67430, 67431, 67584, 67585, 67586, 67587, 67588, 67589, 67592, 67594, 67595, 67596, 67597, 67598, 67599, 67600, 67601, 67602, 67603, 67604, 67605, 67606, 67607, 67608, 67609, 67610, 67611, 67612, 67613, 67614, 67615, 67616, 67617, 67618, 67619, 67620, 67621, 67622, 67623, 67624, 67625, 67626, 67627, 67628, 67629, 67630, 67631, 67632, 67633, 67634, 67635, 67636, 67637, 67639, 67640, 67644, 67647, 67648, 67649, 67650, 67651, 67652, 67653, 67654, 67655, 67656, 67657, 67658, 67659, 67660, 67661, 67662, 67663, 67664, 67665, 67666, 67667, 67668, 67669, 67671, 67672, 67673, 67674, 67675, 67676, 67677, 67678, 67679, 67680, 67681, 67682, 67683, 67684, 67685, 67686, 67687, 67688, 67689, 67690, 67691, 67692, 67693, 67694, 67695, 67696, 67697, 67698, 67699, 67700, 67701, 67702, 67703, 67704, 67705, 67706, 67707, 67708, 67709, 67710, 67711, 67712, 67713, 67714, 67715, 67716, 67717, 67718, 67719, 67720, 67721, 67722, 67723, 67724, 67725, 67726, 67727, 67728, 67729, 67730, 67731, 67732, 67733, 67734, 67735, 67736, 67737, 67738, 67739, 67740, 67741, 67742, 67751, 67752, 67753, 67754, 67755, 67756, 67757, 67758, 67759, 67808, 67809, 67810, 67811, 67812, 67813, 67814, 67815, 67816, 67817, 67818, 67819, 67820, 67821, 67822, 67823, 67824, 67825, 67826, 67828, 67829, 67835, 67836, 67837, 67838, 67839, 67840, 67841, 67842, 67843, 67844, 67845, 67846, 67847, 67848, 67849, 67850, 67851, 67852, 67853, 67854, 67855, 67856, 67857, 67858, 67859, 67860, 67861, 67862, 67863, 67864, 67865, 67866, 67867, 67871, 67872, 67873, 67874, 67875, 67876, 67877, 67878, 67879, 67880, 67881, 67882, 67883, 67884, 67885, 67886, 67887, 67888, 67889, 67890, 67891, 67892, 67893, 67894, 67895, 67896, 67897, 67903, 67968, 67969, 67970, 67971, 67972, 67973, 67974, 67975, 67976, 67977, 67978, 67979, 67980, 67981, 67982, 67983, 67984, 67985, 67986, 67987, 67988, 67989, 67990, 67991, 67992, 67993, 67994, 67995, 67996, 67997, 67998, 67999, 68000, 68001, 68002, 68003, 68004, 68005, 68006, 68007, 68008, 68009, 68010, 68011, 68012, 68013, 68014, 68015, 68016, 68017, 68018, 68019, 68020, 68021, 68022, 68023, 68028, 68029, 68030, 68031, 68032, 68033, 68034, 68035, 68036, 68037, 68038, 68039, 68040, 68041, 68042, 68043, 68044, 68045, 68046, 68047, 68050, 68051, 68052, 68053, 68054, 68055, 68056, 68057, 68058, 68059, 68060, 68061, 68062, 68063, 68064, 68065, 68066, 68067, 68068, 68069, 68070, 68071, 68072, 68073, 68074, 68075, 68076, 68077, 68078, 68079, 68080, 68081, 68082, 68083, 68084, 68085, 68086, 68087, 68088, 68089, 68090, 68091, 68092, 68093, 68094, 68095, 68096, 68097, 68098, 68099, 68101, 68102, 68108, 68109, 68110, 68111, 68112, 68113, 68114, 68115, 68117, 68118, 68119, 68121, 68122, 68123, 68124, 68125, 68126, 68127, 68128, 68129, 68130, 68131, 68132, 68133, 68134, 68135, 68136, 68137, 68138, 68139, 68140, 68141, 68142, 68143, 68144, 68145, 68146, 68147, 68148, 68149, 68152, 68153, 68154, 68159, 68160, 68161, 68162, 68163, 68164, 68165, 68166, 68167, 68168, 68176, 68177, 68178, 68179, 68180, 68181, 68182, 68183, 68184, 68192, 68193, 68194, 68195, 68196, 68197, 68198, 68199, 68200, 68201, 68202, 68203, 68204, 68205, 68206, 68207, 68208, 68209, 68210, 68211, 68212, 68213, 68214, 68215, 68216, 68217, 68218, 68219, 68220, 68221, 68222, 68223, 68224, 68225, 68226, 68227, 68228, 68229, 68230, 68231, 68232, 68233, 68234, 68235, 68236, 68237, 68238, 68239, 68240, 68241, 68242, 68243, 68244, 68245, 68246, 68247, 68248, 68249, 68250, 68251, 68252, 68253, 68254, 68255, 68288, 68289, 68290, 68291, 68292, 68293, 68294, 68295, 68296, 68297, 68298, 68299, 68300, 68301, 68302, 68303, 68304, 68305, 68306, 68307, 68308, 68309, 68310, 68311, 68312, 68313, 68314, 68315, 68316, 68317, 68318, 68319, 68320, 68321, 68322, 68323, 68324, 68325, 68326, 68331, 68332, 68333, 68334, 68335, 68336, 68337, 68338, 68339, 68340, 68341, 68342, 68352, 68353, 68354, 68355, 68356, 68357, 68358, 68359, 68360, 68361, 68362, 68363, 68364, 68365, 68366, 68367, 68368, 68369, 68370, 68371, 68372, 68373, 68374, 68375, 68376, 68377, 68378, 68379, 68380, 68381, 68382, 68383, 68384, 68385, 68386, 68387, 68388, 68389, 68390, 68391, 68392, 68393, 68394, 68395, 68396, 68397, 68398, 68399, 68400, 68401, 68402, 68403, 68404, 68405, 68409, 68410, 68411, 68412, 68413, 68414, 68415, 68416, 68417, 68418, 68419, 68420, 68421, 68422, 68423, 68424, 68425, 68426, 68427, 68428, 68429, 68430, 68431, 68432, 68433, 68434, 68435, 68436, 68437, 68440, 68441, 68442, 68443, 68444, 68445, 68446, 68447, 68448, 68449, 68450, 68451, 68452, 68453, 68454, 68455, 68456, 68457, 68458, 68459, 68460, 68461, 68462, 68463, 68464, 68465, 68466, 68472, 68473, 68474, 68475, 68476, 68477, 68478, 68479, 68480, 68481, 68482, 68483, 68484, 68485, 68486, 68487, 68488, 68489, 68490, 68491, 68492, 68493, 68494, 68495, 68496, 68497, 68505, 68506, 68507, 68508, 68521, 68522, 68523, 68524, 68525, 68526, 68527, 68608, 68609, 68610, 68611, 68612, 68613, 68614, 68615, 68616, 68617, 68618, 68619, 68620, 68621, 68622, 68623, 68624, 68625, 68626, 68627, 68628, 68629, 68630, 68631, 68632, 68633, 68634, 68635, 68636, 68637, 68638, 68639, 68640, 68641, 68642, 68643, 68644, 68645, 68646, 68647, 68648, 68649, 68650, 68651, 68652, 68653, 68654, 68655, 68656, 68657, 68658, 68659, 68660, 68661, 68662, 68663, 68664, 68665, 68666, 68667, 68668, 68669, 68670, 68671, 68672, 68673, 68674, 68675, 68676, 68677, 68678, 68679, 68680, 68736, 68737, 68738, 68739, 68740, 68741, 68742, 68743, 68744, 68745, 68746, 68747, 68748, 68749, 68750, 68751, 68752, 68753, 68754, 68755, 68756, 68757, 68758, 68759, 68760, 68761, 68762, 68763, 68764, 68765, 68766, 68767, 68768, 68769, 68770, 68771, 68772, 68773, 68774, 68775, 68776, 68777, 68778, 68779, 68780, 68781, 68782, 68783, 68784, 68785, 68786, 68800, 68801, 68802, 68803, 68804, 68805, 68806, 68807, 68808, 68809, 68810, 68811, 68812, 68813, 68814, 68815, 68816, 68817, 68818, 68819, 68820, 68821, 68822, 68823, 68824, 68825, 68826, 68827, 68828, 68829, 68830, 68831, 68832, 68833, 68834, 68835, 68836, 68837, 68838, 68839, 68840, 68841, 68842, 68843, 68844, 68845, 68846, 68847, 68848, 68849, 68850, 68858, 68859, 68860, 68861, 68862, 68863, 68864, 68865, 68866, 68867, 68868, 68869, 68870, 68871, 68872, 68873, 68874, 68875, 68876, 68877, 68878, 68879, 68880, 68881, 68882, 68883, 68884, 68885, 68886, 68887, 68888, 68889, 68890, 68891, 68892, 68893, 68894, 68895, 68896, 68897, 68898, 68899, 68900, 68901, 68902, 68903, 68912, 68913, 68914, 68915, 68916, 68917, 68918, 68919, 68920, 68921, 69216, 69217, 69218, 69219, 69220, 69221, 69222, 69223, 69224, 69225, 69226, 69227, 69228, 69229, 69230, 69231, 69232, 69233, 69234, 69235, 69236, 69237, 69238, 69239, 69240, 69241, 69242, 69243, 69244, 69245, 69246, 69376, 69377, 69378, 69379, 69380, 69381, 69382, 69383, 69384, 69385, 69386, 69387, 69388, 69389, 69390, 69391, 69392, 69393, 69394, 69395, 69396, 69397, 69398, 69399, 69400, 69401, 69402, 69403, 69404, 69405, 69406, 69407, 69408, 69409, 69410, 69411, 69412, 69413, 69414, 69415, 69424, 69425, 69426, 69427, 69428, 69429, 69430, 69431, 69432, 69433, 69434, 69435, 69436, 69437, 69438, 69439, 69440, 69441, 69442, 69443, 69444, 69445, 69446, 69447, 69448, 69449, 69450, 69451, 69452, 69453, 69454, 69455, 69456, 69457, 69458, 69459, 69460, 69461, 69462, 69463, 69464, 69465, 69600, 69601, 69602, 69603, 69604, 69605, 69606, 69607, 69608, 69609, 69610, 69611, 69612, 69613, 69614, 69615, 69616, 69617, 69618, 69619, 69620, 69621, 69622, 69632, 69633, 69634, 69635, 69636, 69637, 69638, 69639, 69640, 69641, 69642, 69643, 69644, 69645, 69646, 69647, 69648, 69649, 69650, 69651, 69652, 69653, 69654, 69655, 69656, 69657, 69658, 69659, 69660, 69661, 69662, 69663, 69664, 69665, 69666, 69667, 69668, 69669, 69670, 69671, 69672, 69673, 69674, 69675, 69676, 69677, 69678, 69679, 69680, 69681, 69682, 69683, 69684, 69685, 69686, 69687, 69688, 69689, 69690, 69691, 69692, 69693, 69694, 69695, 69696, 69697, 69698, 69699, 69700, 69701, 69702, 69703, 69704, 69705, 69706, 69707, 69708, 69709, 69714, 69715, 69716, 69717, 69718, 69719, 69720, 69721, 69722, 69723, 69724, 69725, 69726, 69727, 69728, 69729, 69730, 69731, 69732, 69733, 69734, 69735, 69736, 69737, 69738, 69739, 69740, 69741, 69742, 69743, 69759, 69760, 69761, 69762, 69763, 69764, 69765, 69766, 69767, 69768, 69769, 69770, 69771, 69772, 69773, 69774, 69775, 69776, 69777, 69778, 69779, 69780, 69781, 69782, 69783, 69784, 69785, 69786, 69787, 69788, 69789, 69790, 69791, 69792, 69793, 69794, 69795, 69796, 69797, 69798, 69799, 69800, 69801, 69802, 69803, 69804, 69805, 69806, 69807, 69808, 69809, 69810, 69811, 69812, 69813, 69814, 69815, 69816, 69817, 69818, 69819, 69820, 69821, 69822, 69823, 69824, 69825, 69837, 69840, 69841, 69842, 69843, 69844, 69845, 69846, 69847, 69848, 69849, 69850, 69851, 69852, 69853, 69854, 69855, 69856, 69857, 69858, 69859, 69860, 69861, 69862, 69863, 69864, 69872, 69873, 69874, 69875, 69876, 69877, 69878, 69879, 69880, 69881, 69888, 69889, 69890, 69891, 69892, 69893, 69894, 69895, 69896, 69897, 69898, 69899, 69900, 69901, 69902, 69903, 69904, 69905, 69906, 69907, 69908, 69909, 69910, 69911, 69912, 69913, 69914, 69915, 69916, 69917, 69918, 69919, 69920, 69921, 69922, 69923, 69924, 69925, 69926, 69927, 69928, 69929, 69930, 69931, 69932, 69933, 69934, 69935, 69936, 69937, 69938, 69939, 69940, 69942, 69943, 69944, 69945, 69946, 69947, 69948, 69949, 69950, 69951, 69952, 69953, 69954, 69955, 69956, 69957, 69958, 69968, 69969, 69970, 69971, 69972, 69973, 69974, 69975, 69976, 69977, 69978, 69979, 69980, 69981, 69982, 69983, 69984, 69985, 69986, 69987, 69988, 69989, 69990, 69991, 69992, 69993, 69994, 69995, 69996, 69997, 69998, 69999, 70000, 70001, 70002, 70003, 70004, 70005, 70006, 70016, 70017, 70018, 70019, 70020, 70021, 70022, 70023, 70024, 70025, 70026, 70027, 70028, 70029, 70030, 70031, 70032, 70033, 70034, 70035, 70036, 70037, 70038, 70039, 70040, 70041, 70042, 70043, 70044, 70045, 70046, 70047, 70048, 70049, 70050, 70051, 70052, 70053, 70054, 70055, 70056, 70057, 70058, 70059, 70060, 70061, 70062, 70063, 70064, 70065, 70066, 70067, 70068, 70069, 70070, 70071, 70072, 70073, 70074, 70075, 70076, 70077, 70078, 70079, 70080, 70081, 70082, 70083, 70084, 70085, 70086, 70087, 70088, 70089, 70090, 70091, 70092, 70093, 70096, 70097, 70098, 70099, 70100, 70101, 70102, 70103, 70104, 70105, 70106, 70107, 70108, 70109, 70110, 70111, 70113, 70114, 70115, 70116, 70117, 70118, 70119, 70120, 70121, 70122, 70123, 70124, 70125, 70126, 70127, 70128, 70129, 70130, 70131, 70132, 70144, 70145, 70146, 70147, 70148, 70149, 70150, 70151, 70152, 70153, 70154, 70155, 70156, 70157, 70158, 70159, 70160, 70161, 70163, 70164, 70165, 70166, 70167, 70168, 70169, 70170, 70171, 70172, 70173, 70174, 70175, 70176, 70177, 70178, 70179, 70180, 70181, 70182, 70183, 70184, 70185, 70186, 70187, 70188, 70189, 70190, 70191, 70192, 70193, 70194, 70195, 70196, 70197, 70198, 70199, 70200, 70201, 70202, 70203, 70204, 70205, 70206, 70272, 70273, 70274, 70275, 70276, 70277, 70278, 70280, 70282, 70283, 70284, 70285, 70287, 70288, 70289, 70290, 70291, 70292, 70293, 70294, 70295, 70296, 70297, 70298, 70299, 70300, 70301, 70303, 70304, 70305, 70306, 70307, 70308, 70309, 70310, 70311, 70312, 70313, 70320, 70321, 70322, 70323, 70324, 70325, 70326, 70327, 70328, 70329, 70330, 70331, 70332, 70333, 70334, 70335, 70336, 70337, 70338, 70339, 70340, 70341, 70342, 70343, 70344, 70345, 70346, 70347, 70348, 70349, 70350, 70351, 70352, 70353, 70354, 70355, 70356, 70357, 70358, 70359, 70360, 70361, 70362, 70363, 70364, 70365, 70366, 70367, 70368, 70369, 70370, 70371, 70372, 70373, 70374, 70375, 70376, 70377, 70378, 70384, 70385, 70386, 70387, 70388, 70389, 70390, 70391, 70392, 70393, 70400, 70401, 70402, 70403, 70405, 70406, 70407, 70408, 70409, 70410, 70411, 70412, 70415, 70416, 70419, 70420, 70421, 70422, 70423, 70424, 70425, 70426, 70427, 70428, 70429, 70430, 70431, 70432, 70433, 70434, 70435, 70436, 70437, 70438, 70439, 70440, 70442, 70443, 70444, 70445, 70446, 70447, 70448, 70450, 70451, 70453, 70454, 70455, 70456, 70457, 70459, 70460, 70461, 70462, 70463, 70464, 70465, 70466, 70467, 70468, 70471, 70472, 70475, 70476, 70477, 70480, 70487, 70493, 70494, 70495, 70496, 70497, 70498, 70499, 70502, 70503, 70504, 70505, 70506, 70507, 70508, 70512, 70513, 70514, 70515, 70516, 70656, 70657, 70658, 70659, 70660, 70661, 70662, 70663, 70664, 70665, 70666, 70667, 70668, 70669, 70670, 70671, 70672, 70673, 70674, 70675, 70676, 70677, 70678, 70679, 70680, 70681, 70682, 70683, 70684, 70685, 70686, 70687, 70688, 70689, 70690, 70691, 70692, 70693, 70694, 70695, 70696, 70697, 70698, 70699, 70700, 70701, 70702, 70703, 70704, 70705, 70706, 70707, 70708, 70709, 70710, 70711, 70712, 70713, 70714, 70715, 70716, 70717, 70718, 70719, 70720, 70721, 70722, 70723, 70724, 70725, 70726, 70727, 70728, 70729, 70730, 70731, 70732, 70733, 70734, 70735, 70736, 70737, 70738, 70739, 70740, 70741, 70742, 70743, 70744, 70745, 70747, 70749, 70750, 70751, 70784, 70785, 70786, 70787, 70788, 70789, 70790, 70791, 70792, 70793, 70794, 70795, 70796, 70797, 70798, 70799, 70800, 70801, 70802, 70803, 70804, 70805, 70806, 70807, 70808, 70809, 70810, 70811, 70812, 70813, 70814, 70815, 70816, 70817, 70818, 70819, 70820, 70821, 70822, 70823, 70824, 70825, 70826, 70827, 70828, 70829, 70830, 70831, 70832, 70833, 70834, 70835, 70836, 70837, 70838, 70839, 70840, 70841, 70842, 70843, 70844, 70845, 70846, 70847, 70848, 70849, 70850, 70851, 70852, 70853, 70854, 70855, 70864, 70865, 70866, 70867, 70868, 70869, 70870, 70871, 70872, 70873, 71040, 71041, 71042, 71043, 71044, 71045, 71046, 71047, 71048, 71049, 71050, 71051, 71052, 71053, 71054, 71055, 71056, 71057, 71058, 71059, 71060, 71061, 71062, 71063, 71064, 71065, 71066, 71067, 71068, 71069, 71070, 71071, 71072, 71073, 71074, 71075, 71076, 71077, 71078, 71079, 71080, 71081, 71082, 71083, 71084, 71085, 71086, 71087, 71088, 71089, 71090, 71091, 71092, 71093, 71096, 71097, 71098, 71099, 71100, 71101, 71102, 71103, 71104, 71105, 71106, 71107, 71108, 71109, 71110, 71111, 71112, 71113, 71114, 71115, 71116, 71117, 71118, 71119, 71120, 71121, 71122, 71123, 71124, 71125, 71126, 71127, 71128, 71129, 71130, 71131, 71132, 71133, 71168, 71169, 71170, 71171, 71172, 71173, 71174, 71175, 71176, 71177, 71178, 71179, 71180, 71181, 71182, 71183, 71184, 71185, 71186, 71187, 71188, 71189, 71190, 71191, 71192, 71193, 71194, 71195, 71196, 71197, 71198, 71199, 71200, 71201, 71202, 71203, 71204, 71205, 71206, 71207, 71208, 71209, 71210, 71211, 71212, 71213, 71214, 71215, 71216, 71217, 71218, 71219, 71220, 71221, 71222, 71223, 71224, 71225, 71226, 71227, 71228, 71229, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71248, 71249, 71250, 71251, 71252, 71253, 71254, 71255, 71256, 71257, 71264, 71265, 71266, 71267, 71268, 71269, 71270, 71271, 71272, 71273, 71274, 71275, 71276, 71296, 71297, 71298, 71299, 71300, 71301, 71302, 71303, 71304, 71305, 71306, 71307, 71308, 71309, 71310, 71311, 71312, 71313, 71314, 71315, 71316, 71317, 71318, 71319, 71320, 71321, 71322, 71323, 71324, 71325, 71326, 71327, 71328, 71329, 71330, 71331, 71332, 71333, 71334, 71335, 71336, 71337, 71338, 71339, 71340, 71341, 71342, 71343, 71344, 71345, 71346, 71347, 71348, 71349, 71350, 71351, 71352, 71360, 71361, 71362, 71363, 71364, 71365, 71366, 71367, 71368, 71369, 71424, 71425, 71426, 71427, 71428, 71429, 71430, 71431, 71432, 71433, 71434, 71435, 71436, 71437, 71438, 71439, 71440, 71441, 71442, 71443, 71444, 71445, 71446, 71447, 71448, 71449, 71450, 71453, 71454, 71455, 71456, 71457, 71458, 71459, 71460, 71461, 71462, 71463, 71464, 71465, 71466, 71467, 71472, 71473, 71474, 71475, 71476, 71477, 71478, 71479, 71480, 71481, 71482, 71483, 71484, 71485, 71486, 71487, 71680, 71681, 71682, 71683, 71684, 71685, 71686, 71687, 71688, 71689, 71690, 71691, 71692, 71693, 71694, 71695, 71696, 71697, 71698, 71699, 71700, 71701, 71702, 71703, 71704, 71705, 71706, 71707, 71708, 71709, 71710, 71711, 71712, 71713, 71714, 71715, 71716, 71717, 71718, 71719, 71720, 71721, 71722, 71723, 71724, 71725, 71726, 71727, 71728, 71729, 71730, 71731, 71732, 71733, 71734, 71735, 71736, 71737, 71738, 71739, 71840, 71841, 71842, 71843, 71844, 71845, 71846, 71847, 71848, 71849, 71850, 71851, 71852, 71853, 71854, 71855, 71856, 71857, 71858, 71859, 71860, 71861, 71862, 71863, 71864, 71865, 71866, 71867, 71868, 71869, 71870, 71871, 71872, 71873, 71874, 71875, 71876, 71877, 71878, 71879, 71880, 71881, 71882, 71883, 71884, 71885, 71886, 71887, 71888, 71889, 71890, 71891, 71892, 71893, 71894, 71895, 71896, 71897, 71898, 71899, 71900, 71901, 71902, 71903, 71904, 71905, 71906, 71907, 71908, 71909, 71910, 71911, 71912, 71913, 71914, 71915, 71916, 71917, 71918, 71919, 71920, 71921, 71922, 71935, 72096, 72097, 72098, 72099, 72100, 72101, 72102, 72103, 72106, 72107, 72108, 72109, 72110, 72111, 72112, 72113, 72114, 72115, 72116, 72117, 72118, 72119, 72120, 72121, 72122, 72123, 72124, 72125, 72126, 72127, 72128, 72129, 72130, 72131, 72132, 72133, 72134, 72135, 72136, 72137, 72138, 72139, 72140, 72141, 72142, 72143, 72144, 72145, 72146, 72147, 72148, 72149, 72150, 72151, 72154, 72155, 72156, 72157, 72158, 72159, 72160, 72161, 72162, 72163, 72164, 72192, 72193, 72194, 72195, 72196, 72197, 72198, 72199, 72200, 72201, 72202, 72203, 72204, 72205, 72206, 72207, 72208, 72209, 72210, 72211, 72212, 72213, 72214, 72215, 72216, 72217, 72218, 72219, 72220, 72221, 72222, 72223, 72224, 72225, 72226, 72227, 72228, 72229, 72230, 72231, 72232, 72233, 72234, 72235, 72236, 72237, 72238, 72239, 72240, 72241, 72242, 72243, 72244, 72245, 72246, 72247, 72248, 72249, 72250, 72251, 72252, 72253, 72254, 72255, 72256, 72257, 72258, 72259, 72260, 72261, 72262, 72263, 72272, 72273, 72274, 72275, 72276, 72277, 72278, 72279, 72280, 72281, 72282, 72283, 72284, 72285, 72286, 72287, 72288, 72289, 72290, 72291, 72292, 72293, 72294, 72295, 72296, 72297, 72298, 72299, 72300, 72301, 72302, 72303, 72304, 72305, 72306, 72307, 72308, 72309, 72310, 72311, 72312, 72313, 72314, 72315, 72316, 72317, 72318, 72319, 72320, 72321, 72322, 72323, 72324, 72325, 72326, 72327, 72328, 72329, 72330, 72331, 72332, 72333, 72334, 72335, 72336, 72337, 72338, 72339, 72340, 72341, 72342, 72343, 72344, 72345, 72346, 72347, 72348, 72349, 72350, 72351, 72352, 72353, 72354, 72384, 72385, 72386, 72387, 72388, 72389, 72390, 72391, 72392, 72393, 72394, 72395, 72396, 72397, 72398, 72399, 72400, 72401, 72402, 72403, 72404, 72405, 72406, 72407, 72408, 72409, 72410, 72411, 72412, 72413, 72414, 72415, 72416, 72417, 72418, 72419, 72420, 72421, 72422, 72423, 72424, 72425, 72426, 72427, 72428, 72429, 72430, 72431, 72432, 72433, 72434, 72435, 72436, 72437, 72438, 72439, 72440, 72704, 72705, 72706, 72707, 72708, 72709, 72710, 72711, 72712, 72714, 72715, 72716, 72717, 72718, 72719, 72720, 72721, 72722, 72723, 72724, 72725, 72726, 72727, 72728, 72729, 72730, 72731, 72732, 72733, 72734, 72735, 72736, 72737, 72738, 72739, 72740, 72741, 72742, 72743, 72744, 72745, 72746, 72747, 72748, 72749, 72750, 72751, 72752, 72753, 72754, 72755, 72756, 72757, 72758, 72760, 72761, 72762, 72763, 72764, 72765, 72766, 72767, 72768, 72769, 72770, 72771, 72772, 72773, 72784, 72785, 72786, 72787, 72788, 72789, 72790, 72791, 72792, 72793, 72794, 72795, 72796, 72797, 72798, 72799, 72800, 72801, 72802, 72803, 72804, 72805, 72806, 72807, 72808, 72809, 72810, 72811, 72812, 72816, 72817, 72818, 72819, 72820, 72821, 72822, 72823, 72824, 72825, 72826, 72827, 72828, 72829, 72830, 72831, 72832, 72833, 72834, 72835, 72836, 72837, 72838, 72839, 72840, 72841, 72842, 72843, 72844, 72845, 72846, 72847, 72850, 72851, 72852, 72853, 72854, 72855, 72856, 72857, 72858, 72859, 72860, 72861, 72862, 72863, 72864, 72865, 72866, 72867, 72868, 72869, 72870, 72871, 72873, 72874, 72875, 72876, 72877, 72878, 72879, 72880, 72881, 72882, 72883, 72884, 72885, 72886, 72960, 72961, 72962, 72963, 72964, 72965, 72966, 72968, 72969, 72971, 72972, 72973, 72974, 72975, 72976, 72977, 72978, 72979, 72980, 72981, 72982, 72983, 72984, 72985, 72986, 72987, 72988, 72989, 72990, 72991, 72992, 72993, 72994, 72995, 72996, 72997, 72998, 72999, 73000, 73001, 73002, 73003, 73004, 73005, 73006, 73007, 73008, 73009, 73010, 73011, 73012, 73013, 73014, 73018, 73020, 73021, 73023, 73024, 73025, 73026, 73027, 73028, 73029, 73030, 73031, 73040, 73041, 73042, 73043, 73044, 73045, 73046, 73047, 73048, 73049, 73056, 73057, 73058, 73059, 73060, 73061, 73063, 73064, 73066, 73067, 73068, 73069, 73070, 73071, 73072, 73073, 73074, 73075, 73076, 73077, 73078, 73079, 73080, 73081, 73082, 73083, 73084, 73085, 73086, 73087, 73088, 73089, 73090, 73091, 73092, 73093, 73094, 73095, 73096, 73097, 73098, 73099, 73100, 73101, 73102, 73104, 73105, 73107, 73108, 73109, 73110, 73111, 73112, 73120, 73121, 73122, 73123, 73124, 73125, 73126, 73127, 73128, 73129, 73440, 73441, 73442, 73443, 73444, 73445, 73446, 73447, 73448, 73449, 73450, 73451, 73452, 73453, 73454, 73455, 73456, 73457, 73458, 73459, 73460, 73461, 73462, 73463, 73464, 73664, 73665, 73666, 73667, 73668, 73669, 73670, 73671, 73672, 73673, 73674, 73675, 73676, 73677, 73678, 73679, 73680, 73681, 73682, 73683, 73684, 73685, 73686, 73687, 73688, 73689, 73690, 73691, 73692, 73693, 73694, 73695, 73696, 73697, 73698, 73699, 73700, 73701, 73702, 73703, 73704, 73705, 73706, 73707, 73708, 73709, 73710, 73711, 73712, 73713, 73727, 73728, 73729, 73730, 73731, 73732, 73733, 73734, 73735, 73736, 73737, 73738, 73739, 73740, 73741, 73742, 73743, 73744, 73745, 73746, 73747, 73748, 73749, 73750, 73751, 73752, 73753, 73754, 73755, 73756, 73757, 73758, 73759, 73760, 73761, 73762, 73763, 73764, 73765, 73766, 73767, 73768, 73769, 73770, 73771, 73772, 73773, 73774, 73775, 73776, 73777, 73778, 73779, 73780, 73781, 73782, 73783, 73784, 73785, 73786, 73787, 73788, 73789, 73790, 73791, 73792, 73793, 73794, 73795, 73796, 73797, 73798, 73799, 73800, 73801, 73802, 73803, 73804, 73805, 73806, 73807, 73808, 73809, 73810, 73811, 73812, 73813, 73814, 73815, 73816, 73817, 73818, 73819, 73820, 73821, 73822, 73823, 73824, 73825, 73826, 73827, 73828, 73829, 73830, 73831, 73832, 73833, 73834, 73835, 73836, 73837, 73838, 73839, 73840, 73841, 73842, 73843, 73844, 73845, 73846, 73847, 73848, 73849, 73850, 73851, 73852, 73853, 73854, 73855, 73856, 73857, 73858, 73859, 73860, 73861, 73862, 73863, 73864, 73865, 73866, 73867, 73868, 73869, 73870, 73871, 73872, 73873, 73874, 73875, 73876, 73877, 73878, 73879, 73880, 73881, 73882, 73883, 73884, 73885, 73886, 73887, 73888, 73889, 73890, 73891, 73892, 73893, 73894, 73895, 73896, 73897, 73898, 73899, 73900, 73901, 73902, 73903, 73904, 73905, 73906, 73907, 73908, 73909, 73910, 73911, 73912, 73913, 73914, 73915, 73916, 73917, 73918, 73919, 73920, 73921, 73922, 73923, 73924, 73925, 73926, 73927, 73928, 73929, 73930, 73931, 73932, 73933, 73934, 73935, 73936, 73937, 73938, 73939, 73940, 73941, 73942, 73943, 73944, 73945, 73946, 73947, 73948, 73949, 73950, 73951, 73952, 73953, 73954, 73955, 73956, 73957, 73958, 73959, 73960, 73961, 73962, 73963, 73964, 73965, 73966, 73967, 73968, 73969, 73970, 73971, 73972, 73973, 73974, 73975, 73976, 73977, 73978, 73979, 73980, 73981, 73982, 73983, 73984, 73985, 73986, 73987, 73988, 73989, 73990, 73991, 73992, 73993, 73994, 73995, 73996, 73997, 73998, 73999, 74000, 74001, 74002, 74003, 74004, 74005, 74006, 74007, 74008, 74009, 74010, 74011, 74012, 74013, 74014, 74015, 74016, 74017, 74018, 74019, 74020, 74021, 74022, 74023, 74024, 74025, 74026, 74027, 74028, 74029, 74030, 74031, 74032, 74033, 74034, 74035, 74036, 74037, 74038, 74039, 74040, 74041, 74042, 74043, 74044, 74045, 74046, 74047, 74048, 74049, 74050, 74051, 74052, 74053, 74054, 74055, 74056, 74057, 74058, 74059, 74060, 74061, 74062, 74063, 74064, 74065, 74066, 74067, 74068, 74069, 74070, 74071, 74072, 74073, 74074, 74075, 74076, 74077, 74078, 74079, 74080, 74081, 74082, 74083, 74084, 74085, 74086, 74087, 74088, 74089, 74090, 74091, 74092, 74093, 74094, 74095, 74096, 74097, 74098, 74099, 74100, 74101, 74102, 74103, 74104, 74105, 74106, 74107, 74108, 74109, 74110, 74111, 74112, 74113, 74114, 74115, 74116, 74117, 74118, 74119, 74120, 74121, 74122, 74123, 74124, 74125, 74126, 74127, 74128, 74129, 74130, 74131, 74132, 74133, 74134, 74135, 74136, 74137, 74138, 74139, 74140, 74141, 74142, 74143, 74144, 74145, 74146, 74147, 74148, 74149, 74150, 74151, 74152, 74153, 74154, 74155, 74156, 74157, 74158, 74159, 74160, 74161, 74162, 74163, 74164, 74165, 74166, 74167, 74168, 74169, 74170, 74171, 74172, 74173, 74174, 74175, 74176, 74177, 74178, 74179, 74180, 74181, 74182, 74183, 74184, 74185, 74186, 74187, 74188, 74189, 74190, 74191, 74192, 74193, 74194, 74195, 74196, 74197, 74198, 74199, 74200, 74201, 74202, 74203, 74204, 74205, 74206, 74207, 74208, 74209, 74210, 74211, 74212, 74213, 74214, 74215, 74216, 74217, 74218, 74219, 74220, 74221, 74222, 74223, 74224, 74225, 74226, 74227, 74228, 74229, 74230, 74231, 74232, 74233, 74234, 74235, 74236, 74237, 74238, 74239, 74240, 74241, 74242, 74243, 74244, 74245, 74246, 74247, 74248, 74249, 74250, 74251, 74252, 74253, 74254, 74255, 74256, 74257, 74258, 74259, 74260, 74261, 74262, 74263, 74264, 74265, 74266, 74267, 74268, 74269, 74270, 74271, 74272, 74273, 74274, 74275, 74276, 74277, 74278, 74279, 74280, 74281, 74282, 74283, 74284, 74285, 74286, 74287, 74288, 74289, 74290, 74291, 74292, 74293, 74294, 74295, 74296, 74297, 74298, 74299, 74300, 74301, 74302, 74303, 74304, 74305, 74306, 74307, 74308, 74309, 74310, 74311, 74312, 74313, 74314, 74315, 74316, 74317, 74318, 74319, 74320, 74321, 74322, 74323, 74324, 74325, 74326, 74327, 74328, 74329, 74330, 74331, 74332, 74333, 74334, 74335, 74336, 74337, 74338, 74339, 74340, 74341, 74342, 74343, 74344, 74345, 74346, 74347, 74348, 74349, 74350, 74351, 74352, 74353, 74354, 74355, 74356, 74357, 74358, 74359, 74360, 74361, 74362, 74363, 74364, 74365, 74366, 74367, 74368, 74369, 74370, 74371, 74372, 74373, 74374, 74375, 74376, 74377, 74378, 74379, 74380, 74381, 74382, 74383, 74384, 74385, 74386, 74387, 74388, 74389, 74390, 74391, 74392, 74393, 74394, 74395, 74396, 74397, 74398, 74399, 74400, 74401, 74402, 74403, 74404, 74405, 74406, 74407, 74408, 74409, 74410, 74411, 74412, 74413, 74414, 74415, 74416, 74417, 74418, 74419, 74420, 74421, 74422, 74423, 74424, 74425, 74426, 74427, 74428, 74429, 74430, 74431, 74432, 74433, 74434, 74435, 74436, 74437, 74438, 74439, 74440, 74441, 74442, 74443, 74444, 74445, 74446, 74447, 74448, 74449, 74450, 74451, 74452, 74453, 74454, 74455, 74456, 74457, 74458, 74459, 74460, 74461, 74462, 74463, 74464, 74465, 74466, 74467, 74468, 74469, 74470, 74471, 74472, 74473, 74474, 74475, 74476, 74477, 74478, 74479, 74480, 74481, 74482, 74483, 74484, 74485, 74486, 74487, 74488, 74489, 74490, 74491, 74492, 74493, 74494, 74495, 74496, 74497, 74498, 74499, 74500, 74501, 74502, 74503, 74504, 74505, 74506, 74507, 74508, 74509, 74510, 74511, 74512, 74513, 74514, 74515, 74516, 74517, 74518, 74519, 74520, 74521, 74522, 74523, 74524, 74525, 74526, 74527, 74528, 74529, 74530, 74531, 74532, 74533, 74534, 74535, 74536, 74537, 74538, 74539, 74540, 74541, 74542, 74543, 74544, 74545, 74546, 74547, 74548, 74549, 74550, 74551, 74552, 74553, 74554, 74555, 74556, 74557, 74558, 74559, 74560, 74561, 74562, 74563, 74564, 74565, 74566, 74567, 74568, 74569, 74570, 74571, 74572, 74573, 74574, 74575, 74576, 74577, 74578, 74579, 74580, 74581, 74582, 74583, 74584, 74585, 74586, 74587, 74588, 74589, 74590, 74591, 74592, 74593, 74594, 74595, 74596, 74597, 74598, 74599, 74600, 74601, 74602, 74603, 74604, 74605, 74606, 74607, 74608, 74609, 74610, 74611, 74612, 74613, 74614, 74615, 74616, 74617, 74618, 74619, 74620, 74621, 74622, 74623, 74624, 74625, 74626, 74627, 74628, 74629, 74630, 74631, 74632, 74633, 74634, 74635, 74636, 74637, 74638, 74639, 74640, 74641, 74642, 74643, 74644, 74645, 74646, 74647, 74648, 74649, 74752, 74753, 74754, 74755, 74756, 74757, 74758, 74759, 74760, 74761, 74762, 74763, 74764, 74765, 74766, 74767, 74768, 74769, 74770, 74771, 74772, 74773, 74774, 74775, 74776, 74777, 74778, 74779, 74780, 74781, 74782, 74783, 74784, 74785, 74786, 74787, 74788, 74789, 74790, 74791, 74792, 74793, 74794, 74795, 74796, 74797, 74798, 74799, 74800, 74801, 74802, 74803, 74804, 74805, 74806, 74807, 74808, 74809, 74810, 74811, 74812, 74813, 74814, 74815, 74816, 74817, 74818, 74819, 74820, 74821, 74822, 74823, 74824, 74825, 74826, 74827, 74828, 74829, 74830, 74831, 74832, 74833, 74834, 74835, 74836, 74837, 74838, 74839, 74840, 74841, 74842, 74843, 74844, 74845, 74846, 74847, 74848, 74849, 74850, 74851, 74852, 74853, 74854, 74855, 74856, 74857, 74858, 74859, 74860, 74861, 74862, 74864, 74865, 74866, 74867, 74868, 74880, 74881, 74882, 74883, 74884, 74885, 74886, 74887, 74888, 74889, 74890, 74891, 74892, 74893, 74894, 74895, 74896, 74897, 74898, 74899, 74900, 74901, 74902, 74903, 74904, 74905, 74906, 74907, 74908, 74909, 74910, 74911, 74912, 74913, 74914, 74915, 74916, 74917, 74918, 74919, 74920, 74921, 74922, 74923, 74924, 74925, 74926, 74927, 74928, 74929, 74930, 74931, 74932, 74933, 74934, 74935, 74936, 74937, 74938, 74939, 74940, 74941, 74942, 74943, 74944, 74945, 74946, 74947, 74948, 74949, 74950, 74951, 74952, 74953, 74954, 74955, 74956, 74957, 74958, 74959, 74960, 74961, 74962, 74963, 74964, 74965, 74966, 74967, 74968, 74969, 74970, 74971, 74972, 74973, 74974, 74975, 74976, 74977, 74978, 74979, 74980, 74981, 74982, 74983, 74984, 74985, 74986, 74987, 74988, 74989, 74990, 74991, 74992, 74993, 74994, 74995, 74996, 74997, 74998, 74999, 75000, 75001, 75002, 75003, 75004, 75005, 75006, 75007, 75008, 75009, 75010, 75011, 75012, 75013, 75014, 75015, 75016, 75017, 75018, 75019, 75020, 75021, 75022, 75023, 75024, 75025, 75026, 75027, 75028, 75029, 75030, 75031, 75032, 75033, 75034, 75035, 75036, 75037, 75038, 75039, 75040, 75041, 75042, 75043, 75044, 75045, 75046, 75047, 75048, 75049, 75050, 75051, 75052, 75053, 75054, 75055, 75056, 75057, 75058, 75059, 75060, 75061, 75062, 75063, 75064, 75065, 75066, 75067, 75068, 75069, 75070, 75071, 75072, 75073, 75074, 75075, 77824, 77825, 77826, 77827, 77828, 77829, 77830, 77831, 77832, 77833, 77834, 77835, 77836, 77837, 77838, 77839, 77840, 77841, 77842, 77843, 77844, 77845, 77846, 77847, 77848, 77849, 77850, 77851, 77852, 77853, 77854, 77855, 77856, 77857, 77858, 77859, 77860, 77861, 77862, 77863, 77864, 77865, 77866, 77867, 77868, 77869, 77870, 77871, 77872, 77873, 77874, 77875, 77876, 77877, 77878, 77879, 77880, 77881, 77882, 77883, 77884, 77885, 77886, 77887, 77888, 77889, 77890, 77891, 77892, 77893, 77894, 77895, 77896, 77897, 77898, 77899, 77900, 77901, 77902, 77903, 77904, 77905, 77906, 77907, 77908, 77909, 77910, 77911, 77912, 77913, 77914, 77915, 77916, 77917, 77918, 77919, 77920, 77921, 77922, 77923, 77924, 77925, 77926, 77927, 77928, 77929, 77930, 77931, 77932, 77933, 77934, 77935, 77936, 77937, 77938, 77939, 77940, 77941, 77942, 77943, 77944, 77945, 77946, 77947, 77948, 77949, 77950, 77951, 77952, 77953, 77954, 77955, 77956, 77957, 77958, 77959, 77960, 77961, 77962, 77963, 77964, 77965, 77966, 77967, 77968, 77969, 77970, 77971, 77972, 77973, 77974, 77975, 77976, 77977, 77978, 77979, 77980, 77981, 77982, 77983, 77984, 77985, 77986, 77987, 77988, 77989, 77990, 77991, 77992, 77993, 77994, 77995, 77996, 77997, 77998, 77999, 78000, 78001, 78002, 78003, 78004, 78005, 78006, 78007, 78008, 78009, 78010, 78011, 78012, 78013, 78014, 78015, 78016, 78017, 78018, 78019, 78020, 78021, 78022, 78023, 78024, 78025, 78026, 78027, 78028, 78029, 78030, 78031, 78032, 78033, 78034, 78035, 78036, 78037, 78038, 78039, 78040, 78041, 78042, 78043, 78044, 78045, 78046, 78047, 78048, 78049, 78050, 78051, 78052, 78053, 78054, 78055, 78056, 78057, 78058, 78059, 78060, 78061, 78062, 78063, 78064, 78065, 78066, 78067, 78068, 78069, 78070, 78071, 78072, 78073, 78074, 78075, 78076, 78077, 78078, 78079, 78080, 78081, 78082, 78083, 78084, 78085, 78086, 78087, 78088, 78089, 78090, 78091, 78092, 78093, 78094, 78095, 78096, 78097, 78098, 78099, 78100, 78101, 78102, 78103, 78104, 78105, 78106, 78107, 78108, 78109, 78110, 78111, 78112, 78113, 78114, 78115, 78116, 78117, 78118, 78119, 78120, 78121, 78122, 78123, 78124, 78125, 78126, 78127, 78128, 78129, 78130, 78131, 78132, 78133, 78134, 78135, 78136, 78137, 78138, 78139, 78140, 78141, 78142, 78143, 78144, 78145, 78146, 78147, 78148, 78149, 78150, 78151, 78152, 78153, 78154, 78155, 78156, 78157, 78158, 78159, 78160, 78161, 78162, 78163, 78164, 78165, 78166, 78167, 78168, 78169, 78170, 78171, 78172, 78173, 78174, 78175, 78176, 78177, 78178, 78179, 78180, 78181, 78182, 78183, 78184, 78185, 78186, 78187, 78188, 78189, 78190, 78191, 78192, 78193, 78194, 78195, 78196, 78197, 78198, 78199, 78200, 78201, 78202, 78203, 78204, 78205, 78206, 78207, 78208, 78209, 78210, 78211, 78212, 78213, 78214, 78215, 78216, 78217, 78218, 78219, 78220, 78221, 78222, 78223, 78224, 78225, 78226, 78227, 78228, 78229, 78230, 78231, 78232, 78233, 78234, 78235, 78236, 78237, 78238, 78239, 78240, 78241, 78242, 78243, 78244, 78245, 78246, 78247, 78248, 78249, 78250, 78251, 78252, 78253, 78254, 78255, 78256, 78257, 78258, 78259, 78260, 78261, 78262, 78263, 78264, 78265, 78266, 78267, 78268, 78269, 78270, 78271, 78272, 78273, 78274, 78275, 78276, 78277, 78278, 78279, 78280, 78281, 78282, 78283, 78284, 78285, 78286, 78287, 78288, 78289, 78290, 78291, 78292, 78293, 78294, 78295, 78296, 78297, 78298, 78299, 78300, 78301, 78302, 78303, 78304, 78305, 78306, 78307, 78308, 78309, 78310, 78311, 78312, 78313, 78314, 78315, 78316, 78317, 78318, 78319, 78320, 78321, 78322, 78323, 78324, 78325, 78326, 78327, 78328, 78329, 78330, 78331, 78332, 78333, 78334, 78335, 78336, 78337, 78338, 78339, 78340, 78341, 78342, 78343, 78344, 78345, 78346, 78347, 78348, 78349, 78350, 78351, 78352, 78353, 78354, 78355, 78356, 78357, 78358, 78359, 78360, 78361, 78362, 78363, 78364, 78365, 78366, 78367, 78368, 78369, 78370, 78371, 78372, 78373, 78374, 78375, 78376, 78377, 78378, 78379, 78380, 78381, 78382, 78383, 78384, 78385, 78386, 78387, 78388, 78389, 78390, 78391, 78392, 78393, 78394, 78395, 78396, 78397, 78398, 78399, 78400, 78401, 78402, 78403, 78404, 78405, 78406, 78407, 78408, 78409, 78410, 78411, 78412, 78413, 78414, 78415, 78416, 78417, 78418, 78419, 78420, 78421, 78422, 78423, 78424, 78425, 78426, 78427, 78428, 78429, 78430, 78431, 78432, 78433, 78434, 78435, 78436, 78437, 78438, 78439, 78440, 78441, 78442, 78443, 78444, 78445, 78446, 78447, 78448, 78449, 78450, 78451, 78452, 78453, 78454, 78455, 78456, 78457, 78458, 78459, 78460, 78461, 78462, 78463, 78464, 78465, 78466, 78467, 78468, 78469, 78470, 78471, 78472, 78473, 78474, 78475, 78476, 78477, 78478, 78479, 78480, 78481, 78482, 78483, 78484, 78485, 78486, 78487, 78488, 78489, 78490, 78491, 78492, 78493, 78494, 78495, 78496, 78497, 78498, 78499, 78500, 78501, 78502, 78503, 78504, 78505, 78506, 78507, 78508, 78509, 78510, 78511, 78512, 78513, 78514, 78515, 78516, 78517, 78518, 78519, 78520, 78521, 78522, 78523, 78524, 78525, 78526, 78527, 78528, 78529, 78530, 78531, 78532, 78533, 78534, 78535, 78536, 78537, 78538, 78539, 78540, 78541, 78542, 78543, 78544, 78545, 78546, 78547, 78548, 78549, 78550, 78551, 78552, 78553, 78554, 78555, 78556, 78557, 78558, 78559, 78560, 78561, 78562, 78563, 78564, 78565, 78566, 78567, 78568, 78569, 78570, 78571, 78572, 78573, 78574, 78575, 78576, 78577, 78578, 78579, 78580, 78581, 78582, 78583, 78584, 78585, 78586, 78587, 78588, 78589, 78590, 78591, 78592, 78593, 78594, 78595, 78596, 78597, 78598, 78599, 78600, 78601, 78602, 78603, 78604, 78605, 78606, 78607, 78608, 78609, 78610, 78611, 78612, 78613, 78614, 78615, 78616, 78617, 78618, 78619, 78620, 78621, 78622, 78623, 78624, 78625, 78626, 78627, 78628, 78629, 78630, 78631, 78632, 78633, 78634, 78635, 78636, 78637, 78638, 78639, 78640, 78641, 78642, 78643, 78644, 78645, 78646, 78647, 78648, 78649, 78650, 78651, 78652, 78653, 78654, 78655, 78656, 78657, 78658, 78659, 78660, 78661, 78662, 78663, 78664, 78665, 78666, 78667, 78668, 78669, 78670, 78671, 78672, 78673, 78674, 78675, 78676, 78677, 78678, 78679, 78680, 78681, 78682, 78683, 78684, 78685, 78686, 78687, 78688, 78689, 78690, 78691, 78692, 78693, 78694, 78695, 78696, 78697, 78698, 78699, 78700, 78701, 78702, 78703, 78704, 78705, 78706, 78707, 78708, 78709, 78710, 78711, 78712, 78713, 78714, 78715, 78716, 78717, 78718, 78719, 78720, 78721, 78722, 78723, 78724, 78725, 78726, 78727, 78728, 78729, 78730, 78731, 78732, 78733, 78734, 78735, 78736, 78737, 78738, 78739, 78740, 78741, 78742, 78743, 78744, 78745, 78746, 78747, 78748, 78749, 78750, 78751, 78752, 78753, 78754, 78755, 78756, 78757, 78758, 78759, 78760, 78761, 78762, 78763, 78764, 78765, 78766, 78767, 78768, 78769, 78770, 78771, 78772, 78773, 78774, 78775, 78776, 78777, 78778, 78779, 78780, 78781, 78782, 78783, 78784, 78785, 78786, 78787, 78788, 78789, 78790, 78791, 78792, 78793, 78794, 78795, 78796, 78797, 78798, 78799, 78800, 78801, 78802, 78803, 78804, 78805, 78806, 78807, 78808, 78809, 78810, 78811, 78812, 78813, 78814, 78815, 78816, 78817, 78818, 78819, 78820, 78821, 78822, 78823, 78824, 78825, 78826, 78827, 78828, 78829, 78830, 78831, 78832, 78833, 78834, 78835, 78836, 78837, 78838, 78839, 78840, 78841, 78842, 78843, 78844, 78845, 78846, 78847, 78848, 78849, 78850, 78851, 78852, 78853, 78854, 78855, 78856, 78857, 78858, 78859, 78860, 78861, 78862, 78863, 78864, 78865, 78866, 78867, 78868, 78869, 78870, 78871, 78872, 78873, 78874, 78875, 78876, 78877, 78878, 78879, 78880, 78881, 78882, 78883, 78884, 78885, 78886, 78887, 78888, 78889, 78890, 78891, 78892, 78893, 78894, 78896, 78897, 78898, 78899, 78900, 78901, 78902, 78903, 78904, 82944, 82945, 82946, 82947, 82948, 82949, 82950, 82951, 82952, 82953, 82954, 82955, 82956, 82957, 82958, 82959, 82960, 82961, 82962, 82963, 82964, 82965, 82966, 82967, 82968, 82969, 82970, 82971, 82972, 82973, 82974, 82975, 82976, 82977, 82978, 82979, 82980, 82981, 82982, 82983, 82984, 82985, 82986, 82987, 82988, 82989, 82990, 82991, 82992, 82993, 82994, 82995, 82996, 82997, 82998, 82999, 83000, 83001, 83002, 83003, 83004, 83005, 83006, 83007, 83008, 83009, 83010, 83011, 83012, 83013, 83014, 83015, 83016, 83017, 83018, 83019, 83020, 83021, 83022, 83023, 83024, 83025, 83026, 83027, 83028, 83029, 83030, 83031, 83032, 83033, 83034, 83035, 83036, 83037, 83038, 83039, 83040, 83041, 83042, 83043, 83044, 83045, 83046, 83047, 83048, 83049, 83050, 83051, 83052, 83053, 83054, 83055, 83056, 83057, 83058, 83059, 83060, 83061, 83062, 83063, 83064, 83065, 83066, 83067, 83068, 83069, 83070, 83071, 83072, 83073, 83074, 83075, 83076, 83077, 83078, 83079, 83080, 83081, 83082, 83083, 83084, 83085, 83086, 83087, 83088, 83089, 83090, 83091, 83092, 83093, 83094, 83095, 83096, 83097, 83098, 83099, 83100, 83101, 83102, 83103, 83104, 83105, 83106, 83107, 83108, 83109, 83110, 83111, 83112, 83113, 83114, 83115, 83116, 83117, 83118, 83119, 83120, 83121, 83122, 83123, 83124, 83125, 83126, 83127, 83128, 83129, 83130, 83131, 83132, 83133, 83134, 83135, 83136, 83137, 83138, 83139, 83140, 83141, 83142, 83143, 83144, 83145, 83146, 83147, 83148, 83149, 83150, 83151, 83152, 83153, 83154, 83155, 83156, 83157, 83158, 83159, 83160, 83161, 83162, 83163, 83164, 83165, 83166, 83167, 83168, 83169, 83170, 83171, 83172, 83173, 83174, 83175, 83176, 83177, 83178, 83179, 83180, 83181, 83182, 83183, 83184, 83185, 83186, 83187, 83188, 83189, 83190, 83191, 83192, 83193, 83194, 83195, 83196, 83197, 83198, 83199, 83200, 83201, 83202, 83203, 83204, 83205, 83206, 83207, 83208, 83209, 83210, 83211, 83212, 83213, 83214, 83215, 83216, 83217, 83218, 83219, 83220, 83221, 83222, 83223, 83224, 83225, 83226, 83227, 83228, 83229, 83230, 83231, 83232, 83233, 83234, 83235, 83236, 83237, 83238, 83239, 83240, 83241, 83242, 83243, 83244, 83245, 83246, 83247, 83248, 83249, 83250, 83251, 83252, 83253, 83254, 83255, 83256, 83257, 83258, 83259, 83260, 83261, 83262, 83263, 83264, 83265, 83266, 83267, 83268, 83269, 83270, 83271, 83272, 83273, 83274, 83275, 83276, 83277, 83278, 83279, 83280, 83281, 83282, 83283, 83284, 83285, 83286, 83287, 83288, 83289, 83290, 83291, 83292, 83293, 83294, 83295, 83296, 83297, 83298, 83299, 83300, 83301, 83302, 83303, 83304, 83305, 83306, 83307, 83308, 83309, 83310, 83311, 83312, 83313, 83314, 83315, 83316, 83317, 83318, 83319, 83320, 83321, 83322, 83323, 83324, 83325, 83326, 83327, 83328, 83329, 83330, 83331, 83332, 83333, 83334, 83335, 83336, 83337, 83338, 83339, 83340, 83341, 83342, 83343, 83344, 83345, 83346, 83347, 83348, 83349, 83350, 83351, 83352, 83353, 83354, 83355, 83356, 83357, 83358, 83359, 83360, 83361, 83362, 83363, 83364, 83365, 83366, 83367, 83368, 83369, 83370, 83371, 83372, 83373, 83374, 83375, 83376, 83377, 83378, 83379, 83380, 83381, 83382, 83383, 83384, 83385, 83386, 83387, 83388, 83389, 83390, 83391, 83392, 83393, 83394, 83395, 83396, 83397, 83398, 83399, 83400, 83401, 83402, 83403, 83404, 83405, 83406, 83407, 83408, 83409, 83410, 83411, 83412, 83413, 83414, 83415, 83416, 83417, 83418, 83419, 83420, 83421, 83422, 83423, 83424, 83425, 83426, 83427, 83428, 83429, 83430, 83431, 83432, 83433, 83434, 83435, 83436, 83437, 83438, 83439, 83440, 83441, 83442, 83443, 83444, 83445, 83446, 83447, 83448, 83449, 83450, 83451, 83452, 83453, 83454, 83455, 83456, 83457, 83458, 83459, 83460, 83461, 83462, 83463, 83464, 83465, 83466, 83467, 83468, 83469, 83470, 83471, 83472, 83473, 83474, 83475, 83476, 83477, 83478, 83479, 83480, 83481, 83482, 83483, 83484, 83485, 83486, 83487, 83488, 83489, 83490, 83491, 83492, 83493, 83494, 83495, 83496, 83497, 83498, 83499, 83500, 83501, 83502, 83503, 83504, 83505, 83506, 83507, 83508, 83509, 83510, 83511, 83512, 83513, 83514, 83515, 83516, 83517, 83518, 83519, 83520, 83521, 83522, 83523, 83524, 83525, 83526, 92160, 92161, 92162, 92163, 92164, 92165, 92166, 92167, 92168, 92169, 92170, 92171, 92172, 92173, 92174, 92175, 92176, 92177, 92178, 92179, 92180, 92181, 92182, 92183, 92184, 92185, 92186, 92187, 92188, 92189, 92190, 92191, 92192, 92193, 92194, 92195, 92196, 92197, 92198, 92199, 92200, 92201, 92202, 92203, 92204, 92205, 92206, 92207, 92208, 92209, 92210, 92211, 92212, 92213, 92214, 92215, 92216, 92217, 92218, 92219, 92220, 92221, 92222, 92223, 92224, 92225, 92226, 92227, 92228, 92229, 92230, 92231, 92232, 92233, 92234, 92235, 92236, 92237, 92238, 92239, 92240, 92241, 92242, 92243, 92244, 92245, 92246, 92247, 92248, 92249, 92250, 92251, 92252, 92253, 92254, 92255, 92256, 92257, 92258, 92259, 92260, 92261, 92262, 92263, 92264, 92265, 92266, 92267, 92268, 92269, 92270, 92271, 92272, 92273, 92274, 92275, 92276, 92277, 92278, 92279, 92280, 92281, 92282, 92283, 92284, 92285, 92286, 92287, 92288, 92289, 92290, 92291, 92292, 92293, 92294, 92295, 92296, 92297, 92298, 92299, 92300, 92301, 92302, 92303, 92304, 92305, 92306, 92307, 92308, 92309, 92310, 92311, 92312, 92313, 92314, 92315, 92316, 92317, 92318, 92319, 92320, 92321, 92322, 92323, 92324, 92325, 92326, 92327, 92328, 92329, 92330, 92331, 92332, 92333, 92334, 92335, 92336, 92337, 92338, 92339, 92340, 92341, 92342, 92343, 92344, 92345, 92346, 92347, 92348, 92349, 92350, 92351, 92352, 92353, 92354, 92355, 92356, 92357, 92358, 92359, 92360, 92361, 92362, 92363, 92364, 92365, 92366, 92367, 92368, 92369, 92370, 92371, 92372, 92373, 92374, 92375, 92376, 92377, 92378, 92379, 92380, 92381, 92382, 92383, 92384, 92385, 92386, 92387, 92388, 92389, 92390, 92391, 92392, 92393, 92394, 92395, 92396, 92397, 92398, 92399, 92400, 92401, 92402, 92403, 92404, 92405, 92406, 92407, 92408, 92409, 92410, 92411, 92412, 92413, 92414, 92415, 92416, 92417, 92418, 92419, 92420, 92421, 92422, 92423, 92424, 92425, 92426, 92427, 92428, 92429, 92430, 92431, 92432, 92433, 92434, 92435, 92436, 92437, 92438, 92439, 92440, 92441, 92442, 92443, 92444, 92445, 92446, 92447, 92448, 92449, 92450, 92451, 92452, 92453, 92454, 92455, 92456, 92457, 92458, 92459, 92460, 92461, 92462, 92463, 92464, 92465, 92466, 92467, 92468, 92469, 92470, 92471, 92472, 92473, 92474, 92475, 92476, 92477, 92478, 92479, 92480, 92481, 92482, 92483, 92484, 92485, 92486, 92487, 92488, 92489, 92490, 92491, 92492, 92493, 92494, 92495, 92496, 92497, 92498, 92499, 92500, 92501, 92502, 92503, 92504, 92505, 92506, 92507, 92508, 92509, 92510, 92511, 92512, 92513, 92514, 92515, 92516, 92517, 92518, 92519, 92520, 92521, 92522, 92523, 92524, 92525, 92526, 92527, 92528, 92529, 92530, 92531, 92532, 92533, 92534, 92535, 92536, 92537, 92538, 92539, 92540, 92541, 92542, 92543, 92544, 92545, 92546, 92547, 92548, 92549, 92550, 92551, 92552, 92553, 92554, 92555, 92556, 92557, 92558, 92559, 92560, 92561, 92562, 92563, 92564, 92565, 92566, 92567, 92568, 92569, 92570, 92571, 92572, 92573, 92574, 92575, 92576, 92577, 92578, 92579, 92580, 92581, 92582, 92583, 92584, 92585, 92586, 92587, 92588, 92589, 92590, 92591, 92592, 92593, 92594, 92595, 92596, 92597, 92598, 92599, 92600, 92601, 92602, 92603, 92604, 92605, 92606, 92607, 92608, 92609, 92610, 92611, 92612, 92613, 92614, 92615, 92616, 92617, 92618, 92619, 92620, 92621, 92622, 92623, 92624, 92625, 92626, 92627, 92628, 92629, 92630, 92631, 92632, 92633, 92634, 92635, 92636, 92637, 92638, 92639, 92640, 92641, 92642, 92643, 92644, 92645, 92646, 92647, 92648, 92649, 92650, 92651, 92652, 92653, 92654, 92655, 92656, 92657, 92658, 92659, 92660, 92661, 92662, 92663, 92664, 92665, 92666, 92667, 92668, 92669, 92670, 92671, 92672, 92673, 92674, 92675, 92676, 92677, 92678, 92679, 92680, 92681, 92682, 92683, 92684, 92685, 92686, 92687, 92688, 92689, 92690, 92691, 92692, 92693, 92694, 92695, 92696, 92697, 92698, 92699, 92700, 92701, 92702, 92703, 92704, 92705, 92706, 92707, 92708, 92709, 92710, 92711, 92712, 92713, 92714, 92715, 92716, 92717, 92718, 92719, 92720, 92721, 92722, 92723, 92724, 92725, 92726, 92727, 92728, 92736, 92737, 92738, 92739, 92740, 92741, 92742, 92743, 92744, 92745, 92746, 92747, 92748, 92749, 92750, 92751, 92752, 92753, 92754, 92755, 92756, 92757, 92758, 92759, 92760, 92761, 92762, 92763, 92764, 92765, 92766, 92768, 92769, 92770, 92771, 92772, 92773, 92774, 92775, 92776, 92777, 92782, 92783, 92880, 92881, 92882, 92883, 92884, 92885, 92886, 92887, 92888, 92889, 92890, 92891, 92892, 92893, 92894, 92895, 92896, 92897, 92898, 92899, 92900, 92901, 92902, 92903, 92904, 92905, 92906, 92907, 92908, 92909, 92912, 92913, 92914, 92915, 92916, 92917, 92928, 92929, 92930, 92931, 92932, 92933, 92934, 92935, 92936, 92937, 92938, 92939, 92940, 92941, 92942, 92943, 92944, 92945, 92946, 92947, 92948, 92949, 92950, 92951, 92952, 92953, 92954, 92955, 92956, 92957, 92958, 92959, 92960, 92961, 92962, 92963, 92964, 92965, 92966, 92967, 92968, 92969, 92970, 92971, 92972, 92973, 92974, 92975, 92976, 92977, 92978, 92979, 92980, 92981, 92982, 92983, 92984, 92985, 92986, 92987, 92988, 92989, 92990, 92991, 92992, 92993, 92994, 92995, 92996, 92997, 93008, 93009, 93010, 93011, 93012, 93013, 93014, 93015, 93016, 93017, 93019, 93020, 93021, 93022, 93023, 93024, 93025, 93027, 93028, 93029, 93030, 93031, 93032, 93033, 93034, 93035, 93036, 93037, 93038, 93039, 93040, 93041, 93042, 93043, 93044, 93045, 93046, 93047, 93053, 93054, 93055, 93056, 93057, 93058, 93059, 93060, 93061, 93062, 93063, 93064, 93065, 93066, 93067, 93068, 93069, 93070, 93071, 93760, 93761, 93762, 93763, 93764, 93765, 93766, 93767, 93768, 93769, 93770, 93771, 93772, 93773, 93774, 93775, 93776, 93777, 93778, 93779, 93780, 93781, 93782, 93783, 93784, 93785, 93786, 93787, 93788, 93789, 93790, 93791, 93792, 93793, 93794, 93795, 93796, 93797, 93798, 93799, 93800, 93801, 93802, 93803, 93804, 93805, 93806, 93807, 93808, 93809, 93810, 93811, 93812, 93813, 93814, 93815, 93816, 93817, 93818, 93819, 93820, 93821, 93822, 93823, 93824, 93825, 93826, 93827, 93828, 93829, 93830, 93831, 93832, 93833, 93834, 93835, 93836, 93837, 93838, 93839, 93840, 93841, 93842, 93843, 93844, 93845, 93846, 93847, 93848, 93849, 93850, 93952, 93953, 93954, 93955, 93956, 93957, 93958, 93959, 93960, 93961, 93962, 93963, 93964, 93965, 93966, 93967, 93968, 93969, 93970, 93971, 93972, 93973, 93974, 93975, 93976, 93977, 93978, 93979, 93980, 93981, 93982, 93983, 93984, 93985, 93986, 93987, 93988, 93989, 93990, 93991, 93992, 93993, 93994, 93995, 93996, 93997, 93998, 93999, 94000, 94001, 94002, 94003, 94004, 94005, 94006, 94007, 94008, 94009, 94010, 94011, 94012, 94013, 94014, 94015, 94016, 94017, 94018, 94019, 94020, 94021, 94022, 94023, 94024, 94025, 94026, 94031, 94032, 94033, 94034, 94035, 94036, 94037, 94038, 94039, 94040, 94041, 94042, 94043, 94044, 94045, 94046, 94047, 94048, 94049, 94050, 94051, 94052, 94053, 94054, 94055, 94056, 94057, 94058, 94059, 94060, 94061, 94062, 94063, 94064, 94065, 94066, 94067, 94068, 94069, 94070, 94071, 94072, 94073, 94074, 94075, 94076, 94077, 94078, 94079, 94080, 94081, 94082, 94083, 94084, 94085, 94086, 94087, 94095, 94096, 94097, 94098, 94099, 94100, 94101, 94102, 94103, 94104, 94105, 94106, 94107, 94108, 94109, 94110, 94111, 94176, 94177, 94178, 94179, 94208, 100343, 100352, 100353, 100354, 100355, 100356, 100357, 100358, 100359, 100360, 100361, 100362, 100363, 100364, 100365, 100366, 100367, 100368, 100369, 100370, 100371, 100372, 100373, 100374, 100375, 100376, 100377, 100378, 100379, 100380, 100381, 100382, 100383, 100384, 100385, 100386, 100387, 100388, 100389, 100390, 100391, 100392, 100393, 100394, 100395, 100396, 100397, 100398, 100399, 100400, 100401, 100402, 100403, 100404, 100405, 100406, 100407, 100408, 100409, 100410, 100411, 100412, 100413, 100414, 100415, 100416, 100417, 100418, 100419, 100420, 100421, 100422, 100423, 100424, 100425, 100426, 100427, 100428, 100429, 100430, 100431, 100432, 100433, 100434, 100435, 100436, 100437, 100438, 100439, 100440, 100441, 100442, 100443, 100444, 100445, 100446, 100447, 100448, 100449, 100450, 100451, 100452, 100453, 100454, 100455, 100456, 100457, 100458, 100459, 100460, 100461, 100462, 100463, 100464, 100465, 100466, 100467, 100468, 100469, 100470, 100471, 100472, 100473, 100474, 100475, 100476, 100477, 100478, 100479, 100480, 100481, 100482, 100483, 100484, 100485, 100486, 100487, 100488, 100489, 100490, 100491, 100492, 100493, 100494, 100495, 100496, 100497, 100498, 100499, 100500, 100501, 100502, 100503, 100504, 100505, 100506, 100507, 100508, 100509, 100510, 100511, 100512, 100513, 100514, 100515, 100516, 100517, 100518, 100519, 100520, 100521, 100522, 100523, 100524, 100525, 100526, 100527, 100528, 100529, 100530, 100531, 100532, 100533, 100534, 100535, 100536, 100537, 100538, 100539, 100540, 100541, 100542, 100543, 100544, 100545, 100546, 100547, 100548, 100549, 100550, 100551, 100552, 100553, 100554, 100555, 100556, 100557, 100558, 100559, 100560, 100561, 100562, 100563, 100564, 100565, 100566, 100567, 100568, 100569, 100570, 100571, 100572, 100573, 100574, 100575, 100576, 100577, 100578, 100579, 100580, 100581, 100582, 100583, 100584, 100585, 100586, 100587, 100588, 100589, 100590, 100591, 100592, 100593, 100594, 100595, 100596, 100597, 100598, 100599, 100600, 100601, 100602, 100603, 100604, 100605, 100606, 100607, 100608, 100609, 100610, 100611, 100612, 100613, 100614, 100615, 100616, 100617, 100618, 100619, 100620, 100621, 100622, 100623, 100624, 100625, 100626, 100627, 100628, 100629, 100630, 100631, 100632, 100633, 100634, 100635, 100636, 100637, 100638, 100639, 100640, 100641, 100642, 100643, 100644, 100645, 100646, 100647, 100648, 100649, 100650, 100651, 100652, 100653, 100654, 100655, 100656, 100657, 100658, 100659, 100660, 100661, 100662, 100663, 100664, 100665, 100666, 100667, 100668, 100669, 100670, 100671, 100672, 100673, 100674, 100675, 100676, 100677, 100678, 100679, 100680, 100681, 100682, 100683, 100684, 100685, 100686, 100687, 100688, 100689, 100690, 100691, 100692, 100693, 100694, 100695, 100696, 100697, 100698, 100699, 100700, 100701, 100702, 100703, 100704, 100705, 100706, 100707, 100708, 100709, 100710, 100711, 100712, 100713, 100714, 100715, 100716, 100717, 100718, 100719, 100720, 100721, 100722, 100723, 100724, 100725, 100726, 100727, 100728, 100729, 100730, 100731, 100732, 100733, 100734, 100735, 100736, 100737, 100738, 100739, 100740, 100741, 100742, 100743, 100744, 100745, 100746, 100747, 100748, 100749, 100750, 100751, 100752, 100753, 100754, 100755, 100756, 100757, 100758, 100759, 100760, 100761, 100762, 100763, 100764, 100765, 100766, 100767, 100768, 100769, 100770, 100771, 100772, 100773, 100774, 100775, 100776, 100777, 100778, 100779, 100780, 100781, 100782, 100783, 100784, 100785, 100786, 100787, 100788, 100789, 100790, 100791, 100792, 100793, 100794, 100795, 100796, 100797, 100798, 100799, 100800, 100801, 100802, 100803, 100804, 100805, 100806, 100807, 100808, 100809, 100810, 100811, 100812, 100813, 100814, 100815, 100816, 100817, 100818, 100819, 100820, 100821, 100822, 100823, 100824, 100825, 100826, 100827, 100828, 100829, 100830, 100831, 100832, 100833, 100834, 100835, 100836, 100837, 100838, 100839, 100840, 100841, 100842, 100843, 100844, 100845, 100846, 100847, 100848, 100849, 100850, 100851, 100852, 100853, 100854, 100855, 100856, 100857, 100858, 100859, 100860, 100861, 100862, 100863, 100864, 100865, 100866, 100867, 100868, 100869, 100870, 100871, 100872, 100873, 100874, 100875, 100876, 100877, 100878, 100879, 100880, 100881, 100882, 100883, 100884, 100885, 100886, 100887, 100888, 100889, 100890, 100891, 100892, 100893, 100894, 100895, 100896, 100897, 100898, 100899, 100900, 100901, 100902, 100903, 100904, 100905, 100906, 100907, 100908, 100909, 100910, 100911, 100912, 100913, 100914, 100915, 100916, 100917, 100918, 100919, 100920, 100921, 100922, 100923, 100924, 100925, 100926, 100927, 100928, 100929, 100930, 100931, 100932, 100933, 100934, 100935, 100936, 100937, 100938, 100939, 100940, 100941, 100942, 100943, 100944, 100945, 100946, 100947, 100948, 100949, 100950, 100951, 100952, 100953, 100954, 100955, 100956, 100957, 100958, 100959, 100960, 100961, 100962, 100963, 100964, 100965, 100966, 100967, 100968, 100969, 100970, 100971, 100972, 100973, 100974, 100975, 100976, 100977, 100978, 100979, 100980, 100981, 100982, 100983, 100984, 100985, 100986, 100987, 100988, 100989, 100990, 100991, 100992, 100993, 100994, 100995, 100996, 100997, 100998, 100999, 101000, 101001, 101002, 101003, 101004, 101005, 101006, 101007, 101008, 101009, 101010, 101011, 101012, 101013, 101014, 101015, 101016, 101017, 101018, 101019, 101020, 101021, 101022, 101023, 101024, 101025, 101026, 101027, 101028, 101029, 101030, 101031, 101032, 101033, 101034, 101035, 101036, 101037, 101038, 101039, 101040, 101041, 101042, 101043, 101044, 101045, 101046, 101047, 101048, 101049, 101050, 101051, 101052, 101053, 101054, 101055, 101056, 101057, 101058, 101059, 101060, 101061, 101062, 101063, 101064, 101065, 101066, 101067, 101068, 101069, 101070, 101071, 101072, 101073, 101074, 101075, 101076, 101077, 101078, 101079, 101080, 101081, 101082, 101083, 101084, 101085, 101086, 101087, 101088, 101089, 101090, 101091, 101092, 101093, 101094, 101095, 101096, 101097, 101098, 101099, 101100, 101101, 101102, 101103, 101104, 101105, 101106, 110592, 110593, 110594, 110595, 110596, 110597, 110598, 110599, 110600, 110601, 110602, 110603, 110604, 110605, 110606, 110607, 110608, 110609, 110610, 110611, 110612, 110613, 110614, 110615, 110616, 110617, 110618, 110619, 110620, 110621, 110622, 110623, 110624, 110625, 110626, 110627, 110628, 110629, 110630, 110631, 110632, 110633, 110634, 110635, 110636, 110637, 110638, 110639, 110640, 110641, 110642, 110643, 110644, 110645, 110646, 110647, 110648, 110649, 110650, 110651, 110652, 110653, 110654, 110655, 110656, 110657, 110658, 110659, 110660, 110661, 110662, 110663, 110664, 110665, 110666, 110667, 110668, 110669, 110670, 110671, 110672, 110673, 110674, 110675, 110676, 110677, 110678, 110679, 110680, 110681, 110682, 110683, 110684, 110685, 110686, 110687, 110688, 110689, 110690, 110691, 110692, 110693, 110694, 110695, 110696, 110697, 110698, 110699, 110700, 110701, 110702, 110703, 110704, 110705, 110706, 110707, 110708, 110709, 110710, 110711, 110712, 110713, 110714, 110715, 110716, 110717, 110718, 110719, 110720, 110721, 110722, 110723, 110724, 110725, 110726, 110727, 110728, 110729, 110730, 110731, 110732, 110733, 110734, 110735, 110736, 110737, 110738, 110739, 110740, 110741, 110742, 110743, 110744, 110745, 110746, 110747, 110748, 110749, 110750, 110751, 110752, 110753, 110754, 110755, 110756, 110757, 110758, 110759, 110760, 110761, 110762, 110763, 110764, 110765, 110766, 110767, 110768, 110769, 110770, 110771, 110772, 110773, 110774, 110775, 110776, 110777, 110778, 110779, 110780, 110781, 110782, 110783, 110784, 110785, 110786, 110787, 110788, 110789, 110790, 110791, 110792, 110793, 110794, 110795, 110796, 110797, 110798, 110799, 110800, 110801, 110802, 110803, 110804, 110805, 110806, 110807, 110808, 110809, 110810, 110811, 110812, 110813, 110814, 110815, 110816, 110817, 110818, 110819, 110820, 110821, 110822, 110823, 110824, 110825, 110826, 110827, 110828, 110829, 110830, 110831, 110832, 110833, 110834, 110835, 110836, 110837, 110838, 110839, 110840, 110841, 110842, 110843, 110844, 110845, 110846, 110847, 110848, 110849, 110850, 110851, 110852, 110853, 110854, 110855, 110856, 110857, 110858, 110859, 110860, 110861, 110862, 110863, 110864, 110865, 110866, 110867, 110868, 110869, 110870, 110871, 110872, 110873, 110874, 110875, 110876, 110877, 110878, 110928, 110929, 110930, 110948, 110949, 110950, 110951, 110960, 110961, 110962, 110963, 110964, 110965, 110966, 110967, 110968, 110969, 110970, 110971, 110972, 110973, 110974, 110975, 110976, 110977, 110978, 110979, 110980, 110981, 110982, 110983, 110984, 110985, 110986, 110987, 110988, 110989, 110990, 110991, 110992, 110993, 110994, 110995, 110996, 110997, 110998, 110999, 111000, 111001, 111002, 111003, 111004, 111005, 111006, 111007, 111008, 111009, 111010, 111011, 111012, 111013, 111014, 111015, 111016, 111017, 111018, 111019, 111020, 111021, 111022, 111023, 111024, 111025, 111026, 111027, 111028, 111029, 111030, 111031, 111032, 111033, 111034, 111035, 111036, 111037, 111038, 111039, 111040, 111041, 111042, 111043, 111044, 111045, 111046, 111047, 111048, 111049, 111050, 111051, 111052, 111053, 111054, 111055, 111056, 111057, 111058, 111059, 111060, 111061, 111062, 111063, 111064, 111065, 111066, 111067, 111068, 111069, 111070, 111071, 111072, 111073, 111074, 111075, 111076, 111077, 111078, 111079, 111080, 111081, 111082, 111083, 111084, 111085, 111086, 111087, 111088, 111089, 111090, 111091, 111092, 111093, 111094, 111095, 111096, 111097, 111098, 111099, 111100, 111101, 111102, 111103, 111104, 111105, 111106, 111107, 111108, 111109, 111110, 111111, 111112, 111113, 111114, 111115, 111116, 111117, 111118, 111119, 111120, 111121, 111122, 111123, 111124, 111125, 111126, 111127, 111128, 111129, 111130, 111131, 111132, 111133, 111134, 111135, 111136, 111137, 111138, 111139, 111140, 111141, 111142, 111143, 111144, 111145, 111146, 111147, 111148, 111149, 111150, 111151, 111152, 111153, 111154, 111155, 111156, 111157, 111158, 111159, 111160, 111161, 111162, 111163, 111164, 111165, 111166, 111167, 111168, 111169, 111170, 111171, 111172, 111173, 111174, 111175, 111176, 111177, 111178, 111179, 111180, 111181, 111182, 111183, 111184, 111185, 111186, 111187, 111188, 111189, 111190, 111191, 111192, 111193, 111194, 111195, 111196, 111197, 111198, 111199, 111200, 111201, 111202, 111203, 111204, 111205, 111206, 111207, 111208, 111209, 111210, 111211, 111212, 111213, 111214, 111215, 111216, 111217, 111218, 111219, 111220, 111221, 111222, 111223, 111224, 111225, 111226, 111227, 111228, 111229, 111230, 111231, 111232, 111233, 111234, 111235, 111236, 111237, 111238, 111239, 111240, 111241, 111242, 111243, 111244, 111245, 111246, 111247, 111248, 111249, 111250, 111251, 111252, 111253, 111254, 111255, 111256, 111257, 111258, 111259, 111260, 111261, 111262, 111263, 111264, 111265, 111266, 111267, 111268, 111269, 111270, 111271, 111272, 111273, 111274, 111275, 111276, 111277, 111278, 111279, 111280, 111281, 111282, 111283, 111284, 111285, 111286, 111287, 111288, 111289, 111290, 111291, 111292, 111293, 111294, 111295, 111296, 111297, 111298, 111299, 111300, 111301, 111302, 111303, 111304, 111305, 111306, 111307, 111308, 111309, 111310, 111311, 111312, 111313, 111314, 111315, 111316, 111317, 111318, 111319, 111320, 111321, 111322, 111323, 111324, 111325, 111326, 111327, 111328, 111329, 111330, 111331, 111332, 111333, 111334, 111335, 111336, 111337, 111338, 111339, 111340, 111341, 111342, 111343, 111344, 111345, 111346, 111347, 111348, 111349, 111350, 111351, 111352, 111353, 111354, 111355, 113664, 113665, 113666, 113667, 113668, 113669, 113670, 113671, 113672, 113673, 113674, 113675, 113676, 113677, 113678, 113679, 113680, 113681, 113682, 113683, 113684, 113685, 113686, 113687, 113688, 113689, 113690, 113691, 113692, 113693, 113694, 113695, 113696, 113697, 113698, 113699, 113700, 113701, 113702, 113703, 113704, 113705, 113706, 113707, 113708, 113709, 113710, 113711, 113712, 113713, 113714, 113715, 113716, 113717, 113718, 113719, 113720, 113721, 113722, 113723, 113724, 113725, 113726, 113727, 113728, 113729, 113730, 113731, 113732, 113733, 113734, 113735, 113736, 113737, 113738, 113739, 113740, 113741, 113742, 113743, 113744, 113745, 113746, 113747, 113748, 113749, 113750, 113751, 113752, 113753, 113754, 113755, 113756, 113757, 113758, 113759, 113760, 113761, 113762, 113763, 113764, 113765, 113766, 113767, 113768, 113769, 113770, 113776, 113777, 113778, 113779, 113780, 113781, 113782, 113783, 113784, 113785, 113786, 113787, 113788, 113792, 113793, 113794, 113795, 113796, 113797, 113798, 113799, 113800, 113808, 113809, 113810, 113811, 113812, 113813, 113814, 113815, 113816, 113817, 113820, 113821, 113822, 113823, 113824, 113825, 113826, 113827, 118784, 118785, 118786, 118787, 118788, 118789, 118790, 118791, 118792, 118793, 118794, 118795, 118796, 118797, 118798, 118799, 118800, 118801, 118802, 118803, 118804, 118805, 118806, 118807, 118808, 118809, 118810, 118811, 118812, 118813, 118814, 118815, 118816, 118817, 118818, 118819, 118820, 118821, 118822, 118823, 118824, 118825, 118826, 118827, 118828, 118829, 118830, 118831, 118832, 118833, 118834, 118835, 118836, 118837, 118838, 118839, 118840, 118841, 118842, 118843, 118844, 118845, 118846, 118847, 118848, 118849, 118850, 118851, 118852, 118853, 118854, 118855, 118856, 118857, 118858, 118859, 118860, 118861, 118862, 118863, 118864, 118865, 118866, 118867, 118868, 118869, 118870, 118871, 118872, 118873, 118874, 118875, 118876, 118877, 118878, 118879, 118880, 118881, 118882, 118883, 118884, 118885, 118886, 118887, 118888, 118889, 118890, 118891, 118892, 118893, 118894, 118895, 118896, 118897, 118898, 118899, 118900, 118901, 118902, 118903, 118904, 118905, 118906, 118907, 118908, 118909, 118910, 118911, 118912, 118913, 118914, 118915, 118916, 118917, 118918, 118919, 118920, 118921, 118922, 118923, 118924, 118925, 118926, 118927, 118928, 118929, 118930, 118931, 118932, 118933, 118934, 118935, 118936, 118937, 118938, 118939, 118940, 118941, 118942, 118943, 118944, 118945, 118946, 118947, 118948, 118949, 118950, 118951, 118952, 118953, 118954, 118955, 118956, 118957, 118958, 118959, 118960, 118961, 118962, 118963, 118964, 118965, 118966, 118967, 118968, 118969, 118970, 118971, 118972, 118973, 118974, 118975, 118976, 118977, 118978, 118979, 118980, 118981, 118982, 118983, 118984, 118985, 118986, 118987, 118988, 118989, 118990, 118991, 118992, 118993, 118994, 118995, 118996, 118997, 118998, 118999, 119000, 119001, 119002, 119003, 119004, 119005, 119006, 119007, 119008, 119009, 119010, 119011, 119012, 119013, 119014, 119015, 119016, 119017, 119018, 119019, 119020, 119021, 119022, 119023, 119024, 119025, 119026, 119027, 119028, 119029, 119040, 119041, 119042, 119043, 119044, 119045, 119046, 119047, 119048, 119049, 119050, 119051, 119052, 119053, 119054, 119055, 119056, 119057, 119058, 119059, 119060, 119061, 119062, 119063, 119064, 119065, 119066, 119067, 119068, 119069, 119070, 119071, 119072, 119073, 119074, 119075, 119076, 119077, 119078, 119081, 119082, 119083, 119084, 119085, 119086, 119087, 119088, 119089, 119090, 119091, 119092, 119093, 119094, 119095, 119096, 119097, 119098, 119099, 119100, 119101, 119102, 119103, 119104, 119105, 119106, 119107, 119108, 119109, 119110, 119111, 119112, 119113, 119114, 119115, 119116, 119117, 119118, 119119, 119120, 119121, 119122, 119123, 119124, 119125, 119126, 119127, 119128, 119129, 119130, 119131, 119132, 119133, 119134, 119135, 119136, 119137, 119138, 119139, 119140, 119141, 119142, 119143, 119144, 119145, 119146, 119147, 119148, 119149, 119150, 119151, 119152, 119153, 119154, 119155, 119156, 119157, 119158, 119159, 119160, 119161, 119162, 119163, 119164, 119165, 119166, 119167, 119168, 119169, 119170, 119171, 119172, 119173, 119174, 119175, 119176, 119177, 119178, 119179, 119180, 119181, 119182, 119183, 119184, 119185, 119186, 119187, 119188, 119189, 119190, 119191, 119192, 119193, 119194, 119195, 119196, 119197, 119198, 119199, 119200, 119201, 119202, 119203, 119204, 119205, 119206, 119207, 119208, 119209, 119210, 119211, 119212, 119213, 119214, 119215, 119216, 119217, 119218, 119219, 119220, 119221, 119222, 119223, 119224, 119225, 119226, 119227, 119228, 119229, 119230, 119231, 119232, 119233, 119234, 119235, 119236, 119237, 119238, 119239, 119240, 119241, 119242, 119243, 119244, 119245, 119246, 119247, 119248, 119249, 119250, 119251, 119252, 119253, 119254, 119255, 119256, 119257, 119258, 119259, 119260, 119261, 119262, 119263, 119264, 119265, 119266, 119267, 119268, 119269, 119270, 119271, 119272, 119296, 119297, 119298, 119299, 119300, 119301, 119302, 119303, 119304, 119305, 119306, 119307, 119308, 119309, 119310, 119311, 119312, 119313, 119314, 119315, 119316, 119317, 119318, 119319, 119320, 119321, 119322, 119323, 119324, 119325, 119326, 119327, 119328, 119329, 119330, 119331, 119332, 119333, 119334, 119335, 119336, 119337, 119338, 119339, 119340, 119341, 119342, 119343, 119344, 119345, 119346, 119347, 119348, 119349, 119350, 119351, 119352, 119353, 119354, 119355, 119356, 119357, 119358, 119359, 119360, 119361, 119362, 119363, 119364, 119365, 119520, 119521, 119522, 119523, 119524, 119525, 119526, 119527, 119528, 119529, 119530, 119531, 119532, 119533, 119534, 119535, 119536, 119537, 119538, 119539, 119552, 119553, 119554, 119555, 119556, 119557, 119558, 119559, 119560, 119561, 119562, 119563, 119564, 119565, 119566, 119567, 119568, 119569, 119570, 119571, 119572, 119573, 119574, 119575, 119576, 119577, 119578, 119579, 119580, 119581, 119582, 119583, 119584, 119585, 119586, 119587, 119588, 119589, 119590, 119591, 119592, 119593, 119594, 119595, 119596, 119597, 119598, 119599, 119600, 119601, 119602, 119603, 119604, 119605, 119606, 119607, 119608, 119609, 119610, 119611, 119612, 119613, 119614, 119615, 119616, 119617, 119618, 119619, 119620, 119621, 119622, 119623, 119624, 119625, 119626, 119627, 119628, 119629, 119630, 119631, 119632, 119633, 119634, 119635, 119636, 119637, 119638, 119648, 119649, 119650, 119651, 119652, 119653, 119654, 119655, 119656, 119657, 119658, 119659, 119660, 119661, 119662, 119663, 119664, 119665, 119666, 119667, 119668, 119669, 119670, 119671, 119672, 119808, 119809, 119810, 119811, 119812, 119813, 119814, 119815, 119816, 119817, 119818, 119819, 119820, 119821, 119822, 119823, 119824, 119825, 119826, 119827, 119828, 119829, 119830, 119831, 119832, 119833, 119834, 119835, 119836, 119837, 119838, 119839, 119840, 119841, 119842, 119843, 119844, 119845, 119846, 119847, 119848, 119849, 119850, 119851, 119852, 119853, 119854, 119855, 119856, 119857, 119858, 119859, 119860, 119861, 119862, 119863, 119864, 119865, 119866, 119867, 119868, 119869, 119870, 119871, 119872, 119873, 119874, 119875, 119876, 119877, 119878, 119879, 119880, 119881, 119882, 119883, 119884, 119885, 119886, 119887, 119888, 119889, 119890, 119891, 119892, 119894, 119895, 119896, 119897, 119898, 119899, 119900, 119901, 119902, 119903, 119904, 119905, 119906, 119907, 119908, 119909, 119910, 119911, 119912, 119913, 119914, 119915, 119916, 119917, 119918, 119919, 119920, 119921, 119922, 119923, 119924, 119925, 119926, 119927, 119928, 119929, 119930, 119931, 119932, 119933, 119934, 119935, 119936, 119937, 119938, 119939, 119940, 119941, 119942, 119943, 119944, 119945, 119946, 119947, 119948, 119949, 119950, 119951, 119952, 119953, 119954, 119955, 119956, 119957, 119958, 119959, 119960, 119961, 119962, 119963, 119964, 119966, 119967, 119970, 119973, 119974, 119977, 119978, 119979, 119980, 119982, 119983, 119984, 119985, 119986, 119987, 119988, 119989, 119990, 119991, 119992, 119993, 119995, 119997, 119998, 119999, 120000, 120001, 120002, 120003, 120005, 120006, 120007, 120008, 120009, 120010, 120011, 120012, 120013, 120014, 120015, 120016, 120017, 120018, 120019, 120020, 120021, 120022, 120023, 120024, 120025, 120026, 120027, 120028, 120029, 120030, 120031, 120032, 120033, 120034, 120035, 120036, 120037, 120038, 120039, 120040, 120041, 120042, 120043, 120044, 120045, 120046, 120047, 120048, 120049, 120050, 120051, 120052, 120053, 120054, 120055, 120056, 120057, 120058, 120059, 120060, 120061, 120062, 120063, 120064, 120065, 120066, 120067, 120068, 120069, 120071, 120072, 120073, 120074, 120077, 120078, 120079, 120080, 120081, 120082, 120083, 120084, 120086, 120087, 120088, 120089, 120090, 120091, 120092, 120094, 120095, 120096, 120097, 120098, 120099, 120100, 120101, 120102, 120103, 120104, 120105, 120106, 120107, 120108, 120109, 120110, 120111, 120112, 120113, 120114, 120115, 120116, 120117, 120118, 120119, 120120, 120121, 120123, 120124, 120125, 120126, 120128, 120129, 120130, 120131, 120132, 120134, 120138, 120139, 120140, 120141, 120142, 120143, 120144, 120146, 120147, 120148, 120149, 120150, 120151, 120152, 120153, 120154, 120155, 120156, 120157, 120158, 120159, 120160, 120161, 120162, 120163, 120164, 120165, 120166, 120167, 120168, 120169, 120170, 120171, 120172, 120173, 120174, 120175, 120176, 120177, 120178, 120179, 120180, 120181, 120182, 120183, 120184, 120185, 120186, 120187, 120188, 120189, 120190, 120191, 120192, 120193, 120194, 120195, 120196, 120197, 120198, 120199, 120200, 120201, 120202, 120203, 120204, 120205, 120206, 120207, 120208, 120209, 120210, 120211, 120212, 120213, 120214, 120215, 120216, 120217, 120218, 120219, 120220, 120221, 120222, 120223, 120224, 120225, 120226, 120227, 120228, 120229, 120230, 120231, 120232, 120233, 120234, 120235, 120236, 120237, 120238, 120239, 120240, 120241, 120242, 120243, 120244, 120245, 120246, 120247, 120248, 120249, 120250, 120251, 120252, 120253, 120254, 120255, 120256, 120257, 120258, 120259, 120260, 120261, 120262, 120263, 120264, 120265, 120266, 120267, 120268, 120269, 120270, 120271, 120272, 120273, 120274, 120275, 120276, 120277, 120278, 120279, 120280, 120281, 120282, 120283, 120284, 120285, 120286, 120287, 120288, 120289, 120290, 120291, 120292, 120293, 120294, 120295, 120296, 120297, 120298, 120299, 120300, 120301, 120302, 120303, 120304, 120305, 120306, 120307, 120308, 120309, 120310, 120311, 120312, 120313, 120314, 120315, 120316, 120317, 120318, 120319, 120320, 120321, 120322, 120323, 120324, 120325, 120326, 120327, 120328, 120329, 120330, 120331, 120332, 120333, 120334, 120335, 120336, 120337, 120338, 120339, 120340, 120341, 120342, 120343, 120344, 120345, 120346, 120347, 120348, 120349, 120350, 120351, 120352, 120353, 120354, 120355, 120356, 120357, 120358, 120359, 120360, 120361, 120362, 120363, 120364, 120365, 120366, 120367, 120368, 120369, 120370, 120371, 120372, 120373, 120374, 120375, 120376, 120377, 120378, 120379, 120380, 120381, 120382, 120383, 120384, 120385, 120386, 120387, 120388, 120389, 120390, 120391, 120392, 120393, 120394, 120395, 120396, 120397, 120398, 120399, 120400, 120401, 120402, 120403, 120404, 120405, 120406, 120407, 120408, 120409, 120410, 120411, 120412, 120413, 120414, 120415, 120416, 120417, 120418, 120419, 120420, 120421, 120422, 120423, 120424, 120425, 120426, 120427, 120428, 120429, 120430, 120431, 120432, 120433, 120434, 120435, 120436, 120437, 120438, 120439, 120440, 120441, 120442, 120443, 120444, 120445, 120446, 120447, 120448, 120449, 120450, 120451, 120452, 120453, 120454, 120455, 120456, 120457, 120458, 120459, 120460, 120461, 120462, 120463, 120464, 120465, 120466, 120467, 120468, 120469, 120470, 120471, 120472, 120473, 120474, 120475, 120476, 120477, 120478, 120479, 120480, 120481, 120482, 120483, 120484, 120485, 120488, 120489, 120490, 120491, 120492, 120493, 120494, 120495, 120496, 120497, 120498, 120499, 120500, 120501, 120502, 120503, 120504, 120505, 120506, 120507, 120508, 120509, 120510, 120511, 120512, 120513, 120514, 120515, 120516, 120517, 120518, 120519, 120520, 120521, 120522, 120523, 120524, 120525, 120526, 120527, 120528, 120529, 120530, 120531, 120532, 120533, 120534, 120535, 120536, 120537, 120538, 120539, 120540, 120541, 120542, 120543, 120544, 120545, 120546, 120547, 120548, 120549, 120550, 120551, 120552, 120553, 120554, 120555, 120556, 120557, 120558, 120559, 120560, 120561, 120562, 120563, 120564, 120565, 120566, 120567, 120568, 120569, 120570, 120571, 120572, 120573, 120574, 120575, 120576, 120577, 120578, 120579, 120580, 120581, 120582, 120583, 120584, 120585, 120586, 120587, 120588, 120589, 120590, 120591, 120592, 120593, 120594, 120595, 120596, 120597, 120598, 120599, 120600, 120601, 120602, 120603, 120604, 120605, 120606, 120607, 120608, 120609, 120610, 120611, 120612, 120613, 120614, 120615, 120616, 120617, 120618, 120619, 120620, 120621, 120622, 120623, 120624, 120625, 120626, 120627, 120628, 120629, 120630, 120631, 120632, 120633, 120634, 120635, 120636, 120637, 120638, 120639, 120640, 120641, 120642, 120643, 120644, 120645, 120646, 120647, 120648, 120649, 120650, 120651, 120652, 120653, 120654, 120655, 120656, 120657, 120658, 120659, 120660, 120661, 120662, 120663, 120664, 120665, 120666, 120667, 120668, 120669, 120670, 120671, 120672, 120673, 120674, 120675, 120676, 120677, 120678, 120679, 120680, 120681, 120682, 120683, 120684, 120685, 120686, 120687, 120688, 120689, 120690, 120691, 120692, 120693, 120694, 120695, 120696, 120697, 120698, 120699, 120700, 120701, 120702, 120703, 120704, 120705, 120706, 120707, 120708, 120709, 120710, 120711, 120712, 120713, 120714, 120715, 120716, 120717, 120718, 120719, 120720, 120721, 120722, 120723, 120724, 120725, 120726, 120727, 120728, 120729, 120730, 120731, 120732, 120733, 120734, 120735, 120736, 120737, 120738, 120739, 120740, 120741, 120742, 120743, 120744, 120745, 120746, 120747, 120748, 120749, 120750, 120751, 120752, 120753, 120754, 120755, 120756, 120757, 120758, 120759, 120760, 120761, 120762, 120763, 120764, 120765, 120766, 120767, 120768, 120769, 120770, 120771, 120772, 120773, 120774, 120775, 120776, 120777, 120778, 120779, 120782, 120783, 120784, 120785, 120786, 120787, 120788, 120789, 120790, 120791, 120792, 120793, 120794, 120795, 120796, 120797, 120798, 120799, 120800, 120801, 120802, 120803, 120804, 120805, 120806, 120807, 120808, 120809, 120810, 120811, 120812, 120813, 120814, 120815, 120816, 120817, 120818, 120819, 120820, 120821, 120822, 120823, 120824, 120825, 120826, 120827, 120828, 120829, 120830, 120831, 120832, 120833, 120834, 120835, 120836, 120837, 120838, 120839, 120840, 120841, 120842, 120843, 120844, 120845, 120846, 120847, 120848, 120849, 120850, 120851, 120852, 120853, 120854, 120855, 120856, 120857, 120858, 120859, 120860, 120861, 120862, 120863, 120864, 120865, 120866, 120867, 120868, 120869, 120870, 120871, 120872, 120873, 120874, 120875, 120876, 120877, 120878, 120879, 120880, 120881, 120882, 120883, 120884, 120885, 120886, 120887, 120888, 120889, 120890, 120891, 120892, 120893, 120894, 120895, 120896, 120897, 120898, 120899, 120900, 120901, 120902, 120903, 120904, 120905, 120906, 120907, 120908, 120909, 120910, 120911, 120912, 120913, 120914, 120915, 120916, 120917, 120918, 120919, 120920, 120921, 120922, 120923, 120924, 120925, 120926, 120927, 120928, 120929, 120930, 120931, 120932, 120933, 120934, 120935, 120936, 120937, 120938, 120939, 120940, 120941, 120942, 120943, 120944, 120945, 120946, 120947, 120948, 120949, 120950, 120951, 120952, 120953, 120954, 120955, 120956, 120957, 120958, 120959, 120960, 120961, 120962, 120963, 120964, 120965, 120966, 120967, 120968, 120969, 120970, 120971, 120972, 120973, 120974, 120975, 120976, 120977, 120978, 120979, 120980, 120981, 120982, 120983, 120984, 120985, 120986, 120987, 120988, 120989, 120990, 120991, 120992, 120993, 120994, 120995, 120996, 120997, 120998, 120999, 121000, 121001, 121002, 121003, 121004, 121005, 121006, 121007, 121008, 121009, 121010, 121011, 121012, 121013, 121014, 121015, 121016, 121017, 121018, 121019, 121020, 121021, 121022, 121023, 121024, 121025, 121026, 121027, 121028, 121029, 121030, 121031, 121032, 121033, 121034, 121035, 121036, 121037, 121038, 121039, 121040, 121041, 121042, 121043, 121044, 121045, 121046, 121047, 121048, 121049, 121050, 121051, 121052, 121053, 121054, 121055, 121056, 121057, 121058, 121059, 121060, 121061, 121062, 121063, 121064, 121065, 121066, 121067, 121068, 121069, 121070, 121071, 121072, 121073, 121074, 121075, 121076, 121077, 121078, 121079, 121080, 121081, 121082, 121083, 121084, 121085, 121086, 121087, 121088, 121089, 121090, 121091, 121092, 121093, 121094, 121095, 121096, 121097, 121098, 121099, 121100, 121101, 121102, 121103, 121104, 121105, 121106, 121107, 121108, 121109, 121110, 121111, 121112, 121113, 121114, 121115, 121116, 121117, 121118, 121119, 121120, 121121, 121122, 121123, 121124, 121125, 121126, 121127, 121128, 121129, 121130, 121131, 121132, 121133, 121134, 121135, 121136, 121137, 121138, 121139, 121140, 121141, 121142, 121143, 121144, 121145, 121146, 121147, 121148, 121149, 121150, 121151, 121152, 121153, 121154, 121155, 121156, 121157, 121158, 121159, 121160, 121161, 121162, 121163, 121164, 121165, 121166, 121167, 121168, 121169, 121170, 121171, 121172, 121173, 121174, 121175, 121176, 121177, 121178, 121179, 121180, 121181, 121182, 121183, 121184, 121185, 121186, 121187, 121188, 121189, 121190, 121191, 121192, 121193, 121194, 121195, 121196, 121197, 121198, 121199, 121200, 121201, 121202, 121203, 121204, 121205, 121206, 121207, 121208, 121209, 121210, 121211, 121212, 121213, 121214, 121215, 121216, 121217, 121218, 121219, 121220, 121221, 121222, 121223, 121224, 121225, 121226, 121227, 121228, 121229, 121230, 121231, 121232, 121233, 121234, 121235, 121236, 121237, 121238, 121239, 121240, 121241, 121242, 121243, 121244, 121245, 121246, 121247, 121248, 121249, 121250, 121251, 121252, 121253, 121254, 121255, 121256, 121257, 121258, 121259, 121260, 121261, 121262, 121263, 121264, 121265, 121266, 121267, 121268, 121269, 121270, 121271, 121272, 121273, 121274, 121275, 121276, 121277, 121278, 121279, 121280, 121281, 121282, 121283, 121284, 121285, 121286, 121287, 121288, 121289, 121290, 121291, 121292, 121293, 121294, 121295, 121296, 121297, 121298, 121299, 121300, 121301, 121302, 121303, 121304, 121305, 121306, 121307, 121308, 121309, 121310, 121311, 121312, 121313, 121314, 121315, 121316, 121317, 121318, 121319, 121320, 121321, 121322, 121323, 121324, 121325, 121326, 121327, 121328, 121329, 121330, 121331, 121332, 121333, 121334, 121335, 121336, 121337, 121338, 121339, 121340, 121341, 121342, 121343, 121344, 121345, 121346, 121347, 121348, 121349, 121350, 121351, 121352, 121353, 121354, 121355, 121356, 121357, 121358, 121359, 121360, 121361, 121362, 121363, 121364, 121365, 121366, 121367, 121368, 121369, 121370, 121371, 121372, 121373, 121374, 121375, 121376, 121377, 121378, 121379, 121380, 121381, 121382, 121383, 121384, 121385, 121386, 121387, 121388, 121389, 121390, 121391, 121392, 121393, 121394, 121395, 121396, 121397, 121398, 121399, 121400, 121401, 121402, 121403, 121404, 121405, 121406, 121407, 121408, 121409, 121410, 121411, 121412, 121413, 121414, 121415, 121416, 121417, 121418, 121419, 121420, 121421, 121422, 121423, 121424, 121425, 121426, 121427, 121428, 121429, 121430, 121431, 121432, 121433, 121434, 121435, 121436, 121437, 121438, 121439, 121440, 121441, 121442, 121443, 121444, 121445, 121446, 121447, 121448, 121449, 121450, 121451, 121452, 121453, 121454, 121455, 121456, 121457, 121458, 121459, 121460, 121461, 121462, 121463, 121464, 121465, 121466, 121467, 121468, 121469, 121470, 121471, 121472, 121473, 121474, 121475, 121476, 121477, 121478, 121479, 121480, 121481, 121482, 121483, 121499, 121500, 121501, 121502, 121503, 121505, 121506, 121507, 121508, 121509, 121510, 121511, 121512, 121513, 121514, 121515, 121516, 121517, 121518, 121519, 122880, 122881, 122882, 122883, 122884, 122885, 122886, 122888, 122889, 122890, 122891, 122892, 122893, 122894, 122895, 122896, 122897, 122898, 122899, 122900, 122901, 122902, 122903, 122904, 122907, 122908, 122909, 122910, 122911, 122912, 122913, 122915, 122916, 122918, 122919, 122920, 122921, 122922, 123136, 123137, 123138, 123139, 123140, 123141, 123142, 123143, 123144, 123145, 123146, 123147, 123148, 123149, 123150, 123151, 123152, 123153, 123154, 123155, 123156, 123157, 123158, 123159, 123160, 123161, 123162, 123163, 123164, 123165, 123166, 123167, 123168, 123169, 123170, 123171, 123172, 123173, 123174, 123175, 123176, 123177, 123178, 123179, 123180, 123184, 123185, 123186, 123187, 123188, 123189, 123190, 123191, 123192, 123193, 123194, 123195, 123196, 123197, 123200, 123201, 123202, 123203, 123204, 123205, 123206, 123207, 123208, 123209, 123214, 123215, 123584, 123585, 123586, 123587, 123588, 123589, 123590, 123591, 123592, 123593, 123594, 123595, 123596, 123597, 123598, 123599, 123600, 123601, 123602, 123603, 123604, 123605, 123606, 123607, 123608, 123609, 123610, 123611, 123612, 123613, 123614, 123615, 123616, 123617, 123618, 123619, 123620, 123621, 123622, 123623, 123624, 123625, 123626, 123627, 123628, 123629, 123630, 123631, 123632, 123633, 123634, 123635, 123636, 123637, 123638, 123639, 123640, 123641, 123647, 124928, 124929, 124930, 124931, 124932, 124933, 124934, 124935, 124936, 124937, 124938, 124939, 124940, 124941, 124942, 124943, 124944, 124945, 124946, 124947, 124948, 124949, 124950, 124951, 124952, 124953, 124954, 124955, 124956, 124957, 124958, 124959, 124960, 124961, 124962, 124963, 124964, 124965, 124966, 124967, 124968, 124969, 124970, 124971, 124972, 124973, 124974, 124975, 124976, 124977, 124978, 124979, 124980, 124981, 124982, 124983, 124984, 124985, 124986, 124987, 124988, 124989, 124990, 124991, 124992, 124993, 124994, 124995, 124996, 124997, 124998, 124999, 125000, 125001, 125002, 125003, 125004, 125005, 125006, 125007, 125008, 125009, 125010, 125011, 125012, 125013, 125014, 125015, 125016, 125017, 125018, 125019, 125020, 125021, 125022, 125023, 125024, 125025, 125026, 125027, 125028, 125029, 125030, 125031, 125032, 125033, 125034, 125035, 125036, 125037, 125038, 125039, 125040, 125041, 125042, 125043, 125044, 125045, 125046, 125047, 125048, 125049, 125050, 125051, 125052, 125053, 125054, 125055, 125056, 125057, 125058, 125059, 125060, 125061, 125062, 125063, 125064, 125065, 125066, 125067, 125068, 125069, 125070, 125071, 125072, 125073, 125074, 125075, 125076, 125077, 125078, 125079, 125080, 125081, 125082, 125083, 125084, 125085, 125086, 125087, 125088, 125089, 125090, 125091, 125092, 125093, 125094, 125095, 125096, 125097, 125098, 125099, 125100, 125101, 125102, 125103, 125104, 125105, 125106, 125107, 125108, 125109, 125110, 125111, 125112, 125113, 125114, 125115, 125116, 125117, 125118, 125119, 125120, 125121, 125122, 125123, 125124, 125127, 125128, 125129, 125130, 125131, 125132, 125133, 125134, 125135, 125136, 125137, 125138, 125139, 125140, 125141, 125142, 125184, 125185, 125186, 125187, 125188, 125189, 125190, 125191, 125192, 125193, 125194, 125195, 125196, 125197, 125198, 125199, 125200, 125201, 125202, 125203, 125204, 125205, 125206, 125207, 125208, 125209, 125210, 125211, 125212, 125213, 125214, 125215, 125216, 125217, 125218, 125219, 125220, 125221, 125222, 125223, 125224, 125225, 125226, 125227, 125228, 125229, 125230, 125231, 125232, 125233, 125234, 125235, 125236, 125237, 125238, 125239, 125240, 125241, 125242, 125243, 125244, 125245, 125246, 125247, 125248, 125249, 125250, 125251, 125252, 125253, 125254, 125255, 125256, 125257, 125258, 125259, 125264, 125265, 125266, 125267, 125268, 125269, 125270, 125271, 125272, 125273, 125278, 125279, 126065, 126066, 126067, 126068, 126069, 126070, 126071, 126072, 126073, 126074, 126075, 126076, 126077, 126078, 126079, 126080, 126081, 126082, 126083, 126084, 126085, 126086, 126087, 126088, 126089, 126090, 126091, 126092, 126093, 126094, 126095, 126096, 126097, 126098, 126099, 126100, 126101, 126102, 126103, 126104, 126105, 126106, 126107, 126108, 126109, 126110, 126111, 126112, 126113, 126114, 126115, 126116, 126117, 126118, 126119, 126120, 126121, 126122, 126123, 126124, 126125, 126126, 126127, 126128, 126129, 126130, 126131, 126132, 126209, 126210, 126211, 126212, 126213, 126214, 126215, 126216, 126217, 126218, 126219, 126220, 126221, 126222, 126223, 126224, 126225, 126226, 126227, 126228, 126229, 126230, 126231, 126232, 126233, 126234, 126235, 126236, 126237, 126238, 126239, 126240, 126241, 126242, 126243, 126244, 126245, 126246, 126247, 126248, 126249, 126250, 126251, 126252, 126253, 126254, 126255, 126256, 126257, 126258, 126259, 126260, 126261, 126262, 126263, 126264, 126265, 126266, 126267, 126268, 126269, 126464, 126465, 126466, 126467, 126469, 126470, 126471, 126472, 126473, 126474, 126475, 126476, 126477, 126478, 126479, 126480, 126481, 126482, 126483, 126484, 126485, 126486, 126487, 126488, 126489, 126490, 126491, 126492, 126493, 126494, 126495, 126497, 126498, 126500, 126503, 126505, 126506, 126507, 126508, 126509, 126510, 126511, 126512, 126513, 126514, 126516, 126517, 126518, 126519, 126521, 126523, 126530, 126535, 126537, 126539, 126541, 126542, 126543, 126545, 126546, 126548, 126551, 126553, 126555, 126557, 126559, 126561, 126562, 126564, 126567, 126568, 126569, 126570, 126572, 126573, 126574, 126575, 126576, 126577, 126578, 126580, 126581, 126582, 126583, 126585, 126586, 126587, 126588, 126590, 126592, 126593, 126594, 126595, 126596, 126597, 126598, 126599, 126600, 126601, 126603, 126604, 126605, 126606, 126607, 126608, 126609, 126610, 126611, 126612, 126613, 126614, 126615, 126616, 126617, 126618, 126619, 126625, 126626, 126627, 126629, 126630, 126631, 126632, 126633, 126635, 126636, 126637, 126638, 126639, 126640, 126641, 126642, 126643, 126644, 126645, 126646, 126647, 126648, 126649, 126650, 126651, 126704, 126705, 126976, 126977, 126978, 126979, 126980, 126981, 126982, 126983, 126984, 126985, 126986, 126987, 126988, 126989, 126990, 126991, 126992, 126993, 126994, 126995, 126996, 126997, 126998, 126999, 127000, 127001, 127002, 127003, 127004, 127005, 127006, 127007, 127008, 127009, 127010, 127011, 127012, 127013, 127014, 127015, 127016, 127017, 127018, 127019, 127024, 127025, 127026, 127027, 127028, 127029, 127030, 127031, 127032, 127033, 127034, 127035, 127036, 127037, 127038, 127039, 127040, 127041, 127042, 127043, 127044, 127045, 127046, 127047, 127048, 127049, 127050, 127051, 127052, 127053, 127054, 127055, 127056, 127057, 127058, 127059, 127060, 127061, 127062, 127063, 127064, 127065, 127066, 127067, 127068, 127069, 127070, 127071, 127072, 127073, 127074, 127075, 127076, 127077, 127078, 127079, 127080, 127081, 127082, 127083, 127084, 127085, 127086, 127087, 127088, 127089, 127090, 127091, 127092, 127093, 127094, 127095, 127096, 127097, 127098, 127099, 127100, 127101, 127102, 127103, 127104, 127105, 127106, 127107, 127108, 127109, 127110, 127111, 127112, 127113, 127114, 127115, 127116, 127117, 127118, 127119, 127120, 127121, 127122, 127123, 127136, 127137, 127138, 127139, 127140, 127141, 127142, 127143, 127144, 127145, 127146, 127147, 127148, 127149, 127150, 127153, 127154, 127155, 127156, 127157, 127158, 127159, 127160, 127161, 127162, 127163, 127164, 127165, 127166, 127167, 127169, 127170, 127171, 127172, 127173, 127174, 127175, 127176, 127177, 127178, 127179, 127180, 127181, 127182, 127183, 127185, 127186, 127187, 127188, 127189, 127190, 127191, 127192, 127193, 127194, 127195, 127196, 127197, 127198, 127199, 127200, 127201, 127202, 127203, 127204, 127205, 127206, 127207, 127208, 127209, 127210, 127211, 127212, 127213, 127214, 127215, 127216, 127217, 127218, 127219, 127220, 127221, 127232, 127233, 127234, 127235, 127236, 127237, 127238, 127239, 127240, 127241, 127242, 127243, 127244, 127248, 127249, 127250, 127251, 127252, 127253, 127254, 127255, 127256, 127257, 127258, 127259, 127260, 127261, 127262, 127263, 127264, 127265, 127266, 127267, 127268, 127269, 127270, 127271, 127272, 127273, 127274, 127275, 127276, 127277, 127278, 127279, 127280, 127281, 127282, 127283, 127284, 127285, 127286, 127287, 127288, 127289, 127290, 127291, 127292, 127293, 127294, 127295, 127296, 127297, 127298, 127299, 127300, 127301, 127302, 127303, 127304, 127305, 127306, 127307, 127308, 127309, 127310, 127311, 127312, 127313, 127314, 127315, 127316, 127317, 127318, 127319, 127320, 127321, 127322, 127323, 127324, 127325, 127326, 127327, 127328, 127329, 127330, 127331, 127332, 127333, 127334, 127335, 127336, 127337, 127338, 127339, 127340, 127344, 127345, 127346, 127347, 127348, 127349, 127350, 127351, 127352, 127353, 127354, 127355, 127356, 127357, 127358, 127359, 127360, 127361, 127362, 127363, 127364, 127365, 127366, 127367, 127368, 127369, 127370, 127371, 127372, 127373, 127374, 127375, 127376, 127377, 127378, 127379, 127380, 127381, 127382, 127383, 127384, 127385, 127386, 127387, 127388, 127389, 127390, 127391, 127392, 127393, 127394, 127395, 127396, 127397, 127398, 127399, 127400, 127401, 127402, 127403, 127404, 127462, 127463, 127464, 127465, 127466, 127467, 127468, 127469, 127470, 127471, 127472, 127473, 127474, 127475, 127476, 127477, 127478, 127479, 127480, 127481, 127482, 127483, 127484, 127485, 127486, 127487, 127488, 127489, 127490, 127504, 127505, 127506, 127507, 127508, 127509, 127510, 127511, 127512, 127513, 127514, 127515, 127516, 127517, 127518, 127519, 127520, 127521, 127522, 127523, 127524, 127525, 127526, 127527, 127528, 127529, 127530, 127531, 127532, 127533, 127534, 127535, 127536, 127537, 127538, 127539, 127540, 127541, 127542, 127543, 127544, 127545, 127546, 127547, 127552, 127553, 127554, 127555, 127556, 127557, 127558, 127559, 127560, 127568, 127569, 127584, 127585, 127586, 127587, 127588, 127589, 127744, 127745, 127746, 127747, 127748, 127749, 127750, 127751, 127752, 127753, 127754, 127755, 127756, 127757, 127758, 127759, 127760, 127761, 127762, 127763, 127764, 127765, 127766, 127767, 127768, 127769, 127770, 127771, 127772, 127773, 127774, 127775, 127776, 127777, 127778, 127779, 127780, 127781, 127782, 127783, 127784, 127785, 127786, 127787, 127788, 127789, 127790, 127791, 127792, 127793, 127794, 127795, 127796, 127797, 127798, 127799, 127800, 127801, 127802, 127803, 127804, 127805, 127806, 127807, 127808, 127809, 127810, 127811, 127812, 127813, 127814, 127815, 127816, 127817, 127818, 127819, 127820, 127821, 127822, 127823, 127824, 127825, 127826, 127827, 127828, 127829, 127830, 127831, 127832, 127833, 127834, 127835, 127836, 127837, 127838, 127839, 127840, 127841, 127842, 127843, 127844, 127845, 127846, 127847, 127848, 127849, 127850, 127851, 127852, 127853, 127854, 127855, 127856, 127857, 127858, 127859, 127860, 127861, 127862, 127863, 127864, 127865, 127866, 127867, 127868, 127869, 127870, 127871, 127872, 127873, 127874, 127875, 127876, 127877, 127878, 127879, 127880, 127881, 127882, 127883, 127884, 127885, 127886, 127887, 127888, 127889, 127890, 127891, 127892, 127893, 127894, 127895, 127896, 127897, 127898, 127899, 127900, 127901, 127902, 127903, 127904, 127905, 127906, 127907, 127908, 127909, 127910, 127911, 127912, 127913, 127914, 127915, 127916, 127917, 127918, 127919, 127920, 127921, 127922, 127923, 127924, 127925, 127926, 127927, 127928, 127929, 127930, 127931, 127932, 127933, 127934, 127935, 127936, 127937, 127938, 127939, 127940, 127941, 127942, 127943, 127944, 127945, 127946, 127947, 127948, 127949, 127950, 127951, 127952, 127953, 127954, 127955, 127956, 127957, 127958, 127959, 127960, 127961, 127962, 127963, 127964, 127965, 127966, 127967, 127968, 127969, 127970, 127971, 127972, 127973, 127974, 127975, 127976, 127977, 127978, 127979, 127980, 127981, 127982, 127983, 127984, 127985, 127986, 127987, 127988, 127989, 127990, 127991, 127992, 127993, 127994, 127995, 127996, 127997, 127998, 127999, 128000, 128001, 128002, 128003, 128004, 128005, 128006, 128007, 128008, 128009, 128010, 128011, 128012, 128013, 128014, 128015, 128016, 128017, 128018, 128019, 128020, 128021, 128022, 128023, 128024, 128025, 128026, 128027, 128028, 128029, 128030, 128031, 128032, 128033, 128034, 128035, 128036, 128037, 128038, 128039, 128040, 128041, 128042, 128043, 128044, 128045, 128046, 128047, 128048, 128049, 128050, 128051, 128052, 128053, 128054, 128055, 128056, 128057, 128058, 128059, 128060, 128061, 128062, 128063, 128064, 128065, 128066, 128067, 128068, 128069, 128070, 128071, 128072, 128073, 128074, 128075, 128076, 128077, 128078, 128079, 128080, 128081, 128082, 128083, 128084, 128085, 128086, 128087, 128088, 128089, 128090, 128091, 128092, 128093, 128094, 128095, 128096, 128097, 128098, 128099, 128100, 128101, 128102, 128103, 128104, 128105, 128106, 128107, 128108, 128109, 128110, 128111, 128112, 128113, 128114, 128115, 128116, 128117, 128118, 128119, 128120, 128121, 128122, 128123, 128124, 128125, 128126, 128127, 128128, 128129, 128130, 128131, 128132, 128133, 128134, 128135, 128136, 128137, 128138, 128139, 128140, 128141, 128142, 128143, 128144, 128145, 128146, 128147, 128148, 128149, 128150, 128151, 128152, 128153, 128154, 128155, 128156, 128157, 128158, 128159, 128160, 128161, 128162, 128163, 128164, 128165, 128166, 128167, 128168, 128169, 128170, 128171, 128172, 128173, 128174, 128175, 128176, 128177, 128178, 128179, 128180, 128181, 128182, 128183, 128184, 128185, 128186, 128187, 128188, 128189, 128190, 128191, 128192, 128193, 128194, 128195, 128196, 128197, 128198, 128199, 128200, 128201, 128202, 128203, 128204, 128205, 128206, 128207, 128208, 128209, 128210, 128211, 128212, 128213, 128214, 128215, 128216, 128217, 128218, 128219, 128220, 128221, 128222, 128223, 128224, 128225, 128226, 128227, 128228, 128229, 128230, 128231, 128232, 128233, 128234, 128235, 128236, 128237, 128238, 128239, 128240, 128241, 128242, 128243, 128244, 128245, 128246, 128247, 128248, 128249, 128250, 128251, 128252, 128253, 128254, 128255, 128256, 128257, 128258, 128259, 128260, 128261, 128262, 128263, 128264, 128265, 128266, 128267, 128268, 128269, 128270, 128271, 128272, 128273, 128274, 128275, 128276, 128277, 128278, 128279, 128280, 128281, 128282, 128283, 128284, 128285, 128286, 128287, 128288, 128289, 128290, 128291, 128292, 128293, 128294, 128295, 128296, 128297, 128298, 128299, 128300, 128301, 128302, 128303, 128304, 128305, 128306, 128307, 128308, 128309, 128310, 128311, 128312, 128313, 128314, 128315, 128316, 128317, 128318, 128319, 128320, 128321, 128322, 128323, 128324, 128325, 128326, 128327, 128328, 128329, 128330, 128331, 128332, 128333, 128334, 128335, 128336, 128337, 128338, 128339, 128340, 128341, 128342, 128343, 128344, 128345, 128346, 128347, 128348, 128349, 128350, 128351, 128352, 128353, 128354, 128355, 128356, 128357, 128358, 128359, 128360, 128361, 128362, 128363, 128364, 128365, 128366, 128367, 128368, 128369, 128370, 128371, 128372, 128373, 128374, 128375, 128376, 128377, 128378, 128379, 128380, 128381, 128382, 128383, 128384, 128385, 128386, 128387, 128388, 128389, 128390, 128391, 128392, 128393, 128394, 128395, 128396, 128397, 128398, 128399, 128400, 128401, 128402, 128403, 128404, 128405, 128406, 128407, 128408, 128409, 128410, 128411, 128412, 128413, 128414, 128415, 128416, 128417, 128418, 128419, 128420, 128421, 128422, 128423, 128424, 128425, 128426, 128427, 128428, 128429, 128430, 128431, 128432, 128433, 128434, 128435, 128436, 128437, 128438, 128439, 128440, 128441, 128442, 128443, 128444, 128445, 128446, 128447, 128448, 128449, 128450, 128451, 128452, 128453, 128454, 128455, 128456, 128457, 128458, 128459, 128460, 128461, 128462, 128463, 128464, 128465, 128466, 128467, 128468, 128469, 128470, 128471, 128472, 128473, 128474, 128475, 128476, 128477, 128478, 128479, 128480, 128481, 128482, 128483, 128484, 128485, 128486, 128487, 128488, 128489, 128490, 128491, 128492, 128493, 128494, 128495, 128496, 128497, 128498, 128499, 128500, 128501, 128502, 128503, 128504, 128505, 128506, 128507, 128508, 128509, 128510, 128511, 128512, 128513, 128514, 128515, 128516, 128517, 128518, 128519, 128520, 128521, 128522, 128523, 128524, 128525, 128526, 128527, 128528, 128529, 128530, 128531, 128532, 128533, 128534, 128535, 128536, 128537, 128538, 128539, 128540, 128541, 128542, 128543, 128544, 128545, 128546, 128547, 128548, 128549, 128550, 128551, 128552, 128553, 128554, 128555, 128556, 128557, 128558, 128559, 128560, 128561, 128562, 128563, 128564, 128565, 128566, 128567, 128568, 128569, 128570, 128571, 128572, 128573, 128574, 128575, 128576, 128577, 128578, 128579, 128580, 128581, 128582, 128583, 128584, 128585, 128586, 128587, 128588, 128589, 128590, 128591, 128592, 128593, 128594, 128595, 128596, 128597, 128598, 128599, 128600, 128601, 128602, 128603, 128604, 128605, 128606, 128607, 128608, 128609, 128610, 128611, 128612, 128613, 128614, 128615, 128616, 128617, 128618, 128619, 128620, 128621, 128622, 128623, 128624, 128625, 128626, 128627, 128628, 128629, 128630, 128631, 128632, 128633, 128634, 128635, 128636, 128637, 128638, 128639, 128640, 128641, 128642, 128643, 128644, 128645, 128646, 128647, 128648, 128649, 128650, 128651, 128652, 128653, 128654, 128655, 128656, 128657, 128658, 128659, 128660, 128661, 128662, 128663, 128664, 128665, 128666, 128667, 128668, 128669, 128670, 128671, 128672, 128673, 128674, 128675, 128676, 128677, 128678, 128679, 128680, 128681, 128682, 128683, 128684, 128685, 128686, 128687, 128688, 128689, 128690, 128691, 128692, 128693, 128694, 128695, 128696, 128697, 128698, 128699, 128700, 128701, 128702, 128703, 128704, 128705, 128706, 128707, 128708, 128709, 128710, 128711, 128712, 128713, 128714, 128715, 128716, 128717, 128718, 128719, 128720, 128721, 128722, 128723, 128724, 128725, 128736, 128737, 128738, 128739, 128740, 128741, 128742, 128743, 128744, 128745, 128746, 128747, 128748, 128752, 128753, 128754, 128755, 128756, 128757, 128758, 128759, 128760, 128761, 128762, 128768, 128769, 128770, 128771, 128772, 128773, 128774, 128775, 128776, 128777, 128778, 128779, 128780, 128781, 128782, 128783, 128784, 128785, 128786, 128787, 128788, 128789, 128790, 128791, 128792, 128793, 128794, 128795, 128796, 128797, 128798, 128799, 128800, 128801, 128802, 128803, 128804, 128805, 128806, 128807, 128808, 128809, 128810, 128811, 128812, 128813, 128814, 128815, 128816, 128817, 128818, 128819, 128820, 128821, 128822, 128823, 128824, 128825, 128826, 128827, 128828, 128829, 128830, 128831, 128832, 128833, 128834, 128835, 128836, 128837, 128838, 128839, 128840, 128841, 128842, 128843, 128844, 128845, 128846, 128847, 128848, 128849, 128850, 128851, 128852, 128853, 128854, 128855, 128856, 128857, 128858, 128859, 128860, 128861, 128862, 128863, 128864, 128865, 128866, 128867, 128868, 128869, 128870, 128871, 128872, 128873, 128874, 128875, 128876, 128877, 128878, 128879, 128880, 128881, 128882, 128883, 128896, 128897, 128898, 128899, 128900, 128901, 128902, 128903, 128904, 128905, 128906, 128907, 128908, 128909, 128910, 128911, 128912, 128913, 128914, 128915, 128916, 128917, 128918, 128919, 128920, 128921, 128922, 128923, 128924, 128925, 128926, 128927, 128928, 128929, 128930, 128931, 128932, 128933, 128934, 128935, 128936, 128937, 128938, 128939, 128940, 128941, 128942, 128943, 128944, 128945, 128946, 128947, 128948, 128949, 128950, 128951, 128952, 128953, 128954, 128955, 128956, 128957, 128958, 128959, 128960, 128961, 128962, 128963, 128964, 128965, 128966, 128967, 128968, 128969, 128970, 128971, 128972, 128973, 128974, 128975, 128976, 128977, 128978, 128979, 128980, 128981, 128982, 128983, 128984, 128992, 128993, 128994, 128995, 128996, 128997, 128998, 128999, 129000, 129001, 129002, 129003, 129024, 129025, 129026, 129027, 129028, 129029, 129030, 129031, 129032, 129033, 129034, 129035, 129040, 129041, 129042, 129043, 129044, 129045, 129046, 129047, 129048, 129049, 129050, 129051, 129052, 129053, 129054, 129055, 129056, 129057, 129058, 129059, 129060, 129061, 129062, 129063, 129064, 129065, 129066, 129067, 129068, 129069, 129070, 129071, 129072, 129073, 129074, 129075, 129076, 129077, 129078, 129079, 129080, 129081, 129082, 129083, 129084, 129085, 129086, 129087, 129088, 129089, 129090, 129091, 129092, 129093, 129094, 129095, 129104, 129105, 129106, 129107, 129108, 129109, 129110, 129111, 129112, 129113, 129120, 129121, 129122, 129123, 129124, 129125, 129126, 129127, 129128, 129129, 129130, 129131, 129132, 129133, 129134, 129135, 129136, 129137, 129138, 129139, 129140, 129141, 129142, 129143, 129144, 129145, 129146, 129147, 129148, 129149, 129150, 129151, 129152, 129153, 129154, 129155, 129156, 129157, 129158, 129159, 129168, 129169, 129170, 129171, 129172, 129173, 129174, 129175, 129176, 129177, 129178, 129179, 129180, 129181, 129182, 129183, 129184, 129185, 129186, 129187, 129188, 129189, 129190, 129191, 129192, 129193, 129194, 129195, 129196, 129197, 129280, 129281, 129282, 129283, 129284, 129285, 129286, 129287, 129288, 129289, 129290, 129291, 129293, 129294, 129295, 129296, 129297, 129298, 129299, 129300, 129301, 129302, 129303, 129304, 129305, 129306, 129307, 129308, 129309, 129310, 129311, 129312, 129313, 129314, 129315, 129316, 129317, 129318, 129319, 129320, 129321, 129322, 129323, 129324, 129325, 129326, 129327, 129328, 129329, 129330, 129331, 129332, 129333, 129334, 129335, 129336, 129337, 129338, 129339, 129340, 129341, 129342, 129343, 129344, 129345, 129346, 129347, 129348, 129349, 129350, 129351, 129352, 129353, 129354, 129355, 129356, 129357, 129358, 129359, 129360, 129361, 129362, 129363, 129364, 129365, 129366, 129367, 129368, 129369, 129370, 129371, 129372, 129373, 129374, 129375, 129376, 129377, 129378, 129379, 129380, 129381, 129382, 129383, 129384, 129385, 129386, 129387, 129388, 129389, 129390, 129391, 129392, 129393, 129395, 129396, 129397, 129398, 129402, 129403, 129404, 129405, 129406, 129407, 129408, 129409, 129410, 129411, 129412, 129413, 129414, 129415, 129416, 129417, 129418, 129419, 129420, 129421, 129422, 129423, 129424, 129425, 129426, 129427, 129428, 129429, 129430, 129431, 129432, 129433, 129434, 129435, 129436, 129437, 129438, 129439, 129440, 129441, 129442, 129445, 129446, 129447, 129448, 129449, 129450, 129454, 129455, 129456, 129457, 129458, 129459, 129460, 129461, 129462, 129463, 129464, 129465, 129466, 129467, 129468, 129469, 129470, 129471, 129472, 129473, 129474, 129475, 129476, 129477, 129478, 129479, 129480, 129481, 129482, 129485, 129486, 129487, 129488, 129489, 129490, 129491, 129492, 129493, 129494, 129495, 129496, 129497, 129498, 129499, 129500, 129501, 129502, 129503, 129504, 129505, 129506, 129507, 129508, 129509, 129510, 129511, 129512, 129513, 129514, 129515, 129516, 129517, 129518, 129519, 129520, 129521, 129522, 129523, 129524, 129525, 129526, 129527, 129528, 129529, 129530, 129531, 129532, 129533, 129534, 129535, 129536, 129537, 129538, 129539, 129540, 129541, 129542, 129543, 129544, 129545, 129546, 129547, 129548, 129549, 129550, 129551, 129552, 129553, 129554, 129555, 129556, 129557, 129558, 129559, 129560, 129561, 129562, 129563, 129564, 129565, 129566, 129567, 129568, 129569, 129570, 129571, 129572, 129573, 129574, 129575, 129576, 129577, 129578, 129579, 129580, 129581, 129582, 129583, 129584, 129585, 129586, 129587, 129588, 129589, 129590, 129591, 129592, 129593, 129594, 129595, 129596, 129597, 129598, 129599, 129600, 129601, 129602, 129603, 129604, 129605, 129606, 129607, 129608, 129609, 129610, 129611, 129612, 129613, 129614, 129615, 129616, 129617, 129618, 129619, 129632, 129633, 129634, 129635, 129636, 129637, 129638, 129639, 129640, 129641, 129642, 129643, 129644, 129645, 129648, 129649, 129650, 129651, 129656, 129657, 129658, 129664, 129665, 129666, 129680, 129681, 129682, 129683, 129684, 129685, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 194561, 194562, 194563, 194564, 194565, 194566, 194567, 194568, 194569, 194570, 194571, 194572, 194573, 194574, 194575, 194576, 194577, 194578, 194579, 194580, 194581, 194582, 194583, 194584, 194585, 194586, 194587, 194588, 194589, 194590, 194591, 194592, 194593, 194594, 194595, 194596, 194597, 194598, 194599, 194600, 194601, 194602, 194603, 194604, 194605, 194606, 194607, 194608, 194609, 194610, 194611, 194612, 194613, 194614, 194615, 194616, 194617, 194618, 194619, 194620, 194621, 194622, 194623, 194624, 194625, 194626, 194627, 194628, 194629, 194630, 194631, 194632, 194633, 194634, 194635, 194636, 194637, 194638, 194639, 194640, 194641, 194642, 194643, 194644, 194645, 194646, 194647, 194648, 194649, 194650, 194651, 194652, 194653, 194654, 194655, 194656, 194657, 194658, 194659, 194660, 194661, 194662, 194663, 194664, 194665, 194666, 194667, 194668, 194669, 194670, 194671, 194672, 194673, 194674, 194675, 194676, 194677, 194678, 194679, 194680, 194681, 194682, 194683, 194684, 194685, 194686, 194687, 194688, 194689, 194690, 194691, 194692, 194693, 194694, 194695, 194696, 194697, 194698, 194699, 194700, 194701, 194702, 194703, 194704, 194705, 194706, 194707, 194708, 194709, 194710, 194711, 194712, 194713, 194714, 194715, 194716, 194717, 194718, 194719, 194720, 194721, 194722, 194723, 194724, 194725, 194726, 194727, 194728, 194729, 194730, 194731, 194732, 194733, 194734, 194735, 194736, 194737, 194738, 194739, 194740, 194741, 194742, 194743, 194744, 194745, 194746, 194747, 194748, 194749, 194750, 194751, 194752, 194753, 194754, 194755, 194756, 194757, 194758, 194759, 194760, 194761, 194762, 194763, 194764, 194765, 194766, 194767, 194768, 194769, 194770, 194771, 194772, 194773, 194774, 194775, 194776, 194777, 194778, 194779, 194780, 194781, 194782, 194783, 194784, 194785, 194786, 194787, 194788, 194789, 194790, 194791, 194792, 194793, 194794, 194795, 194796, 194797, 194798, 194799, 194800, 194801, 194802, 194803, 194804, 194805, 194806, 194807, 194808, 194809, 194810, 194811, 194812, 194813, 194814, 194815, 194816, 194817, 194818, 194819, 194820, 194821, 194822, 194823, 194824, 194825, 194826, 194827, 194828, 194829, 194830, 194831, 194832, 194833, 194834, 194835, 194836, 194837, 194838, 194839, 194840, 194841, 194842, 194843, 194844, 194845, 194846, 194847, 194848, 194849, 194850, 194851, 194852, 194853, 194854, 194855, 194856, 194857, 194858, 194859, 194860, 194861, 194862, 194863, 194864, 194865, 194866, 194867, 194868, 194869, 194870, 194871, 194872, 194873, 194874, 194875, 194876, 194877, 194878, 194879, 194880, 194881, 194882, 194883, 194884, 194885, 194886, 194887, 194888, 194889, 194890, 194891, 194892, 194893, 194894, 194895, 194896, 194897, 194898, 194899, 194900, 194901, 194902, 194903, 194904, 194905, 194906, 194907, 194908, 194909, 194910, 194911, 194912, 194913, 194914, 194915, 194916, 194917, 194918, 194919, 194920, 194921, 194922, 194923, 194924, 194925, 194926, 194927, 194928, 194929, 194930, 194931, 194932, 194933, 194934, 194935, 194936, 194937, 194938, 194939, 194940, 194941, 194942, 194943, 194944, 194945, 194946, 194947, 194948, 194949, 194950, 194951, 194952, 194953, 194954, 194955, 194956, 194957, 194958, 194959, 194960, 194961, 194962, 194963, 194964, 194965, 194966, 194967, 194968, 194969, 194970, 194971, 194972, 194973, 194974, 194975, 194976, 194977, 194978, 194979, 194980, 194981, 194982, 194983, 194984, 194985, 194986, 194987, 194988, 194989, 194990, 194991, 194992, 194993, 194994, 194995, 194996, 194997, 194998, 194999, 195000, 195001, 195002, 195003, 195004, 195005, 195006, 195007, 195008, 195009, 195010, 195011, 195012, 195013, 195014, 195015, 195016, 195017, 195018, 195019, 195020, 195021, 195022, 195023, 195024, 195025, 195026, 195027, 195028, 195029, 195030, 195031, 195032, 195033, 195034, 195035, 195036, 195037, 195038, 195039, 195040, 195041, 195042, 195043, 195044, 195045, 195046, 195047, 195048, 195049, 195050, 195051, 195052, 195053, 195054, 195055, 195056, 195057, 195058, 195059, 195060, 195061, 195062, 195063, 195064, 195065, 195066, 195067, 195068, 195069, 195070, 195071, 195072, 195073, 195074, 195075, 195076, 195077, 195078, 195079, 195080, 195081, 195082, 195083, 195084, 195085, 195086, 195087, 195088, 195089, 195090, 195091, 195092, 195093, 195094, 195095, 195096, 195097, 195098, 195099, 195100, 195101, 917505, 917536, 917537, 917538, 917539, 917540, 917541, 917542, 917543, 917544, 917545, 917546, 917547, 917548, 917549, 917550, 917551, 917552, 917553, 917554, 917555, 917556, 917557, 917558, 917559, 917560, 917561, 917562, 917563, 917564, 917565, 917566, 917567, 917568, 917569, 917570, 917571, 917572, 917573, 917574, 917575, 917576, 917577, 917578, 917579, 917580, 917581, 917582, 917583, 917584, 917585, 917586, 917587, 917588, 917589, 917590, 917591, 917592, 917593, 917594, 917595, 917596, 917597, 917598, 917599, 917600, 917601, 917602, 917603, 917604, 917605, 917606, 917607, 917608, 917609, 917610, 917611, 917612, 917613, 917614, 917615, 917616, 917617, 917618, 917619, 917620, 917621, 917622, 917623, 917624, 917625, 917626, 917627, 917628, 917629, 917630, 917631, 917760, 917761, 917762, 917763, 917764, 917765, 917766, 917767, 917768, 917769, 917770, 917771, 917772, 917773, 917774, 917775, 917776, 917777, 917778, 917779, 917780, 917781, 917782, 917783, 917784, 917785, 917786, 917787, 917788, 917789, 917790, 917791, 917792, 917793, 917794, 917795, 917796, 917797, 917798, 917799, 917800, 917801, 917802, 917803, 917804, 917805, 917806, 917807, 917808, 917809, 917810, 917811, 917812, 917813, 917814, 917815, 917816, 917817, 917818, 917819, 917820, 917821, 917822, 917823, 917824, 917825, 917826, 917827, 917828, 917829, 917830, 917831, 917832, 917833, 917834, 917835, 917836, 917837, 917838, 917839, 917840, 917841, 917842, 917843, 917844, 917845, 917846, 917847, 917848, 917849, 917850, 917851, 917852, 917853, 917854, 917855, 917856, 917857, 917858, 917859, 917860, 917861, 917862, 917863, 917864, 917865, 917866, 917867, 917868, 917869, 917870, 917871, 917872, 917873, 917874, 917875, 917876, 917877, 917878, 917879, 917880, 917881, 917882, 917883, 917884, 917885, 917886, 917887, 917888, 917889, 917890, 917891, 917892, 917893, 917894, 917895, 917896, 917897, 917898, 917899, 917900, 917901, 917902, 917903, 917904, 917905, 917906, 917907, 917908, 917909, 917910, 917911, 917912, 917913, 917914, 917915, 917916, 917917, 917918, 917919, 917920, 917921, 917922, 917923, 917924, 917925, 917926, 917927, 917928, 917929, 917930, 917931, 917932, 917933, 917934, 917935, 917936, 917937, 917938, 917939, 917940, 917941, 917942, 917943, 917944, 917945, 917946, 917947, 917948, 917949, 917950, 917951, 917952, 917953, 917954, 917955, 917956, 917957, 917958, 917959, 917960, 917961, 917962, 917963, 917964, 917965, 917966, 917967, 917968, 917969, 917970, 917971, 917972, 917973, 917974, 917975, 917976, 917977, 917978, 917979, 917980, 917981, 917982, 917983, 917984, 917985, 917986, 917987, 917988, 917989, 917990, 917991, 917992, 917993, 917994, 917995, 917996, 917997, 917998, 917999, 983040, 1048573, 1048576, 1114109 }; // }}} static char_type mark_for_codepoint(char_type c) { switch(c) { // {{{ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: case 88: case 89: case 90: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: return 0 + c - 0; case 130: case 131: return 128 + c - 130; case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149: case 150: case 151: case 152: return 130 + c - 133; case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: case 180: case 181: case 182: case 183: case 184: case 185: case 186: case 187: case 188: case 189: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: case 256: case 257: case 258: case 259: case 260: case 261: case 262: case 263: case 264: case 265: case 266: case 267: case 268: case 269: case 270: case 271: case 272: case 273: case 274: case 275: case 276: case 277: case 278: case 279: case 280: case 281: case 282: case 283: case 284: case 285: case 286: case 287: case 288: case 289: case 290: case 291: case 292: case 293: case 294: case 295: case 296: case 297: case 298: case 299: case 300: case 301: case 302: case 303: case 304: case 305: case 306: case 307: case 308: case 309: case 310: case 311: case 312: case 313: case 314: case 315: case 316: case 317: case 318: case 319: case 320: case 321: case 322: case 323: case 324: case 325: case 326: case 327: case 328: case 329: case 330: case 331: case 332: case 333: case 334: case 335: case 336: case 337: case 338: case 339: case 340: case 341: case 342: case 343: case 344: case 345: case 346: case 347: case 348: case 349: case 350: case 351: case 352: case 353: case 354: case 355: case 356: case 357: case 358: case 359: case 360: case 361: case 362: case 363: case 364: case 365: case 366: case 367: case 368: case 369: case 370: case 371: case 372: case 373: case 374: case 375: case 376: case 377: case 378: case 379: case 380: case 381: case 382: case 383: case 384: case 385: case 386: case 387: case 388: case 389: case 390: case 391: case 392: case 393: case 394: case 395: case 396: case 397: case 398: case 399: case 400: case 401: case 402: case 403: case 404: case 405: case 406: case 407: case 408: case 409: case 410: case 411: case 412: case 413: case 414: case 415: case 416: case 417: case 418: case 419: case 420: case 421: case 422: case 423: case 424: case 425: case 426: case 427: case 428: case 429: case 430: case 431: case 432: case 433: case 434: case 435: case 436: case 437: case 438: case 439: case 440: case 441: case 442: case 443: case 444: case 445: case 446: case 447: case 448: case 449: case 450: case 451: case 452: case 453: case 454: case 455: case 456: case 457: case 458: case 459: case 460: case 461: case 462: case 463: case 464: case 465: case 466: case 467: case 468: case 469: case 470: case 471: case 472: case 473: case 474: case 475: case 476: case 477: case 478: case 479: case 480: case 481: case 482: case 483: case 484: case 485: case 486: case 487: case 488: case 489: case 490: case 491: case 492: case 493: case 494: case 495: case 496: case 497: case 498: case 499: case 500: case 501: case 502: case 503: case 504: case 505: case 506: case 507: case 508: case 509: case 510: case 511: case 512: case 513: case 514: case 515: case 516: case 517: case 518: case 519: case 520: case 521: case 522: case 523: case 524: case 525: case 526: case 527: case 528: case 529: case 530: case 531: case 532: case 533: case 534: case 535: case 536: case 537: case 538: case 539: case 540: case 541: case 542: case 543: case 544: case 545: case 546: case 547: case 548: case 549: case 550: case 551: case 552: case 553: case 554: case 555: case 556: case 557: case 558: case 559: case 560: case 561: case 562: case 563: case 564: case 565: case 566: case 567: case 568: case 569: case 570: case 571: case 572: case 573: case 574: case 575: case 576: case 577: case 578: case 579: case 580: case 581: case 582: case 583: case 584: case 585: case 586: case 587: case 588: case 589: case 590: case 591: case 592: case 593: case 594: case 595: case 596: case 597: case 598: case 599: case 600: case 601: case 602: case 603: case 604: case 605: case 606: case 607: case 608: case 609: case 610: case 611: case 612: case 613: case 614: case 615: case 616: case 617: case 618: case 619: case 620: case 621: case 622: case 623: case 624: case 625: case 626: case 627: case 628: case 629: case 630: case 631: case 632: case 633: case 634: case 635: case 636: case 637: case 638: case 639: case 640: case 641: case 642: case 643: case 644: case 645: case 646: case 647: case 648: case 649: case 650: case 651: case 652: case 653: case 654: case 655: case 656: case 657: case 658: case 659: case 660: case 661: case 662: case 663: case 664: case 665: case 666: case 667: case 668: case 669: case 670: case 671: case 672: case 673: case 674: case 675: case 676: case 677: case 678: case 679: case 680: case 681: case 682: case 683: case 684: case 685: case 686: case 687: case 688: case 689: case 690: case 691: case 692: case 693: case 694: case 695: case 696: case 697: case 698: case 699: case 700: case 701: case 702: case 703: case 704: case 705: case 706: case 707: case 708: case 709: case 710: case 711: case 712: case 713: case 714: case 715: case 716: case 717: case 718: case 719: case 720: case 721: case 722: case 723: case 724: case 725: case 726: case 727: case 728: case 729: case 730: case 731: case 732: case 733: case 734: case 735: case 736: case 737: case 738: case 739: case 740: case 741: case 742: case 743: case 744: case 745: case 746: case 747: case 748: case 749: case 750: case 751: case 752: case 753: case 754: case 755: case 756: case 757: case 758: case 759: case 760: case 761: case 762: case 763: case 764: case 765: case 766: case 767: case 768: case 769: case 770: case 771: case 772: case 773: case 774: case 775: case 776: case 777: case 778: case 779: case 780: case 781: case 782: case 783: case 784: case 785: case 786: case 787: case 788: case 789: case 790: case 791: case 792: case 793: case 794: case 795: case 796: case 797: case 798: case 799: case 800: case 801: case 802: case 803: case 804: case 805: case 806: case 807: case 808: case 809: case 810: case 811: case 812: case 813: case 814: case 815: case 816: case 817: case 818: case 819: case 820: case 821: case 822: case 823: case 824: case 825: case 826: case 827: case 828: case 829: case 830: case 831: case 832: case 833: case 834: case 835: case 836: case 837: case 838: case 839: case 840: case 841: case 842: case 843: case 844: case 845: case 846: case 847: case 848: case 849: case 850: case 851: case 852: case 853: case 854: case 855: case 856: case 857: case 858: case 859: case 860: case 861: case 862: case 863: case 864: case 865: case 866: case 867: case 868: case 869: case 870: case 871: case 872: case 873: case 874: case 875: case 876: case 877: case 878: case 879: case 880: case 881: case 882: case 883: case 884: case 885: case 886: case 887: return 150 + c - 154; case 890: case 891: case 892: case 893: case 894: case 895: return 884 + c - 890; case 900: case 901: case 902: case 903: case 904: case 905: case 906: return 890 + c - 900; case 908: return 897; case 910: case 911: case 912: case 913: case 914: case 915: case 916: case 917: case 918: case 919: case 920: case 921: case 922: case 923: case 924: case 925: case 926: case 927: case 928: case 929: return 898 + c - 910; case 931: case 932: case 933: case 934: case 935: case 936: case 937: case 938: case 939: case 940: case 941: case 942: case 943: case 944: case 945: case 946: case 947: case 948: case 949: case 950: case 951: case 952: case 953: case 954: case 955: case 956: case 957: case 958: case 959: case 960: case 961: case 962: case 963: case 964: case 965: case 966: case 967: case 968: case 969: case 970: case 971: case 972: case 973: case 974: case 975: case 976: case 977: case 978: case 979: case 980: case 981: case 982: case 983: case 984: case 985: case 986: case 987: case 988: case 989: case 990: case 991: case 992: case 993: case 994: case 995: case 996: case 997: case 998: case 999: case 1000: case 1001: case 1002: case 1003: case 1004: case 1005: case 1006: case 1007: case 1008: case 1009: case 1010: case 1011: case 1012: case 1013: case 1014: case 1015: case 1016: case 1017: case 1018: case 1019: case 1020: case 1021: case 1022: case 1023: case 1024: case 1025: case 1026: case 1027: case 1028: case 1029: case 1030: case 1031: case 1032: case 1033: case 1034: case 1035: case 1036: case 1037: case 1038: case 1039: case 1040: case 1041: case 1042: case 1043: case 1044: case 1045: case 1046: case 1047: case 1048: case 1049: case 1050: case 1051: case 1052: case 1053: case 1054: case 1055: case 1056: case 1057: case 1058: case 1059: case 1060: case 1061: case 1062: case 1063: case 1064: case 1065: case 1066: case 1067: case 1068: case 1069: case 1070: case 1071: case 1072: case 1073: case 1074: case 1075: case 1076: case 1077: case 1078: case 1079: case 1080: case 1081: case 1082: case 1083: case 1084: case 1085: case 1086: case 1087: case 1088: case 1089: case 1090: case 1091: case 1092: case 1093: case 1094: case 1095: case 1096: case 1097: case 1098: case 1099: case 1100: case 1101: case 1102: case 1103: case 1104: case 1105: case 1106: case 1107: case 1108: case 1109: case 1110: case 1111: case 1112: case 1113: case 1114: case 1115: case 1116: case 1117: case 1118: case 1119: case 1120: case 1121: case 1122: case 1123: case 1124: case 1125: case 1126: case 1127: case 1128: case 1129: case 1130: case 1131: case 1132: case 1133: case 1134: case 1135: case 1136: case 1137: case 1138: case 1139: case 1140: case 1141: case 1142: case 1143: case 1144: case 1145: case 1146: case 1147: case 1148: case 1149: case 1150: case 1151: case 1152: case 1153: case 1154: case 1155: case 1156: case 1157: case 1158: case 1159: case 1160: case 1161: case 1162: case 1163: case 1164: case 1165: case 1166: case 1167: case 1168: case 1169: case 1170: case 1171: case 1172: case 1173: case 1174: case 1175: case 1176: case 1177: case 1178: case 1179: case 1180: case 1181: case 1182: case 1183: case 1184: case 1185: case 1186: case 1187: case 1188: case 1189: case 1190: case 1191: case 1192: case 1193: case 1194: case 1195: case 1196: case 1197: case 1198: case 1199: case 1200: case 1201: case 1202: case 1203: case 1204: case 1205: case 1206: case 1207: case 1208: case 1209: case 1210: case 1211: case 1212: case 1213: case 1214: case 1215: case 1216: case 1217: case 1218: case 1219: case 1220: case 1221: case 1222: case 1223: case 1224: case 1225: case 1226: case 1227: case 1228: case 1229: case 1230: case 1231: case 1232: case 1233: case 1234: case 1235: case 1236: case 1237: case 1238: case 1239: case 1240: case 1241: case 1242: case 1243: case 1244: case 1245: case 1246: case 1247: case 1248: case 1249: case 1250: case 1251: case 1252: case 1253: case 1254: case 1255: case 1256: case 1257: case 1258: case 1259: case 1260: case 1261: case 1262: case 1263: case 1264: case 1265: case 1266: case 1267: case 1268: case 1269: case 1270: case 1271: case 1272: case 1273: case 1274: case 1275: case 1276: case 1277: case 1278: case 1279: case 1280: case 1281: case 1282: case 1283: case 1284: case 1285: case 1286: case 1287: case 1288: case 1289: case 1290: case 1291: case 1292: case 1293: case 1294: case 1295: case 1296: case 1297: case 1298: case 1299: case 1300: case 1301: case 1302: case 1303: case 1304: case 1305: case 1306: case 1307: case 1308: case 1309: case 1310: case 1311: case 1312: case 1313: case 1314: case 1315: case 1316: case 1317: case 1318: case 1319: case 1320: case 1321: case 1322: case 1323: case 1324: case 1325: case 1326: case 1327: return 918 + c - 931; case 1329: case 1330: case 1331: case 1332: case 1333: case 1334: case 1335: case 1336: case 1337: case 1338: case 1339: case 1340: case 1341: case 1342: case 1343: case 1344: case 1345: case 1346: case 1347: case 1348: case 1349: case 1350: case 1351: case 1352: case 1353: case 1354: case 1355: case 1356: case 1357: case 1358: case 1359: case 1360: case 1361: case 1362: case 1363: case 1364: case 1365: case 1366: return 1315 + c - 1329; case 1369: case 1370: case 1371: case 1372: case 1373: case 1374: case 1375: case 1376: case 1377: case 1378: case 1379: case 1380: case 1381: case 1382: case 1383: case 1384: case 1385: case 1386: case 1387: case 1388: case 1389: case 1390: case 1391: case 1392: case 1393: case 1394: case 1395: case 1396: case 1397: case 1398: case 1399: case 1400: case 1401: case 1402: case 1403: case 1404: case 1405: case 1406: case 1407: case 1408: case 1409: case 1410: case 1411: case 1412: case 1413: case 1414: case 1415: case 1416: case 1417: case 1418: return 1353 + c - 1369; case 1421: case 1422: case 1423: return 1403 + c - 1421; case 1425: case 1426: case 1427: case 1428: case 1429: case 1430: case 1431: case 1432: case 1433: case 1434: case 1435: case 1436: case 1437: case 1438: case 1439: case 1440: case 1441: case 1442: case 1443: case 1444: case 1445: case 1446: case 1447: case 1448: case 1449: case 1450: case 1451: case 1452: case 1453: case 1454: case 1455: case 1456: case 1457: case 1458: case 1459: case 1460: case 1461: case 1462: case 1463: case 1464: case 1465: case 1466: case 1467: case 1468: case 1469: case 1470: case 1471: case 1472: case 1473: case 1474: case 1475: case 1476: case 1477: case 1478: case 1479: return 1406 + c - 1425; case 1488: case 1489: case 1490: case 1491: case 1492: case 1493: case 1494: case 1495: case 1496: case 1497: case 1498: case 1499: case 1500: case 1501: case 1502: case 1503: case 1504: case 1505: case 1506: case 1507: case 1508: case 1509: case 1510: case 1511: case 1512: case 1513: case 1514: return 1461 + c - 1488; case 1519: case 1520: case 1521: case 1522: case 1523: case 1524: return 1488 + c - 1519; case 1536: case 1537: case 1538: case 1539: case 1540: case 1541: case 1542: case 1543: case 1544: case 1545: case 1546: case 1547: case 1548: case 1549: case 1550: case 1551: case 1552: case 1553: case 1554: case 1555: case 1556: case 1557: case 1558: case 1559: case 1560: case 1561: case 1562: case 1563: case 1564: return 1494 + c - 1536; case 1566: case 1567: case 1568: case 1569: case 1570: case 1571: case 1572: case 1573: case 1574: case 1575: case 1576: case 1577: case 1578: case 1579: case 1580: case 1581: case 1582: case 1583: case 1584: case 1585: case 1586: case 1587: case 1588: case 1589: case 1590: case 1591: case 1592: case 1593: case 1594: case 1595: case 1596: case 1597: case 1598: case 1599: case 1600: case 1601: case 1602: case 1603: case 1604: case 1605: case 1606: case 1607: case 1608: case 1609: case 1610: case 1611: case 1612: case 1613: case 1614: case 1615: case 1616: case 1617: case 1618: case 1619: case 1620: case 1621: case 1622: case 1623: case 1624: case 1625: case 1626: case 1627: case 1628: case 1629: case 1630: case 1631: case 1632: case 1633: case 1634: case 1635: case 1636: case 1637: case 1638: case 1639: case 1640: case 1641: case 1642: case 1643: case 1644: case 1645: case 1646: case 1647: case 1648: case 1649: case 1650: case 1651: case 1652: case 1653: case 1654: case 1655: case 1656: case 1657: case 1658: case 1659: case 1660: case 1661: case 1662: case 1663: case 1664: case 1665: case 1666: case 1667: case 1668: case 1669: case 1670: case 1671: case 1672: case 1673: case 1674: case 1675: case 1676: case 1677: case 1678: case 1679: case 1680: case 1681: case 1682: case 1683: case 1684: case 1685: case 1686: case 1687: case 1688: case 1689: case 1690: case 1691: case 1692: case 1693: case 1694: case 1695: case 1696: case 1697: case 1698: case 1699: case 1700: case 1701: case 1702: case 1703: case 1704: case 1705: case 1706: case 1707: case 1708: case 1709: case 1710: case 1711: case 1712: case 1713: case 1714: case 1715: case 1716: case 1717: case 1718: case 1719: case 1720: case 1721: case 1722: case 1723: case 1724: case 1725: case 1726: case 1727: case 1728: case 1729: case 1730: case 1731: case 1732: case 1733: case 1734: case 1735: case 1736: case 1737: case 1738: case 1739: case 1740: case 1741: case 1742: case 1743: case 1744: case 1745: case 1746: case 1747: case 1748: case 1749: case 1750: case 1751: case 1752: case 1753: case 1754: case 1755: case 1756: case 1757: case 1758: case 1759: case 1760: case 1761: case 1762: case 1763: case 1764: case 1765: case 1766: case 1767: case 1768: case 1769: case 1770: case 1771: case 1772: case 1773: case 1774: case 1775: case 1776: case 1777: case 1778: case 1779: case 1780: case 1781: case 1782: case 1783: case 1784: case 1785: case 1786: case 1787: case 1788: case 1789: case 1790: case 1791: case 1792: case 1793: case 1794: case 1795: case 1796: case 1797: case 1798: case 1799: case 1800: case 1801: case 1802: case 1803: case 1804: case 1805: return 1523 + c - 1566; case 1807: case 1808: case 1809: case 1810: case 1811: case 1812: case 1813: case 1814: case 1815: case 1816: case 1817: case 1818: case 1819: case 1820: case 1821: case 1822: case 1823: case 1824: case 1825: case 1826: case 1827: case 1828: case 1829: case 1830: case 1831: case 1832: case 1833: case 1834: case 1835: case 1836: case 1837: case 1838: case 1839: case 1840: case 1841: case 1842: case 1843: case 1844: case 1845: case 1846: case 1847: case 1848: case 1849: case 1850: case 1851: case 1852: case 1853: case 1854: case 1855: case 1856: case 1857: case 1858: case 1859: case 1860: case 1861: case 1862: case 1863: case 1864: case 1865: case 1866: return 1763 + c - 1807; case 1869: case 1870: case 1871: case 1872: case 1873: case 1874: case 1875: case 1876: case 1877: case 1878: case 1879: case 1880: case 1881: case 1882: case 1883: case 1884: case 1885: case 1886: case 1887: case 1888: case 1889: case 1890: case 1891: case 1892: case 1893: case 1894: case 1895: case 1896: case 1897: case 1898: case 1899: case 1900: case 1901: case 1902: case 1903: case 1904: case 1905: case 1906: case 1907: case 1908: case 1909: case 1910: case 1911: case 1912: case 1913: case 1914: case 1915: case 1916: case 1917: case 1918: case 1919: case 1920: case 1921: case 1922: case 1923: case 1924: case 1925: case 1926: case 1927: case 1928: case 1929: case 1930: case 1931: case 1932: case 1933: case 1934: case 1935: case 1936: case 1937: case 1938: case 1939: case 1940: case 1941: case 1942: case 1943: case 1944: case 1945: case 1946: case 1947: case 1948: case 1949: case 1950: case 1951: case 1952: case 1953: case 1954: case 1955: case 1956: case 1957: case 1958: case 1959: case 1960: case 1961: case 1962: case 1963: case 1964: case 1965: case 1966: case 1967: case 1968: case 1969: return 1823 + c - 1869; case 1984: case 1985: case 1986: case 1987: case 1988: case 1989: case 1990: case 1991: case 1992: case 1993: case 1994: case 1995: case 1996: case 1997: case 1998: case 1999: case 2000: case 2001: case 2002: case 2003: case 2004: case 2005: case 2006: case 2007: case 2008: case 2009: case 2010: case 2011: case 2012: case 2013: case 2014: case 2015: case 2016: case 2017: case 2018: case 2019: case 2020: case 2021: case 2022: case 2023: case 2024: case 2025: case 2026: case 2027: case 2028: case 2029: case 2030: case 2031: case 2032: case 2033: case 2034: case 2035: case 2036: case 2037: case 2038: case 2039: case 2040: case 2041: case 2042: return 1924 + c - 1984; case 2045: case 2046: case 2047: case 2048: case 2049: case 2050: case 2051: case 2052: case 2053: case 2054: case 2055: case 2056: case 2057: case 2058: case 2059: case 2060: case 2061: case 2062: case 2063: case 2064: case 2065: case 2066: case 2067: case 2068: case 2069: case 2070: case 2071: case 2072: case 2073: case 2074: case 2075: case 2076: case 2077: case 2078: case 2079: case 2080: case 2081: case 2082: case 2083: case 2084: case 2085: case 2086: case 2087: case 2088: case 2089: case 2090: case 2091: case 2092: case 2093: return 1983 + c - 2045; case 2096: case 2097: case 2098: case 2099: case 2100: case 2101: case 2102: case 2103: case 2104: case 2105: case 2106: case 2107: case 2108: case 2109: case 2110: return 2032 + c - 2096; case 2112: case 2113: case 2114: case 2115: case 2116: case 2117: case 2118: case 2119: case 2120: case 2121: case 2122: case 2123: case 2124: case 2125: case 2126: case 2127: case 2128: case 2129: case 2130: case 2131: case 2132: case 2133: case 2134: case 2135: case 2136: case 2137: case 2138: case 2139: return 2047 + c - 2112; case 2142: return 2075; case 2144: case 2145: case 2146: case 2147: case 2148: case 2149: case 2150: case 2151: case 2152: case 2153: case 2154: return 2076 + c - 2144; case 2208: case 2209: case 2210: case 2211: case 2212: case 2213: case 2214: case 2215: case 2216: case 2217: case 2218: case 2219: case 2220: case 2221: case 2222: case 2223: case 2224: case 2225: case 2226: case 2227: case 2228: return 2087 + c - 2208; case 2230: case 2231: case 2232: case 2233: case 2234: case 2235: case 2236: case 2237: return 2108 + c - 2230; case 2259: case 2260: case 2261: case 2262: case 2263: case 2264: case 2265: case 2266: case 2267: case 2268: case 2269: case 2270: case 2271: case 2272: case 2273: case 2274: case 2275: case 2276: case 2277: case 2278: case 2279: case 2280: case 2281: case 2282: case 2283: case 2284: case 2285: case 2286: case 2287: case 2288: case 2289: case 2290: case 2291: case 2292: case 2293: case 2294: case 2295: case 2296: case 2297: case 2298: case 2299: case 2300: case 2301: case 2302: case 2303: case 2304: case 2305: case 2306: case 2307: case 2308: case 2309: case 2310: case 2311: case 2312: case 2313: case 2314: case 2315: case 2316: case 2317: case 2318: case 2319: case 2320: case 2321: case 2322: case 2323: case 2324: case 2325: case 2326: case 2327: case 2328: case 2329: case 2330: case 2331: case 2332: case 2333: case 2334: case 2335: case 2336: case 2337: case 2338: case 2339: case 2340: case 2341: case 2342: case 2343: case 2344: case 2345: case 2346: case 2347: case 2348: case 2349: case 2350: case 2351: case 2352: case 2353: case 2354: case 2355: case 2356: case 2357: case 2358: case 2359: case 2360: case 2361: case 2362: case 2363: case 2364: case 2365: case 2366: case 2367: case 2368: case 2369: case 2370: case 2371: case 2372: case 2373: case 2374: case 2375: case 2376: case 2377: case 2378: case 2379: case 2380: case 2381: case 2382: case 2383: case 2384: case 2385: case 2386: case 2387: case 2388: case 2389: case 2390: case 2391: case 2392: case 2393: case 2394: case 2395: case 2396: case 2397: case 2398: case 2399: case 2400: case 2401: case 2402: case 2403: case 2404: case 2405: case 2406: case 2407: case 2408: case 2409: case 2410: case 2411: case 2412: case 2413: case 2414: case 2415: case 2416: case 2417: case 2418: case 2419: case 2420: case 2421: case 2422: case 2423: case 2424: case 2425: case 2426: case 2427: case 2428: case 2429: case 2430: case 2431: case 2432: case 2433: case 2434: case 2435: return 2116 + c - 2259; case 2437: case 2438: case 2439: case 2440: case 2441: case 2442: case 2443: case 2444: return 2293 + c - 2437; case 2447: case 2448: return 2301 + c - 2447; case 2451: case 2452: case 2453: case 2454: case 2455: case 2456: case 2457: case 2458: case 2459: case 2460: case 2461: case 2462: case 2463: case 2464: case 2465: case 2466: case 2467: case 2468: case 2469: case 2470: case 2471: case 2472: return 2303 + c - 2451; case 2474: case 2475: case 2476: case 2477: case 2478: case 2479: case 2480: return 2325 + c - 2474; case 2482: return 2332; case 2486: case 2487: case 2488: case 2489: return 2333 + c - 2486; case 2492: case 2493: case 2494: case 2495: case 2496: case 2497: case 2498: case 2499: case 2500: return 2337 + c - 2492; case 2503: case 2504: return 2346 + c - 2503; case 2507: case 2508: case 2509: case 2510: return 2348 + c - 2507; case 2519: return 2352; case 2524: case 2525: return 2353 + c - 2524; case 2527: case 2528: case 2529: case 2530: case 2531: return 2355 + c - 2527; case 2534: case 2535: case 2536: case 2537: case 2538: case 2539: case 2540: case 2541: case 2542: case 2543: case 2544: case 2545: case 2546: case 2547: case 2548: case 2549: case 2550: case 2551: case 2552: case 2553: case 2554: case 2555: case 2556: case 2557: case 2558: return 2360 + c - 2534; case 2561: case 2562: case 2563: return 2385 + c - 2561; case 2565: case 2566: case 2567: case 2568: case 2569: case 2570: return 2388 + c - 2565; case 2575: case 2576: return 2394 + c - 2575; case 2579: case 2580: case 2581: case 2582: case 2583: case 2584: case 2585: case 2586: case 2587: case 2588: case 2589: case 2590: case 2591: case 2592: case 2593: case 2594: case 2595: case 2596: case 2597: case 2598: case 2599: case 2600: return 2396 + c - 2579; case 2602: case 2603: case 2604: case 2605: case 2606: case 2607: case 2608: return 2418 + c - 2602; case 2610: case 2611: return 2425 + c - 2610; case 2613: case 2614: return 2427 + c - 2613; case 2616: case 2617: return 2429 + c - 2616; case 2620: return 2431; case 2622: case 2623: case 2624: case 2625: case 2626: return 2432 + c - 2622; case 2631: case 2632: return 2437 + c - 2631; case 2635: case 2636: case 2637: return 2439 + c - 2635; case 2641: return 2442; case 2649: case 2650: case 2651: case 2652: return 2443 + c - 2649; case 2654: return 2447; case 2662: case 2663: case 2664: case 2665: case 2666: case 2667: case 2668: case 2669: case 2670: case 2671: case 2672: case 2673: case 2674: case 2675: case 2676: case 2677: case 2678: return 2448 + c - 2662; case 2689: case 2690: case 2691: return 2465 + c - 2689; case 2693: case 2694: case 2695: case 2696: case 2697: case 2698: case 2699: case 2700: case 2701: return 2468 + c - 2693; case 2703: case 2704: case 2705: return 2477 + c - 2703; case 2707: case 2708: case 2709: case 2710: case 2711: case 2712: case 2713: case 2714: case 2715: case 2716: case 2717: case 2718: case 2719: case 2720: case 2721: case 2722: case 2723: case 2724: case 2725: case 2726: case 2727: case 2728: return 2480 + c - 2707; case 2730: case 2731: case 2732: case 2733: case 2734: case 2735: case 2736: return 2502 + c - 2730; case 2738: case 2739: return 2509 + c - 2738; case 2741: case 2742: case 2743: case 2744: case 2745: return 2511 + c - 2741; case 2748: case 2749: case 2750: case 2751: case 2752: case 2753: case 2754: case 2755: case 2756: case 2757: return 2516 + c - 2748; case 2759: case 2760: case 2761: return 2526 + c - 2759; case 2763: case 2764: case 2765: return 2529 + c - 2763; case 2768: return 2532; case 2784: case 2785: case 2786: case 2787: return 2533 + c - 2784; case 2790: case 2791: case 2792: case 2793: case 2794: case 2795: case 2796: case 2797: case 2798: case 2799: case 2800: case 2801: return 2537 + c - 2790; case 2809: case 2810: case 2811: case 2812: case 2813: case 2814: case 2815: return 2549 + c - 2809; case 2817: case 2818: case 2819: return 2556 + c - 2817; case 2821: case 2822: case 2823: case 2824: case 2825: case 2826: case 2827: case 2828: return 2559 + c - 2821; case 2831: case 2832: return 2567 + c - 2831; case 2835: case 2836: case 2837: case 2838: case 2839: case 2840: case 2841: case 2842: case 2843: case 2844: case 2845: case 2846: case 2847: case 2848: case 2849: case 2850: case 2851: case 2852: case 2853: case 2854: case 2855: case 2856: return 2569 + c - 2835; case 2858: case 2859: case 2860: case 2861: case 2862: case 2863: case 2864: return 2591 + c - 2858; case 2866: case 2867: return 2598 + c - 2866; case 2869: case 2870: case 2871: case 2872: case 2873: return 2600 + c - 2869; case 2876: case 2877: case 2878: case 2879: case 2880: case 2881: case 2882: case 2883: case 2884: return 2605 + c - 2876; case 2887: case 2888: return 2614 + c - 2887; case 2891: case 2892: case 2893: return 2616 + c - 2891; case 2902: case 2903: return 2619 + c - 2902; case 2908: case 2909: return 2621 + c - 2908; case 2911: case 2912: case 2913: case 2914: case 2915: return 2623 + c - 2911; case 2918: case 2919: case 2920: case 2921: case 2922: case 2923: case 2924: case 2925: case 2926: case 2927: case 2928: case 2929: case 2930: case 2931: case 2932: case 2933: case 2934: case 2935: return 2628 + c - 2918; case 2946: case 2947: return 2646 + c - 2946; case 2949: case 2950: case 2951: case 2952: case 2953: case 2954: return 2648 + c - 2949; case 2958: case 2959: case 2960: return 2654 + c - 2958; case 2962: case 2963: case 2964: case 2965: return 2657 + c - 2962; case 2969: case 2970: return 2661 + c - 2969; case 2972: return 2663; case 2974: case 2975: return 2664 + c - 2974; case 2979: case 2980: return 2666 + c - 2979; case 2984: case 2985: case 2986: return 2668 + c - 2984; case 2990: case 2991: case 2992: case 2993: case 2994: case 2995: case 2996: case 2997: case 2998: case 2999: case 3000: case 3001: return 2671 + c - 2990; case 3006: case 3007: case 3008: case 3009: case 3010: return 2683 + c - 3006; case 3014: case 3015: case 3016: return 2688 + c - 3014; case 3018: case 3019: case 3020: case 3021: return 2691 + c - 3018; case 3024: return 2695; case 3031: return 2696; case 3046: case 3047: case 3048: case 3049: case 3050: case 3051: case 3052: case 3053: case 3054: case 3055: case 3056: case 3057: case 3058: case 3059: case 3060: case 3061: case 3062: case 3063: case 3064: case 3065: case 3066: return 2697 + c - 3046; case 3072: case 3073: case 3074: case 3075: case 3076: case 3077: case 3078: case 3079: case 3080: case 3081: case 3082: case 3083: case 3084: return 2718 + c - 3072; case 3086: case 3087: case 3088: return 2731 + c - 3086; case 3090: case 3091: case 3092: case 3093: case 3094: case 3095: case 3096: case 3097: case 3098: case 3099: case 3100: case 3101: case 3102: case 3103: case 3104: case 3105: case 3106: case 3107: case 3108: case 3109: case 3110: case 3111: case 3112: return 2734 + c - 3090; case 3114: case 3115: case 3116: case 3117: case 3118: case 3119: case 3120: case 3121: case 3122: case 3123: case 3124: case 3125: case 3126: case 3127: case 3128: case 3129: return 2757 + c - 3114; case 3133: case 3134: case 3135: case 3136: case 3137: case 3138: case 3139: case 3140: return 2773 + c - 3133; case 3142: case 3143: case 3144: return 2781 + c - 3142; case 3146: case 3147: case 3148: case 3149: return 2784 + c - 3146; case 3157: case 3158: return 2788 + c - 3157; case 3160: case 3161: case 3162: return 2790 + c - 3160; case 3168: case 3169: case 3170: case 3171: return 2793 + c - 3168; case 3174: case 3175: case 3176: case 3177: case 3178: case 3179: case 3180: case 3181: case 3182: case 3183: return 2797 + c - 3174; case 3191: case 3192: case 3193: case 3194: case 3195: case 3196: case 3197: case 3198: case 3199: case 3200: case 3201: case 3202: case 3203: case 3204: case 3205: case 3206: case 3207: case 3208: case 3209: case 3210: case 3211: case 3212: return 2807 + c - 3191; case 3214: case 3215: case 3216: return 2829 + c - 3214; case 3218: case 3219: case 3220: case 3221: case 3222: case 3223: case 3224: case 3225: case 3226: case 3227: case 3228: case 3229: case 3230: case 3231: case 3232: case 3233: case 3234: case 3235: case 3236: case 3237: case 3238: case 3239: case 3240: return 2832 + c - 3218; case 3242: case 3243: case 3244: case 3245: case 3246: case 3247: case 3248: case 3249: case 3250: case 3251: return 2855 + c - 3242; case 3253: case 3254: case 3255: case 3256: case 3257: return 2865 + c - 3253; case 3260: case 3261: case 3262: case 3263: case 3264: case 3265: case 3266: case 3267: case 3268: return 2870 + c - 3260; case 3270: case 3271: case 3272: return 2879 + c - 3270; case 3274: case 3275: case 3276: case 3277: return 2882 + c - 3274; case 3285: case 3286: return 2886 + c - 3285; case 3294: return 2888; case 3296: case 3297: case 3298: case 3299: return 2889 + c - 3296; case 3302: case 3303: case 3304: case 3305: case 3306: case 3307: case 3308: case 3309: case 3310: case 3311: return 2893 + c - 3302; case 3313: case 3314: return 2903 + c - 3313; case 3328: case 3329: case 3330: case 3331: return 2905 + c - 3328; case 3333: case 3334: case 3335: case 3336: case 3337: case 3338: case 3339: case 3340: return 2909 + c - 3333; case 3342: case 3343: case 3344: return 2917 + c - 3342; case 3346: case 3347: case 3348: case 3349: case 3350: case 3351: case 3352: case 3353: case 3354: case 3355: case 3356: case 3357: case 3358: case 3359: case 3360: case 3361: case 3362: case 3363: case 3364: case 3365: case 3366: case 3367: case 3368: case 3369: case 3370: case 3371: case 3372: case 3373: case 3374: case 3375: case 3376: case 3377: case 3378: case 3379: case 3380: case 3381: case 3382: case 3383: case 3384: case 3385: case 3386: case 3387: case 3388: case 3389: case 3390: case 3391: case 3392: case 3393: case 3394: case 3395: case 3396: return 2920 + c - 3346; case 3398: case 3399: case 3400: return 2971 + c - 3398; case 3402: case 3403: case 3404: case 3405: case 3406: case 3407: return 2974 + c - 3402; case 3412: case 3413: case 3414: case 3415: case 3416: case 3417: case 3418: case 3419: case 3420: case 3421: case 3422: case 3423: case 3424: case 3425: case 3426: case 3427: return 2980 + c - 3412; case 3430: case 3431: case 3432: case 3433: case 3434: case 3435: case 3436: case 3437: case 3438: case 3439: case 3440: case 3441: case 3442: case 3443: case 3444: case 3445: case 3446: case 3447: case 3448: case 3449: case 3450: case 3451: case 3452: case 3453: case 3454: case 3455: return 2996 + c - 3430; case 3458: case 3459: return 3022 + c - 3458; case 3461: case 3462: case 3463: case 3464: case 3465: case 3466: case 3467: case 3468: case 3469: case 3470: case 3471: case 3472: case 3473: case 3474: case 3475: case 3476: case 3477: case 3478: return 3024 + c - 3461; case 3482: case 3483: case 3484: case 3485: case 3486: case 3487: case 3488: case 3489: case 3490: case 3491: case 3492: case 3493: case 3494: case 3495: case 3496: case 3497: case 3498: case 3499: case 3500: case 3501: case 3502: case 3503: case 3504: case 3505: return 3042 + c - 3482; case 3507: case 3508: case 3509: case 3510: case 3511: case 3512: case 3513: case 3514: case 3515: return 3066 + c - 3507; case 3517: return 3075; case 3520: case 3521: case 3522: case 3523: case 3524: case 3525: case 3526: return 3076 + c - 3520; case 3530: return 3083; case 3535: case 3536: case 3537: case 3538: case 3539: case 3540: return 3084 + c - 3535; case 3542: return 3090; case 3544: case 3545: case 3546: case 3547: case 3548: case 3549: case 3550: case 3551: return 3091 + c - 3544; case 3558: case 3559: case 3560: case 3561: case 3562: case 3563: case 3564: case 3565: case 3566: case 3567: return 3099 + c - 3558; case 3570: case 3571: case 3572: return 3109 + c - 3570; case 3585: case 3586: case 3587: case 3588: case 3589: case 3590: case 3591: case 3592: case 3593: case 3594: case 3595: case 3596: case 3597: case 3598: case 3599: case 3600: case 3601: case 3602: case 3603: case 3604: case 3605: case 3606: case 3607: case 3608: case 3609: case 3610: case 3611: case 3612: case 3613: case 3614: case 3615: case 3616: case 3617: case 3618: case 3619: case 3620: case 3621: case 3622: case 3623: case 3624: case 3625: case 3626: case 3627: case 3628: case 3629: case 3630: case 3631: case 3632: case 3633: case 3634: case 3635: case 3636: case 3637: case 3638: case 3639: case 3640: case 3641: case 3642: return 3112 + c - 3585; case 3647: case 3648: case 3649: case 3650: case 3651: case 3652: case 3653: case 3654: case 3655: case 3656: case 3657: case 3658: case 3659: case 3660: case 3661: case 3662: case 3663: case 3664: case 3665: case 3666: case 3667: case 3668: case 3669: case 3670: case 3671: case 3672: case 3673: case 3674: case 3675: return 3170 + c - 3647; case 3713: case 3714: return 3199 + c - 3713; case 3716: return 3201; case 3718: case 3719: case 3720: case 3721: case 3722: return 3202 + c - 3718; case 3724: case 3725: case 3726: case 3727: case 3728: case 3729: case 3730: case 3731: case 3732: case 3733: case 3734: case 3735: case 3736: case 3737: case 3738: case 3739: case 3740: case 3741: case 3742: case 3743: case 3744: case 3745: case 3746: case 3747: return 3207 + c - 3724; case 3749: return 3231; case 3751: case 3752: case 3753: case 3754: case 3755: case 3756: case 3757: case 3758: case 3759: case 3760: case 3761: case 3762: case 3763: case 3764: case 3765: case 3766: case 3767: case 3768: case 3769: case 3770: case 3771: case 3772: case 3773: return 3232 + c - 3751; case 3776: case 3777: case 3778: case 3779: case 3780: return 3255 + c - 3776; case 3782: return 3260; case 3784: case 3785: case 3786: case 3787: case 3788: case 3789: return 3261 + c - 3784; case 3792: case 3793: case 3794: case 3795: case 3796: case 3797: case 3798: case 3799: case 3800: case 3801: return 3267 + c - 3792; case 3804: case 3805: case 3806: case 3807: return 3277 + c - 3804; case 3840: case 3841: case 3842: case 3843: case 3844: case 3845: case 3846: case 3847: case 3848: case 3849: case 3850: case 3851: case 3852: case 3853: case 3854: case 3855: case 3856: case 3857: case 3858: case 3859: case 3860: case 3861: case 3862: case 3863: case 3864: case 3865: case 3866: case 3867: case 3868: case 3869: case 3870: case 3871: case 3872: case 3873: case 3874: case 3875: case 3876: case 3877: case 3878: case 3879: case 3880: case 3881: case 3882: case 3883: case 3884: case 3885: case 3886: case 3887: case 3888: case 3889: case 3890: case 3891: case 3892: case 3893: case 3894: case 3895: case 3896: case 3897: case 3898: case 3899: case 3900: case 3901: case 3902: case 3903: case 3904: case 3905: case 3906: case 3907: case 3908: case 3909: case 3910: case 3911: return 3281 + c - 3840; case 3913: case 3914: case 3915: case 3916: case 3917: case 3918: case 3919: case 3920: case 3921: case 3922: case 3923: case 3924: case 3925: case 3926: case 3927: case 3928: case 3929: case 3930: case 3931: case 3932: case 3933: case 3934: case 3935: case 3936: case 3937: case 3938: case 3939: case 3940: case 3941: case 3942: case 3943: case 3944: case 3945: case 3946: case 3947: case 3948: return 3353 + c - 3913; case 3953: case 3954: case 3955: case 3956: case 3957: case 3958: case 3959: case 3960: case 3961: case 3962: case 3963: case 3964: case 3965: case 3966: case 3967: case 3968: case 3969: case 3970: case 3971: case 3972: case 3973: case 3974: case 3975: case 3976: case 3977: case 3978: case 3979: case 3980: case 3981: case 3982: case 3983: case 3984: case 3985: case 3986: case 3987: case 3988: case 3989: case 3990: case 3991: return 3389 + c - 3953; case 3993: case 3994: case 3995: case 3996: case 3997: case 3998: case 3999: case 4000: case 4001: case 4002: case 4003: case 4004: case 4005: case 4006: case 4007: case 4008: case 4009: case 4010: case 4011: case 4012: case 4013: case 4014: case 4015: case 4016: case 4017: case 4018: case 4019: case 4020: case 4021: case 4022: case 4023: case 4024: case 4025: case 4026: case 4027: case 4028: return 3428 + c - 3993; case 4030: case 4031: case 4032: case 4033: case 4034: case 4035: case 4036: case 4037: case 4038: case 4039: case 4040: case 4041: case 4042: case 4043: case 4044: return 3464 + c - 4030; case 4046: case 4047: case 4048: case 4049: case 4050: case 4051: case 4052: case 4053: case 4054: case 4055: case 4056: case 4057: case 4058: return 3479 + c - 4046; case 4096: case 4097: case 4098: case 4099: case 4100: case 4101: case 4102: case 4103: case 4104: case 4105: case 4106: case 4107: case 4108: case 4109: case 4110: case 4111: case 4112: case 4113: case 4114: case 4115: case 4116: case 4117: case 4118: case 4119: case 4120: case 4121: case 4122: case 4123: case 4124: case 4125: case 4126: case 4127: case 4128: case 4129: case 4130: case 4131: case 4132: case 4133: case 4134: case 4135: case 4136: case 4137: case 4138: case 4139: case 4140: case 4141: case 4142: case 4143: case 4144: case 4145: case 4146: case 4147: case 4148: case 4149: case 4150: case 4151: case 4152: case 4153: case 4154: case 4155: case 4156: case 4157: case 4158: case 4159: case 4160: case 4161: case 4162: case 4163: case 4164: case 4165: case 4166: case 4167: case 4168: case 4169: case 4170: case 4171: case 4172: case 4173: case 4174: case 4175: case 4176: case 4177: case 4178: case 4179: case 4180: case 4181: case 4182: case 4183: case 4184: case 4185: case 4186: case 4187: case 4188: case 4189: case 4190: case 4191: case 4192: case 4193: case 4194: case 4195: case 4196: case 4197: case 4198: case 4199: case 4200: case 4201: case 4202: case 4203: case 4204: case 4205: case 4206: case 4207: case 4208: case 4209: case 4210: case 4211: case 4212: case 4213: case 4214: case 4215: case 4216: case 4217: case 4218: case 4219: case 4220: case 4221: case 4222: case 4223: case 4224: case 4225: case 4226: case 4227: case 4228: case 4229: case 4230: case 4231: case 4232: case 4233: case 4234: case 4235: case 4236: case 4237: case 4238: case 4239: case 4240: case 4241: case 4242: case 4243: case 4244: case 4245: case 4246: case 4247: case 4248: case 4249: case 4250: case 4251: case 4252: case 4253: case 4254: case 4255: case 4256: case 4257: case 4258: case 4259: case 4260: case 4261: case 4262: case 4263: case 4264: case 4265: case 4266: case 4267: case 4268: case 4269: case 4270: case 4271: case 4272: case 4273: case 4274: case 4275: case 4276: case 4277: case 4278: case 4279: case 4280: case 4281: case 4282: case 4283: case 4284: case 4285: case 4286: case 4287: case 4288: case 4289: case 4290: case 4291: case 4292: case 4293: return 3492 + c - 4096; case 4295: return 3690; case 4301: return 3691; case 4304: case 4305: case 4306: case 4307: case 4308: case 4309: case 4310: case 4311: case 4312: case 4313: case 4314: case 4315: case 4316: case 4317: case 4318: case 4319: case 4320: case 4321: case 4322: case 4323: case 4324: case 4325: case 4326: case 4327: case 4328: case 4329: case 4330: case 4331: case 4332: case 4333: case 4334: case 4335: case 4336: case 4337: case 4338: case 4339: case 4340: case 4341: case 4342: case 4343: case 4344: case 4345: case 4346: case 4347: case 4348: case 4349: case 4350: case 4351: case 4352: case 4353: case 4354: case 4355: case 4356: case 4357: case 4358: case 4359: case 4360: case 4361: case 4362: case 4363: case 4364: case 4365: case 4366: case 4367: case 4368: case 4369: case 4370: case 4371: case 4372: case 4373: case 4374: case 4375: case 4376: case 4377: case 4378: case 4379: case 4380: case 4381: case 4382: case 4383: case 4384: case 4385: case 4386: case 4387: case 4388: case 4389: case 4390: case 4391: case 4392: case 4393: case 4394: case 4395: case 4396: case 4397: case 4398: case 4399: case 4400: case 4401: case 4402: case 4403: case 4404: case 4405: case 4406: case 4407: case 4408: case 4409: case 4410: case 4411: case 4412: case 4413: case 4414: case 4415: case 4416: case 4417: case 4418: case 4419: case 4420: case 4421: case 4422: case 4423: case 4424: case 4425: case 4426: case 4427: case 4428: case 4429: case 4430: case 4431: case 4432: case 4433: case 4434: case 4435: case 4436: case 4437: case 4438: case 4439: case 4440: case 4441: case 4442: case 4443: case 4444: case 4445: case 4446: case 4447: case 4448: case 4449: case 4450: case 4451: case 4452: case 4453: case 4454: case 4455: case 4456: case 4457: case 4458: case 4459: case 4460: case 4461: case 4462: case 4463: case 4464: case 4465: case 4466: case 4467: case 4468: case 4469: case 4470: case 4471: case 4472: case 4473: case 4474: case 4475: case 4476: case 4477: case 4478: case 4479: case 4480: case 4481: case 4482: case 4483: case 4484: case 4485: case 4486: case 4487: case 4488: case 4489: case 4490: case 4491: case 4492: case 4493: case 4494: case 4495: case 4496: case 4497: case 4498: case 4499: case 4500: case 4501: case 4502: case 4503: case 4504: case 4505: case 4506: case 4507: case 4508: case 4509: case 4510: case 4511: case 4512: case 4513: case 4514: case 4515: case 4516: case 4517: case 4518: case 4519: case 4520: case 4521: case 4522: case 4523: case 4524: case 4525: case 4526: case 4527: case 4528: case 4529: case 4530: case 4531: case 4532: case 4533: case 4534: case 4535: case 4536: case 4537: case 4538: case 4539: case 4540: case 4541: case 4542: case 4543: case 4544: case 4545: case 4546: case 4547: case 4548: case 4549: case 4550: case 4551: case 4552: case 4553: case 4554: case 4555: case 4556: case 4557: case 4558: case 4559: case 4560: case 4561: case 4562: case 4563: case 4564: case 4565: case 4566: case 4567: case 4568: case 4569: case 4570: case 4571: case 4572: case 4573: case 4574: case 4575: case 4576: case 4577: case 4578: case 4579: case 4580: case 4581: case 4582: case 4583: case 4584: case 4585: case 4586: case 4587: case 4588: case 4589: case 4590: case 4591: case 4592: case 4593: case 4594: case 4595: case 4596: case 4597: case 4598: case 4599: case 4600: case 4601: case 4602: case 4603: case 4604: case 4605: case 4606: case 4607: case 4608: case 4609: case 4610: case 4611: case 4612: case 4613: case 4614: case 4615: case 4616: case 4617: case 4618: case 4619: case 4620: case 4621: case 4622: case 4623: case 4624: case 4625: case 4626: case 4627: case 4628: case 4629: case 4630: case 4631: case 4632: case 4633: case 4634: case 4635: case 4636: case 4637: case 4638: case 4639: case 4640: case 4641: case 4642: case 4643: case 4644: case 4645: case 4646: case 4647: case 4648: case 4649: case 4650: case 4651: case 4652: case 4653: case 4654: case 4655: case 4656: case 4657: case 4658: case 4659: case 4660: case 4661: case 4662: case 4663: case 4664: case 4665: case 4666: case 4667: case 4668: case 4669: case 4670: case 4671: case 4672: case 4673: case 4674: case 4675: case 4676: case 4677: case 4678: case 4679: case 4680: return 3692 + c - 4304; case 4682: case 4683: case 4684: case 4685: return 4069 + c - 4682; case 4688: case 4689: case 4690: case 4691: case 4692: case 4693: case 4694: return 4073 + c - 4688; case 4696: return 4080; case 4698: case 4699: case 4700: case 4701: return 4081 + c - 4698; case 4704: case 4705: case 4706: case 4707: case 4708: case 4709: case 4710: case 4711: case 4712: case 4713: case 4714: case 4715: case 4716: case 4717: case 4718: case 4719: case 4720: case 4721: case 4722: case 4723: case 4724: case 4725: case 4726: case 4727: case 4728: case 4729: case 4730: case 4731: case 4732: case 4733: case 4734: case 4735: case 4736: case 4737: case 4738: case 4739: case 4740: case 4741: case 4742: case 4743: case 4744: return 4085 + c - 4704; case 4746: case 4747: case 4748: case 4749: return 4126 + c - 4746; case 4752: case 4753: case 4754: case 4755: case 4756: case 4757: case 4758: case 4759: case 4760: case 4761: case 4762: case 4763: case 4764: case 4765: case 4766: case 4767: case 4768: case 4769: case 4770: case 4771: case 4772: case 4773: case 4774: case 4775: case 4776: case 4777: case 4778: case 4779: case 4780: case 4781: case 4782: case 4783: case 4784: return 4130 + c - 4752; case 4786: case 4787: case 4788: case 4789: return 4163 + c - 4786; case 4792: case 4793: case 4794: case 4795: case 4796: case 4797: case 4798: return 4167 + c - 4792; case 4800: return 4174; case 4802: case 4803: case 4804: case 4805: return 4175 + c - 4802; case 4808: case 4809: case 4810: case 4811: case 4812: case 4813: case 4814: case 4815: case 4816: case 4817: case 4818: case 4819: case 4820: case 4821: case 4822: return 4179 + c - 4808; case 4824: case 4825: case 4826: case 4827: case 4828: case 4829: case 4830: case 4831: case 4832: case 4833: case 4834: case 4835: case 4836: case 4837: case 4838: case 4839: case 4840: case 4841: case 4842: case 4843: case 4844: case 4845: case 4846: case 4847: case 4848: case 4849: case 4850: case 4851: case 4852: case 4853: case 4854: case 4855: case 4856: case 4857: case 4858: case 4859: case 4860: case 4861: case 4862: case 4863: case 4864: case 4865: case 4866: case 4867: case 4868: case 4869: case 4870: case 4871: case 4872: case 4873: case 4874: case 4875: case 4876: case 4877: case 4878: case 4879: case 4880: return 4194 + c - 4824; case 4882: case 4883: case 4884: case 4885: return 4251 + c - 4882; case 4888: case 4889: case 4890: case 4891: case 4892: case 4893: case 4894: case 4895: case 4896: case 4897: case 4898: case 4899: case 4900: case 4901: case 4902: case 4903: case 4904: case 4905: case 4906: case 4907: case 4908: case 4909: case 4910: case 4911: case 4912: case 4913: case 4914: case 4915: case 4916: case 4917: case 4918: case 4919: case 4920: case 4921: case 4922: case 4923: case 4924: case 4925: case 4926: case 4927: case 4928: case 4929: case 4930: case 4931: case 4932: case 4933: case 4934: case 4935: case 4936: case 4937: case 4938: case 4939: case 4940: case 4941: case 4942: case 4943: case 4944: case 4945: case 4946: case 4947: case 4948: case 4949: case 4950: case 4951: case 4952: case 4953: case 4954: return 4255 + c - 4888; case 4957: case 4958: case 4959: case 4960: case 4961: case 4962: case 4963: case 4964: case 4965: case 4966: case 4967: case 4968: case 4969: case 4970: case 4971: case 4972: case 4973: case 4974: case 4975: case 4976: case 4977: case 4978: case 4979: case 4980: case 4981: case 4982: case 4983: case 4984: case 4985: case 4986: case 4987: case 4988: return 4322 + c - 4957; case 4992: case 4993: case 4994: case 4995: case 4996: case 4997: case 4998: case 4999: case 5000: case 5001: case 5002: case 5003: case 5004: case 5005: case 5006: case 5007: case 5008: case 5009: case 5010: case 5011: case 5012: case 5013: case 5014: case 5015: case 5016: case 5017: return 4354 + c - 4992; case 5024: case 5025: case 5026: case 5027: case 5028: case 5029: case 5030: case 5031: case 5032: case 5033: case 5034: case 5035: case 5036: case 5037: case 5038: case 5039: case 5040: case 5041: case 5042: case 5043: case 5044: case 5045: case 5046: case 5047: case 5048: case 5049: case 5050: case 5051: case 5052: case 5053: case 5054: case 5055: case 5056: case 5057: case 5058: case 5059: case 5060: case 5061: case 5062: case 5063: case 5064: case 5065: case 5066: case 5067: case 5068: case 5069: case 5070: case 5071: case 5072: case 5073: case 5074: case 5075: case 5076: case 5077: case 5078: case 5079: case 5080: case 5081: case 5082: case 5083: case 5084: case 5085: case 5086: case 5087: case 5088: case 5089: case 5090: case 5091: case 5092: case 5093: case 5094: case 5095: case 5096: case 5097: case 5098: case 5099: case 5100: case 5101: case 5102: case 5103: case 5104: case 5105: case 5106: case 5107: case 5108: case 5109: return 4380 + c - 5024; case 5112: case 5113: case 5114: case 5115: case 5116: case 5117: return 4466 + c - 5112; case 5120: case 5121: case 5122: case 5123: case 5124: case 5125: case 5126: case 5127: case 5128: case 5129: case 5130: case 5131: case 5132: case 5133: case 5134: case 5135: case 5136: case 5137: case 5138: case 5139: case 5140: case 5141: case 5142: case 5143: case 5144: case 5145: case 5146: case 5147: case 5148: case 5149: case 5150: case 5151: case 5152: case 5153: case 5154: case 5155: case 5156: case 5157: case 5158: case 5159: case 5160: case 5161: case 5162: case 5163: case 5164: case 5165: case 5166: case 5167: case 5168: case 5169: case 5170: case 5171: case 5172: case 5173: case 5174: case 5175: case 5176: case 5177: case 5178: case 5179: case 5180: case 5181: case 5182: case 5183: case 5184: case 5185: case 5186: case 5187: case 5188: case 5189: case 5190: case 5191: case 5192: case 5193: case 5194: case 5195: case 5196: case 5197: case 5198: case 5199: case 5200: case 5201: case 5202: case 5203: case 5204: case 5205: case 5206: case 5207: case 5208: case 5209: case 5210: case 5211: case 5212: case 5213: case 5214: case 5215: case 5216: case 5217: case 5218: case 5219: case 5220: case 5221: case 5222: case 5223: case 5224: case 5225: case 5226: case 5227: case 5228: case 5229: case 5230: case 5231: case 5232: case 5233: case 5234: case 5235: case 5236: case 5237: case 5238: case 5239: case 5240: case 5241: case 5242: case 5243: case 5244: case 5245: case 5246: case 5247: case 5248: case 5249: case 5250: case 5251: case 5252: case 5253: case 5254: case 5255: case 5256: case 5257: case 5258: case 5259: case 5260: case 5261: case 5262: case 5263: case 5264: case 5265: case 5266: case 5267: case 5268: case 5269: case 5270: case 5271: case 5272: case 5273: case 5274: case 5275: case 5276: case 5277: case 5278: case 5279: case 5280: case 5281: case 5282: case 5283: case 5284: case 5285: case 5286: case 5287: case 5288: case 5289: case 5290: case 5291: case 5292: case 5293: case 5294: case 5295: case 5296: case 5297: case 5298: case 5299: case 5300: case 5301: case 5302: case 5303: case 5304: case 5305: case 5306: case 5307: case 5308: case 5309: case 5310: case 5311: case 5312: case 5313: case 5314: case 5315: case 5316: case 5317: case 5318: case 5319: case 5320: case 5321: case 5322: case 5323: case 5324: case 5325: case 5326: case 5327: case 5328: case 5329: case 5330: case 5331: case 5332: case 5333: case 5334: case 5335: case 5336: case 5337: case 5338: case 5339: case 5340: case 5341: case 5342: case 5343: case 5344: case 5345: case 5346: case 5347: case 5348: case 5349: case 5350: case 5351: case 5352: case 5353: case 5354: case 5355: case 5356: case 5357: case 5358: case 5359: case 5360: case 5361: case 5362: case 5363: case 5364: case 5365: case 5366: case 5367: case 5368: case 5369: case 5370: case 5371: case 5372: case 5373: case 5374: case 5375: case 5376: case 5377: case 5378: case 5379: case 5380: case 5381: case 5382: case 5383: case 5384: case 5385: case 5386: case 5387: case 5388: case 5389: case 5390: case 5391: case 5392: case 5393: case 5394: case 5395: case 5396: case 5397: case 5398: case 5399: case 5400: case 5401: case 5402: case 5403: case 5404: case 5405: case 5406: case 5407: case 5408: case 5409: case 5410: case 5411: case 5412: case 5413: case 5414: case 5415: case 5416: case 5417: case 5418: case 5419: case 5420: case 5421: case 5422: case 5423: case 5424: case 5425: case 5426: case 5427: case 5428: case 5429: case 5430: case 5431: case 5432: case 5433: case 5434: case 5435: case 5436: case 5437: case 5438: case 5439: case 5440: case 5441: case 5442: case 5443: case 5444: case 5445: case 5446: case 5447: case 5448: case 5449: case 5450: case 5451: case 5452: case 5453: case 5454: case 5455: case 5456: case 5457: case 5458: case 5459: case 5460: case 5461: case 5462: case 5463: case 5464: case 5465: case 5466: case 5467: case 5468: case 5469: case 5470: case 5471: case 5472: case 5473: case 5474: case 5475: case 5476: case 5477: case 5478: case 5479: case 5480: case 5481: case 5482: case 5483: case 5484: case 5485: case 5486: case 5487: case 5488: case 5489: case 5490: case 5491: case 5492: case 5493: case 5494: case 5495: case 5496: case 5497: case 5498: case 5499: case 5500: case 5501: case 5502: case 5503: case 5504: case 5505: case 5506: case 5507: case 5508: case 5509: case 5510: case 5511: case 5512: case 5513: case 5514: case 5515: case 5516: case 5517: case 5518: case 5519: case 5520: case 5521: case 5522: case 5523: case 5524: case 5525: case 5526: case 5527: case 5528: case 5529: case 5530: case 5531: case 5532: case 5533: case 5534: case 5535: case 5536: case 5537: case 5538: case 5539: case 5540: case 5541: case 5542: case 5543: case 5544: case 5545: case 5546: case 5547: case 5548: case 5549: case 5550: case 5551: case 5552: case 5553: case 5554: case 5555: case 5556: case 5557: case 5558: case 5559: case 5560: case 5561: case 5562: case 5563: case 5564: case 5565: case 5566: case 5567: case 5568: case 5569: case 5570: case 5571: case 5572: case 5573: case 5574: case 5575: case 5576: case 5577: case 5578: case 5579: case 5580: case 5581: case 5582: case 5583: case 5584: case 5585: case 5586: case 5587: case 5588: case 5589: case 5590: case 5591: case 5592: case 5593: case 5594: case 5595: case 5596: case 5597: case 5598: case 5599: case 5600: case 5601: case 5602: case 5603: case 5604: case 5605: case 5606: case 5607: case 5608: case 5609: case 5610: case 5611: case 5612: case 5613: case 5614: case 5615: case 5616: case 5617: case 5618: case 5619: case 5620: case 5621: case 5622: case 5623: case 5624: case 5625: case 5626: case 5627: case 5628: case 5629: case 5630: case 5631: case 5632: case 5633: case 5634: case 5635: case 5636: case 5637: case 5638: case 5639: case 5640: case 5641: case 5642: case 5643: case 5644: case 5645: case 5646: case 5647: case 5648: case 5649: case 5650: case 5651: case 5652: case 5653: case 5654: case 5655: case 5656: case 5657: case 5658: case 5659: case 5660: case 5661: case 5662: case 5663: case 5664: case 5665: case 5666: case 5667: case 5668: case 5669: case 5670: case 5671: case 5672: case 5673: case 5674: case 5675: case 5676: case 5677: case 5678: case 5679: case 5680: case 5681: case 5682: case 5683: case 5684: case 5685: case 5686: case 5687: case 5688: case 5689: case 5690: case 5691: case 5692: case 5693: case 5694: case 5695: case 5696: case 5697: case 5698: case 5699: case 5700: case 5701: case 5702: case 5703: case 5704: case 5705: case 5706: case 5707: case 5708: case 5709: case 5710: case 5711: case 5712: case 5713: case 5714: case 5715: case 5716: case 5717: case 5718: case 5719: case 5720: case 5721: case 5722: case 5723: case 5724: case 5725: case 5726: case 5727: case 5728: case 5729: case 5730: case 5731: case 5732: case 5733: case 5734: case 5735: case 5736: case 5737: case 5738: case 5739: case 5740: case 5741: case 5742: case 5743: case 5744: case 5745: case 5746: case 5747: case 5748: case 5749: case 5750: case 5751: case 5752: case 5753: case 5754: case 5755: case 5756: case 5757: case 5758: case 5759: case 5760: case 5761: case 5762: case 5763: case 5764: case 5765: case 5766: case 5767: case 5768: case 5769: case 5770: case 5771: case 5772: case 5773: case 5774: case 5775: case 5776: case 5777: case 5778: case 5779: case 5780: case 5781: case 5782: case 5783: case 5784: case 5785: case 5786: case 5787: case 5788: return 4472 + c - 5120; case 5792: case 5793: case 5794: case 5795: case 5796: case 5797: case 5798: case 5799: case 5800: case 5801: case 5802: case 5803: case 5804: case 5805: case 5806: case 5807: case 5808: case 5809: case 5810: case 5811: case 5812: case 5813: case 5814: case 5815: case 5816: case 5817: case 5818: case 5819: case 5820: case 5821: case 5822: case 5823: case 5824: case 5825: case 5826: case 5827: case 5828: case 5829: case 5830: case 5831: case 5832: case 5833: case 5834: case 5835: case 5836: case 5837: case 5838: case 5839: case 5840: case 5841: case 5842: case 5843: case 5844: case 5845: case 5846: case 5847: case 5848: case 5849: case 5850: case 5851: case 5852: case 5853: case 5854: case 5855: case 5856: case 5857: case 5858: case 5859: case 5860: case 5861: case 5862: case 5863: case 5864: case 5865: case 5866: case 5867: case 5868: case 5869: case 5870: case 5871: case 5872: case 5873: case 5874: case 5875: case 5876: case 5877: case 5878: case 5879: case 5880: return 5141 + c - 5792; case 5888: case 5889: case 5890: case 5891: case 5892: case 5893: case 5894: case 5895: case 5896: case 5897: case 5898: case 5899: case 5900: return 5230 + c - 5888; case 5902: case 5903: case 5904: case 5905: case 5906: case 5907: case 5908: return 5243 + c - 5902; case 5920: case 5921: case 5922: case 5923: case 5924: case 5925: case 5926: case 5927: case 5928: case 5929: case 5930: case 5931: case 5932: case 5933: case 5934: case 5935: case 5936: case 5937: case 5938: case 5939: case 5940: case 5941: case 5942: return 5250 + c - 5920; case 5952: case 5953: case 5954: case 5955: case 5956: case 5957: case 5958: case 5959: case 5960: case 5961: case 5962: case 5963: case 5964: case 5965: case 5966: case 5967: case 5968: case 5969: case 5970: case 5971: return 5273 + c - 5952; case 5984: case 5985: case 5986: case 5987: case 5988: case 5989: case 5990: case 5991: case 5992: case 5993: case 5994: case 5995: case 5996: return 5293 + c - 5984; case 5998: case 5999: case 6000: return 5306 + c - 5998; case 6002: case 6003: return 5309 + c - 6002; case 6016: case 6017: case 6018: case 6019: case 6020: case 6021: case 6022: case 6023: case 6024: case 6025: case 6026: case 6027: case 6028: case 6029: case 6030: case 6031: case 6032: case 6033: case 6034: case 6035: case 6036: case 6037: case 6038: case 6039: case 6040: case 6041: case 6042: case 6043: case 6044: case 6045: case 6046: case 6047: case 6048: case 6049: case 6050: case 6051: case 6052: case 6053: case 6054: case 6055: case 6056: case 6057: case 6058: case 6059: case 6060: case 6061: case 6062: case 6063: case 6064: case 6065: case 6066: case 6067: case 6068: case 6069: case 6070: case 6071: case 6072: case 6073: case 6074: case 6075: case 6076: case 6077: case 6078: case 6079: case 6080: case 6081: case 6082: case 6083: case 6084: case 6085: case 6086: case 6087: case 6088: case 6089: case 6090: case 6091: case 6092: case 6093: case 6094: case 6095: case 6096: case 6097: case 6098: case 6099: case 6100: case 6101: case 6102: case 6103: case 6104: case 6105: case 6106: case 6107: case 6108: case 6109: return 5311 + c - 6016; case 6112: case 6113: case 6114: case 6115: case 6116: case 6117: case 6118: case 6119: case 6120: case 6121: return 5405 + c - 6112; case 6128: case 6129: case 6130: case 6131: case 6132: case 6133: case 6134: case 6135: case 6136: case 6137: return 5415 + c - 6128; case 6144: case 6145: case 6146: case 6147: case 6148: case 6149: case 6150: case 6151: case 6152: case 6153: case 6154: case 6155: case 6156: case 6157: case 6158: return 5425 + c - 6144; case 6160: case 6161: case 6162: case 6163: case 6164: case 6165: case 6166: case 6167: case 6168: case 6169: return 5440 + c - 6160; case 6176: case 6177: case 6178: case 6179: case 6180: case 6181: case 6182: case 6183: case 6184: case 6185: case 6186: case 6187: case 6188: case 6189: case 6190: case 6191: case 6192: case 6193: case 6194: case 6195: case 6196: case 6197: case 6198: case 6199: case 6200: case 6201: case 6202: case 6203: case 6204: case 6205: case 6206: case 6207: case 6208: case 6209: case 6210: case 6211: case 6212: case 6213: case 6214: case 6215: case 6216: case 6217: case 6218: case 6219: case 6220: case 6221: case 6222: case 6223: case 6224: case 6225: case 6226: case 6227: case 6228: case 6229: case 6230: case 6231: case 6232: case 6233: case 6234: case 6235: case 6236: case 6237: case 6238: case 6239: case 6240: case 6241: case 6242: case 6243: case 6244: case 6245: case 6246: case 6247: case 6248: case 6249: case 6250: case 6251: case 6252: case 6253: case 6254: case 6255: case 6256: case 6257: case 6258: case 6259: case 6260: case 6261: case 6262: case 6263: case 6264: return 5450 + c - 6176; case 6272: case 6273: case 6274: case 6275: case 6276: case 6277: case 6278: case 6279: case 6280: case 6281: case 6282: case 6283: case 6284: case 6285: case 6286: case 6287: case 6288: case 6289: case 6290: case 6291: case 6292: case 6293: case 6294: case 6295: case 6296: case 6297: case 6298: case 6299: case 6300: case 6301: case 6302: case 6303: case 6304: case 6305: case 6306: case 6307: case 6308: case 6309: case 6310: case 6311: case 6312: case 6313: case 6314: return 5539 + c - 6272; case 6320: case 6321: case 6322: case 6323: case 6324: case 6325: case 6326: case 6327: case 6328: case 6329: case 6330: case 6331: case 6332: case 6333: case 6334: case 6335: case 6336: case 6337: case 6338: case 6339: case 6340: case 6341: case 6342: case 6343: case 6344: case 6345: case 6346: case 6347: case 6348: case 6349: case 6350: case 6351: case 6352: case 6353: case 6354: case 6355: case 6356: case 6357: case 6358: case 6359: case 6360: case 6361: case 6362: case 6363: case 6364: case 6365: case 6366: case 6367: case 6368: case 6369: case 6370: case 6371: case 6372: case 6373: case 6374: case 6375: case 6376: case 6377: case 6378: case 6379: case 6380: case 6381: case 6382: case 6383: case 6384: case 6385: case 6386: case 6387: case 6388: case 6389: return 5582 + c - 6320; case 6400: case 6401: case 6402: case 6403: case 6404: case 6405: case 6406: case 6407: case 6408: case 6409: case 6410: case 6411: case 6412: case 6413: case 6414: case 6415: case 6416: case 6417: case 6418: case 6419: case 6420: case 6421: case 6422: case 6423: case 6424: case 6425: case 6426: case 6427: case 6428: case 6429: case 6430: return 5652 + c - 6400; case 6432: case 6433: case 6434: case 6435: case 6436: case 6437: case 6438: case 6439: case 6440: case 6441: case 6442: case 6443: return 5683 + c - 6432; case 6448: case 6449: case 6450: case 6451: case 6452: case 6453: case 6454: case 6455: case 6456: case 6457: case 6458: case 6459: return 5695 + c - 6448; case 6464: return 5707; case 6468: case 6469: case 6470: case 6471: case 6472: case 6473: case 6474: case 6475: case 6476: case 6477: case 6478: case 6479: case 6480: case 6481: case 6482: case 6483: case 6484: case 6485: case 6486: case 6487: case 6488: case 6489: case 6490: case 6491: case 6492: case 6493: case 6494: case 6495: case 6496: case 6497: case 6498: case 6499: case 6500: case 6501: case 6502: case 6503: case 6504: case 6505: case 6506: case 6507: case 6508: case 6509: return 5708 + c - 6468; case 6512: case 6513: case 6514: case 6515: case 6516: return 5750 + c - 6512; case 6528: case 6529: case 6530: case 6531: case 6532: case 6533: case 6534: case 6535: case 6536: case 6537: case 6538: case 6539: case 6540: case 6541: case 6542: case 6543: case 6544: case 6545: case 6546: case 6547: case 6548: case 6549: case 6550: case 6551: case 6552: case 6553: case 6554: case 6555: case 6556: case 6557: case 6558: case 6559: case 6560: case 6561: case 6562: case 6563: case 6564: case 6565: case 6566: case 6567: case 6568: case 6569: case 6570: case 6571: return 5755 + c - 6528; case 6576: case 6577: case 6578: case 6579: case 6580: case 6581: case 6582: case 6583: case 6584: case 6585: case 6586: case 6587: case 6588: case 6589: case 6590: case 6591: case 6592: case 6593: case 6594: case 6595: case 6596: case 6597: case 6598: case 6599: case 6600: case 6601: return 5799 + c - 6576; case 6608: case 6609: case 6610: case 6611: case 6612: case 6613: case 6614: case 6615: case 6616: case 6617: case 6618: return 5825 + c - 6608; case 6622: case 6623: case 6624: case 6625: case 6626: case 6627: case 6628: case 6629: case 6630: case 6631: case 6632: case 6633: case 6634: case 6635: case 6636: case 6637: case 6638: case 6639: case 6640: case 6641: case 6642: case 6643: case 6644: case 6645: case 6646: case 6647: case 6648: case 6649: case 6650: case 6651: case 6652: case 6653: case 6654: case 6655: case 6656: case 6657: case 6658: case 6659: case 6660: case 6661: case 6662: case 6663: case 6664: case 6665: case 6666: case 6667: case 6668: case 6669: case 6670: case 6671: case 6672: case 6673: case 6674: case 6675: case 6676: case 6677: case 6678: case 6679: case 6680: case 6681: case 6682: case 6683: return 5836 + c - 6622; case 6686: case 6687: case 6688: case 6689: case 6690: case 6691: case 6692: case 6693: case 6694: case 6695: case 6696: case 6697: case 6698: case 6699: case 6700: case 6701: case 6702: case 6703: case 6704: case 6705: case 6706: case 6707: case 6708: case 6709: case 6710: case 6711: case 6712: case 6713: case 6714: case 6715: case 6716: case 6717: case 6718: case 6719: case 6720: case 6721: case 6722: case 6723: case 6724: case 6725: case 6726: case 6727: case 6728: case 6729: case 6730: case 6731: case 6732: case 6733: case 6734: case 6735: case 6736: case 6737: case 6738: case 6739: case 6740: case 6741: case 6742: case 6743: case 6744: case 6745: case 6746: case 6747: case 6748: case 6749: case 6750: return 5898 + c - 6686; case 6752: case 6753: case 6754: case 6755: case 6756: case 6757: case 6758: case 6759: case 6760: case 6761: case 6762: case 6763: case 6764: case 6765: case 6766: case 6767: case 6768: case 6769: case 6770: case 6771: case 6772: case 6773: case 6774: case 6775: case 6776: case 6777: case 6778: case 6779: case 6780: return 5963 + c - 6752; case 6783: case 6784: case 6785: case 6786: case 6787: case 6788: case 6789: case 6790: case 6791: case 6792: case 6793: return 5992 + c - 6783; case 6800: case 6801: case 6802: case 6803: case 6804: case 6805: case 6806: case 6807: case 6808: case 6809: return 6003 + c - 6800; case 6816: case 6817: case 6818: case 6819: case 6820: case 6821: case 6822: case 6823: case 6824: case 6825: case 6826: case 6827: case 6828: case 6829: return 6013 + c - 6816; case 6832: case 6833: case 6834: case 6835: case 6836: case 6837: case 6838: case 6839: case 6840: case 6841: case 6842: case 6843: case 6844: case 6845: case 6846: return 6027 + c - 6832; case 6912: case 6913: case 6914: case 6915: case 6916: case 6917: case 6918: case 6919: case 6920: case 6921: case 6922: case 6923: case 6924: case 6925: case 6926: case 6927: case 6928: case 6929: case 6930: case 6931: case 6932: case 6933: case 6934: case 6935: case 6936: case 6937: case 6938: case 6939: case 6940: case 6941: case 6942: case 6943: case 6944: case 6945: case 6946: case 6947: case 6948: case 6949: case 6950: case 6951: case 6952: case 6953: case 6954: case 6955: case 6956: case 6957: case 6958: case 6959: case 6960: case 6961: case 6962: case 6963: case 6964: case 6965: case 6966: case 6967: case 6968: case 6969: case 6970: case 6971: case 6972: case 6973: case 6974: case 6975: case 6976: case 6977: case 6978: case 6979: case 6980: case 6981: case 6982: case 6983: case 6984: case 6985: case 6986: case 6987: return 6042 + c - 6912; case 6992: case 6993: case 6994: case 6995: case 6996: case 6997: case 6998: case 6999: case 7000: case 7001: case 7002: case 7003: case 7004: case 7005: case 7006: case 7007: case 7008: case 7009: case 7010: case 7011: case 7012: case 7013: case 7014: case 7015: case 7016: case 7017: case 7018: case 7019: case 7020: case 7021: case 7022: case 7023: case 7024: case 7025: case 7026: case 7027: case 7028: case 7029: case 7030: case 7031: case 7032: case 7033: case 7034: case 7035: case 7036: return 6118 + c - 6992; case 7040: case 7041: case 7042: case 7043: case 7044: case 7045: case 7046: case 7047: case 7048: case 7049: case 7050: case 7051: case 7052: case 7053: case 7054: case 7055: case 7056: case 7057: case 7058: case 7059: case 7060: case 7061: case 7062: case 7063: case 7064: case 7065: case 7066: case 7067: case 7068: case 7069: case 7070: case 7071: case 7072: case 7073: case 7074: case 7075: case 7076: case 7077: case 7078: case 7079: case 7080: case 7081: case 7082: case 7083: case 7084: case 7085: case 7086: case 7087: case 7088: case 7089: case 7090: case 7091: case 7092: case 7093: case 7094: case 7095: case 7096: case 7097: case 7098: case 7099: case 7100: case 7101: case 7102: case 7103: case 7104: case 7105: case 7106: case 7107: case 7108: case 7109: case 7110: case 7111: case 7112: case 7113: case 7114: case 7115: case 7116: case 7117: case 7118: case 7119: case 7120: case 7121: case 7122: case 7123: case 7124: case 7125: case 7126: case 7127: case 7128: case 7129: case 7130: case 7131: case 7132: case 7133: case 7134: case 7135: case 7136: case 7137: case 7138: case 7139: case 7140: case 7141: case 7142: case 7143: case 7144: case 7145: case 7146: case 7147: case 7148: case 7149: case 7150: case 7151: case 7152: case 7153: case 7154: case 7155: return 6163 + c - 7040; case 7164: case 7165: case 7166: case 7167: case 7168: case 7169: case 7170: case 7171: case 7172: case 7173: case 7174: case 7175: case 7176: case 7177: case 7178: case 7179: case 7180: case 7181: case 7182: case 7183: case 7184: case 7185: case 7186: case 7187: case 7188: case 7189: case 7190: case 7191: case 7192: case 7193: case 7194: case 7195: case 7196: case 7197: case 7198: case 7199: case 7200: case 7201: case 7202: case 7203: case 7204: case 7205: case 7206: case 7207: case 7208: case 7209: case 7210: case 7211: case 7212: case 7213: case 7214: case 7215: case 7216: case 7217: case 7218: case 7219: case 7220: case 7221: case 7222: case 7223: return 6279 + c - 7164; case 7227: case 7228: case 7229: case 7230: case 7231: case 7232: case 7233: case 7234: case 7235: case 7236: case 7237: case 7238: case 7239: case 7240: case 7241: return 6339 + c - 7227; case 7245: case 7246: case 7247: case 7248: case 7249: case 7250: case 7251: case 7252: case 7253: case 7254: case 7255: case 7256: case 7257: case 7258: case 7259: case 7260: case 7261: case 7262: case 7263: case 7264: case 7265: case 7266: case 7267: case 7268: case 7269: case 7270: case 7271: case 7272: case 7273: case 7274: case 7275: case 7276: case 7277: case 7278: case 7279: case 7280: case 7281: case 7282: case 7283: case 7284: case 7285: case 7286: case 7287: case 7288: case 7289: case 7290: case 7291: case 7292: case 7293: case 7294: case 7295: case 7296: case 7297: case 7298: case 7299: case 7300: case 7301: case 7302: case 7303: case 7304: return 6354 + c - 7245; case 7312: case 7313: case 7314: case 7315: case 7316: case 7317: case 7318: case 7319: case 7320: case 7321: case 7322: case 7323: case 7324: case 7325: case 7326: case 7327: case 7328: case 7329: case 7330: case 7331: case 7332: case 7333: case 7334: case 7335: case 7336: case 7337: case 7338: case 7339: case 7340: case 7341: case 7342: case 7343: case 7344: case 7345: case 7346: case 7347: case 7348: case 7349: case 7350: case 7351: case 7352: case 7353: case 7354: return 6414 + c - 7312; case 7357: case 7358: case 7359: case 7360: case 7361: case 7362: case 7363: case 7364: case 7365: case 7366: case 7367: return 6457 + c - 7357; case 7376: case 7377: case 7378: case 7379: case 7380: case 7381: case 7382: case 7383: case 7384: case 7385: case 7386: case 7387: case 7388: case 7389: case 7390: case 7391: case 7392: case 7393: case 7394: case 7395: case 7396: case 7397: case 7398: case 7399: case 7400: case 7401: case 7402: case 7403: case 7404: case 7405: case 7406: case 7407: case 7408: case 7409: case 7410: case 7411: case 7412: case 7413: case 7414: case 7415: case 7416: case 7417: case 7418: return 6468 + c - 7376; case 7424: case 7425: case 7426: case 7427: case 7428: case 7429: case 7430: case 7431: case 7432: case 7433: case 7434: case 7435: case 7436: case 7437: case 7438: case 7439: case 7440: case 7441: case 7442: case 7443: case 7444: case 7445: case 7446: case 7447: case 7448: case 7449: case 7450: case 7451: case 7452: case 7453: case 7454: case 7455: case 7456: case 7457: case 7458: case 7459: case 7460: case 7461: case 7462: case 7463: case 7464: case 7465: case 7466: case 7467: case 7468: case 7469: case 7470: case 7471: case 7472: case 7473: case 7474: case 7475: case 7476: case 7477: case 7478: case 7479: case 7480: case 7481: case 7482: case 7483: case 7484: case 7485: case 7486: case 7487: case 7488: case 7489: case 7490: case 7491: case 7492: case 7493: case 7494: case 7495: case 7496: case 7497: case 7498: case 7499: case 7500: case 7501: case 7502: case 7503: case 7504: case 7505: case 7506: case 7507: case 7508: case 7509: case 7510: case 7511: case 7512: case 7513: case 7514: case 7515: case 7516: case 7517: case 7518: case 7519: case 7520: case 7521: case 7522: case 7523: case 7524: case 7525: case 7526: case 7527: case 7528: case 7529: case 7530: case 7531: case 7532: case 7533: case 7534: case 7535: case 7536: case 7537: case 7538: case 7539: case 7540: case 7541: case 7542: case 7543: case 7544: case 7545: case 7546: case 7547: case 7548: case 7549: case 7550: case 7551: case 7552: case 7553: case 7554: case 7555: case 7556: case 7557: case 7558: case 7559: case 7560: case 7561: case 7562: case 7563: case 7564: case 7565: case 7566: case 7567: case 7568: case 7569: case 7570: case 7571: case 7572: case 7573: case 7574: case 7575: case 7576: case 7577: case 7578: case 7579: case 7580: case 7581: case 7582: case 7583: case 7584: case 7585: case 7586: case 7587: case 7588: case 7589: case 7590: case 7591: case 7592: case 7593: case 7594: case 7595: case 7596: case 7597: case 7598: case 7599: case 7600: case 7601: case 7602: case 7603: case 7604: case 7605: case 7606: case 7607: case 7608: case 7609: case 7610: case 7611: case 7612: case 7613: case 7614: case 7615: case 7616: case 7617: case 7618: case 7619: case 7620: case 7621: case 7622: case 7623: case 7624: case 7625: case 7626: case 7627: case 7628: case 7629: case 7630: case 7631: case 7632: case 7633: case 7634: case 7635: case 7636: case 7637: case 7638: case 7639: case 7640: case 7641: case 7642: case 7643: case 7644: case 7645: case 7646: case 7647: case 7648: case 7649: case 7650: case 7651: case 7652: case 7653: case 7654: case 7655: case 7656: case 7657: case 7658: case 7659: case 7660: case 7661: case 7662: case 7663: case 7664: case 7665: case 7666: case 7667: case 7668: case 7669: case 7670: case 7671: case 7672: case 7673: return 6511 + c - 7424; case 7675: case 7676: case 7677: case 7678: case 7679: case 7680: case 7681: case 7682: case 7683: case 7684: case 7685: case 7686: case 7687: case 7688: case 7689: case 7690: case 7691: case 7692: case 7693: case 7694: case 7695: case 7696: case 7697: case 7698: case 7699: case 7700: case 7701: case 7702: case 7703: case 7704: case 7705: case 7706: case 7707: case 7708: case 7709: case 7710: case 7711: case 7712: case 7713: case 7714: case 7715: case 7716: case 7717: case 7718: case 7719: case 7720: case 7721: case 7722: case 7723: case 7724: case 7725: case 7726: case 7727: case 7728: case 7729: case 7730: case 7731: case 7732: case 7733: case 7734: case 7735: case 7736: case 7737: case 7738: case 7739: case 7740: case 7741: case 7742: case 7743: case 7744: case 7745: case 7746: case 7747: case 7748: case 7749: case 7750: case 7751: case 7752: case 7753: case 7754: case 7755: case 7756: case 7757: case 7758: case 7759: case 7760: case 7761: case 7762: case 7763: case 7764: case 7765: case 7766: case 7767: case 7768: case 7769: case 7770: case 7771: case 7772: case 7773: case 7774: case 7775: case 7776: case 7777: case 7778: case 7779: case 7780: case 7781: case 7782: case 7783: case 7784: case 7785: case 7786: case 7787: case 7788: case 7789: case 7790: case 7791: case 7792: case 7793: case 7794: case 7795: case 7796: case 7797: case 7798: case 7799: case 7800: case 7801: case 7802: case 7803: case 7804: case 7805: case 7806: case 7807: case 7808: case 7809: case 7810: case 7811: case 7812: case 7813: case 7814: case 7815: case 7816: case 7817: case 7818: case 7819: case 7820: case 7821: case 7822: case 7823: case 7824: case 7825: case 7826: case 7827: case 7828: case 7829: case 7830: case 7831: case 7832: case 7833: case 7834: case 7835: case 7836: case 7837: case 7838: case 7839: case 7840: case 7841: case 7842: case 7843: case 7844: case 7845: case 7846: case 7847: case 7848: case 7849: case 7850: case 7851: case 7852: case 7853: case 7854: case 7855: case 7856: case 7857: case 7858: case 7859: case 7860: case 7861: case 7862: case 7863: case 7864: case 7865: case 7866: case 7867: case 7868: case 7869: case 7870: case 7871: case 7872: case 7873: case 7874: case 7875: case 7876: case 7877: case 7878: case 7879: case 7880: case 7881: case 7882: case 7883: case 7884: case 7885: case 7886: case 7887: case 7888: case 7889: case 7890: case 7891: case 7892: case 7893: case 7894: case 7895: case 7896: case 7897: case 7898: case 7899: case 7900: case 7901: case 7902: case 7903: case 7904: case 7905: case 7906: case 7907: case 7908: case 7909: case 7910: case 7911: case 7912: case 7913: case 7914: case 7915: case 7916: case 7917: case 7918: case 7919: case 7920: case 7921: case 7922: case 7923: case 7924: case 7925: case 7926: case 7927: case 7928: case 7929: case 7930: case 7931: case 7932: case 7933: case 7934: case 7935: case 7936: case 7937: case 7938: case 7939: case 7940: case 7941: case 7942: case 7943: case 7944: case 7945: case 7946: case 7947: case 7948: case 7949: case 7950: case 7951: case 7952: case 7953: case 7954: case 7955: case 7956: case 7957: return 6761 + c - 7675; case 7960: case 7961: case 7962: case 7963: case 7964: case 7965: return 7044 + c - 7960; case 7968: case 7969: case 7970: case 7971: case 7972: case 7973: case 7974: case 7975: case 7976: case 7977: case 7978: case 7979: case 7980: case 7981: case 7982: case 7983: case 7984: case 7985: case 7986: case 7987: case 7988: case 7989: case 7990: case 7991: case 7992: case 7993: case 7994: case 7995: case 7996: case 7997: case 7998: case 7999: case 8000: case 8001: case 8002: case 8003: case 8004: case 8005: return 7050 + c - 7968; case 8008: case 8009: case 8010: case 8011: case 8012: case 8013: return 7088 + c - 8008; case 8016: case 8017: case 8018: case 8019: case 8020: case 8021: case 8022: case 8023: return 7094 + c - 8016; case 8025: return 7102; case 8027: return 7103; case 8029: return 7104; case 8031: case 8032: case 8033: case 8034: case 8035: case 8036: case 8037: case 8038: case 8039: case 8040: case 8041: case 8042: case 8043: case 8044: case 8045: case 8046: case 8047: case 8048: case 8049: case 8050: case 8051: case 8052: case 8053: case 8054: case 8055: case 8056: case 8057: case 8058: case 8059: case 8060: case 8061: return 7105 + c - 8031; case 8064: case 8065: case 8066: case 8067: case 8068: case 8069: case 8070: case 8071: case 8072: case 8073: case 8074: case 8075: case 8076: case 8077: case 8078: case 8079: case 8080: case 8081: case 8082: case 8083: case 8084: case 8085: case 8086: case 8087: case 8088: case 8089: case 8090: case 8091: case 8092: case 8093: case 8094: case 8095: case 8096: case 8097: case 8098: case 8099: case 8100: case 8101: case 8102: case 8103: case 8104: case 8105: case 8106: case 8107: case 8108: case 8109: case 8110: case 8111: case 8112: case 8113: case 8114: case 8115: case 8116: return 7136 + c - 8064; case 8118: case 8119: case 8120: case 8121: case 8122: case 8123: case 8124: case 8125: case 8126: case 8127: case 8128: case 8129: case 8130: case 8131: case 8132: return 7189 + c - 8118; case 8134: case 8135: case 8136: case 8137: case 8138: case 8139: case 8140: case 8141: case 8142: case 8143: case 8144: case 8145: case 8146: case 8147: return 7204 + c - 8134; case 8150: case 8151: case 8152: case 8153: case 8154: case 8155: return 7218 + c - 8150; case 8157: case 8158: case 8159: case 8160: case 8161: case 8162: case 8163: case 8164: case 8165: case 8166: case 8167: case 8168: case 8169: case 8170: case 8171: case 8172: case 8173: case 8174: case 8175: return 7224 + c - 8157; case 8178: case 8179: case 8180: return 7243 + c - 8178; case 8182: case 8183: case 8184: case 8185: case 8186: case 8187: case 8188: case 8189: case 8190: return 7246 + c - 8182; case 8192: case 8193: case 8194: case 8195: case 8196: case 8197: case 8198: case 8199: case 8200: case 8201: case 8202: case 8203: case 8204: case 8205: case 8206: case 8207: case 8208: case 8209: case 8210: case 8211: case 8212: case 8213: case 8214: case 8215: case 8216: case 8217: case 8218: case 8219: case 8220: case 8221: case 8222: case 8223: case 8224: case 8225: case 8226: case 8227: case 8228: case 8229: case 8230: case 8231: case 8232: case 8233: case 8234: case 8235: case 8236: case 8237: case 8238: case 8239: case 8240: case 8241: case 8242: case 8243: case 8244: case 8245: case 8246: case 8247: case 8248: case 8249: case 8250: case 8251: case 8252: case 8253: case 8254: case 8255: case 8256: case 8257: case 8258: case 8259: case 8260: case 8261: case 8262: case 8263: case 8264: case 8265: case 8266: case 8267: case 8268: case 8269: case 8270: case 8271: case 8272: case 8273: case 8274: case 8275: case 8276: case 8277: case 8278: case 8279: case 8280: case 8281: case 8282: case 8283: case 8284: case 8285: case 8286: case 8287: case 8288: case 8289: case 8290: case 8291: case 8292: return 7255 + c - 8192; case 8294: case 8295: case 8296: case 8297: case 8298: case 8299: case 8300: case 8301: case 8302: case 8303: case 8304: case 8305: return 7356 + c - 8294; case 8308: case 8309: case 8310: case 8311: case 8312: case 8313: case 8314: case 8315: case 8316: case 8317: case 8318: case 8319: case 8320: case 8321: case 8322: case 8323: case 8324: case 8325: case 8326: case 8327: case 8328: case 8329: case 8330: case 8331: case 8332: case 8333: case 8334: return 7368 + c - 8308; case 8336: case 8337: case 8338: case 8339: case 8340: case 8341: case 8342: case 8343: case 8344: case 8345: case 8346: case 8347: case 8348: return 7395 + c - 8336; case 8352: case 8353: case 8354: case 8355: case 8356: case 8357: case 8358: case 8359: case 8360: case 8361: case 8362: case 8363: case 8364: case 8365: case 8366: case 8367: case 8368: case 8369: case 8370: case 8371: case 8372: case 8373: case 8374: case 8375: case 8376: case 8377: case 8378: case 8379: case 8380: case 8381: case 8382: case 8383: return 7408 + c - 8352; case 8400: case 8401: case 8402: case 8403: case 8404: case 8405: case 8406: case 8407: case 8408: case 8409: case 8410: case 8411: case 8412: case 8413: case 8414: case 8415: case 8416: case 8417: case 8418: case 8419: case 8420: case 8421: case 8422: case 8423: case 8424: case 8425: case 8426: case 8427: case 8428: case 8429: case 8430: case 8431: case 8432: return 7440 + c - 8400; case 8448: case 8449: case 8450: case 8451: case 8452: case 8453: case 8454: case 8455: case 8456: case 8457: case 8458: case 8459: case 8460: case 8461: case 8462: case 8463: case 8464: case 8465: case 8466: case 8467: case 8468: case 8469: case 8470: case 8471: case 8472: case 8473: case 8474: case 8475: case 8476: case 8477: case 8478: case 8479: case 8480: case 8481: case 8482: case 8483: case 8484: case 8485: case 8486: case 8487: case 8488: case 8489: case 8490: case 8491: case 8492: case 8493: case 8494: case 8495: case 8496: case 8497: case 8498: case 8499: case 8500: case 8501: case 8502: case 8503: case 8504: case 8505: case 8506: case 8507: case 8508: case 8509: case 8510: case 8511: case 8512: case 8513: case 8514: case 8515: case 8516: case 8517: case 8518: case 8519: case 8520: case 8521: case 8522: case 8523: case 8524: case 8525: case 8526: case 8527: case 8528: case 8529: case 8530: case 8531: case 8532: case 8533: case 8534: case 8535: case 8536: case 8537: case 8538: case 8539: case 8540: case 8541: case 8542: case 8543: case 8544: case 8545: case 8546: case 8547: case 8548: case 8549: case 8550: case 8551: case 8552: case 8553: case 8554: case 8555: case 8556: case 8557: case 8558: case 8559: case 8560: case 8561: case 8562: case 8563: case 8564: case 8565: case 8566: case 8567: case 8568: case 8569: case 8570: case 8571: case 8572: case 8573: case 8574: case 8575: case 8576: case 8577: case 8578: case 8579: case 8580: case 8581: case 8582: case 8583: case 8584: case 8585: case 8586: case 8587: return 7473 + c - 8448; case 8592: case 8593: case 8594: case 8595: case 8596: case 8597: case 8598: case 8599: case 8600: case 8601: case 8602: case 8603: case 8604: case 8605: case 8606: case 8607: case 8608: case 8609: case 8610: case 8611: case 8612: case 8613: case 8614: case 8615: case 8616: case 8617: case 8618: case 8619: case 8620: case 8621: case 8622: case 8623: case 8624: case 8625: case 8626: case 8627: case 8628: case 8629: case 8630: case 8631: case 8632: case 8633: case 8634: case 8635: case 8636: case 8637: case 8638: case 8639: case 8640: case 8641: case 8642: case 8643: case 8644: case 8645: case 8646: case 8647: case 8648: case 8649: case 8650: case 8651: case 8652: case 8653: case 8654: case 8655: case 8656: case 8657: case 8658: case 8659: case 8660: case 8661: case 8662: case 8663: case 8664: case 8665: case 8666: case 8667: case 8668: case 8669: case 8670: case 8671: case 8672: case 8673: case 8674: case 8675: case 8676: case 8677: case 8678: case 8679: case 8680: case 8681: case 8682: case 8683: case 8684: case 8685: case 8686: case 8687: case 8688: case 8689: case 8690: case 8691: case 8692: case 8693: case 8694: case 8695: case 8696: case 8697: case 8698: case 8699: case 8700: case 8701: case 8702: case 8703: case 8704: case 8705: case 8706: case 8707: case 8708: case 8709: case 8710: case 8711: case 8712: case 8713: case 8714: case 8715: case 8716: case 8717: case 8718: case 8719: case 8720: case 8721: case 8722: case 8723: case 8724: case 8725: case 8726: case 8727: case 8728: case 8729: case 8730: case 8731: case 8732: case 8733: case 8734: case 8735: case 8736: case 8737: case 8738: case 8739: case 8740: case 8741: case 8742: case 8743: case 8744: case 8745: case 8746: case 8747: case 8748: case 8749: case 8750: case 8751: case 8752: case 8753: case 8754: case 8755: case 8756: case 8757: case 8758: case 8759: case 8760: case 8761: case 8762: case 8763: case 8764: case 8765: case 8766: case 8767: case 8768: case 8769: case 8770: case 8771: case 8772: case 8773: case 8774: case 8775: case 8776: case 8777: case 8778: case 8779: case 8780: case 8781: case 8782: case 8783: case 8784: case 8785: case 8786: case 8787: case 8788: case 8789: case 8790: case 8791: case 8792: case 8793: case 8794: case 8795: case 8796: case 8797: case 8798: case 8799: case 8800: case 8801: case 8802: case 8803: case 8804: case 8805: case 8806: case 8807: case 8808: case 8809: case 8810: case 8811: case 8812: case 8813: case 8814: case 8815: case 8816: case 8817: case 8818: case 8819: case 8820: case 8821: case 8822: case 8823: case 8824: case 8825: case 8826: case 8827: case 8828: case 8829: case 8830: case 8831: case 8832: case 8833: case 8834: case 8835: case 8836: case 8837: case 8838: case 8839: case 8840: case 8841: case 8842: case 8843: case 8844: case 8845: case 8846: case 8847: case 8848: case 8849: case 8850: case 8851: case 8852: case 8853: case 8854: case 8855: case 8856: case 8857: case 8858: case 8859: case 8860: case 8861: case 8862: case 8863: case 8864: case 8865: case 8866: case 8867: case 8868: case 8869: case 8870: case 8871: case 8872: case 8873: case 8874: case 8875: case 8876: case 8877: case 8878: case 8879: case 8880: case 8881: case 8882: case 8883: case 8884: case 8885: case 8886: case 8887: case 8888: case 8889: case 8890: case 8891: case 8892: case 8893: case 8894: case 8895: case 8896: case 8897: case 8898: case 8899: case 8900: case 8901: case 8902: case 8903: case 8904: case 8905: case 8906: case 8907: case 8908: case 8909: case 8910: case 8911: case 8912: case 8913: case 8914: case 8915: case 8916: case 8917: case 8918: case 8919: case 8920: case 8921: case 8922: case 8923: case 8924: case 8925: case 8926: case 8927: case 8928: case 8929: case 8930: case 8931: case 8932: case 8933: case 8934: case 8935: case 8936: case 8937: case 8938: case 8939: case 8940: case 8941: case 8942: case 8943: case 8944: case 8945: case 8946: case 8947: case 8948: case 8949: case 8950: case 8951: case 8952: case 8953: case 8954: case 8955: case 8956: case 8957: case 8958: case 8959: case 8960: case 8961: case 8962: case 8963: case 8964: case 8965: case 8966: case 8967: case 8968: case 8969: case 8970: case 8971: case 8972: case 8973: case 8974: case 8975: case 8976: case 8977: case 8978: case 8979: case 8980: case 8981: case 8982: case 8983: case 8984: case 8985: case 8986: case 8987: case 8988: case 8989: case 8990: case 8991: case 8992: case 8993: case 8994: case 8995: case 8996: case 8997: case 8998: case 8999: case 9000: case 9001: case 9002: case 9003: case 9004: case 9005: case 9006: case 9007: case 9008: case 9009: case 9010: case 9011: case 9012: case 9013: case 9014: case 9015: case 9016: case 9017: case 9018: case 9019: case 9020: case 9021: case 9022: case 9023: case 9024: case 9025: case 9026: case 9027: case 9028: case 9029: case 9030: case 9031: case 9032: case 9033: case 9034: case 9035: case 9036: case 9037: case 9038: case 9039: case 9040: case 9041: case 9042: case 9043: case 9044: case 9045: case 9046: case 9047: case 9048: case 9049: case 9050: case 9051: case 9052: case 9053: case 9054: case 9055: case 9056: case 9057: case 9058: case 9059: case 9060: case 9061: case 9062: case 9063: case 9064: case 9065: case 9066: case 9067: case 9068: case 9069: case 9070: case 9071: case 9072: case 9073: case 9074: case 9075: case 9076: case 9077: case 9078: case 9079: case 9080: case 9081: case 9082: case 9083: case 9084: case 9085: case 9086: case 9087: case 9088: case 9089: case 9090: case 9091: case 9092: case 9093: case 9094: case 9095: case 9096: case 9097: case 9098: case 9099: case 9100: case 9101: case 9102: case 9103: case 9104: case 9105: case 9106: case 9107: case 9108: case 9109: case 9110: case 9111: case 9112: case 9113: case 9114: case 9115: case 9116: case 9117: case 9118: case 9119: case 9120: case 9121: case 9122: case 9123: case 9124: case 9125: case 9126: case 9127: case 9128: case 9129: case 9130: case 9131: case 9132: case 9133: case 9134: case 9135: case 9136: case 9137: case 9138: case 9139: case 9140: case 9141: case 9142: case 9143: case 9144: case 9145: case 9146: case 9147: case 9148: case 9149: case 9150: case 9151: case 9152: case 9153: case 9154: case 9155: case 9156: case 9157: case 9158: case 9159: case 9160: case 9161: case 9162: case 9163: case 9164: case 9165: case 9166: case 9167: case 9168: case 9169: case 9170: case 9171: case 9172: case 9173: case 9174: case 9175: case 9176: case 9177: case 9178: case 9179: case 9180: case 9181: case 9182: case 9183: case 9184: case 9185: case 9186: case 9187: case 9188: case 9189: case 9190: case 9191: case 9192: case 9193: case 9194: case 9195: case 9196: case 9197: case 9198: case 9199: case 9200: case 9201: case 9202: case 9203: case 9204: case 9205: case 9206: case 9207: case 9208: case 9209: case 9210: case 9211: case 9212: case 9213: case 9214: case 9215: case 9216: case 9217: case 9218: case 9219: case 9220: case 9221: case 9222: case 9223: case 9224: case 9225: case 9226: case 9227: case 9228: case 9229: case 9230: case 9231: case 9232: case 9233: case 9234: case 9235: case 9236: case 9237: case 9238: case 9239: case 9240: case 9241: case 9242: case 9243: case 9244: case 9245: case 9246: case 9247: case 9248: case 9249: case 9250: case 9251: case 9252: case 9253: case 9254: return 7613 + c - 8592; case 9280: case 9281: case 9282: case 9283: case 9284: case 9285: case 9286: case 9287: case 9288: case 9289: case 9290: return 8276 + c - 9280; case 9312: case 9313: case 9314: case 9315: case 9316: case 9317: case 9318: case 9319: case 9320: case 9321: case 9322: case 9323: case 9324: case 9325: case 9326: case 9327: case 9328: case 9329: case 9330: case 9331: case 9332: case 9333: case 9334: case 9335: case 9336: case 9337: case 9338: case 9339: case 9340: case 9341: case 9342: case 9343: case 9344: case 9345: case 9346: case 9347: case 9348: case 9349: case 9350: case 9351: case 9352: case 9353: case 9354: case 9355: case 9356: case 9357: case 9358: case 9359: case 9360: case 9361: case 9362: case 9363: case 9364: case 9365: case 9366: case 9367: case 9368: case 9369: case 9370: case 9371: case 9372: case 9373: case 9374: case 9375: case 9376: case 9377: case 9378: case 9379: case 9380: case 9381: case 9382: case 9383: case 9384: case 9385: case 9386: case 9387: case 9388: case 9389: case 9390: case 9391: case 9392: case 9393: case 9394: case 9395: case 9396: case 9397: case 9398: case 9399: case 9400: case 9401: case 9402: case 9403: case 9404: case 9405: case 9406: case 9407: case 9408: case 9409: case 9410: case 9411: case 9412: case 9413: case 9414: case 9415: case 9416: case 9417: case 9418: case 9419: case 9420: case 9421: case 9422: case 9423: case 9424: case 9425: case 9426: case 9427: case 9428: case 9429: case 9430: case 9431: case 9432: case 9433: case 9434: case 9435: case 9436: case 9437: case 9438: case 9439: case 9440: case 9441: case 9442: case 9443: case 9444: case 9445: case 9446: case 9447: case 9448: case 9449: case 9450: case 9451: case 9452: case 9453: case 9454: case 9455: case 9456: case 9457: case 9458: case 9459: case 9460: case 9461: case 9462: case 9463: case 9464: case 9465: case 9466: case 9467: case 9468: case 9469: case 9470: case 9471: case 9472: case 9473: case 9474: case 9475: case 9476: case 9477: case 9478: case 9479: case 9480: case 9481: case 9482: case 9483: case 9484: case 9485: case 9486: case 9487: case 9488: case 9489: case 9490: case 9491: case 9492: case 9493: case 9494: case 9495: case 9496: case 9497: case 9498: case 9499: case 9500: case 9501: case 9502: case 9503: case 9504: case 9505: case 9506: case 9507: case 9508: case 9509: case 9510: case 9511: case 9512: case 9513: case 9514: case 9515: case 9516: case 9517: case 9518: case 9519: case 9520: case 9521: case 9522: case 9523: case 9524: case 9525: case 9526: case 9527: case 9528: case 9529: case 9530: case 9531: case 9532: case 9533: case 9534: case 9535: case 9536: case 9537: case 9538: case 9539: case 9540: case 9541: case 9542: case 9543: case 9544: case 9545: case 9546: case 9547: case 9548: case 9549: case 9550: case 9551: case 9552: case 9553: case 9554: case 9555: case 9556: case 9557: case 9558: case 9559: case 9560: case 9561: case 9562: case 9563: case 9564: case 9565: case 9566: case 9567: case 9568: case 9569: case 9570: case 9571: case 9572: case 9573: case 9574: case 9575: case 9576: case 9577: case 9578: case 9579: case 9580: case 9581: case 9582: case 9583: case 9584: case 9585: case 9586: case 9587: case 9588: case 9589: case 9590: case 9591: case 9592: case 9593: case 9594: case 9595: case 9596: case 9597: case 9598: case 9599: case 9600: case 9601: case 9602: case 9603: case 9604: case 9605: case 9606: case 9607: case 9608: case 9609: case 9610: case 9611: case 9612: case 9613: case 9614: case 9615: case 9616: case 9617: case 9618: case 9619: case 9620: case 9621: case 9622: case 9623: case 9624: case 9625: case 9626: case 9627: case 9628: case 9629: case 9630: case 9631: case 9632: case 9633: case 9634: case 9635: case 9636: case 9637: case 9638: case 9639: case 9640: case 9641: case 9642: case 9643: case 9644: case 9645: case 9646: case 9647: case 9648: case 9649: case 9650: case 9651: case 9652: case 9653: case 9654: case 9655: case 9656: case 9657: case 9658: case 9659: case 9660: case 9661: case 9662: case 9663: case 9664: case 9665: case 9666: case 9667: case 9668: case 9669: case 9670: case 9671: case 9672: case 9673: case 9674: case 9675: case 9676: case 9677: case 9678: case 9679: case 9680: case 9681: case 9682: case 9683: case 9684: case 9685: case 9686: case 9687: case 9688: case 9689: case 9690: case 9691: case 9692: case 9693: case 9694: case 9695: case 9696: case 9697: case 9698: case 9699: case 9700: case 9701: case 9702: case 9703: case 9704: case 9705: case 9706: case 9707: case 9708: case 9709: case 9710: case 9711: case 9712: case 9713: case 9714: case 9715: case 9716: case 9717: case 9718: case 9719: case 9720: case 9721: case 9722: case 9723: case 9724: case 9725: case 9726: case 9727: case 9728: case 9729: case 9730: case 9731: case 9732: case 9733: case 9734: case 9735: case 9736: case 9737: case 9738: case 9739: case 9740: case 9741: case 9742: case 9743: case 9744: case 9745: case 9746: case 9747: case 9748: case 9749: case 9750: case 9751: case 9752: case 9753: case 9754: case 9755: case 9756: case 9757: case 9758: case 9759: case 9760: case 9761: case 9762: case 9763: case 9764: case 9765: case 9766: case 9767: case 9768: case 9769: case 9770: case 9771: case 9772: case 9773: case 9774: case 9775: case 9776: case 9777: case 9778: case 9779: case 9780: case 9781: case 9782: case 9783: case 9784: case 9785: case 9786: case 9787: case 9788: case 9789: case 9790: case 9791: case 9792: case 9793: case 9794: case 9795: case 9796: case 9797: case 9798: case 9799: case 9800: case 9801: case 9802: case 9803: case 9804: case 9805: case 9806: case 9807: case 9808: case 9809: case 9810: case 9811: case 9812: case 9813: case 9814: case 9815: case 9816: case 9817: case 9818: case 9819: case 9820: case 9821: case 9822: case 9823: case 9824: case 9825: case 9826: case 9827: case 9828: case 9829: case 9830: case 9831: case 9832: case 9833: case 9834: case 9835: case 9836: case 9837: case 9838: case 9839: case 9840: case 9841: case 9842: case 9843: case 9844: case 9845: case 9846: case 9847: case 9848: case 9849: case 9850: case 9851: case 9852: case 9853: case 9854: case 9855: case 9856: case 9857: case 9858: case 9859: case 9860: case 9861: case 9862: case 9863: case 9864: case 9865: case 9866: case 9867: case 9868: case 9869: case 9870: case 9871: case 9872: case 9873: case 9874: case 9875: case 9876: case 9877: case 9878: case 9879: case 9880: case 9881: case 9882: case 9883: case 9884: case 9885: case 9886: case 9887: case 9888: case 9889: case 9890: case 9891: case 9892: case 9893: case 9894: case 9895: case 9896: case 9897: case 9898: case 9899: case 9900: case 9901: case 9902: case 9903: case 9904: case 9905: case 9906: case 9907: case 9908: case 9909: case 9910: case 9911: case 9912: case 9913: case 9914: case 9915: case 9916: case 9917: case 9918: case 9919: case 9920: case 9921: case 9922: case 9923: case 9924: case 9925: case 9926: case 9927: case 9928: case 9929: case 9930: case 9931: case 9932: case 9933: case 9934: case 9935: case 9936: case 9937: case 9938: case 9939: case 9940: case 9941: case 9942: case 9943: case 9944: case 9945: case 9946: case 9947: case 9948: case 9949: case 9950: case 9951: case 9952: case 9953: case 9954: case 9955: case 9956: case 9957: case 9958: case 9959: case 9960: case 9961: case 9962: case 9963: case 9964: case 9965: case 9966: case 9967: case 9968: case 9969: case 9970: case 9971: case 9972: case 9973: case 9974: case 9975: case 9976: case 9977: case 9978: case 9979: case 9980: case 9981: case 9982: case 9983: case 9984: case 9985: case 9986: case 9987: case 9988: case 9989: case 9990: case 9991: case 9992: case 9993: case 9994: case 9995: case 9996: case 9997: case 9998: case 9999: case 10000: case 10001: case 10002: case 10003: case 10004: case 10005: case 10006: case 10007: case 10008: case 10009: case 10010: case 10011: case 10012: case 10013: case 10014: case 10015: case 10016: case 10017: case 10018: case 10019: case 10020: case 10021: case 10022: case 10023: case 10024: case 10025: case 10026: case 10027: case 10028: case 10029: case 10030: case 10031: case 10032: case 10033: case 10034: case 10035: case 10036: case 10037: case 10038: case 10039: case 10040: case 10041: case 10042: case 10043: case 10044: case 10045: case 10046: case 10047: case 10048: case 10049: case 10050: case 10051: case 10052: case 10053: case 10054: case 10055: case 10056: case 10057: case 10058: case 10059: case 10060: case 10061: case 10062: case 10063: case 10064: case 10065: case 10066: case 10067: case 10068: case 10069: case 10070: case 10071: case 10072: case 10073: case 10074: case 10075: case 10076: case 10077: case 10078: case 10079: case 10080: case 10081: case 10082: case 10083: case 10084: case 10085: case 10086: case 10087: case 10088: case 10089: case 10090: case 10091: case 10092: case 10093: case 10094: case 10095: case 10096: case 10097: case 10098: case 10099: case 10100: case 10101: case 10102: case 10103: case 10104: case 10105: case 10106: case 10107: case 10108: case 10109: case 10110: case 10111: case 10112: case 10113: case 10114: case 10115: case 10116: case 10117: case 10118: case 10119: case 10120: case 10121: case 10122: case 10123: case 10124: case 10125: case 10126: case 10127: case 10128: case 10129: case 10130: case 10131: case 10132: case 10133: case 10134: case 10135: case 10136: case 10137: case 10138: case 10139: case 10140: case 10141: case 10142: case 10143: case 10144: case 10145: case 10146: case 10147: case 10148: case 10149: case 10150: case 10151: case 10152: case 10153: case 10154: case 10155: case 10156: case 10157: case 10158: case 10159: case 10160: case 10161: case 10162: case 10163: case 10164: case 10165: case 10166: case 10167: case 10168: case 10169: case 10170: case 10171: case 10172: case 10173: case 10174: case 10175: case 10176: case 10177: case 10178: case 10179: case 10180: case 10181: case 10182: case 10183: case 10184: case 10185: case 10186: case 10187: case 10188: case 10189: case 10190: case 10191: case 10192: case 10193: case 10194: case 10195: case 10196: case 10197: case 10198: case 10199: case 10200: case 10201: case 10202: case 10203: case 10204: case 10205: case 10206: case 10207: case 10208: case 10209: case 10210: case 10211: case 10212: case 10213: case 10214: case 10215: case 10216: case 10217: case 10218: case 10219: case 10220: case 10221: case 10222: case 10223: case 10224: case 10225: case 10226: case 10227: case 10228: case 10229: case 10230: case 10231: case 10232: case 10233: case 10234: case 10235: case 10236: case 10237: case 10238: case 10239: case 10240: case 10241: case 10242: case 10243: case 10244: case 10245: case 10246: case 10247: case 10248: case 10249: case 10250: case 10251: case 10252: case 10253: case 10254: case 10255: case 10256: case 10257: case 10258: case 10259: case 10260: case 10261: case 10262: case 10263: case 10264: case 10265: case 10266: case 10267: case 10268: case 10269: case 10270: case 10271: case 10272: case 10273: case 10274: case 10275: case 10276: case 10277: case 10278: case 10279: case 10280: case 10281: case 10282: case 10283: case 10284: case 10285: case 10286: case 10287: case 10288: case 10289: case 10290: case 10291: case 10292: case 10293: case 10294: case 10295: case 10296: case 10297: case 10298: case 10299: case 10300: case 10301: case 10302: case 10303: case 10304: case 10305: case 10306: case 10307: case 10308: case 10309: case 10310: case 10311: case 10312: case 10313: case 10314: case 10315: case 10316: case 10317: case 10318: case 10319: case 10320: case 10321: case 10322: case 10323: case 10324: case 10325: case 10326: case 10327: case 10328: case 10329: case 10330: case 10331: case 10332: case 10333: case 10334: case 10335: case 10336: case 10337: case 10338: case 10339: case 10340: case 10341: case 10342: case 10343: case 10344: case 10345: case 10346: case 10347: case 10348: case 10349: case 10350: case 10351: case 10352: case 10353: case 10354: case 10355: case 10356: case 10357: case 10358: case 10359: case 10360: case 10361: case 10362: case 10363: case 10364: case 10365: case 10366: case 10367: case 10368: case 10369: case 10370: case 10371: case 10372: case 10373: case 10374: case 10375: case 10376: case 10377: case 10378: case 10379: case 10380: case 10381: case 10382: case 10383: case 10384: case 10385: case 10386: case 10387: case 10388: case 10389: case 10390: case 10391: case 10392: case 10393: case 10394: case 10395: case 10396: case 10397: case 10398: case 10399: case 10400: case 10401: case 10402: case 10403: case 10404: case 10405: case 10406: case 10407: case 10408: case 10409: case 10410: case 10411: case 10412: case 10413: case 10414: case 10415: case 10416: case 10417: case 10418: case 10419: case 10420: case 10421: case 10422: case 10423: case 10424: case 10425: case 10426: case 10427: case 10428: case 10429: case 10430: case 10431: case 10432: case 10433: case 10434: case 10435: case 10436: case 10437: case 10438: case 10439: case 10440: case 10441: case 10442: case 10443: case 10444: case 10445: case 10446: case 10447: case 10448: case 10449: case 10450: case 10451: case 10452: case 10453: case 10454: case 10455: case 10456: case 10457: case 10458: case 10459: case 10460: case 10461: case 10462: case 10463: case 10464: case 10465: case 10466: case 10467: case 10468: case 10469: case 10470: case 10471: case 10472: case 10473: case 10474: case 10475: case 10476: case 10477: case 10478: case 10479: case 10480: case 10481: case 10482: case 10483: case 10484: case 10485: case 10486: case 10487: case 10488: case 10489: case 10490: case 10491: case 10492: case 10493: case 10494: case 10495: case 10496: case 10497: case 10498: case 10499: case 10500: case 10501: case 10502: case 10503: case 10504: case 10505: case 10506: case 10507: case 10508: case 10509: case 10510: case 10511: case 10512: case 10513: case 10514: case 10515: case 10516: case 10517: case 10518: case 10519: case 10520: case 10521: case 10522: case 10523: case 10524: case 10525: case 10526: case 10527: case 10528: case 10529: case 10530: case 10531: case 10532: case 10533: case 10534: case 10535: case 10536: case 10537: case 10538: case 10539: case 10540: case 10541: case 10542: case 10543: case 10544: case 10545: case 10546: case 10547: case 10548: case 10549: case 10550: case 10551: case 10552: case 10553: case 10554: case 10555: case 10556: case 10557: case 10558: case 10559: case 10560: case 10561: case 10562: case 10563: case 10564: case 10565: case 10566: case 10567: case 10568: case 10569: case 10570: case 10571: case 10572: case 10573: case 10574: case 10575: case 10576: case 10577: case 10578: case 10579: case 10580: case 10581: case 10582: case 10583: case 10584: case 10585: case 10586: case 10587: case 10588: case 10589: case 10590: case 10591: case 10592: case 10593: case 10594: case 10595: case 10596: case 10597: case 10598: case 10599: case 10600: case 10601: case 10602: case 10603: case 10604: case 10605: case 10606: case 10607: case 10608: case 10609: case 10610: case 10611: case 10612: case 10613: case 10614: case 10615: case 10616: case 10617: case 10618: case 10619: case 10620: case 10621: case 10622: case 10623: case 10624: case 10625: case 10626: case 10627: case 10628: case 10629: case 10630: case 10631: case 10632: case 10633: case 10634: case 10635: case 10636: case 10637: case 10638: case 10639: case 10640: case 10641: case 10642: case 10643: case 10644: case 10645: case 10646: case 10647: case 10648: case 10649: case 10650: case 10651: case 10652: case 10653: case 10654: case 10655: case 10656: case 10657: case 10658: case 10659: case 10660: case 10661: case 10662: case 10663: case 10664: case 10665: case 10666: case 10667: case 10668: case 10669: case 10670: case 10671: case 10672: case 10673: case 10674: case 10675: case 10676: case 10677: case 10678: case 10679: case 10680: case 10681: case 10682: case 10683: case 10684: case 10685: case 10686: case 10687: case 10688: case 10689: case 10690: case 10691: case 10692: case 10693: case 10694: case 10695: case 10696: case 10697: case 10698: case 10699: case 10700: case 10701: case 10702: case 10703: case 10704: case 10705: case 10706: case 10707: case 10708: case 10709: case 10710: case 10711: case 10712: case 10713: case 10714: case 10715: case 10716: case 10717: case 10718: case 10719: case 10720: case 10721: case 10722: case 10723: case 10724: case 10725: case 10726: case 10727: case 10728: case 10729: case 10730: case 10731: case 10732: case 10733: case 10734: case 10735: case 10736: case 10737: case 10738: case 10739: case 10740: case 10741: case 10742: case 10743: case 10744: case 10745: case 10746: case 10747: case 10748: case 10749: case 10750: case 10751: case 10752: case 10753: case 10754: case 10755: case 10756: case 10757: case 10758: case 10759: case 10760: case 10761: case 10762: case 10763: case 10764: case 10765: case 10766: case 10767: case 10768: case 10769: case 10770: case 10771: case 10772: case 10773: case 10774: case 10775: case 10776: case 10777: case 10778: case 10779: case 10780: case 10781: case 10782: case 10783: case 10784: case 10785: case 10786: case 10787: case 10788: case 10789: case 10790: case 10791: case 10792: case 10793: case 10794: case 10795: case 10796: case 10797: case 10798: case 10799: case 10800: case 10801: case 10802: case 10803: case 10804: case 10805: case 10806: case 10807: case 10808: case 10809: case 10810: case 10811: case 10812: case 10813: case 10814: case 10815: case 10816: case 10817: case 10818: case 10819: case 10820: case 10821: case 10822: case 10823: case 10824: case 10825: case 10826: case 10827: case 10828: case 10829: case 10830: case 10831: case 10832: case 10833: case 10834: case 10835: case 10836: case 10837: case 10838: case 10839: case 10840: case 10841: case 10842: case 10843: case 10844: case 10845: case 10846: case 10847: case 10848: case 10849: case 10850: case 10851: case 10852: case 10853: case 10854: case 10855: case 10856: case 10857: case 10858: case 10859: case 10860: case 10861: case 10862: case 10863: case 10864: case 10865: case 10866: case 10867: case 10868: case 10869: case 10870: case 10871: case 10872: case 10873: case 10874: case 10875: case 10876: case 10877: case 10878: case 10879: case 10880: case 10881: case 10882: case 10883: case 10884: case 10885: case 10886: case 10887: case 10888: case 10889: case 10890: case 10891: case 10892: case 10893: case 10894: case 10895: case 10896: case 10897: case 10898: case 10899: case 10900: case 10901: case 10902: case 10903: case 10904: case 10905: case 10906: case 10907: case 10908: case 10909: case 10910: case 10911: case 10912: case 10913: case 10914: case 10915: case 10916: case 10917: case 10918: case 10919: case 10920: case 10921: case 10922: case 10923: case 10924: case 10925: case 10926: case 10927: case 10928: case 10929: case 10930: case 10931: case 10932: case 10933: case 10934: case 10935: case 10936: case 10937: case 10938: case 10939: case 10940: case 10941: case 10942: case 10943: case 10944: case 10945: case 10946: case 10947: case 10948: case 10949: case 10950: case 10951: case 10952: case 10953: case 10954: case 10955: case 10956: case 10957: case 10958: case 10959: case 10960: case 10961: case 10962: case 10963: case 10964: case 10965: case 10966: case 10967: case 10968: case 10969: case 10970: case 10971: case 10972: case 10973: case 10974: case 10975: case 10976: case 10977: case 10978: case 10979: case 10980: case 10981: case 10982: case 10983: case 10984: case 10985: case 10986: case 10987: case 10988: case 10989: case 10990: case 10991: case 10992: case 10993: case 10994: case 10995: case 10996: case 10997: case 10998: case 10999: case 11000: case 11001: case 11002: case 11003: case 11004: case 11005: case 11006: case 11007: case 11008: case 11009: case 11010: case 11011: case 11012: case 11013: case 11014: case 11015: case 11016: case 11017: case 11018: case 11019: case 11020: case 11021: case 11022: case 11023: case 11024: case 11025: case 11026: case 11027: case 11028: case 11029: case 11030: case 11031: case 11032: case 11033: case 11034: case 11035: case 11036: case 11037: case 11038: case 11039: case 11040: case 11041: case 11042: case 11043: case 11044: case 11045: case 11046: case 11047: case 11048: case 11049: case 11050: case 11051: case 11052: case 11053: case 11054: case 11055: case 11056: case 11057: case 11058: case 11059: case 11060: case 11061: case 11062: case 11063: case 11064: case 11065: case 11066: case 11067: case 11068: case 11069: case 11070: case 11071: case 11072: case 11073: case 11074: case 11075: case 11076: case 11077: case 11078: case 11079: case 11080: case 11081: case 11082: case 11083: case 11084: case 11085: case 11086: case 11087: case 11088: case 11089: case 11090: case 11091: case 11092: case 11093: case 11094: case 11095: case 11096: case 11097: case 11098: case 11099: case 11100: case 11101: case 11102: case 11103: case 11104: case 11105: case 11106: case 11107: case 11108: case 11109: case 11110: case 11111: case 11112: case 11113: case 11114: case 11115: case 11116: case 11117: case 11118: case 11119: case 11120: case 11121: case 11122: case 11123: return 8287 + c - 9312; case 11126: case 11127: case 11128: case 11129: case 11130: case 11131: case 11132: case 11133: case 11134: case 11135: case 11136: case 11137: case 11138: case 11139: case 11140: case 11141: case 11142: case 11143: case 11144: case 11145: case 11146: case 11147: case 11148: case 11149: case 11150: case 11151: case 11152: case 11153: case 11154: case 11155: case 11156: case 11157: return 10099 + c - 11126; case 11160: case 11161: case 11162: case 11163: case 11164: case 11165: case 11166: case 11167: case 11168: case 11169: case 11170: case 11171: case 11172: case 11173: case 11174: case 11175: case 11176: case 11177: case 11178: case 11179: case 11180: case 11181: case 11182: case 11183: case 11184: case 11185: case 11186: case 11187: case 11188: case 11189: case 11190: case 11191: case 11192: case 11193: case 11194: case 11195: case 11196: case 11197: case 11198: case 11199: case 11200: case 11201: case 11202: case 11203: case 11204: case 11205: case 11206: case 11207: case 11208: case 11209: case 11210: case 11211: case 11212: case 11213: case 11214: case 11215: case 11216: case 11217: case 11218: case 11219: case 11220: case 11221: case 11222: case 11223: case 11224: case 11225: case 11226: case 11227: case 11228: case 11229: case 11230: case 11231: case 11232: case 11233: case 11234: case 11235: case 11236: case 11237: case 11238: case 11239: case 11240: case 11241: case 11242: case 11243: case 11244: case 11245: case 11246: case 11247: case 11248: case 11249: case 11250: case 11251: case 11252: case 11253: case 11254: case 11255: case 11256: case 11257: case 11258: case 11259: case 11260: case 11261: case 11262: case 11263: case 11264: case 11265: case 11266: case 11267: case 11268: case 11269: case 11270: case 11271: case 11272: case 11273: case 11274: case 11275: case 11276: case 11277: case 11278: case 11279: case 11280: case 11281: case 11282: case 11283: case 11284: case 11285: case 11286: case 11287: case 11288: case 11289: case 11290: case 11291: case 11292: case 11293: case 11294: case 11295: case 11296: case 11297: case 11298: case 11299: case 11300: case 11301: case 11302: case 11303: case 11304: case 11305: case 11306: case 11307: case 11308: case 11309: case 11310: return 10131 + c - 11160; case 11312: case 11313: case 11314: case 11315: case 11316: case 11317: case 11318: case 11319: case 11320: case 11321: case 11322: case 11323: case 11324: case 11325: case 11326: case 11327: case 11328: case 11329: case 11330: case 11331: case 11332: case 11333: case 11334: case 11335: case 11336: case 11337: case 11338: case 11339: case 11340: case 11341: case 11342: case 11343: case 11344: case 11345: case 11346: case 11347: case 11348: case 11349: case 11350: case 11351: case 11352: case 11353: case 11354: case 11355: case 11356: case 11357: case 11358: return 10282 + c - 11312; case 11360: case 11361: case 11362: case 11363: case 11364: case 11365: case 11366: case 11367: case 11368: case 11369: case 11370: case 11371: case 11372: case 11373: case 11374: case 11375: case 11376: case 11377: case 11378: case 11379: case 11380: case 11381: case 11382: case 11383: case 11384: case 11385: case 11386: case 11387: case 11388: case 11389: case 11390: case 11391: case 11392: case 11393: case 11394: case 11395: case 11396: case 11397: case 11398: case 11399: case 11400: case 11401: case 11402: case 11403: case 11404: case 11405: case 11406: case 11407: case 11408: case 11409: case 11410: case 11411: case 11412: case 11413: case 11414: case 11415: case 11416: case 11417: case 11418: case 11419: case 11420: case 11421: case 11422: case 11423: case 11424: case 11425: case 11426: case 11427: case 11428: case 11429: case 11430: case 11431: case 11432: case 11433: case 11434: case 11435: case 11436: case 11437: case 11438: case 11439: case 11440: case 11441: case 11442: case 11443: case 11444: case 11445: case 11446: case 11447: case 11448: case 11449: case 11450: case 11451: case 11452: case 11453: case 11454: case 11455: case 11456: case 11457: case 11458: case 11459: case 11460: case 11461: case 11462: case 11463: case 11464: case 11465: case 11466: case 11467: case 11468: case 11469: case 11470: case 11471: case 11472: case 11473: case 11474: case 11475: case 11476: case 11477: case 11478: case 11479: case 11480: case 11481: case 11482: case 11483: case 11484: case 11485: case 11486: case 11487: case 11488: case 11489: case 11490: case 11491: case 11492: case 11493: case 11494: case 11495: case 11496: case 11497: case 11498: case 11499: case 11500: case 11501: case 11502: case 11503: case 11504: case 11505: case 11506: case 11507: return 10329 + c - 11360; case 11513: case 11514: case 11515: case 11516: case 11517: case 11518: case 11519: case 11520: case 11521: case 11522: case 11523: case 11524: case 11525: case 11526: case 11527: case 11528: case 11529: case 11530: case 11531: case 11532: case 11533: case 11534: case 11535: case 11536: case 11537: case 11538: case 11539: case 11540: case 11541: case 11542: case 11543: case 11544: case 11545: case 11546: case 11547: case 11548: case 11549: case 11550: case 11551: case 11552: case 11553: case 11554: case 11555: case 11556: case 11557: return 10477 + c - 11513; case 11559: return 10522; case 11565: return 10523; case 11568: case 11569: case 11570: case 11571: case 11572: case 11573: case 11574: case 11575: case 11576: case 11577: case 11578: case 11579: case 11580: case 11581: case 11582: case 11583: case 11584: case 11585: case 11586: case 11587: case 11588: case 11589: case 11590: case 11591: case 11592: case 11593: case 11594: case 11595: case 11596: case 11597: case 11598: case 11599: case 11600: case 11601: case 11602: case 11603: case 11604: case 11605: case 11606: case 11607: case 11608: case 11609: case 11610: case 11611: case 11612: case 11613: case 11614: case 11615: case 11616: case 11617: case 11618: case 11619: case 11620: case 11621: case 11622: case 11623: return 10524 + c - 11568; case 11631: case 11632: return 10580 + c - 11631; case 11647: case 11648: case 11649: case 11650: case 11651: case 11652: case 11653: case 11654: case 11655: case 11656: case 11657: case 11658: case 11659: case 11660: case 11661: case 11662: case 11663: case 11664: case 11665: case 11666: case 11667: case 11668: case 11669: case 11670: return 10582 + c - 11647; case 11680: case 11681: case 11682: case 11683: case 11684: case 11685: case 11686: return 10606 + c - 11680; case 11688: case 11689: case 11690: case 11691: case 11692: case 11693: case 11694: return 10613 + c - 11688; case 11696: case 11697: case 11698: case 11699: case 11700: case 11701: case 11702: return 10620 + c - 11696; case 11704: case 11705: case 11706: case 11707: case 11708: case 11709: case 11710: return 10627 + c - 11704; case 11712: case 11713: case 11714: case 11715: case 11716: case 11717: case 11718: return 10634 + c - 11712; case 11720: case 11721: case 11722: case 11723: case 11724: case 11725: case 11726: return 10641 + c - 11720; case 11728: case 11729: case 11730: case 11731: case 11732: case 11733: case 11734: return 10648 + c - 11728; case 11736: case 11737: case 11738: case 11739: case 11740: case 11741: case 11742: return 10655 + c - 11736; case 11744: case 11745: case 11746: case 11747: case 11748: case 11749: case 11750: case 11751: case 11752: case 11753: case 11754: case 11755: case 11756: case 11757: case 11758: case 11759: case 11760: case 11761: case 11762: case 11763: case 11764: case 11765: case 11766: case 11767: case 11768: case 11769: case 11770: case 11771: case 11772: case 11773: case 11774: case 11775: case 11776: case 11777: case 11778: case 11779: case 11780: case 11781: case 11782: case 11783: case 11784: case 11785: case 11786: case 11787: case 11788: case 11789: case 11790: case 11791: case 11792: case 11793: case 11794: case 11795: case 11796: case 11797: case 11798: case 11799: case 11800: case 11801: case 11802: case 11803: case 11804: case 11805: case 11806: case 11807: case 11808: case 11809: case 11810: case 11811: case 11812: case 11813: case 11814: case 11815: case 11816: case 11817: case 11818: case 11819: case 11820: case 11821: case 11822: case 11823: case 11824: case 11825: case 11826: case 11827: case 11828: case 11829: case 11830: case 11831: case 11832: case 11833: case 11834: case 11835: case 11836: case 11837: case 11838: case 11839: case 11840: case 11841: case 11842: case 11843: case 11844: case 11845: case 11846: case 11847: case 11848: case 11849: case 11850: case 11851: case 11852: case 11853: case 11854: case 11855: return 10662 + c - 11744; case 11904: case 11905: case 11906: case 11907: case 11908: case 11909: case 11910: case 11911: case 11912: case 11913: case 11914: case 11915: case 11916: case 11917: case 11918: case 11919: case 11920: case 11921: case 11922: case 11923: case 11924: case 11925: case 11926: case 11927: case 11928: case 11929: return 10774 + c - 11904; case 11931: case 11932: case 11933: case 11934: case 11935: case 11936: case 11937: case 11938: case 11939: case 11940: case 11941: case 11942: case 11943: case 11944: case 11945: case 11946: case 11947: case 11948: case 11949: case 11950: case 11951: case 11952: case 11953: case 11954: case 11955: case 11956: case 11957: case 11958: case 11959: case 11960: case 11961: case 11962: case 11963: case 11964: case 11965: case 11966: case 11967: case 11968: case 11969: case 11970: case 11971: case 11972: case 11973: case 11974: case 11975: case 11976: case 11977: case 11978: case 11979: case 11980: case 11981: case 11982: case 11983: case 11984: case 11985: case 11986: case 11987: case 11988: case 11989: case 11990: case 11991: case 11992: case 11993: case 11994: case 11995: case 11996: case 11997: case 11998: case 11999: case 12000: case 12001: case 12002: case 12003: case 12004: case 12005: case 12006: case 12007: case 12008: case 12009: case 12010: case 12011: case 12012: case 12013: case 12014: case 12015: case 12016: case 12017: case 12018: case 12019: return 10800 + c - 11931; case 12032: case 12033: case 12034: case 12035: case 12036: case 12037: case 12038: case 12039: case 12040: case 12041: case 12042: case 12043: case 12044: case 12045: case 12046: case 12047: case 12048: case 12049: case 12050: case 12051: case 12052: case 12053: case 12054: case 12055: case 12056: case 12057: case 12058: case 12059: case 12060: case 12061: case 12062: case 12063: case 12064: case 12065: case 12066: case 12067: case 12068: case 12069: case 12070: case 12071: case 12072: case 12073: case 12074: case 12075: case 12076: case 12077: case 12078: case 12079: case 12080: case 12081: case 12082: case 12083: case 12084: case 12085: case 12086: case 12087: case 12088: case 12089: case 12090: case 12091: case 12092: case 12093: case 12094: case 12095: case 12096: case 12097: case 12098: case 12099: case 12100: case 12101: case 12102: case 12103: case 12104: case 12105: case 12106: case 12107: case 12108: case 12109: case 12110: case 12111: case 12112: case 12113: case 12114: case 12115: case 12116: case 12117: case 12118: case 12119: case 12120: case 12121: case 12122: case 12123: case 12124: case 12125: case 12126: case 12127: case 12128: case 12129: case 12130: case 12131: case 12132: case 12133: case 12134: case 12135: case 12136: case 12137: case 12138: case 12139: case 12140: case 12141: case 12142: case 12143: case 12144: case 12145: case 12146: case 12147: case 12148: case 12149: case 12150: case 12151: case 12152: case 12153: case 12154: case 12155: case 12156: case 12157: case 12158: case 12159: case 12160: case 12161: case 12162: case 12163: case 12164: case 12165: case 12166: case 12167: case 12168: case 12169: case 12170: case 12171: case 12172: case 12173: case 12174: case 12175: case 12176: case 12177: case 12178: case 12179: case 12180: case 12181: case 12182: case 12183: case 12184: case 12185: case 12186: case 12187: case 12188: case 12189: case 12190: case 12191: case 12192: case 12193: case 12194: case 12195: case 12196: case 12197: case 12198: case 12199: case 12200: case 12201: case 12202: case 12203: case 12204: case 12205: case 12206: case 12207: case 12208: case 12209: case 12210: case 12211: case 12212: case 12213: case 12214: case 12215: case 12216: case 12217: case 12218: case 12219: case 12220: case 12221: case 12222: case 12223: case 12224: case 12225: case 12226: case 12227: case 12228: case 12229: case 12230: case 12231: case 12232: case 12233: case 12234: case 12235: case 12236: case 12237: case 12238: case 12239: case 12240: case 12241: case 12242: case 12243: case 12244: case 12245: return 10889 + c - 12032; case 12272: case 12273: case 12274: case 12275: case 12276: case 12277: case 12278: case 12279: case 12280: case 12281: case 12282: case 12283: return 11103 + c - 12272; case 12288: case 12289: case 12290: case 12291: case 12292: case 12293: case 12294: case 12295: case 12296: case 12297: case 12298: case 12299: case 12300: case 12301: case 12302: case 12303: case 12304: case 12305: case 12306: case 12307: case 12308: case 12309: case 12310: case 12311: case 12312: case 12313: case 12314: case 12315: case 12316: case 12317: case 12318: case 12319: case 12320: case 12321: case 12322: case 12323: case 12324: case 12325: case 12326: case 12327: case 12328: case 12329: case 12330: case 12331: case 12332: case 12333: case 12334: case 12335: case 12336: case 12337: case 12338: case 12339: case 12340: case 12341: case 12342: case 12343: case 12344: case 12345: case 12346: case 12347: case 12348: case 12349: case 12350: case 12351: return 11115 + c - 12288; case 12353: case 12354: case 12355: case 12356: case 12357: case 12358: case 12359: case 12360: case 12361: case 12362: case 12363: case 12364: case 12365: case 12366: case 12367: case 12368: case 12369: case 12370: case 12371: case 12372: case 12373: case 12374: case 12375: case 12376: case 12377: case 12378: case 12379: case 12380: case 12381: case 12382: case 12383: case 12384: case 12385: case 12386: case 12387: case 12388: case 12389: case 12390: case 12391: case 12392: case 12393: case 12394: case 12395: case 12396: case 12397: case 12398: case 12399: case 12400: case 12401: case 12402: case 12403: case 12404: case 12405: case 12406: case 12407: case 12408: case 12409: case 12410: case 12411: case 12412: case 12413: case 12414: case 12415: case 12416: case 12417: case 12418: case 12419: case 12420: case 12421: case 12422: case 12423: case 12424: case 12425: case 12426: case 12427: case 12428: case 12429: case 12430: case 12431: case 12432: case 12433: case 12434: case 12435: case 12436: case 12437: case 12438: return 11179 + c - 12353; case 12441: case 12442: case 12443: case 12444: case 12445: case 12446: case 12447: case 12448: case 12449: case 12450: case 12451: case 12452: case 12453: case 12454: case 12455: case 12456: case 12457: case 12458: case 12459: case 12460: case 12461: case 12462: case 12463: case 12464: case 12465: case 12466: case 12467: case 12468: case 12469: case 12470: case 12471: case 12472: case 12473: case 12474: case 12475: case 12476: case 12477: case 12478: case 12479: case 12480: case 12481: case 12482: case 12483: case 12484: case 12485: case 12486: case 12487: case 12488: case 12489: case 12490: case 12491: case 12492: case 12493: case 12494: case 12495: case 12496: case 12497: case 12498: case 12499: case 12500: case 12501: case 12502: case 12503: case 12504: case 12505: case 12506: case 12507: case 12508: case 12509: case 12510: case 12511: case 12512: case 12513: case 12514: case 12515: case 12516: case 12517: case 12518: case 12519: case 12520: case 12521: case 12522: case 12523: case 12524: case 12525: case 12526: case 12527: case 12528: case 12529: case 12530: case 12531: case 12532: case 12533: case 12534: case 12535: case 12536: case 12537: case 12538: case 12539: case 12540: case 12541: case 12542: case 12543: return 11265 + c - 12441; case 12549: case 12550: case 12551: case 12552: case 12553: case 12554: case 12555: case 12556: case 12557: case 12558: case 12559: case 12560: case 12561: case 12562: case 12563: case 12564: case 12565: case 12566: case 12567: case 12568: case 12569: case 12570: case 12571: case 12572: case 12573: case 12574: case 12575: case 12576: case 12577: case 12578: case 12579: case 12580: case 12581: case 12582: case 12583: case 12584: case 12585: case 12586: case 12587: case 12588: case 12589: case 12590: case 12591: return 11368 + c - 12549; case 12593: case 12594: case 12595: case 12596: case 12597: case 12598: case 12599: case 12600: case 12601: case 12602: case 12603: case 12604: case 12605: case 12606: case 12607: case 12608: case 12609: case 12610: case 12611: case 12612: case 12613: case 12614: case 12615: case 12616: case 12617: case 12618: case 12619: case 12620: case 12621: case 12622: case 12623: case 12624: case 12625: case 12626: case 12627: case 12628: case 12629: case 12630: case 12631: case 12632: case 12633: case 12634: case 12635: case 12636: case 12637: case 12638: case 12639: case 12640: case 12641: case 12642: case 12643: case 12644: case 12645: case 12646: case 12647: case 12648: case 12649: case 12650: case 12651: case 12652: case 12653: case 12654: case 12655: case 12656: case 12657: case 12658: case 12659: case 12660: case 12661: case 12662: case 12663: case 12664: case 12665: case 12666: case 12667: case 12668: case 12669: case 12670: case 12671: case 12672: case 12673: case 12674: case 12675: case 12676: case 12677: case 12678: case 12679: case 12680: case 12681: case 12682: case 12683: case 12684: case 12685: case 12686: return 11411 + c - 12593; case 12688: case 12689: case 12690: case 12691: case 12692: case 12693: case 12694: case 12695: case 12696: case 12697: case 12698: case 12699: case 12700: case 12701: case 12702: case 12703: case 12704: case 12705: case 12706: case 12707: case 12708: case 12709: case 12710: case 12711: case 12712: case 12713: case 12714: case 12715: case 12716: case 12717: case 12718: case 12719: case 12720: case 12721: case 12722: case 12723: case 12724: case 12725: case 12726: case 12727: case 12728: case 12729: case 12730: return 11505 + c - 12688; case 12736: case 12737: case 12738: case 12739: case 12740: case 12741: case 12742: case 12743: case 12744: case 12745: case 12746: case 12747: case 12748: case 12749: case 12750: case 12751: case 12752: case 12753: case 12754: case 12755: case 12756: case 12757: case 12758: case 12759: case 12760: case 12761: case 12762: case 12763: case 12764: case 12765: case 12766: case 12767: case 12768: case 12769: case 12770: case 12771: return 11548 + c - 12736; case 12784: case 12785: case 12786: case 12787: case 12788: case 12789: case 12790: case 12791: case 12792: case 12793: case 12794: case 12795: case 12796: case 12797: case 12798: case 12799: case 12800: case 12801: case 12802: case 12803: case 12804: case 12805: case 12806: case 12807: case 12808: case 12809: case 12810: case 12811: case 12812: case 12813: case 12814: case 12815: case 12816: case 12817: case 12818: case 12819: case 12820: case 12821: case 12822: case 12823: case 12824: case 12825: case 12826: case 12827: case 12828: case 12829: case 12830: return 11584 + c - 12784; case 12832: case 12833: case 12834: case 12835: case 12836: case 12837: case 12838: case 12839: case 12840: case 12841: case 12842: case 12843: case 12844: case 12845: case 12846: case 12847: case 12848: case 12849: case 12850: case 12851: case 12852: case 12853: case 12854: case 12855: case 12856: case 12857: case 12858: case 12859: case 12860: case 12861: case 12862: case 12863: case 12864: case 12865: case 12866: case 12867: case 12868: case 12869: case 12870: case 12871: case 12872: case 12873: case 12874: case 12875: case 12876: case 12877: case 12878: case 12879: case 12880: case 12881: case 12882: case 12883: case 12884: case 12885: case 12886: case 12887: case 12888: case 12889: case 12890: case 12891: case 12892: case 12893: case 12894: case 12895: case 12896: case 12897: case 12898: case 12899: case 12900: case 12901: case 12902: case 12903: case 12904: case 12905: case 12906: case 12907: case 12908: case 12909: case 12910: case 12911: case 12912: case 12913: case 12914: case 12915: case 12916: case 12917: case 12918: case 12919: case 12920: case 12921: case 12922: case 12923: case 12924: case 12925: case 12926: case 12927: case 12928: case 12929: case 12930: case 12931: case 12932: case 12933: case 12934: case 12935: case 12936: case 12937: case 12938: case 12939: case 12940: case 12941: case 12942: case 12943: case 12944: case 12945: case 12946: case 12947: case 12948: case 12949: case 12950: case 12951: case 12952: case 12953: case 12954: case 12955: case 12956: case 12957: case 12958: case 12959: case 12960: case 12961: case 12962: case 12963: case 12964: case 12965: case 12966: case 12967: case 12968: case 12969: case 12970: case 12971: case 12972: case 12973: case 12974: case 12975: case 12976: case 12977: case 12978: case 12979: case 12980: case 12981: case 12982: case 12983: case 12984: case 12985: case 12986: case 12987: case 12988: case 12989: case 12990: case 12991: case 12992: case 12993: case 12994: case 12995: case 12996: case 12997: case 12998: case 12999: case 13000: case 13001: case 13002: case 13003: case 13004: case 13005: case 13006: case 13007: case 13008: case 13009: case 13010: case 13011: case 13012: case 13013: case 13014: case 13015: case 13016: case 13017: case 13018: case 13019: case 13020: case 13021: case 13022: case 13023: case 13024: case 13025: case 13026: case 13027: case 13028: case 13029: case 13030: case 13031: case 13032: case 13033: case 13034: case 13035: case 13036: case 13037: case 13038: case 13039: case 13040: case 13041: case 13042: case 13043: case 13044: case 13045: case 13046: case 13047: case 13048: case 13049: case 13050: case 13051: case 13052: case 13053: case 13054: case 13055: case 13056: case 13057: case 13058: case 13059: case 13060: case 13061: case 13062: case 13063: case 13064: case 13065: case 13066: case 13067: case 13068: case 13069: case 13070: case 13071: case 13072: case 13073: case 13074: case 13075: case 13076: case 13077: case 13078: case 13079: case 13080: case 13081: case 13082: case 13083: case 13084: case 13085: case 13086: case 13087: case 13088: case 13089: case 13090: case 13091: case 13092: case 13093: case 13094: case 13095: case 13096: case 13097: case 13098: case 13099: case 13100: case 13101: case 13102: case 13103: case 13104: case 13105: case 13106: case 13107: case 13108: case 13109: case 13110: case 13111: case 13112: case 13113: case 13114: case 13115: case 13116: case 13117: case 13118: case 13119: case 13120: case 13121: case 13122: case 13123: case 13124: case 13125: case 13126: case 13127: case 13128: case 13129: case 13130: case 13131: case 13132: case 13133: case 13134: case 13135: case 13136: case 13137: case 13138: case 13139: case 13140: case 13141: case 13142: case 13143: case 13144: case 13145: case 13146: case 13147: case 13148: case 13149: case 13150: case 13151: case 13152: case 13153: case 13154: case 13155: case 13156: case 13157: case 13158: case 13159: case 13160: case 13161: case 13162: case 13163: case 13164: case 13165: case 13166: case 13167: case 13168: case 13169: case 13170: case 13171: case 13172: case 13173: case 13174: case 13175: case 13176: case 13177: case 13178: case 13179: case 13180: case 13181: case 13182: case 13183: case 13184: case 13185: case 13186: case 13187: case 13188: case 13189: case 13190: case 13191: case 13192: case 13193: case 13194: case 13195: case 13196: case 13197: case 13198: case 13199: case 13200: case 13201: case 13202: case 13203: case 13204: case 13205: case 13206: case 13207: case 13208: case 13209: case 13210: case 13211: case 13212: case 13213: case 13214: case 13215: case 13216: case 13217: case 13218: case 13219: case 13220: case 13221: case 13222: case 13223: case 13224: case 13225: case 13226: case 13227: case 13228: case 13229: case 13230: case 13231: case 13232: case 13233: case 13234: case 13235: case 13236: case 13237: case 13238: case 13239: case 13240: case 13241: case 13242: case 13243: case 13244: case 13245: case 13246: case 13247: case 13248: case 13249: case 13250: case 13251: case 13252: case 13253: case 13254: case 13255: case 13256: case 13257: case 13258: case 13259: case 13260: case 13261: case 13262: case 13263: case 13264: case 13265: case 13266: case 13267: case 13268: case 13269: case 13270: case 13271: case 13272: case 13273: case 13274: case 13275: case 13276: case 13277: case 13278: case 13279: case 13280: case 13281: case 13282: case 13283: case 13284: case 13285: case 13286: case 13287: case 13288: case 13289: case 13290: case 13291: case 13292: case 13293: case 13294: case 13295: case 13296: case 13297: case 13298: case 13299: case 13300: case 13301: case 13302: case 13303: case 13304: case 13305: case 13306: case 13307: case 13308: case 13309: case 13310: case 13311: case 13312: return 11631 + c - 12832; case 19893: return 12112; case 19904: case 19905: case 19906: case 19907: case 19908: case 19909: case 19910: case 19911: case 19912: case 19913: case 19914: case 19915: case 19916: case 19917: case 19918: case 19919: case 19920: case 19921: case 19922: case 19923: case 19924: case 19925: case 19926: case 19927: case 19928: case 19929: case 19930: case 19931: case 19932: case 19933: case 19934: case 19935: case 19936: case 19937: case 19938: case 19939: case 19940: case 19941: case 19942: case 19943: case 19944: case 19945: case 19946: case 19947: case 19948: case 19949: case 19950: case 19951: case 19952: case 19953: case 19954: case 19955: case 19956: case 19957: case 19958: case 19959: case 19960: case 19961: case 19962: case 19963: case 19964: case 19965: case 19966: case 19967: case 19968: return 12113 + c - 19904; case 40943: return 12178; case 40960: case 40961: case 40962: case 40963: case 40964: case 40965: case 40966: case 40967: case 40968: case 40969: case 40970: case 40971: case 40972: case 40973: case 40974: case 40975: case 40976: case 40977: case 40978: case 40979: case 40980: case 40981: case 40982: case 40983: case 40984: case 40985: case 40986: case 40987: case 40988: case 40989: case 40990: case 40991: case 40992: case 40993: case 40994: case 40995: case 40996: case 40997: case 40998: case 40999: case 41000: case 41001: case 41002: case 41003: case 41004: case 41005: case 41006: case 41007: case 41008: case 41009: case 41010: case 41011: case 41012: case 41013: case 41014: case 41015: case 41016: case 41017: case 41018: case 41019: case 41020: case 41021: case 41022: case 41023: case 41024: case 41025: case 41026: case 41027: case 41028: case 41029: case 41030: case 41031: case 41032: case 41033: case 41034: case 41035: case 41036: case 41037: case 41038: case 41039: case 41040: case 41041: case 41042: case 41043: case 41044: case 41045: case 41046: case 41047: case 41048: case 41049: case 41050: case 41051: case 41052: case 41053: case 41054: case 41055: case 41056: case 41057: case 41058: case 41059: case 41060: case 41061: case 41062: case 41063: case 41064: case 41065: case 41066: case 41067: case 41068: case 41069: case 41070: case 41071: case 41072: case 41073: case 41074: case 41075: case 41076: case 41077: case 41078: case 41079: case 41080: case 41081: case 41082: case 41083: case 41084: case 41085: case 41086: case 41087: case 41088: case 41089: case 41090: case 41091: case 41092: case 41093: case 41094: case 41095: case 41096: case 41097: case 41098: case 41099: case 41100: case 41101: case 41102: case 41103: case 41104: case 41105: case 41106: case 41107: case 41108: case 41109: case 41110: case 41111: case 41112: case 41113: case 41114: case 41115: case 41116: case 41117: case 41118: case 41119: case 41120: case 41121: case 41122: case 41123: case 41124: case 41125: case 41126: case 41127: case 41128: case 41129: case 41130: case 41131: case 41132: case 41133: case 41134: case 41135: case 41136: case 41137: case 41138: case 41139: case 41140: case 41141: case 41142: case 41143: case 41144: case 41145: case 41146: case 41147: case 41148: case 41149: case 41150: case 41151: case 41152: case 41153: case 41154: case 41155: case 41156: case 41157: case 41158: case 41159: case 41160: case 41161: case 41162: case 41163: case 41164: case 41165: case 41166: case 41167: case 41168: case 41169: case 41170: case 41171: case 41172: case 41173: case 41174: case 41175: case 41176: case 41177: case 41178: case 41179: case 41180: case 41181: case 41182: case 41183: case 41184: case 41185: case 41186: case 41187: case 41188: case 41189: case 41190: case 41191: case 41192: case 41193: case 41194: case 41195: case 41196: case 41197: case 41198: case 41199: case 41200: case 41201: case 41202: case 41203: case 41204: case 41205: case 41206: case 41207: case 41208: case 41209: case 41210: case 41211: case 41212: case 41213: case 41214: case 41215: case 41216: case 41217: case 41218: case 41219: case 41220: case 41221: case 41222: case 41223: case 41224: case 41225: case 41226: case 41227: case 41228: case 41229: case 41230: case 41231: case 41232: case 41233: case 41234: case 41235: case 41236: case 41237: case 41238: case 41239: case 41240: case 41241: case 41242: case 41243: case 41244: case 41245: case 41246: case 41247: case 41248: case 41249: case 41250: case 41251: case 41252: case 41253: case 41254: case 41255: case 41256: case 41257: case 41258: case 41259: case 41260: case 41261: case 41262: case 41263: case 41264: case 41265: case 41266: case 41267: case 41268: case 41269: case 41270: case 41271: case 41272: case 41273: case 41274: case 41275: case 41276: case 41277: case 41278: case 41279: case 41280: case 41281: case 41282: case 41283: case 41284: case 41285: case 41286: case 41287: case 41288: case 41289: case 41290: case 41291: case 41292: case 41293: case 41294: case 41295: case 41296: case 41297: case 41298: case 41299: case 41300: case 41301: case 41302: case 41303: case 41304: case 41305: case 41306: case 41307: case 41308: case 41309: case 41310: case 41311: case 41312: case 41313: case 41314: case 41315: case 41316: case 41317: case 41318: case 41319: case 41320: case 41321: case 41322: case 41323: case 41324: case 41325: case 41326: case 41327: case 41328: case 41329: case 41330: case 41331: case 41332: case 41333: case 41334: case 41335: case 41336: case 41337: case 41338: case 41339: case 41340: case 41341: case 41342: case 41343: case 41344: case 41345: case 41346: case 41347: case 41348: case 41349: case 41350: case 41351: case 41352: case 41353: case 41354: case 41355: case 41356: case 41357: case 41358: case 41359: case 41360: case 41361: case 41362: case 41363: case 41364: case 41365: case 41366: case 41367: case 41368: case 41369: case 41370: case 41371: case 41372: case 41373: case 41374: case 41375: case 41376: case 41377: case 41378: case 41379: case 41380: case 41381: case 41382: case 41383: case 41384: case 41385: case 41386: case 41387: case 41388: case 41389: case 41390: case 41391: case 41392: case 41393: case 41394: case 41395: case 41396: case 41397: case 41398: case 41399: case 41400: case 41401: case 41402: case 41403: case 41404: case 41405: case 41406: case 41407: case 41408: case 41409: case 41410: case 41411: case 41412: case 41413: case 41414: case 41415: case 41416: case 41417: case 41418: case 41419: case 41420: case 41421: case 41422: case 41423: case 41424: case 41425: case 41426: case 41427: case 41428: case 41429: case 41430: case 41431: case 41432: case 41433: case 41434: case 41435: case 41436: case 41437: case 41438: case 41439: case 41440: case 41441: case 41442: case 41443: case 41444: case 41445: case 41446: case 41447: case 41448: case 41449: case 41450: case 41451: case 41452: case 41453: case 41454: case 41455: case 41456: case 41457: case 41458: case 41459: case 41460: case 41461: case 41462: case 41463: case 41464: case 41465: case 41466: case 41467: case 41468: case 41469: case 41470: case 41471: case 41472: case 41473: case 41474: case 41475: case 41476: case 41477: case 41478: case 41479: case 41480: case 41481: case 41482: case 41483: case 41484: case 41485: case 41486: case 41487: case 41488: case 41489: case 41490: case 41491: case 41492: case 41493: case 41494: case 41495: case 41496: case 41497: case 41498: case 41499: case 41500: case 41501: case 41502: case 41503: case 41504: case 41505: case 41506: case 41507: case 41508: case 41509: case 41510: case 41511: case 41512: case 41513: case 41514: case 41515: case 41516: case 41517: case 41518: case 41519: case 41520: case 41521: case 41522: case 41523: case 41524: case 41525: case 41526: case 41527: case 41528: case 41529: case 41530: case 41531: case 41532: case 41533: case 41534: case 41535: case 41536: case 41537: case 41538: case 41539: case 41540: case 41541: case 41542: case 41543: case 41544: case 41545: case 41546: case 41547: case 41548: case 41549: case 41550: case 41551: case 41552: case 41553: case 41554: case 41555: case 41556: case 41557: case 41558: case 41559: case 41560: case 41561: case 41562: case 41563: case 41564: case 41565: case 41566: case 41567: case 41568: case 41569: case 41570: case 41571: case 41572: case 41573: case 41574: case 41575: case 41576: case 41577: case 41578: case 41579: case 41580: case 41581: case 41582: case 41583: case 41584: case 41585: case 41586: case 41587: case 41588: case 41589: case 41590: case 41591: case 41592: case 41593: case 41594: case 41595: case 41596: case 41597: case 41598: case 41599: case 41600: case 41601: case 41602: case 41603: case 41604: case 41605: case 41606: case 41607: case 41608: case 41609: case 41610: case 41611: case 41612: case 41613: case 41614: case 41615: case 41616: case 41617: case 41618: case 41619: case 41620: case 41621: case 41622: case 41623: case 41624: case 41625: case 41626: case 41627: case 41628: case 41629: case 41630: case 41631: case 41632: case 41633: case 41634: case 41635: case 41636: case 41637: case 41638: case 41639: case 41640: case 41641: case 41642: case 41643: case 41644: case 41645: case 41646: case 41647: case 41648: case 41649: case 41650: case 41651: case 41652: case 41653: case 41654: case 41655: case 41656: case 41657: case 41658: case 41659: case 41660: case 41661: case 41662: case 41663: case 41664: case 41665: case 41666: case 41667: case 41668: case 41669: case 41670: case 41671: case 41672: case 41673: case 41674: case 41675: case 41676: case 41677: case 41678: case 41679: case 41680: case 41681: case 41682: case 41683: case 41684: case 41685: case 41686: case 41687: case 41688: case 41689: case 41690: case 41691: case 41692: case 41693: case 41694: case 41695: case 41696: case 41697: case 41698: case 41699: case 41700: case 41701: case 41702: case 41703: case 41704: case 41705: case 41706: case 41707: case 41708: case 41709: case 41710: case 41711: case 41712: case 41713: case 41714: case 41715: case 41716: case 41717: case 41718: case 41719: case 41720: case 41721: case 41722: case 41723: case 41724: case 41725: case 41726: case 41727: case 41728: case 41729: case 41730: case 41731: case 41732: case 41733: case 41734: case 41735: case 41736: case 41737: case 41738: case 41739: case 41740: case 41741: case 41742: case 41743: case 41744: case 41745: case 41746: case 41747: case 41748: case 41749: case 41750: case 41751: case 41752: case 41753: case 41754: case 41755: case 41756: case 41757: case 41758: case 41759: case 41760: case 41761: case 41762: case 41763: case 41764: case 41765: case 41766: case 41767: case 41768: case 41769: case 41770: case 41771: case 41772: case 41773: case 41774: case 41775: case 41776: case 41777: case 41778: case 41779: case 41780: case 41781: case 41782: case 41783: case 41784: case 41785: case 41786: case 41787: case 41788: case 41789: case 41790: case 41791: case 41792: case 41793: case 41794: case 41795: case 41796: case 41797: case 41798: case 41799: case 41800: case 41801: case 41802: case 41803: case 41804: case 41805: case 41806: case 41807: case 41808: case 41809: case 41810: case 41811: case 41812: case 41813: case 41814: case 41815: case 41816: case 41817: case 41818: case 41819: case 41820: case 41821: case 41822: case 41823: case 41824: case 41825: case 41826: case 41827: case 41828: case 41829: case 41830: case 41831: case 41832: case 41833: case 41834: case 41835: case 41836: case 41837: case 41838: case 41839: case 41840: case 41841: case 41842: case 41843: case 41844: case 41845: case 41846: case 41847: case 41848: case 41849: case 41850: case 41851: case 41852: case 41853: case 41854: case 41855: case 41856: case 41857: case 41858: case 41859: case 41860: case 41861: case 41862: case 41863: case 41864: case 41865: case 41866: case 41867: case 41868: case 41869: case 41870: case 41871: case 41872: case 41873: case 41874: case 41875: case 41876: case 41877: case 41878: case 41879: case 41880: case 41881: case 41882: case 41883: case 41884: case 41885: case 41886: case 41887: case 41888: case 41889: case 41890: case 41891: case 41892: case 41893: case 41894: case 41895: case 41896: case 41897: case 41898: case 41899: case 41900: case 41901: case 41902: case 41903: case 41904: case 41905: case 41906: case 41907: case 41908: case 41909: case 41910: case 41911: case 41912: case 41913: case 41914: case 41915: case 41916: case 41917: case 41918: case 41919: case 41920: case 41921: case 41922: case 41923: case 41924: case 41925: case 41926: case 41927: case 41928: case 41929: case 41930: case 41931: case 41932: case 41933: case 41934: case 41935: case 41936: case 41937: case 41938: case 41939: case 41940: case 41941: case 41942: case 41943: case 41944: case 41945: case 41946: case 41947: case 41948: case 41949: case 41950: case 41951: case 41952: case 41953: case 41954: case 41955: case 41956: case 41957: case 41958: case 41959: case 41960: case 41961: case 41962: case 41963: case 41964: case 41965: case 41966: case 41967: case 41968: case 41969: case 41970: case 41971: case 41972: case 41973: case 41974: case 41975: case 41976: case 41977: case 41978: case 41979: case 41980: case 41981: case 41982: case 41983: case 41984: case 41985: case 41986: case 41987: case 41988: case 41989: case 41990: case 41991: case 41992: case 41993: case 41994: case 41995: case 41996: case 41997: case 41998: case 41999: case 42000: case 42001: case 42002: case 42003: case 42004: case 42005: case 42006: case 42007: case 42008: case 42009: case 42010: case 42011: case 42012: case 42013: case 42014: case 42015: case 42016: case 42017: case 42018: case 42019: case 42020: case 42021: case 42022: case 42023: case 42024: case 42025: case 42026: case 42027: case 42028: case 42029: case 42030: case 42031: case 42032: case 42033: case 42034: case 42035: case 42036: case 42037: case 42038: case 42039: case 42040: case 42041: case 42042: case 42043: case 42044: case 42045: case 42046: case 42047: case 42048: case 42049: case 42050: case 42051: case 42052: case 42053: case 42054: case 42055: case 42056: case 42057: case 42058: case 42059: case 42060: case 42061: case 42062: case 42063: case 42064: case 42065: case 42066: case 42067: case 42068: case 42069: case 42070: case 42071: case 42072: case 42073: case 42074: case 42075: case 42076: case 42077: case 42078: case 42079: case 42080: case 42081: case 42082: case 42083: case 42084: case 42085: case 42086: case 42087: case 42088: case 42089: case 42090: case 42091: case 42092: case 42093: case 42094: case 42095: case 42096: case 42097: case 42098: case 42099: case 42100: case 42101: case 42102: case 42103: case 42104: case 42105: case 42106: case 42107: case 42108: case 42109: case 42110: case 42111: case 42112: case 42113: case 42114: case 42115: case 42116: case 42117: case 42118: case 42119: case 42120: case 42121: case 42122: case 42123: case 42124: return 12179 + c - 40960; case 42128: case 42129: case 42130: case 42131: case 42132: case 42133: case 42134: case 42135: case 42136: case 42137: case 42138: case 42139: case 42140: case 42141: case 42142: case 42143: case 42144: case 42145: case 42146: case 42147: case 42148: case 42149: case 42150: case 42151: case 42152: case 42153: case 42154: case 42155: case 42156: case 42157: case 42158: case 42159: case 42160: case 42161: case 42162: case 42163: case 42164: case 42165: case 42166: case 42167: case 42168: case 42169: case 42170: case 42171: case 42172: case 42173: case 42174: case 42175: case 42176: case 42177: case 42178: case 42179: case 42180: case 42181: case 42182: return 13344 + c - 42128; case 42192: case 42193: case 42194: case 42195: case 42196: case 42197: case 42198: case 42199: case 42200: case 42201: case 42202: case 42203: case 42204: case 42205: case 42206: case 42207: case 42208: case 42209: case 42210: case 42211: case 42212: case 42213: case 42214: case 42215: case 42216: case 42217: case 42218: case 42219: case 42220: case 42221: case 42222: case 42223: case 42224: case 42225: case 42226: case 42227: case 42228: case 42229: case 42230: case 42231: case 42232: case 42233: case 42234: case 42235: case 42236: case 42237: case 42238: case 42239: case 42240: case 42241: case 42242: case 42243: case 42244: case 42245: case 42246: case 42247: case 42248: case 42249: case 42250: case 42251: case 42252: case 42253: case 42254: case 42255: case 42256: case 42257: case 42258: case 42259: case 42260: case 42261: case 42262: case 42263: case 42264: case 42265: case 42266: case 42267: case 42268: case 42269: case 42270: case 42271: case 42272: case 42273: case 42274: case 42275: case 42276: case 42277: case 42278: case 42279: case 42280: case 42281: case 42282: case 42283: case 42284: case 42285: case 42286: case 42287: case 42288: case 42289: case 42290: case 42291: case 42292: case 42293: case 42294: case 42295: case 42296: case 42297: case 42298: case 42299: case 42300: case 42301: case 42302: case 42303: case 42304: case 42305: case 42306: case 42307: case 42308: case 42309: case 42310: case 42311: case 42312: case 42313: case 42314: case 42315: case 42316: case 42317: case 42318: case 42319: case 42320: case 42321: case 42322: case 42323: case 42324: case 42325: case 42326: case 42327: case 42328: case 42329: case 42330: case 42331: case 42332: case 42333: case 42334: case 42335: case 42336: case 42337: case 42338: case 42339: case 42340: case 42341: case 42342: case 42343: case 42344: case 42345: case 42346: case 42347: case 42348: case 42349: case 42350: case 42351: case 42352: case 42353: case 42354: case 42355: case 42356: case 42357: case 42358: case 42359: case 42360: case 42361: case 42362: case 42363: case 42364: case 42365: case 42366: case 42367: case 42368: case 42369: case 42370: case 42371: case 42372: case 42373: case 42374: case 42375: case 42376: case 42377: case 42378: case 42379: case 42380: case 42381: case 42382: case 42383: case 42384: case 42385: case 42386: case 42387: case 42388: case 42389: case 42390: case 42391: case 42392: case 42393: case 42394: case 42395: case 42396: case 42397: case 42398: case 42399: case 42400: case 42401: case 42402: case 42403: case 42404: case 42405: case 42406: case 42407: case 42408: case 42409: case 42410: case 42411: case 42412: case 42413: case 42414: case 42415: case 42416: case 42417: case 42418: case 42419: case 42420: case 42421: case 42422: case 42423: case 42424: case 42425: case 42426: case 42427: case 42428: case 42429: case 42430: case 42431: case 42432: case 42433: case 42434: case 42435: case 42436: case 42437: case 42438: case 42439: case 42440: case 42441: case 42442: case 42443: case 42444: case 42445: case 42446: case 42447: case 42448: case 42449: case 42450: case 42451: case 42452: case 42453: case 42454: case 42455: case 42456: case 42457: case 42458: case 42459: case 42460: case 42461: case 42462: case 42463: case 42464: case 42465: case 42466: case 42467: case 42468: case 42469: case 42470: case 42471: case 42472: case 42473: case 42474: case 42475: case 42476: case 42477: case 42478: case 42479: case 42480: case 42481: case 42482: case 42483: case 42484: case 42485: case 42486: case 42487: case 42488: case 42489: case 42490: case 42491: case 42492: case 42493: case 42494: case 42495: case 42496: case 42497: case 42498: case 42499: case 42500: case 42501: case 42502: case 42503: case 42504: case 42505: case 42506: case 42507: case 42508: case 42509: case 42510: case 42511: case 42512: case 42513: case 42514: case 42515: case 42516: case 42517: case 42518: case 42519: case 42520: case 42521: case 42522: case 42523: case 42524: case 42525: case 42526: case 42527: case 42528: case 42529: case 42530: case 42531: case 42532: case 42533: case 42534: case 42535: case 42536: case 42537: case 42538: case 42539: return 13399 + c - 42192; case 42560: case 42561: case 42562: case 42563: case 42564: case 42565: case 42566: case 42567: case 42568: case 42569: case 42570: case 42571: case 42572: case 42573: case 42574: case 42575: case 42576: case 42577: case 42578: case 42579: case 42580: case 42581: case 42582: case 42583: case 42584: case 42585: case 42586: case 42587: case 42588: case 42589: case 42590: case 42591: case 42592: case 42593: case 42594: case 42595: case 42596: case 42597: case 42598: case 42599: case 42600: case 42601: case 42602: case 42603: case 42604: case 42605: case 42606: case 42607: case 42608: case 42609: case 42610: case 42611: case 42612: case 42613: case 42614: case 42615: case 42616: case 42617: case 42618: case 42619: case 42620: case 42621: case 42622: case 42623: case 42624: case 42625: case 42626: case 42627: case 42628: case 42629: case 42630: case 42631: case 42632: case 42633: case 42634: case 42635: case 42636: case 42637: case 42638: case 42639: case 42640: case 42641: case 42642: case 42643: case 42644: case 42645: case 42646: case 42647: case 42648: case 42649: case 42650: case 42651: case 42652: case 42653: case 42654: case 42655: case 42656: case 42657: case 42658: case 42659: case 42660: case 42661: case 42662: case 42663: case 42664: case 42665: case 42666: case 42667: case 42668: case 42669: case 42670: case 42671: case 42672: case 42673: case 42674: case 42675: case 42676: case 42677: case 42678: case 42679: case 42680: case 42681: case 42682: case 42683: case 42684: case 42685: case 42686: case 42687: case 42688: case 42689: case 42690: case 42691: case 42692: case 42693: case 42694: case 42695: case 42696: case 42697: case 42698: case 42699: case 42700: case 42701: case 42702: case 42703: case 42704: case 42705: case 42706: case 42707: case 42708: case 42709: case 42710: case 42711: case 42712: case 42713: case 42714: case 42715: case 42716: case 42717: case 42718: case 42719: case 42720: case 42721: case 42722: case 42723: case 42724: case 42725: case 42726: case 42727: case 42728: case 42729: case 42730: case 42731: case 42732: case 42733: case 42734: case 42735: case 42736: case 42737: case 42738: case 42739: case 42740: case 42741: case 42742: case 42743: return 13747 + c - 42560; case 42752: case 42753: case 42754: case 42755: case 42756: case 42757: case 42758: case 42759: case 42760: case 42761: case 42762: case 42763: case 42764: case 42765: case 42766: case 42767: case 42768: case 42769: case 42770: case 42771: case 42772: case 42773: case 42774: case 42775: case 42776: case 42777: case 42778: case 42779: case 42780: case 42781: case 42782: case 42783: case 42784: case 42785: case 42786: case 42787: case 42788: case 42789: case 42790: case 42791: case 42792: case 42793: case 42794: case 42795: case 42796: case 42797: case 42798: case 42799: case 42800: case 42801: case 42802: case 42803: case 42804: case 42805: case 42806: case 42807: case 42808: case 42809: case 42810: case 42811: case 42812: case 42813: case 42814: case 42815: case 42816: case 42817: case 42818: case 42819: case 42820: case 42821: case 42822: case 42823: case 42824: case 42825: case 42826: case 42827: case 42828: case 42829: case 42830: case 42831: case 42832: case 42833: case 42834: case 42835: case 42836: case 42837: case 42838: case 42839: case 42840: case 42841: case 42842: case 42843: case 42844: case 42845: case 42846: case 42847: case 42848: case 42849: case 42850: case 42851: case 42852: case 42853: case 42854: case 42855: case 42856: case 42857: case 42858: case 42859: case 42860: case 42861: case 42862: case 42863: case 42864: case 42865: case 42866: case 42867: case 42868: case 42869: case 42870: case 42871: case 42872: case 42873: case 42874: case 42875: case 42876: case 42877: case 42878: case 42879: case 42880: case 42881: case 42882: case 42883: case 42884: case 42885: case 42886: case 42887: case 42888: case 42889: case 42890: case 42891: case 42892: case 42893: case 42894: case 42895: case 42896: case 42897: case 42898: case 42899: case 42900: case 42901: case 42902: case 42903: case 42904: case 42905: case 42906: case 42907: case 42908: case 42909: case 42910: case 42911: case 42912: case 42913: case 42914: case 42915: case 42916: case 42917: case 42918: case 42919: case 42920: case 42921: case 42922: case 42923: case 42924: case 42925: case 42926: case 42927: case 42928: case 42929: case 42930: case 42931: case 42932: case 42933: case 42934: case 42935: case 42936: case 42937: case 42938: case 42939: case 42940: case 42941: case 42942: case 42943: return 13931 + c - 42752; case 42946: case 42947: case 42948: case 42949: case 42950: return 14123 + c - 42946; case 42999: case 43000: case 43001: case 43002: case 43003: case 43004: case 43005: case 43006: case 43007: case 43008: case 43009: case 43010: case 43011: case 43012: case 43013: case 43014: case 43015: case 43016: case 43017: case 43018: case 43019: case 43020: case 43021: case 43022: case 43023: case 43024: case 43025: case 43026: case 43027: case 43028: case 43029: case 43030: case 43031: case 43032: case 43033: case 43034: case 43035: case 43036: case 43037: case 43038: case 43039: case 43040: case 43041: case 43042: case 43043: case 43044: case 43045: case 43046: case 43047: case 43048: case 43049: case 43050: case 43051: return 14128 + c - 42999; case 43056: case 43057: case 43058: case 43059: case 43060: case 43061: case 43062: case 43063: case 43064: case 43065: return 14181 + c - 43056; case 43072: case 43073: case 43074: case 43075: case 43076: case 43077: case 43078: case 43079: case 43080: case 43081: case 43082: case 43083: case 43084: case 43085: case 43086: case 43087: case 43088: case 43089: case 43090: case 43091: case 43092: case 43093: case 43094: case 43095: case 43096: case 43097: case 43098: case 43099: case 43100: case 43101: case 43102: case 43103: case 43104: case 43105: case 43106: case 43107: case 43108: case 43109: case 43110: case 43111: case 43112: case 43113: case 43114: case 43115: case 43116: case 43117: case 43118: case 43119: case 43120: case 43121: case 43122: case 43123: case 43124: case 43125: case 43126: case 43127: return 14191 + c - 43072; case 43136: case 43137: case 43138: case 43139: case 43140: case 43141: case 43142: case 43143: case 43144: case 43145: case 43146: case 43147: case 43148: case 43149: case 43150: case 43151: case 43152: case 43153: case 43154: case 43155: case 43156: case 43157: case 43158: case 43159: case 43160: case 43161: case 43162: case 43163: case 43164: case 43165: case 43166: case 43167: case 43168: case 43169: case 43170: case 43171: case 43172: case 43173: case 43174: case 43175: case 43176: case 43177: case 43178: case 43179: case 43180: case 43181: case 43182: case 43183: case 43184: case 43185: case 43186: case 43187: case 43188: case 43189: case 43190: case 43191: case 43192: case 43193: case 43194: case 43195: case 43196: case 43197: case 43198: case 43199: case 43200: case 43201: case 43202: case 43203: case 43204: case 43205: return 14247 + c - 43136; case 43214: case 43215: case 43216: case 43217: case 43218: case 43219: case 43220: case 43221: case 43222: case 43223: case 43224: case 43225: return 14317 + c - 43214; case 43232: case 43233: case 43234: case 43235: case 43236: case 43237: case 43238: case 43239: case 43240: case 43241: case 43242: case 43243: case 43244: case 43245: case 43246: case 43247: case 43248: case 43249: case 43250: case 43251: case 43252: case 43253: case 43254: case 43255: case 43256: case 43257: case 43258: case 43259: case 43260: case 43261: case 43262: case 43263: case 43264: case 43265: case 43266: case 43267: case 43268: case 43269: case 43270: case 43271: case 43272: case 43273: case 43274: case 43275: case 43276: case 43277: case 43278: case 43279: case 43280: case 43281: case 43282: case 43283: case 43284: case 43285: case 43286: case 43287: case 43288: case 43289: case 43290: case 43291: case 43292: case 43293: case 43294: case 43295: case 43296: case 43297: case 43298: case 43299: case 43300: case 43301: case 43302: case 43303: case 43304: case 43305: case 43306: case 43307: case 43308: case 43309: case 43310: case 43311: case 43312: case 43313: case 43314: case 43315: case 43316: case 43317: case 43318: case 43319: case 43320: case 43321: case 43322: case 43323: case 43324: case 43325: case 43326: case 43327: case 43328: case 43329: case 43330: case 43331: case 43332: case 43333: case 43334: case 43335: case 43336: case 43337: case 43338: case 43339: case 43340: case 43341: case 43342: case 43343: case 43344: case 43345: case 43346: case 43347: return 14329 + c - 43232; case 43359: case 43360: case 43361: case 43362: case 43363: case 43364: case 43365: case 43366: case 43367: case 43368: case 43369: case 43370: case 43371: case 43372: case 43373: case 43374: case 43375: case 43376: case 43377: case 43378: case 43379: case 43380: case 43381: case 43382: case 43383: case 43384: case 43385: case 43386: case 43387: case 43388: return 14445 + c - 43359; case 43392: case 43393: case 43394: case 43395: case 43396: case 43397: case 43398: case 43399: case 43400: case 43401: case 43402: case 43403: case 43404: case 43405: case 43406: case 43407: case 43408: case 43409: case 43410: case 43411: case 43412: case 43413: case 43414: case 43415: case 43416: case 43417: case 43418: case 43419: case 43420: case 43421: case 43422: case 43423: case 43424: case 43425: case 43426: case 43427: case 43428: case 43429: case 43430: case 43431: case 43432: case 43433: case 43434: case 43435: case 43436: case 43437: case 43438: case 43439: case 43440: case 43441: case 43442: case 43443: case 43444: case 43445: case 43446: case 43447: case 43448: case 43449: case 43450: case 43451: case 43452: case 43453: case 43454: case 43455: case 43456: case 43457: case 43458: case 43459: case 43460: case 43461: case 43462: case 43463: case 43464: case 43465: case 43466: case 43467: case 43468: case 43469: return 14475 + c - 43392; case 43471: case 43472: case 43473: case 43474: case 43475: case 43476: case 43477: case 43478: case 43479: case 43480: case 43481: return 14553 + c - 43471; case 43486: case 43487: case 43488: case 43489: case 43490: case 43491: case 43492: case 43493: case 43494: case 43495: case 43496: case 43497: case 43498: case 43499: case 43500: case 43501: case 43502: case 43503: case 43504: case 43505: case 43506: case 43507: case 43508: case 43509: case 43510: case 43511: case 43512: case 43513: case 43514: case 43515: case 43516: case 43517: case 43518: return 14564 + c - 43486; case 43520: case 43521: case 43522: case 43523: case 43524: case 43525: case 43526: case 43527: case 43528: case 43529: case 43530: case 43531: case 43532: case 43533: case 43534: case 43535: case 43536: case 43537: case 43538: case 43539: case 43540: case 43541: case 43542: case 43543: case 43544: case 43545: case 43546: case 43547: case 43548: case 43549: case 43550: case 43551: case 43552: case 43553: case 43554: case 43555: case 43556: case 43557: case 43558: case 43559: case 43560: case 43561: case 43562: case 43563: case 43564: case 43565: case 43566: case 43567: case 43568: case 43569: case 43570: case 43571: case 43572: case 43573: case 43574: return 14597 + c - 43520; case 43584: case 43585: case 43586: case 43587: case 43588: case 43589: case 43590: case 43591: case 43592: case 43593: case 43594: case 43595: case 43596: case 43597: return 14652 + c - 43584; case 43600: case 43601: case 43602: case 43603: case 43604: case 43605: case 43606: case 43607: case 43608: case 43609: return 14666 + c - 43600; case 43612: case 43613: case 43614: case 43615: case 43616: case 43617: case 43618: case 43619: case 43620: case 43621: case 43622: case 43623: case 43624: case 43625: case 43626: case 43627: case 43628: case 43629: case 43630: case 43631: case 43632: case 43633: case 43634: case 43635: case 43636: case 43637: case 43638: case 43639: case 43640: case 43641: case 43642: case 43643: case 43644: case 43645: case 43646: case 43647: case 43648: case 43649: case 43650: case 43651: case 43652: case 43653: case 43654: case 43655: case 43656: case 43657: case 43658: case 43659: case 43660: case 43661: case 43662: case 43663: case 43664: case 43665: case 43666: case 43667: case 43668: case 43669: case 43670: case 43671: case 43672: case 43673: case 43674: case 43675: case 43676: case 43677: case 43678: case 43679: case 43680: case 43681: case 43682: case 43683: case 43684: case 43685: case 43686: case 43687: case 43688: case 43689: case 43690: case 43691: case 43692: case 43693: case 43694: case 43695: case 43696: case 43697: case 43698: case 43699: case 43700: case 43701: case 43702: case 43703: case 43704: case 43705: case 43706: case 43707: case 43708: case 43709: case 43710: case 43711: case 43712: case 43713: case 43714: return 14676 + c - 43612; case 43739: case 43740: case 43741: case 43742: case 43743: case 43744: case 43745: case 43746: case 43747: case 43748: case 43749: case 43750: case 43751: case 43752: case 43753: case 43754: case 43755: case 43756: case 43757: case 43758: case 43759: case 43760: case 43761: case 43762: case 43763: case 43764: case 43765: case 43766: return 14779 + c - 43739; case 43777: case 43778: case 43779: case 43780: case 43781: case 43782: return 14807 + c - 43777; case 43785: case 43786: case 43787: case 43788: case 43789: case 43790: return 14813 + c - 43785; case 43793: case 43794: case 43795: case 43796: case 43797: case 43798: return 14819 + c - 43793; case 43808: case 43809: case 43810: case 43811: case 43812: case 43813: case 43814: return 14825 + c - 43808; case 43816: case 43817: case 43818: case 43819: case 43820: case 43821: case 43822: return 14832 + c - 43816; case 43824: case 43825: case 43826: case 43827: case 43828: case 43829: case 43830: case 43831: case 43832: case 43833: case 43834: case 43835: case 43836: case 43837: case 43838: case 43839: case 43840: case 43841: case 43842: case 43843: case 43844: case 43845: case 43846: case 43847: case 43848: case 43849: case 43850: case 43851: case 43852: case 43853: case 43854: case 43855: case 43856: case 43857: case 43858: case 43859: case 43860: case 43861: case 43862: case 43863: case 43864: case 43865: case 43866: case 43867: case 43868: case 43869: case 43870: case 43871: case 43872: case 43873: case 43874: case 43875: case 43876: case 43877: case 43878: case 43879: return 14839 + c - 43824; case 43888: case 43889: case 43890: case 43891: case 43892: case 43893: case 43894: case 43895: case 43896: case 43897: case 43898: case 43899: case 43900: case 43901: case 43902: case 43903: case 43904: case 43905: case 43906: case 43907: case 43908: case 43909: case 43910: case 43911: case 43912: case 43913: case 43914: case 43915: case 43916: case 43917: case 43918: case 43919: case 43920: case 43921: case 43922: case 43923: case 43924: case 43925: case 43926: case 43927: case 43928: case 43929: case 43930: case 43931: case 43932: case 43933: case 43934: case 43935: case 43936: case 43937: case 43938: case 43939: case 43940: case 43941: case 43942: case 43943: case 43944: case 43945: case 43946: case 43947: case 43948: case 43949: case 43950: case 43951: case 43952: case 43953: case 43954: case 43955: case 43956: case 43957: case 43958: case 43959: case 43960: case 43961: case 43962: case 43963: case 43964: case 43965: case 43966: case 43967: case 43968: case 43969: case 43970: case 43971: case 43972: case 43973: case 43974: case 43975: case 43976: case 43977: case 43978: case 43979: case 43980: case 43981: case 43982: case 43983: case 43984: case 43985: case 43986: case 43987: case 43988: case 43989: case 43990: case 43991: case 43992: case 43993: case 43994: case 43995: case 43996: case 43997: case 43998: case 43999: case 44000: case 44001: case 44002: case 44003: case 44004: case 44005: case 44006: case 44007: case 44008: case 44009: case 44010: case 44011: case 44012: case 44013: return 14895 + c - 43888; case 44016: case 44017: case 44018: case 44019: case 44020: case 44021: case 44022: case 44023: case 44024: case 44025: return 15021 + c - 44016; case 44032: return 15031; case 55203: return 15032; case 55216: case 55217: case 55218: case 55219: case 55220: case 55221: case 55222: case 55223: case 55224: case 55225: case 55226: case 55227: case 55228: case 55229: case 55230: case 55231: case 55232: case 55233: case 55234: case 55235: case 55236: case 55237: case 55238: return 15033 + c - 55216; case 55243: case 55244: case 55245: case 55246: case 55247: case 55248: case 55249: case 55250: case 55251: case 55252: case 55253: case 55254: case 55255: case 55256: case 55257: case 55258: case 55259: case 55260: case 55261: case 55262: case 55263: case 55264: case 55265: case 55266: case 55267: case 55268: case 55269: case 55270: case 55271: case 55272: case 55273: case 55274: case 55275: case 55276: case 55277: case 55278: case 55279: case 55280: case 55281: case 55282: case 55283: case 55284: case 55285: case 55286: case 55287: case 55288: case 55289: case 55290: case 55291: return 15056 + c - 55243; case 55296: return 15105; case 56191: case 56192: return 15106 + c - 56191; case 56319: case 56320: return 15108 + c - 56319; case 57343: case 57344: return 15110 + c - 57343; case 63743: case 63744: case 63745: case 63746: case 63747: case 63748: case 63749: case 63750: case 63751: case 63752: case 63753: case 63754: case 63755: case 63756: case 63757: case 63758: case 63759: case 63760: case 63761: case 63762: case 63763: case 63764: case 63765: case 63766: case 63767: case 63768: case 63769: case 63770: case 63771: case 63772: case 63773: case 63774: case 63775: case 63776: case 63777: case 63778: case 63779: case 63780: case 63781: case 63782: case 63783: case 63784: case 63785: case 63786: case 63787: case 63788: case 63789: case 63790: case 63791: case 63792: case 63793: case 63794: case 63795: case 63796: case 63797: case 63798: case 63799: case 63800: case 63801: case 63802: case 63803: case 63804: case 63805: case 63806: case 63807: case 63808: case 63809: case 63810: case 63811: case 63812: case 63813: case 63814: case 63815: case 63816: case 63817: case 63818: case 63819: case 63820: case 63821: case 63822: case 63823: case 63824: case 63825: case 63826: case 63827: case 63828: case 63829: case 63830: case 63831: case 63832: case 63833: case 63834: case 63835: case 63836: case 63837: case 63838: case 63839: case 63840: case 63841: case 63842: case 63843: case 63844: case 63845: case 63846: case 63847: case 63848: case 63849: case 63850: case 63851: case 63852: case 63853: case 63854: case 63855: case 63856: case 63857: case 63858: case 63859: case 63860: case 63861: case 63862: case 63863: case 63864: case 63865: case 63866: case 63867: case 63868: case 63869: case 63870: case 63871: case 63872: case 63873: case 63874: case 63875: case 63876: case 63877: case 63878: case 63879: case 63880: case 63881: case 63882: case 63883: case 63884: case 63885: case 63886: case 63887: case 63888: case 63889: case 63890: case 63891: case 63892: case 63893: case 63894: case 63895: case 63896: case 63897: case 63898: case 63899: case 63900: case 63901: case 63902: case 63903: case 63904: case 63905: case 63906: case 63907: case 63908: case 63909: case 63910: case 63911: case 63912: case 63913: case 63914: case 63915: case 63916: case 63917: case 63918: case 63919: case 63920: case 63921: case 63922: case 63923: case 63924: case 63925: case 63926: case 63927: case 63928: case 63929: case 63930: case 63931: case 63932: case 63933: case 63934: case 63935: case 63936: case 63937: case 63938: case 63939: case 63940: case 63941: case 63942: case 63943: case 63944: case 63945: case 63946: case 63947: case 63948: case 63949: case 63950: case 63951: case 63952: case 63953: case 63954: case 63955: case 63956: case 63957: case 63958: case 63959: case 63960: case 63961: case 63962: case 63963: case 63964: case 63965: case 63966: case 63967: case 63968: case 63969: case 63970: case 63971: case 63972: case 63973: case 63974: case 63975: case 63976: case 63977: case 63978: case 63979: case 63980: case 63981: case 63982: case 63983: case 63984: case 63985: case 63986: case 63987: case 63988: case 63989: case 63990: case 63991: case 63992: case 63993: case 63994: case 63995: case 63996: case 63997: case 63998: case 63999: case 64000: case 64001: case 64002: case 64003: case 64004: case 64005: case 64006: case 64007: case 64008: case 64009: case 64010: case 64011: case 64012: case 64013: case 64014: case 64015: case 64016: case 64017: case 64018: case 64019: case 64020: case 64021: case 64022: case 64023: case 64024: case 64025: case 64026: case 64027: case 64028: case 64029: case 64030: case 64031: case 64032: case 64033: case 64034: case 64035: case 64036: case 64037: case 64038: case 64039: case 64040: case 64041: case 64042: case 64043: case 64044: case 64045: case 64046: case 64047: case 64048: case 64049: case 64050: case 64051: case 64052: case 64053: case 64054: case 64055: case 64056: case 64057: case 64058: case 64059: case 64060: case 64061: case 64062: case 64063: case 64064: case 64065: case 64066: case 64067: case 64068: case 64069: case 64070: case 64071: case 64072: case 64073: case 64074: case 64075: case 64076: case 64077: case 64078: case 64079: case 64080: case 64081: case 64082: case 64083: case 64084: case 64085: case 64086: case 64087: case 64088: case 64089: case 64090: case 64091: case 64092: case 64093: case 64094: case 64095: case 64096: case 64097: case 64098: case 64099: case 64100: case 64101: case 64102: case 64103: case 64104: case 64105: case 64106: case 64107: case 64108: case 64109: return 15112 + c - 63743; case 64112: case 64113: case 64114: case 64115: case 64116: case 64117: case 64118: case 64119: case 64120: case 64121: case 64122: case 64123: case 64124: case 64125: case 64126: case 64127: case 64128: case 64129: case 64130: case 64131: case 64132: case 64133: case 64134: case 64135: case 64136: case 64137: case 64138: case 64139: case 64140: case 64141: case 64142: case 64143: case 64144: case 64145: case 64146: case 64147: case 64148: case 64149: case 64150: case 64151: case 64152: case 64153: case 64154: case 64155: case 64156: case 64157: case 64158: case 64159: case 64160: case 64161: case 64162: case 64163: case 64164: case 64165: case 64166: case 64167: case 64168: case 64169: case 64170: case 64171: case 64172: case 64173: case 64174: case 64175: case 64176: case 64177: case 64178: case 64179: case 64180: case 64181: case 64182: case 64183: case 64184: case 64185: case 64186: case 64187: case 64188: case 64189: case 64190: case 64191: case 64192: case 64193: case 64194: case 64195: case 64196: case 64197: case 64198: case 64199: case 64200: case 64201: case 64202: case 64203: case 64204: case 64205: case 64206: case 64207: case 64208: case 64209: case 64210: case 64211: case 64212: case 64213: case 64214: case 64215: case 64216: case 64217: return 15479 + c - 64112; case 64256: case 64257: case 64258: case 64259: case 64260: case 64261: case 64262: return 15585 + c - 64256; case 64275: case 64276: case 64277: case 64278: case 64279: return 15592 + c - 64275; case 64285: case 64286: case 64287: case 64288: case 64289: case 64290: case 64291: case 64292: case 64293: case 64294: case 64295: case 64296: case 64297: case 64298: case 64299: case 64300: case 64301: case 64302: case 64303: case 64304: case 64305: case 64306: case 64307: case 64308: case 64309: case 64310: return 15597 + c - 64285; case 64312: case 64313: case 64314: case 64315: case 64316: return 15623 + c - 64312; case 64318: return 15628; case 64320: case 64321: return 15629 + c - 64320; case 64323: case 64324: return 15631 + c - 64323; case 64326: case 64327: case 64328: case 64329: case 64330: case 64331: case 64332: case 64333: case 64334: case 64335: case 64336: case 64337: case 64338: case 64339: case 64340: case 64341: case 64342: case 64343: case 64344: case 64345: case 64346: case 64347: case 64348: case 64349: case 64350: case 64351: case 64352: case 64353: case 64354: case 64355: case 64356: case 64357: case 64358: case 64359: case 64360: case 64361: case 64362: case 64363: case 64364: case 64365: case 64366: case 64367: case 64368: case 64369: case 64370: case 64371: case 64372: case 64373: case 64374: case 64375: case 64376: case 64377: case 64378: case 64379: case 64380: case 64381: case 64382: case 64383: case 64384: case 64385: case 64386: case 64387: case 64388: case 64389: case 64390: case 64391: case 64392: case 64393: case 64394: case 64395: case 64396: case 64397: case 64398: case 64399: case 64400: case 64401: case 64402: case 64403: case 64404: case 64405: case 64406: case 64407: case 64408: case 64409: case 64410: case 64411: case 64412: case 64413: case 64414: case 64415: case 64416: case 64417: case 64418: case 64419: case 64420: case 64421: case 64422: case 64423: case 64424: case 64425: case 64426: case 64427: case 64428: case 64429: case 64430: case 64431: case 64432: case 64433: case 64434: case 64435: case 64436: case 64437: case 64438: case 64439: case 64440: case 64441: case 64442: case 64443: case 64444: case 64445: case 64446: case 64447: case 64448: case 64449: return 15633 + c - 64326; case 64467: case 64468: case 64469: case 64470: case 64471: case 64472: case 64473: case 64474: case 64475: case 64476: case 64477: case 64478: case 64479: case 64480: case 64481: case 64482: case 64483: case 64484: case 64485: case 64486: case 64487: case 64488: case 64489: case 64490: case 64491: case 64492: case 64493: case 64494: case 64495: case 64496: case 64497: case 64498: case 64499: case 64500: case 64501: case 64502: case 64503: case 64504: case 64505: case 64506: case 64507: case 64508: case 64509: case 64510: case 64511: case 64512: case 64513: case 64514: case 64515: case 64516: case 64517: case 64518: case 64519: case 64520: case 64521: case 64522: case 64523: case 64524: case 64525: case 64526: case 64527: case 64528: case 64529: case 64530: case 64531: case 64532: case 64533: case 64534: case 64535: case 64536: case 64537: case 64538: case 64539: case 64540: case 64541: case 64542: case 64543: case 64544: case 64545: case 64546: case 64547: case 64548: case 64549: case 64550: case 64551: case 64552: case 64553: case 64554: case 64555: case 64556: case 64557: case 64558: case 64559: case 64560: case 64561: case 64562: case 64563: case 64564: case 64565: case 64566: case 64567: case 64568: case 64569: case 64570: case 64571: case 64572: case 64573: case 64574: case 64575: case 64576: case 64577: case 64578: case 64579: case 64580: case 64581: case 64582: case 64583: case 64584: case 64585: case 64586: case 64587: case 64588: case 64589: case 64590: case 64591: case 64592: case 64593: case 64594: case 64595: case 64596: case 64597: case 64598: case 64599: case 64600: case 64601: case 64602: case 64603: case 64604: case 64605: case 64606: case 64607: case 64608: case 64609: case 64610: case 64611: case 64612: case 64613: case 64614: case 64615: case 64616: case 64617: case 64618: case 64619: case 64620: case 64621: case 64622: case 64623: case 64624: case 64625: case 64626: case 64627: case 64628: case 64629: case 64630: case 64631: case 64632: case 64633: case 64634: case 64635: case 64636: case 64637: case 64638: case 64639: case 64640: case 64641: case 64642: case 64643: case 64644: case 64645: case 64646: case 64647: case 64648: case 64649: case 64650: case 64651: case 64652: case 64653: case 64654: case 64655: case 64656: case 64657: case 64658: case 64659: case 64660: case 64661: case 64662: case 64663: case 64664: case 64665: case 64666: case 64667: case 64668: case 64669: case 64670: case 64671: case 64672: case 64673: case 64674: case 64675: case 64676: case 64677: case 64678: case 64679: case 64680: case 64681: case 64682: case 64683: case 64684: case 64685: case 64686: case 64687: case 64688: case 64689: case 64690: case 64691: case 64692: case 64693: case 64694: case 64695: case 64696: case 64697: case 64698: case 64699: case 64700: case 64701: case 64702: case 64703: case 64704: case 64705: case 64706: case 64707: case 64708: case 64709: case 64710: case 64711: case 64712: case 64713: case 64714: case 64715: case 64716: case 64717: case 64718: case 64719: case 64720: case 64721: case 64722: case 64723: case 64724: case 64725: case 64726: case 64727: case 64728: case 64729: case 64730: case 64731: case 64732: case 64733: case 64734: case 64735: case 64736: case 64737: case 64738: case 64739: case 64740: case 64741: case 64742: case 64743: case 64744: case 64745: case 64746: case 64747: case 64748: case 64749: case 64750: case 64751: case 64752: case 64753: case 64754: case 64755: case 64756: case 64757: case 64758: case 64759: case 64760: case 64761: case 64762: case 64763: case 64764: case 64765: case 64766: case 64767: case 64768: case 64769: case 64770: case 64771: case 64772: case 64773: case 64774: case 64775: case 64776: case 64777: case 64778: case 64779: case 64780: case 64781: case 64782: case 64783: case 64784: case 64785: case 64786: case 64787: case 64788: case 64789: case 64790: case 64791: case 64792: case 64793: case 64794: case 64795: case 64796: case 64797: case 64798: case 64799: case 64800: case 64801: case 64802: case 64803: case 64804: case 64805: case 64806: case 64807: case 64808: case 64809: case 64810: case 64811: case 64812: case 64813: case 64814: case 64815: case 64816: case 64817: case 64818: case 64819: case 64820: case 64821: case 64822: case 64823: case 64824: case 64825: case 64826: case 64827: case 64828: case 64829: case 64830: case 64831: return 15757 + c - 64467; case 64848: case 64849: case 64850: case 64851: case 64852: case 64853: case 64854: case 64855: case 64856: case 64857: case 64858: case 64859: case 64860: case 64861: case 64862: case 64863: case 64864: case 64865: case 64866: case 64867: case 64868: case 64869: case 64870: case 64871: case 64872: case 64873: case 64874: case 64875: case 64876: case 64877: case 64878: case 64879: case 64880: case 64881: case 64882: case 64883: case 64884: case 64885: case 64886: case 64887: case 64888: case 64889: case 64890: case 64891: case 64892: case 64893: case 64894: case 64895: case 64896: case 64897: case 64898: case 64899: case 64900: case 64901: case 64902: case 64903: case 64904: case 64905: case 64906: case 64907: case 64908: case 64909: case 64910: case 64911: return 16122 + c - 64848; case 64914: case 64915: case 64916: case 64917: case 64918: case 64919: case 64920: case 64921: case 64922: case 64923: case 64924: case 64925: case 64926: case 64927: case 64928: case 64929: case 64930: case 64931: case 64932: case 64933: case 64934: case 64935: case 64936: case 64937: case 64938: case 64939: case 64940: case 64941: case 64942: case 64943: case 64944: case 64945: case 64946: case 64947: case 64948: case 64949: case 64950: case 64951: case 64952: case 64953: case 64954: case 64955: case 64956: case 64957: case 64958: case 64959: case 64960: case 64961: case 64962: case 64963: case 64964: case 64965: case 64966: case 64967: return 16186 + c - 64914; case 65008: case 65009: case 65010: case 65011: case 65012: case 65013: case 65014: case 65015: case 65016: case 65017: case 65018: case 65019: case 65020: case 65021: return 16240 + c - 65008; case 65024: case 65025: case 65026: case 65027: case 65028: case 65029: case 65030: case 65031: case 65032: case 65033: case 65034: case 65035: case 65036: case 65037: case 65038: case 65039: case 65040: case 65041: case 65042: case 65043: case 65044: case 65045: case 65046: case 65047: case 65048: case 65049: return 16254 + c - 65024; case 65056: case 65057: case 65058: case 65059: case 65060: case 65061: case 65062: case 65063: case 65064: case 65065: case 65066: case 65067: case 65068: case 65069: case 65070: case 65071: case 65072: case 65073: case 65074: case 65075: case 65076: case 65077: case 65078: case 65079: case 65080: case 65081: case 65082: case 65083: case 65084: case 65085: case 65086: case 65087: case 65088: case 65089: case 65090: case 65091: case 65092: case 65093: case 65094: case 65095: case 65096: case 65097: case 65098: case 65099: case 65100: case 65101: case 65102: case 65103: case 65104: case 65105: case 65106: return 16280 + c - 65056; case 65108: case 65109: case 65110: case 65111: case 65112: case 65113: case 65114: case 65115: case 65116: case 65117: case 65118: case 65119: case 65120: case 65121: case 65122: case 65123: case 65124: case 65125: case 65126: return 16331 + c - 65108; case 65128: case 65129: case 65130: case 65131: return 16350 + c - 65128; case 65136: case 65137: case 65138: case 65139: case 65140: return 16354 + c - 65136; case 65142: case 65143: case 65144: case 65145: case 65146: case 65147: case 65148: case 65149: case 65150: case 65151: case 65152: case 65153: case 65154: case 65155: case 65156: case 65157: case 65158: case 65159: case 65160: case 65161: case 65162: case 65163: case 65164: case 65165: case 65166: case 65167: case 65168: case 65169: case 65170: case 65171: case 65172: case 65173: case 65174: case 65175: case 65176: case 65177: case 65178: case 65179: case 65180: case 65181: case 65182: case 65183: case 65184: case 65185: case 65186: case 65187: case 65188: case 65189: case 65190: case 65191: case 65192: case 65193: case 65194: case 65195: case 65196: case 65197: case 65198: case 65199: case 65200: case 65201: case 65202: case 65203: case 65204: case 65205: case 65206: case 65207: case 65208: case 65209: case 65210: case 65211: case 65212: case 65213: case 65214: case 65215: case 65216: case 65217: case 65218: case 65219: case 65220: case 65221: case 65222: case 65223: case 65224: case 65225: case 65226: case 65227: case 65228: case 65229: case 65230: case 65231: case 65232: case 65233: case 65234: case 65235: case 65236: case 65237: case 65238: case 65239: case 65240: case 65241: case 65242: case 65243: case 65244: case 65245: case 65246: case 65247: case 65248: case 65249: case 65250: case 65251: case 65252: case 65253: case 65254: case 65255: case 65256: case 65257: case 65258: case 65259: case 65260: case 65261: case 65262: case 65263: case 65264: case 65265: case 65266: case 65267: case 65268: case 65269: case 65270: case 65271: case 65272: case 65273: case 65274: case 65275: case 65276: return 16359 + c - 65142; case 65279: return 16494; case 65281: case 65282: case 65283: case 65284: case 65285: case 65286: case 65287: case 65288: case 65289: case 65290: case 65291: case 65292: case 65293: case 65294: case 65295: case 65296: case 65297: case 65298: case 65299: case 65300: case 65301: case 65302: case 65303: case 65304: case 65305: case 65306: case 65307: case 65308: case 65309: case 65310: case 65311: case 65312: case 65313: case 65314: case 65315: case 65316: case 65317: case 65318: case 65319: case 65320: case 65321: case 65322: case 65323: case 65324: case 65325: case 65326: case 65327: case 65328: case 65329: case 65330: case 65331: case 65332: case 65333: case 65334: case 65335: case 65336: case 65337: case 65338: case 65339: case 65340: case 65341: case 65342: case 65343: case 65344: case 65345: case 65346: case 65347: case 65348: case 65349: case 65350: case 65351: case 65352: case 65353: case 65354: case 65355: case 65356: case 65357: case 65358: case 65359: case 65360: case 65361: case 65362: case 65363: case 65364: case 65365: case 65366: case 65367: case 65368: case 65369: case 65370: case 65371: case 65372: case 65373: case 65374: case 65375: case 65376: case 65377: case 65378: case 65379: case 65380: case 65381: case 65382: case 65383: case 65384: case 65385: case 65386: case 65387: case 65388: case 65389: case 65390: case 65391: case 65392: case 65393: case 65394: case 65395: case 65396: case 65397: case 65398: case 65399: case 65400: case 65401: case 65402: case 65403: case 65404: case 65405: case 65406: case 65407: case 65408: case 65409: case 65410: case 65411: case 65412: case 65413: case 65414: case 65415: case 65416: case 65417: case 65418: case 65419: case 65420: case 65421: case 65422: case 65423: case 65424: case 65425: case 65426: case 65427: case 65428: case 65429: case 65430: case 65431: case 65432: case 65433: case 65434: case 65435: case 65436: case 65437: case 65438: case 65439: case 65440: case 65441: case 65442: case 65443: case 65444: case 65445: case 65446: case 65447: case 65448: case 65449: case 65450: case 65451: case 65452: case 65453: case 65454: case 65455: case 65456: case 65457: case 65458: case 65459: case 65460: case 65461: case 65462: case 65463: case 65464: case 65465: case 65466: case 65467: case 65468: case 65469: case 65470: return 16495 + c - 65281; case 65474: case 65475: case 65476: case 65477: case 65478: case 65479: return 16685 + c - 65474; case 65482: case 65483: case 65484: case 65485: case 65486: case 65487: return 16691 + c - 65482; case 65490: case 65491: case 65492: case 65493: case 65494: case 65495: return 16697 + c - 65490; case 65498: case 65499: case 65500: return 16703 + c - 65498; case 65504: case 65505: case 65506: case 65507: case 65508: case 65509: case 65510: return 16706 + c - 65504; case 65512: case 65513: case 65514: case 65515: case 65516: case 65517: case 65518: return 16713 + c - 65512; case 65529: case 65530: case 65531: case 65532: case 65533: return 16720 + c - 65529; case 65536: case 65537: case 65538: case 65539: case 65540: case 65541: case 65542: case 65543: case 65544: case 65545: case 65546: case 65547: return 16725 + c - 65536; case 65549: case 65550: case 65551: case 65552: case 65553: case 65554: case 65555: case 65556: case 65557: case 65558: case 65559: case 65560: case 65561: case 65562: case 65563: case 65564: case 65565: case 65566: case 65567: case 65568: case 65569: case 65570: case 65571: case 65572: case 65573: case 65574: return 16737 + c - 65549; case 65576: case 65577: case 65578: case 65579: case 65580: case 65581: case 65582: case 65583: case 65584: case 65585: case 65586: case 65587: case 65588: case 65589: case 65590: case 65591: case 65592: case 65593: case 65594: return 16763 + c - 65576; case 65596: case 65597: return 16782 + c - 65596; case 65599: case 65600: case 65601: case 65602: case 65603: case 65604: case 65605: case 65606: case 65607: case 65608: case 65609: case 65610: case 65611: case 65612: case 65613: return 16784 + c - 65599; case 65616: case 65617: case 65618: case 65619: case 65620: case 65621: case 65622: case 65623: case 65624: case 65625: case 65626: case 65627: case 65628: case 65629: return 16799 + c - 65616; case 65664: case 65665: case 65666: case 65667: case 65668: case 65669: case 65670: case 65671: case 65672: case 65673: case 65674: case 65675: case 65676: case 65677: case 65678: case 65679: case 65680: case 65681: case 65682: case 65683: case 65684: case 65685: case 65686: case 65687: case 65688: case 65689: case 65690: case 65691: case 65692: case 65693: case 65694: case 65695: case 65696: case 65697: case 65698: case 65699: case 65700: case 65701: case 65702: case 65703: case 65704: case 65705: case 65706: case 65707: case 65708: case 65709: case 65710: case 65711: case 65712: case 65713: case 65714: case 65715: case 65716: case 65717: case 65718: case 65719: case 65720: case 65721: case 65722: case 65723: case 65724: case 65725: case 65726: case 65727: case 65728: case 65729: case 65730: case 65731: case 65732: case 65733: case 65734: case 65735: case 65736: case 65737: case 65738: case 65739: case 65740: case 65741: case 65742: case 65743: case 65744: case 65745: case 65746: case 65747: case 65748: case 65749: case 65750: case 65751: case 65752: case 65753: case 65754: case 65755: case 65756: case 65757: case 65758: case 65759: case 65760: case 65761: case 65762: case 65763: case 65764: case 65765: case 65766: case 65767: case 65768: case 65769: case 65770: case 65771: case 65772: case 65773: case 65774: case 65775: case 65776: case 65777: case 65778: case 65779: case 65780: case 65781: case 65782: case 65783: case 65784: case 65785: case 65786: return 16813 + c - 65664; case 65792: case 65793: case 65794: return 16936 + c - 65792; case 65799: case 65800: case 65801: case 65802: case 65803: case 65804: case 65805: case 65806: case 65807: case 65808: case 65809: case 65810: case 65811: case 65812: case 65813: case 65814: case 65815: case 65816: case 65817: case 65818: case 65819: case 65820: case 65821: case 65822: case 65823: case 65824: case 65825: case 65826: case 65827: case 65828: case 65829: case 65830: case 65831: case 65832: case 65833: case 65834: case 65835: case 65836: case 65837: case 65838: case 65839: case 65840: case 65841: case 65842: case 65843: return 16939 + c - 65799; case 65847: case 65848: case 65849: case 65850: case 65851: case 65852: case 65853: case 65854: case 65855: case 65856: case 65857: case 65858: case 65859: case 65860: case 65861: case 65862: case 65863: case 65864: case 65865: case 65866: case 65867: case 65868: case 65869: case 65870: case 65871: case 65872: case 65873: case 65874: case 65875: case 65876: case 65877: case 65878: case 65879: case 65880: case 65881: case 65882: case 65883: case 65884: case 65885: case 65886: case 65887: case 65888: case 65889: case 65890: case 65891: case 65892: case 65893: case 65894: case 65895: case 65896: case 65897: case 65898: case 65899: case 65900: case 65901: case 65902: case 65903: case 65904: case 65905: case 65906: case 65907: case 65908: case 65909: case 65910: case 65911: case 65912: case 65913: case 65914: case 65915: case 65916: case 65917: case 65918: case 65919: case 65920: case 65921: case 65922: case 65923: case 65924: case 65925: case 65926: case 65927: case 65928: case 65929: case 65930: case 65931: case 65932: case 65933: case 65934: return 16984 + c - 65847; case 65936: case 65937: case 65938: case 65939: case 65940: case 65941: case 65942: case 65943: case 65944: case 65945: case 65946: case 65947: return 17072 + c - 65936; case 65952: return 17084; case 66000: case 66001: case 66002: case 66003: case 66004: case 66005: case 66006: case 66007: case 66008: case 66009: case 66010: case 66011: case 66012: case 66013: case 66014: case 66015: case 66016: case 66017: case 66018: case 66019: case 66020: case 66021: case 66022: case 66023: case 66024: case 66025: case 66026: case 66027: case 66028: case 66029: case 66030: case 66031: case 66032: case 66033: case 66034: case 66035: case 66036: case 66037: case 66038: case 66039: case 66040: case 66041: case 66042: case 66043: case 66044: case 66045: return 17085 + c - 66000; case 66176: case 66177: case 66178: case 66179: case 66180: case 66181: case 66182: case 66183: case 66184: case 66185: case 66186: case 66187: case 66188: case 66189: case 66190: case 66191: case 66192: case 66193: case 66194: case 66195: case 66196: case 66197: case 66198: case 66199: case 66200: case 66201: case 66202: case 66203: case 66204: return 17131 + c - 66176; case 66208: case 66209: case 66210: case 66211: case 66212: case 66213: case 66214: case 66215: case 66216: case 66217: case 66218: case 66219: case 66220: case 66221: case 66222: case 66223: case 66224: case 66225: case 66226: case 66227: case 66228: case 66229: case 66230: case 66231: case 66232: case 66233: case 66234: case 66235: case 66236: case 66237: case 66238: case 66239: case 66240: case 66241: case 66242: case 66243: case 66244: case 66245: case 66246: case 66247: case 66248: case 66249: case 66250: case 66251: case 66252: case 66253: case 66254: case 66255: case 66256: return 17160 + c - 66208; case 66272: case 66273: case 66274: case 66275: case 66276: case 66277: case 66278: case 66279: case 66280: case 66281: case 66282: case 66283: case 66284: case 66285: case 66286: case 66287: case 66288: case 66289: case 66290: case 66291: case 66292: case 66293: case 66294: case 66295: case 66296: case 66297: case 66298: case 66299: return 17209 + c - 66272; case 66304: case 66305: case 66306: case 66307: case 66308: case 66309: case 66310: case 66311: case 66312: case 66313: case 66314: case 66315: case 66316: case 66317: case 66318: case 66319: case 66320: case 66321: case 66322: case 66323: case 66324: case 66325: case 66326: case 66327: case 66328: case 66329: case 66330: case 66331: case 66332: case 66333: case 66334: case 66335: case 66336: case 66337: case 66338: case 66339: return 17237 + c - 66304; case 66349: case 66350: case 66351: case 66352: case 66353: case 66354: case 66355: case 66356: case 66357: case 66358: case 66359: case 66360: case 66361: case 66362: case 66363: case 66364: case 66365: case 66366: case 66367: case 66368: case 66369: case 66370: case 66371: case 66372: case 66373: case 66374: case 66375: case 66376: case 66377: case 66378: return 17273 + c - 66349; case 66384: case 66385: case 66386: case 66387: case 66388: case 66389: case 66390: case 66391: case 66392: case 66393: case 66394: case 66395: case 66396: case 66397: case 66398: case 66399: case 66400: case 66401: case 66402: case 66403: case 66404: case 66405: case 66406: case 66407: case 66408: case 66409: case 66410: case 66411: case 66412: case 66413: case 66414: case 66415: case 66416: case 66417: case 66418: case 66419: case 66420: case 66421: case 66422: case 66423: case 66424: case 66425: case 66426: return 17303 + c - 66384; case 66432: case 66433: case 66434: case 66435: case 66436: case 66437: case 66438: case 66439: case 66440: case 66441: case 66442: case 66443: case 66444: case 66445: case 66446: case 66447: case 66448: case 66449: case 66450: case 66451: case 66452: case 66453: case 66454: case 66455: case 66456: case 66457: case 66458: case 66459: case 66460: case 66461: return 17346 + c - 66432; case 66463: case 66464: case 66465: case 66466: case 66467: case 66468: case 66469: case 66470: case 66471: case 66472: case 66473: case 66474: case 66475: case 66476: case 66477: case 66478: case 66479: case 66480: case 66481: case 66482: case 66483: case 66484: case 66485: case 66486: case 66487: case 66488: case 66489: case 66490: case 66491: case 66492: case 66493: case 66494: case 66495: case 66496: case 66497: case 66498: case 66499: return 17376 + c - 66463; case 66504: case 66505: case 66506: case 66507: case 66508: case 66509: case 66510: case 66511: case 66512: case 66513: case 66514: case 66515: case 66516: case 66517: return 17413 + c - 66504; case 66560: case 66561: case 66562: case 66563: case 66564: case 66565: case 66566: case 66567: case 66568: case 66569: case 66570: case 66571: case 66572: case 66573: case 66574: case 66575: case 66576: case 66577: case 66578: case 66579: case 66580: case 66581: case 66582: case 66583: case 66584: case 66585: case 66586: case 66587: case 66588: case 66589: case 66590: case 66591: case 66592: case 66593: case 66594: case 66595: case 66596: case 66597: case 66598: case 66599: case 66600: case 66601: case 66602: case 66603: case 66604: case 66605: case 66606: case 66607: case 66608: case 66609: case 66610: case 66611: case 66612: case 66613: case 66614: case 66615: case 66616: case 66617: case 66618: case 66619: case 66620: case 66621: case 66622: case 66623: case 66624: case 66625: case 66626: case 66627: case 66628: case 66629: case 66630: case 66631: case 66632: case 66633: case 66634: case 66635: case 66636: case 66637: case 66638: case 66639: case 66640: case 66641: case 66642: case 66643: case 66644: case 66645: case 66646: case 66647: case 66648: case 66649: case 66650: case 66651: case 66652: case 66653: case 66654: case 66655: case 66656: case 66657: case 66658: case 66659: case 66660: case 66661: case 66662: case 66663: case 66664: case 66665: case 66666: case 66667: case 66668: case 66669: case 66670: case 66671: case 66672: case 66673: case 66674: case 66675: case 66676: case 66677: case 66678: case 66679: case 66680: case 66681: case 66682: case 66683: case 66684: case 66685: case 66686: case 66687: case 66688: case 66689: case 66690: case 66691: case 66692: case 66693: case 66694: case 66695: case 66696: case 66697: case 66698: case 66699: case 66700: case 66701: case 66702: case 66703: case 66704: case 66705: case 66706: case 66707: case 66708: case 66709: case 66710: case 66711: case 66712: case 66713: case 66714: case 66715: case 66716: case 66717: return 17427 + c - 66560; case 66720: case 66721: case 66722: case 66723: case 66724: case 66725: case 66726: case 66727: case 66728: case 66729: return 17585 + c - 66720; case 66736: case 66737: case 66738: case 66739: case 66740: case 66741: case 66742: case 66743: case 66744: case 66745: case 66746: case 66747: case 66748: case 66749: case 66750: case 66751: case 66752: case 66753: case 66754: case 66755: case 66756: case 66757: case 66758: case 66759: case 66760: case 66761: case 66762: case 66763: case 66764: case 66765: case 66766: case 66767: case 66768: case 66769: case 66770: case 66771: return 17595 + c - 66736; case 66776: case 66777: case 66778: case 66779: case 66780: case 66781: case 66782: case 66783: case 66784: case 66785: case 66786: case 66787: case 66788: case 66789: case 66790: case 66791: case 66792: case 66793: case 66794: case 66795: case 66796: case 66797: case 66798: case 66799: case 66800: case 66801: case 66802: case 66803: case 66804: case 66805: case 66806: case 66807: case 66808: case 66809: case 66810: case 66811: return 17631 + c - 66776; case 66816: case 66817: case 66818: case 66819: case 66820: case 66821: case 66822: case 66823: case 66824: case 66825: case 66826: case 66827: case 66828: case 66829: case 66830: case 66831: case 66832: case 66833: case 66834: case 66835: case 66836: case 66837: case 66838: case 66839: case 66840: case 66841: case 66842: case 66843: case 66844: case 66845: case 66846: case 66847: case 66848: case 66849: case 66850: case 66851: case 66852: case 66853: case 66854: case 66855: return 17667 + c - 66816; case 66864: case 66865: case 66866: case 66867: case 66868: case 66869: case 66870: case 66871: case 66872: case 66873: case 66874: case 66875: case 66876: case 66877: case 66878: case 66879: case 66880: case 66881: case 66882: case 66883: case 66884: case 66885: case 66886: case 66887: case 66888: case 66889: case 66890: case 66891: case 66892: case 66893: case 66894: case 66895: case 66896: case 66897: case 66898: case 66899: case 66900: case 66901: case 66902: case 66903: case 66904: case 66905: case 66906: case 66907: case 66908: case 66909: case 66910: case 66911: case 66912: case 66913: case 66914: case 66915: return 17707 + c - 66864; case 66927: return 17759; case 67072: case 67073: case 67074: case 67075: case 67076: case 67077: case 67078: case 67079: case 67080: case 67081: case 67082: case 67083: case 67084: case 67085: case 67086: case 67087: case 67088: case 67089: case 67090: case 67091: case 67092: case 67093: case 67094: case 67095: case 67096: case 67097: case 67098: case 67099: case 67100: case 67101: case 67102: case 67103: case 67104: case 67105: case 67106: case 67107: case 67108: case 67109: case 67110: case 67111: case 67112: case 67113: case 67114: case 67115: case 67116: case 67117: case 67118: case 67119: case 67120: case 67121: case 67122: case 67123: case 67124: case 67125: case 67126: case 67127: case 67128: case 67129: case 67130: case 67131: case 67132: case 67133: case 67134: case 67135: case 67136: case 67137: case 67138: case 67139: case 67140: case 67141: case 67142: case 67143: case 67144: case 67145: case 67146: case 67147: case 67148: case 67149: case 67150: case 67151: case 67152: case 67153: case 67154: case 67155: case 67156: case 67157: case 67158: case 67159: case 67160: case 67161: case 67162: case 67163: case 67164: case 67165: case 67166: case 67167: case 67168: case 67169: case 67170: case 67171: case 67172: case 67173: case 67174: case 67175: case 67176: case 67177: case 67178: case 67179: case 67180: case 67181: case 67182: case 67183: case 67184: case 67185: case 67186: case 67187: case 67188: case 67189: case 67190: case 67191: case 67192: case 67193: case 67194: case 67195: case 67196: case 67197: case 67198: case 67199: case 67200: case 67201: case 67202: case 67203: case 67204: case 67205: case 67206: case 67207: case 67208: case 67209: case 67210: case 67211: case 67212: case 67213: case 67214: case 67215: case 67216: case 67217: case 67218: case 67219: case 67220: case 67221: case 67222: case 67223: case 67224: case 67225: case 67226: case 67227: case 67228: case 67229: case 67230: case 67231: case 67232: case 67233: case 67234: case 67235: case 67236: case 67237: case 67238: case 67239: case 67240: case 67241: case 67242: case 67243: case 67244: case 67245: case 67246: case 67247: case 67248: case 67249: case 67250: case 67251: case 67252: case 67253: case 67254: case 67255: case 67256: case 67257: case 67258: case 67259: case 67260: case 67261: case 67262: case 67263: case 67264: case 67265: case 67266: case 67267: case 67268: case 67269: case 67270: case 67271: case 67272: case 67273: case 67274: case 67275: case 67276: case 67277: case 67278: case 67279: case 67280: case 67281: case 67282: case 67283: case 67284: case 67285: case 67286: case 67287: case 67288: case 67289: case 67290: case 67291: case 67292: case 67293: case 67294: case 67295: case 67296: case 67297: case 67298: case 67299: case 67300: case 67301: case 67302: case 67303: case 67304: case 67305: case 67306: case 67307: case 67308: case 67309: case 67310: case 67311: case 67312: case 67313: case 67314: case 67315: case 67316: case 67317: case 67318: case 67319: case 67320: case 67321: case 67322: case 67323: case 67324: case 67325: case 67326: case 67327: case 67328: case 67329: case 67330: case 67331: case 67332: case 67333: case 67334: case 67335: case 67336: case 67337: case 67338: case 67339: case 67340: case 67341: case 67342: case 67343: case 67344: case 67345: case 67346: case 67347: case 67348: case 67349: case 67350: case 67351: case 67352: case 67353: case 67354: case 67355: case 67356: case 67357: case 67358: case 67359: case 67360: case 67361: case 67362: case 67363: case 67364: case 67365: case 67366: case 67367: case 67368: case 67369: case 67370: case 67371: case 67372: case 67373: case 67374: case 67375: case 67376: case 67377: case 67378: case 67379: case 67380: case 67381: case 67382: return 17760 + c - 67072; case 67392: case 67393: case 67394: case 67395: case 67396: case 67397: case 67398: case 67399: case 67400: case 67401: case 67402: case 67403: case 67404: case 67405: case 67406: case 67407: case 67408: case 67409: case 67410: case 67411: case 67412: case 67413: return 18071 + c - 67392; case 67424: case 67425: case 67426: case 67427: case 67428: case 67429: case 67430: case 67431: return 18093 + c - 67424; case 67584: case 67585: case 67586: case 67587: case 67588: case 67589: return 18101 + c - 67584; case 67592: return 18107; case 67594: case 67595: case 67596: case 67597: case 67598: case 67599: case 67600: case 67601: case 67602: case 67603: case 67604: case 67605: case 67606: case 67607: case 67608: case 67609: case 67610: case 67611: case 67612: case 67613: case 67614: case 67615: case 67616: case 67617: case 67618: case 67619: case 67620: case 67621: case 67622: case 67623: case 67624: case 67625: case 67626: case 67627: case 67628: case 67629: case 67630: case 67631: case 67632: case 67633: case 67634: case 67635: case 67636: case 67637: return 18108 + c - 67594; case 67639: case 67640: return 18152 + c - 67639; case 67644: return 18154; case 67647: case 67648: case 67649: case 67650: case 67651: case 67652: case 67653: case 67654: case 67655: case 67656: case 67657: case 67658: case 67659: case 67660: case 67661: case 67662: case 67663: case 67664: case 67665: case 67666: case 67667: case 67668: case 67669: return 18155 + c - 67647; case 67671: case 67672: case 67673: case 67674: case 67675: case 67676: case 67677: case 67678: case 67679: case 67680: case 67681: case 67682: case 67683: case 67684: case 67685: case 67686: case 67687: case 67688: case 67689: case 67690: case 67691: case 67692: case 67693: case 67694: case 67695: case 67696: case 67697: case 67698: case 67699: case 67700: case 67701: case 67702: case 67703: case 67704: case 67705: case 67706: case 67707: case 67708: case 67709: case 67710: case 67711: case 67712: case 67713: case 67714: case 67715: case 67716: case 67717: case 67718: case 67719: case 67720: case 67721: case 67722: case 67723: case 67724: case 67725: case 67726: case 67727: case 67728: case 67729: case 67730: case 67731: case 67732: case 67733: case 67734: case 67735: case 67736: case 67737: case 67738: case 67739: case 67740: case 67741: case 67742: return 18178 + c - 67671; case 67751: case 67752: case 67753: case 67754: case 67755: case 67756: case 67757: case 67758: case 67759: return 18250 + c - 67751; case 67808: case 67809: case 67810: case 67811: case 67812: case 67813: case 67814: case 67815: case 67816: case 67817: case 67818: case 67819: case 67820: case 67821: case 67822: case 67823: case 67824: case 67825: case 67826: return 18259 + c - 67808; case 67828: case 67829: return 18278 + c - 67828; case 67835: case 67836: case 67837: case 67838: case 67839: case 67840: case 67841: case 67842: case 67843: case 67844: case 67845: case 67846: case 67847: case 67848: case 67849: case 67850: case 67851: case 67852: case 67853: case 67854: case 67855: case 67856: case 67857: case 67858: case 67859: case 67860: case 67861: case 67862: case 67863: case 67864: case 67865: case 67866: case 67867: return 18280 + c - 67835; case 67871: case 67872: case 67873: case 67874: case 67875: case 67876: case 67877: case 67878: case 67879: case 67880: case 67881: case 67882: case 67883: case 67884: case 67885: case 67886: case 67887: case 67888: case 67889: case 67890: case 67891: case 67892: case 67893: case 67894: case 67895: case 67896: case 67897: return 18313 + c - 67871; case 67903: return 18340; case 67968: case 67969: case 67970: case 67971: case 67972: case 67973: case 67974: case 67975: case 67976: case 67977: case 67978: case 67979: case 67980: case 67981: case 67982: case 67983: case 67984: case 67985: case 67986: case 67987: case 67988: case 67989: case 67990: case 67991: case 67992: case 67993: case 67994: case 67995: case 67996: case 67997: case 67998: case 67999: case 68000: case 68001: case 68002: case 68003: case 68004: case 68005: case 68006: case 68007: case 68008: case 68009: case 68010: case 68011: case 68012: case 68013: case 68014: case 68015: case 68016: case 68017: case 68018: case 68019: case 68020: case 68021: case 68022: case 68023: return 18341 + c - 67968; case 68028: case 68029: case 68030: case 68031: case 68032: case 68033: case 68034: case 68035: case 68036: case 68037: case 68038: case 68039: case 68040: case 68041: case 68042: case 68043: case 68044: case 68045: case 68046: case 68047: return 18397 + c - 68028; case 68050: case 68051: case 68052: case 68053: case 68054: case 68055: case 68056: case 68057: case 68058: case 68059: case 68060: case 68061: case 68062: case 68063: case 68064: case 68065: case 68066: case 68067: case 68068: case 68069: case 68070: case 68071: case 68072: case 68073: case 68074: case 68075: case 68076: case 68077: case 68078: case 68079: case 68080: case 68081: case 68082: case 68083: case 68084: case 68085: case 68086: case 68087: case 68088: case 68089: case 68090: case 68091: case 68092: case 68093: case 68094: case 68095: case 68096: case 68097: case 68098: case 68099: return 18417 + c - 68050; case 68101: case 68102: return 18467 + c - 68101; case 68108: case 68109: case 68110: case 68111: case 68112: case 68113: case 68114: case 68115: return 18469 + c - 68108; case 68117: case 68118: case 68119: return 18477 + c - 68117; case 68121: case 68122: case 68123: case 68124: case 68125: case 68126: case 68127: case 68128: case 68129: case 68130: case 68131: case 68132: case 68133: case 68134: case 68135: case 68136: case 68137: case 68138: case 68139: case 68140: case 68141: case 68142: case 68143: case 68144: case 68145: case 68146: case 68147: case 68148: case 68149: return 18480 + c - 68121; case 68152: case 68153: case 68154: return 18509 + c - 68152; case 68159: case 68160: case 68161: case 68162: case 68163: case 68164: case 68165: case 68166: case 68167: case 68168: return 18512 + c - 68159; case 68176: case 68177: case 68178: case 68179: case 68180: case 68181: case 68182: case 68183: case 68184: return 18522 + c - 68176; case 68192: case 68193: case 68194: case 68195: case 68196: case 68197: case 68198: case 68199: case 68200: case 68201: case 68202: case 68203: case 68204: case 68205: case 68206: case 68207: case 68208: case 68209: case 68210: case 68211: case 68212: case 68213: case 68214: case 68215: case 68216: case 68217: case 68218: case 68219: case 68220: case 68221: case 68222: case 68223: case 68224: case 68225: case 68226: case 68227: case 68228: case 68229: case 68230: case 68231: case 68232: case 68233: case 68234: case 68235: case 68236: case 68237: case 68238: case 68239: case 68240: case 68241: case 68242: case 68243: case 68244: case 68245: case 68246: case 68247: case 68248: case 68249: case 68250: case 68251: case 68252: case 68253: case 68254: case 68255: return 18531 + c - 68192; case 68288: case 68289: case 68290: case 68291: case 68292: case 68293: case 68294: case 68295: case 68296: case 68297: case 68298: case 68299: case 68300: case 68301: case 68302: case 68303: case 68304: case 68305: case 68306: case 68307: case 68308: case 68309: case 68310: case 68311: case 68312: case 68313: case 68314: case 68315: case 68316: case 68317: case 68318: case 68319: case 68320: case 68321: case 68322: case 68323: case 68324: case 68325: case 68326: return 18595 + c - 68288; case 68331: case 68332: case 68333: case 68334: case 68335: case 68336: case 68337: case 68338: case 68339: case 68340: case 68341: case 68342: return 18634 + c - 68331; case 68352: case 68353: case 68354: case 68355: case 68356: case 68357: case 68358: case 68359: case 68360: case 68361: case 68362: case 68363: case 68364: case 68365: case 68366: case 68367: case 68368: case 68369: case 68370: case 68371: case 68372: case 68373: case 68374: case 68375: case 68376: case 68377: case 68378: case 68379: case 68380: case 68381: case 68382: case 68383: case 68384: case 68385: case 68386: case 68387: case 68388: case 68389: case 68390: case 68391: case 68392: case 68393: case 68394: case 68395: case 68396: case 68397: case 68398: case 68399: case 68400: case 68401: case 68402: case 68403: case 68404: case 68405: return 18646 + c - 68352; case 68409: case 68410: case 68411: case 68412: case 68413: case 68414: case 68415: case 68416: case 68417: case 68418: case 68419: case 68420: case 68421: case 68422: case 68423: case 68424: case 68425: case 68426: case 68427: case 68428: case 68429: case 68430: case 68431: case 68432: case 68433: case 68434: case 68435: case 68436: case 68437: return 18700 + c - 68409; case 68440: case 68441: case 68442: case 68443: case 68444: case 68445: case 68446: case 68447: case 68448: case 68449: case 68450: case 68451: case 68452: case 68453: case 68454: case 68455: case 68456: case 68457: case 68458: case 68459: case 68460: case 68461: case 68462: case 68463: case 68464: case 68465: case 68466: return 18729 + c - 68440; case 68472: case 68473: case 68474: case 68475: case 68476: case 68477: case 68478: case 68479: case 68480: case 68481: case 68482: case 68483: case 68484: case 68485: case 68486: case 68487: case 68488: case 68489: case 68490: case 68491: case 68492: case 68493: case 68494: case 68495: case 68496: case 68497: return 18756 + c - 68472; case 68505: case 68506: case 68507: case 68508: return 18782 + c - 68505; case 68521: case 68522: case 68523: case 68524: case 68525: case 68526: case 68527: return 18786 + c - 68521; case 68608: case 68609: case 68610: case 68611: case 68612: case 68613: case 68614: case 68615: case 68616: case 68617: case 68618: case 68619: case 68620: case 68621: case 68622: case 68623: case 68624: case 68625: case 68626: case 68627: case 68628: case 68629: case 68630: case 68631: case 68632: case 68633: case 68634: case 68635: case 68636: case 68637: case 68638: case 68639: case 68640: case 68641: case 68642: case 68643: case 68644: case 68645: case 68646: case 68647: case 68648: case 68649: case 68650: case 68651: case 68652: case 68653: case 68654: case 68655: case 68656: case 68657: case 68658: case 68659: case 68660: case 68661: case 68662: case 68663: case 68664: case 68665: case 68666: case 68667: case 68668: case 68669: case 68670: case 68671: case 68672: case 68673: case 68674: case 68675: case 68676: case 68677: case 68678: case 68679: case 68680: return 18793 + c - 68608; case 68736: case 68737: case 68738: case 68739: case 68740: case 68741: case 68742: case 68743: case 68744: case 68745: case 68746: case 68747: case 68748: case 68749: case 68750: case 68751: case 68752: case 68753: case 68754: case 68755: case 68756: case 68757: case 68758: case 68759: case 68760: case 68761: case 68762: case 68763: case 68764: case 68765: case 68766: case 68767: case 68768: case 68769: case 68770: case 68771: case 68772: case 68773: case 68774: case 68775: case 68776: case 68777: case 68778: case 68779: case 68780: case 68781: case 68782: case 68783: case 68784: case 68785: case 68786: return 18866 + c - 68736; case 68800: case 68801: case 68802: case 68803: case 68804: case 68805: case 68806: case 68807: case 68808: case 68809: case 68810: case 68811: case 68812: case 68813: case 68814: case 68815: case 68816: case 68817: case 68818: case 68819: case 68820: case 68821: case 68822: case 68823: case 68824: case 68825: case 68826: case 68827: case 68828: case 68829: case 68830: case 68831: case 68832: case 68833: case 68834: case 68835: case 68836: case 68837: case 68838: case 68839: case 68840: case 68841: case 68842: case 68843: case 68844: case 68845: case 68846: case 68847: case 68848: case 68849: case 68850: return 18917 + c - 68800; case 68858: case 68859: case 68860: case 68861: case 68862: case 68863: case 68864: case 68865: case 68866: case 68867: case 68868: case 68869: case 68870: case 68871: case 68872: case 68873: case 68874: case 68875: case 68876: case 68877: case 68878: case 68879: case 68880: case 68881: case 68882: case 68883: case 68884: case 68885: case 68886: case 68887: case 68888: case 68889: case 68890: case 68891: case 68892: case 68893: case 68894: case 68895: case 68896: case 68897: case 68898: case 68899: case 68900: case 68901: case 68902: case 68903: return 18968 + c - 68858; case 68912: case 68913: case 68914: case 68915: case 68916: case 68917: case 68918: case 68919: case 68920: case 68921: return 19014 + c - 68912; case 69216: case 69217: case 69218: case 69219: case 69220: case 69221: case 69222: case 69223: case 69224: case 69225: case 69226: case 69227: case 69228: case 69229: case 69230: case 69231: case 69232: case 69233: case 69234: case 69235: case 69236: case 69237: case 69238: case 69239: case 69240: case 69241: case 69242: case 69243: case 69244: case 69245: case 69246: return 19024 + c - 69216; case 69376: case 69377: case 69378: case 69379: case 69380: case 69381: case 69382: case 69383: case 69384: case 69385: case 69386: case 69387: case 69388: case 69389: case 69390: case 69391: case 69392: case 69393: case 69394: case 69395: case 69396: case 69397: case 69398: case 69399: case 69400: case 69401: case 69402: case 69403: case 69404: case 69405: case 69406: case 69407: case 69408: case 69409: case 69410: case 69411: case 69412: case 69413: case 69414: case 69415: return 19055 + c - 69376; case 69424: case 69425: case 69426: case 69427: case 69428: case 69429: case 69430: case 69431: case 69432: case 69433: case 69434: case 69435: case 69436: case 69437: case 69438: case 69439: case 69440: case 69441: case 69442: case 69443: case 69444: case 69445: case 69446: case 69447: case 69448: case 69449: case 69450: case 69451: case 69452: case 69453: case 69454: case 69455: case 69456: case 69457: case 69458: case 69459: case 69460: case 69461: case 69462: case 69463: case 69464: case 69465: return 19095 + c - 69424; case 69600: case 69601: case 69602: case 69603: case 69604: case 69605: case 69606: case 69607: case 69608: case 69609: case 69610: case 69611: case 69612: case 69613: case 69614: case 69615: case 69616: case 69617: case 69618: case 69619: case 69620: case 69621: case 69622: return 19137 + c - 69600; case 69632: case 69633: case 69634: case 69635: case 69636: case 69637: case 69638: case 69639: case 69640: case 69641: case 69642: case 69643: case 69644: case 69645: case 69646: case 69647: case 69648: case 69649: case 69650: case 69651: case 69652: case 69653: case 69654: case 69655: case 69656: case 69657: case 69658: case 69659: case 69660: case 69661: case 69662: case 69663: case 69664: case 69665: case 69666: case 69667: case 69668: case 69669: case 69670: case 69671: case 69672: case 69673: case 69674: case 69675: case 69676: case 69677: case 69678: case 69679: case 69680: case 69681: case 69682: case 69683: case 69684: case 69685: case 69686: case 69687: case 69688: case 69689: case 69690: case 69691: case 69692: case 69693: case 69694: case 69695: case 69696: case 69697: case 69698: case 69699: case 69700: case 69701: case 69702: case 69703: case 69704: case 69705: case 69706: case 69707: case 69708: case 69709: return 19160 + c - 69632; case 69714: case 69715: case 69716: case 69717: case 69718: case 69719: case 69720: case 69721: case 69722: case 69723: case 69724: case 69725: case 69726: case 69727: case 69728: case 69729: case 69730: case 69731: case 69732: case 69733: case 69734: case 69735: case 69736: case 69737: case 69738: case 69739: case 69740: case 69741: case 69742: case 69743: return 19238 + c - 69714; case 69759: case 69760: case 69761: case 69762: case 69763: case 69764: case 69765: case 69766: case 69767: case 69768: case 69769: case 69770: case 69771: case 69772: case 69773: case 69774: case 69775: case 69776: case 69777: case 69778: case 69779: case 69780: case 69781: case 69782: case 69783: case 69784: case 69785: case 69786: case 69787: case 69788: case 69789: case 69790: case 69791: case 69792: case 69793: case 69794: case 69795: case 69796: case 69797: case 69798: case 69799: case 69800: case 69801: case 69802: case 69803: case 69804: case 69805: case 69806: case 69807: case 69808: case 69809: case 69810: case 69811: case 69812: case 69813: case 69814: case 69815: case 69816: case 69817: case 69818: case 69819: case 69820: case 69821: case 69822: case 69823: case 69824: case 69825: return 19268 + c - 69759; case 69837: return 19335; case 69840: case 69841: case 69842: case 69843: case 69844: case 69845: case 69846: case 69847: case 69848: case 69849: case 69850: case 69851: case 69852: case 69853: case 69854: case 69855: case 69856: case 69857: case 69858: case 69859: case 69860: case 69861: case 69862: case 69863: case 69864: return 19336 + c - 69840; case 69872: case 69873: case 69874: case 69875: case 69876: case 69877: case 69878: case 69879: case 69880: case 69881: return 19361 + c - 69872; case 69888: case 69889: case 69890: case 69891: case 69892: case 69893: case 69894: case 69895: case 69896: case 69897: case 69898: case 69899: case 69900: case 69901: case 69902: case 69903: case 69904: case 69905: case 69906: case 69907: case 69908: case 69909: case 69910: case 69911: case 69912: case 69913: case 69914: case 69915: case 69916: case 69917: case 69918: case 69919: case 69920: case 69921: case 69922: case 69923: case 69924: case 69925: case 69926: case 69927: case 69928: case 69929: case 69930: case 69931: case 69932: case 69933: case 69934: case 69935: case 69936: case 69937: case 69938: case 69939: case 69940: return 19371 + c - 69888; case 69942: case 69943: case 69944: case 69945: case 69946: case 69947: case 69948: case 69949: case 69950: case 69951: case 69952: case 69953: case 69954: case 69955: case 69956: case 69957: case 69958: return 19424 + c - 69942; case 69968: case 69969: case 69970: case 69971: case 69972: case 69973: case 69974: case 69975: case 69976: case 69977: case 69978: case 69979: case 69980: case 69981: case 69982: case 69983: case 69984: case 69985: case 69986: case 69987: case 69988: case 69989: case 69990: case 69991: case 69992: case 69993: case 69994: case 69995: case 69996: case 69997: case 69998: case 69999: case 70000: case 70001: case 70002: case 70003: case 70004: case 70005: case 70006: return 19441 + c - 69968; case 70016: case 70017: case 70018: case 70019: case 70020: case 70021: case 70022: case 70023: case 70024: case 70025: case 70026: case 70027: case 70028: case 70029: case 70030: case 70031: case 70032: case 70033: case 70034: case 70035: case 70036: case 70037: case 70038: case 70039: case 70040: case 70041: case 70042: case 70043: case 70044: case 70045: case 70046: case 70047: case 70048: case 70049: case 70050: case 70051: case 70052: case 70053: case 70054: case 70055: case 70056: case 70057: case 70058: case 70059: case 70060: case 70061: case 70062: case 70063: case 70064: case 70065: case 70066: case 70067: case 70068: case 70069: case 70070: case 70071: case 70072: case 70073: case 70074: case 70075: case 70076: case 70077: case 70078: case 70079: case 70080: case 70081: case 70082: case 70083: case 70084: case 70085: case 70086: case 70087: case 70088: case 70089: case 70090: case 70091: case 70092: case 70093: return 19480 + c - 70016; case 70096: case 70097: case 70098: case 70099: case 70100: case 70101: case 70102: case 70103: case 70104: case 70105: case 70106: case 70107: case 70108: case 70109: case 70110: case 70111: return 19558 + c - 70096; case 70113: case 70114: case 70115: case 70116: case 70117: case 70118: case 70119: case 70120: case 70121: case 70122: case 70123: case 70124: case 70125: case 70126: case 70127: case 70128: case 70129: case 70130: case 70131: case 70132: return 19574 + c - 70113; case 70144: case 70145: case 70146: case 70147: case 70148: case 70149: case 70150: case 70151: case 70152: case 70153: case 70154: case 70155: case 70156: case 70157: case 70158: case 70159: case 70160: case 70161: return 19594 + c - 70144; case 70163: case 70164: case 70165: case 70166: case 70167: case 70168: case 70169: case 70170: case 70171: case 70172: case 70173: case 70174: case 70175: case 70176: case 70177: case 70178: case 70179: case 70180: case 70181: case 70182: case 70183: case 70184: case 70185: case 70186: case 70187: case 70188: case 70189: case 70190: case 70191: case 70192: case 70193: case 70194: case 70195: case 70196: case 70197: case 70198: case 70199: case 70200: case 70201: case 70202: case 70203: case 70204: case 70205: case 70206: return 19612 + c - 70163; case 70272: case 70273: case 70274: case 70275: case 70276: case 70277: case 70278: return 19656 + c - 70272; case 70280: return 19663; case 70282: case 70283: case 70284: case 70285: return 19664 + c - 70282; case 70287: case 70288: case 70289: case 70290: case 70291: case 70292: case 70293: case 70294: case 70295: case 70296: case 70297: case 70298: case 70299: case 70300: case 70301: return 19668 + c - 70287; case 70303: case 70304: case 70305: case 70306: case 70307: case 70308: case 70309: case 70310: case 70311: case 70312: case 70313: return 19683 + c - 70303; case 70320: case 70321: case 70322: case 70323: case 70324: case 70325: case 70326: case 70327: case 70328: case 70329: case 70330: case 70331: case 70332: case 70333: case 70334: case 70335: case 70336: case 70337: case 70338: case 70339: case 70340: case 70341: case 70342: case 70343: case 70344: case 70345: case 70346: case 70347: case 70348: case 70349: case 70350: case 70351: case 70352: case 70353: case 70354: case 70355: case 70356: case 70357: case 70358: case 70359: case 70360: case 70361: case 70362: case 70363: case 70364: case 70365: case 70366: case 70367: case 70368: case 70369: case 70370: case 70371: case 70372: case 70373: case 70374: case 70375: case 70376: case 70377: case 70378: return 19694 + c - 70320; case 70384: case 70385: case 70386: case 70387: case 70388: case 70389: case 70390: case 70391: case 70392: case 70393: return 19753 + c - 70384; case 70400: case 70401: case 70402: case 70403: return 19763 + c - 70400; case 70405: case 70406: case 70407: case 70408: case 70409: case 70410: case 70411: case 70412: return 19767 + c - 70405; case 70415: case 70416: return 19775 + c - 70415; case 70419: case 70420: case 70421: case 70422: case 70423: case 70424: case 70425: case 70426: case 70427: case 70428: case 70429: case 70430: case 70431: case 70432: case 70433: case 70434: case 70435: case 70436: case 70437: case 70438: case 70439: case 70440: return 19777 + c - 70419; case 70442: case 70443: case 70444: case 70445: case 70446: case 70447: case 70448: return 19799 + c - 70442; case 70450: case 70451: return 19806 + c - 70450; case 70453: case 70454: case 70455: case 70456: case 70457: return 19808 + c - 70453; case 70459: case 70460: case 70461: case 70462: case 70463: case 70464: case 70465: case 70466: case 70467: case 70468: return 19813 + c - 70459; case 70471: case 70472: return 19823 + c - 70471; case 70475: case 70476: case 70477: return 19825 + c - 70475; case 70480: return 19828; case 70487: return 19829; case 70493: case 70494: case 70495: case 70496: case 70497: case 70498: case 70499: return 19830 + c - 70493; case 70502: case 70503: case 70504: case 70505: case 70506: case 70507: case 70508: return 19837 + c - 70502; case 70512: case 70513: case 70514: case 70515: case 70516: return 19844 + c - 70512; case 70656: case 70657: case 70658: case 70659: case 70660: case 70661: case 70662: case 70663: case 70664: case 70665: case 70666: case 70667: case 70668: case 70669: case 70670: case 70671: case 70672: case 70673: case 70674: case 70675: case 70676: case 70677: case 70678: case 70679: case 70680: case 70681: case 70682: case 70683: case 70684: case 70685: case 70686: case 70687: case 70688: case 70689: case 70690: case 70691: case 70692: case 70693: case 70694: case 70695: case 70696: case 70697: case 70698: case 70699: case 70700: case 70701: case 70702: case 70703: case 70704: case 70705: case 70706: case 70707: case 70708: case 70709: case 70710: case 70711: case 70712: case 70713: case 70714: case 70715: case 70716: case 70717: case 70718: case 70719: case 70720: case 70721: case 70722: case 70723: case 70724: case 70725: case 70726: case 70727: case 70728: case 70729: case 70730: case 70731: case 70732: case 70733: case 70734: case 70735: case 70736: case 70737: case 70738: case 70739: case 70740: case 70741: case 70742: case 70743: case 70744: case 70745: return 19849 + c - 70656; case 70747: return 19939; case 70749: case 70750: case 70751: return 19940 + c - 70749; case 70784: case 70785: case 70786: case 70787: case 70788: case 70789: case 70790: case 70791: case 70792: case 70793: case 70794: case 70795: case 70796: case 70797: case 70798: case 70799: case 70800: case 70801: case 70802: case 70803: case 70804: case 70805: case 70806: case 70807: case 70808: case 70809: case 70810: case 70811: case 70812: case 70813: case 70814: case 70815: case 70816: case 70817: case 70818: case 70819: case 70820: case 70821: case 70822: case 70823: case 70824: case 70825: case 70826: case 70827: case 70828: case 70829: case 70830: case 70831: case 70832: case 70833: case 70834: case 70835: case 70836: case 70837: case 70838: case 70839: case 70840: case 70841: case 70842: case 70843: case 70844: case 70845: case 70846: case 70847: case 70848: case 70849: case 70850: case 70851: case 70852: case 70853: case 70854: case 70855: return 19943 + c - 70784; case 70864: case 70865: case 70866: case 70867: case 70868: case 70869: case 70870: case 70871: case 70872: case 70873: return 20015 + c - 70864; case 71040: case 71041: case 71042: case 71043: case 71044: case 71045: case 71046: case 71047: case 71048: case 71049: case 71050: case 71051: case 71052: case 71053: case 71054: case 71055: case 71056: case 71057: case 71058: case 71059: case 71060: case 71061: case 71062: case 71063: case 71064: case 71065: case 71066: case 71067: case 71068: case 71069: case 71070: case 71071: case 71072: case 71073: case 71074: case 71075: case 71076: case 71077: case 71078: case 71079: case 71080: case 71081: case 71082: case 71083: case 71084: case 71085: case 71086: case 71087: case 71088: case 71089: case 71090: case 71091: case 71092: case 71093: return 20025 + c - 71040; case 71096: case 71097: case 71098: case 71099: case 71100: case 71101: case 71102: case 71103: case 71104: case 71105: case 71106: case 71107: case 71108: case 71109: case 71110: case 71111: case 71112: case 71113: case 71114: case 71115: case 71116: case 71117: case 71118: case 71119: case 71120: case 71121: case 71122: case 71123: case 71124: case 71125: case 71126: case 71127: case 71128: case 71129: case 71130: case 71131: case 71132: case 71133: return 20079 + c - 71096; case 71168: case 71169: case 71170: case 71171: case 71172: case 71173: case 71174: case 71175: case 71176: case 71177: case 71178: case 71179: case 71180: case 71181: case 71182: case 71183: case 71184: case 71185: case 71186: case 71187: case 71188: case 71189: case 71190: case 71191: case 71192: case 71193: case 71194: case 71195: case 71196: case 71197: case 71198: case 71199: case 71200: case 71201: case 71202: case 71203: case 71204: case 71205: case 71206: case 71207: case 71208: case 71209: case 71210: case 71211: case 71212: case 71213: case 71214: case 71215: case 71216: case 71217: case 71218: case 71219: case 71220: case 71221: case 71222: case 71223: case 71224: case 71225: case 71226: case 71227: case 71228: case 71229: case 71230: case 71231: case 71232: case 71233: case 71234: case 71235: case 71236: return 20117 + c - 71168; case 71248: case 71249: case 71250: case 71251: case 71252: case 71253: case 71254: case 71255: case 71256: case 71257: return 20186 + c - 71248; case 71264: case 71265: case 71266: case 71267: case 71268: case 71269: case 71270: case 71271: case 71272: case 71273: case 71274: case 71275: case 71276: return 20196 + c - 71264; case 71296: case 71297: case 71298: case 71299: case 71300: case 71301: case 71302: case 71303: case 71304: case 71305: case 71306: case 71307: case 71308: case 71309: case 71310: case 71311: case 71312: case 71313: case 71314: case 71315: case 71316: case 71317: case 71318: case 71319: case 71320: case 71321: case 71322: case 71323: case 71324: case 71325: case 71326: case 71327: case 71328: case 71329: case 71330: case 71331: case 71332: case 71333: case 71334: case 71335: case 71336: case 71337: case 71338: case 71339: case 71340: case 71341: case 71342: case 71343: case 71344: case 71345: case 71346: case 71347: case 71348: case 71349: case 71350: case 71351: case 71352: return 20209 + c - 71296; case 71360: case 71361: case 71362: case 71363: case 71364: case 71365: case 71366: case 71367: case 71368: case 71369: return 20266 + c - 71360; case 71424: case 71425: case 71426: case 71427: case 71428: case 71429: case 71430: case 71431: case 71432: case 71433: case 71434: case 71435: case 71436: case 71437: case 71438: case 71439: case 71440: case 71441: case 71442: case 71443: case 71444: case 71445: case 71446: case 71447: case 71448: case 71449: case 71450: return 20276 + c - 71424; case 71453: case 71454: case 71455: case 71456: case 71457: case 71458: case 71459: case 71460: case 71461: case 71462: case 71463: case 71464: case 71465: case 71466: case 71467: return 20303 + c - 71453; case 71472: case 71473: case 71474: case 71475: case 71476: case 71477: case 71478: case 71479: case 71480: case 71481: case 71482: case 71483: case 71484: case 71485: case 71486: case 71487: return 20318 + c - 71472; case 71680: case 71681: case 71682: case 71683: case 71684: case 71685: case 71686: case 71687: case 71688: case 71689: case 71690: case 71691: case 71692: case 71693: case 71694: case 71695: case 71696: case 71697: case 71698: case 71699: case 71700: case 71701: case 71702: case 71703: case 71704: case 71705: case 71706: case 71707: case 71708: case 71709: case 71710: case 71711: case 71712: case 71713: case 71714: case 71715: case 71716: case 71717: case 71718: case 71719: case 71720: case 71721: case 71722: case 71723: case 71724: case 71725: case 71726: case 71727: case 71728: case 71729: case 71730: case 71731: case 71732: case 71733: case 71734: case 71735: case 71736: case 71737: case 71738: case 71739: return 20334 + c - 71680; case 71840: case 71841: case 71842: case 71843: case 71844: case 71845: case 71846: case 71847: case 71848: case 71849: case 71850: case 71851: case 71852: case 71853: case 71854: case 71855: case 71856: case 71857: case 71858: case 71859: case 71860: case 71861: case 71862: case 71863: case 71864: case 71865: case 71866: case 71867: case 71868: case 71869: case 71870: case 71871: case 71872: case 71873: case 71874: case 71875: case 71876: case 71877: case 71878: case 71879: case 71880: case 71881: case 71882: case 71883: case 71884: case 71885: case 71886: case 71887: case 71888: case 71889: case 71890: case 71891: case 71892: case 71893: case 71894: case 71895: case 71896: case 71897: case 71898: case 71899: case 71900: case 71901: case 71902: case 71903: case 71904: case 71905: case 71906: case 71907: case 71908: case 71909: case 71910: case 71911: case 71912: case 71913: case 71914: case 71915: case 71916: case 71917: case 71918: case 71919: case 71920: case 71921: case 71922: return 20394 + c - 71840; case 71935: return 20477; case 72096: case 72097: case 72098: case 72099: case 72100: case 72101: case 72102: case 72103: return 20478 + c - 72096; case 72106: case 72107: case 72108: case 72109: case 72110: case 72111: case 72112: case 72113: case 72114: case 72115: case 72116: case 72117: case 72118: case 72119: case 72120: case 72121: case 72122: case 72123: case 72124: case 72125: case 72126: case 72127: case 72128: case 72129: case 72130: case 72131: case 72132: case 72133: case 72134: case 72135: case 72136: case 72137: case 72138: case 72139: case 72140: case 72141: case 72142: case 72143: case 72144: case 72145: case 72146: case 72147: case 72148: case 72149: case 72150: case 72151: return 20486 + c - 72106; case 72154: case 72155: case 72156: case 72157: case 72158: case 72159: case 72160: case 72161: case 72162: case 72163: case 72164: return 20532 + c - 72154; case 72192: case 72193: case 72194: case 72195: case 72196: case 72197: case 72198: case 72199: case 72200: case 72201: case 72202: case 72203: case 72204: case 72205: case 72206: case 72207: case 72208: case 72209: case 72210: case 72211: case 72212: case 72213: case 72214: case 72215: case 72216: case 72217: case 72218: case 72219: case 72220: case 72221: case 72222: case 72223: case 72224: case 72225: case 72226: case 72227: case 72228: case 72229: case 72230: case 72231: case 72232: case 72233: case 72234: case 72235: case 72236: case 72237: case 72238: case 72239: case 72240: case 72241: case 72242: case 72243: case 72244: case 72245: case 72246: case 72247: case 72248: case 72249: case 72250: case 72251: case 72252: case 72253: case 72254: case 72255: case 72256: case 72257: case 72258: case 72259: case 72260: case 72261: case 72262: case 72263: return 20543 + c - 72192; case 72272: case 72273: case 72274: case 72275: case 72276: case 72277: case 72278: case 72279: case 72280: case 72281: case 72282: case 72283: case 72284: case 72285: case 72286: case 72287: case 72288: case 72289: case 72290: case 72291: case 72292: case 72293: case 72294: case 72295: case 72296: case 72297: case 72298: case 72299: case 72300: case 72301: case 72302: case 72303: case 72304: case 72305: case 72306: case 72307: case 72308: case 72309: case 72310: case 72311: case 72312: case 72313: case 72314: case 72315: case 72316: case 72317: case 72318: case 72319: case 72320: case 72321: case 72322: case 72323: case 72324: case 72325: case 72326: case 72327: case 72328: case 72329: case 72330: case 72331: case 72332: case 72333: case 72334: case 72335: case 72336: case 72337: case 72338: case 72339: case 72340: case 72341: case 72342: case 72343: case 72344: case 72345: case 72346: case 72347: case 72348: case 72349: case 72350: case 72351: case 72352: case 72353: case 72354: return 20615 + c - 72272; case 72384: case 72385: case 72386: case 72387: case 72388: case 72389: case 72390: case 72391: case 72392: case 72393: case 72394: case 72395: case 72396: case 72397: case 72398: case 72399: case 72400: case 72401: case 72402: case 72403: case 72404: case 72405: case 72406: case 72407: case 72408: case 72409: case 72410: case 72411: case 72412: case 72413: case 72414: case 72415: case 72416: case 72417: case 72418: case 72419: case 72420: case 72421: case 72422: case 72423: case 72424: case 72425: case 72426: case 72427: case 72428: case 72429: case 72430: case 72431: case 72432: case 72433: case 72434: case 72435: case 72436: case 72437: case 72438: case 72439: case 72440: return 20698 + c - 72384; case 72704: case 72705: case 72706: case 72707: case 72708: case 72709: case 72710: case 72711: case 72712: return 20755 + c - 72704; case 72714: case 72715: case 72716: case 72717: case 72718: case 72719: case 72720: case 72721: case 72722: case 72723: case 72724: case 72725: case 72726: case 72727: case 72728: case 72729: case 72730: case 72731: case 72732: case 72733: case 72734: case 72735: case 72736: case 72737: case 72738: case 72739: case 72740: case 72741: case 72742: case 72743: case 72744: case 72745: case 72746: case 72747: case 72748: case 72749: case 72750: case 72751: case 72752: case 72753: case 72754: case 72755: case 72756: case 72757: case 72758: return 20764 + c - 72714; case 72760: case 72761: case 72762: case 72763: case 72764: case 72765: case 72766: case 72767: case 72768: case 72769: case 72770: case 72771: case 72772: case 72773: return 20809 + c - 72760; case 72784: case 72785: case 72786: case 72787: case 72788: case 72789: case 72790: case 72791: case 72792: case 72793: case 72794: case 72795: case 72796: case 72797: case 72798: case 72799: case 72800: case 72801: case 72802: case 72803: case 72804: case 72805: case 72806: case 72807: case 72808: case 72809: case 72810: case 72811: case 72812: return 20823 + c - 72784; case 72816: case 72817: case 72818: case 72819: case 72820: case 72821: case 72822: case 72823: case 72824: case 72825: case 72826: case 72827: case 72828: case 72829: case 72830: case 72831: case 72832: case 72833: case 72834: case 72835: case 72836: case 72837: case 72838: case 72839: case 72840: case 72841: case 72842: case 72843: case 72844: case 72845: case 72846: case 72847: return 20852 + c - 72816; case 72850: case 72851: case 72852: case 72853: case 72854: case 72855: case 72856: case 72857: case 72858: case 72859: case 72860: case 72861: case 72862: case 72863: case 72864: case 72865: case 72866: case 72867: case 72868: case 72869: case 72870: case 72871: return 20884 + c - 72850; case 72873: case 72874: case 72875: case 72876: case 72877: case 72878: case 72879: case 72880: case 72881: case 72882: case 72883: case 72884: case 72885: case 72886: return 20906 + c - 72873; case 72960: case 72961: case 72962: case 72963: case 72964: case 72965: case 72966: return 20920 + c - 72960; case 72968: case 72969: return 20927 + c - 72968; case 72971: case 72972: case 72973: case 72974: case 72975: case 72976: case 72977: case 72978: case 72979: case 72980: case 72981: case 72982: case 72983: case 72984: case 72985: case 72986: case 72987: case 72988: case 72989: case 72990: case 72991: case 72992: case 72993: case 72994: case 72995: case 72996: case 72997: case 72998: case 72999: case 73000: case 73001: case 73002: case 73003: case 73004: case 73005: case 73006: case 73007: case 73008: case 73009: case 73010: case 73011: case 73012: case 73013: case 73014: return 20929 + c - 72971; case 73018: return 20973; case 73020: case 73021: return 20974 + c - 73020; case 73023: case 73024: case 73025: case 73026: case 73027: case 73028: case 73029: case 73030: case 73031: return 20976 + c - 73023; case 73040: case 73041: case 73042: case 73043: case 73044: case 73045: case 73046: case 73047: case 73048: case 73049: return 20985 + c - 73040; case 73056: case 73057: case 73058: case 73059: case 73060: case 73061: return 20995 + c - 73056; case 73063: case 73064: return 21001 + c - 73063; case 73066: case 73067: case 73068: case 73069: case 73070: case 73071: case 73072: case 73073: case 73074: case 73075: case 73076: case 73077: case 73078: case 73079: case 73080: case 73081: case 73082: case 73083: case 73084: case 73085: case 73086: case 73087: case 73088: case 73089: case 73090: case 73091: case 73092: case 73093: case 73094: case 73095: case 73096: case 73097: case 73098: case 73099: case 73100: case 73101: case 73102: return 21003 + c - 73066; case 73104: case 73105: return 21040 + c - 73104; case 73107: case 73108: case 73109: case 73110: case 73111: case 73112: return 21042 + c - 73107; case 73120: case 73121: case 73122: case 73123: case 73124: case 73125: case 73126: case 73127: case 73128: case 73129: return 21048 + c - 73120; case 73440: case 73441: case 73442: case 73443: case 73444: case 73445: case 73446: case 73447: case 73448: case 73449: case 73450: case 73451: case 73452: case 73453: case 73454: case 73455: case 73456: case 73457: case 73458: case 73459: case 73460: case 73461: case 73462: case 73463: case 73464: return 21058 + c - 73440; case 73664: case 73665: case 73666: case 73667: case 73668: case 73669: case 73670: case 73671: case 73672: case 73673: case 73674: case 73675: case 73676: case 73677: case 73678: case 73679: case 73680: case 73681: case 73682: case 73683: case 73684: case 73685: case 73686: case 73687: case 73688: case 73689: case 73690: case 73691: case 73692: case 73693: case 73694: case 73695: case 73696: case 73697: case 73698: case 73699: case 73700: case 73701: case 73702: case 73703: case 73704: case 73705: case 73706: case 73707: case 73708: case 73709: case 73710: case 73711: case 73712: case 73713: return 21083 + c - 73664; case 73727: case 73728: case 73729: case 73730: case 73731: case 73732: case 73733: case 73734: case 73735: case 73736: case 73737: case 73738: case 73739: case 73740: case 73741: case 73742: case 73743: case 73744: case 73745: case 73746: case 73747: case 73748: case 73749: case 73750: case 73751: case 73752: case 73753: case 73754: case 73755: case 73756: case 73757: case 73758: case 73759: case 73760: case 73761: case 73762: case 73763: case 73764: case 73765: case 73766: case 73767: case 73768: case 73769: case 73770: case 73771: case 73772: case 73773: case 73774: case 73775: case 73776: case 73777: case 73778: case 73779: case 73780: case 73781: case 73782: case 73783: case 73784: case 73785: case 73786: case 73787: case 73788: case 73789: case 73790: case 73791: case 73792: case 73793: case 73794: case 73795: case 73796: case 73797: case 73798: case 73799: case 73800: case 73801: case 73802: case 73803: case 73804: case 73805: case 73806: case 73807: case 73808: case 73809: case 73810: case 73811: case 73812: case 73813: case 73814: case 73815: case 73816: case 73817: case 73818: case 73819: case 73820: case 73821: case 73822: case 73823: case 73824: case 73825: case 73826: case 73827: case 73828: case 73829: case 73830: case 73831: case 73832: case 73833: case 73834: case 73835: case 73836: case 73837: case 73838: case 73839: case 73840: case 73841: case 73842: case 73843: case 73844: case 73845: case 73846: case 73847: case 73848: case 73849: case 73850: case 73851: case 73852: case 73853: case 73854: case 73855: case 73856: case 73857: case 73858: case 73859: case 73860: case 73861: case 73862: case 73863: case 73864: case 73865: case 73866: case 73867: case 73868: case 73869: case 73870: case 73871: case 73872: case 73873: case 73874: case 73875: case 73876: case 73877: case 73878: case 73879: case 73880: case 73881: case 73882: case 73883: case 73884: case 73885: case 73886: case 73887: case 73888: case 73889: case 73890: case 73891: case 73892: case 73893: case 73894: case 73895: case 73896: case 73897: case 73898: case 73899: case 73900: case 73901: case 73902: case 73903: case 73904: case 73905: case 73906: case 73907: case 73908: case 73909: case 73910: case 73911: case 73912: case 73913: case 73914: case 73915: case 73916: case 73917: case 73918: case 73919: case 73920: case 73921: case 73922: case 73923: case 73924: case 73925: case 73926: case 73927: case 73928: case 73929: case 73930: case 73931: case 73932: case 73933: case 73934: case 73935: case 73936: case 73937: case 73938: case 73939: case 73940: case 73941: case 73942: case 73943: case 73944: case 73945: case 73946: case 73947: case 73948: case 73949: case 73950: case 73951: case 73952: case 73953: case 73954: case 73955: case 73956: case 73957: case 73958: case 73959: case 73960: case 73961: case 73962: case 73963: case 73964: case 73965: case 73966: case 73967: case 73968: case 73969: case 73970: case 73971: case 73972: case 73973: case 73974: case 73975: case 73976: case 73977: case 73978: case 73979: case 73980: case 73981: case 73982: case 73983: case 73984: case 73985: case 73986: case 73987: case 73988: case 73989: case 73990: case 73991: case 73992: case 73993: case 73994: case 73995: case 73996: case 73997: case 73998: case 73999: case 74000: case 74001: case 74002: case 74003: case 74004: case 74005: case 74006: case 74007: case 74008: case 74009: case 74010: case 74011: case 74012: case 74013: case 74014: case 74015: case 74016: case 74017: case 74018: case 74019: case 74020: case 74021: case 74022: case 74023: case 74024: case 74025: case 74026: case 74027: case 74028: case 74029: case 74030: case 74031: case 74032: case 74033: case 74034: case 74035: case 74036: case 74037: case 74038: case 74039: case 74040: case 74041: case 74042: case 74043: case 74044: case 74045: case 74046: case 74047: case 74048: case 74049: case 74050: case 74051: case 74052: case 74053: case 74054: case 74055: case 74056: case 74057: case 74058: case 74059: case 74060: case 74061: case 74062: case 74063: case 74064: case 74065: case 74066: case 74067: case 74068: case 74069: case 74070: case 74071: case 74072: case 74073: case 74074: case 74075: case 74076: case 74077: case 74078: case 74079: case 74080: case 74081: case 74082: case 74083: case 74084: case 74085: case 74086: case 74087: case 74088: case 74089: case 74090: case 74091: case 74092: case 74093: case 74094: case 74095: case 74096: case 74097: case 74098: case 74099: case 74100: case 74101: case 74102: case 74103: case 74104: case 74105: case 74106: case 74107: case 74108: case 74109: case 74110: case 74111: case 74112: case 74113: case 74114: case 74115: case 74116: case 74117: case 74118: case 74119: case 74120: case 74121: case 74122: case 74123: case 74124: case 74125: case 74126: case 74127: case 74128: case 74129: case 74130: case 74131: case 74132: case 74133: case 74134: case 74135: case 74136: case 74137: case 74138: case 74139: case 74140: case 74141: case 74142: case 74143: case 74144: case 74145: case 74146: case 74147: case 74148: case 74149: case 74150: case 74151: case 74152: case 74153: case 74154: case 74155: case 74156: case 74157: case 74158: case 74159: case 74160: case 74161: case 74162: case 74163: case 74164: case 74165: case 74166: case 74167: case 74168: case 74169: case 74170: case 74171: case 74172: case 74173: case 74174: case 74175: case 74176: case 74177: case 74178: case 74179: case 74180: case 74181: case 74182: case 74183: case 74184: case 74185: case 74186: case 74187: case 74188: case 74189: case 74190: case 74191: case 74192: case 74193: case 74194: case 74195: case 74196: case 74197: case 74198: case 74199: case 74200: case 74201: case 74202: case 74203: case 74204: case 74205: case 74206: case 74207: case 74208: case 74209: case 74210: case 74211: case 74212: case 74213: case 74214: case 74215: case 74216: case 74217: case 74218: case 74219: case 74220: case 74221: case 74222: case 74223: case 74224: case 74225: case 74226: case 74227: case 74228: case 74229: case 74230: case 74231: case 74232: case 74233: case 74234: case 74235: case 74236: case 74237: case 74238: case 74239: case 74240: case 74241: case 74242: case 74243: case 74244: case 74245: case 74246: case 74247: case 74248: case 74249: case 74250: case 74251: case 74252: case 74253: case 74254: case 74255: case 74256: case 74257: case 74258: case 74259: case 74260: case 74261: case 74262: case 74263: case 74264: case 74265: case 74266: case 74267: case 74268: case 74269: case 74270: case 74271: case 74272: case 74273: case 74274: case 74275: case 74276: case 74277: case 74278: case 74279: case 74280: case 74281: case 74282: case 74283: case 74284: case 74285: case 74286: case 74287: case 74288: case 74289: case 74290: case 74291: case 74292: case 74293: case 74294: case 74295: case 74296: case 74297: case 74298: case 74299: case 74300: case 74301: case 74302: case 74303: case 74304: case 74305: case 74306: case 74307: case 74308: case 74309: case 74310: case 74311: case 74312: case 74313: case 74314: case 74315: case 74316: case 74317: case 74318: case 74319: case 74320: case 74321: case 74322: case 74323: case 74324: case 74325: case 74326: case 74327: case 74328: case 74329: case 74330: case 74331: case 74332: case 74333: case 74334: case 74335: case 74336: case 74337: case 74338: case 74339: case 74340: case 74341: case 74342: case 74343: case 74344: case 74345: case 74346: case 74347: case 74348: case 74349: case 74350: case 74351: case 74352: case 74353: case 74354: case 74355: case 74356: case 74357: case 74358: case 74359: case 74360: case 74361: case 74362: case 74363: case 74364: case 74365: case 74366: case 74367: case 74368: case 74369: case 74370: case 74371: case 74372: case 74373: case 74374: case 74375: case 74376: case 74377: case 74378: case 74379: case 74380: case 74381: case 74382: case 74383: case 74384: case 74385: case 74386: case 74387: case 74388: case 74389: case 74390: case 74391: case 74392: case 74393: case 74394: case 74395: case 74396: case 74397: case 74398: case 74399: case 74400: case 74401: case 74402: case 74403: case 74404: case 74405: case 74406: case 74407: case 74408: case 74409: case 74410: case 74411: case 74412: case 74413: case 74414: case 74415: case 74416: case 74417: case 74418: case 74419: case 74420: case 74421: case 74422: case 74423: case 74424: case 74425: case 74426: case 74427: case 74428: case 74429: case 74430: case 74431: case 74432: case 74433: case 74434: case 74435: case 74436: case 74437: case 74438: case 74439: case 74440: case 74441: case 74442: case 74443: case 74444: case 74445: case 74446: case 74447: case 74448: case 74449: case 74450: case 74451: case 74452: case 74453: case 74454: case 74455: case 74456: case 74457: case 74458: case 74459: case 74460: case 74461: case 74462: case 74463: case 74464: case 74465: case 74466: case 74467: case 74468: case 74469: case 74470: case 74471: case 74472: case 74473: case 74474: case 74475: case 74476: case 74477: case 74478: case 74479: case 74480: case 74481: case 74482: case 74483: case 74484: case 74485: case 74486: case 74487: case 74488: case 74489: case 74490: case 74491: case 74492: case 74493: case 74494: case 74495: case 74496: case 74497: case 74498: case 74499: case 74500: case 74501: case 74502: case 74503: case 74504: case 74505: case 74506: case 74507: case 74508: case 74509: case 74510: case 74511: case 74512: case 74513: case 74514: case 74515: case 74516: case 74517: case 74518: case 74519: case 74520: case 74521: case 74522: case 74523: case 74524: case 74525: case 74526: case 74527: case 74528: case 74529: case 74530: case 74531: case 74532: case 74533: case 74534: case 74535: case 74536: case 74537: case 74538: case 74539: case 74540: case 74541: case 74542: case 74543: case 74544: case 74545: case 74546: case 74547: case 74548: case 74549: case 74550: case 74551: case 74552: case 74553: case 74554: case 74555: case 74556: case 74557: case 74558: case 74559: case 74560: case 74561: case 74562: case 74563: case 74564: case 74565: case 74566: case 74567: case 74568: case 74569: case 74570: case 74571: case 74572: case 74573: case 74574: case 74575: case 74576: case 74577: case 74578: case 74579: case 74580: case 74581: case 74582: case 74583: case 74584: case 74585: case 74586: case 74587: case 74588: case 74589: case 74590: case 74591: case 74592: case 74593: case 74594: case 74595: case 74596: case 74597: case 74598: case 74599: case 74600: case 74601: case 74602: case 74603: case 74604: case 74605: case 74606: case 74607: case 74608: case 74609: case 74610: case 74611: case 74612: case 74613: case 74614: case 74615: case 74616: case 74617: case 74618: case 74619: case 74620: case 74621: case 74622: case 74623: case 74624: case 74625: case 74626: case 74627: case 74628: case 74629: case 74630: case 74631: case 74632: case 74633: case 74634: case 74635: case 74636: case 74637: case 74638: case 74639: case 74640: case 74641: case 74642: case 74643: case 74644: case 74645: case 74646: case 74647: case 74648: case 74649: return 21133 + c - 73727; case 74752: case 74753: case 74754: case 74755: case 74756: case 74757: case 74758: case 74759: case 74760: case 74761: case 74762: case 74763: case 74764: case 74765: case 74766: case 74767: case 74768: case 74769: case 74770: case 74771: case 74772: case 74773: case 74774: case 74775: case 74776: case 74777: case 74778: case 74779: case 74780: case 74781: case 74782: case 74783: case 74784: case 74785: case 74786: case 74787: case 74788: case 74789: case 74790: case 74791: case 74792: case 74793: case 74794: case 74795: case 74796: case 74797: case 74798: case 74799: case 74800: case 74801: case 74802: case 74803: case 74804: case 74805: case 74806: case 74807: case 74808: case 74809: case 74810: case 74811: case 74812: case 74813: case 74814: case 74815: case 74816: case 74817: case 74818: case 74819: case 74820: case 74821: case 74822: case 74823: case 74824: case 74825: case 74826: case 74827: case 74828: case 74829: case 74830: case 74831: case 74832: case 74833: case 74834: case 74835: case 74836: case 74837: case 74838: case 74839: case 74840: case 74841: case 74842: case 74843: case 74844: case 74845: case 74846: case 74847: case 74848: case 74849: case 74850: case 74851: case 74852: case 74853: case 74854: case 74855: case 74856: case 74857: case 74858: case 74859: case 74860: case 74861: case 74862: return 22056 + c - 74752; case 74864: case 74865: case 74866: case 74867: case 74868: return 22167 + c - 74864; case 74880: case 74881: case 74882: case 74883: case 74884: case 74885: case 74886: case 74887: case 74888: case 74889: case 74890: case 74891: case 74892: case 74893: case 74894: case 74895: case 74896: case 74897: case 74898: case 74899: case 74900: case 74901: case 74902: case 74903: case 74904: case 74905: case 74906: case 74907: case 74908: case 74909: case 74910: case 74911: case 74912: case 74913: case 74914: case 74915: case 74916: case 74917: case 74918: case 74919: case 74920: case 74921: case 74922: case 74923: case 74924: case 74925: case 74926: case 74927: case 74928: case 74929: case 74930: case 74931: case 74932: case 74933: case 74934: case 74935: case 74936: case 74937: case 74938: case 74939: case 74940: case 74941: case 74942: case 74943: case 74944: case 74945: case 74946: case 74947: case 74948: case 74949: case 74950: case 74951: case 74952: case 74953: case 74954: case 74955: case 74956: case 74957: case 74958: case 74959: case 74960: case 74961: case 74962: case 74963: case 74964: case 74965: case 74966: case 74967: case 74968: case 74969: case 74970: case 74971: case 74972: case 74973: case 74974: case 74975: case 74976: case 74977: case 74978: case 74979: case 74980: case 74981: case 74982: case 74983: case 74984: case 74985: case 74986: case 74987: case 74988: case 74989: case 74990: case 74991: case 74992: case 74993: case 74994: case 74995: case 74996: case 74997: case 74998: case 74999: case 75000: case 75001: case 75002: case 75003: case 75004: case 75005: case 75006: case 75007: case 75008: case 75009: case 75010: case 75011: case 75012: case 75013: case 75014: case 75015: case 75016: case 75017: case 75018: case 75019: case 75020: case 75021: case 75022: case 75023: case 75024: case 75025: case 75026: case 75027: case 75028: case 75029: case 75030: case 75031: case 75032: case 75033: case 75034: case 75035: case 75036: case 75037: case 75038: case 75039: case 75040: case 75041: case 75042: case 75043: case 75044: case 75045: case 75046: case 75047: case 75048: case 75049: case 75050: case 75051: case 75052: case 75053: case 75054: case 75055: case 75056: case 75057: case 75058: case 75059: case 75060: case 75061: case 75062: case 75063: case 75064: case 75065: case 75066: case 75067: case 75068: case 75069: case 75070: case 75071: case 75072: case 75073: case 75074: case 75075: return 22172 + c - 74880; case 77824: case 77825: case 77826: case 77827: case 77828: case 77829: case 77830: case 77831: case 77832: case 77833: case 77834: case 77835: case 77836: case 77837: case 77838: case 77839: case 77840: case 77841: case 77842: case 77843: case 77844: case 77845: case 77846: case 77847: case 77848: case 77849: case 77850: case 77851: case 77852: case 77853: case 77854: case 77855: case 77856: case 77857: case 77858: case 77859: case 77860: case 77861: case 77862: case 77863: case 77864: case 77865: case 77866: case 77867: case 77868: case 77869: case 77870: case 77871: case 77872: case 77873: case 77874: case 77875: case 77876: case 77877: case 77878: case 77879: case 77880: case 77881: case 77882: case 77883: case 77884: case 77885: case 77886: case 77887: case 77888: case 77889: case 77890: case 77891: case 77892: case 77893: case 77894: case 77895: case 77896: case 77897: case 77898: case 77899: case 77900: case 77901: case 77902: case 77903: case 77904: case 77905: case 77906: case 77907: case 77908: case 77909: case 77910: case 77911: case 77912: case 77913: case 77914: case 77915: case 77916: case 77917: case 77918: case 77919: case 77920: case 77921: case 77922: case 77923: case 77924: case 77925: case 77926: case 77927: case 77928: case 77929: case 77930: case 77931: case 77932: case 77933: case 77934: case 77935: case 77936: case 77937: case 77938: case 77939: case 77940: case 77941: case 77942: case 77943: case 77944: case 77945: case 77946: case 77947: case 77948: case 77949: case 77950: case 77951: case 77952: case 77953: case 77954: case 77955: case 77956: case 77957: case 77958: case 77959: case 77960: case 77961: case 77962: case 77963: case 77964: case 77965: case 77966: case 77967: case 77968: case 77969: case 77970: case 77971: case 77972: case 77973: case 77974: case 77975: case 77976: case 77977: case 77978: case 77979: case 77980: case 77981: case 77982: case 77983: case 77984: case 77985: case 77986: case 77987: case 77988: case 77989: case 77990: case 77991: case 77992: case 77993: case 77994: case 77995: case 77996: case 77997: case 77998: case 77999: case 78000: case 78001: case 78002: case 78003: case 78004: case 78005: case 78006: case 78007: case 78008: case 78009: case 78010: case 78011: case 78012: case 78013: case 78014: case 78015: case 78016: case 78017: case 78018: case 78019: case 78020: case 78021: case 78022: case 78023: case 78024: case 78025: case 78026: case 78027: case 78028: case 78029: case 78030: case 78031: case 78032: case 78033: case 78034: case 78035: case 78036: case 78037: case 78038: case 78039: case 78040: case 78041: case 78042: case 78043: case 78044: case 78045: case 78046: case 78047: case 78048: case 78049: case 78050: case 78051: case 78052: case 78053: case 78054: case 78055: case 78056: case 78057: case 78058: case 78059: case 78060: case 78061: case 78062: case 78063: case 78064: case 78065: case 78066: case 78067: case 78068: case 78069: case 78070: case 78071: case 78072: case 78073: case 78074: case 78075: case 78076: case 78077: case 78078: case 78079: case 78080: case 78081: case 78082: case 78083: case 78084: case 78085: case 78086: case 78087: case 78088: case 78089: case 78090: case 78091: case 78092: case 78093: case 78094: case 78095: case 78096: case 78097: case 78098: case 78099: case 78100: case 78101: case 78102: case 78103: case 78104: case 78105: case 78106: case 78107: case 78108: case 78109: case 78110: case 78111: case 78112: case 78113: case 78114: case 78115: case 78116: case 78117: case 78118: case 78119: case 78120: case 78121: case 78122: case 78123: case 78124: case 78125: case 78126: case 78127: case 78128: case 78129: case 78130: case 78131: case 78132: case 78133: case 78134: case 78135: case 78136: case 78137: case 78138: case 78139: case 78140: case 78141: case 78142: case 78143: case 78144: case 78145: case 78146: case 78147: case 78148: case 78149: case 78150: case 78151: case 78152: case 78153: case 78154: case 78155: case 78156: case 78157: case 78158: case 78159: case 78160: case 78161: case 78162: case 78163: case 78164: case 78165: case 78166: case 78167: case 78168: case 78169: case 78170: case 78171: case 78172: case 78173: case 78174: case 78175: case 78176: case 78177: case 78178: case 78179: case 78180: case 78181: case 78182: case 78183: case 78184: case 78185: case 78186: case 78187: case 78188: case 78189: case 78190: case 78191: case 78192: case 78193: case 78194: case 78195: case 78196: case 78197: case 78198: case 78199: case 78200: case 78201: case 78202: case 78203: case 78204: case 78205: case 78206: case 78207: case 78208: case 78209: case 78210: case 78211: case 78212: case 78213: case 78214: case 78215: case 78216: case 78217: case 78218: case 78219: case 78220: case 78221: case 78222: case 78223: case 78224: case 78225: case 78226: case 78227: case 78228: case 78229: case 78230: case 78231: case 78232: case 78233: case 78234: case 78235: case 78236: case 78237: case 78238: case 78239: case 78240: case 78241: case 78242: case 78243: case 78244: case 78245: case 78246: case 78247: case 78248: case 78249: case 78250: case 78251: case 78252: case 78253: case 78254: case 78255: case 78256: case 78257: case 78258: case 78259: case 78260: case 78261: case 78262: case 78263: case 78264: case 78265: case 78266: case 78267: case 78268: case 78269: case 78270: case 78271: case 78272: case 78273: case 78274: case 78275: case 78276: case 78277: case 78278: case 78279: case 78280: case 78281: case 78282: case 78283: case 78284: case 78285: case 78286: case 78287: case 78288: case 78289: case 78290: case 78291: case 78292: case 78293: case 78294: case 78295: case 78296: case 78297: case 78298: case 78299: case 78300: case 78301: case 78302: case 78303: case 78304: case 78305: case 78306: case 78307: case 78308: case 78309: case 78310: case 78311: case 78312: case 78313: case 78314: case 78315: case 78316: case 78317: case 78318: case 78319: case 78320: case 78321: case 78322: case 78323: case 78324: case 78325: case 78326: case 78327: case 78328: case 78329: case 78330: case 78331: case 78332: case 78333: case 78334: case 78335: case 78336: case 78337: case 78338: case 78339: case 78340: case 78341: case 78342: case 78343: case 78344: case 78345: case 78346: case 78347: case 78348: case 78349: case 78350: case 78351: case 78352: case 78353: case 78354: case 78355: case 78356: case 78357: case 78358: case 78359: case 78360: case 78361: case 78362: case 78363: case 78364: case 78365: case 78366: case 78367: case 78368: case 78369: case 78370: case 78371: case 78372: case 78373: case 78374: case 78375: case 78376: case 78377: case 78378: case 78379: case 78380: case 78381: case 78382: case 78383: case 78384: case 78385: case 78386: case 78387: case 78388: case 78389: case 78390: case 78391: case 78392: case 78393: case 78394: case 78395: case 78396: case 78397: case 78398: case 78399: case 78400: case 78401: case 78402: case 78403: case 78404: case 78405: case 78406: case 78407: case 78408: case 78409: case 78410: case 78411: case 78412: case 78413: case 78414: case 78415: case 78416: case 78417: case 78418: case 78419: case 78420: case 78421: case 78422: case 78423: case 78424: case 78425: case 78426: case 78427: case 78428: case 78429: case 78430: case 78431: case 78432: case 78433: case 78434: case 78435: case 78436: case 78437: case 78438: case 78439: case 78440: case 78441: case 78442: case 78443: case 78444: case 78445: case 78446: case 78447: case 78448: case 78449: case 78450: case 78451: case 78452: case 78453: case 78454: case 78455: case 78456: case 78457: case 78458: case 78459: case 78460: case 78461: case 78462: case 78463: case 78464: case 78465: case 78466: case 78467: case 78468: case 78469: case 78470: case 78471: case 78472: case 78473: case 78474: case 78475: case 78476: case 78477: case 78478: case 78479: case 78480: case 78481: case 78482: case 78483: case 78484: case 78485: case 78486: case 78487: case 78488: case 78489: case 78490: case 78491: case 78492: case 78493: case 78494: case 78495: case 78496: case 78497: case 78498: case 78499: case 78500: case 78501: case 78502: case 78503: case 78504: case 78505: case 78506: case 78507: case 78508: case 78509: case 78510: case 78511: case 78512: case 78513: case 78514: case 78515: case 78516: case 78517: case 78518: case 78519: case 78520: case 78521: case 78522: case 78523: case 78524: case 78525: case 78526: case 78527: case 78528: case 78529: case 78530: case 78531: case 78532: case 78533: case 78534: case 78535: case 78536: case 78537: case 78538: case 78539: case 78540: case 78541: case 78542: case 78543: case 78544: case 78545: case 78546: case 78547: case 78548: case 78549: case 78550: case 78551: case 78552: case 78553: case 78554: case 78555: case 78556: case 78557: case 78558: case 78559: case 78560: case 78561: case 78562: case 78563: case 78564: case 78565: case 78566: case 78567: case 78568: case 78569: case 78570: case 78571: case 78572: case 78573: case 78574: case 78575: case 78576: case 78577: case 78578: case 78579: case 78580: case 78581: case 78582: case 78583: case 78584: case 78585: case 78586: case 78587: case 78588: case 78589: case 78590: case 78591: case 78592: case 78593: case 78594: case 78595: case 78596: case 78597: case 78598: case 78599: case 78600: case 78601: case 78602: case 78603: case 78604: case 78605: case 78606: case 78607: case 78608: case 78609: case 78610: case 78611: case 78612: case 78613: case 78614: case 78615: case 78616: case 78617: case 78618: case 78619: case 78620: case 78621: case 78622: case 78623: case 78624: case 78625: case 78626: case 78627: case 78628: case 78629: case 78630: case 78631: case 78632: case 78633: case 78634: case 78635: case 78636: case 78637: case 78638: case 78639: case 78640: case 78641: case 78642: case 78643: case 78644: case 78645: case 78646: case 78647: case 78648: case 78649: case 78650: case 78651: case 78652: case 78653: case 78654: case 78655: case 78656: case 78657: case 78658: case 78659: case 78660: case 78661: case 78662: case 78663: case 78664: case 78665: case 78666: case 78667: case 78668: case 78669: case 78670: case 78671: case 78672: case 78673: case 78674: case 78675: case 78676: case 78677: case 78678: case 78679: case 78680: case 78681: case 78682: case 78683: case 78684: case 78685: case 78686: case 78687: case 78688: case 78689: case 78690: case 78691: case 78692: case 78693: case 78694: case 78695: case 78696: case 78697: case 78698: case 78699: case 78700: case 78701: case 78702: case 78703: case 78704: case 78705: case 78706: case 78707: case 78708: case 78709: case 78710: case 78711: case 78712: case 78713: case 78714: case 78715: case 78716: case 78717: case 78718: case 78719: case 78720: case 78721: case 78722: case 78723: case 78724: case 78725: case 78726: case 78727: case 78728: case 78729: case 78730: case 78731: case 78732: case 78733: case 78734: case 78735: case 78736: case 78737: case 78738: case 78739: case 78740: case 78741: case 78742: case 78743: case 78744: case 78745: case 78746: case 78747: case 78748: case 78749: case 78750: case 78751: case 78752: case 78753: case 78754: case 78755: case 78756: case 78757: case 78758: case 78759: case 78760: case 78761: case 78762: case 78763: case 78764: case 78765: case 78766: case 78767: case 78768: case 78769: case 78770: case 78771: case 78772: case 78773: case 78774: case 78775: case 78776: case 78777: case 78778: case 78779: case 78780: case 78781: case 78782: case 78783: case 78784: case 78785: case 78786: case 78787: case 78788: case 78789: case 78790: case 78791: case 78792: case 78793: case 78794: case 78795: case 78796: case 78797: case 78798: case 78799: case 78800: case 78801: case 78802: case 78803: case 78804: case 78805: case 78806: case 78807: case 78808: case 78809: case 78810: case 78811: case 78812: case 78813: case 78814: case 78815: case 78816: case 78817: case 78818: case 78819: case 78820: case 78821: case 78822: case 78823: case 78824: case 78825: case 78826: case 78827: case 78828: case 78829: case 78830: case 78831: case 78832: case 78833: case 78834: case 78835: case 78836: case 78837: case 78838: case 78839: case 78840: case 78841: case 78842: case 78843: case 78844: case 78845: case 78846: case 78847: case 78848: case 78849: case 78850: case 78851: case 78852: case 78853: case 78854: case 78855: case 78856: case 78857: case 78858: case 78859: case 78860: case 78861: case 78862: case 78863: case 78864: case 78865: case 78866: case 78867: case 78868: case 78869: case 78870: case 78871: case 78872: case 78873: case 78874: case 78875: case 78876: case 78877: case 78878: case 78879: case 78880: case 78881: case 78882: case 78883: case 78884: case 78885: case 78886: case 78887: case 78888: case 78889: case 78890: case 78891: case 78892: case 78893: case 78894: return 22368 + c - 77824; case 78896: case 78897: case 78898: case 78899: case 78900: case 78901: case 78902: case 78903: case 78904: return 23439 + c - 78896; case 82944: case 82945: case 82946: case 82947: case 82948: case 82949: case 82950: case 82951: case 82952: case 82953: case 82954: case 82955: case 82956: case 82957: case 82958: case 82959: case 82960: case 82961: case 82962: case 82963: case 82964: case 82965: case 82966: case 82967: case 82968: case 82969: case 82970: case 82971: case 82972: case 82973: case 82974: case 82975: case 82976: case 82977: case 82978: case 82979: case 82980: case 82981: case 82982: case 82983: case 82984: case 82985: case 82986: case 82987: case 82988: case 82989: case 82990: case 82991: case 82992: case 82993: case 82994: case 82995: case 82996: case 82997: case 82998: case 82999: case 83000: case 83001: case 83002: case 83003: case 83004: case 83005: case 83006: case 83007: case 83008: case 83009: case 83010: case 83011: case 83012: case 83013: case 83014: case 83015: case 83016: case 83017: case 83018: case 83019: case 83020: case 83021: case 83022: case 83023: case 83024: case 83025: case 83026: case 83027: case 83028: case 83029: case 83030: case 83031: case 83032: case 83033: case 83034: case 83035: case 83036: case 83037: case 83038: case 83039: case 83040: case 83041: case 83042: case 83043: case 83044: case 83045: case 83046: case 83047: case 83048: case 83049: case 83050: case 83051: case 83052: case 83053: case 83054: case 83055: case 83056: case 83057: case 83058: case 83059: case 83060: case 83061: case 83062: case 83063: case 83064: case 83065: case 83066: case 83067: case 83068: case 83069: case 83070: case 83071: case 83072: case 83073: case 83074: case 83075: case 83076: case 83077: case 83078: case 83079: case 83080: case 83081: case 83082: case 83083: case 83084: case 83085: case 83086: case 83087: case 83088: case 83089: case 83090: case 83091: case 83092: case 83093: case 83094: case 83095: case 83096: case 83097: case 83098: case 83099: case 83100: case 83101: case 83102: case 83103: case 83104: case 83105: case 83106: case 83107: case 83108: case 83109: case 83110: case 83111: case 83112: case 83113: case 83114: case 83115: case 83116: case 83117: case 83118: case 83119: case 83120: case 83121: case 83122: case 83123: case 83124: case 83125: case 83126: case 83127: case 83128: case 83129: case 83130: case 83131: case 83132: case 83133: case 83134: case 83135: case 83136: case 83137: case 83138: case 83139: case 83140: case 83141: case 83142: case 83143: case 83144: case 83145: case 83146: case 83147: case 83148: case 83149: case 83150: case 83151: case 83152: case 83153: case 83154: case 83155: case 83156: case 83157: case 83158: case 83159: case 83160: case 83161: case 83162: case 83163: case 83164: case 83165: case 83166: case 83167: case 83168: case 83169: case 83170: case 83171: case 83172: case 83173: case 83174: case 83175: case 83176: case 83177: case 83178: case 83179: case 83180: case 83181: case 83182: case 83183: case 83184: case 83185: case 83186: case 83187: case 83188: case 83189: case 83190: case 83191: case 83192: case 83193: case 83194: case 83195: case 83196: case 83197: case 83198: case 83199: case 83200: case 83201: case 83202: case 83203: case 83204: case 83205: case 83206: case 83207: case 83208: case 83209: case 83210: case 83211: case 83212: case 83213: case 83214: case 83215: case 83216: case 83217: case 83218: case 83219: case 83220: case 83221: case 83222: case 83223: case 83224: case 83225: case 83226: case 83227: case 83228: case 83229: case 83230: case 83231: case 83232: case 83233: case 83234: case 83235: case 83236: case 83237: case 83238: case 83239: case 83240: case 83241: case 83242: case 83243: case 83244: case 83245: case 83246: case 83247: case 83248: case 83249: case 83250: case 83251: case 83252: case 83253: case 83254: case 83255: case 83256: case 83257: case 83258: case 83259: case 83260: case 83261: case 83262: case 83263: case 83264: case 83265: case 83266: case 83267: case 83268: case 83269: case 83270: case 83271: case 83272: case 83273: case 83274: case 83275: case 83276: case 83277: case 83278: case 83279: case 83280: case 83281: case 83282: case 83283: case 83284: case 83285: case 83286: case 83287: case 83288: case 83289: case 83290: case 83291: case 83292: case 83293: case 83294: case 83295: case 83296: case 83297: case 83298: case 83299: case 83300: case 83301: case 83302: case 83303: case 83304: case 83305: case 83306: case 83307: case 83308: case 83309: case 83310: case 83311: case 83312: case 83313: case 83314: case 83315: case 83316: case 83317: case 83318: case 83319: case 83320: case 83321: case 83322: case 83323: case 83324: case 83325: case 83326: case 83327: case 83328: case 83329: case 83330: case 83331: case 83332: case 83333: case 83334: case 83335: case 83336: case 83337: case 83338: case 83339: case 83340: case 83341: case 83342: case 83343: case 83344: case 83345: case 83346: case 83347: case 83348: case 83349: case 83350: case 83351: case 83352: case 83353: case 83354: case 83355: case 83356: case 83357: case 83358: case 83359: case 83360: case 83361: case 83362: case 83363: case 83364: case 83365: case 83366: case 83367: case 83368: case 83369: case 83370: case 83371: case 83372: case 83373: case 83374: case 83375: case 83376: case 83377: case 83378: case 83379: case 83380: case 83381: case 83382: case 83383: case 83384: case 83385: case 83386: case 83387: case 83388: case 83389: case 83390: case 83391: case 83392: case 83393: case 83394: case 83395: case 83396: case 83397: case 83398: case 83399: case 83400: case 83401: case 83402: case 83403: case 83404: case 83405: case 83406: case 83407: case 83408: case 83409: case 83410: case 83411: case 83412: case 83413: case 83414: case 83415: case 83416: case 83417: case 83418: case 83419: case 83420: case 83421: case 83422: case 83423: case 83424: case 83425: case 83426: case 83427: case 83428: case 83429: case 83430: case 83431: case 83432: case 83433: case 83434: case 83435: case 83436: case 83437: case 83438: case 83439: case 83440: case 83441: case 83442: case 83443: case 83444: case 83445: case 83446: case 83447: case 83448: case 83449: case 83450: case 83451: case 83452: case 83453: case 83454: case 83455: case 83456: case 83457: case 83458: case 83459: case 83460: case 83461: case 83462: case 83463: case 83464: case 83465: case 83466: case 83467: case 83468: case 83469: case 83470: case 83471: case 83472: case 83473: case 83474: case 83475: case 83476: case 83477: case 83478: case 83479: case 83480: case 83481: case 83482: case 83483: case 83484: case 83485: case 83486: case 83487: case 83488: case 83489: case 83490: case 83491: case 83492: case 83493: case 83494: case 83495: case 83496: case 83497: case 83498: case 83499: case 83500: case 83501: case 83502: case 83503: case 83504: case 83505: case 83506: case 83507: case 83508: case 83509: case 83510: case 83511: case 83512: case 83513: case 83514: case 83515: case 83516: case 83517: case 83518: case 83519: case 83520: case 83521: case 83522: case 83523: case 83524: case 83525: case 83526: return 23448 + c - 82944; case 92160: case 92161: case 92162: case 92163: case 92164: case 92165: case 92166: case 92167: case 92168: case 92169: case 92170: case 92171: case 92172: case 92173: case 92174: case 92175: case 92176: case 92177: case 92178: case 92179: case 92180: case 92181: case 92182: case 92183: case 92184: case 92185: case 92186: case 92187: case 92188: case 92189: case 92190: case 92191: case 92192: case 92193: case 92194: case 92195: case 92196: case 92197: case 92198: case 92199: case 92200: case 92201: case 92202: case 92203: case 92204: case 92205: case 92206: case 92207: case 92208: case 92209: case 92210: case 92211: case 92212: case 92213: case 92214: case 92215: case 92216: case 92217: case 92218: case 92219: case 92220: case 92221: case 92222: case 92223: case 92224: case 92225: case 92226: case 92227: case 92228: case 92229: case 92230: case 92231: case 92232: case 92233: case 92234: case 92235: case 92236: case 92237: case 92238: case 92239: case 92240: case 92241: case 92242: case 92243: case 92244: case 92245: case 92246: case 92247: case 92248: case 92249: case 92250: case 92251: case 92252: case 92253: case 92254: case 92255: case 92256: case 92257: case 92258: case 92259: case 92260: case 92261: case 92262: case 92263: case 92264: case 92265: case 92266: case 92267: case 92268: case 92269: case 92270: case 92271: case 92272: case 92273: case 92274: case 92275: case 92276: case 92277: case 92278: case 92279: case 92280: case 92281: case 92282: case 92283: case 92284: case 92285: case 92286: case 92287: case 92288: case 92289: case 92290: case 92291: case 92292: case 92293: case 92294: case 92295: case 92296: case 92297: case 92298: case 92299: case 92300: case 92301: case 92302: case 92303: case 92304: case 92305: case 92306: case 92307: case 92308: case 92309: case 92310: case 92311: case 92312: case 92313: case 92314: case 92315: case 92316: case 92317: case 92318: case 92319: case 92320: case 92321: case 92322: case 92323: case 92324: case 92325: case 92326: case 92327: case 92328: case 92329: case 92330: case 92331: case 92332: case 92333: case 92334: case 92335: case 92336: case 92337: case 92338: case 92339: case 92340: case 92341: case 92342: case 92343: case 92344: case 92345: case 92346: case 92347: case 92348: case 92349: case 92350: case 92351: case 92352: case 92353: case 92354: case 92355: case 92356: case 92357: case 92358: case 92359: case 92360: case 92361: case 92362: case 92363: case 92364: case 92365: case 92366: case 92367: case 92368: case 92369: case 92370: case 92371: case 92372: case 92373: case 92374: case 92375: case 92376: case 92377: case 92378: case 92379: case 92380: case 92381: case 92382: case 92383: case 92384: case 92385: case 92386: case 92387: case 92388: case 92389: case 92390: case 92391: case 92392: case 92393: case 92394: case 92395: case 92396: case 92397: case 92398: case 92399: case 92400: case 92401: case 92402: case 92403: case 92404: case 92405: case 92406: case 92407: case 92408: case 92409: case 92410: case 92411: case 92412: case 92413: case 92414: case 92415: case 92416: case 92417: case 92418: case 92419: case 92420: case 92421: case 92422: case 92423: case 92424: case 92425: case 92426: case 92427: case 92428: case 92429: case 92430: case 92431: case 92432: case 92433: case 92434: case 92435: case 92436: case 92437: case 92438: case 92439: case 92440: case 92441: case 92442: case 92443: case 92444: case 92445: case 92446: case 92447: case 92448: case 92449: case 92450: case 92451: case 92452: case 92453: case 92454: case 92455: case 92456: case 92457: case 92458: case 92459: case 92460: case 92461: case 92462: case 92463: case 92464: case 92465: case 92466: case 92467: case 92468: case 92469: case 92470: case 92471: case 92472: case 92473: case 92474: case 92475: case 92476: case 92477: case 92478: case 92479: case 92480: case 92481: case 92482: case 92483: case 92484: case 92485: case 92486: case 92487: case 92488: case 92489: case 92490: case 92491: case 92492: case 92493: case 92494: case 92495: case 92496: case 92497: case 92498: case 92499: case 92500: case 92501: case 92502: case 92503: case 92504: case 92505: case 92506: case 92507: case 92508: case 92509: case 92510: case 92511: case 92512: case 92513: case 92514: case 92515: case 92516: case 92517: case 92518: case 92519: case 92520: case 92521: case 92522: case 92523: case 92524: case 92525: case 92526: case 92527: case 92528: case 92529: case 92530: case 92531: case 92532: case 92533: case 92534: case 92535: case 92536: case 92537: case 92538: case 92539: case 92540: case 92541: case 92542: case 92543: case 92544: case 92545: case 92546: case 92547: case 92548: case 92549: case 92550: case 92551: case 92552: case 92553: case 92554: case 92555: case 92556: case 92557: case 92558: case 92559: case 92560: case 92561: case 92562: case 92563: case 92564: case 92565: case 92566: case 92567: case 92568: case 92569: case 92570: case 92571: case 92572: case 92573: case 92574: case 92575: case 92576: case 92577: case 92578: case 92579: case 92580: case 92581: case 92582: case 92583: case 92584: case 92585: case 92586: case 92587: case 92588: case 92589: case 92590: case 92591: case 92592: case 92593: case 92594: case 92595: case 92596: case 92597: case 92598: case 92599: case 92600: case 92601: case 92602: case 92603: case 92604: case 92605: case 92606: case 92607: case 92608: case 92609: case 92610: case 92611: case 92612: case 92613: case 92614: case 92615: case 92616: case 92617: case 92618: case 92619: case 92620: case 92621: case 92622: case 92623: case 92624: case 92625: case 92626: case 92627: case 92628: case 92629: case 92630: case 92631: case 92632: case 92633: case 92634: case 92635: case 92636: case 92637: case 92638: case 92639: case 92640: case 92641: case 92642: case 92643: case 92644: case 92645: case 92646: case 92647: case 92648: case 92649: case 92650: case 92651: case 92652: case 92653: case 92654: case 92655: case 92656: case 92657: case 92658: case 92659: case 92660: case 92661: case 92662: case 92663: case 92664: case 92665: case 92666: case 92667: case 92668: case 92669: case 92670: case 92671: case 92672: case 92673: case 92674: case 92675: case 92676: case 92677: case 92678: case 92679: case 92680: case 92681: case 92682: case 92683: case 92684: case 92685: case 92686: case 92687: case 92688: case 92689: case 92690: case 92691: case 92692: case 92693: case 92694: case 92695: case 92696: case 92697: case 92698: case 92699: case 92700: case 92701: case 92702: case 92703: case 92704: case 92705: case 92706: case 92707: case 92708: case 92709: case 92710: case 92711: case 92712: case 92713: case 92714: case 92715: case 92716: case 92717: case 92718: case 92719: case 92720: case 92721: case 92722: case 92723: case 92724: case 92725: case 92726: case 92727: case 92728: return 24031 + c - 92160; case 92736: case 92737: case 92738: case 92739: case 92740: case 92741: case 92742: case 92743: case 92744: case 92745: case 92746: case 92747: case 92748: case 92749: case 92750: case 92751: case 92752: case 92753: case 92754: case 92755: case 92756: case 92757: case 92758: case 92759: case 92760: case 92761: case 92762: case 92763: case 92764: case 92765: case 92766: return 24600 + c - 92736; case 92768: case 92769: case 92770: case 92771: case 92772: case 92773: case 92774: case 92775: case 92776: case 92777: return 24631 + c - 92768; case 92782: case 92783: return 24641 + c - 92782; case 92880: case 92881: case 92882: case 92883: case 92884: case 92885: case 92886: case 92887: case 92888: case 92889: case 92890: case 92891: case 92892: case 92893: case 92894: case 92895: case 92896: case 92897: case 92898: case 92899: case 92900: case 92901: case 92902: case 92903: case 92904: case 92905: case 92906: case 92907: case 92908: case 92909: return 24643 + c - 92880; case 92912: case 92913: case 92914: case 92915: case 92916: case 92917: return 24673 + c - 92912; case 92928: case 92929: case 92930: case 92931: case 92932: case 92933: case 92934: case 92935: case 92936: case 92937: case 92938: case 92939: case 92940: case 92941: case 92942: case 92943: case 92944: case 92945: case 92946: case 92947: case 92948: case 92949: case 92950: case 92951: case 92952: case 92953: case 92954: case 92955: case 92956: case 92957: case 92958: case 92959: case 92960: case 92961: case 92962: case 92963: case 92964: case 92965: case 92966: case 92967: case 92968: case 92969: case 92970: case 92971: case 92972: case 92973: case 92974: case 92975: case 92976: case 92977: case 92978: case 92979: case 92980: case 92981: case 92982: case 92983: case 92984: case 92985: case 92986: case 92987: case 92988: case 92989: case 92990: case 92991: case 92992: case 92993: case 92994: case 92995: case 92996: case 92997: return 24679 + c - 92928; case 93008: case 93009: case 93010: case 93011: case 93012: case 93013: case 93014: case 93015: case 93016: case 93017: return 24749 + c - 93008; case 93019: case 93020: case 93021: case 93022: case 93023: case 93024: case 93025: return 24759 + c - 93019; case 93027: case 93028: case 93029: case 93030: case 93031: case 93032: case 93033: case 93034: case 93035: case 93036: case 93037: case 93038: case 93039: case 93040: case 93041: case 93042: case 93043: case 93044: case 93045: case 93046: case 93047: return 24766 + c - 93027; case 93053: case 93054: case 93055: case 93056: case 93057: case 93058: case 93059: case 93060: case 93061: case 93062: case 93063: case 93064: case 93065: case 93066: case 93067: case 93068: case 93069: case 93070: case 93071: return 24787 + c - 93053; case 93760: case 93761: case 93762: case 93763: case 93764: case 93765: case 93766: case 93767: case 93768: case 93769: case 93770: case 93771: case 93772: case 93773: case 93774: case 93775: case 93776: case 93777: case 93778: case 93779: case 93780: case 93781: case 93782: case 93783: case 93784: case 93785: case 93786: case 93787: case 93788: case 93789: case 93790: case 93791: case 93792: case 93793: case 93794: case 93795: case 93796: case 93797: case 93798: case 93799: case 93800: case 93801: case 93802: case 93803: case 93804: case 93805: case 93806: case 93807: case 93808: case 93809: case 93810: case 93811: case 93812: case 93813: case 93814: case 93815: case 93816: case 93817: case 93818: case 93819: case 93820: case 93821: case 93822: case 93823: case 93824: case 93825: case 93826: case 93827: case 93828: case 93829: case 93830: case 93831: case 93832: case 93833: case 93834: case 93835: case 93836: case 93837: case 93838: case 93839: case 93840: case 93841: case 93842: case 93843: case 93844: case 93845: case 93846: case 93847: case 93848: case 93849: case 93850: return 24806 + c - 93760; case 93952: case 93953: case 93954: case 93955: case 93956: case 93957: case 93958: case 93959: case 93960: case 93961: case 93962: case 93963: case 93964: case 93965: case 93966: case 93967: case 93968: case 93969: case 93970: case 93971: case 93972: case 93973: case 93974: case 93975: case 93976: case 93977: case 93978: case 93979: case 93980: case 93981: case 93982: case 93983: case 93984: case 93985: case 93986: case 93987: case 93988: case 93989: case 93990: case 93991: case 93992: case 93993: case 93994: case 93995: case 93996: case 93997: case 93998: case 93999: case 94000: case 94001: case 94002: case 94003: case 94004: case 94005: case 94006: case 94007: case 94008: case 94009: case 94010: case 94011: case 94012: case 94013: case 94014: case 94015: case 94016: case 94017: case 94018: case 94019: case 94020: case 94021: case 94022: case 94023: case 94024: case 94025: case 94026: return 24897 + c - 93952; case 94031: case 94032: case 94033: case 94034: case 94035: case 94036: case 94037: case 94038: case 94039: case 94040: case 94041: case 94042: case 94043: case 94044: case 94045: case 94046: case 94047: case 94048: case 94049: case 94050: case 94051: case 94052: case 94053: case 94054: case 94055: case 94056: case 94057: case 94058: case 94059: case 94060: case 94061: case 94062: case 94063: case 94064: case 94065: case 94066: case 94067: case 94068: case 94069: case 94070: case 94071: case 94072: case 94073: case 94074: case 94075: case 94076: case 94077: case 94078: case 94079: case 94080: case 94081: case 94082: case 94083: case 94084: case 94085: case 94086: case 94087: return 24972 + c - 94031; case 94095: case 94096: case 94097: case 94098: case 94099: case 94100: case 94101: case 94102: case 94103: case 94104: case 94105: case 94106: case 94107: case 94108: case 94109: case 94110: case 94111: return 25029 + c - 94095; case 94176: case 94177: case 94178: case 94179: return 25046 + c - 94176; case 94208: return 25050; case 100343: return 25051; case 100352: case 100353: case 100354: case 100355: case 100356: case 100357: case 100358: case 100359: case 100360: case 100361: case 100362: case 100363: case 100364: case 100365: case 100366: case 100367: case 100368: case 100369: case 100370: case 100371: case 100372: case 100373: case 100374: case 100375: case 100376: case 100377: case 100378: case 100379: case 100380: case 100381: case 100382: case 100383: case 100384: case 100385: case 100386: case 100387: case 100388: case 100389: case 100390: case 100391: case 100392: case 100393: case 100394: case 100395: case 100396: case 100397: case 100398: case 100399: case 100400: case 100401: case 100402: case 100403: case 100404: case 100405: case 100406: case 100407: case 100408: case 100409: case 100410: case 100411: case 100412: case 100413: case 100414: case 100415: case 100416: case 100417: case 100418: case 100419: case 100420: case 100421: case 100422: case 100423: case 100424: case 100425: case 100426: case 100427: case 100428: case 100429: case 100430: case 100431: case 100432: case 100433: case 100434: case 100435: case 100436: case 100437: case 100438: case 100439: case 100440: case 100441: case 100442: case 100443: case 100444: case 100445: case 100446: case 100447: case 100448: case 100449: case 100450: case 100451: case 100452: case 100453: case 100454: case 100455: case 100456: case 100457: case 100458: case 100459: case 100460: case 100461: case 100462: case 100463: case 100464: case 100465: case 100466: case 100467: case 100468: case 100469: case 100470: case 100471: case 100472: case 100473: case 100474: case 100475: case 100476: case 100477: case 100478: case 100479: case 100480: case 100481: case 100482: case 100483: case 100484: case 100485: case 100486: case 100487: case 100488: case 100489: case 100490: case 100491: case 100492: case 100493: case 100494: case 100495: case 100496: case 100497: case 100498: case 100499: case 100500: case 100501: case 100502: case 100503: case 100504: case 100505: case 100506: case 100507: case 100508: case 100509: case 100510: case 100511: case 100512: case 100513: case 100514: case 100515: case 100516: case 100517: case 100518: case 100519: case 100520: case 100521: case 100522: case 100523: case 100524: case 100525: case 100526: case 100527: case 100528: case 100529: case 100530: case 100531: case 100532: case 100533: case 100534: case 100535: case 100536: case 100537: case 100538: case 100539: case 100540: case 100541: case 100542: case 100543: case 100544: case 100545: case 100546: case 100547: case 100548: case 100549: case 100550: case 100551: case 100552: case 100553: case 100554: case 100555: case 100556: case 100557: case 100558: case 100559: case 100560: case 100561: case 100562: case 100563: case 100564: case 100565: case 100566: case 100567: case 100568: case 100569: case 100570: case 100571: case 100572: case 100573: case 100574: case 100575: case 100576: case 100577: case 100578: case 100579: case 100580: case 100581: case 100582: case 100583: case 100584: case 100585: case 100586: case 100587: case 100588: case 100589: case 100590: case 100591: case 100592: case 100593: case 100594: case 100595: case 100596: case 100597: case 100598: case 100599: case 100600: case 100601: case 100602: case 100603: case 100604: case 100605: case 100606: case 100607: case 100608: case 100609: case 100610: case 100611: case 100612: case 100613: case 100614: case 100615: case 100616: case 100617: case 100618: case 100619: case 100620: case 100621: case 100622: case 100623: case 100624: case 100625: case 100626: case 100627: case 100628: case 100629: case 100630: case 100631: case 100632: case 100633: case 100634: case 100635: case 100636: case 100637: case 100638: case 100639: case 100640: case 100641: case 100642: case 100643: case 100644: case 100645: case 100646: case 100647: case 100648: case 100649: case 100650: case 100651: case 100652: case 100653: case 100654: case 100655: case 100656: case 100657: case 100658: case 100659: case 100660: case 100661: case 100662: case 100663: case 100664: case 100665: case 100666: case 100667: case 100668: case 100669: case 100670: case 100671: case 100672: case 100673: case 100674: case 100675: case 100676: case 100677: case 100678: case 100679: case 100680: case 100681: case 100682: case 100683: case 100684: case 100685: case 100686: case 100687: case 100688: case 100689: case 100690: case 100691: case 100692: case 100693: case 100694: case 100695: case 100696: case 100697: case 100698: case 100699: case 100700: case 100701: case 100702: case 100703: case 100704: case 100705: case 100706: case 100707: case 100708: case 100709: case 100710: case 100711: case 100712: case 100713: case 100714: case 100715: case 100716: case 100717: case 100718: case 100719: case 100720: case 100721: case 100722: case 100723: case 100724: case 100725: case 100726: case 100727: case 100728: case 100729: case 100730: case 100731: case 100732: case 100733: case 100734: case 100735: case 100736: case 100737: case 100738: case 100739: case 100740: case 100741: case 100742: case 100743: case 100744: case 100745: case 100746: case 100747: case 100748: case 100749: case 100750: case 100751: case 100752: case 100753: case 100754: case 100755: case 100756: case 100757: case 100758: case 100759: case 100760: case 100761: case 100762: case 100763: case 100764: case 100765: case 100766: case 100767: case 100768: case 100769: case 100770: case 100771: case 100772: case 100773: case 100774: case 100775: case 100776: case 100777: case 100778: case 100779: case 100780: case 100781: case 100782: case 100783: case 100784: case 100785: case 100786: case 100787: case 100788: case 100789: case 100790: case 100791: case 100792: case 100793: case 100794: case 100795: case 100796: case 100797: case 100798: case 100799: case 100800: case 100801: case 100802: case 100803: case 100804: case 100805: case 100806: case 100807: case 100808: case 100809: case 100810: case 100811: case 100812: case 100813: case 100814: case 100815: case 100816: case 100817: case 100818: case 100819: case 100820: case 100821: case 100822: case 100823: case 100824: case 100825: case 100826: case 100827: case 100828: case 100829: case 100830: case 100831: case 100832: case 100833: case 100834: case 100835: case 100836: case 100837: case 100838: case 100839: case 100840: case 100841: case 100842: case 100843: case 100844: case 100845: case 100846: case 100847: case 100848: case 100849: case 100850: case 100851: case 100852: case 100853: case 100854: case 100855: case 100856: case 100857: case 100858: case 100859: case 100860: case 100861: case 100862: case 100863: case 100864: case 100865: case 100866: case 100867: case 100868: case 100869: case 100870: case 100871: case 100872: case 100873: case 100874: case 100875: case 100876: case 100877: case 100878: case 100879: case 100880: case 100881: case 100882: case 100883: case 100884: case 100885: case 100886: case 100887: case 100888: case 100889: case 100890: case 100891: case 100892: case 100893: case 100894: case 100895: case 100896: case 100897: case 100898: case 100899: case 100900: case 100901: case 100902: case 100903: case 100904: case 100905: case 100906: case 100907: case 100908: case 100909: case 100910: case 100911: case 100912: case 100913: case 100914: case 100915: case 100916: case 100917: case 100918: case 100919: case 100920: case 100921: case 100922: case 100923: case 100924: case 100925: case 100926: case 100927: case 100928: case 100929: case 100930: case 100931: case 100932: case 100933: case 100934: case 100935: case 100936: case 100937: case 100938: case 100939: case 100940: case 100941: case 100942: case 100943: case 100944: case 100945: case 100946: case 100947: case 100948: case 100949: case 100950: case 100951: case 100952: case 100953: case 100954: case 100955: case 100956: case 100957: case 100958: case 100959: case 100960: case 100961: case 100962: case 100963: case 100964: case 100965: case 100966: case 100967: case 100968: case 100969: case 100970: case 100971: case 100972: case 100973: case 100974: case 100975: case 100976: case 100977: case 100978: case 100979: case 100980: case 100981: case 100982: case 100983: case 100984: case 100985: case 100986: case 100987: case 100988: case 100989: case 100990: case 100991: case 100992: case 100993: case 100994: case 100995: case 100996: case 100997: case 100998: case 100999: case 101000: case 101001: case 101002: case 101003: case 101004: case 101005: case 101006: case 101007: case 101008: case 101009: case 101010: case 101011: case 101012: case 101013: case 101014: case 101015: case 101016: case 101017: case 101018: case 101019: case 101020: case 101021: case 101022: case 101023: case 101024: case 101025: case 101026: case 101027: case 101028: case 101029: case 101030: case 101031: case 101032: case 101033: case 101034: case 101035: case 101036: case 101037: case 101038: case 101039: case 101040: case 101041: case 101042: case 101043: case 101044: case 101045: case 101046: case 101047: case 101048: case 101049: case 101050: case 101051: case 101052: case 101053: case 101054: case 101055: case 101056: case 101057: case 101058: case 101059: case 101060: case 101061: case 101062: case 101063: case 101064: case 101065: case 101066: case 101067: case 101068: case 101069: case 101070: case 101071: case 101072: case 101073: case 101074: case 101075: case 101076: case 101077: case 101078: case 101079: case 101080: case 101081: case 101082: case 101083: case 101084: case 101085: case 101086: case 101087: case 101088: case 101089: case 101090: case 101091: case 101092: case 101093: case 101094: case 101095: case 101096: case 101097: case 101098: case 101099: case 101100: case 101101: case 101102: case 101103: case 101104: case 101105: case 101106: return 25052 + c - 100352; case 110592: case 110593: case 110594: case 110595: case 110596: case 110597: case 110598: case 110599: case 110600: case 110601: case 110602: case 110603: case 110604: case 110605: case 110606: case 110607: case 110608: case 110609: case 110610: case 110611: case 110612: case 110613: case 110614: case 110615: case 110616: case 110617: case 110618: case 110619: case 110620: case 110621: case 110622: case 110623: case 110624: case 110625: case 110626: case 110627: case 110628: case 110629: case 110630: case 110631: case 110632: case 110633: case 110634: case 110635: case 110636: case 110637: case 110638: case 110639: case 110640: case 110641: case 110642: case 110643: case 110644: case 110645: case 110646: case 110647: case 110648: case 110649: case 110650: case 110651: case 110652: case 110653: case 110654: case 110655: case 110656: case 110657: case 110658: case 110659: case 110660: case 110661: case 110662: case 110663: case 110664: case 110665: case 110666: case 110667: case 110668: case 110669: case 110670: case 110671: case 110672: case 110673: case 110674: case 110675: case 110676: case 110677: case 110678: case 110679: case 110680: case 110681: case 110682: case 110683: case 110684: case 110685: case 110686: case 110687: case 110688: case 110689: case 110690: case 110691: case 110692: case 110693: case 110694: case 110695: case 110696: case 110697: case 110698: case 110699: case 110700: case 110701: case 110702: case 110703: case 110704: case 110705: case 110706: case 110707: case 110708: case 110709: case 110710: case 110711: case 110712: case 110713: case 110714: case 110715: case 110716: case 110717: case 110718: case 110719: case 110720: case 110721: case 110722: case 110723: case 110724: case 110725: case 110726: case 110727: case 110728: case 110729: case 110730: case 110731: case 110732: case 110733: case 110734: case 110735: case 110736: case 110737: case 110738: case 110739: case 110740: case 110741: case 110742: case 110743: case 110744: case 110745: case 110746: case 110747: case 110748: case 110749: case 110750: case 110751: case 110752: case 110753: case 110754: case 110755: case 110756: case 110757: case 110758: case 110759: case 110760: case 110761: case 110762: case 110763: case 110764: case 110765: case 110766: case 110767: case 110768: case 110769: case 110770: case 110771: case 110772: case 110773: case 110774: case 110775: case 110776: case 110777: case 110778: case 110779: case 110780: case 110781: case 110782: case 110783: case 110784: case 110785: case 110786: case 110787: case 110788: case 110789: case 110790: case 110791: case 110792: case 110793: case 110794: case 110795: case 110796: case 110797: case 110798: case 110799: case 110800: case 110801: case 110802: case 110803: case 110804: case 110805: case 110806: case 110807: case 110808: case 110809: case 110810: case 110811: case 110812: case 110813: case 110814: case 110815: case 110816: case 110817: case 110818: case 110819: case 110820: case 110821: case 110822: case 110823: case 110824: case 110825: case 110826: case 110827: case 110828: case 110829: case 110830: case 110831: case 110832: case 110833: case 110834: case 110835: case 110836: case 110837: case 110838: case 110839: case 110840: case 110841: case 110842: case 110843: case 110844: case 110845: case 110846: case 110847: case 110848: case 110849: case 110850: case 110851: case 110852: case 110853: case 110854: case 110855: case 110856: case 110857: case 110858: case 110859: case 110860: case 110861: case 110862: case 110863: case 110864: case 110865: case 110866: case 110867: case 110868: case 110869: case 110870: case 110871: case 110872: case 110873: case 110874: case 110875: case 110876: case 110877: case 110878: return 25807 + c - 110592; case 110928: case 110929: case 110930: return 26094 + c - 110928; case 110948: case 110949: case 110950: case 110951: return 26097 + c - 110948; case 110960: case 110961: case 110962: case 110963: case 110964: case 110965: case 110966: case 110967: case 110968: case 110969: case 110970: case 110971: case 110972: case 110973: case 110974: case 110975: case 110976: case 110977: case 110978: case 110979: case 110980: case 110981: case 110982: case 110983: case 110984: case 110985: case 110986: case 110987: case 110988: case 110989: case 110990: case 110991: case 110992: case 110993: case 110994: case 110995: case 110996: case 110997: case 110998: case 110999: case 111000: case 111001: case 111002: case 111003: case 111004: case 111005: case 111006: case 111007: case 111008: case 111009: case 111010: case 111011: case 111012: case 111013: case 111014: case 111015: case 111016: case 111017: case 111018: case 111019: case 111020: case 111021: case 111022: case 111023: case 111024: case 111025: case 111026: case 111027: case 111028: case 111029: case 111030: case 111031: case 111032: case 111033: case 111034: case 111035: case 111036: case 111037: case 111038: case 111039: case 111040: case 111041: case 111042: case 111043: case 111044: case 111045: case 111046: case 111047: case 111048: case 111049: case 111050: case 111051: case 111052: case 111053: case 111054: case 111055: case 111056: case 111057: case 111058: case 111059: case 111060: case 111061: case 111062: case 111063: case 111064: case 111065: case 111066: case 111067: case 111068: case 111069: case 111070: case 111071: case 111072: case 111073: case 111074: case 111075: case 111076: case 111077: case 111078: case 111079: case 111080: case 111081: case 111082: case 111083: case 111084: case 111085: case 111086: case 111087: case 111088: case 111089: case 111090: case 111091: case 111092: case 111093: case 111094: case 111095: case 111096: case 111097: case 111098: case 111099: case 111100: case 111101: case 111102: case 111103: case 111104: case 111105: case 111106: case 111107: case 111108: case 111109: case 111110: case 111111: case 111112: case 111113: case 111114: case 111115: case 111116: case 111117: case 111118: case 111119: case 111120: case 111121: case 111122: case 111123: case 111124: case 111125: case 111126: case 111127: case 111128: case 111129: case 111130: case 111131: case 111132: case 111133: case 111134: case 111135: case 111136: case 111137: case 111138: case 111139: case 111140: case 111141: case 111142: case 111143: case 111144: case 111145: case 111146: case 111147: case 111148: case 111149: case 111150: case 111151: case 111152: case 111153: case 111154: case 111155: case 111156: case 111157: case 111158: case 111159: case 111160: case 111161: case 111162: case 111163: case 111164: case 111165: case 111166: case 111167: case 111168: case 111169: case 111170: case 111171: case 111172: case 111173: case 111174: case 111175: case 111176: case 111177: case 111178: case 111179: case 111180: case 111181: case 111182: case 111183: case 111184: case 111185: case 111186: case 111187: case 111188: case 111189: case 111190: case 111191: case 111192: case 111193: case 111194: case 111195: case 111196: case 111197: case 111198: case 111199: case 111200: case 111201: case 111202: case 111203: case 111204: case 111205: case 111206: case 111207: case 111208: case 111209: case 111210: case 111211: case 111212: case 111213: case 111214: case 111215: case 111216: case 111217: case 111218: case 111219: case 111220: case 111221: case 111222: case 111223: case 111224: case 111225: case 111226: case 111227: case 111228: case 111229: case 111230: case 111231: case 111232: case 111233: case 111234: case 111235: case 111236: case 111237: case 111238: case 111239: case 111240: case 111241: case 111242: case 111243: case 111244: case 111245: case 111246: case 111247: case 111248: case 111249: case 111250: case 111251: case 111252: case 111253: case 111254: case 111255: case 111256: case 111257: case 111258: case 111259: case 111260: case 111261: case 111262: case 111263: case 111264: case 111265: case 111266: case 111267: case 111268: case 111269: case 111270: case 111271: case 111272: case 111273: case 111274: case 111275: case 111276: case 111277: case 111278: case 111279: case 111280: case 111281: case 111282: case 111283: case 111284: case 111285: case 111286: case 111287: case 111288: case 111289: case 111290: case 111291: case 111292: case 111293: case 111294: case 111295: case 111296: case 111297: case 111298: case 111299: case 111300: case 111301: case 111302: case 111303: case 111304: case 111305: case 111306: case 111307: case 111308: case 111309: case 111310: case 111311: case 111312: case 111313: case 111314: case 111315: case 111316: case 111317: case 111318: case 111319: case 111320: case 111321: case 111322: case 111323: case 111324: case 111325: case 111326: case 111327: case 111328: case 111329: case 111330: case 111331: case 111332: case 111333: case 111334: case 111335: case 111336: case 111337: case 111338: case 111339: case 111340: case 111341: case 111342: case 111343: case 111344: case 111345: case 111346: case 111347: case 111348: case 111349: case 111350: case 111351: case 111352: case 111353: case 111354: case 111355: return 26101 + c - 110960; case 113664: case 113665: case 113666: case 113667: case 113668: case 113669: case 113670: case 113671: case 113672: case 113673: case 113674: case 113675: case 113676: case 113677: case 113678: case 113679: case 113680: case 113681: case 113682: case 113683: case 113684: case 113685: case 113686: case 113687: case 113688: case 113689: case 113690: case 113691: case 113692: case 113693: case 113694: case 113695: case 113696: case 113697: case 113698: case 113699: case 113700: case 113701: case 113702: case 113703: case 113704: case 113705: case 113706: case 113707: case 113708: case 113709: case 113710: case 113711: case 113712: case 113713: case 113714: case 113715: case 113716: case 113717: case 113718: case 113719: case 113720: case 113721: case 113722: case 113723: case 113724: case 113725: case 113726: case 113727: case 113728: case 113729: case 113730: case 113731: case 113732: case 113733: case 113734: case 113735: case 113736: case 113737: case 113738: case 113739: case 113740: case 113741: case 113742: case 113743: case 113744: case 113745: case 113746: case 113747: case 113748: case 113749: case 113750: case 113751: case 113752: case 113753: case 113754: case 113755: case 113756: case 113757: case 113758: case 113759: case 113760: case 113761: case 113762: case 113763: case 113764: case 113765: case 113766: case 113767: case 113768: case 113769: case 113770: return 26497 + c - 113664; case 113776: case 113777: case 113778: case 113779: case 113780: case 113781: case 113782: case 113783: case 113784: case 113785: case 113786: case 113787: case 113788: return 26604 + c - 113776; case 113792: case 113793: case 113794: case 113795: case 113796: case 113797: case 113798: case 113799: case 113800: return 26617 + c - 113792; case 113808: case 113809: case 113810: case 113811: case 113812: case 113813: case 113814: case 113815: case 113816: case 113817: return 26626 + c - 113808; case 113820: case 113821: case 113822: case 113823: case 113824: case 113825: case 113826: case 113827: return 26636 + c - 113820; case 118784: case 118785: case 118786: case 118787: case 118788: case 118789: case 118790: case 118791: case 118792: case 118793: case 118794: case 118795: case 118796: case 118797: case 118798: case 118799: case 118800: case 118801: case 118802: case 118803: case 118804: case 118805: case 118806: case 118807: case 118808: case 118809: case 118810: case 118811: case 118812: case 118813: case 118814: case 118815: case 118816: case 118817: case 118818: case 118819: case 118820: case 118821: case 118822: case 118823: case 118824: case 118825: case 118826: case 118827: case 118828: case 118829: case 118830: case 118831: case 118832: case 118833: case 118834: case 118835: case 118836: case 118837: case 118838: case 118839: case 118840: case 118841: case 118842: case 118843: case 118844: case 118845: case 118846: case 118847: case 118848: case 118849: case 118850: case 118851: case 118852: case 118853: case 118854: case 118855: case 118856: case 118857: case 118858: case 118859: case 118860: case 118861: case 118862: case 118863: case 118864: case 118865: case 118866: case 118867: case 118868: case 118869: case 118870: case 118871: case 118872: case 118873: case 118874: case 118875: case 118876: case 118877: case 118878: case 118879: case 118880: case 118881: case 118882: case 118883: case 118884: case 118885: case 118886: case 118887: case 118888: case 118889: case 118890: case 118891: case 118892: case 118893: case 118894: case 118895: case 118896: case 118897: case 118898: case 118899: case 118900: case 118901: case 118902: case 118903: case 118904: case 118905: case 118906: case 118907: case 118908: case 118909: case 118910: case 118911: case 118912: case 118913: case 118914: case 118915: case 118916: case 118917: case 118918: case 118919: case 118920: case 118921: case 118922: case 118923: case 118924: case 118925: case 118926: case 118927: case 118928: case 118929: case 118930: case 118931: case 118932: case 118933: case 118934: case 118935: case 118936: case 118937: case 118938: case 118939: case 118940: case 118941: case 118942: case 118943: case 118944: case 118945: case 118946: case 118947: case 118948: case 118949: case 118950: case 118951: case 118952: case 118953: case 118954: case 118955: case 118956: case 118957: case 118958: case 118959: case 118960: case 118961: case 118962: case 118963: case 118964: case 118965: case 118966: case 118967: case 118968: case 118969: case 118970: case 118971: case 118972: case 118973: case 118974: case 118975: case 118976: case 118977: case 118978: case 118979: case 118980: case 118981: case 118982: case 118983: case 118984: case 118985: case 118986: case 118987: case 118988: case 118989: case 118990: case 118991: case 118992: case 118993: case 118994: case 118995: case 118996: case 118997: case 118998: case 118999: case 119000: case 119001: case 119002: case 119003: case 119004: case 119005: case 119006: case 119007: case 119008: case 119009: case 119010: case 119011: case 119012: case 119013: case 119014: case 119015: case 119016: case 119017: case 119018: case 119019: case 119020: case 119021: case 119022: case 119023: case 119024: case 119025: case 119026: case 119027: case 119028: case 119029: return 26644 + c - 118784; case 119040: case 119041: case 119042: case 119043: case 119044: case 119045: case 119046: case 119047: case 119048: case 119049: case 119050: case 119051: case 119052: case 119053: case 119054: case 119055: case 119056: case 119057: case 119058: case 119059: case 119060: case 119061: case 119062: case 119063: case 119064: case 119065: case 119066: case 119067: case 119068: case 119069: case 119070: case 119071: case 119072: case 119073: case 119074: case 119075: case 119076: case 119077: case 119078: return 26890 + c - 119040; case 119081: case 119082: case 119083: case 119084: case 119085: case 119086: case 119087: case 119088: case 119089: case 119090: case 119091: case 119092: case 119093: case 119094: case 119095: case 119096: case 119097: case 119098: case 119099: case 119100: case 119101: case 119102: case 119103: case 119104: case 119105: case 119106: case 119107: case 119108: case 119109: case 119110: case 119111: case 119112: case 119113: case 119114: case 119115: case 119116: case 119117: case 119118: case 119119: case 119120: case 119121: case 119122: case 119123: case 119124: case 119125: case 119126: case 119127: case 119128: case 119129: case 119130: case 119131: case 119132: case 119133: case 119134: case 119135: case 119136: case 119137: case 119138: case 119139: case 119140: case 119141: case 119142: case 119143: case 119144: case 119145: case 119146: case 119147: case 119148: case 119149: case 119150: case 119151: case 119152: case 119153: case 119154: case 119155: case 119156: case 119157: case 119158: case 119159: case 119160: case 119161: case 119162: case 119163: case 119164: case 119165: case 119166: case 119167: case 119168: case 119169: case 119170: case 119171: case 119172: case 119173: case 119174: case 119175: case 119176: case 119177: case 119178: case 119179: case 119180: case 119181: case 119182: case 119183: case 119184: case 119185: case 119186: case 119187: case 119188: case 119189: case 119190: case 119191: case 119192: case 119193: case 119194: case 119195: case 119196: case 119197: case 119198: case 119199: case 119200: case 119201: case 119202: case 119203: case 119204: case 119205: case 119206: case 119207: case 119208: case 119209: case 119210: case 119211: case 119212: case 119213: case 119214: case 119215: case 119216: case 119217: case 119218: case 119219: case 119220: case 119221: case 119222: case 119223: case 119224: case 119225: case 119226: case 119227: case 119228: case 119229: case 119230: case 119231: case 119232: case 119233: case 119234: case 119235: case 119236: case 119237: case 119238: case 119239: case 119240: case 119241: case 119242: case 119243: case 119244: case 119245: case 119246: case 119247: case 119248: case 119249: case 119250: case 119251: case 119252: case 119253: case 119254: case 119255: case 119256: case 119257: case 119258: case 119259: case 119260: case 119261: case 119262: case 119263: case 119264: case 119265: case 119266: case 119267: case 119268: case 119269: case 119270: case 119271: case 119272: return 26929 + c - 119081; case 119296: case 119297: case 119298: case 119299: case 119300: case 119301: case 119302: case 119303: case 119304: case 119305: case 119306: case 119307: case 119308: case 119309: case 119310: case 119311: case 119312: case 119313: case 119314: case 119315: case 119316: case 119317: case 119318: case 119319: case 119320: case 119321: case 119322: case 119323: case 119324: case 119325: case 119326: case 119327: case 119328: case 119329: case 119330: case 119331: case 119332: case 119333: case 119334: case 119335: case 119336: case 119337: case 119338: case 119339: case 119340: case 119341: case 119342: case 119343: case 119344: case 119345: case 119346: case 119347: case 119348: case 119349: case 119350: case 119351: case 119352: case 119353: case 119354: case 119355: case 119356: case 119357: case 119358: case 119359: case 119360: case 119361: case 119362: case 119363: case 119364: case 119365: return 27121 + c - 119296; case 119520: case 119521: case 119522: case 119523: case 119524: case 119525: case 119526: case 119527: case 119528: case 119529: case 119530: case 119531: case 119532: case 119533: case 119534: case 119535: case 119536: case 119537: case 119538: case 119539: return 27191 + c - 119520; case 119552: case 119553: case 119554: case 119555: case 119556: case 119557: case 119558: case 119559: case 119560: case 119561: case 119562: case 119563: case 119564: case 119565: case 119566: case 119567: case 119568: case 119569: case 119570: case 119571: case 119572: case 119573: case 119574: case 119575: case 119576: case 119577: case 119578: case 119579: case 119580: case 119581: case 119582: case 119583: case 119584: case 119585: case 119586: case 119587: case 119588: case 119589: case 119590: case 119591: case 119592: case 119593: case 119594: case 119595: case 119596: case 119597: case 119598: case 119599: case 119600: case 119601: case 119602: case 119603: case 119604: case 119605: case 119606: case 119607: case 119608: case 119609: case 119610: case 119611: case 119612: case 119613: case 119614: case 119615: case 119616: case 119617: case 119618: case 119619: case 119620: case 119621: case 119622: case 119623: case 119624: case 119625: case 119626: case 119627: case 119628: case 119629: case 119630: case 119631: case 119632: case 119633: case 119634: case 119635: case 119636: case 119637: case 119638: return 27211 + c - 119552; case 119648: case 119649: case 119650: case 119651: case 119652: case 119653: case 119654: case 119655: case 119656: case 119657: case 119658: case 119659: case 119660: case 119661: case 119662: case 119663: case 119664: case 119665: case 119666: case 119667: case 119668: case 119669: case 119670: case 119671: case 119672: return 27298 + c - 119648; case 119808: case 119809: case 119810: case 119811: case 119812: case 119813: case 119814: case 119815: case 119816: case 119817: case 119818: case 119819: case 119820: case 119821: case 119822: case 119823: case 119824: case 119825: case 119826: case 119827: case 119828: case 119829: case 119830: case 119831: case 119832: case 119833: case 119834: case 119835: case 119836: case 119837: case 119838: case 119839: case 119840: case 119841: case 119842: case 119843: case 119844: case 119845: case 119846: case 119847: case 119848: case 119849: case 119850: case 119851: case 119852: case 119853: case 119854: case 119855: case 119856: case 119857: case 119858: case 119859: case 119860: case 119861: case 119862: case 119863: case 119864: case 119865: case 119866: case 119867: case 119868: case 119869: case 119870: case 119871: case 119872: case 119873: case 119874: case 119875: case 119876: case 119877: case 119878: case 119879: case 119880: case 119881: case 119882: case 119883: case 119884: case 119885: case 119886: case 119887: case 119888: case 119889: case 119890: case 119891: case 119892: return 27323 + c - 119808; case 119894: case 119895: case 119896: case 119897: case 119898: case 119899: case 119900: case 119901: case 119902: case 119903: case 119904: case 119905: case 119906: case 119907: case 119908: case 119909: case 119910: case 119911: case 119912: case 119913: case 119914: case 119915: case 119916: case 119917: case 119918: case 119919: case 119920: case 119921: case 119922: case 119923: case 119924: case 119925: case 119926: case 119927: case 119928: case 119929: case 119930: case 119931: case 119932: case 119933: case 119934: case 119935: case 119936: case 119937: case 119938: case 119939: case 119940: case 119941: case 119942: case 119943: case 119944: case 119945: case 119946: case 119947: case 119948: case 119949: case 119950: case 119951: case 119952: case 119953: case 119954: case 119955: case 119956: case 119957: case 119958: case 119959: case 119960: case 119961: case 119962: case 119963: case 119964: return 27408 + c - 119894; case 119966: case 119967: return 27479 + c - 119966; case 119970: return 27481; case 119973: case 119974: return 27482 + c - 119973; case 119977: case 119978: case 119979: case 119980: return 27484 + c - 119977; case 119982: case 119983: case 119984: case 119985: case 119986: case 119987: case 119988: case 119989: case 119990: case 119991: case 119992: case 119993: return 27488 + c - 119982; case 119995: return 27500; case 119997: case 119998: case 119999: case 120000: case 120001: case 120002: case 120003: return 27501 + c - 119997; case 120005: case 120006: case 120007: case 120008: case 120009: case 120010: case 120011: case 120012: case 120013: case 120014: case 120015: case 120016: case 120017: case 120018: case 120019: case 120020: case 120021: case 120022: case 120023: case 120024: case 120025: case 120026: case 120027: case 120028: case 120029: case 120030: case 120031: case 120032: case 120033: case 120034: case 120035: case 120036: case 120037: case 120038: case 120039: case 120040: case 120041: case 120042: case 120043: case 120044: case 120045: case 120046: case 120047: case 120048: case 120049: case 120050: case 120051: case 120052: case 120053: case 120054: case 120055: case 120056: case 120057: case 120058: case 120059: case 120060: case 120061: case 120062: case 120063: case 120064: case 120065: case 120066: case 120067: case 120068: case 120069: return 27508 + c - 120005; case 120071: case 120072: case 120073: case 120074: return 27573 + c - 120071; case 120077: case 120078: case 120079: case 120080: case 120081: case 120082: case 120083: case 120084: return 27577 + c - 120077; case 120086: case 120087: case 120088: case 120089: case 120090: case 120091: case 120092: return 27585 + c - 120086; case 120094: case 120095: case 120096: case 120097: case 120098: case 120099: case 120100: case 120101: case 120102: case 120103: case 120104: case 120105: case 120106: case 120107: case 120108: case 120109: case 120110: case 120111: case 120112: case 120113: case 120114: case 120115: case 120116: case 120117: case 120118: case 120119: case 120120: case 120121: return 27592 + c - 120094; case 120123: case 120124: case 120125: case 120126: return 27620 + c - 120123; case 120128: case 120129: case 120130: case 120131: case 120132: return 27624 + c - 120128; case 120134: return 27629; case 120138: case 120139: case 120140: case 120141: case 120142: case 120143: case 120144: return 27630 + c - 120138; case 120146: case 120147: case 120148: case 120149: case 120150: case 120151: case 120152: case 120153: case 120154: case 120155: case 120156: case 120157: case 120158: case 120159: case 120160: case 120161: case 120162: case 120163: case 120164: case 120165: case 120166: case 120167: case 120168: case 120169: case 120170: case 120171: case 120172: case 120173: case 120174: case 120175: case 120176: case 120177: case 120178: case 120179: case 120180: case 120181: case 120182: case 120183: case 120184: case 120185: case 120186: case 120187: case 120188: case 120189: case 120190: case 120191: case 120192: case 120193: case 120194: case 120195: case 120196: case 120197: case 120198: case 120199: case 120200: case 120201: case 120202: case 120203: case 120204: case 120205: case 120206: case 120207: case 120208: case 120209: case 120210: case 120211: case 120212: case 120213: case 120214: case 120215: case 120216: case 120217: case 120218: case 120219: case 120220: case 120221: case 120222: case 120223: case 120224: case 120225: case 120226: case 120227: case 120228: case 120229: case 120230: case 120231: case 120232: case 120233: case 120234: case 120235: case 120236: case 120237: case 120238: case 120239: case 120240: case 120241: case 120242: case 120243: case 120244: case 120245: case 120246: case 120247: case 120248: case 120249: case 120250: case 120251: case 120252: case 120253: case 120254: case 120255: case 120256: case 120257: case 120258: case 120259: case 120260: case 120261: case 120262: case 120263: case 120264: case 120265: case 120266: case 120267: case 120268: case 120269: case 120270: case 120271: case 120272: case 120273: case 120274: case 120275: case 120276: case 120277: case 120278: case 120279: case 120280: case 120281: case 120282: case 120283: case 120284: case 120285: case 120286: case 120287: case 120288: case 120289: case 120290: case 120291: case 120292: case 120293: case 120294: case 120295: case 120296: case 120297: case 120298: case 120299: case 120300: case 120301: case 120302: case 120303: case 120304: case 120305: case 120306: case 120307: case 120308: case 120309: case 120310: case 120311: case 120312: case 120313: case 120314: case 120315: case 120316: case 120317: case 120318: case 120319: case 120320: case 120321: case 120322: case 120323: case 120324: case 120325: case 120326: case 120327: case 120328: case 120329: case 120330: case 120331: case 120332: case 120333: case 120334: case 120335: case 120336: case 120337: case 120338: case 120339: case 120340: case 120341: case 120342: case 120343: case 120344: case 120345: case 120346: case 120347: case 120348: case 120349: case 120350: case 120351: case 120352: case 120353: case 120354: case 120355: case 120356: case 120357: case 120358: case 120359: case 120360: case 120361: case 120362: case 120363: case 120364: case 120365: case 120366: case 120367: case 120368: case 120369: case 120370: case 120371: case 120372: case 120373: case 120374: case 120375: case 120376: case 120377: case 120378: case 120379: case 120380: case 120381: case 120382: case 120383: case 120384: case 120385: case 120386: case 120387: case 120388: case 120389: case 120390: case 120391: case 120392: case 120393: case 120394: case 120395: case 120396: case 120397: case 120398: case 120399: case 120400: case 120401: case 120402: case 120403: case 120404: case 120405: case 120406: case 120407: case 120408: case 120409: case 120410: case 120411: case 120412: case 120413: case 120414: case 120415: case 120416: case 120417: case 120418: case 120419: case 120420: case 120421: case 120422: case 120423: case 120424: case 120425: case 120426: case 120427: case 120428: case 120429: case 120430: case 120431: case 120432: case 120433: case 120434: case 120435: case 120436: case 120437: case 120438: case 120439: case 120440: case 120441: case 120442: case 120443: case 120444: case 120445: case 120446: case 120447: case 120448: case 120449: case 120450: case 120451: case 120452: case 120453: case 120454: case 120455: case 120456: case 120457: case 120458: case 120459: case 120460: case 120461: case 120462: case 120463: case 120464: case 120465: case 120466: case 120467: case 120468: case 120469: case 120470: case 120471: case 120472: case 120473: case 120474: case 120475: case 120476: case 120477: case 120478: case 120479: case 120480: case 120481: case 120482: case 120483: case 120484: case 120485: return 27637 + c - 120146; case 120488: case 120489: case 120490: case 120491: case 120492: case 120493: case 120494: case 120495: case 120496: case 120497: case 120498: case 120499: case 120500: case 120501: case 120502: case 120503: case 120504: case 120505: case 120506: case 120507: case 120508: case 120509: case 120510: case 120511: case 120512: case 120513: case 120514: case 120515: case 120516: case 120517: case 120518: case 120519: case 120520: case 120521: case 120522: case 120523: case 120524: case 120525: case 120526: case 120527: case 120528: case 120529: case 120530: case 120531: case 120532: case 120533: case 120534: case 120535: case 120536: case 120537: case 120538: case 120539: case 120540: case 120541: case 120542: case 120543: case 120544: case 120545: case 120546: case 120547: case 120548: case 120549: case 120550: case 120551: case 120552: case 120553: case 120554: case 120555: case 120556: case 120557: case 120558: case 120559: case 120560: case 120561: case 120562: case 120563: case 120564: case 120565: case 120566: case 120567: case 120568: case 120569: case 120570: case 120571: case 120572: case 120573: case 120574: case 120575: case 120576: case 120577: case 120578: case 120579: case 120580: case 120581: case 120582: case 120583: case 120584: case 120585: case 120586: case 120587: case 120588: case 120589: case 120590: case 120591: case 120592: case 120593: case 120594: case 120595: case 120596: case 120597: case 120598: case 120599: case 120600: case 120601: case 120602: case 120603: case 120604: case 120605: case 120606: case 120607: case 120608: case 120609: case 120610: case 120611: case 120612: case 120613: case 120614: case 120615: case 120616: case 120617: case 120618: case 120619: case 120620: case 120621: case 120622: case 120623: case 120624: case 120625: case 120626: case 120627: case 120628: case 120629: case 120630: case 120631: case 120632: case 120633: case 120634: case 120635: case 120636: case 120637: case 120638: case 120639: case 120640: case 120641: case 120642: case 120643: case 120644: case 120645: case 120646: case 120647: case 120648: case 120649: case 120650: case 120651: case 120652: case 120653: case 120654: case 120655: case 120656: case 120657: case 120658: case 120659: case 120660: case 120661: case 120662: case 120663: case 120664: case 120665: case 120666: case 120667: case 120668: case 120669: case 120670: case 120671: case 120672: case 120673: case 120674: case 120675: case 120676: case 120677: case 120678: case 120679: case 120680: case 120681: case 120682: case 120683: case 120684: case 120685: case 120686: case 120687: case 120688: case 120689: case 120690: case 120691: case 120692: case 120693: case 120694: case 120695: case 120696: case 120697: case 120698: case 120699: case 120700: case 120701: case 120702: case 120703: case 120704: case 120705: case 120706: case 120707: case 120708: case 120709: case 120710: case 120711: case 120712: case 120713: case 120714: case 120715: case 120716: case 120717: case 120718: case 120719: case 120720: case 120721: case 120722: case 120723: case 120724: case 120725: case 120726: case 120727: case 120728: case 120729: case 120730: case 120731: case 120732: case 120733: case 120734: case 120735: case 120736: case 120737: case 120738: case 120739: case 120740: case 120741: case 120742: case 120743: case 120744: case 120745: case 120746: case 120747: case 120748: case 120749: case 120750: case 120751: case 120752: case 120753: case 120754: case 120755: case 120756: case 120757: case 120758: case 120759: case 120760: case 120761: case 120762: case 120763: case 120764: case 120765: case 120766: case 120767: case 120768: case 120769: case 120770: case 120771: case 120772: case 120773: case 120774: case 120775: case 120776: case 120777: case 120778: case 120779: return 27977 + c - 120488; case 120782: case 120783: case 120784: case 120785: case 120786: case 120787: case 120788: case 120789: case 120790: case 120791: case 120792: case 120793: case 120794: case 120795: case 120796: case 120797: case 120798: case 120799: case 120800: case 120801: case 120802: case 120803: case 120804: case 120805: case 120806: case 120807: case 120808: case 120809: case 120810: case 120811: case 120812: case 120813: case 120814: case 120815: case 120816: case 120817: case 120818: case 120819: case 120820: case 120821: case 120822: case 120823: case 120824: case 120825: case 120826: case 120827: case 120828: case 120829: case 120830: case 120831: case 120832: case 120833: case 120834: case 120835: case 120836: case 120837: case 120838: case 120839: case 120840: case 120841: case 120842: case 120843: case 120844: case 120845: case 120846: case 120847: case 120848: case 120849: case 120850: case 120851: case 120852: case 120853: case 120854: case 120855: case 120856: case 120857: case 120858: case 120859: case 120860: case 120861: case 120862: case 120863: case 120864: case 120865: case 120866: case 120867: case 120868: case 120869: case 120870: case 120871: case 120872: case 120873: case 120874: case 120875: case 120876: case 120877: case 120878: case 120879: case 120880: case 120881: case 120882: case 120883: case 120884: case 120885: case 120886: case 120887: case 120888: case 120889: case 120890: case 120891: case 120892: case 120893: case 120894: case 120895: case 120896: case 120897: case 120898: case 120899: case 120900: case 120901: case 120902: case 120903: case 120904: case 120905: case 120906: case 120907: case 120908: case 120909: case 120910: case 120911: case 120912: case 120913: case 120914: case 120915: case 120916: case 120917: case 120918: case 120919: case 120920: case 120921: case 120922: case 120923: case 120924: case 120925: case 120926: case 120927: case 120928: case 120929: case 120930: case 120931: case 120932: case 120933: case 120934: case 120935: case 120936: case 120937: case 120938: case 120939: case 120940: case 120941: case 120942: case 120943: case 120944: case 120945: case 120946: case 120947: case 120948: case 120949: case 120950: case 120951: case 120952: case 120953: case 120954: case 120955: case 120956: case 120957: case 120958: case 120959: case 120960: case 120961: case 120962: case 120963: case 120964: case 120965: case 120966: case 120967: case 120968: case 120969: case 120970: case 120971: case 120972: case 120973: case 120974: case 120975: case 120976: case 120977: case 120978: case 120979: case 120980: case 120981: case 120982: case 120983: case 120984: case 120985: case 120986: case 120987: case 120988: case 120989: case 120990: case 120991: case 120992: case 120993: case 120994: case 120995: case 120996: case 120997: case 120998: case 120999: case 121000: case 121001: case 121002: case 121003: case 121004: case 121005: case 121006: case 121007: case 121008: case 121009: case 121010: case 121011: case 121012: case 121013: case 121014: case 121015: case 121016: case 121017: case 121018: case 121019: case 121020: case 121021: case 121022: case 121023: case 121024: case 121025: case 121026: case 121027: case 121028: case 121029: case 121030: case 121031: case 121032: case 121033: case 121034: case 121035: case 121036: case 121037: case 121038: case 121039: case 121040: case 121041: case 121042: case 121043: case 121044: case 121045: case 121046: case 121047: case 121048: case 121049: case 121050: case 121051: case 121052: case 121053: case 121054: case 121055: case 121056: case 121057: case 121058: case 121059: case 121060: case 121061: case 121062: case 121063: case 121064: case 121065: case 121066: case 121067: case 121068: case 121069: case 121070: case 121071: case 121072: case 121073: case 121074: case 121075: case 121076: case 121077: case 121078: case 121079: case 121080: case 121081: case 121082: case 121083: case 121084: case 121085: case 121086: case 121087: case 121088: case 121089: case 121090: case 121091: case 121092: case 121093: case 121094: case 121095: case 121096: case 121097: case 121098: case 121099: case 121100: case 121101: case 121102: case 121103: case 121104: case 121105: case 121106: case 121107: case 121108: case 121109: case 121110: case 121111: case 121112: case 121113: case 121114: case 121115: case 121116: case 121117: case 121118: case 121119: case 121120: case 121121: case 121122: case 121123: case 121124: case 121125: case 121126: case 121127: case 121128: case 121129: case 121130: case 121131: case 121132: case 121133: case 121134: case 121135: case 121136: case 121137: case 121138: case 121139: case 121140: case 121141: case 121142: case 121143: case 121144: case 121145: case 121146: case 121147: case 121148: case 121149: case 121150: case 121151: case 121152: case 121153: case 121154: case 121155: case 121156: case 121157: case 121158: case 121159: case 121160: case 121161: case 121162: case 121163: case 121164: case 121165: case 121166: case 121167: case 121168: case 121169: case 121170: case 121171: case 121172: case 121173: case 121174: case 121175: case 121176: case 121177: case 121178: case 121179: case 121180: case 121181: case 121182: case 121183: case 121184: case 121185: case 121186: case 121187: case 121188: case 121189: case 121190: case 121191: case 121192: case 121193: case 121194: case 121195: case 121196: case 121197: case 121198: case 121199: case 121200: case 121201: case 121202: case 121203: case 121204: case 121205: case 121206: case 121207: case 121208: case 121209: case 121210: case 121211: case 121212: case 121213: case 121214: case 121215: case 121216: case 121217: case 121218: case 121219: case 121220: case 121221: case 121222: case 121223: case 121224: case 121225: case 121226: case 121227: case 121228: case 121229: case 121230: case 121231: case 121232: case 121233: case 121234: case 121235: case 121236: case 121237: case 121238: case 121239: case 121240: case 121241: case 121242: case 121243: case 121244: case 121245: case 121246: case 121247: case 121248: case 121249: case 121250: case 121251: case 121252: case 121253: case 121254: case 121255: case 121256: case 121257: case 121258: case 121259: case 121260: case 121261: case 121262: case 121263: case 121264: case 121265: case 121266: case 121267: case 121268: case 121269: case 121270: case 121271: case 121272: case 121273: case 121274: case 121275: case 121276: case 121277: case 121278: case 121279: case 121280: case 121281: case 121282: case 121283: case 121284: case 121285: case 121286: case 121287: case 121288: case 121289: case 121290: case 121291: case 121292: case 121293: case 121294: case 121295: case 121296: case 121297: case 121298: case 121299: case 121300: case 121301: case 121302: case 121303: case 121304: case 121305: case 121306: case 121307: case 121308: case 121309: case 121310: case 121311: case 121312: case 121313: case 121314: case 121315: case 121316: case 121317: case 121318: case 121319: case 121320: case 121321: case 121322: case 121323: case 121324: case 121325: case 121326: case 121327: case 121328: case 121329: case 121330: case 121331: case 121332: case 121333: case 121334: case 121335: case 121336: case 121337: case 121338: case 121339: case 121340: case 121341: case 121342: case 121343: case 121344: case 121345: case 121346: case 121347: case 121348: case 121349: case 121350: case 121351: case 121352: case 121353: case 121354: case 121355: case 121356: case 121357: case 121358: case 121359: case 121360: case 121361: case 121362: case 121363: case 121364: case 121365: case 121366: case 121367: case 121368: case 121369: case 121370: case 121371: case 121372: case 121373: case 121374: case 121375: case 121376: case 121377: case 121378: case 121379: case 121380: case 121381: case 121382: case 121383: case 121384: case 121385: case 121386: case 121387: case 121388: case 121389: case 121390: case 121391: case 121392: case 121393: case 121394: case 121395: case 121396: case 121397: case 121398: case 121399: case 121400: case 121401: case 121402: case 121403: case 121404: case 121405: case 121406: case 121407: case 121408: case 121409: case 121410: case 121411: case 121412: case 121413: case 121414: case 121415: case 121416: case 121417: case 121418: case 121419: case 121420: case 121421: case 121422: case 121423: case 121424: case 121425: case 121426: case 121427: case 121428: case 121429: case 121430: case 121431: case 121432: case 121433: case 121434: case 121435: case 121436: case 121437: case 121438: case 121439: case 121440: case 121441: case 121442: case 121443: case 121444: case 121445: case 121446: case 121447: case 121448: case 121449: case 121450: case 121451: case 121452: case 121453: case 121454: case 121455: case 121456: case 121457: case 121458: case 121459: case 121460: case 121461: case 121462: case 121463: case 121464: case 121465: case 121466: case 121467: case 121468: case 121469: case 121470: case 121471: case 121472: case 121473: case 121474: case 121475: case 121476: case 121477: case 121478: case 121479: case 121480: case 121481: case 121482: case 121483: return 28269 + c - 120782; case 121499: case 121500: case 121501: case 121502: case 121503: return 28971 + c - 121499; case 121505: case 121506: case 121507: case 121508: case 121509: case 121510: case 121511: case 121512: case 121513: case 121514: case 121515: case 121516: case 121517: case 121518: case 121519: return 28976 + c - 121505; case 122880: case 122881: case 122882: case 122883: case 122884: case 122885: case 122886: return 28991 + c - 122880; case 122888: case 122889: case 122890: case 122891: case 122892: case 122893: case 122894: case 122895: case 122896: case 122897: case 122898: case 122899: case 122900: case 122901: case 122902: case 122903: case 122904: return 28998 + c - 122888; case 122907: case 122908: case 122909: case 122910: case 122911: case 122912: case 122913: return 29015 + c - 122907; case 122915: case 122916: return 29022 + c - 122915; case 122918: case 122919: case 122920: case 122921: case 122922: return 29024 + c - 122918; case 123136: case 123137: case 123138: case 123139: case 123140: case 123141: case 123142: case 123143: case 123144: case 123145: case 123146: case 123147: case 123148: case 123149: case 123150: case 123151: case 123152: case 123153: case 123154: case 123155: case 123156: case 123157: case 123158: case 123159: case 123160: case 123161: case 123162: case 123163: case 123164: case 123165: case 123166: case 123167: case 123168: case 123169: case 123170: case 123171: case 123172: case 123173: case 123174: case 123175: case 123176: case 123177: case 123178: case 123179: case 123180: return 29029 + c - 123136; case 123184: case 123185: case 123186: case 123187: case 123188: case 123189: case 123190: case 123191: case 123192: case 123193: case 123194: case 123195: case 123196: case 123197: return 29074 + c - 123184; case 123200: case 123201: case 123202: case 123203: case 123204: case 123205: case 123206: case 123207: case 123208: case 123209: return 29088 + c - 123200; case 123214: case 123215: return 29098 + c - 123214; case 123584: case 123585: case 123586: case 123587: case 123588: case 123589: case 123590: case 123591: case 123592: case 123593: case 123594: case 123595: case 123596: case 123597: case 123598: case 123599: case 123600: case 123601: case 123602: case 123603: case 123604: case 123605: case 123606: case 123607: case 123608: case 123609: case 123610: case 123611: case 123612: case 123613: case 123614: case 123615: case 123616: case 123617: case 123618: case 123619: case 123620: case 123621: case 123622: case 123623: case 123624: case 123625: case 123626: case 123627: case 123628: case 123629: case 123630: case 123631: case 123632: case 123633: case 123634: case 123635: case 123636: case 123637: case 123638: case 123639: case 123640: case 123641: return 29100 + c - 123584; case 123647: return 29158; case 124928: case 124929: case 124930: case 124931: case 124932: case 124933: case 124934: case 124935: case 124936: case 124937: case 124938: case 124939: case 124940: case 124941: case 124942: case 124943: case 124944: case 124945: case 124946: case 124947: case 124948: case 124949: case 124950: case 124951: case 124952: case 124953: case 124954: case 124955: case 124956: case 124957: case 124958: case 124959: case 124960: case 124961: case 124962: case 124963: case 124964: case 124965: case 124966: case 124967: case 124968: case 124969: case 124970: case 124971: case 124972: case 124973: case 124974: case 124975: case 124976: case 124977: case 124978: case 124979: case 124980: case 124981: case 124982: case 124983: case 124984: case 124985: case 124986: case 124987: case 124988: case 124989: case 124990: case 124991: case 124992: case 124993: case 124994: case 124995: case 124996: case 124997: case 124998: case 124999: case 125000: case 125001: case 125002: case 125003: case 125004: case 125005: case 125006: case 125007: case 125008: case 125009: case 125010: case 125011: case 125012: case 125013: case 125014: case 125015: case 125016: case 125017: case 125018: case 125019: case 125020: case 125021: case 125022: case 125023: case 125024: case 125025: case 125026: case 125027: case 125028: case 125029: case 125030: case 125031: case 125032: case 125033: case 125034: case 125035: case 125036: case 125037: case 125038: case 125039: case 125040: case 125041: case 125042: case 125043: case 125044: case 125045: case 125046: case 125047: case 125048: case 125049: case 125050: case 125051: case 125052: case 125053: case 125054: case 125055: case 125056: case 125057: case 125058: case 125059: case 125060: case 125061: case 125062: case 125063: case 125064: case 125065: case 125066: case 125067: case 125068: case 125069: case 125070: case 125071: case 125072: case 125073: case 125074: case 125075: case 125076: case 125077: case 125078: case 125079: case 125080: case 125081: case 125082: case 125083: case 125084: case 125085: case 125086: case 125087: case 125088: case 125089: case 125090: case 125091: case 125092: case 125093: case 125094: case 125095: case 125096: case 125097: case 125098: case 125099: case 125100: case 125101: case 125102: case 125103: case 125104: case 125105: case 125106: case 125107: case 125108: case 125109: case 125110: case 125111: case 125112: case 125113: case 125114: case 125115: case 125116: case 125117: case 125118: case 125119: case 125120: case 125121: case 125122: case 125123: case 125124: return 29159 + c - 124928; case 125127: case 125128: case 125129: case 125130: case 125131: case 125132: case 125133: case 125134: case 125135: case 125136: case 125137: case 125138: case 125139: case 125140: case 125141: case 125142: return 29356 + c - 125127; case 125184: case 125185: case 125186: case 125187: case 125188: case 125189: case 125190: case 125191: case 125192: case 125193: case 125194: case 125195: case 125196: case 125197: case 125198: case 125199: case 125200: case 125201: case 125202: case 125203: case 125204: case 125205: case 125206: case 125207: case 125208: case 125209: case 125210: case 125211: case 125212: case 125213: case 125214: case 125215: case 125216: case 125217: case 125218: case 125219: case 125220: case 125221: case 125222: case 125223: case 125224: case 125225: case 125226: case 125227: case 125228: case 125229: case 125230: case 125231: case 125232: case 125233: case 125234: case 125235: case 125236: case 125237: case 125238: case 125239: case 125240: case 125241: case 125242: case 125243: case 125244: case 125245: case 125246: case 125247: case 125248: case 125249: case 125250: case 125251: case 125252: case 125253: case 125254: case 125255: case 125256: case 125257: case 125258: case 125259: return 29372 + c - 125184; case 125264: case 125265: case 125266: case 125267: case 125268: case 125269: case 125270: case 125271: case 125272: case 125273: return 29448 + c - 125264; case 125278: case 125279: return 29458 + c - 125278; case 126065: case 126066: case 126067: case 126068: case 126069: case 126070: case 126071: case 126072: case 126073: case 126074: case 126075: case 126076: case 126077: case 126078: case 126079: case 126080: case 126081: case 126082: case 126083: case 126084: case 126085: case 126086: case 126087: case 126088: case 126089: case 126090: case 126091: case 126092: case 126093: case 126094: case 126095: case 126096: case 126097: case 126098: case 126099: case 126100: case 126101: case 126102: case 126103: case 126104: case 126105: case 126106: case 126107: case 126108: case 126109: case 126110: case 126111: case 126112: case 126113: case 126114: case 126115: case 126116: case 126117: case 126118: case 126119: case 126120: case 126121: case 126122: case 126123: case 126124: case 126125: case 126126: case 126127: case 126128: case 126129: case 126130: case 126131: case 126132: return 29460 + c - 126065; case 126209: case 126210: case 126211: case 126212: case 126213: case 126214: case 126215: case 126216: case 126217: case 126218: case 126219: case 126220: case 126221: case 126222: case 126223: case 126224: case 126225: case 126226: case 126227: case 126228: case 126229: case 126230: case 126231: case 126232: case 126233: case 126234: case 126235: case 126236: case 126237: case 126238: case 126239: case 126240: case 126241: case 126242: case 126243: case 126244: case 126245: case 126246: case 126247: case 126248: case 126249: case 126250: case 126251: case 126252: case 126253: case 126254: case 126255: case 126256: case 126257: case 126258: case 126259: case 126260: case 126261: case 126262: case 126263: case 126264: case 126265: case 126266: case 126267: case 126268: case 126269: return 29528 + c - 126209; case 126464: case 126465: case 126466: case 126467: return 29589 + c - 126464; case 126469: case 126470: case 126471: case 126472: case 126473: case 126474: case 126475: case 126476: case 126477: case 126478: case 126479: case 126480: case 126481: case 126482: case 126483: case 126484: case 126485: case 126486: case 126487: case 126488: case 126489: case 126490: case 126491: case 126492: case 126493: case 126494: case 126495: return 29593 + c - 126469; case 126497: case 126498: return 29620 + c - 126497; case 126500: return 29622; case 126503: return 29623; case 126505: case 126506: case 126507: case 126508: case 126509: case 126510: case 126511: case 126512: case 126513: case 126514: return 29624 + c - 126505; case 126516: case 126517: case 126518: case 126519: return 29634 + c - 126516; case 126521: return 29638; case 126523: return 29639; case 126530: return 29640; case 126535: return 29641; case 126537: return 29642; case 126539: return 29643; case 126541: case 126542: case 126543: return 29644 + c - 126541; case 126545: case 126546: return 29647 + c - 126545; case 126548: return 29649; case 126551: return 29650; case 126553: return 29651; case 126555: return 29652; case 126557: return 29653; case 126559: return 29654; case 126561: case 126562: return 29655 + c - 126561; case 126564: return 29657; case 126567: case 126568: case 126569: case 126570: return 29658 + c - 126567; case 126572: case 126573: case 126574: case 126575: case 126576: case 126577: case 126578: return 29662 + c - 126572; case 126580: case 126581: case 126582: case 126583: return 29669 + c - 126580; case 126585: case 126586: case 126587: case 126588: return 29673 + c - 126585; case 126590: return 29677; case 126592: case 126593: case 126594: case 126595: case 126596: case 126597: case 126598: case 126599: case 126600: case 126601: return 29678 + c - 126592; case 126603: case 126604: case 126605: case 126606: case 126607: case 126608: case 126609: case 126610: case 126611: case 126612: case 126613: case 126614: case 126615: case 126616: case 126617: case 126618: case 126619: return 29688 + c - 126603; case 126625: case 126626: case 126627: return 29705 + c - 126625; case 126629: case 126630: case 126631: case 126632: case 126633: return 29708 + c - 126629; case 126635: case 126636: case 126637: case 126638: case 126639: case 126640: case 126641: case 126642: case 126643: case 126644: case 126645: case 126646: case 126647: case 126648: case 126649: case 126650: case 126651: return 29713 + c - 126635; case 126704: case 126705: return 29730 + c - 126704; case 126976: case 126977: case 126978: case 126979: case 126980: case 126981: case 126982: case 126983: case 126984: case 126985: case 126986: case 126987: case 126988: case 126989: case 126990: case 126991: case 126992: case 126993: case 126994: case 126995: case 126996: case 126997: case 126998: case 126999: case 127000: case 127001: case 127002: case 127003: case 127004: case 127005: case 127006: case 127007: case 127008: case 127009: case 127010: case 127011: case 127012: case 127013: case 127014: case 127015: case 127016: case 127017: case 127018: case 127019: return 29732 + c - 126976; case 127024: case 127025: case 127026: case 127027: case 127028: case 127029: case 127030: case 127031: case 127032: case 127033: case 127034: case 127035: case 127036: case 127037: case 127038: case 127039: case 127040: case 127041: case 127042: case 127043: case 127044: case 127045: case 127046: case 127047: case 127048: case 127049: case 127050: case 127051: case 127052: case 127053: case 127054: case 127055: case 127056: case 127057: case 127058: case 127059: case 127060: case 127061: case 127062: case 127063: case 127064: case 127065: case 127066: case 127067: case 127068: case 127069: case 127070: case 127071: case 127072: case 127073: case 127074: case 127075: case 127076: case 127077: case 127078: case 127079: case 127080: case 127081: case 127082: case 127083: case 127084: case 127085: case 127086: case 127087: case 127088: case 127089: case 127090: case 127091: case 127092: case 127093: case 127094: case 127095: case 127096: case 127097: case 127098: case 127099: case 127100: case 127101: case 127102: case 127103: case 127104: case 127105: case 127106: case 127107: case 127108: case 127109: case 127110: case 127111: case 127112: case 127113: case 127114: case 127115: case 127116: case 127117: case 127118: case 127119: case 127120: case 127121: case 127122: case 127123: return 29776 + c - 127024; case 127136: case 127137: case 127138: case 127139: case 127140: case 127141: case 127142: case 127143: case 127144: case 127145: case 127146: case 127147: case 127148: case 127149: case 127150: return 29876 + c - 127136; case 127153: case 127154: case 127155: case 127156: case 127157: case 127158: case 127159: case 127160: case 127161: case 127162: case 127163: case 127164: case 127165: case 127166: case 127167: return 29891 + c - 127153; case 127169: case 127170: case 127171: case 127172: case 127173: case 127174: case 127175: case 127176: case 127177: case 127178: case 127179: case 127180: case 127181: case 127182: case 127183: return 29906 + c - 127169; case 127185: case 127186: case 127187: case 127188: case 127189: case 127190: case 127191: case 127192: case 127193: case 127194: case 127195: case 127196: case 127197: case 127198: case 127199: case 127200: case 127201: case 127202: case 127203: case 127204: case 127205: case 127206: case 127207: case 127208: case 127209: case 127210: case 127211: case 127212: case 127213: case 127214: case 127215: case 127216: case 127217: case 127218: case 127219: case 127220: case 127221: return 29921 + c - 127185; case 127232: case 127233: case 127234: case 127235: case 127236: case 127237: case 127238: case 127239: case 127240: case 127241: case 127242: case 127243: case 127244: return 29958 + c - 127232; case 127248: case 127249: case 127250: case 127251: case 127252: case 127253: case 127254: case 127255: case 127256: case 127257: case 127258: case 127259: case 127260: case 127261: case 127262: case 127263: case 127264: case 127265: case 127266: case 127267: case 127268: case 127269: case 127270: case 127271: case 127272: case 127273: case 127274: case 127275: case 127276: case 127277: case 127278: case 127279: case 127280: case 127281: case 127282: case 127283: case 127284: case 127285: case 127286: case 127287: case 127288: case 127289: case 127290: case 127291: case 127292: case 127293: case 127294: case 127295: case 127296: case 127297: case 127298: case 127299: case 127300: case 127301: case 127302: case 127303: case 127304: case 127305: case 127306: case 127307: case 127308: case 127309: case 127310: case 127311: case 127312: case 127313: case 127314: case 127315: case 127316: case 127317: case 127318: case 127319: case 127320: case 127321: case 127322: case 127323: case 127324: case 127325: case 127326: case 127327: case 127328: case 127329: case 127330: case 127331: case 127332: case 127333: case 127334: case 127335: case 127336: case 127337: case 127338: case 127339: case 127340: return 29971 + c - 127248; case 127344: case 127345: case 127346: case 127347: case 127348: case 127349: case 127350: case 127351: case 127352: case 127353: case 127354: case 127355: case 127356: case 127357: case 127358: case 127359: case 127360: case 127361: case 127362: case 127363: case 127364: case 127365: case 127366: case 127367: case 127368: case 127369: case 127370: case 127371: case 127372: case 127373: case 127374: case 127375: case 127376: case 127377: case 127378: case 127379: case 127380: case 127381: case 127382: case 127383: case 127384: case 127385: case 127386: case 127387: case 127388: case 127389: case 127390: case 127391: case 127392: case 127393: case 127394: case 127395: case 127396: case 127397: case 127398: case 127399: case 127400: case 127401: case 127402: case 127403: case 127404: return 30064 + c - 127344; case 127462: case 127463: case 127464: case 127465: case 127466: case 127467: case 127468: case 127469: case 127470: case 127471: case 127472: case 127473: case 127474: case 127475: case 127476: case 127477: case 127478: case 127479: case 127480: case 127481: case 127482: case 127483: case 127484: case 127485: case 127486: case 127487: case 127488: case 127489: case 127490: return 30125 + c - 127462; case 127504: case 127505: case 127506: case 127507: case 127508: case 127509: case 127510: case 127511: case 127512: case 127513: case 127514: case 127515: case 127516: case 127517: case 127518: case 127519: case 127520: case 127521: case 127522: case 127523: case 127524: case 127525: case 127526: case 127527: case 127528: case 127529: case 127530: case 127531: case 127532: case 127533: case 127534: case 127535: case 127536: case 127537: case 127538: case 127539: case 127540: case 127541: case 127542: case 127543: case 127544: case 127545: case 127546: case 127547: return 30154 + c - 127504; case 127552: case 127553: case 127554: case 127555: case 127556: case 127557: case 127558: case 127559: case 127560: return 30198 + c - 127552; case 127568: case 127569: return 30207 + c - 127568; case 127584: case 127585: case 127586: case 127587: case 127588: case 127589: return 30209 + c - 127584; case 127744: case 127745: case 127746: case 127747: case 127748: case 127749: case 127750: case 127751: case 127752: case 127753: case 127754: case 127755: case 127756: case 127757: case 127758: case 127759: case 127760: case 127761: case 127762: case 127763: case 127764: case 127765: case 127766: case 127767: case 127768: case 127769: case 127770: case 127771: case 127772: case 127773: case 127774: case 127775: case 127776: case 127777: case 127778: case 127779: case 127780: case 127781: case 127782: case 127783: case 127784: case 127785: case 127786: case 127787: case 127788: case 127789: case 127790: case 127791: case 127792: case 127793: case 127794: case 127795: case 127796: case 127797: case 127798: case 127799: case 127800: case 127801: case 127802: case 127803: case 127804: case 127805: case 127806: case 127807: case 127808: case 127809: case 127810: case 127811: case 127812: case 127813: case 127814: case 127815: case 127816: case 127817: case 127818: case 127819: case 127820: case 127821: case 127822: case 127823: case 127824: case 127825: case 127826: case 127827: case 127828: case 127829: case 127830: case 127831: case 127832: case 127833: case 127834: case 127835: case 127836: case 127837: case 127838: case 127839: case 127840: case 127841: case 127842: case 127843: case 127844: case 127845: case 127846: case 127847: case 127848: case 127849: case 127850: case 127851: case 127852: case 127853: case 127854: case 127855: case 127856: case 127857: case 127858: case 127859: case 127860: case 127861: case 127862: case 127863: case 127864: case 127865: case 127866: case 127867: case 127868: case 127869: case 127870: case 127871: case 127872: case 127873: case 127874: case 127875: case 127876: case 127877: case 127878: case 127879: case 127880: case 127881: case 127882: case 127883: case 127884: case 127885: case 127886: case 127887: case 127888: case 127889: case 127890: case 127891: case 127892: case 127893: case 127894: case 127895: case 127896: case 127897: case 127898: case 127899: case 127900: case 127901: case 127902: case 127903: case 127904: case 127905: case 127906: case 127907: case 127908: case 127909: case 127910: case 127911: case 127912: case 127913: case 127914: case 127915: case 127916: case 127917: case 127918: case 127919: case 127920: case 127921: case 127922: case 127923: case 127924: case 127925: case 127926: case 127927: case 127928: case 127929: case 127930: case 127931: case 127932: case 127933: case 127934: case 127935: case 127936: case 127937: case 127938: case 127939: case 127940: case 127941: case 127942: case 127943: case 127944: case 127945: case 127946: case 127947: case 127948: case 127949: case 127950: case 127951: case 127952: case 127953: case 127954: case 127955: case 127956: case 127957: case 127958: case 127959: case 127960: case 127961: case 127962: case 127963: case 127964: case 127965: case 127966: case 127967: case 127968: case 127969: case 127970: case 127971: case 127972: case 127973: case 127974: case 127975: case 127976: case 127977: case 127978: case 127979: case 127980: case 127981: case 127982: case 127983: case 127984: case 127985: case 127986: case 127987: case 127988: case 127989: case 127990: case 127991: case 127992: case 127993: case 127994: case 127995: case 127996: case 127997: case 127998: case 127999: case 128000: case 128001: case 128002: case 128003: case 128004: case 128005: case 128006: case 128007: case 128008: case 128009: case 128010: case 128011: case 128012: case 128013: case 128014: case 128015: case 128016: case 128017: case 128018: case 128019: case 128020: case 128021: case 128022: case 128023: case 128024: case 128025: case 128026: case 128027: case 128028: case 128029: case 128030: case 128031: case 128032: case 128033: case 128034: case 128035: case 128036: case 128037: case 128038: case 128039: case 128040: case 128041: case 128042: case 128043: case 128044: case 128045: case 128046: case 128047: case 128048: case 128049: case 128050: case 128051: case 128052: case 128053: case 128054: case 128055: case 128056: case 128057: case 128058: case 128059: case 128060: case 128061: case 128062: case 128063: case 128064: case 128065: case 128066: case 128067: case 128068: case 128069: case 128070: case 128071: case 128072: case 128073: case 128074: case 128075: case 128076: case 128077: case 128078: case 128079: case 128080: case 128081: case 128082: case 128083: case 128084: case 128085: case 128086: case 128087: case 128088: case 128089: case 128090: case 128091: case 128092: case 128093: case 128094: case 128095: case 128096: case 128097: case 128098: case 128099: case 128100: case 128101: case 128102: case 128103: case 128104: case 128105: case 128106: case 128107: case 128108: case 128109: case 128110: case 128111: case 128112: case 128113: case 128114: case 128115: case 128116: case 128117: case 128118: case 128119: case 128120: case 128121: case 128122: case 128123: case 128124: case 128125: case 128126: case 128127: case 128128: case 128129: case 128130: case 128131: case 128132: case 128133: case 128134: case 128135: case 128136: case 128137: case 128138: case 128139: case 128140: case 128141: case 128142: case 128143: case 128144: case 128145: case 128146: case 128147: case 128148: case 128149: case 128150: case 128151: case 128152: case 128153: case 128154: case 128155: case 128156: case 128157: case 128158: case 128159: case 128160: case 128161: case 128162: case 128163: case 128164: case 128165: case 128166: case 128167: case 128168: case 128169: case 128170: case 128171: case 128172: case 128173: case 128174: case 128175: case 128176: case 128177: case 128178: case 128179: case 128180: case 128181: case 128182: case 128183: case 128184: case 128185: case 128186: case 128187: case 128188: case 128189: case 128190: case 128191: case 128192: case 128193: case 128194: case 128195: case 128196: case 128197: case 128198: case 128199: case 128200: case 128201: case 128202: case 128203: case 128204: case 128205: case 128206: case 128207: case 128208: case 128209: case 128210: case 128211: case 128212: case 128213: case 128214: case 128215: case 128216: case 128217: case 128218: case 128219: case 128220: case 128221: case 128222: case 128223: case 128224: case 128225: case 128226: case 128227: case 128228: case 128229: case 128230: case 128231: case 128232: case 128233: case 128234: case 128235: case 128236: case 128237: case 128238: case 128239: case 128240: case 128241: case 128242: case 128243: case 128244: case 128245: case 128246: case 128247: case 128248: case 128249: case 128250: case 128251: case 128252: case 128253: case 128254: case 128255: case 128256: case 128257: case 128258: case 128259: case 128260: case 128261: case 128262: case 128263: case 128264: case 128265: case 128266: case 128267: case 128268: case 128269: case 128270: case 128271: case 128272: case 128273: case 128274: case 128275: case 128276: case 128277: case 128278: case 128279: case 128280: case 128281: case 128282: case 128283: case 128284: case 128285: case 128286: case 128287: case 128288: case 128289: case 128290: case 128291: case 128292: case 128293: case 128294: case 128295: case 128296: case 128297: case 128298: case 128299: case 128300: case 128301: case 128302: case 128303: case 128304: case 128305: case 128306: case 128307: case 128308: case 128309: case 128310: case 128311: case 128312: case 128313: case 128314: case 128315: case 128316: case 128317: case 128318: case 128319: case 128320: case 128321: case 128322: case 128323: case 128324: case 128325: case 128326: case 128327: case 128328: case 128329: case 128330: case 128331: case 128332: case 128333: case 128334: case 128335: case 128336: case 128337: case 128338: case 128339: case 128340: case 128341: case 128342: case 128343: case 128344: case 128345: case 128346: case 128347: case 128348: case 128349: case 128350: case 128351: case 128352: case 128353: case 128354: case 128355: case 128356: case 128357: case 128358: case 128359: case 128360: case 128361: case 128362: case 128363: case 128364: case 128365: case 128366: case 128367: case 128368: case 128369: case 128370: case 128371: case 128372: case 128373: case 128374: case 128375: case 128376: case 128377: case 128378: case 128379: case 128380: case 128381: case 128382: case 128383: case 128384: case 128385: case 128386: case 128387: case 128388: case 128389: case 128390: case 128391: case 128392: case 128393: case 128394: case 128395: case 128396: case 128397: case 128398: case 128399: case 128400: case 128401: case 128402: case 128403: case 128404: case 128405: case 128406: case 128407: case 128408: case 128409: case 128410: case 128411: case 128412: case 128413: case 128414: case 128415: case 128416: case 128417: case 128418: case 128419: case 128420: case 128421: case 128422: case 128423: case 128424: case 128425: case 128426: case 128427: case 128428: case 128429: case 128430: case 128431: case 128432: case 128433: case 128434: case 128435: case 128436: case 128437: case 128438: case 128439: case 128440: case 128441: case 128442: case 128443: case 128444: case 128445: case 128446: case 128447: case 128448: case 128449: case 128450: case 128451: case 128452: case 128453: case 128454: case 128455: case 128456: case 128457: case 128458: case 128459: case 128460: case 128461: case 128462: case 128463: case 128464: case 128465: case 128466: case 128467: case 128468: case 128469: case 128470: case 128471: case 128472: case 128473: case 128474: case 128475: case 128476: case 128477: case 128478: case 128479: case 128480: case 128481: case 128482: case 128483: case 128484: case 128485: case 128486: case 128487: case 128488: case 128489: case 128490: case 128491: case 128492: case 128493: case 128494: case 128495: case 128496: case 128497: case 128498: case 128499: case 128500: case 128501: case 128502: case 128503: case 128504: case 128505: case 128506: case 128507: case 128508: case 128509: case 128510: case 128511: case 128512: case 128513: case 128514: case 128515: case 128516: case 128517: case 128518: case 128519: case 128520: case 128521: case 128522: case 128523: case 128524: case 128525: case 128526: case 128527: case 128528: case 128529: case 128530: case 128531: case 128532: case 128533: case 128534: case 128535: case 128536: case 128537: case 128538: case 128539: case 128540: case 128541: case 128542: case 128543: case 128544: case 128545: case 128546: case 128547: case 128548: case 128549: case 128550: case 128551: case 128552: case 128553: case 128554: case 128555: case 128556: case 128557: case 128558: case 128559: case 128560: case 128561: case 128562: case 128563: case 128564: case 128565: case 128566: case 128567: case 128568: case 128569: case 128570: case 128571: case 128572: case 128573: case 128574: case 128575: case 128576: case 128577: case 128578: case 128579: case 128580: case 128581: case 128582: case 128583: case 128584: case 128585: case 128586: case 128587: case 128588: case 128589: case 128590: case 128591: case 128592: case 128593: case 128594: case 128595: case 128596: case 128597: case 128598: case 128599: case 128600: case 128601: case 128602: case 128603: case 128604: case 128605: case 128606: case 128607: case 128608: case 128609: case 128610: case 128611: case 128612: case 128613: case 128614: case 128615: case 128616: case 128617: case 128618: case 128619: case 128620: case 128621: case 128622: case 128623: case 128624: case 128625: case 128626: case 128627: case 128628: case 128629: case 128630: case 128631: case 128632: case 128633: case 128634: case 128635: case 128636: case 128637: case 128638: case 128639: case 128640: case 128641: case 128642: case 128643: case 128644: case 128645: case 128646: case 128647: case 128648: case 128649: case 128650: case 128651: case 128652: case 128653: case 128654: case 128655: case 128656: case 128657: case 128658: case 128659: case 128660: case 128661: case 128662: case 128663: case 128664: case 128665: case 128666: case 128667: case 128668: case 128669: case 128670: case 128671: case 128672: case 128673: case 128674: case 128675: case 128676: case 128677: case 128678: case 128679: case 128680: case 128681: case 128682: case 128683: case 128684: case 128685: case 128686: case 128687: case 128688: case 128689: case 128690: case 128691: case 128692: case 128693: case 128694: case 128695: case 128696: case 128697: case 128698: case 128699: case 128700: case 128701: case 128702: case 128703: case 128704: case 128705: case 128706: case 128707: case 128708: case 128709: case 128710: case 128711: case 128712: case 128713: case 128714: case 128715: case 128716: case 128717: case 128718: case 128719: case 128720: case 128721: case 128722: case 128723: case 128724: case 128725: return 30215 + c - 127744; case 128736: case 128737: case 128738: case 128739: case 128740: case 128741: case 128742: case 128743: case 128744: case 128745: case 128746: case 128747: case 128748: return 31197 + c - 128736; case 128752: case 128753: case 128754: case 128755: case 128756: case 128757: case 128758: case 128759: case 128760: case 128761: case 128762: return 31210 + c - 128752; case 128768: case 128769: case 128770: case 128771: case 128772: case 128773: case 128774: case 128775: case 128776: case 128777: case 128778: case 128779: case 128780: case 128781: case 128782: case 128783: case 128784: case 128785: case 128786: case 128787: case 128788: case 128789: case 128790: case 128791: case 128792: case 128793: case 128794: case 128795: case 128796: case 128797: case 128798: case 128799: case 128800: case 128801: case 128802: case 128803: case 128804: case 128805: case 128806: case 128807: case 128808: case 128809: case 128810: case 128811: case 128812: case 128813: case 128814: case 128815: case 128816: case 128817: case 128818: case 128819: case 128820: case 128821: case 128822: case 128823: case 128824: case 128825: case 128826: case 128827: case 128828: case 128829: case 128830: case 128831: case 128832: case 128833: case 128834: case 128835: case 128836: case 128837: case 128838: case 128839: case 128840: case 128841: case 128842: case 128843: case 128844: case 128845: case 128846: case 128847: case 128848: case 128849: case 128850: case 128851: case 128852: case 128853: case 128854: case 128855: case 128856: case 128857: case 128858: case 128859: case 128860: case 128861: case 128862: case 128863: case 128864: case 128865: case 128866: case 128867: case 128868: case 128869: case 128870: case 128871: case 128872: case 128873: case 128874: case 128875: case 128876: case 128877: case 128878: case 128879: case 128880: case 128881: case 128882: case 128883: return 31221 + c - 128768; case 128896: case 128897: case 128898: case 128899: case 128900: case 128901: case 128902: case 128903: case 128904: case 128905: case 128906: case 128907: case 128908: case 128909: case 128910: case 128911: case 128912: case 128913: case 128914: case 128915: case 128916: case 128917: case 128918: case 128919: case 128920: case 128921: case 128922: case 128923: case 128924: case 128925: case 128926: case 128927: case 128928: case 128929: case 128930: case 128931: case 128932: case 128933: case 128934: case 128935: case 128936: case 128937: case 128938: case 128939: case 128940: case 128941: case 128942: case 128943: case 128944: case 128945: case 128946: case 128947: case 128948: case 128949: case 128950: case 128951: case 128952: case 128953: case 128954: case 128955: case 128956: case 128957: case 128958: case 128959: case 128960: case 128961: case 128962: case 128963: case 128964: case 128965: case 128966: case 128967: case 128968: case 128969: case 128970: case 128971: case 128972: case 128973: case 128974: case 128975: case 128976: case 128977: case 128978: case 128979: case 128980: case 128981: case 128982: case 128983: case 128984: return 31337 + c - 128896; case 128992: case 128993: case 128994: case 128995: case 128996: case 128997: case 128998: case 128999: case 129000: case 129001: case 129002: case 129003: return 31426 + c - 128992; case 129024: case 129025: case 129026: case 129027: case 129028: case 129029: case 129030: case 129031: case 129032: case 129033: case 129034: case 129035: return 31438 + c - 129024; case 129040: case 129041: case 129042: case 129043: case 129044: case 129045: case 129046: case 129047: case 129048: case 129049: case 129050: case 129051: case 129052: case 129053: case 129054: case 129055: case 129056: case 129057: case 129058: case 129059: case 129060: case 129061: case 129062: case 129063: case 129064: case 129065: case 129066: case 129067: case 129068: case 129069: case 129070: case 129071: case 129072: case 129073: case 129074: case 129075: case 129076: case 129077: case 129078: case 129079: case 129080: case 129081: case 129082: case 129083: case 129084: case 129085: case 129086: case 129087: case 129088: case 129089: case 129090: case 129091: case 129092: case 129093: case 129094: case 129095: return 31450 + c - 129040; case 129104: case 129105: case 129106: case 129107: case 129108: case 129109: case 129110: case 129111: case 129112: case 129113: return 31506 + c - 129104; case 129120: case 129121: case 129122: case 129123: case 129124: case 129125: case 129126: case 129127: case 129128: case 129129: case 129130: case 129131: case 129132: case 129133: case 129134: case 129135: case 129136: case 129137: case 129138: case 129139: case 129140: case 129141: case 129142: case 129143: case 129144: case 129145: case 129146: case 129147: case 129148: case 129149: case 129150: case 129151: case 129152: case 129153: case 129154: case 129155: case 129156: case 129157: case 129158: case 129159: return 31516 + c - 129120; case 129168: case 129169: case 129170: case 129171: case 129172: case 129173: case 129174: case 129175: case 129176: case 129177: case 129178: case 129179: case 129180: case 129181: case 129182: case 129183: case 129184: case 129185: case 129186: case 129187: case 129188: case 129189: case 129190: case 129191: case 129192: case 129193: case 129194: case 129195: case 129196: case 129197: return 31556 + c - 129168; case 129280: case 129281: case 129282: case 129283: case 129284: case 129285: case 129286: case 129287: case 129288: case 129289: case 129290: case 129291: return 31586 + c - 129280; case 129293: case 129294: case 129295: case 129296: case 129297: case 129298: case 129299: case 129300: case 129301: case 129302: case 129303: case 129304: case 129305: case 129306: case 129307: case 129308: case 129309: case 129310: case 129311: case 129312: case 129313: case 129314: case 129315: case 129316: case 129317: case 129318: case 129319: case 129320: case 129321: case 129322: case 129323: case 129324: case 129325: case 129326: case 129327: case 129328: case 129329: case 129330: case 129331: case 129332: case 129333: case 129334: case 129335: case 129336: case 129337: case 129338: case 129339: case 129340: case 129341: case 129342: case 129343: case 129344: case 129345: case 129346: case 129347: case 129348: case 129349: case 129350: case 129351: case 129352: case 129353: case 129354: case 129355: case 129356: case 129357: case 129358: case 129359: case 129360: case 129361: case 129362: case 129363: case 129364: case 129365: case 129366: case 129367: case 129368: case 129369: case 129370: case 129371: case 129372: case 129373: case 129374: case 129375: case 129376: case 129377: case 129378: case 129379: case 129380: case 129381: case 129382: case 129383: case 129384: case 129385: case 129386: case 129387: case 129388: case 129389: case 129390: case 129391: case 129392: case 129393: return 31598 + c - 129293; case 129395: case 129396: case 129397: case 129398: return 31699 + c - 129395; case 129402: case 129403: case 129404: case 129405: case 129406: case 129407: case 129408: case 129409: case 129410: case 129411: case 129412: case 129413: case 129414: case 129415: case 129416: case 129417: case 129418: case 129419: case 129420: case 129421: case 129422: case 129423: case 129424: case 129425: case 129426: case 129427: case 129428: case 129429: case 129430: case 129431: case 129432: case 129433: case 129434: case 129435: case 129436: case 129437: case 129438: case 129439: case 129440: case 129441: case 129442: return 31703 + c - 129402; case 129445: case 129446: case 129447: case 129448: case 129449: case 129450: return 31744 + c - 129445; case 129454: case 129455: case 129456: case 129457: case 129458: case 129459: case 129460: case 129461: case 129462: case 129463: case 129464: case 129465: case 129466: case 129467: case 129468: case 129469: case 129470: case 129471: case 129472: case 129473: case 129474: case 129475: case 129476: case 129477: case 129478: case 129479: case 129480: case 129481: case 129482: return 31750 + c - 129454; case 129485: case 129486: case 129487: case 129488: case 129489: case 129490: case 129491: case 129492: case 129493: case 129494: case 129495: case 129496: case 129497: case 129498: case 129499: case 129500: case 129501: case 129502: case 129503: case 129504: case 129505: case 129506: case 129507: case 129508: case 129509: case 129510: case 129511: case 129512: case 129513: case 129514: case 129515: case 129516: case 129517: case 129518: case 129519: case 129520: case 129521: case 129522: case 129523: case 129524: case 129525: case 129526: case 129527: case 129528: case 129529: case 129530: case 129531: case 129532: case 129533: case 129534: case 129535: case 129536: case 129537: case 129538: case 129539: case 129540: case 129541: case 129542: case 129543: case 129544: case 129545: case 129546: case 129547: case 129548: case 129549: case 129550: case 129551: case 129552: case 129553: case 129554: case 129555: case 129556: case 129557: case 129558: case 129559: case 129560: case 129561: case 129562: case 129563: case 129564: case 129565: case 129566: case 129567: case 129568: case 129569: case 129570: case 129571: case 129572: case 129573: case 129574: case 129575: case 129576: case 129577: case 129578: case 129579: case 129580: case 129581: case 129582: case 129583: case 129584: case 129585: case 129586: case 129587: case 129588: case 129589: case 129590: case 129591: case 129592: case 129593: case 129594: case 129595: case 129596: case 129597: case 129598: case 129599: case 129600: case 129601: case 129602: case 129603: case 129604: case 129605: case 129606: case 129607: case 129608: case 129609: case 129610: case 129611: case 129612: case 129613: case 129614: case 129615: case 129616: case 129617: case 129618: case 129619: return 31779 + c - 129485; case 129632: case 129633: case 129634: case 129635: case 129636: case 129637: case 129638: case 129639: case 129640: case 129641: case 129642: case 129643: case 129644: case 129645: return 31914 + c - 129632; case 129648: case 129649: case 129650: case 129651: return 31928 + c - 129648; case 129656: case 129657: case 129658: return 31932 + c - 129656; case 129664: case 129665: case 129666: return 31935 + c - 129664; case 129680: case 129681: case 129682: case 129683: case 129684: case 129685: return 31938 + c - 129680; case 131072: return 31944; case 173782: return 31945; case 173824: return 31946; case 177972: return 31947; case 177984: return 31948; case 178205: return 31949; case 178208: return 31950; case 183969: return 31951; case 183984: return 31952; case 191456: return 31953; case 194560: case 194561: case 194562: case 194563: case 194564: case 194565: case 194566: case 194567: case 194568: case 194569: case 194570: case 194571: case 194572: case 194573: case 194574: case 194575: case 194576: case 194577: case 194578: case 194579: case 194580: case 194581: case 194582: case 194583: case 194584: case 194585: case 194586: case 194587: case 194588: case 194589: case 194590: case 194591: case 194592: case 194593: case 194594: case 194595: case 194596: case 194597: case 194598: case 194599: case 194600: case 194601: case 194602: case 194603: case 194604: case 194605: case 194606: case 194607: case 194608: case 194609: case 194610: case 194611: case 194612: case 194613: case 194614: case 194615: case 194616: case 194617: case 194618: case 194619: case 194620: case 194621: case 194622: case 194623: case 194624: case 194625: case 194626: case 194627: case 194628: case 194629: case 194630: case 194631: case 194632: case 194633: case 194634: case 194635: case 194636: case 194637: case 194638: case 194639: case 194640: case 194641: case 194642: case 194643: case 194644: case 194645: case 194646: case 194647: case 194648: case 194649: case 194650: case 194651: case 194652: case 194653: case 194654: case 194655: case 194656: case 194657: case 194658: case 194659: case 194660: case 194661: case 194662: case 194663: case 194664: case 194665: case 194666: case 194667: case 194668: case 194669: case 194670: case 194671: case 194672: case 194673: case 194674: case 194675: case 194676: case 194677: case 194678: case 194679: case 194680: case 194681: case 194682: case 194683: case 194684: case 194685: case 194686: case 194687: case 194688: case 194689: case 194690: case 194691: case 194692: case 194693: case 194694: case 194695: case 194696: case 194697: case 194698: case 194699: case 194700: case 194701: case 194702: case 194703: case 194704: case 194705: case 194706: case 194707: case 194708: case 194709: case 194710: case 194711: case 194712: case 194713: case 194714: case 194715: case 194716: case 194717: case 194718: case 194719: case 194720: case 194721: case 194722: case 194723: case 194724: case 194725: case 194726: case 194727: case 194728: case 194729: case 194730: case 194731: case 194732: case 194733: case 194734: case 194735: case 194736: case 194737: case 194738: case 194739: case 194740: case 194741: case 194742: case 194743: case 194744: case 194745: case 194746: case 194747: case 194748: case 194749: case 194750: case 194751: case 194752: case 194753: case 194754: case 194755: case 194756: case 194757: case 194758: case 194759: case 194760: case 194761: case 194762: case 194763: case 194764: case 194765: case 194766: case 194767: case 194768: case 194769: case 194770: case 194771: case 194772: case 194773: case 194774: case 194775: case 194776: case 194777: case 194778: case 194779: case 194780: case 194781: case 194782: case 194783: case 194784: case 194785: case 194786: case 194787: case 194788: case 194789: case 194790: case 194791: case 194792: case 194793: case 194794: case 194795: case 194796: case 194797: case 194798: case 194799: case 194800: case 194801: case 194802: case 194803: case 194804: case 194805: case 194806: case 194807: case 194808: case 194809: case 194810: case 194811: case 194812: case 194813: case 194814: case 194815: case 194816: case 194817: case 194818: case 194819: case 194820: case 194821: case 194822: case 194823: case 194824: case 194825: case 194826: case 194827: case 194828: case 194829: case 194830: case 194831: case 194832: case 194833: case 194834: case 194835: case 194836: case 194837: case 194838: case 194839: case 194840: case 194841: case 194842: case 194843: case 194844: case 194845: case 194846: case 194847: case 194848: case 194849: case 194850: case 194851: case 194852: case 194853: case 194854: case 194855: case 194856: case 194857: case 194858: case 194859: case 194860: case 194861: case 194862: case 194863: case 194864: case 194865: case 194866: case 194867: case 194868: case 194869: case 194870: case 194871: case 194872: case 194873: case 194874: case 194875: case 194876: case 194877: case 194878: case 194879: case 194880: case 194881: case 194882: case 194883: case 194884: case 194885: case 194886: case 194887: case 194888: case 194889: case 194890: case 194891: case 194892: case 194893: case 194894: case 194895: case 194896: case 194897: case 194898: case 194899: case 194900: case 194901: case 194902: case 194903: case 194904: case 194905: case 194906: case 194907: case 194908: case 194909: case 194910: case 194911: case 194912: case 194913: case 194914: case 194915: case 194916: case 194917: case 194918: case 194919: case 194920: case 194921: case 194922: case 194923: case 194924: case 194925: case 194926: case 194927: case 194928: case 194929: case 194930: case 194931: case 194932: case 194933: case 194934: case 194935: case 194936: case 194937: case 194938: case 194939: case 194940: case 194941: case 194942: case 194943: case 194944: case 194945: case 194946: case 194947: case 194948: case 194949: case 194950: case 194951: case 194952: case 194953: case 194954: case 194955: case 194956: case 194957: case 194958: case 194959: case 194960: case 194961: case 194962: case 194963: case 194964: case 194965: case 194966: case 194967: case 194968: case 194969: case 194970: case 194971: case 194972: case 194973: case 194974: case 194975: case 194976: case 194977: case 194978: case 194979: case 194980: case 194981: case 194982: case 194983: case 194984: case 194985: case 194986: case 194987: case 194988: case 194989: case 194990: case 194991: case 194992: case 194993: case 194994: case 194995: case 194996: case 194997: case 194998: case 194999: case 195000: case 195001: case 195002: case 195003: case 195004: case 195005: case 195006: case 195007: case 195008: case 195009: case 195010: case 195011: case 195012: case 195013: case 195014: case 195015: case 195016: case 195017: case 195018: case 195019: case 195020: case 195021: case 195022: case 195023: case 195024: case 195025: case 195026: case 195027: case 195028: case 195029: case 195030: case 195031: case 195032: case 195033: case 195034: case 195035: case 195036: case 195037: case 195038: case 195039: case 195040: case 195041: case 195042: case 195043: case 195044: case 195045: case 195046: case 195047: case 195048: case 195049: case 195050: case 195051: case 195052: case 195053: case 195054: case 195055: case 195056: case 195057: case 195058: case 195059: case 195060: case 195061: case 195062: case 195063: case 195064: case 195065: case 195066: case 195067: case 195068: case 195069: case 195070: case 195071: case 195072: case 195073: case 195074: case 195075: case 195076: case 195077: case 195078: case 195079: case 195080: case 195081: case 195082: case 195083: case 195084: case 195085: case 195086: case 195087: case 195088: case 195089: case 195090: case 195091: case 195092: case 195093: case 195094: case 195095: case 195096: case 195097: case 195098: case 195099: case 195100: case 195101: return 31954 + c - 194560; case 917505: return 32496; case 917536: case 917537: case 917538: case 917539: case 917540: case 917541: case 917542: case 917543: case 917544: case 917545: case 917546: case 917547: case 917548: case 917549: case 917550: case 917551: case 917552: case 917553: case 917554: case 917555: case 917556: case 917557: case 917558: case 917559: case 917560: case 917561: case 917562: case 917563: case 917564: case 917565: case 917566: case 917567: case 917568: case 917569: case 917570: case 917571: case 917572: case 917573: case 917574: case 917575: case 917576: case 917577: case 917578: case 917579: case 917580: case 917581: case 917582: case 917583: case 917584: case 917585: case 917586: case 917587: case 917588: case 917589: case 917590: case 917591: case 917592: case 917593: case 917594: case 917595: case 917596: case 917597: case 917598: case 917599: case 917600: case 917601: case 917602: case 917603: case 917604: case 917605: case 917606: case 917607: case 917608: case 917609: case 917610: case 917611: case 917612: case 917613: case 917614: case 917615: case 917616: case 917617: case 917618: case 917619: case 917620: case 917621: case 917622: case 917623: case 917624: case 917625: case 917626: case 917627: case 917628: case 917629: case 917630: case 917631: return 32497 + c - 917536; case 917760: case 917761: case 917762: case 917763: case 917764: case 917765: case 917766: case 917767: case 917768: case 917769: case 917770: case 917771: case 917772: case 917773: case 917774: case 917775: case 917776: case 917777: case 917778: case 917779: case 917780: case 917781: case 917782: case 917783: case 917784: case 917785: case 917786: case 917787: case 917788: case 917789: case 917790: case 917791: case 917792: case 917793: case 917794: case 917795: case 917796: case 917797: case 917798: case 917799: case 917800: case 917801: case 917802: case 917803: case 917804: case 917805: case 917806: case 917807: case 917808: case 917809: case 917810: case 917811: case 917812: case 917813: case 917814: case 917815: case 917816: case 917817: case 917818: case 917819: case 917820: case 917821: case 917822: case 917823: case 917824: case 917825: case 917826: case 917827: case 917828: case 917829: case 917830: case 917831: case 917832: case 917833: case 917834: case 917835: case 917836: case 917837: case 917838: case 917839: case 917840: case 917841: case 917842: case 917843: case 917844: case 917845: case 917846: case 917847: case 917848: case 917849: case 917850: case 917851: case 917852: case 917853: case 917854: case 917855: case 917856: case 917857: case 917858: case 917859: case 917860: case 917861: case 917862: case 917863: case 917864: case 917865: case 917866: case 917867: case 917868: case 917869: case 917870: case 917871: case 917872: case 917873: case 917874: case 917875: case 917876: case 917877: case 917878: case 917879: case 917880: case 917881: case 917882: case 917883: case 917884: case 917885: case 917886: case 917887: case 917888: case 917889: case 917890: case 917891: case 917892: case 917893: case 917894: case 917895: case 917896: case 917897: case 917898: case 917899: case 917900: case 917901: case 917902: case 917903: case 917904: case 917905: case 917906: case 917907: case 917908: case 917909: case 917910: case 917911: case 917912: case 917913: case 917914: case 917915: case 917916: case 917917: case 917918: case 917919: case 917920: case 917921: case 917922: case 917923: case 917924: case 917925: case 917926: case 917927: case 917928: case 917929: case 917930: case 917931: case 917932: case 917933: case 917934: case 917935: case 917936: case 917937: case 917938: case 917939: case 917940: case 917941: case 917942: case 917943: case 917944: case 917945: case 917946: case 917947: case 917948: case 917949: case 917950: case 917951: case 917952: case 917953: case 917954: case 917955: case 917956: case 917957: case 917958: case 917959: case 917960: case 917961: case 917962: case 917963: case 917964: case 917965: case 917966: case 917967: case 917968: case 917969: case 917970: case 917971: case 917972: case 917973: case 917974: case 917975: case 917976: case 917977: case 917978: case 917979: case 917980: case 917981: case 917982: case 917983: case 917984: case 917985: case 917986: case 917987: case 917988: case 917989: case 917990: case 917991: case 917992: case 917993: case 917994: case 917995: case 917996: case 917997: case 917998: case 917999: return 32593 + c - 917760; case 983040: return 32833; case 1048573: return 32834; case 1048576: return 32835; case 1114109: return 32836; default: return 0; } // }}} } static inline const char* name_for_codepoint(char_type cp) { char_type m = mark_for_codepoint(cp); if (m == 0) return NULL; return name_map[m]; } static const char* all_words_map[15483] = { // {{{ "-a", "-chal", "-char", "-dzud", "-khyil", "-khyud", "-phru", "-um", "15", "16", "", "fish", "fisheye", "fishhook", "fishing", "fist", "fisted", "fit", "fita", "fitzpatrick", "five", "five-line", "five-thirty", "fix", "fixed-form", "fl", "fla", "flag", "flag-1", "flag-2", "flag-3", "flag-4", "flag-5", "flags", "flame", "flamingo", "flash", "flat", "flatbread", "flatness", "flattened", "fleur-de-lis", "fleuron", "flex", "flexed", "flexus", "flick", "flight", "flip", "fllig", "floor", "floorplane", "floppy", "floral", "florette", "flourish", "flower", "flowers", "flowing", "fltns", "flushed", "flute", "fluttering", "fly", "flying", "fm", "fnof", "fo", "fog", "foggy", "folded", "folder", "following", "folly", "fom", "fon", "fongman", "font", "foo", "food", "fool", "foot", "football", "footnote", "footprints", "footstool", "fop", "fopf", "for", "forall", "force", "forces", "forehead", "fork", "forked", "forking", "forkv", "form", "format", "formatting", "formee", "forms", "forte", "fortieth", "fortune", "forty", "forty-five", "forward", "fostering", "fountain", "four", "four-line", "four-per-em", "four-string", "four-thirty", "fouriertrf", "fourteen", "fourth", "fox", "fpartint", "frac12", "frac13", "frac14", "frac15", "frac16", "frac18", "frac23", "frac25", "frac34", "frac35", "frac38", "frac45", "frac56", "frac58", "frac78", "fraction", "fragment", "fragrant", "fraktur", "frame", "frames", "franc", "franks", "frasl", "free", "freezing", "french", "fretboard", "fricative", "fried", "fries", "fritu", "frog", "from", "front", "front-facing", "front-tilted", "frown", "frowning", "fscr", "fthora", "fu", "fua", "fue", "fuel", "fuet", "fuji", "full", "fullness", "fullwidth", "function", "functional", "funeral", "fup", "fur", "furx", "fusa", "fuse", "fut", "fux", "fwa", "fwaa", "fwe", "fwee", "fwi", "fy", "fya", "fyp", "fyt", "fyx", "g001", "g002", "g003", "g004", "g005", "g006", "g006a", "g007", "g007a", "g007b", "g008", "g009", "g010", "g011", "g011a", "g012", "g013", "g014", "g015", "g016", "g017", "g018", "g019", "g020", "g020a", "g021", "g022", "g023", "g024", "g025", "g026", "g026a", "g027", "g028", "g029", "g030", "g031", "g032", "g033", "g034", "g035", "g036", "g036a", "g037", "g037a", "g038", "g039", "g040", "g041", "g042", "g043", "g043a", "g044", "g045", "g045a", "g046", "g047", "g048", "g049", "g050", "g051", "g052", "g053", "g054", "g2", "ga", "ga2", "gaa", "gaafu", "gaahlaa", "gaba", "gacute", "gad", "gadol", "gaetta-pilla", "gaf", "gag", "gah", "gai", "gal", "galam", "gali", "gam", "gamal", "gaman", "game", "gaml", "gamla", "gamma", "gammad", "gan", "gan2", "ganda", "gangia", "ganma", "gap", "gapped", "gar", "gar3", "garden", "garlic", "garment", "garon", "garshuni", "gashan", "gat", "gate", "gathering", "gauntlet", "gax", "gay", "gayanna", "gayanukitta", "gb", "gba", "gbakurunen", "gbayi", "gbe", "gbee", "gben", "gbet", "gbeux", "gbi", "gbiee", "gbo", "gbon", "gboo", "gbreve", "gbu", "gcan", "gcedil", "gcig", "gcirc", "gcy", "gdan", "gdot", "ge", "ge22", "gear", "geba", "gebo", "gede", "gedola", "gee", "geem", "gel", "gem", "geminate", "gemination", "gemini", "gen", "general", "generic", "genie", "geniki", "genitive", "gentle", "geometric", "geometrically", "georgian", "gep", "geq", "geqq", "geqslant", "ger", "geresh", "german", "gershayim", "ges", "gescc", "gesdot", "gesdoto", "gesdotol", "gesh2", "geshtin", "geshu", "gesles", "gesture", "get", "geta", "gex", "gfr", "gg", "gga", "ggaa", "ggap", "ggat", "ggax", "gge", "ggee", "ggep", "gget", "ggex", "ggg", "ggi", "ggie", "ggiep", "ggiex", "ggit", "ggix", "ggo", "ggop", "ggot", "ggox", "ggu", "gguo", "gguop", "gguot", "gguox", "ggup", "ggur", "ggurx", "ggut", "ggux", "ggwa", "ggwaa", "ggwe", "ggwee", "ggwi", "gh", "gha", "ghaa", "ghaamae", "ghad", "ghain", "ghainu", "ghamal", "ghamma", "ghan", "ghap", "gharae", "ghayn", "ghe", "ghee", "ghet", "gheuae", "gheuaegheuae", "gheuaerae", "gheughen", "gheugheuaem", "gheun", "gheux", "gheys", "ghha", "ghi", "ghimel", "gho", "ghom", "ghost", "ghou", "ghu", "ghunna", "ghwa", "ghz", "gi", "gi4", "giba", "gibbous", "gidim", "gie", "giep", "giet", "giex", "gift", "gig", "giga", "gim", "gimel", "ginii", "gip", "gir2", "gir3", "giraffe", "girl", "girls", "girudaa", "gisal", "gish", "git", "gix", "gjcy", "gje", "gl", "gla", "glagoli", "glagolitic", "glass", "glasses", "gle", "gleich", "glissando", "glj", "globe", "glottal", "glove", "gloves", "glowing", "gn", "gnap", "gnapprox", "gnaviyani", "gne", "gneq", "gneqq", "gnsim", "gnyis", "go", "goa", "goal", "goat", "goblin", "goggles", "going", "gok", "gold", "golfer", "gondi", "gong", "goo", "good", "gop", "gopf", "gora", "gorgi", "gorgon", "gorgosyntheton", "gorgoteri", "gorilla", "gort", "gorthmikon", "got", "gothic", "gox", "gpa", "grace", "gradual", "graduation", "grain", "gram", "gramma", "grantha", "grapes", "grapheme", "grasp", "grass", "grater", "grave", "grave-acute-grave", "grave-macron", "graveyard", "great", "greater", "greater-than", "greaterequal", "greaterequalless", "greaterfullequal", "greatergreater", "greaterless", "greaterslantequal", "greatertilde", "greatness", "greek", "green", "gregorian", "grimacing", "grinning", "gronthismata", "ground", "group", "growing", "gru", "gscr", "gsim", "gsime", "gsiml", "gsum", "gt", "gtcc", "gtcir", "gtdot", "gter", "gtlpar", "gtquest", "gtrapprox", "gtrarr", "gtrdot", "gtreqless", "gtreqqless", "gtrless", "gtrsim", "gu", "gu2", "gua", "guan", "guarani", "guard", "guardedness", "guardsman", "gud", "gueh", "guei", "gug", "guide", "guitar", "gujarati", "gul", "gum", "gunjala", "gunu", "guo", "guop", "guot", "guox", "gup", "gur", "gur7", "guramu", "guramuton", "gurmukhi", "gurun", "gurush", "gurx", "gut", "gux", "gv", "gvang", "gwa", "gwaa", "gwe", "gwee", "gwi", "gwu", "gy", "gya", "gyaa", "gyan", "gyas", "gye", "gyee", "gyfu", "gyi", "gyo", "gyon", "gyu", "h-type", "h001", "h002", "h003", "h004", "h005", "h006", "h006a", "h007", "h008", "ha", "ha-1", "ha-10", "ha-11", "ha-2", "ha-3", "ha-4", "ha-5", "ha-6", "ha-7", "ha-8", "ha-9", "ha-ha", "haa", "haam", "haaru", "hacek", "hades", "hae", "haegl", "hafukh", "hafukha", "hagl", "haglaz", "hah", "hai", "hair", "haircut", "hairsp", "hais", "haitu", "hal", "halanta", "halberd", "half", "half-1", "half-2", "half-circle", "halfwidth", "halo", "halqa", "ham", "hamburger", "hamilt", "hammer", "hamster", "hamza", "han", "han-akat", "hand", "hand-angle", "hand-circle", "hand-claw", "hand-cup", "hand-curlicue", "hand-fist", "hand-flat", "hand-hinge", "hand-hook", "hand-oval", "handbag", "handball", "handle", "handles", "hands", "handshake", "hang", "hangul", "hangzhou", "hanifi", "hanunoo", "hao", "hap", "happy", "har", "harbahay", "hard", "hardcy", "hardness", "harklean", "harmonic", "harpoon", "harr", "harrcir", "harrw", "hasanta", "haser", "hat", "hataf", "hatching", "hate", "hathi", "hatran", "hau", "hauptstimme", "have", "hawj", "hax", "hayanna", "hbar", "hbasa", "hbasa-esasa", "hc", "hcirc", "hdr", "he", "he-1", "he-2", "he-3", "he-4", "he-5", "he-6", "he-7", "he-goat", "head", "head-bandage", "headed", "heading", "headphone", "headscarf", "headstone", "headstroke", "hear-no-evil", "hearing", "heart", "heart-shaped", "hearts", "heartsuit", "heaven", "heavenly", "heavy", "hebrew", "hedgehog", "hee", "heei", "heel", "heh", "hei", "height", "heisei", "hekutaaru", "helicopter", "helix", "hellip", "hellschreiber", "helm", "helmet", "hemp", "hen", "heng", "hentaigana", "hep", "heraeum", "herb", "hercon", "hermes", "hermionian", "hermitian", "heru", "herutu", "het", "heta", "heth", "hex", "hexagon", "hexagram", "hexiform", "heyt", "hfr", "hg", "hha", "hhaa", "hhe", "hhee", "hhi", "hho", "hhu", "hhwa", "hi", "hi-1", "hi-2", "hi-3", "hi-4", "hi-5", "hi-6", "hi-7", "hi-res", "hibiscus", "hide", "hidet", "hiding", "hie", "hieroglyph", "hieroglyphic", "hieuh", "hieuh-mieum", "hieuh-nieun", "hieuh-pieup", "hieuh-rieul", "hieuh-sios", "hiex", "high", "high-heeled", "high-low", "high-reversed-9", "high-speed", "hii", "hiking", "hilbertspace", "hin", "hindu", "hinge", "hinged", "hip", "hippopotamus", "hiragana", "hiriq", "historic", "hit", "hitting", "hiyo", "hizb", "hk", "hksearow", "hkswarow", "hl", "hla", "hlap", "hlat", "hlau", "hlax", "hle", "hlep", "hlex", "hli", "hlie", "hliep", "hliex", "hlip", "hlit", "hlix", "hlo", "hlop", "hlox", "hlu", "hluo", "hluop", "hluox", "hlup", "hlur", "hlurx", "hlut", "hlux", "hly", "hlyp", "hlyr", "hlyrx", "hlyt", "hlyx", "hm", "hma", "hmap", "hmat", "hmax", "hme", "hmi", "hmie", "hmiep", "hmiex", "hmip", "hmit", "hmix", "hmo", "hmong", "hmop", "hmot", "hmox", "hmu", "hmuo", "hmuop", "hmuox", "hmup", "hmur", "hmurx", "hmut", "hmux", "hmy", "hmyp", "hmyr", "hmyrx", "hmyx", "hna", "hnap", "hnat", "hnau", "hnax", "hne", "hnep", "hnex", "hni", "hnie", "hniep", "hniet", "hniex", "hnip", "hnit", "hnix", "hnop", "hnot", "hnox", "hnub", "hnuo", "hnuox", "hnut", "ho", "ho-1", "ho-2", "ho-3", "ho-4", "ho-5", "ho-6", "ho-7", "ho-8", "hoa", "hoarr", "hocho", "hockey", "hoe", "hoi", "hoka", "holam", "holding", "hole", "hollow", "holo", "hom", "homothetic", "homtht", "hon", "honey", "honeybee", "hoo", "hook", "hooked", "hookleftarrow", "hookrightarrow", "hoon", "hoop", "hooru", "hoou", "hop", "hopf", "hora", "horbar", "hori", "horizontal", "horizontal-00-00", "horizontal-00-01", "horizontal-00-02", "horizontal-00-03", "horizontal-00-04", "horizontal-00-05", "horizontal-00-06", "horizontal-01-00", "horizontal-01-01", "horizontal-01-02", "horizontal-01-03", "horizontal-01-04", "horizontal-01-05", "horizontal-01-06", "horizontal-02-00", "horizontal-02-01", "horizontal-02-02", "horizontal-02-03", "horizontal-02-04", "horizontal-02-05", "horizontal-02-06", "horizontal-03-00", "horizontal-03-01", "horizontal-03-02", "horizontal-03-03", "horizontal-03-04", "horizontal-03-05", "horizontal-03-06", "horizontal-04-00", "horizontal-04-01", "horizontal-04-02", "horizontal-04-03", "horizontal-04-04", "horizontal-04-05", "horizontal-04-06", "horizontal-05-00", "horizontal-05-01", "horizontal-05-02", "horizontal-05-03", "horizontal-05-04", "horizontal-05-05", "horizontal-05-06", "horizontal-06-00", "horizontal-06-01", "horizontal-06-02", "horizontal-06-03", "horizontal-06-04", "horizontal-06-05", "horizontal-06-06", "horizontalline", "horizontally", "horn", "horns", "horr", "horse", "hospital", "hot", "hota", "hotel", "hour", "hourglass", "house", "hox", "hoy", "hp", "hpa", "hpwg", "hryvnia", "hscr", "hslash", "hstrok", "hta", "hu", "hu-1", "hu-2", "hu-3", "huan", "huaraddo", "hub", "hub2", "hugging", "huiito", "huk", "hul2", "human", "hump", "humpdownhump", "humpequal", "hun", "hundred", "hundreds", "hung", "hungarian", "huo", "huop", "huot", "huox", "huran", "hush", "hushed", "huva", "hv", "hwa", "hwah", "hwair", "hwe", "hwee", "hwi", "hwo", "hwu", "hxa", "hxap", "hxat", "hxax", "hxe", "hxep", "hxex", "hxi", "hxie", "hxiep", "hxiet", "hxiex", "hxip", "hxit", "hxix", "hxo", "hxop", "hxot", "hxox", "hxuo", "hxuop", "hxuot", "hxuox", "hxwg", "hya", "hybull", "hygiea", "hygieia", "hyphen", "hyphen-minus", "hyphenation", "hypodiastole", "hysteresis", "hz", "hzg", "hzt", "hzw", "hzwg", "hzz", "hzzp", "hzzz", "hzzzg", "i-1", "i-2", "i-3", "i-4", "i-a", "i-araea", "i-beam", "i-eu", "i-i", "i-o", "i-o-i", "i-u", "i-ya", "i-ya-o", "i-yae", "i-ye", "i-yeo", "i-yo", "i-yu", "i001", "i002", "i003", "i004", "i005", "i005a", "i006", "i007", "i008", "i009", "i009a", "i010", "i010a", "i011", "i011a", "i012", "i013", "i014", "i015", "ia", "iacute", "ian", "iang", "iauda", "ib", "ibifili", "ic", "ice", "icelandic-yr", "ichadin", "ichimatos", "ichos", "ichou", "icirc", "icon", "icy", "id", "identical", "identification", "ideogram", "ideograph", "ideograph,", "ideograph-2f800", "ideograph-2f801", "ideograph-2f802", "ideograph-2f803", "ideograph-2f804", "ideograph-2f805", "ideograph-2f806", "ideograph-2f807", "ideograph-2f808", "ideograph-2f809", "ideograph-2f80a", "ideograph-2f80b", "ideograph-2f80c", "ideograph-2f80d", "ideograph-2f80e", "ideograph-2f80f", "ideograph-2f810", "ideograph-2f811", "ideograph-2f812", "ideograph-2f813", "ideograph-2f814", "ideograph-2f815", "ideograph-2f816", "ideograph-2f817", "ideograph-2f818", "ideograph-2f819", "ideograph-2f81a", "ideograph-2f81b", "ideograph-2f81c", "ideograph-2f81d", "ideograph-2f81e", "ideograph-2f81f", "ideograph-2f820", "ideograph-2f821", "ideograph-2f822", "ideograph-2f823", "ideograph-2f824", "ideograph-2f825", "ideograph-2f826", "ideograph-2f827", "ideograph-2f828", "ideograph-2f829", "ideograph-2f82a", "ideograph-2f82b", "ideograph-2f82c", "ideograph-2f82d", "ideograph-2f82e", "ideograph-2f82f", "ideograph-2f830", "ideograph-2f831", "ideograph-2f832", "ideograph-2f833", "ideograph-2f834", "ideograph-2f835", "ideograph-2f836", "ideograph-2f837", "ideograph-2f838", "ideograph-2f839", "ideograph-2f83a", "ideograph-2f83b", "ideograph-2f83c", "ideograph-2f83d", "ideograph-2f83e", "ideograph-2f83f", "ideograph-2f840", "ideograph-2f841", "ideograph-2f842", "ideograph-2f843", "ideograph-2f844", "ideograph-2f845", "ideograph-2f846", "ideograph-2f847", "ideograph-2f848", "ideograph-2f849", "ideograph-2f84a", "ideograph-2f84b", "ideograph-2f84c", "ideograph-2f84d", "ideograph-2f84e", "ideograph-2f84f", "ideograph-2f850", "ideograph-2f851", "ideograph-2f852", "ideograph-2f853", "ideograph-2f854", "ideograph-2f855", "ideograph-2f856", "ideograph-2f857", "ideograph-2f858", "ideograph-2f859", "ideograph-2f85a", "ideograph-2f85b", "ideograph-2f85c", "ideograph-2f85d", "ideograph-2f85e", "ideograph-2f85f", "ideograph-2f860", "ideograph-2f861", "ideograph-2f862", "ideograph-2f863", "ideograph-2f864", "ideograph-2f865", "ideograph-2f866", "ideograph-2f867", "ideograph-2f868", "ideograph-2f869", "ideograph-2f86a", "ideograph-2f86b", "ideograph-2f86c", "ideograph-2f86d", "ideograph-2f86e", "ideograph-2f86f", "ideograph-2f870", "ideograph-2f871", "ideograph-2f872", "ideograph-2f873", "ideograph-2f874", "ideograph-2f875", "ideograph-2f876", "ideograph-2f877", "ideograph-2f878", "ideograph-2f879", "ideograph-2f87a", "ideograph-2f87b", "ideograph-2f87c", "ideograph-2f87d", "ideograph-2f87e", "ideograph-2f87f", "ideograph-2f880", "ideograph-2f881", "ideograph-2f882", "ideograph-2f883", "ideograph-2f884", "ideograph-2f885", "ideograph-2f886", "ideograph-2f887", "ideograph-2f888", "ideograph-2f889", "ideograph-2f88a", "ideograph-2f88b", "ideograph-2f88c", "ideograph-2f88d", "ideograph-2f88e", "ideograph-2f88f", "ideograph-2f890", "ideograph-2f891", "ideograph-2f892", "ideograph-2f893", "ideograph-2f894", "ideograph-2f895", "ideograph-2f896", "ideograph-2f897", "ideograph-2f898", "ideograph-2f899", "ideograph-2f89a", "ideograph-2f89b", "ideograph-2f89c", "ideograph-2f89d", "ideograph-2f89e", "ideograph-2f89f", "ideograph-2f8a0", "ideograph-2f8a1", "ideograph-2f8a2", "ideograph-2f8a3", "ideograph-2f8a4", "ideograph-2f8a5", "ideograph-2f8a6", "ideograph-2f8a7", "ideograph-2f8a8", "ideograph-2f8a9", "ideograph-2f8aa", "ideograph-2f8ab", "ideograph-2f8ac", "ideograph-2f8ad", "ideograph-2f8ae", "ideograph-2f8af", "ideograph-2f8b0", "ideograph-2f8b1", "ideograph-2f8b2", "ideograph-2f8b3", "ideograph-2f8b4", "ideograph-2f8b5", "ideograph-2f8b6", "ideograph-2f8b7", "ideograph-2f8b8", "ideograph-2f8b9", "ideograph-2f8ba", "ideograph-2f8bb", "ideograph-2f8bc", "ideograph-2f8bd", "ideograph-2f8be", "ideograph-2f8bf", "ideograph-2f8c0", "ideograph-2f8c1", "ideograph-2f8c2", "ideograph-2f8c3", "ideograph-2f8c4", "ideograph-2f8c5", "ideograph-2f8c6", "ideograph-2f8c7", "ideograph-2f8c8", "ideograph-2f8c9", "ideograph-2f8ca", "ideograph-2f8cb", "ideograph-2f8cc", "ideograph-2f8cd", "ideograph-2f8ce", "ideograph-2f8cf", "ideograph-2f8d0", "ideograph-2f8d1", "ideograph-2f8d2", "ideograph-2f8d3", "ideograph-2f8d4", "ideograph-2f8d5", "ideograph-2f8d6", "ideograph-2f8d7", "ideograph-2f8d8", "ideograph-2f8d9", "ideograph-2f8da", "ideograph-2f8db", "ideograph-2f8dc", "ideograph-2f8dd", "ideograph-2f8de", "ideograph-2f8df", "ideograph-2f8e0", "ideograph-2f8e1", "ideograph-2f8e2", "ideograph-2f8e3", "ideograph-2f8e4", "ideograph-2f8e5", "ideograph-2f8e6", "ideograph-2f8e7", "ideograph-2f8e8", "ideograph-2f8e9", "ideograph-2f8ea", "ideograph-2f8eb", "ideograph-2f8ec", "ideograph-2f8ed", "ideograph-2f8ee", "ideograph-2f8ef", "ideograph-2f8f0", "ideograph-2f8f1", "ideograph-2f8f2", "ideograph-2f8f3", "ideograph-2f8f4", "ideograph-2f8f5", "ideograph-2f8f6", "ideograph-2f8f7", "ideograph-2f8f8", "ideograph-2f8f9", "ideograph-2f8fa", "ideograph-2f8fb", "ideograph-2f8fc", "ideograph-2f8fd", "ideograph-2f8fe", "ideograph-2f8ff", "ideograph-2f900", "ideograph-2f901", "ideograph-2f902", "ideograph-2f903", "ideograph-2f904", "ideograph-2f905", "ideograph-2f906", "ideograph-2f907", "ideograph-2f908", "ideograph-2f909", "ideograph-2f90a", "ideograph-2f90b", "ideograph-2f90c", "ideograph-2f90d", "ideograph-2f90e", "ideograph-2f90f", "ideograph-2f910", "ideograph-2f911", "ideograph-2f912", "ideograph-2f913", "ideograph-2f914", "ideograph-2f915", "ideograph-2f916", "ideograph-2f917", "ideograph-2f918", "ideograph-2f919", "ideograph-2f91a", "ideograph-2f91b", "ideograph-2f91c", "ideograph-2f91d", "ideograph-2f91e", "ideograph-2f91f", "ideograph-2f920", "ideograph-2f921", "ideograph-2f922", "ideograph-2f923", "ideograph-2f924", "ideograph-2f925", "ideograph-2f926", "ideograph-2f927", "ideograph-2f928", "ideograph-2f929", "ideograph-2f92a", "ideograph-2f92b", "ideograph-2f92c", "ideograph-2f92d", "ideograph-2f92e", "ideograph-2f92f", "ideograph-2f930", "ideograph-2f931", "ideograph-2f932", "ideograph-2f933", "ideograph-2f934", "ideograph-2f935", "ideograph-2f936", "ideograph-2f937", "ideograph-2f938", "ideograph-2f939", "ideograph-2f93a", "ideograph-2f93b", "ideograph-2f93c", "ideograph-2f93d", "ideograph-2f93e", "ideograph-2f93f", "ideograph-2f940", "ideograph-2f941", "ideograph-2f942", "ideograph-2f943", "ideograph-2f944", "ideograph-2f945", "ideograph-2f946", "ideograph-2f947", "ideograph-2f948", "ideograph-2f949", "ideograph-2f94a", "ideograph-2f94b", "ideograph-2f94c", "ideograph-2f94d", "ideograph-2f94e", "ideograph-2f94f", "ideograph-2f950", "ideograph-2f951", "ideograph-2f952", "ideograph-2f953", "ideograph-2f954", "ideograph-2f955", "ideograph-2f956", "ideograph-2f957", "ideograph-2f958", "ideograph-2f959", "ideograph-2f95a", "ideograph-2f95b", "ideograph-2f95c", "ideograph-2f95d", "ideograph-2f95e", "ideograph-2f95f", "ideograph-2f960", "ideograph-2f961", "ideograph-2f962", "ideograph-2f963", "ideograph-2f964", "ideograph-2f965", "ideograph-2f966", "ideograph-2f967", "ideograph-2f968", "ideograph-2f969", "ideograph-2f96a", "ideograph-2f96b", "ideograph-2f96c", "ideograph-2f96d", "ideograph-2f96e", "ideograph-2f96f", "ideograph-2f970", "ideograph-2f971", "ideograph-2f972", "ideograph-2f973", "ideograph-2f974", "ideograph-2f975", "ideograph-2f976", "ideograph-2f977", "ideograph-2f978", "ideograph-2f979", "ideograph-2f97a", "ideograph-2f97b", "ideograph-2f97c", "ideograph-2f97d", "ideograph-2f97e", "ideograph-2f97f", "ideograph-2f980", "ideograph-2f981", "ideograph-2f982", "ideograph-2f983", "ideograph-2f984", "ideograph-2f985", "ideograph-2f986", "ideograph-2f987", "ideograph-2f988", "ideograph-2f989", "ideograph-2f98a", "ideograph-2f98b", "ideograph-2f98c", "ideograph-2f98d", "ideograph-2f98e", "ideograph-2f98f", "ideograph-2f990", "ideograph-2f991", "ideograph-2f992", "ideograph-2f993", "ideograph-2f994", "ideograph-2f995", "ideograph-2f996", "ideograph-2f997", "ideograph-2f998", "ideograph-2f999", "ideograph-2f99a", "ideograph-2f99b", "ideograph-2f99c", "ideograph-2f99d", "ideograph-2f99e", "ideograph-2f99f", "ideograph-2f9a0", "ideograph-2f9a1", "ideograph-2f9a2", "ideograph-2f9a3", "ideograph-2f9a4", "ideograph-2f9a5", "ideograph-2f9a6", "ideograph-2f9a7", "ideograph-2f9a8", "ideograph-2f9a9", "ideograph-2f9aa", "ideograph-2f9ab", "ideograph-2f9ac", "ideograph-2f9ad", "ideograph-2f9ae", "ideograph-2f9af", "ideograph-2f9b0", "ideograph-2f9b1", "ideograph-2f9b2", "ideograph-2f9b3", "ideograph-2f9b4", "ideograph-2f9b5", "ideograph-2f9b6", "ideograph-2f9b7", "ideograph-2f9b8", "ideograph-2f9b9", "ideograph-2f9ba", "ideograph-2f9bb", "ideograph-2f9bc", "ideograph-2f9bd", "ideograph-2f9be", "ideograph-2f9bf", "ideograph-2f9c0", "ideograph-2f9c1", "ideograph-2f9c2", "ideograph-2f9c3", "ideograph-2f9c4", "ideograph-2f9c5", "ideograph-2f9c6", "ideograph-2f9c7", "ideograph-2f9c8", "ideograph-2f9c9", "ideograph-2f9ca", "ideograph-2f9cb", "ideograph-2f9cc", "ideograph-2f9cd", "ideograph-2f9ce", "ideograph-2f9cf", "ideograph-2f9d0", "ideograph-2f9d1", "ideograph-2f9d2", "ideograph-2f9d3", "ideograph-2f9d4", "ideograph-2f9d5", "ideograph-2f9d6", "ideograph-2f9d7", "ideograph-2f9d8", "ideograph-2f9d9", "ideograph-2f9da", "ideograph-2f9db", "ideograph-2f9dc", "ideograph-2f9dd", "ideograph-2f9de", "ideograph-2f9df", "ideograph-2f9e0", "ideograph-2f9e1", "ideograph-2f9e2", "ideograph-2f9e3", "ideograph-2f9e4", "ideograph-2f9e5", "ideograph-2f9e6", "ideograph-2f9e7", "ideograph-2f9e8", "ideograph-2f9e9", "ideograph-2f9ea", "ideograph-2f9eb", "ideograph-2f9ec", "ideograph-2f9ed", "ideograph-2f9ee", "ideograph-2f9ef", "ideograph-2f9f0", "ideograph-2f9f1", "ideograph-2f9f2", "ideograph-2f9f3", "ideograph-2f9f4", "ideograph-2f9f5", "ideograph-2f9f6", "ideograph-2f9f7", "ideograph-2f9f8", "ideograph-2f9f9", "ideograph-2f9fa", "ideograph-2f9fb", "ideograph-2f9fc", "ideograph-2f9fd", "ideograph-2f9fe", "ideograph-2f9ff", "ideograph-2fa00", "ideograph-2fa01", "ideograph-2fa02", "ideograph-2fa03", "ideograph-2fa04", "ideograph-2fa05", "ideograph-2fa06", "ideograph-2fa07", "ideograph-2fa08", "ideograph-2fa09", "ideograph-2fa0a", "ideograph-2fa0b", "ideograph-2fa0c", "ideograph-2fa0d", "ideograph-2fa0e", "ideograph-2fa0f", "ideograph-2fa10", "ideograph-2fa11", "ideograph-2fa12", "ideograph-2fa13", "ideograph-2fa14", "ideograph-2fa15", "ideograph-2fa16", "ideograph-2fa17", "ideograph-2fa18", "ideograph-2fa19", "ideograph-2fa1a", "ideograph-2fa1b", "ideograph-2fa1c", "ideograph-2fa1d", "ideograph-4e00", "ideograph-4e09", "ideograph-4e2d", "ideograph-4e8c", "ideograph-4ea4", "ideograph-518d", "ideograph-521d", "ideograph-524d", "ideograph-5272", "ideograph-52dd", "ideograph-53cc", "ideograph-53f3", "ideograph-5408", "ideograph-5439", "ideograph-55b6", "ideograph-58f0", "ideograph-591a", "ideograph-5929", "ideograph-5b57", "ideograph-5b89", "ideograph-5de6", "ideograph-5f8c", "ideograph-624b", "ideograph-6253", "ideograph-6295", "ideograph-6307", "ideograph-6355", "ideograph-6557", "ideograph-6599", "ideograph-65b0", "ideograph-6620", "ideograph-6708", "ideograph-6709", "ideograph-672c", "ideograph-6e80", "ideograph-6f14", "ideograph-70b9", "ideograph-7121", "ideograph-751f", "ideograph-7533", "ideograph-76d7", "ideograph-7981", "ideograph-7a7a", "ideograph-7d42", "ideograph-89e3", "ideograph-8ca9", "ideograph-8d70", "ideograph-904a", "ideograph-914d", "ideograph-f900", "ideograph-f901", "ideograph-f902", "ideograph-f903", "ideograph-f904", "ideograph-f905", "ideograph-f906", "ideograph-f907", "ideograph-f908", "ideograph-f909", "ideograph-f90a", "ideograph-f90b", "ideograph-f90c", "ideograph-f90d", "ideograph-f90e", "ideograph-f90f", "ideograph-f910", "ideograph-f911", "ideograph-f912", "ideograph-f913", "ideograph-f914", "ideograph-f915", "ideograph-f916", "ideograph-f917", "ideograph-f918", "ideograph-f919", "ideograph-f91a", "ideograph-f91b", "ideograph-f91c", "ideograph-f91d", "ideograph-f91e", "ideograph-f91f", "ideograph-f920", "ideograph-f921", "ideograph-f922", "ideograph-f923", "ideograph-f924", "ideograph-f925", "ideograph-f926", "ideograph-f927", "ideograph-f928", "ideograph-f929", "ideograph-f92a", "ideograph-f92b", "ideograph-f92c", "ideograph-f92d", "ideograph-f92e", "ideograph-f92f", "ideograph-f930", "ideograph-f931", "ideograph-f932", "ideograph-f933", "ideograph-f934", "ideograph-f935", "ideograph-f936", "ideograph-f937", "ideograph-f938", "ideograph-f939", "ideograph-f93a", "ideograph-f93b", "ideograph-f93c", "ideograph-f93d", "ideograph-f93e", "ideograph-f93f", "ideograph-f940", "ideograph-f941", "ideograph-f942", "ideograph-f943", "ideograph-f944", "ideograph-f945", "ideograph-f946", "ideograph-f947", "ideograph-f948", "ideograph-f949", "ideograph-f94a", "ideograph-f94b", "ideograph-f94c", "ideograph-f94d", "ideograph-f94e", "ideograph-f94f", "ideograph-f950", "ideograph-f951", "ideograph-f952", "ideograph-f953", "ideograph-f954", "ideograph-f955", "ideograph-f956", "ideograph-f957", "ideograph-f958", "ideograph-f959", "ideograph-f95a", "ideograph-f95b", "ideograph-f95c", "ideograph-f95d", "ideograph-f95e", "ideograph-f95f", "ideograph-f960", "ideograph-f961", "ideograph-f962", "ideograph-f963", "ideograph-f964", "ideograph-f965", "ideograph-f966", "ideograph-f967", "ideograph-f968", "ideograph-f969", "ideograph-f96a", "ideograph-f96b", "ideograph-f96c", "ideograph-f96d", "ideograph-f96e", "ideograph-f96f", "ideograph-f970", "ideograph-f971", "ideograph-f972", "ideograph-f973", "ideograph-f974", "ideograph-f975", "ideograph-f976", "ideograph-f977", "ideograph-f978", "ideograph-f979", "ideograph-f97a", "ideograph-f97b", "ideograph-f97c", "ideograph-f97d", "ideograph-f97e", "ideograph-f97f", "ideograph-f980", "ideograph-f981", "ideograph-f982", "ideograph-f983", "ideograph-f984", "ideograph-f985", "ideograph-f986", "ideograph-f987", "ideograph-f988", "ideograph-f989", "ideograph-f98a", "ideograph-f98b", "ideograph-f98c", "ideograph-f98d", "ideograph-f98e", "ideograph-f98f", "ideograph-f990", "ideograph-f991", "ideograph-f992", "ideograph-f993", "ideograph-f994", "ideograph-f995", "ideograph-f996", "ideograph-f997", "ideograph-f998", "ideograph-f999", "ideograph-f99a", "ideograph-f99b", "ideograph-f99c", "ideograph-f99d", "ideograph-f99e", "ideograph-f99f", "ideograph-f9a0", "ideograph-f9a1", "ideograph-f9a2", "ideograph-f9a3", "ideograph-f9a4", "ideograph-f9a5", "ideograph-f9a6", "ideograph-f9a7", "ideograph-f9a8", "ideograph-f9a9", "ideograph-f9aa", "ideograph-f9ab", "ideograph-f9ac", "ideograph-f9ad", "ideograph-f9ae", "ideograph-f9af", "ideograph-f9b0", "ideograph-f9b1", "ideograph-f9b2", "ideograph-f9b3", "ideograph-f9b4", "ideograph-f9b5", "ideograph-f9b6", "ideograph-f9b7", "ideograph-f9b8", "ideograph-f9b9", "ideograph-f9ba", "ideograph-f9bb", "ideograph-f9bc", "ideograph-f9bd", "ideograph-f9be", "ideograph-f9bf", "ideograph-f9c0", "ideograph-f9c1", "ideograph-f9c2", "ideograph-f9c3", "ideograph-f9c4", "ideograph-f9c5", "ideograph-f9c6", "ideograph-f9c7", "ideograph-f9c8", "ideograph-f9c9", "ideograph-f9ca", "ideograph-f9cb", "ideograph-f9cc", "ideograph-f9cd", "ideograph-f9ce", "ideograph-f9cf", "ideograph-f9d0", "ideograph-f9d1", "ideograph-f9d2", "ideograph-f9d3", "ideograph-f9d4", "ideograph-f9d5", "ideograph-f9d6", "ideograph-f9d7", "ideograph-f9d8", "ideograph-f9d9", "ideograph-f9da", "ideograph-f9db", "ideograph-f9dc", "ideograph-f9dd", "ideograph-f9de", "ideograph-f9df", "ideograph-f9e0", "ideograph-f9e1", "ideograph-f9e2", "ideograph-f9e3", "ideograph-f9e4", "ideograph-f9e5", "ideograph-f9e6", "ideograph-f9e7", "ideograph-f9e8", "ideograph-f9e9", "ideograph-f9ea", "ideograph-f9eb", "ideograph-f9ec", "ideograph-f9ed", "ideograph-f9ee", "ideograph-f9ef", "ideograph-f9f0", "ideograph-f9f1", "ideograph-f9f2", "ideograph-f9f3", "ideograph-f9f4", "ideograph-f9f5", "ideograph-f9f6", "ideograph-f9f7", "ideograph-f9f8", "ideograph-f9f9", "ideograph-f9fa", "ideograph-f9fb", "ideograph-f9fc", "ideograph-f9fd", "ideograph-f9fe", "ideograph-f9ff", "ideograph-fa00", "ideograph-fa01", "ideograph-fa02", "ideograph-fa03", "ideograph-fa04", "ideograph-fa05", "ideograph-fa06", "ideograph-fa07", "ideograph-fa08", "ideograph-fa09", "ideograph-fa0a", "ideograph-fa0b", "ideograph-fa0c", "ideograph-fa0d", "ideograph-fa0e", "ideograph-fa0f", "ideograph-fa10", "ideograph-fa11", "ideograph-fa12", "ideograph-fa13", "ideograph-fa14", "ideograph-fa15", "ideograph-fa16", "ideograph-fa17", "ideograph-fa18", "ideograph-fa19", "ideograph-fa1a", "ideograph-fa1b", "ideograph-fa1c", "ideograph-fa1d", "ideograph-fa1e", "ideograph-fa1f", "ideograph-fa20", "ideograph-fa21", "ideograph-fa22", "ideograph-fa23", "ideograph-fa24", "ideograph-fa25", "ideograph-fa26", "ideograph-fa27", "ideograph-fa28", "ideograph-fa29", "ideograph-fa2a", "ideograph-fa2b", "ideograph-fa2c", "ideograph-fa2d", "ideograph-fa2e", "ideograph-fa2f", "ideograph-fa30", "ideograph-fa31", "ideograph-fa32", "ideograph-fa33", "ideograph-fa34", "ideograph-fa35", "ideograph-fa36", "ideograph-fa37", "ideograph-fa38", "ideograph-fa39", "ideograph-fa3a", "ideograph-fa3b", "ideograph-fa3c", "ideograph-fa3d", "ideograph-fa3e", "ideograph-fa3f", "ideograph-fa40", "ideograph-fa41", "ideograph-fa42", "ideograph-fa43", "ideograph-fa44", "ideograph-fa45", "ideograph-fa46", "ideograph-fa47", "ideograph-fa48", "ideograph-fa49", "ideograph-fa4a", "ideograph-fa4b", "ideograph-fa4c", "ideograph-fa4d", "ideograph-fa4e", "ideograph-fa4f", "ideograph-fa50", "ideograph-fa51", "ideograph-fa52", "ideograph-fa53", "ideograph-fa54", "ideograph-fa55", "ideograph-fa56", "ideograph-fa57", "ideograph-fa58", "ideograph-fa59", "ideograph-fa5a", "ideograph-fa5b", "ideograph-fa5c", "ideograph-fa5d", "ideograph-fa5e", "ideograph-fa5f", "ideograph-fa60", "ideograph-fa61", "ideograph-fa62", "ideograph-fa63", "ideograph-fa64", "ideograph-fa65", "ideograph-fa66", "ideograph-fa67", "ideograph-fa68", "ideograph-fa69", "ideograph-fa6a", "ideograph-fa6b", "ideograph-fa6c", "ideograph-fa6d", "ideograph-fa70", "ideograph-fa71", "ideograph-fa72", "ideograph-fa73", "ideograph-fa74", "ideograph-fa75", "ideograph-fa76", "ideograph-fa77", "ideograph-fa78", "ideograph-fa79", "ideograph-fa7a", "ideograph-fa7b", "ideograph-fa7c", "ideograph-fa7d", "ideograph-fa7e", "ideograph-fa7f", "ideograph-fa80", "ideograph-fa81", "ideograph-fa82", "ideograph-fa83", "ideograph-fa84", "ideograph-fa85", "ideograph-fa86", "ideograph-fa87", "ideograph-fa88", "ideograph-fa89", "ideograph-fa8a", "ideograph-fa8b", "ideograph-fa8c", "ideograph-fa8d", "ideograph-fa8e", "ideograph-fa8f", "ideograph-fa90", "ideograph-fa91", "ideograph-fa92", "ideograph-fa93", "ideograph-fa94", "ideograph-fa95", "ideograph-fa96", "ideograph-fa97", "ideograph-fa98", "ideograph-fa99", "ideograph-fa9a", "ideograph-fa9b", "ideograph-fa9c", "ideograph-fa9d", "ideograph-fa9e", "ideograph-fa9f", "ideograph-faa0", "ideograph-faa1", "ideograph-faa2", "ideograph-faa3", "ideograph-faa4", "ideograph-faa5", "ideograph-faa6", "ideograph-faa7", "ideograph-faa8", "ideograph-faa9", "ideograph-faaa", "ideograph-faab", "ideograph-faac", "ideograph-faad", "ideograph-faae", "ideograph-faaf", "ideograph-fab0", "ideograph-fab1", "ideograph-fab2", "ideograph-fab3", "ideograph-fab4", "ideograph-fab5", "ideograph-fab6", "ideograph-fab7", "ideograph-fab8", "ideograph-fab9", "ideograph-faba", "ideograph-fabb", "ideograph-fabc", "ideograph-fabd", "ideograph-fabe", "ideograph-fabf", "ideograph-fac0", "ideograph-fac1", "ideograph-fac2", "ideograph-fac3", "ideograph-fac4", "ideograph-fac5", "ideograph-fac6", "ideograph-fac7", "ideograph-fac8", "ideograph-fac9", "ideograph-faca", "ideograph-facb", "ideograph-facc", "ideograph-facd", "ideograph-face", "ideograph-facf", "ideograph-fad0", "ideograph-fad1", "ideograph-fad2", "ideograph-fad3", "ideograph-fad4", "ideograph-fad5", "ideograph-fad6", "ideograph-fad7", "ideograph-fad8", "ideograph-fad9", "ideographic", "idim", "idle", "idot", "ie", "iecy", "iep", "iet", "ieung", "ieung-chieuch", "ieung-cieuc", "ieung-hieuh", "ieung-khieukh", "ieung-kiyeok", "ieung-mieum", "ieung-pansios", "ieung-phieuph", "ieung-pieup", "ieung-rieul", "ieung-sios", "ieung-ssangkiyeok", "ieung-thieuth", "ieung-tikeut", "iex", "iexcl", "if", "iff", "ifin", "ifr", "ig", "iggws", "igi", "igrave", "ih", "ii", "iiiint", "iiint", "iinfin", "iiota", "iiyanna", "ij", "ijlig", "ikara", "il", "il2", "ilimmu", "ilimmu3", "ilimmu4", "ilut", "iluuyanna", "iluy", "iluyanna", "im", "imacr", "image", "imaginaryi", "imagline", "imagpart", "imath", "imidiargon", "imifonon", "imifthora", "imifthoron", "imin", "imin3", "imiseos", "imn", "imof", "imp", "imped", "imperfecta", "imperfectum", "imperial", "implies", "in", "in-alaf", "inap", "inbox", "incare", "inch", "including", "incoming", "incomplete", "increase", "increases", "increment", "independent", "index", "indian", "indic", "indicator", "indiction", "indirect", "industrial", "infin", "infinity", "infintie", "influence", "information", "ing", "ingwaz", "inhale", "inherent", "inhibit", "ini", "iningu", "initial", "ink", "inn", "inner", "innn", "innocence", "inodot", "input", "inscriptional", "insect", "insert", "insertion", "inside", "instrumental", "insular", "int", "intcal", "integers", "integral", "integration", "intercal", "intercalate", "interest", "interior", "interlaced", "interlinear", "interlocked", "interpolation", "interrobang", "intersecting", "intersection", "intersyllabic", "inti", "intlarhk", "intprod", "inverse", "invertebrate", "inverted", "invisible", "invisiblecomma", "invisibletimes", "iny", "inya", "io", "iocy", "iodhadh", "iogon", "iong", "iopf", "ior", "iota", "iotated", "iotified", "ip", "iprod", "iq", "iquest", "ir", "irb", "iri", "iron", "iron-copper", "iruuyanna", "iruyanna", "is", "is-pilla", "isakia", "isaz", "iscr", "isen-isen", "ish", "isin", "isindot", "isine", "isins", "isinsv", "isinv", "island", "isolate", "isolated", "ison", "isosceles", "iss", "isshar", "it", "italic", "item", "iteration", "itilde", "its", "iu", "iuja", "iukcy", "iuml", "iwaz", "iwn", "ix", "iy", "iyanna", "iyek", "izakaya", "izhe", "izhitsa", "j-simplified", "ja", "jaa", "jack", "jack-o-lantern", "jacks", "jade", "jah", "jain", "jallajalalouhou", "january", "japan", "japanese", "jar", "javanese", "javiyani", "jaw", "jayanna", "jayin", "jayn", "jcirc", "jcy", "je", "jeans", "jee", "jeem", "jegogan", "jeh", "jer", "jera", "jeran", "jerusalem", "jeu", "jfr", "jha", "jhaa", "jham", "jhan", "jhayin", "jheh", "jho", "jhox", "ji", "jia", "jie", "jiep", "jiet", "jiex", "jigsaw", "jihvamuliya", "jiim", "jil", "jip", "jit", "jix", "jja", "jje", "jjee", "jji", "jjie", "jjiep", "jjiet", "jjiex", "jjip", "jjit", "jjix", "jjo", "jjop", "jjot", "jjox", "jju", "jjuo", "jjuop", "jjuox", "jjup", "jjur", "jjurx", "jjut", "jjux", "jjy", "jjyp", "jjyt", "jjyx", "jmath", "jnya", "jo", "joa", "join", "joined", "joiner", "joints", "joker", "jona", "jong", "jongseong", "joo", "jop", "jopf", "jot", "jove", "jox", "joy", "joyous", "joystick", "jscr", "jsercy", "ju", "judeo-spanish", "judge", "judul", "jueui", "juggling", "jukcy", "july", "june", "jungseong", "juno", "juo", "juop", "juot", "juox", "jup", "jupiter", "jur", "jurx", "jut", "juu", "jux", "jwa", "jy", "jyp", "jyr", "jyrx", "jyt", "jyx", "k001", "k002", "k003", "k004", "k005", "k006", "k007", "k008", "k2", "ka", "ka-1", "ka-10", "ka-11", "ka-2", "ka-3", "ka-4", "ka-5", "ka-6", "ka-7", "ka-8", "ka-9", "ka-ke", "ka2", "kaa", "kaab", "kaaba", "kaacu", "kaaf", "kaafu", "kaai", "kaan", "kaankuu", "kaav", "kab", "kaba", "kad", "kad2", "kad3", "kad4", "kad5", "kaf", "kafa", "kah", "kai", "kaib", "kairi", "kaithi", "kaiv", "kak", "kakabat", "kako", "kal", "kam", "kam2", "kam4", "kan", "kana", "kanako", "kang", "kangaroo", "kangxi", "kannada", "kantaja", "kap", "kapa", "kapal", "kaph", "kapo", "kappa", "kappav", "kapyeounmieum", "kapyeounphieuph", "kapyeounpieup", "kapyeounrieul", "kapyeounssangpieup", "kaq", "kar", "karan", "karatto", "karen", "karo", "karor", "karoran", "karorii", "karshana", "kashmiri", "kaskal", "kasra", "kasratan", "kat", "katakana", "katakana-hiragana", "katava", "katavasma", "kathaka", "kathisti", "kato", "kaub", "kaun", "kauna", "kauv", "kav", "kavyka", "kawb", "kawi", "kawv", "kax", "kay", "kayah", "kayanna", "kazakh", "kb", "kcal", "kcedil", "kcy", "ke", "ke-1", "ke-2", "ke-3", "ke-4", "ke-5", "ke-6", "keaae", "keb", "kee", "keeb", "keeng", "keeping", "keesu", "keev", "kefula", "keh", "keheh", "kelvin", "kembang", "kemphreng", "kempli", "kempul", "ken", "kenat", "kentima", "kentimata", "keow", "kep", "keret", "kes", "kesh2", "ket", "ketti", "keuae", "keuaem", "keuaeri", "keuaetmeun", "keukaq", "keukeutnda", "keum", "keuot", "keup", "keupuq", "keuseux", "keusheuaep", "keux", "keuyeux", "kev", "kex", "key", "keyboard", "keycap", "kfr", "kg", "kgreen", "kha", "khaa", "khab", "khah", "khai", "khakassian", "khamti", "khan", "khanda", "khang", "khaph", "khar", "kharoshthi", "khav", "khcy", "khe", "khee", "khei", "kheth", "khha", "khho", "khi", "khieukh", "khit", "khmer", "khmu", "kho", "khojki", "khomut", "khon", "khonna", "khot", "khou", "khu", "khuat", "khudam", "khudawadi", "khuen", "khuen-lue", "khwai", "khz", "ki", "ki-1", "ki-2", "ki-3", "ki-4", "ki-5", "ki-6", "ki-7", "ki-8", "kiab", "kiav", "kib", "kick", "kid", "kie", "kieem", "kiep", "kievan", "kiex", "kih", "kii", "kiizh", "kikakui", "killer", "kimono", "kin", "kindergarten", "king", "kinna", "kinship", "kip", "kiq", "kirghiz", "kiro", "kiroguramu", "kiromeetoru", "kirowatto", "kisal", "kish", "kisim5", "kiss", "kissing", "kit", "kite", "kiv", "kiw", "kiwifruit", "kix", "kiyeok", "kiyeok-chieuch", "kiyeok-hieuh", "kiyeok-khieukh", "kiyeok-nieun", "kiyeok-pieup", "kiyeok-rieul", "kiyeok-sios", "kiyeok-sios-kiyeok", "kiyeok-tikeut", "kjcy", "kje", "kk", "kka", "kke", "kkee", "kki", "kko", "kku", "kl", "kla", "klasma", "kliton", "km", "kneeling", "knife", "knight", "knight-bishop", "knight-queen", "knight-rook", "knobs", "knuckle", "knuckles", "ko", "ko-1", "ko-2", "ko-3", "ko-ki", "koa", "koala", "kob", "koet", "koghom", "koh", "koi", "koini", "kok", "koke", "koko", "kombu", "kombuva", "komi", "kon", "kontevma", "koo", "koob", "koomuut", "koopo", "koov", "kop", "kopf", "koppa", "koqndon", "koranic", "korean", "koronis", "koruna", "kot", "koto", "koufisma", "kov", "kovuu", "kox", "kp", "kpa", "kpah", "kpan", "kparaq", "kpe", "kpee", "kpen", "kpeux", "kpi", "kpo", "kpoo", "kpoq", "kpu", "kra", "kratima", "kratimata", "kratimokoufisma", "kratimoyporroon", "kremasti", "kronos", "kscr", "ksi", "kssa", "kt", "ku", "ku-1", "ku-2", "ku-3", "ku-4", "ku-5", "ku-6", "ku-7", "ku3", "ku4", "ku7", "kua", "kuab", "kuav", "kub", "kuet", "kug", "kul", "kun", "kunddaliya", "kung", "kuo", "kuom", "kuop", "kuoq", "kuox", "kup", "kuq", "kur", "kuroone", "kurt", "kuruni", "kuruzeiro", "kurx", "kushu2", "kusma", "kut", "kuuh", "kuv", "kux", "kuzhi", "kv", "kva", "kw", "kwa", "kwaa", "kwaet", "kway", "kwb", "kwe", "kwee", "kwi", "kwii", "kwm", "kwo", "kwoo", "kwu318", "kwv", "kxa", "kxaa", "kxe", "kxee", "kxi", "kxo", "kxu", "kxwa", "kxwaa", "kxwe", "kxwee", "kxwi", "kya", "kyaa", "kyathos", "kye", "kyee", "kyi", "kylisma", "kyo", "kyu", "kyurii", "l-shaped", "l-type", "l001", "l002", "l002a", "l003", "l004", "l005", "l006", "l006a", "l007", "l008", "l2", "l3", "l4", "l6", "la", "laa", "laai", "laam", "laamu", "laan", "laanae", "laarr", "lab", "labat", "label", "labial", "labialization", "labor", "labouring", "laca", "lack", "lacrosse", "lacute", "lady", "lae", "laemptyv", "laev", "lagab", "lagar", "lagran", "lagu", "lagus", "lah", "lahshu", "lai", "laing", "lajanyalan", "lak-003", "lak-020", "lak-021", "lak-025", "lak-030", "lak-050", "lak-051", "lak-062", "lak-079", "lak-080", "lak-081", "lak-092", "lak-130", "lak-142", "lak-210", "lak-219", "lak-220", "lak-225", "lak-228", "lak-238", "lak-265", "lak-266", "lak-343", "lak-347", "lak-348", "lak-383", "lak-384", "lak-390", "lak-441", "lak-449", "lak-450", "lak-457", "lak-470", "lak-483", "lak-490", "lak-492", "lak-493", "lak-495", "lak-550", "lak-608", "lak-617", "lak-636", "lak-648", "lak-668", "lak-724", "lak-749", "lake", "lakh", "lakhan", "lakkhangyao", "lal", "lam", "lamadh", "lambda", "lamd", "lamda", "lame", "lamed", "lamedh", "lamp", "lan", "land", "lane", "lanes", "lang", "langd", "langle", "language", "lantern", "lao", "lap", "lapaq", "laplacetrf", "laq", "laquo", "large", "larger", "largest", "lari", "larr", "larrb", "larrbfs", "larrfs", "larrhk", "larrlp", "larrpl", "larrsim", "larrtl", "laryngeal", "las", "last", "last>", "lat", "latail", "late", "lateral", "latik", "latin", "latinate", "lau", "laughing", "lauj", "laukaz", "laula", "law", "lax", "lay", "layanna", "layar", "lazy", "lbarr", "lbbrk", "lbrace", "lbrack", "lbrke", "lbrksld", "lbrkslu", "lcaron", "lce", "lcedil", "lceil", "lci", "lcub", "lcy", "ld", "ld2", "ldan", "ldca", "ldquo", "ldquor", "ldrdhar", "ldrushar", "ldsh", "le", "lead", "leader", "leading", "leaf", "leafy", "leather", "ledger", "lee", "leeee", "leek", "leeraewa", "left", "left-facing", "left-hand", "left-handed", "left-lighted", "left-pointing", "left-shaded", "left-side", "left-stem", "left-to-right", "leftanglebracket", "leftarrow", "leftarrowbar", "leftarrowrightarrow", "leftarrowtail", "leftceiling", "leftdoublebracket", "leftdownteevector", "leftdownvector", "leftdownvectorbar", "leftfloor", "leftharpoondown", "leftharpoonup", "leftleftarrows", "leftrightarrow", "leftrightarrows", "leftrightharpoons", "leftrightsquigarrow", "leftrightvector", "lefttee", "leftteearrow", "leftteevector", "leftthreetimes", "lefttriangle", "lefttrianglebar", "lefttriangleequal", "leftupdownvector", "leftupteevector", "leftupvector", "leftupvectorbar", "leftvector", "leftvectorbar", "leftwards", "leg", "legetos", "legion", "legs", "lei", "leimma", "lek", "lelet", "lemoi", "lemon", "lenga", "length", "length-1", "length-2", "length-3", "length-4", "length-5", "length-6", "length-7", "lengthener", "lenis", "lenticular", "leo", "leopard", "lep", "lepcha", "leq", "leqq", "leqslant", "les", "lescc", "lesdot", "lesdoto", "lesdotor", "lesges", "lesh", "less", "less-than", "lessapprox", "lessdot", "lesseqgtr", "lesseqqgtr", "lessequalgreater", "lesser", "lessfullequal", "lessgreater", "lessgtr", "lessless", "lesssim", "lessslantequal", "lesstilde", "let", "letter", "letters", "leu", "leuaem", "leuaep", "leum", "level", "levitating", "lex", "lezh", "lfisht", "lfloor", "lfr", "lg", "lge", "lh", "lha", "lhaa", "lhag", "lhar", "lhard", "lharu", "lharul", "lhaviyani", "lhblk", "lhe", "lhee", "lhi", "lhii", "lho", "lhoo", "lhu", "lhya", "li", "liability", "liberty", "libra", "licking", "lid", "lie", "liee", "liep", "liet", "liex", "life", "lifter", "ligating", "ligature", "light", "lighthouse", "lightning", "lii", "lil", "lilith", "lily", "limb", "limbs", "limbu", "lime", "limit", "limitation", "limited", "limmu", "limmu2", "limmu4", "line", "line-1", "line-3", "line-7", "line-9", "linear", "lines", "ling", "lingsa", "link", "linked", "linking", "lion", "lip", "lips", "lipstick", "liq", "liquid", "lira", "lis", "lish", "lisu", "lit", "lith", "litra", "litter", "little", "livre", "liwn", "lix", "lizard", "lj", "ljcy", "lje", "ljudije", "ll", "lla", "llama", "llarr", "llcorner", "lle", "lleftarrow", "llha", "llhard", "lll", "llla", "lltri", "lm", "lmidot", "lmoust", "lmoustache", "ln", "lnap", "lnapprox", "lne", "lneq", "lneqq", "lnsim", "lo", "loa", "loang", "loarr", "lobrk", "lobster", "location", "location-floorplane", "location-wallplane", "locative", "lock", "locomotive", "lodestone", "log", "logical", "logogram", "logotype", "logr", "loll", "lollipop", "lom", "lommae", "long", "long-branch-ar", "long-branch-hagall", "long-branch-madr", "long-branch-oss", "long-branch-sol", "long-branch-yr", "long-legged", "longa", "longleftarrow", "longleftrightarrow", "longmapsto", "longrightarrow", "lonsum", "loo", "look", "loon", "loop", "looparrowleft", "looparrowright", "looped", "loot", "lop", "lopar", "lopf", "loplus", "loq", "lorraine", "lorry", "los", "lossless", "lot", "lotimes", "lotion", "lotus", "loudly", "loudspeaker", "loure", "love", "low", "low-9", "low-falling", "low-mid", "low-reversed-9", "lowast", "lowbar", "lower", "lowered", "lowerleftarrow", "lowerrightarrow", "lox", "loz", "lozenge", "lozf", "lpar", "lparlt", "lrarr", "lrcorner", "lrhar", "lrhard", "lrm", "lrtri", "ls", "lsaquo", "lscr", "lsh", "lsim", "lsime", "lsimg", "lsqb", "lsquo", "lsquor", "lstrok", "lt", "ltcc", "ltcir", "ltdot", "lthree", "ltimes", "ltlarr", "ltquest", "ltri", "ltrie", "ltrif", "ltrpar", "lu", "lu2", "lu3", "luaep", "lub", "lue", "lugal", "luggage", "luh", "luhur", "luis", "lul", "lum", "lunate", "lungsi", "luo", "luop", "luot", "luox", "lup", "lur", "lurdshar", "luruhar", "lurx", "lus", "lut", "lux", "lv", "lwa", "lwaa", "lwe", "lwi", "lwii", "lwo", "lwoo", "lx", "ly", "lya", "lycian", "lydian", "lygisma", "lying", "lyit", "lyp", "lyr", "lyrx", "lyt", "lyx", "lyy", "lz", "m001", "m001a", "m001b", "m002", "m003", "m003a", "m004", "m005", "m006", "m007", "m008", "m009", "m010", "m010a", "m011", "m012", "m012a", "m012b", "m012c", "m012d", "m012e", "m012f", "m012g", "m012h", "m013", "m014", "m015", "m015a", "m016", "m016a", "m017", "m017a", "m018", "m019", "m020", "m021", "m022", "m022a", "m023", "m024", "m024a", "m025", "m026", "m027", "m028", "m028a", "m029", "m030", "m031", "m031a", "m032", "m033", "m033a", "m033b", "m034", "m035", "m036", "m037", "m038", "m039", "m040", "m040a", "m041", "m042", "m043", "m044", "m045", "m046", "m047", "m048", "m049", "m050", "m051", "m052", "m053", "m054", "m055", "m056", "m057", "m058", "m059", "m060", "m061", "m062", "m063", "m064", "m065", "m066", "m067", "m068", "m069", "m070", "m071", "m072", "m073", "m074", "m075", "m076", "m077", "m078", "m079", "m080", "m081", "m082", "m083", "m084", "m085", "m086", "m087", "m088", "m089", "m090", "m091", "m092", "m093", "m094", "m095", "m096", "m097", "m098", "m099", "m100", "m101", "m102", "m103", "m104", "m105", "m106", "m107", "m108", "m109", "m110", "m111", "m112", "m113", "m114", "m115", "m116", "m117", "m118", "m119", "m120", "m121", "m122", "m123", "m124", "m125", "m126", "m127", "m128", "m129", "m130", "m131", "m132", "m133", "m134", "m135", "m136", "m137", "m138", "m139", "m140", "m141", "m142", "m143", "m144", "m145", "m146", "m147", "m148", "m149", "m150", "m151", "m152", "m153", "m154", "m155", "m156", "m157", "m158", "m159", "m160", "m161", "m162", "m163", "m164", "m165", "m166", "m167", "m168", "m169", "m170", "m171", "m172", "m173", "m174", "m175", "m176", "m177", "m178", "m179", "m180", "m181", "m182", "m183", "m184", "m185", "m186", "m187", "m188", "m189", "m190", "m191", "m192", "m193", "m194", "m195", "m196", "m197", "ma", "ma-1", "ma-2", "ma-3", "ma-4", "ma-5", "ma-6", "ma-7", "ma2", "maa", "maai", "maayyaa", "machine", "macr", "macron", "macron-acute", "macron-breve", "macron-grave", "madda", "maddah", "madu", "madya", "mae", "maekeup", "maelee", "maem", "maemba", "maembgbiee", "maemgbiee", "maemkpen", "maemveux", "maenjet", "maenyi", "maesi", "mage", "magnet", "magnifying", "mah", "mahaapraana", "mahajani", "mahapakh", "mahaprana", "mahha", "mahjong", "mai", "maiden", "maikuro", "mailbox", "maimalai", "maimuan", "mairu", "maitaikhu", "maiyamok", "maize", "makasar", "maksura", "malakon", "malayalam", "male", "maleeri", "malt", "maltese", "man", "manacles", "manat", "manchu", "mandaic", "mandailing", "mandarin", "mangalam", "mango", "manichaean", "manna", "mannaz", "mans", "mansuae", "mansyon", "mantelpiece", "manual", "mao", "map", "mapiq", "maple", "mapsto", "mapstodown", "mapstoleft", "mapstoup", "maq", "maqaf", "mar", "marbuta", "marcasite", "marcato", "marcato-staccato", "march", "marchen", "mare", "mark", "mark-1", "mark-2", "mark-3", "mark-4", "marker", "marks", "marratan", "marriage", "marrying", "martial", "martyria", "maruku", "marwari", "mary", "masaram", "masculine", "mash", "mash2", "mashfaat", "mask", "masora", "massage", "massing", "masu", "mat", "mate", "materials", "mathematical", "matrix", "mattock", "mau", "max", "maxima", "maximize", "may", "mayan", "mayanna", "mayek", "mb", "mb2", "mb3", "mb4", "mba", "mbaa", "mbaaket", "mbaarae", "mbanyi", "mbaq", "mbe", "mbee", "mbeekeet", "mben", "mberae", "mbeum", "mbeuri", "mbeux", "mbi", "mbirieen", "mbit", "mbo", "mboo", "mbu", "mbuae", "mbuaem", "mbue", "mbuo", "mbuoq", "mbuu", "mc", "mchan", "mchu", "mcomma", "mcy", "md", "mdash", "mddot", "mdun", "me", "me-1", "me-2", "me-ma", "measure", "measured", "measuredangle", "meat", "mechanical", "med", "medal", "medefaidrin", "medial", "medical", "medicine", "medieval", "medium", "mediumspace", "mee", "meeee", "meej", "meem", "meemu", "meet", "meetei", "meetoru", "mega", "megali", "megaphone", "megaton", "meizi", "melik", "mellintrf", "melodic", "melon", "mem", "mem-qoph", "member", "membership", "memo", "men", "mende", "mendut", "menoe", "menorah", "mens", "mercury", "merge", "meri", "meridians", "merkha", "meroitic", "merperson", "mes", "mesh", "mesi", "meso", "messenian", "meta", "metal", "meteg", "metek", "metobelus", "metretes", "metria", "metrical", "metro", "meun", "meunjomndeuq", "meuq", "meut", "mex", "mezzo", "mfaa", "mfeuae", "mfeuq", "mfeut", "mfiee", "mfiyaq", "mfo", "mfon", "mfr", "mg", "mga", "mgap", "mgat", "mgax", "mgba", "mgbasa", "mgbasaq", "mgbe", "mgbee", "mgben", "mgbeun", "mgbi", "mgbiee", "mgbo", "mgbofum", "mgboo", "mgbu", "mge", "mgep", "mgex", "mgie", "mgiex", "mgo", "mgop", "mgot", "mgox", "mgu", "mguo", "mguop", "mguox", "mgup", "mgur", "mgurx", "mgut", "mgux", "mh", "mha", "mho", "mhz", "mi", "mi-1", "mi-2", "mi-3", "mi-4", "mi-5", "mi-6", "mi-7", "miao", "micro", "microbe", "microphone", "microscope", "mid", "mid-level", "midast", "midcir", "middle", "middle-welsh", "middot", "midline", "mie", "miee", "miep", "mieum", "mieum-chieuch", "mieum-cieuc", "mieum-hieuh", "mieum-kiyeok", "mieum-nieun", "mieum-pansios", "mieum-pieup", "mieum-pieup-sios", "mieum-rieul", "mieum-sios", "mieum-ssangnieun", "mieum-ssangsios", "mieum-tikeut", "miex", "mig", "mii", "miim", "miin", "mikri", "mikron", "mikuron", "mil", "military", "milk", "milky", "mill", "mille", "millet", "millions", "mim", "mime", "min", "minibus", "minidisc", "minima", "minimize", "minister", "minus", "minus-or-plus", "minusb", "minusd", "minusdu", "minusplus", "miny", "mip", "mired", "miri", "miribaaru", "misra", "mit", "mix", "mkparaq", "ml", "mla", "mlcp", "mldr", "mm", "mnas", "mnplus", "mnyam", "mo", "mo-1", "mo-2", "mo-3", "mo-4", "mo-5", "mo-6", "moa", "mobile", "mode", "model", "models", "modem", "modern", "modesty", "modi", "modifier", "modifier-10", "modifier-11", "modifier-12", "modifier-13", "modifier-14", "modifier-15", "modifier-16", "modifier-2", "modifier-3", "modifier-4", "modifier-5", "modifier-6", "modifier-7", "modifier-8", "modifier-9", "modulo", "mohammad", "mol", "mon", "money", "money-mouth", "mongkeuaeq", "mongolian", "moni", "monkey", "monocle", "monocular", "monofonias", "monogram", "monogrammos", "monograph", "monorail", "monospace", "monostable", "monster", "month", "montieen", "moo", "mood", "moomeut", "moompuq", "moon", "moose-cree", "mop", "mopf", "morning", "morphological", "mortar", "mortuum", "mosque", "mosquito", "mot", "mother", "motor", "motorcycle", "motorized", "motorway", "mound", "mount", "mountain", "mountains", "mouse", "mouth", "move", "moved", "movement", "movement-diagonal", "movement-floorplane", "movement-hinge", "movement-wallplane", "moves", "movie", "mox", "moyai", "mp", "mpa", "mr", "mro", "ms", "mscr", "mstpos", "mtavruli", "mu", "mu-1", "mu-2", "mu-3", "mu-4", "mu-gaahlaa", "muae", "muan", "muas", "mucaad", "much", "mue", "muen", "mug", "mugs", "muin", "mukha", "mukkuruni", "mukphreng", "multani", "multi", "multimap", "multiocular", "multiple", "multiplication", "multiset", "mum", "mumap", "mun", "munah", "munsub", "muo", "muomae", "muop", "muot", "muox", "muoy", "mup", "muqdam", "mur", "murda", "mure", "murgu2", "murx", "mus", "mush", "mush3", "mushroom", "music", "musical", "mut", "muthaliya", "muurdhaja", "muusikatoan", "muuvuzhakku", "mux", "mv", "mveuaengam", "mvi", "mvop", "mw", "mwa", "mwaa", "mwe", "mwee", "mwi", "mwii", "mwo", "mwoo", "my", "mya", "myanmar", "myp", "myslite", "myt", "myx", "n-ary", "n-cree", "n-mu-mo-1", "n-mu-mo-2", "n001", "n002", "n003", "n004", "n005", "n006", "n007", "n008", "n009", "n010", "n011", "n012", "n013", "n014", "n015", "n016", "n017", "n018", "n018a", "n018b", "n019", "n020", "n021", "n022", "n023", "n024", "n025", "n025a", "n026", "n027", "n028", "n029", "n030", "n031", "n032", "n033", "n033a", "n034", "n034a", "n035", "n035a", "n036", "n037", "n037a", "n038", "n039", "n040", "n041", "n042", "na", "na-1", "na-2", "na-3", "na-4", "na-5", "na-6", "na-7", "na-8", "na-9", "na2", "na4", "naa", "naai", "naaksikyaya", "naasikyaya", "nabataean", "nabla", "nacute", "nae", "nag", "naga", "nagar", "nagri", "nah", "nail", "naira", "nam", "nam2", "name", "nan", "nana", "nand", "nandinagari", "nangmontho", "nano", "nansanaq", "naos", "nap", "napos", "napprox", "naq", "nar", "narrow", "nasal", "nasalization", "nashi", "naskapi", "national", "natur", "natural", "naturals", "nau", "naud", "naudiz", "nauseated", "nauths", "nax", "naxian", "nay", "nayanna", "nazar", "nba", "nbap", "nbat", "nbax", "nbi", "nbie", "nbiep", "nbiex", "nbip", "nbit", "nbix", "nbo", "nbop", "nbot", "nbox", "nbsp", "nbu", "nbup", "nbur", "nburx", "nbut", "nbux", "nby", "nbyp", "nbyr", "nbyrx", "nbyt", "nbyx", "nca", "ncap", "ncaron", "ncedil", "nchau", "ncong", "ncup", "ncy", "nd", "nda", "ndaa", "ndaanggeuaet", "ndam", "ndap", "ndash", "ndat", "ndax", "nde", "ndee", "ndep", "ndeuaeree", "ndeut", "ndeux", "ndex", "ndi", "ndiaq", "ndida", "ndie", "ndiex", "ndip", "ndiq", "ndit", "ndix", "ndo", "ndole", "ndombu", "ndon", "ndoo", "ndop", "ndot", "ndox", "ndu", "ndun", "ndup", "ndur", "ndurx", "ndut", "ndux", "ne", "ne-1", "ne-2", "ne-3", "ne-4", "ne-5", "ne-6", "ne-ko", "nearhk", "nearr", "nearrow", "nebenstimme", "neck", "necktie", "nee", "negated", "negation", "negative", "negativemediumspace", "negativethickspace", "negativethinspace", "negativeverythinspace", "neither", "nel", "nen", "nenano", "nenoe", "neo", "nep", "neptune", "nequdaa", "nequiv", "nerd", "nesear", "nessus", "nested", "nestedgreatergreater", "nestedlessless", "net", "networked", "neuter", "neutral", "new", "newa", "newline", "newspaper", "nex", "nexist", "nexists", "next", "nf", "nfr", "ng", "nga", "ngaa", "ngaai", "ngah", "ngai", "ngan", "ngangu", "ngap", "ngaq", "ngas", "ngat", "ngax", "nge", "ngeadal", "ngen", "ngep", "ngeq", "ngeureut", "ngex", "ngg", "ngga", "nggaa", "nggaam", "nggaamae", "nggap", "ngge", "nggee", "nggeeee", "nggeet", "nggen", "nggeu", "nggeuae", "nggeuaet", "nggeux", "nggi", "nggo", "nggoo", "nggu", "nggua", "ngguaen", "ngguaeshae", "nggueet", "nggum", "ngguom", "ngguon", "ngguoq", "nggup", "nggurae", "nggwaen", "ngha", "ngi", "ngie", "ngiep", "ngiex", "ngii", "ngka", "ngkaami", "ngkap", "ngkaq", "ngkeuaem", "ngkeuaeq", "ngkeuri", "ngkeux", "ngkiee", "ngkindi", "ngkue", "ngkuenzeum", "ngkum", "ngkun", "ngkup", "ngkwaen", "ngkyee", "ngo", "ngoeh", "ngom", "ngon", "ngoo", "ngop", "ngoq", "ngot", "ngou", "ngox", "ngsim", "ngt", "ngtr", "ngu", "nguae", "nguaet", "nguan", "ngue", "ngun", "nguo", "nguot", "nguox", "ngve", "ngye", "nh", "nha", "nharr", "nhja", "nhpar", "nhue", "ni", "ni-1", "ni-2", "ni-3", "ni-4", "ni-5", "ni-6", "ni-7", "ni-te", "ni2", "nia", "nib", "nie", "niep", "nieun", "nieun-chieuch", "nieun-cieuc", "nieun-hieuh", "nieun-kiyeok", "nieun-pansios", "nieun-pieup", "nieun-rieul", "nieun-sios", "nieun-thieuth", "nieun-tikeut", "niex", "niggahita", "night", "nigidaesh", "nigidamin", "nihshvasa", "nii", "nika", "nikahit", "nikhahit", "nikolsburg", "nim", "nin", "nin9", "ninda2", "nine", "nine-thirty", "nineteen", "ninety", "ninth", "nion", "nip", "nirugu", "nis", "nisag", "nisd", "nit", "nitre", "niv", "nix", "nj", "nja", "njaa", "njaem", "njaemli", "njam", "njap", "njaq", "njcy", "nje", "njee", "njeeee", "njeuaem", "njeuaena", "njeut", "njeux", "nji", "njie", "njiee", "njiep", "njiet", "njiex", "njip", "njit", "njix", "njo", "njoo", "njop", "njot", "njox", "nju", "njuae", "njueq", "njuo", "njuox", "njup", "njuqa", "njur", "njurx", "njux", "njy", "njyp", "njyr", "njyrx", "njyt", "njyx", "nka", "nkaarae", "nkau", "nkindi", "nko", "nkom", "nl001", "nl002", "nl003", "nl004", "nl005", "nl005a", "nl006", "nl007", "nl008", "nl009", "nl010", "nl011", "nl012", "nl013", "nl014", "nl015", "nl016", "nl017", "nl017a", "nl018", "nl019", "nl020", "nlarr", "nlau", "nldr", "nle", "nleftarrow", "nleftrightarrow", "nleq", "nless", "nlsim", "nlt", "nltri", "nltrie", "nm", "nmid", "nn", "nna", "nnaa", "nnbsp", "nne", "nng", "nnga", "nngaa", "nngi", "nngii", "nngo", "nngoo", "nnha", "nnna", "nno", "nnya", "no", "no-1", "no-2", "no-3", "no-4", "no-5", "no-break", "noa", "nobreak", "node", "nokhuk", "nominal", "nomisma", "non", "non-breaking", "non-joiner", "non-potable", "nonbreakingspace", "nonforking", "noo", "noon", "noonu", "nop", "nopf", "nor", "nordic", "normal", "north", "northeast-pointing", "northern", "northwest", "nose", "not", "notation", "notch", "notched", "notcongruent", "notcupcap", "notdoubleverticalbar", "note", "notebook", "notehead", "notelement", "notequal", "notes", "notexists", "notgreater", "notgreaterequal", "notgreaterless", "notgreatertilde", "notin", "notinva", "notinvb", "notinvc", "notlefttriangle", "notlefttriangleequal", "notless", "notlessequal", "notlessgreater", "notlesstilde", "notni", "notniva", "notnivb", "notnivc", "notprecedes", "notprecedesslantequal", "notreverseelement", "notrighttriangle", "notrighttriangleequal", "notsquaresubsetequal", "notsquaresupersetequal", "notsubsetequal", "notsucceeds", "notsucceedsslantequal", "notsupersetequal", "nottilde", "nottildeequal", "nottildefullequal", "nottildetilde", "notto", "notverticalbar", "november", "novile", "now", "nowc", "nox", "noy", "npa", "npar", "nparallel", "npla", "npolint", "npr", "nprcue", "nprec", "nqa", "nqig", "nra", "nrap", "nrarr", "nrat", "nrax", "nre", "nrep", "nres", "nret", "nrex", "nrightarrow", "nro", "nrop", "nrox", "nrtri", "nrtrie", "nru", "nrua", "nrup", "nrur", "nrurx", "nrut", "nrux", "nry", "nryp", "nryr", "nryrx", "nryt", "nryx", "ns", "nsa", "nsc", "nsccue", "nscr", "nsen", "nseuaen", "nsha", "nshaq", "nshee", "nshiee", "nshortmid", "nshortparallel", "nshue", "nshuet", "nshuop", "nshut", "nsiee", "nsieep", "nsieet", "nsim", "nsime", "nsimeq", "nsmid", "nsom", "nspar", "nsqsube", "nsqsupe", "nsub", "nsube", "nsubseteq", "nsucc", "nsum", "nsun", "nsuot", "nsup", "nsupe", "nsupseteq", "nta", "ntaa", "ntap", "ntee", "nten", "nteum", "nteungba", "ntgl", "nthau", "ntiee", "ntilde", "ntlg", "ntog", "ntoqpen", "ntriangleleft", "ntrianglelefteq", "ntriangleright", "ntrianglerighteq", "ntsa", "ntsau", "ntu", "ntuj", "ntum", "ntuu", "ntxa", "ntxiv", "nu", "nu-1", "nu-2", "nu-3", "nu001", "nu002", "nu003", "nu004", "nu005", "nu006", "nu007", "nu008", "nu009", "nu010", "nu010a", "nu011", "nu011a", "nu012", "nu013", "nu014", "nu015", "nu016", "nu017", "nu018", "nu018a", "nu019", "nu020", "nu021", "nu022", "nu022a", "nu11", "nuae", "nubian", "nue", "nueng", "nukta", "null", "num", "number", "numbers", "numeral", "numerator", "numeric", "numero", "numsp", "nun", "nunavik", "nunavut", "nung", "nunuz", "nuo", "nuop", "nuox", "nup", "nur", "nurx", "nushu", "nut", "nutillu", "nuun", "nux", "nv", "nvdash", "nvharr", "nvinfin", "nvlarr", "nvrarr", "nw", "nwa", "nwaa", "nwarhk", "nwarr", "nwarrow", "nwe", "nwi", "nwii", "nwnear", "nwo", "nwoo", "ny", "nya", "nyaa", "nyaemae", "nyah", "nyaj", "nyam", "nyan", "nyca", "nyd", "nye", "nyee", "nyeh", "nyen", "nyet", "nyha", "nyi", "nyiakeng", "nyie", "nyiep", "nyiet", "nyiex", "nyin", "nyin-do", "nyip", "nyir", "nyis", "nyit", "nyix", "nyja", "nyo", "nyoa", "nyon", "nyoo", "nyop", "nyot", "nyox", "nyu", "nyue", "nyun", "nyuo", "nyuop", "nyuox", "nyup", "nyut", "nyux", "nywa", "nza", "nzap", "nzaq", "nzat", "nzax", "nze", "nzeum", "nzex", "nzi", "nzie", "nziep", "nziex", "nzip", "nzit", "nzix", "nzop", "nzox", "nzu", "nzun", "nzuo", "nzuox", "nzup", "nzuq", "nzur", "nzurx", "nzux", "nzy", "nzyp", "nzyr", "nzyrx", "nzyt", "nzyx", "o-1", "o-2", "o-3", "o-e", "o-eo", "o-o", "o-o-i", "o-u", "o-ya", "o-yae", "o-ye", "o-yeo", "o001", "o001a", "o002", "o003", "o004", "o005", "o005a", "o006", "o006a", "o006b", "o006c", "o006d", "o006e", "o006f", "o007", "o008", "o009", "o010", "o010a", "o010b", "o010c", "o011", "o012", "o013", "o014", "o015", "o016", "o017", "o018", "o019", "o019a", "o020", "o020a", "o021", "o022", "o023", "o024", "o024a", "o025", "o025a", "o026", "o027", "o028", "o029", "o029a", "o030", "o030a", "o031", "o032", "o033", "o033a", "o034", "o035", "o036", "o036a", "o036b", "o036c", "o036d", "o037", "o038", "o039", "o040", "o041", "o042", "o043", "o044", "o045", "o046", "o047", "o048", "o049", "o050", "o050a", "o050b", "o051", "oa", "oaboafili", "oacute", "oak", "oast", "oay", "ob", "obelos", "obelus", "object", "oblique", "obofili", "obol", "obols", "observer", "obstruction", "occlusion", "ocir", "ocirc", "oclock", "ocr", "octagon", "octagonal", "october", "octopus", "ocy", "odash", "odblac", "odd", "oden", "odiv", "odot", "odsold", "oe", "oee", "oek", "oelig", "oer", "oey", "of", "ofcir", "off", "office", "officer", "ofr", "og", "ogham", "ogon", "ogonek", "ograve", "ogre", "ogt", "oh", "ohbar", "ohm", "oi", "oil", "oin", "oint", "ojeon", "ojibway", "ok", "okara", "okto", "ol", "olarr", "olcir", "olcross", "old", "older", "ole", "oligon", "oline", "olive", "olt", "om", "omacr", "omalon", "omega", "omicron", "omid", "ominus", "omission", "on", "on-off", "onap", "oncoming", "one", "one-hundred-and-sixtieth", "one-line", "one-piece", "one-thirty", "one-way", "oneself", "ong", "onion", "onkar", "onn", "onsu", "onu", "oo", "ooboofili", "ooe", "ooh", "oomu", "oon", "oopf", "oou", "ooyanna", "ooze", "op", "opar", "open", "open-circuit-output", "open-headed", "open-o", "open-outlined", "open-p", "opencurlydoublequote", "opencurlyquote", "opening", "operator", "operp", "ophiuchus", "oplus", "oppose", "opposing", "opposition", "oppression", "optical", "option", "oq", "or", "orange", "orangutan", "orarr", "orchid", "ord", "order", "orderof", "ordf", "ordinal", "ordm", "ore", "ore-2", "origin", "original", "origof", "oriya", "orkhon", "ornament", "ornaments", "ornate", "oror", "orslope", "orthodox", "orthogonal", "orv", "os", "osage", "oscr", "oslash", "osmanya", "osol", "ot", "othal", "othalan", "other", "others", "otilde", "otimes", "otimesas", "ott", "ottava", "otter", "ottoman", "otu", "ou", "ouml", "ounce", "ounkia", "out", "outbox", "outer", "outline", "outlined", "ov", "oval", "ovbar", "over", "overbar", "overbrace", "overbracket", "overheated", "overlaid", "overlap", "overlapping", "overlay", "overline", "overlong", "overparenthesis", "override", "ow", "owl", "ox", "oxeia", "oxeiai", "oxia", "oy", "oyanna", "oyranisma", "oyster", "p001", "p001a", "p002", "p003", "p003a", "p004", "p005", "p006", "p007", "p008", "p009", "p010", "p011", "p2", "pa", "paa", "paa-pilla", "paai", "paam", "paarae", "paaram", "paasento", "paatu", "package", "packing", "pad", "pada", "paddle", "padma", "page", "pager", "pages", "pagoda", "pah", "pahawh", "pahlavi", "paintbrush", "paired", "pairthra", "paiyannoi", "pakpak", "palatal", "palatalization", "palatalized", "palaung", "palette", "pali", "pallas", "pallawa", "palm", "palms", "palmyrene", "palochka", "paluta", "pamaaeh", "pamada", "pameneng", "pamepet", "pamingkal", "pamphylian", "pamshae", "pamudpod", "pamungkah", "pan", "panaelaeng", "panam", "pancakes", "panda", "paneuleung", "pang", "panghulu", "pangkat", "pangkon", "panglayar", "panglong", "pangolat", "pangrangkep", "pangwisad", "panolong", "panongonan", "pansios", "pansios-kapyeounpieup", "pansios-pieup", "panti", "panyakra", "panyangga", "panyecek", "panyiku", "panyuku", "pao", "pap", "paper", "paperclip", "paperclips", "papyrus", "par", "para", "parachute", "paragraph", "paragraphos", "paragraphus", "parakalesma", "paraklitiki", "parallel", "parallelogram", "paraphrase", "parentheses", "parenthesis", "parenthesized", "pareren", "parestigmenon", "parichon", "park", "parrot", "parsim", "parsl", "part", "parthian", "partial", "partiald", "partially-recycled", "partnership", "party", "parum", "pasangan", "paseq", "pashae", "pashta", "passed", "passenger", "passimbang", "passive-pull-down-output", "passive-pull-up-output", "passport", "pasuq", "pat", "patah", "patak", "path", "pathakku", "pathamasat", "pattern", "pau", "pause", "paviyani", "paw", "pawn", "pax", "pay", "payanna", "payerok", "pazer", "pc", "pcy", "pd", "pe", "peace", "peach", "peacock", "peaks", "peanuts", "pear", "pedal", "pedestal", "pedestrian", "pedestrians", "pee", "peei", "peem", "peep", "peeshi", "peezi", "peh", "peheh", "peith", "pelaston", "pen", "pencil", "penetration", "pengkal", "penguin", "penihi", "pennant", "penny", "pensive", "pensu", "pentagon", "pentagram", "pentaseme", "pentathlon", "people", "peorth", "pepet", "pepper", "per", "percent", "percnt", "percussive", "perfecta", "perfectum", "performing", "period", "perispomeni", "permanent", "permic", "permil", "pernin", "perp", "perpendicular", "persevering", "persian", "person", "personal", "perspective", "pertenk", "pertho", "pes", "peseta", "pesh2", "peso", "pet", "petalled", "petasma", "petasti", "petastokoufisma", "petri", "peut", "peutae", "peux", "pf", "pfr", "pg", "ph", "pha", "phaa", "phaarkaa", "phab", "phags-pa", "phaistos", "pham", "phan", "phar", "pharyngeal", "phase-a", "phase-b", "phase-c", "phase-d", "phase-e", "phase-f", "phe", "phee", "phi", "phieuph", "phieuph-hieuh", "phieuph-pieup", "phieuph-sios", "phieuph-thieuth", "philippine", "philosophers", "phinthu", "phiv", "phmmat", "phnaek", "pho", "phoa", "phoenician", "pholus", "phone", "phones", "phrase", "phu", "phung", "phur", "phuthao", "phwa", "pi", "piano", "piasma", "piasutoru", "pick", "picket", "picture", "pie", "piece", "pieeq", "pieet", "piep", "piet", "pieup", "pieup-chieuch", "pieup-cieuc", "pieup-hieuh", "pieup-khieukh", "pieup-kiyeok", "pieup-mieum", "pieup-nieun", "pieup-phieuph", "pieup-rieul", "pieup-rieul-phieuph", "pieup-sios", "pieup-sios-cieuc", "pieup-sios-kiyeok", "pieup-sios-pieup", "pieup-sios-thieuth", "pieup-sios-tikeut", "pieup-ssangsios", "pieup-thieuth", "pieup-tikeut", "piex", "pig", "pii", "piko", "pikuru", "pilcrow", "pile", "pill", "pin", "pinarboras", "pinching", "pine", "pineapple", "ping", "pinwheel", "pip", "pipaemba", "pipaemgbiee", "piping", "pir2", "piracy", "pirieen", "pirig", "pisces", "piseleh", "pistol", "pit", "pitchfork", "piv", "piwr", "pix", "pizza", "pizzicato", "pla", "place", "placeholder", "plagios", "plak", "planck", "planckh", "plane", "planet", "plankv", "plastics", "plate", "playing", "pleading", "plethron", "plhau", "plophu", "plow", "plug", "pluk", "plum", "plumed", "plural", "plus", "plus-minus", "plusacir", "plusb", "pluscir", "plusdo", "plusdu", "pluse", "plusminus", "plusmn", "plussim", "plustwo", "pluta", "pluto", "pm", "pneumata", "po", "poa", "pocket", "podatus", "poetic", "poetry", "poincareplane", "point", "pointed", "pointer", "pointing", "pointint", "pointo", "points", "pokoji", "pokrytie", "pole", "poli", "police", "polish", "polo", "pommee", "pon", "pondo", "poo", "poodle", "poon", "pop", "popcorn", "popf", "popper", "popping", "porrectus", "portable", "poseidon", "position", "positions", "possession", "post", "postal", "postbox", "postposition", "pot", "potable", "potato", "pouch", "poultry", "pound", "pouting", "powder", "powdered", "power", "powers", "pox", "poy", "ppa", "ppm", "ppv", "pr", "pram", "pram-bei", "pram-buon", "pram-muoy", "pram-pii", "prap", "prayer", "prcue", "pre", "prec", "precapprox", "preccurlyeq", "precede", "preceded", "precedes", "precedesequal", "precedesslantequal", "precedestilde", "preceding", "preceq", "precipitate", "precnapprox", "precneqq", "precnsim", "precsim", "preface", "prefixed", "pregnant", "prenkha", "preponderance", "prescription", "present", "presentation", "pressed", "pretzel", "previous", "prime", "primes", "prince", "princess", "print", "printer", "prints", "prishthamatra", "private", "prnap", "prne", "prnsim", "probing", "prod", "product", "profalar", "profline", "profound", "profsurf", "progress", "prohibited", "projection", "projective", "projector", "prolatione", "prolonged", "proof", "prop", "propeller", "property", "proportion", "proportional", "propto", "proserpina", "prosgegrammeni", "protos", "protovarys", "prove", "prsim", "prurel", "ps", "psalter", "pscr", "psi", "psifistolygisma", "psifiston", "psifistoparakalesma", "psifistosynagma", "psili", "psilon", "pte", "pthaha", "pu", "pu2", "puachue", "puae", "puaq", "pub", "public", "puck", "pue", "puffed", "pum", "pump", "puncsp", "punctuation", "punctus", "pung", "pungaam", "puo", "puop", "puox", "pup", "puq", "pur", "purify", "purity", "purnama", "purple", "purse", "purx", "pushing", "pushpika", "pushpin", "put", "putrefaction", "puut", "pux", "puzzle", "pv", "pw", "pwa", "pwaa", "pwe", "pwee", "pwi", "pwii", "pwo", "pwoo", "pwoy", "py", "pyp", "pyr", "pyrx", "pyt", "pyx", "pz", "q001", "q002", "q003", "q004", "q005", "q006", "q007", "qa", "qaa", "qaaf", "qaafu", "qaai", "qadma", "qaf", "qai", "qairthra", "qala", "qamats", "qaph", "qaq", "qar", "qarney", "qatan", "qau", "qay", "qe", "qee", "qetana", "qfr", "qga", "qha", "qhaa", "qhau", "qhe", "qhee", "qhi", "qho", "qhoph", "qhu", "qhwa", "qhwaa", "qhwe", "qhwee", "qhwi", "qi", "qie", "qiep", "qiet", "qiex", "qif", "qii", "qint", "qip", "qit", "qitsa", "qix", "qn", "qo", "qoa", "qof", "qoo", "qop", "qopa", "qopf", "qoph", "qot", "qox", "qp", "qprime", "qscr", "qu", "qua", "quad", "quadcolon", "quadrant", "quadruple", "quantity", "quarter", "quarters", "quaternion", "quaternions", "quatint", "qubuts", "que", "queen", "quest", "questeq", "question", "questioned", "quf", "qui", "quick", "quill", "quilt", "quinarius", "quincunx", "quindicesima", "quintessence", "quintile", "quk", "quo", "quop", "quot", "quotation", "quote", "quox", "qup", "qur", "qurx", "qushshaya", "qut", "quu", "quuv", "quv", "qux", "qwa", "qwaa", "qwe", "qwee", "qwi", "qy", "qya", "qyaa", "qye", "qyee", "qyi", "qyo", "qyp", "qyr", "qyrx", "qyt", "qyu", "qyx", "r-cree", "r001", "r002", "r002a", "r003", "r003a", "r003b", "r004", "r005", "r006", "r007", "r008", "r009", "r010", "r010a", "r011", "r012", "r013", "r014", "r015", "r016", "r016a", "r017", "r018", "r019", "r020", "r021", "r022", "r023", "r024", "r025", "r026", "r027", "r028", "r029", "ra", "ra-1", "ra-2", "ra-3", "ra-4", "ra-kara", "ra2", "ra3", "raa", "raai", "raarr", "rab", "rabbit", "raccoon", "racing", "racquet", "racute", "rad", "radi", "radic", "radical", "radio", "radioactive", "rae", "raem", "raemptyv", "rafe", "rah", "rahmatullah", "rai", "raida", "raido", "rail", "railway", "rain", "rainbow", "raised", "raising", "rakhang", "ram", "rambat", "rams", "ran", "rana", "rang", "rangd", "range", "rangle", "rap", "rapisma", "raq", "raquo", "rarr", "rarrap", "rarrb", "rarrbfs", "rarrc", "rarrfs", "rarrhk", "rarrlp", "rarrpl", "rarrsim", "rarrtl", "rarrw", "rasha", "rasoul", "raswadi", "rat", "rata", "ratail", "ratha", "ratio", "rationals", "rau", "rax", "ray", "rayanna", "rays", "razor", "rbarr", "rbasa", "rbbrk", "rbrace", "rbrack", "rbrke", "rbrksld", "rbrkslu", "rcaron", "rcedil", "rceil", "rcub", "rcy", "rdca", "rdel", "rdldhar", "rdo", "rdquo", "rdquor", "rdsh", "re", "re-1", "re-2", "re-3", "re-4", "reach", "reahmuk", "real", "realgar", "realgar-2", "realine", "realpart", "reals", "receipt", "receiver", "receptive", "recitative", "record", "recorder", "recording", "recreational", "rect", "rectangle", "rectangular", "rectilinear", "recycled", "recycling", "red", "reduplication", "ree", "reference", "reformed", "reg", "regia", "regia-2", "regional", "registered", "regulus", "regulus-2", "regulus-3", "regulus-4", "reh", "rei", "reid", "reiwa", "rejang", "relaa", "relation", "relational", "relaxed", "release", "relieved", "religion", "remedy", "reminder", "remu", "ren", "rentogen", "rep", "repa", "repeat", "repeated", "repetition", "reph", "repha", "replacement", "represent", "rerekan", "rerenggan", "resh", "resh-ayin", "resh-ayin-daleth", "residence", "resistance", "resolution", "resource", "response", "rest", "restricted", "restroom", "resupinus", "retort", "retreat", "retroflex", "return", "reu", "reux", "reverse", "reversed", "reversed-schwa", "reverseelement", "reverseequilibrium", "reverseupequilibrium", "revia", "revma", "revolution", "revolving", "rex", "rfisht", "rfloor", "rfr", "rgya", "rgyan", "rgyings", "rh", "rha", "rhar", "rhard", "rharu", "rharul", "rhinoceros", "rho", "rhotic", "rhov", "ri", "ri-1", "ri-2", "ri-3", "ri-4", "ri-5", "ri-6", "ri-7", "rial", "ribbon", "rice", "ricem", "rickshaw", "riee", "riel", "rieul", "rieul-cieuc", "rieul-hieuh", "rieul-kapyeounpieup", "rieul-khieukh", "rieul-kiyeok", "rieul-kiyeok-hieuh", "rieul-kiyeok-sios", "rieul-mieum", "rieul-mieum-hieuh", "rieul-mieum-kiyeok", "rieul-mieum-sios", "rieul-nieun", "rieul-pansios", "rieul-phieuph", "rieul-pieup", "rieul-pieup-hieuh", "rieul-pieup-phieuph", "rieul-pieup-sios", "rieul-pieup-tikeut", "rieul-sios", "rieul-ssangkiyeok", "rieul-ssangpieup", "rieul-ssangsios", "rieul-ssangtikeut", "rieul-thieuth", "rieul-tikeut", "rieul-tikeut-hieuh", "rieul-yeorinhieuh", "rieul-yeorinhieuh-hieuh", "rieul-yesieung", "rifle", "right", "right-facing", "right-hand", "right-handed", "right-lighted", "right-pointing", "right-shaded", "right-shadowed", "right-side", "right-to-left", "rightanglebracket", "rightarrow", "rightarrowbar", "rightarrowleftarrow", "rightarrowtail", "rightceiling", "rightdoublebracket", "rightdownteevector", "rightdownvector", "rightdownvectorbar", "rightfloor", "righthand", "rightharpoondown", "rightharpoonup", "rightleftarrows", "rightleftharpoons", "rightrightarrows", "rightsquigarrow", "righttee", "rightteearrow", "rightteevector", "rightthreetimes", "righttriangle", "righttrianglebar", "righttriangleequal", "rightupdownvector", "rightupteevector", "rightupvector", "rightupvectorbar", "rightvector", "rightvectorbar", "rightwards", "rigvedic", "rii", "rikrik", "rim", "rimgba", "rin", "rinforzando", "ring", "ringed", "ringing", "rings", "rip", "ripple", "rira", "rish", "rising", "risingdotseq", "ritsi", "rittoru", "ritual", "river", "rje", "rjes", "rlarr", "rlhar", "rlm", "rmoust", "rmoustache", "rmt", "rnam", "rnmid", "rnoon", "rnying", "ro", "ro-1", "ro-2", "ro-3", "ro-4", "ro-5", "ro-6", "ro2", "roa", "roang", "roar", "roarr", "roasted", "robat", "robot", "robrk", "roc", "rock", "rocket", "rod", "rog", "rohingya", "roll", "rolled-up", "roller", "rolling", "rom", "roman", "romanian", "roo", "roof", "rook", "room", "rooster", "root", "rop", "ropar", "ropf", "roplus", "rose", "rosette", "rosh", "rot", "rotated", "rotation", "rotation-floorplane", "rotation-wallplane", "rotations", "rotimes", "rotunda", "round", "round-tipped", "rounded", "roundimplies", "rowboat", "rox", "rpar", "rpargt", "rppolint", "rr", "rra", "rrarr", "rrax", "rre", "rreh", "rrep", "rret", "rrex", "rrightarrow", "rro", "rrop", "rrot", "rrox", "rrra", "rru", "rruo", "rruox", "rrup", "rrur", "rrurx", "rrut", "rrux", "rry", "rryp", "rryr", "rryrx", "rryt", "rryx", "rsaquo", "rscr", "rsh", "rsqb", "rsquo", "rsquor", "rtags", "rte", "rthang", "rthree", "rtimes", "rtri", "rtrie", "rtrif", "rtriltri", "ru", "ru-1", "ru-2", "ru-3", "ru-4", "ru-5", "ru-6", "rua", "rub", "ruble", "rudimenta", "rue", "rugby", "ruis", "rukkakha", "rulai", "rule", "rule-delayed", "ruledelayed", "ruler", "ruluhar", "rum", "rumai", "rumi", "run", "runic", "runner", "running", "runout", "ruo", "ruop", "ruox", "rup", "rupee", "rupii", "rur", "rurx", "rusi", "russian", "rut", "ruuburu", "rux", "rwa", "rwaa", "rwaha", "rwe", "rwee", "rwi", "rwii", "rwo", "rwoo", "rx", "ry", "rya", "ryp", "ryr", "ryrx", "ryt", "ryx", "ryy", "s-shaped", "s-w", "s001", "s002", "s002a", "s003", "s004", "s005", "s006", "s006a", "s007", "s008", "s009", "s010", "s011", "s012", "s013", "s014", "s014a", "s014b", "s015", "s016", "s017", "s017a", "s018", "s019", "s020", "s021", "s022", "s023", "s024", "s025", "s026", "s026a", "s026b", "s027", "s028", "s029", "s030", "s031", "s032", "s033", "s034", "s035", "s035a", "s036", "s037", "s038", "s039", "s040", "s041", "s042", "s043", "s044", "s045", "s046", "sa", "sa-1", "sa-2", "sa-3", "sa-4", "sa-5", "sa-6", "sa-7", "sa-8", "sa-i", "saa", "saadhu", "saai", "sacrificial", "sacute", "sad", "sade", "sadhe", "safety", "safha", "sag", "saga", "sagittarius", "sah", "saikuru", "sail", "sailboat", "sajdah", "sake", "sakeuae", "sakha", "sakin", "sakot", "sakta", "sal", "sal-ammoniac", "sala", "salad", "salam", "salla", "sallallahou", "salt", "salt-2", "saltillo", "saltire", "sam", "samaritan", "samba", "samekh", "samka", "samphao", "sampi", "samvat", "samyok", "san", "sanah", "sand", "sandal", "sandhi", "sandwich", "sanga2", "sannya", "sans-serif", "sanskrit", "santiimu", "sanyaka", "sanyooga", "sap", "sapa", "saq", "sar", "sara", "sari", "sasak", "sash", "sat", "satanga", "satchel", "satellite", "satkaan", "satkaankuu", "saturn", "saucer", "sauil", "saurashtra", "sauropod", "savouring", "saw", "sawan", "sax", "saximata", "saxophone", "say", "sayanna", "sayisi", "sbquo", "sbrul", "sbub", "sc", "scales", "scan", "scandicus", "scap", "scarf", "scaron", "sccue", "sce", "scedil", "scepter", "schema", "scholar", "school", "schroeder", "schwa", "scirc", "scissors", "scnap", "scne", "scnsim", "scooter", "score", "scorpion", "scorpius", "scpolint", "screaming", "screen", "script", "scroll", "scruple", "scsim", "scwa", "scy", "sd", "sdong", "sdot", "sdotb", "sdote", "se", "se-1", "se-2", "se-3", "se-4", "se-5", "seagull", "seal", "searhk", "searr", "searrow", "seat", "sebatbeit", "secant", "second", "secret", "sect", "section", "sector", "sedna", "see", "see-no-evil", "seedling", "seen", "seenu", "seev", "segment", "segno", "segol", "seh", "seisma", "selector", "selector-1", "selector-10", "selector-100", "selector-101", "selector-102", "selector-103", "selector-104", "selector-105", "selector-106", "selector-107", "selector-108", "selector-109", "selector-11", "selector-110", "selector-111", "selector-112", "selector-113", "selector-114", "selector-115", "selector-116", "selector-117", "selector-118", "selector-119", "selector-12", "selector-120", "selector-121", "selector-122", "selector-123", "selector-124", "selector-125", "selector-126", "selector-127", "selector-128", "selector-129", "selector-13", "selector-130", "selector-131", "selector-132", "selector-133", "selector-134", "selector-135", "selector-136", "selector-137", "selector-138", "selector-139", "selector-14", "selector-140", "selector-141", "selector-142", "selector-143", "selector-144", "selector-145", "selector-146", "selector-147", "selector-148", "selector-149", "selector-15", "selector-150", "selector-151", "selector-152", "selector-153", "selector-154", "selector-155", "selector-156", "selector-157", "selector-158", "selector-159", "selector-16", "selector-160", "selector-161", "selector-162", "selector-163", "selector-164", "selector-165", "selector-166", "selector-167", "selector-168", "selector-169", "selector-17", "selector-170", "selector-171", "selector-172", "selector-173", "selector-174", "selector-175", "selector-176", "selector-177", "selector-178", "selector-179", "selector-18", "selector-180", "selector-181", "selector-182", "selector-183", "selector-184", "selector-185", "selector-186", "selector-187", "selector-188", "selector-189", "selector-19", "selector-190", "selector-191", "selector-192", "selector-193", "selector-194", "selector-195", "selector-196", "selector-197", "selector-198", "selector-199", "selector-2", "selector-20", "selector-200", "selector-201", "selector-202", "selector-203", "selector-204", "selector-205", "selector-206", "selector-207", "selector-208", "selector-209", "selector-21", "selector-210", "selector-211", "selector-212", "selector-213", "selector-214", "selector-215", "selector-216", "selector-217", "selector-218", "selector-219", "selector-22", "selector-220", "selector-221", "selector-222", "selector-223", "selector-224", "selector-225", "selector-226", "selector-227", "selector-228", "selector-229", "selector-23", "selector-230", "selector-231", "selector-232", "selector-233", "selector-234", "selector-235", "selector-236", "selector-237", "selector-238", "selector-239", "selector-24", "selector-240", "selector-241", "selector-242", "selector-243", "selector-244", "selector-245", "selector-246", "selector-247", "selector-248", "selector-249", "selector-25", "selector-250", "selector-251", "selector-252", "selector-253", "selector-254", "selector-255", "selector-256", "selector-26", "selector-27", "selector-28", "selector-29", "selector-3", "selector-30", "selector-31", "selector-32", "selector-33", "selector-34", "selector-35", "selector-36", "selector-37", "selector-38", "selector-39", "selector-4", "selector-40", "selector-41", "selector-42", "selector-43", "selector-44", "selector-45", "selector-46", "selector-47", "selector-48", "selector-49", "selector-5", "selector-50", "selector-51", "selector-52", "selector-53", "selector-54", "selector-55", "selector-56", "selector-57", "selector-58", "selector-59", "selector-6", "selector-60", "selector-61", "selector-62", "selector-63", "selector-64", "selector-65", "selector-66", "selector-67", "selector-68", "selector-69", "selector-7", "selector-70", "selector-71", "selector-72", "selector-73", "selector-74", "selector-75", "selector-76", "selector-77", "selector-78", "selector-79", "selector-8", "selector-80", "selector-81", "selector-82", "selector-83", "selector-84", "selector-85", "selector-86", "selector-87", "selector-88", "selector-89", "selector-9", "selector-90", "selector-91", "selector-92", "selector-93", "selector-94", "selector-95", "selector-96", "selector-97", "selector-98", "selector-99", "selena", "self", "selfie", "semi", "semi-voiced", "semibrevis", "semicircle", "semicircular", "semicolon", "semidirect", "semiminima", "semisextile", "semisoft", "semivowel", "semk", "semkath", "semuncia", "sentagon", "senti", "sento", "sep", "separated", "separator", "september", "septuple", "sequential", "serif", "serifs", "serious", "service", "sesame", "sesquiquadrate", "sestertius", "seswar", "set", "setfon", "setminus", "setmn", "seuaeq", "seunyam", "seux", "seven", "seven-thirty", "seventeen", "seventh", "seventy", "severance", "sex", "sext", "sextans", "sextile", "sextula", "seyk", "sfr", "sfrown", "sg", "sgab", "sgaw", "sgor", "sgra", "sh", "sh2", "sha", "sha3", "sha6", "shaa", "shab6", "shad", "shadda", "shade", "shaded", "shadowed", "shaft", "shak", "shaker", "shaking", "shakti", "shallow", "shalshelet", "shamrock", "shan", "shang", "shap", "shape", "shapes", "shaping", "shar2", "shara", "sharada", "shark", "sharp", "sharu", "shat", "shaved", "shavian", "shaviyani", "shax", "shay", "shcha", "shchcy", "shchooi", "shcy", "she", "she-goat", "shee", "sheen", "sheenu", "sheep", "sheg9", "shei", "shelf", "shell", "shen", "shep", "sheqel", "shesh", "shesh2", "sheshig", "sheshlam", "shet", "sheuae", "sheuaeq", "sheuaeqtu", "sheuoq", "sheux", "sheva", "shex", "shha", "shi", "shid", "shield", "shift", "shii", "shiin", "shim", "shima", "shin", "shinda", "shinig", "shinto", "ship", "shiq", "shir", "shirae", "shirt", "shita", "shiyyaalaa", "sho", "shoa", "shocked", "shoe", "shoes", "shog", "shogi", "shoo", "shooi", "shoot", "shooting", "shop", "shopping", "shoq", "short", "short-twig-ar", "short-twig-bjarkan", "short-twig-hagall", "short-twig-madr", "short-twig-naud", "short-twig-oss", "short-twig-sol", "short-twig-tyr", "short-twig-yr", "shortcake", "shortdownarrow", "shortener", "shorthand", "shortleftarrow", "shortmid", "shortparallel", "shortrightarrow", "shorts", "shortuparrow", "shot", "shou", "shoulder", "shouldered", "shower", "shox", "shoy", "shri", "shrimp", "shrine", "shrug", "shta", "shtapic", "shu", "shu2", "shuangxi", "shubur", "shuenshuet", "shueq", "shuffle", "shul", "shum", "shuo", "shuop", "shuox", "shup", "shur", "shurx", "shut", "shuttlecock", "shux", "shv", "shwa", "shwaa", "shwe", "shwi", "shwii", "shwo", "shwoo", "shwoy", "shy", "shya", "shye", "shyp", "shyr", "shyrx", "shyt", "shyx", "si", "si-1", "si-2", "si-3", "si-4", "si-5", "si-6", "sia", "sibe", "sickle", "sickness", "siddham", "siddhi", "side", "sideways", "sie", "siee", "siep", "siex", "sig", "sig4", "sigel", "sigma", "sigmaf", "sigmav", "sign", "signs", "signwriting", "sii", "sik2", "siki", "sila3", "silhouette", "siliqua", "silk", "silver", "sim", "sima", "simalungun", "simansis", "simdot", "sime", "simeq", "simg", "simge", "similar", "siml", "simle", "simne", "simplified", "simplus", "simrarr", "simultaneous", "sin", "sindhi", "sine", "singaat", "single", "single-line", "sinhala", "sinking", "sinnyiiyhe", "sinological", "sinusoid", "sios", "sios-chieuch", "sios-cieuc", "sios-hieuh", "sios-ieung", "sios-kapyeounpieup", "sios-khieukh", "sios-kiyeok", "sios-mieum", "sios-nieun", "sios-pansios", "sios-phieuph", "sios-pieup", "sios-pieup-kiyeok", "sios-rieul", "sios-ssangsios", "sios-thieuth", "sios-tikeut", "sip", "siringu", "sisa", "sit", "site", "six", "six-line", "six-per-em", "six-string", "six-thirty", "sixteen", "sixteenth", "sixteenth-1", "sixteenth-2", "sixteenths", "sixth", "sixths", "sixty", "sixty-fourth", "sixty-fourths", "siyaq", "size", "sje", "sk", "skate", "skateboard", "skewed", "ski", "skier", "skin", "skliron", "skull", "skunk", "skw", "skwa", "slanted", "slarr", "slash", "slave", "slavonic", "sled", "sleep", "sleeping", "sleepy", "sleuth", "slice", "slider", "sliding", "slightly", "sling", "sloan", "slope", "sloping", "slot", "sloth", "slovo", "slow", "slowly", "slur", "small", "smallcircle", "smaller", "smallsetminus", "smash", "smashp", "smear", "smeparsl", "smid", "smile", "smiling", "smirking", "smoking", "smt", "smte", "sna", "snail", "snake", "snap", "sneezing", "snout", "snow", "snowboarder", "snowflake", "snowman", "so", "so-1", "so-2", "so-3", "so-4", "so-5", "so-6", "so-7", "soa", "soap", "soccer", "society", "socks", "sof", "soft", "softball", "softcy", "softness", "software-function", "sogdian", "sol", "solb", "solbar", "soldier", "solid", "solidus", "som", "sompeng", "son", "song", "sonjam", "soo", "soon", "sop", "sopf", "soq", "sora", "sos", "sot", "sou", "sounap", "sound", "source", "south", "south-slavey", "southern", "sow", "sowilo", "sox", "soy", "soyombo", "sp", "space", "spacing", "spade", "spades", "spadesuit", "spaghetti", "spar", "sparkle", "sparkler", "sparkles", "sparkling", "spathi", "speak-no-evil", "speaker", "speaking", "spear", "special", "speech", "speedboat", "spent", "spesmilo", "spherical", "spice", "spider", "spidery", "spine", "spiral", "spirant", "spirit", "spiritus", "splashing", "splayed", "split", "splitting", "spoked", "sponge", "spool", "spoon", "sports", "spot", "spouting", "spread", "sprechgesang", "spring", "springs", "sprout", "spungs", "spwa", "spy", "sqcap", "sqcup", "sqrt", "sqsub", "sqsube", "sqsubset", "sqsubseteq", "sqsup", "sqsupe", "sqsupset", "sqsupseteq", "squ", "square", "squared", "squareintersection", "squares", "squaresubset", "squaresubsetequal", "squaresuperset", "squaresupersetequal", "squareunion", "squarf", "squat", "squeeze", "squeezed", "squf", "squid", "squiggle", "squirrel", "squish", "sr", "srarr", "ss", "ssa", "ssaa", "ssangaraea", "ssangcieuc", "ssangcieuc-hieuh", "ssanghieuh", "ssangieung", "ssangkiyeok", "ssangmieum", "ssangnieun", "ssangpieup", "ssangrieul", "ssangrieul-khieukh", "ssangsios", "ssangsios-kiyeok", "ssangsios-pieup", "ssangsios-tikeut", "ssangthieuth", "ssangtikeut", "ssangtikeut-pieup", "ssangyeorinhieuh", "ssap", "ssat", "ssax", "sscr", "sse", "ssee", "ssep", "ssetmn", "ssex", "sshe", "sshin", "ssi", "ssie", "ssiep", "ssiex", "ssip", "ssit", "ssix", "ssmile", "sso", "ssop", "ssot", "ssox", "sstarf", "ssu", "ssup", "ssut", "ssuu", "ssux", "ssy", "ssyp", "ssyr", "ssyrx", "ssyt", "ssyx", "st", "st2", "staccatissimo", "staccato", "stacked", "stadium", "staff", "stallion", "stamped", "stan", "stand", "standard", "standing", "standstill", "star", "starf", "stark", "starred", "stars", "start", "starting", "staters", "station", "statue", "stauros", "stavros", "stavrou", "steam", "steaming", "steamy", "stem", "stenographic", "step", "stereo", "stethoscope", "stick", "sticking", "stigma", "stile", "still", "stimme", "stirrup", "stock", "stone", "stop", "stoppage", "stopping", "stopwatch", "store", "stove", "straggismata", "straif", "straight", "straightepsilon", "straightness", "straightphi", "strainer", "stratian", "stratum", "stratum-2", "straw", "strawberry", "streamer", "strength", "stress", "stretch", "stretched", "strictly", "stride", "strike", "strikethrough", "stripe", "strns", "stroke", "stroke-1", "stroke-10", "stroke-11", "stroke-2", "stroke-3", "stroke-4", "stroke-5", "stroke-6", "stroke-7", "stroke-8", "stroke-9", "strokes", "strong", "stuck-out", "studio", "study", "stuffed", "stupa", "stwa", "su", "su-1", "su-2", "su-3", "su-4", "su-5", "su-6", "su-7", "su-8", "sua", "suab", "suae", "suaen", "suaet", "suam", "sub", "subdot", "sube", "subedot", "subgroup", "subito", "subject", "subjoined", "subjoiner", "sublimate", "sublimate-2", "sublimate-3", "sublimation", "sublinear", "submult", "subne", "subplus", "subpunctis", "subrarr", "subscript", "subset", "subseteq", "subseteqq", "subsetequal", "subsetneq", "subsetneqq", "subsim", "substitute", "substitution", "subsub", "subsup", "subunit", "succ", "succapprox", "succcurlyeq", "succeed", "succeeds", "succeedsequal", "succeedsslantequal", "succeedstilde", "succeq", "succnapprox", "succneqq", "succnsim", "succsim", "suchthat", "suck", "sucked", "sucking", "sud", "sud2", "sue", "suhur", "suit", "suitable", "suku", "sukun", "sulfur", "sum", "sumash", "summation", "summer", "sun", "sundanese", "sunflower", "sung", "sunglasses", "sunrise", "sunset", "suo", "suop", "suox", "sup", "sup1", "sup2", "sup3", "supdot", "supdsub", "supe", "supedot", "super", "superfixed", "superhero", "superimposed", "superscript", "superset", "supersetequal", "supervillain", "supervise", "suphsol", "suphsub", "suplarr", "supmult", "supne", "supplus", "supralinear", "supset", "supseteq", "supseteqq", "supsetneq", "supsetneqq", "supsim", "supsub", "supsup", "sur", "sur9", "surang", "sure", "surface", "surfer", "surrogate,", "surround", "surx", "surya", "sushi", "suspension", "sut", "sutra", "suu", "sux", "sv", "svarita", "svasti", "sw", "swa", "swaa", "swan", "swapping", "swarhk", "swarr", "swarrow", "swash", "swe", "sweat", "sweet", "swg", "swi", "swii", "swimmer", "swimming", "swimsuit", "swirl", "swnwar", "swo", "swoo", "sword", "swords", "swung", "swz", "sy", "sya", "syi", "syllabics", "syllable", "syllable,", "syloti", "symbol", "symbol-1", "symbol-10", "symbol-11", "symbol-12", "symbol-13", "symbol-14", "symbol-15", "symbol-16", "symbol-17", "symbol-18", "symbol-19", "symbol-2", "symbol-20", "symbol-21", "symbol-22", "symbol-23", "symbol-24", "symbol-25", "symbol-26", "symbol-27", "symbol-29", "symbol-3", "symbol-30", "symbol-32", "symbol-36", "symbol-37", "symbol-38", "symbol-39", "symbol-4", "symbol-40", "symbol-42", "symbol-43", "symbol-45", "symbol-47", "symbol-48", "symbol-49", "symbol-5", "symbol-50", "symbol-51", "symbol-52", "symbol-53", "symbol-54", "symbol-6", "symbol-7", "symbol-8", "symbol-9", "symbols", "symmetric", "symmetry", "synafi", "synagma", "synagogue", "synchronous", "syndesmos", "synevma", "syouwa", "syp", "syr", "syriac", "syringe", "syrma", "syrmatiki", "syrx", "syt", "syx", "sz", "sza", "szaa", "sze", "szee", "szi", "szlig", "szo", "szu", "szwa", "szwg", "szz", "t-rex", "t-shirt", "t001", "t002", "t003", "t003a", "t004", "t005", "t006", "t007", "t007a", "t008", "t008a", "t009", "t009a", "t010", "t011", "t011a", "t012", "t013", "t014", "t015", "t016", "t016a", "t017", "t018", "t019", "t020", "t021", "t022", "t023", "t024", "t025", "t026", "t027", "t028", "t029", "t030", "t031", "t032", "t032a", "t033", "t033a", "t034", "t035", "t036", "ta", "ta-1", "ta-2", "ta-3", "ta-4", "ta-rol", "ta2", "taa", "taaf", "taai", "taaluja", "taam", "taaq", "taashae", "tab", "table", "tabs", "tabulation", "tack", "taco", "tae", "taen", "tag", "tagalog", "tagbanwa", "tah", "tahala", "tai", "tail", "tailed", "tailless", "taisyou", "tak", "tak4", "take", "takeout", "takhallus", "takri", "talent", "talents", "taling", "tall", "tally", "tam", "taman", "tamil", "taming", "tan", "tana", "tanabata", "tang", "tangent", "tangerine", "tangut", "tanned", "tao", "tap", "tape", "taper", "taq", "tar", "target", "tartar", "tartar-2", "tarung", "tas", "tassi", "tat", "tattooed", "tatweel", "tau", "taum", "taurus", "tav", "taviyani", "taw", "tawa", "tawellemet", "tax", "taxi", "tay", "tayanna", "tbrk", "tc", "tcaron", "tcedil", "tche", "tcheh", "tcheheh", "tcy", "tdot", "te", "te-1", "te-2", "te-3", "te-4", "te-5", "te-6", "te-7", "te-8", "te-9", "te-u", "teacup", "tear-off", "teardrop-barbed", "teardrop-shanked", "teardrop-spoked", "tears", "teddy", "tedung", "tee", "teeee", "teens", "teeth", "tegeh", "teh", "teheh", "teiws", "tek", "telegraph", "teleia", "telephone", "telescope", "television", "telisha", "teller", "telous", "telrec", "telu", "telugu", "temple", "tempus", "ten", "ten-thirty", "tenge", "tennis", "tens", "tense", "tent", "tenth", "tenu", "tenuto", "tep", "terminal", "terminator", "tesh", "tessaron", "tessera", "test", "tet", "tetartimorion", "tetartos", "teth", "tetrafonias", "tetragram", "tetrapli", "tetraseme", "tetrasimou", "teu", "teuaen", "teuaeq", "teun", "teut", "teuteuwen", "teuteux", "tevir", "tex", "text", "tfr", "th", "th-cree", "tha", "thaa", "thaalu", "thaana", "thahan", "thai", "thaj", "thal", "tham", "thamedh", "than", "thanna", "thanthakhat", "thaw", "the", "thea", "thee", "theh", "thema", "thematismos", "then", "there", "there4", "therefore", "thermodynamic", "thermometer", "thes", "theseos", "thespian", "theta", "thetasym", "thetav", "theth", "thethe", "they", "thi", "thiab", "thick", "thickapprox", "thicksim", "thieuth", "thigh", "thii", "thin", "thing", "thinking", "thinsp", "thinspace", "third", "third-stage", "thirds", "thirteen", "thirty", "thirty-five", "thirty-one", "thirty-second", "thita", "thiuth", "thkap", "thksim", "tho", "thoa", "thoj", "thom", "thong", "thoo", "thorn", "thou", "thought", "thousand", "thousands", "thread", "three", "three-circle", "three-d", "three-dot", "three-em", "three-hundred-and-twentieth", "three-legged", "three-line", "three-per-em", "three-quarter", "three-thirty", "through", "throwing", "thu", "thumb", "thumbs", "thunder", "thunderstorm", "thung", "thurisaz", "thurs", "thwa", "thwaa", "thwe", "thwee", "thwi", "thwii", "thwo", "thwoo", "thyoom", "thz", "ti", "ti-1", "ti-2", "ti-3", "ti-4", "ti-5", "ti-6", "ti-7", "ti2", "tiara", "tibetan", "tick", "ticket", "tickets", "tie", "tiep", "tiex", "tifinagh", "tiger", "tight", "tightly-closed", "tii", "tikeut", "tikeut-chieuch", "tikeut-cieuc", "tikeut-kiyeok", "tikeut-mieum", "tikeut-pieup", "tikeut-rieul", "tikeut-sios", "tikeut-sios-kiyeok", "tikeut-thieuth", "til", "tilde", "tildeequal", "tildefullequal", "tildetilde", "tile", "tiles", "tilt", "tilting", "time", "timer", "times", "timesb", "timesbar", "timesd", "tin", "tinagma", "tincture", "ting", "tinne", "tint", "tiny", "tip", "tipeha", "tippi", "tir", "tired", "tirhuta", "tironian", "tirta", "tiryak", "tit", "tita", "titlo", "tituaep", "tiwaz", "tiwn", "tiwr", "tix", "tje", "tla", "tle", "tlee", "tlha", "tlhe", "tlhee", "tlhi", "tlho", "tlhoo", "tlhu", "tlhwe", "tlhya", "tli", "tlo", "tlu", "tlv", "tn", "to", "to-1", "to-2", "to-3", "to-4", "to-5", "to-6", "to-ra", "toa", "toandakhiat", "todo", "toea", "together", "toilet", "tokyo", "tolong", "tomato", "tompi", "ton", "tonal", "tone", "tone-1", "tone-2", "tone-3", "tone-4", "tone-5", "tone-6", "tone-7", "tone-8", "tone-b", "tone-d", "tone-g", "tone-j", "tone-m", "tone-s", "tone-v", "tong", "tongue", "tonos", "too", "toolbox", "toon", "tooth", "top", "top-lighted", "topbar", "topbot", "topcir", "topf", "topfork", "toq", "torch", "torculus", "tornado", "torso", "torso-floorplane", "torso-wallplane", "tortoise", "tos", "tosa", "tot", "total", "touch", "touches", "touching", "touchtone", "tournois", "tov", "towards", "tower", "tox", "tprime", "tr", "tra", "track", "trackball", "tractor", "trade", "traditional", "traffic", "trailing", "train", "tram", "tramway", "transmission", "transpluto", "transposition", "transversal", "trapezium", "travel-floorplane", "travel-wallplane", "tray", "treading", "tredecile", "tree", "tremolo-1", "tremolo-2", "tremolo-3", "trend", "tresillo", "tri", "tria", "triangle", "triangle-headed", "triangle-round", "triangledown", "triangleleft", "trianglelefteq", "triangleq", "triangleright", "trianglerighteq", "triangular", "tricolon", "trident", "tridot", "trie", "trifoliate", "trifonias", "trigorgon", "trigram", "trigrammos", "triisap", "trillions", "triminus", "trion", "triple", "tripledot", "tripli", "triplus", "tripod", "trisb", "triseme", "trisimou", "tritime", "tritimorion", "tritos", "triumph", "troezenian", "trokutasti", "trolley", "trolleybus", "tromikolygisma", "tromikon", "tromikoparakalesma", "tromikopsifiston", "tromikosynagma", "trophy", "tropical", "trpezium", "truck", "true", "trump-1", "trump-10", "trump-11", "trump-12", "trump-13", "trump-14", "trump-15", "trump-16", "trump-17", "trump-18", "trump-19", "trump-2", "trump-20", "trump-21", "trump-3", "trump-4", "trump-5", "trump-6", "trump-7", "trump-8", "trump-9", "trumpet", "truncated", "trunk", "truth", "tryblion", "ts", "tsa", "tsaa", "tsaadiy", "tsab", "tsadi", "tscr", "tscy", "tse", "tsee", "tseeb", "tsere", "tsha", "tshab", "tshcy", "tshe", "tsheej", "tsheg", "tshes", "tshooj", "tshook", "tshugs", "tsi", "tsiu", "tso", "tsov", "tssa", "tsse", "tstrok", "tsu", "tsv", "tswa", "tswb", "tswe", "tt", "tt2", "tta", "ttaa", "ttayanna", "tte", "ttee", "tteh", "tteheh", "tth", "ttha", "tthaa", "tthe", "tthee", "tthi", "ttho", "tthoo", "tthu", "tthwe", "tti", "tto", "ttsa", "ttse", "ttsee", "ttsi", "ttso", "ttsu", "ttta", "tttha", "ttu", "ttuddaag", "ttuddag", "tu", "tu-1", "tu-2", "tu-3", "tu-4", "tu-to", "tuae", "tuaep", "tuareg", "tub", "tube", "tug2", "tugrik", "tuk", "tukwentis", "tulip", "tum", "tumae", "tumbler", "tumetes", "tunny", "tuo", "tuop", "tuot", "tuox", "tup", "tupni", "tur", "turban", "turkey", "turkic", "turkish", "turn", "turned", "turnstile", "turo2", "turtle", "turu", "turx", "tut", "tuteyasat", "tutty", "tuumu", "tux", "tuxedo", "tvimadur", "tvrido", "twa", "twaa", "twe", "twelfth", "twelfths", "twelve", "twelve-thirty", "twentieth", "twentieths", "twenty", "twenty-eight", "twenty-eighth", "twenty-five", "twenty-four", "twenty-nine", "twenty-one", "twenty-seven", "twenty-six", "twenty-three", "twenty-two", "twi", "twii", "twisted", "twisting", "twixt", "two", "two-circle", "two-em", "two-headed", "two-line", "two-thirty", "two-way", "twoheadleftarrow", "twoheadrightarrow", "twoo", "txa", "txheej", "txwv", "tya", "tyay", "tye", "tyi", "tyo", "type", "type-1", "type-1-2", "type-2", "type-3", "type-4", "type-5", "type-6", "type-7", "tyr", "tz", "tza", "tzaa", "tze", "tzee", "tzi", "tzir", "tzo", "tzoa", "tzu", "u-1", "u-2", "u-3", "u-4", "u-5", "u-a", "u-ae", "u-eo-eu", "u-i-i", "u-shaped", "u-u", "u-ye", "u-yeo", "u001", "u002", "u003", "u004", "u005", "u006", "u006a", "u006b", "u007", "u008", "u009", "u010", "u011", "u012", "u013", "u014", "u015", "u016", "u017", "u018", "u019", "u020", "u021", "u022", "u023", "u023a", "u024", "u025", "u026", "u027", "u028", "u029", "u029a", "u030", "u031", "u032", "u032a", "u033", "u034", "u035", "u036", "u037", "u038", "u039", "u040", "u041", "u042", "u2", "ua", "uacute", "uan", "uang", "uarr", "uarrocir", "uath", "ub", "ubadama", "ubhayato", "ubrcy", "ubreve", "ubufili", "uc", "ucirc", "ucy", "ud", "udaat", "udarr", "udatta", "udblac", "udhar", "udug", "ue", "uea", "uee", "uei", "uen", "uey", "ufisht", "ufr", "ugaritic", "ugrave", "uh", "uhar", "uharl", "uharr", "uhblk", "uhd", "ui", "uighur", "uilleann", "uk", "ukara", "ukrainian", "uku", "ulcorn", "ulcorner", "ulcrop", "ultri", "ulu", "um", "umacr", "umbin", "umbrella", "uml", "umum", "un", "una", "unamused", "unap", "unaspirated", "unblended", "uncertainty", "uncia", "under", "underbar", "underbrace", "underbracket", "underdot", "underline", "underparenthesis", "undertie", "undo", "uneven", "ung", "unicorn", "unified", "uniform", "union", "unionplus", "unit", "united", "unity", "universal", "unk", "unknown", "unmarried", "unn", "uo", "uog", "uogon", "uon", "uop", "uopf", "uox", "up", "up-pointing", "upadhmaniya", "uparrow", "uparrowbar", "uparrowdownarrow", "updownarrow", "upequilibrium", "upharpoonleft", "upharpoonright", "uplus", "upper", "upperleftarrow", "upperrightarrow", "upright", "upsi", "upside-down", "upsih", "upsilon", "uptee", "upteearrow", "upturn", "upuparrows", "upward", "upwards", "ur", "ur2", "ur4", "ura", "uranus", "urcorn", "urcorner", "urcrop", "uri", "uri3", "urine", "uring", "urn", "urtri", "uru", "uruda", "urus", "uruz", "us", "uscr", "use", "use,", "used", "ush", "ush2", "ushenna", "ushumx", "ushx", "ussu", "ussu3", "utdot", "utilde", "utri", "utrif", "utuki", "uu", "uuarr", "uue", "uuml", "uuu", "uuu2", "uuu3", "uuuu", "uuyanna", "uwangle", "uwu", "uy", "uyanna", "uz3", "uzhakku", "uzu", "v001", "v001a", "v001b", "v001c", "v001d", "v001e", "v001f", "v001g", "v001h", "v001i", "v002", "v002a", "v003", "v004", "v005", "v006", "v007", "v007a", "v007b", "v008", "v009", "v010", "v011", "v011a", "v011b", "v011c", "v012", "v012a", "v012b", "v013", "v014", "v015", "v016", "v017", "v018", "v019", "v020", "v020a", "v020b", "v020c", "v020d", "v020e", "v020f", "v020g", "v020h", "v020i", "v020j", "v020k", "v020l", "v021", "v022", "v023", "v023a", "v024", "v025", "v026", "v027", "v028", "v028a", "v029", "v029a", "v030", "v030a", "v031", "v031a", "v032", "v033", "v033a", "v034", "v035", "v036", "v037", "v037a", "v038", "v039", "v040", "v040a", "va", "vaa", "vaavu", "vah", "vai", "vaj", "vakaiyaraa", "valley", "vamagomukha", "vampire", "vane", "vangrt", "vap", "vapours", "varaakan", "vareia", "vareiai", "varepsilon", "varia", "variant", "variation", "varika", "varkappa", "varnothing", "varphi", "varpi", "varpropto", "varr", "varrho", "varsigma", "vartheta", "vartriangleleft", "vartriangleright", "varys", "vasis", "vastness", "vat", "vathy", "vau", "vav", "vax", "vayanna", "vbar", "vbarv", "vcy", "vdash", "vdashl", "ve", "vector", "vede", "vedic", "vee", "veebar", "veeeq", "veh", "vehicle", "veil", "veli", "vellip", "vend", "vep", "ver", "verbar", "verdigris", "verge", "verse", "versicle", "vert", "vertical", "vertical-00-00", "vertical-00-01", "vertical-00-02", "vertical-00-03", "vertical-00-04", "vertical-00-05", "vertical-00-06", "vertical-01-00", "vertical-01-01", "vertical-01-02", "vertical-01-03", "vertical-01-04", "vertical-01-05", "vertical-01-06", "vertical-02-00", "vertical-02-01", "vertical-02-02", "vertical-02-03", "vertical-02-04", "vertical-02-05", "vertical-02-06", "vertical-03-00", "vertical-03-01", "vertical-03-02", "vertical-03-03", "vertical-03-04", "vertical-03-05", "vertical-03-06", "vertical-04-00", "vertical-04-01", "vertical-04-02", "vertical-04-03", "vertical-04-04", "vertical-04-05", "vertical-04-06", "vertical-05-00", "vertical-05-01", "vertical-05-02", "vertical-05-03", "vertical-05-04", "vertical-05-05", "vertical-05-06", "vertical-06-00", "vertical-06-01", "vertical-06-02", "vertical-06-03", "vertical-06-04", "vertical-06-05", "vertical-06-06", "verticalbar", "verticalline", "vertically", "verticalseparator", "verticaltilde", "very", "verythinspace", "vessel", "vest", "vesta", "veuae", "veuaepen", "veum", "veux", "vew", "vex", "veyz", "vfa", "vfr", "vha", "vi", "vibration", "victory", "vida", "video", "videocassette", "vidj", "vidj-2", "vie", "viep", "viet", "viewdata", "viewing", "viex", "vigintile", "village", "vin", "vine", "vinegar", "vinegar-2", "vinegar-3", "violin", "vip", "virama", "virga", "virgo", "viriam", "visarga", "visargaya", "visigothic", "vit", "vitae", "vitae-2", "vitriol", "vitriol-2", "vix", "viyo", "vltri", "vo", "vocal", "vocalic", "vocalization", "vod", "voiced", "voiceless", "voicing", "void", "volapuk", "volcano", "volleyball", "voltage", "volume", "vom", "vomiting", "voo", "vooi", "vop", "vopf", "vos", "vot", "vou", "vow", "vowel", "vowel-carrier", "vox", "vprop", "vrachy", "vrtri", "vs", "vscr", "vu", "vueq", "vulcanus", "vulgar", "vup", "vur", "vurx", "vut", "vux", "vvdash", "vw", "vwa", "vwj", "vy", "vyp", "vyr", "vyrx", "vyt", "vyx", "vzigzag", "vzmet", "w001", "w002", "w003", "w003a", "w004", "w005", "w006", "w007", "w008", "w009", "w009a", "w010", "w010a", "w011", "w012", "w013", "w014", "w014a", "w015", "w016", "w017", "w017a", "w018", "w018a", "w019", "w020", "w021", "w022", "w023", "w024", "w024a", "w025", "wa", "wa-1", "wa-2", "wa-3", "wa-4", "wa-5", "waa", "waavu", "wadda", "wae", "waen", "waffle", "wai", "waist", "waiting", "walk", "wall", "wallplane", "wan", "wancho", "wanderer", "wangkuoq", "waning", "wap", "waqfa", "warang", "warning", "wasallam", "wasla", "wassallam", "wastebasket", "wasting", "wat", "watch", "water", "watermelon", "watto", "wau", "wave", "waves", "waving", "wavy", "waw", "waw-ayin-resh", "wax", "waxing", "way", "wb", "wc", "wcirc", "we", "we-1", "we-2", "we-3", "we-4", "weapon", "weary", "web", "wedbar", "wedding", "wedge", "wedge-tailed", "wedgeq", "wee", "ween", "wei", "weierp", "weight", "well", "wen", "weo", "wep", "west", "west-cree", "western", "wet", "weux", "wex", "wfr", "wg", "wh", "whale", "wheat", "wheel", "wheelchair", "wheeled", "white", "white-feathered", "whole", "wi", "wi-1", "wi-2", "wi-3", "wi-4", "wi-5", "wiang", "wiangwaak", "wide", "wide-headed", "widening", "width", "wiggles", "wiggly", "wignyan", "wii", "wilted", "win", "wind", "window", "windu", "wine", "wings", "winja", "wink", "winking", "winter", "wired", "with", "within", "without", "wo", "wo-1", "wo-2", "wo-3", "wo-4", "wo-5", "wo-6", "wo-7", "woa", "woe", "wolf", "woloso", "woman", "womans", "women", "womens", "won", "woo", "wood", "woods-cree", "wool", "woon", "wop", "wopf", "word", "wordspace", "work", "worker", "world", "worried", "worship", "wow", "wox", "wp", "wr", "wrap", "wrapped", "wreath", "wrench", "wrestlers", "wrinkled", "wrinkles", "wrist", "writing", "wrong", "wry", "wscr", "wu", "wuaen", "wuaet", "wue", "wui", "wulu", "wun", "wunjo", "wuo", "wuop", "wuox", "wup", "wv", "wva", "wve", "wvi", "wynn", "wz", "x-x", "x001", "x002", "x003", "x004", "x004a", "x004b", "x005", "x006", "x006a", "x007", "x008", "x008a", "xa", "xaa", "xan", "xaph", "xau", "xaus", "xcap", "xcirc", "xcup", "xdtri", "xe", "xee", "xeh", "xestes", "xeyn", "xfr", "xg", "xharr", "xi", "xiab", "xiangqi", "xie", "xiep", "xiet", "xiex", "xip", "xiron", "xit", "xix", "xlarr", "xmap", "xnis", "xo", "xoa", "xodot", "xop", "xopf", "xoph", "xoplus", "xor", "xot", "xotime", "xox", "xrarr", "xscr", "xshaayathiya", "xsqcup", "xu", "xuo", "xuox", "xuplus", "xutri", "xva", "xve", "xvee", "xw", "xwa", "xwaa", "xwe", "xwedge", "xwee", "xwi", "xy", "xya", "xyaa", "xye", "xyee", "xyeem", "xyi", "xyo", "xyoo", "xyooj", "xyp", "xyr", "xyrx", "xyt", "xyu", "xyx", "y-cree", "y001", "y001a", "y002", "y003", "y004", "y005", "y006", "y007", "y008", "ya", "ya-1", "ya-2", "ya-3", "ya-4", "ya-5", "ya-o", "ya-u", "ya-yo", "yaa", "yaado", "yaai", "yaaru", "yab", "yabh", "yach", "yacute", "yacy", "yad", "yadd", "yaddh", "yadh", "yae", "yaemmae", "yaf", "yafu", "yag", "yagh", "yaghh", "yagn", "yah", "yahh", "yaj", "yajurvedic", "yak", "yakash", "yakh", "yakhh", "yal", "yam", "yamakkan", "yamok", "yan", "yang", "yap", "yaq", "yar", "yarn", "yarr", "yas", "yash", "yass", "yat", "yath", "yati", "yatt", "yau", "yav", "yaw", "yawn", "yawning", "yay", "yayanna", "yayd", "yaz", "yazh", "yazz", "ycirc", "ycy", "ye", "yea", "year", "yee", "yeeg", "yeh", "yein", "yellow", "yen", "yenap", "yenisei", "yeo", "yeo-o", "yeo-u", "yeo-ya", "yeorinhieuh", "yer", "yerah", "yeri", "yeru", "yesieung", "yesieung-hieuh", "yesieung-mieum", "yesieung-pansios", "yesieung-sios", "yestu", "yetiv", "yeuae", "yeuaet", "yeum", "yeuq", "yeurae", "yeux", "yew", "yey", "yfen", "yfesis", "yfr", "yhe", "yi", "yi-u", "yicy", "yiddish", "yie", "yiee", "yiep", "yiet", "yiex", "yig", "yih", "yii", "yin", "ying", "yip", "yit", "yiwn", "yix", "yizet", "yn", "yo", "yo-1", "yo-2", "yo-3", "yo-4", "yo-5", "yo-6", "yo-a", "yo-ae", "yo-eo", "yo-i", "yo-o", "yo-ya", "yo-yae", "yo-yeo", "yo-yo", "yoa", "yod", "yodh", "yogh", "yomo", "yoo", "yop", "yopf", "yoq", "yori", "yot", "you", "youthful", "youthfulness", "yowd", "yox", "yoy", "ypogegrammeni", "ypokrisis", "yporroi", "ypsili", "yr", "yry", "yscr", "yu", "yu-1", "yu-2", "yu-3", "yu-4", "yu-a", "yu-ae", "yu-e", "yu-eo", "yu-i", "yu-o", "yu-u", "yu-ye", "yu-yeo", "yuaen", "yuan", "yucy", "yudh", "yue", "yueq", "yui", "yuj", "yum", "yuml", "yun", "yuo", "yuom", "yuop", "yuot", "yuox", "yup", "yuq", "yur", "yurx", "yus", "yut", "yuukaleapintu", "yuwoq", "yux", "yv", "ywa", "ywaa", "ywe", "ywi", "ywii", "ywo", "ywoo", "yy", "yya", "yyaa", "yye", "yyp", "yyr", "yyrx", "yyt", "yyx", "z001", "z002", "z002a", "z002b", "z002c", "z002d", "z003", "z003a", "z003b", "z004", "z004a", "z005", "z005a", "z006", "z007", "z008", "z009", "z010", "z011", "z012", "z013", "z014", "z015", "z015a", "z015b", "z015c", "z015d", "z015e", "z015f", "z015g", "z015h", "z015i", "z016", "z016a", "z016b", "z016c", "z016d", "z016e", "z016f", "z016g", "z016h", "za", "za7", "zaa", "zacute", "zaef", "zag", "zah", "zai", "zain", "zal", "zamx", "zanabazar", "zap", "zaqef", "zarl", "zarqa", "zat", "zata", "zaviyani", "zax", "zayin", "zayin-yodh", "zayn", "zcaron", "zcy", "zdot", "ze", "ze2", "zebra", "zee", "zeetrf", "zemlja", "zemlya", "zen", "zep", "zero", "zerowidthspace", "zeta", "zeus", "zex", "zfr", "zh", "zha", "zhaa", "zhain", "zhap", "zhar", "zhat", "zhax", "zhayin", "zhcy", "zhe", "zhee", "zhep", "zhet", "zhex", "zhi", "zhil", "zhivete", "zho", "zhoi", "zhoo", "zhop", "zhot", "zhox", "zhu", "zhuo", "zhuop", "zhuox", "zhup", "zhur", "zhurx", "zhut", "zhux", "zhwa", "zhwe", "zhy", "zhyp", "zhyr", "zhyrx", "zhyt", "zhyx", "zi", "zi3", "zib", "zida", "zie", "ziep", "ziex", "zig", "zigrarr", "zigzag", "zilde", "zinor", "zip", "zipper-mouth", "ziqaa", "zit", "zix", "ziz2", "zje", "zla", "zlama", "zo", "zoa", "zombie", "zoo", "zop", "zopf", "zot", "zox", "zqapha", "zra", "zsa", "zscr", "zsha", "zu", "zu5", "zubur", "zum", "zuo", "zuop", "zuox", "zup", "zur", "zurx", "zut", "zux", "zwa", "zwarakay", "zwj", "zwnj", "zy", "zygos", "zyp", "zyr", "zyrx", "zyt", "zyx", "zza", "zzaa", "zzap", "zzat", "zzax", "zze", "zzee", "zzep", "zzex", "zzi", "zzie", "zziep", "zziet", "zziex", "zzip", "zzit", "zzix", "zzo", "zzop", "zzox", "zzsa", "zzsya", "zzu", "zzup", "zzur", "zzurx", "zzux", "zzy", "zzya", "zzyp", "zzyr", "zzyrx", "zzyt", "zzyx" }; // }}} static const char_type mark_groups[136566] = { // {{{ 0, 1, 26445, 1, 23705, 2, 22438, 23515, 1, 677, 1, 32114, 1, 30310, 1, 25826, 1, 23963, 1, 6079, 1, 23033, 1, 8170, 1, 28885, 1, 7922, 1, 25921, 2, 1717, 9745, 1, 23375, 3, 5421, 5844, 5860, 1, 17880, 1, 26047, 1, 15309, 1, 24691, 1, 29209, 1, 31238, 1, 23067, 1, 9916, 1, 8955, 1, 12849, 1, 21638, 2, 8253, 8264, 2, 3091, 3109, 1, 5638, 2, 11367, 11670, 1, 26801, 260, 5436, 5437, 5438, 11177, 16254, 16255, 16256, 16257, 16258, 16259, 16260, 16261, 16262, 16263, 16264, 16265, 16266, 16267, 16268, 16269, 32593, 32594, 32595, 32596, 32597, 32598, 32599, 32600, 32601, 32602, 32603, 32604, 32605, 32606, 32607, 32608, 32609, 32610, 32611, 32612, 32613, 32614, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32628, 32629, 32630, 32631, 32632, 32633, 32634, 32635, 32636, 32637, 32638, 32639, 32640, 32641, 32642, 32643, 32644, 32645, 32646, 32647, 32648, 32649, 32650, 32651, 32652, 32653, 32654, 32655, 32656, 32657, 32658, 32659, 32660, 32661, 32662, 32663, 32664, 32665, 32666, 32667, 32668, 32669, 32670, 32671, 32672, 32673, 32674, 32675, 32676, 32677, 32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697, 32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705, 32706, 32707, 32708, 32709, 32710, 32711, 32712, 32713, 32714, 32715, 32716, 32717, 32718, 32719, 32720, 32721, 32722, 32723, 32724, 32725, 32726, 32727, 32728, 32729, 32730, 32731, 32732, 32733, 32734, 32735, 32736, 32737, 32738, 32739, 32740, 32741, 32742, 32743, 32744, 32745, 32746, 32747, 32748, 32749, 32750, 32751, 32752, 32753, 32754, 32755, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32763, 32764, 32765, 32766, 32767, 32768, 32769, 32770, 32771, 32772, 32773, 32774, 32775, 32776, 32777, 32778, 32779, 32780, 32781, 32782, 32783, 32784, 32785, 32786, 32787, 32788, 32789, 32790, 32791, 32792, 32793, 32794, 32795, 32796, 32797, 32798, 32799, 32800, 32801, 32802, 32803, 32804, 32805, 32806, 32807, 32808, 32809, 32810, 32811, 32812, 32813, 32814, 32815, 32816, 32817, 32818, 32819, 32820, 32821, 32822, 32823, 32824, 32825, 32826, 32827, 32828, 32829, 32830, 32831, 32832, 4, 8633, 8634, 8643, 8644, 1, 23706, 5, 13761, 13762, 13763, 13764, 17334, 1, 9938, 7, 14676, 28657, 28658, 28659, 30497, 30937, 30938, 1, 18057, 1, 23168, 1, 24081, 1, 9896, 1, 25423, 1, 27165, 1, 23564, 1, 17985, 5, 1510, 1511, 1512, 16247, 16250, 1, 23083, 1, 23064, 1, 15578, 1, 13198, 48, 1939, 1978, 2396, 2439, 2658, 2692, 2735, 2785, 2833, 2883, 2921, 2975, 3401, 4478, 4479, 5224, 5379, 5688, 5744, 5950, 5979, 6324, 11527, 13560, 14009, 14010, 14176, 14263, 14313, 14398, 17329, 17432, 17438, 17472, 17478, 17584, 18657, 18894, 18945, 19777, 19825, 21003, 21042, 24617, 24668, 24983, 29070, 29198, 1, 15398, 1, 12482, 2, 26899, 26901, 1, 24419, 3, 14188, 19939, 29519, 8, 8967, 31203, 31204, 31205, 31206, 31207, 31208, 31209, 1, 31616, 3, 10240, 10287, 28996, 1, 26822, 1, 22535, 1, 30637, 1, 29224, 1, 2982, 26, 64, 2068, 6368, 7968, 7969, 7976, 7977, 9676, 12115, 12187, 16353, 16526, 18860, 18861, 20415, 20447, 22187, 22347, 23441, 23442, 23443, 23444, 30221, 30224, 30713, 32529, 1, 13096, 516, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, 6160, 6161, 6162, 26644, 26645, 26646, 26647, 26648, 26649, 26650, 26651, 26652, 26653, 26654, 26655, 26656, 26657, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26688, 26689, 26690, 26691, 26692, 26693, 26694, 26695, 26696, 26697, 26698, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26720, 26721, 26722, 26723, 26724, 26725, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26774, 26775, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26822, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26834, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26843, 26844, 26845, 26846, 26847, 26848, 26849, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26866, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26879, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 26890, 26891, 26892, 26893, 26894, 26895, 26896, 26897, 26898, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26925, 26926, 26927, 26928, 26929, 26930, 26931, 26932, 26933, 26934, 26935, 26936, 26937, 26938, 26939, 26940, 26941, 26942, 26943, 26944, 26945, 26946, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26985, 26986, 26987, 26988, 26989, 26990, 26991, 26992, 26993, 26994, 26995, 26996, 26997, 26998, 26999, 27000, 27001, 27002, 27003, 27004, 27005, 27006, 27007, 27008, 27009, 27010, 27011, 27012, 27013, 27014, 27015, 27016, 27017, 27018, 27019, 27020, 27021, 27022, 27023, 27024, 27025, 27026, 27027, 27028, 27029, 27030, 27031, 27032, 27033, 27034, 27035, 27036, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27050, 27051, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27059, 27060, 27061, 27062, 27063, 27064, 27065, 27066, 27067, 27068, 27069, 27070, 27071, 27072, 27073, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27082, 27083, 27084, 27085, 27086, 27087, 27088, 27089, 27090, 27091, 27092, 27093, 27094, 27095, 27096, 27097, 27098, 27099, 27100, 27101, 27102, 27103, 27104, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27117, 27118, 27119, 27120, 27187, 27188, 27189, 27190, 30367, 30371, 30372, 30396, 30397, 30400, 30403, 1, 5114, 1, 6200, 27, 29678, 29679, 29680, 29681, 29682, 29683, 29684, 29685, 29686, 29687, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29699, 29700, 29701, 29702, 29703, 29704, 1, 31999, 3, 5881, 13097, 29046, 1, 22587, 3, 13882, 24376, 24575, 1, 30361, 1, 17515, 1, 8828, 1, 23925, 1, 7927, 2, 31087, 31088, 1, 7961, 1, 30604, 1, 23386, 31, 21139, 21150, 21210, 21305, 21320, 21348, 21401, 21403, 21404, 21416, 21460, 21461, 21462, 21463, 21464, 21499, 21540, 21593, 21760, 21850, 21851, 21968, 22052, 22182, 22197, 22219, 22228, 22248, 22287, 22316, 22317, 1, 17990, 1, 32360, 1, 7639, 1, 26254, 1, 29183, 2, 27582, 27606, 1, 12757, 1, 2460, 1, 12168, 1, 9908, 4, 4157, 4587, 19378, 24200, 1, 15429, 1, 25880, 1, 32010, 2, 13587, 29239, 1, 170, 3, 11918, 13637, 29276, 1, 15365, 51, 18595, 18596, 18597, 18598, 18599, 18600, 18601, 18602, 18603, 18604, 18605, 18606, 18607, 18608, 18609, 18610, 18611, 18612, 18613, 18614, 18615, 18616, 18617, 18618, 18619, 18620, 18621, 18622, 18623, 18624, 18625, 18626, 18627, 18628, 18629, 18630, 18631, 18632, 18633, 18634, 18635, 18636, 18637, 18638, 18639, 18640, 18641, 18642, 18643, 18644, 18645, 1, 23425, 2, 7812, 9666, 4, 11775, 30218, 30224, 31332, 1, 5854, 1, 4582, 5, 9816, 9891, 10165, 10166, 10167, 1, 29851, 1, 5885, 1, 8123, 1, 21271, 1, 24306, 1, 25465, 1, 31782, 1, 31802, 1, 15431, 2, 4759, 4760, 1, 32093, 2, 27479, 27498, 1, 23499, 223, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 14566, 14567, 14568, 14569, 14570, 14571, 14572, 14573, 14574, 14575, 14576, 14577, 14578, 14579, 14580, 14581, 14582, 14583, 14584, 14585, 14586, 14587, 14588, 14589, 14590, 14591, 14592, 14593, 14594, 14595, 14596, 14680, 14681, 14682, 14683, 14684, 14685, 14686, 14687, 14688, 14689, 14690, 14691, 14692, 14693, 14694, 14695, 14696, 14697, 14698, 14699, 14700, 14701, 14702, 14703, 14704, 14705, 14706, 14707, 14708, 14709, 14710, 14711, 1, 4171, 1, 26307, 1, 6158, 1, 24380, 3, 7909, 9179, 9694, 1, 12329, 1, 29261, 1, 12306, 1, 25505, 1, 12878, 1, 22942, 1, 10635, 1, 32224, 1, 30632, 1, 28934, 1, 30181, 1, 8996, 1, 17537, 1, 3949, 1, 13272, 1, 10134, 1, 4082, 2, 11967, 12102, 1, 4606, 1, 24235, 2, 290, 291, 1, 25306, 2, 11660, 11772, 322, 7331, 7332, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8225, 8226, 8227, 8228, 8230, 8231, 8607, 8610, 8617, 8619, 8621, 8623, 8625, 8627, 8629, 8631, 8633, 8635, 8637, 8639, 8641, 8643, 8645, 8647, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8673, 8674, 8675, 8676, 8678, 8679, 8680, 8681, 8684, 8685, 8699, 8701, 8703, 8708, 8717, 8726, 8729, 8730, 8762, 8793, 8794, 8795, 8796, 8797, 8798, 8799, 8802, 8804, 8805, 8826, 8839, 8840, 8848, 8874, 8887, 8897, 8898, 8902, 8905, 8917, 8919, 8925, 8926, 8935, 8957, 8958, 8959, 8961, 8977, 8997, 9002, 9003, 9004, 9005, 9011, 9013, 9014, 9015, 9016, 9021, 9022, 9024, 9042, 9045, 9059, 9060, 9120, 9123, 9124, 9125, 9126, 9127, 9500, 9501, 9502, 9503, 9622, 9623, 9680, 9681, 9682, 9683, 9684, 9686, 9703, 9704, 9705, 9706, 9708, 9710, 9712, 9714, 9767, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10010, 10012, 10014, 10017, 10018, 10019, 10020, 10022, 10024, 10025, 10027, 10029, 10064, 10066, 10117, 10118, 10119, 10120, 10130, 10135, 10136, 10137, 10138, 10147, 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10166, 10167, 10171, 10172, 10173, 10174, 10175, 10176, 10177, 10178, 10179, 10181, 10182, 10183, 10184, 10201, 10211, 10212, 10213, 10214, 11091, 11131, 11132, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11678, 16307, 16308, 16718, 26959, 26961, 26963, 26965, 26967, 26969, 26971, 26973, 26976, 26979, 27074, 27076, 27078, 27080, 29920, 30249, 30457, 30459, 30461, 30777, 30840, 30854, 30863, 30881, 30882, 30883, 30884, 30887, 30888, 30889, 30890, 30891, 30897, 30918, 31088, 31090, 31236, 31337, 31338, 31339, 31340, 31341, 31347, 31349, 31350, 31357, 31358, 31360, 31361, 31362, 31363, 31364, 31366, 31367, 31368, 31369, 31401, 31402, 31403, 31405, 31406, 31407, 31410, 31411, 31412, 31413, 31415, 31416, 31417, 31419, 31420, 31837, 31845, 31846, 31847, 31848, 31849, 31850, 31858, 31866, 31867, 31868, 31869, 31870, 31871, 31879, 31887, 31888, 31889, 31890, 31891, 31892, 31900, 31903, 31906, 31911, 31912, 31913, 31921, 31922, 31923, 31924, 31925, 31926, 31927, 1, 30804, 1, 12860, 5, 7340, 8855, 30395, 30645, 31649, 1, 2117, 1, 12815, 2, 30985, 31040, 4, 6464, 6465, 6466, 6467, 1, 12990, 1, 23988, 1, 30001, 1, 25830, 1, 22419, 1, 25277, 3, 24446, 29374, 29408, 1, 32637, 1, 12152, 1, 4032, 1, 15557, 1, 23745, 4, 28656, 28710, 28740, 28801, 2, 8927, 8928, 1, 5588, 1, 18296, 5, 37, 1599, 16352, 16499, 32502, 1, 26131, 1, 12434, 4, 8050, 8051, 8060, 8067, 1, 26192, 1, 3120, 9, 8018, 8116, 8131, 8894, 10107, 10108, 30743, 30744, 30948, 1, 32435, 2, 13250, 13381, 1, 23654, 1, 3778, 2, 7619, 7683, 2, 4563, 4564, 1, 9763, 3, 12175, 12176, 27289, 60, 62, 7826, 7828, 7830, 7832, 7836, 7838, 7840, 7842, 7843, 7844, 7845, 7846, 7940, 7942, 7943, 7944, 7946, 7956, 8049, 8086, 9591, 9619, 9620, 9664, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, 9865, 9866, 9867, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9877, 9879, 9881, 9883, 9885, 9887, 9889, 9891, 9892, 9894, 9896, 9975, 9977, 10050, 16348, 16524, 32527, 2, 22381, 23459, 1, 8864, 39, 2238, 2350, 2441, 2531, 2618, 2694, 2787, 2885, 2961, 2962, 2977, 3251, 3549, 5249, 6206, 14315, 14348, 14349, 14444, 14806, 18512, 19230, 19326, 19422, 19544, 19646, 19752, 19827, 19915, 20009, 20086, 20180, 20263, 20391, 20538, 20595, 20816, 20982, 21046, 3, 30424, 30425, 31662, 1, 9840, 1, 24489, 6, 10813, 10982, 30260, 30492, 30525, 31750, 1, 13186, 1, 24777, 1, 15318, 1, 17938, 2, 22429, 23506, 1, 22514, 6, 1319, 1365, 1399, 15593, 18907, 18958, 1, 26234, 1, 25095, 1, 29807, 1, 24137, 1, 3178, 1, 8916, 1, 22901, 1, 12374, 1, 32352, 1, 9421, 26, 9698, 9699, 9700, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9874, 9875, 9876, 9877, 9878, 9879, 9882, 9883, 9895, 9896, 9976, 9977, 10061, 10073, 10075, 56, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 2, 5793, 5795, 1, 26127, 1, 14469, 1, 9903, 1, 12641, 24, 1449, 2011, 15612, 15613, 15617, 15618, 15619, 15621, 15622, 15623, 15624, 15625, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, 15635, 15636, 15637, 1, 3132, 10, 17018, 17021, 17029, 17030, 17034, 17035, 17036, 17039, 17042, 17043, 1, 26090, 1, 30165, 1, 25771, 1, 15474, 1, 28873, 1, 17297, 3, 1482, 1483, 15633, 2, 17957, 24025, 3, 5582, 5812, 5976, 1, 9297, 1, 29794, 1, 16258, 1, 27271, 1, 28831, 1, 17134, 1, 26272, 1, 9615, 1, 17528, 3, 9028, 26618, 26627, 1, 13315, 1, 15455, 1, 17981, 1, 23989, 1, 17684, 1, 25796, 1, 2053, 2496, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 304, 305, 306, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 328, 329, 330, 331, 332, 333, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 380, 381, 382, 383, 387, 388, 390, 391, 392, 397, 398, 399, 403, 404, 405, 406, 407, 409, 410, 411, 412, 413, 416, 417, 423, 424, 425, 426, 427, 428, 430, 431, 432, 433, 434, 438, 439, 442, 448, 449, 450, 452, 455, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 494, 496, 497, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 538, 539, 540, 541, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 566, 567, 568, 569, 570, 571, 572, 575, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 591, 593, 594, 595, 598, 601, 603, 604, 610, 611, 612, 615, 616, 617, 620, 621, 622, 623, 630, 631, 632, 633, 634, 635, 638, 640, 642, 644, 647, 652, 653, 655, 663, 665, 668, 669, 670, 673, 676, 682, 683, 685, 689, 892, 894, 895, 896, 897, 898, 899, 900, 925, 926, 927, 928, 929, 930, 931, 957, 958, 959, 960, 961, 965, 966, 967, 1007, 1011, 1024, 1091, 1104, 1129, 1130, 1135, 1136, 1149, 1150, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1173, 1174, 1177, 1178, 1181, 1182, 1183, 1184, 1187, 1188, 1189, 1190, 1193, 1194, 1195, 1196, 1201, 1202, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1216, 1217, 1219, 1220, 1221, 1222, 1225, 1226, 1229, 1230, 1231, 1232, 1233, 1234, 1237, 1238, 1239, 1240, 1241, 1242, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1285, 1286, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1313, 1314, 1400, 1516, 1527, 1528, 1529, 1530, 1531, 1552, 1553, 1554, 1555, 1556, 1587, 1607, 1608, 1612, 1617, 1618, 1622, 1623, 1626, 1630, 1631, 1632, 1636, 1637, 1639, 1640, 1641, 1642, 1643, 1644, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1658, 1660, 1661, 1664, 1665, 1667, 1669, 1671, 1673, 1674, 1675, 1676, 1677, 1678, 1681, 1682, 1684, 1685, 1687, 1689, 1695, 1698, 1699, 1700, 1702, 1704, 1707, 1708, 1729, 1731, 1732, 1743, 1744, 1745, 1748, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2101, 2102, 2103, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2121, 2122, 2149, 2150, 2151, 2157, 2158, 2159, 2370, 2371, 3488, 3489, 5538, 6150, 6151, 6491, 6492, 6496, 6523, 6530, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6668, 6672, 6675, 6678, 6679, 6680, 6681, 6683, 6684, 6685, 6686, 6690, 6692, 6696, 6699, 6700, 6747, 6748, 6751, 6753, 6754, 6755, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891, 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7324, 7325, 7468, 7469, 7623, 7624, 7631, 7632, 7637, 7638, 7639, 7640, 7641, 7643, 7645, 7646, 7647, 7648, 7649, 7650, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7674, 7675, 7676, 7691, 7692, 7705, 7706, 7713, 7716, 7717, 7718, 7719, 7720, 7721, 7863, 7864, 7915, 7939, 7940, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 8105, 8108, 8114, 8118, 8120, 8173, 8174, 8175, 8176, 8177, 8178, 8180, 8181, 8208, 8218, 8219, 8220, 8224, 8609, 8611, 8612, 8613, 8614, 8615, 8616, 8652, 8655, 8656, 8657, 8658, 8659, 8660, 8678, 8679, 8680, 8681, 8682, 8683, 8684, 8685, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 8703, 8720, 8721, 8723, 8763, 8837, 8838, 8839, 8840, 8869, 8870, 8871, 8872, 8912, 8930, 8941, 8952, 8958, 9158, 9161, 9167, 9168, 9170, 9171, 9182, 9185, 9186, 9187, 9188, 9203, 9471, 9472, 9473, 9474, 9475, 9479, 9480, 9488, 9491, 9492, 9493, 9494, 9495, 9506, 9507, 9508, 9509, 9531, 9532, 9540, 9541, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9617, 9627, 9628, 9629, 9635, 9636, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9648, 9649, 9650, 9651, 9652, 9658, 9665, 9666, 9673, 9674, 9676, 9680, 9681, 9683, 9684, 9693, 9695, 9699, 9703, 9704, 9705, 9707, 9708, 9717, 9718, 9730, 9731, 9738, 9741, 9742, 9745, 9746, 9750, 9751, 9752, 9753, 9754, 9755, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9768, 9769, 9770, 9771, 9775, 9776, 9777, 9781, 9791, 9792, 9793, 9794, 9795, 9796, 9801, 9802, 9803, 9804, 9807, 9808, 9809, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9824, 9825, 9826, 9829, 9830, 9831, 9832, 9833, 9834, 9836, 9837, 9838, 9846, 9847, 9848, 9849, 9850, 9851, 9854, 9855, 9856, 9857, 9858, 9859, 9878, 9879, 9890, 9901, 9916, 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9943, 9945, 9952, 9958, 9959, 9965, 9966, 9967, 9968, 9969, 9970, 9972, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10031, 10033, 10035, 10036, 10039, 10040, 10041, 10042, 10043, 10044, 10069, 10070, 10073, 10074, 10075, 10076, 10103, 10104, 10105, 10106, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10163, 10168, 10213, 10214, 10215, 10216, 10217, 10218, 10228, 10272, 10319, 10329, 10330, 10331, 10332, 10333, 10334, 10335, 10336, 10337, 10338, 10339, 10340, 10341, 10343, 10346, 10347, 10348, 10349, 10353, 10354, 10355, 10359, 10360, 10720, 10721, 10724, 10725, 10726, 10727, 10748, 10749, 10761, 10764, 10766, 11165, 11167, 11409, 13763, 13764, 13821, 13822, 13977, 13978, 13989, 13990, 13993, 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14003, 14004, 14005, 14006, 14007, 14008, 14011, 14012, 14013, 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14025, 14026, 14031, 14032, 14033, 14034, 14073, 14075, 14076, 14077, 14078, 14079, 14080, 14081, 14082, 14083, 14084, 14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 14100, 14101, 14104, 14109, 14115, 14116, 14125, 14126, 14127, 14129, 14843, 14845, 14846, 14847, 14848, 14849, 14850, 14851, 14853, 14854, 14856, 14857, 14859, 14861, 14864, 14865, 14867, 14869, 14870, 14873, 14875, 14876, 14877, 14878, 14879, 14880, 14881, 14882, 14884, 14885, 14886, 14893, 14894, 15597, 15610, 15611, 15612, 15613, 15614, 15615, 15616, 15617, 15618, 15619, 15620, 15621, 15622, 15623, 15624, 15625, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, 15635, 15636, 15637, 15638, 15639, 15640, 15641, 15727, 15728, 15739, 15740, 15767, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15802, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, 15871, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15882, 15883, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 15958, 15959, 15960, 15961, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15972, 15973, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, 16072, 16073, 16074, 16075, 16076, 16077, 16078, 16079, 16080, 16081, 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, 16102, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16133, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, 16142, 16143, 16144, 16145, 16146, 16147, 16148, 16149, 16150, 16151, 16152, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16191, 16192, 16193, 16194, 16195, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16223, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16355, 16370, 16371, 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 18784, 18785, 19071, 19078, 19083, 19133, 19134, 19135, 19136, 20097, 20098, 20099, 20100, 20101, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20196, 20198, 20199, 20200, 20201, 20202, 20204, 20206, 20207, 20208, 20597, 20598, 20693, 20694, 20695, 26530, 26531, 26532, 26533, 26534, 26535, 26544, 26636, 27067, 29730, 29731, 30105, 30218, 30231, 30241, 30242, 30243, 30244, 30245, 30251, 30253, 30254, 30255, 30256, 30257, 30316, 30340, 30341, 30363, 30367, 30404, 30429, 30440, 30582, 30583, 30584, 30585, 30586, 30616, 30623, 30628, 30631, 30651, 30652, 30653, 30654, 30655, 30656, 30666, 30671, 30672, 30683, 30704, 30705, 30706, 30707, 30708, 30713, 30717, 30719, 30729, 30734, 30736, 30737, 30742, 30743, 30748, 30752, 30753, 30754, 30755, 30756, 30774, 30792, 30794, 30795, 30805, 30832, 30833, 30835, 30851, 30859, 30871, 30872, 30876, 30877, 30912, 30913, 30914, 30915, 30916, 30917, 30950, 30970, 30972, 30974, 30976, 30984, 30985, 30986, 30987, 30988, 30989, 30990, 30991, 30993, 30996, 30997, 31002, 31008, 31009, 31010, 31011, 31012, 31019, 31021, 31029, 31031, 31038, 31039, 31040, 31041, 31042, 31043, 31044, 31051, 31052, 31053, 31061, 31062, 31116, 31181, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31564, 31565, 31566, 31567, 31586, 31587, 31589, 31590, 31591, 31592, 31596, 31597, 31603, 31606, 31615, 31617, 31625, 31626, 31627, 31628, 31629, 31630, 31631, 31632, 31650, 31684, 31685, 31697, 31699, 31700, 31703, 31763, 31782, 31787, 11, 1485, 15607, 15635, 18175, 18207, 18246, 18538, 18628, 18726, 19126, 19156, 45, 2185, 2308, 2401, 2485, 2574, 2740, 2838, 2926, 3202, 3348, 3423, 3495, 4929, 5565, 5656, 13428, 14268, 14566, 14576, 14606, 17628, 17664, 18476, 19182, 19285, 19449, 19500, 19606, 19663, 19708, 19782, 19866, 19961, 20042, 20134, 20222, 20299, 20347, 20493, 20557, 20630, 20771, 20933, 21016, 24937, 1, 8777, 1, 9697, 1, 15448, 1, 2046, 1, 31660, 1, 32314, 1, 2003, 1, 13922, 2, 9496, 9498, 29, 16907, 16908, 16909, 16910, 16911, 16912, 16913, 16914, 16915, 16916, 16917, 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16926, 16927, 16928, 16929, 16930, 16931, 16932, 16933, 16934, 16935, 4, 18831, 18832, 18905, 18956, 2, 7856, 7934, 15, 7802, 7803, 7824, 7834, 7839, 7840, 7841, 7842, 7851, 7852, 7955, 7956, 7957, 7958, 9847, 1, 14456, 100, 29776, 29777, 29778, 29779, 29780, 29781, 29782, 29783, 29784, 29785, 29786, 29787, 29788, 29789, 29790, 29791, 29792, 29793, 29794, 29795, 29796, 29797, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29805, 29806, 29807, 29808, 29809, 29810, 29811, 29812, 29813, 29814, 29815, 29816, 29817, 29818, 29819, 29820, 29821, 29822, 29823, 29824, 29825, 29826, 29827, 29828, 29829, 29830, 29831, 29832, 29833, 29834, 29835, 29836, 29837, 29838, 29839, 29840, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29852, 29853, 29854, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29863, 29864, 29865, 29866, 29867, 29868, 29869, 29870, 29871, 29872, 29873, 29874, 29875, 3, 8765, 30238, 30243, 2, 2012, 2013, 2, 30235, 30237, 1, 30380, 1, 32069, 1, 25897, 3, 2555, 20112, 20113, 5, 4198, 5051, 13471, 17457, 17497, 6, 21308, 21354, 21480, 21562, 21599, 22305, 1, 15339, 1, 22606, 110, 1488, 7460, 7916, 8119, 8176, 8177, 8178, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8225, 8226, 8227, 8228, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8673, 8674, 8675, 8676, 8683, 8684, 8685, 8695, 8696, 8697, 8702, 8922, 9152, 9673, 9674, 9675, 9676, 9677, 9678, 9679, 9703, 9704, 9757, 9767, 9784, 9785, 9786, 10176, 10177, 10178, 10179, 10215, 10216, 10217, 10218, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 30785, 30786, 30787, 30788, 31181, 31337, 31338, 31339, 31340, 31422, 31423, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31556, 31557, 31558, 31559, 31560, 31561, 31562, 31563, 1, 12281, 1, 4924, 1, 12417, 1, 32413, 9, 28620, 28663, 28667, 28671, 28675, 28679, 28714, 28718, 28791, 1, 23568, 1, 9749, 1, 27237, 1, 25027, 1, 30179, 1, 7789, 1, 25449, 1, 17831, 1, 25572, 1, 9252, 2, 3873, 11498, 1, 13526, 1, 24766, 1, 29816, 2, 22007, 22244, 1, 30552, 1, 32165, 13, 7733, 7734, 7735, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 9169, 9944, 1, 5591, 2, 309, 310, 3, 8899, 30255, 30427, 1, 12788, 6, 3154, 28940, 28941, 28942, 28943, 28948, 1, 32040, 3, 22009, 22010, 22367, 1, 31977, 1, 25759, 1, 13490, 1, 15281, 1, 12106, 1, 23613, 1, 16775, 1, 17819, 11, 1775, 1776, 18164, 18195, 18230, 18267, 18554, 18609, 18715, 18745, 19145, 1, 32765, 2, 22830, 29205, 3, 10239, 10286, 28995, 1, 13017, 1, 7645, 1, 32152, 1, 5179, 1, 31751, 1, 23041, 1, 12923, 2, 18804, 18805, 1, 32289, 1, 26122, 3, 7530, 7552, 31183, 1, 10571, 1, 9392, 2, 336, 337, 1, 9853, 1, 14044, 1, 22595, 96, 3551, 3552, 3553, 3554, 3586, 3587, 3588, 3622, 4708, 4810, 5953, 5954, 15648, 15652, 15656, 15660, 15664, 15668, 15672, 15676, 15680, 15684, 15688, 15692, 15708, 15712, 15716, 15720, 15726, 15732, 15736, 15760, 15777, 15779, 15801, 16025, 16026, 16027, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, 16042, 16043, 16044, 16045, 16046, 16110, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16360, 16362, 16364, 16366, 16368, 16381, 16387, 16393, 16397, 16401, 16405, 16409, 16421, 16425, 16429, 16433, 16437, 16441, 16445, 16449, 16453, 16457, 16461, 16465, 16469, 16473, 16477, 16485, 20303, 20304, 20305, 2, 10706, 10707, 1, 32286, 1, 30370, 4, 8017, 19132, 19133, 30717, 1, 12350, 1, 7679, 1, 23413, 1, 25103, 1, 25652, 1, 23784, 2, 26689, 26764, 1, 9223, 10, 6472, 6473, 6474, 6475, 6477, 6478, 6479, 6484, 6485, 6486, 2, 26815, 26823, 3, 3057, 3058, 3060, 1, 23347, 1, 30415, 1, 23896, 1, 7895, 1, 6280, 1, 32690, 2, 27489, 27512, 1, 11504, 1, 12704, 1, 25933, 1, 26028, 1, 21218, 1, 22488, 1, 23160, 1, 25937, 1, 25302, 1, 30451, 1, 8617, 2, 1031, 1063, 1, 5200, 1, 15253, 1, 29182, 3, 2990, 7558, 21098, 1, 8168, 1, 22694, 1, 3158, 1, 26408, 2, 28825, 28924, 1, 11769, 1, 15173, 4, 8475, 8541, 8542, 8543, 1, 7813, 1, 9475, 1, 23934, 1, 30270, 1, 15176, 1, 9415, 1, 8736, 1, 17754, 1, 22911, 1, 23999, 1, 18070, 1, 9919, 2, 26740, 26760, 1, 12510, 2, 26991, 26994, 1, 23948, 2, 3087, 3088, 1, 22292, 1, 24677, 2, 1355, 8112, 15, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3290, 3291, 3337, 3481, 3482, 3484, 3485, 12750, 1, 17547, 1, 32142, 1, 15508, 1, 17789, 1, 2070, 2, 17862, 23801, 1, 25501, 1, 25513, 2, 27579, 27603, 2, 215, 247, 17, 1474, 1475, 15606, 15628, 17360, 18168, 18199, 18237, 18238, 18271, 18297, 18534, 18617, 18719, 19068, 19105, 19149, 39, 3130, 3136, 3220, 3277, 4136, 4415, 4668, 4914, 4987, 5330, 8915, 11224, 11318, 11831, 12575, 13670, 14161, 14736, 14737, 14930, 16631, 16752, 18126, 27037, 28408, 28423, 28431, 28432, 28440, 28448, 28449, 30716, 30757, 30841, 31052, 31154, 31156, 31162, 31166, 1, 23282, 1, 29957, 1, 12953, 1, 22540, 1, 22820, 1, 17416, 1, 25532, 1, 31032, 1, 8238, 1, 32229, 11, 13763, 13764, 17124, 27233, 29775, 29776, 29826, 29876, 30752, 30857, 31611, 1, 15054, 1, 22664, 1, 25590, 143, 26497, 26498, 26499, 26500, 26501, 26502, 26503, 26504, 26505, 26506, 26507, 26508, 26509, 26510, 26511, 26512, 26513, 26514, 26515, 26516, 26517, 26518, 26519, 26520, 26521, 26522, 26523, 26524, 26525, 26526, 26527, 26528, 26529, 26530, 26531, 26532, 26533, 26534, 26535, 26536, 26537, 26538, 26539, 26540, 26541, 26542, 26543, 26544, 26545, 26546, 26547, 26548, 26549, 26550, 26551, 26552, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26560, 26561, 26562, 26563, 26564, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26575, 26576, 26577, 26578, 26579, 26580, 26581, 26582, 26583, 26584, 26585, 26586, 26587, 26588, 26589, 26590, 26591, 26592, 26593, 26594, 26595, 26596, 26597, 26598, 26599, 26600, 26601, 26602, 26603, 26604, 26605, 26606, 26607, 26608, 26609, 26610, 26611, 26612, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 26626, 26627, 26628, 26629, 26630, 26631, 26632, 26633, 26634, 26635, 26636, 26637, 26638, 26639, 1, 30190, 1, 12633, 1, 16913, 1, 13084, 1, 13100, 1, 16919, 6, 21400, 21401, 21402, 21403, 21404, 21405, 1, 16924, 1, 26348, 9, 7796, 7837, 7838, 7841, 7842, 7845, 7846, 7861, 7862, 1, 23366, 1, 26663, 1, 32782, 1, 32334, 3, 10262, 10309, 29015, 1, 25487, 1, 26092, 1, 32815, 1, 17285, 27, 21957, 21958, 21959, 21960, 21961, 21962, 21963, 21964, 21965, 21966, 21967, 21968, 21969, 21970, 21971, 21972, 21973, 21974, 21975, 21976, 21977, 21978, 21979, 21980, 22362, 22363, 22364, 1, 26746, 1, 9706, 1, 9565, 1, 29177, 26, 885, 886, 887, 918, 949, 950, 997, 1004, 1008, 1009, 1010, 27995, 28020, 28021, 28053, 28078, 28079, 28111, 28136, 28137, 28169, 28194, 28195, 28227, 28252, 28253, 88, 8686, 9175, 9176, 9757, 9814, 9815, 9979, 10010, 10011, 10019, 10068, 18703, 18704, 18705, 18706, 24154, 28558, 28597, 28599, 28602, 28604, 28608, 28612, 28619, 28633, 28636, 28640, 28643, 28646, 28649, 28662, 28666, 28670, 28674, 28678, 28693, 28697, 28700, 28703, 28713, 28717, 28723, 28726, 28730, 28733, 28757, 28759, 28761, 28763, 28765, 28767, 28769, 28774, 28776, 28778, 28780, 28782, 28784, 28790, 28797, 28808, 28811, 28821, 30779, 30780, 30781, 30782, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31435, 31436, 31437, 31446, 31447, 31448, 31449, 31462, 31463, 31464, 31465, 31627, 1, 31166, 1, 24327, 1, 23661, 1, 32594, 1, 24080, 1, 6143, 1, 31057, 1, 9700, 1, 10573, 1, 22773, 1, 24803, 1, 797, 1, 3151, 1, 17323, 1, 9946, 1, 8951, 1, 16255, 1, 16821, 1, 25104, 1, 12335, 1, 29311, 1, 8015, 1, 13296, 1, 26121, 1, 1882, 1, 3865, 1, 28833, 1, 25399, 1, 23907, 2, 216, 248, 1, 26191, 1, 7275, 1, 7517, 1, 32018, 12, 21945, 21946, 21947, 21948, 21949, 21950, 21951, 21952, 21953, 22037, 22360, 22361, 1, 32332, 2, 2989, 21096, 3, 26773, 26774, 26775, 2, 27626, 27647, 1, 13140, 1, 25799, 1, 1895, 1, 31636, 1, 9431, 1, 23407, 1, 25677, 1, 22975, 2, 26972, 26973, 3, 5423, 5846, 5862, 1, 8744, 1, 23554, 1, 11806, 1, 29840, 1, 12269, 8, 757, 759, 23446, 23910, 27003, 27005, 27007, 27009, 1, 32059, 2, 323, 324, 2, 10279, 10326, 1, 14299, 1, 26260, 1, 17769, 2, 26867, 26871, 1, 17751, 1, 7280, 40, 1465, 1771, 1778, 3685, 3725, 4001, 4394, 4844, 4920, 6447, 10517, 11234, 11328, 11592, 11835, 12817, 13675, 14909, 15603, 15620, 16635, 17244, 17679, 18160, 18191, 18225, 18226, 18263, 18289, 18531, 18601, 18699, 18711, 18741, 18768, 19060, 19061, 19098, 19141, 29267, 1, 22546, 2, 24063, 24484, 1, 23356, 6, 28329, 28343, 28359, 28372, 28373, 28374, 1, 7475, 6, 17746, 24270, 30742, 30861, 30865, 30866, 1, 32626, 1, 25707, 1, 7512, 1, 7938, 1, 12888, 2, 660, 680, 1, 4607, 31, 17346, 17347, 17348, 17349, 17350, 17351, 17352, 17353, 17354, 17355, 17356, 17357, 17358, 17359, 17360, 17361, 17362, 17363, 17364, 17365, 17366, 17367, 17368, 17369, 17370, 17371, 17372, 17373, 17374, 17375, 17376, 1, 12574, 1, 21112, 1, 24288, 1, 25758, 4, 10069, 28902, 28903, 28904, 1, 24250, 1, 23951, 1, 5635, 1, 23150, 2, 17316, 17344, 3, 5848, 5864, 12445, 1, 1433, 1, 23199, 91, 14475, 14476, 14477, 14478, 14479, 14480, 14481, 14482, 14483, 14484, 14485, 14486, 14487, 14488, 14489, 14490, 14491, 14492, 14493, 14494, 14495, 14496, 14497, 14498, 14499, 14500, 14501, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14519, 14520, 14521, 14522, 14523, 14524, 14525, 14526, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14536, 14537, 14538, 14539, 14540, 14541, 14542, 14543, 14544, 14545, 14546, 14547, 14548, 14549, 14550, 14551, 14552, 14553, 14554, 14555, 14556, 14557, 14558, 14559, 14560, 14561, 14562, 14563, 14564, 14565, 2, 30422, 31732, 1, 25657, 1, 29323, 1, 12718, 1, 9885, 1, 24468, 1, 728, 1, 30856, 1, 12175, 2, 975, 976, 1, 6708, 1, 4251, 1, 22824, 1, 22928, 1, 3141, 5, 21784, 21785, 21786, 21787, 21788, 1, 3129, 1, 22790, 1, 22697, 4, 10833, 11018, 30301, 31690, 1, 6203, 1, 32775, 1, 17824, 1, 29326, 1, 29836, 2, 9183, 9657, 1, 18291, 1, 23582, 2, 12140, 12174, 1, 22798, 1, 16908, 1, 23726, 1, 23032, 1, 25471, 1, 15275, 1, 32342, 1, 32618, 7, 9169, 9626, 9631, 9632, 9637, 9638, 9944, 1, 29303, 1, 8834, 1, 17988, 5, 9745, 9746, 9747, 30378, 30607, 1, 25805, 1, 13249, 14, 1049, 1081, 1191, 1192, 4292, 4448, 5077, 10678, 13779, 13780, 14963, 17274, 17275, 24970, 1, 31997, 1, 31982, 2, 22384, 23462, 9, 3304, 3305, 3306, 10222, 10223, 10224, 10225, 10226, 10227, 1, 28852, 1, 29143, 1, 13333, 1, 23756, 1, 22460, 2, 983, 984, 1, 23130, 1, 10642, 2, 17910, 23856, 1, 17200, 4, 4876, 19382, 20394, 20426, 1, 25301, 1, 10924, 1, 29798, 1, 31614, 2, 1214, 1215, 1, 15178, 1, 23747, 1, 13274, 1, 26029, 1, 5681, 1, 6337, 1, 7481, 1, 25894, 1, 25646, 3, 5637, 14809, 19389, 1, 26450, 1, 12611, 1, 17975, 12, 8268, 16984, 20851, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27305, 27306, 1, 23135, 1, 22202, 1, 12940, 1, 22889, 1, 23178, 1, 25239, 1, 4125, 1, 19339, 2, 20614, 20688, 2, 27079, 27080, 1, 24128, 1, 32613, 3, 8856, 8940, 8941, 2, 11046, 28948, 3, 6116, 29403, 29437, 1, 10646, 1, 31775, 1, 32198, 1, 24730, 2, 12382, 24508, 1, 12598, 11, 11097, 28838, 28839, 28840, 28880, 28881, 28882, 28883, 30532, 30538, 31116, 1, 9073, 1, 1978, 2, 17863, 23802, 1, 22755, 7, 28748, 28749, 28750, 28751, 28752, 28753, 28754, 1, 22660, 1, 5120, 5, 6381, 11529, 21231, 21232, 21475, 1, 4942, 5, 8609, 8949, 12139, 28917, 31181, 1, 19217, 1, 7503, 1, 4121, 1, 31735, 1, 15013, 1, 23955, 23, 2247, 2279, 3165, 3596, 5456, 5491, 5514, 5746, 5808, 5970, 6618, 13436, 14089, 14090, 14399, 14647, 14763, 18910, 18911, 18961, 18962, 20545, 20617, 1, 32669, 1, 9265, 2, 21772, 22050, 1, 19568, 1, 20317, 1, 24160, 1, 25534, 1, 26451, 2, 24034, 24041, 1, 22846, 1, 26073, 1, 29773, 2, 1804, 1805, 1, 22815, 1, 8770, 1, 7975, 3, 4162, 4598, 4599, 2, 3085, 3086, 2, 27630, 27655, 1, 23014, 1, 30896, 1, 12411, 1, 181, 2, 5602, 10574, 3, 5990, 14781, 14976, 1, 3904, 1, 9663, 15, 3370, 3445, 5737, 6307, 13413, 14208, 17623, 17659, 20579, 20653, 20871, 20901, 24943, 24945, 24947, 1, 9737, 1, 25957, 11, 169, 1402, 4472, 5431, 7271, 7272, 7322, 10717, 10720, 10758, 11272, 1, 22731, 1, 32370, 10, 3042, 3044, 3048, 3050, 3055, 3057, 3061, 3063, 3067, 3069, 1, 23739, 1, 9438, 1, 32065, 1, 25417, 1, 15497, 2, 1768, 1776, 1, 23586, 3, 10016, 10017, 10018, 1, 12666, 1, 12128, 1, 32829, 1, 13006, 1, 25499, 1, 15057, 1, 12159, 1, 26412, 3, 14841, 14852, 14853, 2, 124, 7277, 1, 8620, 3, 3387, 4984, 18505, 1, 26320, 1, 24344, 1, 16867, 3, 1500, 7752, 31778, 1, 8127, 1, 9628, 18, 28358, 28371, 28372, 28401, 28415, 28424, 28433, 28434, 28441, 28443, 28547, 28548, 28569, 28838, 28891, 28900, 28909, 28912, 1, 29245, 2, 22331, 22365, 3, 31251, 31256, 31257, 1, 29145, 1, 5991, 2, 3253, 3254, 1, 30231, 2, 17953, 24020, 1, 4168, 1, 25914, 2, 5813, 14700, 1, 25002, 1, 9935, 1, 30487, 2, 4673, 4674, 2, 30945, 30946, 2, 4694, 4695, 1, 23880, 1, 7958, 3, 1407, 1438, 1443, 1, 13043, 1, 22559, 1, 6335, 123, 28319, 28325, 28327, 28328, 28329, 28330, 28331, 28333, 28335, 28336, 28337, 28338, 28339, 28340, 28341, 28342, 28343, 28344, 28345, 28347, 28348, 28349, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28393, 28453, 28458, 28459, 28461, 28462, 28463, 28464, 28465, 28466, 28470, 28471, 28472, 28473, 28475, 28479, 28483, 28488, 28490, 28493, 28494, 28495, 28499, 28500, 28501, 28502, 28503, 28505, 28515, 28517, 28519, 28520, 28522, 28523, 28524, 28539, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28553, 28554, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28572, 28573, 28574, 28575, 28576, 28577, 28578, 28579, 1, 7949, 113, 840, 6763, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7801, 7806, 7807, 7808, 7811, 7812, 7817, 7818, 7820, 7821, 7825, 7826, 7827, 7828, 7829, 7830, 7837, 7838, 7849, 7850, 7859, 7860, 7861, 7862, 7863, 7864, 7870, 7871, 7905, 7906, 7938, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7961, 7962, 8037, 8092, 9588, 9838, 9839, 9843, 9844, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9862, 9863, 9866, 9867, 9868, 9869, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9895, 9896, 9899, 9900, 9904, 9905, 9908, 9909, 9910, 9911, 9912, 9913, 9922, 9923, 9928, 9929, 9930, 9931, 9936, 9937, 9976, 9977, 10049, 10055, 10057, 1, 7786, 1, 9371, 2, 17883, 23825, 14, 8756, 10806, 10807, 10973, 11643, 11739, 12141, 30225, 30474, 31159, 31160, 31173, 31225, 31646, 3, 3811, 3978, 11490, 1, 25338, 6, 15111, 15112, 32833, 32834, 32835, 32836, 1, 9866, 65, 881, 1458, 2371, 8138, 8141, 8144, 8147, 8150, 8154, 8157, 8158, 8560, 8561, 8576, 8577, 8578, 8579, 8580, 8581, 8582, 8597, 8598, 8600, 8601, 8602, 8603, 8605, 8606, 8614, 8615, 8657, 8666, 8669, 8670, 8672, 8673, 8674, 8681, 8688, 8689, 8692, 8693, 8697, 8702, 8962, 8973, 9038, 9040, 9132, 9134, 9170, 9533, 9534, 10004, 11113, 11168, 13957, 28915, 28916, 30789, 30864, 30865, 30866, 30867, 30868, 3, 4264, 4948, 13612, 30, 4345, 11173, 11673, 11689, 11690, 11691, 11692, 11693, 11694, 11776, 11777, 11778, 11779, 12108, 16950, 16977, 17030, 17221, 18412, 18437, 19035, 19091, 19249, 19585, 20470, 20844, 29471, 29498, 29539, 29566, 4, 8725, 8726, 8904, 8905, 1, 15088, 2, 17901, 23846, 1, 23212, 1, 24436, 1, 25961, 1, 29870, 1, 3887, 1, 25234, 1, 32285, 1, 13243, 1, 26454, 4, 3386, 3461, 3462, 3463, 1, 8829, 1, 25838, 1, 27239, 1, 32593, 1, 25402, 2, 4925, 14147, 26, 1330, 1376, 3154, 3157, 3236, 3239, 3277, 3278, 4002, 4396, 4847, 4922, 11237, 11331, 11593, 11836, 12814, 13636, 14171, 14756, 14757, 14782, 14911, 16636, 17351, 29269, 6, 4214, 5001, 13476, 17442, 17482, 29245, 1, 22982, 1, 30715, 2, 22406, 23482, 1, 32258, 1, 3118, 1, 26385, 1, 26753, 1, 17161, 2, 3286, 3485, 2, 3412, 3417, 1, 12330, 1, 31062, 1, 6406, 83, 29876, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 29920, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 29935, 29936, 29937, 29938, 29939, 29940, 29941, 29942, 29943, 29944, 29945, 29946, 29947, 29948, 29949, 29950, 29951, 29952, 29953, 29954, 29955, 29956, 29957, 30395, 1, 14465, 1, 10352, 1, 1916, 3, 6379, 11408, 19356, 1, 24476, 1, 12265, 1, 31329, 1, 12215, 3, 6475, 6477, 6480, 1, 16858, 1, 30263, 1, 30381, 1, 17061, 1, 8711, 1, 32019, 1, 13299, 1, 32201, 1, 8936, 1, 6197, 1, 12204, 1, 25330, 1, 11872, 1, 29085, 1, 23475, 4, 3293, 9156, 9157, 9599, 1, 12567, 1, 15447, 3, 26940, 26941, 28828, 1, 15197, 1, 9582, 1, 24068, 547, 35, 1494, 1499, 2707, 2708, 2709, 2717, 3006, 3007, 3008, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 8285, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8445, 9086, 9096, 9106, 11122, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11678, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11687, 11688, 11689, 11690, 11691, 11692, 11693, 11694, 11776, 11777, 11778, 11779, 11780, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 11790, 16342, 16497, 16939, 16940, 16941, 16942, 16943, 16944, 16945, 16946, 16947, 16948, 16949, 16950, 16951, 16952, 16953, 16954, 16955, 16956, 16957, 16958, 16959, 16960, 16961, 16962, 16963, 16964, 16965, 16966, 16967, 16968, 16969, 16970, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 16979, 16980, 16981, 16982, 16983, 17219, 17220, 17221, 17222, 17223, 17224, 17225, 17226, 17227, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17422, 17423, 17424, 17425, 17426, 18179, 18180, 18181, 18182, 18183, 18184, 18185, 18186, 18212, 18213, 18214, 18215, 18216, 18217, 18218, 18250, 18251, 18252, 18253, 18254, 18255, 18256, 18257, 18258, 18280, 18281, 18282, 18283, 18284, 18307, 18308, 18309, 18310, 18311, 18312, 18401, 18402, 18403, 18404, 18405, 18406, 18407, 18408, 18409, 18410, 18411, 18412, 18413, 18414, 18415, 18416, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18425, 18426, 18427, 18428, 18429, 18430, 18431, 18432, 18433, 18434, 18435, 18436, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18517, 18518, 18519, 18520, 18560, 18561, 18592, 18593, 18594, 18634, 18635, 18636, 18637, 18638, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, 18756, 18757, 18758, 18759, 18760, 18761, 18762, 18763, 18786, 18787, 18788, 18789, 18790, 18791, 18792, 18968, 18969, 18970, 18971, 18972, 18973, 19033, 19034, 19035, 19036, 19037, 19038, 19039, 19040, 19041, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19084, 19085, 19086, 19087, 19088, 19089, 19090, 19091, 19092, 19128, 19129, 19130, 19131, 19238, 19239, 19240, 19241, 19242, 19243, 19244, 19245, 19246, 19247, 19248, 19249, 19250, 19251, 19252, 19253, 19254, 19255, 19256, 19257, 19268, 19330, 19335, 19583, 19584, 19585, 19586, 19587, 19588, 19589, 19590, 19591, 19592, 19593, 20328, 20329, 20468, 20469, 20470, 20471, 20472, 20473, 20474, 20475, 20476, 20833, 20834, 20835, 20836, 20837, 20838, 20839, 20840, 20841, 20842, 20843, 20844, 20845, 20846, 20847, 20848, 20849, 20850, 21124, 24759, 24760, 24761, 24762, 24763, 24764, 24765, 24880, 24881, 24882, 24883, 24884, 24885, 24886, 24887, 24888, 24889, 29365, 29366, 29367, 29368, 29369, 29370, 29371, 29460, 29461, 29462, 29463, 29464, 29465, 29466, 29467, 29468, 29469, 29470, 29471, 29472, 29473, 29474, 29475, 29476, 29477, 29478, 29479, 29480, 29481, 29482, 29483, 29484, 29485, 29486, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29502, 29503, 29504, 29505, 29506, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29517, 29518, 29524, 29525, 29526, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29536, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 32500, 1, 11927, 1, 4364, 1, 1424, 126, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 19213, 19214, 19215, 21083, 21084, 21085, 21086, 21087, 21088, 21089, 21090, 21091, 21092, 21093, 21094, 21095, 21096, 21097, 21098, 21099, 21100, 21101, 21102, 21103, 21104, 21105, 21106, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21117, 21118, 21119, 21120, 21121, 21122, 21123, 21124, 21125, 21126, 21127, 21128, 21129, 21130, 21131, 21132, 21133, 2, 8025, 8208, 1, 30529, 1, 13133, 1, 25633, 3, 156, 7302, 16494, 1, 22589, 1, 30761, 1, 23547, 1, 22650, 4, 16834, 17545, 31199, 31291, 1, 12724, 1, 16796, 7, 28396, 28398, 28400, 28411, 28413, 28565, 28579, 1, 32606, 1, 10616, 2, 10449, 10450, 1, 11871, 1, 22714, 1, 29856, 1, 10618, 1, 26101, 2, 12472, 24348, 2, 30415, 30416, 1, 9242, 1, 25432, 2, 26782, 26786, 1, 24151, 35, 19336, 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19347, 19348, 19349, 19350, 19351, 19352, 19353, 19354, 19355, 19356, 19357, 19358, 19359, 19360, 19361, 19362, 19363, 19364, 19365, 19366, 19367, 19368, 19369, 19370, 1, 5989, 2, 14783, 29146, 1, 23297, 1, 32075, 1, 15218, 1, 32401, 9, 186, 2642, 3011, 8581, 8585, 14183, 17049, 21102, 29522, 1, 9254, 1, 11860, 1, 25867, 1, 13060, 3, 18527, 19237, 31790, 1, 15224, 24, 1038, 1070, 1208, 1209, 1285, 1286, 1299, 1300, 1313, 1314, 1715, 6554, 9880, 10669, 13783, 13784, 17248, 17461, 17501, 18888, 18939, 21284, 21333, 21334, 2, 20419, 20451, 2, 24810, 24842, 2, 31155, 31156, 1, 17164, 3, 17016, 17044, 17045, 1, 11875, 1, 12837, 1, 23540, 2, 7475, 27639, 1, 22842, 2, 321, 322, 1, 27247, 1, 23770, 1, 14610, 1, 31936, 1, 5593, 1, 13142, 1, 23675, 7, 2808, 2809, 2810, 2811, 20411, 20443, 21126, 1, 4842, 1, 24241, 1, 32706, 1, 23185, 89, 1943, 2205, 2327, 2420, 2504, 2593, 2759, 2857, 2946, 3366, 3441, 3515, 3619, 4085, 5240, 5260, 5283, 5303, 5331, 5460, 5493, 5670, 5789, 5792, 5875, 5923, 5961, 6083, 6084, 6187, 6232, 6233, 6302, 6467, 11226, 11320, 12211, 13399, 13529, 14205, 14287, 14386, 14416, 14514, 14515, 14595, 14626, 14996, 17395, 17556, 18347, 18379, 18493, 18975, 19201, 19306, 19467, 19519, 19626, 19682, 19730, 19801, 19888, 19980, 20061, 20153, 20241, 20284, 20302, 20366, 20512, 20575, 20649, 20710, 20790, 20868, 20898, 20952, 21007, 21062, 21198, 22290, 24604, 24661, 24898, 29102, 29187, 29376, 29410, 1, 8132, 1, 28914, 1, 26322, 1, 25820, 1, 12433, 1, 22504, 1, 9362, 1, 9759, 7, 28608, 28609, 28610, 28611, 28612, 28613, 28614, 1, 14534, 1, 19923, 25, 4102, 11213, 11214, 11307, 11308, 11824, 12485, 13368, 13611, 16605, 16624, 16777, 17389, 18147, 21907, 21977, 22036, 24043, 24119, 24121, 24135, 24304, 29229, 29398, 29432, 1, 24289, 1, 16779, 1, 22538, 1, 24725, 1, 24895, 1, 25106, 5, 10121, 10122, 10123, 10124, 20097, 2, 4439, 14954, 1, 9246, 1, 23140, 1, 15184, 1, 23302, 2, 2220, 2277, 5, 1670, 15717, 15718, 15719, 15720, 1, 11886, 1, 12005, 1, 14542, 1, 25530, 1, 26072, 1, 7919, 3, 6110, 14549, 14550, 1, 32315, 1, 32727, 1, 13078, 1, 16761, 1, 12260, 1, 32623, 1, 6084, 4, 4122, 17700, 18153, 18663, 1, 10196, 1, 12475, 1, 22612, 1, 25078, 2, 3339, 3340, 2, 8270, 8274, 1, 32811, 1, 9236, 1, 22120, 1, 11505, 1, 10661, 2, 6045, 6139, 1, 13241, 2, 2380, 2638, 1, 32421, 6, 6725, 13987, 13988, 13989, 13990, 24775, 1, 10209, 1, 13921, 1, 9803, 1, 26204, 1, 25959, 1, 807, 2, 4534, 4535, 1, 23059, 1, 15158, 5, 21423, 21669, 21670, 21671, 21672, 1, 3882, 1, 17205, 1, 32174, 1, 4841, 1, 96, 1, 30771, 1, 25924, 1, 18262, 1, 10567, 1, 9469, 1, 18049, 1, 12736, 1, 25948, 1, 13004, 1, 16860, 1, 24077, 1, 32361, 31, 18156, 18157, 18158, 18159, 18160, 18161, 18162, 18163, 18164, 18165, 18166, 18167, 18168, 18169, 18170, 18171, 18172, 18173, 18174, 18175, 18176, 18177, 18178, 18179, 18180, 18181, 18182, 18183, 18184, 18185, 18186, 1, 11560, 3, 7291, 7292, 16296, 2, 15109, 15110, 1, 9467, 2, 6223, 6464, 1, 16817, 1, 22659, 1, 12981, 1, 22509, 1, 32196, 1, 32424, 1, 29797, 5, 10886, 10887, 10888, 11101, 30505, 1, 7897, 1, 30564, 2, 9147, 9148, 2, 6277, 6282, 1, 17764, 1, 29278, 3, 21425, 21426, 31294, 1, 497, 1, 17810, 1, 23954, 5, 4492, 4493, 4494, 13563, 29172, 1, 22907, 1, 15444, 2, 17075, 17076, 1, 25062, 1, 25702, 1, 5028, 2, 8849, 8910, 3, 13880, 24518, 24574, 5, 2081, 2202, 2669, 2943, 19215, 1, 22583, 770, 1583, 1584, 1585, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2023, 2024, 2025, 2027, 2028, 2029, 2030, 2219, 2220, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2239, 2240, 2246, 2247, 2248, 2259, 2260, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2358, 2359, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2476, 2479, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2535, 2536, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2626, 2627, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2795, 2796, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2891, 2892, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2994, 2995, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3109, 3110, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3252, 3255, 3256, 3257, 3258, 3259, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3404, 3405, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3578, 3579, 3580, 3581, 3590, 3595, 3596, 3605, 3606, 3607, 3608, 3623, 3624, 3625, 3626, 3648, 3649, 4322, 4323, 5247, 5248, 5268, 5269, 5291, 5292, 5309, 5310, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5439, 5485, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5893, 5894, 5895, 5896, 5897, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6199, 6200, 6201, 6202, 6203, 6204, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 14172, 14173, 14174, 14175, 14176, 14300, 14301, 14302, 14303, 14304, 14305, 14306, 14307, 14308, 14309, 14310, 14311, 14312, 14313, 14314, 14360, 14399, 14400, 14401, 14402, 14403, 14432, 14433, 14434, 14435, 14436, 14437, 14438, 14439, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14638, 14639, 14640, 14641, 14642, 14643, 14644, 14645, 14646, 14647, 14761, 14762, 14763, 14764, 14765, 14766, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14795, 14796, 14797, 14798, 14799, 14805, 15010, 15011, 15012, 15013, 15014, 15015, 15016, 15017, 18464, 18465, 18466, 18467, 18468, 18469, 19003, 19004, 19005, 19006, 19007, 19216, 19217, 19218, 19219, 19220, 19221, 19222, 19223, 19224, 19225, 19226, 19227, 19228, 19229, 19317, 19318, 19319, 19320, 19321, 19322, 19323, 19324, 19325, 19410, 19411, 19412, 19413, 19414, 19415, 19416, 19417, 19418, 19419, 19439, 19440, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19555, 19556, 19637, 19638, 19639, 19640, 19641, 19642, 19643, 19644, 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19816, 19817, 19818, 19819, 19820, 19821, 19822, 19823, 19824, 19825, 19826, 19835, 19836, 19902, 19903, 19904, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19991, 19992, 19993, 19994, 19995, 19996, 19997, 19998, 19999, 20000, 20001, 20002, 20003, 20004, 20005, 20072, 20073, 20074, 20075, 20076, 20077, 20078, 20079, 20080, 20081, 20082, 20115, 20116, 20165, 20166, 20167, 20168, 20169, 20170, 20171, 20172, 20173, 20174, 20175, 20176, 20177, 20254, 20255, 20256, 20257, 20258, 20259, 20260, 20261, 20262, 20306, 20307, 20308, 20309, 20310, 20311, 20312, 20313, 20314, 20315, 20316, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20385, 20386, 20387, 20388, 20525, 20526, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20542, 20544, 20545, 20546, 20547, 20548, 20549, 20550, 20551, 20552, 20553, 20616, 20617, 20618, 20619, 20620, 20621, 20622, 20623, 20624, 20625, 20626, 20801, 20802, 20803, 20804, 20805, 20806, 20807, 20808, 20809, 20810, 20811, 20812, 20913, 20914, 20915, 20916, 20917, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 21035, 21036, 21037, 21038, 21039, 21040, 21041, 21042, 21043, 21077, 21078, 21079, 21080, 24679, 24680, 24681, 24682, 24683, 24684, 24685, 24686, 24687, 24688, 24689, 24690, 24691, 24692, 24693, 24694, 24695, 24696, 24697, 24698, 24699, 24700, 24701, 24702, 24703, 24704, 24705, 24706, 24977, 24978, 24979, 24980, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 24999, 25000, 25001, 25002, 25003, 25004, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25015, 25016, 25017, 25018, 25019, 25020, 25021, 25022, 25023, 25024, 25025, 25026, 25027, 25028, 29441, 2, 9030, 9031, 2, 6341, 6342, 1, 23702, 1, 25545, 1, 31787, 2, 22445, 23525, 1, 11005, 1, 25235, 1, 25475, 1, 5386, 2, 10621, 12918, 1, 23223, 1, 26022, 2, 26682, 26733, 1, 32452, 2, 1021, 1101, 8, 14700, 14701, 14702, 18399, 18400, 23910, 23911, 29098, 1, 9664, 1, 23419, 1, 32189, 1, 25167, 1, 7638, 1, 22749, 1, 26215, 1, 23949, 1, 3152, 2, 9191, 9193, 1, 24299, 1, 31750, 1, 13196, 1, 26900, 1, 16827, 69, 95, 124, 708, 712, 777, 778, 805, 814, 815, 836, 1819, 1820, 6033, 6772, 6773, 6780, 6781, 6818, 6819, 6824, 6825, 6838, 6839, 6860, 6861, 6876, 6877, 6914, 6915, 6916, 7277, 7278, 7295, 7442, 7443, 7477, 7547, 7988, 8108, 8114, 8156, 8165, 8166, 8189, 8247, 8682, 9625, 9745, 9746, 9747, 9966, 9967, 10756, 10890, 11170, 16299, 16300, 16325, 16326, 16327, 16557, 16586, 16936, 18645, 19235, 26623, 26632, 32560, 32589, 4, 7822, 7823, 9700, 9830, 1, 25494, 1, 10199, 5, 7537, 7742, 8159, 8160, 9738, 1, 13564, 160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 14329, 14330, 14331, 14332, 14333, 14334, 14335, 14336, 14337, 14338, 14339, 14340, 14341, 14342, 14343, 14344, 14345, 14346, 14347, 14348, 14349, 14350, 14351, 14352, 14353, 14354, 14355, 14356, 14357, 14358, 14359, 14360, 3, 1750, 1752, 1757, 1, 30466, 7, 10845, 11037, 30643, 30959, 30960, 30961, 30962, 5, 64, 7337, 16353, 16526, 32529, 1, 31665, 7, 3118, 3203, 4873, 5315, 12796, 14720, 14721, 13, 4312, 4960, 11233, 11327, 12255, 13602, 16758, 17366, 18132, 20418, 20450, 24447, 29301, 1, 8723, 1, 24316, 1, 15311, 1, 5403, 1, 17823, 1, 9253, 1, 23075, 5, 10014, 10015, 10066, 10067, 10173, 1, 26265, 1, 26281, 2, 21533, 24701, 1, 7293, 2, 9497, 9499, 1, 32384, 2, 7622, 7686, 2, 3797, 15094, 1, 8883, 1, 29292, 1, 9598, 1, 12776, 4, 10828, 16820, 17114, 30486, 2, 10545, 10546, 1, 20332, 1, 22259, 1, 5091, 1, 9926, 1, 24790, 86, 2016, 2017, 2018, 2167, 2223, 2294, 2339, 2389, 2432, 2469, 2518, 2560, 2607, 2649, 2683, 2724, 2774, 2822, 2872, 2910, 2964, 3161, 3243, 3389, 3535, 3536, 3623, 4149, 4190, 4483, 5364, 5365, 5800, 5966, 5967, 6321, 13981, 13982, 14250, 14300, 14638, 14761, 17582, 18647, 18867, 18918, 19166, 19216, 19217, 19273, 19317, 19374, 19439, 19484, 19531, 19595, 19637, 19695, 19742, 19768, 19816, 19850, 19902, 19945, 19991, 20026, 20072, 20118, 20165, 20210, 20254, 20307, 20335, 20378, 20479, 20525, 20756, 20801, 20913, 20921, 20967, 20996, 21035, 24978, 29066, 29100, 1, 30362, 83, 14597, 14598, 14599, 14600, 14601, 14602, 14603, 14604, 14605, 14606, 14607, 14608, 14609, 14610, 14611, 14612, 14613, 14614, 14615, 14616, 14617, 14618, 14619, 14620, 14621, 14622, 14623, 14624, 14625, 14626, 14627, 14628, 14629, 14630, 14631, 14632, 14633, 14634, 14635, 14636, 14637, 14638, 14639, 14640, 14641, 14642, 14643, 14644, 14645, 14646, 14647, 14648, 14649, 14650, 14651, 14652, 14653, 14654, 14655, 14656, 14657, 14658, 14659, 14660, 14661, 14662, 14663, 14664, 14665, 14666, 14667, 14668, 14669, 14670, 14671, 14672, 14673, 14674, 14675, 14676, 14677, 14678, 14679, 1, 25210, 1, 15229, 1, 21113, 108, 386, 396, 592, 599, 600, 601, 602, 662, 762, 2145, 2146, 2147, 6034, 6035, 6154, 6155, 6158, 6159, 6162, 6519, 6527, 6529, 6586, 6587, 6594, 6658, 6659, 6662, 6670, 6722, 7655, 7656, 8106, 8272, 8986, 8987, 9002, 9009, 9019, 9025, 9154, 9155, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9932, 9933, 10093, 10094, 10905, 10910, 14102, 14854, 14889, 28403, 28404, 28427, 28429, 28431, 28433, 28435, 28442, 28443, 28446, 28448, 28556, 28557, 28851, 28856, 28857, 28895, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28906, 28907, 30551, 30665, 30685, 30707, 30708, 30728, 30729, 30730, 30731, 30746, 30920, 30986, 30987, 30988, 30989, 31021, 31029, 31031, 31041, 31097, 31098, 31631, 1, 12333, 2, 22426, 23503, 1, 25697, 1, 32291, 10, 1338, 1384, 4099, 5339, 11362, 12419, 13649, 14754, 14755, 29350, 1, 9422, 137, 1147, 2708, 3007, 4352, 7582, 7583, 7598, 7599, 7604, 7609, 13796, 16957, 16958, 16959, 16960, 16961, 16962, 16963, 16964, 16965, 16998, 17004, 17005, 17011, 17012, 17035, 17036, 17037, 17038, 17039, 17040, 17041, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17302, 17426, 18184, 18258, 18284, 18310, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18425, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18519, 18638, 18735, 18762, 18792, 18972, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19092, 19131, 19256, 19592, 24763, 26954, 26988, 29370, 29478, 29479, 29480, 29481, 29482, 29483, 29484, 29485, 29486, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29583, 29584, 30116, 30646, 31857, 31858, 31859, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31901, 1, 32378, 1, 32115, 1, 26469, 1, 26019, 1, 1875, 10, 10811, 10963, 10978, 16868, 17119, 30265, 30266, 30267, 30347, 30354, 1, 22682, 1, 7858, 64, 1958, 1963, 2078, 2191, 2314, 2407, 2491, 2580, 2664, 2746, 2844, 2932, 3209, 3353, 3428, 3501, 3614, 4138, 5884, 5912, 6070, 6180, 6259, 6292, 13559, 14198, 14274, 14378, 14420, 14499, 14501, 14573, 14685, 14787, 18480, 19001, 19188, 19291, 19454, 19506, 19612, 19668, 19715, 19788, 19873, 19967, 20048, 20140, 20228, 20292, 20353, 20499, 20562, 20636, 20777, 20861, 20891, 20939, 21069, 24941, 29045, 29141, 29397, 29431, 1, 23079, 1, 9281, 4, 12705, 24055, 24237, 24491, 1, 25355, 1, 25253, 1, 15296, 8, 8303, 8323, 8343, 8432, 11960, 12095, 24887, 27208, 1, 7464, 2, 10814, 10984, 1, 11938, 2, 12148, 27283, 2, 7876, 9782, 1, 31763, 1, 10590, 2, 5662, 10555, 1, 12449, 13, 3532, 3543, 3544, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 24061, 24542, 29183, 1, 10227, 1, 6278, 1, 30416, 1, 31954, 2, 27483, 27504, 1, 12328, 1, 9268, 1, 26291, 1, 22677, 1, 22748, 1, 13647, 2, 12676, 13351, 1, 25643, 1, 26799, 2, 2986, 21089, 4, 30553, 30561, 30568, 30569, 1, 13303, 2, 24744, 24777, 1, 4946, 1, 18002, 1, 679, 4, 4275, 5084, 17448, 17488, 1, 11019, 1, 17104, 1, 17198, 1, 9579, 1, 23643, 1, 26342, 1, 15524, 18, 9158, 9629, 9848, 9849, 9854, 9855, 9878, 9879, 10069, 10070, 10355, 26533, 28551, 28552, 28923, 28924, 28927, 30631, 1, 26018, 1, 8626, 1, 31663, 1, 18665, 1, 1431, 2, 10129, 28872, 1, 9473, 1, 30288, 11, 2002, 3730, 4305, 4813, 6452, 10403, 10404, 12386, 13496, 15586, 29249, 2, 893, 26659, 2, 17894, 23839, 1, 25744, 4, 4066, 4857, 13213, 16762, 1, 26264, 5, 1291, 1292, 3840, 11444, 16688, 1, 10933, 1, 9667, 1, 4356, 1, 23619, 1, 27170, 1, 12142, 1, 12145, 1, 30364, 1, 7820, 1, 9447, 1, 23904, 1, 26086, 1, 15370, 1, 9348, 3, 26653, 26706, 26738, 3, 10957, 17128, 31941, 1, 22721, 1, 22654, 3, 12253, 13358, 31157, 1, 24182, 1, 15245, 1, 9412, 54, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28748, 28749, 28750, 28751, 28752, 28753, 28754, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28770, 28771, 28772, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28785, 28786, 28787, 28806, 28807, 28808, 28809, 28810, 28811, 28814, 28815, 28818, 28819, 2, 12422, 13377, 2, 22441, 23518, 1, 23043, 2, 2031, 2032, 1, 21817, 10, 4097, 7765, 7918, 9824, 13460, 17453, 17493, 24113, 24523, 29347, 1, 5211, 1, 12127, 2, 3784, 11483, 15, 4494, 4499, 4573, 4602, 4632, 4658, 4679, 4732, 4738, 4739, 4740, 4741, 4742, 4743, 4789, 116, 31221, 31222, 31223, 31224, 31225, 31226, 31227, 31228, 31229, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31240, 31241, 31242, 31243, 31244, 31245, 31246, 31247, 31248, 31249, 31250, 31251, 31252, 31253, 31254, 31255, 31256, 31257, 31258, 31259, 31260, 31261, 31262, 31263, 31264, 31265, 31266, 31267, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31283, 31284, 31285, 31286, 31287, 31288, 31289, 31290, 31291, 31292, 31293, 31294, 31295, 31296, 31297, 31298, 31299, 31300, 31301, 31302, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 1, 25966, 1, 30847, 1, 4321, 3, 4823, 4825, 4827, 1, 30660, 1, 23110, 1, 31729, 1, 1413, 1, 22597, 1, 25742, 4, 18833, 18834, 18871, 18922, 2, 10558, 24459, 1, 22900, 1, 23035, 1, 32430, 72, 627, 899, 924, 956, 961, 1107, 1108, 1133, 1134, 1135, 1136, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7134, 7135, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7243, 7244, 7245, 7246, 7247, 7250, 7251, 7252, 8098, 8102, 13759, 13760, 13806, 14113, 14114, 14892, 18087, 28001, 28027, 28059, 28085, 28117, 28143, 28175, 28201, 28233, 28259, 1, 12769, 1, 6401, 1, 9340, 1, 17973, 1, 25718, 1, 14829, 1, 23492, 1, 7342, 2, 12126, 21129, 1, 32011, 11, 7342, 8455, 8456, 8457, 8458, 9199, 9200, 9739, 10052, 10053, 20106, 1, 26460, 1, 32316, 1, 13171, 1, 3796, 1, 16883, 1, 30283, 1, 31026, 1, 32698, 2, 8110, 8111, 2, 3732, 6454, 1, 30581, 3, 24062, 24161, 24298, 2, 17735, 24539, 1, 9409, 51, 3606, 3607, 3608, 14361, 14362, 14363, 14364, 14365, 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14384, 14385, 14386, 14387, 14388, 14389, 14390, 14391, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, 14405, 14406, 14407, 14408, 4, 10645, 13869, 24373, 24565, 15, 28321, 28402, 28403, 28427, 28428, 28429, 28430, 28431, 28432, 28433, 28434, 28511, 28527, 28555, 28556, 1, 31932, 1, 9913, 3, 26693, 26853, 26857, 1, 32732, 1, 22272, 2, 18873, 18924, 138, 20920, 20921, 20922, 20923, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20931, 20932, 20933, 20934, 20935, 20936, 20937, 20938, 20939, 20940, 20941, 20942, 20943, 20944, 20945, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20963, 20964, 20965, 20966, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 20977, 20978, 20979, 20980, 20981, 20982, 20983, 20984, 20985, 20986, 20987, 20988, 20989, 20990, 20991, 20992, 20993, 20994, 20995, 20996, 20997, 20998, 20999, 21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21015, 21016, 21017, 21018, 21019, 21020, 21021, 21022, 21023, 21024, 21025, 21026, 21027, 21028, 21029, 21030, 21031, 21032, 21033, 21034, 21035, 21036, 21037, 21038, 21039, 21040, 21041, 21042, 21043, 21044, 21045, 21046, 21047, 21048, 21049, 21050, 21051, 21052, 21053, 21054, 21055, 21056, 21057, 1, 26244, 1, 26779, 1, 15490, 1, 4379, 38, 894, 905, 928, 936, 1000, 1001, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7124, 7125, 7206, 7207, 8100, 27981, 28007, 28029, 28039, 28065, 28087, 28097, 28123, 28145, 28155, 28181, 28203, 28213, 28239, 28261, 134, 91, 93, 123, 125, 7324, 7325, 8022, 8023, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8157, 8158, 8161, 8162, 8163, 8203, 8204, 8205, 8206, 9067, 9068, 9071, 9072, 9073, 9074, 9075, 9076, 9189, 9190, 9191, 9192, 9193, 9194, 9195, 9196, 9602, 9603, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9723, 9724, 10696, 10697, 10698, 10699, 10703, 10704, 10706, 10707, 10722, 10723, 10728, 10729, 10730, 10731, 10732, 10733, 11123, 11124, 11125, 11126, 11127, 11128, 11129, 11130, 11131, 11132, 11135, 11136, 11137, 11138, 11139, 11140, 11141, 11142, 16277, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16313, 16314, 16315, 16316, 16319, 16320, 16338, 16339, 16340, 16341, 16553, 16555, 16585, 16587, 16592, 16593, 26911, 32556, 32558, 32588, 32590, 9, 28615, 28616, 28816, 28817, 28818, 28819, 28957, 30876, 31628, 2, 17853, 23796, 3, 8759, 16892, 30376, 2, 30315, 31725, 1, 11855, 1, 32158, 1, 15241, 1, 9338, 1, 13282, 1, 3071, 1, 16828, 1, 24141, 1, 25147, 1, 30214, 2, 5095, 5359, 1, 26491, 1, 23233, 2, 17943, 24005, 1, 26848, 2, 22386, 23463, 1, 12760, 1, 23913, 1, 32209, 1, 22296, 1, 17044, 1, 18028, 1, 5172, 6, 3555, 5952, 12126, 12138, 12140, 12146, 1, 9306, 1, 10708, 1, 22742, 1, 24189, 5, 28940, 28941, 28942, 28943, 28944, 1, 14564, 1, 25790, 1, 32674, 1, 29352, 2, 993, 994, 1, 15403, 1, 1509, 12, 3113, 3114, 3115, 3116, 3117, 3200, 3201, 4974, 5314, 14145, 14714, 14715, 2, 22806, 29179, 1, 8233, 1, 12920, 2, 22861, 29279, 4, 11133, 11147, 11169, 30710, 1, 17774, 1, 30894, 1, 7850, 1, 32017, 2, 17892, 23837, 1, 22477, 1, 7864, 3, 4443, 5046, 14958, 64, 18531, 18532, 18533, 18534, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18546, 18547, 18548, 18549, 18550, 18551, 18552, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18560, 18561, 18562, 18563, 18564, 18565, 18566, 18567, 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18576, 18577, 18578, 18579, 18580, 18581, 18582, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18592, 18593, 18594, 1, 32755, 1, 25276, 1, 23231, 2, 5597, 10961, 1, 9807, 1, 4520, 1, 9936, 2, 10280, 10327, 1, 17762, 128, 5835, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 1, 30465, 1, 26205, 1, 32331, 1, 7875, 18, 1540, 1630, 1631, 1632, 1636, 1637, 1731, 1835, 1836, 2101, 16410, 16411, 18584, 26899, 29592, 29681, 29707, 29731, 1, 17572, 1, 25388, 1, 13013, 6, 28873, 28874, 28875, 28876, 28877, 28878, 4, 4871, 10455, 10456, 24601, 1, 9292, 1, 25614, 6, 31264, 31265, 31266, 31267, 31268, 31269, 1, 31792, 1, 22471, 1, 24494, 1, 25710, 1, 17509, 1, 17738, 1, 22973, 1, 7785, 1, 9769, 4, 8167, 8168, 8169, 8170, 3, 4110, 12889, 13623, 1, 31277, 1, 30349, 1, 13338, 1, 2010, 1, 9588, 1, 15015, 2, 12683, 13346, 2, 22402, 23479, 4, 172, 7476, 7482, 27057, 1, 31824, 1, 15310, 14, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 4536, 4537, 1, 4070, 1, 16855, 2, 27491, 27514, 1, 32818, 1, 30827, 1, 32797, 1, 9270, 1, 22647, 1, 19013, 1, 9944, 2, 3484, 3485, 1, 22736, 1, 31746, 1, 12914, 1, 3481, 6, 11007, 30277, 30303, 30304, 30305, 30306, 1, 12233, 6, 4222, 4555, 13467, 17447, 17487, 29224, 1, 9381, 1, 24931, 1, 25522, 1, 23193, 2, 27480, 27499, 1, 8637, 1, 8283, 1, 9391, 1, 23424, 1, 9435, 1, 23700, 1, 31996, 3, 13692, 17673, 18674, 3, 3831, 3939, 11465, 1, 29785, 1, 6633, 1, 25659, 1, 30531, 1, 31038, 1, 15368, 1, 32457, 1, 11929, 2, 7613, 7677, 1, 22573, 1, 26356, 1, 30230, 2, 22370, 23450, 2, 18651, 29140, 1, 32794, 1, 25179, 1, 22475, 1, 15585, 1, 29827, 1, 171, 1, 23890, 1, 18612, 1, 24441, 1, 5196, 1, 22569, 1, 10223, 16, 1517, 1543, 1773, 2105, 15903, 15909, 15915, 15921, 15941, 15948, 16416, 16417, 18587, 29594, 29684, 29709, 1, 9350, 1, 32436, 1, 23147, 1, 9589, 40, 1161, 1162, 1163, 1164, 1165, 1166, 1173, 1174, 1181, 1182, 1183, 1184, 1189, 1190, 1193, 1194, 1201, 1202, 1257, 1258, 1303, 1304, 1305, 1306, 1313, 1314, 10336, 10337, 10338, 10339, 10340, 10341, 14011, 14012, 14017, 14018, 14033, 14034, 14075, 14076, 2, 4698, 4699, 1, 25669, 1, 7969, 1, 15148, 1, 7429, 1, 445, 1, 31632, 1, 5089, 1, 16785, 1, 16830, 39, 2086, 2216, 2334, 2513, 2602, 2680, 2770, 2867, 2957, 3234, 3381, 3456, 3573, 5559, 5573, 5678, 5939, 10606, 12998, 14295, 14635, 14794, 17411, 18501, 19209, 19314, 19528, 19810, 19899, 19988, 20069, 20161, 20374, 20520, 20590, 20663, 20798, 20960, 24949, 3, 8735, 30599, 30840, 1, 4297, 1, 23686, 2, 22369, 23449, 1, 24354, 1, 12131, 1, 25395, 2, 27089, 27092, 2, 27143, 27163, 1, 12443, 1, 13146, 1, 30691, 1, 15421, 1, 4684, 48, 17507, 17508, 17509, 17510, 17511, 17512, 17513, 17514, 17515, 17516, 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, 17525, 17526, 17527, 17528, 17529, 17530, 17531, 17532, 17533, 17534, 17535, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, 17545, 17546, 17547, 17548, 17549, 17550, 17551, 17552, 17553, 17554, 1, 31995, 1, 22539, 1, 32349, 1, 26238, 2, 4692, 4693, 1, 26230, 1, 7722, 1, 7843, 1, 26462, 1, 25800, 5, 7831, 7832, 7941, 7942, 24383, 1, 23671, 1, 23599, 1, 25076, 1, 25282, 2, 19360, 24471, 5, 4714, 4715, 13582, 13721, 29210, 1, 9910, 9, 665, 6679, 14109, 14845, 14849, 14850, 14851, 14864, 14865, 1, 7828, 2, 3283, 3403, 1, 23777, 1, 32766, 188, 862, 7332, 7468, 7615, 7624, 7626, 7629, 7632, 7635, 7639, 7641, 7646, 7648, 7649, 7654, 7659, 7661, 7662, 7663, 7665, 7667, 7670, 7672, 7673, 7676, 7679, 7688, 7690, 7695, 7698, 7701, 7709, 7715, 7717, 7720, 7723, 8051, 8053, 9107, 9112, 9114, 9115, 9116, 9117, 9118, 9119, 9120, 9121, 9122, 9123, 9124, 9125, 9126, 9127, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9136, 9137, 9138, 9140, 9143, 9145, 9146, 9147, 9148, 9149, 9186, 9188, 9205, 9208, 9211, 9213, 9214, 9471, 9472, 9474, 9476, 9478, 9484, 9486, 9487, 9488, 9491, 9492, 9493, 9494, 9495, 9497, 9499, 9501, 9503, 9523, 9524, 9526, 9537, 9538, 9539, 9540, 9542, 9554, 9558, 9562, 9566, 9571, 9573, 9574, 9575, 9576, 9579, 9580, 9584, 9585, 9587, 9588, 9591, 9592, 9997, 9998, 10050, 10051, 10053, 10054, 10055, 10059, 10081, 10091, 10097, 10105, 10109, 10111, 10115, 10119, 10130, 10133, 10137, 10140, 10142, 10144, 10146, 10148, 10150, 10152, 10154, 10217, 16716, 30713, 30727, 30728, 30729, 30755, 31093, 31440, 31444, 31448, 31452, 31456, 31460, 31464, 31468, 31472, 31476, 31480, 31484, 31488, 31492, 31496, 31500, 31504, 31508, 31518, 31526, 31534, 31542, 31550, 31558, 31562, 31566, 31573, 31575, 31577, 31579, 31581, 31583, 1, 13067, 1, 23299, 7, 26648, 26650, 26655, 26662, 26772, 26778, 26864, 1, 1983, 1, 13311, 41, 9107, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 31524, 31525, 31526, 31527, 31528, 31529, 31530, 31531, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 1, 12657, 1, 22750, 2, 31920, 31927, 1, 31998, 1, 25052, 1, 26065, 2, 8907, 8913, 1, 13047, 1, 3802, 1, 17791, 1, 15140, 1, 12722, 1, 26002, 1, 32748, 1, 32778, 40, 1579, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 9766, 10357, 1, 23961, 1, 32239, 1, 15383, 1, 7790, 1, 3124, 4, 8483, 8544, 8545, 8546, 1, 32779, 1, 11114, 1, 16837, 1, 25145, 1, 26057, 1, 15410, 1, 30618, 1, 30269, 1, 17999, 1, 7914, 1, 32830, 2, 22425, 23502, 1, 1418, 6, 10244, 10245, 10291, 10292, 28999, 29000, 3, 4355, 4646, 4647, 1, 13214, 3, 13884, 24521, 24576, 1, 25387, 1, 12379, 1, 9443, 1, 29164, 1, 31959, 1, 16813, 1, 22717, 1, 5137, 1, 15390, 1, 23344, 6, 17549, 28884, 28885, 28886, 28887, 31222, 1, 29941, 1, 11756, 1, 26039, 1, 16802, 2, 7799, 9839, 1, 7804, 1, 11581, 1, 23348, 1, 32726, 18, 910, 941, 995, 27986, 28012, 28031, 28044, 28070, 28089, 28102, 28128, 28147, 28160, 28186, 28205, 28218, 28244, 28263, 8, 10926, 16814, 17090, 30576, 30578, 30582, 30588, 31633, 2, 30321, 31681, 9, 7730, 7747, 9647, 9648, 9649, 9650, 9651, 24121, 24431, 51, 1544, 1647, 1648, 1649, 1713, 1720, 1838, 1855, 1858, 1871, 1872, 15830, 15831, 15832, 15833, 15975, 15976, 15977, 15978, 16033, 16034, 16053, 16054, 16072, 16081, 16082, 16100, 16107, 16110, 16111, 16112, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, 16208, 16238, 16418, 16419, 16420, 16421, 29602, 29629, 29645, 29664, 29691, 29716, 1, 26169, 1, 24337, 5, 31124, 31131, 31133, 31135, 31211, 16, 4038, 4798, 4867, 4934, 11252, 11346, 11596, 11846, 13503, 16646, 16765, 18135, 21462, 21791, 23881, 24629, 1, 4741, 1, 22026, 1, 24088, 4, 7993, 7994, 7995, 7996, 1, 22695, 1, 25903, 1, 18510, 6, 989, 990, 10447, 10448, 10470, 10471, 4, 3295, 3297, 3476, 3483, 1, 15172, 1, 7963, 1, 5098, 1, 30941, 1, 22586, 1, 7971, 4, 31594, 31595, 31596, 31597, 1, 22672, 1, 7270, 2, 14070, 14071, 6, 10073, 10074, 28361, 28367, 28368, 28386, 2, 7483, 27481, 1, 7714, 1, 26079, 1, 27044, 1, 15521, 1, 23005, 1, 31119, 76, 1526, 1528, 1529, 1530, 1531, 1577, 1578, 1588, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1622, 1687, 1704, 1854, 2088, 2095, 15739, 15740, 15767, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15802, 15803, 15804, 15805, 15806, 15902, 15903, 15904, 15905, 15906, 15907, 15953, 15954, 15955, 15956, 15957, 16025, 16026, 16369, 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, 16488, 16489, 16490, 16491, 29443, 1, 24046, 1, 9314, 1, 23673, 2, 22409, 23485, 1, 29281, 1, 125, 1, 32731, 1, 11912, 1, 9439, 1, 17923, 18, 26696, 26826, 26829, 26830, 26831, 26832, 26833, 26834, 26835, 26836, 26837, 26838, 26839, 26840, 26842, 26843, 26847, 26848, 1, 32599, 2, 193, 225, 1, 25164, 1, 3776, 1, 23327, 1, 29796, 1, 8089, 1, 8908, 1, 23640, 1, 23920, 1, 23101, 230, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 1353, 2012, 2022, 2026, 3736, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6631, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 10358, 10580, 13839, 13840, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939, 13940, 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 13954, 13955, 13956, 13957, 13958, 13959, 13960, 13961, 13962, 13963, 13964, 14043, 14067, 14068, 14069, 14129, 14130, 14572, 14696, 14882, 14883, 14884, 14885, 14886, 19555, 24972, 29444, 29445, 30466, 30467, 30468, 30469, 30470, 1, 24781, 1, 32185, 1, 3032, 1, 9114, 1, 24058, 1, 26197, 1, 26361, 2, 1783, 1784, 1, 29800, 1, 26327, 25, 33, 157, 1356, 1981, 3651, 5708, 7315, 7327, 7328, 9044, 9046, 9057, 9058, 13960, 13961, 13962, 14703, 16275, 16334, 16495, 24896, 29458, 30105, 30754, 32498, 2, 27131, 27156, 1, 3166, 1, 31971, 1, 17364, 6, 4054, 4745, 4880, 5072, 13507, 24620, 1, 12911, 1, 9191, 1, 7263, 1, 23782, 2, 21717, 22352, 1, 29317, 1, 12612, 1, 31810, 8, 1541, 15893, 16412, 16413, 18588, 29612, 29701, 29726, 1, 28964, 1, 30449, 8, 26866, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 1, 4549, 1, 30583, 6, 7319, 8281, 9692, 12466, 27005, 27006, 1, 25668, 1, 32400, 12, 3137, 3221, 4091, 11238, 11332, 12218, 13442, 13642, 14164, 14738, 14739, 29192, 1, 11898, 1, 13184, 300, 13447, 13448, 13449, 13450, 13451, 13452, 13453, 13454, 13455, 13456, 13457, 13458, 13459, 13460, 13461, 13462, 13463, 13464, 13465, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, 13478, 13479, 13480, 13481, 13482, 13483, 13484, 13485, 13486, 13487, 13488, 13489, 13490, 13491, 13492, 13493, 13494, 13495, 13496, 13497, 13498, 13499, 13500, 13501, 13502, 13503, 13504, 13505, 13506, 13507, 13508, 13509, 13510, 13511, 13512, 13513, 13514, 13515, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13524, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13534, 13535, 13536, 13537, 13538, 13539, 13540, 13541, 13542, 13543, 13544, 13545, 13546, 13547, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13558, 13559, 13560, 13561, 13562, 13563, 13564, 13565, 13566, 13567, 13568, 13569, 13570, 13571, 13572, 13573, 13574, 13575, 13576, 13577, 13578, 13579, 13580, 13581, 13582, 13583, 13584, 13585, 13586, 13587, 13588, 13589, 13590, 13591, 13592, 13593, 13594, 13595, 13596, 13597, 13598, 13599, 13600, 13601, 13602, 13603, 13604, 13605, 13606, 13607, 13608, 13609, 13610, 13611, 13612, 13613, 13614, 13615, 13616, 13617, 13618, 13619, 13620, 13621, 13622, 13623, 13624, 13625, 13626, 13627, 13628, 13629, 13630, 13631, 13632, 13633, 13634, 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13644, 13645, 13646, 13647, 13648, 13649, 13650, 13651, 13652, 13653, 13654, 13655, 13656, 13657, 13658, 13659, 13660, 13661, 13662, 13663, 13664, 13665, 13666, 13667, 13668, 13669, 13670, 13671, 13672, 13673, 13674, 13675, 13676, 13677, 13678, 13679, 13680, 13681, 13682, 13683, 13684, 13685, 13686, 13687, 13688, 13689, 13690, 13691, 13692, 13693, 13694, 13695, 13696, 13697, 13698, 13699, 13700, 13701, 13702, 13703, 13704, 13705, 13706, 13707, 13708, 13709, 13710, 13711, 13712, 13713, 13714, 13715, 13716, 13717, 13718, 13719, 13720, 13721, 13722, 13723, 13724, 13725, 13726, 13727, 13728, 13729, 13730, 13731, 13732, 13733, 13734, 13735, 13736, 13737, 13738, 13739, 13740, 13741, 13742, 13743, 13744, 13745, 13746, 1, 21378, 1, 17965, 1, 31638, 1, 29811, 1, 30185, 1, 32624, 2, 7362, 7363, 1, 23984, 1, 26321, 1, 32802, 1, 27050, 1, 8280, 2, 26764, 26824, 1, 7806, 1, 32682, 5, 4245, 5506, 5526, 5645, 19380, 1, 7474, 3, 13267, 13625, 29341, 1, 3891, 1, 24184, 1, 32795, 1, 12413, 1, 184, 1, 7952, 1, 15501, 1, 14778, 1, 25507, 1, 17108, 1, 7543, 1, 9647, 11, 7266, 7267, 7268, 16494, 28961, 31568, 31569, 31570, 31571, 31584, 31585, 1, 10132, 1, 17414, 1, 23556, 1, 30636, 2, 31305, 31826, 1, 29252, 2, 13524, 29273, 1, 25250, 1, 9324, 1, 8884, 2, 28875, 28913, 4, 21202, 21203, 21846, 22047, 1, 18615, 1, 17418, 2, 17915, 23862, 1, 16892, 1, 22710, 1, 24424, 1, 25071, 1, 30555, 1, 13036, 1, 12523, 1, 32031, 1, 32411, 1, 31749, 2, 11652, 11748, 3, 8247, 8249, 11170, 1, 26270, 1, 15070, 6, 2378, 3127, 9897, 9898, 9899, 9900, 1, 23107, 1, 12408, 5, 2903, 6505, 19163, 19546, 20667, 1, 25348, 1, 5647, 1, 12898, 1, 7438, 1, 7567, 1, 22981, 1, 25567, 1, 21694, 14, 1478, 15630, 18170, 18202, 18241, 18273, 18546, 18619, 18721, 18751, 18777, 19072, 19107, 19151, 4, 2065, 5363, 18845, 18846, 1, 7734, 2, 10857, 11057, 1, 16241, 2, 22822, 29194, 1, 8825, 2, 24061, 24406, 1, 17348, 1, 22934, 1, 9586, 1, 7729, 2, 12824, 24404, 1, 25581, 5, 21340, 21341, 21394, 21395, 21396, 9, 3751, 3928, 11433, 11607, 11621, 11702, 11716, 11725, 16677, 2, 6495, 6496, 1, 23002, 1, 9451, 1, 12298, 3, 30351, 30643, 30644, 1, 17925, 1, 25622, 2, 14449, 15063, 1, 25983, 1, 15244, 1, 23323, 14, 28621, 28623, 28625, 28628, 28630, 28680, 28682, 28684, 28687, 28689, 28812, 28813, 28814, 28815, 1, 25685, 1, 26170, 1, 26177, 1, 26418, 1, 13073, 1, 16929, 1, 16739, 4, 8254, 8255, 8256, 8257, 1, 14237, 6, 27025, 28631, 28632, 28633, 28690, 28946, 1, 15264, 8, 14051, 21810, 21931, 21932, 21933, 21934, 21935, 22054, 2, 1046, 1078, 1, 18036, 62, 19594, 19595, 19596, 19597, 19598, 19599, 19600, 19601, 19602, 19603, 19604, 19605, 19606, 19607, 19608, 19609, 19610, 19611, 19612, 19613, 19614, 19615, 19616, 19617, 19618, 19619, 19620, 19621, 19622, 19623, 19624, 19625, 19626, 19627, 19628, 19629, 19630, 19631, 19632, 19633, 19634, 19635, 19636, 19637, 19638, 19639, 19640, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 19650, 19651, 19652, 19653, 19654, 19655, 1, 23293, 1, 10656, 1, 25770, 1, 3026, 3, 3785, 3971, 11484, 1, 17087, 198, 24679, 24680, 24681, 24682, 24683, 24684, 24685, 24686, 24687, 24688, 24689, 24690, 24691, 24692, 24693, 24694, 24695, 24696, 24697, 24698, 24699, 24700, 24701, 24702, 24703, 24704, 24705, 24706, 24707, 24708, 24709, 24710, 24711, 24712, 24713, 24714, 24715, 24716, 24717, 24718, 24719, 24720, 24721, 24722, 24723, 24724, 24725, 24726, 24727, 24728, 24729, 24730, 24731, 24732, 24733, 24734, 24735, 24736, 24737, 24738, 24739, 24740, 24741, 24742, 24743, 24744, 24745, 24746, 24747, 24748, 24749, 24750, 24751, 24752, 24753, 24754, 24755, 24756, 24757, 24758, 24759, 24760, 24761, 24762, 24763, 24764, 24765, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24773, 24774, 24775, 24776, 24777, 24778, 24779, 24780, 24781, 24782, 24783, 24784, 24785, 24786, 24787, 24788, 24789, 24790, 24791, 24792, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24805, 29029, 29030, 29031, 29032, 29033, 29034, 29035, 29036, 29037, 29038, 29039, 29040, 29041, 29042, 29043, 29044, 29045, 29046, 29047, 29048, 29049, 29050, 29051, 29052, 29053, 29054, 29055, 29056, 29057, 29058, 29059, 29060, 29061, 29062, 29063, 29064, 29065, 29066, 29067, 29068, 29069, 29070, 29071, 29072, 29073, 29074, 29075, 29076, 29077, 29078, 29079, 29080, 29081, 29082, 29083, 29084, 29085, 29086, 29087, 29088, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29096, 29097, 29098, 29099, 1, 9888, 1, 24195, 1, 13247, 4, 7901, 7902, 9971, 9978, 1, 12635, 2, 22411, 23487, 1, 23614, 1, 23690, 2, 12121, 12138, 1, 31727, 1, 32595, 1, 12462, 1, 6145, 12, 7729, 7737, 7761, 7853, 7854, 7897, 7899, 7949, 7950, 7960, 7962, 9965, 1, 15043, 1, 29241, 1, 23277, 1, 9676, 1, 23969, 1, 26266, 1, 24540, 1, 26016, 1, 32176, 2, 27492, 27515, 4, 30742, 30743, 30745, 30746, 1, 32831, 1, 7990, 1, 26134, 1, 22628, 6, 30339, 30507, 30508, 30589, 30595, 31171, 1, 11758, 1, 17804, 1, 23559, 2, 30961, 30962, 1, 4797, 3, 31017, 31028, 31046, 1, 7859, 18, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 14707, 1, 26912, 2, 28904, 28907, 1, 4361, 1, 26729, 2, 4726, 4727, 1, 25325, 1, 25642, 1, 26707, 1, 29254, 2, 306, 307, 1, 1887, 1, 15586, 1, 13001, 1, 23611, 6, 28597, 28598, 28599, 28600, 28601, 28607, 3, 443, 499, 5166, 14, 2061, 2715, 7736, 7737, 7738, 7904, 7906, 7960, 7962, 9696, 16240, 16241, 17082, 18854, 1, 20012, 1, 25264, 2, 3340, 3342, 1, 8740, 2, 30449, 30451, 1, 23981, 1, 25651, 3, 14439, 24622, 25026, 1, 9838, 1, 1813, 1, 4280, 1, 15186, 1, 32134, 1, 22712, 1, 19329, 1, 21989, 2, 4650, 4651, 1, 22671, 1, 7987, 1, 22626, 1, 23895, 1, 31789, 1, 17784, 1, 12561, 1, 29147, 1, 16927, 1, 30388, 1, 32374, 3, 12970, 24106, 24323, 1, 15484, 1, 32154, 200, 124, 708, 712, 777, 778, 805, 826, 836, 1167, 1168, 1195, 1196, 1623, 1815, 1816, 2961, 4510, 7277, 7349, 7442, 7443, 7462, 7706, 7716, 7717, 7718, 7719, 7720, 7721, 7895, 7896, 7900, 7963, 7968, 7969, 7976, 7977, 8108, 8114, 8165, 8166, 8171, 8172, 8173, 8176, 8179, 8184, 8185, 8189, 8218, 8219, 8220, 8229, 8248, 8449, 8450, 8453, 8454, 8457, 8458, 8475, 8476, 8479, 8482, 8483, 8484, 8487, 8490, 8507, 8508, 8509, 8510, 8513, 8520, 8521, 8522, 8525, 8526, 8528, 8541, 8542, 8543, 8544, 8545, 8546, 8553, 8554, 8555, 8612, 8621, 8622, 8652, 8682, 8871, 9047, 9048, 9049, 9161, 9471, 9472, 9473, 9474, 9475, 9491, 9492, 9494, 9495, 9599, 9625, 9653, 9657, 9678, 9679, 9693, 9831, 9832, 9953, 9954, 9955, 9956, 9957, 9966, 9967, 9971, 9972, 9979, 9981, 9982, 10029, 10030, 10035, 10036, 10040, 10041, 10043, 10044, 10108, 10726, 10727, 10741, 10755, 10756, 11164, 11165, 11166, 11167, 11168, 11174, 13954, 15751, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16296, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16313, 16314, 16315, 16316, 16319, 16320, 16586, 16713, 19071, 19078, 19083, 19132, 19133, 22168, 23439, 26607, 26608, 26609, 26625, 26634, 29826, 31149, 32589, 1, 11925, 1, 25882, 2, 3046, 3052, 3, 26947, 26981, 27114, 1, 29170, 1, 21188, 2, 17845, 23787, 1, 7307, 1, 12009, 1, 8942, 2, 22434, 23511, 1, 24225, 2, 4704, 4705, 1, 22511, 1, 7915, 1, 12659, 1, 7826, 1, 7814, 1, 1880, 1, 22532, 1, 23065, 1, 23742, 1, 22685, 13, 4883, 4884, 4885, 4886, 4887, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 1, 23768, 1, 8632, 89, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5, 13719, 13720, 13721, 13745, 13746, 2, 21744, 22049, 1, 24203, 1, 15210, 1, 18084, 2, 27586, 27611, 1, 22553, 2, 3764, 3945, 1, 23732, 1, 7619, 1, 29212, 1, 32728, 1, 16792, 1, 12949, 1, 7500, 2, 3767, 15074, 1, 32225, 1, 12843, 1, 32372, 3, 21605, 21674, 21853, 1, 28989, 2, 4372, 4373, 1, 15491, 3, 9172, 9173, 9174, 1, 26222, 1, 11553, 2, 12652, 13354, 1, 22718, 1, 9388, 2, 4856, 5349, 16, 2058, 6371, 18823, 18824, 21166, 21167, 21168, 21169, 21170, 21171, 21172, 21173, 21174, 21579, 21644, 21948, 137, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 15056, 15057, 15058, 15059, 15060, 15061, 15062, 15063, 15064, 15065, 15066, 15067, 15068, 15069, 15070, 15071, 15072, 15073, 15074, 15075, 15076, 15077, 15078, 15079, 15080, 15081, 15082, 15083, 15084, 15085, 15086, 15087, 15088, 15089, 15090, 15091, 15092, 15093, 15094, 15095, 15096, 15097, 15098, 15099, 15100, 15101, 15102, 15103, 15104, 1, 23822, 5, 1616, 15645, 15646, 15647, 15648, 3, 16785, 17167, 21143, 1, 25140, 1, 23555, 1, 5384, 1, 14816, 1, 17978, 2, 7620, 7684, 1, 23081, 1, 22665, 1, 32488, 2, 22388, 23465, 1, 26370, 1, 7613, 1, 32621, 1, 24722, 1, 28959, 1, 23615, 1, 31930, 1, 17284, 1, 9416, 1, 22568, 1, 25683, 216, 52, 1593, 1637, 1646, 1737, 1838, 1865, 1870, 1871, 1928, 2267, 2364, 2377, 2452, 2541, 2632, 2701, 2801, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2897, 3000, 3103, 3191, 3271, 3317, 3326, 3560, 3640, 4337, 5409, 5430, 5444, 5714, 5829, 5997, 6007, 6122, 6215, 6348, 6361, 7343, 7346, 7349, 7368, 7384, 7452, 7561, 7572, 7588, 8257, 8290, 8310, 8330, 8439, 8949, 8993, 8994, 8995, 8996, 8997, 8998, 9080, 9090, 9100, 9847, 10129, 10183, 10184, 10185, 10186, 10192, 10738, 10791, 10825, 11151, 11510, 11634, 11683, 11693, 11730, 11784, 11947, 12082, 13739, 14323, 14333, 14365, 14558, 14586, 14670, 15025, 15749, 15750, 16514, 16942, 16960, 16969, 17056, 17213, 17231, 17589, 18215, 18253, 18254, 18404, 18420, 18429, 18447, 18456, 18516, 18732, 18759, 18784, 18785, 18789, 19018, 19027, 19045, 19087, 19241, 19262, 19365, 19428, 19562, 19577, 19757, 19841, 19933, 20019, 20110, 20190, 20270, 20322, 20462, 20827, 20836, 20989, 21052, 22058, 22065, 22071, 22080, 22089, 22094, 22104, 22112, 22116, 22117, 22118, 22119, 22132, 22138, 22139, 22161, 24635, 24753, 24874, 27195, 27301, 27310, 27319, 28273, 28283, 28293, 28303, 28313, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28397, 28398, 28576, 28577, 29092, 29152, 29359, 29452, 29463, 29481, 29490, 29513, 29531, 29549, 29558, 29576, 29583, 29742, 29751, 29760, 29880, 29894, 29909, 29924, 29963, 30110, 30279, 30810, 31405, 31406, 31407, 31408, 31409, 31586, 31589, 32517, 1, 11039, 5, 8710, 30256, 30859, 30968, 30969, 1, 11879, 1, 30499, 1, 22295, 1, 30590, 10, 7556, 11516, 16987, 16992, 19053, 22146, 22149, 22157, 31571, 31658, 4, 3918, 11422, 14455, 16666, 10, 10876, 11085, 21122, 31241, 31245, 31259, 31260, 31266, 31267, 31770, 1, 31689, 1, 32298, 1, 23353, 4, 8760, 31021, 31048, 31060, 2, 5056, 14819, 1, 23405, 1, 9694, 1, 24074, 1, 23008, 11, 1054, 1086, 1259, 1260, 10266, 10313, 13763, 13764, 13804, 17327, 29019, 1, 9804, 1, 22644, 1, 23100, 1, 26363, 1, 7918, 29, 8764, 8765, 8887, 10200, 10202, 10802, 10962, 11641, 11737, 20693, 20694, 20695, 26970, 26971, 30232, 30233, 30234, 30235, 30236, 30237, 30238, 30239, 30240, 30241, 30242, 30243, 30244, 30360, 31695, 1, 9420, 4, 13686, 29329, 29402, 29436, 1, 16743, 1, 23183, 1, 26231, 1, 26411, 1, 15323, 1, 12007, 1, 31189, 1, 32390, 1, 31779, 1, 17771, 1, 9231, 6, 7794, 7795, 7796, 7807, 7808, 9839, 1, 11049, 1, 7631, 3, 4203, 13034, 13622, 1, 22639, 2, 27065, 27066, 1, 29331, 1, 30849, 1, 24387, 1, 29859, 5, 3675, 3715, 6437, 10507, 17736, 1, 17821, 1, 26208, 50, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1, 9323, 2, 27003, 27004, 1, 18010, 1, 11793, 10, 8704, 8900, 8903, 30251, 30252, 30253, 30254, 30255, 30256, 30257, 1, 23146, 1, 26345, 1, 25300, 1, 31572, 1, 10770, 1, 32236, 1, 6494, 3, 4166, 4588, 4589, 2, 30237, 30239, 90, 4485, 4487, 4489, 4491, 4493, 4496, 4498, 4531, 4533, 4535, 4537, 4539, 4541, 4543, 4546, 4560, 4562, 4564, 4566, 4568, 4570, 4572, 4589, 4591, 4593, 4595, 4597, 4599, 4601, 4619, 4621, 4623, 4625, 4627, 4629, 4631, 4645, 4647, 4649, 4651, 4653, 4655, 4657, 4660, 4674, 4676, 4678, 4693, 4695, 4697, 4699, 4701, 4703, 4705, 4707, 4719, 4721, 4723, 4725, 4727, 4729, 4731, 4752, 4754, 4756, 4758, 4760, 4762, 4764, 4776, 4778, 4780, 4782, 4784, 4786, 4788, 4792, 4796, 4802, 4805, 4807, 4809, 4820, 4833, 4866, 4867, 4868, 4869, 5631, 5632, 1, 20983, 2, 13567, 29191, 1, 17520, 4, 32833, 32834, 32835, 32836, 1, 32703, 1, 21999, 1, 38, 1, 26757, 2, 17940, 24002, 1, 32704, 1, 12230, 1, 12951, 1, 9662, 3, 1770, 1790, 2005, 1, 32373, 8, 12228, 13365, 17304, 21217, 21327, 21328, 21457, 21859, 1, 26397, 2, 5574, 13441, 1, 15469, 1, 4259, 4, 7704, 7705, 7706, 7708, 1, 15579, 1, 22668, 2, 27132, 27157, 1, 32335, 1, 25823, 1, 26828, 1, 15191, 2, 1054, 1086, 1, 23235, 3, 5420, 5843, 5859, 1, 7870, 1, 22770, 2, 22809, 29186, 1, 26940, 13, 12245, 21193, 21239, 21273, 21771, 22214, 22288, 22289, 22319, 22328, 22329, 22341, 24340, 2, 3067, 3068, 1, 15481, 1, 28883, 1, 13109, 1, 3415, 35, 1500, 1501, 1503, 1504, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 101, 1318, 1364, 1948, 2199, 2322, 2415, 2499, 2588, 2754, 2852, 2940, 3361, 3406, 3436, 3510, 3615, 4218, 4431, 5237, 5257, 5280, 5300, 5321, 5469, 5499, 5523, 5556, 5665, 5788, 5791, 5879, 5915, 6073, 6074, 6078, 6079, 6182, 6244, 6295, 6466, 11210, 11304, 11969, 12444, 13402, 13543, 14201, 14282, 14385, 14413, 14509, 14510, 14593, 14618, 14946, 16730, 17390, 18370, 18396, 18488, 18984, 19196, 19301, 19462, 19514, 19620, 19677, 19725, 19796, 19882, 19975, 20056, 20148, 20236, 20295, 20361, 20414, 20446, 20507, 20570, 20644, 20702, 20785, 20864, 20894, 20947, 21017, 21065, 21219, 21276, 21318, 21329, 21576, 21933, 22180, 24605, 24908, 26900, 29044, 29104, 29222, 2, 8261, 32592, 1, 22816, 3, 1349, 1395, 17757, 1, 17419, 1, 23426, 1, 26289, 1, 13164, 52, 2214, 2427, 2511, 2600, 2678, 2768, 2865, 2955, 4093, 5733, 5782, 5785, 5889, 6186, 6314, 11359, 12415, 13536, 14293, 14393, 14634, 17403, 18499, 19002, 19207, 19312, 19472, 19526, 19633, 19688, 19737, 19808, 19986, 20067, 20159, 20247, 20372, 20518, 20588, 20605, 20661, 20704, 20796, 20958, 21006, 21073, 24905, 29047, 29119, 29345, 29400, 29434, 8, 28660, 28661, 28662, 28663, 28668, 28669, 28670, 28671, 2, 17903, 23848, 3, 2251, 2444, 24938, 2, 30271, 30275, 1, 12165, 3, 13900, 24498, 24586, 1, 13087, 1, 22883, 1, 4083, 1, 24458, 202, 1709, 3285, 3484, 5055, 10245, 10292, 15647, 15651, 15655, 15659, 15663, 15667, 15671, 15675, 15679, 15683, 15687, 15691, 15707, 15711, 15715, 15719, 15725, 15731, 15735, 15759, 15776, 15778, 15794, 15797, 15800, 15953, 15954, 15955, 15956, 15957, 15958, 15959, 15960, 15961, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15972, 15973, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, 16022, 16023, 16024, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16122, 16124, 16125, 16126, 16127, 16128, 16129, 16131, 16134, 16135, 16138, 16139, 16141, 16143, 16146, 16149, 16151, 16154, 16156, 16157, 16161, 16167, 16173, 16176, 16178, 16179, 16180, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16192, 16197, 16220, 16221, 16224, 16226, 16235, 16236, 16237, 16380, 16386, 16392, 16396, 16400, 16404, 16408, 16420, 16424, 16428, 16432, 16436, 16440, 16444, 16448, 16452, 16456, 16460, 16464, 16468, 16472, 16476, 16484, 20606, 20612, 29000, 29458, 29459, 29620, 29621, 29622, 29623, 29624, 29625, 29626, 29627, 29628, 29629, 29630, 29631, 29632, 29633, 29634, 29635, 29636, 29637, 29638, 29639, 1, 25146, 2, 8613, 8616, 1, 19352, 1, 23048, 1, 31293, 1, 31170, 3, 1446, 1447, 15638, 32, 3300, 4025, 4406, 4635, 4994, 11243, 11337, 11840, 12373, 13711, 14921, 16640, 16745, 17685, 18119, 18686, 21159, 21288, 21356, 21506, 21507, 21508, 21509, 21606, 21607, 21657, 21686, 21733, 21933, 22054, 22222, 31610, 1, 24784, 1, 26480, 1, 23885, 1, 30358, 1, 4258, 1, 25335, 1, 31733, 1, 30848, 1, 25358, 2, 28945, 28946, 1, 31984, 3223, 35, 36, 37, 43, 60, 61, 62, 158, 159, 160, 161, 163, 165, 168, 170, 172, 173, 177, 178, 211, 243, 722, 723, 795, 796, 835, 880, 881, 1053, 1055, 1085, 1087, 1141, 1147, 1148, 1151, 1152, 1403, 1404, 1405, 1494, 1495, 1497, 1498, 1503, 1504, 1505, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1583, 1584, 1585, 1599, 1746, 1747, 1984, 1985, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2023, 2024, 2025, 2027, 2028, 2029, 2030, 2130, 2161, 2162, 2163, 2164, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2242, 2243, 2246, 2247, 2248, 2259, 2260, 2273, 2274, 2290, 2291, 2292, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2358, 2359, 2373, 2383, 2385, 2386, 2387, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2463, 2464, 2465, 2466, 2467, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2535, 2536, 2547, 2548, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2626, 2627, 2646, 2647, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2795, 2796, 2807, 2815, 2816, 2817, 2818, 2819, 2820, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2891, 2892, 2903, 2904, 2905, 2906, 2907, 2908, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2979, 2994, 2995, 3022, 3023, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3109, 3110, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3343, 3344, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3466, 3467, 3468, 3469, 3479, 3480, 3486, 3487, 3488, 3489, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3566, 3567, 3578, 3579, 3580, 3581, 3586, 3587, 3588, 3590, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3605, 3606, 3607, 3608, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3635, 3646, 3647, 3648, 3649, 3738, 3739, 5093, 5247, 5248, 5249, 5268, 5269, 5270, 5291, 5292, 5309, 5310, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5403, 5404, 5485, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5704, 5705, 5706, 5707, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5836, 5837, 5893, 5894, 5895, 5896, 5897, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6042, 6043, 6044, 6045, 6046, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6163, 6164, 6165, 6196, 6197, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 6411, 6458, 6459, 6471, 6472, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6505, 6506, 6507, 6510, 7303, 7304, 7329, 7330, 7337, 7374, 7376, 7390, 7392, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, 7420, 7421, 7422, 7423, 7424, 7425, 7426, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7495, 7506, 7507, 7510, 7511, 7512, 7515, 7516, 7532, 7549, 7743, 7744, 7981, 7997, 8005, 8006, 8736, 8737, 8738, 8767, 8769, 8812, 8813, 8814, 8829, 8863, 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8921, 8965, 9056, 9108, 9109, 9110, 9584, 9659, 9698, 9699, 9751, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9768, 9769, 9770, 9771, 9772, 9773, 9775, 9776, 9779, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9792, 9829, 9840, 9841, 9842, 9846, 9886, 9887, 9901, 9902, 9903, 9906, 9907, 9918, 9919, 9920, 9921, 9924, 9925, 9963, 9964, 10047, 10188, 10228, 10751, 11679, 11806, 13795, 13796, 13797, 13803, 13805, 13839, 13840, 14069, 14139, 14143, 14148, 14172, 14173, 14174, 14175, 14176, 14247, 14248, 14299, 14300, 14301, 14302, 14303, 14304, 14305, 14306, 14307, 14308, 14309, 14310, 14311, 14312, 14313, 14314, 14315, 14316, 14346, 14347, 14348, 14349, 14350, 14351, 14352, 14353, 14357, 14360, 14407, 14408, 14432, 14433, 14434, 14435, 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14443, 14475, 14476, 14477, 14478, 14526, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14536, 14537, 14538, 14571, 14638, 14639, 14640, 14641, 14642, 14643, 14644, 14645, 14646, 14647, 14648, 14649, 14650, 14651, 14655, 14664, 14665, 14707, 14708, 14709, 14795, 14796, 14797, 14798, 14799, 14805, 15010, 15011, 15012, 15013, 15014, 15015, 15016, 15017, 15609, 16240, 16241, 16252, 16342, 16345, 16347, 16348, 16349, 16351, 16352, 16497, 16498, 16499, 16505, 16522, 16523, 16524, 16706, 16707, 16708, 16711, 16712, 17046, 17047, 17048, 17049, 17050, 17051, 17052, 17053, 17054, 17055, 17056, 17057, 17058, 17059, 17060, 17061, 17062, 17063, 17064, 17065, 17066, 17067, 17068, 17069, 17070, 17071, 17072, 17073, 17074, 17075, 17076, 17077, 17078, 17079, 17080, 17081, 17082, 17083, 17085, 17086, 17087, 17088, 17089, 17090, 17091, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17110, 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17118, 17119, 17120, 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 17377, 17378, 17379, 17380, 17381, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17391, 17392, 17393, 17394, 17395, 17396, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17414, 17415, 17416, 17417, 17418, 17419, 17420, 17760, 17761, 17762, 17763, 17764, 17765, 17766, 17767, 17768, 17769, 17770, 17771, 17772, 17773, 17774, 17775, 17776, 17777, 17778, 17779, 17780, 17781, 17782, 17783, 17784, 17785, 17786, 17787, 17788, 17789, 17790, 17791, 17792, 17793, 17794, 17795, 17796, 17797, 17798, 17799, 17800, 17801, 17802, 17803, 17804, 17805, 17806, 17807, 17808, 17809, 17810, 17811, 17812, 17813, 17814, 17815, 17816, 17817, 17818, 17819, 17820, 17821, 17822, 17823, 17824, 17825, 17826, 17827, 17828, 17829, 17830, 17831, 17832, 17833, 17834, 17835, 17836, 17837, 17838, 17839, 17840, 17841, 17842, 17843, 17844, 17845, 17846, 17847, 17848, 17849, 17850, 17851, 17852, 17853, 17854, 17855, 17856, 17857, 17858, 17859, 17860, 17861, 17862, 17863, 17864, 17865, 17866, 17867, 17868, 17869, 17870, 17871, 17872, 17873, 17874, 17875, 17876, 17877, 17878, 17879, 17880, 17881, 17882, 17883, 17884, 17885, 17886, 17887, 17888, 17889, 17890, 17891, 17892, 17893, 17894, 17895, 17896, 17897, 17898, 17899, 17900, 17901, 17902, 17903, 17904, 17905, 17906, 17907, 17908, 17909, 17910, 17911, 17912, 17913, 17914, 17915, 17916, 17917, 17918, 17919, 17920, 17921, 17922, 17923, 17924, 17925, 17926, 17927, 17928, 17929, 17930, 17931, 17932, 17933, 17934, 17935, 17936, 17937, 17938, 17939, 17940, 17941, 17942, 17943, 17944, 17945, 17946, 17947, 17948, 17949, 17950, 17951, 17952, 17953, 17954, 17955, 17956, 17957, 17958, 17959, 17960, 17961, 17962, 17963, 17964, 17965, 17966, 17967, 17968, 17969, 17970, 17971, 17972, 17973, 17974, 17975, 17976, 17977, 17978, 17979, 17980, 17981, 17982, 17983, 17984, 17985, 17986, 17987, 17988, 17989, 17990, 17991, 17992, 17993, 17994, 17995, 17996, 17997, 17998, 17999, 18000, 18001, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020, 18021, 18022, 18023, 18024, 18025, 18026, 18027, 18028, 18029, 18030, 18031, 18032, 18033, 18034, 18035, 18036, 18037, 18038, 18039, 18040, 18041, 18042, 18043, 18044, 18045, 18046, 18047, 18048, 18049, 18050, 18051, 18052, 18053, 18054, 18055, 18056, 18057, 18058, 18059, 18060, 18061, 18062, 18063, 18064, 18065, 18066, 18067, 18068, 18069, 18070, 18071, 18072, 18073, 18074, 18075, 18076, 18077, 18078, 18079, 18080, 18081, 18082, 18083, 18084, 18085, 18086, 18087, 18088, 18089, 18090, 18091, 18092, 18093, 18094, 18095, 18096, 18097, 18098, 18099, 18100, 18178, 18464, 18465, 18466, 18467, 18468, 18470, 18471, 18472, 18509, 18510, 18511, 18603, 18915, 18966, 19010, 19011, 19012, 19013, 19160, 19161, 19162, 19163, 19164, 19216, 19217, 19218, 19219, 19220, 19221, 19222, 19223, 19224, 19225, 19226, 19227, 19228, 19229, 19269, 19270, 19271, 19317, 19318, 19319, 19320, 19321, 19322, 19323, 19324, 19325, 19326, 19327, 19328, 19329, 19330, 19335, 19371, 19372, 19373, 19410, 19411, 19412, 19413, 19414, 19415, 19416, 19417, 19418, 19419, 19439, 19440, 19476, 19477, 19480, 19481, 19482, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19544, 19545, 19546, 19547, 19551, 19554, 19569, 19571, 19637, 19638, 19639, 19640, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19654, 19655, 19741, 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752, 19763, 19764, 19765, 19766, 19814, 19815, 19816, 19817, 19818, 19819, 19820, 19821, 19822, 19823, 19824, 19825, 19826, 19827, 19830, 19835, 19836, 19902, 19903, 19904, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19917, 19918, 19919, 19920, 19921, 19928, 19940, 19991, 19992, 19993, 19994, 19995, 19996, 19997, 19998, 19999, 20000, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20013, 20072, 20073, 20074, 20075, 20076, 20077, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20085, 20086, 20087, 20088, 20115, 20116, 20165, 20166, 20167, 20168, 20169, 20170, 20171, 20172, 20173, 20174, 20175, 20176, 20177, 20178, 20179, 20180, 20181, 20184, 20185, 20252, 20253, 20254, 20255, 20256, 20257, 20258, 20259, 20260, 20261, 20262, 20263, 20264, 20303, 20304, 20305, 20306, 20307, 20308, 20309, 20310, 20311, 20312, 20313, 20314, 20315, 20316, 20317, 20330, 20331, 20332, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20385, 20386, 20387, 20388, 20389, 20390, 20391, 20392, 20393, 20525, 20526, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20536, 20537, 20538, 20539, 20540, 20542, 20544, 20545, 20546, 20547, 20548, 20549, 20550, 20551, 20552, 20595, 20596, 20597, 20598, 20599, 20600, 20616, 20617, 20618, 20619, 20620, 20621, 20622, 20623, 20624, 20625, 20667, 20668, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20685, 20686, 20801, 20802, 20803, 20804, 20805, 20806, 20807, 20808, 20809, 20810, 20811, 20812, 20813, 20814, 20815, 20816, 20817, 20913, 20914, 20915, 20916, 20917, 20918, 20919, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 20977, 20978, 20979, 20980, 20981, 21035, 21036, 21037, 21038, 21039, 21040, 21041, 21042, 21043, 21044, 21045, 21077, 21078, 21079, 21080, 21104, 21105, 21106, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21117, 21118, 21119, 21120, 21121, 21122, 21123, 21124, 21125, 21126, 21127, 21128, 21129, 21130, 21131, 21132, 21134, 21135, 21136, 21137, 21138, 21139, 21140, 21141, 21142, 21143, 21144, 21145, 21146, 21147, 21148, 21149, 21150, 21151, 21152, 21153, 21154, 21155, 21156, 21157, 21158, 21159, 21160, 21161, 21162, 21163, 21164, 21165, 21166, 21167, 21168, 21169, 21170, 21171, 21172, 21173, 21174, 21175, 21176, 21177, 21178, 21179, 21180, 21181, 21182, 21183, 21184, 21185, 21186, 21187, 21188, 21189, 21190, 21191, 21192, 21193, 21194, 21195, 21196, 21197, 21198, 21199, 21200, 21201, 21202, 21203, 21204, 21205, 21206, 21207, 21208, 21209, 21210, 21211, 21212, 21213, 21214, 21215, 21216, 21217, 21218, 21219, 21220, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21241, 21242, 21243, 21244, 21245, 21246, 21247, 21248, 21249, 21250, 21251, 21252, 21253, 21254, 21255, 21256, 21257, 21258, 21259, 21260, 21261, 21262, 21263, 21264, 21265, 21266, 21267, 21268, 21269, 21270, 21271, 21272, 21273, 21274, 21275, 21276, 21277, 21278, 21279, 21280, 21281, 21282, 21283, 21284, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 21315, 21316, 21317, 21318, 21319, 21320, 21321, 21322, 21323, 21324, 21325, 21326, 21327, 21328, 21329, 21330, 21331, 21332, 21333, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21355, 21356, 21357, 21358, 21359, 21360, 21361, 21362, 21363, 21364, 21365, 21366, 21367, 21368, 21369, 21370, 21371, 21372, 21373, 21374, 21375, 21376, 21377, 21378, 21379, 21380, 21381, 21382, 21383, 21384, 21385, 21386, 21387, 21388, 21389, 21390, 21391, 21392, 21393, 21394, 21395, 21396, 21397, 21398, 21399, 21400, 21401, 21402, 21403, 21404, 21405, 21406, 21407, 21408, 21409, 21410, 21411, 21412, 21413, 21414, 21415, 21416, 21417, 21418, 21419, 21420, 21421, 21422, 21423, 21424, 21425, 21426, 21427, 21428, 21429, 21430, 21431, 21432, 21433, 21434, 21435, 21436, 21437, 21438, 21439, 21440, 21441, 21442, 21443, 21444, 21445, 21446, 21447, 21448, 21449, 21450, 21451, 21452, 21453, 21454, 21455, 21456, 21457, 21458, 21459, 21460, 21461, 21462, 21463, 21464, 21465, 21466, 21467, 21468, 21469, 21470, 21471, 21472, 21473, 21474, 21475, 21476, 21477, 21478, 21479, 21480, 21481, 21482, 21483, 21484, 21485, 21486, 21487, 21488, 21489, 21490, 21491, 21492, 21493, 21494, 21495, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21507, 21508, 21509, 21510, 21511, 21512, 21513, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 21521, 21522, 21523, 21524, 21525, 21526, 21527, 21528, 21529, 21530, 21531, 21532, 21533, 21534, 21535, 21536, 21537, 21538, 21539, 21540, 21541, 21542, 21543, 21544, 21545, 21546, 21547, 21548, 21549, 21550, 21551, 21552, 21553, 21554, 21555, 21556, 21557, 21558, 21559, 21560, 21561, 21562, 21563, 21564, 21565, 21566, 21567, 21568, 21569, 21570, 21571, 21572, 21573, 21574, 21575, 21576, 21577, 21578, 21579, 21580, 21581, 21582, 21583, 21584, 21585, 21586, 21587, 21588, 21589, 21590, 21591, 21592, 21593, 21594, 21595, 21596, 21597, 21598, 21599, 21600, 21601, 21602, 21603, 21604, 21605, 21606, 21607, 21608, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21617, 21618, 21619, 21620, 21621, 21622, 21623, 21624, 21625, 21626, 21627, 21628, 21629, 21630, 21631, 21632, 21633, 21634, 21635, 21636, 21637, 21638, 21639, 21640, 21641, 21642, 21643, 21644, 21645, 21646, 21647, 21648, 21649, 21650, 21651, 21652, 21653, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21663, 21664, 21665, 21666, 21667, 21668, 21669, 21670, 21671, 21672, 21673, 21674, 21675, 21676, 21677, 21678, 21679, 21680, 21681, 21682, 21683, 21684, 21685, 21686, 21687, 21688, 21689, 21690, 21691, 21692, 21693, 21694, 21695, 21696, 21697, 21698, 21699, 21700, 21701, 21702, 21703, 21704, 21705, 21706, 21707, 21708, 21709, 21710, 21711, 21712, 21713, 21714, 21715, 21716, 21717, 21718, 21719, 21720, 21721, 21722, 21723, 21724, 21725, 21726, 21727, 21728, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 21742, 21743, 21744, 21745, 21746, 21747, 21748, 21749, 21750, 21751, 21752, 21753, 21754, 21755, 21756, 21757, 21758, 21759, 21760, 21761, 21762, 21763, 21764, 21765, 21766, 21767, 21768, 21769, 21770, 21771, 21772, 21773, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21781, 21782, 21783, 21784, 21785, 21786, 21787, 21788, 21789, 21790, 21791, 21792, 21793, 21794, 21795, 21796, 21797, 21798, 21799, 21800, 21801, 21802, 21803, 21804, 21805, 21806, 21807, 21808, 21809, 21810, 21811, 21812, 21813, 21814, 21815, 21816, 21817, 21818, 21819, 21820, 21821, 21822, 21823, 21824, 21825, 21826, 21827, 21828, 21829, 21830, 21831, 21832, 21833, 21834, 21835, 21836, 21837, 21838, 21839, 21840, 21841, 21842, 21843, 21844, 21845, 21846, 21847, 21848, 21849, 21850, 21851, 21852, 21853, 21854, 21855, 21856, 21857, 21858, 21859, 21860, 21861, 21862, 21863, 21864, 21865, 21866, 21867, 21868, 21869, 21870, 21871, 21872, 21873, 21874, 21875, 21876, 21877, 21878, 21879, 21880, 21881, 21882, 21883, 21884, 21885, 21886, 21887, 21888, 21889, 21890, 21891, 21892, 21893, 21894, 21895, 21896, 21897, 21898, 21899, 21900, 21901, 21902, 21903, 21904, 21905, 21906, 21907, 21908, 21909, 21910, 21911, 21912, 21913, 21914, 21915, 21916, 21917, 21918, 21919, 21920, 21921, 21922, 21923, 21924, 21925, 21926, 21927, 21928, 21929, 21930, 21931, 21932, 21933, 21934, 21935, 21936, 21937, 21938, 21939, 21940, 21941, 21942, 21943, 21944, 21945, 21946, 21947, 21948, 21949, 21950, 21951, 21952, 21953, 21954, 21955, 21956, 21957, 21958, 21959, 21960, 21961, 21962, 21963, 21964, 21965, 21966, 21967, 21968, 21969, 21970, 21971, 21972, 21973, 21974, 21975, 21976, 21977, 21978, 21979, 21980, 21981, 21982, 21983, 21984, 21985, 21986, 21987, 21988, 21989, 21990, 21991, 21992, 21993, 21994, 21995, 21996, 21997, 21998, 21999, 22000, 22001, 22002, 22003, 22004, 22005, 22006, 22007, 22008, 22009, 22010, 22011, 22012, 22013, 22014, 22015, 22016, 22017, 22018, 22019, 22020, 22021, 22022, 22023, 22024, 22025, 22026, 22027, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22040, 22041, 22042, 22043, 22044, 22045, 22046, 22047, 22048, 22049, 22050, 22051, 22052, 22053, 22054, 22055, 22056, 22057, 22058, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22067, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22092, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 22103, 22104, 22105, 22106, 22107, 22108, 22109, 22110, 22111, 22112, 22113, 22114, 22115, 22116, 22117, 22118, 22119, 22120, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22128, 22129, 22130, 22131, 22132, 22133, 22134, 22135, 22136, 22137, 22138, 22139, 22140, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22149, 22150, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22158, 22159, 22160, 22161, 22162, 22163, 22164, 22165, 22166, 22167, 22168, 22169, 22170, 22171, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22179, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22199, 22200, 22201, 22202, 22203, 22204, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22236, 22237, 22238, 22239, 22240, 22241, 22242, 22243, 22244, 22245, 22246, 22247, 22248, 22249, 22250, 22251, 22252, 22253, 22254, 22255, 22256, 22257, 22258, 22259, 22260, 22261, 22262, 22263, 22264, 22265, 22266, 22267, 22268, 22269, 22270, 22271, 22272, 22273, 22274, 22275, 22276, 22277, 22278, 22279, 22280, 22281, 22282, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22300, 22301, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22312, 22313, 22314, 22315, 22316, 22317, 22318, 22319, 22320, 22321, 22322, 22323, 22324, 22325, 22326, 22327, 22328, 22329, 22330, 22331, 22332, 22333, 22334, 22335, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22344, 22345, 22346, 22347, 22348, 22349, 22350, 22351, 22352, 22353, 22354, 22355, 22356, 22357, 22358, 22359, 22360, 22361, 22362, 22363, 22364, 22365, 22366, 22367, 24734, 24735, 24736, 24737, 24738, 24739, 24740, 24741, 24742, 24743, 24744, 24745, 24746, 24747, 24748, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24773, 24774, 24775, 24776, 24777, 24778, 24779, 24780, 24781, 24782, 24783, 24784, 24785, 24786, 24787, 24788, 24789, 24790, 24791, 24792, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24805, 24972, 24974, 24975, 24976, 24977, 24978, 24979, 24980, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 24999, 25000, 25001, 25002, 25003, 25004, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25015, 25016, 25017, 25018, 25019, 25020, 25021, 25022, 25023, 25024, 25025, 25026, 25027, 25028, 26636, 26896, 26897, 27120, 29081, 29082, 29083, 29084, 29085, 29086, 29158, 30061, 30062, 30063, 30545, 30546, 30547, 30548, 30549, 30550, 30551, 30649, 30651, 30652, 30653, 30654, 30656, 30870, 30873, 30874, 31150, 31154, 31182, 31192, 31609, 31616, 32500, 32501, 32502, 32508, 32525, 32526, 32527, 1, 4580, 3, 21868, 21869, 21976, 2, 17871, 23810, 3, 2988, 7555, 21094, 1, 23897, 1, 32487, 1, 32784, 1, 25290, 1, 15213, 1, 26211, 1, 17780, 1, 25837, 1, 7827, 1, 21830, 1, 11857, 1, 16244, 1, 24229, 1, 1511, 1, 9341, 1, 26021, 12, 7506, 8002, 8717, 8718, 8965, 30693, 30850, 30851, 30852, 30853, 30854, 30855, 1, 26330, 1, 22785, 1, 13114, 2, 22812, 29188, 1, 22266, 21, 156, 5112, 7257, 7258, 7259, 7260, 7261, 7262, 7263, 7264, 7265, 7266, 7302, 7350, 8269, 11115, 11178, 16494, 28958, 28959, 32497, 2, 319, 320, 1, 9216, 1, 11762, 1, 24018, 1, 5100, 1, 12432, 1, 26325, 1, 25733, 1, 11026, 1, 4891, 1, 31942, 1, 6210, 2, 3981, 11492, 2, 4241, 5648, 1, 13015, 1, 21990, 1, 29779, 1, 15274, 2, 7348, 22170, 1, 22562, 6, 3376, 3451, 20584, 20657, 20684, 20876, 1, 25565, 1, 16916, 1, 32380, 1, 24967, 1, 25822, 1, 9401, 1, 7519, 1, 16267, 1, 29308, 1, 16751, 1, 6399, 8, 11651, 11747, 11854, 11978, 11979, 11980, 11981, 30690, 48, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 1, 11877, 1, 10208, 1, 9967, 1, 18029, 1, 22751, 2, 14451, 15066, 1, 30338, 1, 31681, 1, 30426, 1, 23878, 1, 18825, 1, 7884, 1, 8932, 1, 23707, 1, 17827, 1, 23757, 1, 10225, 2, 21246, 22362, 3, 10247, 10294, 29002, 1, 23563, 2, 7855, 7933, 1, 17571, 1, 11094, 1, 7532, 1, 6141, 1, 26717, 1, 13062, 1, 16763, 1, 24126, 1, 9740, 7, 24734, 24735, 24737, 24738, 24743, 24745, 24766, 3, 4787, 4788, 4789, 1, 6284, 2, 7728, 7729, 1, 433, 8, 3758, 3934, 11440, 11613, 11627, 11708, 11722, 16684, 20, 167, 7312, 8022, 8215, 8219, 8225, 8639, 8640, 8641, 8642, 8643, 8644, 9067, 9069, 9071, 9723, 10178, 18210, 30740, 31337, 4, 9132, 9133, 9134, 9136, 4, 4605, 4606, 4607, 4608, 1, 12164, 7, 26850, 26851, 26852, 26853, 26854, 26855, 26860, 1, 32466, 1, 29080, 1, 16765, 1, 32287, 1, 12564, 2, 17916, 23863, 1, 22971, 1, 26183, 1, 23918, 1, 29848, 1, 26667, 1, 26066, 3, 1325, 1371, 15594, 1, 30724, 13, 3202, 3205, 3207, 3209, 3210, 3211, 3212, 3213, 3214, 3219, 3227, 3237, 3251, 2, 17022, 17023, 1, 12725, 1, 12424, 1, 26424, 1, 5154, 1, 32140, 1, 12810, 1, 7559, 1, 22493, 1, 4686, 1, 29354, 1, 31033, 14, 7490, 11533, 21468, 21469, 21470, 21471, 21472, 21500, 21594, 21595, 21596, 21650, 21843, 21969, 1, 23754, 3, 28848, 28849, 28850, 2, 1806, 1807, 1, 32029, 1, 25224, 1, 12180, 1, 22617, 1, 22916, 1, 5026, 2, 262, 263, 1, 22774, 1, 13125, 1, 13603, 1, 15146, 1, 17815, 1, 23562, 246, 26644, 26645, 26646, 26647, 26648, 26649, 26650, 26651, 26652, 26653, 26654, 26655, 26656, 26657, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26688, 26689, 26690, 26691, 26692, 26693, 26694, 26695, 26696, 26697, 26698, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26720, 26721, 26722, 26723, 26724, 26725, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26774, 26775, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26822, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26834, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26843, 26844, 26845, 26846, 26847, 26848, 26849, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26866, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26879, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 3, 10459, 10460, 18290, 1, 9295, 1, 25509, 1, 16767, 1, 26003, 1, 9301, 4, 3662, 3702, 6424, 10494, 1, 6281, 179, 1562, 1709, 1719, 1730, 1847, 1848, 2094, 2108, 2109, 15804, 15810, 15816, 15820, 15824, 15826, 15829, 15833, 15835, 15839, 15841, 15842, 15844, 15846, 15850, 15854, 15862, 15868, 15871, 15872, 15873, 15874, 15875, 15876, 15880, 15884, 15890, 15904, 15910, 15916, 15922, 15932, 15935, 15938, 15939, 15942, 15949, 15956, 15961, 15966, 15968, 15970, 15972, 15974, 15978, 15981, 15985, 15987, 15989, 15991, 15995, 15997, 16002, 16006, 16008, 16009, 16010, 16011, 16015, 16018, 16023, 16025, 16027, 16029, 16031, 16033, 16035, 16038, 16039, 16040, 16042, 16070, 16098, 16106, 16109, 16116, 16117, 16122, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16133, 16137, 16138, 16139, 16140, 16141, 16144, 16145, 16146, 16148, 16149, 16150, 16151, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16175, 16176, 16177, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16191, 16192, 16194, 16195, 16196, 16197, 16203, 16204, 16205, 16207, 16213, 16216, 16217, 16218, 16220, 16221, 16222, 16223, 16225, 16226, 16227, 16228, 16232, 16233, 16235, 16236, 16237, 16466, 16467, 16468, 16469, 18566, 29600, 29627, 29662, 29689, 29714, 29730, 1, 12670, 2, 21709, 22179, 1, 16728, 1, 6144, 27, 6155, 21220, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21241, 21242, 21243, 22017, 22181, 1, 29778, 1, 26449, 1, 25927, 1, 3803, 1, 23944, 1, 32664, 1, 5362, 3, 5965, 12963, 18541, 1, 23771, 1, 23437, 2, 6137, 31307, 1, 22260, 1, 6279, 2, 13456, 29321, 4, 28838, 28840, 28944, 28948, 1, 29343, 1, 30534, 1, 15464, 1, 1897, 1, 23597, 1, 23871, 1, 22896, 1, 9506, 1, 25606, 1, 24295, 134, 185, 698, 699, 717, 718, 719, 792, 821, 845, 851, 1353, 2641, 3010, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 4505, 4506, 4507, 5577, 5578, 6533, 6534, 6595, 6596, 6920, 8013, 8014, 8575, 8579, 8587, 8591, 8655, 8656, 8657, 8658, 8661, 8662, 8665, 8666, 8671, 8672, 8678, 8679, 8680, 8681, 8684, 8685, 9657, 9680, 9681, 9683, 9684, 9703, 9704, 9772, 9773, 9779, 9780, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10181, 10182, 10211, 10212, 10213, 10214, 10350, 10351, 10481, 10728, 10729, 10730, 10731, 10751, 10811, 10978, 11166, 11167, 11168, 11178, 14182, 16280, 16281, 16282, 16283, 16284, 16285, 16287, 16288, 16289, 16290, 16291, 16292, 16294, 16295, 16994, 17046, 17047, 18398, 18521, 19051, 19093, 19136, 22156, 26948, 26982, 27064, 27115, 28856, 28858, 29521, 29587, 31335, 31336, 31570, 31589, 31590, 31591, 31592, 31593, 2, 360, 361, 3, 30668, 30669, 30938, 1, 18000, 1, 24703, 23, 3481, 3482, 4244, 4389, 4971, 11192, 11286, 12655, 13516, 14904, 21227, 21339, 21390, 21391, 21392, 21393, 21493, 21508, 22038, 22048, 22192, 22242, 29290, 2, 5917, 6019, 1, 12317, 5, 10989, 15105, 15106, 15107, 15108, 1, 30593, 1, 32186, 1, 25305, 1, 25906, 1, 9894, 3, 6162, 13931, 13932, 2, 12256, 24076, 2, 26702, 26710, 3, 169, 13141, 13376, 1, 11791, 9, 24947, 24975, 24976, 25040, 25041, 25042, 25043, 25044, 25045, 1, 7513, 1, 2125, 114, 1504, 2709, 3008, 4353, 7304, 7584, 7600, 7601, 7602, 7603, 7608, 7609, 13797, 16966, 16967, 16968, 16969, 16970, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 16979, 16980, 16981, 16982, 16983, 16999, 17000, 17006, 17007, 17013, 17014, 17015, 17042, 17043, 18185, 18186, 18426, 18427, 18428, 18429, 18430, 18431, 18432, 18433, 18434, 18435, 18436, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18520, 18736, 18763, 18973, 19257, 19593, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29502, 29503, 29504, 29526, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29585, 29586, 121, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, 6160, 6161, 6162, 1, 18287, 1, 25909, 2, 7297, 7298, 1, 8202, 5, 7485, 7490, 7501, 7513, 7518, 3, 10775, 10915, 10941, 1, 12533, 1, 12556, 2, 7300, 7301, 2, 9971, 9978, 1, 29866, 35, 4132, 4414, 4666, 4913, 4990, 7736, 10387, 10388, 10419, 10420, 10421, 10422, 10472, 11221, 11315, 11828, 12562, 13518, 13890, 14929, 16628, 16751, 18125, 21722, 21723, 21887, 22177, 22209, 22318, 22354, 24378, 24579, 26837, 26838, 26883, 79, 14784, 14785, 14786, 14787, 14788, 14789, 14790, 14791, 14792, 14793, 14794, 14795, 14796, 14797, 14798, 14799, 14800, 14801, 14802, 14803, 14804, 14805, 14806, 14975, 14976, 14977, 14978, 14979, 14980, 14981, 14982, 14983, 14984, 14985, 14986, 14987, 14988, 14989, 14990, 14991, 14992, 14993, 14994, 14995, 14996, 14997, 14998, 14999, 15000, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15011, 15012, 15013, 15014, 15015, 15016, 15017, 15018, 15019, 15020, 15021, 15022, 15023, 15024, 15025, 15026, 15027, 15028, 15029, 15030, 1, 21840, 1, 7930, 7, 7635, 8942, 9476, 12363, 24092, 24426, 30977, 1, 29834, 6, 1131, 1132, 6413, 10687, 13757, 13758, 1, 29845, 1, 29771, 1, 9375, 1, 30420, 2, 24105, 24322, 1, 3174, 32, 8205, 8206, 9073, 9074, 9195, 9196, 9622, 9623, 10846, 11042, 11135, 11136, 11139, 11140, 16305, 16306, 16340, 16341, 29997, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 30497, 30897, 30898, 30899, 1, 25354, 1, 9275, 1, 7854, 4, 401, 4398, 14913, 30029, 1, 23970, 1, 32383, 1, 17078, 1, 23030, 1, 23258, 1, 17554, 1, 32297, 1, 9851, 1, 30394, 1, 25704, 1, 11926, 1, 29290, 1, 23570, 2, 3233, 3234, 3, 13608, 24656, 29327, 1, 12662, 1, 23036, 2, 26798, 26805, 1, 32345, 1, 15468, 1, 25537, 1, 25698, 2, 7522, 27500, 3, 28583, 28584, 28585, 6, 36, 16351, 16498, 30649, 30652, 32501, 20, 1031, 1063, 1267, 1268, 4223, 4433, 6406, 10665, 11217, 11311, 12453, 13696, 13781, 13782, 14948, 16731, 17240, 17671, 18673, 30157, 1, 26409, 1, 30292, 1, 8033, 2, 8724, 31771, 1, 13256, 1, 9367, 1, 23202, 1, 31250, 1, 15449, 1, 22876, 3, 5419, 5842, 5858, 1, 26841, 1, 26875, 5, 11854, 11978, 11979, 11980, 11981, 10, 2379, 8302, 8322, 8342, 8431, 9017, 11959, 12094, 24886, 27207, 1, 31246, 1, 25271, 5, 11976, 12018, 12019, 12020, 12021, 7, 7287, 7288, 10748, 10749, 10750, 10769, 30952, 1, 25619, 1, 6023, 1, 32311, 1, 22905, 1, 30355, 1, 12325, 2, 207, 239, 1, 6497, 1, 24347, 1, 31761, 1, 13314, 1, 12932, 1, 15551, 1, 27181, 1, 26011, 1, 7877, 8, 10411, 10412, 10417, 10418, 10419, 10420, 10435, 10436, 12, 17207, 21275, 21276, 21277, 21278, 21279, 21280, 21281, 22213, 22214, 22241, 22355, 1, 9365, 1, 25602, 10, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 5627, 1, 21110, 1, 25516, 8, 8305, 8325, 8345, 8434, 11962, 12097, 24889, 27210, 13, 1774, 18163, 18194, 18229, 18266, 18533, 18608, 18714, 18744, 18771, 19064, 19101, 19144, 2, 10865, 11071, 1, 9261, 2, 17959, 24027, 4, 2049, 6369, 18806, 18807, 2, 10269, 10316, 1, 23268, 1, 26401, 2, 1014, 1094, 4, 31252, 31269, 31270, 31271, 1, 32339, 1, 29787, 1, 25237, 1, 32638, 1, 25457, 3, 10252, 10299, 29007, 2, 1045, 1077, 1, 15422, 10, 9134, 9136, 30794, 30795, 31564, 31565, 31566, 31567, 31595, 31597, 1, 26367, 1, 22925, 1, 25166, 1, 24450, 1, 11080, 2, 8861, 8862, 6, 30751, 30777, 30778, 30902, 30903, 30904, 1, 24283, 1, 30940, 1, 22570, 2, 14984, 15008, 1, 24726, 1, 23870, 2, 1409, 1410, 1, 9846, 1, 22575, 7, 4307, 13459, 13886, 17510, 24164, 24522, 29252, 1, 24962, 4, 1440, 1445, 1460, 15615, 1, 13312, 1, 9220, 78, 14181, 14182, 14183, 14184, 14185, 14186, 14187, 14188, 14189, 14190, 29460, 29461, 29462, 29463, 29464, 29465, 29466, 29467, 29468, 29469, 29470, 29471, 29472, 29473, 29474, 29475, 29476, 29477, 29478, 29479, 29480, 29481, 29482, 29483, 29484, 29485, 29486, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29502, 29503, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29517, 29518, 29519, 29520, 29521, 29522, 29523, 29524, 29525, 29526, 29527, 1, 5383, 1, 12862, 1, 10921, 1, 22666, 1, 32023, 1, 24314, 1, 8819, 1, 29336, 1, 3135, 1, 22525, 3, 13868, 24201, 24564, 43, 2082, 2206, 2328, 2421, 2505, 2594, 2760, 2858, 2947, 3227, 3367, 3442, 3516, 5579, 5671, 6224, 13528, 14288, 14570, 14596, 14627, 18494, 19202, 19307, 19468, 19520, 19628, 19683, 19732, 19802, 19889, 19981, 20062, 20154, 20242, 20300, 20367, 20513, 20576, 20650, 20791, 20953, 21008, 1, 11535, 32, 913, 944, 3136, 4131, 4416, 4986, 11222, 11316, 11588, 11829, 12582, 13631, 13872, 14931, 16629, 16753, 17398, 18127, 21659, 21743, 24374, 24568, 27989, 28015, 28047, 28073, 28105, 28131, 28163, 28189, 28221, 28247, 1, 3879, 1, 9315, 52, 21140, 21146, 21150, 21155, 21210, 21254, 21258, 21268, 21269, 21301, 21302, 21304, 21305, 21316, 21348, 21399, 21416, 21419, 21433, 21464, 21540, 21567, 21593, 21629, 21630, 21680, 21693, 21707, 21760, 21814, 21851, 21866, 21885, 21899, 21926, 21927, 21941, 22052, 22193, 22197, 22212, 22219, 22227, 22228, 22248, 22250, 22264, 22304, 22317, 22325, 22334, 22345, 1, 27293, 1, 15183, 1, 1805, 1, 12540, 1, 23780, 4, 3282, 3283, 3284, 3301, 1, 30324, 1, 32711, 1, 23253, 1, 27291, 1, 15012, 2, 7615, 7679, 1, 12808, 1, 13080, 1, 30716, 1, 31328, 31, 19024, 19025, 19026, 19027, 19028, 19029, 19030, 19031, 19032, 19033, 19034, 19035, 19036, 19037, 19038, 19039, 19040, 19041, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19051, 19052, 19053, 19054, 1, 15488, 1, 24797, 5, 3666, 3706, 6428, 7762, 10498, 1, 25725, 6, 571, 572, 1663, 10359, 10360, 31100, 1, 30822, 4, 5151, 5228, 7787, 8211, 3, 6108, 6109, 14535, 2, 27628, 27649, 18, 11664, 11760, 26929, 26946, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 27081, 27082, 27083, 27084, 27085, 27086, 1, 11876, 1, 12601, 1, 21105, 1, 23243, 1, 2045, 1, 12732, 1, 32403, 1, 24736, 1, 5613, 12, 59, 1521, 4329, 7334, 8091, 10747, 13929, 16274, 16331, 16521, 28968, 32524, 1, 31700, 1, 17808, 1, 25836, 1, 26267, 1, 10210, 2, 1043, 1075, 1, 25089, 1, 30100, 1, 27180, 1, 23204, 1, 12651, 1, 4296, 1, 17060, 3, 4232, 12505, 14155, 1, 23338, 1, 7622, 5, 3600, 5752, 5987, 25035, 25042, 1, 672, 1, 3793, 1, 12182, 1, 24218, 3, 10909, 31653, 31684, 1, 24132, 1, 29269, 1, 15381, 2, 1898, 19388, 1, 7788, 1, 30098, 5, 5807, 5975, 5982, 10593, 26564, 1, 8890, 79, 7980, 9600, 9601, 9606, 9607, 9608, 9609, 9758, 9759, 9760, 9789, 9827, 9828, 27121, 27122, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27166, 27167, 27168, 27169, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 1, 22772, 2, 13573, 29349, 1, 24957, 1, 32676, 1, 18621, 1, 23628, 33, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16296, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16313, 16314, 16315, 16316, 16319, 16320, 1, 11558, 1, 23551, 1, 25142, 1, 12001, 1, 13259, 5, 30661, 30897, 30898, 30899, 30907, 1, 7868, 5, 3310, 3311, 3312, 3479, 3480, 1, 26190, 1, 32157, 1, 9454, 1, 8933, 132, 10235, 10236, 10237, 10238, 10239, 10240, 10241, 10242, 10243, 10244, 10245, 10246, 10247, 10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255, 10256, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10271, 10272, 10273, 10274, 10275, 10276, 10277, 10278, 10279, 10280, 10281, 10282, 10283, 10284, 10285, 10286, 10287, 10288, 10289, 10290, 10291, 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 28991, 28992, 28993, 28994, 28995, 28996, 28997, 28998, 28999, 29000, 29001, 29002, 29003, 29004, 29005, 29006, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29020, 29021, 29022, 29023, 29024, 29025, 29026, 29027, 29028, 1, 23656, 4, 10817, 10818, 11001, 31292, 17, 7989, 7990, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28770, 28771, 28772, 15, 21229, 21420, 21421, 21422, 21423, 21588, 21589, 21732, 21759, 21891, 21914, 21978, 22021, 22031, 22249, 1, 30533, 1, 3338, 1, 18080, 1, 15056, 1, 25384, 5, 3686, 3726, 6448, 10518, 12803, 1, 23903, 1, 15052, 1, 32670, 710, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5582, 5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 1, 6389, 1, 15538, 1, 31004, 5, 7926, 7927, 7928, 7929, 9777, 2, 27478, 27496, 1, 27056, 1, 22258, 1, 15018, 1, 23351, 1, 7775, 1, 5325, 1, 8941, 1, 24399, 99, 7488, 7654, 7665, 7667, 7672, 7673, 7827, 7828, 8163, 8191, 8192, 8193, 8194, 9692, 10109, 10111, 10736, 10737, 12022, 12023, 12029, 12030, 12053, 12077, 12078, 18701, 18702, 18703, 18704, 18705, 18706, 21180, 21193, 21194, 21195, 21203, 21212, 21213, 21216, 21257, 21274, 21359, 21371, 21375, 21377, 21383, 21395, 21423, 21457, 21458, 21463, 21538, 21547, 21548, 21559, 21561, 21630, 21670, 21676, 21677, 21691, 21700, 21701, 21749, 21752, 21754, 21813, 21834, 21835, 21859, 21862, 21869, 21873, 21887, 21905, 21906, 21912, 21916, 21917, 21918, 22002, 22179, 22251, 22256, 22264, 22266, 22332, 22333, 22350, 22366, 28347, 28348, 28574, 28577, 28915, 28916, 30219, 30222, 30861, 1, 11074, 1, 7955, 1, 24147, 4, 4111, 4611, 12867, 13510, 1, 23312, 1, 29345, 1, 25506, 1, 23149, 1, 23926, 1, 15214, 1, 16857, 1, 7950, 1, 1920, 1, 25750, 1, 1001, 4, 8748, 8849, 30767, 31197, 1, 7978, 1, 11063, 1, 6117, 1, 21429, 1, 26668, 1, 22960, 1, 23664, 1, 29163, 1, 32295, 1, 4186, 1, 13451, 1, 32646, 1, 9501, 1, 16252, 3, 10939, 16989, 21120, 1, 15285, 159, 8020, 8106, 8165, 8166, 8272, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8719, 8720, 8721, 9932, 9933, 10164, 10168, 10780, 10901, 10905, 10910, 12217, 28641, 28642, 28643, 28695, 28696, 28697, 30328, 30922, 30970, 30972, 30974, 30976, 31682, 31771, 1, 8631, 1, 24805, 120, 11103, 11104, 11105, 11106, 11107, 11108, 11109, 11110, 11111, 11112, 11113, 11114, 11115, 11116, 11117, 11120, 11121, 11122, 11157, 11158, 11159, 11160, 11170, 11174, 11177, 11178, 11505, 11506, 11507, 11508, 11509, 11510, 11511, 11512, 11513, 11514, 11515, 11516, 11517, 11518, 11519, 11520, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 16271, 16272, 16329, 16591, 16594, 27316, 27317, 27318, 27319, 27320, 1, 12391, 2, 7614, 7678, 1, 23292, 1, 27067, 1, 22814, 3, 26812, 26813, 26823, 1, 9332, 1, 9373, 1, 29777, 1, 17836, 1, 12032, 1, 21639, 2, 17960, 24028, 1, 5207, 9, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 1, 17861, 1, 63, 1, 32764, 6, 8042, 8056, 8063, 8083, 8084, 8090, 1, 23383, 1, 7334, 1, 15157, 1, 9869, 1, 32672, 1, 1917, 1, 15101, 2, 209, 241, 1, 6026, 1, 30616, 1, 23174, 1, 25444, 2, 8817, 8826, 1, 15153, 2, 21715, 21716, 1, 16852, 2, 22852, 29250, 1, 9645, 1, 156, 3, 3052, 3053, 3077, 1, 25058, 1, 26455, 3, 2711, 16866, 31334, 1, 32260, 1, 14143, 2, 22436, 23513, 1, 32267, 813, 1709, 1719, 7362, 7363, 7606, 7607, 8128, 8249, 8274, 8275, 10180, 10190, 10191, 10192, 10193, 10219, 10220, 15643, 15644, 15645, 15646, 15647, 15648, 15649, 15650, 15651, 15652, 15653, 15654, 15655, 15656, 15657, 15658, 15659, 15660, 15661, 15662, 15663, 15664, 15665, 15666, 15667, 15668, 15669, 15670, 15671, 15672, 15673, 15674, 15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15702, 15703, 15704, 15705, 15706, 15707, 15708, 15709, 15710, 15711, 15712, 15713, 15714, 15715, 15716, 15717, 15718, 15719, 15720, 15721, 15722, 15723, 15724, 15725, 15726, 15727, 15728, 15729, 15730, 15731, 15732, 15733, 15734, 15735, 15736, 15737, 15738, 15739, 15740, 15757, 15758, 15759, 15760, 15761, 15762, 15763, 15764, 15765, 15766, 15767, 15768, 15769, 15770, 15771, 15772, 15773, 15774, 15775, 15776, 15777, 15778, 15779, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15802, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, 15871, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15882, 15883, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 15958, 15959, 15960, 15961, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15972, 15973, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, 16072, 16073, 16074, 16075, 16076, 16077, 16078, 16079, 16080, 16081, 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, 16102, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16133, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, 16142, 16143, 16144, 16145, 16146, 16147, 16148, 16149, 16150, 16151, 16152, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16191, 16192, 16193, 16194, 16195, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16223, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16296, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16313, 16314, 16315, 16316, 16319, 16320, 16354, 16356, 16358, 16359, 16360, 16361, 16362, 16363, 16364, 16365, 16366, 16367, 16368, 16369, 16370, 16371, 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16391, 16392, 16393, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16413, 16414, 16415, 16416, 16417, 16418, 16419, 16420, 16421, 16422, 16423, 16424, 16425, 16426, 16427, 16428, 16429, 16430, 16431, 16432, 16433, 16434, 16435, 16436, 16437, 16438, 16439, 16440, 16441, 16442, 16443, 16444, 16445, 16446, 16447, 16448, 16449, 16450, 16451, 16452, 16453, 16454, 16455, 16456, 16457, 16458, 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16476, 16477, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 17026, 17032, 17047, 21564, 22093, 22103, 22111, 22114, 22115, 22116, 22117, 22118, 22119, 22120, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22128, 22129, 22139, 22141, 22149, 22150, 22161, 22162, 22163, 22164, 22165, 22166, 24890, 24891, 24892, 1, 6340, 1, 12056, 5, 9624, 9687, 9688, 9689, 9690, 1, 21631, 1, 300, 1, 25754, 1, 31730, 82, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 86, 29876, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 29920, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 29935, 29936, 29937, 29938, 29939, 29940, 29941, 29942, 29943, 29944, 29945, 29946, 29947, 29948, 29949, 29950, 29951, 29952, 29953, 29954, 29955, 29956, 29957, 30650, 30670, 30921, 30922, 1, 7524, 3, 10253, 10300, 29008, 1, 25871, 1, 3877, 1, 6073, 1, 1000, 1, 18014, 3, 5202, 24998, 29137, 1, 8707, 1, 4170, 1, 26566, 1, 22275, 1, 25667, 1, 32026, 1, 29337, 1, 23103, 4, 611, 13969, 13970, 14883, 1, 6160, 2, 22442, 23519, 1, 27290, 4, 10215, 10216, 10217, 10218, 1, 32255, 1, 25313, 1, 24799, 2, 26515, 26516, 1, 5589, 1, 2037, 2, 21568, 24345, 3, 9745, 9746, 9748, 1, 31795, 11, 4240, 5006, 13185, 13379, 13663, 14151, 16737, 18107, 24652, 29240, 29241, 1, 32427, 2, 7803, 7804, 20, 8260, 8575, 8576, 8577, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, 8589, 8590, 8591, 8595, 8596, 11, 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10162, 30343, 30366, 30628, 2, 3302, 3303, 23, 19137, 19138, 19139, 19140, 19141, 19142, 19143, 19144, 19145, 19146, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154, 19155, 19156, 19157, 19158, 19159, 1, 23278, 1, 17982, 1, 31290, 1, 32265, 1, 17077, 1, 29277, 1, 12202, 1, 17839, 1, 15171, 1, 31306, 1, 31683, 1, 5193, 1, 15001, 1, 27264, 3, 10686, 13755, 13756, 1, 31806, 2, 22832, 29207, 2, 674, 14894, 2, 7517, 27497, 1, 13117, 1, 24318, 1, 26359, 1, 8592, 2, 7623, 7674, 1, 14478, 1, 12031, 1, 29287, 1, 12451, 8, 24031, 24033, 24034, 24035, 24037, 24038, 24138, 24275, 1, 12161, 1, 9190, 1, 30595, 4, 18843, 18844, 18870, 18921, 54, 1040, 1072, 1173, 1174, 1175, 1176, 1210, 1211, 1212, 1213, 1301, 1302, 1307, 1308, 3656, 3696, 4515, 6390, 6418, 6631, 7255, 7257, 7274, 10488, 10671, 11398, 13673, 16298, 17157, 17250, 17463, 17503, 18336, 18891, 18942, 21159, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21335, 21336, 21356, 21585, 21607, 21657, 22346, 24987, 26600, 29139, 29204, 1, 32665, 1, 22878, 2, 10443, 10444, 1, 25913, 1, 32767, 1, 17724, 1, 9503, 1, 25724, 3, 31123, 31124, 31126, 2, 4648, 4649, 5, 10250, 10281, 10297, 10328, 29005, 1, 11884, 1, 31177, 1, 29286, 1, 29781, 1, 25931, 19, 3663, 3703, 5196, 6425, 8895, 8897, 10495, 10897, 11520, 16813, 29180, 30575, 30578, 30585, 30586, 30587, 30843, 30849, 31638, 1, 31052, 1, 30295, 1, 15302, 1, 12405, 1, 29282, 1, 24073, 1, 23898, 1, 26286, 1, 9230, 1, 13106, 3, 17109, 31145, 31213, 1, 23242, 1, 24432, 1, 24801, 1, 22756, 1, 16935, 1, 23412, 1, 29309, 1, 12002, 1, 29857, 1, 5088, 3, 7559, 7560, 7561, 1, 12740, 1, 15266, 1, 3185, 3, 7480, 7487, 7488, 1, 25881, 2, 7500, 27510, 1, 22590, 1, 30425, 1, 4878, 1, 23881, 1, 15373, 1, 9864, 1, 23689, 1, 25700, 1, 25816, 1, 32072, 1, 9849, 1, 8950, 15, 407, 911, 942, 6550, 17359, 27987, 28013, 28045, 28071, 28103, 28129, 28161, 28187, 28219, 28245, 2, 315, 316, 1, 32459, 1, 13199, 1, 15298, 2, 17888, 23833, 62, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 7552, 2, 27572, 27593, 2, 1802, 1803, 1, 23893, 1, 16245, 1, 3950, 2, 17852, 23794, 1, 25611, 1, 26794, 1, 17707, 1, 23672, 2, 5400, 29184, 1, 10623, 1, 23181, 1, 6204, 1, 7664, 1, 30340, 1, 10222, 1, 10610, 1, 25521, 1, 23016, 1, 16844, 1, 23153, 1, 30776, 1, 26340, 1, 10599, 2, 21192, 22005, 1, 25703, 2, 6148, 6151, 1, 24628, 1, 32461, 2, 31950, 31951, 1, 31018, 1, 4983, 1, 22966, 1, 1891, 1, 31676, 2, 11119, 11726, 1, 32259, 2, 3334, 3336, 1, 12829, 1, 31248, 1, 1428, 1, 16834, 1, 5206, 1, 22567, 1, 13270, 1, 15198, 1, 31285, 1, 31640, 1, 24780, 1, 23710, 1, 32696, 1, 8824, 2, 3466, 3467, 1, 23038, 6, 162, 8120, 14001, 14002, 16710, 30619, 1, 12681, 1, 24079, 1, 13024, 1, 10556, 1, 25194, 1, 9450, 1, 27276, 1, 25426, 1, 23095, 1, 21998, 1, 29312, 1, 23082, 1, 23709, 1, 32470, 3, 10809, 10810, 30533, 1, 12656, 1, 32820, 1, 9917, 1, 15380, 18, 1359, 1763, 2038, 2273, 2383, 2464, 2547, 18632, 18633, 18700, 19328, 19477, 19551, 19654, 19928, 20013, 20184, 20393, 36, 2190, 2313, 2406, 2490, 2579, 2745, 2843, 2931, 3207, 3500, 3583, 5568, 5661, 14273, 14568, 14578, 14612, 14684, 19187, 19290, 19453, 19505, 19714, 19787, 19872, 19966, 20047, 20139, 20227, 20301, 20352, 20498, 20635, 20776, 20938, 21026, 1, 12560, 1, 27286, 1, 26437, 1, 26637, 1, 22970, 1, 10640, 1, 13305, 1, 21452, 1, 31928, 1, 18003, 1, 29192, 7, 28850, 28894, 28897, 28901, 28903, 28906, 28910, 1, 10628, 38, 1352, 1398, 1558, 1654, 1655, 1656, 1658, 1842, 1843, 2091, 2113, 15847, 15848, 15849, 15850, 15851, 15852, 15926, 15927, 15992, 15993, 15994, 15995, 16166, 16167, 16233, 16450, 16451, 16452, 16453, 18579, 29604, 29618, 29631, 29666, 29677, 29693, 29718, 1, 23569, 1, 7678, 1, 9229, 1, 13022, 1, 23004, 1, 23245, 1, 25533, 1, 25594, 3, 1751, 1753, 1758, 2, 9814, 9815, 1, 23113, 1, 32150, 1, 11663, 42, 7271, 7273, 7274, 7275, 7338, 7882, 8284, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8523, 8524, 8525, 8526, 9483, 9484, 9485, 9486, 9487, 9577, 9578, 9579, 9580, 9819, 9820, 9943, 9957, 10038, 10752, 10753, 10761, 11143, 11163, 16297, 16298, 16335, 30639, 1, 11942, 1, 9795, 1, 11981, 1, 21930, 1, 24770, 1, 31976, 2, 13971, 13972, 1, 26472, 3, 12198, 26854, 26858, 1, 24170, 1, 29767, 1, 12538, 1, 15329, 2, 17603, 17639, 89, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 1, 15326, 6, 31902, 31903, 31904, 31905, 31906, 31907, 1, 22282, 1, 15168, 2, 7525, 27485, 17, 832, 891, 900, 925, 926, 931, 957, 958, 7200, 7216, 7217, 7219, 7229, 7230, 7234, 7240, 7241, 1, 25941, 1, 24697, 2, 14975, 15002, 1, 11888, 2, 12728, 13350, 1, 26453, 1, 25571, 1, 32442, 1, 10580, 1, 32666, 1, 9446, 1, 31645, 1, 26843, 1, 23617, 1, 23189, 1, 12396, 1, 23239, 5, 8265, 30664, 30665, 30922, 30923, 1, 2036, 1, 32048, 1, 23326, 1, 9237, 2, 12693, 22013, 1, 26059, 1, 32086, 2, 4594, 4595, 1, 10643, 1, 25207, 1, 15156, 1, 15418, 1, 12591, 1, 15575, 1, 32111, 2, 7795, 7796, 3, 3077, 3078, 3079, 1, 9442, 2, 7420, 30653, 1, 17086, 72, 1828, 1829, 1834, 1840, 1843, 1846, 7460, 8729, 8730, 8731, 8732, 8733, 8734, 9522, 9523, 9524, 9525, 9526, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 10046, 10077, 10078, 15747, 15748, 30541, 30542, 30543, 30544, 30878, 30879, 30880, 30881, 30882, 30883, 30884, 30885, 30886, 30887, 30888, 30889, 30890, 31063, 31064, 31065, 31066, 31067, 31068, 31069, 31070, 31071, 31072, 31073, 31074, 31075, 31076, 31077, 31078, 31079, 31080, 31081, 31082, 31083, 31084, 31085, 31086, 6, 1527, 1721, 16370, 16371, 16486, 16487, 4, 28867, 28868, 28869, 28871, 3, 31836, 31837, 31838, 1, 3633, 76, 164, 192, 199, 203, 210, 216, 224, 231, 235, 242, 248, 251, 372, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 550, 551, 772, 800, 967, 1221, 1222, 1229, 1230, 1231, 1232, 1233, 1234, 1239, 1240, 1241, 1242, 1245, 1246, 1247, 1248, 1251, 1252, 1255, 1256, 1259, 1260, 6753, 6754, 6755, 6804, 6805, 6812, 6813, 6844, 6845, 6880, 6881, 6888, 6889, 6898, 6899, 6906, 6907, 6917, 8078, 8079, 8080, 8081, 8082, 8085, 8086, 10720, 79, 2169, 2225, 2296, 2341, 2391, 2434, 2471, 2520, 2562, 2609, 2651, 2685, 2726, 2776, 2824, 2874, 2912, 2966, 2991, 3164, 3246, 3391, 3405, 3528, 3538, 3543, 4476, 5367, 5801, 5946, 5969, 7545, 14252, 14302, 14482, 14640, 14795, 17197, 17266, 18659, 18883, 18934, 19168, 19219, 19275, 19319, 19412, 19486, 19533, 19639, 19697, 19744, 19770, 19818, 19852, 19904, 19947, 19993, 20028, 20074, 20113, 20120, 20167, 20212, 20256, 20309, 20337, 20380, 20400, 20432, 20481, 20527, 20758, 20803, 20923, 20969, 20998, 21037, 24996, 10, 7901, 7902, 28327, 28466, 28510, 28553, 28573, 28575, 28576, 30757, 1, 18573, 1, 23932, 1, 9568, 1, 9748, 1, 13027, 1, 9642, 1, 25187, 2, 1497, 2130, 1, 12936, 1, 19340, 1, 23276, 2, 21809, 21920, 1, 11571, 2, 26768, 26769, 1, 24785, 1, 21536, 1, 725, 1, 5158, 1, 9640, 1, 26217, 1, 12999, 1, 26293, 1, 17298, 1, 17195, 1, 27123, 1, 13023, 2, 10219, 10220, 1, 9605, 2, 304, 305, 2, 3953, 14457, 27, 8808, 8809, 26981, 26982, 26983, 26984, 26985, 26986, 26987, 26988, 27036, 27037, 27112, 27114, 27115, 27116, 27117, 27118, 27119, 30396, 30924, 30925, 30926, 30927, 30928, 30929, 30937, 1, 9364, 1, 8167, 1, 12813, 2, 30221, 30432, 7, 1469, 13915, 15623, 17355, 18293, 24271, 24596, 1, 18077, 1, 7662, 4, 3673, 3713, 6435, 10505, 1, 9508, 1, 23115, 3, 1638, 15703, 15704, 1, 25479, 1, 9661, 4, 3659, 3699, 6421, 10491, 1, 29314, 1, 29297, 2, 8069, 8075, 1, 24396, 1, 17759, 1, 25875, 1, 32279, 1, 12141, 1, 25053, 1, 27273, 1, 9902, 1, 29847, 1, 22281, 2, 10785, 10914, 1, 7960, 3, 4139, 13294, 13632, 1, 7993, 1, 13798, 1, 29196, 88, 29372, 29373, 29374, 29375, 29376, 29377, 29378, 29379, 29380, 29381, 29382, 29383, 29384, 29385, 29386, 29387, 29388, 29389, 29390, 29391, 29392, 29393, 29394, 29395, 29396, 29397, 29398, 29399, 29400, 29401, 29402, 29403, 29404, 29405, 29406, 29407, 29408, 29409, 29410, 29411, 29412, 29413, 29414, 29415, 29416, 29417, 29418, 29419, 29420, 29421, 29422, 29423, 29424, 29425, 29426, 29427, 29428, 29429, 29430, 29431, 29432, 29433, 29434, 29435, 29436, 29437, 29438, 29439, 29440, 29441, 29442, 29443, 29444, 29445, 29446, 29447, 29448, 29449, 29450, 29451, 29452, 29453, 29454, 29455, 29456, 29457, 29458, 29459, 1, 31162, 1, 30844, 1, 15437, 1, 12759, 1, 9665, 1, 23603, 1, 24719, 1, 26844, 1, 2073, 1, 12144, 2, 26789, 26793, 4, 3753, 11435, 15102, 16679, 1, 23642, 1, 17773, 1, 26023, 1, 17264, 1, 29867, 1, 32679, 1, 2127, 1, 3409, 2, 1028, 1060, 1, 22607, 2, 30187, 30203, 70, 11368, 11369, 11370, 11371, 11372, 11373, 11374, 11375, 11376, 11377, 11378, 11379, 11380, 11381, 11382, 11383, 11384, 11385, 11386, 11387, 11388, 11389, 11390, 11391, 11392, 11393, 11394, 11395, 11396, 11397, 11398, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11406, 11407, 11408, 11409, 11410, 11521, 11522, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11546, 11547, 1, 22713, 1, 5616, 1, 19079, 1, 9610, 1, 26339, 1, 23252, 2, 9898, 12626, 5, 30466, 30467, 30468, 30469, 30470, 1, 23198, 1, 30326, 1, 16907, 1, 15553, 1, 9372, 1, 15566, 45, 2067, 17531, 18856, 18857, 21190, 21191, 21192, 21193, 21194, 21195, 21323, 21349, 21436, 21581, 21622, 21653, 21655, 21660, 21730, 21731, 21738, 21739, 21740, 21952, 22056, 22057, 22058, 22059, 22060, 22061, 22062, 22063, 22130, 22131, 22132, 22133, 22134, 22151, 22152, 22186, 22187, 22217, 22251, 22302, 22325, 2, 12267, 14834, 1, 26365, 5, 5824, 14178, 19573, 20094, 20697, 2, 31766, 31767, 106, 1945, 2197, 2320, 2351, 2413, 2497, 2586, 2667, 2752, 2850, 2938, 3359, 3434, 3508, 4101, 4432, 4557, 5236, 5256, 5279, 5299, 5326, 5468, 5498, 5522, 5555, 5563, 5571, 5663, 5698, 5726, 5769, 5772, 5878, 5918, 5920, 6071, 6072, 6076, 6077, 6181, 6249, 6250, 6293, 11209, 11303, 11822, 12470, 13403, 13537, 14199, 14280, 14379, 14412, 14507, 14508, 14616, 14947, 16622, 16773, 17388, 17557, 17619, 17655, 18143, 18365, 18393, 18486, 18977, 19194, 19299, 19460, 19512, 19618, 19675, 19723, 19794, 19880, 19973, 20054, 20146, 20234, 20280, 20281, 20359, 20505, 20568, 20642, 20712, 20783, 20862, 20892, 20945, 21012, 21064, 21881, 21882, 21883, 21884, 21885, 24600, 24907, 24910, 29032, 29111, 29228, 1, 12465, 1, 29769, 1, 7756, 1, 30483, 2, 28935, 28936, 1, 25495, 63, 20995, 20996, 20997, 20998, 20999, 21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21015, 21016, 21017, 21018, 21019, 21020, 21021, 21022, 21023, 21024, 21025, 21026, 21027, 21028, 21029, 21030, 21031, 21032, 21033, 21034, 21035, 21036, 21037, 21038, 21039, 21040, 21041, 21042, 21043, 21044, 21045, 21046, 21047, 21048, 21049, 21050, 21051, 21052, 21053, 21054, 21055, 21056, 21057, 4, 3672, 3712, 6434, 10504, 8, 27087, 27088, 27089, 27090, 27091, 27092, 27093, 27094, 1, 23194, 1, 5399, 24, 47, 92, 819, 820, 7461, 7467, 9159, 9160, 9655, 9716, 9717, 9718, 9719, 9720, 9978, 9980, 10768, 16350, 16509, 16554, 31107, 31108, 32512, 32557, 1, 32261, 2, 1994, 12461, 1, 1789, 1, 32744, 1, 6198, 1, 17971, 29, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, 1, 22312, 1, 23207, 1, 23743, 3, 3790, 3974, 11487, 3, 3816, 3980, 11491, 1, 25063, 1, 15494, 1, 22478, 1, 22994, 2, 10748, 10749, 2, 761, 762, 1, 29806, 1, 31212, 1, 7669, 2, 3339, 3341, 5, 4575, 4956, 18675, 20412, 20444, 1, 6057, 1, 17282, 1, 22789, 4, 3655, 3695, 6417, 10487, 1, 23023, 1, 11656, 1, 9325, 2, 5649, 5650, 1, 16900, 1, 23528, 2, 17900, 23845, 1, 22961, 30, 194, 226, 478, 479, 504, 505, 1706, 3172, 3838, 5178, 5377, 5805, 5897, 5978, 6169, 6512, 6513, 6556, 6581, 6723, 11442, 13430, 14085, 14086, 15782, 15783, 16686, 18652, 18795, 25008, 1, 23289, 7, 26847, 26849, 26856, 26857, 26858, 26859, 26861, 2, 6059, 6060, 1, 15257, 1, 10601, 1, 25776, 1, 23580, 11, 1322, 1368, 7329, 14037, 14038, 18904, 18955, 31095, 31096, 31097, 31098, 1, 11549, 5, 6472, 6473, 6474, 6475, 6477, 1, 22513, 3, 12518, 13505, 29333, 5, 30430, 30433, 30434, 30439, 30441, 1, 15465, 1, 26428, 1, 17295, 1, 22576, 1, 24159, 2, 8198, 27189, 1, 23216, 1, 28958, 1, 23637, 3, 7562, 22153, 29588, 1, 17859, 16, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1, 8135, 1, 10619, 1, 23128, 1, 23250, 1, 24505, 1, 26089, 2, 13581, 29338, 1, 31958, 1, 7314, 1, 14835, 20, 28330, 28331, 28337, 28338, 28339, 28344, 28354, 28355, 28356, 28357, 28362, 28369, 28376, 28380, 28386, 28389, 28406, 28407, 28408, 28538, 1, 5509, 1, 5963, 1, 31620, 1, 16822, 1, 23355, 31, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 10271, 10272, 10274, 10275, 10276, 10318, 10319, 10321, 10322, 10323, 10691, 10692, 10693, 13771, 13772, 13773, 13774, 13775, 13776, 29023, 29025, 29026, 29027, 1, 15294, 1, 18086, 1, 8579, 1, 27250, 2, 1297, 1298, 3, 1633, 15695, 15696, 1, 22972, 1, 25508, 1, 26201, 1, 26357, 1, 15242, 1, 13710, 1, 25760, 1, 15202, 1, 30281, 1, 13121, 1, 11796, 1, 25955, 4, 14768, 17340, 20725, 24991, 1, 25275, 1, 5170, 1, 7748, 2, 21249, 21461, 1, 5210, 1, 25831, 1, 27171, 2, 21186, 21187, 1, 29191, 1, 15415, 5, 31237, 31255, 31260, 31265, 31267, 1, 8653, 1, 7994, 1, 16990, 2, 20696, 20697, 1, 26316, 2, 195, 227, 1, 17983, 2, 31952, 31953, 3, 12209, 30422, 31716, 1, 11576, 52, 7440, 7441, 7468, 7469, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7672, 7673, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 1, 12798, 1, 26728, 1, 32175, 1, 9379, 4, 7689, 7690, 9214, 10034, 1, 12208, 1, 31296, 1, 3037, 1, 20185, 1, 22673, 1, 22894, 2, 22844, 29236, 1, 23417, 1, 26343, 10, 8132, 8133, 30666, 30667, 30851, 30925, 30928, 30931, 30934, 30950, 1, 30265, 1, 12908, 2, 27486, 27508, 4, 8663, 8664, 8665, 8666, 1, 13220, 1, 26294, 2, 17601, 17637, 13, 12873, 17113, 30479, 30520, 31039, 31040, 31041, 31042, 31043, 31044, 31045, 31046, 31047, 7, 28704, 28705, 28706, 28707, 28708, 28709, 28710, 1, 29809, 1, 31188, 1, 32126, 1, 9727, 2, 3283, 3284, 5, 444, 445, 446, 447, 660, 1, 12892, 4, 1473, 15605, 15627, 15642, 1, 10200, 1, 15361, 1, 16789, 1, 1717, 5, 4040, 4933, 13466, 13848, 24550, 10, 4195, 5048, 11204, 11298, 12855, 13621, 17363, 22008, 22256, 22366, 3, 9027, 9028, 9029, 1, 13227, 1, 25615, 2, 22862, 29321, 1, 23173, 1, 30412, 1, 31178, 1, 32169, 1, 14548, 1, 8011, 1, 3303, 1, 13040, 1, 8878, 2, 7986, 7987, 1, 25357, 1, 25775, 1, 31992, 72, 6163, 6164, 6165, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, 6193, 6194, 6195, 6196, 6197, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 1, 16759, 4, 26870, 26871, 26872, 26873, 12, 6072, 6073, 6074, 14492, 14494, 14497, 14499, 14506, 14508, 14513, 14515, 14522, 1, 17268, 3, 21372, 21373, 22245, 1, 123, 2, 7854, 7950, 1, 15574, 3, 1316, 1362, 1431, 1, 1582, 1, 10551, 1, 26804, 2, 5544, 5545, 1, 9596, 1, 23367, 1, 29273, 4, 8895, 8896, 8897, 8898, 1, 12266, 1, 8804, 1, 31680, 3, 27077, 27078, 27086, 1, 24163, 4, 10540, 10541, 10542, 19348, 1, 31770, 4, 8186, 10847, 11045, 31758, 2, 1419, 1493, 46, 42, 853, 7333, 7472, 7748, 7880, 8993, 8994, 8995, 8996, 9008, 9009, 9010, 9017, 9018, 9019, 9020, 9026, 9032, 9033, 9034, 9669, 9837, 13798, 16344, 16504, 21882, 22050, 31384, 31385, 31386, 31387, 31388, 31389, 31390, 31391, 31392, 31393, 31394, 31395, 31396, 31397, 31398, 31399, 31400, 32507, 91, 24806, 24807, 24808, 24809, 24810, 24811, 24812, 24813, 24814, 24815, 24816, 24817, 24818, 24819, 24820, 24821, 24822, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24830, 24831, 24832, 24833, 24834, 24835, 24836, 24837, 24838, 24839, 24840, 24841, 24842, 24843, 24844, 24845, 24846, 24847, 24848, 24849, 24850, 24851, 24852, 24853, 24854, 24855, 24856, 24857, 24858, 24859, 24860, 24861, 24862, 24863, 24864, 24865, 24866, 24867, 24868, 24869, 24870, 24871, 24872, 24873, 24874, 24875, 24876, 24877, 24878, 24879, 24880, 24881, 24882, 24883, 24884, 24885, 24886, 24887, 24888, 24889, 24890, 24891, 24892, 24893, 24894, 24895, 24896, 1, 1450, 1, 31050, 1, 25480, 1, 27173, 1, 26020, 1, 7974, 1, 9731, 1, 23047, 1, 9266, 1, 3170, 1, 32645, 1, 26237, 3, 6706, 10762, 31142, 1, 6071, 1, 12994, 1, 25148, 1, 32759, 1, 23157, 1, 8010, 1, 19336, 1, 27179, 1, 21085, 2, 3826, 3983, 1, 12315, 1, 9461, 1, 25949, 4, 11096, 13145, 17748, 30471, 2, 27019, 27020, 1, 25431, 1, 30592, 1, 29868, 2, 10848, 11047, 1, 32028, 1, 1910, 1, 3571, 1, 13253, 6, 16984, 16985, 16986, 16987, 16988, 30418, 1, 21093, 1, 4169, 52, 46, 1401, 1705, 1750, 1751, 4327, 5094, 5428, 5434, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8583, 9174, 10477, 10482, 10754, 11107, 11117, 13446, 13717, 13926, 16272, 16330, 16508, 16591, 24678, 24894, 26639, 27218, 28967, 29958, 30236, 30244, 32511, 8, 10943, 30550, 30551, 30578, 30579, 30580, 31059, 31062, 1, 12926, 1, 30947, 1, 398, 1, 7821, 1, 29793, 1, 29799, 1, 13190, 1, 25260, 1, 1811, 1, 15338, 2, 7490, 27600, 1, 17102, 1, 26679, 1, 32801, 1, 12367, 2, 12669, 13382, 1, 26903, 1, 17291, 1, 9897, 83, 20615, 20616, 20617, 20618, 20619, 20620, 20621, 20622, 20623, 20624, 20625, 20626, 20627, 20628, 20629, 20630, 20631, 20632, 20633, 20634, 20635, 20636, 20637, 20638, 20639, 20640, 20641, 20642, 20643, 20644, 20645, 20646, 20647, 20648, 20649, 20650, 20651, 20652, 20653, 20654, 20655, 20656, 20657, 20658, 20659, 20660, 20661, 20662, 20663, 20664, 20665, 20666, 20667, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20685, 20686, 20687, 20688, 20689, 20690, 20691, 20692, 20693, 20694, 20695, 20696, 20697, 1, 23186, 1, 24490, 1, 7338, 1, 25074, 2, 1047, 1079, 1, 11908, 1, 30198, 1, 12563, 1, 22613, 1, 22541, 1, 28983, 3, 3768, 3960, 11472, 1, 25067, 3, 26649, 26650, 26732, 1, 12406, 1, 23371, 1, 21681, 2, 10803, 10966, 1, 26037, 1, 25951, 7, 21146, 21267, 21268, 21269, 21301, 21302, 22304, 1, 24682, 2, 8854, 31327, 1, 31633, 220, 1714, 1715, 1718, 1726, 1749, 2131, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 5899, 7473, 7478, 7666, 7714, 7733, 7734, 7735, 7739, 7807, 7808, 7855, 7856, 7857, 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7868, 7869, 7870, 7871, 7903, 7905, 7907, 7908, 7951, 7952, 7953, 7954, 7959, 7961, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7976, 7977, 8005, 8238, 8239, 8240, 8241, 8260, 8262, 8283, 8743, 8744, 8759, 8852, 8857, 8992, 9169, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, 9930, 9931, 9944, 9957, 10110, 10112, 10815, 10991, 12148, 20096, 21082, 21133, 27056, 27111, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 30276, 30277, 30300, 30329, 30364, 30640, 30801, 30806, 30855, 30857, 30980, 30981, 30985, 31019, 31040, 31191, 31251, 31252, 31255, 31256, 31257, 31259, 31260, 31265, 31266, 31267, 31268, 31269, 31270, 31300, 31328, 31329, 31609, 31611, 31673, 31676, 31690, 31819, 31820, 31825, 31826, 31932, 1, 23037, 88, 48, 1589, 1716, 1717, 1733, 1924, 2263, 2360, 2448, 2537, 2628, 2697, 2797, 2808, 2893, 2996, 3099, 3187, 3267, 3313, 3332, 3556, 3636, 5405, 5440, 5710, 5825, 5993, 6003, 6118, 6211, 6344, 6357, 7266, 7267, 7268, 7366, 7380, 7610, 8425, 8446, 11122, 11943, 13735, 14319, 14329, 14361, 14554, 14582, 14666, 15021, 16494, 16510, 17067, 17585, 19014, 19258, 19361, 19424, 19558, 19753, 19837, 19929, 20015, 20186, 20266, 20318, 20458, 20823, 20985, 21048, 24631, 24749, 24870, 27191, 28269, 28279, 28289, 28299, 28309, 29088, 29148, 29448, 29958, 29959, 29969, 29970, 32513, 2, 1576, 2552, 1, 15351, 2, 26944, 26945, 11, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27117, 27118, 27119, 27120, 1, 25474, 1, 12324, 1, 12777, 1, 9243, 1, 17750, 1, 32098, 1, 23612, 1, 23109, 1, 22996, 1, 30387, 1, 9743, 2, 17951, 24015, 2, 27632, 27657, 1, 12872, 1, 7799, 1, 6710, 1, 19349, 1, 3813, 1, 23658, 1, 9407, 1, 30273, 3, 7865, 7866, 7867, 4, 3602, 3603, 3604, 5626, 1, 22609, 49, 17160, 17161, 17162, 17163, 17164, 17165, 17166, 17167, 17168, 17169, 17170, 17171, 17172, 17173, 17174, 17175, 17176, 17177, 17178, 17179, 17180, 17181, 17182, 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, 17192, 17193, 17194, 17195, 17196, 17197, 17198, 17199, 17200, 17201, 17202, 17203, 17204, 17205, 17206, 17207, 17208, 1, 3994, 1, 32354, 6, 3242, 3661, 3701, 6423, 10493, 13554, 1, 3777, 1, 26149, 2, 22835, 29228, 1, 10992, 1, 9856, 1, 24612, 4, 4056, 5071, 13470, 24284, 1, 25976, 1, 25278, 1, 25410, 1, 25182, 1, 11936, 1, 25692, 7, 4765, 5074, 5223, 5625, 11384, 17174, 20682, 1, 16795, 1, 22029, 1, 14519, 1, 18045, 1, 23655, 3, 7542, 7543, 18090, 1, 18024, 1, 13924, 1, 18047, 1, 7652, 1, 5121, 1, 17922, 24, 1536, 15819, 15820, 15821, 15822, 15920, 15921, 15922, 15923, 15924, 15925, 15968, 16031, 16032, 16394, 16395, 16396, 16397, 18590, 29610, 29636, 29671, 29699, 29724, 2, 17906, 23851, 518, 302, 303, 334, 335, 1175, 1176, 1191, 1192, 1223, 1224, 1399, 1489, 1490, 1491, 1516, 1707, 1708, 14130, 15585, 15586, 15587, 15588, 15589, 15590, 15591, 15592, 15593, 15594, 15595, 15596, 15599, 15642, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15802, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, 15871, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15882, 15883, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 15958, 15959, 15960, 15961, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15972, 15973, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, 16072, 16073, 16074, 16075, 16076, 16077, 16078, 16079, 16080, 16081, 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, 16102, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16133, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, 16142, 16143, 16144, 16145, 16146, 16147, 16148, 16149, 16150, 16151, 16152, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16191, 16192, 16193, 16194, 16195, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16223, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16250, 16251, 16253, 16280, 16281, 16287, 16288, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 19094, 19159, 19479, 31095, 31096, 31097, 31098, 1, 24794, 1, 23701, 1, 27016, 9, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 1, 7739, 1, 7784, 1, 14615, 2, 6395, 11972, 2, 7509, 27662, 3, 3783, 3970, 11482, 1, 14553, 1, 17766, 1, 17802, 1, 24210, 1, 23409, 2, 6037, 7358, 1, 31707, 2, 1053, 1085, 1, 26258, 1, 936, 2, 7888, 9955, 8, 17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 1, 9427, 2, 6342, 6343, 1, 32639, 4, 7270, 7298, 7301, 7357, 1, 7917, 1, 13341, 26, 3149, 4005, 4403, 5018, 6382, 12643, 13615, 13888, 14918, 18117, 21232, 21235, 21236, 21312, 21343, 21404, 21505, 21596, 21604, 21641, 21642, 24114, 24236, 24524, 29215, 30210, 1, 13693, 1, 23693, 1, 17928, 7, 3835, 3836, 11462, 14354, 16654, 18645, 19927, 2, 27618, 27637, 1, 22470, 1, 13166, 10, 160, 2374, 2375, 2376, 2377, 2378, 2379, 3170, 5402, 30648, 1, 13192, 1, 23117, 16, 8703, 8712, 8763, 8900, 10801, 10960, 11647, 11743, 20693, 20694, 20695, 30245, 30250, 30251, 30252, 30253, 1, 9925, 2, 27490, 27513, 1, 30799, 1, 8887, 1, 15035, 1, 15510, 1, 25326, 1, 25647, 2, 3955, 11470, 1, 5587, 1, 3550, 1, 20305, 1, 29330, 44, 29732, 29733, 29734, 29735, 29736, 29737, 29738, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 1, 25878, 1, 26373, 1, 5033, 1, 12752, 1, 22769, 3, 4143, 13713, 18684, 1, 26324, 1, 32469, 1, 4077, 1, 1879, 35, 2060, 3652, 3692, 4518, 6414, 7734, 10484, 11397, 13521, 14773, 17156, 17303, 17341, 18335, 18650, 18828, 21179, 21180, 21181, 21182, 21183, 21299, 21322, 21354, 21447, 21580, 21729, 21737, 22023, 22355, 24980, 26598, 26601, 29203, 30917, 1, 7899, 25, 8970, 8971, 8972, 10798, 10952, 30545, 30546, 30547, 30850, 30852, 30869, 30870, 30871, 30872, 30875, 30876, 30877, 30878, 31058, 31600, 31610, 31611, 31615, 31616, 31630, 1, 30353, 1, 25405, 1, 9701, 1, 9507, 1, 25736, 156, 7331, 7466, 7469, 7613, 7623, 7625, 7627, 7631, 7633, 7638, 7640, 7645, 7647, 7650, 7654, 7657, 7658, 7660, 7664, 7665, 7666, 7667, 7668, 7672, 7673, 7674, 7677, 7687, 7689, 7693, 7697, 7699, 7714, 7716, 7719, 7722, 8050, 8052, 9185, 9187, 9204, 9207, 9210, 9212, 9473, 9477, 9483, 9485, 9496, 9498, 9500, 9502, 9525, 9537, 9538, 9539, 9541, 9553, 9557, 9561, 9565, 9569, 9573, 9574, 9575, 9576, 9577, 9578, 9586, 9589, 9590, 9593, 9594, 9750, 9988, 9999, 10000, 10032, 10034, 10035, 10036, 10037, 10038, 10039, 10040, 10041, 10042, 10043, 10044, 10045, 10047, 10048, 10049, 10052, 10056, 10057, 10058, 10079, 10089, 10095, 10103, 10109, 10110, 10111, 10112, 10113, 10117, 10131, 10135, 10139, 10141, 10143, 10145, 10147, 10149, 10151, 10153, 10215, 16714, 30728, 30729, 30752, 30753, 31091, 31438, 31442, 31446, 31450, 31454, 31458, 31462, 31466, 31470, 31474, 31478, 31482, 31486, 31490, 31494, 31498, 31502, 31506, 31516, 31524, 31532, 31540, 31548, 31556, 31560, 31564, 31572, 31574, 31576, 31578, 31580, 31582, 1, 5704, 3, 10702, 10703, 10704, 1, 23758, 1, 3871, 1, 26156, 1, 21200, 1, 18399, 1, 31232, 1, 7939, 1, 26377, 2, 31705, 31803, 1, 4737, 6, 7766, 7872, 7935, 12876, 30362, 31800, 1, 15356, 1, 25445, 1, 30316, 4, 5955, 5956, 14977, 15003, 1, 23905, 2, 4418, 14933, 1, 9653, 1, 17511, 1, 29259, 1, 23662, 1, 23827, 1, 30286, 2, 13599, 29274, 1, 9572, 2, 13515, 29278, 1, 23381, 19, 11505, 11506, 11507, 11508, 11509, 11510, 11511, 11512, 11513, 11514, 11515, 11516, 11517, 11518, 11519, 11520, 16720, 16721, 16722, 1, 16909, 1, 30177, 1, 12132, 22, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 30876, 38, 4351, 16956, 16983, 17227, 17293, 18443, 19041, 19255, 19591, 20476, 20850, 22049, 22245, 29477, 29504, 29545, 29572, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31905, 31906, 31907, 1, 26750, 1, 9470, 3, 16720, 16721, 16722, 1, 25482, 1, 13793, 1, 27103, 1, 5171, 1, 24709, 1, 31760, 1, 31990, 1, 16770, 1, 22913, 2, 31115, 31116, 1, 32788, 1, 26400, 1, 7561, 1, 1896, 1, 32252, 3, 24109, 24413, 24614, 1, 17753, 1, 25081, 1, 23402, 1, 12852, 1, 12160, 8, 1287, 1288, 4892, 5035, 5482, 5581, 19896, 24921, 1, 23190, 1, 32760, 1, 4374, 2, 13129, 24136, 2, 30356, 30630, 6, 9139, 9140, 9141, 9142, 9143, 9144, 2, 11658, 11770, 5, 30365, 30412, 31656, 31657, 31658, 61, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29536, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29573, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 29587, 29588, 1, 16905, 1, 9863, 1, 21386, 1, 26158, 3, 24095, 24130, 24357, 1, 15426, 1, 7840, 10, 4196, 5052, 11202, 11296, 11522, 12834, 13508, 21530, 22001, 22002, 1, 17041, 1, 26274, 1, 23458, 1, 3570, 4, 10719, 28410, 30267, 31623, 2, 14476, 14526, 1, 32079, 1, 29246, 1, 9784, 1, 23911, 1, 14988, 1, 10657, 47, 830, 7028, 7029, 7036, 7037, 7056, 7057, 7064, 7065, 7072, 7073, 7080, 7081, 7100, 7101, 7105, 7112, 7113, 7120, 7121, 7142, 7143, 7150, 7151, 7158, 7159, 7166, 7167, 7174, 7175, 7182, 7183, 7189, 7190, 7199, 7200, 7204, 7205, 7213, 7218, 7219, 7226, 7233, 7234, 7246, 7247, 26646, 1, 9339, 1, 23001, 1, 23960, 1, 24720, 1, 17065, 1, 25573, 3, 31628, 31629, 31630, 1, 32293, 1, 13723, 1, 32304, 1, 3875, 1, 9320, 1, 29031, 1, 12739, 2, 17881, 23823, 1, 16810, 1, 25625, 1, 3792, 1, 12361, 1, 30979, 1, 24663, 1, 25490, 2, 10371, 10372, 1, 13020, 1, 12828, 1, 13275, 1, 27261, 1, 3468, 1, 22779, 14, 4053, 5068, 13135, 13620, 13875, 21521, 21712, 21861, 21862, 21893, 22019, 22041, 24375, 24571, 1, 25314, 2, 6398, 6399, 3, 7615, 7629, 7679, 1, 9656, 1, 12241, 1, 8638, 1, 12116, 4, 20602, 20603, 20604, 20605, 1, 11861, 2, 27591, 27616, 1, 25741, 49, 731, 5218, 7347, 8562, 8741, 8743, 8744, 8815, 8816, 8912, 8935, 8982, 8984, 8985, 8986, 8987, 8988, 8989, 8990, 8991, 9035, 9037, 9774, 10201, 18784, 26636, 28488, 28489, 28492, 28626, 28685, 28735, 28736, 30791, 30792, 30793, 30797, 30798, 30799, 31370, 31371, 31372, 31373, 31374, 31375, 31376, 31586, 31587, 31588, 1, 15207, 1, 23618, 1, 23063, 1, 6761, 1, 30838, 1, 25151, 1, 10967, 4, 21165, 21611, 21612, 21860, 1, 22886, 1, 8650, 2, 342, 343, 1, 18056, 1, 12273, 1, 9419, 1, 7882, 1, 29291, 1, 31318, 1, 32812, 1, 25801, 2, 13773, 13774, 1, 22614, 1, 4145, 1, 22719, 1, 16740, 18, 21165, 21169, 21407, 21408, 21409, 21410, 21411, 21495, 21496, 21611, 21612, 21823, 22030, 22194, 22205, 22247, 22249, 22335, 1, 22491, 1, 22279, 1, 31229, 1, 24062, 1, 12627, 13, 7740, 7789, 7926, 7927, 7928, 7929, 9697, 9774, 9777, 9778, 9787, 9788, 9807, 1, 29365, 1, 23712, 1, 12811, 1, 15287, 1, 12343, 1, 12859, 2, 22408, 23484, 4, 3630, 5754, 25037, 25044, 1, 32412, 1, 32750, 1, 25170, 1, 23886, 1, 15010, 1, 30192, 1, 24442, 1, 26054, 1, 745, 2, 28884, 30259, 1, 33, 1, 23935, 1, 24653, 1, 13178, 2, 276, 277, 4, 17440, 17480, 26563, 26587, 16, 21259, 21667, 21672, 21721, 21928, 21929, 21944, 22039, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22224, 1, 24793, 2, 26675, 26770, 1, 32308, 1, 32713, 1, 23205, 6, 22285, 22286, 22287, 22288, 22289, 22290, 1, 23879, 10, 657, 6547, 11165, 11167, 11265, 11267, 11270, 11366, 14238, 16652, 1, 11582, 2, 18749, 18775, 1, 7629, 38, 2164, 2292, 2387, 2467, 2558, 2647, 2721, 2819, 2908, 3548, 5540, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 14248, 14805, 18472, 19162, 19271, 19373, 19482, 19766, 19918, 20008, 20085, 20179, 20253, 20390, 20537, 20600, 20686, 20815, 20978, 21045, 3, 10839, 11033, 30561, 1, 26219, 1, 31624, 1, 1905, 1, 6044, 1, 15520, 7, 28377, 28378, 28381, 28382, 28383, 28384, 28385, 1, 12503, 1, 23098, 1, 26313, 1, 31648, 1, 12891, 2, 26808, 26809, 1, 25846, 1, 22459, 1508, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6609, 6610, 6611, 6612, 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6713, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891, 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7367, 7379, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7605, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8988, 8989, 8990, 10329, 10330, 10331, 10332, 10333, 10334, 10335, 10336, 10337, 10338, 10339, 10340, 10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10350, 10351, 10352, 10353, 10354, 10355, 10356, 10357, 10359, 10360, 13965, 13966, 13967, 13968, 13969, 13970, 13971, 13972, 13973, 13974, 13975, 13976, 13977, 13978, 13979, 13980, 13981, 13982, 13983, 13984, 13985, 13986, 13987, 13988, 13989, 13990, 13991, 13992, 13993, 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14001, 14002, 14003, 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013, 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14021, 14022, 14023, 14024, 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14032, 14033, 14034, 14035, 14036, 14037, 14038, 14039, 14040, 14041, 14042, 14044, 14045, 14046, 14047, 14048, 14049, 14050, 14051, 14052, 14053, 14054, 14055, 14056, 14057, 14058, 14059, 14060, 14061, 14062, 14063, 14064, 14065, 14066, 14070, 14071, 14072, 14073, 14074, 14075, 14076, 14077, 14078, 14079, 14080, 14081, 14082, 14083, 14084, 14085, 14086, 14087, 14088, 14089, 14090, 14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 14100, 14101, 14102, 14103, 14104, 14105, 14106, 14107, 14108, 14109, 14110, 14111, 14112, 14113, 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, 14122, 14123, 14124, 14125, 14126, 14127, 14128, 14131, 14132, 14133, 14134, 14135, 14136, 14839, 14840, 14841, 14842, 14843, 14844, 14845, 14846, 14847, 14848, 14849, 14850, 14851, 14852, 14853, 14854, 14855, 14856, 14857, 14858, 14859, 14860, 14861, 14862, 14863, 14864, 14865, 14866, 14867, 14868, 14869, 14870, 14871, 14872, 14873, 14874, 14875, 14876, 14877, 14878, 14879, 14880, 14881, 14887, 14888, 14889, 14890, 14891, 14893, 14894, 15585, 15586, 15587, 15588, 15589, 15590, 15591, 16527, 16528, 16529, 16530, 16531, 16532, 16533, 16534, 16535, 16536, 16537, 16538, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16552, 16559, 16560, 16561, 16562, 16563, 16564, 16565, 16566, 16567, 16568, 16569, 16570, 16571, 16572, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16581, 16582, 16583, 16584, 29971, 29972, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 29997, 29998, 29999, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30117, 30759, 30760, 30763, 30797, 30798, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32539, 32540, 32541, 32542, 32543, 32544, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32562, 32563, 32564, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32581, 32582, 32583, 32584, 32585, 32586, 32587, 2, 12879, 13389, 1, 26305, 1, 5119, 5, 1135, 1136, 1142, 16294, 16295, 59, 29100, 29101, 29102, 29103, 29104, 29105, 29106, 29107, 29108, 29109, 29110, 29111, 29112, 29113, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29123, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29134, 29135, 29136, 29137, 29138, 29139, 29140, 29141, 29142, 29143, 29144, 29145, 29146, 29147, 29148, 29149, 29150, 29151, 29152, 29153, 29154, 29155, 29156, 29157, 29158, 1, 8001, 1, 23165, 2, 364, 365, 1, 7495, 1, 25122, 1, 26118, 1, 26241, 3, 30633, 30965, 30966, 1, 31685, 3, 13878, 24112, 24573, 1, 22003, 1, 23894, 1, 8877, 2, 26657, 26695, 2, 16824, 30494, 1, 24743, 1, 12931, 1, 23206, 3, 7264, 31370, 31377, 3, 4011, 4702, 4703, 2, 10648, 29056, 2, 208, 240, 2, 8231, 8267, 1, 16816, 1, 25753, 1, 12661, 1, 12819, 1, 21282, 3, 21168, 21252, 22184, 1, 25621, 3, 28586, 28587, 28588, 2, 30248, 31603, 4, 3680, 3720, 6442, 10512, 1, 15377, 4, 8931, 8932, 8933, 8934, 1, 30646, 1, 32097, 1, 32386, 2, 7489, 27502, 1, 9527, 1, 25464, 1, 26279, 1, 10531, 8, 29737, 30294, 30625, 30686, 31428, 31435, 31672, 31693, 1, 10586, 1, 32369, 1, 25645, 28, 7764, 7765, 7917, 7918, 7931, 7932, 9165, 9166, 9734, 9735, 9795, 9796, 9808, 9809, 9810, 9811, 9812, 9813, 9816, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9825, 9826, 1, 30545, 1, 26726, 2, 24135, 24247, 1, 26263, 9, 4304, 12397, 13609, 13899, 24487, 24497, 24532, 29251, 30209, 33, 7625, 7626, 7642, 7788, 8179, 8180, 8181, 9522, 10046, 11143, 26624, 26633, 28728, 28729, 28730, 28731, 28732, 28733, 28744, 28751, 28755, 28756, 28757, 28768, 28769, 28783, 28784, 28795, 28796, 28797, 30225, 30736, 30832, 3, 21725, 21726, 21727, 1, 7755, 1, 29801, 1, 24075, 1, 17561, 1, 22893, 1, 32431, 1, 23274, 1, 25197, 1, 30284, 1, 26766, 1, 25327, 1, 32691, 1, 25926, 1, 23641, 2, 4446, 14961, 1, 5203, 1, 22280, 1, 31001, 1, 13156, 4, 8491, 8547, 8548, 8549, 3, 1964, 1965, 1966, 5, 4712, 17320, 17345, 20424, 20456, 1, 15220, 1, 25638, 2, 17875, 23814, 1, 24255, 4, 12011, 12014, 12018, 17147, 1, 2064, 1, 15349, 1, 25424, 3, 11573, 15591, 17194, 3, 4865, 5041, 24923, 1, 26311, 1, 7274, 1, 25988, 1, 7815, 1, 27287, 1, 3830, 2, 4700, 4701, 1, 15122, 109, 1956, 1959, 2201, 2324, 2417, 2501, 2590, 2668, 2756, 2854, 2942, 3363, 3438, 3512, 3586, 3616, 4130, 4410, 4671, 4915, 4991, 5238, 5258, 5281, 5301, 5458, 5667, 5699, 5738, 5771, 5774, 5880, 5922, 6075, 6080, 6183, 6236, 6237, 6279, 6296, 11220, 11314, 11827, 11984, 12568, 13415, 13440, 13443, 13558, 13902, 14202, 14284, 14342, 14381, 14414, 14506, 14511, 14621, 14691, 14925, 14980, 15006, 16627, 16749, 17397, 17612, 17648, 17687, 18123, 18351, 18382, 18490, 18995, 19009, 19198, 19303, 19464, 19516, 19623, 19679, 19727, 19798, 19846, 19884, 19977, 20058, 20150, 20238, 20279, 20363, 20509, 20572, 20646, 20714, 20787, 20865, 20895, 20949, 21019, 21066, 21618, 21701, 21708, 21947, 24533, 24913, 24916, 29034, 29109, 1, 23026, 1, 12809, 1, 26442, 1, 5838, 1, 7724, 1, 25022, 24, 10131, 10132, 10133, 10134, 10135, 10136, 10137, 10138, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 1, 22724, 1, 12274, 1, 25075, 1, 31723, 1, 31989, 9, 8843, 8844, 8845, 8846, 27212, 27213, 27214, 27215, 27216, 1, 12530, 2, 17905, 23850, 1, 18046, 1, 12109, 1, 3941, 1, 19479, 2, 26574, 26583, 1, 32658, 1, 24205, 4, 14663, 17184, 18328, 30032, 29, 17131, 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17139, 17140, 17141, 17142, 17143, 17144, 17145, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, 17154, 17155, 17156, 17157, 17158, 17159, 1, 9909, 1, 22882, 1, 8958, 1, 9384, 12, 8851, 10427, 10428, 13837, 13838, 28345, 28346, 28370, 28384, 30090, 30355, 31615, 6, 1627, 1684, 15685, 15686, 15687, 15688, 1, 9399, 1, 30307, 2, 26813, 26814, 1, 32611, 1, 23936, 1, 30423, 1, 9594, 19, 1727, 1728, 1729, 7477, 8114, 8986, 8987, 9002, 9003, 9009, 9019, 9025, 11764, 27217, 28417, 28418, 28419, 28926, 28927, 1, 25188, 1, 12394, 1, 23889, 1, 3169, 1, 5182, 1, 23018, 1, 25857, 1, 8699, 1, 15064, 1, 15547, 3, 30644, 30963, 30964, 1, 15486, 1, 12283, 1, 7892, 1, 7830, 1, 7774, 1, 7841, 2, 7360, 7361, 1, 25115, 1, 30905, 1, 17844, 1, 3881, 1, 18068, 1, 23875, 1, 24452, 1, 9862, 10, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 1, 12006, 1, 26278, 1, 32614, 1, 31813, 1, 6025, 1, 23583, 1, 17208, 1, 25478, 1, 25995, 1, 12404, 1, 24045, 1, 17829, 1, 10587, 1, 7986, 1, 23760, 1, 25066, 9, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29517, 29518, 1, 31962, 1, 29780, 1, 22662, 1, 9874, 1, 12589, 1, 12349, 1, 16744, 10, 3043, 3045, 3049, 3051, 3056, 3058, 3062, 3064, 3068, 3070, 4, 12120, 12157, 28914, 31635, 1, 29078, 1, 32074, 1, 12320, 1, 7565, 1, 23373, 1, 18008, 1, 13323, 2, 30722, 30751, 1, 5395, 1, 26056, 1, 23336, 1, 24609, 1, 32268, 5, 7732, 8063, 8065, 8079, 8088, 1, 3028, 1, 32226, 1, 3184, 1, 32825, 1, 26314, 2, 10862, 11066, 1, 24483, 5, 3594, 4318, 4366, 4540, 4541, 1, 7262, 12, 693, 694, 7305, 7306, 7307, 7308, 7309, 7310, 7342, 11144, 11145, 11146, 1, 25738, 2, 30705, 30708, 2, 14540, 14541, 2, 8118, 10353, 37, 1529, 1565, 1611, 1689, 1695, 1700, 1722, 1772, 1866, 1867, 2098, 2104, 2116, 2148, 15784, 15785, 16374, 16375, 16478, 16479, 17574, 18161, 18192, 18227, 18264, 18536, 18568, 18602, 18712, 19062, 19099, 19142, 29387, 29421, 29593, 29683, 29708, 3, 3309, 3477, 3480, 2, 3940, 11466, 16, 11060, 29640, 29641, 29642, 29643, 29644, 29645, 29646, 29647, 29648, 29649, 29650, 29651, 29652, 29653, 29654, 1, 23307, 70, 96, 188, 196, 200, 206, 213, 220, 228, 232, 238, 245, 471, 472, 500, 501, 508, 509, 512, 513, 516, 517, 520, 521, 524, 525, 528, 529, 711, 714, 752, 753, 764, 779, 786, 828, 1011, 1024, 1091, 1104, 1129, 1130, 2244, 4504, 6703, 6786, 6787, 6846, 6847, 6894, 6895, 6932, 6933, 6942, 6943, 6958, 6959, 6976, 6977, 6986, 6987, 7000, 7001, 7008, 7009, 16558, 26619, 26620, 26628, 26629, 32561, 1, 15120, 1, 15123, 2, 3481, 3482, 2, 344, 345, 1, 11922, 2, 27621, 27641, 1, 25163, 1, 29272, 1, 11021, 4, 13644, 29324, 29404, 29438, 43, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24630, 24631, 24632, 24633, 24634, 24635, 24636, 24637, 24638, 24639, 24640, 24641, 24642, 1, 32347, 1, 3038, 4, 13455, 24453, 29309, 29310, 1, 7284, 1, 9273, 1, 29197, 3, 30587, 30588, 31785, 1, 31159, 1, 9581, 1, 12973, 1, 15237, 1, 301, 1, 26656, 1, 3814, 1, 24129, 1, 9575, 1, 24773, 2, 17909, 23855, 1, 13453, 1, 2978, 1, 13685, 1, 22501, 1, 23929, 1, 10631, 1, 8775, 1, 26049, 1, 23773, 2, 22424, 23501, 1, 32799, 4, 3833, 3913, 11416, 16660, 3, 4894, 11546, 26520, 7, 21250, 21251, 21331, 22182, 22183, 22227, 22334, 8, 26604, 26605, 26606, 26607, 26608, 26609, 26610, 26611, 1, 23345, 1, 23384, 1, 12278, 1, 31682, 1, 31278, 1, 12323, 1, 23785, 1, 17963, 1, 26178, 1, 23088, 2, 4696, 4697, 2, 24974, 24976, 1, 31270, 1, 31711, 1, 22584, 1, 23045, 3, 28861, 28862, 28863, 1, 7964, 1, 12492, 1, 17781, 3, 30495, 31916, 31923, 1, 4217, 1, 26421, 1, 24334, 4, 31752, 31753, 31754, 31755, 1, 32021, 1, 16842, 1, 2055, 3, 10687, 13757, 13758, 1, 5636, 1, 13012, 1, 6380, 1, 14477, 1, 14526, 1, 15050, 1, 15096, 2, 30373, 30724, 8, 31079, 31080, 31081, 31082, 31083, 31084, 31085, 31086, 4, 13682, 24647, 29311, 29315, 1, 12613, 2, 22387, 23464, 1, 22615, 2, 26700, 26721, 1, 18071, 1, 25381, 1, 32680, 1, 7747, 3, 24055, 24168, 24335, 5, 7458, 8134, 8135, 30108, 30908, 1, 15255, 1, 23681, 1, 30701, 10, 326, 327, 5163, 6592, 11400, 14851, 17464, 17504, 18838, 24988, 1, 11059, 1, 24193, 1, 12254, 1, 13210, 1, 1411, 1, 19571, 1, 25289, 1, 25412, 1, 13170, 1, 25538, 1, 25975, 1, 22793, 2, 24102, 24238, 1, 32276, 71, 1113, 1114, 1115, 1116, 3566, 10691, 13771, 13772, 13775, 13776, 28420, 28457, 28461, 28462, 28463, 28464, 28465, 28466, 28467, 28468, 28469, 28470, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28487, 28488, 28489, 28495, 28496, 28497, 28498, 28505, 28506, 28507, 28508, 28509, 28510, 28511, 28512, 28513, 28514, 28522, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28572, 1, 17739, 1, 23237, 2, 22421, 23496, 1, 25649, 1, 16911, 1, 9047, 1, 1427, 1, 10617, 1, 25629, 1, 21856, 16, 28637, 28976, 28977, 28978, 28979, 28980, 28981, 28982, 28983, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 13, 3300, 3302, 3303, 3304, 3333, 3335, 3336, 3339, 3340, 3410, 3411, 3490, 3491, 1, 21695, 2, 30513, 30514, 1, 17121, 5, 1683, 15733, 15734, 15735, 15736, 1, 11997, 1, 22720, 1, 15389, 1, 23560, 1, 17369, 1, 32363, 1, 31220, 1, 3160, 1, 15394, 1, 31773, 8, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 82, 19943, 19944, 19945, 19946, 19947, 19948, 19949, 19950, 19951, 19952, 19953, 19954, 19955, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 19968, 19969, 19970, 19971, 19972, 19973, 19974, 19975, 19976, 19977, 19978, 19979, 19980, 19981, 19982, 19983, 19984, 19985, 19986, 19987, 19988, 19989, 19990, 19991, 19992, 19993, 19994, 19995, 19996, 19997, 19998, 19999, 20000, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 20014, 20015, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023, 20024, 1, 29304, 1, 22792, 1, 23639, 1, 4014, 1, 13010, 1, 15541, 1, 32823, 1, 26006, 1, 23533, 1, 2378, 3, 12012, 12015, 12019, 1, 4769, 1, 13734, 1, 21936, 29, 18285, 18286, 18287, 18288, 18289, 18290, 18291, 18292, 18293, 18294, 18295, 18296, 18297, 18298, 18299, 18300, 18301, 18302, 18303, 18304, 18305, 18306, 18307, 18308, 18309, 18310, 18311, 18312, 18313, 1, 22715, 2, 5598, 17752, 1, 15505, 1, 17817, 1, 23631, 1, 25839, 1, 7745, 1, 23142, 1, 24397, 2, 328, 329, 1, 24333, 1, 7873, 1, 23287, 1, 23581, 7, 991, 992, 10451, 10452, 10453, 10454, 10467, 2, 173, 12071, 2, 4781, 4782, 2, 27581, 27605, 1, 27241, 2, 3300, 3335, 1, 24293, 1, 17106, 1, 5126, 1, 1416, 3, 8128, 8211, 21125, 1, 9891, 1, 11868, 1, 12402, 1, 15335, 1, 8889, 1, 22753, 1, 22858, 2, 27589, 27614, 1, 9433, 1, 25489, 1, 12536, 1, 17713, 2, 12289, 14833, 1, 22035, 1, 23086, 1, 18012, 1, 3868, 1, 23177, 1, 11891, 1, 7823, 1, 964, 1, 15392, 1, 23054, 1, 26389, 1, 13329, 3, 6131, 6132, 6133, 1, 16733, 1, 13613, 1, 22605, 2, 22374, 23453, 1, 26136, 1, 12566, 1, 3907, 37, 2258, 2260, 2357, 2359, 2534, 2536, 2625, 2627, 2794, 2796, 2890, 2892, 2993, 2995, 3020, 3397, 3577, 3581, 7016, 7017, 7831, 7941, 14258, 14308, 19174, 19225, 19492, 19539, 19834, 19836, 19858, 19910, 19953, 19999, 20034, 20126, 20173, 1, 18079, 1, 13223, 1, 10592, 1, 32724, 1, 15425, 1, 23776, 1, 19343, 15, 8799, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 1, 15456, 1, 24968, 1, 23795, 1, 9659, 2, 28863, 30282, 2, 10547, 10548, 1, 32437, 3, 21153, 21838, 22320, 1, 10464, 1, 7657, 1, 13306, 1, 13278, 1, 30097, 3, 8271, 8272, 9215, 1, 193, 2, 9033, 9034, 1, 8893, 1, 6462, 1, 1436, 1, 2458, 1, 22373, 1, 23753, 24, 183, 7313, 8023, 8214, 8218, 8220, 8226, 8629, 8630, 8631, 8632, 8633, 8634, 9068, 9070, 9072, 9724, 10066, 10067, 10179, 10716, 18211, 30741, 31339, 1, 26255, 1, 8813, 1, 24454, 1, 31263, 1, 3880, 1, 12609, 1, 25389, 1, 29795, 1, 23630, 1, 13116, 2, 6339, 6340, 1, 19008, 1, 3082, 1, 180, 1, 17107, 1, 32444, 1, 22890, 1, 13212, 1, 9151, 1, 15133, 1, 17525, 2, 30222, 30431, 5, 10878, 11089, 30626, 31427, 31434, 1, 25298, 1, 23541, 4, 4027, 4354, 4654, 4655, 1, 23964, 1, 1435, 1, 24039, 2, 1503, 7303, 4, 9860, 12629, 24213, 24392, 2, 17886, 23831, 1, 25403, 1, 243, 1, 2052, 1, 25583, 2, 4257, 12713, 1, 1143, 2, 14862, 30332, 4, 30705, 30706, 30707, 30708, 1, 30490, 1, 30409, 1, 32753, 1, 31955, 133, 1048, 1080, 1179, 1180, 1189, 1190, 1263, 1264, 1265, 1266, 1960, 2218, 2336, 2430, 2515, 2604, 2682, 2772, 2869, 2959, 3383, 3458, 3523, 3554, 3621, 3996, 4393, 4849, 4923, 5246, 5267, 5290, 5343, 5519, 5680, 5734, 5787, 5790, 5892, 5941, 5944, 6093, 6195, 6229, 6230, 6231, 6312, 10269, 10316, 10439, 10440, 10441, 10442, 10677, 11225, 11319, 11589, 11832, 12057, 12806, 13421, 13523, 14219, 14238, 14297, 14392, 14426, 14525, 14637, 14693, 14908, 16632, 17331, 17412, 17575, 17604, 17640, 18504, 18981, 19211, 19316, 19474, 19530, 19635, 19690, 19740, 19812, 19901, 19990, 20071, 20163, 20250, 20293, 20376, 20522, 20592, 20665, 20706, 20800, 20882, 20911, 20962, 21032, 21138, 21149, 21170, 21230, 21276, 21303, 21304, 21318, 21319, 21343, 21431, 21432, 21433, 21576, 21590, 21595, 21799, 21946, 21949, 21967, 22195, 22234, 22250, 22345, 24935, 29033, 29126, 29264, 29394, 29428, 1, 31606, 2, 14029, 14030, 2, 12117, 27234, 3, 6340, 24104, 24321, 1, 23711, 1, 25773, 1, 12441, 1, 23294, 1, 9183, 1, 31696, 1, 6473, 1, 13089, 1, 23937, 1, 23144, 1, 26351, 2, 11025, 31202, 2, 370, 371, 1, 12800, 1, 25899, 3, 10641, 17609, 17645, 1, 12907, 1, 18526, 1, 24465, 1, 29833, 1, 4017, 1, 18599, 1, 6393, 2, 1769, 1770, 1, 8805, 1, 32440, 1, 25158, 7, 26768, 26791, 26837, 26886, 26887, 26888, 26889, 1, 32235, 2, 27587, 27612, 1, 1410, 1, 26301, 1, 7782, 1, 12910, 1, 23102, 1, 26282, 1, 12327, 1, 12414, 1, 30305, 2, 3861, 26033, 3, 3050, 3051, 3054, 1, 3076, 1, 23335, 2, 30368, 30379, 60, 20334, 20335, 20336, 20337, 20338, 20339, 20340, 20341, 20342, 20343, 20344, 20345, 20346, 20347, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20356, 20357, 20358, 20359, 20360, 20361, 20362, 20363, 20364, 20365, 20366, 20367, 20368, 20369, 20370, 20371, 20372, 20373, 20374, 20375, 20376, 20377, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20385, 20386, 20387, 20388, 20389, 20390, 20391, 20392, 20393, 60, 44, 532, 533, 534, 535, 695, 697, 782, 783, 784, 785, 802, 1357, 1506, 1980, 4328, 5427, 5433, 8087, 9050, 9051, 9052, 9053, 9054, 9055, 9768, 10744, 10746, 10759, 10767, 10770, 11116, 13445, 13716, 13928, 13977, 13978, 16270, 16271, 16328, 16329, 16506, 16594, 19926, 24893, 28966, 29959, 29960, 29961, 29962, 29963, 29964, 29965, 29966, 29967, 29968, 31101, 31102, 31103, 32509, 1, 9617, 1, 12786, 2, 17889, 23834, 1, 11090, 1, 23607, 1, 30201, 1, 17937, 3, 31010, 31011, 31012, 1, 30755, 1, 12744, 2, 10998, 16883, 1, 12730, 2, 12052, 30000, 1, 23230, 3, 1760, 1761, 1762, 1, 22572, 1, 12257, 1, 9474, 5, 4584, 4585, 13590, 24792, 29164, 2, 12893, 13363, 10, 7529, 18159, 18190, 18224, 18552, 18600, 18710, 18740, 18767, 19140, 1, 25679, 1, 26832, 1, 31649, 1, 32714, 1, 32195, 2, 3142, 29257, 1, 32451, 1, 9941, 1, 16723, 1, 26212, 1, 12787, 1, 28942, 1, 22679, 5, 414, 415, 17465, 17505, 19419, 1, 5092, 1, 22484, 2, 22382, 23460, 1, 9426, 4, 8507, 8553, 8554, 8555, 2, 8799, 8803, 1, 8738, 1, 22932, 1, 22908, 1, 24966, 1, 32719, 72, 589, 590, 892, 901, 927, 932, 6580, 6655, 6666, 6742, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7122, 7123, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 8099, 8103, 10342, 10345, 14839, 14891, 27977, 28003, 28035, 28061, 28093, 28119, 28151, 28177, 28209, 28235, 21, 3592, 4159, 4579, 4916, 11195, 11264, 11289, 11358, 11815, 12703, 13398, 13706, 16615, 16740, 17239, 17682, 18109, 18662, 26835, 26881, 29163, 1, 30322, 1, 23716, 2, 13478, 29281, 1, 23180, 1, 29318, 1, 31003, 1, 9225, 1, 32415, 6, 1021, 1101, 1277, 1278, 13704, 17688, 3, 10562, 10563, 10564, 1, 8029, 5, 30656, 30671, 30672, 30673, 30951, 1, 22534, 16, 1766, 7527, 18157, 18188, 18221, 18222, 18260, 18539, 18596, 18708, 18738, 18765, 19057, 19058, 19096, 19138, 1, 6374, 1, 23609, 3, 21197, 21756, 21959, 1, 32221, 1, 5141, 1, 26406, 1, 32798, 1, 13014, 3, 1014, 1094, 17678, 1, 23298, 1, 12783, 1, 30360, 1, 15155, 3, 3585, 12285, 14837, 1, 31019, 1, 17517, 1, 29348, 1, 21406, 1, 9218, 28, 21142, 21794, 21795, 21796, 21797, 21798, 21799, 21800, 21801, 21802, 21803, 21804, 21805, 21806, 21807, 21808, 21809, 21810, 21811, 21812, 21813, 21814, 22052, 22345, 22346, 22347, 22348, 22357, 1, 32723, 1, 24285, 1, 7408, 3, 30635, 31035, 31187, 1, 5039, 1, 24690, 1, 12495, 1, 15169, 1, 15556, 1, 1881, 5, 7316, 10718, 31104, 31105, 31106, 1, 15577, 1, 23703, 1, 24448, 10, 28425, 28426, 28504, 28508, 28509, 28510, 28521, 28535, 28536, 28537, 1, 3810, 1, 8697, 1, 25574, 117, 16813, 16814, 16815, 16816, 16817, 16818, 16819, 16820, 16821, 16822, 16823, 16824, 16825, 16826, 16827, 16828, 16829, 16830, 16831, 16834, 16835, 16836, 16839, 16840, 16841, 16842, 16843, 16844, 16845, 16846, 16847, 16848, 16850, 16851, 16852, 16853, 16854, 16855, 16856, 16857, 16858, 16859, 16860, 16861, 16862, 16863, 16864, 16865, 16866, 16867, 16868, 16869, 16870, 16871, 16872, 16873, 16874, 16875, 16876, 16877, 16878, 16879, 16880, 16881, 16882, 16883, 16884, 16885, 16886, 16887, 16888, 16889, 16890, 16891, 16892, 16893, 16894, 16896, 16897, 16898, 16899, 16900, 16901, 16902, 16903, 16904, 16905, 16906, 16907, 16908, 16909, 16910, 16911, 16912, 16913, 16914, 16915, 16916, 16917, 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16926, 16927, 16928, 16929, 16930, 16931, 16932, 16933, 16934, 16935, 1, 9873, 1, 25394, 1, 47, 2, 13674, 29296, 3, 2063, 7797, 12190, 1, 32756, 3, 11974, 11975, 11976, 1, 23729, 1, 10713, 1, 23295, 3, 9881, 18879, 18930, 1, 26346, 1, 5415, 3, 3145, 10537, 10538, 1, 25616, 68, 18463, 18464, 18465, 18466, 18467, 18468, 18469, 18470, 18471, 18472, 18473, 18474, 18475, 18476, 18477, 18478, 18479, 18480, 18481, 18482, 18483, 18484, 18485, 18486, 18487, 18488, 18489, 18490, 18491, 18492, 18493, 18494, 18495, 18496, 18497, 18498, 18499, 18500, 18501, 18502, 18503, 18504, 18505, 18506, 18507, 18508, 18509, 18510, 18511, 18512, 18513, 18514, 18515, 18516, 18517, 18518, 18519, 18520, 18521, 18522, 18523, 18524, 18525, 18526, 18527, 18528, 18529, 18530, 1, 18812, 1, 29074, 1, 5381, 1, 31776, 1, 1979, 1, 26403, 1, 22533, 1, 26306, 1, 24097, 2, 12580, 30768, 1, 10576, 3, 7926, 7927, 21103, 1, 18092, 1, 6136, 1, 3862, 1, 26752, 1, 16904, 1, 16784, 1, 16793, 1, 29275, 1, 2007, 1, 25694, 1, 25769, 1, 5116, 2, 26665, 26715, 1, 22709, 1, 6547, 1, 23522, 1, 7627, 2, 4228, 12491, 1, 7688, 1, 10526, 46, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 1, 16915, 3, 26844, 26845, 26846, 8, 1016, 1096, 1235, 1236, 5058, 13751, 13752, 14823, 1, 3186, 1, 4363, 1, 11932, 1, 26487, 1, 7776, 1, 25743, 1, 9815, 1, 32041, 1, 17927, 1, 15182, 1, 24791, 1, 27244, 1, 13126, 1, 27275, 1, 9403, 1, 32144, 1, 12733, 1, 24196, 1, 4172, 1, 7916, 14, 1779, 18166, 18197, 18233, 18234, 18269, 18542, 18611, 18717, 18747, 18773, 19066, 19103, 19147, 1, 30680, 1247, 1018, 1098, 1335, 1381, 1400, 3856, 4212, 4461, 4467, 4768, 4793, 5002, 10549, 11460, 12179, 12180, 12181, 12182, 12183, 12184, 12185, 12186, 12187, 12188, 12189, 12190, 12191, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223, 12224, 12225, 12226, 12227, 12228, 12229, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12250, 12251, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 12259, 12260, 12261, 12262, 12263, 12264, 12265, 12266, 12267, 12268, 12269, 12270, 12271, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12284, 12285, 12286, 12287, 12288, 12289, 12290, 12291, 12292, 12293, 12294, 12295, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12440, 12441, 12442, 12443, 12444, 12445, 12446, 12447, 12448, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12540, 12541, 12542, 12543, 12544, 12545, 12546, 12547, 12548, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 12586, 12587, 12588, 12589, 12590, 12591, 12592, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 12687, 12688, 12689, 12690, 12691, 12692, 12693, 12694, 12695, 12696, 12697, 12698, 12699, 12700, 12701, 12702, 12703, 12704, 12705, 12706, 12707, 12708, 12709, 12710, 12711, 12712, 12713, 12714, 12715, 12716, 12717, 12718, 12719, 12720, 12721, 12722, 12723, 12724, 12725, 12726, 12727, 12728, 12729, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, 12750, 12751, 12752, 12753, 12754, 12755, 12756, 12757, 12758, 12759, 12760, 12761, 12762, 12763, 12764, 12765, 12766, 12767, 12768, 12769, 12770, 12771, 12772, 12773, 12774, 12775, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 12794, 12795, 12796, 12797, 12798, 12799, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 12828, 12829, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847, 12848, 12849, 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12858, 12859, 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12868, 12869, 12870, 12871, 12872, 12873, 12874, 12875, 12876, 12877, 12878, 12879, 12880, 12881, 12882, 12883, 12884, 12885, 12886, 12887, 12888, 12889, 12890, 12891, 12892, 12893, 12894, 12895, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 12924, 12925, 12926, 12927, 12928, 12929, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12945, 12946, 12947, 12948, 12949, 12950, 12951, 12952, 12953, 12954, 12955, 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12963, 12964, 12965, 12966, 12967, 12968, 12969, 12970, 12971, 12972, 12973, 12974, 12975, 12976, 12977, 12978, 12979, 12980, 12981, 12982, 12983, 12984, 12985, 12986, 12987, 12988, 12989, 12990, 12991, 12992, 12993, 12994, 12995, 12996, 12997, 12998, 12999, 13000, 13001, 13002, 13003, 13004, 13005, 13006, 13007, 13008, 13009, 13010, 13011, 13012, 13013, 13014, 13015, 13016, 13017, 13018, 13019, 13020, 13021, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031, 13032, 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042, 13043, 13044, 13045, 13046, 13047, 13048, 13049, 13050, 13051, 13052, 13053, 13054, 13055, 13056, 13057, 13058, 13059, 13060, 13061, 13062, 13063, 13064, 13065, 13066, 13067, 13068, 13069, 13070, 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13081, 13082, 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093, 13094, 13095, 13096, 13097, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107, 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, 13119, 13120, 13121, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131, 13132, 13133, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13148, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170, 13171, 13172, 13173, 13174, 13175, 13176, 13177, 13178, 13179, 13180, 13181, 13182, 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13192, 13193, 13194, 13195, 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251, 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13274, 13275, 13276, 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13295, 13296, 13297, 13298, 13299, 13300, 13301, 13302, 13303, 13304, 13305, 13306, 13307, 13308, 13309, 13310, 13311, 13312, 13313, 13314, 13315, 13316, 13317, 13318, 13319, 13320, 13321, 13322, 13323, 13324, 13325, 13326, 13327, 13328, 13329, 13330, 13331, 13332, 13333, 13334, 13335, 13336, 13337, 13338, 13339, 13340, 13341, 13342, 13343, 13344, 13345, 13346, 13347, 13348, 13349, 13350, 13351, 13352, 13353, 13354, 13355, 13356, 13357, 13358, 13359, 13360, 13361, 13362, 13363, 13364, 13365, 13366, 13367, 13368, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378, 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387, 13388, 13389, 13390, 13391, 13392, 13393, 13394, 13395, 13396, 13397, 13398, 13513, 13801, 16704, 24899, 24909, 24910, 24915, 24929, 24945, 24946, 24954, 25007, 29242, 1, 27175, 1, 4084, 1, 12423, 1, 6461, 1, 25488, 1, 12590, 1, 12171, 2, 1746, 1747, 1, 25542, 1, 13304, 1, 15304, 1, 27129, 1, 7847, 2, 1426, 1427, 1, 25887, 1, 4319, 1, 29858, 1, 14998, 1, 24429, 2, 13829, 13830, 16, 8216, 8227, 8625, 8626, 8627, 8628, 8683, 8684, 8685, 10176, 30785, 30787, 31203, 31204, 31205, 31338, 1, 29770, 1, 25064, 3, 6233, 6270, 6272, 1, 7853, 1, 9855, 1, 10983, 1, 9195, 1, 7659, 1, 9672, 1, 12534, 1, 3119, 3, 5416, 5839, 5855, 1, 12358, 1, 25935, 3, 3059, 3078, 3081, 2, 62, 7832, 1, 166, 3, 24043, 24174, 24253, 1, 25377, 1, 31738, 3, 4411, 12549, 14926, 1, 3146, 1, 26319, 4, 6055, 6056, 6102, 6103, 4, 7925, 9680, 9681, 9682, 27, 18314, 18315, 18316, 18317, 18318, 18319, 18320, 18321, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 18329, 18330, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 18338, 18339, 18340, 1, 7999, 1, 5105, 1, 23828, 82, 14247, 14248, 14249, 14250, 14251, 14252, 14253, 14254, 14255, 14256, 14257, 14258, 14259, 14260, 14261, 14262, 14263, 14264, 14265, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14274, 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, 14286, 14287, 14288, 14289, 14290, 14291, 14292, 14293, 14294, 14295, 14296, 14297, 14298, 14299, 14300, 14301, 14302, 14303, 14304, 14305, 14306, 14307, 14308, 14309, 14310, 14311, 14312, 14313, 14314, 14315, 14316, 14317, 14318, 14319, 14320, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14328, 1, 30195, 1, 9945, 2, 266, 267, 1, 23659, 1, 11902, 1, 9611, 1, 12076, 1, 13191, 1, 21572, 73, 12409, 14712, 14713, 14714, 14715, 14716, 14717, 14718, 14719, 14720, 14721, 14722, 14723, 14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14735, 14736, 14737, 14738, 14739, 14740, 14741, 14742, 14743, 14744, 14745, 14746, 14747, 14748, 14749, 14750, 14751, 14752, 14753, 14754, 14755, 14756, 14757, 14758, 14759, 14760, 14761, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14778, 14779, 14780, 14781, 14782, 14783, 1, 22494, 1, 23778, 1, 25353, 1, 30674, 1, 22760, 1, 19115, 1, 18019, 1, 24712, 1, 11079, 1, 25841, 1, 14985, 1, 31804, 2, 30996, 31042, 1, 14152, 1, 24694, 1, 5090, 2, 22823, 29195, 1, 30998, 1, 22121, 1, 32249, 1, 16826, 1, 12135, 1, 5355, 1, 23648, 2, 12801, 30390, 1, 32393, 1, 7365, 11, 3140, 3142, 3224, 3226, 4309, 4815, 12393, 13648, 14744, 14745, 29255, 1, 12305, 1, 7951, 4, 29887, 29901, 29916, 29931, 12, 4247, 4388, 4969, 7826, 7828, 11196, 11290, 12675, 13709, 14903, 17677, 18666, 5, 8916, 8917, 8918, 31148, 31149, 1, 12928, 1, 12506, 1, 7266, 1, 11865, 2, 31202, 31215, 1, 12594, 5, 3664, 3704, 3736, 6426, 10496, 2, 10979, 30300, 1, 26466, 4, 4354, 4358, 4362, 4366, 1, 6082, 1, 25343, 1, 2281, 1, 17204, 1, 12688, 1, 5389, 2, 21549, 22338, 1, 6398, 4, 23441, 23442, 23443, 23444, 1, 26429, 1, 9234, 1, 14046, 1, 5128, 1, 5396, 1, 7803, 1, 15559, 7, 3201, 3206, 3218, 3224, 3225, 3239, 24401, 5, 5188, 21903, 21904, 21905, 21906, 1, 9259, 1, 9937, 1, 17301, 2, 16766, 22449, 4, 3486, 3487, 3488, 3489, 3, 4357, 4644, 4645, 1, 30609, 1, 16791, 1, 7842, 1, 31602, 1, 31965, 1, 3123, 1, 12378, 1, 32367, 1, 24194, 1, 26053, 1, 24022, 2, 3344, 21683, 3, 4858, 5360, 5361, 1, 24118, 2, 30435, 30436, 1, 30824, 3, 7771, 7775, 7776, 1, 24700, 1, 26333, 1, 14239, 1, 31276, 2, 30642, 31036, 84, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5936, 57, 16936, 16937, 16938, 16939, 16940, 16941, 16942, 16943, 16944, 16945, 16946, 16947, 16948, 16949, 16950, 16951, 16952, 16953, 16954, 16955, 16956, 16957, 16958, 16959, 16960, 16961, 16962, 16963, 16964, 16965, 16966, 16967, 16968, 16969, 16970, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 16979, 16980, 16981, 16982, 16983, 16984, 16985, 16986, 16987, 16988, 16989, 16990, 16991, 16992, 2, 13683, 29322, 1, 4360, 2, 1048, 1080, 2, 340, 341, 2, 27009, 27010, 2, 11653, 11749, 1, 25962, 4, 26594, 26595, 26596, 26597, 1, 15588, 1, 3033, 1, 15312, 1, 21565, 2, 1027, 1059, 1, 15079, 1, 25244, 1, 26375, 1, 30775, 10, 18397, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 1, 9390, 1, 9502, 1, 22968, 1, 25141, 1, 30631, 2, 30034, 30095, 1, 25274, 1, 23667, 1, 14769, 1, 17998, 1, 32250, 3, 1974, 24973, 29447, 3, 8728, 9061, 9062, 2, 13606, 29320, 2, 13867, 24372, 2, 17961, 24029, 1, 23906, 1, 14701, 1, 24689, 1, 25528, 1, 24795, 1, 18040, 1, 32381, 1, 32446, 125, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, 14455, 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14464, 14465, 14466, 14467, 14468, 14469, 14470, 14471, 14472, 14473, 14474, 1, 17292, 1, 25421, 1, 15161, 1, 30765, 1, 8649, 1, 3952, 1, 22267, 1, 27172, 2, 13827, 13828, 1, 7640, 1, 14446, 1, 24172, 1, 15565, 1, 7508, 1, 13324, 1, 28954, 1, 18685, 1, 23864, 1, 15552, 2, 31914, 31921, 1, 27284, 1, 9877, 1, 25762, 1, 25227, 1, 31221, 1, 9300, 1, 31226, 2, 13571, 29330, 1, 26946, 3, 1606, 15643, 15644, 1, 29338, 1, 25517, 1, 6470, 109, 379, 410, 540, 620, 630, 632, 818, 820, 1970, 1971, 1972, 1973, 2014, 2017, 2020, 2024, 2027, 2246, 3300, 5485, 6498, 6499, 6500, 6684, 6740, 6921, 6922, 6923, 7442, 7467, 7653, 7967, 7975, 8191, 8192, 8193, 8194, 9163, 9180, 9181, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9577, 9578, 9579, 9580, 9957, 10034, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10854, 10855, 10856, 10942, 11056, 14005, 14006, 14878, 14879, 14880, 15590, 17427, 17428, 17429, 17430, 17431, 17432, 17467, 17468, 17469, 17470, 17471, 17472, 19125, 20611, 20735, 20738, 20741, 20743, 20747, 20749, 20752, 26576, 26582, 26620, 26629, 29220, 29241, 29287, 29288, 29289, 29315, 29316, 29317, 1, 17126, 1, 15175, 52, 7619, 7622, 7653, 7683, 7686, 7710, 8815, 9504, 9505, 9506, 9509, 9510, 9512, 9513, 9520, 9521, 9984, 9986, 9992, 9994, 10085, 10088, 10099, 10102, 10840, 10841, 11034, 29734, 31063, 31064, 31067, 31068, 31071, 31072, 31075, 31076, 31079, 31080, 31083, 31084, 31510, 31513, 31520, 31523, 31528, 31531, 31536, 31539, 31544, 31547, 31552, 31555, 2, 22843, 29235, 1, 32746, 1, 25630, 18, 12710, 21187, 21389, 21421, 21422, 21569, 21570, 21635, 21636, 21698, 21801, 21986, 21997, 22181, 22199, 22204, 22213, 22237, 3, 7320, 8109, 19940, 1, 10658, 1, 18839, 2, 30405, 30463, 8, 3745, 3915, 11419, 11603, 11617, 11698, 11712, 16663, 1, 25582, 3, 10249, 10296, 29004, 1, 23912, 1, 7908, 1, 23759, 1, 23060, 1, 30434, 1, 22873, 1, 30474, 1, 15042, 1, 23537, 1, 30266, 1, 7260, 1, 25310, 1, 17818, 1, 25503, 1, 15068, 1, 32484, 1, 32149, 1, 13188, 2, 1042, 1074, 2, 4419, 14934, 1, 22758, 4, 4746, 13865, 24371, 24562, 1, 25863, 1, 29818, 1, 23397, 1, 1822, 2, 264, 265, 1, 15582, 1, 26030, 1, 30923, 2, 30662, 30911, 8, 8757, 8943, 10934, 12164, 30427, 31141, 31143, 31164, 1, 16906, 1, 12698, 3, 178, 1420, 2979, 2, 10826, 22042, 1, 26220, 8, 5130, 5143, 6720, 21811, 21942, 21943, 21944, 22255, 1, 9329, 12, 1028, 1060, 4090, 10662, 11235, 11329, 12221, 13681, 17238, 17668, 18678, 29190, 1, 15234, 2, 17962, 24030, 1, 23535, 2, 11002, 31201, 2, 30680, 30749, 1, 25383, 1, 13532, 2, 25050, 25051, 1, 5432, 1, 5387, 1, 23257, 1, 12151, 1, 25777, 1, 30481, 1, 18627, 1, 25856, 2, 5794, 5796, 1, 9584, 1, 31713, 2, 12947, 13380, 1, 26720, 1, 29276, 1, 17822, 1, 25824, 3, 13876, 24063, 24515, 1, 30174, 1, 32644, 1, 11044, 69, 11170, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 1, 25438, 1, 6500, 1, 8133, 1, 32757, 2, 17890, 23835, 1, 23987, 2, 17955, 24023, 1, 8802, 2, 27072, 27083, 1, 1884, 1, 18013, 1, 9772, 2, 17866, 23805, 1, 31694, 1, 32494, 3, 30675, 30676, 30863, 1, 27001, 1, 30498, 4, 11052, 11080, 16835, 30334, 1, 17933, 1, 23977, 10, 1520, 1573, 2121, 2122, 2135, 2151, 15900, 16046, 16363, 16364, 1, 4178, 3, 4024, 4995, 13480, 1, 12902, 2, 17085, 31165, 1, 12790, 1, 30274, 1, 12115, 42, 13761, 13762, 28842, 28844, 28845, 28846, 28847, 28848, 28874, 28880, 28890, 30999, 31830, 31831, 31832, 31833, 31834, 31835, 31838, 31851, 31852, 31853, 31854, 31855, 31856, 31859, 31872, 31873, 31874, 31875, 31876, 31877, 31880, 31893, 31894, 31895, 31896, 31897, 31898, 31901, 31904, 31907, 1, 17088, 1, 24513, 1, 24939, 1, 29230, 42, 334, 335, 626, 1690, 1691, 2219, 2276, 3606, 3848, 5156, 5373, 5455, 5490, 6531, 11452, 13438, 14087, 14088, 14130, 14396, 14643, 14855, 14856, 14857, 14889, 15763, 15764, 15770, 15771, 15788, 15789, 16696, 18800, 18801, 18895, 18896, 18946, 18947, 20548, 20621, 24832, 24864, 1, 15115, 1, 24224, 5, 26788, 26789, 26791, 26792, 26793, 1, 32717, 1, 30168, 5, 22086, 22087, 22088, 22089, 22090, 1, 9437, 24, 4156, 4581, 4917, 11191, 11285, 11813, 12685, 13514, 13912, 16613, 16741, 18110, 21172, 21502, 21550, 21551, 21552, 21553, 21597, 21654, 21971, 22320, 24541, 29159, 1, 26243, 1, 14532, 1, 26349, 1, 26652, 1, 13494, 1, 9597, 1, 23566, 2, 16248, 16250, 1, 32037, 1, 26754, 1, 17129, 1, 31254, 1, 22965, 1, 730, 1, 29313, 1, 9788, 1, 22142, 2, 8820, 30467, 1, 4371, 1, 5176, 1, 26046, 1, 15196, 1, 6021, 1, 25680, 1, 8157, 1, 26280, 1, 24078, 1, 22923, 9, 9835, 9868, 9869, 9870, 9871, 9884, 9885, 9886, 9887, 2, 205, 237, 4, 6388, 18840, 18898, 18949, 8, 657, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 1, 31796, 1, 7802, 1, 9970, 1, 6042, 1, 29171, 1, 12825, 2, 3285, 3484, 26, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 31331, 1, 23719, 1, 9227, 27, 8221, 8223, 30807, 30808, 30809, 30810, 30811, 30812, 30813, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30826, 30827, 30828, 30829, 30830, 30839, 1, 12924, 1, 32763, 1, 24209, 1, 15278, 1, 24036, 1, 3027, 8, 204, 236, 5148, 6517, 6669, 6728, 17454, 17494, 8, 8040, 8043, 8059, 8066, 8072, 8074, 8081, 13183, 1, 25439, 1, 9836, 1, 1876, 1, 15290, 1, 15535, 1, 12850, 1, 15221, 1, 16856, 2, 22368, 23448, 1, 22276, 1, 28886, 1, 3175, 1, 9768, 96, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2, 4864, 5037, 2, 11157, 30369, 1, 24180, 1, 24744, 1, 24685, 2, 30311, 31669, 1, 13224, 1, 9452, 1, 7733, 2, 4890, 5031, 2, 6493, 6510, 1, 12507, 2, 26806, 26807, 2, 7829, 9862, 1, 26150, 1, 7965, 1, 12522, 1, 24222, 1, 22964, 1, 23579, 1, 26113, 1, 23188, 1, 12603, 11, 2051, 5562, 17430, 17436, 17470, 17476, 17536, 17598, 17634, 19354, 24964, 1, 30375, 1, 26180, 181, 4480, 4481, 4526, 4527, 4547, 4555, 4556, 4681, 4924, 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5006, 5007, 5008, 5009, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5643, 5644, 5645, 5646, 5648, 5651, 1, 31975, 3, 28580, 28581, 28582, 1, 6715, 4, 1020, 1100, 1275, 1276, 1, 15527, 1, 24544, 2, 17553, 24992, 1, 12552, 1, 5147, 1, 32729, 1, 24776, 2, 7498, 27652, 1, 25493, 1, 25468, 1, 25129, 19, 26665, 26666, 26670, 26671, 26672, 26676, 26677, 26678, 26682, 26686, 26688, 26696, 26698, 26703, 26705, 26706, 26772, 26773, 26829, 657, 13843, 13844, 13845, 13846, 13847, 13848, 13849, 13850, 13851, 13852, 13853, 13854, 13855, 13856, 13857, 13858, 13859, 13860, 13861, 13862, 13863, 13864, 13865, 13866, 13867, 13868, 13869, 13870, 13871, 13872, 13873, 13874, 13875, 13876, 13877, 13878, 13879, 13880, 13881, 13882, 13883, 13884, 13885, 13886, 13887, 13888, 13889, 13890, 13891, 13892, 13893, 13894, 13895, 13896, 13897, 13898, 13899, 13900, 13901, 13902, 13903, 13904, 13905, 13906, 13907, 13908, 13909, 13910, 13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922, 13923, 13924, 13925, 13926, 13927, 13928, 13929, 13930, 24031, 24032, 24033, 24034, 24035, 24036, 24037, 24038, 24039, 24040, 24041, 24042, 24043, 24044, 24045, 24046, 24047, 24048, 24049, 24050, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24058, 24059, 24060, 24061, 24062, 24063, 24064, 24065, 24066, 24067, 24068, 24069, 24070, 24071, 24072, 24073, 24074, 24075, 24076, 24077, 24078, 24079, 24080, 24081, 24082, 24083, 24084, 24085, 24086, 24087, 24088, 24089, 24090, 24091, 24092, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106, 24107, 24108, 24109, 24110, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 24118, 24119, 24120, 24121, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24129, 24130, 24131, 24132, 24133, 24134, 24135, 24136, 24137, 24138, 24139, 24140, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24148, 24149, 24150, 24151, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24159, 24160, 24161, 24162, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 24174, 24175, 24176, 24177, 24178, 24179, 24180, 24181, 24182, 24183, 24184, 24185, 24186, 24187, 24188, 24189, 24190, 24191, 24192, 24193, 24194, 24195, 24196, 24197, 24198, 24199, 24200, 24201, 24202, 24203, 24204, 24205, 24206, 24207, 24208, 24209, 24210, 24211, 24212, 24213, 24214, 24215, 24216, 24217, 24218, 24219, 24220, 24221, 24222, 24223, 24224, 24225, 24226, 24227, 24228, 24229, 24230, 24231, 24232, 24233, 24234, 24235, 24236, 24237, 24238, 24239, 24240, 24241, 24242, 24243, 24244, 24245, 24246, 24247, 24248, 24249, 24250, 24251, 24252, 24253, 24254, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24265, 24266, 24267, 24268, 24269, 24270, 24271, 24272, 24273, 24274, 24275, 24276, 24277, 24278, 24279, 24280, 24281, 24282, 24283, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24296, 24297, 24298, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24308, 24309, 24310, 24311, 24312, 24313, 24314, 24315, 24316, 24317, 24318, 24319, 24320, 24321, 24322, 24323, 24324, 24325, 24326, 24327, 24328, 24329, 24330, 24331, 24332, 24333, 24334, 24335, 24336, 24337, 24338, 24339, 24340, 24341, 24342, 24343, 24344, 24345, 24346, 24347, 24348, 24349, 24350, 24351, 24352, 24353, 24354, 24355, 24356, 24357, 24358, 24359, 24360, 24361, 24362, 24363, 24364, 24365, 24366, 24367, 24368, 24369, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24377, 24378, 24379, 24380, 24381, 24382, 24383, 24384, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24442, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24464, 24465, 24466, 24467, 24468, 24469, 24470, 24471, 24472, 24473, 24474, 24475, 24476, 24477, 24478, 24479, 24480, 24481, 24482, 24483, 24484, 24485, 24486, 24487, 24488, 24489, 24490, 24491, 24492, 24493, 24494, 24495, 24496, 24497, 24498, 24499, 24500, 24501, 24502, 24503, 24504, 24505, 24506, 24507, 24508, 24509, 24510, 24511, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24530, 24531, 24532, 24533, 24534, 24535, 24536, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24545, 24546, 24547, 24548, 24549, 24550, 24551, 24552, 24553, 24554, 24555, 24556, 24557, 24558, 24559, 24560, 24561, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 1, 27265, 1, 27288, 1, 13003, 1, 8948, 1, 11941, 1, 23531, 5, 9745, 9746, 28755, 28756, 28757, 1, 25233, 1, 25688, 1, 26271, 3, 8813, 26934, 26935, 1, 30344, 1, 23329, 1, 9413, 1, 32182, 1, 22711, 4, 382, 383, 391, 392, 2, 30834, 30835, 128, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 2, 3279, 3280, 1, 12354, 1, 22902, 1, 25299, 1, 23074, 1, 32016, 1, 22551, 1, 31288, 1, 26248, 77, 28616, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28688, 28689, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28698, 28699, 28700, 28701, 28702, 28703, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28788, 28789, 28790, 28791, 28792, 28793, 28794, 28795, 28796, 28797, 28801, 28806, 28807, 28808, 28809, 28810, 28811, 28814, 28815, 28818, 28819, 28834, 28836, 28936, 1, 23368, 2, 7944, 9867, 2, 8917, 8918, 1, 1447, 3, 831, 7196, 26781, 1, 25660, 1, 12847, 1, 12638, 1, 28944, 1, 30562, 3, 10820, 10821, 11008, 1, 9387, 1, 25546, 1, 20181, 1, 31967, 1, 26182, 1, 15424, 1, 25128, 1, 30585, 87, 24031, 24032, 24033, 24034, 24035, 24036, 24037, 24038, 24039, 24040, 24041, 24042, 24043, 24044, 24045, 24046, 24047, 24048, 24049, 24050, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24058, 24059, 24060, 24061, 24062, 24063, 24064, 24065, 24066, 24067, 24068, 24069, 24070, 24071, 24072, 24073, 24074, 24075, 24076, 24077, 24078, 24079, 24080, 24081, 24082, 24083, 24084, 24085, 24086, 24087, 24088, 24089, 24090, 24091, 24092, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106, 24107, 24108, 24109, 24110, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 18, 1030, 1062, 1155, 1156, 1157, 1158, 1159, 1160, 1175, 1176, 1257, 1258, 1261, 1262, 4926, 10664, 17704, 18668, 4, 18895, 18910, 18946, 18961, 1, 26203, 1, 22674, 1, 23040, 1, 29339, 1, 23717, 1, 17976, 18, 7991, 7992, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28785, 28786, 28787, 31620, 1, 31257, 1, 24312, 4, 20749, 20750, 20752, 20753, 1, 3895, 2, 1017, 1097, 1, 22268, 1, 12301, 4, 3265, 30734, 30748, 30944, 1, 12500, 2, 24122, 24410, 1, 25908, 1, 13221, 1, 23304, 1, 26315, 1, 32791, 6, 3690, 3731, 6453, 10522, 13777, 13778, 1, 22500, 3, 26908, 28888, 28889, 48, 2194, 2281, 2317, 2410, 2494, 2583, 2749, 2847, 2935, 3212, 3356, 3431, 3505, 4226, 5553, 6356, 12498, 14234, 14277, 14504, 14505, 14579, 14622, 14688, 14790, 18483, 18985, 19191, 19294, 19457, 19509, 19615, 19671, 19718, 19791, 19877, 19970, 20051, 20143, 20231, 20356, 20502, 20565, 20639, 20780, 20942, 21027, 24912, 1, 13180, 11, 1519, 1572, 1580, 1586, 2132, 2134, 2159, 15899, 16045, 16361, 16362, 1, 32146, 96, 2184, 2307, 2400, 2484, 2573, 2739, 2837, 2925, 3347, 3422, 3494, 3611, 4242, 4386, 4972, 5234, 5254, 5277, 5297, 5463, 5496, 5518, 5655, 5871, 6063, 6064, 6175, 6241, 6242, 6286, 11190, 11284, 12663, 13361, 13405, 13556, 14193, 14267, 14373, 14410, 14493, 14494, 14575, 14605, 14680, 14901, 17382, 17567, 18475, 18992, 19181, 19284, 19448, 19499, 19604, 19662, 19706, 19781, 19865, 19960, 20041, 20133, 20221, 20297, 20298, 20346, 20405, 20437, 20492, 20556, 20629, 20707, 20770, 20856, 20886, 20932, 21015, 21059, 21225, 21226, 21315, 21316, 21488, 21586, 21962, 22191, 22231, 22315, 22332, 24928, 26879, 29063, 29105, 29291, 29396, 29430, 1, 12753, 1, 32391, 12, 4479, 4501, 4525, 4544, 4554, 4585, 4615, 4641, 4670, 4689, 4715, 4772, 1, 29135, 1, 31718, 1, 32329, 1, 9857, 1, 23993, 1, 30677, 2, 3408, 20981, 1, 31286, 1, 8125, 1, 11993, 1, 12526, 1, 9785, 1, 25107, 1, 18004, 1, 25117, 1, 13292, 1, 25664, 1, 31289, 1, 23376, 1, 9715, 4, 4047, 4717, 19408, 24420, 1, 15295, 1, 15531, 1, 9406, 2, 10938, 30586, 1, 12212, 1, 25661, 1, 7426, 3, 10862, 11065, 11066, 1, 25460, 1, 26269, 1, 24698, 848, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6344, 6345, 6346, 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 7364, 7365, 7611, 7612, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8307, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8425, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8446, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 13735, 13736, 13737, 13738, 13739, 13740, 13741, 13742, 13743, 13744, 14319, 14320, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14328, 14329, 14330, 14331, 14332, 14333, 14334, 14335, 14336, 14337, 14338, 14361, 14362, 14363, 14364, 14365, 14366, 14367, 14368, 14369, 14370, 14554, 14555, 14556, 14557, 14558, 14559, 14560, 14561, 14562, 14563, 14582, 14583, 14584, 14585, 14586, 14587, 14588, 14589, 14590, 14591, 14666, 14667, 14668, 14669, 14670, 14671, 14672, 14673, 14674, 14675, 15021, 15022, 15023, 15024, 15025, 15026, 15027, 15028, 15029, 15030, 16510, 16511, 16512, 16513, 16514, 16515, 16516, 16517, 16518, 16519, 17210, 17211, 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17585, 17586, 17587, 17588, 17589, 17590, 17591, 17592, 17593, 17594, 18513, 18514, 18515, 18516, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 19024, 19025, 19026, 19027, 19028, 19029, 19030, 19031, 19032, 19258, 19259, 19260, 19261, 19262, 19263, 19264, 19265, 19266, 19267, 19361, 19362, 19363, 19364, 19365, 19366, 19367, 19368, 19369, 19370, 19424, 19425, 19426, 19427, 19428, 19429, 19430, 19431, 19432, 19433, 19558, 19559, 19560, 19561, 19562, 19563, 19564, 19565, 19566, 19567, 19574, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19582, 19753, 19754, 19755, 19756, 19757, 19758, 19759, 19760, 19761, 19762, 19837, 19838, 19839, 19840, 19841, 19842, 19843, 19929, 19930, 19931, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 20015, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023, 20024, 20186, 20187, 20188, 20189, 20190, 20191, 20192, 20193, 20194, 20195, 20266, 20267, 20268, 20269, 20270, 20271, 20272, 20273, 20274, 20275, 20318, 20319, 20320, 20321, 20322, 20323, 20324, 20325, 20326, 20327, 20458, 20459, 20460, 20461, 20462, 20463, 20464, 20465, 20466, 20467, 20823, 20824, 20825, 20826, 20827, 20828, 20829, 20830, 20831, 20832, 20985, 20986, 20987, 20988, 20989, 20990, 20991, 20992, 20993, 20994, 21048, 21049, 21050, 21051, 21052, 21053, 21054, 21055, 21056, 21057, 24631, 24632, 24633, 24634, 24635, 24636, 24637, 24638, 24639, 24640, 24749, 24750, 24751, 24752, 24753, 24754, 24755, 24756, 24757, 24758, 24870, 24871, 24872, 24873, 24874, 24875, 24876, 24877, 24878, 24879, 24890, 24891, 24892, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27305, 27306, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 28269, 28270, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28286, 28287, 28288, 28289, 28290, 28291, 28292, 28293, 28294, 28295, 28296, 28297, 28298, 28299, 28300, 28301, 28302, 28303, 28304, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 29088, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29096, 29097, 29148, 29149, 29150, 29151, 29152, 29153, 29154, 29155, 29156, 29157, 29356, 29357, 29358, 29359, 29360, 29361, 29362, 29363, 29364, 29448, 29449, 29450, 29451, 29452, 29453, 29454, 29455, 29456, 29457, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29965, 29966, 29967, 29968, 29969, 29970, 32513, 32514, 32515, 32516, 32517, 32518, 32519, 32520, 32521, 32522, 1, 30303, 2, 8926, 31137, 1, 29350, 1, 32036, 1, 9274, 4, 8827, 8828, 8829, 31825, 1, 28829, 1, 12899, 1, 9870, 69, 1961, 2639, 3373, 3448, 3461, 3521, 3553, 3622, 3846, 4153, 4179, 4453, 4495, 4496, 4911, 4941, 5244, 5265, 5288, 5307, 5474, 5504, 5676, 5694, 5937, 6089, 6192, 6208, 6238, 6239, 6240, 6317, 11256, 11257, 11350, 11351, 11450, 11850, 12821, 13425, 13525, 13901, 14210, 14230, 14390, 14425, 14521, 14651, 14968, 16650, 16694, 16778, 17626, 17662, 18148, 18346, 18378, 18996, 18997, 19897, 20873, 20903, 24587, 24623, 24654, 24963, 26589, 29118, 29168, 1, 10649, 1, 11988, 1, 24504, 1, 24692, 2, 30482, 30522, 11, 6228, 6230, 6235, 6239, 6242, 6246, 6248, 6252, 6255, 6258, 6274, 1, 17177, 1, 6017, 1, 25860, 5, 30664, 30665, 30918, 30919, 30920, 1, 32453, 1, 32275, 1, 21104, 2, 22856, 29260, 20, 3125, 3131, 3215, 4224, 4437, 5323, 10968, 11219, 11313, 12450, 13656, 13746, 14159, 14730, 14731, 14952, 16733, 24657, 29226, 31158, 1, 12756, 1, 26013, 2, 22413, 23490, 1, 4068, 2, 27584, 27608, 1, 12618, 1, 14799, 2, 7830, 9863, 1, 23389, 1, 1448, 2, 17878, 23818, 2, 26869, 26873, 1, 12592, 1, 25154, 2, 317, 318, 1, 13794, 59, 10524, 10525, 10526, 10527, 10528, 10529, 10530, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10539, 10540, 10541, 10542, 10543, 10544, 10545, 10546, 10547, 10548, 10549, 10550, 10551, 10552, 10553, 10554, 10555, 10556, 10557, 10558, 10559, 10560, 10561, 10562, 10563, 10564, 10565, 10566, 10567, 10568, 10569, 10570, 10571, 10572, 10573, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582, 1, 25286, 2, 24103, 24254, 1, 16773, 1, 6485, 1, 24231, 1, 31709, 2, 348, 349, 1, 12519, 1, 22898, 1, 15470, 1, 23195, 1, 7634, 2, 20421, 20453, 1, 26448, 1, 30106, 1, 31219, 1, 22690, 1, 14836, 1, 25829, 1, 32083, 2, 22371, 23451, 3, 8959, 31762, 31821, 3, 10607, 13009, 17375, 1, 16738, 1, 10805, 1, 25579, 1, 30770, 1, 32139, 1, 32420, 2, 10852, 11051, 15, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 1, 26154, 1, 23692, 1, 22578, 2, 362, 363, 1, 24398, 2, 4735, 11552, 3, 10529, 10530, 24802, 1, 9923, 1, 26681, 2, 11662, 11774, 1, 3402, 1, 17417, 1, 26209, 79, 20117, 20118, 20119, 20120, 20121, 20122, 20123, 20124, 20125, 20126, 20127, 20128, 20129, 20130, 20131, 20132, 20133, 20134, 20135, 20136, 20137, 20138, 20139, 20140, 20141, 20142, 20143, 20144, 20145, 20146, 20147, 20148, 20149, 20150, 20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 20160, 20161, 20162, 20163, 20164, 20165, 20166, 20167, 20168, 20169, 20170, 20171, 20172, 20173, 20174, 20175, 20176, 20177, 20178, 20179, 20180, 20181, 20182, 20183, 20184, 20185, 20186, 20187, 20188, 20189, 20190, 20191, 20192, 20193, 20194, 20195, 1, 23333, 1, 30820, 1, 23254, 1, 24961, 3, 4270, 5108, 5634, 1, 29936, 1, 9280, 1, 25309, 1, 26485, 1, 17732, 1, 23436, 3, 6231, 6237, 6253, 1, 6410, 1, 12993, 1, 22959, 1, 24716, 1, 23056, 1, 32077, 1, 29172, 1, 13175, 4, 9676, 9803, 9804, 9807, 1, 25520, 1, 23908, 1, 3482, 1, 14471, 4, 8008, 8224, 9685, 9686, 1, 4253, 1, 25303, 1, 31745, 1, 31281, 1, 9865, 2, 292, 293, 5, 1569, 2137, 2146, 15896, 16356, 6, 10274, 10276, 10321, 10323, 29025, 29027, 1, 22865, 3, 26647, 26648, 26716, 1, 7257, 1, 22977, 1, 15039, 1, 15137, 1, 18043, 1, 9818, 1, 24339, 2, 4783, 4784, 1, 968, 1, 24393, 1, 31743, 1, 26675, 1, 3977, 2, 10829, 16819, 1, 10637, 3, 11965, 12100, 30114, 24, 426, 447, 617, 623, 644, 652, 798, 6654, 6655, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6680, 6686, 6699, 14073, 14893, 14894, 1, 14180, 1, 8741, 1, 7968, 1, 12210, 1, 17765, 1, 22637, 1, 24331, 1, 11575, 1, 15305, 1, 12721, 1, 24951, 1, 12654, 1, 11867, 1, 17290, 1, 15177, 2, 10990, 30424, 1, 16872, 1, 30622, 1, 15483, 5, 2074, 4322, 4324, 20687, 29442, 1, 25929, 2, 7510, 31336, 1, 26329, 1, 23749, 1, 22115, 1, 23990, 1, 26396, 1, 9429, 1, 25118, 1, 5357, 16, 8251, 17535, 27225, 28377, 28381, 28383, 28384, 28477, 28508, 28513, 28529, 28535, 28561, 28884, 28920, 28926, 1, 4124, 1, 32091, 1, 9468, 2, 22838, 29213, 1, 24599, 1, 27296, 1, 6064, 1, 24735, 1, 7800, 1, 25670, 15, 7323, 7746, 7877, 8044, 8046, 9667, 9668, 9742, 9965, 10892, 13955, 27036, 27037, 27041, 27057, 2, 10260, 10307, 1, 25466, 1, 22998, 2, 30740, 30741, 70, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8130, 5, 3092, 3093, 3095, 3096, 3097, 15, 1463, 7528, 15618, 18158, 18189, 18223, 18261, 18551, 18598, 18709, 18739, 18766, 19059, 19097, 19139, 3, 5341, 10612, 13002, 1, 32688, 2, 8850, 16720, 4, 21541, 21542, 21543, 21785, 1, 25524, 1, 22531, 1, 2123, 2, 22390, 23466, 1, 9619, 1, 9456, 1, 26247, 10, 7490, 7807, 7808, 7868, 7870, 7908, 7951, 7953, 9606, 9607, 4, 30651, 30652, 30653, 30654, 2, 29373, 29407, 1, 15509, 11, 325, 7818, 7819, 9183, 9657, 9893, 9894, 9895, 9896, 9943, 12231, 1, 32117, 1, 15475, 4, 31486, 31487, 31488, 31489, 1, 3266, 1, 17064, 1, 23182, 1, 32416, 1, 18054, 1, 25281, 2, 1341, 1387, 1, 4074, 1, 15342, 3, 30430, 30590, 31150, 3, 10873, 11082, 30594, 7, 28824, 28876, 28877, 28878, 28911, 28912, 28913, 134, 95, 712, 713, 714, 715, 740, 747, 748, 749, 750, 751, 755, 759, 760, 763, 814, 815, 1720, 1727, 1730, 1968, 1972, 1977, 2100, 2116, 2122, 5756, 5760, 5761, 5762, 5766, 5767, 5768, 5772, 5773, 5774, 5778, 5779, 5780, 5784, 5785, 5786, 5790, 5791, 5792, 5795, 5796, 5798, 5903, 5904, 5905, 5909, 5910, 5911, 5916, 5920, 5921, 5927, 5928, 5929, 5931, 5944, 5958, 5959, 7278, 7333, 9054, 9055, 10355, 10722, 10723, 10763, 10764, 10765, 10766, 11146, 11765, 13942, 13947, 13952, 13962, 13964, 14067, 14712, 14714, 14716, 14718, 14720, 14722, 14724, 14726, 14728, 14730, 14732, 14734, 14736, 14738, 14740, 14742, 14744, 14746, 14748, 14750, 14752, 14754, 14756, 14758, 14875, 14876, 14877, 14879, 16299, 16300, 16325, 16326, 16327, 16557, 24674, 26607, 26626, 26627, 26628, 26629, 26630, 26631, 26632, 26633, 26634, 26635, 28331, 28878, 30732, 31103, 32560, 2, 11649, 11745, 1, 32810, 2, 27620, 27640, 13, 211, 7866, 8980, 8981, 9775, 9776, 9779, 9780, 9781, 9782, 9786, 9920, 9921, 1, 5353, 1, 25502, 1, 29322, 1, 26488, 28, 28340, 28341, 28342, 28343, 28344, 28356, 28364, 28365, 28366, 28369, 28371, 28372, 28380, 28390, 28391, 28392, 28393, 28394, 28459, 28460, 28500, 28533, 28534, 28535, 28536, 28537, 28542, 28567, 1, 15546, 4, 26647, 26649, 26657, 26658, 1, 30867, 2, 30871, 30872, 1, 30669, 1, 23012, 1, 24111, 5, 1615, 15657, 15658, 15659, 15660, 1, 11724, 2, 27068, 27069, 3, 4614, 4615, 13586, 1, 23340, 6, 5372, 10401, 10402, 14770, 20724, 25000, 2, 32835, 32836, 1, 31720, 1, 22778, 1, 24120, 4, 4008, 5021, 13465, 29216, 1, 22297, 6, 3648, 3649, 14703, 14704, 14705, 14706, 1, 7728, 1, 32667, 3, 7354, 18842, 30091, 2, 2960, 18507, 4, 1197, 1198, 1305, 1306, 1, 8782, 1, 25082, 1, 30855, 1, 11994, 1, 22776, 1, 11935, 2, 10951, 31153, 1, 15542, 1, 26910, 1, 13132, 2, 27133, 27158, 1, 32769, 1, 23105, 1, 16811, 1, 23341, 1, 5219, 2, 5584, 5810, 1, 8771, 2, 30337, 30338, 1, 8648, 1, 25553, 2, 31186, 31942, 1, 25864, 1, 29265, 1, 24328, 1, 32340, 1, 27270, 2, 31909, 31912, 1, 23722, 1, 25080, 1, 23324, 2, 22420, 23495, 1, 25544, 1, 29327, 3, 10827, 11011, 30488, 2, 166, 1812, 1, 5096, 1, 22621, 4, 1336, 1382, 15592, 15595, 1, 17826, 1, 28859, 7, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 1, 26184, 14, 21511, 21755, 21756, 21757, 21758, 21759, 21760, 21761, 21762, 21763, 21764, 21765, 21766, 21767, 1, 183, 2, 11041, 31742, 1, 31816, 3, 10550, 10551, 10552, 1, 25699, 1, 9980, 1, 12637, 1, 26863, 1, 11889, 2, 7780, 7783, 1, 26443, 1, 7839, 1, 12065, 2, 7364, 30437, 3, 8282, 8954, 30445, 1, 1505, 1, 23134, 1, 10570, 2, 1055, 1087, 1, 2124, 17, 4634, 4663, 4793, 4879, 4880, 4881, 4882, 4920, 4921, 4922, 4923, 5005, 5010, 5640, 5641, 5642, 5647, 3, 5360, 5361, 9601, 1, 14139, 1, 30395, 5, 30489, 30524, 31055, 31056, 31057, 1, 26786, 1, 17540, 52, 30154, 30155, 30156, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30168, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30181, 30182, 30183, 30184, 30185, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 2, 13879, 24517, 6, 30334, 30335, 30740, 30741, 31652, 31676, 1, 32410, 1, 15223, 1, 21117, 1, 23500, 1, 24993, 1, 31647, 1, 32006, 1, 24463, 1, 29220, 17, 4348, 11676, 16953, 16980, 17224, 18415, 18440, 19038, 19252, 19588, 20473, 20847, 29474, 29501, 29542, 29569, 30115, 1, 12874, 1, 9342, 1, 12368, 2, 4801, 13579, 1, 12794, 1, 32481, 1, 11982, 2, 30336, 30503, 9, 39, 325, 696, 746, 1354, 1976, 1977, 16501, 32504, 1, 29943, 20, 7645, 7646, 7647, 7648, 9997, 9998, 9999, 10000, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 12464, 28922, 28923, 30363, 1, 17984, 1, 28984, 1, 12807, 1, 4201, 1, 9948, 1, 28921, 1, 2442, 1, 16772, 1, 23917, 1, 18041, 1, 7317, 3, 10241, 10288, 28997, 1, 12976, 2, 22416, 23493, 64, 12113, 12114, 12115, 12116, 12117, 12118, 12119, 12120, 12121, 12122, 12123, 12124, 12125, 12126, 12127, 12128, 12129, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12159, 12160, 12161, 12162, 12163, 12164, 12165, 12166, 12167, 12168, 12169, 12170, 12171, 12172, 12173, 12174, 12175, 12176, 1, 17816, 1, 16847, 1, 15388, 1, 26297, 2, 26762, 26763, 1, 25446, 1, 22917, 12, 11103, 11104, 11105, 11106, 11107, 11108, 11109, 11110, 11111, 11112, 11113, 11114, 1, 22560, 1, 23676, 1, 16257, 1, 23306, 1, 12051, 1, 25121, 1, 30681, 5, 8899, 8940, 14862, 30332, 31037, 2, 22391, 23467, 1, 27048, 3, 10238, 10285, 28994, 1, 12646, 1, 22730, 1, 12243, 4, 13905, 24382, 24535, 24589, 3, 4669, 4670, 13594, 6, 882, 883, 975, 976, 28267, 28268, 3, 4677, 4678, 4679, 1, 13285, 2, 22808, 29181, 1, 26076, 1, 25316, 1, 14624, 1, 25912, 105, 21616, 21889, 21890, 21891, 21892, 21893, 21894, 21895, 32496, 32497, 32498, 32499, 32500, 32501, 32502, 32503, 32504, 32505, 32506, 32507, 32508, 32509, 32510, 32511, 32512, 32513, 32514, 32515, 32516, 32517, 32518, 32519, 32520, 32521, 32522, 32523, 32524, 32525, 32526, 32527, 32528, 32529, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32539, 32540, 32541, 32542, 32543, 32544, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32556, 32557, 32558, 32559, 32560, 32561, 32562, 32563, 32564, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32581, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32592, 1, 12107, 1, 23786, 1, 27227, 1, 24279, 1, 12220, 38, 2195, 2318, 2411, 2495, 2584, 2750, 2848, 2936, 3213, 3357, 3432, 3506, 5570, 14278, 14580, 14689, 14791, 18484, 19192, 19296, 19458, 19510, 19616, 19673, 19721, 19792, 19878, 19971, 20052, 20144, 20232, 20357, 20503, 20566, 20640, 20781, 20943, 21028, 1, 9930, 1, 17283, 2, 952, 965, 1, 11937, 1, 25740, 2, 191, 223, 1, 14995, 1, 25783, 1, 12870, 1, 26087, 1, 9551, 1, 6058, 1, 25139, 29, 2261, 2262, 14317, 14318, 14677, 14678, 14679, 18528, 18529, 19231, 19232, 19333, 19334, 19435, 19436, 19549, 19550, 19649, 19650, 19924, 19925, 20089, 20090, 20182, 20183, 20818, 20819, 24641, 24642, 1, 25411, 1, 31994, 3, 8706, 8899, 8902, 1, 22376, 1, 31715, 1, 30936, 1, 13231, 1, 25925, 1, 26394, 1, 29256, 1, 23138, 1, 17318, 1, 30226, 6, 6029, 7755, 9691, 9692, 9693, 10228, 1, 4016, 1, 15324, 2, 17856, 23797, 3, 1796, 1797, 1798, 1, 15476, 1, 22592, 2, 2016, 2019, 1, 17794, 1, 31642, 2, 8971, 30875, 2, 3490, 3491, 2, 3343, 10560, 1, 24787, 1, 23321, 1, 11921, 1, 12770, 1, 32220, 11, 22301, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 1, 9336, 1, 15215, 1, 9618, 1, 32608, 1, 7491, 72, 2171, 2227, 2298, 2343, 2393, 2436, 2473, 2522, 2564, 2611, 2653, 2687, 2728, 2778, 2826, 2876, 2914, 2968, 3168, 3250, 3393, 3530, 3540, 5371, 5803, 5948, 5973, 6326, 14254, 14304, 14796, 17191, 17267, 18661, 18909, 18960, 19170, 19221, 19277, 19321, 19414, 19488, 19535, 19699, 19746, 19772, 19820, 19854, 19906, 19949, 19995, 20030, 20076, 20116, 20122, 20169, 20214, 20258, 20311, 20339, 20382, 20401, 20433, 20483, 20529, 20760, 20805, 20925, 20971, 21000, 21039, 25003, 1, 11863, 1, 15408, 1, 25096, 1, 32773, 2, 8594, 30845, 1, 23143, 1, 24435, 1, 15219, 1, 25712, 1, 31216, 1, 32439, 2, 17721, 24626, 1, 29319, 3, 3760, 3995, 11463, 1, 30401, 2, 26839, 26840, 1, 31191, 1, 25662, 2, 4229, 19390, 1, 9405, 1, 9271, 2, 6502, 6503, 2, 10361, 10362, 6, 9861, 12664, 14354, 19927, 20821, 20822, 1, 31015, 2, 11661, 11773, 22, 5165, 21209, 21277, 21338, 21375, 21377, 21385, 21491, 21492, 21577, 21587, 21677, 21727, 21746, 21834, 21835, 21849, 21906, 21916, 21965, 22232, 22233, 1, 6413, 1, 21262, 1, 13320, 4, 6138, 6139, 6144, 13729, 2, 22855, 29259, 1, 7740, 10, 7903, 7904, 7905, 7906, 7926, 7927, 7959, 7960, 7961, 7962, 1, 22705, 1, 23091, 1, 21185, 1, 29238, 1, 32661, 2, 9204, 9207, 68, 1539, 1718, 15809, 15815, 15827, 15828, 15829, 15832, 15838, 15849, 15860, 15867, 15873, 15879, 15889, 15955, 15960, 15965, 15973, 15974, 15977, 15980, 15984, 15994, 16000, 16005, 16010, 16014, 16022, 16061, 16062, 16069, 16089, 16090, 16097, 16105, 16112, 16115, 16126, 16129, 16148, 16149, 16153, 16154, 16166, 16167, 16175, 16176, 16184, 16185, 16186, 16198, 16201, 16202, 16208, 16225, 16238, 16406, 16407, 16408, 16409, 18576, 29611, 29637, 29650, 29672, 29700, 29725, 2, 9903, 9907, 1, 25159, 3, 8935, 17096, 31198, 1, 26383, 1, 21875, 1, 25628, 1, 16849, 6, 878, 879, 979, 980, 10425, 10426, 133, 738, 757, 758, 1515, 1516, 1517, 1609, 1610, 1611, 1613, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1716, 1717, 1718, 1719, 1721, 1724, 1725, 1728, 1729, 1967, 1971, 1976, 2117, 2118, 2119, 2120, 2121, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2148, 2274, 5755, 5757, 5758, 5759, 5763, 5764, 5765, 5769, 5770, 5771, 5775, 5776, 5777, 5781, 5782, 5783, 5787, 5788, 5789, 5793, 5794, 5797, 5900, 5901, 5902, 5907, 5908, 5914, 5918, 5919, 5924, 5925, 5926, 5932, 5938, 5939, 5940, 5941, 5959, 6923, 8864, 11763, 13940, 13945, 13950, 13963, 14003, 14004, 14713, 14715, 14717, 14719, 14721, 14723, 14725, 14727, 14729, 14731, 14733, 14735, 14737, 14739, 14741, 14743, 14745, 14747, 14749, 14751, 14753, 14755, 14757, 14759, 15105, 15106, 15107, 15108, 24673, 26609, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 28876, 30733, 45, 1550, 1653, 1839, 1840, 1841, 2071, 2106, 2119, 3734, 6456, 6548, 6603, 10413, 10414, 13967, 13968, 15843, 15844, 15988, 15989, 16049, 16050, 16077, 16078, 16159, 16160, 16161, 16162, 16222, 16236, 16442, 16443, 16444, 16445, 17365, 17597, 17633, 18300, 18581, 29603, 29630, 29646, 29665, 29692, 29717, 3, 12154, 27229, 30945, 1, 23433, 1, 16787, 1, 16780, 9, 8610, 8647, 9152, 31347, 31357, 31358, 31363, 31364, 31369, 1, 17731, 80, 2177, 2233, 2302, 2347, 2395, 2438, 2478, 2527, 2568, 2615, 2619, 2656, 2690, 2733, 2783, 2789, 2831, 2881, 2887, 2919, 2973, 3174, 3175, 3259, 3542, 3649, 4500, 5378, 5687, 5749, 5980, 5981, 11393, 14261, 14311, 14435, 14488, 14601, 14645, 17596, 17632, 19176, 19227, 19279, 19323, 19416, 19494, 19541, 19599, 19642, 19701, 19748, 19776, 19824, 19860, 19912, 19955, 20002, 20036, 20080, 20128, 20175, 20216, 20260, 20315, 20341, 20386, 20487, 20533, 20550, 20622, 20765, 20810, 20927, 20974, 21002, 21041, 24836, 24868, 25014, 7, 26830, 26831, 26833, 26835, 26836, 26837, 26838, 1, 13071, 1, 22875, 1, 30597, 1, 23191, 1, 5201, 1, 4957, 6, 15105, 15106, 15107, 15108, 15109, 15110, 1, 23236, 1, 23910, 1, 25476, 1, 30689, 1, 31981, 57, 18707, 18708, 18709, 18710, 18711, 18712, 18713, 18714, 18715, 18716, 18717, 18718, 18719, 18720, 18721, 18722, 18723, 18724, 18725, 18726, 18727, 18728, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, 18737, 18738, 18739, 18740, 18741, 18742, 18743, 18744, 18745, 18746, 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18756, 18757, 18758, 18759, 18760, 18761, 18762, 18763, 149, 24897, 24898, 24899, 24900, 24901, 24902, 24903, 24904, 24905, 24906, 24907, 24908, 24909, 24910, 24911, 24912, 24913, 24914, 24915, 24916, 24917, 24918, 24919, 24920, 24921, 24922, 24923, 24924, 24925, 24926, 24927, 24928, 24929, 24930, 24931, 24932, 24933, 24934, 24935, 24936, 24937, 24938, 24939, 24940, 24941, 24942, 24943, 24944, 24945, 24946, 24947, 24948, 24949, 24950, 24951, 24952, 24953, 24954, 24955, 24956, 24957, 24958, 24959, 24960, 24961, 24962, 24963, 24964, 24965, 24966, 24967, 24968, 24969, 24970, 24971, 24972, 24973, 24974, 24975, 24976, 24977, 24978, 24979, 24980, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 24999, 25000, 25001, 25002, 25003, 25004, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25015, 25016, 25017, 25018, 25019, 25020, 25021, 25022, 25023, 25024, 25025, 25026, 25027, 25028, 25029, 25030, 25031, 25032, 25033, 25034, 25035, 25036, 25037, 25038, 25039, 25040, 25041, 25042, 25043, 25044, 25045, 3, 26710, 26711, 26774, 1, 12347, 1, 25727, 1, 4078, 1, 24444, 1, 13222, 1, 15532, 1, 23010, 1, 12395, 1, 9591, 1, 24060, 6, 8254, 8255, 8256, 8257, 30370, 31177, 1, 3822, 1, 7671, 1, 15314, 1, 25366, 1, 25817, 1, 18067, 2, 7460, 12158, 1, 22757, 1, 29248, 1, 5814, 15, 1043, 1075, 1153, 1154, 10674, 11401, 17256, 17460, 17500, 18900, 18901, 18951, 18952, 25012, 25013, 1, 9786, 1, 25568, 1, 7913, 1, 12429, 1, 27246, 1, 25087, 1, 13018, 2, 7473, 8285, 1, 25491, 1, 12673, 2, 31214, 31215, 1, 3470, 1, 15563, 1, 24416, 2, 12240, 31688, 1, 12418, 1, 32108, 2, 17879, 23819, 4, 31249, 31250, 31251, 31252, 1, 32192, 2, 8822, 30469, 1, 12232, 2, 26798, 26800, 1, 7910, 3, 10858, 10859, 11058, 2, 22440, 23517, 1, 22646, 1, 15322, 1, 23602, 1, 24495, 1, 32292, 1, 25527, 1, 7871, 1, 12959, 3, 30441, 30442, 30443, 1, 32772, 1, 8727, 1, 17768, 2, 7364, 7365, 96, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 15592, 15593, 15594, 15595, 15596, 1, 12706, 2, 27625, 27646, 1, 26362, 1, 8002, 1, 29849, 3, 8953, 10993, 30385, 1, 22702, 2, 5748, 14771, 1, 32301, 2, 24259, 24324, 1, 25716, 1, 29263, 2, 17530, 31675, 1, 25696, 2, 7860, 9925, 1, 15256, 1, 20107, 1, 13052, 1, 22593, 1, 15103, 1, 9277, 1, 25561, 1, 32395, 1, 26009, 1, 17287, 1, 16800, 2, 24829, 24861, 1, 25514, 1, 28955, 1, 25721, 1, 23940, 1, 27113, 1, 25297, 3, 4730, 4731, 4732, 1, 25855, 1, 1430, 1, 13105, 1, 25255, 1, 25654, 1, 25768, 2, 213, 245, 1, 32013, 1, 32207, 10, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 21, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, 5269, 5270, 1, 30570, 2, 26854, 26858, 1, 9486, 1, 5221, 1, 9408, 1, 12247, 2, 30596, 30597, 1, 5705, 1, 9303, 1, 9691, 1, 32800, 1, 12207, 1, 15143, 1, 31825, 1, 8880, 1, 25576, 1, 32742, 2, 7859, 9924, 1, 9239, 7, 448, 450, 493, 495, 671, 673, 14893, 1, 2131, 1, 31788, 1, 12520, 1, 11854, 1, 12360, 1, 22944, 1, 23169, 2, 22394, 23470, 1, 29950, 1, 13263, 1, 23166, 1, 25222, 1, 5097, 1, 1655, 1, 16879, 2, 26592, 29175, 129, 1461, 1516, 1527, 1528, 1530, 1532, 1566, 1579, 1605, 1606, 1607, 1608, 1610, 1707, 1708, 1710, 1861, 1862, 2100, 7526, 10411, 10412, 13965, 13966, 15601, 15614, 15615, 15616, 15642, 15643, 15644, 15778, 15779, 15780, 15781, 15795, 15796, 15797, 15805, 15811, 15817, 15821, 15851, 15855, 15857, 15863, 15869, 15875, 15881, 15885, 15891, 15893, 15894, 15895, 15901, 15906, 15912, 15918, 15924, 15926, 15928, 15930, 15933, 15936, 15938, 15944, 15946, 15951, 16019, 16047, 16049, 16051, 16053, 16055, 16057, 16059, 16061, 16063, 16065, 16075, 16077, 16079, 16081, 16083, 16085, 16087, 16089, 16091, 16093, 16118, 16119, 16133, 16136, 16152, 16162, 16165, 16172, 16190, 16193, 16195, 16200, 16202, 16204, 16206, 16207, 16208, 16370, 16371, 16372, 16373, 16376, 16377, 16382, 16383, 16480, 16481, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 17555, 18548, 18580, 29589, 29678, 1, 9543, 23, 4046, 4427, 4711, 5066, 11201, 11295, 11585, 11818, 12958, 13506, 13866, 14942, 16618, 16770, 18140, 21240, 21660, 21865, 21866, 22212, 22356, 24563, 29205, 2, 14485, 14486, 1, 3030, 1, 22283, 1, 22948, 1, 25673, 4, 9744, 9745, 9746, 9747, 1, 24091, 1, 22044, 5, 8774, 10190, 10191, 10192, 10193, 8, 28392, 28421, 28422, 28423, 28424, 28533, 28534, 28552, 1, 12836, 431, 193, 225, 262, 263, 274, 275, 284, 285, 300, 362, 363, 375, 376, 476, 477, 502, 503, 546, 547, 554, 555, 556, 557, 725, 726, 771, 773, 774, 777, 778, 782, 783, 784, 785, 790, 825, 834, 838, 839, 840, 844, 845, 851, 852, 855, 1499, 1527, 1528, 1529, 1531, 1552, 1555, 1556, 1576, 1577, 1583, 1584, 1607, 1612, 1618, 1622, 1623, 1626, 1636, 1637, 1643, 1644, 1646, 1647, 1649, 1651, 1652, 1653, 1660, 1661, 1665, 1673, 1675, 1676, 1682, 1684, 1685, 1687, 1695, 1700, 1704, 1796, 1799, 1802, 1806, 1809, 1815, 1817, 1819, 1827, 1829, 1830, 1833, 1838, 1839, 1840, 1841, 1844, 1845, 1847, 1853, 1854, 1855, 1860, 1861, 1862, 1863, 1864, 1866, 1867, 1868, 1869, 1871, 1873, 1975, 2088, 2089, 2090, 2091, 2094, 2095, 2096, 2105, 2108, 2109, 2110, 2111, 2112, 2139, 2140, 2141, 2150, 2152, 2153, 2156, 2157, 2158, 2553, 2554, 2555, 2715, 2718, 2722, 2905, 3545, 3625, 5982, 6038, 6039, 6504, 6508, 6509, 6716, 6717, 6720, 6721, 6722, 6756, 6757, 6758, 6759, 6764, 6768, 6769, 6776, 6777, 6796, 6797, 6800, 6801, 6830, 6831, 6834, 6835, 6852, 6853, 6854, 6855, 6862, 6863, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6900, 6901, 6904, 6905, 6908, 6909, 6918, 6919, 6921, 6928, 6929, 6934, 6935, 6944, 6945, 6952, 6953, 6960, 6961, 6966, 6967, 6972, 6973, 6978, 6979, 6988, 6989, 6996, 6997, 7002, 7003, 7012, 7013, 7440, 7441, 7444, 7445, 7446, 7447, 7451, 7452, 7457, 7465, 7472, 7970, 8930, 9182, 9537, 9538, 9539, 9569, 9571, 9573, 9574, 9575, 9576, 9577, 9579, 9584, 9585, 9586, 9587, 9588, 9589, 9591, 9592, 9594, 9649, 9650, 9651, 9673, 9677, 9699, 9761, 9762, 9763, 9768, 9775, 9797, 9798, 9799, 9800, 9808, 9809, 9830, 9833, 9836, 9840, 9841, 9842, 9846, 9847, 9850, 9851, 9856, 9857, 9858, 9859, 9866, 9867, 9868, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9886, 9887, 9895, 9896, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9910, 9911, 9912, 9913, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, 9930, 9931, 9938, 9939, 9940, 9941, 9960, 9966, 10047, 10048, 10049, 10054, 10055, 10056, 10057, 10058, 10059, 10472, 10721, 10724, 10764, 11104, 11106, 11108, 11409, 15727, 15728, 15739, 15740, 15741, 15743, 15745, 15747, 15749, 15752, 15755, 15767, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15802, 15803, 15804, 15805, 15806, 15902, 15903, 15904, 15905, 15906, 15907, 15953, 15954, 15955, 15956, 15957, 16025, 16026, 16355, 16370, 16371, 16372, 16373, 16374, 16375, 16378, 16379, 16380, 16381, 16486, 16487, 16488, 16489, 18509, 18632, 19119, 19120, 19121, 19123, 19335, 19763, 25031, 26533, 30704, 30752, 30753, 30754, 30755, 30756, 30955, 3, 4112, 4617, 19383, 1, 5955, 1, 32633, 50, 1459, 1476, 1477, 1782, 1999, 15629, 17362, 17538, 18169, 18200, 18201, 18239, 18240, 18272, 18298, 18543, 18618, 18720, 18750, 18776, 19069, 19070, 19071, 19106, 19150, 21274, 21358, 21359, 21417, 21442, 21513, 21592, 21735, 21745, 21746, 21747, 21748, 21749, 21750, 21751, 21752, 21753, 21754, 21804, 21950, 22014, 22172, 29260, 29388, 29422, 1, 12579, 1, 26415, 12, 7579, 7595, 8297, 8317, 8337, 8426, 11954, 12089, 18397, 24881, 27202, 30817, 1, 31980, 1, 31963, 2, 27488, 27511, 1, 3985, 1, 23724, 1, 29162, 1, 12295, 1, 7805, 1, 30311, 1, 9262, 1, 8785, 1, 9385, 4, 21689, 21973, 22107, 29179, 8, 1340, 1386, 1619, 2109, 15649, 15650, 15651, 15652, 3, 30791, 30792, 30793, 1, 29342, 1, 23391, 1, 26233, 1, 12319, 2, 6051, 6052, 1, 15397, 1, 22764, 1, 26416, 1, 22956, 24, 659, 29655, 29656, 29657, 29658, 29659, 29660, 29661, 29662, 29663, 29664, 29665, 29666, 29667, 29668, 29669, 29670, 29671, 29672, 29673, 29674, 29675, 29676, 29677, 2, 13894, 24582, 1, 21132, 1, 27238, 3, 10236, 10283, 28992, 2, 10611, 13005, 1, 3809, 1, 31608, 1, 11067, 1, 8836, 1, 8909, 1, 32099, 1, 25339, 1, 22643, 1, 23638, 1, 25608, 1, 18042, 3, 1629, 15699, 15700, 1, 32603, 1, 7482, 2, 256, 257, 3, 1799, 1800, 1801, 1, 8807, 1, 16831, 1, 25617, 1, 3819, 2, 27487, 27509, 1, 26147, 1, 29233, 1, 7269, 1, 22796, 1, 32123, 1, 23148, 1, 24326, 1, 32030, 1, 446, 3, 7893, 7898, 10202, 1, 12341, 9, 4095, 11360, 12407, 13497, 14345, 17404, 19847, 20333, 29344, 1, 23363, 1, 12617, 1, 7522, 1, 5024, 1, 23869, 1, 173, 9, 1109, 1110, 6412, 10568, 10688, 13765, 13766, 14887, 17336, 1, 12668, 1, 23600, 2, 30364, 30615, 3, 1952, 13534, 29326, 1, 7726, 1, 23211, 2, 7616, 7680, 1, 23080, 1, 15267, 1, 3126, 1, 1794, 1, 11903, 1, 15504, 2, 18884, 18935, 1, 31972, 1, 1510, 1, 25626, 1, 29204, 1, 13150, 2, 3341, 3342, 2, 5873, 24402, 1, 29864, 62, 27923, 27924, 27925, 27926, 27927, 27928, 27929, 27930, 27931, 27932, 27933, 27934, 27935, 27936, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27945, 27946, 27947, 27948, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27967, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 1, 10204, 1, 23200, 1, 8759, 2, 27583, 27607, 1, 26767, 6, 7456, 7747, 8045, 8047, 8054, 8286, 1, 11550, 1, 26176, 14, 3279, 4248, 4390, 4968, 10922, 10923, 11198, 11292, 12671, 13668, 14146, 14718, 14719, 14905, 1, 17767, 1, 25363, 1, 9312, 1, 17071, 1, 18508, 1, 1919, 2, 7501, 27609, 1, 4128, 1, 23154, 1, 15382, 5, 1680, 15723, 15724, 15725, 15726, 1, 32438, 1, 3808, 1, 22414, 1, 9742, 1, 19347, 2, 31134, 31135, 2, 6047, 6048, 1, 25181, 2, 6207, 6208, 1, 10937, 1, 11752, 1, 1911, 2, 4757, 4758, 1, 25217, 349, 40, 91, 123, 409, 622, 699, 702, 719, 749, 763, 788, 790, 792, 837, 841, 845, 848, 1307, 1308, 1353, 1755, 1757, 2152, 2154, 6685, 6758, 6759, 6764, 7279, 7283, 7324, 7377, 7393, 7440, 7446, 7457, 7470, 7617, 7642, 7643, 7675, 7681, 7718, 7721, 7724, 7888, 7926, 7928, 7989, 7991, 7994, 7996, 8009, 8011, 8024, 8084, 8136, 8137, 8138, 8142, 8143, 8144, 8148, 8149, 8150, 8157, 8158, 8165, 8184, 8185, 8463, 8464, 8465, 8466, 8471, 8472, 8473, 8474, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8492, 8493, 8496, 8497, 8500, 8501, 8504, 8505, 8508, 8509, 8514, 8515, 8516, 8517, 8520, 8521, 8532, 8533, 8534, 8538, 8539, 8540, 8544, 8545, 8546, 8557, 8558, 8560, 8561, 8563, 8567, 8571, 8573, 8584, 8585, 8586, 8587, 8588, 8589, 8590, 8597, 8599, 8600, 8601, 8602, 8603, 8605, 8606, 8614, 8615, 8655, 8660, 8661, 8667, 8670, 8674, 8675, 8678, 8680, 8684, 8687, 8688, 8691, 8692, 8695, 8697, 8729, 8731, 8862, 8916, 8917, 8918, 8919, 8920, 8923, 8927, 8928, 9063, 9065, 9073, 9075, 9156, 9171, 9172, 9177, 9178, 9179, 9181, 9189, 9191, 9193, 9195, 9197, 9206, 9209, 9475, 9534, 9543, 9545, 9546, 9547, 9548, 9549, 9551, 9552, 9559, 9560, 9567, 9568, 9570, 9572, 9581, 9582, 9595, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 9616, 9618, 9620, 9622, 9626, 9631, 9640, 9642, 9644, 9646, 9651, 9677, 9678, 9680, 9683, 9687, 9689, 9703, 9757, 9772, 9779, 9859, 9932, 9949, 9954, 9955, 9956, 9957, 9987, 9995, 10004, 10005, 10031, 10033, 10046, 10083, 10123, 10125, 10127, 10155, 10157, 10159, 10161, 10211, 10213, 10696, 10698, 10703, 10706, 10722, 10726, 10728, 10730, 10732, 10734, 10748, 10761, 11103, 11105, 11110, 11111, 11113, 11123, 11125, 11127, 11129, 11131, 11135, 11137, 11139, 11141, 11766, 14540, 14873, 14876, 14878, 14879, 14880, 14886, 16120, 16277, 16280, 16282, 16284, 16287, 16289, 16291, 16294, 16301, 16303, 16305, 16307, 16309, 16311, 16313, 16315, 16319, 16336, 16338, 16340, 16502, 16553, 16585, 16589, 16592, 22187, 22347, 26604, 26896, 26962, 26963, 30363, 30543, 30713, 30754, 30794, 30850, 30864, 30865, 30866, 30867, 30868, 30869, 30878, 30879, 30881, 30883, 30943, 30957, 30959, 30963, 30965, 31180, 31514, 31589, 31590, 31591, 31592, 31593, 32505, 32556, 32588, 1, 23051, 2, 4123, 13308, 1, 32804, 2, 16732, 22455, 1, 22581, 1, 26444, 1, 1890, 1, 25665, 6, 18835, 18836, 18892, 18943, 20407, 20439, 2, 30895, 30909, 1, 7615, 13, 1549, 15842, 15987, 16117, 16438, 16439, 16440, 16441, 18591, 29614, 29674, 29703, 29728, 8, 3740, 3908, 11411, 11600, 11614, 11695, 11709, 16655, 1, 6375, 4, 26862, 26863, 26864, 26865, 1, 32471, 1, 23542, 3, 31586, 31587, 31588, 4, 3653, 3693, 6415, 10485, 1, 12765, 1, 15181, 1, 15206, 1, 8779, 1, 13176, 1, 18044, 1, 23721, 1, 9436, 1, 24528, 1, 11882, 2, 24219, 24467, 2, 17466, 17506, 1, 32245, 1, 15205, 1, 9550, 1, 20984, 1, 29059, 1, 25315, 1, 26081, 19, 9056, 9124, 9125, 9723, 9724, 10147, 10148, 10149, 10150, 10151, 10152, 10153, 10154, 28463, 28735, 28736, 28870, 28871, 28946, 1, 29821, 1, 32247, 1, 25764, 1, 13159, 1, 26405, 1, 18304, 5, 2285, 5017, 19611, 19667, 19713, 2, 4227, 12512, 2, 30846, 30847, 1, 26439, 1, 32686, 1, 1456, 1, 11015, 1, 1442, 1, 6016, 2, 6385, 11532, 13, 5217, 26929, 28581, 28584, 28587, 28590, 28593, 28599, 28600, 28604, 28605, 28855, 30397, 1, 27168, 1, 8624, 1, 3182, 1, 12521, 1, 13162, 1, 28952, 1, 12304, 1, 25715, 1, 22688, 1, 30176, 1, 9430, 1, 12866, 1, 23762, 1, 12881, 4, 6038, 6039, 6040, 6041, 7, 4048, 5065, 10842, 11035, 13469, 24405, 29208, 1, 6165, 1, 12113, 1, 25130, 1, 7991, 1, 12122, 1, 18076, 1, 23120, 2, 31919, 31926, 2, 4779, 4780, 1, 25362, 1, 9299, 1, 30591, 5, 1877, 4039, 4804, 5530, 19405, 1, 15548, 4, 18896, 18911, 18947, 18962, 7, 12701, 13870, 24082, 24232, 24291, 24470, 24566, 1, 31722, 1, 7486, 1, 30207, 1, 24152, 1, 17833, 2, 10377, 10378, 1, 22888, 1, 23682, 1, 22640, 1, 12969, 1, 9592, 1, 29283, 1, 12695, 1, 15044, 3, 10709, 10710, 10711, 1, 4710, 1, 12455, 1, 10479, 4, 10853, 11055, 16840, 31247, 1080, 22368, 22369, 22370, 22371, 22372, 22373, 22374, 22375, 22376, 22377, 22378, 22379, 22380, 22381, 22382, 22383, 22384, 22385, 22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407, 22408, 22409, 22410, 22411, 22412, 22413, 22414, 22415, 22416, 22417, 22418, 22419, 22420, 22421, 22422, 22423, 22424, 22425, 22426, 22427, 22428, 22429, 22430, 22431, 22432, 22433, 22434, 22435, 22436, 22437, 22438, 22439, 22440, 22441, 22442, 22443, 22444, 22445, 22446, 22447, 22448, 22449, 22450, 22451, 22452, 22453, 22454, 22455, 22456, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22466, 22467, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22475, 22476, 22477, 22478, 22479, 22480, 22481, 22482, 22483, 22484, 22485, 22486, 22487, 22488, 22489, 22490, 22491, 22492, 22493, 22494, 22495, 22496, 22497, 22498, 22499, 22500, 22501, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22509, 22510, 22511, 22512, 22513, 22514, 22515, 22516, 22517, 22518, 22519, 22520, 22521, 22522, 22523, 22524, 22525, 22526, 22527, 22528, 22529, 22530, 22531, 22532, 22533, 22534, 22535, 22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22545, 22546, 22547, 22548, 22549, 22550, 22551, 22552, 22553, 22554, 22555, 22556, 22557, 22558, 22559, 22560, 22561, 22562, 22563, 22564, 22565, 22566, 22567, 22568, 22569, 22570, 22571, 22572, 22573, 22574, 22575, 22576, 22577, 22578, 22579, 22580, 22581, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22596, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22604, 22605, 22606, 22607, 22608, 22609, 22610, 22611, 22612, 22613, 22614, 22615, 22616, 22617, 22618, 22619, 22620, 22621, 22622, 22623, 22624, 22625, 22626, 22627, 22628, 22629, 22630, 22631, 22632, 22633, 22634, 22635, 22636, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22654, 22655, 22656, 22657, 22658, 22659, 22660, 22661, 22662, 22663, 22664, 22665, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22674, 22675, 22676, 22677, 22678, 22679, 22680, 22681, 22682, 22683, 22684, 22685, 22686, 22687, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22696, 22697, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22716, 22717, 22718, 22719, 22720, 22721, 22722, 22723, 22724, 22725, 22726, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22737, 22738, 22739, 22740, 22741, 22742, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22756, 22757, 22758, 22759, 22760, 22761, 22762, 22763, 22764, 22765, 22766, 22767, 22768, 22769, 22770, 22771, 22772, 22773, 22774, 22775, 22776, 22777, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22786, 22787, 22788, 22789, 22790, 22791, 22792, 22793, 22794, 22795, 22796, 22797, 22798, 22799, 22800, 22801, 22802, 22803, 22804, 22805, 22806, 22807, 22808, 22809, 22810, 22811, 22812, 22813, 22814, 22815, 22816, 22817, 22818, 22819, 22820, 22821, 22822, 22823, 22824, 22825, 22826, 22827, 22828, 22829, 22830, 22831, 22832, 22833, 22834, 22835, 22836, 22837, 22838, 22839, 22840, 22841, 22842, 22843, 22844, 22845, 22846, 22847, 22848, 22849, 22850, 22851, 22852, 22853, 22854, 22855, 22856, 22857, 22858, 22859, 22860, 22861, 22862, 22863, 22864, 22865, 22866, 22867, 22868, 22869, 22870, 22871, 22872, 22873, 22874, 22875, 22876, 22877, 22878, 22879, 22880, 22881, 22882, 22883, 22884, 22885, 22886, 22887, 22888, 22889, 22890, 22891, 22892, 22893, 22894, 22895, 22896, 22897, 22898, 22899, 22900, 22901, 22902, 22903, 22904, 22905, 22906, 22907, 22908, 22909, 22910, 22911, 22912, 22913, 22914, 22915, 22916, 22917, 22918, 22919, 22920, 22921, 22922, 22923, 22924, 22925, 22926, 22927, 22928, 22929, 22930, 22931, 22932, 22933, 22934, 22935, 22936, 22937, 22938, 22939, 22940, 22941, 22942, 22943, 22944, 22945, 22946, 22947, 22948, 22949, 22950, 22951, 22952, 22953, 22954, 22955, 22956, 22957, 22958, 22959, 22960, 22961, 22962, 22963, 22964, 22965, 22966, 22967, 22968, 22969, 22970, 22971, 22972, 22973, 22974, 22975, 22976, 22977, 22978, 22979, 22980, 22981, 22982, 22983, 22984, 22985, 22986, 22987, 22988, 22989, 22990, 22991, 22992, 22993, 22994, 22995, 22996, 22997, 22998, 22999, 23000, 23001, 23002, 23003, 23004, 23005, 23006, 23007, 23008, 23009, 23010, 23011, 23012, 23013, 23014, 23015, 23016, 23017, 23018, 23019, 23020, 23021, 23022, 23023, 23024, 23025, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23033, 23034, 23035, 23036, 23037, 23038, 23039, 23040, 23041, 23042, 23043, 23044, 23045, 23046, 23047, 23048, 23049, 23050, 23051, 23052, 23053, 23054, 23055, 23056, 23057, 23058, 23059, 23060, 23061, 23062, 23063, 23064, 23065, 23066, 23067, 23068, 23069, 23070, 23071, 23072, 23073, 23074, 23075, 23076, 23077, 23078, 23079, 23080, 23081, 23082, 23083, 23084, 23085, 23086, 23087, 23088, 23089, 23090, 23091, 23092, 23093, 23094, 23095, 23096, 23097, 23098, 23099, 23100, 23101, 23102, 23103, 23104, 23105, 23106, 23107, 23108, 23109, 23110, 23111, 23112, 23113, 23114, 23115, 23116, 23117, 23118, 23119, 23120, 23121, 23122, 23123, 23124, 23125, 23126, 23127, 23128, 23129, 23130, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23138, 23139, 23140, 23141, 23142, 23143, 23144, 23145, 23146, 23147, 23148, 23149, 23150, 23151, 23152, 23153, 23154, 23155, 23156, 23157, 23158, 23159, 23160, 23161, 23162, 23163, 23164, 23165, 23166, 23167, 23168, 23169, 23170, 23171, 23172, 23173, 23174, 23175, 23176, 23177, 23178, 23179, 23180, 23181, 23182, 23183, 23184, 23185, 23186, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23194, 23195, 23196, 23197, 23198, 23199, 23200, 23201, 23202, 23203, 23204, 23205, 23206, 23207, 23208, 23209, 23210, 23211, 23212, 23213, 23214, 23215, 23216, 23217, 23218, 23219, 23220, 23221, 23222, 23223, 23224, 23225, 23226, 23227, 23228, 23229, 23230, 23231, 23232, 23233, 23234, 23235, 23236, 23237, 23238, 23239, 23240, 23241, 23242, 23243, 23244, 23245, 23246, 23247, 23248, 23249, 23250, 23251, 23252, 23253, 23254, 23255, 23256, 23257, 23258, 23259, 23260, 23261, 23262, 23263, 23264, 23265, 23266, 23267, 23268, 23269, 23270, 23271, 23272, 23273, 23274, 23275, 23276, 23277, 23278, 23279, 23280, 23281, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23300, 23301, 23302, 23303, 23304, 23305, 23306, 23307, 23308, 23309, 23310, 23311, 23312, 23313, 23314, 23315, 23316, 23317, 23318, 23319, 23320, 23321, 23322, 23323, 23324, 23325, 23326, 23327, 23328, 23329, 23330, 23331, 23332, 23333, 23334, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23343, 23344, 23345, 23346, 23347, 23348, 23349, 23350, 23351, 23352, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23360, 23361, 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, 23372, 23373, 23374, 23375, 23376, 23377, 23378, 23379, 23380, 23381, 23382, 23383, 23384, 23385, 23386, 23387, 23388, 23389, 23390, 23391, 23392, 23393, 23394, 23395, 23396, 23397, 23398, 23399, 23400, 23401, 23402, 23403, 23404, 23405, 23406, 23407, 23408, 23409, 23410, 23411, 23412, 23413, 23414, 23415, 23416, 23417, 23418, 23419, 23420, 23421, 23422, 23423, 23424, 23425, 23426, 23427, 23428, 23429, 23430, 23431, 23432, 23433, 23434, 23435, 23436, 23437, 23438, 23439, 23440, 23441, 23442, 23443, 23444, 23445, 23446, 23447, 1, 23108, 85, 1823, 1824, 1825, 19055, 19056, 19057, 19058, 19059, 19060, 19061, 19062, 19063, 19064, 19065, 19066, 19067, 19068, 19069, 19070, 19071, 19072, 19073, 19074, 19075, 19076, 19077, 19078, 19079, 19080, 19081, 19082, 19083, 19084, 19085, 19086, 19087, 19088, 19089, 19090, 19091, 19092, 19093, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103, 19104, 19105, 19106, 19107, 19108, 19109, 19110, 19111, 19112, 19113, 19114, 19115, 19116, 19117, 19118, 19119, 19120, 19121, 19122, 19123, 19124, 19125, 19126, 19127, 19128, 19129, 19130, 19131, 19132, 19133, 19134, 19135, 19136, 1, 25001, 47, 10918, 12139, 27272, 28890, 28891, 28892, 28893, 28894, 28895, 28896, 28897, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28906, 28907, 28908, 28909, 28910, 28911, 28912, 28913, 28917, 28918, 28919, 28923, 28924, 28927, 30539, 30986, 30987, 30988, 30989, 31021, 31029, 31031, 31037, 31041, 31629, 31630, 31631, 31700, 1, 7620, 12, 11148, 11149, 11150, 11151, 11152, 11153, 11154, 11155, 11156, 11171, 11172, 11173, 2, 10367, 10368, 1, 12066, 3, 8915, 8923, 31154, 1, 32102, 2, 26849, 26850, 3, 4944, 13831, 13832, 1, 9196, 4, 2287, 19621, 19672, 19719, 1, 25397, 1, 7741, 1, 9699, 1, 25105, 1, 25942, 1, 31311, 1, 9644, 1, 26245, 12, 10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10477, 10478, 10479, 10480, 1, 24532, 1, 25458, 6, 13914, 24189, 24258, 24319, 24386, 24595, 1, 24338, 1, 12173, 1, 10911, 1, 16757, 1, 12003, 4, 3689, 3729, 6451, 10521, 4, 12177, 12178, 25050, 25051, 1, 26811, 1, 9887, 1, 30193, 7, 7767, 7873, 7936, 8957, 12890, 30333, 31685, 189, 1037, 1069, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1206, 1207, 1297, 1298, 1954, 2182, 2305, 2398, 2482, 2571, 2660, 2737, 2835, 2923, 3345, 3420, 3492, 3609, 4154, 4387, 4586, 4919, 5233, 5253, 5276, 5296, 5311, 5476, 5505, 5517, 5534, 5548, 5653, 5695, 5720, 5757, 5760, 5870, 5900, 5903, 6061, 6062, 6173, 6283, 6465, 10668, 11189, 11263, 11283, 11357, 11812, 11987, 12692, 13406, 13553, 13720, 13844, 14191, 14265, 14341, 14371, 14409, 14490, 14491, 14492, 14603, 14902, 16612, 16739, 17247, 17380, 17607, 17643, 18108, 18363, 18391, 18473, 18991, 19179, 19282, 19446, 19497, 19602, 19660, 19704, 19779, 19845, 19863, 19958, 20039, 20131, 20219, 20276, 20344, 20490, 20554, 20627, 20699, 20768, 20854, 20884, 20930, 21010, 21058, 21477, 21478, 21479, 21480, 21481, 21482, 21483, 21484, 21485, 21486, 21487, 21488, 21489, 21490, 21491, 21492, 21493, 21494, 21495, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21507, 21508, 21509, 21510, 21511, 21512, 21513, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 21521, 21522, 21523, 21524, 21525, 21526, 21527, 21528, 21529, 21530, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22037, 22252, 22253, 22254, 22255, 24546, 24644, 24927, 24929, 29043, 29120, 29160, 3, 3153, 5797, 5798, 1, 15511, 1, 13090, 1, 25898, 1, 29315, 7, 4235, 5004, 5005, 13189, 13624, 16738, 29236, 5, 8021, 30367, 30400, 30893, 30901, 1, 25447, 2, 2712, 17050, 1, 3800, 2, 3944, 11467, 1, 22946, 1, 28960, 1, 23998, 1, 24475, 1, 9868, 118, 1552, 1553, 1555, 1556, 1587, 1618, 1623, 1626, 1636, 1637, 1644, 1646, 1648, 1649, 1650, 1651, 1652, 1653, 1658, 1661, 1667, 1671, 1673, 1676, 1677, 1682, 1695, 1702, 1712, 1815, 1816, 1817, 1818, 1826, 1827, 1828, 1829, 1830, 1833, 1834, 1835, 1838, 1839, 1840, 1841, 1842, 1843, 1845, 1846, 1849, 1853, 1855, 1857, 1858, 1859, 1873, 2089, 2090, 2091, 2094, 2095, 2096, 2101, 2102, 2106, 2112, 2140, 2143, 3488, 3489, 5430, 5538, 6482, 6483, 7349, 7451, 7452, 8838, 8840, 8930, 9770, 9771, 9834, 9846, 9847, 10736, 10737, 10755, 15743, 15744, 15745, 15746, 15747, 15748, 15749, 15750, 15752, 15753, 18644, 18701, 18702, 18703, 18704, 18784, 18785, 19118, 19120, 19133, 19135, 26533, 26898, 30794, 30795, 31586, 31587, 31589, 31590, 31591, 1, 6301, 144, 1436, 2554, 7453, 7456, 7655, 7656, 7713, 8041, 8042, 8043, 8054, 8073, 8076, 8082, 8120, 8173, 8174, 8175, 8208, 8231, 8650, 8651, 8652, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8664, 8665, 8666, 8671, 8672, 8686, 8691, 8692, 8693, 8694, 8837, 8838, 8839, 8840, 8873, 8874, 8875, 8925, 8930, 9036, 9182, 9201, 9202, 9535, 9536, 9543, 9544, 9649, 9652, 9657, 9658, 9660, 9665, 9666, 9670, 9707, 9708, 9713, 9714, 9761, 9772, 9773, 9779, 9780, 9782, 9848, 9849, 9966, 9967, 9968, 10019, 10031, 10068, 10070, 10071, 10093, 10094, 10181, 10182, 16719, 18523, 18524, 19134, 19136, 26622, 26631, 26957, 27218, 28554, 28719, 28720, 28802, 28803, 28804, 28805, 28806, 28807, 28808, 28809, 28810, 28811, 28812, 28813, 28814, 28815, 28837, 28899, 30728, 30729, 30730, 30731, 30779, 30780, 30789, 30790, 31341, 31342, 31343, 31344, 31345, 31346, 31347, 31426, 31427, 31428, 31429, 31430, 31589, 31590, 31591, 31592, 31593, 6, 31346, 31356, 31376, 31383, 31389, 31395, 1, 5132, 1, 25273, 495, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, 10594, 10595, 10596, 10597, 10598, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10607, 10608, 10609, 10610, 10611, 10612, 10613, 10614, 10615, 10616, 10617, 10618, 10619, 10620, 10621, 10622, 10623, 10624, 10625, 10626, 10627, 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10649, 10650, 10651, 10652, 10653, 10654, 10655, 10656, 10657, 10658, 10659, 10660, 10661, 14807, 14808, 14809, 14810, 14811, 14812, 14813, 14814, 14815, 14816, 14817, 14818, 14819, 14820, 14821, 14822, 14823, 14824, 14825, 14826, 14827, 14828, 14829, 14830, 14831, 14832, 14833, 14834, 14835, 14836, 14837, 14838, 2, 27124, 27152, 1, 6471, 2, 5606, 5607, 3, 30391, 30446, 30695, 15, 8802, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 1, 3333, 15, 1029, 1061, 1696, 4098, 6115, 6405, 10663, 11361, 13689, 15768, 15769, 17242, 17699, 18690, 29348, 37, 7649, 7650, 7710, 7711, 8009, 8010, 8011, 8012, 8142, 8144, 8145, 8147, 9170, 9171, 9612, 9613, 9614, 9615, 10129, 11127, 11128, 11129, 11130, 13957, 16313, 16314, 16315, 16316, 16592, 16593, 28634, 28635, 28636, 28637, 28691, 28692, 28693, 1, 15144, 1, 25631, 1, 27022, 1, 13160, 1, 26213, 324, 49, 181, 184, 185, 1590, 1734, 1925, 2139, 2142, 2264, 2361, 2374, 2378, 2449, 2538, 2629, 2640, 2641, 2643, 2644, 2698, 2708, 2709, 2798, 2809, 2812, 2894, 2984, 2985, 2987, 2988, 2990, 2997, 3007, 3008, 3009, 3010, 3012, 3013, 3100, 3188, 3268, 3314, 3323, 3557, 3637, 3650, 4334, 5360, 5406, 5436, 5441, 5539, 5540, 5711, 5826, 5835, 5994, 6004, 6119, 6212, 6345, 6358, 7291, 7381, 7553, 7554, 7555, 7556, 7558, 7562, 7564, 7568, 7569, 7582, 7584, 7585, 7598, 7600, 7601, 7604, 7609, 8254, 8287, 8307, 8327, 8436, 8576, 8577, 8589, 8590, 8595, 8596, 9077, 9087, 9097, 10219, 10481, 10736, 10737, 10776, 10782, 10786, 10788, 10794, 10796, 10806, 10809, 10817, 10822, 10831, 10835, 10840, 10850, 10854, 10858, 10866, 10889, 11148, 11507, 11631, 11680, 11690, 11727, 11781, 11944, 12079, 13736, 14181, 14182, 14184, 14185, 14320, 14330, 14362, 14555, 14583, 14667, 14704, 15022, 16511, 16939, 16957, 16966, 16993, 16994, 16995, 17004, 17006, 17011, 17013, 17017, 17018, 17019, 17035, 17042, 17046, 17047, 17068, 17210, 17228, 17269, 17422, 17586, 18179, 18184, 18185, 18212, 18250, 18258, 18280, 18284, 18307, 18310, 18398, 18401, 18417, 18426, 18444, 18453, 18513, 18519, 18520, 18521, 18560, 18592, 18634, 18638, 18701, 18702, 18703, 18704, 18705, 18706, 18729, 18735, 18736, 18756, 18762, 18763, 18786, 18792, 18968, 18972, 18973, 19015, 19024, 19042, 19051, 19052, 19053, 19084, 19092, 19093, 19128, 19131, 19238, 19256, 19257, 19259, 19362, 19425, 19559, 19574, 19592, 19593, 19754, 19838, 19930, 20016, 20187, 20267, 20319, 20459, 20824, 20833, 20986, 21049, 21083, 21084, 21085, 21086, 21087, 21088, 21091, 21092, 21093, 21094, 21095, 21098, 21099, 21100, 21101, 22077, 22086, 22100, 22108, 22135, 22144, 22146, 22149, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 24632, 24750, 24871, 24890, 26954, 26988, 27192, 27298, 27307, 27316, 27321, 28270, 28280, 28290, 28300, 28310, 29089, 29149, 29356, 29449, 29460, 29478, 29487, 29510, 29520, 29521, 29524, 29528, 29546, 29555, 29587, 29588, 29739, 29748, 29757, 29960, 30112, 30113, 30116, 30729, 30736, 30757, 30807, 30832, 30902, 31058, 31568, 31570, 31571, 31584, 31625, 31627, 31857, 31858, 31859, 32514, 1, 23752, 23, 5432, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 1, 9960, 1, 4359, 3, 4620, 4621, 14407, 1, 26326, 2, 29392, 29426, 1, 7655, 1, 9287, 1, 12605, 1, 10565, 1, 30739, 1, 12921, 1, 9760, 2, 18819, 18820, 1, 4225, 1, 31139, 1, 24243, 1, 21874, 1, 25730, 5, 2242, 2243, 9000, 13963, 13964, 1, 22563, 2, 26807, 26809, 2, 30766, 31197, 1, 8245, 1, 91, 1, 25939, 1, 31969, 1, 22468, 1, 17299, 1, 9876, 1, 12792, 1, 12493, 1, 1893, 1, 26762, 11, 8703, 8763, 20099, 20100, 20101, 20103, 20108, 30955, 30956, 30957, 30958, 2, 22857, 29266, 2, 19342, 21682, 1, 25774, 1, 22692, 10, 1047, 1079, 6114, 13841, 17263, 17330, 17452, 17492, 18878, 18929, 6, 8232, 8233, 8234, 8235, 10907, 12146, 1, 32200, 1, 26004, 1, 18060, 22, 2084, 2212, 2426, 2510, 2599, 2676, 2766, 2864, 2953, 3237, 3524, 5942, 14298, 14592, 19212, 19525, 19636, 19807, 20164, 20523, 20963, 21024, 1, 1421, 1, 25280, 1, 10615, 1, 24083, 1, 29855, 17, 11023, 27026, 27027, 28920, 28921, 28922, 28923, 28924, 28925, 28926, 28927, 28930, 28931, 30540, 31010, 31011, 31012, 1, 7972, 2, 4561, 4562, 1, 21955, 4, 4272, 5081, 13061, 24611, 2, 24138, 24443, 1, 12351, 1, 18630, 1, 25873, 1, 26464, 1, 6202, 1, 30350, 1, 26186, 6, 716, 717, 7290, 18340, 30679, 31152, 1, 9787, 1, 9489, 1, 3306, 1, 15503, 1, 25038, 1, 16848, 1, 16895, 1, 26420, 1, 25472, 26, 3146, 3402, 4042, 4800, 4868, 4931, 5337, 10395, 10396, 10462, 10463, 10465, 10466, 11255, 11349, 11599, 11849, 13154, 13655, 14167, 14750, 14751, 16649, 16766, 18136, 24619, 88, 3551, 3552, 3553, 3554, 3586, 3587, 3588, 3622, 5953, 5954, 5955, 5957, 5958, 5959, 5960, 5961, 5962, 6196, 6197, 6198, 6207, 6208, 6275, 6276, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 10582, 14299, 14440, 14441, 14442, 14443, 14536, 14537, 14538, 14648, 14649, 14650, 14651, 14655, 14664, 14665, 20303, 20304, 20305, 20594, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 24707, 24708, 24709, 24710, 24711, 24712, 24713, 24714, 24715, 24716, 24717, 24718, 24719, 24720, 24721, 24722, 24723, 24724, 24725, 24726, 24972, 29444, 29445, 5, 20205, 20206, 20207, 20208, 30316, 1, 23210, 1, 25477, 2, 451, 453, 1, 29951, 2, 22415, 23491, 2, 13635, 29297, 8, 3240, 5426, 7293, 7963, 7964, 7965, 7966, 16279, 1, 4262, 1, 15047, 5, 8810, 8811, 30371, 30372, 30397, 1, 7258, 4, 28601, 28606, 28610, 28611, 1, 15375, 11, 3284, 3288, 3292, 3293, 3296, 3297, 3301, 3483, 20608, 20611, 20689, 1, 9801, 1, 25549, 1, 6501, 56, 895, 907, 929, 938, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7126, 7127, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7201, 7202, 7203, 7204, 7205, 7208, 7209, 7210, 27983, 28009, 28041, 28067, 28099, 28125, 28157, 28183, 28215, 28241, 1, 17368, 1, 23434, 1, 9418, 28, 17209, 17210, 17211, 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17221, 17222, 17223, 17224, 17225, 17226, 17227, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 1, 14464, 1, 31118, 1, 23164, 1, 4126, 1, 26165, 1, 12542, 1, 15340, 1, 9552, 1, 17346, 1, 24767, 1, 26338, 1, 31818, 1, 9583, 1, 22519, 1, 15240, 1, 24488, 1, 12416, 1, 7904, 45, 1533, 1603, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 2087, 2088, 2108, 15807, 15808, 15809, 15810, 15811, 15812, 15908, 15909, 15910, 15911, 15912, 15913, 15958, 15959, 15960, 15961, 15962, 16027, 16028, 16198, 16234, 16384, 16385, 16386, 16387, 18571, 29590, 29616, 29620, 29655, 29676, 29679, 29705, 2, 14776, 14780, 2, 22848, 29244, 1, 25023, 1, 17820, 1, 1453, 2, 22397, 23473, 1, 17730, 21, 3402, 4045, 4429, 5062, 11203, 11297, 11586, 11819, 12979, 13619, 14944, 16619, 16772, 18142, 21342, 21618, 21872, 21873, 22224, 22225, 29207, 1, 22299, 1, 29325, 2, 8007, 27279, 1, 12653, 1, 23349, 1, 9221, 1, 16737, 4, 4137, 4675, 4676, 16790, 3, 7832, 7942, 26874, 18, 4736, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 5111, 1, 9313, 1, 13232, 1, 31934, 199, 53, 440, 441, 1594, 1602, 1738, 1929, 2268, 2365, 2453, 2542, 2633, 2702, 2802, 2898, 3001, 3104, 3192, 3272, 3318, 3327, 3561, 3641, 4338, 5410, 5445, 5715, 5830, 5998, 6008, 6123, 6216, 6349, 6362, 7344, 7369, 7385, 7563, 7566, 7573, 7583, 7589, 7599, 7602, 8291, 8311, 8331, 8440, 8580, 8586, 9081, 9091, 9101, 10193, 10739, 11152, 11635, 11684, 11694, 11731, 11785, 11948, 12083, 13740, 14324, 14334, 14366, 14559, 14587, 14671, 15026, 16515, 16943, 16961, 16970, 16996, 16998, 16999, 17001, 17005, 17007, 17008, 17012, 17024, 17037, 17038, 17039, 17040, 17041, 17043, 17044, 17057, 17214, 17232, 17270, 17590, 18216, 18255, 18281, 18405, 18421, 18430, 18448, 18457, 18635, 18969, 19019, 19028, 19046, 19088, 19242, 19263, 19366, 19429, 19563, 19578, 19758, 19842, 19934, 20020, 20191, 20271, 20323, 20463, 20828, 20837, 20990, 21053, 22059, 22066, 22072, 22081, 22090, 22095, 22105, 22113, 22133, 22140, 22141, 22148, 22162, 24636, 24754, 24875, 27196, 27302, 27311, 27320, 27322, 28274, 28284, 28294, 28304, 28314, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28404, 28405, 28406, 28407, 28408, 29093, 29153, 29360, 29453, 29464, 29482, 29491, 29514, 29532, 29550, 29559, 29577, 29743, 29752, 29761, 29881, 29895, 29910, 29925, 29964, 30112, 30811, 31384, 31385, 31386, 31387, 31388, 31389, 31410, 31411, 32518, 1, 26179, 1, 6394, 1, 23608, 1, 31769, 1, 9678, 9, 8769, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 11753, 2, 13277, 24096, 1, 22681, 1, 24765, 2, 7848, 9915, 1, 5160, 1, 23220, 1, 30320, 1, 9291, 1, 23288, 1, 12687, 1, 7921, 1, 1715, 1, 25624, 1, 25109, 1, 25755, 1, 31739, 1, 3806, 1, 5596, 1, 15199, 49, 2079, 2192, 2315, 2408, 2492, 2581, 2665, 2747, 2845, 2933, 3210, 3354, 3429, 3503, 4578, 4959, 5551, 5569, 6354, 14232, 14275, 14502, 14503, 14686, 14788, 18481, 18978, 19189, 19292, 19455, 19507, 19613, 19669, 19716, 19789, 19875, 19968, 20049, 20141, 20229, 20354, 20500, 20563, 20637, 20778, 20940, 21022, 24909, 24911, 3, 30737, 30833, 30835, 1, 10923, 1, 23774, 6, 26782, 26783, 26784, 26785, 26786, 27190, 1, 1451, 1, 23017, 2, 1034, 1066, 1, 30411, 1, 32222, 3, 13861, 24227, 24559, 1, 26376, 1, 32004, 1, 26062, 1, 175, 1, 11885, 1, 23003, 397, 25047, 26101, 26102, 26103, 26104, 26105, 26106, 26107, 26108, 26109, 26110, 26111, 26112, 26113, 26114, 26115, 26116, 26117, 26118, 26119, 26120, 26121, 26122, 26123, 26124, 26125, 26126, 26127, 26128, 26129, 26130, 26131, 26132, 26133, 26134, 26135, 26136, 26137, 26138, 26139, 26140, 26141, 26142, 26143, 26144, 26145, 26146, 26147, 26148, 26149, 26150, 26151, 26152, 26153, 26154, 26155, 26156, 26157, 26158, 26159, 26160, 26161, 26162, 26163, 26164, 26165, 26166, 26167, 26168, 26169, 26170, 26171, 26172, 26173, 26174, 26175, 26176, 26177, 26178, 26179, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26187, 26188, 26189, 26190, 26191, 26192, 26193, 26194, 26195, 26196, 26197, 26198, 26199, 26200, 26201, 26202, 26203, 26204, 26205, 26206, 26207, 26208, 26209, 26210, 26211, 26212, 26213, 26214, 26215, 26216, 26217, 26218, 26219, 26220, 26221, 26222, 26223, 26224, 26225, 26226, 26227, 26228, 26229, 26230, 26231, 26232, 26233, 26234, 26235, 26236, 26237, 26238, 26239, 26240, 26241, 26242, 26243, 26244, 26245, 26246, 26247, 26248, 26249, 26250, 26251, 26252, 26253, 26254, 26255, 26256, 26257, 26258, 26259, 26260, 26261, 26262, 26263, 26264, 26265, 26266, 26267, 26268, 26269, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26279, 26280, 26281, 26282, 26283, 26284, 26285, 26286, 26287, 26288, 26289, 26290, 26291, 26292, 26293, 26294, 26295, 26296, 26297, 26298, 26299, 26300, 26301, 26302, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26310, 26311, 26312, 26313, 26314, 26315, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26323, 26324, 26325, 26326, 26327, 26328, 26329, 26330, 26331, 26332, 26333, 26334, 26335, 26336, 26337, 26338, 26339, 26340, 26341, 26342, 26343, 26344, 26345, 26346, 26347, 26348, 26349, 26350, 26351, 26352, 26353, 26354, 26355, 26356, 26357, 26358, 26359, 26360, 26361, 26362, 26363, 26364, 26365, 26366, 26367, 26368, 26369, 26370, 26371, 26372, 26373, 26374, 26375, 26376, 26377, 26378, 26379, 26380, 26381, 26382, 26383, 26384, 26385, 26386, 26387, 26388, 26389, 26390, 26391, 26392, 26393, 26394, 26395, 26396, 26397, 26398, 26399, 26400, 26401, 26402, 26403, 26404, 26405, 26406, 26407, 26408, 26409, 26410, 26411, 26412, 26413, 26414, 26415, 26416, 26417, 26418, 26419, 26420, 26421, 26422, 26423, 26424, 26425, 26426, 26427, 26428, 26429, 26430, 26431, 26432, 26433, 26434, 26435, 26436, 26437, 26438, 26439, 26440, 26441, 26442, 26443, 26444, 26445, 26446, 26447, 26448, 26449, 26450, 26451, 26452, 26453, 26454, 26455, 26456, 26457, 26458, 26459, 26460, 26461, 26462, 26463, 26464, 26465, 26466, 26467, 26468, 26469, 26470, 26471, 26472, 26473, 26474, 26475, 26476, 26477, 26478, 26479, 26480, 26481, 26482, 26483, 26484, 26485, 26486, 26487, 26488, 26489, 26490, 26491, 26492, 26493, 26494, 26495, 26496, 1, 25110, 2, 26954, 26988, 1, 32012, 2, 17912, 23858, 1, 29328, 1, 17811, 1, 12206, 1, 9455, 1, 13092, 2, 22853, 29251, 1, 4551, 17, 7668, 7669, 7670, 7671, 7715, 10032, 10113, 10114, 10115, 10116, 10129, 30727, 30728, 30729, 30730, 30731, 30943, 1, 13297, 2, 11383, 14656, 1, 15331, 1, 22818, 1, 24136, 1, 15185, 1, 24745, 1, 8831, 1014, 15113, 15114, 15115, 15116, 15117, 15118, 15119, 15120, 15121, 15122, 15123, 15124, 15125, 15126, 15127, 15128, 15129, 15130, 15131, 15132, 15133, 15134, 15135, 15136, 15137, 15138, 15139, 15140, 15141, 15142, 15143, 15144, 15145, 15146, 15147, 15148, 15149, 15150, 15151, 15152, 15153, 15154, 15155, 15156, 15157, 15158, 15159, 15160, 15161, 15162, 15163, 15164, 15165, 15166, 15167, 15168, 15169, 15170, 15171, 15172, 15173, 15174, 15175, 15176, 15177, 15178, 15179, 15180, 15181, 15182, 15183, 15184, 15185, 15186, 15187, 15188, 15189, 15190, 15191, 15192, 15193, 15194, 15195, 15196, 15197, 15198, 15199, 15200, 15201, 15202, 15203, 15204, 15205, 15206, 15207, 15208, 15209, 15210, 15211, 15212, 15213, 15214, 15215, 15216, 15217, 15218, 15219, 15220, 15221, 15222, 15223, 15224, 15225, 15226, 15227, 15228, 15229, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15240, 15241, 15242, 15243, 15244, 15245, 15246, 15247, 15248, 15249, 15250, 15251, 15252, 15253, 15254, 15255, 15256, 15257, 15258, 15259, 15260, 15261, 15262, 15263, 15264, 15265, 15266, 15267, 15268, 15269, 15270, 15271, 15272, 15273, 15274, 15275, 15276, 15277, 15278, 15279, 15280, 15281, 15282, 15283, 15284, 15285, 15286, 15287, 15288, 15289, 15290, 15291, 15292, 15293, 15294, 15295, 15296, 15297, 15298, 15299, 15300, 15301, 15302, 15303, 15304, 15305, 15306, 15307, 15308, 15309, 15310, 15311, 15312, 15313, 15314, 15315, 15316, 15317, 15318, 15319, 15320, 15321, 15322, 15323, 15324, 15325, 15326, 15327, 15328, 15329, 15330, 15331, 15332, 15333, 15334, 15335, 15336, 15337, 15338, 15339, 15340, 15341, 15342, 15343, 15344, 15345, 15346, 15347, 15348, 15349, 15350, 15351, 15352, 15353, 15354, 15355, 15356, 15357, 15358, 15359, 15360, 15361, 15362, 15363, 15364, 15365, 15366, 15367, 15368, 15369, 15370, 15371, 15372, 15373, 15374, 15375, 15376, 15377, 15378, 15379, 15380, 15381, 15382, 15383, 15384, 15385, 15386, 15387, 15388, 15389, 15390, 15391, 15392, 15393, 15394, 15395, 15396, 15397, 15398, 15399, 15400, 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15410, 15411, 15412, 15413, 15414, 15415, 15416, 15417, 15418, 15419, 15420, 15421, 15422, 15423, 15424, 15425, 15426, 15427, 15428, 15429, 15430, 15431, 15432, 15433, 15434, 15435, 15436, 15437, 15438, 15439, 15440, 15441, 15442, 15443, 15444, 15445, 15446, 15447, 15448, 15449, 15450, 15451, 15452, 15453, 15454, 15455, 15456, 15457, 15458, 15459, 15460, 15461, 15462, 15463, 15464, 15465, 15466, 15467, 15468, 15469, 15470, 15471, 15472, 15473, 15474, 15475, 15476, 15477, 15478, 15479, 15480, 15481, 15482, 15483, 15484, 15485, 15486, 15487, 15488, 15489, 15490, 15491, 15492, 15493, 15494, 15495, 15496, 15497, 15498, 15499, 15500, 15501, 15502, 15503, 15504, 15505, 15506, 15507, 15508, 15509, 15510, 15511, 15512, 15513, 15514, 15515, 15516, 15517, 15518, 15519, 15520, 15521, 15522, 15523, 15524, 15525, 15526, 15527, 15528, 15529, 15530, 15531, 15532, 15533, 15534, 15535, 15536, 15537, 15538, 15539, 15540, 15541, 15542, 15543, 15544, 15545, 15546, 15547, 15548, 15549, 15550, 15551, 15552, 15553, 15554, 15555, 15556, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15564, 15565, 15566, 15567, 15568, 15569, 15570, 15571, 15572, 15573, 15574, 15575, 15576, 15577, 15578, 15579, 15580, 15581, 15582, 15583, 15584, 31954, 31955, 31956, 31957, 31958, 31959, 31960, 31961, 31962, 31963, 31964, 31965, 31966, 31967, 31968, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31976, 31977, 31978, 31979, 31980, 31981, 31982, 31983, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31992, 31993, 31994, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32010, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32032, 32033, 32034, 32035, 32036, 32037, 32038, 32039, 32040, 32041, 32042, 32043, 32044, 32045, 32046, 32047, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32110, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32119, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32166, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32174, 32175, 32176, 32177, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32187, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32315, 32316, 32317, 32318, 32319, 32320, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32386, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32411, 32412, 32413, 32414, 32415, 32416, 32417, 32418, 32419, 32420, 32421, 32422, 32423, 32424, 32425, 32426, 32427, 32428, 32429, 32430, 32431, 32432, 32433, 32434, 32435, 32436, 32437, 32438, 32439, 32440, 32441, 32442, 32443, 32444, 32445, 32446, 32447, 32448, 32449, 32450, 32451, 32452, 32453, 32454, 32455, 32456, 32457, 32458, 32459, 32460, 32461, 32462, 32463, 32464, 32465, 32466, 32467, 32468, 32469, 32470, 32471, 32472, 32473, 32474, 32475, 32476, 32477, 32478, 32479, 32480, 32481, 32482, 32483, 32484, 32485, 32486, 32487, 32488, 32489, 32490, 32491, 32492, 32493, 32494, 32495, 1, 31781, 1, 25178, 1, 23281, 1, 24117, 1, 24268, 1, 29946, 11, 3119, 3120, 3121, 3123, 4277, 5082, 5319, 13054, 14150, 14724, 14725, 1, 32462, 2, 30732, 30733, 1, 25879, 1, 17786, 1, 9872, 1, 12555, 15, 21242, 21313, 21526, 21622, 21740, 21765, 21782, 21808, 21919, 21951, 21952, 21953, 22017, 22290, 22309, 1, 30978, 1, 8212, 1, 1921, 1, 4165, 1, 13068, 1, 13576, 1, 8857, 1, 10609, 1, 24717, 3, 10255, 10302, 29010, 1, 9310, 1, 26845, 1, 23226, 1, 12125, 257, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288, 9289, 9290, 9291, 9292, 9293, 9294, 9295, 9296, 9297, 9298, 9299, 9300, 9301, 9302, 9303, 9304, 9305, 9306, 9307, 9308, 9309, 9310, 9311, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 27263, 3, 11404, 11977, 24997, 1, 26432, 1, 3031, 1, 7860, 1, 10543, 1, 18348, 1, 25077, 1, 24922, 25, 28851, 28852, 28853, 28856, 28857, 28858, 28859, 30535, 30984, 30987, 30989, 30993, 30996, 31008, 31009, 31012, 31039, 31042, 31044, 31051, 31626, 31630, 31697, 31700, 31703, 1, 5123, 7, 1575, 1922, 2030, 2550, 16367, 16368, 19655, 1, 4610, 2, 22422, 23497, 1, 26024, 2, 7518, 27594, 10, 28621, 28623, 28625, 28628, 28630, 28680, 28682, 28684, 28687, 28689, 1, 31000, 1, 13108, 1, 32482, 1, 13059, 2, 3307, 3310, 6, 17024, 17025, 17026, 17031, 17032, 17038, 1, 4120, 1, 32243, 1, 23530, 2, 444, 5651, 2, 8019, 8024, 5, 6262, 13530, 14427, 24123, 29307, 3, 1403, 1404, 27269, 3, 27062, 27063, 27064, 28, 1454, 1486, 1791, 3676, 3716, 6438, 10508, 15610, 15611, 15612, 15613, 15636, 17358, 18176, 18208, 18247, 18248, 18278, 18305, 18537, 18629, 18727, 18754, 18780, 19080, 19112, 19116, 19157, 1, 27099, 1, 22943, 1, 12410, 1, 9219, 15, 1117, 1118, 1119, 1120, 9719, 9720, 10275, 10276, 10322, 10323, 10692, 10693, 10925, 29026, 29027, 5, 20601, 20669, 20670, 20671, 20672, 6, 21164, 21293, 21486, 21611, 22190, 22215, 1, 31182, 1, 12599, 2, 3308, 3311, 2, 26847, 26851, 2, 26992, 26995, 1, 10572, 1, 31811, 1, 2351, 1, 15379, 1, 12514, 8, 30541, 30542, 30543, 30544, 30883, 30884, 30889, 30890, 1, 32205, 256, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288, 9289, 9290, 9291, 9292, 9293, 9294, 9295, 9296, 9297, 9298, 9299, 9300, 9301, 9302, 9303, 9304, 9305, 9306, 9307, 9308, 9309, 9310, 9311, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 1, 3991, 464, 10413, 10414, 10423, 10424, 10429, 10430, 10431, 10432, 10437, 10438, 10439, 10440, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452, 10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10477, 10478, 10479, 10480, 10830, 11013, 17237, 17238, 17239, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17273, 17274, 17275, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17313, 17314, 17315, 17316, 17317, 17318, 17319, 17320, 17321, 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17332, 17333, 17334, 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, 17345, 17377, 17378, 17379, 17380, 17381, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17391, 17392, 17393, 17394, 17395, 17396, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17414, 17415, 17416, 17417, 17418, 17419, 17420, 17421, 17422, 17423, 17424, 17425, 17426, 18531, 18532, 18533, 18534, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18546, 18547, 18548, 18549, 18550, 18551, 18552, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18560, 18561, 18562, 18563, 18564, 18565, 18566, 18567, 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18576, 18577, 18578, 18579, 18580, 18581, 18582, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18592, 18593, 18594, 18793, 18794, 18795, 18796, 18797, 18798, 18799, 18800, 18801, 18802, 18803, 18804, 18805, 18806, 18807, 18808, 18809, 18810, 18811, 18812, 18813, 18814, 18815, 18816, 18817, 18818, 18819, 18820, 18821, 18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830, 18831, 18832, 18833, 18834, 18835, 18836, 18837, 18838, 18839, 18840, 18841, 18842, 18843, 18844, 18845, 18846, 18847, 18848, 18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857, 18858, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 18866, 18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875, 18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920, 18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929, 18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938, 18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 19055, 19056, 19057, 19058, 19059, 19060, 19061, 19062, 19063, 19064, 19065, 19066, 19067, 19068, 19069, 19070, 19071, 19072, 19073, 19074, 19075, 19076, 19077, 19078, 19079, 19080, 19081, 19082, 19083, 19084, 19085, 19086, 19087, 19088, 19089, 19090, 19091, 19092, 19093, 19094, 19213, 19214, 19215, 22153, 22154, 22167, 24361, 25048, 25049, 30906, 30948, 1, 7831, 2, 13138, 13386, 1, 1760, 1, 30356, 1, 9934, 2, 1332, 1378, 1, 25639, 3, 10243, 10290, 28998, 1, 10194, 1, 24469, 4, 4440, 5029, 14955, 29058, 2, 30853, 30854, 2, 294, 295, 1, 17729, 1, 18055, 13, 21844, 21845, 21846, 21847, 21848, 21849, 21850, 21851, 21852, 21853, 21854, 21855, 22243, 1, 28982, 2, 9608, 9609, 1, 22642, 1, 9465, 5, 1657, 15669, 15670, 15671, 15672, 4, 10409, 10410, 10423, 10424, 4, 10027, 10028, 10029, 10030, 1, 30407, 2, 1050, 1082, 1, 23192, 1, 30582, 1, 32256, 3, 7737, 7960, 7962, 1, 29208, 1, 12064, 1, 8250, 1, 10942, 1, 12863, 1, 23684, 2, 18997, 18999, 1, 12865, 1, 23398, 1, 24070, 1, 3817, 1, 14470, 1, 30302, 1, 12648, 1, 6069, 3, 13667, 29284, 29289, 1, 9411, 7, 9523, 9524, 9525, 9526, 10077, 10078, 28734, 1, 16880, 8, 542, 543, 6532, 6572, 11396, 25017, 26588, 26875, 1, 23883, 1, 26381, 1, 22676, 1, 30366, 1, 32780, 1, 31607, 1, 25093, 1, 9285, 64, 6019, 6503, 7531, 8728, 9060, 9062, 10184, 10186, 20197, 20201, 20202, 22049, 22245, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31859, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31901, 31905, 31906, 31907, 78, 880, 881, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, 7604, 7606, 7607, 7608, 7609, 11148, 11149, 11150, 11151, 11152, 11153, 11154, 11155, 11156, 11171, 11172, 11173, 17269, 17270, 17271, 17272, 27191, 27192, 27193, 27194, 27195, 27196, 27197, 27198, 27199, 27200, 27201, 27202, 27203, 27204, 27205, 27206, 27207, 27208, 27209, 27210, 1, 26846, 21, 2048, 18802, 18803, 21144, 21145, 21146, 21147, 21148, 21149, 21150, 21151, 21152, 21153, 21154, 21155, 21212, 21775, 22014, 22172, 22173, 30094, 1, 26441, 2, 5057, 14824, 5, 8724, 8807, 12812, 30260, 30269, 29, 180, 195, 227, 286, 287, 306, 307, 311, 312, 321, 322, 338, 339, 346, 347, 350, 351, 548, 549, 803, 6726, 6774, 6775, 6782, 6783, 6794, 6795, 6806, 6807, 1, 25598, 1, 25862, 1, 11134, 3, 14356, 19570, 20541, 1, 12581, 1, 11551, 82, 1504, 2707, 3006, 4343, 4353, 7304, 7578, 7594, 7603, 8296, 8316, 8336, 8445, 9086, 9096, 9106, 10912, 11171, 11640, 11671, 11736, 11953, 12088, 13795, 13917, 16948, 16975, 17002, 17009, 17014, 17016, 17025, 17026, 17027, 17028, 17029, 17219, 17271, 17424, 18182, 18186, 18217, 18256, 18282, 18308, 18410, 18435, 18462, 18517, 18593, 18636, 18733, 18760, 18790, 18970, 19033, 19089, 19129, 19247, 19583, 20328, 20468, 20842, 24543, 24761, 24764, 24880, 27201, 29369, 29469, 29496, 29526, 29537, 29564, 29582, 29586, 29886, 29900, 29915, 29930, 30758, 30816, 1, 20965, 9, 10774, 11164, 11165, 11166, 11167, 11168, 26896, 26897, 26898, 1, 25766, 1, 4294, 1, 29158, 5, 10812, 10981, 16825, 30475, 30517, 1, 6714, 1, 31179, 1, 32168, 1, 31120, 1, 6205, 1, 31712, 5, 30667, 31594, 31595, 31596, 31597, 2, 17877, 23816, 1, 26302, 1, 29274, 1, 25272, 1, 30565, 1, 32051, 2, 4404, 14919, 1, 19010, 2, 189, 221, 1, 26102, 1, 18688, 1, 25231, 1, 30446, 1, 26748, 1, 15419, 2, 17941, 24003, 6, 8003, 10187, 28838, 28839, 28840, 31790, 1, 32085, 107, 1058, 1090, 1962, 2208, 2283, 2330, 2423, 2507, 2596, 2672, 2762, 2860, 2949, 3377, 3452, 3462, 3518, 3551, 3839, 4210, 4459, 4773, 5003, 5242, 5262, 5285, 5305, 5374, 5472, 5503, 5578, 5673, 5692, 5725, 5765, 5768, 5886, 5931, 5932, 6086, 6189, 6254, 6255, 6309, 6319, 10524, 11245, 11246, 11339, 11340, 11443, 11842, 13427, 13552, 13877, 14214, 14231, 14236, 14290, 14388, 14424, 14517, 14631, 14648, 14974, 16602, 16642, 16687, 17339, 17402, 17576, 18345, 18377, 18496, 18998, 18999, 19204, 19309, 19522, 19630, 19685, 19734, 19804, 19892, 19983, 20064, 20156, 20244, 20369, 20398, 20430, 20515, 20585, 20602, 20658, 20793, 20877, 20906, 20955, 21005, 21070, 24572, 29053, 29106, 29243, 29390, 29424, 1, 13103, 3, 4260, 12731, 18667, 70, 19371, 19372, 19373, 19374, 19375, 19376, 19377, 19378, 19379, 19380, 19381, 19382, 19383, 19384, 19385, 19386, 19387, 19388, 19389, 19390, 19391, 19392, 19393, 19394, 19395, 19396, 19397, 19398, 19399, 19400, 19401, 19402, 19403, 19404, 19405, 19406, 19407, 19408, 19409, 19410, 19411, 19412, 19413, 19414, 19415, 19416, 19417, 19418, 19419, 19420, 19421, 19422, 19423, 19424, 19425, 19426, 19427, 19428, 19429, 19430, 19431, 19432, 19433, 19434, 19435, 19436, 19437, 19438, 19439, 19440, 1, 26719, 1, 22547, 1, 25653, 1, 25950, 1, 29257, 1, 4079, 1, 15341, 1, 22596, 1, 23330, 1, 1514, 5, 1886, 4266, 4831, 4901, 19394, 1, 5138, 1, 15265, 1, 14467, 1, 25469, 1, 26382, 1, 13920, 1, 32475, 1, 32826, 1, 4943, 1, 10232, 1, 25135, 1, 7909, 2, 17948, 24011, 1, 27280, 1, 30171, 1, 30621, 96, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31859, 31860, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31901, 31902, 31903, 31904, 31905, 31906, 31907, 31908, 31909, 31910, 31911, 31912, 31913, 2, 17887, 23832, 1, 26138, 1, 24148, 1, 32601, 1, 25915, 1, 32821, 11, 8753, 10808, 10974, 11642, 11738, 12142, 30764, 31129, 31211, 31223, 31813, 1, 26916, 1, 31661, 1, 23118, 3, 9131, 31582, 31583, 1, 19344, 2, 1052, 1084, 7, 1148, 13795, 13796, 13797, 24762, 24763, 29371, 7, 26610, 26611, 26612, 26613, 26614, 26615, 26616, 3, 26834, 26841, 26842, 1, 32067, 5, 1749, 3735, 4333, 7296, 9056, 1, 2056, 3, 3069, 3070, 3072, 1, 7681, 5, 4524, 4525, 13565, 29304, 30640, 1, 31968, 1, 5192, 4, 31006, 31008, 31009, 31044, 1, 31772, 1, 13234, 1, 24092, 2, 17884, 23826, 4, 8463, 8532, 8533, 8534, 1, 12838, 530, 830, 831, 832, 833, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 6549, 6550, 6551, 6552, 6553, 6605, 6607, 6613, 6614, 6615, 6616, 6617, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225, 7226, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7514, 8984, 8985, 14892, 16993, 16994, 16995, 16996, 16997, 16998, 16999, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 17016, 17017, 17018, 17019, 17020, 17021, 17022, 17023, 17024, 17025, 17026, 17027, 17028, 17029, 17030, 17031, 17032, 17033, 17034, 17035, 17036, 17037, 17038, 17039, 17040, 17041, 17042, 17043, 17044, 17045, 17046, 17047, 17048, 17049, 17050, 17051, 17052, 17053, 17054, 17055, 17056, 17057, 17058, 17059, 17060, 17061, 17062, 17063, 17064, 17065, 17066, 17067, 17068, 17069, 17070, 17084, 27121, 27122, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27166, 27167, 27168, 27169, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 27187, 27188, 27189, 27190, 31370, 31371, 31372, 31373, 31374, 31375, 31376, 1, 32330, 1, 25551, 2, 16754, 22450, 1, 12063, 1, 22631, 1, 16746, 1, 7980, 1, 9302, 1, 26174, 1, 3818, 1, 13722, 117, 24272, 24273, 24274, 24275, 24276, 24277, 24278, 24279, 24280, 24281, 24282, 24283, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24296, 24297, 24298, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24308, 24309, 24310, 24311, 24312, 24313, 24314, 24315, 24316, 24317, 24318, 24319, 24320, 24321, 24322, 24323, 24324, 24325, 24326, 24327, 24328, 24329, 24330, 24331, 24332, 24333, 24334, 24335, 24336, 24337, 24338, 24339, 24340, 24341, 24342, 24343, 24344, 24345, 24346, 24347, 24348, 24349, 24350, 24351, 24352, 24353, 24354, 24355, 24356, 24357, 24358, 24359, 24360, 24361, 24362, 24363, 24364, 24365, 24366, 24367, 24368, 24369, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24377, 24378, 24379, 24380, 24381, 24382, 24383, 24384, 24385, 24386, 24387, 24388, 1, 12586, 1, 22508, 6, 8107, 8244, 30747, 30748, 30836, 31189, 32, 18341, 18342, 18343, 18344, 18345, 18346, 18347, 18348, 18349, 18350, 18351, 18352, 18353, 18354, 18355, 18356, 18357, 18358, 18359, 18360, 18361, 18362, 18363, 18364, 18365, 18366, 18367, 18368, 18369, 18370, 18371, 18372, 3, 10799, 10954, 13148, 1, 17749, 1, 6014, 1, 24769, 1, 12938, 1, 24320, 1, 18506, 1, 11920, 1, 6132, 1, 31218, 1, 15099, 9, 8304, 8324, 8344, 8433, 11961, 12096, 24888, 27209, 30757, 8, 94, 10445, 10446, 12804, 30384, 30553, 31617, 31699, 1, 21103, 2, 288, 289, 7, 22135, 22136, 22137, 22138, 22139, 22140, 22141, 1, 8748, 1, 25552, 1, 3859, 1, 3979, 1, 8594, 1, 25100, 1, 185, 1, 25601, 1, 26124, 3, 8113, 9758, 9789, 2, 10625, 12915, 1, 23176, 1, 18048, 1, 8636, 1, 15217, 1, 23155, 1, 25216, 1, 11118, 1, 7912, 1, 25920, 1, 9460, 1, 23549, 1, 4031, 1, 18100, 68, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 1, 23766, 2, 17876, 23815, 2, 8735, 30840, 1, 17813, 2, 373, 374, 1, 8978, 3, 5422, 5845, 5861, 1, 8204, 1, 8236, 1, 15046, 2, 4888, 5034, 1, 9235, 1, 30197, 3, 7613, 7627, 7677, 1, 12565, 1, 3289, 1, 25540, 1, 16921, 1, 7433, 1, 9402, 1, 23269, 1, 2072, 2, 13580, 29225, 2, 26993, 26996, 58, 20698, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20710, 20711, 20712, 20713, 20714, 20715, 20716, 20717, 20718, 20719, 20720, 20721, 20722, 20723, 20724, 20725, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20733, 20734, 20735, 20736, 20737, 20738, 20739, 20740, 20741, 20742, 20743, 20744, 20745, 20746, 20747, 20748, 20749, 20750, 20751, 20752, 20753, 20754, 24710, 1, 30404, 9, 30466, 30467, 30468, 30469, 30470, 31752, 31753, 31754, 31755, 1, 24350, 1, 6024, 1, 7807, 1, 22759, 150, 54, 384, 385, 1595, 1739, 1930, 2269, 2366, 2454, 2543, 2634, 2703, 2803, 2899, 3002, 3105, 3193, 3273, 3319, 3328, 3562, 3642, 4339, 5411, 5446, 5716, 5831, 5999, 6009, 6124, 6217, 6350, 6363, 7370, 7386, 7574, 7590, 7606, 8292, 8312, 8332, 8441, 9013, 9021, 9082, 9092, 9102, 10755, 11153, 11636, 11685, 11732, 11776, 11786, 11949, 12084, 12957, 13741, 14325, 14335, 14367, 14560, 14588, 14672, 15027, 16516, 16944, 16962, 16971, 17215, 17233, 17591, 18406, 18422, 18431, 18449, 18458, 19020, 19029, 19047, 19243, 19264, 19367, 19430, 19564, 19579, 19759, 19843, 19935, 20021, 20192, 20272, 20324, 20464, 20829, 20838, 20991, 21054, 22060, 22067, 22073, 22082, 22096, 22120, 22134, 22163, 24637, 24755, 24876, 27197, 27303, 27312, 28275, 28285, 28295, 28305, 28315, 29094, 29154, 29361, 29454, 29465, 29483, 29492, 29515, 29533, 29551, 29560, 29578, 29584, 29744, 29753, 29762, 29882, 29896, 29911, 29926, 29965, 30774, 30812, 31390, 31391, 31392, 31393, 31394, 31395, 31412, 31413, 31414, 32519, 9, 7736, 7738, 7904, 7906, 7975, 7976, 7977, 7978, 7979, 2, 31163, 31164, 1, 32202, 1, 12137, 1, 28990, 1, 32262, 1, 22680, 2, 1714, 2131, 1, 25793, 1, 32625, 1, 22962, 1, 32662, 38, 1346, 1392, 1542, 1639, 1640, 1641, 1642, 1643, 1644, 1646, 1732, 1837, 1853, 1854, 1859, 2097, 2111, 15894, 15902, 15908, 15914, 15920, 15940, 15947, 16071, 16072, 16073, 16074, 16099, 16100, 16101, 16102, 16414, 16415, 18570, 29607, 29696, 29721, 1, 2035, 5, 5225, 5226, 5227, 5228, 5229, 1, 29333, 13, 2241, 2532, 2695, 3281, 11538, 14358, 19548, 19828, 19922, 20014, 20477, 21047, 30800, 2, 20408, 20440, 1, 17779, 2, 1038, 1070, 1, 18605, 1, 11870, 1, 23315, 1, 26008, 1, 9555, 1, 25359, 1, 19012, 4, 7980, 9156, 9157, 30647, 2, 24098, 24244, 3, 9121, 10131, 10133, 1, 32443, 2, 7617, 7681, 1, 18099, 1, 24042, 1, 23370, 1, 3959, 1, 22641, 1, 25938, 1, 13261, 18, 7709, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28806, 28807, 28808, 28809, 28810, 28811, 28814, 28815, 28818, 28819, 1, 3902, 1, 9879, 2, 9159, 9160, 2, 1824, 18613, 2, 1405, 31335, 1, 28956, 2, 18869, 18920, 1, 7888, 1, 24190, 1, 22874, 1, 7861, 2, 11102, 17125, 1, 23891, 1, 23817, 1, 26471, 3, 3761, 3938, 11464, 1, 26042, 2, 24263, 24509, 10, 8722, 8924, 10072, 31377, 31378, 31379, 31380, 31381, 31382, 31383, 1, 9459, 10, 1019, 1099, 4239, 5007, 13703, 16736, 17681, 18092, 18670, 29238, 47, 2382, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 19831, 19832, 19942, 1, 4173, 4, 45, 16346, 16507, 32510, 1, 16928, 1, 32346, 1, 31655, 1, 31978, 1, 22558, 1, 31127, 2, 28879, 30582, 1, 7794, 2, 1020, 1100, 1, 9318, 3, 27240, 30985, 31040, 1, 15459, 1, 12778, 2, 7299, 7359, 1, 31125, 1, 9577, 583, 23448, 23449, 23450, 23451, 23452, 23453, 23454, 23455, 23456, 23457, 23458, 23459, 23460, 23461, 23462, 23463, 23464, 23465, 23466, 23467, 23468, 23469, 23470, 23471, 23472, 23473, 23474, 23475, 23476, 23477, 23478, 23479, 23480, 23481, 23482, 23483, 23484, 23485, 23486, 23487, 23488, 23489, 23490, 23491, 23492, 23493, 23494, 23495, 23496, 23497, 23498, 23499, 23500, 23501, 23502, 23503, 23504, 23505, 23506, 23507, 23508, 23509, 23510, 23511, 23512, 23513, 23514, 23515, 23516, 23517, 23518, 23519, 23520, 23521, 23522, 23523, 23524, 23525, 23526, 23527, 23528, 23529, 23530, 23531, 23532, 23533, 23534, 23535, 23536, 23537, 23538, 23539, 23540, 23541, 23542, 23543, 23544, 23545, 23546, 23547, 23548, 23549, 23550, 23551, 23552, 23553, 23554, 23555, 23556, 23557, 23558, 23559, 23560, 23561, 23562, 23563, 23564, 23565, 23566, 23567, 23568, 23569, 23570, 23571, 23572, 23573, 23574, 23575, 23576, 23577, 23578, 23579, 23580, 23581, 23582, 23583, 23584, 23585, 23586, 23587, 23588, 23589, 23590, 23591, 23592, 23593, 23594, 23595, 23596, 23597, 23598, 23599, 23600, 23601, 23602, 23603, 23604, 23605, 23606, 23607, 23608, 23609, 23610, 23611, 23612, 23613, 23614, 23615, 23616, 23617, 23618, 23619, 23620, 23621, 23622, 23623, 23624, 23625, 23626, 23627, 23628, 23629, 23630, 23631, 23632, 23633, 23634, 23635, 23636, 23637, 23638, 23639, 23640, 23641, 23642, 23643, 23644, 23645, 23646, 23647, 23648, 23649, 23650, 23651, 23652, 23653, 23654, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23662, 23663, 23664, 23665, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23673, 23674, 23675, 23676, 23677, 23678, 23679, 23680, 23681, 23682, 23683, 23684, 23685, 23686, 23687, 23688, 23689, 23690, 23691, 23692, 23693, 23694, 23695, 23696, 23697, 23698, 23699, 23700, 23701, 23702, 23703, 23704, 23705, 23706, 23707, 23708, 23709, 23710, 23711, 23712, 23713, 23714, 23715, 23716, 23717, 23718, 23719, 23720, 23721, 23722, 23723, 23724, 23725, 23726, 23727, 23728, 23729, 23730, 23731, 23732, 23733, 23734, 23735, 23736, 23737, 23738, 23739, 23740, 23741, 23742, 23743, 23744, 23745, 23746, 23747, 23748, 23749, 23750, 23751, 23752, 23753, 23754, 23755, 23756, 23757, 23758, 23759, 23760, 23761, 23762, 23763, 23764, 23765, 23766, 23767, 23768, 23769, 23770, 23771, 23772, 23773, 23774, 23775, 23776, 23777, 23778, 23779, 23780, 23781, 23782, 23783, 23784, 23785, 23786, 23787, 23788, 23789, 23790, 23791, 23792, 23793, 23794, 23795, 23796, 23797, 23798, 23799, 23800, 23801, 23802, 23803, 23804, 23805, 23806, 23807, 23808, 23809, 23810, 23811, 23812, 23813, 23814, 23815, 23816, 23817, 23818, 23819, 23820, 23821, 23822, 23823, 23824, 23825, 23826, 23827, 23828, 23829, 23830, 23831, 23832, 23833, 23834, 23835, 23836, 23837, 23838, 23839, 23840, 23841, 23842, 23843, 23844, 23845, 23846, 23847, 23848, 23849, 23850, 23851, 23852, 23853, 23854, 23855, 23856, 23857, 23858, 23859, 23860, 23861, 23862, 23863, 23864, 23865, 23866, 23867, 23868, 23869, 23870, 23871, 23872, 23873, 23874, 23875, 23876, 23877, 23878, 23879, 23880, 23881, 23882, 23883, 23884, 23885, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23895, 23896, 23897, 23898, 23899, 23900, 23901, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23911, 23912, 23913, 23914, 23915, 23916, 23917, 23918, 23919, 23920, 23921, 23922, 23923, 23924, 23925, 23926, 23927, 23928, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23936, 23937, 23938, 23939, 23940, 23941, 23942, 23943, 23944, 23945, 23946, 23947, 23948, 23949, 23950, 23951, 23952, 23953, 23954, 23955, 23956, 23957, 23958, 23959, 23960, 23961, 23962, 23963, 23964, 23965, 23966, 23967, 23968, 23969, 23970, 23971, 23972, 23973, 23974, 23975, 23976, 23977, 23978, 23979, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23988, 23989, 23990, 23991, 23992, 23993, 23994, 23995, 23996, 23997, 23998, 23999, 24000, 24001, 24002, 24003, 24004, 24005, 24006, 24007, 24008, 24009, 24010, 24011, 24012, 24013, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24024, 24025, 24026, 24027, 24028, 24029, 24030, 1, 12782, 1, 8129, 1, 6152, 1, 18626, 1, 9612, 1, 308, 26, 1295, 1296, 3687, 3727, 3852, 4184, 4454, 4484, 4485, 4908, 4938, 6449, 10519, 11259, 11353, 11456, 11852, 12830, 13677, 14969, 16700, 16779, 18149, 26095, 26098, 29171, 1, 12034, 1, 29280, 1, 6376, 2, 1013, 1093, 1, 26352, 1, 7490, 1, 17770, 2, 202, 234, 1, 31185, 1, 17734, 1, 17841, 1, 7303, 1, 30865, 1, 31244, 4, 3832, 3912, 11415, 16659, 1, 32199, 1, 5391, 1, 32827, 1, 24278, 1, 17790, 2, 22379, 23456, 1, 9812, 1, 9789, 60, 60, 7825, 7827, 7829, 7831, 7835, 7837, 7839, 7841, 7843, 7844, 7845, 7846, 7939, 7941, 7943, 7944, 7945, 7955, 8048, 9589, 9590, 9618, 9621, 9663, 9848, 9850, 9852, 9854, 9856, 9858, 9860, 9862, 9864, 9866, 9867, 9868, 9870, 9871, 9872, 9873, 9874, 9875, 9876, 9878, 9880, 9882, 9884, 9886, 9888, 9890, 9891, 9892, 9893, 9895, 9974, 9976, 16347, 16522, 32525, 1, 32752, 98, 24174, 24175, 24176, 24177, 24178, 24179, 24180, 24181, 24182, 24183, 24184, 24185, 24186, 24187, 24188, 24189, 24190, 24191, 24192, 24193, 24194, 24195, 24196, 24197, 24198, 24199, 24200, 24201, 24202, 24203, 24204, 24205, 24206, 24207, 24208, 24209, 24210, 24211, 24212, 24213, 24214, 24215, 24216, 24217, 24218, 24219, 24220, 24221, 24222, 24223, 24224, 24225, 24226, 24227, 24228, 24229, 24230, 24231, 24232, 24233, 24234, 24235, 24236, 24237, 24238, 24239, 24240, 24241, 24242, 24243, 24244, 24245, 24246, 24247, 24248, 24249, 24250, 24251, 24252, 24253, 24254, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24265, 24266, 24267, 24268, 24269, 24270, 24271, 1, 23325, 1, 31605, 1, 31056, 1, 3901, 4, 1403, 3486, 3488, 31613, 3, 10781, 10904, 30426, 34, 4135, 4413, 4664, 4912, 4988, 7821, 11223, 11317, 11830, 12578, 13712, 14928, 16630, 16750, 17686, 18124, 18353, 18383, 18683, 21238, 21512, 21609, 21658, 21718, 21719, 21720, 21721, 21734, 21763, 21824, 22233, 22240, 22241, 22242, 1, 1432, 4, 4306, 4818, 13727, 24388, 3, 30458, 30459, 30546, 1, 12375, 1, 16762, 17, 421, 422, 639, 641, 642, 6650, 6663, 6691, 6750, 10431, 10432, 14868, 17251, 17458, 17498, 18858, 18859, 2, 1018, 1098, 1, 23695, 1, 15485, 3, 6383, 20409, 20441, 1, 12551, 5, 14050, 21910, 22358, 22359, 24457, 1, 25548, 1, 28951, 1, 23361, 1, 9852, 1, 15134, 1, 11030, 1, 14537, 1, 23736, 2, 26918, 26919, 1, 14810, 1, 18682, 1, 9146, 1, 9545, 1, 32269, 1, 12762, 1, 32237, 1, 7560, 3, 21673, 22205, 22238, 1, 30559, 1, 13016, 1, 10771, 1, 22506, 1, 32082, 1, 25220, 1, 25409, 1, 22620, 1, 32120, 1, 26304, 1, 1903, 1, 16853, 162, 8760, 8761, 8762, 11064, 11147, 28838, 28839, 28840, 30241, 30242, 30243, 30244, 30245, 30259, 30516, 30517, 30518, 30519, 30520, 30521, 30523, 30524, 30525, 30526, 30527, 30528, 30529, 30530, 30531, 30605, 30807, 30808, 30809, 30810, 30811, 30812, 30813, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30826, 30827, 30828, 30829, 30830, 30983, 30984, 30985, 30986, 30987, 30988, 30989, 30990, 30991, 30992, 30993, 30994, 30995, 30996, 30997, 30998, 30999, 31000, 31001, 31002, 31003, 31004, 31005, 31006, 31007, 31008, 31009, 31010, 31011, 31012, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31028, 31029, 31030, 31031, 31032, 31033, 31034, 31035, 31036, 31037, 31038, 31039, 31040, 31041, 31042, 31043, 31044, 31045, 31046, 31047, 31048, 31049, 31050, 31051, 31052, 31053, 31061, 31601, 31602, 31603, 31604, 31605, 31606, 31607, 31608, 31617, 31618, 31619, 31621, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31629, 31630, 31631, 31632, 31697, 31698, 31699, 31700, 31701, 31702, 31703, 31710, 31713, 31719, 31727, 31728, 31782, 2, 1022, 1102, 1, 12344, 1, 25896, 1, 30330, 1, 22780, 13, 7848, 7850, 7852, 7902, 7948, 7958, 9903, 9905, 9907, 9909, 9911, 9913, 9915, 1, 7267, 1, 23432, 1, 26492, 60, 1602, 7816, 7923, 8076, 8080, 8708, 8709, 8745, 8860, 8992, 8997, 8998, 9000, 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9011, 9012, 9013, 9014, 9015, 9016, 9025, 10063, 10064, 10065, 10211, 10212, 10213, 10214, 18639, 30246, 30247, 30774, 31401, 31402, 31403, 31404, 31405, 31406, 31407, 31408, 31409, 31410, 31411, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31626, 1, 7811, 2, 20423, 20455, 1, 32396, 2, 15031, 15032, 1, 26239, 2, 2250, 2443, 1, 4370, 1, 25947, 1, 15141, 1, 32001, 1, 23265, 1, 12880, 1, 11092, 1, 32655, 2, 4474, 14797, 9, 21297, 21298, 21310, 21353, 21578, 21632, 21633, 22040, 22221, 2, 197, 229, 1, 18065, 1, 23244, 4, 3677, 3717, 6439, 10509, 5, 4062, 4855, 5348, 13201, 16761, 4, 13965, 13966, 13967, 13968, 1, 32808, 1, 1429, 1, 8928, 1, 11800, 2, 14179, 20095, 1, 25891, 1, 30392, 2, 19891, 24902, 2, 32833, 32834, 1, 24099, 1, 4076, 1, 16798, 1, 8747, 1, 7948, 1, 10597, 1, 23901, 2, 7900, 9693, 1, 18093, 1, 18037, 1, 12610, 3, 21455, 21780, 24746, 1, 29178, 1, 26384, 1, 31282, 2, 24269, 31821, 1, 22638, 1, 16933, 1, 17112, 1, 8012, 19, 9471, 9472, 9476, 9487, 9493, 9494, 9495, 9544, 10035, 10036, 10037, 10038, 10042, 10043, 10044, 10215, 10216, 10217, 10218, 1, 12658, 1, 9744, 1, 25263, 2, 194, 226, 1, 25916, 1, 23971, 1, 31644, 11, 1002, 1003, 4058, 4747, 4881, 5069, 13127, 13659, 13897, 24530, 24584, 1, 30104, 2, 3788, 3973, 38, 833, 884, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7186, 7187, 7188, 7190, 7201, 7202, 7203, 7205, 7243, 7244, 7245, 7247, 2, 7494, 27650, 1, 5025, 1, 13237, 1, 17529, 1, 8852, 1, 23986, 1, 24165, 1, 32463, 3, 8802, 8806, 17097, 2, 16749, 22454, 3, 12134, 27036, 27037, 1, 13204, 1, 7521, 1, 25189, 2, 26820, 26839, 4, 17054, 17055, 17056, 17057, 1, 30823, 1, 12615, 1, 18066, 1, 25346, 1, 5117, 1, 12768, 1, 13687, 1, 25558, 1, 7648, 1, 12167, 1, 24924, 25, 7856, 7858, 7860, 7862, 7864, 7934, 9155, 9160, 9594, 9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 9935, 9937, 9938, 9939, 9941, 9942, 9943, 10051, 6, 5174, 5226, 6378, 6719, 14039, 14040, 2, 24116, 24267, 2, 8115, 10899, 11, 9056, 9488, 9817, 9818, 10039, 26989, 26990, 27116, 27117, 27118, 27119, 147, 2172, 2173, 2228, 2229, 2257, 2258, 2259, 2260, 2299, 2300, 2344, 2345, 2356, 2357, 2358, 2359, 2474, 2475, 2523, 2524, 2533, 2534, 2535, 2536, 2565, 2566, 2612, 2613, 2624, 2625, 2626, 2627, 2729, 2730, 2779, 2780, 2793, 2794, 2795, 2796, 2827, 2828, 2877, 2878, 2889, 2890, 2891, 2892, 2915, 2916, 2969, 2970, 2992, 2993, 2994, 2995, 3394, 3395, 3396, 3397, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 14255, 14256, 14257, 14258, 14305, 14306, 14307, 14308, 18466, 19171, 19172, 19173, 19174, 19222, 19223, 19224, 19225, 19489, 19490, 19491, 19492, 19536, 19537, 19538, 19539, 19773, 19774, 19821, 19822, 19833, 19834, 19835, 19836, 19855, 19856, 19857, 19858, 19907, 19908, 19909, 19910, 19950, 19951, 19952, 19953, 19996, 19997, 19998, 19999, 20031, 20032, 20033, 20034, 20077, 20078, 20123, 20124, 20125, 20126, 20170, 20171, 20172, 20173, 20383, 20384, 20484, 20485, 20530, 20531, 20624, 20625, 20761, 20762, 20763, 20806, 20807, 20808, 20972, 26603, 4, 8015, 28896, 28897, 28898, 25, 7855, 7857, 7859, 7861, 7863, 7933, 9154, 9159, 9592, 9593, 9916, 9918, 9920, 9922, 9924, 9926, 9928, 9930, 9934, 9936, 9938, 9939, 9940, 9942, 9943, 1, 13326, 1, 7880, 1, 30648, 1, 17987, 1, 16253, 144, 162, 406, 569, 576, 645, 737, 738, 739, 740, 741, 1852, 2093, 2961, 6693, 7276, 7493, 7633, 7634, 7635, 7636, 7653, 7654, 7697, 7698, 7703, 7705, 7706, 7895, 7896, 7900, 7968, 7969, 7976, 7977, 8044, 8045, 8087, 8118, 8218, 8219, 8220, 8229, 9047, 9048, 9049, 9161, 9210, 9211, 9212, 9213, 9476, 9477, 9478, 9489, 9490, 9502, 9503, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9599, 9652, 9653, 9657, 9678, 9679, 9693, 9799, 9800, 9831, 9832, 9953, 9954, 9955, 9956, 9971, 9972, 9979, 9981, 9982, 10037, 10095, 10096, 10097, 10098, 10099, 10100, 10101, 10102, 10163, 10329, 10330, 10726, 10727, 11971, 13939, 13940, 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 13954, 13956, 13989, 13990, 14077, 14078, 14870, 15751, 16710, 18509, 18525, 19236, 20092, 21205, 21326, 21484, 21960, 24972, 30322, 30673, 31826, 1, 9398, 1, 22992, 1, 11991, 2, 24184, 24349, 1, 23416, 1, 4839, 1, 24049, 1, 23145, 5, 7937, 8278, 8279, 30331, 30340, 2, 1044, 1076, 1, 12606, 1, 13614, 1, 23123, 1, 23163, 1, 7887, 2, 1441, 15597, 1, 26173, 1, 25923, 6, 14085, 14086, 14087, 14088, 14089, 14090, 14, 1727, 1728, 7730, 9647, 9648, 9649, 9650, 9651, 30924, 30925, 30926, 30930, 30931, 30932, 1, 12608, 1, 12364, 1, 4249, 1, 15395, 10, 14045, 15019, 21237, 21675, 21676, 21677, 21802, 21972, 22033, 24317, 1, 25936, 2, 27214, 27215, 3, 3910, 11413, 16657, 1, 25374, 2, 7486, 27644, 1, 9241, 2, 14041, 14042, 1, 32141, 1, 13225, 2, 22399, 23476, 1, 9939, 3, 10794, 10795, 10946, 1, 22704, 1, 26874, 4, 4000, 4526, 13449, 29266, 1, 12050, 3, 7847, 9914, 12073, 134, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 15597, 15598, 15599, 15600, 15601, 15602, 15603, 15604, 15605, 15606, 15607, 15608, 15609, 15610, 15611, 15612, 15613, 15614, 15615, 15616, 15617, 15618, 15619, 15620, 15621, 15622, 15623, 15624, 15625, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, 15635, 15636, 15637, 15638, 15639, 15640, 15641, 15642, 1, 4252, 1, 23489, 1, 22737, 1, 16850, 3, 3097, 3098, 3110, 1, 25577, 1, 32681, 1, 24519, 22, 3160, 3179, 3180, 3181, 3182, 3242, 3252, 3261, 3262, 3263, 3264, 5956, 5965, 5983, 5990, 6020, 14760, 14767, 14775, 14776, 14777, 14778, 1, 32135, 1, 21118, 4, 28435, 28436, 28507, 28526, 1, 4870, 1, 12869, 2, 14551, 14552, 1, 12805, 2, 27622, 27642, 4, 1133, 1134, 30676, 31348, 9, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28812, 28813, 1, 6469, 1, 22630, 3, 2256, 2355, 2623, 4, 14135, 27071, 27081, 27082, 1, 15252, 2, 1525, 6484, 40, 2378, 4268, 4822, 4823, 4883, 4895, 4950, 7474, 7805, 7807, 8019, 8024, 9665, 9666, 9747, 12113, 12114, 12115, 12119, 12130, 12141, 12142, 12148, 12149, 12160, 12162, 12163, 12164, 12166, 12168, 12169, 12170, 13691, 17245, 17697, 18672, 27294, 30363, 31609, 31620, 3, 4369, 4530, 4531, 13, 2791, 3371, 3446, 5061, 5510, 6308, 13411, 14209, 20580, 20654, 20872, 20902, 24953, 1, 25928, 1, 26074, 1, 4029, 1, 25722, 4, 10183, 10184, 10185, 10186, 1, 9464, 1, 23678, 1, 7636, 1, 32014, 16, 1819, 1820, 9637, 9638, 10717, 14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 14100, 17130, 15, 12112, 12178, 15032, 15106, 15108, 15110, 15112, 25051, 31945, 31947, 31949, 31951, 31953, 32834, 32836, 1, 11176, 1, 31747, 4, 6724, 13983, 13984, 18648, 1, 11931, 1, 12726, 2, 1023, 1103, 2, 4423, 14938, 1, 9283, 1, 9377, 1, 30980, 1, 9214, 3, 8900, 30252, 30253, 1, 24774, 1, 23902, 3, 27087, 27088, 27089, 1, 31014, 1, 22771, 19, 1666, 4681, 4877, 5817, 6275, 11406, 13714, 14440, 14654, 14655, 15757, 15758, 15759, 15760, 17196, 20675, 20733, 25019, 30102, 1, 30939, 3, 3921, 11425, 16669, 1, 4365, 2, 9014, 9015, 2, 31308, 31309, 1, 12262, 1, 23382, 1, 2462, 2, 10936, 12130, 2, 22380, 23457, 1, 23052, 1, 12559, 1, 23124, 4, 31087, 31088, 31089, 31090, 1, 15114, 1, 26782, 2, 13747, 13748, 1, 26088, 1, 21247, 1, 11895, 1, 25420, 1, 17920, 2, 1271, 1272, 1, 7430, 1, 12489, 1, 17728, 2, 334, 335, 1, 29812, 1, 9127, 1, 11794, 1, 12316, 1, 24742, 1, 27012, 5, 6738, 14021, 14022, 14023, 14024, 1, 30215, 4, 8467, 8535, 8536, 8537, 1, 4209, 3, 10062, 10074, 10076, 1, 30830, 1, 18035, 2, 4667, 13725, 8, 8908, 8911, 17725, 30421, 31114, 31122, 31130, 31131, 1, 24131, 1, 25441, 1, 30346, 1, 7959, 10, 1825, 4308, 4811, 5141, 13688, 17676, 18547, 18623, 18677, 29253, 1, 30218, 3, 8116, 15600, 15609, 1, 26283, 1, 22914, 1, 1826, 1, 32806, 1, 23635, 1, 27292, 1, 30314, 51, 1534, 1535, 1617, 1618, 1688, 2110, 15813, 15814, 15815, 15816, 15817, 15818, 15914, 15915, 15916, 15917, 15918, 15919, 15963, 15964, 15965, 15966, 15967, 16029, 16030, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16199, 16200, 16201, 16202, 16203, 16204, 16388, 16389, 16390, 16391, 16392, 16393, 18572, 29609, 29635, 29670, 29698, 29723, 30, 34, 167, 183, 7279, 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7312, 7313, 9050, 9051, 9052, 9053, 9054, 9055, 9069, 9070, 10760, 11144, 11145, 11146, 16496, 31101, 31102, 31103, 32499, 1, 29808, 1, 32003, 1, 15316, 1, 8034, 26, 18259, 18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18268, 18269, 18270, 18271, 18272, 18273, 18274, 18275, 18276, 18277, 18278, 18279, 18280, 18281, 18282, 18283, 18284, 1, 25850, 1, 32422, 2, 18849, 18850, 1, 9525, 32, 184, 2640, 3009, 8577, 8589, 8764, 8765, 8808, 14181, 14187, 16993, 17068, 19052, 21099, 22152, 22154, 22155, 26938, 26939, 26949, 26983, 27116, 27117, 28711, 28712, 28713, 28714, 29520, 30234, 30238, 30242, 30243, 1, 25917, 1, 9462, 2, 9898, 9900, 1, 18023, 1, 22300, 1, 25285, 1, 23219, 1, 12169, 1, 22619, 1, 25997, 2, 8623, 8624, 1, 22599, 1, 31030, 1, 16794, 1, 23362, 8, 1289, 1290, 2254, 2354, 2622, 19297, 19692, 19894, 1, 32695, 1, 26143, 1, 31242, 5, 5585, 8916, 8917, 8918, 30227, 1, 30773, 2, 3876, 11499, 1, 32232, 1, 12308, 1, 16729, 4, 28328, 28470, 28494, 28519, 1, 9294, 1, 9616, 1, 28949, 8, 4634, 4834, 4887, 4902, 5110, 6633, 17140, 26514, 1, 11024, 1, 25214, 1, 9571, 1, 31703, 1, 25972, 1, 1982, 1, 21557, 1, 12614, 1, 22542, 1, 12550, 1, 32303, 1, 7796, 1, 7663, 2, 7421, 12686, 1, 15482, 1, 22983, 1, 32685, 6, 21365, 21520, 21806, 21841, 21842, 21843, 1, 10944, 1, 32089, 6, 4105, 9945, 13461, 17446, 17486, 29230, 1, 12460, 5, 28715, 28716, 28717, 28718, 30792, 1, 7793, 1, 31025, 9, 8236, 10816, 10997, 28854, 28855, 28860, 30536, 31011, 31627, 1, 23359, 1, 23957, 2, 21534, 21651, 1, 26457, 2, 206, 238, 3, 21388, 21389, 22246, 3, 12588, 24768, 24769, 1, 5184, 1, 16839, 1, 12894, 6, 2057, 18886, 18937, 21163, 21164, 21165, 2, 7771, 7772, 4, 1121, 1122, 10389, 10390, 53, 2204, 2326, 2419, 2503, 2592, 2758, 2856, 2945, 3365, 3440, 3514, 3617, 4279, 5332, 5558, 5669, 5730, 5776, 5779, 5925, 5929, 6299, 13401, 14204, 14286, 14383, 14625, 18492, 19200, 19305, 19466, 19518, 19625, 19681, 19729, 19800, 19887, 19979, 20060, 20152, 20240, 20283, 20365, 20511, 20574, 20648, 20715, 20789, 20867, 20897, 20951, 21031, 29107, 1, 6484, 1, 31637, 1, 6099, 1, 10564, 1, 24125, 1, 9359, 1, 12709, 1, 23380, 1, 23820, 1, 26119, 1, 22634, 27, 28387, 28388, 28389, 28390, 28391, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 1, 15116, 1, 25833, 2, 13919, 24598, 1, 14800, 1, 29310, 1, 15091, 1, 26358, 1, 7322, 1, 15584, 1, 29509, 1, 25689, 1, 31964, 1, 30828, 1, 12771, 1, 25434, 1, 10205, 1, 32155, 8, 30959, 30960, 30963, 30964, 30965, 30966, 30967, 30968, 1, 13570, 1, 17805, 1, 25258, 1, 23263, 5, 1659, 15673, 15674, 15675, 15676, 9, 4315, 4963, 13452, 13885, 17444, 17484, 24377, 24577, 29302, 1, 22741, 1, 3155, 1, 23156, 6, 3535, 5967, 6409, 6411, 6412, 11077, 1, 25152, 1, 16925, 1, 26697, 1, 14484, 1, 24057, 1, 23170, 1, 7566, 1, 3935, 2, 4274, 19384, 74, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 1, 22880, 1, 24047, 2, 12371, 13356, 1, 13645, 8, 3601, 3629, 3635, 5753, 5988, 14709, 25036, 25043, 1, 25575, 1, 6067, 1, 32034, 1, 9286, 3, 21450, 21603, 21640, 80, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2, 17622, 17658, 2, 5836, 5951, 1, 25333, 3, 27073, 27074, 27084, 3, 5644, 5649, 5650, 2, 8196, 27187, 2, 8739, 31301, 53, 22049, 22245, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31859, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31901, 31905, 31906, 31907, 2, 31058, 31059, 1, 4127, 1, 9335, 1, 21206, 1, 3134, 1, 29253, 2, 7459, 30758, 1, 12933, 1, 27054, 1, 31262, 1, 1434, 2, 200, 232, 1, 15528, 1, 25523, 2, 1036, 1068, 1, 15360, 1, 24133, 1, 29329, 1, 23996, 1, 5036, 1, 14986, 3, 24173, 24230, 24239, 1, 32063, 1, 12147, 1, 26467, 3, 9184, 9185, 9186, 1, 25329, 1, 7920, 3, 5914, 5916, 5959, 60, 21152, 21547, 21548, 21574, 21575, 21576, 21577, 21578, 21579, 21580, 21581, 21582, 21583, 21584, 21585, 21586, 21587, 21588, 21589, 21590, 21591, 21592, 21593, 21594, 21595, 21596, 21597, 21598, 21599, 21600, 21601, 21602, 21603, 21604, 21605, 21606, 21607, 21608, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21617, 21618, 21619, 21620, 21621, 21622, 21623, 21624, 21625, 21656, 21816, 21932, 22038, 22256, 1, 15192, 32, 756, 5629, 8969, 8970, 10700, 10701, 10705, 10706, 10707, 10745, 10746, 13958, 13959, 13960, 13961, 28328, 28336, 28470, 28494, 28501, 28519, 28577, 30061, 30062, 30063, 30706, 30707, 30871, 30872, 30877, 31611, 31625, 4, 16891, 30915, 30916, 30917, 1, 25797, 385, 8164, 10774, 10775, 10776, 10777, 10778, 10779, 10780, 10781, 10782, 10783, 10784, 10785, 10786, 10787, 10788, 10789, 10790, 10791, 10792, 10793, 10794, 10795, 10796, 10797, 10798, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10810, 10811, 10812, 10813, 10814, 10815, 10816, 10817, 10818, 10819, 10820, 10821, 10822, 10823, 10824, 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, 10836, 10837, 10838, 10839, 10840, 10841, 10842, 10843, 10844, 10845, 10846, 10847, 10848, 10849, 10850, 10851, 10852, 10853, 10854, 10855, 10856, 10857, 10858, 10859, 10860, 10861, 10862, 10863, 10864, 10865, 10866, 10867, 10868, 10869, 10870, 10871, 10872, 10873, 10874, 10875, 10876, 10877, 10878, 10879, 10880, 10881, 10882, 10883, 10884, 10885, 10886, 10887, 10888, 10889, 10890, 10891, 10892, 10893, 10894, 10895, 10896, 10897, 10898, 10899, 10900, 10901, 10902, 10903, 10904, 10905, 10906, 10907, 10908, 10909, 10910, 10911, 10912, 10913, 10914, 10915, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10930, 10931, 10932, 10933, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941, 10942, 10943, 10944, 10945, 10946, 10947, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10956, 10957, 10958, 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969, 10970, 10971, 10972, 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984, 10985, 10986, 10987, 10988, 10989, 10990, 10991, 10992, 10993, 10994, 10995, 10996, 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11004, 11005, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, 11015, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, 11025, 11026, 11027, 11028, 11029, 11030, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11045, 11046, 11047, 11048, 11049, 11050, 11051, 11052, 11053, 11054, 11055, 11056, 11057, 11058, 11059, 11060, 11061, 11062, 11063, 11064, 11065, 11066, 11067, 11068, 11069, 11070, 11071, 11072, 11073, 11074, 11075, 11076, 11077, 11078, 11079, 11080, 11081, 11082, 11083, 11084, 11085, 11086, 11087, 11088, 11089, 11090, 11091, 11092, 11093, 11094, 11095, 11096, 11097, 11098, 11099, 11100, 11101, 11102, 13344, 13345, 13346, 13347, 13348, 13349, 13350, 13351, 13352, 13353, 13354, 13355, 13356, 13357, 13358, 13359, 13360, 13361, 13362, 13363, 13364, 13365, 13366, 13367, 13368, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378, 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387, 13388, 13389, 13390, 13391, 13392, 13393, 13394, 13395, 13396, 13397, 13398, 1, 26188, 1, 5600, 1, 12942, 1, 12984, 1, 29831, 1, 13168, 1, 26331, 2, 3252, 14779, 1, 30183, 1, 9250, 1, 11916, 1, 12623, 3, 4571, 4572, 4573, 7, 8993, 9018, 9019, 9020, 9026, 9033, 9034, 1, 10588, 1, 11859, 1, 12384, 1, 25554, 1, 31666, 35, 61, 835, 7376, 7392, 7809, 7810, 7816, 7881, 7930, 9584, 9698, 9699, 9829, 9837, 9840, 9841, 9842, 9844, 9845, 9846, 9886, 9887, 9901, 9902, 9903, 9906, 9907, 9924, 9925, 10047, 10228, 14069, 16349, 16523, 32526, 1, 13601, 1, 7836, 1, 25586, 3, 8994, 8995, 9032, 1, 11004, 4, 10381, 10382, 10417, 10418, 57, 20698, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20710, 20711, 20712, 20713, 20714, 20715, 20716, 20717, 20718, 20719, 20720, 20721, 20722, 20723, 20724, 20725, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20733, 20734, 20735, 20736, 20737, 20738, 20739, 20740, 20741, 20742, 20743, 20744, 20745, 20746, 20747, 20748, 20749, 20750, 20751, 20752, 20753, 20754, 1, 9487, 1, 23049, 1, 24272, 1, 9696, 1, 7272, 1, 11923, 1, 18578, 1, 10683, 1, 24096, 1, 26486, 1, 7259, 1, 8914, 1, 26063, 1, 24421, 110, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 19574, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19582, 19583, 19584, 19585, 19586, 19587, 19588, 19589, 19590, 19591, 19592, 19593, 19, 410, 540, 620, 630, 632, 6684, 7943, 9866, 14861, 14869, 14870, 14878, 14879, 14880, 14881, 17112, 30302, 31757, 31767, 3, 10927, 17089, 31784, 1, 7727, 8, 11131, 11132, 11137, 11138, 16277, 16278, 16307, 16308, 90, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 8815, 8816, 1, 25416, 1, 26427, 3, 3769, 3966, 11475, 2, 10710, 10711, 1, 5382, 1, 15515, 1, 26077, 2, 60, 7831, 1, 25483, 1, 4278, 1, 7647, 1, 12785, 2, 22439, 23516, 1, 29869, 2, 30309, 31671, 1, 32045, 1, 10589, 1, 23584, 2, 17904, 23849, 1, 25876, 1, 9739, 1, 25461, 1, 31705, 2, 3886, 11501, 1, 26043, 6, 14128, 14132, 14133, 14134, 14135, 14136, 1, 16713, 8, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 5, 27090, 27091, 27092, 27093, 27094, 1, 19423, 2, 8124, 8125, 1, 3282, 1, 17830, 1, 25757, 1, 32419, 2, 7802, 9797, 2, 8844, 8845, 1, 25980, 1, 17111, 9, 10871, 11075, 30375, 30414, 30485, 30523, 31307, 31917, 31924, 1, 23916, 7, 31249, 31253, 31254, 31262, 31263, 31264, 31283, 1, 30819, 1, 8162, 1, 25221, 1, 3883, 1, 16917, 1, 25778, 6, 6407, 7302, 31466, 31467, 31468, 31469, 1, 15269, 1, 26332, 1, 26687, 1, 18039, 1, 13200, 1, 30977, 1, 5166, 1, 17996, 87, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 1, 23044, 1, 12183, 9, 26515, 26518, 26563, 26573, 26575, 26585, 26600, 26601, 26602, 2, 13569, 29323, 1, 7352, 1, 31230, 1, 1762, 1, 8858, 1, 30332, 1, 31812, 1, 5173, 1, 7427, 2, 26803, 26805, 1, 25454, 1, 13152, 1, 26198, 1, 16881, 1, 32228, 1, 6013, 8, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 1, 14807, 8, 3742, 3911, 11414, 11601, 11615, 11696, 11710, 16658, 1, 9417, 1, 24764, 1, 14840, 5, 26777, 26852, 26856, 26862, 26863, 1, 1984, 1, 23264, 2, 10626, 12912, 1, 9354, 1, 23561, 1, 13149, 1, 12642, 6, 21362, 21495, 21517, 21818, 22353, 22366, 1, 23645, 3, 10815, 10991, 16852, 1, 12271, 1, 9554, 1, 12672, 1, 5404, 1, 26141, 1, 3121, 1, 9585, 3, 973, 974, 26876, 1, 22000, 1, 23227, 8, 1703, 1704, 1868, 1869, 15737, 15738, 15739, 15740, 1, 7616, 1, 32351, 2, 27578, 27602, 1, 22949, 1, 32441, 102, 842, 1828, 1829, 1834, 1843, 1846, 7614, 7628, 7634, 7645, 7646, 7657, 7659, 7660, 7661, 7666, 7669, 7678, 7691, 7694, 7700, 7703, 7704, 7705, 7706, 7707, 7708, 7714, 8060, 8061, 9125, 9169, 9199, 9480, 9481, 9489, 9523, 9544, 9555, 9559, 9563, 9567, 9570, 9581, 9582, 9989, 9998, 10000, 10080, 10090, 10096, 10104, 10110, 10112, 10114, 10118, 10132, 10136, 10141, 10142, 10143, 10144, 10149, 10150, 10151, 10152, 10163, 10216, 10715, 16715, 30656, 30671, 30730, 30731, 30756, 31092, 31439, 31443, 31447, 31451, 31455, 31459, 31463, 31467, 31471, 31475, 31479, 31483, 31487, 31491, 31495, 31499, 31503, 31507, 31517, 31525, 31533, 31541, 31549, 31557, 31561, 31565, 1, 3181, 5, 2904, 6506, 19164, 19547, 20668, 1, 15416, 2, 3759, 3937, 3, 30414, 30420, 30421, 1, 32785, 1, 31213, 2, 5849, 5865, 1, 11088, 1, 25691, 1, 24143, 1, 8035, 1, 25607, 4, 14023, 14024, 14048, 14049, 1, 32694, 40, 570, 2370, 2371, 6922, 7965, 7966, 8560, 8561, 8562, 8616, 8680, 8681, 8925, 9162, 9164, 9514, 9515, 9518, 9519, 9667, 9668, 10003, 10004, 10335, 13997, 13998, 13999, 14000, 14019, 14020, 14025, 14026, 22169, 22170, 22171, 28541, 28566, 28755, 28756, 28757, 1, 4176, 1, 26380, 1, 9224, 2, 27580, 27604, 1, 6077, 1, 12119, 3, 3946, 11468, 14452, 1, 9448, 4, 3748, 11429, 15083, 16673, 1, 22929, 1, 31651, 1, 27262, 1, 13091, 2, 1456, 2045, 1, 32787, 4, 6036, 6037, 6748, 6751, 2, 3885, 11500, 15, 7526, 18156, 18187, 18219, 18220, 18259, 18595, 18707, 18737, 18764, 19055, 19056, 19095, 19137, 21176, 1, 6028, 2, 8821, 30468, 4, 2645, 3014, 14186, 21097, 1, 15040, 1, 22788, 1, 24089, 1, 26434, 2, 5363, 5364, 4, 5956, 5983, 6336, 14760, 1, 32212, 1, 12184, 1, 21101, 2, 21428, 21498, 1, 24705, 1, 12630, 2, 7863, 9930, 1, 7558, 1, 10928, 1, 29783, 1, 31027, 1, 24145, 1, 30342, 2, 18352, 25934, 1, 29299, 1, 23914, 1, 23308, 1, 25183, 1, 29166, 1, 18606, 2, 22825, 29221, 1, 26041, 1, 30272, 1, 17314, 1, 22791, 7, 3670, 3710, 6432, 10502, 21524, 21897, 22307, 1, 25382, 2, 26868, 26872, 1, 30721, 1, 3472, 1, 24202, 1, 32615, 1, 32052, 1, 16862, 1, 25157, 2, 17945, 24008, 1, 22899, 1, 4903, 48, 4344, 8306, 8326, 8346, 8435, 11172, 11672, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11687, 11688, 11963, 12098, 16949, 16976, 17220, 17425, 18183, 18218, 18257, 18283, 18309, 18411, 18436, 18518, 18594, 18637, 18734, 18761, 18791, 19034, 19090, 19130, 19248, 19584, 20329, 20469, 20843, 29470, 29497, 29538, 29565, 30116, 4, 13874, 24513, 24514, 24570, 1, 3150, 2, 1039, 1071, 4, 3657, 3697, 6419, 10489, 1, 22265, 1, 19159, 1, 15246, 1, 11980, 1, 9668, 1, 15428, 1, 21115, 1, 29305, 1, 16926, 1, 4331, 1, 7808, 1, 23428, 1, 9702, 1, 9393, 1, 15328, 174, 704, 720, 748, 793, 850, 6756, 7335, 7618, 7637, 7682, 7712, 7890, 7965, 7984, 8017, 8062, 8064, 8066, 8074, 8078, 8095, 8175, 8178, 8181, 8183, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8477, 8478, 8480, 8481, 8485, 8486, 8488, 8489, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8511, 8512, 8514, 8515, 8516, 8517, 8518, 8519, 8535, 8536, 8537, 8538, 8539, 8540, 8550, 8551, 8552, 8558, 8559, 8564, 8568, 8572, 8574, 8732, 9175, 9182, 9545, 9546, 9547, 9548, 9549, 9550, 9552, 9553, 9554, 9561, 9562, 9569, 9571, 9573, 9575, 9577, 9579, 9597, 9632, 9637, 9639, 9640, 9643, 9644, 9660, 9951, 9959, 9960, 9962, 9996, 10084, 10157, 10158, 10159, 10160, 10164, 13958, 17542, 26643, 26932, 26934, 26936, 26960, 26961, 26968, 26969, 27019, 27042, 27059, 27063, 27065, 27117, 27119, 28338, 28339, 28355, 28356, 28357, 28358, 28367, 28368, 28373, 28374, 28375, 28377, 28378, 28379, 28383, 28385, 28465, 28466, 28467, 28468, 28469, 28493, 28517, 28518, 28520, 28608, 28609, 28610, 28612, 28613, 28839, 28840, 28841, 28846, 28847, 28861, 30105, 30541, 30548, 30667, 30873, 30885, 30887, 30889, 31515, 31635, 1, 32828, 32, 166, 182, 8003, 10187, 11177, 18562, 30125, 30126, 30127, 30128, 30129, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 1, 3987, 2, 26708, 26831, 1, 5149, 2, 1281, 1282, 1, 12955, 1, 4302, 12, 6408, 6760, 7465, 15601, 15602, 15603, 15604, 15605, 15606, 15607, 15608, 28857, 1, 14825, 1, 7977, 1, 12477, 1, 12224, 3, 13811, 13812, 16788, 2, 1764, 1765, 1, 12743, 1, 24707, 1, 32190, 1, 22574, 3, 8128, 10478, 30390, 1, 15291, 1, 24679, 2, 30629, 31151, 3, 9484, 9486, 9487, 1, 31765, 1, 26172, 1, 13134, 2, 12149, 30577, 1, 29790, 3, 3843, 11447, 16691, 1, 25288, 1, 23679, 1, 15163, 1, 13262, 1, 23539, 1, 17825, 1, 12773, 1, 24510, 2, 17614, 17650, 1, 30399, 3, 17020, 17023, 17037, 4, 3589, 3590, 3591, 3592, 6, 30688, 30781, 30783, 31426, 31433, 31799, 1, 26225, 1, 24150, 1, 7869, 1, 8999, 1, 17837, 2, 31038, 31648, 26, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31568, 31569, 31570, 31571, 31584, 31585, 2, 17608, 17644, 1, 1759, 1, 28464, 1, 15327, 2, 27137, 27160, 1, 2815, 1, 14486, 2, 27631, 27656, 1, 23685, 2, 22401, 23478, 1, 32426, 1, 8032, 1, 32215, 1, 23332, 1, 31740, 22, 400, 607, 732, 903, 934, 6549, 6605, 6614, 7534, 7535, 10365, 10366, 27979, 28005, 28037, 28063, 28095, 28121, 28153, 28179, 28211, 28237, 3, 3961, 11473, 14463, 4, 14871, 14872, 25028, 26571, 1, 22490, 2, 28854, 28855, 1, 25970, 1, 22703, 1, 18558, 1, 32657, 1, 23874, 1, 15154, 1, 15293, 17, 7496, 11068, 11165, 11167, 11265, 11266, 11267, 11268, 11364, 16606, 16652, 16653, 30736, 30737, 30832, 30833, 30835, 1, 7677, 1, 7835, 13, 8989, 9007, 9036, 9040, 9041, 9130, 9131, 30789, 30790, 31580, 31581, 31582, 31583, 4, 26921, 26925, 26942, 26944, 1, 30368, 1, 13265, 1, 15065, 1, 7496, 1, 17799, 1, 12985, 1, 23708, 1, 7886, 1, 28860, 1, 9522, 1, 15549, 1, 12356, 3, 13568, 29312, 29316, 1, 25190, 3, 1052, 1084, 10681, 45, 264, 265, 266, 267, 278, 279, 313, 314, 323, 324, 340, 341, 348, 349, 352, 353, 377, 378, 448, 449, 450, 457, 458, 459, 460, 461, 462, 463, 464, 469, 470, 482, 483, 484, 485, 490, 491, 492, 538, 539, 707, 776, 808, 6868, 6869, 1, 12935, 1, 28945, 2, 5016, 13229, 1, 8120, 1, 23203, 1, 3863, 1, 28986, 1, 17760, 1, 12035, 2, 7632, 9493, 22, 10821, 10842, 10845, 10846, 10848, 10853, 10856, 10857, 10862, 10863, 10864, 10865, 10869, 10871, 10874, 10875, 10876, 10879, 10881, 10883, 10885, 10888, 1, 12952, 1, 1901, 8, 7895, 7896, 7900, 9177, 9953, 9954, 9955, 9956, 1, 29057, 1, 13065, 2, 13646, 29331, 1, 23094, 11, 8892, 8952, 30304, 30353, 30405, 30422, 30424, 30426, 30773, 31662, 31820, 4, 15107, 15108, 15111, 15112, 1, 22545, 2, 11644, 11740, 1, 13540, 1, 22517, 4, 26680, 26750, 26771, 26888, 1, 27100, 1, 25719, 1, 25971, 43, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17313, 17314, 17315, 17316, 17317, 17318, 17319, 17320, 17321, 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17332, 17333, 17334, 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, 17345, 1, 18016, 1, 17053, 16, 7445, 7449, 7652, 7656, 7774, 7775, 9202, 9527, 9531, 9533, 9536, 10093, 30728, 30729, 30730, 30943, 2, 19868, 24933, 1, 23430, 1, 18006, 1, 31022, 1, 12925, 1, 25870, 1, 23119, 1, 26730, 1, 31974, 1, 23255, 1, 3053, 1, 30440, 95, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3197, 3198, 7319, 11103, 11104, 11105, 11106, 11107, 11108, 11109, 11110, 11111, 11112, 11113, 11114, 11629, 11630, 11723, 11724, 16723, 16724, 9, 21279, 21361, 21418, 21748, 21749, 21805, 21815, 21816, 21855, 1, 8000, 1, 13130, 16, 2644, 3013, 7564, 8576, 8590, 8595, 8596, 8809, 8810, 14185, 21095, 22151, 26950, 26984, 27118, 27119, 1, 13112, 106, 393, 408, 473, 577, 588, 590, 609, 619, 620, 629, 630, 631, 643, 648, 649, 650, 666, 682, 683, 688, 689, 695, 782, 1360, 2132, 3733, 6455, 6513, 6519, 6520, 6531, 6537, 6542, 6579, 6581, 6587, 6589, 6601, 6630, 6666, 6674, 6684, 6697, 7514, 7523, 7538, 7539, 7541, 7548, 7551, 7611, 7612, 8006, 8904, 8905, 9050, 9052, 9633, 10173, 10344, 10345, 10354, 10356, 10744, 10747, 10750, 14057, 14058, 14059, 14060, 14072, 14107, 14108, 14131, 14552, 14856, 14857, 14858, 14859, 14872, 18783, 20208, 30870, 31067, 31068, 31069, 31070, 31101, 31860, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 1, 16841, 1, 22667, 8, 739, 7760, 13941, 13946, 13951, 24675, 26605, 26608, 1, 25787, 1, 30605, 1, 14860, 1, 25247, 1, 23947, 1, 7487, 1, 11904, 1, 32015, 1, 32631, 1, 9328, 1, 9829, 1, 8201, 1, 26284, 1, 25809, 1, 4175, 2, 7513, 27617, 1, 16934, 1, 22466, 1, 25585, 2, 13327, 24341, 1, 9918, 15, 3844, 4215, 4460, 4466, 4766, 5000, 10578, 11448, 13705, 16692, 17273, 18689, 25808, 26577, 29246, 1, 26064, 1, 15393, 1, 24748, 1, 23116, 2, 13973, 13974, 1, 23976, 6, 21260, 21261, 21332, 21798, 22020, 22314, 1, 13577, 1, 4852, 2, 17872, 23811, 1, 11880, 2, 9787, 9788, 1, 13339, 1, 25932, 1, 31641, 2, 13813, 13814, 3, 742, 743, 11159, 1, 4636, 1, 15277, 1, 16755, 1, 7414, 1, 7424, 139, 8307, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 11600, 11601, 11602, 11603, 11604, 11605, 11606, 11607, 11608, 11609, 11610, 11611, 11612, 11613, 11614, 11615, 11616, 11617, 11618, 11619, 11620, 11621, 11622, 11623, 11624, 11625, 11626, 11627, 11628, 11629, 11630, 11631, 11632, 11633, 11634, 11635, 11636, 11637, 11638, 11639, 11640, 11641, 11642, 11643, 11644, 11645, 11646, 11647, 11648, 11649, 11650, 11651, 11652, 11653, 11654, 11655, 11656, 11657, 11658, 11659, 11660, 11661, 11662, 11663, 11664, 11665, 11666, 29971, 29972, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 3, 8749, 12123, 30801, 1, 9911, 1, 26236, 2, 22797, 29159, 1, 9867, 5, 14614, 19885, 24914, 29399, 29433, 1, 24971, 1, 26050, 1, 23649, 1, 31650, 1, 25547, 1, 30821, 1, 32263, 1, 29805, 1, 4874, 1, 22294, 1, 23379, 2, 9636, 9828, 1, 25212, 1, 16878, 2, 18889, 18940, 1, 15570, 1, 22915, 12, 21141, 21608, 21696, 21697, 21698, 21699, 21700, 21701, 21702, 22239, 22332, 22333, 1, 26275, 1, 29295, 1, 3771, 3, 10948, 26642, 26643, 1, 32464, 1, 23720, 1, 2459, 2, 11659, 11771, 11, 1588, 1607, 1608, 7988, 11163, 16300, 16323, 16324, 16327, 17129, 31700, 2, 4237, 19385, 3, 7353, 7354, 7355, 1, 22879, 1, 14241, 1, 23973, 1, 25307, 2, 22836, 29229, 1, 26430, 4, 26790, 26791, 26792, 26793, 1, 28410, 1, 31273, 1, 23377, 1, 16840, 1, 22740, 1, 25254, 1, 22114, 1, 24733, 1, 12584, 1, 21430, 1, 15555, 1, 17415, 1, 31128, 3, 4208, 13026, 13661, 1, 25519, 1, 27135, 1, 24708, 1, 17788, 1, 12163, 1, 22986, 1, 32350, 1, 14473, 1, 12833, 32, 9627, 20746, 21564, 22093, 22103, 22111, 22114, 22115, 22116, 22117, 22118, 22119, 22120, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22128, 22129, 22139, 22141, 22149, 22150, 22161, 22162, 22163, 22164, 22165, 22166, 1, 9790, 1, 15236, 72, 1051, 1083, 1337, 1383, 2215, 2333, 2428, 2512, 2601, 2679, 2769, 2866, 2956, 3233, 3380, 3455, 3572, 3589, 4052, 4749, 4882, 5073, 5340, 5467, 5521, 5677, 5938, 6316, 10265, 10312, 10680, 13120, 13426, 13546, 14217, 14237, 14294, 14376, 14711, 14793, 17410, 17618, 17654, 17720, 18500, 18990, 19208, 19313, 19527, 19738, 19809, 19898, 19987, 20068, 20160, 20248, 20373, 20519, 20589, 20662, 20671, 20797, 20880, 20909, 20959, 21518, 21819, 24948, 29018, 29115, 29405, 29439, 2, 6156, 21909, 8, 21182, 21290, 21471, 21570, 21665, 21671, 21713, 21788, 2, 12822, 24273, 1, 9370, 1, 25453, 22, 10863, 11069, 30279, 30280, 30281, 30282, 31063, 31064, 31065, 31066, 31067, 31068, 31069, 31070, 31071, 31072, 31073, 31074, 31075, 31076, 31077, 31078, 3, 21266, 21961, 22189, 1, 12619, 1, 22783, 1, 30156, 1, 22922, 1, 24737, 49, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 24613, 1, 13724, 5, 21769, 30926, 30929, 30937, 30938, 1, 23616, 1, 25603, 1, 29271, 1, 25360, 1, 16815, 27, 21728, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 22047, 22048, 22334, 22335, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22344, 32, 8907, 8913, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 21195, 21214, 21289, 21373, 21384, 21393, 21396, 21408, 21413, 21470, 21496, 21532, 21543, 21664, 21702, 21753, 21754, 21783, 21943, 22216, 22247, 31167, 1, 17093, 1, 3894, 1, 15286, 2, 30711, 30949, 5, 6104, 6105, 6106, 6107, 14533, 1, 25525, 1, 30462, 1, 31991, 4, 3682, 3722, 6444, 10514, 7, 1568, 2136, 2145, 16118, 16119, 16354, 16355, 1, 26163, 1, 27212, 27, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1452, 1454, 1455, 1460, 7294, 7320, 9114, 9748, 10742, 15598, 30112, 30113, 30114, 9, 5992, 10415, 10416, 10421, 10422, 10468, 10469, 10470, 10471, 1, 31161, 1, 12577, 1, 15430, 1, 7294, 1, 13055, 1, 15522, 1, 14474, 1, 17777, 1, 22323, 1, 1795, 1, 9922, 1, 26990, 1, 30297, 1, 32807, 1, 10753, 1, 26413, 3, 11526, 20410, 20442, 1, 22735, 1, 23411, 1, 24050, 1, 29842, 1, 15417, 1, 26784, 1, 12527, 1, 29874, 25, 3646, 3647, 14680, 14681, 14682, 14683, 14684, 14685, 14686, 14687, 14688, 14689, 14690, 14691, 14692, 14693, 14694, 14695, 14696, 14697, 14698, 14699, 14700, 14701, 14702, 2, 31113, 31212, 1, 32336, 1, 21131, 3, 4577, 4955, 14153, 1, 32005, 1, 32194, 1, 7350, 25, 3122, 3151, 3152, 3153, 3206, 3235, 4050, 4428, 4713, 5063, 11207, 11301, 11821, 12972, 13658, 14170, 14726, 14727, 14943, 16621, 16771, 17512, 18141, 24728, 29211, 1, 22375, 1, 26818, 1, 31601, 1, 8593, 1, 25890, 1, 15438, 1, 10605, 3, 11989, 12067, 17202, 155, 43, 722, 795, 4513, 7355, 7374, 7390, 7745, 7874, 7883, 9108, 9203, 9532, 9540, 9541, 9721, 9722, 9728, 9731, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9772, 9773, 9784, 9840, 9841, 9918, 9919, 10033, 15609, 16345, 16505, 21154, 21159, 21165, 21182, 21183, 21221, 21226, 21232, 21236, 21239, 21242, 21276, 21297, 21298, 21318, 21319, 21320, 21321, 21324, 21326, 21328, 21334, 21341, 21342, 21343, 21345, 21346, 21349, 21353, 21354, 21356, 21364, 21370, 21401, 21404, 21418, 21421, 21480, 21492, 21495, 21507, 21508, 21509, 21511, 21576, 21577, 21578, 21589, 21595, 21596, 21601, 21607, 21610, 21611, 21612, 21614, 21618, 21620, 21621, 21622, 21628, 21636, 21653, 21655, 21657, 21660, 21661, 21701, 21705, 21727, 21731, 21733, 21737, 21738, 21739, 21740, 21828, 21925, 21926, 21933, 21946, 21947, 21952, 21953, 21978, 22017, 22019, 22023, 22040, 22106, 22107, 22201, 22205, 22232, 22233, 22234, 22235, 22241, 22242, 22249, 22288, 22289, 22290, 22319, 22320, 22329, 22331, 22341, 22343, 22351, 22352, 22353, 22354, 22355, 22357, 22366, 26956, 32508, 1, 27245, 1, 17723, 8, 7668, 7669, 7670, 7671, 10113, 10114, 10115, 10116, 2, 26978, 26979, 2, 12238, 24332, 3, 4108, 4569, 4570, 1, 23772, 1, 7778, 1, 12711, 2, 280, 281, 1, 24796, 1, 32356, 1, 26224, 1, 30120, 1, 26355, 2, 10281, 10328, 1, 25746, 3, 7759, 9631, 9632, 1, 12279, 2, 1041, 1073, 1, 32394, 1, 26998, 1, 31973, 1, 2039, 2, 30389, 30393, 1, 26194, 1, 13057, 1, 31793, 4, 4771, 4772, 13589, 29247, 1, 32064, 2, 26701, 26734, 1, 12897, 1, 16863, 1, 7281, 1, 12227, 25, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 8013, 8014, 8155, 9738, 9739, 9740, 9741, 9742, 9748, 9749, 9750, 9751, 9752, 9753, 9754, 9755, 41, 2193, 2316, 2409, 2493, 2582, 2748, 2846, 2934, 3211, 3355, 3430, 3504, 4838, 5322, 5552, 6355, 14233, 14276, 14687, 14789, 18482, 19190, 19293, 19456, 19508, 19614, 19670, 19717, 19790, 19876, 19969, 20050, 20142, 20230, 20355, 20501, 20564, 20638, 20779, 20941, 21023, 71, 1516, 1561, 1674, 1675, 1676, 1677, 1707, 1708, 1710, 1852, 2093, 15861, 15865, 15866, 15867, 15868, 15869, 15870, 15931, 15935, 15936, 15937, 16001, 16003, 16004, 16005, 16006, 16007, 16037, 16039, 16170, 16171, 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16212, 16213, 16221, 16226, 16228, 16462, 16463, 16464, 16465, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 18564, 21634, 21635, 21636, 22203, 22204, 22236, 22237, 24130, 24228, 29599, 29626, 29643, 29688, 29713, 2, 7411, 30310, 3, 3631, 3632, 3633, 1, 12607, 1, 12983, 1, 729, 1, 15462, 3, 17019, 17027, 17033, 1, 1513, 1, 25784, 4, 14177, 14178, 14179, 14180, 1, 8776, 4, 3138, 6298, 24900, 29062, 3, 7335, 18876, 18927, 38, 19656, 19657, 19658, 19659, 19660, 19661, 19662, 19663, 19664, 19665, 19666, 19667, 19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686, 19687, 19688, 19689, 19690, 19691, 19692, 19693, 1, 8209, 3, 4430, 12075, 14945, 2, 10554, 24746, 1, 2040, 1, 32062, 17, 1011, 1015, 1032, 1064, 1091, 1095, 1223, 1224, 1225, 1226, 5375, 10685, 12185, 13799, 17337, 24995, 26569, 1, 23272, 1, 8799, 37, 14409, 14410, 14411, 14412, 14413, 14414, 14415, 14416, 14417, 14418, 14419, 14420, 14421, 14422, 14423, 14424, 14425, 14426, 14427, 14428, 14429, 14430, 14431, 14432, 14433, 14434, 14435, 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14443, 14444, 14445, 3, 10632, 13817, 13818, 1, 23909, 1, 26256, 1, 10650, 1, 9635, 1, 9463, 13, 18167, 18198, 18235, 18236, 18270, 18532, 18614, 18718, 18748, 18774, 19067, 19104, 19148, 1, 29202, 1, 32708, 1, 1914, 1, 10534, 1, 15239, 1, 23557, 4, 9496, 9497, 9498, 9499, 1, 18025, 1, 24310, 1, 9444, 1, 25455, 1, 32379, 1, 15069, 1, 15262, 1, 30836, 1, 26273, 1, 23723, 9, 17120, 31071, 31072, 31073, 31074, 31075, 31076, 31077, 31078, 1, 32783, 1, 25261, 1, 12927, 283, 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, 7708, 7709, 7712, 8114, 8207, 8608, 8609, 8610, 8618, 8620, 8622, 8624, 8626, 8628, 8630, 8632, 8634, 8636, 8638, 8640, 8642, 8644, 8646, 8647, 8650, 8664, 8665, 8666, 8677, 8682, 8683, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 8698, 8700, 8709, 8718, 8725, 8731, 8732, 8733, 8734, 8760, 8761, 8763, 8787, 8788, 8789, 8790, 8791, 8792, 8800, 8801, 8803, 8806, 8837, 8838, 8839, 8840, 8847, 8860, 8873, 8875, 8895, 8896, 8904, 8906, 8912, 8918, 8920, 8922, 8925, 8958, 8963, 8964, 8976, 8989, 8998, 9000, 9001, 9003, 9007, 9021, 9023, 9036, 9038, 9039, 9040, 9041, 9043, 9044, 9045, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9136, 9137, 9152, 9167, 9184, 9185, 9186, 9187, 9188, 9189, 9190, 9195, 9196, 9602, 9603, 9604, 9605, 9661, 9685, 9707, 9709, 9711, 9713, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 10011, 10013, 10015, 10016, 10021, 10023, 10026, 10028, 10030, 10063, 10065, 10067, 10117, 10118, 10119, 10120, 10163, 10165, 10166, 10185, 10186, 10200, 10994, 11129, 11130, 11137, 11138, 11139, 11140, 11141, 11142, 16277, 16278, 16315, 16316, 16318, 16589, 16590, 16719, 26958, 26960, 26962, 26964, 26966, 26968, 26970, 26972, 26978, 27073, 27077, 27079, 29738, 29935, 30250, 30251, 30252, 30253, 30456, 30458, 30541, 30542, 30543, 30544, 30645, 30778, 30789, 30790, 30797, 30853, 30878, 30879, 30880, 30885, 30886, 30898, 31342, 31343, 31344, 31345, 31346, 31347, 31351, 31352, 31353, 31354, 31355, 31356, 31357, 31358, 31363, 31364, 31369, 31560, 31561, 31562, 31563, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 31581, 31582, 31583, 31584, 31585, 31598, 31755, 31836, 31839, 31840, 31841, 31842, 31843, 31844, 31857, 31860, 31861, 31862, 31863, 31864, 31865, 31878, 31881, 31882, 31883, 31884, 31885, 31886, 31899, 31902, 31905, 31908, 31909, 31910, 10, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 1, 10528, 1, 18649, 1, 11979, 1, 22524, 23, 2221, 2337, 2431, 2516, 2553, 2554, 2555, 2605, 2870, 6338, 19327, 19476, 19554, 19647, 19751, 19814, 19919, 20010, 20087, 20264, 20392, 20979, 29446, 3, 4826, 4827, 4897, 1, 12381, 1, 12118, 1, 12490, 1, 25563, 1, 26476, 1, 26816, 2, 2039, 2041, 1, 7940, 1, 7501, 1, 7515, 1, 15386, 1, 17518, 1, 29049, 1, 12435, 1, 32217, 3, 11669, 30361, 30450, 1, 23217, 1, 22691, 1, 26862, 4, 12013, 12017, 12021, 12061, 1, 32254, 2, 16240, 16249, 22, 423, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6681, 6692, 14079, 14080, 14125, 14127, 1, 29324, 1, 22979, 1, 15076, 1, 15098, 1, 22912, 1, 12499, 1, 12487, 1, 26257, 15, 1788, 18173, 18205, 18244, 18276, 18545, 18624, 18724, 18753, 18779, 19076, 19077, 19078, 19110, 19154, 1, 3469, 2, 12287, 13355, 2, 7425, 11910, 1, 12412, 1, 16836, 1, 16918, 1, 17080, 1, 25726, 1, 12284, 1, 12647, 1, 22516, 1, 7502, 1, 8818, 2, 24095, 24176, 46, 2200, 2323, 2416, 2500, 2589, 2755, 2853, 2941, 3219, 3362, 3437, 3511, 5572, 5666, 13539, 14283, 14594, 14619, 14690, 17565, 17624, 17660, 18489, 19197, 19302, 19463, 19515, 19622, 19678, 19726, 19797, 19883, 19976, 20057, 20149, 20237, 20296, 20362, 20508, 20571, 20645, 20786, 20948, 21018, 29385, 29419, 1, 18087, 2, 17918, 23866, 1, 3137, 1, 19392, 1, 25982, 1, 25772, 2, 22392, 23468, 1, 30901, 13, 8217, 8228, 8635, 8636, 8637, 8638, 8922, 9703, 9704, 10177, 30786, 30788, 31340, 3, 3829, 3989, 11496, 2, 8263, 8275, 1, 17073, 2, 1203, 1218, 1, 30683, 1, 10638, 1, 25979, 1, 18082, 1, 8106, 1, 27045, 7, 8239, 8240, 20096, 21133, 30912, 30913, 30950, 2, 4624, 4625, 1, 24940, 2, 22383, 23461, 1, 29349, 1, 30154, 1, 9781, 1, 14530, 1, 26387, 1, 31956, 2, 16723, 16724, 32, 720, 721, 788, 789, 793, 794, 4514, 6756, 7887, 7888, 7889, 7890, 8055, 8059, 8062, 8066, 8078, 9175, 9176, 9178, 9180, 9181, 9182, 9949, 9950, 9951, 9958, 9959, 9960, 9961, 9962, 9968, 2, 13551, 29340, 1, 25116, 1, 12293, 1, 32492, 11, 8301, 8321, 8341, 8430, 11958, 12093, 24885, 27206, 31899, 31900, 31901, 1, 19403, 1, 17806, 1, 25401, 1, 22729, 1, 13179, 1, 32218, 12, 8719, 8720, 8721, 8982, 8983, 10168, 30970, 30971, 30972, 30973, 30974, 30976, 1, 3812, 1, 8886, 1, 7436, 1, 3821, 1, 16734, 1, 23406, 1, 24124, 1, 15124, 1, 22918, 2, 536, 537, 3, 1635, 15697, 15698, 1, 9355, 2, 282, 283, 1, 25091, 1, 32227, 3, 10237, 10284, 28993, 1, 12331, 2, 27482, 27503, 1, 1912, 1, 7725, 1, 16781, 1, 29803, 1, 32110, 1, 29939, 1, 9293, 1, 25437, 1, 25186, 109, 19160, 19161, 19162, 19163, 19164, 19165, 19166, 19167, 19168, 19169, 19170, 19171, 19172, 19173, 19174, 19175, 19176, 19177, 19178, 19179, 19180, 19181, 19182, 19183, 19184, 19185, 19186, 19187, 19188, 19189, 19190, 19191, 19192, 19193, 19194, 19195, 19196, 19197, 19198, 19199, 19200, 19201, 19202, 19203, 19204, 19205, 19206, 19207, 19208, 19209, 19210, 19211, 19212, 19213, 19214, 19215, 19216, 19217, 19218, 19219, 19220, 19221, 19222, 19223, 19224, 19225, 19226, 19227, 19228, 19229, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19240, 19241, 19242, 19243, 19244, 19245, 19246, 19247, 19248, 19249, 19250, 19251, 19252, 19253, 19254, 19255, 19256, 19257, 19258, 19259, 19260, 19261, 19262, 19263, 19264, 19265, 19266, 19267, 19268, 7, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 2, 8946, 30842, 1, 25968, 1, 29211, 1, 9358, 1, 23704, 1, 30613, 1, 17796, 1, 10760, 22, 3470, 3475, 3476, 3477, 3478, 4086, 11232, 11326, 11521, 12225, 13604, 20417, 20449, 21211, 21212, 21213, 21214, 21661, 21777, 22179, 22252, 29188, 1, 8682, 1, 31151, 1, 31961, 1, 29351, 1, 32129, 1, 23271, 1, 8207, 3, 4116, 4628, 4629, 1, 24051, 1, 8222, 1, 12758, 1, 3035, 1, 21880, 1, 5392, 2, 31944, 31945, 1, 32822, 3, 5418, 5841, 5857, 1, 10533, 97, 20755, 20756, 20757, 20758, 20759, 20760, 20761, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20769, 20770, 20771, 20772, 20773, 20774, 20775, 20776, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20799, 20800, 20801, 20802, 20803, 20804, 20805, 20806, 20807, 20808, 20809, 20810, 20811, 20812, 20813, 20814, 20815, 20816, 20817, 20818, 20819, 20820, 20821, 20822, 20823, 20824, 20825, 20826, 20827, 20828, 20829, 20830, 20831, 20832, 20833, 20834, 20835, 20836, 20837, 20838, 20839, 20840, 20841, 20842, 20843, 20844, 20845, 20846, 20847, 20848, 20849, 20850, 20851, 1, 5541, 97, 7475, 7486, 7494, 7498, 7499, 7502, 7509, 7533, 7534, 7535, 7536, 7537, 7542, 7543, 7544, 7545, 7546, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27637, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28286, 28287, 28288, 29705, 29706, 29707, 29708, 29709, 29710, 29711, 29712, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29722, 29723, 29724, 29725, 29726, 29727, 29728, 29729, 1, 25443, 1, 8608, 2, 13907, 24591, 1, 27060, 46, 2006, 3526, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3650, 3651, 14566, 14567, 14568, 14569, 14570, 14571, 14572, 1, 12754, 1, 18855, 1, 12720, 1, 9260, 1, 18372, 1, 15567, 1, 26928, 2, 12966, 24294, 2, 12392, 31719, 1, 15235, 1, 12632, 3, 8912, 16880, 17091, 1, 30692, 1, 8221, 1, 30204, 1, 21244, 1, 22262, 8, 4236, 5009, 5010, 11523, 13173, 13511, 17387, 29234, 1, 25229, 1, 1989, 2, 1171, 1172, 1, 26075, 1, 10633, 1, 29200, 1, 22503, 1, 32473, 7, 4289, 4449, 5079, 10263, 10310, 14964, 29016, 2, 7643, 7675, 1, 18089, 1, 25825, 1, 17997, 3, 7616, 7630, 7680, 1, 3889, 1, 23927, 1, 8882, 1, 31631, 1, 18544, 3, 9129, 31576, 31579, 1, 23262, 1, 30657, 1, 12791, 7, 8723, 8901, 8903, 10860, 11061, 30253, 30254, 6, 962, 970, 3112, 10461, 26765, 26826, 1, 13202, 1, 6091, 1, 13177, 2, 17870, 23809, 1, 25967, 1, 27053, 1, 32270, 1, 23783, 1, 22016, 3, 11805, 18912, 18963, 1, 25249, 2, 354, 355, 2, 3059, 3065, 1, 28472, 1, 12678, 1, 12967, 1, 15443, 1, 26032, 1, 7660, 1, 3798, 2, 12302, 13397, 1, 25543, 1, 12403, 3, 4975, 17262, 17706, 1, 12816, 1, 12779, 1, 12988, 1, 26285, 30, 5870, 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 1, 27228, 1, 29947, 1, 30723, 1, 17743, 1, 29307, 1, 27014, 1, 7942, 1, 9272, 5, 20097, 20098, 30776, 31302, 31303, 1, 11983, 3, 1327, 1373, 15596, 1, 14826, 12, 8792, 8798, 31835, 31844, 31850, 31856, 31865, 31871, 31877, 31886, 31892, 31898, 1, 27260, 1, 31207, 1, 17814, 1, 30500, 1, 32313, 1, 2042, 1, 23958, 1, 7770, 47, 7748, 7749, 7750, 7785, 7878, 7879, 7880, 7886, 7921, 7922, 7923, 9585, 9586, 9587, 9716, 9727, 9728, 9729, 9730, 9731, 9732, 9733, 9734, 9735, 9736, 9739, 9748, 9749, 9757, 9833, 9834, 9842, 9926, 9927, 9932, 9933, 9970, 9973, 9979, 9980, 10048, 10054, 10056, 10058, 10059, 29730, 29731, 4, 4288, 4451, 5075, 14966, 1, 7956, 3, 21215, 21216, 21847, 2, 22004, 22005, 1, 29082, 2, 30991, 31609, 1, 30276, 2, 5604, 5605, 6, 4012, 13423, 14694, 18359, 18387, 24965, 1, 23077, 2, 15778, 15779, 2, 13077, 14169, 1, 7832, 1, 13331, 1, 15238, 1, 23061, 1, 12336, 2, 21563, 21564, 10, 1518, 1571, 1587, 2133, 2149, 2150, 15898, 16044, 16359, 16360, 41, 21137, 21148, 21158, 21191, 21192, 21287, 21321, 21336, 21337, 21382, 21402, 21411, 21432, 21466, 21490, 21581, 21612, 21647, 21648, 21663, 21712, 21726, 21727, 21733, 21751, 21858, 21901, 21964, 21996, 22005, 22130, 22131, 22132, 22133, 22134, 22172, 22175, 22250, 22349, 22358, 22367, 1, 32109, 1, 17930, 1, 26069, 1, 27035, 1, 32355, 2, 12761, 13353, 1, 32465, 1, 23585, 11, 24759, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 29366, 2, 22372, 23452, 1, 31794, 1, 25739, 1, 4300, 1, 15048, 1, 11901, 1, 15151, 1, 16742, 15, 12111, 12177, 15031, 15105, 15107, 15109, 15111, 25050, 31944, 31946, 31948, 31950, 31952, 32833, 32835, 1, 12831, 1, 23698, 1, 16894, 1, 25788, 1, 30802, 5, 13475, 13881, 24499, 24519, 29342, 1, 26379, 1, 32264, 1, 12968, 3, 8592, 8593, 8594, 1, 32359, 1, 25865, 1, 12767, 1, 18091, 1, 14528, 21, 92, 7461, 9159, 9655, 9716, 9718, 9720, 10048, 10049, 10054, 10055, 10058, 10059, 11506, 16350, 16554, 26893, 31108, 31110, 31409, 32557, 1, 31692, 1, 32604, 1, 12377, 1, 32033, 2, 17914, 23861, 1, 6460, 114, 1342, 1388, 1949, 1966, 2083, 2209, 2331, 2370, 2371, 2424, 2508, 2597, 2673, 2763, 2861, 2950, 3378, 3386, 3453, 3463, 3519, 3552, 4036, 4803, 4869, 4935, 5263, 5286, 5473, 5535, 5674, 5693, 5702, 5887, 5933, 5953, 5989, 6053, 6054, 6087, 6100, 6101, 6190, 6245, 6246, 6310, 6320, 11251, 11345, 11595, 11845, 13147, 13542, 14215, 14240, 14241, 14291, 14344, 14387, 14422, 14518, 14519, 14632, 14649, 14699, 14706, 16645, 16763, 17405, 17562, 18133, 18355, 18384, 18497, 18986, 19205, 19310, 19470, 19523, 19631, 19686, 19735, 19805, 19893, 19984, 20065, 20157, 20245, 20289, 20304, 20305, 20370, 20516, 20586, 20601, 20603, 20659, 20669, 20716, 20794, 20878, 20907, 20956, 21033, 21071, 21326, 21328, 21789, 23881, 29051, 29123, 29332, 29380, 29414, 1, 23853, 2, 20420, 20452, 1, 32398, 1, 9576, 1, 24473, 2, 27577, 27601, 1, 15194, 1, 22782, 1, 25981, 1, 25404, 7, 1726, 8005, 31157, 31191, 31656, 31657, 31658, 1, 30841, 1, 23369, 1, 26347, 2, 3963, 11474, 1, 32179, 1, 29852, 1, 9794, 1, 25205, 1, 25944, 9, 12110, 21147, 21324, 21376, 21377, 21489, 21963, 22106, 22107, 1, 15537, 2, 24169, 24336, 4, 4848, 5642, 13562, 29268, 1, 12954, 1, 4286, 1, 5195, 1, 32673, 1, 17296, 1, 25888, 1, 17193, 1, 31169, 1, 13102, 1, 15357, 1, 12041, 2, 17116, 30801, 1, 9746, 19, 8761, 8762, 30984, 30986, 30987, 30988, 30989, 30990, 30991, 30993, 30996, 30997, 31008, 31039, 31041, 31042, 31049, 31630, 31697, 1, 25963, 4, 10373, 10374, 17310, 17343, 1, 32327, 1, 7478, 1, 9968, 1, 23529, 1, 12000, 2, 22398, 23474, 2, 21764, 21871, 1, 25695, 6, 985, 986, 10433, 10434, 10475, 10476, 350, 41, 93, 125, 410, 540, 698, 703, 718, 750, 785, 789, 821, 841, 844, 849, 850, 851, 852, 1756, 1758, 2153, 2155, 2156, 2157, 2158, 4507, 6757, 6765, 6920, 7280, 7284, 7325, 7378, 7394, 7441, 7447, 7457, 7471, 7617, 7642, 7643, 7675, 7681, 7713, 7718, 7721, 7724, 7756, 7887, 7895, 7896, 7900, 7915, 7916, 7927, 7929, 7965, 7966, 7990, 7992, 7993, 7995, 8010, 8012, 8019, 8105, 8139, 8140, 8141, 8145, 8146, 8147, 8152, 8153, 8154, 8157, 8158, 8166, 8171, 8172, 8459, 8460, 8461, 8462, 8467, 8468, 8469, 8470, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8492, 8493, 8496, 8497, 8500, 8501, 8504, 8505, 8508, 8509, 8514, 8515, 8516, 8517, 8520, 8521, 8529, 8530, 8531, 8535, 8536, 8537, 8541, 8542, 8543, 8556, 8559, 8560, 8561, 8565, 8569, 8571, 8573, 8591, 8596, 8598, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8614, 8615, 8656, 8659, 8662, 8668, 8669, 8673, 8676, 8679, 8681, 8685, 8689, 8690, 8693, 8694, 8696, 8702, 8730, 8733, 8837, 8839, 8861, 8973, 8975, 9038, 9039, 9040, 9041, 9064, 9066, 9074, 9076, 9157, 9170, 9173, 9177, 9178, 9180, 9190, 9192, 9194, 9196, 9198, 9203, 9206, 9209, 9475, 9522, 9533, 9543, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9555, 9556, 9563, 9564, 9570, 9572, 9581, 9582, 9583, 9596, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 9619, 9621, 9623, 9627, 9628, 9639, 9641, 9643, 9645, 9650, 9665, 9666, 9677, 9679, 9681, 9684, 9688, 9690, 9704, 9773, 9780, 9858, 9933, 9953, 9987, 9995, 10003, 10006, 10083, 10121, 10126, 10128, 10156, 10158, 10160, 10162, 10212, 10214, 10233, 10346, 10694, 10695, 10697, 10699, 10704, 10707, 10723, 10727, 10729, 10731, 10733, 10735, 10749, 10910, 11103, 11105, 11112, 11124, 11126, 11128, 11130, 11132, 11136, 11138, 11140, 11142, 11767, 13957, 14541, 14861, 14869, 14870, 14875, 14877, 14879, 14881, 16121, 16278, 16281, 16283, 16285, 16288, 16290, 16292, 16295, 16302, 16304, 16306, 16308, 16310, 16312, 16314, 16316, 16320, 16337, 16339, 16341, 16503, 16555, 16587, 16590, 16593, 25029, 25030, 26606, 26897, 26964, 26965, 26968, 26969, 30544, 30754, 30789, 30790, 30795, 30831, 30832, 30833, 30852, 30880, 30882, 30884, 30943, 30958, 30960, 30964, 30966, 31337, 31338, 31339, 31340, 31514, 32506, 32558, 32590, 6, 1894, 4213, 4774, 10544, 19404, 24248, 1, 29837, 5, 11164, 11165, 11166, 11167, 11168, 1, 17028, 1, 4073, 1, 9013, 3, 4832, 4833, 5109, 8, 8965, 28960, 28961, 28962, 28963, 28964, 28965, 29083, 1, 24926, 1, 12511, 1, 3114, 3, 12525, 24249, 24389, 1, 13193, 1, 32620, 1, 23317, 1, 31754, 1, 25987, 51, 2099, 18974, 18975, 18976, 18977, 18978, 18979, 18980, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992, 18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001, 19002, 19003, 19004, 19005, 19006, 19007, 19008, 19009, 19010, 19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 1, 28988, 1, 7542, 1, 15073, 1, 16268, 76, 21317, 21318, 21319, 21320, 21321, 21322, 21323, 21324, 21325, 21326, 21327, 21328, 21329, 21330, 21331, 21332, 21333, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21355, 21356, 21357, 21358, 21359, 21360, 21361, 21362, 21363, 21364, 21365, 21366, 21367, 21368, 21369, 21370, 21371, 22023, 22024, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22236, 22237, 22238, 22239, 22240, 22241, 22242, 22243, 22244, 2, 26816, 26817, 11, 1479, 15600, 18171, 18203, 18242, 18620, 18722, 19073, 19074, 19108, 19152, 1, 24651, 1, 10598, 1, 9773, 1, 18453, 1, 25156, 1, 30437, 1, 16812, 1, 23873, 2, 16317, 16318, 1, 23746, 1, 29255, 1, 657, 1, 24185, 1, 25452, 1, 29791, 1, 4738, 1, 26915, 2, 9902, 9906, 1, 32076, 1, 14613, 55, 18101, 18102, 18103, 18104, 18105, 18106, 18107, 18108, 18109, 18110, 18111, 18112, 18113, 18114, 18115, 18116, 18117, 18118, 18119, 18120, 18121, 18122, 18123, 18124, 18125, 18126, 18127, 18128, 18129, 18130, 18131, 18132, 18133, 18134, 18135, 18136, 18137, 18138, 18139, 18140, 18141, 18142, 18143, 18144, 18145, 18146, 18147, 18148, 18149, 18150, 18151, 18152, 18153, 18154, 18155, 2, 30845, 30997, 1, 22018, 1, 26308, 9, 8968, 30703, 30704, 30857, 30858, 30859, 30860, 30861, 31805, 1, 25701, 1, 32454, 1, 23343, 5, 8717, 30712, 30713, 30715, 30856, 1, 24352, 1, 12839, 756, 25046, 25052, 25053, 25054, 25055, 25056, 25057, 25058, 25059, 25060, 25061, 25062, 25063, 25064, 25065, 25066, 25067, 25068, 25069, 25070, 25071, 25072, 25073, 25074, 25075, 25076, 25077, 25078, 25079, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25087, 25088, 25089, 25090, 25091, 25092, 25093, 25094, 25095, 25096, 25097, 25098, 25099, 25100, 25101, 25102, 25103, 25104, 25105, 25106, 25107, 25108, 25109, 25110, 25111, 25112, 25113, 25114, 25115, 25116, 25117, 25118, 25119, 25120, 25121, 25122, 25123, 25124, 25125, 25126, 25127, 25128, 25129, 25130, 25131, 25132, 25133, 25134, 25135, 25136, 25137, 25138, 25139, 25140, 25141, 25142, 25143, 25144, 25145, 25146, 25147, 25148, 25149, 25150, 25151, 25152, 25153, 25154, 25155, 25156, 25157, 25158, 25159, 25160, 25161, 25162, 25163, 25164, 25165, 25166, 25167, 25168, 25169, 25170, 25171, 25172, 25173, 25174, 25175, 25176, 25177, 25178, 25179, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25187, 25188, 25189, 25190, 25191, 25192, 25193, 25194, 25195, 25196, 25197, 25198, 25199, 25200, 25201, 25202, 25203, 25204, 25205, 25206, 25207, 25208, 25209, 25210, 25211, 25212, 25213, 25214, 25215, 25216, 25217, 25218, 25219, 25220, 25221, 25222, 25223, 25224, 25225, 25226, 25227, 25228, 25229, 25230, 25231, 25232, 25233, 25234, 25235, 25236, 25237, 25238, 25239, 25240, 25241, 25242, 25243, 25244, 25245, 25246, 25247, 25248, 25249, 25250, 25251, 25252, 25253, 25254, 25255, 25256, 25257, 25258, 25259, 25260, 25261, 25262, 25263, 25264, 25265, 25266, 25267, 25268, 25269, 25270, 25271, 25272, 25273, 25274, 25275, 25276, 25277, 25278, 25279, 25280, 25281, 25282, 25283, 25284, 25285, 25286, 25287, 25288, 25289, 25290, 25291, 25292, 25293, 25294, 25295, 25296, 25297, 25298, 25299, 25300, 25301, 25302, 25303, 25304, 25305, 25306, 25307, 25308, 25309, 25310, 25311, 25312, 25313, 25314, 25315, 25316, 25317, 25318, 25319, 25320, 25321, 25322, 25323, 25324, 25325, 25326, 25327, 25328, 25329, 25330, 25331, 25332, 25333, 25334, 25335, 25336, 25337, 25338, 25339, 25340, 25341, 25342, 25343, 25344, 25345, 25346, 25347, 25348, 25349, 25350, 25351, 25352, 25353, 25354, 25355, 25356, 25357, 25358, 25359, 25360, 25361, 25362, 25363, 25364, 25365, 25366, 25367, 25368, 25369, 25370, 25371, 25372, 25373, 25374, 25375, 25376, 25377, 25378, 25379, 25380, 25381, 25382, 25383, 25384, 25385, 25386, 25387, 25388, 25389, 25390, 25391, 25392, 25393, 25394, 25395, 25396, 25397, 25398, 25399, 25400, 25401, 25402, 25403, 25404, 25405, 25406, 25407, 25408, 25409, 25410, 25411, 25412, 25413, 25414, 25415, 25416, 25417, 25418, 25419, 25420, 25421, 25422, 25423, 25424, 25425, 25426, 25427, 25428, 25429, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25438, 25439, 25440, 25441, 25442, 25443, 25444, 25445, 25446, 25447, 25448, 25449, 25450, 25451, 25452, 25453, 25454, 25455, 25456, 25457, 25458, 25459, 25460, 25461, 25462, 25463, 25464, 25465, 25466, 25467, 25468, 25469, 25470, 25471, 25472, 25473, 25474, 25475, 25476, 25477, 25478, 25479, 25480, 25481, 25482, 25483, 25484, 25485, 25486, 25487, 25488, 25489, 25490, 25491, 25492, 25493, 25494, 25495, 25496, 25497, 25498, 25499, 25500, 25501, 25502, 25503, 25504, 25505, 25506, 25507, 25508, 25509, 25510, 25511, 25512, 25513, 25514, 25515, 25516, 25517, 25518, 25519, 25520, 25521, 25522, 25523, 25524, 25525, 25526, 25527, 25528, 25529, 25530, 25531, 25532, 25533, 25534, 25535, 25536, 25537, 25538, 25539, 25540, 25541, 25542, 25543, 25544, 25545, 25546, 25547, 25548, 25549, 25550, 25551, 25552, 25553, 25554, 25555, 25556, 25557, 25558, 25559, 25560, 25561, 25562, 25563, 25564, 25565, 25566, 25567, 25568, 25569, 25570, 25571, 25572, 25573, 25574, 25575, 25576, 25577, 25578, 25579, 25580, 25581, 25582, 25583, 25584, 25585, 25586, 25587, 25588, 25589, 25590, 25591, 25592, 25593, 25594, 25595, 25596, 25597, 25598, 25599, 25600, 25601, 25602, 25603, 25604, 25605, 25606, 25607, 25608, 25609, 25610, 25611, 25612, 25613, 25614, 25615, 25616, 25617, 25618, 25619, 25620, 25621, 25622, 25623, 25624, 25625, 25626, 25627, 25628, 25629, 25630, 25631, 25632, 25633, 25634, 25635, 25636, 25637, 25638, 25639, 25640, 25641, 25642, 25643, 25644, 25645, 25646, 25647, 25648, 25649, 25650, 25651, 25652, 25653, 25654, 25655, 25656, 25657, 25658, 25659, 25660, 25661, 25662, 25663, 25664, 25665, 25666, 25667, 25668, 25669, 25670, 25671, 25672, 25673, 25674, 25675, 25676, 25677, 25678, 25679, 25680, 25681, 25682, 25683, 25684, 25685, 25686, 25687, 25688, 25689, 25690, 25691, 25692, 25693, 25694, 25695, 25696, 25697, 25698, 25699, 25700, 25701, 25702, 25703, 25704, 25705, 25706, 25707, 25708, 25709, 25710, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25720, 25721, 25722, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25730, 25731, 25732, 25733, 25734, 25735, 25736, 25737, 25738, 25739, 25740, 25741, 25742, 25743, 25744, 25745, 25746, 25747, 25748, 25749, 25750, 25751, 25752, 25753, 25754, 25755, 25756, 25757, 25758, 25759, 25760, 25761, 25762, 25763, 25764, 25765, 25766, 25767, 25768, 25769, 25770, 25771, 25772, 25773, 25774, 25775, 25776, 25777, 25778, 25779, 25780, 25781, 25782, 25783, 25784, 25785, 25786, 25787, 25788, 25789, 25790, 25791, 25792, 25793, 25794, 25795, 25796, 25797, 25798, 25799, 25800, 25801, 25802, 25803, 25804, 25805, 25806, 1, 9245, 1, 27230, 1, 32496, 6, 21182, 21183, 21710, 21711, 21712, 21713, 1, 17934, 1, 32118, 6, 971, 972, 977, 978, 1139, 1140, 1, 23403, 1, 25073, 1, 26140, 1, 22608, 1, 26051, 1, 8892, 1, 19111, 3, 31016, 31045, 31061, 1, 26214, 1, 18074, 1, 26827, 1, 26229, 1, 15562, 1, 17521, 1, 23042, 1, 9604, 1, 32167, 1, 12554, 1, 17992, 3, 10235, 10282, 28991, 1, 25171, 1, 1408, 3, 1350, 1396, 4605, 1, 25810, 1, 7285, 1, 23197, 1, 7304, 1, 23941, 1, 14801, 1, 29340, 1, 13197, 1, 23066, 1, 32257, 1, 3491, 1, 16871, 1, 7818, 2, 12259, 13372, 1, 32809, 1, 10929, 1, 15545, 1, 7621, 1, 5180, 1, 12842, 1, 23731, 97, 1451, 1453, 1456, 1459, 1492, 1493, 1523, 2032, 2033, 2034, 2035, 2036, 2037, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2075, 3111, 5216, 5217, 5218, 5271, 5272, 6339, 6340, 6341, 6342, 6343, 6403, 6404, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 7263, 7340, 7341, 7343, 7344, 7345, 10736, 10737, 10738, 13445, 13446, 14676, 14677, 14678, 14679, 18522, 18523, 18524, 18525, 18526, 18527, 18528, 18529, 18530, 18639, 18640, 18641, 18642, 18643, 18644, 18645, 18701, 18702, 18703, 18704, 18705, 18706, 19132, 19133, 19134, 19135, 19136, 19233, 19234, 19235, 19236, 19237, 21133, 22167, 22168, 22169, 22170, 22171, 26639, 1, 5087, 1, 25005, 1, 23877, 1, 23111, 1, 23887, 1, 23991, 1, 8044, 1, 22850, 2, 14876, 14880, 1, 24059, 1, 26110, 1, 26132, 1, 23624, 1, 13271, 2, 27096, 27097, 4, 5158, 12028, 12029, 12030, 3, 4158, 13477, 29162, 6, 1462, 7527, 15617, 15639, 17708, 18286, 2, 352, 353, 1, 9643, 1, 11382, 1, 7995, 2, 17891, 23836, 1, 16891, 1, 13137, 1, 2461, 1, 25597, 51, 4009, 4400, 4683, 4796, 5020, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 6387, 7825, 7827, 12639, 13694, 14915, 17683, 18114, 18692, 29217, 29220, 11, 395, 597, 598, 1227, 1228, 1229, 1230, 6585, 6660, 6745, 7399, 1, 8832, 1, 15441, 1, 13678, 1, 23013, 2, 28332, 28546, 1, 2792, 1, 15166, 1, 23136, 1, 25690, 1, 30557, 1, 23328, 1, 32628, 1, 1985, 2, 17306, 17342, 1, 17413, 9, 3752, 3929, 11434, 11608, 11622, 11628, 11703, 11717, 16678, 1, 12956, 1, 15530, 1, 9639, 32, 26604, 26605, 26606, 26607, 26608, 26609, 26610, 26611, 26612, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 26626, 26627, 26628, 26629, 26630, 26631, 26632, 26633, 26634, 26635, 1, 7771, 1, 11896, 1, 23234, 2, 4055, 4750, 1, 3183, 1, 15544, 1, 22505, 2, 4261, 12727, 1, 32162, 1, 31261, 1, 31168, 1, 9327, 2, 454, 456, 1, 13208, 7, 26877, 26878, 26879, 26880, 26881, 26882, 26883, 1, 13257, 1, 7923, 13, 7693, 7694, 7695, 7696, 9118, 9119, 10089, 10090, 10091, 10092, 16321, 16325, 26894, 1, 31828, 1, 17117, 1, 30567, 1, 23112, 6, 31253, 31255, 31256, 31258, 31259, 31260, 1, 4739, 1, 12529, 1, 26145, 1, 32312, 1, 12772, 1, 25427, 1, 16768, 1, 26366, 1, 12452, 1, 12602, 1, 23952, 1, 5706, 1, 18559, 1, 2009, 1, 22950, 15, 6632, 6727, 14052, 14053, 14054, 14055, 14056, 14057, 14058, 14061, 14062, 14063, 14064, 14065, 14066, 1, 9321, 4, 7016, 7017, 7018, 7019, 1, 18096, 1, 22530, 1, 26115, 1, 24161, 1, 13286, 1, 30170, 1, 23765, 1, 32213, 1, 15000, 112, 1957, 2207, 2329, 2422, 2506, 2595, 2671, 2761, 2859, 2948, 3144, 3283, 3284, 3285, 3286, 3287, 3288, 3368, 3443, 3484, 3485, 3517, 3587, 4020, 4405, 4642, 4997, 5241, 5261, 5284, 5304, 5464, 5497, 5672, 5701, 5731, 5777, 5780, 5876, 5930, 5960, 6085, 6188, 6207, 6247, 6248, 6304, 11240, 11334, 11837, 11986, 12362, 13414, 13557, 13745, 13910, 14206, 14289, 14384, 14417, 14516, 14629, 14920, 16637, 16744, 17399, 17611, 17647, 18118, 18350, 18381, 18495, 18994, 19203, 19308, 19469, 19521, 19629, 19684, 19733, 19803, 19890, 19982, 20063, 20155, 20243, 20285, 20368, 20514, 20577, 20651, 20701, 20792, 20869, 20899, 20954, 21009, 21063, 21678, 21679, 21680, 24166, 24167, 24171, 24210, 24247, 24538, 24593, 24901, 24903, 29029, 29124, 4, 8810, 8811, 30371, 30372, 1, 26673, 1, 25246, 68, 171, 252, 253, 270, 271, 294, 295, 328, 329, 358, 359, 465, 466, 474, 475, 476, 477, 478, 479, 488, 489, 550, 551, 552, 553, 556, 557, 558, 559, 709, 713, 768, 813, 858, 859, 1237, 1238, 1249, 1250, 6786, 6787, 6788, 6789, 6798, 6799, 6822, 6823, 6846, 6847, 6848, 6849, 6858, 6859, 6888, 6889, 7185, 7192, 7215, 7221, 7228, 7236, 16284, 16285, 16286, 16291, 16292, 16293, 16709, 1, 25057, 1, 30839, 37, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27166, 27167, 27168, 27169, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 1, 29823, 3, 11266, 11268, 16653, 4, 616, 8280, 14073, 14104, 33, 1546, 1650, 1651, 1707, 2102, 2118, 15834, 15835, 15979, 15980, 15981, 16063, 16064, 16073, 16091, 16092, 16101, 16142, 16143, 16144, 16209, 16237, 16426, 16427, 16428, 16429, 18577, 29605, 29632, 29647, 29667, 29694, 29719, 1, 29846, 40, 1057, 1089, 1693, 1694, 3854, 4211, 4463, 4469, 4998, 10270, 10317, 10559, 10689, 11247, 11248, 11341, 11342, 11458, 11843, 13334, 13626, 13767, 13768, 15765, 15766, 15772, 15773, 15790, 15791, 16603, 16643, 16702, 17338, 20397, 20429, 24193, 24825, 24857, 29022, 29244, 1, 18011, 1, 31622, 5, 1351, 1397, 6396, 19358, 24896, 27, 63, 187, 888, 1358, 1524, 4332, 5709, 7326, 7327, 7328, 8093, 9042, 9043, 9850, 9851, 10478, 10479, 10740, 11667, 13718, 13930, 16276, 16333, 16525, 19437, 29459, 32528, 20, 7915, 7999, 8556, 8557, 8558, 8559, 8667, 8668, 8669, 8670, 9527, 9528, 9529, 9530, 9531, 9532, 9618, 9619, 9620, 9621, 4, 31114, 31141, 31142, 31201, 1, 32605, 1, 7666, 2, 27104, 27108, 1, 31055, 1, 15345, 1, 25059, 1, 32319, 1, 9263, 1, 6265, 1, 1913, 1, 9278, 1, 11579, 1, 30725, 1, 22945, 1, 24014, 1, 13008, 1, 15580, 3, 9533, 9534, 9746, 1, 30345, 4, 7887, 7893, 7894, 7896, 1, 12314, 1, 7476, 1, 8885, 1, 22046, 1, 31819, 1, 24166, 1, 16747, 1, 32733, 1, 8778, 2, 17858, 23799, 55, 18646, 18647, 18648, 18649, 18650, 18651, 18652, 18653, 18654, 18655, 18656, 18657, 18658, 18659, 18660, 18661, 18662, 18663, 18664, 18665, 18666, 18667, 18668, 18669, 18670, 18671, 18672, 18673, 18674, 18675, 18676, 18677, 18678, 18679, 18680, 18681, 18682, 18683, 18684, 18685, 18686, 18687, 18688, 18689, 18690, 18691, 18692, 18693, 18694, 18695, 18696, 18697, 18698, 18699, 18700, 3, 5590, 17450, 17490, 2, 10987, 30311, 1, 7810, 1, 21111, 1, 16261, 2, 12797, 24412, 1, 7418, 1, 29316, 5, 1620, 15661, 15662, 15663, 15664, 1, 13095, 1, 17175, 1, 15573, 1, 9837, 1, 4981, 3, 9153, 9656, 9952, 1, 32668, 1, 9524, 1, 4814, 3, 2240, 2278, 20313, 2, 7485, 27599, 1, 18094, 1, 32061, 2, 3113, 24608, 1, 15067, 1, 15263, 1, 18090, 1, 17932, 1, 13031, 1, 12130, 1, 29825, 2, 1057, 1089, 24, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8659, 8660, 8667, 8668, 8669, 8670, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 1, 15558, 1, 32740, 1, 26999, 1, 12236, 1, 18075, 1, 14475, 1, 22678, 2, 12846, 13371, 1, 32789, 1, 26144, 32, 3124, 3145, 3229, 3849, 4216, 4462, 4468, 4770, 4999, 5336, 10273, 10320, 10579, 11249, 11250, 11343, 11344, 11453, 11844, 13330, 13357, 13665, 14748, 14749, 16604, 16644, 16697, 20399, 20431, 24602, 29024, 29248, 1, 24989, 1, 23884, 15, 7580, 7596, 8298, 8318, 8338, 8427, 9016, 11955, 12090, 24882, 27203, 30818, 31419, 31420, 31421, 1, 25842, 1, 13238, 2, 17898, 23843, 18, 3138, 3222, 4317, 4523, 4961, 5333, 11239, 11333, 12251, 13440, 13640, 14162, 14740, 14741, 16757, 18131, 24439, 29305, 1, 23974, 1, 30659, 1, 12960, 1, 23007, 2, 1343, 1389, 1, 7682, 1, 29813, 1, 13181, 8, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 1, 15466, 1, 26017, 1, 28887, 1, 30308, 1, 24177, 1, 23352, 1, 25406, 1, 23610, 1, 32170, 1, 15014, 3, 4445, 5042, 14960, 1, 23959, 1, 14831, 1, 23241, 1, 23283, 1, 23626, 2, 18914, 18965, 1, 23249, 1, 24693, 2, 13808, 13810, 94, 8258, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8446, 9037, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 29970, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30091, 30092, 30093, 30094, 30095, 31423, 31425, 1, 5397, 1, 20097, 1, 25848, 2, 27125, 27153, 2, 30219, 30220, 1, 27023, 1, 25332, 1, 8835, 2, 10379, 10380, 1, 16898, 5, 3286, 3485, 11121, 20607, 20613, 1, 13343, 1, 32238, 1, 13037, 1, 7762, 1, 5400, 1, 12219, 2, 12044, 12046, 1, 9425, 1, 25155, 1, 27226, 33, 4505, 6534, 6596, 7890, 7993, 7994, 8011, 8012, 8014, 8160, 8162, 8163, 8164, 8172, 8185, 8202, 8204, 8206, 9530, 9613, 9614, 9676, 9777, 10002, 10008, 10122, 10182, 10730, 10731, 11513, 23442, 23444, 31573, 4, 18813, 18814, 18913, 18964, 1, 24511, 1, 11934, 4, 3667, 3707, 6429, 10499, 1, 26440, 1, 30584, 1, 22270, 3, 5986, 5987, 5988, 1, 13123, 1, 12501, 1, 24739, 2, 18897, 18948, 7, 4094, 11262, 11356, 12425, 13610, 24662, 29346, 2, 1015, 1095, 1, 22293, 1, 26025, 1, 27141, 1, 12226, 1, 23733, 5, 3016, 11410, 17148, 17179, 18338, 1, 31797, 49, 1471, 1472, 1560, 1663, 1664, 1665, 1667, 1873, 2107, 6111, 15604, 15625, 15626, 15640, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15930, 15931, 15932, 15933, 15934, 15998, 15999, 16000, 16001, 16002, 16037, 16038, 16223, 16227, 16235, 16458, 16459, 16460, 16461, 17357, 18295, 18574, 29389, 29423, 29598, 29625, 29661, 1, 30312, 1, 9854, 6, 10822, 10823, 10824, 10825, 11010, 31654, 1, 18697, 3, 30307, 30806, 31684, 3, 1449, 15616, 15620, 1, 7862, 1, 6712, 1, 16932, 1, 18031, 1, 12321, 1, 7911, 1, 7890, 1, 23090, 1, 24731, 1, 26058, 1, 23924, 1, 17294, 1, 9404, 14, 3997, 4397, 11231, 11325, 11591, 11630, 11834, 13598, 14912, 16634, 21349, 21445, 21833, 29265, 1, 32477, 1, 23122, 7, 2050, 18810, 18811, 21162, 21479, 21480, 22174, 1, 23218, 1, 25847, 1, 27166, 1, 30313, 1, 30514, 1, 182, 2, 199, 231, 16, 4243, 4391, 4967, 11194, 11288, 11524, 12679, 13629, 14906, 17383, 21412, 21413, 21497, 21966, 22286, 29292, 1, 15167, 1, 12597, 1, 16865, 1, 26713, 1, 25600, 1, 32472, 1, 14981, 1, 3143, 1, 10627, 1, 3292, 1, 24208, 1, 25593, 8, 2372, 2373, 2548, 2716, 7416, 7433, 14189, 29523, 2, 4310, 4362, 1, 17974, 1, 8285, 1, 26067, 1, 11878, 1, 22495, 1, 24434, 1, 3906, 2, 18368, 25918, 1, 32277, 1, 7431, 1, 25985, 1, 3198, 2, 10896, 17101, 1, 727, 1, 20821, 8, 7903, 7904, 7905, 7906, 7959, 7960, 7961, 7962, 1, 11629, 1, 13115, 1, 7415, 1, 17980, 1, 30247, 1, 30558, 1, 608, 1, 12062, 9, 9006, 9012, 9026, 31404, 31408, 31409, 31414, 31418, 31421, 1, 30606, 1, 31634, 2, 8843, 8846, 1, 16269, 1, 31970, 1, 15160, 120, 1944, 2203, 2325, 2418, 2502, 2591, 2670, 2757, 2855, 2944, 3305, 3364, 3439, 3474, 3513, 4311, 4528, 4965, 5239, 5259, 5282, 5302, 5461, 5494, 5520, 5557, 5668, 5700, 5729, 5775, 5778, 5874, 5924, 5927, 5958, 5959, 6081, 6082, 6184, 6234, 6235, 6297, 11227, 11321, 11983, 12024, 12244, 13400, 13527, 13854, 14203, 14285, 14343, 14382, 14415, 14484, 14512, 14513, 14623, 14979, 15005, 16754, 17394, 17615, 17651, 18128, 18349, 18380, 18491, 18976, 19199, 19304, 19465, 19517, 19624, 19680, 19728, 19799, 19848, 19886, 19978, 20059, 20151, 20239, 20282, 20364, 20510, 20573, 20647, 20698, 20788, 20866, 20896, 20950, 21030, 21061, 21360, 21405, 21528, 21768, 21916, 21939, 21974, 22034, 24039, 24040, 24041, 24071, 24496, 24505, 24616, 24664, 24897, 24899, 26830, 26877, 29055, 29110, 29300, 30092, 1, 24355, 2, 27634, 27659, 1, 29843, 9, 7565, 7566, 7567, 8578, 8580, 8582, 8584, 8586, 8588, 4, 30228, 30229, 30230, 30231, 2, 1144, 1145, 1, 29347, 1, 16861, 1, 29802, 1, 19401, 2, 21531, 21532, 1, 7547, 1, 31938, 1, 9886, 1, 17726, 1, 15053, 2, 217, 249, 1, 27219, 1, 30155, 1, 1808, 1, 30413, 1, 3815, 1, 23259, 57, 438, 571, 572, 582, 583, 594, 633, 683, 1149, 1150, 1208, 1209, 1212, 1213, 1216, 1217, 1698, 6491, 6492, 6496, 6656, 7631, 7632, 9491, 9492, 9493, 9494, 9495, 9595, 9596, 9597, 9598, 10040, 10041, 10042, 10043, 10044, 10074, 10075, 10076, 10272, 10319, 10333, 10354, 10359, 10360, 14015, 14016, 16357, 19071, 19078, 19083, 26613, 31564, 31565, 31566, 31567, 2, 24037, 24205, 1, 26080, 1, 10566, 2, 9201, 9202, 1, 26310, 1, 31274, 1217, 10774, 10775, 10776, 10777, 10778, 10779, 10780, 10781, 10782, 10783, 10784, 10785, 10786, 10787, 10788, 10789, 10790, 10791, 10792, 10793, 10794, 10795, 10796, 10797, 10798, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10810, 10811, 10812, 10813, 10814, 10815, 10816, 10817, 10818, 10819, 10820, 10821, 10822, 10823, 10824, 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, 10836, 10837, 10838, 10839, 10840, 10841, 10842, 10843, 10844, 10845, 10846, 10847, 10848, 10849, 10850, 10851, 10852, 10853, 10854, 10855, 10856, 10857, 10858, 10859, 10860, 10861, 10862, 10863, 10864, 10865, 10866, 10867, 10868, 10869, 10870, 10871, 10872, 10873, 10874, 10875, 10876, 10877, 10878, 10879, 10880, 10881, 10882, 10883, 10884, 10885, 10886, 10887, 10888, 11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11558, 11559, 11560, 11561, 11562, 11563, 11564, 11565, 11566, 11567, 11568, 11569, 11570, 11571, 11572, 11573, 11574, 11575, 11576, 11577, 11578, 11579, 11580, 11581, 11582, 11583, 15113, 15114, 15115, 15116, 15117, 15118, 15119, 15120, 15121, 15122, 15123, 15124, 15125, 15126, 15127, 15128, 15129, 15130, 15131, 15132, 15133, 15134, 15135, 15136, 15137, 15138, 15139, 15140, 15141, 15142, 15143, 15144, 15145, 15146, 15147, 15148, 15149, 15150, 15151, 15152, 15153, 15154, 15155, 15156, 15157, 15158, 15159, 15160, 15161, 15162, 15163, 15164, 15165, 15166, 15167, 15168, 15169, 15170, 15171, 15172, 15173, 15174, 15175, 15176, 15177, 15178, 15179, 15180, 15181, 15182, 15183, 15184, 15185, 15186, 15187, 15188, 15189, 15190, 15191, 15192, 15193, 15194, 15195, 15196, 15197, 15198, 15199, 15200, 15201, 15202, 15203, 15204, 15205, 15206, 15207, 15208, 15209, 15210, 15211, 15212, 15213, 15214, 15215, 15216, 15217, 15218, 15219, 15220, 15221, 15222, 15223, 15224, 15225, 15226, 15227, 15228, 15229, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15240, 15241, 15242, 15243, 15244, 15245, 15246, 15247, 15248, 15249, 15250, 15251, 15252, 15253, 15254, 15255, 15256, 15257, 15258, 15259, 15260, 15261, 15262, 15263, 15264, 15265, 15266, 15267, 15268, 15269, 15270, 15271, 15272, 15273, 15274, 15275, 15276, 15277, 15278, 15279, 15280, 15281, 15282, 15283, 15284, 15285, 15286, 15287, 15288, 15289, 15290, 15291, 15292, 15293, 15294, 15295, 15296, 15297, 15298, 15299, 15300, 15301, 15302, 15303, 15304, 15305, 15306, 15307, 15308, 15309, 15310, 15311, 15312, 15313, 15314, 15315, 15316, 15317, 15318, 15319, 15320, 15321, 15322, 15323, 15324, 15325, 15326, 15327, 15328, 15329, 15330, 15331, 15332, 15333, 15334, 15335, 15336, 15337, 15338, 15339, 15340, 15341, 15342, 15343, 15344, 15345, 15346, 15347, 15348, 15349, 15350, 15351, 15352, 15353, 15354, 15355, 15356, 15357, 15358, 15359, 15360, 15361, 15362, 15363, 15364, 15365, 15366, 15367, 15368, 15369, 15370, 15371, 15372, 15373, 15374, 15375, 15376, 15377, 15378, 15379, 15380, 15381, 15382, 15383, 15384, 15385, 15386, 15387, 15388, 15389, 15390, 15391, 15392, 15393, 15394, 15395, 15396, 15397, 15398, 15399, 15400, 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15410, 15411, 15412, 15413, 15414, 15415, 15416, 15417, 15418, 15419, 15420, 15421, 15422, 15423, 15424, 15425, 15426, 15427, 15428, 15429, 15430, 15431, 15432, 15433, 15434, 15435, 15436, 15437, 15438, 15439, 15440, 15441, 15442, 15443, 15444, 15445, 15446, 15447, 15448, 15449, 15450, 15451, 15452, 15453, 15454, 15455, 15456, 15457, 15458, 15459, 15460, 15461, 15462, 15463, 15464, 15465, 15466, 15467, 15468, 15469, 15470, 15471, 15472, 15473, 15474, 15475, 15476, 15477, 15478, 15479, 15480, 15481, 15482, 15483, 15484, 15485, 15486, 15487, 15488, 15489, 15490, 15491, 15492, 15493, 15494, 15495, 15496, 15497, 15498, 15499, 15500, 15501, 15502, 15503, 15504, 15505, 15506, 15507, 15508, 15509, 15510, 15511, 15512, 15513, 15514, 15515, 15516, 15517, 15518, 15519, 15520, 15521, 15522, 15523, 15524, 15525, 15526, 15527, 15528, 15529, 15530, 15531, 15532, 15533, 15534, 15535, 15536, 15537, 15538, 15539, 15540, 15541, 15542, 15543, 15544, 15545, 15546, 15547, 15548, 15549, 15550, 15551, 15552, 15553, 15554, 15555, 15556, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15564, 15565, 15566, 15567, 15568, 15569, 15570, 15571, 15572, 15573, 15574, 15575, 15576, 15577, 15578, 15579, 15580, 15581, 15582, 15583, 15584, 30154, 30155, 30156, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30168, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30181, 30182, 30183, 30184, 30185, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 31954, 31955, 31956, 31957, 31958, 31959, 31960, 31961, 31962, 31963, 31964, 31965, 31966, 31967, 31968, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31976, 31977, 31978, 31979, 31980, 31981, 31982, 31983, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31992, 31993, 31994, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32010, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32032, 32033, 32034, 32035, 32036, 32037, 32038, 32039, 32040, 32041, 32042, 32043, 32044, 32045, 32046, 32047, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32110, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32119, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32166, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32174, 32175, 32176, 32177, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32187, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32315, 32316, 32317, 32318, 32319, 32320, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32386, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32411, 32412, 32413, 32414, 32415, 32416, 32417, 32418, 32419, 32420, 32421, 32422, 32423, 32424, 32425, 32426, 32427, 32428, 32429, 32430, 32431, 32432, 32433, 32434, 32435, 32436, 32437, 32438, 32439, 32440, 32441, 32442, 32443, 32444, 32445, 32446, 32447, 32448, 32449, 32450, 32451, 32452, 32453, 32454, 32455, 32456, 32457, 32458, 32459, 32460, 32461, 32462, 32463, 32464, 32465, 32466, 32467, 32468, 32469, 32470, 32471, 32472, 32473, 32474, 32475, 32476, 32477, 32478, 32479, 32480, 32481, 32482, 32483, 32484, 32485, 32486, 32487, 32488, 32489, 32490, 32491, 32492, 32493, 32494, 32495, 1, 29766, 1, 9817, 8, 3747, 3924, 11428, 11605, 11619, 11700, 11714, 16672, 1, 32009, 1, 32197, 1, 23137, 1, 25072, 1, 26369, 3, 3804, 3975, 11489, 3, 2248, 2280, 5971, 1, 22027, 1, 15366, 6, 1923, 3406, 4133, 4672, 19397, 24035, 6, 4238, 5008, 13474, 17449, 17489, 29237, 1, 4326, 2, 17944, 24006, 1, 3899, 1, 24771, 3, 13468, 24308, 29336, 1, 12716, 1, 13733, 1, 12446, 1, 23360, 1, 24000, 1, 26296, 3, 4748, 5641, 13583, 1, 29288, 1, 30328, 4, 6098, 6099, 14531, 14532, 18, 1293, 1294, 2249, 4060, 4859, 5345, 5462, 5495, 5735, 5755, 5756, 6174, 14225, 16759, 18364, 18392, 24930, 29052, 1, 7437, 1, 25292, 2, 3834, 3943, 2, 3782, 3968, 1, 10975, 1, 22543, 2, 1016, 1096, 1, 27031, 8, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 1, 18550, 1, 26044, 2, 4291, 5078, 1, 26683, 1, 31298, 1, 32143, 1, 31330, 1, 26166, 1, 3807, 9, 10776, 10777, 10778, 10893, 11515, 16986, 16991, 30108, 31657, 1, 30373, 1, 4096, 1, 10583, 4, 7324, 7325, 10726, 10727, 1, 26482, 1, 12939, 1, 25070, 1, 32203, 1, 4118, 1, 24086, 1, 12929, 1, 16903, 4, 4293, 4450, 5076, 14965, 1, 22897, 4, 1013, 1093, 1269, 1270, 1, 25943, 1, 17782, 1, 27070, 1, 10634, 12, 6048, 6050, 6052, 6054, 6056, 6060, 6095, 6101, 6103, 6106, 6107, 6109, 1, 10898, 1, 3034, 1, 12303, 1, 31687, 29, 5431, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5563, 5564, 1, 24492, 1, 9798, 1, 9526, 1, 27126, 1, 1908, 1, 26199, 1, 16912, 1, 9648, 1, 22602, 3, 3063, 3064, 3066, 1, 32376, 1, 22405, 1, 13041, 1, 26000, 2, 10475, 10476, 20, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5249, 1, 22939, 1, 7867, 1, 2047, 2, 7352, 9743, 1, 32078, 1, 25084, 4, 8003, 31348, 31359, 31365, 1, 3801, 113, 1538, 1622, 1623, 1626, 1833, 1834, 1856, 1857, 1860, 1870, 15803, 15808, 15814, 15823, 15825, 15826, 15828, 15831, 15834, 15837, 15840, 15848, 15853, 15859, 15866, 15872, 15878, 15888, 15954, 15959, 15964, 15969, 15971, 15972, 15976, 15979, 15983, 15986, 15993, 15996, 15999, 16004, 16009, 16013, 16021, 16057, 16058, 16068, 16085, 16086, 16096, 16104, 16111, 16114, 16123, 16124, 16125, 16128, 16130, 16131, 16132, 16133, 16134, 16135, 16137, 16138, 16142, 16143, 16145, 16146, 16152, 16155, 16156, 16168, 16170, 16171, 16172, 16177, 16178, 16179, 16180, 16181, 16182, 16189, 16190, 16206, 16209, 16210, 16211, 16214, 16219, 16220, 16221, 16224, 16229, 16230, 16231, 16234, 16402, 16403, 16404, 16405, 18565, 19350, 29060, 29595, 29623, 29641, 29658, 29685, 29710, 29730, 29731, 8, 8149, 8153, 8725, 8726, 8904, 8905, 27111, 31807, 172, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 14895, 14896, 14897, 14898, 14899, 14900, 14901, 14902, 14903, 14904, 14905, 14906, 14907, 14908, 14909, 14910, 14911, 14912, 14913, 14914, 14915, 14916, 14917, 14918, 14919, 14920, 14921, 14922, 14923, 14924, 14925, 14926, 14927, 14928, 14929, 14930, 14931, 14932, 14933, 14934, 14935, 14936, 14937, 14938, 14939, 14940, 14941, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14949, 14950, 14951, 14952, 14953, 14954, 14955, 14956, 14957, 14958, 14959, 14960, 14961, 14962, 14963, 14964, 14965, 14966, 14967, 14968, 14969, 14970, 14971, 14972, 14973, 14974, 1, 9511, 1, 23761, 1, 26114, 1, 8781, 1, 4233, 1, 18064, 1, 22649, 1, 11577, 1, 32743, 152, 56, 1597, 1741, 1932, 2271, 2368, 2456, 2545, 2636, 2705, 2805, 2901, 3004, 3107, 3195, 3275, 3321, 3330, 3564, 3644, 4341, 5413, 5448, 5718, 5833, 6001, 6011, 6126, 6219, 6352, 6365, 7372, 7388, 7576, 7592, 8294, 8314, 8334, 8443, 9010, 9011, 9012, 9014, 9015, 9024, 9025, 9033, 9034, 9084, 9094, 9104, 10900, 11155, 11638, 11687, 11734, 11778, 11788, 11951, 12086, 13743, 14327, 14337, 14369, 14562, 14590, 14674, 15029, 16518, 16946, 16964, 16973, 17217, 17235, 17593, 18408, 18424, 18433, 18451, 18460, 19022, 19031, 19049, 19245, 19266, 19369, 19432, 19566, 19581, 19761, 19937, 20023, 20194, 20274, 20326, 20466, 20831, 20840, 20993, 21056, 22062, 22069, 22075, 22084, 22098, 22124, 22125, 22165, 23893, 24639, 24757, 24878, 27199, 27305, 27314, 28277, 28287, 28297, 28307, 28317, 29096, 29156, 29363, 29456, 29467, 29485, 29494, 29517, 29535, 29553, 29562, 29580, 29746, 29755, 29764, 29884, 29898, 29913, 29928, 29967, 30111, 30814, 31396, 31397, 31398, 31399, 31400, 31415, 31416, 31417, 31418, 32521, 1, 12631, 46, 17085, 17086, 17087, 17088, 17089, 17090, 17091, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17110, 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17118, 17119, 17120, 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 1, 4767, 1, 16243, 4, 30661, 30897, 30898, 30899, 1, 6113, 1, 286, 1, 23734, 1, 29844, 1, 12337, 1, 12543, 1, 25065, 2, 13857, 24366, 12, 1554, 1555, 1556, 1697, 1863, 1864, 1865, 8746, 15798, 15799, 15800, 15801, 1, 22696, 1, 12246, 1, 29945, 1, 12997, 1, 24729, 2, 8937, 17514, 1, 30151, 1, 17286, 19, 4049, 4426, 4709, 5064, 11205, 11299, 11820, 12975, 13698, 14941, 16620, 16769, 17694, 18139, 18362, 18390, 18693, 24645, 29209, 6, 10831, 10832, 11017, 28589, 28590, 28591, 1, 13011, 2, 14815, 19391, 2, 13458, 29328, 1, 25854, 1, 6498, 1, 9726, 4, 1993, 2054, 7353, 12179, 62, 7024, 7025, 7032, 7033, 7040, 7041, 7046, 7047, 7052, 7053, 7060, 7061, 7068, 7069, 7076, 7077, 7084, 7085, 7090, 7091, 7096, 7097, 7103, 7108, 7109, 7116, 7117, 7122, 7124, 7126, 7128, 7130, 7132, 7134, 7138, 7139, 7146, 7147, 7154, 7155, 7162, 7163, 7170, 7171, 7178, 7179, 7186, 7193, 7201, 7206, 7208, 7211, 7216, 7222, 7224, 7229, 7237, 7240, 7242, 7243, 7248, 7250, 3, 30988, 31002, 31031, 4, 1439, 1444, 15599, 15614, 1, 32643, 7, 8074, 8083, 8084, 30565, 30566, 30567, 31708, 1, 12640, 122, 18341, 18342, 18343, 18344, 18345, 18346, 18347, 18348, 18349, 18350, 18351, 18352, 18353, 18354, 18355, 18356, 18357, 18358, 18359, 18360, 18361, 18362, 18363, 18364, 18365, 18366, 18367, 18368, 18369, 18370, 18371, 18372, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18384, 18385, 18386, 18387, 18388, 18389, 18390, 18391, 18392, 18393, 18394, 18395, 18396, 18397, 18398, 18399, 18400, 18401, 18402, 18403, 18404, 18405, 18406, 18407, 18408, 18409, 18410, 18411, 18412, 18413, 18414, 18415, 18416, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18425, 18426, 18427, 18428, 18429, 18430, 18431, 18432, 18433, 18434, 18435, 18436, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 2, 5129, 11528, 1, 9361, 1, 23431, 3, 9130, 31580, 31581, 1, 15121, 1, 13039, 1, 23650, 1, 39, 3, 4023, 4643, 19402, 1, 23980, 4, 21566, 21567, 21600, 21601, 1, 6133, 71, 1331, 1377, 1946, 1964, 2077, 2189, 2312, 2405, 2489, 2578, 2663, 2744, 2842, 2930, 3352, 3427, 3499, 4234, 5011, 5471, 5501, 5524, 5660, 5883, 6068, 6069, 6178, 6243, 6291, 13408, 13550, 14197, 14272, 14419, 14498, 14500, 14577, 14611, 14683, 16735, 17386, 17558, 18106, 18479, 18979, 19186, 19289, 19452, 19504, 19610, 19666, 19712, 19786, 19871, 19965, 20046, 20138, 20226, 20286, 20351, 20497, 20561, 20634, 20775, 20860, 20890, 20937, 21025, 21068, 29116, 29235, 1, 22271, 1, 5481, 1, 7410, 19, 3263, 4103, 4436, 4550, 11211, 11305, 11823, 12463, 13439, 13498, 13911, 14951, 16623, 16775, 18145, 21900, 21901, 24384, 29227, 1, 17311, 2, 8277, 31939, 3, 21086, 26953, 26987, 1, 22863, 1, 22810, 1, 8004, 3, 13591, 29283, 29288, 1, 15526, 2, 27494, 27517, 1, 32133, 1, 17860, 1, 25143, 1, 7928, 1, 28888, 3, 3779, 11480, 15085, 2, 27624, 27645, 2, 3780, 15086, 9, 4180, 4457, 4936, 12200, 13600, 14972, 17441, 17481, 29169, 1, 16727, 1, 22734, 1, 13309, 1, 22784, 1, 8686, 1, 23923, 2, 18356, 26045, 1, 12905, 1, 13101, 1, 25835, 1, 3890, 2, 1899, 4015, 69, 19694, 19695, 19696, 19697, 19698, 19699, 19700, 19701, 19702, 19703, 19704, 19705, 19706, 19707, 19708, 19709, 19710, 19711, 19712, 19713, 19714, 19715, 19716, 19717, 19718, 19719, 19720, 19721, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19739, 19740, 19741, 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752, 19753, 19754, 19755, 19756, 19757, 19758, 19759, 19760, 19761, 19762, 1, 8018, 1, 12458, 2, 31910, 31913, 1, 22512, 1, 22482, 2, 12903, 13396, 1, 14620, 12, 1467, 15622, 18162, 18193, 18228, 18604, 18713, 18743, 18770, 19063, 19100, 19143, 1, 25283, 2, 12442, 17710, 2, 16240, 16241, 1, 12366, 2, 10575, 10576, 1, 17276, 1, 10483, 1, 25337, 1, 26153, 1, 25640, 1, 27013, 1, 8028, 2, 14156, 14818, 1, 25781, 10, 9595, 9596, 9597, 9598, 10874, 11083, 30316, 30378, 30502, 30503, 1, 32478, 1, 29293, 2, 17868, 23807, 1, 23388, 1, 30655, 2, 17566, 17755, 1, 15020, 84, 28615, 28617, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28625, 28626, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28638, 28639, 28640, 28641, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28725, 28726, 28727, 28728, 28729, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28740, 28741, 28742, 28743, 28744, 28748, 28749, 28750, 28751, 28755, 28756, 28757, 28802, 28803, 28804, 28805, 28812, 28813, 28816, 28817, 28832, 28833, 28835, 28935, 1, 26148, 2, 4596, 4597, 1, 13302, 1, 30573, 56, 14191, 14192, 14193, 14194, 14195, 14196, 14197, 14198, 14199, 14200, 14201, 14202, 14203, 14204, 14205, 14206, 14207, 14208, 14209, 14210, 14211, 14212, 14213, 14214, 14215, 14216, 14217, 14218, 14219, 14220, 14221, 14222, 14223, 14224, 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14240, 14241, 14242, 14243, 14244, 14245, 14246, 1, 15038, 1, 16814, 1, 15272, 2, 21537, 21538, 1, 22629, 1, 29873, 2, 27571, 27592, 1, 11759, 1, 7308, 1, 22474, 1, 26070, 1, 26187, 56, 24118, 24119, 24120, 24121, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24129, 24130, 24131, 24132, 24133, 24134, 24135, 24136, 24137, 24138, 24139, 24140, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24148, 24149, 24150, 24151, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24159, 24160, 24161, 24162, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 1, 32659, 3, 26783, 26784, 26785, 1, 30510, 2, 17882, 23824, 1, 32101, 1, 26479, 1, 15354, 1, 30727, 1, 25462, 1, 6146, 1, 164, 1, 25511, 1, 29875, 1, 31737, 1, 9284, 1, 25973, 21, 723, 796, 7337, 7375, 7391, 7743, 7747, 7781, 7791, 7875, 7884, 9045, 9109, 9531, 9768, 9769, 9770, 9771, 9785, 9792, 9835, 1, 31691, 1, 14821, 1, 25595, 14, 31914, 31915, 31916, 31917, 31918, 31919, 31920, 31921, 31922, 31923, 31924, 31925, 31926, 31927, 1, 22738, 1, 17281, 1, 31966, 2, 7502, 27654, 4, 21151, 21473, 22122, 22123, 2, 17867, 23806, 1, 30264, 1, 9208, 1, 25199, 1, 23423, 2, 165, 11761, 1, 11531, 1, 24223, 2, 18887, 18938, 1, 17715, 1, 25580, 2, 13233, 13383, 1, 15533, 1, 1508, 2, 17950, 24013, 2, 641, 9126, 3, 889, 998, 13328, 1, 18030, 1, 9546, 86, 7621, 7622, 7685, 7686, 7711, 9111, 9139, 9142, 9504, 9505, 9508, 9509, 9511, 9512, 9513, 9516, 9517, 9519, 9985, 9986, 9993, 9994, 10062, 10074, 10076, 10087, 10088, 10101, 10102, 18531, 18532, 18533, 18534, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18546, 18547, 18548, 18549, 18550, 18551, 18552, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18560, 18561, 18562, 29733, 31064, 31066, 31068, 31070, 31072, 31074, 31076, 31078, 31080, 31082, 31084, 31086, 31512, 31513, 31522, 31523, 31530, 31531, 31538, 31539, 31546, 31547, 31554, 31555, 1, 16845, 1, 25004, 1, 32242, 1, 10613, 1, 13122, 26, 95, 7973, 8055, 8069, 8070, 8071, 8072, 8073, 8091, 8099, 8100, 8101, 8102, 9610, 9611, 9635, 9636, 9674, 9755, 9776, 9822, 9823, 9824, 9826, 9890, 9959, 1, 31659, 1, 25161, 1, 10630, 106, 126, 191, 205, 209, 223, 237, 241, 292, 293, 356, 357, 411, 552, 553, 615, 728, 755, 767, 812, 816, 826, 838, 860, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6747, 6792, 6793, 6810, 6811, 6842, 6843, 6844, 6845, 6882, 6883, 6886, 6887, 6890, 6891, 6936, 6937, 6946, 6947, 6954, 6955, 6962, 6963, 6980, 6981, 6990, 6991, 7004, 7005, 7014, 7015, 7785, 7786, 7790, 7791, 7800, 7930, 8085, 8088, 8090, 8094, 8095, 9585, 9586, 9587, 9699, 9763, 9765, 9833, 9834, 9842, 9926, 9927, 9970, 10048, 10054, 10056, 10058, 10059, 10331, 10721, 10724, 10725, 10741, 14847, 14885, 16282, 16283, 16289, 16290, 16588, 32591, 1, 22522, 1, 25840, 1, 25885, 1, 31240, 3, 3335, 3465, 3478, 1, 32741, 1, 9434, 1, 5612, 40, 2229, 2257, 2345, 2356, 2524, 2533, 2613, 2624, 2780, 2793, 2878, 2889, 2970, 2992, 3018, 3395, 3575, 3579, 14256, 14306, 17201, 19172, 19223, 19490, 19537, 19822, 19833, 19856, 19908, 19951, 19997, 20032, 20078, 20124, 20171, 20384, 20485, 20531, 20762, 20807, 1, 25124, 1, 12401, 2, 3898, 11503, 1, 8695, 4, 31048, 31049, 31341, 31350, 1, 7863, 2, 13856, 24555, 1, 25174, 1, 23589, 1, 7525, 1, 4034, 1, 12497, 2, 30405, 30426, 4, 13787, 13788, 13791, 13792, 1, 22947, 2, 28450, 28923, 1, 16777, 1, 15118, 1, 24414, 1, 22263, 2, 22261, 22339, 2, 3958, 14461, 2, 22851, 29249, 1, 6196, 213, 29159, 29160, 29161, 29162, 29163, 29164, 29165, 29166, 29167, 29168, 29169, 29170, 29171, 29172, 29173, 29174, 29175, 29176, 29177, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29190, 29191, 29192, 29193, 29194, 29195, 29196, 29197, 29198, 29199, 29200, 29201, 29202, 29203, 29204, 29205, 29206, 29207, 29208, 29209, 29210, 29211, 29212, 29213, 29214, 29215, 29216, 29217, 29218, 29219, 29220, 29221, 29222, 29223, 29224, 29225, 29226, 29227, 29228, 29229, 29230, 29231, 29232, 29233, 29234, 29235, 29236, 29237, 29238, 29239, 29240, 29241, 29242, 29243, 29244, 29245, 29246, 29247, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29255, 29256, 29257, 29258, 29259, 29260, 29261, 29262, 29263, 29264, 29265, 29266, 29267, 29268, 29269, 29270, 29271, 29272, 29273, 29274, 29275, 29276, 29277, 29278, 29279, 29280, 29281, 29282, 29283, 29284, 29285, 29286, 29287, 29288, 29289, 29290, 29291, 29292, 29293, 29294, 29295, 29296, 29297, 29298, 29299, 29300, 29301, 29302, 29303, 29304, 29305, 29306, 29307, 29308, 29309, 29310, 29311, 29312, 29313, 29314, 29315, 29316, 29317, 29318, 29319, 29320, 29321, 29322, 29323, 29324, 29325, 29326, 29327, 29328, 29329, 29330, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29343, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29356, 29357, 29358, 29359, 29360, 29361, 29362, 29363, 29364, 29365, 29366, 29367, 29368, 29369, 29370, 29371, 49, 17085, 17086, 17087, 17088, 17089, 17090, 17091, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17107, 17108, 17109, 17110, 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17118, 17119, 17120, 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 30662, 30911, 31664, 1, 22561, 41, 886, 887, 1009, 1010, 1798, 1801, 1804, 1805, 1808, 6703, 6704, 7347, 8651, 9488, 9624, 10009, 10039, 10695, 10698, 10699, 10701, 10702, 10713, 10716, 10768, 10941, 10993, 13939, 13940, 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 20098, 20099, 20100, 20101, 18, 8787, 8793, 8896, 8898, 29890, 29904, 29919, 29934, 31830, 31839, 31845, 31851, 31860, 31866, 31872, 31881, 31887, 31893, 1, 17812, 1, 9558, 1, 16809, 1, 27033, 1, 17206, 2, 19381, 24305, 1, 9074, 1, 31190, 4, 1404, 3487, 3489, 31612, 2, 358, 359, 1, 678, 3, 13707, 29282, 29287, 1, 26242, 1, 27178, 1, 29239, 2, 4221, 19395, 1, 22521, 1, 11914, 2, 24031, 24174, 1, 15525, 1, 1889, 109, 1955, 2211, 2332, 2425, 2509, 2598, 2675, 2765, 2863, 2952, 3260, 3379, 3454, 3520, 3588, 4004, 4399, 4690, 4805, 5023, 5243, 5264, 5287, 5306, 5344, 5465, 5675, 5703, 5728, 5783, 5786, 5888, 5935, 5954, 5955, 6055, 6056, 6088, 6102, 6103, 6191, 6257, 6258, 6311, 6367, 12628, 13416, 13541, 13853, 14216, 14292, 14389, 14423, 14520, 14633, 14650, 14914, 17407, 17610, 17646, 18113, 18357, 18385, 18498, 18993, 19206, 19311, 19471, 19524, 19632, 19687, 19736, 19806, 19895, 19985, 20066, 20158, 20246, 20290, 20303, 20371, 20517, 20587, 20604, 20660, 20670, 20700, 20795, 20879, 20908, 20957, 21014, 21072, 21234, 21309, 21334, 21345, 21355, 21573, 21655, 21762, 22220, 22306, 24553, 24627, 24919, 29038, 29108, 29214, 3, 10879, 11093, 30527, 2, 17620, 17656, 1, 12250, 61, 817, 819, 1025, 1036, 1068, 1105, 1149, 1150, 1967, 1968, 1969, 2022, 2023, 2165, 2175, 2179, 2231, 2235, 4373, 4510, 4512, 7443, 8191, 8192, 9537, 9538, 9539, 9949, 9950, 9951, 9958, 9959, 9960, 10061, 10062, 10078, 10940, 11060, 14069, 14869, 14870, 14881, 17433, 17434, 17435, 17436, 17437, 17438, 17473, 17474, 17475, 17476, 17477, 17478, 18901, 18952, 19556, 20001, 20004, 26570, 26895, 1, 4872, 2, 3042, 3043, 2, 21119, 21120, 1, 25168, 1, 31321, 4, 26698, 26699, 26711, 26743, 1, 22684, 1, 12712, 1, 24423, 1, 32602, 2, 3343, 3344, 1, 6709, 1, 9326, 1, 15450, 1, 19386, 1, 23943, 1, 31194, 1, 15581, 1, 30369, 2, 4256, 12735, 1, 25560, 1, 12385, 1, 12715, 1, 27294, 1, 25851, 87, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 7418, 30101, 30232, 30241, 1, 24066, 1, 5161, 1, 22556, 1, 22469, 1, 25200, 1, 31303, 18, 9010, 31384, 31385, 31386, 31387, 31388, 31389, 31390, 31391, 31392, 31393, 31394, 31395, 31396, 31397, 31398, 31399, 31400, 1, 30222, 1, 25069, 42, 18793, 18796, 18799, 18800, 18802, 18804, 18806, 18808, 18810, 18812, 18813, 18815, 18817, 18819, 18821, 18823, 18825, 18826, 18827, 18828, 18829, 18831, 18833, 18835, 18838, 18840, 18841, 18842, 18843, 18845, 18847, 18849, 18851, 18853, 18854, 18855, 18856, 18858, 18860, 18862, 18864, 18865, 2, 22418, 23494, 1, 13488, 1, 25858, 1, 3605, 1, 5015, 4, 12535, 13618, 24132, 29335, 1, 17798, 2, 31180, 31817, 1, 26372, 30, 18707, 18708, 18709, 18710, 18711, 18712, 18713, 18714, 18715, 18716, 18717, 18718, 18719, 18720, 18721, 18722, 18723, 18724, 18725, 18726, 18727, 18728, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, 1, 22707, 7, 4089, 13454, 17118, 17445, 17485, 29189, 30500, 1, 15037, 1, 15332, 2, 21992, 21993, 1, 22652, 2, 30388, 31660, 1, 26093, 2, 31908, 31911, 1, 25557, 2, 28973, 28978, 1, 23097, 1, 5615, 1, 22752, 1, 26246, 1, 32387, 1, 23683, 1, 13501, 10, 625, 1243, 1244, 1245, 1246, 6514, 6558, 6688, 14839, 14842, 1, 23588, 1, 12930, 1, 23919, 3, 24139, 24185, 24197, 12, 21160, 21492, 21820, 21821, 21822, 21823, 21824, 21825, 21826, 21827, 21828, 21934, 2, 13486, 29272, 1, 32768, 1, 31167, 1, 7463, 1, 23266, 1, 21270, 1, 15479, 1, 10655, 1, 29219, 1, 18038, 1, 30700, 1, 9232, 1, 4081, 1, 32193, 1, 25342, 1, 22656, 1, 32172, 6, 6053, 6054, 6100, 6101, 6105, 6107, 2, 22800, 29160, 1, 18015, 1, 24713, 1, 25351, 1, 17354, 1, 32754, 1, 30602, 1, 32208, 2, 30158, 30200, 1, 17705, 2, 5542, 5543, 1, 187, 1, 16778, 1, 32000, 137, 55, 1596, 1740, 1931, 2270, 2367, 2455, 2544, 2635, 2704, 2804, 2900, 3003, 3106, 3194, 3274, 3320, 3329, 3563, 3643, 4340, 5412, 5447, 5717, 5832, 6000, 6010, 6125, 6218, 6351, 6364, 7371, 7387, 7567, 7575, 7591, 8293, 8313, 8333, 8442, 8582, 8584, 9083, 9093, 9103, 11154, 11637, 11686, 11733, 11777, 11787, 11950, 12085, 13742, 14326, 14336, 14368, 14561, 14589, 14673, 15028, 16517, 16945, 16963, 16972, 17216, 17234, 17592, 18407, 18423, 18432, 18450, 18459, 19021, 19030, 19048, 19244, 19265, 19368, 19431, 19565, 19580, 19760, 19936, 20022, 20193, 20273, 20325, 20465, 20830, 20839, 20992, 21055, 22061, 22068, 22074, 22083, 22097, 22121, 22122, 22123, 22164, 24386, 24638, 24756, 24877, 27198, 27304, 27313, 28276, 28286, 28296, 28306, 28316, 29095, 29155, 29362, 29455, 29466, 29484, 29493, 29516, 29534, 29552, 29561, 29579, 29745, 29754, 29763, 29883, 29897, 29912, 29927, 29966, 30113, 30813, 32520, 1, 7834, 1, 24782, 10, 26920, 26921, 26922, 26923, 26924, 26925, 26926, 27096, 27097, 27110, 2, 12340, 13373, 1, 15300, 18, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 1, 29131, 1, 7485, 1, 4376, 5, 26660, 26672, 26722, 26884, 26886, 22, 1050, 1082, 1193, 1194, 1195, 1196, 1199, 1200, 1201, 1202, 1214, 1215, 1255, 1256, 3337, 4276, 5083, 10679, 13058, 13395, 17265, 17670, 1, 32647, 1, 23978, 1, 26139, 2, 9812, 9813, 1, 30121, 2, 26688, 26761, 1, 29828, 2, 17899, 23844, 4, 3766, 3922, 11426, 16670, 1, 17783, 8, 893, 26722, 26723, 26769, 26771, 26787, 26792, 26838, 13, 6279, 6280, 6281, 6282, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 19813, 1, 1988, 2, 260, 261, 1, 29216, 2, 24783, 24784, 1, 32223, 4, 1995, 2012, 2013, 13332, 1, 32187, 1, 25191, 1, 26669, 3, 1645, 15701, 15702, 3, 28595, 30762, 31629, 1, 28943, 1, 15071, 1, 26292, 3, 4816, 13572, 29254, 2, 3291, 3481, 4, 1534, 1688, 16388, 16389, 7, 5205, 11016, 17552, 30276, 30277, 30537, 31763, 1, 24727, 4, 7736, 7737, 7738, 9957, 4, 21253, 21254, 21848, 22188, 2, 8246, 8248, 1, 15440, 1, 32712, 2, 22444, 23524, 2, 30233, 30235, 1, 13248, 1, 22739, 1, 30600, 1, 9122, 1, 9557, 1, 29954, 1, 26905, 1, 15471, 56, 254, 255, 272, 273, 282, 283, 296, 297, 330, 331, 360, 361, 510, 511, 514, 515, 518, 519, 522, 523, 526, 527, 530, 531, 724, 770, 781, 810, 811, 856, 857, 861, 1204, 1205, 1219, 1220, 1225, 1226, 6762, 6794, 6795, 6808, 6809, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 8190, 14882, 26980, 2, 18265, 18555, 1, 25895, 1, 7872, 1, 9780, 6, 10866, 10867, 10868, 10869, 11072, 17539, 1, 13276, 31, 1547, 1744, 15836, 15837, 15838, 15839, 15982, 15983, 15984, 15985, 16065, 16066, 16074, 16093, 16094, 16102, 16152, 16153, 16154, 16211, 16430, 16431, 16432, 16433, 18582, 29613, 29638, 29651, 29673, 29702, 29727, 1, 5643, 1, 22462, 1, 8163, 1, 24307, 1, 8827, 1, 9717, 1, 24959, 2, 17848, 23790, 1, 1146, 1, 25811, 1, 22483, 52, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, 7604, 7606, 7607, 7608, 7609, 17072, 17073, 17074, 17075, 17076, 17077, 17078, 17079, 17080, 17081, 17082, 17083, 1, 26493, 2, 21523, 21876, 2, 7563, 22148, 1, 26712, 1, 19338, 1, 25910, 1, 23604, 2, 31121, 31122, 1, 7967, 1, 12948, 2, 27629, 27651, 1, 26223, 2, 30647, 30655, 1, 32310, 1, 12749, 1, 12270, 1, 9267, 12, 21174, 21243, 21529, 21624, 21741, 21750, 21812, 21983, 21984, 21985, 21986, 21987, 1, 24146, 1, 32476, 1, 1761, 58, 20276, 20277, 20278, 20279, 20280, 20281, 20282, 20283, 20284, 20285, 20286, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 20294, 20295, 20296, 20297, 20298, 20299, 20300, 20301, 20302, 20303, 20304, 20305, 20306, 20307, 20308, 20309, 20310, 20311, 20312, 20313, 20314, 20315, 20316, 20317, 20318, 20319, 20320, 20321, 20322, 20323, 20324, 20325, 20326, 20327, 20328, 20329, 20330, 20331, 20332, 20333, 1, 22480, 1, 23228, 1, 26014, 1, 26323, 1, 30188, 1, 30513, 1, 8876, 2, 188, 220, 1, 22627, 1, 30291, 1, 32090, 1, 7498, 1, 13056, 1, 25671, 1, 18085, 1, 10536, 1, 5390, 1, 23011, 1, 30417, 3, 10258, 10305, 29013, 1, 22974, 1, 17069, 3, 10256, 10303, 29011, 1, 3936, 1, 24167, 2, 26678, 26776, 1, 12345, 2, 22840, 29215, 13, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26821, 26822, 26823, 1, 16760, 1, 31174, 46, 1320, 1366, 2252, 2445, 3375, 3450, 3613, 4194, 5053, 5479, 5529, 5561, 5576, 6179, 11200, 11294, 12841, 13378, 13419, 13547, 14212, 14377, 14698, 16782, 17409, 17629, 17665, 18154, 18503, 18988, 20583, 20656, 20703, 20875, 20905, 21699, 21787, 21912, 21995, 21996, 21997, 22043, 22178, 24956, 29040, 29117, 1, 22012, 1, 9965, 1, 23738, 1, 14707, 4, 3750, 3927, 11432, 16676, 1, 12818, 1, 16920, 1, 22919, 1, 26206, 1, 29165, 8, 8299, 8319, 8339, 8428, 11956, 12091, 24883, 27204, 1, 26295, 1, 7650, 1, 17260, 1, 32417, 5, 4465, 4471, 12038, 12040, 30030, 1, 16741, 1, 18853, 2, 17946, 24009, 2, 10433, 10434, 1, 30921, 2222, 3281, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 5432, 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593, 10594, 10595, 10596, 10597, 10598, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10607, 10608, 10609, 10610, 10611, 10612, 10613, 10614, 10615, 10616, 10617, 10618, 10619, 10620, 10621, 10622, 10623, 10624, 10625, 10626, 10627, 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10649, 10650, 10651, 10652, 10653, 10654, 10655, 10656, 10657, 10658, 10659, 10660, 10661, 12179, 12180, 12181, 12182, 12183, 12184, 12185, 12186, 12187, 12188, 12189, 12190, 12191, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12209, 12210, 12211, 12212, 12213, 12214, 12215, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223, 12224, 12225, 12226, 12227, 12228, 12229, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12250, 12251, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 12259, 12260, 12261, 12262, 12263, 12264, 12265, 12266, 12267, 12268, 12269, 12270, 12271, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12284, 12285, 12286, 12287, 12288, 12289, 12290, 12291, 12292, 12293, 12294, 12295, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12440, 12441, 12442, 12443, 12444, 12445, 12446, 12447, 12448, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12540, 12541, 12542, 12543, 12544, 12545, 12546, 12547, 12548, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 12586, 12587, 12588, 12589, 12590, 12591, 12592, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 12687, 12688, 12689, 12690, 12691, 12692, 12693, 12694, 12695, 12696, 12697, 12698, 12699, 12700, 12701, 12702, 12703, 12704, 12705, 12706, 12707, 12708, 12709, 12710, 12711, 12712, 12713, 12714, 12715, 12716, 12717, 12718, 12719, 12720, 12721, 12722, 12723, 12724, 12725, 12726, 12727, 12728, 12729, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, 12750, 12751, 12752, 12753, 12754, 12755, 12756, 12757, 12758, 12759, 12760, 12761, 12762, 12763, 12764, 12765, 12766, 12767, 12768, 12769, 12770, 12771, 12772, 12773, 12774, 12775, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 12794, 12795, 12796, 12797, 12798, 12799, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 12828, 12829, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847, 12848, 12849, 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12858, 12859, 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12868, 12869, 12870, 12871, 12872, 12873, 12874, 12875, 12876, 12877, 12878, 12879, 12880, 12881, 12882, 12883, 12884, 12885, 12886, 12887, 12888, 12889, 12890, 12891, 12892, 12893, 12894, 12895, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 12924, 12925, 12926, 12927, 12928, 12929, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12945, 12946, 12947, 12948, 12949, 12950, 12951, 12952, 12953, 12954, 12955, 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12963, 12964, 12965, 12966, 12967, 12968, 12969, 12970, 12971, 12972, 12973, 12974, 12975, 12976, 12977, 12978, 12979, 12980, 12981, 12982, 12983, 12984, 12985, 12986, 12987, 12988, 12989, 12990, 12991, 12992, 12993, 12994, 12995, 12996, 12997, 12998, 12999, 13000, 13001, 13002, 13003, 13004, 13005, 13006, 13007, 13008, 13009, 13010, 13011, 13012, 13013, 13014, 13015, 13016, 13017, 13018, 13019, 13020, 13021, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031, 13032, 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042, 13043, 13044, 13045, 13046, 13047, 13048, 13049, 13050, 13051, 13052, 13053, 13054, 13055, 13056, 13057, 13058, 13059, 13060, 13061, 13062, 13063, 13064, 13065, 13066, 13067, 13068, 13069, 13070, 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13081, 13082, 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093, 13094, 13095, 13096, 13097, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107, 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, 13119, 13120, 13121, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131, 13132, 13133, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13148, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170, 13171, 13172, 13173, 13174, 13175, 13176, 13177, 13178, 13179, 13180, 13181, 13182, 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13192, 13193, 13194, 13195, 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251, 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13274, 13275, 13276, 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13295, 13296, 13297, 13298, 13299, 13300, 13301, 13302, 13303, 13304, 13305, 13306, 13307, 13308, 13309, 13310, 13311, 13312, 13313, 13314, 13315, 13316, 13317, 13318, 13319, 13320, 13321, 13322, 13323, 13324, 13325, 13326, 13327, 13328, 13329, 13330, 13331, 13332, 13333, 13334, 13335, 13336, 13337, 13338, 13339, 13340, 13341, 13342, 13343, 13447, 13448, 13449, 13450, 13451, 13452, 13453, 13454, 13455, 13456, 13457, 13458, 13459, 13460, 13461, 13462, 13463, 13464, 13465, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, 13478, 13479, 13480, 13481, 13482, 13483, 13484, 13485, 13486, 13487, 13488, 13489, 13490, 13491, 13492, 13493, 13494, 13495, 13496, 13497, 13498, 13499, 13500, 13501, 13502, 13503, 13504, 13505, 13506, 13507, 13508, 13509, 13510, 13511, 13512, 13513, 13514, 13515, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13524, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13534, 13535, 13536, 13537, 13538, 13539, 13540, 13541, 13542, 13543, 13544, 13545, 13546, 13547, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13558, 13559, 13560, 13561, 13562, 13563, 13564, 13565, 13566, 13567, 13568, 13569, 13570, 13571, 13572, 13573, 13574, 13575, 13576, 13577, 13578, 13579, 13580, 13581, 13582, 13583, 13584, 13585, 13586, 13587, 13588, 13589, 13590, 13591, 13592, 13593, 13594, 13595, 13596, 13597, 13598, 13599, 13600, 13601, 13602, 13603, 13604, 13605, 13606, 13607, 13608, 13609, 13610, 13611, 13612, 13613, 13614, 13615, 13616, 13617, 13618, 13619, 13620, 13621, 13622, 13623, 13624, 13625, 13626, 13627, 13628, 13629, 13630, 13631, 13632, 13633, 13634, 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13644, 13645, 13646, 13647, 13648, 13649, 13650, 13651, 13652, 13653, 13654, 13655, 13656, 13657, 13658, 13659, 13660, 13661, 13662, 13663, 13664, 13665, 13666, 13667, 13668, 13669, 13670, 13671, 13672, 13673, 13674, 13675, 13676, 13677, 13678, 13679, 13680, 13681, 13682, 13683, 13684, 13685, 13686, 13687, 13688, 13689, 13690, 13691, 13692, 13693, 13694, 13695, 13696, 13697, 13698, 13699, 13700, 13701, 13702, 13703, 13704, 13705, 13706, 13707, 13708, 13709, 13710, 13711, 13712, 13713, 13714, 13715, 13719, 13720, 13721, 13745, 13746, 14803, 14807, 14808, 14809, 14810, 14811, 14812, 14813, 14814, 14815, 14816, 14817, 14818, 14819, 14820, 14821, 14822, 14823, 14824, 14825, 14826, 14827, 14828, 14829, 14830, 14831, 14832, 14833, 14834, 14835, 14836, 14837, 14838, 16725, 16726, 16727, 16728, 16729, 16730, 16731, 16732, 16733, 16734, 16735, 16736, 16737, 16738, 16739, 16740, 16741, 16742, 16743, 16744, 16745, 16746, 16747, 16748, 16749, 16750, 16751, 16752, 16753, 16754, 16755, 16756, 16757, 16758, 16759, 16760, 16761, 16762, 16763, 16764, 16765, 16766, 16767, 16768, 16769, 16770, 16771, 16772, 16773, 16774, 16775, 16776, 16777, 16778, 16779, 16780, 16781, 16782, 16783, 16784, 16785, 16786, 16787, 16788, 16789, 16790, 16791, 16792, 16793, 16794, 16795, 16796, 16797, 16798, 18101, 18102, 18103, 18104, 18105, 18106, 18107, 18108, 18109, 18110, 18111, 18112, 18113, 18114, 18115, 18116, 18117, 18118, 18119, 18120, 18121, 18122, 18123, 18124, 18125, 18126, 18127, 18128, 18129, 18130, 18131, 18132, 18133, 18134, 18135, 18136, 18137, 18138, 18139, 18140, 18141, 18142, 18143, 18144, 18145, 18146, 18147, 18148, 18149, 18150, 18151, 18152, 18153, 18154, 18155, 29087, 29159, 29160, 29161, 29162, 29163, 29164, 29165, 29166, 29167, 29168, 29169, 29170, 29171, 29172, 29173, 29174, 29175, 29176, 29177, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29190, 29191, 29192, 29193, 29194, 29195, 29196, 29197, 29198, 29199, 29200, 29201, 29202, 29203, 29204, 29205, 29206, 29207, 29208, 29209, 29210, 29211, 29212, 29213, 29214, 29215, 29216, 29217, 29218, 29219, 29220, 29221, 29222, 29223, 29224, 29225, 29226, 29227, 29228, 29229, 29230, 29231, 29232, 29233, 29234, 29235, 29236, 29237, 29238, 29239, 29240, 29241, 29242, 29243, 29244, 29245, 29246, 29247, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29255, 29256, 29257, 29258, 29259, 29260, 29261, 29262, 29263, 29264, 29265, 29266, 29267, 29268, 29269, 29270, 29271, 29272, 29273, 29274, 29275, 29276, 29277, 29278, 29279, 29280, 29281, 29282, 29283, 29284, 29285, 29286, 29287, 29288, 29289, 29290, 29291, 29292, 29293, 29294, 29295, 29296, 29297, 29298, 29299, 29300, 29301, 29302, 29303, 29304, 29305, 29306, 29307, 29308, 29309, 29310, 29311, 29312, 29313, 29314, 29315, 29316, 29317, 29318, 29319, 29320, 29321, 29322, 29323, 29324, 29325, 29326, 29327, 29328, 29329, 29330, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29343, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 1, 10230, 1, 23319, 1, 13457, 2, 24107, 24407, 1, 12571, 1, 7852, 1, 12996, 3, 7299, 7359, 12252, 1, 15072, 1, 15406, 1, 23078, 1, 26737, 3, 10397, 10398, 10467, 3, 29505, 29507, 29527, 3, 28838, 28839, 28840, 1, 12945, 1, 12447, 1, 12156, 1, 23187, 1, 25681, 1, 17278, 1, 5209, 1, 29862, 2, 9021, 9024, 1, 15306, 1, 25269, 1, 9414, 1, 25510, 1, 25731, 1, 12795, 2, 26860, 26861, 1, 12357, 2, 13652, 14160, 2, 6130, 14545, 1, 9347, 1, 25930, 2, 8752, 12170, 1, 12700, 1, 24650, 1, 27101, 1, 25795, 15, 28653, 28654, 28655, 28704, 28705, 28706, 28770, 28771, 28772, 28785, 28786, 28787, 28798, 28799, 28800, 19, 184, 185, 186, 7553, 7554, 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7610, 1, 7903, 1, 32100, 2, 30932, 30935, 1, 26399, 1, 27046, 73, 2076, 2186, 2309, 2402, 2486, 2575, 2661, 2741, 2839, 2927, 3349, 3402, 3424, 3496, 3582, 4875, 5235, 5255, 5278, 5298, 5549, 5566, 5657, 5696, 5722, 5759, 5762, 5872, 5906, 5957, 6065, 6176, 6256, 6288, 12789, 13420, 13896, 14194, 14269, 14374, 14411, 14485, 14486, 14495, 14608, 19000, 19183, 19286, 19501, 19607, 19709, 19783, 19867, 19962, 20043, 20135, 20223, 20278, 20348, 20494, 20558, 20631, 20705, 20772, 20857, 20887, 20934, 21029, 21060, 24529, 24932, 24934, 29129, 1, 22515, 1, 25819, 1, 25484, 1, 9574, 1, 9600, 3, 10819, 11006, 29768, 13, 8611, 8612, 8613, 8614, 8615, 8616, 8652, 11178, 28971, 28972, 28973, 28974, 28975, 1, 26718, 1, 11038, 17, 28320, 28326, 28332, 28334, 28346, 28350, 28437, 28454, 28467, 28480, 28484, 28489, 28496, 28506, 28518, 28525, 28532, 1, 24356, 1, 9445, 1, 21556, 1, 17040, 1, 13070, 1, 843, 1, 31822, 1, 22653, 2, 1030, 1062, 1, 11792, 1, 25861, 30, 10077, 10078, 28325, 28326, 28327, 28335, 28341, 28342, 28347, 28348, 28351, 28352, 28353, 28366, 28388, 28393, 28397, 28398, 28399, 28400, 28414, 28419, 28458, 28471, 28532, 28543, 28544, 28545, 28548, 28568, 2, 22805, 29169, 3, 1455, 15611, 15613, 1, 4742, 1, 23401, 16, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 1, 9775, 16, 8788, 8794, 29889, 29903, 29918, 29933, 31831, 31840, 31846, 31852, 31861, 31867, 31873, 31882, 31888, 31894, 1, 25634, 1, 22601, 1, 26309, 1, 26834, 1, 30916, 1, 3947, 2, 22433, 23510, 1, 23152, 1, 9564, 1, 15279, 1, 31791, 1, 23303, 1, 7607, 1, 24472, 1, 1415, 18, 4219, 4438, 11215, 11309, 12457, 13385, 13617, 14953, 16734, 17392, 21256, 21257, 21258, 21259, 21370, 21507, 21797, 29223, 1, 4979, 1, 30528, 1, 23256, 1, 22385, 2, 6463, 14538, 1, 32710, 1, 16807, 1, 25376, 5, 12488, 21364, 21826, 21911, 21912, 1, 21545, 2, 27147, 27184, 1, 8031, 1, 8947, 1, 4295, 1, 31693, 1, 14527, 1, 30202, 1, 30124, 11, 435, 436, 437, 438, 490, 491, 654, 655, 6546, 6665, 6701, 1, 25529, 1, 22990, 1, 23595, 1, 25584, 1, 17325, 1, 18061, 1, 7439, 1, 30452, 1, 26478, 1, 29098, 1, 9650, 214, 10889, 10890, 10891, 10892, 10893, 10894, 10895, 10896, 10897, 10898, 10899, 10900, 10901, 10902, 10903, 10904, 10905, 10906, 10907, 10908, 10909, 10910, 10911, 10912, 10913, 10914, 10915, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10930, 10931, 10932, 10933, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941, 10942, 10943, 10944, 10945, 10946, 10947, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10956, 10957, 10958, 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969, 10970, 10971, 10972, 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984, 10985, 10986, 10987, 10988, 10989, 10990, 10991, 10992, 10993, 10994, 10995, 10996, 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11004, 11005, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, 11015, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, 11025, 11026, 11027, 11028, 11029, 11030, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11045, 11046, 11047, 11048, 11049, 11050, 11051, 11052, 11053, 11054, 11055, 11056, 11057, 11058, 11059, 11060, 11061, 11062, 11063, 11064, 11065, 11066, 11067, 11068, 11069, 11070, 11071, 11072, 11073, 11074, 11075, 11076, 11077, 11078, 11079, 11080, 11081, 11082, 11083, 11084, 11085, 11086, 11087, 11088, 11089, 11090, 11091, 11092, 11093, 11094, 11095, 11096, 11097, 11098, 11099, 11100, 11101, 11102, 1, 31933, 1, 32039, 33, 1559, 1604, 1660, 1661, 1708, 2092, 2114, 2120, 15853, 15854, 15855, 15856, 15928, 15929, 15996, 15997, 16168, 16169, 16218, 16220, 16454, 16455, 16456, 16457, 18567, 29606, 29619, 29633, 29648, 29654, 29668, 29695, 29720, 1, 6164, 36, 7633, 7634, 7635, 7636, 7703, 7709, 9210, 9211, 9212, 9213, 9476, 9477, 9478, 9502, 9503, 9544, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9957, 10037, 10163, 11108, 11109, 11110, 11111, 11112, 11113, 21130, 28944, 28948, 1, 12469, 1, 23225, 2, 12235, 24134, 2, 26855, 26859, 1, 27266, 3, 10877, 11087, 16827, 1, 23945, 1, 11567, 1, 32306, 1, 23740, 1, 32161, 4, 8766, 31237, 31238, 31239, 1, 25814, 1, 7635, 1, 23024, 1, 30803, 1, 16896, 2, 22801, 29161, 1, 23331, 1, 25092, 1, 25256, 1, 15132, 1, 15554, 1, 25218, 1, 25535, 1, 25114, 5, 12025, 13531, 13916, 24597, 29319, 1, 24430, 1, 23868, 3, 11648, 11744, 30951, 1, 26825, 1, 16922, 1, 7632, 1, 12471, 2, 7289, 16826, 1, 17182, 1, 24292, 1, 22518, 1, 26914, 2, 24257, 24325, 6, 4320, 13439, 13441, 13442, 13443, 13444, 1, 25379, 1, 5212, 1, 31314, 1, 9560, 1, 9028, 35, 1045, 1077, 1183, 1184, 1191, 1192, 4106, 4434, 4548, 6409, 6410, 10676, 11216, 11310, 11825, 12481, 13690, 13821, 13822, 14949, 16625, 16774, 17258, 17696, 18144, 18367, 18394, 18671, 21509, 21618, 21898, 21899, 22308, 24969, 29231, 1, 26250, 1, 12420, 1, 17991, 1, 25798, 1, 25291, 7, 4265, 4824, 4825, 4884, 4896, 4952, 13499, 4, 3597, 3646, 5984, 25040, 1, 7866, 1, 22565, 1, 23415, 1, 13321, 1, 8851, 2, 30696, 30717, 2, 22412, 23488, 1, 26341, 63, 167, 183, 790, 837, 7312, 7313, 7756, 7757, 7758, 7759, 7915, 8022, 8023, 8105, 9067, 9068, 9069, 9070, 9071, 9072, 9151, 9191, 9192, 9193, 9194, 9616, 9617, 9626, 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9723, 9724, 10233, 10694, 10695, 10716, 11123, 11124, 11125, 11126, 13957, 16309, 16310, 16311, 16312, 1, 6468, 1, 26195, 1, 7907, 7, 11107, 11108, 11109, 11110, 11111, 11112, 11113, 7, 219, 6924, 8814, 26930, 26936, 26937, 26938, 1, 19355, 2, 28974, 28979, 7, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 1, 26447, 1, 26709, 1, 15446, 157, 8729, 8730, 8731, 8732, 8733, 8734, 28319, 28320, 28321, 28322, 28323, 28324, 28325, 28326, 28327, 28328, 28329, 28330, 28331, 28332, 28333, 28334, 28335, 28336, 28337, 28338, 28339, 28340, 28341, 28342, 28343, 28344, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28416, 28450, 28453, 28454, 28455, 28456, 28458, 28459, 28460, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28487, 28488, 28489, 28491, 28492, 28502, 28505, 28506, 28507, 28508, 28509, 28510, 28511, 28512, 28513, 28514, 28538, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28562, 28563, 28570, 30541, 30542, 30543, 30544, 30670, 30878, 30879, 30880, 30881, 30882, 30883, 30884, 30885, 30886, 30887, 30888, 30889, 30890, 30921, 31615, 2, 2385, 2386, 1, 12439, 1, 24056, 1, 9899, 1, 23358, 1, 14544, 2, 13918, 24385, 1, 11540, 1, 17309, 1, 15195, 1, 22706, 1, 15560, 8, 6757, 6758, 10763, 10764, 10765, 10766, 13807, 13809, 1, 18052, 85, 19763, 19764, 19765, 19766, 19767, 19768, 19769, 19770, 19771, 19772, 19773, 19774, 19775, 19776, 19777, 19778, 19779, 19780, 19781, 19782, 19783, 19784, 19785, 19786, 19787, 19788, 19789, 19790, 19791, 19792, 19793, 19794, 19795, 19796, 19797, 19798, 19799, 19800, 19801, 19802, 19803, 19804, 19805, 19806, 19807, 19808, 19809, 19810, 19811, 19812, 19814, 19815, 19816, 19817, 19818, 19819, 19820, 19821, 19822, 19823, 19824, 19825, 19826, 19827, 19828, 19829, 19830, 19831, 19832, 19833, 19834, 19835, 19836, 19837, 19838, 19839, 19840, 19841, 19842, 19843, 19844, 19845, 19846, 19847, 19848, 1, 3869, 1, 15353, 3, 4063, 4860, 5347, 2, 21522, 21867, 1, 23151, 1, 24054, 65, 9042, 9043, 9044, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9057, 9058, 9063, 9064, 9065, 9066, 9067, 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 20196, 20198, 20199, 20200, 20201, 20202, 20204, 20206, 20207, 20208, 20597, 20598, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27050, 27051, 27052, 27053, 31087, 31088, 31089, 31090, 31095, 31096, 31097, 31098, 31099, 31100, 31101, 31102, 31103, 31104, 31105, 31106, 1, 11883, 1, 17834, 1, 9931, 1, 12277, 1, 27000, 2, 31013, 31020, 1, 12326, 1, 31662, 1, 9217, 1, 4665, 1, 1422, 1, 17995, 1, 32747, 1, 15513, 1, 15343, 1, 23420, 1, 5213, 29, 18764, 18765, 18766, 18767, 18768, 18769, 18770, 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18780, 18781, 18782, 18783, 18784, 18785, 18786, 18787, 18788, 18789, 18790, 18791, 18792, 1, 25251, 1, 22291, 1, 26780, 1, 31299, 1, 24687, 1, 15529, 1, 24198, 1, 996, 1, 25486, 1, 7554, 1, 23418, 1, 27167, 2, 12515, 13364, 2, 17908, 23854, 1, 7680, 1, 26068, 6, 8281, 10945, 17095, 27058, 27059, 30464, 25, 908, 939, 964, 999, 6702, 27984, 27994, 28010, 28030, 28042, 28052, 28068, 28088, 28100, 28110, 28126, 28146, 28158, 28168, 28184, 28204, 28216, 28226, 28242, 28262, 1, 12544, 2, 10653, 18664, 2, 31129, 31211, 1, 19094, 1, 22528, 1, 8158, 1, 27142, 1, 32206, 6, 10694, 10695, 10696, 10697, 10698, 10699, 1, 26470, 1, 6112, 1, 15170, 1, 23967, 1, 24747, 1, 32610, 1, 24220, 1, 24798, 1, 14547, 1, 25635, 1, 31621, 3, 5424, 5847, 5863, 1, 21467, 2, 24153, 24154, 2, 1507, 3015, 1, 24925, 1, 25713, 1, 29824, 1, 15301, 2, 21661, 21870, 1, 4791, 1, 12748, 53, 17707, 17708, 17709, 17710, 17711, 17712, 17713, 17714, 17715, 17716, 17717, 17718, 17719, 17720, 17721, 17722, 17723, 17724, 17725, 17726, 17727, 17728, 17729, 17730, 17731, 17732, 17733, 17734, 17735, 17736, 17737, 17738, 17739, 17740, 17741, 17742, 17743, 17744, 17745, 17746, 17747, 17748, 17749, 17750, 17751, 17752, 17753, 17754, 17755, 17756, 17757, 17758, 17759, 1, 12995, 1, 22895, 2, 27575, 27597, 1, 26027, 1, 30403, 2, 203, 235, 1, 15333, 2, 6240, 6267, 1, 124, 1, 15233, 1, 22765, 2, 5852, 5868, 1, 23084, 4, 10835, 10836, 10837, 11028, 1, 23764, 1, 8642, 15, 914, 945, 4119, 13298, 27990, 28016, 28048, 28074, 28106, 28132, 28164, 28190, 28222, 28248, 30212, 1, 7833, 2, 7804, 9901, 146, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 1, 7492, 1, 26354, 1, 9799, 1, 3176, 1, 16804, 1, 30227, 1, 3023, 1, 12438, 1, 18034, 1, 15250, 38, 40, 41, 7377, 7378, 7393, 7394, 8136, 8137, 8138, 8139, 8140, 8141, 8201, 8202, 9063, 9064, 9065, 9066, 9197, 9198, 9604, 9605, 10734, 10735, 16120, 16121, 16301, 16302, 16336, 16337, 16502, 16503, 16589, 16590, 26974, 28970, 32505, 32506, 2, 3969, 14466, 2, 17103, 17119, 1, 3591, 1, 23320, 1, 7665, 1, 25843, 18, 919, 951, 10399, 10400, 10465, 17084, 18306, 24778, 27996, 28022, 28054, 28080, 28112, 28138, 28170, 28196, 28228, 28254, 4, 2242, 6487, 6488, 6491, 1, 13585, 1, 24266, 9, 2980, 2981, 2982, 3016, 3017, 3018, 3019, 3020, 3021, 1, 24215, 3, 13891, 24526, 24580, 1, 22487, 2, 9778, 9807, 1, 29788, 1, 7781, 1, 23167, 1, 30335, 2, 21191, 21581, 3, 4640, 4641, 13593, 1, 25456, 1, 26181, 1, 7323, 1, 15487, 4, 30548, 30549, 30873, 30874, 1, 8169, 1, 32819, 1, 6402, 1, 30376, 563, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 11161, 11162, 11411, 11412, 11413, 11414, 11415, 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 11424, 11425, 11426, 11427, 11428, 11429, 11430, 11431, 11432, 11433, 11434, 11435, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454, 11455, 11456, 11457, 11458, 11459, 11460, 11461, 11462, 11463, 11464, 11465, 11466, 11467, 11468, 11469, 11470, 11471, 11472, 11473, 11474, 11475, 11476, 11477, 11478, 11479, 11480, 11481, 11482, 11483, 11484, 11485, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11493, 11494, 11495, 11496, 11497, 11498, 11499, 11500, 11501, 11502, 11503, 11504, 11600, 11601, 11602, 11603, 11604, 11605, 11606, 11607, 11608, 11609, 11610, 11611, 11612, 11613, 11614, 11615, 11616, 11617, 11618, 11619, 11620, 11621, 11622, 11623, 11624, 11625, 11626, 11627, 11628, 11695, 11696, 11697, 11698, 11699, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11708, 11709, 11710, 11711, 11712, 11713, 11714, 11715, 11716, 11717, 11718, 11719, 11720, 11721, 11722, 11725, 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, 14455, 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14464, 14465, 14466, 14467, 14468, 14469, 14470, 14471, 14472, 14473, 14474, 15033, 15034, 15035, 15036, 15037, 15038, 15039, 15040, 15041, 15042, 15043, 15044, 15045, 15046, 15047, 15048, 15049, 15050, 15051, 15052, 15053, 15054, 15055, 15056, 15057, 15058, 15059, 15060, 15061, 15062, 15063, 15064, 15065, 15066, 15067, 15068, 15069, 15070, 15071, 15072, 15073, 15074, 15075, 15076, 15077, 15078, 15079, 15080, 15081, 15082, 15083, 15084, 15085, 15086, 15087, 15088, 15089, 15090, 15091, 15092, 15093, 15094, 15095, 15096, 15097, 15098, 15099, 15100, 15101, 15102, 15103, 15104, 16654, 16655, 16656, 16657, 16658, 16659, 16660, 16661, 16662, 16663, 16664, 16665, 16666, 16667, 16668, 16669, 16670, 16671, 16672, 16673, 16674, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16682, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16692, 16693, 16694, 16695, 16696, 16697, 16698, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 21, 5433, 5434, 5533, 5534, 5535, 5536, 5537, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5579, 5581, 91, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 4, 9860, 9861, 9864, 9865, 2, 19341, 24649, 1, 12539, 1, 24301, 1, 32468, 1, 30402, 1, 13088, 1, 4283, 2, 16769, 22457, 1, 12338, 1, 24085, 1, 26226, 1, 13246, 1, 21837, 2, 178, 7330, 6, 30684, 30685, 30686, 30687, 30688, 30837, 1, 13319, 1, 10532, 1, 12292, 1, 24699, 1, 15119, 24, 16993, 16994, 16995, 16996, 16997, 16998, 16999, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 17016, 1, 25992, 18, 8804, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 30620, 30629, 31697, 1, 8696, 383, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 8118, 8119, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, 8446, 8913, 9001, 9025, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9137, 9203, 9653, 9654, 9655, 9656, 9659, 9661, 9662, 9663, 9664, 9727, 9728, 9729, 9781, 9783, 10033, 10072, 10117, 10118, 10119, 10120, 10169, 10170, 11169, 11667, 11668, 11669, 11670, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11678, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11687, 11688, 11689, 11690, 11691, 11692, 11693, 11694, 11695, 11696, 11697, 11698, 11699, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11708, 11709, 11710, 11711, 11712, 11713, 11714, 11715, 11716, 11717, 11718, 11719, 11720, 11721, 11722, 11723, 11724, 11725, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735, 11736, 11737, 11738, 11739, 11740, 11741, 11742, 11743, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11759, 11760, 11761, 11762, 11763, 11764, 11765, 11766, 11767, 11768, 11769, 11770, 11771, 11772, 11773, 11774, 11775, 11776, 11777, 11778, 11779, 11780, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 11790, 11807, 11808, 11809, 11810, 11811, 11812, 11813, 11814, 11815, 11816, 11817, 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839, 11840, 11841, 11842, 11843, 11844, 11845, 11846, 11847, 11848, 11849, 11850, 11851, 11852, 11853, 28360, 28375, 28376, 28379, 28464, 29099, 29969, 29970, 29998, 29999, 30000, 30001, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30207, 30208, 30729, 30791, 30950, 31183, 31422, 31423, 31424, 31425, 31586, 31587, 31588, 1, 172, 1, 30385, 1, 30954, 1, 23652, 1, 5204, 1, 6711, 16, 28354, 28358, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28404, 28405, 28406, 28407, 28408, 1, 24142, 9, 742, 8750, 8842, 8844, 8846, 13931, 13933, 13935, 13937, 1, 12840, 1, 26433, 1, 22479, 1, 32634, 1, 3992, 1, 23755, 1, 26902, 26, 7804, 7833, 8017, 24479, 28363, 28410, 28451, 28570, 28571, 28572, 28582, 28585, 28588, 28591, 28594, 28596, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 28922, 30877, 1, 32687, 5, 7725, 7801, 8027, 8660, 27069, 7, 2288, 3584, 12275, 14630, 14832, 19627, 19731, 1, 3824, 1, 22687, 2, 17893, 23838, 1, 13098, 1, 32326, 115, 193, 225, 362, 363, 502, 503, 698, 699, 718, 719, 726, 751, 774, 792, 801, 821, 845, 851, 854, 1353, 1617, 1630, 1640, 1664, 1669, 1681, 1689, 2149, 4505, 4506, 4507, 4508, 5628, 6508, 6509, 6766, 6767, 6918, 6919, 6920, 7448, 7449, 7450, 7749, 7811, 7812, 7879, 8025, 8208, 10355, 10721, 10742, 14848, 14867, 14875, 14877, 14879, 15754, 18470, 18705, 18706, 20102, 20103, 28451, 28453, 28454, 28455, 28456, 28458, 28459, 28460, 28486, 28490, 28491, 28492, 28493, 28494, 28495, 28496, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28504, 28505, 28506, 28507, 28508, 28509, 28510, 28511, 28512, 28513, 28514, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28571, 28572, 30612, 30877, 7, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 1, 31323, 1, 8122, 1, 23099, 1, 31287, 39, 912, 943, 4021, 4409, 4992, 6397, 11242, 11336, 11594, 11839, 11985, 11995, 11996, 12004, 12010, 12033, 12037, 12043, 12376, 13630, 13864, 14924, 16639, 16748, 17401, 18122, 21690, 21691, 24370, 27988, 28014, 28046, 28072, 28104, 28130, 28162, 28188, 28220, 28246, 5, 26865, 26866, 26867, 26868, 26869, 1, 23725, 1, 15165, 1, 32365, 1, 22603, 1, 12832, 1, 22967, 1, 23372, 1, 32445, 1, 17315, 1, 15251, 1, 1892, 1, 22867, 2, 10722, 10723, 1, 9875, 1, 25176, 1, 23224, 1, 22906, 44, 14137, 14138, 14139, 14140, 14141, 14142, 14143, 14144, 14145, 14146, 14147, 14148, 14149, 14150, 14151, 14152, 14153, 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14161, 14162, 14163, 14164, 14165, 14166, 14167, 14168, 14169, 14170, 14171, 14172, 14173, 14174, 14175, 14176, 14177, 14178, 14179, 14180, 1, 29956, 1, 26758, 1, 563, 1, 12650, 1, 15049, 1, 13226, 1, 32734, 1, 15313, 1, 11572, 1, 10647, 1, 17079, 1, 23930, 9, 8020, 8619, 8620, 8621, 8622, 10164, 28905, 28906, 28907, 1, 9251, 1, 17092, 1, 6046, 1, 13293, 1, 30166, 1, 9921, 4, 1137, 1138, 12194, 18864, 1, 9309, 3, 24095, 24379, 24531, 1, 25334, 1, 25877, 2, 30678, 30679, 16, 1111, 1112, 1115, 1116, 1119, 1120, 10690, 10693, 13765, 13766, 13769, 13770, 13775, 13776, 13842, 14888, 1, 32087, 1, 16783, 98, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 1, 12545, 1, 23039, 54, 402, 613, 896, 900, 909, 925, 930, 940, 957, 6635, 6676, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7128, 7129, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7514, 8096, 8101, 13753, 13754, 27985, 28011, 28043, 28069, 28101, 28127, 28159, 28185, 28217, 28243, 1, 29346, 127, 24679, 24680, 24681, 24682, 24683, 24684, 24685, 24686, 24687, 24688, 24689, 24690, 24691, 24692, 24693, 24694, 24695, 24696, 24697, 24698, 24699, 24700, 24701, 24702, 24703, 24704, 24705, 24706, 24707, 24708, 24709, 24710, 24711, 24712, 24713, 24714, 24715, 24716, 24717, 24718, 24719, 24720, 24721, 24722, 24723, 24724, 24725, 24726, 24727, 24728, 24729, 24730, 24731, 24732, 24733, 24734, 24735, 24736, 24737, 24738, 24739, 24740, 24741, 24742, 24743, 24744, 24745, 24746, 24747, 24748, 24749, 24750, 24751, 24752, 24753, 24754, 24755, 24756, 24757, 24758, 24759, 24760, 24761, 24762, 24763, 24764, 24765, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24773, 24774, 24775, 24776, 24777, 24778, 24779, 24780, 24781, 24782, 24783, 24784, 24785, 24786, 24787, 24788, 24789, 24790, 24791, 24792, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24805, 2, 29386, 29420, 1, 23565, 1, 28987, 1, 23928, 1, 4927, 1, 22124, 1, 4301, 1, 32651, 2, 30530, 31822, 1, 1420, 1, 22616, 27, 422, 2097, 2141, 2144, 7020, 7021, 7640, 7641, 9135, 9150, 14007, 14008, 28724, 28725, 28726, 28727, 28743, 28750, 28764, 28765, 28766, 28767, 28779, 28780, 28781, 28782, 28794, 1, 9029, 1, 29041, 1, 14827, 1, 26288, 6, 4688, 4689, 5631, 5707, 13578, 29218, 1, 24188, 2, 26580, 29086, 1, 15359, 1, 30323, 1, 25138, 1, 24714, 8, 3743, 3914, 11417, 11602, 11616, 11697, 11711, 16661, 1, 5127, 3, 1781, 1998, 24603, 19, 21136, 21199, 21300, 21325, 21409, 21438, 21482, 21542, 21551, 21582, 21642, 21645, 21649, 21822, 21923, 21929, 22039, 22175, 22303, 1, 15405, 1, 25589, 3, 10902, 24514, 30683, 1, 29203, 1, 16930, 1, 10800, 1, 7556, 1, 22953, 1, 16726, 1, 16882, 1, 23314, 1, 5168, 1, 31764, 1, 30167, 1, 9509, 1, 4080, 2, 8253, 30750, 2, 8237, 26977, 1, 23129, 2, 12486, 29144, 1, 23161, 1, 31985, 1, 12886, 1, 23651, 1, 22989, 2, 10976, 30348, 2, 12428, 13375, 1, 22762, 1, 24788, 1, 11856, 1, 25068, 3, 26994, 26995, 26996, 1, 25226, 4, 7637, 16984, 17059, 17066, 1, 23680, 1, 22557, 1, 27109, 1, 32132, 2, 3634, 3635, 1, 24093, 1, 25964, 14, 1716, 1729, 6405, 8609, 9583, 25011, 25013, 30209, 30210, 30211, 30212, 30213, 30214, 31181, 1, 22817, 1, 13042, 1, 11899, 1, 5913, 1, 4945, 1, 21100, 1, 23730, 1, 22564, 1, 23404, 1, 9256, 1, 17190, 1, 17573, 1, 31195, 1, 26765, 1, 23571, 1, 32816, 1, 25956, 1, 23601, 647, 211, 7353, 7876, 7885, 7924, 9683, 9684, 9729, 9736, 9751, 21135, 21136, 21137, 21138, 21139, 21140, 21141, 21142, 21145, 21146, 21147, 21148, 21149, 21150, 21151, 21152, 21153, 21154, 21157, 21158, 21159, 21160, 21161, 21164, 21165, 21167, 21168, 21169, 21170, 21171, 21172, 21173, 21174, 21178, 21181, 21187, 21208, 21209, 21210, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21241, 21242, 21243, 21251, 21261, 21273, 21276, 21277, 21278, 21279, 21280, 21281, 21286, 21287, 21288, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 21318, 21319, 21320, 21321, 21322, 21323, 21324, 21325, 21326, 21327, 21328, 21329, 21330, 21331, 21332, 21333, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21355, 21356, 21357, 21358, 21359, 21360, 21361, 21362, 21363, 21364, 21365, 21366, 21367, 21368, 21369, 21370, 21389, 21391, 21392, 21401, 21402, 21403, 21404, 21405, 21409, 21410, 21415, 21416, 21417, 21418, 21421, 21422, 21426, 21436, 21437, 21438, 21439, 21440, 21441, 21442, 21443, 21444, 21447, 21448, 21449, 21450, 21451, 21466, 21469, 21478, 21479, 21480, 21481, 21482, 21483, 21484, 21485, 21486, 21487, 21488, 21489, 21490, 21491, 21492, 21493, 21494, 21495, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21507, 21508, 21509, 21510, 21511, 21512, 21513, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 21521, 21522, 21523, 21524, 21525, 21526, 21527, 21528, 21529, 21530, 21540, 21542, 21547, 21548, 21551, 21552, 21553, 21561, 21575, 21576, 21577, 21578, 21579, 21580, 21581, 21582, 21583, 21584, 21585, 21586, 21587, 21588, 21589, 21590, 21591, 21592, 21593, 21594, 21595, 21596, 21597, 21598, 21599, 21600, 21601, 21602, 21603, 21604, 21605, 21606, 21607, 21608, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21617, 21618, 21619, 21620, 21621, 21622, 21623, 21624, 21627, 21628, 21633, 21635, 21636, 21642, 21644, 21645, 21646, 21647, 21648, 21649, 21650, 21651, 21652, 21653, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21679, 21697, 21698, 21699, 21701, 21704, 21705, 21706, 21712, 21719, 21720, 21723, 21726, 21727, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 21746, 21747, 21748, 21749, 21750, 21756, 21757, 21758, 21759, 21760, 21761, 21762, 21763, 21764, 21765, 21766, 21767, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21781, 21782, 21785, 21786, 21787, 21796, 21797, 21798, 21799, 21800, 21801, 21802, 21803, 21804, 21805, 21806, 21807, 21808, 21809, 21810, 21811, 21812, 21816, 21821, 21822, 21823, 21824, 21825, 21826, 21827, 21828, 21842, 21843, 21845, 21846, 21847, 21848, 21849, 21850, 21851, 21852, 21853, 21854, 21855, 21883, 21884, 21890, 21891, 21892, 21893, 21894, 21895, 21904, 21923, 21924, 21925, 21926, 21929, 21932, 21933, 21934, 21935, 21938, 21939, 21946, 21947, 21948, 21949, 21950, 21951, 21952, 21953, 21958, 21959, 21960, 21961, 21962, 21963, 21964, 21965, 21966, 21967, 21968, 21969, 21970, 21971, 21972, 21973, 21974, 21975, 21976, 21977, 21978, 21979, 21980, 21982, 21984, 21985, 21986, 21987, 21993, 21997, 22010, 22014, 22015, 22016, 22017, 22020, 22021, 22022, 22023, 22024, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22040, 22041, 22043, 22047, 22048, 22052, 22054, 22106, 22107, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22179, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22199, 22200, 22201, 22202, 22203, 22204, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22236, 22237, 22238, 22239, 22240, 22241, 22242, 22243, 22244, 22246, 22247, 22248, 22249, 22251, 22252, 22253, 22254, 22255, 22256, 22286, 22287, 22288, 22289, 22290, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22314, 22315, 22316, 22317, 22318, 22319, 22320, 22321, 22322, 22325, 22326, 22327, 22328, 22329, 22330, 22332, 22333, 22334, 22335, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22344, 22345, 22346, 22347, 22348, 22354, 22355, 22356, 22358, 22359, 22361, 22362, 22363, 22364, 22367, 1, 26461, 2, 1012, 1092, 2, 1902, 4197, 2, 27574, 27596, 1, 32130, 1, 26821, 1, 12513, 1, 25061, 2, 28975, 28980, 1, 17059, 1, 20111, 1, 3111, 2, 31024, 31047, 25, 628, 921, 953, 968, 4281, 6607, 6616, 6689, 10352, 24607, 27998, 28024, 28032, 28056, 28082, 28090, 28114, 28140, 28148, 28172, 28198, 28206, 28230, 28256, 28264, 1, 17929, 1, 7777, 1, 32219, 2, 25039, 25045, 1, 176, 7, 218, 250, 5147, 14031, 14032, 14033, 14034, 1, 25160, 1, 30598, 1, 14536, 3, 12157, 27251, 27274, 1, 25230, 1, 25794, 1, 4174, 1, 15347, 1, 16818, 2, 27576, 27598, 1, 25782, 1, 17063, 1, 23310, 1, 10234, 36, 8916, 14236, 17026, 17032, 17047, 19074, 20111, 20112, 20113, 20114, 20115, 20116, 20281, 20298, 20302, 24890, 24891, 24892, 28739, 29524, 29525, 29526, 29527, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 1, 16750, 1, 23821, 3, 28336, 28501, 28577, 1, 30184, 1, 9858, 4, 3744, 11418, 15058, 16662, 1, 22510, 1, 22732, 1, 29175, 1, 30268, 1, 13085, 1, 27242, 1, 6201, 1, 32317, 2, 3148, 3230, 1, 24718, 2, 268, 269, 1, 30206, 1, 30641, 1, 15136, 1, 32397, 2, 22811, 29187, 43, 1935, 2394, 2437, 2655, 2689, 2732, 2782, 2830, 2880, 2918, 2972, 3399, 3608, 4150, 4191, 4480, 5457, 5686, 5741, 5949, 6268, 7544, 11525, 13447, 13847, 14229, 14260, 14310, 14402, 17583, 18655, 18877, 18928, 19775, 19823, 21001, 21040, 24549, 24670, 26572, 26575, 29072, 29196, 1, 7844, 1, 92, 1, 25295, 1, 12645, 2605, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 308, 310, 312, 314, 316, 318, 320, 322, 324, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 374, 376, 378, 379, 380, 383, 385, 388, 392, 393, 398, 401, 405, 406, 407, 410, 413, 415, 417, 420, 423, 425, 428, 432, 434, 437, 438, 441, 449, 450, 452, 453, 455, 456, 458, 460, 462, 464, 466, 468, 470, 472, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 492, 494, 495, 497, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 560, 561, 562, 563, 564, 565, 568, 571, 572, 574, 579, 581, 582, 583, 585, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 661, 662, 663, 664, 665, 666, 667, 668, 671, 672, 673, 674, 675, 676, 677, 678, 679, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 728, 732, 733, 734, 735, 736, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 877, 879, 883, 885, 886, 887, 900, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 1003, 1006, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1515, 1516, 1517, 1518, 1519, 1520, 1583, 1584, 1632, 1639, 1642, 1674, 1699, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1730, 1831, 1832, 1835, 1836, 1850, 1851, 1856, 1857, 1858, 1859, 1860, 2087, 2108, 2109, 2110, 2111, 2112, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2148, 4466, 4467, 4468, 4469, 4470, 4471, 5628, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6549, 6550, 6551, 6552, 6553, 6554, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6713, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6925, 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7038, 7039, 7040, 7041, 7042, 7043, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7082, 7083, 7084, 7085, 7086, 7087, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7201, 7202, 7203, 7204, 7205, 7214, 7215, 7216, 7217, 7218, 7219, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7243, 7244, 7245, 7246, 7247, 7367, 7379, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7483, 7492, 7514, 7520, 7525, 7533, 7534, 7543, 7544, 7545, 7546, 7551, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7605, 7713, 7735, 7738, 7969, 7972, 7977, 7979, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8610, 8617, 8618, 8627, 8628, 8631, 8632, 8637, 8638, 8641, 8642, 8647, 8700, 8701, 8875, 9152, 9543, 9544, 9649, 9665, 9670, 9761, 9824, 10012, 10013, 10024, 10025, 10026, 10031, 10064, 10065, 10271, 10272, 10274, 10282, 10283, 10284, 10285, 10286, 10287, 10288, 10289, 10290, 10291, 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10330, 10334, 10335, 10337, 10339, 10341, 10346, 10348, 10349, 10351, 10352, 10353, 10354, 10355, 10356, 10357, 10362, 10364, 10366, 10368, 10370, 10372, 10374, 10376, 10378, 10380, 10382, 10384, 10386, 10388, 10390, 10392, 10394, 10396, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 10412, 10414, 10416, 10418, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, 10458, 10460, 10469, 10471, 10476, 10484, 10485, 10486, 10487, 10488, 10489, 10490, 10491, 10492, 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518, 10519, 10520, 10521, 10522, 10523, 10786, 10787, 10930, 11179, 11181, 11183, 11185, 11187, 11213, 11245, 11247, 11249, 11256, 11263, 11264, 11273, 11275, 11277, 11279, 11281, 11307, 11339, 11341, 11343, 11350, 11357, 11358, 11584, 11585, 11586, 11587, 11588, 11589, 11590, 11591, 11592, 11593, 11594, 11595, 11596, 11597, 11598, 11599, 12067, 12121, 12174, 13748, 13750, 13752, 13754, 13756, 13758, 13760, 13762, 13764, 13766, 13768, 13770, 13772, 13774, 13776, 13778, 13780, 13782, 13784, 13786, 13788, 13790, 13792, 13812, 13814, 13816, 13818, 13820, 13822, 13824, 13826, 13828, 13830, 13832, 13834, 13836, 13838, 13966, 13968, 13970, 13972, 13974, 13976, 13978, 13979, 13980, 13982, 13984, 13986, 13988, 13990, 13992, 13994, 13996, 13998, 14000, 14002, 14004, 14006, 14008, 14010, 14012, 14014, 14016, 14018, 14020, 14022, 14024, 14026, 14028, 14030, 14032, 14034, 14036, 14038, 14040, 14042, 14044, 14045, 14046, 14047, 14048, 14049, 14050, 14051, 14053, 14055, 14058, 14060, 14062, 14064, 14066, 14071, 14073, 14076, 14078, 14079, 14080, 14082, 14084, 14086, 14088, 14090, 14092, 14094, 14096, 14098, 14100, 14105, 14106, 14112, 14114, 14116, 14118, 14120, 14122, 14124, 14130, 14131, 14213, 14839, 14840, 14841, 14842, 14843, 14844, 14845, 14846, 14847, 14848, 14849, 14850, 14851, 14852, 14853, 14854, 14855, 14856, 14857, 14858, 14859, 14860, 14861, 14862, 14863, 14864, 14865, 14866, 14867, 14868, 14869, 14870, 14871, 14872, 14873, 14874, 14875, 14876, 14877, 14878, 14879, 14880, 14881, 14883, 14884, 14885, 14886, 14887, 14888, 14889, 14890, 14891, 14892, 14893, 14894, 14895, 14896, 14897, 14898, 14899, 14900, 14901, 14902, 14903, 14904, 14905, 14906, 14907, 14908, 14909, 14910, 14911, 14912, 14913, 14914, 14915, 14916, 14917, 14918, 14919, 14920, 14921, 14922, 14923, 14924, 14925, 14926, 14927, 14928, 14929, 14930, 14931, 14932, 14933, 14934, 14935, 14936, 14937, 14938, 14939, 14940, 14941, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14949, 14950, 14951, 14952, 14953, 14954, 14955, 14956, 14957, 14958, 14959, 14960, 14961, 14962, 14963, 14964, 14965, 14966, 14967, 14968, 14969, 14970, 14971, 14972, 14973, 14974, 15585, 15586, 15587, 15588, 15589, 15590, 15591, 15592, 15593, 15594, 15595, 15596, 15755, 15756, 16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338, 16339, 16340, 16341, 16342, 16343, 16344, 16345, 16346, 16347, 16348, 16349, 16350, 16351, 16352, 16353, 16559, 16560, 16561, 16562, 16563, 16564, 16565, 16566, 16567, 16568, 16569, 16570, 16571, 16572, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16581, 16582, 16583, 16584, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16605, 17128, 17467, 17468, 17469, 17470, 17471, 17472, 17473, 17474, 17475, 17476, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17492, 17493, 17494, 17495, 17496, 17497, 17498, 17499, 17500, 17501, 17502, 17503, 17504, 17505, 17506, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17638, 17639, 17640, 17641, 17642, 17643, 17644, 17645, 17646, 17647, 17648, 17649, 17650, 17651, 17652, 17653, 17654, 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, 17665, 17666, 18523, 18702, 18917, 18918, 18919, 18920, 18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929, 18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938, 18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 20330, 20426, 20427, 20428, 20429, 20430, 20431, 20432, 20433, 20434, 20435, 20436, 20437, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20445, 20446, 20447, 20448, 20449, 20450, 20451, 20452, 20453, 20454, 20455, 20456, 20457, 24838, 24839, 24840, 24841, 24842, 24843, 24844, 24845, 24846, 24847, 24848, 24849, 24850, 24851, 24852, 24853, 24854, 24855, 24856, 24857, 24858, 24859, 24860, 24861, 24862, 24863, 24864, 24865, 24866, 24867, 24868, 24869, 26094, 26095, 26096, 26097, 26098, 26099, 26100, 27221, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27496, 27497, 27498, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27513, 27514, 27515, 27516, 27517, 27518, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27592, 27593, 27594, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27612, 27613, 27614, 27615, 27616, 27617, 27637, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27700, 27701, 27702, 27703, 27704, 27705, 27706, 27707, 27708, 27709, 27710, 27711, 27712, 27713, 27714, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27817, 27818, 27845, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27861, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27914, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27967, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 27975, 27976, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28017, 28018, 28019, 28020, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28061, 28062, 28063, 28064, 28065, 28066, 28067, 28068, 28069, 28070, 28071, 28072, 28073, 28074, 28075, 28076, 28077, 28078, 28079, 28080, 28081, 28082, 28083, 28084, 28085, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28126, 28127, 28128, 28129, 28130, 28131, 28132, 28133, 28134, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28185, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28268, 28445, 28560, 28598, 28600, 28603, 28605, 28609, 28613, 28617, 28631, 28634, 28638, 28641, 28644, 28647, 28660, 28664, 28668, 28672, 28676, 28691, 28695, 28698, 28701, 28711, 28715, 28719, 28721, 28724, 28727, 28728, 28731, 28735, 28755, 28758, 28760, 28762, 28764, 28766, 28768, 28773, 28775, 28777, 28779, 28781, 28783, 28788, 28793, 28794, 28796, 28802, 28804, 28806, 28809, 28820, 28886, 28887, 29023, 29025, 29406, 29407, 29408, 29409, 29410, 29411, 29412, 29413, 29414, 29415, 29416, 29417, 29418, 29419, 29420, 29421, 29422, 29423, 29424, 29425, 29426, 29427, 29428, 29429, 29430, 29431, 29432, 29433, 29434, 29435, 29436, 29437, 29438, 29439, 30117, 30251, 30760, 30783, 30784, 30787, 30788, 31205, 31206, 31341, 31347, 31350, 31357, 31361, 31362, 31363, 31367, 31368, 31369, 31438, 31439, 31440, 31441, 31450, 31451, 31452, 31453, 31627, 32562, 32563, 32564, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32581, 32582, 32583, 32584, 32585, 32586, 32587, 73, 18793, 18794, 18795, 18796, 18797, 18798, 18799, 18800, 18801, 18802, 18803, 18804, 18805, 18806, 18807, 18808, 18809, 18810, 18811, 18812, 18813, 18814, 18815, 18816, 18817, 18818, 18819, 18820, 18821, 18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830, 18831, 18832, 18833, 18834, 18835, 18836, 18837, 18838, 18839, 18840, 18841, 18842, 18843, 18844, 18845, 18846, 18847, 18848, 18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857, 18858, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 3, 13849, 24362, 24551, 1, 13336, 1, 15543, 1, 4254, 1, 9677, 1, 25497, 1, 824, 1, 12166, 7, 3256, 11394, 14641, 17674, 19440, 25015, 29200, 5, 8195, 9672, 9801, 9802, 9943, 1, 13155, 1, 26414, 13, 906, 937, 17353, 27982, 28008, 28040, 28066, 28098, 28124, 28156, 28182, 28214, 28240, 1, 12291, 1, 22693, 1, 31762, 1, 23544, 1, 32701, 1, 13313, 1, 15512, 1, 28981, 1, 9211, 1, 25165, 1, 30994, 1, 10229, 1, 12170, 1, 23201, 1, 5135, 1, 17564, 1, 30742, 1, 3298, 1, 15436, 1, 13300, 1, 32491, 1, 7885, 4, 3919, 11423, 14458, 16667, 1, 22622, 1, 23553, 1, 14994, 2, 22407, 23483, 12, 743, 3411, 8750, 8841, 8843, 8845, 10557, 13932, 13934, 13936, 13938, 14987, 1, 25821, 2, 17885, 23830, 1, 6477, 4, 11040, 30493, 30526, 30532, 2, 22803, 29167, 2, 6313, 12595, 1, 25196, 14, 3475, 3476, 3477, 3478, 7796, 7837, 7838, 7841, 7842, 7845, 7846, 7861, 7862, 7914, 7, 7265, 11078, 28938, 30584, 31752, 31753, 31755, 1, 6400, 1, 3094, 1, 9621, 285, 25809, 25810, 25811, 25812, 25813, 25814, 25815, 25816, 25817, 25818, 25819, 25820, 25821, 25822, 25823, 25824, 25825, 25826, 25827, 25828, 25829, 25830, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25861, 25862, 25863, 25864, 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25880, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25898, 25899, 25900, 25901, 25902, 25903, 25904, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25913, 25914, 25915, 25916, 25917, 25918, 25919, 25920, 25921, 25922, 25923, 25924, 25925, 25926, 25927, 25928, 25929, 25930, 25931, 25932, 25933, 25934, 25935, 25936, 25937, 25938, 25939, 25940, 25941, 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25949, 25950, 25951, 25952, 25953, 25954, 25955, 25956, 25957, 25958, 25959, 25960, 25961, 25962, 25963, 25964, 25965, 25966, 25967, 25968, 25969, 25970, 25971, 25972, 25973, 25974, 25975, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25991, 25992, 25993, 25994, 25995, 25996, 25997, 25998, 25999, 26000, 26001, 26002, 26003, 26004, 26005, 26006, 26007, 26008, 26009, 26010, 26011, 26012, 26013, 26014, 26015, 26016, 26017, 26018, 26019, 26020, 26021, 26022, 26023, 26024, 26025, 26026, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26034, 26035, 26036, 26037, 26038, 26039, 26040, 26041, 26042, 26043, 26044, 26045, 26046, 26047, 26048, 26049, 26050, 26051, 26052, 26053, 26054, 26055, 26056, 26057, 26058, 26059, 26060, 26061, 26062, 26063, 26064, 26065, 26066, 26067, 26068, 26069, 26070, 26071, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26080, 26081, 26082, 26083, 26084, 26085, 26086, 26087, 26088, 26089, 26090, 26091, 26092, 26093, 1, 25287, 1, 16736, 3, 4051, 4728, 4729, 1, 29940, 1, 21090, 1, 18553, 1, 22537, 1, 26446, 1, 22727, 1, 25892, 1, 23280, 1, 25086, 1, 25859, 1, 30698, 3, 1484, 15634, 18303, 1, 12234, 1, 24706, 2, 22854, 29258, 1, 7279, 1, 23657, 1, 25265, 1, 32080, 1, 9966, 1, 23175, 1, 12763, 1, 9595, 9, 3671, 3711, 6433, 10503, 13597, 14989, 21213, 21940, 21941, 2, 11569, 11999, 1, 11668, 1, 17832, 1, 15364, 1, 12436, 59, 2198, 2321, 2414, 2498, 2587, 2753, 2851, 2939, 3360, 3435, 3509, 3593, 3620, 4263, 4830, 4886, 4900, 4953, 5327, 5664, 5727, 5770, 5773, 5919, 5921, 6294, 13404, 13538, 14200, 14281, 14391, 14617, 17393, 18487, 19195, 19300, 19461, 19513, 19619, 19676, 19724, 19795, 19881, 19974, 20055, 20147, 20235, 20288, 20360, 20506, 20569, 20643, 20713, 20784, 20863, 20893, 20946, 21013, 29112, 2, 8243, 8258, 1, 32323, 1, 14358, 1, 13219, 1, 7672, 2, 5152, 5229, 6, 3668, 3708, 6430, 10500, 13892, 24527, 20, 10971, 24787, 24788, 24789, 24790, 24791, 24792, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24805, 1, 21790, 1, 2381, 1, 17843, 1, 21092, 1, 24302, 2, 31783, 31785, 1, 22984, 1, 31673, 10, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 1, 27021, 3, 26658, 26695, 26763, 6, 21703, 21704, 21705, 21706, 21707, 22043, 2, 35, 14047, 1, 23396, 2, 26598, 26599, 1, 15432, 1, 13230, 2, 8960, 8962, 1, 1823, 1, 7313, 317, 50, 174, 419, 420, 439, 1552, 1555, 1587, 1591, 1623, 1644, 1650, 1671, 1695, 1735, 1815, 1816, 1829, 1830, 1833, 1835, 1839, 1841, 1842, 1849, 1853, 1855, 1857, 1858, 1859, 1861, 1863, 1866, 1868, 1873, 1926, 2089, 2090, 2095, 2096, 2112, 2140, 2143, 2265, 2362, 2375, 2450, 2539, 2630, 2699, 2799, 2810, 2813, 2895, 2998, 3101, 3189, 3269, 3315, 3324, 3558, 3638, 4335, 4565, 4566, 5361, 5407, 5437, 5442, 5538, 5712, 5827, 5995, 6005, 6120, 6213, 6346, 6359, 6482, 7292, 7336, 7345, 7382, 7488, 7557, 7559, 7570, 7586, 7611, 7627, 7628, 7629, 7630, 7974, 8017, 8128, 8193, 8194, 8195, 8255, 8274, 8275, 8288, 8308, 8328, 8437, 8838, 8840, 8930, 9078, 9088, 9098, 9666, 9672, 9734, 9735, 9737, 9766, 9812, 9813, 9844, 9846, 10180, 10190, 10220, 10736, 10737, 10777, 10783, 10787, 10789, 10795, 10797, 10807, 10810, 10818, 10823, 10832, 10836, 10841, 10851, 10855, 10859, 10867, 10895, 10943, 11149, 11508, 11632, 11681, 11691, 11728, 11782, 11945, 12080, 13737, 14321, 14331, 14350, 14363, 14556, 14584, 14668, 14705, 15023, 15743, 15744, 15752, 15753, 16296, 16512, 16798, 16940, 16958, 16967, 17020, 17021, 17022, 17023, 17048, 17054, 17211, 17229, 17423, 17587, 18180, 18213, 18251, 18311, 18402, 18418, 18427, 18445, 18454, 18514, 18644, 18701, 18702, 18703, 18704, 18705, 18706, 18730, 18757, 18787, 19016, 19025, 19043, 19054, 19085, 19118, 19120, 19132, 19133, 19135, 19239, 19260, 19363, 19426, 19560, 19575, 19755, 19839, 19931, 20017, 20109, 20188, 20268, 20320, 20460, 20825, 20834, 20987, 21050, 22056, 22078, 22087, 22091, 22101, 22109, 22130, 22136, 22145, 22147, 22150, 22158, 24633, 24751, 24872, 24891, 27193, 27299, 27308, 27317, 28271, 28281, 28291, 28301, 28311, 28573, 28574, 29090, 29150, 29357, 29450, 29461, 29479, 29488, 29511, 29525, 29529, 29547, 29556, 29574, 29585, 29740, 29749, 29758, 29878, 29892, 29907, 29922, 29961, 30109, 30114, 30579, 30580, 30620, 30808, 30903, 30961, 31569, 31585, 31587, 31591, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 32515, 1, 23696, 1, 32343, 1, 10995, 1, 24630, 34, 4349, 11677, 16954, 16981, 17225, 18416, 18441, 19039, 19253, 19589, 20474, 20848, 29475, 29502, 29543, 29570, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 1, 24403, 1, 30981, 1, 22555, 1, 25752, 72, 17595, 17596, 17597, 17598, 17599, 17600, 17601, 17602, 17603, 17604, 17605, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, 17615, 17616, 17617, 17618, 17619, 17620, 17621, 17622, 17623, 17624, 17625, 17626, 17627, 17628, 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17638, 17639, 17640, 17641, 17642, 17643, 17644, 17645, 17646, 17647, 17648, 17649, 17650, 17651, 17652, 17653, 17654, 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, 17665, 17666, 1, 6707, 1, 26060, 1, 27253, 1, 25331, 23, 3147, 3464, 3465, 4037, 4930, 11253, 11347, 11597, 11847, 13161, 13616, 13887, 13937, 13938, 16647, 16767, 17406, 18137, 21515, 21636, 21792, 24226, 24578, 1, 10584, 1, 32813, 1, 3177, 5, 5823, 14177, 19572, 20093, 20696, 2, 8932, 8933, 1, 22125, 1, 32793, 1, 9279, 3, 13643, 29313, 29317, 1, 22566, 83, 1144, 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, 7095, 7097, 7099, 7101, 7102, 7103, 7104, 7105, 7107, 7109, 7111, 7113, 7115, 7117, 7119, 7121, 7137, 7139, 7141, 7143, 7145, 7147, 7149, 7151, 7153, 7155, 7157, 7159, 7161, 7163, 7165, 7167, 7169, 7171, 7173, 7175, 7177, 7179, 7181, 7183, 7224, 7225, 7226, 7232, 7239, 7254, 1, 15463, 1, 25408, 1, 25720, 1, 29190, 2, 166, 182, 1, 5385, 2, 34, 13207, 2, 30992, 31011, 1, 17166, 1, 26468, 1, 10539, 1, 13653, 1, 31671, 2, 16730, 22448, 1, 18009, 1, 14767, 2, 3781, 11481, 1, 24007, 1, 32597, 2, 4464, 4470, 1, 25459, 1, 15445, 173, 7883, 7884, 7885, 7886, 8894, 8924, 9037, 9165, 9166, 9667, 9668, 9669, 9670, 9671, 10738, 11975, 12014, 12015, 12016, 12017, 12023, 12030, 21183, 21291, 21307, 21458, 21472, 21625, 21666, 21888, 21997, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30029, 30030, 30031, 30032, 30033, 30034, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30091, 30092, 30093, 30094, 30095, 30097, 30098, 30099, 30100, 30101, 30102, 30103, 30104, 30105, 30106, 30107, 30108, 30109, 30110, 30111, 30112, 30113, 30114, 30115, 30116, 30117, 30118, 30119, 30120, 30121, 30122, 30123, 30124, 30152, 30153, 30154, 30155, 30156, 30157, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30168, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30181, 30182, 30183, 30184, 30185, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 31490, 31491, 31492, 31493, 1, 10197, 1, 25259, 3, 4412, 14927, 19345, 1, 25496, 1, 25088, 1, 12691, 1, 12399, 1, 3293, 1, 4072, 1, 24067, 8, 8300, 8320, 8340, 8429, 11957, 12092, 24884, 27205, 1, 13076, 2, 14716, 14717, 1, 32649, 1, 9331, 1, 23545, 1, 7822, 1, 8641, 344, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 14573, 14574, 14575, 14576, 14577, 14578, 14579, 14580, 14581, 14582, 14583, 14584, 14585, 14586, 14587, 14588, 14589, 14590, 14591, 14592, 14593, 14594, 14595, 14596, 14708, 14709, 14712, 14713, 14714, 14715, 14716, 14717, 14718, 14719, 14720, 14721, 14722, 14723, 14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14735, 14736, 14737, 14738, 14739, 14740, 14741, 14742, 14743, 14744, 14745, 14746, 14747, 14748, 14749, 14750, 14751, 14752, 14753, 14754, 14755, 14756, 14757, 14758, 14759, 14760, 14761, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14778, 14779, 14780, 14781, 14782, 14783, 17321, 1, 25153, 1, 24449, 1, 22754, 1, 24906, 1, 29832, 12, 21831, 22091, 22092, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22106, 22107, 1, 7336, 1, 24214, 9, 7358, 8764, 11514, 16985, 16989, 16990, 30234, 30242, 31656, 1, 22580, 6, 26890, 26891, 26892, 26893, 26894, 26895, 1, 29949, 2, 1510, 16250, 1, 12105, 2, 11655, 11751, 1, 31780, 1, 3897, 1, 21954, 1, 13066, 2, 22437, 23514, 34, 3998, 4395, 4527, 4845, 4921, 11228, 11322, 11590, 11833, 13485, 14910, 16633, 21346, 21435, 21436, 21437, 21438, 21439, 21440, 21441, 21442, 21443, 21444, 21561, 21592, 21601, 21649, 21883, 22032, 22196, 22218, 22251, 22337, 29263, 1, 26189, 1, 618, 2, 3231, 24427, 1, 12454, 1, 25422, 1, 32180, 3, 22116, 22118, 22119, 1, 10629, 1, 23261, 1, 27255, 1, 7932, 1, 24665, 2, 22859, 29264, 1, 25555, 1, 24702, 1, 25907, 1, 26227, 2, 7524, 27506, 1, 11881, 3, 12621, 28915, 28916, 119, 605, 6673, 7483, 7484, 7489, 7491, 7492, 7497, 7500, 7517, 7520, 7521, 7522, 7524, 7525, 10955, 14103, 14845, 14866, 14867, 27478, 27479, 27480, 27481, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27490, 27491, 27492, 27493, 27494, 27495, 27496, 27497, 27498, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27513, 27514, 27515, 27516, 27517, 27518, 27519, 27520, 27521, 27522, 27523, 27524, 27525, 27526, 27527, 27528, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27541, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 30971, 30972, 30973, 30974, 31095, 31096, 2, 3334, 3406, 2, 16725, 22456, 1, 25911, 1, 7422, 1, 2004, 1, 23543, 1, 24191, 1, 23699, 1, 3291, 40, 17555, 17556, 17557, 17558, 17559, 17560, 17561, 17562, 17563, 17564, 17565, 17566, 17567, 17568, 17569, 17570, 17571, 17572, 17573, 17574, 17575, 17576, 17577, 17578, 17579, 17580, 17581, 17582, 17583, 17584, 17585, 17586, 17587, 17588, 17589, 17590, 17591, 17592, 17593, 17594, 1, 32607, 1, 12276, 1, 30491, 1, 16753, 2, 4092, 4358, 1, 23025, 1, 23859, 1, 30566, 2, 1049, 1081, 1, 29262, 1, 16833, 3, 12353, 14978, 15004, 1, 25391, 48, 13399, 13400, 13401, 13402, 13403, 13404, 13405, 13406, 13407, 13408, 13409, 13410, 13411, 13412, 13413, 13414, 13415, 13416, 13417, 13418, 13419, 13420, 13421, 13422, 13423, 13424, 13425, 13426, 13427, 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13444, 13445, 13446, 9, 1470, 1488, 1490, 1491, 15597, 15599, 15624, 17356, 18294, 1, 6397, 8, 18174, 18206, 18245, 18277, 18535, 18625, 18725, 19155, 3, 21088, 26952, 26986, 1, 31160, 31, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 22021, 22022, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 1, 17098, 1, 23975, 2, 17851, 23793, 2, 9192, 9194, 3, 12887, 26941, 31690, 2, 192, 224, 4, 4977, 10405, 10406, 10466, 1, 22725, 1, 25767, 2, 21236, 21685, 1, 9940, 2, 30389, 30720, 1, 13566, 1, 32216, 128, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 3, 12389, 30695, 30910, 1, 24676, 1, 26904, 1, 15283, 1, 27024, 2, 8029, 21128, 1, 28940, 1, 12835, 1, 15230, 1, 16897, 2, 1421, 1430, 1, 25578, 3, 2289, 14802, 19943, 1, 31233, 1, 8223, 1, 12604, 1, 25203, 1, 11119, 2, 1025, 1105, 4, 4837, 5324, 14154, 14812, 1, 25127, 1, 9257, 3, 1012, 1092, 24994, 1, 26483, 1, 157, 1, 30228, 1, 26353, 1, 32460, 9, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 4, 13860, 24433, 24508, 24558, 1, 26459, 1, 29819, 66, 1563, 1581, 1678, 1679, 1681, 1682, 1725, 1849, 1850, 1851, 2111, 2112, 2115, 2121, 2122, 2160, 15721, 15722, 15877, 15878, 15879, 15880, 15881, 15882, 15905, 15911, 15917, 15923, 15940, 15941, 15942, 15943, 15944, 15945, 15950, 16012, 16013, 16014, 16015, 16016, 16040, 16041, 16189, 16190, 16191, 16192, 16193, 16194, 16195, 16219, 16224, 16229, 16239, 16470, 16471, 16472, 16473, 18575, 29601, 29617, 29628, 29644, 29653, 29663, 29690, 29715, 1, 26299, 1, 17099, 4, 26640, 26641, 26642, 26643, 1, 13684, 1, 12793, 1, 15587, 1, 15138, 1, 32448, 2, 1033, 1065, 3, 13437, 19357, 26584, 1, 16722, 1, 25111, 1, 25655, 1, 26431, 40, 602, 627, 662, 6156, 6157, 6160, 6161, 8923, 9535, 9536, 9777, 9803, 9804, 9807, 9893, 9894, 9895, 9896, 9934, 9935, 9936, 9937, 13771, 13772, 13775, 13776, 27272, 28853, 28858, 28890, 28891, 28892, 30217, 30684, 30705, 30706, 30743, 31009, 31044, 31628, 174, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 10484, 10485, 10486, 10487, 10488, 10489, 10490, 10491, 10492, 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518, 10519, 10520, 10521, 10522, 10523, 1, 7798, 1, 9638, 1, 25884, 3, 21687, 22207, 22223, 63, 2001, 2008, 2062, 3660, 3700, 4516, 6422, 7733, 7811, 8020, 8252, 8906, 8925, 8946, 9612, 9613, 9614, 9615, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9675, 9772, 9773, 9779, 9780, 9782, 9784, 9785, 9786, 10164, 10492, 12059, 13484, 21129, 21474, 27274, 28378, 28509, 28530, 28536, 28562, 28885, 29201, 29202, 30282, 30571, 30572, 30843, 30954, 31032, 31059, 31088, 31090, 31157, 31638, 31788, 31790, 1, 9322, 1, 26328, 1, 23697, 1, 12176, 1, 26645, 1, 13266, 3, 12528, 13657, 29339, 1, 12069, 1, 22143, 1, 31678, 1, 31820, 1, 29289, 11, 1690, 1694, 15770, 15771, 15772, 15773, 15778, 15779, 15795, 15796, 15797, 1, 22625, 1, 11890, 1, 18081, 1, 9658, 1, 4019, 3, 1344, 1390, 15595, 1, 5208, 1, 23213, 1, 8833, 3, 21456, 21457, 21458, 1, 22726, 1, 29953, 2, 17947, 24010, 1, 2069, 4, 10880, 10882, 10884, 10887, 1, 18017, 1, 30378, 1, 29820, 1, 25428, 1, 23966, 1, 9308, 6, 7732, 28002, 28060, 28118, 28176, 28234, 1, 21991, 1, 31814, 112, 18562, 22056, 22057, 22058, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22067, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22092, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 22103, 22104, 22105, 22106, 22107, 22108, 22109, 22110, 22111, 22112, 22113, 22114, 22115, 22116, 22117, 22118, 22119, 22120, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22128, 22129, 22130, 22131, 22132, 22133, 22134, 22135, 22136, 22137, 22138, 22139, 22140, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22149, 22150, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22158, 22159, 22160, 22161, 22162, 22163, 22164, 22165, 22166, 1, 24516, 2, 2984, 21084, 9, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 6, 7727, 28028, 28086, 28144, 28202, 28260, 1, 12369, 1, 31209, 1, 25321, 1, 25113, 1, 25378, 1, 15045, 1, 15374, 4, 8459, 8529, 8530, 8531, 1, 15336, 552, 763, 841, 842, 862, 6030, 7444, 7445, 7446, 7447, 7457, 7466, 7470, 7471, 7613, 7614, 7615, 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, 7654, 7655, 7656, 7665, 7666, 7667, 7674, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686, 7687, 7688, 7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712, 7713, 7714, 7716, 7717, 7718, 7719, 7720, 7721, 7722, 7723, 7724, 7982, 8052, 8053, 8061, 8068, 8105, 8120, 9107, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120, 9124, 9125, 9126, 9127, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9136, 9137, 9138, 9139, 9140, 9141, 9142, 9143, 9144, 9145, 9146, 9147, 9148, 9149, 9199, 9200, 9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9471, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9583, 9584, 9585, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9650, 9651, 9660, 9705, 9707, 9708, 9750, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10031, 10033, 10034, 10035, 10036, 10037, 10038, 10039, 10040, 10041, 10042, 10043, 10044, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10073, 10074, 10075, 10076, 10077, 10078, 10079, 10080, 10081, 10082, 10083, 10084, 10085, 10086, 10087, 10088, 10089, 10090, 10091, 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10099, 10100, 10101, 10102, 10103, 10104, 10105, 10106, 10109, 10110, 10111, 10112, 10117, 10118, 10119, 10120, 10121, 10122, 10123, 10124, 10130, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10147, 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10162, 10163, 10215, 10216, 10217, 10218, 10999, 13958, 13959, 16714, 16715, 16716, 16717, 16884, 17094, 26635, 30464, 30623, 30704, 30713, 30752, 30753, 30754, 30755, 30756, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31486, 31487, 31488, 31489, 31490, 31491, 31492, 31493, 31494, 31495, 31496, 31497, 31498, 31499, 31500, 31501, 31502, 31503, 31504, 31505, 31506, 31507, 31508, 31509, 31510, 31511, 31512, 31513, 31514, 31515, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 31524, 31525, 31526, 31527, 31528, 31529, 31530, 31531, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 31560, 31561, 31562, 31563, 31564, 31565, 31566, 31567, 31568, 31569, 31570, 31571, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 31581, 31582, 31583, 31584, 31585, 1, 15589, 1, 13923, 1, 23713, 1, 26196, 1, 4013, 2, 22821, 29193, 1, 7737, 10, 9866, 9867, 9872, 9873, 9880, 9881, 9882, 9883, 9976, 9977, 1, 26035, 2, 10363, 10364, 4, 3047, 3054, 3060, 3066, 1, 163, 1, 25020, 1, 32392, 1, 5630, 1, 17712, 1, 25974, 4, 1464, 7529, 15602, 15619, 1, 3866, 1, 3116, 1, 25684, 20, 7444, 7450, 7651, 7655, 7776, 9201, 9528, 9529, 9530, 9532, 9534, 9535, 9744, 10094, 10121, 10122, 10123, 10124, 10129, 30731, 1, 25083, 1, 17203, 1, 32341, 1, 32068, 2, 31109, 31110, 1, 24437, 1, 22698, 43, 4506, 6533, 6595, 7651, 7652, 7889, 7995, 7996, 8009, 8010, 8013, 8159, 8161, 8163, 8171, 8184, 8201, 8203, 8205, 9529, 9531, 9532, 9612, 9615, 9657, 9945, 10001, 10007, 10124, 10181, 10728, 10729, 10751, 11511, 12479, 23441, 23443, 25030, 30384, 30756, 30855, 31574, 31575, 1, 17986, 1, 9814, 1, 32073, 1, 25296, 2, 1996, 17570, 2, 196, 228, 1, 12313, 2, 8919, 8920, 2, 4753, 4754, 2, 31188, 31193, 1, 32640, 3, 3847, 11451, 16695, 1, 31698, 2, 26759, 26760, 1, 23968, 2, 3774, 11478, 3, 27075, 27076, 27085, 2, 14405, 14406, 1, 15208, 1, 26395, 1, 26639, 6, 9709, 9710, 9711, 9712, 9713, 9714, 1, 24779, 39, 19441, 19442, 19443, 19444, 19445, 19446, 19447, 19448, 19449, 19450, 19451, 19452, 19453, 19454, 19455, 19456, 19457, 19458, 19459, 19460, 19461, 19462, 19463, 19464, 19465, 19466, 19467, 19468, 19469, 19470, 19471, 19472, 19473, 19474, 19475, 19476, 19477, 19478, 19479, 1, 32663, 1, 9264, 4, 27039, 27040, 27041, 27042, 1, 3878, 1, 12677, 2, 10811, 10978, 3, 1417, 1418, 1492, 1, 7857, 1, 12987, 1, 9822, 1, 15367, 4, 8193, 8194, 8195, 31931, 40, 17667, 17668, 17669, 17670, 17671, 17672, 17673, 17674, 17675, 17676, 17677, 17678, 17679, 17680, 17681, 17682, 17683, 17684, 17685, 17686, 17687, 17688, 17689, 17690, 17691, 17692, 17693, 17694, 17695, 17696, 17697, 17698, 17699, 17700, 17701, 17702, 17703, 17704, 17705, 17706, 1, 9356, 1, 9298, 1, 9244, 165, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 10361, 10362, 10363, 10364, 10365, 10366, 10367, 10368, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, 10389, 10390, 10391, 10392, 10393, 10394, 10395, 10396, 10397, 10398, 10399, 10400, 10401, 10402, 10403, 10404, 10405, 10406, 10407, 10408, 10409, 10410, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, 10432, 10433, 10434, 10435, 10436, 10437, 10438, 10439, 10440, 10441, 10442, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452, 10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462, 10463, 10464, 10465, 10466, 10467, 10468, 10469, 10470, 10471, 10472, 10473, 10474, 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10483, 17209, 17210, 17211, 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17221, 17222, 17223, 17224, 17225, 17226, 17227, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 1, 22481, 1, 15142, 1, 22991, 6, 2284, 4255, 12719, 14228, 19605, 19707, 1, 9307, 1, 22025, 12, 7998, 8649, 9183, 9706, 10022, 10023, 10025, 10026, 31366, 31367, 31368, 31369, 1, 25317, 1, 23994, 1, 32084, 1, 10569, 1, 29863, 1, 32027, 1, 23346, 2, 7318, 7339, 1, 22651, 2, 24065, 24211, 3, 30860, 31218, 31664, 1, 12708, 2, 14571, 17100, 1, 31333, 1, 30352, 1, 14814, 1, 31217, 1, 7563, 2, 5012, 13244, 1, 30063, 1, 9432, 1, 11799, 2, 5271, 5272, 1, 12309, 1, 9654, 1, 31324, 1, 10535, 2, 190, 222, 1, 23046, 1, 13079, 1, 5586, 1, 32107, 2, 21245, 21584, 1, 15248, 1, 23735, 1, 26692, 1, 23995, 1, 10585, 1, 16825, 1, 17189, 3, 2714, 21123, 30650, 1, 32653, 1, 22763, 1, 23394, 2, 12624, 13387, 1, 4928, 1, 26826, 1, 26129, 26, 30125, 30126, 30127, 30128, 30129, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 2, 298, 299, 1, 27017, 1, 14565, 1, 15231, 1, 7656, 1, 30318, 3, 26686, 26687, 26745, 1, 25806, 2, 12820, 31295, 1, 30596, 1, 22884, 62, 7026, 7027, 7034, 7035, 7042, 7043, 7048, 7049, 7054, 7055, 7062, 7063, 7070, 7071, 7078, 7079, 7086, 7087, 7092, 7093, 7098, 7099, 7104, 7110, 7111, 7118, 7119, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7140, 7141, 7148, 7149, 7156, 7157, 7164, 7165, 7172, 7173, 7180, 7181, 7188, 7194, 7203, 7207, 7209, 7212, 7217, 7223, 7225, 7230, 7238, 7241, 7245, 7249, 7251, 7253, 9, 8841, 8842, 16832, 16833, 16837, 16838, 16849, 16895, 27211, 1, 23034, 1, 9728, 1, 4661, 1, 19396, 1, 22781, 2, 31948, 31949, 1, 22936, 1, 31034, 1, 16771, 4, 10242, 10289, 13749, 13750, 1, 12746, 1, 5133, 37, 19346, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24670, 24671, 24672, 24673, 24674, 24675, 24676, 24677, 24678, 1, 22746, 1, 31619, 108, 18866, 18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875, 18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920, 18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929, 18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938, 18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 4, 3916, 11420, 14450, 16664, 1, 15104, 1, 26475, 1, 29784, 1, 25419, 1, 12546, 1, 9228, 1, 23132, 1, 26802, 1, 26052, 1, 29830, 1, 31823, 1, 10207, 4, 1501, 7753, 11517, 16988, 3, 22153, 22154, 22167, 3, 7856, 7934, 12980, 56, 1523, 6031, 6479, 7307, 7310, 7464, 7687, 7688, 7770, 7800, 7895, 8451, 8452, 8453, 8454, 9481, 9482, 9485, 9486, 9487, 9599, 9722, 9831, 9832, 9953, 9971, 9972, 9973, 9974, 9975, 9978, 9979, 10038, 10769, 14679, 20101, 20105, 20199, 20693, 27027, 28627, 28628, 28629, 28630, 28659, 28686, 28687, 28688, 28689, 28731, 28732, 28733, 28762, 28763, 28777, 28778, 1, 17931, 1, 25711, 1, 22866, 1, 31315, 1, 32008, 1, 10652, 1, 18098, 2, 28942, 28943, 1, 26221, 1, 11009, 1, 31184, 1, 32211, 2, 27134, 27159, 1, 17775, 2, 10474, 14844, 1, 26106, 1, 30383, 4, 9172, 9173, 9174, 9756, 1, 24179, 1, 22997, 1, 9233, 6, 1005, 1006, 3669, 3709, 6431, 10501, 2, 4777, 4778, 3, 18210, 18211, 18640, 1, 25108, 2, 5592, 11795, 1, 24455, 1, 26268, 1, 26586, 129, 29460, 29461, 29462, 29463, 29464, 29465, 29466, 29467, 29468, 29469, 29470, 29471, 29472, 29473, 29474, 29475, 29476, 29477, 29478, 29479, 29480, 29481, 29482, 29483, 29484, 29485, 29486, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29502, 29503, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29517, 29518, 29519, 29520, 29521, 29522, 29523, 29524, 29525, 29526, 29527, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29536, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29573, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 29587, 29588, 1, 9311, 1, 12494, 1, 29937, 1, 29841, 1, 23965, 2, 1151, 1152, 1, 26103, 1, 3502, 2, 22860, 29268, 1, 12697, 1, 8618, 4, 4314, 4529, 19398, 24395, 1, 32181, 2, 7504, 27257, 1, 15325, 2, 4141, 19387, 1, 30152, 1, 32309, 11, 3139, 3141, 3143, 3223, 3225, 3592, 4285, 5334, 14163, 14742, 14743, 1, 10956, 1, 16246, 1, 949, 80, 94, 190, 198, 202, 208, 215, 222, 230, 234, 240, 247, 260, 261, 280, 281, 288, 289, 304, 305, 344, 345, 368, 369, 370, 371, 706, 766, 809, 6027, 6716, 6784, 6785, 6790, 6791, 6826, 6827, 6840, 6841, 6878, 6879, 6884, 6885, 6910, 6911, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 9762, 9781, 9838, 14067, 16556, 32559, 1, 8888, 1, 32707, 1, 23028, 1, 26287, 2, 7791, 9842, 1, 26735, 1, 22465, 1, 25386, 1, 32047, 1, 29298, 1, 13007, 1, 10561, 1, 32824, 1, 37, 1, 17758, 1, 31774, 1, 23779, 1, 30796, 1, 22529, 1, 26133, 3, 10911, 10919, 11032, 1, 32318, 1, 26350, 1, 2043, 1, 3117, 1, 9553, 1, 22274, 1, 27243, 3, 4421, 13209, 14936, 1, 8235, 1, 9698, 3, 4134, 4989, 13481, 1, 32641, 1, 15259, 1, 15082, 1, 15334, 1, 21387, 1, 11797, 1, 22849, 1, 15180, 2, 876, 877, 1, 10757, 2, 31157, 31158, 1, 10614, 4, 10872, 11076, 30301, 31756, 1, 30382, 1, 17797, 1, 23872, 1, 25813, 2, 4452, 14967, 1, 32609, 1, 5103, 1, 30208, 1, 9357, 1, 24017, 1, 31667, 3, 14982, 15007, 21902, 3, 10259, 10306, 29014, 1, 31297, 10, 1321, 1367, 5195, 5227, 5742, 11392, 18881, 18932, 19359, 26573, 1, 27254, 1, 29189, 2, 27495, 27518, 2, 22831, 29206, 1, 9296, 1, 26048, 1, 30829, 1, 11561, 4, 30103, 30547, 30870, 31053, 1, 15372, 2, 24260, 24418, 2, 11998, 12053, 2, 882, 883, 1, 23625, 1, 9569, 3, 10815, 10991, 30768, 2, 16842, 17534, 1, 9693, 3, 5356, 12649, 18337, 1, 26521, 1, 26277, 1, 25236, 25, 1551, 1745, 15845, 15846, 15990, 15991, 16051, 16052, 16079, 16080, 16163, 16164, 16165, 16446, 16447, 16448, 16449, 17371, 18585, 29615, 29639, 29652, 29675, 29704, 29729, 1, 15571, 2, 332, 333, 2, 3957, 11471, 1, 6134, 1, 9453, 1, 25866, 1, 18698, 1, 30300, 8, 38, 1746, 7548, 16343, 16500, 31099, 31100, 32503, 1, 9861, 1, 25413, 1, 7435, 1, 1909, 1, 179, 3, 11086, 16815, 31721, 1, 31322, 67, 19269, 19270, 19271, 19272, 19273, 19274, 19275, 19276, 19277, 19278, 19279, 19280, 19281, 19282, 19283, 19284, 19285, 19286, 19287, 19288, 19289, 19290, 19291, 19292, 19293, 19294, 19295, 19296, 19297, 19298, 19299, 19300, 19301, 19302, 19303, 19304, 19305, 19306, 19307, 19308, 19309, 19310, 19311, 19312, 19313, 19314, 19315, 19316, 19317, 19318, 19319, 19320, 19321, 19322, 19323, 19324, 19325, 19326, 19327, 19328, 19329, 19330, 19331, 19332, 19333, 19334, 19335, 3, 26640, 26641, 30942, 1, 26151, 2, 4142, 13482, 1, 9924, 1, 12680, 1, 25569, 1, 25922, 1, 32722, 2, 7491, 27505, 1, 22927, 5, 12120, 27233, 30578, 30579, 30580, 1, 9360, 2, 7792, 7793, 1, 15536, 1, 29854, 1, 26135, 179, 1516, 1525, 1531, 1554, 1555, 1556, 1567, 1613, 1685, 1697, 1698, 1699, 1702, 1703, 1704, 1723, 1724, 1863, 1864, 1865, 1868, 1869, 2095, 2096, 2099, 2112, 15727, 15728, 15737, 15738, 15739, 15740, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15802, 15803, 15804, 15805, 15806, 15812, 15818, 15822, 15852, 15856, 15864, 15870, 15876, 15882, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15902, 15903, 15904, 15905, 15906, 15907, 15913, 15919, 15925, 15927, 15929, 15934, 15937, 15945, 15947, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 16020, 16021, 16022, 16023, 16024, 16025, 16026, 16042, 16043, 16048, 16050, 16052, 16054, 16056, 16058, 16060, 16062, 16064, 16066, 16076, 16078, 16080, 16082, 16084, 16086, 16088, 16090, 16092, 16094, 16132, 16147, 16158, 16164, 16171, 16181, 16194, 16196, 16197, 16198, 16199, 16201, 16203, 16205, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16222, 16223, 16225, 16230, 16231, 16232, 16233, 16234, 16238, 16239, 16378, 16379, 16380, 16381, 16482, 16483, 16484, 16485, 18589, 29597, 29624, 29642, 29660, 29687, 29712, 1, 1780, 2, 30989, 31012, 1, 4290, 1, 11562, 1, 11919, 1, 32020, 1, 32404, 1, 12342, 1, 15292, 1, 7744, 1, 13136, 1, 32124, 1, 9957, 2, 27145, 27182, 1, 18095, 2, 7282, 7286, 1, 12962, 1, 23015, 2, 27105, 27106, 1, 17993, 1, 17854, 1, 15059, 1, 32248, 1, 9423, 2, 17616, 17652, 1, 7797, 2, 4755, 4756, 1, 16266, 1, 16870, 1, 14074, 1, 11554, 10, 22313, 22314, 22315, 22316, 22317, 22318, 22319, 22320, 22321, 22322, 1, 25632, 1, 32423, 2, 13128, 13394, 1, 11911, 1, 32648, 2, 9156, 9157, 1, 9850, 1, 12312, 3, 1600, 8131, 8213, 1, 8939, 1, 30556, 1, 22464, 3, 1315, 1360, 1361, 1, 12547, 1, 22171, 1, 12143, 3, 2274, 2816, 14347, 1, 11873, 1, 17187, 1, 24330, 4, 4799, 13855, 24365, 24554, 1, 22458, 1, 25953, 1, 15129, 2, 17115, 31714, 1, 25676, 2, 278, 279, 1, 12421, 1, 7299, 7, 4751, 4752, 5640, 13833, 13834, 14710, 14711, 3, 159, 16707, 30654, 1, 14868, 1, 13268, 1, 15288, 1, 30278, 1, 3139, 1, 23594, 10208, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 882, 883, 889, 892, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 998, 1002, 1003, 1005, 1006, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1400, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1522, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1706, 1731, 1732, 1743, 1744, 1745, 1748, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1923, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2012, 2022, 2026, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2351, 2353, 2354, 2355, 2356, 2357, 2370, 2371, 2382, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2443, 2444, 2445, 2446, 2447, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2477, 2478, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2533, 2534, 2549, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2621, 2622, 2623, 2624, 2625, 2639, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2790, 2791, 2792, 2793, 2794, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2888, 2889, 2890, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2978, 2980, 2981, 2982, 2991, 2992, 2993, 3016, 3017, 3018, 3019, 3020, 3021, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3279, 3280, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3555, 3572, 3573, 3574, 3575, 3576, 3577, 3582, 3583, 3584, 3585, 3589, 3593, 3594, 3602, 3603, 3604, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3634, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3736, 3737, 3738, 3739, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5870, 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, 6193, 6194, 6195, 6209, 6210, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6354, 6355, 6356, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6396, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6713, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891, 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7367, 7379, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7514, 7605, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 10235, 10236, 10237, 10238, 10239, 10240, 10241, 10242, 10243, 10244, 10245, 10246, 10247, 10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255, 10256, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10271, 10272, 10273, 10274, 10275, 10276, 10277, 10278, 10279, 10280, 10281, 10282, 10283, 10284, 10285, 10286, 10287, 10288, 10289, 10290, 10291, 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331, 10332, 10333, 10334, 10335, 10336, 10337, 10338, 10339, 10340, 10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10350, 10351, 10352, 10353, 10354, 10355, 10356, 10357, 10358, 10359, 10360, 10361, 10362, 10363, 10364, 10365, 10366, 10367, 10368, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, 10389, 10390, 10391, 10392, 10393, 10394, 10395, 10396, 10397, 10398, 10399, 10400, 10401, 10402, 10403, 10404, 10405, 10406, 10407, 10408, 10409, 10410, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, 10432, 10433, 10434, 10435, 10436, 10437, 10438, 10439, 10440, 10441, 10442, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452, 10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10468, 10469, 10470, 10471, 10475, 10476, 10484, 10485, 10486, 10487, 10488, 10489, 10490, 10491, 10492, 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518, 10519, 10520, 10521, 10522, 10523, 10524, 10525, 10526, 10527, 10528, 10529, 10530, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10539, 10540, 10541, 10542, 10543, 10544, 10545, 10546, 10547, 10548, 10549, 10550, 10551, 10552, 10553, 10554, 10555, 10556, 10557, 10558, 10559, 10560, 10561, 10562, 10563, 10564, 10565, 10566, 10567, 10568, 10569, 10570, 10571, 10572, 10573, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10669, 10670, 10671, 10672, 10673, 10674, 10675, 10676, 10677, 10678, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686, 10687, 10688, 10689, 10690, 10691, 10692, 10693, 11179, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11201, 11202, 11203, 11204, 11205, 11206, 11207, 11208, 11209, 11210, 11211, 11212, 11213, 11214, 11215, 11216, 11217, 11218, 11219, 11220, 11221, 11222, 11223, 11224, 11225, 11226, 11227, 11228, 11229, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11240, 11241, 11242, 11243, 11244, 11245, 11246, 11247, 11248, 11249, 11250, 11251, 11252, 11253, 11254, 11255, 11256, 11257, 11258, 11259, 11260, 11261, 11262, 11263, 11264, 11273, 11274, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, 11309, 11310, 11311, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 11359, 11360, 11361, 11362, 11368, 11369, 11370, 11371, 11372, 11373, 11374, 11375, 11376, 11377, 11378, 11379, 11380, 11381, 11382, 11383, 11384, 11385, 11386, 11387, 11388, 11389, 11390, 11391, 11392, 11393, 11394, 11395, 11396, 11397, 11398, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11406, 11407, 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 11424, 11425, 11426, 11427, 11428, 11429, 11430, 11431, 11432, 11433, 11434, 11435, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454, 11455, 11456, 11457, 11458, 11459, 11460, 11461, 11463, 11464, 11465, 11466, 11467, 11468, 11469, 11470, 11471, 11472, 11473, 11474, 11475, 11476, 11477, 11478, 11479, 11480, 11481, 11482, 11483, 11484, 11485, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11493, 11494, 11495, 11496, 11497, 11498, 11499, 11500, 11501, 11502, 11503, 11504, 11521, 11522, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11546, 11547, 11584, 11585, 11586, 11587, 11588, 11589, 11590, 11591, 11592, 11593, 11594, 11595, 11596, 11597, 11598, 11599, 13399, 13400, 13401, 13402, 13403, 13404, 13405, 13406, 13407, 13408, 13409, 13410, 13411, 13412, 13413, 13414, 13415, 13416, 13417, 13418, 13419, 13420, 13421, 13422, 13423, 13424, 13425, 13426, 13427, 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13444, 13747, 13748, 13749, 13750, 13751, 13752, 13753, 13754, 13755, 13756, 13757, 13758, 13759, 13760, 13761, 13762, 13763, 13764, 13765, 13766, 13767, 13768, 13769, 13770, 13771, 13772, 13773, 13774, 13775, 13776, 13777, 13778, 13779, 13780, 13781, 13782, 13783, 13784, 13785, 13786, 13787, 13788, 13789, 13790, 13791, 13792, 13793, 13799, 13800, 13801, 13802, 13803, 13804, 13805, 13806, 13811, 13812, 13813, 13814, 13815, 13816, 13817, 13818, 13819, 13820, 13821, 13822, 13823, 13824, 13825, 13826, 13827, 13828, 13829, 13830, 13831, 13832, 13833, 13834, 13835, 13836, 13837, 13838, 13839, 13840, 13841, 13842, 13843, 13844, 13845, 13846, 13847, 13848, 13849, 13850, 13851, 13852, 13853, 13854, 13855, 13856, 13857, 13858, 13859, 13860, 13861, 13862, 13863, 13864, 13865, 13866, 13867, 13868, 13869, 13870, 13871, 13872, 13873, 13874, 13875, 13876, 13877, 13878, 13879, 13880, 13881, 13882, 13883, 13884, 13885, 13886, 13887, 13888, 13889, 13890, 13891, 13892, 13893, 13894, 13895, 13896, 13897, 13898, 13899, 13900, 13901, 13902, 13903, 13904, 13905, 13906, 13907, 13908, 13909, 13910, 13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939, 13940, 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 13954, 13955, 13956, 13957, 13958, 13959, 13960, 13961, 13962, 13963, 13964, 13965, 13966, 13967, 13968, 13969, 13970, 13971, 13972, 13973, 13974, 13975, 13976, 13977, 13978, 13979, 13980, 13981, 13982, 13983, 13984, 13985, 13986, 13987, 13988, 13989, 13990, 13991, 13992, 13993, 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14001, 14002, 14003, 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013, 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14021, 14022, 14023, 14024, 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14032, 14033, 14034, 14035, 14036, 14037, 14038, 14039, 14040, 14041, 14042, 14043, 14044, 14045, 14046, 14047, 14048, 14049, 14050, 14051, 14052, 14053, 14054, 14055, 14056, 14057, 14058, 14059, 14060, 14061, 14062, 14063, 14064, 14065, 14066, 14067, 14068, 14069, 14070, 14071, 14072, 14073, 14074, 14075, 14076, 14077, 14078, 14079, 14080, 14081, 14082, 14083, 14084, 14085, 14086, 14087, 14088, 14089, 14090, 14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 14100, 14101, 14102, 14103, 14104, 14105, 14106, 14107, 14108, 14109, 14110, 14111, 14112, 14113, 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, 14122, 14123, 14124, 14125, 14126, 14127, 14128, 14129, 14130, 14131, 14132, 14133, 14134, 14135, 14136, 14137, 14138, 14140, 14141, 14142, 14144, 14145, 14146, 14147, 14149, 14150, 14151, 14152, 14153, 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14161, 14162, 14163, 14164, 14165, 14166, 14167, 14168, 14169, 14170, 14171, 14191, 14192, 14193, 14194, 14195, 14196, 14197, 14198, 14199, 14200, 14201, 14202, 14203, 14204, 14205, 14206, 14207, 14208, 14209, 14210, 14211, 14212, 14213, 14214, 14215, 14216, 14217, 14218, 14219, 14220, 14221, 14222, 14223, 14224, 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14240, 14241, 14242, 14249, 14250, 14251, 14252, 14253, 14254, 14255, 14256, 14257, 14258, 14259, 14260, 14261, 14262, 14263, 14264, 14265, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14274, 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, 14286, 14287, 14288, 14289, 14290, 14291, 14292, 14293, 14294, 14295, 14296, 14297, 14298, 14339, 14340, 14341, 14342, 14343, 14344, 14345, 14359, 14371, 14372, 14373, 14374, 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14384, 14385, 14386, 14387, 14388, 14389, 14390, 14391, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14409, 14410, 14411, 14412, 14413, 14414, 14415, 14416, 14417, 14418, 14419, 14420, 14421, 14422, 14423, 14424, 14425, 14426, 14427, 14428, 14429, 14430, 14431, 14479, 14480, 14481, 14482, 14483, 14484, 14485, 14486, 14487, 14488, 14489, 14490, 14491, 14492, 14493, 14494, 14495, 14496, 14497, 14498, 14499, 14500, 14501, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14519, 14520, 14521, 14522, 14523, 14524, 14525, 14566, 14567, 14568, 14569, 14570, 14572, 14573, 14574, 14575, 14576, 14577, 14578, 14579, 14580, 14581, 14592, 14593, 14594, 14595, 14596, 14597, 14598, 14599, 14600, 14601, 14602, 14603, 14604, 14605, 14606, 14607, 14608, 14609, 14610, 14611, 14612, 14613, 14614, 14615, 14616, 14617, 14618, 14619, 14620, 14621, 14622, 14623, 14624, 14625, 14626, 14627, 14628, 14629, 14630, 14631, 14632, 14633, 14634, 14635, 14636, 14637, 14652, 14653, 14654, 14656, 14657, 14658, 14659, 14660, 14661, 14662, 14663, 14680, 14681, 14682, 14683, 14684, 14685, 14686, 14687, 14688, 14689, 14690, 14691, 14692, 14693, 14694, 14695, 14696, 14697, 14698, 14699, 14706, 14710, 14711, 14712, 14713, 14714, 14715, 14716, 14717, 14718, 14719, 14720, 14721, 14722, 14723, 14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14735, 14736, 14737, 14738, 14739, 14740, 14741, 14742, 14743, 14744, 14745, 14746, 14747, 14748, 14749, 14750, 14751, 14752, 14753, 14754, 14755, 14756, 14757, 14758, 14759, 14784, 14785, 14786, 14787, 14788, 14789, 14790, 14791, 14792, 14793, 14794, 14839, 14840, 14841, 14842, 14843, 14844, 14845, 14846, 14847, 14848, 14849, 14850, 14851, 14852, 14853, 14854, 14855, 14856, 14857, 14858, 14859, 14860, 14861, 14862, 14863, 14864, 14865, 14866, 14867, 14868, 14869, 14870, 14871, 14872, 14873, 14874, 14875, 14876, 14877, 14878, 14879, 14880, 14881, 14883, 14884, 14885, 14886, 14887, 14888, 14889, 14890, 14891, 14892, 14893, 14894, 14895, 14896, 14897, 14898, 14899, 14900, 14901, 14902, 14903, 14904, 14905, 14906, 14907, 14908, 14909, 14910, 14911, 14912, 14913, 14914, 14915, 14916, 14917, 14918, 14919, 14920, 14921, 14922, 14923, 14924, 14925, 14926, 14927, 14928, 14929, 14930, 14931, 14932, 14933, 14934, 14935, 14936, 14937, 14938, 14939, 14940, 14941, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14949, 14950, 14951, 14952, 14953, 14954, 14955, 14956, 14957, 14958, 14959, 14960, 14961, 14962, 14963, 14964, 14965, 14966, 14967, 14968, 14969, 14970, 14971, 14972, 14973, 14974, 14975, 14976, 14977, 14978, 14979, 14980, 14981, 14982, 14983, 14984, 14985, 14986, 14987, 14988, 14989, 14990, 14991, 14992, 14993, 14994, 14995, 14996, 14997, 14998, 14999, 15000, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15597, 15600, 15601, 15602, 15603, 15604, 15605, 15606, 15607, 15608, 15609, 15610, 15611, 15612, 15613, 15614, 15615, 15616, 15617, 15618, 15619, 15620, 15621, 15622, 15623, 15624, 15625, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, 15635, 15636, 15637, 15638, 15639, 15640, 15641, 15643, 15644, 15645, 15646, 15647, 15648, 15649, 15650, 15651, 15652, 15653, 15654, 15655, 15656, 15657, 15658, 15659, 15660, 15661, 15662, 15663, 15664, 15665, 15666, 15667, 15668, 15669, 15670, 15671, 15672, 15673, 15674, 15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15702, 15703, 15704, 15705, 15706, 15707, 15708, 15709, 15710, 15711, 15712, 15713, 15714, 15715, 15716, 15717, 15718, 15719, 15720, 15721, 15722, 15723, 15724, 15725, 15726, 15727, 15728, 15729, 15730, 15731, 15732, 15733, 15734, 15735, 15736, 15737, 15738, 15739, 15740, 15757, 15758, 15759, 15760, 15761, 15762, 15763, 15764, 15765, 15766, 15767, 15768, 15769, 15770, 15771, 15772, 15773, 15774, 15775, 15776, 15777, 15778, 15779, 15798, 15799, 15800, 15801, 16369, 16370, 16371, 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16391, 16392, 16393, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16413, 16414, 16415, 16416, 16417, 16418, 16419, 16420, 16421, 16422, 16423, 16424, 16425, 16426, 16427, 16428, 16429, 16430, 16431, 16432, 16433, 16434, 16435, 16436, 16437, 16438, 16439, 16440, 16441, 16442, 16443, 16444, 16445, 16446, 16447, 16448, 16449, 16450, 16451, 16452, 16453, 16454, 16455, 16456, 16457, 16458, 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16476, 16477, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16527, 16528, 16529, 16530, 16531, 16532, 16533, 16534, 16535, 16536, 16537, 16538, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16552, 16559, 16560, 16561, 16562, 16563, 16564, 16565, 16566, 16567, 16568, 16569, 16570, 16571, 16572, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16581, 16582, 16583, 16584, 16596, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16605, 16607, 16608, 16609, 16610, 16611, 16612, 16613, 16614, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16622, 16623, 16624, 16625, 16626, 16627, 16628, 16629, 16630, 16631, 16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 16645, 16646, 16647, 16648, 16649, 16650, 16651, 16655, 16656, 16657, 16658, 16659, 16660, 16661, 16662, 16663, 16664, 16665, 16666, 16667, 16668, 16669, 16670, 16671, 16672, 16673, 16674, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16682, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16692, 16693, 16694, 16695, 16696, 16697, 16698, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 17131, 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17139, 17140, 17141, 17142, 17143, 17144, 17145, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, 17154, 17155, 17156, 17157, 17158, 17159, 17160, 17161, 17162, 17163, 17164, 17165, 17166, 17167, 17168, 17169, 17170, 17171, 17172, 17173, 17174, 17175, 17176, 17177, 17178, 17179, 17180, 17181, 17182, 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, 17192, 17193, 17194, 17195, 17196, 17197, 17198, 17199, 17200, 17201, 17202, 17203, 17204, 17205, 17206, 17207, 17208, 17237, 17238, 17239, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17273, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17283, 17284, 17285, 17286, 17287, 17288, 17289, 17290, 17291, 17292, 17293, 17294, 17295, 17296, 17297, 17298, 17299, 17300, 17301, 17302, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17313, 17314, 17315, 17316, 17317, 17318, 17319, 17320, 17321, 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17332, 17333, 17334, 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, 17345, 17346, 17347, 17348, 17349, 17350, 17351, 17352, 17353, 17354, 17355, 17356, 17357, 17358, 17359, 17360, 17361, 17362, 17363, 17364, 17365, 17366, 17367, 17368, 17369, 17370, 17371, 17372, 17373, 17374, 17375, 17427, 17428, 17429, 17430, 17431, 17432, 17433, 17434, 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, 17445, 17446, 17447, 17448, 17449, 17450, 17451, 17452, 17453, 17454, 17455, 17456, 17457, 17458, 17459, 17460, 17461, 17462, 17463, 17464, 17465, 17466, 17467, 17468, 17469, 17470, 17471, 17472, 17473, 17474, 17475, 17476, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17492, 17493, 17494, 17495, 17496, 17497, 17498, 17499, 17500, 17501, 17502, 17503, 17504, 17505, 17506, 17507, 17508, 17509, 17510, 17511, 17512, 17513, 17514, 17515, 17516, 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, 17525, 17526, 17527, 17528, 17529, 17530, 17531, 17532, 17533, 17534, 17535, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, 17545, 17546, 17547, 17548, 17549, 17550, 17551, 17552, 17553, 17554, 17555, 17556, 17557, 17558, 17559, 17560, 17561, 17562, 17563, 17564, 17565, 17566, 17567, 17568, 17569, 17570, 17571, 17572, 17573, 17574, 17575, 17576, 17577, 17578, 17579, 17580, 17581, 17582, 17583, 17584, 17595, 17596, 17597, 17598, 17599, 17600, 17601, 17602, 17603, 17604, 17605, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, 17615, 17616, 17617, 17618, 17619, 17620, 17621, 17622, 17623, 17624, 17625, 17626, 17627, 17628, 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17638, 17639, 17640, 17641, 17642, 17643, 17644, 17645, 17646, 17647, 17648, 17649, 17650, 17651, 17652, 17653, 17654, 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, 17665, 17666, 17667, 17668, 17669, 17670, 17671, 17672, 17673, 17674, 17675, 17676, 17677, 17678, 17679, 17680, 17681, 17682, 17683, 17684, 17685, 17686, 17687, 17688, 17689, 17690, 17691, 17692, 17693, 17694, 17695, 17696, 17697, 17698, 17699, 17700, 17701, 17702, 17703, 17704, 17705, 17706, 17707, 17708, 17709, 17710, 17711, 17712, 17713, 17714, 17715, 17716, 17717, 17718, 17719, 17720, 17721, 17722, 17723, 17724, 17725, 17726, 17727, 17728, 17729, 17730, 17731, 17732, 17733, 17734, 17735, 17736, 17737, 17738, 17739, 17740, 17741, 17742, 17743, 17744, 17745, 17746, 17747, 17748, 17749, 17750, 17751, 17752, 17753, 17754, 17755, 17756, 17757, 17758, 18156, 18157, 18158, 18159, 18160, 18161, 18162, 18163, 18164, 18165, 18166, 18167, 18168, 18169, 18170, 18171, 18172, 18173, 18174, 18175, 18176, 18177, 18187, 18188, 18189, 18190, 18191, 18192, 18193, 18194, 18195, 18196, 18197, 18198, 18199, 18200, 18201, 18202, 18203, 18204, 18205, 18206, 18207, 18208, 18209, 18219, 18220, 18221, 18222, 18223, 18224, 18225, 18226, 18227, 18228, 18229, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18240, 18241, 18242, 18243, 18244, 18245, 18246, 18247, 18248, 18249, 18259, 18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18268, 18269, 18270, 18271, 18272, 18273, 18274, 18275, 18276, 18277, 18278, 18279, 18285, 18286, 18287, 18288, 18289, 18290, 18291, 18292, 18293, 18294, 18295, 18296, 18297, 18298, 18299, 18300, 18301, 18302, 18303, 18304, 18305, 18306, 18314, 18315, 18316, 18317, 18318, 18319, 18320, 18321, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 18329, 18330, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 18338, 18339, 18341, 18342, 18343, 18344, 18345, 18346, 18347, 18348, 18349, 18350, 18351, 18352, 18353, 18354, 18355, 18356, 18357, 18358, 18359, 18360, 18361, 18362, 18363, 18364, 18365, 18366, 18367, 18368, 18369, 18370, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18384, 18385, 18386, 18387, 18388, 18389, 18390, 18391, 18392, 18393, 18394, 18395, 18396, 18463, 18473, 18474, 18475, 18476, 18477, 18478, 18479, 18480, 18481, 18482, 18483, 18484, 18485, 18486, 18487, 18488, 18489, 18490, 18491, 18492, 18493, 18494, 18495, 18496, 18497, 18498, 18499, 18500, 18501, 18502, 18503, 18504, 18505, 18506, 18507, 18508, 18531, 18532, 18533, 18534, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18546, 18547, 18548, 18549, 18550, 18551, 18552, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18563, 18564, 18565, 18566, 18567, 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18576, 18577, 18578, 18579, 18580, 18581, 18582, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18595, 18596, 18597, 18598, 18599, 18600, 18601, 18602, 18604, 18605, 18606, 18607, 18608, 18609, 18610, 18611, 18612, 18613, 18614, 18615, 18616, 18617, 18618, 18619, 18620, 18621, 18622, 18623, 18624, 18625, 18626, 18627, 18628, 18629, 18630, 18631, 18646, 18647, 18648, 18649, 18650, 18651, 18652, 18653, 18654, 18655, 18656, 18657, 18658, 18659, 18660, 18661, 18662, 18663, 18664, 18665, 18666, 18667, 18668, 18669, 18670, 18671, 18672, 18673, 18674, 18675, 18676, 18677, 18678, 18679, 18680, 18681, 18682, 18683, 18684, 18685, 18686, 18687, 18688, 18689, 18690, 18691, 18692, 18693, 18694, 18695, 18696, 18697, 18698, 18699, 18707, 18708, 18709, 18710, 18711, 18712, 18713, 18714, 18715, 18716, 18717, 18718, 18719, 18720, 18721, 18722, 18723, 18724, 18725, 18726, 18727, 18728, 18737, 18738, 18739, 18740, 18741, 18742, 18743, 18744, 18745, 18746, 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18764, 18765, 18766, 18767, 18768, 18769, 18770, 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18780, 18781, 18793, 18794, 18795, 18796, 18797, 18798, 18799, 18800, 18801, 18802, 18803, 18804, 18805, 18806, 18807, 18808, 18809, 18810, 18811, 18812, 18813, 18814, 18815, 18816, 18817, 18818, 18819, 18820, 18821, 18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830, 18831, 18832, 18833, 18834, 18835, 18836, 18837, 18838, 18839, 18840, 18841, 18842, 18843, 18844, 18845, 18846, 18847, 18848, 18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857, 18858, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 18866, 18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875, 18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920, 18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929, 18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938, 18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 18974, 18975, 18976, 18977, 18978, 18979, 18980, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992, 18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001, 19002, 19055, 19056, 19057, 19058, 19059, 19060, 19061, 19062, 19063, 19064, 19065, 19066, 19067, 19068, 19069, 19070, 19071, 19072, 19073, 19074, 19075, 19076, 19077, 19078, 19079, 19080, 19081, 19082, 19083, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103, 19104, 19105, 19106, 19107, 19108, 19109, 19110, 19111, 19112, 19113, 19114, 19115, 19137, 19138, 19139, 19140, 19141, 19142, 19143, 19144, 19145, 19146, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154, 19155, 19156, 19157, 19158, 19165, 19166, 19167, 19168, 19169, 19170, 19171, 19172, 19173, 19174, 19175, 19176, 19177, 19178, 19179, 19180, 19181, 19182, 19183, 19184, 19185, 19186, 19187, 19188, 19189, 19190, 19191, 19192, 19193, 19194, 19195, 19196, 19197, 19198, 19199, 19200, 19201, 19202, 19203, 19204, 19205, 19206, 19207, 19208, 19209, 19210, 19211, 19212, 19213, 19214, 19215, 19272, 19273, 19274, 19275, 19276, 19277, 19278, 19279, 19280, 19281, 19282, 19283, 19284, 19285, 19286, 19287, 19288, 19289, 19290, 19291, 19292, 19293, 19294, 19295, 19296, 19297, 19298, 19299, 19300, 19301, 19302, 19303, 19304, 19305, 19306, 19307, 19308, 19309, 19310, 19311, 19312, 19313, 19314, 19315, 19316, 19336, 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19347, 19348, 19349, 19350, 19351, 19352, 19353, 19354, 19355, 19356, 19357, 19358, 19359, 19360, 19374, 19375, 19376, 19377, 19378, 19379, 19380, 19381, 19382, 19383, 19384, 19385, 19386, 19387, 19388, 19389, 19390, 19391, 19392, 19393, 19394, 19395, 19396, 19397, 19398, 19399, 19400, 19401, 19402, 19403, 19404, 19405, 19406, 19407, 19408, 19409, 19438, 19441, 19442, 19443, 19444, 19445, 19446, 19447, 19448, 19449, 19450, 19451, 19452, 19453, 19454, 19455, 19456, 19457, 19458, 19459, 19460, 19461, 19462, 19463, 19464, 19465, 19466, 19467, 19468, 19469, 19470, 19471, 19472, 19473, 19474, 19475, 19483, 19484, 19485, 19486, 19487, 19488, 19489, 19490, 19491, 19492, 19493, 19494, 19495, 19496, 19497, 19498, 19499, 19500, 19501, 19502, 19503, 19504, 19505, 19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 19515, 19516, 19517, 19518, 19519, 19520, 19521, 19522, 19523, 19524, 19525, 19526, 19527, 19528, 19529, 19530, 19594, 19595, 19596, 19597, 19598, 19599, 19600, 19601, 19602, 19603, 19604, 19605, 19606, 19607, 19608, 19609, 19610, 19611, 19612, 19613, 19614, 19615, 19616, 19617, 19618, 19619, 19620, 19621, 19622, 19623, 19624, 19625, 19626, 19627, 19628, 19629, 19630, 19631, 19632, 19633, 19634, 19635, 19636, 19656, 19657, 19658, 19659, 19660, 19661, 19662, 19663, 19664, 19665, 19666, 19667, 19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686, 19687, 19688, 19689, 19690, 19691, 19692, 19694, 19695, 19696, 19697, 19698, 19699, 19700, 19701, 19702, 19703, 19704, 19705, 19706, 19707, 19708, 19709, 19710, 19711, 19712, 19713, 19714, 19715, 19716, 19717, 19718, 19719, 19720, 19721, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19739, 19740, 19767, 19768, 19769, 19770, 19771, 19772, 19773, 19774, 19775, 19776, 19777, 19778, 19779, 19780, 19781, 19782, 19783, 19784, 19785, 19786, 19787, 19788, 19789, 19790, 19791, 19792, 19793, 19794, 19795, 19796, 19797, 19798, 19799, 19800, 19801, 19802, 19803, 19804, 19805, 19806, 19807, 19808, 19809, 19810, 19811, 19812, 19831, 19832, 19833, 19834, 19844, 19845, 19846, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19854, 19855, 19856, 19857, 19858, 19859, 19860, 19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19875, 19876, 19877, 19878, 19879, 19880, 19881, 19882, 19883, 19884, 19885, 19886, 19887, 19888, 19889, 19890, 19891, 19892, 19893, 19894, 19895, 19896, 19897, 19898, 19899, 19900, 19901, 19942, 19944, 19945, 19946, 19947, 19948, 19949, 19950, 19951, 19952, 19953, 19954, 19955, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 19968, 19969, 19970, 19971, 19972, 19973, 19974, 19975, 19976, 19977, 19978, 19979, 19980, 19981, 19982, 19983, 19984, 19985, 19986, 19987, 19988, 19989, 19990, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20045, 20046, 20047, 20048, 20049, 20050, 20051, 20052, 20053, 20054, 20055, 20056, 20057, 20058, 20059, 20060, 20061, 20062, 20063, 20064, 20065, 20066, 20067, 20068, 20069, 20070, 20071, 20111, 20112, 20113, 20114, 20117, 20118, 20119, 20120, 20121, 20122, 20123, 20124, 20125, 20126, 20127, 20128, 20129, 20130, 20131, 20132, 20133, 20134, 20135, 20136, 20137, 20138, 20139, 20140, 20141, 20142, 20143, 20144, 20145, 20146, 20147, 20148, 20149, 20150, 20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 20160, 20161, 20162, 20163, 20164, 20209, 20210, 20211, 20212, 20213, 20214, 20215, 20216, 20217, 20218, 20219, 20220, 20221, 20222, 20223, 20224, 20225, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20233, 20234, 20235, 20236, 20237, 20238, 20239, 20240, 20241, 20242, 20243, 20244, 20245, 20246, 20247, 20248, 20249, 20250, 20251, 20265, 20276, 20277, 20278, 20279, 20280, 20281, 20282, 20283, 20284, 20285, 20286, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 20294, 20295, 20296, 20297, 20298, 20299, 20300, 20301, 20302, 20334, 20335, 20336, 20337, 20338, 20339, 20340, 20341, 20342, 20343, 20344, 20345, 20346, 20347, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20356, 20357, 20358, 20359, 20360, 20361, 20362, 20363, 20364, 20365, 20366, 20367, 20368, 20369, 20370, 20371, 20372, 20373, 20374, 20375, 20376, 20377, 20394, 20395, 20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20415, 20416, 20417, 20418, 20419, 20420, 20421, 20422, 20423, 20424, 20425, 20426, 20427, 20428, 20429, 20430, 20431, 20432, 20433, 20434, 20435, 20436, 20437, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20445, 20446, 20447, 20448, 20449, 20450, 20451, 20452, 20453, 20454, 20455, 20456, 20457, 20478, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 20492, 20493, 20494, 20495, 20496, 20497, 20498, 20499, 20500, 20501, 20502, 20503, 20504, 20505, 20506, 20507, 20508, 20509, 20510, 20511, 20512, 20513, 20514, 20515, 20516, 20517, 20518, 20519, 20520, 20521, 20522, 20523, 20524, 20543, 20554, 20555, 20556, 20557, 20558, 20559, 20560, 20561, 20562, 20563, 20564, 20565, 20566, 20567, 20568, 20569, 20570, 20571, 20572, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20581, 20582, 20583, 20584, 20585, 20586, 20587, 20588, 20589, 20590, 20591, 20592, 20593, 20601, 20602, 20603, 20604, 20605, 20615, 20627, 20628, 20629, 20630, 20631, 20632, 20633, 20634, 20635, 20636, 20637, 20638, 20639, 20640, 20641, 20642, 20643, 20644, 20645, 20646, 20647, 20648, 20649, 20650, 20651, 20652, 20653, 20654, 20655, 20656, 20657, 20658, 20659, 20660, 20661, 20662, 20663, 20664, 20665, 20666, 20669, 20670, 20671, 20672, 20698, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20710, 20711, 20712, 20713, 20714, 20715, 20716, 20717, 20718, 20719, 20720, 20721, 20722, 20723, 20724, 20725, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20733, 20734, 20755, 20756, 20757, 20758, 20759, 20760, 20761, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20769, 20770, 20771, 20772, 20773, 20774, 20775, 20776, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20799, 20800, 20854, 20855, 20856, 20857, 20858, 20859, 20860, 20861, 20862, 20863, 20864, 20865, 20866, 20867, 20868, 20869, 20870, 20871, 20872, 20873, 20874, 20875, 20876, 20877, 20878, 20879, 20880, 20881, 20882, 20883, 20884, 20885, 20886, 20887, 20888, 20889, 20890, 20891, 20892, 20893, 20894, 20895, 20896, 20897, 20898, 20899, 20900, 20901, 20902, 20903, 20904, 20905, 20906, 20907, 20908, 20909, 20910, 20911, 20912, 20920, 20921, 20922, 20923, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20931, 20932, 20933, 20934, 20935, 20936, 20937, 20938, 20939, 20940, 20941, 20942, 20943, 20944, 20945, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20963, 20964, 20965, 20966, 20995, 20996, 20997, 20998, 20999, 21000, 21001, 21002, 21003, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21011, 21012, 21013, 21014, 21015, 21016, 21017, 21018, 21019, 21020, 21021, 21022, 21023, 21024, 21025, 21026, 21027, 21028, 21029, 21030, 21031, 21032, 21033, 21034, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21067, 21068, 21069, 21070, 21071, 21072, 21073, 21074, 21075, 24031, 24032, 24033, 24034, 24035, 24036, 24037, 24038, 24039, 24040, 24041, 24042, 24043, 24044, 24045, 24046, 24047, 24048, 24049, 24050, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24058, 24059, 24060, 24061, 24062, 24063, 24064, 24065, 24066, 24067, 24068, 24069, 24070, 24071, 24072, 24073, 24074, 24075, 24076, 24077, 24078, 24079, 24080, 24081, 24082, 24083, 24084, 24085, 24086, 24087, 24088, 24089, 24090, 24091, 24092, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106, 24107, 24108, 24109, 24110, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 24118, 24119, 24120, 24121, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24129, 24130, 24131, 24132, 24133, 24134, 24135, 24136, 24137, 24138, 24139, 24140, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24148, 24149, 24150, 24151, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24159, 24160, 24161, 24162, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 24174, 24175, 24176, 24177, 24178, 24179, 24180, 24181, 24182, 24183, 24184, 24185, 24186, 24187, 24188, 24189, 24190, 24191, 24192, 24193, 24194, 24195, 24196, 24197, 24198, 24199, 24200, 24201, 24202, 24203, 24204, 24205, 24206, 24207, 24208, 24209, 24210, 24211, 24212, 24213, 24214, 24215, 24216, 24217, 24218, 24219, 24220, 24221, 24222, 24223, 24224, 24225, 24226, 24227, 24228, 24229, 24230, 24231, 24232, 24233, 24234, 24235, 24236, 24237, 24238, 24239, 24240, 24241, 24242, 24243, 24244, 24245, 24246, 24247, 24248, 24249, 24250, 24251, 24252, 24253, 24254, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24265, 24266, 24267, 24268, 24269, 24270, 24271, 24272, 24273, 24274, 24275, 24276, 24277, 24278, 24279, 24280, 24281, 24282, 24283, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24296, 24297, 24298, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24308, 24309, 24310, 24311, 24312, 24313, 24314, 24315, 24316, 24317, 24318, 24319, 24320, 24321, 24322, 24323, 24324, 24325, 24326, 24327, 24328, 24329, 24330, 24331, 24332, 24333, 24334, 24335, 24336, 24337, 24338, 24339, 24340, 24341, 24342, 24343, 24344, 24345, 24346, 24347, 24348, 24349, 24350, 24351, 24352, 24353, 24354, 24355, 24356, 24357, 24358, 24359, 24360, 24361, 24362, 24363, 24364, 24365, 24366, 24367, 24368, 24369, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24377, 24378, 24379, 24380, 24381, 24382, 24383, 24384, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24442, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24464, 24465, 24466, 24467, 24468, 24469, 24470, 24471, 24472, 24473, 24474, 24475, 24476, 24477, 24478, 24479, 24480, 24481, 24482, 24483, 24484, 24485, 24486, 24487, 24488, 24489, 24490, 24491, 24492, 24493, 24494, 24495, 24496, 24497, 24498, 24499, 24500, 24501, 24502, 24503, 24504, 24505, 24506, 24507, 24508, 24509, 24510, 24511, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24530, 24531, 24532, 24533, 24534, 24535, 24536, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24545, 24546, 24547, 24548, 24549, 24550, 24551, 24552, 24553, 24554, 24555, 24556, 24557, 24558, 24559, 24560, 24561, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24630, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24670, 24671, 24672, 24806, 24807, 24808, 24809, 24810, 24811, 24812, 24813, 24814, 24815, 24816, 24817, 24818, 24819, 24820, 24821, 24822, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24830, 24831, 24832, 24833, 24834, 24835, 24836, 24837, 24838, 24839, 24840, 24841, 24842, 24843, 24844, 24845, 24846, 24847, 24848, 24849, 24850, 24851, 24852, 24853, 24854, 24855, 24856, 24857, 24858, 24859, 24860, 24861, 24862, 24863, 24864, 24865, 24866, 24867, 24868, 24869, 24897, 24898, 24899, 24900, 24901, 24902, 24903, 24904, 24905, 24906, 24907, 24908, 24909, 24910, 24911, 24912, 24913, 24914, 24915, 24916, 24917, 24918, 24919, 24920, 24921, 24922, 24923, 24924, 24925, 24926, 24927, 24928, 24929, 24930, 24931, 24932, 24933, 24934, 24935, 24936, 24937, 24938, 24939, 24940, 24941, 24942, 24943, 24944, 24945, 24946, 24947, 24948, 24949, 24950, 24951, 24952, 24953, 24954, 24955, 24956, 24957, 24958, 24959, 24960, 24961, 24962, 24963, 24964, 24965, 24966, 24967, 24968, 24969, 24970, 24971, 24973, 25033, 25034, 25035, 25036, 25037, 25038, 25039, 25040, 25041, 25042, 25043, 25044, 25045, 25807, 25808, 25809, 25810, 25811, 25812, 25813, 25814, 25815, 25816, 25817, 25818, 25819, 25820, 25821, 25822, 25823, 25824, 25825, 25826, 25827, 25828, 25829, 25830, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25861, 25862, 25863, 25864, 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25880, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25898, 25899, 25900, 25901, 25902, 25903, 25904, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25913, 25914, 25915, 25916, 25917, 25918, 25919, 25920, 25921, 25922, 25923, 25924, 25925, 25926, 25927, 25928, 25929, 25930, 25931, 25932, 25933, 25934, 25935, 25936, 25937, 25938, 25939, 25940, 25941, 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25949, 25950, 25951, 25952, 25953, 25954, 25955, 25956, 25957, 25958, 25959, 25960, 25961, 25962, 25963, 25964, 25965, 25966, 25967, 25968, 25969, 25970, 25971, 25972, 25973, 25974, 25975, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25991, 25992, 25993, 25994, 25995, 25996, 25997, 25998, 25999, 26000, 26001, 26002, 26003, 26004, 26005, 26006, 26007, 26008, 26009, 26010, 26011, 26012, 26013, 26014, 26015, 26016, 26017, 26018, 26019, 26020, 26021, 26022, 26023, 26024, 26025, 26026, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26034, 26035, 26036, 26037, 26038, 26039, 26040, 26041, 26042, 26043, 26044, 26045, 26046, 26047, 26048, 26049, 26050, 26051, 26052, 26053, 26054, 26055, 26056, 26057, 26058, 26059, 26060, 26061, 26062, 26063, 26064, 26065, 26066, 26067, 26068, 26069, 26070, 26071, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26080, 26081, 26082, 26083, 26084, 26085, 26086, 26087, 26088, 26089, 26090, 26091, 26092, 26093, 26094, 26095, 26096, 26097, 26098, 26099, 26100, 26497, 26498, 26499, 26500, 26501, 26502, 26503, 26504, 26505, 26506, 26507, 26508, 26509, 26510, 26511, 26512, 26513, 26514, 26515, 26516, 26517, 26518, 26519, 26520, 26521, 26522, 26523, 26524, 26525, 26526, 26527, 26528, 26529, 26530, 26531, 26532, 26533, 26534, 26535, 26536, 26537, 26538, 26539, 26540, 26541, 26542, 26543, 26544, 26545, 26546, 26547, 26548, 26549, 26550, 26551, 26552, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26560, 26561, 26562, 26563, 26564, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26575, 26576, 26577, 26578, 26579, 26580, 26581, 26582, 26583, 26584, 26585, 26586, 26587, 26588, 26589, 26590, 26591, 26592, 26593, 26594, 26595, 26596, 26597, 26598, 26599, 26600, 26601, 26602, 26603, 26637, 26640, 28991, 28992, 28993, 28994, 28995, 28996, 28997, 28998, 28999, 29000, 29001, 29002, 29003, 29004, 29005, 29006, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29020, 29021, 29022, 29023, 29024, 29025, 29026, 29027, 29028, 29029, 29030, 29031, 29032, 29033, 29034, 29035, 29036, 29037, 29038, 29039, 29040, 29041, 29042, 29043, 29044, 29045, 29046, 29047, 29048, 29049, 29050, 29051, 29052, 29053, 29054, 29055, 29056, 29057, 29058, 29059, 29060, 29061, 29062, 29063, 29064, 29065, 29066, 29067, 29068, 29069, 29070, 29071, 29072, 29073, 29100, 29101, 29102, 29103, 29104, 29105, 29106, 29107, 29108, 29109, 29110, 29111, 29112, 29113, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29123, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29134, 29135, 29136, 29137, 29138, 29139, 29140, 29141, 29142, 29143, 29372, 29373, 29374, 29375, 29376, 29377, 29378, 29379, 29380, 29381, 29382, 29383, 29384, 29385, 29386, 29387, 29388, 29389, 29390, 29391, 29392, 29393, 29394, 29395, 29396, 29397, 29398, 29399, 29400, 29401, 29402, 29403, 29404, 29405, 29406, 29407, 29408, 29409, 29410, 29411, 29412, 29413, 29414, 29415, 29416, 29417, 29418, 29419, 29420, 29421, 29422, 29423, 29424, 29425, 29426, 29427, 29428, 29429, 29430, 29431, 29432, 29433, 29434, 29435, 29436, 29437, 29438, 29439, 29971, 29972, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 29997, 29998, 29999, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30117, 30125, 30126, 30127, 30128, 30129, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 30611, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32539, 32540, 32541, 32542, 32543, 32544, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32562, 32563, 32564, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32581, 32582, 32583, 32584, 32585, 32586, 32587, 1, 1997, 1, 12904, 1, 12318, 1, 32389, 7, 843, 7268, 7351, 10582, 19268, 23439, 23440, 1, 12300, 1, 22988, 9, 3208, 3254, 3280, 4144, 5320, 13290, 13671, 14728, 14729, 1, 8210, 3, 30658, 30892, 30906, 1, 22051, 4, 30329, 30994, 31673, 31692, 1, 15434, 2, 30365, 31203, 6, 3691, 3737, 6457, 10523, 18829, 18830, 1, 11160, 1, 15254, 2, 28972, 28977, 1, 30702, 1, 27108, 1, 16262, 1, 23876, 1, 25304, 3, 26818, 26819, 26820, 1, 8927, 2, 17956, 24024, 1, 25588, 1, 32283, 2, 10529, 10541, 1, 22881, 1, 23106, 1, 22933, 1, 7876, 3, 4422, 5352, 14937, 8, 243, 7746, 7877, 7924, 9110, 9163, 9659, 9783, 1, 25828, 6, 28908, 28909, 28910, 30610, 30614, 31007, 3, 9758, 9759, 9760, 1, 3762, 1, 24158, 1, 29829, 1, 23728, 1, 28953, 1, 16890, 1, 28925, 1234, 21134, 21135, 21136, 21137, 21138, 21139, 21140, 21141, 21142, 21143, 21144, 21145, 21146, 21147, 21148, 21149, 21150, 21151, 21152, 21153, 21154, 21155, 21156, 21157, 21158, 21159, 21160, 21161, 21162, 21163, 21164, 21165, 21166, 21167, 21168, 21169, 21170, 21171, 21172, 21173, 21174, 21175, 21176, 21177, 21178, 21179, 21180, 21181, 21182, 21183, 21184, 21185, 21186, 21187, 21188, 21189, 21190, 21191, 21192, 21193, 21194, 21195, 21196, 21197, 21198, 21199, 21200, 21201, 21202, 21203, 21204, 21205, 21206, 21207, 21208, 21209, 21210, 21211, 21212, 21213, 21214, 21215, 21216, 21217, 21218, 21219, 21220, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21241, 21242, 21243, 21244, 21245, 21246, 21247, 21248, 21249, 21250, 21251, 21252, 21253, 21254, 21255, 21256, 21257, 21258, 21259, 21260, 21261, 21262, 21263, 21264, 21265, 21266, 21267, 21268, 21269, 21270, 21271, 21272, 21273, 21274, 21275, 21276, 21277, 21278, 21279, 21280, 21281, 21282, 21283, 21284, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 21315, 21316, 21317, 21318, 21319, 21320, 21321, 21322, 21323, 21324, 21325, 21326, 21327, 21328, 21329, 21330, 21331, 21332, 21333, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21355, 21356, 21357, 21358, 21359, 21360, 21361, 21362, 21363, 21364, 21365, 21366, 21367, 21368, 21369, 21370, 21371, 21372, 21373, 21374, 21375, 21376, 21377, 21378, 21379, 21380, 21381, 21382, 21383, 21384, 21385, 21386, 21387, 21388, 21389, 21390, 21391, 21392, 21393, 21394, 21395, 21396, 21397, 21398, 21399, 21400, 21401, 21402, 21403, 21404, 21405, 21406, 21407, 21408, 21409, 21410, 21411, 21412, 21413, 21414, 21415, 21416, 21417, 21418, 21419, 21420, 21421, 21422, 21423, 21424, 21425, 21426, 21427, 21428, 21429, 21430, 21431, 21432, 21433, 21434, 21435, 21436, 21437, 21438, 21439, 21440, 21441, 21442, 21443, 21444, 21445, 21446, 21447, 21448, 21449, 21450, 21451, 21452, 21453, 21454, 21455, 21456, 21457, 21458, 21459, 21460, 21461, 21462, 21463, 21464, 21465, 21466, 21467, 21468, 21469, 21470, 21471, 21472, 21473, 21474, 21475, 21476, 21477, 21478, 21479, 21480, 21481, 21482, 21483, 21484, 21485, 21486, 21487, 21488, 21489, 21490, 21491, 21492, 21493, 21494, 21495, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21507, 21508, 21509, 21510, 21511, 21512, 21513, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 21521, 21522, 21523, 21524, 21525, 21526, 21527, 21528, 21529, 21530, 21531, 21532, 21533, 21534, 21535, 21536, 21537, 21538, 21539, 21540, 21541, 21542, 21543, 21544, 21545, 21546, 21547, 21548, 21549, 21550, 21551, 21552, 21553, 21554, 21555, 21556, 21557, 21558, 21559, 21560, 21561, 21562, 21563, 21564, 21565, 21566, 21567, 21568, 21569, 21570, 21571, 21572, 21573, 21574, 21575, 21576, 21577, 21578, 21579, 21580, 21581, 21582, 21583, 21584, 21585, 21586, 21587, 21588, 21589, 21590, 21591, 21592, 21593, 21594, 21595, 21596, 21597, 21598, 21599, 21600, 21601, 21602, 21603, 21604, 21605, 21606, 21607, 21608, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21617, 21618, 21619, 21620, 21621, 21622, 21623, 21624, 21625, 21626, 21627, 21628, 21629, 21630, 21631, 21632, 21633, 21634, 21635, 21636, 21637, 21638, 21639, 21640, 21641, 21642, 21643, 21644, 21645, 21646, 21647, 21648, 21649, 21650, 21651, 21652, 21653, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21663, 21664, 21665, 21666, 21667, 21668, 21669, 21670, 21671, 21672, 21673, 21674, 21675, 21676, 21677, 21678, 21679, 21680, 21681, 21682, 21683, 21684, 21685, 21686, 21687, 21688, 21689, 21690, 21691, 21692, 21693, 21694, 21695, 21696, 21697, 21698, 21699, 21700, 21701, 21702, 21703, 21704, 21705, 21706, 21707, 21708, 21709, 21710, 21711, 21712, 21713, 21714, 21715, 21716, 21717, 21718, 21719, 21720, 21721, 21722, 21723, 21724, 21725, 21726, 21727, 21728, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 21742, 21743, 21744, 21745, 21746, 21747, 21748, 21749, 21750, 21751, 21752, 21753, 21754, 21755, 21756, 21757, 21758, 21759, 21760, 21761, 21762, 21763, 21764, 21765, 21766, 21767, 21768, 21769, 21770, 21771, 21772, 21773, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21781, 21782, 21783, 21784, 21785, 21786, 21787, 21788, 21789, 21790, 21791, 21792, 21793, 21794, 21795, 21796, 21797, 21798, 21799, 21800, 21801, 21802, 21803, 21804, 21805, 21806, 21807, 21808, 21809, 21810, 21811, 21812, 21813, 21814, 21815, 21816, 21817, 21818, 21819, 21820, 21821, 21822, 21823, 21824, 21825, 21826, 21827, 21828, 21829, 21830, 21831, 21832, 21833, 21834, 21835, 21836, 21837, 21838, 21839, 21840, 21841, 21842, 21843, 21844, 21845, 21846, 21847, 21848, 21849, 21850, 21851, 21852, 21853, 21854, 21855, 21856, 21857, 21858, 21859, 21860, 21861, 21862, 21863, 21864, 21865, 21866, 21867, 21868, 21869, 21870, 21871, 21872, 21873, 21874, 21875, 21876, 21877, 21878, 21879, 21880, 21881, 21882, 21883, 21884, 21885, 21886, 21887, 21888, 21889, 21890, 21891, 21892, 21893, 21894, 21895, 21896, 21897, 21898, 21899, 21900, 21901, 21902, 21903, 21904, 21905, 21906, 21907, 21908, 21909, 21910, 21911, 21912, 21913, 21914, 21915, 21916, 21917, 21918, 21919, 21920, 21921, 21922, 21923, 21924, 21925, 21926, 21927, 21928, 21929, 21930, 21931, 21932, 21933, 21934, 21935, 21936, 21937, 21938, 21939, 21940, 21941, 21942, 21943, 21944, 21945, 21946, 21947, 21948, 21949, 21950, 21951, 21952, 21953, 21954, 21955, 21956, 21957, 21958, 21959, 21960, 21961, 21962, 21963, 21964, 21965, 21966, 21967, 21968, 21969, 21970, 21971, 21972, 21973, 21974, 21975, 21976, 21977, 21978, 21979, 21980, 21981, 21982, 21983, 21984, 21985, 21986, 21987, 21988, 21989, 21990, 21991, 21992, 21993, 21994, 21995, 21996, 21997, 21998, 21999, 22000, 22001, 22002, 22003, 22004, 22005, 22006, 22007, 22008, 22009, 22010, 22011, 22012, 22013, 22014, 22015, 22016, 22017, 22018, 22019, 22020, 22021, 22022, 22023, 22024, 22025, 22026, 22027, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22040, 22041, 22042, 22043, 22044, 22045, 22046, 22047, 22048, 22049, 22050, 22051, 22052, 22053, 22054, 22055, 22056, 22057, 22058, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22067, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22092, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 22103, 22104, 22105, 22106, 22107, 22108, 22109, 22110, 22111, 22112, 22113, 22114, 22115, 22116, 22117, 22118, 22119, 22120, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22128, 22129, 22130, 22131, 22132, 22133, 22134, 22135, 22136, 22137, 22138, 22139, 22140, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22149, 22150, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22158, 22159, 22160, 22161, 22162, 22163, 22164, 22165, 22166, 22167, 22168, 22169, 22170, 22171, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22179, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22199, 22200, 22201, 22202, 22203, 22204, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22236, 22237, 22238, 22239, 22240, 22241, 22242, 22243, 22244, 22245, 22246, 22247, 22248, 22249, 22250, 22251, 22252, 22253, 22254, 22255, 22256, 22257, 22258, 22259, 22260, 22261, 22262, 22263, 22264, 22265, 22266, 22267, 22268, 22269, 22270, 22271, 22272, 22273, 22274, 22275, 22276, 22277, 22278, 22279, 22280, 22281, 22282, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22300, 22301, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22312, 22313, 22314, 22315, 22316, 22317, 22318, 22319, 22320, 22321, 22322, 22323, 22324, 22325, 22326, 22327, 22328, 22329, 22330, 22331, 22332, 22333, 22334, 22335, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22344, 22345, 22346, 22347, 22348, 22349, 22350, 22351, 22352, 22353, 22354, 22355, 22356, 22357, 22358, 22359, 22360, 22361, 22362, 22363, 22364, 22365, 22366, 22367, 1, 5270, 1, 7553, 1, 10988, 1, 22868, 1, 32362, 1, 32693, 1, 12734, 1, 22926, 1, 13592, 3, 1487, 15608, 15637, 1, 10917, 1, 32246, 51, 916, 947, 969, 4313, 4521, 4964, 6551, 7488, 7533, 7536, 10393, 10394, 10463, 11230, 11324, 12237, 13489, 13904, 16756, 18130, 21514, 21773, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21781, 21782, 21783, 22210, 24534, 27992, 28018, 28034, 28050, 28076, 28092, 28108, 28134, 28150, 28166, 28192, 28208, 28224, 28250, 28266, 29299, 30585, 1, 9901, 3, 17122, 30460, 30461, 2, 31946, 31947, 1, 16884, 1, 17989, 1, 15409, 1, 22499, 1, 10654, 1, 7321, 1, 15062, 1, 9764, 2, 4618, 4619, 1, 26252, 2, 24264, 27256, 4, 4985, 12060, 17151, 26517, 69, 1328, 1374, 2187, 2310, 2403, 2487, 2576, 2662, 2742, 2840, 2928, 3350, 3425, 3497, 3612, 4109, 4616, 5316, 5550, 5567, 5658, 5882, 5907, 5909, 6066, 6067, 6177, 6260, 6289, 12875, 13409, 13549, 14195, 14270, 14394, 14418, 14496, 14497, 14681, 17385, 18477, 18980, 19184, 19287, 19450, 19502, 19608, 19664, 19710, 19784, 19869, 19963, 20044, 20136, 20224, 20349, 20495, 20559, 20632, 20711, 20773, 20858, 20888, 20935, 21020, 21067, 29037, 29099, 29103, 99, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27584, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27593, 27594, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27612, 27613, 27614, 27615, 27616, 27617, 27663, 27664, 27665, 27666, 27667, 27668, 27669, 27670, 27671, 27672, 27673, 27674, 27675, 27676, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27684, 27685, 27686, 27687, 27688, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27700, 27701, 27702, 27703, 27704, 27705, 27706, 27707, 27708, 27709, 27710, 27711, 27712, 27713, 27714, 43, 2080, 2196, 2319, 2412, 2496, 2585, 2666, 2751, 2849, 2937, 3214, 3358, 3433, 3507, 3602, 5554, 14235, 14279, 14569, 14581, 14792, 18485, 19193, 19298, 19459, 19511, 19617, 19674, 19722, 19793, 19879, 19972, 20053, 20145, 20233, 20358, 20504, 20567, 20641, 20782, 20944, 24915, 24917, 1, 23953, 1, 27285, 2, 12156, 27258, 3, 13316, 13374, 24461, 1, 25610, 18, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27305, 27306, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 5, 8187, 8250, 10125, 10126, 12136, 1, 31059, 1, 15193, 1, 12322, 1, 2044, 2, 17895, 23840, 2, 22443, 23520, 1, 22716, 1, 30477, 1, 32177, 1, 24804, 5, 6158, 6159, 6160, 6161, 6162, 1, 31937, 2, 1058, 1090, 1, 26742, 2, 22427, 23504, 1, 25219, 1, 31625, 1, 17737, 9, 21145, 21196, 21324, 21437, 21481, 21561, 21816, 22024, 22032, 1, 16803, 1, 31710, 1, 8121, 2, 24359, 24486, 1, 26724, 2, 10784, 10913, 1, 10908, 1, 30164, 1, 9620, 2, 1987, 12201, 2, 5013, 13240, 1, 3128, 1, 30221, 1, 6032, 1, 30617, 1, 12844, 1, 18021, 1, 12596, 1, 14813, 1, 10602, 1, 7545, 1, 25786, 4, 30333, 30339, 30341, 31818, 1, 32163, 1, 1986, 1, 9346, 1, 15576, 26, 8205, 8206, 9073, 9074, 9195, 9196, 9622, 9623, 11135, 11136, 11139, 11140, 16305, 16306, 16340, 16341, 29997, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 1, 12459, 1, 17772, 1, 29217, 1, 7480, 75, 20920, 20921, 20922, 20923, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20931, 20932, 20933, 20934, 20935, 20936, 20937, 20938, 20939, 20940, 20941, 20942, 20943, 20944, 20945, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20963, 20964, 20965, 20966, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 20977, 20978, 20979, 20980, 20981, 20982, 20983, 20984, 20985, 20986, 20987, 20988, 20989, 20990, 20991, 20992, 20993, 20994, 1, 7413, 1, 25414, 1, 29232, 1, 23769, 3, 12982, 21879, 21917, 1, 25706, 1, 8992, 1, 32266, 1, 30697, 3, 30759, 30760, 30763, 4, 3773, 3925, 11430, 16674, 1, 8683, 1, 12802, 1, 29198, 6, 1329, 1375, 13893, 24264, 24265, 24581, 1, 23552, 2, 31245, 31246, 2, 13044, 17745, 2, 13819, 13820, 1, 13464, 1, 32204, 1, 32382, 1, 9895, 2, 11031, 31932, 6, 27232, 28615, 28616, 28849, 28881, 28892, 1, 25901, 22, 3853, 4181, 4455, 4486, 4487, 4909, 4940, 11258, 11352, 11457, 11851, 13487, 14970, 16701, 16780, 18150, 20396, 20428, 26094, 26097, 26591, 29167, 1, 15493, 95, 1449, 5134, 5959, 7765, 7799, 7807, 7808, 7825, 7826, 7839, 7840, 7843, 7844, 7849, 7850, 7851, 7852, 7859, 7860, 7870, 7871, 7905, 7906, 7918, 7931, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7961, 7962, 8157, 8158, 9158, 9166, 9735, 9774, 9790, 9796, 9809, 9811, 9813, 9814, 9816, 9818, 9820, 9825, 9826, 9839, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9868, 9869, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9899, 9900, 9922, 9923, 9936, 9937, 9976, 9977, 17548, 23881, 27226, 27256, 27266, 28839, 28840, 30844, 1, 18072, 1, 29076, 1, 12906, 1, 25658, 1, 31028, 1, 31200, 1, 23644, 1, 26111, 8, 3754, 3930, 11436, 11609, 11623, 11704, 11718, 16680, 2, 17896, 23841, 1, 22794, 1, 24496, 1, 25834, 3, 12195, 17124, 30473, 1, 22931, 2, 158, 16706, 1, 22745, 1, 25090, 2, 31231, 31268, 2, 17846, 23788, 1, 24477, 1, 5402, 2, 26726, 26817, 1, 25518, 1, 12114, 7, 4104, 4558, 13728, 13859, 19393, 24506, 24557, 1, 16797, 2, 27138, 27161, 1, 32456, 1, 23058, 1, 12242, 4, 7627, 7628, 7629, 7630, 5, 8705, 8723, 8944, 30217, 30429, 1, 24207, 1, 27095, 1, 25745, 1, 7879, 1, 29839, 4, 10882, 10883, 11099, 31759, 1, 32333, 1, 30496, 2, 22432, 23509, 1, 24242, 1, 29174, 1, 26336, 1, 22127, 1, 31702, 2, 418, 5144, 1, 25396, 2, 13933, 13934, 1, 27094, 93, 176, 189, 197, 201, 207, 214, 217, 221, 229, 233, 239, 246, 249, 258, 259, 309, 310, 319, 320, 332, 333, 336, 337, 342, 343, 364, 365, 373, 374, 467, 468, 496, 497, 502, 503, 504, 505, 506, 507, 710, 715, 729, 754, 765, 775, 787, 829, 966, 1253, 1254, 2245, 4503, 4509, 6704, 6774, 6775, 6788, 6789, 6812, 6813, 6814, 6815, 6828, 6829, 6842, 6843, 6848, 6849, 6850, 6851, 6866, 6867, 6886, 6887, 6896, 6897, 6930, 6931, 6940, 6941, 6956, 6957, 6974, 6975, 6984, 6985, 6998, 6999, 9630, 26617, 26618, 26626, 26627, 3, 1438, 1439, 1440, 10, 21233, 21350, 21415, 21416, 21501, 21539, 21540, 21800, 22023, 22333, 1, 32112, 1, 25120, 1, 1495, 2, 4652, 4653, 1, 10195, 1, 5934, 2, 14123, 14124, 1, 15384, 4, 31227, 31228, 31229, 31230, 2, 7606, 9900, 1, 25872, 2, 20693, 20694, 1, 7845, 2, 18915, 18966, 1, 10752, 1, 25136, 1, 5898, 1, 29817, 1, 15451, 2, 24101, 24234, 1, 31144, 3, 10268, 10315, 29021, 1, 16874, 1, 32736, 1, 9349, 1, 12784, 1, 23076, 1, 30211, 1, 26368, 2, 30317, 30319, 1, 31617, 2, 30456, 30457, 1, 11755, 1, 9374, 3, 17155, 17199, 18334, 1, 2713, 1, 17968, 1, 3884, 1, 5177, 1, 15507, 1, 25886, 1, 4075, 2, 22804, 29168, 1, 32173, 1, 15258, 1, 25252, 1, 22689, 1, 14468, 1, 17333, 1, 30061, 1, 32692, 1, 23062, 2, 7618, 7682, 3, 8830, 31764, 31765, 1, 16752, 1, 22489, 1, 23096, 1, 30569, 1, 12766, 1, 10651, 1, 32271, 1, 22600, 1, 32042, 1, 9424, 1, 26164, 1, 32178, 1, 12387, 2, 5354, 13167, 1, 16823, 6, 1127, 1128, 1129, 1130, 10278, 10325, 2, 4863, 5040, 1, 3131, 1, 25328, 1, 1814, 1, 15078, 1, 25172, 2, 201, 233, 1, 21956, 65, 20478, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 20492, 20493, 20494, 20495, 20496, 20497, 20498, 20499, 20500, 20501, 20502, 20503, 20504, 20505, 20506, 20507, 20508, 20509, 20510, 20511, 20512, 20513, 20514, 20515, 20516, 20517, 20518, 20519, 20520, 20521, 20522, 20523, 20524, 20525, 20526, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20536, 20537, 20538, 20539, 20540, 20541, 20542, 1, 9796, 1, 7673, 1, 26104, 1, 8161, 5, 1500, 1501, 7751, 7752, 7753, 1, 5113, 1, 16731, 1, 13074, 1, 17967, 1, 7957, 1, 9695, 1, 3986, 1, 13732, 1, 22657, 1, 5125, 1, 25099, 1, 22777, 1, 23215, 1, 11862, 1, 15496, 2, 6135, 7419, 1, 12502, 56, 18737, 18738, 18739, 18740, 18741, 18742, 18743, 18744, 18745, 18746, 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18756, 18757, 18758, 18759, 18760, 18761, 18762, 18763, 18764, 18765, 18766, 18767, 18768, 18769, 18770, 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18780, 18781, 18782, 18783, 18784, 18785, 18786, 18787, 18788, 18789, 18790, 18791, 18792, 5, 30759, 30760, 30761, 30762, 30763, 1, 15209, 1, 7494, 1, 9774, 10, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 25048, 25049, 1, 31239, 1, 22284, 1, 17062, 1, 31987, 1, 25612, 2, 18817, 18818, 1, 29772, 1, 23238, 1, 31643, 1, 30769, 1, 32322, 1, 29284, 1, 23208, 1, 12745, 2, 6472, 7964, 1, 565, 1, 23532, 1, 24280, 2, 7864, 9931, 42, 7455, 7921, 8039, 8071, 8645, 8646, 8647, 8801, 8805, 8906, 9045, 9167, 9184, 9185, 9186, 9500, 9501, 9502, 9503, 9705, 9711, 9712, 10005, 10006, 10007, 10008, 10020, 10021, 10024, 10172, 10201, 30631, 30781, 30782, 30783, 30784, 31360, 31361, 31362, 31363, 31364, 31365, 1, 30574, 1, 31143, 4, 27081, 27087, 27089, 27090, 1, 177, 1, 23421, 1, 25279, 1, 24481, 1, 10624, 1, 32321, 1, 32125, 1, 41, 5, 1614, 15665, 15666, 15667, 15668, 1, 15130, 13, 18165, 18196, 18231, 18232, 18268, 18557, 18610, 18716, 18746, 18772, 19065, 19102, 19146, 1, 21994, 1, 17074, 2, 13871, 24567, 1, 4743, 1, 23674, 19, 2160, 6528, 6529, 6530, 6540, 6541, 6542, 6600, 10732, 10733, 14128, 30879, 30880, 30881, 30882, 30885, 30886, 30887, 30888, 74, 702, 703, 704, 705, 747, 748, 749, 750, 844, 848, 849, 850, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 6764, 6765, 7984, 7985, 8017, 9121, 9122, 9123, 10131, 10132, 10133, 10134, 10135, 10136, 10137, 10138, 10164, 28820, 28821, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31556, 31557, 31558, 31559, 31560, 31561, 31562, 31563, 1, 23922, 1, 9871, 1, 25682, 2, 26685, 26749, 1, 7642, 1, 28920, 3, 30656, 30671, 30672, 11, 1044, 1076, 1181, 1182, 6408, 10675, 17257, 17456, 17496, 18902, 18953, 1, 12380, 1, 6022, 1, 12027, 1, 24688, 1, 24715, 1, 25380, 1, 25613, 1, 26473, 1, 25126, 1, 29181, 1, 24044, 1, 29332, 2, 13588, 29343, 32, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 29969, 29970, 2, 12896, 13348, 2, 11650, 11746, 1, 22655, 19, 4087, 11229, 11323, 12203, 13491, 21207, 21208, 21209, 21210, 21224, 21485, 21583, 21757, 21766, 21767, 21776, 21890, 21953, 29186, 1, 23322, 3, 30316, 30345, 31695, 1, 30216, 1, 5837, 1, 21864, 1, 7723, 1, 17105, 1, 22747, 1, 30694, 1, 9333, 1, 25734, 1, 30271, 1, 8124, 2, 3828, 11495, 2, 12723, 13366, 2, 18361, 25868, 1, 24183, 1, 31023, 2, 8921, 28823, 1, 11978, 1, 22921, 1, 27225, 3, 10257, 10304, 29012, 1, 25984, 8, 3307, 3308, 3309, 3310, 3311, 3312, 3479, 3480, 1, 14817, 1, 17842, 1, 23159, 1, 7773, 2, 210, 242, 2, 26884, 26885, 1, 27029, 1, 27032, 1, 7488, 10, 3287, 3300, 3335, 7311, 7320, 8057, 8064, 8094, 8095, 14355, 32, 2710, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 1, 4035, 1, 25177, 1, 32145, 1, 7792, 3, 3476, 3477, 3478, 1, 22526, 1, 5346, 8, 3755, 3931, 11437, 11610, 11624, 11705, 11719, 16681, 2, 14858, 14859, 1, 25674, 2, 21424, 22336, 1, 32636, 1, 4377, 1, 7633, 2, 13789, 13790, 1, 30398, 2, 4420, 14935, 94, 11179, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11201, 11202, 11203, 11204, 11205, 11206, 11207, 11208, 11209, 11210, 11211, 11212, 11213, 11214, 11215, 11216, 11217, 11218, 11219, 11220, 11221, 11222, 11223, 11224, 11225, 11226, 11227, 11228, 11229, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11240, 11241, 11242, 11243, 11244, 11245, 11246, 11247, 11248, 11249, 11250, 11251, 11252, 11253, 11254, 11255, 11256, 11257, 11258, 11259, 11260, 11261, 11262, 11263, 11264, 11269, 11270, 11271, 25808, 26094, 26095, 26096, 30151, 1, 29810, 2, 7484, 27501, 3, 26670, 26714, 26731, 1, 26917, 1, 15478, 1, 26235, 1, 1425, 1, 25101, 1, 9351, 1, 23429, 1, 25732, 1, 5167, 1, 21076, 2, 17451, 17491, 1, 25960, 12, 1347, 1393, 3204, 4115, 4613, 5318, 12054, 12882, 13662, 14149, 14722, 14723, 1, 25198, 1, 27169, 1, 31317, 1, 24507, 1, 25515, 4, 31337, 31338, 31339, 31340, 4, 3634, 3635, 14710, 14711, 6, 2812, 2813, 2814, 10880, 10881, 11098, 2, 22430, 23507, 1, 23567, 3, 30442, 30443, 31152, 1, 29334, 2, 30699, 30700, 1, 20822, 1, 13206, 1, 23438, 1, 23931, 1, 32758, 2, 5060, 14820, 2, 4488, 4489, 1, 5188, 1, 26210, 9, 2384, 19553, 19941, 20737, 20740, 20741, 20742, 20743, 20744, 4, 21528, 21937, 21938, 21939, 1, 26105, 1, 30550, 1, 22826, 1, 25149, 1, 25874, 1, 16854, 1, 29084, 1, 7651, 1, 8391, 2, 3763, 3942, 2, 13883, 24520, 1, 10639, 1, 64, 2, 17850, 23792, 1, 16923, 1, 9396, 1, 9383, 1, 8911, 1, 23900, 1, 7893, 1, 25832, 1, 13021, 3, 4167, 5902, 5904, 2, 11364, 16606, 1, 32364, 2, 27484, 27507, 1, 12268, 1, 25371, 1, 3125, 1, 26109, 1, 22699, 1, 31988, 1, 13235, 1, 31187, 1, 24684, 1, 32148, 1, 32210, 1, 3905, 1, 23093, 1, 15516, 1, 32159, 1, 18026, 14, 12111, 12112, 12177, 12178, 31944, 31945, 31946, 31947, 31948, 31949, 31950, 31951, 31952, 31953, 1, 14782, 2, 214, 246, 1, 23339, 14, 169, 1055, 1087, 5431, 13781, 13782, 13783, 13784, 13785, 13786, 13805, 13840, 30317, 30899, 1, 31829, 1, 32128, 1, 17519, 1, 22802, 1, 25180, 1, 32720, 1, 26918, 1152, 885, 886, 887, 962, 963, 964, 965, 966, 967, 968, 969, 970, 995, 996, 997, 999, 1000, 1001, 1004, 1007, 1008, 1009, 1010, 1978, 1979, 3170, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3568, 3569, 3570, 3571, 3650, 3651, 5219, 5220, 5221, 5402, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, 6160, 6161, 6162, 6279, 6280, 6281, 6282, 7463, 7477, 7493, 7519, 7526, 7527, 7528, 7529, 7552, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8107, 8109, 8110, 8111, 8112, 8113, 8115, 8116, 8117, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8134, 8135, 8164, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8187, 8188, 8213, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271, 8273, 8274, 8275, 8746, 8749, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8830, 8858, 8876, 8877, 8878, 8929, 8942, 8954, 8955, 9046, 10222, 10223, 10224, 10225, 10226, 10227, 10229, 10230, 10231, 10232, 10234, 10461, 10462, 10463, 10464, 10465, 10466, 10467, 11119, 11170, 11726, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 13722, 13723, 13724, 13725, 13726, 13727, 13728, 13729, 13730, 13731, 13732, 13733, 13734, 14703, 14704, 14705, 14779, 14780, 14781, 14782, 14783, 15741, 15742, 15743, 15744, 15745, 15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754, 15755, 15756, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16806, 16807, 16808, 16809, 16810, 16811, 16812, 17084, 18371, 18372, 20333, 24895, 26644, 26645, 26646, 26647, 26648, 26649, 26650, 26651, 26652, 26653, 26654, 26655, 26656, 26657, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26688, 26689, 26690, 26691, 26692, 26693, 26694, 26695, 26696, 26697, 26698, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26720, 26721, 26722, 26723, 26724, 26725, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26774, 26775, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26822, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26834, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26843, 26844, 26845, 26846, 26847, 26848, 26849, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26866, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26879, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 26890, 26891, 26892, 26893, 26894, 26895, 26896, 26897, 26898, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26925, 26926, 26927, 26928, 26929, 26930, 26931, 26932, 26933, 26934, 26935, 26936, 26937, 26938, 26939, 26940, 26941, 26942, 26943, 26944, 26945, 26946, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26985, 26986, 26987, 26988, 26989, 26990, 26991, 26992, 26993, 26994, 26995, 26996, 26997, 26998, 26999, 27000, 27001, 27002, 27003, 27004, 27005, 27006, 27007, 27008, 27009, 27010, 27011, 27012, 27013, 27014, 27015, 27016, 27017, 27018, 27019, 27020, 27021, 27022, 27023, 27024, 27025, 27026, 27027, 27028, 27029, 27030, 27031, 27032, 27033, 27034, 27035, 27036, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27050, 27051, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27059, 27060, 27061, 27062, 27063, 27064, 27065, 27066, 27067, 27068, 27069, 27070, 27071, 27072, 27073, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27082, 27083, 27084, 27085, 27086, 27087, 27088, 27089, 27090, 27091, 27092, 27093, 27094, 27095, 27096, 27097, 27098, 27099, 27100, 27101, 27102, 27103, 27104, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27117, 27118, 27119, 27120, 27994, 28029, 28030, 28031, 28032, 28033, 28034, 28052, 28087, 28088, 28089, 28090, 28091, 28092, 28110, 28145, 28146, 28147, 28148, 28149, 28150, 28168, 28203, 28204, 28205, 28206, 28207, 28208, 28226, 28261, 28262, 28263, 28264, 28265, 28266, 30002, 30125, 30126, 30127, 30128, 30129, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 30209, 30210, 30211, 30212, 30213, 30214, 30232, 30233, 30234, 30235, 30236, 30237, 30238, 30239, 30633, 30635, 30636, 30637, 30639, 30642, 30646, 30702, 30732, 30733, 30750, 30757, 30759, 30760, 30761, 30762, 30763, 30775, 30796, 30800, 30945, 30946, 31155, 31156, 31157, 31158, 31159, 31160, 31168, 31169, 31171, 31184, 31185, 31221, 31222, 31223, 31224, 31225, 31226, 31227, 31228, 31229, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31240, 31241, 31242, 31243, 31244, 31245, 31246, 31247, 31248, 31249, 31250, 31251, 31252, 31253, 31254, 31255, 31256, 31257, 31258, 31259, 31260, 31261, 31262, 31263, 31264, 31265, 31266, 31267, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31283, 31284, 31285, 31286, 31287, 31288, 31289, 31290, 31291, 31292, 31293, 31294, 31295, 31296, 31297, 31298, 31299, 31300, 31301, 31302, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 50, 18974, 18975, 18976, 18977, 18978, 18979, 18980, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992, 18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001, 19002, 19003, 19004, 19005, 19006, 19007, 19008, 19009, 19010, 19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 2, 22378, 23455, 1, 26909, 1, 5351, 6, 21980, 21981, 21982, 22311, 22322, 22344, 4, 12103, 31878, 31879, 31880, 1, 30374, 1, 12541, 1, 26477, 1, 16735, 1, 17313, 3, 13858, 24367, 24556, 1, 12504, 1, 13730, 1663, 22368, 22369, 22370, 22371, 22372, 22373, 22374, 22375, 22376, 22377, 22378, 22379, 22380, 22381, 22382, 22383, 22384, 22385, 22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407, 22408, 22409, 22410, 22411, 22412, 22413, 22414, 22415, 22416, 22417, 22418, 22419, 22420, 22421, 22422, 22423, 22424, 22425, 22426, 22427, 22428, 22429, 22430, 22431, 22432, 22433, 22434, 22435, 22436, 22437, 22438, 22439, 22440, 22441, 22442, 22443, 22444, 22445, 22446, 22447, 22448, 22449, 22450, 22451, 22452, 22453, 22454, 22455, 22456, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22466, 22467, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22475, 22476, 22477, 22478, 22479, 22480, 22481, 22482, 22483, 22484, 22485, 22486, 22487, 22488, 22489, 22490, 22491, 22492, 22493, 22494, 22495, 22496, 22497, 22498, 22499, 22500, 22501, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22509, 22510, 22511, 22512, 22513, 22514, 22515, 22516, 22517, 22518, 22519, 22520, 22521, 22522, 22523, 22524, 22525, 22526, 22527, 22528, 22529, 22530, 22531, 22532, 22533, 22534, 22535, 22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22545, 22546, 22547, 22548, 22549, 22550, 22551, 22552, 22553, 22554, 22555, 22556, 22557, 22558, 22559, 22560, 22561, 22562, 22563, 22564, 22565, 22566, 22567, 22568, 22569, 22570, 22571, 22572, 22573, 22574, 22575, 22576, 22577, 22578, 22579, 22580, 22581, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22596, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22604, 22605, 22606, 22607, 22608, 22609, 22610, 22611, 22612, 22613, 22614, 22615, 22616, 22617, 22618, 22619, 22620, 22621, 22622, 22623, 22624, 22625, 22626, 22627, 22628, 22629, 22630, 22631, 22632, 22633, 22634, 22635, 22636, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22654, 22655, 22656, 22657, 22658, 22659, 22660, 22661, 22662, 22663, 22664, 22665, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22674, 22675, 22676, 22677, 22678, 22679, 22680, 22681, 22682, 22683, 22684, 22685, 22686, 22687, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22696, 22697, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22716, 22717, 22718, 22719, 22720, 22721, 22722, 22723, 22724, 22725, 22726, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22737, 22738, 22739, 22740, 22741, 22742, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22756, 22757, 22758, 22759, 22760, 22761, 22762, 22763, 22764, 22765, 22766, 22767, 22768, 22769, 22770, 22771, 22772, 22773, 22774, 22775, 22776, 22777, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22786, 22787, 22788, 22789, 22790, 22791, 22792, 22793, 22794, 22795, 22796, 22797, 22798, 22799, 22800, 22801, 22802, 22803, 22804, 22805, 22806, 22807, 22808, 22809, 22810, 22811, 22812, 22813, 22814, 22815, 22816, 22817, 22818, 22819, 22820, 22821, 22822, 22823, 22824, 22825, 22826, 22827, 22828, 22829, 22830, 22831, 22832, 22833, 22834, 22835, 22836, 22837, 22838, 22839, 22840, 22841, 22842, 22843, 22844, 22845, 22846, 22847, 22848, 22849, 22850, 22851, 22852, 22853, 22854, 22855, 22856, 22857, 22858, 22859, 22860, 22861, 22862, 22863, 22864, 22865, 22866, 22867, 22868, 22869, 22870, 22871, 22872, 22873, 22874, 22875, 22876, 22877, 22878, 22879, 22880, 22881, 22882, 22883, 22884, 22885, 22886, 22887, 22888, 22889, 22890, 22891, 22892, 22893, 22894, 22895, 22896, 22897, 22898, 22899, 22900, 22901, 22902, 22903, 22904, 22905, 22906, 22907, 22908, 22909, 22910, 22911, 22912, 22913, 22914, 22915, 22916, 22917, 22918, 22919, 22920, 22921, 22922, 22923, 22924, 22925, 22926, 22927, 22928, 22929, 22930, 22931, 22932, 22933, 22934, 22935, 22936, 22937, 22938, 22939, 22940, 22941, 22942, 22943, 22944, 22945, 22946, 22947, 22948, 22949, 22950, 22951, 22952, 22953, 22954, 22955, 22956, 22957, 22958, 22959, 22960, 22961, 22962, 22963, 22964, 22965, 22966, 22967, 22968, 22969, 22970, 22971, 22972, 22973, 22974, 22975, 22976, 22977, 22978, 22979, 22980, 22981, 22982, 22983, 22984, 22985, 22986, 22987, 22988, 22989, 22990, 22991, 22992, 22993, 22994, 22995, 22996, 22997, 22998, 22999, 23000, 23001, 23002, 23003, 23004, 23005, 23006, 23007, 23008, 23009, 23010, 23011, 23012, 23013, 23014, 23015, 23016, 23017, 23018, 23019, 23020, 23021, 23022, 23023, 23024, 23025, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23033, 23034, 23035, 23036, 23037, 23038, 23039, 23040, 23041, 23042, 23043, 23044, 23045, 23046, 23047, 23048, 23049, 23050, 23051, 23052, 23053, 23054, 23055, 23056, 23057, 23058, 23059, 23060, 23061, 23062, 23063, 23064, 23065, 23066, 23067, 23068, 23069, 23070, 23071, 23072, 23073, 23074, 23075, 23076, 23077, 23078, 23079, 23080, 23081, 23082, 23083, 23084, 23085, 23086, 23087, 23088, 23089, 23090, 23091, 23092, 23093, 23094, 23095, 23096, 23097, 23098, 23099, 23100, 23101, 23102, 23103, 23104, 23105, 23106, 23107, 23108, 23109, 23110, 23111, 23112, 23113, 23114, 23115, 23116, 23117, 23118, 23119, 23120, 23121, 23122, 23123, 23124, 23125, 23126, 23127, 23128, 23129, 23130, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23138, 23139, 23140, 23141, 23142, 23143, 23144, 23145, 23146, 23147, 23148, 23149, 23150, 23151, 23152, 23153, 23154, 23155, 23156, 23157, 23158, 23159, 23160, 23161, 23162, 23163, 23164, 23165, 23166, 23167, 23168, 23169, 23170, 23171, 23172, 23173, 23174, 23175, 23176, 23177, 23178, 23179, 23180, 23181, 23182, 23183, 23184, 23185, 23186, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23194, 23195, 23196, 23197, 23198, 23199, 23200, 23201, 23202, 23203, 23204, 23205, 23206, 23207, 23208, 23209, 23210, 23211, 23212, 23213, 23214, 23215, 23216, 23217, 23218, 23219, 23220, 23221, 23222, 23223, 23224, 23225, 23226, 23227, 23228, 23229, 23230, 23231, 23232, 23233, 23234, 23235, 23236, 23237, 23238, 23239, 23240, 23241, 23242, 23243, 23244, 23245, 23246, 23247, 23248, 23249, 23250, 23251, 23252, 23253, 23254, 23255, 23256, 23257, 23258, 23259, 23260, 23261, 23262, 23263, 23264, 23265, 23266, 23267, 23268, 23269, 23270, 23271, 23272, 23273, 23274, 23275, 23276, 23277, 23278, 23279, 23280, 23281, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23300, 23301, 23302, 23303, 23304, 23305, 23306, 23307, 23308, 23309, 23310, 23311, 23312, 23313, 23314, 23315, 23316, 23317, 23318, 23319, 23320, 23321, 23322, 23323, 23324, 23325, 23326, 23327, 23328, 23329, 23330, 23331, 23332, 23333, 23334, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23343, 23344, 23345, 23346, 23347, 23348, 23349, 23350, 23351, 23352, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23360, 23361, 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, 23372, 23373, 23374, 23375, 23376, 23377, 23378, 23379, 23380, 23381, 23382, 23383, 23384, 23385, 23386, 23387, 23388, 23389, 23390, 23391, 23392, 23393, 23394, 23395, 23396, 23397, 23398, 23399, 23400, 23401, 23402, 23403, 23404, 23405, 23406, 23407, 23408, 23409, 23410, 23411, 23412, 23413, 23414, 23415, 23416, 23417, 23418, 23419, 23420, 23421, 23422, 23423, 23424, 23425, 23426, 23427, 23428, 23429, 23430, 23431, 23432, 23433, 23434, 23435, 23436, 23437, 23438, 23439, 23440, 23441, 23442, 23443, 23444, 23445, 23446, 23447, 23448, 23449, 23450, 23451, 23452, 23453, 23454, 23455, 23456, 23457, 23458, 23459, 23460, 23461, 23462, 23463, 23464, 23465, 23466, 23467, 23468, 23469, 23470, 23471, 23472, 23473, 23474, 23475, 23476, 23477, 23478, 23479, 23480, 23481, 23482, 23483, 23484, 23485, 23486, 23487, 23488, 23489, 23490, 23491, 23492, 23493, 23494, 23495, 23496, 23497, 23498, 23499, 23500, 23501, 23502, 23503, 23504, 23505, 23506, 23507, 23508, 23509, 23510, 23511, 23512, 23513, 23514, 23515, 23516, 23517, 23518, 23519, 23520, 23521, 23522, 23523, 23524, 23525, 23526, 23527, 23528, 23529, 23530, 23531, 23532, 23533, 23534, 23535, 23536, 23537, 23538, 23539, 23540, 23541, 23542, 23543, 23544, 23545, 23546, 23547, 23548, 23549, 23550, 23551, 23552, 23553, 23554, 23555, 23556, 23557, 23558, 23559, 23560, 23561, 23562, 23563, 23564, 23565, 23566, 23567, 23568, 23569, 23570, 23571, 23572, 23573, 23574, 23575, 23576, 23577, 23578, 23579, 23580, 23581, 23582, 23583, 23584, 23585, 23586, 23587, 23588, 23589, 23590, 23591, 23592, 23593, 23594, 23595, 23596, 23597, 23598, 23599, 23600, 23601, 23602, 23603, 23604, 23605, 23606, 23607, 23608, 23609, 23610, 23611, 23612, 23613, 23614, 23615, 23616, 23617, 23618, 23619, 23620, 23621, 23622, 23623, 23624, 23625, 23626, 23627, 23628, 23629, 23630, 23631, 23632, 23633, 23634, 23635, 23636, 23637, 23638, 23639, 23640, 23641, 23642, 23643, 23644, 23645, 23646, 23647, 23648, 23649, 23650, 23651, 23652, 23653, 23654, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23662, 23663, 23664, 23665, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23673, 23674, 23675, 23676, 23677, 23678, 23679, 23680, 23681, 23682, 23683, 23684, 23685, 23686, 23687, 23688, 23689, 23690, 23691, 23692, 23693, 23694, 23695, 23696, 23697, 23698, 23699, 23700, 23701, 23702, 23703, 23704, 23705, 23706, 23707, 23708, 23709, 23710, 23711, 23712, 23713, 23714, 23715, 23716, 23717, 23718, 23719, 23720, 23721, 23722, 23723, 23724, 23725, 23726, 23727, 23728, 23729, 23730, 23731, 23732, 23733, 23734, 23735, 23736, 23737, 23738, 23739, 23740, 23741, 23742, 23743, 23744, 23745, 23746, 23747, 23748, 23749, 23750, 23751, 23752, 23753, 23754, 23755, 23756, 23757, 23758, 23759, 23760, 23761, 23762, 23763, 23764, 23765, 23766, 23767, 23768, 23769, 23770, 23771, 23772, 23773, 23774, 23775, 23776, 23777, 23778, 23779, 23780, 23781, 23782, 23783, 23784, 23785, 23786, 23787, 23788, 23789, 23790, 23791, 23792, 23793, 23794, 23795, 23796, 23797, 23798, 23799, 23800, 23801, 23802, 23803, 23804, 23805, 23806, 23807, 23808, 23809, 23810, 23811, 23812, 23813, 23814, 23815, 23816, 23817, 23818, 23819, 23820, 23821, 23822, 23823, 23824, 23825, 23826, 23827, 23828, 23829, 23830, 23831, 23832, 23833, 23834, 23835, 23836, 23837, 23838, 23839, 23840, 23841, 23842, 23843, 23844, 23845, 23846, 23847, 23848, 23849, 23850, 23851, 23852, 23853, 23854, 23855, 23856, 23857, 23858, 23859, 23860, 23861, 23862, 23863, 23864, 23865, 23866, 23867, 23868, 23869, 23870, 23871, 23872, 23873, 23874, 23875, 23876, 23877, 23878, 23879, 23880, 23881, 23882, 23883, 23884, 23885, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23895, 23896, 23897, 23898, 23899, 23900, 23901, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23911, 23912, 23913, 23914, 23915, 23916, 23917, 23918, 23919, 23920, 23921, 23922, 23923, 23924, 23925, 23926, 23927, 23928, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23936, 23937, 23938, 23939, 23940, 23941, 23942, 23943, 23944, 23945, 23946, 23947, 23948, 23949, 23950, 23951, 23952, 23953, 23954, 23955, 23956, 23957, 23958, 23959, 23960, 23961, 23962, 23963, 23964, 23965, 23966, 23967, 23968, 23969, 23970, 23971, 23972, 23973, 23974, 23975, 23976, 23977, 23978, 23979, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23988, 23989, 23990, 23991, 23992, 23993, 23994, 23995, 23996, 23997, 23998, 23999, 24000, 24001, 24002, 24003, 24004, 24005, 24006, 24007, 24008, 24009, 24010, 24011, 24012, 24013, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24024, 24025, 24026, 24027, 24028, 24029, 24030, 584, 10170, 27246, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27519, 27520, 27521, 27522, 27523, 27524, 27525, 27526, 27527, 27528, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27541, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27663, 27664, 27665, 27666, 27667, 27668, 27669, 27670, 27671, 27672, 27673, 27674, 27675, 27676, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27684, 27685, 27686, 27687, 27688, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27700, 27701, 27702, 27703, 27704, 27705, 27706, 27707, 27708, 27709, 27710, 27711, 27712, 27713, 27714, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27817, 27818, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27914, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27989, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28002, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28017, 28018, 28019, 28020, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28102, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28126, 28127, 28128, 28129, 28130, 28131, 28132, 28133, 28134, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28146, 28147, 28148, 28149, 28150, 28151, 28152, 28153, 28154, 28155, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28185, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28206, 28207, 28208, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28267, 28268, 28269, 28270, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28299, 28300, 28301, 28302, 28303, 28304, 28305, 28306, 28307, 28308, 30973, 30974, 30976, 31342, 31343, 31353, 31373, 31374, 31380, 31386, 31392, 31398, 31474, 31475, 31476, 31477, 20, 3148, 3155, 3230, 3231, 3253, 4010, 4402, 4687, 4802, 5019, 5338, 6392, 12636, 13654, 14168, 14752, 14753, 14917, 18116, 29219, 1, 32164, 2, 27148, 27185, 1, 26137, 1, 19556, 1, 29853, 1, 12104, 1, 30826, 1, 26061, 2, 27139, 27162, 1, 32675, 3, 3787, 3972, 11486, 1, 18400, 1, 3083, 1, 19009, 1, 25998, 2, 12856, 13362, 1, 2034, 1, 26913, 2, 22423, 23498, 1, 12883, 1, 15572, 1, 16264, 1, 17835, 1, 23888, 1, 26259, 1, 31193, 1, 32184, 1, 25169, 1, 25097, 7, 3086, 3088, 3090, 3093, 3096, 3109, 3110, 4, 10267, 10314, 17335, 29020, 1, 23270, 1, 8859, 1, 14353, 1, 29814, 1, 26796, 1, 32241, 1, 23172, 1, 18069, 4, 13680, 18679, 29379, 29413, 1, 3302, 1, 3569, 2, 27588, 27613, 1, 27249, 27, 6384, 18603, 21314, 21369, 21370, 21451, 21463, 21527, 21553, 21623, 21720, 21786, 21895, 21921, 21922, 21923, 21924, 21925, 21926, 21927, 21928, 21929, 21979, 22184, 22310, 22321, 22361, 1, 10553, 1, 12992, 1, 9159, 1, 27259, 2, 2239, 20542, 4, 30693, 30850, 30851, 30852, 2, 7937, 9945, 265, 51, 175, 186, 1553, 1556, 1592, 1618, 1626, 1636, 1648, 1649, 1651, 1652, 1653, 1658, 1661, 1667, 1673, 1676, 1677, 1682, 1702, 1712, 1736, 1817, 1818, 1826, 1827, 1828, 1829, 1834, 1840, 1843, 1845, 1846, 1862, 1864, 1867, 1869, 1927, 2091, 2094, 2101, 2102, 2106, 2266, 2363, 2376, 2451, 2540, 2631, 2642, 2645, 2700, 2800, 2811, 2814, 2896, 2986, 2989, 2999, 3011, 3014, 3102, 3190, 3270, 3316, 3325, 3559, 3639, 4336, 5408, 5438, 5443, 5545, 5713, 5828, 5996, 6006, 6121, 6214, 6347, 6360, 6483, 7341, 7383, 7451, 7560, 7565, 7571, 7587, 7612, 7715, 8256, 8289, 8309, 8329, 8438, 8578, 8581, 8585, 8588, 8861, 8862, 9079, 9089, 9099, 9151, 9845, 10032, 10191, 10778, 10790, 10824, 10837, 10868, 11150, 11509, 11633, 11682, 11692, 11729, 11783, 11946, 12081, 13738, 14183, 14186, 14322, 14332, 14351, 14364, 14557, 14585, 14669, 15024, 15745, 15746, 15747, 15748, 16513, 16941, 16959, 16968, 17036, 17049, 17055, 17212, 17230, 17588, 18181, 18214, 18252, 18312, 18403, 18419, 18428, 18446, 18455, 18515, 18731, 18758, 18788, 19017, 19026, 19044, 19086, 19240, 19261, 19364, 19427, 19561, 19576, 19756, 19840, 19932, 20018, 20189, 20269, 20321, 20461, 20826, 20835, 20988, 21051, 21089, 21090, 21096, 21097, 21102, 21181, 22057, 22064, 22079, 22088, 22092, 22093, 22102, 22103, 22110, 22111, 22114, 22115, 22131, 22137, 22359, 22367, 24634, 24752, 24873, 24892, 27194, 27300, 27309, 27318, 28272, 28282, 28292, 28302, 28312, 28575, 29091, 29151, 29358, 29451, 29462, 29480, 29489, 29512, 29522, 29530, 29548, 29557, 29575, 29741, 29750, 29759, 29879, 29893, 29908, 29923, 29962, 30107, 30737, 30794, 30795, 30809, 30833, 30894, 30904, 30955, 30956, 30957, 30958, 30962, 31401, 31402, 31403, 31404, 31590, 31697, 31899, 31900, 31901, 32516, 1, 14628, 1, 26975, 29, 27121, 27122, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 16, 2222, 2338, 2517, 2606, 2773, 2871, 2963, 6221, 14346, 14352, 19545, 19815, 19920, 20011, 20539, 20817, 2, 28971, 28976, 1, 6142, 3, 12431, 14027, 14028, 1, 15499, 2, 20109, 20110, 1, 12158, 1, 9209, 1, 9376, 1, 9369, 7, 769, 827, 7317, 16321, 16322, 16323, 16324, 1, 14453, 1, 8867, 1, 7801, 17, 7537, 7740, 7741, 7742, 7917, 7918, 7919, 7920, 9727, 9728, 9729, 9730, 9731, 9732, 9733, 9736, 9982, 15, 256, 257, 276, 277, 298, 299, 366, 367, 486, 487, 488, 489, 727, 804, 6717, 1, 9363, 103, 11631, 11632, 11633, 11634, 11635, 11636, 11637, 11638, 11639, 11640, 11641, 11642, 11643, 11644, 11645, 11646, 11647, 11648, 11649, 11650, 11651, 11652, 11653, 11654, 11655, 11656, 11657, 11658, 11659, 11660, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668, 11669, 11670, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735, 11736, 11737, 11738, 11739, 11740, 11741, 11742, 11743, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11759, 11760, 11761, 11762, 11763, 11764, 11765, 11766, 11767, 11768, 11769, 11770, 11771, 11772, 11773, 11774, 11775, 12111, 12112, 30207, 30208, 31944, 31945, 31946, 31947, 31948, 31949, 31950, 31951, 31952, 31953, 1, 12950, 2, 17949, 24012, 1, 30663, 1, 23300, 2, 12282, 14838, 3, 274, 275, 7806, 1, 32055, 2, 6147, 6150, 1, 26055, 1, 8282, 1, 15550, 1, 25591, 1, 31137, 1, 22819, 1, 30408, 1, 9428, 1, 26240, 13, 7847, 7849, 7851, 7901, 7947, 7957, 9902, 9904, 9906, 9908, 9910, 9912, 9914, 1, 22618, 5, 10849, 10850, 10851, 11032, 11050, 1, 12193, 2, 21715, 21794, 1, 22476, 1, 22941, 3, 5150, 5225, 8391, 1, 23311, 2, 30338, 31651, 1, 26554, 1, 25225, 1, 18865, 1, 24464, 1, 32493, 31, 58, 716, 717, 756, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 4330, 4331, 5429, 7409, 7780, 7809, 7810, 8077, 9601, 9843, 9973, 13927, 14068, 16273, 16332, 16520, 22168, 22169, 28969, 32523, 1, 9400, 236, 1719, 15643, 15645, 15649, 15653, 15657, 15661, 15665, 15669, 15673, 15677, 15681, 15685, 15689, 15693, 15695, 15697, 15699, 15701, 15703, 15705, 15709, 15713, 15717, 15721, 15723, 15727, 15729, 15733, 15737, 15739, 15757, 15761, 15763, 15765, 15767, 15768, 15770, 15772, 15774, 15780, 15782, 15784, 15786, 15788, 15790, 15792, 15795, 15798, 15802, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, 15871, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15882, 15883, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, 16072, 16073, 16074, 16119, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16354, 16356, 16358, 16359, 16361, 16363, 16365, 16367, 16369, 16370, 16372, 16374, 16376, 16378, 16382, 16384, 16388, 16390, 16394, 16398, 16402, 16406, 16410, 16412, 16414, 16416, 16418, 16422, 16426, 16430, 16434, 16438, 16442, 16446, 16450, 16454, 16458, 16462, 16466, 16470, 16474, 16478, 16480, 16482, 16486, 16488, 16490, 16492, 2, 10804, 31639, 2, 13584, 17522, 1, 7564, 1, 23374, 14, 5425, 20196, 20197, 20198, 20199, 20200, 20201, 20202, 20203, 20204, 20205, 20206, 20207, 20208, 1, 15534, 1, 7751, 1, 4177, 5, 26666, 26787, 26788, 26789, 26889, 1, 30580, 35, 28354, 28355, 28357, 28364, 28365, 28366, 28369, 28370, 28407, 28412, 28413, 28416, 28418, 28419, 28422, 28429, 28430, 28439, 28446, 28447, 28450, 28520, 28534, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28566, 28567, 28568, 28614, 12, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3290, 3291, 3482, 3484, 3485, 2, 498, 17300, 1, 25996, 1, 24460, 1, 1883, 1, 25641, 1, 32654, 1, 5393, 1, 26490, 10, 1552, 1553, 1662, 1844, 1845, 1846, 15705, 15706, 15707, 15708, 1, 12188, 1, 25994, 1, 16786, 1, 21083, 1, 23316, 1, 23899, 1, 32786, 1, 26126, 2, 12129, 27235, 3, 4442, 5044, 14957, 1, 30714, 1, 3264, 1, 12042, 1, 4812, 1, 17279, 2, 19874, 24942, 1, 8853, 1, 26755, 1, 32474, 1, 22278, 2, 4113, 13473, 1, 31228, 1, 26303, 2, 28545, 31059, 6, 28602, 28603, 28604, 28605, 28606, 28607, 1, 29872, 1, 24918, 1, 25361, 1, 15270, 5, 161, 16711, 24300, 30651, 30656, 1, 13245, 2, 31089, 31090, 1, 13284, 1, 9567, 1, 12359, 2, 3872, 11497, 1, 16888, 2, 3888, 11502, 2, 1900, 19379, 1, 6140, 1, 9500, 28, 8728, 8800, 8804, 9058, 9059, 9060, 9061, 9062, 10796, 10797, 10949, 30363, 30616, 30618, 30619, 30621, 30622, 30623, 30624, 30625, 30626, 30627, 30628, 30630, 30891, 31598, 31599, 31799, 7, 8812, 26931, 26932, 26933, 26939, 27120, 31708, 1, 32088, 1, 25827, 2, 18903, 18954, 1, 25609, 1, 9528, 1, 30433, 19, 816, 817, 818, 819, 820, 6041, 7442, 7443, 7448, 7449, 7450, 7461, 7462, 7466, 7467, 14005, 14006, 23445, 30729, 1, 32214, 1, 25341, 3, 3841, 11445, 16689, 4, 10620, 12909, 24958, 24960, 1, 22588, 1, 9813, 1, 29944, 1, 31668, 1, 6015, 1, 23285, 1, 25451, 1, 25393, 1, 13028, 8, 3757, 3933, 11439, 11612, 11626, 11707, 11721, 16683, 1, 13099, 1, 25390, 1, 32160, 1, 32480, 2, 20612, 20613, 1, 8200, 1, 31736, 1, 21109, 1, 9458, 2, 31313, 31314, 2, 7803, 7806, 2, 29377, 29411, 1, 30571, 1, 17513, 2, 4250, 5646, 8, 21613, 21614, 21825, 21863, 21869, 22173, 22354, 22355, 1, 2126, 1, 18058, 1, 13035, 1, 15495, 1, 15159, 1, 8863, 1, 15454, 1, 22683, 1, 23385, 1, 29301, 1, 24230, 1, 25319, 1, 22549, 1, 32656, 3, 4204, 5483, 13509, 1, 6541, 2, 17952, 24016, 1, 12751, 1, 16864, 1, 15188, 1, 23232, 2, 4893, 19438, 1, 32485, 1, 9532, 1, 7557, 2, 8266, 10189, 30, 4022, 4407, 4637, 4996, 10385, 10386, 10462, 11241, 11335, 11838, 12355, 13352, 13517, 13889, 14922, 16638, 16746, 17400, 18120, 21278, 21357, 21510, 21511, 21688, 21803, 21884, 21924, 22208, 22331, 24525, 2, 11539, 29134, 1, 22552, 5, 4246, 4970, 5644, 13479, 29293, 1, 17926, 1, 9692, 2, 1273, 1274, 2, 30293, 30294, 1, 32054, 1, 5099, 1, 12484, 1, 29173, 1, 32153, 1, 11804, 2, 13280, 13347, 1, 23727, 1, 32619, 1, 13301, 1, 9382, 1, 13287, 1, 24732, 1, 5185, 1, 29838, 1, 30463, 1, 24456, 4, 737, 13939, 13944, 13949, 1, 24696, 1, 23214, 1, 25356, 1, 6094, 1, 26456, 76, 394, 422, 436, 437, 596, 600, 601, 602, 635, 641, 670, 697, 701, 736, 784, 885, 887, 1001, 1008, 1010, 1283, 1284, 1586, 1787, 3404, 3405, 5140, 6019, 6488, 6490, 6525, 6536, 6561, 6570, 6659, 6670, 7308, 7309, 7310, 7330, 7334, 7540, 7604, 7605, 7786, 7930, 7997, 8728, 9634, 9636, 9647, 9964, 9965, 10233, 10711, 10740, 10759, 11144, 13751, 13752, 13767, 13768, 13779, 13780, 13993, 13994, 14102, 14132, 14133, 20552, 21918, 30872, 30873, 30874, 30875, 30876, 1, 30031, 1, 23939, 4, 21177, 21178, 21222, 22016, 3, 30506, 30507, 30508, 1, 31979, 1, 7795, 1, 30296, 1, 12989, 1, 17507, 3, 21122, 21770, 31673, 1, 30453, 1, 22550, 10, 1874, 3095, 3096, 3097, 3999, 4850, 5480, 5507, 5527, 19409, 1, 32296, 1, 26463, 1, 25134, 1, 15583, 1, 5174, 1, 5199, 1, 18051, 2, 4608, 19351, 1, 18007, 1, 25993, 1, 16748, 1, 32678, 6, 22108, 22109, 22110, 22111, 22112, 22113, 1, 21121, 30, 897, 915, 946, 959, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7130, 7131, 7248, 7249, 27991, 28017, 28049, 28075, 28107, 28133, 28165, 28191, 28223, 28249, 25, 174, 175, 181, 1605, 1765, 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7373, 7374, 7375, 7376, 7377, 7378, 7379, 15893, 15894, 15895, 15901, 15946, 16019, 1, 10198, 1, 11968, 1, 3040, 1, 25442, 1, 25945, 1, 32371, 2, 1035, 1067, 1, 25675, 1, 22523, 1, 23718, 1, 7562, 1, 8575, 1, 25418, 1, 9860, 1, 3870, 1, 32612, 1, 17785, 5, 1621, 15653, 15654, 15655, 15656, 1, 22723, 2, 368, 369, 24, 3150, 3232, 4185, 4456, 4490, 4491, 4910, 4937, 11260, 11354, 11853, 12827, 13384, 13638, 14971, 16596, 16781, 17352, 18151, 24984, 26096, 26099, 26590, 29173, 1, 31172, 1, 30515, 1, 17778, 1, 25650, 1, 30410, 1, 25349, 1, 23092, 178, 381, 387, 388, 390, 397, 398, 399, 404, 405, 409, 416, 417, 423, 424, 425, 426, 430, 431, 432, 544, 545, 582, 583, 591, 595, 598, 601, 604, 610, 611, 617, 621, 622, 623, 631, 638, 640, 644, 647, 652, 663, 668, 685, 689, 730, 773, 797, 798, 965, 966, 967, 1159, 1160, 1177, 1178, 1206, 1207, 1210, 1211, 1261, 1262, 1263, 1264, 1285, 1286, 1299, 1300, 1301, 1302, 1307, 1308, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6680, 6681, 6683, 6685, 6686, 6690, 6692, 6696, 6699, 6928, 6929, 6934, 6935, 6944, 6945, 6952, 6953, 6960, 6961, 6966, 6967, 6972, 6973, 6978, 6979, 6988, 6989, 6996, 6997, 7002, 7003, 7012, 7013, 7638, 7639, 8136, 8138, 8139, 8141, 8148, 8150, 8152, 8154, 8276, 9506, 9507, 9508, 9509, 9750, 10343, 10346, 10347, 10348, 10894, 13821, 13822, 14073, 14079, 14080, 14101, 14125, 14126, 14127, 14873, 14886, 14893, 14894, 19123, 19124, 19125, 25048, 26614, 26615, 26616, 28491, 28549, 31594, 31595, 31596, 31597, 2, 8241, 8260, 1, 13283, 103, 16495, 16496, 16497, 16498, 16499, 16500, 16501, 16502, 16503, 16504, 16505, 16506, 16507, 16508, 16509, 16510, 16511, 16512, 16513, 16514, 16515, 16516, 16517, 16518, 16519, 16520, 16521, 16522, 16523, 16524, 16525, 16526, 16527, 16528, 16529, 16530, 16531, 16532, 16533, 16534, 16535, 16536, 16537, 16538, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16552, 16553, 16554, 16555, 16556, 16557, 16558, 16559, 16560, 16561, 16562, 16563, 16564, 16565, 16566, 16567, 16568, 16569, 16570, 16571, 16572, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16581, 16582, 16583, 16584, 16585, 16586, 16587, 16588, 16589, 16590, 16706, 16707, 16708, 16709, 16710, 16711, 16712, 7, 21414, 21415, 21416, 21417, 21418, 21419, 22248, 1, 26290, 1, 13317, 2, 258, 259, 2, 12192, 14890, 34, 21643, 21644, 21645, 21646, 21647, 21648, 21649, 21650, 21651, 21652, 21653, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21663, 21664, 21665, 21666, 21667, 22039, 22040, 22041, 22325, 22326, 22327, 22328, 22329, 22330, 1, 22978, 17, 923, 955, 1123, 1124, 6553, 10407, 10408, 28000, 28026, 28058, 28084, 28116, 28142, 28174, 28200, 28232, 28258, 1, 32234, 1, 32458, 1, 11939, 13, 8104, 8283, 8720, 8964, 8978, 8979, 16938, 28638, 28639, 28640, 28694, 30975, 30976, 1, 26262, 6, 10782, 10783, 10906, 30331, 30340, 30952, 1, 23748, 1, 3825, 22, 10996, 21254, 21255, 21439, 21887, 22019, 22064, 22065, 22066, 22067, 22068, 22069, 22070, 22106, 22146, 22147, 22148, 22175, 22326, 22359, 22367, 31809, 1, 15164, 1, 18001, 1, 12674, 8, 10107, 10108, 21321, 21807, 21835, 21886, 21887, 21888, 1, 13273, 1, 23131, 1, 30512, 1, 31320, 1, 26398, 3, 4542, 4543, 4544, 1, 30354, 2, 4231, 12508, 1, 22611, 4, 24130, 24207, 24281, 24434, 1, 25812, 1, 7526, 6, 1125, 1126, 10277, 10324, 10682, 29028, 1, 8005, 2, 4043, 5617, 1, 10950, 1, 12587, 1, 16902, 1, 27267, 1, 8708, 1, 29267, 122, 16591, 16592, 16593, 16594, 16595, 16596, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16605, 16606, 16607, 16608, 16609, 16610, 16611, 16612, 16613, 16614, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16622, 16623, 16624, 16625, 16626, 16627, 16628, 16629, 16630, 16631, 16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 16645, 16646, 16647, 16648, 16649, 16650, 16651, 16652, 16653, 16654, 16655, 16656, 16657, 16658, 16659, 16660, 16661, 16662, 16663, 16664, 16665, 16666, 16667, 16668, 16669, 16670, 16671, 16672, 16673, 16674, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16682, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16692, 16693, 16694, 16695, 16696, 16697, 16698, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 16713, 16714, 16715, 16716, 16717, 16718, 16719, 1, 13029, 4, 21157, 21204, 21223, 21483, 1, 3046, 4, 7982, 30632, 30739, 30765, 1, 17083, 2, 17919, 23867, 22, 3144, 3228, 3278, 4026, 4408, 4639, 4993, 5335, 11244, 11338, 11841, 12370, 13669, 13913, 14166, 14746, 14747, 14923, 16641, 16747, 18121, 24594, 1, 26465, 1, 9512, 2, 3055, 3056, 1, 15569, 12, 7758, 7819, 9626, 9628, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 1, 18088, 1, 26727, 3, 26788, 26791, 26792, 1, 3993, 289, 532, 533, 534, 535, 786, 787, 788, 789, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 805, 806, 807, 808, 809, 810, 811, 812, 813, 821, 822, 823, 824, 835, 836, 837, 841, 842, 847, 848, 849, 850, 853, 854, 856, 859, 862, 1530, 1553, 1578, 1585, 1588, 1608, 1631, 1632, 1641, 1642, 1643, 1647, 1648, 1649, 1650, 1655, 1656, 1658, 1667, 1671, 1677, 1678, 1702, 1743, 1744, 1745, 1797, 1800, 1803, 1807, 1810, 1816, 1818, 1820, 1826, 1827, 1828, 1829, 1830, 1831, 1834, 1835, 1836, 1842, 1843, 1846, 1848, 1849, 1856, 1865, 1870, 2087, 2091, 2092, 2095, 2096, 2101, 2102, 2106, 2107, 2112, 2132, 2142, 2143, 2144, 2151, 2154, 2155, 3547, 5975, 6032, 6033, 6034, 6035, 6036, 6037, 6040, 6476, 6481, 6482, 6483, 6705, 6713, 6718, 6719, 6760, 6762, 6763, 6765, 6766, 6767, 6770, 6771, 6772, 6773, 6778, 6779, 6780, 6781, 6784, 6785, 6790, 6791, 6792, 6793, 6802, 6803, 6808, 6809, 6810, 6811, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6832, 6833, 6836, 6837, 6838, 6839, 6840, 6841, 6856, 6857, 6858, 6859, 6860, 6861, 6864, 6865, 6870, 6871, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6892, 6893, 6902, 6903, 6912, 6913, 6914, 6915, 6916, 6926, 6927, 6938, 6939, 6948, 6949, 6950, 6951, 6964, 6965, 6968, 6969, 6970, 6971, 6982, 6983, 6992, 6993, 6994, 6995, 7006, 7007, 7010, 7011, 7470, 7471, 9540, 9541, 9578, 9580, 9764, 9765, 9769, 9829, 9846, 9918, 9919, 9920, 9921, 9967, 9968, 10228, 10725, 11104, 11106, 11109, 15742, 15744, 15746, 15748, 15750, 15751, 15753, 15756, 16287, 16288, 16289, 16290, 16291, 16292, 16293, 16376, 16377, 16490, 16491, 18470, 18511, 18633, 19117, 19118, 19122, 19124, 19125, 19126, 19127, 19813, 25032, 26535, 26907, 30792, 30956, 1, 7514, 1, 15498, 1, 25737, 1, 30719, 3, 22045, 24615, 29258, 1, 30257, 1, 9958, 1, 25531, 2, 30696, 31210, 1, 4982, 1, 30949, 3, 8273, 10127, 10128, 1, 24681, 1, 9762, 1, 4161, 1, 12729, 2, 22144, 22145, 1, 15243, 1, 32596, 1, 22675, 1, 24643, 1, 16263, 1, 7981, 1, 17324, 1, 16265, 1, 30522, 10, 1153, 1154, 9185, 9186, 9187, 9188, 9612, 9613, 9614, 9615, 1, 30315, 3, 1634, 15693, 15694, 8, 28322, 28405, 28438, 28439, 28440, 28441, 28468, 28497, 4, 1755, 1756, 1757, 1758, 2, 7487, 7488, 1, 22463, 1, 13050, 1, 14380, 2, 350, 351, 3, 17569, 29395, 29429, 1, 23395, 1, 12214, 1, 24478, 1, 7926, 1, 6157, 1, 24445, 1, 25192, 1, 26085, 62, 157, 187, 442, 510, 511, 514, 515, 518, 519, 522, 523, 526, 527, 530, 531, 637, 658, 690, 781, 807, 811, 822, 861, 1554, 1580, 1584, 1731, 1732, 1748, 1831, 1836, 1872, 2103, 2105, 2161, 3416, 3419, 5543, 6760, 6762, 7339, 7512, 7787, 8279, 8934, 10718, 10763, 10764, 13961, 13962, 14134, 14846, 14855, 14882, 14884, 14891, 20203, 20204, 21711, 21862, 22360, 27040, 1, 22264, 1, 24545, 1, 12978, 1, 23031, 1, 30306, 2, 1333, 1379, 1, 8105, 1, 23629, 4, 13975, 13976, 13977, 13978, 1, 18288, 1, 17807, 1, 31325, 20, 8952, 10779, 29081, 30584, 30600, 31054, 31058, 31059, 31060, 31061, 31062, 31641, 31779, 31780, 31781, 31786, 31787, 31788, 31789, 31790, 1, 15371, 1, 25470, 1, 13252, 1, 7434, 7, 3654, 3694, 3733, 6416, 6455, 10486, 21380, 4, 10838, 11029, 30476, 30518, 1, 12558, 1, 24090, 1, 25132, 2, 18705, 18706, 1, 30258, 1, 31960, 3, 20851, 24760, 29367, 20, 301, 563, 603, 640, 1603, 1604, 1654, 1718, 1770, 6672, 27975, 27976, 29616, 29617, 29618, 29619, 29653, 29654, 29676, 29677, 1, 21189, 1, 15011, 2, 3335, 3465, 1, 4028, 1, 9145, 1, 8213, 2, 13322, 24648, 1, 30341, 1, 32447, 1, 28939, 1, 31652, 1, 16875, 1, 27049, 3, 1317, 1363, 17709, 170, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 20196, 20197, 20198, 20199, 20200, 20201, 20202, 20203, 20204, 20205, 20206, 20207, 20208, 1, 14983, 1, 15149, 1, 22604, 1, 24311, 1, 26112, 1, 22269, 1, 22594, 1, 12774, 1, 9745, 21, 3464, 3465, 4155, 11193, 11287, 11584, 11814, 12707, 13627, 13846, 16614, 16743, 17255, 17381, 18112, 21560, 21561, 21985, 24360, 24548, 29161, 1, 9637, 1, 31801, 1, 25098, 1, 25320, 1, 26171, 1, 31192, 1, 15457, 1, 32721, 2, 13815, 13816, 1, 7944, 3, 5139, 5140, 11012, 1, 13269, 1, 32805, 4, 8499, 8550, 8551, 8552, 2, 27106, 27107, 2, 839, 7784, 1, 12311, 1, 22885, 1, 26200, 1, 17526, 1, 26751, 1, 22598, 1, 32770, 1, 7894, 2, 7624, 7676, 1, 25999, 4, 6154, 6155, 6156, 6157, 1, 30169, 1, 5164, 1, 9248, 2, 31051, 31620, 1, 12717, 1, 13094, 1, 12826, 1, 22786, 5, 1624, 15681, 15682, 15683, 15684, 1152, 7350, 9162, 9164, 9189, 9190, 9191, 9192, 9193, 9194, 9195, 9196, 9197, 9198, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27478, 27479, 27480, 27481, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27490, 27491, 27492, 27493, 27494, 27495, 27496, 27497, 27498, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27513, 27514, 27515, 27516, 27517, 27518, 27519, 27520, 27521, 27522, 27523, 27524, 27525, 27526, 27527, 27528, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27541, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27584, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27593, 27594, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27612, 27613, 27614, 27615, 27616, 27617, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27637, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 27663, 27664, 27665, 27666, 27667, 27668, 27669, 27670, 27671, 27672, 27673, 27674, 27675, 27676, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27684, 27685, 27686, 27687, 27688, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27700, 27701, 27702, 27703, 27704, 27705, 27706, 27707, 27708, 27709, 27710, 27711, 27712, 27713, 27714, 27715, 27716, 27717, 27718, 27719, 27720, 27721, 27722, 27723, 27724, 27725, 27726, 27727, 27728, 27729, 27730, 27731, 27732, 27733, 27734, 27735, 27736, 27737, 27738, 27739, 27740, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27817, 27818, 27819, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27845, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27861, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27914, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27923, 27924, 27925, 27926, 27927, 27928, 27929, 27930, 27931, 27932, 27933, 27934, 27935, 27936, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27945, 27946, 27947, 27948, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27967, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 27975, 27976, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27989, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28002, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28017, 28018, 28019, 28020, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28057, 28058, 28059, 28060, 28061, 28062, 28063, 28064, 28065, 28066, 28067, 28068, 28069, 28070, 28071, 28072, 28073, 28074, 28075, 28076, 28077, 28078, 28079, 28080, 28081, 28082, 28083, 28084, 28085, 28086, 28087, 28088, 28089, 28090, 28091, 28092, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28102, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28126, 28127, 28128, 28129, 28130, 28131, 28132, 28133, 28134, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28146, 28147, 28148, 28149, 28150, 28151, 28152, 28153, 28154, 28155, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28185, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28206, 28207, 28208, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28267, 28268, 28269, 28270, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28286, 28287, 28288, 28289, 28290, 28291, 28292, 28293, 28294, 28295, 28296, 28297, 28298, 28299, 28300, 28301, 28302, 28303, 28304, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 29589, 29590, 29591, 29592, 29593, 29594, 29595, 29596, 29597, 29598, 29599, 29600, 29601, 29602, 29603, 29604, 29605, 29606, 29607, 29608, 29609, 29610, 29611, 29612, 29613, 29614, 29615, 29616, 29617, 29618, 29619, 29620, 29621, 29622, 29623, 29624, 29625, 29626, 29627, 29628, 29629, 29630, 29631, 29632, 29633, 29634, 29635, 29636, 29637, 29638, 29639, 29640, 29641, 29642, 29643, 29644, 29645, 29646, 29647, 29648, 29649, 29650, 29651, 29652, 29653, 29654, 29655, 29656, 29657, 29658, 29659, 29660, 29661, 29662, 29663, 29664, 29665, 29666, 29667, 29668, 29669, 29670, 29671, 29672, 29673, 29674, 29675, 29676, 29677, 29678, 29679, 29680, 29681, 29682, 29683, 29684, 29685, 29686, 29687, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29699, 29700, 29701, 29702, 29703, 29704, 29705, 29706, 29707, 29708, 29709, 29710, 29711, 29712, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29722, 29723, 29724, 29725, 29726, 29727, 29728, 29729, 29730, 29731, 1, 23538, 1, 30982, 8, 28627, 28686, 28688, 28837, 28859, 28929, 28931, 28933, 3, 2066, 18851, 18852, 1, 15051, 1, 26810, 1, 23435, 1, 30182, 1, 28962, 2, 6049, 6050, 1, 24390, 3, 24071, 24072, 24129, 3, 21184, 22028, 22185, 1, 13038, 1, 5118, 2, 10383, 10384, 1, 23158, 1, 15460, 1, 30501, 3, 13492, 24252, 29306, 10, 885, 886, 887, 997, 1000, 1001, 1004, 1008, 1009, 1010, 1, 32677, 1, 23020, 1, 32095, 88, 7468, 7469, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 31524, 31525, 31526, 31527, 31528, 31529, 31530, 31531, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 1, 23620, 1, 25294, 5, 1581, 1679, 2160, 15721, 15722, 14, 3159, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3171, 3172, 3173, 3174, 3175, 1, 6161, 1, 9641, 1, 9531, 1, 5508, 1, 26157, 84, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 5692, 5693, 5694, 6319, 6320, 14230, 14231, 14240, 20884, 20885, 20886, 20887, 20888, 20889, 20890, 20891, 20892, 20893, 20894, 20895, 20896, 20897, 20898, 20899, 20900, 20901, 20902, 20903, 20904, 20905, 20906, 20907, 20908, 20909, 20910, 20911, 20912, 1, 24440, 1, 17524, 1, 29142, 95, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 15033, 15034, 15035, 15036, 15037, 15038, 15039, 15040, 15041, 15042, 15043, 15044, 15045, 15046, 15047, 15048, 15049, 15050, 15051, 15052, 15053, 15054, 15055, 1, 24157, 1, 15282, 2, 4392, 14907, 1, 10773, 1, 6153, 2, 21123, 21124, 1, 26036, 3, 11930, 12040, 12046, 1, 11530, 1, 31319, 2, 377, 378, 2, 3956, 14460, 2, 5850, 5866, 1, 23800, 1, 23127, 1, 25425, 2, 12858, 13393, 7, 8860, 8984, 8990, 9000, 9004, 9005, 9024, 2, 22377, 23454, 2, 7798, 12569, 5, 31091, 31092, 31093, 31094, 31111, 1, 25604, 1, 15423, 1, 16256, 1, 7809, 1, 1729, 1, 12068, 157, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24442, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24464, 24465, 24466, 24467, 24468, 24469, 24470, 24471, 24472, 24473, 24474, 24475, 24476, 24477, 24478, 24479, 24480, 24481, 24482, 24483, 24484, 24485, 24486, 24487, 24488, 24489, 24490, 24491, 24492, 24493, 24494, 24495, 24496, 24497, 24498, 24499, 24500, 24501, 24502, 24503, 24504, 24505, 24506, 24507, 24508, 24509, 24510, 24511, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24530, 24531, 24532, 24533, 24534, 24535, 24536, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24545, 1, 7518, 1, 9289, 1, 7851, 1, 25312, 1, 22940, 1, 7690, 2, 5853, 5869, 1, 13082, 1, 25978, 2, 10700, 10701, 1, 30607, 29, 758, 760, 1714, 1749, 2131, 5899, 7739, 7968, 7969, 7976, 7977, 8240, 8241, 8260, 8262, 20096, 21082, 21133, 23443, 23444, 23447, 23911, 27004, 27006, 27008, 27010, 27056, 27111, 30753, 1, 3157, 1, 30172, 2, 5851, 5867, 1, 12039, 32, 442, 573, 574, 656, 658, 669, 670, 700, 701, 736, 2286, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4502, 10593, 14117, 14118, 14119, 14120, 14121, 14122, 20737, 20740, 20746, 20751, 20754, 4, 1878, 1991, 4088, 19400, 2, 4626, 4627, 1, 21283, 2, 4282, 19399, 1, 11992, 1, 18569, 1, 32094, 1, 25940, 1, 4298, 1, 7976, 1, 7817, 1, 12310, 1, 10636, 1, 22579, 1, 23006, 1, 29948, 4, 7727, 9740, 11176, 30877, 5, 11095, 26927, 26928, 31199, 31650, 1, 29296, 1, 23392, 1, 12961, 2, 8713, 8714, 1, 8784, 1, 25627, 1, 25112, 1, 25352, 5, 21171, 21535, 21652, 21653, 21761, 1, 11887, 1, 23364, 1, 9394, 1, 25564, 73, 9116, 9117, 9118, 9119, 10060, 10079, 10080, 10081, 10082, 10083, 10084, 10085, 10086, 10087, 10088, 10089, 10090, 10091, 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10099, 10100, 10101, 10102, 10103, 10104, 10105, 10106, 10109, 10110, 10111, 10112, 10113, 10114, 10115, 10116, 10121, 10122, 10123, 10124, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 2, 17605, 17641, 3, 4417, 12036, 14932, 80, 17427, 17428, 17429, 17430, 17431, 17432, 17433, 17434, 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, 17445, 17446, 17447, 17448, 17449, 17450, 17451, 17452, 17453, 17454, 17455, 17456, 17457, 17458, 17459, 17460, 17461, 17462, 17463, 17464, 17465, 17466, 17467, 17468, 17469, 17470, 17471, 17472, 17473, 17474, 17475, 17476, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17492, 17493, 17494, 17495, 17496, 17497, 17498, 17499, 17500, 17501, 17502, 17503, 17504, 17505, 17506, 1, 13063, 1, 25368, 2, 3951, 11469, 1, 32490, 1, 13726, 1, 17803, 1, 30418, 1, 3024, 1, 32294, 1, 25500, 1, 32038, 1, 17763, 1, 25448, 2, 31052, 31053, 1, 32803, 9, 3590, 3595, 3855, 6172, 11459, 13432, 14438, 16703, 26579, 1, 22661, 2, 17942, 24004, 1, 23337, 4, 3684, 3724, 6446, 10516, 32, 18187, 18188, 18189, 18190, 18191, 18192, 18193, 18194, 18195, 18196, 18197, 18198, 18199, 18200, 18201, 18202, 18203, 18204, 18205, 18206, 18207, 18208, 18209, 18210, 18211, 18212, 18213, 18214, 18215, 18216, 18217, 18218, 1, 23221, 1, 8188, 1, 23267, 1, 32131, 1, 16254, 2, 17865, 23804, 3, 4367, 4532, 4533, 1, 23633, 1, 24265, 1, 31983, 1, 32022, 1, 25079, 2, 9959, 9962, 2, 3471, 3473, 1, 4299, 1, 6018, 1, 23334, 2, 1311, 1312, 41, 4057, 4744, 4879, 5070, 13131, 13699, 17254, 17695, 18695, 21173, 21178, 21251, 21280, 21331, 21363, 21364, 21426, 21443, 21519, 21610, 21627, 21628, 21630, 21736, 21737, 21738, 21739, 21832, 21833, 21834, 21835, 21892, 21975, 22020, 22022, 22211, 22347, 22350, 22351, 22352, 22353, 1, 23938, 1, 25492, 1, 14546, 5, 22013, 22157, 22158, 22159, 22160, 4, 8973, 8974, 8975, 30864, 1, 22775, 1, 9841, 1, 8111, 1, 4071, 3, 30909, 30910, 30911, 1, 13025, 1, 29860, 1, 25728, 1, 31731, 3, 7530, 30600, 31183, 1, 13218, 1, 32627, 1, 32790, 1, 28941, 1, 22872, 1, 7499, 1, 17776, 1, 23714, 1, 32282, 1, 32630, 4, 10875, 11060, 11084, 30509, 1, 32272, 8, 8852, 8857, 26912, 26913, 26914, 26915, 26916, 26917, 1, 4033, 5, 30912, 30913, 30914, 30930, 30933, 1, 9466, 1, 18583, 7, 21228, 21242, 21342, 21398, 21399, 21494, 22193, 1, 13153, 1, 15216, 1, 23019, 1, 15131, 1, 32357, 31, 28323, 28394, 28404, 28442, 28443, 28444, 28445, 28446, 28447, 28448, 28449, 28450, 28451, 28455, 28457, 28460, 28474, 28476, 28481, 28485, 28486, 28491, 28512, 28516, 28528, 28538, 28540, 28557, 28558, 28559, 28560, 1, 29850, 1, 32832, 1, 25893, 20, 27191, 27192, 27193, 27194, 27195, 27196, 27197, 27198, 27199, 27200, 27201, 27202, 27203, 27204, 27205, 27206, 27207, 27208, 27209, 27210, 1, 26422, 1, 7772, 1, 11893, 1, 10527, 2, 17367, 18302, 1, 16278, 1, 26797, 1, 23983, 1, 11869, 1, 15145, 1, 15127, 2, 2987, 21091, 2, 16774, 22451, 2, 19830, 20692, 1, 30805, 1, 31940, 1, 9549, 1, 17058, 1, 7264, 13, 26806, 26807, 26808, 26809, 26810, 26812, 26813, 26814, 26815, 26821, 26822, 26823, 26832, 1, 23009, 1, 11534, 2, 22827, 29222, 1, 7979, 1, 25324, 1, 32302, 1, 22492, 1, 29176, 2, 22829, 29223, 1, 31808, 2, 22126, 22129, 1, 23399, 2, 24246, 24342, 1, 16819, 1, 9345, 1, 12474, 9, 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 30843, 1, 8259, 6, 26921, 26922, 26925, 26926, 26942, 26943, 1, 24192, 1, 13295, 62, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1, 30699, 1, 18681, 2, 6403, 6404, 1, 15435, 6, 8745, 18525, 19236, 30233, 30239, 30240, 68, 20852, 20853, 20854, 20855, 20856, 20857, 20858, 20859, 20860, 20861, 20862, 20863, 20864, 20865, 20866, 20867, 20868, 20869, 20870, 20871, 20872, 20873, 20874, 20875, 20876, 20877, 20878, 20879, 20880, 20881, 20882, 20883, 20884, 20885, 20886, 20887, 20888, 20889, 20890, 20891, 20892, 20893, 20894, 20895, 20896, 20897, 20898, 20899, 20900, 20901, 20902, 20903, 20904, 20905, 20906, 20907, 20908, 20909, 20910, 20911, 20912, 20913, 20914, 20915, 20916, 20917, 20918, 20919, 1, 24695, 3, 8861, 8862, 18530, 1, 32105, 2, 27121, 27150, 1, 32749, 1, 7697, 1, 1406, 1, 32697, 5, 4007, 4691, 5632, 6372, 19406, 1, 21116, 1, 23414, 1, 9276, 1, 24287, 14, 21254, 21306, 21307, 21351, 21449, 21546, 21547, 21548, 21938, 21993, 22198, 22201, 22229, 22235, 1, 10660, 1, 21397, 1, 32104, 1, 5639, 15, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 1, 23781, 19, 11043, 29736, 29905, 30293, 30779, 30785, 30786, 30787, 30788, 31431, 31752, 31805, 31914, 31915, 31916, 31917, 31918, 31919, 31920, 1, 27047, 1, 25986, 1, 31809, 1, 7505, 1, 22954, 1, 7276, 1, 13093, 2, 24186, 24391, 1, 6507, 3, 7764, 7917, 31768, 20, 21137, 21148, 21158, 21286, 21287, 21336, 21337, 21381, 21382, 21383, 21384, 21402, 21466, 21490, 21648, 21726, 21727, 21733, 21964, 22358, 1, 30194, 1, 25209, 2, 8197, 27188, 104, 1618, 1636, 1840, 6030, 7468, 7469, 7616, 7630, 7636, 7644, 7647, 7648, 7649, 7650, 7658, 7662, 7663, 7664, 7666, 7671, 7680, 7692, 7696, 7702, 7714, 8067, 8068, 8105, 9124, 9200, 9479, 9482, 9490, 9524, 9525, 9526, 9556, 9560, 9564, 9568, 9572, 9581, 9582, 9944, 9990, 9997, 9999, 10060, 10077, 10078, 10082, 10092, 10098, 10106, 10110, 10112, 10116, 10120, 10134, 10138, 10139, 10140, 10145, 10146, 10147, 10148, 10153, 10154, 10218, 10714, 15747, 15748, 16717, 30672, 30704, 30730, 30731, 31094, 31441, 31445, 31449, 31453, 31457, 31461, 31465, 31469, 31473, 31477, 31481, 31485, 31489, 31493, 31497, 31501, 31505, 31509, 31519, 31527, 31535, 31543, 31551, 31559, 31563, 31567, 1, 32428, 1, 22624, 1, 22987, 1, 22461, 1, 25705, 1, 22507, 1, 31138, 1, 12296, 1, 25119, 1, 25232, 1, 32699, 14, 541, 560, 561, 562, 593, 642, 653, 655, 673, 676, 6668, 6700, 10349, 30666, 1, 12634, 1, 9778, 1, 32348, 2, 28937, 28963, 1, 31805, 1, 11407, 7, 4114, 4609, 12885, 13702, 17669, 18669, 24658, 1, 9490, 1, 12537, 1, 6303, 51, 2163, 2291, 2382, 2466, 2557, 2646, 2720, 2722, 2818, 2905, 2907, 3546, 5539, 5697, 6493, 6494, 6495, 6496, 6498, 6499, 6500, 6501, 6510, 14148, 14247, 18471, 19161, 19270, 19372, 19481, 19645, 19741, 19763, 19765, 19831, 19832, 19917, 19921, 19942, 20007, 20084, 20178, 20252, 20389, 20536, 20599, 20685, 20814, 20918, 20977, 21044, 2, 26826, 26878, 1, 15271, 1, 12480, 1, 2553, 2, 13825, 13826, 5, 7269, 7297, 7300, 7356, 26611, 1, 26300, 1, 30173, 1, 31957, 1, 26402, 2, 10972, 31113, 1, 8030, 1, 15055, 1, 15162, 1, 26919, 1, 22669, 1, 3954, 1, 4375, 2, 4604, 12045, 6, 6261, 12524, 13544, 14429, 24072, 29334, 1, 14539, 1, 23275, 11, 5398, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 1, 32043, 1, 13165, 1, 10935, 1, 24621, 1, 31686, 64, 1339, 1385, 1947, 1965, 2188, 2311, 2404, 2488, 2577, 2743, 2841, 2929, 3205, 3351, 3426, 3498, 4271, 5086, 5317, 5470, 5500, 5531, 5538, 5659, 5908, 5911, 6290, 13046, 13410, 14196, 14271, 14567, 14609, 14682, 14710, 14786, 17600, 17636, 17716, 18478, 19185, 19288, 19451, 19503, 19609, 19665, 19711, 19785, 19870, 19964, 20045, 20137, 20225, 20287, 20350, 20496, 20560, 20633, 20718, 20774, 20859, 20889, 20936, 21021, 1, 32251, 2, 311, 312, 1, 29225, 1, 15598, 1, 17742, 1, 24258, 1, 7544, 1, 26034, 1, 3073, 8, 3756, 3932, 11438, 11611, 11625, 11706, 11720, 16682, 3, 30967, 30968, 30969, 1, 18005, 1, 965, 1, 7924, 26, 922, 954, 4273, 5085, 5093, 5484, 6608, 6617, 8742, 14110, 14874, 14875, 14876, 17733, 27999, 28025, 28057, 28083, 28115, 28141, 28173, 28199, 28231, 28257, 29393, 29427, 1, 19011, 2, 22395, 23471, 16, 8199, 8758, 8768, 10920, 11519, 11646, 11742, 12114, 27211, 27212, 27213, 27216, 30228, 30229, 30230, 31224, 1, 11892, 1, 13522, 1, 16885, 2, 1345, 1391, 2, 8972, 30869, 5, 3679, 3719, 6441, 10511, 14997, 1, 7943, 1, 22700, 1, 11545, 1, 30568, 1, 15385, 5, 15778, 15779, 15795, 15796, 15797, 1, 1459, 18, 2117, 2123, 2124, 2125, 2126, 2127, 2128, 7351, 10743, 14804, 16936, 16937, 17376, 17421, 18313, 19651, 20820, 22167, 1, 26040, 1, 30444, 1, 4030, 1, 12133, 3, 3851, 11455, 16699, 1, 17935, 1, 7838, 2, 27619, 27638, 7, 2098, 18641, 18642, 31560, 31561, 31562, 31563, 1, 10226, 1, 5652, 2, 27144, 27164, 4, 30571, 30572, 30954, 30981, 15, 9542, 9543, 9590, 9593, 9660, 10045, 10050, 10051, 12133, 14011, 14012, 14017, 14018, 14033, 14034, 3, 11000, 30613, 31661, 1, 26756, 1, 29199, 2, 302, 303, 8, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 1, 25350, 1, 12427, 1, 30843, 1, 12426, 1, 5045, 1, 25729, 1, 219, 1, 17280, 1, 15041, 1, 32137, 11, 8755, 10864, 11070, 12169, 29732, 29733, 29734, 29735, 30259, 30282, 30359, 358, 33, 34, 63, 157, 167, 183, 187, 742, 743, 828, 829, 888, 1355, 1356, 1358, 1359, 1436, 1457, 1458, 1499, 1522, 1523, 1524, 1581, 1763, 1974, 1981, 2008, 2009, 2010, 2011, 2013, 2031, 2038, 2072, 2073, 2074, 2160, 2352, 2372, 2381, 2384, 2619, 2620, 2696, 2788, 2789, 2886, 2887, 2983, 3015, 3265, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3408, 3409, 3481, 3482, 3483, 3484, 3485, 3490, 3491, 3591, 3592, 4322, 4323, 4324, 4325, 4332, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 5112, 5139, 5140, 5708, 5709, 6034, 6035, 6706, 6761, 7269, 7270, 7279, 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7312, 7313, 7314, 7315, 7326, 7327, 7328, 7340, 7346, 7435, 7505, 7507, 8104, 8964, 8978, 8979, 9035, 9037, 9042, 9043, 9044, 9046, 9050, 9051, 9052, 9053, 9054, 9055, 9057, 9058, 9069, 9070, 9850, 9851, 10189, 10478, 10479, 10580, 10581, 10739, 10740, 10760, 10762, 10771, 10772, 11118, 11120, 11121, 11133, 11134, 11144, 11145, 11146, 11147, 11157, 11158, 11159, 11160, 11161, 11162, 11164, 11165, 11166, 11167, 11168, 11169, 11174, 11175, 11176, 11265, 11266, 11267, 11268, 11269, 11270, 11364, 11365, 11366, 11505, 11506, 11507, 11508, 11509, 11510, 11511, 11512, 11513, 11514, 11515, 11516, 11517, 11518, 11519, 11520, 13718, 13923, 13924, 13930, 13960, 13961, 13962, 14187, 14188, 14189, 14190, 14243, 14244, 14245, 14246, 14445, 14803, 14804, 16275, 16276, 16333, 16334, 16495, 16496, 16525, 16606, 16652, 16653, 16938, 17209, 17759, 18340, 18469, 18632, 18633, 18700, 18782, 18783, 19008, 19009, 19331, 19332, 19420, 19421, 19434, 19437, 19478, 19553, 19555, 19556, 19557, 19652, 19653, 19693, 19829, 19939, 19941, 20096, 20097, 20098, 20099, 20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20553, 20594, 20606, 20607, 20608, 20609, 20610, 20611, 20612, 20613, 20626, 20687, 20689, 20690, 20691, 20692, 20693, 20694, 20695, 20851, 20852, 20853, 23910, 23911, 24727, 24728, 24729, 24730, 24731, 24732, 24733, 25046, 25047, 25048, 25049, 26638, 26908, 27062, 27063, 27064, 27113, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 29442, 29447, 29458, 29459, 29507, 29523, 29527, 30105, 30610, 30754, 30975, 31101, 31102, 31103, 32498, 32499, 32528, 1, 706, 1, 30118, 1, 25780, 1, 11556, 28, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21241, 21242, 21243, 21558, 21559, 21766, 21767, 22017, 3, 5682, 20966, 29133, 1, 26317, 1, 1423, 4, 8471, 8538, 8539, 8540, 1, 9766, 1, 3290, 1, 9316, 1, 11536, 1, 17840, 1, 22903, 7, 3200, 3217, 3223, 3226, 3235, 3236, 8809, 1, 14828, 1, 3990, 2, 26612, 26616, 1, 17081, 1, 4947, 1, 29792, 1, 32050, 2, 5059, 14822, 1, 23767, 3, 10254, 10301, 29009, 1, 9380, 2, 17874, 23813, 1, 23593, 1, 31300, 44, 1545, 1743, 16035, 16036, 16055, 16056, 16067, 16068, 16069, 16070, 16071, 16083, 16084, 16095, 16096, 16097, 16098, 16099, 16103, 16104, 16105, 16106, 16108, 16113, 16114, 16115, 16145, 16146, 16147, 16148, 16149, 16150, 16151, 16210, 16422, 16423, 16424, 16425, 29608, 29634, 29649, 29669, 29697, 29722, 2, 3061, 3062, 1, 26744, 1, 16242, 1, 17714, 1, 13143, 2, 17939, 24001, 2, 366, 367, 2, 338, 339, 1, 26404, 43, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 34, 6154, 21263, 21758, 22185, 22186, 22187, 22188, 22189, 22190, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22199, 22200, 22201, 22202, 22203, 22204, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22228, 22229, 22354, 1, 2000, 5, 13555, 13895, 14428, 24583, 29279, 1, 23365, 1, 32057, 2, 17897, 23842, 1, 22498, 1, 25977, 3, 13898, 24400, 24585, 1, 25644, 60, 7620, 7621, 7684, 7685, 7711, 8816, 9111, 9113, 9139, 9141, 9142, 9144, 9504, 9505, 9507, 9508, 9510, 9511, 9512, 9516, 9517, 9518, 9519, 9520, 9521, 9983, 9985, 9991, 9993, 10077, 10078, 10086, 10087, 10100, 10101, 29732, 31065, 31066, 31069, 31070, 31073, 31074, 31077, 31078, 31081, 31082, 31085, 31086, 31511, 31512, 31521, 31522, 31529, 31530, 31537, 31538, 31545, 31546, 31553, 31554, 1, 25802, 1, 26677, 2, 14404, 14406, 2, 15105, 15106, 1, 15518, 8, 28664, 28665, 28666, 28667, 28672, 28673, 28674, 28675, 1, 32486, 1, 23126, 1, 27028, 1, 13051, 1, 24181, 1, 22904, 1, 25869, 1, 32147, 10, 28820, 28821, 28822, 28823, 28824, 28825, 28826, 28827, 28828, 28829, 2, 13759, 13760, 1, 30990, 2, 3786, 11485, 2, 10622, 12901, 1, 25202, 2, 12868, 13390, 1, 32716, 1, 8027, 1, 14993, 1, 23141, 1, 23196, 1, 15203, 1, 16851, 1, 24480, 1, 30563, 1, 32307, 1, 17543, 1, 23621, 1, 31726, 1, 15506, 1, 22877, 1, 12919, 1, 26364, 1, 22277, 1, 22999, 1, 15330, 1, 23962, 1, 17022, 1, 16251, 1, 22502, 3, 8282, 10719, 10953, 1, 12155, 1, 23578, 1, 25605, 1, 7812, 1, 7661, 1, 12964, 3, 15017, 20413, 20445, 1, 25845, 2, 27633, 27658, 1, 32338, 2, 9038, 9039, 2, 17917, 23865, 1, 26253, 3, 3084, 3095, 3096, 5, 4267, 4951, 13462, 17455, 17495, 151, 705, 721, 747, 794, 4514, 6765, 7618, 7637, 7682, 7712, 7889, 7966, 7985, 8055, 8057, 8059, 8083, 8094, 8119, 8174, 8177, 8180, 8182, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8477, 8478, 8480, 8481, 8485, 8486, 8488, 8489, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8511, 8512, 8514, 8515, 8516, 8517, 8518, 8519, 8529, 8530, 8531, 8532, 8533, 8534, 8547, 8548, 8549, 8556, 8557, 8566, 8570, 8572, 8574, 8734, 9176, 9545, 9546, 9547, 9548, 9550, 9551, 9552, 9557, 9558, 9565, 9566, 9569, 9571, 9574, 9576, 9578, 9580, 9598, 9638, 9641, 9642, 9645, 9646, 9705, 9707, 9708, 9950, 9958, 9960, 9961, 9968, 9996, 10084, 10155, 10156, 10161, 10162, 10901, 13959, 26642, 26933, 26935, 26937, 26966, 26967, 26972, 26973, 27020, 27058, 27066, 27116, 27118, 28461, 28462, 28463, 28464, 28490, 28491, 28492, 28515, 28608, 28609, 28611, 28612, 28613, 28839, 28840, 28843, 28844, 28845, 28862, 30542, 30549, 30874, 30878, 30886, 30888, 30890, 31515, 1, 15284, 1, 23666, 9, 11120, 11174, 11269, 11270, 11365, 11366, 25046, 25047, 25049, 1, 9878, 1, 16806, 1, 31196, 1, 30504, 3, 31234, 31235, 31236, 2, 284, 285, 1, 15222, 1, 7312, 1, 12456, 2, 3739, 6459, 1, 160, 1, 15344, 1, 25215, 1, 32407, 1, 9884, 8, 8954, 11119, 30357, 30442, 30454, 30592, 30593, 30775, 1, 11053, 1, 23104, 1, 24155, 1, 10980, 1, 27140, 1, 27051, 30, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28404, 28405, 28406, 28407, 28408, 28573, 28574, 28575, 28576, 30871, 30872, 30877, 31615, 1, 32671, 1, 32366, 2, 28425, 28550, 1, 17979, 1, 11933, 1, 9580, 1, 14459, 1, 7667, 1, 10525, 1, 26117, 66, 168, 838, 7729, 7734, 7737, 7761, 7763, 7790, 7793, 7795, 7798, 7821, 7823, 7829, 7830, 7834, 7835, 7836, 7853, 7854, 7857, 7858, 7863, 7864, 7897, 7898, 7899, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962, 7997, 8006, 8092, 8104, 9747, 9862, 9863, 9864, 9865, 9904, 9905, 9908, 9909, 9912, 9913, 9930, 9931, 9963, 9964, 9965, 10959, 10968, 12573, 16708, 31158, 3, 846, 26906, 26907, 1, 17317, 1, 9269, 1, 16820, 24, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 6473, 6474, 6475, 6477, 6484, 6485, 19116, 1, 7787, 1, 25262, 1, 22117, 1, 9343, 1, 12572, 1, 23387, 1, 30213, 1, 23627, 1, 22257, 2, 7822, 9836, 4, 3674, 3714, 6436, 10506, 1, 32388, 2, 6287, 9892, 1, 17719, 1, 8016, 1, 30223, 39, 9893, 9894, 9895, 9896, 19121, 19122, 28551, 28552, 28553, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28728, 28729, 28730, 28731, 28732, 28733, 28734, 28741, 28748, 28758, 28759, 28773, 28774, 28788, 28789, 28790, 28791, 28792, 28835, 28836, 4, 389, 2113, 2114, 2115, 1, 8929, 1, 22527, 1, 32122, 1, 9614, 2, 7768, 7769, 2, 564, 12055, 1, 15247, 1, 30806, 1, 681, 1, 26344, 2, 14448, 15061, 1, 3903, 1, 23246, 6, 2462, 3179, 3261, 14775, 18885, 18936, 2, 7997, 9964, 1, 24315, 1, 18254, 2, 9522, 10046, 1, 25213, 1, 26386, 1, 22958, 1, 30429, 1, 5580, 1, 30333, 2, 7890, 12216, 1, 23663, 1, 16790, 1, 12660, 1, 15414, 1, 25467, 1, 11054, 16, 840, 6763, 7797, 7798, 7799, 9588, 9838, 9910, 9911, 9912, 9913, 9928, 9929, 10049, 10055, 10057, 1, 1437, 1, 9378, 67, 20209, 20210, 20211, 20212, 20213, 20214, 20215, 20216, 20217, 20218, 20219, 20220, 20221, 20222, 20223, 20224, 20225, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20233, 20234, 20235, 20236, 20237, 20238, 20239, 20240, 20241, 20242, 20243, 20244, 20245, 20246, 20247, 20248, 20249, 20250, 20251, 20252, 20253, 20254, 20255, 20256, 20257, 20258, 20259, 20260, 20261, 20262, 20263, 20264, 20265, 20266, 20267, 20268, 20269, 20270, 20271, 20272, 20273, 20274, 20275, 1, 22417, 1, 28950, 1, 995, 1, 30161, 2, 30249, 30638, 5, 30983, 30984, 31039, 31626, 31627, 54, 24546, 24547, 24548, 24549, 24550, 24551, 24552, 24553, 24554, 24555, 24556, 24557, 24558, 24559, 24560, 24561, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 1, 31243, 1, 9573, 8, 3749, 3926, 11431, 11606, 11620, 11701, 11715, 16675, 1, 27236, 1, 3022, 1, 12576, 1, 17793, 1, 22744, 1, 23260, 1, 26684, 18, 1039, 1071, 1216, 1217, 7256, 7258, 7275, 10670, 13785, 13786, 16297, 16335, 17249, 17462, 17502, 18827, 18890, 18941, 1, 9562, 1, 11801, 1, 17305, 354, 949, 1471, 1474, 1476, 1480, 1482, 1784, 3626, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 5110, 5628, 5629, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5957, 6225, 6226, 11541, 11542, 11543, 11544, 14652, 14653, 14654, 14655, 14656, 14657, 14658, 14659, 14660, 14661, 14662, 14663, 14664, 14665, 15606, 15625, 15631, 15644, 15646, 15650, 15654, 15658, 15662, 15666, 15670, 15674, 15678, 15682, 15686, 15690, 15694, 15696, 15698, 15700, 15702, 15704, 15706, 15710, 15714, 15718, 15722, 15724, 15728, 15730, 15734, 15738, 15740, 15758, 15762, 15764, 15766, 15769, 15771, 15773, 15775, 15781, 15783, 15785, 15787, 15789, 15791, 15793, 15796, 15799, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, 15950, 15951, 15952, 16075, 16076, 16077, 16078, 16079, 16080, 16081, 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, 16102, 16118, 16123, 16130, 16132, 16133, 16136, 16137, 16140, 16142, 16144, 16145, 16147, 16148, 16150, 16152, 16153, 16155, 16158, 16159, 16160, 16162, 16163, 16164, 16165, 16166, 16168, 16169, 16170, 16171, 16172, 16174, 16175, 16177, 16181, 16190, 16191, 16193, 16194, 16195, 16196, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16222, 16223, 16225, 16227, 16228, 16229, 16230, 16231, 16232, 16233, 16234, 16238, 16239, 16371, 16373, 16375, 16377, 16379, 16383, 16385, 16389, 16391, 16395, 16399, 16403, 16407, 16411, 16413, 16415, 16417, 16419, 16423, 16427, 16431, 16435, 16439, 16443, 16447, 16451, 16455, 16459, 16463, 16467, 16471, 16475, 16479, 16481, 16483, 16487, 16489, 16491, 16493, 18200, 18219, 18221, 18225, 18231, 18233, 18235, 18237, 18239, 18247, 19056, 19058, 19061, 19070, 19071, 19077, 19078, 19082, 19083, 19921, 20594, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20733, 20734, 20738, 20739, 20740, 20743, 20744, 20747, 20748, 20752, 20753, 20754, 26892, 26893, 27112, 28020, 28078, 28136, 28194, 28252, 1, 26185, 1, 6373, 1, 12665, 1, 25370, 1, 32280, 1, 23985, 1, 9733, 1, 32642, 2, 1056, 1088, 1, 26651, 2, 9205, 9208, 1, 27220, 1, 31672, 1, 25620, 1, 7452, 1, 31706, 1, 22924, 1, 23027, 2, 14035, 14036, 1, 4067, 1, 12714, 1, 13083, 1, 23055, 1, 12913, 1, 17717, 542, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 488, 489, 502, 503, 506, 507, 550, 551, 552, 553, 556, 557, 640, 683, 850, 900, 931, 966, 967, 1261, 1262, 1632, 1643, 1647, 1649, 1827, 1829, 1830, 1835, 1857, 1858, 1859, 2091, 2095, 2096, 2112, 4322, 6626, 6656, 6765, 6774, 6775, 6786, 6787, 6788, 6789, 6794, 6795, 6812, 6813, 6822, 6823, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6858, 6859, 6866, 6867, 6868, 6869, 6870, 6871, 6886, 6887, 6888, 6889, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7024, 7025, 7026, 7027, 7028, 7029, 7032, 7033, 7034, 7035, 7036, 7037, 7040, 7041, 7042, 7043, 7046, 7047, 7048, 7049, 7052, 7053, 7054, 7055, 7056, 7057, 7060, 7061, 7062, 7063, 7064, 7065, 7068, 7069, 7070, 7071, 7072, 7073, 7076, 7077, 7078, 7079, 7080, 7081, 7084, 7085, 7086, 7087, 7090, 7091, 7092, 7093, 7096, 7097, 7098, 7099, 7100, 7101, 7103, 7104, 7105, 7108, 7109, 7110, 7111, 7112, 7113, 7116, 7117, 7118, 7119, 7120, 7121, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7186, 7188, 7190, 7200, 7201, 7203, 7205, 7211, 7212, 7213, 7216, 7217, 7219, 7224, 7225, 7226, 7229, 7230, 7234, 7240, 7241, 7243, 7245, 7247, 7764, 7917, 7932, 7938, 8171, 8172, 8174, 8175, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8571, 8572, 8573, 8574, 8600, 8601, 8602, 8603, 8605, 8606, 8735, 8745, 8748, 8849, 8867, 8868, 8870, 8903, 8930, 9021, 9124, 9125, 9165, 9168, 9177, 9178, 9504, 9505, 9510, 9511, 9512, 9513, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9657, 9698, 9699, 9700, 9734, 9795, 9801, 9802, 9807, 9808, 9810, 9812, 9815, 9816, 9817, 9819, 9821, 9822, 9823, 9846, 9862, 9863, 9864, 9865, 9943, 10147, 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10166, 11014, 11105, 11106, 13963, 13964, 13999, 14000, 14073, 14879, 15612, 15613, 18874, 18925, 20097, 20098, 20099, 20100, 20101, 20108, 20109, 20110, 20693, 20694, 20695, 21126, 26533, 30306, 30331, 30333, 30340, 30378, 30405, 30406, 30407, 30422, 30424, 30425, 30426, 30463, 30464, 30578, 30656, 30728, 30729, 30730, 30731, 30768, 30840, 30877, 30893, 30913, 30943, 30987, 30988, 30989, 31011, 31012, 31031, 31186, 31197, 31615, 31627, 31630, 31662, 31697, 31699, 31700, 1, 15187, 1, 24212, 1, 12205, 1, 15089, 1, 26690, 1, 22591, 1, 31935, 1, 9138, 6, 21571, 21852, 21922, 22200, 22201, 22235, 1, 24979, 1, 8786, 1, 23400, 2, 16120, 16121, 1, 18059, 1, 9833, 1, 25137, 1, 24277, 2, 10375, 10376, 1, 26005, 1, 30159, 1, 30438, 1, 5601, 1, 7929, 1, 12600, 1, 12467, 1, 21108, 1, 26435, 1, 31054, 5, 9888, 9889, 9890, 9974, 9975, 1, 13086, 1, 26218, 1, 30062, 18, 28324, 28452, 28456, 28469, 28477, 28478, 28482, 28487, 28492, 28498, 28513, 28514, 28529, 28530, 28531, 28561, 28562, 28563, 12, 855, 6718, 7644, 8105, 9625, 10060, 28644, 28645, 28646, 28698, 28699, 28700, 1, 11866, 20, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, 1, 23114, 2, 13873, 24569, 1, 23660, 1, 12593, 1, 9240, 1, 3893, 1, 15355, 1, 22995, 552, 16725, 16726, 16727, 16728, 16729, 16730, 16731, 16732, 16733, 16734, 16735, 16736, 16737, 16738, 16739, 16740, 16741, 16742, 16743, 16744, 16745, 16746, 16747, 16748, 16749, 16750, 16751, 16752, 16753, 16754, 16755, 16756, 16757, 16758, 16759, 16760, 16761, 16762, 16763, 16764, 16765, 16766, 16767, 16768, 16769, 16770, 16771, 16772, 16773, 16774, 16775, 16776, 16777, 16778, 16779, 16780, 16781, 16782, 16783, 16784, 16785, 16786, 16787, 16788, 16789, 16790, 16791, 16792, 16793, 16794, 16795, 16796, 16797, 16798, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16806, 16807, 16808, 16809, 16810, 16811, 16812, 16813, 16814, 16815, 16816, 16817, 16818, 16819, 16820, 16821, 16822, 16823, 16824, 16825, 16826, 16827, 16828, 16829, 16830, 16831, 16832, 16833, 16834, 16835, 16836, 16837, 16838, 16839, 16840, 16841, 16842, 16843, 16844, 16845, 16846, 16847, 16848, 16849, 16850, 16851, 16852, 16853, 16854, 16855, 16856, 16857, 16858, 16859, 16860, 16861, 16862, 16863, 16864, 16865, 16866, 16867, 16868, 16869, 16870, 16871, 16872, 16873, 16874, 16875, 16876, 16877, 16878, 16879, 16880, 16881, 16882, 16883, 16884, 16885, 16886, 16887, 16888, 16889, 16890, 16891, 16892, 16893, 16894, 16895, 16896, 16897, 16898, 16899, 16900, 16901, 16902, 16903, 16904, 16905, 16906, 16907, 16908, 16909, 16910, 16911, 16912, 16913, 16914, 16915, 16916, 16917, 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16926, 16927, 16928, 16929, 16930, 16931, 16932, 16933, 16934, 16935, 17760, 17761, 17762, 17763, 17764, 17765, 17766, 17767, 17768, 17769, 17770, 17771, 17772, 17773, 17774, 17775, 17776, 17777, 17778, 17779, 17780, 17781, 17782, 17783, 17784, 17785, 17786, 17787, 17788, 17789, 17790, 17791, 17792, 17793, 17794, 17795, 17796, 17797, 17798, 17799, 17800, 17801, 17802, 17803, 17804, 17805, 17806, 17807, 17808, 17809, 17810, 17811, 17812, 17813, 17814, 17815, 17816, 17817, 17818, 17819, 17820, 17821, 17822, 17823, 17824, 17825, 17826, 17827, 17828, 17829, 17830, 17831, 17832, 17833, 17834, 17835, 17836, 17837, 17838, 17839, 17840, 17841, 17842, 17843, 17844, 17845, 17846, 17847, 17848, 17849, 17850, 17851, 17852, 17853, 17854, 17855, 17856, 17857, 17858, 17859, 17860, 17861, 17862, 17863, 17864, 17865, 17866, 17867, 17868, 17869, 17870, 17871, 17872, 17873, 17874, 17875, 17876, 17877, 17878, 17879, 17880, 17881, 17882, 17883, 17884, 17885, 17886, 17887, 17888, 17889, 17890, 17891, 17892, 17893, 17894, 17895, 17896, 17897, 17898, 17899, 17900, 17901, 17902, 17903, 17904, 17905, 17906, 17907, 17908, 17909, 17910, 17911, 17912, 17913, 17914, 17915, 17916, 17917, 17918, 17919, 17920, 17921, 17922, 17923, 17924, 17925, 17926, 17927, 17928, 17929, 17930, 17931, 17932, 17933, 17934, 17935, 17936, 17937, 17938, 17939, 17940, 17941, 17942, 17943, 17944, 17945, 17946, 17947, 17948, 17949, 17950, 17951, 17952, 17953, 17954, 17955, 17956, 17957, 17958, 17959, 17960, 17961, 17962, 17963, 17964, 17965, 17966, 17967, 17968, 17969, 17970, 17971, 17972, 17973, 17974, 17975, 17976, 17977, 17978, 17979, 17980, 17981, 17982, 17983, 17984, 17985, 17986, 17987, 17988, 17989, 17990, 17991, 17992, 17993, 17994, 17995, 17996, 17997, 17998, 17999, 18000, 18001, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020, 18021, 18022, 18023, 18024, 18025, 18026, 18027, 18028, 18029, 18030, 18031, 18032, 18033, 18034, 18035, 18036, 18037, 18038, 18039, 18040, 18041, 18042, 18043, 18044, 18045, 18046, 18047, 18048, 18049, 18050, 18051, 18052, 18053, 18054, 18055, 18056, 18057, 18058, 18059, 18060, 18061, 18062, 18063, 18064, 18065, 18066, 18067, 18068, 18069, 18070, 18071, 18072, 18073, 18074, 18075, 18076, 18077, 18078, 18079, 18080, 18081, 18082, 18083, 18084, 18085, 18086, 18087, 18088, 18089, 18090, 18091, 18092, 18093, 18094, 18095, 18096, 18097, 18098, 18099, 18100, 1, 4003, 1, 31058, 1, 7670, 15, 564, 565, 671, 672, 673, 674, 675, 676, 677, 678, 679, 11271, 11367, 14893, 14894, 5, 634, 635, 682, 683, 6626, 1, 22701, 2, 10834, 11022, 1, 24309, 2, 28719, 28720, 1, 28889, 1, 24800, 1, 31312, 1, 15319, 90, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18384, 18385, 18386, 18387, 18388, 18389, 18390, 18391, 18392, 18393, 18394, 18395, 18396, 18397, 18398, 18399, 18400, 18401, 18402, 18403, 18404, 18405, 18406, 18407, 18408, 18409, 18410, 18411, 18412, 18413, 18414, 18415, 18416, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18425, 18426, 18427, 18428, 18429, 18430, 18431, 18432, 18433, 18434, 18435, 18436, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 6, 28391, 28416, 28417, 28418, 28419, 28420, 1, 25761, 2, 26819, 26840, 1, 5107, 1, 22053, 1, 15128, 11, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, 8286, 1, 17800, 2, 26703, 26747, 1, 9449, 1, 24149, 6, 10480, 10483, 10773, 17376, 17421, 22167, 1, 25372, 1, 15139, 2, 5608, 5609, 1, 17420, 1, 1414, 1, 18607, 1, 17855, 1, 13163, 1, 15472, 1, 18033, 3, 10608, 12991, 13349, 1, 30367, 1, 15276, 1, 25345, 2, 24204, 24358, 12, 5605, 5607, 5609, 5611, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 1, 25541, 1, 26997, 1, 7962, 1, 3864, 1, 30406, 1, 25556, 2, 4576, 4958, 1, 24462, 1, 10603, 1, 32761, 75, 2181, 2237, 2304, 2349, 2352, 2397, 2440, 2481, 2530, 2570, 2617, 2620, 2659, 2693, 2696, 2736, 2786, 2834, 2884, 2922, 2976, 2983, 3534, 5380, 5689, 11395, 11970, 13985, 13986, 14264, 14314, 14437, 14646, 14798, 16787, 19178, 19229, 19281, 19325, 19418, 19421, 19496, 19543, 19601, 19644, 19703, 19750, 19778, 19826, 19829, 19862, 19914, 19957, 20005, 20038, 20082, 20130, 20177, 20218, 20262, 20343, 20388, 20489, 20535, 20551, 20623, 20767, 20812, 20929, 20976, 21004, 21043, 24724, 25016, 29122, 1, 31674, 1, 26031, 1, 21724, 1, 12229, 1, 15090, 1, 9189, 1, 7261, 1, 12532, 1, 31618, 11, 1334, 1380, 1747, 13909, 15592, 15593, 15594, 15596, 24537, 29182, 30579, 2, 7361, 7363, 1, 11940, 2, 18354, 25954, 1, 18018, 2, 13242, 13370, 1, 25539, 2, 6097, 31704, 2, 11020, 11665, 1, 26699, 1, 26160, 1, 29952, 1, 18020, 2, 31132, 31133, 2, 13211, 13344, 38, 163, 3566, 3567, 4325, 5899, 8157, 8158, 10751, 14445, 18178, 18782, 18783, 19331, 19332, 19434, 19478, 19572, 19573, 19652, 19653, 19693, 20097, 20098, 20099, 20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20330, 20331, 21082, 1, 25024, 1, 12864, 1, 31744, 444, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6554, 6631, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10669, 10670, 10671, 10672, 10673, 10674, 10675, 10676, 10677, 10678, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686, 10687, 10688, 10689, 10690, 10691, 10692, 10693, 13747, 13748, 13749, 13750, 13751, 13752, 13753, 13754, 13755, 13756, 13757, 13758, 13759, 13760, 13761, 13762, 13763, 13764, 13765, 13766, 13767, 13768, 13769, 13770, 13771, 13772, 13773, 13774, 13775, 13776, 13777, 13778, 13779, 13780, 13781, 13782, 13783, 13784, 13785, 13786, 13787, 13788, 13789, 13790, 13791, 13792, 13793, 13794, 13795, 13796, 13797, 13799, 13800, 13801, 13802, 13803, 13804, 13805, 13806, 13807, 13808, 13809, 13810, 13811, 13812, 13813, 13814, 13815, 13816, 13817, 13818, 13819, 13820, 13821, 13822, 13823, 13824, 13825, 13826, 13827, 13828, 13829, 13830, 13831, 13832, 13833, 13834, 13835, 13836, 13837, 13838, 13839, 13840, 13841, 13842, 16294, 16295, 104, 1754, 1804, 4512, 7276, 7293, 7705, 7964, 7967, 7968, 7969, 7974, 7975, 7976, 7977, 8017, 8118, 8156, 8167, 8168, 8169, 8170, 8174, 8175, 8177, 8178, 8180, 8181, 8182, 8183, 8246, 8447, 8448, 8451, 8452, 8455, 8456, 8491, 8494, 8495, 8498, 8499, 8502, 8503, 8506, 8507, 8510, 8511, 8512, 8513, 8518, 8519, 8522, 8523, 8524, 8527, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8611, 8872, 8958, 9161, 9183, 9479, 9480, 9652, 9657, 9666, 9718, 9819, 9820, 9831, 9832, 9969, 9972, 10018, 10027, 10028, 10075, 10076, 10103, 10104, 10105, 10106, 10107, 10163, 10174, 13956, 13989, 13990, 14857, 16279, 23440, 26604, 26605, 26606, 29776, 31148, 2, 3287, 3474, 1, 9149, 1, 4378, 1, 23171, 1, 24251, 1, 30391, 1, 30572, 1, 14887, 1, 23646, 1, 25175, 1, 30508, 1, 32715, 2, 3789, 15087, 1, 23354, 14, 28721, 28722, 28723, 28742, 28749, 28760, 28761, 28762, 28763, 28775, 28776, 28777, 28778, 28793, 1, 25365, 1, 676, 1, 1915, 2, 16286, 16293, 1, 30186, 1, 23632, 1, 25336, 1, 46, 1, 32320, 1, 12764, 1, 22632, 95, 7350, 8225, 8226, 8227, 8228, 8262, 8593, 8698, 8699, 8700, 8701, 8873, 8874, 8875, 9048, 9063, 9064, 9065, 9066, 9067, 9068, 9075, 9076, 10020, 10021, 10022, 10023, 10063, 10176, 10177, 10178, 10179, 28618, 28632, 28635, 28639, 28642, 28645, 28648, 28661, 28665, 28669, 28673, 28677, 28692, 28696, 28699, 28702, 28712, 28716, 28720, 28722, 28725, 28729, 28732, 28736, 28756, 28789, 28803, 28805, 28807, 28810, 31342, 31352, 31358, 31362, 31364, 31368, 31372, 31379, 31385, 31391, 31397, 31402, 31404, 31406, 31408, 31412, 31415, 31442, 31443, 31444, 31445, 31470, 31471, 31472, 31473, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 1, 11874, 2, 13533, 24422, 1, 15226, 1, 22389, 1, 8117, 1, 16788, 1, 13000, 19, 21156, 21157, 21158, 21159, 21160, 21161, 21321, 21756, 21757, 21758, 21759, 21760, 21761, 21762, 21763, 21764, 21765, 22015, 22176, 1, 27055, 1, 8242, 1, 26393, 1, 29353, 1, 23622, 1, 12172, 1, 25789, 1, 13561, 1, 5599, 1, 16824, 1, 22663, 1, 25686, 1, 26142, 1, 7758, 3, 4441, 5047, 14956, 19, 832, 890, 891, 892, 894, 895, 896, 897, 898, 899, 900, 927, 928, 929, 930, 931, 959, 960, 961, 1, 12294, 2, 17958, 24026, 1, 23933, 2, 7412, 7434, 94, 19480, 19481, 19482, 19483, 19484, 19485, 19486, 19487, 19488, 19489, 19490, 19491, 19492, 19493, 19494, 19495, 19496, 19497, 19498, 19499, 19500, 19501, 19502, 19503, 19504, 19505, 19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 19515, 19516, 19517, 19518, 19519, 19520, 19521, 19522, 19523, 19524, 19525, 19526, 19527, 19528, 19529, 19530, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19544, 19545, 19546, 19547, 19548, 19549, 19550, 19551, 19552, 19553, 19554, 19555, 19556, 19557, 19558, 19559, 19560, 19561, 19562, 19563, 19564, 19565, 19566, 19567, 19568, 19569, 19570, 19571, 19572, 19573, 1, 30325, 2, 27149, 27186, 1, 32684, 1, 15407, 1, 26736, 1, 27223, 4, 11555, 12058, 24828, 24860, 1, 25498, 3, 7417, 13639, 16712, 1, 13104, 2, 24262, 24485, 2, 13493, 29318, 1, 21988, 2, 22410, 23486, 1, 24415, 1, 23000, 2, 27146, 27183, 3, 3130, 24115, 29261, 1, 8780, 1, 14702, 1, 16877, 1, 22473, 1, 22728, 1, 25965, 1, 23596, 1, 25672, 7, 16989, 16990, 16991, 16992, 17523, 26929, 27268, 1, 7731, 8, 1179, 1180, 1199, 1200, 1201, 1202, 1235, 1236, 1, 9334, 1, 25056, 1, 13064, 1, 29822, 3, 4444, 5043, 14959, 1, 7329, 1, 25268, 28, 917, 948, 996, 1007, 6552, 6615, 7231, 7232, 7239, 8097, 8742, 17084, 24740, 27993, 28019, 28033, 28051, 28077, 28091, 28109, 28135, 28149, 28167, 28193, 28207, 28225, 28251, 28265, 1, 23915, 1, 29355, 1, 22467, 42, 1042, 1074, 1177, 1178, 1303, 1304, 1480, 1481, 1786, 1787, 4316, 4519, 4962, 10261, 10308, 10673, 11236, 11330, 13679, 15631, 15632, 15641, 16755, 17253, 17690, 18129, 18172, 18204, 18243, 18275, 18301, 18622, 18676, 18723, 18752, 18778, 19075, 19109, 19153, 29303, 29378, 29412, 9, 718, 719, 9167, 10171, 10172, 10176, 10177, 10178, 10179, 1, 3867, 101, 7619, 7620, 7653, 7683, 7684, 7710, 9113, 9141, 9144, 9504, 9505, 9506, 9507, 9510, 9511, 9513, 9516, 9517, 9518, 9520, 9521, 9983, 9984, 9991, 9992, 10061, 10073, 10075, 10077, 10078, 10085, 10086, 10099, 10100, 14181, 14182, 14183, 14184, 14185, 14186, 14187, 14188, 14189, 14190, 18563, 18564, 18565, 18566, 18567, 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18576, 18577, 18578, 18579, 18580, 18581, 18582, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18592, 18593, 18594, 29735, 31063, 31065, 31067, 31069, 31071, 31073, 31075, 31077, 31079, 31081, 31083, 31085, 31510, 31511, 31520, 31521, 31528, 31529, 31536, 31537, 31544, 31545, 31552, 31553, 1, 17740, 1, 18097, 1, 32290, 1, 25648, 1, 32650, 4, 6027, 8865, 8866, 10231, 1, 32817, 1973, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 309, 311, 313, 315, 317, 319, 321, 323, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 373, 375, 377, 381, 382, 384, 386, 387, 389, 390, 391, 394, 395, 396, 397, 399, 400, 402, 403, 404, 408, 409, 411, 412, 414, 416, 419, 421, 424, 426, 427, 429, 430, 431, 433, 435, 436, 440, 448, 449, 451, 452, 454, 455, 457, 459, 461, 463, 465, 467, 469, 471, 474, 476, 478, 480, 482, 484, 486, 488, 490, 493, 494, 496, 498, 499, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 566, 567, 569, 570, 573, 575, 576, 577, 578, 580, 582, 584, 586, 606, 614, 624, 626, 636, 637, 651, 661, 663, 664, 667, 690, 876, 878, 882, 889, 892, 894, 895, 896, 897, 898, 899, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 962, 981, 983, 985, 987, 989, 991, 993, 999, 1002, 1004, 1005, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6511, 6512, 6514, 6515, 6516, 6517, 6518, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6532, 6535, 6536, 6537, 6538, 6539, 6543, 6544, 6545, 6546, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6634, 6637, 6677, 6678, 6682, 6687, 6695, 6730, 6733, 6734, 6736, 6737, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, 6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 6904, 6906, 6908, 6910, 6912, 6914, 6924, 6926, 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, 7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7044, 7045, 7046, 7047, 7048, 7049, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7088, 7089, 7090, 7091, 7092, 7093, 7102, 7103, 7104, 7105, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7191, 7192, 7193, 7194, 7195, 7206, 7207, 7208, 7209, 7210, 7220, 7221, 7222, 7223, 7235, 7236, 7237, 7238, 7239, 7248, 7249, 7250, 7251, 7252, 7475, 7484, 7485, 7486, 7489, 7490, 7491, 7494, 7497, 7498, 7499, 7500, 7501, 7502, 7509, 7513, 7517, 7518, 7521, 7522, 7523, 7524, 7531, 7535, 7536, 7538, 7539, 7540, 7541, 7542, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 10235, 10236, 10237, 10238, 10239, 10240, 10241, 10242, 10243, 10244, 10245, 10246, 10247, 10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255, 10256, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10271, 10272, 10273, 10274, 10275, 10276, 10277, 10278, 10279, 10280, 10281, 10329, 10331, 10332, 10333, 10336, 10338, 10340, 10342, 10343, 10344, 10345, 10347, 10350, 10356, 10358, 10359, 10360, 10361, 10363, 10365, 10367, 10369, 10371, 10373, 10375, 10377, 10379, 10381, 10383, 10385, 10387, 10389, 10391, 10393, 10395, 10397, 10399, 10401, 10403, 10405, 10407, 10409, 10411, 10413, 10415, 10417, 10419, 10421, 10423, 10425, 10427, 10429, 10431, 10433, 10435, 10437, 10439, 10441, 10443, 10445, 10447, 10449, 10451, 10453, 10455, 10457, 10459, 10468, 10470, 10475, 12061, 13747, 13749, 13751, 13753, 13755, 13757, 13759, 13761, 13763, 13765, 13767, 13769, 13771, 13773, 13775, 13777, 13779, 13781, 13783, 13785, 13787, 13789, 13791, 13811, 13813, 13815, 13817, 13819, 13821, 13823, 13825, 13827, 13829, 13831, 13833, 13835, 13837, 13965, 13967, 13969, 13971, 13973, 13975, 13977, 13979, 13980, 13981, 13983, 13985, 13987, 13989, 13991, 13993, 13995, 13997, 13999, 14001, 14003, 14005, 14007, 14009, 14011, 14013, 14015, 14017, 14019, 14021, 14023, 14025, 14027, 14029, 14031, 14033, 14035, 14037, 14039, 14041, 14049, 14052, 14054, 14056, 14057, 14059, 14061, 14063, 14065, 14070, 14072, 14075, 14077, 14081, 14083, 14085, 14087, 14089, 14091, 14093, 14095, 14097, 14099, 14101, 14102, 14103, 14104, 14105, 14106, 14107, 14108, 14109, 14110, 14111, 14113, 14115, 14117, 14119, 14121, 14123, 14125, 14126, 14127, 14129, 14131, 14861, 14892, 16527, 16528, 16529, 16530, 16531, 16532, 16533, 16534, 16535, 16536, 16537, 16538, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16552, 17427, 17428, 17429, 17430, 17431, 17432, 17433, 17434, 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, 17445, 17446, 17447, 17448, 17449, 17450, 17451, 17452, 17453, 17454, 17455, 17456, 17457, 17458, 17459, 17460, 17461, 17462, 17463, 17464, 17465, 17466, 17595, 17596, 17597, 17598, 17599, 17600, 17601, 17602, 17603, 17604, 17605, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, 17615, 17616, 17617, 17618, 17619, 17620, 17621, 17622, 17623, 17624, 17625, 17626, 17627, 17628, 17629, 17630, 18866, 18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875, 18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 20394, 20395, 20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20415, 20416, 20417, 20418, 20419, 20420, 20421, 20422, 20423, 20424, 20425, 24806, 24807, 24808, 24809, 24810, 24811, 24812, 24813, 24814, 24815, 24816, 24817, 24818, 24819, 24820, 24821, 24822, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24830, 24831, 24832, 24833, 24834, 24835, 24836, 24837, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27478, 27479, 27480, 27481, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27490, 27491, 27492, 27493, 27494, 27495, 27519, 27520, 27521, 27522, 27523, 27524, 27525, 27526, 27527, 27528, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27541, 27542, 27543, 27544, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27584, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27663, 27664, 27665, 27666, 27667, 27668, 27669, 27670, 27671, 27672, 27673, 27674, 27675, 27676, 27677, 27678, 27679, 27680, 27681, 27682, 27683, 27684, 27685, 27686, 27687, 27688, 27715, 27716, 27717, 27718, 27719, 27720, 27721, 27722, 27723, 27724, 27725, 27726, 27727, 27728, 27729, 27730, 27731, 27732, 27733, 27734, 27735, 27736, 27737, 27738, 27739, 27740, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27819, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27923, 27924, 27925, 27926, 27927, 27928, 27929, 27930, 27931, 27932, 27933, 27934, 27935, 27936, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27945, 27946, 27947, 27948, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27989, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28057, 28058, 28059, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28102, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28151, 28152, 28153, 28154, 28155, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28267, 29372, 29373, 29374, 29375, 29376, 29377, 29378, 29379, 29380, 29381, 29382, 29383, 29384, 29385, 29386, 29387, 29388, 29389, 29390, 29391, 29392, 29393, 29394, 29395, 29396, 29397, 29398, 29399, 29400, 29401, 29402, 29403, 29404, 29405, 29971, 29972, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 29997, 29998, 29999, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30759, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32539, 32540, 32541, 32542, 32543, 32544, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 1, 8879, 1, 25779, 1, 13033, 1, 16886, 14, 7317, 7971, 7972, 7978, 7979, 8062, 9648, 9717, 9754, 9793, 9794, 9821, 9825, 9958, 1, 13174, 1, 24610, 36, 123, 125, 2133, 2134, 2135, 2136, 2137, 2138, 7931, 7932, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8157, 8158, 8203, 8204, 9075, 9076, 9135, 9150, 9602, 9603, 16303, 16304, 16338, 16339, 16585, 16587, 31753, 32588, 32590, 1, 15227, 1, 24734, 1, 25804, 1, 25323, 1, 16843, 1, 15561, 1, 25905, 1, 12871, 1, 32044, 2, 1051, 1083, 2, 30447, 30448, 1, 32151, 1, 4846, 3, 31310, 31311, 31815, 1, 12583, 1, 13595, 1, 4368, 1, 32479, 1, 9290, 1, 18062, 1, 26146, 2, 7853, 7949, 1, 9353, 1, 10577, 5, 14013, 14014, 14081, 14082, 14843, 1, 26116, 1, 25678, 1, 31629, 2, 18808, 18809, 1, 31646, 1, 30601, 1, 22324, 1, 27093, 1, 32053, 1, 8203, 1, 6163, 1, 23408, 1, 9441, 1, 9192, 1, 11913, 1, 12272, 1, 4682, 1, 7451, 1, 17761, 1, 25131, 2, 3765, 3948, 1, 4840, 1, 32622, 27, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17283, 17284, 17285, 17286, 17287, 17288, 17289, 17290, 17291, 17292, 17293, 17294, 17295, 17296, 17297, 17298, 17299, 17300, 17301, 17302, 1, 6159, 1, 26167, 1, 32652, 1, 12288, 1, 15307, 1, 3791, 69, 1566, 1707, 1708, 15778, 15779, 15795, 15796, 15797, 15805, 15811, 15817, 15821, 15851, 15855, 15863, 15869, 15875, 15881, 15885, 15891, 15895, 15906, 15912, 15918, 15924, 15926, 15928, 15933, 15936, 15944, 15946, 15951, 16047, 16049, 16051, 16053, 16055, 16057, 16059, 16061, 16063, 16065, 16075, 16077, 16079, 16081, 16083, 16085, 16087, 16089, 16091, 16093, 16133, 16136, 16152, 16162, 16165, 16172, 16190, 16193, 16195, 16200, 16202, 16204, 16206, 16207, 16208, 16480, 16481, 1, 12781, 1, 25559, 1, 26494, 6, 13254, 13512, 24039, 24040, 24041, 24274, 1, 22472, 1, 9389, 1, 23087, 135, 57, 1598, 1742, 1933, 2272, 2369, 2457, 2546, 2637, 2706, 2806, 2902, 3005, 3108, 3196, 3276, 3322, 3331, 3565, 3645, 4342, 5414, 5449, 5719, 5834, 6002, 6012, 6127, 6220, 6353, 6366, 7373, 7389, 7577, 7593, 8295, 8315, 8335, 8444, 9085, 9095, 9105, 11156, 11639, 11688, 11735, 11779, 11789, 11952, 12087, 13744, 14328, 14338, 14370, 14563, 14591, 14675, 15030, 16519, 16947, 16965, 16974, 17218, 17236, 17302, 17594, 18409, 18425, 18434, 18452, 18461, 19023, 19032, 19050, 19246, 19267, 19370, 19433, 19567, 19582, 19762, 19938, 20024, 20195, 20275, 20327, 20467, 20832, 20841, 20994, 21057, 22063, 22070, 22076, 22085, 22099, 22126, 22127, 22128, 22129, 22166, 24640, 24758, 24879, 27200, 27306, 27315, 28278, 28288, 28298, 28308, 28318, 29097, 29157, 29364, 29457, 29468, 29486, 29495, 29518, 29536, 29554, 29563, 29581, 29747, 29756, 29765, 29885, 29899, 29914, 29929, 29968, 30805, 30815, 32522, 1, 29782, 16, 3287, 3288, 3289, 3294, 3295, 3296, 3297, 3298, 3299, 14245, 14246, 20609, 20610, 20690, 20691, 20853, 1, 15081, 20, 1950, 2210, 2353, 2446, 2621, 2674, 2764, 2862, 2951, 3388, 13072, 18987, 19214, 19475, 19691, 19720, 20251, 20377, 20524, 29064, 1, 21878, 1, 23313, 2, 8713, 30371, 1, 31326, 1, 25415, 1, 7759, 2, 8945, 30866, 1, 32328, 2, 18862, 18863, 1, 25248, 2, 27122, 27151, 2, 22841, 29234, 1, 29320, 2, 3770, 11476, 1, 11723, 1, 10224, 1, 25481, 1, 23286, 1, 7825, 1, 27252, 1, 7646, 5, 2243, 6480, 6489, 6490, 6492, 1, 15500, 3, 31175, 31328, 31329, 1, 3490, 49, 1564, 1683, 1685, 1686, 1687, 1748, 15727, 15728, 15729, 15730, 15731, 15732, 15733, 15734, 15735, 15736, 15883, 15884, 15885, 15886, 15957, 15962, 15967, 16007, 16016, 16017, 16018, 16019, 16024, 16026, 16028, 16030, 16032, 16034, 16036, 16041, 16043, 16107, 16108, 16187, 16188, 16474, 16475, 16476, 16477, 18563, 29622, 29657, 29682, 22, 2282, 2549, 3374, 3449, 4202, 5532, 5537, 5560, 5564, 5575, 13019, 13418, 13548, 14211, 17630, 17666, 17718, 20582, 20655, 20874, 20904, 24950, 1, 25785, 2, 30658, 30906, 1, 9559, 1, 6129, 1, 23634, 1, 22485, 1, 5220, 1, 25735, 1, 5101, 6, 8767, 8865, 8867, 8868, 8870, 11754, 1, 26168, 1, 1904, 2, 17902, 23847, 1, 15480, 2, 17873, 23812, 2, 11966, 12101, 1, 26474, 1, 9540, 1, 24216, 1, 9247, 1, 30560, 1, 24296, 1, 30196, 1, 15517, 1, 5122, 1, 15387, 2, 3795, 15093, 1, 23992, 1, 9317, 1, 24217, 1, 13289, 1, 22834, 1, 9305, 1, 7698, 1, 23950, 1, 25900, 1, 32408, 1, 31741, 1, 5102, 1, 25266, 1, 32455, 1, 21127, 1, 25792, 1, 9440, 4, 24056, 24065, 24094, 24493, 1, 8698, 1, 15308, 3, 3920, 11424, 16668, 1, 30285, 1, 23942, 7, 30734, 30735, 30736, 30737, 30831, 30832, 30833, 1, 8126, 1, 25763, 1, 26152, 1, 12667, 2, 24261, 24482, 1, 25815, 1, 1918, 1, 30160, 1, 24428, 1, 12280, 1, 12616, 1, 15289, 1, 12944, 15, 24727, 24728, 24729, 24730, 24731, 24732, 24733, 24736, 24748, 24781, 24782, 24783, 24784, 24785, 24786, 1, 9258, 1, 11897, 1, 23273, 1, 25512, 1, 23290, 15, 4350, 11678, 16955, 16982, 17226, 18442, 19040, 19254, 19590, 20475, 20849, 29476, 29503, 29544, 29571, 1, 15404, 1, 25293, 1, 27061, 1, 9563, 1, 11906, 1, 29871, 1, 24721, 1, 15189, 1, 3072, 2, 12775, 13359, 1, 11768, 1, 23073, 2, 198, 230, 1, 9646, 2, 24033, 24040, 1, 13281, 5, 9725, 18701, 31349, 31360, 31366, 3, 30627, 31429, 31436, 2, 11666, 27231, 26, 14573, 14574, 14575, 14576, 14577, 14578, 14579, 14580, 14581, 14582, 14583, 14584, 14585, 14586, 14587, 14588, 14589, 14590, 14591, 14592, 14593, 14594, 14595, 14596, 14708, 14709, 1, 14408, 1, 23775, 1, 24451, 1, 26078, 1, 26484, 1, 16866, 1, 26694, 1, 13048, 8, 20098, 20099, 20100, 20101, 20104, 20105, 20106, 20107, 1, 4853, 1, 24282, 332, 167, 183, 332, 333, 364, 365, 508, 509, 512, 513, 516, 517, 520, 521, 524, 525, 528, 529, 694, 729, 746, 753, 754, 775, 778, 779, 807, 815, 827, 836, 854, 856, 857, 858, 859, 860, 861, 862, 1129, 1130, 1253, 1254, 1489, 1491, 1975, 2093, 2156, 2157, 2262, 4509, 4510, 5272, 6035, 6039, 6404, 6478, 6509, 6510, 6716, 6747, 6762, 7277, 7278, 7283, 7284, 7285, 7286, 7288, 7306, 7309, 7315, 7326, 7462, 7467, 7674, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686, 7691, 7692, 7707, 7708, 7719, 7720, 7721, 7769, 7896, 7900, 7933, 7934, 7935, 7936, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8229, 8286, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 9052, 9053, 9055, 9150, 9177, 9193, 9194, 9207, 9208, 9209, 9212, 9213, 9472, 9473, 9474, 9475, 9477, 9478, 9483, 9484, 9492, 9495, 9498, 9499, 9583, 9620, 9621, 9689, 9690, 9721, 9741, 9782, 9805, 9806, 9810, 9811, 9821, 9823, 9825, 9826, 9831, 9843, 9888, 9889, 9890, 9914, 9915, 9954, 9955, 9956, 9957, 9961, 9962, 9963, 9964, 9980, 10036, 10041, 10044, 10103, 10104, 10105, 10106, 10329, 10330, 10717, 10734, 10735, 10758, 10760, 10762, 10767, 10977, 11125, 11126, 11144, 11145, 11146, 11162, 11272, 13791, 13792, 13835, 13836, 14244, 14246, 14318, 14349, 14678, 14847, 14863, 14865, 15751, 16282, 16283, 16309, 16310, 16324, 18470, 18529, 18641, 19232, 19234, 19332, 19334, 19436, 19550, 19650, 19653, 19832, 19925, 20090, 20100, 20102, 20103, 20104, 20183, 20198, 20200, 20202, 20204, 20207, 20208, 20610, 20691, 20819, 24642, 26638, 26891, 26930, 26931, 27026, 28622, 28623, 28624, 28625, 28651, 28654, 28658, 28681, 28682, 28683, 28684, 28705, 28708, 28727, 28728, 28729, 28730, 28738, 28746, 28753, 28760, 28761, 28766, 28767, 28771, 28775, 28776, 28781, 28782, 28786, 28799, 28804, 28805, 28809, 28810, 28811, 28813, 28815, 28817, 28819, 28865, 28868, 28919, 31101, 31102, 31103, 31810, 1, 17332, 1, 23668, 1, 25849, 4, 5436, 5437, 5438, 26637, 1, 32024, 2, 4718, 4719, 1, 18083, 1, 1726, 2, 270, 271, 1, 5159, 1, 14472, 1, 31734, 1, 16869, 2, 1037, 1069, 1, 13325, 1, 16832, 1, 12845, 1, 17551, 1, 22787, 1, 24772, 1, 30280, 1, 12741, 1, 15564, 1, 30377, 2, 30995, 31020, 1, 31677, 1, 24084, 1, 15100, 1, 17326, 8, 8951, 10903, 17541, 30317, 30318, 30319, 30425, 31778, 1, 25060, 2, 27635, 27660, 14, 1574, 2551, 15896, 15897, 15898, 15899, 15900, 15901, 16044, 16045, 16046, 16365, 16366, 19648, 1, 29335, 1, 32244, 1, 7970, 2, 27585, 27610, 2, 7360, 7362, 3, 8938, 30454, 30455, 2, 13641, 14165, 1, 30096, 1, 30419, 1, 174, 1, 13251, 1, 32735, 2, 27282, 31208, 1, 25666, 1, 30554, 1, 22633, 1, 23240, 1, 9776, 2, 252, 253, 1, 21836, 1, 25570, 1, 26674, 3, 26705, 26739, 26740, 1, 12483, 1, 26452, 1, 29294, 1, 31929, 1, 25708, 1, 32119, 1, 17828, 2, 30443, 30455, 1, 23590, 1, 31146, 3, 26661, 26662, 26725, 1, 15458, 1, 12348, 1, 9566, 1, 4638, 1, 23057, 2, 28920, 28926, 48, 429, 646, 898, 920, 926, 931, 952, 958, 960, 965, 966, 967, 6638, 6694, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7132, 7133, 7227, 7228, 7229, 7230, 7233, 7234, 7235, 7236, 7237, 7238, 27997, 28023, 28055, 28081, 28113, 28139, 28171, 28197, 28229, 28255, 1, 5181, 1, 17072, 1, 13255, 3, 3248, 5369, 13340, 4, 26691, 26783, 26852, 26856, 2, 346, 347, 1, 3900, 1, 16887, 3, 9128, 31577, 31578, 1, 12297, 1, 9207, 1, 9969, 26, 1507, 1600, 1601, 3735, 4333, 5439, 7295, 7296, 7354, 8131, 8265, 8266, 8267, 8268, 10581, 10743, 11170, 16721, 16936, 16937, 18313, 19552, 19651, 20091, 20092, 20820, 1, 26130, 1, 23558, 1, 6075, 2, 8251, 8252, 1, 25392, 1, 5030, 1, 12239, 1, 23591, 2, 1502, 5603, 2, 18906, 18957, 1, 25596, 1, 25344, 1, 24053, 1, 27256, 1, 23318, 25, 7255, 7256, 8036, 8037, 8038, 8039, 8040, 8041, 8046, 8047, 8048, 8049, 8052, 8053, 8057, 8058, 8061, 8064, 8065, 8068, 8075, 8077, 8092, 8093, 8130, 1, 5115, 1, 19353, 1, 26107, 1, 25433, 1, 325, 1, 4980, 2, 14572, 14696, 2, 17847, 23789, 1, 9943, 1, 25429, 1, 21081, 6, 2643, 3012, 8811, 14184, 26951, 26985, 1, 16876, 4, 1715, 28592, 28593, 28594, 1, 22870, 1, 8628, 2, 3299, 3473, 1, 26161, 1, 25021, 5, 4559, 4560, 13823, 13824, 16797, 1, 25054, 1, 25367, 1, 25463, 3, 21349, 21476, 21970, 1, 15467, 1, 5178, 2, 3414, 3415, 1, 13236, 1, 25369, 20, 393, 904, 935, 6606, 6925, 7817, 8056, 8058, 8070, 17350, 27980, 28006, 28038, 28064, 28096, 28122, 28154, 28180, 28212, 28238, 1, 16835, 5, 10788, 10789, 10790, 10791, 10931, 1, 26162, 2, 18742, 18769, 1, 17994, 6, 8959, 8960, 8961, 8962, 8963, 28614, 1, 26251, 1, 32002, 1, 11900, 1, 17527, 1, 32127, 29, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 1, 13151, 1, 32240, 12, 3258, 5583, 5809, 13991, 13992, 14359, 14360, 14772, 17439, 17479, 18815, 18816, 1, 7302, 1, 3858, 1, 12124, 1, 15034, 64, 2183, 2306, 2399, 2483, 2572, 2738, 2836, 2924, 3346, 3421, 3464, 3465, 3493, 3610, 4978, 5312, 5477, 5654, 5736, 5901, 5905, 6209, 6285, 13407, 14192, 14266, 14372, 14604, 17349, 17560, 17627, 17663, 18358, 18386, 18474, 18982, 19180, 19283, 19447, 19498, 19603, 19661, 19705, 19780, 19864, 19959, 20040, 20132, 20220, 20265, 20277, 20345, 20491, 20555, 20628, 20708, 20769, 20855, 20885, 20931, 21011, 29125, 29401, 29435, 1, 13463, 2, 21459, 25025, 1, 23677, 1, 25853, 1, 12934, 1, 2128, 1, 14190, 1, 32281, 1, 3133, 1, 13342, 1, 12694, 2, 4720, 4721, 3, 13708, 24100, 24178, 1, 3962, 1, 17127, 1, 14992, 1, 22743, 1, 7846, 1, 32433, 1, 32629, 1, 32116, 2, 8447, 8527, 1, 13239, 1, 22658, 1, 12971, 1, 15113, 1, 5197, 1, 22920, 1, 30738, 2, 21829, 22349, 1, 22722, 1, 5191, 2, 8921, 8966, 1, 12473, 1, 23653, 1, 9779, 1, 5394, 1, 3820, 5, 14803, 14804, 20093, 20094, 20095, 1, 9765, 1, 13215, 1, 32702, 1, 14543, 3, 12937, 24038, 24175, 1, 23982, 1, 24187, 1, 31272, 2, 15019, 15020, 1, 12738, 1, 11048, 1, 30033, 2, 4622, 4623, 27, 4346, 11674, 11780, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 16951, 16978, 17222, 18413, 18438, 19036, 19250, 19586, 20471, 20845, 22159, 29472, 29499, 29540, 29567, 2, 28462, 28463, 4, 3741, 3909, 11412, 16656, 1, 32025, 1, 32049, 1, 9955, 1, 31993, 1, 32273, 6, 21374, 21375, 21377, 21440, 21834, 21906, 5, 1570, 2138, 2147, 15897, 16358, 3, 29372, 29406, 29440, 672, 28319, 28320, 28321, 28322, 28323, 28324, 28325, 28326, 28327, 28328, 28329, 28330, 28331, 28332, 28333, 28334, 28335, 28336, 28337, 28338, 28339, 28340, 28341, 28342, 28343, 28344, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28404, 28405, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 28421, 28422, 28423, 28424, 28425, 28426, 28427, 28428, 28429, 28430, 28431, 28432, 28433, 28434, 28435, 28436, 28437, 28438, 28439, 28440, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28448, 28449, 28450, 28451, 28452, 28453, 28454, 28455, 28456, 28457, 28458, 28459, 28460, 28461, 28462, 28463, 28464, 28465, 28466, 28467, 28468, 28469, 28470, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28486, 28487, 28488, 28489, 28490, 28491, 28492, 28493, 28494, 28495, 28496, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28504, 28505, 28506, 28507, 28508, 28509, 28510, 28511, 28512, 28513, 28514, 28515, 28516, 28517, 28518, 28519, 28520, 28521, 28522, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28538, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28572, 28573, 28574, 28575, 28576, 28577, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28595, 28596, 28597, 28598, 28599, 28600, 28601, 28602, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 28614, 28615, 28616, 28617, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28625, 28626, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28638, 28639, 28640, 28641, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28650, 28651, 28652, 28653, 28654, 28655, 28656, 28657, 28658, 28659, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28688, 28689, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28698, 28699, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28707, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28725, 28726, 28727, 28728, 28729, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28748, 28749, 28750, 28751, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28770, 28771, 28772, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28785, 28786, 28787, 28788, 28789, 28790, 28791, 28792, 28793, 28794, 28795, 28796, 28797, 28798, 28799, 28800, 28801, 28802, 28803, 28804, 28805, 28806, 28807, 28808, 28809, 28810, 28811, 28812, 28813, 28814, 28815, 28816, 28817, 28818, 28819, 28820, 28821, 28822, 28823, 28824, 28825, 28826, 28827, 28828, 28829, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28843, 28844, 28845, 28846, 28847, 28848, 28849, 28850, 28851, 28852, 28853, 28854, 28855, 28856, 28857, 28858, 28859, 28860, 28861, 28862, 28863, 28864, 28865, 28866, 28867, 28868, 28869, 28870, 28871, 28872, 28873, 28874, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28883, 28884, 28885, 28886, 28887, 28888, 28889, 28890, 28891, 28892, 28893, 28894, 28895, 28896, 28897, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28906, 28907, 28908, 28909, 28910, 28911, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28919, 28920, 28921, 28922, 28923, 28924, 28925, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28937, 28938, 28939, 28940, 28941, 28942, 28943, 28944, 28945, 28946, 28947, 28948, 28949, 28950, 28951, 28952, 28953, 28954, 28955, 28956, 28957, 28958, 28959, 28960, 28961, 28962, 28963, 28964, 28965, 28966, 28967, 28968, 28969, 28970, 28971, 28972, 28973, 28974, 28975, 28976, 28977, 28978, 28979, 28980, 28981, 28982, 28983, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 3, 1155, 1156, 10761, 1, 23427, 1, 12917, 1, 25749, 4, 30380, 30718, 30719, 30720, 1, 11924, 1, 29270, 1, 26392, 1, 32718, 1, 30703, 1, 15200, 1, 32377, 2, 4538, 4539, 2, 10174, 10175, 1, 15201, 2, 17857, 23798, 2, 30180, 30199, 1, 32705, 1, 8940, 1, 15442, 1, 29302, 1, 30175, 1, 24329, 1, 25440, 1, 15453, 1, 17747, 4, 1821, 8812, 8813, 8814, 1, 24704, 1, 15352, 1, 25284, 1, 22006, 9, 1668, 1669, 1671, 1673, 2103, 15709, 15710, 15711, 15712, 1, 13500, 1, 17924, 1, 25656, 1, 59, 1, 24417, 1, 24221, 1, 3604, 3, 8754, 8903, 12163, 1, 13335, 1, 32058, 1, 32278, 2, 17869, 23808, 3, 31430, 31437, 31599, 2, 4662, 4734, 1, 7761, 1, 9397, 1, 30163, 1, 22891, 1, 26495, 1, 22910, 1, 22963, 2, 8976, 8977, 1, 25340, 1, 25717, 1, 25852, 1, 32325, 1, 29804, 1, 27136, 1, 2385, 1, 5106, 2, 22435, 23512, 15, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 7, 21221, 21226, 21684, 21747, 22017, 22206, 22340, 1, 15427, 1, 10604, 3, 10793, 10940, 31819, 1, 12339, 1, 12557, 1, 15212, 1, 26419, 1, 16799, 2, 7262, 7273, 1, 24162, 1, 12307, 1, 18022, 1, 23410, 1, 23279, 1, 24680, 1, 15519, 7, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 1, 25150, 1, 13203, 1, 12248, 1, 25184, 6, 3688, 3728, 6450, 10520, 20422, 20454, 1, 9513, 1, 25208, 3, 11657, 24497, 31610, 1, 21119, 9, 21261, 21294, 21343, 21487, 21646, 21647, 22040, 22174, 22216, 1, 25173, 1, 9488, 2, 16322, 16326, 1, 15400, 5, 1672, 15713, 15714, 15715, 15716, 1, 10596, 1, 30119, 1, 32616, 1, 11917, 1, 7891, 1, 30205, 6, 4553, 4554, 5398, 13574, 24408, 29232, 1, 30640, 1, 12258, 2, 27007, 27008, 1, 9484, 1, 30862, 2, 13495, 29325, 1, 26038, 1, 23636, 1, 31748, 1, 9352, 2, 313, 314, 19, 7767, 7867, 7920, 7936, 9730, 9731, 9733, 9753, 9792, 9793, 9796, 9797, 9798, 9799, 9800, 9801, 9803, 9806, 9807, 3, 3794, 11488, 15092, 1, 29789, 1, 11907, 1, 12644, 1, 32632, 3, 10251, 10298, 29006, 1, 32771, 1, 24353, 2, 8134, 11757, 1, 13307, 9, 7557, 7610, 17048, 19054, 22147, 22150, 22158, 31569, 31585, 1, 25636, 7, 28841, 28842, 28843, 28844, 28845, 28846, 28847, 1, 25347, 33, 412, 413, 427, 428, 608, 791, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 10843, 10844, 11036, 16845, 17110, 30710, 31699, 1, 4889, 1, 11175, 1, 16931, 4, 13863, 24052, 24369, 24561, 1, 31284, 1, 22670, 1, 23592, 5, 1503, 1504, 7303, 7304, 7549, 1, 12299, 1, 15346, 1, 26360, 1, 31600, 1, 19557, 3, 31115, 31116, 31117, 2, 10441, 10442, 1, 12346, 4, 30581, 31130, 31131, 31151, 1, 12191, 1, 9160, 1, 9570, 1, 17288, 1, 22520, 2, 12153, 30946, 1, 27277, 1, 23390, 1, 9800, 1, 25791, 2, 3048, 3049, 1, 27278, 1, 26593, 1, 5153, 1, 24032, 1, 25473, 2, 30424, 30425, 1, 7996, 1, 9783, 2, 16776, 22452, 2, 5877, 12026, 1, 9457, 15, 2352, 2619, 2620, 2696, 2788, 2789, 2886, 2887, 2983, 4322, 4323, 18469, 19829, 20553, 20626, 7, 8925, 9164, 9514, 9515, 9518, 9668, 9770, 1, 26175, 5, 924, 7511, 7512, 12047, 12048, 1, 32751, 1, 23291, 1, 8956, 1, 26012, 29, 2790, 3338, 3369, 3412, 3417, 3444, 4287, 4447, 5080, 5478, 5502, 5528, 5723, 5763, 5766, 6306, 13412, 14207, 14962, 17621, 17657, 20578, 20652, 20870, 20900, 24952, 24954, 29030, 29132, 1, 23691, 1, 22952, 1, 32253, 1, 32344, 12, 21140, 21626, 21627, 21628, 21629, 21630, 21746, 21747, 21748, 21749, 21750, 21754, 1, 7849, 1, 12737, 1, 10767, 1, 23342, 3, 4829, 4899, 13575, 2, 22847, 29243, 1, 7668, 1, 31943, 1, 22937, 2, 7809, 9843, 1, 22554, 2, 8449, 8528, 1, 23179, 2, 1767, 1768, 1, 25257, 1, 25407, 2, 3089, 3090, 1, 23357, 1, 7354, 1, 31777, 1, 22864, 1, 7966, 1, 17070, 1, 31186, 1, 25969, 1, 15317, 1, 29042, 1, 16801, 2, 22404, 23481, 1, 23575, 1, 23741, 1, 21714, 1, 25195, 1, 23956, 3, 30913, 30914, 30915, 4, 6721, 14043, 18916, 18967, 1, 24048, 1, 25398, 2, 3805, 3976, 2, 4722, 4723, 1, 7353, 1, 5027, 2, 6250, 17274, 1, 12263, 1, 11858, 1, 23021, 1, 23573, 15, 28650, 28651, 28652, 28707, 28708, 28709, 28737, 28738, 28739, 28745, 28746, 28747, 28752, 28753, 28754, 1, 11271, 2, 12895, 13388, 1, 31043, 35, 4347, 7581, 7597, 7607, 7608, 11675, 11790, 16952, 16979, 16997, 17000, 17003, 17010, 17015, 17031, 17032, 17033, 17034, 17045, 17223, 17272, 18414, 18439, 18561, 18971, 19037, 19251, 19587, 20472, 20846, 22160, 29473, 29500, 29541, 29568, 1, 24064, 1, 8743, 1, 22011, 1, 11027, 1, 32046, 1, 25240, 1, 32191, 37, 1602, 8997, 8998, 9011, 9012, 9013, 9014, 9015, 9016, 9017, 9025, 10183, 10184, 10185, 10186, 30774, 31401, 31402, 31403, 31404, 31405, 31406, 31407, 31408, 31409, 31410, 31411, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 1, 30427, 1, 11915, 1, 12516, 1, 26664, 3, 20745, 20747, 20748, 1, 32737, 3, 1557, 16355, 29730, 6, 21668, 22288, 22289, 22319, 22329, 22364, 1, 7292, 79, 1145, 7022, 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, 7096, 7098, 7100, 7106, 7108, 7110, 7112, 7114, 7116, 7118, 7120, 7136, 7138, 7140, 7142, 7144, 7146, 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7198, 7211, 7212, 7213, 7231, 26644, 1, 32776, 1, 15260, 2, 4836, 14808, 5, 21193, 21418, 21662, 21894, 21908, 1, 3988, 2, 21292, 22230, 1, 15489, 1, 24512, 1, 26084, 25, 3112, 3199, 3260, 4160, 4583, 4918, 5313, 11197, 11291, 11816, 12699, 13666, 13906, 14144, 14712, 14713, 16616, 16742, 18111, 20406, 20438, 24536, 24590, 24625, 29165, 1, 9578, 1, 26108, 1, 17544, 1, 10754, 14, 3334, 3406, 4140, 10457, 10458, 13279, 13519, 13851, 24110, 24140, 24364, 24460, 24479, 24552, 4, 26671, 26723, 26885, 26887, 1, 31635, 1, 24723, 1, 11798, 1, 23072, 1, 22363, 1, 28947, 4, 7356, 7357, 7358, 7359, 2, 27102, 27107, 1, 17277, 1, 23247, 1, 27052, 1, 22585, 1, 17977, 1, 24394, 19, 1034, 1066, 1163, 1164, 1233, 1234, 1283, 1284, 4199, 5050, 10667, 11206, 11300, 12851, 13700, 16783, 17243, 17702, 18694, 1, 32103, 1, 22955, 4, 12531, 13697, 17672, 29337, 1, 23548, 1, 14480, 1, 22686, 3, 10248, 10295, 29003, 1, 3874, 2, 12476, 17508, 2, 9483, 9485, 1, 25206, 1, 26438, 1, 3305, 1, 5594, 1, 14991, 1, 12823, 20, 8137, 8140, 8143, 8146, 8151, 8155, 8156, 8189, 12111, 12112, 31944, 31945, 31946, 31947, 31948, 31949, 31950, 31951, 31952, 31953, 1, 10202, 1, 26388, 2, 4819, 4820, 1, 31140, 1, 26371, 1, 32300, 2, 13118, 13392, 1, 26120, 1, 15378, 1, 23694, 2, 3799, 15095, 1, 27222, 8, 3746, 3923, 11427, 11604, 11618, 11699, 11713, 16671, 1, 22635, 1, 17809, 1, 9793, 2, 13291, 13367, 1, 18032, 1, 30189, 1, 9330, 1, 24199, 3, 3827, 3984, 11494, 1, 24297, 1, 26026, 2, 30892, 30939, 1, 15461, 1, 22623, 1, 32495, 1, 12398, 1, 23623, 1, 18053, 1, 10600, 1, 5189, 1, 21130, 1, 18050, 1, 24433, 65, 4006, 4401, 4685, 5022, 6377, 12620, 13345, 13502, 13903, 14361, 14362, 14363, 14364, 14365, 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14384, 14385, 14386, 14387, 14388, 14389, 14390, 14391, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, 14405, 14406, 14407, 14408, 14916, 18115, 21311, 21346, 21504, 21637, 24588, 29213, 1, 32598, 1, 25663, 1, 12261, 1, 22577, 1, 9249, 1, 26007, 1, 29184, 1, 25204, 1, 15075, 1, 15249, 1, 16889, 1, 7883, 1, 25989, 1, 4954, 1, 12430, 94, 19849, 19850, 19851, 19852, 19853, 19854, 19855, 19856, 19857, 19858, 19859, 19860, 19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19875, 19876, 19877, 19878, 19879, 19880, 19881, 19882, 19883, 19884, 19885, 19886, 19887, 19888, 19889, 19890, 19891, 19892, 19893, 19894, 19895, 19896, 19897, 19898, 19899, 19900, 19901, 19902, 19903, 19904, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19917, 19918, 19919, 19920, 19921, 19922, 19923, 19924, 19925, 19926, 19927, 19928, 19929, 19930, 19931, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 19939, 19940, 19941, 19942, 1, 17103, 1, 31670, 422, 91, 93, 823, 7324, 7325, 7454, 7751, 7868, 7869, 7870, 7871, 7872, 7873, 7951, 7952, 7953, 7954, 7998, 8004, 8114, 8142, 8143, 8144, 8145, 8146, 8147, 8161, 8162, 8163, 8186, 8230, 8607, 8608, 8609, 8610, 8611, 8612, 8613, 8614, 8615, 8616, 8617, 8618, 8678, 8679, 8680, 8681, 8682, 8687, 8688, 8689, 8690, 8698, 8699, 8700, 8701, 8906, 8925, 8949, 8957, 9038, 9039, 9040, 9041, 9187, 9188, 9189, 9190, 9610, 9611, 9612, 9613, 9614, 9615, 9627, 9671, 9695, 9709, 9710, 9732, 9733, 9805, 9806, 9932, 9933, 10001, 10002, 10003, 10004, 10009, 10010, 10011, 10012, 10013, 10171, 10187, 10705, 10958, 11141, 11142, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11678, 11803, 11804, 11805, 11854, 11855, 11856, 11857, 11858, 11859, 11860, 11861, 11862, 11863, 11864, 11865, 11866, 11867, 11868, 11869, 11870, 11871, 11872, 11873, 11874, 11875, 11876, 11877, 11878, 11879, 11880, 11881, 11882, 11883, 11884, 11885, 11886, 11887, 11888, 11889, 11890, 11891, 11892, 11893, 11894, 11895, 11896, 11897, 11898, 11899, 11900, 11901, 11902, 11903, 11904, 11905, 11906, 11907, 11908, 11909, 11910, 11911, 11912, 11913, 11914, 11915, 11916, 11917, 11918, 11919, 11920, 11921, 11922, 11923, 11924, 11925, 11926, 11927, 11928, 11929, 11930, 11931, 11932, 11933, 11934, 11935, 11936, 11937, 11938, 11939, 11940, 11941, 11942, 11968, 11969, 11970, 11971, 11972, 11973, 11974, 11975, 11976, 11977, 11978, 11979, 11980, 11981, 11982, 11983, 11984, 11985, 11986, 11987, 11988, 11989, 11990, 11991, 11992, 11993, 11994, 11995, 11996, 11997, 11998, 11999, 12000, 12001, 12002, 12003, 12004, 12005, 12006, 12007, 12008, 12009, 12010, 12011, 12012, 12013, 12014, 12015, 12016, 12017, 12018, 12019, 12020, 12021, 12022, 12023, 12024, 12025, 12026, 12027, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12040, 12041, 12042, 12043, 12044, 12045, 12046, 12047, 12048, 12049, 12050, 12051, 12052, 12053, 12054, 12055, 12056, 12057, 12058, 12059, 12060, 12061, 12062, 12063, 12064, 12065, 12066, 12067, 12068, 12069, 12070, 12071, 12072, 12073, 12074, 12075, 12076, 12077, 12078, 12110, 16319, 16320, 16553, 16555, 16718, 20543, 20544, 20545, 20546, 20547, 20548, 20549, 20550, 20551, 20552, 20553, 20554, 20555, 20556, 20557, 20558, 20559, 20560, 20561, 20562, 20563, 20564, 20565, 20566, 20567, 20568, 20569, 20570, 20571, 20572, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20581, 20582, 20583, 20584, 20585, 20586, 20587, 20588, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20598, 20599, 20600, 20601, 20602, 20603, 20604, 20605, 20606, 20607, 20608, 20609, 20610, 20611, 20612, 20613, 20614, 26958, 26959, 27098, 30096, 30151, 30777, 30778, 31087, 31088, 31089, 31090, 31349, 31350, 31351, 31352, 31353, 31354, 31355, 31356, 31357, 31358, 31359, 31424, 31425, 31431, 31432, 31433, 31434, 31435, 31436, 31437, 32556, 32558, 1, 28828, 12, 8789, 8795, 31832, 31841, 31847, 31853, 31862, 31868, 31874, 31883, 31889, 31895, 1, 24144, 2, 17864, 23803, 2, 29375, 29409, 1, 13731, 2, 30478, 30519, 1, 32432, 1, 25238, 1, 3115, 1, 27174, 1, 15299, 1, 8881, 3, 7838, 12799, 18680, 1, 18687, 1, 12290, 1, 1888, 1, 12286, 2, 27636, 27661, 1, 23068, 1, 4843, 1, 26496, 1, 22985, 1, 25618, 1, 29786, 1, 17045, 2, 17911, 23857, 1, 3410, 72, 20543, 20544, 20545, 20546, 20547, 20548, 20549, 20550, 20551, 20552, 20553, 20554, 20555, 20556, 20557, 20558, 20559, 20560, 20561, 20562, 20563, 20564, 20565, 20566, 20567, 20568, 20569, 20570, 20571, 20572, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20581, 20582, 20583, 20584, 20585, 20586, 20587, 20588, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20598, 20599, 20600, 20601, 20602, 20603, 20604, 20605, 20606, 20607, 20608, 20609, 20610, 20611, 20612, 20613, 20614, 1, 13069, 1, 7947, 1, 7484, 1, 30191, 1, 23301, 1, 13113, 1, 15452, 6, 21344, 21345, 21434, 21448, 21591, 22327, 1, 23053, 1, 93, 7, 11265, 11266, 11267, 11268, 11272, 11364, 16606, 1, 29942, 1, 23521, 1, 30690, 1, 25085, 1, 25241, 1, 26741, 1, 25818, 2, 7499, 27653, 1, 23229, 1, 5032, 1, 12684, 1, 22799, 1, 32725, 8, 21347, 21446, 21447, 21448, 21449, 21450, 21451, 22351, 1, 12941, 1, 32617, 1, 12690, 1, 26318, 1, 12072, 1, 25723, 1, 31986, 1, 15363, 2, 22403, 23480, 1, 25242, 2, 1040, 1072, 1, 13228, 2, 3075, 3081, 1, 15126, 1, 17970, 1, 32060, 2, 8773, 10180, 1, 15348, 1, 22869, 2, 4458, 14973, 429, 7542, 7543, 7544, 7545, 7546, 17237, 17238, 17239, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17273, 17274, 17275, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27819, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27845, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27861, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27914, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27975, 27976, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28057, 28058, 28059, 28060, 28061, 28062, 28063, 28064, 28065, 28066, 28067, 28068, 28069, 28070, 28071, 28072, 28073, 28074, 28075, 28076, 28077, 28078, 28079, 28080, 28081, 28082, 28083, 28084, 28085, 28086, 28087, 28088, 28089, 28090, 28091, 28092, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28102, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28126, 28127, 28128, 28129, 28130, 28131, 28132, 28133, 28134, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28146, 28147, 28148, 28149, 28150, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 29998, 29999, 3, 7423, 16995, 17052, 217, 212, 244, 268, 269, 290, 291, 317, 318, 354, 355, 380, 403, 407, 433, 434, 439, 442, 480, 481, 506, 507, 566, 567, 568, 570, 575, 578, 579, 580, 581, 584, 585, 586, 587, 603, 612, 640, 669, 670, 817, 818, 1007, 1157, 1158, 1167, 1168, 1169, 1170, 1187, 1188, 1195, 1196, 1261, 1262, 1265, 1266, 1400, 1837, 2103, 4512, 6036, 6037, 6523, 6530, 6634, 6635, 6636, 6637, 6638, 6672, 6675, 6678, 6748, 6751, 6922, 6923, 7462, 7623, 7624, 7643, 7674, 7675, 7676, 7691, 7692, 7716, 7717, 7718, 7719, 7720, 7721, 7967, 7968, 7969, 7975, 7976, 7977, 8869, 8870, 8871, 8872, 8930, 9161, 9471, 9472, 9473, 9474, 9475, 9479, 9480, 9491, 9492, 9494, 9495, 9718, 9741, 9831, 9832, 9963, 9964, 9969, 9972, 10035, 10036, 10040, 10041, 10043, 10044, 10103, 10104, 10105, 10106, 10332, 10334, 10335, 11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11558, 11559, 11560, 11561, 11562, 11563, 11564, 11565, 11566, 11567, 11568, 11569, 11570, 11571, 11572, 11573, 11574, 11575, 11576, 11577, 11578, 11579, 11580, 11581, 11582, 11583, 13995, 13996, 13997, 13998, 13999, 14000, 14003, 14004, 14005, 14006, 14011, 14012, 14017, 14018, 14019, 14020, 14025, 14026, 14031, 14032, 14033, 14034, 14083, 14084, 14091, 14092, 14093, 14094, 14095, 14096, 14097, 14098, 14099, 14100, 14115, 14116, 14129, 14853, 14854, 14856, 14857, 14859, 17130, 19127, 30734, 30748, 1, 12946, 1, 16914, 1, 29054, 1, 17017, 4, 29774, 29905, 29920, 29935, 1, 12383, 1, 22795, 5, 4061, 5350, 13217, 13935, 13936, 6, 1447, 1466, 1489, 1490, 15621, 15638, 2, 12173, 27281, 1, 27038, 1, 9344, 1, 12742, 13, 14542, 14543, 14544, 14545, 14546, 14547, 14548, 14549, 14550, 14551, 14552, 14564, 14565, 1, 32284, 1, 29036, 22, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 28657, 28658, 28659, 28802, 28803, 28804, 28805, 28806, 28807, 28808, 28809, 28810, 28811, 31766, 1, 23979, 1, 24466, 1, 4064, 1, 18616, 1, 9802, 2, 18274, 18549, 223, 11273, 11274, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 11308, 11309, 11310, 11311, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 11359, 11360, 11361, 11362, 11363, 11365, 11366, 11367, 11584, 11585, 11586, 11587, 11588, 11589, 11590, 11591, 11592, 11593, 11594, 11595, 11596, 11597, 11598, 11599, 11807, 11808, 11809, 11810, 11811, 11812, 11813, 11814, 11815, 11816, 11817, 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839, 11840, 11841, 11842, 11843, 11844, 11845, 11846, 11847, 11848, 11849, 11850, 11851, 11852, 11853, 16595, 16596, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16605, 16607, 16608, 16609, 16610, 16611, 16612, 16613, 16614, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16622, 16623, 16624, 16625, 16626, 16627, 16628, 16629, 16630, 16631, 16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 16645, 16646, 16647, 16648, 16649, 16650, 16651, 16652, 16653, 25807, 26097, 26098, 26099, 26100, 30152, 30153, 30157, 4, 10369, 10370, 10415, 10416, 2, 18872, 18923, 1, 25844, 1, 12496, 1, 32007, 1, 15523, 1, 32745, 152, 179, 315, 316, 411, 615, 752, 753, 754, 1159, 1160, 1177, 1178, 1299, 1300, 1301, 1302, 2370, 4511, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6747, 8108, 8149, 8153, 8958, 9817, 9818, 10331, 10743, 11105, 11106, 11363, 11512, 13821, 13822, 14847, 14848, 14885, 16595, 23445, 28333, 28334, 28335, 28336, 28337, 28338, 28339, 28340, 28341, 28342, 28343, 28344, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28451, 28453, 28454, 28455, 28456, 28458, 28459, 28460, 28483, 28484, 28485, 28487, 28488, 28489, 28491, 28492, 28499, 28500, 28501, 28515, 28516, 28517, 28518, 28519, 28520, 28521, 28522, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28570, 28571, 28877, 30774, 30876, 30877, 31615, 2, 4724, 4725, 1, 26228, 1, 26249, 2, 17913, 23860, 2, 27627, 27648, 1, 32188, 97, 2807, 2820, 14357, 19569, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20045, 20046, 20047, 20048, 20049, 20050, 20051, 20052, 20053, 20054, 20055, 20056, 20057, 20058, 20059, 20060, 20061, 20062, 20063, 20064, 20065, 20066, 20067, 20068, 20069, 20070, 20071, 20072, 20073, 20074, 20075, 20076, 20077, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091, 20092, 20093, 20094, 20095, 20096, 20097, 20098, 20099, 20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109, 20110, 20111, 20112, 20113, 20114, 20115, 20116, 20540, 1, 30900, 137, 384, 385, 419, 420, 440, 441, 737, 738, 739, 740, 741, 742, 743, 757, 758, 759, 760, 828, 829, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1976, 1977, 2139, 2140, 2141, 2142, 2143, 2144, 3261, 3262, 3263, 3264, 3591, 3592, 3633, 5823, 5824, 6468, 6469, 6470, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6504, 6508, 6509, 11157, 11158, 11159, 11160, 11161, 11162, 13439, 13440, 13441, 13442, 13443, 13444, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939, 13940, 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 13963, 13964, 14404, 14405, 14406, 14707, 14775, 14776, 14777, 14778, 20735, 20736, 20738, 20739, 20741, 20742, 20743, 20744, 20745, 20747, 20748, 20749, 20750, 20752, 20753, 24673, 24674, 24675, 24676, 24677, 25029, 25030, 25031, 25032, 26938, 26939, 29144, 29145, 29146, 29147, 1, 22273, 1, 23670, 1, 25123, 1, 15401, 1, 15303, 1, 31701, 1, 28965, 1245, 1494, 1495, 1496, 1497, 1498, 1499, 1502, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1743, 1744, 1745, 1746, 1747, 1748, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 7362, 7363, 15643, 15644, 15645, 15646, 15647, 15648, 15649, 15650, 15651, 15652, 15653, 15654, 15655, 15656, 15657, 15658, 15659, 15660, 15661, 15662, 15663, 15664, 15665, 15666, 15667, 15668, 15669, 15670, 15671, 15672, 15673, 15674, 15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15702, 15703, 15704, 15705, 15706, 15707, 15708, 15709, 15710, 15711, 15712, 15713, 15714, 15715, 15716, 15717, 15718, 15719, 15720, 15721, 15722, 15723, 15724, 15725, 15726, 15727, 15728, 15729, 15730, 15731, 15732, 15733, 15734, 15735, 15736, 15737, 15738, 15739, 15740, 15741, 15742, 15743, 15744, 15745, 15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754, 15755, 15756, 15757, 15758, 15759, 15760, 15761, 15762, 15763, 15764, 15765, 15766, 15767, 15768, 15769, 15770, 15771, 15772, 15773, 15774, 15775, 15776, 15777, 15778, 15779, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15802, 15803, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, 15871, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15882, 15883, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900, 15901, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 15958, 15959, 15960, 15961, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15972, 15973, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, 16072, 16073, 16074, 16075, 16076, 16077, 16078, 16079, 16080, 16081, 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, 16102, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16133, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, 16142, 16143, 16144, 16145, 16146, 16147, 16148, 16149, 16150, 16151, 16152, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16191, 16192, 16193, 16194, 16195, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16223, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16250, 16251, 16253, 16354, 16355, 16356, 16357, 16358, 16359, 16360, 16361, 16362, 16363, 16364, 16365, 16366, 16367, 16368, 16369, 16370, 16371, 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16391, 16392, 16393, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16413, 16414, 16415, 16416, 16417, 16418, 16419, 16420, 16421, 16422, 16423, 16424, 16425, 16426, 16427, 16428, 16429, 16430, 16431, 16432, 16433, 16434, 16435, 16436, 16437, 16438, 16439, 16440, 16441, 16442, 16443, 16444, 16445, 16446, 16447, 16448, 16449, 16450, 16451, 16452, 16453, 16454, 16455, 16456, 16457, 16458, 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16476, 16477, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16486, 16487, 16488, 16489, 16490, 16491, 16492, 16493, 29589, 29590, 29591, 29592, 29593, 29594, 29595, 29596, 29597, 29598, 29599, 29600, 29601, 29602, 29603, 29604, 29605, 29606, 29607, 29608, 29609, 29610, 29611, 29612, 29613, 29614, 29615, 29616, 29617, 29618, 29619, 29620, 29621, 29622, 29623, 29624, 29625, 29626, 29627, 29628, 29629, 29630, 29631, 29632, 29633, 29634, 29635, 29636, 29637, 29638, 29639, 29640, 29641, 29642, 29643, 29644, 29645, 29646, 29647, 29648, 29649, 29650, 29651, 29652, 29653, 29654, 29655, 29656, 29657, 29658, 29659, 29660, 29661, 29662, 29663, 29664, 29665, 29666, 29667, 29668, 29669, 29670, 29671, 29672, 29673, 29674, 29675, 29676, 29677, 29678, 29679, 29680, 29681, 29682, 29683, 29684, 29685, 29686, 29687, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29699, 29700, 29701, 29702, 29703, 29704, 29705, 29706, 29707, 29708, 29709, 29710, 29711, 29712, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29722, 29723, 29724, 29725, 29726, 29727, 29728, 29729, 29730, 29731, 2, 744, 24975, 2, 22839, 29214, 2, 11547, 12861, 2, 1019, 1099, 1, 9947, 1, 9288, 1, 25562, 1, 32081, 1, 32406, 1, 5401, 2, 2378, 2379, 1, 7736, 1, 7901, 1, 1498, 1, 15225, 1, 9679, 1, 1885, 1, 32635, 4, 4065, 5358, 16760, 17691, 1, 8627, 1, 4018, 1, 25223, 2, 26824, 26825, 1, 16838, 3, 1015, 1095, 13799, 28, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7195, 7197, 7210, 7252, 1, 26519, 1, 9255, 2, 8772, 8929, 1, 32796, 1, 1747, 13, 4117, 5721, 5758, 5761, 6194, 13422, 14226, 14697, 17384, 17559, 18152, 24936, 29035, 1, 17969, 1, 5143, 1, 22733, 1, 30386, 2, 5610, 5611, 1, 32449, 2, 251, 372, 1, 17051, 1, 23162, 1, 13288, 1, 21175, 1, 7509, 1, 22582, 1, 22766, 1, 26489, 1, 25803, 1, 21839, 2, 1809, 1810, 1, 17076, 1, 27018, 1, 17795, 3, 3772, 11477, 15080, 1, 11557, 1, 31717, 3, 4630, 4631, 4632, 1, 10221, 1, 2463, 1, 23606, 1, 11559, 1, 15477, 2, 11570, 11803, 4, 21692, 21693, 21854, 30337, 104, 1951, 2217, 2335, 2429, 2514, 2603, 2681, 2771, 2868, 2958, 3382, 3457, 3522, 3555, 4044, 4424, 4716, 5067, 5245, 5266, 5289, 5308, 5342, 5466, 5679, 5724, 5764, 5767, 5890, 5910, 5940, 5952, 5962, 6090, 6091, 6092, 6193, 6251, 6252, 6253, 6274, 6315, 11199, 11293, 11817, 12965, 13417, 13545, 14218, 14296, 14375, 14421, 14522, 14523, 14524, 14636, 14692, 14939, 16617, 16768, 17408, 17563, 17617, 17653, 18138, 18360, 18388, 18389, 18502, 18989, 19210, 19315, 19473, 19529, 19634, 19689, 19739, 19811, 19900, 19989, 20070, 20162, 20249, 20291, 20375, 20521, 20591, 20664, 20672, 20709, 20799, 20881, 20910, 20961, 21034, 21074, 21516, 21793, 24955, 29039, 29114, 29206, 30093, 30153, 1, 17066, 1, 22887, 1, 29240, 1, 32375, 1, 9410, 1, 25592, 1, 21264, 1, 29861, 1, 30868, 1, 32353, 1, 25485, 1, 25751, 12, 30807, 30808, 30809, 30810, 30811, 30812, 30813, 30814, 30815, 30816, 30817, 30818, 1, 9561, 1, 7779, 1, 12702, 1, 12755, 1, 15150, 1, 9920, 1, 23763, 222, 2283, 3466, 8448, 8450, 8452, 8454, 8456, 8458, 8460, 8461, 8462, 8464, 8465, 8466, 8468, 8469, 8470, 8472, 8473, 8474, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8524, 8526, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8922, 8930, 8964, 8979, 8981, 8983, 8985, 8987, 8995, 9005, 9008, 9015, 9020, 9026, 9029, 9031, 9034, 9046, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9057, 9058, 9059, 9060, 9069, 9070, 9071, 9072, 9107, 9108, 9109, 9110, 9111, 9112, 9113, 9115, 9117, 9119, 9124, 9125, 9127, 9132, 9133, 9137, 9142, 9143, 9144, 9146, 9148, 10068, 10069, 10070, 10071, 10072, 30649, 30798, 31075, 31076, 31077, 31078, 31083, 31084, 31085, 31086, 31096, 31098, 31099, 31101, 31102, 31103, 31104, 31106, 31107, 31108, 31344, 31345, 31346, 31354, 31355, 31356, 31375, 31376, 31381, 31382, 31383, 31387, 31388, 31389, 31393, 31394, 31395, 31399, 31400, 31411, 31413, 31416, 31417, 31418, 31420, 31421, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31498, 31499, 31500, 31501, 31502, 31503, 31504, 31505, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 31568, 31569, 31570, 31571, 1, 31798, 6, 806, 822, 834, 6760, 7465, 30224, 1, 22708, 1, 12986, 1, 9282, 1, 5435, 1, 25375, 11, 9570, 9572, 9581, 9582, 9678, 9679, 9801, 9802, 9892, 9942, 9943, 1, 29865, 1, 29300, 1, 13053, 1, 3892, 4, 1452, 15639, 15640, 15641, 1, 29231, 5, 1628, 15689, 15690, 15691, 15692, 5, 1992, 3658, 3698, 6420, 10490, 1, 25566, 1, 30772, 1, 5388, 1, 11578, 1, 12622, 1, 12916, 1, 24286, 2, 1026, 1106, 1, 26082, 3, 26903, 26904, 26905, 1, 3568, 1, 25364, 3, 4163, 4590, 4591, 6, 22100, 22101, 22102, 22103, 22104, 22105, 1, 26337, 1, 9625, 1, 29573, 1, 16745, 1, 22951, 3, 31857, 31858, 31859, 2, 4835, 14811, 2, 1309, 1310, 1, 13158, 2, 13925, 24425, 2, 18847, 18848, 1, 22645, 1, 32774, 1, 24123, 1, 26425, 1, 1412, 1, 22298, 1, 29445, 1, 3896, 14, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 1, 8042, 17, 19135, 20108, 20109, 20110, 28816, 28817, 28818, 28819, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 1, 27043, 1, 23946, 1, 7550, 1, 95, 1, 7283, 1, 14462, 1, 22648, 5, 8016, 28893, 28894, 28895, 31043, 1, 23305, 1, 25990, 1, 26155, 1, 31728, 1, 32096, 10, 7762, 7763, 7938, 9654, 9698, 9699, 9700, 9969, 9970, 28801, 4, 3466, 3467, 3468, 3469, 1, 9729, 1, 23715, 1, 3197, 1, 8224, 1, 17756, 1, 23133, 1, 25308, 2, 4806, 4807, 1, 3036, 1, 24240, 2, 30858, 30861, 1, 8026, 1, 9556, 1, 15358, 2, 10714, 10715, 28, 8791, 8797, 29888, 29902, 29917, 29932, 31834, 31836, 31837, 31838, 31843, 31849, 31855, 31857, 31858, 31859, 31864, 31870, 31876, 31878, 31879, 31880, 31885, 31891, 31897, 31899, 31900, 31901, 1, 23422, 1, 675, 1, 31807, 2, 18821, 18822, 4, 4164, 4600, 4601, 4602, 12, 1907, 4200, 5049, 11208, 11302, 12848, 13660, 16784, 18155, 24655, 26836, 26882, 77, 5216, 5271, 7279, 7280, 7281, 7282, 7312, 7313, 8529, 8530, 8532, 8533, 8535, 8536, 8538, 8539, 8541, 8542, 8544, 8545, 8547, 8548, 8550, 8551, 8553, 8554, 9050, 9051, 9054, 11161, 14243, 26890, 28580, 28583, 28586, 28589, 28592, 28597, 28598, 28602, 28603, 28617, 28618, 28619, 28620, 28621, 28650, 28653, 28657, 28676, 28677, 28678, 28679, 28680, 28704, 28707, 28737, 28745, 28752, 28764, 28765, 28770, 28779, 28780, 28785, 28798, 28802, 28803, 28806, 28807, 28808, 28812, 28814, 28816, 28818, 28854, 28918, 1, 9820, 16, 1033, 1065, 1161, 1162, 1204, 1205, 1231, 1232, 1324, 1370, 4207, 10666, 13030, 13701, 17703, 18696, 10, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 4, 741, 13943, 13948, 13953, 10, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6, 10222, 10223, 10224, 10225, 10226, 10227, 1, 15174, 1, 22761, 1, 23089, 1, 7874, 1, 15514, 1, 21742, 1, 12585, 2, 8966, 30900, 1, 15539, 1, 15568, 2, 17849, 23791, 1, 25201, 1, 32762, 1, 25270, 1, 15190, 53, 1793, 1794, 1795, 17377, 17378, 17379, 17380, 17381, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17391, 17392, 17393, 17394, 17395, 17396, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17414, 17415, 17416, 17417, 17418, 17419, 17420, 17421, 17422, 17423, 17424, 17425, 17426, 1, 23251, 2, 7520, 7521, 1, 25162, 458, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 2718, 2722, 2905, 4322, 4323, 4324, 5992, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6703, 6704, 6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 10472, 10473, 10474, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10669, 10670, 10671, 10672, 10673, 10674, 10675, 10676, 10677, 10678, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686, 10687, 10688, 10689, 10690, 10691, 10692, 10693, 11265, 11266, 13794, 13795, 13796, 13797, 13799, 13800, 13801, 13802, 13803, 13804, 13805, 13806, 13807, 13808, 13841, 13842, 13923, 13924, 14329, 14330, 14331, 14332, 14333, 14334, 14335, 14336, 14337, 14338, 14339, 14340, 14341, 14342, 14343, 14344, 14345, 14346, 16280, 16281, 16282, 16283, 16284, 16285, 16286, 16287, 16288, 16289, 16290, 16291, 16292, 16293, 16294, 16295, 17130, 17341, 17342, 17343, 17344, 17345, 19117, 19118, 19119, 19120, 19121, 19122, 19123, 19124, 19125, 19126, 19127, 19763, 19813, 19837, 19838, 19839, 19840, 19841, 19842, 19843, 19844, 19845, 19846, 19847, 19848, 24673, 24674, 24675, 24676, 24677, 26989, 26990, 26991, 26992, 26993, 26997, 26998, 26999, 27000, 27001, 27002, 27011, 27012, 27013, 27014, 27015, 27016, 27017, 27018, 27021, 27022, 27023, 27024, 27025, 27026, 27027, 27058, 27059, 27060, 27061, 27187, 27188, 27189, 28991, 28992, 28993, 28994, 28995, 28996, 28997, 28998, 28999, 29000, 29001, 29002, 29003, 29004, 29005, 29006, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29020, 29021, 29022, 29023, 29024, 29025, 29026, 29027, 29028, 29365, 29366, 29367, 29368, 29369, 29370, 29371, 14, 7289, 7290, 7322, 7331, 7332, 7750, 8663, 8677, 8728, 9060, 9062, 9661, 9662, 31116, 8, 1141, 1147, 1601, 17209, 24761, 29368, 29369, 29370, 1, 15412, 1, 24313, 1, 29048, 1, 31007, 1, 1941, 4, 9523, 9524, 9525, 9526, 6, 987, 988, 10435, 10436, 10437, 10438, 1, 22768, 1, 25536, 1, 9386, 2, 22396, 23472, 3, 3085, 3087, 3089, 1, 21379, 1, 26458, 2, 18880, 18931, 1, 15036, 1, 32358, 1, 30262, 1, 15016, 1, 16859, 1, 9226, 1, 23184, 5, 28864, 28865, 28866, 28870, 28872, 1, 9649, 1, 7889, 2, 13264, 13664, 3, 8716, 12150, 27224, 1, 4740, 1, 15147, 1, 31604, 1, 22813, 1, 4612, 2, 27493, 27516, 1, 8253, 1, 7479, 1, 13045, 2, 31915, 31922, 1, 15135, 1, 23997, 1, 16260, 1, 707, 1, 26334, 10, 2059, 3162, 3244, 11537, 12049, 14774, 20316, 20416, 20448, 26599, 1, 3967, 1, 12553, 1, 5131, 1, 32429, 1, 9366, 6, 9121, 9122, 10131, 10132, 10133, 10134, 1, 16805, 1, 22548, 1, 11003, 1, 25550, 3, 12696, 24244, 24409, 1, 26426, 1, 7931, 2, 12111, 12112, 2, 30336, 31777, 14, 3156, 3341, 3342, 5459, 5492, 5516, 6370, 7757, 11399, 18837, 20404, 20436, 24981, 29136, 1, 26071, 1, 17792, 1, 7878, 1, 3407, 1, 5633, 2, 14447, 15060, 1, 12186, 1, 17838, 5, 16889, 16890, 16891, 31918, 31925, 1, 32233, 5, 4522, 5397, 5417, 5840, 5856, 1, 30634, 1, 23069, 1, 9819, 1, 15297, 1, 9613, 1, 15320, 3, 30448, 30611, 31616, 1, 5136, 1, 26436, 2, 11964, 12099, 1, 11894, 1, 17801, 31, 18794, 18795, 18797, 18798, 18801, 18803, 18805, 18807, 18809, 18811, 18814, 18816, 18818, 18820, 18822, 18824, 18830, 18832, 18834, 18836, 18837, 18839, 18844, 18846, 18848, 18850, 18852, 18857, 18859, 18861, 18863, 8, 981, 982, 10427, 10428, 10429, 10430, 10468, 10469, 2, 1777, 1778, 4, 24739, 24740, 24741, 24742, 1, 15204, 1, 22938, 1, 9337, 1, 25267, 1, 17787, 1, 16893, 1, 26390, 21, 3127, 3128, 3129, 3133, 3134, 3135, 3180, 3217, 3218, 3262, 4269, 4828, 4885, 4898, 4949, 5329, 13651, 14158, 14734, 14735, 14777, 2, 24363, 24501, 8, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 1, 32183, 1, 15391, 1, 23688, 2, 24147, 24381, 1, 8613, 1, 32418, 1, 12943, 1, 29344, 1, 18556, 1, 13216, 1, 3029, 1, 22935, 1, 23972, 1, 30122, 1, 9510, 4, 13908, 24361, 24383, 24592, 1, 30178, 2, 30406, 31707, 1, 24256, 1, 32700, 98, 1537, 1711, 2089, 15802, 15807, 15813, 15819, 15823, 15824, 15825, 15827, 15830, 15836, 15843, 15845, 15847, 15858, 15865, 15871, 15877, 15883, 15887, 15953, 15958, 15963, 15969, 15970, 15971, 15973, 15975, 15982, 15988, 15990, 15992, 15998, 16003, 16008, 16012, 16017, 16020, 16059, 16060, 16067, 16087, 16088, 16095, 16103, 16110, 16113, 16122, 16123, 16124, 16127, 16130, 16131, 16134, 16135, 16136, 16139, 16147, 16159, 16173, 16174, 16179, 16182, 16183, 16184, 16186, 16187, 16191, 16192, 16193, 16199, 16200, 16205, 16206, 16207, 16212, 16215, 16224, 16226, 16228, 16229, 16230, 16231, 16232, 16236, 16239, 16398, 16399, 16400, 16401, 29591, 29621, 29640, 29656, 29680, 29706, 8, 28949, 28950, 28951, 28952, 28953, 28954, 28955, 28956, 17, 7766, 7919, 7935, 8212, 9732, 9752, 9791, 9794, 9795, 9797, 9798, 9799, 9800, 9802, 9804, 9805, 9946, 1, 32739, 4, 3681, 3721, 6443, 10513, 1, 23378, 1, 26927, 1, 7763, 2, 22833, 29227, 2, 9844, 9845, 1, 32324, 1, 31279, 1, 18078, 1, 23687, 1, 27248, 1, 15268, 1, 23296, 2, 9206, 9209, 1, 3039, 4, 12249, 30326, 30329, 31309, 2, 28826, 28827, 1, 26125, 1, 25125, 1, 24119, 1, 32489, 2, 10473, 10474, 1, 9652, 1, 31316, 1, 40, 6, 2085, 2213, 2677, 2767, 2954, 19213, 1, 5104, 1, 4205, 1, 26015, 1, 22828, 1, 17289, 37, 1515, 1548, 1632, 1652, 1835, 1850, 1856, 1857, 1858, 1859, 1860, 2090, 15755, 15756, 15840, 15841, 15986, 16047, 16048, 16075, 16076, 16109, 16116, 16155, 16156, 16157, 16158, 16434, 16435, 16436, 16437, 18586, 19337, 29596, 29659, 29686, 29711, 1, 7351, 1, 26423, 1, 24438, 1, 29079, 5, 21201, 22176, 22177, 22178, 22226, 1, 26216, 1, 32070, 1, 22636, 1, 30608, 1, 26193, 2, 28886, 28887, 16, 21161, 21241, 21367, 21410, 21469, 21617, 21679, 21896, 21904, 21987, 22180, 22249, 22330, 22348, 22356, 22357, 1, 24069, 1, 23139, 1, 10595, 1, 24683, 4, 1489, 1490, 1491, 15599, 1, 3041, 1, 6020, 1, 10964, 1, 4129, 1, 27177, 1, 32385, 1, 24087, 1, 26676, 1, 7749, 1, 7411, 4, 7897, 7898, 7899, 7900, 3, 1348, 1394, 1399, 25, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21067, 21068, 21069, 21070, 21071, 21072, 21073, 21074, 21075, 21076, 21077, 21078, 21079, 21080, 21081, 21082, 12, 8790, 8796, 31833, 31842, 31848, 31854, 31863, 31869, 31875, 31884, 31890, 31896, 2, 20425, 20457, 2, 4763, 4764, 1, 27015, 1, 12222, 1, 3860, 4, 3683, 3723, 6445, 10515, 1, 29226, 1, 15280, 1, 32032, 1, 15502, 2, 24156, 24290, 2, 12780, 13391, 1, 32689, 1, 32138, 1, 15077, 71, 29029, 29030, 29031, 29032, 29033, 29034, 29035, 29036, 29037, 29038, 29039, 29040, 29041, 29042, 29043, 29044, 29045, 29046, 29047, 29048, 29049, 29050, 29051, 29052, 29053, 29054, 29055, 29056, 29057, 29058, 29059, 29060, 29061, 29062, 29063, 29064, 29065, 29066, 29067, 29068, 29069, 29070, 29071, 29072, 29073, 29074, 29075, 29076, 29077, 29078, 29079, 29080, 29081, 29082, 29083, 29084, 29085, 29086, 29087, 29088, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29096, 29097, 29098, 29099, 1, 23393, 1, 12213, 1, 24276, 1, 26795, 1, 27295, 90, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 1, 23665, 1, 25599, 2, 26654, 26655, 8, 6062, 6072, 6074, 14500, 14503, 14505, 14510, 14523, 1, 23921, 1, 15396, 1, 167, 3, 4059, 4761, 4762, 1, 4854, 1, 32781, 3, 12197, 13369, 18841, 1, 13124, 1, 26417, 5, 4182, 4497, 4498, 4499, 19407, 1, 32071, 1, 12747, 4, 13715, 29087, 29440, 29441, 1, 22497, 1, 11905, 6, 30472, 30516, 30893, 30902, 30903, 30904, 2, 22431, 23508, 1, 27176, 55, 1457, 8136, 8139, 8142, 8145, 8148, 8152, 8157, 8158, 8560, 8561, 8575, 8595, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8614, 8615, 8658, 8659, 8660, 8665, 8667, 8668, 8671, 8675, 8676, 8680, 8687, 8690, 8691, 8694, 8695, 8696, 8960, 8975, 9039, 9041, 9133, 9136, 9171, 10003, 11111, 11112, 11166, 11167, 28915, 28916, 28948, 30790, 188, 840, 1323, 1369, 1906, 3126, 3132, 3216, 4107, 4552, 5328, 6763, 7474, 7653, 7654, 7697, 7698, 7710, 7711, 7754, 7762, 7763, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7801, 7802, 7803, 7806, 7807, 7808, 7811, 7812, 7813, 7815, 7817, 7818, 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, 7828, 7829, 7830, 7834, 7837, 7838, 7839, 7840, 7841, 7842, 7849, 7850, 7851, 7852, 7859, 7860, 7861, 7862, 7863, 7864, 7870, 7871, 7905, 7906, 7938, 7943, 7944, 7945, 7946, 7947, 7948, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7958, 7961, 8019, 8024, 8560, 8561, 8614, 8615, 9489, 9490, 9500, 9501, 9502, 9503, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9588, 9665, 9666, 9700, 9838, 9839, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9862, 9863, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9899, 9900, 9904, 9905, 9908, 9909, 9910, 9911, 9912, 9913, 9922, 9923, 9928, 9929, 9930, 9931, 9936, 9937, 9976, 9977, 10049, 10055, 10057, 10095, 10096, 10097, 10098, 10099, 10100, 10101, 10102, 11103, 11104, 11105, 11106, 11218, 11312, 11587, 11826, 12156, 12478, 13650, 14157, 14732, 14733, 16626, 16776, 17372, 18146, 18369, 18395, 24660, 27258, 28614, 29233, 1, 6222, 1, 24789, 1, 23022, 1, 25102, 1, 25904, 1, 23222, 1, 9304, 1, 24139, 1, 23523, 8, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 14491, 4, 9672, 10165, 10166, 10167, 1, 24245, 1, 28822, 1, 14999, 1, 18371, 1, 12857, 1, 23546, 1, 32035, 1, 23572, 1, 10206, 1, 12388, 17, 4041, 4794, 4795, 4866, 4932, 7501, 11254, 11348, 11598, 11848, 13157, 13695, 16648, 16764, 17692, 18134, 18691, 1, 23350, 1, 8009, 1, 25946, 6, 7983, 24508, 30431, 30433, 30439, 30440, 3, 1970, 8714, 30372, 1, 23284, 1, 32683, 1, 15125, 84, 20394, 20395, 20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20415, 20416, 20417, 20418, 20419, 20420, 20421, 20422, 20423, 20424, 20425, 20426, 20427, 20428, 20429, 20430, 20431, 20432, 20433, 20434, 20435, 20436, 20437, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20445, 20446, 20447, 20448, 20449, 20450, 20451, 20452, 20453, 20454, 20455, 20456, 20457, 20458, 20459, 20460, 20461, 20462, 20463, 20464, 20465, 20466, 20467, 20468, 20469, 20470, 20471, 20472, 20473, 20474, 20475, 20476, 20477, 1, 13049, 1, 15420, 1, 23882, 1, 32709, 1, 7428, 3, 1990, 5513, 5815, 132, 3467, 6036, 6748, 6751, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8447, 8449, 8451, 8453, 8455, 8457, 8459, 8460, 8461, 8463, 8464, 8465, 8467, 8468, 8469, 8471, 8472, 8473, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8523, 8525, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8571, 8572, 8573, 8574, 8592, 9047, 9073, 9074, 10168, 10183, 10184, 10202, 12148, 16713, 30632, 30975, 31119, 31148, 31149, 31151, 31351, 31371, 31378, 31384, 31390, 31396, 31401, 31405, 31409, 31410, 31419, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 1, 32600, 5, 7651, 7652, 30794, 30795, 30943, 1, 32166, 5, 6722, 9065, 9066, 9197, 9198, 2, 375, 376, 1, 27297, 5, 2962, 8667, 8668, 8669, 8670, 2, 5811, 6386, 1, 26159, 1, 16901, 98, 184, 185, 186, 2640, 2641, 2642, 2643, 2644, 2645, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 3009, 3010, 3011, 3012, 3013, 3014, 7323, 7553, 7554, 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7568, 7610, 10481, 14181, 14182, 14183, 14184, 14185, 14186, 18397, 18398, 18453, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 18521, 19051, 19052, 19053, 19054, 19093, 21083, 21084, 21085, 21086, 21087, 21088, 21089, 21090, 21091, 21092, 21093, 21094, 21095, 21096, 21097, 21098, 21099, 21100, 21101, 21102, 21103, 29520, 29521, 29522, 29587, 29588, 1, 29815, 1, 13260, 1, 22544, 1, 15411, 1, 4976, 2, 22807, 29180, 23, 28607, 28612, 28613, 28624, 28625, 28629, 28630, 28652, 28655, 28683, 28684, 28688, 28689, 28706, 28709, 28747, 28754, 28772, 28787, 28800, 28827, 28866, 28869, 145, 10986, 29732, 29733, 29734, 29735, 29736, 29737, 29738, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29779, 29780, 29781, 29782, 29783, 29784, 29785, 29786, 29787, 29788, 29789, 29790, 29791, 29792, 29793, 29794, 29795, 29796, 29797, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29805, 29806, 29807, 29808, 29809, 29810, 29811, 29812, 29813, 29814, 29815, 29816, 29817, 29818, 29819, 29820, 29821, 29822, 29823, 29824, 29825, 29826, 29827, 29828, 29829, 29830, 29831, 29832, 29833, 29834, 29835, 29836, 29837, 29838, 29839, 29840, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29852, 29853, 29854, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29863, 29864, 29865, 29866, 29867, 29868, 29869, 29870, 29871, 29872, 29873, 29874, 29875, 1, 18027, 1, 6131, 1, 17172, 1, 32121, 1, 8715, 1, 22909, 1, 24206, 2, 6305, 29061, 1, 22976, 2, 22845, 29242, 1, 25430, 1, 32106, 6, 28647, 28648, 28649, 28701, 28702, 28703, 1, 9893, 1, 7489, 2, 12164, 27221, 1, 12922, 1, 3336, 1, 16829, 1, 23070, 1, 25211, 1, 19114, 1, 12570, 3, 10264, 10311, 29017, 1, 8891, 1, 26123, 1, 9848, 2, 18653, 25009, 2, 1279, 1280, 1, 17532, 1, 17936, 1, 17744, 1, 23309, 1, 31768, 1, 31786, 1, 11990, 1, 10932, 1, 31827, 2, 22446, 23526, 1, 25748, 1, 3965, 4, 5436, 5437, 5438, 30099, 1, 23750, 1, 30709, 1, 31136, 1, 25450, 3, 21441, 21555, 21598, 1, 5198, 1, 32066, 2, 4567, 4568, 1, 26481, 1, 32368, 2, 4592, 4593, 6, 2374, 2375, 2376, 2377, 2378, 7568, 4, 9021, 9022, 9023, 9024, 10, 7795, 7829, 7830, 7955, 7956, 7957, 7958, 8660, 12223, 31020, 1, 16756, 1, 23744, 1, 27258, 1, 12008, 3, 3603, 4785, 4786, 1, 25756, 19, 4220, 4435, 4556, 11212, 11306, 12437, 13504, 14950, 16732, 17391, 21248, 21330, 21705, 21706, 22232, 26833, 26834, 26880, 29221, 1, 26276, 1, 18063, 1, 9747, 40, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24670, 24671, 24672, 24673, 24674, 24675, 24676, 24677, 24678, 26922, 26926, 26943, 26945, 1, 25623, 1, 25245, 2, 4795, 5630, 1, 13194, 1, 13032, 1, 25747, 2, 1032, 1064, 8, 1686, 1687, 1688, 15729, 15730, 15731, 15732, 31654, 1, 7641, 40, 18219, 18220, 18221, 18222, 18223, 18224, 18225, 18226, 18227, 18228, 18229, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18240, 18241, 18242, 18243, 18244, 18245, 18246, 18247, 18248, 18249, 18250, 18251, 18252, 18253, 18254, 18255, 18256, 18257, 18258, 1, 29938, 1, 26001, 2, 2985, 21087, 2, 2253, 19295, 4, 6391, 17550, 25010, 25011, 1, 22892, 1, 7265, 1, 25318, 1, 15211, 1, 32414, 1, 7989, 81, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27224, 27225, 27226, 27227, 27228, 27229, 27230, 27231, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27257, 27258, 27259, 27260, 27261, 27262, 27263, 27264, 27265, 27266, 27267, 27268, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27284, 27285, 27286, 27287, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27296, 27297, 1, 31280, 1, 17727, 2, 18899, 18950, 1, 6128, 1, 13111, 1, 13139, 1, 7288, 1, 10969, 14, 1969, 1973, 9162, 9514, 9515, 9519, 9667, 9771, 9834, 11158, 20735, 20736, 20738, 20739, 1, 18826, 4, 21463, 21857, 21858, 21859, 1, 23121, 3, 4510, 7974, 9666, 1, 30246, 1, 31724, 1, 32467, 10, 1053, 1085, 3738, 6411, 6458, 13803, 13839, 30897, 30898, 30907, 1, 8737, 1, 26374, 1, 30162, 2, 6249, 17275, 2, 14015, 14016, 1, 30357, 1, 13119, 1, 5183, 2, 4775, 4776, 8, 28914, 28921, 28922, 28932, 28933, 28934, 30953, 31628, 2, 9827, 9828, 1, 10188, 1, 24920, 1, 25714, 1, 5799, 1, 26785, 1, 32092, 1, 11864, 2, 27623, 27643, 1, 3080, 9, 1496, 2129, 5432, 8621, 10694, 10695, 10700, 10701, 10702, 4, 8751, 11518, 12113, 27214, 7, 7742, 9737, 21366, 21610, 21615, 21628, 21877, 4, 3917, 11421, 14454, 16665, 8, 10538, 10542, 10546, 10548, 10552, 10556, 10557, 10563, 1, 26407, 1, 22993, 3, 3775, 11479, 15084, 1, 32483, 1, 16758, 5, 3307, 3308, 3309, 3312, 3479, 1, 18073, 31, 780, 2161, 2162, 2290, 2465, 2556, 2718, 2719, 2816, 2817, 2906, 14242, 14316, 14347, 14348, 14349, 14350, 14351, 14352, 19160, 19269, 19371, 19480, 19764, 19916, 20006, 20083, 20596, 20597, 20813, 20919, 5, 10811, 10843, 10849, 10877, 10878, 1, 9912, 1, 22980, 2, 1468, 18292, 1, 7730, 39, 1953, 2255, 2447, 2888, 3140, 3618, 3634, 4303, 4817, 5475, 5525, 5536, 5732, 5781, 5784, 5926, 5928, 6185, 6300, 12390, 13424, 13535, 13719, 14227, 14239, 14574, 14695, 17396, 17568, 18983, 20717, 24474, 24646, 24904, 29050, 29113, 29250, 29382, 29416, 1, 25889, 1, 15362, 2, 27128, 27155, 5, 1625, 15677, 15678, 15679, 15680, 2, 7621, 7685, 1, 15433, 1, 29508, 1, 10772, 1, 9761, 1, 23605, 1, 15337, 2, 17907, 23852, 1, 32337, 1, 781, 9, 164, 8831, 8832, 8833, 8834, 8835, 8836, 12440, 30393, 1, 22957, 1, 26128, 1, 4230, 1, 31112, 1, 23892, 3, 7722, 7723, 7724, 1, 25322, 1, 26391, 2, 18366, 25902, 1, 32171, 1, 26731, 1, 16808, 4, 6042, 6043, 6096, 6097, 4, 6705, 10792, 28795, 30484, 1, 13169, 1, 24127, 1, 9847, 12, 8847, 8848, 8946, 8958, 30408, 30458, 30459, 30705, 30706, 30707, 30708, 31152, 1, 7992, 1, 23587, 10, 29997, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 1, 8110, 1, 16764, 1, 14830, 1, 23751, 1, 31147, 1, 7687, 1, 24686, 1, 11909, 1, 25055, 1, 22571, 1, 13205, 2, 11645, 11741, 1, 4973, 2, 17599, 17635, 1, 9791, 2, 1326, 1372, 1, 7848, 1, 4069, 1, 7754, 1, 12689, 1, 21107, 1, 23576, 1, 32156, 1, 3823, 1, 26335, 1, 15369, 1, 26232, 1, 9587, 1, 15117, 1, 24786, 5, 30712, 30713, 30715, 30716, 30856, 1, 9889, 2, 7741, 9790, 1, 15402, 1, 17123, 1, 23577, 2, 1793, 18597, 1, 28948, 1, 32274, 1, 24351, 1, 9827, 1, 31800, 1, 9319, 1, 17319, 4, 12682, 21427, 22155, 22156, 1, 32056, 1, 32730, 1, 25765, 1, 24711, 1, 30290, 1, 24741, 1, 15261, 4, 4206, 13472, 17459, 17499, 1, 5169, 1, 13337, 2, 14529, 14530, 1, 25435, 1, 23209, 1, 32230, 1, 32231, 8, 10861, 11062, 30624, 30687, 30780, 30782, 30784, 31432, 460, 1447, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 6274, 7552, 7725, 8230, 8231, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8273, 8274, 8275, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8841, 8842, 8843, 8844, 8845, 8846, 8929, 8942, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11950, 11951, 11952, 11953, 11954, 11955, 11956, 11957, 11958, 11959, 11960, 11961, 11962, 11963, 11964, 11965, 11966, 11967, 12079, 12080, 12081, 12082, 12083, 12084, 12085, 12086, 12087, 12088, 12089, 12090, 12091, 12092, 12093, 12094, 12095, 12096, 12097, 12098, 12099, 12100, 12101, 12102, 12103, 12104, 12105, 12106, 12107, 12108, 12109, 12113, 12114, 12115, 12116, 12117, 12118, 12119, 12120, 12121, 12122, 12123, 12124, 12125, 12126, 12127, 12128, 12129, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12159, 12160, 12161, 12162, 12163, 12164, 12165, 12166, 12167, 12168, 12169, 12170, 12171, 12172, 12173, 12174, 12175, 12176, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16296, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, 16312, 16313, 16314, 16315, 16316, 16319, 16320, 27211, 27212, 27213, 27214, 27215, 27216, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27224, 27225, 27226, 27227, 27228, 27229, 27230, 27231, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27257, 27258, 27259, 27260, 27261, 27262, 27263, 27264, 27265, 27266, 27267, 27268, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27284, 27285, 27286, 27287, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27296, 27297, 29081, 29082, 29083, 29084, 29085, 30209, 30210, 30211, 30212, 30213, 30214, 30759, 30760, 30761, 30762, 30763, 30775, 30796, 31221, 31222, 31223, 31224, 31225, 31226, 31227, 31228, 31229, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31240, 31241, 31242, 31243, 31244, 31245, 31246, 31247, 31248, 31249, 31250, 31251, 31252, 31253, 31254, 31255, 31256, 31257, 31258, 31259, 31260, 31261, 31262, 31263, 31264, 31265, 31266, 31267, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31283, 31284, 31285, 31286, 31287, 31288, 31289, 31290, 31291, 31292, 31293, 31294, 31295, 31296, 31297, 31298, 31299, 31300, 31301, 31302, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 6, 9862, 9863, 9902, 9903, 9904, 9905, 1, 6090, 1, 14430, 1, 23534, 1, 16899, 1, 15321, 2, 8199, 8944, 1, 25709, 1, 7906, 1, 17972, 1, 13448, 1, 7432, 1, 12334, 1, 12264, 1, 26207, 1, 7516, 15, 1792, 18177, 18209, 18249, 18279, 18540, 18631, 18728, 18755, 18781, 19081, 19082, 19083, 19113, 19158, 1, 32136, 1, 29506, 7, 3599, 3628, 3632, 3647, 5751, 5986, 25034, 1, 12070, 2, 22400, 23477, 1, 26202, 1, 15152, 1, 31227, 1, 5595, 2, 11081, 12162, 1, 32738, 2, 1029, 1061, 1, 32405, 1, 15492, 3, 31573, 31574, 31575, 1, 15473, 3, 6149, 6150, 6151, 1, 7507, 2, 30352, 31699, 1, 31005, 2, 27573, 27595, 1, 3964, 3, 13628, 24233, 29280, 2, 3982, 11493, 5, 11629, 11630, 11723, 11724, 11726, 1, 17966, 2, 12468, 13360, 1, 25504, 1, 31157, 4, 28844, 28845, 28846, 28847, 5, 21114, 24033, 24034, 24040, 24041, 1, 17546, 1, 26083, 1, 7837, 1, 4100, 1, 11973, 6, 6033, 9687, 9688, 9689, 9690, 10756, 1, 10712, 3, 17711, 18868, 18919, 1, 30279, 1, 26704, 2, 7268, 24770, 1, 23071, 1, 23125, 1, 24019, 2, 27127, 27154, 3, 7772, 28595, 28596, 1, 30603, 1, 30289, 1, 29210, 1, 29237, 1, 8036, 1, 13110, 1, 9859, 1, 25436, 1, 29075, 3, 1508, 10480, 10773, 1, 26261, 1, 29201, 3, 30347, 30348, 31639, 7, 10916, 15105, 15106, 32833, 32834, 32835, 32836, 1, 32409, 1, 27034, 1, 30726, 2, 7281, 7285, 1, 10644, 1, 10203, 42, 3665, 3705, 4517, 5157, 6427, 7704, 7705, 7706, 7708, 8234, 8935, 8944, 8957, 10201, 10497, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11678, 12130, 13634, 17533, 17741, 26602, 27294, 28507, 28526, 28930, 28931, 28932, 28933, 29138, 30301, 30363, 30754, 30855, 31152, 31620, 1, 29835, 3, 3065, 3075, 3079, 3, 30387, 31109, 31110, 1, 15179, 1, 7760, 1, 12372, 1, 23248, 1, 5014, 1, 25883, 1, 29306, 1, 23085, 1, 31283, 1, 16910, 1, 10659, 1, 25094, 1, 29077, 1, 9115, 1, 5614, 1, 22536, 1, 32402, 3, 7614, 7628, 7678, 1, 42, 1, 13144, 1, 26312, 1, 16846, 1, 15315, 2, 22393, 23469, 1, 25991, 1, 31679, 1, 31173, 1, 32399, 1, 24346, 53, 16993, 16994, 16995, 16996, 16997, 16998, 16999, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 17016, 17017, 17018, 17019, 17020, 17021, 17022, 17023, 17024, 17025, 17026, 17027, 17028, 17029, 17030, 17031, 17032, 17033, 17034, 17035, 17036, 17037, 17038, 17039, 17040, 17041, 17042, 17043, 17044, 17045, 1, 32113, 1, 25687, 1, 7783, 1, 15097, 1, 30298, 1, 9544, 1, 12548, 1, 3025, 1, 15232, 1, 24659, 2, 254, 255, 1, 30428, 1, 32777, 1, 12332, 1, 8991, 1, 26410, 3, 7787, 14846, 14884, 122, 28327, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28363, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28401, 28407, 28408, 28412, 28413, 28414, 28415, 28416, 28418, 28419, 28422, 28423, 28424, 28429, 28430, 28431, 28432, 28433, 28434, 28439, 28440, 28441, 28443, 28446, 28447, 28448, 28449, 28450, 28451, 28466, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28491, 28492, 28503, 28504, 28520, 28521, 28522, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28572, 28573, 28574, 28575, 28576, 28577, 1, 26829, 1, 7829, 71, 46, 442, 573, 574, 656, 658, 669, 670, 700, 701, 736, 1401, 1705, 1727, 1728, 1729, 1750, 1751, 2286, 4327, 4502, 5094, 5428, 5434, 8230, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 10477, 10482, 10754, 10965, 11117, 13446, 13717, 13926, 16240, 16241, 16272, 16330, 16508, 16591, 20737, 20740, 20746, 20751, 20754, 24678, 24894, 26639, 28967, 29958, 31126, 32511, 2, 356, 357, 1, 22837, 31, 7941, 7942, 10012, 10013, 31107, 31108, 31345, 31355, 31357, 31361, 31363, 31367, 31374, 31375, 31382, 31388, 31394, 31400, 31417, 31482, 31483, 31484, 31485, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 1, 21544, 1, 24738, 1, 5194, 1, 8447, 1, 17308, 2, 9897, 9899, 3, 13605, 24148, 29308, 1, 18285, 2, 4862, 5038, 1, 25185, 1, 25193, 1, 12974, 1, 25587, 1, 32425, 1, 15413, 1, 7497, 4, 29877, 29891, 29906, 29921, 1, 25526, 27, 26695, 26714, 26715, 26716, 26721, 26722, 26723, 26725, 26726, 26732, 26733, 26734, 26738, 26739, 26743, 26745, 26747, 26749, 26761, 26775, 26776, 26787, 26884, 26885, 26886, 26887, 26889, 1, 22128, 1, 13444, 1, 12509, 1, 25637, 1, 18299, 1, 32814, 2, 8878, 11679, 1, 13187, 1, 15273, 2, 31258, 31259, 15, 2174, 2178, 2230, 2234, 2246, 2275, 2476, 2479, 2525, 2528, 6043, 6476, 6504, 20598, 20980, 1, 5124, 1, 11928, 3, 8969, 31612, 31613, 6, 7184, 7191, 7214, 7220, 7227, 7235, 2, 24812, 24844, 1, 23574, 1, 12352, 5, 1715, 8238, 8239, 23441, 23442, 1, 12074, 2, 27590, 27615, 1, 9627, 1, 26010, 1, 30261, 4, 21352, 21353, 21503, 21554, 1, 23029, 1, 23669, 1, 7905, 1, 7626, 1, 162, 6, 27082, 27088, 27091, 27092, 27093, 27094, 1, 13195, 1, 30299, 1, 16868, 1, 13182, 1, 23598, 2, 212, 244, 8, 10884, 10885, 11100, 29736, 29737, 29738, 30480, 30521, 1, 15033, 1, 17722, 1, 26298, 8, 16985, 16986, 16987, 16988, 16989, 16990, 16991, 16992, 1, 13258, 1, 29285, 1, 30327, 1, 25144, 1, 29185, 1, 29341, 1, 28792, 1, 28985, 1, 10473, 1, 15439, 1, 32434, 1, 10947, 2, 21465, 21466, 2, 22428, 23505, 1, 12853, 385, 7538, 7539, 7540, 7541, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 27715, 27716, 27717, 27718, 27719, 27720, 27721, 27722, 27723, 27724, 27725, 27726, 27727, 27728, 27729, 27730, 27731, 27732, 27733, 27734, 27735, 27736, 27737, 27738, 27739, 27740, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27817, 27818, 27819, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27829, 27830, 27831, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27845, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27861, 27862, 27863, 27864, 27865, 27866, 27867, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27890, 27891, 27892, 27893, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27901, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27914, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 28151, 28152, 28153, 28154, 28155, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28185, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28206, 28207, 28208, 28209, 28210, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28227, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28238, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28289, 28290, 28291, 28292, 28293, 28294, 28295, 28296, 28297, 28298, 28299, 28300, 28301, 28302, 28303, 28304, 28305, 28306, 28307, 28308, 29969, 29970, 31101, 31102, 31103, 31105, 31106, 31506, 31507, 31508, 31509, 31510, 31511, 31512, 31513, 31514, 31515, 4, 24122, 24140, 24343, 24430, 28, 1718, 9583, 10073, 10870, 11073, 14243, 14244, 17086, 17087, 20606, 20607, 20612, 20613, 20693, 20694, 20695, 20852, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28963, 30954, 31632, 1, 23550, 8, 31494, 31495, 31496, 31497, 31498, 31499, 31500, 31501, 1, 26842, 5, 7869, 7871, 7907, 7952, 7954, 1, 21265, 1, 23647, 2, 165, 7496, 2, 10970, 12400, 1, 25385, 4, 3413, 3416, 3418, 3419, 1, 23050, 4, 243, 7761, 8038, 9965, 207, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3490, 3491, 10, 28650, 28651, 28652, 28653, 28654, 28655, 28656, 28657, 28658, 28659, 1, 969, 1, 11802, 19, 902, 933, 963, 6604, 6613, 6744, 14111, 14112, 17347, 27978, 28004, 28036, 28062, 28094, 28120, 28152, 28178, 28210, 28236, 1, 16259, 1, 23829, 1, 25373, 1, 25693, 1, 11580, 1, 9927, 1, 30825, 2, 4284, 17261, 1, 26378, 3, 8000, 23446, 23447, 1, 24303, 1, 11574, 1, 9651, 1, 9238, 1, 15228, 3, 28882, 28918, 28919, 1, 12877, 1, 22767, 1, 9942, 1, 12977, 1, 25311, 1, 13075, 1, 186, 1, 2033, 7, 1835, 1841, 1853, 1855, 7336, 15752, 15753, 2, 17954, 24021, 1, 32305, 1, 17921, 1, 29955, 1, 25400, 1, 23737, 25, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 1, 32288, 1, 32792, 1, 15399, 1, 12900, 1, 22610, 2, 13676, 29275, 1, 15540, 14, 3300, 3335, 3412, 3413, 3414, 3416, 3417, 3418, 3419, 3465, 3678, 3718, 6440, 10510, 1, 13310, 1, 31275, 1, 1512, 2, 1956, 1963, 2, 13081, 17693, 1, 12365, 1, 12854, 1, 23536, 1, 27130, 1, 30359, 2, 30682, 30683, 2, 1409, 1460, 5, 3372, 3447, 20581, 24944, 24946, 4, 30637, 30988, 31002, 31031, 1, 17370, 1, 25919, 36, 1185, 1186, 1187, 1188, 2104, 28351, 28352, 28363, 28462, 28547, 28617, 28618, 28619, 28620, 28622, 28627, 28676, 28677, 28678, 28679, 28681, 28686, 28734, 28832, 28834, 28841, 28842, 28843, 28864, 28865, 28866, 28867, 28868, 28869, 28945, 30678, 1, 22453, 1, 22486, 2, 8823, 30470, 1, 31235, 1, 16357, 1, 30436, 1, 22496, 5, 3385, 3460, 20593, 20666, 20964, 2, 11654, 11750, 1, 9222, 1, 16782, 1, 9750, 2, 680, 681, 1, 32660, 1, 27002, 1, 17516, 1, 7658, 1, 17964, 1, 25243, 1, 25952, 1, 30002, 1, 30123, 34, 878, 879, 971, 972, 2991, 14136, 18389, 19574, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19582, 19583, 19584, 19585, 19586, 19587, 19588, 19589, 19590, 19591, 19592, 19593, 20265, 24903, 24916, 24934, 24960, 25807, 25808, 67, 94, 96, 176, 706, 710, 711, 714, 715, 729, 731, 752, 753, 754, 764, 765, 766, 775, 779, 786, 787, 809, 1129, 1130, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 2244, 2245, 6027, 6703, 6704, 9762, 9781, 9838, 14067, 16556, 16558, 27011, 32559, 32561, 1, 7824, 1, 12884, 1, 22930, 2, 10985, 30287, 1, 3304, 1, 3074, 7, 7453, 7454, 7455, 7456, 7458, 7459, 7460, 1, 22969, 1, 7614, 3, 3044, 3045, 3047, 1, 12517, 1, 29247, 1, 17361, 1, 9395, 1, 10594, 1, 9368, 1, 10591, 1, 15376, 1, 7791, 8, 3598, 3627, 3631, 5750, 5985, 14708, 25033, 25041, 1, 32299, 1, 29218, 2, 16882, 31176, 1, 30219, 1, 30229, 1, 13607, 1, 13172, 1, 31304, 1, 30506, 1, 26091, 1, 6199, 1, 13107, 2, 22447, 23527, 1, 25133, 2, 1496, 2129, 1, 14607, 1, 16873, 1, 21106, 1, 15350, 1, 26641, 1, 30511, 2, 26853, 26857, 3, 4656, 4657, 4658, 277, 164, 179, 262, 263, 274, 275, 284, 285, 300, 315, 316, 375, 376, 476, 477, 546, 547, 554, 555, 556, 557, 725, 771, 799, 852, 1454, 1455, 1457, 1458, 1523, 1585, 1631, 1632, 1641, 1643, 1647, 1655, 1656, 1660, 1665, 1675, 1678, 1684, 1700, 1743, 1744, 1745, 1812, 1827, 1830, 1844, 1847, 1848, 1975, 2091, 2092, 2096, 2098, 2107, 2139, 2142, 2150, 2151, 2157, 2158, 2159, 2274, 2978, 3547, 4511, 5629, 5992, 6031, 6481, 6759, 6768, 6769, 6770, 6771, 6776, 6777, 6778, 6779, 6796, 6797, 6800, 6801, 6802, 6803, 6816, 6817, 6820, 6821, 6822, 6823, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6892, 6893, 6900, 6901, 6902, 6903, 6904, 6905, 6908, 6909, 6912, 6913, 6921, 6926, 6927, 6938, 6939, 6948, 6949, 6950, 6951, 6964, 6965, 6968, 6969, 6970, 6971, 6982, 6983, 6992, 6993, 6994, 6995, 7006, 7007, 7010, 7011, 7291, 7292, 7341, 7343, 7344, 7345, 7346, 7745, 7781, 7878, 7886, 7922, 7939, 7940, 7970, 8108, 8683, 8837, 8839, 9158, 9167, 9168, 9170, 9171, 9616, 9617, 9628, 9673, 9727, 9730, 9764, 9769, 9775, 9791, 9808, 9809, 9829, 9830, 9833, 9836, 9854, 9855, 9856, 9857, 9858, 9859, 9878, 9879, 9916, 9917, 9922, 9923, 10724, 10725, 10736, 10737, 10738, 10739, 10743, 10745, 10766, 10891, 11161, 11162, 11363, 11409, 12448, 13954, 13955, 13956, 13993, 13994, 14074, 15610, 15611, 15612, 15613, 15741, 15742, 16296, 16317, 16318, 16595, 16937, 18511, 18522, 18641, 18642, 18643, 18701, 18702, 18703, 18704, 18785, 19117, 19119, 19134, 19136, 19233, 19234, 20091, 26530, 26531, 26532, 26534, 26535, 26544, 26621, 26630, 26997, 30631, 30774, 31592, 31596, 31597, 1, 32450, 4, 26839, 26840, 26841, 26842, 1, 25958, 1, 8783, 1, 22871, 2, 24108, 24411, 2, 27213, 27215, 1, 12625, 4, 4183, 4939, 13450, 29170, 1, 25228 }; // }}} static const char_type mark_to_offset[15483] = { // {{{ 20303, 64276, 136161, 34385, 104171, 125638, 23030, 28043, 57333, 42932, 104519, 57255, 9017, 115677, 16316, 61919, 38536, 131020, 62309, 67378, 74371, 116309, 123620, 55256, 110371, 39078, 12660, 12495, 42059, 65490, 34586, 34462, 63202, 43738, 113098, 105774, 56657, 58480, 30646, 2038, 35194, 64423, 6638, 77378, 11950, 33955, 15700, 119379, 42610, 43469, 64367, 134503, 45102, 114794, 130899, 50289, 65842, 7733, 58027, 134230, 131156, 61655, 12362, 126603, 125212, 70925, 7574, 84867, 30982, 13502, 119598, 14844, 77925, 58188, 41922, 46210, 50051, 11435, 43353, 116446, 73679, 1897, 43039, 34103, 52587, 108122, 1257, 43244, 33822, 13156, 10600, 102672, 135077, 2106, 104379, 131884, 103170, 77334, 15303, 124697, 24362, 86722, 5, 60443, 44780, 11153, 25412, 102648, 126553, 35775, 132150, 74223, 9886, 132863, 136233, 27584, 65838, 52628, 40162, 103714, 34292, 134173, 38524, 135934, 38420, 112663, 61565, 8622, 34669, 46650, 86939, 84818, 86307, 132176, 8452, 125616, 55297, 135502, 22824, 102905, 84863, 6237, 15683, 14309, 63796, 123385, 14920, 5241, 34170, 60752, 20643, 20432, 370, 80928, 38885, 104382, 5227, 26190, 21894, 81178, 132180, 125257, 134970, 125215, 133601, 133634, 115788, 39231, 27641, 34364, 6574, 33415, 60455, 65476, 6987, 133543, 73790, 72857, 123254, 123398, 124977, 115434, 78399, 90687, 77430, 119624, 21175, 135021, 12763, 46030, 81184, 44787, 27043, 74442, 133464, 25535, 129461, 35103, 50569, 35369, 68625, 14981, 29100, 5311, 14847, 15713, 62934, 26446, 30876, 11051, 112826, 115756, 119415, 125739, 67544, 90134, 68643, 116216, 22786, 111085, 34631, 34345, 119264, 113721, 122468, 58603, 124852, 27692, 45940, 34280, 13553, 32981, 27061, 10970, 103069, 60765, 119225, 135523, 37538, 62561, 71815, 81091, 80191, 123766, 1961, 29250, 22987, 85261, 29126, 37404, 117656, 6122, 30359, 116345, 23942, 131820, 115981, 37947, 123090, 134998, 128027, 12761, 25917, 13500, 103820, 15677, 8644, 43451, 123696, 58355, 61559, 81120, 33983, 46877, 73775, 53577, 61653, 12658, 131392, 131200, 25793, 14849, 125128, 42103, 29926, 125687, 56914, 85776, 87775, 65525, 86943, 12458, 29817, 9880, 35470, 64708, 3, 340, 20417, 61772, 26047, 26005, 34868, 30972, 88583, 113843, 130077, 35314, 40588, 109847, 39000, 62618, 46673, 43033, 63821, 45832, 80472, 6583, 109583, 101026, 35628, 81162, 67419, 15462, 68886, 71504, 89174, 56944, 135860, 74677, 6974, 77762, 125217, 15327, 27523, 132926, 1913, 66433, 6691, 110303, 42419, 132875, 133562, 49667, 34588, 20609, 80236, 6657, 20421, 30309, 38408, 33433, 71273, 46798, 129629, 78692, 67869, 55372, 115423, 15345, 102869, 8634, 21148, 63399, 33820, 50681, 122728, 34519, 12795, 37492, 89987, 22478, 114289, 13859, 65169, 5495, 33865, 109208, 43625, 15294, 103107, 123457, 74366, 130316, 104456, 87130, 25908, 34543, 11908, 90559, 118417, 43769, 124583, 68324, 113081, 27698, 71956, 24291, 5660, 6796, 126388, 113714, 38680, 72494, 72156, 124654, 65160, 20174, 62367, 122494, 115431, 33013, 55374, 53987, 55860, 41941, 44756, 39, 59039, 81980, 15669, 30748, 72410, 7356, 54470, 30361, 37312, 135790, 84885, 34690, 54373, 25830, 35098, 38661, 67576, 12039, 80287, 11027, 102645, 103082, 115596, 68563, 74114, 27586, 7497, 122489, 16644, 60457, 33223, 29293, 133468, 65709, 78489, 33801, 6668, 126440, 51122, 87001, 127779, 65589, 14339, 20534, 38149, 115812, 64356, 110538, 77808, 46014, 22203, 21177, 90060, 66428, 61713, 33388, 100966, 67523, 20409, 31062, 7098, 25787, 132316, 53623, 68541, 16925, 30996, 67527, 108133, 33343, 12513, 55858, 133493, 25902, 32769, 15054, 5524, 20181, 25730, 109214, 104467, 58509, 57348, 135854, 58427, 29266, 23044, 13515, 11065, 124632, 30348, 14483, 37972, 109558, 6174, 35864, 42263, 29928, 63762, 81891, 44435, 65463, 30664, 38404, 89609, 11955, 68449, 61118, 38700, 119692, 67315, 60530, 114881, 43341, 132847, 20541, 35107, 73794, 2104, 13555, 131836, 103917, 71994, 68987, 1071, 23911, 65121, 80932, 33812, 80574, 104399, 26767, 119464, 5594, 31013, 33313, 34884, 113788, 109697, 44977, 67386, 122572, 73492, 21138, 77756, 130031, 62291, 5622, 9935, 122537, 6401, 67824, 102599, 9067, 6837, 125223, 58930, 65304, 68635, 30722, 13119, 115774, 16, 34676, 89820, 87855, 78560, 88754, 14883, 21870, 57411, 131221, 62648, 68585, 87128, 62354, 38702, 74100, 127364, 71823, 15021, 123792, 113969, 14240, 116935, 57482, 38664, 1891, 2322, 42423, 67529, 122523, 40849, 89099, 89178, 59475, 130968, 48469, 5608, 70710, 115494, 16329, 54020, 113661, 11945, 70691, 86082, 61166, 74723, 87837, 54267, 108730, 72526, 68289, 29110, 109493, 90075, 20266, 134342, 7073, 135849, 37704, 38666, 100976, 2287, 119461, 22119, 24276, 37969, 38521, 33867, 136039, 14227, 134288, 103571, 103389, 129400, 126618, 27487, 134186, 11429, 69088, 6715, 40590, 125583, 15689, 116086, 69135, 2320, 25523, 27887, 43325, 372, 88718, 57771, 6607, 102358, 1116, 77893, 67364, 90557, 123552, 78420, 60573, 65113, 37951, 13150, 21329, 110332, 10953, 26137, 40868, 114759, 62014, 109754, 33487, 86075, 16182, 68196, 34432, 38676, 25383, 73858, 61988, 87847, 118586, 37502, 118605, 102727, 124749, 58776, 29256, 63803, 104517, 132775, 11963, 20396, 72536, 68973, 125712, 118423, 78880, 58556, 14553, 57355, 73832, 60565, 37982, 43343, 45944, 42314, 46671, 29248, 33226, 29260, 55279, 8965, 125749, 109749, 78228, 125741, 42669, 53511, 30900, 358, 109461, 117553, 49813, 77436, 121952, 132960, 71281, 57295, 57517, 44692, 33386, 108172, 5610, 33963, 103057, 133351, 67346, 68493, 46825, 26876, 131390, 34509, 23032, 87813, 64404, 123104, 15452, 74574, 27803, 64354, 110586, 65109, 68447, 65555, 35744, 57353, 68436, 90545, 67857, 119857, 89621, 55796, 55301, 10310, 15999, 64530, 6222, 121992, 29855, 124751, 63119, 25752, 5489, 114244, 77916, 57929, 27979, 78482, 9923, 78428, 103775, 130137, 72503, 12454, 1211, 16576, 124550, 61259, 104326, 62012, 71805, 57183, 44307, 50162, 112684, 42234, 21150, 104397, 68279, 54005, 57279, 35367, 116927, 46641, 12498, 40841, 64136, 125253, 41932, 56616, 43005, 134584, 22784, 136245, 53785, 61855, 122006, 12133, 113640, 9055, 42375, 29849, 46179, 44807, 6266, 56625, 16084, 102781, 27063, 12031, 89637, 113841, 63095, 109903, 55760, 20193, 33895, 70844, 74122, 15058, 109861, 52221, 62698, 5656, 56655, 13066, 131043, 116537, 43783, 129443, 64712, 90058, 73695, 61768, 118388, 131097, 29851, 113628, 14918, 59119, 64497, 111094, 22623, 125705, 9065, 51127, 73224, 55380, 65296, 20641, 43421, 34343, 38428, 5315, 50285, 16122, 38569, 10252, 6563, 61567, 43062, 20419, 123249, 33427, 60504, 85290, 46870, 108131, 24270, 61602, 131056, 115393, 56634, 104101, 85402, 33382, 119387, 60690, 64563, 110586, 26063, 119638, 45315, 134590, 57531, 26917, 22559, 100983, 136084, 89235, 90071, 104501, 44733, 26035, 22683, 134879, 89158, 85356, 134516, 118578, 26492, 103193, 68969, 29120, 37910, 69012, 124693, 62620, 102881, 14263, 8856, 77663, 57342, 26944, 20392, 105793, 132845, 85408, 116531, 46866, 27591, 5352, 35717, 6902, 132839, 39042, 121975, 37820, 49720, 20411, 115817, 57406, 100946, 38384, 74721, 103351, 65036, 85367, 57480, 122342, 103690, 14624, 60680, 67699, 55422, 43128, 30648, 72332, 116279, 135839, 6527, 22122, 102291, 101032, 43173, 34880, 58605, 70765, 74559, 29246, 39239, 79018, 28234, 67388, 117544, 74486, 72122, 74578, 44325, 10885, 114958, 43696, 37644, 44257, 22378, 70909, 13198, 450, 42948, 8814, 61171, 33764, 58954, 46219, 71493, 74726, 54441, 130033, 15514, 108109, 102746, 129422, 61516, 65064, 374, 78603, 11197, 45122, 110373, 28751, 61043, 27809, 134860, 43952, 33347, 115505, 45052, 123869, 35460, 86681, 135920, 37730, 80269, 115488, 63626, 49741, 42123, 44651, 116357, 50211, 6963, 25379, 35217, 25915, 61755, 81941, 132605, 58394, 58591, 25525, 45988, 130976, 123224, 62743, 118263, 62743, 109699, 55844, 122667, 62686, 5522, 136217, 12450, 16325, 90201, 12264, 65271, 104556, 30072, 21406, 22493, 55989, 116543, 42596, 130105, 116978, 56660, 8848, 131076, 35860, 70642, 131026, 63768, 108118, 25596, 32757, 104332, 130079, 77930, 31135, 103315, 119433, 67697, 26804, 112853, 26775, 67570, 48177, 24342, 122679, 27360, 15313, 7034, 43962, 122335, 34573, 134198, 62016, 22474, 111083, 63626, 104440, 87321, 15016, 113068, 4891, 30375, 73820, 74124, 20201, 112699, 61482, 15952, 39210, 77922, 88638, 34545, 11948, 102670, 119573, 134933, 12313, 33879, 133274, 122372, 114531, 116533, 58398, 45954, 29938, 44323, 25393, 35618, 11918, 15029, 37534, 13213, 32773, 42467, 44021, 42497, 60737, 14250, 74600, 42329, 89537, 71817, 103114, 123258, 43292, 28596, 81176, 109565, 60680, 60680, 12665, 45838, 90570, 29118, 79700, 16088, 58527, 72166, 14421, 103320, 38168, 45844, 112676, 57773, 57773, 1877, 12050, 128039, 16427, 27860, 72840, 5763, 114614, 70694, 56832, 123342, 5535, 8979, 68234, 8930, 136049, 39474, 40456, 43949, 5650, 13138, 44771, 131725, 88751, 10936, 33816, 13538, 110590, 102643, 15292, 67763, 43003, 127341, 44812, 39076, 61009, 25438, 115736, 42663, 62700, 28478, 123128, 33711, 88007, 88026, 63798, 103842, 25417, 51140, 131388, 28197, 125667, 81935, 114479, 89644, 73752, 81105, 14994, 43137, 111178, 29999, 122328, 119575, 23773, 27189, 102681, 29244, 8897, 58468, 35371, 12493, 135066, 37728, 33876, 20207, 124825, 113116, 89544, 134493, 60684, 28279, 86681, 102366, 20592, 8879, 6641, 116284, 90570, 38960, 90326, 23934, 33023, 475, 42608, 124661, 42023, 87003, 114328, 43683, 8606, 123725, 26460, 115378, 60686, 33916, 54421, 130261, 14916, 60777, 79753, 118472, 122570, 44926, 118453, 125559, 87140, 115391, 67681, 14307, 62684, 57367, 60694, 34176, 54014, 46216, 103693, 131542, 8913, 108535, 10250, 46212, 68327, 60037, 68429, 16635, 35856, 134308, 57402, 109204, 11077, 123605, 55683, 113632, 90622, 59029, 66402, 78537, 127374, 2328, 67366, 64769, 86072, 37672, 55015, 113980, 125050, 135998, 57492, 46595, 86930, 79720, 58831, 48211, 89348, 129956, 34456, 68318, 28195, 136024, 124740, 44966, 35754, 8866, 125210, 109758, 81978, 12608, 20900, 133558, 71984, 37686, 20328, 67816, 56891, 58797, 13211, 50329, 5313, 81058, 132924, 44311, 30485, 64567, 109208, 30925, 103567, 85220, 102691, 116347, 78872, 133343, 64528, 103429, 20528, 73882, 86994, 131004, 105799, 43339, 42021, 20449, 21098, 15470, 115995, 77385, 42070, 8463, 74719, 29242, 72878, 65505, 119383, 62392, 55022, 80635, 8808, 35756, 14523, 74622, 133510, 33459, 16066, 73228, 30751, 44309, 42999, 103129, 66426, 28063, 57340, 13188, 72321, 62942, 32802, 9025, 81928, 114040, 116175, 6152, 27765, 103458, 119425, 89182, 37532, 9950, 11930, 132819, 12610, 45963, 123124, 87010, 25989, 123539, 64286, 13138, 129340, 58950, 62668, 62270, 33914, 121918, 25940, 72627, 134499, 43423, 49912, 27181, 44114, 58192, 115746, 24337, 56991, 104438, 12391, 39076, 23915, 7705, 130921, 8973, 69316, 61162, 63461, 109498, 69056, 122736, 7026, 135017, 123117, 90577, 67400, 42400, 136243, 103357, 111202, 123473, 119616, 62584, 45117, 53612, 6581, 30395, 134473, 34108, 70913, 5917, 127286, 35833, 20312, 60548, 64288, 5923, 74688, 55414, 77816, 104459, 5932, 59156, 61253, 15064, 60705, 55952, 14521, 81060, 81050, 124966, 68971, 57374, 11464, 102356, 114818, 121852, 123344, 109293, 125839, 101030, 67579, 14342, 131158, 65527, 49914, 77779, 87314, 62316, 68771, 134175, 27582, 132491, 110391, 70828, 35752, 30615, 38482, 25750, 8662, 52543, 113376, 123565, 14909, 5751, 71807, 108586, 23923, 52739, 72337, 7352, 21794, 58550, 46153, 49747, 109394, 69028, 81020, 126555, 43093, 109599, 55779, 30315, 16574, 34878, 53971, 28037, 86070, 74438, 131493, 16209, 28436, 64359, 125575, 14330, 110524, 66258, 21523, 61907, 26135, 14479, 60081, 64507, 56638, 28238, 77181, 87361, 39494, 46656, 55244, 74564, 38894, 77663, 113626, 125166, 43124, 42630, 9895, 40896, 57775, 59442, 112737, 113302, 37646, 11930, 86697, 73779, 60793, 38459, 116949, 5480, 110900, 13152, 28113, 33431, 81115, 34578, 90677, 108811, 65085, 12370, 53552, 132964, 27892, 2165, 122380, 123770, 136212, 123752, 55733, 42373, 54443, 65109, 80275, 27736, 86990, 30902, 33203, 35397, 42053, 126421, 64294, 27235, 60771, 122000, 6243, 74463, 104487, 7695, 28252, 108737, 33365, 122601, 5209, 60542, 74356, 34425, 33857, 63427, 78403, 126417, 79747, 84812, 64278, 122051, 45836, 114481, 64479, 119459, 12792, 108586, 27077, 67380, 38506, 116336, 134393, 16179, 67988, 15942, 80942, 132855, 26011, 13146, 27579, 63401, 63401, 73239, 73735, 15671, 14287, 43010, 125372, 112714, 87777, 6245, 37919, 38730, 50231, 109863, 58421, 64774, 103565, 45046, 55156, 16078, 110596, 68114, 14291, 28228, 14532, 56577, 39089, 77244, 70720, 8435, 123759, 131618, 23923, 100983, 123759, 6183, 6183, 129873, 67560, 135768, 35350, 80240, 21959, 43631, 27449, 25896, 2304, 22334, 69320, 64780, 25545, 6827, 108174, 33804, 133636, 5305, 123198, 87160, 20637, 104014, 35403, 78599, 82021, 63081, 27033, 55670, 116302, 45063, 27964, 117525, 51129, 52687, 8854, 71992, 59497, 28041, 89333, 130075, 116937, 110395, 55281, 10997, 28430, 16027, 29893, 122508, 6349, 133647, 57328, 60733, 21671, 78193, 53529, 74133, 104202, 20423, 35207, 7725, 113849, 109098, 68299, 62295, 80590, 64739, 131597, 57773, 134471, 102711, 77438, 1513, 114875, 123803, 25533, 123759, 86945, 124843, 114529, 1544, 30537, 21654, 50340, 7009, 5996, 5555, 129331, 12448, 86311, 24124, 85451, 34569, 30916, 61702, 63208, 25570, 55260, 25461, 68850, 102924, 16651, 39083, 115999, 31008, 133692, 116320, 13907, 60029, 32776, 134451, 34890, 6760, 70931, 107475, 90138, 131072, 90051, 16311, 79736, 38529, 44439, 28594, 131234, 103435, 68789, 114885, 27085, 80424, 40342, 40876, 124823, 116342, 109255, 102739, 68800, 74235, 16203, 38539, 46032, 78496, 117582, 68959, 21886, 37275, 23964, 37231, 54473, 88019, 123737, 32994, 111450, 72664, 20413, 125841, 84854, 115380, 58543, 125175, 35199, 13129, 5585, 72260, 89630, 72337, 58045, 133583, 42988, 11763, 133545, 64581, 52750, 129854, 113965, 115782, 113986, 104082, 12410, 60448, 115786, 69157, 40658, 74245, 53969, 38671, 35213, 121938, 13894, 129856, 68587, 15715, 52216, 135072, 115718, 70869, 26016, 58950, 89535, 124657, 71567, 135004, 25561, 49276, 24306, 7352, 21794, 12419, 115387, 82076, 61245, 108220, 86283, 64716, 59108, 14922, 14248, 33939, 38416, 38693, 65218, 117630, 27669, 34658, 45917, 1511, 77822, 130847, 40195, 57376, 27873, 65363, 37648, 78714, 25458, 102347, 72510, 53559, 110993, 21974, 7699, 131721, 68884, 16346, 5543, 130917, 109762, 63465, 25675, 114948, 124887, 109443, 119221, 132913, 35723, 42935, 22185, 118411, 61510, 86996, 14957, 37881, 49695, 53860, 42640, 40622, 44769, 85252, 12428, 118554, 16334, 20645, 72785, 25980, 102353, 41876, 10966, 61862, 90647, 31158, 6659, 114473, 74354, 110978, 90620, 89967, 62318, 119696, 49755, 73607, 29941, 12322, 122140, 119618, 72339, 12505, 108794, 12042, 27537, 80230, 74545, 89067, 72089, 74373, 35192, 122470, 102385, 45747, 52585, 24321, 11980, 38468, 103766, 82001, 110213, 130959, 59378, 105777, 6744, 11936, 104036, 77380, 57924, 87823, 6910, 21325, 124786, 90087, 88763, 34153, 124556, 68750, 134593, 135903, 23050, 16565, 40629, 68322, 30882, 134936, 133353, 80999, 5346, 30776, 65581, 46829, 43920, 130070, 30330, 26264, 125026, 127372, 70903, 133586, 119872, 66316, 90044, 9948, 125370, 113433, 38775, 78468, 58561, 25282, 43163, 65834, 104119, 29143, 34452, 61794, 39251, 16927, 125944, 53571, 39255, 125946, 64741, 28487, 127885, 62379, 77227, 55735, 123194, 28013, 109229, 22201, 78603, 13359, 134241, 5602, 60085, 43274, 125030, 113280, 72163, 43457, 72633, 8475, 16019, 38461, 8486, 27884, 34114, 69068, 72668, 63758, 33814, 61504, 115405, 133560, 11433, 80981, 68637, 65277, 86777, 65090, 26149, 49842, 74149, 27719, 104105, 90049, 8924, 12124, 35122, 20630, 114517, 77005, 30655, 31131, 12600, 34642, 53818, 109248, 42465, 39463, 22994, 122516, 102637, 68308, 29982, 130933, 50595, 103097, 90218, 61035, 33319, 119741, 124806, 110536, 110305, 123772, 13064, 64526, 21136, 81089, 9877, 59160, 35393, 65123, 22594, 136154, 52592, 51160, 114662, 59170, 108179, 104491, 60172, 71932, 54146, 10399, 62024, 23938, 122358, 37235, 60781, 35870, 13062, 89989, 131369, 62034, 8488, 54008, 89825, 103555, 104428, 89642, 123446, 125529, 104493, 67540, 103071, 111389, 39233, 71275, 67861, 121969, 116098, 32753, 59041, 125683, 6164, 5357, 132835, 55268, 131413, 109218, 2225, 133487, 89203, 123383, 1933, 67542, 89993, 14905, 90333, 34465, 108086, 54376, 74102, 67330, 60779, 119431, 58812, 68504, 67808, 121954, 45972, 72253, 29206, 39221, 90298, 122586, 72128, 42101, 130053, 30313, 112859, 30621, 132489, 118601, 123487, 123547, 63039, 103449, 50203, 70789, 122047, 122485, 13317, 14513, 111429, 61544, 57959, 55028, 125082, 46162, 14515, 33869, 50565, 39253, 79003, 40460, 20539, 43074, 116925, 49893, 72343, 59992, 86760, 22846, 6179, 1942, 131507, 63443, 77996, 88585, 13800, 60703, 70911, 111465, 27820, 134233, 40580, 8926, 12266, 74692, 134196, 16124, 42130, 104411, 20191, 35176, 49340, 67344, 9933, 131499, 26806, 117592, 31125, 38493, 89626, 15500, 74454, 63412, 61594, 79727, 86796, 127775, 67350, 12745, 16070, 133611, 45870, 2118, 104318, 62544, 28440, 12740, 57258, 108765, 32755, 73255, 38873, 11716, 48179, 73771, 42617, 40344, 127777, 77889, 123561, 102375, 115815, 1122, 34615, 63764, 64258, 29865, 108135, 6264, 134373, 110294, 32905, 11037, 10264, 14885, 22627, 89678, 40908, 14369, 40174, 2306, 63819, 30644, 62606, 132958, 90153, 33407, 32850, 38925, 10266, 34950, 58595, 62307, 65216, 25732, 89960, 80983, 16578, 110209, 10923, 74182, 26810, 28008, 74705, 70712, 43427, 135039, 87447, 114601, 34942, 53990, 109253, 56987, 32672, 35731, 1485, 66517, 77326, 69418, 33037, 134497, 31147, 33518, 40645, 27882, 115376, 126593, 37268, 7022, 14242, 8756, 74551, 30064, 20272, 49701, 13809, 87773, 42417, 20226, 60004, 60561, 37726, 130974, 133607, 103177, 129950, 50215, 27164, 25946, 77928, 10972, 27981, 116304, 16199, 35638, 65743, 5934, 38877, 90001, 34888, 56621, 87357, 78866, 63416, 12491, 27822, 59086, 25568, 124989, 13802, 44914, 16025, 115766, 27238, 67818, 22172, 103369, 70661, 15703, 125676, 73700, 30052, 133246, 37917, 50705, 30323, 135805, 65539, 61000, 53625, 54251, 44108, 57365, 7581, 116332, 64434, 125669, 34448, 131160, 133501, 124565, 119411, 43748, 88768, 42425, 16355, 110353, 77093, 30494, 22132, 114607, 35727, 115503, 46729, 35379, 133333, 5576, 21953, 134601, 16072, 7007, 63111, 84796, 45808, 45881, 131856, 14517, 124738, 49916, 33903, 113954, 131487, 20576, 129984, 131016, 60417, 27677, 37638, 62655, 87479, 52535, 80228, 61075, 117580, 131090, 26123, 125636, 46745, 68848, 53807, 33168, 43115, 46600, 1, 85234, 78029, 42045, 21132, 6711, 6878, 123239, 26430, 7516, 24352, 109616, 58935, 130908, 87376, 11456, 81834, 12751, 109739, 49887, 110564, 37609, 59489, 86064, 10762, 78554, 55862, 26277, 103960, 122500, 89517, 64178, 105797, 77442, 72415, 16923, 132894, 70814, 87351, 122734, 42230, 60168, 35854, 42859, 129430, 109191, 11941, 57185, 74428, 122131, 124672, 126430, 29821, 131058, 35342, 102910, 46778, 82014, 21173, 130961, 53554, 74075, 110280, 88667, 55385, 10957, 101032, 12297, 22604, 85246, 132853, 111080, 59080, 23780, 130919, 84846, 52612, 108761, 71098, 63105, 104058, 6144, 54276, 6801, 7707, 74570, 80977, 63445, 8636, 114765, 109704, 86992, 103073, 133605, 44682, 20341, 69064, 60309, 73818, 78965, 135938, 57299, 103669, 1944, 88770, 21169, 74067, 64522, 80283, 55030, 48460, 45967, 70973, 52202, 25948, 35312, 37694, 81052, 63089, 25541, 118390, 37988, 44950, 129889, 42232, 134377, 132829, 35835, 136540, 72404, 8500, 27358, 49873, 59143, 110980, 115697, 122740, 132312, 20447, 119651, 71540, 113617, 8570, 60437, 16921, 12988, 52251, 77229, 126518, 61900, 86720, 23898, 121924, 29116, 58238, 67683, 53588, 123149, 24316, 43690, 130952, 32825, 122609, 60092, 7709, 72783, 115731, 30895, 115335, 115792, 48596, 49706, 89241, 79801, 57767, 103157, 30906, 131045, 1151, 104444, 12270, 130301, 130011, 100992, 11005, 132480, 29108, 89873, 80187, 1213, 29108, 85267, 27041, 53582, 26911, 132227, 42082, 26865, 42072, 46796, 69422, 34567, 53971, 6525, 85377, 29106, 104430, 38412, 70756, 27717, 109181, 74028, 131376, 65046, 28046, 21660, 30475, 15056, 11055, 108804, 37496, 77046, 39004, 61992, 23784, 63642, 33771, 6273, 87481, 108186, 134510, 68773, 25415, 60767, 31121, 16186, 134331, 118564, 57488, 1517, 49260, 38669, 63389, 30812, 52703, 34296, 104339, 10887, 123140, 30325, 78992, 114660, 80238, 109189, 121846, 71656, 29264, 14311, 108817, 125170, 113116, 125324, 34644, 104048, 58842, 135062, 130388, 25389, 76997, 35033, 104454, 10214, 16400, 46039, 133197, 52731, 51175, 131558, 46039, 108181, 1973, 6330, 22470, 33907, 13055, 26919, 123497, 133572, 119649, 68066, 24350, 68271, 123162, 81851, 9082, 27533, 37215, 71512, 33435, 28722, 81107, 73634, 70818, 14348, 70659, 67328, 28701, 33205, 12765, 52545, 8885, 113729, 43035, 30508, 42973, 88659, 70966, 126557, 85242, 44729, 86277, 22634, 103102, 64550, 77786, 53635, 134477, 2120, 43905, 108143, 111425, 103585, 55262, 104322, 132140, 5491, 6154, 48171, 8816, 40866, 89671, 50613, 51115, 87475, 113437, 88011, 77798, 33378, 64477, 40870, 42429, 114483, 103304, 43459, 32751, 128029, 72836, 131415, 103962, 87343, 40464, 39472, 46819, 122008, 111144, 136236, 109741, 54263, 103340, 117557, 81001, 43698, 15681, 37938, 22826, 71958, 135056, 13140, 16871, 11934, 28450, 104434, 124767, 30884, 59154, 86658, 41949, 68796, 66422, 61164, 34925, 44102, 81910, 72666, 130386, 33707, 13541, 84830, 22176, 9927, 73464, 108141, 30994, 67370, 103478, 124802, 72855, 119227, 80501, 104165, 52192, 12503, 104564, 46222, 29228, 61122, 124773, 134865, 64579, 26777, 33339, 57503, 61788, 74166, 111003, 134867, 26031, 125221, 84901, 32969, 104352, 72501, 73609, 130319, 115729, 87331, 125833, 65754, 125634, 26480, 124784, 114357, 10483, 132823, 62582, 116330, 58855, 116021, 55287, 46236, 77794, 102675, 56979, 60544, 45111, 129335, 20620, 108809, 81113, 38162, 136564, 65081, 81920, 54012, 114485, 40170, 7510, 9891, 90155, 22146, 126401, 6740, 125328, 126559, 126606, 136041, 37915, 133007, 67995, 62289, 122345, 65177, 14321, 78462, 103408, 10859, 62672, 44993, 77788, 125183, 59121, 86269, 28585, 63835, 116204, 57404, 15011, 85263, 122547, 131154, 119661, 77014, 130323, 22001, 53994, 48750, 37945, 27845, 12117, 1899, 29224, 103777, 49840, 42671, 12767, 72109, 124616, 58780, 42016, 85218, 61557, 34010, 20187, 77897, 70748, 122653, 112828, 82078, 88724, 44981, 34667, 40334, 16201, 6678, 5551, 42276, 100968, 21372, 1539, 62650, 130087, 42228, 38426, 135833, 113286, 25424, 30795, 46697, 43511, 89097, 133092, 109481, 111427, 88009, 133499, 121916, 114019, 14964, 29990, 32975, 103472, 59495, 7727, 85906, 68764, 59365, 80609, 16931, 119266, 72126, 7378, 45936, 124681, 109377, 73842, 37618, 123408, 118433, 57519, 124926, 14390, 109909, 114944, 73862, 113439, 37494, 21859, 10857, 109612, 28116, 16937, 55775, 62940, 109269, 46835, 46181, 129937, 119253, 44688, 123499, 113619, 123516, 116931, 104489, 118404, 135792, 58013, 129871, 77387, 37258, 88013, 77843, 103956, 33965, 61147, 38532, 23036, 135531, 89969, 13178, 12293, 34627, 109417, 87016, 123392, 109402, 35611, 12667, 103186, 48165, 125236, 6172, 135858, 64499, 7531, 34693, 65729, 30138, 68623, 125185, 86045, 56981, 29226, 43730, 34012, 90212, 102865, 122333, 60415, 6980, 109853, 89521, 58507, 38116, 86769, 366, 33027, 113085, 26037, 67814, 87853, 123462, 132797, 28481, 8498, 123448, 59102, 133684, 134365, 64577, 38653, 39062, 124601, 58572, 109834, 64978, 24327, 30339, 43432, 48455, 113642, 5239, 132881, 109400, 66441, 62837, 60699, 63809, 79001, 22150, 48196, 86089, 40906, 60464, 72421, 123501, 32848, 1241, 42490, 116353, 39470, 54249, 111121, 6587, 49918, 125041, 29088, 9893, 44437, 50044, 33419, 26893, 28422, 122362, 30471, 60435, 77175, 129600, 78478, 5958, 37161, 34419, 30763, 44736, 113790, 39468, 10027, 27367, 86275, 84774, 119582, 7001, 113636, 5663, 42855, 38430, 134293, 1501, 23907, 14285, 27818, 20898, 77018, 72427, 122631, 5665, 44971, 104360, 22089, 38181, 103117, 62692, 42261, 25936, 12441, 59464, 42604, 63020, 134884, 44793, 37978, 77426, 8850, 110902, 5743, 26202, 6876, 77796, 130895, 21914, 34016, 118591, 55412, 118451, 37170, 65202, 43042, 9882, 40454, 62565, 56930, 50099, 131010, 55013, 55254, 43015, 60035, 86790, 118461, 73760, 57527, 122129, 73503, 44958, 129301, 64176, 113453, 20310, 129912, 14402, 44721, 90307, 123229, 26432, 5243, 30728, 35489, 59266, 45071, 58198, 87319, 42074, 72517, 14452, 38398, 34699, 77432, 62320, 60079, 134871, 100979, 81042, 5767, 108755, 129590, 69074, 26204, 72463, 123406, 67585, 53848, 131822, 69060, 55266, 22074, 62936, 113110, 115790, 21183, 60948, 45942, 109349, 102610, 25911, 103688, 103958, 12311, 28090, 35646, 45965, 126434, 22017, 116953, 32816, 14485, 133005, 50611, 30753, 46065, 113435, 44112, 34116, 38357, 49334, 90594, 8442, 77322, 78572, 124916, 134920, 33011, 53488, 72130, 109185, 14966, 10934, 115607, 32867, 6705, 29992, 119861, 34106, 109905, 15023, 5493, 54221, 44995, 87477, 124634, 6513, 103063, 12474, 40438, 40898, 43940, 125821, 40874, 46604, 123214, 25397, 13903, 12594, 42469, 74572, 119626, 45287, 104191, 109843, 90656, 6224, 121971, 35157, 38921, 77001, 103921, 15723, 88636, 14511, 119429, 134572, 40172, 59094, 67668, 60942, 29232, 135794, 35762, 65848, 44941, 10603, 21916, 43102, 25795, 66529, 9084, 25953, 21888, 114475, 102875, 6341, 123245, 134182, 12326, 89611, 43918, 78590, 133281, 46788, 44934, 124683, 11431, 61940, 86047, 44975, 58346, 126597, 25673, 22548, 64292, 44657, 113821, 114954, 49731, 77020, 104328, 20274, 104056, 122474, 30144, 110890, 33546, 65495, 43681, 30822, 11334, 35858, 11030, 103155, 63421, 133016, 132866, 124554, 23921, 129602, 85825, 32804, 25195, 50615, 132936, 60506, 6392, 5303, 27828, 118365, 38160, 122584, 46725, 133662, 53957, 87150, 44997, 35764, 14622, 2275, 64365, 34870, 49787, 28118, 27639, 38547, 60550, 121848, 115339, 72139, 81933, 43688, 63628, 122459, 102737, 62283, 65529, 119419, 11990, 125028, 122553, 55686, 81922, 77048, 2326, 59604, 77895, 6214, 12753, 30914, 115670, 129432, 121914, 6615, 89249, 55270, 135504, 28573, 100930, 12033, 58020, 58525, 59491, 30136, 64172, 134268, 23765, 55967, 39064, 136019, 116220, 77400, 58961, 42861, 119259, 44774, 132783, 131383, 49947, 110393, 25772, 42680, 102927, 53563, 44313, 55660, 30399, 34383, 34008, 136249, 133556, 37720, 103575, 67732, 61637, 125692, 44675, 13881, 22182, 42919, 34956, 13252, 57163, 22685, 108125, 8624, 67797, 40611, 48167, 133627, 88901, 72505, 136045, 135525, 61766, 111194, 49294, 6821, 113055, 11976, 43287, 132859, 20264, 5590, 57273, 125202, 63610, 21957, 35856, 58698, 102612, 24323, 81044, 30730, 53963, 103374, 46800, 42027, 41761, 74707, 129596, 103371, 46817, 89186, 134391, 114141, 122742, 6510, 38549, 7060, 10220, 103153, 13350, 30824, 55377, 33284, 12780, 16873, 62972, 5259, 90224, 80418, 89154, 111096, 122331, 116325, 71908, 14927, 63071, 58822, 1254, 53483, 12128, 7085, 37668, 33891, 12343, 74026, 111087, 7028, 22003, 90077, 32846, 68425, 126520, 57344, 104442, 109509, 73461, 27438, 101034, 1503, 32669, 135825, 48231, 78868, 50571, 60510, 50097, 77912, 134400, 103551, 6323, 28052, 29262, 112855, 114489, 116083, 54400, 121873, 126520, 57344, 131018, 86783, 116017, 29945, 34396, 111078, 118267, 116239, 104442, 29262, 46701, 130881, 31151, 58348, 119564, 69090, 28099, 87136, 131018, 86783, 6347, 64753, 129453, 23784, 102372, 24279, 49697, 123807, 33371, 64418, 113381, 125277, 16357, 5604, 56632, 58541, 130099, 130099, 104006, 45963, 66456, 14394, 115776, 118658, 63459, 35143, 58952, 89341, 136000, 78981, 5545, 103431, 61700, 30946, 114023, 20586, 37490, 69096, 136011, 131873, 115599, 102362, 40656, 33810, 115780, 65094, 8762, 67745, 56975, 114477, 55154, 9031, 81995, 15311, 72087, 27663, 2109, 77171, 64298, 61931, 77829, 50221, 125017, 73264, 72777, 109845, 64140, 22328, 104175, 116286, 78539, 89991, 67859, 42606, 15323, 35729, 35348, 467, 134485, 85232, 8810, 12736, 5737, 28714, 58869, 70758, 132596, 61924, 6316, 54219, 131006, 109483, 109724, 40340, 109550, 15457, 125173, 85823, 73605, 81122, 55960, 7108, 43449, 73161, 20301, 49739, 81164, 77914, 85957, 25993, 15721, 12521, 22196, 133574, 35131, 12489, 61525, 22210, 27681, 125825, 132779, 16463, 73261, 31129, 42635, 34438, 74320, 32986, 20443, 21102, 66515, 116338, 32986, 130879, 2233, 22009, 109235, 26784, 27812, 42128, 14337, 121871, 6128, 32674, 12272, 65083, 34918, 48140, 88627, 35146, 8959, 65068, 64878, 40713, 42287, 42916, 73868, 16110, 43700, 43996, 68946, 134447, 13000, 6410, 113338, 78682, 60937, 113078, 113292, 89169, 20425, 58503, 25987, 43909, 10879, 65115, 132491, 87779, 26219, 67775, 29869, 85959, 72111, 130957, 78585, 102877, 25971, 26796, 12675, 104130, 89128, 70919, 116295, 45044, 63618, 37401, 113743, 5557, 29252, 40662, 43942, 133195, 110957, 45946, 64254, 44684, 127611, 72863, 5516, 48160, 133080, 110361, 133489, 134918, 39213, 43633, 71576, 104099, 15687, 89132, 72136, 102731, 35779, 89814, 35454, 49763, 33893, 58516, 64174, 22648, 124817, 37589, 31143, 124804, 22208, 105807, 46739, 68860, 103598, 40634, 81849, 78486, 52737, 5617, 66244, 71279, 21932, 64193, 52190, 28734, 103387, 68453, 135766, 38422, 90612, 63376, 30534, 64398, 125019, 65467, 12430, 32961, 117582, 90220, 68798, 67402, 80185, 12365, 59381, 59457, 11996, 103470, 84928, 33504, 8890, 30880, 84832, 7735, 1907, 108757, 11961, 111092, 123518, 70915, 21874, 59371, 35746, 6794, 129309, 52630, 42085, 86767, 62384, 5553, 123211, 112688, 109353, 38911, 119213, 12550, 132217, 43436, 113536, 37715, 114814, 30341, 74233, 125728, 108555, 10039, 16654, 14525, 67820, 27053, 31153, 134730, 22662, 10288, 134270, 25428, 64307, 89337, 129322, 70774, 136185, 63099, 131213, 14335, 30368, 25928, 46146, 58877, 12462, 123691, 61929, 29924, 102916, 73777, 86068, 62363, 57948, 124630, 77044, 77029, 52253, 67873, 34458, 132938, 81900, 26800, 63618, 8953, 6523, 26597, 61059, 109491, 60957, 22050, 26400, 50607, 110936, 103721, 129994, 34921, 34921, 113967, 46643, 44406, 77328, 27851, 133475, 34872, 27549, 20516, 78196, 30529, 13216, 87998, 14289, 131727, 38730, 57505, 21980, 108145, 43493, 40912, 128037, 62657, 33211, 58038, 45041, 118227, 37189, 33836, 32812, 114612, 34652, 129439, 2300, 12669, 121984, 103191, 38156, 74211, 109301, 103973, 78878, 12992, 77814, 89867, 49914, 61527, 76989, 55982, 116327, 8776, 13551, 78407, 73111, 113809, 110307, 6268, 74447, 22832, 37165, 45088, 30910, 113070, 104356, 116036, 68798, 64197, 55289, 34695, 43627, 135540, 6569, 114763, 118397, 74729, 134457, 102702, 31149, 100998, 114763, 32771, 85294, 20280, 37732, 123201, 8477, 56618, 70837, 25549, 20428, 133345, 33405, 53498, 28105, 27875, 20628, 125246, 57533, 66242, 9086, 57474, 46012, 35624, 13868, 41897, 70704, 131533, 34158, 5334, 113867, 131187, 14862, 2091, 34972, 67678, 62379, 85426, 113739, 10964, 21925, 133256, 109901, 133645, 4960, 27568, 103595, 55424, 105809, 42983, 25581, 42836, 60743, 113958, 136260, 116955, 45838, 14253, 45838, 111157, 78988, 34349, 48475, 20262, 35409, 136022, 25734, 8827, 68281, 43276, 30465, 40891, 52265, 6976, 103381, 45842, 73486, 22850, 37932, 58838, 10618, 64706, 135817, 12402, 119647, 58771, 57920, 55026, 46794, 130995, 8564, 55972, 26440, 109589, 59272, 77016, 12542, 130923, 8496, 41770, 11924, 113873, 55418, 11974, 72791, 62835, 122625, 87771, 26033, 130897, 121950, 50164, 60750, 37640, 28434, 125716, 109432, 113451, 88897, 35197, 8764, 60011, 13498, 26499, 116376, 129867, 129588, 102748, 22229, 89525, 88899, 114246, 11427, 42454, 68991, 87857, 46675, 27185, 65040, 14323, 39203, 15509, 12309, 16059, 88895, 8895, 10921, 24264, 55295, 104461, 38166, 108763, 26859, 5245, 115389, 63807, 115429, 72433, 11093, 11071, 61002, 117660, 65263, 43818, 58353, 108849, 132146, 89143, 136191, 81168, 30742, 61015, 33282, 129299, 15719, 124856, 73836, 88823, 62301, 42615, 5365, 90110, 103447, 90324, 111491, 46183, 122555, 108570, 42226, 45048, 127319, 78414, 50327, 26194, 67302, 44956, 20209, 8963, 43945, 80603, 38846, 24266, 22117, 27577, 90193, 122142, 64575, 2136, 90073, 26466, 116173, 104054, 28469, 124666, 20904, 42427, 22072, 10254, 122525, 77223, 12437, 53637, 40184, 103361, 35325, 58018, 33773, 131152, 53534, 20320, 122533, 34417, 108572, 87345, 67850, 118393, 45846, 113282, 60731, 121959, 89655, 6865, 38504, 125056, 61263, 2294, 68794, 71803, 125827, 50359, 121994, 58415, 10850, 11487, 114042, 52685, 39002, 29094, 21861, 30718, 9020, 35876, 89080, 12456, 7354, 37666, 16177, 14475, 40452, 50601, 30904, 64545, 55400, 74465, 86305, 55884, 136187, 46837, 29881, 108622, 80586, 22415, 13182, 27957, 58413, 53602, 77035, 5500, 45078, 43947, 59440, 63770, 33304, 45057, 6220, 21964, 129377, 133649, 11063, 104463, 49708, 5600, 104324, 16086, 68275, 67756, 51131, 12452, 20896, 90565, 59033, 122506, 89812, 13513, 21817, 85951, 29128, 116208, 61774, 73163, 5560, 60692, 25543, 122755, 16001, 88594, 109423, 64880, 15050, 113956, 119865, 72425, 78492, 61737, 54447, 123850, 123352, 108568, 72499, 5487, 104469, 26192, 68596, 68785, 125033, 50599, 65800, 115827, 64372, 46043, 114525, 13407, 133473, 44684, 25928, 58877, 43694, 5998, 136037, 74237, 123266, 26878, 73226, 55239, 130935, 58357, 13385, 114362, 10892, 127062, 20569, 13796, 135026, 55839, 28247, 87164, 60150, 57378, 26938, 134297, 69139, 44743, 131023, 123761, 74555, 78574, 11562, 115809, 116454, 10244, 113418, 62563, 23958, 12445, 70760, 74362, 82016, 125198, 30808, 12448, 77353, 13407, 62356, 43992, 43740, 115549, 129592, 135521, 7750, 64541, 5372, 28256, 62862, 28741, 73824, 21152, 76995, 70706, 72082, 5769, 115412, 58906, 1237, 27051, 102779, 87840, 102719, 46897, 90011, 116012, 8824, 108733, 43161, 49723, 111421, 61512, 28063, 25669, 133447, 115707, 123334, 45080, 58326, 72461, 132849, 129926, 35839, 115420, 89350, 135946, 129926, 78211, 104403, 58419, 71930, 109562, 53809, 15996, 62381, 12330, 34541, 64421, 102913, 129967, 25962, 20318, 16378, 38571, 65111, 14, 100960, 42105, 113407, 86695, 46598, 129426, 9101, 33883, 125581, 13381, 1059, 109388, 8448, 25781, 117531, 43778, 44952, 111393, 5374, 54231, 11332, 111471, 58793, 103443, 77324, 70917, 80478, 111385, 34460, 5096, 27080, 67332, 29141, 135896, 110364, 8883, 28712, 30919, 33958, 80947, 20624, 108781, 58786, 56983, 43055, 22059, 15025, 89357, 57292, 130991, 90653, 13192, 74196, 77347, 55964, 114797, 58006, 7527, 115609, 68415, 29136, 74311, 134327, 122595, 25598, 90658, 2111, 57248, 122676, 68390, 127606, 116941, 11574, 23761, 22208, 32810, 11976, 108740, 82030, 119257, 78016, 43901, 134188, 27968, 49791, 55505, 81842, 35634, 44938, 113384, 88729, 38158, 55831, 130910, 46906, 57310, 90089, 28010, 61634, 90567, 73389, 59359, 65782, 84780, 127601, 71289, 108094, 55220, 62144, 69296, 28462, 10938, 122635, 26291, 5964, 46058, 113706, 116313, 6870, 27562, 42892, 74709, 115486, 8578, 14959, 113794, 88854, 110531, 52245, 5263, 33897, 133460, 45810, 90114, 25442, 11475, 52245, 78864, 53547, 50057, 49759, 115993, 133214, 62586, 25497, 116545, 123108, 21649, 125022, 25944, 57275, 55491, 133186, 5631, 26595, 57970, 133398, 122562, 133398, 89834, 50076, 60170, 38424, 25603, 11948, 89201, 11336, 136165, 89995, 108563, 108222, 113304, 82005, 72423, 114935, 46151, 33987, 78534, 61026, 63113, 110932, 58496, 119409, 42306, 4934, 103335, 57571, 100953, 1541, 6995, 48145, 100974, 57319, 15041, 66519, 46606, 109379, 118457, 35748, 61851, 31019, 67415, 33347, 33704, 38944, 50166, 6345, 90019, 54016, 5065, 61578, 60473, 2087, 58202, 29867, 11724, 25381, 57248, 68390, 136197, 38158, 49759, 7238, 60039, 136197, 11061, 33043, 32802, 26386, 33176, 103553, 86309, 4942, 133526, 6132, 44703, 21982, 38558, 52633, 61257, 125492, 109578, 52709, 26820, 133083, 88772, 27067, 103934, 26765, 113391, 60162, 60164, 129436, 61, 130383, 45838, 56893, 62674, 124792, 42421, 110923, 89962, 49767, 28215, 20322, 15319, 103591, 109346, 27643, 50103, 52642, 5614, 39044, 80193, 48752, 114232, 123403, 113649, 38418, 46889, 14875, 72005, 88015, 65119, 102785, 69032, 26501, 35444, 87355, 123251, 65173, 104372, 6680, 27994, 126371, 46684, 42333, 26279, 13207, 34944, 57769, 111198, 31011, 13811, 118259, 102601, 20469, 42955, 85428, 57501, 12604, 111189, 114740, 52606, 30401, 125646, 33411, 108088, 109603, 130272, 89254, 48741, 130092, 46189, 58918, 102677, 124918, 26586, 130927, 123216, 33887, 52549, 34423, 65555, 68834, 87094, 77414, 68645, 27889, 84861, 125733, 114469, 87809, 15052, 74562, 14907, 72328, 58265, 55020, 119274, 123218, 59043, 125703, 131503, 42377, 57372, 16103, 46879, 55804, 53532, 45938, 16021, 129978, 44783, 12404, 130041, 71283, 8454, 89114, 73750, 77235, 11083, 104012, 73844, 103581, 123742, 9027, 6809, 113659, 33451, 119427, 5765, 15696, 22316, 62272, 16371, 114620, 124975, 15048, 13390, 27972, 40582, 110930, 53627, 10925, 68497, 35182, 55681, 50588, 10779, 109473, 73473, 15329, 125620, 133400, 56880, 38674, 109233, 54253, 56993, 51173, 67651, 87827, 6605, 68766, 45930, 53981, 62662, 20441, 35740, 77440, 45952, 58531, 26812, 22491, 12320, 25746, 89985, 27832, 125074, 55505, 65255, 61548, 35167, 100970, 116042, 24249, 39452, 103928, 71517, 132168, 132184, 65408, 63031, 81095, 113723, 87293, 34640, 28703, 58578, 5745, 104073, 123442, 111442, 77240, 22212, 14365, 134845, 55032, 26151, 35377, 6661, 52271, 122478, 43050, 25185, 103697, 8, 35377, 116167, 79020, 77402, 26217, 132825, 74358, 124745, 12507, 37902, 37902, 88579, 12507, 88579, 78661, 21978, 11012, 42397, 64483, 5566, 25762, 125282, 37506, 124742, 28605, 87299, 74241, 68427, 26454, 14977, 77185, 113118, 33353, 5555, 29930, 69118, 104393, 33936, 116570, 37892, 11898, 42656, 81109, 24256, 116048, 20453, 103453, 54386, 25553, 49891, 12349, 13348, 86685, 65507, 72141, 43013, 118243, 87849, 134956, 32898, 60033, 110375, 27171, 50365, 54398, 57513, 73505, 7518, 87460, 48594, 133528, 63434, 68489, 78405, 38691, 136033, 22025, 103330, 124854, 110892, 109334, 118548, 100928, 132469, 108160, 89667, 52595, 82021, 111455, 109258, 40152, 68762, 87460, 40592, 74178, 71495, 37959, 132908, 121963, 1871, 11059, 130081, 46776, 89346, 55855, 34547, 22114, 89119, 132930, 28575, 37547, 111149, 104040, 7595, 41882, 109220, 30810, 16656, 125039, 35848, 7092, 74184, 100936, 42224, 28271, 8493, 136238, 45039, 60705, 33341, 58245, 133701, 64565, 30108, 111475, 20611, 57937, 60423, 129297, 12408, 24367, 87451, 90663, 46652, 60480, 73230, 133077, 20405, 123810, 26591, 7036, 132478, 122337, 15725, 66447, 38424, 114618, 22557, 46010, 86289, 89539, 65051, 20453, 55264, 81054, 14277, 61101, 109849, 109094, 109511, 20584, 135837, 56963, 33483, 30496, 89136, 59166, 14398, 132493, 136007, 23892, 102455, 59599, 70803, 131560, 55735, 79005, 132870, 103181, 63607, 56946, 66437, 110955, 12, 74584, 73385, 77703, 58253, 119229, 54404, 57734, 15991, 21918, 13517, 32907, 43750, 46681, 125094, 33523, 52243, 28509, 90100, 110097, 70961, 42497, 45069, 125737, 135528, 86281, 6749, 109426, 44669, 26450, 69085, 125671, 58463, 8304, 35850, 65204, 11318, 33423, 72838, 34404, 80285, 46790, 103410, 42051, 64207, 49789, 84814, 5572, 13355, 71530, 6552, 88672, 104495, 114834, 118249, 44924, 61707, 58036, 44017, 78215, 73733, 129863, 35771, 14344, 40188, 15039, 27156, 8482, 34336, 102651, 13190, 15507, 30923, 34166, 11081, 123757, 109869, 33201, 87148, 87833, 85236, 119620, 64501, 43480, 6959, 81997, 129404, 71986, 63117, 12413, 58190, 72480, 74231, 62670, 59141, 11978, 123727, 116539, 103100, 89397, 104050, 10927, 9931, 13048, 65790, 40727, 66322, 14257, 126419, 37631, 28217, 9063, 123856, 34940, 64, 124620, 104560, 79705, 116568, 65758, 14225, 115505, 130906, 125180, 74147, 63440, 21645, 14441, 61668, 6529, 111127, 114334, 85400, 13361, 55767, 43955, 69415, 43967, 30619, 62032, 54464, 12391, 113971, 6984, 90033, 32806, 14428, 81916, 80588, 21903, 104334, 136177, 58194, 132857, 46035, 35725, 104071, 16061, 71579, 57525, 109601, 6521, 124847, 125039, 61902, 10929, 38170, 64547, 21899, 136161, 71502, 52614, 63405, 77237, 61154, 116005, 37568, 89082, 6756, 73686, 111489, 21100, 49838, 109552, 113875, 40426, 64710, 129990, 42406, 4885, 27826, 38153, 14436, 38958, 77024, 28494, 58784, 134574, 109437, 87522, 10931, 15317, 12790, 5370, 103393, 88837, 62396, 28276, 5370, 364, 37223, 40847, 134363, 87988, 58940, 38840, 80499, 113644, 44738, 53852, 110334, 81930, 50336, 89073, 16929, 65038, 111496, 6517, 54142, 16362, 22600, 110921, 35120, 65261, 34701, 73507, 70702, 116968, 63403, 73475, 67747, 26427, 20572, 58405, 73500, 104065, 8461, 42385, 13070, 8967, 123801, 125151, 35880, 102281, 102733, 50066, 63214, 124726, 118468, 114836, 4839, 73234, 86660, 53485, 90157, 90216, 46052, 73875, 116223, 86941, 115699, 85230, 40556, 80934, 65718, 102697, 125318, 67538, 80214, 59471, 7502, 73477, 124605, 16647, 89199, 34914, 7533, 111072, 42684, 132170, 5211, 112830, 124642, 25756, 21333, 14454, 77003, 5068, 114267, 15315, 116349, 13046, 57400, 114513, 13346, 8480, 111206, 42574, 7729, 26055, 113877, 5925, 14854, 103764, 56630, 119372, 35407, 30927, 50323, 42389, 22134, 35385, 82074, 116230, 43474, 22854, 43231, 61024, 35609, 30140, 16105, 34400, 69306, 113343, 72664, 1245, 133227, 114515, 42282, 42282, 73273, 41934, 30617, 33369, 65361, 52720, 46164, 57989, 133021, 7087, 21368, 116957, 132928, 115738, 46901, 123203, 11577, 113057, 102285, 25718, 60775, 133291, 42463, 60696, 109119, 80554, 28236, 46862, 134952, 129337, 28602, 122017, 21093, 103950, 57495, 41777, 10397, 131008, 123484, 30726, 78230, 30363, 77231, 21921, 78687, 38295, 33621, 80195, 6532, 55, 11967, 69159, 1977, 15317, 111440, 12790, 133625, 82074, 5370, 30629, 30774, 54480, 32854, 67548, 61107, 116457, 69058, 134179, 109513, 42402, 123511, 13404, 30629, 24310, 103919, 33595, 37249, 21376, 25801, 64185, 22480, 102709, 21884, 90210, 44671, 64185, 111440, 62549, 82074, 30629, 69035, 110201, 40466, 62608, 40900, 27541, 26921, 121980, 23012, 124811, 123241, 8887, 9944, 61576, 79608, 104193, 9059, 27369, 22417, 122588, 46028, 116929, 6993, 90305, 133653, 61091, 15950, 62370, 59278, 23936, 62680, 26023, 88832, 65187, 113052, 15009, 109447, 58186, 84770, 42274, 6534, 74352, 25183, 73828, 38382, 6697, 15013, 114265, 134475, 111489, 30668, 8901, 27553, 14620, 104060, 20398, 73769, 34410, 86662, 6799, 25748, 44697, 38446, 55507, 34722, 119622, 88625, 34018, 11314, 65163, 64702, 125204, 61705, 61942, 58861, 72435, 111467, 109726, 8541, 6262, 130972, 46142, 113666, 81064, 115378, 114848, 43674, 104330, 70975, 25958, 84918, 69155, 133090, 13790, 122627, 126532, 40853, 110387, 21187, 81160, 61089, 58908, 110399, 115721, 70959, 25426, 135015, 126522, 23925, 77374, 13419, 14318, 34178, 30110, 117596, 77203, 45304, 11546, 58231, 7112, 59045, 113895, 35474, 110961, 115750, 43248, 34706, 23788, 28562, 6684, 33413, 79022, 48127, 105723, 45017, 33500, 43329, 118223, 124775, 54003, 133233, 29862, 40154, 35127, 64985, 27898, 55793, 45252, 103926, 24360, 40432, 55230, 103287, 136225, 117561, 78929, 58700, 55430, 59453, 42831, 31044, 58243, 133294, 104117, 20615, 69342, 115337, 55241, 124819, 6275, 114313, 66260, 33041, 125843, 130051, 134506, 79778, 27765, 135473, 34856, 103140, 5747, 90056, 9884, 55, 53854, 56830, 10885, 109305, 37514, 79780, 28254, 133306, 63041, 129631, 58051, 11328, 58040, 124563, 8465, 122386, 25662, 48467, 104078, 133570, 133491, 13868, 10271, 81939, 119381, 65058, 60940, 135898, 25405, 84932, 74686, 127290, 90683, 44774, 52255, 63622, 44774, 90083, 13511, 133395, 90041, 22100, 65210, 6989, 43356, 71584, 53509, 68433, 129467, 65380, 72007, 34912, 43765, 34282, 129333, 88587, 87817, 86725, 29222, 115601, 113297, 64402, 60516, 65727, 64363, 63414, 29130, 60518, 104198, 48209, 23038, 105811, 55163, 20474, 61477, 45830, 125490, 103577, 62706, 102894, 44123, 67793, 5629, 90547, 30489, 121936, 29860, 126522, 73813, 115997, 67659, 27738, 5288, 109428, 104210, 57956, 90616, 37540, 11095, 8603, 50609, 122751, 26885, 81070, 129375, 84898, 102729, 117658, 42246, 37598, 87329, 49710, 39237, 58944, 26486, 41947, 37163, 33455, 55152, 110389, 22592, 67822, 117574, 57985, 6778, 52718, 69054, 34625, 6713, 57357, 57946, 63614, 58867, 57515, 46008, 122603, 13866, 33953, 119614, 10598, 134192, 64558, 134597, 126415, 78410, 1495, 7593, 10919, 34952, 29090, 22027, 74039, 14632, 45994, 79723, 124732, 57159, 65403, 71508, 6156, 74603, 44655, 125002, 90530, 30978, 33457, 5485, 134972, 49881, 123264, 37262, 58871, 90626, 30724, 134582, 124734, 111140, 21666, 105795, 80736, 89523, 71510, 78529, 50205, 79708, 22476, 52225, 130989, 67362, 70696, 39457, 56922, 58485, 7536, 109756, 109206, 33421, 109179, 58788, 108113, 111480, 70929, 118221, 33172, 103699, 125043, 48215, 104534, 71543, 16884, 90318, 64699, 1075, 65711, 109593, 111458, 29833, 1153, 27179, 65298, 65773, 109913, 13397, 9929, 1120, 43800, 53552, 55212, 62938, 1879, 58015, 130277, 114321, 130886, 119103, 24268, 21130, 20294, 33449, 25694, 122282, 61105, 89519, 12470, 126436, 22144, 78986, 124885, 61551, 66443, 115416, 28579, 2296, 34629, 13547, 9037, 6682, 28581, 13807, 32957, 69318, 64569, 124689, 62571, 27547, 2122, 58692, 28035, 104305, 14231, 58523, 68598, 108164, 132592, 5254, 103344, 38455, 87378, 87851, 46721, 119653, 68108, 78592, 68455, 134849, 58599, 124928, 65372, 42042, 60520, 114871, 53812, 73864, 121931, 38973, 42269, 132210, 26863, 41878, 119577, 109830, 9011, 132320, 104307, 104117, 1536, 110982, 68993, 14490, 104088, 69109, 25531, 131875, 124591, 126578, 45926, 122659, 30666, 26133, 136554, 119238, 37648, 13216, 30365, 10620, 111153, 136035, 89401, 20582, 30974, 22498, 33166, 28706, 70671, 58795, 27970, 21865, 115414, 31015, 109176, 48154, 81158, 10951, 54259, 6819, 59100, 67812, 11423, 43802, 56573, 35391, 122127, 85271, 65553, 57523, 46661, 103437, 119272, 65471, 56959, 65212, 131638, 29092, 55980, 122669, 10290, 61569, 111395, 135796, 113529, 59088, 86267, 116300, 6947, 55947, 63087, 134325, 1235, 85285, 90581, 22822, 90116, 115341, 15502, 129463, 90522, 13218, 90062, 77771, 122593, 25797, 129891, 86716, 60946, 129992, 69333, 63007, 33932, 40620, 117662, 55395, 50068, 80560, 65499, 112680, 23046, 37498, 130297, 81101, 89192, 45879, 78680, 129428, 135827, 130893, 30058, 16395, 58435, 22775, 6136, 20633, 113805, 42979, 103587, 42937, 27840, 103480, 39454, 43246, 68768, 57359, 63790, 42959, 123153, 78430, 14968, 66399, 113996, 134730, 56627, 113813, 109840, 22636, 10022, 108751, 35491, 108624, 48220, 10914, 34720, 64436, 114605, 27732, 13186, 111151, 64743, 33447, 45825, 59096, 37692, 72484, 40458, 54455, 49753, 69164, 13842, 46061, 63436, 62026, 39437, 26272, 5301, 55958, 109708, 45823, 44441, 6636, 113725, 16942, 81087, 126599, 103686, 104497, 33209, 30483, 63024, 28120, 123852, 43732, 12734, 12460, 6634, 13053, 1053, 73884, 57269, 123563, 58694, 50707, 63170, 43250, 127613, 89617, 70653, 1146, 11442, 51120, 45002, 58359, 62297, 40338, 12037, 6185, 7715, 90526, 33912, 113727, 22318, 123099, 123846, 25399, 89107, 28490, 20618, 45986, 14356, 131631, 65587, 59270, 132178, 41768, 38890, 113638, 77665, 5295, 35862, 103445, 114652, 121926, 60451, 125326, 89971, 26462, 123848, 115418, 53998, 61160, 121986, 109568, 108744, 133658, 115594, 124650, 6254, 126620, 68438, 63696, 59485, 63454, 6978, 132889, 54433, 88665, 5073, 131501, 131864, 25799, 88722, 33479, 8548, 66452, 42250, 70964, 30658, 85265, 129303, 56977, 42057, 89101, 54030, 26473, 80633, 109342, 58897, 74566, 42452, 133287, 1252, 113393, 112735, 130057, 32839, 29098, 45934, 77088, 72413, 48149, 125607, 114269, 114223, 132799, 89167, 44754, 65461, 64571, 26490, 103302, 134570, 10, 10760, 123735, 42652, 67317, 123247, 56985, 132781, 116288, 45980, 90538, 103785, 28039, 123569, 104558, 64747, 81845, 113710, 81126, 71954, 15037, 58227, 134216, 114962, 131643, 42078, 20580, 58023, 5652, 70785, 35878, 104167, 40725, 115705, 104505, 38436, 26215, 121934, 5342, 109576, 15076, 59106, 133603, 22848, 11920, 104515, 109419, 77764, 67750, 102744, 108081, 5261, 132467, 67360, 53973, 28101, 68627, 133506, 73846, 103404, 8949, 27955, 14891, 102655, 103451, 65748, 86771, 89841, 40186, 131196, 108139, 13792, 21370, 74164, 127785, 9925, 61523, 125330, 44764, 73840, 63172, 35165, 9033, 70655, 6771, 56647, 49809, 7719, 55673, 70820, 102918, 52748, 78545, 45004, 73870, 11957, 104507, 89632, 61085, 67871, 109375, 61662, 87162, 64199, 64505, 81895, 43804, 35375, 50699, 74157, 1509, 15479, 33512, 64552, 60707, 5749, 133688, 133690, 58827, 131064, 110274, 34935, 16207, 56961, 68781, 13121, 123603, 108168, 72631, 52626, 123184, 46687, 102293, 46723, 90563, 37530, 37953, 114727, 30500, 125132, 64216, 25422, 53561, 67396, 7577, 25978, 24358, 27476, 55679, 62569, 65541, 25527, 102879, 24365, 33502, 56957, 65167, 103441, 113854, 123854, 133641, 41890, 34025, 69105, 124652, 26915, 116933, 123706, 113845, 100981, 127337, 7512, 5476, 20530, 135888, 5355, 119859, 10605, 44791, 30734, 113634, 23946, 109737, 21882, 15987, 136208, 125678, 44929, 114021, 58873, 30738, 135852, 77760, 115752, 31049, 89853, 74459, 22021, 67810, 65300, 4895, 8860, 11458, 82009, 89999, 68273, 119270, 103783, 103701, 85359, 131386, 124687, 80292, 65832, 122340, 40845, 55011, 12268, 6200, 103166, 5952, 16376, 63162, 133471, 115807, 22142, 43026, 88663, 6591, 85778, 125134, 21910, 55954, 33762, 114508, 12738, 62704, 60804, 2134, 129598, 29195, 65469, 63410, 113893, 130915, 65549, 1118, 8977, 102277, 34174, 104482, 80476, 116081, 37698, 132896, 32865, 6961, 109838, 15483, 16344, 15068, 129586, 70923, 124573, 10758, 63811, 20314, 37984, 102920, 21872, 10276, 131552, 32841, 73773, 116228, 100904, 16080, 40826, 88619, 37543, 63432, 44960, 57253, 82025, 65714, 134512, 13905, 8552, 134487, 22602, 90528, 134249, 129305, 116023, 122541, 134389, 43238, 14358, 30990, 5215, 133096, 35327, 42667, 74711, 131207, 60508, 42080, 8911, 58729, 90596, 9035, 134873, 61658, 25456, 114467, 130993, 11348, 32965, 126399, 123731, 135070, 1956, 12544, 34553, 46206, 43922, 34923, 60811, 26434, 55791, 34646, 80486, 37986, 111196, 87464, 129411, 136538, 35170, 9907, 41888, 66531, 122549, 103134, 12482, 110276, 25824, 87359, 25960, 52214, 57486, 62616, 65474, 20524, 133231, 79712, 30066, 26049, 46648, 69062, 65096, 109244, 54255, 74482, 69008, 72152, 121948, 109421, 43285, 52610, 133341, 38434, 109507, 115691, 20183, 15698, 131419, 113624, 84852, 64481, 108815, 38685, 125735, 5235, 124586, 60009, 73872, 133248, 38838, 67867, 80594, 37397, 124827, 62870, 81986, 5913, 124597, 122512, 38577, 117566, 116452, 69340, 35105, 112686, 81068, 64428, 27082, 30397, 14233, 131232, 82019, 2273, 111487, 124668, 48229, 31000, 28708, 126524, 46792, 77410, 102707, 113336, 114355, 65066, 74553, 125714, 54272, 122597, 114603, 119262, 1515, 55402, 123746, 58494, 38826, 59073, 133615, 72880, 79751, 33692, 71811, 33052, 33694, 64534, 132225, 126616, 113975, 118374, 90651, 103795, 113891, 77790, 34654, 56938, 130966, 82023, 42312, 87462, 118406, 13068, 57267, 89069, 45065, 49332, 113973, 20639, 130946, 12598, 111383, 129625, 65503, 134235, 24332, 61715, 35395, 26482, 24308, 8937, 109467, 69166, 38118, 114616, 61561, 110330, 80474, 67664, 69052, 26395, 35456, 78558, 25537, 13373, 5583, 130295, 38297, 5598, 42395, 6689, 134455, 90039, 46663, 35866, 22472, 8831, 51169, 15035, 117521, 109500, 122665, 130325, 16382, 59564, 102639, 65723, 78213, 38917, 7748, 25997, 50623, 124571, 124581, 27830, 115744, 131148, 46689, 46665, 30874, 88766, 103663, 15450, 133094, 124736, 20189, 23913, 43820, 113887, 55283, 8550, 43916, 33009, 39074, 116008, 43240, 8576, 129318, 119377, 121910, 135819, 10485, 87312, 89239, 134586, 78678, 38519, 65054, 62745, 33787, 65399, 63794, 50223, 11922, 27824, 110926, 14492, 11091, 61241, 116298, 89172, 125837, 78882, 80490, 58276, 5562, 100955, 33981, 44946, 27635, 103406, 90027, 125479, 133670, 63815, 68445, 14539, 54245, 25768, 46048, 131396, 60559, 109271, 114586, 72323, 134931, 20296, 6589, 118431, 62390, 39038, 77341, 131629, 5307, 113050, 87301, 115979, 23962, 63009, 30976, 90681, 122605, 39068, 61531, 90532, 61717, 27801, 40887, 10861, 131078, 25828, 126407, 74042, 78594, 25722, 128033, 37174, 42383, 77012, 122053, 122564, 43, 12372, 10248, 37906, 80566, 44686, 134501, 58696, 125206, 2102, 118265, 131082, 134177, 44785, 16074, 43767, 89846, 26384, 61641, 61265, 26289, 115772, 51163, 73745, 78671, 90031, 34406, 88024, 133466, 28589, 5094, 50207, 54229, 42678, 78426, 116019, 68269, 124987, 81926, 126625, 33025, 136247, 29071, 124614, 78318, 72417, 117664, 30337, 65796, 130103, 80997, 59469, 28061, 133442, 126601, 85292, 1157, 70673, 88847, 12480, 133609, 11069, 111119, 90123, 25789, 88017, 50083, 136195, 32830, 125685, 52735, 26061, 22678, 46198, 13123, 103318, 114840, 64191, 122518, 43425, 34168, 13194, 131198, 34444, 62345, 34180, 57991, 131838, 45877, 437, 135892, 124809, 128031, 133630, 11999, 122651, 81040, 76975, 119571, 43903, 102360, 13144, 132598, 130871, 134875, 116351, 27865, 60924, 63125, 26484, 54018, 132314, 12681, 22159, 113112, 40462, 34517, 30627, 124724, 61247, 1142, 63085, 1247, 85447, 133456, 100941, 114139, 84848, 27037, 63212, 135068, 74219, 67653, 124593, 65191, 9077, 86091, 78033, 7742, 4889, 21970, 73488, 103346, 126530, 124603, 109471, 2318, 34539, 111433, 123262, 55978, 112712, 125731, 63620, 86043, 21171, 27675, 68611, 123507, 21912, 16360, 42036, 74243, 118421, 134257, 2277, 42654, 43776, 129465, 104316, 73826, 122492, 16419, 58882, 42404, 15074, 56916, 33363, 79007, 22538, 125495, 11720, 15494, 134251, 102959, 27535, 109465, 103593, 6982, 110888, 108561, 122378, 14281, 131633, 49908, 46056, 34341, 115760, 103395, 5654, 42638, 29988, 48433, 84824, 78424, 130303, 60428, 104513, 122514, 115680, 124757, 31133, 13413, 63091, 127615, 10974, 73271, 71949, 39450, 59462, 78472, 67695, 40889, 44665, 72522, 109113, 39070, 90329, 65768, 23763, 130312, 135901, 34286, 42986, 84768, 67743, 67411, 42890, 33357, 46847, 61780, 108753, 22042, 38151, 27183, 77792, 62682, 35458, 1911, 68485, 37650, 78217, 121920, 67352, 44745, 123138, 38139, 27187, 65044, 130314, 110571, 62589, 90183, 108127, 68413, 28226, 26488, 102750, 35468, 384, 16369, 68293, 73496, 38464, 109743, 59090, 24128, 87829, 114056, 25193, 63698, 133018, 131054, 60665, 14460, 29124, 64520, 2227, 55258, 125238, 70791, 35485, 69346, 46208, 103412, 45924, 42331, 33793, 50619, 61087, 87353, 57478, 54447, 131088, 28591, 123693, 49757, 1084, 59459, 7689, 26674, 60462, 65306, 45059, 110886, 131217, 114932, 114932, 112690, 135074, 78580, 114032, 103179, 134914, 59027, 64763, 6414, 70865, 20594, 53506, 42619, 102735, 132810, 56623, 33789, 108166, 67348, 59158, 16380, 72489, 37528, 43171, 108107, 38406, 81912, 20472, 135006, 60491, 8979, 5487, 87707, 67830, 111180, 73834, 65834, 67409, 132962, 124569, 45059, 44303, 60156, 119636, 116177, 78035, 55416, 22231, 61444, 125200, 46899, 87333, 32955, 43758, 109560, 90630, 113825, 25385, 44422, 71962, 61077, 123191, 20549, 60031, 16668, 84844, 72508, 127314, 78209, 55675, 33789, 103657, 44443, 56940, 37633, 38378, 10976, 68070, 67834, 116292, 68977, 129424, 63467, 45289, 68977, 68977, 110382, 62372, 85944, 30467, 108584, 113299, 35462, 74104, 131349, 69070, 8566, 136026, 49902, 28001, 7731, 111007, 62640, 125192, 125244, 33926, 135037, 87347, 81836, 48748, 89232, 5233, 71968, 25991, 80740, 42293, 80616, 22666, 49902, 129975, 73880, 6813, 116233, 1131, 44759, 38896, 37904, 13794, 57561, 5624, 64180, 109745, 32843, 89237, 123503, 39205, 123186, 28428, 12596, 42371, 39205, 136009, 125567, 108851, 104310, 104362, 109745, 8908, 71588, 126632, 72335, 115983, 42284, 134295, 52531, 27564, 40622, 78668, 67415, 30506, 20622, 132322, 33510, 123798, 109722, 13161, 103460, 87842, 71832, 62637, 37563, 58574, 118429, 10874, 16876, 85361, 115778, 21392, 85821, 116027, 89628, 6418, 30498, 27364, 34961, 61126, 119855, 26825, 59466, 55886, 67670, 70682, 131241, 134259, 74170, 42393, 53596, 38913, 6235, 134916, 65720, 26082, 73490, 84865, 131622, 118415, 42673, 37517, 69331, 65072, 112857, 65158, 31017, 42254, 46669, 130141, 14384, 49703, 114826, 121869, 11460, 136221, 46733, 134463, 73688, 61844, 72519, 54466, 43744, 50361, 85449, 28088, 126611, 102714, 8906, 68561, 123740, 89138, 123514, 57476, 104499, 109279, 14835, 79729, 118588, 7514, 1958, 123207, 74229, 6617, 80556, 53945, 25444, 57346, 89646, 84788, 100906, 133639, 127292, 32999, 34302, 15531, 1148, 2098, 44911, 39053, 115436, 13922, 55974, 84836, 16935, 64560, 129294, 48441, 114734, 112948, 20911, 42914, 43785, 68875, 90035, 27836, 112952, 14325, 68600, 135019, 64503, 40711, 28583, 6894, 29956, 37412, 134929, 14392, 38438, 20287, 135013, 9946, 386, 67392, 66252, 133012, 30778, 57165, 89339, 65725, 62868, 71990, 20228, 111502, 89184, 48239, 1895, 34347, 72779, 27856, 104471, 59075, 103089, 72003, 22625, 20195, 7525, 37508, 69322, 1137, 61094, 65531, 6388, 88726, 15321, 20168, 38919, 103948, 85254, 10268, 25950, 5658, 58932, 113441, 26798, 72325, 68896, 53586, 109751, 65147, 37976, 117628, 90226, 35452, 103291, 37626, 125622, 42599, 133524, 134843, 77395, 29197, 66217, 87010, 61080, 16933, 77448, 26294, 110529, 26468, 60087, 37616, 35888, 123124, 13224, 116450, 60419, 125720, 29843, 15476, 11178, 42906, 133184, 7066, 42391, 14933, 37217, 133458, 59092, 34402, 77994, 58278, 114250, 38704, 123863, 126591, 127377, 126543, 118599, 32973, 7701, 116944, 34927, 131535, 73603, 123111, 104503, 86792, 78219, 68650, 125618, 37519, 86279, 68383, 11489, 73458, 65389, 41855, 113389, 14972, 123119, 35290, 33351, 73684, 85244, 41880, 77242, 53850, 29215, 78470, 67556, 61533, 30736, 132812, 78397, 124755, 34112, 67374, 109193, 64189, 8872, 45055, 25955, 108746, 102898, 114624, 125550, 74069, 46755, 5537, 81914, 71538, 37628, 46854, 130902, 12517, 57484, 29853, 129924, 114065, 63121, 77833, 85406, 42379, 11932, 33016, 55849, 43228, 60944, 103952, 129621, 1946, 48449, 59448, 60806, 90128, 56583, 123626, 109298, 78568, 44030, 68440, 6686, 63133, 33494, 52733, 46071, 55836, 26880, 35648, 6773, 37883, 65206, 132600, 65850, 65127, 57260, 86300, 87143, 104179, 86077, 78717, 40327, 12003, 14555, 69111, 88634, 108111, 78556, 111381, 133581, 66246, 67388, 72010, 68854, 7066, 126403, 65840, 38848, 68559, 78935, 127609, 115802, 31156, 69022, 68754, 123092, 79749, 37724, 110915, 12328, 134991, 37624, 64532, 133597, 29076, 50605, 1532, 1223, 55239, 72897, 6872, 56969, 132883, 85288, 73205, 53579, 27807, 58879, 38137, 87797, 8618, 22590, 20390, 69094, 77225, 58865, 115343, 101009, 54459, 12359, 8638, 28749, 89983, 87791, 126572, 46632, 80234, 29193, 110594, 115407, 53007, 59168, 58009, 74596, 33047, 58407, 58407, 102380, 7018, 68417, 110907, 25967, 123452, 77372, 16076, 20467, 61933, 52267, 64211, 86714, 110296, 130108, 72084, 73757, 43030, 5478, 58833, 81982, 125501, 38453, 43020, 65551, 90195, 110919, 136251, 26420, 114273, 4899, 6352, 8543, 15062, 26422, 105801, 89851, 84928, 42568, 27700, 60006, 21385, 35137, 45, 129307, 50713, 41859, 77042, 6209, 67319, 88581, 72114, 134282, 40434, 25688, 89832, 69, 77199, 40910, 8922, 38484, 134967, 77800, 66414, 38534, 125718, 37878, 21159, 87456, 85819, 119593, 33713, 60677, 111142, 37963, 56583, 6205, 122738, 38565, 27953, 33791, 132182, 10916, 58964, 136013, 69143, 111399, 58727, 73511, 124685, 123698, 71582, 44987, 38553, 5087, 65405, 37908, 61124, 114217, 109608, 39196, 16666, 65171, 71825, 25435, 81860, 126394, 46887, 34388, 131012, 123147, 123712, 89123, 55501, 38359, 46679, 11722, 109430, 86801, 59035, 117537, 71545, 10852, 68750, 133568, 44909, 43242, 113341, 2222, 114626, 6898, 130146, 55208, 5277, 21331, 16211, 52249, 129939, 132898, 102657, 26475, 72255, 37414, 124612, 104475, 25391, 35884, 1483, 28507, 55945, 7076, 81924, 60998, 38715, 109117, 62311, 34900, 134398, 81856, 6767, 11541, 26478, 126561, 80570, 6666, 90636, 124999, 40858, 123130, 61071, 27566, 6550, 61137, 34278, 34020, 103085, 127299, 45978, 23032, 87813, 64404, 123104, 73275, 114236, 12683, 1901, 14975, 20437, 126386, 133566, 60466, 100898, 63022, 116014, 26436, 86711, 42461, 59268, 131546, 78412, 5279, 112714, 59362, 135815, 104042, 59503, 125136, 43826, 109747, 44964, 54408, 25191, 30343, 122699, 58863, 116218, 6732, 23778, 10302, 21155, 72886, 65070, 72884, 111070, 61237, 20235, 38126, 40625, 111391, 68852, 71904, 11572, 128025, 90009, 25395, 39081, 115768, 109246, 30948, 32988, 26927, 26393, 45283, 103682, 31055, 78464, 5627, 68878, 62575, 15954, 11959, 42946, 129988, 50316, 58778, 43806, 27519, 90583, 125563, 63097, 121982, 77039, 76985, 134218, 78870, 57282, 63535, 90515, 25805, 1925, 25805, 123541, 28054, 63772, 43017, 43924, 109769, 88734, 13059, 9939, 58840, 13855, 67306, 109722, 25199, 34685, 78329, 43826, 41857, 131840, 6029, 58773, 5217, 14396, 55404, 114230, 37934, 109303, 9929, 38133, 109351, 14445, 16097, 35773, 20906, 5061, 58378, 27168, 4901, 103325, 12602, 28446, 31160, 63418, 30479, 27763, 10308, 109747, 112707, 102377, 30954, 134239, 126613, 33928, 134603, 125631, 6792, 28221, 49749, 27162, 116290, 56581, 124858, 7590, 114729, 133098, 126443, 28221, 55762, 86062, 73232, 131047, 58734, 130037, 67380, 77177, 72538, 60439, 67587, 34621, 9013, 122384, 62839, 77406, 40902, 43461, 42941, 71514, 45928, 112695, 46238, 73241, 102659, 22852, 1525, 20483, 65129, 109351, 45006, 114595, 13855, 12486, 114230, 116094, 16097, 133098, 118558, 26769, 25928, 77849, 46821, 136037, 34561, 125164, 55793, 116094, 85365, 103926, 113990, 55847, 104200, 129617, 71960, 77086, 50573, 135000, 50209, 109286, 65195, 122464, 34561, 90007, 30146, 60289, 33308, 131394, 70863, 61135, 50683, 114640, 45278, 117529, 133666, 37270, 125058, 116448, 56932, 46784, 101028, 38145, 44973, 55842, 131868, 89639, 60315, 46667, 102653, 71675, 59173, 122366, 20197, 56936, 56936, 102922, 68948, 29213, 81988, 33453, 37500, 34294, 56664, 109855, 30321, 114832, 7387, 114832, 60513, 20197, 12749, 12749, 14831, 43117, 56936, 43117, 33971, 90689, 102883, 9022, 127366, 63805, 69289, 39189, 114948, 40442, 86762, 85273, 46821, 5667, 12749, 52223, 33832, 30516, 109504, 28107, 90136, 136037, 34561, 55987, 30070, 27805, 126570, 30054, 55397, 124962, 39207, 20278, 123394, 52547, 125753, 6239, 58417, 71277, 43335, 69113, 89196, 117559, 136557, 129920, 60015, 102273, 113630, 30001, 29296, 132326, 15301, 15944, 20588, 59, 29984, 133632, 131340, 128037, 55303, 40856, 45838, 119417, 6239, 86773, 24274, 116206, 9952, 26861, 5570, 79014, 22, 117668, 114219, 82011, 78570, 81074, 124845, 8899, 102693, 86803, 133265, 134351, 52198, 27877, 119466, 132136, 59274, 87018, 41930, 33394, 22646, 90046, 34027, 58514, 133588, 62866, 33207, 50046, 55969, 39445, 38400, 34471, 49815, 123115, 125164, 28105, 2324, 133566, 74063, 125527, 473, 131430, 35487, 55018, 25821, 38923, 38923, 53569, 25791, 25791, 39218, 33392, 134732, 23894, 108060, 70807, 37227, 12747, 118558, 50617, 66233, 15711, 27690, 129935, 14896, 63159, 136223, 43119, 32869, 9912, 25494, 109747, 123567, 22485, 40636, 131554, 38185, 123509, 133677, 123748, 125037, 58948, 11174, 7597, 58271, 44027, 131400, 84828, 116946, 60482, 80985, 35401, 125585, 80949, 38133, 133030, 1025, 86764, 43106, 67358, 127782, 38678, 43484, 125320, 114479, 88779, 74107, 114504, 123768, 50217, 8572, 103065, 102881, 129441, 131084, 42696, 134395, 40615, 87297, 64714, 27849, 130035, 7389, 33548, 22654, 67413, 14842, 38122, 89084, 5996, 131428, 43822, 116094, 57378, 85365, 116090, 45976, 35886, 73249, 116010, 90313, 5340, 43117, 48473, 41781, 49749, 85259, 63463, 41951, 60432, 132808, 132837, 30321, 71960, 110997, 12548, 90608, 78694, 135000, 86311, 84930, 29897, 110219, 125388, 38927, 5252, 37735, 8939, 73697, 56965, 78204, 1021, 15485, 57993, 112720, 28103, 65056, 5915, 61096, 71442, 124889, 43478, 56955, 116520, 82080, 13790, 2231, 60756, 54000, 32789, 15308, 12742, 7095, 33873, 12591, 33049, 48143, 90147, 133279, 33246, 37280, 76979, 68198, 58518, 80558, 15504, 22642, 64296, 53594, 42431, 10955, 62546, 6579, 126574, 73855, 77781, 104562, 84895, 103401, 77275, 12016, 132602, 43506, 16397, 71941, 82027, 20232, 130950, 24258, 6892, 16568, 81150, 51165, 108759, 5739, 88589, 14433, 37523, 6536, 61128, 104432, 114014, 131443, 114027, 5331, 90107, 25555, 131380, 122531, 29208, 62652, 134809, 42456, 129288, 74605, 122350, 8627, 38352, 27976, 132794, 6883, 125161, 50280, 90037, 67533, 72892, 24339, 51135, 85256, 44001, 41894, 49781, 34412, 86787, 89829, 12023, 28092, 109574, 25531, 25754, 74694, 6000, 109477, 6603, 35758, 33709, 136210, 129898, 6565, 26904, 11994, 5564, 119694, 114025, 65257, 129584, 40586, 45834, 61251, 38179, 61116, 45974, 16108, 30003, 6158, 102783, 122353, 59446, 13184, 41766, 14316, 64704, 30660, 124595, 56614, 124563, 74152, 35405, 25579, 53992, 66435, 471, 9057, 38781, 43927, 51125, 1124, 23944, 110397, 86049, 20590, 129887, 33775, 54225, 34276, 27863, 102867, 68401, 70718, 59473, 42857, 7055, 43254, 30908, 6515, 44023, 42252, 13505, 47, 1497, 38966, 25401, 103703, 44699, 20326, 55741, 50318, 123182, 15290, 25692, 62938, 104388, 28245, 134375, 35321, 14970, 21167, 63786, 134355, 65092, 26139, 57363, 22676, 136183, 13864, 81999, 64426, 134467, 25726, 114930, 43044, 45866, 90102, 80795, 67390, 73830, 125831, 21892, 46885, 134357, 64244, 135052, 73259, 48439, 53567, 26942, 64745, 102896, 123241, 62608, 10286, 87008, 119413, 103968, 26043, 69314, 38902, 14877, 44936, 89973, 46067, 61124, 114732, 131627, 131211, 87795, 113424, 23905, 43022, 26902, 59082, 135058, 72154, 22324, 135060, 38567, 103175, 81048, 15466, 43750, 67875, 133075, 13072, 20902, 49811, 117564, 34290, 125829, 28732, 71819, 62388, 60497, 49256, 12511, 67997, 85900, 39443, 73484, 26579, 29068, 18, 123786, 12769, 59162, 129982, 30502, 37254, 55798, 131417, 16003, 33425, 124899, 362, 103348, 77343, 43096, 42494, 49784, 33461, 88781, 104320, 131827, 124561, 30005, 58204, 84778, 33702, 34709, 39085, 21824, 60160, 2126, 85936, 65375, 131571, 122057, 43935, 40198, 50575, 125724, 134599, 134599, 25698, 87126, 64524, 79586, 123571, 42236, 130963, 34906, 38683, 1159, 125015, 12519, 53996, 13496, 21890, 68068, 61542, 40466, 21796, 68963, 123134, 77773, 58357, 104200, 42040, 11484, 50690, 37706, 74191, 12347, 131616, 29819, 16184, 114148, 9025, 114976, 85938, 27240, 57323, 42367, 133296, 89989, 129954, 74557, 84778, 4893, 74608, 15279, 37620, 22504, 102787, 69030, 124716, 87152, 22598, 61604, 34582, 62285, 35874, 124964, 45096, 125194, 14436, 111510, 44774, 87449, 52259, 30757, 70846, 13379, 89673, 113933, 11928, 21712, 63216, 88661, 37622, 8947, 52636, 48198, 132148, 20451, 42018, 52196, 33948, 33766, 11089, 64982, 15306, 114325, 113048, 131237, 112716, 86683, 73796, 85953, 61784, 134856, 85406, 1534, 14833, 60154, 28262, 26902, 103416, 43790, 135533, 39087, 61229, 117594, 6181, 134574, 38970, 16888, 10764, 28426, 20211, 119628, 110573, 119433, 6554, 27246, 16425, 30547, 28326, 5376, 12478, 122672, 16205, 119276, 63174, 38717, 105803, 10948, 20913, 109183, 102603, 21712, 35852, 113064, 43108, 85246, 58403, 26266, 64432, 25369, 63438, 136158, 5673, 31077, 74206, 55024, 65062, 118566, 72897, 38875, 80488, 113986, 67754, 77766, 88734, 129340, 7071, 37180, 71677, 65493, 87703, 38490, 89529, 104110, 66223, 60563, 133578, 28418, 21157, 74484, 113992, 72, 24281, 50197, 57926, 7752, 46868, 11480, 134459, 104115, 78198, 124599, 118466, 21185, 13319, 116040, 10246, 25583, 61004, 34164, 61519, 35115, 123136, 127321, 119374, 86287, 78975, 33808, 76958, 33390, 130873, 38881, 116323, 59255, 118254, 59117, 136219, 40824, 65034, 30056, 25766, 30746, 5634, 109496, 78601, 74461, 1129, 89355, 131866, 103707, 64761, 11953, 27039, 129623, 41918, 89335, 57330, 6343, 22828, 109516, 55771, 44962, 134987, 22046, 125096, 41920, 74549, 44501, 103773, 122543, 34969, 8955, 62274, 125378, 134493, 20394, 127619, 67852, 90218, 103709, 37241, 122590, 109288, 125694, 134273, 37913, 132868, 72889, 125835, 65745, 28718, 103476, 55802, 61691, 64248, 123721, 130039, 77027, 111182, 123268, 126391, 12291, 64209, 133508, 8302, 113120, 100943, 25973, 78874, 102863, 34682, 35101, 54413, 81016, 2310, 45848, 55962, 11324, 88759, 22194, 10962, 72437, 90534, 20413, 78988, 12336, 90534, 71586, 61782, 69338, 134954, 12484, 12001, 87012, 40330, 14271, 8846, 132789, 6146, 10271, 33018, 8614, 90534, 42265, 110541, 9902, 27065, 52590, 68880, 125726, 78664, 85932, 133619, 109227, 123412, 33367, 42975, 57413, 11176, 42132, 13559, 43327, 135064, 61853, 80930, 66314, 15489, 55677, 108552, 100957, 73762, 78018, 81853, 84826, 53527, 28716, 6943, 20203, 87787, 10894, 74456, 37690, 60166, 111210, 40613, 43165, 1243, 72868, 118367, 89321, 136253, 33918, 125674, 46079, 80420, 44418, 24354, 101022, 78997, 114755, 79725, 131529, 16029, 30328, 59252, 22568, 16095, 72124, 118251, 78468, 77777, 61666, 43278, 109088, 37595, 21819, 81066, 103067, 44776, 52243, 38473, 136215, 131877, 48077, 89623, 45115, 112667, 77286, 40346, 8768, 72168, 101032, 5071, 88005, 112665, 90534, 125053, 89141, 33718, 56612, 86798, 116202, 35786, 80426, 131441, 14889, 68613, 10995, 20330, 119590, 25919, 29815, 114136, 12755, 108501, 135058, 129470, 20403, 52575, 50101, 68392, 30303, 63646, 38173, 1491, 30473, 46760, 42839, 29132, 37642, 54265, 103964, 8306, 14404, 72117, 34000, 28600, 57987, 135930, 37237, 65585, 13159, 13180, 28202, 8776, 34151, 37696, 26003, 62593, 85432, 11466, 124607, 504, 2132, 63164, 37245, 15685, 117578, 56889, 74713, 59250, 50225, 131202, 68791, 34671, 136256, 37680, 11049, 13168, 25679, 15045, 103308, 6775, 77836, 1259, 127297, 25682, 103946, 64170, 108588, 11320, 5960, 73755, 71939, 125196, 42300, 89613, 80494, 102275, 126627, 123480, 136549, 113837, 38414, 55851, 44416, 21972, 115762, 25660, 62644, 59248, 100986, 33278, 16662, 89256, 111463, 30893, 129582, 46875, 6736, 34648, 124670, 133088, 32963, 27974, 78659, 21179, 70835, 42034, 61169, 11344, 2130, 40332, 115395, 115701, 22023, 80505, 9075, 35211, 132785, 124674, 5606, 33054, 5539, 61113, 37243, 58004, 5549, 55806, 49751, 113395, 26418, 21095, 45296, 70675, 78416, 62030, 15283, 133032, 87859, 20259, 6318, 22840, 67308, 125219, 80507, 86271, 1080, 62394, 24334, 13861, 20332, 30357, 61479, 44723, 103485, 102717, 58505, 39036, 35159, 113101, 123450, 87697, 57568, 37600, 60552, 37897, 37955, 124893, 11181, 43121, 34617, 40176, 103665, 125557, 30477, 30477, 89399, 131445, 7740, 30642, 125640, 65182, 104556, 1499, 124747, 46786, 37559, 124985, 65199, 70867, 40627, 100914, 123350, 14477, 113403, 111461, 58829, 89150, 24344, 68306, 28467, 21360, 58529, 90610, 88732, 33481, 68975, 33863, 102641, 100902, 45872, 80979, 65752, 6256, 8629, 27045, 58875, 125707, 126608, 81170, 114629, 87371, 49844, 114037, 66248, 33039, 39225, 14354, 125611, 70698, 118562, 89651, 78566, 122510, 33221, 27665, 43252, 61156, 46780, 45092, 42032, 37191, 125374, 136181, 87783, 15439, 80992, 111387, 27729, 67806, 40862, 63129, 73690, 23790, 34421, 26287, 114527, 21664, 37233, 56843, 90649, 118583, 27838, 81182, 6945, 136545, 8928, 30142, 15691, 48125, 119407, 114510, 14350, 90021, 57350, 74675, 68655, 37591, 37591, 37591, 37591, 5936, 41892, 119608, 26444, 6407, 134886, 45806, 126622, 11158, 34440, 130948, 71271, 10029, 117584, 65395, 53474, 68950, 12033, 126409, 38732, 73513, 125849, 110911, 63011, 63083, 14447, 14447, 38657, 42977, 34380, 58437, 77097, 6673, 58236, 34521, 43053, 114816, 103966, 38726, 78963, 25980, 35178, 5286, 126411, 103583, 35615, 34896, 114883, 22178, 27951, 114012, 115586, 135052, 65770, 103716, 12663, 73251, 35316, 122599, 67863, 123717, 54378, 110995, 14438, 134514, 30370, 53598, 71945, 134275, 25692, 103151, 69098, 8656, 22668, 77221, 117523, 78582, 44789, 60176, 48205, 62009, 12304, 60441, 35096, 103363, 73456, 46074, 77349, 35442, 39192, 14346, 43024, 135811, 72882, 22034, 23896, 73268, 123410, 28697, 22192, 53496, 45910, 1239, 10222, 8838, 59481, 50054, 62573, 68396, 119601, 43283, 22198, 77022, 37688, 60077, 60077, 7579, 68839, 46677, 89973, 136241, 53961, 87458, 65137, 49761, 56951, 114134, 122002, 62551, 65106, 29835, 123354, 66454, 21676, 48173, 70842, 65756, 109836, 132208, 57265, 8969, 28471, 118552, 27759, 124678, 55408, 34467, 60722, 7003, 56642, 33827, 60926, 33599, 101020, 23034, 12466, 33230, 55864, 20532, 42661, 1216, 87789, 38906, 49251, 58558, 32959, 35721, 33514, 40575, 32951, 110894, 68312, 62944, 122146, 12398, 22091, 30424, 78480, 57521, 28710, 129869, 61506, 130305, 6896, 26119, 58814, 129312, 15060, 67758, 64474, 22674, 50701, 129972, 34022, 8806, 51167, 9909, 35329, 65533, 42025, 79710, 68316, 56653, 90125, 122133, 135050, 131723, 22830, 21962, 67771, 123328, 111123, 28496, 130937, 103970, 61762, 61563, 45107, 14265, 117653, 118435, 55808, 132594, 90679, 74598, 25995, 111446, 87781, 110345, 6693, 74318, 30772, 67546, 1523, 127339, 55784, 73860, 64757, 114069, 89676, 64252, 30487, 58597, 62591, 20626, 43434, 64536, 74690, 123750, 104080, 62872, 38929, 116959, 22174, 102283, 90316, 6538, 61022, 136156, 103095, 35209, 100990, 25572, 133664, 125395, 134312, 25572, 65106, 134312, 61739, 33373, 61739, 58576, 1078, 15299, 124664, 68888, 102555, 64361, 123618, 38147, 25785, 122476, 122545, 45113, 13377, 109570, 20268, 109267, 9095, 23786, 89827, 5691, 104337, 7504, 37895, 65825, 81133, 8444, 136193, 131485, 113430, 113334, 37545, 46185, 87008, 60158, 57181, 87092, 24344, 43333, 43489, 87380, 39066, 116535, 57471, 84903, 90214, 44006, 119753, 65294, 125248, 61847, 6780, 116100, 22695, 33554, 22161, 34440, 74024, 131378, 26831, 135940, 135862, 14426, 28577, 50070, 14447, 60077, 114883, 123729, 37688, 14426, 14426, 49866, 13383, 58576, 1078, 61739, 134312, 103333, 33373, 88592, 88592, 114017, 23930, 37221, 7236, 88592, 26932, 118455, 37561, 14279, 55853, 21863, 23917, 68967, 13125, 58914, 58875, 87697, 67734, 124664, 116566, 12523, 43057, 102679, 6386, 8640, 61898, 131378, 131378, 46695, 132962, 37221, 7236, 37221, 127288, 123132, 1055, 80290, 111477, 68409, 502, 119588, 44991, 133617, 65794, 54140, 111477, 5921, 72001, 109415, 26932, 118455, 52608, 51171, 16423, 133191, 134361, 25736, 136231, 20230, 69131, 25564, 34633, 62161, 126528, 24272, 124640, 21863, 23917, 104484, 26283, 35882, 32763, 39227, 43629, 136551, 124664, 131378, 44747, 37713, 42110, 30623, 32902, 25566, 90640, 13125, 58914, 58914, 124664, 103173, 131378, 37561, 14279, 88841, 55853, 55853, 21863, 133643, 132166, 109479, 10781, 68967, 68967, 30744, 89116, 122557, 1061, 49727, 135468, 122504, 123729, 15709, 58570, 38941, 103333, 13790, 57933, 58576, 1078, 26932, 118455, 125208, 62696, 66439, 58425, 48471, 78206, 130875, 68862, 22380, 54223, 28739, 136043, 14443, 131219, 89344, 125168, 131150, 70955, 113288, 108796, 1505, 52681, 45098, 68287, 48465, 72873, 45285, 60809, 67832, 129958, 125130, 81056, 114319, 125609, 45883, 133485, 116334, 42244, 15445, 103815, 48181, 72094, 50277, 64142, 81077, 85439, 7754, 8450, 53704, 132901, 87870, 32749, 33531, 45755, 60711, 62365, 115798, 43076, 76963, 116210, 132827, 121942, 130307, 62678, 50717, 35735, 108791, 81172, 53858, 113532, 131562, 5592, 90145, 11008, 35135, 109231, 50331, 43500, 21181, 1965, 15464, 7089, 65377, 49253, 131225, 118408, 129408, 44968, 10783, 89848, 27683, 123444, 77444, 110366, 11994, 1233, 30477, 30060, 90300, 111504, 20590, 34864, 109237, 125535, 131647, 110095, 109284, 122684, 11926, 64745, 7110, 109580, 14271, 13368, 50585, 34565, 134171, 100918, 34513, 119694, 121944, 125709, 129420, 122529, 26934, 33905, 119413, 67865, 109591, 43504, 114067, 40872, 80592, 30921, 123788, 55206, 34619, 61840, 26782, 122607, 37700, 131209, 73792, 59451, 123700, 22040, 32781, 37587, 70826, 59996, 126587, 127284, 30952, 6734, 70816, 38562, 115748, 15472, 74449, 76993, 61885, 5735, 61487, 65778, 108728, 16336, 109344, 101007, 42055, 34434, 119751, 109857, 123624, 30311, 69100, 34469, 78316, 135035, 23940, 27589, 55690, 124676, 39229, 38898, 25969, 80482, 37936, 136173, 26127, 20537, 27816, 12332, 74588, 6226, 132792, 42308, 110254, 64246, 133393, 14400, 7570, 58884, 85411, 126432, 62702, 114471, 100916, 81093, 77428, 89071, 57922, 133335, 27539, 117666, 29104, 89653, 42492, 115770, 119603, 30720, 14473, 50715, 26198, 13415, 113409, 68591, 16005, 114010, 44667, 74580, 42904, 67657, 6908, 90552, 25938, 50692, 33349, 113889, 112733, 125255, 132138, 27573, 77775, 86999, 33164, 116961, 89958, 134996, 21876, 111076, 6585, 20, 89331, 22687, 52247, 22029, 115754, 57767, 7080, 50567, 35630, 53479, 35174, 58361, 23919, 61990, 57508, 55393, 38545, 12353, 103157, 32796, 129604, 118376, 124578, 111431, 57321, 103168, 63429, 30906, 90185, 8646, 69026, 125048, 131045, 34545, 38783, 68864, 130143, 58520, 50283, 68539, 28756, 16338, 7572, 44799, 11478, 1126, 33174, 27489, 69116, 108606, 58937, 28483, 9921, 68200, 131424, 125084, 35184, 8456, 61573, 67732, 69129, 118438, 90118, 27632, 77747, 62876, 49706, 26895, 87815, 53009, 33777, 56878, 35768, 43345, 132819, 6925, 55743, 34355, 89965, 11350, 109771, 30353, 12270, 5473, 134402, 12019, 30998, 13321, 49342, 87985, 14952, 123243, 60540, 2128, 46227, 109547, 34182, 58475, 71800, 133289, 22152, 388, 24314, 8835, 89680, 37593, 119421, 74451, 53542, 109832, 125531, 131850, 89152, 10489, 60499, 133495, 104188, 119211, 134847, 130037, 85259, 6595, 65308, 30804, 45932, 130301, 58853, 62823, 130940, 7005, 38470, 72080, 58731, 102961, 61587, 12415, 89241, 26285, 130242, 72859, 72859, 37252, 86051, 69030, 60532, 21968, 114612, 135515, 77998, 131729, 73636, 78331, 68752, 117550, 109390, 88720, 42369, 131205, 42316, 108798, 85827, 26397, 135023, 86947, 22048, 80598, 37670, 80193, 126371, 61639, 24318, 10882, 64430, 34916, 114058, 42278, 30553, 42487, 53614, 104107, 42414, 7711, 42433, 114132, 15496, 103575, 113090, 29837, 6394, 130009, 23792, 121854, 121988, 103557, 128035, 13136, 90294, 1225, 109355, 108574, 43780, 62305, 21668, 31022, 40843, 103091, 42302, 131556, 89258, 2290, 131403, 74109, 14360, 11346, 21905, 28977, 26014, 80738, 40584, 5348, 67356, 11156, 60663, 33885, 89161, 28432, 7585, 69168, 89836, 125187, 12126, 76960, 35733, 114242, 13920, 81154, 33985, 8632, 62928, 127323, 20407, 61154, 27983, 104052, 77090, 81174, 46214, 80797, 103600, 42897, 63380, 38114, 5574, 78673, 64221, 34704, 6140, 104367, 89644, 20555, 10284, 103342, 30650, 125555, 113671, 64395, 27075, 53977, 122466, 90191, 6559, 72895, 90131, 44673, 102269, 132777, 109718, 82007, 10487, 134508, 12476, 25926, 1487, 136229, 113792, 114636, 77701, 37159, 9052, 29847, 46815, 49889, 10910, 70663, 134576, 33934, 133189, 7723, 68495, 121990, 27485, 1023, 74679, 16402, 41772, 40851, 124845, 34156, 22542, 38486, 102665, 54435, 46891, 56973, 123233, 11073, 130059, 58790, 80496, 46802, 78884, 62398, 71830, 38830, 123231, 66424, 72431, 38962, 43104, 113413, 73702, 87998, 60313, 1069, 134926, 134265, 61109, 46224, 50287, 13798, 118413, 54261, 60935, 123464, 122582, 7032, 25690, 46749, 103138, 71660, 46050, 40164, 22087, 33170, 52273, 60092, 81939, 6216, 26051, 65279, 43482, 29997, 16416, 68652, 78418, 134316, 38440, 42381, 119698, 62538, 109712, 6833, 132801, 123145, 25720, 52646, 16364, 38723, 6118, 59131, 43754, 444, 109716, 6752, 73266, 45853, 59125, 54243, 33960, 6332, 113800, 67304, 56942, 72408, 90601, 103376, 62396, 35323, 121998, 10258, 32832, 27685, 57413, 103087, 123324, 22564, 13148, 124979, 1927, 89981, 136028, 103768, 58429, 15066, 119268, 30670, 7523, 61944, 56636, 85444, 68979, 68419, 25965, 130327, 111098, 122461, 15050, 67384, 123324, 81124, 69133, 6867, 64281, 25728, 77009, 78031, 20445, 54217, 114315, 7693, 34358, 9091, 40860, 46148, 31075, 134228, 58969, 113386, 11425, 22540, 72262, 71444, 125642, 6540, 27433, 38949, 40468, 72345, 56727, 55034, 113122, 116463, 135802, 79718, 81865, 109406, 123113, 28464, 44954, 89515, 89147, 136005, 33345, 42323, 25369, 68787, 89855, 125743, 34306, 109828, 66535, 22502, 37889, 15033, 90685, 119208, 6548, 65780, 102295, 70763, 9904, 65501, 9088, 114738, 125225, 44749, 71089, 108813, 54468, 30806, 70901, 70644, 71971, 71964, 78923, 7683, 122355, 90029, 62610, 70753, 130987, 122301, 102887, 1963, 88756, 13543, 50195, 133337, 29204, 86079, 129445, 123396, 84890, 131066, 46054, 37406, 79733, 124836, 37684, 57369, 5528, 124991, 53481, 21955, 21378, 69145, 63392, 6880, 122681, 8766, 100934, 65739, 123794, 6542, 117546, 58240, 42076, 77744, 108232, 135764, 16570, 68491, 90199, 122655, 63637, 65731, 446, 5513, 25410, 110975, 62293, 78926, 69327, 104117, 43066, 25930, 7599, 58859, 127290, 122663, 115674, 46751, 49714, 112851, 70640, 26504, 27725, 63220, 46016, 110917, 125841, 133462, 34349, 102370, 113807, 46016, 46016, 123780, 115385, 113983, 45298, 34374, 69311, 68566, 27637, 6910, 61938, 72524, 63630, 74065, 63043, 125332, 335, 26506, 26771, 60013, 32837, 25371, 74369, 6609, 21907, 125004, 1080, 121978, 45862, 134302, 90524, 54449, 110349, 103779, 76969, 61111, 39465, 89130, 111194, 90554, 68285, 22629, 54023, 113835, 11439, 104384, 12026, 132877, 129384, 131405, 33781, 39198, 9047, 53592, 90673, 67340, 27966, 48175, 49802, 78021, 73392, 89165, 43513, 126595, 123805, 58047, 16389, 6231, 78576, 35, 55387, 12778, 134393, 125149, 66449, 37178, 12778, 125149, 121956, 123450, 108767, 26923, 125149, 113284, 55833, 26923, 131426, 133391, 1135, 103573, 113284, 61255, 33437, 28754, 38183, 6576, 6829, 40180, 22788, 8754, 15985, 8752, 33533, 74568, 59025, 46839, 124901, 46613, 23028, 108224, 134381, 133391, 1135, 103573, 5346, 44004, 30956, 115736, 37308, 37225, 62140, 59487, 52716, 49718, 33431, 20553, 27438, 104479, 29831, 133595, 34575, 69325, 43112, 133595, 133595, 103311, 129346, 39215, 465, 9045, 113284, 129314, 25577, 78432, 27998, 110256, 35750, 63456, 109242, 16327, 125397, 20545, 15470, 43772, 10230, 37686, 131647, 115603, 2089, 26796, 102881, 25783, 104449, 2279, 25744, 125094, 13857, 67421, 133460, 122045, 6874, 45050, 124771, 71532, 21382, 1489, 124838, 110351, 85904, 34580, 122692, 40446, 35133, 108566, 108162, 38687, 11085, 73466, 22320, 34002, 130141, 61857, 65798, 33525, 110355, 58322, 121946, 113717, 8932, 12374, 124575, 1923, 125823, 58471, 134194, 125251, 67404, 8868, 27896, 16878, 60152, 135538, 46588, 58483, 126539, 34446, 70727, 78320, 110987, 28492, 131846, 57317, 77667, 11938, 72482, 14431, 22222, 27481, 104177, 16116, 80945, 135943, 21142, 50292, 129326, 127368, 44989, 41927, 12439, 66225, 57338, 81003, 44659, 30068, 103399, 54227, 38551, 42676, 81072, 1527, 37155, 16664, 73838, 57304, 133576, 104395, 124769, 57499, 27073, 15511, 60462, 65154, 25826, 64182, 60567, 37974, 11032, 116966, 85248, 37709, 13172, 50160, 126565, 87079, 118610, 34650, 103712, 11437, 45969, 127301, 30350, 123416, 90628, 68460, 11444, 123704, 58736, 8554, 5229, 46864, 5229, 41939, 38443, 77305, 24293, 11061, 68206, 11061, 86937, 104207, 40856, 70809, 58489, 80572, 22693, 29073, 38164, 122360, 105779, 90013, 34004, 86056, 58661, 26906, 67761, 113829, 28006, 85363, 15031, 123782, 100994, 42853, 58410, 131215, 41925, 12389, 86285, 113811, 133593, 34511, 70848, 42336, 104452, 64400, 113405, 26129, 39201, 80562, 58025, 40641, 1507, 44663, 133009, 116972, 42248, 123270, 103136, 8935, 38410, 65401, 103420, 30878, 382, 15325, 67394, 51, 126426, 131074, 132821, 134338, 125561, 122674, 40336, 10256, 103365, 65387, 76977, 10848, 46046, 15694, 26045, 380, 78685, 134469, 34430, 122144, 33871, 65594, 70776, 71996, 38915, 41, 46693, 35756, 58797, 46841, 14925, 35782, 85398, 126396, 37260, 60929, 38386, 5367, 67551, 63626, 109115, 59606, 33491, 133244, 85370, 45984, 77446, 129893, 29122, 135922, 43686, 68989, 26802, 13417, 68255, 65139, 116237, 59566, 59435, 90005, 10292, 123387, 69141, 6699, 21357, 87133, 35094, 62579, 121996, 55196, 134333, 34353, 43091, 30800, 12355, 122535, 25671, 61778, 23954, 1120, 133030, 122502, 133613, 61859, 135002, 34172, 89869, 61648, 28473, 81156, 10273, 59499, 129619, 113839, 37504, 12677, 123400, 136163, 49769, 113988, 61538, 25899, 73237, 13507, 126541, 37408, 131080, 2308, 37886, 115500, 14903, 13507, 22631, 70905, 104090, 65716, 113734, 33771, 33771, 57529, 132186, 108096, 50709, 60174, 62343, 122696, 60426, 64187, 133182, 42280, 15474, 64187, 64300, 67789, 108227, 103119, 44979, 32799, 44916, 61766, 132879, 7016, 80576, 30, 58465, 74360, 85415, 114291, 123454, 28067, 27734, 21394, 1151, 134237, 109251, 89205, 1151, 22137, 123796, 62664, 69420, 55694, 133651, 26802, 45094, 63720, 84926, 14837, 56662, 5578, 5231, 123142, 5581, 48194, 53629, 118581, 131227, 40160, 129970, 73848, 53947, 129931, 123774, 33806, 16309, 64438, 27575, 109614, 33551, 4827, 67338, 27160, 86781, 45915, 44727, 43964, 89843, 22571, 1920, 16882, 100962, 70787, 11057, 42342, 102631, 132134, 78977, 65559, 109618, 60735, 129312, 85365, 7750, 129986, 42121, 25592, 61535, 32992, 28241, 133541, 46191, 123484, 33696, 123511, 90151, 58801, 58857, 26878, 115794, 10968, 133229, 119663, 38900, 78476, 13327, 90112, 33818, 62559, 67334, 89531, 37702, 31004, 23956, 25482, 12421, 38964, 34176, 72852, 103112, 38389, 116092, 74117, 26828, 113075, 89510, 68443, 48462, 133319, 63813, 1521, 25906, 15459, 29994, 58459, 15969, 38124, 74180, 113621, 14371, 84856, 20400, 4958, 114622, 108582, 122566, 61011, 77332, 90188, 66318, 76973, 55956, 65857, 56834, 111482, 20415, 14305, 34590, 123346, 20504, 32846, 29888, 121996, 22495, 122535, 78933, 77818, 14903, 25594, 77339, 58877, 130101, 133541, 38904, 26878, 115794, 78933, 103553, 118225, 135002, 57954, 77773, 116564, 117572, 50229, 129320, 134184, 46691, 122657, 37229, 55773, 115794, 60773, 12799, 59023, 90642, 15491, 2302, 124638, 84846, 115695, 80294, 69327, 63817, 111146, 49336, 123838, 43679, 16340, 133199, 61257, 115425, 29230, 25547, 114656, 113734, 42126, 78933, 103553, 13392, 78541, 78541, 30317, 12792, 74675, 46200, 12410, 49920, 13057, 20547, 69092, 78494, 65465, 72341, 29242, 89180, 48158, 1519, 104046, 45840, 38541, 53633, 25594, 124700, 102907, 113104, 102612, 62347, 66262, 45067, 110909, 123140, 111493, 61073, 74375, 33234, 43280, 61103, 126373, 45090, 34714, 103559, 84794, 26823, 72486, 66418, 61133, 102349, 46731, 60701, 53639, 34120, 77050, 125259, 131509, 74309, 58535, 58248, 134481, 81135, 50219, 123256, 113885, 103787, 42613, 111397, 72795, 122303, 118225, 44414, 135927, 26889, 113295, 89163, 22500, 35782, 65392, 8864, 135835, 86298, 67662, 82003, 103569, 14519, 117590, 79716, 16660, 116970, 5919, 61028, 51133, 111498, 114323, 34882, 48435, 85456, 25778, 122370, 126541, 6273, 6273, 34137, 62557, 38655, 117572, 1073, 15347, 134184, 24124, 84772, 85908, 108749, 33496, 13142, 68985, 26471, 85902, 37266, 123475, 70746, 46849, 103313, 10912, 81014, 103474, 10300, 34876, 40880, 40880, 80613, 33797, 60950, 81128, 22506, 38581, 15349, 109907, 55489, 35340, 46069, 123601, 60754, 46782, 69076, 10877, 16580, 118419, 9937, 130288, 46727, 110278, 49338, 110384, 130089, 28587, 88621, 72793, 22606, 134483, 73767, 27158, 6829, 103455, 37185, 60002, 34014, 133522, 114654, 29943, 37536, 90605, 67804, 130299, 68981, 44019, 109911, 104511, 61905, 26039, 103433, 73765, 31145, 80422, 16023, 13557, 34948, 25403, 116038, 42997, 100988, 14380, 47987, 29102, 11326, 67525, 67795, 26213, 117651, 26887, 62349, 29958, 54402, 62022, 46827, 133221, 69010, 57950, 58487, 134340, 115693, 113083, 27721, 81080, 6664, 110347, 89527, 130085, 43130, 6730, 67666, 70657, 43752, 131531, 8829, 115740, 34351, 129475, 8568, 104068, 115703, 62020, 25375, 103328, 49885, 104436, 67826, 40882, 122487, 46895, 22180, 30897, 68119, 113962, 64260, 42062, 26779, 35411, 134169, 136547, 28458, 8844, 35766, 40158, 123106, 116340, 61596, 119223, 34638, 27761, 109459, 62130, 33861, 6142, 116951, 25904, 64218, 86706, 15974, 21999, 13394, 55873, 6919, 25833, 59077, 14406, 13844, 69066, 44116, 129316, 56649, 89657, 103306, 130081, 114838, 104413, 72459, 11161, 56649, 135082, 21896, 113447, 88610, 62030, 65048, 65156, 16112, 60758, 112836, 118593, 132152, 55489, 21144, 1884, 1065, 110904, 22019, 55503, 43008, 55216, 27679, 37314, 25197, 84832, 89125, 109396, 115796, 67993, 104205, 12121, 26495, 43139, 63463, 55410, 64276, 50592, 109240, 12338, 125572, 62542, 111423, 42029, 12035, 44099, 123339, 115436, 101016, 22314, 64201, 84888, 67639, 33699, 123554, 11564, 33276, 7100, 44740, 78666, 33881, 42971, 65803, 5745, 33975, 86807, 12679, 6701, 76965, 103818, 57943, 109695, 49906, 26, 61774, 62303, 71547, 133440, 63210, 57326, 85238, 113931, 84776, 26929, 26885, 133453, 67413, 65135, 37611, 33844, 70793, 46229, 88615, 118613, 32742, 129457, 46807, 68267, 72497, 13265, 46602, 32779, 135807, 441, 7102, 68593, 103923, 123094, 113712, 110934, 22782, 112731, 109760, 27071, 33967, 58200, 14255, 132223, 119569, 58886, 108129, 46747, 80267, 42594, 131641, 5530, 32977, 103418, 102279, 60955, 58810, 110940, 26007, 114234, 11470, 114487, 131239, 84820, 123784, 16321, 16332, 124589, 90575, 8658, 89956, 63788, 132318, 77383, 22487, 74221, 31051, 35163, 119231, 20324, 115734, 38836, 124567, 35215, 104566, 111435, 90311, 35440, 34515, 126576, 66320, 13222, 8862, 15468, 39461, 133660, 13509, 11570, 68320, 80564, 123209, 69162, 103359, 125382, 134244, 131367, 68487, 72789, 45073, 71287, 27483, 127617, 7529, 38355, 78422, 13074, 114228, 30992, 125090, 56725, 34718, 73866, 12115, 6124, 35622, 38659, 104401, 28452, 30527, 118470, 130321, 39034, 24295, 5329, 14856, 12797, 25667, 73816, 42995, 111473, 124897, 44803, 43907, 129980, 6561, 6150, 110928, 125477, 134595, 13076, 13134, 53631, 131848, 5950, 63833, 20185, 60933, 86084, 109216, 61033, 30492, 68502, 113833, 40647, 135890, 85949, 12501, 14273, 125819, 129382, 12400, 35381, 33825, 45061, 28598, 14244, 113647, 46593, 111448, 13536, 58601, 63107, 57315, 67407, 42834, 8893, 30912, 85934, 134924, 5962, 132459, 81180, 119870, 12396, 79016, 26057, 54384, 64772, 34288, 89979, 33516, 54380, 54257, 56651, 61442, 6997, 13154, 14901, 113929, 73479, 45950, 65583, 68260, 113114, 8473, 86988, 43824, 90067, 78564, 33311, 109859, 6754, 33409, 61158, 43453, 124821, 126589, 6593, 109585, 66254, 15707, 122015, 8870, 14235, 55688, 2298, 6339, 113831, 67674, 123733, 113847, 62299, 124891, 45753, 80232, 129324, 135788, 104196, 1905, 22148, 29886, 88743, 90025, 116939, 71665, 38579, 28438, 130970, 23952, 74098, 90603, 86303, 119863, 80940, 122049, 89190, 109187, 57277, 68394, 109485, 61711, 33237, 72402, 136031, 44025, 55692, 88821, 21140, 25658, 100964, 26438, 42957, 68423, 6863, 23048, 116079, 24312, 65784, 11992, 108101, 28059, 118596, 6218, 124636, 68110, 59367, 132461, 68295, 22608, 23767, 28258, 34408, 89822, 7068, 134922, 13804, 103813, 114896, 43110, 87811, 43351, 76954, 123356, 89145, 44948, 50078, 67535, 42256, 121973, 114317, 66430, 132833, 64290, 110566, 13255, 119217, 33969, 33969, 9942, 125234, 22330, 73886, 135800, 10863, 102271, 85784, 26121, 134869, 66227, 123326, 89954, 9079, 55200, 123188, 6160, 135813, 7587, 61582, 132817, 136161, 29234, 68411, 62747, 73800, 123754, 67738, 20199, 122284, 123167, 65545, 134253, 61741, 61607, 34099, 28269, 1915, 57342, 85413, 67372, 44805, 64987, 103188, 27834, 37940, 44809, 14237, 86668, 58263, 119469, 129451, 78008, 129943, 125680, 89243, 12685, 10766, 133258, 119423, 61790, 54410, 77434, 121928, 113746, 6152, 29217, 115438, 56989, 43046, 123227, 131131, 27544, 21826, 79731, 42990, 68399, 34555, 129434, 31027, 21792, 30531, 6390, 122730, 2124, 58570, 37966, 116374, 62142, 42966, 13846, 58888, 44104, 123389, 38448, 84842, 53513, 34366, 52650, 34680, 34118, 7721, 25738, 55870, 133216, 81131, 55489, 30888, 25433, 57415, 33429, 12604, 71667, 26135, 74188, 7490, 70714, 110938, 58895, 69137, 90598, 88740, 80605, 73394, 5344, 54457, 27847, 132887, 11965, 20578, 109595, 125745, 77845, 135054, 60802, 133283, 87451, 15705, 134457, 68785, 46616, 88849, 136175, 20635, 103367, 11982, 64406, 74624, 35872, 34338, 33232, 11915, 7721, 26001, 5954, 6259, 30780, 109450, 116214, 104044, 39040, 6399, 4887, 34428, 70824, 68858, 131854, 72635, 90536, 53476, 67581, 8440, 109599, 61546, 131223, 131842, 131613, 90665, 88737, 90572, 46233, 1249, 59994, 21388, 122726, 68957, 8642, 134495, 115492, 133193, 6212, 45254, 26913, 60460, 80611, 30050, 52219, 1144, 15466, 49669, 55252, 29211, 127787, 8778, 109127, 103822, 113428, 42939, 90550, 68589, 78324, 20170, 58948, 6002, 89871, 89871, 16944, 131383, 123873, 33003, 78596, 55214, 65845, 114903, 25529, 40448, 25985, 12334, 76981, 41864, 13883, 117555, 104169, 104169, 6519, 48227, 38931, 116025, 69329, 109710, 133385, 1971, 60783, 131410, 77278, 37167, 22683, 115584, 130164, 134162, 60178, 54270, 109440, 90579, 74590, 116522, 122520, 124881, 125689, 22664, 7495, 11462, 14626, 119233, 115723, 59084, 65197, 27525, 122055, 57429, 30755, 10281, 108103, 44797, 26425, 73601, 67693, 90616, 55509, 104314, 118560, 104568, 37718, 21988, 123466, 85404, 28505, 61064, 27694, 74433, 43256, 71935, 85228, 89682, 7092, 132842, 30328, 6148, 42049, 110970, 118459, 25803, 85780, 54429, 12652, 58396, 66445, 77282, 2138, 15705, 42471, 33998, 26940, 89134, 90017, 35446, 58916, 27035, 37606, 73498, 104465, 72845, 34390, 60667, 61660, 26210, 119219, 118656, 52261, 104075, 50679, 124840, 82082, 131558, 134853, 33969, 78983, 114506, 87303, 48169, 134457, 130043, 65805, 37526, 8609, 28609, 78200, 131047, 27362, 133517, 122655, 31127, 58032, 5282, 34716, 28084, 43734, 63176, 6703, 74305, 57161, 5075, 48437, 34898, 122539, 32863, 14313, 67336, 104009, 37512, 61030, 104541, 10999, 43134, 125751, 56575, 47989, 35613, 11047, 67531, 13050, 109281, 27451, 26909, 8505, 35640, 14283, 26025, 12772, 35113, 33785, 6905, 45294, 8505, 57427, 15070, 30765, 68629, 61719, 5359, 72540, 20509, 133250, 103458, 133260, 123744, 50621, 28611, 77758, 20237, 90632, 35204, 34523, 63718, 68617, 68785, 9874, 49891, 61600, 54274, 53783, 6130, 122574, 80189, 35117, 14362, 10206, 133564, 122551, 69107, 63423, 12610, 46742, 22127, 87308, 350, 35773, 22989, 131421, 469, 42899, 118358, 37534, 73613, 132861, 68314, 22670, 28097, 77179, 110942, 80197, 63103, 37213, 45961, 11045, 84846, 130944, 27035, 74307, 34360, 109115, 22838, 16393, 22838, 16393, 61598, 44795, 61598, 44795, 64980, 125948, 86093, 74307, 132161, 22838, 16393, 61598, 44795, 34360, 5555, 72529, 14983, 6651, 5555, 115758, 27959, 133253, 134359, 134980, 46616, 33241, 12612, 52257, 55829, 27056, 53590, 104062, 7374, 123841, 131645, 43929, 61017, 122010, 38432, 74681, 117527, 54247, 118556, 42267, 81990, 90561, 63093, 26808, 76967, 71536, 45827, 45921, 25934, 6999, 33969, 8971, 90197, 49883, 118425, 28448, 78657, 42242, 108218, 109714, 1889, 116235, 42590, 40156, 119385, 14979, 67773, 42066, 34284, 89975, 57250, 68291, 12295, 35383, 56971, 20290, 71574, 33924, 33029, 26814, 65259, 58533, 125153, 117568, 113856, 81928, 130096, 27854, 9889, 25975, 16082, 123622, 57187, 110395, 30140, 73611, 58589, 134974, 125747, 29872, 53975, 58417, 34559, 31046, 60563, 114609, 33306, 45090, 57574, 125533, 62612, 68285, 50363, 2083, 123272, 60785, 24297, 20514, 23776, 62287, 77810, 114924, 134734, 33045, 20276, 64759, 15018, 65292, 74436, 34392, 135961, 25381, 63685, 42323, 123723, 126438, 109434, 77847, 32761, 134578, 16927, 122368, 49733, 61842, 45885, 136152, 53573, 32818, 12472, 33280, 12511, 127066, 130029, 125579, 65165, 13411, 64408, 77095, 114311, 43472, 111204, 14246, 116046, 133223, 29857, 35109, 61760, 30544, 118548, 73494, 13344, 50294, 25776, 15281, 134465, 87701, 72781, 103397, 37183, 65788, 48429, 39194, 7024, 31002, 132787, 68983, 20434, 53, 45075, 63101, 69120, 104113, 14263, 112861, 6746, 27867, 49, 103680, 89615, 26206, 129627, 61098, 62325, 81124, 46883, 13078, 57739, 14931, 90303, 14931, 72850, 43672, 10306, 64390, 78547, 87155, 348, 135041, 133591, 62542, 12035, 28223, 57167, 2229, 12035, 76965, 2229, 11564, 33276, 7100, 76965, 129312, 68615, 14327, 24, 49729, 44110, 131635, 74430, 114046, 103379, 70722, 52577, 116001, 133311, 122324, 10031, 21815, 29960, 28122, 38728, 115397, 66512, 68759, 73632, 65543, 46881, 65189, 89548, 6914, 123205, 50711, 26059, 123460, 44943, 42119, 109434, 62646, 30481, 87815, 109802, 57535, 52539, 22036, 62622, 125011, 135829, 33317, 80596, 103718, 5612, 10200, 4939, 52539, 29977, 12044, 78401, 135798, 58030, 35172, 102871, 64765, 8903, 109445, 134347, 50697, 44426, 78000, 9029, 65592, 58607, 28442, 135831, 124993, 124968, 111074, 63687, 5502, 37675, 42112, 85222, 44983, 42327, 33375, 81070, 10278, 22654, 22550, 123101, 135952, 68387, 68283, 123714, 125241, 74582, 38777, 123243, 50036, 124782, 127772, 14961, 121852, 77920, 28699, 80568, 61770, 20282, 20316, 23050, 74731, 57255, 80507, 104570, 114225, 135936, 13837, 16373, 42992, 89634, 62694, 124691, 61643, 103131, 108098, 122347, 116044, 68882, 78543, 12672, 114900, 368, 69024, 78484, 46774, 26816, 104354, 11053, 27858, 38128, 28424, 126405, 49248, 37153, 131887, 131550, 73257, 28460, 22638, 22044, 68756, 90542, 119605, 77397, 108083, 119566, 70907, 134344, 133444, 37176, 74174, 33375, 72134, 135513, 89245, 1867, 114056, 32900, 5948, 64138, 129865, 65214, 60324, 131505, 5994, 38879, 88843, 63616, 59998, 26791, 111185, 55299, 113865, 1909, 114873, 114956, 72861, 58344, 104163, 129449, 129918, 113823, 90618, 43912, 34886, 57935, 16197, 12546, 45982, 23909, 6405, 78327, 77337, 25942, 46196, 55285, 59145, 28454, 112710, 104103, 5547, 81085, 129418, 57952, 50199, 32744, 45109, 78990, 360, 45100, 59164, 119215, 108170, 28095, 24325, 85269, 55277, 34436, 6738, 125178, 35319, 25924, 42665, 16068, 130925, 8660, 28695, 27249, 102934, 133503, 13357, 132142, 34635, 8463, 103121, 35760, 13892, 24346, 8503, 35472, 15448, 110336, 56839, 35903, 74216, 64441, 134989, 84762, 77806, 43517, 70934, 74044, 131447, 114792, 86313, 69350, 33602, 7685, 61243, 110999, 131512, 6829, 33859, 54235, 116378, 129416, 80410, 63014, 59147, 64691, 37652, 67676, 8308, 14851, 26897, 55777, 110359, 45751, 115409, 134353, 66545, 33520, 2258, 77820, 130309, 77400, 104358, 61139, 70968, 124973, 25999, 77408, 72515, 12406, 134290, 14630, 125384, 78937, 62676, 63635, 102287, 49765, 134200, 61007, 35738, 77740, 118607, 25431, 115483, 103557, 119255, 67567, 110984, 37193, 33297, 129900, 22156, 122004, 77853, 58769, 69102, 135959, 55293, 28, 90309, 57961, 8957, 43746, 30776, 60688, 42902, 111187, 56953, 60021, 1881, 77233, 70850, 58899, 6120, 30970, 124759, 14860, 58609, 68403, 65786, 85782, 38583, 11024, 20213, 129914, 61152, 87316, 54014, 66399, 44916, 33930, 80637, 115997, 27438, 53862, 59098, 134190, 72865, 65478, 42688, 44920, 20177, 65419, 72132, 439, 27879, 87473, 130139, 133285, 11566, 114030, 26868, 52723, 24260, 5317, 63204, 133100, 78466, 114359, 41944, 14887, 21821, 49878, 66541, 114248, 6126, 122527, 34394, 114588, 64410, 15454, 58844, 34184, 85296, 54237, 61887, 16126, 59444, 60575, 26270, 13870, 12135, 127370, 14373, 135957, 67741, 61709, 58281, 114658, 115821, 29268, 5497, 43429, 53604, 20469, 81893, 81893, 61261, 32822, 81176, 80466, 2260, 78503, 34442, 34442, 67828, 46872, 67354, 77899, 62874, 26125, 90570, 12334, 114746, 30355, 64166, 32785, 65370, 56828, 113994, 113994, 15958, 55204, 124906, 74696, 7459, 129960, 33228, 87088, 125376, 15717, 90570, 12334, 131162, 66416, 37980, 121912, 22326, 125157, 81902, 37510, 33359, 21408, 130862, 124728, 108235, 81858, 130997, 114590, 63109, 109210, 42240, 77831, 60170, 118256, 62567, 114908, 130877, 7455, 134607, 79009, 124644, 7713, 123708, 39459, 39459, 42220, 66229, 131049, 90069, 131437, 37310, 124695, 118370, 25181, 48213, 71910, 121922, 21374, 86794, 40639, 21647, 74440, 86933, 118372, 63005, 135545, 110944, 129406, 105793, 13896, 117576, 27356, 41956, 111135, 2312, 90517, 51138, 81005, 33355, 14487, 104446, 38135, 131051, 70750, 116306, 102368, 61764, 90079, 72670, 104169, 55967, 90570, 132629, 77330, 6170, 21162, 7744, 87327, 81186, 84854, 123222, 77303, 59455, 70781, 16880, 62926, 6811, 65306, 122686, 43304, 34006, 34584, 37660, 11468, 34193, 119659, 11988, 22032, 27478, 69408, 32676, 20205, 104409, 114820, 6271, 14858, 61484, 119435, 109223, 114952, 33033, 134862, 35450, 103467, 39186, 114271, 59477, 67, 78588, 12046, 119655, 68631, 32983, 71285, 131945, 32979, 21134, 58340, 42412, 77037, 25696, 62377, 60453, 129916, 70871, 71271, 33472, 109899, 30759, 65557, 32971, 68277, 131095, 64123, 127887, 77907, 136199, 134220, 22656, 59257, 30985, 49910, 81897, 35719, 20526, 131491, 103059, 134367, 33477, 134479, 103579, 49848, 119439, 124829, 87868, 112693, 103161, 88674, 55787, 40190, 60946, 65836, 61650, 37399, 131184, 38120, 68264, 110898, 13879, 125565, 16939, 102752, 133617, 110566, 125628, 87305, 39439, 65185, 72875, 53503, 58514, 133668, 115682, 30759, 61508, 15297, 127317, 115372, 38526, 33380, 49725, 134263, 113059, 37581, 67398, 124995, 74444, 103351, 110092, 53494, 30305, 6146, 64751, 28027, 135753, 104390, 46823, 10908, 10768, 5619, 52726, 55427, 103930, 62351, 60916, 89176, 5098, 113455, 6228, 30808, 78694, 135000, 113401, 15347, 134184, 49895, 20298, 65265, 102892, 113401, 77851, 48225, 25913, 68602, 77747, 86054, 50590, 40864, 63127, 89552, 122004, 11718, 30662, 20439, 14881, 59375, 61149, 44719, 48151, 112682, 35401, 52617, 12130, 108137, 55985, 7583, 73468, 38892, 111469, 114928, 69344, 43289, 64751, 41763, 45990, 89816, 52200, 65251, 113411, 86704, 45105, 50049, 118603, 87835, 74239, 135856, 133073, 80552, 5733, 64573, 85226, 13205, 126551, 43302, 109392, 71534, 43933, 60502, 88834, 48207, 129580, 25558, 125098, 90520, 4897, 63408, 2283, 5532, 87005, 6619, 70778, 2100, 46753, 6927, 42465, 57156, 57156, 43796, 50085, 73481, 74026, 29883, 49906, 65098, 123088, 70830, 62347, 38779, 38130, 65179, 65356, 90064, 53959, 6138, 114592, 103383, 77825, 50625, 22680, 110568, 27556, 44424, 103789, 42908, 57931, 63493, 6707, 129964, 56949, 125481, 87338, 33922, 60720, 6403, 118463, 63166, 35190, 12606, 37521, 10304, 25760, 67519, 42963, 55210, 125845, 30797, 87077, 8780, 43515, 25665, 7078, 54382, 57409, 88670, 8975, 133324, 74204, 114030, 125484, 86935, 62820, 29258, 5596, 56924, 112946, 111200, 11988, 67791, 114044, 8881, 8490, 123764, 81082, 7064, 77389, 40893, 53979, 84688, 111125, 88825, 62163, 61889, 44114, 9039, 90003, 64256, 123237, 1221, 70783, 61646, 109572, 14229, 122472, 74592, 63395, 60017, 123491, 66420, 37921, 68543, 58554, 113977, 6202, 61173, 5309, 51117, 105788, 1529, 43623, 131092, 86709, 108092, 122497, 42338, 49868, 1968, 72419, 125565, 78712, 85458, 5077, 103338, 57380, 108120, 42214, 40429, 35777, 31080, 132891, 64195, 39463, 74154, 126428, 114736, 122013, 8951, 8654, 43157, 64302, 10204, 22322, 38908, 61061, 44766, 136002, 26009, 104409, 26274, 77404, 113397, 65497, 113737, 12656, 71500, 80938, 61489, 22644, 44690, 126563, 77173, 8758, 84883, 25377, 88830, 22413, 42310, 8818, 33384, 34623, 72319, 76999, 39235, 26448, 30525, 44420, 53557, 12443, 27447, 42038, 115742, 67382, 27177, 6416, 46144, 84838, 21966, 61849, 22640, 31053, 32783, 27521, 103705, 133686, 50042, 46041, 7500, 87825, 109610, 103589, 27688, 64205, 69020, 58782, 50597, 113704, 132144, 9900, 80503, 77742, 52269, 60791, 74547, 126568, 35125, 12119, 109502, 11943, 52227, 42925, 104536, 48075, 7083, 134489, 134580, 112705, 26788, 73877, 50101, 87335, 21322, 7687, 56918, 5670, 14550, 108188, 43337, 68262, 78956, 32746, 33783, 26268, 6839, 37949, 13840, 72629, 112950, 44701, 38883, 34937, 6354, 44999, 87469, 125013, 65195, 37229, 109851, 136047, 61695, 114842, 84840, 21806, 45874, 129342, 104084, 132206, 132206, 125046, 72843, 133512, 14541, 73246, 34304, 103145, 72425, 104423, 85275, 130959, 32990, 12357, 31006, 43990, 133277, 64393, 26754, 72637, 55391, 60542, 10872, 11472, 21652, 89111, 102695, 22621, 67521, 38560, 43175, 4893, 124861, 70957, 6717, 84834, 43028, 24329, 72512, 57336, 28111, 46757, 110216, 88617, 115497, 30817, 108789, 29113, 125009, 61267, 37196, 60918, 24251, 49904, 68262, 103422, 33783, 65195, 37229, 70957, 131889, 15464, 48125, 28065, 43676, 28420, 114761, 123275, 68979, 42040, 124546, 27551, 44694, 60813, 38495, 6187, 86718, 67583, 129379, 28456, 28456, 67574, 49871, 103483, 25539, 42107, 45069, 79799, 5966, 105781, 28607, 129402, 125229, 29979, 21362, 7380, 72114, 74467, 15043, 34697, 20292, 119596, 80936, 85947, 39223, 134806, 123482, 129331, 87866, 43828, 27551, 70667, 6176, 8612, 6671, 33417, 90638, 52537, 87699, 134588, 132486, 45281, 73747, 133599, 103811, 67736, 16387, 44433, 34101, 103695, 26452, 123220, 68639, 25742, 22596, 57297, 26200, 116311, 125577, 134461, 68648, 27723, 130381, 27166, 22489, 42216, 62028, 77376, 38543, 21878, 69348, 116541, 86779, 65133, 59123, 60745, 57271, 73822, 113708, 22130, 55420, 108158, 64749, 63716, 122629, 32967, 114638, 26786, 14879, 25521, 124753, 85240, 52194, 5731, 68641, 132221, 109398, 122364, 34362, 50603, 27622, 122633, 125092, 24254, 14618, 34874, 35632, 131398, 8546, 35389, 12990, 108735, 126526, 8833, 77345, 40643, 130049, 43455, 33619, 61120, 132851, 81937, 16582, 70805, 6166, 89359, 13924, 118261, 45913, 77201, 14470, 63447, 1937, 134985, 50227, 7697, 61249, 28724, 115672, 25381, 71593, 62710, 74, 114734, 116450, 133398, 42323, 135764, 133595, 103422, 78476, 89871, 34442, 77086, 50229, 81847, 21978, 77750, 14275, 74168, 61521, 127307, 34954, 34965, 113731, 49693, 134246, 68301, 90540, 49278, 103667, 64554, 55897, 11163, 55291, 33043, 53536, 132879, 13894, 58229, 13375, 116963, 11150, 103414, 7013, 67752, 73509, 134369, 38141, 7013, 15078, 12509, 74112, 101024, 89533, 60000, 86666, 34910, 21804, 134445, 6567, 66215, 109597, 103159, 6241, 89818, 63123, 69294, 71506, 21813, 68153, 26925, 20543, 44918, 113927, 1231, 65750, 108090, 90331, 49846, 8484, 25758, 37187, 16114, 113819, 129594, 77007, 89105, 46077, 129885, 21674, 27069, 28485, 60446, 7506, 122661, 109265, 72330, 63131, 72429, 134457, 78676, 135841, 34110, 5237, 134811, 133090, 4904, 84816, 68310, 44661, 38828, 74480, 69072, 87819, 90661, 29096, 86664, 108183, 46187, 45996, 109227, 43787, 88607, 87157, 65253, 132172, 65042, 6912, 64284, 37416, 71943, 35393, 52683, 25932, 116355, 61232, 63823, 103104, 30319, 87325, 79714, 14382, 2043, 52679, 119612, 64767, 31082, 78876, 34858, 25724, 30950, 60682, 116518, 56640, 28728, 131610, 77086, 10607, 108505, 57586, 27049, 77412, 31064, 14530, 129285, 108503, 57963, 43756, 33315, 2041, 104105, 42325, 65125, 22777, 116171, 77891, 115804, 20455, 5213, 114583, 16314, 9103, 114898, 44752, 133595, 134960, 50229, 42047, 12393, 68867, 42459, 8920, 77066, 114950, 81098, 114946, 37157, 20574, 5526, 118652, 134314, 24126, 108557, 20270, 1935, 8760, 44725, 125847, 129952, 41954, 108802, 23903, 122326, 81062, 55769, 109212, 66256, 123414, 76956, 78931, 43798, 104034, 14494, 43037, 56826, 26464, 13545, 67672, 40182, 54233, 77784, 61664, 42212, 113741, 34967, 33498, 113664, 22652, 104539, 42923, 43001, 125155, 41783, 131041, 8852, 6885, 58342, 65088, 131858, 46231, 86785, 88745, 61227, 6769, 59479, 40444, 34861, 108783, 55810, 35180, 5250, 32682, 1133, 68619, 16215, 62832, 123702, 132227, 109469, 38887, 38175, 46063, 43742, 77750, 32808, 50320, 7359, 11010, 26262, 20892, 32917, 50675, 56885, 62625, 33557, 123549, 89251, 74226, 58816, 37410, 37942, 109871, 56585, 46699, 129929, 134310, 125499, 30886, 81862, 11316, 88845, 102723, 114330, 9049, 15319, 136559, 23950, 45119, 134877, 28498, 30514, 67655, 114877, 65523, 38299, 16218, 22076, 124790, 111001, 25983, 34414, 27655, 108807, 41861, 77752, 11911, 103425, 125839, 63839, 117535, 15286, 102936, 43509, 60430, 122732, 13409, 69411, 60709, 55202, 61491, 13004, 43064, 14293, 16421, 134318, 25575, 104406, 35161, 73682, 114964, 58457, 77032, 38695, 72161, 2281, 61776, 86059, 6887, 64370, 2330, 114888, 43463, 109874, 111005, 11067, 43692, 58501, 27727, 2271, 136227, 23948, 34656, 8438, 135924, 13243, 10941, 109125, 65792, 119584, 9069, 61926, 15331, 90142, 10037, 30770, 69291, 114850, 70689, 58477, 15956, 60569, 58433, 43938, 125035, 111500, 134877, 5237, 102705, 40180, 5237, 49744, 26442, 26141, 135821, 14496, 114823, 23932, 125280, 14893, 71974, 122753, 118395, 13174, 103175, 133681, 60075, 60571, 14449, 38968, 125644, 130094, 126629, 6000, 57363, 114025, 14990, 1893, 102721, 66533, 13196, 33853, 89109, 5520, 13220, 50325, 132204, 23782, 68621, 15989, 119236, 129386, 52624, 63026, 12515, 8812, 78562, 8854, 71992, 59497, 55281, 8874, 6831, 65273, 103684, 63378, 134982, 46160, 131400, 78696, 33799, 72465, 72258, 10946, 84850, 109587, 7717, 30463, 6162, 51158, 44027, 84828, 113399, 46590, 42450, 28041, 71988, 123164, 56579, 89333, 55291, 34563, 130075, 124904, 116946, 130954, 5741, 116937, 70822, 26131, 37172, 28430, 10997, 38555, 11001, 16027, 80994, 6742, 59438, 131548, 29893, 46194, 50201, 22227, 32793, 103439, 78531, 89619, 131143, 63766, 102364, 50213, 35868, 84822, 2316, 22038, 135918, 41853, 13002, 40828, 27767, 6321, 125190, 78202, 58928, 70708, 56934, 58799, 46006, 54032, 5541, 6695, 38466, 118550, 65193, 131620, 6923, 34958, 66208, 116088, 71491, 68841, 116096, 35784, 43132, 69335, 102667, 32852, 64778, 63792, 79745, 11039, 77827, 74576, 33795, 113960, 35336, 64134, 26029, 28264, 52541, 42115, 27657, 35642, 129459, 10297, 86066, 108216, 63691, 25770, 131544, 10889, 84870, 11341, 34550, 43793, 87793, 89977, 49712, 8961, 69413, 46018, 89103, 103353, 5363, 103954, 52729, 6134, 14954, 88749, 6916, 114744, 130083, 72119, 43098, 121961, 34893, 16384, 62327, 1067, 48457, 7563, 81103, 90335, 30761, 34661, 109273, 6835, 131099, 61553, 6168, 88632, 104509, 64386, 342, 11003, 108153, 16007, 27529, 55218, 64250, 134279, 20284, 461, 77351, 131489, 12324, 103110, 78474, 59031, 61571, 21880, 89156, 26793, 27624, 30819, 80925, 35905, 14269, 56911, 131537, 111191, 43914, 33489, 43994, 77918, 109163, 6653, 34300, 80216, 13127, 79743, 102606, 131567, 110211, 57263, 40649, 68506, 124850, 13209, 114869, 61131, 55868, 60471, 29986, 130913, 73743, 58824, 30740, 109290, 5247, 125626, 117533, 33901, 87067, 103797, 64538, 11003, 63449, 65397, 126423, 61222, 125275, 72532, 459, 30810, 65249, 116976, 34450, 117570, 57432, 131824, 110588, 102700, 103183, 123151, 71951, 68155, 114742, 88605, 113062, 28737, 8945, 61069, 103391, 60546, 109295, 114960, 7508, 60468, 61040, 125497, 42981, 68457, 131140, 33239, 34908, 123489, 55757, 64304, 129413, 87983, 57765, 42318, 62322, 38143, 123122, 124648, 38573, 133679, 84766, 27769, 74159, 22310, 44931, 6655, 86086, 132932, 20463, 133262, 89664, 46832, 34377, 42320, 123330, 58267, 64495, 54010, 29895, 68779, 123710, 12351, 62375, 113449, 115592, 5946, 28243, 40424, 65741, 55800, 28730, 80484, 33485, 109096, 33, 40878, 62666, 131374, 62577, 59037, 30373, 58473, 24304, 33855, 109475, 1082, 116212, 72159, 41937, 125024, 45868, 113426, 131719, 89194, 110991, 85442, 38457, 53584, 114035, 117548, 77284, 30510, 67326, 81166, 74626, 7057, 81839, 55382, 65302, 26041, 46618, 6572, 12525, 6763, 16323, 126445, 67417, 22205, 88623, 11330, 66543, 65827, 80492, 80226, 72096, 61239, 74302, 113072, 50694, 132475, 125587, 60789, 130055, 5081, 21404, 53490, 58498, 129906, 30512, 28979, 37591, 84798, 59104, 39072, 62313, 67572, 122436, 131439, 85454, 30768, 68843, 5338, 44731, 55765, 87466, 130244, 133672, 68451, 109404, 110522, 109487, 115490, 43347, 62688, 134851, 78961, 26773, 26027, 113817, 16099, 26196, 26818, 104473, 109463, 68783, 14352, 133014, 121850, 58548, 111437, 28109, 70927, 7106, 81152, 112703, 71813, 30631, 32767, 65367, 78994, 8620, 54478, 45313, 124618, 113290, 117615, 13549, 34678, 87310, 63206, 63694, 80480, 62708, 5256, 58511, 86927, 6889, 130151, 136189, 68894, 109091, 57, 29840, 68499, 40440, 45957, 71906, 22780, 90104, 42387, 28073, 5297, 125322, 74673, 102725, 123126, 15481, 108115, 113087, 132174, 135080, 135932, 43331, 28232, 134335, 57181, 129291, 27047, 22312, 118654, 53575, 30980, 1869, 109383, 25922, 34946, 34904, 27996, 55274, 103781, 129922, 12417, 115726, 71999, 103061, 72091, 100900, 38721, 41779, 135894, 60747, 116974, 13853, 74364, 22220, 9897, 115764, 49716, 12021, 124552, 39032, 42218, 62018, 63837, 28571, 132815, 5350 }; // }}} typedef struct { uint32_t children_offset; uint32_t match_offset; } word_trie; static const word_trie all_trie_nodes[33094] = { // {{{ { .children_offset=1, .match_offset=0 }, { .children_offset=31, .match_offset=0 }, { .children_offset=0, .match_offset=20303 }, { .children_offset=38, .match_offset=0 }, { .children_offset=40, .match_offset=0 }, { .children_offset=42, .match_offset=0 }, { .children_offset=0, .match_offset=64276 }, { .children_offset=0, .match_offset=136161 }, { .children_offset=45, .match_offset=0 }, { .children_offset=47, .match_offset=0 }, { .children_offset=49, .match_offset=0 }, { .children_offset=0, .match_offset=34385 }, { .children_offset=51, .match_offset=0 }, { .children_offset=53, .match_offset=0 }, { .children_offset=55, .match_offset=0 }, { .children_offset=58, .match_offset=0 }, { .children_offset=0, .match_offset=104171 }, { .children_offset=60, .match_offset=0 }, { .children_offset=0, .match_offset=125638 }, { .children_offset=62, .match_offset=0 }, { .children_offset=64, .match_offset=0 }, { .children_offset=66, .match_offset=0 }, { .children_offset=0, .match_offset=23030 }, { .children_offset=68, .match_offset=0 }, { .children_offset=0, .match_offset=28043 }, { .children_offset=70, .match_offset=0 }, { .children_offset=0, .match_offset=57333 }, { .children_offset=0, .match_offset=42932 }, { .children_offset=73, .match_offset=0 }, { .children_offset=80, .match_offset=0 }, { .children_offset=82, .match_offset=0 }, { .children_offset=0, .match_offset=104519 }, { .children_offset=84, .match_offset=0 }, { .children_offset=86, .match_offset=0 }, { .children_offset=88, .match_offset=0 }, { .children_offset=90, .match_offset=0 }, { .children_offset=92, .match_offset=0 }, { .children_offset=0, .match_offset=57255 }, { .children_offset=94, .match_offset=0 }, { .children_offset=96, .match_offset=0 }, { .children_offset=0, .match_offset=9017 }, { .children_offset=98, .match_offset=0 }, { .children_offset=100, .match_offset=0 }, { .children_offset=0, .match_offset=115677 }, { .children_offset=102, .match_offset=0 }, { .children_offset=105, .match_offset=0 }, { .children_offset=107, .match_offset=0 }, { .children_offset=109, .match_offset=0 }, { .children_offset=0, .match_offset=16316 }, { .children_offset=111, .match_offset=0 }, { .children_offset=113, .match_offset=0 }, { .children_offset=115, .match_offset=0 }, { .children_offset=117, .match_offset=0 }, { .children_offset=119, .match_offset=0 }, { .children_offset=0, .match_offset=61919 }, { .children_offset=121, .match_offset=0 }, { .children_offset=123, .match_offset=0 }, { .children_offset=125, .match_offset=0 }, { .children_offset=127, .match_offset=0 }, { .children_offset=129, .match_offset=0 }, { .children_offset=0, .match_offset=38536 }, { .children_offset=131, .match_offset=0 }, { .children_offset=0, .match_offset=131020 }, { .children_offset=168, .match_offset=0 }, { .children_offset=0, .match_offset=62309 }, { .children_offset=0, .match_offset=67378 }, { .children_offset=0, .match_offset=74371 }, { .children_offset=176, .match_offset=0 }, { .children_offset=0, .match_offset=116309 }, { .children_offset=0, .match_offset=123620 }, { .children_offset=0, .match_offset=55256 }, { .children_offset=178, .match_offset=0 }, { .children_offset=0, .match_offset=110371 }, { .children_offset=180, .match_offset=0 }, { .children_offset=191, .match_offset=0 }, { .children_offset=0, .match_offset=39078 }, { .children_offset=0, .match_offset=12660 }, { .children_offset=0, .match_offset=12495 }, { .children_offset=0, .match_offset=42059 }, { .children_offset=201, .match_offset=65490 }, { .children_offset=0, .match_offset=34586 }, { .children_offset=203, .match_offset=34462 }, { .children_offset=0, .match_offset=63202 }, { .children_offset=0, .match_offset=43738 }, { .children_offset=0, .match_offset=113098 }, { .children_offset=0, .match_offset=105774 }, { .children_offset=0, .match_offset=56657 }, { .children_offset=206, .match_offset=0 }, { .children_offset=217, .match_offset=58480 }, { .children_offset=0, .match_offset=30646 }, { .children_offset=0, .match_offset=2038 }, { .children_offset=0, .match_offset=35194 }, { .children_offset=0, .match_offset=64423 }, { .children_offset=219, .match_offset=6638 }, { .children_offset=0, .match_offset=77378 }, { .children_offset=0, .match_offset=11950 }, { .children_offset=0, .match_offset=33955 }, { .children_offset=221, .match_offset=15700 }, { .children_offset=0, .match_offset=119379 }, { .children_offset=0, .match_offset=42610 }, { .children_offset=0, .match_offset=43469 }, { .children_offset=223, .match_offset=0 }, { .children_offset=0, .match_offset=64367 }, { .children_offset=0, .match_offset=134503 }, { .children_offset=0, .match_offset=45102 }, { .children_offset=0, .match_offset=114794 }, { .children_offset=0, .match_offset=130899 }, { .children_offset=0, .match_offset=50289 }, { .children_offset=234, .match_offset=65842 }, { .children_offset=0, .match_offset=7733 }, { .children_offset=0, .match_offset=58027 }, { .children_offset=236, .match_offset=134230 }, { .children_offset=0, .match_offset=131156 }, { .children_offset=0, .match_offset=61655 }, { .children_offset=238, .match_offset=0 }, { .children_offset=0, .match_offset=12362 }, { .children_offset=0, .match_offset=126603 }, { .children_offset=249, .match_offset=125212 }, { .children_offset=0, .match_offset=70925 }, { .children_offset=0, .match_offset=7574 }, { .children_offset=0, .match_offset=84867 }, { .children_offset=0, .match_offset=30982 }, { .children_offset=0, .match_offset=13502 }, { .children_offset=0, .match_offset=119598 }, { .children_offset=0, .match_offset=14844 }, { .children_offset=251, .match_offset=77925 }, { .children_offset=0, .match_offset=58188 }, { .children_offset=253, .match_offset=0 }, { .children_offset=264, .match_offset=41922 }, { .children_offset=0, .match_offset=46210 }, { .children_offset=266, .match_offset=50051 }, { .children_offset=0, .match_offset=11435 }, { .children_offset=268, .match_offset=43353 }, { .children_offset=0, .match_offset=116446 }, { .children_offset=270, .match_offset=73679 }, { .children_offset=0, .match_offset=1897 }, { .children_offset=0, .match_offset=43039 }, { .children_offset=272, .match_offset=34103 }, { .children_offset=0, .match_offset=52587 }, { .children_offset=274, .match_offset=108122 }, { .children_offset=0, .match_offset=1257 }, { .children_offset=0, .match_offset=43244 }, { .children_offset=0, .match_offset=33822 }, { .children_offset=0, .match_offset=13156 }, { .children_offset=0, .match_offset=10600 }, { .children_offset=277, .match_offset=0 }, { .children_offset=0, .match_offset=102672 }, { .children_offset=0, .match_offset=135077 }, { .children_offset=0, .match_offset=2106 }, { .children_offset=0, .match_offset=104379 }, { .children_offset=0, .match_offset=131884 }, { .children_offset=0, .match_offset=103170 }, { .children_offset=0, .match_offset=77334 }, { .children_offset=0, .match_offset=15303 }, { .children_offset=0, .match_offset=124697 }, { .children_offset=0, .match_offset=24362 }, { .children_offset=288, .match_offset=0 }, { .children_offset=0, .match_offset=86722 }, { .children_offset=0, .match_offset=5 }, { .children_offset=0, .match_offset=60443 }, { .children_offset=0, .match_offset=44780 }, { .children_offset=0, .match_offset=11153 }, { .children_offset=0, .match_offset=25412 }, { .children_offset=299, .match_offset=102648 }, { .children_offset=0, .match_offset=126553 }, { .children_offset=0, .match_offset=35775 }, { .children_offset=0, .match_offset=132150 }, { .children_offset=0, .match_offset=74223 }, { .children_offset=0, .match_offset=9886 }, { .children_offset=0, .match_offset=132863 }, { .children_offset=303, .match_offset=0 }, { .children_offset=0, .match_offset=136233 }, { .children_offset=0, .match_offset=27584 }, { .children_offset=0, .match_offset=65838 }, { .children_offset=0, .match_offset=52628 }, { .children_offset=0, .match_offset=40162 }, { .children_offset=0, .match_offset=103714 }, { .children_offset=0, .match_offset=34292 }, { .children_offset=0, .match_offset=134173 }, { .children_offset=0, .match_offset=38524 }, { .children_offset=0, .match_offset=135934 }, { .children_offset=314, .match_offset=0 }, { .children_offset=0, .match_offset=38420 }, { .children_offset=0, .match_offset=112663 }, { .children_offset=0, .match_offset=61565 }, { .children_offset=0, .match_offset=8622 }, { .children_offset=0, .match_offset=34669 }, { .children_offset=0, .match_offset=46650 }, { .children_offset=0, .match_offset=86939 }, { .children_offset=0, .match_offset=84818 }, { .children_offset=0, .match_offset=86307 }, { .children_offset=0, .match_offset=132176 }, { .children_offset=325, .match_offset=0 }, { .children_offset=0, .match_offset=8452 }, { .children_offset=0, .match_offset=125616 }, { .children_offset=0, .match_offset=55297 }, { .children_offset=0, .match_offset=135502 }, { .children_offset=0, .match_offset=22824 }, { .children_offset=0, .match_offset=102905 }, { .children_offset=0, .match_offset=84863 }, { .children_offset=336, .match_offset=6237 }, { .children_offset=0, .match_offset=15683 }, { .children_offset=338, .match_offset=14309 }, { .children_offset=0, .match_offset=63796 }, { .children_offset=0, .match_offset=123385 }, { .children_offset=340, .match_offset=0 }, { .children_offset=351, .match_offset=0 }, { .children_offset=362, .match_offset=14920 }, { .children_offset=365, .match_offset=0 }, { .children_offset=367, .match_offset=0 }, { .children_offset=369, .match_offset=0 }, { .children_offset=0, .match_offset=5241 }, { .children_offset=0, .match_offset=34170 }, { .children_offset=371, .match_offset=60752 }, { .children_offset=0, .match_offset=20643 }, { .children_offset=373, .match_offset=20432 }, { .children_offset=0, .match_offset=370 }, { .children_offset=0, .match_offset=80928 }, { .children_offset=375, .match_offset=38885 }, { .children_offset=0, .match_offset=104382 }, { .children_offset=0, .match_offset=5227 }, { .children_offset=0, .match_offset=26190 }, { .children_offset=379, .match_offset=21894 }, { .children_offset=0, .match_offset=81178 }, { .children_offset=0, .match_offset=132180 }, { .children_offset=0, .match_offset=125257 }, { .children_offset=382, .match_offset=134970 }, { .children_offset=0, .match_offset=125215 }, { .children_offset=0, .match_offset=133601 }, { .children_offset=0, .match_offset=133634 }, { .children_offset=0, .match_offset=115788 }, { .children_offset=0, .match_offset=39231 }, { .children_offset=386, .match_offset=0 }, { .children_offset=397, .match_offset=27641 }, { .children_offset=0, .match_offset=34364 }, { .children_offset=0, .match_offset=6574 }, { .children_offset=0, .match_offset=33415 }, { .children_offset=0, .match_offset=60455 }, { .children_offset=0, .match_offset=65476 }, { .children_offset=0, .match_offset=6987 }, { .children_offset=400, .match_offset=133543 }, { .children_offset=0, .match_offset=73790 }, { .children_offset=0, .match_offset=72857 }, { .children_offset=0, .match_offset=123254 }, { .children_offset=0, .match_offset=123398 }, { .children_offset=0, .match_offset=124977 }, { .children_offset=402, .match_offset=0 }, { .children_offset=413, .match_offset=115434 }, { .children_offset=0, .match_offset=78399 }, { .children_offset=0, .match_offset=90687 }, { .children_offset=0, .match_offset=77430 }, { .children_offset=0, .match_offset=119624 }, { .children_offset=0, .match_offset=21175 }, { .children_offset=415, .match_offset=135021 }, { .children_offset=0, .match_offset=12763 }, { .children_offset=0, .match_offset=46030 }, { .children_offset=0, .match_offset=81184 }, { .children_offset=0, .match_offset=44787 }, { .children_offset=0, .match_offset=27043 }, { .children_offset=417, .match_offset=0 }, { .children_offset=0, .match_offset=74442 }, { .children_offset=428, .match_offset=133464 }, { .children_offset=0, .match_offset=25535 }, { .children_offset=0, .match_offset=129461 }, { .children_offset=0, .match_offset=35103 }, { .children_offset=0, .match_offset=50569 }, { .children_offset=430, .match_offset=35369 }, { .children_offset=0, .match_offset=68625 }, { .children_offset=0, .match_offset=14981 }, { .children_offset=0, .match_offset=29100 }, { .children_offset=0, .match_offset=5311 }, { .children_offset=0, .match_offset=14847 }, { .children_offset=432, .match_offset=0 }, { .children_offset=0, .match_offset=15713 }, { .children_offset=0, .match_offset=62934 }, { .children_offset=0, .match_offset=26446 }, { .children_offset=0, .match_offset=30876 }, { .children_offset=0, .match_offset=11051 }, { .children_offset=0, .match_offset=112826 }, { .children_offset=0, .match_offset=115756 }, { .children_offset=0, .match_offset=119415 }, { .children_offset=0, .match_offset=125739 }, { .children_offset=0, .match_offset=67544 }, { .children_offset=443, .match_offset=0 }, { .children_offset=0, .match_offset=90134 }, { .children_offset=0, .match_offset=68643 }, { .children_offset=0, .match_offset=116216 }, { .children_offset=0, .match_offset=22786 }, { .children_offset=0, .match_offset=111085 }, { .children_offset=0, .match_offset=34631 }, { .children_offset=0, .match_offset=34345 }, { .children_offset=0, .match_offset=119264 }, { .children_offset=0, .match_offset=113721 }, { .children_offset=0, .match_offset=122468 }, { .children_offset=454, .match_offset=0 }, { .children_offset=0, .match_offset=58603 }, { .children_offset=0, .match_offset=124852 }, { .children_offset=0, .match_offset=27692 }, { .children_offset=0, .match_offset=45940 }, { .children_offset=0, .match_offset=34280 }, { .children_offset=0, .match_offset=13553 }, { .children_offset=0, .match_offset=32981 }, { .children_offset=0, .match_offset=27061 }, { .children_offset=0, .match_offset=10970 }, { .children_offset=0, .match_offset=103069 }, { .children_offset=465, .match_offset=0 }, { .children_offset=0, .match_offset=60765 }, { .children_offset=0, .match_offset=119225 }, { .children_offset=0, .match_offset=135523 }, { .children_offset=0, .match_offset=37538 }, { .children_offset=0, .match_offset=62561 }, { .children_offset=0, .match_offset=71815 }, { .children_offset=0, .match_offset=81091 }, { .children_offset=0, .match_offset=80191 }, { .children_offset=0, .match_offset=123766 }, { .children_offset=0, .match_offset=1961 }, { .children_offset=476, .match_offset=0 }, { .children_offset=0, .match_offset=29250 }, { .children_offset=0, .match_offset=22987 }, { .children_offset=0, .match_offset=85261 }, { .children_offset=0, .match_offset=29126 }, { .children_offset=0, .match_offset=37404 }, { .children_offset=0, .match_offset=117656 }, { .children_offset=0, .match_offset=6122 }, { .children_offset=0, .match_offset=30359 }, { .children_offset=0, .match_offset=116345 }, { .children_offset=0, .match_offset=23942 }, { .children_offset=487, .match_offset=0 }, { .children_offset=0, .match_offset=131820 }, { .children_offset=0, .match_offset=115981 }, { .children_offset=0, .match_offset=37947 }, { .children_offset=0, .match_offset=123090 }, { .children_offset=0, .match_offset=134998 }, { .children_offset=0, .match_offset=128027 }, { .children_offset=0, .match_offset=12761 }, { .children_offset=0, .match_offset=25917 }, { .children_offset=0, .match_offset=13500 }, { .children_offset=0, .match_offset=103820 }, { .children_offset=498, .match_offset=15677 }, { .children_offset=509, .match_offset=0 }, { .children_offset=0, .match_offset=8644 }, { .children_offset=0, .match_offset=43451 }, { .children_offset=520, .match_offset=123696 }, { .children_offset=0, .match_offset=58355 }, { .children_offset=0, .match_offset=61559 }, { .children_offset=0, .match_offset=81120 }, { .children_offset=0, .match_offset=33983 }, { .children_offset=0, .match_offset=46877 }, { .children_offset=0, .match_offset=73775 }, { .children_offset=523, .match_offset=53577 }, { .children_offset=0, .match_offset=61653 }, { .children_offset=0, .match_offset=12658 }, { .children_offset=525, .match_offset=131392 }, { .children_offset=0, .match_offset=131200 }, { .children_offset=527, .match_offset=0 }, { .children_offset=0, .match_offset=25793 }, { .children_offset=0, .match_offset=14849 }, { .children_offset=0, .match_offset=125128 }, { .children_offset=0, .match_offset=42103 }, { .children_offset=0, .match_offset=29926 }, { .children_offset=538, .match_offset=125687 }, { .children_offset=0, .match_offset=56914 }, { .children_offset=540, .match_offset=85776 }, { .children_offset=0, .match_offset=87775 }, { .children_offset=0, .match_offset=65525 }, { .children_offset=0, .match_offset=86943 }, { .children_offset=0, .match_offset=12458 }, { .children_offset=542, .match_offset=0 }, { .children_offset=0, .match_offset=29817 }, { .children_offset=0, .match_offset=9880 }, { .children_offset=0, .match_offset=35470 }, { .children_offset=0, .match_offset=64708 }, { .children_offset=0, .match_offset=3 }, { .children_offset=0, .match_offset=340 }, { .children_offset=0, .match_offset=20417 }, { .children_offset=553, .match_offset=61772 }, { .children_offset=0, .match_offset=26047 }, { .children_offset=0, .match_offset=26005 }, { .children_offset=0, .match_offset=34868 }, { .children_offset=555, .match_offset=0 }, { .children_offset=0, .match_offset=30972 }, { .children_offset=0, .match_offset=88583 }, { .children_offset=0, .match_offset=113843 }, { .children_offset=0, .match_offset=130077 }, { .children_offset=0, .match_offset=35314 }, { .children_offset=0, .match_offset=40588 }, { .children_offset=0, .match_offset=109847 }, { .children_offset=0, .match_offset=39000 }, { .children_offset=0, .match_offset=62618 }, { .children_offset=0, .match_offset=46673 }, { .children_offset=566, .match_offset=0 }, { .children_offset=0, .match_offset=43033 }, { .children_offset=0, .match_offset=63821 }, { .children_offset=0, .match_offset=45832 }, { .children_offset=0, .match_offset=80472 }, { .children_offset=0, .match_offset=6583 }, { .children_offset=0, .match_offset=109583 }, { .children_offset=0, .match_offset=101026 }, { .children_offset=0, .match_offset=35628 }, { .children_offset=0, .match_offset=81162 }, { .children_offset=0, .match_offset=67419 }, { .children_offset=577, .match_offset=0 }, { .children_offset=0, .match_offset=15462 }, { .children_offset=0, .match_offset=68886 }, { .children_offset=0, .match_offset=71504 }, { .children_offset=0, .match_offset=89174 }, { .children_offset=0, .match_offset=56944 }, { .children_offset=0, .match_offset=135860 }, { .children_offset=0, .match_offset=74677 }, { .children_offset=0, .match_offset=6974 }, { .children_offset=0, .match_offset=77762 }, { .children_offset=0, .match_offset=125217 }, { .children_offset=588, .match_offset=0 }, { .children_offset=0, .match_offset=15327 }, { .children_offset=0, .match_offset=27523 }, { .children_offset=0, .match_offset=132926 }, { .children_offset=0, .match_offset=1913 }, { .children_offset=0, .match_offset=66433 }, { .children_offset=0, .match_offset=6691 }, { .children_offset=0, .match_offset=110303 }, { .children_offset=599, .match_offset=42419 }, { .children_offset=0, .match_offset=132875 }, { .children_offset=0, .match_offset=133562 }, { .children_offset=0, .match_offset=49667 }, { .children_offset=601, .match_offset=0 }, { .children_offset=0, .match_offset=34588 }, { .children_offset=0, .match_offset=20609 }, { .children_offset=0, .match_offset=80236 }, { .children_offset=0, .match_offset=6657 }, { .children_offset=0, .match_offset=20421 }, { .children_offset=0, .match_offset=30309 }, { .children_offset=0, .match_offset=38408 }, { .children_offset=0, .match_offset=33433 }, { .children_offset=0, .match_offset=71273 }, { .children_offset=0, .match_offset=46798 }, { .children_offset=612, .match_offset=0 }, { .children_offset=0, .match_offset=129629 }, { .children_offset=0, .match_offset=78692 }, { .children_offset=0, .match_offset=67869 }, { .children_offset=0, .match_offset=55372 }, { .children_offset=0, .match_offset=115423 }, { .children_offset=0, .match_offset=15345 }, { .children_offset=0, .match_offset=102869 }, { .children_offset=0, .match_offset=8634 }, { .children_offset=0, .match_offset=21148 }, { .children_offset=623, .match_offset=63399 }, { .children_offset=0, .match_offset=33820 }, { .children_offset=625, .match_offset=0 }, { .children_offset=0, .match_offset=50681 }, { .children_offset=0, .match_offset=122728 }, { .children_offset=0, .match_offset=34519 }, { .children_offset=0, .match_offset=12795 }, { .children_offset=636, .match_offset=37492 }, { .children_offset=0, .match_offset=89987 }, { .children_offset=0, .match_offset=22478 }, { .children_offset=0, .match_offset=114289 }, { .children_offset=0, .match_offset=13859 }, { .children_offset=0, .match_offset=65169 }, { .children_offset=638, .match_offset=5495 }, { .children_offset=0, .match_offset=33865 }, { .children_offset=640, .match_offset=109208 }, { .children_offset=651, .match_offset=0 }, { .children_offset=0, .match_offset=43625 }, { .children_offset=0, .match_offset=15294 }, { .children_offset=0, .match_offset=103107 }, { .children_offset=0, .match_offset=123457 }, { .children_offset=0, .match_offset=74366 }, { .children_offset=0, .match_offset=130316 }, { .children_offset=0, .match_offset=104456 }, { .children_offset=0, .match_offset=87130 }, { .children_offset=0, .match_offset=25908 }, { .children_offset=662, .match_offset=34543 }, { .children_offset=0, .match_offset=11908 }, { .children_offset=0, .match_offset=90559 }, { .children_offset=0, .match_offset=118417 }, { .children_offset=666, .match_offset=0 }, { .children_offset=0, .match_offset=43769 }, { .children_offset=0, .match_offset=124583 }, { .children_offset=0, .match_offset=68324 }, { .children_offset=677, .match_offset=113081 }, { .children_offset=0, .match_offset=27698 }, { .children_offset=0, .match_offset=71956 }, { .children_offset=0, .match_offset=24291 }, { .children_offset=0, .match_offset=5660 }, { .children_offset=0, .match_offset=6796 }, { .children_offset=0, .match_offset=126388 }, { .children_offset=0, .match_offset=113714 }, { .children_offset=0, .match_offset=38680 }, { .children_offset=0, .match_offset=72494 }, { .children_offset=681, .match_offset=0 }, { .children_offset=0, .match_offset=72156 }, { .children_offset=0, .match_offset=124654 }, { .children_offset=0, .match_offset=65160 }, { .children_offset=0, .match_offset=20174 }, { .children_offset=0, .match_offset=62367 }, { .children_offset=0, .match_offset=122494 }, { .children_offset=0, .match_offset=115431 }, { .children_offset=0, .match_offset=33013 }, { .children_offset=0, .match_offset=55374 }, { .children_offset=692, .match_offset=53987 }, { .children_offset=0, .match_offset=55860 }, { .children_offset=694, .match_offset=0 }, { .children_offset=0, .match_offset=41941 }, { .children_offset=0, .match_offset=44756 }, { .children_offset=705, .match_offset=39 }, { .children_offset=0, .match_offset=59039 }, { .children_offset=0, .match_offset=81980 }, { .children_offset=0, .match_offset=15669 }, { .children_offset=0, .match_offset=30748 }, { .children_offset=0, .match_offset=72410 }, { .children_offset=0, .match_offset=7356 }, { .children_offset=709, .match_offset=54470 }, { .children_offset=0, .match_offset=30361 }, { .children_offset=0, .match_offset=37312 }, { .children_offset=0, .match_offset=135790 }, { .children_offset=0, .match_offset=84885 }, { .children_offset=0, .match_offset=34690 }, { .children_offset=0, .match_offset=54373 }, { .children_offset=713, .match_offset=0 }, { .children_offset=0, .match_offset=25830 }, { .children_offset=0, .match_offset=35098 }, { .children_offset=0, .match_offset=38661 }, { .children_offset=0, .match_offset=67576 }, { .children_offset=0, .match_offset=12039 }, { .children_offset=0, .match_offset=80287 }, { .children_offset=0, .match_offset=11027 }, { .children_offset=0, .match_offset=102645 }, { .children_offset=0, .match_offset=103082 }, { .children_offset=0, .match_offset=115596 }, { .children_offset=724, .match_offset=0 }, { .children_offset=0, .match_offset=68563 }, { .children_offset=0, .match_offset=74114 }, { .children_offset=0, .match_offset=27586 }, { .children_offset=0, .match_offset=7497 }, { .children_offset=0, .match_offset=122489 }, { .children_offset=0, .match_offset=16644 }, { .children_offset=0, .match_offset=60457 }, { .children_offset=0, .match_offset=33223 }, { .children_offset=0, .match_offset=29293 }, { .children_offset=735, .match_offset=133468 }, { .children_offset=0, .match_offset=65709 }, { .children_offset=737, .match_offset=0 }, { .children_offset=0, .match_offset=78489 }, { .children_offset=0, .match_offset=33801 }, { .children_offset=0, .match_offset=6668 }, { .children_offset=0, .match_offset=126440 }, { .children_offset=748, .match_offset=51122 }, { .children_offset=0, .match_offset=87001 }, { .children_offset=0, .match_offset=127779 }, { .children_offset=0, .match_offset=65589 }, { .children_offset=0, .match_offset=14339 }, { .children_offset=750, .match_offset=20534 }, { .children_offset=0, .match_offset=38149 }, { .children_offset=0, .match_offset=115812 }, { .children_offset=752, .match_offset=0 }, { .children_offset=0, .match_offset=64356 }, { .children_offset=763, .match_offset=110538 }, { .children_offset=0, .match_offset=77808 }, { .children_offset=0, .match_offset=46014 }, { .children_offset=0, .match_offset=22203 }, { .children_offset=0, .match_offset=21177 }, { .children_offset=0, .match_offset=90060 }, { .children_offset=0, .match_offset=66428 }, { .children_offset=0, .match_offset=61713 }, { .children_offset=0, .match_offset=33388 }, { .children_offset=0, .match_offset=100966 }, { .children_offset=765, .match_offset=0 }, { .children_offset=0, .match_offset=67523 }, { .children_offset=776, .match_offset=20409 }, { .children_offset=0, .match_offset=31062 }, { .children_offset=0, .match_offset=7098 }, { .children_offset=778, .match_offset=25787 }, { .children_offset=0, .match_offset=132316 }, { .children_offset=0, .match_offset=53623 }, { .children_offset=0, .match_offset=68541 }, { .children_offset=780, .match_offset=16925 }, { .children_offset=0, .match_offset=30996 }, { .children_offset=0, .match_offset=67527 }, { .children_offset=0, .match_offset=108133 }, { .children_offset=0, .match_offset=33343 }, { .children_offset=782, .match_offset=0 }, { .children_offset=0, .match_offset=12513 }, { .children_offset=0, .match_offset=55858 }, { .children_offset=0, .match_offset=133493 }, { .children_offset=0, .match_offset=25902 }, { .children_offset=0, .match_offset=32769 }, { .children_offset=0, .match_offset=15054 }, { .children_offset=0, .match_offset=5524 }, { .children_offset=0, .match_offset=20181 }, { .children_offset=0, .match_offset=25730 }, { .children_offset=0, .match_offset=109214 }, { .children_offset=793, .match_offset=0 }, { .children_offset=804, .match_offset=0 }, { .children_offset=815, .match_offset=104467 }, { .children_offset=817, .match_offset=0 }, { .children_offset=819, .match_offset=0 }, { .children_offset=821, .match_offset=0 }, { .children_offset=0, .match_offset=58509 }, { .children_offset=823, .match_offset=57348 }, { .children_offset=825, .match_offset=0 }, { .children_offset=827, .match_offset=0 }, { .children_offset=829, .match_offset=0 }, { .children_offset=0, .match_offset=135854 }, { .children_offset=831, .match_offset=58427 }, { .children_offset=833, .match_offset=0 }, { .children_offset=835, .match_offset=0 }, { .children_offset=837, .match_offset=0 }, { .children_offset=0, .match_offset=29266 }, { .children_offset=839, .match_offset=23044 }, { .children_offset=841, .match_offset=0 }, { .children_offset=843, .match_offset=0 }, { .children_offset=845, .match_offset=0 }, { .children_offset=0, .match_offset=13515 }, { .children_offset=847, .match_offset=11065 }, { .children_offset=849, .match_offset=0 }, { .children_offset=851, .match_offset=0 }, { .children_offset=853, .match_offset=0 }, { .children_offset=0, .match_offset=124632 }, { .children_offset=855, .match_offset=30348 }, { .children_offset=857, .match_offset=0 }, { .children_offset=859, .match_offset=0 }, { .children_offset=861, .match_offset=0 }, { .children_offset=0, .match_offset=14483 }, { .children_offset=863, .match_offset=37972 }, { .children_offset=865, .match_offset=0 }, { .children_offset=867, .match_offset=0 }, { .children_offset=869, .match_offset=0 }, { .children_offset=0, .match_offset=109558 }, { .children_offset=871, .match_offset=6174 }, { .children_offset=873, .match_offset=0 }, { .children_offset=875, .match_offset=0 }, { .children_offset=877, .match_offset=0 }, { .children_offset=0, .match_offset=35864 }, { .children_offset=879, .match_offset=42263 }, { .children_offset=881, .match_offset=0 }, { .children_offset=883, .match_offset=0 }, { .children_offset=885, .match_offset=0 }, { .children_offset=0, .match_offset=29928 }, { .children_offset=887, .match_offset=63762 }, { .children_offset=889, .match_offset=0 }, { .children_offset=891, .match_offset=0 }, { .children_offset=893, .match_offset=0 }, { .children_offset=0, .match_offset=81891 }, { .children_offset=895, .match_offset=0 }, { .children_offset=906, .match_offset=44435 }, { .children_offset=909, .match_offset=0 }, { .children_offset=911, .match_offset=0 }, { .children_offset=913, .match_offset=0 }, { .children_offset=0, .match_offset=65463 }, { .children_offset=0, .match_offset=30664 }, { .children_offset=915, .match_offset=38404 }, { .children_offset=917, .match_offset=0 }, { .children_offset=919, .match_offset=0 }, { .children_offset=921, .match_offset=0 }, { .children_offset=0, .match_offset=89609 }, { .children_offset=923, .match_offset=11955 }, { .children_offset=925, .match_offset=0 }, { .children_offset=927, .match_offset=0 }, { .children_offset=929, .match_offset=0 }, { .children_offset=0, .match_offset=68449 }, { .children_offset=931, .match_offset=61118 }, { .children_offset=933, .match_offset=0 }, { .children_offset=935, .match_offset=0 }, { .children_offset=937, .match_offset=0 }, { .children_offset=0, .match_offset=38700 }, { .children_offset=939, .match_offset=119692 }, { .children_offset=941, .match_offset=0 }, { .children_offset=943, .match_offset=0 }, { .children_offset=945, .match_offset=0 }, { .children_offset=0, .match_offset=67315 }, { .children_offset=947, .match_offset=60530 }, { .children_offset=949, .match_offset=0 }, { .children_offset=951, .match_offset=0 }, { .children_offset=953, .match_offset=0 }, { .children_offset=0, .match_offset=114881 }, { .children_offset=955, .match_offset=43341 }, { .children_offset=957, .match_offset=0 }, { .children_offset=959, .match_offset=0 }, { .children_offset=961, .match_offset=0 }, { .children_offset=0, .match_offset=132847 }, { .children_offset=963, .match_offset=20541 }, { .children_offset=965, .match_offset=0 }, { .children_offset=967, .match_offset=0 }, { .children_offset=969, .match_offset=0 }, { .children_offset=0, .match_offset=35107 }, { .children_offset=971, .match_offset=73794 }, { .children_offset=973, .match_offset=0 }, { .children_offset=975, .match_offset=0 }, { .children_offset=977, .match_offset=0 }, { .children_offset=0, .match_offset=2104 }, { .children_offset=0, .match_offset=13555 }, { .children_offset=979, .match_offset=0 }, { .children_offset=0, .match_offset=131836 }, { .children_offset=0, .match_offset=103917 }, { .children_offset=0, .match_offset=71994 }, { .children_offset=0, .match_offset=68987 }, { .children_offset=0, .match_offset=1071 }, { .children_offset=0, .match_offset=23911 }, { .children_offset=0, .match_offset=65121 }, { .children_offset=0, .match_offset=80932 }, { .children_offset=0, .match_offset=33812 }, { .children_offset=0, .match_offset=80574 }, { .children_offset=990, .match_offset=0 }, { .children_offset=0, .match_offset=104399 }, { .children_offset=0, .match_offset=26767 }, { .children_offset=0, .match_offset=119464 }, { .children_offset=0, .match_offset=5594 }, { .children_offset=0, .match_offset=31013 }, { .children_offset=0, .match_offset=33313 }, { .children_offset=0, .match_offset=34884 }, { .children_offset=0, .match_offset=113788 }, { .children_offset=0, .match_offset=109697 }, { .children_offset=0, .match_offset=44977 }, { .children_offset=1001, .match_offset=0 }, { .children_offset=0, .match_offset=67386 }, { .children_offset=0, .match_offset=122572 }, { .children_offset=0, .match_offset=73492 }, { .children_offset=0, .match_offset=21138 }, { .children_offset=0, .match_offset=77756 }, { .children_offset=0, .match_offset=130031 }, { .children_offset=0, .match_offset=62291 }, { .children_offset=0, .match_offset=5622 }, { .children_offset=0, .match_offset=9935 }, { .children_offset=0, .match_offset=122537 }, { .children_offset=1012, .match_offset=0 }, { .children_offset=1023, .match_offset=6401 }, { .children_offset=0, .match_offset=67824 }, { .children_offset=0, .match_offset=102599 }, { .children_offset=0, .match_offset=9067 }, { .children_offset=0, .match_offset=6837 }, { .children_offset=0, .match_offset=125223 }, { .children_offset=0, .match_offset=58930 }, { .children_offset=0, .match_offset=65304 }, { .children_offset=1025, .match_offset=68635 }, { .children_offset=0, .match_offset=30722 }, { .children_offset=0, .match_offset=13119 }, { .children_offset=0, .match_offset=115774 }, { .children_offset=1027, .match_offset=0 }, { .children_offset=0, .match_offset=16 }, { .children_offset=0, .match_offset=34676 }, { .children_offset=0, .match_offset=89820 }, { .children_offset=0, .match_offset=87855 }, { .children_offset=0, .match_offset=78560 }, { .children_offset=0, .match_offset=88754 }, { .children_offset=0, .match_offset=14883 }, { .children_offset=0, .match_offset=21870 }, { .children_offset=0, .match_offset=57411 }, { .children_offset=0, .match_offset=131221 }, { .children_offset=1038, .match_offset=0 }, { .children_offset=0, .match_offset=62648 }, { .children_offset=0, .match_offset=68585 }, { .children_offset=0, .match_offset=87128 }, { .children_offset=0, .match_offset=62354 }, { .children_offset=0, .match_offset=38702 }, { .children_offset=0, .match_offset=74100 }, { .children_offset=0, .match_offset=127364 }, { .children_offset=0, .match_offset=71823 }, { .children_offset=0, .match_offset=15021 }, { .children_offset=0, .match_offset=123792 }, { .children_offset=1049, .match_offset=0 }, { .children_offset=0, .match_offset=113969 }, { .children_offset=0, .match_offset=14240 }, { .children_offset=0, .match_offset=116935 }, { .children_offset=0, .match_offset=57482 }, { .children_offset=0, .match_offset=38664 }, { .children_offset=0, .match_offset=1891 }, { .children_offset=0, .match_offset=2322 }, { .children_offset=0, .match_offset=42423 }, { .children_offset=0, .match_offset=67529 }, { .children_offset=0, .match_offset=122523 }, { .children_offset=1060, .match_offset=0 }, { .children_offset=0, .match_offset=40849 }, { .children_offset=0, .match_offset=89099 }, { .children_offset=0, .match_offset=89178 }, { .children_offset=0, .match_offset=59475 }, { .children_offset=0, .match_offset=130968 }, { .children_offset=0, .match_offset=48469 }, { .children_offset=0, .match_offset=5608 }, { .children_offset=0, .match_offset=70710 }, { .children_offset=1069, .match_offset=0 }, { .children_offset=1080, .match_offset=0 }, { .children_offset=0, .match_offset=115494 }, { .children_offset=0, .match_offset=16329 }, { .children_offset=0, .match_offset=54020 }, { .children_offset=0, .match_offset=113661 }, { .children_offset=0, .match_offset=11945 }, { .children_offset=0, .match_offset=70691 }, { .children_offset=0, .match_offset=86082 }, { .children_offset=0, .match_offset=61166 }, { .children_offset=0, .match_offset=74723 }, { .children_offset=1090, .match_offset=0 }, { .children_offset=0, .match_offset=87837 }, { .children_offset=0, .match_offset=54267 }, { .children_offset=0, .match_offset=108730 }, { .children_offset=0, .match_offset=72526 }, { .children_offset=0, .match_offset=68289 }, { .children_offset=0, .match_offset=29110 }, { .children_offset=0, .match_offset=109493 }, { .children_offset=0, .match_offset=90075 }, { .children_offset=0, .match_offset=20266 }, { .children_offset=0, .match_offset=134342 }, { .children_offset=1101, .match_offset=0 }, { .children_offset=0, .match_offset=7073 }, { .children_offset=0, .match_offset=135849 }, { .children_offset=0, .match_offset=37704 }, { .children_offset=0, .match_offset=38666 }, { .children_offset=0, .match_offset=100976 }, { .children_offset=0, .match_offset=2287 }, { .children_offset=0, .match_offset=119461 }, { .children_offset=0, .match_offset=22119 }, { .children_offset=0, .match_offset=24276 }, { .children_offset=0, .match_offset=37969 }, { .children_offset=1112, .match_offset=0 }, { .children_offset=0, .match_offset=38521 }, { .children_offset=0, .match_offset=33867 }, { .children_offset=0, .match_offset=136039 }, { .children_offset=0, .match_offset=14227 }, { .children_offset=0, .match_offset=134288 }, { .children_offset=0, .match_offset=103571 }, { .children_offset=0, .match_offset=103389 }, { .children_offset=0, .match_offset=129400 }, { .children_offset=0, .match_offset=126618 }, { .children_offset=1122, .match_offset=0 }, { .children_offset=0, .match_offset=27487 }, { .children_offset=0, .match_offset=134186 }, { .children_offset=0, .match_offset=11429 }, { .children_offset=0, .match_offset=69088 }, { .children_offset=0, .match_offset=6715 }, { .children_offset=0, .match_offset=40590 }, { .children_offset=0, .match_offset=125583 }, { .children_offset=1130, .match_offset=0 }, { .children_offset=0, .match_offset=15689 }, { .children_offset=0, .match_offset=116086 }, { .children_offset=0, .match_offset=69135 }, { .children_offset=0, .match_offset=2320 }, { .children_offset=0, .match_offset=25523 }, { .children_offset=0, .match_offset=27887 }, { .children_offset=0, .match_offset=43325 }, { .children_offset=0, .match_offset=372 }, { .children_offset=0, .match_offset=88718 }, { .children_offset=1140, .match_offset=0 }, { .children_offset=0, .match_offset=57771 }, { .children_offset=0, .match_offset=6607 }, { .children_offset=0, .match_offset=102358 }, { .children_offset=0, .match_offset=1116 }, { .children_offset=0, .match_offset=77893 }, { .children_offset=0, .match_offset=67364 }, { .children_offset=1147, .match_offset=0 }, { .children_offset=0, .match_offset=90557 }, { .children_offset=0, .match_offset=123552 }, { .children_offset=0, .match_offset=78420 }, { .children_offset=0, .match_offset=60573 }, { .children_offset=0, .match_offset=65113 }, { .children_offset=0, .match_offset=37951 }, { .children_offset=0, .match_offset=13150 }, { .children_offset=0, .match_offset=21329 }, { .children_offset=0, .match_offset=110332 }, { .children_offset=0, .match_offset=10953 }, { .children_offset=1158, .match_offset=0 }, { .children_offset=0, .match_offset=26137 }, { .children_offset=0, .match_offset=40868 }, { .children_offset=0, .match_offset=114759 }, { .children_offset=0, .match_offset=62014 }, { .children_offset=0, .match_offset=109754 }, { .children_offset=0, .match_offset=33487 }, { .children_offset=0, .match_offset=86075 }, { .children_offset=0, .match_offset=16182 }, { .children_offset=0, .match_offset=68196 }, { .children_offset=0, .match_offset=34432 }, { .children_offset=1169, .match_offset=0 }, { .children_offset=0, .match_offset=38676 }, { .children_offset=0, .match_offset=25383 }, { .children_offset=0, .match_offset=73858 }, { .children_offset=0, .match_offset=61988 }, { .children_offset=0, .match_offset=87847 }, { .children_offset=0, .match_offset=118586 }, { .children_offset=1176, .match_offset=0 }, { .children_offset=1184, .match_offset=0 }, { .children_offset=0, .match_offset=37502 }, { .children_offset=0, .match_offset=118605 }, { .children_offset=0, .match_offset=102727 }, { .children_offset=0, .match_offset=124749 }, { .children_offset=0, .match_offset=58776 }, { .children_offset=0, .match_offset=29256 }, { .children_offset=0, .match_offset=63803 }, { .children_offset=0, .match_offset=104517 }, { .children_offset=1193, .match_offset=0 }, { .children_offset=0, .match_offset=132775 }, { .children_offset=0, .match_offset=11963 }, { .children_offset=0, .match_offset=20396 }, { .children_offset=0, .match_offset=72536 }, { .children_offset=0, .match_offset=68973 }, { .children_offset=0, .match_offset=125712 }, { .children_offset=0, .match_offset=118423 }, { .children_offset=0, .match_offset=78880 }, { .children_offset=0, .match_offset=58556 }, { .children_offset=0, .match_offset=14553 }, { .children_offset=1204, .match_offset=0 }, { .children_offset=0, .match_offset=57355 }, { .children_offset=0, .match_offset=73832 }, { .children_offset=0, .match_offset=60565 }, { .children_offset=0, .match_offset=37982 }, { .children_offset=0, .match_offset=43343 }, { .children_offset=0, .match_offset=45944 }, { .children_offset=0, .match_offset=42314 }, { .children_offset=0, .match_offset=46671 }, { .children_offset=0, .match_offset=29248 }, { .children_offset=1214, .match_offset=0 }, { .children_offset=0, .match_offset=33226 }, { .children_offset=0, .match_offset=29260 }, { .children_offset=0, .match_offset=55279 }, { .children_offset=1218, .match_offset=0 }, { .children_offset=0, .match_offset=8965 }, { .children_offset=0, .match_offset=125749 }, { .children_offset=0, .match_offset=109749 }, { .children_offset=0, .match_offset=78228 }, { .children_offset=0, .match_offset=125741 }, { .children_offset=0, .match_offset=42669 }, { .children_offset=0, .match_offset=53511 }, { .children_offset=0, .match_offset=30900 }, { .children_offset=1227, .match_offset=0 }, { .children_offset=0, .match_offset=358 }, { .children_offset=0, .match_offset=109461 }, { .children_offset=0, .match_offset=117553 }, { .children_offset=0, .match_offset=49813 }, { .children_offset=0, .match_offset=77436 }, { .children_offset=0, .match_offset=121952 }, { .children_offset=0, .match_offset=132960 }, { .children_offset=0, .match_offset=71281 }, { .children_offset=0, .match_offset=57295 }, { .children_offset=1237, .match_offset=0 }, { .children_offset=0, .match_offset=57517 }, { .children_offset=0, .match_offset=44692 }, { .children_offset=0, .match_offset=33386 }, { .children_offset=0, .match_offset=108172 }, { .children_offset=0, .match_offset=5610 }, { .children_offset=1243, .match_offset=0 }, { .children_offset=1248, .match_offset=0 }, { .children_offset=0, .match_offset=33963 }, { .children_offset=0, .match_offset=103057 }, { .children_offset=0, .match_offset=133351 }, { .children_offset=0, .match_offset=67346 }, { .children_offset=0, .match_offset=68493 }, { .children_offset=0, .match_offset=46825 }, { .children_offset=0, .match_offset=26876 }, { .children_offset=0, .match_offset=131390 }, { .children_offset=1258, .match_offset=34509 }, { .children_offset=1260, .match_offset=0 }, { .children_offset=0, .match_offset=23032 }, { .children_offset=0, .match_offset=87813 }, { .children_offset=0, .match_offset=64404 }, { .children_offset=0, .match_offset=123104 }, { .children_offset=1265, .match_offset=0 }, { .children_offset=0, .match_offset=15452 }, { .children_offset=0, .match_offset=74574 }, { .children_offset=0, .match_offset=27803 }, { .children_offset=0, .match_offset=64354 }, { .children_offset=0, .match_offset=110586 }, { .children_offset=0, .match_offset=65109 }, { .children_offset=0, .match_offset=68447 }, { .children_offset=1273, .match_offset=0 }, { .children_offset=0, .match_offset=65555 }, { .children_offset=1275, .match_offset=0 }, { .children_offset=0, .match_offset=35744 }, { .children_offset=1277, .match_offset=0 }, { .children_offset=1279, .match_offset=0 }, { .children_offset=0, .match_offset=57353 }, { .children_offset=0, .match_offset=68436 }, { .children_offset=0, .match_offset=90545 }, { .children_offset=0, .match_offset=67857 }, { .children_offset=0, .match_offset=119857 }, { .children_offset=0, .match_offset=89621 }, { .children_offset=0, .match_offset=55796 }, { .children_offset=0, .match_offset=55301 }, { .children_offset=1288, .match_offset=10310 }, { .children_offset=1303, .match_offset=0 }, { .children_offset=1308, .match_offset=0 }, { .children_offset=0, .match_offset=15999 }, { .children_offset=0, .match_offset=64530 }, { .children_offset=0, .match_offset=6222 }, { .children_offset=0, .match_offset=121992 }, { .children_offset=0, .match_offset=29855 }, { .children_offset=0, .match_offset=124751 }, { .children_offset=1318, .match_offset=63119 }, { .children_offset=0, .match_offset=25752 }, { .children_offset=0, .match_offset=5489 }, { .children_offset=0, .match_offset=114244 }, { .children_offset=0, .match_offset=77916 }, { .children_offset=1321, .match_offset=0 }, { .children_offset=0, .match_offset=57929 }, { .children_offset=0, .match_offset=27979 }, { .children_offset=0, .match_offset=78482 }, { .children_offset=0, .match_offset=9923 }, { .children_offset=0, .match_offset=78428 }, { .children_offset=0, .match_offset=103775 }, { .children_offset=0, .match_offset=130137 }, { .children_offset=0, .match_offset=72503 }, { .children_offset=0, .match_offset=12454 }, { .children_offset=0, .match_offset=1211 }, { .children_offset=1332, .match_offset=0 }, { .children_offset=0, .match_offset=16576 }, { .children_offset=0, .match_offset=124550 }, { .children_offset=0, .match_offset=61259 }, { .children_offset=0, .match_offset=104326 }, { .children_offset=0, .match_offset=62012 }, { .children_offset=0, .match_offset=71805 }, { .children_offset=0, .match_offset=57183 }, { .children_offset=0, .match_offset=44307 }, { .children_offset=0, .match_offset=50162 }, { .children_offset=0, .match_offset=112684 }, { .children_offset=1343, .match_offset=0 }, { .children_offset=0, .match_offset=42234 }, { .children_offset=0, .match_offset=21150 }, { .children_offset=0, .match_offset=104397 }, { .children_offset=1347, .match_offset=0 }, { .children_offset=1349, .match_offset=0 }, { .children_offset=1351, .match_offset=0 }, { .children_offset=1353, .match_offset=0 }, { .children_offset=1355, .match_offset=0 }, { .children_offset=1357, .match_offset=0 }, { .children_offset=0, .match_offset=68279 }, { .children_offset=1359, .match_offset=0 }, { .children_offset=1361, .match_offset=0 }, { .children_offset=1363, .match_offset=0 }, { .children_offset=0, .match_offset=54005 }, { .children_offset=0, .match_offset=57279 }, { .children_offset=0, .match_offset=35367 }, { .children_offset=0, .match_offset=116927 }, { .children_offset=0, .match_offset=46641 }, { .children_offset=1365, .match_offset=12498 }, { .children_offset=0, .match_offset=40841 }, { .children_offset=0, .match_offset=64136 }, { .children_offset=1367, .match_offset=0 }, { .children_offset=0, .match_offset=125253 }, { .children_offset=0, .match_offset=41932 }, { .children_offset=0, .match_offset=56616 }, { .children_offset=1369, .match_offset=43005 }, { .children_offset=1372, .match_offset=0 }, { .children_offset=1374, .match_offset=0 }, { .children_offset=1376, .match_offset=0 }, { .children_offset=0, .match_offset=134584 }, { .children_offset=1378, .match_offset=0 }, { .children_offset=0, .match_offset=22784 }, { .children_offset=1380, .match_offset=0 }, { .children_offset=1382, .match_offset=0 }, { .children_offset=1384, .match_offset=0 }, { .children_offset=1386, .match_offset=0 }, { .children_offset=1388, .match_offset=0 }, { .children_offset=1390, .match_offset=0 }, { .children_offset=0, .match_offset=136245 }, { .children_offset=1392, .match_offset=53785 }, { .children_offset=1403, .match_offset=0 }, { .children_offset=1413, .match_offset=0 }, { .children_offset=0, .match_offset=61855 }, { .children_offset=0, .match_offset=122006 }, { .children_offset=0, .match_offset=12133 }, { .children_offset=0, .match_offset=113640 }, { .children_offset=0, .match_offset=9055 }, { .children_offset=0, .match_offset=42375 }, { .children_offset=0, .match_offset=29849 }, { .children_offset=0, .match_offset=46179 }, { .children_offset=0, .match_offset=44807 }, { .children_offset=1423, .match_offset=0 }, { .children_offset=0, .match_offset=6266 }, { .children_offset=0, .match_offset=56625 }, { .children_offset=0, .match_offset=16084 }, { .children_offset=0, .match_offset=102781 }, { .children_offset=0, .match_offset=27063 }, { .children_offset=1429, .match_offset=0 }, { .children_offset=0, .match_offset=12031 }, { .children_offset=1439, .match_offset=89637 }, { .children_offset=0, .match_offset=113841 }, { .children_offset=0, .match_offset=63095 }, { .children_offset=1442, .match_offset=109903 }, { .children_offset=0, .match_offset=55760 }, { .children_offset=0, .match_offset=20193 }, { .children_offset=1445, .match_offset=33895 }, { .children_offset=0, .match_offset=70844 }, { .children_offset=0, .match_offset=74122 }, { .children_offset=0, .match_offset=15058 }, { .children_offset=0, .match_offset=109861 }, { .children_offset=0, .match_offset=52221 }, { .children_offset=0, .match_offset=62698 }, { .children_offset=1447, .match_offset=0 }, { .children_offset=0, .match_offset=5656 }, { .children_offset=0, .match_offset=56655 }, { .children_offset=0, .match_offset=13066 }, { .children_offset=0, .match_offset=131043 }, { .children_offset=0, .match_offset=116537 }, { .children_offset=0, .match_offset=43783 }, { .children_offset=1454, .match_offset=0 }, { .children_offset=0, .match_offset=129443 }, { .children_offset=0, .match_offset=64712 }, { .children_offset=0, .match_offset=90058 }, { .children_offset=0, .match_offset=73695 }, { .children_offset=0, .match_offset=61768 }, { .children_offset=0, .match_offset=118388 }, { .children_offset=0, .match_offset=131097 }, { .children_offset=0, .match_offset=29851 }, { .children_offset=1463, .match_offset=0 }, { .children_offset=0, .match_offset=113628 }, { .children_offset=0, .match_offset=14918 }, { .children_offset=0, .match_offset=59119 }, { .children_offset=0, .match_offset=64497 }, { .children_offset=0, .match_offset=111094 }, { .children_offset=0, .match_offset=22623 }, { .children_offset=0, .match_offset=125705 }, { .children_offset=0, .match_offset=9065 }, { .children_offset=0, .match_offset=51127 }, { .children_offset=1473, .match_offset=0 }, { .children_offset=0, .match_offset=73224 }, { .children_offset=0, .match_offset=55380 }, { .children_offset=0, .match_offset=65296 }, { .children_offset=0, .match_offset=20641 }, { .children_offset=0, .match_offset=43421 }, { .children_offset=0, .match_offset=34343 }, { .children_offset=1480, .match_offset=0 }, { .children_offset=0, .match_offset=38428 }, { .children_offset=0, .match_offset=5315 }, { .children_offset=0, .match_offset=50285 }, { .children_offset=0, .match_offset=16122 }, { .children_offset=0, .match_offset=38569 }, { .children_offset=0, .match_offset=10252 }, { .children_offset=0, .match_offset=6563 }, { .children_offset=1488, .match_offset=0 }, { .children_offset=0, .match_offset=61567 }, { .children_offset=0, .match_offset=43062 }, { .children_offset=0, .match_offset=20419 }, { .children_offset=0, .match_offset=123249 }, { .children_offset=0, .match_offset=33427 }, { .children_offset=0, .match_offset=60504 }, { .children_offset=1495, .match_offset=0 }, { .children_offset=1503, .match_offset=0 }, { .children_offset=0, .match_offset=85290 }, { .children_offset=1505, .match_offset=0 }, { .children_offset=0, .match_offset=46870 }, { .children_offset=0, .match_offset=108131 }, { .children_offset=0, .match_offset=24270 }, { .children_offset=1509, .match_offset=0 }, { .children_offset=1511, .match_offset=0 }, { .children_offset=0, .match_offset=61602 }, { .children_offset=0, .match_offset=131056 }, { .children_offset=1514, .match_offset=0 }, { .children_offset=0, .match_offset=115393 }, { .children_offset=1516, .match_offset=0 }, { .children_offset=0, .match_offset=56634 }, { .children_offset=1518, .match_offset=0 }, { .children_offset=0, .match_offset=104101 }, { .children_offset=0, .match_offset=85402 }, { .children_offset=1521, .match_offset=0 }, { .children_offset=0, .match_offset=33382 }, { .children_offset=0, .match_offset=119387 }, { .children_offset=1523, .match_offset=0 }, { .children_offset=1526, .match_offset=0 }, { .children_offset=1528, .match_offset=0 }, { .children_offset=0, .match_offset=60690 }, { .children_offset=1530, .match_offset=0 }, { .children_offset=1532, .match_offset=0 }, { .children_offset=1534, .match_offset=0 }, { .children_offset=0, .match_offset=64563 }, { .children_offset=1536, .match_offset=110586 }, { .children_offset=1538, .match_offset=0 }, { .children_offset=1540, .match_offset=0 }, { .children_offset=1542, .match_offset=0 }, { .children_offset=1544, .match_offset=0 }, { .children_offset=1546, .match_offset=0 }, { .children_offset=1548, .match_offset=0 }, { .children_offset=1550, .match_offset=0 }, { .children_offset=1552, .match_offset=0 }, { .children_offset=0, .match_offset=26063 }, { .children_offset=1554, .match_offset=0 }, { .children_offset=1556, .match_offset=0 }, { .children_offset=1558, .match_offset=0 }, { .children_offset=1560, .match_offset=0 }, { .children_offset=1562, .match_offset=0 }, { .children_offset=1564, .match_offset=0 }, { .children_offset=0, .match_offset=119638 }, { .children_offset=1566, .match_offset=0 }, { .children_offset=1568, .match_offset=0 }, { .children_offset=0, .match_offset=45315 }, { .children_offset=1570, .match_offset=0 }, { .children_offset=1572, .match_offset=0 }, { .children_offset=1574, .match_offset=0 }, { .children_offset=0, .match_offset=134590 }, { .children_offset=1576, .match_offset=0 }, { .children_offset=1578, .match_offset=0 }, { .children_offset=1580, .match_offset=0 }, { .children_offset=1582, .match_offset=0 }, { .children_offset=1584, .match_offset=0 }, { .children_offset=1586, .match_offset=0 }, { .children_offset=0, .match_offset=57531 }, { .children_offset=1588, .match_offset=0 }, { .children_offset=1590, .match_offset=0 }, { .children_offset=1592, .match_offset=0 }, { .children_offset=1594, .match_offset=0 }, { .children_offset=0, .match_offset=26917 }, { .children_offset=1596, .match_offset=22559 }, { .children_offset=1607, .match_offset=0 }, { .children_offset=1609, .match_offset=0 }, { .children_offset=1611, .match_offset=0 }, { .children_offset=1613, .match_offset=0 }, { .children_offset=0, .match_offset=100983 }, { .children_offset=1615, .match_offset=0 }, { .children_offset=1619, .match_offset=0 }, { .children_offset=1622, .match_offset=0 }, { .children_offset=1624, .match_offset=136084 }, { .children_offset=1626, .match_offset=0 }, { .children_offset=1628, .match_offset=0 }, { .children_offset=1630, .match_offset=0 }, { .children_offset=1632, .match_offset=0 }, { .children_offset=1634, .match_offset=0 }, { .children_offset=1636, .match_offset=0 }, { .children_offset=1638, .match_offset=0 }, { .children_offset=1640, .match_offset=0 }, { .children_offset=0, .match_offset=89235 }, { .children_offset=1642, .match_offset=0 }, { .children_offset=0, .match_offset=90071 }, { .children_offset=1644, .match_offset=0 }, { .children_offset=1647, .match_offset=0 }, { .children_offset=1649, .match_offset=0 }, { .children_offset=1651, .match_offset=0 }, { .children_offset=1653, .match_offset=0 }, { .children_offset=1655, .match_offset=0 }, { .children_offset=1657, .match_offset=0 }, { .children_offset=1659, .match_offset=0 }, { .children_offset=1661, .match_offset=0 }, { .children_offset=0, .match_offset=104501 }, { .children_offset=1663, .match_offset=0 }, { .children_offset=1665, .match_offset=0 }, { .children_offset=0, .match_offset=44733 }, { .children_offset=1667, .match_offset=0 }, { .children_offset=1669, .match_offset=0 }, { .children_offset=1671, .match_offset=0 }, { .children_offset=1673, .match_offset=0 }, { .children_offset=1675, .match_offset=0 }, { .children_offset=1677, .match_offset=0 }, { .children_offset=1679, .match_offset=0 }, { .children_offset=1681, .match_offset=0 }, { .children_offset=0, .match_offset=26035 }, { .children_offset=0, .match_offset=22683 }, { .children_offset=0, .match_offset=134879 }, { .children_offset=1683, .match_offset=0 }, { .children_offset=1685, .match_offset=0 }, { .children_offset=0, .match_offset=89158 }, { .children_offset=1687, .match_offset=0 }, { .children_offset=1689, .match_offset=0 }, { .children_offset=1691, .match_offset=0 }, { .children_offset=1693, .match_offset=0 }, { .children_offset=1695, .match_offset=0 }, { .children_offset=1697, .match_offset=0 }, { .children_offset=1699, .match_offset=0 }, { .children_offset=1701, .match_offset=0 }, { .children_offset=0, .match_offset=85356 }, { .children_offset=1703, .match_offset=0 }, { .children_offset=1705, .match_offset=0 }, { .children_offset=1707, .match_offset=0 }, { .children_offset=1709, .match_offset=0 }, { .children_offset=1711, .match_offset=0 }, { .children_offset=1713, .match_offset=0 }, { .children_offset=1715, .match_offset=0 }, { .children_offset=0, .match_offset=134516 }, { .children_offset=1717, .match_offset=0 }, { .children_offset=1720, .match_offset=0 }, { .children_offset=1722, .match_offset=0 }, { .children_offset=1724, .match_offset=0 }, { .children_offset=1726, .match_offset=0 }, { .children_offset=0, .match_offset=118578 }, { .children_offset=1728, .match_offset=0 }, { .children_offset=1730, .match_offset=0 }, { .children_offset=1732, .match_offset=0 }, { .children_offset=1734, .match_offset=0 }, { .children_offset=0, .match_offset=26492 }, { .children_offset=1736, .match_offset=0 }, { .children_offset=1738, .match_offset=0 }, { .children_offset=1740, .match_offset=103193 }, { .children_offset=1742, .match_offset=0 }, { .children_offset=1745, .match_offset=0 }, { .children_offset=1747, .match_offset=0 }, { .children_offset=1749, .match_offset=0 }, { .children_offset=1751, .match_offset=0 }, { .children_offset=1753, .match_offset=0 }, { .children_offset=1755, .match_offset=0 }, { .children_offset=1757, .match_offset=0 }, { .children_offset=1759, .match_offset=0 }, { .children_offset=1761, .match_offset=0 }, { .children_offset=1763, .match_offset=0 }, { .children_offset=0, .match_offset=68969 }, { .children_offset=1765, .match_offset=0 }, { .children_offset=1767, .match_offset=0 }, { .children_offset=1769, .match_offset=0 }, { .children_offset=1771, .match_offset=0 }, { .children_offset=1773, .match_offset=0 }, { .children_offset=0, .match_offset=29120 }, { .children_offset=0, .match_offset=37910 }, { .children_offset=1775, .match_offset=69012 }, { .children_offset=1786, .match_offset=0 }, { .children_offset=0, .match_offset=124693 }, { .children_offset=1788, .match_offset=0 }, { .children_offset=1791, .match_offset=0 }, { .children_offset=0, .match_offset=62620 }, { .children_offset=1793, .match_offset=0 }, { .children_offset=1795, .match_offset=0 }, { .children_offset=1797, .match_offset=0 }, { .children_offset=1799, .match_offset=102881 }, { .children_offset=1801, .match_offset=0 }, { .children_offset=0, .match_offset=14263 }, { .children_offset=1803, .match_offset=0 }, { .children_offset=0, .match_offset=8856 }, { .children_offset=1805, .match_offset=0 }, { .children_offset=1807, .match_offset=0 }, { .children_offset=1809, .match_offset=0 }, { .children_offset=1811, .match_offset=0 }, { .children_offset=1813, .match_offset=0 }, { .children_offset=0, .match_offset=77663 }, { .children_offset=0, .match_offset=57342 }, { .children_offset=1815, .match_offset=0 }, { .children_offset=1817, .match_offset=0 }, { .children_offset=0, .match_offset=26944 }, { .children_offset=1819, .match_offset=0 }, { .children_offset=1822, .match_offset=0 }, { .children_offset=1824, .match_offset=0 }, { .children_offset=1826, .match_offset=0 }, { .children_offset=0, .match_offset=20392 }, { .children_offset=1828, .match_offset=0 }, { .children_offset=1830, .match_offset=0 }, { .children_offset=1832, .match_offset=0 }, { .children_offset=1834, .match_offset=0 }, { .children_offset=1836, .match_offset=0 }, { .children_offset=0, .match_offset=105793 }, { .children_offset=0, .match_offset=132845 }, { .children_offset=1838, .match_offset=0 }, { .children_offset=1840, .match_offset=0 }, { .children_offset=0, .match_offset=85408 }, { .children_offset=1842, .match_offset=0 }, { .children_offset=1844, .match_offset=0 }, { .children_offset=1846, .match_offset=0 }, { .children_offset=1849, .match_offset=0 }, { .children_offset=0, .match_offset=116531 }, { .children_offset=1851, .match_offset=0 }, { .children_offset=1853, .match_offset=0 }, { .children_offset=1855, .match_offset=0 }, { .children_offset=0, .match_offset=46866 }, { .children_offset=1857, .match_offset=27591 }, { .children_offset=0, .match_offset=5352 }, { .children_offset=1869, .match_offset=35717 }, { .children_offset=1871, .match_offset=0 }, { .children_offset=1873, .match_offset=0 }, { .children_offset=1875, .match_offset=0 }, { .children_offset=1877, .match_offset=0 }, { .children_offset=1879, .match_offset=0 }, { .children_offset=1881, .match_offset=0 }, { .children_offset=0, .match_offset=6902 }, { .children_offset=1883, .match_offset=132839 }, { .children_offset=1885, .match_offset=0 }, { .children_offset=1887, .match_offset=0 }, { .children_offset=1889, .match_offset=0 }, { .children_offset=1891, .match_offset=0 }, { .children_offset=0, .match_offset=39042 }, { .children_offset=1893, .match_offset=121975 }, { .children_offset=1895, .match_offset=0 }, { .children_offset=1897, .match_offset=0 }, { .children_offset=0, .match_offset=37820 }, { .children_offset=0, .match_offset=49720 }, { .children_offset=1899, .match_offset=20411 }, { .children_offset=1902, .match_offset=0 }, { .children_offset=1904, .match_offset=0 }, { .children_offset=1906, .match_offset=0 }, { .children_offset=1908, .match_offset=0 }, { .children_offset=1910, .match_offset=0 }, { .children_offset=1912, .match_offset=0 }, { .children_offset=0, .match_offset=115817 }, { .children_offset=1914, .match_offset=0 }, { .children_offset=0, .match_offset=57406 }, { .children_offset=1916, .match_offset=100946 }, { .children_offset=0, .match_offset=38384 }, { .children_offset=1918, .match_offset=74721 }, { .children_offset=1920, .match_offset=0 }, { .children_offset=1922, .match_offset=0 }, { .children_offset=0, .match_offset=103351 }, { .children_offset=1924, .match_offset=65036 }, { .children_offset=1926, .match_offset=85367 }, { .children_offset=1928, .match_offset=0 }, { .children_offset=1930, .match_offset=0 }, { .children_offset=1932, .match_offset=0 }, { .children_offset=1934, .match_offset=0 }, { .children_offset=1936, .match_offset=0 }, { .children_offset=1938, .match_offset=0 }, { .children_offset=0, .match_offset=57480 }, { .children_offset=0, .match_offset=122342 }, { .children_offset=1940, .match_offset=103690 }, { .children_offset=1942, .match_offset=0 }, { .children_offset=1944, .match_offset=0 }, { .children_offset=1946, .match_offset=0 }, { .children_offset=0, .match_offset=14624 }, { .children_offset=1948, .match_offset=60680 }, { .children_offset=1955, .match_offset=0 }, { .children_offset=1958, .match_offset=0 }, { .children_offset=0, .match_offset=67699 }, { .children_offset=1960, .match_offset=0 }, { .children_offset=1962, .match_offset=0 }, { .children_offset=1964, .match_offset=0 }, { .children_offset=1966, .match_offset=0 }, { .children_offset=1968, .match_offset=0 }, { .children_offset=1970, .match_offset=0 }, { .children_offset=1972, .match_offset=0 }, { .children_offset=0, .match_offset=55422 }, { .children_offset=1974, .match_offset=0 }, { .children_offset=1976, .match_offset=0 }, { .children_offset=1978, .match_offset=0 }, { .children_offset=1980, .match_offset=0 }, { .children_offset=0, .match_offset=43128 }, { .children_offset=1982, .match_offset=0 }, { .children_offset=1984, .match_offset=0 }, { .children_offset=1986, .match_offset=0 }, { .children_offset=1988, .match_offset=0 }, { .children_offset=1990, .match_offset=0 }, { .children_offset=1992, .match_offset=0 }, { .children_offset=1994, .match_offset=0 }, { .children_offset=1996, .match_offset=0 }, { .children_offset=1998, .match_offset=0 }, { .children_offset=2000, .match_offset=0 }, { .children_offset=2002, .match_offset=0 }, { .children_offset=0, .match_offset=30648 }, { .children_offset=2004, .match_offset=72332 }, { .children_offset=2006, .match_offset=0 }, { .children_offset=2008, .match_offset=0 }, { .children_offset=2010, .match_offset=0 }, { .children_offset=0, .match_offset=116279 }, { .children_offset=2012, .match_offset=0 }, { .children_offset=2014, .match_offset=0 }, { .children_offset=2016, .match_offset=0 }, { .children_offset=0, .match_offset=135839 }, { .children_offset=2018, .match_offset=0 }, { .children_offset=2020, .match_offset=0 }, { .children_offset=0, .match_offset=6527 }, { .children_offset=2022, .match_offset=22122 }, { .children_offset=2029, .match_offset=0 }, { .children_offset=2031, .match_offset=0 }, { .children_offset=2033, .match_offset=102291 }, { .children_offset=2035, .match_offset=0 }, { .children_offset=0, .match_offset=101032 }, { .children_offset=0, .match_offset=43173 }, { .children_offset=2037, .match_offset=0 }, { .children_offset=2039, .match_offset=0 }, { .children_offset=2041, .match_offset=0 }, { .children_offset=2043, .match_offset=0 }, { .children_offset=2045, .match_offset=0 }, { .children_offset=2047, .match_offset=0 }, { .children_offset=2050, .match_offset=0 }, { .children_offset=0, .match_offset=34880 }, { .children_offset=2052, .match_offset=0 }, { .children_offset=2054, .match_offset=0 }, { .children_offset=0, .match_offset=58605 }, { .children_offset=2056, .match_offset=0 }, { .children_offset=2058, .match_offset=0 }, { .children_offset=0, .match_offset=70765 }, { .children_offset=2060, .match_offset=0 }, { .children_offset=2062, .match_offset=0 }, { .children_offset=2064, .match_offset=0 }, { .children_offset=0, .match_offset=74559 }, { .children_offset=2066, .match_offset=0 }, { .children_offset=2068, .match_offset=0 }, { .children_offset=0, .match_offset=29246 }, { .children_offset=2070, .match_offset=39239 }, { .children_offset=2075, .match_offset=0 }, { .children_offset=0, .match_offset=79018 }, { .children_offset=2079, .match_offset=0 }, { .children_offset=2081, .match_offset=0 }, { .children_offset=2083, .match_offset=0 }, { .children_offset=0, .match_offset=28234 }, { .children_offset=2085, .match_offset=0 }, { .children_offset=0, .match_offset=67388 }, { .children_offset=0, .match_offset=117544 }, { .children_offset=2087, .match_offset=0 }, { .children_offset=0, .match_offset=74486 }, { .children_offset=2089, .match_offset=0 }, { .children_offset=0, .match_offset=72122 }, { .children_offset=2092, .match_offset=0 }, { .children_offset=0, .match_offset=74578 }, { .children_offset=2094, .match_offset=44325 }, { .children_offset=0, .match_offset=10885 }, { .children_offset=2104, .match_offset=0 }, { .children_offset=2106, .match_offset=0 }, { .children_offset=2108, .match_offset=0 }, { .children_offset=0, .match_offset=114958 }, { .children_offset=2110, .match_offset=0 }, { .children_offset=2112, .match_offset=0 }, { .children_offset=2114, .match_offset=0 }, { .children_offset=0, .match_offset=43696 }, { .children_offset=2116, .match_offset=0 }, { .children_offset=0, .match_offset=37644 }, { .children_offset=2118, .match_offset=44257 }, { .children_offset=0, .match_offset=22378 }, { .children_offset=0, .match_offset=70909 }, { .children_offset=2121, .match_offset=13198 }, { .children_offset=2123, .match_offset=0 }, { .children_offset=2125, .match_offset=0 }, { .children_offset=2127, .match_offset=0 }, { .children_offset=2129, .match_offset=0 }, { .children_offset=0, .match_offset=450 }, { .children_offset=2131, .match_offset=0 }, { .children_offset=2133, .match_offset=0 }, { .children_offset=0, .match_offset=42948 }, { .children_offset=2135, .match_offset=0 }, { .children_offset=0, .match_offset=8814 }, { .children_offset=2138, .match_offset=0 }, { .children_offset=2140, .match_offset=0 }, { .children_offset=2142, .match_offset=0 }, { .children_offset=0, .match_offset=61171 }, { .children_offset=2144, .match_offset=0 }, { .children_offset=2146, .match_offset=0 }, { .children_offset=2148, .match_offset=0 }, { .children_offset=2150, .match_offset=0 }, { .children_offset=0, .match_offset=33764 }, { .children_offset=2152, .match_offset=58954 }, { .children_offset=2158, .match_offset=0 }, { .children_offset=2160, .match_offset=0 }, { .children_offset=0, .match_offset=46219 }, { .children_offset=2162, .match_offset=0 }, { .children_offset=2164, .match_offset=0 }, { .children_offset=0, .match_offset=71493 }, { .children_offset=2166, .match_offset=0 }, { .children_offset=2168, .match_offset=0 }, { .children_offset=2170, .match_offset=0 }, { .children_offset=2172, .match_offset=0 }, { .children_offset=2174, .match_offset=0 }, { .children_offset=0, .match_offset=74726 }, { .children_offset=2176, .match_offset=0 }, { .children_offset=0, .match_offset=54441 }, { .children_offset=2178, .match_offset=0 }, { .children_offset=2180, .match_offset=0 }, { .children_offset=2182, .match_offset=0 }, { .children_offset=2184, .match_offset=0 }, { .children_offset=2186, .match_offset=0 }, { .children_offset=2188, .match_offset=0 }, { .children_offset=2190, .match_offset=0 }, { .children_offset=2192, .match_offset=0 }, { .children_offset=2194, .match_offset=0 }, { .children_offset=0, .match_offset=130033 }, { .children_offset=2196, .match_offset=15514 }, { .children_offset=2212, .match_offset=0 }, { .children_offset=2214, .match_offset=0 }, { .children_offset=2216, .match_offset=0 }, { .children_offset=2218, .match_offset=0 }, { .children_offset=2220, .match_offset=0 }, { .children_offset=2222, .match_offset=0 }, { .children_offset=0, .match_offset=108109 }, { .children_offset=2224, .match_offset=0 }, { .children_offset=0, .match_offset=102746 }, { .children_offset=0, .match_offset=129422 }, { .children_offset=2230, .match_offset=0 }, { .children_offset=0, .match_offset=61516 }, { .children_offset=2232, .match_offset=0 }, { .children_offset=0, .match_offset=65064 }, { .children_offset=2234, .match_offset=0 }, { .children_offset=2236, .match_offset=0 }, { .children_offset=0, .match_offset=374 }, { .children_offset=2238, .match_offset=0 }, { .children_offset=2240, .match_offset=0 }, { .children_offset=2242, .match_offset=0 }, { .children_offset=2244, .match_offset=0 }, { .children_offset=2246, .match_offset=0 }, { .children_offset=0, .match_offset=78603 }, { .children_offset=2248, .match_offset=0 }, { .children_offset=2250, .match_offset=0 }, { .children_offset=2252, .match_offset=0 }, { .children_offset=2254, .match_offset=0 }, { .children_offset=2256, .match_offset=0 }, { .children_offset=2258, .match_offset=0 }, { .children_offset=2260, .match_offset=0 }, { .children_offset=0, .match_offset=11197 }, { .children_offset=2262, .match_offset=0 }, { .children_offset=2267, .match_offset=45122 }, { .children_offset=2269, .match_offset=0 }, { .children_offset=2271, .match_offset=0 }, { .children_offset=0, .match_offset=110373 }, { .children_offset=2273, .match_offset=0 }, { .children_offset=2275, .match_offset=0 }, { .children_offset=2277, .match_offset=0 }, { .children_offset=0, .match_offset=28751 }, { .children_offset=2279, .match_offset=0 }, { .children_offset=0, .match_offset=61043 }, { .children_offset=2281, .match_offset=0 }, { .children_offset=0, .match_offset=27809 }, { .children_offset=2283, .match_offset=134860 }, { .children_offset=0, .match_offset=43952 }, { .children_offset=2285, .match_offset=0 }, { .children_offset=2287, .match_offset=0 }, { .children_offset=0, .match_offset=33347 }, { .children_offset=2289, .match_offset=115505 }, { .children_offset=2293, .match_offset=0 }, { .children_offset=0, .match_offset=45052 }, { .children_offset=2295, .match_offset=123869 }, { .children_offset=0, .match_offset=35460 }, { .children_offset=2297, .match_offset=0 }, { .children_offset=2299, .match_offset=0 }, { .children_offset=2301, .match_offset=0 }, { .children_offset=0, .match_offset=86681 }, { .children_offset=2303, .match_offset=0 }, { .children_offset=2305, .match_offset=0 }, { .children_offset=2307, .match_offset=0 }, { .children_offset=2309, .match_offset=135920 }, { .children_offset=2311, .match_offset=0 }, { .children_offset=0, .match_offset=37730 }, { .children_offset=2313, .match_offset=80269 }, { .children_offset=2317, .match_offset=0 }, { .children_offset=2319, .match_offset=115488 }, { .children_offset=2321, .match_offset=0 }, { .children_offset=0, .match_offset=63626 }, { .children_offset=2323, .match_offset=49741 }, { .children_offset=2325, .match_offset=0 }, { .children_offset=2327, .match_offset=0 }, { .children_offset=2329, .match_offset=0 }, { .children_offset=0, .match_offset=42123 }, { .children_offset=0, .match_offset=44651 }, { .children_offset=2331, .match_offset=0 }, { .children_offset=2333, .match_offset=0 }, { .children_offset=2335, .match_offset=0 }, { .children_offset=0, .match_offset=116357 }, { .children_offset=2337, .match_offset=0 }, { .children_offset=2340, .match_offset=50211 }, { .children_offset=2342, .match_offset=0 }, { .children_offset=2344, .match_offset=0 }, { .children_offset=2346, .match_offset=0 }, { .children_offset=2349, .match_offset=0 }, { .children_offset=2351, .match_offset=0 }, { .children_offset=0, .match_offset=6963 }, { .children_offset=2353, .match_offset=0 }, { .children_offset=0, .match_offset=25379 }, { .children_offset=2355, .match_offset=0 }, { .children_offset=0, .match_offset=35217 }, { .children_offset=2357, .match_offset=25915 }, { .children_offset=0, .match_offset=61755 }, { .children_offset=2360, .match_offset=0 }, { .children_offset=2362, .match_offset=0 }, { .children_offset=2364, .match_offset=0 }, { .children_offset=2366, .match_offset=0 }, { .children_offset=2368, .match_offset=0 }, { .children_offset=0, .match_offset=81941 }, { .children_offset=2371, .match_offset=0 }, { .children_offset=2375, .match_offset=0 }, { .children_offset=0, .match_offset=132605 }, { .children_offset=2377, .match_offset=0 }, { .children_offset=0, .match_offset=58394 }, { .children_offset=2379, .match_offset=0 }, { .children_offset=0, .match_offset=58591 }, { .children_offset=2381, .match_offset=0 }, { .children_offset=0, .match_offset=25525 }, { .children_offset=2383, .match_offset=0 }, { .children_offset=2385, .match_offset=0 }, { .children_offset=2387, .match_offset=0 }, { .children_offset=2389, .match_offset=0 }, { .children_offset=2391, .match_offset=0 }, { .children_offset=0, .match_offset=45988 }, { .children_offset=2393, .match_offset=130976 }, { .children_offset=2400, .match_offset=0 }, { .children_offset=2404, .match_offset=0 }, { .children_offset=0, .match_offset=123224 }, { .children_offset=2406, .match_offset=0 }, { .children_offset=2408, .match_offset=62743 }, { .children_offset=2410, .match_offset=0 }, { .children_offset=2412, .match_offset=118263 }, { .children_offset=2414, .match_offset=0 }, { .children_offset=2416, .match_offset=0 }, { .children_offset=2418, .match_offset=0 }, { .children_offset=2420, .match_offset=0 }, { .children_offset=0, .match_offset=62743 }, { .children_offset=0, .match_offset=109699 }, { .children_offset=2422, .match_offset=55844 }, { .children_offset=0, .match_offset=122667 }, { .children_offset=2425, .match_offset=0 }, { .children_offset=2427, .match_offset=0 }, { .children_offset=2429, .match_offset=0 }, { .children_offset=2431, .match_offset=0 }, { .children_offset=2433, .match_offset=0 }, { .children_offset=0, .match_offset=62686 }, { .children_offset=2435, .match_offset=0 }, { .children_offset=2437, .match_offset=0 }, { .children_offset=2439, .match_offset=0 }, { .children_offset=2441, .match_offset=0 }, { .children_offset=2443, .match_offset=0 }, { .children_offset=0, .match_offset=5522 }, { .children_offset=0, .match_offset=136217 }, { .children_offset=2446, .match_offset=0 }, { .children_offset=2448, .match_offset=0 }, { .children_offset=2450, .match_offset=0 }, { .children_offset=0, .match_offset=12450 }, { .children_offset=2452, .match_offset=16325 }, { .children_offset=2456, .match_offset=0 }, { .children_offset=2458, .match_offset=0 }, { .children_offset=2460, .match_offset=0 }, { .children_offset=2462, .match_offset=0 }, { .children_offset=2464, .match_offset=0 }, { .children_offset=0, .match_offset=90201 }, { .children_offset=2466, .match_offset=0 }, { .children_offset=2468, .match_offset=0 }, { .children_offset=2470, .match_offset=0 }, { .children_offset=0, .match_offset=12264 }, { .children_offset=0, .match_offset=65271 }, { .children_offset=2472, .match_offset=0 }, { .children_offset=2474, .match_offset=0 }, { .children_offset=2476, .match_offset=0 }, { .children_offset=0, .match_offset=104556 }, { .children_offset=2478, .match_offset=30072 }, { .children_offset=2494, .match_offset=0 }, { .children_offset=2496, .match_offset=0 }, { .children_offset=2498, .match_offset=0 }, { .children_offset=2500, .match_offset=0 }, { .children_offset=0, .match_offset=21406 }, { .children_offset=2502, .match_offset=0 }, { .children_offset=0, .match_offset=22493 }, { .children_offset=2505, .match_offset=0 }, { .children_offset=2508, .match_offset=0 }, { .children_offset=2510, .match_offset=0 }, { .children_offset=2512, .match_offset=0 }, { .children_offset=2514, .match_offset=0 }, { .children_offset=0, .match_offset=55989 }, { .children_offset=2516, .match_offset=0 }, { .children_offset=2518, .match_offset=0 }, { .children_offset=2520, .match_offset=0 }, { .children_offset=2522, .match_offset=0 }, { .children_offset=2524, .match_offset=0 }, { .children_offset=2526, .match_offset=0 }, { .children_offset=2528, .match_offset=0 }, { .children_offset=0, .match_offset=116543 }, { .children_offset=2530, .match_offset=0 }, { .children_offset=2533, .match_offset=0 }, { .children_offset=2535, .match_offset=0 }, { .children_offset=0, .match_offset=42596 }, { .children_offset=2537, .match_offset=0 }, { .children_offset=2539, .match_offset=0 }, { .children_offset=0, .match_offset=130105 }, { .children_offset=2541, .match_offset=116978 }, { .children_offset=2546, .match_offset=0 }, { .children_offset=2549, .match_offset=0 }, { .children_offset=0, .match_offset=56660 }, { .children_offset=0, .match_offset=8848 }, { .children_offset=0, .match_offset=131076 }, { .children_offset=2551, .match_offset=0 }, { .children_offset=2553, .match_offset=0 }, { .children_offset=2555, .match_offset=0 }, { .children_offset=2557, .match_offset=0 }, { .children_offset=0, .match_offset=35860 }, { .children_offset=0, .match_offset=70642 }, { .children_offset=2559, .match_offset=131026 }, { .children_offset=2568, .match_offset=63768 }, { .children_offset=0, .match_offset=108118 }, { .children_offset=0, .match_offset=25596 }, { .children_offset=0, .match_offset=32757 }, { .children_offset=2572, .match_offset=0 }, { .children_offset=0, .match_offset=104332 }, { .children_offset=2575, .match_offset=0 }, { .children_offset=2577, .match_offset=0 }, { .children_offset=2579, .match_offset=0 }, { .children_offset=2581, .match_offset=0 }, { .children_offset=2583, .match_offset=0 }, { .children_offset=0, .match_offset=130079 }, { .children_offset=2585, .match_offset=0 }, { .children_offset=2588, .match_offset=77930 }, { .children_offset=0, .match_offset=31135 }, { .children_offset=2590, .match_offset=0 }, { .children_offset=2592, .match_offset=0 }, { .children_offset=2594, .match_offset=0 }, { .children_offset=2596, .match_offset=0 }, { .children_offset=0, .match_offset=103315 }, { .children_offset=2598, .match_offset=0 }, { .children_offset=2600, .match_offset=0 }, { .children_offset=2602, .match_offset=119433 }, { .children_offset=2604, .match_offset=0 }, { .children_offset=0, .match_offset=67697 }, { .children_offset=0, .match_offset=26804 }, { .children_offset=0, .match_offset=112853 }, { .children_offset=0, .match_offset=26775 }, { .children_offset=0, .match_offset=67570 }, { .children_offset=0, .match_offset=48177 }, { .children_offset=0, .match_offset=24342 }, { .children_offset=0, .match_offset=122679 }, { .children_offset=2613, .match_offset=0 }, { .children_offset=2616, .match_offset=27360 }, { .children_offset=2618, .match_offset=0 }, { .children_offset=2620, .match_offset=15313 }, { .children_offset=0, .match_offset=7034 }, { .children_offset=0, .match_offset=43962 }, { .children_offset=2622, .match_offset=0 }, { .children_offset=2625, .match_offset=0 }, { .children_offset=0, .match_offset=122335 }, { .children_offset=2627, .match_offset=34573 }, { .children_offset=2629, .match_offset=0 }, { .children_offset=2631, .match_offset=0 }, { .children_offset=0, .match_offset=134198 }, { .children_offset=2633, .match_offset=0 }, { .children_offset=2636, .match_offset=0 }, { .children_offset=2638, .match_offset=0 }, { .children_offset=2640, .match_offset=0 }, { .children_offset=2642, .match_offset=0 }, { .children_offset=0, .match_offset=62016 }, { .children_offset=2644, .match_offset=0 }, { .children_offset=2646, .match_offset=0 }, { .children_offset=0, .match_offset=22474 }, { .children_offset=2648, .match_offset=0 }, { .children_offset=2650, .match_offset=0 }, { .children_offset=2652, .match_offset=0 }, { .children_offset=0, .match_offset=111083 }, { .children_offset=2654, .match_offset=0 }, { .children_offset=0, .match_offset=63626 }, { .children_offset=2656, .match_offset=0 }, { .children_offset=2658, .match_offset=0 }, { .children_offset=2660, .match_offset=0 }, { .children_offset=0, .match_offset=104440 }, { .children_offset=2662, .match_offset=0 }, { .children_offset=0, .match_offset=87321 }, { .children_offset=2664, .match_offset=0 }, { .children_offset=0, .match_offset=15016 }, { .children_offset=2666, .match_offset=113068 }, { .children_offset=2670, .match_offset=0 }, { .children_offset=2672, .match_offset=0 }, { .children_offset=0, .match_offset=4891 }, { .children_offset=2674, .match_offset=0 }, { .children_offset=2676, .match_offset=0 }, { .children_offset=2678, .match_offset=0 }, { .children_offset=2680, .match_offset=0 }, { .children_offset=2682, .match_offset=0 }, { .children_offset=2684, .match_offset=0 }, { .children_offset=0, .match_offset=30375 }, { .children_offset=2686, .match_offset=0 }, { .children_offset=2688, .match_offset=0 }, { .children_offset=2690, .match_offset=0 }, { .children_offset=0, .match_offset=73820 }, { .children_offset=0, .match_offset=74124 }, { .children_offset=2692, .match_offset=0 }, { .children_offset=2694, .match_offset=0 }, { .children_offset=0, .match_offset=20201 }, { .children_offset=2696, .match_offset=0 }, { .children_offset=2699, .match_offset=0 }, { .children_offset=0, .match_offset=112699 }, { .children_offset=2701, .match_offset=0 }, { .children_offset=0, .match_offset=61482 }, { .children_offset=2703, .match_offset=15952 }, { .children_offset=2707, .match_offset=0 }, { .children_offset=2709, .match_offset=0 }, { .children_offset=2711, .match_offset=0 }, { .children_offset=2713, .match_offset=0 }, { .children_offset=2715, .match_offset=0 }, { .children_offset=2717, .match_offset=0 }, { .children_offset=2719, .match_offset=0 }, { .children_offset=2721, .match_offset=0 }, { .children_offset=0, .match_offset=39210 }, { .children_offset=2723, .match_offset=0 }, { .children_offset=2725, .match_offset=0 }, { .children_offset=2727, .match_offset=0 }, { .children_offset=0, .match_offset=77922 }, { .children_offset=2729, .match_offset=0 }, { .children_offset=2735, .match_offset=0 }, { .children_offset=2737, .match_offset=0 }, { .children_offset=2739, .match_offset=0 }, { .children_offset=2741, .match_offset=0 }, { .children_offset=2743, .match_offset=0 }, { .children_offset=2745, .match_offset=0 }, { .children_offset=2747, .match_offset=0 }, { .children_offset=2749, .match_offset=0 }, { .children_offset=2751, .match_offset=88638 }, { .children_offset=2753, .match_offset=0 }, { .children_offset=2755, .match_offset=0 }, { .children_offset=2757, .match_offset=0 }, { .children_offset=2759, .match_offset=0 }, { .children_offset=2761, .match_offset=0 }, { .children_offset=2763, .match_offset=0 }, { .children_offset=2765, .match_offset=0 }, { .children_offset=0, .match_offset=34545 }, { .children_offset=2767, .match_offset=0 }, { .children_offset=2769, .match_offset=0 }, { .children_offset=2771, .match_offset=0 }, { .children_offset=2773, .match_offset=0 }, { .children_offset=0, .match_offset=11948 }, { .children_offset=2775, .match_offset=0 }, { .children_offset=2777, .match_offset=0 }, { .children_offset=2779, .match_offset=0 }, { .children_offset=2781, .match_offset=0 }, { .children_offset=2784, .match_offset=0 }, { .children_offset=2786, .match_offset=0 }, { .children_offset=2788, .match_offset=0 }, { .children_offset=2790, .match_offset=0 }, { .children_offset=2792, .match_offset=0 }, { .children_offset=2794, .match_offset=0 }, { .children_offset=0, .match_offset=102670 }, { .children_offset=2796, .match_offset=0 }, { .children_offset=0, .match_offset=119573 }, { .children_offset=2798, .match_offset=0 }, { .children_offset=2800, .match_offset=0 }, { .children_offset=2802, .match_offset=0 }, { .children_offset=2805, .match_offset=0 }, { .children_offset=2807, .match_offset=0 }, { .children_offset=2809, .match_offset=0 }, { .children_offset=0, .match_offset=134933 }, { .children_offset=2811, .match_offset=12313 }, { .children_offset=2813, .match_offset=0 }, { .children_offset=0, .match_offset=33879 }, { .children_offset=2815, .match_offset=0 }, { .children_offset=2817, .match_offset=0 }, { .children_offset=2819, .match_offset=0 }, { .children_offset=2821, .match_offset=0 }, { .children_offset=2823, .match_offset=0 }, { .children_offset=2825, .match_offset=0 }, { .children_offset=2827, .match_offset=0 }, { .children_offset=2829, .match_offset=0 }, { .children_offset=2831, .match_offset=0 }, { .children_offset=2833, .match_offset=0 }, { .children_offset=0, .match_offset=133274 }, { .children_offset=2835, .match_offset=0 }, { .children_offset=2838, .match_offset=0 }, { .children_offset=2840, .match_offset=0 }, { .children_offset=2842, .match_offset=0 }, { .children_offset=2844, .match_offset=0 }, { .children_offset=0, .match_offset=122372 }, { .children_offset=2846, .match_offset=0 }, { .children_offset=2848, .match_offset=0 }, { .children_offset=2850, .match_offset=0 }, { .children_offset=2852, .match_offset=0 }, { .children_offset=2854, .match_offset=114531 }, { .children_offset=2856, .match_offset=0 }, { .children_offset=0, .match_offset=116533 }, { .children_offset=2858, .match_offset=58398 }, { .children_offset=2863, .match_offset=0 }, { .children_offset=2865, .match_offset=0 }, { .children_offset=0, .match_offset=45954 }, { .children_offset=2867, .match_offset=0 }, { .children_offset=0, .match_offset=29938 }, { .children_offset=0, .match_offset=44323 }, { .children_offset=0, .match_offset=25393 }, { .children_offset=2869, .match_offset=35618 }, { .children_offset=2878, .match_offset=0 }, { .children_offset=2882, .match_offset=0 }, { .children_offset=2884, .match_offset=0 }, { .children_offset=0, .match_offset=11918 }, { .children_offset=2886, .match_offset=0 }, { .children_offset=2888, .match_offset=0 }, { .children_offset=0, .match_offset=15029 }, { .children_offset=2890, .match_offset=0 }, { .children_offset=0, .match_offset=37534 }, { .children_offset=2892, .match_offset=13213 }, { .children_offset=2894, .match_offset=0 }, { .children_offset=0, .match_offset=32773 }, { .children_offset=2896, .match_offset=0 }, { .children_offset=0, .match_offset=42467 }, { .children_offset=0, .match_offset=44021 }, { .children_offset=2899, .match_offset=42497 }, { .children_offset=0, .match_offset=60737 }, { .children_offset=2902, .match_offset=0 }, { .children_offset=2904, .match_offset=0 }, { .children_offset=0, .match_offset=14250 }, { .children_offset=2906, .match_offset=0 }, { .children_offset=2911, .match_offset=0 }, { .children_offset=2913, .match_offset=0 }, { .children_offset=2916, .match_offset=0 }, { .children_offset=2918, .match_offset=0 }, { .children_offset=0, .match_offset=74600 }, { .children_offset=2920, .match_offset=0 }, { .children_offset=2922, .match_offset=0 }, { .children_offset=0, .match_offset=42329 }, { .children_offset=2924, .match_offset=0 }, { .children_offset=2926, .match_offset=0 }, { .children_offset=2928, .match_offset=0 }, { .children_offset=0, .match_offset=89537 }, { .children_offset=2930, .match_offset=71817 }, { .children_offset=2932, .match_offset=0 }, { .children_offset=2934, .match_offset=0 }, { .children_offset=2936, .match_offset=0 }, { .children_offset=2939, .match_offset=0 }, { .children_offset=2941, .match_offset=0 }, { .children_offset=0, .match_offset=103114 }, { .children_offset=0, .match_offset=123258 }, { .children_offset=2944, .match_offset=0 }, { .children_offset=2946, .match_offset=0 }, { .children_offset=0, .match_offset=43292 }, { .children_offset=2948, .match_offset=0 }, { .children_offset=2950, .match_offset=0 }, { .children_offset=2952, .match_offset=0 }, { .children_offset=2955, .match_offset=0 }, { .children_offset=0, .match_offset=28596 }, { .children_offset=0, .match_offset=81176 }, { .children_offset=2957, .match_offset=0 }, { .children_offset=2960, .match_offset=0 }, { .children_offset=0, .match_offset=109565 }, { .children_offset=2964, .match_offset=0 }, { .children_offset=2966, .match_offset=0 }, { .children_offset=2968, .match_offset=0 }, { .children_offset=2970, .match_offset=0 }, { .children_offset=2972, .match_offset=0 }, { .children_offset=2974, .match_offset=0 }, { .children_offset=0, .match_offset=60680 }, { .children_offset=2976, .match_offset=0 }, { .children_offset=2978, .match_offset=0 }, { .children_offset=2980, .match_offset=0 }, { .children_offset=2982, .match_offset=0 }, { .children_offset=2984, .match_offset=0 }, { .children_offset=2986, .match_offset=0 }, { .children_offset=2988, .match_offset=0 }, { .children_offset=2990, .match_offset=0 }, { .children_offset=0, .match_offset=60680 }, { .children_offset=2992, .match_offset=0 }, { .children_offset=2994, .match_offset=0 }, { .children_offset=2997, .match_offset=0 }, { .children_offset=2999, .match_offset=0 }, { .children_offset=3001, .match_offset=12665 }, { .children_offset=3003, .match_offset=0 }, { .children_offset=0, .match_offset=45838 }, { .children_offset=3005, .match_offset=90570 }, { .children_offset=3008, .match_offset=0 }, { .children_offset=0, .match_offset=29118 }, { .children_offset=3010, .match_offset=0 }, { .children_offset=3012, .match_offset=0 }, { .children_offset=3014, .match_offset=0 }, { .children_offset=3016, .match_offset=0 }, { .children_offset=3018, .match_offset=79700 }, { .children_offset=3020, .match_offset=0 }, { .children_offset=0, .match_offset=16088 }, { .children_offset=3022, .match_offset=0 }, { .children_offset=3024, .match_offset=0 }, { .children_offset=0, .match_offset=58527 }, { .children_offset=3026, .match_offset=0 }, { .children_offset=0, .match_offset=72166 }, { .children_offset=3028, .match_offset=14421 }, { .children_offset=3030, .match_offset=0 }, { .children_offset=3032, .match_offset=103320 }, { .children_offset=3035, .match_offset=0 }, { .children_offset=3037, .match_offset=0 }, { .children_offset=3039, .match_offset=0 }, { .children_offset=3041, .match_offset=0 }, { .children_offset=3043, .match_offset=0 }, { .children_offset=0, .match_offset=38168 }, { .children_offset=3045, .match_offset=0 }, { .children_offset=3047, .match_offset=0 }, { .children_offset=3049, .match_offset=0 }, { .children_offset=0, .match_offset=45844 }, { .children_offset=3051, .match_offset=112676 }, { .children_offset=3068, .match_offset=0 }, { .children_offset=3070, .match_offset=0 }, { .children_offset=3073, .match_offset=0 }, { .children_offset=3075, .match_offset=0 }, { .children_offset=3078, .match_offset=0 }, { .children_offset=3080, .match_offset=0 }, { .children_offset=0, .match_offset=57773 }, { .children_offset=3082, .match_offset=0 }, { .children_offset=3084, .match_offset=0 }, { .children_offset=0, .match_offset=57773 }, { .children_offset=3086, .match_offset=0 }, { .children_offset=0, .match_offset=1877 }, { .children_offset=3088, .match_offset=0 }, { .children_offset=3093, .match_offset=0 }, { .children_offset=3095, .match_offset=0 }, { .children_offset=3098, .match_offset=0 }, { .children_offset=0, .match_offset=12050 }, { .children_offset=3100, .match_offset=128039 }, { .children_offset=3102, .match_offset=0 }, { .children_offset=3104, .match_offset=0 }, { .children_offset=3106, .match_offset=0 }, { .children_offset=3108, .match_offset=0 }, { .children_offset=3110, .match_offset=0 }, { .children_offset=0, .match_offset=16427 }, { .children_offset=0, .match_offset=27860 }, { .children_offset=3112, .match_offset=0 }, { .children_offset=3114, .match_offset=72840 }, { .children_offset=3117, .match_offset=0 }, { .children_offset=0, .match_offset=5763 }, { .children_offset=3122, .match_offset=114614 }, { .children_offset=0, .match_offset=70694 }, { .children_offset=0, .match_offset=56832 }, { .children_offset=0, .match_offset=123342 }, { .children_offset=0, .match_offset=5535 }, { .children_offset=3124, .match_offset=0 }, { .children_offset=3126, .match_offset=0 }, { .children_offset=3128, .match_offset=0 }, { .children_offset=0, .match_offset=8979 }, { .children_offset=3130, .match_offset=68234 }, { .children_offset=3132, .match_offset=8930 }, { .children_offset=3134, .match_offset=0 }, { .children_offset=3136, .match_offset=0 }, { .children_offset=0, .match_offset=136049 }, { .children_offset=3139, .match_offset=0 }, { .children_offset=0, .match_offset=39474 }, { .children_offset=3141, .match_offset=0 }, { .children_offset=3143, .match_offset=0 }, { .children_offset=3145, .match_offset=0 }, { .children_offset=3148, .match_offset=0 }, { .children_offset=3150, .match_offset=0 }, { .children_offset=3152, .match_offset=0 }, { .children_offset=3154, .match_offset=0 }, { .children_offset=3156, .match_offset=0 }, { .children_offset=0, .match_offset=40456 }, { .children_offset=3158, .match_offset=0 }, { .children_offset=3160, .match_offset=0 }, { .children_offset=3162, .match_offset=0 }, { .children_offset=3164, .match_offset=0 }, { .children_offset=3166, .match_offset=0 }, { .children_offset=3168, .match_offset=0 }, { .children_offset=0, .match_offset=43949 }, { .children_offset=3170, .match_offset=5650 }, { .children_offset=3172, .match_offset=0 }, { .children_offset=0, .match_offset=13138 }, { .children_offset=3174, .match_offset=0 }, { .children_offset=0, .match_offset=44771 }, { .children_offset=3177, .match_offset=0 }, { .children_offset=0, .match_offset=131725 }, { .children_offset=3181, .match_offset=0 }, { .children_offset=3183, .match_offset=0 }, { .children_offset=3185, .match_offset=0 }, { .children_offset=3187, .match_offset=0 }, { .children_offset=3189, .match_offset=0 }, { .children_offset=3191, .match_offset=0 }, { .children_offset=3193, .match_offset=0 }, { .children_offset=3195, .match_offset=0 }, { .children_offset=0, .match_offset=88751 }, { .children_offset=3197, .match_offset=0 }, { .children_offset=3199, .match_offset=0 }, { .children_offset=3201, .match_offset=0 }, { .children_offset=0, .match_offset=10936 }, { .children_offset=3203, .match_offset=0 }, { .children_offset=3207, .match_offset=0 }, { .children_offset=0, .match_offset=33816 }, { .children_offset=3209, .match_offset=0 }, { .children_offset=0, .match_offset=13538 }, { .children_offset=3211, .match_offset=0 }, { .children_offset=3213, .match_offset=0 }, { .children_offset=3215, .match_offset=0 }, { .children_offset=3217, .match_offset=0 }, { .children_offset=0, .match_offset=110590 }, { .children_offset=3219, .match_offset=0 }, { .children_offset=3222, .match_offset=0 }, { .children_offset=3225, .match_offset=0 }, { .children_offset=3227, .match_offset=0 }, { .children_offset=0, .match_offset=102643 }, { .children_offset=0, .match_offset=15292 }, { .children_offset=3229, .match_offset=0 }, { .children_offset=3231, .match_offset=0 }, { .children_offset=3233, .match_offset=0 }, { .children_offset=0, .match_offset=67763 }, { .children_offset=3235, .match_offset=0 }, { .children_offset=3237, .match_offset=0 }, { .children_offset=3239, .match_offset=0 }, { .children_offset=0, .match_offset=43003 }, { .children_offset=3241, .match_offset=127341 }, { .children_offset=3245, .match_offset=0 }, { .children_offset=3247, .match_offset=0 }, { .children_offset=3249, .match_offset=0 }, { .children_offset=3251, .match_offset=0 }, { .children_offset=0, .match_offset=44812 }, { .children_offset=3253, .match_offset=0 }, { .children_offset=3255, .match_offset=0 }, { .children_offset=0, .match_offset=39076 }, { .children_offset=0, .match_offset=61009 }, { .children_offset=3257, .match_offset=0 }, { .children_offset=3259, .match_offset=0 }, { .children_offset=3263, .match_offset=0 }, { .children_offset=3265, .match_offset=25438 }, { .children_offset=3267, .match_offset=0 }, { .children_offset=3269, .match_offset=0 }, { .children_offset=3271, .match_offset=0 }, { .children_offset=3273, .match_offset=0 }, { .children_offset=3275, .match_offset=0 }, { .children_offset=3277, .match_offset=0 }, { .children_offset=3279, .match_offset=0 }, { .children_offset=0, .match_offset=115736 }, { .children_offset=3281, .match_offset=0 }, { .children_offset=0, .match_offset=42663 }, { .children_offset=3283, .match_offset=0 }, { .children_offset=3285, .match_offset=0 }, { .children_offset=3287, .match_offset=0 }, { .children_offset=0, .match_offset=62700 }, { .children_offset=3289, .match_offset=0 }, { .children_offset=3291, .match_offset=0 }, { .children_offset=3293, .match_offset=0 }, { .children_offset=3295, .match_offset=0 }, { .children_offset=3297, .match_offset=0 }, { .children_offset=3299, .match_offset=0 }, { .children_offset=3301, .match_offset=0 }, { .children_offset=0, .match_offset=28478 }, { .children_offset=3303, .match_offset=0 }, { .children_offset=3307, .match_offset=0 }, { .children_offset=0, .match_offset=123128 }, { .children_offset=3309, .match_offset=0 }, { .children_offset=3311, .match_offset=0 }, { .children_offset=0, .match_offset=33711 }, { .children_offset=3314, .match_offset=0 }, { .children_offset=3316, .match_offset=0 }, { .children_offset=0, .match_offset=88007 }, { .children_offset=3318, .match_offset=0 }, { .children_offset=3320, .match_offset=88026 }, { .children_offset=3324, .match_offset=0 }, { .children_offset=3326, .match_offset=0 }, { .children_offset=3328, .match_offset=0 }, { .children_offset=3330, .match_offset=0 }, { .children_offset=0, .match_offset=63798 }, { .children_offset=3332, .match_offset=0 }, { .children_offset=3334, .match_offset=0 }, { .children_offset=3336, .match_offset=0 }, { .children_offset=3338, .match_offset=103842 }, { .children_offset=0, .match_offset=25417 }, { .children_offset=0, .match_offset=51140 }, { .children_offset=3340, .match_offset=0 }, { .children_offset=3342, .match_offset=0 }, { .children_offset=3345, .match_offset=0 }, { .children_offset=3347, .match_offset=0 }, { .children_offset=0, .match_offset=131388 }, { .children_offset=3349, .match_offset=0 }, { .children_offset=0, .match_offset=28197 }, { .children_offset=3351, .match_offset=0 }, { .children_offset=3355, .match_offset=125667 }, { .children_offset=3357, .match_offset=0 }, { .children_offset=0, .match_offset=81935 }, { .children_offset=3359, .match_offset=0 }, { .children_offset=3362, .match_offset=0 }, { .children_offset=3364, .match_offset=0 }, { .children_offset=3366, .match_offset=0 }, { .children_offset=3368, .match_offset=0 }, { .children_offset=3370, .match_offset=0 }, { .children_offset=3372, .match_offset=0 }, { .children_offset=0, .match_offset=114479 }, { .children_offset=3374, .match_offset=0 }, { .children_offset=0, .match_offset=89644 }, { .children_offset=0, .match_offset=73752 }, { .children_offset=3376, .match_offset=0 }, { .children_offset=3378, .match_offset=0 }, { .children_offset=3380, .match_offset=0 }, { .children_offset=0, .match_offset=81105 }, { .children_offset=3382, .match_offset=14994 }, { .children_offset=3393, .match_offset=0 }, { .children_offset=3395, .match_offset=0 }, { .children_offset=3397, .match_offset=0 }, { .children_offset=3399, .match_offset=0 }, { .children_offset=3401, .match_offset=0 }, { .children_offset=0, .match_offset=43137 }, { .children_offset=3403, .match_offset=0 }, { .children_offset=3406, .match_offset=0 }, { .children_offset=0, .match_offset=111178 }, { .children_offset=0, .match_offset=29999 }, { .children_offset=3408, .match_offset=0 }, { .children_offset=3411, .match_offset=0 }, { .children_offset=3413, .match_offset=0 }, { .children_offset=3416, .match_offset=0 }, { .children_offset=3418, .match_offset=0 }, { .children_offset=3420, .match_offset=0 }, { .children_offset=0, .match_offset=122328 }, { .children_offset=0, .match_offset=119575 }, { .children_offset=0, .match_offset=23773 }, { .children_offset=3422, .match_offset=27189 }, { .children_offset=0, .match_offset=102681 }, { .children_offset=0, .match_offset=29244 }, { .children_offset=0, .match_offset=8897 }, { .children_offset=3428, .match_offset=0 }, { .children_offset=0, .match_offset=58468 }, { .children_offset=3430, .match_offset=0 }, { .children_offset=3432, .match_offset=0 }, { .children_offset=0, .match_offset=35371 }, { .children_offset=3434, .match_offset=0 }, { .children_offset=3436, .match_offset=0 }, { .children_offset=3438, .match_offset=0 }, { .children_offset=3440, .match_offset=0 }, { .children_offset=3442, .match_offset=0 }, { .children_offset=3444, .match_offset=0 }, { .children_offset=3446, .match_offset=0 }, { .children_offset=3448, .match_offset=0 }, { .children_offset=3450, .match_offset=0 }, { .children_offset=3452, .match_offset=0 }, { .children_offset=3454, .match_offset=0 }, { .children_offset=0, .match_offset=12493 }, { .children_offset=3456, .match_offset=0 }, { .children_offset=3459, .match_offset=0 }, { .children_offset=0, .match_offset=135066 }, { .children_offset=3461, .match_offset=0 }, { .children_offset=3463, .match_offset=0 }, { .children_offset=3465, .match_offset=0 }, { .children_offset=3467, .match_offset=0 }, { .children_offset=3470, .match_offset=0 }, { .children_offset=0, .match_offset=37728 }, { .children_offset=3472, .match_offset=0 }, { .children_offset=3474, .match_offset=0 }, { .children_offset=0, .match_offset=33876 }, { .children_offset=3476, .match_offset=0 }, { .children_offset=3481, .match_offset=0 }, { .children_offset=3483, .match_offset=0 }, { .children_offset=3485, .match_offset=0 }, { .children_offset=3487, .match_offset=0 }, { .children_offset=0, .match_offset=20207 }, { .children_offset=3489, .match_offset=0 }, { .children_offset=3491, .match_offset=0 }, { .children_offset=3493, .match_offset=0 }, { .children_offset=3495, .match_offset=0 }, { .children_offset=3497, .match_offset=0 }, { .children_offset=0, .match_offset=124825 }, { .children_offset=3499, .match_offset=0 }, { .children_offset=3501, .match_offset=0 }, { .children_offset=0, .match_offset=113116 }, { .children_offset=3503, .match_offset=0 }, { .children_offset=3505, .match_offset=0 }, { .children_offset=3507, .match_offset=0 }, { .children_offset=3509, .match_offset=0 }, { .children_offset=0, .match_offset=89544 }, { .children_offset=3511, .match_offset=134493 }, { .children_offset=3515, .match_offset=0 }, { .children_offset=3517, .match_offset=0 }, { .children_offset=3519, .match_offset=0 }, { .children_offset=3521, .match_offset=0 }, { .children_offset=3525, .match_offset=0 }, { .children_offset=3527, .match_offset=0 }, { .children_offset=0, .match_offset=60684 }, { .children_offset=3529, .match_offset=28279 }, { .children_offset=0, .match_offset=86681 }, { .children_offset=0, .match_offset=102366 }, { .children_offset=3531, .match_offset=0 }, { .children_offset=3533, .match_offset=0 }, { .children_offset=3535, .match_offset=0 }, { .children_offset=3537, .match_offset=0 }, { .children_offset=3539, .match_offset=0 }, { .children_offset=3541, .match_offset=0 }, { .children_offset=0, .match_offset=20592 }, { .children_offset=3543, .match_offset=0 }, { .children_offset=3546, .match_offset=0 }, { .children_offset=3548, .match_offset=0 }, { .children_offset=0, .match_offset=8879 }, { .children_offset=3550, .match_offset=0 }, { .children_offset=3553, .match_offset=0 }, { .children_offset=3555, .match_offset=0 }, { .children_offset=3557, .match_offset=0 }, { .children_offset=3559, .match_offset=0 }, { .children_offset=3561, .match_offset=0 }, { .children_offset=3563, .match_offset=0 }, { .children_offset=0, .match_offset=6641 }, { .children_offset=3565, .match_offset=0 }, { .children_offset=3567, .match_offset=0 }, { .children_offset=3569, .match_offset=0 }, { .children_offset=3571, .match_offset=0 }, { .children_offset=3573, .match_offset=0 }, { .children_offset=3575, .match_offset=0 }, { .children_offset=0, .match_offset=116284 }, { .children_offset=3577, .match_offset=0 }, { .children_offset=3580, .match_offset=0 }, { .children_offset=3582, .match_offset=90570 }, { .children_offset=3585, .match_offset=0 }, { .children_offset=0, .match_offset=38960 }, { .children_offset=3587, .match_offset=0 }, { .children_offset=3589, .match_offset=0 }, { .children_offset=3591, .match_offset=0 }, { .children_offset=3593, .match_offset=0 }, { .children_offset=3595, .match_offset=0 }, { .children_offset=3597, .match_offset=0 }, { .children_offset=3599, .match_offset=0 }, { .children_offset=3601, .match_offset=0 }, { .children_offset=0, .match_offset=90326 }, { .children_offset=3603, .match_offset=0 }, { .children_offset=3605, .match_offset=0 }, { .children_offset=0, .match_offset=23934 }, { .children_offset=0, .match_offset=33023 }, { .children_offset=3607, .match_offset=475 }, { .children_offset=3614, .match_offset=0 }, { .children_offset=3618, .match_offset=0 }, { .children_offset=3620, .match_offset=0 }, { .children_offset=3622, .match_offset=0 }, { .children_offset=3624, .match_offset=0 }, { .children_offset=3626, .match_offset=0 }, { .children_offset=3628, .match_offset=0 }, { .children_offset=3630, .match_offset=0 }, { .children_offset=3632, .match_offset=0 }, { .children_offset=0, .match_offset=42608 }, { .children_offset=3634, .match_offset=0 }, { .children_offset=3637, .match_offset=0 }, { .children_offset=3639, .match_offset=0 }, { .children_offset=3641, .match_offset=0 }, { .children_offset=3643, .match_offset=0 }, { .children_offset=3645, .match_offset=0 }, { .children_offset=0, .match_offset=124661 }, { .children_offset=3647, .match_offset=0 }, { .children_offset=3649, .match_offset=0 }, { .children_offset=3651, .match_offset=0 }, { .children_offset=3653, .match_offset=0 }, { .children_offset=3655, .match_offset=0 }, { .children_offset=3657, .match_offset=0 }, { .children_offset=3659, .match_offset=0 }, { .children_offset=0, .match_offset=42023 }, { .children_offset=3661, .match_offset=0 }, { .children_offset=3663, .match_offset=0 }, { .children_offset=3665, .match_offset=0 }, { .children_offset=3667, .match_offset=0 }, { .children_offset=0, .match_offset=87003 }, { .children_offset=3669, .match_offset=0 }, { .children_offset=3674, .match_offset=0 }, { .children_offset=3676, .match_offset=0 }, { .children_offset=3678, .match_offset=0 }, { .children_offset=3680, .match_offset=0 }, { .children_offset=0, .match_offset=114328 }, { .children_offset=3682, .match_offset=0 }, { .children_offset=3684, .match_offset=0 }, { .children_offset=0, .match_offset=43683 }, { .children_offset=0, .match_offset=8606 }, { .children_offset=3686, .match_offset=0 }, { .children_offset=0, .match_offset=123725 }, { .children_offset=3688, .match_offset=0 }, { .children_offset=3690, .match_offset=0 }, { .children_offset=3692, .match_offset=0 }, { .children_offset=0, .match_offset=26460 }, { .children_offset=3694, .match_offset=0 }, { .children_offset=3696, .match_offset=0 }, { .children_offset=0, .match_offset=115378 }, { .children_offset=3698, .match_offset=0 }, { .children_offset=0, .match_offset=60686 }, { .children_offset=3700, .match_offset=33916 }, { .children_offset=3705, .match_offset=0 }, { .children_offset=3708, .match_offset=0 }, { .children_offset=3710, .match_offset=0 }, { .children_offset=3712, .match_offset=0 }, { .children_offset=0, .match_offset=54421 }, { .children_offset=0, .match_offset=130261 }, { .children_offset=3714, .match_offset=0 }, { .children_offset=3716, .match_offset=0 }, { .children_offset=3718, .match_offset=0 }, { .children_offset=3720, .match_offset=0 }, { .children_offset=3722, .match_offset=0 }, { .children_offset=0, .match_offset=14916 }, { .children_offset=3724, .match_offset=0 }, { .children_offset=3726, .match_offset=0 }, { .children_offset=3728, .match_offset=0 }, { .children_offset=3730, .match_offset=0 }, { .children_offset=0, .match_offset=60777 }, { .children_offset=3732, .match_offset=0 }, { .children_offset=0, .match_offset=79753 }, { .children_offset=3734, .match_offset=118472 }, { .children_offset=3744, .match_offset=0 }, { .children_offset=3746, .match_offset=0 }, { .children_offset=3748, .match_offset=0 }, { .children_offset=3750, .match_offset=0 }, { .children_offset=3752, .match_offset=0 }, { .children_offset=3754, .match_offset=0 }, { .children_offset=0, .match_offset=122570 }, { .children_offset=0, .match_offset=44926 }, { .children_offset=3756, .match_offset=0 }, { .children_offset=3759, .match_offset=0 }, { .children_offset=3761, .match_offset=0 }, { .children_offset=3763, .match_offset=0 }, { .children_offset=3765, .match_offset=0 }, { .children_offset=3767, .match_offset=0 }, { .children_offset=3769, .match_offset=0 }, { .children_offset=3771, .match_offset=0 }, { .children_offset=3773, .match_offset=0 }, { .children_offset=0, .match_offset=118453 }, { .children_offset=3775, .match_offset=0 }, { .children_offset=3777, .match_offset=0 }, { .children_offset=0, .match_offset=125559 }, { .children_offset=3779, .match_offset=0 }, { .children_offset=0, .match_offset=87140 }, { .children_offset=3781, .match_offset=0 }, { .children_offset=0, .match_offset=115391 }, { .children_offset=3783, .match_offset=0 }, { .children_offset=3786, .match_offset=0 }, { .children_offset=3788, .match_offset=0 }, { .children_offset=3790, .match_offset=0 }, { .children_offset=3792, .match_offset=0 }, { .children_offset=3794, .match_offset=0 }, { .children_offset=3796, .match_offset=0 }, { .children_offset=3798, .match_offset=67681 }, { .children_offset=3801, .match_offset=0 }, { .children_offset=0, .match_offset=14307 }, { .children_offset=3803, .match_offset=0 }, { .children_offset=0, .match_offset=62684 }, { .children_offset=3805, .match_offset=0 }, { .children_offset=3807, .match_offset=0 }, { .children_offset=3809, .match_offset=0 }, { .children_offset=3811, .match_offset=0 }, { .children_offset=3813, .match_offset=0 }, { .children_offset=3815, .match_offset=0 }, { .children_offset=3817, .match_offset=0 }, { .children_offset=0, .match_offset=57367 }, { .children_offset=3819, .match_offset=0 }, { .children_offset=3821, .match_offset=0 }, { .children_offset=3823, .match_offset=0 }, { .children_offset=3825, .match_offset=0 }, { .children_offset=0, .match_offset=60694 }, { .children_offset=3827, .match_offset=0 }, { .children_offset=3830, .match_offset=34176 }, { .children_offset=3832, .match_offset=0 }, { .children_offset=3835, .match_offset=0 }, { .children_offset=3837, .match_offset=0 }, { .children_offset=3839, .match_offset=0 }, { .children_offset=0, .match_offset=54014 }, { .children_offset=3841, .match_offset=0 }, { .children_offset=3843, .match_offset=0 }, { .children_offset=3845, .match_offset=0 }, { .children_offset=3847, .match_offset=0 }, { .children_offset=0, .match_offset=46216 }, { .children_offset=3849, .match_offset=0 }, { .children_offset=3851, .match_offset=0 }, { .children_offset=0, .match_offset=103693 }, { .children_offset=3853, .match_offset=0 }, { .children_offset=3855, .match_offset=0 }, { .children_offset=3857, .match_offset=0 }, { .children_offset=3859, .match_offset=0 }, { .children_offset=0, .match_offset=131542 }, { .children_offset=3861, .match_offset=8913 }, { .children_offset=3865, .match_offset=0 }, { .children_offset=3868, .match_offset=0 }, { .children_offset=3870, .match_offset=0 }, { .children_offset=3872, .match_offset=0 }, { .children_offset=3874, .match_offset=0 }, { .children_offset=0, .match_offset=108535 }, { .children_offset=3876, .match_offset=0 }, { .children_offset=3878, .match_offset=0 }, { .children_offset=3880, .match_offset=0 }, { .children_offset=3882, .match_offset=0 }, { .children_offset=3884, .match_offset=0 }, { .children_offset=3886, .match_offset=0 }, { .children_offset=3888, .match_offset=0 }, { .children_offset=3890, .match_offset=0 }, { .children_offset=3892, .match_offset=0 }, { .children_offset=0, .match_offset=10250 }, { .children_offset=3894, .match_offset=0 }, { .children_offset=3897, .match_offset=0 }, { .children_offset=3899, .match_offset=0 }, { .children_offset=3901, .match_offset=0 }, { .children_offset=0, .match_offset=46212 }, { .children_offset=3903, .match_offset=0 }, { .children_offset=3905, .match_offset=0 }, { .children_offset=3907, .match_offset=0 }, { .children_offset=0, .match_offset=68327 }, { .children_offset=3909, .match_offset=0 }, { .children_offset=3911, .match_offset=0 }, { .children_offset=3913, .match_offset=0 }, { .children_offset=3915, .match_offset=0 }, { .children_offset=0, .match_offset=60037 }, { .children_offset=3917, .match_offset=68429 }, { .children_offset=3922, .match_offset=0 }, { .children_offset=0, .match_offset=16635 }, { .children_offset=3924, .match_offset=0 }, { .children_offset=3926, .match_offset=0 }, { .children_offset=3928, .match_offset=0 }, { .children_offset=3930, .match_offset=0 }, { .children_offset=3932, .match_offset=0 }, { .children_offset=0, .match_offset=35856 }, { .children_offset=0, .match_offset=134308 }, { .children_offset=3934, .match_offset=0 }, { .children_offset=3936, .match_offset=0 }, { .children_offset=0, .match_offset=57402 }, { .children_offset=3938, .match_offset=109204 }, { .children_offset=0, .match_offset=11077 }, { .children_offset=3940, .match_offset=123605 }, { .children_offset=3946, .match_offset=0 }, { .children_offset=0, .match_offset=55683 }, { .children_offset=3949, .match_offset=0 }, { .children_offset=3951, .match_offset=0 }, { .children_offset=0, .match_offset=113632 }, { .children_offset=0, .match_offset=90622 }, { .children_offset=3953, .match_offset=0 }, { .children_offset=0, .match_offset=59029 }, { .children_offset=3955, .match_offset=0 }, { .children_offset=3957, .match_offset=66402 }, { .children_offset=3959, .match_offset=0 }, { .children_offset=3961, .match_offset=0 }, { .children_offset=3963, .match_offset=0 }, { .children_offset=3965, .match_offset=0 }, { .children_offset=3967, .match_offset=0 }, { .children_offset=3969, .match_offset=0 }, { .children_offset=0, .match_offset=78537 }, { .children_offset=0, .match_offset=127374 }, { .children_offset=3971, .match_offset=2328 }, { .children_offset=0, .match_offset=67366 }, { .children_offset=3973, .match_offset=0 }, { .children_offset=0, .match_offset=64769 }, { .children_offset=4001, .match_offset=0 }, { .children_offset=4012, .match_offset=0 }, { .children_offset=0, .match_offset=86072 }, { .children_offset=0, .match_offset=37672 }, { .children_offset=0, .match_offset=55015 }, { .children_offset=0, .match_offset=113980 }, { .children_offset=4022, .match_offset=125050 }, { .children_offset=0, .match_offset=135998 }, { .children_offset=0, .match_offset=57492 }, { .children_offset=0, .match_offset=46595 }, { .children_offset=0, .match_offset=86930 }, { .children_offset=0, .match_offset=79720 }, { .children_offset=4024, .match_offset=0 }, { .children_offset=0, .match_offset=58831 }, { .children_offset=0, .match_offset=48211 }, { .children_offset=0, .match_offset=89348 }, { .children_offset=0, .match_offset=129956 }, { .children_offset=0, .match_offset=34456 }, { .children_offset=0, .match_offset=68318 }, { .children_offset=0, .match_offset=28195 }, { .children_offset=0, .match_offset=136024 }, { .children_offset=0, .match_offset=124740 }, { .children_offset=0, .match_offset=44966 }, { .children_offset=4035, .match_offset=0 }, { .children_offset=0, .match_offset=35754 }, { .children_offset=0, .match_offset=8866 }, { .children_offset=0, .match_offset=125210 }, { .children_offset=0, .match_offset=109758 }, { .children_offset=0, .match_offset=81978 }, { .children_offset=0, .match_offset=12608 }, { .children_offset=0, .match_offset=20900 }, { .children_offset=0, .match_offset=133558 }, { .children_offset=0, .match_offset=71984 }, { .children_offset=0, .match_offset=37686 }, { .children_offset=4046, .match_offset=0 }, { .children_offset=0, .match_offset=20328 }, { .children_offset=0, .match_offset=67816 }, { .children_offset=0, .match_offset=56891 }, { .children_offset=0, .match_offset=58797 }, { .children_offset=0, .match_offset=13211 }, { .children_offset=0, .match_offset=50329 }, { .children_offset=0, .match_offset=5313 }, { .children_offset=0, .match_offset=81058 }, { .children_offset=0, .match_offset=132924 }, { .children_offset=4056, .match_offset=0 }, { .children_offset=0, .match_offset=44311 }, { .children_offset=0, .match_offset=30485 }, { .children_offset=0, .match_offset=64567 }, { .children_offset=0, .match_offset=109208 }, { .children_offset=0, .match_offset=30925 }, { .children_offset=0, .match_offset=103567 }, { .children_offset=0, .match_offset=85220 }, { .children_offset=0, .match_offset=102691 }, { .children_offset=0, .match_offset=116347 }, { .children_offset=0, .match_offset=78872 }, { .children_offset=4067, .match_offset=0 }, { .children_offset=0, .match_offset=133343 }, { .children_offset=0, .match_offset=64528 }, { .children_offset=0, .match_offset=103429 }, { .children_offset=0, .match_offset=20528 }, { .children_offset=0, .match_offset=73882 }, { .children_offset=0, .match_offset=86994 }, { .children_offset=0, .match_offset=131004 }, { .children_offset=0, .match_offset=105799 }, { .children_offset=0, .match_offset=43339 }, { .children_offset=0, .match_offset=42021 }, { .children_offset=4078, .match_offset=0 }, { .children_offset=0, .match_offset=20449 }, { .children_offset=0, .match_offset=21098 }, { .children_offset=0, .match_offset=15470 }, { .children_offset=0, .match_offset=115995 }, { .children_offset=0, .match_offset=77385 }, { .children_offset=0, .match_offset=42070 }, { .children_offset=0, .match_offset=8463 }, { .children_offset=0, .match_offset=74719 }, { .children_offset=0, .match_offset=29242 }, { .children_offset=0, .match_offset=72878 }, { .children_offset=4089, .match_offset=0 }, { .children_offset=0, .match_offset=65505 }, { .children_offset=0, .match_offset=119383 }, { .children_offset=0, .match_offset=62392 }, { .children_offset=0, .match_offset=55022 }, { .children_offset=0, .match_offset=80635 }, { .children_offset=0, .match_offset=8808 }, { .children_offset=0, .match_offset=35756 }, { .children_offset=0, .match_offset=14523 }, { .children_offset=0, .match_offset=74622 }, { .children_offset=0, .match_offset=133510 }, { .children_offset=4100, .match_offset=0 }, { .children_offset=0, .match_offset=33459 }, { .children_offset=0, .match_offset=16066 }, { .children_offset=0, .match_offset=73228 }, { .children_offset=0, .match_offset=30751 }, { .children_offset=0, .match_offset=44309 }, { .children_offset=0, .match_offset=42999 }, { .children_offset=0, .match_offset=103129 }, { .children_offset=0, .match_offset=66426 }, { .children_offset=4109, .match_offset=0 }, { .children_offset=0, .match_offset=28063 }, { .children_offset=0, .match_offset=57340 }, { .children_offset=4112, .match_offset=0 }, { .children_offset=4122, .match_offset=0 }, { .children_offset=0, .match_offset=13188 }, { .children_offset=0, .match_offset=72321 }, { .children_offset=0, .match_offset=62942 }, { .children_offset=4131, .match_offset=32802 }, { .children_offset=0, .match_offset=9025 }, { .children_offset=0, .match_offset=81928 }, { .children_offset=4134, .match_offset=0 }, { .children_offset=0, .match_offset=114040 }, { .children_offset=0, .match_offset=116175 }, { .children_offset=4137, .match_offset=0 }, { .children_offset=0, .match_offset=6152 }, { .children_offset=0, .match_offset=27765 }, { .children_offset=4140, .match_offset=0 }, { .children_offset=0, .match_offset=103458 }, { .children_offset=0, .match_offset=119425 }, { .children_offset=4143, .match_offset=0 }, { .children_offset=0, .match_offset=89182 }, { .children_offset=0, .match_offset=37532 }, { .children_offset=4146, .match_offset=0 }, { .children_offset=0, .match_offset=9950 }, { .children_offset=0, .match_offset=11930 }, { .children_offset=0, .match_offset=132819 }, { .children_offset=0, .match_offset=12610 }, { .children_offset=0, .match_offset=45963 }, { .children_offset=0, .match_offset=123124 }, { .children_offset=0, .match_offset=87010 }, { .children_offset=4154, .match_offset=0 }, { .children_offset=0, .match_offset=25989 }, { .children_offset=0, .match_offset=123539 }, { .children_offset=0, .match_offset=64286 }, { .children_offset=0, .match_offset=13138 }, { .children_offset=0, .match_offset=129340 }, { .children_offset=4160, .match_offset=0 }, { .children_offset=0, .match_offset=58950 }, { .children_offset=0, .match_offset=62668 }, { .children_offset=0, .match_offset=62270 }, { .children_offset=0, .match_offset=33914 }, { .children_offset=0, .match_offset=121918 }, { .children_offset=4166, .match_offset=0 }, { .children_offset=0, .match_offset=25940 }, { .children_offset=0, .match_offset=72627 }, { .children_offset=0, .match_offset=134499 }, { .children_offset=0, .match_offset=43423 }, { .children_offset=0, .match_offset=49912 }, { .children_offset=0, .match_offset=27181 }, { .children_offset=0, .match_offset=44114 }, { .children_offset=0, .match_offset=58192 }, { .children_offset=0, .match_offset=115746 }, { .children_offset=0, .match_offset=24337 }, { .children_offset=4177, .match_offset=0 }, { .children_offset=0, .match_offset=56991 }, { .children_offset=0, .match_offset=104438 }, { .children_offset=0, .match_offset=12391 }, { .children_offset=0, .match_offset=39076 }, { .children_offset=0, .match_offset=23915 }, { .children_offset=0, .match_offset=7705 }, { .children_offset=0, .match_offset=130921 }, { .children_offset=0, .match_offset=8973 }, { .children_offset=0, .match_offset=69316 }, { .children_offset=0, .match_offset=61162 }, { .children_offset=4188, .match_offset=0 }, { .children_offset=0, .match_offset=63461 }, { .children_offset=0, .match_offset=109498 }, { .children_offset=0, .match_offset=69056 }, { .children_offset=0, .match_offset=122736 }, { .children_offset=0, .match_offset=7026 }, { .children_offset=0, .match_offset=135017 }, { .children_offset=0, .match_offset=123117 }, { .children_offset=0, .match_offset=90577 }, { .children_offset=0, .match_offset=67400 }, { .children_offset=4198, .match_offset=0 }, { .children_offset=0, .match_offset=42400 }, { .children_offset=0, .match_offset=136243 }, { .children_offset=0, .match_offset=103357 }, { .children_offset=0, .match_offset=111202 }, { .children_offset=0, .match_offset=123473 }, { .children_offset=0, .match_offset=119616 }, { .children_offset=0, .match_offset=62584 }, { .children_offset=4206, .match_offset=0 }, { .children_offset=0, .match_offset=45117 }, { .children_offset=0, .match_offset=53612 }, { .children_offset=4209, .match_offset=0 }, { .children_offset=4216, .match_offset=0 }, { .children_offset=0, .match_offset=6581 }, { .children_offset=0, .match_offset=30395 }, { .children_offset=0, .match_offset=134473 }, { .children_offset=0, .match_offset=34108 }, { .children_offset=0, .match_offset=70913 }, { .children_offset=0, .match_offset=5917 }, { .children_offset=0, .match_offset=127286 }, { .children_offset=0, .match_offset=35833 }, { .children_offset=0, .match_offset=20312 }, { .children_offset=0, .match_offset=60548 }, { .children_offset=4227, .match_offset=0 }, { .children_offset=0, .match_offset=64288 }, { .children_offset=0, .match_offset=5923 }, { .children_offset=0, .match_offset=74688 }, { .children_offset=0, .match_offset=55414 }, { .children_offset=0, .match_offset=77816 }, { .children_offset=0, .match_offset=104459 }, { .children_offset=0, .match_offset=5932 }, { .children_offset=0, .match_offset=59156 }, { .children_offset=0, .match_offset=61253 }, { .children_offset=0, .match_offset=15064 }, { .children_offset=4238, .match_offset=0 }, { .children_offset=0, .match_offset=60705 }, { .children_offset=0, .match_offset=55952 }, { .children_offset=0, .match_offset=14521 }, { .children_offset=0, .match_offset=81060 }, { .children_offset=0, .match_offset=81050 }, { .children_offset=0, .match_offset=124966 }, { .children_offset=0, .match_offset=68971 }, { .children_offset=0, .match_offset=57374 }, { .children_offset=4247, .match_offset=0 }, { .children_offset=0, .match_offset=11464 }, { .children_offset=0, .match_offset=102356 }, { .children_offset=0, .match_offset=114818 }, { .children_offset=0, .match_offset=121852 }, { .children_offset=0, .match_offset=123344 }, { .children_offset=0, .match_offset=109293 }, { .children_offset=4254, .match_offset=0 }, { .children_offset=0, .match_offset=125839 }, { .children_offset=0, .match_offset=101030 }, { .children_offset=0, .match_offset=67579 }, { .children_offset=0, .match_offset=14342 }, { .children_offset=0, .match_offset=131158 }, { .children_offset=0, .match_offset=65527 }, { .children_offset=0, .match_offset=49914 }, { .children_offset=0, .match_offset=77779 }, { .children_offset=0, .match_offset=87314 }, { .children_offset=4264, .match_offset=0 }, { .children_offset=0, .match_offset=62316 }, { .children_offset=0, .match_offset=68771 }, { .children_offset=0, .match_offset=134175 }, { .children_offset=0, .match_offset=27582 }, { .children_offset=0, .match_offset=132491 }, { .children_offset=0, .match_offset=110391 }, { .children_offset=0, .match_offset=70828 }, { .children_offset=0, .match_offset=35752 }, { .children_offset=0, .match_offset=30615 }, { .children_offset=0, .match_offset=38482 }, { .children_offset=4275, .match_offset=0 }, { .children_offset=4277, .match_offset=0 }, { .children_offset=0, .match_offset=25750 }, { .children_offset=4279, .match_offset=8662 }, { .children_offset=4298, .match_offset=0 }, { .children_offset=0, .match_offset=52543 }, { .children_offset=4300, .match_offset=113376 }, { .children_offset=4302, .match_offset=0 }, { .children_offset=4304, .match_offset=0 }, { .children_offset=4306, .match_offset=0 }, { .children_offset=0, .match_offset=123565 }, { .children_offset=4308, .match_offset=0 }, { .children_offset=0, .match_offset=14909 }, { .children_offset=4310, .match_offset=0 }, { .children_offset=4314, .match_offset=5751 }, { .children_offset=4321, .match_offset=0 }, { .children_offset=4323, .match_offset=0 }, { .children_offset=4325, .match_offset=0 }, { .children_offset=4327, .match_offset=0 }, { .children_offset=4329, .match_offset=0 }, { .children_offset=4331, .match_offset=0 }, { .children_offset=0, .match_offset=71807 }, { .children_offset=4333, .match_offset=0 }, { .children_offset=4335, .match_offset=0 }, { .children_offset=4337, .match_offset=0 }, { .children_offset=0, .match_offset=108586 }, { .children_offset=4339, .match_offset=0 }, { .children_offset=4341, .match_offset=0 }, { .children_offset=4343, .match_offset=0 }, { .children_offset=4345, .match_offset=0 }, { .children_offset=4347, .match_offset=0 }, { .children_offset=4349, .match_offset=0 }, { .children_offset=0, .match_offset=23923 }, { .children_offset=4351, .match_offset=0 }, { .children_offset=4353, .match_offset=0 }, { .children_offset=4355, .match_offset=0 }, { .children_offset=0, .match_offset=52739 }, { .children_offset=4357, .match_offset=0 }, { .children_offset=4359, .match_offset=0 }, { .children_offset=4361, .match_offset=0 }, { .children_offset=4363, .match_offset=0 }, { .children_offset=0, .match_offset=72337 }, { .children_offset=4365, .match_offset=0 }, { .children_offset=4369, .match_offset=0 }, { .children_offset=4371, .match_offset=7352 }, { .children_offset=4373, .match_offset=0 }, { .children_offset=0, .match_offset=21794 }, { .children_offset=4375, .match_offset=0 }, { .children_offset=4377, .match_offset=0 }, { .children_offset=4380, .match_offset=0 }, { .children_offset=4382, .match_offset=0 }, { .children_offset=4384, .match_offset=0 }, { .children_offset=0, .match_offset=58550 }, { .children_offset=4386, .match_offset=0 }, { .children_offset=0, .match_offset=46153 }, { .children_offset=4388, .match_offset=0 }, { .children_offset=4390, .match_offset=0 }, { .children_offset=4392, .match_offset=0 }, { .children_offset=0, .match_offset=49747 }, { .children_offset=4394, .match_offset=0 }, { .children_offset=0, .match_offset=109394 }, { .children_offset=4396, .match_offset=0 }, { .children_offset=4398, .match_offset=0 }, { .children_offset=4400, .match_offset=0 }, { .children_offset=4402, .match_offset=0 }, { .children_offset=0, .match_offset=69028 }, { .children_offset=4404, .match_offset=81020 }, { .children_offset=4407, .match_offset=0 }, { .children_offset=4409, .match_offset=126555 }, { .children_offset=0, .match_offset=43093 }, { .children_offset=4411, .match_offset=0 }, { .children_offset=4413, .match_offset=0 }, { .children_offset=4415, .match_offset=0 }, { .children_offset=4417, .match_offset=0 }, { .children_offset=4419, .match_offset=0 }, { .children_offset=0, .match_offset=109599 }, { .children_offset=4421, .match_offset=55779 }, { .children_offset=0, .match_offset=30315 }, { .children_offset=0, .match_offset=16574 }, { .children_offset=4428, .match_offset=0 }, { .children_offset=0, .match_offset=34878 }, { .children_offset=4430, .match_offset=0 }, { .children_offset=4432, .match_offset=0 }, { .children_offset=4434, .match_offset=0 }, { .children_offset=0, .match_offset=53971 }, { .children_offset=0, .match_offset=28037 }, { .children_offset=4436, .match_offset=0 }, { .children_offset=4438, .match_offset=0 }, { .children_offset=4440, .match_offset=0 }, { .children_offset=4442, .match_offset=0 }, { .children_offset=0, .match_offset=86070 }, { .children_offset=4444, .match_offset=74438 }, { .children_offset=4448, .match_offset=0 }, { .children_offset=4450, .match_offset=0 }, { .children_offset=0, .match_offset=131493 }, { .children_offset=4452, .match_offset=0 }, { .children_offset=4454, .match_offset=0 }, { .children_offset=4456, .match_offset=0 }, { .children_offset=4458, .match_offset=0 }, { .children_offset=4460, .match_offset=0 }, { .children_offset=4462, .match_offset=0 }, { .children_offset=4464, .match_offset=0 }, { .children_offset=4466, .match_offset=0 }, { .children_offset=0, .match_offset=16209 }, { .children_offset=0, .match_offset=28436 }, { .children_offset=4468, .match_offset=0 }, { .children_offset=4471, .match_offset=0 }, { .children_offset=4473, .match_offset=0 }, { .children_offset=0, .match_offset=64359 }, { .children_offset=4475, .match_offset=0 }, { .children_offset=4477, .match_offset=0 }, { .children_offset=4479, .match_offset=0 }, { .children_offset=0, .match_offset=125575 }, { .children_offset=4481, .match_offset=14330 }, { .children_offset=4487, .match_offset=0 }, { .children_offset=0, .match_offset=110524 }, { .children_offset=0, .match_offset=66258 }, { .children_offset=4489, .match_offset=0 }, { .children_offset=4491, .match_offset=0 }, { .children_offset=4493, .match_offset=0 }, { .children_offset=4495, .match_offset=0 }, { .children_offset=0, .match_offset=21523 }, { .children_offset=4497, .match_offset=61907 }, { .children_offset=4501, .match_offset=0 }, { .children_offset=0, .match_offset=26135 }, { .children_offset=4503, .match_offset=0 }, { .children_offset=4506, .match_offset=0 }, { .children_offset=4508, .match_offset=14479 }, { .children_offset=4510, .match_offset=0 }, { .children_offset=4512, .match_offset=0 }, { .children_offset=4514, .match_offset=0 }, { .children_offset=4516, .match_offset=0 }, { .children_offset=4518, .match_offset=0 }, { .children_offset=4520, .match_offset=0 }, { .children_offset=0, .match_offset=60081 }, { .children_offset=0, .match_offset=64507 }, { .children_offset=4522, .match_offset=0 }, { .children_offset=4524, .match_offset=0 }, { .children_offset=4526, .match_offset=0 }, { .children_offset=4528, .match_offset=0 }, { .children_offset=0, .match_offset=56638 }, { .children_offset=4530, .match_offset=0 }, { .children_offset=4532, .match_offset=0 }, { .children_offset=0, .match_offset=28238 }, { .children_offset=4534, .match_offset=0 }, { .children_offset=4537, .match_offset=0 }, { .children_offset=4539, .match_offset=0 }, { .children_offset=4541, .match_offset=77181 }, { .children_offset=0, .match_offset=87361 }, { .children_offset=4543, .match_offset=0 }, { .children_offset=0, .match_offset=39494 }, { .children_offset=4545, .match_offset=46656 }, { .children_offset=0, .match_offset=55244 }, { .children_offset=4553, .match_offset=0 }, { .children_offset=4555, .match_offset=0 }, { .children_offset=0, .match_offset=74564 }, { .children_offset=4557, .match_offset=38894 }, { .children_offset=4559, .match_offset=0 }, { .children_offset=4561, .match_offset=0 }, { .children_offset=0, .match_offset=77663 }, { .children_offset=0, .match_offset=113626 }, { .children_offset=4563, .match_offset=0 }, { .children_offset=0, .match_offset=125166 }, { .children_offset=4565, .match_offset=43124 }, { .children_offset=4567, .match_offset=0 }, { .children_offset=4569, .match_offset=0 }, { .children_offset=4571, .match_offset=0 }, { .children_offset=0, .match_offset=42630 }, { .children_offset=4573, .match_offset=0 }, { .children_offset=4575, .match_offset=0 }, { .children_offset=0, .match_offset=9895 }, { .children_offset=0, .match_offset=40896 }, { .children_offset=4577, .match_offset=57775 }, { .children_offset=4586, .match_offset=0 }, { .children_offset=0, .match_offset=59442 }, { .children_offset=4588, .match_offset=112737 }, { .children_offset=4590, .match_offset=0 }, { .children_offset=0, .match_offset=113302 }, { .children_offset=4592, .match_offset=0 }, { .children_offset=4594, .match_offset=0 }, { .children_offset=4596, .match_offset=0 }, { .children_offset=4598, .match_offset=0 }, { .children_offset=4600, .match_offset=0 }, { .children_offset=4602, .match_offset=0 }, { .children_offset=0, .match_offset=37646 }, { .children_offset=4604, .match_offset=0 }, { .children_offset=4607, .match_offset=0 }, { .children_offset=0, .match_offset=11930 }, { .children_offset=4609, .match_offset=0 }, { .children_offset=4611, .match_offset=0 }, { .children_offset=0, .match_offset=86697 }, { .children_offset=4613, .match_offset=0 }, { .children_offset=4616, .match_offset=0 }, { .children_offset=0, .match_offset=73779 }, { .children_offset=0, .match_offset=60793 }, { .children_offset=4620, .match_offset=0 }, { .children_offset=0, .match_offset=38459 }, { .children_offset=4622, .match_offset=0 }, { .children_offset=4624, .match_offset=0 }, { .children_offset=0, .match_offset=116949 }, { .children_offset=0, .match_offset=5480 }, { .children_offset=4626, .match_offset=110900 }, { .children_offset=4628, .match_offset=0 }, { .children_offset=0, .match_offset=13152 }, { .children_offset=4630, .match_offset=0 }, { .children_offset=4632, .match_offset=0 }, { .children_offset=4634, .match_offset=28113 }, { .children_offset=4636, .match_offset=0 }, { .children_offset=0, .match_offset=33431 }, { .children_offset=4638, .match_offset=0 }, { .children_offset=4643, .match_offset=81115 }, { .children_offset=4646, .match_offset=0 }, { .children_offset=4648, .match_offset=0 }, { .children_offset=4650, .match_offset=0 }, { .children_offset=0, .match_offset=34578 }, { .children_offset=4652, .match_offset=0 }, { .children_offset=4654, .match_offset=0 }, { .children_offset=4656, .match_offset=0 }, { .children_offset=0, .match_offset=90677 }, { .children_offset=4658, .match_offset=108811 }, { .children_offset=4660, .match_offset=0 }, { .children_offset=4662, .match_offset=0 }, { .children_offset=0, .match_offset=65085 }, { .children_offset=4664, .match_offset=0 }, { .children_offset=4666, .match_offset=0 }, { .children_offset=4668, .match_offset=12370 }, { .children_offset=4670, .match_offset=0 }, { .children_offset=4672, .match_offset=0 }, { .children_offset=4674, .match_offset=0 }, { .children_offset=0, .match_offset=53552 }, { .children_offset=4676, .match_offset=0 }, { .children_offset=0, .match_offset=132964 }, { .children_offset=4678, .match_offset=27892 }, { .children_offset=4682, .match_offset=0 }, { .children_offset=0, .match_offset=2165 }, { .children_offset=4684, .match_offset=122380 }, { .children_offset=4687, .match_offset=0 }, { .children_offset=4689, .match_offset=0 }, { .children_offset=4691, .match_offset=0 }, { .children_offset=4693, .match_offset=0 }, { .children_offset=4695, .match_offset=0 }, { .children_offset=0, .match_offset=123770 }, { .children_offset=4697, .match_offset=0 }, { .children_offset=4699, .match_offset=0 }, { .children_offset=0, .match_offset=136212 }, { .children_offset=4701, .match_offset=0 }, { .children_offset=4703, .match_offset=0 }, { .children_offset=4705, .match_offset=0 }, { .children_offset=0, .match_offset=123752 }, { .children_offset=0, .match_offset=55733 }, { .children_offset=0, .match_offset=42373 }, { .children_offset=4707, .match_offset=0 }, { .children_offset=4709, .match_offset=0 }, { .children_offset=4711, .match_offset=0 }, { .children_offset=4713, .match_offset=0 }, { .children_offset=0, .match_offset=54443 }, { .children_offset=4715, .match_offset=65109 }, { .children_offset=4723, .match_offset=80275 }, { .children_offset=0, .match_offset=27736 }, { .children_offset=0, .match_offset=86990 }, { .children_offset=0, .match_offset=30902 }, { .children_offset=0, .match_offset=33203 }, { .children_offset=4728, .match_offset=35397 }, { .children_offset=0, .match_offset=42053 }, { .children_offset=0, .match_offset=126421 }, { .children_offset=0, .match_offset=64294 }, { .children_offset=4732, .match_offset=27235 }, { .children_offset=4737, .match_offset=60771 }, { .children_offset=0, .match_offset=122000 }, { .children_offset=0, .match_offset=6243 }, { .children_offset=0, .match_offset=74463 }, { .children_offset=0, .match_offset=104487 }, { .children_offset=0, .match_offset=7695 }, { .children_offset=0, .match_offset=28252 }, { .children_offset=4741, .match_offset=108737 }, { .children_offset=0, .match_offset=33365 }, { .children_offset=0, .match_offset=122601 }, { .children_offset=0, .match_offset=5209 }, { .children_offset=4745, .match_offset=0 }, { .children_offset=4747, .match_offset=60542 }, { .children_offset=4749, .match_offset=0 }, { .children_offset=4751, .match_offset=0 }, { .children_offset=4753, .match_offset=0 }, { .children_offset=0, .match_offset=74356 }, { .children_offset=4755, .match_offset=34425 }, { .children_offset=4761, .match_offset=33857 }, { .children_offset=0, .match_offset=63427 }, { .children_offset=0, .match_offset=78403 }, { .children_offset=0, .match_offset=126417 }, { .children_offset=4764, .match_offset=79747 }, { .children_offset=0, .match_offset=84812 }, { .children_offset=0, .match_offset=64278 }, { .children_offset=0, .match_offset=122051 }, { .children_offset=4766, .match_offset=45836 }, { .children_offset=0, .match_offset=114481 }, { .children_offset=0, .match_offset=64479 }, { .children_offset=0, .match_offset=119459 }, { .children_offset=4770, .match_offset=0 }, { .children_offset=4774, .match_offset=0 }, { .children_offset=0, .match_offset=12792 }, { .children_offset=4776, .match_offset=0 }, { .children_offset=4778, .match_offset=0 }, { .children_offset=0, .match_offset=108586 }, { .children_offset=0, .match_offset=27077 }, { .children_offset=4780, .match_offset=0 }, { .children_offset=4782, .match_offset=0 }, { .children_offset=4784, .match_offset=0 }, { .children_offset=0, .match_offset=67380 }, { .children_offset=4786, .match_offset=38506 }, { .children_offset=4806, .match_offset=0 }, { .children_offset=4814, .match_offset=0 }, { .children_offset=0, .match_offset=116336 }, { .children_offset=4816, .match_offset=0 }, { .children_offset=0, .match_offset=134393 }, { .children_offset=4818, .match_offset=16179 }, { .children_offset=4820, .match_offset=0 }, { .children_offset=0, .match_offset=67988 }, { .children_offset=0, .match_offset=15942 }, { .children_offset=4822, .match_offset=80942 }, { .children_offset=4824, .match_offset=0 }, { .children_offset=4826, .match_offset=0 }, { .children_offset=0, .match_offset=132855 }, { .children_offset=4828, .match_offset=26011 }, { .children_offset=4830, .match_offset=0 }, { .children_offset=4832, .match_offset=0 }, { .children_offset=0, .match_offset=13146 }, { .children_offset=4834, .match_offset=0 }, { .children_offset=4836, .match_offset=0 }, { .children_offset=0, .match_offset=27579 }, { .children_offset=4838, .match_offset=0 }, { .children_offset=4840, .match_offset=0 }, { .children_offset=4842, .match_offset=0 }, { .children_offset=4844, .match_offset=63401 }, { .children_offset=0, .match_offset=63401 }, { .children_offset=0, .match_offset=73239 }, { .children_offset=4846, .match_offset=73735 }, { .children_offset=4850, .match_offset=15671 }, { .children_offset=4852, .match_offset=0 }, { .children_offset=4854, .match_offset=0 }, { .children_offset=0, .match_offset=14287 }, { .children_offset=0, .match_offset=43010 }, { .children_offset=4856, .match_offset=0 }, { .children_offset=0, .match_offset=125372 }, { .children_offset=4859, .match_offset=0 }, { .children_offset=0, .match_offset=112714 }, { .children_offset=4861, .match_offset=0 }, { .children_offset=4863, .match_offset=0 }, { .children_offset=4865, .match_offset=0 }, { .children_offset=0, .match_offset=87777 }, { .children_offset=4867, .match_offset=0 }, { .children_offset=4869, .match_offset=0 }, { .children_offset=4871, .match_offset=6245 }, { .children_offset=4873, .match_offset=0 }, { .children_offset=4876, .match_offset=0 }, { .children_offset=0, .match_offset=37919 }, { .children_offset=4878, .match_offset=0 }, { .children_offset=4880, .match_offset=0 }, { .children_offset=0, .match_offset=38730 }, { .children_offset=4882, .match_offset=50231 }, { .children_offset=4885, .match_offset=0 }, { .children_offset=0, .match_offset=109863 }, { .children_offset=4887, .match_offset=0 }, { .children_offset=4889, .match_offset=0 }, { .children_offset=0, .match_offset=58421 }, { .children_offset=4891, .match_offset=64774 }, { .children_offset=4893, .match_offset=0 }, { .children_offset=0, .match_offset=103565 }, { .children_offset=4895, .match_offset=0 }, { .children_offset=4900, .match_offset=0 }, { .children_offset=4902, .match_offset=0 }, { .children_offset=4904, .match_offset=0 }, { .children_offset=4906, .match_offset=0 }, { .children_offset=0, .match_offset=45046 }, { .children_offset=4908, .match_offset=55156 }, { .children_offset=4910, .match_offset=0 }, { .children_offset=4912, .match_offset=0 }, { .children_offset=0, .match_offset=16078 }, { .children_offset=4914, .match_offset=0 }, { .children_offset=0, .match_offset=110596 }, { .children_offset=0, .match_offset=68114 }, { .children_offset=4916, .match_offset=0 }, { .children_offset=4918, .match_offset=0 }, { .children_offset=4920, .match_offset=0 }, { .children_offset=4922, .match_offset=0 }, { .children_offset=0, .match_offset=14291 }, { .children_offset=4924, .match_offset=28228 }, { .children_offset=4929, .match_offset=14532 }, { .children_offset=0, .match_offset=56577 }, { .children_offset=4931, .match_offset=0 }, { .children_offset=4933, .match_offset=0 }, { .children_offset=4935, .match_offset=0 }, { .children_offset=0, .match_offset=39089 }, { .children_offset=4937, .match_offset=77244 }, { .children_offset=0, .match_offset=70720 }, { .children_offset=4939, .match_offset=0 }, { .children_offset=4941, .match_offset=0 }, { .children_offset=4943, .match_offset=0 }, { .children_offset=0, .match_offset=8435 }, { .children_offset=4945, .match_offset=0 }, { .children_offset=4947, .match_offset=0 }, { .children_offset=0, .match_offset=123759 }, { .children_offset=4949, .match_offset=131618 }, { .children_offset=4951, .match_offset=0 }, { .children_offset=0, .match_offset=23923 }, { .children_offset=4953, .match_offset=0 }, { .children_offset=4957, .match_offset=0 }, { .children_offset=4959, .match_offset=0 }, { .children_offset=0, .match_offset=100983 }, { .children_offset=4961, .match_offset=0 }, { .children_offset=4963, .match_offset=0 }, { .children_offset=4965, .match_offset=0 }, { .children_offset=4967, .match_offset=0 }, { .children_offset=0, .match_offset=123759 }, { .children_offset=4969, .match_offset=0 }, { .children_offset=4971, .match_offset=0 }, { .children_offset=4973, .match_offset=6183 }, { .children_offset=4975, .match_offset=0 }, { .children_offset=4977, .match_offset=0 }, { .children_offset=4979, .match_offset=0 }, { .children_offset=0, .match_offset=6183 }, { .children_offset=4981, .match_offset=0 }, { .children_offset=4983, .match_offset=0 }, { .children_offset=4985, .match_offset=0 }, { .children_offset=0, .match_offset=129873 }, { .children_offset=4987, .match_offset=67560 }, { .children_offset=0, .match_offset=135768 }, { .children_offset=0, .match_offset=35350 }, { .children_offset=4991, .match_offset=0 }, { .children_offset=4993, .match_offset=0 }, { .children_offset=4995, .match_offset=0 }, { .children_offset=0, .match_offset=80240 }, { .children_offset=4997, .match_offset=0 }, { .children_offset=4999, .match_offset=0 }, { .children_offset=5001, .match_offset=0 }, { .children_offset=5003, .match_offset=0 }, { .children_offset=5005, .match_offset=0 }, { .children_offset=0, .match_offset=21959 }, { .children_offset=0, .match_offset=43631 }, { .children_offset=5007, .match_offset=0 }, { .children_offset=5009, .match_offset=0 }, { .children_offset=5011, .match_offset=0 }, { .children_offset=0, .match_offset=27449 }, { .children_offset=5013, .match_offset=0 }, { .children_offset=0, .match_offset=25896 }, { .children_offset=5015, .match_offset=2304 }, { .children_offset=5021, .match_offset=22334 }, { .children_offset=0, .match_offset=69320 }, { .children_offset=5026, .match_offset=0 }, { .children_offset=5028, .match_offset=0 }, { .children_offset=5030, .match_offset=0 }, { .children_offset=5032, .match_offset=0 }, { .children_offset=5034, .match_offset=0 }, { .children_offset=0, .match_offset=64780 }, { .children_offset=0, .match_offset=25545 }, { .children_offset=5036, .match_offset=0 }, { .children_offset=5038, .match_offset=0 }, { .children_offset=5040, .match_offset=0 }, { .children_offset=5042, .match_offset=0 }, { .children_offset=5044, .match_offset=0 }, { .children_offset=5046, .match_offset=0 }, { .children_offset=5048, .match_offset=0 }, { .children_offset=0, .match_offset=6827 }, { .children_offset=5050, .match_offset=108174 }, { .children_offset=0, .match_offset=33804 }, { .children_offset=5053, .match_offset=0 }, { .children_offset=0, .match_offset=133636 }, { .children_offset=0, .match_offset=5305 }, { .children_offset=5055, .match_offset=123198 }, { .children_offset=0, .match_offset=87160 }, { .children_offset=0, .match_offset=20637 }, { .children_offset=5057, .match_offset=104014 }, { .children_offset=5072, .match_offset=35403 }, { .children_offset=5074, .match_offset=0 }, { .children_offset=5076, .match_offset=0 }, { .children_offset=5078, .match_offset=0 }, { .children_offset=5080, .match_offset=0 }, { .children_offset=5082, .match_offset=0 }, { .children_offset=5084, .match_offset=0 }, { .children_offset=0, .match_offset=78599 }, { .children_offset=5086, .match_offset=0 }, { .children_offset=5089, .match_offset=0 }, { .children_offset=5091, .match_offset=0 }, { .children_offset=0, .match_offset=82021 }, { .children_offset=5093, .match_offset=0 }, { .children_offset=5095, .match_offset=0 }, { .children_offset=5097, .match_offset=0 }, { .children_offset=5100, .match_offset=63081 }, { .children_offset=0, .match_offset=27033 }, { .children_offset=5102, .match_offset=0 }, { .children_offset=5104, .match_offset=0 }, { .children_offset=0, .match_offset=55670 }, { .children_offset=5106, .match_offset=0 }, { .children_offset=5108, .match_offset=0 }, { .children_offset=5110, .match_offset=0 }, { .children_offset=5112, .match_offset=0 }, { .children_offset=5114, .match_offset=0 }, { .children_offset=0, .match_offset=116302 }, { .children_offset=5116, .match_offset=45063 }, { .children_offset=0, .match_offset=27964 }, { .children_offset=0, .match_offset=117525 }, { .children_offset=0, .match_offset=51129 }, { .children_offset=5120, .match_offset=52687 }, { .children_offset=5128, .match_offset=0 }, { .children_offset=5132, .match_offset=0 }, { .children_offset=0, .match_offset=8854 }, { .children_offset=5134, .match_offset=0 }, { .children_offset=5136, .match_offset=0 }, { .children_offset=0, .match_offset=71992 }, { .children_offset=5138, .match_offset=0 }, { .children_offset=0, .match_offset=59497 }, { .children_offset=5140, .match_offset=0 }, { .children_offset=5144, .match_offset=0 }, { .children_offset=5146, .match_offset=0 }, { .children_offset=0, .match_offset=28041 }, { .children_offset=5148, .match_offset=0 }, { .children_offset=5150, .match_offset=0 }, { .children_offset=5152, .match_offset=0 }, { .children_offset=0, .match_offset=89333 }, { .children_offset=5154, .match_offset=0 }, { .children_offset=5156, .match_offset=0 }, { .children_offset=5158, .match_offset=0 }, { .children_offset=5160, .match_offset=0 }, { .children_offset=0, .match_offset=130075 }, { .children_offset=5162, .match_offset=0 }, { .children_offset=5165, .match_offset=0 }, { .children_offset=5167, .match_offset=0 }, { .children_offset=5169, .match_offset=0 }, { .children_offset=0, .match_offset=116937 }, { .children_offset=5171, .match_offset=0 }, { .children_offset=5173, .match_offset=0 }, { .children_offset=0, .match_offset=110395 }, { .children_offset=5175, .match_offset=0 }, { .children_offset=5177, .match_offset=0 }, { .children_offset=5179, .match_offset=0 }, { .children_offset=5181, .match_offset=0 }, { .children_offset=5183, .match_offset=0 }, { .children_offset=5185, .match_offset=0 }, { .children_offset=5187, .match_offset=0 }, { .children_offset=5189, .match_offset=0 }, { .children_offset=5192, .match_offset=0 }, { .children_offset=5194, .match_offset=0 }, { .children_offset=5196, .match_offset=0 }, { .children_offset=0, .match_offset=55281 }, { .children_offset=5198, .match_offset=0 }, { .children_offset=0, .match_offset=10997 }, { .children_offset=5200, .match_offset=0 }, { .children_offset=5202, .match_offset=0 }, { .children_offset=5204, .match_offset=0 }, { .children_offset=5206, .match_offset=0 }, { .children_offset=0, .match_offset=28430 }, { .children_offset=5208, .match_offset=0 }, { .children_offset=5210, .match_offset=0 }, { .children_offset=0, .match_offset=16027 }, { .children_offset=5212, .match_offset=0 }, { .children_offset=5214, .match_offset=0 }, { .children_offset=5216, .match_offset=0 }, { .children_offset=5218, .match_offset=0 }, { .children_offset=0, .match_offset=29893 }, { .children_offset=5220, .match_offset=0 }, { .children_offset=5222, .match_offset=0 }, { .children_offset=5224, .match_offset=0 }, { .children_offset=0, .match_offset=122508 }, { .children_offset=5226, .match_offset=0 }, { .children_offset=5229, .match_offset=0 }, { .children_offset=5231, .match_offset=0 }, { .children_offset=5233, .match_offset=0 }, { .children_offset=5235, .match_offset=0 }, { .children_offset=0, .match_offset=6349 }, { .children_offset=5237, .match_offset=0 }, { .children_offset=5240, .match_offset=0 }, { .children_offset=0, .match_offset=133647 }, { .children_offset=5242, .match_offset=0 }, { .children_offset=5245, .match_offset=0 }, { .children_offset=5247, .match_offset=0 }, { .children_offset=5249, .match_offset=0 }, { .children_offset=0, .match_offset=57328 }, { .children_offset=5251, .match_offset=0 }, { .children_offset=5253, .match_offset=0 }, { .children_offset=0, .match_offset=60733 }, { .children_offset=5255, .match_offset=0 }, { .children_offset=5259, .match_offset=0 }, { .children_offset=5261, .match_offset=0 }, { .children_offset=0, .match_offset=21671 }, { .children_offset=5263, .match_offset=0 }, { .children_offset=5266, .match_offset=78193 }, { .children_offset=5268, .match_offset=0 }, { .children_offset=0, .match_offset=53529 }, { .children_offset=0, .match_offset=74133 }, { .children_offset=5270, .match_offset=0 }, { .children_offset=5273, .match_offset=0 }, { .children_offset=5275, .match_offset=0 }, { .children_offset=5277, .match_offset=0 }, { .children_offset=5279, .match_offset=0 }, { .children_offset=0, .match_offset=104202 }, { .children_offset=5281, .match_offset=0 }, { .children_offset=5283, .match_offset=0 }, { .children_offset=5285, .match_offset=0 }, { .children_offset=0, .match_offset=20423 }, { .children_offset=5287, .match_offset=0 }, { .children_offset=5289, .match_offset=0 }, { .children_offset=5291, .match_offset=0 }, { .children_offset=5293, .match_offset=0 }, { .children_offset=5295, .match_offset=0 }, { .children_offset=5297, .match_offset=0 }, { .children_offset=0, .match_offset=35207 }, { .children_offset=0, .match_offset=7725 }, { .children_offset=5299, .match_offset=0 }, { .children_offset=0, .match_offset=113849 }, { .children_offset=5304, .match_offset=0 }, { .children_offset=0, .match_offset=109098 }, { .children_offset=5306, .match_offset=0 }, { .children_offset=5308, .match_offset=0 }, { .children_offset=5310, .match_offset=0 }, { .children_offset=5312, .match_offset=0 }, { .children_offset=0, .match_offset=68299 }, { .children_offset=0, .match_offset=62295 }, { .children_offset=5314, .match_offset=0 }, { .children_offset=5319, .match_offset=0 }, { .children_offset=0, .match_offset=80590 }, { .children_offset=5321, .match_offset=0 }, { .children_offset=5323, .match_offset=0 }, { .children_offset=5325, .match_offset=0 }, { .children_offset=5327, .match_offset=0 }, { .children_offset=5329, .match_offset=0 }, { .children_offset=0, .match_offset=64739 }, { .children_offset=5331, .match_offset=0 }, { .children_offset=5333, .match_offset=0 }, { .children_offset=0, .match_offset=131597 }, { .children_offset=5335, .match_offset=0 }, { .children_offset=5338, .match_offset=0 }, { .children_offset=5340, .match_offset=0 }, { .children_offset=5342, .match_offset=0 }, { .children_offset=5344, .match_offset=0 }, { .children_offset=0, .match_offset=57773 }, { .children_offset=5346, .match_offset=0 }, { .children_offset=5348, .match_offset=0 }, { .children_offset=0, .match_offset=134471 }, { .children_offset=5350, .match_offset=102711 }, { .children_offset=5355, .match_offset=0 }, { .children_offset=5357, .match_offset=0 }, { .children_offset=5359, .match_offset=0 }, { .children_offset=0, .match_offset=77438 }, { .children_offset=0, .match_offset=1513 }, { .children_offset=5361, .match_offset=0 }, { .children_offset=5363, .match_offset=0 }, { .children_offset=0, .match_offset=114875 }, { .children_offset=5365, .match_offset=0 }, { .children_offset=5367, .match_offset=0 }, { .children_offset=0, .match_offset=123803 }, { .children_offset=0, .match_offset=25533 }, { .children_offset=5369, .match_offset=0 }, { .children_offset=5371, .match_offset=0 }, { .children_offset=5373, .match_offset=0 }, { .children_offset=5375, .match_offset=0 }, { .children_offset=5377, .match_offset=0 }, { .children_offset=0, .match_offset=123759 }, { .children_offset=5379, .match_offset=0 }, { .children_offset=5381, .match_offset=0 }, { .children_offset=0, .match_offset=86945 }, { .children_offset=5384, .match_offset=0 }, { .children_offset=5386, .match_offset=0 }, { .children_offset=0, .match_offset=124843 }, { .children_offset=5388, .match_offset=0 }, { .children_offset=5395, .match_offset=114529 }, { .children_offset=5399, .match_offset=0 }, { .children_offset=5401, .match_offset=1544 }, { .children_offset=5407, .match_offset=0 }, { .children_offset=5410, .match_offset=0 }, { .children_offset=5412, .match_offset=0 }, { .children_offset=5414, .match_offset=0 }, { .children_offset=5416, .match_offset=0 }, { .children_offset=5418, .match_offset=0 }, { .children_offset=5420, .match_offset=0 }, { .children_offset=5422, .match_offset=0 }, { .children_offset=5424, .match_offset=0 }, { .children_offset=0, .match_offset=30537 }, { .children_offset=5426, .match_offset=0 }, { .children_offset=5428, .match_offset=0 }, { .children_offset=5430, .match_offset=0 }, { .children_offset=5432, .match_offset=0 }, { .children_offset=5434, .match_offset=0 }, { .children_offset=0, .match_offset=21654 }, { .children_offset=5436, .match_offset=0 }, { .children_offset=5438, .match_offset=0 }, { .children_offset=5440, .match_offset=0 }, { .children_offset=0, .match_offset=50340 }, { .children_offset=5442, .match_offset=0 }, { .children_offset=5445, .match_offset=0 }, { .children_offset=5447, .match_offset=0 }, { .children_offset=5449, .match_offset=0 }, { .children_offset=5451, .match_offset=0 }, { .children_offset=0, .match_offset=7009 }, { .children_offset=5453, .match_offset=0 }, { .children_offset=5455, .match_offset=0 }, { .children_offset=5457, .match_offset=0 }, { .children_offset=5459, .match_offset=0 }, { .children_offset=5461, .match_offset=0 }, { .children_offset=0, .match_offset=5996 }, { .children_offset=5463, .match_offset=0 }, { .children_offset=5465, .match_offset=0 }, { .children_offset=5467, .match_offset=0 }, { .children_offset=5469, .match_offset=0 }, { .children_offset=5471, .match_offset=0 }, { .children_offset=0, .match_offset=5555 }, { .children_offset=5473, .match_offset=0 }, { .children_offset=5475, .match_offset=0 }, { .children_offset=5477, .match_offset=0 }, { .children_offset=5479, .match_offset=0 }, { .children_offset=5481, .match_offset=0 }, { .children_offset=5483, .match_offset=0 }, { .children_offset=5485, .match_offset=0 }, { .children_offset=5487, .match_offset=129331 }, { .children_offset=5491, .match_offset=0 }, { .children_offset=5493, .match_offset=0 }, { .children_offset=5495, .match_offset=0 }, { .children_offset=0, .match_offset=12448 }, { .children_offset=5497, .match_offset=0 }, { .children_offset=5499, .match_offset=0 }, { .children_offset=5501, .match_offset=0 }, { .children_offset=0, .match_offset=86311 }, { .children_offset=5503, .match_offset=0 }, { .children_offset=5505, .match_offset=0 }, { .children_offset=5507, .match_offset=0 }, { .children_offset=5509, .match_offset=0 }, { .children_offset=0, .match_offset=24124 }, { .children_offset=5511, .match_offset=0 }, { .children_offset=0, .match_offset=85451 }, { .children_offset=5513, .match_offset=0 }, { .children_offset=0, .match_offset=34569 }, { .children_offset=5515, .match_offset=0 }, { .children_offset=5517, .match_offset=0 }, { .children_offset=5519, .match_offset=0 }, { .children_offset=5521, .match_offset=0 }, { .children_offset=0, .match_offset=30916 }, { .children_offset=5523, .match_offset=0 }, { .children_offset=5525, .match_offset=0 }, { .children_offset=0, .match_offset=61702 }, { .children_offset=5527, .match_offset=0 }, { .children_offset=5530, .match_offset=0 }, { .children_offset=0, .match_offset=63208 }, { .children_offset=0, .match_offset=25570 }, { .children_offset=5533, .match_offset=0 }, { .children_offset=0, .match_offset=55260 }, { .children_offset=5535, .match_offset=0 }, { .children_offset=5541, .match_offset=0 }, { .children_offset=0, .match_offset=25461 }, { .children_offset=5543, .match_offset=0 }, { .children_offset=0, .match_offset=68850 }, { .children_offset=5545, .match_offset=0 }, { .children_offset=0, .match_offset=102924 }, { .children_offset=5547, .match_offset=0 }, { .children_offset=5549, .match_offset=0 }, { .children_offset=5551, .match_offset=0 }, { .children_offset=0, .match_offset=16651 }, { .children_offset=5553, .match_offset=39083 }, { .children_offset=5556, .match_offset=0 }, { .children_offset=5558, .match_offset=0 }, { .children_offset=5560, .match_offset=0 }, { .children_offset=0, .match_offset=115999 }, { .children_offset=5562, .match_offset=0 }, { .children_offset=5564, .match_offset=0 }, { .children_offset=0, .match_offset=31008 }, { .children_offset=5566, .match_offset=0 }, { .children_offset=0, .match_offset=133692 }, { .children_offset=5568, .match_offset=0 }, { .children_offset=5570, .match_offset=0 }, { .children_offset=0, .match_offset=116320 }, { .children_offset=5572, .match_offset=13907 }, { .children_offset=5587, .match_offset=60029 }, { .children_offset=5590, .match_offset=32776 }, { .children_offset=0, .match_offset=134451 }, { .children_offset=0, .match_offset=34890 }, { .children_offset=5592, .match_offset=0 }, { .children_offset=0, .match_offset=6760 }, { .children_offset=5594, .match_offset=0 }, { .children_offset=5596, .match_offset=0 }, { .children_offset=5598, .match_offset=0 }, { .children_offset=5600, .match_offset=0 }, { .children_offset=5602, .match_offset=0 }, { .children_offset=0, .match_offset=70931 }, { .children_offset=5604, .match_offset=0 }, { .children_offset=0, .match_offset=107475 }, { .children_offset=0, .match_offset=90138 }, { .children_offset=5607, .match_offset=0 }, { .children_offset=0, .match_offset=131072 }, { .children_offset=5609, .match_offset=0 }, { .children_offset=0, .match_offset=90051 }, { .children_offset=5611, .match_offset=16311 }, { .children_offset=5615, .match_offset=79736 }, { .children_offset=5618, .match_offset=0 }, { .children_offset=5620, .match_offset=0 }, { .children_offset=5622, .match_offset=0 }, { .children_offset=0, .match_offset=38529 }, { .children_offset=0, .match_offset=44439 }, { .children_offset=5624, .match_offset=0 }, { .children_offset=5626, .match_offset=0 }, { .children_offset=5628, .match_offset=0 }, { .children_offset=5630, .match_offset=0 }, { .children_offset=5632, .match_offset=0 }, { .children_offset=0, .match_offset=28594 }, { .children_offset=5634, .match_offset=131234 }, { .children_offset=0, .match_offset=103435 }, { .children_offset=5636, .match_offset=68789 }, { .children_offset=0, .match_offset=114885 }, { .children_offset=5639, .match_offset=0 }, { .children_offset=5641, .match_offset=0 }, { .children_offset=5643, .match_offset=0 }, { .children_offset=5645, .match_offset=0 }, { .children_offset=0, .match_offset=27085 }, { .children_offset=5647, .match_offset=0 }, { .children_offset=5650, .match_offset=0 }, { .children_offset=5652, .match_offset=80424 }, { .children_offset=5654, .match_offset=0 }, { .children_offset=0, .match_offset=40342 }, { .children_offset=0, .match_offset=40876 }, { .children_offset=5657, .match_offset=0 }, { .children_offset=5659, .match_offset=0 }, { .children_offset=0, .match_offset=124823 }, { .children_offset=5661, .match_offset=116342 }, { .children_offset=0, .match_offset=109255 }, { .children_offset=5664, .match_offset=0 }, { .children_offset=5667, .match_offset=0 }, { .children_offset=0, .match_offset=102739 }, { .children_offset=5669, .match_offset=0 }, { .children_offset=5671, .match_offset=68800 }, { .children_offset=5673, .match_offset=0 }, { .children_offset=5676, .match_offset=0 }, { .children_offset=5678, .match_offset=0 }, { .children_offset=5680, .match_offset=0 }, { .children_offset=5682, .match_offset=0 }, { .children_offset=5684, .match_offset=0 }, { .children_offset=5686, .match_offset=0 }, { .children_offset=0, .match_offset=74235 }, { .children_offset=5688, .match_offset=0 }, { .children_offset=5690, .match_offset=0 }, { .children_offset=5692, .match_offset=0 }, { .children_offset=5694, .match_offset=0 }, { .children_offset=5696, .match_offset=0 }, { .children_offset=0, .match_offset=16203 }, { .children_offset=5698, .match_offset=0 }, { .children_offset=5701, .match_offset=0 }, { .children_offset=5703, .match_offset=0 }, { .children_offset=5705, .match_offset=0 }, { .children_offset=5707, .match_offset=0 }, { .children_offset=0, .match_offset=38539 }, { .children_offset=5709, .match_offset=0 }, { .children_offset=5711, .match_offset=0 }, { .children_offset=5713, .match_offset=0 }, { .children_offset=0, .match_offset=46032 }, { .children_offset=5715, .match_offset=78496 }, { .children_offset=5719, .match_offset=0 }, { .children_offset=5721, .match_offset=0 }, { .children_offset=0, .match_offset=117582 }, { .children_offset=5723, .match_offset=68959 }, { .children_offset=5725, .match_offset=0 }, { .children_offset=5727, .match_offset=0 }, { .children_offset=0, .match_offset=21886 }, { .children_offset=5729, .match_offset=0 }, { .children_offset=5731, .match_offset=0 }, { .children_offset=0, .match_offset=37275 }, { .children_offset=5733, .match_offset=23964 }, { .children_offset=5743, .match_offset=0 }, { .children_offset=5745, .match_offset=0 }, { .children_offset=0, .match_offset=37231 }, { .children_offset=5747, .match_offset=0 }, { .children_offset=0, .match_offset=54473 }, { .children_offset=0, .match_offset=88019 }, { .children_offset=5750, .match_offset=123737 }, { .children_offset=0, .match_offset=32994 }, { .children_offset=0, .match_offset=111450 }, { .children_offset=5753, .match_offset=0 }, { .children_offset=5755, .match_offset=0 }, { .children_offset=0, .match_offset=72664 }, { .children_offset=5757, .match_offset=0 }, { .children_offset=5759, .match_offset=0 }, { .children_offset=5761, .match_offset=0 }, { .children_offset=5763, .match_offset=0 }, { .children_offset=0, .match_offset=20413 }, { .children_offset=5765, .match_offset=0 }, { .children_offset=5767, .match_offset=0 }, { .children_offset=5769, .match_offset=0 }, { .children_offset=0, .match_offset=125841 }, { .children_offset=5771, .match_offset=0 }, { .children_offset=5773, .match_offset=0 }, { .children_offset=5775, .match_offset=0 }, { .children_offset=5777, .match_offset=0 }, { .children_offset=0, .match_offset=84854 }, { .children_offset=5779, .match_offset=0 }, { .children_offset=0, .match_offset=115380 }, { .children_offset=0, .match_offset=58543 }, { .children_offset=5782, .match_offset=125175 }, { .children_offset=0, .match_offset=35199 }, { .children_offset=0, .match_offset=13129 }, { .children_offset=0, .match_offset=5585 }, { .children_offset=5786, .match_offset=72260 }, { .children_offset=0, .match_offset=89630 }, { .children_offset=5788, .match_offset=0 }, { .children_offset=5790, .match_offset=0 }, { .children_offset=5792, .match_offset=0 }, { .children_offset=5794, .match_offset=0 }, { .children_offset=0, .match_offset=72337 }, { .children_offset=0, .match_offset=58045 }, { .children_offset=5796, .match_offset=0 }, { .children_offset=5804, .match_offset=133583 }, { .children_offset=5810, .match_offset=0 }, { .children_offset=0, .match_offset=42988 }, { .children_offset=5813, .match_offset=0 }, { .children_offset=5815, .match_offset=0 }, { .children_offset=5817, .match_offset=11763 }, { .children_offset=5819, .match_offset=0 }, { .children_offset=0, .match_offset=133545 }, { .children_offset=5821, .match_offset=0 }, { .children_offset=5823, .match_offset=0 }, { .children_offset=0, .match_offset=64581 }, { .children_offset=5825, .match_offset=0 }, { .children_offset=5828, .match_offset=0 }, { .children_offset=5830, .match_offset=0 }, { .children_offset=0, .match_offset=52750 }, { .children_offset=0, .match_offset=129854 }, { .children_offset=5832, .match_offset=0 }, { .children_offset=5834, .match_offset=0 }, { .children_offset=5836, .match_offset=0 }, { .children_offset=0, .match_offset=113965 }, { .children_offset=5838, .match_offset=0 }, { .children_offset=5840, .match_offset=0 }, { .children_offset=5842, .match_offset=115782 }, { .children_offset=5845, .match_offset=0 }, { .children_offset=0, .match_offset=113986 }, { .children_offset=5847, .match_offset=0 }, { .children_offset=5849, .match_offset=0 }, { .children_offset=0, .match_offset=104082 }, { .children_offset=5851, .match_offset=0 }, { .children_offset=0, .match_offset=12410 }, { .children_offset=5853, .match_offset=0 }, { .children_offset=5856, .match_offset=0 }, { .children_offset=0, .match_offset=60448 }, { .children_offset=5861, .match_offset=0 }, { .children_offset=5863, .match_offset=0 }, { .children_offset=5865, .match_offset=0 }, { .children_offset=5867, .match_offset=0 }, { .children_offset=5869, .match_offset=0 }, { .children_offset=5871, .match_offset=0 }, { .children_offset=5873, .match_offset=0 }, { .children_offset=0, .match_offset=115786 }, { .children_offset=5875, .match_offset=0 }, { .children_offset=5877, .match_offset=0 }, { .children_offset=5879, .match_offset=0 }, { .children_offset=5881, .match_offset=0 }, { .children_offset=5883, .match_offset=0 }, { .children_offset=5885, .match_offset=0 }, { .children_offset=5887, .match_offset=0 }, { .children_offset=5889, .match_offset=0 }, { .children_offset=5891, .match_offset=0 }, { .children_offset=0, .match_offset=69157 }, { .children_offset=5893, .match_offset=0 }, { .children_offset=0, .match_offset=40658 }, { .children_offset=5895, .match_offset=0 }, { .children_offset=5898, .match_offset=74245 }, { .children_offset=5900, .match_offset=0 }, { .children_offset=5902, .match_offset=0 }, { .children_offset=5904, .match_offset=0 }, { .children_offset=5906, .match_offset=0 }, { .children_offset=5908, .match_offset=0 }, { .children_offset=5910, .match_offset=0 }, { .children_offset=0, .match_offset=53969 }, { .children_offset=5912, .match_offset=0 }, { .children_offset=0, .match_offset=38671 }, { .children_offset=5914, .match_offset=35213 }, { .children_offset=5920, .match_offset=0 }, { .children_offset=0, .match_offset=121938 }, { .children_offset=5922, .match_offset=0 }, { .children_offset=0, .match_offset=13894 }, { .children_offset=5925, .match_offset=0 }, { .children_offset=0, .match_offset=129856 }, { .children_offset=5927, .match_offset=0 }, { .children_offset=5929, .match_offset=0 }, { .children_offset=5932, .match_offset=0 }, { .children_offset=5934, .match_offset=0 }, { .children_offset=5936, .match_offset=0 }, { .children_offset=0, .match_offset=68587 }, { .children_offset=0, .match_offset=15715 }, { .children_offset=5938, .match_offset=0 }, { .children_offset=5940, .match_offset=0 }, { .children_offset=5942, .match_offset=0 }, { .children_offset=5944, .match_offset=0 }, { .children_offset=5946, .match_offset=0 }, { .children_offset=5948, .match_offset=0 }, { .children_offset=0, .match_offset=52216 }, { .children_offset=5950, .match_offset=0 }, { .children_offset=5952, .match_offset=0 }, { .children_offset=5954, .match_offset=0 }, { .children_offset=0, .match_offset=135072 }, { .children_offset=5956, .match_offset=0 }, { .children_offset=5963, .match_offset=0 }, { .children_offset=0, .match_offset=115718 }, { .children_offset=5965, .match_offset=0 }, { .children_offset=5967, .match_offset=0 }, { .children_offset=5969, .match_offset=0 }, { .children_offset=5971, .match_offset=0 }, { .children_offset=0, .match_offset=70869 }, { .children_offset=5973, .match_offset=0 }, { .children_offset=5975, .match_offset=0 }, { .children_offset=0, .match_offset=26016 }, { .children_offset=5977, .match_offset=0 }, { .children_offset=5979, .match_offset=0 }, { .children_offset=0, .match_offset=58950 }, { .children_offset=5981, .match_offset=0 }, { .children_offset=0, .match_offset=89535 }, { .children_offset=5983, .match_offset=0 }, { .children_offset=0, .match_offset=124657 }, { .children_offset=5985, .match_offset=0 }, { .children_offset=5987, .match_offset=0 }, { .children_offset=0, .match_offset=71567 }, { .children_offset=5989, .match_offset=0 }, { .children_offset=5991, .match_offset=0 }, { .children_offset=5993, .match_offset=0 }, { .children_offset=0, .match_offset=135004 }, { .children_offset=5995, .match_offset=0 }, { .children_offset=6003, .match_offset=0 }, { .children_offset=0, .match_offset=25561 }, { .children_offset=6005, .match_offset=0 }, { .children_offset=6007, .match_offset=0 }, { .children_offset=0, .match_offset=49276 }, { .children_offset=6009, .match_offset=0 }, { .children_offset=6011, .match_offset=0 }, { .children_offset=0, .match_offset=24306 }, { .children_offset=6013, .match_offset=0 }, { .children_offset=6015, .match_offset=7352 }, { .children_offset=0, .match_offset=21794 }, { .children_offset=6017, .match_offset=0 }, { .children_offset=6020, .match_offset=0 }, { .children_offset=0, .match_offset=12419 }, { .children_offset=6022, .match_offset=0 }, { .children_offset=0, .match_offset=115387 }, { .children_offset=6024, .match_offset=0 }, { .children_offset=6026, .match_offset=82076 }, { .children_offset=0, .match_offset=61245 }, { .children_offset=6029, .match_offset=0 }, { .children_offset=6031, .match_offset=0 }, { .children_offset=6033, .match_offset=0 }, { .children_offset=0, .match_offset=108220 }, { .children_offset=6035, .match_offset=0 }, { .children_offset=6037, .match_offset=0 }, { .children_offset=0, .match_offset=86283 }, { .children_offset=6039, .match_offset=64716 }, { .children_offset=6058, .match_offset=0 }, { .children_offset=6060, .match_offset=0 }, { .children_offset=6062, .match_offset=0 }, { .children_offset=6064, .match_offset=59108 }, { .children_offset=0, .match_offset=14922 }, { .children_offset=6066, .match_offset=0 }, { .children_offset=6068, .match_offset=0 }, { .children_offset=6070, .match_offset=0 }, { .children_offset=0, .match_offset=14248 }, { .children_offset=0, .match_offset=33939 }, { .children_offset=6072, .match_offset=0 }, { .children_offset=6074, .match_offset=0 }, { .children_offset=6076, .match_offset=0 }, { .children_offset=6078, .match_offset=0 }, { .children_offset=0, .match_offset=38416 }, { .children_offset=6080, .match_offset=38693 }, { .children_offset=6082, .match_offset=0 }, { .children_offset=6084, .match_offset=0 }, { .children_offset=6086, .match_offset=0 }, { .children_offset=6088, .match_offset=0 }, { .children_offset=0, .match_offset=65218 }, { .children_offset=6090, .match_offset=0 }, { .children_offset=6092, .match_offset=0 }, { .children_offset=0, .match_offset=117630 }, { .children_offset=6094, .match_offset=0 }, { .children_offset=6096, .match_offset=0 }, { .children_offset=6098, .match_offset=0 }, { .children_offset=6100, .match_offset=0 }, { .children_offset=6102, .match_offset=0 }, { .children_offset=6104, .match_offset=27669 }, { .children_offset=0, .match_offset=34658 }, { .children_offset=6106, .match_offset=0 }, { .children_offset=0, .match_offset=45917 }, { .children_offset=6108, .match_offset=0 }, { .children_offset=0, .match_offset=1511 }, { .children_offset=6112, .match_offset=77822 }, { .children_offset=6116, .match_offset=0 }, { .children_offset=0, .match_offset=130847 }, { .children_offset=6118, .match_offset=0 }, { .children_offset=6120, .match_offset=0 }, { .children_offset=6122, .match_offset=0 }, { .children_offset=0, .match_offset=40195 }, { .children_offset=6124, .match_offset=57376 }, { .children_offset=6126, .match_offset=0 }, { .children_offset=6128, .match_offset=0 }, { .children_offset=0, .match_offset=27873 }, { .children_offset=6130, .match_offset=0 }, { .children_offset=0, .match_offset=65363 }, { .children_offset=6132, .match_offset=0 }, { .children_offset=6134, .match_offset=37648 }, { .children_offset=6137, .match_offset=78714 }, { .children_offset=0, .match_offset=25458 }, { .children_offset=0, .match_offset=102347 }, { .children_offset=6139, .match_offset=0 }, { .children_offset=0, .match_offset=72510 }, { .children_offset=6142, .match_offset=0 }, { .children_offset=0, .match_offset=53559 }, { .children_offset=6144, .match_offset=110993 }, { .children_offset=0, .match_offset=21974 }, { .children_offset=0, .match_offset=7699 }, { .children_offset=0, .match_offset=131721 }, { .children_offset=0, .match_offset=68884 }, { .children_offset=6148, .match_offset=16346 }, { .children_offset=0, .match_offset=5543 }, { .children_offset=6153, .match_offset=0 }, { .children_offset=6155, .match_offset=0 }, { .children_offset=6157, .match_offset=0 }, { .children_offset=0, .match_offset=130917 }, { .children_offset=0, .match_offset=109762 }, { .children_offset=0, .match_offset=63465 }, { .children_offset=6159, .match_offset=25675 }, { .children_offset=6163, .match_offset=0 }, { .children_offset=6165, .match_offset=0 }, { .children_offset=6167, .match_offset=0 }, { .children_offset=6169, .match_offset=0 }, { .children_offset=0, .match_offset=114948 }, { .children_offset=6171, .match_offset=0 }, { .children_offset=6173, .match_offset=0 }, { .children_offset=6175, .match_offset=0 }, { .children_offset=6177, .match_offset=0 }, { .children_offset=0, .match_offset=124887 }, { .children_offset=6179, .match_offset=109443 }, { .children_offset=0, .match_offset=119221 }, { .children_offset=6181, .match_offset=132913 }, { .children_offset=6183, .match_offset=0 }, { .children_offset=6186, .match_offset=0 }, { .children_offset=6188, .match_offset=35723 }, { .children_offset=6190, .match_offset=0 }, { .children_offset=6192, .match_offset=0 }, { .children_offset=0, .match_offset=42935 }, { .children_offset=6194, .match_offset=0 }, { .children_offset=0, .match_offset=22185 }, { .children_offset=6196, .match_offset=0 }, { .children_offset=6198, .match_offset=0 }, { .children_offset=6200, .match_offset=0 }, { .children_offset=6202, .match_offset=0 }, { .children_offset=0, .match_offset=118411 }, { .children_offset=0, .match_offset=61510 }, { .children_offset=6204, .match_offset=0 }, { .children_offset=0, .match_offset=86996 }, { .children_offset=6208, .match_offset=14957 }, { .children_offset=0, .match_offset=37881 }, { .children_offset=0, .match_offset=49695 }, { .children_offset=6210, .match_offset=0 }, { .children_offset=0, .match_offset=53860 }, { .children_offset=6212, .match_offset=42640 }, { .children_offset=6219, .match_offset=0 }, { .children_offset=6221, .match_offset=0 }, { .children_offset=6223, .match_offset=0 }, { .children_offset=6225, .match_offset=0 }, { .children_offset=6227, .match_offset=0 }, { .children_offset=6229, .match_offset=0 }, { .children_offset=6231, .match_offset=0 }, { .children_offset=6233, .match_offset=0 }, { .children_offset=6235, .match_offset=0 }, { .children_offset=6237, .match_offset=0 }, { .children_offset=6239, .match_offset=0 }, { .children_offset=6241, .match_offset=0 }, { .children_offset=6243, .match_offset=0 }, { .children_offset=6245, .match_offset=0 }, { .children_offset=6247, .match_offset=0 }, { .children_offset=6249, .match_offset=0 }, { .children_offset=6251, .match_offset=0 }, { .children_offset=6253, .match_offset=0 }, { .children_offset=6255, .match_offset=0 }, { .children_offset=0, .match_offset=40622 }, { .children_offset=0, .match_offset=44769 }, { .children_offset=6257, .match_offset=85252 }, { .children_offset=0, .match_offset=12428 }, { .children_offset=0, .match_offset=118554 }, { .children_offset=0, .match_offset=16334 }, { .children_offset=6259, .match_offset=0 }, { .children_offset=6261, .match_offset=0 }, { .children_offset=6263, .match_offset=0 }, { .children_offset=6265, .match_offset=0 }, { .children_offset=6267, .match_offset=0 }, { .children_offset=6269, .match_offset=0 }, { .children_offset=0, .match_offset=20645 }, { .children_offset=6271, .match_offset=0 }, { .children_offset=6274, .match_offset=0 }, { .children_offset=0, .match_offset=72785 }, { .children_offset=6276, .match_offset=0 }, { .children_offset=6278, .match_offset=0 }, { .children_offset=0, .match_offset=25980 }, { .children_offset=6280, .match_offset=0 }, { .children_offset=0, .match_offset=102353 }, { .children_offset=6301, .match_offset=0 }, { .children_offset=6305, .match_offset=0 }, { .children_offset=0, .match_offset=41876 }, { .children_offset=6307, .match_offset=0 }, { .children_offset=0, .match_offset=10966 }, { .children_offset=6309, .match_offset=0 }, { .children_offset=6311, .match_offset=0 }, { .children_offset=6313, .match_offset=0 }, { .children_offset=6315, .match_offset=0 }, { .children_offset=6317, .match_offset=0 }, { .children_offset=6319, .match_offset=0 }, { .children_offset=6321, .match_offset=0 }, { .children_offset=6323, .match_offset=0 }, { .children_offset=6325, .match_offset=0 }, { .children_offset=0, .match_offset=61862 }, { .children_offset=6327, .match_offset=0 }, { .children_offset=6331, .match_offset=0 }, { .children_offset=0, .match_offset=90647 }, { .children_offset=6341, .match_offset=31158 }, { .children_offset=0, .match_offset=6659 }, { .children_offset=0, .match_offset=114473 }, { .children_offset=0, .match_offset=74354 }, { .children_offset=0, .match_offset=110978 }, { .children_offset=0, .match_offset=90620 }, { .children_offset=0, .match_offset=89967 }, { .children_offset=0, .match_offset=62318 }, { .children_offset=0, .match_offset=119696 }, { .children_offset=0, .match_offset=49755 }, { .children_offset=0, .match_offset=73607 }, { .children_offset=6345, .match_offset=0 }, { .children_offset=6356, .match_offset=29941 }, { .children_offset=0, .match_offset=12322 }, { .children_offset=0, .match_offset=122140 }, { .children_offset=0, .match_offset=119618 }, { .children_offset=0, .match_offset=72339 }, { .children_offset=0, .match_offset=12505 }, { .children_offset=0, .match_offset=108794 }, { .children_offset=0, .match_offset=12042 }, { .children_offset=0, .match_offset=27537 }, { .children_offset=0, .match_offset=80230 }, { .children_offset=0, .match_offset=74545 }, { .children_offset=6358, .match_offset=0 }, { .children_offset=0, .match_offset=89067 }, { .children_offset=0, .match_offset=72089 }, { .children_offset=0, .match_offset=74373 }, { .children_offset=0, .match_offset=35192 }, { .children_offset=0, .match_offset=122470 }, { .children_offset=6364, .match_offset=102385 }, { .children_offset=6384, .match_offset=45747 }, { .children_offset=0, .match_offset=52585 }, { .children_offset=6387, .match_offset=0 }, { .children_offset=0, .match_offset=24321 }, { .children_offset=6389, .match_offset=0 }, { .children_offset=6393, .match_offset=0 }, { .children_offset=6395, .match_offset=0 }, { .children_offset=6397, .match_offset=0 }, { .children_offset=6399, .match_offset=0 }, { .children_offset=6401, .match_offset=0 }, { .children_offset=6403, .match_offset=0 }, { .children_offset=6405, .match_offset=0 }, { .children_offset=6407, .match_offset=0 }, { .children_offset=0, .match_offset=11980 }, { .children_offset=6409, .match_offset=0 }, { .children_offset=6411, .match_offset=0 }, { .children_offset=6413, .match_offset=0 }, { .children_offset=0, .match_offset=38468 }, { .children_offset=6415, .match_offset=0 }, { .children_offset=6417, .match_offset=0 }, { .children_offset=6419, .match_offset=0 }, { .children_offset=6421, .match_offset=0 }, { .children_offset=0, .match_offset=103766 }, { .children_offset=6423, .match_offset=0 }, { .children_offset=6426, .match_offset=0 }, { .children_offset=6428, .match_offset=0 }, { .children_offset=0, .match_offset=82001 }, { .children_offset=6430, .match_offset=0 }, { .children_offset=6432, .match_offset=0 }, { .children_offset=0, .match_offset=110213 }, { .children_offset=6434, .match_offset=0 }, { .children_offset=0, .match_offset=130959 }, { .children_offset=6437, .match_offset=0 }, { .children_offset=6439, .match_offset=0 }, { .children_offset=6441, .match_offset=0 }, { .children_offset=6443, .match_offset=0 }, { .children_offset=0, .match_offset=59378 }, { .children_offset=6445, .match_offset=0 }, { .children_offset=6447, .match_offset=0 }, { .children_offset=6449, .match_offset=0 }, { .children_offset=6451, .match_offset=0 }, { .children_offset=0, .match_offset=105777 }, { .children_offset=0, .match_offset=6744 }, { .children_offset=0, .match_offset=11936 }, { .children_offset=6453, .match_offset=0 }, { .children_offset=0, .match_offset=104036 }, { .children_offset=6456, .match_offset=0 }, { .children_offset=0, .match_offset=77380 }, { .children_offset=6458, .match_offset=57924 }, { .children_offset=6464, .match_offset=87823 }, { .children_offset=6466, .match_offset=0 }, { .children_offset=6468, .match_offset=0 }, { .children_offset=6470, .match_offset=0 }, { .children_offset=6472, .match_offset=0 }, { .children_offset=6474, .match_offset=0 }, { .children_offset=0, .match_offset=6910 }, { .children_offset=6476, .match_offset=0 }, { .children_offset=6478, .match_offset=0 }, { .children_offset=6480, .match_offset=0 }, { .children_offset=6482, .match_offset=0 }, { .children_offset=0, .match_offset=21325 }, { .children_offset=0, .match_offset=124786 }, { .children_offset=0, .match_offset=90087 }, { .children_offset=6484, .match_offset=0 }, { .children_offset=0, .match_offset=88763 }, { .children_offset=6486, .match_offset=0 }, { .children_offset=6490, .match_offset=0 }, { .children_offset=0, .match_offset=34153 }, { .children_offset=6493, .match_offset=0 }, { .children_offset=0, .match_offset=124556 }, { .children_offset=6495, .match_offset=0 }, { .children_offset=6497, .match_offset=0 }, { .children_offset=0, .match_offset=68750 }, { .children_offset=6499, .match_offset=0 }, { .children_offset=6501, .match_offset=0 }, { .children_offset=6503, .match_offset=0 }, { .children_offset=0, .match_offset=134593 }, { .children_offset=6505, .match_offset=135903 }, { .children_offset=6514, .match_offset=0 }, { .children_offset=6516, .match_offset=0 }, { .children_offset=6518, .match_offset=0 }, { .children_offset=6520, .match_offset=0 }, { .children_offset=0, .match_offset=23050 }, { .children_offset=6522, .match_offset=0 }, { .children_offset=6524, .match_offset=0 }, { .children_offset=6527, .match_offset=16565 }, { .children_offset=6529, .match_offset=0 }, { .children_offset=6531, .match_offset=0 }, { .children_offset=6533, .match_offset=0 }, { .children_offset=6535, .match_offset=0 }, { .children_offset=6537, .match_offset=0 }, { .children_offset=0, .match_offset=40629 }, { .children_offset=0, .match_offset=68322 }, { .children_offset=6539, .match_offset=0 }, { .children_offset=6543, .match_offset=0 }, { .children_offset=0, .match_offset=30882 }, { .children_offset=6545, .match_offset=0 }, { .children_offset=6547, .match_offset=134936 }, { .children_offset=6549, .match_offset=0 }, { .children_offset=6551, .match_offset=0 }, { .children_offset=6553, .match_offset=0 }, { .children_offset=6555, .match_offset=0 }, { .children_offset=0, .match_offset=133353 }, { .children_offset=0, .match_offset=80999 }, { .children_offset=0, .match_offset=5346 }, { .children_offset=0, .match_offset=30776 }, { .children_offset=6557, .match_offset=0 }, { .children_offset=6560, .match_offset=0 }, { .children_offset=0, .match_offset=65581 }, { .children_offset=6562, .match_offset=0 }, { .children_offset=0, .match_offset=46829 }, { .children_offset=6564, .match_offset=0 }, { .children_offset=0, .match_offset=43920 }, { .children_offset=6566, .match_offset=0 }, { .children_offset=6568, .match_offset=0 }, { .children_offset=6570, .match_offset=0 }, { .children_offset=6572, .match_offset=0 }, { .children_offset=6574, .match_offset=0 }, { .children_offset=6576, .match_offset=0 }, { .children_offset=6578, .match_offset=0 }, { .children_offset=6580, .match_offset=0 }, { .children_offset=0, .match_offset=130070 }, { .children_offset=6582, .match_offset=30330 }, { .children_offset=6593, .match_offset=0 }, { .children_offset=6595, .match_offset=0 }, { .children_offset=0, .match_offset=26264 }, { .children_offset=6597, .match_offset=0 }, { .children_offset=6599, .match_offset=0 }, { .children_offset=6601, .match_offset=0 }, { .children_offset=6603, .match_offset=0 }, { .children_offset=0, .match_offset=125026 }, { .children_offset=6605, .match_offset=0 }, { .children_offset=6608, .match_offset=0 }, { .children_offset=0, .match_offset=127372 }, { .children_offset=6610, .match_offset=0 }, { .children_offset=0, .match_offset=70903 }, { .children_offset=6612, .match_offset=0 }, { .children_offset=6614, .match_offset=0 }, { .children_offset=0, .match_offset=133586 }, { .children_offset=6616, .match_offset=0 }, { .children_offset=6618, .match_offset=0 }, { .children_offset=6621, .match_offset=0 }, { .children_offset=6623, .match_offset=119872 }, { .children_offset=6625, .match_offset=0 }, { .children_offset=6627, .match_offset=0 }, { .children_offset=6629, .match_offset=0 }, { .children_offset=6631, .match_offset=0 }, { .children_offset=6633, .match_offset=0 }, { .children_offset=6635, .match_offset=0 }, { .children_offset=6637, .match_offset=0 }, { .children_offset=6639, .match_offset=0 }, { .children_offset=6641, .match_offset=0 }, { .children_offset=6643, .match_offset=0 }, { .children_offset=6645, .match_offset=0 }, { .children_offset=6647, .match_offset=0 }, { .children_offset=0, .match_offset=66316 }, { .children_offset=6649, .match_offset=0 }, { .children_offset=6651, .match_offset=0 }, { .children_offset=6653, .match_offset=0 }, { .children_offset=0, .match_offset=90044 }, { .children_offset=0, .match_offset=9948 }, { .children_offset=6655, .match_offset=0 }, { .children_offset=6657, .match_offset=0 }, { .children_offset=0, .match_offset=125370 }, { .children_offset=6659, .match_offset=0 }, { .children_offset=6661, .match_offset=0 }, { .children_offset=6663, .match_offset=0 }, { .children_offset=6665, .match_offset=0 }, { .children_offset=6667, .match_offset=0 }, { .children_offset=0, .match_offset=113433 }, { .children_offset=6669, .match_offset=0 }, { .children_offset=6671, .match_offset=0 }, { .children_offset=6673, .match_offset=0 }, { .children_offset=0, .match_offset=38775 }, { .children_offset=6675, .match_offset=0 }, { .children_offset=0, .match_offset=78468 }, { .children_offset=6677, .match_offset=58561 }, { .children_offset=6687, .match_offset=25282 }, { .children_offset=0, .match_offset=43163 }, { .children_offset=6689, .match_offset=65834 }, { .children_offset=0, .match_offset=104119 }, { .children_offset=6691, .match_offset=0 }, { .children_offset=6694, .match_offset=0 }, { .children_offset=0, .match_offset=29143 }, { .children_offset=0, .match_offset=34452 }, { .children_offset=6696, .match_offset=0 }, { .children_offset=0, .match_offset=61794 }, { .children_offset=6699, .match_offset=0 }, { .children_offset=6701, .match_offset=0 }, { .children_offset=6703, .match_offset=0 }, { .children_offset=0, .match_offset=39251 }, { .children_offset=6705, .match_offset=16927 }, { .children_offset=6707, .match_offset=0 }, { .children_offset=6709, .match_offset=0 }, { .children_offset=6711, .match_offset=0 }, { .children_offset=6713, .match_offset=0 }, { .children_offset=0, .match_offset=125944 }, { .children_offset=6715, .match_offset=0 }, { .children_offset=6718, .match_offset=0 }, { .children_offset=6721, .match_offset=0 }, { .children_offset=6723, .match_offset=0 }, { .children_offset=0, .match_offset=53571 }, { .children_offset=6725, .match_offset=0 }, { .children_offset=0, .match_offset=39255 }, { .children_offset=6727, .match_offset=0 }, { .children_offset=0, .match_offset=125946 }, { .children_offset=0, .match_offset=64741 }, { .children_offset=6729, .match_offset=28487 }, { .children_offset=6732, .match_offset=0 }, { .children_offset=6734, .match_offset=0 }, { .children_offset=6736, .match_offset=0 }, { .children_offset=6738, .match_offset=0 }, { .children_offset=0, .match_offset=127885 }, { .children_offset=6740, .match_offset=0 }, { .children_offset=6742, .match_offset=0 }, { .children_offset=6744, .match_offset=0 }, { .children_offset=6746, .match_offset=0 }, { .children_offset=0, .match_offset=62379 }, { .children_offset=6748, .match_offset=0 }, { .children_offset=6750, .match_offset=0 }, { .children_offset=6752, .match_offset=0 }, { .children_offset=6754, .match_offset=0 }, { .children_offset=6756, .match_offset=0 }, { .children_offset=0, .match_offset=77227 }, { .children_offset=6758, .match_offset=0 }, { .children_offset=6761, .match_offset=0 }, { .children_offset=6763, .match_offset=0 }, { .children_offset=0, .match_offset=55735 }, { .children_offset=6765, .match_offset=0 }, { .children_offset=6767, .match_offset=0 }, { .children_offset=0, .match_offset=123194 }, { .children_offset=6769, .match_offset=28013 }, { .children_offset=6771, .match_offset=0 }, { .children_offset=6773, .match_offset=0 }, { .children_offset=0, .match_offset=109229 }, { .children_offset=6775, .match_offset=22201 }, { .children_offset=6780, .match_offset=0 }, { .children_offset=6782, .match_offset=0 }, { .children_offset=6784, .match_offset=0 }, { .children_offset=6786, .match_offset=0 }, { .children_offset=6788, .match_offset=0 }, { .children_offset=0, .match_offset=78603 }, { .children_offset=6790, .match_offset=0 }, { .children_offset=0, .match_offset=13359 }, { .children_offset=6792, .match_offset=0 }, { .children_offset=6794, .match_offset=0 }, { .children_offset=6796, .match_offset=0 }, { .children_offset=6798, .match_offset=0 }, { .children_offset=0, .match_offset=134241 }, { .children_offset=6800, .match_offset=0 }, { .children_offset=6802, .match_offset=0 }, { .children_offset=6804, .match_offset=0 }, { .children_offset=0, .match_offset=5602 }, { .children_offset=6806, .match_offset=0 }, { .children_offset=0, .match_offset=60085 }, { .children_offset=0, .match_offset=43274 }, { .children_offset=6808, .match_offset=0 }, { .children_offset=6812, .match_offset=0 }, { .children_offset=6814, .match_offset=0 }, { .children_offset=6816, .match_offset=0 }, { .children_offset=0, .match_offset=125030 }, { .children_offset=6818, .match_offset=0 }, { .children_offset=6820, .match_offset=0 }, { .children_offset=6822, .match_offset=0 }, { .children_offset=0, .match_offset=113280 }, { .children_offset=0, .match_offset=72163 }, { .children_offset=6824, .match_offset=43457 }, { .children_offset=6831, .match_offset=72633 }, { .children_offset=0, .match_offset=8475 }, { .children_offset=6835, .match_offset=0 }, { .children_offset=0, .match_offset=16019 }, { .children_offset=6837, .match_offset=0 }, { .children_offset=6839, .match_offset=0 }, { .children_offset=0, .match_offset=38461 }, { .children_offset=6841, .match_offset=8486 }, { .children_offset=6844, .match_offset=0 }, { .children_offset=6846, .match_offset=0 }, { .children_offset=0, .match_offset=27884 }, { .children_offset=0, .match_offset=34114 }, { .children_offset=6848, .match_offset=0 }, { .children_offset=6855, .match_offset=69068 }, { .children_offset=0, .match_offset=72668 }, { .children_offset=6857, .match_offset=63758 }, { .children_offset=0, .match_offset=33814 }, { .children_offset=6859, .match_offset=0 }, { .children_offset=6865, .match_offset=61504 }, { .children_offset=0, .match_offset=115405 }, { .children_offset=6867, .match_offset=133560 }, { .children_offset=0, .match_offset=11433 }, { .children_offset=0, .match_offset=80981 }, { .children_offset=0, .match_offset=68637 }, { .children_offset=0, .match_offset=65277 }, { .children_offset=0, .match_offset=86777 }, { .children_offset=0, .match_offset=65090 }, { .children_offset=0, .match_offset=26149 }, { .children_offset=6869, .match_offset=49842 }, { .children_offset=6871, .match_offset=0 }, { .children_offset=0, .match_offset=74149 }, { .children_offset=6873, .match_offset=27719 }, { .children_offset=6875, .match_offset=0 }, { .children_offset=6877, .match_offset=0 }, { .children_offset=6879, .match_offset=0 }, { .children_offset=0, .match_offset=104105 }, { .children_offset=6881, .match_offset=90049 }, { .children_offset=6883, .match_offset=0 }, { .children_offset=6885, .match_offset=8924 }, { .children_offset=6887, .match_offset=0 }, { .children_offset=0, .match_offset=12124 }, { .children_offset=6889, .match_offset=35122 }, { .children_offset=6891, .match_offset=0 }, { .children_offset=0, .match_offset=20630 }, { .children_offset=6893, .match_offset=114517 }, { .children_offset=6907, .match_offset=0 }, { .children_offset=6909, .match_offset=0 }, { .children_offset=0, .match_offset=77005 }, { .children_offset=6911, .match_offset=0 }, { .children_offset=6914, .match_offset=0 }, { .children_offset=0, .match_offset=30655 }, { .children_offset=6916, .match_offset=0 }, { .children_offset=0, .match_offset=31131 }, { .children_offset=6918, .match_offset=0 }, { .children_offset=6920, .match_offset=12600 }, { .children_offset=6922, .match_offset=34642 }, { .children_offset=6924, .match_offset=0 }, { .children_offset=0, .match_offset=53818 }, { .children_offset=6926, .match_offset=109248 }, { .children_offset=0, .match_offset=42465 }, { .children_offset=0, .match_offset=39463 }, { .children_offset=6929, .match_offset=0 }, { .children_offset=6932, .match_offset=0 }, { .children_offset=6934, .match_offset=0 }, { .children_offset=6936, .match_offset=0 }, { .children_offset=0, .match_offset=22994 }, { .children_offset=6938, .match_offset=0 }, { .children_offset=0, .match_offset=122516 }, { .children_offset=6940, .match_offset=0 }, { .children_offset=6944, .match_offset=0 }, { .children_offset=6946, .match_offset=0 }, { .children_offset=6948, .match_offset=0 }, { .children_offset=6950, .match_offset=0 }, { .children_offset=6952, .match_offset=0 }, { .children_offset=6954, .match_offset=0 }, { .children_offset=6956, .match_offset=0 }, { .children_offset=0, .match_offset=102637 }, { .children_offset=6958, .match_offset=0 }, { .children_offset=6960, .match_offset=0 }, { .children_offset=6962, .match_offset=0 }, { .children_offset=0, .match_offset=68308 }, { .children_offset=6964, .match_offset=0 }, { .children_offset=6966, .match_offset=0 }, { .children_offset=0, .match_offset=29982 }, { .children_offset=6968, .match_offset=0 }, { .children_offset=6970, .match_offset=0 }, { .children_offset=6972, .match_offset=0 }, { .children_offset=6974, .match_offset=0 }, { .children_offset=0, .match_offset=130933 }, { .children_offset=6976, .match_offset=50595 }, { .children_offset=6978, .match_offset=103097 }, { .children_offset=6982, .match_offset=0 }, { .children_offset=6984, .match_offset=0 }, { .children_offset=6986, .match_offset=0 }, { .children_offset=6988, .match_offset=0 }, { .children_offset=0, .match_offset=90218 }, { .children_offset=6990, .match_offset=0 }, { .children_offset=6993, .match_offset=0 }, { .children_offset=6995, .match_offset=0 }, { .children_offset=6997, .match_offset=0 }, { .children_offset=6999, .match_offset=0 }, { .children_offset=7001, .match_offset=0 }, { .children_offset=7003, .match_offset=0 }, { .children_offset=7005, .match_offset=0 }, { .children_offset=7007, .match_offset=0 }, { .children_offset=0, .match_offset=61035 }, { .children_offset=7009, .match_offset=33319 }, { .children_offset=0, .match_offset=119741 }, { .children_offset=7012, .match_offset=0 }, { .children_offset=7014, .match_offset=0 }, { .children_offset=7016, .match_offset=0 }, { .children_offset=0, .match_offset=124806 }, { .children_offset=7018, .match_offset=0 }, { .children_offset=7020, .match_offset=0 }, { .children_offset=7022, .match_offset=0 }, { .children_offset=7024, .match_offset=0 }, { .children_offset=0, .match_offset=110536 }, { .children_offset=7026, .match_offset=0 }, { .children_offset=7028, .match_offset=0 }, { .children_offset=7030, .match_offset=0 }, { .children_offset=7032, .match_offset=0 }, { .children_offset=7034, .match_offset=0 }, { .children_offset=7036, .match_offset=0 }, { .children_offset=7038, .match_offset=0 }, { .children_offset=7040, .match_offset=0 }, { .children_offset=7042, .match_offset=0 }, { .children_offset=7045, .match_offset=0 }, { .children_offset=7048, .match_offset=0 }, { .children_offset=7050, .match_offset=0 }, { .children_offset=7052, .match_offset=0 }, { .children_offset=7054, .match_offset=0 }, { .children_offset=7056, .match_offset=0 }, { .children_offset=0, .match_offset=110305 }, { .children_offset=7058, .match_offset=0 }, { .children_offset=7060, .match_offset=0 }, { .children_offset=7062, .match_offset=0 }, { .children_offset=0, .match_offset=123772 }, { .children_offset=7064, .match_offset=0 }, { .children_offset=7067, .match_offset=0 }, { .children_offset=7069, .match_offset=0 }, { .children_offset=0, .match_offset=13064 }, { .children_offset=7071, .match_offset=0 }, { .children_offset=7073, .match_offset=0 }, { .children_offset=7075, .match_offset=0 }, { .children_offset=7077, .match_offset=0 }, { .children_offset=7080, .match_offset=0 }, { .children_offset=7082, .match_offset=0 }, { .children_offset=7084, .match_offset=0 }, { .children_offset=7086, .match_offset=0 }, { .children_offset=0, .match_offset=64526 }, { .children_offset=7088, .match_offset=0 }, { .children_offset=7090, .match_offset=0 }, { .children_offset=7092, .match_offset=0 }, { .children_offset=0, .match_offset=21136 }, { .children_offset=0, .match_offset=81089 }, { .children_offset=7094, .match_offset=0 }, { .children_offset=7097, .match_offset=0 }, { .children_offset=7099, .match_offset=0 }, { .children_offset=0, .match_offset=9877 }, { .children_offset=7101, .match_offset=0 }, { .children_offset=0, .match_offset=59160 }, { .children_offset=7105, .match_offset=0 }, { .children_offset=7107, .match_offset=0 }, { .children_offset=7109, .match_offset=0 }, { .children_offset=0, .match_offset=35393 }, { .children_offset=0, .match_offset=65123 }, { .children_offset=7111, .match_offset=0 }, { .children_offset=7113, .match_offset=0 }, { .children_offset=7115, .match_offset=0 }, { .children_offset=0, .match_offset=22594 }, { .children_offset=0, .match_offset=136154 }, { .children_offset=7117, .match_offset=0 }, { .children_offset=0, .match_offset=52592 }, { .children_offset=7119, .match_offset=51160 }, { .children_offset=7130, .match_offset=114662 }, { .children_offset=0, .match_offset=59170 }, { .children_offset=7143, .match_offset=108179 }, { .children_offset=0, .match_offset=104491 }, { .children_offset=7145, .match_offset=0 }, { .children_offset=7148, .match_offset=0 }, { .children_offset=0, .match_offset=60172 }, { .children_offset=0, .match_offset=71932 }, { .children_offset=7150, .match_offset=0 }, { .children_offset=7152, .match_offset=0 }, { .children_offset=0, .match_offset=54146 }, { .children_offset=7154, .match_offset=10399 }, { .children_offset=7157, .match_offset=0 }, { .children_offset=7159, .match_offset=0 }, { .children_offset=0, .match_offset=62024 }, { .children_offset=7162, .match_offset=0 }, { .children_offset=0, .match_offset=23938 }, { .children_offset=7164, .match_offset=0 }, { .children_offset=0, .match_offset=122358 }, { .children_offset=7166, .match_offset=37235 }, { .children_offset=7168, .match_offset=60781 }, { .children_offset=0, .match_offset=35870 }, { .children_offset=7170, .match_offset=13062 }, { .children_offset=7172, .match_offset=0 }, { .children_offset=7174, .match_offset=0 }, { .children_offset=0, .match_offset=89989 }, { .children_offset=7176, .match_offset=131369 }, { .children_offset=7180, .match_offset=0 }, { .children_offset=7182, .match_offset=0 }, { .children_offset=7184, .match_offset=0 }, { .children_offset=7186, .match_offset=0 }, { .children_offset=7188, .match_offset=62034 }, { .children_offset=7191, .match_offset=0 }, { .children_offset=7193, .match_offset=0 }, { .children_offset=7195, .match_offset=0 }, { .children_offset=7198, .match_offset=0 }, { .children_offset=7208, .match_offset=0 }, { .children_offset=0, .match_offset=8488 }, { .children_offset=0, .match_offset=54008 }, { .children_offset=0, .match_offset=89825 }, { .children_offset=0, .match_offset=103555 }, { .children_offset=0, .match_offset=104428 }, { .children_offset=0, .match_offset=89642 }, { .children_offset=0, .match_offset=123446 }, { .children_offset=0, .match_offset=125529 }, { .children_offset=0, .match_offset=104493 }, { .children_offset=0, .match_offset=67540 }, { .children_offset=0, .match_offset=103071 }, { .children_offset=0, .match_offset=111389 }, { .children_offset=0, .match_offset=39233 }, { .children_offset=0, .match_offset=71275 }, { .children_offset=0, .match_offset=67861 }, { .children_offset=0, .match_offset=121969 }, { .children_offset=7225, .match_offset=0 }, { .children_offset=0, .match_offset=116098 }, { .children_offset=0, .match_offset=32753 }, { .children_offset=0, .match_offset=59041 }, { .children_offset=0, .match_offset=125683 }, { .children_offset=0, .match_offset=6164 }, { .children_offset=0, .match_offset=5357 }, { .children_offset=0, .match_offset=132835 }, { .children_offset=0, .match_offset=55268 }, { .children_offset=0, .match_offset=131413 }, { .children_offset=0, .match_offset=109218 }, { .children_offset=0, .match_offset=2225 }, { .children_offset=0, .match_offset=133487 }, { .children_offset=0, .match_offset=89203 }, { .children_offset=0, .match_offset=123383 }, { .children_offset=0, .match_offset=1933 }, { .children_offset=0, .match_offset=67542 }, { .children_offset=7242, .match_offset=0 }, { .children_offset=0, .match_offset=89993 }, { .children_offset=0, .match_offset=14905 }, { .children_offset=0, .match_offset=90333 }, { .children_offset=0, .match_offset=34465 }, { .children_offset=0, .match_offset=108086 }, { .children_offset=0, .match_offset=54376 }, { .children_offset=0, .match_offset=74102 }, { .children_offset=0, .match_offset=67330 }, { .children_offset=0, .match_offset=60779 }, { .children_offset=0, .match_offset=119431 }, { .children_offset=0, .match_offset=58812 }, { .children_offset=0, .match_offset=68504 }, { .children_offset=0, .match_offset=67808 }, { .children_offset=0, .match_offset=121954 }, { .children_offset=0, .match_offset=45972 }, { .children_offset=0, .match_offset=72253 }, { .children_offset=7259, .match_offset=0 }, { .children_offset=0, .match_offset=29206 }, { .children_offset=0, .match_offset=39221 }, { .children_offset=0, .match_offset=90298 }, { .children_offset=0, .match_offset=122586 }, { .children_offset=0, .match_offset=72128 }, { .children_offset=0, .match_offset=42101 }, { .children_offset=0, .match_offset=130053 }, { .children_offset=0, .match_offset=30313 }, { .children_offset=0, .match_offset=112859 }, { .children_offset=0, .match_offset=30621 }, { .children_offset=0, .match_offset=132489 }, { .children_offset=0, .match_offset=118601 }, { .children_offset=0, .match_offset=123487 }, { .children_offset=0, .match_offset=123547 }, { .children_offset=0, .match_offset=63039 }, { .children_offset=0, .match_offset=103449 }, { .children_offset=7276, .match_offset=0 }, { .children_offset=0, .match_offset=50203 }, { .children_offset=0, .match_offset=70789 }, { .children_offset=0, .match_offset=122047 }, { .children_offset=0, .match_offset=122485 }, { .children_offset=0, .match_offset=13317 }, { .children_offset=0, .match_offset=14513 }, { .children_offset=0, .match_offset=111429 }, { .children_offset=0, .match_offset=61544 }, { .children_offset=0, .match_offset=57959 }, { .children_offset=0, .match_offset=55028 }, { .children_offset=0, .match_offset=125082 }, { .children_offset=0, .match_offset=46162 }, { .children_offset=0, .match_offset=14515 }, { .children_offset=0, .match_offset=33869 }, { .children_offset=0, .match_offset=50565 }, { .children_offset=0, .match_offset=39253 }, { .children_offset=7293, .match_offset=0 }, { .children_offset=0, .match_offset=79003 }, { .children_offset=0, .match_offset=40460 }, { .children_offset=0, .match_offset=20539 }, { .children_offset=0, .match_offset=43074 }, { .children_offset=0, .match_offset=116925 }, { .children_offset=0, .match_offset=49893 }, { .children_offset=0, .match_offset=72343 }, { .children_offset=0, .match_offset=59992 }, { .children_offset=0, .match_offset=86760 }, { .children_offset=0, .match_offset=22846 }, { .children_offset=0, .match_offset=6179 }, { .children_offset=0, .match_offset=1942 }, { .children_offset=0, .match_offset=131507 }, { .children_offset=0, .match_offset=63443 }, { .children_offset=0, .match_offset=77996 }, { .children_offset=0, .match_offset=88585 }, { .children_offset=7310, .match_offset=0 }, { .children_offset=0, .match_offset=13800 }, { .children_offset=0, .match_offset=60703 }, { .children_offset=0, .match_offset=70911 }, { .children_offset=0, .match_offset=111465 }, { .children_offset=0, .match_offset=27820 }, { .children_offset=0, .match_offset=134233 }, { .children_offset=0, .match_offset=40580 }, { .children_offset=0, .match_offset=8926 }, { .children_offset=0, .match_offset=12266 }, { .children_offset=0, .match_offset=74692 }, { .children_offset=0, .match_offset=134196 }, { .children_offset=0, .match_offset=16124 }, { .children_offset=0, .match_offset=42130 }, { .children_offset=0, .match_offset=104411 }, { .children_offset=0, .match_offset=20191 }, { .children_offset=0, .match_offset=35176 }, { .children_offset=7327, .match_offset=0 }, { .children_offset=0, .match_offset=49340 }, { .children_offset=0, .match_offset=67344 }, { .children_offset=0, .match_offset=9933 }, { .children_offset=0, .match_offset=131499 }, { .children_offset=0, .match_offset=26806 }, { .children_offset=0, .match_offset=117592 }, { .children_offset=0, .match_offset=31125 }, { .children_offset=0, .match_offset=38493 }, { .children_offset=0, .match_offset=89626 }, { .children_offset=0, .match_offset=15500 }, { .children_offset=0, .match_offset=74454 }, { .children_offset=0, .match_offset=63412 }, { .children_offset=0, .match_offset=61594 }, { .children_offset=0, .match_offset=79727 }, { .children_offset=0, .match_offset=86796 }, { .children_offset=0, .match_offset=127775 }, { .children_offset=7344, .match_offset=0 }, { .children_offset=0, .match_offset=67350 }, { .children_offset=0, .match_offset=12745 }, { .children_offset=0, .match_offset=16070 }, { .children_offset=0, .match_offset=133611 }, { .children_offset=0, .match_offset=45870 }, { .children_offset=0, .match_offset=2118 }, { .children_offset=0, .match_offset=104318 }, { .children_offset=0, .match_offset=62544 }, { .children_offset=0, .match_offset=28440 }, { .children_offset=0, .match_offset=12740 }, { .children_offset=0, .match_offset=57258 }, { .children_offset=0, .match_offset=108765 }, { .children_offset=0, .match_offset=32755 }, { .children_offset=0, .match_offset=73255 }, { .children_offset=0, .match_offset=38873 }, { .children_offset=0, .match_offset=11716 }, { .children_offset=7361, .match_offset=0 }, { .children_offset=7378, .match_offset=0 }, { .children_offset=0, .match_offset=48179 }, { .children_offset=0, .match_offset=73771 }, { .children_offset=0, .match_offset=42617 }, { .children_offset=0, .match_offset=40344 }, { .children_offset=0, .match_offset=127777 }, { .children_offset=0, .match_offset=77889 }, { .children_offset=0, .match_offset=123561 }, { .children_offset=0, .match_offset=102375 }, { .children_offset=0, .match_offset=115815 }, { .children_offset=0, .match_offset=1122 }, { .children_offset=0, .match_offset=34615 }, { .children_offset=0, .match_offset=63764 }, { .children_offset=0, .match_offset=64258 }, { .children_offset=0, .match_offset=29865 }, { .children_offset=0, .match_offset=108135 }, { .children_offset=0, .match_offset=6264 }, { .children_offset=7395, .match_offset=0 }, { .children_offset=0, .match_offset=134373 }, { .children_offset=0, .match_offset=110294 }, { .children_offset=0, .match_offset=32905 }, { .children_offset=0, .match_offset=11037 }, { .children_offset=0, .match_offset=10264 }, { .children_offset=0, .match_offset=14885 }, { .children_offset=0, .match_offset=22627 }, { .children_offset=0, .match_offset=89678 }, { .children_offset=0, .match_offset=40908 }, { .children_offset=0, .match_offset=14369 }, { .children_offset=0, .match_offset=40174 }, { .children_offset=0, .match_offset=2306 }, { .children_offset=0, .match_offset=63819 }, { .children_offset=0, .match_offset=30644 }, { .children_offset=0, .match_offset=62606 }, { .children_offset=0, .match_offset=132958 }, { .children_offset=7412, .match_offset=0 }, { .children_offset=0, .match_offset=90153 }, { .children_offset=0, .match_offset=33407 }, { .children_offset=0, .match_offset=32850 }, { .children_offset=0, .match_offset=38925 }, { .children_offset=0, .match_offset=10266 }, { .children_offset=0, .match_offset=34950 }, { .children_offset=0, .match_offset=58595 }, { .children_offset=0, .match_offset=62307 }, { .children_offset=0, .match_offset=65216 }, { .children_offset=0, .match_offset=25732 }, { .children_offset=0, .match_offset=89960 }, { .children_offset=0, .match_offset=80983 }, { .children_offset=0, .match_offset=16578 }, { .children_offset=0, .match_offset=110209 }, { .children_offset=0, .match_offset=10923 }, { .children_offset=0, .match_offset=74182 }, { .children_offset=7429, .match_offset=0 }, { .children_offset=0, .match_offset=26810 }, { .children_offset=0, .match_offset=28008 }, { .children_offset=0, .match_offset=74705 }, { .children_offset=0, .match_offset=70712 }, { .children_offset=0, .match_offset=43427 }, { .children_offset=0, .match_offset=135039 }, { .children_offset=0, .match_offset=87447 }, { .children_offset=0, .match_offset=114601 }, { .children_offset=0, .match_offset=34942 }, { .children_offset=0, .match_offset=53990 }, { .children_offset=0, .match_offset=109253 }, { .children_offset=0, .match_offset=56987 }, { .children_offset=0, .match_offset=32672 }, { .children_offset=0, .match_offset=35731 }, { .children_offset=0, .match_offset=1485 }, { .children_offset=0, .match_offset=66517 }, { .children_offset=7446, .match_offset=0 }, { .children_offset=0, .match_offset=77326 }, { .children_offset=0, .match_offset=69418 }, { .children_offset=0, .match_offset=33037 }, { .children_offset=0, .match_offset=134497 }, { .children_offset=0, .match_offset=31147 }, { .children_offset=0, .match_offset=33518 }, { .children_offset=0, .match_offset=40645 }, { .children_offset=0, .match_offset=27882 }, { .children_offset=0, .match_offset=115376 }, { .children_offset=0, .match_offset=126593 }, { .children_offset=0, .match_offset=37268 }, { .children_offset=0, .match_offset=7022 }, { .children_offset=0, .match_offset=14242 }, { .children_offset=0, .match_offset=8756 }, { .children_offset=0, .match_offset=74551 }, { .children_offset=0, .match_offset=30064 }, { .children_offset=7463, .match_offset=0 }, { .children_offset=0, .match_offset=20272 }, { .children_offset=0, .match_offset=49701 }, { .children_offset=0, .match_offset=13809 }, { .children_offset=0, .match_offset=87773 }, { .children_offset=0, .match_offset=42417 }, { .children_offset=0, .match_offset=20226 }, { .children_offset=0, .match_offset=60004 }, { .children_offset=0, .match_offset=60561 }, { .children_offset=0, .match_offset=37726 }, { .children_offset=0, .match_offset=130974 }, { .children_offset=0, .match_offset=133607 }, { .children_offset=0, .match_offset=103177 }, { .children_offset=0, .match_offset=129950 }, { .children_offset=0, .match_offset=50215 }, { .children_offset=0, .match_offset=27164 }, { .children_offset=0, .match_offset=25946 }, { .children_offset=7480, .match_offset=0 }, { .children_offset=0, .match_offset=77928 }, { .children_offset=0, .match_offset=10972 }, { .children_offset=0, .match_offset=27981 }, { .children_offset=0, .match_offset=116304 }, { .children_offset=0, .match_offset=16199 }, { .children_offset=0, .match_offset=35638 }, { .children_offset=0, .match_offset=65743 }, { .children_offset=0, .match_offset=5934 }, { .children_offset=0, .match_offset=38877 }, { .children_offset=0, .match_offset=90001 }, { .children_offset=0, .match_offset=34888 }, { .children_offset=0, .match_offset=56621 }, { .children_offset=0, .match_offset=87357 }, { .children_offset=0, .match_offset=78866 }, { .children_offset=0, .match_offset=63416 }, { .children_offset=0, .match_offset=12491 }, { .children_offset=7497, .match_offset=0 }, { .children_offset=0, .match_offset=27822 }, { .children_offset=0, .match_offset=59086 }, { .children_offset=0, .match_offset=25568 }, { .children_offset=0, .match_offset=124989 }, { .children_offset=0, .match_offset=13802 }, { .children_offset=0, .match_offset=44914 }, { .children_offset=0, .match_offset=16025 }, { .children_offset=0, .match_offset=115766 }, { .children_offset=0, .match_offset=27238 }, { .children_offset=0, .match_offset=67818 }, { .children_offset=0, .match_offset=22172 }, { .children_offset=0, .match_offset=103369 }, { .children_offset=0, .match_offset=70661 }, { .children_offset=0, .match_offset=15703 }, { .children_offset=0, .match_offset=125676 }, { .children_offset=0, .match_offset=73700 }, { .children_offset=7514, .match_offset=0 }, { .children_offset=0, .match_offset=30052 }, { .children_offset=0, .match_offset=133246 }, { .children_offset=0, .match_offset=37917 }, { .children_offset=0, .match_offset=50705 }, { .children_offset=0, .match_offset=30323 }, { .children_offset=0, .match_offset=135805 }, { .children_offset=0, .match_offset=65539 }, { .children_offset=0, .match_offset=61000 }, { .children_offset=0, .match_offset=53625 }, { .children_offset=0, .match_offset=54251 }, { .children_offset=0, .match_offset=44108 }, { .children_offset=0, .match_offset=57365 }, { .children_offset=0, .match_offset=7581 }, { .children_offset=0, .match_offset=116332 }, { .children_offset=0, .match_offset=64434 }, { .children_offset=0, .match_offset=125669 }, { .children_offset=7531, .match_offset=0 }, { .children_offset=0, .match_offset=34448 }, { .children_offset=0, .match_offset=131160 }, { .children_offset=0, .match_offset=133501 }, { .children_offset=0, .match_offset=124565 }, { .children_offset=0, .match_offset=119411 }, { .children_offset=0, .match_offset=43748 }, { .children_offset=0, .match_offset=88768 }, { .children_offset=0, .match_offset=42425 }, { .children_offset=0, .match_offset=16355 }, { .children_offset=0, .match_offset=110353 }, { .children_offset=0, .match_offset=77093 }, { .children_offset=0, .match_offset=30494 }, { .children_offset=0, .match_offset=22132 }, { .children_offset=0, .match_offset=114607 }, { .children_offset=0, .match_offset=35727 }, { .children_offset=0, .match_offset=115503 }, { .children_offset=7548, .match_offset=0 }, { .children_offset=0, .match_offset=46729 }, { .children_offset=0, .match_offset=35379 }, { .children_offset=0, .match_offset=133333 }, { .children_offset=0, .match_offset=5576 }, { .children_offset=0, .match_offset=21953 }, { .children_offset=0, .match_offset=134601 }, { .children_offset=0, .match_offset=16072 }, { .children_offset=0, .match_offset=7007 }, { .children_offset=0, .match_offset=63111 }, { .children_offset=0, .match_offset=84796 }, { .children_offset=0, .match_offset=45808 }, { .children_offset=0, .match_offset=45881 }, { .children_offset=0, .match_offset=131856 }, { .children_offset=0, .match_offset=14517 }, { .children_offset=0, .match_offset=124738 }, { .children_offset=0, .match_offset=49916 }, { .children_offset=7565, .match_offset=0 }, { .children_offset=0, .match_offset=33903 }, { .children_offset=0, .match_offset=113954 }, { .children_offset=0, .match_offset=131487 }, { .children_offset=0, .match_offset=20576 }, { .children_offset=0, .match_offset=129984 }, { .children_offset=0, .match_offset=131016 }, { .children_offset=0, .match_offset=60417 }, { .children_offset=0, .match_offset=27677 }, { .children_offset=0, .match_offset=37638 }, { .children_offset=0, .match_offset=62655 }, { .children_offset=0, .match_offset=87479 }, { .children_offset=0, .match_offset=52535 }, { .children_offset=0, .match_offset=80228 }, { .children_offset=0, .match_offset=61075 }, { .children_offset=0, .match_offset=117580 }, { .children_offset=0, .match_offset=131090 }, { .children_offset=7582, .match_offset=0 }, { .children_offset=0, .match_offset=26123 }, { .children_offset=0, .match_offset=125636 }, { .children_offset=0, .match_offset=46745 }, { .children_offset=0, .match_offset=68848 }, { .children_offset=0, .match_offset=53807 }, { .children_offset=0, .match_offset=33168 }, { .children_offset=0, .match_offset=43115 }, { .children_offset=0, .match_offset=46600 }, { .children_offset=0, .match_offset=1 }, { .children_offset=0, .match_offset=85234 }, { .children_offset=0, .match_offset=78029 }, { .children_offset=0, .match_offset=42045 }, { .children_offset=0, .match_offset=21132 }, { .children_offset=0, .match_offset=6711 }, { .children_offset=0, .match_offset=6878 }, { .children_offset=0, .match_offset=123239 }, { .children_offset=7599, .match_offset=0 }, { .children_offset=0, .match_offset=26430 }, { .children_offset=0, .match_offset=7516 }, { .children_offset=0, .match_offset=24352 }, { .children_offset=0, .match_offset=109616 }, { .children_offset=0, .match_offset=58935 }, { .children_offset=0, .match_offset=130908 }, { .children_offset=0, .match_offset=87376 }, { .children_offset=0, .match_offset=11456 }, { .children_offset=0, .match_offset=81834 }, { .children_offset=0, .match_offset=12751 }, { .children_offset=0, .match_offset=109739 }, { .children_offset=0, .match_offset=49887 }, { .children_offset=0, .match_offset=110564 }, { .children_offset=0, .match_offset=37609 }, { .children_offset=0, .match_offset=59489 }, { .children_offset=0, .match_offset=86064 }, { .children_offset=7616, .match_offset=0 }, { .children_offset=0, .match_offset=10762 }, { .children_offset=0, .match_offset=78554 }, { .children_offset=0, .match_offset=55862 }, { .children_offset=0, .match_offset=26277 }, { .children_offset=0, .match_offset=103960 }, { .children_offset=0, .match_offset=122500 }, { .children_offset=0, .match_offset=89517 }, { .children_offset=0, .match_offset=64178 }, { .children_offset=0, .match_offset=105797 }, { .children_offset=0, .match_offset=77442 }, { .children_offset=0, .match_offset=72415 }, { .children_offset=0, .match_offset=16923 }, { .children_offset=0, .match_offset=132894 }, { .children_offset=0, .match_offset=70814 }, { .children_offset=0, .match_offset=87351 }, { .children_offset=0, .match_offset=122734 }, { .children_offset=7633, .match_offset=0 }, { .children_offset=0, .match_offset=42230 }, { .children_offset=0, .match_offset=60168 }, { .children_offset=0, .match_offset=35854 }, { .children_offset=0, .match_offset=42859 }, { .children_offset=0, .match_offset=129430 }, { .children_offset=0, .match_offset=109191 }, { .children_offset=0, .match_offset=11941 }, { .children_offset=0, .match_offset=57185 }, { .children_offset=0, .match_offset=74428 }, { .children_offset=0, .match_offset=122131 }, { .children_offset=0, .match_offset=124672 }, { .children_offset=0, .match_offset=126430 }, { .children_offset=0, .match_offset=29821 }, { .children_offset=7646, .match_offset=0 }, { .children_offset=7648, .match_offset=0 }, { .children_offset=0, .match_offset=131058 }, { .children_offset=0, .match_offset=35342 }, { .children_offset=7650, .match_offset=102910 }, { .children_offset=7652, .match_offset=0 }, { .children_offset=7654, .match_offset=0 }, { .children_offset=7656, .match_offset=0 }, { .children_offset=0, .match_offset=46778 }, { .children_offset=0, .match_offset=82014 }, { .children_offset=7658, .match_offset=0 }, { .children_offset=7660, .match_offset=0 }, { .children_offset=7662, .match_offset=0 }, { .children_offset=7664, .match_offset=0 }, { .children_offset=7666, .match_offset=0 }, { .children_offset=0, .match_offset=21173 }, { .children_offset=0, .match_offset=130961 }, { .children_offset=7668, .match_offset=0 }, { .children_offset=0, .match_offset=53554 }, { .children_offset=7670, .match_offset=74075 }, { .children_offset=7683, .match_offset=0 }, { .children_offset=7685, .match_offset=110280 }, { .children_offset=7688, .match_offset=0 }, { .children_offset=0, .match_offset=88667 }, { .children_offset=7690, .match_offset=0 }, { .children_offset=7692, .match_offset=0 }, { .children_offset=7694, .match_offset=0 }, { .children_offset=0, .match_offset=55385 }, { .children_offset=7696, .match_offset=10957 }, { .children_offset=7701, .match_offset=101032 }, { .children_offset=0, .match_offset=12297 }, { .children_offset=0, .match_offset=22604 }, { .children_offset=7703, .match_offset=0 }, { .children_offset=7705, .match_offset=0 }, { .children_offset=7707, .match_offset=0 }, { .children_offset=0, .match_offset=85246 }, { .children_offset=7709, .match_offset=0 }, { .children_offset=0, .match_offset=132853 }, { .children_offset=0, .match_offset=111080 }, { .children_offset=7711, .match_offset=0 }, { .children_offset=7714, .match_offset=0 }, { .children_offset=7716, .match_offset=0 }, { .children_offset=7719, .match_offset=0 }, { .children_offset=0, .match_offset=59080 }, { .children_offset=7721, .match_offset=0 }, { .children_offset=0, .match_offset=23780 }, { .children_offset=7723, .match_offset=0 }, { .children_offset=7725, .match_offset=0 }, { .children_offset=0, .match_offset=130919 }, { .children_offset=0, .match_offset=84846 }, { .children_offset=0, .match_offset=52612 }, { .children_offset=7727, .match_offset=0 }, { .children_offset=7729, .match_offset=0 }, { .children_offset=7731, .match_offset=0 }, { .children_offset=7733, .match_offset=0 }, { .children_offset=7735, .match_offset=0 }, { .children_offset=0, .match_offset=108761 }, { .children_offset=7737, .match_offset=0 }, { .children_offset=7741, .match_offset=0 }, { .children_offset=7743, .match_offset=0 }, { .children_offset=7745, .match_offset=0 }, { .children_offset=0, .match_offset=71098 }, { .children_offset=7747, .match_offset=0 }, { .children_offset=7750, .match_offset=0 }, { .children_offset=7752, .match_offset=0 }, { .children_offset=0, .match_offset=63105 }, { .children_offset=0, .match_offset=104058 }, { .children_offset=0, .match_offset=6144 }, { .children_offset=7754, .match_offset=0 }, { .children_offset=0, .match_offset=54276 }, { .children_offset=7757, .match_offset=6801 }, { .children_offset=7759, .match_offset=0 }, { .children_offset=7761, .match_offset=0 }, { .children_offset=0, .match_offset=7707 }, { .children_offset=0, .match_offset=74570 }, { .children_offset=7763, .match_offset=0 }, { .children_offset=7765, .match_offset=0 }, { .children_offset=7767, .match_offset=0 }, { .children_offset=0, .match_offset=80977 }, { .children_offset=0, .match_offset=63445 }, { .children_offset=7769, .match_offset=0 }, { .children_offset=0, .match_offset=8636 }, { .children_offset=7771, .match_offset=114765 }, { .children_offset=7781, .match_offset=0 }, { .children_offset=7783, .match_offset=109704 }, { .children_offset=7785, .match_offset=0 }, { .children_offset=0, .match_offset=86992 }, { .children_offset=7787, .match_offset=0 }, { .children_offset=7789, .match_offset=0 }, { .children_offset=7791, .match_offset=0 }, { .children_offset=7793, .match_offset=103073 }, { .children_offset=7795, .match_offset=0 }, { .children_offset=7798, .match_offset=0 }, { .children_offset=7800, .match_offset=0 }, { .children_offset=7802, .match_offset=0 }, { .children_offset=7804, .match_offset=0 }, { .children_offset=0, .match_offset=133605 }, { .children_offset=7806, .match_offset=0 }, { .children_offset=7808, .match_offset=0 }, { .children_offset=7810, .match_offset=0 }, { .children_offset=7812, .match_offset=0 }, { .children_offset=7814, .match_offset=0 }, { .children_offset=7816, .match_offset=0 }, { .children_offset=0, .match_offset=44682 }, { .children_offset=7818, .match_offset=0 }, { .children_offset=0, .match_offset=20341 }, { .children_offset=7820, .match_offset=69064 }, { .children_offset=7823, .match_offset=60309 }, { .children_offset=7825, .match_offset=0 }, { .children_offset=7827, .match_offset=0 }, { .children_offset=0, .match_offset=73818 }, { .children_offset=7829, .match_offset=0 }, { .children_offset=0, .match_offset=78965 }, { .children_offset=7831, .match_offset=0 }, { .children_offset=0, .match_offset=135938 }, { .children_offset=7833, .match_offset=57299 }, { .children_offset=7837, .match_offset=0 }, { .children_offset=7839, .match_offset=0 }, { .children_offset=0, .match_offset=103669 }, { .children_offset=0, .match_offset=1944 }, { .children_offset=7841, .match_offset=0 }, { .children_offset=7843, .match_offset=0 }, { .children_offset=0, .match_offset=88770 }, { .children_offset=7845, .match_offset=0 }, { .children_offset=7847, .match_offset=0 }, { .children_offset=7849, .match_offset=0 }, { .children_offset=7851, .match_offset=0 }, { .children_offset=0, .match_offset=21169 }, { .children_offset=7853, .match_offset=0 }, { .children_offset=7856, .match_offset=0 }, { .children_offset=0, .match_offset=74067 }, { .children_offset=7858, .match_offset=0 }, { .children_offset=0, .match_offset=64522 }, { .children_offset=7860, .match_offset=0 }, { .children_offset=7862, .match_offset=0 }, { .children_offset=7864, .match_offset=0 }, { .children_offset=7866, .match_offset=0 }, { .children_offset=7868, .match_offset=0 }, { .children_offset=7871, .match_offset=0 }, { .children_offset=7874, .match_offset=0 }, { .children_offset=7876, .match_offset=0 }, { .children_offset=7878, .match_offset=0 }, { .children_offset=7880, .match_offset=0 }, { .children_offset=7882, .match_offset=0 }, { .children_offset=0, .match_offset=80283 }, { .children_offset=7884, .match_offset=0 }, { .children_offset=7886, .match_offset=0 }, { .children_offset=7888, .match_offset=0 }, { .children_offset=0, .match_offset=55030 }, { .children_offset=7890, .match_offset=0 }, { .children_offset=7893, .match_offset=0 }, { .children_offset=7895, .match_offset=0 }, { .children_offset=0, .match_offset=48460 }, { .children_offset=7897, .match_offset=0 }, { .children_offset=7899, .match_offset=0 }, { .children_offset=7901, .match_offset=0 }, { .children_offset=7903, .match_offset=0 }, { .children_offset=7906, .match_offset=0 }, { .children_offset=7908, .match_offset=0 }, { .children_offset=7910, .match_offset=0 }, { .children_offset=7912, .match_offset=0 }, { .children_offset=0, .match_offset=45967 }, { .children_offset=7914, .match_offset=0 }, { .children_offset=7916, .match_offset=0 }, { .children_offset=7918, .match_offset=0 }, { .children_offset=0, .match_offset=70973 }, { .children_offset=7920, .match_offset=52202 }, { .children_offset=0, .match_offset=25948 }, { .children_offset=7931, .match_offset=0 }, { .children_offset=7933, .match_offset=0 }, { .children_offset=7935, .match_offset=0 }, { .children_offset=7937, .match_offset=0 }, { .children_offset=7939, .match_offset=0 }, { .children_offset=0, .match_offset=35312 }, { .children_offset=0, .match_offset=37694 }, { .children_offset=7941, .match_offset=0 }, { .children_offset=0, .match_offset=81052 }, { .children_offset=7943, .match_offset=63089 }, { .children_offset=7945, .match_offset=0 }, { .children_offset=7947, .match_offset=0 }, { .children_offset=7949, .match_offset=0 }, { .children_offset=7951, .match_offset=0 }, { .children_offset=7953, .match_offset=0 }, { .children_offset=0, .match_offset=25541 }, { .children_offset=7955, .match_offset=0 }, { .children_offset=7957, .match_offset=0 }, { .children_offset=7959, .match_offset=0 }, { .children_offset=7961, .match_offset=0 }, { .children_offset=0, .match_offset=118390 }, { .children_offset=7963, .match_offset=0 }, { .children_offset=7965, .match_offset=0 }, { .children_offset=7967, .match_offset=0 }, { .children_offset=7969, .match_offset=0 }, { .children_offset=0, .match_offset=37988 }, { .children_offset=0, .match_offset=44950 }, { .children_offset=0, .match_offset=129889 }, { .children_offset=0, .match_offset=42232 }, { .children_offset=7971, .match_offset=0 }, { .children_offset=7975, .match_offset=0 }, { .children_offset=7978, .match_offset=0 }, { .children_offset=7980, .match_offset=0 }, { .children_offset=7982, .match_offset=0 }, { .children_offset=7984, .match_offset=0 }, { .children_offset=0, .match_offset=134377 }, { .children_offset=7986, .match_offset=0 }, { .children_offset=0, .match_offset=132829 }, { .children_offset=7988, .match_offset=0 }, { .children_offset=0, .match_offset=35835 }, { .children_offset=7992, .match_offset=0 }, { .children_offset=0, .match_offset=136540 }, { .children_offset=7994, .match_offset=0 }, { .children_offset=7996, .match_offset=0 }, { .children_offset=0, .match_offset=72404 }, { .children_offset=0, .match_offset=8500 }, { .children_offset=7999, .match_offset=0 }, { .children_offset=8001, .match_offset=0 }, { .children_offset=8003, .match_offset=0 }, { .children_offset=8005, .match_offset=0 }, { .children_offset=8007, .match_offset=0 }, { .children_offset=8009, .match_offset=0 }, { .children_offset=8011, .match_offset=0 }, { .children_offset=8013, .match_offset=0 }, { .children_offset=8015, .match_offset=0 }, { .children_offset=0, .match_offset=27358 }, { .children_offset=8017, .match_offset=49873 }, { .children_offset=8023, .match_offset=0 }, { .children_offset=0, .match_offset=59143 }, { .children_offset=8025, .match_offset=110980 }, { .children_offset=0, .match_offset=115697 }, { .children_offset=0, .match_offset=122740 }, { .children_offset=0, .match_offset=132312 }, { .children_offset=0, .match_offset=20447 }, { .children_offset=8029, .match_offset=119651 }, { .children_offset=8032, .match_offset=0 }, { .children_offset=0, .match_offset=71540 }, { .children_offset=0, .match_offset=113617 }, { .children_offset=0, .match_offset=8570 }, { .children_offset=8034, .match_offset=0 }, { .children_offset=0, .match_offset=60437 }, { .children_offset=0, .match_offset=16921 }, { .children_offset=8037, .match_offset=12988 }, { .children_offset=0, .match_offset=52251 }, { .children_offset=8042, .match_offset=77229 }, { .children_offset=0, .match_offset=126518 }, { .children_offset=0, .match_offset=61900 }, { .children_offset=0, .match_offset=86720 }, { .children_offset=8044, .match_offset=23898 }, { .children_offset=8055, .match_offset=121924 }, { .children_offset=0, .match_offset=29116 }, { .children_offset=0, .match_offset=58238 }, { .children_offset=8060, .match_offset=0 }, { .children_offset=8062, .match_offset=67683 }, { .children_offset=8064, .match_offset=0 }, { .children_offset=8068, .match_offset=0 }, { .children_offset=8070, .match_offset=0 }, { .children_offset=8072, .match_offset=0 }, { .children_offset=8074, .match_offset=0 }, { .children_offset=0, .match_offset=53588 }, { .children_offset=8076, .match_offset=0 }, { .children_offset=8078, .match_offset=0 }, { .children_offset=8080, .match_offset=0 }, { .children_offset=8082, .match_offset=0 }, { .children_offset=0, .match_offset=123149 }, { .children_offset=8084, .match_offset=0 }, { .children_offset=8086, .match_offset=0 }, { .children_offset=8088, .match_offset=0 }, { .children_offset=8090, .match_offset=0 }, { .children_offset=8092, .match_offset=0 }, { .children_offset=8094, .match_offset=0 }, { .children_offset=8096, .match_offset=0 }, { .children_offset=8098, .match_offset=0 }, { .children_offset=8100, .match_offset=0 }, { .children_offset=0, .match_offset=24316 }, { .children_offset=0, .match_offset=43690 }, { .children_offset=0, .match_offset=130952 }, { .children_offset=0, .match_offset=32825 }, { .children_offset=0, .match_offset=122609 }, { .children_offset=8102, .match_offset=60092 }, { .children_offset=8105, .match_offset=0 }, { .children_offset=8107, .match_offset=0 }, { .children_offset=0, .match_offset=7709 }, { .children_offset=8109, .match_offset=0 }, { .children_offset=8111, .match_offset=0 }, { .children_offset=8113, .match_offset=0 }, { .children_offset=8115, .match_offset=0 }, { .children_offset=0, .match_offset=72783 }, { .children_offset=0, .match_offset=115731 }, { .children_offset=8117, .match_offset=30895 }, { .children_offset=8123, .match_offset=115335 }, { .children_offset=8127, .match_offset=0 }, { .children_offset=0, .match_offset=115792 }, { .children_offset=8129, .match_offset=0 }, { .children_offset=8132, .match_offset=48596 }, { .children_offset=8139, .match_offset=0 }, { .children_offset=8141, .match_offset=0 }, { .children_offset=8143, .match_offset=0 }, { .children_offset=8145, .match_offset=0 }, { .children_offset=8147, .match_offset=0 }, { .children_offset=8150, .match_offset=0 }, { .children_offset=8152, .match_offset=0 }, { .children_offset=8154, .match_offset=0 }, { .children_offset=0, .match_offset=49706 }, { .children_offset=8156, .match_offset=0 }, { .children_offset=8158, .match_offset=0 }, { .children_offset=8160, .match_offset=0 }, { .children_offset=8162, .match_offset=0 }, { .children_offset=0, .match_offset=89241 }, { .children_offset=8164, .match_offset=79801 }, { .children_offset=8171, .match_offset=0 }, { .children_offset=8173, .match_offset=0 }, { .children_offset=0, .match_offset=57767 }, { .children_offset=8175, .match_offset=0 }, { .children_offset=8177, .match_offset=0 }, { .children_offset=8179, .match_offset=0 }, { .children_offset=0, .match_offset=103157 }, { .children_offset=8181, .match_offset=0 }, { .children_offset=8183, .match_offset=0 }, { .children_offset=8185, .match_offset=0 }, { .children_offset=0, .match_offset=30906 }, { .children_offset=8187, .match_offset=0 }, { .children_offset=0, .match_offset=131045 }, { .children_offset=0, .match_offset=1151 }, { .children_offset=0, .match_offset=104444 }, { .children_offset=8189, .match_offset=0 }, { .children_offset=8191, .match_offset=0 }, { .children_offset=8193, .match_offset=0 }, { .children_offset=8195, .match_offset=0 }, { .children_offset=0, .match_offset=12270 }, { .children_offset=8197, .match_offset=0 }, { .children_offset=8199, .match_offset=0 }, { .children_offset=8201, .match_offset=0 }, { .children_offset=0, .match_offset=130301 }, { .children_offset=0, .match_offset=130011 }, { .children_offset=8203, .match_offset=0 }, { .children_offset=8205, .match_offset=0 }, { .children_offset=8207, .match_offset=0 }, { .children_offset=8209, .match_offset=0 }, { .children_offset=0, .match_offset=100992 }, { .children_offset=8211, .match_offset=0 }, { .children_offset=8213, .match_offset=0 }, { .children_offset=0, .match_offset=11005 }, { .children_offset=8215, .match_offset=0 }, { .children_offset=8219, .match_offset=0 }, { .children_offset=8221, .match_offset=0 }, { .children_offset=0, .match_offset=132480 }, { .children_offset=8224, .match_offset=0 }, { .children_offset=8226, .match_offset=0 }, { .children_offset=8228, .match_offset=0 }, { .children_offset=0, .match_offset=29108 }, { .children_offset=8230, .match_offset=0 }, { .children_offset=8232, .match_offset=0 }, { .children_offset=8234, .match_offset=0 }, { .children_offset=8236, .match_offset=0 }, { .children_offset=0, .match_offset=89873 }, { .children_offset=0, .match_offset=80187 }, { .children_offset=0, .match_offset=1213 }, { .children_offset=8238, .match_offset=0 }, { .children_offset=8240, .match_offset=0 }, { .children_offset=8242, .match_offset=0 }, { .children_offset=8244, .match_offset=0 }, { .children_offset=0, .match_offset=29108 }, { .children_offset=8246, .match_offset=0 }, { .children_offset=8248, .match_offset=0 }, { .children_offset=0, .match_offset=85267 }, { .children_offset=8250, .match_offset=0 }, { .children_offset=8252, .match_offset=0 }, { .children_offset=8254, .match_offset=0 }, { .children_offset=0, .match_offset=27041 }, { .children_offset=8256, .match_offset=53582 }, { .children_offset=8260, .match_offset=0 }, { .children_offset=8262, .match_offset=0 }, { .children_offset=8264, .match_offset=0 }, { .children_offset=8266, .match_offset=0 }, { .children_offset=0, .match_offset=26911 }, { .children_offset=0, .match_offset=132227 }, { .children_offset=8268, .match_offset=42082 }, { .children_offset=8270, .match_offset=0 }, { .children_offset=8272, .match_offset=0 }, { .children_offset=8274, .match_offset=0 }, { .children_offset=8276, .match_offset=0 }, { .children_offset=0, .match_offset=26865 }, { .children_offset=8278, .match_offset=0 }, { .children_offset=8280, .match_offset=0 }, { .children_offset=8282, .match_offset=0 }, { .children_offset=8284, .match_offset=0 }, { .children_offset=8286, .match_offset=0 }, { .children_offset=0, .match_offset=42072 }, { .children_offset=0, .match_offset=46796 }, { .children_offset=8288, .match_offset=0 }, { .children_offset=0, .match_offset=69422 }, { .children_offset=8290, .match_offset=34567 }, { .children_offset=8296, .match_offset=0 }, { .children_offset=8303, .match_offset=0 }, { .children_offset=0, .match_offset=53971 }, { .children_offset=8305, .match_offset=0 }, { .children_offset=8307, .match_offset=0 }, { .children_offset=8309, .match_offset=0 }, { .children_offset=8311, .match_offset=0 }, { .children_offset=8313, .match_offset=0 }, { .children_offset=0, .match_offset=6525 }, { .children_offset=0, .match_offset=85377 }, { .children_offset=8315, .match_offset=0 }, { .children_offset=8317, .match_offset=0 }, { .children_offset=8320, .match_offset=0 }, { .children_offset=0, .match_offset=29106 }, { .children_offset=8322, .match_offset=0 }, { .children_offset=8324, .match_offset=0 }, { .children_offset=0, .match_offset=104430 }, { .children_offset=8326, .match_offset=0 }, { .children_offset=8328, .match_offset=0 }, { .children_offset=8330, .match_offset=0 }, { .children_offset=8332, .match_offset=0 }, { .children_offset=8334, .match_offset=0 }, { .children_offset=0, .match_offset=38412 }, { .children_offset=0, .match_offset=70756 }, { .children_offset=8336, .match_offset=0 }, { .children_offset=8339, .match_offset=0 }, { .children_offset=0, .match_offset=27717 }, { .children_offset=8342, .match_offset=0 }, { .children_offset=8344, .match_offset=0 }, { .children_offset=0, .match_offset=109181 }, { .children_offset=8346, .match_offset=74028 }, { .children_offset=8348, .match_offset=0 }, { .children_offset=0, .match_offset=131376 }, { .children_offset=0, .match_offset=65046 }, { .children_offset=8351, .match_offset=0 }, { .children_offset=8358, .match_offset=0 }, { .children_offset=0, .match_offset=28046 }, { .children_offset=8360, .match_offset=0 }, { .children_offset=0, .match_offset=21660 }, { .children_offset=8362, .match_offset=0 }, { .children_offset=8365, .match_offset=0 }, { .children_offset=8367, .match_offset=0 }, { .children_offset=8369, .match_offset=0 }, { .children_offset=0, .match_offset=30475 }, { .children_offset=8371, .match_offset=0 }, { .children_offset=8373, .match_offset=0 }, { .children_offset=8375, .match_offset=0 }, { .children_offset=0, .match_offset=15056 }, { .children_offset=8377, .match_offset=0 }, { .children_offset=8380, .match_offset=0 }, { .children_offset=8382, .match_offset=0 }, { .children_offset=8384, .match_offset=0 }, { .children_offset=0, .match_offset=11055 }, { .children_offset=8386, .match_offset=0 }, { .children_offset=8388, .match_offset=0 }, { .children_offset=8390, .match_offset=0 }, { .children_offset=0, .match_offset=108804 }, { .children_offset=8392, .match_offset=0 }, { .children_offset=8394, .match_offset=0 }, { .children_offset=8396, .match_offset=0 }, { .children_offset=8398, .match_offset=0 }, { .children_offset=8400, .match_offset=0 }, { .children_offset=0, .match_offset=37496 }, { .children_offset=8402, .match_offset=0 }, { .children_offset=8404, .match_offset=0 }, { .children_offset=0, .match_offset=77046 }, { .children_offset=8406, .match_offset=0 }, { .children_offset=8413, .match_offset=0 }, { .children_offset=8415, .match_offset=39004 }, { .children_offset=8417, .match_offset=0 }, { .children_offset=8419, .match_offset=0 }, { .children_offset=8421, .match_offset=0 }, { .children_offset=8423, .match_offset=61992 }, { .children_offset=8425, .match_offset=0 }, { .children_offset=8427, .match_offset=0 }, { .children_offset=8429, .match_offset=0 }, { .children_offset=8431, .match_offset=0 }, { .children_offset=8433, .match_offset=0 }, { .children_offset=8435, .match_offset=0 }, { .children_offset=8437, .match_offset=0 }, { .children_offset=8439, .match_offset=0 }, { .children_offset=8441, .match_offset=0 }, { .children_offset=8443, .match_offset=0 }, { .children_offset=8445, .match_offset=0 }, { .children_offset=8447, .match_offset=0 }, { .children_offset=8449, .match_offset=0 }, { .children_offset=8451, .match_offset=0 }, { .children_offset=0, .match_offset=23784 }, { .children_offset=8453, .match_offset=0 }, { .children_offset=8457, .match_offset=63642 }, { .children_offset=8462, .match_offset=0 }, { .children_offset=8464, .match_offset=0 }, { .children_offset=8466, .match_offset=0 }, { .children_offset=8468, .match_offset=0 }, { .children_offset=8470, .match_offset=0 }, { .children_offset=8473, .match_offset=0 }, { .children_offset=8475, .match_offset=0 }, { .children_offset=8477, .match_offset=0 }, { .children_offset=8479, .match_offset=0 }, { .children_offset=8481, .match_offset=0 }, { .children_offset=8483, .match_offset=0 }, { .children_offset=8485, .match_offset=0 }, { .children_offset=8487, .match_offset=0 }, { .children_offset=8489, .match_offset=0 }, { .children_offset=8491, .match_offset=0 }, { .children_offset=0, .match_offset=33771 }, { .children_offset=8493, .match_offset=0 }, { .children_offset=8495, .match_offset=0 }, { .children_offset=8497, .match_offset=0 }, { .children_offset=8499, .match_offset=0 }, { .children_offset=0, .match_offset=6273 }, { .children_offset=0, .match_offset=87481 }, { .children_offset=8501, .match_offset=0 }, { .children_offset=8503, .match_offset=0 }, { .children_offset=8505, .match_offset=0 }, { .children_offset=0, .match_offset=108186 }, { .children_offset=0, .match_offset=134510 }, { .children_offset=8507, .match_offset=0 }, { .children_offset=8509, .match_offset=0 }, { .children_offset=0, .match_offset=68773 }, { .children_offset=8511, .match_offset=0 }, { .children_offset=8513, .match_offset=0 }, { .children_offset=0, .match_offset=25415 }, { .children_offset=8515, .match_offset=0 }, { .children_offset=8517, .match_offset=60767 }, { .children_offset=8519, .match_offset=0 }, { .children_offset=0, .match_offset=31121 }, { .children_offset=8521, .match_offset=0 }, { .children_offset=0, .match_offset=16186 }, { .children_offset=8523, .match_offset=0 }, { .children_offset=8525, .match_offset=0 }, { .children_offset=0, .match_offset=134331 }, { .children_offset=8527, .match_offset=0 }, { .children_offset=0, .match_offset=118564 }, { .children_offset=8529, .match_offset=0 }, { .children_offset=8532, .match_offset=57488 }, { .children_offset=8535, .match_offset=0 }, { .children_offset=8537, .match_offset=0 }, { .children_offset=8539, .match_offset=0 }, { .children_offset=8541, .match_offset=0 }, { .children_offset=8543, .match_offset=0 }, { .children_offset=8545, .match_offset=0 }, { .children_offset=0, .match_offset=1517 }, { .children_offset=8547, .match_offset=49260 }, { .children_offset=8549, .match_offset=0 }, { .children_offset=8551, .match_offset=0 }, { .children_offset=0, .match_offset=38669 }, { .children_offset=8553, .match_offset=0 }, { .children_offset=8555, .match_offset=0 }, { .children_offset=8557, .match_offset=0 }, { .children_offset=8559, .match_offset=63389 }, { .children_offset=8561, .match_offset=0 }, { .children_offset=8564, .match_offset=0 }, { .children_offset=8566, .match_offset=0 }, { .children_offset=8568, .match_offset=0 }, { .children_offset=8570, .match_offset=0 }, { .children_offset=0, .match_offset=30812 }, { .children_offset=8572, .match_offset=0 }, { .children_offset=8574, .match_offset=0 }, { .children_offset=8576, .match_offset=0 }, { .children_offset=8578, .match_offset=0 }, { .children_offset=8580, .match_offset=0 }, { .children_offset=8582, .match_offset=0 }, { .children_offset=0, .match_offset=52703 }, { .children_offset=0, .match_offset=34296 }, { .children_offset=8584, .match_offset=104339 }, { .children_offset=8601, .match_offset=10887 }, { .children_offset=8604, .match_offset=0 }, { .children_offset=8606, .match_offset=0 }, { .children_offset=8608, .match_offset=0 }, { .children_offset=0, .match_offset=123140 }, { .children_offset=0, .match_offset=30325 }, { .children_offset=8610, .match_offset=0 }, { .children_offset=8613, .match_offset=0 }, { .children_offset=8615, .match_offset=0 }, { .children_offset=8617, .match_offset=0 }, { .children_offset=8619, .match_offset=0 }, { .children_offset=0, .match_offset=78992 }, { .children_offset=8621, .match_offset=0 }, { .children_offset=8623, .match_offset=0 }, { .children_offset=8625, .match_offset=0 }, { .children_offset=0, .match_offset=114660 }, { .children_offset=8627, .match_offset=0 }, { .children_offset=0, .match_offset=80238 }, { .children_offset=8629, .match_offset=0 }, { .children_offset=8631, .match_offset=0 }, { .children_offset=0, .match_offset=109189 }, { .children_offset=8633, .match_offset=0 }, { .children_offset=8635, .match_offset=0 }, { .children_offset=8637, .match_offset=0 }, { .children_offset=0, .match_offset=121846 }, { .children_offset=8639, .match_offset=0 }, { .children_offset=0, .match_offset=71656 }, { .children_offset=8644, .match_offset=29264 }, { .children_offset=8646, .match_offset=0 }, { .children_offset=8648, .match_offset=0 }, { .children_offset=8650, .match_offset=0 }, { .children_offset=8652, .match_offset=0 }, { .children_offset=0, .match_offset=14311 }, { .children_offset=8654, .match_offset=0 }, { .children_offset=8657, .match_offset=108817 }, { .children_offset=8659, .match_offset=125170 }, { .children_offset=0, .match_offset=113116 }, { .children_offset=0, .match_offset=125324 }, { .children_offset=8661, .match_offset=0 }, { .children_offset=8663, .match_offset=0 }, { .children_offset=0, .match_offset=34644 }, { .children_offset=8665, .match_offset=0 }, { .children_offset=8671, .match_offset=104048 }, { .children_offset=8673, .match_offset=0 }, { .children_offset=8675, .match_offset=0 }, { .children_offset=8679, .match_offset=0 }, { .children_offset=8681, .match_offset=0 }, { .children_offset=8683, .match_offset=0 }, { .children_offset=8685, .match_offset=0 }, { .children_offset=0, .match_offset=58842 }, { .children_offset=8687, .match_offset=0 }, { .children_offset=0, .match_offset=135062 }, { .children_offset=8689, .match_offset=0 }, { .children_offset=8691, .match_offset=0 }, { .children_offset=0, .match_offset=130388 }, { .children_offset=8693, .match_offset=0 }, { .children_offset=0, .match_offset=25389 }, { .children_offset=8695, .match_offset=0 }, { .children_offset=8697, .match_offset=0 }, { .children_offset=0, .match_offset=76997 }, { .children_offset=8699, .match_offset=0 }, { .children_offset=8703, .match_offset=35033 }, { .children_offset=0, .match_offset=104454 }, { .children_offset=8705, .match_offset=0 }, { .children_offset=8707, .match_offset=0 }, { .children_offset=8709, .match_offset=0 }, { .children_offset=8711, .match_offset=0 }, { .children_offset=8713, .match_offset=0 }, { .children_offset=0, .match_offset=10214 }, { .children_offset=8715, .match_offset=0 }, { .children_offset=0, .match_offset=16400 }, { .children_offset=8717, .match_offset=46039 }, { .children_offset=8724, .match_offset=0 }, { .children_offset=8728, .match_offset=0 }, { .children_offset=0, .match_offset=133197 }, { .children_offset=8730, .match_offset=0 }, { .children_offset=0, .match_offset=52731 }, { .children_offset=8732, .match_offset=0 }, { .children_offset=8734, .match_offset=0 }, { .children_offset=8736, .match_offset=0 }, { .children_offset=8738, .match_offset=0 }, { .children_offset=8740, .match_offset=0 }, { .children_offset=8742, .match_offset=0 }, { .children_offset=8744, .match_offset=0 }, { .children_offset=0, .match_offset=51175 }, { .children_offset=8746, .match_offset=0 }, { .children_offset=0, .match_offset=131558 }, { .children_offset=8748, .match_offset=0 }, { .children_offset=8751, .match_offset=0 }, { .children_offset=8755, .match_offset=0 }, { .children_offset=8757, .match_offset=0 }, { .children_offset=8759, .match_offset=0 }, { .children_offset=0, .match_offset=46039 }, { .children_offset=8761, .match_offset=0 }, { .children_offset=8764, .match_offset=0 }, { .children_offset=0, .match_offset=108181 }, { .children_offset=8766, .match_offset=0 }, { .children_offset=8768, .match_offset=0 }, { .children_offset=0, .match_offset=1973 }, { .children_offset=8770, .match_offset=0 }, { .children_offset=8772, .match_offset=0 }, { .children_offset=0, .match_offset=6330 }, { .children_offset=8774, .match_offset=0 }, { .children_offset=8776, .match_offset=0 }, { .children_offset=8778, .match_offset=0 }, { .children_offset=8780, .match_offset=0 }, { .children_offset=0, .match_offset=22470 }, { .children_offset=8782, .match_offset=0 }, { .children_offset=8785, .match_offset=0 }, { .children_offset=8787, .match_offset=0 }, { .children_offset=8789, .match_offset=0 }, { .children_offset=8791, .match_offset=33907 }, { .children_offset=8793, .match_offset=0 }, { .children_offset=8802, .match_offset=0 }, { .children_offset=8813, .match_offset=0 }, { .children_offset=0, .match_offset=13055 }, { .children_offset=0, .match_offset=26919 }, { .children_offset=0, .match_offset=123497 }, { .children_offset=0, .match_offset=133572 }, { .children_offset=0, .match_offset=119649 }, { .children_offset=0, .match_offset=68066 }, { .children_offset=0, .match_offset=24350 }, { .children_offset=0, .match_offset=68271 }, { .children_offset=0, .match_offset=123162 }, { .children_offset=8823, .match_offset=0 }, { .children_offset=0, .match_offset=81851 }, { .children_offset=0, .match_offset=9082 }, { .children_offset=0, .match_offset=27533 }, { .children_offset=0, .match_offset=37215 }, { .children_offset=0, .match_offset=71512 }, { .children_offset=0, .match_offset=33435 }, { .children_offset=0, .match_offset=28722 }, { .children_offset=0, .match_offset=81107 }, { .children_offset=0, .match_offset=73634 }, { .children_offset=0, .match_offset=70818 }, { .children_offset=8834, .match_offset=0 }, { .children_offset=0, .match_offset=14348 }, { .children_offset=0, .match_offset=70659 }, { .children_offset=0, .match_offset=67328 }, { .children_offset=0, .match_offset=28701 }, { .children_offset=0, .match_offset=33205 }, { .children_offset=0, .match_offset=12765 }, { .children_offset=0, .match_offset=52545 }, { .children_offset=0, .match_offset=8885 }, { .children_offset=0, .match_offset=113729 }, { .children_offset=0, .match_offset=43035 }, { .children_offset=8845, .match_offset=0 }, { .children_offset=0, .match_offset=30508 }, { .children_offset=0, .match_offset=42973 }, { .children_offset=0, .match_offset=88659 }, { .children_offset=0, .match_offset=70966 }, { .children_offset=0, .match_offset=126557 }, { .children_offset=0, .match_offset=85242 }, { .children_offset=0, .match_offset=44729 }, { .children_offset=0, .match_offset=86277 }, { .children_offset=0, .match_offset=22634 }, { .children_offset=0, .match_offset=103102 }, { .children_offset=8856, .match_offset=0 }, { .children_offset=0, .match_offset=64550 }, { .children_offset=0, .match_offset=77786 }, { .children_offset=0, .match_offset=53635 }, { .children_offset=0, .match_offset=134477 }, { .children_offset=0, .match_offset=2120 }, { .children_offset=0, .match_offset=43905 }, { .children_offset=0, .match_offset=108143 }, { .children_offset=0, .match_offset=111425 }, { .children_offset=0, .match_offset=103585 }, { .children_offset=0, .match_offset=55262 }, { .children_offset=8867, .match_offset=0 }, { .children_offset=0, .match_offset=104322 }, { .children_offset=0, .match_offset=132140 }, { .children_offset=0, .match_offset=5491 }, { .children_offset=0, .match_offset=6154 }, { .children_offset=0, .match_offset=48171 }, { .children_offset=0, .match_offset=8816 }, { .children_offset=0, .match_offset=40866 }, { .children_offset=0, .match_offset=89671 }, { .children_offset=0, .match_offset=50613 }, { .children_offset=0, .match_offset=51115 }, { .children_offset=8878, .match_offset=0 }, { .children_offset=0, .match_offset=87475 }, { .children_offset=0, .match_offset=113437 }, { .children_offset=0, .match_offset=88011 }, { .children_offset=0, .match_offset=77798 }, { .children_offset=0, .match_offset=33378 }, { .children_offset=0, .match_offset=64477 }, { .children_offset=0, .match_offset=40870 }, { .children_offset=0, .match_offset=42429 }, { .children_offset=0, .match_offset=114483 }, { .children_offset=0, .match_offset=103304 }, { .children_offset=8889, .match_offset=0 }, { .children_offset=0, .match_offset=43459 }, { .children_offset=0, .match_offset=32751 }, { .children_offset=0, .match_offset=128029 }, { .children_offset=0, .match_offset=72836 }, { .children_offset=0, .match_offset=131415 }, { .children_offset=0, .match_offset=103962 }, { .children_offset=0, .match_offset=87343 }, { .children_offset=0, .match_offset=40464 }, { .children_offset=0, .match_offset=39472 }, { .children_offset=0, .match_offset=46819 }, { .children_offset=8900, .match_offset=0 }, { .children_offset=0, .match_offset=122008 }, { .children_offset=0, .match_offset=111144 }, { .children_offset=0, .match_offset=136236 }, { .children_offset=0, .match_offset=109741 }, { .children_offset=0, .match_offset=54263 }, { .children_offset=0, .match_offset=103340 }, { .children_offset=0, .match_offset=117557 }, { .children_offset=0, .match_offset=81001 }, { .children_offset=0, .match_offset=43698 }, { .children_offset=0, .match_offset=15681 }, { .children_offset=8911, .match_offset=0 }, { .children_offset=0, .match_offset=37938 }, { .children_offset=0, .match_offset=22826 }, { .children_offset=0, .match_offset=71958 }, { .children_offset=0, .match_offset=135056 }, { .children_offset=0, .match_offset=13140 }, { .children_offset=0, .match_offset=16871 }, { .children_offset=0, .match_offset=11934 }, { .children_offset=0, .match_offset=28450 }, { .children_offset=0, .match_offset=104434 }, { .children_offset=0, .match_offset=124767 }, { .children_offset=8922, .match_offset=0 }, { .children_offset=8933, .match_offset=0 }, { .children_offset=0, .match_offset=30884 }, { .children_offset=0, .match_offset=59154 }, { .children_offset=0, .match_offset=86658 }, { .children_offset=0, .match_offset=41949 }, { .children_offset=0, .match_offset=68796 }, { .children_offset=0, .match_offset=66422 }, { .children_offset=0, .match_offset=61164 }, { .children_offset=0, .match_offset=34925 }, { .children_offset=0, .match_offset=44102 }, { .children_offset=0, .match_offset=81910 }, { .children_offset=8944, .match_offset=0 }, { .children_offset=0, .match_offset=72666 }, { .children_offset=0, .match_offset=130386 }, { .children_offset=0, .match_offset=33707 }, { .children_offset=0, .match_offset=13541 }, { .children_offset=0, .match_offset=84830 }, { .children_offset=0, .match_offset=22176 }, { .children_offset=0, .match_offset=9927 }, { .children_offset=0, .match_offset=73464 }, { .children_offset=0, .match_offset=108141 }, { .children_offset=0, .match_offset=30994 }, { .children_offset=8955, .match_offset=0 }, { .children_offset=0, .match_offset=67370 }, { .children_offset=0, .match_offset=103478 }, { .children_offset=0, .match_offset=124802 }, { .children_offset=0, .match_offset=72855 }, { .children_offset=0, .match_offset=119227 }, { .children_offset=0, .match_offset=80501 }, { .children_offset=0, .match_offset=104165 }, { .children_offset=0, .match_offset=52192 }, { .children_offset=0, .match_offset=12503 }, { .children_offset=0, .match_offset=104564 }, { .children_offset=8966, .match_offset=0 }, { .children_offset=0, .match_offset=46222 }, { .children_offset=0, .match_offset=29228 }, { .children_offset=0, .match_offset=61122 }, { .children_offset=0, .match_offset=124773 }, { .children_offset=0, .match_offset=134865 }, { .children_offset=0, .match_offset=64579 }, { .children_offset=0, .match_offset=26777 }, { .children_offset=0, .match_offset=33339 }, { .children_offset=0, .match_offset=57503 }, { .children_offset=0, .match_offset=61788 }, { .children_offset=8977, .match_offset=0 }, { .children_offset=0, .match_offset=74166 }, { .children_offset=0, .match_offset=111003 }, { .children_offset=0, .match_offset=134867 }, { .children_offset=0, .match_offset=26031 }, { .children_offset=0, .match_offset=125221 }, { .children_offset=0, .match_offset=84901 }, { .children_offset=0, .match_offset=32969 }, { .children_offset=0, .match_offset=104352 }, { .children_offset=0, .match_offset=72501 }, { .children_offset=0, .match_offset=73609 }, { .children_offset=8988, .match_offset=0 }, { .children_offset=0, .match_offset=130319 }, { .children_offset=0, .match_offset=115729 }, { .children_offset=0, .match_offset=87331 }, { .children_offset=0, .match_offset=125833 }, { .children_offset=0, .match_offset=65754 }, { .children_offset=0, .match_offset=125634 }, { .children_offset=0, .match_offset=26480 }, { .children_offset=0, .match_offset=124784 }, { .children_offset=0, .match_offset=114357 }, { .children_offset=0, .match_offset=10483 }, { .children_offset=8999, .match_offset=0 }, { .children_offset=0, .match_offset=132823 }, { .children_offset=0, .match_offset=62582 }, { .children_offset=0, .match_offset=116330 }, { .children_offset=0, .match_offset=58855 }, { .children_offset=0, .match_offset=116021 }, { .children_offset=0, .match_offset=55287 }, { .children_offset=0, .match_offset=46236 }, { .children_offset=0, .match_offset=77794 }, { .children_offset=0, .match_offset=102675 }, { .children_offset=0, .match_offset=56979 }, { .children_offset=9010, .match_offset=0 }, { .children_offset=0, .match_offset=60544 }, { .children_offset=0, .match_offset=45111 }, { .children_offset=0, .match_offset=129335 }, { .children_offset=0, .match_offset=20620 }, { .children_offset=0, .match_offset=108809 }, { .children_offset=0, .match_offset=81113 }, { .children_offset=0, .match_offset=38162 }, { .children_offset=0, .match_offset=136564 }, { .children_offset=0, .match_offset=65081 }, { .children_offset=0, .match_offset=81920 }, { .children_offset=9021, .match_offset=0 }, { .children_offset=0, .match_offset=54012 }, { .children_offset=0, .match_offset=114485 }, { .children_offset=0, .match_offset=40170 }, { .children_offset=0, .match_offset=7510 }, { .children_offset=0, .match_offset=9891 }, { .children_offset=0, .match_offset=90155 }, { .children_offset=0, .match_offset=22146 }, { .children_offset=0, .match_offset=126401 }, { .children_offset=0, .match_offset=6740 }, { .children_offset=0, .match_offset=125328 }, { .children_offset=9032, .match_offset=0 }, { .children_offset=0, .match_offset=126559 }, { .children_offset=0, .match_offset=126606 }, { .children_offset=0, .match_offset=136041 }, { .children_offset=0, .match_offset=37915 }, { .children_offset=0, .match_offset=133007 }, { .children_offset=0, .match_offset=67995 }, { .children_offset=0, .match_offset=62289 }, { .children_offset=0, .match_offset=122345 }, { .children_offset=0, .match_offset=65177 }, { .children_offset=0, .match_offset=14321 }, { .children_offset=9043, .match_offset=0 }, { .children_offset=9054, .match_offset=0 }, { .children_offset=0, .match_offset=78462 }, { .children_offset=0, .match_offset=103408 }, { .children_offset=0, .match_offset=10859 }, { .children_offset=0, .match_offset=62672 }, { .children_offset=0, .match_offset=44993 }, { .children_offset=0, .match_offset=77788 }, { .children_offset=0, .match_offset=125183 }, { .children_offset=0, .match_offset=59121 }, { .children_offset=0, .match_offset=86269 }, { .children_offset=0, .match_offset=28585 }, { .children_offset=9065, .match_offset=0 }, { .children_offset=0, .match_offset=63835 }, { .children_offset=0, .match_offset=116204 }, { .children_offset=0, .match_offset=57404 }, { .children_offset=0, .match_offset=15011 }, { .children_offset=0, .match_offset=85263 }, { .children_offset=0, .match_offset=122547 }, { .children_offset=0, .match_offset=131154 }, { .children_offset=0, .match_offset=119661 }, { .children_offset=0, .match_offset=77014 }, { .children_offset=0, .match_offset=130323 }, { .children_offset=9076, .match_offset=0 }, { .children_offset=0, .match_offset=22001 }, { .children_offset=0, .match_offset=53994 }, { .children_offset=0, .match_offset=48750 }, { .children_offset=0, .match_offset=37945 }, { .children_offset=0, .match_offset=27845 }, { .children_offset=0, .match_offset=12117 }, { .children_offset=0, .match_offset=1899 }, { .children_offset=0, .match_offset=29224 }, { .children_offset=0, .match_offset=103777 }, { .children_offset=0, .match_offset=49840 }, { .children_offset=9087, .match_offset=0 }, { .children_offset=0, .match_offset=42671 }, { .children_offset=0, .match_offset=12767 }, { .children_offset=0, .match_offset=72109 }, { .children_offset=0, .match_offset=124616 }, { .children_offset=0, .match_offset=58780 }, { .children_offset=0, .match_offset=42016 }, { .children_offset=0, .match_offset=85218 }, { .children_offset=0, .match_offset=61557 }, { .children_offset=0, .match_offset=34010 }, { .children_offset=0, .match_offset=20187 }, { .children_offset=9098, .match_offset=0 }, { .children_offset=0, .match_offset=77897 }, { .children_offset=0, .match_offset=70748 }, { .children_offset=0, .match_offset=122653 }, { .children_offset=0, .match_offset=112828 }, { .children_offset=0, .match_offset=82078 }, { .children_offset=0, .match_offset=88724 }, { .children_offset=0, .match_offset=44981 }, { .children_offset=0, .match_offset=34667 }, { .children_offset=0, .match_offset=40334 }, { .children_offset=0, .match_offset=16201 }, { .children_offset=9109, .match_offset=0 }, { .children_offset=0, .match_offset=6678 }, { .children_offset=0, .match_offset=5551 }, { .children_offset=0, .match_offset=42276 }, { .children_offset=0, .match_offset=100968 }, { .children_offset=0, .match_offset=21372 }, { .children_offset=0, .match_offset=1539 }, { .children_offset=0, .match_offset=62650 }, { .children_offset=0, .match_offset=130087 }, { .children_offset=0, .match_offset=42228 }, { .children_offset=0, .match_offset=38426 }, { .children_offset=9120, .match_offset=0 }, { .children_offset=0, .match_offset=135833 }, { .children_offset=0, .match_offset=113286 }, { .children_offset=0, .match_offset=25424 }, { .children_offset=0, .match_offset=30795 }, { .children_offset=0, .match_offset=46697 }, { .children_offset=0, .match_offset=43511 }, { .children_offset=0, .match_offset=89097 }, { .children_offset=0, .match_offset=133092 }, { .children_offset=0, .match_offset=109481 }, { .children_offset=0, .match_offset=111427 }, { .children_offset=9131, .match_offset=0 }, { .children_offset=0, .match_offset=88009 }, { .children_offset=0, .match_offset=133499 }, { .children_offset=0, .match_offset=121916 }, { .children_offset=0, .match_offset=114019 }, { .children_offset=0, .match_offset=14964 }, { .children_offset=0, .match_offset=29990 }, { .children_offset=0, .match_offset=32975 }, { .children_offset=0, .match_offset=103472 }, { .children_offset=0, .match_offset=59495 }, { .children_offset=0, .match_offset=7727 }, { .children_offset=9142, .match_offset=0 }, { .children_offset=0, .match_offset=85906 }, { .children_offset=0, .match_offset=68764 }, { .children_offset=0, .match_offset=59365 }, { .children_offset=0, .match_offset=80609 }, { .children_offset=0, .match_offset=16931 }, { .children_offset=0, .match_offset=119266 }, { .children_offset=0, .match_offset=72126 }, { .children_offset=0, .match_offset=7378 }, { .children_offset=0, .match_offset=45936 }, { .children_offset=0, .match_offset=124681 }, { .children_offset=9153, .match_offset=0 }, { .children_offset=0, .match_offset=109377 }, { .children_offset=0, .match_offset=73842 }, { .children_offset=0, .match_offset=37618 }, { .children_offset=0, .match_offset=123408 }, { .children_offset=0, .match_offset=118433 }, { .children_offset=0, .match_offset=57519 }, { .children_offset=0, .match_offset=124926 }, { .children_offset=0, .match_offset=14390 }, { .children_offset=0, .match_offset=109909 }, { .children_offset=0, .match_offset=114944 }, { .children_offset=9164, .match_offset=0 }, { .children_offset=9175, .match_offset=0 }, { .children_offset=0, .match_offset=73862 }, { .children_offset=0, .match_offset=113439 }, { .children_offset=0, .match_offset=37494 }, { .children_offset=0, .match_offset=21859 }, { .children_offset=0, .match_offset=10857 }, { .children_offset=0, .match_offset=109612 }, { .children_offset=0, .match_offset=28116 }, { .children_offset=0, .match_offset=16937 }, { .children_offset=0, .match_offset=55775 }, { .children_offset=0, .match_offset=62940 }, { .children_offset=9186, .match_offset=0 }, { .children_offset=0, .match_offset=109269 }, { .children_offset=0, .match_offset=46835 }, { .children_offset=0, .match_offset=46181 }, { .children_offset=0, .match_offset=129937 }, { .children_offset=0, .match_offset=119253 }, { .children_offset=0, .match_offset=44688 }, { .children_offset=0, .match_offset=123499 }, { .children_offset=0, .match_offset=113619 }, { .children_offset=0, .match_offset=123516 }, { .children_offset=0, .match_offset=116931 }, { .children_offset=9197, .match_offset=0 }, { .children_offset=0, .match_offset=104489 }, { .children_offset=0, .match_offset=118404 }, { .children_offset=0, .match_offset=135792 }, { .children_offset=0, .match_offset=58013 }, { .children_offset=0, .match_offset=129871 }, { .children_offset=0, .match_offset=77387 }, { .children_offset=0, .match_offset=37258 }, { .children_offset=0, .match_offset=88013 }, { .children_offset=0, .match_offset=77843 }, { .children_offset=0, .match_offset=103956 }, { .children_offset=9208, .match_offset=0 }, { .children_offset=0, .match_offset=33965 }, { .children_offset=0, .match_offset=61147 }, { .children_offset=0, .match_offset=38532 }, { .children_offset=0, .match_offset=23036 }, { .children_offset=0, .match_offset=135531 }, { .children_offset=0, .match_offset=89969 }, { .children_offset=0, .match_offset=13178 }, { .children_offset=0, .match_offset=12293 }, { .children_offset=0, .match_offset=34627 }, { .children_offset=0, .match_offset=109417 }, { .children_offset=9219, .match_offset=0 }, { .children_offset=0, .match_offset=87016 }, { .children_offset=0, .match_offset=123392 }, { .children_offset=0, .match_offset=109402 }, { .children_offset=0, .match_offset=35611 }, { .children_offset=0, .match_offset=12667 }, { .children_offset=0, .match_offset=103186 }, { .children_offset=0, .match_offset=48165 }, { .children_offset=0, .match_offset=125236 }, { .children_offset=0, .match_offset=6172 }, { .children_offset=0, .match_offset=135858 }, { .children_offset=9230, .match_offset=0 }, { .children_offset=0, .match_offset=64499 }, { .children_offset=0, .match_offset=7531 }, { .children_offset=0, .match_offset=34693 }, { .children_offset=0, .match_offset=65729 }, { .children_offset=0, .match_offset=30138 }, { .children_offset=0, .match_offset=68623 }, { .children_offset=0, .match_offset=125185 }, { .children_offset=0, .match_offset=86045 }, { .children_offset=0, .match_offset=56981 }, { .children_offset=0, .match_offset=29226 }, { .children_offset=9241, .match_offset=0 }, { .children_offset=0, .match_offset=43730 }, { .children_offset=0, .match_offset=34012 }, { .children_offset=0, .match_offset=90212 }, { .children_offset=0, .match_offset=102865 }, { .children_offset=0, .match_offset=122333 }, { .children_offset=0, .match_offset=60415 }, { .children_offset=0, .match_offset=6980 }, { .children_offset=0, .match_offset=109853 }, { .children_offset=0, .match_offset=89521 }, { .children_offset=0, .match_offset=58507 }, { .children_offset=9252, .match_offset=0 }, { .children_offset=0, .match_offset=38116 }, { .children_offset=0, .match_offset=86769 }, { .children_offset=0, .match_offset=366 }, { .children_offset=0, .match_offset=33027 }, { .children_offset=0, .match_offset=113085 }, { .children_offset=0, .match_offset=26037 }, { .children_offset=0, .match_offset=67814 }, { .children_offset=0, .match_offset=87853 }, { .children_offset=0, .match_offset=123462 }, { .children_offset=0, .match_offset=132797 }, { .children_offset=9263, .match_offset=0 }, { .children_offset=0, .match_offset=28481 }, { .children_offset=0, .match_offset=8498 }, { .children_offset=0, .match_offset=123448 }, { .children_offset=0, .match_offset=59102 }, { .children_offset=0, .match_offset=133684 }, { .children_offset=0, .match_offset=134365 }, { .children_offset=0, .match_offset=64577 }, { .children_offset=0, .match_offset=38653 }, { .children_offset=0, .match_offset=39062 }, { .children_offset=0, .match_offset=124601 }, { .children_offset=9274, .match_offset=0 }, { .children_offset=0, .match_offset=58572 }, { .children_offset=0, .match_offset=109834 }, { .children_offset=0, .match_offset=64978 }, { .children_offset=0, .match_offset=24327 }, { .children_offset=0, .match_offset=30339 }, { .children_offset=0, .match_offset=43432 }, { .children_offset=0, .match_offset=48455 }, { .children_offset=0, .match_offset=113642 }, { .children_offset=0, .match_offset=5239 }, { .children_offset=0, .match_offset=132881 }, { .children_offset=9285, .match_offset=0 }, { .children_offset=9296, .match_offset=0 }, { .children_offset=0, .match_offset=109400 }, { .children_offset=0, .match_offset=66441 }, { .children_offset=0, .match_offset=62837 }, { .children_offset=0, .match_offset=60699 }, { .children_offset=0, .match_offset=63809 }, { .children_offset=0, .match_offset=79001 }, { .children_offset=0, .match_offset=22150 }, { .children_offset=0, .match_offset=48196 }, { .children_offset=0, .match_offset=86089 }, { .children_offset=0, .match_offset=40906 }, { .children_offset=9307, .match_offset=0 }, { .children_offset=0, .match_offset=60464 }, { .children_offset=0, .match_offset=72421 }, { .children_offset=0, .match_offset=123501 }, { .children_offset=0, .match_offset=32848 }, { .children_offset=0, .match_offset=1241 }, { .children_offset=0, .match_offset=42490 }, { .children_offset=0, .match_offset=116353 }, { .children_offset=0, .match_offset=39470 }, { .children_offset=0, .match_offset=54249 }, { .children_offset=0, .match_offset=111121 }, { .children_offset=9318, .match_offset=0 }, { .children_offset=0, .match_offset=6587 }, { .children_offset=0, .match_offset=49918 }, { .children_offset=0, .match_offset=125041 }, { .children_offset=0, .match_offset=29088 }, { .children_offset=0, .match_offset=9893 }, { .children_offset=0, .match_offset=44437 }, { .children_offset=0, .match_offset=50044 }, { .children_offset=0, .match_offset=33419 }, { .children_offset=0, .match_offset=26893 }, { .children_offset=0, .match_offset=28422 }, { .children_offset=9329, .match_offset=0 }, { .children_offset=0, .match_offset=122362 }, { .children_offset=0, .match_offset=30471 }, { .children_offset=0, .match_offset=60435 }, { .children_offset=0, .match_offset=77175 }, { .children_offset=0, .match_offset=129600 }, { .children_offset=0, .match_offset=78478 }, { .children_offset=0, .match_offset=5958 }, { .children_offset=0, .match_offset=37161 }, { .children_offset=0, .match_offset=34419 }, { .children_offset=0, .match_offset=30763 }, { .children_offset=9340, .match_offset=0 }, { .children_offset=0, .match_offset=44736 }, { .children_offset=0, .match_offset=113790 }, { .children_offset=0, .match_offset=39468 }, { .children_offset=0, .match_offset=10027 }, { .children_offset=0, .match_offset=27367 }, { .children_offset=0, .match_offset=86275 }, { .children_offset=0, .match_offset=84774 }, { .children_offset=0, .match_offset=119582 }, { .children_offset=0, .match_offset=7001 }, { .children_offset=0, .match_offset=113636 }, { .children_offset=9351, .match_offset=0 }, { .children_offset=0, .match_offset=5663 }, { .children_offset=0, .match_offset=42855 }, { .children_offset=0, .match_offset=38430 }, { .children_offset=0, .match_offset=134293 }, { .children_offset=0, .match_offset=1501 }, { .children_offset=0, .match_offset=23907 }, { .children_offset=0, .match_offset=14285 }, { .children_offset=0, .match_offset=27818 }, { .children_offset=0, .match_offset=20898 }, { .children_offset=0, .match_offset=77018 }, { .children_offset=9362, .match_offset=0 }, { .children_offset=0, .match_offset=72427 }, { .children_offset=0, .match_offset=122631 }, { .children_offset=0, .match_offset=5665 }, { .children_offset=0, .match_offset=44971 }, { .children_offset=0, .match_offset=104360 }, { .children_offset=0, .match_offset=22089 }, { .children_offset=0, .match_offset=38181 }, { .children_offset=0, .match_offset=103117 }, { .children_offset=0, .match_offset=62692 }, { .children_offset=0, .match_offset=42261 }, { .children_offset=9373, .match_offset=0 }, { .children_offset=0, .match_offset=25936 }, { .children_offset=0, .match_offset=12441 }, { .children_offset=0, .match_offset=59464 }, { .children_offset=0, .match_offset=42604 }, { .children_offset=0, .match_offset=63020 }, { .children_offset=0, .match_offset=134884 }, { .children_offset=0, .match_offset=44793 }, { .children_offset=0, .match_offset=37978 }, { .children_offset=0, .match_offset=77426 }, { .children_offset=0, .match_offset=8850 }, { .children_offset=9384, .match_offset=0 }, { .children_offset=0, .match_offset=110902 }, { .children_offset=0, .match_offset=5743 }, { .children_offset=0, .match_offset=26202 }, { .children_offset=0, .match_offset=6876 }, { .children_offset=0, .match_offset=77796 }, { .children_offset=0, .match_offset=130895 }, { .children_offset=0, .match_offset=21914 }, { .children_offset=0, .match_offset=34016 }, { .children_offset=0, .match_offset=118591 }, { .children_offset=0, .match_offset=55412 }, { .children_offset=9395, .match_offset=0 }, { .children_offset=0, .match_offset=118451 }, { .children_offset=0, .match_offset=37170 }, { .children_offset=0, .match_offset=65202 }, { .children_offset=0, .match_offset=43042 }, { .children_offset=0, .match_offset=9882 }, { .children_offset=0, .match_offset=40454 }, { .children_offset=0, .match_offset=62565 }, { .children_offset=0, .match_offset=56930 }, { .children_offset=0, .match_offset=50099 }, { .children_offset=0, .match_offset=131010 }, { .children_offset=9406, .match_offset=0 }, { .children_offset=9417, .match_offset=0 }, { .children_offset=0, .match_offset=55013 }, { .children_offset=0, .match_offset=55254 }, { .children_offset=0, .match_offset=43015 }, { .children_offset=0, .match_offset=60035 }, { .children_offset=0, .match_offset=86790 }, { .children_offset=0, .match_offset=118461 }, { .children_offset=0, .match_offset=73760 }, { .children_offset=0, .match_offset=57527 }, { .children_offset=0, .match_offset=122129 }, { .children_offset=0, .match_offset=73503 }, { .children_offset=9428, .match_offset=0 }, { .children_offset=0, .match_offset=44958 }, { .children_offset=0, .match_offset=129301 }, { .children_offset=0, .match_offset=64176 }, { .children_offset=0, .match_offset=113453 }, { .children_offset=0, .match_offset=20310 }, { .children_offset=0, .match_offset=129912 }, { .children_offset=0, .match_offset=14402 }, { .children_offset=0, .match_offset=44721 }, { .children_offset=0, .match_offset=90307 }, { .children_offset=0, .match_offset=123229 }, { .children_offset=9439, .match_offset=0 }, { .children_offset=0, .match_offset=26432 }, { .children_offset=0, .match_offset=5243 }, { .children_offset=0, .match_offset=30728 }, { .children_offset=0, .match_offset=35489 }, { .children_offset=0, .match_offset=59266 }, { .children_offset=0, .match_offset=45071 }, { .children_offset=0, .match_offset=58198 }, { .children_offset=0, .match_offset=87319 }, { .children_offset=0, .match_offset=42074 }, { .children_offset=0, .match_offset=72517 }, { .children_offset=9450, .match_offset=0 }, { .children_offset=0, .match_offset=14452 }, { .children_offset=0, .match_offset=38398 }, { .children_offset=0, .match_offset=34699 }, { .children_offset=0, .match_offset=77432 }, { .children_offset=0, .match_offset=62320 }, { .children_offset=0, .match_offset=60079 }, { .children_offset=0, .match_offset=134871 }, { .children_offset=0, .match_offset=100979 }, { .children_offset=0, .match_offset=81042 }, { .children_offset=0, .match_offset=5767 }, { .children_offset=9461, .match_offset=0 }, { .children_offset=0, .match_offset=108755 }, { .children_offset=0, .match_offset=129590 }, { .children_offset=0, .match_offset=69074 }, { .children_offset=0, .match_offset=26204 }, { .children_offset=0, .match_offset=72463 }, { .children_offset=0, .match_offset=123406 }, { .children_offset=0, .match_offset=67585 }, { .children_offset=0, .match_offset=53848 }, { .children_offset=0, .match_offset=131822 }, { .children_offset=0, .match_offset=69060 }, { .children_offset=9472, .match_offset=0 }, { .children_offset=0, .match_offset=55266 }, { .children_offset=0, .match_offset=22074 }, { .children_offset=0, .match_offset=62936 }, { .children_offset=0, .match_offset=113110 }, { .children_offset=0, .match_offset=115790 }, { .children_offset=0, .match_offset=21183 }, { .children_offset=0, .match_offset=60948 }, { .children_offset=0, .match_offset=45942 }, { .children_offset=0, .match_offset=109349 }, { .children_offset=0, .match_offset=102610 }, { .children_offset=9483, .match_offset=0 }, { .children_offset=0, .match_offset=25911 }, { .children_offset=0, .match_offset=103688 }, { .children_offset=0, .match_offset=103958 }, { .children_offset=0, .match_offset=12311 }, { .children_offset=0, .match_offset=28090 }, { .children_offset=0, .match_offset=35646 }, { .children_offset=0, .match_offset=45965 }, { .children_offset=0, .match_offset=126434 }, { .children_offset=0, .match_offset=22017 }, { .children_offset=0, .match_offset=116953 }, { .children_offset=9494, .match_offset=0 }, { .children_offset=0, .match_offset=32816 }, { .children_offset=0, .match_offset=14485 }, { .children_offset=0, .match_offset=133005 }, { .children_offset=0, .match_offset=50611 }, { .children_offset=0, .match_offset=30753 }, { .children_offset=0, .match_offset=46065 }, { .children_offset=0, .match_offset=113435 }, { .children_offset=0, .match_offset=44112 }, { .children_offset=0, .match_offset=34116 }, { .children_offset=0, .match_offset=38357 }, { .children_offset=9505, .match_offset=0 }, { .children_offset=0, .match_offset=49334 }, { .children_offset=0, .match_offset=90594 }, { .children_offset=0, .match_offset=8442 }, { .children_offset=0, .match_offset=77322 }, { .children_offset=0, .match_offset=78572 }, { .children_offset=0, .match_offset=124916 }, { .children_offset=0, .match_offset=134920 }, { .children_offset=0, .match_offset=33011 }, { .children_offset=0, .match_offset=53488 }, { .children_offset=0, .match_offset=72130 }, { .children_offset=9516, .match_offset=0 }, { .children_offset=0, .match_offset=109185 }, { .children_offset=0, .match_offset=14966 }, { .children_offset=0, .match_offset=10934 }, { .children_offset=0, .match_offset=115607 }, { .children_offset=0, .match_offset=32867 }, { .children_offset=0, .match_offset=6705 }, { .children_offset=0, .match_offset=29992 }, { .children_offset=0, .match_offset=119861 }, { .children_offset=0, .match_offset=34106 }, { .children_offset=0, .match_offset=109905 }, { .children_offset=9527, .match_offset=0 }, { .children_offset=9538, .match_offset=0 }, { .children_offset=0, .match_offset=15023 }, { .children_offset=0, .match_offset=5493 }, { .children_offset=0, .match_offset=54221 }, { .children_offset=0, .match_offset=44995 }, { .children_offset=0, .match_offset=87477 }, { .children_offset=0, .match_offset=124634 }, { .children_offset=0, .match_offset=6513 }, { .children_offset=0, .match_offset=103063 }, { .children_offset=0, .match_offset=12474 }, { .children_offset=0, .match_offset=40438 }, { .children_offset=9549, .match_offset=0 }, { .children_offset=0, .match_offset=40898 }, { .children_offset=0, .match_offset=43940 }, { .children_offset=0, .match_offset=125821 }, { .children_offset=0, .match_offset=40874 }, { .children_offset=0, .match_offset=46604 }, { .children_offset=0, .match_offset=123214 }, { .children_offset=0, .match_offset=25397 }, { .children_offset=0, .match_offset=13903 }, { .children_offset=0, .match_offset=12594 }, { .children_offset=0, .match_offset=42469 }, { .children_offset=9560, .match_offset=0 }, { .children_offset=0, .match_offset=74572 }, { .children_offset=0, .match_offset=119626 }, { .children_offset=0, .match_offset=45287 }, { .children_offset=0, .match_offset=104191 }, { .children_offset=0, .match_offset=109843 }, { .children_offset=0, .match_offset=90656 }, { .children_offset=0, .match_offset=6224 }, { .children_offset=0, .match_offset=121971 }, { .children_offset=0, .match_offset=35157 }, { .children_offset=0, .match_offset=38921 }, { .children_offset=9571, .match_offset=0 }, { .children_offset=0, .match_offset=77001 }, { .children_offset=0, .match_offset=103921 }, { .children_offset=0, .match_offset=15723 }, { .children_offset=0, .match_offset=88636 }, { .children_offset=0, .match_offset=14511 }, { .children_offset=0, .match_offset=119429 }, { .children_offset=0, .match_offset=134572 }, { .children_offset=0, .match_offset=40172 }, { .children_offset=0, .match_offset=59094 }, { .children_offset=0, .match_offset=67668 }, { .children_offset=9582, .match_offset=0 }, { .children_offset=0, .match_offset=60942 }, { .children_offset=0, .match_offset=29232 }, { .children_offset=0, .match_offset=135794 }, { .children_offset=0, .match_offset=35762 }, { .children_offset=0, .match_offset=65848 }, { .children_offset=0, .match_offset=44941 }, { .children_offset=0, .match_offset=10603 }, { .children_offset=0, .match_offset=21916 }, { .children_offset=0, .match_offset=43102 }, { .children_offset=0, .match_offset=25795 }, { .children_offset=9593, .match_offset=0 }, { .children_offset=0, .match_offset=66529 }, { .children_offset=0, .match_offset=9084 }, { .children_offset=0, .match_offset=25953 }, { .children_offset=0, .match_offset=21888 }, { .children_offset=0, .match_offset=114475 }, { .children_offset=0, .match_offset=102875 }, { .children_offset=0, .match_offset=6341 }, { .children_offset=0, .match_offset=123245 }, { .children_offset=0, .match_offset=134182 }, { .children_offset=0, .match_offset=12326 }, { .children_offset=9604, .match_offset=0 }, { .children_offset=0, .match_offset=89611 }, { .children_offset=0, .match_offset=43918 }, { .children_offset=0, .match_offset=78590 }, { .children_offset=0, .match_offset=133281 }, { .children_offset=0, .match_offset=46788 }, { .children_offset=0, .match_offset=44934 }, { .children_offset=0, .match_offset=124683 }, { .children_offset=0, .match_offset=11431 }, { .children_offset=0, .match_offset=61940 }, { .children_offset=0, .match_offset=86047 }, { .children_offset=9615, .match_offset=0 }, { .children_offset=0, .match_offset=44975 }, { .children_offset=0, .match_offset=58346 }, { .children_offset=0, .match_offset=126597 }, { .children_offset=0, .match_offset=25673 }, { .children_offset=0, .match_offset=22548 }, { .children_offset=0, .match_offset=64292 }, { .children_offset=0, .match_offset=44657 }, { .children_offset=0, .match_offset=113821 }, { .children_offset=0, .match_offset=114954 }, { .children_offset=0, .match_offset=49731 }, { .children_offset=9626, .match_offset=0 }, { .children_offset=0, .match_offset=77020 }, { .children_offset=0, .match_offset=104328 }, { .children_offset=0, .match_offset=20274 }, { .children_offset=0, .match_offset=104056 }, { .children_offset=0, .match_offset=122474 }, { .children_offset=0, .match_offset=30144 }, { .children_offset=0, .match_offset=110890 }, { .children_offset=0, .match_offset=33546 }, { .children_offset=0, .match_offset=65495 }, { .children_offset=0, .match_offset=43681 }, { .children_offset=9637, .match_offset=0 }, { .children_offset=0, .match_offset=30822 }, { .children_offset=0, .match_offset=11334 }, { .children_offset=0, .match_offset=35858 }, { .children_offset=0, .match_offset=11030 }, { .children_offset=0, .match_offset=103155 }, { .children_offset=0, .match_offset=63421 }, { .children_offset=0, .match_offset=133016 }, { .children_offset=0, .match_offset=132866 }, { .children_offset=0, .match_offset=124554 }, { .children_offset=0, .match_offset=23921 }, { .children_offset=9648, .match_offset=0 }, { .children_offset=9655, .match_offset=0 }, { .children_offset=0, .match_offset=129602 }, { .children_offset=0, .match_offset=85825 }, { .children_offset=0, .match_offset=32804 }, { .children_offset=0, .match_offset=25195 }, { .children_offset=0, .match_offset=50615 }, { .children_offset=0, .match_offset=132936 }, { .children_offset=0, .match_offset=60506 }, { .children_offset=0, .match_offset=6392 }, { .children_offset=0, .match_offset=5303 }, { .children_offset=0, .match_offset=27828 }, { .children_offset=9666, .match_offset=0 }, { .children_offset=0, .match_offset=118365 }, { .children_offset=0, .match_offset=38160 }, { .children_offset=0, .match_offset=122584 }, { .children_offset=0, .match_offset=46725 }, { .children_offset=0, .match_offset=133662 }, { .children_offset=0, .match_offset=53957 }, { .children_offset=0, .match_offset=87150 }, { .children_offset=0, .match_offset=44997 }, { .children_offset=0, .match_offset=35764 }, { .children_offset=0, .match_offset=14622 }, { .children_offset=9677, .match_offset=0 }, { .children_offset=0, .match_offset=2275 }, { .children_offset=0, .match_offset=64365 }, { .children_offset=0, .match_offset=34870 }, { .children_offset=0, .match_offset=49787 }, { .children_offset=0, .match_offset=28118 }, { .children_offset=0, .match_offset=27639 }, { .children_offset=0, .match_offset=38547 }, { .children_offset=0, .match_offset=60550 }, { .children_offset=0, .match_offset=121848 }, { .children_offset=0, .match_offset=115339 }, { .children_offset=9688, .match_offset=0 }, { .children_offset=0, .match_offset=72139 }, { .children_offset=0, .match_offset=81933 }, { .children_offset=0, .match_offset=43688 }, { .children_offset=0, .match_offset=63628 }, { .children_offset=0, .match_offset=122459 }, { .children_offset=0, .match_offset=102737 }, { .children_offset=0, .match_offset=62283 }, { .children_offset=0, .match_offset=65529 }, { .children_offset=0, .match_offset=119419 }, { .children_offset=0, .match_offset=11990 }, { .children_offset=9699, .match_offset=0 }, { .children_offset=0, .match_offset=125028 }, { .children_offset=0, .match_offset=122553 }, { .children_offset=0, .match_offset=55686 }, { .children_offset=0, .match_offset=81922 }, { .children_offset=0, .match_offset=77048 }, { .children_offset=0, .match_offset=2326 }, { .children_offset=0, .match_offset=59604 }, { .children_offset=0, .match_offset=77895 }, { .children_offset=0, .match_offset=6214 }, { .children_offset=0, .match_offset=12753 }, { .children_offset=9710, .match_offset=0 }, { .children_offset=0, .match_offset=30914 }, { .children_offset=0, .match_offset=115670 }, { .children_offset=0, .match_offset=129432 }, { .children_offset=0, .match_offset=121914 }, { .children_offset=0, .match_offset=6615 }, { .children_offset=0, .match_offset=89249 }, { .children_offset=9717, .match_offset=0 }, { .children_offset=9719, .match_offset=0 }, { .children_offset=9721, .match_offset=0 }, { .children_offset=9723, .match_offset=0 }, { .children_offset=9725, .match_offset=0 }, { .children_offset=0, .match_offset=55270 }, { .children_offset=9727, .match_offset=0 }, { .children_offset=9729, .match_offset=0 }, { .children_offset=9731, .match_offset=0 }, { .children_offset=9733, .match_offset=0 }, { .children_offset=9736, .match_offset=0 }, { .children_offset=0, .match_offset=135504 }, { .children_offset=9738, .match_offset=0 }, { .children_offset=9740, .match_offset=0 }, { .children_offset=0, .match_offset=28573 }, { .children_offset=9742, .match_offset=0 }, { .children_offset=9744, .match_offset=0 }, { .children_offset=9746, .match_offset=0 }, { .children_offset=9748, .match_offset=100930 }, { .children_offset=0, .match_offset=12033 }, { .children_offset=9750, .match_offset=58020 }, { .children_offset=9759, .match_offset=0 }, { .children_offset=9761, .match_offset=0 }, { .children_offset=9763, .match_offset=0 }, { .children_offset=9765, .match_offset=0 }, { .children_offset=9767, .match_offset=0 }, { .children_offset=9770, .match_offset=0 }, { .children_offset=9772, .match_offset=0 }, { .children_offset=9774, .match_offset=0 }, { .children_offset=9776, .match_offset=0 }, { .children_offset=9778, .match_offset=0 }, { .children_offset=9780, .match_offset=0 }, { .children_offset=0, .match_offset=58525 }, { .children_offset=9782, .match_offset=0 }, { .children_offset=9784, .match_offset=0 }, { .children_offset=9786, .match_offset=0 }, { .children_offset=9788, .match_offset=0 }, { .children_offset=0, .match_offset=59491 }, { .children_offset=9790, .match_offset=0 }, { .children_offset=9795, .match_offset=0 }, { .children_offset=9797, .match_offset=0 }, { .children_offset=9799, .match_offset=0 }, { .children_offset=0, .match_offset=30136 }, { .children_offset=9801, .match_offset=0 }, { .children_offset=9803, .match_offset=0 }, { .children_offset=9805, .match_offset=0 }, { .children_offset=0, .match_offset=64172 }, { .children_offset=9807, .match_offset=0 }, { .children_offset=9809, .match_offset=0 }, { .children_offset=9811, .match_offset=0 }, { .children_offset=9813, .match_offset=0 }, { .children_offset=9815, .match_offset=0 }, { .children_offset=0, .match_offset=134268 }, { .children_offset=9817, .match_offset=0 }, { .children_offset=9819, .match_offset=0 }, { .children_offset=9821, .match_offset=0 }, { .children_offset=0, .match_offset=23765 }, { .children_offset=9823, .match_offset=55967 }, { .children_offset=9826, .match_offset=0 }, { .children_offset=9828, .match_offset=0 }, { .children_offset=0, .match_offset=39064 }, { .children_offset=9830, .match_offset=0 }, { .children_offset=9833, .match_offset=0 }, { .children_offset=9835, .match_offset=0 }, { .children_offset=9837, .match_offset=0 }, { .children_offset=9839, .match_offset=0 }, { .children_offset=9841, .match_offset=0 }, { .children_offset=9843, .match_offset=0 }, { .children_offset=9845, .match_offset=0 }, { .children_offset=9847, .match_offset=0 }, { .children_offset=0, .match_offset=136019 }, { .children_offset=9849, .match_offset=0 }, { .children_offset=9851, .match_offset=0 }, { .children_offset=9853, .match_offset=0 }, { .children_offset=0, .match_offset=116220 }, { .children_offset=9855, .match_offset=0 }, { .children_offset=9858, .match_offset=0 }, { .children_offset=9860, .match_offset=0 }, { .children_offset=0, .match_offset=77400 }, { .children_offset=9862, .match_offset=0 }, { .children_offset=0, .match_offset=58961 }, { .children_offset=9864, .match_offset=0 }, { .children_offset=9867, .match_offset=0 }, { .children_offset=9869, .match_offset=0 }, { .children_offset=9871, .match_offset=0 }, { .children_offset=9874, .match_offset=0 }, { .children_offset=0, .match_offset=42861 }, { .children_offset=9876, .match_offset=0 }, { .children_offset=9878, .match_offset=0 }, { .children_offset=0, .match_offset=119259 }, { .children_offset=9880, .match_offset=0 }, { .children_offset=9883, .match_offset=0 }, { .children_offset=9885, .match_offset=0 }, { .children_offset=9887, .match_offset=0 }, { .children_offset=0, .match_offset=44774 }, { .children_offset=9889, .match_offset=0 }, { .children_offset=9891, .match_offset=0 }, { .children_offset=9893, .match_offset=0 }, { .children_offset=9895, .match_offset=0 }, { .children_offset=9897, .match_offset=0 }, { .children_offset=0, .match_offset=132783 }, { .children_offset=9899, .match_offset=0 }, { .children_offset=9903, .match_offset=0 }, { .children_offset=9905, .match_offset=0 }, { .children_offset=9907, .match_offset=0 }, { .children_offset=9909, .match_offset=0 }, { .children_offset=9911, .match_offset=0 }, { .children_offset=9913, .match_offset=0 }, { .children_offset=0, .match_offset=131383 }, { .children_offset=9915, .match_offset=0 }, { .children_offset=9917, .match_offset=0 }, { .children_offset=9919, .match_offset=0 }, { .children_offset=9921, .match_offset=0 }, { .children_offset=0, .match_offset=49947 }, { .children_offset=9923, .match_offset=0 }, { .children_offset=9926, .match_offset=0 }, { .children_offset=9928, .match_offset=0 }, { .children_offset=9931, .match_offset=0 }, { .children_offset=0, .match_offset=110393 }, { .children_offset=0, .match_offset=25772 }, { .children_offset=9933, .match_offset=0 }, { .children_offset=9935, .match_offset=0 }, { .children_offset=9937, .match_offset=0 }, { .children_offset=9939, .match_offset=0 }, { .children_offset=9941, .match_offset=0 }, { .children_offset=9943, .match_offset=0 }, { .children_offset=0, .match_offset=42680 }, { .children_offset=9945, .match_offset=0 }, { .children_offset=9951, .match_offset=0 }, { .children_offset=9954, .match_offset=0 }, { .children_offset=0, .match_offset=102927 }, { .children_offset=9956, .match_offset=0 }, { .children_offset=9958, .match_offset=53563 }, { .children_offset=9961, .match_offset=0 }, { .children_offset=9963, .match_offset=0 }, { .children_offset=0, .match_offset=44313 }, { .children_offset=0, .match_offset=55660 }, { .children_offset=9965, .match_offset=0 }, { .children_offset=9968, .match_offset=0 }, { .children_offset=9970, .match_offset=0 }, { .children_offset=9972, .match_offset=0 }, { .children_offset=9974, .match_offset=0 }, { .children_offset=9976, .match_offset=0 }, { .children_offset=9978, .match_offset=0 }, { .children_offset=9980, .match_offset=0 }, { .children_offset=0, .match_offset=30399 }, { .children_offset=9982, .match_offset=0 }, { .children_offset=9984, .match_offset=0 }, { .children_offset=9986, .match_offset=0 }, { .children_offset=9988, .match_offset=0 }, { .children_offset=0, .match_offset=34383 }, { .children_offset=9990, .match_offset=0 }, { .children_offset=9992, .match_offset=0 }, { .children_offset=9994, .match_offset=0 }, { .children_offset=9998, .match_offset=0 }, { .children_offset=10000, .match_offset=0 }, { .children_offset=10002, .match_offset=0 }, { .children_offset=10004, .match_offset=0 }, { .children_offset=0, .match_offset=34008 }, { .children_offset=10006, .match_offset=0 }, { .children_offset=10008, .match_offset=0 }, { .children_offset=0, .match_offset=136249 }, { .children_offset=10010, .match_offset=0 }, { .children_offset=10012, .match_offset=0 }, { .children_offset=0, .match_offset=133556 }, { .children_offset=10014, .match_offset=0 }, { .children_offset=10016, .match_offset=0 }, { .children_offset=10018, .match_offset=37720 }, { .children_offset=10021, .match_offset=0 }, { .children_offset=0, .match_offset=103575 }, { .children_offset=10023, .match_offset=0 }, { .children_offset=10025, .match_offset=0 }, { .children_offset=10027, .match_offset=0 }, { .children_offset=10029, .match_offset=0 }, { .children_offset=10031, .match_offset=0 }, { .children_offset=10033, .match_offset=0 }, { .children_offset=10035, .match_offset=0 }, { .children_offset=0, .match_offset=67732 }, { .children_offset=10037, .match_offset=0 }, { .children_offset=10040, .match_offset=0 }, { .children_offset=10043, .match_offset=0 }, { .children_offset=10045, .match_offset=0 }, { .children_offset=10047, .match_offset=0 }, { .children_offset=10049, .match_offset=0 }, { .children_offset=0, .match_offset=61637 }, { .children_offset=10051, .match_offset=0 }, { .children_offset=10053, .match_offset=0 }, { .children_offset=10055, .match_offset=0 }, { .children_offset=10057, .match_offset=0 }, { .children_offset=0, .match_offset=125692 }, { .children_offset=10059, .match_offset=0 }, { .children_offset=0, .match_offset=44675 }, { .children_offset=10061, .match_offset=0 }, { .children_offset=10063, .match_offset=0 }, { .children_offset=10066, .match_offset=0 }, { .children_offset=10068, .match_offset=0 }, { .children_offset=10070, .match_offset=0 }, { .children_offset=10072, .match_offset=0 }, { .children_offset=10074, .match_offset=0 }, { .children_offset=0, .match_offset=13881 }, { .children_offset=10076, .match_offset=0 }, { .children_offset=10078, .match_offset=0 }, { .children_offset=10080, .match_offset=0 }, { .children_offset=10082, .match_offset=0 }, { .children_offset=0, .match_offset=22182 }, { .children_offset=10084, .match_offset=42919 }, { .children_offset=10087, .match_offset=0 }, { .children_offset=10090, .match_offset=0 }, { .children_offset=0, .match_offset=34956 }, { .children_offset=10092, .match_offset=0 }, { .children_offset=0, .match_offset=13252 }, { .children_offset=10095, .match_offset=0 }, { .children_offset=0, .match_offset=57163 }, { .children_offset=0, .match_offset=22685 }, { .children_offset=10097, .match_offset=108125 }, { .children_offset=0, .match_offset=8624 }, { .children_offset=10103, .match_offset=0 }, { .children_offset=10105, .match_offset=0 }, { .children_offset=10107, .match_offset=67797 }, { .children_offset=10109, .match_offset=0 }, { .children_offset=0, .match_offset=40611 }, { .children_offset=10111, .match_offset=0 }, { .children_offset=10113, .match_offset=0 }, { .children_offset=10115, .match_offset=48167 }, { .children_offset=10117, .match_offset=0 }, { .children_offset=10119, .match_offset=0 }, { .children_offset=0, .match_offset=133627 }, { .children_offset=10121, .match_offset=0 }, { .children_offset=10123, .match_offset=0 }, { .children_offset=0, .match_offset=88901 }, { .children_offset=10125, .match_offset=72505 }, { .children_offset=10129, .match_offset=0 }, { .children_offset=10131, .match_offset=0 }, { .children_offset=10133, .match_offset=0 }, { .children_offset=0, .match_offset=136045 }, { .children_offset=10135, .match_offset=0 }, { .children_offset=10137, .match_offset=0 }, { .children_offset=10139, .match_offset=0 }, { .children_offset=10141, .match_offset=0 }, { .children_offset=0, .match_offset=135525 }, { .children_offset=10143, .match_offset=0 }, { .children_offset=0, .match_offset=61766 }, { .children_offset=10145, .match_offset=0 }, { .children_offset=0, .match_offset=111194 }, { .children_offset=10151, .match_offset=0 }, { .children_offset=10154, .match_offset=0 }, { .children_offset=10156, .match_offset=49294 }, { .children_offset=0, .match_offset=6821 }, { .children_offset=10158, .match_offset=0 }, { .children_offset=10160, .match_offset=0 }, { .children_offset=0, .match_offset=113055 }, { .children_offset=10162, .match_offset=0 }, { .children_offset=10164, .match_offset=0 }, { .children_offset=10166, .match_offset=0 }, { .children_offset=0, .match_offset=11976 }, { .children_offset=10168, .match_offset=0 }, { .children_offset=10171, .match_offset=0 }, { .children_offset=10173, .match_offset=0 }, { .children_offset=10175, .match_offset=0 }, { .children_offset=10177, .match_offset=0 }, { .children_offset=10179, .match_offset=0 }, { .children_offset=10181, .match_offset=0 }, { .children_offset=0, .match_offset=43287 }, { .children_offset=10183, .match_offset=0 }, { .children_offset=0, .match_offset=132859 }, { .children_offset=10185, .match_offset=0 }, { .children_offset=10187, .match_offset=0 }, { .children_offset=10190, .match_offset=0 }, { .children_offset=0, .match_offset=20264 }, { .children_offset=10192, .match_offset=0 }, { .children_offset=10194, .match_offset=0 }, { .children_offset=10196, .match_offset=0 }, { .children_offset=10198, .match_offset=0 }, { .children_offset=10200, .match_offset=0 }, { .children_offset=0, .match_offset=5590 }, { .children_offset=0, .match_offset=57273 }, { .children_offset=10202, .match_offset=0 }, { .children_offset=10206, .match_offset=0 }, { .children_offset=0, .match_offset=125202 }, { .children_offset=10208, .match_offset=0 }, { .children_offset=10211, .match_offset=0 }, { .children_offset=10213, .match_offset=0 }, { .children_offset=0, .match_offset=63610 }, { .children_offset=10215, .match_offset=0 }, { .children_offset=10218, .match_offset=0 }, { .children_offset=10220, .match_offset=0 }, { .children_offset=10224, .match_offset=0 }, { .children_offset=10226, .match_offset=0 }, { .children_offset=10228, .match_offset=0 }, { .children_offset=0, .match_offset=21957 }, { .children_offset=10230, .match_offset=0 }, { .children_offset=10232, .match_offset=0 }, { .children_offset=10234, .match_offset=0 }, { .children_offset=10236, .match_offset=0 }, { .children_offset=10238, .match_offset=0 }, { .children_offset=10240, .match_offset=0 }, { .children_offset=10242, .match_offset=0 }, { .children_offset=10244, .match_offset=0 }, { .children_offset=10246, .match_offset=0 }, { .children_offset=10248, .match_offset=0 }, { .children_offset=10250, .match_offset=0 }, { .children_offset=10252, .match_offset=0 }, { .children_offset=10254, .match_offset=0 }, { .children_offset=10256, .match_offset=0 }, { .children_offset=10258, .match_offset=0 }, { .children_offset=10260, .match_offset=0 }, { .children_offset=10262, .match_offset=0 }, { .children_offset=10264, .match_offset=0 }, { .children_offset=10266, .match_offset=0 }, { .children_offset=10268, .match_offset=0 }, { .children_offset=10270, .match_offset=0 }, { .children_offset=10272, .match_offset=0 }, { .children_offset=10274, .match_offset=0 }, { .children_offset=0, .match_offset=35856 }, { .children_offset=10276, .match_offset=0 }, { .children_offset=10278, .match_offset=0 }, { .children_offset=10280, .match_offset=0 }, { .children_offset=0, .match_offset=58698 }, { .children_offset=10282, .match_offset=0 }, { .children_offset=10284, .match_offset=0 }, { .children_offset=0, .match_offset=102612 }, { .children_offset=10286, .match_offset=0 }, { .children_offset=10288, .match_offset=0 }, { .children_offset=0, .match_offset=24323 }, { .children_offset=10290, .match_offset=0 }, { .children_offset=10292, .match_offset=0 }, { .children_offset=10294, .match_offset=81044 }, { .children_offset=10296, .match_offset=0 }, { .children_offset=10298, .match_offset=0 }, { .children_offset=0, .match_offset=30730 }, { .children_offset=10300, .match_offset=53963 }, { .children_offset=10302, .match_offset=0 }, { .children_offset=10304, .match_offset=0 }, { .children_offset=0, .match_offset=103374 }, { .children_offset=0, .match_offset=46800 }, { .children_offset=10306, .match_offset=0 }, { .children_offset=10313, .match_offset=0 }, { .children_offset=0, .match_offset=42027 }, { .children_offset=10318, .match_offset=0 }, { .children_offset=10320, .match_offset=0 }, { .children_offset=10322, .match_offset=0 }, { .children_offset=0, .match_offset=41761 }, { .children_offset=10324, .match_offset=0 }, { .children_offset=0, .match_offset=74707 }, { .children_offset=10326, .match_offset=0 }, { .children_offset=10328, .match_offset=0 }, { .children_offset=0, .match_offset=129596 }, { .children_offset=10330, .match_offset=0 }, { .children_offset=10334, .match_offset=0 }, { .children_offset=0, .match_offset=103371 }, { .children_offset=10337, .match_offset=0 }, { .children_offset=10339, .match_offset=0 }, { .children_offset=10341, .match_offset=0 }, { .children_offset=0, .match_offset=46817 }, { .children_offset=10343, .match_offset=0 }, { .children_offset=10345, .match_offset=0 }, { .children_offset=0, .match_offset=89186 }, { .children_offset=10347, .match_offset=0 }, { .children_offset=10349, .match_offset=0 }, { .children_offset=10351, .match_offset=0 }, { .children_offset=10353, .match_offset=0 }, { .children_offset=10356, .match_offset=0 }, { .children_offset=0, .match_offset=134391 }, { .children_offset=10358, .match_offset=114141 }, { .children_offset=0, .match_offset=122742 }, { .children_offset=10360, .match_offset=0 }, { .children_offset=10362, .match_offset=0 }, { .children_offset=10364, .match_offset=0 }, { .children_offset=10366, .match_offset=0 }, { .children_offset=0, .match_offset=6510 }, { .children_offset=10368, .match_offset=0 }, { .children_offset=10374, .match_offset=0 }, { .children_offset=10377, .match_offset=0 }, { .children_offset=10379, .match_offset=0 }, { .children_offset=10381, .match_offset=0 }, { .children_offset=10383, .match_offset=0 }, { .children_offset=0, .match_offset=38549 }, { .children_offset=10385, .match_offset=0 }, { .children_offset=0, .match_offset=7060 }, { .children_offset=10387, .match_offset=0 }, { .children_offset=10390, .match_offset=0 }, { .children_offset=10392, .match_offset=0 }, { .children_offset=10394, .match_offset=0 }, { .children_offset=10396, .match_offset=0 }, { .children_offset=0, .match_offset=10220 }, { .children_offset=0, .match_offset=103153 }, { .children_offset=0, .match_offset=13350 }, { .children_offset=10398, .match_offset=0 }, { .children_offset=10400, .match_offset=30824 }, { .children_offset=10405, .match_offset=0 }, { .children_offset=10407, .match_offset=0 }, { .children_offset=10409, .match_offset=0 }, { .children_offset=10411, .match_offset=0 }, { .children_offset=0, .match_offset=55377 }, { .children_offset=10413, .match_offset=0 }, { .children_offset=10415, .match_offset=33284 }, { .children_offset=10417, .match_offset=0 }, { .children_offset=10419, .match_offset=0 }, { .children_offset=10421, .match_offset=0 }, { .children_offset=10423, .match_offset=0 }, { .children_offset=0, .match_offset=12780 }, { .children_offset=10425, .match_offset=0 }, { .children_offset=10427, .match_offset=0 }, { .children_offset=10429, .match_offset=0 }, { .children_offset=10431, .match_offset=0 }, { .children_offset=0, .match_offset=16873 }, { .children_offset=10433, .match_offset=0 }, { .children_offset=10435, .match_offset=0 }, { .children_offset=0, .match_offset=62972 }, { .children_offset=10437, .match_offset=0 }, { .children_offset=0, .match_offset=5259 }, { .children_offset=10439, .match_offset=0 }, { .children_offset=10442, .match_offset=0 }, { .children_offset=10444, .match_offset=0 }, { .children_offset=10447, .match_offset=0 }, { .children_offset=10449, .match_offset=0 }, { .children_offset=10451, .match_offset=90224 }, { .children_offset=10453, .match_offset=0 }, { .children_offset=0, .match_offset=80418 }, { .children_offset=0, .match_offset=89154 }, { .children_offset=0, .match_offset=111096 }, { .children_offset=0, .match_offset=122331 }, { .children_offset=10458, .match_offset=0 }, { .children_offset=10460, .match_offset=0 }, { .children_offset=10462, .match_offset=0 }, { .children_offset=0, .match_offset=116325 }, { .children_offset=10464, .match_offset=0 }, { .children_offset=10466, .match_offset=0 }, { .children_offset=10468, .match_offset=0 }, { .children_offset=10470, .match_offset=0 }, { .children_offset=0, .match_offset=71908 }, { .children_offset=10472, .match_offset=0 }, { .children_offset=10476, .match_offset=0 }, { .children_offset=10478, .match_offset=0 }, { .children_offset=0, .match_offset=14927 }, { .children_offset=10480, .match_offset=0 }, { .children_offset=10482, .match_offset=0 }, { .children_offset=10484, .match_offset=0 }, { .children_offset=10486, .match_offset=0 }, { .children_offset=10488, .match_offset=0 }, { .children_offset=10490, .match_offset=0 }, { .children_offset=10492, .match_offset=0 }, { .children_offset=10494, .match_offset=0 }, { .children_offset=10496, .match_offset=0 }, { .children_offset=0, .match_offset=63071 }, { .children_offset=10498, .match_offset=0 }, { .children_offset=10500, .match_offset=0 }, { .children_offset=10502, .match_offset=0 }, { .children_offset=0, .match_offset=58822 }, { .children_offset=10504, .match_offset=0 }, { .children_offset=10507, .match_offset=0 }, { .children_offset=0, .match_offset=1254 }, { .children_offset=10509, .match_offset=0 }, { .children_offset=10512, .match_offset=53483 }, { .children_offset=0, .match_offset=12128 }, { .children_offset=10514, .match_offset=7085 }, { .children_offset=0, .match_offset=37668 }, { .children_offset=10516, .match_offset=0 }, { .children_offset=10518, .match_offset=0 }, { .children_offset=10520, .match_offset=0 }, { .children_offset=0, .match_offset=33891 }, { .children_offset=10522, .match_offset=12343 }, { .children_offset=10539, .match_offset=0 }, { .children_offset=0, .match_offset=74026 }, { .children_offset=10542, .match_offset=0 }, { .children_offset=10544, .match_offset=0 }, { .children_offset=10546, .match_offset=0 }, { .children_offset=10548, .match_offset=0 }, { .children_offset=10550, .match_offset=0 }, { .children_offset=0, .match_offset=111087 }, { .children_offset=10552, .match_offset=0 }, { .children_offset=10554, .match_offset=7028 }, { .children_offset=0, .match_offset=22003 }, { .children_offset=10556, .match_offset=0 }, { .children_offset=10558, .match_offset=0 }, { .children_offset=10560, .match_offset=0 }, { .children_offset=10562, .match_offset=0 }, { .children_offset=10564, .match_offset=0 }, { .children_offset=0, .match_offset=90077 }, { .children_offset=10566, .match_offset=0 }, { .children_offset=10568, .match_offset=0 }, { .children_offset=10570, .match_offset=0 }, { .children_offset=10572, .match_offset=0 }, { .children_offset=0, .match_offset=32846 }, { .children_offset=0, .match_offset=68425 }, { .children_offset=10575, .match_offset=0 }, { .children_offset=10578, .match_offset=0 }, { .children_offset=0, .match_offset=126520 }, { .children_offset=10580, .match_offset=0 }, { .children_offset=0, .match_offset=57344 }, { .children_offset=10582, .match_offset=0 }, { .children_offset=10585, .match_offset=0 }, { .children_offset=10587, .match_offset=0 }, { .children_offset=10589, .match_offset=104442 }, { .children_offset=0, .match_offset=109509 }, { .children_offset=10591, .match_offset=0 }, { .children_offset=10593, .match_offset=0 }, { .children_offset=10595, .match_offset=0 }, { .children_offset=10597, .match_offset=0 }, { .children_offset=10599, .match_offset=0 }, { .children_offset=10601, .match_offset=0 }, { .children_offset=10603, .match_offset=0 }, { .children_offset=0, .match_offset=73461 }, { .children_offset=0, .match_offset=27438 }, { .children_offset=10605, .match_offset=0 }, { .children_offset=10607, .match_offset=0 }, { .children_offset=10609, .match_offset=0 }, { .children_offset=10611, .match_offset=0 }, { .children_offset=10613, .match_offset=0 }, { .children_offset=10615, .match_offset=0 }, { .children_offset=0, .match_offset=101034 }, { .children_offset=10617, .match_offset=1503 }, { .children_offset=0, .match_offset=32669 }, { .children_offset=0, .match_offset=135825 }, { .children_offset=10620, .match_offset=48231 }, { .children_offset=10627, .match_offset=0 }, { .children_offset=10629, .match_offset=0 }, { .children_offset=10631, .match_offset=0 }, { .children_offset=10633, .match_offset=0 }, { .children_offset=0, .match_offset=78868 }, { .children_offset=10635, .match_offset=0 }, { .children_offset=10638, .match_offset=0 }, { .children_offset=10641, .match_offset=0 }, { .children_offset=0, .match_offset=50571 }, { .children_offset=0, .match_offset=60510 }, { .children_offset=10643, .match_offset=0 }, { .children_offset=0, .match_offset=50097 }, { .children_offset=10645, .match_offset=0 }, { .children_offset=10647, .match_offset=0 }, { .children_offset=0, .match_offset=77912 }, { .children_offset=10649, .match_offset=0 }, { .children_offset=10651, .match_offset=0 }, { .children_offset=0, .match_offset=134400 }, { .children_offset=10653, .match_offset=0 }, { .children_offset=0, .match_offset=103551 }, { .children_offset=10655, .match_offset=0 }, { .children_offset=10657, .match_offset=0 }, { .children_offset=0, .match_offset=6323 }, { .children_offset=10659, .match_offset=28052 }, { .children_offset=10666, .match_offset=0 }, { .children_offset=10668, .match_offset=0 }, { .children_offset=10670, .match_offset=29262 }, { .children_offset=0, .match_offset=112855 }, { .children_offset=10672, .match_offset=114489 }, { .children_offset=10675, .match_offset=0 }, { .children_offset=10678, .match_offset=0 }, { .children_offset=10680, .match_offset=0 }, { .children_offset=0, .match_offset=116083 }, { .children_offset=10682, .match_offset=0 }, { .children_offset=0, .match_offset=54400 }, { .children_offset=10684, .match_offset=121873 }, { .children_offset=10688, .match_offset=0 }, { .children_offset=10690, .match_offset=0 }, { .children_offset=10693, .match_offset=0 }, { .children_offset=10695, .match_offset=0 }, { .children_offset=10697, .match_offset=0 }, { .children_offset=0, .match_offset=126520 }, { .children_offset=10699, .match_offset=0 }, { .children_offset=10701, .match_offset=0 }, { .children_offset=10703, .match_offset=0 }, { .children_offset=0, .match_offset=57344 }, { .children_offset=10705, .match_offset=0 }, { .children_offset=10707, .match_offset=0 }, { .children_offset=0, .match_offset=131018 }, { .children_offset=10709, .match_offset=0 }, { .children_offset=10711, .match_offset=0 }, { .children_offset=10713, .match_offset=0 }, { .children_offset=10715, .match_offset=0 }, { .children_offset=0, .match_offset=86783 }, { .children_offset=10717, .match_offset=0 }, { .children_offset=10720, .match_offset=0 }, { .children_offset=10722, .match_offset=116017 }, { .children_offset=10725, .match_offset=0 }, { .children_offset=0, .match_offset=29945 }, { .children_offset=0, .match_offset=34396 }, { .children_offset=0, .match_offset=111078 }, { .children_offset=10727, .match_offset=0 }, { .children_offset=10729, .match_offset=0 }, { .children_offset=10731, .match_offset=0 }, { .children_offset=0, .match_offset=118267 }, { .children_offset=10733, .match_offset=0 }, { .children_offset=10736, .match_offset=116239 }, { .children_offset=10739, .match_offset=0 }, { .children_offset=10741, .match_offset=0 }, { .children_offset=10743, .match_offset=0 }, { .children_offset=10745, .match_offset=0 }, { .children_offset=10747, .match_offset=0 }, { .children_offset=10750, .match_offset=0 }, { .children_offset=10752, .match_offset=0 }, { .children_offset=10754, .match_offset=0 }, { .children_offset=0, .match_offset=104442 }, { .children_offset=10756, .match_offset=0 }, { .children_offset=10758, .match_offset=0 }, { .children_offset=10760, .match_offset=0 }, { .children_offset=10762, .match_offset=0 }, { .children_offset=0, .match_offset=29262 }, { .children_offset=0, .match_offset=46701 }, { .children_offset=10764, .match_offset=0 }, { .children_offset=10766, .match_offset=0 }, { .children_offset=0, .match_offset=130881 }, { .children_offset=0, .match_offset=31151 }, { .children_offset=10768, .match_offset=0 }, { .children_offset=0, .match_offset=58348 }, { .children_offset=10771, .match_offset=0 }, { .children_offset=10774, .match_offset=0 }, { .children_offset=10776, .match_offset=0 }, { .children_offset=0, .match_offset=119564 }, { .children_offset=10778, .match_offset=0 }, { .children_offset=10780, .match_offset=0 }, { .children_offset=10783, .match_offset=0 }, { .children_offset=0, .match_offset=69090 }, { .children_offset=0, .match_offset=28099 }, { .children_offset=0, .match_offset=87136 }, { .children_offset=10785, .match_offset=0 }, { .children_offset=10787, .match_offset=0 }, { .children_offset=0, .match_offset=131018 }, { .children_offset=10789, .match_offset=0 }, { .children_offset=10791, .match_offset=0 }, { .children_offset=0, .match_offset=86783 }, { .children_offset=0, .match_offset=6347 }, { .children_offset=10793, .match_offset=0 }, { .children_offset=10799, .match_offset=64753 }, { .children_offset=0, .match_offset=129453 }, { .children_offset=10801, .match_offset=0 }, { .children_offset=10803, .match_offset=0 }, { .children_offset=10805, .match_offset=0 }, { .children_offset=10807, .match_offset=0 }, { .children_offset=10809, .match_offset=0 }, { .children_offset=0, .match_offset=23784 }, { .children_offset=10811, .match_offset=102372 }, { .children_offset=10813, .match_offset=0 }, { .children_offset=10815, .match_offset=0 }, { .children_offset=10817, .match_offset=0 }, { .children_offset=0, .match_offset=24279 }, { .children_offset=10819, .match_offset=49697 }, { .children_offset=0, .match_offset=123807 }, { .children_offset=10822, .match_offset=0 }, { .children_offset=0, .match_offset=33371 }, { .children_offset=10824, .match_offset=64418 }, { .children_offset=0, .match_offset=113381 }, { .children_offset=10826, .match_offset=125277 }, { .children_offset=10834, .match_offset=16357 }, { .children_offset=0, .match_offset=5604 }, { .children_offset=0, .match_offset=56632 }, { .children_offset=10837, .match_offset=0 }, { .children_offset=10839, .match_offset=0 }, { .children_offset=10841, .match_offset=0 }, { .children_offset=10843, .match_offset=0 }, { .children_offset=0, .match_offset=58541 }, { .children_offset=10845, .match_offset=0 }, { .children_offset=10848, .match_offset=0 }, { .children_offset=10850, .match_offset=0 }, { .children_offset=0, .match_offset=130099 }, { .children_offset=10852, .match_offset=0 }, { .children_offset=10854, .match_offset=0 }, { .children_offset=10856, .match_offset=0 }, { .children_offset=10858, .match_offset=0 }, { .children_offset=10860, .match_offset=0 }, { .children_offset=10862, .match_offset=0 }, { .children_offset=10864, .match_offset=0 }, { .children_offset=10866, .match_offset=0 }, { .children_offset=0, .match_offset=130099 }, { .children_offset=10868, .match_offset=104006 }, { .children_offset=10871, .match_offset=0 }, { .children_offset=10873, .match_offset=0 }, { .children_offset=10875, .match_offset=0 }, { .children_offset=0, .match_offset=45963 }, { .children_offset=10877, .match_offset=0 }, { .children_offset=10879, .match_offset=0 }, { .children_offset=10881, .match_offset=0 }, { .children_offset=0, .match_offset=66456 }, { .children_offset=10883, .match_offset=14394 }, { .children_offset=10887, .match_offset=0 }, { .children_offset=10889, .match_offset=0 }, { .children_offset=10891, .match_offset=0 }, { .children_offset=10893, .match_offset=0 }, { .children_offset=0, .match_offset=115776 }, { .children_offset=10895, .match_offset=0 }, { .children_offset=10897, .match_offset=0 }, { .children_offset=10899, .match_offset=0 }, { .children_offset=10901, .match_offset=0 }, { .children_offset=0, .match_offset=118658 }, { .children_offset=0, .match_offset=63459 }, { .children_offset=0, .match_offset=35143 }, { .children_offset=0, .match_offset=58952 }, { .children_offset=10903, .match_offset=0 }, { .children_offset=0, .match_offset=89341 }, { .children_offset=10929, .match_offset=0 }, { .children_offset=10937, .match_offset=0 }, { .children_offset=0, .match_offset=136000 }, { .children_offset=0, .match_offset=78981 }, { .children_offset=0, .match_offset=5545 }, { .children_offset=0, .match_offset=103431 }, { .children_offset=0, .match_offset=61700 }, { .children_offset=0, .match_offset=30946 }, { .children_offset=0, .match_offset=114023 }, { .children_offset=10947, .match_offset=20586 }, { .children_offset=0, .match_offset=37490 }, { .children_offset=0, .match_offset=69096 }, { .children_offset=10949, .match_offset=0 }, { .children_offset=0, .match_offset=136011 }, { .children_offset=0, .match_offset=131873 }, { .children_offset=0, .match_offset=115599 }, { .children_offset=0, .match_offset=102362 }, { .children_offset=0, .match_offset=40656 }, { .children_offset=0, .match_offset=33810 }, { .children_offset=0, .match_offset=115780 }, { .children_offset=0, .match_offset=65094 }, { .children_offset=0, .match_offset=8762 }, { .children_offset=0, .match_offset=67745 }, { .children_offset=10960, .match_offset=0 }, { .children_offset=0, .match_offset=56975 }, { .children_offset=0, .match_offset=114477 }, { .children_offset=0, .match_offset=55154 }, { .children_offset=0, .match_offset=9031 }, { .children_offset=0, .match_offset=81995 }, { .children_offset=0, .match_offset=15311 }, { .children_offset=0, .match_offset=72087 }, { .children_offset=10971, .match_offset=27663 }, { .children_offset=0, .match_offset=2109 }, { .children_offset=0, .match_offset=77171 }, { .children_offset=0, .match_offset=64298 }, { .children_offset=10973, .match_offset=0 }, { .children_offset=0, .match_offset=61931 }, { .children_offset=10984, .match_offset=77829 }, { .children_offset=0, .match_offset=50221 }, { .children_offset=0, .match_offset=125017 }, { .children_offset=0, .match_offset=73264 }, { .children_offset=10986, .match_offset=72777 }, { .children_offset=0, .match_offset=109845 }, { .children_offset=0, .match_offset=64140 }, { .children_offset=0, .match_offset=22328 }, { .children_offset=0, .match_offset=104175 }, { .children_offset=0, .match_offset=116286 }, { .children_offset=0, .match_offset=78539 }, { .children_offset=10988, .match_offset=0 }, { .children_offset=0, .match_offset=89991 }, { .children_offset=0, .match_offset=67859 }, { .children_offset=0, .match_offset=42606 }, { .children_offset=0, .match_offset=15323 }, { .children_offset=0, .match_offset=35729 }, { .children_offset=0, .match_offset=35348 }, { .children_offset=10999, .match_offset=467 }, { .children_offset=0, .match_offset=134485 }, { .children_offset=0, .match_offset=85232 }, { .children_offset=11001, .match_offset=8810 }, { .children_offset=0, .match_offset=12736 }, { .children_offset=0, .match_offset=5737 }, { .children_offset=11003, .match_offset=0 }, { .children_offset=11014, .match_offset=28714 }, { .children_offset=0, .match_offset=58869 }, { .children_offset=0, .match_offset=70758 }, { .children_offset=0, .match_offset=132596 }, { .children_offset=0, .match_offset=61924 }, { .children_offset=0, .match_offset=6316 }, { .children_offset=0, .match_offset=54219 }, { .children_offset=0, .match_offset=131006 }, { .children_offset=0, .match_offset=109483 }, { .children_offset=0, .match_offset=109724 }, { .children_offset=0, .match_offset=40340 }, { .children_offset=11024, .match_offset=109550 }, { .children_offset=0, .match_offset=15457 }, { .children_offset=0, .match_offset=125173 }, { .children_offset=11026, .match_offset=85823 }, { .children_offset=0, .match_offset=73605 }, { .children_offset=0, .match_offset=81122 }, { .children_offset=0, .match_offset=55960 }, { .children_offset=0, .match_offset=7108 }, { .children_offset=0, .match_offset=43449 }, { .children_offset=0, .match_offset=73161 }, { .children_offset=11028, .match_offset=0 }, { .children_offset=0, .match_offset=20301 }, { .children_offset=0, .match_offset=49739 }, { .children_offset=0, .match_offset=81164 }, { .children_offset=0, .match_offset=77914 }, { .children_offset=0, .match_offset=85957 }, { .children_offset=0, .match_offset=25993 }, { .children_offset=0, .match_offset=15721 }, { .children_offset=11037, .match_offset=12521 }, { .children_offset=0, .match_offset=22196 }, { .children_offset=0, .match_offset=133574 }, { .children_offset=0, .match_offset=35131 }, { .children_offset=0, .match_offset=12489 }, { .children_offset=0, .match_offset=61525 }, { .children_offset=0, .match_offset=22210 }, { .children_offset=0, .match_offset=27681 }, { .children_offset=0, .match_offset=125825 }, { .children_offset=0, .match_offset=132779 }, { .children_offset=11046, .match_offset=16463 }, { .children_offset=11064, .match_offset=73261 }, { .children_offset=11068, .match_offset=0 }, { .children_offset=11070, .match_offset=0 }, { .children_offset=0, .match_offset=31129 }, { .children_offset=11072, .match_offset=0 }, { .children_offset=0, .match_offset=42635 }, { .children_offset=11074, .match_offset=0 }, { .children_offset=0, .match_offset=34438 }, { .children_offset=0, .match_offset=74320 }, { .children_offset=11076, .match_offset=0 }, { .children_offset=0, .match_offset=32986 }, { .children_offset=11079, .match_offset=0 }, { .children_offset=0, .match_offset=20443 }, { .children_offset=11081, .match_offset=21102 }, { .children_offset=0, .match_offset=66515 }, { .children_offset=11088, .match_offset=0 }, { .children_offset=11091, .match_offset=0 }, { .children_offset=11093, .match_offset=0 }, { .children_offset=0, .match_offset=116338 }, { .children_offset=0, .match_offset=32986 }, { .children_offset=11095, .match_offset=0 }, { .children_offset=11097, .match_offset=0 }, { .children_offset=11099, .match_offset=0 }, { .children_offset=11101, .match_offset=0 }, { .children_offset=11103, .match_offset=0 }, { .children_offset=11105, .match_offset=0 }, { .children_offset=0, .match_offset=130879 }, { .children_offset=11107, .match_offset=0 }, { .children_offset=11109, .match_offset=0 }, { .children_offset=0, .match_offset=2233 }, { .children_offset=11111, .match_offset=0 }, { .children_offset=11113, .match_offset=0 }, { .children_offset=0, .match_offset=22009 }, { .children_offset=0, .match_offset=109235 }, { .children_offset=11115, .match_offset=26784 }, { .children_offset=11118, .match_offset=0 }, { .children_offset=0, .match_offset=27812 }, { .children_offset=11120, .match_offset=0 }, { .children_offset=11122, .match_offset=0 }, { .children_offset=11124, .match_offset=0 }, { .children_offset=11126, .match_offset=0 }, { .children_offset=11128, .match_offset=0 }, { .children_offset=11130, .match_offset=42128 }, { .children_offset=11132, .match_offset=0 }, { .children_offset=0, .match_offset=14337 }, { .children_offset=11134, .match_offset=121871 }, { .children_offset=11137, .match_offset=0 }, { .children_offset=0, .match_offset=6128 }, { .children_offset=0, .match_offset=32674 }, { .children_offset=11139, .match_offset=12272 }, { .children_offset=11143, .match_offset=0 }, { .children_offset=11145, .match_offset=65083 }, { .children_offset=0, .match_offset=34918 }, { .children_offset=11147, .match_offset=0 }, { .children_offset=0, .match_offset=48140 }, { .children_offset=11149, .match_offset=0 }, { .children_offset=11151, .match_offset=88627 }, { .children_offset=11153, .match_offset=35146 }, { .children_offset=11155, .match_offset=0 }, { .children_offset=11157, .match_offset=0 }, { .children_offset=11159, .match_offset=0 }, { .children_offset=11161, .match_offset=0 }, { .children_offset=0, .match_offset=8959 }, { .children_offset=11163, .match_offset=65068 }, { .children_offset=11167, .match_offset=0 }, { .children_offset=11169, .match_offset=0 }, { .children_offset=0, .match_offset=64878 }, { .children_offset=11171, .match_offset=0 }, { .children_offset=11173, .match_offset=40713 }, { .children_offset=11175, .match_offset=0 }, { .children_offset=11177, .match_offset=0 }, { .children_offset=0, .match_offset=42287 }, { .children_offset=0, .match_offset=42916 }, { .children_offset=11179, .match_offset=0 }, { .children_offset=11184, .match_offset=0 }, { .children_offset=11187, .match_offset=0 }, { .children_offset=0, .match_offset=73868 }, { .children_offset=11189, .match_offset=0 }, { .children_offset=11191, .match_offset=0 }, { .children_offset=0, .match_offset=16110 }, { .children_offset=11193, .match_offset=0 }, { .children_offset=0, .match_offset=43700 }, { .children_offset=11195, .match_offset=43996 }, { .children_offset=0, .match_offset=68946 }, { .children_offset=11197, .match_offset=0 }, { .children_offset=11199, .match_offset=0 }, { .children_offset=11202, .match_offset=0 }, { .children_offset=0, .match_offset=134447 }, { .children_offset=11204, .match_offset=0 }, { .children_offset=11206, .match_offset=0 }, { .children_offset=11208, .match_offset=0 }, { .children_offset=11210, .match_offset=0 }, { .children_offset=0, .match_offset=13000 }, { .children_offset=11212, .match_offset=6410 }, { .children_offset=11214, .match_offset=0 }, { .children_offset=11218, .match_offset=0 }, { .children_offset=11221, .match_offset=0 }, { .children_offset=0, .match_offset=113338 }, { .children_offset=11223, .match_offset=0 }, { .children_offset=11225, .match_offset=0 }, { .children_offset=0, .match_offset=78682 }, { .children_offset=11227, .match_offset=0 }, { .children_offset=11229, .match_offset=0 }, { .children_offset=11231, .match_offset=0 }, { .children_offset=0, .match_offset=60937 }, { .children_offset=11233, .match_offset=0 }, { .children_offset=11236, .match_offset=0 }, { .children_offset=0, .match_offset=113078 }, { .children_offset=11238, .match_offset=0 }, { .children_offset=11240, .match_offset=0 }, { .children_offset=0, .match_offset=113292 }, { .children_offset=11242, .match_offset=89169 }, { .children_offset=11248, .match_offset=0 }, { .children_offset=0, .match_offset=20425 }, { .children_offset=0, .match_offset=58503 }, { .children_offset=11251, .match_offset=0 }, { .children_offset=0, .match_offset=25987 }, { .children_offset=11253, .match_offset=43909 }, { .children_offset=11255, .match_offset=0 }, { .children_offset=11257, .match_offset=0 }, { .children_offset=11259, .match_offset=0 }, { .children_offset=11261, .match_offset=0 }, { .children_offset=0, .match_offset=10879 }, { .children_offset=0, .match_offset=65115 }, { .children_offset=0, .match_offset=132491 }, { .children_offset=11263, .match_offset=0 }, { .children_offset=11267, .match_offset=0 }, { .children_offset=11269, .match_offset=0 }, { .children_offset=0, .match_offset=87779 }, { .children_offset=11271, .match_offset=26219 }, { .children_offset=11274, .match_offset=0 }, { .children_offset=0, .match_offset=67775 }, { .children_offset=0, .match_offset=29869 }, { .children_offset=11276, .match_offset=0 }, { .children_offset=0, .match_offset=85959 }, { .children_offset=11278, .match_offset=72111 }, { .children_offset=0, .match_offset=130957 }, { .children_offset=0, .match_offset=78585 }, { .children_offset=11281, .match_offset=0 }, { .children_offset=11283, .match_offset=0 }, { .children_offset=0, .match_offset=102877 }, { .children_offset=11286, .match_offset=0 }, { .children_offset=11288, .match_offset=0 }, { .children_offset=11290, .match_offset=0 }, { .children_offset=0, .match_offset=25971 }, { .children_offset=11292, .match_offset=0 }, { .children_offset=0, .match_offset=26796 }, { .children_offset=0, .match_offset=12675 }, { .children_offset=11294, .match_offset=104130 }, { .children_offset=11297, .match_offset=0 }, { .children_offset=11299, .match_offset=0 }, { .children_offset=11301, .match_offset=0 }, { .children_offset=11303, .match_offset=0 }, { .children_offset=11305, .match_offset=0 }, { .children_offset=0, .match_offset=89128 }, { .children_offset=11307, .match_offset=0 }, { .children_offset=11309, .match_offset=0 }, { .children_offset=11311, .match_offset=0 }, { .children_offset=0, .match_offset=70919 }, { .children_offset=11313, .match_offset=116295 }, { .children_offset=11316, .match_offset=0 }, { .children_offset=11318, .match_offset=0 }, { .children_offset=11320, .match_offset=0 }, { .children_offset=11322, .match_offset=0 }, { .children_offset=0, .match_offset=45044 }, { .children_offset=11324, .match_offset=0 }, { .children_offset=11326, .match_offset=0 }, { .children_offset=0, .match_offset=63618 }, { .children_offset=11328, .match_offset=0 }, { .children_offset=11332, .match_offset=0 }, { .children_offset=11334, .match_offset=0 }, { .children_offset=11336, .match_offset=0 }, { .children_offset=0, .match_offset=37401 }, { .children_offset=11338, .match_offset=0 }, { .children_offset=0, .match_offset=113743 }, { .children_offset=0, .match_offset=5557 }, { .children_offset=11340, .match_offset=29252 }, { .children_offset=11349, .match_offset=40662 }, { .children_offset=0, .match_offset=43942 }, { .children_offset=11359, .match_offset=0 }, { .children_offset=11361, .match_offset=0 }, { .children_offset=11363, .match_offset=0 }, { .children_offset=0, .match_offset=133195 }, { .children_offset=11365, .match_offset=0 }, { .children_offset=11367, .match_offset=0 }, { .children_offset=0, .match_offset=110957 }, { .children_offset=0, .match_offset=45946 }, { .children_offset=0, .match_offset=64254 }, { .children_offset=11369, .match_offset=0 }, { .children_offset=0, .match_offset=44684 }, { .children_offset=0, .match_offset=127611 }, { .children_offset=0, .match_offset=72863 }, { .children_offset=11371, .match_offset=0 }, { .children_offset=11373, .match_offset=0 }, { .children_offset=11375, .match_offset=0 }, { .children_offset=11377, .match_offset=0 }, { .children_offset=0, .match_offset=5516 }, { .children_offset=11379, .match_offset=0 }, { .children_offset=0, .match_offset=48160 }, { .children_offset=11382, .match_offset=0 }, { .children_offset=0, .match_offset=133080 }, { .children_offset=11384, .match_offset=110361 }, { .children_offset=0, .match_offset=133489 }, { .children_offset=0, .match_offset=134918 }, { .children_offset=0, .match_offset=39213 }, { .children_offset=11388, .match_offset=0 }, { .children_offset=11394, .match_offset=43633 }, { .children_offset=0, .match_offset=71576 }, { .children_offset=11396, .match_offset=104099 }, { .children_offset=0, .match_offset=15687 }, { .children_offset=0, .match_offset=89132 }, { .children_offset=0, .match_offset=72136 }, { .children_offset=0, .match_offset=102731 }, { .children_offset=11398, .match_offset=35779 }, { .children_offset=11403, .match_offset=89814 }, { .children_offset=0, .match_offset=35454 }, { .children_offset=0, .match_offset=49763 }, { .children_offset=0, .match_offset=33893 }, { .children_offset=0, .match_offset=58516 }, { .children_offset=0, .match_offset=64174 }, { .children_offset=11406, .match_offset=22648 }, { .children_offset=0, .match_offset=124817 }, { .children_offset=0, .match_offset=37589 }, { .children_offset=11411, .match_offset=31143 }, { .children_offset=11414, .match_offset=0 }, { .children_offset=11416, .match_offset=0 }, { .children_offset=11418, .match_offset=0 }, { .children_offset=0, .match_offset=124804 }, { .children_offset=11420, .match_offset=0 }, { .children_offset=11422, .match_offset=0 }, { .children_offset=0, .match_offset=22208 }, { .children_offset=0, .match_offset=105807 }, { .children_offset=11424, .match_offset=46739 }, { .children_offset=11430, .match_offset=68860 }, { .children_offset=0, .match_offset=103598 }, { .children_offset=0, .match_offset=40634 }, { .children_offset=0, .match_offset=81849 }, { .children_offset=11433, .match_offset=78486 }, { .children_offset=0, .match_offset=52737 }, { .children_offset=0, .match_offset=5617 }, { .children_offset=0, .match_offset=66244 }, { .children_offset=11435, .match_offset=0 }, { .children_offset=0, .match_offset=71279 }, { .children_offset=11437, .match_offset=21932 }, { .children_offset=11458, .match_offset=0 }, { .children_offset=0, .match_offset=64193 }, { .children_offset=0, .match_offset=52190 }, { .children_offset=11462, .match_offset=0 }, { .children_offset=0, .match_offset=28734 }, { .children_offset=11464, .match_offset=0 }, { .children_offset=11466, .match_offset=0 }, { .children_offset=0, .match_offset=103387 }, { .children_offset=11468, .match_offset=0 }, { .children_offset=11474, .match_offset=0 }, { .children_offset=11476, .match_offset=0 }, { .children_offset=11478, .match_offset=0 }, { .children_offset=0, .match_offset=68453 }, { .children_offset=11480, .match_offset=0 }, { .children_offset=11482, .match_offset=0 }, { .children_offset=11484, .match_offset=0 }, { .children_offset=11486, .match_offset=0 }, { .children_offset=0, .match_offset=135766 }, { .children_offset=11488, .match_offset=0 }, { .children_offset=11492, .match_offset=0 }, { .children_offset=11494, .match_offset=0 }, { .children_offset=11496, .match_offset=0 }, { .children_offset=11498, .match_offset=0 }, { .children_offset=0, .match_offset=38422 }, { .children_offset=11500, .match_offset=0 }, { .children_offset=11502, .match_offset=0 }, { .children_offset=0, .match_offset=90612 }, { .children_offset=11504, .match_offset=0 }, { .children_offset=11506, .match_offset=0 }, { .children_offset=11508, .match_offset=0 }, { .children_offset=11510, .match_offset=0 }, { .children_offset=11512, .match_offset=0 }, { .children_offset=11514, .match_offset=0 }, { .children_offset=11516, .match_offset=0 }, { .children_offset=0, .match_offset=63376 }, { .children_offset=11518, .match_offset=0 }, { .children_offset=11520, .match_offset=0 }, { .children_offset=11522, .match_offset=0 }, { .children_offset=11524, .match_offset=0 }, { .children_offset=11526, .match_offset=0 }, { .children_offset=11529, .match_offset=0 }, { .children_offset=0, .match_offset=30534 }, { .children_offset=11531, .match_offset=0 }, { .children_offset=0, .match_offset=64398 }, { .children_offset=11533, .match_offset=0 }, { .children_offset=11535, .match_offset=0 }, { .children_offset=11538, .match_offset=0 }, { .children_offset=11540, .match_offset=0 }, { .children_offset=0, .match_offset=125019 }, { .children_offset=11542, .match_offset=0 }, { .children_offset=11544, .match_offset=0 }, { .children_offset=11546, .match_offset=0 }, { .children_offset=11548, .match_offset=0 }, { .children_offset=11550, .match_offset=0 }, { .children_offset=0, .match_offset=65467 }, { .children_offset=11552, .match_offset=12430 }, { .children_offset=0, .match_offset=32961 }, { .children_offset=11556, .match_offset=0 }, { .children_offset=11558, .match_offset=0 }, { .children_offset=0, .match_offset=117582 }, { .children_offset=0, .match_offset=90220 }, { .children_offset=11560, .match_offset=0 }, { .children_offset=11563, .match_offset=0 }, { .children_offset=11565, .match_offset=0 }, { .children_offset=11567, .match_offset=0 }, { .children_offset=11569, .match_offset=0 }, { .children_offset=11571, .match_offset=0 }, { .children_offset=11573, .match_offset=0 }, { .children_offset=11575, .match_offset=0 }, { .children_offset=11577, .match_offset=0 }, { .children_offset=11579, .match_offset=0 }, { .children_offset=0, .match_offset=68798 }, { .children_offset=11581, .match_offset=0 }, { .children_offset=11583, .match_offset=0 }, { .children_offset=11585, .match_offset=0 }, { .children_offset=11587, .match_offset=0 }, { .children_offset=11589, .match_offset=0 }, { .children_offset=11591, .match_offset=0 }, { .children_offset=0, .match_offset=67402 }, { .children_offset=11593, .match_offset=80185 }, { .children_offset=11595, .match_offset=0 }, { .children_offset=11597, .match_offset=0 }, { .children_offset=11599, .match_offset=12365 }, { .children_offset=0, .match_offset=59381 }, { .children_offset=11601, .match_offset=0 }, { .children_offset=0, .match_offset=59457 }, { .children_offset=0, .match_offset=11996 }, { .children_offset=11603, .match_offset=103470 }, { .children_offset=0, .match_offset=84928 }, { .children_offset=11605, .match_offset=33504 }, { .children_offset=11610, .match_offset=0 }, { .children_offset=11612, .match_offset=0 }, { .children_offset=0, .match_offset=8890 }, { .children_offset=11615, .match_offset=0 }, { .children_offset=11617, .match_offset=0 }, { .children_offset=0, .match_offset=30880 }, { .children_offset=11619, .match_offset=0 }, { .children_offset=11623, .match_offset=0 }, { .children_offset=11625, .match_offset=0 }, { .children_offset=11627, .match_offset=0 }, { .children_offset=11629, .match_offset=0 }, { .children_offset=0, .match_offset=84832 }, { .children_offset=11631, .match_offset=0 }, { .children_offset=11633, .match_offset=0 }, { .children_offset=11635, .match_offset=0 }, { .children_offset=11637, .match_offset=0 }, { .children_offset=0, .match_offset=7735 }, { .children_offset=11639, .match_offset=0 }, { .children_offset=11641, .match_offset=0 }, { .children_offset=11643, .match_offset=0 }, { .children_offset=11646, .match_offset=0 }, { .children_offset=11648, .match_offset=0 }, { .children_offset=11650, .match_offset=0 }, { .children_offset=0, .match_offset=1907 }, { .children_offset=0, .match_offset=108757 }, { .children_offset=11652, .match_offset=0 }, { .children_offset=11654, .match_offset=0 }, { .children_offset=11656, .match_offset=0 }, { .children_offset=0, .match_offset=11961 }, { .children_offset=11658, .match_offset=111092 }, { .children_offset=0, .match_offset=123518 }, { .children_offset=11660, .match_offset=0 }, { .children_offset=11662, .match_offset=0 }, { .children_offset=11664, .match_offset=0 }, { .children_offset=11666, .match_offset=0 }, { .children_offset=0, .match_offset=70915 }, { .children_offset=11668, .match_offset=0 }, { .children_offset=11675, .match_offset=0 }, { .children_offset=11677, .match_offset=0 }, { .children_offset=11679, .match_offset=0 }, { .children_offset=11681, .match_offset=0 }, { .children_offset=0, .match_offset=21874 }, { .children_offset=0, .match_offset=59371 }, { .children_offset=0, .match_offset=35746 }, { .children_offset=11683, .match_offset=0 }, { .children_offset=11685, .match_offset=0 }, { .children_offset=0, .match_offset=6794 }, { .children_offset=11687, .match_offset=0 }, { .children_offset=11689, .match_offset=0 }, { .children_offset=11691, .match_offset=0 }, { .children_offset=11693, .match_offset=0 }, { .children_offset=11695, .match_offset=0 }, { .children_offset=11697, .match_offset=0 }, { .children_offset=11699, .match_offset=0 }, { .children_offset=0, .match_offset=129309 }, { .children_offset=11701, .match_offset=0 }, { .children_offset=11704, .match_offset=0 }, { .children_offset=0, .match_offset=52630 }, { .children_offset=11706, .match_offset=0 }, { .children_offset=11708, .match_offset=0 }, { .children_offset=11710, .match_offset=0 }, { .children_offset=11712, .match_offset=0 }, { .children_offset=0, .match_offset=42085 }, { .children_offset=11714, .match_offset=86767 }, { .children_offset=11717, .match_offset=0 }, { .children_offset=11719, .match_offset=0 }, { .children_offset=11721, .match_offset=0 }, { .children_offset=11725, .match_offset=0 }, { .children_offset=11727, .match_offset=0 }, { .children_offset=0, .match_offset=62384 }, { .children_offset=11729, .match_offset=0 }, { .children_offset=11731, .match_offset=0 }, { .children_offset=11733, .match_offset=0 }, { .children_offset=0, .match_offset=5553 }, { .children_offset=11735, .match_offset=0 }, { .children_offset=11737, .match_offset=0 }, { .children_offset=0, .match_offset=123211 }, { .children_offset=11739, .match_offset=0 }, { .children_offset=0, .match_offset=112688 }, { .children_offset=11741, .match_offset=0 }, { .children_offset=11743, .match_offset=0 }, { .children_offset=11746, .match_offset=0 }, { .children_offset=11748, .match_offset=0 }, { .children_offset=11750, .match_offset=0 }, { .children_offset=0, .match_offset=109353 }, { .children_offset=11752, .match_offset=38911 }, { .children_offset=11754, .match_offset=0 }, { .children_offset=11756, .match_offset=0 }, { .children_offset=11758, .match_offset=0 }, { .children_offset=11760, .match_offset=0 }, { .children_offset=11762, .match_offset=0 }, { .children_offset=0, .match_offset=119213 }, { .children_offset=11764, .match_offset=0 }, { .children_offset=11769, .match_offset=0 }, { .children_offset=11772, .match_offset=0 }, { .children_offset=11774, .match_offset=0 }, { .children_offset=11776, .match_offset=0 }, { .children_offset=11779, .match_offset=0 }, { .children_offset=0, .match_offset=12550 }, { .children_offset=11781, .match_offset=0 }, { .children_offset=11783, .match_offset=0 }, { .children_offset=0, .match_offset=132217 }, { .children_offset=11785, .match_offset=0 }, { .children_offset=11787, .match_offset=0 }, { .children_offset=11789, .match_offset=0 }, { .children_offset=11791, .match_offset=0 }, { .children_offset=11793, .match_offset=0 }, { .children_offset=11795, .match_offset=0 }, { .children_offset=0, .match_offset=43436 }, { .children_offset=11797, .match_offset=0 }, { .children_offset=11799, .match_offset=0 }, { .children_offset=11802, .match_offset=0 }, { .children_offset=0, .match_offset=113536 }, { .children_offset=0, .match_offset=37715 }, { .children_offset=11804, .match_offset=114814 }, { .children_offset=11806, .match_offset=0 }, { .children_offset=0, .match_offset=30341 }, { .children_offset=11808, .match_offset=74233 }, { .children_offset=11810, .match_offset=0 }, { .children_offset=11812, .match_offset=0 }, { .children_offset=0, .match_offset=125728 }, { .children_offset=11814, .match_offset=0 }, { .children_offset=11816, .match_offset=0 }, { .children_offset=0, .match_offset=108555 }, { .children_offset=11818, .match_offset=0 }, { .children_offset=11822, .match_offset=0 }, { .children_offset=11824, .match_offset=0 }, { .children_offset=11826, .match_offset=0 }, { .children_offset=11828, .match_offset=0 }, { .children_offset=11830, .match_offset=0 }, { .children_offset=11832, .match_offset=0 }, { .children_offset=0, .match_offset=10039 }, { .children_offset=11834, .match_offset=0 }, { .children_offset=11836, .match_offset=0 }, { .children_offset=11838, .match_offset=0 }, { .children_offset=11840, .match_offset=0 }, { .children_offset=11842, .match_offset=0 }, { .children_offset=11844, .match_offset=0 }, { .children_offset=11846, .match_offset=0 }, { .children_offset=0, .match_offset=16654 }, { .children_offset=11848, .match_offset=0 }, { .children_offset=11850, .match_offset=0 }, { .children_offset=0, .match_offset=14525 }, { .children_offset=11852, .match_offset=67820 }, { .children_offset=11854, .match_offset=0 }, { .children_offset=0, .match_offset=27053 }, { .children_offset=11856, .match_offset=0 }, { .children_offset=11858, .match_offset=0 }, { .children_offset=11860, .match_offset=0 }, { .children_offset=11862, .match_offset=0 }, { .children_offset=11864, .match_offset=0 }, { .children_offset=0, .match_offset=31153 }, { .children_offset=0, .match_offset=134730 }, { .children_offset=11867, .match_offset=0 }, { .children_offset=0, .match_offset=22662 }, { .children_offset=11869, .match_offset=0 }, { .children_offset=11872, .match_offset=0 }, { .children_offset=11874, .match_offset=0 }, { .children_offset=11876, .match_offset=0 }, { .children_offset=0, .match_offset=10288 }, { .children_offset=0, .match_offset=134270 }, { .children_offset=11878, .match_offset=25428 }, { .children_offset=11885, .match_offset=64307 }, { .children_offset=11891, .match_offset=89337 }, { .children_offset=11893, .match_offset=0 }, { .children_offset=0, .match_offset=129322 }, { .children_offset=11895, .match_offset=0 }, { .children_offset=11897, .match_offset=0 }, { .children_offset=0, .match_offset=70774 }, { .children_offset=11899, .match_offset=136185 }, { .children_offset=11902, .match_offset=0 }, { .children_offset=11904, .match_offset=0 }, { .children_offset=0, .match_offset=63099 }, { .children_offset=11906, .match_offset=0 }, { .children_offset=11908, .match_offset=0 }, { .children_offset=0, .match_offset=131213 }, { .children_offset=11910, .match_offset=0 }, { .children_offset=11912, .match_offset=0 }, { .children_offset=11914, .match_offset=0 }, { .children_offset=0, .match_offset=14335 }, { .children_offset=11916, .match_offset=30368 }, { .children_offset=0, .match_offset=25928 }, { .children_offset=11920, .match_offset=0 }, { .children_offset=0, .match_offset=46146 }, { .children_offset=0, .match_offset=58877 }, { .children_offset=11922, .match_offset=12462 }, { .children_offset=0, .match_offset=123691 }, { .children_offset=11924, .match_offset=0 }, { .children_offset=0, .match_offset=61929 }, { .children_offset=11930, .match_offset=29924 }, { .children_offset=0, .match_offset=102916 }, { .children_offset=0, .match_offset=73777 }, { .children_offset=11932, .match_offset=86068 }, { .children_offset=0, .match_offset=62363 }, { .children_offset=0, .match_offset=57948 }, { .children_offset=11934, .match_offset=124630 }, { .children_offset=0, .match_offset=77044 }, { .children_offset=11936, .match_offset=77029 }, { .children_offset=0, .match_offset=52253 }, { .children_offset=0, .match_offset=67873 }, { .children_offset=0, .match_offset=34458 }, { .children_offset=11939, .match_offset=132938 }, { .children_offset=11956, .match_offset=0 }, { .children_offset=11965, .match_offset=0 }, { .children_offset=11967, .match_offset=0 }, { .children_offset=11969, .match_offset=0 }, { .children_offset=11971, .match_offset=0 }, { .children_offset=11973, .match_offset=0 }, { .children_offset=11975, .match_offset=0 }, { .children_offset=11977, .match_offset=0 }, { .children_offset=11979, .match_offset=0 }, { .children_offset=11984, .match_offset=0 }, { .children_offset=11986, .match_offset=0 }, { .children_offset=11988, .match_offset=0 }, { .children_offset=11990, .match_offset=0 }, { .children_offset=0, .match_offset=81900 }, { .children_offset=11992, .match_offset=0 }, { .children_offset=11994, .match_offset=0 }, { .children_offset=0, .match_offset=26800 }, { .children_offset=11997, .match_offset=0 }, { .children_offset=11999, .match_offset=0 }, { .children_offset=12001, .match_offset=0 }, { .children_offset=12003, .match_offset=0 }, { .children_offset=12005, .match_offset=0 }, { .children_offset=12007, .match_offset=0 }, { .children_offset=12009, .match_offset=0 }, { .children_offset=12011, .match_offset=0 }, { .children_offset=0, .match_offset=63618 }, { .children_offset=12013, .match_offset=0 }, { .children_offset=12015, .match_offset=0 }, { .children_offset=12017, .match_offset=0 }, { .children_offset=12019, .match_offset=0 }, { .children_offset=0, .match_offset=8953 }, { .children_offset=12021, .match_offset=0 }, { .children_offset=12023, .match_offset=0 }, { .children_offset=12025, .match_offset=0 }, { .children_offset=12027, .match_offset=0 }, { .children_offset=0, .match_offset=6523 }, { .children_offset=12029, .match_offset=0 }, { .children_offset=12031, .match_offset=0 }, { .children_offset=12033, .match_offset=0 }, { .children_offset=12035, .match_offset=0 }, { .children_offset=12037, .match_offset=0 }, { .children_offset=12040, .match_offset=26597 }, { .children_offset=12042, .match_offset=0 }, { .children_offset=12044, .match_offset=0 }, { .children_offset=12046, .match_offset=0 }, { .children_offset=12048, .match_offset=0 }, { .children_offset=0, .match_offset=61059 }, { .children_offset=12050, .match_offset=0 }, { .children_offset=12052, .match_offset=0 }, { .children_offset=0, .match_offset=109491 }, { .children_offset=12054, .match_offset=0 }, { .children_offset=12056, .match_offset=0 }, { .children_offset=12058, .match_offset=0 }, { .children_offset=12060, .match_offset=0 }, { .children_offset=0, .match_offset=60957 }, { .children_offset=12062, .match_offset=0 }, { .children_offset=12065, .match_offset=0 }, { .children_offset=12067, .match_offset=0 }, { .children_offset=12069, .match_offset=0 }, { .children_offset=12071, .match_offset=0 }, { .children_offset=0, .match_offset=22050 }, { .children_offset=12073, .match_offset=0 }, { .children_offset=12075, .match_offset=0 }, { .children_offset=12077, .match_offset=0 }, { .children_offset=12079, .match_offset=0 }, { .children_offset=0, .match_offset=26400 }, { .children_offset=12081, .match_offset=50607 }, { .children_offset=12085, .match_offset=0 }, { .children_offset=12087, .match_offset=0 }, { .children_offset=12089, .match_offset=0 }, { .children_offset=0, .match_offset=110936 }, { .children_offset=12091, .match_offset=0 }, { .children_offset=12093, .match_offset=0 }, { .children_offset=12095, .match_offset=103721 }, { .children_offset=12097, .match_offset=129994 }, { .children_offset=12099, .match_offset=0 }, { .children_offset=12101, .match_offset=0 }, { .children_offset=0, .match_offset=34921 }, { .children_offset=0, .match_offset=34921 }, { .children_offset=12103, .match_offset=0 }, { .children_offset=12105, .match_offset=0 }, { .children_offset=12107, .match_offset=0 }, { .children_offset=0, .match_offset=113967 }, { .children_offset=12109, .match_offset=0 }, { .children_offset=12111, .match_offset=0 }, { .children_offset=12113, .match_offset=0 }, { .children_offset=12115, .match_offset=0 }, { .children_offset=0, .match_offset=46643 }, { .children_offset=12117, .match_offset=0 }, { .children_offset=12119, .match_offset=0 }, { .children_offset=12121, .match_offset=0 }, { .children_offset=12124, .match_offset=0 }, { .children_offset=12126, .match_offset=0 }, { .children_offset=0, .match_offset=44406 }, { .children_offset=12128, .match_offset=0 }, { .children_offset=0, .match_offset=77328 }, { .children_offset=0, .match_offset=27851 }, { .children_offset=12130, .match_offset=133475 }, { .children_offset=0, .match_offset=34872 }, { .children_offset=12134, .match_offset=0 }, { .children_offset=12137, .match_offset=0 }, { .children_offset=0, .match_offset=27549 }, { .children_offset=12139, .match_offset=0 }, { .children_offset=0, .match_offset=20516 }, { .children_offset=0, .match_offset=78196 }, { .children_offset=12141, .match_offset=0 }, { .children_offset=12146, .match_offset=0 }, { .children_offset=0, .match_offset=30529 }, { .children_offset=12148, .match_offset=0 }, { .children_offset=12151, .match_offset=0 }, { .children_offset=12153, .match_offset=0 }, { .children_offset=12155, .match_offset=0 }, { .children_offset=12157, .match_offset=0 }, { .children_offset=12160, .match_offset=0 }, { .children_offset=0, .match_offset=13216 }, { .children_offset=12162, .match_offset=0 }, { .children_offset=12164, .match_offset=0 }, { .children_offset=12166, .match_offset=0 }, { .children_offset=12168, .match_offset=87998 }, { .children_offset=0, .match_offset=14289 }, { .children_offset=12170, .match_offset=0 }, { .children_offset=12172, .match_offset=0 }, { .children_offset=12174, .match_offset=0 }, { .children_offset=12176, .match_offset=0 }, { .children_offset=12178, .match_offset=0 }, { .children_offset=12181, .match_offset=0 }, { .children_offset=12183, .match_offset=0 }, { .children_offset=0, .match_offset=131727 }, { .children_offset=0, .match_offset=38730 }, { .children_offset=12185, .match_offset=0 }, { .children_offset=12187, .match_offset=0 }, { .children_offset=12189, .match_offset=0 }, { .children_offset=12191, .match_offset=0 }, { .children_offset=0, .match_offset=57505 }, { .children_offset=12193, .match_offset=0 }, { .children_offset=12195, .match_offset=0 }, { .children_offset=12197, .match_offset=0 }, { .children_offset=12199, .match_offset=0 }, { .children_offset=12201, .match_offset=0 }, { .children_offset=0, .match_offset=21980 }, { .children_offset=12203, .match_offset=0 }, { .children_offset=12208, .match_offset=108145 }, { .children_offset=12210, .match_offset=0 }, { .children_offset=12212, .match_offset=0 }, { .children_offset=0, .match_offset=43493 }, { .children_offset=12214, .match_offset=0 }, { .children_offset=12216, .match_offset=40912 }, { .children_offset=0, .match_offset=128037 }, { .children_offset=12218, .match_offset=0 }, { .children_offset=12220, .match_offset=0 }, { .children_offset=12222, .match_offset=0 }, { .children_offset=12224, .match_offset=0 }, { .children_offset=0, .match_offset=62657 }, { .children_offset=12226, .match_offset=0 }, { .children_offset=12228, .match_offset=0 }, { .children_offset=12231, .match_offset=33211 }, { .children_offset=12233, .match_offset=0 }, { .children_offset=0, .match_offset=58038 }, { .children_offset=12236, .match_offset=0 }, { .children_offset=0, .match_offset=45041 }, { .children_offset=12238, .match_offset=0 }, { .children_offset=0, .match_offset=118227 }, { .children_offset=0, .match_offset=37189 }, { .children_offset=12240, .match_offset=33836 }, { .children_offset=0, .match_offset=32812 }, { .children_offset=12245, .match_offset=0 }, { .children_offset=12247, .match_offset=0 }, { .children_offset=12249, .match_offset=0 }, { .children_offset=12251, .match_offset=0 }, { .children_offset=12253, .match_offset=0 }, { .children_offset=12255, .match_offset=114612 }, { .children_offset=12257, .match_offset=0 }, { .children_offset=0, .match_offset=34652 }, { .children_offset=12259, .match_offset=0 }, { .children_offset=12262, .match_offset=0 }, { .children_offset=12264, .match_offset=0 }, { .children_offset=0, .match_offset=129439 }, { .children_offset=12266, .match_offset=0 }, { .children_offset=12269, .match_offset=0 }, { .children_offset=12271, .match_offset=0 }, { .children_offset=12273, .match_offset=0 }, { .children_offset=12275, .match_offset=0 }, { .children_offset=12277, .match_offset=0 }, { .children_offset=12279, .match_offset=0 }, { .children_offset=0, .match_offset=2300 }, { .children_offset=12281, .match_offset=0 }, { .children_offset=12283, .match_offset=0 }, { .children_offset=12285, .match_offset=0 }, { .children_offset=12287, .match_offset=0 }, { .children_offset=12289, .match_offset=0 }, { .children_offset=12291, .match_offset=0 }, { .children_offset=0, .match_offset=12669 }, { .children_offset=0, .match_offset=121984 }, { .children_offset=0, .match_offset=103191 }, { .children_offset=12295, .match_offset=0 }, { .children_offset=12297, .match_offset=0 }, { .children_offset=12299, .match_offset=0 }, { .children_offset=0, .match_offset=38156 }, { .children_offset=12301, .match_offset=74211 }, { .children_offset=12303, .match_offset=109301 }, { .children_offset=12305, .match_offset=0 }, { .children_offset=12307, .match_offset=0 }, { .children_offset=0, .match_offset=103973 }, { .children_offset=12309, .match_offset=78878 }, { .children_offset=12313, .match_offset=0 }, { .children_offset=0, .match_offset=12992 }, { .children_offset=12316, .match_offset=0 }, { .children_offset=12318, .match_offset=0 }, { .children_offset=0, .match_offset=77814 }, { .children_offset=12320, .match_offset=0 }, { .children_offset=12322, .match_offset=0 }, { .children_offset=0, .match_offset=89867 }, { .children_offset=12324, .match_offset=0 }, { .children_offset=0, .match_offset=49914 }, { .children_offset=12326, .match_offset=0 }, { .children_offset=12329, .match_offset=0 }, { .children_offset=12331, .match_offset=0 }, { .children_offset=12333, .match_offset=61527 }, { .children_offset=12336, .match_offset=0 }, { .children_offset=12338, .match_offset=0 }, { .children_offset=12340, .match_offset=76989 }, { .children_offset=12342, .match_offset=0 }, { .children_offset=0, .match_offset=55982 }, { .children_offset=12344, .match_offset=0 }, { .children_offset=0, .match_offset=116327 }, { .children_offset=12346, .match_offset=0 }, { .children_offset=0, .match_offset=8776 }, { .children_offset=12348, .match_offset=0 }, { .children_offset=12357, .match_offset=0 }, { .children_offset=12360, .match_offset=0 }, { .children_offset=12362, .match_offset=0 }, { .children_offset=12364, .match_offset=0 }, { .children_offset=0, .match_offset=13551 }, { .children_offset=12366, .match_offset=0 }, { .children_offset=12368, .match_offset=0 }, { .children_offset=12370, .match_offset=0 }, { .children_offset=12372, .match_offset=0 }, { .children_offset=12374, .match_offset=0 }, { .children_offset=12376, .match_offset=0 }, { .children_offset=12378, .match_offset=0 }, { .children_offset=0, .match_offset=78407 }, { .children_offset=12380, .match_offset=73111 }, { .children_offset=12382, .match_offset=0 }, { .children_offset=12384, .match_offset=0 }, { .children_offset=12386, .match_offset=0 }, { .children_offset=12388, .match_offset=0 }, { .children_offset=12390, .match_offset=0 }, { .children_offset=12392, .match_offset=0 }, { .children_offset=12394, .match_offset=0 }, { .children_offset=12396, .match_offset=0 }, { .children_offset=0, .match_offset=113809 }, { .children_offset=0, .match_offset=110307 }, { .children_offset=12398, .match_offset=0 }, { .children_offset=12401, .match_offset=0 }, { .children_offset=12403, .match_offset=0 }, { .children_offset=0, .match_offset=6268 }, { .children_offset=0, .match_offset=74447 }, { .children_offset=0, .match_offset=22832 }, { .children_offset=12405, .match_offset=0 }, { .children_offset=12408, .match_offset=0 }, { .children_offset=12410, .match_offset=0 }, { .children_offset=12412, .match_offset=0 }, { .children_offset=12414, .match_offset=0 }, { .children_offset=12416, .match_offset=0 }, { .children_offset=0, .match_offset=37165 }, { .children_offset=12418, .match_offset=0 }, { .children_offset=12420, .match_offset=0 }, { .children_offset=12422, .match_offset=0 }, { .children_offset=0, .match_offset=45088 }, { .children_offset=12424, .match_offset=0 }, { .children_offset=12426, .match_offset=0 }, { .children_offset=12428, .match_offset=0 }, { .children_offset=12430, .match_offset=0 }, { .children_offset=12432, .match_offset=30910 }, { .children_offset=12434, .match_offset=0 }, { .children_offset=0, .match_offset=113070 }, { .children_offset=12436, .match_offset=0 }, { .children_offset=12439, .match_offset=0 }, { .children_offset=12442, .match_offset=0 }, { .children_offset=0, .match_offset=104356 }, { .children_offset=12444, .match_offset=0 }, { .children_offset=12446, .match_offset=0 }, { .children_offset=12448, .match_offset=0 }, { .children_offset=12450, .match_offset=0 }, { .children_offset=12452, .match_offset=0 }, { .children_offset=0, .match_offset=116036 }, { .children_offset=12454, .match_offset=0 }, { .children_offset=12456, .match_offset=0 }, { .children_offset=12458, .match_offset=0 }, { .children_offset=12460, .match_offset=0 }, { .children_offset=12462, .match_offset=0 }, { .children_offset=0, .match_offset=68798 }, { .children_offset=12464, .match_offset=64197 }, { .children_offset=12466, .match_offset=0 }, { .children_offset=0, .match_offset=55289 }, { .children_offset=12468, .match_offset=34695 }, { .children_offset=12472, .match_offset=0 }, { .children_offset=12474, .match_offset=0 }, { .children_offset=12476, .match_offset=0 }, { .children_offset=12478, .match_offset=0 }, { .children_offset=12480, .match_offset=0 }, { .children_offset=12482, .match_offset=0 }, { .children_offset=0, .match_offset=43627 }, { .children_offset=12484, .match_offset=0 }, { .children_offset=12488, .match_offset=0 }, { .children_offset=12490, .match_offset=135540 }, { .children_offset=0, .match_offset=6569 }, { .children_offset=12495, .match_offset=0 }, { .children_offset=12497, .match_offset=0 }, { .children_offset=12499, .match_offset=0 }, { .children_offset=12501, .match_offset=0 }, { .children_offset=12503, .match_offset=0 }, { .children_offset=12505, .match_offset=0 }, { .children_offset=0, .match_offset=114763 }, { .children_offset=12507, .match_offset=118397 }, { .children_offset=0, .match_offset=74729 }, { .children_offset=0, .match_offset=134457 }, { .children_offset=12509, .match_offset=0 }, { .children_offset=12512, .match_offset=0 }, { .children_offset=12514, .match_offset=0 }, { .children_offset=12516, .match_offset=0 }, { .children_offset=12518, .match_offset=0 }, { .children_offset=0, .match_offset=102702 }, { .children_offset=0, .match_offset=31149 }, { .children_offset=12520, .match_offset=0 }, { .children_offset=12522, .match_offset=0 }, { .children_offset=12524, .match_offset=0 }, { .children_offset=0, .match_offset=100998 }, { .children_offset=12526, .match_offset=0 }, { .children_offset=12529, .match_offset=0 }, { .children_offset=0, .match_offset=114763 }, { .children_offset=12531, .match_offset=0 }, { .children_offset=12533, .match_offset=0 }, { .children_offset=0, .match_offset=32771 }, { .children_offset=0, .match_offset=85294 }, { .children_offset=12535, .match_offset=0 }, { .children_offset=0, .match_offset=20280 }, { .children_offset=12537, .match_offset=0 }, { .children_offset=12539, .match_offset=0 }, { .children_offset=0, .match_offset=37732 }, { .children_offset=12541, .match_offset=123201 }, { .children_offset=0, .match_offset=8477 }, { .children_offset=12545, .match_offset=0 }, { .children_offset=0, .match_offset=56618 }, { .children_offset=12547, .match_offset=70837 }, { .children_offset=12549, .match_offset=0 }, { .children_offset=12551, .match_offset=25549 }, { .children_offset=0, .match_offset=20428 }, { .children_offset=12553, .match_offset=0 }, { .children_offset=12555, .match_offset=0 }, { .children_offset=0, .match_offset=133345 }, { .children_offset=12557, .match_offset=33405 }, { .children_offset=0, .match_offset=53498 }, { .children_offset=12565, .match_offset=0 }, { .children_offset=12568, .match_offset=0 }, { .children_offset=12570, .match_offset=0 }, { .children_offset=0, .match_offset=28105 }, { .children_offset=12572, .match_offset=0 }, { .children_offset=12574, .match_offset=0 }, { .children_offset=0, .match_offset=27875 }, { .children_offset=12576, .match_offset=20628 }, { .children_offset=0, .match_offset=125246 }, { .children_offset=12578, .match_offset=0 }, { .children_offset=0, .match_offset=57533 }, { .children_offset=12581, .match_offset=0 }, { .children_offset=0, .match_offset=66242 }, { .children_offset=0, .match_offset=9086 }, { .children_offset=0, .match_offset=57474 }, { .children_offset=0, .match_offset=46012 }, { .children_offset=0, .match_offset=35624 }, { .children_offset=12583, .match_offset=0 }, { .children_offset=0, .match_offset=13868 }, { .children_offset=12585, .match_offset=41897 }, { .children_offset=12606, .match_offset=0 }, { .children_offset=0, .match_offset=70704 }, { .children_offset=12608, .match_offset=131533 }, { .children_offset=12610, .match_offset=0 }, { .children_offset=12612, .match_offset=0 }, { .children_offset=12614, .match_offset=0 }, { .children_offset=12616, .match_offset=0 }, { .children_offset=12618, .match_offset=0 }, { .children_offset=12620, .match_offset=0 }, { .children_offset=12622, .match_offset=0 }, { .children_offset=0, .match_offset=34158 }, { .children_offset=12624, .match_offset=0 }, { .children_offset=12626, .match_offset=0 }, { .children_offset=0, .match_offset=5334 }, { .children_offset=12628, .match_offset=0 }, { .children_offset=12630, .match_offset=0 }, { .children_offset=12632, .match_offset=0 }, { .children_offset=12634, .match_offset=0 }, { .children_offset=12636, .match_offset=0 }, { .children_offset=0, .match_offset=113867 }, { .children_offset=12638, .match_offset=0 }, { .children_offset=12640, .match_offset=0 }, { .children_offset=12642, .match_offset=0 }, { .children_offset=12644, .match_offset=0 }, { .children_offset=12646, .match_offset=0 }, { .children_offset=0, .match_offset=131187 }, { .children_offset=12648, .match_offset=0 }, { .children_offset=0, .match_offset=14862 }, { .children_offset=12650, .match_offset=2091 }, { .children_offset=12652, .match_offset=0 }, { .children_offset=0, .match_offset=34972 }, { .children_offset=12654, .match_offset=67678 }, { .children_offset=12657, .match_offset=0 }, { .children_offset=0, .match_offset=62379 }, { .children_offset=0, .match_offset=85426 }, { .children_offset=12659, .match_offset=0 }, { .children_offset=12661, .match_offset=0 }, { .children_offset=12663, .match_offset=0 }, { .children_offset=0, .match_offset=113739 }, { .children_offset=12665, .match_offset=0 }, { .children_offset=12669, .match_offset=0 }, { .children_offset=12671, .match_offset=0 }, { .children_offset=0, .match_offset=10964 }, { .children_offset=12673, .match_offset=0 }, { .children_offset=12676, .match_offset=0 }, { .children_offset=0, .match_offset=21925 }, { .children_offset=0, .match_offset=133256 }, { .children_offset=12678, .match_offset=0 }, { .children_offset=12680, .match_offset=0 }, { .children_offset=12682, .match_offset=0 }, { .children_offset=0, .match_offset=109901 }, { .children_offset=12684, .match_offset=0 }, { .children_offset=12687, .match_offset=0 }, { .children_offset=12689, .match_offset=0 }, { .children_offset=0, .match_offset=133645 }, { .children_offset=12691, .match_offset=0 }, { .children_offset=12693, .match_offset=0 }, { .children_offset=0, .match_offset=4960 }, { .children_offset=12695, .match_offset=27568 }, { .children_offset=0, .match_offset=103595 }, { .children_offset=12697, .match_offset=55424 }, { .children_offset=12700, .match_offset=0 }, { .children_offset=0, .match_offset=105809 }, { .children_offset=0, .match_offset=42983 }, { .children_offset=12702, .match_offset=25581 }, { .children_offset=0, .match_offset=42836 }, { .children_offset=12704, .match_offset=0 }, { .children_offset=12707, .match_offset=0 }, { .children_offset=12709, .match_offset=0 }, { .children_offset=0, .match_offset=60743 }, { .children_offset=0, .match_offset=113958 }, { .children_offset=12711, .match_offset=136260 }, { .children_offset=12719, .match_offset=0 }, { .children_offset=12721, .match_offset=0 }, { .children_offset=0, .match_offset=116955 }, { .children_offset=12723, .match_offset=0 }, { .children_offset=12725, .match_offset=45838 }, { .children_offset=12728, .match_offset=0 }, { .children_offset=12730, .match_offset=0 }, { .children_offset=0, .match_offset=14253 }, { .children_offset=12732, .match_offset=0 }, { .children_offset=12734, .match_offset=0 }, { .children_offset=0, .match_offset=45838 }, { .children_offset=12736, .match_offset=0 }, { .children_offset=12738, .match_offset=0 }, { .children_offset=12740, .match_offset=0 }, { .children_offset=0, .match_offset=111157 }, { .children_offset=12742, .match_offset=0 }, { .children_offset=12744, .match_offset=0 }, { .children_offset=12746, .match_offset=0 }, { .children_offset=12748, .match_offset=0 }, { .children_offset=0, .match_offset=78988 }, { .children_offset=12750, .match_offset=0 }, { .children_offset=12752, .match_offset=0 }, { .children_offset=12754, .match_offset=0 }, { .children_offset=0, .match_offset=34349 }, { .children_offset=12756, .match_offset=48475 }, { .children_offset=12759, .match_offset=0 }, { .children_offset=12768, .match_offset=20262 }, { .children_offset=12776, .match_offset=35409 }, { .children_offset=12783, .match_offset=136022 }, { .children_offset=12789, .match_offset=25734 }, { .children_offset=12794, .match_offset=8827 }, { .children_offset=12798, .match_offset=68281 }, { .children_offset=12801, .match_offset=43276 }, { .children_offset=0, .match_offset=30465 }, { .children_offset=0, .match_offset=40891 }, { .children_offset=12803, .match_offset=52265 }, { .children_offset=0, .match_offset=6976 }, { .children_offset=0, .match_offset=103381 }, { .children_offset=12805, .match_offset=45842 }, { .children_offset=12808, .match_offset=73486 }, { .children_offset=0, .match_offset=22850 }, { .children_offset=0, .match_offset=37932 }, { .children_offset=12810, .match_offset=58838 }, { .children_offset=0, .match_offset=10618 }, { .children_offset=0, .match_offset=64706 }, { .children_offset=12812, .match_offset=135817 }, { .children_offset=12816, .match_offset=12402 }, { .children_offset=12819, .match_offset=119647 }, { .children_offset=0, .match_offset=58771 }, { .children_offset=0, .match_offset=57920 }, { .children_offset=12821, .match_offset=55026 }, { .children_offset=0, .match_offset=46794 }, { .children_offset=0, .match_offset=130995 }, { .children_offset=12823, .match_offset=8564 }, { .children_offset=12826, .match_offset=55972 }, { .children_offset=0, .match_offset=26440 }, { .children_offset=0, .match_offset=109589 }, { .children_offset=12828, .match_offset=59272 }, { .children_offset=0, .match_offset=77016 }, { .children_offset=0, .match_offset=12542 }, { .children_offset=12830, .match_offset=130923 }, { .children_offset=12835, .match_offset=8496 }, { .children_offset=12839, .match_offset=41770 }, { .children_offset=12842, .match_offset=11924 }, { .children_offset=0, .match_offset=113873 }, { .children_offset=0, .match_offset=55418 }, { .children_offset=12844, .match_offset=11974 }, { .children_offset=0, .match_offset=72791 }, { .children_offset=0, .match_offset=62835 }, { .children_offset=12846, .match_offset=122625 }, { .children_offset=12849, .match_offset=87771 }, { .children_offset=0, .match_offset=26033 }, { .children_offset=0, .match_offset=130897 }, { .children_offset=12851, .match_offset=121950 }, { .children_offset=0, .match_offset=50164 }, { .children_offset=0, .match_offset=60750 }, { .children_offset=12853, .match_offset=37640 }, { .children_offset=12857, .match_offset=28434 }, { .children_offset=12860, .match_offset=125716 }, { .children_offset=0, .match_offset=109432 }, { .children_offset=0, .match_offset=113451 }, { .children_offset=12862, .match_offset=88897 }, { .children_offset=0, .match_offset=35197 }, { .children_offset=0, .match_offset=8764 }, { .children_offset=12864, .match_offset=60011 }, { .children_offset=12867, .match_offset=13498 }, { .children_offset=0, .match_offset=26499 }, { .children_offset=0, .match_offset=116376 }, { .children_offset=12869, .match_offset=129867 }, { .children_offset=0, .match_offset=129588 }, { .children_offset=0, .match_offset=102748 }, { .children_offset=12871, .match_offset=22229 }, { .children_offset=12877, .match_offset=89525 }, { .children_offset=12882, .match_offset=88899 }, { .children_offset=12886, .match_offset=114246 }, { .children_offset=12889, .match_offset=11427 }, { .children_offset=0, .match_offset=42454 }, { .children_offset=0, .match_offset=68991 }, { .children_offset=12891, .match_offset=87857 }, { .children_offset=0, .match_offset=46675 }, { .children_offset=0, .match_offset=27185 }, { .children_offset=12893, .match_offset=65040 }, { .children_offset=12896, .match_offset=14323 }, { .children_offset=0, .match_offset=39203 }, { .children_offset=0, .match_offset=15509 }, { .children_offset=12898, .match_offset=12309 }, { .children_offset=0, .match_offset=16059 }, { .children_offset=0, .match_offset=88895 }, { .children_offset=12900, .match_offset=8895 }, { .children_offset=12904, .match_offset=10921 }, { .children_offset=12907, .match_offset=24264 }, { .children_offset=0, .match_offset=55295 }, { .children_offset=0, .match_offset=104461 }, { .children_offset=12909, .match_offset=38166 }, { .children_offset=0, .match_offset=108763 }, { .children_offset=0, .match_offset=26859 }, { .children_offset=12911, .match_offset=5245 }, { .children_offset=12914, .match_offset=115389 }, { .children_offset=0, .match_offset=63807 }, { .children_offset=0, .match_offset=115429 }, { .children_offset=12916, .match_offset=72433 }, { .children_offset=0, .match_offset=11093 }, { .children_offset=0, .match_offset=11071 }, { .children_offset=12918, .match_offset=61002 }, { .children_offset=12923, .match_offset=117660 }, { .children_offset=12927, .match_offset=65263 }, { .children_offset=12930, .match_offset=43818 }, { .children_offset=0, .match_offset=58353 }, { .children_offset=0, .match_offset=108849 }, { .children_offset=12932, .match_offset=132146 }, { .children_offset=0, .match_offset=89143 }, { .children_offset=0, .match_offset=136191 }, { .children_offset=12934, .match_offset=81168 }, { .children_offset=12937, .match_offset=30742 }, { .children_offset=0, .match_offset=61015 }, { .children_offset=0, .match_offset=33282 }, { .children_offset=12939, .match_offset=129299 }, { .children_offset=0, .match_offset=15719 }, { .children_offset=0, .match_offset=124856 }, { .children_offset=12941, .match_offset=73836 }, { .children_offset=12945, .match_offset=88823 }, { .children_offset=12948, .match_offset=62301 }, { .children_offset=0, .match_offset=42615 }, { .children_offset=0, .match_offset=5365 }, { .children_offset=12950, .match_offset=90110 }, { .children_offset=0, .match_offset=103447 }, { .children_offset=0, .match_offset=90324 }, { .children_offset=12952, .match_offset=111491 }, { .children_offset=12955, .match_offset=46183 }, { .children_offset=0, .match_offset=122555 }, { .children_offset=0, .match_offset=108570 }, { .children_offset=12957, .match_offset=42226 }, { .children_offset=0, .match_offset=45048 }, { .children_offset=0, .match_offset=127319 }, { .children_offset=12959, .match_offset=78414 }, { .children_offset=12966, .match_offset=50327 }, { .children_offset=12972, .match_offset=26194 }, { .children_offset=12977, .match_offset=67302 }, { .children_offset=12981, .match_offset=44956 }, { .children_offset=12984, .match_offset=20209 }, { .children_offset=0, .match_offset=8963 }, { .children_offset=0, .match_offset=43945 }, { .children_offset=12986, .match_offset=80603 }, { .children_offset=0, .match_offset=38846 }, { .children_offset=0, .match_offset=24266 }, { .children_offset=12988, .match_offset=22117 }, { .children_offset=12991, .match_offset=27577 }, { .children_offset=0, .match_offset=90193 }, { .children_offset=0, .match_offset=122142 }, { .children_offset=12993, .match_offset=64575 }, { .children_offset=0, .match_offset=2136 }, { .children_offset=0, .match_offset=90073 }, { .children_offset=12995, .match_offset=26466 }, { .children_offset=12999, .match_offset=116173 }, { .children_offset=13002, .match_offset=104054 }, { .children_offset=0, .match_offset=28469 }, { .children_offset=0, .match_offset=124666 }, { .children_offset=13004, .match_offset=20904 }, { .children_offset=0, .match_offset=42427 }, { .children_offset=0, .match_offset=22072 }, { .children_offset=13006, .match_offset=10254 }, { .children_offset=13009, .match_offset=122525 }, { .children_offset=0, .match_offset=77223 }, { .children_offset=0, .match_offset=12437 }, { .children_offset=13011, .match_offset=53637 }, { .children_offset=0, .match_offset=40184 }, { .children_offset=0, .match_offset=103361 }, { .children_offset=13013, .match_offset=35325 }, { .children_offset=13018, .match_offset=58018 }, { .children_offset=13022, .match_offset=33773 }, { .children_offset=13025, .match_offset=131152 }, { .children_offset=0, .match_offset=53534 }, { .children_offset=0, .match_offset=20320 }, { .children_offset=13027, .match_offset=122533 }, { .children_offset=0, .match_offset=34417 }, { .children_offset=0, .match_offset=108572 }, { .children_offset=13029, .match_offset=87345 }, { .children_offset=13032, .match_offset=67850 }, { .children_offset=0, .match_offset=118393 }, { .children_offset=0, .match_offset=45846 }, { .children_offset=13034, .match_offset=113282 }, { .children_offset=0, .match_offset=60731 }, { .children_offset=0, .match_offset=121959 }, { .children_offset=13036, .match_offset=89655 }, { .children_offset=13040, .match_offset=6865 }, { .children_offset=13043, .match_offset=38504 }, { .children_offset=0, .match_offset=125056 }, { .children_offset=0, .match_offset=61263 }, { .children_offset=13045, .match_offset=2294 }, { .children_offset=0, .match_offset=68794 }, { .children_offset=0, .match_offset=71803 }, { .children_offset=13047, .match_offset=125827 }, { .children_offset=13050, .match_offset=50359 }, { .children_offset=0, .match_offset=121994 }, { .children_offset=0, .match_offset=58415 }, { .children_offset=13052, .match_offset=10850 }, { .children_offset=0, .match_offset=11487 }, { .children_offset=0, .match_offset=114042 }, { .children_offset=13054, .match_offset=52685 }, { .children_offset=13060, .match_offset=39002 }, { .children_offset=13065, .match_offset=29094 }, { .children_offset=13069, .match_offset=21861 }, { .children_offset=13072, .match_offset=30718 }, { .children_offset=0, .match_offset=9020 }, { .children_offset=0, .match_offset=35876 }, { .children_offset=13074, .match_offset=89080 }, { .children_offset=0, .match_offset=12456 }, { .children_offset=0, .match_offset=7354 }, { .children_offset=13076, .match_offset=37666 }, { .children_offset=13079, .match_offset=16177 }, { .children_offset=0, .match_offset=14475 }, { .children_offset=0, .match_offset=40452 }, { .children_offset=13081, .match_offset=50601 }, { .children_offset=0, .match_offset=30904 }, { .children_offset=0, .match_offset=64545 }, { .children_offset=13083, .match_offset=55400 }, { .children_offset=13087, .match_offset=74465 }, { .children_offset=13090, .match_offset=86305 }, { .children_offset=0, .match_offset=55884 }, { .children_offset=0, .match_offset=136187 }, { .children_offset=13092, .match_offset=46837 }, { .children_offset=0, .match_offset=29881 }, { .children_offset=0, .match_offset=108622 }, { .children_offset=13094, .match_offset=80586 }, { .children_offset=13097, .match_offset=22415 }, { .children_offset=0, .match_offset=13182 }, { .children_offset=0, .match_offset=27957 }, { .children_offset=13099, .match_offset=58413 }, { .children_offset=0, .match_offset=53602 }, { .children_offset=0, .match_offset=77035 }, { .children_offset=13101, .match_offset=5500 }, { .children_offset=13106, .match_offset=45078 }, { .children_offset=13110, .match_offset=43947 }, { .children_offset=13113, .match_offset=59440 }, { .children_offset=0, .match_offset=63770 }, { .children_offset=0, .match_offset=33304 }, { .children_offset=13115, .match_offset=45057 }, { .children_offset=0, .match_offset=6220 }, { .children_offset=0, .match_offset=21964 }, { .children_offset=13117, .match_offset=129377 }, { .children_offset=13120, .match_offset=133649 }, { .children_offset=0, .match_offset=11063 }, { .children_offset=0, .match_offset=104463 }, { .children_offset=13122, .match_offset=49708 }, { .children_offset=0, .match_offset=5600 }, { .children_offset=0, .match_offset=104324 }, { .children_offset=13124, .match_offset=16086 }, { .children_offset=13128, .match_offset=68275 }, { .children_offset=13131, .match_offset=67756 }, { .children_offset=0, .match_offset=51131 }, { .children_offset=0, .match_offset=12452 }, { .children_offset=13133, .match_offset=20896 }, { .children_offset=0, .match_offset=90565 }, { .children_offset=0, .match_offset=59033 }, { .children_offset=13135, .match_offset=122506 }, { .children_offset=13138, .match_offset=89812 }, { .children_offset=0, .match_offset=13513 }, { .children_offset=0, .match_offset=21817 }, { .children_offset=13140, .match_offset=85951 }, { .children_offset=0, .match_offset=29128 }, { .children_offset=0, .match_offset=116208 }, { .children_offset=13142, .match_offset=0 }, { .children_offset=13144, .match_offset=0 }, { .children_offset=13146, .match_offset=0 }, { .children_offset=13148, .match_offset=0 }, { .children_offset=0, .match_offset=61774 }, { .children_offset=13150, .match_offset=0 }, { .children_offset=13152, .match_offset=0 }, { .children_offset=13154, .match_offset=73163 }, { .children_offset=13156, .match_offset=0 }, { .children_offset=0, .match_offset=5560 }, { .children_offset=0, .match_offset=60692 }, { .children_offset=0, .match_offset=25543 }, { .children_offset=13160, .match_offset=0 }, { .children_offset=13163, .match_offset=0 }, { .children_offset=13166, .match_offset=0 }, { .children_offset=13168, .match_offset=122755 }, { .children_offset=13177, .match_offset=0 }, { .children_offset=13181, .match_offset=0 }, { .children_offset=13183, .match_offset=0 }, { .children_offset=13185, .match_offset=0 }, { .children_offset=13187, .match_offset=0 }, { .children_offset=0, .match_offset=16001 }, { .children_offset=13189, .match_offset=0 }, { .children_offset=13191, .match_offset=0 }, { .children_offset=13193, .match_offset=0 }, { .children_offset=13195, .match_offset=88594 }, { .children_offset=0, .match_offset=109423 }, { .children_offset=13197, .match_offset=0 }, { .children_offset=13199, .match_offset=0 }, { .children_offset=13201, .match_offset=0 }, { .children_offset=13203, .match_offset=0 }, { .children_offset=13205, .match_offset=0 }, { .children_offset=0, .match_offset=64880 }, { .children_offset=13207, .match_offset=0 }, { .children_offset=13209, .match_offset=0 }, { .children_offset=13211, .match_offset=0 }, { .children_offset=13213, .match_offset=0 }, { .children_offset=13215, .match_offset=0 }, { .children_offset=13217, .match_offset=0 }, { .children_offset=13219, .match_offset=0 }, { .children_offset=0, .match_offset=15050 }, { .children_offset=13221, .match_offset=0 }, { .children_offset=13223, .match_offset=0 }, { .children_offset=13225, .match_offset=0 }, { .children_offset=13227, .match_offset=0 }, { .children_offset=13229, .match_offset=0 }, { .children_offset=13231, .match_offset=0 }, { .children_offset=13233, .match_offset=0 }, { .children_offset=13235, .match_offset=0 }, { .children_offset=13237, .match_offset=0 }, { .children_offset=13239, .match_offset=0 }, { .children_offset=13241, .match_offset=0 }, { .children_offset=13243, .match_offset=0 }, { .children_offset=13245, .match_offset=0 }, { .children_offset=13247, .match_offset=0 }, { .children_offset=0, .match_offset=113956 }, { .children_offset=13249, .match_offset=119865 }, { .children_offset=13251, .match_offset=0 }, { .children_offset=0, .match_offset=72425 }, { .children_offset=13254, .match_offset=0 }, { .children_offset=13256, .match_offset=0 }, { .children_offset=13258, .match_offset=0 }, { .children_offset=13260, .match_offset=0 }, { .children_offset=13262, .match_offset=0 }, { .children_offset=13264, .match_offset=0 }, { .children_offset=0, .match_offset=78492 }, { .children_offset=13266, .match_offset=0 }, { .children_offset=13269, .match_offset=0 }, { .children_offset=13271, .match_offset=0 }, { .children_offset=13273, .match_offset=0 }, { .children_offset=13277, .match_offset=0 }, { .children_offset=13279, .match_offset=0 }, { .children_offset=13281, .match_offset=0 }, { .children_offset=13283, .match_offset=0 }, { .children_offset=0, .match_offset=61737 }, { .children_offset=13285, .match_offset=0 }, { .children_offset=13287, .match_offset=0 }, { .children_offset=13289, .match_offset=0 }, { .children_offset=13291, .match_offset=0 }, { .children_offset=13293, .match_offset=0 }, { .children_offset=13295, .match_offset=0 }, { .children_offset=13297, .match_offset=0 }, { .children_offset=13299, .match_offset=0 }, { .children_offset=13301, .match_offset=0 }, { .children_offset=0, .match_offset=54447 }, { .children_offset=13303, .match_offset=0 }, { .children_offset=13305, .match_offset=0 }, { .children_offset=0, .match_offset=123850 }, { .children_offset=13307, .match_offset=0 }, { .children_offset=13309, .match_offset=0 }, { .children_offset=13311, .match_offset=0 }, { .children_offset=13314, .match_offset=0 }, { .children_offset=13316, .match_offset=0 }, { .children_offset=13318, .match_offset=0 }, { .children_offset=13320, .match_offset=0 }, { .children_offset=13323, .match_offset=0 }, { .children_offset=13325, .match_offset=0 }, { .children_offset=13327, .match_offset=0 }, { .children_offset=13329, .match_offset=0 }, { .children_offset=0, .match_offset=123352 }, { .children_offset=13331, .match_offset=0 }, { .children_offset=13333, .match_offset=0 }, { .children_offset=13335, .match_offset=0 }, { .children_offset=13337, .match_offset=0 }, { .children_offset=13339, .match_offset=0 }, { .children_offset=13341, .match_offset=0 }, { .children_offset=13343, .match_offset=0 }, { .children_offset=13345, .match_offset=0 }, { .children_offset=13347, .match_offset=0 }, { .children_offset=0, .match_offset=108568 }, { .children_offset=13349, .match_offset=0 }, { .children_offset=13351, .match_offset=0 }, { .children_offset=13353, .match_offset=0 }, { .children_offset=13355, .match_offset=0 }, { .children_offset=13357, .match_offset=0 }, { .children_offset=13359, .match_offset=0 }, { .children_offset=13361, .match_offset=0 }, { .children_offset=13363, .match_offset=0 }, { .children_offset=13365, .match_offset=0 }, { .children_offset=0, .match_offset=72499 }, { .children_offset=13367, .match_offset=0 }, { .children_offset=13369, .match_offset=0 }, { .children_offset=13371, .match_offset=0 }, { .children_offset=13373, .match_offset=0 }, { .children_offset=13375, .match_offset=0 }, { .children_offset=13378, .match_offset=0 }, { .children_offset=13380, .match_offset=0 }, { .children_offset=13382, .match_offset=0 }, { .children_offset=13384, .match_offset=0 }, { .children_offset=0, .match_offset=5487 }, { .children_offset=13386, .match_offset=0 }, { .children_offset=13388, .match_offset=0 }, { .children_offset=0, .match_offset=104469 }, { .children_offset=13390, .match_offset=0 }, { .children_offset=13392, .match_offset=0 }, { .children_offset=13395, .match_offset=0 }, { .children_offset=13397, .match_offset=0 }, { .children_offset=13399, .match_offset=0 }, { .children_offset=13401, .match_offset=0 }, { .children_offset=0, .match_offset=26192 }, { .children_offset=13403, .match_offset=0 }, { .children_offset=13405, .match_offset=0 }, { .children_offset=13407, .match_offset=0 }, { .children_offset=13409, .match_offset=0 }, { .children_offset=13411, .match_offset=0 }, { .children_offset=13413, .match_offset=0 }, { .children_offset=13415, .match_offset=0 }, { .children_offset=13417, .match_offset=0 }, { .children_offset=0, .match_offset=68596 }, { .children_offset=13419, .match_offset=0 }, { .children_offset=13421, .match_offset=0 }, { .children_offset=13423, .match_offset=0 }, { .children_offset=13425, .match_offset=0 }, { .children_offset=13427, .match_offset=0 }, { .children_offset=13429, .match_offset=0 }, { .children_offset=13431, .match_offset=0 }, { .children_offset=13433, .match_offset=0 }, { .children_offset=13435, .match_offset=0 }, { .children_offset=13437, .match_offset=0 }, { .children_offset=0, .match_offset=68785 }, { .children_offset=0, .match_offset=125033 }, { .children_offset=13439, .match_offset=0 }, { .children_offset=13441, .match_offset=0 }, { .children_offset=13443, .match_offset=0 }, { .children_offset=13445, .match_offset=0 }, { .children_offset=0, .match_offset=50599 }, { .children_offset=13447, .match_offset=0 }, { .children_offset=0, .match_offset=65800 }, { .children_offset=13449, .match_offset=0 }, { .children_offset=13451, .match_offset=115827 }, { .children_offset=13462, .match_offset=0 }, { .children_offset=13464, .match_offset=0 }, { .children_offset=13466, .match_offset=0 }, { .children_offset=13468, .match_offset=0 }, { .children_offset=13470, .match_offset=0 }, { .children_offset=13472, .match_offset=0 }, { .children_offset=13474, .match_offset=0 }, { .children_offset=13476, .match_offset=0 }, { .children_offset=0, .match_offset=64372 }, { .children_offset=13478, .match_offset=0 }, { .children_offset=13480, .match_offset=0 }, { .children_offset=13482, .match_offset=0 }, { .children_offset=13484, .match_offset=0 }, { .children_offset=13486, .match_offset=46043 }, { .children_offset=13489, .match_offset=0 }, { .children_offset=13491, .match_offset=0 }, { .children_offset=0, .match_offset=114525 }, { .children_offset=13493, .match_offset=0 }, { .children_offset=13495, .match_offset=0 }, { .children_offset=13497, .match_offset=0 }, { .children_offset=13499, .match_offset=0 }, { .children_offset=13501, .match_offset=0 }, { .children_offset=13503, .match_offset=0 }, { .children_offset=0, .match_offset=13407 }, { .children_offset=13505, .match_offset=0 }, { .children_offset=13507, .match_offset=0 }, { .children_offset=13509, .match_offset=0 }, { .children_offset=13511, .match_offset=0 }, { .children_offset=0, .match_offset=133473 }, { .children_offset=13513, .match_offset=0 }, { .children_offset=13515, .match_offset=0 }, { .children_offset=13517, .match_offset=0 }, { .children_offset=13519, .match_offset=0 }, { .children_offset=13521, .match_offset=0 }, { .children_offset=13523, .match_offset=0 }, { .children_offset=13525, .match_offset=0 }, { .children_offset=13527, .match_offset=0 }, { .children_offset=13529, .match_offset=0 }, { .children_offset=0, .match_offset=44684 }, { .children_offset=13531, .match_offset=0 }, { .children_offset=13533, .match_offset=0 }, { .children_offset=13535, .match_offset=0 }, { .children_offset=13537, .match_offset=0 }, { .children_offset=13539, .match_offset=0 }, { .children_offset=13541, .match_offset=0 }, { .children_offset=13543, .match_offset=0 }, { .children_offset=13546, .match_offset=0 }, { .children_offset=13548, .match_offset=0 }, { .children_offset=13550, .match_offset=0 }, { .children_offset=0, .match_offset=25928 }, { .children_offset=13552, .match_offset=0 }, { .children_offset=13554, .match_offset=0 }, { .children_offset=13556, .match_offset=0 }, { .children_offset=13558, .match_offset=0 }, { .children_offset=0, .match_offset=58877 }, { .children_offset=13560, .match_offset=0 }, { .children_offset=13562, .match_offset=0 }, { .children_offset=13564, .match_offset=0 }, { .children_offset=13566, .match_offset=0 }, { .children_offset=13570, .match_offset=0 }, { .children_offset=13572, .match_offset=0 }, { .children_offset=13574, .match_offset=0 }, { .children_offset=13576, .match_offset=0 }, { .children_offset=13578, .match_offset=0 }, { .children_offset=13580, .match_offset=0 }, { .children_offset=13582, .match_offset=0 }, { .children_offset=13584, .match_offset=0 }, { .children_offset=13586, .match_offset=0 }, { .children_offset=13588, .match_offset=0 }, { .children_offset=0, .match_offset=43694 }, { .children_offset=13590, .match_offset=0 }, { .children_offset=13592, .match_offset=0 }, { .children_offset=13594, .match_offset=0 }, { .children_offset=13596, .match_offset=0 }, { .children_offset=13598, .match_offset=0 }, { .children_offset=13600, .match_offset=0 }, { .children_offset=13602, .match_offset=0 }, { .children_offset=13604, .match_offset=0 }, { .children_offset=0, .match_offset=5998 }, { .children_offset=13606, .match_offset=0 }, { .children_offset=13608, .match_offset=0 }, { .children_offset=13610, .match_offset=0 }, { .children_offset=13612, .match_offset=0 }, { .children_offset=13614, .match_offset=0 }, { .children_offset=13616, .match_offset=136037 }, { .children_offset=13618, .match_offset=0 }, { .children_offset=13620, .match_offset=0 }, { .children_offset=0, .match_offset=74237 }, { .children_offset=13622, .match_offset=0 }, { .children_offset=13624, .match_offset=0 }, { .children_offset=13626, .match_offset=0 }, { .children_offset=13628, .match_offset=0 }, { .children_offset=13630, .match_offset=0 }, { .children_offset=13633, .match_offset=0 }, { .children_offset=13635, .match_offset=0 }, { .children_offset=13637, .match_offset=0 }, { .children_offset=13639, .match_offset=0 }, { .children_offset=13641, .match_offset=0 }, { .children_offset=13643, .match_offset=0 }, { .children_offset=13645, .match_offset=0 }, { .children_offset=13647, .match_offset=0 }, { .children_offset=0, .match_offset=123266 }, { .children_offset=13649, .match_offset=0 }, { .children_offset=13651, .match_offset=0 }, { .children_offset=13653, .match_offset=0 }, { .children_offset=13655, .match_offset=0 }, { .children_offset=13657, .match_offset=0 }, { .children_offset=13659, .match_offset=26878 }, { .children_offset=13661, .match_offset=0 }, { .children_offset=13663, .match_offset=0 }, { .children_offset=0, .match_offset=73226 }, { .children_offset=13665, .match_offset=0 }, { .children_offset=13667, .match_offset=0 }, { .children_offset=13669, .match_offset=0 }, { .children_offset=13671, .match_offset=0 }, { .children_offset=13673, .match_offset=0 }, { .children_offset=13675, .match_offset=0 }, { .children_offset=0, .match_offset=55239 }, { .children_offset=13677, .match_offset=0 }, { .children_offset=13679, .match_offset=0 }, { .children_offset=13681, .match_offset=130935 }, { .children_offset=13683, .match_offset=0 }, { .children_offset=13685, .match_offset=0 }, { .children_offset=13687, .match_offset=0 }, { .children_offset=13689, .match_offset=0 }, { .children_offset=0, .match_offset=58357 }, { .children_offset=13691, .match_offset=0 }, { .children_offset=13693, .match_offset=0 }, { .children_offset=13695, .match_offset=0 }, { .children_offset=13697, .match_offset=13385 }, { .children_offset=0, .match_offset=114362 }, { .children_offset=0, .match_offset=10892 }, { .children_offset=13699, .match_offset=0 }, { .children_offset=13708, .match_offset=0 }, { .children_offset=13715, .match_offset=0 }, { .children_offset=13717, .match_offset=0 }, { .children_offset=13719, .match_offset=0 }, { .children_offset=13721, .match_offset=127062 }, { .children_offset=0, .match_offset=20569 }, { .children_offset=13723, .match_offset=0 }, { .children_offset=13725, .match_offset=0 }, { .children_offset=13727, .match_offset=0 }, { .children_offset=13729, .match_offset=0 }, { .children_offset=0, .match_offset=13796 }, { .children_offset=13731, .match_offset=0 }, { .children_offset=13733, .match_offset=0 }, { .children_offset=0, .match_offset=135026 }, { .children_offset=0, .match_offset=55839 }, { .children_offset=13735, .match_offset=0 }, { .children_offset=13737, .match_offset=0 }, { .children_offset=13739, .match_offset=0 }, { .children_offset=13741, .match_offset=0 }, { .children_offset=0, .match_offset=28247 }, { .children_offset=13743, .match_offset=0 }, { .children_offset=13745, .match_offset=0 }, { .children_offset=13747, .match_offset=0 }, { .children_offset=13749, .match_offset=0 }, { .children_offset=0, .match_offset=87164 }, { .children_offset=13751, .match_offset=0 }, { .children_offset=13753, .match_offset=0 }, { .children_offset=13755, .match_offset=0 }, { .children_offset=13757, .match_offset=0 }, { .children_offset=13759, .match_offset=0 }, { .children_offset=0, .match_offset=60150 }, { .children_offset=13761, .match_offset=0 }, { .children_offset=13764, .match_offset=0 }, { .children_offset=13766, .match_offset=0 }, { .children_offset=0, .match_offset=57378 }, { .children_offset=13768, .match_offset=0 }, { .children_offset=13770, .match_offset=0 }, { .children_offset=0, .match_offset=26938 }, { .children_offset=13772, .match_offset=0 }, { .children_offset=13775, .match_offset=0 }, { .children_offset=13777, .match_offset=0 }, { .children_offset=0, .match_offset=134297 }, { .children_offset=13779, .match_offset=0 }, { .children_offset=0, .match_offset=69139 }, { .children_offset=13781, .match_offset=0 }, { .children_offset=0, .match_offset=44743 }, { .children_offset=13785, .match_offset=0 }, { .children_offset=0, .match_offset=131023 }, { .children_offset=13787, .match_offset=0 }, { .children_offset=0, .match_offset=123761 }, { .children_offset=13789, .match_offset=0 }, { .children_offset=13793, .match_offset=0 }, { .children_offset=13795, .match_offset=0 }, { .children_offset=13797, .match_offset=0 }, { .children_offset=13799, .match_offset=0 }, { .children_offset=13801, .match_offset=0 }, { .children_offset=0, .match_offset=74555 }, { .children_offset=13803, .match_offset=0 }, { .children_offset=13805, .match_offset=0 }, { .children_offset=13807, .match_offset=0 }, { .children_offset=13809, .match_offset=0 }, { .children_offset=0, .match_offset=78574 }, { .children_offset=13811, .match_offset=11562 }, { .children_offset=13815, .match_offset=0 }, { .children_offset=13817, .match_offset=0 }, { .children_offset=13819, .match_offset=0 }, { .children_offset=13821, .match_offset=0 }, { .children_offset=13823, .match_offset=0 }, { .children_offset=13825, .match_offset=0 }, { .children_offset=13827, .match_offset=0 }, { .children_offset=13829, .match_offset=0 }, { .children_offset=0, .match_offset=115809 }, { .children_offset=13831, .match_offset=0 }, { .children_offset=13833, .match_offset=0 }, { .children_offset=0, .match_offset=116454 }, { .children_offset=0, .match_offset=10244 }, { .children_offset=13835, .match_offset=0 }, { .children_offset=13837, .match_offset=113418 }, { .children_offset=13839, .match_offset=0 }, { .children_offset=13841, .match_offset=0 }, { .children_offset=13843, .match_offset=0 }, { .children_offset=13845, .match_offset=0 }, { .children_offset=13847, .match_offset=0 }, { .children_offset=0, .match_offset=62563 }, { .children_offset=0, .match_offset=23958 }, { .children_offset=13849, .match_offset=0 }, { .children_offset=13853, .match_offset=0 }, { .children_offset=0, .match_offset=12445 }, { .children_offset=0, .match_offset=70760 }, { .children_offset=13856, .match_offset=0 }, { .children_offset=0, .match_offset=74362 }, { .children_offset=13858, .match_offset=0 }, { .children_offset=13860, .match_offset=0 }, { .children_offset=13862, .match_offset=0 }, { .children_offset=0, .match_offset=82016 }, { .children_offset=13864, .match_offset=0 }, { .children_offset=13867, .match_offset=0 }, { .children_offset=13869, .match_offset=0 }, { .children_offset=0, .match_offset=125198 }, { .children_offset=13871, .match_offset=0 }, { .children_offset=13873, .match_offset=30808 }, { .children_offset=0, .match_offset=12448 }, { .children_offset=13875, .match_offset=77353 }, { .children_offset=13890, .match_offset=0 }, { .children_offset=13892, .match_offset=0 }, { .children_offset=0, .match_offset=13407 }, { .children_offset=13894, .match_offset=62356 }, { .children_offset=0, .match_offset=43992 }, { .children_offset=13896, .match_offset=0 }, { .children_offset=0, .match_offset=43740 }, { .children_offset=13898, .match_offset=115549 }, { .children_offset=13900, .match_offset=0 }, { .children_offset=0, .match_offset=129592 }, { .children_offset=13902, .match_offset=135521 }, { .children_offset=13904, .match_offset=0 }, { .children_offset=0, .match_offset=7750 }, { .children_offset=0, .match_offset=64541 }, { .children_offset=13906, .match_offset=5372 }, { .children_offset=13908, .match_offset=0 }, { .children_offset=13910, .match_offset=0 }, { .children_offset=13912, .match_offset=0 }, { .children_offset=13914, .match_offset=0 }, { .children_offset=0, .match_offset=28256 }, { .children_offset=13916, .match_offset=62862 }, { .children_offset=0, .match_offset=28741 }, { .children_offset=0, .match_offset=73824 }, { .children_offset=0, .match_offset=21152 }, { .children_offset=13920, .match_offset=76995 }, { .children_offset=0, .match_offset=70706 }, { .children_offset=13922, .match_offset=72082 }, { .children_offset=13925, .match_offset=0 }, { .children_offset=13927, .match_offset=0 }, { .children_offset=13929, .match_offset=0 }, { .children_offset=13931, .match_offset=0 }, { .children_offset=0, .match_offset=5769 }, { .children_offset=13933, .match_offset=0 }, { .children_offset=13935, .match_offset=0 }, { .children_offset=13937, .match_offset=0 }, { .children_offset=13939, .match_offset=0 }, { .children_offset=13941, .match_offset=0 }, { .children_offset=0, .match_offset=115412 }, { .children_offset=13943, .match_offset=58906 }, { .children_offset=0, .match_offset=1237 }, { .children_offset=13947, .match_offset=0 }, { .children_offset=13949, .match_offset=0 }, { .children_offset=13951, .match_offset=0 }, { .children_offset=13953, .match_offset=0 }, { .children_offset=0, .match_offset=27051 }, { .children_offset=0, .match_offset=102779 }, { .children_offset=13955, .match_offset=0 }, { .children_offset=13958, .match_offset=0 }, { .children_offset=13960, .match_offset=0 }, { .children_offset=13962, .match_offset=0 }, { .children_offset=13964, .match_offset=0 }, { .children_offset=0, .match_offset=87840 }, { .children_offset=0, .match_offset=102719 }, { .children_offset=13966, .match_offset=46897 }, { .children_offset=13968, .match_offset=0 }, { .children_offset=13970, .match_offset=0 }, { .children_offset=0, .match_offset=90011 }, { .children_offset=0, .match_offset=116012 }, { .children_offset=13972, .match_offset=8824 }, { .children_offset=0, .match_offset=108733 }, { .children_offset=13975, .match_offset=0 }, { .children_offset=13977, .match_offset=0 }, { .children_offset=13979, .match_offset=0 }, { .children_offset=13981, .match_offset=0 }, { .children_offset=13983, .match_offset=0 }, { .children_offset=0, .match_offset=43161 }, { .children_offset=13985, .match_offset=0 }, { .children_offset=13989, .match_offset=49723 }, { .children_offset=13991, .match_offset=0 }, { .children_offset=13993, .match_offset=0 }, { .children_offset=13995, .match_offset=0 }, { .children_offset=0, .match_offset=111421 }, { .children_offset=0, .match_offset=61512 }, { .children_offset=0, .match_offset=28063 }, { .children_offset=13997, .match_offset=0 }, { .children_offset=14002, .match_offset=0 }, { .children_offset=0, .match_offset=25669 }, { .children_offset=14004, .match_offset=0 }, { .children_offset=0, .match_offset=133447 }, { .children_offset=14006, .match_offset=0 }, { .children_offset=14008, .match_offset=0 }, { .children_offset=14010, .match_offset=0 }, { .children_offset=14012, .match_offset=0 }, { .children_offset=0, .match_offset=115707 }, { .children_offset=0, .match_offset=123334 }, { .children_offset=14014, .match_offset=45080 }, { .children_offset=14026, .match_offset=58326 }, { .children_offset=0, .match_offset=72461 }, { .children_offset=0, .match_offset=132849 }, { .children_offset=14029, .match_offset=0 }, { .children_offset=0, .match_offset=129926 }, { .children_offset=14031, .match_offset=35839 }, { .children_offset=0, .match_offset=115420 }, { .children_offset=14034, .match_offset=0 }, { .children_offset=0, .match_offset=89350 }, { .children_offset=14036, .match_offset=0 }, { .children_offset=0, .match_offset=135946 }, { .children_offset=0, .match_offset=129926 }, { .children_offset=14040, .match_offset=0 }, { .children_offset=0, .match_offset=78211 }, { .children_offset=14042, .match_offset=104403 }, { .children_offset=14045, .match_offset=0 }, { .children_offset=14047, .match_offset=0 }, { .children_offset=14049, .match_offset=0 }, { .children_offset=14051, .match_offset=0 }, { .children_offset=0, .match_offset=58419 }, { .children_offset=14053, .match_offset=0 }, { .children_offset=0, .match_offset=71930 }, { .children_offset=14055, .match_offset=0 }, { .children_offset=0, .match_offset=109562 }, { .children_offset=0, .match_offset=53809 }, { .children_offset=0, .match_offset=15996 }, { .children_offset=14057, .match_offset=0 }, { .children_offset=0, .match_offset=62381 }, { .children_offset=14059, .match_offset=0 }, { .children_offset=14062, .match_offset=0 }, { .children_offset=0, .match_offset=12330 }, { .children_offset=0, .match_offset=34541 }, { .children_offset=14064, .match_offset=0 }, { .children_offset=0, .match_offset=64421 }, { .children_offset=0, .match_offset=102913 }, { .children_offset=14068, .match_offset=0 }, { .children_offset=0, .match_offset=129967 }, { .children_offset=14070, .match_offset=0 }, { .children_offset=0, .match_offset=25962 }, { .children_offset=14101, .match_offset=0 }, { .children_offset=0, .match_offset=20318 }, { .children_offset=0, .match_offset=16378 }, { .children_offset=0, .match_offset=38571 }, { .children_offset=0, .match_offset=65111 }, { .children_offset=0, .match_offset=14 }, { .children_offset=14108, .match_offset=0 }, { .children_offset=14110, .match_offset=0 }, { .children_offset=14112, .match_offset=0 }, { .children_offset=0, .match_offset=100960 }, { .children_offset=14114, .match_offset=0 }, { .children_offset=14119, .match_offset=0 }, { .children_offset=0, .match_offset=42105 }, { .children_offset=0, .match_offset=113407 }, { .children_offset=0, .match_offset=86695 }, { .children_offset=0, .match_offset=46598 }, { .children_offset=0, .match_offset=129426 }, { .children_offset=0, .match_offset=9101 }, { .children_offset=0, .match_offset=33883 }, { .children_offset=14129, .match_offset=125581 }, { .children_offset=0, .match_offset=13381 }, { .children_offset=14131, .match_offset=1059 }, { .children_offset=0, .match_offset=109388 }, { .children_offset=14133, .match_offset=0 }, { .children_offset=0, .match_offset=8448 }, { .children_offset=0, .match_offset=25781 }, { .children_offset=0, .match_offset=117531 }, { .children_offset=0, .match_offset=43778 }, { .children_offset=0, .match_offset=44952 }, { .children_offset=0, .match_offset=111393 }, { .children_offset=14144, .match_offset=5374 }, { .children_offset=0, .match_offset=54231 }, { .children_offset=14146, .match_offset=11332 }, { .children_offset=0, .match_offset=111471 }, { .children_offset=0, .match_offset=58793 }, { .children_offset=0, .match_offset=103443 }, { .children_offset=14148, .match_offset=0 }, { .children_offset=14159, .match_offset=77324 }, { .children_offset=0, .match_offset=70917 }, { .children_offset=0, .match_offset=80478 }, { .children_offset=0, .match_offset=111385 }, { .children_offset=0, .match_offset=34460 }, { .children_offset=0, .match_offset=5096 }, { .children_offset=0, .match_offset=27080 }, { .children_offset=0, .match_offset=67332 }, { .children_offset=0, .match_offset=29141 }, { .children_offset=14161, .match_offset=135896 }, { .children_offset=0, .match_offset=110364 }, { .children_offset=0, .match_offset=8883 }, { .children_offset=14163, .match_offset=0 }, { .children_offset=0, .match_offset=28712 }, { .children_offset=0, .match_offset=30919 }, { .children_offset=0, .match_offset=33958 }, { .children_offset=0, .match_offset=80947 }, { .children_offset=14172, .match_offset=20624 }, { .children_offset=0, .match_offset=108781 }, { .children_offset=0, .match_offset=58786 }, { .children_offset=0, .match_offset=56983 }, { .children_offset=0, .match_offset=43055 }, { .children_offset=0, .match_offset=22059 }, { .children_offset=14174, .match_offset=15025 }, { .children_offset=14183, .match_offset=0 }, { .children_offset=14185, .match_offset=0 }, { .children_offset=14187, .match_offset=0 }, { .children_offset=14189, .match_offset=0 }, { .children_offset=0, .match_offset=89357 }, { .children_offset=14191, .match_offset=0 }, { .children_offset=14193, .match_offset=0 }, { .children_offset=14195, .match_offset=0 }, { .children_offset=0, .match_offset=57292 }, { .children_offset=14197, .match_offset=0 }, { .children_offset=14199, .match_offset=0 }, { .children_offset=14201, .match_offset=0 }, { .children_offset=14203, .match_offset=0 }, { .children_offset=0, .match_offset=130991 }, { .children_offset=14205, .match_offset=0 }, { .children_offset=14207, .match_offset=0 }, { .children_offset=0, .match_offset=90653 }, { .children_offset=14209, .match_offset=0 }, { .children_offset=14211, .match_offset=0 }, { .children_offset=14213, .match_offset=0 }, { .children_offset=14215, .match_offset=0 }, { .children_offset=14217, .match_offset=0 }, { .children_offset=14219, .match_offset=0 }, { .children_offset=14221, .match_offset=0 }, { .children_offset=14223, .match_offset=0 }, { .children_offset=0, .match_offset=13192 }, { .children_offset=14225, .match_offset=74196 }, { .children_offset=14229, .match_offset=0 }, { .children_offset=0, .match_offset=77347 }, { .children_offset=0, .match_offset=55964 }, { .children_offset=14231, .match_offset=0 }, { .children_offset=14233, .match_offset=114797 }, { .children_offset=14235, .match_offset=0 }, { .children_offset=0, .match_offset=58006 }, { .children_offset=14237, .match_offset=0 }, { .children_offset=0, .match_offset=7527 }, { .children_offset=14240, .match_offset=115609 }, { .children_offset=14242, .match_offset=0 }, { .children_offset=14244, .match_offset=68415 }, { .children_offset=0, .match_offset=29136 }, { .children_offset=0, .match_offset=74311 }, { .children_offset=14246, .match_offset=134327 }, { .children_offset=14248, .match_offset=0 }, { .children_offset=14250, .match_offset=0 }, { .children_offset=14252, .match_offset=0 }, { .children_offset=14254, .match_offset=0 }, { .children_offset=0, .match_offset=122595 }, { .children_offset=14256, .match_offset=25598 }, { .children_offset=14263, .match_offset=0 }, { .children_offset=14265, .match_offset=0 }, { .children_offset=14267, .match_offset=0 }, { .children_offset=0, .match_offset=90658 }, { .children_offset=0, .match_offset=2111 }, { .children_offset=14269, .match_offset=0 }, { .children_offset=14271, .match_offset=57248 }, { .children_offset=0, .match_offset=122676 }, { .children_offset=14273, .match_offset=0 }, { .children_offset=14275, .match_offset=0 }, { .children_offset=14277, .match_offset=0 }, { .children_offset=0, .match_offset=68390 }, { .children_offset=0, .match_offset=127606 }, { .children_offset=0, .match_offset=116941 }, { .children_offset=14279, .match_offset=11574 }, { .children_offset=14283, .match_offset=23761 }, { .children_offset=14285, .match_offset=0 }, { .children_offset=0, .match_offset=22208 }, { .children_offset=14287, .match_offset=0 }, { .children_offset=0, .match_offset=32810 }, { .children_offset=14290, .match_offset=0 }, { .children_offset=14292, .match_offset=0 }, { .children_offset=14294, .match_offset=0 }, { .children_offset=14296, .match_offset=0 }, { .children_offset=14298, .match_offset=0 }, { .children_offset=0, .match_offset=11976 }, { .children_offset=14300, .match_offset=0 }, { .children_offset=0, .match_offset=108740 }, { .children_offset=14302, .match_offset=82030 }, { .children_offset=14308, .match_offset=0 }, { .children_offset=14310, .match_offset=0 }, { .children_offset=14312, .match_offset=0 }, { .children_offset=14314, .match_offset=0 }, { .children_offset=14316, .match_offset=0 }, { .children_offset=14318, .match_offset=0 }, { .children_offset=0, .match_offset=119257 }, { .children_offset=0, .match_offset=78016 }, { .children_offset=14320, .match_offset=0 }, { .children_offset=14322, .match_offset=0 }, { .children_offset=0, .match_offset=43901 }, { .children_offset=0, .match_offset=134188 }, { .children_offset=14324, .match_offset=0 }, { .children_offset=14326, .match_offset=0 }, { .children_offset=14328, .match_offset=0 }, { .children_offset=14330, .match_offset=0 }, { .children_offset=0, .match_offset=27968 }, { .children_offset=14332, .match_offset=49791 }, { .children_offset=14335, .match_offset=0 }, { .children_offset=14337, .match_offset=0 }, { .children_offset=0, .match_offset=55505 }, { .children_offset=0, .match_offset=81842 }, { .children_offset=14339, .match_offset=35634 }, { .children_offset=0, .match_offset=44938 }, { .children_offset=14345, .match_offset=0 }, { .children_offset=0, .match_offset=113384 }, { .children_offset=14347, .match_offset=0 }, { .children_offset=14349, .match_offset=0 }, { .children_offset=14351, .match_offset=0 }, { .children_offset=0, .match_offset=88729 }, { .children_offset=14353, .match_offset=38158 }, { .children_offset=14355, .match_offset=0 }, { .children_offset=14357, .match_offset=0 }, { .children_offset=0, .match_offset=55831 }, { .children_offset=14359, .match_offset=130910 }, { .children_offset=14361, .match_offset=0 }, { .children_offset=14363, .match_offset=0 }, { .children_offset=14366, .match_offset=0 }, { .children_offset=14368, .match_offset=0 }, { .children_offset=0, .match_offset=46906 }, { .children_offset=14370, .match_offset=0 }, { .children_offset=14372, .match_offset=0 }, { .children_offset=14374, .match_offset=0 }, { .children_offset=14376, .match_offset=0 }, { .children_offset=14378, .match_offset=0 }, { .children_offset=14380, .match_offset=0 }, { .children_offset=14382, .match_offset=0 }, { .children_offset=0, .match_offset=57310 }, { .children_offset=14384, .match_offset=90089 }, { .children_offset=14390, .match_offset=0 }, { .children_offset=14392, .match_offset=0 }, { .children_offset=0, .match_offset=28010 }, { .children_offset=14394, .match_offset=0 }, { .children_offset=0, .match_offset=61634 }, { .children_offset=14396, .match_offset=0 }, { .children_offset=0, .match_offset=90567 }, { .children_offset=14398, .match_offset=0 }, { .children_offset=0, .match_offset=73389 }, { .children_offset=14401, .match_offset=0 }, { .children_offset=0, .match_offset=59359 }, { .children_offset=14403, .match_offset=0 }, { .children_offset=14405, .match_offset=0 }, { .children_offset=0, .match_offset=65782 }, { .children_offset=14407, .match_offset=84780 }, { .children_offset=0, .match_offset=127601 }, { .children_offset=14412, .match_offset=0 }, { .children_offset=14414, .match_offset=0 }, { .children_offset=14416, .match_offset=71289 }, { .children_offset=14422, .match_offset=0 }, { .children_offset=14424, .match_offset=0 }, { .children_offset=14426, .match_offset=0 }, { .children_offset=14428, .match_offset=0 }, { .children_offset=14430, .match_offset=0 }, { .children_offset=14432, .match_offset=0 }, { .children_offset=0, .match_offset=108094 }, { .children_offset=14434, .match_offset=0 }, { .children_offset=14436, .match_offset=0 }, { .children_offset=0, .match_offset=55220 }, { .children_offset=14438, .match_offset=62144 }, { .children_offset=0, .match_offset=69296 }, { .children_offset=14440, .match_offset=0 }, { .children_offset=14442, .match_offset=0 }, { .children_offset=14444, .match_offset=0 }, { .children_offset=14446, .match_offset=28462 }, { .children_offset=0, .match_offset=10938 }, { .children_offset=0, .match_offset=122635 }, { .children_offset=0, .match_offset=26291 }, { .children_offset=0, .match_offset=5964 }, { .children_offset=14448, .match_offset=46058 }, { .children_offset=14450, .match_offset=0 }, { .children_offset=14452, .match_offset=0 }, { .children_offset=0, .match_offset=113706 }, { .children_offset=14454, .match_offset=116313 }, { .children_offset=14458, .match_offset=0 }, { .children_offset=0, .match_offset=6870 }, { .children_offset=14461, .match_offset=0 }, { .children_offset=0, .match_offset=27562 }, { .children_offset=14463, .match_offset=0 }, { .children_offset=14465, .match_offset=0 }, { .children_offset=14467, .match_offset=0 }, { .children_offset=14469, .match_offset=0 }, { .children_offset=14471, .match_offset=0 }, { .children_offset=14473, .match_offset=0 }, { .children_offset=14475, .match_offset=0 }, { .children_offset=14477, .match_offset=0 }, { .children_offset=0, .match_offset=42892 }, { .children_offset=14479, .match_offset=74709 }, { .children_offset=14481, .match_offset=0 }, { .children_offset=14483, .match_offset=0 }, { .children_offset=14485, .match_offset=0 }, { .children_offset=14487, .match_offset=0 }, { .children_offset=14489, .match_offset=0 }, { .children_offset=14491, .match_offset=0 }, { .children_offset=0, .match_offset=115486 }, { .children_offset=14493, .match_offset=8578 }, { .children_offset=14503, .match_offset=0 }, { .children_offset=14506, .match_offset=0 }, { .children_offset=14508, .match_offset=0 }, { .children_offset=14510, .match_offset=0 }, { .children_offset=0, .match_offset=14959 }, { .children_offset=14512, .match_offset=0 }, { .children_offset=14514, .match_offset=0 }, { .children_offset=14516, .match_offset=0 }, { .children_offset=0, .match_offset=113794 }, { .children_offset=14518, .match_offset=0 }, { .children_offset=14520, .match_offset=0 }, { .children_offset=14522, .match_offset=0 }, { .children_offset=14524, .match_offset=0 }, { .children_offset=0, .match_offset=88854 }, { .children_offset=14526, .match_offset=0 }, { .children_offset=14531, .match_offset=0 }, { .children_offset=14533, .match_offset=0 }, { .children_offset=14535, .match_offset=0 }, { .children_offset=14537, .match_offset=0 }, { .children_offset=14539, .match_offset=110531 }, { .children_offset=14541, .match_offset=0 }, { .children_offset=0, .match_offset=52245 }, { .children_offset=14543, .match_offset=0 }, { .children_offset=14545, .match_offset=0 }, { .children_offset=14547, .match_offset=0 }, { .children_offset=0, .match_offset=5263 }, { .children_offset=14549, .match_offset=0 }, { .children_offset=14551, .match_offset=0 }, { .children_offset=14553, .match_offset=0 }, { .children_offset=14555, .match_offset=0 }, { .children_offset=0, .match_offset=33897 }, { .children_offset=14557, .match_offset=0 }, { .children_offset=14560, .match_offset=0 }, { .children_offset=14562, .match_offset=0 }, { .children_offset=14564, .match_offset=0 }, { .children_offset=0, .match_offset=133460 }, { .children_offset=14566, .match_offset=0 }, { .children_offset=14568, .match_offset=45810 }, { .children_offset=14570, .match_offset=0 }, { .children_offset=14572, .match_offset=0 }, { .children_offset=14574, .match_offset=0 }, { .children_offset=14576, .match_offset=0 }, { .children_offset=14578, .match_offset=0 }, { .children_offset=14580, .match_offset=0 }, { .children_offset=0, .match_offset=90114 }, { .children_offset=0, .match_offset=25442 }, { .children_offset=14582, .match_offset=0 }, { .children_offset=14585, .match_offset=0 }, { .children_offset=0, .match_offset=11475 }, { .children_offset=14587, .match_offset=0 }, { .children_offset=14589, .match_offset=0 }, { .children_offset=14591, .match_offset=0 }, { .children_offset=14593, .match_offset=0 }, { .children_offset=0, .match_offset=52245 }, { .children_offset=14595, .match_offset=78864 }, { .children_offset=14597, .match_offset=0 }, { .children_offset=14599, .match_offset=0 }, { .children_offset=14601, .match_offset=0 }, { .children_offset=0, .match_offset=53547 }, { .children_offset=14604, .match_offset=0 }, { .children_offset=0, .match_offset=50057 }, { .children_offset=14606, .match_offset=49759 }, { .children_offset=14608, .match_offset=0 }, { .children_offset=14610, .match_offset=0 }, { .children_offset=0, .match_offset=115993 }, { .children_offset=0, .match_offset=133214 }, { .children_offset=14612, .match_offset=62586 }, { .children_offset=14614, .match_offset=0 }, { .children_offset=14616, .match_offset=0 }, { .children_offset=14618, .match_offset=0 }, { .children_offset=0, .match_offset=25497 }, { .children_offset=14620, .match_offset=116545 }, { .children_offset=14626, .match_offset=0 }, { .children_offset=14628, .match_offset=0 }, { .children_offset=0, .match_offset=123108 }, { .children_offset=14630, .match_offset=0 }, { .children_offset=14634, .match_offset=0 }, { .children_offset=14637, .match_offset=0 }, { .children_offset=14639, .match_offset=0 }, { .children_offset=14641, .match_offset=0 }, { .children_offset=14643, .match_offset=0 }, { .children_offset=0, .match_offset=21649 }, { .children_offset=14645, .match_offset=0 }, { .children_offset=14647, .match_offset=0 }, { .children_offset=14649, .match_offset=0 }, { .children_offset=14651, .match_offset=0 }, { .children_offset=14653, .match_offset=0 }, { .children_offset=14655, .match_offset=0 }, { .children_offset=14657, .match_offset=0 }, { .children_offset=14659, .match_offset=0 }, { .children_offset=0, .match_offset=125022 }, { .children_offset=14661, .match_offset=0 }, { .children_offset=14663, .match_offset=0 }, { .children_offset=0, .match_offset=25944 }, { .children_offset=14665, .match_offset=0 }, { .children_offset=14667, .match_offset=0 }, { .children_offset=14669, .match_offset=0 }, { .children_offset=14671, .match_offset=0 }, { .children_offset=14673, .match_offset=0 }, { .children_offset=14675, .match_offset=0 }, { .children_offset=0, .match_offset=57275 }, { .children_offset=14677, .match_offset=0 }, { .children_offset=14679, .match_offset=0 }, { .children_offset=0, .match_offset=55491 }, { .children_offset=14681, .match_offset=133186 }, { .children_offset=14684, .match_offset=0 }, { .children_offset=14686, .match_offset=0 }, { .children_offset=14689, .match_offset=0 }, { .children_offset=14691, .match_offset=0 }, { .children_offset=0, .match_offset=5631 }, { .children_offset=14693, .match_offset=0 }, { .children_offset=14695, .match_offset=0 }, { .children_offset=0, .match_offset=26595 }, { .children_offset=14697, .match_offset=0 }, { .children_offset=14699, .match_offset=57970 }, { .children_offset=14702, .match_offset=0 }, { .children_offset=14705, .match_offset=0 }, { .children_offset=0, .match_offset=133398 }, { .children_offset=14707, .match_offset=0 }, { .children_offset=14709, .match_offset=0 }, { .children_offset=14711, .match_offset=0 }, { .children_offset=14713, .match_offset=0 }, { .children_offset=14715, .match_offset=0 }, { .children_offset=14717, .match_offset=0 }, { .children_offset=14719, .match_offset=0 }, { .children_offset=14721, .match_offset=0 }, { .children_offset=14723, .match_offset=0 }, { .children_offset=0, .match_offset=122562 }, { .children_offset=14725, .match_offset=133398 }, { .children_offset=14727, .match_offset=0 }, { .children_offset=14729, .match_offset=0 }, { .children_offset=14731, .match_offset=0 }, { .children_offset=14733, .match_offset=0 }, { .children_offset=14735, .match_offset=0 }, { .children_offset=14737, .match_offset=0 }, { .children_offset=14739, .match_offset=0 }, { .children_offset=14741, .match_offset=0 }, { .children_offset=14743, .match_offset=0 }, { .children_offset=14745, .match_offset=0 }, { .children_offset=14747, .match_offset=0 }, { .children_offset=14749, .match_offset=0 }, { .children_offset=14751, .match_offset=0 }, { .children_offset=0, .match_offset=89834 }, { .children_offset=14753, .match_offset=0 }, { .children_offset=14755, .match_offset=50076 }, { .children_offset=14757, .match_offset=0 }, { .children_offset=0, .match_offset=60170 }, { .children_offset=0, .match_offset=38424 }, { .children_offset=14760, .match_offset=25603 }, { .children_offset=14774, .match_offset=0 }, { .children_offset=14776, .match_offset=0 }, { .children_offset=14779, .match_offset=0 }, { .children_offset=14781, .match_offset=0 }, { .children_offset=14783, .match_offset=0 }, { .children_offset=14785, .match_offset=0 }, { .children_offset=14787, .match_offset=0 }, { .children_offset=0, .match_offset=11948 }, { .children_offset=14789, .match_offset=0 }, { .children_offset=14791, .match_offset=0 }, { .children_offset=0, .match_offset=89201 }, { .children_offset=14793, .match_offset=11336 }, { .children_offset=14796, .match_offset=0 }, { .children_offset=14798, .match_offset=0 }, { .children_offset=14800, .match_offset=0 }, { .children_offset=14803, .match_offset=0 }, { .children_offset=14805, .match_offset=0 }, { .children_offset=0, .match_offset=136165 }, { .children_offset=14807, .match_offset=0 }, { .children_offset=14809, .match_offset=0 }, { .children_offset=14811, .match_offset=89995 }, { .children_offset=0, .match_offset=108563 }, { .children_offset=14813, .match_offset=0 }, { .children_offset=14815, .match_offset=0 }, { .children_offset=14817, .match_offset=0 }, { .children_offset=14819, .match_offset=0 }, { .children_offset=14821, .match_offset=0 }, { .children_offset=14823, .match_offset=0 }, { .children_offset=0, .match_offset=108222 }, { .children_offset=14825, .match_offset=113304 }, { .children_offset=14829, .match_offset=0 }, { .children_offset=14832, .match_offset=0 }, { .children_offset=14834, .match_offset=0 }, { .children_offset=14836, .match_offset=0 }, { .children_offset=14838, .match_offset=0 }, { .children_offset=0, .match_offset=82005 }, { .children_offset=0, .match_offset=72423 }, { .children_offset=14840, .match_offset=0 }, { .children_offset=14842, .match_offset=0 }, { .children_offset=0, .match_offset=114935 }, { .children_offset=14844, .match_offset=0 }, { .children_offset=14846, .match_offset=0 }, { .children_offset=14848, .match_offset=0 }, { .children_offset=14850, .match_offset=0 }, { .children_offset=14852, .match_offset=0 }, { .children_offset=0, .match_offset=46151 }, { .children_offset=14854, .match_offset=33987 }, { .children_offset=14856, .match_offset=0 }, { .children_offset=14858, .match_offset=0 }, { .children_offset=0, .match_offset=78534 }, { .children_offset=14860, .match_offset=0 }, { .children_offset=14862, .match_offset=0 }, { .children_offset=14864, .match_offset=0 }, { .children_offset=14866, .match_offset=0 }, { .children_offset=14868, .match_offset=0 }, { .children_offset=14870, .match_offset=0 }, { .children_offset=14872, .match_offset=0 }, { .children_offset=14874, .match_offset=0 }, { .children_offset=0, .match_offset=61026 }, { .children_offset=14876, .match_offset=63113 }, { .children_offset=0, .match_offset=110932 }, { .children_offset=14878, .match_offset=0 }, { .children_offset=0, .match_offset=58496 }, { .children_offset=14880, .match_offset=0 }, { .children_offset=14882, .match_offset=0 }, { .children_offset=14884, .match_offset=0 }, { .children_offset=14886, .match_offset=0 }, { .children_offset=0, .match_offset=119409 }, { .children_offset=14888, .match_offset=0 }, { .children_offset=0, .match_offset=42306 }, { .children_offset=14890, .match_offset=4934 }, { .children_offset=14895, .match_offset=0 }, { .children_offset=14897, .match_offset=0 }, { .children_offset=14899, .match_offset=0 }, { .children_offset=14901, .match_offset=0 }, { .children_offset=14903, .match_offset=0 }, { .children_offset=14905, .match_offset=0 }, { .children_offset=0, .match_offset=103335 }, { .children_offset=14907, .match_offset=0 }, { .children_offset=14909, .match_offset=57571 }, { .children_offset=14912, .match_offset=0 }, { .children_offset=14914, .match_offset=0 }, { .children_offset=0, .match_offset=100953 }, { .children_offset=14916, .match_offset=0 }, { .children_offset=14918, .match_offset=0 }, { .children_offset=14920, .match_offset=0 }, { .children_offset=14922, .match_offset=0 }, { .children_offset=0, .match_offset=1541 }, { .children_offset=14924, .match_offset=0 }, { .children_offset=14926, .match_offset=0 }, { .children_offset=14928, .match_offset=0 }, { .children_offset=14930, .match_offset=0 }, { .children_offset=14932, .match_offset=0 }, { .children_offset=14934, .match_offset=0 }, { .children_offset=0, .match_offset=6995 }, { .children_offset=14936, .match_offset=0 }, { .children_offset=14938, .match_offset=48145 }, { .children_offset=14940, .match_offset=0 }, { .children_offset=0, .match_offset=100974 }, { .children_offset=0, .match_offset=57319 }, { .children_offset=14943, .match_offset=0 }, { .children_offset=14945, .match_offset=0 }, { .children_offset=14947, .match_offset=0 }, { .children_offset=14949, .match_offset=0 }, { .children_offset=14951, .match_offset=0 }, { .children_offset=14953, .match_offset=0 }, { .children_offset=14955, .match_offset=0 }, { .children_offset=14957, .match_offset=0 }, { .children_offset=0, .match_offset=15041 }, { .children_offset=14959, .match_offset=0 }, { .children_offset=14961, .match_offset=0 }, { .children_offset=14963, .match_offset=0 }, { .children_offset=14965, .match_offset=0 }, { .children_offset=14967, .match_offset=0 }, { .children_offset=0, .match_offset=66519 }, { .children_offset=0, .match_offset=46606 }, { .children_offset=14969, .match_offset=109379 }, { .children_offset=14975, .match_offset=0 }, { .children_offset=14979, .match_offset=0 }, { .children_offset=0, .match_offset=118457 }, { .children_offset=0, .match_offset=35748 }, { .children_offset=0, .match_offset=61851 }, { .children_offset=14981, .match_offset=0 }, { .children_offset=14983, .match_offset=0 }, { .children_offset=0, .match_offset=31019 }, { .children_offset=0, .match_offset=67415 }, { .children_offset=14985, .match_offset=0 }, { .children_offset=14987, .match_offset=0 }, { .children_offset=0, .match_offset=33347 }, { .children_offset=14989, .match_offset=0 }, { .children_offset=0, .match_offset=33704 }, { .children_offset=14991, .match_offset=38944 }, { .children_offset=14998, .match_offset=0 }, { .children_offset=15001, .match_offset=0 }, { .children_offset=0, .match_offset=50166 }, { .children_offset=15003, .match_offset=6345 }, { .children_offset=15005, .match_offset=0 }, { .children_offset=0, .match_offset=90019 }, { .children_offset=15007, .match_offset=0 }, { .children_offset=15010, .match_offset=0 }, { .children_offset=15012, .match_offset=0 }, { .children_offset=15014, .match_offset=0 }, { .children_offset=15016, .match_offset=0 }, { .children_offset=0, .match_offset=54016 }, { .children_offset=15018, .match_offset=0 }, { .children_offset=15020, .match_offset=0 }, { .children_offset=15022, .match_offset=0 }, { .children_offset=15024, .match_offset=0 }, { .children_offset=15026, .match_offset=0 }, { .children_offset=15028, .match_offset=0 }, { .children_offset=0, .match_offset=5065 }, { .children_offset=15030, .match_offset=0 }, { .children_offset=15033, .match_offset=0 }, { .children_offset=15035, .match_offset=0 }, { .children_offset=15037, .match_offset=0 }, { .children_offset=15039, .match_offset=0 }, { .children_offset=15041, .match_offset=0 }, { .children_offset=15043, .match_offset=0 }, { .children_offset=0, .match_offset=61578 }, { .children_offset=15045, .match_offset=0 }, { .children_offset=15047, .match_offset=0 }, { .children_offset=15049, .match_offset=0 }, { .children_offset=15051, .match_offset=0 }, { .children_offset=15053, .match_offset=0 }, { .children_offset=15055, .match_offset=0 }, { .children_offset=0, .match_offset=60473 }, { .children_offset=15057, .match_offset=0 }, { .children_offset=15059, .match_offset=0 }, { .children_offset=0, .match_offset=2087 }, { .children_offset=15061, .match_offset=0 }, { .children_offset=15063, .match_offset=0 }, { .children_offset=0, .match_offset=58202 }, { .children_offset=15065, .match_offset=0 }, { .children_offset=15067, .match_offset=29867 }, { .children_offset=15070, .match_offset=0 }, { .children_offset=15072, .match_offset=0 }, { .children_offset=0, .match_offset=11724 }, { .children_offset=0, .match_offset=25381 }, { .children_offset=15074, .match_offset=0 }, { .children_offset=15079, .match_offset=0 }, { .children_offset=15082, .match_offset=0 }, { .children_offset=15084, .match_offset=0 }, { .children_offset=0, .match_offset=57248 }, { .children_offset=15086, .match_offset=0 }, { .children_offset=15088, .match_offset=0 }, { .children_offset=15090, .match_offset=0 }, { .children_offset=0, .match_offset=68390 }, { .children_offset=15092, .match_offset=0 }, { .children_offset=15095, .match_offset=0 }, { .children_offset=0, .match_offset=136197 }, { .children_offset=15097, .match_offset=0 }, { .children_offset=15099, .match_offset=0 }, { .children_offset=15101, .match_offset=0 }, { .children_offset=15103, .match_offset=0 }, { .children_offset=15106, .match_offset=0 }, { .children_offset=15108, .match_offset=0 }, { .children_offset=0, .match_offset=38158 }, { .children_offset=15110, .match_offset=0 }, { .children_offset=15112, .match_offset=0 }, { .children_offset=15114, .match_offset=0 }, { .children_offset=0, .match_offset=49759 }, { .children_offset=15116, .match_offset=0 }, { .children_offset=15120, .match_offset=0 }, { .children_offset=15122, .match_offset=7238 }, { .children_offset=0, .match_offset=60039 }, { .children_offset=15125, .match_offset=0 }, { .children_offset=15127, .match_offset=0 }, { .children_offset=15129, .match_offset=0 }, { .children_offset=15131, .match_offset=0 }, { .children_offset=0, .match_offset=136197 }, { .children_offset=15133, .match_offset=0 }, { .children_offset=15135, .match_offset=0 }, { .children_offset=0, .match_offset=11061 }, { .children_offset=15137, .match_offset=0 }, { .children_offset=15143, .match_offset=0 }, { .children_offset=15145, .match_offset=0 }, { .children_offset=15147, .match_offset=0 }, { .children_offset=15149, .match_offset=0 }, { .children_offset=15151, .match_offset=0 }, { .children_offset=15153, .match_offset=0 }, { .children_offset=0, .match_offset=33043 }, { .children_offset=0, .match_offset=32802 }, { .children_offset=15155, .match_offset=0 }, { .children_offset=15157, .match_offset=0 }, { .children_offset=15159, .match_offset=0 }, { .children_offset=15161, .match_offset=0 }, { .children_offset=15163, .match_offset=0 }, { .children_offset=0, .match_offset=26386 }, { .children_offset=15165, .match_offset=0 }, { .children_offset=15168, .match_offset=0 }, { .children_offset=15170, .match_offset=0 }, { .children_offset=15172, .match_offset=0 }, { .children_offset=15174, .match_offset=0 }, { .children_offset=15176, .match_offset=0 }, { .children_offset=0, .match_offset=33176 }, { .children_offset=15178, .match_offset=0 }, { .children_offset=15180, .match_offset=0 }, { .children_offset=15182, .match_offset=0 }, { .children_offset=15184, .match_offset=0 }, { .children_offset=15186, .match_offset=0 }, { .children_offset=0, .match_offset=103553 }, { .children_offset=15188, .match_offset=86309 }, { .children_offset=15191, .match_offset=0 }, { .children_offset=15193, .match_offset=0 }, { .children_offset=15195, .match_offset=0 }, { .children_offset=15197, .match_offset=0 }, { .children_offset=0, .match_offset=4942 }, { .children_offset=15199, .match_offset=0 }, { .children_offset=0, .match_offset=133526 }, { .children_offset=15201, .match_offset=0 }, { .children_offset=15203, .match_offset=0 }, { .children_offset=15205, .match_offset=0 }, { .children_offset=15207, .match_offset=0 }, { .children_offset=15209, .match_offset=0 }, { .children_offset=0, .match_offset=6132 }, { .children_offset=15211, .match_offset=44703 }, { .children_offset=15219, .match_offset=21982 }, { .children_offset=15222, .match_offset=0 }, { .children_offset=0, .match_offset=38558 }, { .children_offset=15224, .match_offset=0 }, { .children_offset=0, .match_offset=52633 }, { .children_offset=15226, .match_offset=0 }, { .children_offset=15228, .match_offset=0 }, { .children_offset=0, .match_offset=61257 }, { .children_offset=15230, .match_offset=0 }, { .children_offset=0, .match_offset=125492 }, { .children_offset=0, .match_offset=109578 }, { .children_offset=15232, .match_offset=0 }, { .children_offset=15235, .match_offset=0 }, { .children_offset=0, .match_offset=52709 }, { .children_offset=0, .match_offset=26820 }, { .children_offset=15237, .match_offset=133083 }, { .children_offset=15239, .match_offset=0 }, { .children_offset=15241, .match_offset=0 }, { .children_offset=15243, .match_offset=0 }, { .children_offset=15245, .match_offset=0 }, { .children_offset=15247, .match_offset=0 }, { .children_offset=15249, .match_offset=0 }, { .children_offset=15251, .match_offset=0 }, { .children_offset=15253, .match_offset=0 }, { .children_offset=0, .match_offset=88772 }, { .children_offset=0, .match_offset=27067 }, { .children_offset=15255, .match_offset=103934 }, { .children_offset=15267, .match_offset=0 }, { .children_offset=0, .match_offset=26765 }, { .children_offset=0, .match_offset=113391 }, { .children_offset=0, .match_offset=60162 }, { .children_offset=15272, .match_offset=0 }, { .children_offset=0, .match_offset=60164 }, { .children_offset=15274, .match_offset=0 }, { .children_offset=15276, .match_offset=0 }, { .children_offset=0, .match_offset=129436 }, { .children_offset=15278, .match_offset=0 }, { .children_offset=15281, .match_offset=0 }, { .children_offset=15283, .match_offset=0 }, { .children_offset=0, .match_offset=61 }, { .children_offset=0, .match_offset=130383 }, { .children_offset=15285, .match_offset=0 }, { .children_offset=15287, .match_offset=0 }, { .children_offset=0, .match_offset=45838 }, { .children_offset=15289, .match_offset=56893 }, { .children_offset=15293, .match_offset=0 }, { .children_offset=0, .match_offset=62674 }, { .children_offset=15295, .match_offset=124792 }, { .children_offset=0, .match_offset=42421 }, { .children_offset=15297, .match_offset=0 }, { .children_offset=0, .match_offset=110923 }, { .children_offset=15299, .match_offset=0 }, { .children_offset=0, .match_offset=89962 }, { .children_offset=0, .match_offset=49767 }, { .children_offset=0, .match_offset=28215 }, { .children_offset=15301, .match_offset=0 }, { .children_offset=15303, .match_offset=0 }, { .children_offset=15305, .match_offset=0 }, { .children_offset=15307, .match_offset=0 }, { .children_offset=15309, .match_offset=0 }, { .children_offset=15311, .match_offset=0 }, { .children_offset=0, .match_offset=20322 }, { .children_offset=0, .match_offset=15319 }, { .children_offset=15314, .match_offset=0 }, { .children_offset=15316, .match_offset=0 }, { .children_offset=15318, .match_offset=0 }, { .children_offset=15320, .match_offset=0 }, { .children_offset=15322, .match_offset=0 }, { .children_offset=0, .match_offset=103591 }, { .children_offset=0, .match_offset=109346 }, { .children_offset=15324, .match_offset=27643 }, { .children_offset=0, .match_offset=50103 }, { .children_offset=15330, .match_offset=0 }, { .children_offset=15332, .match_offset=0 }, { .children_offset=15335, .match_offset=0 }, { .children_offset=15337, .match_offset=0 }, { .children_offset=15339, .match_offset=0 }, { .children_offset=0, .match_offset=52642 }, { .children_offset=15341, .match_offset=0 }, { .children_offset=0, .match_offset=5614 }, { .children_offset=15343, .match_offset=39044 }, { .children_offset=15346, .match_offset=0 }, { .children_offset=0, .match_offset=80193 }, { .children_offset=15348, .match_offset=0 }, { .children_offset=15350, .match_offset=0 }, { .children_offset=15352, .match_offset=0 }, { .children_offset=15354, .match_offset=0 }, { .children_offset=0, .match_offset=48752 }, { .children_offset=15356, .match_offset=0 }, { .children_offset=15358, .match_offset=0 }, { .children_offset=15360, .match_offset=0 }, { .children_offset=15362, .match_offset=0 }, { .children_offset=0, .match_offset=114232 }, { .children_offset=0, .match_offset=123403 }, { .children_offset=15364, .match_offset=113649 }, { .children_offset=15369, .match_offset=0 }, { .children_offset=0, .match_offset=38418 }, { .children_offset=15374, .match_offset=46889 }, { .children_offset=0, .match_offset=14875 }, { .children_offset=0, .match_offset=72005 }, { .children_offset=0, .match_offset=88015 }, { .children_offset=0, .match_offset=65119 }, { .children_offset=15377, .match_offset=0 }, { .children_offset=15379, .match_offset=0 }, { .children_offset=0, .match_offset=102785 }, { .children_offset=15381, .match_offset=0 }, { .children_offset=0, .match_offset=69032 }, { .children_offset=15383, .match_offset=0 }, { .children_offset=15385, .match_offset=26501 }, { .children_offset=15388, .match_offset=0 }, { .children_offset=15390, .match_offset=0 }, { .children_offset=15392, .match_offset=0 }, { .children_offset=15394, .match_offset=0 }, { .children_offset=15396, .match_offset=0 }, { .children_offset=15398, .match_offset=0 }, { .children_offset=15400, .match_offset=0 }, { .children_offset=15402, .match_offset=0 }, { .children_offset=0, .match_offset=35444 }, { .children_offset=15404, .match_offset=0 }, { .children_offset=15406, .match_offset=0 }, { .children_offset=15409, .match_offset=0 }, { .children_offset=15411, .match_offset=0 }, { .children_offset=15413, .match_offset=0 }, { .children_offset=15415, .match_offset=0 }, { .children_offset=15417, .match_offset=0 }, { .children_offset=15419, .match_offset=0 }, { .children_offset=0, .match_offset=87355 }, { .children_offset=15421, .match_offset=0 }, { .children_offset=0, .match_offset=123251 }, { .children_offset=15423, .match_offset=65173 }, { .children_offset=15425, .match_offset=0 }, { .children_offset=15428, .match_offset=104372 }, { .children_offset=15430, .match_offset=0 }, { .children_offset=15432, .match_offset=0 }, { .children_offset=0, .match_offset=6680 }, { .children_offset=15434, .match_offset=0 }, { .children_offset=15437, .match_offset=0 }, { .children_offset=15439, .match_offset=0 }, { .children_offset=15441, .match_offset=0 }, { .children_offset=15443, .match_offset=0 }, { .children_offset=0, .match_offset=27994 }, { .children_offset=0, .match_offset=126371 }, { .children_offset=15445, .match_offset=46684 }, { .children_offset=0, .match_offset=42333 }, { .children_offset=15447, .match_offset=26279 }, { .children_offset=15454, .match_offset=0 }, { .children_offset=15459, .match_offset=0 }, { .children_offset=15462, .match_offset=0 }, { .children_offset=15464, .match_offset=0 }, { .children_offset=15466, .match_offset=0 }, { .children_offset=15468, .match_offset=0 }, { .children_offset=0, .match_offset=13207 }, { .children_offset=15470, .match_offset=0 }, { .children_offset=0, .match_offset=34944 }, { .children_offset=15472, .match_offset=0 }, { .children_offset=15474, .match_offset=0 }, { .children_offset=15476, .match_offset=0 }, { .children_offset=15478, .match_offset=0 }, { .children_offset=0, .match_offset=57769 }, { .children_offset=15480, .match_offset=0 }, { .children_offset=15482, .match_offset=0 }, { .children_offset=15484, .match_offset=0 }, { .children_offset=15486, .match_offset=0 }, { .children_offset=15488, .match_offset=0 }, { .children_offset=15490, .match_offset=0 }, { .children_offset=0, .match_offset=111198 }, { .children_offset=15492, .match_offset=31011 }, { .children_offset=15494, .match_offset=0 }, { .children_offset=15496, .match_offset=0 }, { .children_offset=15498, .match_offset=0 }, { .children_offset=15500, .match_offset=0 }, { .children_offset=15502, .match_offset=0 }, { .children_offset=15504, .match_offset=0 }, { .children_offset=0, .match_offset=13811 }, { .children_offset=15506, .match_offset=0 }, { .children_offset=15508, .match_offset=0 }, { .children_offset=15511, .match_offset=0 }, { .children_offset=0, .match_offset=118259 }, { .children_offset=15513, .match_offset=0 }, { .children_offset=15515, .match_offset=0 }, { .children_offset=15517, .match_offset=0 }, { .children_offset=15519, .match_offset=0 }, { .children_offset=15521, .match_offset=0 }, { .children_offset=0, .match_offset=102601 }, { .children_offset=15523, .match_offset=0 }, { .children_offset=15525, .match_offset=0 }, { .children_offset=15527, .match_offset=20469 }, { .children_offset=0, .match_offset=42955 }, { .children_offset=0, .match_offset=85428 }, { .children_offset=15529, .match_offset=0 }, { .children_offset=15534, .match_offset=0 }, { .children_offset=15536, .match_offset=0 }, { .children_offset=15538, .match_offset=0 }, { .children_offset=15540, .match_offset=0 }, { .children_offset=15542, .match_offset=0 }, { .children_offset=15544, .match_offset=0 }, { .children_offset=15546, .match_offset=0 }, { .children_offset=0, .match_offset=57501 }, { .children_offset=15548, .match_offset=0 }, { .children_offset=15550, .match_offset=0 }, { .children_offset=15552, .match_offset=0 }, { .children_offset=15554, .match_offset=0 }, { .children_offset=15556, .match_offset=0 }, { .children_offset=0, .match_offset=12604 }, { .children_offset=15558, .match_offset=0 }, { .children_offset=15560, .match_offset=0 }, { .children_offset=15562, .match_offset=0 }, { .children_offset=15564, .match_offset=0 }, { .children_offset=15566, .match_offset=111189 }, { .children_offset=15568, .match_offset=0 }, { .children_offset=15570, .match_offset=0 }, { .children_offset=15572, .match_offset=0 }, { .children_offset=0, .match_offset=114740 }, { .children_offset=15574, .match_offset=0 }, { .children_offset=15576, .match_offset=0 }, { .children_offset=15578, .match_offset=0 }, { .children_offset=15580, .match_offset=0 }, { .children_offset=15582, .match_offset=0 }, { .children_offset=15584, .match_offset=0 }, { .children_offset=15586, .match_offset=0 }, { .children_offset=15588, .match_offset=0 }, { .children_offset=15590, .match_offset=0 }, { .children_offset=15592, .match_offset=0 }, { .children_offset=0, .match_offset=52606 }, { .children_offset=15594, .match_offset=0 }, { .children_offset=15598, .match_offset=0 }, { .children_offset=15600, .match_offset=0 }, { .children_offset=15603, .match_offset=0 }, { .children_offset=15605, .match_offset=0 }, { .children_offset=0, .match_offset=30401 }, { .children_offset=15607, .match_offset=0 }, { .children_offset=15609, .match_offset=0 }, { .children_offset=15611, .match_offset=0 }, { .children_offset=0, .match_offset=125646 }, { .children_offset=15613, .match_offset=0 }, { .children_offset=15615, .match_offset=0 }, { .children_offset=15617, .match_offset=0 }, { .children_offset=15619, .match_offset=0 }, { .children_offset=15621, .match_offset=0 }, { .children_offset=15623, .match_offset=0 }, { .children_offset=15625, .match_offset=0 }, { .children_offset=15627, .match_offset=0 }, { .children_offset=0, .match_offset=33411 }, { .children_offset=15629, .match_offset=0 }, { .children_offset=15632, .match_offset=108088 }, { .children_offset=15635, .match_offset=0 }, { .children_offset=15638, .match_offset=0 }, { .children_offset=15640, .match_offset=0 }, { .children_offset=15642, .match_offset=0 }, { .children_offset=0, .match_offset=109603 }, { .children_offset=15644, .match_offset=0 }, { .children_offset=15646, .match_offset=0 }, { .children_offset=0, .match_offset=130272 }, { .children_offset=15648, .match_offset=0 }, { .children_offset=15650, .match_offset=0 }, { .children_offset=15652, .match_offset=0 }, { .children_offset=15654, .match_offset=0 }, { .children_offset=15656, .match_offset=0 }, { .children_offset=15658, .match_offset=0 }, { .children_offset=15660, .match_offset=0 }, { .children_offset=15662, .match_offset=0 }, { .children_offset=15664, .match_offset=0 }, { .children_offset=15666, .match_offset=0 }, { .children_offset=0, .match_offset=89254 }, { .children_offset=15668, .match_offset=0 }, { .children_offset=15670, .match_offset=0 }, { .children_offset=15672, .match_offset=0 }, { .children_offset=15674, .match_offset=0 }, { .children_offset=0, .match_offset=48741 }, { .children_offset=15676, .match_offset=0 }, { .children_offset=15682, .match_offset=0 }, { .children_offset=15684, .match_offset=0 }, { .children_offset=15686, .match_offset=0 }, { .children_offset=0, .match_offset=130092 }, { .children_offset=15688, .match_offset=0 }, { .children_offset=15690, .match_offset=0 }, { .children_offset=15692, .match_offset=0 }, { .children_offset=15694, .match_offset=0 }, { .children_offset=15696, .match_offset=0 }, { .children_offset=15698, .match_offset=0 }, { .children_offset=0, .match_offset=46189 }, { .children_offset=15700, .match_offset=58918 }, { .children_offset=15705, .match_offset=0 }, { .children_offset=15707, .match_offset=0 }, { .children_offset=15709, .match_offset=0 }, { .children_offset=15711, .match_offset=102677 }, { .children_offset=0, .match_offset=124918 }, { .children_offset=15713, .match_offset=0 }, { .children_offset=15716, .match_offset=0 }, { .children_offset=15718, .match_offset=0 }, { .children_offset=15720, .match_offset=0 }, { .children_offset=15722, .match_offset=0 }, { .children_offset=15725, .match_offset=0 }, { .children_offset=15727, .match_offset=0 }, { .children_offset=15729, .match_offset=0 }, { .children_offset=15731, .match_offset=0 }, { .children_offset=15733, .match_offset=0 }, { .children_offset=15735, .match_offset=0 }, { .children_offset=15737, .match_offset=0 }, { .children_offset=15739, .match_offset=0 }, { .children_offset=15741, .match_offset=0 }, { .children_offset=0, .match_offset=26586 }, { .children_offset=15743, .match_offset=0 }, { .children_offset=15745, .match_offset=0 }, { .children_offset=15747, .match_offset=0 }, { .children_offset=15749, .match_offset=0 }, { .children_offset=15751, .match_offset=0 }, { .children_offset=15753, .match_offset=0 }, { .children_offset=15755, .match_offset=0 }, { .children_offset=15757, .match_offset=0 }, { .children_offset=0, .match_offset=130927 }, { .children_offset=15759, .match_offset=0 }, { .children_offset=15761, .match_offset=0 }, { .children_offset=15763, .match_offset=0 }, { .children_offset=15765, .match_offset=0 }, { .children_offset=15767, .match_offset=0 }, { .children_offset=0, .match_offset=123216 }, { .children_offset=15769, .match_offset=0 }, { .children_offset=15771, .match_offset=0 }, { .children_offset=15773, .match_offset=0 }, { .children_offset=15775, .match_offset=0 }, { .children_offset=15777, .match_offset=0 }, { .children_offset=0, .match_offset=33887 }, { .children_offset=0, .match_offset=52549 }, { .children_offset=0, .match_offset=34423 }, { .children_offset=15779, .match_offset=0 }, { .children_offset=0, .match_offset=65555 }, { .children_offset=15781, .match_offset=68834 }, { .children_offset=15785, .match_offset=0 }, { .children_offset=0, .match_offset=87094 }, { .children_offset=0, .match_offset=77414 }, { .children_offset=0, .match_offset=68645 }, { .children_offset=15787, .match_offset=0 }, { .children_offset=0, .match_offset=27889 }, { .children_offset=15807, .match_offset=0 }, { .children_offset=15814, .match_offset=0 }, { .children_offset=15824, .match_offset=84861 }, { .children_offset=0, .match_offset=125733 }, { .children_offset=0, .match_offset=114469 }, { .children_offset=0, .match_offset=87809 }, { .children_offset=0, .match_offset=15052 }, { .children_offset=0, .match_offset=74562 }, { .children_offset=0, .match_offset=14907 }, { .children_offset=0, .match_offset=72328 }, { .children_offset=0, .match_offset=58265 }, { .children_offset=0, .match_offset=55020 }, { .children_offset=15826, .match_offset=0 }, { .children_offset=0, .match_offset=119274 }, { .children_offset=0, .match_offset=123218 }, { .children_offset=0, .match_offset=59043 }, { .children_offset=15837, .match_offset=125703 }, { .children_offset=0, .match_offset=131503 }, { .children_offset=0, .match_offset=42377 }, { .children_offset=0, .match_offset=57372 }, { .children_offset=0, .match_offset=16103 }, { .children_offset=0, .match_offset=46879 }, { .children_offset=0, .match_offset=55804 }, { .children_offset=0, .match_offset=53532 }, { .children_offset=15839, .match_offset=0 }, { .children_offset=0, .match_offset=45938 }, { .children_offset=15850, .match_offset=16021 }, { .children_offset=0, .match_offset=129978 }, { .children_offset=0, .match_offset=44783 }, { .children_offset=0, .match_offset=12404 }, { .children_offset=0, .match_offset=130041 }, { .children_offset=0, .match_offset=71283 }, { .children_offset=0, .match_offset=8454 }, { .children_offset=0, .match_offset=89114 }, { .children_offset=0, .match_offset=73750 }, { .children_offset=0, .match_offset=77235 }, { .children_offset=15852, .match_offset=0 }, { .children_offset=0, .match_offset=11083 }, { .children_offset=15863, .match_offset=104012 }, { .children_offset=0, .match_offset=73844 }, { .children_offset=0, .match_offset=103581 }, { .children_offset=0, .match_offset=123742 }, { .children_offset=0, .match_offset=9027 }, { .children_offset=0, .match_offset=6809 }, { .children_offset=0, .match_offset=113659 }, { .children_offset=15865, .match_offset=33451 }, { .children_offset=0, .match_offset=119427 }, { .children_offset=15867, .match_offset=5765 }, { .children_offset=0, .match_offset=15696 }, { .children_offset=0, .match_offset=22316 }, { .children_offset=15869, .match_offset=0 }, { .children_offset=0, .match_offset=62272 }, { .children_offset=0, .match_offset=16371 }, { .children_offset=0, .match_offset=114620 }, { .children_offset=0, .match_offset=124975 }, { .children_offset=0, .match_offset=15048 }, { .children_offset=15880, .match_offset=13390 }, { .children_offset=0, .match_offset=27972 }, { .children_offset=15882, .match_offset=40582 }, { .children_offset=0, .match_offset=110930 }, { .children_offset=15884, .match_offset=53627 }, { .children_offset=0, .match_offset=10925 }, { .children_offset=0, .match_offset=68497 }, { .children_offset=0, .match_offset=35182 }, { .children_offset=15886, .match_offset=0 }, { .children_offset=0, .match_offset=55681 }, { .children_offset=15891, .match_offset=50588 }, { .children_offset=0, .match_offset=10779 }, { .children_offset=0, .match_offset=109473 }, { .children_offset=0, .match_offset=73473 }, { .children_offset=0, .match_offset=15329 }, { .children_offset=0, .match_offset=125620 }, { .children_offset=15895, .match_offset=133400 }, { .children_offset=15911, .match_offset=56880 }, { .children_offset=15915, .match_offset=0 }, { .children_offset=0, .match_offset=38674 }, { .children_offset=0, .match_offset=109233 }, { .children_offset=15917, .match_offset=0 }, { .children_offset=15919, .match_offset=0 }, { .children_offset=0, .match_offset=54253 }, { .children_offset=15921, .match_offset=0 }, { .children_offset=15926, .match_offset=56993 }, { .children_offset=15928, .match_offset=0 }, { .children_offset=0, .match_offset=51173 }, { .children_offset=0, .match_offset=67651 }, { .children_offset=0, .match_offset=87827 }, { .children_offset=0, .match_offset=6605 }, { .children_offset=0, .match_offset=68766 }, { .children_offset=0, .match_offset=45930 }, { .children_offset=15935, .match_offset=0 }, { .children_offset=15937, .match_offset=0 }, { .children_offset=15939, .match_offset=53981 }, { .children_offset=0, .match_offset=62662 }, { .children_offset=15941, .match_offset=0 }, { .children_offset=15943, .match_offset=0 }, { .children_offset=15945, .match_offset=0 }, { .children_offset=15947, .match_offset=0 }, { .children_offset=15949, .match_offset=0 }, { .children_offset=0, .match_offset=20441 }, { .children_offset=15951, .match_offset=0 }, { .children_offset=15953, .match_offset=0 }, { .children_offset=15955, .match_offset=35740 }, { .children_offset=0, .match_offset=77440 }, { .children_offset=15957, .match_offset=0 }, { .children_offset=15959, .match_offset=0 }, { .children_offset=15961, .match_offset=0 }, { .children_offset=15963, .match_offset=0 }, { .children_offset=15965, .match_offset=0 }, { .children_offset=15967, .match_offset=0 }, { .children_offset=15969, .match_offset=0 }, { .children_offset=0, .match_offset=45952 }, { .children_offset=15971, .match_offset=0 }, { .children_offset=0, .match_offset=58531 }, { .children_offset=15976, .match_offset=0 }, { .children_offset=0, .match_offset=26812 }, { .children_offset=15978, .match_offset=0 }, { .children_offset=15980, .match_offset=0 }, { .children_offset=15982, .match_offset=0 }, { .children_offset=0, .match_offset=22491 }, { .children_offset=15984, .match_offset=0 }, { .children_offset=0, .match_offset=12320 }, { .children_offset=0, .match_offset=25746 }, { .children_offset=15986, .match_offset=0 }, { .children_offset=15989, .match_offset=0 }, { .children_offset=15991, .match_offset=0 }, { .children_offset=15993, .match_offset=0 }, { .children_offset=0, .match_offset=89985 }, { .children_offset=15995, .match_offset=0 }, { .children_offset=15998, .match_offset=0 }, { .children_offset=0, .match_offset=27832 }, { .children_offset=16000, .match_offset=0 }, { .children_offset=16002, .match_offset=0 }, { .children_offset=16004, .match_offset=125074 }, { .children_offset=16006, .match_offset=0 }, { .children_offset=16008, .match_offset=0 }, { .children_offset=16010, .match_offset=0 }, { .children_offset=16012, .match_offset=0 }, { .children_offset=16014, .match_offset=0 }, { .children_offset=0, .match_offset=55505 }, { .children_offset=16016, .match_offset=65255 }, { .children_offset=16018, .match_offset=0 }, { .children_offset=16020, .match_offset=0 }, { .children_offset=0, .match_offset=61548 }, { .children_offset=16022, .match_offset=35167 }, { .children_offset=16025, .match_offset=0 }, { .children_offset=16027, .match_offset=0 }, { .children_offset=16029, .match_offset=0 }, { .children_offset=16031, .match_offset=0 }, { .children_offset=16033, .match_offset=0 }, { .children_offset=0, .match_offset=100970 }, { .children_offset=0, .match_offset=116042 }, { .children_offset=0, .match_offset=24249 }, { .children_offset=0, .match_offset=39452 }, { .children_offset=16035, .match_offset=103928 }, { .children_offset=16037, .match_offset=0 }, { .children_offset=0, .match_offset=71517 }, { .children_offset=16039, .match_offset=0 }, { .children_offset=0, .match_offset=132168 }, { .children_offset=16041, .match_offset=132184 }, { .children_offset=16044, .match_offset=0 }, { .children_offset=16047, .match_offset=65408 }, { .children_offset=16049, .match_offset=0 }, { .children_offset=16051, .match_offset=0 }, { .children_offset=0, .match_offset=63031 }, { .children_offset=16053, .match_offset=0 }, { .children_offset=0, .match_offset=81095 }, { .children_offset=16055, .match_offset=0 }, { .children_offset=16057, .match_offset=0 }, { .children_offset=16059, .match_offset=0 }, { .children_offset=0, .match_offset=113723 }, { .children_offset=0, .match_offset=87293 }, { .children_offset=16061, .match_offset=0 }, { .children_offset=16063, .match_offset=0 }, { .children_offset=16065, .match_offset=0 }, { .children_offset=16067, .match_offset=0 }, { .children_offset=0, .match_offset=34640 }, { .children_offset=16069, .match_offset=0 }, { .children_offset=0, .match_offset=28703 }, { .children_offset=16071, .match_offset=58578 }, { .children_offset=16085, .match_offset=0 }, { .children_offset=16088, .match_offset=5745 }, { .children_offset=16091, .match_offset=0 }, { .children_offset=16093, .match_offset=0 }, { .children_offset=0, .match_offset=104073 }, { .children_offset=0, .match_offset=123442 }, { .children_offset=16095, .match_offset=0 }, { .children_offset=16097, .match_offset=0 }, { .children_offset=16099, .match_offset=0 }, { .children_offset=0, .match_offset=111442 }, { .children_offset=16101, .match_offset=0 }, { .children_offset=16103, .match_offset=0 }, { .children_offset=16105, .match_offset=0 }, { .children_offset=16107, .match_offset=0 }, { .children_offset=16109, .match_offset=0 }, { .children_offset=0, .match_offset=77240 }, { .children_offset=16111, .match_offset=22212 }, { .children_offset=0, .match_offset=14365 }, { .children_offset=0, .match_offset=134845 }, { .children_offset=16115, .match_offset=0 }, { .children_offset=0, .match_offset=55032 }, { .children_offset=16117, .match_offset=26151 }, { .children_offset=0, .match_offset=35377 }, { .children_offset=0, .match_offset=6661 }, { .children_offset=16119, .match_offset=0 }, { .children_offset=16121, .match_offset=0 }, { .children_offset=16123, .match_offset=0 }, { .children_offset=16125, .match_offset=0 }, { .children_offset=16127, .match_offset=0 }, { .children_offset=16129, .match_offset=0 }, { .children_offset=16131, .match_offset=0 }, { .children_offset=0, .match_offset=52271 }, { .children_offset=16133, .match_offset=0 }, { .children_offset=16136, .match_offset=0 }, { .children_offset=16138, .match_offset=0 }, { .children_offset=0, .match_offset=122478 }, { .children_offset=16140, .match_offset=0 }, { .children_offset=16142, .match_offset=0 }, { .children_offset=16144, .match_offset=0 }, { .children_offset=16146, .match_offset=0 }, { .children_offset=0, .match_offset=43050 }, { .children_offset=16148, .match_offset=0 }, { .children_offset=16151, .match_offset=0 }, { .children_offset=16153, .match_offset=25185 }, { .children_offset=0, .match_offset=103697 }, { .children_offset=0, .match_offset=8 }, { .children_offset=16155, .match_offset=0 }, { .children_offset=0, .match_offset=35377 }, { .children_offset=16157, .match_offset=0 }, { .children_offset=16160, .match_offset=0 }, { .children_offset=16162, .match_offset=0 }, { .children_offset=16164, .match_offset=0 }, { .children_offset=0, .match_offset=116167 }, { .children_offset=16166, .match_offset=0 }, { .children_offset=16169, .match_offset=0 }, { .children_offset=0, .match_offset=79020 }, { .children_offset=0, .match_offset=77402 }, { .children_offset=16171, .match_offset=0 }, { .children_offset=16173, .match_offset=0 }, { .children_offset=16175, .match_offset=0 }, { .children_offset=16177, .match_offset=0 }, { .children_offset=16179, .match_offset=0 }, { .children_offset=0, .match_offset=26217 }, { .children_offset=16181, .match_offset=0 }, { .children_offset=0, .match_offset=132825 }, { .children_offset=16183, .match_offset=0 }, { .children_offset=16186, .match_offset=0 }, { .children_offset=16188, .match_offset=0 }, { .children_offset=16190, .match_offset=0 }, { .children_offset=16192, .match_offset=0 }, { .children_offset=16194, .match_offset=0 }, { .children_offset=0, .match_offset=74358 }, { .children_offset=0, .match_offset=124745 }, { .children_offset=16196, .match_offset=12507 }, { .children_offset=16200, .match_offset=37902 }, { .children_offset=16202, .match_offset=0 }, { .children_offset=16204, .match_offset=0 }, { .children_offset=0, .match_offset=37902 }, { .children_offset=16206, .match_offset=88579 }, { .children_offset=16209, .match_offset=0 }, { .children_offset=0, .match_offset=12507 }, { .children_offset=16211, .match_offset=0 }, { .children_offset=16213, .match_offset=0 }, { .children_offset=0, .match_offset=88579 }, { .children_offset=0, .match_offset=78661 }, { .children_offset=16215, .match_offset=0 }, { .children_offset=16217, .match_offset=0 }, { .children_offset=16219, .match_offset=0 }, { .children_offset=16221, .match_offset=0 }, { .children_offset=0, .match_offset=21978 }, { .children_offset=16223, .match_offset=11012 }, { .children_offset=16236, .match_offset=0 }, { .children_offset=16238, .match_offset=0 }, { .children_offset=0, .match_offset=42397 }, { .children_offset=16240, .match_offset=0 }, { .children_offset=16242, .match_offset=0 }, { .children_offset=16246, .match_offset=0 }, { .children_offset=16248, .match_offset=0 }, { .children_offset=0, .match_offset=64483 }, { .children_offset=16250, .match_offset=5566 }, { .children_offset=0, .match_offset=25762 }, { .children_offset=0, .match_offset=125282 }, { .children_offset=16252, .match_offset=0 }, { .children_offset=16255, .match_offset=0 }, { .children_offset=0, .match_offset=37506 }, { .children_offset=16257, .match_offset=0 }, { .children_offset=16259, .match_offset=0 }, { .children_offset=16261, .match_offset=124742 }, { .children_offset=16263, .match_offset=0 }, { .children_offset=0, .match_offset=28605 }, { .children_offset=0, .match_offset=87299 }, { .children_offset=0, .match_offset=74241 }, { .children_offset=0, .match_offset=68427 }, { .children_offset=16267, .match_offset=0 }, { .children_offset=0, .match_offset=26454 }, { .children_offset=16272, .match_offset=0 }, { .children_offset=0, .match_offset=14977 }, { .children_offset=16274, .match_offset=77185 }, { .children_offset=16276, .match_offset=0 }, { .children_offset=16279, .match_offset=113118 }, { .children_offset=16282, .match_offset=0 }, { .children_offset=16284, .match_offset=0 }, { .children_offset=16286, .match_offset=0 }, { .children_offset=16288, .match_offset=0 }, { .children_offset=16290, .match_offset=0 }, { .children_offset=16292, .match_offset=0 }, { .children_offset=16294, .match_offset=0 }, { .children_offset=16296, .match_offset=0 }, { .children_offset=16298, .match_offset=0 }, { .children_offset=16300, .match_offset=0 }, { .children_offset=0, .match_offset=33353 }, { .children_offset=16302, .match_offset=0 }, { .children_offset=16304, .match_offset=0 }, { .children_offset=16306, .match_offset=0 }, { .children_offset=16308, .match_offset=0 }, { .children_offset=16310, .match_offset=0 }, { .children_offset=16312, .match_offset=0 }, { .children_offset=16314, .match_offset=0 }, { .children_offset=16316, .match_offset=0 }, { .children_offset=16318, .match_offset=0 }, { .children_offset=16320, .match_offset=0 }, { .children_offset=16322, .match_offset=0 }, { .children_offset=16324, .match_offset=0 }, { .children_offset=16326, .match_offset=0 }, { .children_offset=16328, .match_offset=0 }, { .children_offset=0, .match_offset=5555 }, { .children_offset=16330, .match_offset=29930 }, { .children_offset=16332, .match_offset=0 }, { .children_offset=0, .match_offset=69118 }, { .children_offset=0, .match_offset=104393 }, { .children_offset=0, .match_offset=33936 }, { .children_offset=16335, .match_offset=0 }, { .children_offset=16339, .match_offset=0 }, { .children_offset=0, .match_offset=116570 }, { .children_offset=16342, .match_offset=0 }, { .children_offset=16344, .match_offset=0 }, { .children_offset=16346, .match_offset=0 }, { .children_offset=16348, .match_offset=0 }, { .children_offset=0, .match_offset=37892 }, { .children_offset=16350, .match_offset=0 }, { .children_offset=16352, .match_offset=0 }, { .children_offset=16354, .match_offset=11898 }, { .children_offset=16359, .match_offset=0 }, { .children_offset=16361, .match_offset=0 }, { .children_offset=16363, .match_offset=0 }, { .children_offset=16365, .match_offset=0 }, { .children_offset=0, .match_offset=42656 }, { .children_offset=16367, .match_offset=0 }, { .children_offset=0, .match_offset=81109 }, { .children_offset=16369, .match_offset=0 }, { .children_offset=16371, .match_offset=0 }, { .children_offset=16373, .match_offset=0 }, { .children_offset=16375, .match_offset=0 }, { .children_offset=0, .match_offset=24256 }, { .children_offset=0, .match_offset=116048 }, { .children_offset=16377, .match_offset=0 }, { .children_offset=16379, .match_offset=0 }, { .children_offset=0, .match_offset=20453 }, { .children_offset=0, .match_offset=103453 }, { .children_offset=16381, .match_offset=0 }, { .children_offset=16385, .match_offset=54386 }, { .children_offset=16388, .match_offset=0 }, { .children_offset=16390, .match_offset=0 }, { .children_offset=16392, .match_offset=0 }, { .children_offset=16394, .match_offset=0 }, { .children_offset=16396, .match_offset=0 }, { .children_offset=16398, .match_offset=0 }, { .children_offset=0, .match_offset=25553 }, { .children_offset=16400, .match_offset=0 }, { .children_offset=16402, .match_offset=0 }, { .children_offset=16404, .match_offset=0 }, { .children_offset=16406, .match_offset=49891 }, { .children_offset=0, .match_offset=12349 }, { .children_offset=0, .match_offset=13348 }, { .children_offset=16408, .match_offset=0 }, { .children_offset=16410, .match_offset=86685 }, { .children_offset=0, .match_offset=65507 }, { .children_offset=16412, .match_offset=0 }, { .children_offset=16415, .match_offset=72141 }, { .children_offset=16419, .match_offset=0 }, { .children_offset=16421, .match_offset=0 }, { .children_offset=0, .match_offset=43013 }, { .children_offset=16423, .match_offset=0 }, { .children_offset=16425, .match_offset=0 }, { .children_offset=16427, .match_offset=0 }, { .children_offset=0, .match_offset=118243 }, { .children_offset=16429, .match_offset=0 }, { .children_offset=16431, .match_offset=0 }, { .children_offset=0, .match_offset=87849 }, { .children_offset=16433, .match_offset=134956 }, { .children_offset=16435, .match_offset=0 }, { .children_offset=0, .match_offset=32898 }, { .children_offset=16437, .match_offset=60033 }, { .children_offset=0, .match_offset=110375 }, { .children_offset=16440, .match_offset=0 }, { .children_offset=16442, .match_offset=0 }, { .children_offset=16444, .match_offset=0 }, { .children_offset=16446, .match_offset=0 }, { .children_offset=16448, .match_offset=0 }, { .children_offset=16450, .match_offset=0 }, { .children_offset=16452, .match_offset=0 }, { .children_offset=0, .match_offset=27171 }, { .children_offset=16454, .match_offset=0 }, { .children_offset=16456, .match_offset=50365 }, { .children_offset=16458, .match_offset=0 }, { .children_offset=16461, .match_offset=0 }, { .children_offset=16463, .match_offset=0 }, { .children_offset=16465, .match_offset=0 }, { .children_offset=0, .match_offset=54398 }, { .children_offset=16467, .match_offset=0 }, { .children_offset=16469, .match_offset=0 }, { .children_offset=16471, .match_offset=0 }, { .children_offset=16473, .match_offset=0 }, { .children_offset=16475, .match_offset=0 }, { .children_offset=0, .match_offset=57513 }, { .children_offset=16477, .match_offset=73505 }, { .children_offset=16479, .match_offset=0 }, { .children_offset=16481, .match_offset=0 }, { .children_offset=16483, .match_offset=0 }, { .children_offset=16485, .match_offset=0 }, { .children_offset=16487, .match_offset=0 }, { .children_offset=16489, .match_offset=0 }, { .children_offset=0, .match_offset=7518 }, { .children_offset=16491, .match_offset=87460 }, { .children_offset=16500, .match_offset=48594 }, { .children_offset=16505, .match_offset=133528 }, { .children_offset=16508, .match_offset=0 }, { .children_offset=0, .match_offset=63434 }, { .children_offset=0, .match_offset=68489 }, { .children_offset=0, .match_offset=78405 }, { .children_offset=0, .match_offset=38691 }, { .children_offset=0, .match_offset=136033 }, { .children_offset=0, .match_offset=22025 }, { .children_offset=16514, .match_offset=0 }, { .children_offset=0, .match_offset=103330 }, { .children_offset=16517, .match_offset=0 }, { .children_offset=16519, .match_offset=0 }, { .children_offset=16521, .match_offset=0 }, { .children_offset=0, .match_offset=124854 }, { .children_offset=16523, .match_offset=0 }, { .children_offset=0, .match_offset=110892 }, { .children_offset=16525, .match_offset=109334 }, { .children_offset=16529, .match_offset=0 }, { .children_offset=16531, .match_offset=0 }, { .children_offset=16533, .match_offset=0 }, { .children_offset=16535, .match_offset=0 }, { .children_offset=0, .match_offset=118548 }, { .children_offset=16537, .match_offset=0 }, { .children_offset=16539, .match_offset=0 }, { .children_offset=16541, .match_offset=0 }, { .children_offset=0, .match_offset=100928 }, { .children_offset=16543, .match_offset=0 }, { .children_offset=16545, .match_offset=0 }, { .children_offset=16547, .match_offset=0 }, { .children_offset=16549, .match_offset=0 }, { .children_offset=0, .match_offset=132469 }, { .children_offset=16551, .match_offset=0 }, { .children_offset=16554, .match_offset=0 }, { .children_offset=16556, .match_offset=0 }, { .children_offset=16559, .match_offset=0 }, { .children_offset=16561, .match_offset=0 }, { .children_offset=16563, .match_offset=0 }, { .children_offset=16565, .match_offset=0 }, { .children_offset=16567, .match_offset=0 }, { .children_offset=16569, .match_offset=0 }, { .children_offset=0, .match_offset=108160 }, { .children_offset=16571, .match_offset=0 }, { .children_offset=0, .match_offset=89667 }, { .children_offset=16573, .match_offset=52595 }, { .children_offset=16576, .match_offset=0 }, { .children_offset=0, .match_offset=82021 }, { .children_offset=16578, .match_offset=0 }, { .children_offset=0, .match_offset=111455 }, { .children_offset=16580, .match_offset=0 }, { .children_offset=16584, .match_offset=0 }, { .children_offset=0, .match_offset=109258 }, { .children_offset=16586, .match_offset=0 }, { .children_offset=16588, .match_offset=0 }, { .children_offset=0, .match_offset=40152 }, { .children_offset=0, .match_offset=68762 }, { .children_offset=16590, .match_offset=0 }, { .children_offset=16592, .match_offset=0 }, { .children_offset=0, .match_offset=87460 }, { .children_offset=16594, .match_offset=0 }, { .children_offset=16600, .match_offset=0 }, { .children_offset=16602, .match_offset=40592 }, { .children_offset=16604, .match_offset=0 }, { .children_offset=16606, .match_offset=0 }, { .children_offset=16608, .match_offset=0 }, { .children_offset=16610, .match_offset=0 }, { .children_offset=0, .match_offset=74178 }, { .children_offset=16612, .match_offset=0 }, { .children_offset=16614, .match_offset=0 }, { .children_offset=0, .match_offset=71495 }, { .children_offset=16616, .match_offset=0 }, { .children_offset=16619, .match_offset=0 }, { .children_offset=0, .match_offset=37959 }, { .children_offset=16621, .match_offset=0 }, { .children_offset=16623, .match_offset=0 }, { .children_offset=16625, .match_offset=0 }, { .children_offset=0, .match_offset=132908 }, { .children_offset=16627, .match_offset=0 }, { .children_offset=16629, .match_offset=0 }, { .children_offset=16631, .match_offset=0 }, { .children_offset=16633, .match_offset=0 }, { .children_offset=0, .match_offset=121963 }, { .children_offset=16635, .match_offset=0 }, { .children_offset=16638, .match_offset=0 }, { .children_offset=16640, .match_offset=1871 }, { .children_offset=0, .match_offset=11059 }, { .children_offset=16642, .match_offset=0 }, { .children_offset=16644, .match_offset=0 }, { .children_offset=0, .match_offset=130081 }, { .children_offset=16646, .match_offset=0 }, { .children_offset=16648, .match_offset=0 }, { .children_offset=0, .match_offset=46776 }, { .children_offset=16650, .match_offset=0 }, { .children_offset=16653, .match_offset=0 }, { .children_offset=16655, .match_offset=0 }, { .children_offset=16657, .match_offset=0 }, { .children_offset=0, .match_offset=89346 }, { .children_offset=16659, .match_offset=0 }, { .children_offset=0, .match_offset=55855 }, { .children_offset=16662, .match_offset=0 }, { .children_offset=16664, .match_offset=0 }, { .children_offset=16666, .match_offset=0 }, { .children_offset=16668, .match_offset=0 }, { .children_offset=16670, .match_offset=0 }, { .children_offset=0, .match_offset=34547 }, { .children_offset=16672, .match_offset=22114 }, { .children_offset=16674, .match_offset=0 }, { .children_offset=16676, .match_offset=0 }, { .children_offset=0, .match_offset=89119 }, { .children_offset=0, .match_offset=132930 }, { .children_offset=16678, .match_offset=0 }, { .children_offset=16680, .match_offset=0 }, { .children_offset=0, .match_offset=28575 }, { .children_offset=16682, .match_offset=37547 }, { .children_offset=16693, .match_offset=111149 }, { .children_offset=16695, .match_offset=0 }, { .children_offset=0, .match_offset=104040 }, { .children_offset=16697, .match_offset=0 }, { .children_offset=16700, .match_offset=0 }, { .children_offset=16702, .match_offset=0 }, { .children_offset=0, .match_offset=7595 }, { .children_offset=0, .match_offset=41882 }, { .children_offset=16705, .match_offset=0 }, { .children_offset=16708, .match_offset=0 }, { .children_offset=16710, .match_offset=0 }, { .children_offset=16712, .match_offset=0 }, { .children_offset=16714, .match_offset=0 }, { .children_offset=0, .match_offset=109220 }, { .children_offset=0, .match_offset=30810 }, { .children_offset=0, .match_offset=16656 }, { .children_offset=16716, .match_offset=125039 }, { .children_offset=16719, .match_offset=0 }, { .children_offset=16721, .match_offset=0 }, { .children_offset=16723, .match_offset=0 }, { .children_offset=0, .match_offset=35848 }, { .children_offset=0, .match_offset=7092 }, { .children_offset=16725, .match_offset=74184 }, { .children_offset=0, .match_offset=100936 }, { .children_offset=0, .match_offset=42224 }, { .children_offset=16729, .match_offset=28271 }, { .children_offset=16734, .match_offset=0 }, { .children_offset=16736, .match_offset=0 }, { .children_offset=16738, .match_offset=0 }, { .children_offset=0, .match_offset=8493 }, { .children_offset=16740, .match_offset=0 }, { .children_offset=16742, .match_offset=0 }, { .children_offset=16744, .match_offset=0 }, { .children_offset=0, .match_offset=136238 }, { .children_offset=16746, .match_offset=0 }, { .children_offset=16748, .match_offset=0 }, { .children_offset=16750, .match_offset=0 }, { .children_offset=16752, .match_offset=0 }, { .children_offset=16754, .match_offset=0 }, { .children_offset=0, .match_offset=45039 }, { .children_offset=16756, .match_offset=0 }, { .children_offset=16758, .match_offset=0 }, { .children_offset=16760, .match_offset=0 }, { .children_offset=16762, .match_offset=0 }, { .children_offset=0, .match_offset=60705 }, { .children_offset=16764, .match_offset=33341 }, { .children_offset=0, .match_offset=58245 }, { .children_offset=16766, .match_offset=133701 }, { .children_offset=16774, .match_offset=0 }, { .children_offset=16776, .match_offset=0 }, { .children_offset=0, .match_offset=64565 }, { .children_offset=16778, .match_offset=0 }, { .children_offset=16780, .match_offset=30108 }, { .children_offset=0, .match_offset=111475 }, { .children_offset=16782, .match_offset=0 }, { .children_offset=16784, .match_offset=0 }, { .children_offset=16786, .match_offset=0 }, { .children_offset=16788, .match_offset=0 }, { .children_offset=0, .match_offset=20611 }, { .children_offset=16790, .match_offset=57937 }, { .children_offset=16794, .match_offset=0 }, { .children_offset=0, .match_offset=60423 }, { .children_offset=16796, .match_offset=0 }, { .children_offset=16798, .match_offset=0 }, { .children_offset=0, .match_offset=129297 }, { .children_offset=0, .match_offset=12408 }, { .children_offset=16800, .match_offset=24367 }, { .children_offset=16804, .match_offset=0 }, { .children_offset=16806, .match_offset=87451 }, { .children_offset=16808, .match_offset=0 }, { .children_offset=16810, .match_offset=0 }, { .children_offset=16812, .match_offset=0 }, { .children_offset=0, .match_offset=90663 }, { .children_offset=16814, .match_offset=0 }, { .children_offset=0, .match_offset=46652 }, { .children_offset=0, .match_offset=60480 }, { .children_offset=16816, .match_offset=0 }, { .children_offset=0, .match_offset=73230 }, { .children_offset=16821, .match_offset=0 }, { .children_offset=16823, .match_offset=0 }, { .children_offset=16825, .match_offset=0 }, { .children_offset=0, .match_offset=133077 }, { .children_offset=16827, .match_offset=0 }, { .children_offset=16829, .match_offset=0 }, { .children_offset=0, .match_offset=20405 }, { .children_offset=16831, .match_offset=123810 }, { .children_offset=16833, .match_offset=0 }, { .children_offset=16835, .match_offset=0 }, { .children_offset=16837, .match_offset=0 }, { .children_offset=16839, .match_offset=0 }, { .children_offset=0, .match_offset=26591 }, { .children_offset=16841, .match_offset=0 }, { .children_offset=16843, .match_offset=0 }, { .children_offset=16845, .match_offset=0 }, { .children_offset=0, .match_offset=7036 }, { .children_offset=16847, .match_offset=0 }, { .children_offset=16849, .match_offset=0 }, { .children_offset=16851, .match_offset=0 }, { .children_offset=16853, .match_offset=0 }, { .children_offset=16855, .match_offset=0 }, { .children_offset=16857, .match_offset=0 }, { .children_offset=0, .match_offset=132478 }, { .children_offset=16859, .match_offset=0 }, { .children_offset=16862, .match_offset=0 }, { .children_offset=16864, .match_offset=0 }, { .children_offset=16866, .match_offset=0 }, { .children_offset=16868, .match_offset=0 }, { .children_offset=0, .match_offset=122337 }, { .children_offset=16870, .match_offset=15725 }, { .children_offset=16874, .match_offset=0 }, { .children_offset=16879, .match_offset=0 }, { .children_offset=16881, .match_offset=0 }, { .children_offset=16883, .match_offset=0 }, { .children_offset=0, .match_offset=66447 }, { .children_offset=16885, .match_offset=0 }, { .children_offset=16887, .match_offset=0 }, { .children_offset=16889, .match_offset=0 }, { .children_offset=16891, .match_offset=0 }, { .children_offset=16893, .match_offset=0 }, { .children_offset=0, .match_offset=38424 }, { .children_offset=16895, .match_offset=0 }, { .children_offset=16897, .match_offset=0 }, { .children_offset=16899, .match_offset=0 }, { .children_offset=16901, .match_offset=0 }, { .children_offset=16903, .match_offset=0 }, { .children_offset=0, .match_offset=114618 }, { .children_offset=16905, .match_offset=0 }, { .children_offset=16907, .match_offset=0 }, { .children_offset=16909, .match_offset=0 }, { .children_offset=16911, .match_offset=0 }, { .children_offset=16913, .match_offset=0 }, { .children_offset=0, .match_offset=22557 }, { .children_offset=16915, .match_offset=0 }, { .children_offset=16917, .match_offset=0 }, { .children_offset=16919, .match_offset=0 }, { .children_offset=16921, .match_offset=0 }, { .children_offset=16923, .match_offset=0 }, { .children_offset=0, .match_offset=46010 }, { .children_offset=16925, .match_offset=0 }, { .children_offset=16928, .match_offset=0 }, { .children_offset=16930, .match_offset=0 }, { .children_offset=0, .match_offset=86289 }, { .children_offset=0, .match_offset=89539 }, { .children_offset=0, .match_offset=65051 }, { .children_offset=16932, .match_offset=0 }, { .children_offset=16934, .match_offset=0 }, { .children_offset=16936, .match_offset=0 }, { .children_offset=16938, .match_offset=0 }, { .children_offset=16940, .match_offset=0 }, { .children_offset=16942, .match_offset=0 }, { .children_offset=0, .match_offset=20453 }, { .children_offset=16944, .match_offset=0 }, { .children_offset=16949, .match_offset=0 }, { .children_offset=16956, .match_offset=0 }, { .children_offset=16964, .match_offset=0 }, { .children_offset=0, .match_offset=55264 }, { .children_offset=0, .match_offset=81054 }, { .children_offset=0, .match_offset=14277 }, { .children_offset=0, .match_offset=61101 }, { .children_offset=0, .match_offset=109849 }, { .children_offset=0, .match_offset=109094 }, { .children_offset=16971, .match_offset=0 }, { .children_offset=0, .match_offset=109511 }, { .children_offset=0, .match_offset=20584 }, { .children_offset=16974, .match_offset=0 }, { .children_offset=0, .match_offset=135837 }, { .children_offset=0, .match_offset=56963 }, { .children_offset=0, .match_offset=33483 }, { .children_offset=16978, .match_offset=0 }, { .children_offset=0, .match_offset=30496 }, { .children_offset=16980, .match_offset=0 }, { .children_offset=0, .match_offset=89136 }, { .children_offset=0, .match_offset=59166 }, { .children_offset=16983, .match_offset=0 }, { .children_offset=0, .match_offset=14398 }, { .children_offset=16985, .match_offset=0 }, { .children_offset=16987, .match_offset=0 }, { .children_offset=16989, .match_offset=0 }, { .children_offset=0, .match_offset=132493 }, { .children_offset=16991, .match_offset=0 }, { .children_offset=16994, .match_offset=0 }, { .children_offset=16996, .match_offset=0 }, { .children_offset=16998, .match_offset=0 }, { .children_offset=0, .match_offset=136007 }, { .children_offset=17000, .match_offset=0 }, { .children_offset=17002, .match_offset=0 }, { .children_offset=17004, .match_offset=0 }, { .children_offset=0, .match_offset=23892 }, { .children_offset=17006, .match_offset=0 }, { .children_offset=17008, .match_offset=0 }, { .children_offset=17010, .match_offset=0 }, { .children_offset=0, .match_offset=102455 }, { .children_offset=17012, .match_offset=0 }, { .children_offset=17014, .match_offset=59599 }, { .children_offset=0, .match_offset=70803 }, { .children_offset=17016, .match_offset=0 }, { .children_offset=0, .match_offset=131560 }, { .children_offset=17019, .match_offset=0 }, { .children_offset=0, .match_offset=55735 }, { .children_offset=17021, .match_offset=0 }, { .children_offset=0, .match_offset=79005 }, { .children_offset=17023, .match_offset=0 }, { .children_offset=17027, .match_offset=132870 }, { .children_offset=17029, .match_offset=0 }, { .children_offset=17031, .match_offset=0 }, { .children_offset=17033, .match_offset=0 }, { .children_offset=0, .match_offset=103181 }, { .children_offset=17035, .match_offset=0 }, { .children_offset=17037, .match_offset=0 }, { .children_offset=0, .match_offset=63607 }, { .children_offset=17039, .match_offset=0 }, { .children_offset=17041, .match_offset=0 }, { .children_offset=17043, .match_offset=0 }, { .children_offset=17045, .match_offset=0 }, { .children_offset=17047, .match_offset=0 }, { .children_offset=0, .match_offset=56946 }, { .children_offset=17049, .match_offset=0 }, { .children_offset=17053, .match_offset=0 }, { .children_offset=17055, .match_offset=0 }, { .children_offset=17057, .match_offset=0 }, { .children_offset=17059, .match_offset=0 }, { .children_offset=17061, .match_offset=0 }, { .children_offset=0, .match_offset=66437 }, { .children_offset=17063, .match_offset=0 }, { .children_offset=0, .match_offset=110955 }, { .children_offset=0, .match_offset=12 }, { .children_offset=17066, .match_offset=0 }, { .children_offset=0, .match_offset=74584 }, { .children_offset=17068, .match_offset=0 }, { .children_offset=0, .match_offset=73385 }, { .children_offset=0, .match_offset=77703 }, { .children_offset=17073, .match_offset=0 }, { .children_offset=17075, .match_offset=58253 }, { .children_offset=17077, .match_offset=0 }, { .children_offset=17080, .match_offset=0 }, { .children_offset=17082, .match_offset=0 }, { .children_offset=17084, .match_offset=0 }, { .children_offset=17086, .match_offset=0 }, { .children_offset=17088, .match_offset=0 }, { .children_offset=0, .match_offset=119229 }, { .children_offset=17090, .match_offset=0 }, { .children_offset=17092, .match_offset=0 }, { .children_offset=17094, .match_offset=0 }, { .children_offset=17096, .match_offset=0 }, { .children_offset=17098, .match_offset=0 }, { .children_offset=0, .match_offset=54404 }, { .children_offset=17100, .match_offset=0 }, { .children_offset=17102, .match_offset=57734 }, { .children_offset=17104, .match_offset=0 }, { .children_offset=17106, .match_offset=0 }, { .children_offset=0, .match_offset=15991 }, { .children_offset=17108, .match_offset=0 }, { .children_offset=17110, .match_offset=0 }, { .children_offset=0, .match_offset=21918 }, { .children_offset=17112, .match_offset=0 }, { .children_offset=17114, .match_offset=0 }, { .children_offset=17116, .match_offset=0 }, { .children_offset=17118, .match_offset=0 }, { .children_offset=0, .match_offset=13517 }, { .children_offset=17120, .match_offset=32907 }, { .children_offset=0, .match_offset=43750 }, { .children_offset=17131, .match_offset=46681 }, { .children_offset=0, .match_offset=125094 }, { .children_offset=0, .match_offset=33523 }, { .children_offset=17134, .match_offset=0 }, { .children_offset=0, .match_offset=52243 }, { .children_offset=17136, .match_offset=0 }, { .children_offset=17138, .match_offset=28509 }, { .children_offset=17141, .match_offset=0 }, { .children_offset=17143, .match_offset=0 }, { .children_offset=17145, .match_offset=0 }, { .children_offset=0, .match_offset=90100 }, { .children_offset=17147, .match_offset=0 }, { .children_offset=17149, .match_offset=0 }, { .children_offset=17151, .match_offset=0 }, { .children_offset=17153, .match_offset=0 }, { .children_offset=0, .match_offset=110097 }, { .children_offset=17155, .match_offset=0 }, { .children_offset=17158, .match_offset=0 }, { .children_offset=17160, .match_offset=0 }, { .children_offset=17162, .match_offset=0 }, { .children_offset=17164, .match_offset=0 }, { .children_offset=17166, .match_offset=70961 }, { .children_offset=17168, .match_offset=0 }, { .children_offset=0, .match_offset=42497 }, { .children_offset=17170, .match_offset=0 }, { .children_offset=17172, .match_offset=0 }, { .children_offset=17174, .match_offset=0 }, { .children_offset=0, .match_offset=45069 }, { .children_offset=0, .match_offset=125737 }, { .children_offset=17176, .match_offset=135528 }, { .children_offset=0, .match_offset=86281 }, { .children_offset=17178, .match_offset=0 }, { .children_offset=0, .match_offset=6749 }, { .children_offset=0, .match_offset=109426 }, { .children_offset=0, .match_offset=44669 }, { .children_offset=0, .match_offset=26450 }, { .children_offset=17181, .match_offset=0 }, { .children_offset=17185, .match_offset=69085 }, { .children_offset=0, .match_offset=125671 }, { .children_offset=17187, .match_offset=58463 }, { .children_offset=0, .match_offset=8304 }, { .children_offset=0, .match_offset=35850 }, { .children_offset=17189, .match_offset=65204 }, { .children_offset=0, .match_offset=11318 }, { .children_offset=0, .match_offset=33423 }, { .children_offset=0, .match_offset=72838 }, { .children_offset=0, .match_offset=34404 }, { .children_offset=17194, .match_offset=0 }, { .children_offset=17218, .match_offset=0 }, { .children_offset=17225, .match_offset=0 }, { .children_offset=0, .match_offset=80285 }, { .children_offset=0, .match_offset=46790 }, { .children_offset=0, .match_offset=103410 }, { .children_offset=0, .match_offset=42051 }, { .children_offset=0, .match_offset=64207 }, { .children_offset=17235, .match_offset=49789 }, { .children_offset=0, .match_offset=84814 }, { .children_offset=17237, .match_offset=5572 }, { .children_offset=0, .match_offset=13355 }, { .children_offset=0, .match_offset=71530 }, { .children_offset=0, .match_offset=6552 }, { .children_offset=0, .match_offset=88672 }, { .children_offset=17240, .match_offset=0 }, { .children_offset=0, .match_offset=104495 }, { .children_offset=17251, .match_offset=114834 }, { .children_offset=0, .match_offset=118249 }, { .children_offset=0, .match_offset=44924 }, { .children_offset=0, .match_offset=61707 }, { .children_offset=0, .match_offset=58036 }, { .children_offset=0, .match_offset=44017 }, { .children_offset=0, .match_offset=78215 }, { .children_offset=0, .match_offset=73733 }, { .children_offset=0, .match_offset=129863 }, { .children_offset=0, .match_offset=35771 }, { .children_offset=17253, .match_offset=0 }, { .children_offset=17264, .match_offset=14344 }, { .children_offset=0, .match_offset=40188 }, { .children_offset=0, .match_offset=15039 }, { .children_offset=0, .match_offset=27156 }, { .children_offset=0, .match_offset=8482 }, { .children_offset=0, .match_offset=34336 }, { .children_offset=0, .match_offset=102651 }, { .children_offset=17266, .match_offset=13190 }, { .children_offset=0, .match_offset=15507 }, { .children_offset=0, .match_offset=30923 }, { .children_offset=0, .match_offset=34166 }, { .children_offset=0, .match_offset=11081 }, { .children_offset=17268, .match_offset=0 }, { .children_offset=0, .match_offset=123757 }, { .children_offset=0, .match_offset=109869 }, { .children_offset=0, .match_offset=33201 }, { .children_offset=0, .match_offset=87148 }, { .children_offset=0, .match_offset=87833 }, { .children_offset=0, .match_offset=85236 }, { .children_offset=17279, .match_offset=119620 }, { .children_offset=0, .match_offset=64501 }, { .children_offset=17281, .match_offset=43480 }, { .children_offset=0, .match_offset=6959 }, { .children_offset=0, .match_offset=81997 }, { .children_offset=0, .match_offset=129404 }, { .children_offset=17283, .match_offset=0 }, { .children_offset=0, .match_offset=71986 }, { .children_offset=0, .match_offset=63117 }, { .children_offset=0, .match_offset=12413 }, { .children_offset=17294, .match_offset=58190 }, { .children_offset=0, .match_offset=72480 }, { .children_offset=0, .match_offset=74231 }, { .children_offset=17296, .match_offset=62670 }, { .children_offset=0, .match_offset=59141 }, { .children_offset=0, .match_offset=11978 }, { .children_offset=0, .match_offset=123727 }, { .children_offset=0, .match_offset=116539 }, { .children_offset=0, .match_offset=103100 }, { .children_offset=17298, .match_offset=0 }, { .children_offset=0, .match_offset=89397 }, { .children_offset=0, .match_offset=104050 }, { .children_offset=0, .match_offset=10927 }, { .children_offset=0, .match_offset=9931 }, { .children_offset=0, .match_offset=13048 }, { .children_offset=0, .match_offset=65790 }, { .children_offset=17304, .match_offset=40727 }, { .children_offset=0, .match_offset=66322 }, { .children_offset=17325, .match_offset=14257 }, { .children_offset=17328, .match_offset=0 }, { .children_offset=0, .match_offset=126419 }, { .children_offset=17330, .match_offset=0 }, { .children_offset=17332, .match_offset=0 }, { .children_offset=17334, .match_offset=0 }, { .children_offset=0, .match_offset=37631 }, { .children_offset=17336, .match_offset=0 }, { .children_offset=0, .match_offset=28217 }, { .children_offset=17338, .match_offset=0 }, { .children_offset=17340, .match_offset=0 }, { .children_offset=17342, .match_offset=0 }, { .children_offset=0, .match_offset=9063 }, { .children_offset=17344, .match_offset=123856 }, { .children_offset=17346, .match_offset=0 }, { .children_offset=0, .match_offset=34940 }, { .children_offset=17348, .match_offset=0 }, { .children_offset=17350, .match_offset=0 }, { .children_offset=17352, .match_offset=0 }, { .children_offset=17354, .match_offset=0 }, { .children_offset=17356, .match_offset=0 }, { .children_offset=17358, .match_offset=0 }, { .children_offset=17360, .match_offset=0 }, { .children_offset=17362, .match_offset=0 }, { .children_offset=17364, .match_offset=0 }, { .children_offset=0, .match_offset=64 }, { .children_offset=0, .match_offset=124620 }, { .children_offset=0, .match_offset=104560 }, { .children_offset=0, .match_offset=79705 }, { .children_offset=0, .match_offset=116568 }, { .children_offset=17366, .match_offset=65758 }, { .children_offset=17369, .match_offset=0 }, { .children_offset=0, .match_offset=14225 }, { .children_offset=0, .match_offset=115505 }, { .children_offset=17371, .match_offset=130906 }, { .children_offset=17376, .match_offset=0 }, { .children_offset=0, .match_offset=125180 }, { .children_offset=0, .match_offset=74147 }, { .children_offset=0, .match_offset=63440 }, { .children_offset=17379, .match_offset=21645 }, { .children_offset=0, .match_offset=14441 }, { .children_offset=17381, .match_offset=0 }, { .children_offset=17383, .match_offset=61668 }, { .children_offset=0, .match_offset=6529 }, { .children_offset=17385, .match_offset=111127 }, { .children_offset=0, .match_offset=114334 }, { .children_offset=17390, .match_offset=0 }, { .children_offset=0, .match_offset=85400 }, { .children_offset=17392, .match_offset=0 }, { .children_offset=17394, .match_offset=0 }, { .children_offset=0, .match_offset=13361 }, { .children_offset=17396, .match_offset=0 }, { .children_offset=0, .match_offset=55767 }, { .children_offset=17398, .match_offset=43955 }, { .children_offset=17400, .match_offset=0 }, { .children_offset=17402, .match_offset=0 }, { .children_offset=0, .match_offset=69415 }, { .children_offset=17404, .match_offset=43967 }, { .children_offset=0, .match_offset=30619 }, { .children_offset=17411, .match_offset=0 }, { .children_offset=17413, .match_offset=0 }, { .children_offset=0, .match_offset=62032 }, { .children_offset=17415, .match_offset=0 }, { .children_offset=17417, .match_offset=0 }, { .children_offset=0, .match_offset=54464 }, { .children_offset=17419, .match_offset=0 }, { .children_offset=17421, .match_offset=0 }, { .children_offset=17423, .match_offset=0 }, { .children_offset=0, .match_offset=12391 }, { .children_offset=17425, .match_offset=0 }, { .children_offset=0, .match_offset=113971 }, { .children_offset=17427, .match_offset=0 }, { .children_offset=17429, .match_offset=0 }, { .children_offset=17431, .match_offset=0 }, { .children_offset=17433, .match_offset=0 }, { .children_offset=0, .match_offset=6984 }, { .children_offset=17435, .match_offset=0 }, { .children_offset=17437, .match_offset=0 }, { .children_offset=17439, .match_offset=0 }, { .children_offset=0, .match_offset=90033 }, { .children_offset=17441, .match_offset=32806 }, { .children_offset=0, .match_offset=14428 }, { .children_offset=17444, .match_offset=0 }, { .children_offset=17446, .match_offset=0 }, { .children_offset=17448, .match_offset=0 }, { .children_offset=17450, .match_offset=0 }, { .children_offset=17452, .match_offset=0 }, { .children_offset=0, .match_offset=81916 }, { .children_offset=17454, .match_offset=0 }, { .children_offset=17456, .match_offset=0 }, { .children_offset=17458, .match_offset=0 }, { .children_offset=17460, .match_offset=0 }, { .children_offset=17462, .match_offset=0 }, { .children_offset=0, .match_offset=80588 }, { .children_offset=0, .match_offset=21903 }, { .children_offset=17464, .match_offset=104334 }, { .children_offset=17466, .match_offset=0 }, { .children_offset=17468, .match_offset=0 }, { .children_offset=17471, .match_offset=0 }, { .children_offset=0, .match_offset=136177 }, { .children_offset=17473, .match_offset=0 }, { .children_offset=17475, .match_offset=0 }, { .children_offset=17477, .match_offset=0 }, { .children_offset=17479, .match_offset=0 }, { .children_offset=17481, .match_offset=0 }, { .children_offset=0, .match_offset=58194 }, { .children_offset=17483, .match_offset=132857 }, { .children_offset=17490, .match_offset=46035 }, { .children_offset=17493, .match_offset=0 }, { .children_offset=17495, .match_offset=0 }, { .children_offset=17497, .match_offset=0 }, { .children_offset=17499, .match_offset=0 }, { .children_offset=17501, .match_offset=0 }, { .children_offset=17503, .match_offset=0 }, { .children_offset=0, .match_offset=35725 }, { .children_offset=17505, .match_offset=0 }, { .children_offset=0, .match_offset=104071 }, { .children_offset=17507, .match_offset=16061 }, { .children_offset=0, .match_offset=71579 }, { .children_offset=0, .match_offset=57525 }, { .children_offset=0, .match_offset=109601 }, { .children_offset=17512, .match_offset=0 }, { .children_offset=0, .match_offset=6521 }, { .children_offset=17514, .match_offset=124847 }, { .children_offset=17516, .match_offset=0 }, { .children_offset=0, .match_offset=125039 }, { .children_offset=17518, .match_offset=61902 }, { .children_offset=0, .match_offset=10929 }, { .children_offset=0, .match_offset=38170 }, { .children_offset=17521, .match_offset=0 }, { .children_offset=17523, .match_offset=0 }, { .children_offset=17525, .match_offset=0 }, { .children_offset=0, .match_offset=64547 }, { .children_offset=0, .match_offset=21899 }, { .children_offset=17527, .match_offset=0 }, { .children_offset=17532, .match_offset=0 }, { .children_offset=0, .match_offset=136161 }, { .children_offset=17534, .match_offset=0 }, { .children_offset=17536, .match_offset=0 }, { .children_offset=17538, .match_offset=0 }, { .children_offset=0, .match_offset=71502 }, { .children_offset=17540, .match_offset=0 }, { .children_offset=0, .match_offset=52614 }, { .children_offset=17543, .match_offset=0 }, { .children_offset=0, .match_offset=63405 }, { .children_offset=0, .match_offset=77237 }, { .children_offset=17545, .match_offset=0 }, { .children_offset=17548, .match_offset=0 }, { .children_offset=0, .match_offset=61154 }, { .children_offset=17550, .match_offset=0 }, { .children_offset=0, .match_offset=116005 }, { .children_offset=17552, .match_offset=37568 }, { .children_offset=17568, .match_offset=0 }, { .children_offset=0, .match_offset=89082 }, { .children_offset=17570, .match_offset=0 }, { .children_offset=0, .match_offset=6756 }, { .children_offset=17572, .match_offset=0 }, { .children_offset=0, .match_offset=73686 }, { .children_offset=0, .match_offset=111489 }, { .children_offset=17575, .match_offset=0 }, { .children_offset=0, .match_offset=21100 }, { .children_offset=17578, .match_offset=0 }, { .children_offset=17580, .match_offset=0 }, { .children_offset=0, .match_offset=49838 }, { .children_offset=17582, .match_offset=109552 }, { .children_offset=0, .match_offset=113875 }, { .children_offset=0, .match_offset=40426 }, { .children_offset=17584, .match_offset=64710 }, { .children_offset=17586, .match_offset=0 }, { .children_offset=17588, .match_offset=0 }, { .children_offset=17591, .match_offset=0 }, { .children_offset=17593, .match_offset=0 }, { .children_offset=0, .match_offset=129990 }, { .children_offset=17596, .match_offset=0 }, { .children_offset=17598, .match_offset=0 }, { .children_offset=0, .match_offset=42406 }, { .children_offset=0, .match_offset=4885 }, { .children_offset=17600, .match_offset=27826 }, { .children_offset=17604, .match_offset=0 }, { .children_offset=17606, .match_offset=0 }, { .children_offset=17609, .match_offset=0 }, { .children_offset=0, .match_offset=38153 }, { .children_offset=17611, .match_offset=0 }, { .children_offset=0, .match_offset=14436 }, { .children_offset=17613, .match_offset=0 }, { .children_offset=0, .match_offset=38958 }, { .children_offset=17617, .match_offset=0 }, { .children_offset=0, .match_offset=77024 }, { .children_offset=17619, .match_offset=0 }, { .children_offset=17621, .match_offset=0 }, { .children_offset=17623, .match_offset=0 }, { .children_offset=0, .match_offset=28494 }, { .children_offset=17625, .match_offset=0 }, { .children_offset=17627, .match_offset=0 }, { .children_offset=0, .match_offset=58784 }, { .children_offset=17629, .match_offset=0 }, { .children_offset=17632, .match_offset=0 }, { .children_offset=17634, .match_offset=0 }, { .children_offset=17636, .match_offset=0 }, { .children_offset=17638, .match_offset=0 }, { .children_offset=17640, .match_offset=0 }, { .children_offset=17642, .match_offset=134574 }, { .children_offset=17644, .match_offset=0 }, { .children_offset=17646, .match_offset=0 }, { .children_offset=17648, .match_offset=0 }, { .children_offset=0, .match_offset=109437 }, { .children_offset=17650, .match_offset=0 }, { .children_offset=17652, .match_offset=0 }, { .children_offset=17654, .match_offset=0 }, { .children_offset=17656, .match_offset=0 }, { .children_offset=0, .match_offset=87522 }, { .children_offset=0, .match_offset=10931 }, { .children_offset=17658, .match_offset=15317 }, { .children_offset=0, .match_offset=12790 }, { .children_offset=17661, .match_offset=0 }, { .children_offset=17663, .match_offset=0 }, { .children_offset=17665, .match_offset=0 }, { .children_offset=17667, .match_offset=0 }, { .children_offset=0, .match_offset=5370 }, { .children_offset=17669, .match_offset=103393 }, { .children_offset=17673, .match_offset=0 }, { .children_offset=17675, .match_offset=0 }, { .children_offset=0, .match_offset=88837 }, { .children_offset=17677, .match_offset=0 }, { .children_offset=17679, .match_offset=0 }, { .children_offset=0, .match_offset=62396 }, { .children_offset=17681, .match_offset=0 }, { .children_offset=17683, .match_offset=0 }, { .children_offset=17685, .match_offset=0 }, { .children_offset=17687, .match_offset=0 }, { .children_offset=17689, .match_offset=0 }, { .children_offset=0, .match_offset=28276 }, { .children_offset=17691, .match_offset=5370 }, { .children_offset=17697, .match_offset=0 }, { .children_offset=0, .match_offset=364 }, { .children_offset=17699, .match_offset=0 }, { .children_offset=17701, .match_offset=0 }, { .children_offset=17703, .match_offset=37223 }, { .children_offset=17705, .match_offset=40847 }, { .children_offset=0, .match_offset=134363 }, { .children_offset=17707, .match_offset=0 }, { .children_offset=0, .match_offset=87988 }, { .children_offset=17711, .match_offset=0 }, { .children_offset=17713, .match_offset=0 }, { .children_offset=0, .match_offset=58940 }, { .children_offset=0, .match_offset=38840 }, { .children_offset=17715, .match_offset=0 }, { .children_offset=17717, .match_offset=0 }, { .children_offset=0, .match_offset=80499 }, { .children_offset=17719, .match_offset=0 }, { .children_offset=17721, .match_offset=0 }, { .children_offset=17723, .match_offset=0 }, { .children_offset=0, .match_offset=113644 }, { .children_offset=17725, .match_offset=44738 }, { .children_offset=0, .match_offset=53852 }, { .children_offset=0, .match_offset=110334 }, { .children_offset=17727, .match_offset=0 }, { .children_offset=0, .match_offset=81930 }, { .children_offset=17729, .match_offset=50336 }, { .children_offset=17737, .match_offset=89073 }, { .children_offset=0, .match_offset=16929 }, { .children_offset=0, .match_offset=65038 }, { .children_offset=0, .match_offset=111496 }, { .children_offset=0, .match_offset=6517 }, { .children_offset=17742, .match_offset=54142 }, { .children_offset=0, .match_offset=16362 }, { .children_offset=0, .match_offset=22600 }, { .children_offset=0, .match_offset=110921 }, { .children_offset=0, .match_offset=35120 }, { .children_offset=0, .match_offset=65261 }, { .children_offset=17747, .match_offset=34701 }, { .children_offset=17751, .match_offset=73507 }, { .children_offset=0, .match_offset=70702 }, { .children_offset=0, .match_offset=116968 }, { .children_offset=0, .match_offset=63403 }, { .children_offset=0, .match_offset=73475 }, { .children_offset=17754, .match_offset=67747 }, { .children_offset=0, .match_offset=26427 }, { .children_offset=0, .match_offset=20572 }, { .children_offset=0, .match_offset=58405 }, { .children_offset=17758, .match_offset=73500 }, { .children_offset=17764, .match_offset=104065 }, { .children_offset=0, .match_offset=8461 }, { .children_offset=0, .match_offset=42385 }, { .children_offset=0, .match_offset=13070 }, { .children_offset=0, .match_offset=8967 }, { .children_offset=17768, .match_offset=123801 }, { .children_offset=0, .match_offset=125151 }, { .children_offset=0, .match_offset=35880 }, { .children_offset=0, .match_offset=102281 }, { .children_offset=17770, .match_offset=0 }, { .children_offset=17774, .match_offset=102733 }, { .children_offset=0, .match_offset=50066 }, { .children_offset=17776, .match_offset=63214 }, { .children_offset=0, .match_offset=124726 }, { .children_offset=0, .match_offset=118468 }, { .children_offset=17778, .match_offset=114836 }, { .children_offset=17787, .match_offset=4839 }, { .children_offset=17796, .match_offset=73234 }, { .children_offset=17798, .match_offset=0 }, { .children_offset=17800, .match_offset=0 }, { .children_offset=0, .match_offset=86660 }, { .children_offset=0, .match_offset=53485 }, { .children_offset=17802, .match_offset=0 }, { .children_offset=17804, .match_offset=90157 }, { .children_offset=0, .match_offset=90216 }, { .children_offset=17806, .match_offset=0 }, { .children_offset=17809, .match_offset=0 }, { .children_offset=0, .match_offset=46052 }, { .children_offset=17811, .match_offset=0 }, { .children_offset=0, .match_offset=73875 }, { .children_offset=0, .match_offset=116223 }, { .children_offset=0, .match_offset=86941 }, { .children_offset=17813, .match_offset=0 }, { .children_offset=17815, .match_offset=0 }, { .children_offset=0, .match_offset=115699 }, { .children_offset=17817, .match_offset=0 }, { .children_offset=0, .match_offset=85230 }, { .children_offset=17819, .match_offset=40556 }, { .children_offset=0, .match_offset=80934 }, { .children_offset=0, .match_offset=65718 }, { .children_offset=17824, .match_offset=0 }, { .children_offset=17829, .match_offset=0 }, { .children_offset=17831, .match_offset=102697 }, { .children_offset=17834, .match_offset=0 }, { .children_offset=17836, .match_offset=0 }, { .children_offset=17838, .match_offset=0 }, { .children_offset=17840, .match_offset=0 }, { .children_offset=17842, .match_offset=0 }, { .children_offset=0, .match_offset=125318 }, { .children_offset=17844, .match_offset=0 }, { .children_offset=17846, .match_offset=0 }, { .children_offset=0, .match_offset=67538 }, { .children_offset=17848, .match_offset=0 }, { .children_offset=17850, .match_offset=0 }, { .children_offset=17852, .match_offset=0 }, { .children_offset=0, .match_offset=80214 }, { .children_offset=17855, .match_offset=0 }, { .children_offset=17857, .match_offset=0 }, { .children_offset=17859, .match_offset=0 }, { .children_offset=0, .match_offset=59471 }, { .children_offset=0, .match_offset=7502 }, { .children_offset=0, .match_offset=73477 }, { .children_offset=17861, .match_offset=0 }, { .children_offset=0, .match_offset=124605 }, { .children_offset=17863, .match_offset=0 }, { .children_offset=0, .match_offset=16647 }, { .children_offset=17865, .match_offset=89199 }, { .children_offset=17867, .match_offset=0 }, { .children_offset=17869, .match_offset=0 }, { .children_offset=0, .match_offset=34914 }, { .children_offset=17871, .match_offset=7533 }, { .children_offset=0, .match_offset=111072 }, { .children_offset=17875, .match_offset=0 }, { .children_offset=0, .match_offset=42684 }, { .children_offset=0, .match_offset=132170 }, { .children_offset=17877, .match_offset=5211 }, { .children_offset=17879, .match_offset=0 }, { .children_offset=17881, .match_offset=0 }, { .children_offset=0, .match_offset=112830 }, { .children_offset=17883, .match_offset=0 }, { .children_offset=0, .match_offset=124642 }, { .children_offset=0, .match_offset=25756 }, { .children_offset=17885, .match_offset=21333 }, { .children_offset=0, .match_offset=14454 }, { .children_offset=17899, .match_offset=0 }, { .children_offset=0, .match_offset=77003 }, { .children_offset=17902, .match_offset=0 }, { .children_offset=17904, .match_offset=0 }, { .children_offset=17906, .match_offset=0 }, { .children_offset=0, .match_offset=5068 }, { .children_offset=17908, .match_offset=0 }, { .children_offset=17910, .match_offset=0 }, { .children_offset=0, .match_offset=114267 }, { .children_offset=17912, .match_offset=15315 }, { .children_offset=0, .match_offset=116349 }, { .children_offset=0, .match_offset=13046 }, { .children_offset=0, .match_offset=57400 }, { .children_offset=17916, .match_offset=0 }, { .children_offset=0, .match_offset=114513 }, { .children_offset=17918, .match_offset=13346 }, { .children_offset=0, .match_offset=8480 }, { .children_offset=17920, .match_offset=111206 }, { .children_offset=17922, .match_offset=0 }, { .children_offset=0, .match_offset=42574 }, { .children_offset=17924, .match_offset=0 }, { .children_offset=17926, .match_offset=0 }, { .children_offset=0, .match_offset=7729 }, { .children_offset=0, .match_offset=26055 }, { .children_offset=17928, .match_offset=0 }, { .children_offset=0, .match_offset=113877 }, { .children_offset=0, .match_offset=5925 }, { .children_offset=17934, .match_offset=0 }, { .children_offset=17936, .match_offset=0 }, { .children_offset=17938, .match_offset=0 }, { .children_offset=0, .match_offset=14854 }, { .children_offset=17940, .match_offset=103764 }, { .children_offset=0, .match_offset=56630 }, { .children_offset=17942, .match_offset=0 }, { .children_offset=17944, .match_offset=0 }, { .children_offset=17946, .match_offset=0 }, { .children_offset=0, .match_offset=119372 }, { .children_offset=17948, .match_offset=0 }, { .children_offset=17951, .match_offset=0 }, { .children_offset=0, .match_offset=35407 }, { .children_offset=0, .match_offset=30927 }, { .children_offset=0, .match_offset=50323 }, { .children_offset=0, .match_offset=42389 }, { .children_offset=17953, .match_offset=0 }, { .children_offset=17956, .match_offset=0 }, { .children_offset=0, .match_offset=22134 }, { .children_offset=0, .match_offset=35385 }, { .children_offset=17958, .match_offset=82074 }, { .children_offset=17964, .match_offset=116230 }, { .children_offset=17967, .match_offset=0 }, { .children_offset=17969, .match_offset=0 }, { .children_offset=17971, .match_offset=0 }, { .children_offset=17973, .match_offset=43474 }, { .children_offset=17975, .match_offset=0 }, { .children_offset=17977, .match_offset=0 }, { .children_offset=0, .match_offset=22854 }, { .children_offset=17979, .match_offset=0 }, { .children_offset=17981, .match_offset=43231 }, { .children_offset=17983, .match_offset=0 }, { .children_offset=0, .match_offset=61024 }, { .children_offset=17985, .match_offset=35609 }, { .children_offset=17987, .match_offset=0 }, { .children_offset=17989, .match_offset=0 }, { .children_offset=0, .match_offset=30140 }, { .children_offset=17991, .match_offset=0 }, { .children_offset=17993, .match_offset=0 }, { .children_offset=17995, .match_offset=0 }, { .children_offset=17997, .match_offset=0 }, { .children_offset=17999, .match_offset=0 }, { .children_offset=18001, .match_offset=0 }, { .children_offset=0, .match_offset=16105 }, { .children_offset=0, .match_offset=34400 }, { .children_offset=18003, .match_offset=0 }, { .children_offset=18008, .match_offset=0 }, { .children_offset=0, .match_offset=69306 }, { .children_offset=18010, .match_offset=0 }, { .children_offset=18012, .match_offset=0 }, { .children_offset=18014, .match_offset=0 }, { .children_offset=0, .match_offset=113343 }, { .children_offset=18016, .match_offset=0 }, { .children_offset=18018, .match_offset=72664 }, { .children_offset=0, .match_offset=1245 }, { .children_offset=18020, .match_offset=0 }, { .children_offset=18022, .match_offset=0 }, { .children_offset=18024, .match_offset=0 }, { .children_offset=0, .match_offset=133227 }, { .children_offset=18026, .match_offset=114515 }, { .children_offset=18031, .match_offset=0 }, { .children_offset=18034, .match_offset=42282 }, { .children_offset=18036, .match_offset=0 }, { .children_offset=18038, .match_offset=0 }, { .children_offset=18040, .match_offset=0 }, { .children_offset=0, .match_offset=42282 }, { .children_offset=18042, .match_offset=0 }, { .children_offset=18044, .match_offset=0 }, { .children_offset=18046, .match_offset=0 }, { .children_offset=18048, .match_offset=0 }, { .children_offset=18050, .match_offset=0 }, { .children_offset=0, .match_offset=73273 }, { .children_offset=18052, .match_offset=41934 }, { .children_offset=18054, .match_offset=30617 }, { .children_offset=0, .match_offset=33369 }, { .children_offset=18056, .match_offset=0 }, { .children_offset=18058, .match_offset=0 }, { .children_offset=0, .match_offset=65361 }, { .children_offset=18060, .match_offset=0 }, { .children_offset=18062, .match_offset=0 }, { .children_offset=0, .match_offset=52720 }, { .children_offset=18064, .match_offset=46164 }, { .children_offset=18077, .match_offset=57989 }, { .children_offset=0, .match_offset=133021 }, { .children_offset=0, .match_offset=7087 }, { .children_offset=18080, .match_offset=0 }, { .children_offset=18082, .match_offset=0 }, { .children_offset=18084, .match_offset=0 }, { .children_offset=0, .match_offset=21368 }, { .children_offset=18086, .match_offset=0 }, { .children_offset=18088, .match_offset=0 }, { .children_offset=18090, .match_offset=0 }, { .children_offset=18092, .match_offset=0 }, { .children_offset=0, .match_offset=116957 }, { .children_offset=18094, .match_offset=0 }, { .children_offset=18096, .match_offset=0 }, { .children_offset=0, .match_offset=132928 }, { .children_offset=0, .match_offset=115738 }, { .children_offset=18098, .match_offset=0 }, { .children_offset=0, .match_offset=46901 }, { .children_offset=18101, .match_offset=0 }, { .children_offset=18103, .match_offset=0 }, { .children_offset=0, .match_offset=123203 }, { .children_offset=18105, .match_offset=0 }, { .children_offset=18108, .match_offset=0 }, { .children_offset=0, .match_offset=11577 }, { .children_offset=0, .match_offset=113057 }, { .children_offset=18110, .match_offset=102285 }, { .children_offset=0, .match_offset=25718 }, { .children_offset=18112, .match_offset=60775 }, { .children_offset=0, .match_offset=133291 }, { .children_offset=18114, .match_offset=0 }, { .children_offset=0, .match_offset=42463 }, { .children_offset=18119, .match_offset=0 }, { .children_offset=0, .match_offset=60696 }, { .children_offset=18122, .match_offset=0 }, { .children_offset=0, .match_offset=109119 }, { .children_offset=18126, .match_offset=0 }, { .children_offset=18128, .match_offset=0 }, { .children_offset=18130, .match_offset=0 }, { .children_offset=18132, .match_offset=0 }, { .children_offset=18134, .match_offset=0 }, { .children_offset=18136, .match_offset=0 }, { .children_offset=18138, .match_offset=0 }, { .children_offset=18140, .match_offset=0 }, { .children_offset=0, .match_offset=80554 }, { .children_offset=18142, .match_offset=0 }, { .children_offset=18144, .match_offset=0 }, { .children_offset=18146, .match_offset=0 }, { .children_offset=0, .match_offset=28236 }, { .children_offset=18148, .match_offset=0 }, { .children_offset=18150, .match_offset=0 }, { .children_offset=18152, .match_offset=0 }, { .children_offset=0, .match_offset=46862 }, { .children_offset=18154, .match_offset=134952 }, { .children_offset=18156, .match_offset=0 }, { .children_offset=18158, .match_offset=0 }, { .children_offset=18160, .match_offset=0 }, { .children_offset=18162, .match_offset=0 }, { .children_offset=18164, .match_offset=0 }, { .children_offset=0, .match_offset=129337 }, { .children_offset=18166, .match_offset=28602 }, { .children_offset=18168, .match_offset=0 }, { .children_offset=18170, .match_offset=0 }, { .children_offset=0, .match_offset=122017 }, { .children_offset=0, .match_offset=21093 }, { .children_offset=18172, .match_offset=0 }, { .children_offset=0, .match_offset=103950 }, { .children_offset=18174, .match_offset=0 }, { .children_offset=18180, .match_offset=0 }, { .children_offset=18190, .match_offset=0 }, { .children_offset=0, .match_offset=57495 }, { .children_offset=18192, .match_offset=0 }, { .children_offset=18194, .match_offset=0 }, { .children_offset=18196, .match_offset=0 }, { .children_offset=0, .match_offset=41777 }, { .children_offset=18199, .match_offset=0 }, { .children_offset=18201, .match_offset=0 }, { .children_offset=18203, .match_offset=0 }, { .children_offset=0, .match_offset=10397 }, { .children_offset=18205, .match_offset=0 }, { .children_offset=0, .match_offset=131008 }, { .children_offset=18207, .match_offset=123484 }, { .children_offset=18209, .match_offset=0 }, { .children_offset=0, .match_offset=30726 }, { .children_offset=18211, .match_offset=0 }, { .children_offset=18213, .match_offset=0 }, { .children_offset=18215, .match_offset=0 }, { .children_offset=0, .match_offset=78230 }, { .children_offset=18217, .match_offset=0 }, { .children_offset=18220, .match_offset=0 }, { .children_offset=0, .match_offset=30363 }, { .children_offset=18222, .match_offset=0 }, { .children_offset=18224, .match_offset=0 }, { .children_offset=18226, .match_offset=0 }, { .children_offset=0, .match_offset=77231 }, { .children_offset=18228, .match_offset=0 }, { .children_offset=0, .match_offset=21921 }, { .children_offset=0, .match_offset=78687 }, { .children_offset=18231, .match_offset=0 }, { .children_offset=18233, .match_offset=0 }, { .children_offset=0, .match_offset=38295 }, { .children_offset=18235, .match_offset=0 }, { .children_offset=18237, .match_offset=33621 }, { .children_offset=18240, .match_offset=0 }, { .children_offset=18243, .match_offset=0 }, { .children_offset=18245, .match_offset=0 }, { .children_offset=18247, .match_offset=0 }, { .children_offset=18249, .match_offset=0 }, { .children_offset=18251, .match_offset=0 }, { .children_offset=18253, .match_offset=0 }, { .children_offset=18255, .match_offset=0 }, { .children_offset=18257, .match_offset=0 }, { .children_offset=18259, .match_offset=0 }, { .children_offset=18261, .match_offset=0 }, { .children_offset=0, .match_offset=80195 }, { .children_offset=18263, .match_offset=0 }, { .children_offset=18265, .match_offset=0 }, { .children_offset=18267, .match_offset=0 }, { .children_offset=18269, .match_offset=0 }, { .children_offset=18271, .match_offset=0 }, { .children_offset=0, .match_offset=6532 }, { .children_offset=18273, .match_offset=0 }, { .children_offset=18275, .match_offset=0 }, { .children_offset=18277, .match_offset=0 }, { .children_offset=0, .match_offset=55 }, { .children_offset=18279, .match_offset=0 }, { .children_offset=18283, .match_offset=0 }, { .children_offset=18285, .match_offset=11967 }, { .children_offset=18288, .match_offset=0 }, { .children_offset=18290, .match_offset=69159 }, { .children_offset=18298, .match_offset=0 }, { .children_offset=18300, .match_offset=0 }, { .children_offset=18302, .match_offset=0 }, { .children_offset=18304, .match_offset=0 }, { .children_offset=0, .match_offset=1977 }, { .children_offset=18306, .match_offset=0 }, { .children_offset=18308, .match_offset=0 }, { .children_offset=18310, .match_offset=0 }, { .children_offset=18312, .match_offset=0 }, { .children_offset=18314, .match_offset=15317 }, { .children_offset=18316, .match_offset=0 }, { .children_offset=18318, .match_offset=0 }, { .children_offset=18320, .match_offset=0 }, { .children_offset=0, .match_offset=111440 }, { .children_offset=18322, .match_offset=0 }, { .children_offset=18324, .match_offset=0 }, { .children_offset=18326, .match_offset=0 }, { .children_offset=18328, .match_offset=0 }, { .children_offset=18330, .match_offset=0 }, { .children_offset=18332, .match_offset=0 }, { .children_offset=18334, .match_offset=0 }, { .children_offset=18336, .match_offset=0 }, { .children_offset=0, .match_offset=12790 }, { .children_offset=18338, .match_offset=0 }, { .children_offset=18340, .match_offset=0 }, { .children_offset=18342, .match_offset=0 }, { .children_offset=18344, .match_offset=0 }, { .children_offset=18346, .match_offset=0 }, { .children_offset=18348, .match_offset=0 }, { .children_offset=0, .match_offset=133625 }, { .children_offset=18350, .match_offset=0 }, { .children_offset=18352, .match_offset=0 }, { .children_offset=18354, .match_offset=0 }, { .children_offset=0, .match_offset=82074 }, { .children_offset=18356, .match_offset=0 }, { .children_offset=18358, .match_offset=0 }, { .children_offset=18360, .match_offset=0 }, { .children_offset=18362, .match_offset=0 }, { .children_offset=18364, .match_offset=0 }, { .children_offset=18366, .match_offset=0 }, { .children_offset=18368, .match_offset=0 }, { .children_offset=18370, .match_offset=0 }, { .children_offset=18372, .match_offset=0 }, { .children_offset=0, .match_offset=5370 }, { .children_offset=18374, .match_offset=0 }, { .children_offset=18376, .match_offset=0 }, { .children_offset=18378, .match_offset=0 }, { .children_offset=18380, .match_offset=0 }, { .children_offset=0, .match_offset=30629 }, { .children_offset=18382, .match_offset=0 }, { .children_offset=18384, .match_offset=0 }, { .children_offset=18386, .match_offset=0 }, { .children_offset=0, .match_offset=30774 }, { .children_offset=18388, .match_offset=0 }, { .children_offset=0, .match_offset=54480 }, { .children_offset=0, .match_offset=32854 }, { .children_offset=18391, .match_offset=0 }, { .children_offset=18393, .match_offset=0 }, { .children_offset=18395, .match_offset=0 }, { .children_offset=18397, .match_offset=0 }, { .children_offset=18399, .match_offset=0 }, { .children_offset=0, .match_offset=67548 }, { .children_offset=18401, .match_offset=0 }, { .children_offset=18404, .match_offset=0 }, { .children_offset=18406, .match_offset=0 }, { .children_offset=18408, .match_offset=0 }, { .children_offset=18410, .match_offset=0 }, { .children_offset=18412, .match_offset=0 }, { .children_offset=0, .match_offset=61107 }, { .children_offset=18414, .match_offset=0 }, { .children_offset=18416, .match_offset=0 }, { .children_offset=18418, .match_offset=0 }, { .children_offset=18420, .match_offset=0 }, { .children_offset=0, .match_offset=116457 }, { .children_offset=18422, .match_offset=0 }, { .children_offset=18426, .match_offset=0 }, { .children_offset=18428, .match_offset=0 }, { .children_offset=18430, .match_offset=0 }, { .children_offset=18432, .match_offset=0 }, { .children_offset=18434, .match_offset=0 }, { .children_offset=18436, .match_offset=0 }, { .children_offset=18438, .match_offset=0 }, { .children_offset=18440, .match_offset=0 }, { .children_offset=0, .match_offset=69058 }, { .children_offset=18442, .match_offset=0 }, { .children_offset=18445, .match_offset=0 }, { .children_offset=0, .match_offset=134179 }, { .children_offset=0, .match_offset=109513 }, { .children_offset=18447, .match_offset=0 }, { .children_offset=18449, .match_offset=0 }, { .children_offset=18451, .match_offset=0 }, { .children_offset=0, .match_offset=42402 }, { .children_offset=0, .match_offset=123511 }, { .children_offset=18453, .match_offset=0 }, { .children_offset=18457, .match_offset=0 }, { .children_offset=0, .match_offset=13404 }, { .children_offset=18459, .match_offset=0 }, { .children_offset=18461, .match_offset=30629 }, { .children_offset=0, .match_offset=24310 }, { .children_offset=0, .match_offset=103919 }, { .children_offset=18464, .match_offset=0 }, { .children_offset=0, .match_offset=33595 }, { .children_offset=18466, .match_offset=37249 }, { .children_offset=18473, .match_offset=0 }, { .children_offset=0, .match_offset=21376 }, { .children_offset=18476, .match_offset=0 }, { .children_offset=0, .match_offset=25801 }, { .children_offset=18478, .match_offset=0 }, { .children_offset=18480, .match_offset=0 }, { .children_offset=0, .match_offset=64185 }, { .children_offset=18482, .match_offset=0 }, { .children_offset=0, .match_offset=22480 }, { .children_offset=18484, .match_offset=0 }, { .children_offset=18486, .match_offset=0 }, { .children_offset=18488, .match_offset=0 }, { .children_offset=0, .match_offset=102709 }, { .children_offset=18490, .match_offset=0 }, { .children_offset=18492, .match_offset=0 }, { .children_offset=18494, .match_offset=0 }, { .children_offset=18496, .match_offset=0 }, { .children_offset=0, .match_offset=21884 }, { .children_offset=18498, .match_offset=0 }, { .children_offset=18504, .match_offset=0 }, { .children_offset=18507, .match_offset=0 }, { .children_offset=18509, .match_offset=0 }, { .children_offset=18511, .match_offset=0 }, { .children_offset=18513, .match_offset=0 }, { .children_offset=0, .match_offset=90210 }, { .children_offset=18515, .match_offset=0 }, { .children_offset=0, .match_offset=44671 }, { .children_offset=18517, .match_offset=0 }, { .children_offset=18519, .match_offset=0 }, { .children_offset=0, .match_offset=64185 }, { .children_offset=18521, .match_offset=0 }, { .children_offset=18523, .match_offset=0 }, { .children_offset=18526, .match_offset=0 }, { .children_offset=18528, .match_offset=0 }, { .children_offset=18530, .match_offset=0 }, { .children_offset=0, .match_offset=111440 }, { .children_offset=18532, .match_offset=0 }, { .children_offset=18534, .match_offset=0 }, { .children_offset=18536, .match_offset=0 }, { .children_offset=18538, .match_offset=0 }, { .children_offset=0, .match_offset=62549 }, { .children_offset=18540, .match_offset=0 }, { .children_offset=18542, .match_offset=0 }, { .children_offset=18544, .match_offset=0 }, { .children_offset=0, .match_offset=82074 }, { .children_offset=18546, .match_offset=0 }, { .children_offset=18548, .match_offset=0 }, { .children_offset=0, .match_offset=30629 }, { .children_offset=18550, .match_offset=69035 }, { .children_offset=0, .match_offset=110201 }, { .children_offset=18566, .match_offset=40466 }, { .children_offset=0, .match_offset=62608 }, { .children_offset=18569, .match_offset=0 }, { .children_offset=18572, .match_offset=0 }, { .children_offset=18574, .match_offset=0 }, { .children_offset=0, .match_offset=40900 }, { .children_offset=18576, .match_offset=27541 }, { .children_offset=18579, .match_offset=0 }, { .children_offset=18581, .match_offset=0 }, { .children_offset=18583, .match_offset=0 }, { .children_offset=18585, .match_offset=0 }, { .children_offset=18587, .match_offset=0 }, { .children_offset=0, .match_offset=26921 }, { .children_offset=18589, .match_offset=0 }, { .children_offset=18591, .match_offset=0 }, { .children_offset=18593, .match_offset=0 }, { .children_offset=0, .match_offset=121980 }, { .children_offset=0, .match_offset=23012 }, { .children_offset=18595, .match_offset=0 }, { .children_offset=0, .match_offset=124811 }, { .children_offset=0, .match_offset=123241 }, { .children_offset=0, .match_offset=8887 }, { .children_offset=18598, .match_offset=0 }, { .children_offset=18601, .match_offset=0 }, { .children_offset=0, .match_offset=9944 }, { .children_offset=18603, .match_offset=0 }, { .children_offset=18605, .match_offset=0 }, { .children_offset=0, .match_offset=61576 }, { .children_offset=18607, .match_offset=0 }, { .children_offset=18609, .match_offset=0 }, { .children_offset=18611, .match_offset=0 }, { .children_offset=18613, .match_offset=0 }, { .children_offset=18615, .match_offset=0 }, { .children_offset=0, .match_offset=79608 }, { .children_offset=0, .match_offset=104193 }, { .children_offset=0, .match_offset=9059 }, { .children_offset=18617, .match_offset=0 }, { .children_offset=18620, .match_offset=0 }, { .children_offset=18622, .match_offset=0 }, { .children_offset=18624, .match_offset=0 }, { .children_offset=0, .match_offset=27369 }, { .children_offset=0, .match_offset=22417 }, { .children_offset=18626, .match_offset=122588 }, { .children_offset=0, .match_offset=46028 }, { .children_offset=0, .match_offset=116929 }, { .children_offset=0, .match_offset=6993 }, { .children_offset=0, .match_offset=90305 }, { .children_offset=18630, .match_offset=133653 }, { .children_offset=0, .match_offset=61091 }, { .children_offset=18636, .match_offset=0 }, { .children_offset=18638, .match_offset=0 }, { .children_offset=18640, .match_offset=15950 }, { .children_offset=18642, .match_offset=0 }, { .children_offset=18644, .match_offset=0 }, { .children_offset=0, .match_offset=62370 }, { .children_offset=18646, .match_offset=0 }, { .children_offset=18648, .match_offset=0 }, { .children_offset=18650, .match_offset=0 }, { .children_offset=18652, .match_offset=0 }, { .children_offset=0, .match_offset=59278 }, { .children_offset=18654, .match_offset=0 }, { .children_offset=0, .match_offset=23936 }, { .children_offset=18657, .match_offset=0 }, { .children_offset=0, .match_offset=62680 }, { .children_offset=0, .match_offset=26023 }, { .children_offset=0, .match_offset=88832 }, { .children_offset=0, .match_offset=65187 }, { .children_offset=18659, .match_offset=113052 }, { .children_offset=18661, .match_offset=0 }, { .children_offset=18663, .match_offset=0 }, { .children_offset=0, .match_offset=15009 }, { .children_offset=18665, .match_offset=0 }, { .children_offset=18670, .match_offset=109447 }, { .children_offset=0, .match_offset=58186 }, { .children_offset=18672, .match_offset=84770 }, { .children_offset=0, .match_offset=42274 }, { .children_offset=0, .match_offset=6534 }, { .children_offset=0, .match_offset=74352 }, { .children_offset=18674, .match_offset=25183 }, { .children_offset=18681, .match_offset=73828 }, { .children_offset=0, .match_offset=38382 }, { .children_offset=0, .match_offset=6697 }, { .children_offset=0, .match_offset=15013 }, { .children_offset=18685, .match_offset=114265 }, { .children_offset=0, .match_offset=134475 }, { .children_offset=18687, .match_offset=0 }, { .children_offset=0, .match_offset=111489 }, { .children_offset=0, .match_offset=30668 }, { .children_offset=18689, .match_offset=8901 }, { .children_offset=0, .match_offset=27553 }, { .children_offset=0, .match_offset=14620 }, { .children_offset=18691, .match_offset=0 }, { .children_offset=18718, .match_offset=0 }, { .children_offset=18720, .match_offset=0 }, { .children_offset=18722, .match_offset=0 }, { .children_offset=18724, .match_offset=0 }, { .children_offset=0, .match_offset=104060 }, { .children_offset=18726, .match_offset=0 }, { .children_offset=18728, .match_offset=0 }, { .children_offset=0, .match_offset=20398 }, { .children_offset=0, .match_offset=73769 }, { .children_offset=0, .match_offset=34410 }, { .children_offset=0, .match_offset=86662 }, { .children_offset=0, .match_offset=6799 }, { .children_offset=18737, .match_offset=25748 }, { .children_offset=0, .match_offset=44697 }, { .children_offset=0, .match_offset=38446 }, { .children_offset=0, .match_offset=55507 }, { .children_offset=18739, .match_offset=34722 }, { .children_offset=18762, .match_offset=0 }, { .children_offset=18773, .match_offset=119622 }, { .children_offset=0, .match_offset=88625 }, { .children_offset=0, .match_offset=34018 }, { .children_offset=0, .match_offset=11314 }, { .children_offset=0, .match_offset=65163 }, { .children_offset=0, .match_offset=64702 }, { .children_offset=0, .match_offset=125204 }, { .children_offset=0, .match_offset=61705 }, { .children_offset=0, .match_offset=61942 }, { .children_offset=0, .match_offset=58861 }, { .children_offset=0, .match_offset=72435 }, { .children_offset=18776, .match_offset=0 }, { .children_offset=0, .match_offset=111467 }, { .children_offset=18778, .match_offset=109726 }, { .children_offset=0, .match_offset=8541 }, { .children_offset=18781, .match_offset=0 }, { .children_offset=0, .match_offset=6262 }, { .children_offset=18783, .match_offset=0 }, { .children_offset=18785, .match_offset=0 }, { .children_offset=0, .match_offset=130972 }, { .children_offset=18787, .match_offset=0 }, { .children_offset=18789, .match_offset=0 }, { .children_offset=0, .match_offset=46142 }, { .children_offset=18791, .match_offset=113666 }, { .children_offset=18793, .match_offset=0 }, { .children_offset=0, .match_offset=81064 }, { .children_offset=18795, .match_offset=0 }, { .children_offset=18797, .match_offset=0 }, { .children_offset=18799, .match_offset=0 }, { .children_offset=18801, .match_offset=115378 }, { .children_offset=0, .match_offset=114848 }, { .children_offset=18803, .match_offset=0 }, { .children_offset=18805, .match_offset=43674 }, { .children_offset=18807, .match_offset=0 }, { .children_offset=0, .match_offset=104330 }, { .children_offset=0, .match_offset=70975 }, { .children_offset=18809, .match_offset=25958 }, { .children_offset=18813, .match_offset=84918 }, { .children_offset=18816, .match_offset=0 }, { .children_offset=18818, .match_offset=0 }, { .children_offset=0, .match_offset=69155 }, { .children_offset=18820, .match_offset=0 }, { .children_offset=0, .match_offset=133090 }, { .children_offset=0, .match_offset=13790 }, { .children_offset=18822, .match_offset=0 }, { .children_offset=0, .match_offset=122627 }, { .children_offset=18824, .match_offset=126532 }, { .children_offset=18830, .match_offset=0 }, { .children_offset=18832, .match_offset=0 }, { .children_offset=18834, .match_offset=0 }, { .children_offset=0, .match_offset=40853 }, { .children_offset=18836, .match_offset=0 }, { .children_offset=18838, .match_offset=0 }, { .children_offset=18840, .match_offset=0 }, { .children_offset=0, .match_offset=110387 }, { .children_offset=18842, .match_offset=21187 }, { .children_offset=18845, .match_offset=0 }, { .children_offset=0, .match_offset=81160 }, { .children_offset=0, .match_offset=61089 }, { .children_offset=18849, .match_offset=0 }, { .children_offset=18851, .match_offset=0 }, { .children_offset=18853, .match_offset=0 }, { .children_offset=18855, .match_offset=0 }, { .children_offset=18857, .match_offset=0 }, { .children_offset=0, .match_offset=58908 }, { .children_offset=18859, .match_offset=0 }, { .children_offset=18861, .match_offset=0 }, { .children_offset=18863, .match_offset=0 }, { .children_offset=18865, .match_offset=0 }, { .children_offset=0, .match_offset=110399 }, { .children_offset=0, .match_offset=115721 }, { .children_offset=18867, .match_offset=0 }, { .children_offset=0, .match_offset=70959 }, { .children_offset=18869, .match_offset=25426 }, { .children_offset=18875, .match_offset=0 }, { .children_offset=18877, .match_offset=0 }, { .children_offset=18879, .match_offset=0 }, { .children_offset=18881, .match_offset=0 }, { .children_offset=18883, .match_offset=0 }, { .children_offset=0, .match_offset=135015 }, { .children_offset=18885, .match_offset=0 }, { .children_offset=18887, .match_offset=0 }, { .children_offset=0, .match_offset=126522 }, { .children_offset=18889, .match_offset=0 }, { .children_offset=18891, .match_offset=0 }, { .children_offset=0, .match_offset=23925 }, { .children_offset=18893, .match_offset=0 }, { .children_offset=18895, .match_offset=0 }, { .children_offset=18897, .match_offset=0 }, { .children_offset=0, .match_offset=77374 }, { .children_offset=18899, .match_offset=0 }, { .children_offset=0, .match_offset=13419 }, { .children_offset=18901, .match_offset=14318 }, { .children_offset=18907, .match_offset=0 }, { .children_offset=18909, .match_offset=0 }, { .children_offset=18911, .match_offset=0 }, { .children_offset=18913, .match_offset=0 }, { .children_offset=0, .match_offset=34178 }, { .children_offset=18915, .match_offset=30110 }, { .children_offset=18920, .match_offset=0 }, { .children_offset=18926, .match_offset=0 }, { .children_offset=18928, .match_offset=0 }, { .children_offset=18930, .match_offset=0 }, { .children_offset=18932, .match_offset=0 }, { .children_offset=0, .match_offset=117596 }, { .children_offset=18934, .match_offset=0 }, { .children_offset=18938, .match_offset=0 }, { .children_offset=18940, .match_offset=0 }, { .children_offset=18942, .match_offset=0 }, { .children_offset=18944, .match_offset=0 }, { .children_offset=0, .match_offset=77203 }, { .children_offset=18946, .match_offset=0 }, { .children_offset=18948, .match_offset=0 }, { .children_offset=0, .match_offset=45304 }, { .children_offset=18950, .match_offset=0 }, { .children_offset=0, .match_offset=11546 }, { .children_offset=18953, .match_offset=0 }, { .children_offset=18955, .match_offset=0 }, { .children_offset=18957, .match_offset=0 }, { .children_offset=18959, .match_offset=0 }, { .children_offset=18961, .match_offset=0 }, { .children_offset=0, .match_offset=58231 }, { .children_offset=18963, .match_offset=0 }, { .children_offset=18966, .match_offset=0 }, { .children_offset=18968, .match_offset=0 }, { .children_offset=0, .match_offset=7112 }, { .children_offset=18970, .match_offset=0 }, { .children_offset=18972, .match_offset=0 }, { .children_offset=0, .match_offset=59045 }, { .children_offset=18974, .match_offset=0 }, { .children_offset=18977, .match_offset=0 }, { .children_offset=18979, .match_offset=0 }, { .children_offset=18981, .match_offset=0 }, { .children_offset=0, .match_offset=113895 }, { .children_offset=18983, .match_offset=0 }, { .children_offset=18985, .match_offset=0 }, { .children_offset=0, .match_offset=35474 }, { .children_offset=18987, .match_offset=0 }, { .children_offset=18989, .match_offset=0 }, { .children_offset=18991, .match_offset=0 }, { .children_offset=0, .match_offset=110961 }, { .children_offset=18993, .match_offset=0 }, { .children_offset=18995, .match_offset=0 }, { .children_offset=0, .match_offset=115750 }, { .children_offset=18998, .match_offset=0 }, { .children_offset=0, .match_offset=43248 }, { .children_offset=19000, .match_offset=0 }, { .children_offset=19002, .match_offset=34706 }, { .children_offset=0, .match_offset=23788 }, { .children_offset=19004, .match_offset=28562 }, { .children_offset=19006, .match_offset=0 }, { .children_offset=19008, .match_offset=0 }, { .children_offset=19010, .match_offset=0 }, { .children_offset=0, .match_offset=6684 }, { .children_offset=19012, .match_offset=33413 }, { .children_offset=19015, .match_offset=0 }, { .children_offset=0, .match_offset=79022 }, { .children_offset=19017, .match_offset=0 }, { .children_offset=19019, .match_offset=0 }, { .children_offset=19021, .match_offset=0 }, { .children_offset=0, .match_offset=48127 }, { .children_offset=19023, .match_offset=0 }, { .children_offset=19025, .match_offset=0 }, { .children_offset=0, .match_offset=105723 }, { .children_offset=19027, .match_offset=0 }, { .children_offset=19029, .match_offset=0 }, { .children_offset=19031, .match_offset=0 }, { .children_offset=0, .match_offset=45017 }, { .children_offset=0, .match_offset=33500 }, { .children_offset=19033, .match_offset=43329 }, { .children_offset=19035, .match_offset=0 }, { .children_offset=0, .match_offset=118223 }, { .children_offset=19037, .match_offset=124775 }, { .children_offset=19044, .match_offset=0 }, { .children_offset=19046, .match_offset=0 }, { .children_offset=19048, .match_offset=0 }, { .children_offset=19050, .match_offset=0 }, { .children_offset=0, .match_offset=54003 }, { .children_offset=19052, .match_offset=133233 }, { .children_offset=19055, .match_offset=0 }, { .children_offset=0, .match_offset=29862 }, { .children_offset=19057, .match_offset=0 }, { .children_offset=19059, .match_offset=0 }, { .children_offset=19061, .match_offset=0 }, { .children_offset=0, .match_offset=40154 }, { .children_offset=19063, .match_offset=0 }, { .children_offset=19065, .match_offset=0 }, { .children_offset=19067, .match_offset=0 }, { .children_offset=19069, .match_offset=0 }, { .children_offset=0, .match_offset=35127 }, { .children_offset=19071, .match_offset=0 }, { .children_offset=19073, .match_offset=0 }, { .children_offset=19075, .match_offset=0 }, { .children_offset=19077, .match_offset=0 }, { .children_offset=0, .match_offset=64985 }, { .children_offset=19079, .match_offset=0 }, { .children_offset=19081, .match_offset=0 }, { .children_offset=19083, .match_offset=0 }, { .children_offset=0, .match_offset=27898 }, { .children_offset=19085, .match_offset=55793 }, { .children_offset=19088, .match_offset=0 }, { .children_offset=19090, .match_offset=0 }, { .children_offset=0, .match_offset=45252 }, { .children_offset=0, .match_offset=103926 }, { .children_offset=19092, .match_offset=0 }, { .children_offset=19095, .match_offset=0 }, { .children_offset=19097, .match_offset=0 }, { .children_offset=19099, .match_offset=0 }, { .children_offset=0, .match_offset=24360 }, { .children_offset=19101, .match_offset=0 }, { .children_offset=0, .match_offset=40432 }, { .children_offset=19103, .match_offset=55230 }, { .children_offset=19109, .match_offset=0 }, { .children_offset=0, .match_offset=103287 }, { .children_offset=19111, .match_offset=0 }, { .children_offset=19113, .match_offset=0 }, { .children_offset=19115, .match_offset=0 }, { .children_offset=19117, .match_offset=0 }, { .children_offset=0, .match_offset=136225 }, { .children_offset=0, .match_offset=117561 }, { .children_offset=19119, .match_offset=0 }, { .children_offset=0, .match_offset=78929 }, { .children_offset=19121, .match_offset=0 }, { .children_offset=19123, .match_offset=0 }, { .children_offset=0, .match_offset=58700 }, { .children_offset=19125, .match_offset=55430 }, { .children_offset=19127, .match_offset=0 }, { .children_offset=19129, .match_offset=0 }, { .children_offset=19131, .match_offset=0 }, { .children_offset=19133, .match_offset=0 }, { .children_offset=19135, .match_offset=0 }, { .children_offset=19137, .match_offset=0 }, { .children_offset=19139, .match_offset=0 }, { .children_offset=0, .match_offset=59453 }, { .children_offset=19141, .match_offset=0 }, { .children_offset=0, .match_offset=42831 }, { .children_offset=19143, .match_offset=0 }, { .children_offset=0, .match_offset=31044 }, { .children_offset=0, .match_offset=58243 }, { .children_offset=19145, .match_offset=0 }, { .children_offset=19147, .match_offset=0 }, { .children_offset=19149, .match_offset=0 }, { .children_offset=19151, .match_offset=0 }, { .children_offset=0, .match_offset=133294 }, { .children_offset=19153, .match_offset=0 }, { .children_offset=19155, .match_offset=0 }, { .children_offset=0, .match_offset=104117 }, { .children_offset=19158, .match_offset=0 }, { .children_offset=19160, .match_offset=20615 }, { .children_offset=19162, .match_offset=0 }, { .children_offset=19164, .match_offset=0 }, { .children_offset=19166, .match_offset=0 }, { .children_offset=19168, .match_offset=0 }, { .children_offset=19170, .match_offset=0 }, { .children_offset=0, .match_offset=69342 }, { .children_offset=19172, .match_offset=115337 }, { .children_offset=19174, .match_offset=0 }, { .children_offset=19176, .match_offset=0 }, { .children_offset=0, .match_offset=55241 }, { .children_offset=19178, .match_offset=0 }, { .children_offset=0, .match_offset=124819 }, { .children_offset=19180, .match_offset=6275 }, { .children_offset=19197, .match_offset=0 }, { .children_offset=0, .match_offset=114313 }, { .children_offset=0, .match_offset=66260 }, { .children_offset=0, .match_offset=33041 }, { .children_offset=0, .match_offset=125843 }, { .children_offset=0, .match_offset=130051 }, { .children_offset=0, .match_offset=134506 }, { .children_offset=0, .match_offset=79778 }, { .children_offset=19206, .match_offset=0 }, { .children_offset=19208, .match_offset=0 }, { .children_offset=19210, .match_offset=0 }, { .children_offset=0, .match_offset=27765 }, { .children_offset=19212, .match_offset=0 }, { .children_offset=19216, .match_offset=135473 }, { .children_offset=19222, .match_offset=0 }, { .children_offset=19224, .match_offset=0 }, { .children_offset=19226, .match_offset=0 }, { .children_offset=19228, .match_offset=0 }, { .children_offset=19230, .match_offset=0 }, { .children_offset=19232, .match_offset=0 }, { .children_offset=19234, .match_offset=0 }, { .children_offset=0, .match_offset=34856 }, { .children_offset=19236, .match_offset=0 }, { .children_offset=0, .match_offset=103140 }, { .children_offset=19238, .match_offset=0 }, { .children_offset=19240, .match_offset=0 }, { .children_offset=0, .match_offset=5747 }, { .children_offset=19242, .match_offset=0 }, { .children_offset=19244, .match_offset=0 }, { .children_offset=19246, .match_offset=0 }, { .children_offset=19248, .match_offset=0 }, { .children_offset=0, .match_offset=90056 }, { .children_offset=19250, .match_offset=0 }, { .children_offset=19253, .match_offset=0 }, { .children_offset=19255, .match_offset=0 }, { .children_offset=19257, .match_offset=0 }, { .children_offset=0, .match_offset=9884 }, { .children_offset=19259, .match_offset=0 }, { .children_offset=19262, .match_offset=0 }, { .children_offset=19264, .match_offset=0 }, { .children_offset=0, .match_offset=55 }, { .children_offset=19266, .match_offset=0 }, { .children_offset=19268, .match_offset=0 }, { .children_offset=19270, .match_offset=0 }, { .children_offset=0, .match_offset=53854 }, { .children_offset=19272, .match_offset=0 }, { .children_offset=19276, .match_offset=0 }, { .children_offset=19278, .match_offset=0 }, { .children_offset=19280, .match_offset=0 }, { .children_offset=19282, .match_offset=0 }, { .children_offset=19284, .match_offset=0 }, { .children_offset=19286, .match_offset=0 }, { .children_offset=19288, .match_offset=0 }, { .children_offset=0, .match_offset=56830 }, { .children_offset=19290, .match_offset=0 }, { .children_offset=19292, .match_offset=0 }, { .children_offset=0, .match_offset=10885 }, { .children_offset=19294, .match_offset=109305 }, { .children_offset=19297, .match_offset=0 }, { .children_offset=19299, .match_offset=0 }, { .children_offset=19301, .match_offset=0 }, { .children_offset=19303, .match_offset=0 }, { .children_offset=19305, .match_offset=0 }, { .children_offset=19307, .match_offset=0 }, { .children_offset=0, .match_offset=37514 }, { .children_offset=19309, .match_offset=79780 }, { .children_offset=19311, .match_offset=0 }, { .children_offset=19313, .match_offset=0 }, { .children_offset=0, .match_offset=28254 }, { .children_offset=19315, .match_offset=0 }, { .children_offset=19318, .match_offset=0 }, { .children_offset=19320, .match_offset=133306 }, { .children_offset=19322, .match_offset=0 }, { .children_offset=0, .match_offset=63041 }, { .children_offset=0, .match_offset=129631 }, { .children_offset=19324, .match_offset=0 }, { .children_offset=19326, .match_offset=0 }, { .children_offset=19328, .match_offset=0 }, { .children_offset=0, .match_offset=58051 }, { .children_offset=19330, .match_offset=0 }, { .children_offset=19332, .match_offset=0 }, { .children_offset=19334, .match_offset=0 }, { .children_offset=19336, .match_offset=0 }, { .children_offset=19338, .match_offset=0 }, { .children_offset=0, .match_offset=11328 }, { .children_offset=19340, .match_offset=58040 }, { .children_offset=0, .match_offset=124563 }, { .children_offset=0, .match_offset=8465 }, { .children_offset=0, .match_offset=122386 }, { .children_offset=19343, .match_offset=25662 }, { .children_offset=19346, .match_offset=0 }, { .children_offset=19348, .match_offset=0 }, { .children_offset=0, .match_offset=48467 }, { .children_offset=19350, .match_offset=0 }, { .children_offset=19352, .match_offset=0 }, { .children_offset=0, .match_offset=104078 }, { .children_offset=19354, .match_offset=0 }, { .children_offset=19356, .match_offset=0 }, { .children_offset=19358, .match_offset=0 }, { .children_offset=19360, .match_offset=0 }, { .children_offset=19362, .match_offset=0 }, { .children_offset=19364, .match_offset=0 }, { .children_offset=0, .match_offset=133570 }, { .children_offset=19366, .match_offset=0 }, { .children_offset=19370, .match_offset=0 }, { .children_offset=19373, .match_offset=0 }, { .children_offset=19375, .match_offset=0 }, { .children_offset=19377, .match_offset=0 }, { .children_offset=19379, .match_offset=0 }, { .children_offset=19381, .match_offset=0 }, { .children_offset=0, .match_offset=133491 }, { .children_offset=0, .match_offset=13868 }, { .children_offset=19383, .match_offset=0 }, { .children_offset=19386, .match_offset=0 }, { .children_offset=0, .match_offset=10271 }, { .children_offset=19388, .match_offset=0 }, { .children_offset=19390, .match_offset=0 }, { .children_offset=19392, .match_offset=0 }, { .children_offset=19394, .match_offset=0 }, { .children_offset=19396, .match_offset=0 }, { .children_offset=19398, .match_offset=0 }, { .children_offset=19400, .match_offset=0 }, { .children_offset=19402, .match_offset=0 }, { .children_offset=0, .match_offset=81939 }, { .children_offset=19404, .match_offset=119381 }, { .children_offset=19406, .match_offset=0 }, { .children_offset=0, .match_offset=65058 }, { .children_offset=19408, .match_offset=0 }, { .children_offset=0, .match_offset=60940 }, { .children_offset=19410, .match_offset=135898 }, { .children_offset=0, .match_offset=25405 }, { .children_offset=19413, .match_offset=0 }, { .children_offset=19415, .match_offset=0 }, { .children_offset=19417, .match_offset=0 }, { .children_offset=19419, .match_offset=0 }, { .children_offset=19421, .match_offset=0 }, { .children_offset=19423, .match_offset=0 }, { .children_offset=0, .match_offset=84932 }, { .children_offset=0, .match_offset=74686 }, { .children_offset=19425, .match_offset=0 }, { .children_offset=19431, .match_offset=0 }, { .children_offset=19433, .match_offset=0 }, { .children_offset=19435, .match_offset=0 }, { .children_offset=0, .match_offset=127290 }, { .children_offset=0, .match_offset=90683 }, { .children_offset=19437, .match_offset=0 }, { .children_offset=19439, .match_offset=0 }, { .children_offset=0, .match_offset=44774 }, { .children_offset=19441, .match_offset=0 }, { .children_offset=19444, .match_offset=0 }, { .children_offset=0, .match_offset=52255 }, { .children_offset=19446, .match_offset=0 }, { .children_offset=19449, .match_offset=0 }, { .children_offset=19451, .match_offset=0 }, { .children_offset=19453, .match_offset=0 }, { .children_offset=19455, .match_offset=0 }, { .children_offset=0, .match_offset=63622 }, { .children_offset=19457, .match_offset=0 }, { .children_offset=19459, .match_offset=0 }, { .children_offset=19461, .match_offset=0 }, { .children_offset=0, .match_offset=44774 }, { .children_offset=19463, .match_offset=90083 }, { .children_offset=19465, .match_offset=0 }, { .children_offset=0, .match_offset=13511 }, { .children_offset=19467, .match_offset=133395 }, { .children_offset=0, .match_offset=90041 }, { .children_offset=0, .match_offset=22100 }, { .children_offset=19470, .match_offset=65210 }, { .children_offset=19473, .match_offset=0 }, { .children_offset=19475, .match_offset=0 }, { .children_offset=19478, .match_offset=0 }, { .children_offset=0, .match_offset=6989 }, { .children_offset=19480, .match_offset=0 }, { .children_offset=19482, .match_offset=0 }, { .children_offset=0, .match_offset=43356 }, { .children_offset=19484, .match_offset=0 }, { .children_offset=19486, .match_offset=0 }, { .children_offset=19488, .match_offset=0 }, { .children_offset=19490, .match_offset=0 }, { .children_offset=0, .match_offset=71584 }, { .children_offset=19492, .match_offset=0 }, { .children_offset=0, .match_offset=53509 }, { .children_offset=19494, .match_offset=0 }, { .children_offset=0, .match_offset=68433 }, { .children_offset=0, .match_offset=129467 }, { .children_offset=19496, .match_offset=0 }, { .children_offset=19503, .match_offset=65380 }, { .children_offset=0, .match_offset=72007 }, { .children_offset=19505, .match_offset=34912 }, { .children_offset=0, .match_offset=43765 }, { .children_offset=0, .match_offset=34282 }, { .children_offset=0, .match_offset=129333 }, { .children_offset=0, .match_offset=88587 }, { .children_offset=19507, .match_offset=0 }, { .children_offset=0, .match_offset=87817 }, { .children_offset=19509, .match_offset=86725 }, { .children_offset=19525, .match_offset=0 }, { .children_offset=0, .match_offset=29222 }, { .children_offset=0, .match_offset=115601 }, { .children_offset=0, .match_offset=113297 }, { .children_offset=0, .match_offset=64402 }, { .children_offset=0, .match_offset=60516 }, { .children_offset=0, .match_offset=65727 }, { .children_offset=0, .match_offset=64363 }, { .children_offset=19534, .match_offset=0 }, { .children_offset=19536, .match_offset=0 }, { .children_offset=0, .match_offset=63414 }, { .children_offset=19538, .match_offset=0 }, { .children_offset=19540, .match_offset=0 }, { .children_offset=19542, .match_offset=0 }, { .children_offset=19544, .match_offset=0 }, { .children_offset=19546, .match_offset=0 }, { .children_offset=0, .match_offset=29130 }, { .children_offset=19548, .match_offset=0 }, { .children_offset=19551, .match_offset=60518 }, { .children_offset=0, .match_offset=104198 }, { .children_offset=19553, .match_offset=0 }, { .children_offset=19555, .match_offset=0 }, { .children_offset=0, .match_offset=48209 }, { .children_offset=19557, .match_offset=23038 }, { .children_offset=19561, .match_offset=0 }, { .children_offset=19563, .match_offset=0 }, { .children_offset=19565, .match_offset=0 }, { .children_offset=19567, .match_offset=0 }, { .children_offset=19569, .match_offset=0 }, { .children_offset=19571, .match_offset=0 }, { .children_offset=19573, .match_offset=105811 }, { .children_offset=19575, .match_offset=0 }, { .children_offset=0, .match_offset=55163 }, { .children_offset=19577, .match_offset=0 }, { .children_offset=19579, .match_offset=20474 }, { .children_offset=19581, .match_offset=0 }, { .children_offset=19587, .match_offset=0 }, { .children_offset=19589, .match_offset=0 }, { .children_offset=19591, .match_offset=0 }, { .children_offset=19593, .match_offset=0 }, { .children_offset=0, .match_offset=61477 }, { .children_offset=19595, .match_offset=0 }, { .children_offset=19597, .match_offset=0 }, { .children_offset=19599, .match_offset=0 }, { .children_offset=19601, .match_offset=0 }, { .children_offset=0, .match_offset=45830 }, { .children_offset=19603, .match_offset=0 }, { .children_offset=19605, .match_offset=0 }, { .children_offset=19607, .match_offset=0 }, { .children_offset=19609, .match_offset=0 }, { .children_offset=0, .match_offset=125490 }, { .children_offset=19611, .match_offset=0 }, { .children_offset=19613, .match_offset=0 }, { .children_offset=19615, .match_offset=0 }, { .children_offset=19617, .match_offset=0 }, { .children_offset=0, .match_offset=103577 }, { .children_offset=19619, .match_offset=0 }, { .children_offset=19621, .match_offset=0 }, { .children_offset=19623, .match_offset=0 }, { .children_offset=0, .match_offset=62706 }, { .children_offset=0, .match_offset=102894 }, { .children_offset=19625, .match_offset=0 }, { .children_offset=19627, .match_offset=44123 }, { .children_offset=19629, .match_offset=0 }, { .children_offset=19634, .match_offset=0 }, { .children_offset=19636, .match_offset=0 }, { .children_offset=19638, .match_offset=0 }, { .children_offset=19640, .match_offset=0 }, { .children_offset=19642, .match_offset=0 }, { .children_offset=0, .match_offset=67793 }, { .children_offset=19644, .match_offset=0 }, { .children_offset=19646, .match_offset=0 }, { .children_offset=0, .match_offset=5629 }, { .children_offset=19648, .match_offset=0 }, { .children_offset=19650, .match_offset=0 }, { .children_offset=19652, .match_offset=0 }, { .children_offset=19654, .match_offset=0 }, { .children_offset=19656, .match_offset=0 }, { .children_offset=19658, .match_offset=0 }, { .children_offset=19660, .match_offset=0 }, { .children_offset=19662, .match_offset=0 }, { .children_offset=19664, .match_offset=0 }, { .children_offset=0, .match_offset=90547 }, { .children_offset=19666, .match_offset=0 }, { .children_offset=19668, .match_offset=0 }, { .children_offset=19670, .match_offset=0 }, { .children_offset=19672, .match_offset=0 }, { .children_offset=0, .match_offset=30489 }, { .children_offset=0, .match_offset=121936 }, { .children_offset=19674, .match_offset=0 }, { .children_offset=19676, .match_offset=0 }, { .children_offset=19678, .match_offset=0 }, { .children_offset=0, .match_offset=29860 }, { .children_offset=19680, .match_offset=0 }, { .children_offset=19682, .match_offset=0 }, { .children_offset=19684, .match_offset=0 }, { .children_offset=19686, .match_offset=0 }, { .children_offset=19688, .match_offset=0 }, { .children_offset=19690, .match_offset=0 }, { .children_offset=19692, .match_offset=0 }, { .children_offset=19694, .match_offset=0 }, { .children_offset=19696, .match_offset=0 }, { .children_offset=0, .match_offset=126522 }, { .children_offset=19698, .match_offset=73813 }, { .children_offset=19701, .match_offset=0 }, { .children_offset=0, .match_offset=115997 }, { .children_offset=19703, .match_offset=0 }, { .children_offset=19705, .match_offset=67659 }, { .children_offset=0, .match_offset=27738 }, { .children_offset=19707, .match_offset=5288 }, { .children_offset=19709, .match_offset=0 }, { .children_offset=19711, .match_offset=0 }, { .children_offset=19713, .match_offset=0 }, { .children_offset=19715, .match_offset=0 }, { .children_offset=19717, .match_offset=0 }, { .children_offset=19719, .match_offset=0 }, { .children_offset=19721, .match_offset=0 }, { .children_offset=19723, .match_offset=0 }, { .children_offset=0, .match_offset=109428 }, { .children_offset=19725, .match_offset=0 }, { .children_offset=19728, .match_offset=0 }, { .children_offset=19730, .match_offset=0 }, { .children_offset=19732, .match_offset=0 }, { .children_offset=19734, .match_offset=0 }, { .children_offset=0, .match_offset=104210 }, { .children_offset=19736, .match_offset=0 }, { .children_offset=0, .match_offset=57956 }, { .children_offset=19738, .match_offset=0 }, { .children_offset=19740, .match_offset=0 }, { .children_offset=19742, .match_offset=0 }, { .children_offset=19744, .match_offset=0 }, { .children_offset=19746, .match_offset=0 }, { .children_offset=0, .match_offset=90616 }, { .children_offset=19748, .match_offset=37540 }, { .children_offset=19750, .match_offset=0 }, { .children_offset=19752, .match_offset=0 }, { .children_offset=19754, .match_offset=0 }, { .children_offset=0, .match_offset=11095 }, { .children_offset=19756, .match_offset=0 }, { .children_offset=0, .match_offset=8603 }, { .children_offset=19758, .match_offset=0 }, { .children_offset=0, .match_offset=50609 }, { .children_offset=19760, .match_offset=122751 }, { .children_offset=19762, .match_offset=0 }, { .children_offset=19765, .match_offset=0 }, { .children_offset=19767, .match_offset=0 }, { .children_offset=19769, .match_offset=0 }, { .children_offset=19771, .match_offset=0 }, { .children_offset=0, .match_offset=26885 }, { .children_offset=19773, .match_offset=0 }, { .children_offset=19775, .match_offset=0 }, { .children_offset=19777, .match_offset=0 }, { .children_offset=19779, .match_offset=0 }, { .children_offset=0, .match_offset=81070 }, { .children_offset=19781, .match_offset=129375 }, { .children_offset=19788, .match_offset=84898 }, { .children_offset=0, .match_offset=102729 }, { .children_offset=0, .match_offset=117658 }, { .children_offset=0, .match_offset=42246 }, { .children_offset=0, .match_offset=37598 }, { .children_offset=19793, .match_offset=87329 }, { .children_offset=0, .match_offset=49710 }, { .children_offset=0, .match_offset=39237 }, { .children_offset=19796, .match_offset=58944 }, { .children_offset=19801, .match_offset=26486 }, { .children_offset=0, .match_offset=41947 }, { .children_offset=0, .match_offset=37163 }, { .children_offset=0, .match_offset=33455 }, { .children_offset=0, .match_offset=55152 }, { .children_offset=0, .match_offset=110389 }, { .children_offset=19804, .match_offset=22592 }, { .children_offset=0, .match_offset=67822 }, { .children_offset=0, .match_offset=117574 }, { .children_offset=19807, .match_offset=57985 }, { .children_offset=19813, .match_offset=6778 }, { .children_offset=0, .match_offset=52718 }, { .children_offset=0, .match_offset=69054 }, { .children_offset=0, .match_offset=34625 }, { .children_offset=19816, .match_offset=6713 }, { .children_offset=0, .match_offset=57357 }, { .children_offset=0, .match_offset=57946 }, { .children_offset=0, .match_offset=63614 }, { .children_offset=19818, .match_offset=58867 }, { .children_offset=0, .match_offset=57515 }, { .children_offset=19823, .match_offset=46008 }, { .children_offset=0, .match_offset=122603 }, { .children_offset=0, .match_offset=13866 }, { .children_offset=0, .match_offset=33953 }, { .children_offset=19825, .match_offset=119614 }, { .children_offset=19832, .match_offset=10598 }, { .children_offset=0, .match_offset=134192 }, { .children_offset=0, .match_offset=64558 }, { .children_offset=0, .match_offset=134597 }, { .children_offset=0, .match_offset=126415 }, { .children_offset=19836, .match_offset=78410 }, { .children_offset=19841, .match_offset=1495 }, { .children_offset=0, .match_offset=7593 }, { .children_offset=0, .match_offset=10919 }, { .children_offset=0, .match_offset=34952 }, { .children_offset=0, .match_offset=29090 }, { .children_offset=0, .match_offset=22027 }, { .children_offset=19844, .match_offset=74039 }, { .children_offset=19849, .match_offset=0 }, { .children_offset=0, .match_offset=14632 }, { .children_offset=0, .match_offset=45994 }, { .children_offset=0, .match_offset=79723 }, { .children_offset=0, .match_offset=124732 }, { .children_offset=19851, .match_offset=57159 }, { .children_offset=19857, .match_offset=65403 }, { .children_offset=0, .match_offset=71508 }, { .children_offset=0, .match_offset=6156 }, { .children_offset=0, .match_offset=74603 }, { .children_offset=19860, .match_offset=44655 }, { .children_offset=0, .match_offset=125002 }, { .children_offset=0, .match_offset=90530 }, { .children_offset=0, .match_offset=30978 }, { .children_offset=19862, .match_offset=33457 }, { .children_offset=0, .match_offset=5485 }, { .children_offset=19866, .match_offset=134972 }, { .children_offset=0, .match_offset=49881 }, { .children_offset=0, .match_offset=123264 }, { .children_offset=19868, .match_offset=0 }, { .children_offset=19874, .match_offset=37262 }, { .children_offset=0, .match_offset=58871 }, { .children_offset=0, .match_offset=90626 }, { .children_offset=0, .match_offset=30724 }, { .children_offset=0, .match_offset=134582 }, { .children_offset=19879, .match_offset=124734 }, { .children_offset=0, .match_offset=111140 }, { .children_offset=0, .match_offset=21666 }, { .children_offset=19882, .match_offset=105795 }, { .children_offset=19887, .match_offset=80736 }, { .children_offset=0, .match_offset=89523 }, { .children_offset=0, .match_offset=71510 }, { .children_offset=0, .match_offset=78529 }, { .children_offset=0, .match_offset=50205 }, { .children_offset=0, .match_offset=79708 }, { .children_offset=0, .match_offset=22476 }, { .children_offset=19891, .match_offset=0 }, { .children_offset=0, .match_offset=52225 }, { .children_offset=0, .match_offset=130989 }, { .children_offset=0, .match_offset=67362 }, { .children_offset=19895, .match_offset=0 }, { .children_offset=0, .match_offset=70696 }, { .children_offset=19899, .match_offset=39457 }, { .children_offset=0, .match_offset=56922 }, { .children_offset=0, .match_offset=58485 }, { .children_offset=19901, .match_offset=7536 }, { .children_offset=19919, .match_offset=0 }, { .children_offset=0, .match_offset=109756 }, { .children_offset=0, .match_offset=109206 }, { .children_offset=0, .match_offset=33421 }, { .children_offset=0, .match_offset=109179 }, { .children_offset=0, .match_offset=58788 }, { .children_offset=0, .match_offset=108113 }, { .children_offset=0, .match_offset=111480 }, { .children_offset=0, .match_offset=70929 }, { .children_offset=19928, .match_offset=118221 }, { .children_offset=19930, .match_offset=0 }, { .children_offset=0, .match_offset=33172 }, { .children_offset=19932, .match_offset=0 }, { .children_offset=19935, .match_offset=0 }, { .children_offset=0, .match_offset=103699 }, { .children_offset=19937, .match_offset=0 }, { .children_offset=19939, .match_offset=0 }, { .children_offset=0, .match_offset=125043 }, { .children_offset=0, .match_offset=48215 }, { .children_offset=0, .match_offset=104534 }, { .children_offset=19941, .match_offset=0 }, { .children_offset=0, .match_offset=71543 }, { .children_offset=19943, .match_offset=0 }, { .children_offset=19949, .match_offset=0 }, { .children_offset=0, .match_offset=16884 }, { .children_offset=19951, .match_offset=0 }, { .children_offset=19953, .match_offset=0 }, { .children_offset=19955, .match_offset=0 }, { .children_offset=0, .match_offset=90318 }, { .children_offset=0, .match_offset=64699 }, { .children_offset=19957, .match_offset=0 }, { .children_offset=19959, .match_offset=0 }, { .children_offset=0, .match_offset=1075 }, { .children_offset=0, .match_offset=65711 }, { .children_offset=19961, .match_offset=109593 }, { .children_offset=19964, .match_offset=0 }, { .children_offset=19966, .match_offset=0 }, { .children_offset=19968, .match_offset=0 }, { .children_offset=19970, .match_offset=0 }, { .children_offset=19972, .match_offset=0 }, { .children_offset=19974, .match_offset=0 }, { .children_offset=0, .match_offset=111458 }, { .children_offset=19976, .match_offset=0 }, { .children_offset=19978, .match_offset=0 }, { .children_offset=0, .match_offset=29833 }, { .children_offset=19980, .match_offset=1153 }, { .children_offset=19982, .match_offset=0 }, { .children_offset=19984, .match_offset=27179 }, { .children_offset=19986, .match_offset=0 }, { .children_offset=19988, .match_offset=0 }, { .children_offset=0, .match_offset=65298 }, { .children_offset=19990, .match_offset=65773 }, { .children_offset=19996, .match_offset=109913 }, { .children_offset=20000, .match_offset=0 }, { .children_offset=0, .match_offset=13397 }, { .children_offset=20002, .match_offset=0 }, { .children_offset=20004, .match_offset=0 }, { .children_offset=20006, .match_offset=0 }, { .children_offset=20008, .match_offset=0 }, { .children_offset=20010, .match_offset=0 }, { .children_offset=20012, .match_offset=0 }, { .children_offset=20014, .match_offset=0 }, { .children_offset=20016, .match_offset=0 }, { .children_offset=0, .match_offset=9929 }, { .children_offset=20018, .match_offset=0 }, { .children_offset=20020, .match_offset=0 }, { .children_offset=20022, .match_offset=0 }, { .children_offset=20024, .match_offset=0 }, { .children_offset=20026, .match_offset=0 }, { .children_offset=20028, .match_offset=0 }, { .children_offset=20030, .match_offset=0 }, { .children_offset=20032, .match_offset=0 }, { .children_offset=20034, .match_offset=0 }, { .children_offset=0, .match_offset=1120 }, { .children_offset=0, .match_offset=43800 }, { .children_offset=0, .match_offset=53552 }, { .children_offset=20036, .match_offset=0 }, { .children_offset=0, .match_offset=55212 }, { .children_offset=0, .match_offset=62938 }, { .children_offset=20038, .match_offset=1879 }, { .children_offset=0, .match_offset=58015 }, { .children_offset=20040, .match_offset=0 }, { .children_offset=0, .match_offset=130277 }, { .children_offset=20047, .match_offset=0 }, { .children_offset=20049, .match_offset=0 }, { .children_offset=0, .match_offset=114321 }, { .children_offset=20051, .match_offset=130886 }, { .children_offset=20053, .match_offset=0 }, { .children_offset=20055, .match_offset=0 }, { .children_offset=20057, .match_offset=0 }, { .children_offset=20059, .match_offset=0 }, { .children_offset=20061, .match_offset=0 }, { .children_offset=20063, .match_offset=119103 }, { .children_offset=20066, .match_offset=0 }, { .children_offset=20068, .match_offset=0 }, { .children_offset=20076, .match_offset=0 }, { .children_offset=20078, .match_offset=0 }, { .children_offset=20080, .match_offset=0 }, { .children_offset=0, .match_offset=24268 }, { .children_offset=0, .match_offset=21130 }, { .children_offset=0, .match_offset=20294 }, { .children_offset=0, .match_offset=33449 }, { .children_offset=0, .match_offset=25694 }, { .children_offset=0, .match_offset=122282 }, { .children_offset=0, .match_offset=61105 }, { .children_offset=20088, .match_offset=0 }, { .children_offset=20090, .match_offset=0 }, { .children_offset=20092, .match_offset=0 }, { .children_offset=0, .match_offset=89519 }, { .children_offset=0, .match_offset=12470 }, { .children_offset=0, .match_offset=126436 }, { .children_offset=0, .match_offset=22144 }, { .children_offset=0, .match_offset=78986 }, { .children_offset=0, .match_offset=124885 }, { .children_offset=0, .match_offset=61551 }, { .children_offset=20100, .match_offset=0 }, { .children_offset=20102, .match_offset=0 }, { .children_offset=20104, .match_offset=0 }, { .children_offset=0, .match_offset=66443 }, { .children_offset=0, .match_offset=115416 }, { .children_offset=0, .match_offset=28579 }, { .children_offset=0, .match_offset=2296 }, { .children_offset=0, .match_offset=34629 }, { .children_offset=0, .match_offset=13547 }, { .children_offset=0, .match_offset=9037 }, { .children_offset=20112, .match_offset=0 }, { .children_offset=20114, .match_offset=0 }, { .children_offset=20116, .match_offset=0 }, { .children_offset=0, .match_offset=6682 }, { .children_offset=0, .match_offset=28581 }, { .children_offset=0, .match_offset=13807 }, { .children_offset=0, .match_offset=32957 }, { .children_offset=0, .match_offset=69318 }, { .children_offset=0, .match_offset=64569 }, { .children_offset=0, .match_offset=124689 }, { .children_offset=20124, .match_offset=0 }, { .children_offset=20126, .match_offset=0 }, { .children_offset=20128, .match_offset=0 }, { .children_offset=0, .match_offset=62571 }, { .children_offset=0, .match_offset=27547 }, { .children_offset=0, .match_offset=2122 }, { .children_offset=0, .match_offset=58692 }, { .children_offset=0, .match_offset=28035 }, { .children_offset=0, .match_offset=104305 }, { .children_offset=0, .match_offset=14231 }, { .children_offset=20136, .match_offset=0 }, { .children_offset=20138, .match_offset=0 }, { .children_offset=20140, .match_offset=0 }, { .children_offset=0, .match_offset=58523 }, { .children_offset=0, .match_offset=68598 }, { .children_offset=0, .match_offset=108164 }, { .children_offset=0, .match_offset=132592 }, { .children_offset=0, .match_offset=5254 }, { .children_offset=0, .match_offset=103344 }, { .children_offset=0, .match_offset=38455 }, { .children_offset=20148, .match_offset=0 }, { .children_offset=20150, .match_offset=0 }, { .children_offset=20152, .match_offset=0 }, { .children_offset=0, .match_offset=87378 }, { .children_offset=0, .match_offset=87851 }, { .children_offset=0, .match_offset=46721 }, { .children_offset=0, .match_offset=119653 }, { .children_offset=0, .match_offset=68108 }, { .children_offset=0, .match_offset=78592 }, { .children_offset=0, .match_offset=68455 }, { .children_offset=20160, .match_offset=0 }, { .children_offset=20163, .match_offset=0 }, { .children_offset=20165, .match_offset=0 }, { .children_offset=0, .match_offset=134849 }, { .children_offset=0, .match_offset=58599 }, { .children_offset=20167, .match_offset=124928 }, { .children_offset=0, .match_offset=65372 }, { .children_offset=0, .match_offset=42042 }, { .children_offset=20169, .match_offset=0 }, { .children_offset=0, .match_offset=60520 }, { .children_offset=20171, .match_offset=0 }, { .children_offset=20173, .match_offset=0 }, { .children_offset=20175, .match_offset=0 }, { .children_offset=20177, .match_offset=0 }, { .children_offset=20179, .match_offset=0 }, { .children_offset=0, .match_offset=114871 }, { .children_offset=20181, .match_offset=53812 }, { .children_offset=0, .match_offset=73864 }, { .children_offset=20184, .match_offset=0 }, { .children_offset=0, .match_offset=121931 }, { .children_offset=20186, .match_offset=0 }, { .children_offset=20189, .match_offset=38973 }, { .children_offset=20191, .match_offset=0 }, { .children_offset=20193, .match_offset=0 }, { .children_offset=20195, .match_offset=0 }, { .children_offset=20197, .match_offset=0 }, { .children_offset=0, .match_offset=42269 }, { .children_offset=20199, .match_offset=0 }, { .children_offset=0, .match_offset=132210 }, { .children_offset=0, .match_offset=26863 }, { .children_offset=0, .match_offset=41878 }, { .children_offset=20201, .match_offset=119577 }, { .children_offset=0, .match_offset=109830 }, { .children_offset=20204, .match_offset=0 }, { .children_offset=0, .match_offset=9011 }, { .children_offset=20206, .match_offset=0 }, { .children_offset=20208, .match_offset=0 }, { .children_offset=20210, .match_offset=0 }, { .children_offset=20212, .match_offset=0 }, { .children_offset=20214, .match_offset=0 }, { .children_offset=0, .match_offset=132320 }, { .children_offset=20216, .match_offset=0 }, { .children_offset=20220, .match_offset=0 }, { .children_offset=0, .match_offset=104307 }, { .children_offset=20222, .match_offset=0 }, { .children_offset=20224, .match_offset=0 }, { .children_offset=20226, .match_offset=0 }, { .children_offset=0, .match_offset=104117 }, { .children_offset=20228, .match_offset=0 }, { .children_offset=20230, .match_offset=0 }, { .children_offset=20232, .match_offset=0 }, { .children_offset=0, .match_offset=1536 }, { .children_offset=20234, .match_offset=0 }, { .children_offset=0, .match_offset=110982 }, { .children_offset=20236, .match_offset=68993 }, { .children_offset=20250, .match_offset=0 }, { .children_offset=0, .match_offset=14490 }, { .children_offset=0, .match_offset=104088 }, { .children_offset=0, .match_offset=69109 }, { .children_offset=20254, .match_offset=0 }, { .children_offset=0, .match_offset=25531 }, { .children_offset=20257, .match_offset=0 }, { .children_offset=20259, .match_offset=0 }, { .children_offset=20261, .match_offset=0 }, { .children_offset=20263, .match_offset=0 }, { .children_offset=0, .match_offset=131875 }, { .children_offset=20265, .match_offset=124591 }, { .children_offset=0, .match_offset=126578 }, { .children_offset=20267, .match_offset=0 }, { .children_offset=20269, .match_offset=0 }, { .children_offset=20271, .match_offset=0 }, { .children_offset=20273, .match_offset=0 }, { .children_offset=0, .match_offset=45926 }, { .children_offset=20275, .match_offset=0 }, { .children_offset=20277, .match_offset=0 }, { .children_offset=20279, .match_offset=0 }, { .children_offset=0, .match_offset=122659 }, { .children_offset=0, .match_offset=30666 }, { .children_offset=20281, .match_offset=0 }, { .children_offset=0, .match_offset=26133 }, { .children_offset=20283, .match_offset=0 }, { .children_offset=20286, .match_offset=0 }, { .children_offset=0, .match_offset=136554 }, { .children_offset=20288, .match_offset=119238 }, { .children_offset=20291, .match_offset=0 }, { .children_offset=20293, .match_offset=0 }, { .children_offset=20295, .match_offset=0 }, { .children_offset=20297, .match_offset=0 }, { .children_offset=20299, .match_offset=0 }, { .children_offset=20301, .match_offset=0 }, { .children_offset=20303, .match_offset=0 }, { .children_offset=0, .match_offset=37648 }, { .children_offset=20305, .match_offset=0 }, { .children_offset=20307, .match_offset=0 }, { .children_offset=20309, .match_offset=0 }, { .children_offset=20311, .match_offset=0 }, { .children_offset=0, .match_offset=13216 }, { .children_offset=20313, .match_offset=30365 }, { .children_offset=20316, .match_offset=0 }, { .children_offset=20318, .match_offset=0 }, { .children_offset=20320, .match_offset=0 }, { .children_offset=20322, .match_offset=10620 }, { .children_offset=0, .match_offset=111153 }, { .children_offset=20324, .match_offset=136035 }, { .children_offset=20326, .match_offset=0 }, { .children_offset=20328, .match_offset=0 }, { .children_offset=20330, .match_offset=0 }, { .children_offset=20332, .match_offset=0 }, { .children_offset=0, .match_offset=89401 }, { .children_offset=20334, .match_offset=20582 }, { .children_offset=0, .match_offset=30974 }, { .children_offset=0, .match_offset=22498 }, { .children_offset=0, .match_offset=33166 }, { .children_offset=20338, .match_offset=0 }, { .children_offset=20340, .match_offset=0 }, { .children_offset=0, .match_offset=28706 }, { .children_offset=20342, .match_offset=0 }, { .children_offset=20344, .match_offset=70671 }, { .children_offset=20346, .match_offset=0 }, { .children_offset=0, .match_offset=58795 }, { .children_offset=20348, .match_offset=0 }, { .children_offset=0, .match_offset=27970 }, { .children_offset=0, .match_offset=21865 }, { .children_offset=20350, .match_offset=0 }, { .children_offset=20356, .match_offset=115414 }, { .children_offset=0, .match_offset=31015 }, { .children_offset=20359, .match_offset=0 }, { .children_offset=0, .match_offset=109176 }, { .children_offset=20361, .match_offset=48154 }, { .children_offset=0, .match_offset=81158 }, { .children_offset=0, .match_offset=10951 }, { .children_offset=0, .match_offset=54259 }, { .children_offset=0, .match_offset=6819 }, { .children_offset=20363, .match_offset=0 }, { .children_offset=20370, .match_offset=59100 }, { .children_offset=0, .match_offset=67812 }, { .children_offset=0, .match_offset=11423 }, { .children_offset=0, .match_offset=43802 }, { .children_offset=20374, .match_offset=56573 }, { .children_offset=0, .match_offset=35391 }, { .children_offset=0, .match_offset=122127 }, { .children_offset=20377, .match_offset=85271 }, { .children_offset=20382, .match_offset=65553 }, { .children_offset=0, .match_offset=57523 }, { .children_offset=0, .match_offset=46661 }, { .children_offset=0, .match_offset=103437 }, { .children_offset=0, .match_offset=119272 }, { .children_offset=0, .match_offset=65471 }, { .children_offset=0, .match_offset=56959 }, { .children_offset=20386, .match_offset=65212 }, { .children_offset=0, .match_offset=131638 }, { .children_offset=0, .match_offset=29092 }, { .children_offset=0, .match_offset=55980 }, { .children_offset=20390, .match_offset=0 }, { .children_offset=20392, .match_offset=122669 }, { .children_offset=0, .match_offset=10290 }, { .children_offset=0, .match_offset=61569 }, { .children_offset=0, .match_offset=111395 }, { .children_offset=20396, .match_offset=0 }, { .children_offset=0, .match_offset=135796 }, { .children_offset=20398, .match_offset=0 }, { .children_offset=0, .match_offset=113529 }, { .children_offset=20404, .match_offset=0 }, { .children_offset=20406, .match_offset=0 }, { .children_offset=20408, .match_offset=0 }, { .children_offset=0, .match_offset=59088 }, { .children_offset=20410, .match_offset=0 }, { .children_offset=20412, .match_offset=0 }, { .children_offset=20414, .match_offset=0 }, { .children_offset=0, .match_offset=86267 }, { .children_offset=20417, .match_offset=0 }, { .children_offset=0, .match_offset=116300 }, { .children_offset=20419, .match_offset=0 }, { .children_offset=20422, .match_offset=0 }, { .children_offset=20424, .match_offset=0 }, { .children_offset=20426, .match_offset=6947 }, { .children_offset=20429, .match_offset=0 }, { .children_offset=20431, .match_offset=0 }, { .children_offset=20433, .match_offset=0 }, { .children_offset=20435, .match_offset=0 }, { .children_offset=20437, .match_offset=0 }, { .children_offset=0, .match_offset=55947 }, { .children_offset=20439, .match_offset=0 }, { .children_offset=20441, .match_offset=0 }, { .children_offset=20443, .match_offset=0 }, { .children_offset=20445, .match_offset=0 }, { .children_offset=0, .match_offset=63087 }, { .children_offset=20447, .match_offset=0 }, { .children_offset=20449, .match_offset=0 }, { .children_offset=20451, .match_offset=0 }, { .children_offset=20453, .match_offset=0 }, { .children_offset=20455, .match_offset=0 }, { .children_offset=20457, .match_offset=0 }, { .children_offset=20459, .match_offset=0 }, { .children_offset=20461, .match_offset=0 }, { .children_offset=0, .match_offset=134325 }, { .children_offset=20463, .match_offset=0 }, { .children_offset=20465, .match_offset=0 }, { .children_offset=20467, .match_offset=0 }, { .children_offset=20469, .match_offset=0 }, { .children_offset=20471, .match_offset=0 }, { .children_offset=20473, .match_offset=0 }, { .children_offset=20475, .match_offset=0 }, { .children_offset=0, .match_offset=1235 }, { .children_offset=20477, .match_offset=85285 }, { .children_offset=0, .match_offset=90581 }, { .children_offset=0, .match_offset=22822 }, { .children_offset=20482, .match_offset=90116 }, { .children_offset=0, .match_offset=115341 }, { .children_offset=20484, .match_offset=15502 }, { .children_offset=0, .match_offset=129463 }, { .children_offset=20487, .match_offset=90522 }, { .children_offset=0, .match_offset=13218 }, { .children_offset=20489, .match_offset=0 }, { .children_offset=20517, .match_offset=0 }, { .children_offset=0, .match_offset=90062 }, { .children_offset=0, .match_offset=77771 }, { .children_offset=0, .match_offset=122593 }, { .children_offset=0, .match_offset=25797 }, { .children_offset=20529, .match_offset=129891 }, { .children_offset=20531, .match_offset=0 }, { .children_offset=20533, .match_offset=0 }, { .children_offset=20535, .match_offset=0 }, { .children_offset=0, .match_offset=86716 }, { .children_offset=20537, .match_offset=0 }, { .children_offset=20539, .match_offset=0 }, { .children_offset=20541, .match_offset=0 }, { .children_offset=0, .match_offset=60946 }, { .children_offset=20543, .match_offset=0 }, { .children_offset=0, .match_offset=129992 }, { .children_offset=0, .match_offset=69333 }, { .children_offset=20545, .match_offset=63007 }, { .children_offset=20547, .match_offset=0 }, { .children_offset=0, .match_offset=33932 }, { .children_offset=0, .match_offset=40620 }, { .children_offset=20549, .match_offset=0 }, { .children_offset=20554, .match_offset=117662 }, { .children_offset=20557, .match_offset=0 }, { .children_offset=0, .match_offset=55395 }, { .children_offset=0, .match_offset=50068 }, { .children_offset=20559, .match_offset=80560 }, { .children_offset=0, .match_offset=65499 }, { .children_offset=0, .match_offset=112680 }, { .children_offset=0, .match_offset=23046 }, { .children_offset=20561, .match_offset=0 }, { .children_offset=20564, .match_offset=0 }, { .children_offset=0, .match_offset=37498 }, { .children_offset=0, .match_offset=130297 }, { .children_offset=0, .match_offset=81101 }, { .children_offset=0, .match_offset=89192 }, { .children_offset=20574, .match_offset=45879 }, { .children_offset=0, .match_offset=78680 }, { .children_offset=0, .match_offset=129428 }, { .children_offset=0, .match_offset=135827 }, { .children_offset=0, .match_offset=130893 }, { .children_offset=20576, .match_offset=30058 }, { .children_offset=0, .match_offset=16395 }, { .children_offset=20578, .match_offset=0 }, { .children_offset=20585, .match_offset=58435 }, { .children_offset=0, .match_offset=22775 }, { .children_offset=20587, .match_offset=6136 }, { .children_offset=0, .match_offset=20633 }, { .children_offset=0, .match_offset=113805 }, { .children_offset=0, .match_offset=42979 }, { .children_offset=0, .match_offset=103587 }, { .children_offset=0, .match_offset=42937 }, { .children_offset=20589, .match_offset=27840 }, { .children_offset=20593, .match_offset=0 }, { .children_offset=20595, .match_offset=0 }, { .children_offset=20597, .match_offset=0 }, { .children_offset=0, .match_offset=103480 }, { .children_offset=20599, .match_offset=39454 }, { .children_offset=0, .match_offset=43246 }, { .children_offset=20601, .match_offset=0 }, { .children_offset=20603, .match_offset=0 }, { .children_offset=0, .match_offset=68768 }, { .children_offset=20605, .match_offset=57359 }, { .children_offset=20607, .match_offset=0 }, { .children_offset=20609, .match_offset=0 }, { .children_offset=20611, .match_offset=0 }, { .children_offset=20613, .match_offset=0 }, { .children_offset=0, .match_offset=63790 }, { .children_offset=20615, .match_offset=42959 }, { .children_offset=20621, .match_offset=123153 }, { .children_offset=20623, .match_offset=0 }, { .children_offset=20625, .match_offset=0 }, { .children_offset=20627, .match_offset=0 }, { .children_offset=20629, .match_offset=0 }, { .children_offset=20631, .match_offset=0 }, { .children_offset=20633, .match_offset=0 }, { .children_offset=20635, .match_offset=0 }, { .children_offset=20637, .match_offset=0 }, { .children_offset=0, .match_offset=78430 }, { .children_offset=20639, .match_offset=0 }, { .children_offset=20643, .match_offset=0 }, { .children_offset=20645, .match_offset=0 }, { .children_offset=20647, .match_offset=0 }, { .children_offset=0, .match_offset=14968 }, { .children_offset=20649, .match_offset=0 }, { .children_offset=20651, .match_offset=0 }, { .children_offset=20653, .match_offset=0 }, { .children_offset=20655, .match_offset=0 }, { .children_offset=20657, .match_offset=0 }, { .children_offset=0, .match_offset=66399 }, { .children_offset=20659, .match_offset=0 }, { .children_offset=0, .match_offset=113996 }, { .children_offset=0, .match_offset=134730 }, { .children_offset=20662, .match_offset=0 }, { .children_offset=20664, .match_offset=0 }, { .children_offset=0, .match_offset=56627 }, { .children_offset=20666, .match_offset=0 }, { .children_offset=0, .match_offset=113813 }, { .children_offset=0, .match_offset=109840 }, { .children_offset=20668, .match_offset=22636 }, { .children_offset=20673, .match_offset=0 }, { .children_offset=20676, .match_offset=0 }, { .children_offset=20678, .match_offset=0 }, { .children_offset=20680, .match_offset=0 }, { .children_offset=20683, .match_offset=0 }, { .children_offset=20685, .match_offset=0 }, { .children_offset=0, .match_offset=10022 }, { .children_offset=20687, .match_offset=0 }, { .children_offset=20689, .match_offset=0 }, { .children_offset=20691, .match_offset=0 }, { .children_offset=20693, .match_offset=0 }, { .children_offset=20695, .match_offset=0 }, { .children_offset=20697, .match_offset=0 }, { .children_offset=20699, .match_offset=0 }, { .children_offset=0, .match_offset=108751 }, { .children_offset=20701, .match_offset=0 }, { .children_offset=20703, .match_offset=0 }, { .children_offset=20705, .match_offset=0 }, { .children_offset=20707, .match_offset=0 }, { .children_offset=0, .match_offset=35491 }, { .children_offset=20710, .match_offset=0 }, { .children_offset=20712, .match_offset=108624 }, { .children_offset=0, .match_offset=48220 }, { .children_offset=20716, .match_offset=0 }, { .children_offset=20725, .match_offset=0 }, { .children_offset=20727, .match_offset=0 }, { .children_offset=20731, .match_offset=0 }, { .children_offset=20748, .match_offset=0 }, { .children_offset=0, .match_offset=10914 }, { .children_offset=0, .match_offset=34720 }, { .children_offset=0, .match_offset=64436 }, { .children_offset=0, .match_offset=114605 }, { .children_offset=0, .match_offset=27732 }, { .children_offset=0, .match_offset=13186 }, { .children_offset=0, .match_offset=111151 }, { .children_offset=0, .match_offset=64743 }, { .children_offset=0, .match_offset=33447 }, { .children_offset=0, .match_offset=45825 }, { .children_offset=0, .match_offset=59096 }, { .children_offset=0, .match_offset=37692 }, { .children_offset=0, .match_offset=72484 }, { .children_offset=0, .match_offset=40458 }, { .children_offset=0, .match_offset=54455 }, { .children_offset=0, .match_offset=49753 }, { .children_offset=20765, .match_offset=0 }, { .children_offset=0, .match_offset=69164 }, { .children_offset=0, .match_offset=13842 }, { .children_offset=0, .match_offset=46061 }, { .children_offset=0, .match_offset=63436 }, { .children_offset=0, .match_offset=62026 }, { .children_offset=0, .match_offset=39437 }, { .children_offset=0, .match_offset=26272 }, { .children_offset=0, .match_offset=5301 }, { .children_offset=0, .match_offset=55958 }, { .children_offset=0, .match_offset=109708 }, { .children_offset=0, .match_offset=45823 }, { .children_offset=0, .match_offset=44441 }, { .children_offset=0, .match_offset=6636 }, { .children_offset=0, .match_offset=113725 }, { .children_offset=0, .match_offset=16942 }, { .children_offset=0, .match_offset=81087 }, { .children_offset=20782, .match_offset=0 }, { .children_offset=0, .match_offset=126599 }, { .children_offset=0, .match_offset=103686 }, { .children_offset=0, .match_offset=104497 }, { .children_offset=0, .match_offset=33209 }, { .children_offset=0, .match_offset=30483 }, { .children_offset=0, .match_offset=63024 }, { .children_offset=0, .match_offset=28120 }, { .children_offset=0, .match_offset=123852 }, { .children_offset=0, .match_offset=43732 }, { .children_offset=0, .match_offset=12734 }, { .children_offset=0, .match_offset=12460 }, { .children_offset=0, .match_offset=6634 }, { .children_offset=0, .match_offset=13053 }, { .children_offset=0, .match_offset=1053 }, { .children_offset=0, .match_offset=73884 }, { .children_offset=0, .match_offset=57269 }, { .children_offset=20799, .match_offset=0 }, { .children_offset=0, .match_offset=123563 }, { .children_offset=0, .match_offset=58694 }, { .children_offset=0, .match_offset=50707 }, { .children_offset=0, .match_offset=63170 }, { .children_offset=0, .match_offset=43250 }, { .children_offset=0, .match_offset=127613 }, { .children_offset=0, .match_offset=89617 }, { .children_offset=0, .match_offset=70653 }, { .children_offset=0, .match_offset=1146 }, { .children_offset=0, .match_offset=11442 }, { .children_offset=0, .match_offset=51120 }, { .children_offset=0, .match_offset=45002 }, { .children_offset=0, .match_offset=58359 }, { .children_offset=0, .match_offset=62297 }, { .children_offset=0, .match_offset=40338 }, { .children_offset=0, .match_offset=12037 }, { .children_offset=20816, .match_offset=0 }, { .children_offset=0, .match_offset=6185 }, { .children_offset=0, .match_offset=7715 }, { .children_offset=0, .match_offset=90526 }, { .children_offset=0, .match_offset=33912 }, { .children_offset=0, .match_offset=113727 }, { .children_offset=0, .match_offset=22318 }, { .children_offset=0, .match_offset=123099 }, { .children_offset=0, .match_offset=123846 }, { .children_offset=0, .match_offset=25399 }, { .children_offset=0, .match_offset=89107 }, { .children_offset=0, .match_offset=28490 }, { .children_offset=0, .match_offset=20618 }, { .children_offset=0, .match_offset=45986 }, { .children_offset=0, .match_offset=14356 }, { .children_offset=0, .match_offset=131631 }, { .children_offset=0, .match_offset=65587 }, { .children_offset=20833, .match_offset=0 }, { .children_offset=0, .match_offset=59270 }, { .children_offset=0, .match_offset=132178 }, { .children_offset=0, .match_offset=41768 }, { .children_offset=0, .match_offset=38890 }, { .children_offset=0, .match_offset=113638 }, { .children_offset=0, .match_offset=77665 }, { .children_offset=0, .match_offset=5295 }, { .children_offset=0, .match_offset=35862 }, { .children_offset=0, .match_offset=103445 }, { .children_offset=0, .match_offset=114652 }, { .children_offset=0, .match_offset=121926 }, { .children_offset=0, .match_offset=60451 }, { .children_offset=0, .match_offset=125326 }, { .children_offset=0, .match_offset=89971 }, { .children_offset=0, .match_offset=26462 }, { .children_offset=0, .match_offset=123848 }, { .children_offset=20850, .match_offset=0 }, { .children_offset=0, .match_offset=115418 }, { .children_offset=0, .match_offset=53998 }, { .children_offset=0, .match_offset=61160 }, { .children_offset=0, .match_offset=121986 }, { .children_offset=0, .match_offset=109568 }, { .children_offset=0, .match_offset=108744 }, { .children_offset=0, .match_offset=133658 }, { .children_offset=0, .match_offset=115594 }, { .children_offset=0, .match_offset=124650 }, { .children_offset=0, .match_offset=6254 }, { .children_offset=0, .match_offset=126620 }, { .children_offset=0, .match_offset=68438 }, { .children_offset=0, .match_offset=63696 }, { .children_offset=0, .match_offset=59485 }, { .children_offset=0, .match_offset=63454 }, { .children_offset=0, .match_offset=6978 }, { .children_offset=20867, .match_offset=0 }, { .children_offset=0, .match_offset=132889 }, { .children_offset=0, .match_offset=54433 }, { .children_offset=0, .match_offset=88665 }, { .children_offset=0, .match_offset=5073 }, { .children_offset=0, .match_offset=131501 }, { .children_offset=0, .match_offset=131864 }, { .children_offset=0, .match_offset=25799 }, { .children_offset=0, .match_offset=88722 }, { .children_offset=0, .match_offset=33479 }, { .children_offset=0, .match_offset=8548 }, { .children_offset=0, .match_offset=66452 }, { .children_offset=0, .match_offset=42250 }, { .children_offset=0, .match_offset=70964 }, { .children_offset=0, .match_offset=30658 }, { .children_offset=0, .match_offset=85265 }, { .children_offset=0, .match_offset=129303 }, { .children_offset=20884, .match_offset=0 }, { .children_offset=0, .match_offset=56977 }, { .children_offset=0, .match_offset=42057 }, { .children_offset=0, .match_offset=89101 }, { .children_offset=0, .match_offset=54030 }, { .children_offset=0, .match_offset=26473 }, { .children_offset=0, .match_offset=80633 }, { .children_offset=0, .match_offset=109342 }, { .children_offset=0, .match_offset=58897 }, { .children_offset=0, .match_offset=74566 }, { .children_offset=0, .match_offset=42452 }, { .children_offset=0, .match_offset=133287 }, { .children_offset=0, .match_offset=1252 }, { .children_offset=0, .match_offset=113393 }, { .children_offset=0, .match_offset=112735 }, { .children_offset=0, .match_offset=130057 }, { .children_offset=0, .match_offset=32839 }, { .children_offset=20901, .match_offset=0 }, { .children_offset=0, .match_offset=29098 }, { .children_offset=0, .match_offset=45934 }, { .children_offset=0, .match_offset=77088 }, { .children_offset=0, .match_offset=72413 }, { .children_offset=0, .match_offset=48149 }, { .children_offset=0, .match_offset=125607 }, { .children_offset=0, .match_offset=114269 }, { .children_offset=0, .match_offset=114223 }, { .children_offset=0, .match_offset=132799 }, { .children_offset=0, .match_offset=89167 }, { .children_offset=0, .match_offset=44754 }, { .children_offset=0, .match_offset=65461 }, { .children_offset=0, .match_offset=64571 }, { .children_offset=0, .match_offset=26490 }, { .children_offset=0, .match_offset=103302 }, { .children_offset=0, .match_offset=134570 }, { .children_offset=20918, .match_offset=0 }, { .children_offset=0, .match_offset=10 }, { .children_offset=0, .match_offset=10760 }, { .children_offset=0, .match_offset=123735 }, { .children_offset=0, .match_offset=42652 }, { .children_offset=0, .match_offset=67317 }, { .children_offset=0, .match_offset=123247 }, { .children_offset=0, .match_offset=56985 }, { .children_offset=0, .match_offset=132781 }, { .children_offset=0, .match_offset=116288 }, { .children_offset=0, .match_offset=45980 }, { .children_offset=0, .match_offset=90538 }, { .children_offset=0, .match_offset=103785 }, { .children_offset=0, .match_offset=28039 }, { .children_offset=0, .match_offset=123569 }, { .children_offset=0, .match_offset=104558 }, { .children_offset=0, .match_offset=64747 }, { .children_offset=20935, .match_offset=0 }, { .children_offset=0, .match_offset=81845 }, { .children_offset=0, .match_offset=113710 }, { .children_offset=0, .match_offset=81126 }, { .children_offset=0, .match_offset=71954 }, { .children_offset=0, .match_offset=15037 }, { .children_offset=0, .match_offset=58227 }, { .children_offset=0, .match_offset=134216 }, { .children_offset=0, .match_offset=114962 }, { .children_offset=0, .match_offset=131643 }, { .children_offset=0, .match_offset=42078 }, { .children_offset=0, .match_offset=20580 }, { .children_offset=0, .match_offset=58023 }, { .children_offset=0, .match_offset=5652 }, { .children_offset=0, .match_offset=70785 }, { .children_offset=0, .match_offset=35878 }, { .children_offset=0, .match_offset=104167 }, { .children_offset=20952, .match_offset=0 }, { .children_offset=0, .match_offset=40725 }, { .children_offset=0, .match_offset=115705 }, { .children_offset=0, .match_offset=104505 }, { .children_offset=0, .match_offset=38436 }, { .children_offset=0, .match_offset=26215 }, { .children_offset=0, .match_offset=121934 }, { .children_offset=0, .match_offset=5342 }, { .children_offset=0, .match_offset=109576 }, { .children_offset=0, .match_offset=15076 }, { .children_offset=0, .match_offset=59106 }, { .children_offset=0, .match_offset=133603 }, { .children_offset=0, .match_offset=22848 }, { .children_offset=0, .match_offset=11920 }, { .children_offset=0, .match_offset=104515 }, { .children_offset=0, .match_offset=109419 }, { .children_offset=0, .match_offset=77764 }, { .children_offset=20969, .match_offset=0 }, { .children_offset=0, .match_offset=67750 }, { .children_offset=0, .match_offset=102744 }, { .children_offset=0, .match_offset=108081 }, { .children_offset=0, .match_offset=5261 }, { .children_offset=0, .match_offset=132467 }, { .children_offset=0, .match_offset=67360 }, { .children_offset=0, .match_offset=53973 }, { .children_offset=0, .match_offset=28101 }, { .children_offset=0, .match_offset=68627 }, { .children_offset=0, .match_offset=133506 }, { .children_offset=0, .match_offset=73846 }, { .children_offset=0, .match_offset=103404 }, { .children_offset=0, .match_offset=8949 }, { .children_offset=0, .match_offset=27955 }, { .children_offset=0, .match_offset=14891 }, { .children_offset=0, .match_offset=102655 }, { .children_offset=20986, .match_offset=0 }, { .children_offset=0, .match_offset=103451 }, { .children_offset=0, .match_offset=65748 }, { .children_offset=0, .match_offset=86771 }, { .children_offset=0, .match_offset=89841 }, { .children_offset=0, .match_offset=40186 }, { .children_offset=0, .match_offset=131196 }, { .children_offset=0, .match_offset=108139 }, { .children_offset=0, .match_offset=13792 }, { .children_offset=0, .match_offset=21370 }, { .children_offset=0, .match_offset=74164 }, { .children_offset=0, .match_offset=127785 }, { .children_offset=0, .match_offset=9925 }, { .children_offset=0, .match_offset=61523 }, { .children_offset=0, .match_offset=125330 }, { .children_offset=0, .match_offset=44764 }, { .children_offset=0, .match_offset=73840 }, { .children_offset=21003, .match_offset=0 }, { .children_offset=0, .match_offset=63172 }, { .children_offset=0, .match_offset=35165 }, { .children_offset=0, .match_offset=9033 }, { .children_offset=0, .match_offset=70655 }, { .children_offset=0, .match_offset=6771 }, { .children_offset=0, .match_offset=56647 }, { .children_offset=0, .match_offset=49809 }, { .children_offset=0, .match_offset=7719 }, { .children_offset=0, .match_offset=55673 }, { .children_offset=0, .match_offset=70820 }, { .children_offset=0, .match_offset=102918 }, { .children_offset=0, .match_offset=52748 }, { .children_offset=0, .match_offset=78545 }, { .children_offset=0, .match_offset=45004 }, { .children_offset=0, .match_offset=73870 }, { .children_offset=0, .match_offset=11957 }, { .children_offset=21020, .match_offset=0 }, { .children_offset=21037, .match_offset=0 }, { .children_offset=0, .match_offset=104507 }, { .children_offset=0, .match_offset=89632 }, { .children_offset=0, .match_offset=61085 }, { .children_offset=0, .match_offset=67871 }, { .children_offset=0, .match_offset=109375 }, { .children_offset=0, .match_offset=61662 }, { .children_offset=0, .match_offset=87162 }, { .children_offset=0, .match_offset=64199 }, { .children_offset=0, .match_offset=64505 }, { .children_offset=0, .match_offset=81895 }, { .children_offset=0, .match_offset=43804 }, { .children_offset=0, .match_offset=35375 }, { .children_offset=0, .match_offset=50699 }, { .children_offset=0, .match_offset=74157 }, { .children_offset=0, .match_offset=1509 }, { .children_offset=0, .match_offset=15479 }, { .children_offset=21054, .match_offset=0 }, { .children_offset=0, .match_offset=33512 }, { .children_offset=0, .match_offset=64552 }, { .children_offset=0, .match_offset=60707 }, { .children_offset=0, .match_offset=5749 }, { .children_offset=0, .match_offset=133688 }, { .children_offset=0, .match_offset=133690 }, { .children_offset=0, .match_offset=58827 }, { .children_offset=0, .match_offset=131064 }, { .children_offset=0, .match_offset=110274 }, { .children_offset=0, .match_offset=34935 }, { .children_offset=0, .match_offset=16207 }, { .children_offset=0, .match_offset=56961 }, { .children_offset=0, .match_offset=68781 }, { .children_offset=0, .match_offset=13121 }, { .children_offset=0, .match_offset=123603 }, { .children_offset=0, .match_offset=108168 }, { .children_offset=21071, .match_offset=0 }, { .children_offset=0, .match_offset=72631 }, { .children_offset=0, .match_offset=52626 }, { .children_offset=0, .match_offset=123184 }, { .children_offset=0, .match_offset=46687 }, { .children_offset=0, .match_offset=102293 }, { .children_offset=0, .match_offset=46723 }, { .children_offset=0, .match_offset=90563 }, { .children_offset=0, .match_offset=37530 }, { .children_offset=0, .match_offset=37953 }, { .children_offset=0, .match_offset=114727 }, { .children_offset=0, .match_offset=30500 }, { .children_offset=0, .match_offset=125132 }, { .children_offset=0, .match_offset=64216 }, { .children_offset=0, .match_offset=25422 }, { .children_offset=0, .match_offset=53561 }, { .children_offset=0, .match_offset=67396 }, { .children_offset=21088, .match_offset=0 }, { .children_offset=0, .match_offset=7577 }, { .children_offset=0, .match_offset=25978 }, { .children_offset=0, .match_offset=24358 }, { .children_offset=0, .match_offset=27476 }, { .children_offset=0, .match_offset=55679 }, { .children_offset=0, .match_offset=62569 }, { .children_offset=0, .match_offset=65541 }, { .children_offset=0, .match_offset=25527 }, { .children_offset=0, .match_offset=102879 }, { .children_offset=0, .match_offset=24365 }, { .children_offset=0, .match_offset=33502 }, { .children_offset=0, .match_offset=56957 }, { .children_offset=0, .match_offset=65167 }, { .children_offset=0, .match_offset=103441 }, { .children_offset=0, .match_offset=113854 }, { .children_offset=0, .match_offset=123854 }, { .children_offset=21105, .match_offset=0 }, { .children_offset=0, .match_offset=133641 }, { .children_offset=0, .match_offset=41890 }, { .children_offset=0, .match_offset=34025 }, { .children_offset=0, .match_offset=69105 }, { .children_offset=0, .match_offset=124652 }, { .children_offset=0, .match_offset=26915 }, { .children_offset=0, .match_offset=116933 }, { .children_offset=0, .match_offset=123706 }, { .children_offset=0, .match_offset=113845 }, { .children_offset=0, .match_offset=100981 }, { .children_offset=0, .match_offset=127337 }, { .children_offset=0, .match_offset=7512 }, { .children_offset=0, .match_offset=5476 }, { .children_offset=0, .match_offset=20530 }, { .children_offset=0, .match_offset=135888 }, { .children_offset=0, .match_offset=5355 }, { .children_offset=21122, .match_offset=0 }, { .children_offset=0, .match_offset=119859 }, { .children_offset=0, .match_offset=10605 }, { .children_offset=0, .match_offset=44791 }, { .children_offset=0, .match_offset=30734 }, { .children_offset=0, .match_offset=113634 }, { .children_offset=0, .match_offset=23946 }, { .children_offset=0, .match_offset=109737 }, { .children_offset=0, .match_offset=21882 }, { .children_offset=0, .match_offset=15987 }, { .children_offset=0, .match_offset=136208 }, { .children_offset=0, .match_offset=125678 }, { .children_offset=0, .match_offset=44929 }, { .children_offset=0, .match_offset=114021 }, { .children_offset=0, .match_offset=58873 }, { .children_offset=0, .match_offset=30738 }, { .children_offset=0, .match_offset=135852 }, { .children_offset=21139, .match_offset=0 }, { .children_offset=0, .match_offset=77760 }, { .children_offset=0, .match_offset=115752 }, { .children_offset=0, .match_offset=31049 }, { .children_offset=0, .match_offset=89853 }, { .children_offset=0, .match_offset=74459 }, { .children_offset=0, .match_offset=22021 }, { .children_offset=0, .match_offset=67810 }, { .children_offset=0, .match_offset=65300 }, { .children_offset=0, .match_offset=4895 }, { .children_offset=0, .match_offset=8860 }, { .children_offset=0, .match_offset=11458 }, { .children_offset=0, .match_offset=82009 }, { .children_offset=0, .match_offset=89999 }, { .children_offset=0, .match_offset=68273 }, { .children_offset=0, .match_offset=119270 }, { .children_offset=0, .match_offset=103783 }, { .children_offset=21156, .match_offset=0 }, { .children_offset=0, .match_offset=103701 }, { .children_offset=0, .match_offset=85359 }, { .children_offset=0, .match_offset=131386 }, { .children_offset=0, .match_offset=124687 }, { .children_offset=0, .match_offset=80292 }, { .children_offset=0, .match_offset=65832 }, { .children_offset=0, .match_offset=122340 }, { .children_offset=0, .match_offset=40845 }, { .children_offset=0, .match_offset=55011 }, { .children_offset=0, .match_offset=12268 }, { .children_offset=0, .match_offset=6200 }, { .children_offset=0, .match_offset=103166 }, { .children_offset=0, .match_offset=5952 }, { .children_offset=0, .match_offset=16376 }, { .children_offset=0, .match_offset=63162 }, { .children_offset=0, .match_offset=133471 }, { .children_offset=21173, .match_offset=0 }, { .children_offset=0, .match_offset=115807 }, { .children_offset=0, .match_offset=22142 }, { .children_offset=0, .match_offset=43026 }, { .children_offset=0, .match_offset=88663 }, { .children_offset=0, .match_offset=6591 }, { .children_offset=0, .match_offset=85778 }, { .children_offset=0, .match_offset=125134 }, { .children_offset=0, .match_offset=21910 }, { .children_offset=0, .match_offset=55954 }, { .children_offset=0, .match_offset=33762 }, { .children_offset=0, .match_offset=114508 }, { .children_offset=0, .match_offset=12738 }, { .children_offset=0, .match_offset=62704 }, { .children_offset=0, .match_offset=60804 }, { .children_offset=0, .match_offset=2134 }, { .children_offset=0, .match_offset=129598 }, { .children_offset=21190, .match_offset=0 }, { .children_offset=0, .match_offset=29195 }, { .children_offset=0, .match_offset=65469 }, { .children_offset=0, .match_offset=63410 }, { .children_offset=0, .match_offset=113893 }, { .children_offset=0, .match_offset=130915 }, { .children_offset=0, .match_offset=65549 }, { .children_offset=0, .match_offset=1118 }, { .children_offset=0, .match_offset=8977 }, { .children_offset=0, .match_offset=102277 }, { .children_offset=0, .match_offset=34174 }, { .children_offset=0, .match_offset=104482 }, { .children_offset=0, .match_offset=80476 }, { .children_offset=0, .match_offset=116081 }, { .children_offset=0, .match_offset=37698 }, { .children_offset=0, .match_offset=132896 }, { .children_offset=0, .match_offset=32865 }, { .children_offset=21207, .match_offset=0 }, { .children_offset=0, .match_offset=6961 }, { .children_offset=0, .match_offset=109838 }, { .children_offset=0, .match_offset=15483 }, { .children_offset=0, .match_offset=16344 }, { .children_offset=0, .match_offset=15068 }, { .children_offset=0, .match_offset=129586 }, { .children_offset=0, .match_offset=70923 }, { .children_offset=0, .match_offset=124573 }, { .children_offset=0, .match_offset=10758 }, { .children_offset=0, .match_offset=63811 }, { .children_offset=0, .match_offset=20314 }, { .children_offset=0, .match_offset=37984 }, { .children_offset=0, .match_offset=102920 }, { .children_offset=0, .match_offset=21872 }, { .children_offset=0, .match_offset=10276 }, { .children_offset=0, .match_offset=131552 }, { .children_offset=21224, .match_offset=0 }, { .children_offset=0, .match_offset=32841 }, { .children_offset=0, .match_offset=73773 }, { .children_offset=0, .match_offset=116228 }, { .children_offset=0, .match_offset=100904 }, { .children_offset=0, .match_offset=16080 }, { .children_offset=0, .match_offset=40826 }, { .children_offset=0, .match_offset=88619 }, { .children_offset=0, .match_offset=37543 }, { .children_offset=0, .match_offset=63432 }, { .children_offset=0, .match_offset=44960 }, { .children_offset=0, .match_offset=57253 }, { .children_offset=0, .match_offset=82025 }, { .children_offset=0, .match_offset=65714 }, { .children_offset=0, .match_offset=134512 }, { .children_offset=0, .match_offset=13905 }, { .children_offset=0, .match_offset=8552 }, { .children_offset=21241, .match_offset=0 }, { .children_offset=0, .match_offset=134487 }, { .children_offset=0, .match_offset=22602 }, { .children_offset=0, .match_offset=90528 }, { .children_offset=0, .match_offset=134249 }, { .children_offset=0, .match_offset=129305 }, { .children_offset=0, .match_offset=116023 }, { .children_offset=0, .match_offset=122541 }, { .children_offset=0, .match_offset=134389 }, { .children_offset=0, .match_offset=43238 }, { .children_offset=0, .match_offset=14358 }, { .children_offset=0, .match_offset=30990 }, { .children_offset=0, .match_offset=5215 }, { .children_offset=0, .match_offset=133096 }, { .children_offset=0, .match_offset=35327 }, { .children_offset=0, .match_offset=42667 }, { .children_offset=0, .match_offset=74711 }, { .children_offset=21258, .match_offset=0 }, { .children_offset=0, .match_offset=131207 }, { .children_offset=0, .match_offset=60508 }, { .children_offset=0, .match_offset=42080 }, { .children_offset=0, .match_offset=8911 }, { .children_offset=0, .match_offset=58729 }, { .children_offset=0, .match_offset=90596 }, { .children_offset=0, .match_offset=9035 }, { .children_offset=0, .match_offset=134873 }, { .children_offset=0, .match_offset=61658 }, { .children_offset=0, .match_offset=25456 }, { .children_offset=0, .match_offset=114467 }, { .children_offset=0, .match_offset=130993 }, { .children_offset=0, .match_offset=11348 }, { .children_offset=0, .match_offset=32965 }, { .children_offset=0, .match_offset=126399 }, { .children_offset=0, .match_offset=123731 }, { .children_offset=21275, .match_offset=0 }, { .children_offset=0, .match_offset=135070 }, { .children_offset=0, .match_offset=1956 }, { .children_offset=0, .match_offset=12544 }, { .children_offset=0, .match_offset=34553 }, { .children_offset=0, .match_offset=46206 }, { .children_offset=0, .match_offset=43922 }, { .children_offset=0, .match_offset=34923 }, { .children_offset=0, .match_offset=60811 }, { .children_offset=0, .match_offset=26434 }, { .children_offset=0, .match_offset=55791 }, { .children_offset=0, .match_offset=34646 }, { .children_offset=0, .match_offset=80486 }, { .children_offset=0, .match_offset=37986 }, { .children_offset=0, .match_offset=111196 }, { .children_offset=0, .match_offset=87464 }, { .children_offset=0, .match_offset=129411 }, { .children_offset=21292, .match_offset=0 }, { .children_offset=0, .match_offset=136538 }, { .children_offset=0, .match_offset=35170 }, { .children_offset=0, .match_offset=9907 }, { .children_offset=0, .match_offset=41888 }, { .children_offset=0, .match_offset=66531 }, { .children_offset=0, .match_offset=122549 }, { .children_offset=0, .match_offset=103134 }, { .children_offset=0, .match_offset=12482 }, { .children_offset=0, .match_offset=110276 }, { .children_offset=0, .match_offset=25824 }, { .children_offset=0, .match_offset=87359 }, { .children_offset=0, .match_offset=25960 }, { .children_offset=0, .match_offset=52214 }, { .children_offset=0, .match_offset=57486 }, { .children_offset=0, .match_offset=62616 }, { .children_offset=0, .match_offset=65474 }, { .children_offset=21309, .match_offset=0 }, { .children_offset=21312, .match_offset=0 }, { .children_offset=0, .match_offset=20524 }, { .children_offset=0, .match_offset=133231 }, { .children_offset=0, .match_offset=79712 }, { .children_offset=0, .match_offset=30066 }, { .children_offset=0, .match_offset=26049 }, { .children_offset=0, .match_offset=46648 }, { .children_offset=0, .match_offset=69062 }, { .children_offset=0, .match_offset=65096 }, { .children_offset=0, .match_offset=109244 }, { .children_offset=0, .match_offset=54255 }, { .children_offset=0, .match_offset=74482 }, { .children_offset=0, .match_offset=69008 }, { .children_offset=0, .match_offset=72152 }, { .children_offset=0, .match_offset=121948 }, { .children_offset=0, .match_offset=109421 }, { .children_offset=0, .match_offset=43285 }, { .children_offset=21329, .match_offset=0 }, { .children_offset=0, .match_offset=52610 }, { .children_offset=0, .match_offset=133341 }, { .children_offset=0, .match_offset=38434 }, { .children_offset=0, .match_offset=109507 }, { .children_offset=0, .match_offset=115691 }, { .children_offset=0, .match_offset=20183 }, { .children_offset=0, .match_offset=15698 }, { .children_offset=0, .match_offset=131419 }, { .children_offset=0, .match_offset=113624 }, { .children_offset=0, .match_offset=84852 }, { .children_offset=0, .match_offset=64481 }, { .children_offset=0, .match_offset=108815 }, { .children_offset=0, .match_offset=38685 }, { .children_offset=0, .match_offset=125735 }, { .children_offset=21344, .match_offset=0 }, { .children_offset=21346, .match_offset=0 }, { .children_offset=21351, .match_offset=0 }, { .children_offset=0, .match_offset=5235 }, { .children_offset=0, .match_offset=124586 }, { .children_offset=21354, .match_offset=0 }, { .children_offset=0, .match_offset=60009 }, { .children_offset=21356, .match_offset=0 }, { .children_offset=0, .match_offset=73872 }, { .children_offset=21358, .match_offset=0 }, { .children_offset=0, .match_offset=133248 }, { .children_offset=21360, .match_offset=0 }, { .children_offset=21371, .match_offset=0 }, { .children_offset=21373, .match_offset=0 }, { .children_offset=0, .match_offset=38838 }, { .children_offset=21375, .match_offset=0 }, { .children_offset=21380, .match_offset=0 }, { .children_offset=0, .match_offset=67867 }, { .children_offset=21382, .match_offset=0 }, { .children_offset=0, .match_offset=80594 }, { .children_offset=21384, .match_offset=0 }, { .children_offset=0, .match_offset=37397 }, { .children_offset=21386, .match_offset=0 }, { .children_offset=0, .match_offset=124827 }, { .children_offset=21388, .match_offset=0 }, { .children_offset=21391, .match_offset=0 }, { .children_offset=0, .match_offset=62870 }, { .children_offset=21393, .match_offset=0 }, { .children_offset=0, .match_offset=81986 }, { .children_offset=21395, .match_offset=0 }, { .children_offset=21398, .match_offset=0 }, { .children_offset=0, .match_offset=5913 }, { .children_offset=21400, .match_offset=0 }, { .children_offset=0, .match_offset=124597 }, { .children_offset=21402, .match_offset=0 }, { .children_offset=21404, .match_offset=0 }, { .children_offset=0, .match_offset=122512 }, { .children_offset=21406, .match_offset=0 }, { .children_offset=21408, .match_offset=0 }, { .children_offset=0, .match_offset=38577 }, { .children_offset=21410, .match_offset=0 }, { .children_offset=21413, .match_offset=0 }, { .children_offset=0, .match_offset=117566 }, { .children_offset=21415, .match_offset=0 }, { .children_offset=0, .match_offset=116452 }, { .children_offset=21417, .match_offset=0 }, { .children_offset=21420, .match_offset=0 }, { .children_offset=0, .match_offset=69340 }, { .children_offset=21422, .match_offset=0 }, { .children_offset=0, .match_offset=35105 }, { .children_offset=21424, .match_offset=0 }, { .children_offset=21426, .match_offset=0 }, { .children_offset=0, .match_offset=112686 }, { .children_offset=21428, .match_offset=0 }, { .children_offset=21430, .match_offset=0 }, { .children_offset=0, .match_offset=81068 }, { .children_offset=21432, .match_offset=0 }, { .children_offset=21440, .match_offset=0 }, { .children_offset=21444, .match_offset=0 }, { .children_offset=0, .match_offset=64428 }, { .children_offset=21446, .match_offset=0 }, { .children_offset=0, .match_offset=27082 }, { .children_offset=21448, .match_offset=0 }, { .children_offset=0, .match_offset=30397 }, { .children_offset=21450, .match_offset=0 }, { .children_offset=21453, .match_offset=0 }, { .children_offset=0, .match_offset=14233 }, { .children_offset=21455, .match_offset=0 }, { .children_offset=0, .match_offset=131232 }, { .children_offset=21457, .match_offset=0 }, { .children_offset=21461, .match_offset=0 }, { .children_offset=0, .match_offset=82019 }, { .children_offset=21463, .match_offset=0 }, { .children_offset=0, .match_offset=2273 }, { .children_offset=21465, .match_offset=0 }, { .children_offset=0, .match_offset=111487 }, { .children_offset=21467, .match_offset=0 }, { .children_offset=21469, .match_offset=0 }, { .children_offset=0, .match_offset=124668 }, { .children_offset=21471, .match_offset=0 }, { .children_offset=21474, .match_offset=0 }, { .children_offset=0, .match_offset=48229 }, { .children_offset=0, .match_offset=31000 }, { .children_offset=21477, .match_offset=0 }, { .children_offset=0, .match_offset=28708 }, { .children_offset=21479, .match_offset=0 }, { .children_offset=21481, .match_offset=0 }, { .children_offset=0, .match_offset=126524 }, { .children_offset=21483, .match_offset=0 }, { .children_offset=21485, .match_offset=0 }, { .children_offset=0, .match_offset=46792 }, { .children_offset=21487, .match_offset=0 }, { .children_offset=21495, .match_offset=0 }, { .children_offset=21497, .match_offset=0 }, { .children_offset=0, .match_offset=77410 }, { .children_offset=21499, .match_offset=0 }, { .children_offset=21501, .match_offset=0 }, { .children_offset=0, .match_offset=102707 }, { .children_offset=21503, .match_offset=0 }, { .children_offset=21506, .match_offset=0 }, { .children_offset=0, .match_offset=113336 }, { .children_offset=21508, .match_offset=0 }, { .children_offset=0, .match_offset=114355 }, { .children_offset=21510, .match_offset=0 }, { .children_offset=21512, .match_offset=0 }, { .children_offset=0, .match_offset=65066 }, { .children_offset=21514, .match_offset=0 }, { .children_offset=21516, .match_offset=0 }, { .children_offset=0, .match_offset=74553 }, { .children_offset=21518, .match_offset=0 }, { .children_offset=21520, .match_offset=0 }, { .children_offset=0, .match_offset=125714 }, { .children_offset=21522, .match_offset=0 }, { .children_offset=21524, .match_offset=0 }, { .children_offset=0, .match_offset=54272 }, { .children_offset=21526, .match_offset=0 }, { .children_offset=21530, .match_offset=0 }, { .children_offset=21532, .match_offset=0 }, { .children_offset=0, .match_offset=122597 }, { .children_offset=21534, .match_offset=0 }, { .children_offset=21536, .match_offset=0 }, { .children_offset=0, .match_offset=114603 }, { .children_offset=21538, .match_offset=0 }, { .children_offset=21540, .match_offset=0 }, { .children_offset=0, .match_offset=119262 }, { .children_offset=21542, .match_offset=0 }, { .children_offset=21545, .match_offset=0 }, { .children_offset=21547, .match_offset=0 }, { .children_offset=0, .match_offset=1515 }, { .children_offset=21549, .match_offset=0 }, { .children_offset=21551, .match_offset=0 }, { .children_offset=0, .match_offset=55402 }, { .children_offset=21553, .match_offset=0 }, { .children_offset=21556, .match_offset=0 }, { .children_offset=21573, .match_offset=0 }, { .children_offset=0, .match_offset=123746 }, { .children_offset=0, .match_offset=58494 }, { .children_offset=0, .match_offset=38826 }, { .children_offset=0, .match_offset=59073 }, { .children_offset=0, .match_offset=133615 }, { .children_offset=0, .match_offset=72880 }, { .children_offset=0, .match_offset=79751 }, { .children_offset=0, .match_offset=33692 }, { .children_offset=0, .match_offset=71811 }, { .children_offset=0, .match_offset=33052 }, { .children_offset=0, .match_offset=33694 }, { .children_offset=0, .match_offset=64534 }, { .children_offset=0, .match_offset=132225 }, { .children_offset=0, .match_offset=126616 }, { .children_offset=0, .match_offset=113975 }, { .children_offset=0, .match_offset=118374 }, { .children_offset=21590, .match_offset=0 }, { .children_offset=0, .match_offset=90651 }, { .children_offset=0, .match_offset=103795 }, { .children_offset=0, .match_offset=113891 }, { .children_offset=0, .match_offset=77790 }, { .children_offset=0, .match_offset=34654 }, { .children_offset=0, .match_offset=56938 }, { .children_offset=0, .match_offset=130966 }, { .children_offset=0, .match_offset=82023 }, { .children_offset=0, .match_offset=42312 }, { .children_offset=0, .match_offset=87462 }, { .children_offset=0, .match_offset=118406 }, { .children_offset=0, .match_offset=13068 }, { .children_offset=0, .match_offset=57267 }, { .children_offset=0, .match_offset=89069 }, { .children_offset=0, .match_offset=45065 }, { .children_offset=0, .match_offset=49332 }, { .children_offset=21607, .match_offset=0 }, { .children_offset=0, .match_offset=113973 }, { .children_offset=0, .match_offset=20639 }, { .children_offset=0, .match_offset=130946 }, { .children_offset=0, .match_offset=12598 }, { .children_offset=0, .match_offset=111383 }, { .children_offset=0, .match_offset=129625 }, { .children_offset=0, .match_offset=65503 }, { .children_offset=0, .match_offset=134235 }, { .children_offset=0, .match_offset=24332 }, { .children_offset=0, .match_offset=61715 }, { .children_offset=0, .match_offset=35395 }, { .children_offset=0, .match_offset=26482 }, { .children_offset=0, .match_offset=24308 }, { .children_offset=0, .match_offset=8937 }, { .children_offset=0, .match_offset=109467 }, { .children_offset=0, .match_offset=69166 }, { .children_offset=21624, .match_offset=0 }, { .children_offset=0, .match_offset=38118 }, { .children_offset=0, .match_offset=114616 }, { .children_offset=0, .match_offset=61561 }, { .children_offset=0, .match_offset=110330 }, { .children_offset=0, .match_offset=80474 }, { .children_offset=0, .match_offset=67664 }, { .children_offset=0, .match_offset=69052 }, { .children_offset=0, .match_offset=26395 }, { .children_offset=0, .match_offset=35456 }, { .children_offset=0, .match_offset=78558 }, { .children_offset=0, .match_offset=25537 }, { .children_offset=0, .match_offset=13373 }, { .children_offset=0, .match_offset=5583 }, { .children_offset=0, .match_offset=130295 }, { .children_offset=0, .match_offset=38297 }, { .children_offset=0, .match_offset=5598 }, { .children_offset=21641, .match_offset=0 }, { .children_offset=0, .match_offset=42395 }, { .children_offset=0, .match_offset=6689 }, { .children_offset=0, .match_offset=134455 }, { .children_offset=0, .match_offset=90039 }, { .children_offset=0, .match_offset=46663 }, { .children_offset=0, .match_offset=35866 }, { .children_offset=0, .match_offset=22472 }, { .children_offset=0, .match_offset=8831 }, { .children_offset=0, .match_offset=51169 }, { .children_offset=0, .match_offset=15035 }, { .children_offset=0, .match_offset=117521 }, { .children_offset=0, .match_offset=109500 }, { .children_offset=0, .match_offset=122665 }, { .children_offset=0, .match_offset=130325 }, { .children_offset=0, .match_offset=16382 }, { .children_offset=0, .match_offset=59564 }, { .children_offset=21658, .match_offset=0 }, { .children_offset=0, .match_offset=102639 }, { .children_offset=0, .match_offset=65723 }, { .children_offset=0, .match_offset=78213 }, { .children_offset=0, .match_offset=38917 }, { .children_offset=0, .match_offset=7748 }, { .children_offset=0, .match_offset=25997 }, { .children_offset=0, .match_offset=50623 }, { .children_offset=0, .match_offset=124571 }, { .children_offset=0, .match_offset=124581 }, { .children_offset=0, .match_offset=27830 }, { .children_offset=0, .match_offset=115744 }, { .children_offset=0, .match_offset=131148 }, { .children_offset=0, .match_offset=46689 }, { .children_offset=0, .match_offset=46665 }, { .children_offset=0, .match_offset=30874 }, { .children_offset=0, .match_offset=88766 }, { .children_offset=21675, .match_offset=0 }, { .children_offset=0, .match_offset=103663 }, { .children_offset=0, .match_offset=15450 }, { .children_offset=0, .match_offset=133094 }, { .children_offset=0, .match_offset=124736 }, { .children_offset=0, .match_offset=20189 }, { .children_offset=0, .match_offset=23913 }, { .children_offset=0, .match_offset=43820 }, { .children_offset=0, .match_offset=113887 }, { .children_offset=0, .match_offset=55283 }, { .children_offset=0, .match_offset=8550 }, { .children_offset=0, .match_offset=43916 }, { .children_offset=0, .match_offset=33009 }, { .children_offset=0, .match_offset=39074 }, { .children_offset=0, .match_offset=116008 }, { .children_offset=0, .match_offset=43240 }, { .children_offset=0, .match_offset=8576 }, { .children_offset=21692, .match_offset=0 }, { .children_offset=0, .match_offset=129318 }, { .children_offset=0, .match_offset=119377 }, { .children_offset=0, .match_offset=121910 }, { .children_offset=0, .match_offset=135819 }, { .children_offset=0, .match_offset=10485 }, { .children_offset=0, .match_offset=87312 }, { .children_offset=0, .match_offset=89239 }, { .children_offset=0, .match_offset=134586 }, { .children_offset=0, .match_offset=78678 }, { .children_offset=0, .match_offset=38519 }, { .children_offset=0, .match_offset=65054 }, { .children_offset=0, .match_offset=62745 }, { .children_offset=0, .match_offset=33787 }, { .children_offset=0, .match_offset=65399 }, { .children_offset=0, .match_offset=63794 }, { .children_offset=0, .match_offset=50223 }, { .children_offset=21709, .match_offset=0 }, { .children_offset=0, .match_offset=11922 }, { .children_offset=0, .match_offset=27824 }, { .children_offset=0, .match_offset=110926 }, { .children_offset=0, .match_offset=14492 }, { .children_offset=0, .match_offset=11091 }, { .children_offset=0, .match_offset=61241 }, { .children_offset=0, .match_offset=116298 }, { .children_offset=0, .match_offset=89172 }, { .children_offset=0, .match_offset=125837 }, { .children_offset=0, .match_offset=78882 }, { .children_offset=0, .match_offset=80490 }, { .children_offset=0, .match_offset=58276 }, { .children_offset=0, .match_offset=5562 }, { .children_offset=0, .match_offset=100955 }, { .children_offset=0, .match_offset=33981 }, { .children_offset=0, .match_offset=44946 }, { .children_offset=21726, .match_offset=0 }, { .children_offset=0, .match_offset=27635 }, { .children_offset=0, .match_offset=103406 }, { .children_offset=0, .match_offset=90027 }, { .children_offset=0, .match_offset=125479 }, { .children_offset=0, .match_offset=133670 }, { .children_offset=0, .match_offset=63815 }, { .children_offset=0, .match_offset=68445 }, { .children_offset=0, .match_offset=14539 }, { .children_offset=0, .match_offset=54245 }, { .children_offset=0, .match_offset=25768 }, { .children_offset=0, .match_offset=46048 }, { .children_offset=0, .match_offset=131396 }, { .children_offset=0, .match_offset=60559 }, { .children_offset=0, .match_offset=109271 }, { .children_offset=0, .match_offset=114586 }, { .children_offset=0, .match_offset=72323 }, { .children_offset=21743, .match_offset=0 }, { .children_offset=0, .match_offset=134931 }, { .children_offset=0, .match_offset=20296 }, { .children_offset=0, .match_offset=6589 }, { .children_offset=0, .match_offset=118431 }, { .children_offset=0, .match_offset=62390 }, { .children_offset=0, .match_offset=39038 }, { .children_offset=0, .match_offset=77341 }, { .children_offset=0, .match_offset=131629 }, { .children_offset=0, .match_offset=5307 }, { .children_offset=0, .match_offset=113050 }, { .children_offset=0, .match_offset=87301 }, { .children_offset=0, .match_offset=115979 }, { .children_offset=0, .match_offset=23962 }, { .children_offset=0, .match_offset=63009 }, { .children_offset=0, .match_offset=30976 }, { .children_offset=0, .match_offset=90681 }, { .children_offset=21760, .match_offset=0 }, { .children_offset=0, .match_offset=122605 }, { .children_offset=0, .match_offset=39068 }, { .children_offset=0, .match_offset=61531 }, { .children_offset=0, .match_offset=90532 }, { .children_offset=0, .match_offset=61717 }, { .children_offset=0, .match_offset=27801 }, { .children_offset=0, .match_offset=40887 }, { .children_offset=0, .match_offset=10861 }, { .children_offset=0, .match_offset=131078 }, { .children_offset=0, .match_offset=25828 }, { .children_offset=0, .match_offset=126407 }, { .children_offset=0, .match_offset=74042 }, { .children_offset=0, .match_offset=78594 }, { .children_offset=0, .match_offset=25722 }, { .children_offset=0, .match_offset=128033 }, { .children_offset=0, .match_offset=37174 }, { .children_offset=21777, .match_offset=0 }, { .children_offset=0, .match_offset=42383 }, { .children_offset=0, .match_offset=77012 }, { .children_offset=0, .match_offset=122053 }, { .children_offset=0, .match_offset=122564 }, { .children_offset=0, .match_offset=43 }, { .children_offset=0, .match_offset=12372 }, { .children_offset=0, .match_offset=10248 }, { .children_offset=0, .match_offset=37906 }, { .children_offset=0, .match_offset=80566 }, { .children_offset=0, .match_offset=44686 }, { .children_offset=0, .match_offset=134501 }, { .children_offset=0, .match_offset=58696 }, { .children_offset=0, .match_offset=125206 }, { .children_offset=0, .match_offset=2102 }, { .children_offset=0, .match_offset=118265 }, { .children_offset=0, .match_offset=131082 }, { .children_offset=21794, .match_offset=0 }, { .children_offset=0, .match_offset=134177 }, { .children_offset=0, .match_offset=44785 }, { .children_offset=0, .match_offset=16074 }, { .children_offset=0, .match_offset=43767 }, { .children_offset=0, .match_offset=89846 }, { .children_offset=0, .match_offset=26384 }, { .children_offset=0, .match_offset=61641 }, { .children_offset=0, .match_offset=61265 }, { .children_offset=0, .match_offset=26289 }, { .children_offset=0, .match_offset=115772 }, { .children_offset=0, .match_offset=51163 }, { .children_offset=0, .match_offset=73745 }, { .children_offset=0, .match_offset=78671 }, { .children_offset=0, .match_offset=90031 }, { .children_offset=0, .match_offset=34406 }, { .children_offset=0, .match_offset=88024 }, { .children_offset=21811, .match_offset=0 }, { .children_offset=0, .match_offset=133466 }, { .children_offset=0, .match_offset=28589 }, { .children_offset=0, .match_offset=5094 }, { .children_offset=0, .match_offset=50207 }, { .children_offset=0, .match_offset=54229 }, { .children_offset=0, .match_offset=42678 }, { .children_offset=0, .match_offset=78426 }, { .children_offset=0, .match_offset=116019 }, { .children_offset=0, .match_offset=68269 }, { .children_offset=0, .match_offset=124987 }, { .children_offset=0, .match_offset=81926 }, { .children_offset=0, .match_offset=126625 }, { .children_offset=0, .match_offset=33025 }, { .children_offset=0, .match_offset=136247 }, { .children_offset=0, .match_offset=29071 }, { .children_offset=0, .match_offset=124614 }, { .children_offset=21828, .match_offset=0 }, { .children_offset=0, .match_offset=78318 }, { .children_offset=0, .match_offset=72417 }, { .children_offset=0, .match_offset=117664 }, { .children_offset=0, .match_offset=30337 }, { .children_offset=0, .match_offset=65796 }, { .children_offset=0, .match_offset=130103 }, { .children_offset=0, .match_offset=80997 }, { .children_offset=0, .match_offset=59469 }, { .children_offset=0, .match_offset=28061 }, { .children_offset=0, .match_offset=133442 }, { .children_offset=0, .match_offset=126601 }, { .children_offset=0, .match_offset=85292 }, { .children_offset=0, .match_offset=1157 }, { .children_offset=0, .match_offset=70673 }, { .children_offset=0, .match_offset=88847 }, { .children_offset=0, .match_offset=12480 }, { .children_offset=21845, .match_offset=0 }, { .children_offset=21860, .match_offset=0 }, { .children_offset=0, .match_offset=133609 }, { .children_offset=0, .match_offset=11069 }, { .children_offset=0, .match_offset=111119 }, { .children_offset=0, .match_offset=90123 }, { .children_offset=0, .match_offset=25789 }, { .children_offset=0, .match_offset=88017 }, { .children_offset=0, .match_offset=50083 }, { .children_offset=0, .match_offset=136195 }, { .children_offset=0, .match_offset=32830 }, { .children_offset=0, .match_offset=125685 }, { .children_offset=0, .match_offset=52735 }, { .children_offset=0, .match_offset=26061 }, { .children_offset=0, .match_offset=22678 }, { .children_offset=0, .match_offset=46198 }, { .children_offset=0, .match_offset=13123 }, { .children_offset=0, .match_offset=103318 }, { .children_offset=21877, .match_offset=0 }, { .children_offset=0, .match_offset=114840 }, { .children_offset=0, .match_offset=64191 }, { .children_offset=0, .match_offset=122518 }, { .children_offset=0, .match_offset=43425 }, { .children_offset=0, .match_offset=34168 }, { .children_offset=0, .match_offset=13194 }, { .children_offset=0, .match_offset=131198 }, { .children_offset=0, .match_offset=34444 }, { .children_offset=0, .match_offset=62345 }, { .children_offset=0, .match_offset=34180 }, { .children_offset=0, .match_offset=57991 }, { .children_offset=0, .match_offset=131838 }, { .children_offset=0, .match_offset=45877 }, { .children_offset=0, .match_offset=437 }, { .children_offset=0, .match_offset=135892 }, { .children_offset=0, .match_offset=124809 }, { .children_offset=21894, .match_offset=0 }, { .children_offset=0, .match_offset=128031 }, { .children_offset=0, .match_offset=133630 }, { .children_offset=0, .match_offset=11999 }, { .children_offset=0, .match_offset=122651 }, { .children_offset=0, .match_offset=81040 }, { .children_offset=0, .match_offset=76975 }, { .children_offset=0, .match_offset=119571 }, { .children_offset=0, .match_offset=43903 }, { .children_offset=0, .match_offset=102360 }, { .children_offset=0, .match_offset=13144 }, { .children_offset=0, .match_offset=132598 }, { .children_offset=0, .match_offset=130871 }, { .children_offset=0, .match_offset=134875 }, { .children_offset=0, .match_offset=116351 }, { .children_offset=0, .match_offset=27865 }, { .children_offset=0, .match_offset=60924 }, { .children_offset=21911, .match_offset=0 }, { .children_offset=0, .match_offset=63125 }, { .children_offset=0, .match_offset=26484 }, { .children_offset=0, .match_offset=54018 }, { .children_offset=0, .match_offset=132314 }, { .children_offset=0, .match_offset=12681 }, { .children_offset=0, .match_offset=22159 }, { .children_offset=0, .match_offset=113112 }, { .children_offset=0, .match_offset=40462 }, { .children_offset=0, .match_offset=34517 }, { .children_offset=0, .match_offset=30627 }, { .children_offset=0, .match_offset=124724 }, { .children_offset=0, .match_offset=61247 }, { .children_offset=0, .match_offset=1142 }, { .children_offset=0, .match_offset=63085 }, { .children_offset=0, .match_offset=1247 }, { .children_offset=0, .match_offset=85447 }, { .children_offset=21928, .match_offset=0 }, { .children_offset=0, .match_offset=133456 }, { .children_offset=0, .match_offset=100941 }, { .children_offset=0, .match_offset=114139 }, { .children_offset=0, .match_offset=84848 }, { .children_offset=0, .match_offset=27037 }, { .children_offset=0, .match_offset=63212 }, { .children_offset=0, .match_offset=135068 }, { .children_offset=0, .match_offset=74219 }, { .children_offset=0, .match_offset=67653 }, { .children_offset=0, .match_offset=124593 }, { .children_offset=0, .match_offset=65191 }, { .children_offset=0, .match_offset=9077 }, { .children_offset=0, .match_offset=86091 }, { .children_offset=0, .match_offset=78033 }, { .children_offset=0, .match_offset=7742 }, { .children_offset=0, .match_offset=4889 }, { .children_offset=21945, .match_offset=0 }, { .children_offset=0, .match_offset=21970 }, { .children_offset=0, .match_offset=73488 }, { .children_offset=0, .match_offset=103346 }, { .children_offset=0, .match_offset=126530 }, { .children_offset=0, .match_offset=124603 }, { .children_offset=0, .match_offset=109471 }, { .children_offset=0, .match_offset=2318 }, { .children_offset=0, .match_offset=34539 }, { .children_offset=0, .match_offset=111433 }, { .children_offset=0, .match_offset=123262 }, { .children_offset=0, .match_offset=55978 }, { .children_offset=0, .match_offset=112712 }, { .children_offset=0, .match_offset=125731 }, { .children_offset=0, .match_offset=63620 }, { .children_offset=0, .match_offset=86043 }, { .children_offset=0, .match_offset=21171 }, { .children_offset=21962, .match_offset=0 }, { .children_offset=0, .match_offset=27675 }, { .children_offset=0, .match_offset=68611 }, { .children_offset=0, .match_offset=123507 }, { .children_offset=0, .match_offset=21912 }, { .children_offset=0, .match_offset=16360 }, { .children_offset=0, .match_offset=42036 }, { .children_offset=0, .match_offset=74243 }, { .children_offset=0, .match_offset=118421 }, { .children_offset=0, .match_offset=134257 }, { .children_offset=0, .match_offset=2277 }, { .children_offset=0, .match_offset=42654 }, { .children_offset=0, .match_offset=43776 }, { .children_offset=0, .match_offset=129465 }, { .children_offset=0, .match_offset=104316 }, { .children_offset=21977, .match_offset=0 }, { .children_offset=0, .match_offset=73826 }, { .children_offset=0, .match_offset=122492 }, { .children_offset=0, .match_offset=16419 }, { .children_offset=0, .match_offset=58882 }, { .children_offset=0, .match_offset=42404 }, { .children_offset=0, .match_offset=15074 }, { .children_offset=0, .match_offset=56916 }, { .children_offset=0, .match_offset=33363 }, { .children_offset=0, .match_offset=79007 }, { .children_offset=0, .match_offset=22538 }, { .children_offset=0, .match_offset=125495 }, { .children_offset=0, .match_offset=11720 }, { .children_offset=0, .match_offset=15494 }, { .children_offset=0, .match_offset=134251 }, { .children_offset=0, .match_offset=102959 }, { .children_offset=0, .match_offset=27535 }, { .children_offset=21994, .match_offset=0 }, { .children_offset=0, .match_offset=109465 }, { .children_offset=0, .match_offset=103593 }, { .children_offset=0, .match_offset=6982 }, { .children_offset=0, .match_offset=110888 }, { .children_offset=0, .match_offset=108561 }, { .children_offset=0, .match_offset=122378 }, { .children_offset=0, .match_offset=14281 }, { .children_offset=0, .match_offset=131633 }, { .children_offset=0, .match_offset=49908 }, { .children_offset=0, .match_offset=46056 }, { .children_offset=0, .match_offset=34341 }, { .children_offset=0, .match_offset=115760 }, { .children_offset=0, .match_offset=103395 }, { .children_offset=0, .match_offset=5654 }, { .children_offset=0, .match_offset=42638 }, { .children_offset=0, .match_offset=29988 }, { .children_offset=22011, .match_offset=0 }, { .children_offset=0, .match_offset=48433 }, { .children_offset=0, .match_offset=84824 }, { .children_offset=0, .match_offset=78424 }, { .children_offset=0, .match_offset=130303 }, { .children_offset=0, .match_offset=60428 }, { .children_offset=0, .match_offset=104513 }, { .children_offset=0, .match_offset=122514 }, { .children_offset=0, .match_offset=115680 }, { .children_offset=0, .match_offset=124757 }, { .children_offset=0, .match_offset=31133 }, { .children_offset=0, .match_offset=13413 }, { .children_offset=0, .match_offset=63091 }, { .children_offset=0, .match_offset=127615 }, { .children_offset=0, .match_offset=10974 }, { .children_offset=0, .match_offset=73271 }, { .children_offset=0, .match_offset=71949 }, { .children_offset=22028, .match_offset=0 }, { .children_offset=0, .match_offset=39450 }, { .children_offset=0, .match_offset=59462 }, { .children_offset=0, .match_offset=78472 }, { .children_offset=0, .match_offset=67695 }, { .children_offset=0, .match_offset=40889 }, { .children_offset=0, .match_offset=44665 }, { .children_offset=0, .match_offset=72522 }, { .children_offset=0, .match_offset=109113 }, { .children_offset=0, .match_offset=39070 }, { .children_offset=0, .match_offset=90329 }, { .children_offset=0, .match_offset=65768 }, { .children_offset=0, .match_offset=23763 }, { .children_offset=0, .match_offset=130312 }, { .children_offset=0, .match_offset=135901 }, { .children_offset=0, .match_offset=34286 }, { .children_offset=0, .match_offset=42986 }, { .children_offset=22045, .match_offset=0 }, { .children_offset=0, .match_offset=84768 }, { .children_offset=0, .match_offset=67743 }, { .children_offset=0, .match_offset=67411 }, { .children_offset=0, .match_offset=42890 }, { .children_offset=0, .match_offset=33357 }, { .children_offset=0, .match_offset=46847 }, { .children_offset=0, .match_offset=61780 }, { .children_offset=0, .match_offset=108753 }, { .children_offset=0, .match_offset=22042 }, { .children_offset=0, .match_offset=38151 }, { .children_offset=0, .match_offset=27183 }, { .children_offset=0, .match_offset=77792 }, { .children_offset=0, .match_offset=62682 }, { .children_offset=0, .match_offset=35458 }, { .children_offset=0, .match_offset=1911 }, { .children_offset=0, .match_offset=68485 }, { .children_offset=22062, .match_offset=0 }, { .children_offset=0, .match_offset=37650 }, { .children_offset=0, .match_offset=78217 }, { .children_offset=0, .match_offset=121920 }, { .children_offset=0, .match_offset=67352 }, { .children_offset=0, .match_offset=44745 }, { .children_offset=0, .match_offset=123138 }, { .children_offset=0, .match_offset=38139 }, { .children_offset=0, .match_offset=27187 }, { .children_offset=0, .match_offset=65044 }, { .children_offset=0, .match_offset=130314 }, { .children_offset=0, .match_offset=110571 }, { .children_offset=0, .match_offset=62589 }, { .children_offset=0, .match_offset=90183 }, { .children_offset=0, .match_offset=108127 }, { .children_offset=0, .match_offset=68413 }, { .children_offset=0, .match_offset=28226 }, { .children_offset=22079, .match_offset=0 }, { .children_offset=0, .match_offset=26488 }, { .children_offset=0, .match_offset=102750 }, { .children_offset=0, .match_offset=35468 }, { .children_offset=0, .match_offset=384 }, { .children_offset=0, .match_offset=16369 }, { .children_offset=0, .match_offset=68293 }, { .children_offset=0, .match_offset=73496 }, { .children_offset=0, .match_offset=38464 }, { .children_offset=0, .match_offset=109743 }, { .children_offset=0, .match_offset=59090 }, { .children_offset=22090, .match_offset=0 }, { .children_offset=0, .match_offset=24128 }, { .children_offset=22092, .match_offset=0 }, { .children_offset=0, .match_offset=87829 }, { .children_offset=22094, .match_offset=0 }, { .children_offset=0, .match_offset=114056 }, { .children_offset=22096, .match_offset=0 }, { .children_offset=0, .match_offset=25193 }, { .children_offset=22098, .match_offset=63698 }, { .children_offset=22104, .match_offset=0 }, { .children_offset=0, .match_offset=133018 }, { .children_offset=0, .match_offset=131054 }, { .children_offset=0, .match_offset=60665 }, { .children_offset=22106, .match_offset=0 }, { .children_offset=22108, .match_offset=0 }, { .children_offset=22110, .match_offset=14460 }, { .children_offset=22112, .match_offset=0 }, { .children_offset=22121, .match_offset=0 }, { .children_offset=22124, .match_offset=0 }, { .children_offset=22126, .match_offset=0 }, { .children_offset=22128, .match_offset=0 }, { .children_offset=22130, .match_offset=0 }, { .children_offset=22132, .match_offset=0 }, { .children_offset=0, .match_offset=29124 }, { .children_offset=22134, .match_offset=0 }, { .children_offset=22136, .match_offset=0 }, { .children_offset=22138, .match_offset=0 }, { .children_offset=0, .match_offset=64520 }, { .children_offset=22140, .match_offset=0 }, { .children_offset=22142, .match_offset=0 }, { .children_offset=22144, .match_offset=0 }, { .children_offset=22146, .match_offset=0 }, { .children_offset=0, .match_offset=2227 }, { .children_offset=22148, .match_offset=0 }, { .children_offset=22151, .match_offset=0 }, { .children_offset=22153, .match_offset=0 }, { .children_offset=22155, .match_offset=0 }, { .children_offset=22157, .match_offset=0 }, { .children_offset=22159, .match_offset=0 }, { .children_offset=0, .match_offset=55258 }, { .children_offset=22161, .match_offset=0 }, { .children_offset=22163, .match_offset=0 }, { .children_offset=22165, .match_offset=0 }, { .children_offset=22167, .match_offset=0 }, { .children_offset=0, .match_offset=125238 }, { .children_offset=22169, .match_offset=0 }, { .children_offset=22171, .match_offset=0 }, { .children_offset=22173, .match_offset=0 }, { .children_offset=22175, .match_offset=0 }, { .children_offset=0, .match_offset=70791 }, { .children_offset=22177, .match_offset=0 }, { .children_offset=22181, .match_offset=0 }, { .children_offset=22183, .match_offset=0 }, { .children_offset=22185, .match_offset=0 }, { .children_offset=22187, .match_offset=0 }, { .children_offset=22189, .match_offset=0 }, { .children_offset=0, .match_offset=35485 }, { .children_offset=22191, .match_offset=0 }, { .children_offset=22193, .match_offset=0 }, { .children_offset=22195, .match_offset=0 }, { .children_offset=22197, .match_offset=0 }, { .children_offset=22199, .match_offset=0 }, { .children_offset=0, .match_offset=69346 }, { .children_offset=22201, .match_offset=0 }, { .children_offset=22203, .match_offset=0 }, { .children_offset=22205, .match_offset=0 }, { .children_offset=0, .match_offset=46208 }, { .children_offset=22207, .match_offset=0 }, { .children_offset=22209, .match_offset=0 }, { .children_offset=22211, .match_offset=0 }, { .children_offset=22213, .match_offset=0 }, { .children_offset=0, .match_offset=103412 }, { .children_offset=22215, .match_offset=0 }, { .children_offset=22218, .match_offset=0 }, { .children_offset=22220, .match_offset=0 }, { .children_offset=0, .match_offset=45924 }, { .children_offset=22222, .match_offset=0 }, { .children_offset=22224, .match_offset=0 }, { .children_offset=22226, .match_offset=0 }, { .children_offset=22228, .match_offset=0 }, { .children_offset=22230, .match_offset=0 }, { .children_offset=22232, .match_offset=0 }, { .children_offset=22234, .match_offset=0 }, { .children_offset=22236, .match_offset=0 }, { .children_offset=22238, .match_offset=0 }, { .children_offset=0, .match_offset=42331 }, { .children_offset=22240, .match_offset=0 }, { .children_offset=22243, .match_offset=0 }, { .children_offset=22245, .match_offset=0 }, { .children_offset=22247, .match_offset=0 }, { .children_offset=22249, .match_offset=0 }, { .children_offset=22251, .match_offset=0 }, { .children_offset=0, .match_offset=33793 }, { .children_offset=22253, .match_offset=0 }, { .children_offset=22255, .match_offset=0 }, { .children_offset=22257, .match_offset=0 }, { .children_offset=22259, .match_offset=0 }, { .children_offset=0, .match_offset=50619 }, { .children_offset=22261, .match_offset=61087 }, { .children_offset=22263, .match_offset=0 }, { .children_offset=0, .match_offset=87353 }, { .children_offset=22265, .match_offset=57478 }, { .children_offset=0, .match_offset=54447 }, { .children_offset=22269, .match_offset=0 }, { .children_offset=0, .match_offset=131088 }, { .children_offset=0, .match_offset=28591 }, { .children_offset=22271, .match_offset=123693 }, { .children_offset=22275, .match_offset=0 }, { .children_offset=22277, .match_offset=0 }, { .children_offset=0, .match_offset=49757 }, { .children_offset=0, .match_offset=1084 }, { .children_offset=22279, .match_offset=0 }, { .children_offset=22281, .match_offset=0 }, { .children_offset=22283, .match_offset=0 }, { .children_offset=0, .match_offset=59459 }, { .children_offset=0, .match_offset=7689 }, { .children_offset=22285, .match_offset=26674 }, { .children_offset=22290, .match_offset=0 }, { .children_offset=22293, .match_offset=0 }, { .children_offset=22295, .match_offset=0 }, { .children_offset=0, .match_offset=60462 }, { .children_offset=22297, .match_offset=0 }, { .children_offset=0, .match_offset=65306 }, { .children_offset=22299, .match_offset=0 }, { .children_offset=22301, .match_offset=0 }, { .children_offset=22303, .match_offset=0 }, { .children_offset=0, .match_offset=45059 }, { .children_offset=22305, .match_offset=0 }, { .children_offset=22307, .match_offset=0 }, { .children_offset=0, .match_offset=110886 }, { .children_offset=22309, .match_offset=0 }, { .children_offset=22311, .match_offset=0 }, { .children_offset=22313, .match_offset=0 }, { .children_offset=22315, .match_offset=0 }, { .children_offset=0, .match_offset=131217 }, { .children_offset=22317, .match_offset=114932 }, { .children_offset=22319, .match_offset=0 }, { .children_offset=22321, .match_offset=0 }, { .children_offset=0, .match_offset=114932 }, { .children_offset=22323, .match_offset=0 }, { .children_offset=22325, .match_offset=0 }, { .children_offset=22327, .match_offset=0 }, { .children_offset=0, .match_offset=112690 }, { .children_offset=22329, .match_offset=135074 }, { .children_offset=0, .match_offset=78580 }, { .children_offset=22333, .match_offset=0 }, { .children_offset=22335, .match_offset=0 }, { .children_offset=22337, .match_offset=0 }, { .children_offset=22339, .match_offset=114032 }, { .children_offset=0, .match_offset=103179 }, { .children_offset=0, .match_offset=134914 }, { .children_offset=22342, .match_offset=0 }, { .children_offset=0, .match_offset=59027 }, { .children_offset=22346, .match_offset=0 }, { .children_offset=22348, .match_offset=0 }, { .children_offset=22350, .match_offset=0 }, { .children_offset=22352, .match_offset=0 }, { .children_offset=22354, .match_offset=0 }, { .children_offset=0, .match_offset=64763 }, { .children_offset=22356, .match_offset=6414 }, { .children_offset=22358, .match_offset=0 }, { .children_offset=22360, .match_offset=0 }, { .children_offset=22362, .match_offset=0 }, { .children_offset=0, .match_offset=70865 }, { .children_offset=22364, .match_offset=20594 }, { .children_offset=22370, .match_offset=0 }, { .children_offset=22374, .match_offset=0 }, { .children_offset=0, .match_offset=53506 }, { .children_offset=22376, .match_offset=0 }, { .children_offset=0, .match_offset=42619 }, { .children_offset=22381, .match_offset=0 }, { .children_offset=22383, .match_offset=0 }, { .children_offset=22385, .match_offset=0 }, { .children_offset=22387, .match_offset=0 }, { .children_offset=22389, .match_offset=0 }, { .children_offset=0, .match_offset=102735 }, { .children_offset=22391, .match_offset=0 }, { .children_offset=22393, .match_offset=0 }, { .children_offset=22395, .match_offset=0 }, { .children_offset=0, .match_offset=132810 }, { .children_offset=22397, .match_offset=0 }, { .children_offset=22399, .match_offset=0 }, { .children_offset=22401, .match_offset=0 }, { .children_offset=0, .match_offset=56623 }, { .children_offset=22403, .match_offset=0 }, { .children_offset=0, .match_offset=33789 }, { .children_offset=22405, .match_offset=0 }, { .children_offset=22410, .match_offset=0 }, { .children_offset=22412, .match_offset=0 }, { .children_offset=22414, .match_offset=0 }, { .children_offset=22416, .match_offset=0 }, { .children_offset=22418, .match_offset=0 }, { .children_offset=22420, .match_offset=0 }, { .children_offset=0, .match_offset=108166 }, { .children_offset=22422, .match_offset=0 }, { .children_offset=22425, .match_offset=0 }, { .children_offset=22427, .match_offset=0 }, { .children_offset=22429, .match_offset=0 }, { .children_offset=0, .match_offset=67348 }, { .children_offset=22431, .match_offset=0 }, { .children_offset=22433, .match_offset=0 }, { .children_offset=22435, .match_offset=0 }, { .children_offset=22437, .match_offset=0 }, { .children_offset=0, .match_offset=59158 }, { .children_offset=22440, .match_offset=0 }, { .children_offset=0, .match_offset=16380 }, { .children_offset=22442, .match_offset=72489 }, { .children_offset=0, .match_offset=37528 }, { .children_offset=22444, .match_offset=0 }, { .children_offset=22446, .match_offset=0 }, { .children_offset=22448, .match_offset=0 }, { .children_offset=0, .match_offset=43171 }, { .children_offset=0, .match_offset=108107 }, { .children_offset=22450, .match_offset=0 }, { .children_offset=0, .match_offset=38406 }, { .children_offset=22452, .match_offset=81912 }, { .children_offset=22455, .match_offset=0 }, { .children_offset=0, .match_offset=20472 }, { .children_offset=22458, .match_offset=0 }, { .children_offset=22461, .match_offset=0 }, { .children_offset=22463, .match_offset=0 }, { .children_offset=22465, .match_offset=0 }, { .children_offset=22467, .match_offset=0 }, { .children_offset=0, .match_offset=135006 }, { .children_offset=22470, .match_offset=0 }, { .children_offset=0, .match_offset=60491 }, { .children_offset=22472, .match_offset=0 }, { .children_offset=22474, .match_offset=0 }, { .children_offset=0, .match_offset=8979 }, { .children_offset=22476, .match_offset=0 }, { .children_offset=22478, .match_offset=0 }, { .children_offset=22480, .match_offset=0 }, { .children_offset=0, .match_offset=5487 }, { .children_offset=22482, .match_offset=87707 }, { .children_offset=22500, .match_offset=0 }, { .children_offset=22502, .match_offset=0 }, { .children_offset=22504, .match_offset=0 }, { .children_offset=22506, .match_offset=0 }, { .children_offset=0, .match_offset=67830 }, { .children_offset=22508, .match_offset=0 }, { .children_offset=0, .match_offset=111180 }, { .children_offset=22510, .match_offset=0 }, { .children_offset=22512, .match_offset=0 }, { .children_offset=0, .match_offset=73834 }, { .children_offset=22514, .match_offset=0 }, { .children_offset=22520, .match_offset=0 }, { .children_offset=22522, .match_offset=0 }, { .children_offset=0, .match_offset=65834 }, { .children_offset=0, .match_offset=67409 }, { .children_offset=22524, .match_offset=0 }, { .children_offset=22526, .match_offset=0 }, { .children_offset=22528, .match_offset=0 }, { .children_offset=22530, .match_offset=0 }, { .children_offset=22532, .match_offset=0 }, { .children_offset=0, .match_offset=132962 }, { .children_offset=22534, .match_offset=0 }, { .children_offset=22536, .match_offset=0 }, { .children_offset=22539, .match_offset=0 }, { .children_offset=22541, .match_offset=0 }, { .children_offset=0, .match_offset=124569 }, { .children_offset=22543, .match_offset=0 }, { .children_offset=22545, .match_offset=0 }, { .children_offset=22547, .match_offset=0 }, { .children_offset=22549, .match_offset=0 }, { .children_offset=0, .match_offset=45059 }, { .children_offset=22551, .match_offset=0 }, { .children_offset=22553, .match_offset=0 }, { .children_offset=22556, .match_offset=0 }, { .children_offset=22558, .match_offset=0 }, { .children_offset=22560, .match_offset=44303 }, { .children_offset=0, .match_offset=60156 }, { .children_offset=22562, .match_offset=0 }, { .children_offset=22564, .match_offset=0 }, { .children_offset=22566, .match_offset=0 }, { .children_offset=0, .match_offset=119636 }, { .children_offset=22568, .match_offset=0 }, { .children_offset=22572, .match_offset=0 }, { .children_offset=22575, .match_offset=0 }, { .children_offset=22577, .match_offset=0 }, { .children_offset=22579, .match_offset=0 }, { .children_offset=22581, .match_offset=0 }, { .children_offset=22583, .match_offset=0 }, { .children_offset=22585, .match_offset=0 }, { .children_offset=0, .match_offset=116177 }, { .children_offset=0, .match_offset=78035 }, { .children_offset=22587, .match_offset=0 }, { .children_offset=22591, .match_offset=0 }, { .children_offset=0, .match_offset=55416 }, { .children_offset=22593, .match_offset=22231 }, { .children_offset=22596, .match_offset=0 }, { .children_offset=22598, .match_offset=0 }, { .children_offset=22600, .match_offset=0 }, { .children_offset=0, .match_offset=61444 }, { .children_offset=22602, .match_offset=0 }, { .children_offset=22604, .match_offset=0 }, { .children_offset=22606, .match_offset=0 }, { .children_offset=0, .match_offset=125200 }, { .children_offset=22608, .match_offset=0 }, { .children_offset=22610, .match_offset=0 }, { .children_offset=22612, .match_offset=0 }, { .children_offset=0, .match_offset=46899 }, { .children_offset=22614, .match_offset=0 }, { .children_offset=22616, .match_offset=0 }, { .children_offset=22618, .match_offset=0 }, { .children_offset=22620, .match_offset=0 }, { .children_offset=22622, .match_offset=0 }, { .children_offset=22624, .match_offset=0 }, { .children_offset=0, .match_offset=87333 }, { .children_offset=22626, .match_offset=0 }, { .children_offset=22630, .match_offset=0 }, { .children_offset=22632, .match_offset=32955 }, { .children_offset=22635, .match_offset=0 }, { .children_offset=22637, .match_offset=0 }, { .children_offset=0, .match_offset=43758 }, { .children_offset=22639, .match_offset=0 }, { .children_offset=22641, .match_offset=0 }, { .children_offset=0, .match_offset=109560 }, { .children_offset=22643, .match_offset=0 }, { .children_offset=22645, .match_offset=0 }, { .children_offset=22647, .match_offset=0 }, { .children_offset=22649, .match_offset=0 }, { .children_offset=22651, .match_offset=0 }, { .children_offset=0, .match_offset=90630 }, { .children_offset=22653, .match_offset=0 }, { .children_offset=22655, .match_offset=0 }, { .children_offset=22657, .match_offset=0 }, { .children_offset=22659, .match_offset=0 }, { .children_offset=22661, .match_offset=0 }, { .children_offset=22663, .match_offset=0 }, { .children_offset=22665, .match_offset=0 }, { .children_offset=0, .match_offset=113825 }, { .children_offset=22667, .match_offset=25385 }, { .children_offset=22669, .match_offset=0 }, { .children_offset=22671, .match_offset=0 }, { .children_offset=0, .match_offset=44422 }, { .children_offset=22673, .match_offset=0 }, { .children_offset=22677, .match_offset=0 }, { .children_offset=22679, .match_offset=0 }, { .children_offset=0, .match_offset=71962 }, { .children_offset=22681, .match_offset=0 }, { .children_offset=22683, .match_offset=0 }, { .children_offset=22685, .match_offset=0 }, { .children_offset=22687, .match_offset=0 }, { .children_offset=0, .match_offset=61077 }, { .children_offset=22689, .match_offset=0 }, { .children_offset=22691, .match_offset=0 }, { .children_offset=22693, .match_offset=0 }, { .children_offset=0, .match_offset=123191 }, { .children_offset=22695, .match_offset=20549 }, { .children_offset=22698, .match_offset=0 }, { .children_offset=22700, .match_offset=0 }, { .children_offset=0, .match_offset=60031 }, { .children_offset=22702, .match_offset=0 }, { .children_offset=22704, .match_offset=0 }, { .children_offset=22706, .match_offset=0 }, { .children_offset=0, .match_offset=16668 }, { .children_offset=0, .match_offset=84844 }, { .children_offset=22708, .match_offset=72508 }, { .children_offset=22712, .match_offset=0 }, { .children_offset=0, .match_offset=127314 }, { .children_offset=0, .match_offset=78209 }, { .children_offset=22714, .match_offset=0 }, { .children_offset=22716, .match_offset=0 }, { .children_offset=22718, .match_offset=0 }, { .children_offset=22720, .match_offset=0 }, { .children_offset=22722, .match_offset=0 }, { .children_offset=0, .match_offset=55675 }, { .children_offset=22724, .match_offset=0 }, { .children_offset=22726, .match_offset=0 }, { .children_offset=22728, .match_offset=0 }, { .children_offset=0, .match_offset=33789 }, { .children_offset=22730, .match_offset=0 }, { .children_offset=22732, .match_offset=0 }, { .children_offset=0, .match_offset=103657 }, { .children_offset=22734, .match_offset=0 }, { .children_offset=22740, .match_offset=0 }, { .children_offset=22742, .match_offset=0 }, { .children_offset=22744, .match_offset=0 }, { .children_offset=22746, .match_offset=0 }, { .children_offset=22748, .match_offset=0 }, { .children_offset=22750, .match_offset=0 }, { .children_offset=22752, .match_offset=0 }, { .children_offset=22754, .match_offset=0 }, { .children_offset=22756, .match_offset=0 }, { .children_offset=0, .match_offset=44443 }, { .children_offset=22758, .match_offset=0 }, { .children_offset=22761, .match_offset=0 }, { .children_offset=0, .match_offset=56940 }, { .children_offset=22763, .match_offset=0 }, { .children_offset=22765, .match_offset=37633 }, { .children_offset=22767, .match_offset=0 }, { .children_offset=22769, .match_offset=0 }, { .children_offset=0, .match_offset=38378 }, { .children_offset=22771, .match_offset=0 }, { .children_offset=22773, .match_offset=0 }, { .children_offset=0, .match_offset=10976 }, { .children_offset=22775, .match_offset=0 }, { .children_offset=22777, .match_offset=0 }, { .children_offset=22779, .match_offset=0 }, { .children_offset=22781, .match_offset=0 }, { .children_offset=22783, .match_offset=0 }, { .children_offset=22785, .match_offset=0 }, { .children_offset=22787, .match_offset=0 }, { .children_offset=22789, .match_offset=0 }, { .children_offset=0, .match_offset=68070 }, { .children_offset=22791, .match_offset=0 }, { .children_offset=22793, .match_offset=0 }, { .children_offset=22795, .match_offset=0 }, { .children_offset=0, .match_offset=67834 }, { .children_offset=22797, .match_offset=116292 }, { .children_offset=22803, .match_offset=0 }, { .children_offset=22805, .match_offset=0 }, { .children_offset=0, .match_offset=68977 }, { .children_offset=22807, .match_offset=0 }, { .children_offset=22810, .match_offset=0 }, { .children_offset=22813, .match_offset=0 }, { .children_offset=22815, .match_offset=0 }, { .children_offset=0, .match_offset=129424 }, { .children_offset=22817, .match_offset=0 }, { .children_offset=22819, .match_offset=0 }, { .children_offset=0, .match_offset=63467 }, { .children_offset=22822, .match_offset=0 }, { .children_offset=22824, .match_offset=0 }, { .children_offset=22826, .match_offset=0 }, { .children_offset=0, .match_offset=45289 }, { .children_offset=22828, .match_offset=0 }, { .children_offset=22836, .match_offset=0 }, { .children_offset=22838, .match_offset=0 }, { .children_offset=22840, .match_offset=68977 }, { .children_offset=22842, .match_offset=0 }, { .children_offset=22844, .match_offset=0 }, { .children_offset=0, .match_offset=68977 }, { .children_offset=22846, .match_offset=0 }, { .children_offset=22848, .match_offset=0 }, { .children_offset=0, .match_offset=110382 }, { .children_offset=22850, .match_offset=0 }, { .children_offset=22852, .match_offset=0 }, { .children_offset=0, .match_offset=62372 }, { .children_offset=22854, .match_offset=0 }, { .children_offset=22858, .match_offset=0 }, { .children_offset=22860, .match_offset=0 }, { .children_offset=22862, .match_offset=0 }, { .children_offset=0, .match_offset=85944 }, { .children_offset=22864, .match_offset=0 }, { .children_offset=22866, .match_offset=0 }, { .children_offset=22868, .match_offset=0 }, { .children_offset=22870, .match_offset=0 }, { .children_offset=0, .match_offset=30467 }, { .children_offset=22872, .match_offset=0 }, { .children_offset=22874, .match_offset=0 }, { .children_offset=22876, .match_offset=0 }, { .children_offset=22878, .match_offset=0 }, { .children_offset=0, .match_offset=108584 }, { .children_offset=22880, .match_offset=0 }, { .children_offset=22882, .match_offset=0 }, { .children_offset=22884, .match_offset=0 }, { .children_offset=22886, .match_offset=0 }, { .children_offset=22888, .match_offset=0 }, { .children_offset=22890, .match_offset=0 }, { .children_offset=22892, .match_offset=0 }, { .children_offset=0, .match_offset=113299 }, { .children_offset=22894, .match_offset=0 }, { .children_offset=22896, .match_offset=0 }, { .children_offset=22898, .match_offset=0 }, { .children_offset=22900, .match_offset=0 }, { .children_offset=22902, .match_offset=0 }, { .children_offset=0, .match_offset=35462 }, { .children_offset=22904, .match_offset=0 }, { .children_offset=22907, .match_offset=0 }, { .children_offset=22909, .match_offset=0 }, { .children_offset=22911, .match_offset=0 }, { .children_offset=22913, .match_offset=0 }, { .children_offset=22916, .match_offset=0 }, { .children_offset=0, .match_offset=74104 }, { .children_offset=22918, .match_offset=0 }, { .children_offset=0, .match_offset=131349 }, { .children_offset=22920, .match_offset=0 }, { .children_offset=22922, .match_offset=0 }, { .children_offset=22924, .match_offset=0 }, { .children_offset=22926, .match_offset=0 }, { .children_offset=22928, .match_offset=0 }, { .children_offset=22930, .match_offset=0 }, { .children_offset=0, .match_offset=69070 }, { .children_offset=0, .match_offset=8566 }, { .children_offset=22932, .match_offset=0 }, { .children_offset=22934, .match_offset=0 }, { .children_offset=22936, .match_offset=0 }, { .children_offset=22938, .match_offset=0 }, { .children_offset=0, .match_offset=136026 }, { .children_offset=22940, .match_offset=0 }, { .children_offset=22942, .match_offset=0 }, { .children_offset=22944, .match_offset=0 }, { .children_offset=0, .match_offset=49902 }, { .children_offset=22946, .match_offset=0 }, { .children_offset=22949, .match_offset=0 }, { .children_offset=22951, .match_offset=0 }, { .children_offset=22954, .match_offset=0 }, { .children_offset=0, .match_offset=28001 }, { .children_offset=22956, .match_offset=0 }, { .children_offset=22958, .match_offset=0 }, { .children_offset=22961, .match_offset=0 }, { .children_offset=22963, .match_offset=0 }, { .children_offset=22965, .match_offset=0 }, { .children_offset=22967, .match_offset=0 }, { .children_offset=0, .match_offset=7731 }, { .children_offset=0, .match_offset=111007 }, { .children_offset=22969, .match_offset=0 }, { .children_offset=22971, .match_offset=0 }, { .children_offset=22973, .match_offset=0 }, { .children_offset=22975, .match_offset=0 }, { .children_offset=22977, .match_offset=0 }, { .children_offset=22979, .match_offset=62640 }, { .children_offset=22982, .match_offset=0 }, { .children_offset=22984, .match_offset=0 }, { .children_offset=22986, .match_offset=0 }, { .children_offset=22988, .match_offset=0 }, { .children_offset=0, .match_offset=125192 }, { .children_offset=22990, .match_offset=0 }, { .children_offset=22992, .match_offset=0 }, { .children_offset=22994, .match_offset=0 }, { .children_offset=22996, .match_offset=0 }, { .children_offset=0, .match_offset=125244 }, { .children_offset=22998, .match_offset=33926 }, { .children_offset=0, .match_offset=135037 }, { .children_offset=23000, .match_offset=87347 }, { .children_offset=23008, .match_offset=0 }, { .children_offset=0, .match_offset=81836 }, { .children_offset=23010, .match_offset=0 }, { .children_offset=23012, .match_offset=0 }, { .children_offset=23014, .match_offset=0 }, { .children_offset=23016, .match_offset=0 }, { .children_offset=0, .match_offset=48748 }, { .children_offset=23018, .match_offset=0 }, { .children_offset=23020, .match_offset=0 }, { .children_offset=0, .match_offset=89232 }, { .children_offset=23022, .match_offset=0 }, { .children_offset=0, .match_offset=5233 }, { .children_offset=23024, .match_offset=0 }, { .children_offset=0, .match_offset=71968 }, { .children_offset=0, .match_offset=25991 }, { .children_offset=23026, .match_offset=0 }, { .children_offset=23029, .match_offset=80740 }, { .children_offset=23031, .match_offset=0 }, { .children_offset=23033, .match_offset=0 }, { .children_offset=0, .match_offset=42293 }, { .children_offset=23035, .match_offset=0 }, { .children_offset=23037, .match_offset=0 }, { .children_offset=23039, .match_offset=0 }, { .children_offset=23041, .match_offset=0 }, { .children_offset=0, .match_offset=80616 }, { .children_offset=23043, .match_offset=22666 }, { .children_offset=23045, .match_offset=0 }, { .children_offset=23047, .match_offset=0 }, { .children_offset=0, .match_offset=49902 }, { .children_offset=23049, .match_offset=129975 }, { .children_offset=23051, .match_offset=0 }, { .children_offset=23053, .match_offset=0 }, { .children_offset=23055, .match_offset=0 }, { .children_offset=0, .match_offset=73880 }, { .children_offset=23057, .match_offset=6813 }, { .children_offset=0, .match_offset=116233 }, { .children_offset=0, .match_offset=1131 }, { .children_offset=23062, .match_offset=0 }, { .children_offset=23064, .match_offset=44759 }, { .children_offset=23066, .match_offset=0 }, { .children_offset=23068, .match_offset=0 }, { .children_offset=23070, .match_offset=0 }, { .children_offset=23072, .match_offset=0 }, { .children_offset=23074, .match_offset=0 }, { .children_offset=23076, .match_offset=0 }, { .children_offset=0, .match_offset=38896 }, { .children_offset=23078, .match_offset=0 }, { .children_offset=23081, .match_offset=0 }, { .children_offset=23083, .match_offset=0 }, { .children_offset=23085, .match_offset=0 }, { .children_offset=23087, .match_offset=0 }, { .children_offset=23089, .match_offset=0 }, { .children_offset=0, .match_offset=37904 }, { .children_offset=23091, .match_offset=0 }, { .children_offset=23093, .match_offset=0 }, { .children_offset=23095, .match_offset=0 }, { .children_offset=23097, .match_offset=0 }, { .children_offset=0, .match_offset=13794 }, { .children_offset=23099, .match_offset=57561 }, { .children_offset=23109, .match_offset=0 }, { .children_offset=23111, .match_offset=0 }, { .children_offset=23113, .match_offset=0 }, { .children_offset=23115, .match_offset=0 }, { .children_offset=23117, .match_offset=0 }, { .children_offset=0, .match_offset=5624 }, { .children_offset=23119, .match_offset=0 }, { .children_offset=23122, .match_offset=0 }, { .children_offset=23124, .match_offset=0 }, { .children_offset=0, .match_offset=64180 }, { .children_offset=0, .match_offset=109745 }, { .children_offset=23126, .match_offset=0 }, { .children_offset=0, .match_offset=32843 }, { .children_offset=23128, .match_offset=0 }, { .children_offset=23130, .match_offset=0 }, { .children_offset=23132, .match_offset=0 }, { .children_offset=23134, .match_offset=0 }, { .children_offset=23136, .match_offset=0 }, { .children_offset=23138, .match_offset=0 }, { .children_offset=0, .match_offset=89237 }, { .children_offset=0, .match_offset=123503 }, { .children_offset=23140, .match_offset=0 }, { .children_offset=23142, .match_offset=39205 }, { .children_offset=23147, .match_offset=0 }, { .children_offset=23149, .match_offset=0 }, { .children_offset=0, .match_offset=123186 }, { .children_offset=0, .match_offset=28428 }, { .children_offset=23151, .match_offset=12596 }, { .children_offset=0, .match_offset=42371 }, { .children_offset=0, .match_offset=39205 }, { .children_offset=23153, .match_offset=0 }, { .children_offset=23155, .match_offset=0 }, { .children_offset=23157, .match_offset=0 }, { .children_offset=0, .match_offset=136009 }, { .children_offset=23159, .match_offset=0 }, { .children_offset=23163, .match_offset=0 }, { .children_offset=23165, .match_offset=0 }, { .children_offset=23167, .match_offset=0 }, { .children_offset=23169, .match_offset=125567 }, { .children_offset=0, .match_offset=108851 }, { .children_offset=0, .match_offset=104310 }, { .children_offset=23171, .match_offset=0 }, { .children_offset=23173, .match_offset=0 }, { .children_offset=23175, .match_offset=0 }, { .children_offset=23177, .match_offset=0 }, { .children_offset=23179, .match_offset=0 }, { .children_offset=0, .match_offset=104362 }, { .children_offset=23181, .match_offset=109745 }, { .children_offset=23183, .match_offset=0 }, { .children_offset=23185, .match_offset=0 }, { .children_offset=0, .match_offset=8908 }, { .children_offset=23187, .match_offset=71588 }, { .children_offset=23192, .match_offset=0 }, { .children_offset=23194, .match_offset=0 }, { .children_offset=23196, .match_offset=0 }, { .children_offset=0, .match_offset=126632 }, { .children_offset=23198, .match_offset=0 }, { .children_offset=0, .match_offset=72335 }, { .children_offset=23201, .match_offset=0 }, { .children_offset=23203, .match_offset=0 }, { .children_offset=23205, .match_offset=0 }, { .children_offset=23207, .match_offset=0 }, { .children_offset=23209, .match_offset=0 }, { .children_offset=0, .match_offset=115983 }, { .children_offset=23211, .match_offset=0 }, { .children_offset=23213, .match_offset=0 }, { .children_offset=23215, .match_offset=0 }, { .children_offset=0, .match_offset=42284 }, { .children_offset=0, .match_offset=134295 }, { .children_offset=23217, .match_offset=52531 }, { .children_offset=23221, .match_offset=0 }, { .children_offset=0, .match_offset=27564 }, { .children_offset=23223, .match_offset=0 }, { .children_offset=23225, .match_offset=0 }, { .children_offset=0, .match_offset=40622 }, { .children_offset=23227, .match_offset=0 }, { .children_offset=0, .match_offset=78668 }, { .children_offset=23229, .match_offset=0 }, { .children_offset=23232, .match_offset=0 }, { .children_offset=0, .match_offset=67415 }, { .children_offset=0, .match_offset=30506 }, { .children_offset=0, .match_offset=20622 }, { .children_offset=23234, .match_offset=132322 }, { .children_offset=23237, .match_offset=0 }, { .children_offset=23239, .match_offset=0 }, { .children_offset=23241, .match_offset=0 }, { .children_offset=0, .match_offset=33510 }, { .children_offset=23243, .match_offset=0 }, { .children_offset=0, .match_offset=123798 }, { .children_offset=23245, .match_offset=0 }, { .children_offset=23248, .match_offset=0 }, { .children_offset=23250, .match_offset=0 }, { .children_offset=23252, .match_offset=0 }, { .children_offset=23254, .match_offset=0 }, { .children_offset=0, .match_offset=109722 }, { .children_offset=23256, .match_offset=0 }, { .children_offset=0, .match_offset=13161 }, { .children_offset=23259, .match_offset=0 }, { .children_offset=23261, .match_offset=0 }, { .children_offset=23263, .match_offset=0 }, { .children_offset=0, .match_offset=103460 }, { .children_offset=23265, .match_offset=0 }, { .children_offset=23281, .match_offset=0 }, { .children_offset=23283, .match_offset=0 }, { .children_offset=23285, .match_offset=0 }, { .children_offset=23287, .match_offset=0 }, { .children_offset=23289, .match_offset=0 }, { .children_offset=23291, .match_offset=0 }, { .children_offset=23293, .match_offset=0 }, { .children_offset=23295, .match_offset=0 }, { .children_offset=23297, .match_offset=0 }, { .children_offset=23299, .match_offset=0 }, { .children_offset=0, .match_offset=87842 }, { .children_offset=23301, .match_offset=71832 }, { .children_offset=0, .match_offset=62637 }, { .children_offset=23314, .match_offset=0 }, { .children_offset=23316, .match_offset=37563 }, { .children_offset=23319, .match_offset=0 }, { .children_offset=23321, .match_offset=0 }, { .children_offset=23323, .match_offset=0 }, { .children_offset=23325, .match_offset=0 }, { .children_offset=23327, .match_offset=0 }, { .children_offset=23329, .match_offset=0 }, { .children_offset=23331, .match_offset=0 }, { .children_offset=23333, .match_offset=0 }, { .children_offset=23335, .match_offset=0 }, { .children_offset=0, .match_offset=58574 }, { .children_offset=0, .match_offset=118429 }, { .children_offset=23337, .match_offset=0 }, { .children_offset=0, .match_offset=10874 }, { .children_offset=0, .match_offset=16876 }, { .children_offset=23339, .match_offset=0 }, { .children_offset=0, .match_offset=85361 }, { .children_offset=23341, .match_offset=0 }, { .children_offset=23343, .match_offset=0 }, { .children_offset=23345, .match_offset=0 }, { .children_offset=23347, .match_offset=0 }, { .children_offset=23349, .match_offset=0 }, { .children_offset=23351, .match_offset=0 }, { .children_offset=23353, .match_offset=0 }, { .children_offset=23355, .match_offset=0 }, { .children_offset=23357, .match_offset=0 }, { .children_offset=23359, .match_offset=0 }, { .children_offset=23361, .match_offset=0 }, { .children_offset=23363, .match_offset=0 }, { .children_offset=0, .match_offset=115778 }, { .children_offset=23365, .match_offset=0 }, { .children_offset=23367, .match_offset=0 }, { .children_offset=23369, .match_offset=0 }, { .children_offset=23371, .match_offset=0 }, { .children_offset=0, .match_offset=21392 }, { .children_offset=23373, .match_offset=0 }, { .children_offset=23375, .match_offset=0 }, { .children_offset=23377, .match_offset=85821 }, { .children_offset=23379, .match_offset=0 }, { .children_offset=23381, .match_offset=0 }, { .children_offset=0, .match_offset=116027 }, { .children_offset=0, .match_offset=89628 }, { .children_offset=23383, .match_offset=0 }, { .children_offset=23386, .match_offset=0 }, { .children_offset=23388, .match_offset=0 }, { .children_offset=23390, .match_offset=0 }, { .children_offset=23392, .match_offset=0 }, { .children_offset=0, .match_offset=6418 }, { .children_offset=23394, .match_offset=0 }, { .children_offset=23396, .match_offset=0 }, { .children_offset=23398, .match_offset=0 }, { .children_offset=23400, .match_offset=0 }, { .children_offset=0, .match_offset=30498 }, { .children_offset=0, .match_offset=27364 }, { .children_offset=23402, .match_offset=0 }, { .children_offset=23406, .match_offset=0 }, { .children_offset=23408, .match_offset=0 }, { .children_offset=23410, .match_offset=0 }, { .children_offset=0, .match_offset=34961 }, { .children_offset=23412, .match_offset=0 }, { .children_offset=0, .match_offset=61126 }, { .children_offset=0, .match_offset=119855 }, { .children_offset=23414, .match_offset=0 }, { .children_offset=23417, .match_offset=0 }, { .children_offset=23419, .match_offset=0 }, { .children_offset=0, .match_offset=26825 }, { .children_offset=0, .match_offset=59466 }, { .children_offset=23421, .match_offset=55886 }, { .children_offset=23428, .match_offset=0 }, { .children_offset=23430, .match_offset=0 }, { .children_offset=0, .match_offset=67670 }, { .children_offset=23432, .match_offset=70682 }, { .children_offset=0, .match_offset=131241 }, { .children_offset=23434, .match_offset=0 }, { .children_offset=23436, .match_offset=0 }, { .children_offset=23438, .match_offset=0 }, { .children_offset=23440, .match_offset=0 }, { .children_offset=0, .match_offset=134259 }, { .children_offset=0, .match_offset=74170 }, { .children_offset=23442, .match_offset=42393 }, { .children_offset=23445, .match_offset=53596 }, { .children_offset=0, .match_offset=38913 }, { .children_offset=23447, .match_offset=0 }, { .children_offset=23449, .match_offset=0 }, { .children_offset=23451, .match_offset=0 }, { .children_offset=23453, .match_offset=0 }, { .children_offset=23455, .match_offset=0 }, { .children_offset=0, .match_offset=6235 }, { .children_offset=0, .match_offset=134916 }, { .children_offset=23457, .match_offset=0 }, { .children_offset=0, .match_offset=65720 }, { .children_offset=23459, .match_offset=0 }, { .children_offset=23463, .match_offset=26082 }, { .children_offset=0, .match_offset=73490 }, { .children_offset=0, .match_offset=84865 }, { .children_offset=0, .match_offset=131622 }, { .children_offset=23468, .match_offset=0 }, { .children_offset=23470, .match_offset=0 }, { .children_offset=0, .match_offset=118415 }, { .children_offset=23472, .match_offset=0 }, { .children_offset=0, .match_offset=42673 }, { .children_offset=23474, .match_offset=37517 }, { .children_offset=0, .match_offset=69331 }, { .children_offset=23476, .match_offset=65072 }, { .children_offset=0, .match_offset=112857 }, { .children_offset=23486, .match_offset=65158 }, { .children_offset=0, .match_offset=31017 }, { .children_offset=0, .match_offset=42254 }, { .children_offset=0, .match_offset=46669 }, { .children_offset=23490, .match_offset=0 }, { .children_offset=23492, .match_offset=0 }, { .children_offset=23494, .match_offset=0 }, { .children_offset=0, .match_offset=130141 }, { .children_offset=23496, .match_offset=0 }, { .children_offset=23498, .match_offset=0 }, { .children_offset=23500, .match_offset=0 }, { .children_offset=23502, .match_offset=0 }, { .children_offset=23504, .match_offset=0 }, { .children_offset=23506, .match_offset=0 }, { .children_offset=23508, .match_offset=0 }, { .children_offset=23510, .match_offset=0 }, { .children_offset=0, .match_offset=14384 }, { .children_offset=23512, .match_offset=0 }, { .children_offset=0, .match_offset=49703 }, { .children_offset=0, .match_offset=114826 }, { .children_offset=0, .match_offset=121869 }, { .children_offset=0, .match_offset=11460 }, { .children_offset=0, .match_offset=136221 }, { .children_offset=23514, .match_offset=0 }, { .children_offset=0, .match_offset=46733 }, { .children_offset=23521, .match_offset=134463 }, { .children_offset=0, .match_offset=73688 }, { .children_offset=23523, .match_offset=61844 }, { .children_offset=23528, .match_offset=72519 }, { .children_offset=0, .match_offset=54466 }, { .children_offset=0, .match_offset=43744 }, { .children_offset=0, .match_offset=50361 }, { .children_offset=0, .match_offset=85449 }, { .children_offset=0, .match_offset=28088 }, { .children_offset=0, .match_offset=126611 }, { .children_offset=23532, .match_offset=102714 }, { .children_offset=0, .match_offset=8906 }, { .children_offset=0, .match_offset=68561 }, { .children_offset=0, .match_offset=123740 }, { .children_offset=23536, .match_offset=89138 }, { .children_offset=23542, .match_offset=123514 }, { .children_offset=0, .match_offset=57476 }, { .children_offset=0, .match_offset=104499 }, { .children_offset=0, .match_offset=109279 }, { .children_offset=23545, .match_offset=14835 }, { .children_offset=0, .match_offset=79729 }, { .children_offset=0, .match_offset=118588 }, { .children_offset=0, .match_offset=7514 }, { .children_offset=23547, .match_offset=1958 }, { .children_offset=0, .match_offset=123207 }, { .children_offset=0, .match_offset=74229 }, { .children_offset=0, .match_offset=6617 }, { .children_offset=23551, .match_offset=0 }, { .children_offset=23553, .match_offset=0 }, { .children_offset=23555, .match_offset=0 }, { .children_offset=0, .match_offset=80556 }, { .children_offset=23557, .match_offset=0 }, { .children_offset=23559, .match_offset=0 }, { .children_offset=0, .match_offset=53945 }, { .children_offset=23561, .match_offset=25444 }, { .children_offset=0, .match_offset=57346 }, { .children_offset=23572, .match_offset=0 }, { .children_offset=23574, .match_offset=89646 }, { .children_offset=23577, .match_offset=0 }, { .children_offset=0, .match_offset=84788 }, { .children_offset=0, .match_offset=100906 }, { .children_offset=23580, .match_offset=0 }, { .children_offset=0, .match_offset=133639 }, { .children_offset=23582, .match_offset=0 }, { .children_offset=23584, .match_offset=0 }, { .children_offset=0, .match_offset=127292 }, { .children_offset=23586, .match_offset=0 }, { .children_offset=0, .match_offset=32999 }, { .children_offset=23589, .match_offset=34302 }, { .children_offset=23591, .match_offset=0 }, { .children_offset=23593, .match_offset=0 }, { .children_offset=23595, .match_offset=0 }, { .children_offset=23597, .match_offset=0 }, { .children_offset=0, .match_offset=15531 }, { .children_offset=0, .match_offset=1148 }, { .children_offset=23599, .match_offset=2098 }, { .children_offset=0, .match_offset=44911 }, { .children_offset=0, .match_offset=39053 }, { .children_offset=23601, .match_offset=0 }, { .children_offset=0, .match_offset=115436 }, { .children_offset=0, .match_offset=13922 }, { .children_offset=23603, .match_offset=55974 }, { .children_offset=23606, .match_offset=0 }, { .children_offset=23608, .match_offset=0 }, { .children_offset=0, .match_offset=84836 }, { .children_offset=23610, .match_offset=0 }, { .children_offset=23612, .match_offset=0 }, { .children_offset=23614, .match_offset=0 }, { .children_offset=23616, .match_offset=0 }, { .children_offset=0, .match_offset=16935 }, { .children_offset=23618, .match_offset=0 }, { .children_offset=23621, .match_offset=0 }, { .children_offset=0, .match_offset=64560 }, { .children_offset=23623, .match_offset=0 }, { .children_offset=23625, .match_offset=0 }, { .children_offset=23627, .match_offset=0 }, { .children_offset=0, .match_offset=129294 }, { .children_offset=23629, .match_offset=48441 }, { .children_offset=23642, .match_offset=0 }, { .children_offset=23646, .match_offset=0 }, { .children_offset=23648, .match_offset=0 }, { .children_offset=23650, .match_offset=0 }, { .children_offset=23652, .match_offset=0 }, { .children_offset=23654, .match_offset=0 }, { .children_offset=23656, .match_offset=0 }, { .children_offset=23658, .match_offset=0 }, { .children_offset=23660, .match_offset=0 }, { .children_offset=23662, .match_offset=0 }, { .children_offset=0, .match_offset=114734 }, { .children_offset=23664, .match_offset=0 }, { .children_offset=0, .match_offset=112948 }, { .children_offset=23666, .match_offset=0 }, { .children_offset=0, .match_offset=20911 }, { .children_offset=23668, .match_offset=0 }, { .children_offset=23670, .match_offset=0 }, { .children_offset=0, .match_offset=42914 }, { .children_offset=23672, .match_offset=0 }, { .children_offset=23674, .match_offset=0 }, { .children_offset=23676, .match_offset=0 }, { .children_offset=23678, .match_offset=0 }, { .children_offset=23680, .match_offset=0 }, { .children_offset=0, .match_offset=43785 }, { .children_offset=23682, .match_offset=0 }, { .children_offset=23684, .match_offset=0 }, { .children_offset=0, .match_offset=68875 }, { .children_offset=23686, .match_offset=0 }, { .children_offset=0, .match_offset=90035 }, { .children_offset=23688, .match_offset=0 }, { .children_offset=0, .match_offset=27836 }, { .children_offset=23692, .match_offset=0 }, { .children_offset=23694, .match_offset=0 }, { .children_offset=23696, .match_offset=0 }, { .children_offset=23698, .match_offset=0 }, { .children_offset=23700, .match_offset=0 }, { .children_offset=0, .match_offset=112952 }, { .children_offset=0, .match_offset=14325 }, { .children_offset=23702, .match_offset=68600 }, { .children_offset=0, .match_offset=135019 }, { .children_offset=0, .match_offset=64503 }, { .children_offset=0, .match_offset=40711 }, { .children_offset=23706, .match_offset=28583 }, { .children_offset=23708, .match_offset=0 }, { .children_offset=23710, .match_offset=0 }, { .children_offset=23712, .match_offset=0 }, { .children_offset=0, .match_offset=6894 }, { .children_offset=23714, .match_offset=29956 }, { .children_offset=0, .match_offset=37412 }, { .children_offset=0, .match_offset=134929 }, { .children_offset=0, .match_offset=14392 }, { .children_offset=0, .match_offset=38438 }, { .children_offset=23716, .match_offset=0 }, { .children_offset=0, .match_offset=20287 }, { .children_offset=23718, .match_offset=135013 }, { .children_offset=0, .match_offset=9946 }, { .children_offset=23723, .match_offset=386 }, { .children_offset=0, .match_offset=67392 }, { .children_offset=0, .match_offset=66252 }, { .children_offset=0, .match_offset=133012 }, { .children_offset=23725, .match_offset=0 }, { .children_offset=23751, .match_offset=0 }, { .children_offset=23753, .match_offset=0 }, { .children_offset=0, .match_offset=30778 }, { .children_offset=0, .match_offset=57165 }, { .children_offset=0, .match_offset=89339 }, { .children_offset=0, .match_offset=65725 }, { .children_offset=0, .match_offset=62868 }, { .children_offset=0, .match_offset=71990 }, { .children_offset=0, .match_offset=20228 }, { .children_offset=0, .match_offset=111502 }, { .children_offset=0, .match_offset=89184 }, { .children_offset=23762, .match_offset=48239 }, { .children_offset=23786, .match_offset=0 }, { .children_offset=23797, .match_offset=1895 }, { .children_offset=0, .match_offset=34347 }, { .children_offset=0, .match_offset=72779 }, { .children_offset=0, .match_offset=27856 }, { .children_offset=0, .match_offset=104471 }, { .children_offset=0, .match_offset=59075 }, { .children_offset=0, .match_offset=103089 }, { .children_offset=0, .match_offset=72003 }, { .children_offset=0, .match_offset=22625 }, { .children_offset=0, .match_offset=20195 }, { .children_offset=0, .match_offset=7525 }, { .children_offset=23800, .match_offset=0 }, { .children_offset=0, .match_offset=37508 }, { .children_offset=0, .match_offset=69322 }, { .children_offset=23802, .match_offset=1137 }, { .children_offset=23809, .match_offset=61094 }, { .children_offset=0, .match_offset=65531 }, { .children_offset=23811, .match_offset=0 }, { .children_offset=0, .match_offset=6388 }, { .children_offset=23813, .match_offset=88726 }, { .children_offset=0, .match_offset=15321 }, { .children_offset=0, .match_offset=20168 }, { .children_offset=23815, .match_offset=38919 }, { .children_offset=23817, .match_offset=0 }, { .children_offset=23819, .match_offset=0 }, { .children_offset=0, .match_offset=103948 }, { .children_offset=0, .match_offset=85254 }, { .children_offset=23821, .match_offset=10268 }, { .children_offset=0, .match_offset=25950 }, { .children_offset=23823, .match_offset=5658 }, { .children_offset=0, .match_offset=58932 }, { .children_offset=0, .match_offset=113441 }, { .children_offset=0, .match_offset=26798 }, { .children_offset=0, .match_offset=72325 }, { .children_offset=23828, .match_offset=68896 }, { .children_offset=0, .match_offset=53586 }, { .children_offset=0, .match_offset=109751 }, { .children_offset=23830, .match_offset=65147 }, { .children_offset=0, .match_offset=37976 }, { .children_offset=23835, .match_offset=0 }, { .children_offset=0, .match_offset=117628 }, { .children_offset=23837, .match_offset=0 }, { .children_offset=23839, .match_offset=0 }, { .children_offset=0, .match_offset=90226 }, { .children_offset=0, .match_offset=35452 }, { .children_offset=23841, .match_offset=103291 }, { .children_offset=23844, .match_offset=0 }, { .children_offset=23846, .match_offset=0 }, { .children_offset=23848, .match_offset=0 }, { .children_offset=0, .match_offset=37626 }, { .children_offset=0, .match_offset=125622 }, { .children_offset=0, .match_offset=42599 }, { .children_offset=23850, .match_offset=133524 }, { .children_offset=0, .match_offset=134843 }, { .children_offset=0, .match_offset=77395 }, { .children_offset=23853, .match_offset=29197 }, { .children_offset=23858, .match_offset=66217 }, { .children_offset=23860, .match_offset=0 }, { .children_offset=0, .match_offset=87010 }, { .children_offset=23862, .match_offset=61080 }, { .children_offset=23865, .match_offset=0 }, { .children_offset=23867, .match_offset=0 }, { .children_offset=23869, .match_offset=0 }, { .children_offset=0, .match_offset=16933 }, { .children_offset=23871, .match_offset=0 }, { .children_offset=0, .match_offset=77448 }, { .children_offset=23873, .match_offset=0 }, { .children_offset=23875, .match_offset=0 }, { .children_offset=23877, .match_offset=0 }, { .children_offset=0, .match_offset=26294 }, { .children_offset=23879, .match_offset=0 }, { .children_offset=23881, .match_offset=0 }, { .children_offset=23883, .match_offset=0 }, { .children_offset=0, .match_offset=110529 }, { .children_offset=23885, .match_offset=26468 }, { .children_offset=23891, .match_offset=60087 }, { .children_offset=0, .match_offset=37616 }, { .children_offset=0, .match_offset=35888 }, { .children_offset=0, .match_offset=123124 }, { .children_offset=23893, .match_offset=0 }, { .children_offset=23895, .match_offset=13224 }, { .children_offset=0, .match_offset=116450 }, { .children_offset=23897, .match_offset=0 }, { .children_offset=23899, .match_offset=0 }, { .children_offset=23901, .match_offset=0 }, { .children_offset=23903, .match_offset=0 }, { .children_offset=23905, .match_offset=0 }, { .children_offset=23910, .match_offset=0 }, { .children_offset=23912, .match_offset=0 }, { .children_offset=23914, .match_offset=0 }, { .children_offset=23916, .match_offset=0 }, { .children_offset=0, .match_offset=60419 }, { .children_offset=23918, .match_offset=0 }, { .children_offset=23921, .match_offset=0 }, { .children_offset=23923, .match_offset=0 }, { .children_offset=23925, .match_offset=0 }, { .children_offset=23927, .match_offset=0 }, { .children_offset=23929, .match_offset=0 }, { .children_offset=0, .match_offset=125720 }, { .children_offset=23931, .match_offset=0 }, { .children_offset=23933, .match_offset=0 }, { .children_offset=23935, .match_offset=0 }, { .children_offset=0, .match_offset=29843 }, { .children_offset=23937, .match_offset=0 }, { .children_offset=23939, .match_offset=0 }, { .children_offset=23941, .match_offset=0 }, { .children_offset=23943, .match_offset=0 }, { .children_offset=0, .match_offset=15476 }, { .children_offset=23945, .match_offset=0 }, { .children_offset=23947, .match_offset=0 }, { .children_offset=23949, .match_offset=0 }, { .children_offset=23951, .match_offset=0 }, { .children_offset=23953, .match_offset=0 }, { .children_offset=23955, .match_offset=0 }, { .children_offset=23957, .match_offset=0 }, { .children_offset=23959, .match_offset=0 }, { .children_offset=23961, .match_offset=0 }, { .children_offset=0, .match_offset=11178 }, { .children_offset=0, .match_offset=42906 }, { .children_offset=23963, .match_offset=133184 }, { .children_offset=23968, .match_offset=0 }, { .children_offset=0, .match_offset=7066 }, { .children_offset=23971, .match_offset=0 }, { .children_offset=23973, .match_offset=0 }, { .children_offset=0, .match_offset=42391 }, { .children_offset=23975, .match_offset=0 }, { .children_offset=0, .match_offset=14933 }, { .children_offset=23977, .match_offset=37217 }, { .children_offset=23979, .match_offset=133458 }, { .children_offset=23982, .match_offset=0 }, { .children_offset=0, .match_offset=59092 }, { .children_offset=23984, .match_offset=0 }, { .children_offset=0, .match_offset=34402 }, { .children_offset=23986, .match_offset=0 }, { .children_offset=23988, .match_offset=0 }, { .children_offset=23990, .match_offset=0 }, { .children_offset=23992, .match_offset=0 }, { .children_offset=0, .match_offset=77994 }, { .children_offset=23994, .match_offset=0 }, { .children_offset=23998, .match_offset=0 }, { .children_offset=24000, .match_offset=0 }, { .children_offset=24002, .match_offset=0 }, { .children_offset=24004, .match_offset=0 }, { .children_offset=0, .match_offset=58278 }, { .children_offset=24006, .match_offset=0 }, { .children_offset=24008, .match_offset=0 }, { .children_offset=0, .match_offset=114250 }, { .children_offset=24010, .match_offset=0 }, { .children_offset=24012, .match_offset=38704 }, { .children_offset=24014, .match_offset=0 }, { .children_offset=24016, .match_offset=0 }, { .children_offset=0, .match_offset=123863 }, { .children_offset=24018, .match_offset=126591 }, { .children_offset=24022, .match_offset=0 }, { .children_offset=24025, .match_offset=0 }, { .children_offset=24027, .match_offset=0 }, { .children_offset=24029, .match_offset=0 }, { .children_offset=24031, .match_offset=127377 }, { .children_offset=24033, .match_offset=0 }, { .children_offset=24035, .match_offset=0 }, { .children_offset=24037, .match_offset=0 }, { .children_offset=24039, .match_offset=0 }, { .children_offset=24041, .match_offset=0 }, { .children_offset=24043, .match_offset=0 }, { .children_offset=24045, .match_offset=0 }, { .children_offset=24047, .match_offset=0 }, { .children_offset=0, .match_offset=126543 }, { .children_offset=24049, .match_offset=0 }, { .children_offset=24051, .match_offset=118599 }, { .children_offset=24053, .match_offset=0 }, { .children_offset=24055, .match_offset=0 }, { .children_offset=0, .match_offset=32973 }, { .children_offset=24057, .match_offset=0 }, { .children_offset=24060, .match_offset=0 }, { .children_offset=24062, .match_offset=0 }, { .children_offset=0, .match_offset=7701 }, { .children_offset=24064, .match_offset=0 }, { .children_offset=24066, .match_offset=0 }, { .children_offset=24068, .match_offset=0 }, { .children_offset=0, .match_offset=116944 }, { .children_offset=0, .match_offset=34927 }, { .children_offset=24070, .match_offset=0 }, { .children_offset=0, .match_offset=131535 }, { .children_offset=24074, .match_offset=73603 }, { .children_offset=0, .match_offset=123111 }, { .children_offset=0, .match_offset=104503 }, { .children_offset=24076, .match_offset=86792 }, { .children_offset=24078, .match_offset=0 }, { .children_offset=24080, .match_offset=0 }, { .children_offset=0, .match_offset=78219 }, { .children_offset=24082, .match_offset=0 }, { .children_offset=0, .match_offset=68650 }, { .children_offset=0, .match_offset=125618 }, { .children_offset=0, .match_offset=37519 }, { .children_offset=0, .match_offset=86279 }, { .children_offset=24086, .match_offset=68383 }, { .children_offset=24088, .match_offset=0 }, { .children_offset=0, .match_offset=11489 }, { .children_offset=24091, .match_offset=0 }, { .children_offset=24093, .match_offset=0 }, { .children_offset=0, .match_offset=73458 }, { .children_offset=24095, .match_offset=0 }, { .children_offset=24097, .match_offset=0 }, { .children_offset=24099, .match_offset=0 }, { .children_offset=0, .match_offset=65389 }, { .children_offset=0, .match_offset=41855 }, { .children_offset=24101, .match_offset=0 }, { .children_offset=24105, .match_offset=0 }, { .children_offset=0, .match_offset=113389 }, { .children_offset=24107, .match_offset=0 }, { .children_offset=24109, .match_offset=0 }, { .children_offset=24111, .match_offset=0 }, { .children_offset=0, .match_offset=14972 }, { .children_offset=0, .match_offset=123119 }, { .children_offset=24113, .match_offset=35290 }, { .children_offset=24132, .match_offset=0 }, { .children_offset=0, .match_offset=33351 }, { .children_offset=0, .match_offset=73684 }, { .children_offset=0, .match_offset=85244 }, { .children_offset=0, .match_offset=41880 }, { .children_offset=0, .match_offset=77242 }, { .children_offset=0, .match_offset=53850 }, { .children_offset=24139, .match_offset=0 }, { .children_offset=24141, .match_offset=0 }, { .children_offset=0, .match_offset=29215 }, { .children_offset=0, .match_offset=78470 }, { .children_offset=24143, .match_offset=67556 }, { .children_offset=0, .match_offset=61533 }, { .children_offset=24149, .match_offset=0 }, { .children_offset=0, .match_offset=30736 }, { .children_offset=24151, .match_offset=0 }, { .children_offset=24153, .match_offset=0 }, { .children_offset=24155, .match_offset=0 }, { .children_offset=0, .match_offset=132812 }, { .children_offset=24157, .match_offset=0 }, { .children_offset=0, .match_offset=78397 }, { .children_offset=0, .match_offset=124755 }, { .children_offset=24159, .match_offset=0 }, { .children_offset=24161, .match_offset=0 }, { .children_offset=24163, .match_offset=0 }, { .children_offset=0, .match_offset=34112 }, { .children_offset=24165, .match_offset=67374 }, { .children_offset=24167, .match_offset=0 }, { .children_offset=0, .match_offset=109193 }, { .children_offset=24169, .match_offset=0 }, { .children_offset=24171, .match_offset=0 }, { .children_offset=24173, .match_offset=0 }, { .children_offset=0, .match_offset=64189 }, { .children_offset=24175, .match_offset=0 }, { .children_offset=24178, .match_offset=0 }, { .children_offset=24180, .match_offset=0 }, { .children_offset=24182, .match_offset=0 }, { .children_offset=0, .match_offset=8872 }, { .children_offset=24184, .match_offset=0 }, { .children_offset=24188, .match_offset=0 }, { .children_offset=24190, .match_offset=0 }, { .children_offset=24192, .match_offset=0 }, { .children_offset=24194, .match_offset=0 }, { .children_offset=0, .match_offset=45055 }, { .children_offset=24196, .match_offset=0 }, { .children_offset=0, .match_offset=25955 }, { .children_offset=24198, .match_offset=0 }, { .children_offset=0, .match_offset=108746 }, { .children_offset=24200, .match_offset=102898 }, { .children_offset=24203, .match_offset=0 }, { .children_offset=0, .match_offset=114624 }, { .children_offset=24205, .match_offset=0 }, { .children_offset=24207, .match_offset=0 }, { .children_offset=24209, .match_offset=0 }, { .children_offset=24211, .match_offset=125550 }, { .children_offset=24213, .match_offset=0 }, { .children_offset=0, .match_offset=74069 }, { .children_offset=24215, .match_offset=0 }, { .children_offset=0, .match_offset=46755 }, { .children_offset=0, .match_offset=5537 }, { .children_offset=24217, .match_offset=0 }, { .children_offset=24219, .match_offset=0 }, { .children_offset=0, .match_offset=81914 }, { .children_offset=24221, .match_offset=71538 }, { .children_offset=24223, .match_offset=0 }, { .children_offset=0, .match_offset=37628 }, { .children_offset=24225, .match_offset=46854 }, { .children_offset=24227, .match_offset=0 }, { .children_offset=0, .match_offset=130902 }, { .children_offset=24229, .match_offset=0 }, { .children_offset=24238, .match_offset=0 }, { .children_offset=24240, .match_offset=12517 }, { .children_offset=0, .match_offset=57484 }, { .children_offset=24244, .match_offset=0 }, { .children_offset=0, .match_offset=29853 }, { .children_offset=24246, .match_offset=0 }, { .children_offset=24248, .match_offset=0 }, { .children_offset=24250, .match_offset=0 }, { .children_offset=24252, .match_offset=0 }, { .children_offset=0, .match_offset=129924 }, { .children_offset=24254, .match_offset=0 }, { .children_offset=24257, .match_offset=0 }, { .children_offset=0, .match_offset=114065 }, { .children_offset=24259, .match_offset=0 }, { .children_offset=24261, .match_offset=0 }, { .children_offset=24263, .match_offset=0 }, { .children_offset=24265, .match_offset=0 }, { .children_offset=24267, .match_offset=0 }, { .children_offset=0, .match_offset=63121 }, { .children_offset=0, .match_offset=77833 }, { .children_offset=24269, .match_offset=0 }, { .children_offset=0, .match_offset=85406 }, { .children_offset=24271, .match_offset=42379 }, { .children_offset=24273, .match_offset=0 }, { .children_offset=0, .match_offset=11932 }, { .children_offset=24275, .match_offset=0 }, { .children_offset=24278, .match_offset=0 }, { .children_offset=24280, .match_offset=0 }, { .children_offset=0, .match_offset=33016 }, { .children_offset=24282, .match_offset=0 }, { .children_offset=24284, .match_offset=0 }, { .children_offset=24286, .match_offset=0 }, { .children_offset=24288, .match_offset=0 }, { .children_offset=24290, .match_offset=0 }, { .children_offset=0, .match_offset=55849 }, { .children_offset=0, .match_offset=43228 }, { .children_offset=24292, .match_offset=0 }, { .children_offset=24294, .match_offset=0 }, { .children_offset=24296, .match_offset=0 }, { .children_offset=0, .match_offset=60944 }, { .children_offset=0, .match_offset=103952 }, { .children_offset=0, .match_offset=129621 }, { .children_offset=24298, .match_offset=1946 }, { .children_offset=24301, .match_offset=0 }, { .children_offset=24303, .match_offset=0 }, { .children_offset=24305, .match_offset=0 }, { .children_offset=24307, .match_offset=0 }, { .children_offset=0, .match_offset=48449 }, { .children_offset=24309, .match_offset=0 }, { .children_offset=24311, .match_offset=0 }, { .children_offset=0, .match_offset=59448 }, { .children_offset=24313, .match_offset=0 }, { .children_offset=0, .match_offset=60806 }, { .children_offset=24315, .match_offset=90128 }, { .children_offset=24317, .match_offset=0 }, { .children_offset=24319, .match_offset=0 }, { .children_offset=24321, .match_offset=0 }, { .children_offset=0, .match_offset=56583 }, { .children_offset=24323, .match_offset=0 }, { .children_offset=24334, .match_offset=123626 }, { .children_offset=0, .match_offset=109298 }, { .children_offset=0, .match_offset=78568 }, { .children_offset=0, .match_offset=44030 }, { .children_offset=0, .match_offset=68440 }, { .children_offset=24345, .match_offset=0 }, { .children_offset=24347, .match_offset=0 }, { .children_offset=24349, .match_offset=0 }, { .children_offset=24351, .match_offset=0 }, { .children_offset=24353, .match_offset=0 }, { .children_offset=24355, .match_offset=0 }, { .children_offset=0, .match_offset=6686 }, { .children_offset=24357, .match_offset=0 }, { .children_offset=24359, .match_offset=0 }, { .children_offset=0, .match_offset=63133 }, { .children_offset=24361, .match_offset=33494 }, { .children_offset=24364, .match_offset=0 }, { .children_offset=0, .match_offset=52733 }, { .children_offset=0, .match_offset=46071 }, { .children_offset=24366, .match_offset=0 }, { .children_offset=0, .match_offset=55836 }, { .children_offset=24368, .match_offset=26880 }, { .children_offset=24370, .match_offset=0 }, { .children_offset=24372, .match_offset=0 }, { .children_offset=24374, .match_offset=0 }, { .children_offset=24376, .match_offset=0 }, { .children_offset=24378, .match_offset=0 }, { .children_offset=0, .match_offset=35648 }, { .children_offset=0, .match_offset=6773 }, { .children_offset=24380, .match_offset=0 }, { .children_offset=0, .match_offset=37883 }, { .children_offset=24382, .match_offset=65206 }, { .children_offset=0, .match_offset=132600 }, { .children_offset=0, .match_offset=65850 }, { .children_offset=24386, .match_offset=0 }, { .children_offset=0, .match_offset=65127 }, { .children_offset=24388, .match_offset=0 }, { .children_offset=0, .match_offset=57260 }, { .children_offset=0, .match_offset=86300 }, { .children_offset=24391, .match_offset=87143 }, { .children_offset=24394, .match_offset=0 }, { .children_offset=24396, .match_offset=0 }, { .children_offset=24398, .match_offset=0 }, { .children_offset=0, .match_offset=104179 }, { .children_offset=0, .match_offset=86077 }, { .children_offset=24400, .match_offset=0 }, { .children_offset=24403, .match_offset=0 }, { .children_offset=0, .match_offset=78717 }, { .children_offset=0, .match_offset=40327 }, { .children_offset=24405, .match_offset=12003 }, { .children_offset=24411, .match_offset=0 }, { .children_offset=24413, .match_offset=0 }, { .children_offset=0, .match_offset=14555 }, { .children_offset=24415, .match_offset=0 }, { .children_offset=24417, .match_offset=0 }, { .children_offset=0, .match_offset=69111 }, { .children_offset=24419, .match_offset=88634 }, { .children_offset=24421, .match_offset=0 }, { .children_offset=0, .match_offset=108111 }, { .children_offset=0, .match_offset=78556 }, { .children_offset=0, .match_offset=111381 }, { .children_offset=24423, .match_offset=133581 }, { .children_offset=24427, .match_offset=0 }, { .children_offset=0, .match_offset=66246 }, { .children_offset=24429, .match_offset=0 }, { .children_offset=24431, .match_offset=0 }, { .children_offset=0, .match_offset=67388 }, { .children_offset=24434, .match_offset=0 }, { .children_offset=24436, .match_offset=0 }, { .children_offset=24438, .match_offset=0 }, { .children_offset=0, .match_offset=72010 }, { .children_offset=24440, .match_offset=0 }, { .children_offset=24442, .match_offset=68854 }, { .children_offset=24444, .match_offset=0 }, { .children_offset=24446, .match_offset=0 }, { .children_offset=24448, .match_offset=0 }, { .children_offset=0, .match_offset=7066 }, { .children_offset=24450, .match_offset=0 }, { .children_offset=24452, .match_offset=0 }, { .children_offset=0, .match_offset=126403 }, { .children_offset=0, .match_offset=65840 }, { .children_offset=24454, .match_offset=38848 }, { .children_offset=24476, .match_offset=0 }, { .children_offset=0, .match_offset=68559 }, { .children_offset=0, .match_offset=78935 }, { .children_offset=0, .match_offset=127609 }, { .children_offset=0, .match_offset=115802 }, { .children_offset=0, .match_offset=31156 }, { .children_offset=0, .match_offset=69022 }, { .children_offset=0, .match_offset=68754 }, { .children_offset=0, .match_offset=123092 }, { .children_offset=24485, .match_offset=0 }, { .children_offset=0, .match_offset=79749 }, { .children_offset=0, .match_offset=37724 }, { .children_offset=0, .match_offset=110915 }, { .children_offset=24488, .match_offset=0 }, { .children_offset=0, .match_offset=12328 }, { .children_offset=0, .match_offset=134991 }, { .children_offset=24490, .match_offset=37624 }, { .children_offset=24495, .match_offset=0 }, { .children_offset=0, .match_offset=64532 }, { .children_offset=0, .match_offset=133597 }, { .children_offset=24497, .match_offset=0 }, { .children_offset=24499, .match_offset=0 }, { .children_offset=0, .match_offset=29076 }, { .children_offset=0, .match_offset=50605 }, { .children_offset=0, .match_offset=1532 }, { .children_offset=24501, .match_offset=1223 }, { .children_offset=24503, .match_offset=0 }, { .children_offset=0, .match_offset=55239 }, { .children_offset=24505, .match_offset=0 }, { .children_offset=24507, .match_offset=0 }, { .children_offset=24509, .match_offset=0 }, { .children_offset=24511, .match_offset=0 }, { .children_offset=0, .match_offset=72897 }, { .children_offset=24513, .match_offset=0 }, { .children_offset=24515, .match_offset=0 }, { .children_offset=24517, .match_offset=0 }, { .children_offset=0, .match_offset=6872 }, { .children_offset=24519, .match_offset=0 }, { .children_offset=24521, .match_offset=0 }, { .children_offset=24523, .match_offset=0 }, { .children_offset=0, .match_offset=56969 }, { .children_offset=24525, .match_offset=132883 }, { .children_offset=24530, .match_offset=0 }, { .children_offset=24532, .match_offset=0 }, { .children_offset=24534, .match_offset=0 }, { .children_offset=24536, .match_offset=0 }, { .children_offset=24538, .match_offset=0 }, { .children_offset=24540, .match_offset=0 }, { .children_offset=24542, .match_offset=0 }, { .children_offset=24544, .match_offset=0 }, { .children_offset=0, .match_offset=85288 }, { .children_offset=0, .match_offset=73205 }, { .children_offset=24546, .match_offset=0 }, { .children_offset=0, .match_offset=53579 }, { .children_offset=24548, .match_offset=0 }, { .children_offset=24550, .match_offset=0 }, { .children_offset=24552, .match_offset=0 }, { .children_offset=0, .match_offset=27807 }, { .children_offset=0, .match_offset=58879 }, { .children_offset=0, .match_offset=38137 }, { .children_offset=24554, .match_offset=0 }, { .children_offset=24557, .match_offset=0 }, { .children_offset=24559, .match_offset=0 }, { .children_offset=24561, .match_offset=0 }, { .children_offset=0, .match_offset=87797 }, { .children_offset=24563, .match_offset=8618 }, { .children_offset=24567, .match_offset=0 }, { .children_offset=24569, .match_offset=0 }, { .children_offset=24571, .match_offset=0 }, { .children_offset=24573, .match_offset=0 }, { .children_offset=24575, .match_offset=0 }, { .children_offset=0, .match_offset=22590 }, { .children_offset=24577, .match_offset=0 }, { .children_offset=24579, .match_offset=0 }, { .children_offset=24581, .match_offset=0 }, { .children_offset=24583, .match_offset=0 }, { .children_offset=24585, .match_offset=0 }, { .children_offset=24587, .match_offset=0 }, { .children_offset=0, .match_offset=20390 }, { .children_offset=24589, .match_offset=0 }, { .children_offset=24591, .match_offset=0 }, { .children_offset=24593, .match_offset=0 }, { .children_offset=24595, .match_offset=0 }, { .children_offset=0, .match_offset=69094 }, { .children_offset=24597, .match_offset=0 }, { .children_offset=24602, .match_offset=0 }, { .children_offset=0, .match_offset=77225 }, { .children_offset=0, .match_offset=58865 }, { .children_offset=24604, .match_offset=0 }, { .children_offset=24606, .match_offset=0 }, { .children_offset=0, .match_offset=115343 }, { .children_offset=24608, .match_offset=101009 }, { .children_offset=24610, .match_offset=0 }, { .children_offset=24612, .match_offset=0 }, { .children_offset=0, .match_offset=54459 }, { .children_offset=24614, .match_offset=12359 }, { .children_offset=0, .match_offset=8638 }, { .children_offset=0, .match_offset=28749 }, { .children_offset=24616, .match_offset=89983 }, { .children_offset=24618, .match_offset=0 }, { .children_offset=24620, .match_offset=0 }, { .children_offset=24622, .match_offset=0 }, { .children_offset=24624, .match_offset=0 }, { .children_offset=24626, .match_offset=0 }, { .children_offset=0, .match_offset=87791 }, { .children_offset=0, .match_offset=126572 }, { .children_offset=24628, .match_offset=0 }, { .children_offset=24630, .match_offset=0 }, { .children_offset=24632, .match_offset=0 }, { .children_offset=24634, .match_offset=46632 }, { .children_offset=24636, .match_offset=0 }, { .children_offset=24645, .match_offset=0 }, { .children_offset=24647, .match_offset=0 }, { .children_offset=24649, .match_offset=0 }, { .children_offset=24651, .match_offset=0 }, { .children_offset=24653, .match_offset=0 }, { .children_offset=24655, .match_offset=0 }, { .children_offset=0, .match_offset=80234 }, { .children_offset=24657, .match_offset=0 }, { .children_offset=24659, .match_offset=0 }, { .children_offset=24661, .match_offset=0 }, { .children_offset=24663, .match_offset=0 }, { .children_offset=0, .match_offset=29193 }, { .children_offset=24665, .match_offset=0 }, { .children_offset=24667, .match_offset=0 }, { .children_offset=24669, .match_offset=0 }, { .children_offset=24671, .match_offset=0 }, { .children_offset=24673, .match_offset=0 }, { .children_offset=24675, .match_offset=0 }, { .children_offset=0, .match_offset=110594 }, { .children_offset=24677, .match_offset=0 }, { .children_offset=24679, .match_offset=0 }, { .children_offset=24681, .match_offset=0 }, { .children_offset=24683, .match_offset=0 }, { .children_offset=0, .match_offset=115407 }, { .children_offset=24685, .match_offset=0 }, { .children_offset=24687, .match_offset=0 }, { .children_offset=24689, .match_offset=0 }, { .children_offset=24691, .match_offset=0 }, { .children_offset=0, .match_offset=53007 }, { .children_offset=24693, .match_offset=0 }, { .children_offset=24695, .match_offset=0 }, { .children_offset=24697, .match_offset=0 }, { .children_offset=24699, .match_offset=0 }, { .children_offset=0, .match_offset=59168 }, { .children_offset=24701, .match_offset=0 }, { .children_offset=24703, .match_offset=0 }, { .children_offset=24705, .match_offset=0 }, { .children_offset=24707, .match_offset=58009 }, { .children_offset=24709, .match_offset=0 }, { .children_offset=24711, .match_offset=0 }, { .children_offset=24713, .match_offset=0 }, { .children_offset=24715, .match_offset=0 }, { .children_offset=24717, .match_offset=0 }, { .children_offset=24719, .match_offset=0 }, { .children_offset=0, .match_offset=74596 }, { .children_offset=24721, .match_offset=0 }, { .children_offset=24723, .match_offset=0 }, { .children_offset=24725, .match_offset=0 }, { .children_offset=24727, .match_offset=0 }, { .children_offset=24729, .match_offset=0 }, { .children_offset=0, .match_offset=33047 }, { .children_offset=24731, .match_offset=0 }, { .children_offset=24734, .match_offset=0 }, { .children_offset=0, .match_offset=58407 }, { .children_offset=0, .match_offset=58407 }, { .children_offset=24736, .match_offset=102380 }, { .children_offset=0, .match_offset=7018 }, { .children_offset=24742, .match_offset=68417 }, { .children_offset=0, .match_offset=110907 }, { .children_offset=0, .match_offset=25967 }, { .children_offset=0, .match_offset=123452 }, { .children_offset=0, .match_offset=77372 }, { .children_offset=24744, .match_offset=16076 }, { .children_offset=24747, .match_offset=20467 }, { .children_offset=24749, .match_offset=0 }, { .children_offset=24751, .match_offset=0 }, { .children_offset=0, .match_offset=61933 }, { .children_offset=24753, .match_offset=0 }, { .children_offset=24755, .match_offset=0 }, { .children_offset=24757, .match_offset=0 }, { .children_offset=0, .match_offset=52267 }, { .children_offset=0, .match_offset=64211 }, { .children_offset=24759, .match_offset=0 }, { .children_offset=24764, .match_offset=0 }, { .children_offset=24766, .match_offset=0 }, { .children_offset=24768, .match_offset=0 }, { .children_offset=24770, .match_offset=0 }, { .children_offset=24772, .match_offset=0 }, { .children_offset=0, .match_offset=86714 }, { .children_offset=24774, .match_offset=0 }, { .children_offset=24777, .match_offset=0 }, { .children_offset=0, .match_offset=110296 }, { .children_offset=24779, .match_offset=0 }, { .children_offset=24781, .match_offset=0 }, { .children_offset=24783, .match_offset=130108 }, { .children_offset=24785, .match_offset=0 }, { .children_offset=24789, .match_offset=0 }, { .children_offset=24791, .match_offset=0 }, { .children_offset=24793, .match_offset=0 }, { .children_offset=24795, .match_offset=0 }, { .children_offset=24797, .match_offset=0 }, { .children_offset=0, .match_offset=72084 }, { .children_offset=24799, .match_offset=0 }, { .children_offset=24801, .match_offset=0 }, { .children_offset=24803, .match_offset=0 }, { .children_offset=24805, .match_offset=0 }, { .children_offset=0, .match_offset=73757 }, { .children_offset=24807, .match_offset=0 }, { .children_offset=24809, .match_offset=0 }, { .children_offset=24811, .match_offset=0 }, { .children_offset=0, .match_offset=43030 }, { .children_offset=24813, .match_offset=0 }, { .children_offset=24815, .match_offset=0 }, { .children_offset=0, .match_offset=5478 }, { .children_offset=24817, .match_offset=0 }, { .children_offset=24819, .match_offset=0 }, { .children_offset=24821, .match_offset=0 }, { .children_offset=24823, .match_offset=0 }, { .children_offset=24825, .match_offset=58833 }, { .children_offset=0, .match_offset=81982 }, { .children_offset=24827, .match_offset=125501 }, { .children_offset=24846, .match_offset=0 }, { .children_offset=0, .match_offset=38453 }, { .children_offset=0, .match_offset=43020 }, { .children_offset=0, .match_offset=65551 }, { .children_offset=24851, .match_offset=0 }, { .children_offset=0, .match_offset=90195 }, { .children_offset=24853, .match_offset=110919 }, { .children_offset=24855, .match_offset=0 }, { .children_offset=0, .match_offset=136251 }, { .children_offset=0, .match_offset=26420 }, { .children_offset=24857, .match_offset=0 }, { .children_offset=0, .match_offset=114273 }, { .children_offset=24859, .match_offset=0 }, { .children_offset=24861, .match_offset=0 }, { .children_offset=24863, .match_offset=0 }, { .children_offset=0, .match_offset=4899 }, { .children_offset=0, .match_offset=6352 }, { .children_offset=24865, .match_offset=8543 }, { .children_offset=24867, .match_offset=0 }, { .children_offset=0, .match_offset=15062 }, { .children_offset=24869, .match_offset=26422 }, { .children_offset=0, .match_offset=105801 }, { .children_offset=0, .match_offset=89851 }, { .children_offset=24872, .match_offset=0 }, { .children_offset=24875, .match_offset=0 }, { .children_offset=24877, .match_offset=84928 }, { .children_offset=24879, .match_offset=0 }, { .children_offset=0, .match_offset=42568 }, { .children_offset=0, .match_offset=27700 }, { .children_offset=24881, .match_offset=60006 }, { .children_offset=24883, .match_offset=0 }, { .children_offset=24885, .match_offset=0 }, { .children_offset=24887, .match_offset=0 }, { .children_offset=24889, .match_offset=0 }, { .children_offset=0, .match_offset=21385 }, { .children_offset=24891, .match_offset=35137 }, { .children_offset=0, .match_offset=45 }, { .children_offset=24896, .match_offset=0 }, { .children_offset=24898, .match_offset=0 }, { .children_offset=24900, .match_offset=0 }, { .children_offset=0, .match_offset=129307 }, { .children_offset=24902, .match_offset=0 }, { .children_offset=0, .match_offset=50713 }, { .children_offset=0, .match_offset=41859 }, { .children_offset=24904, .match_offset=77042 }, { .children_offset=0, .match_offset=6209 }, { .children_offset=24907, .match_offset=0 }, { .children_offset=0, .match_offset=67319 }, { .children_offset=24909, .match_offset=0 }, { .children_offset=24911, .match_offset=0 }, { .children_offset=24913, .match_offset=0 }, { .children_offset=24915, .match_offset=0 }, { .children_offset=0, .match_offset=88581 }, { .children_offset=24917, .match_offset=0 }, { .children_offset=24922, .match_offset=0 }, { .children_offset=24924, .match_offset=0 }, { .children_offset=24926, .match_offset=0 }, { .children_offset=0, .match_offset=72114 }, { .children_offset=24928, .match_offset=0 }, { .children_offset=24930, .match_offset=0 }, { .children_offset=0, .match_offset=134282 }, { .children_offset=24932, .match_offset=0 }, { .children_offset=24934, .match_offset=0 }, { .children_offset=24936, .match_offset=0 }, { .children_offset=0, .match_offset=40434 }, { .children_offset=24938, .match_offset=0 }, { .children_offset=24940, .match_offset=0 }, { .children_offset=0, .match_offset=25688 }, { .children_offset=24942, .match_offset=89832 }, { .children_offset=0, .match_offset=69 }, { .children_offset=24944, .match_offset=0 }, { .children_offset=24946, .match_offset=0 }, { .children_offset=24948, .match_offset=0 }, { .children_offset=24950, .match_offset=0 }, { .children_offset=24952, .match_offset=0 }, { .children_offset=0, .match_offset=77199 }, { .children_offset=24954, .match_offset=40910 }, { .children_offset=24956, .match_offset=0 }, { .children_offset=0, .match_offset=8922 }, { .children_offset=0, .match_offset=38484 }, { .children_offset=24958, .match_offset=134967 }, { .children_offset=24964, .match_offset=77800 }, { .children_offset=0, .match_offset=66414 }, { .children_offset=0, .match_offset=38534 }, { .children_offset=24968, .match_offset=0 }, { .children_offset=24970, .match_offset=0 }, { .children_offset=0, .match_offset=125718 }, { .children_offset=24972, .match_offset=37878 }, { .children_offset=0, .match_offset=21159 }, { .children_offset=0, .match_offset=87456 }, { .children_offset=24976, .match_offset=0 }, { .children_offset=0, .match_offset=85819 }, { .children_offset=0, .match_offset=119593 }, { .children_offset=24978, .match_offset=33713 }, { .children_offset=0, .match_offset=60677 }, { .children_offset=0, .match_offset=111142 }, { .children_offset=0, .match_offset=37963 }, { .children_offset=24981, .match_offset=0 }, { .children_offset=24985, .match_offset=56583 }, { .children_offset=24987, .match_offset=0 }, { .children_offset=24989, .match_offset=0 }, { .children_offset=24991, .match_offset=0 }, { .children_offset=24994, .match_offset=6205 }, { .children_offset=24996, .match_offset=0 }, { .children_offset=0, .match_offset=122738 }, { .children_offset=24998, .match_offset=0 }, { .children_offset=25001, .match_offset=0 }, { .children_offset=25003, .match_offset=0 }, { .children_offset=25005, .match_offset=0 }, { .children_offset=25007, .match_offset=0 }, { .children_offset=25009, .match_offset=0 }, { .children_offset=25011, .match_offset=0 }, { .children_offset=25013, .match_offset=0 }, { .children_offset=0, .match_offset=38565 }, { .children_offset=25015, .match_offset=0 }, { .children_offset=25017, .match_offset=0 }, { .children_offset=25019, .match_offset=0 }, { .children_offset=25021, .match_offset=0 }, { .children_offset=25023, .match_offset=0 }, { .children_offset=25025, .match_offset=0 }, { .children_offset=25027, .match_offset=0 }, { .children_offset=0, .match_offset=27953 }, { .children_offset=25029, .match_offset=0 }, { .children_offset=25031, .match_offset=0 }, { .children_offset=25033, .match_offset=0 }, { .children_offset=25035, .match_offset=0 }, { .children_offset=25037, .match_offset=0 }, { .children_offset=0, .match_offset=33791 }, { .children_offset=25039, .match_offset=0 }, { .children_offset=25041, .match_offset=0 }, { .children_offset=25043, .match_offset=0 }, { .children_offset=0, .match_offset=132182 }, { .children_offset=25045, .match_offset=0 }, { .children_offset=25049, .match_offset=0 }, { .children_offset=0, .match_offset=10916 }, { .children_offset=0, .match_offset=58964 }, { .children_offset=25051, .match_offset=0 }, { .children_offset=0, .match_offset=136013 }, { .children_offset=0, .match_offset=69143 }, { .children_offset=25053, .match_offset=111399 }, { .children_offset=25074, .match_offset=0 }, { .children_offset=0, .match_offset=58727 }, { .children_offset=0, .match_offset=73511 }, { .children_offset=0, .match_offset=124685 }, { .children_offset=0, .match_offset=123698 }, { .children_offset=0, .match_offset=71582 }, { .children_offset=0, .match_offset=44987 }, { .children_offset=0, .match_offset=38553 }, { .children_offset=0, .match_offset=5087 }, { .children_offset=0, .match_offset=65405 }, { .children_offset=0, .match_offset=37908 }, { .children_offset=25082, .match_offset=61124 }, { .children_offset=0, .match_offset=114217 }, { .children_offset=0, .match_offset=109608 }, { .children_offset=0, .match_offset=39196 }, { .children_offset=25085, .match_offset=0 }, { .children_offset=0, .match_offset=16666 }, { .children_offset=0, .match_offset=65171 }, { .children_offset=0, .match_offset=71825 }, { .children_offset=25087, .match_offset=25435 }, { .children_offset=25090, .match_offset=0 }, { .children_offset=25092, .match_offset=0 }, { .children_offset=25094, .match_offset=0 }, { .children_offset=25096, .match_offset=0 }, { .children_offset=25098, .match_offset=0 }, { .children_offset=25100, .match_offset=0 }, { .children_offset=0, .match_offset=81860 }, { .children_offset=0, .match_offset=126394 }, { .children_offset=25102, .match_offset=46887 }, { .children_offset=0, .match_offset=34388 }, { .children_offset=0, .match_offset=131012 }, { .children_offset=0, .match_offset=123147 }, { .children_offset=0, .match_offset=123712 }, { .children_offset=0, .match_offset=89123 }, { .children_offset=0, .match_offset=55501 }, { .children_offset=25107, .match_offset=38359 }, { .children_offset=25112, .match_offset=0 }, { .children_offset=25114, .match_offset=0 }, { .children_offset=25116, .match_offset=0 }, { .children_offset=0, .match_offset=46679 }, { .children_offset=0, .match_offset=11722 }, { .children_offset=25118, .match_offset=0 }, { .children_offset=25121, .match_offset=0 }, { .children_offset=0, .match_offset=109430 }, { .children_offset=25123, .match_offset=0 }, { .children_offset=25125, .match_offset=0 }, { .children_offset=25127, .match_offset=0 }, { .children_offset=25129, .match_offset=0 }, { .children_offset=0, .match_offset=86801 }, { .children_offset=0, .match_offset=59035 }, { .children_offset=25131, .match_offset=0 }, { .children_offset=25134, .match_offset=0 }, { .children_offset=25136, .match_offset=0 }, { .children_offset=0, .match_offset=117537 }, { .children_offset=25138, .match_offset=0 }, { .children_offset=0, .match_offset=71545 }, { .children_offset=0, .match_offset=10852 }, { .children_offset=25140, .match_offset=0 }, { .children_offset=0, .match_offset=68750 }, { .children_offset=0, .match_offset=133568 }, { .children_offset=0, .match_offset=44909 }, { .children_offset=25142, .match_offset=0 }, { .children_offset=25144, .match_offset=0 }, { .children_offset=0, .match_offset=43242 }, { .children_offset=25146, .match_offset=113341 }, { .children_offset=0, .match_offset=2222 }, { .children_offset=25148, .match_offset=114626 }, { .children_offset=25157, .match_offset=6898 }, { .children_offset=0, .match_offset=130146 }, { .children_offset=25161, .match_offset=0 }, { .children_offset=0, .match_offset=55208 }, { .children_offset=0, .match_offset=5277 }, { .children_offset=0, .match_offset=21331 }, { .children_offset=25163, .match_offset=16211 }, { .children_offset=0, .match_offset=52249 }, { .children_offset=25165, .match_offset=129939 }, { .children_offset=0, .match_offset=132898 }, { .children_offset=0, .match_offset=102657 }, { .children_offset=25167, .match_offset=26475 }, { .children_offset=0, .match_offset=72255 }, { .children_offset=25169, .match_offset=0 }, { .children_offset=25171, .match_offset=0 }, { .children_offset=25173, .match_offset=0 }, { .children_offset=0, .match_offset=37414 }, { .children_offset=0, .match_offset=124612 }, { .children_offset=25175, .match_offset=0 }, { .children_offset=25182, .match_offset=104475 }, { .children_offset=0, .match_offset=25391 }, { .children_offset=25184, .match_offset=35884 }, { .children_offset=0, .match_offset=1483 }, { .children_offset=0, .match_offset=28507 }, { .children_offset=0, .match_offset=55945 }, { .children_offset=0, .match_offset=7076 }, { .children_offset=25186, .match_offset=0 }, { .children_offset=25190, .match_offset=81924 }, { .children_offset=0, .match_offset=60998 }, { .children_offset=25192, .match_offset=38715 }, { .children_offset=0, .match_offset=109117 }, { .children_offset=0, .match_offset=62311 }, { .children_offset=25194, .match_offset=0 }, { .children_offset=25201, .match_offset=34900 }, { .children_offset=0, .match_offset=134398 }, { .children_offset=25204, .match_offset=0 }, { .children_offset=25206, .match_offset=0 }, { .children_offset=25208, .match_offset=0 }, { .children_offset=0, .match_offset=81856 }, { .children_offset=25210, .match_offset=6767 }, { .children_offset=0, .match_offset=11541 }, { .children_offset=0, .match_offset=26478 }, { .children_offset=25212, .match_offset=0 }, { .children_offset=25214, .match_offset=0 }, { .children_offset=25216, .match_offset=0 }, { .children_offset=25218, .match_offset=0 }, { .children_offset=0, .match_offset=126561 }, { .children_offset=0, .match_offset=80570 }, { .children_offset=25220, .match_offset=6666 }, { .children_offset=25222, .match_offset=0 }, { .children_offset=25224, .match_offset=0 }, { .children_offset=0, .match_offset=90636 }, { .children_offset=25226, .match_offset=0 }, { .children_offset=25257, .match_offset=0 }, { .children_offset=25260, .match_offset=0 }, { .children_offset=25262, .match_offset=0 }, { .children_offset=25264, .match_offset=0 }, { .children_offset=25266, .match_offset=0 }, { .children_offset=25268, .match_offset=0 }, { .children_offset=0, .match_offset=124999 }, { .children_offset=25270, .match_offset=0 }, { .children_offset=25272, .match_offset=0 }, { .children_offset=25274, .match_offset=0 }, { .children_offset=0, .match_offset=40858 }, { .children_offset=25276, .match_offset=0 }, { .children_offset=25278, .match_offset=0 }, { .children_offset=0, .match_offset=123130 }, { .children_offset=25287, .match_offset=61071 }, { .children_offset=0, .match_offset=27566 }, { .children_offset=0, .match_offset=6550 }, { .children_offset=0, .match_offset=61137 }, { .children_offset=0, .match_offset=34278 }, { .children_offset=25289, .match_offset=34020 }, { .children_offset=0, .match_offset=103085 }, { .children_offset=0, .match_offset=127299 }, { .children_offset=0, .match_offset=45978 }, { .children_offset=0, .match_offset=23032 }, { .children_offset=0, .match_offset=87813 }, { .children_offset=0, .match_offset=64404 }, { .children_offset=0, .match_offset=123104 }, { .children_offset=25291, .match_offset=73275 }, { .children_offset=25316, .match_offset=114236 }, { .children_offset=0, .match_offset=12683 }, { .children_offset=25321, .match_offset=1901 }, { .children_offset=0, .match_offset=14975 }, { .children_offset=25323, .match_offset=20437 }, { .children_offset=25325, .match_offset=0 }, { .children_offset=0, .match_offset=126386 }, { .children_offset=25327, .match_offset=0 }, { .children_offset=0, .match_offset=133566 }, { .children_offset=25329, .match_offset=60466 }, { .children_offset=25334, .match_offset=0 }, { .children_offset=0, .match_offset=100898 }, { .children_offset=25336, .match_offset=0 }, { .children_offset=0, .match_offset=63022 }, { .children_offset=25338, .match_offset=0 }, { .children_offset=25340, .match_offset=0 }, { .children_offset=25342, .match_offset=116014 }, { .children_offset=25344, .match_offset=0 }, { .children_offset=25346, .match_offset=0 }, { .children_offset=25348, .match_offset=0 }, { .children_offset=25350, .match_offset=0 }, { .children_offset=25352, .match_offset=0 }, { .children_offset=25354, .match_offset=0 }, { .children_offset=0, .match_offset=26436 }, { .children_offset=25356, .match_offset=0 }, { .children_offset=0, .match_offset=86711 }, { .children_offset=25359, .match_offset=0 }, { .children_offset=25361, .match_offset=0 }, { .children_offset=25363, .match_offset=0 }, { .children_offset=25365, .match_offset=0 }, { .children_offset=0, .match_offset=42461 }, { .children_offset=25367, .match_offset=0 }, { .children_offset=0, .match_offset=59268 }, { .children_offset=0, .match_offset=131546 }, { .children_offset=25372, .match_offset=0 }, { .children_offset=25374, .match_offset=0 }, { .children_offset=25376, .match_offset=0 }, { .children_offset=25378, .match_offset=0 }, { .children_offset=0, .match_offset=78412 }, { .children_offset=25380, .match_offset=0 }, { .children_offset=25382, .match_offset=0 }, { .children_offset=0, .match_offset=5279 }, { .children_offset=25384, .match_offset=0 }, { .children_offset=0, .match_offset=112714 }, { .children_offset=25386, .match_offset=59362 }, { .children_offset=25389, .match_offset=0 }, { .children_offset=25391, .match_offset=0 }, { .children_offset=25393, .match_offset=0 }, { .children_offset=25395, .match_offset=0 }, { .children_offset=0, .match_offset=135815 }, { .children_offset=0, .match_offset=104042 }, { .children_offset=25397, .match_offset=0 }, { .children_offset=25401, .match_offset=0 }, { .children_offset=0, .match_offset=59503 }, { .children_offset=0, .match_offset=125136 }, { .children_offset=25404, .match_offset=0 }, { .children_offset=25406, .match_offset=0 }, { .children_offset=0, .match_offset=43826 }, { .children_offset=25408, .match_offset=109747 }, { .children_offset=0, .match_offset=44964 }, { .children_offset=25410, .match_offset=54408 }, { .children_offset=25412, .match_offset=0 }, { .children_offset=25414, .match_offset=0 }, { .children_offset=0, .match_offset=25191 }, { .children_offset=25416, .match_offset=30343 }, { .children_offset=25418, .match_offset=0 }, { .children_offset=0, .match_offset=122699 }, { .children_offset=25420, .match_offset=0 }, { .children_offset=25422, .match_offset=0 }, { .children_offset=25424, .match_offset=0 }, { .children_offset=25426, .match_offset=0 }, { .children_offset=25428, .match_offset=0 }, { .children_offset=25430, .match_offset=0 }, { .children_offset=25432, .match_offset=0 }, { .children_offset=0, .match_offset=58863 }, { .children_offset=25434, .match_offset=0 }, { .children_offset=25439, .match_offset=0 }, { .children_offset=25448, .match_offset=0 }, { .children_offset=25457, .match_offset=0 }, { .children_offset=0, .match_offset=116218 }, { .children_offset=25459, .match_offset=0 }, { .children_offset=0, .match_offset=6732 }, { .children_offset=0, .match_offset=23778 }, { .children_offset=0, .match_offset=10302 }, { .children_offset=25463, .match_offset=0 }, { .children_offset=0, .match_offset=21155 }, { .children_offset=25465, .match_offset=0 }, { .children_offset=0, .match_offset=72886 }, { .children_offset=0, .match_offset=65070 }, { .children_offset=25468, .match_offset=0 }, { .children_offset=0, .match_offset=72884 }, { .children_offset=25470, .match_offset=0 }, { .children_offset=0, .match_offset=111070 }, { .children_offset=25472, .match_offset=0 }, { .children_offset=0, .match_offset=61237 }, { .children_offset=0, .match_offset=20235 }, { .children_offset=25475, .match_offset=0 }, { .children_offset=0, .match_offset=38126 }, { .children_offset=25477, .match_offset=0 }, { .children_offset=25480, .match_offset=0 }, { .children_offset=0, .match_offset=40625 }, { .children_offset=25482, .match_offset=0 }, { .children_offset=0, .match_offset=111391 }, { .children_offset=25484, .match_offset=0 }, { .children_offset=25489, .match_offset=0 }, { .children_offset=0, .match_offset=68852 }, { .children_offset=0, .match_offset=71904 }, { .children_offset=25492, .match_offset=0 }, { .children_offset=0, .match_offset=11572 }, { .children_offset=0, .match_offset=128025 }, { .children_offset=0, .match_offset=90009 }, { .children_offset=25496, .match_offset=0 }, { .children_offset=0, .match_offset=25395 }, { .children_offset=25498, .match_offset=0 }, { .children_offset=0, .match_offset=39081 }, { .children_offset=0, .match_offset=115768 }, { .children_offset=25501, .match_offset=0 }, { .children_offset=25505, .match_offset=0 }, { .children_offset=0, .match_offset=109246 }, { .children_offset=0, .match_offset=30948 }, { .children_offset=0, .match_offset=32988 }, { .children_offset=25509, .match_offset=0 }, { .children_offset=0, .match_offset=26927 }, { .children_offset=0, .match_offset=26393 }, { .children_offset=25512, .match_offset=0 }, { .children_offset=0, .match_offset=45283 }, { .children_offset=25514, .match_offset=0 }, { .children_offset=25520, .match_offset=0 }, { .children_offset=0, .match_offset=103682 }, { .children_offset=0, .match_offset=31055 }, { .children_offset=25523, .match_offset=0 }, { .children_offset=0, .match_offset=78464 }, { .children_offset=0, .match_offset=5627 }, { .children_offset=25526, .match_offset=0 }, { .children_offset=0, .match_offset=68878 }, { .children_offset=25528, .match_offset=0 }, { .children_offset=0, .match_offset=62575 }, { .children_offset=25530, .match_offset=0 }, { .children_offset=0, .match_offset=15954 }, { .children_offset=0, .match_offset=11959 }, { .children_offset=0, .match_offset=42946 }, { .children_offset=0, .match_offset=129988 }, { .children_offset=25535, .match_offset=0 }, { .children_offset=25537, .match_offset=0 }, { .children_offset=0, .match_offset=50316 }, { .children_offset=25539, .match_offset=0 }, { .children_offset=25545, .match_offset=0 }, { .children_offset=0, .match_offset=58778 }, { .children_offset=25547, .match_offset=0 }, { .children_offset=0, .match_offset=43806 }, { .children_offset=25549, .match_offset=0 }, { .children_offset=0, .match_offset=27519 }, { .children_offset=25551, .match_offset=0 }, { .children_offset=0, .match_offset=90583 }, { .children_offset=25553, .match_offset=0 }, { .children_offset=0, .match_offset=125563 }, { .children_offset=25555, .match_offset=0 }, { .children_offset=25558, .match_offset=0 }, { .children_offset=0, .match_offset=63097 }, { .children_offset=25560, .match_offset=0 }, { .children_offset=0, .match_offset=121982 }, { .children_offset=0, .match_offset=77039 }, { .children_offset=25562, .match_offset=76985 }, { .children_offset=25564, .match_offset=0 }, { .children_offset=0, .match_offset=134218 }, { .children_offset=25566, .match_offset=0 }, { .children_offset=25568, .match_offset=0 }, { .children_offset=25570, .match_offset=0 }, { .children_offset=25572, .match_offset=0 }, { .children_offset=25574, .match_offset=0 }, { .children_offset=25576, .match_offset=0 }, { .children_offset=25578, .match_offset=0 }, { .children_offset=0, .match_offset=78870 }, { .children_offset=0, .match_offset=57282 }, { .children_offset=25580, .match_offset=63535 }, { .children_offset=25586, .match_offset=0 }, { .children_offset=25588, .match_offset=0 }, { .children_offset=0, .match_offset=90515 }, { .children_offset=25590, .match_offset=0 }, { .children_offset=25592, .match_offset=0 }, { .children_offset=0, .match_offset=25805 }, { .children_offset=25594, .match_offset=1925 }, { .children_offset=0, .match_offset=25805 }, { .children_offset=25596, .match_offset=123541 }, { .children_offset=25598, .match_offset=28054 }, { .children_offset=0, .match_offset=63772 }, { .children_offset=0, .match_offset=43017 }, { .children_offset=25600, .match_offset=43924 }, { .children_offset=0, .match_offset=109769 }, { .children_offset=25605, .match_offset=88734 }, { .children_offset=0, .match_offset=13059 }, { .children_offset=25607, .match_offset=9939 }, { .children_offset=0, .match_offset=58840 }, { .children_offset=25611, .match_offset=0 }, { .children_offset=0, .match_offset=13855 }, { .children_offset=25613, .match_offset=0 }, { .children_offset=25615, .match_offset=0 }, { .children_offset=25617, .match_offset=0 }, { .children_offset=0, .match_offset=67306 }, { .children_offset=25619, .match_offset=0 }, { .children_offset=25621, .match_offset=0 }, { .children_offset=25623, .match_offset=0 }, { .children_offset=0, .match_offset=109722 }, { .children_offset=0, .match_offset=25199 }, { .children_offset=25625, .match_offset=34685 }, { .children_offset=25628, .match_offset=0 }, { .children_offset=0, .match_offset=78329 }, { .children_offset=25630, .match_offset=0 }, { .children_offset=25632, .match_offset=0 }, { .children_offset=25634, .match_offset=0 }, { .children_offset=25636, .match_offset=0 }, { .children_offset=25638, .match_offset=0 }, { .children_offset=25640, .match_offset=0 }, { .children_offset=0, .match_offset=43826 }, { .children_offset=25642, .match_offset=41857 }, { .children_offset=25644, .match_offset=0 }, { .children_offset=0, .match_offset=131840 }, { .children_offset=25646, .match_offset=0 }, { .children_offset=25651, .match_offset=0 }, { .children_offset=25653, .match_offset=6029 }, { .children_offset=0, .match_offset=58773 }, { .children_offset=25656, .match_offset=0 }, { .children_offset=0, .match_offset=5217 }, { .children_offset=0, .match_offset=14396 }, { .children_offset=25658, .match_offset=55404 }, { .children_offset=25666, .match_offset=114230 }, { .children_offset=25668, .match_offset=0 }, { .children_offset=0, .match_offset=37934 }, { .children_offset=25670, .match_offset=0 }, { .children_offset=0, .match_offset=109303 }, { .children_offset=25672, .match_offset=0 }, { .children_offset=0, .match_offset=9929 }, { .children_offset=25674, .match_offset=0 }, { .children_offset=0, .match_offset=38133 }, { .children_offset=25676, .match_offset=0 }, { .children_offset=0, .match_offset=109351 }, { .children_offset=25678, .match_offset=0 }, { .children_offset=25680, .match_offset=0 }, { .children_offset=0, .match_offset=14445 }, { .children_offset=25682, .match_offset=0 }, { .children_offset=0, .match_offset=16097 }, { .children_offset=25684, .match_offset=0 }, { .children_offset=25686, .match_offset=0 }, { .children_offset=25688, .match_offset=0 }, { .children_offset=25690, .match_offset=0 }, { .children_offset=25692, .match_offset=0 }, { .children_offset=0, .match_offset=35773 }, { .children_offset=25694, .match_offset=20906 }, { .children_offset=25696, .match_offset=5061 }, { .children_offset=0, .match_offset=58378 }, { .children_offset=25698, .match_offset=27168 }, { .children_offset=25702, .match_offset=0 }, { .children_offset=25704, .match_offset=0 }, { .children_offset=0, .match_offset=4901 }, { .children_offset=25706, .match_offset=103325 }, { .children_offset=25708, .match_offset=0 }, { .children_offset=25710, .match_offset=0 }, { .children_offset=0, .match_offset=12602 }, { .children_offset=25712, .match_offset=0 }, { .children_offset=0, .match_offset=28446 }, { .children_offset=25715, .match_offset=31160 }, { .children_offset=25717, .match_offset=0 }, { .children_offset=25719, .match_offset=0 }, { .children_offset=0, .match_offset=63418 }, { .children_offset=25721, .match_offset=30479 }, { .children_offset=25726, .match_offset=0 }, { .children_offset=25728, .match_offset=0 }, { .children_offset=25730, .match_offset=0 }, { .children_offset=25732, .match_offset=0 }, { .children_offset=0, .match_offset=27763 }, { .children_offset=0, .match_offset=10308 }, { .children_offset=25734, .match_offset=0 }, { .children_offset=25736, .match_offset=0 }, { .children_offset=0, .match_offset=109747 }, { .children_offset=25738, .match_offset=0 }, { .children_offset=0, .match_offset=112707 }, { .children_offset=0, .match_offset=102377 }, { .children_offset=0, .match_offset=30954 }, { .children_offset=25740, .match_offset=134239 }, { .children_offset=25742, .match_offset=0 }, { .children_offset=25745, .match_offset=0 }, { .children_offset=25747, .match_offset=0 }, { .children_offset=0, .match_offset=126613 }, { .children_offset=0, .match_offset=33928 }, { .children_offset=25749, .match_offset=0 }, { .children_offset=0, .match_offset=134603 }, { .children_offset=25751, .match_offset=0 }, { .children_offset=25755, .match_offset=0 }, { .children_offset=25757, .match_offset=0 }, { .children_offset=0, .match_offset=125631 }, { .children_offset=25759, .match_offset=0 }, { .children_offset=25761, .match_offset=0 }, { .children_offset=0, .match_offset=6792 }, { .children_offset=25763, .match_offset=0 }, { .children_offset=25766, .match_offset=0 }, { .children_offset=25768, .match_offset=0 }, { .children_offset=0, .match_offset=28221 }, { .children_offset=0, .match_offset=49749 }, { .children_offset=25771, .match_offset=0 }, { .children_offset=0, .match_offset=27162 }, { .children_offset=25774, .match_offset=0 }, { .children_offset=25776, .match_offset=0 }, { .children_offset=0, .match_offset=116290 }, { .children_offset=0, .match_offset=56581 }, { .children_offset=25779, .match_offset=0 }, { .children_offset=25785, .match_offset=0 }, { .children_offset=25787, .match_offset=0 }, { .children_offset=25789, .match_offset=0 }, { .children_offset=0, .match_offset=124858 }, { .children_offset=25791, .match_offset=7590 }, { .children_offset=25794, .match_offset=0 }, { .children_offset=25796, .match_offset=0 }, { .children_offset=0, .match_offset=114729 }, { .children_offset=25798, .match_offset=0 }, { .children_offset=0, .match_offset=133098 }, { .children_offset=0, .match_offset=126443 }, { .children_offset=25800, .match_offset=0 }, { .children_offset=0, .match_offset=28221 }, { .children_offset=0, .match_offset=55762 }, { .children_offset=25802, .match_offset=86062 }, { .children_offset=0, .match_offset=73232 }, { .children_offset=25809, .match_offset=0 }, { .children_offset=0, .match_offset=131047 }, { .children_offset=25811, .match_offset=0 }, { .children_offset=0, .match_offset=58734 }, { .children_offset=25813, .match_offset=0 }, { .children_offset=25815, .match_offset=0 }, { .children_offset=25817, .match_offset=130037 }, { .children_offset=0, .match_offset=67380 }, { .children_offset=25819, .match_offset=0 }, { .children_offset=25822, .match_offset=0 }, { .children_offset=25824, .match_offset=0 }, { .children_offset=25826, .match_offset=0 }, { .children_offset=0, .match_offset=77177 }, { .children_offset=25828, .match_offset=0 }, { .children_offset=25830, .match_offset=0 }, { .children_offset=25832, .match_offset=0 }, { .children_offset=25834, .match_offset=0 }, { .children_offset=0, .match_offset=72538 }, { .children_offset=25836, .match_offset=0 }, { .children_offset=0, .match_offset=60439 }, { .children_offset=25838, .match_offset=67587 }, { .children_offset=25858, .match_offset=0 }, { .children_offset=25862, .match_offset=34621 }, { .children_offset=25865, .match_offset=0 }, { .children_offset=0, .match_offset=9013 }, { .children_offset=25867, .match_offset=0 }, { .children_offset=25869, .match_offset=0 }, { .children_offset=0, .match_offset=122384 }, { .children_offset=25871, .match_offset=62839 }, { .children_offset=0, .match_offset=77406 }, { .children_offset=25873, .match_offset=0 }, { .children_offset=25875, .match_offset=0 }, { .children_offset=25877, .match_offset=0 }, { .children_offset=0, .match_offset=40902 }, { .children_offset=25879, .match_offset=0 }, { .children_offset=25881, .match_offset=0 }, { .children_offset=25883, .match_offset=0 }, { .children_offset=0, .match_offset=43461 }, { .children_offset=25885, .match_offset=42941 }, { .children_offset=25889, .match_offset=0 }, { .children_offset=0, .match_offset=71514 }, { .children_offset=0, .match_offset=45928 }, { .children_offset=25891, .match_offset=0 }, { .children_offset=25893, .match_offset=0 }, { .children_offset=25895, .match_offset=0 }, { .children_offset=25897, .match_offset=0 }, { .children_offset=0, .match_offset=112695 }, { .children_offset=25899, .match_offset=0 }, { .children_offset=25901, .match_offset=46238 }, { .children_offset=25914, .match_offset=0 }, { .children_offset=25921, .match_offset=0 }, { .children_offset=25923, .match_offset=0 }, { .children_offset=25925, .match_offset=0 }, { .children_offset=25927, .match_offset=0 }, { .children_offset=25929, .match_offset=0 }, { .children_offset=0, .match_offset=73241 }, { .children_offset=25931, .match_offset=0 }, { .children_offset=25933, .match_offset=0 }, { .children_offset=25935, .match_offset=0 }, { .children_offset=25937, .match_offset=102659 }, { .children_offset=25939, .match_offset=0 }, { .children_offset=0, .match_offset=22852 }, { .children_offset=25941, .match_offset=0 }, { .children_offset=25943, .match_offset=0 }, { .children_offset=25945, .match_offset=0 }, { .children_offset=25947, .match_offset=0 }, { .children_offset=25949, .match_offset=0 }, { .children_offset=25951, .match_offset=0 }, { .children_offset=0, .match_offset=1525 }, { .children_offset=25953, .match_offset=0 }, { .children_offset=25955, .match_offset=0 }, { .children_offset=25957, .match_offset=0 }, { .children_offset=25959, .match_offset=0 }, { .children_offset=25961, .match_offset=0 }, { .children_offset=25963, .match_offset=0 }, { .children_offset=25965, .match_offset=0 }, { .children_offset=0, .match_offset=20483 }, { .children_offset=25967, .match_offset=0 }, { .children_offset=25971, .match_offset=0 }, { .children_offset=25973, .match_offset=0 }, { .children_offset=25975, .match_offset=0 }, { .children_offset=25977, .match_offset=0 }, { .children_offset=0, .match_offset=65129 }, { .children_offset=25979, .match_offset=0 }, { .children_offset=25981, .match_offset=0 }, { .children_offset=0, .match_offset=109351 }, { .children_offset=25983, .match_offset=0 }, { .children_offset=25985, .match_offset=0 }, { .children_offset=0, .match_offset=45006 }, { .children_offset=25987, .match_offset=0 }, { .children_offset=25989, .match_offset=0 }, { .children_offset=25991, .match_offset=0 }, { .children_offset=25993, .match_offset=0 }, { .children_offset=25995, .match_offset=0 }, { .children_offset=25997, .match_offset=0 }, { .children_offset=25999, .match_offset=0 }, { .children_offset=0, .match_offset=114595 }, { .children_offset=26001, .match_offset=0 }, { .children_offset=26004, .match_offset=0 }, { .children_offset=26006, .match_offset=0 }, { .children_offset=26008, .match_offset=0 }, { .children_offset=26010, .match_offset=0 }, { .children_offset=26012, .match_offset=0 }, { .children_offset=26014, .match_offset=0 }, { .children_offset=26016, .match_offset=0 }, { .children_offset=26018, .match_offset=0 }, { .children_offset=26020, .match_offset=0 }, { .children_offset=26022, .match_offset=0 }, { .children_offset=0, .match_offset=13855 }, { .children_offset=26024, .match_offset=0 }, { .children_offset=26026, .match_offset=0 }, { .children_offset=26028, .match_offset=0 }, { .children_offset=26030, .match_offset=12486 }, { .children_offset=26034, .match_offset=0 }, { .children_offset=26036, .match_offset=0 }, { .children_offset=0, .match_offset=114230 }, { .children_offset=26038, .match_offset=0 }, { .children_offset=26040, .match_offset=0 }, { .children_offset=26042, .match_offset=0 }, { .children_offset=26044, .match_offset=0 }, { .children_offset=26046, .match_offset=0 }, { .children_offset=26048, .match_offset=0 }, { .children_offset=26050, .match_offset=0 }, { .children_offset=26052, .match_offset=0 }, { .children_offset=26054, .match_offset=0 }, { .children_offset=0, .match_offset=116094 }, { .children_offset=26056, .match_offset=0 }, { .children_offset=26058, .match_offset=0 }, { .children_offset=26060, .match_offset=0 }, { .children_offset=0, .match_offset=16097 }, { .children_offset=26062, .match_offset=0 }, { .children_offset=26064, .match_offset=0 }, { .children_offset=26066, .match_offset=0 }, { .children_offset=26068, .match_offset=0 }, { .children_offset=26070, .match_offset=0 }, { .children_offset=26072, .match_offset=0 }, { .children_offset=0, .match_offset=133098 }, { .children_offset=26074, .match_offset=0 }, { .children_offset=26076, .match_offset=0 }, { .children_offset=26079, .match_offset=0 }, { .children_offset=26081, .match_offset=0 }, { .children_offset=26083, .match_offset=0 }, { .children_offset=26085, .match_offset=0 }, { .children_offset=26087, .match_offset=0 }, { .children_offset=26089, .match_offset=0 }, { .children_offset=26091, .match_offset=0 }, { .children_offset=26093, .match_offset=0 }, { .children_offset=26095, .match_offset=0 }, { .children_offset=26097, .match_offset=0 }, { .children_offset=0, .match_offset=118558 }, { .children_offset=26099, .match_offset=0 }, { .children_offset=26101, .match_offset=0 }, { .children_offset=26104, .match_offset=0 }, { .children_offset=26106, .match_offset=0 }, { .children_offset=26108, .match_offset=0 }, { .children_offset=26110, .match_offset=0 }, { .children_offset=26112, .match_offset=0 }, { .children_offset=26114, .match_offset=0 }, { .children_offset=26116, .match_offset=0 }, { .children_offset=26118, .match_offset=0 }, { .children_offset=0, .match_offset=26769 }, { .children_offset=26120, .match_offset=0 }, { .children_offset=26122, .match_offset=0 }, { .children_offset=26124, .match_offset=0 }, { .children_offset=26126, .match_offset=0 }, { .children_offset=26128, .match_offset=0 }, { .children_offset=26130, .match_offset=25928 }, { .children_offset=26132, .match_offset=0 }, { .children_offset=26134, .match_offset=0 }, { .children_offset=0, .match_offset=77849 }, { .children_offset=26136, .match_offset=0 }, { .children_offset=26138, .match_offset=0 }, { .children_offset=26140, .match_offset=0 }, { .children_offset=26142, .match_offset=0 }, { .children_offset=0, .match_offset=46821 }, { .children_offset=26144, .match_offset=0 }, { .children_offset=26146, .match_offset=0 }, { .children_offset=26148, .match_offset=0 }, { .children_offset=26150, .match_offset=0 }, { .children_offset=26152, .match_offset=0 }, { .children_offset=26154, .match_offset=0 }, { .children_offset=26156, .match_offset=0 }, { .children_offset=26159, .match_offset=0 }, { .children_offset=26161, .match_offset=0 }, { .children_offset=26163, .match_offset=0 }, { .children_offset=0, .match_offset=136037 }, { .children_offset=26165, .match_offset=0 }, { .children_offset=0, .match_offset=34561 }, { .children_offset=26167, .match_offset=0 }, { .children_offset=26169, .match_offset=0 }, { .children_offset=26171, .match_offset=0 }, { .children_offset=26173, .match_offset=0 }, { .children_offset=26175, .match_offset=0 }, { .children_offset=26177, .match_offset=0 }, { .children_offset=26179, .match_offset=0 }, { .children_offset=26181, .match_offset=0 }, { .children_offset=26183, .match_offset=0 }, { .children_offset=0, .match_offset=125164 }, { .children_offset=26185, .match_offset=0 }, { .children_offset=26187, .match_offset=0 }, { .children_offset=26189, .match_offset=0 }, { .children_offset=26191, .match_offset=0 }, { .children_offset=26193, .match_offset=0 }, { .children_offset=26198, .match_offset=0 }, { .children_offset=26200, .match_offset=0 }, { .children_offset=26202, .match_offset=0 }, { .children_offset=26204, .match_offset=0 }, { .children_offset=26206, .match_offset=55793 }, { .children_offset=0, .match_offset=116094 }, { .children_offset=26208, .match_offset=0 }, { .children_offset=26210, .match_offset=0 }, { .children_offset=26212, .match_offset=0 }, { .children_offset=26214, .match_offset=0 }, { .children_offset=26216, .match_offset=0 }, { .children_offset=26218, .match_offset=0 }, { .children_offset=26220, .match_offset=0 }, { .children_offset=0, .match_offset=85365 }, { .children_offset=26222, .match_offset=0 }, { .children_offset=26224, .match_offset=0 }, { .children_offset=26226, .match_offset=0 }, { .children_offset=26228, .match_offset=0 }, { .children_offset=26230, .match_offset=0 }, { .children_offset=26232, .match_offset=0 }, { .children_offset=26234, .match_offset=0 }, { .children_offset=26236, .match_offset=0 }, { .children_offset=26238, .match_offset=0 }, { .children_offset=0, .match_offset=103926 }, { .children_offset=26240, .match_offset=0 }, { .children_offset=26242, .match_offset=0 }, { .children_offset=26244, .match_offset=0 }, { .children_offset=26246, .match_offset=0 }, { .children_offset=26248, .match_offset=0 }, { .children_offset=0, .match_offset=113990 }, { .children_offset=26250, .match_offset=0 }, { .children_offset=26254, .match_offset=0 }, { .children_offset=26256, .match_offset=55847 }, { .children_offset=26259, .match_offset=0 }, { .children_offset=26261, .match_offset=0 }, { .children_offset=26263, .match_offset=0 }, { .children_offset=26265, .match_offset=0 }, { .children_offset=0, .match_offset=104200 }, { .children_offset=26267, .match_offset=0 }, { .children_offset=26269, .match_offset=0 }, { .children_offset=26271, .match_offset=0 }, { .children_offset=26273, .match_offset=0 }, { .children_offset=26275, .match_offset=0 }, { .children_offset=0, .match_offset=129617 }, { .children_offset=26277, .match_offset=0 }, { .children_offset=26279, .match_offset=0 }, { .children_offset=26281, .match_offset=0 }, { .children_offset=26283, .match_offset=0 }, { .children_offset=26285, .match_offset=0 }, { .children_offset=26287, .match_offset=0 }, { .children_offset=26289, .match_offset=0 }, { .children_offset=26291, .match_offset=0 }, { .children_offset=0, .match_offset=71960 }, { .children_offset=26293, .match_offset=0 }, { .children_offset=26295, .match_offset=0 }, { .children_offset=26297, .match_offset=0 }, { .children_offset=26299, .match_offset=0 }, { .children_offset=26301, .match_offset=0 }, { .children_offset=26303, .match_offset=0 }, { .children_offset=26305, .match_offset=77086 }, { .children_offset=26308, .match_offset=0 }, { .children_offset=26310, .match_offset=0 }, { .children_offset=0, .match_offset=50573 }, { .children_offset=26312, .match_offset=0 }, { .children_offset=26314, .match_offset=0 }, { .children_offset=26316, .match_offset=0 }, { .children_offset=26318, .match_offset=0 }, { .children_offset=0, .match_offset=135000 }, { .children_offset=26320, .match_offset=0 }, { .children_offset=26322, .match_offset=0 }, { .children_offset=26326, .match_offset=0 }, { .children_offset=26328, .match_offset=0 }, { .children_offset=26330, .match_offset=0 }, { .children_offset=26332, .match_offset=0 }, { .children_offset=26334, .match_offset=0 }, { .children_offset=26336, .match_offset=0 }, { .children_offset=26338, .match_offset=0 }, { .children_offset=26340, .match_offset=0 }, { .children_offset=26342, .match_offset=0 }, { .children_offset=0, .match_offset=50209 }, { .children_offset=26344, .match_offset=0 }, { .children_offset=26346, .match_offset=0 }, { .children_offset=26348, .match_offset=0 }, { .children_offset=26350, .match_offset=0 }, { .children_offset=26352, .match_offset=0 }, { .children_offset=26354, .match_offset=0 }, { .children_offset=26356, .match_offset=0 }, { .children_offset=26358, .match_offset=0 }, { .children_offset=0, .match_offset=109286 }, { .children_offset=26360, .match_offset=0 }, { .children_offset=26362, .match_offset=0 }, { .children_offset=26364, .match_offset=0 }, { .children_offset=26366, .match_offset=0 }, { .children_offset=26368, .match_offset=0 }, { .children_offset=26370, .match_offset=65195 }, { .children_offset=26372, .match_offset=0 }, { .children_offset=26374, .match_offset=0 }, { .children_offset=0, .match_offset=122464 }, { .children_offset=26376, .match_offset=0 }, { .children_offset=26378, .match_offset=0 }, { .children_offset=26380, .match_offset=0 }, { .children_offset=26382, .match_offset=0 }, { .children_offset=26384, .match_offset=0 }, { .children_offset=26386, .match_offset=34561 }, { .children_offset=26388, .match_offset=0 }, { .children_offset=26390, .match_offset=0 }, { .children_offset=0, .match_offset=90007 }, { .children_offset=26392, .match_offset=0 }, { .children_offset=26394, .match_offset=0 }, { .children_offset=26396, .match_offset=0 }, { .children_offset=26398, .match_offset=0 }, { .children_offset=0, .match_offset=30146 }, { .children_offset=26400, .match_offset=60289 }, { .children_offset=26404, .match_offset=0 }, { .children_offset=26406, .match_offset=0 }, { .children_offset=26408, .match_offset=0 }, { .children_offset=0, .match_offset=33308 }, { .children_offset=26410, .match_offset=0 }, { .children_offset=26412, .match_offset=0 }, { .children_offset=0, .match_offset=131394 }, { .children_offset=0, .match_offset=70863 }, { .children_offset=26414, .match_offset=61135 }, { .children_offset=26416, .match_offset=0 }, { .children_offset=26418, .match_offset=0 }, { .children_offset=0, .match_offset=50683 }, { .children_offset=0, .match_offset=114640 }, { .children_offset=26420, .match_offset=0 }, { .children_offset=26422, .match_offset=0 }, { .children_offset=0, .match_offset=45278 }, { .children_offset=26424, .match_offset=0 }, { .children_offset=26426, .match_offset=0 }, { .children_offset=0, .match_offset=117529 }, { .children_offset=0, .match_offset=133666 }, { .children_offset=26429, .match_offset=0 }, { .children_offset=26433, .match_offset=0 }, { .children_offset=0, .match_offset=37270 }, { .children_offset=26436, .match_offset=0 }, { .children_offset=26438, .match_offset=125058 }, { .children_offset=26441, .match_offset=0 }, { .children_offset=0, .match_offset=116448 }, { .children_offset=0, .match_offset=56932 }, { .children_offset=0, .match_offset=46784 }, { .children_offset=0, .match_offset=101028 }, { .children_offset=0, .match_offset=38145 }, { .children_offset=0, .match_offset=44973 }, { .children_offset=0, .match_offset=55842 }, { .children_offset=26449, .match_offset=0 }, { .children_offset=26451, .match_offset=0 }, { .children_offset=26453, .match_offset=0 }, { .children_offset=0, .match_offset=131868 }, { .children_offset=26455, .match_offset=0 }, { .children_offset=0, .match_offset=89639 }, { .children_offset=26457, .match_offset=0 }, { .children_offset=26459, .match_offset=0 }, { .children_offset=26461, .match_offset=0 }, { .children_offset=26463, .match_offset=0 }, { .children_offset=26465, .match_offset=0 }, { .children_offset=26467, .match_offset=0 }, { .children_offset=0, .match_offset=60315 }, { .children_offset=26469, .match_offset=46667 }, { .children_offset=26471, .match_offset=0 }, { .children_offset=26473, .match_offset=0 }, { .children_offset=26475, .match_offset=0 }, { .children_offset=0, .match_offset=102653 }, { .children_offset=26477, .match_offset=71675 }, { .children_offset=26479, .match_offset=0 }, { .children_offset=26481, .match_offset=0 }, { .children_offset=0, .match_offset=59173 }, { .children_offset=26483, .match_offset=122366 }, { .children_offset=0, .match_offset=20197 }, { .children_offset=26486, .match_offset=0 }, { .children_offset=26488, .match_offset=0 }, { .children_offset=26490, .match_offset=0 }, { .children_offset=26492, .match_offset=0 }, { .children_offset=0, .match_offset=56936 }, { .children_offset=26494, .match_offset=56936 }, { .children_offset=26500, .match_offset=0 }, { .children_offset=0, .match_offset=102922 }, { .children_offset=26502, .match_offset=0 }, { .children_offset=26504, .match_offset=0 }, { .children_offset=26506, .match_offset=68948 }, { .children_offset=26508, .match_offset=29213 }, { .children_offset=0, .match_offset=81988 }, { .children_offset=26510, .match_offset=0 }, { .children_offset=26512, .match_offset=0 }, { .children_offset=0, .match_offset=33453 }, { .children_offset=0, .match_offset=37500 }, { .children_offset=26514, .match_offset=34294 }, { .children_offset=26524, .match_offset=0 }, { .children_offset=26526, .match_offset=0 }, { .children_offset=26528, .match_offset=0 }, { .children_offset=26530, .match_offset=0 }, { .children_offset=0, .match_offset=56664 }, { .children_offset=26532, .match_offset=0 }, { .children_offset=26534, .match_offset=0 }, { .children_offset=26536, .match_offset=0 }, { .children_offset=26538, .match_offset=0 }, { .children_offset=26540, .match_offset=0 }, { .children_offset=0, .match_offset=109855 }, { .children_offset=26542, .match_offset=0 }, { .children_offset=26544, .match_offset=0 }, { .children_offset=0, .match_offset=30321 }, { .children_offset=26546, .match_offset=0 }, { .children_offset=26549, .match_offset=0 }, { .children_offset=26553, .match_offset=0 }, { .children_offset=26555, .match_offset=0 }, { .children_offset=0, .match_offset=114832 }, { .children_offset=26557, .match_offset=0 }, { .children_offset=26559, .match_offset=0 }, { .children_offset=26561, .match_offset=0 }, { .children_offset=0, .match_offset=7387 }, { .children_offset=26563, .match_offset=0 }, { .children_offset=26565, .match_offset=0 }, { .children_offset=26567, .match_offset=0 }, { .children_offset=26569, .match_offset=0 }, { .children_offset=26571, .match_offset=0 }, { .children_offset=26573, .match_offset=0 }, { .children_offset=26575, .match_offset=0 }, { .children_offset=26577, .match_offset=0 }, { .children_offset=26579, .match_offset=0 }, { .children_offset=0, .match_offset=114832 }, { .children_offset=0, .match_offset=60513 }, { .children_offset=26581, .match_offset=0 }, { .children_offset=26583, .match_offset=0 }, { .children_offset=26585, .match_offset=0 }, { .children_offset=26587, .match_offset=0 }, { .children_offset=26589, .match_offset=0 }, { .children_offset=26591, .match_offset=0 }, { .children_offset=26593, .match_offset=0 }, { .children_offset=26595, .match_offset=0 }, { .children_offset=0, .match_offset=20197 }, { .children_offset=26597, .match_offset=0 }, { .children_offset=26600, .match_offset=0 }, { .children_offset=26602, .match_offset=0 }, { .children_offset=26604, .match_offset=0 }, { .children_offset=26606, .match_offset=0 }, { .children_offset=26608, .match_offset=0 }, { .children_offset=0, .match_offset=12749 }, { .children_offset=26610, .match_offset=0 }, { .children_offset=0, .match_offset=12749 }, { .children_offset=26612, .match_offset=0 }, { .children_offset=26614, .match_offset=0 }, { .children_offset=26616, .match_offset=0 }, { .children_offset=0, .match_offset=14831 }, { .children_offset=26618, .match_offset=0 }, { .children_offset=26621, .match_offset=0 }, { .children_offset=0, .match_offset=43117 }, { .children_offset=26623, .match_offset=0 }, { .children_offset=26625, .match_offset=0 }, { .children_offset=26627, .match_offset=0 }, { .children_offset=26629, .match_offset=0 }, { .children_offset=26631, .match_offset=0 }, { .children_offset=26633, .match_offset=0 }, { .children_offset=26635, .match_offset=0 }, { .children_offset=26637, .match_offset=0 }, { .children_offset=0, .match_offset=56936 }, { .children_offset=26639, .match_offset=0 }, { .children_offset=26641, .match_offset=0 }, { .children_offset=26643, .match_offset=0 }, { .children_offset=26645, .match_offset=0 }, { .children_offset=0, .match_offset=43117 }, { .children_offset=26647, .match_offset=33971 }, { .children_offset=26649, .match_offset=0 }, { .children_offset=26651, .match_offset=0 }, { .children_offset=26653, .match_offset=90689 }, { .children_offset=0, .match_offset=102883 }, { .children_offset=26655, .match_offset=9022 }, { .children_offset=26658, .match_offset=0 }, { .children_offset=26660, .match_offset=0 }, { .children_offset=0, .match_offset=127366 }, { .children_offset=0, .match_offset=63805 }, { .children_offset=0, .match_offset=69289 }, { .children_offset=26663, .match_offset=0 }, { .children_offset=26666, .match_offset=0 }, { .children_offset=0, .match_offset=39189 }, { .children_offset=26668, .match_offset=0 }, { .children_offset=26670, .match_offset=0 }, { .children_offset=26672, .match_offset=0 }, { .children_offset=26674, .match_offset=0 }, { .children_offset=26676, .match_offset=0 }, { .children_offset=26678, .match_offset=0 }, { .children_offset=0, .match_offset=114948 }, { .children_offset=0, .match_offset=40442 }, { .children_offset=26680, .match_offset=0 }, { .children_offset=0, .match_offset=86762 }, { .children_offset=26682, .match_offset=0 }, { .children_offset=26686, .match_offset=0 }, { .children_offset=26688, .match_offset=0 }, { .children_offset=26690, .match_offset=0 }, { .children_offset=0, .match_offset=85273 }, { .children_offset=26692, .match_offset=0 }, { .children_offset=26694, .match_offset=0 }, { .children_offset=26696, .match_offset=0 }, { .children_offset=0, .match_offset=46821 }, { .children_offset=0, .match_offset=5667 }, { .children_offset=26698, .match_offset=12749 }, { .children_offset=0, .match_offset=52223 }, { .children_offset=26700, .match_offset=33832 }, { .children_offset=26708, .match_offset=30516 }, { .children_offset=0, .match_offset=109504 }, { .children_offset=0, .match_offset=28107 }, { .children_offset=26713, .match_offset=90136 }, { .children_offset=0, .match_offset=136037 }, { .children_offset=26716, .match_offset=34561 }, { .children_offset=0, .match_offset=55987 }, { .children_offset=26718, .match_offset=0 }, { .children_offset=26720, .match_offset=0 }, { .children_offset=26722, .match_offset=0 }, { .children_offset=26724, .match_offset=0 }, { .children_offset=26726, .match_offset=0 }, { .children_offset=0, .match_offset=30070 }, { .children_offset=26728, .match_offset=0 }, { .children_offset=26730, .match_offset=0 }, { .children_offset=0, .match_offset=27805 }, { .children_offset=26732, .match_offset=126570 }, { .children_offset=0, .match_offset=30054 }, { .children_offset=26734, .match_offset=55397 }, { .children_offset=0, .match_offset=124962 }, { .children_offset=26736, .match_offset=39207 }, { .children_offset=0, .match_offset=20278 }, { .children_offset=0, .match_offset=123394 }, { .children_offset=26738, .match_offset=0 }, { .children_offset=0, .match_offset=52547 }, { .children_offset=26740, .match_offset=125753 }, { .children_offset=26762, .match_offset=0 }, { .children_offset=26764, .match_offset=0 }, { .children_offset=26766, .match_offset=0 }, { .children_offset=26768, .match_offset=0 }, { .children_offset=26770, .match_offset=0 }, { .children_offset=26772, .match_offset=0 }, { .children_offset=0, .match_offset=6239 }, { .children_offset=26774, .match_offset=0 }, { .children_offset=26777, .match_offset=0 }, { .children_offset=26779, .match_offset=0 }, { .children_offset=26781, .match_offset=0 }, { .children_offset=0, .match_offset=58417 }, { .children_offset=26783, .match_offset=0 }, { .children_offset=0, .match_offset=71277 }, { .children_offset=26785, .match_offset=0 }, { .children_offset=26787, .match_offset=0 }, { .children_offset=26789, .match_offset=0 }, { .children_offset=26791, .match_offset=0 }, { .children_offset=0, .match_offset=43335 }, { .children_offset=0, .match_offset=69113 }, { .children_offset=26793, .match_offset=89196 }, { .children_offset=0, .match_offset=117559 }, { .children_offset=0, .match_offset=136557 }, { .children_offset=0, .match_offset=129920 }, { .children_offset=0, .match_offset=60015 }, { .children_offset=26798, .match_offset=0 }, { .children_offset=0, .match_offset=102273 }, { .children_offset=26801, .match_offset=0 }, { .children_offset=26803, .match_offset=0 }, { .children_offset=0, .match_offset=113630 }, { .children_offset=26805, .match_offset=0 }, { .children_offset=26808, .match_offset=0 }, { .children_offset=26810, .match_offset=0 }, { .children_offset=26813, .match_offset=0 }, { .children_offset=26815, .match_offset=0 }, { .children_offset=0, .match_offset=30001 }, { .children_offset=26817, .match_offset=0 }, { .children_offset=26819, .match_offset=0 }, { .children_offset=0, .match_offset=29296 }, { .children_offset=26821, .match_offset=0 }, { .children_offset=26823, .match_offset=132326 }, { .children_offset=26826, .match_offset=0 }, { .children_offset=26828, .match_offset=0 }, { .children_offset=26830, .match_offset=0 }, { .children_offset=26832, .match_offset=0 }, { .children_offset=0, .match_offset=15301 }, { .children_offset=26834, .match_offset=0 }, { .children_offset=26836, .match_offset=0 }, { .children_offset=26838, .match_offset=0 }, { .children_offset=0, .match_offset=15944 }, { .children_offset=0, .match_offset=20588 }, { .children_offset=26840, .match_offset=59 }, { .children_offset=26843, .match_offset=0 }, { .children_offset=26845, .match_offset=0 }, { .children_offset=0, .match_offset=29984 }, { .children_offset=0, .match_offset=133632 }, { .children_offset=26847, .match_offset=0 }, { .children_offset=26852, .match_offset=131340 }, { .children_offset=0, .match_offset=128037 }, { .children_offset=0, .match_offset=55303 }, { .children_offset=0, .match_offset=40856 }, { .children_offset=26855, .match_offset=0 }, { .children_offset=26857, .match_offset=45838 }, { .children_offset=26860, .match_offset=0 }, { .children_offset=26862, .match_offset=0 }, { .children_offset=26864, .match_offset=0 }, { .children_offset=26866, .match_offset=0 }, { .children_offset=0, .match_offset=119417 }, { .children_offset=26868, .match_offset=0 }, { .children_offset=0, .match_offset=6239 }, { .children_offset=26870, .match_offset=0 }, { .children_offset=26872, .match_offset=86773 }, { .children_offset=0, .match_offset=24274 }, { .children_offset=0, .match_offset=116206 }, { .children_offset=26875, .match_offset=0 }, { .children_offset=26879, .match_offset=9952 }, { .children_offset=26883, .match_offset=0 }, { .children_offset=0, .match_offset=26861 }, { .children_offset=0, .match_offset=5570 }, { .children_offset=0, .match_offset=79014 }, { .children_offset=0, .match_offset=22 }, { .children_offset=26888, .match_offset=0 }, { .children_offset=0, .match_offset=117668 }, { .children_offset=0, .match_offset=114219 }, { .children_offset=26890, .match_offset=82011 }, { .children_offset=26892, .match_offset=0 }, { .children_offset=0, .match_offset=78570 }, { .children_offset=26894, .match_offset=81074 }, { .children_offset=26897, .match_offset=0 }, { .children_offset=0, .match_offset=124845 }, { .children_offset=26899, .match_offset=0 }, { .children_offset=26901, .match_offset=0 }, { .children_offset=0, .match_offset=8899 }, { .children_offset=26903, .match_offset=0 }, { .children_offset=0, .match_offset=102693 }, { .children_offset=26905, .match_offset=86803 }, { .children_offset=26907, .match_offset=133265 }, { .children_offset=26909, .match_offset=0 }, { .children_offset=26911, .match_offset=0 }, { .children_offset=26913, .match_offset=0 }, { .children_offset=0, .match_offset=134351 }, { .children_offset=26915, .match_offset=52198 }, { .children_offset=26917, .match_offset=0 }, { .children_offset=26919, .match_offset=0 }, { .children_offset=0, .match_offset=27877 }, { .children_offset=26921, .match_offset=0 }, { .children_offset=0, .match_offset=119466 }, { .children_offset=26923, .match_offset=132136 }, { .children_offset=0, .match_offset=59274 }, { .children_offset=0, .match_offset=87018 }, { .children_offset=26926, .match_offset=41930 }, { .children_offset=0, .match_offset=33394 }, { .children_offset=26930, .match_offset=0 }, { .children_offset=0, .match_offset=22646 }, { .children_offset=26932, .match_offset=0 }, { .children_offset=26935, .match_offset=0 }, { .children_offset=0, .match_offset=90046 }, { .children_offset=26937, .match_offset=0 }, { .children_offset=0, .match_offset=34027 }, { .children_offset=26939, .match_offset=0 }, { .children_offset=26941, .match_offset=0 }, { .children_offset=0, .match_offset=58514 }, { .children_offset=26943, .match_offset=0 }, { .children_offset=0, .match_offset=133588 }, { .children_offset=0, .match_offset=62866 }, { .children_offset=26945, .match_offset=0 }, { .children_offset=26947, .match_offset=0 }, { .children_offset=26949, .match_offset=0 }, { .children_offset=0, .match_offset=33207 }, { .children_offset=26951, .match_offset=50046 }, { .children_offset=26955, .match_offset=0 }, { .children_offset=0, .match_offset=55969 }, { .children_offset=0, .match_offset=39445 }, { .children_offset=26957, .match_offset=0 }, { .children_offset=26959, .match_offset=0 }, { .children_offset=26961, .match_offset=0 }, { .children_offset=26963, .match_offset=0 }, { .children_offset=0, .match_offset=38400 }, { .children_offset=26965, .match_offset=34471 }, { .children_offset=26972, .match_offset=49815 }, { .children_offset=26975, .match_offset=0 }, { .children_offset=0, .match_offset=123115 }, { .children_offset=26977, .match_offset=0 }, { .children_offset=0, .match_offset=125164 }, { .children_offset=26979, .match_offset=0 }, { .children_offset=26981, .match_offset=0 }, { .children_offset=26983, .match_offset=0 }, { .children_offset=26985, .match_offset=0 }, { .children_offset=26987, .match_offset=0 }, { .children_offset=0, .match_offset=28105 }, { .children_offset=26989, .match_offset=2324 }, { .children_offset=26991, .match_offset=0 }, { .children_offset=26993, .match_offset=0 }, { .children_offset=26995, .match_offset=0 }, { .children_offset=26997, .match_offset=0 }, { .children_offset=26999, .match_offset=0 }, { .children_offset=27001, .match_offset=0 }, { .children_offset=0, .match_offset=133566 }, { .children_offset=27003, .match_offset=0 }, { .children_offset=27005, .match_offset=74063 }, { .children_offset=27007, .match_offset=0 }, { .children_offset=0, .match_offset=125527 }, { .children_offset=27009, .match_offset=473 }, { .children_offset=0, .match_offset=131430 }, { .children_offset=27011, .match_offset=0 }, { .children_offset=27013, .match_offset=0 }, { .children_offset=0, .match_offset=35487 }, { .children_offset=27015, .match_offset=55018 }, { .children_offset=27018, .match_offset=0 }, { .children_offset=27020, .match_offset=0 }, { .children_offset=27022, .match_offset=0 }, { .children_offset=0, .match_offset=25821 }, { .children_offset=27024, .match_offset=0 }, { .children_offset=27026, .match_offset=0 }, { .children_offset=27028, .match_offset=0 }, { .children_offset=27030, .match_offset=38923 }, { .children_offset=27032, .match_offset=0 }, { .children_offset=27034, .match_offset=0 }, { .children_offset=27036, .match_offset=0 }, { .children_offset=0, .match_offset=38923 }, { .children_offset=27038, .match_offset=53569 }, { .children_offset=27042, .match_offset=0 }, { .children_offset=27044, .match_offset=25791 }, { .children_offset=27046, .match_offset=0 }, { .children_offset=27048, .match_offset=0 }, { .children_offset=27050, .match_offset=0 }, { .children_offset=0, .match_offset=25791 }, { .children_offset=27052, .match_offset=39218 }, { .children_offset=27054, .match_offset=33392 }, { .children_offset=0, .match_offset=134732 }, { .children_offset=27056, .match_offset=0 }, { .children_offset=27058, .match_offset=0 }, { .children_offset=0, .match_offset=23894 }, { .children_offset=27060, .match_offset=108060 }, { .children_offset=27080, .match_offset=70807 }, { .children_offset=27083, .match_offset=0 }, { .children_offset=0, .match_offset=37227 }, { .children_offset=27085, .match_offset=0 }, { .children_offset=0, .match_offset=12747 }, { .children_offset=27087, .match_offset=0 }, { .children_offset=27090, .match_offset=0 }, { .children_offset=0, .match_offset=118558 }, { .children_offset=27092, .match_offset=0 }, { .children_offset=27094, .match_offset=0 }, { .children_offset=27096, .match_offset=0 }, { .children_offset=0, .match_offset=50617 }, { .children_offset=27098, .match_offset=0 }, { .children_offset=27102, .match_offset=0 }, { .children_offset=27104, .match_offset=0 }, { .children_offset=27106, .match_offset=0 }, { .children_offset=27109, .match_offset=0 }, { .children_offset=27111, .match_offset=66233 }, { .children_offset=27113, .match_offset=0 }, { .children_offset=27116, .match_offset=0 }, { .children_offset=27118, .match_offset=0 }, { .children_offset=27120, .match_offset=0 }, { .children_offset=27122, .match_offset=0 }, { .children_offset=27124, .match_offset=0 }, { .children_offset=27126, .match_offset=0 }, { .children_offset=27128, .match_offset=0 }, { .children_offset=27130, .match_offset=0 }, { .children_offset=27132, .match_offset=0 }, { .children_offset=0, .match_offset=15711 }, { .children_offset=27134, .match_offset=0 }, { .children_offset=27136, .match_offset=0 }, { .children_offset=27138, .match_offset=0 }, { .children_offset=27140, .match_offset=0 }, { .children_offset=27142, .match_offset=0 }, { .children_offset=27144, .match_offset=0 }, { .children_offset=27146, .match_offset=0 }, { .children_offset=27148, .match_offset=0 }, { .children_offset=0, .match_offset=27690 }, { .children_offset=27150, .match_offset=0 }, { .children_offset=0, .match_offset=129935 }, { .children_offset=0, .match_offset=14896 }, { .children_offset=27152, .match_offset=0 }, { .children_offset=27154, .match_offset=0 }, { .children_offset=27156, .match_offset=0 }, { .children_offset=27158, .match_offset=0 }, { .children_offset=27160, .match_offset=0 }, { .children_offset=27162, .match_offset=0 }, { .children_offset=0, .match_offset=63159 }, { .children_offset=27164, .match_offset=0 }, { .children_offset=27166, .match_offset=0 }, { .children_offset=27168, .match_offset=0 }, { .children_offset=27170, .match_offset=0 }, { .children_offset=27172, .match_offset=0 }, { .children_offset=27174, .match_offset=0 }, { .children_offset=0, .match_offset=136223 }, { .children_offset=27176, .match_offset=43119 }, { .children_offset=27180, .match_offset=0 }, { .children_offset=27182, .match_offset=0 }, { .children_offset=27184, .match_offset=0 }, { .children_offset=0, .match_offset=32869 }, { .children_offset=27186, .match_offset=0 }, { .children_offset=27189, .match_offset=0 }, { .children_offset=27191, .match_offset=0 }, { .children_offset=27193, .match_offset=0 }, { .children_offset=0, .match_offset=9912 }, { .children_offset=27195, .match_offset=0 }, { .children_offset=27197, .match_offset=0 }, { .children_offset=27199, .match_offset=0 }, { .children_offset=0, .match_offset=25494 }, { .children_offset=0, .match_offset=109747 }, { .children_offset=27201, .match_offset=0 }, { .children_offset=27203, .match_offset=123567 }, { .children_offset=27205, .match_offset=0 }, { .children_offset=27207, .match_offset=0 }, { .children_offset=27209, .match_offset=0 }, { .children_offset=0, .match_offset=22485 }, { .children_offset=27211, .match_offset=40636 }, { .children_offset=27213, .match_offset=0 }, { .children_offset=27215, .match_offset=0 }, { .children_offset=0, .match_offset=131554 }, { .children_offset=27217, .match_offset=0 }, { .children_offset=27220, .match_offset=38185 }, { .children_offset=27226, .match_offset=0 }, { .children_offset=27229, .match_offset=0 }, { .children_offset=27231, .match_offset=0 }, { .children_offset=27233, .match_offset=0 }, { .children_offset=27235, .match_offset=0 }, { .children_offset=27237, .match_offset=0 }, { .children_offset=27239, .match_offset=0 }, { .children_offset=27241, .match_offset=0 }, { .children_offset=27248, .match_offset=0 }, { .children_offset=0, .match_offset=123509 }, { .children_offset=27250, .match_offset=0 }, { .children_offset=27252, .match_offset=0 }, { .children_offset=27254, .match_offset=0 }, { .children_offset=27256, .match_offset=0 }, { .children_offset=27258, .match_offset=0 }, { .children_offset=0, .match_offset=133677 }, { .children_offset=27260, .match_offset=0 }, { .children_offset=27262, .match_offset=0 }, { .children_offset=27264, .match_offset=0 }, { .children_offset=0, .match_offset=123748 }, { .children_offset=27266, .match_offset=0 }, { .children_offset=27268, .match_offset=0 }, { .children_offset=0, .match_offset=125037 }, { .children_offset=27270, .match_offset=0 }, { .children_offset=27272, .match_offset=0 }, { .children_offset=0, .match_offset=58948 }, { .children_offset=27274, .match_offset=0 }, { .children_offset=0, .match_offset=11174 }, { .children_offset=27276, .match_offset=0 }, { .children_offset=27278, .match_offset=0 }, { .children_offset=27280, .match_offset=0 }, { .children_offset=27282, .match_offset=0 }, { .children_offset=27284, .match_offset=0 }, { .children_offset=0, .match_offset=7597 }, { .children_offset=0, .match_offset=58271 }, { .children_offset=27286, .match_offset=0 }, { .children_offset=27288, .match_offset=0 }, { .children_offset=27290, .match_offset=0 }, { .children_offset=27292, .match_offset=0 }, { .children_offset=27295, .match_offset=0 }, { .children_offset=27297, .match_offset=0 }, { .children_offset=27299, .match_offset=0 }, { .children_offset=27301, .match_offset=0 }, { .children_offset=0, .match_offset=44027 }, { .children_offset=27303, .match_offset=0 }, { .children_offset=27305, .match_offset=0 }, { .children_offset=27307, .match_offset=0 }, { .children_offset=27309, .match_offset=0 }, { .children_offset=27311, .match_offset=0 }, { .children_offset=27313, .match_offset=0 }, { .children_offset=27315, .match_offset=0 }, { .children_offset=27317, .match_offset=0 }, { .children_offset=27319, .match_offset=0 }, { .children_offset=0, .match_offset=131400 }, { .children_offset=27321, .match_offset=0 }, { .children_offset=27323, .match_offset=0 }, { .children_offset=27325, .match_offset=0 }, { .children_offset=27327, .match_offset=0 }, { .children_offset=27329, .match_offset=0 }, { .children_offset=0, .match_offset=84828 }, { .children_offset=27331, .match_offset=0 }, { .children_offset=27333, .match_offset=0 }, { .children_offset=27335, .match_offset=0 }, { .children_offset=27337, .match_offset=0 }, { .children_offset=27339, .match_offset=0 }, { .children_offset=27341, .match_offset=0 }, { .children_offset=27343, .match_offset=0 }, { .children_offset=27345, .match_offset=0 }, { .children_offset=27347, .match_offset=0 }, { .children_offset=0, .match_offset=116946 }, { .children_offset=27349, .match_offset=0 }, { .children_offset=27351, .match_offset=0 }, { .children_offset=0, .match_offset=60482 }, { .children_offset=27353, .match_offset=80985 }, { .children_offset=0, .match_offset=35401 }, { .children_offset=0, .match_offset=125585 }, { .children_offset=27358, .match_offset=80949 }, { .children_offset=27361, .match_offset=0 }, { .children_offset=27363, .match_offset=0 }, { .children_offset=27365, .match_offset=0 }, { .children_offset=27367, .match_offset=0 }, { .children_offset=27369, .match_offset=0 }, { .children_offset=27372, .match_offset=0 }, { .children_offset=27374, .match_offset=0 }, { .children_offset=27376, .match_offset=0 }, { .children_offset=0, .match_offset=38133 }, { .children_offset=27378, .match_offset=0 }, { .children_offset=27380, .match_offset=0 }, { .children_offset=27382, .match_offset=0 }, { .children_offset=27384, .match_offset=0 }, { .children_offset=0, .match_offset=133030 }, { .children_offset=27386, .match_offset=0 }, { .children_offset=0, .match_offset=1025 }, { .children_offset=0, .match_offset=86764 }, { .children_offset=27388, .match_offset=43106 }, { .children_offset=27392, .match_offset=0 }, { .children_offset=0, .match_offset=67358 }, { .children_offset=0, .match_offset=127782 }, { .children_offset=27394, .match_offset=0 }, { .children_offset=27396, .match_offset=0 }, { .children_offset=0, .match_offset=38678 }, { .children_offset=0, .match_offset=43484 }, { .children_offset=27398, .match_offset=0 }, { .children_offset=27400, .match_offset=0 }, { .children_offset=27403, .match_offset=0 }, { .children_offset=27405, .match_offset=0 }, { .children_offset=27407, .match_offset=0 }, { .children_offset=0, .match_offset=125320 }, { .children_offset=0, .match_offset=114479 }, { .children_offset=27409, .match_offset=88779 }, { .children_offset=27411, .match_offset=0 }, { .children_offset=27413, .match_offset=0 }, { .children_offset=27415, .match_offset=0 }, { .children_offset=27417, .match_offset=0 }, { .children_offset=0, .match_offset=74107 }, { .children_offset=27419, .match_offset=114504 }, { .children_offset=27422, .match_offset=0 }, { .children_offset=27425, .match_offset=0 }, { .children_offset=27427, .match_offset=0 }, { .children_offset=0, .match_offset=123768 }, { .children_offset=27429, .match_offset=0 }, { .children_offset=0, .match_offset=50217 }, { .children_offset=27431, .match_offset=0 }, { .children_offset=0, .match_offset=8572 }, { .children_offset=27433, .match_offset=0 }, { .children_offset=27436, .match_offset=0 }, { .children_offset=27439, .match_offset=0 }, { .children_offset=0, .match_offset=103065 }, { .children_offset=27441, .match_offset=0 }, { .children_offset=27443, .match_offset=0 }, { .children_offset=27445, .match_offset=0 }, { .children_offset=27447, .match_offset=0 }, { .children_offset=27449, .match_offset=0 }, { .children_offset=27451, .match_offset=0 }, { .children_offset=0, .match_offset=102881 }, { .children_offset=27453, .match_offset=0 }, { .children_offset=0, .match_offset=129441 }, { .children_offset=27455, .match_offset=0 }, { .children_offset=0, .match_offset=131084 }, { .children_offset=27457, .match_offset=42696 }, { .children_offset=27462, .match_offset=0 }, { .children_offset=0, .match_offset=134395 }, { .children_offset=27467, .match_offset=0 }, { .children_offset=27469, .match_offset=0 }, { .children_offset=27471, .match_offset=0 }, { .children_offset=27473, .match_offset=0 }, { .children_offset=27475, .match_offset=0 }, { .children_offset=27477, .match_offset=0 }, { .children_offset=0, .match_offset=40615 }, { .children_offset=27479, .match_offset=0 }, { .children_offset=27481, .match_offset=0 }, { .children_offset=0, .match_offset=87297 }, { .children_offset=27483, .match_offset=0 }, { .children_offset=27485, .match_offset=0 }, { .children_offset=27487, .match_offset=0 }, { .children_offset=27489, .match_offset=0 }, { .children_offset=27491, .match_offset=0 }, { .children_offset=27493, .match_offset=0 }, { .children_offset=27495, .match_offset=0 }, { .children_offset=27497, .match_offset=0 }, { .children_offset=27499, .match_offset=0 }, { .children_offset=0, .match_offset=64714 }, { .children_offset=27501, .match_offset=0 }, { .children_offset=27503, .match_offset=0 }, { .children_offset=0, .match_offset=27849 }, { .children_offset=27505, .match_offset=0 }, { .children_offset=27507, .match_offset=0 }, { .children_offset=0, .match_offset=130035 }, { .children_offset=27509, .match_offset=0 }, { .children_offset=27511, .match_offset=7389 }, { .children_offset=27515, .match_offset=0 }, { .children_offset=0, .match_offset=33548 }, { .children_offset=27517, .match_offset=0 }, { .children_offset=27519, .match_offset=0 }, { .children_offset=27521, .match_offset=0 }, { .children_offset=27523, .match_offset=0 }, { .children_offset=27525, .match_offset=0 }, { .children_offset=27527, .match_offset=0 }, { .children_offset=27529, .match_offset=0 }, { .children_offset=27531, .match_offset=0 }, { .children_offset=0, .match_offset=22654 }, { .children_offset=27533, .match_offset=0 }, { .children_offset=27535, .match_offset=0 }, { .children_offset=27537, .match_offset=0 }, { .children_offset=27539, .match_offset=0 }, { .children_offset=27541, .match_offset=0 }, { .children_offset=27543, .match_offset=0 }, { .children_offset=27545, .match_offset=0 }, { .children_offset=27547, .match_offset=0 }, { .children_offset=27549, .match_offset=0 }, { .children_offset=0, .match_offset=67413 }, { .children_offset=0, .match_offset=14842 }, { .children_offset=27551, .match_offset=38122 }, { .children_offset=27554, .match_offset=0 }, { .children_offset=27556, .match_offset=0 }, { .children_offset=27558, .match_offset=0 }, { .children_offset=0, .match_offset=89084 }, { .children_offset=0, .match_offset=5996 }, { .children_offset=27560, .match_offset=0 }, { .children_offset=27562, .match_offset=0 }, { .children_offset=27564, .match_offset=131428 }, { .children_offset=27566, .match_offset=0 }, { .children_offset=0, .match_offset=43822 }, { .children_offset=27568, .match_offset=0 }, { .children_offset=27574, .match_offset=0 }, { .children_offset=27576, .match_offset=0 }, { .children_offset=0, .match_offset=116094 }, { .children_offset=27578, .match_offset=0 }, { .children_offset=27580, .match_offset=0 }, { .children_offset=27582, .match_offset=0 }, { .children_offset=27584, .match_offset=0 }, { .children_offset=27586, .match_offset=0 }, { .children_offset=0, .match_offset=57378 }, { .children_offset=27588, .match_offset=0 }, { .children_offset=27590, .match_offset=0 }, { .children_offset=27592, .match_offset=85365 }, { .children_offset=0, .match_offset=116090 }, { .children_offset=0, .match_offset=45976 }, { .children_offset=27594, .match_offset=0 }, { .children_offset=27596, .match_offset=0 }, { .children_offset=0, .match_offset=35886 }, { .children_offset=27598, .match_offset=73249 }, { .children_offset=27605, .match_offset=0 }, { .children_offset=27607, .match_offset=0 }, { .children_offset=27609, .match_offset=0 }, { .children_offset=0, .match_offset=116010 }, { .children_offset=27611, .match_offset=0 }, { .children_offset=0, .match_offset=90313 }, { .children_offset=0, .match_offset=5340 }, { .children_offset=27613, .match_offset=0 }, { .children_offset=27615, .match_offset=43117 }, { .children_offset=0, .match_offset=48473 }, { .children_offset=0, .match_offset=41781 }, { .children_offset=27618, .match_offset=0 }, { .children_offset=0, .match_offset=49749 }, { .children_offset=27621, .match_offset=0 }, { .children_offset=27623, .match_offset=85259 }, { .children_offset=0, .match_offset=63463 }, { .children_offset=27625, .match_offset=0 }, { .children_offset=27627, .match_offset=0 }, { .children_offset=27629, .match_offset=0 }, { .children_offset=0, .match_offset=41951 }, { .children_offset=27631, .match_offset=60432 }, { .children_offset=27639, .match_offset=0 }, { .children_offset=0, .match_offset=132808 }, { .children_offset=27642, .match_offset=0 }, { .children_offset=0, .match_offset=132837 }, { .children_offset=27644, .match_offset=0 }, { .children_offset=27646, .match_offset=0 }, { .children_offset=0, .match_offset=30321 }, { .children_offset=27648, .match_offset=0 }, { .children_offset=27650, .match_offset=0 }, { .children_offset=27652, .match_offset=0 }, { .children_offset=0, .match_offset=71960 }, { .children_offset=27654, .match_offset=0 }, { .children_offset=27656, .match_offset=0 }, { .children_offset=27658, .match_offset=0 }, { .children_offset=0, .match_offset=110997 }, { .children_offset=27660, .match_offset=0 }, { .children_offset=27662, .match_offset=0 }, { .children_offset=27664, .match_offset=0 }, { .children_offset=0, .match_offset=12548 }, { .children_offset=27666, .match_offset=0 }, { .children_offset=27668, .match_offset=0 }, { .children_offset=27670, .match_offset=0 }, { .children_offset=27672, .match_offset=0 }, { .children_offset=0, .match_offset=90608 }, { .children_offset=27674, .match_offset=0 }, { .children_offset=27677, .match_offset=78694 }, { .children_offset=0, .match_offset=135000 }, { .children_offset=0, .match_offset=86311 }, { .children_offset=27680, .match_offset=0 }, { .children_offset=27682, .match_offset=0 }, { .children_offset=0, .match_offset=84930 }, { .children_offset=27684, .match_offset=29897 }, { .children_offset=0, .match_offset=110219 }, { .children_offset=0, .match_offset=125388 }, { .children_offset=27702, .match_offset=0 }, { .children_offset=27704, .match_offset=0 }, { .children_offset=0, .match_offset=38927 }, { .children_offset=0, .match_offset=5252 }, { .children_offset=0, .match_offset=37735 }, { .children_offset=27706, .match_offset=0 }, { .children_offset=27709, .match_offset=0 }, { .children_offset=0, .match_offset=8939 }, { .children_offset=27711, .match_offset=0 }, { .children_offset=27713, .match_offset=0 }, { .children_offset=27715, .match_offset=0 }, { .children_offset=0, .match_offset=73697 }, { .children_offset=27717, .match_offset=56965 }, { .children_offset=27719, .match_offset=0 }, { .children_offset=0, .match_offset=78204 }, { .children_offset=27721, .match_offset=0 }, { .children_offset=0, .match_offset=1021 }, { .children_offset=0, .match_offset=15485 }, { .children_offset=0, .match_offset=57993 }, { .children_offset=27723, .match_offset=0 }, { .children_offset=27726, .match_offset=0 }, { .children_offset=27728, .match_offset=0 }, { .children_offset=0, .match_offset=112720 }, { .children_offset=27730, .match_offset=0 }, { .children_offset=27732, .match_offset=0 }, { .children_offset=0, .match_offset=28103 }, { .children_offset=27734, .match_offset=65056 }, { .children_offset=0, .match_offset=5915 }, { .children_offset=0, .match_offset=61096 }, { .children_offset=0, .match_offset=71442 }, { .children_offset=0, .match_offset=124889 }, { .children_offset=27738, .match_offset=43478 }, { .children_offset=27742, .match_offset=0 }, { .children_offset=27744, .match_offset=0 }, { .children_offset=27746, .match_offset=0 }, { .children_offset=27748, .match_offset=0 }, { .children_offset=0, .match_offset=56955 }, { .children_offset=27750, .match_offset=0 }, { .children_offset=27752, .match_offset=0 }, { .children_offset=27754, .match_offset=0 }, { .children_offset=0, .match_offset=116520 }, { .children_offset=0, .match_offset=82080 }, { .children_offset=0, .match_offset=13790 }, { .children_offset=0, .match_offset=2231 }, { .children_offset=0, .match_offset=60756 }, { .children_offset=0, .match_offset=54000 }, { .children_offset=27756, .match_offset=0 }, { .children_offset=27761, .match_offset=32789 }, { .children_offset=0, .match_offset=15308 }, { .children_offset=0, .match_offset=12742 }, { .children_offset=27763, .match_offset=7095 }, { .children_offset=0, .match_offset=33873 }, { .children_offset=27765, .match_offset=12591 }, { .children_offset=0, .match_offset=33049 }, { .children_offset=0, .match_offset=48143 }, { .children_offset=27767, .match_offset=90147 }, { .children_offset=0, .match_offset=133279 }, { .children_offset=27778, .match_offset=0 }, { .children_offset=27780, .match_offset=0 }, { .children_offset=27782, .match_offset=0 }, { .children_offset=0, .match_offset=33246 }, { .children_offset=27784, .match_offset=0 }, { .children_offset=27786, .match_offset=0 }, { .children_offset=27788, .match_offset=0 }, { .children_offset=0, .match_offset=37280 }, { .children_offset=27790, .match_offset=0 }, { .children_offset=27792, .match_offset=0 }, { .children_offset=27794, .match_offset=0 }, { .children_offset=27796, .match_offset=0 }, { .children_offset=0, .match_offset=76979 }, { .children_offset=27798, .match_offset=0 }, { .children_offset=27801, .match_offset=0 }, { .children_offset=0, .match_offset=68198 }, { .children_offset=0, .match_offset=58518 }, { .children_offset=0, .match_offset=80558 }, { .children_offset=27803, .match_offset=15504 }, { .children_offset=0, .match_offset=22642 }, { .children_offset=0, .match_offset=64296 }, { .children_offset=0, .match_offset=53594 }, { .children_offset=0, .match_offset=42431 }, { .children_offset=0, .match_offset=10955 }, { .children_offset=27805, .match_offset=0 }, { .children_offset=27830, .match_offset=0 }, { .children_offset=27841, .match_offset=0 }, { .children_offset=27851, .match_offset=62546 }, { .children_offset=0, .match_offset=6579 }, { .children_offset=0, .match_offset=126574 }, { .children_offset=0, .match_offset=73855 }, { .children_offset=27854, .match_offset=77781 }, { .children_offset=0, .match_offset=104562 }, { .children_offset=0, .match_offset=84895 }, { .children_offset=0, .match_offset=103401 }, { .children_offset=0, .match_offset=77275 }, { .children_offset=0, .match_offset=12016 }, { .children_offset=0, .match_offset=132602 }, { .children_offset=0, .match_offset=43506 }, { .children_offset=27856, .match_offset=0 }, { .children_offset=27867, .match_offset=16397 }, { .children_offset=0, .match_offset=71941 }, { .children_offset=0, .match_offset=82027 }, { .children_offset=27869, .match_offset=20232 }, { .children_offset=0, .match_offset=130950 }, { .children_offset=0, .match_offset=24258 }, { .children_offset=0, .match_offset=6892 }, { .children_offset=0, .match_offset=16568 }, { .children_offset=0, .match_offset=81150 }, { .children_offset=0, .match_offset=51165 }, { .children_offset=0, .match_offset=108759 }, { .children_offset=0, .match_offset=5739 }, { .children_offset=0, .match_offset=88589 }, { .children_offset=0, .match_offset=14433 }, { .children_offset=27878, .match_offset=37523 }, { .children_offset=0, .match_offset=6536 }, { .children_offset=27880, .match_offset=61128 }, { .children_offset=0, .match_offset=104432 }, { .children_offset=27882, .match_offset=114014 }, { .children_offset=0, .match_offset=131443 }, { .children_offset=0, .match_offset=114027 }, { .children_offset=0, .match_offset=5331 }, { .children_offset=27884, .match_offset=0 }, { .children_offset=0, .match_offset=90107 }, { .children_offset=0, .match_offset=25555 }, { .children_offset=27895, .match_offset=131380 }, { .children_offset=0, .match_offset=122531 }, { .children_offset=0, .match_offset=29208 }, { .children_offset=27897, .match_offset=62652 }, { .children_offset=0, .match_offset=134809 }, { .children_offset=0, .match_offset=42456 }, { .children_offset=0, .match_offset=129288 }, { .children_offset=0, .match_offset=74605 }, { .children_offset=27899, .match_offset=122350 }, { .children_offset=0, .match_offset=8627 }, { .children_offset=0, .match_offset=38352 }, { .children_offset=27901, .match_offset=0 }, { .children_offset=0, .match_offset=27976 }, { .children_offset=27912, .match_offset=132794 }, { .children_offset=0, .match_offset=6883 }, { .children_offset=0, .match_offset=125161 }, { .children_offset=27914, .match_offset=50280 }, { .children_offset=0, .match_offset=90037 }, { .children_offset=0, .match_offset=67533 }, { .children_offset=0, .match_offset=72892 }, { .children_offset=0, .match_offset=24339 }, { .children_offset=0, .match_offset=51135 }, { .children_offset=0, .match_offset=85256 }, { .children_offset=0, .match_offset=44001 }, { .children_offset=0, .match_offset=41894 }, { .children_offset=27917, .match_offset=0 }, { .children_offset=27928, .match_offset=49781 }, { .children_offset=0, .match_offset=34412 }, { .children_offset=0, .match_offset=86787 }, { .children_offset=0, .match_offset=89829 }, { .children_offset=0, .match_offset=12023 }, { .children_offset=0, .match_offset=28092 }, { .children_offset=0, .match_offset=109574 }, { .children_offset=0, .match_offset=25531 }, { .children_offset=0, .match_offset=25754 }, { .children_offset=0, .match_offset=74694 }, { .children_offset=0, .match_offset=6000 }, { .children_offset=27930, .match_offset=0 }, { .children_offset=0, .match_offset=109477 }, { .children_offset=0, .match_offset=6603 }, { .children_offset=0, .match_offset=35758 }, { .children_offset=0, .match_offset=33709 }, { .children_offset=0, .match_offset=136210 }, { .children_offset=0, .match_offset=129898 }, { .children_offset=0, .match_offset=6565 }, { .children_offset=0, .match_offset=26904 }, { .children_offset=0, .match_offset=11994 }, { .children_offset=0, .match_offset=5564 }, { .children_offset=27941, .match_offset=0 }, { .children_offset=0, .match_offset=119694 }, { .children_offset=0, .match_offset=114025 }, { .children_offset=0, .match_offset=65257 }, { .children_offset=0, .match_offset=129584 }, { .children_offset=0, .match_offset=40586 }, { .children_offset=0, .match_offset=45834 }, { .children_offset=0, .match_offset=61251 }, { .children_offset=0, .match_offset=38179 }, { .children_offset=0, .match_offset=61116 }, { .children_offset=0, .match_offset=45974 }, { .children_offset=27952, .match_offset=0 }, { .children_offset=0, .match_offset=16108 }, { .children_offset=0, .match_offset=30003 }, { .children_offset=0, .match_offset=6158 }, { .children_offset=0, .match_offset=102783 }, { .children_offset=0, .match_offset=122353 }, { .children_offset=0, .match_offset=59446 }, { .children_offset=0, .match_offset=13184 }, { .children_offset=0, .match_offset=41766 }, { .children_offset=0, .match_offset=14316 }, { .children_offset=0, .match_offset=64704 }, { .children_offset=27963, .match_offset=0 }, { .children_offset=0, .match_offset=30660 }, { .children_offset=0, .match_offset=124595 }, { .children_offset=0, .match_offset=56614 }, { .children_offset=0, .match_offset=124563 }, { .children_offset=0, .match_offset=74152 }, { .children_offset=0, .match_offset=35405 }, { .children_offset=0, .match_offset=25579 }, { .children_offset=0, .match_offset=53992 }, { .children_offset=0, .match_offset=66435 }, { .children_offset=0, .match_offset=471 }, { .children_offset=27974, .match_offset=0 }, { .children_offset=0, .match_offset=9057 }, { .children_offset=0, .match_offset=38781 }, { .children_offset=0, .match_offset=43927 }, { .children_offset=0, .match_offset=51125 }, { .children_offset=0, .match_offset=1124 }, { .children_offset=0, .match_offset=23944 }, { .children_offset=0, .match_offset=110397 }, { .children_offset=0, .match_offset=86049 }, { .children_offset=0, .match_offset=20590 }, { .children_offset=0, .match_offset=129887 }, { .children_offset=27985, .match_offset=0 }, { .children_offset=27996, .match_offset=0 }, { .children_offset=0, .match_offset=33775 }, { .children_offset=0, .match_offset=54225 }, { .children_offset=0, .match_offset=34276 }, { .children_offset=0, .match_offset=27863 }, { .children_offset=0, .match_offset=102867 }, { .children_offset=0, .match_offset=68401 }, { .children_offset=0, .match_offset=70718 }, { .children_offset=0, .match_offset=59473 }, { .children_offset=0, .match_offset=42857 }, { .children_offset=0, .match_offset=7055 }, { .children_offset=28007, .match_offset=0 }, { .children_offset=0, .match_offset=43254 }, { .children_offset=0, .match_offset=30908 }, { .children_offset=0, .match_offset=6515 }, { .children_offset=0, .match_offset=44023 }, { .children_offset=0, .match_offset=42252 }, { .children_offset=0, .match_offset=13505 }, { .children_offset=0, .match_offset=47 }, { .children_offset=0, .match_offset=1497 }, { .children_offset=0, .match_offset=38966 }, { .children_offset=0, .match_offset=25401 }, { .children_offset=28018, .match_offset=0 }, { .children_offset=0, .match_offset=103703 }, { .children_offset=0, .match_offset=44699 }, { .children_offset=0, .match_offset=20326 }, { .children_offset=0, .match_offset=55741 }, { .children_offset=0, .match_offset=50318 }, { .children_offset=0, .match_offset=123182 }, { .children_offset=0, .match_offset=15290 }, { .children_offset=0, .match_offset=25692 }, { .children_offset=0, .match_offset=62938 }, { .children_offset=0, .match_offset=104388 }, { .children_offset=28029, .match_offset=0 }, { .children_offset=0, .match_offset=28245 }, { .children_offset=0, .match_offset=134375 }, { .children_offset=0, .match_offset=35321 }, { .children_offset=0, .match_offset=14970 }, { .children_offset=0, .match_offset=21167 }, { .children_offset=0, .match_offset=63786 }, { .children_offset=0, .match_offset=134355 }, { .children_offset=0, .match_offset=65092 }, { .children_offset=0, .match_offset=26139 }, { .children_offset=0, .match_offset=57363 }, { .children_offset=28040, .match_offset=0 }, { .children_offset=0, .match_offset=22676 }, { .children_offset=0, .match_offset=136183 }, { .children_offset=0, .match_offset=13864 }, { .children_offset=0, .match_offset=81999 }, { .children_offset=0, .match_offset=64426 }, { .children_offset=0, .match_offset=134467 }, { .children_offset=0, .match_offset=25726 }, { .children_offset=0, .match_offset=114930 }, { .children_offset=0, .match_offset=43044 }, { .children_offset=0, .match_offset=45866 }, { .children_offset=28051, .match_offset=0 }, { .children_offset=0, .match_offset=90102 }, { .children_offset=0, .match_offset=80795 }, { .children_offset=0, .match_offset=67390 }, { .children_offset=0, .match_offset=73830 }, { .children_offset=0, .match_offset=125831 }, { .children_offset=0, .match_offset=21892 }, { .children_offset=0, .match_offset=46885 }, { .children_offset=0, .match_offset=134357 }, { .children_offset=0, .match_offset=64244 }, { .children_offset=0, .match_offset=135052 }, { .children_offset=28062, .match_offset=0 }, { .children_offset=0, .match_offset=73259 }, { .children_offset=0, .match_offset=48439 }, { .children_offset=0, .match_offset=53567 }, { .children_offset=0, .match_offset=26942 }, { .children_offset=0, .match_offset=64745 }, { .children_offset=0, .match_offset=102896 }, { .children_offset=0, .match_offset=123241 }, { .children_offset=0, .match_offset=62608 }, { .children_offset=0, .match_offset=10286 }, { .children_offset=0, .match_offset=87008 }, { .children_offset=28073, .match_offset=0 }, { .children_offset=0, .match_offset=119413 }, { .children_offset=0, .match_offset=103968 }, { .children_offset=0, .match_offset=26043 }, { .children_offset=0, .match_offset=69314 }, { .children_offset=0, .match_offset=38902 }, { .children_offset=0, .match_offset=14877 }, { .children_offset=0, .match_offset=44936 }, { .children_offset=0, .match_offset=89973 }, { .children_offset=0, .match_offset=46067 }, { .children_offset=0, .match_offset=61124 }, { .children_offset=28084, .match_offset=0 }, { .children_offset=0, .match_offset=114732 }, { .children_offset=0, .match_offset=131627 }, { .children_offset=0, .match_offset=131211 }, { .children_offset=0, .match_offset=87795 }, { .children_offset=0, .match_offset=113424 }, { .children_offset=0, .match_offset=23905 }, { .children_offset=0, .match_offset=43022 }, { .children_offset=0, .match_offset=26902 }, { .children_offset=0, .match_offset=59082 }, { .children_offset=0, .match_offset=135058 }, { .children_offset=28095, .match_offset=0 }, { .children_offset=0, .match_offset=72154 }, { .children_offset=0, .match_offset=22324 }, { .children_offset=0, .match_offset=135060 }, { .children_offset=0, .match_offset=38567 }, { .children_offset=0, .match_offset=103175 }, { .children_offset=0, .match_offset=81048 }, { .children_offset=0, .match_offset=15466 }, { .children_offset=0, .match_offset=43750 }, { .children_offset=28104, .match_offset=67875 }, { .children_offset=28126, .match_offset=0 }, { .children_offset=0, .match_offset=133075 }, { .children_offset=0, .match_offset=13072 }, { .children_offset=0, .match_offset=20902 }, { .children_offset=0, .match_offset=49811 }, { .children_offset=0, .match_offset=117564 }, { .children_offset=0, .match_offset=34290 }, { .children_offset=0, .match_offset=125829 }, { .children_offset=0, .match_offset=28732 }, { .children_offset=28134, .match_offset=71819 }, { .children_offset=0, .match_offset=62388 }, { .children_offset=28137, .match_offset=0 }, { .children_offset=28139, .match_offset=0 }, { .children_offset=28141, .match_offset=0 }, { .children_offset=0, .match_offset=60497 }, { .children_offset=28143, .match_offset=0 }, { .children_offset=28146, .match_offset=0 }, { .children_offset=28148, .match_offset=0 }, { .children_offset=28150, .match_offset=0 }, { .children_offset=0, .match_offset=49256 }, { .children_offset=28152, .match_offset=12511 }, { .children_offset=28154, .match_offset=0 }, { .children_offset=28156, .match_offset=67997 }, { .children_offset=28158, .match_offset=0 }, { .children_offset=28162, .match_offset=0 }, { .children_offset=28164, .match_offset=0 }, { .children_offset=28166, .match_offset=0 }, { .children_offset=28168, .match_offset=0 }, { .children_offset=0, .match_offset=85900 }, { .children_offset=28170, .match_offset=0 }, { .children_offset=28172, .match_offset=0 }, { .children_offset=28174, .match_offset=0 }, { .children_offset=28176, .match_offset=0 }, { .children_offset=0, .match_offset=39443 }, { .children_offset=28178, .match_offset=0 }, { .children_offset=28180, .match_offset=0 }, { .children_offset=28182, .match_offset=0 }, { .children_offset=28184, .match_offset=0 }, { .children_offset=0, .match_offset=73484 }, { .children_offset=28186, .match_offset=0 }, { .children_offset=28190, .match_offset=0 }, { .children_offset=28192, .match_offset=26579 }, { .children_offset=0, .match_offset=29068 }, { .children_offset=0, .match_offset=18 }, { .children_offset=28194, .match_offset=0 }, { .children_offset=0, .match_offset=123786 }, { .children_offset=28196, .match_offset=12769 }, { .children_offset=28202, .match_offset=0 }, { .children_offset=28204, .match_offset=0 }, { .children_offset=28206, .match_offset=0 }, { .children_offset=0, .match_offset=59162 }, { .children_offset=28208, .match_offset=0 }, { .children_offset=28210, .match_offset=0 }, { .children_offset=0, .match_offset=129982 }, { .children_offset=28212, .match_offset=30502 }, { .children_offset=28217, .match_offset=0 }, { .children_offset=0, .match_offset=37254 }, { .children_offset=28220, .match_offset=0 }, { .children_offset=28222, .match_offset=0 }, { .children_offset=28224, .match_offset=0 }, { .children_offset=28226, .match_offset=0 }, { .children_offset=0, .match_offset=55798 }, { .children_offset=28228, .match_offset=0 }, { .children_offset=28230, .match_offset=0 }, { .children_offset=28232, .match_offset=0 }, { .children_offset=28234, .match_offset=0 }, { .children_offset=0, .match_offset=131417 }, { .children_offset=28236, .match_offset=0 }, { .children_offset=28238, .match_offset=0 }, { .children_offset=28240, .match_offset=0 }, { .children_offset=0, .match_offset=16003 }, { .children_offset=28242, .match_offset=0 }, { .children_offset=28244, .match_offset=0 }, { .children_offset=28246, .match_offset=0 }, { .children_offset=0, .match_offset=33425 }, { .children_offset=28248, .match_offset=0 }, { .children_offset=28251, .match_offset=0 }, { .children_offset=28253, .match_offset=0 }, { .children_offset=0, .match_offset=124899 }, { .children_offset=28255, .match_offset=0 }, { .children_offset=0, .match_offset=362 }, { .children_offset=28257, .match_offset=0 }, { .children_offset=0, .match_offset=103348 }, { .children_offset=28259, .match_offset=0 }, { .children_offset=0, .match_offset=77343 }, { .children_offset=28262, .match_offset=0 }, { .children_offset=28265, .match_offset=0 }, { .children_offset=0, .match_offset=43096 }, { .children_offset=28267, .match_offset=0 }, { .children_offset=28269, .match_offset=0 }, { .children_offset=28271, .match_offset=0 }, { .children_offset=28273, .match_offset=0 }, { .children_offset=28275, .match_offset=0 }, { .children_offset=0, .match_offset=42494 }, { .children_offset=28277, .match_offset=49784 }, { .children_offset=28281, .match_offset=0 }, { .children_offset=28285, .match_offset=0 }, { .children_offset=28287, .match_offset=0 }, { .children_offset=28289, .match_offset=0 }, { .children_offset=28291, .match_offset=0 }, { .children_offset=28293, .match_offset=0 }, { .children_offset=28295, .match_offset=0 }, { .children_offset=0, .match_offset=33461 }, { .children_offset=28297, .match_offset=0 }, { .children_offset=28299, .match_offset=0 }, { .children_offset=28301, .match_offset=0 }, { .children_offset=0, .match_offset=88781 }, { .children_offset=28303, .match_offset=0 }, { .children_offset=28306, .match_offset=0 }, { .children_offset=28308, .match_offset=0 }, { .children_offset=0, .match_offset=104320 }, { .children_offset=28310, .match_offset=0 }, { .children_offset=28312, .match_offset=0 }, { .children_offset=28314, .match_offset=0 }, { .children_offset=0, .match_offset=131827 }, { .children_offset=28316, .match_offset=0 }, { .children_offset=0, .match_offset=124561 }, { .children_offset=28318, .match_offset=0 }, { .children_offset=28320, .match_offset=0 }, { .children_offset=28322, .match_offset=0 }, { .children_offset=0, .match_offset=30005 }, { .children_offset=28324, .match_offset=58204 }, { .children_offset=28333, .match_offset=0 }, { .children_offset=28335, .match_offset=0 }, { .children_offset=0, .match_offset=84778 }, { .children_offset=28337, .match_offset=0 }, { .children_offset=28339, .match_offset=0 }, { .children_offset=28341, .match_offset=0 }, { .children_offset=0, .match_offset=33702 }, { .children_offset=28343, .match_offset=0 }, { .children_offset=28345, .match_offset=0 }, { .children_offset=28347, .match_offset=0 }, { .children_offset=0, .match_offset=34709 }, { .children_offset=28349, .match_offset=0 }, { .children_offset=28352, .match_offset=0 }, { .children_offset=28354, .match_offset=0 }, { .children_offset=28356, .match_offset=0 }, { .children_offset=0, .match_offset=39085 }, { .children_offset=28358, .match_offset=0 }, { .children_offset=28360, .match_offset=0 }, { .children_offset=0, .match_offset=21824 }, { .children_offset=28362, .match_offset=0 }, { .children_offset=0, .match_offset=60160 }, { .children_offset=28364, .match_offset=0 }, { .children_offset=28366, .match_offset=0 }, { .children_offset=28368, .match_offset=0 }, { .children_offset=28370, .match_offset=0 }, { .children_offset=28372, .match_offset=0 }, { .children_offset=0, .match_offset=2126 }, { .children_offset=28374, .match_offset=0 }, { .children_offset=28376, .match_offset=0 }, { .children_offset=28378, .match_offset=0 }, { .children_offset=28380, .match_offset=0 }, { .children_offset=0, .match_offset=85936 }, { .children_offset=28382, .match_offset=0 }, { .children_offset=0, .match_offset=65375 }, { .children_offset=28384, .match_offset=0 }, { .children_offset=28387, .match_offset=0 }, { .children_offset=28389, .match_offset=0 }, { .children_offset=28391, .match_offset=0 }, { .children_offset=0, .match_offset=131571 }, { .children_offset=28393, .match_offset=0 }, { .children_offset=28395, .match_offset=0 }, { .children_offset=28397, .match_offset=0 }, { .children_offset=0, .match_offset=122057 }, { .children_offset=28399, .match_offset=0 }, { .children_offset=28403, .match_offset=0 }, { .children_offset=28406, .match_offset=0 }, { .children_offset=28408, .match_offset=0 }, { .children_offset=0, .match_offset=43935 }, { .children_offset=28410, .match_offset=0 }, { .children_offset=28412, .match_offset=0 }, { .children_offset=28414, .match_offset=0 }, { .children_offset=28416, .match_offset=0 }, { .children_offset=0, .match_offset=40198 }, { .children_offset=28418, .match_offset=50575 }, { .children_offset=28420, .match_offset=0 }, { .children_offset=28422, .match_offset=0 }, { .children_offset=0, .match_offset=125724 }, { .children_offset=28424, .match_offset=134599 }, { .children_offset=28426, .match_offset=0 }, { .children_offset=28428, .match_offset=0 }, { .children_offset=0, .match_offset=134599 }, { .children_offset=28430, .match_offset=25698 }, { .children_offset=28440, .match_offset=0 }, { .children_offset=28443, .match_offset=0 }, { .children_offset=28445, .match_offset=0 }, { .children_offset=28447, .match_offset=0 }, { .children_offset=0, .match_offset=87126 }, { .children_offset=0, .match_offset=64524 }, { .children_offset=28449, .match_offset=0 }, { .children_offset=28451, .match_offset=0 }, { .children_offset=0, .match_offset=79586 }, { .children_offset=28453, .match_offset=0 }, { .children_offset=28455, .match_offset=0 }, { .children_offset=28458, .match_offset=0 }, { .children_offset=0, .match_offset=123571 }, { .children_offset=28461, .match_offset=0 }, { .children_offset=28463, .match_offset=0 }, { .children_offset=28465, .match_offset=0 }, { .children_offset=0, .match_offset=42236 }, { .children_offset=28467, .match_offset=0 }, { .children_offset=28469, .match_offset=0 }, { .children_offset=0, .match_offset=130963 }, { .children_offset=28471, .match_offset=0 }, { .children_offset=28474, .match_offset=0 }, { .children_offset=28476, .match_offset=0 }, { .children_offset=28478, .match_offset=0 }, { .children_offset=0, .match_offset=34906 }, { .children_offset=0, .match_offset=38683 }, { .children_offset=28480, .match_offset=0 }, { .children_offset=28482, .match_offset=0 }, { .children_offset=28484, .match_offset=0 }, { .children_offset=28486, .match_offset=0 }, { .children_offset=28488, .match_offset=0 }, { .children_offset=28490, .match_offset=0 }, { .children_offset=0, .match_offset=1159 }, { .children_offset=28492, .match_offset=0 }, { .children_offset=28494, .match_offset=125015 }, { .children_offset=0, .match_offset=12519 }, { .children_offset=28496, .match_offset=53996 }, { .children_offset=28499, .match_offset=0 }, { .children_offset=28501, .match_offset=0 }, { .children_offset=0, .match_offset=13496 }, { .children_offset=28503, .match_offset=0 }, { .children_offset=28505, .match_offset=0 }, { .children_offset=0, .match_offset=21890 }, { .children_offset=28507, .match_offset=0 }, { .children_offset=28509, .match_offset=0 }, { .children_offset=28511, .match_offset=0 }, { .children_offset=28513, .match_offset=0 }, { .children_offset=28515, .match_offset=0 }, { .children_offset=28517, .match_offset=0 }, { .children_offset=28519, .match_offset=0 }, { .children_offset=0, .match_offset=68068 }, { .children_offset=28521, .match_offset=0 }, { .children_offset=28523, .match_offset=0 }, { .children_offset=0, .match_offset=61542 }, { .children_offset=0, .match_offset=40466 }, { .children_offset=28525, .match_offset=21796 }, { .children_offset=28529, .match_offset=0 }, { .children_offset=0, .match_offset=68963 }, { .children_offset=28531, .match_offset=0 }, { .children_offset=0, .match_offset=123134 }, { .children_offset=28533, .match_offset=0 }, { .children_offset=28535, .match_offset=0 }, { .children_offset=28537, .match_offset=77773 }, { .children_offset=28541, .match_offset=0 }, { .children_offset=28543, .match_offset=0 }, { .children_offset=28545, .match_offset=0 }, { .children_offset=0, .match_offset=58357 }, { .children_offset=28547, .match_offset=0 }, { .children_offset=28549, .match_offset=0 }, { .children_offset=28551, .match_offset=0 }, { .children_offset=0, .match_offset=104200 }, { .children_offset=28553, .match_offset=0 }, { .children_offset=0, .match_offset=42040 }, { .children_offset=28555, .match_offset=11484 }, { .children_offset=28557, .match_offset=0 }, { .children_offset=0, .match_offset=50690 }, { .children_offset=28559, .match_offset=37706 }, { .children_offset=28569, .match_offset=0 }, { .children_offset=28571, .match_offset=0 }, { .children_offset=28573, .match_offset=0 }, { .children_offset=0, .match_offset=74191 }, { .children_offset=28575, .match_offset=0 }, { .children_offset=28578, .match_offset=0 }, { .children_offset=28581, .match_offset=0 }, { .children_offset=28583, .match_offset=0 }, { .children_offset=28585, .match_offset=0 }, { .children_offset=0, .match_offset=12347 }, { .children_offset=28587, .match_offset=0 }, { .children_offset=28589, .match_offset=131616 }, { .children_offset=28591, .match_offset=0 }, { .children_offset=28593, .match_offset=0 }, { .children_offset=28595, .match_offset=0 }, { .children_offset=28597, .match_offset=0 }, { .children_offset=28599, .match_offset=0 }, { .children_offset=28601, .match_offset=0 }, { .children_offset=28603, .match_offset=0 }, { .children_offset=28605, .match_offset=0 }, { .children_offset=0, .match_offset=29819 }, { .children_offset=28607, .match_offset=16184 }, { .children_offset=28609, .match_offset=0 }, { .children_offset=0, .match_offset=114148 }, { .children_offset=0, .match_offset=9025 }, { .children_offset=28611, .match_offset=114976 }, { .children_offset=28615, .match_offset=0 }, { .children_offset=0, .match_offset=85938 }, { .children_offset=0, .match_offset=27240 }, { .children_offset=0, .match_offset=57323 }, { .children_offset=0, .match_offset=42367 }, { .children_offset=28620, .match_offset=0 }, { .children_offset=0, .match_offset=133296 }, { .children_offset=0, .match_offset=89989 }, { .children_offset=28622, .match_offset=0 }, { .children_offset=28626, .match_offset=0 }, { .children_offset=28628, .match_offset=0 }, { .children_offset=28630, .match_offset=0 }, { .children_offset=0, .match_offset=129954 }, { .children_offset=28632, .match_offset=0 }, { .children_offset=28634, .match_offset=0 }, { .children_offset=28636, .match_offset=0 }, { .children_offset=0, .match_offset=74557 }, { .children_offset=28638, .match_offset=0 }, { .children_offset=28640, .match_offset=0 }, { .children_offset=28642, .match_offset=0 }, { .children_offset=0, .match_offset=84778 }, { .children_offset=28644, .match_offset=0 }, { .children_offset=28647, .match_offset=0 }, { .children_offset=28649, .match_offset=0 }, { .children_offset=0, .match_offset=4893 }, { .children_offset=28651, .match_offset=0 }, { .children_offset=28653, .match_offset=0 }, { .children_offset=28655, .match_offset=0 }, { .children_offset=0, .match_offset=74608 }, { .children_offset=28657, .match_offset=0 }, { .children_offset=28659, .match_offset=0 }, { .children_offset=0, .match_offset=15279 }, { .children_offset=28661, .match_offset=0 }, { .children_offset=28663, .match_offset=0 }, { .children_offset=28665, .match_offset=0 }, { .children_offset=0, .match_offset=37620 }, { .children_offset=0, .match_offset=22504 }, { .children_offset=28667, .match_offset=0 }, { .children_offset=28675, .match_offset=0 }, { .children_offset=28677, .match_offset=0 }, { .children_offset=28679, .match_offset=0 }, { .children_offset=0, .match_offset=102787 }, { .children_offset=28681, .match_offset=0 }, { .children_offset=28683, .match_offset=0 }, { .children_offset=28685, .match_offset=0 }, { .children_offset=28687, .match_offset=0 }, { .children_offset=28689, .match_offset=0 }, { .children_offset=0, .match_offset=69030 }, { .children_offset=28691, .match_offset=124716 }, { .children_offset=0, .match_offset=87152 }, { .children_offset=28694, .match_offset=0 }, { .children_offset=28696, .match_offset=0 }, { .children_offset=28698, .match_offset=0 }, { .children_offset=0, .match_offset=22598 }, { .children_offset=0, .match_offset=61604 }, { .children_offset=28700, .match_offset=0 }, { .children_offset=28702, .match_offset=0 }, { .children_offset=0, .match_offset=34582 }, { .children_offset=28704, .match_offset=0 }, { .children_offset=28707, .match_offset=0 }, { .children_offset=28709, .match_offset=0 }, { .children_offset=0, .match_offset=62285 }, { .children_offset=28711, .match_offset=0 }, { .children_offset=28713, .match_offset=0 }, { .children_offset=0, .match_offset=35874 }, { .children_offset=0, .match_offset=124964 }, { .children_offset=28715, .match_offset=45096 }, { .children_offset=28720, .match_offset=125194 }, { .children_offset=28722, .match_offset=0 }, { .children_offset=28724, .match_offset=0 }, { .children_offset=28726, .match_offset=0 }, { .children_offset=28728, .match_offset=0 }, { .children_offset=0, .match_offset=14436 }, { .children_offset=28730, .match_offset=0 }, { .children_offset=28732, .match_offset=0 }, { .children_offset=28734, .match_offset=0 }, { .children_offset=28736, .match_offset=0 }, { .children_offset=28738, .match_offset=0 }, { .children_offset=28740, .match_offset=0 }, { .children_offset=28742, .match_offset=0 }, { .children_offset=28744, .match_offset=0 }, { .children_offset=0, .match_offset=111510 }, { .children_offset=28746, .match_offset=0 }, { .children_offset=28748, .match_offset=0 }, { .children_offset=0, .match_offset=44774 }, { .children_offset=28750, .match_offset=0 }, { .children_offset=28752, .match_offset=0 }, { .children_offset=28754, .match_offset=0 }, { .children_offset=0, .match_offset=87449 }, { .children_offset=0, .match_offset=52259 }, { .children_offset=28756, .match_offset=30757 }, { .children_offset=28758, .match_offset=0 }, { .children_offset=28760, .match_offset=0 }, { .children_offset=0, .match_offset=70846 }, { .children_offset=28763, .match_offset=0 }, { .children_offset=28765, .match_offset=0 }, { .children_offset=0, .match_offset=13379 }, { .children_offset=28767, .match_offset=89673 }, { .children_offset=28770, .match_offset=0 }, { .children_offset=28772, .match_offset=113933 }, { .children_offset=28774, .match_offset=0 }, { .children_offset=0, .match_offset=11928 }, { .children_offset=28776, .match_offset=0 }, { .children_offset=0, .match_offset=21712 }, { .children_offset=28778, .match_offset=63216 }, { .children_offset=0, .match_offset=88661 }, { .children_offset=0, .match_offset=37622 }, { .children_offset=0, .match_offset=8947 }, { .children_offset=28787, .match_offset=52636 }, { .children_offset=28791, .match_offset=48198 }, { .children_offset=28794, .match_offset=0 }, { .children_offset=28796, .match_offset=0 }, { .children_offset=0, .match_offset=132148 }, { .children_offset=28798, .match_offset=0 }, { .children_offset=28800, .match_offset=0 }, { .children_offset=0, .match_offset=20451 }, { .children_offset=28802, .match_offset=0 }, { .children_offset=28804, .match_offset=0 }, { .children_offset=0, .match_offset=42018 }, { .children_offset=0, .match_offset=52196 }, { .children_offset=28806, .match_offset=33948 }, { .children_offset=28811, .match_offset=33766 }, { .children_offset=28813, .match_offset=0 }, { .children_offset=28815, .match_offset=0 }, { .children_offset=28817, .match_offset=0 }, { .children_offset=0, .match_offset=11089 }, { .children_offset=0, .match_offset=64982 }, { .children_offset=28819, .match_offset=0 }, { .children_offset=28821, .match_offset=0 }, { .children_offset=0, .match_offset=15306 }, { .children_offset=28823, .match_offset=0 }, { .children_offset=0, .match_offset=114325 }, { .children_offset=28827, .match_offset=0 }, { .children_offset=0, .match_offset=113048 }, { .children_offset=0, .match_offset=131237 }, { .children_offset=28829, .match_offset=112716 }, { .children_offset=28832, .match_offset=0 }, { .children_offset=28834, .match_offset=0 }, { .children_offset=28836, .match_offset=0 }, { .children_offset=28838, .match_offset=0 }, { .children_offset=0, .match_offset=86683 }, { .children_offset=0, .match_offset=73796 }, { .children_offset=28840, .match_offset=85953 }, { .children_offset=0, .match_offset=61784 }, { .children_offset=28842, .match_offset=134856 }, { .children_offset=28847, .match_offset=0 }, { .children_offset=28849, .match_offset=85406 }, { .children_offset=0, .match_offset=1534 }, { .children_offset=0, .match_offset=14833 }, { .children_offset=28851, .match_offset=60154 }, { .children_offset=0, .match_offset=28262 }, { .children_offset=0, .match_offset=26902 }, { .children_offset=28853, .match_offset=103416 }, { .children_offset=28857, .match_offset=0 }, { .children_offset=28860, .match_offset=0 }, { .children_offset=0, .match_offset=43790 }, { .children_offset=0, .match_offset=135533 }, { .children_offset=28862, .match_offset=0 }, { .children_offset=28864, .match_offset=0 }, { .children_offset=28866, .match_offset=0 }, { .children_offset=0, .match_offset=39087 }, { .children_offset=0, .match_offset=61229 }, { .children_offset=28868, .match_offset=117594 }, { .children_offset=28872, .match_offset=0 }, { .children_offset=28874, .match_offset=0 }, { .children_offset=0, .match_offset=6181 }, { .children_offset=28876, .match_offset=0 }, { .children_offset=28878, .match_offset=0 }, { .children_offset=0, .match_offset=134574 }, { .children_offset=28880, .match_offset=0 }, { .children_offset=0, .match_offset=38970 }, { .children_offset=28882, .match_offset=16888 }, { .children_offset=28899, .match_offset=0 }, { .children_offset=0, .match_offset=10764 }, { .children_offset=0, .match_offset=28426 }, { .children_offset=28903, .match_offset=0 }, { .children_offset=0, .match_offset=20211 }, { .children_offset=28905, .match_offset=0 }, { .children_offset=28908, .match_offset=0 }, { .children_offset=28910, .match_offset=0 }, { .children_offset=28912, .match_offset=0 }, { .children_offset=28914, .match_offset=119628 }, { .children_offset=28916, .match_offset=110573 }, { .children_offset=28918, .match_offset=0 }, { .children_offset=28920, .match_offset=0 }, { .children_offset=28922, .match_offset=0 }, { .children_offset=28924, .match_offset=0 }, { .children_offset=0, .match_offset=119433 }, { .children_offset=0, .match_offset=6554 }, { .children_offset=28926, .match_offset=0 }, { .children_offset=28928, .match_offset=0 }, { .children_offset=28930, .match_offset=0 }, { .children_offset=28932, .match_offset=0 }, { .children_offset=28934, .match_offset=0 }, { .children_offset=28936, .match_offset=0 }, { .children_offset=28938, .match_offset=0 }, { .children_offset=0, .match_offset=27246 }, { .children_offset=28940, .match_offset=16425 }, { .children_offset=28944, .match_offset=0 }, { .children_offset=0, .match_offset=30547 }, { .children_offset=28946, .match_offset=0 }, { .children_offset=28948, .match_offset=0 }, { .children_offset=28950, .match_offset=0 }, { .children_offset=28952, .match_offset=0 }, { .children_offset=28954, .match_offset=0 }, { .children_offset=28956, .match_offset=0 }, { .children_offset=28958, .match_offset=0 }, { .children_offset=0, .match_offset=28326 }, { .children_offset=28960, .match_offset=0 }, { .children_offset=28965, .match_offset=0 }, { .children_offset=0, .match_offset=5376 }, { .children_offset=28967, .match_offset=0 }, { .children_offset=28970, .match_offset=0 }, { .children_offset=0, .match_offset=12478 }, { .children_offset=28972, .match_offset=0 }, { .children_offset=28974, .match_offset=0 }, { .children_offset=0, .match_offset=122672 }, { .children_offset=28976, .match_offset=0 }, { .children_offset=28978, .match_offset=0 }, { .children_offset=28980, .match_offset=0 }, { .children_offset=0, .match_offset=16205 }, { .children_offset=28982, .match_offset=0 }, { .children_offset=28984, .match_offset=119276 }, { .children_offset=28986, .match_offset=0 }, { .children_offset=28988, .match_offset=0 }, { .children_offset=28990, .match_offset=0 }, { .children_offset=28992, .match_offset=0 }, { .children_offset=0, .match_offset=63174 }, { .children_offset=28994, .match_offset=38717 }, { .children_offset=28999, .match_offset=0 }, { .children_offset=0, .match_offset=105803 }, { .children_offset=0, .match_offset=10948 }, { .children_offset=29001, .match_offset=20913 }, { .children_offset=0, .match_offset=109183 }, { .children_offset=29003, .match_offset=102603 }, { .children_offset=29006, .match_offset=0 }, { .children_offset=0, .match_offset=21712 }, { .children_offset=29008, .match_offset=0 }, { .children_offset=29010, .match_offset=0 }, { .children_offset=0, .match_offset=35852 }, { .children_offset=29012, .match_offset=0 }, { .children_offset=29014, .match_offset=113064 }, { .children_offset=29018, .match_offset=0 }, { .children_offset=0, .match_offset=43108 }, { .children_offset=29020, .match_offset=0 }, { .children_offset=29022, .match_offset=0 }, { .children_offset=29024, .match_offset=0 }, { .children_offset=29026, .match_offset=0 }, { .children_offset=0, .match_offset=85246 }, { .children_offset=29028, .match_offset=0 }, { .children_offset=29030, .match_offset=0 }, { .children_offset=0, .match_offset=58403 }, { .children_offset=29032, .match_offset=0 }, { .children_offset=29034, .match_offset=0 }, { .children_offset=0, .match_offset=26266 }, { .children_offset=29036, .match_offset=0 }, { .children_offset=29040, .match_offset=0 }, { .children_offset=0, .match_offset=64432 }, { .children_offset=29042, .match_offset=0 }, { .children_offset=29044, .match_offset=0 }, { .children_offset=29046, .match_offset=0 }, { .children_offset=29048, .match_offset=0 }, { .children_offset=29050, .match_offset=0 }, { .children_offset=0, .match_offset=25369 }, { .children_offset=29052, .match_offset=0 }, { .children_offset=29055, .match_offset=0 }, { .children_offset=29057, .match_offset=0 }, { .children_offset=0, .match_offset=63438 }, { .children_offset=0, .match_offset=136158 }, { .children_offset=29059, .match_offset=5673 }, { .children_offset=29063, .match_offset=0 }, { .children_offset=29065, .match_offset=0 }, { .children_offset=29067, .match_offset=0 }, { .children_offset=29069, .match_offset=0 }, { .children_offset=0, .match_offset=31077 }, { .children_offset=29071, .match_offset=0 }, { .children_offset=29073, .match_offset=0 }, { .children_offset=29075, .match_offset=74206 }, { .children_offset=29077, .match_offset=0 }, { .children_offset=29079, .match_offset=0 }, { .children_offset=29081, .match_offset=0 }, { .children_offset=0, .match_offset=55024 }, { .children_offset=0, .match_offset=65062 }, { .children_offset=29083, .match_offset=118566 }, { .children_offset=29087, .match_offset=0 }, { .children_offset=0, .match_offset=72897 }, { .children_offset=29090, .match_offset=0 }, { .children_offset=0, .match_offset=38875 }, { .children_offset=29092, .match_offset=0 }, { .children_offset=0, .match_offset=80488 }, { .children_offset=29095, .match_offset=0 }, { .children_offset=29097, .match_offset=0 }, { .children_offset=0, .match_offset=113986 }, { .children_offset=0, .match_offset=67754 }, { .children_offset=29099, .match_offset=0 }, { .children_offset=29106, .match_offset=0 }, { .children_offset=29108, .match_offset=0 }, { .children_offset=29110, .match_offset=0 }, { .children_offset=0, .match_offset=77766 }, { .children_offset=29112, .match_offset=0 }, { .children_offset=0, .match_offset=88734 }, { .children_offset=29114, .match_offset=129340 }, { .children_offset=29116, .match_offset=0 }, { .children_offset=29118, .match_offset=0 }, { .children_offset=29120, .match_offset=0 }, { .children_offset=29122, .match_offset=0 }, { .children_offset=0, .match_offset=7071 }, { .children_offset=29124, .match_offset=0 }, { .children_offset=29126, .match_offset=0 }, { .children_offset=0, .match_offset=37180 }, { .children_offset=29128, .match_offset=0 }, { .children_offset=29130, .match_offset=0 }, { .children_offset=29132, .match_offset=0 }, { .children_offset=29134, .match_offset=0 }, { .children_offset=0, .match_offset=71677 }, { .children_offset=29136, .match_offset=0 }, { .children_offset=29138, .match_offset=0 }, { .children_offset=29140, .match_offset=0 }, { .children_offset=29142, .match_offset=0 }, { .children_offset=29144, .match_offset=0 }, { .children_offset=0, .match_offset=65493 }, { .children_offset=29146, .match_offset=87703 }, { .children_offset=0, .match_offset=38490 }, { .children_offset=0, .match_offset=89529 }, { .children_offset=0, .match_offset=104110 }, { .children_offset=29151, .match_offset=0 }, { .children_offset=29153, .match_offset=0 }, { .children_offset=29155, .match_offset=0 }, { .children_offset=29157, .match_offset=0 }, { .children_offset=29159, .match_offset=0 }, { .children_offset=0, .match_offset=66223 }, { .children_offset=29161, .match_offset=0 }, { .children_offset=29166, .match_offset=60563 }, { .children_offset=0, .match_offset=133578 }, { .children_offset=29168, .match_offset=0 }, { .children_offset=0, .match_offset=28418 }, { .children_offset=0, .match_offset=21157 }, { .children_offset=29171, .match_offset=0 }, { .children_offset=29173, .match_offset=0 }, { .children_offset=29175, .match_offset=0 }, { .children_offset=29177, .match_offset=0 }, { .children_offset=29179, .match_offset=0 }, { .children_offset=0, .match_offset=74484 }, { .children_offset=29181, .match_offset=0 }, { .children_offset=29185, .match_offset=0 }, { .children_offset=29187, .match_offset=0 }, { .children_offset=29189, .match_offset=0 }, { .children_offset=0, .match_offset=113992 }, { .children_offset=29191, .match_offset=0 }, { .children_offset=0, .match_offset=72 }, { .children_offset=29194, .match_offset=0 }, { .children_offset=29196, .match_offset=0 }, { .children_offset=0, .match_offset=24281 }, { .children_offset=0, .match_offset=50197 }, { .children_offset=29198, .match_offset=0 }, { .children_offset=29202, .match_offset=57926 }, { .children_offset=29204, .match_offset=0 }, { .children_offset=29206, .match_offset=0 }, { .children_offset=29208, .match_offset=0 }, { .children_offset=29210, .match_offset=0 }, { .children_offset=29212, .match_offset=0 }, { .children_offset=29214, .match_offset=0 }, { .children_offset=29216, .match_offset=0 }, { .children_offset=0, .match_offset=7752 }, { .children_offset=0, .match_offset=46868 }, { .children_offset=0, .match_offset=11480 }, { .children_offset=0, .match_offset=134459 }, { .children_offset=29218, .match_offset=0 }, { .children_offset=29220, .match_offset=0 }, { .children_offset=0, .match_offset=104115 }, { .children_offset=29222, .match_offset=0 }, { .children_offset=29228, .match_offset=0 }, { .children_offset=0, .match_offset=78198 }, { .children_offset=29230, .match_offset=0 }, { .children_offset=29232, .match_offset=0 }, { .children_offset=29236, .match_offset=0 }, { .children_offset=0, .match_offset=124599 }, { .children_offset=0, .match_offset=118466 }, { .children_offset=0, .match_offset=21185 }, { .children_offset=29238, .match_offset=0 }, { .children_offset=29241, .match_offset=0 }, { .children_offset=0, .match_offset=13319 }, { .children_offset=29243, .match_offset=0 }, { .children_offset=29245, .match_offset=0 }, { .children_offset=0, .match_offset=116040 }, { .children_offset=29247, .match_offset=10246 }, { .children_offset=0, .match_offset=25583 }, { .children_offset=0, .match_offset=61004 }, { .children_offset=29249, .match_offset=34164 }, { .children_offset=29256, .match_offset=61519 }, { .children_offset=0, .match_offset=35115 }, { .children_offset=0, .match_offset=123136 }, { .children_offset=0, .match_offset=127321 }, { .children_offset=29260, .match_offset=0 }, { .children_offset=29266, .match_offset=119374 }, { .children_offset=29268, .match_offset=0 }, { .children_offset=29270, .match_offset=86287 }, { .children_offset=0, .match_offset=78975 }, { .children_offset=29272, .match_offset=33808 }, { .children_offset=0, .match_offset=76958 }, { .children_offset=0, .match_offset=33390 }, { .children_offset=29276, .match_offset=0 }, { .children_offset=0, .match_offset=130873 }, { .children_offset=29278, .match_offset=38881 }, { .children_offset=29280, .match_offset=0 }, { .children_offset=0, .match_offset=116323 }, { .children_offset=29282, .match_offset=59255 }, { .children_offset=29285, .match_offset=0 }, { .children_offset=29287, .match_offset=0 }, { .children_offset=0, .match_offset=118254 }, { .children_offset=0, .match_offset=59117 }, { .children_offset=0, .match_offset=136219 }, { .children_offset=29289, .match_offset=40824 }, { .children_offset=0, .match_offset=65034 }, { .children_offset=0, .match_offset=30056 }, { .children_offset=29292, .match_offset=0 }, { .children_offset=29294, .match_offset=25766 }, { .children_offset=0, .match_offset=30746 }, { .children_offset=29296, .match_offset=5634 }, { .children_offset=0, .match_offset=109496 }, { .children_offset=0, .match_offset=78601 }, { .children_offset=0, .match_offset=74461 }, { .children_offset=29300, .match_offset=1129 }, { .children_offset=29306, .match_offset=89355 }, { .children_offset=0, .match_offset=131866 }, { .children_offset=0, .match_offset=103707 }, { .children_offset=0, .match_offset=64761 }, { .children_offset=29309, .match_offset=11953 }, { .children_offset=0, .match_offset=27039 }, { .children_offset=0, .match_offset=129623 }, { .children_offset=0, .match_offset=41918 }, { .children_offset=29311, .match_offset=89335 }, { .children_offset=0, .match_offset=57330 }, { .children_offset=0, .match_offset=6343 }, { .children_offset=0, .match_offset=22828 }, { .children_offset=29315, .match_offset=109516 }, { .children_offset=29332, .match_offset=0 }, { .children_offset=0, .match_offset=55771 }, { .children_offset=0, .match_offset=44962 }, { .children_offset=0, .match_offset=134987 }, { .children_offset=0, .match_offset=22046 }, { .children_offset=0, .match_offset=125096 }, { .children_offset=0, .match_offset=41920 }, { .children_offset=0, .match_offset=74549 }, { .children_offset=29340, .match_offset=0 }, { .children_offset=0, .match_offset=44501 }, { .children_offset=29342, .match_offset=0 }, { .children_offset=29344, .match_offset=0 }, { .children_offset=29346, .match_offset=103773 }, { .children_offset=29350, .match_offset=0 }, { .children_offset=0, .match_offset=122543 }, { .children_offset=29352, .match_offset=0 }, { .children_offset=29354, .match_offset=0 }, { .children_offset=29356, .match_offset=0 }, { .children_offset=29358, .match_offset=0 }, { .children_offset=0, .match_offset=34969 }, { .children_offset=29360, .match_offset=0 }, { .children_offset=29362, .match_offset=0 }, { .children_offset=29364, .match_offset=0 }, { .children_offset=29366, .match_offset=0 }, { .children_offset=0, .match_offset=8955 }, { .children_offset=29368, .match_offset=62274 }, { .children_offset=29374, .match_offset=0 }, { .children_offset=29376, .match_offset=0 }, { .children_offset=29378, .match_offset=0 }, { .children_offset=29380, .match_offset=0 }, { .children_offset=29382, .match_offset=0 }, { .children_offset=0, .match_offset=125378 }, { .children_offset=29384, .match_offset=0 }, { .children_offset=29386, .match_offset=0 }, { .children_offset=0, .match_offset=134493 }, { .children_offset=29388, .match_offset=0 }, { .children_offset=29390, .match_offset=0 }, { .children_offset=0, .match_offset=20394 }, { .children_offset=29392, .match_offset=0 }, { .children_offset=29395, .match_offset=0 }, { .children_offset=29397, .match_offset=127619 }, { .children_offset=29399, .match_offset=0 }, { .children_offset=29401, .match_offset=0 }, { .children_offset=29403, .match_offset=0 }, { .children_offset=29405, .match_offset=0 }, { .children_offset=29407, .match_offset=0 }, { .children_offset=0, .match_offset=67852 }, { .children_offset=29409, .match_offset=0 }, { .children_offset=0, .match_offset=90218 }, { .children_offset=29411, .match_offset=0 }, { .children_offset=29413, .match_offset=0 }, { .children_offset=29415, .match_offset=0 }, { .children_offset=0, .match_offset=103709 }, { .children_offset=29417, .match_offset=37241 }, { .children_offset=0, .match_offset=122590 }, { .children_offset=0, .match_offset=109288 }, { .children_offset=29422, .match_offset=0 }, { .children_offset=29424, .match_offset=125694 }, { .children_offset=29426, .match_offset=0 }, { .children_offset=29435, .match_offset=0 }, { .children_offset=29438, .match_offset=0 }, { .children_offset=29440, .match_offset=0 }, { .children_offset=29442, .match_offset=0 }, { .children_offset=29444, .match_offset=0 }, { .children_offset=29446, .match_offset=0 }, { .children_offset=0, .match_offset=134273 }, { .children_offset=29448, .match_offset=0 }, { .children_offset=29450, .match_offset=0 }, { .children_offset=29452, .match_offset=0 }, { .children_offset=0, .match_offset=37913 }, { .children_offset=29454, .match_offset=0 }, { .children_offset=29456, .match_offset=0 }, { .children_offset=29458, .match_offset=0 }, { .children_offset=29460, .match_offset=0 }, { .children_offset=0, .match_offset=132868 }, { .children_offset=29462, .match_offset=0 }, { .children_offset=29464, .match_offset=0 }, { .children_offset=29466, .match_offset=0 }, { .children_offset=29468, .match_offset=0 }, { .children_offset=29470, .match_offset=0 }, { .children_offset=0, .match_offset=72889 }, { .children_offset=29472, .match_offset=0 }, { .children_offset=29474, .match_offset=0 }, { .children_offset=29476, .match_offset=0 }, { .children_offset=29478, .match_offset=0 }, { .children_offset=0, .match_offset=125835 }, { .children_offset=29480, .match_offset=0 }, { .children_offset=29483, .match_offset=0 }, { .children_offset=29485, .match_offset=0 }, { .children_offset=29487, .match_offset=0 }, { .children_offset=29489, .match_offset=0 }, { .children_offset=29491, .match_offset=0 }, { .children_offset=0, .match_offset=65745 }, { .children_offset=29493, .match_offset=0 }, { .children_offset=29495, .match_offset=0 }, { .children_offset=29497, .match_offset=0 }, { .children_offset=29499, .match_offset=28718 }, { .children_offset=29501, .match_offset=0 }, { .children_offset=29503, .match_offset=0 }, { .children_offset=29505, .match_offset=0 }, { .children_offset=29507, .match_offset=0 }, { .children_offset=0, .match_offset=103476 }, { .children_offset=29509, .match_offset=0 }, { .children_offset=29511, .match_offset=0 }, { .children_offset=29513, .match_offset=0 }, { .children_offset=29515, .match_offset=0 }, { .children_offset=0, .match_offset=55802 }, { .children_offset=29517, .match_offset=0 }, { .children_offset=29520, .match_offset=0 }, { .children_offset=29522, .match_offset=0 }, { .children_offset=0, .match_offset=61691 }, { .children_offset=29524, .match_offset=0 }, { .children_offset=29526, .match_offset=0 }, { .children_offset=29528, .match_offset=0 }, { .children_offset=29530, .match_offset=0 }, { .children_offset=29533, .match_offset=0 }, { .children_offset=29535, .match_offset=0 }, { .children_offset=29537, .match_offset=0 }, { .children_offset=29539, .match_offset=0 }, { .children_offset=0, .match_offset=64248 }, { .children_offset=29541, .match_offset=0 }, { .children_offset=29543, .match_offset=0 }, { .children_offset=29545, .match_offset=0 }, { .children_offset=0, .match_offset=123721 }, { .children_offset=29547, .match_offset=0 }, { .children_offset=29549, .match_offset=0 }, { .children_offset=29551, .match_offset=0 }, { .children_offset=29553, .match_offset=0 }, { .children_offset=29555, .match_offset=0 }, { .children_offset=0, .match_offset=130039 }, { .children_offset=0, .match_offset=77027 }, { .children_offset=0, .match_offset=111182 }, { .children_offset=29557, .match_offset=123268 }, { .children_offset=0, .match_offset=126391 }, { .children_offset=0, .match_offset=12291 }, { .children_offset=29560, .match_offset=0 }, { .children_offset=29563, .match_offset=0 }, { .children_offset=0, .match_offset=64209 }, { .children_offset=29566, .match_offset=0 }, { .children_offset=0, .match_offset=133508 }, { .children_offset=29568, .match_offset=0 }, { .children_offset=29570, .match_offset=0 }, { .children_offset=29572, .match_offset=0 }, { .children_offset=0, .match_offset=8302 }, { .children_offset=29574, .match_offset=113120 }, { .children_offset=29578, .match_offset=0 }, { .children_offset=29580, .match_offset=0 }, { .children_offset=29582, .match_offset=0 }, { .children_offset=29584, .match_offset=0 }, { .children_offset=0, .match_offset=100943 }, { .children_offset=29586, .match_offset=25973 }, { .children_offset=0, .match_offset=78874 }, { .children_offset=29588, .match_offset=102863 }, { .children_offset=29591, .match_offset=34682 }, { .children_offset=0, .match_offset=35101 }, { .children_offset=29593, .match_offset=0 }, { .children_offset=29595, .match_offset=0 }, { .children_offset=29597, .match_offset=0 }, { .children_offset=0, .match_offset=54413 }, { .children_offset=29599, .match_offset=81016 }, { .children_offset=0, .match_offset=2310 }, { .children_offset=29601, .match_offset=45848 }, { .children_offset=29605, .match_offset=0 }, { .children_offset=29610, .match_offset=0 }, { .children_offset=29612, .match_offset=0 }, { .children_offset=0, .match_offset=55962 }, { .children_offset=29614, .match_offset=0 }, { .children_offset=29616, .match_offset=0 }, { .children_offset=29618, .match_offset=0 }, { .children_offset=0, .match_offset=11324 }, { .children_offset=29620, .match_offset=0 }, { .children_offset=0, .match_offset=88759 }, { .children_offset=29623, .match_offset=0 }, { .children_offset=29625, .match_offset=0 }, { .children_offset=0, .match_offset=22194 }, { .children_offset=29627, .match_offset=0 }, { .children_offset=29629, .match_offset=0 }, { .children_offset=29631, .match_offset=0 }, { .children_offset=0, .match_offset=10962 }, { .children_offset=29633, .match_offset=0 }, { .children_offset=29635, .match_offset=72437 }, { .children_offset=29640, .match_offset=0 }, { .children_offset=29642, .match_offset=0 }, { .children_offset=29644, .match_offset=0 }, { .children_offset=29646, .match_offset=0 }, { .children_offset=29648, .match_offset=0 }, { .children_offset=29650, .match_offset=0 }, { .children_offset=29652, .match_offset=0 }, { .children_offset=0, .match_offset=90534 }, { .children_offset=0, .match_offset=20413 }, { .children_offset=29654, .match_offset=78988 }, { .children_offset=0, .match_offset=12336 }, { .children_offset=29656, .match_offset=0 }, { .children_offset=29658, .match_offset=0 }, { .children_offset=29660, .match_offset=0 }, { .children_offset=0, .match_offset=90534 }, { .children_offset=0, .match_offset=71586 }, { .children_offset=0, .match_offset=61782 }, { .children_offset=29662, .match_offset=0 }, { .children_offset=29665, .match_offset=0 }, { .children_offset=0, .match_offset=69338 }, { .children_offset=29667, .match_offset=134954 }, { .children_offset=29669, .match_offset=0 }, { .children_offset=29671, .match_offset=0 }, { .children_offset=29673, .match_offset=0 }, { .children_offset=29675, .match_offset=0 }, { .children_offset=0, .match_offset=12484 }, { .children_offset=29677, .match_offset=0 }, { .children_offset=29679, .match_offset=0 }, { .children_offset=0, .match_offset=12001 }, { .children_offset=0, .match_offset=87012 }, { .children_offset=0, .match_offset=40330 }, { .children_offset=29681, .match_offset=0 }, { .children_offset=29683, .match_offset=0 }, { .children_offset=29685, .match_offset=0 }, { .children_offset=29687, .match_offset=0 }, { .children_offset=29689, .match_offset=0 }, { .children_offset=0, .match_offset=14271 }, { .children_offset=29691, .match_offset=8846 }, { .children_offset=0, .match_offset=132789 }, { .children_offset=29695, .match_offset=0 }, { .children_offset=0, .match_offset=6146 }, { .children_offset=29697, .match_offset=0 }, { .children_offset=0, .match_offset=10271 }, { .children_offset=0, .match_offset=33018 }, { .children_offset=29699, .match_offset=0 }, { .children_offset=29703, .match_offset=0 }, { .children_offset=0, .match_offset=8614 }, { .children_offset=29705, .match_offset=0 }, { .children_offset=29707, .match_offset=0 }, { .children_offset=29709, .match_offset=0 }, { .children_offset=0, .match_offset=90534 }, { .children_offset=29711, .match_offset=0 }, { .children_offset=29713, .match_offset=0 }, { .children_offset=0, .match_offset=42265 }, { .children_offset=29715, .match_offset=110541 }, { .children_offset=29732, .match_offset=0 }, { .children_offset=0, .match_offset=9902 }, { .children_offset=0, .match_offset=27065 }, { .children_offset=0, .match_offset=52590 }, { .children_offset=0, .match_offset=68880 }, { .children_offset=0, .match_offset=125726 }, { .children_offset=0, .match_offset=78664 }, { .children_offset=0, .match_offset=85932 }, { .children_offset=29739, .match_offset=0 }, { .children_offset=29741, .match_offset=0 }, { .children_offset=29743, .match_offset=0 }, { .children_offset=0, .match_offset=133619 }, { .children_offset=29745, .match_offset=0 }, { .children_offset=29749, .match_offset=109227 }, { .children_offset=29754, .match_offset=123412 }, { .children_offset=0, .match_offset=33367 }, { .children_offset=0, .match_offset=42975 }, { .children_offset=29756, .match_offset=0 }, { .children_offset=0, .match_offset=57413 }, { .children_offset=29758, .match_offset=0 }, { .children_offset=29760, .match_offset=0 }, { .children_offset=0, .match_offset=11176 }, { .children_offset=29762, .match_offset=42132 }, { .children_offset=29764, .match_offset=0 }, { .children_offset=29766, .match_offset=0 }, { .children_offset=29768, .match_offset=0 }, { .children_offset=29770, .match_offset=13559 }, { .children_offset=29772, .match_offset=0 }, { .children_offset=29782, .match_offset=0 }, { .children_offset=0, .match_offset=43327 }, { .children_offset=0, .match_offset=135064 }, { .children_offset=0, .match_offset=61853 }, { .children_offset=0, .match_offset=80930 }, { .children_offset=0, .match_offset=66314 }, { .children_offset=0, .match_offset=15489 }, { .children_offset=0, .match_offset=55677 }, { .children_offset=0, .match_offset=108552 }, { .children_offset=0, .match_offset=100957 }, { .children_offset=0, .match_offset=73762 }, { .children_offset=0, .match_offset=78018 }, { .children_offset=0, .match_offset=81853 }, { .children_offset=0, .match_offset=84826 }, { .children_offset=0, .match_offset=53527 }, { .children_offset=0, .match_offset=28716 }, { .children_offset=29790, .match_offset=0 }, { .children_offset=29792, .match_offset=0 }, { .children_offset=0, .match_offset=6943 }, { .children_offset=29794, .match_offset=0 }, { .children_offset=29796, .match_offset=0 }, { .children_offset=29798, .match_offset=0 }, { .children_offset=29800, .match_offset=0 }, { .children_offset=29802, .match_offset=0 }, { .children_offset=0, .match_offset=20203 }, { .children_offset=0, .match_offset=87787 }, { .children_offset=29804, .match_offset=10894 }, { .children_offset=29812, .match_offset=0 }, { .children_offset=29814, .match_offset=74456 }, { .children_offset=29816, .match_offset=0 }, { .children_offset=29818, .match_offset=0 }, { .children_offset=29820, .match_offset=0 }, { .children_offset=29822, .match_offset=0 }, { .children_offset=29824, .match_offset=0 }, { .children_offset=0, .match_offset=37690 }, { .children_offset=29826, .match_offset=0 }, { .children_offset=29829, .match_offset=0 }, { .children_offset=29831, .match_offset=0 }, { .children_offset=29833, .match_offset=0 }, { .children_offset=29835, .match_offset=0 }, { .children_offset=29837, .match_offset=0 }, { .children_offset=0, .match_offset=60166 }, { .children_offset=29839, .match_offset=0 }, { .children_offset=29841, .match_offset=0 }, { .children_offset=29843, .match_offset=0 }, { .children_offset=29845, .match_offset=0 }, { .children_offset=0, .match_offset=111210 }, { .children_offset=0, .match_offset=40613 }, { .children_offset=29847, .match_offset=0 }, { .children_offset=29849, .match_offset=0 }, { .children_offset=0, .match_offset=43165 }, { .children_offset=29851, .match_offset=0 }, { .children_offset=29857, .match_offset=0 }, { .children_offset=29860, .match_offset=0 }, { .children_offset=0, .match_offset=1243 }, { .children_offset=29862, .match_offset=0 }, { .children_offset=29864, .match_offset=0 }, { .children_offset=29866, .match_offset=0 }, { .children_offset=0, .match_offset=72868 }, { .children_offset=29868, .match_offset=0 }, { .children_offset=29870, .match_offset=0 }, { .children_offset=29872, .match_offset=0 }, { .children_offset=29874, .match_offset=0 }, { .children_offset=29876, .match_offset=0 }, { .children_offset=0, .match_offset=118367 }, { .children_offset=29878, .match_offset=0 }, { .children_offset=29880, .match_offset=0 }, { .children_offset=29882, .match_offset=0 }, { .children_offset=29885, .match_offset=89321 }, { .children_offset=29887, .match_offset=0 }, { .children_offset=29889, .match_offset=0 }, { .children_offset=0, .match_offset=136253 }, { .children_offset=29891, .match_offset=0 }, { .children_offset=0, .match_offset=33918 }, { .children_offset=29893, .match_offset=0 }, { .children_offset=29895, .match_offset=0 }, { .children_offset=29897, .match_offset=0 }, { .children_offset=0, .match_offset=125674 }, { .children_offset=29899, .match_offset=0 }, { .children_offset=29902, .match_offset=0 }, { .children_offset=29904, .match_offset=0 }, { .children_offset=29906, .match_offset=0 }, { .children_offset=0, .match_offset=46079 }, { .children_offset=29908, .match_offset=0 }, { .children_offset=29910, .match_offset=0 }, { .children_offset=29912, .match_offset=0 }, { .children_offset=29914, .match_offset=0 }, { .children_offset=0, .match_offset=80420 }, { .children_offset=29916, .match_offset=0 }, { .children_offset=29918, .match_offset=0 }, { .children_offset=29920, .match_offset=0 }, { .children_offset=0, .match_offset=44418 }, { .children_offset=29922, .match_offset=0 }, { .children_offset=0, .match_offset=24354 }, { .children_offset=29925, .match_offset=0 }, { .children_offset=29927, .match_offset=0 }, { .children_offset=29929, .match_offset=0 }, { .children_offset=0, .match_offset=101022 }, { .children_offset=29931, .match_offset=78997 }, { .children_offset=0, .match_offset=114755 }, { .children_offset=29936, .match_offset=0 }, { .children_offset=29939, .match_offset=0 }, { .children_offset=29941, .match_offset=0 }, { .children_offset=0, .match_offset=79725 }, { .children_offset=29943, .match_offset=0 }, { .children_offset=29945, .match_offset=0 }, { .children_offset=0, .match_offset=131529 }, { .children_offset=0, .match_offset=16029 }, { .children_offset=29947, .match_offset=0 }, { .children_offset=29949, .match_offset=0 }, { .children_offset=29951, .match_offset=0 }, { .children_offset=29953, .match_offset=0 }, { .children_offset=29955, .match_offset=0 }, { .children_offset=29957, .match_offset=0 }, { .children_offset=0, .match_offset=30328 }, { .children_offset=29959, .match_offset=59252 }, { .children_offset=0, .match_offset=22568 }, { .children_offset=29961, .match_offset=0 }, { .children_offset=29965, .match_offset=0 }, { .children_offset=29967, .match_offset=0 }, { .children_offset=29969, .match_offset=0 }, { .children_offset=0, .match_offset=16095 }, { .children_offset=29971, .match_offset=0 }, { .children_offset=29973, .match_offset=0 }, { .children_offset=29975, .match_offset=0 }, { .children_offset=29977, .match_offset=0 }, { .children_offset=29979, .match_offset=0 }, { .children_offset=29981, .match_offset=0 }, { .children_offset=29983, .match_offset=0 }, { .children_offset=29985, .match_offset=0 }, { .children_offset=29987, .match_offset=0 }, { .children_offset=0, .match_offset=72124 }, { .children_offset=29989, .match_offset=0 }, { .children_offset=29992, .match_offset=0 }, { .children_offset=0, .match_offset=118251 }, { .children_offset=29994, .match_offset=0 }, { .children_offset=29996, .match_offset=0 }, { .children_offset=0, .match_offset=78468 }, { .children_offset=29998, .match_offset=0 }, { .children_offset=30000, .match_offset=0 }, { .children_offset=30002, .match_offset=0 }, { .children_offset=0, .match_offset=77777 }, { .children_offset=30005, .match_offset=0 }, { .children_offset=30007, .match_offset=0 }, { .children_offset=0, .match_offset=61666 }, { .children_offset=30009, .match_offset=43278 }, { .children_offset=30012, .match_offset=0 }, { .children_offset=30014, .match_offset=0 }, { .children_offset=0, .match_offset=109088 }, { .children_offset=30016, .match_offset=0 }, { .children_offset=30018, .match_offset=37595 }, { .children_offset=30022, .match_offset=0 }, { .children_offset=30024, .match_offset=0 }, { .children_offset=30026, .match_offset=0 }, { .children_offset=30028, .match_offset=0 }, { .children_offset=0, .match_offset=21819 }, { .children_offset=30030, .match_offset=0 }, { .children_offset=30032, .match_offset=0 }, { .children_offset=30034, .match_offset=0 }, { .children_offset=0, .match_offset=81066 }, { .children_offset=30036, .match_offset=0 }, { .children_offset=30038, .match_offset=0 }, { .children_offset=0, .match_offset=103067 }, { .children_offset=30040, .match_offset=0 }, { .children_offset=30044, .match_offset=0 }, { .children_offset=0, .match_offset=44776 }, { .children_offset=30047, .match_offset=52243 }, { .children_offset=30049, .match_offset=0 }, { .children_offset=30051, .match_offset=0 }, { .children_offset=30053, .match_offset=38473 }, { .children_offset=0, .match_offset=136215 }, { .children_offset=30055, .match_offset=0 }, { .children_offset=0, .match_offset=131877 }, { .children_offset=30057, .match_offset=0 }, { .children_offset=0, .match_offset=48077 }, { .children_offset=30059, .match_offset=0 }, { .children_offset=30062, .match_offset=89623 }, { .children_offset=0, .match_offset=45115 }, { .children_offset=30066, .match_offset=0 }, { .children_offset=30068, .match_offset=0 }, { .children_offset=30070, .match_offset=0 }, { .children_offset=30072, .match_offset=112667 }, { .children_offset=30074, .match_offset=0 }, { .children_offset=30079, .match_offset=0 }, { .children_offset=30081, .match_offset=0 }, { .children_offset=30083, .match_offset=0 }, { .children_offset=30085, .match_offset=0 }, { .children_offset=30087, .match_offset=0 }, { .children_offset=30089, .match_offset=0 }, { .children_offset=30091, .match_offset=0 }, { .children_offset=0, .match_offset=77286 }, { .children_offset=30093, .match_offset=0 }, { .children_offset=30095, .match_offset=0 }, { .children_offset=30097, .match_offset=0 }, { .children_offset=30099, .match_offset=0 }, { .children_offset=30101, .match_offset=0 }, { .children_offset=30103, .match_offset=0 }, { .children_offset=30105, .match_offset=0 }, { .children_offset=30107, .match_offset=0 }, { .children_offset=30109, .match_offset=0 }, { .children_offset=0, .match_offset=40346 }, { .children_offset=30111, .match_offset=0 }, { .children_offset=30113, .match_offset=0 }, { .children_offset=30115, .match_offset=0 }, { .children_offset=30117, .match_offset=0 }, { .children_offset=0, .match_offset=8768 }, { .children_offset=30119, .match_offset=0 }, { .children_offset=30121, .match_offset=0 }, { .children_offset=30123, .match_offset=0 }, { .children_offset=30125, .match_offset=0 }, { .children_offset=30127, .match_offset=0 }, { .children_offset=30129, .match_offset=0 }, { .children_offset=30131, .match_offset=0 }, { .children_offset=30133, .match_offset=0 }, { .children_offset=0, .match_offset=72168 }, { .children_offset=0, .match_offset=101032 }, { .children_offset=30135, .match_offset=0 }, { .children_offset=0, .match_offset=5071 }, { .children_offset=0, .match_offset=88005 }, { .children_offset=30137, .match_offset=0 }, { .children_offset=30139, .match_offset=0 }, { .children_offset=0, .match_offset=112665 }, { .children_offset=30141, .match_offset=90534 }, { .children_offset=0, .match_offset=125053 }, { .children_offset=30143, .match_offset=89141 }, { .children_offset=0, .match_offset=33718 }, { .children_offset=30145, .match_offset=56612 }, { .children_offset=30148, .match_offset=0 }, { .children_offset=0, .match_offset=86798 }, { .children_offset=30150, .match_offset=0 }, { .children_offset=30152, .match_offset=0 }, { .children_offset=30154, .match_offset=0 }, { .children_offset=0, .match_offset=116202 }, { .children_offset=30156, .match_offset=0 }, { .children_offset=30158, .match_offset=0 }, { .children_offset=30160, .match_offset=0 }, { .children_offset=30162, .match_offset=0 }, { .children_offset=30164, .match_offset=0 }, { .children_offset=30166, .match_offset=0 }, { .children_offset=0, .match_offset=35786 }, { .children_offset=30168, .match_offset=80426 }, { .children_offset=30187, .match_offset=0 }, { .children_offset=0, .match_offset=131441 }, { .children_offset=0, .match_offset=14889 }, { .children_offset=0, .match_offset=68613 }, { .children_offset=0, .match_offset=10995 }, { .children_offset=30193, .match_offset=0 }, { .children_offset=30195, .match_offset=0 }, { .children_offset=30197, .match_offset=0 }, { .children_offset=30199, .match_offset=0 }, { .children_offset=30201, .match_offset=0 }, { .children_offset=30203, .match_offset=0 }, { .children_offset=0, .match_offset=20330 }, { .children_offset=30205, .match_offset=0 }, { .children_offset=0, .match_offset=119590 }, { .children_offset=0, .match_offset=25919 }, { .children_offset=0, .match_offset=29815 }, { .children_offset=30209, .match_offset=0 }, { .children_offset=30212, .match_offset=0 }, { .children_offset=30214, .match_offset=0 }, { .children_offset=0, .match_offset=114136 }, { .children_offset=0, .match_offset=12755 }, { .children_offset=30216, .match_offset=108501 }, { .children_offset=0, .match_offset=135058 }, { .children_offset=30218, .match_offset=129470 }, { .children_offset=0, .match_offset=20403 }, { .children_offset=30220, .match_offset=0 }, { .children_offset=0, .match_offset=52575 }, { .children_offset=30222, .match_offset=0 }, { .children_offset=30226, .match_offset=0 }, { .children_offset=0, .match_offset=50101 }, { .children_offset=30228, .match_offset=0 }, { .children_offset=30230, .match_offset=0 }, { .children_offset=30232, .match_offset=0 }, { .children_offset=30234, .match_offset=0 }, { .children_offset=30236, .match_offset=0 }, { .children_offset=0, .match_offset=68392 }, { .children_offset=30238, .match_offset=0 }, { .children_offset=30240, .match_offset=0 }, { .children_offset=30242, .match_offset=0 }, { .children_offset=30244, .match_offset=0 }, { .children_offset=30246, .match_offset=0 }, { .children_offset=0, .match_offset=30303 }, { .children_offset=30248, .match_offset=0 }, { .children_offset=30250, .match_offset=0 }, { .children_offset=30253, .match_offset=0 }, { .children_offset=30255, .match_offset=0 }, { .children_offset=0, .match_offset=63646 }, { .children_offset=30257, .match_offset=38173 }, { .children_offset=30262, .match_offset=0 }, { .children_offset=30264, .match_offset=0 }, { .children_offset=0, .match_offset=1491 }, { .children_offset=30266, .match_offset=0 }, { .children_offset=30268, .match_offset=0 }, { .children_offset=30270, .match_offset=0 }, { .children_offset=30272, .match_offset=0 }, { .children_offset=30274, .match_offset=0 }, { .children_offset=0, .match_offset=30473 }, { .children_offset=30276, .match_offset=0 }, { .children_offset=30278, .match_offset=0 }, { .children_offset=0, .match_offset=46760 }, { .children_offset=30281, .match_offset=0 }, { .children_offset=30283, .match_offset=0 }, { .children_offset=30285, .match_offset=0 }, { .children_offset=30287, .match_offset=0 }, { .children_offset=30289, .match_offset=0 }, { .children_offset=30291, .match_offset=0 }, { .children_offset=0, .match_offset=42839 }, { .children_offset=30293, .match_offset=0 }, { .children_offset=30295, .match_offset=0 }, { .children_offset=0, .match_offset=29132 }, { .children_offset=30297, .match_offset=37642 }, { .children_offset=30299, .match_offset=0 }, { .children_offset=0, .match_offset=54265 }, { .children_offset=30301, .match_offset=103964 }, { .children_offset=30304, .match_offset=0 }, { .children_offset=0, .match_offset=8306 }, { .children_offset=30306, .match_offset=0 }, { .children_offset=30308, .match_offset=0 }, { .children_offset=0, .match_offset=14404 }, { .children_offset=30310, .match_offset=72117 }, { .children_offset=30316, .match_offset=0 }, { .children_offset=30318, .match_offset=0 }, { .children_offset=0, .match_offset=34000 }, { .children_offset=0, .match_offset=28600 }, { .children_offset=0, .match_offset=57987 }, { .children_offset=0, .match_offset=135930 }, { .children_offset=0, .match_offset=37237 }, { .children_offset=0, .match_offset=65585 }, { .children_offset=30320, .match_offset=0 }, { .children_offset=30322, .match_offset=0 }, { .children_offset=30324, .match_offset=0 }, { .children_offset=0, .match_offset=13159 }, { .children_offset=30326, .match_offset=13180 }, { .children_offset=30331, .match_offset=0 }, { .children_offset=0, .match_offset=28202 }, { .children_offset=0, .match_offset=8776 }, { .children_offset=30333, .match_offset=0 }, { .children_offset=30335, .match_offset=0 }, { .children_offset=0, .match_offset=34151 }, { .children_offset=0, .match_offset=37696 }, { .children_offset=30337, .match_offset=26003 }, { .children_offset=30340, .match_offset=62593 }, { .children_offset=0, .match_offset=85432 }, { .children_offset=30343, .match_offset=0 }, { .children_offset=30345, .match_offset=0 }, { .children_offset=30347, .match_offset=0 }, { .children_offset=0, .match_offset=11466 }, { .children_offset=30349, .match_offset=0 }, { .children_offset=30351, .match_offset=124607 }, { .children_offset=30353, .match_offset=0 }, { .children_offset=0, .match_offset=504 }, { .children_offset=30355, .match_offset=2132 }, { .children_offset=30357, .match_offset=0 }, { .children_offset=30359, .match_offset=0 }, { .children_offset=30361, .match_offset=0 }, { .children_offset=30363, .match_offset=0 }, { .children_offset=30365, .match_offset=0 }, { .children_offset=0, .match_offset=63164 }, { .children_offset=30367, .match_offset=0 }, { .children_offset=30371, .match_offset=0 }, { .children_offset=30373, .match_offset=0 }, { .children_offset=30375, .match_offset=0 }, { .children_offset=30377, .match_offset=0 }, { .children_offset=30379, .match_offset=0 }, { .children_offset=0, .match_offset=37245 }, { .children_offset=30381, .match_offset=0 }, { .children_offset=30383, .match_offset=0 }, { .children_offset=30385, .match_offset=0 }, { .children_offset=30387, .match_offset=0 }, { .children_offset=30389, .match_offset=0 }, { .children_offset=30391, .match_offset=0 }, { .children_offset=30393, .match_offset=0 }, { .children_offset=0, .match_offset=15685 }, { .children_offset=30395, .match_offset=0 }, { .children_offset=30397, .match_offset=0 }, { .children_offset=30399, .match_offset=0 }, { .children_offset=30401, .match_offset=0 }, { .children_offset=30403, .match_offset=0 }, { .children_offset=30405, .match_offset=0 }, { .children_offset=30407, .match_offset=0 }, { .children_offset=0, .match_offset=117578 }, { .children_offset=0, .match_offset=56889 }, { .children_offset=30409, .match_offset=74713 }, { .children_offset=30413, .match_offset=0 }, { .children_offset=30415, .match_offset=0 }, { .children_offset=30417, .match_offset=0 }, { .children_offset=30419, .match_offset=0 }, { .children_offset=30421, .match_offset=0 }, { .children_offset=30423, .match_offset=0 }, { .children_offset=30425, .match_offset=0 }, { .children_offset=0, .match_offset=59250 }, { .children_offset=0, .match_offset=50225 }, { .children_offset=30427, .match_offset=0 }, { .children_offset=0, .match_offset=131202 }, { .children_offset=30429, .match_offset=68791 }, { .children_offset=30434, .match_offset=34671 }, { .children_offset=0, .match_offset=136256 }, { .children_offset=30436, .match_offset=37680 }, { .children_offset=0, .match_offset=11049 }, { .children_offset=30438, .match_offset=13168 }, { .children_offset=0, .match_offset=25679 }, { .children_offset=30440, .match_offset=15045 }, { .children_offset=0, .match_offset=103308 }, { .children_offset=30442, .match_offset=6775 }, { .children_offset=30448, .match_offset=77836 }, { .children_offset=30450, .match_offset=0 }, { .children_offset=30452, .match_offset=0 }, { .children_offset=30454, .match_offset=0 }, { .children_offset=0, .match_offset=1259 }, { .children_offset=0, .match_offset=127297 }, { .children_offset=30456, .match_offset=0 }, { .children_offset=30458, .match_offset=0 }, { .children_offset=30460, .match_offset=0 }, { .children_offset=30462, .match_offset=0 }, { .children_offset=0, .match_offset=25682 }, { .children_offset=0, .match_offset=103946 }, { .children_offset=0, .match_offset=64170 }, { .children_offset=30464, .match_offset=0 }, { .children_offset=30492, .match_offset=0 }, { .children_offset=30496, .match_offset=0 }, { .children_offset=30498, .match_offset=0 }, { .children_offset=0, .match_offset=108588 }, { .children_offset=30500, .match_offset=0 }, { .children_offset=30502, .match_offset=0 }, { .children_offset=30504, .match_offset=0 }, { .children_offset=0, .match_offset=11320 }, { .children_offset=30506, .match_offset=0 }, { .children_offset=30508, .match_offset=0 }, { .children_offset=30510, .match_offset=0 }, { .children_offset=30512, .match_offset=0 }, { .children_offset=30514, .match_offset=0 }, { .children_offset=30516, .match_offset=0 }, { .children_offset=0, .match_offset=5960 }, { .children_offset=0, .match_offset=73755 }, { .children_offset=30519, .match_offset=0 }, { .children_offset=30525, .match_offset=0 }, { .children_offset=0, .match_offset=71939 }, { .children_offset=0, .match_offset=125196 }, { .children_offset=0, .match_offset=42300 }, { .children_offset=0, .match_offset=89613 }, { .children_offset=0, .match_offset=80494 }, { .children_offset=0, .match_offset=102275 }, { .children_offset=0, .match_offset=126627 }, { .children_offset=0, .match_offset=123480 }, { .children_offset=0, .match_offset=136549 }, { .children_offset=30535, .match_offset=0 }, { .children_offset=0, .match_offset=113837 }, { .children_offset=0, .match_offset=38414 }, { .children_offset=0, .match_offset=55851 }, { .children_offset=0, .match_offset=44416 }, { .children_offset=0, .match_offset=21972 }, { .children_offset=0, .match_offset=115762 }, { .children_offset=0, .match_offset=25660 }, { .children_offset=0, .match_offset=62644 }, { .children_offset=30546, .match_offset=59248 }, { .children_offset=0, .match_offset=100986 }, { .children_offset=0, .match_offset=33278 }, { .children_offset=0, .match_offset=16662 }, { .children_offset=30549, .match_offset=0 }, { .children_offset=0, .match_offset=89256 }, { .children_offset=0, .match_offset=111463 }, { .children_offset=0, .match_offset=30893 }, { .children_offset=0, .match_offset=129582 }, { .children_offset=0, .match_offset=46875 }, { .children_offset=30560, .match_offset=6736 }, { .children_offset=0, .match_offset=34648 }, { .children_offset=0, .match_offset=124670 }, { .children_offset=0, .match_offset=133088 }, { .children_offset=0, .match_offset=32963 }, { .children_offset=0, .match_offset=27974 }, { .children_offset=30562, .match_offset=0 }, { .children_offset=0, .match_offset=78659 }, { .children_offset=0, .match_offset=21179 }, { .children_offset=0, .match_offset=70835 }, { .children_offset=30573, .match_offset=42034 }, { .children_offset=0, .match_offset=61169 }, { .children_offset=30575, .match_offset=11344 }, { .children_offset=0, .match_offset=2130 }, { .children_offset=30577, .match_offset=40332 }, { .children_offset=0, .match_offset=115395 }, { .children_offset=0, .match_offset=115701 }, { .children_offset=30579, .match_offset=22023 }, { .children_offset=0, .match_offset=80505 }, { .children_offset=0, .match_offset=9075 }, { .children_offset=0, .match_offset=35211 }, { .children_offset=30581, .match_offset=0 }, { .children_offset=0, .match_offset=132785 }, { .children_offset=0, .match_offset=124674 }, { .children_offset=0, .match_offset=5606 }, { .children_offset=30585, .match_offset=33054 }, { .children_offset=30608, .match_offset=0 }, { .children_offset=0, .match_offset=5539 }, { .children_offset=0, .match_offset=61113 }, { .children_offset=0, .match_offset=37243 }, { .children_offset=0, .match_offset=58004 }, { .children_offset=0, .match_offset=5549 }, { .children_offset=0, .match_offset=55806 }, { .children_offset=0, .match_offset=49751 }, { .children_offset=0, .match_offset=113395 }, { .children_offset=0, .match_offset=26418 }, { .children_offset=0, .match_offset=21095 }, { .children_offset=0, .match_offset=45296 }, { .children_offset=30618, .match_offset=70675 }, { .children_offset=0, .match_offset=78416 }, { .children_offset=30622, .match_offset=0 }, { .children_offset=30624, .match_offset=0 }, { .children_offset=30626, .match_offset=0 }, { .children_offset=30628, .match_offset=0 }, { .children_offset=30630, .match_offset=0 }, { .children_offset=30632, .match_offset=0 }, { .children_offset=30634, .match_offset=0 }, { .children_offset=0, .match_offset=62030 }, { .children_offset=30636, .match_offset=0 }, { .children_offset=30638, .match_offset=0 }, { .children_offset=30640, .match_offset=0 }, { .children_offset=30642, .match_offset=0 }, { .children_offset=30644, .match_offset=0 }, { .children_offset=30646, .match_offset=0 }, { .children_offset=0, .match_offset=15283 }, { .children_offset=30648, .match_offset=0 }, { .children_offset=30651, .match_offset=0 }, { .children_offset=30653, .match_offset=0 }, { .children_offset=30655, .match_offset=0 }, { .children_offset=30657, .match_offset=0 }, { .children_offset=30659, .match_offset=0 }, { .children_offset=0, .match_offset=133032 }, { .children_offset=30661, .match_offset=0 }, { .children_offset=0, .match_offset=87859 }, { .children_offset=30663, .match_offset=0 }, { .children_offset=30665, .match_offset=0 }, { .children_offset=30667, .match_offset=0 }, { .children_offset=0, .match_offset=20259 }, { .children_offset=0, .match_offset=6318 }, { .children_offset=30669, .match_offset=22840 }, { .children_offset=30672, .match_offset=67308 }, { .children_offset=0, .match_offset=125219 }, { .children_offset=30674, .match_offset=0 }, { .children_offset=0, .match_offset=80507 }, { .children_offset=0, .match_offset=86271 }, { .children_offset=30676, .match_offset=0 }, { .children_offset=0, .match_offset=1080 }, { .children_offset=30679, .match_offset=0 }, { .children_offset=0, .match_offset=62394 }, { .children_offset=30681, .match_offset=24334 }, { .children_offset=0, .match_offset=13861 }, { .children_offset=0, .match_offset=20332 }, { .children_offset=30684, .match_offset=30357 }, { .children_offset=0, .match_offset=61479 }, { .children_offset=30690, .match_offset=44723 }, { .children_offset=30692, .match_offset=0 }, { .children_offset=30694, .match_offset=0 }, { .children_offset=30696, .match_offset=0 }, { .children_offset=30698, .match_offset=0 }, { .children_offset=30700, .match_offset=0 }, { .children_offset=30702, .match_offset=0 }, { .children_offset=0, .match_offset=103485 }, { .children_offset=30704, .match_offset=0 }, { .children_offset=30706, .match_offset=0 }, { .children_offset=30708, .match_offset=0 }, { .children_offset=30710, .match_offset=0 }, { .children_offset=30712, .match_offset=0 }, { .children_offset=30714, .match_offset=0 }, { .children_offset=0, .match_offset=102717 }, { .children_offset=0, .match_offset=58505 }, { .children_offset=30716, .match_offset=0 }, { .children_offset=30718, .match_offset=0 }, { .children_offset=30720, .match_offset=0 }, { .children_offset=30722, .match_offset=0 }, { .children_offset=0, .match_offset=39036 }, { .children_offset=30724, .match_offset=0 }, { .children_offset=0, .match_offset=35159 }, { .children_offset=30726, .match_offset=113101 }, { .children_offset=30729, .match_offset=0 }, { .children_offset=0, .match_offset=123450 }, { .children_offset=30731, .match_offset=0 }, { .children_offset=30733, .match_offset=0 }, { .children_offset=30735, .match_offset=0 }, { .children_offset=0, .match_offset=87697 }, { .children_offset=0, .match_offset=57568 }, { .children_offset=30737, .match_offset=37600 }, { .children_offset=30739, .match_offset=0 }, { .children_offset=30741, .match_offset=0 }, { .children_offset=0, .match_offset=60552 }, { .children_offset=30743, .match_offset=0 }, { .children_offset=30747, .match_offset=0 }, { .children_offset=30749, .match_offset=37897 }, { .children_offset=30751, .match_offset=0 }, { .children_offset=30753, .match_offset=0 }, { .children_offset=30755, .match_offset=0 }, { .children_offset=30757, .match_offset=0 }, { .children_offset=30759, .match_offset=0 }, { .children_offset=30761, .match_offset=0 }, { .children_offset=0, .match_offset=37955 }, { .children_offset=30763, .match_offset=0 }, { .children_offset=0, .match_offset=124893 }, { .children_offset=30765, .match_offset=0 }, { .children_offset=30767, .match_offset=0 }, { .children_offset=30769, .match_offset=0 }, { .children_offset=0, .match_offset=11181 }, { .children_offset=30771, .match_offset=0 }, { .children_offset=30774, .match_offset=0 }, { .children_offset=30776, .match_offset=0 }, { .children_offset=30778, .match_offset=0 }, { .children_offset=30780, .match_offset=0 }, { .children_offset=0, .match_offset=43121 }, { .children_offset=30782, .match_offset=0 }, { .children_offset=30784, .match_offset=34617 }, { .children_offset=30786, .match_offset=0 }, { .children_offset=30788, .match_offset=40176 }, { .children_offset=0, .match_offset=103665 }, { .children_offset=30790, .match_offset=125557 }, { .children_offset=30794, .match_offset=30477 }, { .children_offset=30796, .match_offset=0 }, { .children_offset=0, .match_offset=30477 }, { .children_offset=30798, .match_offset=0 }, { .children_offset=30800, .match_offset=0 }, { .children_offset=30802, .match_offset=0 }, { .children_offset=30804, .match_offset=0 }, { .children_offset=30806, .match_offset=0 }, { .children_offset=0, .match_offset=89399 }, { .children_offset=30808, .match_offset=0 }, { .children_offset=30810, .match_offset=0 }, { .children_offset=0, .match_offset=131445 }, { .children_offset=30812, .match_offset=7740 }, { .children_offset=30814, .match_offset=0 }, { .children_offset=30816, .match_offset=0 }, { .children_offset=0, .match_offset=30642 }, { .children_offset=30818, .match_offset=125640 }, { .children_offset=30820, .match_offset=0 }, { .children_offset=30822, .match_offset=0 }, { .children_offset=30824, .match_offset=0 }, { .children_offset=0, .match_offset=65182 }, { .children_offset=30826, .match_offset=0 }, { .children_offset=30828, .match_offset=0 }, { .children_offset=0, .match_offset=104556 }, { .children_offset=30830, .match_offset=0 }, { .children_offset=30837, .match_offset=1499 }, { .children_offset=0, .match_offset=124747 }, { .children_offset=0, .match_offset=46786 }, { .children_offset=0, .match_offset=37559 }, { .children_offset=30841, .match_offset=124985 }, { .children_offset=30846, .match_offset=65199 }, { .children_offset=0, .match_offset=70867 }, { .children_offset=0, .match_offset=40627 }, { .children_offset=0, .match_offset=100914 }, { .children_offset=0, .match_offset=123350 }, { .children_offset=0, .match_offset=14477 }, { .children_offset=30849, .match_offset=113403 }, { .children_offset=0, .match_offset=111461 }, { .children_offset=0, .match_offset=58829 }, { .children_offset=0, .match_offset=89150 }, { .children_offset=30853, .match_offset=0 }, { .children_offset=0, .match_offset=24344 }, { .children_offset=30855, .match_offset=68306 }, { .children_offset=0, .match_offset=28467 }, { .children_offset=30860, .match_offset=21360 }, { .children_offset=0, .match_offset=58529 }, { .children_offset=0, .match_offset=90610 }, { .children_offset=0, .match_offset=88732 }, { .children_offset=30862, .match_offset=33481 }, { .children_offset=0, .match_offset=68975 }, { .children_offset=30867, .match_offset=33863 }, { .children_offset=0, .match_offset=102641 }, { .children_offset=0, .match_offset=100902 }, { .children_offset=0, .match_offset=45872 }, { .children_offset=30869, .match_offset=0 }, { .children_offset=30876, .match_offset=80979 }, { .children_offset=0, .match_offset=65752 }, { .children_offset=30879, .match_offset=0 }, { .children_offset=30881, .match_offset=0 }, { .children_offset=0, .match_offset=6256 }, { .children_offset=30883, .match_offset=0 }, { .children_offset=30885, .match_offset=0 }, { .children_offset=30887, .match_offset=0 }, { .children_offset=0, .match_offset=8629 }, { .children_offset=30889, .match_offset=0 }, { .children_offset=30891, .match_offset=0 }, { .children_offset=0, .match_offset=27045 }, { .children_offset=30893, .match_offset=0 }, { .children_offset=30895, .match_offset=0 }, { .children_offset=0, .match_offset=58875 }, { .children_offset=30897, .match_offset=0 }, { .children_offset=0, .match_offset=125707 }, { .children_offset=0, .match_offset=126608 }, { .children_offset=30899, .match_offset=81170 }, { .children_offset=30905, .match_offset=114629 }, { .children_offset=30912, .match_offset=87371 }, { .children_offset=30914, .match_offset=0 }, { .children_offset=30916, .match_offset=0 }, { .children_offset=30918, .match_offset=0 }, { .children_offset=30920, .match_offset=0 }, { .children_offset=30922, .match_offset=0 }, { .children_offset=30924, .match_offset=0 }, { .children_offset=30926, .match_offset=0 }, { .children_offset=0, .match_offset=49844 }, { .children_offset=0, .match_offset=114037 }, { .children_offset=0, .match_offset=66248 }, { .children_offset=30928, .match_offset=0 }, { .children_offset=0, .match_offset=33039 }, { .children_offset=0, .match_offset=39225 }, { .children_offset=0, .match_offset=14354 }, { .children_offset=30930, .match_offset=125611 }, { .children_offset=0, .match_offset=70698 }, { .children_offset=0, .match_offset=118562 }, { .children_offset=30935, .match_offset=0 }, { .children_offset=30939, .match_offset=0 }, { .children_offset=30941, .match_offset=0 }, { .children_offset=30943, .match_offset=0 }, { .children_offset=30945, .match_offset=0 }, { .children_offset=0, .match_offset=89651 }, { .children_offset=0, .match_offset=78566 }, { .children_offset=0, .match_offset=122510 }, { .children_offset=0, .match_offset=33221 }, { .children_offset=30947, .match_offset=27665 }, { .children_offset=30955, .match_offset=0 }, { .children_offset=0, .match_offset=43252 }, { .children_offset=30957, .match_offset=0 }, { .children_offset=0, .match_offset=61156 }, { .children_offset=30959, .match_offset=46780 }, { .children_offset=0, .match_offset=45092 }, { .children_offset=0, .match_offset=42032 }, { .children_offset=0, .match_offset=37191 }, { .children_offset=0, .match_offset=125374 }, { .children_offset=0, .match_offset=136181 }, { .children_offset=30961, .match_offset=87783 }, { .children_offset=30969, .match_offset=0 }, { .children_offset=0, .match_offset=15439 }, { .children_offset=30971, .match_offset=0 }, { .children_offset=30973, .match_offset=0 }, { .children_offset=0, .match_offset=80992 }, { .children_offset=0, .match_offset=111387 }, { .children_offset=0, .match_offset=27729 }, { .children_offset=0, .match_offset=67806 }, { .children_offset=0, .match_offset=40862 }, { .children_offset=0, .match_offset=63129 }, { .children_offset=30975, .match_offset=73690 }, { .children_offset=0, .match_offset=23790 }, { .children_offset=0, .match_offset=34421 }, { .children_offset=30981, .match_offset=26287 }, { .children_offset=0, .match_offset=114527 }, { .children_offset=0, .match_offset=21664 }, { .children_offset=0, .match_offset=37233 }, { .children_offset=30983, .match_offset=56843 }, { .children_offset=31002, .match_offset=0 }, { .children_offset=0, .match_offset=90649 }, { .children_offset=0, .match_offset=118583 }, { .children_offset=0, .match_offset=27838 }, { .children_offset=0, .match_offset=81182 }, { .children_offset=0, .match_offset=6945 }, { .children_offset=0, .match_offset=136545 }, { .children_offset=31010, .match_offset=0 }, { .children_offset=0, .match_offset=8928 }, { .children_offset=31012, .match_offset=0 }, { .children_offset=31014, .match_offset=0 }, { .children_offset=31017, .match_offset=0 }, { .children_offset=0, .match_offset=30142 }, { .children_offset=31019, .match_offset=15691 }, { .children_offset=31021, .match_offset=0 }, { .children_offset=0, .match_offset=48125 }, { .children_offset=31023, .match_offset=0 }, { .children_offset=31025, .match_offset=0 }, { .children_offset=31027, .match_offset=0 }, { .children_offset=31029, .match_offset=0 }, { .children_offset=31031, .match_offset=0 }, { .children_offset=31033, .match_offset=0 }, { .children_offset=31035, .match_offset=0 }, { .children_offset=31037, .match_offset=0 }, { .children_offset=0, .match_offset=119407 }, { .children_offset=31039, .match_offset=0 }, { .children_offset=31041, .match_offset=114510 }, { .children_offset=31043, .match_offset=0 }, { .children_offset=31045, .match_offset=0 }, { .children_offset=0, .match_offset=14350 }, { .children_offset=0, .match_offset=90021 }, { .children_offset=31047, .match_offset=0 }, { .children_offset=31049, .match_offset=0 }, { .children_offset=31051, .match_offset=0 }, { .children_offset=31054, .match_offset=0 }, { .children_offset=0, .match_offset=57350 }, { .children_offset=31056, .match_offset=0 }, { .children_offset=31059, .match_offset=0 }, { .children_offset=0, .match_offset=74675 }, { .children_offset=31061, .match_offset=0 }, { .children_offset=31063, .match_offset=68655 }, { .children_offset=31067, .match_offset=0 }, { .children_offset=31069, .match_offset=0 }, { .children_offset=31071, .match_offset=0 }, { .children_offset=31073, .match_offset=0 }, { .children_offset=31075, .match_offset=0 }, { .children_offset=31077, .match_offset=0 }, { .children_offset=31079, .match_offset=0 }, { .children_offset=31081, .match_offset=0 }, { .children_offset=31083, .match_offset=0 }, { .children_offset=31085, .match_offset=0 }, { .children_offset=0, .match_offset=37591 }, { .children_offset=31087, .match_offset=0 }, { .children_offset=31089, .match_offset=0 }, { .children_offset=31091, .match_offset=0 }, { .children_offset=31094, .match_offset=0 }, { .children_offset=31096, .match_offset=0 }, { .children_offset=31098, .match_offset=0 }, { .children_offset=31100, .match_offset=0 }, { .children_offset=31102, .match_offset=0 }, { .children_offset=31104, .match_offset=0 }, { .children_offset=0, .match_offset=37591 }, { .children_offset=31106, .match_offset=0 }, { .children_offset=31108, .match_offset=0 }, { .children_offset=31110, .match_offset=0 }, { .children_offset=31112, .match_offset=0 }, { .children_offset=31114, .match_offset=0 }, { .children_offset=0, .match_offset=37591 }, { .children_offset=31116, .match_offset=0 }, { .children_offset=31118, .match_offset=0 }, { .children_offset=31120, .match_offset=0 }, { .children_offset=31122, .match_offset=0 }, { .children_offset=31124, .match_offset=0 }, { .children_offset=31126, .match_offset=0 }, { .children_offset=31128, .match_offset=0 }, { .children_offset=31130, .match_offset=0 }, { .children_offset=31132, .match_offset=0 }, { .children_offset=31134, .match_offset=0 }, { .children_offset=31136, .match_offset=0 }, { .children_offset=31138, .match_offset=0 }, { .children_offset=0, .match_offset=37591 }, { .children_offset=31140, .match_offset=0 }, { .children_offset=31142, .match_offset=0 }, { .children_offset=31144, .match_offset=0 }, { .children_offset=31146, .match_offset=0 }, { .children_offset=0, .match_offset=5936 }, { .children_offset=0, .match_offset=41892 }, { .children_offset=31148, .match_offset=119608 }, { .children_offset=31151, .match_offset=0 }, { .children_offset=31153, .match_offset=0 }, { .children_offset=0, .match_offset=26444 }, { .children_offset=31155, .match_offset=0 }, { .children_offset=0, .match_offset=6407 }, { .children_offset=0, .match_offset=134886 }, { .children_offset=31157, .match_offset=45806 }, { .children_offset=31159, .match_offset=0 }, { .children_offset=31161, .match_offset=0 }, { .children_offset=31163, .match_offset=0 }, { .children_offset=0, .match_offset=126622 }, { .children_offset=31165, .match_offset=0 }, { .children_offset=31167, .match_offset=0 }, { .children_offset=31170, .match_offset=0 }, { .children_offset=31172, .match_offset=0 }, { .children_offset=0, .match_offset=11158 }, { .children_offset=31174, .match_offset=0 }, { .children_offset=0, .match_offset=34440 }, { .children_offset=31176, .match_offset=0 }, { .children_offset=0, .match_offset=130948 }, { .children_offset=31178, .match_offset=0 }, { .children_offset=31182, .match_offset=0 }, { .children_offset=31184, .match_offset=0 }, { .children_offset=0, .match_offset=71271 }, { .children_offset=31186, .match_offset=0 }, { .children_offset=31188, .match_offset=0 }, { .children_offset=0, .match_offset=10029 }, { .children_offset=31190, .match_offset=0 }, { .children_offset=31192, .match_offset=0 }, { .children_offset=31194, .match_offset=117584 }, { .children_offset=31197, .match_offset=0 }, { .children_offset=31199, .match_offset=0 }, { .children_offset=31201, .match_offset=0 }, { .children_offset=31203, .match_offset=0 }, { .children_offset=31205, .match_offset=0 }, { .children_offset=31207, .match_offset=0 }, { .children_offset=31209, .match_offset=0 }, { .children_offset=31211, .match_offset=0 }, { .children_offset=31213, .match_offset=0 }, { .children_offset=31215, .match_offset=0 }, { .children_offset=31217, .match_offset=0 }, { .children_offset=31219, .match_offset=0 }, { .children_offset=31221, .match_offset=0 }, { .children_offset=0, .match_offset=65395 }, { .children_offset=31223, .match_offset=0 }, { .children_offset=31225, .match_offset=0 }, { .children_offset=31227, .match_offset=0 }, { .children_offset=31229, .match_offset=0 }, { .children_offset=31231, .match_offset=0 }, { .children_offset=31233, .match_offset=0 }, { .children_offset=31235, .match_offset=0 }, { .children_offset=0, .match_offset=53474 }, { .children_offset=31237, .match_offset=68950 }, { .children_offset=31239, .match_offset=0 }, { .children_offset=31241, .match_offset=0 }, { .children_offset=31243, .match_offset=0 }, { .children_offset=31245, .match_offset=0 }, { .children_offset=31247, .match_offset=0 }, { .children_offset=0, .match_offset=12033 }, { .children_offset=31249, .match_offset=0 }, { .children_offset=31251, .match_offset=0 }, { .children_offset=31254, .match_offset=0 }, { .children_offset=0, .match_offset=126409 }, { .children_offset=31256, .match_offset=0 }, { .children_offset=31258, .match_offset=0 }, { .children_offset=0, .match_offset=38732 }, { .children_offset=31260, .match_offset=73513 }, { .children_offset=0, .match_offset=125849 }, { .children_offset=31264, .match_offset=0 }, { .children_offset=31266, .match_offset=0 }, { .children_offset=31268, .match_offset=0 }, { .children_offset=0, .match_offset=110911 }, { .children_offset=31270, .match_offset=0 }, { .children_offset=31272, .match_offset=0 }, { .children_offset=31274, .match_offset=0 }, { .children_offset=31276, .match_offset=0 }, { .children_offset=31278, .match_offset=0 }, { .children_offset=0, .match_offset=63011 }, { .children_offset=31280, .match_offset=63083 }, { .children_offset=31283, .match_offset=0 }, { .children_offset=31285, .match_offset=0 }, { .children_offset=31287, .match_offset=14447 }, { .children_offset=0, .match_offset=14447 }, { .children_offset=0, .match_offset=38657 }, { .children_offset=31289, .match_offset=42977 }, { .children_offset=0, .match_offset=34380 }, { .children_offset=31291, .match_offset=58437 }, { .children_offset=31304, .match_offset=77097 }, { .children_offset=31314, .match_offset=6673 }, { .children_offset=0, .match_offset=58236 }, { .children_offset=0, .match_offset=34521 }, { .children_offset=0, .match_offset=43053 }, { .children_offset=31316, .match_offset=114816 }, { .children_offset=31318, .match_offset=0 }, { .children_offset=0, .match_offset=103966 }, { .children_offset=0, .match_offset=38726 }, { .children_offset=0, .match_offset=78963 }, { .children_offset=0, .match_offset=25980 }, { .children_offset=0, .match_offset=35178 }, { .children_offset=0, .match_offset=5286 }, { .children_offset=31320, .match_offset=126411 }, { .children_offset=31327, .match_offset=0 }, { .children_offset=31329, .match_offset=0 }, { .children_offset=31331, .match_offset=0 }, { .children_offset=0, .match_offset=103583 }, { .children_offset=0, .match_offset=35615 }, { .children_offset=0, .match_offset=34896 }, { .children_offset=0, .match_offset=114883 }, { .children_offset=31333, .match_offset=0 }, { .children_offset=31335, .match_offset=0 }, { .children_offset=31337, .match_offset=0 }, { .children_offset=31339, .match_offset=0 }, { .children_offset=0, .match_offset=22178 }, { .children_offset=0, .match_offset=27951 }, { .children_offset=31341, .match_offset=114012 }, { .children_offset=31348, .match_offset=115586 }, { .children_offset=31351, .match_offset=135052 }, { .children_offset=31353, .match_offset=65770 }, { .children_offset=31355, .match_offset=0 }, { .children_offset=0, .match_offset=103716 }, { .children_offset=0, .match_offset=12663 }, { .children_offset=31357, .match_offset=73251 }, { .children_offset=31361, .match_offset=35316 }, { .children_offset=31364, .match_offset=0 }, { .children_offset=0, .match_offset=122599 }, { .children_offset=0, .match_offset=67863 }, { .children_offset=0, .match_offset=123717 }, { .children_offset=31366, .match_offset=54378 }, { .children_offset=31369, .match_offset=0 }, { .children_offset=31371, .match_offset=110995 }, { .children_offset=0, .match_offset=14438 }, { .children_offset=0, .match_offset=134514 }, { .children_offset=0, .match_offset=30370 }, { .children_offset=31373, .match_offset=53598 }, { .children_offset=0, .match_offset=71945 }, { .children_offset=31375, .match_offset=134275 }, { .children_offset=31382, .match_offset=25692 }, { .children_offset=31384, .match_offset=0 }, { .children_offset=0, .match_offset=103151 }, { .children_offset=31387, .match_offset=0 }, { .children_offset=31389, .match_offset=0 }, { .children_offset=31391, .match_offset=0 }, { .children_offset=0, .match_offset=69098 }, { .children_offset=31393, .match_offset=0 }, { .children_offset=31395, .match_offset=0 }, { .children_offset=0, .match_offset=8656 }, { .children_offset=0, .match_offset=22668 }, { .children_offset=31397, .match_offset=0 }, { .children_offset=0, .match_offset=77221 }, { .children_offset=0, .match_offset=117523 }, { .children_offset=0, .match_offset=78582 }, { .children_offset=0, .match_offset=44789 }, { .children_offset=31401, .match_offset=0 }, { .children_offset=31403, .match_offset=0 }, { .children_offset=0, .match_offset=60176 }, { .children_offset=31405, .match_offset=0 }, { .children_offset=31407, .match_offset=0 }, { .children_offset=31409, .match_offset=0 }, { .children_offset=0, .match_offset=48205 }, { .children_offset=31411, .match_offset=0 }, { .children_offset=0, .match_offset=62009 }, { .children_offset=31413, .match_offset=12304 }, { .children_offset=31416, .match_offset=60441 }, { .children_offset=0, .match_offset=35096 }, { .children_offset=0, .match_offset=103363 }, { .children_offset=0, .match_offset=73456 }, { .children_offset=31419, .match_offset=0 }, { .children_offset=31426, .match_offset=46074 }, { .children_offset=31430, .match_offset=0 }, { .children_offset=31432, .match_offset=0 }, { .children_offset=0, .match_offset=77349 }, { .children_offset=0, .match_offset=35442 }, { .children_offset=0, .match_offset=39192 }, { .children_offset=31434, .match_offset=0 }, { .children_offset=31436, .match_offset=0 }, { .children_offset=31440, .match_offset=0 }, { .children_offset=31442, .match_offset=0 }, { .children_offset=0, .match_offset=14346 }, { .children_offset=0, .match_offset=43024 }, { .children_offset=31445, .match_offset=0 }, { .children_offset=0, .match_offset=135811 }, { .children_offset=0, .match_offset=72882 }, { .children_offset=31447, .match_offset=0 }, { .children_offset=31450, .match_offset=0 }, { .children_offset=0, .match_offset=22034 }, { .children_offset=31452, .match_offset=0 }, { .children_offset=31454, .match_offset=0 }, { .children_offset=0, .match_offset=23896 }, { .children_offset=31456, .match_offset=0 }, { .children_offset=31461, .match_offset=73268 }, { .children_offset=31463, .match_offset=0 }, { .children_offset=31465, .match_offset=0 }, { .children_offset=31467, .match_offset=0 }, { .children_offset=31469, .match_offset=0 }, { .children_offset=0, .match_offset=123410 }, { .children_offset=0, .match_offset=28697 }, { .children_offset=0, .match_offset=22192 }, { .children_offset=0, .match_offset=53496 }, { .children_offset=31471, .match_offset=0 }, { .children_offset=31473, .match_offset=0 }, { .children_offset=31475, .match_offset=0 }, { .children_offset=0, .match_offset=45910 }, { .children_offset=31477, .match_offset=0 }, { .children_offset=31479, .match_offset=0 }, { .children_offset=0, .match_offset=1239 }, { .children_offset=31481, .match_offset=10222 }, { .children_offset=31491, .match_offset=0 }, { .children_offset=0, .match_offset=8838 }, { .children_offset=0, .match_offset=59481 }, { .children_offset=0, .match_offset=50054 }, { .children_offset=0, .match_offset=62573 }, { .children_offset=0, .match_offset=68396 }, { .children_offset=0, .match_offset=119601 }, { .children_offset=0, .match_offset=43283 }, { .children_offset=0, .match_offset=22198 }, { .children_offset=0, .match_offset=77022 }, { .children_offset=31493, .match_offset=0 }, { .children_offset=31495, .match_offset=0 }, { .children_offset=0, .match_offset=37688 }, { .children_offset=31497, .match_offset=60077 }, { .children_offset=0, .match_offset=60077 }, { .children_offset=31499, .match_offset=7579 }, { .children_offset=31504, .match_offset=0 }, { .children_offset=31507, .match_offset=68839 }, { .children_offset=0, .match_offset=46677 }, { .children_offset=0, .match_offset=89973 }, { .children_offset=0, .match_offset=136241 }, { .children_offset=0, .match_offset=53961 }, { .children_offset=31509, .match_offset=87458 }, { .children_offset=0, .match_offset=65137 }, { .children_offset=0, .match_offset=49761 }, { .children_offset=31512, .match_offset=0 }, { .children_offset=0, .match_offset=56951 }, { .children_offset=31514, .match_offset=0 }, { .children_offset=0, .match_offset=114134 }, { .children_offset=31516, .match_offset=122002 }, { .children_offset=31521, .match_offset=62551 }, { .children_offset=31523, .match_offset=0 }, { .children_offset=0, .match_offset=65106 }, { .children_offset=31525, .match_offset=0 }, { .children_offset=0, .match_offset=29835 }, { .children_offset=31527, .match_offset=0 }, { .children_offset=31529, .match_offset=0 }, { .children_offset=0, .match_offset=123354 }, { .children_offset=31531, .match_offset=0 }, { .children_offset=0, .match_offset=66454 }, { .children_offset=31533, .match_offset=21676 }, { .children_offset=31552, .match_offset=0 }, { .children_offset=0, .match_offset=48173 }, { .children_offset=0, .match_offset=70842 }, { .children_offset=0, .match_offset=65756 }, { .children_offset=0, .match_offset=109836 }, { .children_offset=0, .match_offset=132208 }, { .children_offset=0, .match_offset=57265 }, { .children_offset=0, .match_offset=8969 }, { .children_offset=31561, .match_offset=0 }, { .children_offset=0, .match_offset=28471 }, { .children_offset=0, .match_offset=118552 }, { .children_offset=0, .match_offset=27759 }, { .children_offset=0, .match_offset=124678 }, { .children_offset=31563, .match_offset=55408 }, { .children_offset=0, .match_offset=34467 }, { .children_offset=31567, .match_offset=0 }, { .children_offset=31569, .match_offset=60722 }, { .children_offset=31571, .match_offset=0 }, { .children_offset=31579, .match_offset=0 }, { .children_offset=31582, .match_offset=0 }, { .children_offset=31584, .match_offset=0 }, { .children_offset=31586, .match_offset=0 }, { .children_offset=31588, .match_offset=0 }, { .children_offset=31590, .match_offset=0 }, { .children_offset=0, .match_offset=7003 }, { .children_offset=31592, .match_offset=0 }, { .children_offset=31594, .match_offset=0 }, { .children_offset=31596, .match_offset=0 }, { .children_offset=0, .match_offset=56642 }, { .children_offset=31598, .match_offset=0 }, { .children_offset=31600, .match_offset=0 }, { .children_offset=31602, .match_offset=0 }, { .children_offset=31604, .match_offset=0 }, { .children_offset=0, .match_offset=33827 }, { .children_offset=31606, .match_offset=0 }, { .children_offset=31608, .match_offset=0 }, { .children_offset=31610, .match_offset=0 }, { .children_offset=31612, .match_offset=0 }, { .children_offset=31614, .match_offset=0 }, { .children_offset=0, .match_offset=60926 }, { .children_offset=31616, .match_offset=0 }, { .children_offset=31619, .match_offset=0 }, { .children_offset=31621, .match_offset=0 }, { .children_offset=31623, .match_offset=0 }, { .children_offset=31625, .match_offset=0 }, { .children_offset=31627, .match_offset=0 }, { .children_offset=0, .match_offset=33599 }, { .children_offset=31629, .match_offset=0 }, { .children_offset=31631, .match_offset=0 }, { .children_offset=31633, .match_offset=0 }, { .children_offset=0, .match_offset=101020 }, { .children_offset=31635, .match_offset=0 }, { .children_offset=31637, .match_offset=0 }, { .children_offset=31639, .match_offset=0 }, { .children_offset=31641, .match_offset=0 }, { .children_offset=0, .match_offset=23034 }, { .children_offset=31643, .match_offset=0 }, { .children_offset=31645, .match_offset=0 }, { .children_offset=31647, .match_offset=0 }, { .children_offset=0, .match_offset=12466 }, { .children_offset=31649, .match_offset=0 }, { .children_offset=31652, .match_offset=0 }, { .children_offset=31654, .match_offset=0 }, { .children_offset=31656, .match_offset=0 }, { .children_offset=31658, .match_offset=0 }, { .children_offset=31660, .match_offset=0 }, { .children_offset=0, .match_offset=33230 }, { .children_offset=31662, .match_offset=0 }, { .children_offset=31664, .match_offset=0 }, { .children_offset=31666, .match_offset=0 }, { .children_offset=31668, .match_offset=0 }, { .children_offset=0, .match_offset=55864 }, { .children_offset=0, .match_offset=20532 }, { .children_offset=31670, .match_offset=0 }, { .children_offset=31674, .match_offset=0 }, { .children_offset=31676, .match_offset=0 }, { .children_offset=31678, .match_offset=0 }, { .children_offset=31680, .match_offset=0 }, { .children_offset=31682, .match_offset=0 }, { .children_offset=0, .match_offset=42661 }, { .children_offset=31684, .match_offset=0 }, { .children_offset=0, .match_offset=1216 }, { .children_offset=31686, .match_offset=0 }, { .children_offset=31688, .match_offset=0 }, { .children_offset=31690, .match_offset=0 }, { .children_offset=31693, .match_offset=0 }, { .children_offset=31695, .match_offset=0 }, { .children_offset=0, .match_offset=87789 }, { .children_offset=31697, .match_offset=0 }, { .children_offset=31699, .match_offset=0 }, { .children_offset=0, .match_offset=38906 }, { .children_offset=31701, .match_offset=0 }, { .children_offset=31703, .match_offset=0 }, { .children_offset=31705, .match_offset=0 }, { .children_offset=31707, .match_offset=0 }, { .children_offset=31709, .match_offset=0 }, { .children_offset=31711, .match_offset=0 }, { .children_offset=0, .match_offset=49251 }, { .children_offset=0, .match_offset=58558 }, { .children_offset=31713, .match_offset=0 }, { .children_offset=31717, .match_offset=32959 }, { .children_offset=31719, .match_offset=0 }, { .children_offset=31721, .match_offset=0 }, { .children_offset=0, .match_offset=35721 }, { .children_offset=31723, .match_offset=0 }, { .children_offset=31725, .match_offset=0 }, { .children_offset=31727, .match_offset=0 }, { .children_offset=31729, .match_offset=0 }, { .children_offset=0, .match_offset=33514 }, { .children_offset=31731, .match_offset=0 }, { .children_offset=31733, .match_offset=0 }, { .children_offset=31735, .match_offset=0 }, { .children_offset=31737, .match_offset=0 }, { .children_offset=31739, .match_offset=0 }, { .children_offset=31741, .match_offset=0 }, { .children_offset=0, .match_offset=40575 }, { .children_offset=0, .match_offset=32951 }, { .children_offset=31743, .match_offset=110894 }, { .children_offset=0, .match_offset=68312 }, { .children_offset=31748, .match_offset=0 }, { .children_offset=31750, .match_offset=0 }, { .children_offset=0, .match_offset=62944 }, { .children_offset=31752, .match_offset=122146 }, { .children_offset=31755, .match_offset=0 }, { .children_offset=31757, .match_offset=0 }, { .children_offset=31759, .match_offset=0 }, { .children_offset=31761, .match_offset=0 }, { .children_offset=31763, .match_offset=0 }, { .children_offset=31765, .match_offset=0 }, { .children_offset=0, .match_offset=12398 }, { .children_offset=31767, .match_offset=0 }, { .children_offset=31770, .match_offset=0 }, { .children_offset=31772, .match_offset=0 }, { .children_offset=0, .match_offset=22091 }, { .children_offset=0, .match_offset=30424 }, { .children_offset=31774, .match_offset=0 }, { .children_offset=0, .match_offset=78480 }, { .children_offset=31776, .match_offset=0 }, { .children_offset=0, .match_offset=57521 }, { .children_offset=0, .match_offset=28710 }, { .children_offset=31778, .match_offset=0 }, { .children_offset=31780, .match_offset=0 }, { .children_offset=31782, .match_offset=0 }, { .children_offset=0, .match_offset=129869 }, { .children_offset=31784, .match_offset=61506 }, { .children_offset=31787, .match_offset=0 }, { .children_offset=0, .match_offset=130305 }, { .children_offset=0, .match_offset=6896 }, { .children_offset=31789, .match_offset=26119 }, { .children_offset=31791, .match_offset=0 }, { .children_offset=0, .match_offset=58814 }, { .children_offset=0, .match_offset=129312 }, { .children_offset=0, .match_offset=15060 }, { .children_offset=31793, .match_offset=67758 }, { .children_offset=31801, .match_offset=64474 }, { .children_offset=0, .match_offset=22674 }, { .children_offset=31807, .match_offset=0 }, { .children_offset=31809, .match_offset=50701 }, { .children_offset=31811, .match_offset=0 }, { .children_offset=0, .match_offset=129972 }, { .children_offset=0, .match_offset=34022 }, { .children_offset=0, .match_offset=8806 }, { .children_offset=0, .match_offset=51167 }, { .children_offset=31813, .match_offset=0 }, { .children_offset=0, .match_offset=9909 }, { .children_offset=31815, .match_offset=35329 }, { .children_offset=31818, .match_offset=65533 }, { .children_offset=31820, .match_offset=0 }, { .children_offset=0, .match_offset=42025 }, { .children_offset=31822, .match_offset=0 }, { .children_offset=31826, .match_offset=0 }, { .children_offset=31828, .match_offset=0 }, { .children_offset=0, .match_offset=79710 }, { .children_offset=31831, .match_offset=0 }, { .children_offset=0, .match_offset=68316 }, { .children_offset=0, .match_offset=56653 }, { .children_offset=0, .match_offset=90125 }, { .children_offset=31833, .match_offset=122133 }, { .children_offset=31838, .match_offset=135050 }, { .children_offset=0, .match_offset=131723 }, { .children_offset=0, .match_offset=22830 }, { .children_offset=0, .match_offset=21962 }, { .children_offset=0, .match_offset=67771 }, { .children_offset=0, .match_offset=123328 }, { .children_offset=0, .match_offset=111123 }, { .children_offset=0, .match_offset=28496 }, { .children_offset=31843, .match_offset=130937 }, { .children_offset=0, .match_offset=103970 }, { .children_offset=0, .match_offset=61762 }, { .children_offset=0, .match_offset=61563 }, { .children_offset=0, .match_offset=45107 }, { .children_offset=31848, .match_offset=14265 }, { .children_offset=31856, .match_offset=0 }, { .children_offset=0, .match_offset=117653 }, { .children_offset=31858, .match_offset=0 }, { .children_offset=0, .match_offset=118435 }, { .children_offset=31860, .match_offset=55808 }, { .children_offset=0, .match_offset=132594 }, { .children_offset=0, .match_offset=90679 }, { .children_offset=31862, .match_offset=0 }, { .children_offset=0, .match_offset=74598 }, { .children_offset=31864, .match_offset=25995 }, { .children_offset=0, .match_offset=111446 }, { .children_offset=0, .match_offset=87781 }, { .children_offset=31866, .match_offset=110345 }, { .children_offset=0, .match_offset=6693 }, { .children_offset=31871, .match_offset=74318 }, { .children_offset=0, .match_offset=30772 }, { .children_offset=0, .match_offset=67546 }, { .children_offset=0, .match_offset=1523 }, { .children_offset=31873, .match_offset=0 }, { .children_offset=31877, .match_offset=127339 }, { .children_offset=31880, .match_offset=0 }, { .children_offset=31882, .match_offset=0 }, { .children_offset=31884, .match_offset=0 }, { .children_offset=0, .match_offset=55784 }, { .children_offset=0, .match_offset=73860 }, { .children_offset=31886, .match_offset=0 }, { .children_offset=31888, .match_offset=0 }, { .children_offset=31890, .match_offset=0 }, { .children_offset=0, .match_offset=64757 }, { .children_offset=31892, .match_offset=114069 }, { .children_offset=0, .match_offset=89676 }, { .children_offset=31894, .match_offset=0 }, { .children_offset=31901, .match_offset=0 }, { .children_offset=31905, .match_offset=0 }, { .children_offset=0, .match_offset=64252 }, { .children_offset=0, .match_offset=30487 }, { .children_offset=0, .match_offset=58597 }, { .children_offset=0, .match_offset=62591 }, { .children_offset=31915, .match_offset=20626 }, { .children_offset=0, .match_offset=43434 }, { .children_offset=0, .match_offset=64536 }, { .children_offset=0, .match_offset=74690 }, { .children_offset=0, .match_offset=123750 }, { .children_offset=0, .match_offset=104080 }, { .children_offset=31917, .match_offset=0 }, { .children_offset=0, .match_offset=62872 }, { .children_offset=0, .match_offset=38929 }, { .children_offset=0, .match_offset=116959 }, { .children_offset=0, .match_offset=22174 }, { .children_offset=0, .match_offset=102283 }, { .children_offset=0, .match_offset=90316 }, { .children_offset=0, .match_offset=6538 }, { .children_offset=31928, .match_offset=61022 }, { .children_offset=0, .match_offset=136156 }, { .children_offset=0, .match_offset=103095 }, { .children_offset=0, .match_offset=35209 }, { .children_offset=31930, .match_offset=0 }, { .children_offset=0, .match_offset=100990 }, { .children_offset=31932, .match_offset=0 }, { .children_offset=31935, .match_offset=0 }, { .children_offset=0, .match_offset=25572 }, { .children_offset=0, .match_offset=133664 }, { .children_offset=31937, .match_offset=0 }, { .children_offset=0, .match_offset=125395 }, { .children_offset=31939, .match_offset=134312 }, { .children_offset=31943, .match_offset=0 }, { .children_offset=31945, .match_offset=0 }, { .children_offset=31948, .match_offset=0 }, { .children_offset=31950, .match_offset=0 }, { .children_offset=31952, .match_offset=0 }, { .children_offset=31954, .match_offset=0 }, { .children_offset=0, .match_offset=25572 }, { .children_offset=31956, .match_offset=0 }, { .children_offset=31958, .match_offset=0 }, { .children_offset=31960, .match_offset=0 }, { .children_offset=31962, .match_offset=0 }, { .children_offset=31964, .match_offset=0 }, { .children_offset=31966, .match_offset=0 }, { .children_offset=31968, .match_offset=0 }, { .children_offset=31970, .match_offset=0 }, { .children_offset=31972, .match_offset=0 }, { .children_offset=0, .match_offset=65106 }, { .children_offset=0, .match_offset=134312 }, { .children_offset=31974, .match_offset=0 }, { .children_offset=0, .match_offset=61739 }, { .children_offset=31976, .match_offset=0 }, { .children_offset=31978, .match_offset=0 }, { .children_offset=0, .match_offset=33373 }, { .children_offset=31980, .match_offset=61739 }, { .children_offset=31982, .match_offset=0 }, { .children_offset=31984, .match_offset=58576 }, { .children_offset=0, .match_offset=1078 }, { .children_offset=31986, .match_offset=15299 }, { .children_offset=31988, .match_offset=0 }, { .children_offset=0, .match_offset=124664 }, { .children_offset=31990, .match_offset=68888 }, { .children_offset=31999, .match_offset=102555 }, { .children_offset=0, .match_offset=64361 }, { .children_offset=32001, .match_offset=0 }, { .children_offset=32003, .match_offset=0 }, { .children_offset=0, .match_offset=123618 }, { .children_offset=0, .match_offset=38147 }, { .children_offset=32005, .match_offset=25785 }, { .children_offset=32009, .match_offset=122476 }, { .children_offset=0, .match_offset=122545 }, { .children_offset=32011, .match_offset=45113 }, { .children_offset=0, .match_offset=13377 }, { .children_offset=32013, .match_offset=109570 }, { .children_offset=0, .match_offset=20268 }, { .children_offset=32015, .match_offset=0 }, { .children_offset=0, .match_offset=109267 }, { .children_offset=32017, .match_offset=0 }, { .children_offset=0, .match_offset=9095 }, { .children_offset=0, .match_offset=23786 }, { .children_offset=32019, .match_offset=0 }, { .children_offset=0, .match_offset=89827 }, { .children_offset=32021, .match_offset=5691 }, { .children_offset=32038, .match_offset=0 }, { .children_offset=0, .match_offset=104337 }, { .children_offset=0, .match_offset=7504 }, { .children_offset=0, .match_offset=37895 }, { .children_offset=0, .match_offset=65825 }, { .children_offset=0, .match_offset=81133 }, { .children_offset=32045, .match_offset=0 }, { .children_offset=32047, .match_offset=0 }, { .children_offset=32049, .match_offset=0 }, { .children_offset=32051, .match_offset=0 }, { .children_offset=0, .match_offset=8444 }, { .children_offset=0, .match_offset=136193 }, { .children_offset=32053, .match_offset=0 }, { .children_offset=32055, .match_offset=0 }, { .children_offset=32057, .match_offset=0 }, { .children_offset=32059, .match_offset=0 }, { .children_offset=0, .match_offset=131485 }, { .children_offset=32061, .match_offset=0 }, { .children_offset=0, .match_offset=113430 }, { .children_offset=32063, .match_offset=0 }, { .children_offset=32065, .match_offset=0 }, { .children_offset=32067, .match_offset=0 }, { .children_offset=0, .match_offset=113334 }, { .children_offset=32069, .match_offset=0 }, { .children_offset=32071, .match_offset=0 }, { .children_offset=32074, .match_offset=0 }, { .children_offset=32076, .match_offset=0 }, { .children_offset=0, .match_offset=37545 }, { .children_offset=32078, .match_offset=0 }, { .children_offset=32080, .match_offset=0 }, { .children_offset=0, .match_offset=46185 }, { .children_offset=32082, .match_offset=87008 }, { .children_offset=32086, .match_offset=0 }, { .children_offset=32090, .match_offset=0 }, { .children_offset=32092, .match_offset=0 }, { .children_offset=32094, .match_offset=0 }, { .children_offset=32096, .match_offset=0 }, { .children_offset=32098, .match_offset=0 }, { .children_offset=32100, .match_offset=0 }, { .children_offset=32102, .match_offset=0 }, { .children_offset=0, .match_offset=60158 }, { .children_offset=32104, .match_offset=0 }, { .children_offset=32106, .match_offset=0 }, { .children_offset=32108, .match_offset=0 }, { .children_offset=32110, .match_offset=0 }, { .children_offset=32112, .match_offset=0 }, { .children_offset=0, .match_offset=57181 }, { .children_offset=32114, .match_offset=0 }, { .children_offset=32116, .match_offset=0 }, { .children_offset=32118, .match_offset=0 }, { .children_offset=32120, .match_offset=0 }, { .children_offset=32122, .match_offset=0 }, { .children_offset=32124, .match_offset=0 }, { .children_offset=0, .match_offset=87092 }, { .children_offset=32126, .match_offset=0 }, { .children_offset=32128, .match_offset=0 }, { .children_offset=32130, .match_offset=0 }, { .children_offset=32132, .match_offset=0 }, { .children_offset=32134, .match_offset=0 }, { .children_offset=32136, .match_offset=0 }, { .children_offset=32138, .match_offset=0 }, { .children_offset=32140, .match_offset=0 }, { .children_offset=32142, .match_offset=0 }, { .children_offset=32144, .match_offset=0 }, { .children_offset=32146, .match_offset=0 }, { .children_offset=32148, .match_offset=0 }, { .children_offset=0, .match_offset=24344 }, { .children_offset=32150, .match_offset=0 }, { .children_offset=32152, .match_offset=0 }, { .children_offset=32154, .match_offset=0 }, { .children_offset=32156, .match_offset=0 }, { .children_offset=32158, .match_offset=0 }, { .children_offset=32160, .match_offset=0 }, { .children_offset=0, .match_offset=43333 }, { .children_offset=32162, .match_offset=43489 }, { .children_offset=32164, .match_offset=87380 }, { .children_offset=0, .match_offset=39066 }, { .children_offset=32166, .match_offset=116535 }, { .children_offset=0, .match_offset=57471 }, { .children_offset=32168, .match_offset=84903 }, { .children_offset=32172, .match_offset=0 }, { .children_offset=32174, .match_offset=0 }, { .children_offset=0, .match_offset=90214 }, { .children_offset=32176, .match_offset=0 }, { .children_offset=32178, .match_offset=0 }, { .children_offset=0, .match_offset=44006 }, { .children_offset=32180, .match_offset=0 }, { .children_offset=32182, .match_offset=119753 }, { .children_offset=32185, .match_offset=0 }, { .children_offset=32188, .match_offset=0 }, { .children_offset=32190, .match_offset=0 }, { .children_offset=32192, .match_offset=0 }, { .children_offset=32194, .match_offset=0 }, { .children_offset=32196, .match_offset=0 }, { .children_offset=32198, .match_offset=0 }, { .children_offset=32200, .match_offset=0 }, { .children_offset=32202, .match_offset=0 }, { .children_offset=32204, .match_offset=0 }, { .children_offset=32206, .match_offset=0 }, { .children_offset=32208, .match_offset=0 }, { .children_offset=0, .match_offset=65294 }, { .children_offset=32210, .match_offset=0 }, { .children_offset=0, .match_offset=125248 }, { .children_offset=32212, .match_offset=0 }, { .children_offset=32214, .match_offset=0 }, { .children_offset=32216, .match_offset=0 }, { .children_offset=0, .match_offset=61847 }, { .children_offset=32218, .match_offset=0 }, { .children_offset=0, .match_offset=6780 }, { .children_offset=32220, .match_offset=116100 }, { .children_offset=32234, .match_offset=0 }, { .children_offset=32236, .match_offset=0 }, { .children_offset=32238, .match_offset=0 }, { .children_offset=32240, .match_offset=0 }, { .children_offset=0, .match_offset=22695 }, { .children_offset=32242, .match_offset=0 }, { .children_offset=32246, .match_offset=33554 }, { .children_offset=32248, .match_offset=0 }, { .children_offset=0, .match_offset=22161 }, { .children_offset=32250, .match_offset=0 }, { .children_offset=32252, .match_offset=0 }, { .children_offset=32254, .match_offset=0 }, { .children_offset=32256, .match_offset=0 }, { .children_offset=32258, .match_offset=0 }, { .children_offset=32260, .match_offset=0 }, { .children_offset=32262, .match_offset=0 }, { .children_offset=0, .match_offset=34440 }, { .children_offset=32264, .match_offset=0 }, { .children_offset=32266, .match_offset=0 }, { .children_offset=32268, .match_offset=0 }, { .children_offset=32270, .match_offset=0 }, { .children_offset=0, .match_offset=74024 }, { .children_offset=32272, .match_offset=0 }, { .children_offset=32274, .match_offset=0 }, { .children_offset=32276, .match_offset=0 }, { .children_offset=32278, .match_offset=0 }, { .children_offset=32280, .match_offset=0 }, { .children_offset=32282, .match_offset=0 }, { .children_offset=32284, .match_offset=0 }, { .children_offset=32286, .match_offset=0 }, { .children_offset=32288, .match_offset=0 }, { .children_offset=32290, .match_offset=0 }, { .children_offset=32292, .match_offset=0 }, { .children_offset=32294, .match_offset=0 }, { .children_offset=32296, .match_offset=0 }, { .children_offset=32298, .match_offset=0 }, { .children_offset=32300, .match_offset=0 }, { .children_offset=32302, .match_offset=0 }, { .children_offset=0, .match_offset=131378 }, { .children_offset=32304, .match_offset=26831 }, { .children_offset=32311, .match_offset=0 }, { .children_offset=32313, .match_offset=0 }, { .children_offset=32315, .match_offset=0 }, { .children_offset=0, .match_offset=135940 }, { .children_offset=32317, .match_offset=0 }, { .children_offset=32319, .match_offset=0 }, { .children_offset=32321, .match_offset=0 }, { .children_offset=0, .match_offset=135862 }, { .children_offset=32323, .match_offset=0 }, { .children_offset=32325, .match_offset=0 }, { .children_offset=32327, .match_offset=0 }, { .children_offset=32329, .match_offset=0 }, { .children_offset=32331, .match_offset=0 }, { .children_offset=0, .match_offset=14426 }, { .children_offset=32333, .match_offset=0 }, { .children_offset=32335, .match_offset=0 }, { .children_offset=32337, .match_offset=0 }, { .children_offset=0, .match_offset=28577 }, { .children_offset=0, .match_offset=50070 }, { .children_offset=32339, .match_offset=0 }, { .children_offset=32341, .match_offset=0 }, { .children_offset=32343, .match_offset=0 }, { .children_offset=32345, .match_offset=0 }, { .children_offset=0, .match_offset=14447 }, { .children_offset=32347, .match_offset=0 }, { .children_offset=32349, .match_offset=0 }, { .children_offset=32351, .match_offset=0 }, { .children_offset=32353, .match_offset=0 }, { .children_offset=32355, .match_offset=0 }, { .children_offset=32357, .match_offset=0 }, { .children_offset=32359, .match_offset=60077 }, { .children_offset=32363, .match_offset=0 }, { .children_offset=32365, .match_offset=0 }, { .children_offset=32367, .match_offset=0 }, { .children_offset=32369, .match_offset=0 }, { .children_offset=0, .match_offset=114883 }, { .children_offset=32371, .match_offset=0 }, { .children_offset=32373, .match_offset=0 }, { .children_offset=32375, .match_offset=0 }, { .children_offset=0, .match_offset=123729 }, { .children_offset=32377, .match_offset=0 }, { .children_offset=32379, .match_offset=0 }, { .children_offset=32381, .match_offset=0 }, { .children_offset=32383, .match_offset=0 }, { .children_offset=0, .match_offset=37688 }, { .children_offset=32385, .match_offset=0 }, { .children_offset=32387, .match_offset=14426 }, { .children_offset=32389, .match_offset=0 }, { .children_offset=0, .match_offset=14426 }, { .children_offset=0, .match_offset=49866 }, { .children_offset=0, .match_offset=13383 }, { .children_offset=32393, .match_offset=0 }, { .children_offset=32395, .match_offset=0 }, { .children_offset=32398, .match_offset=0 }, { .children_offset=32400, .match_offset=0 }, { .children_offset=32402, .match_offset=0 }, { .children_offset=32404, .match_offset=0 }, { .children_offset=32406, .match_offset=0 }, { .children_offset=32408, .match_offset=0 }, { .children_offset=32410, .match_offset=0 }, { .children_offset=32412, .match_offset=0 }, { .children_offset=32414, .match_offset=0 }, { .children_offset=32416, .match_offset=58576 }, { .children_offset=32418, .match_offset=0 }, { .children_offset=32420, .match_offset=0 }, { .children_offset=32422, .match_offset=0 }, { .children_offset=32424, .match_offset=0 }, { .children_offset=0, .match_offset=1078 }, { .children_offset=32426, .match_offset=0 }, { .children_offset=32428, .match_offset=61739 }, { .children_offset=32432, .match_offset=0 }, { .children_offset=32434, .match_offset=0 }, { .children_offset=32436, .match_offset=0 }, { .children_offset=32438, .match_offset=0 }, { .children_offset=0, .match_offset=134312 }, { .children_offset=32440, .match_offset=0 }, { .children_offset=32442, .match_offset=0 }, { .children_offset=32444, .match_offset=0 }, { .children_offset=32446, .match_offset=0 }, { .children_offset=32448, .match_offset=0 }, { .children_offset=32450, .match_offset=0 }, { .children_offset=0, .match_offset=103333 }, { .children_offset=32452, .match_offset=0 }, { .children_offset=32454, .match_offset=0 }, { .children_offset=32456, .match_offset=0 }, { .children_offset=32458, .match_offset=0 }, { .children_offset=0, .match_offset=33373 }, { .children_offset=32460, .match_offset=0 }, { .children_offset=32462, .match_offset=88592 }, { .children_offset=32464, .match_offset=0 }, { .children_offset=0, .match_offset=88592 }, { .children_offset=0, .match_offset=114017 }, { .children_offset=0, .match_offset=23930 }, { .children_offset=32468, .match_offset=0 }, { .children_offset=32470, .match_offset=0 }, { .children_offset=32472, .match_offset=0 }, { .children_offset=32474, .match_offset=0 }, { .children_offset=32476, .match_offset=0 }, { .children_offset=32478, .match_offset=0 }, { .children_offset=32480, .match_offset=0 }, { .children_offset=32482, .match_offset=37221 }, { .children_offset=32484, .match_offset=0 }, { .children_offset=32486, .match_offset=0 }, { .children_offset=32488, .match_offset=0 }, { .children_offset=32490, .match_offset=0 }, { .children_offset=32492, .match_offset=0 }, { .children_offset=32494, .match_offset=0 }, { .children_offset=32496, .match_offset=0 }, { .children_offset=32498, .match_offset=0 }, { .children_offset=32500, .match_offset=0 }, { .children_offset=0, .match_offset=7236 }, { .children_offset=32502, .match_offset=0 }, { .children_offset=32505, .match_offset=0 }, { .children_offset=32507, .match_offset=0 }, { .children_offset=32509, .match_offset=0 }, { .children_offset=32511, .match_offset=0 }, { .children_offset=32513, .match_offset=0 }, { .children_offset=32515, .match_offset=0 }, { .children_offset=32517, .match_offset=0 }, { .children_offset=32519, .match_offset=0 }, { .children_offset=32521, .match_offset=0 }, { .children_offset=32523, .match_offset=0 }, { .children_offset=32525, .match_offset=0 }, { .children_offset=32527, .match_offset=0 }, { .children_offset=0, .match_offset=88592 }, { .children_offset=32529, .match_offset=0 }, { .children_offset=32531, .match_offset=0 }, { .children_offset=32533, .match_offset=0 }, { .children_offset=32535, .match_offset=0 }, { .children_offset=32537, .match_offset=0 }, { .children_offset=32539, .match_offset=0 }, { .children_offset=32541, .match_offset=0 }, { .children_offset=32543, .match_offset=0 }, { .children_offset=32545, .match_offset=0 }, { .children_offset=32547, .match_offset=0 }, { .children_offset=32549, .match_offset=0 }, { .children_offset=32551, .match_offset=26932 }, { .children_offset=32553, .match_offset=0 }, { .children_offset=32555, .match_offset=0 }, { .children_offset=32557, .match_offset=0 }, { .children_offset=32559, .match_offset=0 }, { .children_offset=0, .match_offset=118455 }, { .children_offset=32561, .match_offset=0 }, { .children_offset=32564, .match_offset=0 }, { .children_offset=32566, .match_offset=0 }, { .children_offset=32568, .match_offset=0 }, { .children_offset=32570, .match_offset=0 }, { .children_offset=32572, .match_offset=0 }, { .children_offset=32574, .match_offset=0 }, { .children_offset=32576, .match_offset=0 }, { .children_offset=32579, .match_offset=0 }, { .children_offset=32581, .match_offset=0 }, { .children_offset=32583, .match_offset=0 }, { .children_offset=32585, .match_offset=0 }, { .children_offset=32587, .match_offset=0 }, { .children_offset=32589, .match_offset=0 }, { .children_offset=32591, .match_offset=0 }, { .children_offset=32593, .match_offset=0 }, { .children_offset=0, .match_offset=37561 }, { .children_offset=32595, .match_offset=0 }, { .children_offset=32597, .match_offset=0 }, { .children_offset=32599, .match_offset=0 }, { .children_offset=32601, .match_offset=0 }, { .children_offset=32603, .match_offset=0 }, { .children_offset=32605, .match_offset=0 }, { .children_offset=32607, .match_offset=0 }, { .children_offset=32609, .match_offset=0 }, { .children_offset=32611, .match_offset=0 }, { .children_offset=32613, .match_offset=0 }, { .children_offset=0, .match_offset=14279 }, { .children_offset=32615, .match_offset=0 }, { .children_offset=32619, .match_offset=0 }, { .children_offset=32621, .match_offset=0 }, { .children_offset=32623, .match_offset=0 }, { .children_offset=32625, .match_offset=0 }, { .children_offset=32627, .match_offset=0 }, { .children_offset=32629, .match_offset=0 }, { .children_offset=32631, .match_offset=0 }, { .children_offset=32633, .match_offset=0 }, { .children_offset=0, .match_offset=55853 }, { .children_offset=32635, .match_offset=0 }, { .children_offset=32637, .match_offset=0 }, { .children_offset=32639, .match_offset=0 }, { .children_offset=32641, .match_offset=0 }, { .children_offset=32643, .match_offset=0 }, { .children_offset=32645, .match_offset=21863 }, { .children_offset=32647, .match_offset=0 }, { .children_offset=32649, .match_offset=0 }, { .children_offset=32651, .match_offset=0 }, { .children_offset=32653, .match_offset=0 }, { .children_offset=32655, .match_offset=0 }, { .children_offset=32657, .match_offset=0 }, { .children_offset=32659, .match_offset=0 }, { .children_offset=32661, .match_offset=0 }, { .children_offset=32663, .match_offset=0 }, { .children_offset=0, .match_offset=23917 }, { .children_offset=32665, .match_offset=0 }, { .children_offset=32667, .match_offset=0 }, { .children_offset=32669, .match_offset=0 }, { .children_offset=32671, .match_offset=0 }, { .children_offset=32673, .match_offset=0 }, { .children_offset=32675, .match_offset=0 }, { .children_offset=32677, .match_offset=0 }, { .children_offset=32679, .match_offset=0 }, { .children_offset=32681, .match_offset=0 }, { .children_offset=32683, .match_offset=0 }, { .children_offset=0, .match_offset=68967 }, { .children_offset=32685, .match_offset=0 }, { .children_offset=32688, .match_offset=0 }, { .children_offset=32690, .match_offset=0 }, { .children_offset=32692, .match_offset=0 }, { .children_offset=32694, .match_offset=13125 }, { .children_offset=32698, .match_offset=0 }, { .children_offset=32700, .match_offset=0 }, { .children_offset=32702, .match_offset=0 }, { .children_offset=32704, .match_offset=0 }, { .children_offset=0, .match_offset=58914 }, { .children_offset=32706, .match_offset=0 }, { .children_offset=32708, .match_offset=0 }, { .children_offset=32710, .match_offset=0 }, { .children_offset=32712, .match_offset=0 }, { .children_offset=32714, .match_offset=0 }, { .children_offset=32716, .match_offset=0 }, { .children_offset=32718, .match_offset=0 }, { .children_offset=32720, .match_offset=0 }, { .children_offset=0, .match_offset=58875 }, { .children_offset=32722, .match_offset=0 }, { .children_offset=32724, .match_offset=0 }, { .children_offset=32726, .match_offset=0 }, { .children_offset=32728, .match_offset=0 }, { .children_offset=0, .match_offset=87697 }, { .children_offset=0, .match_offset=67734 }, { .children_offset=32730, .match_offset=0 }, { .children_offset=32732, .match_offset=0 }, { .children_offset=32734, .match_offset=0 }, { .children_offset=32736, .match_offset=0 }, { .children_offset=32738, .match_offset=0 }, { .children_offset=32740, .match_offset=0 }, { .children_offset=32742, .match_offset=0 }, { .children_offset=32744, .match_offset=0 }, { .children_offset=32746, .match_offset=0 }, { .children_offset=32748, .match_offset=0 }, { .children_offset=0, .match_offset=124664 }, { .children_offset=32750, .match_offset=0 }, { .children_offset=32753, .match_offset=0 }, { .children_offset=32755, .match_offset=0 }, { .children_offset=32757, .match_offset=0 }, { .children_offset=32759, .match_offset=0 }, { .children_offset=0, .match_offset=116566 }, { .children_offset=32761, .match_offset=0 }, { .children_offset=32763, .match_offset=0 }, { .children_offset=0, .match_offset=12523 }, { .children_offset=32765, .match_offset=43057 }, { .children_offset=0, .match_offset=102679 }, { .children_offset=0, .match_offset=6386 }, { .children_offset=0, .match_offset=8640 }, { .children_offset=32767, .match_offset=0 }, { .children_offset=32772, .match_offset=61898 }, { .children_offset=32774, .match_offset=131378 }, { .children_offset=32776, .match_offset=0 }, { .children_offset=32778, .match_offset=0 }, { .children_offset=32780, .match_offset=0 }, { .children_offset=32782, .match_offset=0 }, { .children_offset=0, .match_offset=131378 }, { .children_offset=32784, .match_offset=0 }, { .children_offset=0, .match_offset=46695 }, { .children_offset=32786, .match_offset=0 }, { .children_offset=32788, .match_offset=0 }, { .children_offset=32790, .match_offset=0 }, { .children_offset=32792, .match_offset=0 }, { .children_offset=0, .match_offset=132962 }, { .children_offset=32794, .match_offset=37221 }, { .children_offset=32797, .match_offset=0 }, { .children_offset=32799, .match_offset=0 }, { .children_offset=0, .match_offset=7236 }, { .children_offset=32801, .match_offset=0 }, { .children_offset=0, .match_offset=37221 }, { .children_offset=32803, .match_offset=0 }, { .children_offset=0, .match_offset=127288 }, { .children_offset=32806, .match_offset=0 }, { .children_offset=0, .match_offset=123132 }, { .children_offset=32808, .match_offset=0 }, { .children_offset=32816, .match_offset=1055 }, { .children_offset=0, .match_offset=80290 }, { .children_offset=32821, .match_offset=0 }, { .children_offset=0, .match_offset=111477 }, { .children_offset=0, .match_offset=68409 }, { .children_offset=0, .match_offset=502 }, { .children_offset=32823, .match_offset=119588 }, { .children_offset=0, .match_offset=44991 }, { .children_offset=0, .match_offset=133617 }, { .children_offset=0, .match_offset=65794 }, { .children_offset=0, .match_offset=54140 }, { .children_offset=32828, .match_offset=0 }, { .children_offset=32830, .match_offset=0 }, { .children_offset=32832, .match_offset=0 }, { .children_offset=32834, .match_offset=0 }, { .children_offset=32836, .match_offset=0 }, { .children_offset=32838, .match_offset=0 }, { .children_offset=32840, .match_offset=0 }, { .children_offset=32842, .match_offset=0 }, { .children_offset=0, .match_offset=111477 }, { .children_offset=32844, .match_offset=5921 }, { .children_offset=0, .match_offset=72001 }, { .children_offset=0, .match_offset=109415 }, { .children_offset=32847, .match_offset=0 }, { .children_offset=32849, .match_offset=0 }, { .children_offset=32851, .match_offset=26932 }, { .children_offset=0, .match_offset=118455 }, { .children_offset=32853, .match_offset=52608 }, { .children_offset=0, .match_offset=51171 }, { .children_offset=0, .match_offset=16423 }, { .children_offset=32859, .match_offset=133191 }, { .children_offset=0, .match_offset=134361 }, { .children_offset=0, .match_offset=25736 }, { .children_offset=0, .match_offset=136231 }, { .children_offset=32861, .match_offset=20230 }, { .children_offset=0, .match_offset=69131 }, { .children_offset=32866, .match_offset=25564 }, { .children_offset=0, .match_offset=34633 }, { .children_offset=0, .match_offset=62161 }, { .children_offset=0, .match_offset=126528 }, { .children_offset=32868, .match_offset=24272 }, { .children_offset=0, .match_offset=124640 }, { .children_offset=32879, .match_offset=21863 }, { .children_offset=32882, .match_offset=0 }, { .children_offset=32884, .match_offset=0 }, { .children_offset=0, .match_offset=23917 }, { .children_offset=0, .match_offset=104484 }, { .children_offset=32886, .match_offset=0 }, { .children_offset=0, .match_offset=26283 }, { .children_offset=32889, .match_offset=0 }, { .children_offset=32891, .match_offset=0 }, { .children_offset=32893, .match_offset=0 }, { .children_offset=0, .match_offset=35882 }, { .children_offset=32895, .match_offset=0 }, { .children_offset=32901, .match_offset=32763 }, { .children_offset=0, .match_offset=39227 }, { .children_offset=32903, .match_offset=0 }, { .children_offset=0, .match_offset=43629 }, { .children_offset=32905, .match_offset=0 }, { .children_offset=32907, .match_offset=0 }, { .children_offset=0, .match_offset=136551 }, { .children_offset=32909, .match_offset=0 }, { .children_offset=32911, .match_offset=0 }, { .children_offset=32913, .match_offset=0 }, { .children_offset=32916, .match_offset=0 }, { .children_offset=32918, .match_offset=0 }, { .children_offset=0, .match_offset=124664 }, { .children_offset=32920, .match_offset=0 }, { .children_offset=32922, .match_offset=0 }, { .children_offset=32924, .match_offset=0 }, { .children_offset=32926, .match_offset=0 }, { .children_offset=32928, .match_offset=0 }, { .children_offset=32930, .match_offset=0 }, { .children_offset=32932, .match_offset=0 }, { .children_offset=0, .match_offset=131378 }, { .children_offset=32934, .match_offset=0 }, { .children_offset=32938, .match_offset=44747 }, { .children_offset=0, .match_offset=37713 }, { .children_offset=32940, .match_offset=0 }, { .children_offset=0, .match_offset=42110 }, { .children_offset=0, .match_offset=30623 }, { .children_offset=32942, .match_offset=0 }, { .children_offset=32945, .match_offset=0 }, { .children_offset=32947, .match_offset=32902 }, { .children_offset=0, .match_offset=25566 }, { .children_offset=0, .match_offset=90640 }, { .children_offset=32950, .match_offset=13125 }, { .children_offset=32952, .match_offset=58914 }, { .children_offset=0, .match_offset=58914 }, { .children_offset=32954, .match_offset=0 }, { .children_offset=32956, .match_offset=0 }, { .children_offset=0, .match_offset=124664 }, { .children_offset=32958, .match_offset=0 }, { .children_offset=0, .match_offset=103173 }, { .children_offset=32960, .match_offset=0 }, { .children_offset=32962, .match_offset=0 }, { .children_offset=0, .match_offset=131378 }, { .children_offset=32964, .match_offset=0 }, { .children_offset=32966, .match_offset=0 }, { .children_offset=32968, .match_offset=0 }, { .children_offset=32971, .match_offset=0 }, { .children_offset=0, .match_offset=37561 }, { .children_offset=32973, .match_offset=0 }, { .children_offset=0, .match_offset=14279 }, { .children_offset=32975, .match_offset=0 }, { .children_offset=32982, .match_offset=88841 }, { .children_offset=0, .match_offset=55853 }, { .children_offset=32985, .match_offset=0 }, { .children_offset=32987, .match_offset=0 }, { .children_offset=32989, .match_offset=0 }, { .children_offset=32991, .match_offset=0 }, { .children_offset=0, .match_offset=55853 }, { .children_offset=32993, .match_offset=0 }, { .children_offset=0, .match_offset=21863 }, { .children_offset=0, .match_offset=133643 }, { .children_offset=0, .match_offset=132166 }, { .children_offset=32995, .match_offset=0 }, { .children_offset=0, .match_offset=109479 }, { .children_offset=32997, .match_offset=10781 }, { .children_offset=0, .match_offset=68967 }, { .children_offset=33000, .match_offset=0 }, { .children_offset=33002, .match_offset=0 }, { .children_offset=33004, .match_offset=0 }, { .children_offset=33006, .match_offset=0 }, { .children_offset=0, .match_offset=68967 }, { .children_offset=33008, .match_offset=0 }, { .children_offset=33020, .match_offset=30744 }, { .children_offset=0, .match_offset=89116 }, { .children_offset=0, .match_offset=122557 }, { .children_offset=33023, .match_offset=0 }, { .children_offset=0, .match_offset=1061 }, { .children_offset=0, .match_offset=49727 }, { .children_offset=33027, .match_offset=0 }, { .children_offset=0, .match_offset=135468 }, { .children_offset=33030, .match_offset=0 }, { .children_offset=33032, .match_offset=0 }, { .children_offset=33034, .match_offset=0 }, { .children_offset=0, .match_offset=122504 }, { .children_offset=33036, .match_offset=0 }, { .children_offset=0, .match_offset=123729 }, { .children_offset=33038, .match_offset=0 }, { .children_offset=33040, .match_offset=0 }, { .children_offset=0, .match_offset=15709 }, { .children_offset=33042, .match_offset=0 }, { .children_offset=33045, .match_offset=0 }, { .children_offset=0, .match_offset=58570 }, { .children_offset=33047, .match_offset=0 }, { .children_offset=33049, .match_offset=0 }, { .children_offset=0, .match_offset=38941 }, { .children_offset=33051, .match_offset=0 }, { .children_offset=0, .match_offset=103333 }, { .children_offset=33053, .match_offset=0 }, { .children_offset=0, .match_offset=13790 }, { .children_offset=33056, .match_offset=0 }, { .children_offset=33058, .match_offset=0 }, { .children_offset=33060, .match_offset=0 }, { .children_offset=0, .match_offset=57933 }, { .children_offset=33062, .match_offset=0 }, { .children_offset=33064, .match_offset=0 }, { .children_offset=33066, .match_offset=0 }, { .children_offset=33068, .match_offset=0 }, { .children_offset=33070, .match_offset=0 }, { .children_offset=33072, .match_offset=0 }, { .children_offset=33074, .match_offset=0 }, { .children_offset=33077, .match_offset=0 }, { .children_offset=33079, .match_offset=0 }, { .children_offset=33081, .match_offset=0 }, { .children_offset=33083, .match_offset=58576 }, { .children_offset=33085, .match_offset=0 }, { .children_offset=0, .match_offset=1078 }, { .children_offset=33087, .match_offset=0 }, { .children_offset=33089, .match_offset=0 }, { .children_offset=33091, .match_offset=0 }, { .children_offset=33093, .match_offset=0 }, { .children_offset=33095, .match_offset=26932 }, { .children_offset=33097, .match_offset=0 }, { .children_offset=0, .match_offset=118455 }, { .children_offset=33099, .match_offset=0 }, { .children_offset=33101, .match_offset=125208 }, { .children_offset=0, .match_offset=62696 }, { .children_offset=33103, .match_offset=66439 }, { .children_offset=0, .match_offset=58425 }, { .children_offset=0, .match_offset=48471 }, { .children_offset=0, .match_offset=78206 }, { .children_offset=33107, .match_offset=0 }, { .children_offset=0, .match_offset=130875 }, { .children_offset=33110, .match_offset=0 }, { .children_offset=0, .match_offset=68862 }, { .children_offset=33112, .match_offset=22380 }, { .children_offset=33130, .match_offset=0 }, { .children_offset=0, .match_offset=54223 }, { .children_offset=0, .match_offset=28739 }, { .children_offset=0, .match_offset=136043 }, { .children_offset=33134, .match_offset=0 }, { .children_offset=33138, .match_offset=0 }, { .children_offset=0, .match_offset=14443 }, { .children_offset=0, .match_offset=131219 }, { .children_offset=0, .match_offset=89344 }, { .children_offset=0, .match_offset=125168 }, { .children_offset=0, .match_offset=131150 }, { .children_offset=0, .match_offset=70955 }, { .children_offset=0, .match_offset=113288 }, { .children_offset=0, .match_offset=108796 }, { .children_offset=0, .match_offset=1505 }, { .children_offset=33148, .match_offset=0 }, { .children_offset=33159, .match_offset=52681 }, { .children_offset=0, .match_offset=45098 }, { .children_offset=33161, .match_offset=68287 }, { .children_offset=0, .match_offset=48465 }, { .children_offset=0, .match_offset=72873 }, { .children_offset=0, .match_offset=45285 }, { .children_offset=0, .match_offset=60809 }, { .children_offset=0, .match_offset=67832 }, { .children_offset=0, .match_offset=129958 }, { .children_offset=0, .match_offset=125130 }, { .children_offset=33163, .match_offset=81056 }, { .children_offset=0, .match_offset=114319 }, { .children_offset=0, .match_offset=125609 }, { .children_offset=33165, .match_offset=0 }, { .children_offset=0, .match_offset=45883 }, { .children_offset=0, .match_offset=133485 }, { .children_offset=33169, .match_offset=116334 }, { .children_offset=0, .match_offset=42244 }, { .children_offset=33171, .match_offset=0 }, { .children_offset=0, .match_offset=15445 }, { .children_offset=33173, .match_offset=0 }, { .children_offset=0, .match_offset=103815 }, { .children_offset=33175, .match_offset=0 }, { .children_offset=33177, .match_offset=0 }, { .children_offset=33179, .match_offset=0 }, { .children_offset=0, .match_offset=48181 }, { .children_offset=33181, .match_offset=72094 }, { .children_offset=33183, .match_offset=0 }, { .children_offset=0, .match_offset=50277 }, { .children_offset=33185, .match_offset=0 }, { .children_offset=33187, .match_offset=0 }, { .children_offset=0, .match_offset=64142 }, { .children_offset=33189, .match_offset=0 }, { .children_offset=0, .match_offset=81077 }, { .children_offset=33191, .match_offset=85439 }, { .children_offset=33195, .match_offset=0 }, { .children_offset=33197, .match_offset=0 }, { .children_offset=33199, .match_offset=7754 }, { .children_offset=0, .match_offset=8450 }, { .children_offset=33201, .match_offset=0 }, { .children_offset=33203, .match_offset=0 }, { .children_offset=33207, .match_offset=0 }, { .children_offset=0, .match_offset=53704 }, { .children_offset=33210, .match_offset=0 }, { .children_offset=33212, .match_offset=0 }, { .children_offset=0, .match_offset=132901 }, { .children_offset=33214, .match_offset=0 }, { .children_offset=0, .match_offset=87870 }, { .children_offset=0, .match_offset=32749 }, { .children_offset=33216, .match_offset=0 }, { .children_offset=0, .match_offset=33531 }, { .children_offset=33218, .match_offset=45755 }, { .children_offset=33222, .match_offset=0 }, { .children_offset=33224, .match_offset=0 }, { .children_offset=33227, .match_offset=0 }, { .children_offset=0, .match_offset=60711 }, { .children_offset=33229, .match_offset=0 }, { .children_offset=0, .match_offset=62365 }, { .children_offset=0, .match_offset=115798 }, { .children_offset=33231, .match_offset=0 }, { .children_offset=0, .match_offset=43076 }, { .children_offset=33233, .match_offset=76963 }, { .children_offset=0, .match_offset=116210 }, { .children_offset=0, .match_offset=132827 }, { .children_offset=0, .match_offset=121942 }, { .children_offset=33236, .match_offset=130307 }, { .children_offset=0, .match_offset=62678 }, { .children_offset=33238, .match_offset=0 }, { .children_offset=33240, .match_offset=0 }, { .children_offset=0, .match_offset=50717 }, { .children_offset=33242, .match_offset=35735 }, { .children_offset=33244, .match_offset=0 }, { .children_offset=33246, .match_offset=0 }, { .children_offset=33248, .match_offset=0 }, { .children_offset=0, .match_offset=108791 }, { .children_offset=33250, .match_offset=0 }, { .children_offset=0, .match_offset=81172 }, { .children_offset=0, .match_offset=53858 }, { .children_offset=33252, .match_offset=113532 }, { .children_offset=33258, .match_offset=0 }, { .children_offset=33260, .match_offset=0 }, { .children_offset=33262, .match_offset=0 }, { .children_offset=0, .match_offset=131562 }, { .children_offset=33264, .match_offset=0 }, { .children_offset=33266, .match_offset=0 }, { .children_offset=33268, .match_offset=0 }, { .children_offset=0, .match_offset=5592 }, { .children_offset=33270, .match_offset=0 }, { .children_offset=33272, .match_offset=0 }, { .children_offset=33274, .match_offset=0 }, { .children_offset=33276, .match_offset=0 }, { .children_offset=0, .match_offset=90145 }, { .children_offset=33278, .match_offset=0 }, { .children_offset=33280, .match_offset=0 }, { .children_offset=33282, .match_offset=0 }, { .children_offset=0, .match_offset=11008 }, { .children_offset=33284, .match_offset=0 }, { .children_offset=33286, .match_offset=0 }, { .children_offset=33288, .match_offset=0 }, { .children_offset=0, .match_offset=35135 }, { .children_offset=33290, .match_offset=109231 }, { .children_offset=33296, .match_offset=50331 }, { .children_offset=0, .match_offset=43500 }, { .children_offset=33299, .match_offset=0 }, { .children_offset=33302, .match_offset=0 }, { .children_offset=0, .match_offset=21181 }, { .children_offset=33304, .match_offset=1965 }, { .children_offset=33306, .match_offset=0 }, { .children_offset=0, .match_offset=15464 }, { .children_offset=0, .match_offset=7089 }, { .children_offset=33308, .match_offset=65377 }, { .children_offset=0, .match_offset=49253 }, { .children_offset=33310, .match_offset=0 }, { .children_offset=33312, .match_offset=0 }, { .children_offset=33314, .match_offset=0 }, { .children_offset=0, .match_offset=131225 }, { .children_offset=33316, .match_offset=118408 }, { .children_offset=0, .match_offset=129408 }, { .children_offset=33318, .match_offset=44968 }, { .children_offset=33329, .match_offset=10783 }, { .children_offset=0, .match_offset=89848 }, { .children_offset=33336, .match_offset=0 }, { .children_offset=33338, .match_offset=0 }, { .children_offset=33340, .match_offset=0 }, { .children_offset=0, .match_offset=27683 }, { .children_offset=0, .match_offset=123444 }, { .children_offset=0, .match_offset=77444 }, { .children_offset=0, .match_offset=110366 }, { .children_offset=0, .match_offset=11994 }, { .children_offset=33342, .match_offset=0 }, { .children_offset=0, .match_offset=1233 }, { .children_offset=0, .match_offset=30477 }, { .children_offset=33344, .match_offset=30060 }, { .children_offset=0, .match_offset=90300 }, { .children_offset=0, .match_offset=111504 }, { .children_offset=0, .match_offset=20590 }, { .children_offset=0, .match_offset=34864 }, { .children_offset=33349, .match_offset=0 }, { .children_offset=0, .match_offset=109237 }, { .children_offset=33351, .match_offset=125535 }, { .children_offset=33360, .match_offset=0 }, { .children_offset=33362, .match_offset=0 }, { .children_offset=33364, .match_offset=0 }, { .children_offset=33366, .match_offset=0 }, { .children_offset=0, .match_offset=131647 }, { .children_offset=33368, .match_offset=110095 }, { .children_offset=0, .match_offset=109284 }, { .children_offset=0, .match_offset=122684 }, { .children_offset=0, .match_offset=11926 }, { .children_offset=33372, .match_offset=64745 }, { .children_offset=33374, .match_offset=0 }, { .children_offset=33376, .match_offset=0 }, { .children_offset=0, .match_offset=7110 }, { .children_offset=0, .match_offset=109580 }, { .children_offset=0, .match_offset=14271 }, { .children_offset=0, .match_offset=13368 }, { .children_offset=0, .match_offset=50585 }, { .children_offset=0, .match_offset=34565 }, { .children_offset=33378, .match_offset=0 }, { .children_offset=0, .match_offset=134171 }, { .children_offset=33380, .match_offset=100918 }, { .children_offset=0, .match_offset=34513 }, { .children_offset=0, .match_offset=119694 }, { .children_offset=0, .match_offset=121944 }, { .children_offset=0, .match_offset=125709 }, { .children_offset=0, .match_offset=129420 }, { .children_offset=0, .match_offset=122529 }, { .children_offset=33387, .match_offset=26934 }, { .children_offset=0, .match_offset=33905 }, { .children_offset=0, .match_offset=119413 }, { .children_offset=33394, .match_offset=67865 }, { .children_offset=0, .match_offset=109591 }, { .children_offset=0, .match_offset=43504 }, { .children_offset=0, .match_offset=114067 }, { .children_offset=0, .match_offset=40872 }, { .children_offset=0, .match_offset=80592 }, { .children_offset=33397, .match_offset=0 }, { .children_offset=0, .match_offset=30921 }, { .children_offset=33399, .match_offset=0 }, { .children_offset=33406, .match_offset=123788 }, { .children_offset=0, .match_offset=55206 }, { .children_offset=0, .match_offset=34619 }, { .children_offset=0, .match_offset=61840 }, { .children_offset=0, .match_offset=26782 }, { .children_offset=33411, .match_offset=122607 }, { .children_offset=33414, .match_offset=0 }, { .children_offset=0, .match_offset=37700 }, { .children_offset=0, .match_offset=131209 }, { .children_offset=33416, .match_offset=73792 }, { .children_offset=33421, .match_offset=59451 }, { .children_offset=0, .match_offset=123700 }, { .children_offset=0, .match_offset=22040 }, { .children_offset=0, .match_offset=32781 }, { .children_offset=0, .match_offset=37587 }, { .children_offset=0, .match_offset=70826 }, { .children_offset=33424, .match_offset=0 }, { .children_offset=0, .match_offset=59996 }, { .children_offset=0, .match_offset=126587 }, { .children_offset=33427, .match_offset=127284 }, { .children_offset=0, .match_offset=30952 }, { .children_offset=33434, .match_offset=6734 }, { .children_offset=0, .match_offset=70816 }, { .children_offset=0, .match_offset=38562 }, { .children_offset=0, .match_offset=115748 }, { .children_offset=33436, .match_offset=15472 }, { .children_offset=0, .match_offset=74449 }, { .children_offset=0, .match_offset=76993 }, { .children_offset=33438, .match_offset=61885 }, { .children_offset=0, .match_offset=5735 }, { .children_offset=33443, .match_offset=61487 }, { .children_offset=0, .match_offset=65778 }, { .children_offset=0, .match_offset=108728 }, { .children_offset=0, .match_offset=16336 }, { .children_offset=33445, .match_offset=0 }, { .children_offset=33473, .match_offset=0 }, { .children_offset=0, .match_offset=109344 }, { .children_offset=0, .match_offset=101007 }, { .children_offset=0, .match_offset=42055 }, { .children_offset=33481, .match_offset=34434 }, { .children_offset=0, .match_offset=119751 }, { .children_offset=33483, .match_offset=109857 }, { .children_offset=33485, .match_offset=0 }, { .children_offset=0, .match_offset=123624 }, { .children_offset=0, .match_offset=30311 }, { .children_offset=33487, .match_offset=0 }, { .children_offset=33490, .match_offset=69100 }, { .children_offset=0, .match_offset=34469 }, { .children_offset=33492, .match_offset=78316 }, { .children_offset=0, .match_offset=135035 }, { .children_offset=33494, .match_offset=0 }, { .children_offset=33501, .match_offset=0 }, { .children_offset=33511, .match_offset=23940 }, { .children_offset=0, .match_offset=27589 }, { .children_offset=0, .match_offset=55690 }, { .children_offset=0, .match_offset=124676 }, { .children_offset=0, .match_offset=39229 }, { .children_offset=33513, .match_offset=38898 }, { .children_offset=0, .match_offset=25969 }, { .children_offset=33515, .match_offset=80482 }, { .children_offset=0, .match_offset=37936 }, { .children_offset=0, .match_offset=136173 }, { .children_offset=0, .match_offset=26127 }, { .children_offset=0, .match_offset=20537 }, { .children_offset=0, .match_offset=27816 }, { .children_offset=0, .match_offset=12332 }, { .children_offset=0, .match_offset=74588 }, { .children_offset=0, .match_offset=6226 }, { .children_offset=0, .match_offset=132792 }, { .children_offset=33522, .match_offset=0 }, { .children_offset=33533, .match_offset=42308 }, { .children_offset=0, .match_offset=110254 }, { .children_offset=0, .match_offset=64246 }, { .children_offset=0, .match_offset=133393 }, { .children_offset=0, .match_offset=14400 }, { .children_offset=0, .match_offset=7570 }, { .children_offset=0, .match_offset=58884 }, { .children_offset=0, .match_offset=85411 }, { .children_offset=0, .match_offset=126432 }, { .children_offset=0, .match_offset=62702 }, { .children_offset=0, .match_offset=114471 }, { .children_offset=0, .match_offset=100916 }, { .children_offset=33537, .match_offset=81093 }, { .children_offset=0, .match_offset=77428 }, { .children_offset=33539, .match_offset=0 }, { .children_offset=33550, .match_offset=89071 }, { .children_offset=0, .match_offset=57922 }, { .children_offset=0, .match_offset=133335 }, { .children_offset=0, .match_offset=27539 }, { .children_offset=0, .match_offset=117666 }, { .children_offset=33552, .match_offset=29104 }, { .children_offset=0, .match_offset=89653 }, { .children_offset=33554, .match_offset=42492 }, { .children_offset=0, .match_offset=115770 }, { .children_offset=0, .match_offset=119603 }, { .children_offset=0, .match_offset=30720 }, { .children_offset=0, .match_offset=14473 }, { .children_offset=33556, .match_offset=50715 }, { .children_offset=0, .match_offset=26198 }, { .children_offset=33558, .match_offset=0 }, { .children_offset=33569, .match_offset=13415 }, { .children_offset=0, .match_offset=113409 }, { .children_offset=0, .match_offset=68591 }, { .children_offset=0, .match_offset=16005 }, { .children_offset=33571, .match_offset=114010 }, { .children_offset=0, .match_offset=44667 }, { .children_offset=0, .match_offset=74580 }, { .children_offset=0, .match_offset=42904 }, { .children_offset=33573, .match_offset=67657 }, { .children_offset=0, .match_offset=6908 }, { .children_offset=0, .match_offset=90552 }, { .children_offset=0, .match_offset=25938 }, { .children_offset=0, .match_offset=50692 }, { .children_offset=0, .match_offset=33349 }, { .children_offset=0, .match_offset=113889 }, { .children_offset=0, .match_offset=112733 }, { .children_offset=33578, .match_offset=0 }, { .children_offset=0, .match_offset=125255 }, { .children_offset=0, .match_offset=132138 }, { .children_offset=0, .match_offset=27573 }, { .children_offset=0, .match_offset=77775 }, { .children_offset=0, .match_offset=86999 }, { .children_offset=0, .match_offset=33164 }, { .children_offset=0, .match_offset=116961 }, { .children_offset=0, .match_offset=89958 }, { .children_offset=0, .match_offset=134996 }, { .children_offset=0, .match_offset=21876 }, { .children_offset=33589, .match_offset=0 }, { .children_offset=33592, .match_offset=111076 }, { .children_offset=0, .match_offset=6585 }, { .children_offset=0, .match_offset=20 }, { .children_offset=0, .match_offset=89331 }, { .children_offset=33595, .match_offset=22687 }, { .children_offset=33601, .match_offset=0 }, { .children_offset=33603, .match_offset=0 }, { .children_offset=33605, .match_offset=0 }, { .children_offset=33607, .match_offset=0 }, { .children_offset=33609, .match_offset=0 }, { .children_offset=33611, .match_offset=0 }, { .children_offset=0, .match_offset=52247 }, { .children_offset=33613, .match_offset=0 }, { .children_offset=33615, .match_offset=0 }, { .children_offset=33617, .match_offset=0 }, { .children_offset=0, .match_offset=22029 }, { .children_offset=0, .match_offset=115754 }, { .children_offset=33619, .match_offset=0 }, { .children_offset=0, .match_offset=57767 }, { .children_offset=0, .match_offset=7080 }, { .children_offset=33621, .match_offset=50567 }, { .children_offset=33627, .match_offset=0 }, { .children_offset=33629, .match_offset=0 }, { .children_offset=33632, .match_offset=0 }, { .children_offset=0, .match_offset=35630 }, { .children_offset=33634, .match_offset=0 }, { .children_offset=0, .match_offset=53479 }, { .children_offset=33636, .match_offset=0 }, { .children_offset=33638, .match_offset=0 }, { .children_offset=33640, .match_offset=0 }, { .children_offset=0, .match_offset=35174 }, { .children_offset=33642, .match_offset=0 }, { .children_offset=33644, .match_offset=0 }, { .children_offset=33646, .match_offset=0 }, { .children_offset=33648, .match_offset=0 }, { .children_offset=0, .match_offset=58361 }, { .children_offset=33650, .match_offset=0 }, { .children_offset=33653, .match_offset=0 }, { .children_offset=33655, .match_offset=0 }, { .children_offset=33657, .match_offset=0 }, { .children_offset=0, .match_offset=23919 }, { .children_offset=33659, .match_offset=61990 }, { .children_offset=0, .match_offset=57508 }, { .children_offset=33661, .match_offset=0 }, { .children_offset=33664, .match_offset=0 }, { .children_offset=33666, .match_offset=0 }, { .children_offset=33668, .match_offset=0 }, { .children_offset=33670, .match_offset=0 }, { .children_offset=0, .match_offset=55393 }, { .children_offset=33672, .match_offset=0 }, { .children_offset=33674, .match_offset=0 }, { .children_offset=33676, .match_offset=0 }, { .children_offset=33678, .match_offset=0 }, { .children_offset=33680, .match_offset=0 }, { .children_offset=33682, .match_offset=0 }, { .children_offset=33684, .match_offset=0 }, { .children_offset=0, .match_offset=38545 }, { .children_offset=33686, .match_offset=0 }, { .children_offset=33693, .match_offset=0 }, { .children_offset=33695, .match_offset=0 }, { .children_offset=33697, .match_offset=0 }, { .children_offset=33699, .match_offset=0 }, { .children_offset=33701, .match_offset=0 }, { .children_offset=33703, .match_offset=0 }, { .children_offset=0, .match_offset=12353 }, { .children_offset=33705, .match_offset=0 }, { .children_offset=33707, .match_offset=103157 }, { .children_offset=0, .match_offset=32796 }, { .children_offset=33709, .match_offset=0 }, { .children_offset=33711, .match_offset=0 }, { .children_offset=33713, .match_offset=0 }, { .children_offset=0, .match_offset=129604 }, { .children_offset=0, .match_offset=118376 }, { .children_offset=33715, .match_offset=0 }, { .children_offset=33718, .match_offset=0 }, { .children_offset=33720, .match_offset=0 }, { .children_offset=33722, .match_offset=0 }, { .children_offset=33724, .match_offset=124578 }, { .children_offset=33726, .match_offset=0 }, { .children_offset=0, .match_offset=111431 }, { .children_offset=33728, .match_offset=0 }, { .children_offset=33731, .match_offset=0 }, { .children_offset=33733, .match_offset=0 }, { .children_offset=0, .match_offset=57321 }, { .children_offset=33735, .match_offset=0 }, { .children_offset=33737, .match_offset=0 }, { .children_offset=0, .match_offset=103168 }, { .children_offset=0, .match_offset=63429 }, { .children_offset=33739, .match_offset=0 }, { .children_offset=33747, .match_offset=0 }, { .children_offset=33749, .match_offset=0 }, { .children_offset=0, .match_offset=30906 }, { .children_offset=33751, .match_offset=0 }, { .children_offset=33753, .match_offset=0 }, { .children_offset=33755, .match_offset=0 }, { .children_offset=0, .match_offset=90185 }, { .children_offset=0, .match_offset=8646 }, { .children_offset=33757, .match_offset=0 }, { .children_offset=0, .match_offset=69026 }, { .children_offset=33759, .match_offset=0 }, { .children_offset=0, .match_offset=125048 }, { .children_offset=33761, .match_offset=0 }, { .children_offset=0, .match_offset=131045 }, { .children_offset=33763, .match_offset=0 }, { .children_offset=33765, .match_offset=0 }, { .children_offset=33767, .match_offset=0 }, { .children_offset=0, .match_offset=34545 }, { .children_offset=33769, .match_offset=38783 }, { .children_offset=0, .match_offset=68864 }, { .children_offset=0, .match_offset=130143 }, { .children_offset=33775, .match_offset=0 }, { .children_offset=33777, .match_offset=0 }, { .children_offset=0, .match_offset=58520 }, { .children_offset=0, .match_offset=50283 }, { .children_offset=0, .match_offset=68539 }, { .children_offset=33779, .match_offset=28756 }, { .children_offset=33783, .match_offset=0 }, { .children_offset=33785, .match_offset=0 }, { .children_offset=0, .match_offset=16338 }, { .children_offset=33787, .match_offset=7572 }, { .children_offset=33789, .match_offset=0 }, { .children_offset=33791, .match_offset=0 }, { .children_offset=33793, .match_offset=44799 }, { .children_offset=0, .match_offset=11478 }, { .children_offset=0, .match_offset=1126 }, { .children_offset=33795, .match_offset=33174 }, { .children_offset=33800, .match_offset=0 }, { .children_offset=33802, .match_offset=0 }, { .children_offset=0, .match_offset=27489 }, { .children_offset=33804, .match_offset=0 }, { .children_offset=33806, .match_offset=69116 }, { .children_offset=33808, .match_offset=0 }, { .children_offset=0, .match_offset=108606 }, { .children_offset=33810, .match_offset=0 }, { .children_offset=33813, .match_offset=0 }, { .children_offset=33815, .match_offset=0 }, { .children_offset=0, .match_offset=58937 }, { .children_offset=0, .match_offset=28483 }, { .children_offset=0, .match_offset=9921 }, { .children_offset=33817, .match_offset=68200 }, { .children_offset=33820, .match_offset=0 }, { .children_offset=33822, .match_offset=0 }, { .children_offset=0, .match_offset=131424 }, { .children_offset=0, .match_offset=125084 }, { .children_offset=33824, .match_offset=35184 }, { .children_offset=0, .match_offset=8456 }, { .children_offset=33827, .match_offset=61573 }, { .children_offset=0, .match_offset=67732 }, { .children_offset=33829, .match_offset=0 }, { .children_offset=33832, .match_offset=0 }, { .children_offset=33834, .match_offset=0 }, { .children_offset=0, .match_offset=69129 }, { .children_offset=33836, .match_offset=0 }, { .children_offset=33838, .match_offset=0 }, { .children_offset=33840, .match_offset=0 }, { .children_offset=33842, .match_offset=0 }, { .children_offset=0, .match_offset=118438 }, { .children_offset=33844, .match_offset=90118 }, { .children_offset=33847, .match_offset=0 }, { .children_offset=33849, .match_offset=0 }, { .children_offset=0, .match_offset=27632 }, { .children_offset=33851, .match_offset=0 }, { .children_offset=0, .match_offset=77747 }, { .children_offset=33853, .match_offset=62876 }, { .children_offset=33860, .match_offset=0 }, { .children_offset=33862, .match_offset=0 }, { .children_offset=0, .match_offset=49706 }, { .children_offset=33864, .match_offset=0 }, { .children_offset=33867, .match_offset=0 }, { .children_offset=0, .match_offset=26895 }, { .children_offset=33869, .match_offset=0 }, { .children_offset=33871, .match_offset=0 }, { .children_offset=33873, .match_offset=0 }, { .children_offset=0, .match_offset=87815 }, { .children_offset=33875, .match_offset=53009 }, { .children_offset=33877, .match_offset=0 }, { .children_offset=0, .match_offset=33777 }, { .children_offset=0, .match_offset=56878 }, { .children_offset=33879, .match_offset=0 }, { .children_offset=33883, .match_offset=0 }, { .children_offset=33885, .match_offset=0 }, { .children_offset=0, .match_offset=35768 }, { .children_offset=33887, .match_offset=0 }, { .children_offset=0, .match_offset=43345 }, { .children_offset=33889, .match_offset=0 }, { .children_offset=0, .match_offset=132819 }, { .children_offset=0, .match_offset=6925 }, { .children_offset=33891, .match_offset=55743 }, { .children_offset=33895, .match_offset=0 }, { .children_offset=33898, .match_offset=0 }, { .children_offset=0, .match_offset=34355 }, { .children_offset=33900, .match_offset=0 }, { .children_offset=33902, .match_offset=0 }, { .children_offset=0, .match_offset=89965 }, { .children_offset=33904, .match_offset=0 }, { .children_offset=33906, .match_offset=0 }, { .children_offset=0, .match_offset=11350 }, { .children_offset=33908, .match_offset=0 }, { .children_offset=33913, .match_offset=0 }, { .children_offset=33915, .match_offset=0 }, { .children_offset=33917, .match_offset=0 }, { .children_offset=0, .match_offset=109771 }, { .children_offset=0, .match_offset=30353 }, { .children_offset=33919, .match_offset=0 }, { .children_offset=33921, .match_offset=0 }, { .children_offset=0, .match_offset=12270 }, { .children_offset=33923, .match_offset=0 }, { .children_offset=33925, .match_offset=0 }, { .children_offset=33927, .match_offset=0 }, { .children_offset=33929, .match_offset=0 }, { .children_offset=0, .match_offset=5473 }, { .children_offset=33931, .match_offset=134402 }, { .children_offset=33942, .match_offset=0 }, { .children_offset=33944, .match_offset=0 }, { .children_offset=33946, .match_offset=0 }, { .children_offset=0, .match_offset=12019 }, { .children_offset=33948, .match_offset=0 }, { .children_offset=0, .match_offset=30998 }, { .children_offset=33950, .match_offset=0 }, { .children_offset=33952, .match_offset=0 }, { .children_offset=33954, .match_offset=0 }, { .children_offset=33956, .match_offset=0 }, { .children_offset=33958, .match_offset=0 }, { .children_offset=0, .match_offset=13321 }, { .children_offset=33960, .match_offset=49342 }, { .children_offset=33963, .match_offset=0 }, { .children_offset=33969, .match_offset=0 }, { .children_offset=33971, .match_offset=0 }, { .children_offset=33973, .match_offset=0 }, { .children_offset=33975, .match_offset=0 }, { .children_offset=33977, .match_offset=0 }, { .children_offset=33979, .match_offset=0 }, { .children_offset=33981, .match_offset=0 }, { .children_offset=33983, .match_offset=0 }, { .children_offset=33985, .match_offset=0 }, { .children_offset=33987, .match_offset=0 }, { .children_offset=33989, .match_offset=0 }, { .children_offset=33991, .match_offset=0 }, { .children_offset=33993, .match_offset=0 }, { .children_offset=33995, .match_offset=0 }, { .children_offset=33997, .match_offset=0 }, { .children_offset=33999, .match_offset=0 }, { .children_offset=34001, .match_offset=0 }, { .children_offset=34003, .match_offset=0 }, { .children_offset=34005, .match_offset=0 }, { .children_offset=0, .match_offset=87985 }, { .children_offset=34007, .match_offset=0 }, { .children_offset=34009, .match_offset=0 }, { .children_offset=34011, .match_offset=0 }, { .children_offset=0, .match_offset=14952 }, { .children_offset=34013, .match_offset=0 }, { .children_offset=34015, .match_offset=0 }, { .children_offset=34017, .match_offset=0 }, { .children_offset=34019, .match_offset=0 }, { .children_offset=0, .match_offset=123243 }, { .children_offset=34021, .match_offset=0 }, { .children_offset=34023, .match_offset=0 }, { .children_offset=34025, .match_offset=0 }, { .children_offset=34027, .match_offset=0 }, { .children_offset=34029, .match_offset=0 }, { .children_offset=0, .match_offset=60540 }, { .children_offset=34031, .match_offset=0 }, { .children_offset=34033, .match_offset=0 }, { .children_offset=0, .match_offset=2128 }, { .children_offset=34035, .match_offset=0 }, { .children_offset=34037, .match_offset=0 }, { .children_offset=34039, .match_offset=0 }, { .children_offset=0, .match_offset=46227 }, { .children_offset=0, .match_offset=109547 }, { .children_offset=34041, .match_offset=0 }, { .children_offset=34043, .match_offset=0 }, { .children_offset=0, .match_offset=34182 }, { .children_offset=34045, .match_offset=0 }, { .children_offset=34047, .match_offset=0 }, { .children_offset=0, .match_offset=58475 }, { .children_offset=0, .match_offset=71800 }, { .children_offset=34049, .match_offset=0 }, { .children_offset=0, .match_offset=133289 }, { .children_offset=0, .match_offset=22152 }, { .children_offset=34051, .match_offset=388 }, { .children_offset=34061, .match_offset=0 }, { .children_offset=34063, .match_offset=0 }, { .children_offset=34065, .match_offset=0 }, { .children_offset=34067, .match_offset=0 }, { .children_offset=34069, .match_offset=0 }, { .children_offset=34071, .match_offset=0 }, { .children_offset=0, .match_offset=24314 }, { .children_offset=0, .match_offset=8835 }, { .children_offset=0, .match_offset=89680 }, { .children_offset=34073, .match_offset=0 }, { .children_offset=0, .match_offset=37593 }, { .children_offset=0, .match_offset=119421 }, { .children_offset=34075, .match_offset=0 }, { .children_offset=0, .match_offset=74451 }, { .children_offset=0, .match_offset=53542 }, { .children_offset=34077, .match_offset=0 }, { .children_offset=34079, .match_offset=0 }, { .children_offset=34081, .match_offset=0 }, { .children_offset=34083, .match_offset=0 }, { .children_offset=0, .match_offset=109832 }, { .children_offset=34085, .match_offset=0 }, { .children_offset=0, .match_offset=125531 }, { .children_offset=34087, .match_offset=131850 }, { .children_offset=34094, .match_offset=0 }, { .children_offset=0, .match_offset=89152 }, { .children_offset=34096, .match_offset=0 }, { .children_offset=34099, .match_offset=10489 }, { .children_offset=34103, .match_offset=0 }, { .children_offset=34108, .match_offset=0 }, { .children_offset=34110, .match_offset=0 }, { .children_offset=34112, .match_offset=0 }, { .children_offset=34114, .match_offset=0 }, { .children_offset=34116, .match_offset=0 }, { .children_offset=34118, .match_offset=0 }, { .children_offset=34120, .match_offset=0 }, { .children_offset=34122, .match_offset=0 }, { .children_offset=34124, .match_offset=0 }, { .children_offset=34126, .match_offset=0 }, { .children_offset=34128, .match_offset=0 }, { .children_offset=34130, .match_offset=0 }, { .children_offset=34132, .match_offset=0 }, { .children_offset=0, .match_offset=60499 }, { .children_offset=34134, .match_offset=0 }, { .children_offset=34136, .match_offset=0 }, { .children_offset=34138, .match_offset=0 }, { .children_offset=34140, .match_offset=0 }, { .children_offset=34142, .match_offset=0 }, { .children_offset=0, .match_offset=133495 }, { .children_offset=34144, .match_offset=104188 }, { .children_offset=34146, .match_offset=0 }, { .children_offset=34148, .match_offset=0 }, { .children_offset=34150, .match_offset=0 }, { .children_offset=34152, .match_offset=0 }, { .children_offset=34154, .match_offset=0 }, { .children_offset=34156, .match_offset=0 }, { .children_offset=0, .match_offset=119211 }, { .children_offset=0, .match_offset=134847 }, { .children_offset=34158, .match_offset=0 }, { .children_offset=34160, .match_offset=0 }, { .children_offset=34162, .match_offset=0 }, { .children_offset=34164, .match_offset=0 }, { .children_offset=34166, .match_offset=0 }, { .children_offset=34169, .match_offset=0 }, { .children_offset=34171, .match_offset=0 }, { .children_offset=34173, .match_offset=0 }, { .children_offset=34175, .match_offset=0 }, { .children_offset=34177, .match_offset=0 }, { .children_offset=34179, .match_offset=0 }, { .children_offset=34181, .match_offset=0 }, { .children_offset=34183, .match_offset=0 }, { .children_offset=34185, .match_offset=0 }, { .children_offset=34187, .match_offset=0 }, { .children_offset=0, .match_offset=130037 }, { .children_offset=34189, .match_offset=0 }, { .children_offset=34191, .match_offset=0 }, { .children_offset=34193, .match_offset=0 }, { .children_offset=34195, .match_offset=0 }, { .children_offset=0, .match_offset=85259 }, { .children_offset=34197, .match_offset=0 }, { .children_offset=34199, .match_offset=0 }, { .children_offset=0, .match_offset=6595 }, { .children_offset=34201, .match_offset=0 }, { .children_offset=34204, .match_offset=0 }, { .children_offset=34206, .match_offset=0 }, { .children_offset=34208, .match_offset=0 }, { .children_offset=0, .match_offset=65308 }, { .children_offset=0, .match_offset=30804 }, { .children_offset=34210, .match_offset=0 }, { .children_offset=34212, .match_offset=0 }, { .children_offset=34214, .match_offset=0 }, { .children_offset=34216, .match_offset=0 }, { .children_offset=34218, .match_offset=0 }, { .children_offset=34220, .match_offset=0 }, { .children_offset=0, .match_offset=45932 }, { .children_offset=34222, .match_offset=0 }, { .children_offset=34224, .match_offset=0 }, { .children_offset=0, .match_offset=130301 }, { .children_offset=34226, .match_offset=0 }, { .children_offset=34229, .match_offset=0 }, { .children_offset=34231, .match_offset=0 }, { .children_offset=0, .match_offset=58853 }, { .children_offset=34234, .match_offset=0 }, { .children_offset=34237, .match_offset=0 }, { .children_offset=0, .match_offset=62823 }, { .children_offset=34239, .match_offset=0 }, { .children_offset=34241, .match_offset=0 }, { .children_offset=34243, .match_offset=0 }, { .children_offset=0, .match_offset=130940 }, { .children_offset=34245, .match_offset=0 }, { .children_offset=34247, .match_offset=0 }, { .children_offset=34249, .match_offset=0 }, { .children_offset=34251, .match_offset=0 }, { .children_offset=34253, .match_offset=0 }, { .children_offset=34255, .match_offset=0 }, { .children_offset=0, .match_offset=7005 }, { .children_offset=34257, .match_offset=0 }, { .children_offset=34259, .match_offset=0 }, { .children_offset=34262, .match_offset=0 }, { .children_offset=34264, .match_offset=0 }, { .children_offset=0, .match_offset=38470 }, { .children_offset=34266, .match_offset=0 }, { .children_offset=0, .match_offset=72080 }, { .children_offset=0, .match_offset=58731 }, { .children_offset=34268, .match_offset=102961 }, { .children_offset=34280, .match_offset=0 }, { .children_offset=34283, .match_offset=0 }, { .children_offset=34285, .match_offset=0 }, { .children_offset=0, .match_offset=61587 }, { .children_offset=34288, .match_offset=0 }, { .children_offset=34290, .match_offset=0 }, { .children_offset=34292, .match_offset=0 }, { .children_offset=0, .match_offset=12415 }, { .children_offset=34294, .match_offset=0 }, { .children_offset=0, .match_offset=89241 }, { .children_offset=34296, .match_offset=0 }, { .children_offset=34298, .match_offset=0 }, { .children_offset=34300, .match_offset=0 }, { .children_offset=0, .match_offset=26285 }, { .children_offset=34302, .match_offset=130242 }, { .children_offset=34307, .match_offset=0 }, { .children_offset=34309, .match_offset=72859 }, { .children_offset=34311, .match_offset=0 }, { .children_offset=0, .match_offset=72859 }, { .children_offset=0, .match_offset=37252 }, { .children_offset=34313, .match_offset=0 }, { .children_offset=34315, .match_offset=0 }, { .children_offset=34317, .match_offset=0 }, { .children_offset=0, .match_offset=86051 }, { .children_offset=0, .match_offset=69030 }, { .children_offset=34319, .match_offset=60532 }, { .children_offset=34321, .match_offset=0 }, { .children_offset=0, .match_offset=21968 }, { .children_offset=34323, .match_offset=0 }, { .children_offset=34326, .match_offset=0 }, { .children_offset=34329, .match_offset=0 }, { .children_offset=34331, .match_offset=114612 }, { .children_offset=34333, .match_offset=0 }, { .children_offset=0, .match_offset=135515 }, { .children_offset=34335, .match_offset=0 }, { .children_offset=0, .match_offset=77998 }, { .children_offset=34337, .match_offset=0 }, { .children_offset=0, .match_offset=131729 }, { .children_offset=34339, .match_offset=0 }, { .children_offset=34341, .match_offset=0 }, { .children_offset=34343, .match_offset=0 }, { .children_offset=0, .match_offset=73636 }, { .children_offset=34345, .match_offset=0 }, { .children_offset=34347, .match_offset=0 }, { .children_offset=34350, .match_offset=0 }, { .children_offset=34352, .match_offset=0 }, { .children_offset=34354, .match_offset=0 }, { .children_offset=34356, .match_offset=78331 }, { .children_offset=0, .match_offset=68752 }, { .children_offset=34358, .match_offset=0 }, { .children_offset=0, .match_offset=117550 }, { .children_offset=34360, .match_offset=0 }, { .children_offset=0, .match_offset=109390 }, { .children_offset=34362, .match_offset=0 }, { .children_offset=34364, .match_offset=0 }, { .children_offset=34366, .match_offset=0 }, { .children_offset=34368, .match_offset=0 }, { .children_offset=0, .match_offset=88720 }, { .children_offset=34370, .match_offset=0 }, { .children_offset=34372, .match_offset=0 }, { .children_offset=34374, .match_offset=0 }, { .children_offset=34377, .match_offset=0 }, { .children_offset=34379, .match_offset=0 }, { .children_offset=0, .match_offset=42369 }, { .children_offset=34381, .match_offset=0 }, { .children_offset=34383, .match_offset=0 }, { .children_offset=34385, .match_offset=0 }, { .children_offset=34387, .match_offset=0 }, { .children_offset=0, .match_offset=131205 }, { .children_offset=0, .match_offset=42316 }, { .children_offset=34389, .match_offset=108798 }, { .children_offset=34395, .match_offset=0 }, { .children_offset=34397, .match_offset=0 }, { .children_offset=0, .match_offset=85827 }, { .children_offset=34399, .match_offset=0 }, { .children_offset=0, .match_offset=26397 }, { .children_offset=34401, .match_offset=0 }, { .children_offset=34403, .match_offset=0 }, { .children_offset=34405, .match_offset=0 }, { .children_offset=0, .match_offset=135023 }, { .children_offset=34407, .match_offset=0 }, { .children_offset=34409, .match_offset=0 }, { .children_offset=34411, .match_offset=0 }, { .children_offset=34413, .match_offset=0 }, { .children_offset=0, .match_offset=86947 }, { .children_offset=34415, .match_offset=0 }, { .children_offset=0, .match_offset=22048 }, { .children_offset=34417, .match_offset=80598 }, { .children_offset=34422, .match_offset=0 }, { .children_offset=34425, .match_offset=0 }, { .children_offset=34427, .match_offset=37670 }, { .children_offset=34429, .match_offset=0 }, { .children_offset=0, .match_offset=80193 }, { .children_offset=34431, .match_offset=0 }, { .children_offset=34433, .match_offset=126371 }, { .children_offset=0, .match_offset=61639 }, { .children_offset=34435, .match_offset=0 }, { .children_offset=34438, .match_offset=0 }, { .children_offset=34440, .match_offset=0 }, { .children_offset=0, .match_offset=24318 }, { .children_offset=34442, .match_offset=0 }, { .children_offset=34444, .match_offset=0 }, { .children_offset=34446, .match_offset=10882 }, { .children_offset=34448, .match_offset=0 }, { .children_offset=0, .match_offset=64430 }, { .children_offset=34450, .match_offset=34916 }, { .children_offset=34454, .match_offset=0 }, { .children_offset=34456, .match_offset=0 }, { .children_offset=0, .match_offset=114058 }, { .children_offset=34458, .match_offset=0 }, { .children_offset=0, .match_offset=42278 }, { .children_offset=34460, .match_offset=0 }, { .children_offset=34462, .match_offset=0 }, { .children_offset=34464, .match_offset=0 }, { .children_offset=0, .match_offset=30553 }, { .children_offset=0, .match_offset=42487 }, { .children_offset=34466, .match_offset=53614 }, { .children_offset=34470, .match_offset=0 }, { .children_offset=0, .match_offset=104107 }, { .children_offset=34472, .match_offset=0 }, { .children_offset=34475, .match_offset=0 }, { .children_offset=0, .match_offset=42414 }, { .children_offset=34477, .match_offset=0 }, { .children_offset=34479, .match_offset=0 }, { .children_offset=0, .match_offset=7711 }, { .children_offset=34481, .match_offset=42433 }, { .children_offset=34485, .match_offset=0 }, { .children_offset=34487, .match_offset=0 }, { .children_offset=0, .match_offset=114132 }, { .children_offset=34489, .match_offset=0 }, { .children_offset=0, .match_offset=15496 }, { .children_offset=34491, .match_offset=0 }, { .children_offset=34493, .match_offset=0 }, { .children_offset=34495, .match_offset=0 }, { .children_offset=34497, .match_offset=103575 }, { .children_offset=0, .match_offset=113090 }, { .children_offset=34499, .match_offset=29837 }, { .children_offset=34503, .match_offset=0 }, { .children_offset=0, .match_offset=6394 }, { .children_offset=34505, .match_offset=0 }, { .children_offset=34507, .match_offset=0 }, { .children_offset=0, .match_offset=130009 }, { .children_offset=34509, .match_offset=0 }, { .children_offset=34511, .match_offset=23792 }, { .children_offset=34517, .match_offset=0 }, { .children_offset=34520, .match_offset=0 }, { .children_offset=0, .match_offset=121854 }, { .children_offset=34522, .match_offset=0 }, { .children_offset=34524, .match_offset=0 }, { .children_offset=34526, .match_offset=0 }, { .children_offset=0, .match_offset=121988 }, { .children_offset=34529, .match_offset=0 }, { .children_offset=34531, .match_offset=0 }, { .children_offset=0, .match_offset=103557 }, { .children_offset=34533, .match_offset=0 }, { .children_offset=34535, .match_offset=0 }, { .children_offset=34537, .match_offset=0 }, { .children_offset=34539, .match_offset=0 }, { .children_offset=34541, .match_offset=0 }, { .children_offset=0, .match_offset=128035 }, { .children_offset=34543, .match_offset=0 }, { .children_offset=34547, .match_offset=0 }, { .children_offset=34551, .match_offset=0 }, { .children_offset=0, .match_offset=13136 }, { .children_offset=34553, .match_offset=90294 }, { .children_offset=34555, .match_offset=0 }, { .children_offset=34557, .match_offset=0 }, { .children_offset=34559, .match_offset=0 }, { .children_offset=0, .match_offset=1225 }, { .children_offset=0, .match_offset=109355 }, { .children_offset=34561, .match_offset=0 }, { .children_offset=34563, .match_offset=0 }, { .children_offset=0, .match_offset=108574 }, { .children_offset=34565, .match_offset=0 }, { .children_offset=34567, .match_offset=0 }, { .children_offset=0, .match_offset=43780 }, { .children_offset=34569, .match_offset=0 }, { .children_offset=34571, .match_offset=0 }, { .children_offset=34573, .match_offset=0 }, { .children_offset=34575, .match_offset=0 }, { .children_offset=34577, .match_offset=0 }, { .children_offset=34579, .match_offset=0 }, { .children_offset=34581, .match_offset=0 }, { .children_offset=34583, .match_offset=0 }, { .children_offset=34585, .match_offset=0 }, { .children_offset=34587, .match_offset=0 }, { .children_offset=0, .match_offset=62305 }, { .children_offset=34589, .match_offset=0 }, { .children_offset=34591, .match_offset=0 }, { .children_offset=34593, .match_offset=0 }, { .children_offset=0, .match_offset=21668 }, { .children_offset=34595, .match_offset=31022 }, { .children_offset=0, .match_offset=40843 }, { .children_offset=34597, .match_offset=103091 }, { .children_offset=34600, .match_offset=0 }, { .children_offset=34602, .match_offset=0 }, { .children_offset=34604, .match_offset=42302 }, { .children_offset=0, .match_offset=131556 }, { .children_offset=34606, .match_offset=0 }, { .children_offset=0, .match_offset=89258 }, { .children_offset=34608, .match_offset=2290 }, { .children_offset=34612, .match_offset=0 }, { .children_offset=34614, .match_offset=0 }, { .children_offset=34616, .match_offset=0 }, { .children_offset=0, .match_offset=131403 }, { .children_offset=34618, .match_offset=0 }, { .children_offset=34620, .match_offset=0 }, { .children_offset=34622, .match_offset=0 }, { .children_offset=34624, .match_offset=0 }, { .children_offset=34626, .match_offset=0 }, { .children_offset=34628, .match_offset=0 }, { .children_offset=0, .match_offset=74109 }, { .children_offset=34630, .match_offset=0 }, { .children_offset=34632, .match_offset=0 }, { .children_offset=34634, .match_offset=0 }, { .children_offset=0, .match_offset=14360 }, { .children_offset=34636, .match_offset=0 }, { .children_offset=34660, .match_offset=0 }, { .children_offset=34663, .match_offset=0 }, { .children_offset=34673, .match_offset=11346 }, { .children_offset=0, .match_offset=21905 }, { .children_offset=0, .match_offset=28977 }, { .children_offset=34675, .match_offset=26014 }, { .children_offset=0, .match_offset=80738 }, { .children_offset=0, .match_offset=40584 }, { .children_offset=0, .match_offset=5348 }, { .children_offset=0, .match_offset=67356 }, { .children_offset=0, .match_offset=11156 }, { .children_offset=0, .match_offset=60663 }, { .children_offset=0, .match_offset=33885 }, { .children_offset=34677, .match_offset=0 }, { .children_offset=0, .match_offset=89161 }, { .children_offset=0, .match_offset=28432 }, { .children_offset=0, .match_offset=7585 }, { .children_offset=34680, .match_offset=69168 }, { .children_offset=34702, .match_offset=89836 }, { .children_offset=34709, .match_offset=0 }, { .children_offset=34711, .match_offset=0 }, { .children_offset=34713, .match_offset=0 }, { .children_offset=34715, .match_offset=0 }, { .children_offset=34717, .match_offset=0 }, { .children_offset=0, .match_offset=125187 }, { .children_offset=0, .match_offset=12126 }, { .children_offset=0, .match_offset=76960 }, { .children_offset=34719, .match_offset=0 }, { .children_offset=34721, .match_offset=0 }, { .children_offset=0, .match_offset=35733 }, { .children_offset=0, .match_offset=114242 }, { .children_offset=34724, .match_offset=0 }, { .children_offset=34726, .match_offset=0 }, { .children_offset=34728, .match_offset=0 }, { .children_offset=34730, .match_offset=0 }, { .children_offset=0, .match_offset=13920 }, { .children_offset=34732, .match_offset=0 }, { .children_offset=0, .match_offset=81154 }, { .children_offset=34734, .match_offset=0 }, { .children_offset=34736, .match_offset=0 }, { .children_offset=34739, .match_offset=0 }, { .children_offset=34741, .match_offset=0 }, { .children_offset=0, .match_offset=33985 }, { .children_offset=34743, .match_offset=0 }, { .children_offset=34745, .match_offset=0 }, { .children_offset=0, .match_offset=8632 }, { .children_offset=34747, .match_offset=62928 }, { .children_offset=0, .match_offset=127323 }, { .children_offset=34751, .match_offset=0 }, { .children_offset=34753, .match_offset=0 }, { .children_offset=0, .match_offset=20407 }, { .children_offset=34755, .match_offset=0 }, { .children_offset=0, .match_offset=61154 }, { .children_offset=34757, .match_offset=0 }, { .children_offset=34760, .match_offset=27983 }, { .children_offset=0, .match_offset=104052 }, { .children_offset=0, .match_offset=77090 }, { .children_offset=34763, .match_offset=0 }, { .children_offset=34765, .match_offset=0 }, { .children_offset=0, .match_offset=81174 }, { .children_offset=34767, .match_offset=46214 }, { .children_offset=34770, .match_offset=0 }, { .children_offset=34772, .match_offset=0 }, { .children_offset=0, .match_offset=80797 }, { .children_offset=34774, .match_offset=0 }, { .children_offset=34776, .match_offset=0 }, { .children_offset=34778, .match_offset=0 }, { .children_offset=0, .match_offset=103600 }, { .children_offset=34780, .match_offset=0 }, { .children_offset=34784, .match_offset=0 }, { .children_offset=34786, .match_offset=0 }, { .children_offset=34788, .match_offset=0 }, { .children_offset=34790, .match_offset=0 }, { .children_offset=34792, .match_offset=0 }, { .children_offset=34794, .match_offset=0 }, { .children_offset=0, .match_offset=42897 }, { .children_offset=34796, .match_offset=0 }, { .children_offset=34799, .match_offset=0 }, { .children_offset=0, .match_offset=63380 }, { .children_offset=34801, .match_offset=0 }, { .children_offset=34803, .match_offset=0 }, { .children_offset=34805, .match_offset=0 }, { .children_offset=0, .match_offset=38114 }, { .children_offset=34807, .match_offset=0 }, { .children_offset=34809, .match_offset=0 }, { .children_offset=34811, .match_offset=0 }, { .children_offset=34813, .match_offset=0 }, { .children_offset=34815, .match_offset=0 }, { .children_offset=0, .match_offset=5574 }, { .children_offset=34817, .match_offset=0 }, { .children_offset=34819, .match_offset=0 }, { .children_offset=34821, .match_offset=0 }, { .children_offset=0, .match_offset=78673 }, { .children_offset=34823, .match_offset=0 }, { .children_offset=34831, .match_offset=0 }, { .children_offset=34834, .match_offset=0 }, { .children_offset=34836, .match_offset=0 }, { .children_offset=34838, .match_offset=64221 }, { .children_offset=34840, .match_offset=0 }, { .children_offset=34842, .match_offset=0 }, { .children_offset=34845, .match_offset=0 }, { .children_offset=34847, .match_offset=0 }, { .children_offset=34849, .match_offset=0 }, { .children_offset=34851, .match_offset=0 }, { .children_offset=0, .match_offset=34704 }, { .children_offset=34853, .match_offset=0 }, { .children_offset=0, .match_offset=6140 }, { .children_offset=34855, .match_offset=0 }, { .children_offset=34857, .match_offset=0 }, { .children_offset=0, .match_offset=104367 }, { .children_offset=34859, .match_offset=0 }, { .children_offset=34861, .match_offset=0 }, { .children_offset=34863, .match_offset=0 }, { .children_offset=0, .match_offset=89644 }, { .children_offset=0, .match_offset=20555 }, { .children_offset=34865, .match_offset=0 }, { .children_offset=34867, .match_offset=0 }, { .children_offset=0, .match_offset=10284 }, { .children_offset=34870, .match_offset=0 }, { .children_offset=0, .match_offset=103342 }, { .children_offset=34872, .match_offset=30650 }, { .children_offset=0, .match_offset=125555 }, { .children_offset=34875, .match_offset=0 }, { .children_offset=34877, .match_offset=0 }, { .children_offset=34879, .match_offset=0 }, { .children_offset=34881, .match_offset=0 }, { .children_offset=0, .match_offset=113671 }, { .children_offset=34883, .match_offset=0 }, { .children_offset=34885, .match_offset=0 }, { .children_offset=34887, .match_offset=0 }, { .children_offset=34889, .match_offset=0 }, { .children_offset=0, .match_offset=64395 }, { .children_offset=34891, .match_offset=0 }, { .children_offset=34893, .match_offset=0 }, { .children_offset=0, .match_offset=27075 }, { .children_offset=34895, .match_offset=0 }, { .children_offset=34902, .match_offset=0 }, { .children_offset=34905, .match_offset=0 }, { .children_offset=34907, .match_offset=0 }, { .children_offset=0, .match_offset=53977 }, { .children_offset=34909, .match_offset=0 }, { .children_offset=0, .match_offset=122466 }, { .children_offset=34911, .match_offset=0 }, { .children_offset=34914, .match_offset=0 }, { .children_offset=34916, .match_offset=0 }, { .children_offset=34918, .match_offset=0 }, { .children_offset=0, .match_offset=90191 }, { .children_offset=34920, .match_offset=0 }, { .children_offset=34922, .match_offset=0 }, { .children_offset=0, .match_offset=6559 }, { .children_offset=34924, .match_offset=0 }, { .children_offset=34926, .match_offset=0 }, { .children_offset=34928, .match_offset=0 }, { .children_offset=34930, .match_offset=0 }, { .children_offset=34932, .match_offset=0 }, { .children_offset=0, .match_offset=72895 }, { .children_offset=34934, .match_offset=0 }, { .children_offset=34936, .match_offset=0 }, { .children_offset=34938, .match_offset=0 }, { .children_offset=34940, .match_offset=0 }, { .children_offset=34942, .match_offset=0 }, { .children_offset=34944, .match_offset=0 }, { .children_offset=0, .match_offset=90131 }, { .children_offset=34946, .match_offset=0 }, { .children_offset=34948, .match_offset=0 }, { .children_offset=34950, .match_offset=0 }, { .children_offset=0, .match_offset=44673 }, { .children_offset=34952, .match_offset=0 }, { .children_offset=34955, .match_offset=0 }, { .children_offset=34957, .match_offset=0 }, { .children_offset=34959, .match_offset=0 }, { .children_offset=0, .match_offset=102269 }, { .children_offset=34961, .match_offset=0 }, { .children_offset=34963, .match_offset=0 }, { .children_offset=34965, .match_offset=0 }, { .children_offset=34967, .match_offset=0 }, { .children_offset=0, .match_offset=132777 }, { .children_offset=34969, .match_offset=109718 }, { .children_offset=34979, .match_offset=0 }, { .children_offset=34982, .match_offset=0 }, { .children_offset=34984, .match_offset=0 }, { .children_offset=34986, .match_offset=0 }, { .children_offset=34988, .match_offset=0 }, { .children_offset=34990, .match_offset=0 }, { .children_offset=0, .match_offset=82007 }, { .children_offset=0, .match_offset=10487 }, { .children_offset=34992, .match_offset=0 }, { .children_offset=34994, .match_offset=0 }, { .children_offset=34996, .match_offset=0 }, { .children_offset=34998, .match_offset=0 }, { .children_offset=0, .match_offset=134508 }, { .children_offset=35000, .match_offset=0 }, { .children_offset=0, .match_offset=12476 }, { .children_offset=35002, .match_offset=0 }, { .children_offset=35004, .match_offset=0 }, { .children_offset=35006, .match_offset=0 }, { .children_offset=35008, .match_offset=0 }, { .children_offset=35010, .match_offset=0 }, { .children_offset=35012, .match_offset=0 }, { .children_offset=0, .match_offset=25926 }, { .children_offset=35014, .match_offset=1487 }, { .children_offset=35021, .match_offset=0 }, { .children_offset=35023, .match_offset=0 }, { .children_offset=35025, .match_offset=0 }, { .children_offset=0, .match_offset=136229 }, { .children_offset=35027, .match_offset=0 }, { .children_offset=35030, .match_offset=0 }, { .children_offset=0, .match_offset=113792 }, { .children_offset=35032, .match_offset=0 }, { .children_offset=0, .match_offset=114636 }, { .children_offset=35034, .match_offset=0 }, { .children_offset=35037, .match_offset=0 }, { .children_offset=35039, .match_offset=0 }, { .children_offset=35041, .match_offset=0 }, { .children_offset=0, .match_offset=77701 }, { .children_offset=35043, .match_offset=0 }, { .children_offset=35045, .match_offset=0 }, { .children_offset=0, .match_offset=37159 }, { .children_offset=35047, .match_offset=0 }, { .children_offset=35049, .match_offset=0 }, { .children_offset=35051, .match_offset=0 }, { .children_offset=0, .match_offset=9052 }, { .children_offset=35053, .match_offset=0 }, { .children_offset=35055, .match_offset=0 }, { .children_offset=35057, .match_offset=0 }, { .children_offset=35059, .match_offset=0 }, { .children_offset=35061, .match_offset=0 }, { .children_offset=35063, .match_offset=0 }, { .children_offset=0, .match_offset=29847 }, { .children_offset=35065, .match_offset=0 }, { .children_offset=35067, .match_offset=0 }, { .children_offset=35069, .match_offset=0 }, { .children_offset=35071, .match_offset=0 }, { .children_offset=0, .match_offset=46815 }, { .children_offset=35073, .match_offset=0 }, { .children_offset=35076, .match_offset=0 }, { .children_offset=35078, .match_offset=0 }, { .children_offset=35080, .match_offset=0 }, { .children_offset=0, .match_offset=49889 }, { .children_offset=35082, .match_offset=0 }, { .children_offset=35084, .match_offset=0 }, { .children_offset=35086, .match_offset=0 }, { .children_offset=35088, .match_offset=0 }, { .children_offset=35090, .match_offset=0 }, { .children_offset=0, .match_offset=10910 }, { .children_offset=35092, .match_offset=0 }, { .children_offset=35094, .match_offset=0 }, { .children_offset=35096, .match_offset=0 }, { .children_offset=35098, .match_offset=70663 }, { .children_offset=35100, .match_offset=0 }, { .children_offset=35103, .match_offset=0 }, { .children_offset=35105, .match_offset=0 }, { .children_offset=35107, .match_offset=0 }, { .children_offset=35109, .match_offset=0 }, { .children_offset=35111, .match_offset=0 }, { .children_offset=35113, .match_offset=0 }, { .children_offset=35115, .match_offset=0 }, { .children_offset=35117, .match_offset=0 }, { .children_offset=35119, .match_offset=0 }, { .children_offset=35121, .match_offset=0 }, { .children_offset=35123, .match_offset=0 }, { .children_offset=35125, .match_offset=0 }, { .children_offset=0, .match_offset=134576 }, { .children_offset=35127, .match_offset=0 }, { .children_offset=35129, .match_offset=0 }, { .children_offset=35131, .match_offset=0 }, { .children_offset=35133, .match_offset=0 }, { .children_offset=0, .match_offset=33934 }, { .children_offset=35135, .match_offset=0 }, { .children_offset=0, .match_offset=133189 }, { .children_offset=35137, .match_offset=0 }, { .children_offset=35142, .match_offset=0 }, { .children_offset=35145, .match_offset=0 }, { .children_offset=35147, .match_offset=0 }, { .children_offset=0, .match_offset=7723 }, { .children_offset=35149, .match_offset=0 }, { .children_offset=35151, .match_offset=0 }, { .children_offset=35153, .match_offset=0 }, { .children_offset=0, .match_offset=68495 }, { .children_offset=35155, .match_offset=0 }, { .children_offset=35157, .match_offset=0 }, { .children_offset=35159, .match_offset=0 }, { .children_offset=0, .match_offset=121990 }, { .children_offset=35161, .match_offset=0 }, { .children_offset=35163, .match_offset=0 }, { .children_offset=0, .match_offset=27485 }, { .children_offset=35165, .match_offset=0 }, { .children_offset=35167, .match_offset=0 }, { .children_offset=0, .match_offset=1023 }, { .children_offset=0, .match_offset=74679 }, { .children_offset=35169, .match_offset=16402 }, { .children_offset=35172, .match_offset=0 }, { .children_offset=35174, .match_offset=41772 }, { .children_offset=35176, .match_offset=0 }, { .children_offset=35178, .match_offset=0 }, { .children_offset=35180, .match_offset=0 }, { .children_offset=35182, .match_offset=40851 }, { .children_offset=0, .match_offset=124845 }, { .children_offset=35184, .match_offset=0 }, { .children_offset=35186, .match_offset=0 }, { .children_offset=35188, .match_offset=0 }, { .children_offset=0, .match_offset=34156 }, { .children_offset=35190, .match_offset=22542 }, { .children_offset=35199, .match_offset=38486 }, { .children_offset=35205, .match_offset=0 }, { .children_offset=35207, .match_offset=0 }, { .children_offset=35209, .match_offset=0 }, { .children_offset=35211, .match_offset=0 }, { .children_offset=0, .match_offset=102665 }, { .children_offset=35213, .match_offset=0 }, { .children_offset=35215, .match_offset=0 }, { .children_offset=35217, .match_offset=0 }, { .children_offset=35219, .match_offset=0 }, { .children_offset=35221, .match_offset=54435 }, { .children_offset=35224, .match_offset=0 }, { .children_offset=0, .match_offset=46891 }, { .children_offset=35226, .match_offset=0 }, { .children_offset=0, .match_offset=56973 }, { .children_offset=35228, .match_offset=0 }, { .children_offset=35231, .match_offset=0 }, { .children_offset=35233, .match_offset=0 }, { .children_offset=35235, .match_offset=0 }, { .children_offset=35237, .match_offset=0 }, { .children_offset=35239, .match_offset=0 }, { .children_offset=0, .match_offset=123233 }, { .children_offset=35241, .match_offset=0 }, { .children_offset=35243, .match_offset=0 }, { .children_offset=35245, .match_offset=0 }, { .children_offset=35247, .match_offset=0 }, { .children_offset=35249, .match_offset=0 }, { .children_offset=0, .match_offset=11073 }, { .children_offset=35251, .match_offset=0 }, { .children_offset=35253, .match_offset=0 }, { .children_offset=35255, .match_offset=0 }, { .children_offset=35257, .match_offset=130059 }, { .children_offset=35259, .match_offset=0 }, { .children_offset=35261, .match_offset=0 }, { .children_offset=35263, .match_offset=0 }, { .children_offset=35265, .match_offset=0 }, { .children_offset=0, .match_offset=58790 }, { .children_offset=35267, .match_offset=0 }, { .children_offset=35269, .match_offset=0 }, { .children_offset=35271, .match_offset=0 }, { .children_offset=35273, .match_offset=0 }, { .children_offset=35275, .match_offset=0 }, { .children_offset=0, .match_offset=80496 }, { .children_offset=35277, .match_offset=0 }, { .children_offset=35281, .match_offset=0 }, { .children_offset=35283, .match_offset=0 }, { .children_offset=35285, .match_offset=0 }, { .children_offset=35287, .match_offset=0 }, { .children_offset=35289, .match_offset=0 }, { .children_offset=35292, .match_offset=0 }, { .children_offset=0, .match_offset=46802 }, { .children_offset=35294, .match_offset=0 }, { .children_offset=0, .match_offset=78884 }, { .children_offset=35297, .match_offset=0 }, { .children_offset=35299, .match_offset=0 }, { .children_offset=0, .match_offset=62398 }, { .children_offset=35301, .match_offset=0 }, { .children_offset=35303, .match_offset=0 }, { .children_offset=0, .match_offset=71830 }, { .children_offset=35305, .match_offset=0 }, { .children_offset=35307, .match_offset=0 }, { .children_offset=35309, .match_offset=0 }, { .children_offset=35311, .match_offset=0 }, { .children_offset=35313, .match_offset=0 }, { .children_offset=35315, .match_offset=0 }, { .children_offset=35317, .match_offset=0 }, { .children_offset=35319, .match_offset=0 }, { .children_offset=0, .match_offset=38830 }, { .children_offset=35321, .match_offset=0 }, { .children_offset=35323, .match_offset=0 }, { .children_offset=35325, .match_offset=0 }, { .children_offset=35327, .match_offset=0 }, { .children_offset=0, .match_offset=123231 }, { .children_offset=0, .match_offset=66424 }, { .children_offset=35329, .match_offset=0 }, { .children_offset=35331, .match_offset=0 }, { .children_offset=0, .match_offset=72431 }, { .children_offset=35333, .match_offset=0 }, { .children_offset=35336, .match_offset=0 }, { .children_offset=0, .match_offset=38962 }, { .children_offset=0, .match_offset=43104 }, { .children_offset=35338, .match_offset=113413 }, { .children_offset=35343, .match_offset=0 }, { .children_offset=35345, .match_offset=0 }, { .children_offset=35347, .match_offset=0 }, { .children_offset=0, .match_offset=73702 }, { .children_offset=35349, .match_offset=0 }, { .children_offset=35351, .match_offset=0 }, { .children_offset=35353, .match_offset=87998 }, { .children_offset=0, .match_offset=60313 }, { .children_offset=35356, .match_offset=0 }, { .children_offset=35358, .match_offset=0 }, { .children_offset=35360, .match_offset=0 }, { .children_offset=35362, .match_offset=0 }, { .children_offset=35364, .match_offset=0 }, { .children_offset=35366, .match_offset=0 }, { .children_offset=35368, .match_offset=0 }, { .children_offset=35370, .match_offset=0 }, { .children_offset=35372, .match_offset=0 }, { .children_offset=35374, .match_offset=0 }, { .children_offset=0, .match_offset=1069 }, { .children_offset=35376, .match_offset=0 }, { .children_offset=35378, .match_offset=0 }, { .children_offset=35380, .match_offset=0 }, { .children_offset=35382, .match_offset=0 }, { .children_offset=35384, .match_offset=0 }, { .children_offset=35386, .match_offset=0 }, { .children_offset=0, .match_offset=134926 }, { .children_offset=0, .match_offset=134265 }, { .children_offset=35388, .match_offset=0 }, { .children_offset=0, .match_offset=61109 }, { .children_offset=35390, .match_offset=0 }, { .children_offset=35396, .match_offset=0 }, { .children_offset=35398, .match_offset=0 }, { .children_offset=35400, .match_offset=0 }, { .children_offset=35402, .match_offset=0 }, { .children_offset=0, .match_offset=46224 }, { .children_offset=35404, .match_offset=0 }, { .children_offset=0, .match_offset=50287 }, { .children_offset=35406, .match_offset=0 }, { .children_offset=35409, .match_offset=0 }, { .children_offset=0, .match_offset=13798 }, { .children_offset=35411, .match_offset=0 }, { .children_offset=0, .match_offset=118413 }, { .children_offset=35413, .match_offset=0 }, { .children_offset=35417, .match_offset=0 }, { .children_offset=0, .match_offset=54261 }, { .children_offset=35420, .match_offset=0 }, { .children_offset=35422, .match_offset=0 }, { .children_offset=35424, .match_offset=0 }, { .children_offset=0, .match_offset=60935 }, { .children_offset=35426, .match_offset=0 }, { .children_offset=35429, .match_offset=0 }, { .children_offset=35431, .match_offset=0 }, { .children_offset=35433, .match_offset=0 }, { .children_offset=35435, .match_offset=0 }, { .children_offset=0, .match_offset=123464 }, { .children_offset=35437, .match_offset=0 }, { .children_offset=35439, .match_offset=0 }, { .children_offset=35441, .match_offset=0 }, { .children_offset=35443, .match_offset=0 }, { .children_offset=35445, .match_offset=0 }, { .children_offset=35447, .match_offset=0 }, { .children_offset=35449, .match_offset=0 }, { .children_offset=35451, .match_offset=0 }, { .children_offset=35454, .match_offset=0 }, { .children_offset=35456, .match_offset=0 }, { .children_offset=35458, .match_offset=0 }, { .children_offset=35460, .match_offset=0 }, { .children_offset=35462, .match_offset=0 }, { .children_offset=35464, .match_offset=0 }, { .children_offset=35466, .match_offset=0 }, { .children_offset=35468, .match_offset=0 }, { .children_offset=35470, .match_offset=0 }, { .children_offset=35472, .match_offset=0 }, { .children_offset=0, .match_offset=122582 }, { .children_offset=35474, .match_offset=0 }, { .children_offset=35476, .match_offset=0 }, { .children_offset=35478, .match_offset=0 }, { .children_offset=35480, .match_offset=0 }, { .children_offset=35482, .match_offset=0 }, { .children_offset=35484, .match_offset=0 }, { .children_offset=35486, .match_offset=0 }, { .children_offset=35488, .match_offset=0 }, { .children_offset=0, .match_offset=7032 }, { .children_offset=35490, .match_offset=0 }, { .children_offset=35492, .match_offset=0 }, { .children_offset=35494, .match_offset=0 }, { .children_offset=0, .match_offset=25690 }, { .children_offset=35496, .match_offset=0 }, { .children_offset=0, .match_offset=46749 }, { .children_offset=35498, .match_offset=103138 }, { .children_offset=35502, .match_offset=0 }, { .children_offset=0, .match_offset=71660 }, { .children_offset=0, .match_offset=46050 }, { .children_offset=35505, .match_offset=40164 }, { .children_offset=35507, .match_offset=0 }, { .children_offset=35510, .match_offset=0 }, { .children_offset=35512, .match_offset=0 }, { .children_offset=0, .match_offset=22087 }, { .children_offset=35514, .match_offset=0 }, { .children_offset=35516, .match_offset=0 }, { .children_offset=35518, .match_offset=0 }, { .children_offset=35520, .match_offset=0 }, { .children_offset=0, .match_offset=33170 }, { .children_offset=35522, .match_offset=0 }, { .children_offset=35524, .match_offset=0 }, { .children_offset=35526, .match_offset=0 }, { .children_offset=0, .match_offset=52273 }, { .children_offset=35528, .match_offset=60092 }, { .children_offset=35530, .match_offset=0 }, { .children_offset=0, .match_offset=81939 }, { .children_offset=35532, .match_offset=0 }, { .children_offset=35534, .match_offset=0 }, { .children_offset=35536, .match_offset=0 }, { .children_offset=35538, .match_offset=0 }, { .children_offset=35540, .match_offset=0 }, { .children_offset=0, .match_offset=6216 }, { .children_offset=35542, .match_offset=26051 }, { .children_offset=0, .match_offset=65279 }, { .children_offset=0, .match_offset=43482 }, { .children_offset=35544, .match_offset=29997 }, { .children_offset=35547, .match_offset=0 }, { .children_offset=35549, .match_offset=0 }, { .children_offset=35551, .match_offset=0 }, { .children_offset=0, .match_offset=16416 }, { .children_offset=35553, .match_offset=0 }, { .children_offset=35555, .match_offset=0 }, { .children_offset=35557, .match_offset=0 }, { .children_offset=0, .match_offset=68652 }, { .children_offset=35559, .match_offset=0 }, { .children_offset=35561, .match_offset=0 }, { .children_offset=0, .match_offset=78418 }, { .children_offset=35563, .match_offset=134316 }, { .children_offset=0, .match_offset=38440 }, { .children_offset=0, .match_offset=42381 }, { .children_offset=35565, .match_offset=119698 }, { .children_offset=35579, .match_offset=0 }, { .children_offset=35584, .match_offset=0 }, { .children_offset=0, .match_offset=62538 }, { .children_offset=0, .match_offset=109712 }, { .children_offset=35588, .match_offset=0 }, { .children_offset=35590, .match_offset=0 }, { .children_offset=0, .match_offset=6833 }, { .children_offset=35592, .match_offset=0 }, { .children_offset=0, .match_offset=132801 }, { .children_offset=35594, .match_offset=0 }, { .children_offset=35596, .match_offset=0 }, { .children_offset=35598, .match_offset=0 }, { .children_offset=0, .match_offset=123145 }, { .children_offset=0, .match_offset=25720 }, { .children_offset=35600, .match_offset=0 }, { .children_offset=35603, .match_offset=0 }, { .children_offset=0, .match_offset=52646 }, { .children_offset=35605, .match_offset=0 }, { .children_offset=35607, .match_offset=0 }, { .children_offset=35609, .match_offset=0 }, { .children_offset=35612, .match_offset=0 }, { .children_offset=0, .match_offset=16364 }, { .children_offset=35614, .match_offset=0 }, { .children_offset=35616, .match_offset=0 }, { .children_offset=35618, .match_offset=0 }, { .children_offset=35620, .match_offset=38723 }, { .children_offset=0, .match_offset=6118 }, { .children_offset=35622, .match_offset=59131 }, { .children_offset=0, .match_offset=43754 }, { .children_offset=0, .match_offset=444 }, { .children_offset=0, .match_offset=109716 }, { .children_offset=35628, .match_offset=0 }, { .children_offset=35630, .match_offset=0 }, { .children_offset=0, .match_offset=6752 }, { .children_offset=35632, .match_offset=0 }, { .children_offset=0, .match_offset=73266 }, { .children_offset=35634, .match_offset=45853 }, { .children_offset=35636, .match_offset=0 }, { .children_offset=0, .match_offset=59125 }, { .children_offset=35638, .match_offset=0 }, { .children_offset=35640, .match_offset=0 }, { .children_offset=0, .match_offset=54243 }, { .children_offset=35642, .match_offset=0 }, { .children_offset=35644, .match_offset=0 }, { .children_offset=35646, .match_offset=0 }, { .children_offset=35648, .match_offset=0 }, { .children_offset=35650, .match_offset=0 }, { .children_offset=0, .match_offset=33960 }, { .children_offset=35652, .match_offset=6332 }, { .children_offset=35660, .match_offset=0 }, { .children_offset=35662, .match_offset=0 }, { .children_offset=0, .match_offset=113800 }, { .children_offset=35664, .match_offset=0 }, { .children_offset=35666, .match_offset=0 }, { .children_offset=35668, .match_offset=0 }, { .children_offset=35670, .match_offset=0 }, { .children_offset=35672, .match_offset=0 }, { .children_offset=35674, .match_offset=0 }, { .children_offset=35676, .match_offset=0 }, { .children_offset=0, .match_offset=67304 }, { .children_offset=35678, .match_offset=0 }, { .children_offset=35681, .match_offset=0 }, { .children_offset=35683, .match_offset=0 }, { .children_offset=0, .match_offset=56942 }, { .children_offset=35685, .match_offset=0 }, { .children_offset=35687, .match_offset=0 }, { .children_offset=0, .match_offset=72408 }, { .children_offset=35689, .match_offset=0 }, { .children_offset=35691, .match_offset=0 }, { .children_offset=0, .match_offset=90601 }, { .children_offset=35693, .match_offset=0 }, { .children_offset=35696, .match_offset=0 }, { .children_offset=35698, .match_offset=0 }, { .children_offset=0, .match_offset=103376 }, { .children_offset=0, .match_offset=62396 }, { .children_offset=35700, .match_offset=0 }, { .children_offset=35703, .match_offset=0 }, { .children_offset=35705, .match_offset=0 }, { .children_offset=0, .match_offset=35323 }, { .children_offset=0, .match_offset=121998 }, { .children_offset=35707, .match_offset=0 }, { .children_offset=35709, .match_offset=0 }, { .children_offset=35713, .match_offset=0 }, { .children_offset=35716, .match_offset=0 }, { .children_offset=0, .match_offset=10258 }, { .children_offset=35718, .match_offset=0 }, { .children_offset=35720, .match_offset=0 }, { .children_offset=0, .match_offset=32832 }, { .children_offset=35722, .match_offset=0 }, { .children_offset=35724, .match_offset=0 }, { .children_offset=35726, .match_offset=0 }, { .children_offset=0, .match_offset=27685 }, { .children_offset=35728, .match_offset=0 }, { .children_offset=35730, .match_offset=0 }, { .children_offset=35732, .match_offset=0 }, { .children_offset=35734, .match_offset=0 }, { .children_offset=0, .match_offset=57413 }, { .children_offset=35736, .match_offset=0 }, { .children_offset=35739, .match_offset=0 }, { .children_offset=35741, .match_offset=0 }, { .children_offset=0, .match_offset=103087 }, { .children_offset=35743, .match_offset=0 }, { .children_offset=35745, .match_offset=0 }, { .children_offset=0, .match_offset=123324 }, { .children_offset=35747, .match_offset=0 }, { .children_offset=35750, .match_offset=0 }, { .children_offset=0, .match_offset=22564 }, { .children_offset=35752, .match_offset=0 }, { .children_offset=35754, .match_offset=0 }, { .children_offset=0, .match_offset=13148 }, { .children_offset=35756, .match_offset=124979 }, { .children_offset=35765, .match_offset=0 }, { .children_offset=35769, .match_offset=0 }, { .children_offset=35771, .match_offset=0 }, { .children_offset=0, .match_offset=1927 }, { .children_offset=35773, .match_offset=0 }, { .children_offset=0, .match_offset=89981 }, { .children_offset=35775, .match_offset=0 }, { .children_offset=35777, .match_offset=0 }, { .children_offset=35779, .match_offset=0 }, { .children_offset=35781, .match_offset=0 }, { .children_offset=35783, .match_offset=0 }, { .children_offset=0, .match_offset=136028 }, { .children_offset=35785, .match_offset=0 }, { .children_offset=35788, .match_offset=0 }, { .children_offset=35790, .match_offset=0 }, { .children_offset=35792, .match_offset=0 }, { .children_offset=0, .match_offset=103768 }, { .children_offset=35795, .match_offset=0 }, { .children_offset=0, .match_offset=58429 }, { .children_offset=35797, .match_offset=0 }, { .children_offset=35799, .match_offset=0 }, { .children_offset=35801, .match_offset=0 }, { .children_offset=35803, .match_offset=0 }, { .children_offset=35805, .match_offset=0 }, { .children_offset=0, .match_offset=15066 }, { .children_offset=35807, .match_offset=0 }, { .children_offset=35810, .match_offset=0 }, { .children_offset=0, .match_offset=119268 }, { .children_offset=35812, .match_offset=0 }, { .children_offset=35814, .match_offset=0 }, { .children_offset=35816, .match_offset=0 }, { .children_offset=35818, .match_offset=0 }, { .children_offset=35820, .match_offset=0 }, { .children_offset=35822, .match_offset=0 }, { .children_offset=0, .match_offset=30670 }, { .children_offset=35824, .match_offset=0 }, { .children_offset=35827, .match_offset=0 }, { .children_offset=35829, .match_offset=0 }, { .children_offset=35831, .match_offset=0 }, { .children_offset=35833, .match_offset=0 }, { .children_offset=0, .match_offset=7523 }, { .children_offset=35835, .match_offset=0 }, { .children_offset=0, .match_offset=61944 }, { .children_offset=0, .match_offset=56636 }, { .children_offset=35838, .match_offset=0 }, { .children_offset=35840, .match_offset=0 }, { .children_offset=0, .match_offset=85444 }, { .children_offset=35842, .match_offset=68979 }, { .children_offset=35844, .match_offset=0 }, { .children_offset=35846, .match_offset=0 }, { .children_offset=35848, .match_offset=0 }, { .children_offset=35850, .match_offset=0 }, { .children_offset=35852, .match_offset=0 }, { .children_offset=35854, .match_offset=0 }, { .children_offset=35856, .match_offset=0 }, { .children_offset=35858, .match_offset=0 }, { .children_offset=0, .match_offset=68419 }, { .children_offset=35860, .match_offset=0 }, { .children_offset=35865, .match_offset=0 }, { .children_offset=35867, .match_offset=0 }, { .children_offset=35869, .match_offset=0 }, { .children_offset=35871, .match_offset=0 }, { .children_offset=35873, .match_offset=0 }, { .children_offset=35875, .match_offset=0 }, { .children_offset=0, .match_offset=25965 }, { .children_offset=35877, .match_offset=0 }, { .children_offset=35879, .match_offset=0 }, { .children_offset=0, .match_offset=130327 }, { .children_offset=35881, .match_offset=0 }, { .children_offset=35883, .match_offset=111098 }, { .children_offset=35885, .match_offset=0 }, { .children_offset=0, .match_offset=122461 }, { .children_offset=35887, .match_offset=0 }, { .children_offset=35889, .match_offset=0 }, { .children_offset=35891, .match_offset=0 }, { .children_offset=35893, .match_offset=0 }, { .children_offset=35895, .match_offset=0 }, { .children_offset=35897, .match_offset=0 }, { .children_offset=0, .match_offset=15050 }, { .children_offset=35899, .match_offset=0 }, { .children_offset=35902, .match_offset=0 }, { .children_offset=35904, .match_offset=0 }, { .children_offset=0, .match_offset=67384 }, { .children_offset=35906, .match_offset=0 }, { .children_offset=0, .match_offset=123324 }, { .children_offset=35908, .match_offset=81124 }, { .children_offset=35912, .match_offset=0 }, { .children_offset=35914, .match_offset=0 }, { .children_offset=0, .match_offset=69133 }, { .children_offset=35916, .match_offset=0 }, { .children_offset=0, .match_offset=6867 }, { .children_offset=0, .match_offset=64281 }, { .children_offset=35918, .match_offset=25728 }, { .children_offset=35921, .match_offset=0 }, { .children_offset=35924, .match_offset=0 }, { .children_offset=35926, .match_offset=0 }, { .children_offset=35928, .match_offset=0 }, { .children_offset=0, .match_offset=77009 }, { .children_offset=35930, .match_offset=0 }, { .children_offset=35933, .match_offset=0 }, { .children_offset=0, .match_offset=78031 }, { .children_offset=35935, .match_offset=0 }, { .children_offset=0, .match_offset=20445 }, { .children_offset=35938, .match_offset=0 }, { .children_offset=35940, .match_offset=0 }, { .children_offset=35942, .match_offset=0 }, { .children_offset=35944, .match_offset=0 }, { .children_offset=35946, .match_offset=0 }, { .children_offset=35948, .match_offset=0 }, { .children_offset=35950, .match_offset=0 }, { .children_offset=35952, .match_offset=0 }, { .children_offset=0, .match_offset=54217 }, { .children_offset=35954, .match_offset=0 }, { .children_offset=0, .match_offset=114315 }, { .children_offset=35956, .match_offset=0 }, { .children_offset=35959, .match_offset=7693 }, { .children_offset=35961, .match_offset=0 }, { .children_offset=0, .match_offset=34358 }, { .children_offset=0, .match_offset=9091 }, { .children_offset=35963, .match_offset=40860 }, { .children_offset=0, .match_offset=46148 }, { .children_offset=0, .match_offset=31075 }, { .children_offset=35965, .match_offset=134228 }, { .children_offset=35975, .match_offset=58969 }, { .children_offset=35984, .match_offset=113386 }, { .children_offset=35986, .match_offset=0 }, { .children_offset=35988, .match_offset=0 }, { .children_offset=35990, .match_offset=0 }, { .children_offset=0, .match_offset=11425 }, { .children_offset=0, .match_offset=22540 }, { .children_offset=35992, .match_offset=0 }, { .children_offset=35994, .match_offset=0 }, { .children_offset=35996, .match_offset=0 }, { .children_offset=35998, .match_offset=0 }, { .children_offset=0, .match_offset=72262 }, { .children_offset=36000, .match_offset=0 }, { .children_offset=36002, .match_offset=0 }, { .children_offset=36004, .match_offset=0 }, { .children_offset=36006, .match_offset=0 }, { .children_offset=0, .match_offset=71444 }, { .children_offset=0, .match_offset=125642 }, { .children_offset=0, .match_offset=6540 }, { .children_offset=36008, .match_offset=27433 }, { .children_offset=36010, .match_offset=0 }, { .children_offset=36012, .match_offset=0 }, { .children_offset=36014, .match_offset=0 }, { .children_offset=36016, .match_offset=0 }, { .children_offset=36018, .match_offset=0 }, { .children_offset=0, .match_offset=38949 }, { .children_offset=36020, .match_offset=0 }, { .children_offset=36022, .match_offset=0 }, { .children_offset=36024, .match_offset=0 }, { .children_offset=0, .match_offset=40468 }, { .children_offset=0, .match_offset=72345 }, { .children_offset=0, .match_offset=56727 }, { .children_offset=0, .match_offset=55034 }, { .children_offset=0, .match_offset=113122 }, { .children_offset=0, .match_offset=116463 }, { .children_offset=36031, .match_offset=135802 }, { .children_offset=0, .match_offset=79718 }, { .children_offset=36033, .match_offset=81865 }, { .children_offset=36038, .match_offset=0 }, { .children_offset=36040, .match_offset=0 }, { .children_offset=36042, .match_offset=0 }, { .children_offset=36044, .match_offset=109406 }, { .children_offset=36046, .match_offset=0 }, { .children_offset=36051, .match_offset=0 }, { .children_offset=36053, .match_offset=0 }, { .children_offset=36055, .match_offset=0 }, { .children_offset=36057, .match_offset=0 }, { .children_offset=0, .match_offset=123113 }, { .children_offset=36059, .match_offset=0 }, { .children_offset=36061, .match_offset=0 }, { .children_offset=36063, .match_offset=0 }, { .children_offset=36065, .match_offset=0 }, { .children_offset=0, .match_offset=28464 }, { .children_offset=36067, .match_offset=0 }, { .children_offset=36069, .match_offset=0 }, { .children_offset=36071, .match_offset=0 }, { .children_offset=0, .match_offset=44954 }, { .children_offset=36073, .match_offset=0 }, { .children_offset=36075, .match_offset=0 }, { .children_offset=36077, .match_offset=0 }, { .children_offset=36079, .match_offset=0 }, { .children_offset=36081, .match_offset=0 }, { .children_offset=36083, .match_offset=0 }, { .children_offset=0, .match_offset=89515 }, { .children_offset=36085, .match_offset=0 }, { .children_offset=36088, .match_offset=0 }, { .children_offset=36090, .match_offset=0 }, { .children_offset=36092, .match_offset=0 }, { .children_offset=36094, .match_offset=0 }, { .children_offset=36096, .match_offset=0 }, { .children_offset=0, .match_offset=89147 }, { .children_offset=36098, .match_offset=0 }, { .children_offset=36100, .match_offset=0 }, { .children_offset=36102, .match_offset=0 }, { .children_offset=36104, .match_offset=0 }, { .children_offset=36106, .match_offset=0 }, { .children_offset=36108, .match_offset=0 }, { .children_offset=36110, .match_offset=0 }, { .children_offset=0, .match_offset=136005 }, { .children_offset=36112, .match_offset=0 }, { .children_offset=36114, .match_offset=0 }, { .children_offset=36116, .match_offset=0 }, { .children_offset=0, .match_offset=33345 }, { .children_offset=0, .match_offset=42323 }, { .children_offset=36118, .match_offset=0 }, { .children_offset=36120, .match_offset=0 }, { .children_offset=36122, .match_offset=0 }, { .children_offset=0, .match_offset=25369 }, { .children_offset=36124, .match_offset=0 }, { .children_offset=36126, .match_offset=0 }, { .children_offset=36128, .match_offset=0 }, { .children_offset=0, .match_offset=68787 }, { .children_offset=36130, .match_offset=89855 }, { .children_offset=0, .match_offset=125743 }, { .children_offset=36135, .match_offset=0 }, { .children_offset=36137, .match_offset=0 }, { .children_offset=36139, .match_offset=0 }, { .children_offset=36141, .match_offset=0 }, { .children_offset=36143, .match_offset=0 }, { .children_offset=36145, .match_offset=0 }, { .children_offset=0, .match_offset=34306 }, { .children_offset=36147, .match_offset=0 }, { .children_offset=36149, .match_offset=0 }, { .children_offset=0, .match_offset=109828 }, { .children_offset=36151, .match_offset=0 }, { .children_offset=36153, .match_offset=66535 }, { .children_offset=0, .match_offset=22502 }, { .children_offset=36155, .match_offset=0 }, { .children_offset=36157, .match_offset=0 }, { .children_offset=36159, .match_offset=0 }, { .children_offset=0, .match_offset=37889 }, { .children_offset=36161, .match_offset=15033 }, { .children_offset=36165, .match_offset=0 }, { .children_offset=0, .match_offset=90685 }, { .children_offset=0, .match_offset=119208 }, { .children_offset=36167, .match_offset=0 }, { .children_offset=36169, .match_offset=0 }, { .children_offset=36171, .match_offset=0 }, { .children_offset=0, .match_offset=6548 }, { .children_offset=36173, .match_offset=0 }, { .children_offset=0, .match_offset=65780 }, { .children_offset=36175, .match_offset=102295 }, { .children_offset=36192, .match_offset=0 }, { .children_offset=36195, .match_offset=0 }, { .children_offset=0, .match_offset=70763 }, { .children_offset=36197, .match_offset=0 }, { .children_offset=36200, .match_offset=0 }, { .children_offset=0, .match_offset=9904 }, { .children_offset=36202, .match_offset=0 }, { .children_offset=36204, .match_offset=0 }, { .children_offset=36206, .match_offset=0 }, { .children_offset=36208, .match_offset=0 }, { .children_offset=0, .match_offset=65501 }, { .children_offset=36210, .match_offset=0 }, { .children_offset=36213, .match_offset=9088 }, { .children_offset=36215, .match_offset=0 }, { .children_offset=0, .match_offset=114738 }, { .children_offset=36217, .match_offset=0 }, { .children_offset=36219, .match_offset=0 }, { .children_offset=36221, .match_offset=0 }, { .children_offset=0, .match_offset=125225 }, { .children_offset=36223, .match_offset=44749 }, { .children_offset=36230, .match_offset=0 }, { .children_offset=0, .match_offset=71089 }, { .children_offset=36232, .match_offset=0 }, { .children_offset=0, .match_offset=108813 }, { .children_offset=0, .match_offset=54468 }, { .children_offset=0, .match_offset=30806 }, { .children_offset=0, .match_offset=70901 }, { .children_offset=36235, .match_offset=0 }, { .children_offset=36237, .match_offset=70644 }, { .children_offset=36239, .match_offset=0 }, { .children_offset=36249, .match_offset=0 }, { .children_offset=36252, .match_offset=0 }, { .children_offset=36254, .match_offset=0 }, { .children_offset=36256, .match_offset=0 }, { .children_offset=36258, .match_offset=0 }, { .children_offset=36260, .match_offset=0 }, { .children_offset=0, .match_offset=71971 }, { .children_offset=36262, .match_offset=0 }, { .children_offset=36264, .match_offset=0 }, { .children_offset=36266, .match_offset=0 }, { .children_offset=0, .match_offset=71964 }, { .children_offset=36268, .match_offset=0 }, { .children_offset=36270, .match_offset=0 }, { .children_offset=36272, .match_offset=0 }, { .children_offset=36274, .match_offset=0 }, { .children_offset=0, .match_offset=78923 }, { .children_offset=36276, .match_offset=0 }, { .children_offset=36279, .match_offset=0 }, { .children_offset=36281, .match_offset=0 }, { .children_offset=36283, .match_offset=0 }, { .children_offset=36285, .match_offset=0 }, { .children_offset=36287, .match_offset=0 }, { .children_offset=0, .match_offset=7683 }, { .children_offset=36289, .match_offset=0 }, { .children_offset=36291, .match_offset=0 }, { .children_offset=36293, .match_offset=0 }, { .children_offset=36295, .match_offset=0 }, { .children_offset=0, .match_offset=122355 }, { .children_offset=36297, .match_offset=0 }, { .children_offset=36299, .match_offset=0 }, { .children_offset=36301, .match_offset=0 }, { .children_offset=36303, .match_offset=0 }, { .children_offset=0, .match_offset=90029 }, { .children_offset=36305, .match_offset=0 }, { .children_offset=36307, .match_offset=0 }, { .children_offset=36309, .match_offset=0 }, { .children_offset=36311, .match_offset=0 }, { .children_offset=0, .match_offset=62610 }, { .children_offset=36313, .match_offset=0 }, { .children_offset=36315, .match_offset=0 }, { .children_offset=36317, .match_offset=0 }, { .children_offset=36319, .match_offset=0 }, { .children_offset=36321, .match_offset=0 }, { .children_offset=36323, .match_offset=0 }, { .children_offset=0, .match_offset=70753 }, { .children_offset=36325, .match_offset=0 }, { .children_offset=36327, .match_offset=0 }, { .children_offset=36329, .match_offset=0 }, { .children_offset=36331, .match_offset=0 }, { .children_offset=36333, .match_offset=130987 }, { .children_offset=36335, .match_offset=0 }, { .children_offset=36337, .match_offset=0 }, { .children_offset=36339, .match_offset=0 }, { .children_offset=36341, .match_offset=0 }, { .children_offset=36343, .match_offset=0 }, { .children_offset=36345, .match_offset=0 }, { .children_offset=36347, .match_offset=0 }, { .children_offset=0, .match_offset=122301 }, { .children_offset=36349, .match_offset=0 }, { .children_offset=36352, .match_offset=0 }, { .children_offset=36354, .match_offset=0 }, { .children_offset=36356, .match_offset=102887 }, { .children_offset=36358, .match_offset=0 }, { .children_offset=36363, .match_offset=0 }, { .children_offset=36365, .match_offset=0 }, { .children_offset=36367, .match_offset=0 }, { .children_offset=36369, .match_offset=0 }, { .children_offset=0, .match_offset=1963 }, { .children_offset=36371, .match_offset=0 }, { .children_offset=36373, .match_offset=0 }, { .children_offset=36375, .match_offset=0 }, { .children_offset=36377, .match_offset=0 }, { .children_offset=36379, .match_offset=0 }, { .children_offset=0, .match_offset=88756 }, { .children_offset=36381, .match_offset=0 }, { .children_offset=36383, .match_offset=0 }, { .children_offset=36385, .match_offset=0 }, { .children_offset=36387, .match_offset=0 }, { .children_offset=0, .match_offset=13543 }, { .children_offset=36389, .match_offset=0 }, { .children_offset=36392, .match_offset=0 }, { .children_offset=36394, .match_offset=0 }, { .children_offset=36396, .match_offset=0 }, { .children_offset=36398, .match_offset=0 }, { .children_offset=36400, .match_offset=0 }, { .children_offset=0, .match_offset=50195 }, { .children_offset=36402, .match_offset=0 }, { .children_offset=36404, .match_offset=0 }, { .children_offset=36406, .match_offset=0 }, { .children_offset=36408, .match_offset=0 }, { .children_offset=0, .match_offset=133337 }, { .children_offset=36410, .match_offset=0 }, { .children_offset=36412, .match_offset=0 }, { .children_offset=36414, .match_offset=0 }, { .children_offset=36416, .match_offset=0 }, { .children_offset=36418, .match_offset=0 }, { .children_offset=36420, .match_offset=0 }, { .children_offset=36422, .match_offset=0 }, { .children_offset=0, .match_offset=29204 }, { .children_offset=36424, .match_offset=0 }, { .children_offset=36427, .match_offset=0 }, { .children_offset=36429, .match_offset=0 }, { .children_offset=36431, .match_offset=0 }, { .children_offset=36433, .match_offset=0 }, { .children_offset=36435, .match_offset=0 }, { .children_offset=0, .match_offset=86079 }, { .children_offset=36437, .match_offset=0 }, { .children_offset=36439, .match_offset=0 }, { .children_offset=36441, .match_offset=0 }, { .children_offset=36443, .match_offset=0 }, { .children_offset=0, .match_offset=129445 }, { .children_offset=0, .match_offset=123396 }, { .children_offset=0, .match_offset=84890 }, { .children_offset=0, .match_offset=131066 }, { .children_offset=36445, .match_offset=0 }, { .children_offset=0, .match_offset=46054 }, { .children_offset=36448, .match_offset=0 }, { .children_offset=36450, .match_offset=0 }, { .children_offset=0, .match_offset=37406 }, { .children_offset=36452, .match_offset=0 }, { .children_offset=36456, .match_offset=0 }, { .children_offset=36458, .match_offset=0 }, { .children_offset=36460, .match_offset=0 }, { .children_offset=0, .match_offset=79733 }, { .children_offset=0, .match_offset=124836 }, { .children_offset=0, .match_offset=37684 }, { .children_offset=36462, .match_offset=57369 }, { .children_offset=36468, .match_offset=0 }, { .children_offset=36470, .match_offset=0 }, { .children_offset=36472, .match_offset=0 }, { .children_offset=36474, .match_offset=0 }, { .children_offset=36476, .match_offset=0 }, { .children_offset=36478, .match_offset=0 }, { .children_offset=0, .match_offset=5528 }, { .children_offset=36480, .match_offset=0 }, { .children_offset=36482, .match_offset=0 }, { .children_offset=36484, .match_offset=0 }, { .children_offset=36486, .match_offset=0 }, { .children_offset=0, .match_offset=124991 }, { .children_offset=36488, .match_offset=53481 }, { .children_offset=36490, .match_offset=0 }, { .children_offset=36492, .match_offset=0 }, { .children_offset=36494, .match_offset=0 }, { .children_offset=36496, .match_offset=0 }, { .children_offset=0, .match_offset=21955 }, { .children_offset=0, .match_offset=21378 }, { .children_offset=36498, .match_offset=0 }, { .children_offset=36500, .match_offset=0 }, { .children_offset=36502, .match_offset=0 }, { .children_offset=36504, .match_offset=0 }, { .children_offset=0, .match_offset=69145 }, { .children_offset=36506, .match_offset=63392 }, { .children_offset=36509, .match_offset=0 }, { .children_offset=36511, .match_offset=0 }, { .children_offset=36513, .match_offset=0 }, { .children_offset=36516, .match_offset=0 }, { .children_offset=0, .match_offset=6880 }, { .children_offset=36518, .match_offset=0 }, { .children_offset=36520, .match_offset=0 }, { .children_offset=36522, .match_offset=0 }, { .children_offset=36524, .match_offset=0 }, { .children_offset=0, .match_offset=122681 }, { .children_offset=36526, .match_offset=0 }, { .children_offset=36528, .match_offset=0 }, { .children_offset=0, .match_offset=8766 }, { .children_offset=36530, .match_offset=0 }, { .children_offset=0, .match_offset=100934 }, { .children_offset=36534, .match_offset=0 }, { .children_offset=36536, .match_offset=0 }, { .children_offset=0, .match_offset=65739 }, { .children_offset=36538, .match_offset=0 }, { .children_offset=36541, .match_offset=0 }, { .children_offset=36543, .match_offset=0 }, { .children_offset=0, .match_offset=123794 }, { .children_offset=0, .match_offset=6542 }, { .children_offset=36545, .match_offset=0 }, { .children_offset=36549, .match_offset=0 }, { .children_offset=36551, .match_offset=0 }, { .children_offset=0, .match_offset=117546 }, { .children_offset=36553, .match_offset=0 }, { .children_offset=36555, .match_offset=0 }, { .children_offset=36557, .match_offset=0 }, { .children_offset=0, .match_offset=58240 }, { .children_offset=36559, .match_offset=0 }, { .children_offset=36561, .match_offset=0 }, { .children_offset=0, .match_offset=42076 }, { .children_offset=36563, .match_offset=77744 }, { .children_offset=36565, .match_offset=0 }, { .children_offset=36567, .match_offset=0 }, { .children_offset=36569, .match_offset=0 }, { .children_offset=36571, .match_offset=0 }, { .children_offset=36573, .match_offset=0 }, { .children_offset=0, .match_offset=108232 }, { .children_offset=0, .match_offset=135764 }, { .children_offset=36575, .match_offset=0 }, { .children_offset=0, .match_offset=16570 }, { .children_offset=0, .match_offset=68491 }, { .children_offset=36577, .match_offset=0 }, { .children_offset=36579, .match_offset=0 }, { .children_offset=0, .match_offset=90199 }, { .children_offset=36582, .match_offset=0 }, { .children_offset=36584, .match_offset=0 }, { .children_offset=36586, .match_offset=0 }, { .children_offset=36588, .match_offset=0 }, { .children_offset=0, .match_offset=122655 }, { .children_offset=36590, .match_offset=0 }, { .children_offset=36596, .match_offset=63637 }, { .children_offset=36604, .match_offset=0 }, { .children_offset=36606, .match_offset=65731 }, { .children_offset=36608, .match_offset=0 }, { .children_offset=36610, .match_offset=0 }, { .children_offset=36612, .match_offset=0 }, { .children_offset=36614, .match_offset=0 }, { .children_offset=36616, .match_offset=0 }, { .children_offset=0, .match_offset=446 }, { .children_offset=36618, .match_offset=0 }, { .children_offset=36620, .match_offset=0 }, { .children_offset=36622, .match_offset=0 }, { .children_offset=0, .match_offset=5513 }, { .children_offset=0, .match_offset=25410 }, { .children_offset=36624, .match_offset=0 }, { .children_offset=36628, .match_offset=0 }, { .children_offset=36630, .match_offset=110975 }, { .children_offset=0, .match_offset=62293 }, { .children_offset=36632, .match_offset=78926 }, { .children_offset=0, .match_offset=69327 }, { .children_offset=36634, .match_offset=0 }, { .children_offset=0, .match_offset=104117 }, { .children_offset=36636, .match_offset=0 }, { .children_offset=36638, .match_offset=0 }, { .children_offset=36640, .match_offset=0 }, { .children_offset=36642, .match_offset=0 }, { .children_offset=0, .match_offset=43066 }, { .children_offset=36644, .match_offset=0 }, { .children_offset=0, .match_offset=25930 }, { .children_offset=36646, .match_offset=0 }, { .children_offset=36648, .match_offset=0 }, { .children_offset=36650, .match_offset=0 }, { .children_offset=0, .match_offset=7599 }, { .children_offset=36652, .match_offset=0 }, { .children_offset=36655, .match_offset=0 }, { .children_offset=36657, .match_offset=0 }, { .children_offset=36659, .match_offset=0 }, { .children_offset=36661, .match_offset=0 }, { .children_offset=0, .match_offset=58859 }, { .children_offset=36663, .match_offset=0 }, { .children_offset=36665, .match_offset=0 }, { .children_offset=36667, .match_offset=0 }, { .children_offset=36669, .match_offset=0 }, { .children_offset=0, .match_offset=127290 }, { .children_offset=36671, .match_offset=0 }, { .children_offset=36673, .match_offset=0 }, { .children_offset=0, .match_offset=122663 }, { .children_offset=36675, .match_offset=0 }, { .children_offset=36678, .match_offset=0 }, { .children_offset=36680, .match_offset=0 }, { .children_offset=0, .match_offset=115674 }, { .children_offset=0, .match_offset=46751 }, { .children_offset=36682, .match_offset=0 }, { .children_offset=0, .match_offset=49714 }, { .children_offset=0, .match_offset=112851 }, { .children_offset=36689, .match_offset=70640 }, { .children_offset=36691, .match_offset=0 }, { .children_offset=0, .match_offset=26504 }, { .children_offset=36693, .match_offset=0 }, { .children_offset=36695, .match_offset=0 }, { .children_offset=0, .match_offset=27725 }, { .children_offset=36697, .match_offset=63220 }, { .children_offset=36707, .match_offset=0 }, { .children_offset=36709, .match_offset=0 }, { .children_offset=36711, .match_offset=0 }, { .children_offset=36713, .match_offset=0 }, { .children_offset=36715, .match_offset=0 }, { .children_offset=0, .match_offset=46016 }, { .children_offset=36717, .match_offset=0 }, { .children_offset=36719, .match_offset=0 }, { .children_offset=36721, .match_offset=0 }, { .children_offset=0, .match_offset=110917 }, { .children_offset=0, .match_offset=125841 }, { .children_offset=36723, .match_offset=0 }, { .children_offset=36725, .match_offset=0 }, { .children_offset=0, .match_offset=133462 }, { .children_offset=36727, .match_offset=0 }, { .children_offset=0, .match_offset=34349 }, { .children_offset=0, .match_offset=102370 }, { .children_offset=0, .match_offset=113807 }, { .children_offset=36730, .match_offset=0 }, { .children_offset=36733, .match_offset=0 }, { .children_offset=36735, .match_offset=0 }, { .children_offset=36737, .match_offset=0 }, { .children_offset=0, .match_offset=46016 }, { .children_offset=0, .match_offset=46016 }, { .children_offset=36739, .match_offset=0 }, { .children_offset=36741, .match_offset=0 }, { .children_offset=0, .match_offset=123780 }, { .children_offset=36743, .match_offset=0 }, { .children_offset=36745, .match_offset=0 }, { .children_offset=0, .match_offset=115385 }, { .children_offset=36747, .match_offset=0 }, { .children_offset=0, .match_offset=113983 }, { .children_offset=0, .match_offset=45298 }, { .children_offset=0, .match_offset=34374 }, { .children_offset=36750, .match_offset=0 }, { .children_offset=36752, .match_offset=0 }, { .children_offset=36754, .match_offset=0 }, { .children_offset=36756, .match_offset=0 }, { .children_offset=36758, .match_offset=0 }, { .children_offset=36760, .match_offset=0 }, { .children_offset=0, .match_offset=69311 }, { .children_offset=36762, .match_offset=68566 }, { .children_offset=0, .match_offset=27637 }, { .children_offset=36781, .match_offset=0 }, { .children_offset=36783, .match_offset=0 }, { .children_offset=36785, .match_offset=0 }, { .children_offset=0, .match_offset=6910 }, { .children_offset=36787, .match_offset=0 }, { .children_offset=36789, .match_offset=0 }, { .children_offset=36791, .match_offset=0 }, { .children_offset=36793, .match_offset=0 }, { .children_offset=0, .match_offset=61938 }, { .children_offset=36795, .match_offset=0 }, { .children_offset=36797, .match_offset=0 }, { .children_offset=36800, .match_offset=0 }, { .children_offset=0, .match_offset=72524 }, { .children_offset=36802, .match_offset=0 }, { .children_offset=0, .match_offset=63630 }, { .children_offset=36804, .match_offset=0 }, { .children_offset=36806, .match_offset=0 }, { .children_offset=36809, .match_offset=0 }, { .children_offset=36811, .match_offset=0 }, { .children_offset=36813, .match_offset=0 }, { .children_offset=36815, .match_offset=0 }, { .children_offset=36817, .match_offset=0 }, { .children_offset=36819, .match_offset=0 }, { .children_offset=36821, .match_offset=0 }, { .children_offset=36823, .match_offset=0 }, { .children_offset=0, .match_offset=74065 }, { .children_offset=36825, .match_offset=63043 }, { .children_offset=36830, .match_offset=0 }, { .children_offset=0, .match_offset=125332 }, { .children_offset=0, .match_offset=335 }, { .children_offset=36833, .match_offset=0 }, { .children_offset=36835, .match_offset=0 }, { .children_offset=0, .match_offset=26506 }, { .children_offset=0, .match_offset=26771 }, { .children_offset=0, .match_offset=60013 }, { .children_offset=0, .match_offset=32837 }, { .children_offset=36838, .match_offset=0 }, { .children_offset=36841, .match_offset=0 }, { .children_offset=36843, .match_offset=0 }, { .children_offset=0, .match_offset=25371 }, { .children_offset=36845, .match_offset=0 }, { .children_offset=36847, .match_offset=0 }, { .children_offset=36849, .match_offset=0 }, { .children_offset=36851, .match_offset=0 }, { .children_offset=0, .match_offset=74369 }, { .children_offset=36853, .match_offset=0 }, { .children_offset=0, .match_offset=6609 }, { .children_offset=36857, .match_offset=21907 }, { .children_offset=36860, .match_offset=0 }, { .children_offset=0, .match_offset=125004 }, { .children_offset=36862, .match_offset=0 }, { .children_offset=0, .match_offset=1080 }, { .children_offset=0, .match_offset=121978 }, { .children_offset=36864, .match_offset=0 }, { .children_offset=36866, .match_offset=0 }, { .children_offset=36868, .match_offset=0 }, { .children_offset=0, .match_offset=45862 }, { .children_offset=36870, .match_offset=134302 }, { .children_offset=36872, .match_offset=0 }, { .children_offset=0, .match_offset=90524 }, { .children_offset=36874, .match_offset=54449 }, { .children_offset=36877, .match_offset=0 }, { .children_offset=36879, .match_offset=0 }, { .children_offset=0, .match_offset=110349 }, { .children_offset=0, .match_offset=103779 }, { .children_offset=36881, .match_offset=76969 }, { .children_offset=36885, .match_offset=0 }, { .children_offset=36887, .match_offset=0 }, { .children_offset=36889, .match_offset=0 }, { .children_offset=0, .match_offset=61111 }, { .children_offset=0, .match_offset=39465 }, { .children_offset=36891, .match_offset=0 }, { .children_offset=36894, .match_offset=0 }, { .children_offset=0, .match_offset=89130 }, { .children_offset=36896, .match_offset=0 }, { .children_offset=36898, .match_offset=0 }, { .children_offset=0, .match_offset=111194 }, { .children_offset=36900, .match_offset=0 }, { .children_offset=36903, .match_offset=0 }, { .children_offset=36905, .match_offset=0 }, { .children_offset=36907, .match_offset=0 }, { .children_offset=36909, .match_offset=0 }, { .children_offset=36911, .match_offset=0 }, { .children_offset=0, .match_offset=90554 }, { .children_offset=36913, .match_offset=0 }, { .children_offset=36915, .match_offset=0 }, { .children_offset=36917, .match_offset=0 }, { .children_offset=36919, .match_offset=0 }, { .children_offset=0, .match_offset=68285 }, { .children_offset=36921, .match_offset=0 }, { .children_offset=36926, .match_offset=0 }, { .children_offset=36928, .match_offset=0 }, { .children_offset=36930, .match_offset=0 }, { .children_offset=36932, .match_offset=0 }, { .children_offset=0, .match_offset=22629 }, { .children_offset=36934, .match_offset=0 }, { .children_offset=36936, .match_offset=0 }, { .children_offset=36938, .match_offset=0 }, { .children_offset=36940, .match_offset=0 }, { .children_offset=36942, .match_offset=54023 }, { .children_offset=0, .match_offset=113835 }, { .children_offset=36944, .match_offset=0 }, { .children_offset=36946, .match_offset=0 }, { .children_offset=36948, .match_offset=0 }, { .children_offset=36950, .match_offset=0 }, { .children_offset=36952, .match_offset=0 }, { .children_offset=36954, .match_offset=0 }, { .children_offset=0, .match_offset=11439 }, { .children_offset=36956, .match_offset=104384 }, { .children_offset=36960, .match_offset=0 }, { .children_offset=0, .match_offset=12026 }, { .children_offset=36962, .match_offset=0 }, { .children_offset=36964, .match_offset=0 }, { .children_offset=0, .match_offset=132877 }, { .children_offset=36966, .match_offset=0 }, { .children_offset=36968, .match_offset=0 }, { .children_offset=36970, .match_offset=0 }, { .children_offset=36972, .match_offset=0 }, { .children_offset=36974, .match_offset=0 }, { .children_offset=36976, .match_offset=0 }, { .children_offset=36978, .match_offset=0 }, { .children_offset=0, .match_offset=129384 }, { .children_offset=36980, .match_offset=131405 }, { .children_offset=36982, .match_offset=0 }, { .children_offset=36985, .match_offset=0 }, { .children_offset=36987, .match_offset=0 }, { .children_offset=0, .match_offset=33781 }, { .children_offset=36989, .match_offset=0 }, { .children_offset=0, .match_offset=39198 }, { .children_offset=36991, .match_offset=0 }, { .children_offset=36996, .match_offset=0 }, { .children_offset=0, .match_offset=9047 }, { .children_offset=36998, .match_offset=0 }, { .children_offset=37000, .match_offset=0 }, { .children_offset=37002, .match_offset=0 }, { .children_offset=0, .match_offset=53592 }, { .children_offset=37004, .match_offset=0 }, { .children_offset=0, .match_offset=90673 }, { .children_offset=37006, .match_offset=0 }, { .children_offset=37008, .match_offset=0 }, { .children_offset=37010, .match_offset=0 }, { .children_offset=0, .match_offset=67340 }, { .children_offset=37012, .match_offset=0 }, { .children_offset=37015, .match_offset=0 }, { .children_offset=37017, .match_offset=0 }, { .children_offset=37019, .match_offset=27966 }, { .children_offset=37021, .match_offset=0 }, { .children_offset=0, .match_offset=48175 }, { .children_offset=37023, .match_offset=0 }, { .children_offset=37025, .match_offset=49802 }, { .children_offset=0, .match_offset=78021 }, { .children_offset=0, .match_offset=73392 }, { .children_offset=0, .match_offset=89165 }, { .children_offset=37027, .match_offset=0 }, { .children_offset=0, .match_offset=43513 }, { .children_offset=0, .match_offset=126595 }, { .children_offset=0, .match_offset=123805 }, { .children_offset=37031, .match_offset=58047 }, { .children_offset=37040, .match_offset=0 }, { .children_offset=37044, .match_offset=16389 }, { .children_offset=37046, .match_offset=0 }, { .children_offset=37050, .match_offset=0 }, { .children_offset=37053, .match_offset=0 }, { .children_offset=0, .match_offset=6231 }, { .children_offset=37055, .match_offset=0 }, { .children_offset=37057, .match_offset=0 }, { .children_offset=0, .match_offset=78576 }, { .children_offset=37059, .match_offset=0 }, { .children_offset=37061, .match_offset=0 }, { .children_offset=37063, .match_offset=0 }, { .children_offset=0, .match_offset=35 }, { .children_offset=37065, .match_offset=0 }, { .children_offset=37067, .match_offset=0 }, { .children_offset=0, .match_offset=55387 }, { .children_offset=0, .match_offset=12778 }, { .children_offset=37069, .match_offset=0 }, { .children_offset=37071, .match_offset=0 }, { .children_offset=0, .match_offset=134393 }, { .children_offset=37073, .match_offset=0 }, { .children_offset=37075, .match_offset=0 }, { .children_offset=0, .match_offset=125149 }, { .children_offset=37077, .match_offset=66449 }, { .children_offset=37086, .match_offset=37178 }, { .children_offset=37093, .match_offset=0 }, { .children_offset=37095, .match_offset=0 }, { .children_offset=37097, .match_offset=0 }, { .children_offset=37099, .match_offset=0 }, { .children_offset=37101, .match_offset=0 }, { .children_offset=0, .match_offset=12778 }, { .children_offset=37103, .match_offset=0 }, { .children_offset=37105, .match_offset=0 }, { .children_offset=37107, .match_offset=0 }, { .children_offset=37109, .match_offset=0 }, { .children_offset=37111, .match_offset=0 }, { .children_offset=37113, .match_offset=0 }, { .children_offset=0, .match_offset=125149 }, { .children_offset=37115, .match_offset=0 }, { .children_offset=37118, .match_offset=0 }, { .children_offset=37121, .match_offset=121956 }, { .children_offset=0, .match_offset=123450 }, { .children_offset=37124, .match_offset=108767 }, { .children_offset=37128, .match_offset=0 }, { .children_offset=37130, .match_offset=0 }, { .children_offset=37132, .match_offset=0 }, { .children_offset=37134, .match_offset=0 }, { .children_offset=0, .match_offset=26923 }, { .children_offset=37136, .match_offset=0 }, { .children_offset=37138, .match_offset=0 }, { .children_offset=37140, .match_offset=0 }, { .children_offset=37142, .match_offset=0 }, { .children_offset=37144, .match_offset=0 }, { .children_offset=37146, .match_offset=0 }, { .children_offset=37148, .match_offset=0 }, { .children_offset=37150, .match_offset=0 }, { .children_offset=37152, .match_offset=0 }, { .children_offset=0, .match_offset=125149 }, { .children_offset=37154, .match_offset=0 }, { .children_offset=37156, .match_offset=0 }, { .children_offset=37158, .match_offset=0 }, { .children_offset=37160, .match_offset=0 }, { .children_offset=0, .match_offset=113284 }, { .children_offset=37162, .match_offset=0 }, { .children_offset=37164, .match_offset=0 }, { .children_offset=0, .match_offset=55833 }, { .children_offset=0, .match_offset=26923 }, { .children_offset=37166, .match_offset=0 }, { .children_offset=37168, .match_offset=0 }, { .children_offset=37170, .match_offset=0 }, { .children_offset=37172, .match_offset=0 }, { .children_offset=37174, .match_offset=0 }, { .children_offset=37176, .match_offset=0 }, { .children_offset=0, .match_offset=131426 }, { .children_offset=37178, .match_offset=0 }, { .children_offset=37182, .match_offset=0 }, { .children_offset=37184, .match_offset=0 }, { .children_offset=37186, .match_offset=0 }, { .children_offset=37188, .match_offset=0 }, { .children_offset=37190, .match_offset=0 }, { .children_offset=0, .match_offset=133391 }, { .children_offset=37192, .match_offset=0 }, { .children_offset=37194, .match_offset=0 }, { .children_offset=0, .match_offset=1135 }, { .children_offset=37196, .match_offset=0 }, { .children_offset=37198, .match_offset=0 }, { .children_offset=0, .match_offset=103573 }, { .children_offset=37200, .match_offset=0 }, { .children_offset=37202, .match_offset=0 }, { .children_offset=0, .match_offset=113284 }, { .children_offset=37204, .match_offset=0 }, { .children_offset=37207, .match_offset=0 }, { .children_offset=37209, .match_offset=0 }, { .children_offset=0, .match_offset=61255 }, { .children_offset=37211, .match_offset=0 }, { .children_offset=37213, .match_offset=0 }, { .children_offset=37215, .match_offset=0 }, { .children_offset=0, .match_offset=33437 }, { .children_offset=37217, .match_offset=0 }, { .children_offset=37219, .match_offset=0 }, { .children_offset=37221, .match_offset=0 }, { .children_offset=37223, .match_offset=0 }, { .children_offset=0, .match_offset=28754 }, { .children_offset=37225, .match_offset=0 }, { .children_offset=37227, .match_offset=0 }, { .children_offset=37229, .match_offset=0 }, { .children_offset=0, .match_offset=38183 }, { .children_offset=37231, .match_offset=0 }, { .children_offset=37233, .match_offset=0 }, { .children_offset=37235, .match_offset=0 }, { .children_offset=37237, .match_offset=0 }, { .children_offset=37239, .match_offset=0 }, { .children_offset=37241, .match_offset=0 }, { .children_offset=37243, .match_offset=0 }, { .children_offset=37245, .match_offset=0 }, { .children_offset=37247, .match_offset=0 }, { .children_offset=0, .match_offset=6576 }, { .children_offset=37249, .match_offset=0 }, { .children_offset=37253, .match_offset=0 }, { .children_offset=37255, .match_offset=0 }, { .children_offset=37257, .match_offset=0 }, { .children_offset=37259, .match_offset=0 }, { .children_offset=37261, .match_offset=0 }, { .children_offset=37263, .match_offset=0 }, { .children_offset=37265, .match_offset=0 }, { .children_offset=0, .match_offset=6829 }, { .children_offset=37267, .match_offset=0 }, { .children_offset=37269, .match_offset=0 }, { .children_offset=37271, .match_offset=40180 }, { .children_offset=37273, .match_offset=0 }, { .children_offset=37275, .match_offset=0 }, { .children_offset=37277, .match_offset=0 }, { .children_offset=37279, .match_offset=0 }, { .children_offset=0, .match_offset=22788 }, { .children_offset=37281, .match_offset=0 }, { .children_offset=37283, .match_offset=0 }, { .children_offset=0, .match_offset=8754 }, { .children_offset=37285, .match_offset=0 }, { .children_offset=37287, .match_offset=0 }, { .children_offset=37289, .match_offset=0 }, { .children_offset=0, .match_offset=15985 }, { .children_offset=37291, .match_offset=0 }, { .children_offset=37293, .match_offset=0 }, { .children_offset=37295, .match_offset=0 }, { .children_offset=37297, .match_offset=0 }, { .children_offset=0, .match_offset=8752 }, { .children_offset=37299, .match_offset=0 }, { .children_offset=37304, .match_offset=0 }, { .children_offset=37306, .match_offset=33533 }, { .children_offset=0, .match_offset=74568 }, { .children_offset=37308, .match_offset=0 }, { .children_offset=37311, .match_offset=0 }, { .children_offset=37313, .match_offset=59025 }, { .children_offset=37315, .match_offset=0 }, { .children_offset=0, .match_offset=46839 }, { .children_offset=37317, .match_offset=124901 }, { .children_offset=37320, .match_offset=0 }, { .children_offset=0, .match_offset=46613 }, { .children_offset=0, .match_offset=23028 }, { .children_offset=37322, .match_offset=0 }, { .children_offset=37324, .match_offset=0 }, { .children_offset=37326, .match_offset=0 }, { .children_offset=37328, .match_offset=0 }, { .children_offset=37330, .match_offset=0 }, { .children_offset=37332, .match_offset=0 }, { .children_offset=37334, .match_offset=0 }, { .children_offset=37336, .match_offset=0 }, { .children_offset=37338, .match_offset=0 }, { .children_offset=0, .match_offset=108224 }, { .children_offset=37340, .match_offset=0 }, { .children_offset=37342, .match_offset=0 }, { .children_offset=37344, .match_offset=0 }, { .children_offset=0, .match_offset=134381 }, { .children_offset=37346, .match_offset=0 }, { .children_offset=37350, .match_offset=0 }, { .children_offset=0, .match_offset=133391 }, { .children_offset=0, .match_offset=1135 }, { .children_offset=37352, .match_offset=0 }, { .children_offset=37354, .match_offset=0 }, { .children_offset=0, .match_offset=103573 }, { .children_offset=37356, .match_offset=0 }, { .children_offset=37369, .match_offset=0 }, { .children_offset=37371, .match_offset=0 }, { .children_offset=37373, .match_offset=0 }, { .children_offset=0, .match_offset=5346 }, { .children_offset=37375, .match_offset=44004 }, { .children_offset=37377, .match_offset=0 }, { .children_offset=37379, .match_offset=0 }, { .children_offset=0, .match_offset=30956 }, { .children_offset=37381, .match_offset=0 }, { .children_offset=37386, .match_offset=0 }, { .children_offset=37388, .match_offset=0 }, { .children_offset=37390, .match_offset=0 }, { .children_offset=0, .match_offset=115736 }, { .children_offset=37392, .match_offset=0 }, { .children_offset=37394, .match_offset=0 }, { .children_offset=37396, .match_offset=0 }, { .children_offset=0, .match_offset=37308 }, { .children_offset=37398, .match_offset=0 }, { .children_offset=37400, .match_offset=0 }, { .children_offset=37402, .match_offset=0 }, { .children_offset=0, .match_offset=37225 }, { .children_offset=37404, .match_offset=0 }, { .children_offset=37406, .match_offset=0 }, { .children_offset=37408, .match_offset=0 }, { .children_offset=0, .match_offset=62140 }, { .children_offset=37410, .match_offset=0 }, { .children_offset=37412, .match_offset=0 }, { .children_offset=37414, .match_offset=0 }, { .children_offset=37416, .match_offset=0 }, { .children_offset=0, .match_offset=59487 }, { .children_offset=37418, .match_offset=0 }, { .children_offset=37420, .match_offset=0 }, { .children_offset=37422, .match_offset=0 }, { .children_offset=37424, .match_offset=0 }, { .children_offset=37426, .match_offset=0 }, { .children_offset=37428, .match_offset=0 }, { .children_offset=0, .match_offset=52716 }, { .children_offset=37430, .match_offset=0 }, { .children_offset=37432, .match_offset=0 }, { .children_offset=37434, .match_offset=0 }, { .children_offset=37436, .match_offset=0 }, { .children_offset=37439, .match_offset=0 }, { .children_offset=37442, .match_offset=0 }, { .children_offset=0, .match_offset=49718 }, { .children_offset=37444, .match_offset=0 }, { .children_offset=0, .match_offset=33431 }, { .children_offset=37446, .match_offset=0 }, { .children_offset=0, .match_offset=20553 }, { .children_offset=37448, .match_offset=0 }, { .children_offset=37451, .match_offset=0 }, { .children_offset=37453, .match_offset=0 }, { .children_offset=37455, .match_offset=0 }, { .children_offset=37457, .match_offset=0 }, { .children_offset=37459, .match_offset=0 }, { .children_offset=0, .match_offset=27438 }, { .children_offset=37461, .match_offset=0 }, { .children_offset=37463, .match_offset=0 }, { .children_offset=37465, .match_offset=0 }, { .children_offset=37467, .match_offset=0 }, { .children_offset=0, .match_offset=104479 }, { .children_offset=37469, .match_offset=0 }, { .children_offset=0, .match_offset=29831 }, { .children_offset=37471, .match_offset=133595 }, { .children_offset=37475, .match_offset=0 }, { .children_offset=37478, .match_offset=0 }, { .children_offset=37480, .match_offset=0 }, { .children_offset=37482, .match_offset=0 }, { .children_offset=0, .match_offset=34575 }, { .children_offset=37484, .match_offset=0 }, { .children_offset=37486, .match_offset=0 }, { .children_offset=0, .match_offset=69325 }, { .children_offset=37488, .match_offset=0 }, { .children_offset=37490, .match_offset=0 }, { .children_offset=37492, .match_offset=0 }, { .children_offset=37494, .match_offset=0 }, { .children_offset=37496, .match_offset=0 }, { .children_offset=37498, .match_offset=43112 }, { .children_offset=37500, .match_offset=0 }, { .children_offset=0, .match_offset=133595 }, { .children_offset=37502, .match_offset=0 }, { .children_offset=0, .match_offset=133595 }, { .children_offset=37504, .match_offset=0 }, { .children_offset=37507, .match_offset=0 }, { .children_offset=37509, .match_offset=0 }, { .children_offset=37511, .match_offset=0 }, { .children_offset=37513, .match_offset=0 }, { .children_offset=37515, .match_offset=0 }, { .children_offset=0, .match_offset=103311 }, { .children_offset=37517, .match_offset=0 }, { .children_offset=37519, .match_offset=0 }, { .children_offset=37521, .match_offset=0 }, { .children_offset=37523, .match_offset=0 }, { .children_offset=37525, .match_offset=0 }, { .children_offset=37527, .match_offset=0 }, { .children_offset=37529, .match_offset=0 }, { .children_offset=37531, .match_offset=0 }, { .children_offset=37533, .match_offset=0 }, { .children_offset=0, .match_offset=129346 }, { .children_offset=37535, .match_offset=0 }, { .children_offset=37537, .match_offset=0 }, { .children_offset=0, .match_offset=39215 }, { .children_offset=37540, .match_offset=0 }, { .children_offset=37542, .match_offset=0 }, { .children_offset=37544, .match_offset=0 }, { .children_offset=37546, .match_offset=0 }, { .children_offset=0, .match_offset=465 }, { .children_offset=37548, .match_offset=0 }, { .children_offset=0, .match_offset=9045 }, { .children_offset=37550, .match_offset=0 }, { .children_offset=37552, .match_offset=0 }, { .children_offset=0, .match_offset=113284 }, { .children_offset=37554, .match_offset=0 }, { .children_offset=37556, .match_offset=0 }, { .children_offset=37558, .match_offset=0 }, { .children_offset=0, .match_offset=129314 }, { .children_offset=37560, .match_offset=25577 }, { .children_offset=37564, .match_offset=0 }, { .children_offset=37566, .match_offset=0 }, { .children_offset=37568, .match_offset=0 }, { .children_offset=37570, .match_offset=0 }, { .children_offset=0, .match_offset=78432 }, { .children_offset=37572, .match_offset=0 }, { .children_offset=0, .match_offset=27998 }, { .children_offset=37574, .match_offset=110256 }, { .children_offset=37577, .match_offset=0 }, { .children_offset=37579, .match_offset=0 }, { .children_offset=37581, .match_offset=0 }, { .children_offset=37583, .match_offset=0 }, { .children_offset=37585, .match_offset=0 }, { .children_offset=37590, .match_offset=0 }, { .children_offset=37592, .match_offset=0 }, { .children_offset=37594, .match_offset=0 }, { .children_offset=37596, .match_offset=0 }, { .children_offset=37598, .match_offset=0 }, { .children_offset=37600, .match_offset=0 }, { .children_offset=0, .match_offset=35750 }, { .children_offset=0, .match_offset=63456 }, { .children_offset=37602, .match_offset=0 }, { .children_offset=37604, .match_offset=0 }, { .children_offset=37606, .match_offset=0 }, { .children_offset=37608, .match_offset=0 }, { .children_offset=37610, .match_offset=0 }, { .children_offset=37612, .match_offset=0 }, { .children_offset=37614, .match_offset=0 }, { .children_offset=37616, .match_offset=0 }, { .children_offset=37618, .match_offset=0 }, { .children_offset=37620, .match_offset=0 }, { .children_offset=0, .match_offset=109242 }, { .children_offset=37622, .match_offset=0 }, { .children_offset=37624, .match_offset=0 }, { .children_offset=37626, .match_offset=0 }, { .children_offset=37628, .match_offset=0 }, { .children_offset=37630, .match_offset=0 }, { .children_offset=37632, .match_offset=0 }, { .children_offset=0, .match_offset=16327 }, { .children_offset=37634, .match_offset=0 }, { .children_offset=0, .match_offset=125397 }, { .children_offset=37637, .match_offset=0 }, { .children_offset=0, .match_offset=20545 }, { .children_offset=37639, .match_offset=0 }, { .children_offset=0, .match_offset=15470 }, { .children_offset=37642, .match_offset=0 }, { .children_offset=37644, .match_offset=0 }, { .children_offset=37646, .match_offset=0 }, { .children_offset=0, .match_offset=43772 }, { .children_offset=37648, .match_offset=10230 }, { .children_offset=0, .match_offset=37686 }, { .children_offset=37666, .match_offset=0 }, { .children_offset=37670, .match_offset=0 }, { .children_offset=37672, .match_offset=0 }, { .children_offset=37674, .match_offset=0 }, { .children_offset=0, .match_offset=131647 }, { .children_offset=0, .match_offset=115603 }, { .children_offset=0, .match_offset=2089 }, { .children_offset=37676, .match_offset=26796 }, { .children_offset=37678, .match_offset=0 }, { .children_offset=37680, .match_offset=0 }, { .children_offset=0, .match_offset=102881 }, { .children_offset=37682, .match_offset=0 }, { .children_offset=0, .match_offset=25783 }, { .children_offset=0, .match_offset=104449 }, { .children_offset=37684, .match_offset=0 }, { .children_offset=37686, .match_offset=0 }, { .children_offset=37688, .match_offset=0 }, { .children_offset=0, .match_offset=2279 }, { .children_offset=37690, .match_offset=25744 }, { .children_offset=0, .match_offset=125094 }, { .children_offset=37692, .match_offset=0 }, { .children_offset=37695, .match_offset=0 }, { .children_offset=37698, .match_offset=0 }, { .children_offset=0, .match_offset=13857 }, { .children_offset=37700, .match_offset=0 }, { .children_offset=37702, .match_offset=0 }, { .children_offset=37705, .match_offset=0 }, { .children_offset=37707, .match_offset=0 }, { .children_offset=37709, .match_offset=0 }, { .children_offset=37711, .match_offset=0 }, { .children_offset=0, .match_offset=67421 }, { .children_offset=0, .match_offset=133460 }, { .children_offset=37713, .match_offset=122045 }, { .children_offset=37715, .match_offset=0 }, { .children_offset=37717, .match_offset=0 }, { .children_offset=0, .match_offset=6874 }, { .children_offset=37719, .match_offset=45050 }, { .children_offset=0, .match_offset=124771 }, { .children_offset=0, .match_offset=71532 }, { .children_offset=0, .match_offset=21382 }, { .children_offset=0, .match_offset=1489 }, { .children_offset=37722, .match_offset=124838 }, { .children_offset=37728, .match_offset=0 }, { .children_offset=37731, .match_offset=0 }, { .children_offset=0, .match_offset=110351 }, { .children_offset=37733, .match_offset=0 }, { .children_offset=0, .match_offset=85904 }, { .children_offset=37735, .match_offset=0 }, { .children_offset=37737, .match_offset=0 }, { .children_offset=37739, .match_offset=0 }, { .children_offset=0, .match_offset=34580 }, { .children_offset=37741, .match_offset=0 }, { .children_offset=37743, .match_offset=0 }, { .children_offset=0, .match_offset=122692 }, { .children_offset=37745, .match_offset=0 }, { .children_offset=0, .match_offset=40446 }, { .children_offset=0, .match_offset=35133 }, { .children_offset=37747, .match_offset=0 }, { .children_offset=37749, .match_offset=0 }, { .children_offset=37752, .match_offset=0 }, { .children_offset=37754, .match_offset=0 }, { .children_offset=0, .match_offset=108566 }, { .children_offset=37756, .match_offset=0 }, { .children_offset=37758, .match_offset=0 }, { .children_offset=37761, .match_offset=0 }, { .children_offset=0, .match_offset=108162 }, { .children_offset=0, .match_offset=38687 }, { .children_offset=37763, .match_offset=11085 }, { .children_offset=37765, .match_offset=0 }, { .children_offset=37767, .match_offset=0 }, { .children_offset=37769, .match_offset=0 }, { .children_offset=37771, .match_offset=0 }, { .children_offset=37773, .match_offset=0 }, { .children_offset=37775, .match_offset=0 }, { .children_offset=37777, .match_offset=0 }, { .children_offset=37779, .match_offset=0 }, { .children_offset=0, .match_offset=73466 }, { .children_offset=37781, .match_offset=0 }, { .children_offset=0, .match_offset=22320 }, { .children_offset=0, .match_offset=34002 }, { .children_offset=37783, .match_offset=0 }, { .children_offset=37785, .match_offset=0 }, { .children_offset=37787, .match_offset=0 }, { .children_offset=0, .match_offset=130141 }, { .children_offset=0, .match_offset=61857 }, { .children_offset=37789, .match_offset=65798 }, { .children_offset=37794, .match_offset=33525 }, { .children_offset=0, .match_offset=110355 }, { .children_offset=37796, .match_offset=58322 }, { .children_offset=0, .match_offset=121946 }, { .children_offset=37798, .match_offset=113717 }, { .children_offset=0, .match_offset=8932 }, { .children_offset=37800, .match_offset=12374 }, { .children_offset=0, .match_offset=124575 }, { .children_offset=0, .match_offset=1923 }, { .children_offset=37803, .match_offset=125823 }, { .children_offset=0, .match_offset=58471 }, { .children_offset=37808, .match_offset=134194 }, { .children_offset=0, .match_offset=125251 }, { .children_offset=0, .match_offset=67404 }, { .children_offset=0, .match_offset=8868 }, { .children_offset=0, .match_offset=27896 }, { .children_offset=37810, .match_offset=0 }, { .children_offset=37825, .match_offset=0 }, { .children_offset=37827, .match_offset=0 }, { .children_offset=0, .match_offset=16878 }, { .children_offset=0, .match_offset=60152 }, { .children_offset=0, .match_offset=135538 }, { .children_offset=0, .match_offset=46588 }, { .children_offset=0, .match_offset=58483 }, { .children_offset=0, .match_offset=126539 }, { .children_offset=0, .match_offset=34446 }, { .children_offset=37835, .match_offset=70727 }, { .children_offset=37848, .match_offset=78320 }, { .children_offset=37851, .match_offset=110987 }, { .children_offset=0, .match_offset=28492 }, { .children_offset=0, .match_offset=131846 }, { .children_offset=37853, .match_offset=0 }, { .children_offset=37855, .match_offset=0 }, { .children_offset=0, .match_offset=57317 }, { .children_offset=0, .match_offset=77667 }, { .children_offset=37857, .match_offset=11938 }, { .children_offset=37859, .match_offset=0 }, { .children_offset=37861, .match_offset=0 }, { .children_offset=37863, .match_offset=0 }, { .children_offset=37865, .match_offset=0 }, { .children_offset=0, .match_offset=72482 }, { .children_offset=37867, .match_offset=0 }, { .children_offset=0, .match_offset=14431 }, { .children_offset=37869, .match_offset=0 }, { .children_offset=37871, .match_offset=0 }, { .children_offset=37873, .match_offset=0 }, { .children_offset=0, .match_offset=22222 }, { .children_offset=37875, .match_offset=0 }, { .children_offset=0, .match_offset=27481 }, { .children_offset=0, .match_offset=104177 }, { .children_offset=37877, .match_offset=16116 }, { .children_offset=37879, .match_offset=0 }, { .children_offset=37881, .match_offset=0 }, { .children_offset=0, .match_offset=80945 }, { .children_offset=37883, .match_offset=0 }, { .children_offset=37885, .match_offset=0 }, { .children_offset=0, .match_offset=135943 }, { .children_offset=0, .match_offset=21142 }, { .children_offset=0, .match_offset=50292 }, { .children_offset=37887, .match_offset=129326 }, { .children_offset=0, .match_offset=127368 }, { .children_offset=37890, .match_offset=0 }, { .children_offset=37892, .match_offset=0 }, { .children_offset=37894, .match_offset=0 }, { .children_offset=0, .match_offset=44989 }, { .children_offset=37896, .match_offset=0 }, { .children_offset=0, .match_offset=41927 }, { .children_offset=37898, .match_offset=0 }, { .children_offset=0, .match_offset=12439 }, { .children_offset=37900, .match_offset=0 }, { .children_offset=37907, .match_offset=66225 }, { .children_offset=0, .match_offset=57338 }, { .children_offset=0, .match_offset=81003 }, { .children_offset=37910, .match_offset=44659 }, { .children_offset=0, .match_offset=30068 }, { .children_offset=0, .match_offset=103399 }, { .children_offset=37912, .match_offset=54227 }, { .children_offset=37914, .match_offset=0 }, { .children_offset=0, .match_offset=38551 }, { .children_offset=0, .match_offset=42676 }, { .children_offset=37916, .match_offset=0 }, { .children_offset=37920, .match_offset=81072 }, { .children_offset=0, .match_offset=1527 }, { .children_offset=37922, .match_offset=37155 }, { .children_offset=0, .match_offset=16664 }, { .children_offset=0, .match_offset=73838 }, { .children_offset=37924, .match_offset=57304 }, { .children_offset=37932, .match_offset=133576 }, { .children_offset=0, .match_offset=104395 }, { .children_offset=0, .match_offset=124769 }, { .children_offset=0, .match_offset=57499 }, { .children_offset=0, .match_offset=27073 }, { .children_offset=0, .match_offset=15511 }, { .children_offset=37936, .match_offset=0 }, { .children_offset=0, .match_offset=60462 }, { .children_offset=0, .match_offset=65154 }, { .children_offset=37938, .match_offset=25826 }, { .children_offset=37940, .match_offset=0 }, { .children_offset=0, .match_offset=64182 }, { .children_offset=0, .match_offset=60567 }, { .children_offset=0, .match_offset=37974 }, { .children_offset=37942, .match_offset=11032 }, { .children_offset=0, .match_offset=116966 }, { .children_offset=0, .match_offset=85248 }, { .children_offset=0, .match_offset=37709 }, { .children_offset=37949, .match_offset=13172 }, { .children_offset=0, .match_offset=50160 }, { .children_offset=0, .match_offset=126565 }, { .children_offset=0, .match_offset=87079 }, { .children_offset=0, .match_offset=118610 }, { .children_offset=0, .match_offset=34650 }, { .children_offset=37953, .match_offset=103712 }, { .children_offset=37955, .match_offset=0 }, { .children_offset=37957, .match_offset=0 }, { .children_offset=37959, .match_offset=0 }, { .children_offset=0, .match_offset=11437 }, { .children_offset=37961, .match_offset=0 }, { .children_offset=37963, .match_offset=0 }, { .children_offset=0, .match_offset=45969 }, { .children_offset=37965, .match_offset=127301 }, { .children_offset=37980, .match_offset=30350 }, { .children_offset=37985, .match_offset=123416 }, { .children_offset=37988, .match_offset=0 }, { .children_offset=37990, .match_offset=0 }, { .children_offset=37992, .match_offset=0 }, { .children_offset=37994, .match_offset=0 }, { .children_offset=0, .match_offset=90628 }, { .children_offset=37996, .match_offset=0 }, { .children_offset=37999, .match_offset=0 }, { .children_offset=38001, .match_offset=0 }, { .children_offset=0, .match_offset=68460 }, { .children_offset=38003, .match_offset=0 }, { .children_offset=38005, .match_offset=0 }, { .children_offset=38007, .match_offset=0 }, { .children_offset=0, .match_offset=11444 }, { .children_offset=38009, .match_offset=0 }, { .children_offset=38011, .match_offset=0 }, { .children_offset=38013, .match_offset=0 }, { .children_offset=38015, .match_offset=0 }, { .children_offset=0, .match_offset=123704 }, { .children_offset=38017, .match_offset=0 }, { .children_offset=38019, .match_offset=0 }, { .children_offset=38021, .match_offset=0 }, { .children_offset=38023, .match_offset=58736 }, { .children_offset=0, .match_offset=8554 }, { .children_offset=38025, .match_offset=0 }, { .children_offset=38028, .match_offset=0 }, { .children_offset=38030, .match_offset=0 }, { .children_offset=38032, .match_offset=0 }, { .children_offset=38034, .match_offset=0 }, { .children_offset=38036, .match_offset=0 }, { .children_offset=38038, .match_offset=5229 }, { .children_offset=0, .match_offset=46864 }, { .children_offset=38040, .match_offset=0 }, { .children_offset=38042, .match_offset=0 }, { .children_offset=0, .match_offset=5229 }, { .children_offset=38044, .match_offset=0 }, { .children_offset=38046, .match_offset=0 }, { .children_offset=38048, .match_offset=0 }, { .children_offset=0, .match_offset=41939 }, { .children_offset=38050, .match_offset=38443 }, { .children_offset=38053, .match_offset=0 }, { .children_offset=0, .match_offset=77305 }, { .children_offset=38055, .match_offset=0 }, { .children_offset=38057, .match_offset=24293 }, { .children_offset=38060, .match_offset=0 }, { .children_offset=0, .match_offset=11061 }, { .children_offset=38062, .match_offset=0 }, { .children_offset=38064, .match_offset=0 }, { .children_offset=38066, .match_offset=68206 }, { .children_offset=38068, .match_offset=0 }, { .children_offset=0, .match_offset=11061 }, { .children_offset=0, .match_offset=86937 }, { .children_offset=38070, .match_offset=104207 }, { .children_offset=38074, .match_offset=0 }, { .children_offset=0, .match_offset=40856 }, { .children_offset=38076, .match_offset=0 }, { .children_offset=0, .match_offset=70809 }, { .children_offset=0, .match_offset=58489 }, { .children_offset=38079, .match_offset=0 }, { .children_offset=38084, .match_offset=0 }, { .children_offset=38086, .match_offset=0 }, { .children_offset=38088, .match_offset=0 }, { .children_offset=38090, .match_offset=0 }, { .children_offset=0, .match_offset=80572 }, { .children_offset=38092, .match_offset=0 }, { .children_offset=38094, .match_offset=0 }, { .children_offset=38096, .match_offset=0 }, { .children_offset=0, .match_offset=22693 }, { .children_offset=38098, .match_offset=0 }, { .children_offset=38100, .match_offset=0 }, { .children_offset=38102, .match_offset=0 }, { .children_offset=38104, .match_offset=0 }, { .children_offset=38106, .match_offset=0 }, { .children_offset=38108, .match_offset=0 }, { .children_offset=38110, .match_offset=0 }, { .children_offset=0, .match_offset=29073 }, { .children_offset=38112, .match_offset=0 }, { .children_offset=38115, .match_offset=0 }, { .children_offset=38117, .match_offset=0 }, { .children_offset=38119, .match_offset=0 }, { .children_offset=38121, .match_offset=0 }, { .children_offset=38123, .match_offset=0 }, { .children_offset=38125, .match_offset=0 }, { .children_offset=0, .match_offset=38164 }, { .children_offset=38127, .match_offset=0 }, { .children_offset=38129, .match_offset=0 }, { .children_offset=0, .match_offset=122360 }, { .children_offset=0, .match_offset=105779 }, { .children_offset=38131, .match_offset=90013 }, { .children_offset=0, .match_offset=34004 }, { .children_offset=38135, .match_offset=86056 }, { .children_offset=38138, .match_offset=0 }, { .children_offset=38140, .match_offset=0 }, { .children_offset=38142, .match_offset=0 }, { .children_offset=38144, .match_offset=0 }, { .children_offset=0, .match_offset=58661 }, { .children_offset=0, .match_offset=26906 }, { .children_offset=0, .match_offset=67761 }, { .children_offset=0, .match_offset=113829 }, { .children_offset=38146, .match_offset=28006 }, { .children_offset=0, .match_offset=85363 }, { .children_offset=38148, .match_offset=0 }, { .children_offset=38150, .match_offset=0 }, { .children_offset=38152, .match_offset=0 }, { .children_offset=38154, .match_offset=0 }, { .children_offset=38156, .match_offset=0 }, { .children_offset=38158, .match_offset=0 }, { .children_offset=0, .match_offset=15031 }, { .children_offset=0, .match_offset=123782 }, { .children_offset=38160, .match_offset=100994 }, { .children_offset=0, .match_offset=42853 }, { .children_offset=0, .match_offset=58410 }, { .children_offset=0, .match_offset=131215 }, { .children_offset=38162, .match_offset=0 }, { .children_offset=38166, .match_offset=41925 }, { .children_offset=0, .match_offset=12389 }, { .children_offset=38168, .match_offset=86285 }, { .children_offset=0, .match_offset=113811 }, { .children_offset=0, .match_offset=133593 }, { .children_offset=38170, .match_offset=34511 }, { .children_offset=38180, .match_offset=70848 }, { .children_offset=0, .match_offset=42336 }, { .children_offset=38182, .match_offset=104452 }, { .children_offset=0, .match_offset=64400 }, { .children_offset=0, .match_offset=113405 }, { .children_offset=0, .match_offset=26129 }, { .children_offset=0, .match_offset=39201 }, { .children_offset=38184, .match_offset=80562 }, { .children_offset=0, .match_offset=58025 }, { .children_offset=0, .match_offset=40641 }, { .children_offset=0, .match_offset=1507 }, { .children_offset=0, .match_offset=44663 }, { .children_offset=38186, .match_offset=0 }, { .children_offset=38211, .match_offset=0 }, { .children_offset=38213, .match_offset=0 }, { .children_offset=38215, .match_offset=0 }, { .children_offset=38217, .match_offset=0 }, { .children_offset=0, .match_offset=133009 }, { .children_offset=38219, .match_offset=0 }, { .children_offset=38223, .match_offset=0 }, { .children_offset=0, .match_offset=116972 }, { .children_offset=38233, .match_offset=42248 }, { .children_offset=0, .match_offset=123270 }, { .children_offset=38235, .match_offset=103136 }, { .children_offset=0, .match_offset=8935 }, { .children_offset=0, .match_offset=38410 }, { .children_offset=0, .match_offset=65401 }, { .children_offset=0, .match_offset=103420 }, { .children_offset=0, .match_offset=30878 }, { .children_offset=0, .match_offset=382 }, { .children_offset=0, .match_offset=15325 }, { .children_offset=0, .match_offset=67394 }, { .children_offset=38238, .match_offset=0 }, { .children_offset=38249, .match_offset=51 }, { .children_offset=0, .match_offset=126426 }, { .children_offset=0, .match_offset=131074 }, { .children_offset=0, .match_offset=132821 }, { .children_offset=0, .match_offset=134338 }, { .children_offset=0, .match_offset=125561 }, { .children_offset=0, .match_offset=122674 }, { .children_offset=38251, .match_offset=40336 }, { .children_offset=0, .match_offset=10256 }, { .children_offset=0, .match_offset=103365 }, { .children_offset=0, .match_offset=65387 }, { .children_offset=0, .match_offset=76977 }, { .children_offset=38253, .match_offset=0 }, { .children_offset=0, .match_offset=10848 }, { .children_offset=0, .match_offset=46046 }, { .children_offset=0, .match_offset=15694 }, { .children_offset=0, .match_offset=26045 }, { .children_offset=0, .match_offset=380 }, { .children_offset=0, .match_offset=78685 }, { .children_offset=0, .match_offset=134469 }, { .children_offset=0, .match_offset=34430 }, { .children_offset=0, .match_offset=122144 }, { .children_offset=0, .match_offset=33871 }, { .children_offset=38264, .match_offset=65594 }, { .children_offset=38288, .match_offset=0 }, { .children_offset=0, .match_offset=70776 }, { .children_offset=0, .match_offset=71996 }, { .children_offset=0, .match_offset=38915 }, { .children_offset=0, .match_offset=41 }, { .children_offset=38294, .match_offset=0 }, { .children_offset=38296, .match_offset=0 }, { .children_offset=38298, .match_offset=0 }, { .children_offset=0, .match_offset=46693 }, { .children_offset=0, .match_offset=35756 }, { .children_offset=0, .match_offset=58797 }, { .children_offset=38300, .match_offset=46841 }, { .children_offset=0, .match_offset=14925 }, { .children_offset=38303, .match_offset=0 }, { .children_offset=0, .match_offset=35782 }, { .children_offset=38305, .match_offset=85398 }, { .children_offset=38307, .match_offset=0 }, { .children_offset=38309, .match_offset=0 }, { .children_offset=0, .match_offset=126396 }, { .children_offset=38311, .match_offset=0 }, { .children_offset=38316, .match_offset=0 }, { .children_offset=38318, .match_offset=0 }, { .children_offset=38320, .match_offset=0 }, { .children_offset=0, .match_offset=37260 }, { .children_offset=38322, .match_offset=0 }, { .children_offset=38324, .match_offset=0 }, { .children_offset=0, .match_offset=60929 }, { .children_offset=38326, .match_offset=0 }, { .children_offset=38328, .match_offset=0 }, { .children_offset=38330, .match_offset=0 }, { .children_offset=0, .match_offset=38386 }, { .children_offset=38332, .match_offset=0 }, { .children_offset=38334, .match_offset=0 }, { .children_offset=0, .match_offset=5367 }, { .children_offset=38336, .match_offset=67551 }, { .children_offset=38338, .match_offset=63626 }, { .children_offset=38341, .match_offset=109115 }, { .children_offset=38343, .match_offset=0 }, { .children_offset=0, .match_offset=59606 }, { .children_offset=38345, .match_offset=33491 }, { .children_offset=38347, .match_offset=0 }, { .children_offset=38349, .match_offset=0 }, { .children_offset=38351, .match_offset=0 }, { .children_offset=38353, .match_offset=0 }, { .children_offset=38355, .match_offset=0 }, { .children_offset=0, .match_offset=133244 }, { .children_offset=38357, .match_offset=85370 }, { .children_offset=38359, .match_offset=45984 }, { .children_offset=38361, .match_offset=0 }, { .children_offset=38363, .match_offset=0 }, { .children_offset=38365, .match_offset=0 }, { .children_offset=0, .match_offset=77446 }, { .children_offset=38367, .match_offset=0 }, { .children_offset=0, .match_offset=129893 }, { .children_offset=38369, .match_offset=29122 }, { .children_offset=38371, .match_offset=0 }, { .children_offset=38373, .match_offset=0 }, { .children_offset=38375, .match_offset=0 }, { .children_offset=38377, .match_offset=0 }, { .children_offset=38379, .match_offset=0 }, { .children_offset=38381, .match_offset=0 }, { .children_offset=38383, .match_offset=0 }, { .children_offset=0, .match_offset=135922 }, { .children_offset=38385, .match_offset=43686 }, { .children_offset=38390, .match_offset=0 }, { .children_offset=0, .match_offset=68989 }, { .children_offset=0, .match_offset=26802 }, { .children_offset=38393, .match_offset=13417 }, { .children_offset=38395, .match_offset=0 }, { .children_offset=38397, .match_offset=0 }, { .children_offset=0, .match_offset=68255 }, { .children_offset=38399, .match_offset=65139 }, { .children_offset=38401, .match_offset=0 }, { .children_offset=38403, .match_offset=0 }, { .children_offset=0, .match_offset=116237 }, { .children_offset=38405, .match_offset=0 }, { .children_offset=38408, .match_offset=0 }, { .children_offset=0, .match_offset=59566 }, { .children_offset=38410, .match_offset=0 }, { .children_offset=38412, .match_offset=0 }, { .children_offset=0, .match_offset=59435 }, { .children_offset=38414, .match_offset=0 }, { .children_offset=38416, .match_offset=0 }, { .children_offset=38418, .match_offset=0 }, { .children_offset=38420, .match_offset=0 }, { .children_offset=0, .match_offset=90005 }, { .children_offset=38422, .match_offset=10292 }, { .children_offset=38425, .match_offset=0 }, { .children_offset=38427, .match_offset=0 }, { .children_offset=0, .match_offset=123387 }, { .children_offset=0, .match_offset=69141 }, { .children_offset=38429, .match_offset=6699 }, { .children_offset=0, .match_offset=21357 }, { .children_offset=38432, .match_offset=87133 }, { .children_offset=0, .match_offset=35094 }, { .children_offset=0, .match_offset=62579 }, { .children_offset=38436, .match_offset=0 }, { .children_offset=0, .match_offset=121996 }, { .children_offset=38438, .match_offset=55196 }, { .children_offset=38440, .match_offset=0 }, { .children_offset=38442, .match_offset=0 }, { .children_offset=38444, .match_offset=0 }, { .children_offset=0, .match_offset=134333 }, { .children_offset=38446, .match_offset=34353 }, { .children_offset=38448, .match_offset=0 }, { .children_offset=0, .match_offset=43091 }, { .children_offset=38450, .match_offset=0 }, { .children_offset=38452, .match_offset=30800 }, { .children_offset=38463, .match_offset=0 }, { .children_offset=0, .match_offset=12355 }, { .children_offset=38465, .match_offset=122535 }, { .children_offset=38467, .match_offset=0 }, { .children_offset=0, .match_offset=25671 }, { .children_offset=0, .match_offset=61778 }, { .children_offset=38469, .match_offset=0 }, { .children_offset=0, .match_offset=23954 }, { .children_offset=38471, .match_offset=0 }, { .children_offset=0, .match_offset=1120 }, { .children_offset=38473, .match_offset=0 }, { .children_offset=0, .match_offset=133030 }, { .children_offset=38475, .match_offset=0 }, { .children_offset=0, .match_offset=122502 }, { .children_offset=38477, .match_offset=0 }, { .children_offset=38479, .match_offset=0 }, { .children_offset=0, .match_offset=133613 }, { .children_offset=38481, .match_offset=0 }, { .children_offset=0, .match_offset=61859 }, { .children_offset=0, .match_offset=135002 }, { .children_offset=38483, .match_offset=0 }, { .children_offset=38487, .match_offset=0 }, { .children_offset=0, .match_offset=34172 }, { .children_offset=38489, .match_offset=0 }, { .children_offset=38491, .match_offset=0 }, { .children_offset=0, .match_offset=89869 }, { .children_offset=38493, .match_offset=0 }, { .children_offset=38495, .match_offset=0 }, { .children_offset=38497, .match_offset=0 }, { .children_offset=0, .match_offset=61648 }, { .children_offset=38499, .match_offset=28473 }, { .children_offset=38503, .match_offset=81156 }, { .children_offset=38505, .match_offset=0 }, { .children_offset=0, .match_offset=10273 }, { .children_offset=38507, .match_offset=0 }, { .children_offset=0, .match_offset=59499 }, { .children_offset=38509, .match_offset=0 }, { .children_offset=38511, .match_offset=129619 }, { .children_offset=38513, .match_offset=0 }, { .children_offset=38515, .match_offset=0 }, { .children_offset=38517, .match_offset=0 }, { .children_offset=0, .match_offset=113839 }, { .children_offset=0, .match_offset=37504 }, { .children_offset=0, .match_offset=12677 }, { .children_offset=38519, .match_offset=123400 }, { .children_offset=38522, .match_offset=0 }, { .children_offset=38524, .match_offset=0 }, { .children_offset=38526, .match_offset=0 }, { .children_offset=0, .match_offset=136163 }, { .children_offset=0, .match_offset=49769 }, { .children_offset=38528, .match_offset=0 }, { .children_offset=38530, .match_offset=0 }, { .children_offset=0, .match_offset=113988 }, { .children_offset=38532, .match_offset=0 }, { .children_offset=38536, .match_offset=0 }, { .children_offset=38539, .match_offset=0 }, { .children_offset=0, .match_offset=61538 }, { .children_offset=38541, .match_offset=0 }, { .children_offset=0, .match_offset=25899 }, { .children_offset=38543, .match_offset=0 }, { .children_offset=38545, .match_offset=0 }, { .children_offset=0, .match_offset=73237 }, { .children_offset=38547, .match_offset=0 }, { .children_offset=38550, .match_offset=0 }, { .children_offset=38552, .match_offset=0 }, { .children_offset=0, .match_offset=13507 }, { .children_offset=0, .match_offset=126541 }, { .children_offset=38555, .match_offset=0 }, { .children_offset=0, .match_offset=37408 }, { .children_offset=38558, .match_offset=0 }, { .children_offset=38560, .match_offset=0 }, { .children_offset=0, .match_offset=131080 }, { .children_offset=0, .match_offset=2308 }, { .children_offset=38563, .match_offset=0 }, { .children_offset=38568, .match_offset=0 }, { .children_offset=38570, .match_offset=0 }, { .children_offset=38572, .match_offset=0 }, { .children_offset=0, .match_offset=37886 }, { .children_offset=38574, .match_offset=0 }, { .children_offset=38577, .match_offset=0 }, { .children_offset=38579, .match_offset=0 }, { .children_offset=0, .match_offset=115500 }, { .children_offset=38581, .match_offset=0 }, { .children_offset=0, .match_offset=14903 }, { .children_offset=38583, .match_offset=0 }, { .children_offset=0, .match_offset=13507 }, { .children_offset=0, .match_offset=22631 }, { .children_offset=38585, .match_offset=0 }, { .children_offset=38592, .match_offset=0 }, { .children_offset=0, .match_offset=70905 }, { .children_offset=38594, .match_offset=0 }, { .children_offset=0, .match_offset=104090 }, { .children_offset=38596, .match_offset=0 }, { .children_offset=38598, .match_offset=0 }, { .children_offset=38600, .match_offset=0 }, { .children_offset=38602, .match_offset=0 }, { .children_offset=0, .match_offset=65716 }, { .children_offset=0, .match_offset=113734 }, { .children_offset=38604, .match_offset=0 }, { .children_offset=38606, .match_offset=0 }, { .children_offset=38608, .match_offset=33771 }, { .children_offset=0, .match_offset=33771 }, { .children_offset=38610, .match_offset=0 }, { .children_offset=0, .match_offset=57529 }, { .children_offset=38612, .match_offset=132186 }, { .children_offset=38633, .match_offset=0 }, { .children_offset=0, .match_offset=108096 }, { .children_offset=0, .match_offset=50709 }, { .children_offset=0, .match_offset=60174 }, { .children_offset=0, .match_offset=62343 }, { .children_offset=38638, .match_offset=0 }, { .children_offset=38642, .match_offset=0 }, { .children_offset=0, .match_offset=122696 }, { .children_offset=38644, .match_offset=0 }, { .children_offset=38646, .match_offset=0 }, { .children_offset=38648, .match_offset=0 }, { .children_offset=0, .match_offset=60426 }, { .children_offset=38650, .match_offset=64187 }, { .children_offset=38655, .match_offset=0 }, { .children_offset=38657, .match_offset=0 }, { .children_offset=38659, .match_offset=133182 }, { .children_offset=38661, .match_offset=0 }, { .children_offset=0, .match_offset=42280 }, { .children_offset=38663, .match_offset=0 }, { .children_offset=38665, .match_offset=0 }, { .children_offset=0, .match_offset=15474 }, { .children_offset=38667, .match_offset=0 }, { .children_offset=38669, .match_offset=0 }, { .children_offset=38671, .match_offset=0 }, { .children_offset=0, .match_offset=64187 }, { .children_offset=0, .match_offset=64300 }, { .children_offset=38673, .match_offset=0 }, { .children_offset=38680, .match_offset=0 }, { .children_offset=38683, .match_offset=0 }, { .children_offset=38686, .match_offset=0 }, { .children_offset=0, .match_offset=67789 }, { .children_offset=38688, .match_offset=0 }, { .children_offset=38690, .match_offset=0 }, { .children_offset=0, .match_offset=108227 }, { .children_offset=38692, .match_offset=0 }, { .children_offset=38694, .match_offset=0 }, { .children_offset=38696, .match_offset=0 }, { .children_offset=38698, .match_offset=0 }, { .children_offset=0, .match_offset=103119 }, { .children_offset=38700, .match_offset=0 }, { .children_offset=38702, .match_offset=0 }, { .children_offset=38704, .match_offset=0 }, { .children_offset=38706, .match_offset=0 }, { .children_offset=38708, .match_offset=0 }, { .children_offset=38710, .match_offset=0 }, { .children_offset=0, .match_offset=44979 }, { .children_offset=38712, .match_offset=0 }, { .children_offset=38714, .match_offset=0 }, { .children_offset=38716, .match_offset=32799 }, { .children_offset=38719, .match_offset=0 }, { .children_offset=0, .match_offset=44916 }, { .children_offset=38721, .match_offset=0 }, { .children_offset=38723, .match_offset=0 }, { .children_offset=0, .match_offset=61766 }, { .children_offset=38725, .match_offset=0 }, { .children_offset=38727, .match_offset=0 }, { .children_offset=38729, .match_offset=0 }, { .children_offset=38731, .match_offset=0 }, { .children_offset=38733, .match_offset=0 }, { .children_offset=38735, .match_offset=0 }, { .children_offset=38737, .match_offset=0 }, { .children_offset=38739, .match_offset=0 }, { .children_offset=0, .match_offset=132879 }, { .children_offset=38741, .match_offset=7016 }, { .children_offset=38744, .match_offset=0 }, { .children_offset=38746, .match_offset=0 }, { .children_offset=38748, .match_offset=0 }, { .children_offset=38751, .match_offset=0 }, { .children_offset=0, .match_offset=80576 }, { .children_offset=38753, .match_offset=0 }, { .children_offset=38755, .match_offset=0 }, { .children_offset=38757, .match_offset=0 }, { .children_offset=0, .match_offset=30 }, { .children_offset=38759, .match_offset=0 }, { .children_offset=38761, .match_offset=0 }, { .children_offset=38763, .match_offset=0 }, { .children_offset=38765, .match_offset=0 }, { .children_offset=38767, .match_offset=0 }, { .children_offset=38769, .match_offset=0 }, { .children_offset=0, .match_offset=58465 }, { .children_offset=38771, .match_offset=0 }, { .children_offset=38773, .match_offset=0 }, { .children_offset=38775, .match_offset=0 }, { .children_offset=38778, .match_offset=0 }, { .children_offset=0, .match_offset=74360 }, { .children_offset=38780, .match_offset=0 }, { .children_offset=38782, .match_offset=0 }, { .children_offset=0, .match_offset=85415 }, { .children_offset=38784, .match_offset=114291 }, { .children_offset=38786, .match_offset=0 }, { .children_offset=38788, .match_offset=0 }, { .children_offset=38790, .match_offset=0 }, { .children_offset=38792, .match_offset=0 }, { .children_offset=38794, .match_offset=0 }, { .children_offset=38796, .match_offset=0 }, { .children_offset=38798, .match_offset=0 }, { .children_offset=38800, .match_offset=0 }, { .children_offset=38802, .match_offset=0 }, { .children_offset=0, .match_offset=123454 }, { .children_offset=0, .match_offset=28067 }, { .children_offset=38804, .match_offset=0 }, { .children_offset=38807, .match_offset=0 }, { .children_offset=38809, .match_offset=0 }, { .children_offset=38811, .match_offset=0 }, { .children_offset=38813, .match_offset=0 }, { .children_offset=38815, .match_offset=0 }, { .children_offset=0, .match_offset=27734 }, { .children_offset=38817, .match_offset=0 }, { .children_offset=38819, .match_offset=0 }, { .children_offset=38821, .match_offset=0 }, { .children_offset=38823, .match_offset=0 }, { .children_offset=0, .match_offset=21394 }, { .children_offset=38825, .match_offset=1151 }, { .children_offset=38828, .match_offset=0 }, { .children_offset=38832, .match_offset=134237 }, { .children_offset=38834, .match_offset=0 }, { .children_offset=0, .match_offset=109251 }, { .children_offset=38836, .match_offset=0 }, { .children_offset=38838, .match_offset=0 }, { .children_offset=38840, .match_offset=0 }, { .children_offset=0, .match_offset=89205 }, { .children_offset=38842, .match_offset=0 }, { .children_offset=38844, .match_offset=0 }, { .children_offset=38846, .match_offset=0 }, { .children_offset=38848, .match_offset=0 }, { .children_offset=38850, .match_offset=0 }, { .children_offset=0, .match_offset=1151 }, { .children_offset=38852, .match_offset=0 }, { .children_offset=38854, .match_offset=0 }, { .children_offset=38856, .match_offset=0 }, { .children_offset=38858, .match_offset=22137 }, { .children_offset=38860, .match_offset=0 }, { .children_offset=0, .match_offset=123796 }, { .children_offset=0, .match_offset=62664 }, { .children_offset=0, .match_offset=69420 }, { .children_offset=0, .match_offset=55694 }, { .children_offset=38864, .match_offset=133651 }, { .children_offset=0, .match_offset=26802 }, { .children_offset=38867, .match_offset=0 }, { .children_offset=0, .match_offset=45094 }, { .children_offset=38869, .match_offset=0 }, { .children_offset=38871, .match_offset=0 }, { .children_offset=38873, .match_offset=0 }, { .children_offset=0, .match_offset=63720 }, { .children_offset=38875, .match_offset=0 }, { .children_offset=38879, .match_offset=0 }, { .children_offset=0, .match_offset=84926 }, { .children_offset=38883, .match_offset=0 }, { .children_offset=38885, .match_offset=0 }, { .children_offset=38887, .match_offset=0 }, { .children_offset=38889, .match_offset=14837 }, { .children_offset=38891, .match_offset=0 }, { .children_offset=0, .match_offset=56662 }, { .children_offset=38893, .match_offset=0 }, { .children_offset=38895, .match_offset=0 }, { .children_offset=0, .match_offset=5578 }, { .children_offset=38897, .match_offset=0 }, { .children_offset=38899, .match_offset=0 }, { .children_offset=38901, .match_offset=0 }, { .children_offset=0, .match_offset=5231 }, { .children_offset=38903, .match_offset=0 }, { .children_offset=38906, .match_offset=0 }, { .children_offset=38908, .match_offset=0 }, { .children_offset=38910, .match_offset=0 }, { .children_offset=0, .match_offset=123142 }, { .children_offset=38912, .match_offset=0 }, { .children_offset=38914, .match_offset=0 }, { .children_offset=38916, .match_offset=0 }, { .children_offset=0, .match_offset=5581 }, { .children_offset=38918, .match_offset=0 }, { .children_offset=38922, .match_offset=0 }, { .children_offset=38924, .match_offset=0 }, { .children_offset=0, .match_offset=48194 }, { .children_offset=38926, .match_offset=0 }, { .children_offset=38928, .match_offset=0 }, { .children_offset=38930, .match_offset=0 }, { .children_offset=38932, .match_offset=0 }, { .children_offset=0, .match_offset=53629 }, { .children_offset=0, .match_offset=118581 }, { .children_offset=38934, .match_offset=131227 }, { .children_offset=38936, .match_offset=0 }, { .children_offset=38938, .match_offset=0 }, { .children_offset=38940, .match_offset=0 }, { .children_offset=38942, .match_offset=0 }, { .children_offset=0, .match_offset=40160 }, { .children_offset=38944, .match_offset=129970 }, { .children_offset=0, .match_offset=73848 }, { .children_offset=38950, .match_offset=0 }, { .children_offset=38953, .match_offset=0 }, { .children_offset=38955, .match_offset=53947 }, { .children_offset=38957, .match_offset=0 }, { .children_offset=0, .match_offset=129931 }, { .children_offset=38959, .match_offset=0 }, { .children_offset=38961, .match_offset=0 }, { .children_offset=38963, .match_offset=0 }, { .children_offset=38965, .match_offset=0 }, { .children_offset=38967, .match_offset=0 }, { .children_offset=0, .match_offset=123774 }, { .children_offset=38969, .match_offset=33806 }, { .children_offset=0, .match_offset=16309 }, { .children_offset=38971, .match_offset=0 }, { .children_offset=38973, .match_offset=0 }, { .children_offset=38975, .match_offset=0 }, { .children_offset=38977, .match_offset=0 }, { .children_offset=38979, .match_offset=0 }, { .children_offset=38981, .match_offset=0 }, { .children_offset=38983, .match_offset=0 }, { .children_offset=0, .match_offset=64438 }, { .children_offset=38985, .match_offset=0 }, { .children_offset=38987, .match_offset=0 }, { .children_offset=38989, .match_offset=0 }, { .children_offset=38991, .match_offset=0 }, { .children_offset=38993, .match_offset=0 }, { .children_offset=0, .match_offset=27575 }, { .children_offset=38995, .match_offset=0 }, { .children_offset=38997, .match_offset=0 }, { .children_offset=39000, .match_offset=0 }, { .children_offset=39002, .match_offset=0 }, { .children_offset=0, .match_offset=109614 }, { .children_offset=39004, .match_offset=0 }, { .children_offset=39006, .match_offset=0 }, { .children_offset=39008, .match_offset=0 }, { .children_offset=39010, .match_offset=0 }, { .children_offset=0, .match_offset=33551 }, { .children_offset=39012, .match_offset=0 }, { .children_offset=39019, .match_offset=4827 }, { .children_offset=39021, .match_offset=0 }, { .children_offset=39023, .match_offset=0 }, { .children_offset=39025, .match_offset=0 }, { .children_offset=39027, .match_offset=0 }, { .children_offset=39029, .match_offset=67338 }, { .children_offset=39031, .match_offset=0 }, { .children_offset=39033, .match_offset=0 }, { .children_offset=39035, .match_offset=0 }, { .children_offset=39037, .match_offset=0 }, { .children_offset=39039, .match_offset=0 }, { .children_offset=39041, .match_offset=0 }, { .children_offset=0, .match_offset=27160 }, { .children_offset=39043, .match_offset=0 }, { .children_offset=39046, .match_offset=0 }, { .children_offset=39048, .match_offset=0 }, { .children_offset=39050, .match_offset=0 }, { .children_offset=39052, .match_offset=0 }, { .children_offset=0, .match_offset=86781 }, { .children_offset=39054, .match_offset=0 }, { .children_offset=39056, .match_offset=0 }, { .children_offset=39058, .match_offset=0 }, { .children_offset=39060, .match_offset=0 }, { .children_offset=39062, .match_offset=0 }, { .children_offset=0, .match_offset=45915 }, { .children_offset=39064, .match_offset=0 }, { .children_offset=39067, .match_offset=0 }, { .children_offset=39069, .match_offset=0 }, { .children_offset=39071, .match_offset=0 }, { .children_offset=39073, .match_offset=0 }, { .children_offset=39075, .match_offset=0 }, { .children_offset=0, .match_offset=44727 }, { .children_offset=39077, .match_offset=0 }, { .children_offset=39079, .match_offset=0 }, { .children_offset=39081, .match_offset=0 }, { .children_offset=0, .match_offset=43964 }, { .children_offset=39083, .match_offset=0 }, { .children_offset=39085, .match_offset=0 }, { .children_offset=39087, .match_offset=0 }, { .children_offset=39089, .match_offset=0 }, { .children_offset=0, .match_offset=89843 }, { .children_offset=39091, .match_offset=22571 }, { .children_offset=39093, .match_offset=0 }, { .children_offset=39096, .match_offset=0 }, { .children_offset=39098, .match_offset=0 }, { .children_offset=39100, .match_offset=0 }, { .children_offset=39102, .match_offset=0 }, { .children_offset=0, .match_offset=1920 }, { .children_offset=39104, .match_offset=0 }, { .children_offset=39106, .match_offset=0 }, { .children_offset=0, .match_offset=16882 }, { .children_offset=39108, .match_offset=0 }, { .children_offset=39110, .match_offset=0 }, { .children_offset=39112, .match_offset=0 }, { .children_offset=39114, .match_offset=0 }, { .children_offset=39116, .match_offset=0 }, { .children_offset=0, .match_offset=100962 }, { .children_offset=39118, .match_offset=0 }, { .children_offset=39122, .match_offset=0 }, { .children_offset=39124, .match_offset=0 }, { .children_offset=0, .match_offset=70787 }, { .children_offset=39126, .match_offset=0 }, { .children_offset=39129, .match_offset=0 }, { .children_offset=39131, .match_offset=0 }, { .children_offset=0, .match_offset=11057 }, { .children_offset=39133, .match_offset=0 }, { .children_offset=39135, .match_offset=0 }, { .children_offset=39137, .match_offset=0 }, { .children_offset=39139, .match_offset=0 }, { .children_offset=0, .match_offset=42342 }, { .children_offset=39141, .match_offset=0 }, { .children_offset=39143, .match_offset=0 }, { .children_offset=0, .match_offset=102631 }, { .children_offset=39145, .match_offset=132134 }, { .children_offset=0, .match_offset=78977 }, { .children_offset=39147, .match_offset=0 }, { .children_offset=39152, .match_offset=0 }, { .children_offset=39154, .match_offset=0 }, { .children_offset=39156, .match_offset=0 }, { .children_offset=39158, .match_offset=65559 }, { .children_offset=39162, .match_offset=109618 }, { .children_offset=39164, .match_offset=0 }, { .children_offset=39166, .match_offset=0 }, { .children_offset=39168, .match_offset=0 }, { .children_offset=39170, .match_offset=0 }, { .children_offset=39172, .match_offset=0 }, { .children_offset=0, .match_offset=60735 }, { .children_offset=39174, .match_offset=0 }, { .children_offset=39177, .match_offset=0 }, { .children_offset=39179, .match_offset=0 }, { .children_offset=39181, .match_offset=0 }, { .children_offset=39183, .match_offset=0 }, { .children_offset=39185, .match_offset=0 }, { .children_offset=0, .match_offset=129312 }, { .children_offset=39187, .match_offset=0 }, { .children_offset=39189, .match_offset=0 }, { .children_offset=39191, .match_offset=0 }, { .children_offset=39193, .match_offset=0 }, { .children_offset=39195, .match_offset=0 }, { .children_offset=39197, .match_offset=0 }, { .children_offset=39199, .match_offset=0 }, { .children_offset=39201, .match_offset=0 }, { .children_offset=39203, .match_offset=0 }, { .children_offset=0, .match_offset=85365 }, { .children_offset=39205, .match_offset=0 }, { .children_offset=39207, .match_offset=0 }, { .children_offset=39209, .match_offset=0 }, { .children_offset=39211, .match_offset=0 }, { .children_offset=39213, .match_offset=0 }, { .children_offset=39215, .match_offset=0 }, { .children_offset=39217, .match_offset=0 }, { .children_offset=39219, .match_offset=0 }, { .children_offset=39221, .match_offset=0 }, { .children_offset=39223, .match_offset=0 }, { .children_offset=39225, .match_offset=0 }, { .children_offset=39227, .match_offset=0 }, { .children_offset=0, .match_offset=7750 }, { .children_offset=39229, .match_offset=0 }, { .children_offset=0, .match_offset=129986 }, { .children_offset=39231, .match_offset=0 }, { .children_offset=0, .match_offset=42121 }, { .children_offset=39233, .match_offset=0 }, { .children_offset=39235, .match_offset=0 }, { .children_offset=39238, .match_offset=0 }, { .children_offset=39240, .match_offset=0 }, { .children_offset=39242, .match_offset=0 }, { .children_offset=39244, .match_offset=0 }, { .children_offset=0, .match_offset=25592 }, { .children_offset=39246, .match_offset=0 }, { .children_offset=39248, .match_offset=0 }, { .children_offset=39250, .match_offset=0 }, { .children_offset=0, .match_offset=61535 }, { .children_offset=0, .match_offset=32992 }, { .children_offset=39252, .match_offset=0 }, { .children_offset=39256, .match_offset=0 }, { .children_offset=39258, .match_offset=0 }, { .children_offset=39260, .match_offset=0 }, { .children_offset=0, .match_offset=28241 }, { .children_offset=39262, .match_offset=0 }, { .children_offset=39264, .match_offset=0 }, { .children_offset=39266, .match_offset=0 }, { .children_offset=0, .match_offset=133541 }, { .children_offset=0, .match_offset=46191 }, { .children_offset=39268, .match_offset=0 }, { .children_offset=39270, .match_offset=0 }, { .children_offset=39273, .match_offset=123484 }, { .children_offset=0, .match_offset=33696 }, { .children_offset=39275, .match_offset=0 }, { .children_offset=39277, .match_offset=0 }, { .children_offset=39279, .match_offset=0 }, { .children_offset=0, .match_offset=123511 }, { .children_offset=39281, .match_offset=90151 }, { .children_offset=39285, .match_offset=58801 }, { .children_offset=39287, .match_offset=58857 }, { .children_offset=0, .match_offset=26878 }, { .children_offset=39290, .match_offset=115794 }, { .children_offset=0, .match_offset=10968 }, { .children_offset=39292, .match_offset=0 }, { .children_offset=39294, .match_offset=0 }, { .children_offset=39296, .match_offset=0 }, { .children_offset=39298, .match_offset=0 }, { .children_offset=39300, .match_offset=0 }, { .children_offset=39302, .match_offset=0 }, { .children_offset=39304, .match_offset=0 }, { .children_offset=0, .match_offset=133229 }, { .children_offset=39306, .match_offset=119663 }, { .children_offset=39309, .match_offset=0 }, { .children_offset=39311, .match_offset=0 }, { .children_offset=0, .match_offset=38900 }, { .children_offset=0, .match_offset=78476 }, { .children_offset=39313, .match_offset=13327 }, { .children_offset=39330, .match_offset=0 }, { .children_offset=0, .match_offset=90112 }, { .children_offset=0, .match_offset=33818 }, { .children_offset=0, .match_offset=62559 }, { .children_offset=0, .match_offset=67334 }, { .children_offset=0, .match_offset=89531 }, { .children_offset=0, .match_offset=37702 }, { .children_offset=0, .match_offset=31004 }, { .children_offset=39338, .match_offset=0 }, { .children_offset=0, .match_offset=23956 }, { .children_offset=39340, .match_offset=0 }, { .children_offset=39342, .match_offset=0 }, { .children_offset=39344, .match_offset=0 }, { .children_offset=0, .match_offset=25482 }, { .children_offset=39346, .match_offset=0 }, { .children_offset=39349, .match_offset=12421 }, { .children_offset=0, .match_offset=38964 }, { .children_offset=39351, .match_offset=0 }, { .children_offset=39353, .match_offset=0 }, { .children_offset=39355, .match_offset=0 }, { .children_offset=39357, .match_offset=0 }, { .children_offset=0, .match_offset=34176 }, { .children_offset=39359, .match_offset=0 }, { .children_offset=0, .match_offset=72852 }, { .children_offset=0, .match_offset=103112 }, { .children_offset=39363, .match_offset=0 }, { .children_offset=39365, .match_offset=38389 }, { .children_offset=39367, .match_offset=0 }, { .children_offset=39377, .match_offset=0 }, { .children_offset=39379, .match_offset=0 }, { .children_offset=39381, .match_offset=0 }, { .children_offset=39383, .match_offset=0 }, { .children_offset=0, .match_offset=116092 }, { .children_offset=39385, .match_offset=0 }, { .children_offset=39387, .match_offset=0 }, { .children_offset=39389, .match_offset=0 }, { .children_offset=39391, .match_offset=0 }, { .children_offset=0, .match_offset=74117 }, { .children_offset=39393, .match_offset=0 }, { .children_offset=39397, .match_offset=0 }, { .children_offset=39399, .match_offset=0 }, { .children_offset=39401, .match_offset=0 }, { .children_offset=39403, .match_offset=0 }, { .children_offset=39405, .match_offset=0 }, { .children_offset=39407, .match_offset=0 }, { .children_offset=39409, .match_offset=0 }, { .children_offset=39411, .match_offset=0 }, { .children_offset=39413, .match_offset=0 }, { .children_offset=39415, .match_offset=0 }, { .children_offset=39417, .match_offset=0 }, { .children_offset=0, .match_offset=26828 }, { .children_offset=39419, .match_offset=0 }, { .children_offset=39421, .match_offset=0 }, { .children_offset=39423, .match_offset=0 }, { .children_offset=39425, .match_offset=0 }, { .children_offset=39427, .match_offset=0 }, { .children_offset=0, .match_offset=113075 }, { .children_offset=39429, .match_offset=0 }, { .children_offset=39431, .match_offset=0 }, { .children_offset=39433, .match_offset=0 }, { .children_offset=39435, .match_offset=0 }, { .children_offset=39437, .match_offset=89510 }, { .children_offset=39439, .match_offset=0 }, { .children_offset=39442, .match_offset=0 }, { .children_offset=39444, .match_offset=0 }, { .children_offset=39446, .match_offset=0 }, { .children_offset=39448, .match_offset=0 }, { .children_offset=0, .match_offset=68443 }, { .children_offset=39450, .match_offset=0 }, { .children_offset=39452, .match_offset=0 }, { .children_offset=39454, .match_offset=0 }, { .children_offset=0, .match_offset=48462 }, { .children_offset=39456, .match_offset=0 }, { .children_offset=39458, .match_offset=0 }, { .children_offset=39460, .match_offset=0 }, { .children_offset=39462, .match_offset=0 }, { .children_offset=39464, .match_offset=133319 }, { .children_offset=39466, .match_offset=0 }, { .children_offset=39470, .match_offset=0 }, { .children_offset=39472, .match_offset=0 }, { .children_offset=39474, .match_offset=0 }, { .children_offset=39476, .match_offset=0 }, { .children_offset=0, .match_offset=63813 }, { .children_offset=39478, .match_offset=0 }, { .children_offset=39480, .match_offset=0 }, { .children_offset=39482, .match_offset=0 }, { .children_offset=39484, .match_offset=0 }, { .children_offset=39486, .match_offset=0 }, { .children_offset=0, .match_offset=1521 }, { .children_offset=39488, .match_offset=0 }, { .children_offset=39490, .match_offset=0 }, { .children_offset=39492, .match_offset=0 }, { .children_offset=0, .match_offset=25906 }, { .children_offset=39494, .match_offset=0 }, { .children_offset=39496, .match_offset=0 }, { .children_offset=39498, .match_offset=0 }, { .children_offset=39500, .match_offset=0 }, { .children_offset=0, .match_offset=15459 }, { .children_offset=39502, .match_offset=0 }, { .children_offset=39506, .match_offset=0 }, { .children_offset=39508, .match_offset=0 }, { .children_offset=39510, .match_offset=0 }, { .children_offset=39512, .match_offset=0 }, { .children_offset=39514, .match_offset=0 }, { .children_offset=0, .match_offset=29994 }, { .children_offset=39516, .match_offset=0 }, { .children_offset=39518, .match_offset=0 }, { .children_offset=39520, .match_offset=0 }, { .children_offset=39522, .match_offset=0 }, { .children_offset=39524, .match_offset=0 }, { .children_offset=0, .match_offset=58459 }, { .children_offset=39526, .match_offset=0 }, { .children_offset=39528, .match_offset=0 }, { .children_offset=39530, .match_offset=0 }, { .children_offset=39532, .match_offset=15969 }, { .children_offset=39534, .match_offset=0 }, { .children_offset=39539, .match_offset=0 }, { .children_offset=39541, .match_offset=0 }, { .children_offset=39543, .match_offset=0 }, { .children_offset=39545, .match_offset=0 }, { .children_offset=0, .match_offset=38124 }, { .children_offset=39547, .match_offset=0 }, { .children_offset=39549, .match_offset=0 }, { .children_offset=39551, .match_offset=0 }, { .children_offset=39553, .match_offset=0 }, { .children_offset=39555, .match_offset=0 }, { .children_offset=39557, .match_offset=0 }, { .children_offset=0, .match_offset=74180 }, { .children_offset=39559, .match_offset=0 }, { .children_offset=39561, .match_offset=0 }, { .children_offset=39563, .match_offset=0 }, { .children_offset=0, .match_offset=113621 }, { .children_offset=39565, .match_offset=0 }, { .children_offset=39567, .match_offset=0 }, { .children_offset=39569, .match_offset=0 }, { .children_offset=39571, .match_offset=0 }, { .children_offset=39573, .match_offset=0 }, { .children_offset=0, .match_offset=14371 }, { .children_offset=39575, .match_offset=0 }, { .children_offset=39578, .match_offset=0 }, { .children_offset=39580, .match_offset=0 }, { .children_offset=0, .match_offset=84856 }, { .children_offset=39582, .match_offset=0 }, { .children_offset=39584, .match_offset=0 }, { .children_offset=39586, .match_offset=0 }, { .children_offset=39588, .match_offset=0 }, { .children_offset=39593, .match_offset=0 }, { .children_offset=39595, .match_offset=0 }, { .children_offset=39597, .match_offset=0 }, { .children_offset=39599, .match_offset=0 }, { .children_offset=39601, .match_offset=0 }, { .children_offset=0, .match_offset=20400 }, { .children_offset=39603, .match_offset=0 }, { .children_offset=39605, .match_offset=0 }, { .children_offset=39607, .match_offset=0 }, { .children_offset=39609, .match_offset=0 }, { .children_offset=0, .match_offset=4958 }, { .children_offset=39611, .match_offset=0 }, { .children_offset=39613, .match_offset=0 }, { .children_offset=39615, .match_offset=0 }, { .children_offset=0, .match_offset=114622 }, { .children_offset=39617, .match_offset=0 }, { .children_offset=39619, .match_offset=0 }, { .children_offset=39621, .match_offset=0 }, { .children_offset=39623, .match_offset=0 }, { .children_offset=39625, .match_offset=0 }, { .children_offset=0, .match_offset=108582 }, { .children_offset=39627, .match_offset=0 }, { .children_offset=39630, .match_offset=0 }, { .children_offset=39632, .match_offset=0 }, { .children_offset=39634, .match_offset=0 }, { .children_offset=39636, .match_offset=0 }, { .children_offset=39638, .match_offset=0 }, { .children_offset=0, .match_offset=122566 }, { .children_offset=39640, .match_offset=0 }, { .children_offset=39642, .match_offset=0 }, { .children_offset=39644, .match_offset=0 }, { .children_offset=39646, .match_offset=0 }, { .children_offset=39648, .match_offset=61011 }, { .children_offset=39650, .match_offset=0 }, { .children_offset=39652, .match_offset=0 }, { .children_offset=39654, .match_offset=0 }, { .children_offset=39656, .match_offset=0 }, { .children_offset=39658, .match_offset=0 }, { .children_offset=0, .match_offset=77332 }, { .children_offset=39660, .match_offset=0 }, { .children_offset=39662, .match_offset=0 }, { .children_offset=39665, .match_offset=0 }, { .children_offset=39667, .match_offset=0 }, { .children_offset=39669, .match_offset=0 }, { .children_offset=39671, .match_offset=0 }, { .children_offset=39673, .match_offset=0 }, { .children_offset=39675, .match_offset=0 }, { .children_offset=39677, .match_offset=0 }, { .children_offset=39679, .match_offset=0 }, { .children_offset=39681, .match_offset=90188 }, { .children_offset=39683, .match_offset=0 }, { .children_offset=39685, .match_offset=0 }, { .children_offset=39687, .match_offset=0 }, { .children_offset=39689, .match_offset=0 }, { .children_offset=39691, .match_offset=0 }, { .children_offset=0, .match_offset=66318 }, { .children_offset=39693, .match_offset=0 }, { .children_offset=39695, .match_offset=0 }, { .children_offset=39697, .match_offset=0 }, { .children_offset=39699, .match_offset=0 }, { .children_offset=39701, .match_offset=0 }, { .children_offset=0, .match_offset=76973 }, { .children_offset=39703, .match_offset=0 }, { .children_offset=39705, .match_offset=0 }, { .children_offset=0, .match_offset=55956 }, { .children_offset=39707, .match_offset=0 }, { .children_offset=39710, .match_offset=0 }, { .children_offset=39712, .match_offset=65857 }, { .children_offset=39726, .match_offset=0 }, { .children_offset=39733, .match_offset=0 }, { .children_offset=39735, .match_offset=0 }, { .children_offset=39737, .match_offset=0 }, { .children_offset=39739, .match_offset=0 }, { .children_offset=39741, .match_offset=0 }, { .children_offset=0, .match_offset=56834 }, { .children_offset=39743, .match_offset=0 }, { .children_offset=39745, .match_offset=0 }, { .children_offset=39747, .match_offset=0 }, { .children_offset=39749, .match_offset=111482 }, { .children_offset=39751, .match_offset=0 }, { .children_offset=0, .match_offset=20415 }, { .children_offset=39753, .match_offset=0 }, { .children_offset=39755, .match_offset=0 }, { .children_offset=39757, .match_offset=0 }, { .children_offset=39759, .match_offset=0 }, { .children_offset=39761, .match_offset=0 }, { .children_offset=39763, .match_offset=0 }, { .children_offset=0, .match_offset=14305 }, { .children_offset=39765, .match_offset=0 }, { .children_offset=39767, .match_offset=0 }, { .children_offset=39769, .match_offset=0 }, { .children_offset=39771, .match_offset=0 }, { .children_offset=39773, .match_offset=0 }, { .children_offset=39775, .match_offset=0 }, { .children_offset=39777, .match_offset=0 }, { .children_offset=0, .match_offset=34590 }, { .children_offset=39779, .match_offset=0 }, { .children_offset=39782, .match_offset=0 }, { .children_offset=39784, .match_offset=0 }, { .children_offset=39786, .match_offset=0 }, { .children_offset=39789, .match_offset=0 }, { .children_offset=0, .match_offset=123346 }, { .children_offset=39791, .match_offset=0 }, { .children_offset=39793, .match_offset=0 }, { .children_offset=39795, .match_offset=0 }, { .children_offset=0, .match_offset=20504 }, { .children_offset=39797, .match_offset=0 }, { .children_offset=39799, .match_offset=0 }, { .children_offset=0, .match_offset=32846 }, { .children_offset=39801, .match_offset=0 }, { .children_offset=39803, .match_offset=0 }, { .children_offset=39805, .match_offset=0 }, { .children_offset=39807, .match_offset=0 }, { .children_offset=39809, .match_offset=0 }, { .children_offset=39811, .match_offset=0 }, { .children_offset=0, .match_offset=29888 }, { .children_offset=39813, .match_offset=0 }, { .children_offset=39816, .match_offset=0 }, { .children_offset=39818, .match_offset=0 }, { .children_offset=39820, .match_offset=0 }, { .children_offset=39822, .match_offset=0 }, { .children_offset=39824, .match_offset=0 }, { .children_offset=39826, .match_offset=0 }, { .children_offset=39828, .match_offset=0 }, { .children_offset=39830, .match_offset=0 }, { .children_offset=39832, .match_offset=0 }, { .children_offset=39834, .match_offset=0 }, { .children_offset=0, .match_offset=121996 }, { .children_offset=39836, .match_offset=0 }, { .children_offset=39838, .match_offset=0 }, { .children_offset=39840, .match_offset=0 }, { .children_offset=39842, .match_offset=22495 }, { .children_offset=39846, .match_offset=0 }, { .children_offset=39848, .match_offset=0 }, { .children_offset=0, .match_offset=122535 }, { .children_offset=39850, .match_offset=0 }, { .children_offset=39852, .match_offset=0 }, { .children_offset=39854, .match_offset=0 }, { .children_offset=39856, .match_offset=0 }, { .children_offset=39858, .match_offset=0 }, { .children_offset=39860, .match_offset=0 }, { .children_offset=39862, .match_offset=0 }, { .children_offset=39864, .match_offset=0 }, { .children_offset=0, .match_offset=78933 }, { .children_offset=39866, .match_offset=0 }, { .children_offset=39868, .match_offset=0 }, { .children_offset=39870, .match_offset=0 }, { .children_offset=0, .match_offset=77818 }, { .children_offset=39872, .match_offset=0 }, { .children_offset=39874, .match_offset=0 }, { .children_offset=39876, .match_offset=0 }, { .children_offset=39878, .match_offset=0 }, { .children_offset=39880, .match_offset=0 }, { .children_offset=39882, .match_offset=0 }, { .children_offset=0, .match_offset=14903 }, { .children_offset=39884, .match_offset=0 }, { .children_offset=39886, .match_offset=0 }, { .children_offset=39889, .match_offset=0 }, { .children_offset=39891, .match_offset=0 }, { .children_offset=39893, .match_offset=0 }, { .children_offset=39895, .match_offset=0 }, { .children_offset=39897, .match_offset=0 }, { .children_offset=39899, .match_offset=0 }, { .children_offset=39901, .match_offset=0 }, { .children_offset=39903, .match_offset=0 }, { .children_offset=39905, .match_offset=0 }, { .children_offset=39907, .match_offset=0 }, { .children_offset=0, .match_offset=25594 }, { .children_offset=39909, .match_offset=0 }, { .children_offset=39911, .match_offset=0 }, { .children_offset=39914, .match_offset=0 }, { .children_offset=39916, .match_offset=0 }, { .children_offset=39918, .match_offset=0 }, { .children_offset=39920, .match_offset=0 }, { .children_offset=39922, .match_offset=0 }, { .children_offset=39924, .match_offset=0 }, { .children_offset=39926, .match_offset=0 }, { .children_offset=39928, .match_offset=0 }, { .children_offset=0, .match_offset=77339 }, { .children_offset=39930, .match_offset=0 }, { .children_offset=39932, .match_offset=0 }, { .children_offset=39934, .match_offset=0 }, { .children_offset=39936, .match_offset=0 }, { .children_offset=39938, .match_offset=0 }, { .children_offset=39940, .match_offset=58877 }, { .children_offset=39942, .match_offset=0 }, { .children_offset=39944, .match_offset=0 }, { .children_offset=0, .match_offset=130101 }, { .children_offset=39946, .match_offset=0 }, { .children_offset=39948, .match_offset=0 }, { .children_offset=39950, .match_offset=0 }, { .children_offset=39952, .match_offset=0 }, { .children_offset=0, .match_offset=133541 }, { .children_offset=39954, .match_offset=0 }, { .children_offset=39956, .match_offset=0 }, { .children_offset=39959, .match_offset=0 }, { .children_offset=0, .match_offset=38904 }, { .children_offset=39961, .match_offset=0 }, { .children_offset=39963, .match_offset=0 }, { .children_offset=39965, .match_offset=0 }, { .children_offset=39967, .match_offset=0 }, { .children_offset=39969, .match_offset=0 }, { .children_offset=39972, .match_offset=0 }, { .children_offset=39974, .match_offset=0 }, { .children_offset=39976, .match_offset=0 }, { .children_offset=0, .match_offset=26878 }, { .children_offset=39978, .match_offset=0 }, { .children_offset=0, .match_offset=115794 }, { .children_offset=39980, .match_offset=0 }, { .children_offset=39982, .match_offset=0 }, { .children_offset=39984, .match_offset=0 }, { .children_offset=39986, .match_offset=0 }, { .children_offset=39989, .match_offset=0 }, { .children_offset=39991, .match_offset=0 }, { .children_offset=39993, .match_offset=0 }, { .children_offset=39995, .match_offset=0 }, { .children_offset=39997, .match_offset=0 }, { .children_offset=0, .match_offset=78933 }, { .children_offset=39999, .match_offset=0 }, { .children_offset=40001, .match_offset=0 }, { .children_offset=40003, .match_offset=0 }, { .children_offset=40005, .match_offset=0 }, { .children_offset=40007, .match_offset=0 }, { .children_offset=40009, .match_offset=0 }, { .children_offset=40011, .match_offset=0 }, { .children_offset=0, .match_offset=103553 }, { .children_offset=40013, .match_offset=0 }, { .children_offset=40015, .match_offset=0 }, { .children_offset=40017, .match_offset=0 }, { .children_offset=40019, .match_offset=0 }, { .children_offset=40021, .match_offset=0 }, { .children_offset=40023, .match_offset=0 }, { .children_offset=40025, .match_offset=0 }, { .children_offset=40027, .match_offset=0 }, { .children_offset=40029, .match_offset=0 }, { .children_offset=40031, .match_offset=0 }, { .children_offset=0, .match_offset=118225 }, { .children_offset=40033, .match_offset=0 }, { .children_offset=40035, .match_offset=0 }, { .children_offset=40037, .match_offset=0 }, { .children_offset=40039, .match_offset=0 }, { .children_offset=40041, .match_offset=0 }, { .children_offset=40043, .match_offset=0 }, { .children_offset=40045, .match_offset=0 }, { .children_offset=40047, .match_offset=0 }, { .children_offset=40049, .match_offset=0 }, { .children_offset=0, .match_offset=135002 }, { .children_offset=40051, .match_offset=0 }, { .children_offset=40055, .match_offset=0 }, { .children_offset=40057, .match_offset=57954 }, { .children_offset=40060, .match_offset=0 }, { .children_offset=40062, .match_offset=0 }, { .children_offset=40064, .match_offset=0 }, { .children_offset=40066, .match_offset=0 }, { .children_offset=0, .match_offset=77773 }, { .children_offset=40068, .match_offset=0 }, { .children_offset=40070, .match_offset=0 }, { .children_offset=40072, .match_offset=0 }, { .children_offset=40074, .match_offset=0 }, { .children_offset=40076, .match_offset=0 }, { .children_offset=0, .match_offset=116564 }, { .children_offset=40078, .match_offset=0 }, { .children_offset=40080, .match_offset=0 }, { .children_offset=40082, .match_offset=0 }, { .children_offset=40084, .match_offset=0 }, { .children_offset=40086, .match_offset=0 }, { .children_offset=40088, .match_offset=0 }, { .children_offset=40090, .match_offset=0 }, { .children_offset=40092, .match_offset=0 }, { .children_offset=0, .match_offset=117572 }, { .children_offset=40094, .match_offset=0 }, { .children_offset=40096, .match_offset=0 }, { .children_offset=40098, .match_offset=0 }, { .children_offset=40100, .match_offset=0 }, { .children_offset=40102, .match_offset=0 }, { .children_offset=40104, .match_offset=0 }, { .children_offset=40106, .match_offset=50229 }, { .children_offset=40109, .match_offset=0 }, { .children_offset=40111, .match_offset=0 }, { .children_offset=0, .match_offset=129320 }, { .children_offset=40113, .match_offset=0 }, { .children_offset=40115, .match_offset=0 }, { .children_offset=40117, .match_offset=0 }, { .children_offset=40119, .match_offset=0 }, { .children_offset=0, .match_offset=134184 }, { .children_offset=40121, .match_offset=0 }, { .children_offset=40123, .match_offset=0 }, { .children_offset=40127, .match_offset=0 }, { .children_offset=40129, .match_offset=0 }, { .children_offset=40131, .match_offset=0 }, { .children_offset=40133, .match_offset=0 }, { .children_offset=40135, .match_offset=0 }, { .children_offset=40137, .match_offset=0 }, { .children_offset=40139, .match_offset=0 }, { .children_offset=40141, .match_offset=0 }, { .children_offset=40143, .match_offset=0 }, { .children_offset=0, .match_offset=46691 }, { .children_offset=40145, .match_offset=0 }, { .children_offset=40147, .match_offset=0 }, { .children_offset=40149, .match_offset=0 }, { .children_offset=40151, .match_offset=0 }, { .children_offset=40153, .match_offset=0 }, { .children_offset=40155, .match_offset=0 }, { .children_offset=40157, .match_offset=0 }, { .children_offset=40159, .match_offset=0 }, { .children_offset=0, .match_offset=122657 }, { .children_offset=40161, .match_offset=0 }, { .children_offset=40163, .match_offset=0 }, { .children_offset=40165, .match_offset=0 }, { .children_offset=40167, .match_offset=0 }, { .children_offset=40169, .match_offset=0 }, { .children_offset=40171, .match_offset=37229 }, { .children_offset=40173, .match_offset=0 }, { .children_offset=40175, .match_offset=0 }, { .children_offset=0, .match_offset=55773 }, { .children_offset=40177, .match_offset=0 }, { .children_offset=40179, .match_offset=0 }, { .children_offset=40181, .match_offset=0 }, { .children_offset=40183, .match_offset=0 }, { .children_offset=40185, .match_offset=0 }, { .children_offset=40187, .match_offset=115794 }, { .children_offset=40189, .match_offset=0 }, { .children_offset=40191, .match_offset=0 }, { .children_offset=0, .match_offset=60773 }, { .children_offset=40193, .match_offset=0 }, { .children_offset=40195, .match_offset=0 }, { .children_offset=40197, .match_offset=0 }, { .children_offset=40199, .match_offset=0 }, { .children_offset=0, .match_offset=12799 }, { .children_offset=40201, .match_offset=0 }, { .children_offset=40203, .match_offset=0 }, { .children_offset=40205, .match_offset=0 }, { .children_offset=40207, .match_offset=0 }, { .children_offset=0, .match_offset=59023 }, { .children_offset=0, .match_offset=90642 }, { .children_offset=40209, .match_offset=0 }, { .children_offset=40211, .match_offset=0 }, { .children_offset=40213, .match_offset=0 }, { .children_offset=0, .match_offset=15491 }, { .children_offset=40215, .match_offset=2302 }, { .children_offset=40217, .match_offset=0 }, { .children_offset=40219, .match_offset=0 }, { .children_offset=0, .match_offset=124638 }, { .children_offset=40221, .match_offset=84846 }, { .children_offset=40224, .match_offset=0 }, { .children_offset=40226, .match_offset=0 }, { .children_offset=40228, .match_offset=0 }, { .children_offset=40230, .match_offset=0 }, { .children_offset=40232, .match_offset=0 }, { .children_offset=40234, .match_offset=0 }, { .children_offset=40236, .match_offset=0 }, { .children_offset=0, .match_offset=115695 }, { .children_offset=40238, .match_offset=80294 }, { .children_offset=40242, .match_offset=0 }, { .children_offset=0, .match_offset=69327 }, { .children_offset=40244, .match_offset=0 }, { .children_offset=40246, .match_offset=0 }, { .children_offset=0, .match_offset=63817 }, { .children_offset=0, .match_offset=111146 }, { .children_offset=40248, .match_offset=49336 }, { .children_offset=40250, .match_offset=0 }, { .children_offset=40252, .match_offset=0 }, { .children_offset=0, .match_offset=123838 }, { .children_offset=40254, .match_offset=0 }, { .children_offset=0, .match_offset=43679 }, { .children_offset=40256, .match_offset=0 }, { .children_offset=0, .match_offset=16340 }, { .children_offset=40259, .match_offset=0 }, { .children_offset=40261, .match_offset=0 }, { .children_offset=40263, .match_offset=133199 }, { .children_offset=40265, .match_offset=0 }, { .children_offset=40267, .match_offset=0 }, { .children_offset=40269, .match_offset=0 }, { .children_offset=40271, .match_offset=0 }, { .children_offset=40273, .match_offset=0 }, { .children_offset=0, .match_offset=61257 }, { .children_offset=40275, .match_offset=0 }, { .children_offset=40279, .match_offset=0 }, { .children_offset=0, .match_offset=115425 }, { .children_offset=40281, .match_offset=0 }, { .children_offset=40283, .match_offset=0 }, { .children_offset=40285, .match_offset=0 }, { .children_offset=0, .match_offset=29230 }, { .children_offset=40287, .match_offset=0 }, { .children_offset=40289, .match_offset=0 }, { .children_offset=0, .match_offset=25547 }, { .children_offset=40291, .match_offset=0 }, { .children_offset=40293, .match_offset=0 }, { .children_offset=0, .match_offset=114656 }, { .children_offset=40295, .match_offset=0 }, { .children_offset=40297, .match_offset=113734 }, { .children_offset=0, .match_offset=42126 }, { .children_offset=40299, .match_offset=0 }, { .children_offset=40303, .match_offset=0 }, { .children_offset=40305, .match_offset=0 }, { .children_offset=0, .match_offset=78933 }, { .children_offset=40307, .match_offset=0 }, { .children_offset=40309, .match_offset=0 }, { .children_offset=0, .match_offset=103553 }, { .children_offset=0, .match_offset=13392 }, { .children_offset=40311, .match_offset=0 }, { .children_offset=40314, .match_offset=0 }, { .children_offset=40316, .match_offset=0 }, { .children_offset=40318, .match_offset=0 }, { .children_offset=40320, .match_offset=78541 }, { .children_offset=40322, .match_offset=0 }, { .children_offset=40324, .match_offset=0 }, { .children_offset=40326, .match_offset=0 }, { .children_offset=0, .match_offset=78541 }, { .children_offset=0, .match_offset=30317 }, { .children_offset=40328, .match_offset=0 }, { .children_offset=40333, .match_offset=0 }, { .children_offset=0, .match_offset=12792 }, { .children_offset=40335, .match_offset=0 }, { .children_offset=40337, .match_offset=0 }, { .children_offset=0, .match_offset=74675 }, { .children_offset=40339, .match_offset=0 }, { .children_offset=40341, .match_offset=0 }, { .children_offset=0, .match_offset=46200 }, { .children_offset=40343, .match_offset=0 }, { .children_offset=40345, .match_offset=0 }, { .children_offset=40347, .match_offset=0 }, { .children_offset=0, .match_offset=12410 }, { .children_offset=40349, .match_offset=49920 }, { .children_offset=40367, .match_offset=0 }, { .children_offset=0, .match_offset=13057 }, { .children_offset=0, .match_offset=20547 }, { .children_offset=0, .match_offset=69092 }, { .children_offset=0, .match_offset=78494 }, { .children_offset=0, .match_offset=65465 }, { .children_offset=0, .match_offset=72341 }, { .children_offset=0, .match_offset=29242 }, { .children_offset=40374, .match_offset=89180 }, { .children_offset=40378, .match_offset=0 }, { .children_offset=0, .match_offset=48158 }, { .children_offset=40380, .match_offset=1519 }, { .children_offset=0, .match_offset=104046 }, { .children_offset=40382, .match_offset=0 }, { .children_offset=40384, .match_offset=0 }, { .children_offset=40386, .match_offset=0 }, { .children_offset=0, .match_offset=45840 }, { .children_offset=40388, .match_offset=0 }, { .children_offset=40392, .match_offset=0 }, { .children_offset=0, .match_offset=38541 }, { .children_offset=40394, .match_offset=0 }, { .children_offset=0, .match_offset=53633 }, { .children_offset=40396, .match_offset=0 }, { .children_offset=0, .match_offset=25594 }, { .children_offset=40398, .match_offset=124700 }, { .children_offset=40400, .match_offset=102907 }, { .children_offset=40402, .match_offset=0 }, { .children_offset=0, .match_offset=113104 }, { .children_offset=0, .match_offset=102612 }, { .children_offset=0, .match_offset=62347 }, { .children_offset=40404, .match_offset=0 }, { .children_offset=40406, .match_offset=0 }, { .children_offset=40408, .match_offset=0 }, { .children_offset=40410, .match_offset=0 }, { .children_offset=40412, .match_offset=0 }, { .children_offset=0, .match_offset=66262 }, { .children_offset=40414, .match_offset=0 }, { .children_offset=40416, .match_offset=45067 }, { .children_offset=40419, .match_offset=0 }, { .children_offset=40422, .match_offset=0 }, { .children_offset=40424, .match_offset=0 }, { .children_offset=40426, .match_offset=0 }, { .children_offset=0, .match_offset=110909 }, { .children_offset=0, .match_offset=123140 }, { .children_offset=40428, .match_offset=0 }, { .children_offset=40430, .match_offset=0 }, { .children_offset=0, .match_offset=111493 }, { .children_offset=40432, .match_offset=61073 }, { .children_offset=40434, .match_offset=0 }, { .children_offset=40436, .match_offset=74375 }, { .children_offset=40438, .match_offset=0 }, { .children_offset=40440, .match_offset=0 }, { .children_offset=0, .match_offset=33234 }, { .children_offset=40442, .match_offset=43280 }, { .children_offset=0, .match_offset=61103 }, { .children_offset=0, .match_offset=126373 }, { .children_offset=0, .match_offset=45090 }, { .children_offset=40448, .match_offset=0 }, { .children_offset=40450, .match_offset=0 }, { .children_offset=40452, .match_offset=0 }, { .children_offset=0, .match_offset=34714 }, { .children_offset=0, .match_offset=103559 }, { .children_offset=40454, .match_offset=84794 }, { .children_offset=40458, .match_offset=0 }, { .children_offset=0, .match_offset=26823 }, { .children_offset=0, .match_offset=72486 }, { .children_offset=40460, .match_offset=0 }, { .children_offset=40462, .match_offset=0 }, { .children_offset=0, .match_offset=66418 }, { .children_offset=40464, .match_offset=0 }, { .children_offset=40467, .match_offset=61133 }, { .children_offset=40469, .match_offset=0 }, { .children_offset=40471, .match_offset=0 }, { .children_offset=0, .match_offset=102349 }, { .children_offset=0, .match_offset=46731 }, { .children_offset=40473, .match_offset=60701 }, { .children_offset=40477, .match_offset=0 }, { .children_offset=40479, .match_offset=0 }, { .children_offset=40482, .match_offset=0 }, { .children_offset=0, .match_offset=53639 }, { .children_offset=40484, .match_offset=0 }, { .children_offset=40486, .match_offset=0 }, { .children_offset=40488, .match_offset=34120 }, { .children_offset=40491, .match_offset=0 }, { .children_offset=40494, .match_offset=0 }, { .children_offset=40496, .match_offset=0 }, { .children_offset=40498, .match_offset=0 }, { .children_offset=40500, .match_offset=0 }, { .children_offset=40502, .match_offset=0 }, { .children_offset=40504, .match_offset=0 }, { .children_offset=40506, .match_offset=0 }, { .children_offset=40508, .match_offset=0 }, { .children_offset=40510, .match_offset=0 }, { .children_offset=0, .match_offset=77050 }, { .children_offset=40512, .match_offset=0 }, { .children_offset=40514, .match_offset=0 }, { .children_offset=40516, .match_offset=0 }, { .children_offset=40518, .match_offset=0 }, { .children_offset=40520, .match_offset=0 }, { .children_offset=40522, .match_offset=0 }, { .children_offset=40524, .match_offset=0 }, { .children_offset=40526, .match_offset=0 }, { .children_offset=0, .match_offset=125259 }, { .children_offset=0, .match_offset=131509 }, { .children_offset=40528, .match_offset=0 }, { .children_offset=40530, .match_offset=0 }, { .children_offset=40532, .match_offset=0 }, { .children_offset=0, .match_offset=74309 }, { .children_offset=40534, .match_offset=0 }, { .children_offset=40536, .match_offset=0 }, { .children_offset=40538, .match_offset=0 }, { .children_offset=0, .match_offset=58535 }, { .children_offset=40540, .match_offset=0 }, { .children_offset=40542, .match_offset=0 }, { .children_offset=40544, .match_offset=58248 }, { .children_offset=40548, .match_offset=0 }, { .children_offset=40550, .match_offset=0 }, { .children_offset=40552, .match_offset=0 }, { .children_offset=40554, .match_offset=0 }, { .children_offset=40556, .match_offset=0 }, { .children_offset=40558, .match_offset=0 }, { .children_offset=0, .match_offset=134481 }, { .children_offset=40560, .match_offset=0 }, { .children_offset=0, .match_offset=81135 }, { .children_offset=40562, .match_offset=0 }, { .children_offset=40564, .match_offset=0 }, { .children_offset=40566, .match_offset=0 }, { .children_offset=40568, .match_offset=0 }, { .children_offset=40570, .match_offset=0 }, { .children_offset=40572, .match_offset=0 }, { .children_offset=0, .match_offset=50219 }, { .children_offset=40574, .match_offset=0 }, { .children_offset=40576, .match_offset=0 }, { .children_offset=40578, .match_offset=0 }, { .children_offset=40580, .match_offset=0 }, { .children_offset=0, .match_offset=123256 }, { .children_offset=0, .match_offset=113885 }, { .children_offset=40582, .match_offset=0 }, { .children_offset=40585, .match_offset=0 }, { .children_offset=40587, .match_offset=103787 }, { .children_offset=40589, .match_offset=0 }, { .children_offset=0, .match_offset=42613 }, { .children_offset=40591, .match_offset=0 }, { .children_offset=40593, .match_offset=0 }, { .children_offset=40595, .match_offset=0 }, { .children_offset=40597, .match_offset=0 }, { .children_offset=40599, .match_offset=0 }, { .children_offset=0, .match_offset=111397 }, { .children_offset=40601, .match_offset=72795 }, { .children_offset=40609, .match_offset=122303 }, { .children_offset=40612, .match_offset=0 }, { .children_offset=0, .match_offset=118225 }, { .children_offset=0, .match_offset=44414 }, { .children_offset=40614, .match_offset=135927 }, { .children_offset=0, .match_offset=26889 }, { .children_offset=0, .match_offset=113295 }, { .children_offset=0, .match_offset=89163 }, { .children_offset=0, .match_offset=22500 }, { .children_offset=40619, .match_offset=0 }, { .children_offset=40621, .match_offset=0 }, { .children_offset=40623, .match_offset=0 }, { .children_offset=40625, .match_offset=0 }, { .children_offset=40627, .match_offset=0 }, { .children_offset=40629, .match_offset=0 }, { .children_offset=40631, .match_offset=0 }, { .children_offset=40633, .match_offset=0 }, { .children_offset=0, .match_offset=35782 }, { .children_offset=40635, .match_offset=65392 }, { .children_offset=0, .match_offset=8864 }, { .children_offset=0, .match_offset=135835 }, { .children_offset=0, .match_offset=86298 }, { .children_offset=40639, .match_offset=0 }, { .children_offset=0, .match_offset=67662 }, { .children_offset=40641, .match_offset=82003 }, { .children_offset=40647, .match_offset=103569 }, { .children_offset=0, .match_offset=14519 }, { .children_offset=0, .match_offset=117590 }, { .children_offset=40649, .match_offset=79716 }, { .children_offset=0, .match_offset=16660 }, { .children_offset=0, .match_offset=116970 }, { .children_offset=0, .match_offset=5919 }, { .children_offset=40651, .match_offset=61028 }, { .children_offset=0, .match_offset=51133 }, { .children_offset=40656, .match_offset=111498 }, { .children_offset=0, .match_offset=114323 }, { .children_offset=0, .match_offset=34882 }, { .children_offset=0, .match_offset=48435 }, { .children_offset=40658, .match_offset=0 }, { .children_offset=40663, .match_offset=0 }, { .children_offset=40665, .match_offset=0 }, { .children_offset=40667, .match_offset=0 }, { .children_offset=0, .match_offset=85456 }, { .children_offset=40669, .match_offset=0 }, { .children_offset=0, .match_offset=25778 }, { .children_offset=0, .match_offset=122370 }, { .children_offset=40671, .match_offset=0 }, { .children_offset=0, .match_offset=126541 }, { .children_offset=40674, .match_offset=0 }, { .children_offset=40676, .match_offset=6273 }, { .children_offset=0, .match_offset=6273 }, { .children_offset=40678, .match_offset=0 }, { .children_offset=40684, .match_offset=0 }, { .children_offset=40686, .match_offset=0 }, { .children_offset=0, .match_offset=34137 }, { .children_offset=0, .match_offset=62557 }, { .children_offset=40688, .match_offset=0 }, { .children_offset=40691, .match_offset=0 }, { .children_offset=40693, .match_offset=0 }, { .children_offset=0, .match_offset=38655 }, { .children_offset=40695, .match_offset=0 }, { .children_offset=40697, .match_offset=0 }, { .children_offset=0, .match_offset=117572 }, { .children_offset=40699, .match_offset=0 }, { .children_offset=40701, .match_offset=0 }, { .children_offset=40703, .match_offset=0 }, { .children_offset=0, .match_offset=1073 }, { .children_offset=40705, .match_offset=0 }, { .children_offset=40707, .match_offset=15347 }, { .children_offset=0, .match_offset=134184 }, { .children_offset=0, .match_offset=24124 }, { .children_offset=40711, .match_offset=0 }, { .children_offset=40713, .match_offset=0 }, { .children_offset=40715, .match_offset=0 }, { .children_offset=0, .match_offset=84772 }, { .children_offset=40717, .match_offset=85908 }, { .children_offset=40736, .match_offset=0 }, { .children_offset=0, .match_offset=108749 }, { .children_offset=0, .match_offset=33496 }, { .children_offset=0, .match_offset=13142 }, { .children_offset=0, .match_offset=68985 }, { .children_offset=0, .match_offset=26471 }, { .children_offset=0, .match_offset=85902 }, { .children_offset=0, .match_offset=37266 }, { .children_offset=40743, .match_offset=123475 }, { .children_offset=40745, .match_offset=0 }, { .children_offset=0, .match_offset=70746 }, { .children_offset=40747, .match_offset=0 }, { .children_offset=40749, .match_offset=0 }, { .children_offset=40751, .match_offset=0 }, { .children_offset=40753, .match_offset=0 }, { .children_offset=40755, .match_offset=0 }, { .children_offset=40757, .match_offset=0 }, { .children_offset=0, .match_offset=46849 }, { .children_offset=0, .match_offset=103313 }, { .children_offset=40759, .match_offset=0 }, { .children_offset=40761, .match_offset=0 }, { .children_offset=0, .match_offset=10912 }, { .children_offset=40763, .match_offset=0 }, { .children_offset=0, .match_offset=81014 }, { .children_offset=40765, .match_offset=0 }, { .children_offset=40767, .match_offset=0 }, { .children_offset=40769, .match_offset=0 }, { .children_offset=40771, .match_offset=0 }, { .children_offset=40773, .match_offset=0 }, { .children_offset=0, .match_offset=103474 }, { .children_offset=40775, .match_offset=0 }, { .children_offset=40779, .match_offset=0 }, { .children_offset=0, .match_offset=10300 }, { .children_offset=40781, .match_offset=34876 }, { .children_offset=40785, .match_offset=0 }, { .children_offset=40787, .match_offset=0 }, { .children_offset=40789, .match_offset=0 }, { .children_offset=40791, .match_offset=0 }, { .children_offset=40793, .match_offset=0 }, { .children_offset=40795, .match_offset=0 }, { .children_offset=40797, .match_offset=0 }, { .children_offset=0, .match_offset=40880 }, { .children_offset=40799, .match_offset=0 }, { .children_offset=40801, .match_offset=0 }, { .children_offset=40803, .match_offset=0 }, { .children_offset=40805, .match_offset=0 }, { .children_offset=40807, .match_offset=0 }, { .children_offset=40809, .match_offset=0 }, { .children_offset=0, .match_offset=40880 }, { .children_offset=0, .match_offset=80613 }, { .children_offset=40811, .match_offset=0 }, { .children_offset=40813, .match_offset=0 }, { .children_offset=40815, .match_offset=0 }, { .children_offset=0, .match_offset=33797 }, { .children_offset=40817, .match_offset=60950 }, { .children_offset=40820, .match_offset=0 }, { .children_offset=0, .match_offset=81128 }, { .children_offset=0, .match_offset=22506 }, { .children_offset=40822, .match_offset=38581 }, { .children_offset=40826, .match_offset=0 }, { .children_offset=0, .match_offset=15349 }, { .children_offset=40828, .match_offset=0 }, { .children_offset=40831, .match_offset=0 }, { .children_offset=0, .match_offset=109907 }, { .children_offset=40833, .match_offset=0 }, { .children_offset=40835, .match_offset=0 }, { .children_offset=0, .match_offset=55489 }, { .children_offset=40837, .match_offset=0 }, { .children_offset=40839, .match_offset=0 }, { .children_offset=0, .match_offset=35340 }, { .children_offset=40841, .match_offset=46069 }, { .children_offset=0, .match_offset=123601 }, { .children_offset=0, .match_offset=60754 }, { .children_offset=40844, .match_offset=46782 }, { .children_offset=40847, .match_offset=0 }, { .children_offset=0, .match_offset=69076 }, { .children_offset=40849, .match_offset=0 }, { .children_offset=0, .match_offset=10877 }, { .children_offset=40851, .match_offset=16580 }, { .children_offset=0, .match_offset=118419 }, { .children_offset=40853, .match_offset=0 }, { .children_offset=0, .match_offset=9937 }, { .children_offset=40856, .match_offset=0 }, { .children_offset=40858, .match_offset=0 }, { .children_offset=40860, .match_offset=0 }, { .children_offset=0, .match_offset=130288 }, { .children_offset=0, .match_offset=46727 }, { .children_offset=40862, .match_offset=0 }, { .children_offset=40864, .match_offset=0 }, { .children_offset=40866, .match_offset=0 }, { .children_offset=40868, .match_offset=0 }, { .children_offset=0, .match_offset=110278 }, { .children_offset=0, .match_offset=49338 }, { .children_offset=40870, .match_offset=0 }, { .children_offset=40875, .match_offset=110384 }, { .children_offset=0, .match_offset=130089 }, { .children_offset=40878, .match_offset=0 }, { .children_offset=0, .match_offset=28587 }, { .children_offset=40880, .match_offset=88621 }, { .children_offset=0, .match_offset=72793 }, { .children_offset=40882, .match_offset=22606 }, { .children_offset=0, .match_offset=134483 }, { .children_offset=40884, .match_offset=73767 }, { .children_offset=0, .match_offset=27158 }, { .children_offset=0, .match_offset=6829 }, { .children_offset=40886, .match_offset=103455 }, { .children_offset=0, .match_offset=37185 }, { .children_offset=0, .match_offset=60002 }, { .children_offset=40893, .match_offset=34014 }, { .children_offset=0, .match_offset=133522 }, { .children_offset=0, .match_offset=114654 }, { .children_offset=0, .match_offset=29943 }, { .children_offset=0, .match_offset=37536 }, { .children_offset=40895, .match_offset=0 }, { .children_offset=40923, .match_offset=0 }, { .children_offset=40926, .match_offset=0 }, { .children_offset=40928, .match_offset=0 }, { .children_offset=40930, .match_offset=0 }, { .children_offset=40932, .match_offset=0 }, { .children_offset=40934, .match_offset=0 }, { .children_offset=0, .match_offset=90605 }, { .children_offset=0, .match_offset=67804 }, { .children_offset=40936, .match_offset=0 }, { .children_offset=40942, .match_offset=0 }, { .children_offset=0, .match_offset=130299 }, { .children_offset=40952, .match_offset=68981 }, { .children_offset=0, .match_offset=44019 }, { .children_offset=0, .match_offset=109911 }, { .children_offset=0, .match_offset=104511 }, { .children_offset=0, .match_offset=61905 }, { .children_offset=40954, .match_offset=26039 }, { .children_offset=0, .match_offset=103433 }, { .children_offset=0, .match_offset=73765 }, { .children_offset=0, .match_offset=31145 }, { .children_offset=0, .match_offset=80422 }, { .children_offset=40956, .match_offset=0 }, { .children_offset=0, .match_offset=16023 }, { .children_offset=0, .match_offset=13557 }, { .children_offset=0, .match_offset=34948 }, { .children_offset=0, .match_offset=25403 }, { .children_offset=40967, .match_offset=116038 }, { .children_offset=0, .match_offset=42997 }, { .children_offset=0, .match_offset=100988 }, { .children_offset=0, .match_offset=14380 }, { .children_offset=0, .match_offset=47987 }, { .children_offset=40970, .match_offset=29102 }, { .children_offset=0, .match_offset=11326 }, { .children_offset=0, .match_offset=67525 }, { .children_offset=0, .match_offset=67795 }, { .children_offset=40972, .match_offset=0 }, { .children_offset=0, .match_offset=26213 }, { .children_offset=0, .match_offset=117651 }, { .children_offset=0, .match_offset=26887 }, { .children_offset=0, .match_offset=62349 }, { .children_offset=0, .match_offset=29958 }, { .children_offset=0, .match_offset=54402 }, { .children_offset=40983, .match_offset=62022 }, { .children_offset=0, .match_offset=46827 }, { .children_offset=0, .match_offset=133221 }, { .children_offset=0, .match_offset=69010 }, { .children_offset=0, .match_offset=57950 }, { .children_offset=0, .match_offset=58487 }, { .children_offset=40986, .match_offset=0 }, { .children_offset=0, .match_offset=134340 }, { .children_offset=0, .match_offset=115693 }, { .children_offset=0, .match_offset=113083 }, { .children_offset=0, .match_offset=27721 }, { .children_offset=0, .match_offset=81080 }, { .children_offset=40997, .match_offset=6664 }, { .children_offset=0, .match_offset=110347 }, { .children_offset=0, .match_offset=89527 }, { .children_offset=0, .match_offset=130085 }, { .children_offset=0, .match_offset=43130 }, { .children_offset=0, .match_offset=6730 }, { .children_offset=40999, .match_offset=0 }, { .children_offset=0, .match_offset=67666 }, { .children_offset=0, .match_offset=70657 }, { .children_offset=0, .match_offset=43752 }, { .children_offset=0, .match_offset=131531 }, { .children_offset=0, .match_offset=8829 }, { .children_offset=0, .match_offset=115740 }, { .children_offset=0, .match_offset=34351 }, { .children_offset=41007, .match_offset=129475 }, { .children_offset=41031, .match_offset=0 }, { .children_offset=0, .match_offset=8568 }, { .children_offset=0, .match_offset=104068 }, { .children_offset=0, .match_offset=115703 }, { .children_offset=0, .match_offset=62020 }, { .children_offset=0, .match_offset=25375 }, { .children_offset=0, .match_offset=103328 }, { .children_offset=0, .match_offset=49885 }, { .children_offset=0, .match_offset=104436 }, { .children_offset=0, .match_offset=67826 }, { .children_offset=41041, .match_offset=40882 }, { .children_offset=41044, .match_offset=0 }, { .children_offset=41046, .match_offset=0 }, { .children_offset=0, .match_offset=122487 }, { .children_offset=0, .match_offset=46895 }, { .children_offset=41048, .match_offset=0 }, { .children_offset=41051, .match_offset=0 }, { .children_offset=41053, .match_offset=0 }, { .children_offset=41055, .match_offset=0 }, { .children_offset=41057, .match_offset=0 }, { .children_offset=41059, .match_offset=0 }, { .children_offset=41061, .match_offset=0 }, { .children_offset=41063, .match_offset=0 }, { .children_offset=0, .match_offset=22180 }, { .children_offset=41065, .match_offset=0 }, { .children_offset=41067, .match_offset=0 }, { .children_offset=0, .match_offset=30897 }, { .children_offset=41069, .match_offset=68119 }, { .children_offset=0, .match_offset=113962 }, { .children_offset=41072, .match_offset=0 }, { .children_offset=0, .match_offset=64260 }, { .children_offset=41074, .match_offset=0 }, { .children_offset=41077, .match_offset=0 }, { .children_offset=41079, .match_offset=0 }, { .children_offset=0, .match_offset=42062 }, { .children_offset=41081, .match_offset=0 }, { .children_offset=0, .match_offset=26779 }, { .children_offset=41083, .match_offset=35411 }, { .children_offset=0, .match_offset=134169 }, { .children_offset=41086, .match_offset=0 }, { .children_offset=41088, .match_offset=0 }, { .children_offset=41090, .match_offset=0 }, { .children_offset=41092, .match_offset=0 }, { .children_offset=41094, .match_offset=0 }, { .children_offset=41096, .match_offset=0 }, { .children_offset=41098, .match_offset=0 }, { .children_offset=0, .match_offset=136547 }, { .children_offset=0, .match_offset=28458 }, { .children_offset=41100, .match_offset=0 }, { .children_offset=41103, .match_offset=0 }, { .children_offset=41105, .match_offset=0 }, { .children_offset=41107, .match_offset=0 }, { .children_offset=0, .match_offset=8844 }, { .children_offset=41109, .match_offset=35766 }, { .children_offset=41111, .match_offset=0 }, { .children_offset=41113, .match_offset=0 }, { .children_offset=41115, .match_offset=0 }, { .children_offset=0, .match_offset=40158 }, { .children_offset=41117, .match_offset=0 }, { .children_offset=41119, .match_offset=0 }, { .children_offset=41121, .match_offset=0 }, { .children_offset=0, .match_offset=123106 }, { .children_offset=41123, .match_offset=0 }, { .children_offset=41129, .match_offset=116340 }, { .children_offset=41131, .match_offset=0 }, { .children_offset=41133, .match_offset=0 }, { .children_offset=0, .match_offset=61596 }, { .children_offset=41135, .match_offset=0 }, { .children_offset=0, .match_offset=119223 }, { .children_offset=41137, .match_offset=0 }, { .children_offset=0, .match_offset=34638 }, { .children_offset=41139, .match_offset=0 }, { .children_offset=0, .match_offset=27761 }, { .children_offset=41141, .match_offset=0 }, { .children_offset=0, .match_offset=109459 }, { .children_offset=41143, .match_offset=62130 }, { .children_offset=41148, .match_offset=0 }, { .children_offset=41150, .match_offset=0 }, { .children_offset=41152, .match_offset=0 }, { .children_offset=41154, .match_offset=0 }, { .children_offset=41156, .match_offset=0 }, { .children_offset=41158, .match_offset=0 }, { .children_offset=41160, .match_offset=0 }, { .children_offset=41162, .match_offset=0 }, { .children_offset=0, .match_offset=33861 }, { .children_offset=41164, .match_offset=6142 }, { .children_offset=0, .match_offset=116951 }, { .children_offset=0, .match_offset=25904 }, { .children_offset=41167, .match_offset=0 }, { .children_offset=41169, .match_offset=64218 }, { .children_offset=41171, .match_offset=0 }, { .children_offset=41173, .match_offset=0 }, { .children_offset=41175, .match_offset=0 }, { .children_offset=41177, .match_offset=0 }, { .children_offset=41179, .match_offset=0 }, { .children_offset=0, .match_offset=86706 }, { .children_offset=41181, .match_offset=15974 }, { .children_offset=41184, .match_offset=0 }, { .children_offset=0, .match_offset=21999 }, { .children_offset=41186, .match_offset=0 }, { .children_offset=41189, .match_offset=0 }, { .children_offset=41191, .match_offset=0 }, { .children_offset=0, .match_offset=13394 }, { .children_offset=41193, .match_offset=0 }, { .children_offset=0, .match_offset=55873 }, { .children_offset=41195, .match_offset=6919 }, { .children_offset=41203, .match_offset=0 }, { .children_offset=41205, .match_offset=0 }, { .children_offset=41207, .match_offset=0 }, { .children_offset=41209, .match_offset=0 }, { .children_offset=41211, .match_offset=0 }, { .children_offset=0, .match_offset=25833 }, { .children_offset=41213, .match_offset=0 }, { .children_offset=0, .match_offset=59077 }, { .children_offset=41215, .match_offset=0 }, { .children_offset=41217, .match_offset=0 }, { .children_offset=0, .match_offset=14406 }, { .children_offset=41219, .match_offset=0 }, { .children_offset=0, .match_offset=13844 }, { .children_offset=41221, .match_offset=0 }, { .children_offset=41224, .match_offset=0 }, { .children_offset=41226, .match_offset=0 }, { .children_offset=0, .match_offset=69066 }, { .children_offset=0, .match_offset=44116 }, { .children_offset=41228, .match_offset=0 }, { .children_offset=41230, .match_offset=0 }, { .children_offset=0, .match_offset=129316 }, { .children_offset=41232, .match_offset=0 }, { .children_offset=41234, .match_offset=0 }, { .children_offset=0, .match_offset=56649 }, { .children_offset=41236, .match_offset=89657 }, { .children_offset=41244, .match_offset=0 }, { .children_offset=0, .match_offset=103306 }, { .children_offset=41246, .match_offset=130081 }, { .children_offset=41250, .match_offset=0 }, { .children_offset=0, .match_offset=114838 }, { .children_offset=41252, .match_offset=0 }, { .children_offset=0, .match_offset=104413 }, { .children_offset=41254, .match_offset=0 }, { .children_offset=41256, .match_offset=0 }, { .children_offset=41258, .match_offset=0 }, { .children_offset=0, .match_offset=72459 }, { .children_offset=41260, .match_offset=0 }, { .children_offset=41262, .match_offset=0 }, { .children_offset=0, .match_offset=11161 }, { .children_offset=41264, .match_offset=0 }, { .children_offset=41266, .match_offset=0 }, { .children_offset=0, .match_offset=56649 }, { .children_offset=41268, .match_offset=0 }, { .children_offset=41271, .match_offset=0 }, { .children_offset=41273, .match_offset=0 }, { .children_offset=41275, .match_offset=0 }, { .children_offset=41277, .match_offset=0 }, { .children_offset=41279, .match_offset=0 }, { .children_offset=0, .match_offset=135082 }, { .children_offset=41281, .match_offset=0 }, { .children_offset=41283, .match_offset=0 }, { .children_offset=41285, .match_offset=0 }, { .children_offset=0, .match_offset=21896 }, { .children_offset=41287, .match_offset=0 }, { .children_offset=41289, .match_offset=0 }, { .children_offset=41291, .match_offset=0 }, { .children_offset=41293, .match_offset=0 }, { .children_offset=0, .match_offset=113447 }, { .children_offset=41295, .match_offset=0 }, { .children_offset=41298, .match_offset=0 }, { .children_offset=41300, .match_offset=0 }, { .children_offset=0, .match_offset=88610 }, { .children_offset=41302, .match_offset=0 }, { .children_offset=41304, .match_offset=0 }, { .children_offset=41306, .match_offset=0 }, { .children_offset=0, .match_offset=62030 }, { .children_offset=41308, .match_offset=65048 }, { .children_offset=0, .match_offset=65156 }, { .children_offset=0, .match_offset=16112 }, { .children_offset=41310, .match_offset=60758 }, { .children_offset=0, .match_offset=112836 }, { .children_offset=0, .match_offset=118593 }, { .children_offset=41313, .match_offset=0 }, { .children_offset=41316, .match_offset=0 }, { .children_offset=0, .match_offset=132152 }, { .children_offset=0, .match_offset=55489 }, { .children_offset=41318, .match_offset=21144 }, { .children_offset=41324, .match_offset=0 }, { .children_offset=41326, .match_offset=0 }, { .children_offset=41328, .match_offset=0 }, { .children_offset=0, .match_offset=1884 }, { .children_offset=41330, .match_offset=0 }, { .children_offset=41332, .match_offset=0 }, { .children_offset=41334, .match_offset=0 }, { .children_offset=0, .match_offset=1065 }, { .children_offset=41336, .match_offset=0 }, { .children_offset=41338, .match_offset=0 }, { .children_offset=41340, .match_offset=0 }, { .children_offset=41342, .match_offset=0 }, { .children_offset=41344, .match_offset=0 }, { .children_offset=0, .match_offset=110904 }, { .children_offset=41346, .match_offset=0 }, { .children_offset=41348, .match_offset=0 }, { .children_offset=41350, .match_offset=0 }, { .children_offset=41352, .match_offset=22019 }, { .children_offset=41354, .match_offset=0 }, { .children_offset=41356, .match_offset=0 }, { .children_offset=0, .match_offset=55503 }, { .children_offset=41358, .match_offset=0 }, { .children_offset=41360, .match_offset=0 }, { .children_offset=0, .match_offset=43008 }, { .children_offset=41362, .match_offset=0 }, { .children_offset=41366, .match_offset=0 }, { .children_offset=41368, .match_offset=0 }, { .children_offset=0, .match_offset=55216 }, { .children_offset=41370, .match_offset=0 }, { .children_offset=0, .match_offset=27679 }, { .children_offset=41372, .match_offset=0 }, { .children_offset=41375, .match_offset=0 }, { .children_offset=41377, .match_offset=0 }, { .children_offset=41379, .match_offset=0 }, { .children_offset=41381, .match_offset=0 }, { .children_offset=41383, .match_offset=0 }, { .children_offset=0, .match_offset=37314 }, { .children_offset=41385, .match_offset=0 }, { .children_offset=41387, .match_offset=0 }, { .children_offset=41389, .match_offset=0 }, { .children_offset=0, .match_offset=25197 }, { .children_offset=41391, .match_offset=0 }, { .children_offset=41393, .match_offset=0 }, { .children_offset=41395, .match_offset=0 }, { .children_offset=41397, .match_offset=0 }, { .children_offset=41399, .match_offset=0 }, { .children_offset=41401, .match_offset=0 }, { .children_offset=0, .match_offset=84832 }, { .children_offset=41403, .match_offset=89125 }, { .children_offset=41405, .match_offset=0 }, { .children_offset=0, .match_offset=109396 }, { .children_offset=41407, .match_offset=115796 }, { .children_offset=41410, .match_offset=0 }, { .children_offset=41412, .match_offset=0 }, { .children_offset=41414, .match_offset=0 }, { .children_offset=41416, .match_offset=0 }, { .children_offset=0, .match_offset=67993 }, { .children_offset=41418, .match_offset=0 }, { .children_offset=41420, .match_offset=0 }, { .children_offset=41422, .match_offset=0 }, { .children_offset=41424, .match_offset=0 }, { .children_offset=41426, .match_offset=0 }, { .children_offset=0, .match_offset=104205 }, { .children_offset=41428, .match_offset=12121 }, { .children_offset=41431, .match_offset=0 }, { .children_offset=41433, .match_offset=0 }, { .children_offset=41435, .match_offset=0 }, { .children_offset=0, .match_offset=26495 }, { .children_offset=41437, .match_offset=0 }, { .children_offset=41439, .match_offset=0 }, { .children_offset=0, .match_offset=43139 }, { .children_offset=41441, .match_offset=0 }, { .children_offset=41445, .match_offset=0 }, { .children_offset=41447, .match_offset=0 }, { .children_offset=0, .match_offset=63463 }, { .children_offset=41449, .match_offset=0 }, { .children_offset=41451, .match_offset=0 }, { .children_offset=0, .match_offset=55410 }, { .children_offset=41453, .match_offset=0 }, { .children_offset=0, .match_offset=64276 }, { .children_offset=41455, .match_offset=50592 }, { .children_offset=41468, .match_offset=0 }, { .children_offset=41473, .match_offset=0 }, { .children_offset=41475, .match_offset=0 }, { .children_offset=0, .match_offset=109240 }, { .children_offset=41477, .match_offset=12338 }, { .children_offset=41479, .match_offset=0 }, { .children_offset=41481, .match_offset=0 }, { .children_offset=41483, .match_offset=0 }, { .children_offset=41485, .match_offset=0 }, { .children_offset=0, .match_offset=125572 }, { .children_offset=0, .match_offset=62542 }, { .children_offset=41487, .match_offset=0 }, { .children_offset=0, .match_offset=111423 }, { .children_offset=41490, .match_offset=0 }, { .children_offset=0, .match_offset=42029 }, { .children_offset=41492, .match_offset=0 }, { .children_offset=41494, .match_offset=0 }, { .children_offset=0, .match_offset=12035 }, { .children_offset=41496, .match_offset=44099 }, { .children_offset=41499, .match_offset=0 }, { .children_offset=41501, .match_offset=0 }, { .children_offset=0, .match_offset=123339 }, { .children_offset=41503, .match_offset=0 }, { .children_offset=41505, .match_offset=0 }, { .children_offset=41507, .match_offset=0 }, { .children_offset=0, .match_offset=115436 }, { .children_offset=41509, .match_offset=0 }, { .children_offset=41514, .match_offset=0 }, { .children_offset=41516, .match_offset=0 }, { .children_offset=0, .match_offset=101016 }, { .children_offset=41518, .match_offset=0 }, { .children_offset=41521, .match_offset=0 }, { .children_offset=41523, .match_offset=0 }, { .children_offset=0, .match_offset=22314 }, { .children_offset=41525, .match_offset=0 }, { .children_offset=0, .match_offset=64201 }, { .children_offset=41527, .match_offset=0 }, { .children_offset=41529, .match_offset=0 }, { .children_offset=41531, .match_offset=0 }, { .children_offset=41533, .match_offset=0 }, { .children_offset=41535, .match_offset=0 }, { .children_offset=0, .match_offset=84888 }, { .children_offset=41537, .match_offset=0 }, { .children_offset=0, .match_offset=67639 }, { .children_offset=41539, .match_offset=0 }, { .children_offset=41542, .match_offset=0 }, { .children_offset=0, .match_offset=33699 }, { .children_offset=41544, .match_offset=0 }, { .children_offset=41546, .match_offset=0 }, { .children_offset=41548, .match_offset=0 }, { .children_offset=41550, .match_offset=0 }, { .children_offset=0, .match_offset=123554 }, { .children_offset=41552, .match_offset=0 }, { .children_offset=41556, .match_offset=0 }, { .children_offset=0, .match_offset=11564 }, { .children_offset=0, .match_offset=33276 }, { .children_offset=41558, .match_offset=0 }, { .children_offset=41560, .match_offset=0 }, { .children_offset=0, .match_offset=7100 }, { .children_offset=41562, .match_offset=0 }, { .children_offset=41565, .match_offset=0 }, { .children_offset=41567, .match_offset=0 }, { .children_offset=41569, .match_offset=0 }, { .children_offset=0, .match_offset=44740 }, { .children_offset=41571, .match_offset=0 }, { .children_offset=0, .match_offset=78666 }, { .children_offset=41574, .match_offset=0 }, { .children_offset=41576, .match_offset=0 }, { .children_offset=41579, .match_offset=0 }, { .children_offset=0, .match_offset=33881 }, { .children_offset=41581, .match_offset=0 }, { .children_offset=0, .match_offset=42971 }, { .children_offset=41583, .match_offset=0 }, { .children_offset=41585, .match_offset=0 }, { .children_offset=41587, .match_offset=0 }, { .children_offset=41589, .match_offset=0 }, { .children_offset=41591, .match_offset=0 }, { .children_offset=0, .match_offset=65803 }, { .children_offset=41593, .match_offset=0 }, { .children_offset=41598, .match_offset=0 }, { .children_offset=41601, .match_offset=0 }, { .children_offset=41603, .match_offset=0 }, { .children_offset=41605, .match_offset=0 }, { .children_offset=41607, .match_offset=0 }, { .children_offset=0, .match_offset=5745 }, { .children_offset=41609, .match_offset=0 }, { .children_offset=0, .match_offset=33975 }, { .children_offset=41611, .match_offset=0 }, { .children_offset=41613, .match_offset=0 }, { .children_offset=0, .match_offset=86807 }, { .children_offset=41615, .match_offset=0 }, { .children_offset=41617, .match_offset=0 }, { .children_offset=0, .match_offset=12679 }, { .children_offset=41619, .match_offset=0 }, { .children_offset=41621, .match_offset=0 }, { .children_offset=41623, .match_offset=0 }, { .children_offset=0, .match_offset=6701 }, { .children_offset=41625, .match_offset=0 }, { .children_offset=41627, .match_offset=0 }, { .children_offset=0, .match_offset=76965 }, { .children_offset=41629, .match_offset=0 }, { .children_offset=0, .match_offset=103818 }, { .children_offset=0, .match_offset=57943 }, { .children_offset=41631, .match_offset=109695 }, { .children_offset=41633, .match_offset=0 }, { .children_offset=41636, .match_offset=0 }, { .children_offset=0, .match_offset=49906 }, { .children_offset=41638, .match_offset=26 }, { .children_offset=0, .match_offset=61774 }, { .children_offset=0, .match_offset=62303 }, { .children_offset=41641, .match_offset=71547 }, { .children_offset=41663, .match_offset=0 }, { .children_offset=0, .match_offset=133440 }, { .children_offset=0, .match_offset=63210 }, { .children_offset=0, .match_offset=57326 }, { .children_offset=0, .match_offset=85238 }, { .children_offset=0, .match_offset=113931 }, { .children_offset=41669, .match_offset=0 }, { .children_offset=41674, .match_offset=0 }, { .children_offset=41676, .match_offset=0 }, { .children_offset=41678, .match_offset=0 }, { .children_offset=0, .match_offset=84776 }, { .children_offset=0, .match_offset=26929 }, { .children_offset=41680, .match_offset=0 }, { .children_offset=41683, .match_offset=0 }, { .children_offset=0, .match_offset=26885 }, { .children_offset=41685, .match_offset=133453 }, { .children_offset=41687, .match_offset=0 }, { .children_offset=0, .match_offset=67413 }, { .children_offset=0, .match_offset=65135 }, { .children_offset=41689, .match_offset=0 }, { .children_offset=41691, .match_offset=0 }, { .children_offset=41693, .match_offset=0 }, { .children_offset=41695, .match_offset=0 }, { .children_offset=41697, .match_offset=0 }, { .children_offset=41699, .match_offset=0 }, { .children_offset=0, .match_offset=37611 }, { .children_offset=41701, .match_offset=0 }, { .children_offset=41706, .match_offset=0 }, { .children_offset=41708, .match_offset=0 }, { .children_offset=0, .match_offset=33844 }, { .children_offset=41710, .match_offset=0 }, { .children_offset=41712, .match_offset=0 }, { .children_offset=0, .match_offset=70793 }, { .children_offset=41714, .match_offset=0 }, { .children_offset=41716, .match_offset=0 }, { .children_offset=0, .match_offset=46229 }, { .children_offset=41718, .match_offset=88615 }, { .children_offset=41721, .match_offset=0 }, { .children_offset=41723, .match_offset=0 }, { .children_offset=0, .match_offset=118613 }, { .children_offset=41725, .match_offset=0 }, { .children_offset=0, .match_offset=32742 }, { .children_offset=41727, .match_offset=0 }, { .children_offset=41729, .match_offset=0 }, { .children_offset=0, .match_offset=129457 }, { .children_offset=41731, .match_offset=46807 }, { .children_offset=41736, .match_offset=0 }, { .children_offset=41738, .match_offset=0 }, { .children_offset=41740, .match_offset=0 }, { .children_offset=41742, .match_offset=0 }, { .children_offset=41744, .match_offset=0 }, { .children_offset=41746, .match_offset=0 }, { .children_offset=41748, .match_offset=0 }, { .children_offset=0, .match_offset=68267 }, { .children_offset=41750, .match_offset=0 }, { .children_offset=41752, .match_offset=0 }, { .children_offset=41754, .match_offset=0 }, { .children_offset=41756, .match_offset=0 }, { .children_offset=0, .match_offset=72497 }, { .children_offset=41758, .match_offset=13265 }, { .children_offset=0, .match_offset=46602 }, { .children_offset=0, .match_offset=32779 }, { .children_offset=41760, .match_offset=0 }, { .children_offset=41764, .match_offset=0 }, { .children_offset=41766, .match_offset=0 }, { .children_offset=41768, .match_offset=0 }, { .children_offset=0, .match_offset=135807 }, { .children_offset=41770, .match_offset=0 }, { .children_offset=0, .match_offset=441 }, { .children_offset=41772, .match_offset=0 }, { .children_offset=0, .match_offset=7102 }, { .children_offset=0, .match_offset=68593 }, { .children_offset=41774, .match_offset=0 }, { .children_offset=41776, .match_offset=0 }, { .children_offset=41778, .match_offset=0 }, { .children_offset=0, .match_offset=103923 }, { .children_offset=41780, .match_offset=0 }, { .children_offset=41783, .match_offset=0 }, { .children_offset=41786, .match_offset=0 }, { .children_offset=41788, .match_offset=0 }, { .children_offset=41790, .match_offset=0 }, { .children_offset=41792, .match_offset=123094 }, { .children_offset=41794, .match_offset=0 }, { .children_offset=41804, .match_offset=113712 }, { .children_offset=41815, .match_offset=110934 }, { .children_offset=0, .match_offset=22782 }, { .children_offset=0, .match_offset=112731 }, { .children_offset=0, .match_offset=109760 }, { .children_offset=0, .match_offset=27071 }, { .children_offset=0, .match_offset=33967 }, { .children_offset=0, .match_offset=58200 }, { .children_offset=0, .match_offset=14255 }, { .children_offset=0, .match_offset=132223 }, { .children_offset=0, .match_offset=119569 }, { .children_offset=0, .match_offset=58886 }, { .children_offset=41826, .match_offset=108129 }, { .children_offset=0, .match_offset=46747 }, { .children_offset=0, .match_offset=80267 }, { .children_offset=0, .match_offset=42594 }, { .children_offset=0, .match_offset=131641 }, { .children_offset=0, .match_offset=5530 }, { .children_offset=0, .match_offset=32977 }, { .children_offset=0, .match_offset=103418 }, { .children_offset=0, .match_offset=102279 }, { .children_offset=0, .match_offset=60955 }, { .children_offset=0, .match_offset=58810 }, { .children_offset=41837, .match_offset=110940 }, { .children_offset=0, .match_offset=26007 }, { .children_offset=0, .match_offset=114234 }, { .children_offset=0, .match_offset=11470 }, { .children_offset=0, .match_offset=114487 }, { .children_offset=0, .match_offset=131239 }, { .children_offset=0, .match_offset=84820 }, { .children_offset=0, .match_offset=123784 }, { .children_offset=0, .match_offset=16321 }, { .children_offset=0, .match_offset=16332 }, { .children_offset=0, .match_offset=124589 }, { .children_offset=41848, .match_offset=90575 }, { .children_offset=0, .match_offset=8658 }, { .children_offset=0, .match_offset=89956 }, { .children_offset=0, .match_offset=63788 }, { .children_offset=0, .match_offset=132318 }, { .children_offset=0, .match_offset=77383 }, { .children_offset=0, .match_offset=22487 }, { .children_offset=0, .match_offset=74221 }, { .children_offset=0, .match_offset=31051 }, { .children_offset=0, .match_offset=35163 }, { .children_offset=0, .match_offset=119231 }, { .children_offset=41859, .match_offset=20324 }, { .children_offset=0, .match_offset=115734 }, { .children_offset=0, .match_offset=38836 }, { .children_offset=0, .match_offset=124567 }, { .children_offset=0, .match_offset=35215 }, { .children_offset=0, .match_offset=104566 }, { .children_offset=0, .match_offset=111435 }, { .children_offset=0, .match_offset=90311 }, { .children_offset=0, .match_offset=35440 }, { .children_offset=0, .match_offset=34515 }, { .children_offset=0, .match_offset=126576 }, { .children_offset=41870, .match_offset=66320 }, { .children_offset=0, .match_offset=13222 }, { .children_offset=0, .match_offset=8862 }, { .children_offset=0, .match_offset=15468 }, { .children_offset=0, .match_offset=39461 }, { .children_offset=0, .match_offset=133660 }, { .children_offset=0, .match_offset=13509 }, { .children_offset=0, .match_offset=11570 }, { .children_offset=0, .match_offset=68320 }, { .children_offset=0, .match_offset=80564 }, { .children_offset=0, .match_offset=123209 }, { .children_offset=41881, .match_offset=69162 }, { .children_offset=0, .match_offset=103359 }, { .children_offset=0, .match_offset=125382 }, { .children_offset=0, .match_offset=134244 }, { .children_offset=0, .match_offset=131367 }, { .children_offset=0, .match_offset=68487 }, { .children_offset=0, .match_offset=72789 }, { .children_offset=0, .match_offset=45073 }, { .children_offset=0, .match_offset=71287 }, { .children_offset=0, .match_offset=27483 }, { .children_offset=0, .match_offset=127617 }, { .children_offset=41892, .match_offset=7529 }, { .children_offset=0, .match_offset=38355 }, { .children_offset=0, .match_offset=78422 }, { .children_offset=0, .match_offset=13074 }, { .children_offset=0, .match_offset=114228 }, { .children_offset=0, .match_offset=30992 }, { .children_offset=0, .match_offset=125090 }, { .children_offset=0, .match_offset=56725 }, { .children_offset=0, .match_offset=34718 }, { .children_offset=0, .match_offset=73866 }, { .children_offset=0, .match_offset=12115 }, { .children_offset=41903, .match_offset=6124 }, { .children_offset=0, .match_offset=35622 }, { .children_offset=0, .match_offset=38659 }, { .children_offset=0, .match_offset=104401 }, { .children_offset=0, .match_offset=28452 }, { .children_offset=0, .match_offset=30527 }, { .children_offset=0, .match_offset=118470 }, { .children_offset=0, .match_offset=130321 }, { .children_offset=0, .match_offset=39034 }, { .children_offset=0, .match_offset=24295 }, { .children_offset=0, .match_offset=5329 }, { .children_offset=41914, .match_offset=14856 }, { .children_offset=0, .match_offset=12797 }, { .children_offset=0, .match_offset=25667 }, { .children_offset=0, .match_offset=73816 }, { .children_offset=0, .match_offset=42995 }, { .children_offset=0, .match_offset=111473 }, { .children_offset=0, .match_offset=124897 }, { .children_offset=0, .match_offset=44803 }, { .children_offset=0, .match_offset=43907 }, { .children_offset=0, .match_offset=129980 }, { .children_offset=0, .match_offset=6561 }, { .children_offset=41925, .match_offset=6150 }, { .children_offset=41936, .match_offset=110928 }, { .children_offset=0, .match_offset=125477 }, { .children_offset=0, .match_offset=134595 }, { .children_offset=0, .match_offset=13076 }, { .children_offset=0, .match_offset=13134 }, { .children_offset=0, .match_offset=53631 }, { .children_offset=0, .match_offset=131848 }, { .children_offset=0, .match_offset=5950 }, { .children_offset=0, .match_offset=63833 }, { .children_offset=0, .match_offset=20185 }, { .children_offset=0, .match_offset=60933 }, { .children_offset=41947, .match_offset=86084 }, { .children_offset=0, .match_offset=109216 }, { .children_offset=0, .match_offset=61033 }, { .children_offset=0, .match_offset=30492 }, { .children_offset=0, .match_offset=68502 }, { .children_offset=0, .match_offset=113833 }, { .children_offset=0, .match_offset=40647 }, { .children_offset=0, .match_offset=135890 }, { .children_offset=0, .match_offset=85949 }, { .children_offset=0, .match_offset=12501 }, { .children_offset=0, .match_offset=14273 }, { .children_offset=41958, .match_offset=125819 }, { .children_offset=0, .match_offset=129382 }, { .children_offset=0, .match_offset=12400 }, { .children_offset=0, .match_offset=35381 }, { .children_offset=0, .match_offset=33825 }, { .children_offset=0, .match_offset=45061 }, { .children_offset=0, .match_offset=28598 }, { .children_offset=0, .match_offset=14244 }, { .children_offset=0, .match_offset=113647 }, { .children_offset=0, .match_offset=46593 }, { .children_offset=0, .match_offset=111448 }, { .children_offset=41969, .match_offset=13536 }, { .children_offset=0, .match_offset=58601 }, { .children_offset=0, .match_offset=63107 }, { .children_offset=0, .match_offset=57315 }, { .children_offset=0, .match_offset=67407 }, { .children_offset=0, .match_offset=42834 }, { .children_offset=0, .match_offset=8893 }, { .children_offset=0, .match_offset=30912 }, { .children_offset=0, .match_offset=85934 }, { .children_offset=0, .match_offset=134924 }, { .children_offset=0, .match_offset=5962 }, { .children_offset=41980, .match_offset=132459 }, { .children_offset=0, .match_offset=81180 }, { .children_offset=0, .match_offset=119870 }, { .children_offset=0, .match_offset=12396 }, { .children_offset=0, .match_offset=79016 }, { .children_offset=0, .match_offset=26057 }, { .children_offset=0, .match_offset=54384 }, { .children_offset=0, .match_offset=64772 }, { .children_offset=0, .match_offset=34288 }, { .children_offset=0, .match_offset=89979 }, { .children_offset=0, .match_offset=33516 }, { .children_offset=41991, .match_offset=54380 }, { .children_offset=0, .match_offset=54257 }, { .children_offset=0, .match_offset=56651 }, { .children_offset=0, .match_offset=61442 }, { .children_offset=0, .match_offset=6997 }, { .children_offset=0, .match_offset=13154 }, { .children_offset=0, .match_offset=14901 }, { .children_offset=0, .match_offset=113929 }, { .children_offset=0, .match_offset=73479 }, { .children_offset=0, .match_offset=45950 }, { .children_offset=0, .match_offset=65583 }, { .children_offset=0, .match_offset=68260 }, { .children_offset=41999, .match_offset=113114 }, { .children_offset=0, .match_offset=8473 }, { .children_offset=0, .match_offset=86988 }, { .children_offset=0, .match_offset=43824 }, { .children_offset=0, .match_offset=90067 }, { .children_offset=0, .match_offset=78564 }, { .children_offset=0, .match_offset=33311 }, { .children_offset=0, .match_offset=109859 }, { .children_offset=0, .match_offset=6754 }, { .children_offset=0, .match_offset=33409 }, { .children_offset=0, .match_offset=61158 }, { .children_offset=42010, .match_offset=43453 }, { .children_offset=0, .match_offset=124821 }, { .children_offset=0, .match_offset=126589 }, { .children_offset=0, .match_offset=6593 }, { .children_offset=0, .match_offset=109585 }, { .children_offset=0, .match_offset=66254 }, { .children_offset=0, .match_offset=15707 }, { .children_offset=0, .match_offset=122015 }, { .children_offset=0, .match_offset=8870 }, { .children_offset=0, .match_offset=14235 }, { .children_offset=0, .match_offset=55688 }, { .children_offset=42021, .match_offset=2298 }, { .children_offset=0, .match_offset=6339 }, { .children_offset=0, .match_offset=113831 }, { .children_offset=0, .match_offset=67674 }, { .children_offset=0, .match_offset=123733 }, { .children_offset=0, .match_offset=113847 }, { .children_offset=0, .match_offset=62299 }, { .children_offset=0, .match_offset=124891 }, { .children_offset=0, .match_offset=45753 }, { .children_offset=0, .match_offset=80232 }, { .children_offset=0, .match_offset=129324 }, { .children_offset=42032, .match_offset=135788 }, { .children_offset=0, .match_offset=104196 }, { .children_offset=0, .match_offset=1905 }, { .children_offset=0, .match_offset=22148 }, { .children_offset=0, .match_offset=29886 }, { .children_offset=0, .match_offset=88743 }, { .children_offset=0, .match_offset=90025 }, { .children_offset=0, .match_offset=116939 }, { .children_offset=0, .match_offset=71665 }, { .children_offset=0, .match_offset=38579 }, { .children_offset=0, .match_offset=28438 }, { .children_offset=42043, .match_offset=130970 }, { .children_offset=0, .match_offset=23952 }, { .children_offset=0, .match_offset=74098 }, { .children_offset=0, .match_offset=90603 }, { .children_offset=0, .match_offset=86303 }, { .children_offset=0, .match_offset=119863 }, { .children_offset=0, .match_offset=80940 }, { .children_offset=0, .match_offset=122049 }, { .children_offset=0, .match_offset=89190 }, { .children_offset=0, .match_offset=109187 }, { .children_offset=0, .match_offset=57277 }, { .children_offset=42054, .match_offset=68394 }, { .children_offset=0, .match_offset=109485 }, { .children_offset=0, .match_offset=61711 }, { .children_offset=0, .match_offset=33237 }, { .children_offset=0, .match_offset=72402 }, { .children_offset=0, .match_offset=136031 }, { .children_offset=0, .match_offset=44025 }, { .children_offset=0, .match_offset=55692 }, { .children_offset=0, .match_offset=88821 }, { .children_offset=0, .match_offset=21140 }, { .children_offset=0, .match_offset=25658 }, { .children_offset=42065, .match_offset=100964 }, { .children_offset=0, .match_offset=26438 }, { .children_offset=0, .match_offset=42957 }, { .children_offset=0, .match_offset=68423 }, { .children_offset=0, .match_offset=6863 }, { .children_offset=0, .match_offset=23048 }, { .children_offset=0, .match_offset=116079 }, { .children_offset=0, .match_offset=24312 }, { .children_offset=0, .match_offset=65784 }, { .children_offset=0, .match_offset=11992 }, { .children_offset=0, .match_offset=108101 }, { .children_offset=42076, .match_offset=0 }, { .children_offset=0, .match_offset=28059 }, { .children_offset=42078, .match_offset=118596 }, { .children_offset=42080, .match_offset=0 }, { .children_offset=0, .match_offset=6218 }, { .children_offset=42082, .match_offset=0 }, { .children_offset=42086, .match_offset=124636 }, { .children_offset=42094, .match_offset=0 }, { .children_offset=42096, .match_offset=0 }, { .children_offset=42098, .match_offset=0 }, { .children_offset=42100, .match_offset=0 }, { .children_offset=42102, .match_offset=0 }, { .children_offset=42104, .match_offset=0 }, { .children_offset=0, .match_offset=68110 }, { .children_offset=42106, .match_offset=0 }, { .children_offset=42108, .match_offset=0 }, { .children_offset=42110, .match_offset=0 }, { .children_offset=42112, .match_offset=0 }, { .children_offset=42114, .match_offset=0 }, { .children_offset=0, .match_offset=59367 }, { .children_offset=42116, .match_offset=0 }, { .children_offset=42119, .match_offset=0 }, { .children_offset=42121, .match_offset=0 }, { .children_offset=42123, .match_offset=0 }, { .children_offset=42126, .match_offset=0 }, { .children_offset=0, .match_offset=132461 }, { .children_offset=42128, .match_offset=0 }, { .children_offset=42130, .match_offset=0 }, { .children_offset=42132, .match_offset=0 }, { .children_offset=0, .match_offset=68295 }, { .children_offset=42134, .match_offset=0 }, { .children_offset=42136, .match_offset=0 }, { .children_offset=42138, .match_offset=0 }, { .children_offset=0, .match_offset=22608 }, { .children_offset=42140, .match_offset=0 }, { .children_offset=42142, .match_offset=0 }, { .children_offset=42144, .match_offset=0 }, { .children_offset=42146, .match_offset=0 }, { .children_offset=42148, .match_offset=0 }, { .children_offset=0, .match_offset=23767 }, { .children_offset=42150, .match_offset=0 }, { .children_offset=42152, .match_offset=0 }, { .children_offset=42154, .match_offset=0 }, { .children_offset=42156, .match_offset=0 }, { .children_offset=42158, .match_offset=0 }, { .children_offset=0, .match_offset=28258 }, { .children_offset=42160, .match_offset=0 }, { .children_offset=42163, .match_offset=0 }, { .children_offset=42165, .match_offset=0 }, { .children_offset=42167, .match_offset=0 }, { .children_offset=42169, .match_offset=0 }, { .children_offset=42171, .match_offset=0 }, { .children_offset=0, .match_offset=34408 }, { .children_offset=42173, .match_offset=0 }, { .children_offset=42175, .match_offset=0 }, { .children_offset=0, .match_offset=89822 }, { .children_offset=42177, .match_offset=0 }, { .children_offset=42179, .match_offset=0 }, { .children_offset=42181, .match_offset=0 }, { .children_offset=42183, .match_offset=0 }, { .children_offset=0, .match_offset=7068 }, { .children_offset=42185, .match_offset=134922 }, { .children_offset=42187, .match_offset=0 }, { .children_offset=42189, .match_offset=0 }, { .children_offset=0, .match_offset=13804 }, { .children_offset=42191, .match_offset=0 }, { .children_offset=42193, .match_offset=0 }, { .children_offset=42195, .match_offset=0 }, { .children_offset=42197, .match_offset=0 }, { .children_offset=0, .match_offset=103813 }, { .children_offset=42199, .match_offset=0 }, { .children_offset=42201, .match_offset=0 }, { .children_offset=42205, .match_offset=0 }, { .children_offset=42207, .match_offset=0 }, { .children_offset=42209, .match_offset=0 }, { .children_offset=0, .match_offset=114896 }, { .children_offset=0, .match_offset=43110 }, { .children_offset=0, .match_offset=87811 }, { .children_offset=42211, .match_offset=43351 }, { .children_offset=42214, .match_offset=0 }, { .children_offset=42216, .match_offset=0 }, { .children_offset=42218, .match_offset=0 }, { .children_offset=42220, .match_offset=0 }, { .children_offset=42223, .match_offset=0 }, { .children_offset=0, .match_offset=76954 }, { .children_offset=42225, .match_offset=0 }, { .children_offset=0, .match_offset=123356 }, { .children_offset=42227, .match_offset=0 }, { .children_offset=42230, .match_offset=0 }, { .children_offset=42232, .match_offset=0 }, { .children_offset=42234, .match_offset=0 }, { .children_offset=42236, .match_offset=0 }, { .children_offset=0, .match_offset=89145 }, { .children_offset=42238, .match_offset=0 }, { .children_offset=42240, .match_offset=0 }, { .children_offset=42242, .match_offset=0 }, { .children_offset=0, .match_offset=44948 }, { .children_offset=42244, .match_offset=0 }, { .children_offset=42246, .match_offset=0 }, { .children_offset=42248, .match_offset=0 }, { .children_offset=42250, .match_offset=0 }, { .children_offset=42252, .match_offset=0 }, { .children_offset=42254, .match_offset=0 }, { .children_offset=42256, .match_offset=0 }, { .children_offset=0, .match_offset=50078 }, { .children_offset=42258, .match_offset=0 }, { .children_offset=42261, .match_offset=0 }, { .children_offset=42264, .match_offset=67535 }, { .children_offset=0, .match_offset=42256 }, { .children_offset=42266, .match_offset=0 }, { .children_offset=42268, .match_offset=0 }, { .children_offset=0, .match_offset=121973 }, { .children_offset=42270, .match_offset=0 }, { .children_offset=42272, .match_offset=0 }, { .children_offset=42274, .match_offset=0 }, { .children_offset=0, .match_offset=114317 }, { .children_offset=42276, .match_offset=0 }, { .children_offset=42281, .match_offset=0 }, { .children_offset=42283, .match_offset=0 }, { .children_offset=0, .match_offset=66430 }, { .children_offset=42285, .match_offset=0 }, { .children_offset=42287, .match_offset=0 }, { .children_offset=42289, .match_offset=0 }, { .children_offset=42291, .match_offset=0 }, { .children_offset=42293, .match_offset=0 }, { .children_offset=42295, .match_offset=0 }, { .children_offset=42297, .match_offset=0 }, { .children_offset=42299, .match_offset=0 }, { .children_offset=42301, .match_offset=0 }, { .children_offset=42303, .match_offset=0 }, { .children_offset=0, .match_offset=132833 }, { .children_offset=42305, .match_offset=0 }, { .children_offset=42307, .match_offset=0 }, { .children_offset=42309, .match_offset=0 }, { .children_offset=42311, .match_offset=0 }, { .children_offset=42313, .match_offset=0 }, { .children_offset=42315, .match_offset=0 }, { .children_offset=0, .match_offset=64290 }, { .children_offset=42317, .match_offset=0 }, { .children_offset=42319, .match_offset=0 }, { .children_offset=0, .match_offset=110566 }, { .children_offset=42321, .match_offset=13255 }, { .children_offset=42324, .match_offset=0 }, { .children_offset=42326, .match_offset=0 }, { .children_offset=0, .match_offset=119217 }, { .children_offset=42328, .match_offset=0 }, { .children_offset=42331, .match_offset=0 }, { .children_offset=42333, .match_offset=0 }, { .children_offset=42335, .match_offset=0 }, { .children_offset=0, .match_offset=33969 }, { .children_offset=0, .match_offset=33969 }, { .children_offset=42337, .match_offset=0 }, { .children_offset=42341, .match_offset=0 }, { .children_offset=42343, .match_offset=0 }, { .children_offset=0, .match_offset=9942 }, { .children_offset=42345, .match_offset=0 }, { .children_offset=42347, .match_offset=0 }, { .children_offset=42349, .match_offset=0 }, { .children_offset=0, .match_offset=125234 }, { .children_offset=0, .match_offset=22330 }, { .children_offset=42351, .match_offset=0 }, { .children_offset=42353, .match_offset=0 }, { .children_offset=42356, .match_offset=73886 }, { .children_offset=42359, .match_offset=0 }, { .children_offset=42361, .match_offset=0 }, { .children_offset=42363, .match_offset=0 }, { .children_offset=42365, .match_offset=0 }, { .children_offset=42367, .match_offset=0 }, { .children_offset=42369, .match_offset=0 }, { .children_offset=0, .match_offset=135800 }, { .children_offset=42371, .match_offset=0 }, { .children_offset=42375, .match_offset=0 }, { .children_offset=42377, .match_offset=0 }, { .children_offset=0, .match_offset=10863 }, { .children_offset=0, .match_offset=102271 }, { .children_offset=0, .match_offset=85784 }, { .children_offset=42379, .match_offset=0 }, { .children_offset=42381, .match_offset=0 }, { .children_offset=42383, .match_offset=0 }, { .children_offset=42385, .match_offset=0 }, { .children_offset=0, .match_offset=26121 }, { .children_offset=42387, .match_offset=134869 }, { .children_offset=42389, .match_offset=66227 }, { .children_offset=42393, .match_offset=0 }, { .children_offset=42395, .match_offset=0 }, { .children_offset=0, .match_offset=123326 }, { .children_offset=42397, .match_offset=0 }, { .children_offset=42399, .match_offset=0 }, { .children_offset=0, .match_offset=89954 }, { .children_offset=42401, .match_offset=0 }, { .children_offset=42403, .match_offset=0 }, { .children_offset=0, .match_offset=9079 }, { .children_offset=42405, .match_offset=0 }, { .children_offset=0, .match_offset=55200 }, { .children_offset=42407, .match_offset=0 }, { .children_offset=42409, .match_offset=123188 }, { .children_offset=42411, .match_offset=0 }, { .children_offset=42413, .match_offset=0 }, { .children_offset=0, .match_offset=6160 }, { .children_offset=42415, .match_offset=135813 }, { .children_offset=42419, .match_offset=0 }, { .children_offset=0, .match_offset=7587 }, { .children_offset=0, .match_offset=61582 }, { .children_offset=42422, .match_offset=0 }, { .children_offset=0, .match_offset=132817 }, { .children_offset=42424, .match_offset=0 }, { .children_offset=0, .match_offset=136161 }, { .children_offset=42426, .match_offset=29234 }, { .children_offset=0, .match_offset=68411 }, { .children_offset=42440, .match_offset=62747 }, { .children_offset=0, .match_offset=73800 }, { .children_offset=0, .match_offset=123754 }, { .children_offset=0, .match_offset=67738 }, { .children_offset=42457, .match_offset=0 }, { .children_offset=0, .match_offset=20199 }, { .children_offset=42459, .match_offset=122284 }, { .children_offset=42463, .match_offset=0 }, { .children_offset=0, .match_offset=123167 }, { .children_offset=42465, .match_offset=65545 }, { .children_offset=0, .match_offset=134253 }, { .children_offset=42467, .match_offset=0 }, { .children_offset=42469, .match_offset=0 }, { .children_offset=42471, .match_offset=0 }, { .children_offset=0, .match_offset=61741 }, { .children_offset=42473, .match_offset=0 }, { .children_offset=0, .match_offset=61607 }, { .children_offset=42475, .match_offset=34099 }, { .children_offset=42479, .match_offset=0 }, { .children_offset=0, .match_offset=28269 }, { .children_offset=42481, .match_offset=0 }, { .children_offset=42483, .match_offset=0 }, { .children_offset=0, .match_offset=1915 }, { .children_offset=42485, .match_offset=0 }, { .children_offset=0, .match_offset=57342 }, { .children_offset=42487, .match_offset=0 }, { .children_offset=42490, .match_offset=0 }, { .children_offset=42492, .match_offset=0 }, { .children_offset=0, .match_offset=85413 }, { .children_offset=42494, .match_offset=0 }, { .children_offset=42496, .match_offset=0 }, { .children_offset=42498, .match_offset=0 }, { .children_offset=42500, .match_offset=0 }, { .children_offset=42502, .match_offset=0 }, { .children_offset=0, .match_offset=67372 }, { .children_offset=42504, .match_offset=0 }, { .children_offset=42506, .match_offset=0 }, { .children_offset=42508, .match_offset=0 }, { .children_offset=42510, .match_offset=0 }, { .children_offset=0, .match_offset=44805 }, { .children_offset=42512, .match_offset=64987 }, { .children_offset=0, .match_offset=103188 }, { .children_offset=42514, .match_offset=27834 }, { .children_offset=42517, .match_offset=37940 }, { .children_offset=0, .match_offset=44809 }, { .children_offset=42519, .match_offset=0 }, { .children_offset=42521, .match_offset=0 }, { .children_offset=0, .match_offset=14237 }, { .children_offset=42523, .match_offset=0 }, { .children_offset=0, .match_offset=86668 }, { .children_offset=42529, .match_offset=58263 }, { .children_offset=42531, .match_offset=0 }, { .children_offset=0, .match_offset=119469 }, { .children_offset=0, .match_offset=129451 }, { .children_offset=0, .match_offset=78008 }, { .children_offset=0, .match_offset=129943 }, { .children_offset=0, .match_offset=125680 }, { .children_offset=42533, .match_offset=0 }, { .children_offset=42536, .match_offset=0 }, { .children_offset=0, .match_offset=89243 }, { .children_offset=42538, .match_offset=0 }, { .children_offset=42541, .match_offset=0 }, { .children_offset=0, .match_offset=12685 }, { .children_offset=42543, .match_offset=0 }, { .children_offset=42545, .match_offset=0 }, { .children_offset=42547, .match_offset=0 }, { .children_offset=0, .match_offset=10766 }, { .children_offset=0, .match_offset=133258 }, { .children_offset=0, .match_offset=119423 }, { .children_offset=42549, .match_offset=0 }, { .children_offset=42552, .match_offset=0 }, { .children_offset=0, .match_offset=61790 }, { .children_offset=42556, .match_offset=0 }, { .children_offset=0, .match_offset=54410 }, { .children_offset=42558, .match_offset=0 }, { .children_offset=42560, .match_offset=0 }, { .children_offset=0, .match_offset=77434 }, { .children_offset=0, .match_offset=121928 }, { .children_offset=42562, .match_offset=113746 }, { .children_offset=42576, .match_offset=0 }, { .children_offset=42578, .match_offset=0 }, { .children_offset=42580, .match_offset=0 }, { .children_offset=42582, .match_offset=0 }, { .children_offset=0, .match_offset=6152 }, { .children_offset=42584, .match_offset=29217 }, { .children_offset=42587, .match_offset=115438 }, { .children_offset=0, .match_offset=56989 }, { .children_offset=0, .match_offset=43046 }, { .children_offset=42589, .match_offset=0 }, { .children_offset=0, .match_offset=123227 }, { .children_offset=0, .match_offset=131131 }, { .children_offset=42591, .match_offset=0 }, { .children_offset=0, .match_offset=27544 }, { .children_offset=0, .match_offset=21826 }, { .children_offset=0, .match_offset=79731 }, { .children_offset=0, .match_offset=42990 }, { .children_offset=42594, .match_offset=0 }, { .children_offset=42596, .match_offset=0 }, { .children_offset=0, .match_offset=68399 }, { .children_offset=42598, .match_offset=0 }, { .children_offset=42600, .match_offset=34555 }, { .children_offset=0, .match_offset=129434 }, { .children_offset=42604, .match_offset=0 }, { .children_offset=0, .match_offset=31027 }, { .children_offset=42606, .match_offset=0 }, { .children_offset=42608, .match_offset=0 }, { .children_offset=0, .match_offset=21792 }, { .children_offset=0, .match_offset=30531 }, { .children_offset=42610, .match_offset=0 }, { .children_offset=42614, .match_offset=0 }, { .children_offset=42616, .match_offset=6390 }, { .children_offset=42618, .match_offset=122730 }, { .children_offset=42620, .match_offset=0 }, { .children_offset=0, .match_offset=2124 }, { .children_offset=42622, .match_offset=0 }, { .children_offset=0, .match_offset=58570 }, { .children_offset=0, .match_offset=37966 }, { .children_offset=42624, .match_offset=0 }, { .children_offset=0, .match_offset=116374 }, { .children_offset=0, .match_offset=62142 }, { .children_offset=42626, .match_offset=0 }, { .children_offset=0, .match_offset=42966 }, { .children_offset=42628, .match_offset=13846 }, { .children_offset=0, .match_offset=58888 }, { .children_offset=42640, .match_offset=0 }, { .children_offset=42642, .match_offset=0 }, { .children_offset=0, .match_offset=44104 }, { .children_offset=42644, .match_offset=0 }, { .children_offset=0, .match_offset=123389 }, { .children_offset=42646, .match_offset=38448 }, { .children_offset=0, .match_offset=84842 }, { .children_offset=42648, .match_offset=53513 }, { .children_offset=0, .match_offset=34366 }, { .children_offset=42650, .match_offset=52650 }, { .children_offset=42654, .match_offset=0 }, { .children_offset=0, .match_offset=34680 }, { .children_offset=42656, .match_offset=0 }, { .children_offset=0, .match_offset=34118 }, { .children_offset=42658, .match_offset=0 }, { .children_offset=0, .match_offset=7721 }, { .children_offset=0, .match_offset=25738 }, { .children_offset=0, .match_offset=55870 }, { .children_offset=42660, .match_offset=133216 }, { .children_offset=42663, .match_offset=0 }, { .children_offset=0, .match_offset=81131 }, { .children_offset=0, .match_offset=55489 }, { .children_offset=42665, .match_offset=0 }, { .children_offset=0, .match_offset=30888 }, { .children_offset=42667, .match_offset=0 }, { .children_offset=42669, .match_offset=0 }, { .children_offset=42671, .match_offset=0 }, { .children_offset=42673, .match_offset=0 }, { .children_offset=42675, .match_offset=0 }, { .children_offset=42677, .match_offset=0 }, { .children_offset=0, .match_offset=25433 }, { .children_offset=42679, .match_offset=57415 }, { .children_offset=0, .match_offset=33429 }, { .children_offset=42693, .match_offset=0 }, { .children_offset=42695, .match_offset=0 }, { .children_offset=42697, .match_offset=0 }, { .children_offset=0, .match_offset=12604 }, { .children_offset=42699, .match_offset=71667 }, { .children_offset=0, .match_offset=26135 }, { .children_offset=42701, .match_offset=74188 }, { .children_offset=0, .match_offset=7490 }, { .children_offset=42703, .match_offset=70714 }, { .children_offset=0, .match_offset=110938 }, { .children_offset=42706, .match_offset=58895 }, { .children_offset=42708, .match_offset=0 }, { .children_offset=42710, .match_offset=0 }, { .children_offset=0, .match_offset=69137 }, { .children_offset=42712, .match_offset=90598 }, { .children_offset=42714, .match_offset=0 }, { .children_offset=42716, .match_offset=0 }, { .children_offset=42718, .match_offset=0 }, { .children_offset=0, .match_offset=88740 }, { .children_offset=0, .match_offset=80605 }, { .children_offset=42720, .match_offset=0 }, { .children_offset=42722, .match_offset=73394 }, { .children_offset=42734, .match_offset=0 }, { .children_offset=42736, .match_offset=0 }, { .children_offset=42738, .match_offset=0 }, { .children_offset=42740, .match_offset=0 }, { .children_offset=42742, .match_offset=0 }, { .children_offset=42744, .match_offset=0 }, { .children_offset=42754, .match_offset=0 }, { .children_offset=0, .match_offset=5344 }, { .children_offset=42756, .match_offset=0 }, { .children_offset=42758, .match_offset=0 }, { .children_offset=42760, .match_offset=0 }, { .children_offset=42762, .match_offset=0 }, { .children_offset=42764, .match_offset=0 }, { .children_offset=42766, .match_offset=0 }, { .children_offset=0, .match_offset=54457 }, { .children_offset=42768, .match_offset=0 }, { .children_offset=42770, .match_offset=0 }, { .children_offset=42772, .match_offset=0 }, { .children_offset=42774, .match_offset=0 }, { .children_offset=42776, .match_offset=0 }, { .children_offset=0, .match_offset=27847 }, { .children_offset=42778, .match_offset=0 }, { .children_offset=42780, .match_offset=0 }, { .children_offset=42782, .match_offset=0 }, { .children_offset=0, .match_offset=132887 }, { .children_offset=42784, .match_offset=0 }, { .children_offset=42786, .match_offset=0 }, { .children_offset=42788, .match_offset=0 }, { .children_offset=0, .match_offset=11965 }, { .children_offset=42790, .match_offset=0 }, { .children_offset=42792, .match_offset=0 }, { .children_offset=0, .match_offset=20578 }, { .children_offset=42794, .match_offset=0 }, { .children_offset=42796, .match_offset=0 }, { .children_offset=0, .match_offset=109595 }, { .children_offset=42798, .match_offset=0 }, { .children_offset=42800, .match_offset=0 }, { .children_offset=0, .match_offset=125745 }, { .children_offset=42802, .match_offset=0 }, { .children_offset=0, .match_offset=77845 }, { .children_offset=42804, .match_offset=0 }, { .children_offset=42806, .match_offset=0 }, { .children_offset=42808, .match_offset=0 }, { .children_offset=0, .match_offset=135054 }, { .children_offset=42810, .match_offset=0 }, { .children_offset=42812, .match_offset=0 }, { .children_offset=42814, .match_offset=0 }, { .children_offset=42816, .match_offset=0 }, { .children_offset=42818, .match_offset=0 }, { .children_offset=42820, .match_offset=0 }, { .children_offset=42822, .match_offset=0 }, { .children_offset=42824, .match_offset=0 }, { .children_offset=0, .match_offset=60802 }, { .children_offset=42826, .match_offset=0 }, { .children_offset=42828, .match_offset=0 }, { .children_offset=42830, .match_offset=0 }, { .children_offset=0, .match_offset=133283 }, { .children_offset=42832, .match_offset=0 }, { .children_offset=42834, .match_offset=0 }, { .children_offset=42836, .match_offset=0 }, { .children_offset=0, .match_offset=87451 }, { .children_offset=42838, .match_offset=0 }, { .children_offset=42840, .match_offset=0 }, { .children_offset=42842, .match_offset=0 }, { .children_offset=42844, .match_offset=0 }, { .children_offset=42846, .match_offset=0 }, { .children_offset=42848, .match_offset=0 }, { .children_offset=42850, .match_offset=0 }, { .children_offset=42852, .match_offset=0 }, { .children_offset=0, .match_offset=15705 }, { .children_offset=42854, .match_offset=0 }, { .children_offset=42856, .match_offset=0 }, { .children_offset=0, .match_offset=134457 }, { .children_offset=42858, .match_offset=0 }, { .children_offset=42860, .match_offset=0 }, { .children_offset=42862, .match_offset=0 }, { .children_offset=42864, .match_offset=0 }, { .children_offset=42866, .match_offset=0 }, { .children_offset=42868, .match_offset=0 }, { .children_offset=42870, .match_offset=0 }, { .children_offset=0, .match_offset=68785 }, { .children_offset=42872, .match_offset=0 }, { .children_offset=42874, .match_offset=0 }, { .children_offset=42876, .match_offset=0 }, { .children_offset=42878, .match_offset=0 }, { .children_offset=42880, .match_offset=0 }, { .children_offset=42882, .match_offset=0 }, { .children_offset=42884, .match_offset=0 }, { .children_offset=42886, .match_offset=0 }, { .children_offset=42888, .match_offset=0 }, { .children_offset=0, .match_offset=46616 }, { .children_offset=0, .match_offset=88849 }, { .children_offset=42890, .match_offset=0 }, { .children_offset=42892, .match_offset=0 }, { .children_offset=42894, .match_offset=0 }, { .children_offset=42896, .match_offset=0 }, { .children_offset=42898, .match_offset=0 }, { .children_offset=42900, .match_offset=0 }, { .children_offset=0, .match_offset=136175 }, { .children_offset=0, .match_offset=20635 }, { .children_offset=42902, .match_offset=103367 }, { .children_offset=42904, .match_offset=0 }, { .children_offset=42906, .match_offset=0 }, { .children_offset=42908, .match_offset=0 }, { .children_offset=42910, .match_offset=11982 }, { .children_offset=42912, .match_offset=0 }, { .children_offset=0, .match_offset=64406 }, { .children_offset=42914, .match_offset=0 }, { .children_offset=42916, .match_offset=0 }, { .children_offset=0, .match_offset=74624 }, { .children_offset=0, .match_offset=35872 }, { .children_offset=0, .match_offset=34338 }, { .children_offset=42918, .match_offset=0 }, { .children_offset=42921, .match_offset=33232 }, { .children_offset=42924, .match_offset=0 }, { .children_offset=0, .match_offset=11915 }, { .children_offset=42926, .match_offset=0 }, { .children_offset=0, .match_offset=7721 }, { .children_offset=42928, .match_offset=0 }, { .children_offset=0, .match_offset=26001 }, { .children_offset=42930, .match_offset=0 }, { .children_offset=42932, .match_offset=5954 }, { .children_offset=42934, .match_offset=0 }, { .children_offset=42936, .match_offset=0 }, { .children_offset=0, .match_offset=6259 }, { .children_offset=42938, .match_offset=30780 }, { .children_offset=0, .match_offset=109450 }, { .children_offset=42951, .match_offset=0 }, { .children_offset=42953, .match_offset=0 }, { .children_offset=42955, .match_offset=0 }, { .children_offset=42957, .match_offset=0 }, { .children_offset=0, .match_offset=116214 }, { .children_offset=42959, .match_offset=0 }, { .children_offset=42961, .match_offset=0 }, { .children_offset=0, .match_offset=104044 }, { .children_offset=42963, .match_offset=0 }, { .children_offset=42966, .match_offset=0 }, { .children_offset=42968, .match_offset=0 }, { .children_offset=42970, .match_offset=0 }, { .children_offset=42972, .match_offset=0 }, { .children_offset=42974, .match_offset=0 }, { .children_offset=0, .match_offset=39040 }, { .children_offset=0, .match_offset=6399 }, { .children_offset=42976, .match_offset=0 }, { .children_offset=42978, .match_offset=0 }, { .children_offset=42980, .match_offset=0 }, { .children_offset=0, .match_offset=4887 }, { .children_offset=0, .match_offset=34428 }, { .children_offset=0, .match_offset=70824 }, { .children_offset=42982, .match_offset=68858 }, { .children_offset=0, .match_offset=131854 }, { .children_offset=0, .match_offset=72635 }, { .children_offset=0, .match_offset=90536 }, { .children_offset=42985, .match_offset=53476 }, { .children_offset=0, .match_offset=67581 }, { .children_offset=42987, .match_offset=8440 }, { .children_offset=42989, .match_offset=0 }, { .children_offset=42991, .match_offset=0 }, { .children_offset=42993, .match_offset=0 }, { .children_offset=42995, .match_offset=0 }, { .children_offset=42997, .match_offset=0 }, { .children_offset=42999, .match_offset=0 }, { .children_offset=0, .match_offset=109599 }, { .children_offset=0, .match_offset=61546 }, { .children_offset=0, .match_offset=131223 }, { .children_offset=43001, .match_offset=0 }, { .children_offset=43006, .match_offset=131842 }, { .children_offset=0, .match_offset=131613 }, { .children_offset=0, .match_offset=90665 }, { .children_offset=43008, .match_offset=88737 }, { .children_offset=0, .match_offset=90572 }, { .children_offset=43010, .match_offset=46233 }, { .children_offset=0, .match_offset=1249 }, { .children_offset=0, .match_offset=59994 }, { .children_offset=43013, .match_offset=21388 }, { .children_offset=0, .match_offset=122726 }, { .children_offset=0, .match_offset=68957 }, { .children_offset=0, .match_offset=8642 }, { .children_offset=43020, .match_offset=134495 }, { .children_offset=0, .match_offset=115492 }, { .children_offset=0, .match_offset=133193 }, { .children_offset=0, .match_offset=6212 }, { .children_offset=43022, .match_offset=45254 }, { .children_offset=43043, .match_offset=0 }, { .children_offset=0, .match_offset=26913 }, { .children_offset=0, .match_offset=60460 }, { .children_offset=0, .match_offset=80611 }, { .children_offset=0, .match_offset=30050 }, { .children_offset=0, .match_offset=52219 }, { .children_offset=0, .match_offset=1144 }, { .children_offset=0, .match_offset=15466 }, { .children_offset=43050, .match_offset=0 }, { .children_offset=0, .match_offset=49669 }, { .children_offset=43052, .match_offset=0 }, { .children_offset=43054, .match_offset=0 }, { .children_offset=43057, .match_offset=0 }, { .children_offset=0, .match_offset=55252 }, { .children_offset=43059, .match_offset=0 }, { .children_offset=43061, .match_offset=0 }, { .children_offset=43063, .match_offset=0 }, { .children_offset=0, .match_offset=29211 }, { .children_offset=43065, .match_offset=0 }, { .children_offset=43068, .match_offset=0 }, { .children_offset=43070, .match_offset=0 }, { .children_offset=43073, .match_offset=0 }, { .children_offset=0, .match_offset=127787 }, { .children_offset=0, .match_offset=8778 }, { .children_offset=43075, .match_offset=109127 }, { .children_offset=43077, .match_offset=0 }, { .children_offset=43079, .match_offset=0 }, { .children_offset=43081, .match_offset=0 }, { .children_offset=0, .match_offset=103822 }, { .children_offset=43083, .match_offset=113428 }, { .children_offset=0, .match_offset=42939 }, { .children_offset=0, .match_offset=90550 }, { .children_offset=0, .match_offset=68589 }, { .children_offset=43087, .match_offset=78324 }, { .children_offset=0, .match_offset=20170 }, { .children_offset=43092, .match_offset=0 }, { .children_offset=0, .match_offset=58948 }, { .children_offset=43094, .match_offset=0 }, { .children_offset=43096, .match_offset=6002 }, { .children_offset=0, .match_offset=89871 }, { .children_offset=0, .match_offset=89871 }, { .children_offset=43099, .match_offset=16944 }, { .children_offset=0, .match_offset=131383 }, { .children_offset=43102, .match_offset=0 }, { .children_offset=43104, .match_offset=0 }, { .children_offset=43106, .match_offset=0 }, { .children_offset=43108, .match_offset=0 }, { .children_offset=43110, .match_offset=0 }, { .children_offset=43112, .match_offset=0 }, { .children_offset=0, .match_offset=123873 }, { .children_offset=0, .match_offset=33003 }, { .children_offset=43114, .match_offset=0 }, { .children_offset=0, .match_offset=78596 }, { .children_offset=0, .match_offset=55214 }, { .children_offset=43117, .match_offset=0 }, { .children_offset=43123, .match_offset=0 }, { .children_offset=0, .match_offset=65845 }, { .children_offset=43125, .match_offset=0 }, { .children_offset=43127, .match_offset=0 }, { .children_offset=43129, .match_offset=0 }, { .children_offset=43131, .match_offset=0 }, { .children_offset=43133, .match_offset=0 }, { .children_offset=43135, .match_offset=0 }, { .children_offset=0, .match_offset=114903 }, { .children_offset=43137, .match_offset=0 }, { .children_offset=43139, .match_offset=0 }, { .children_offset=43141, .match_offset=0 }, { .children_offset=0, .match_offset=25529 }, { .children_offset=0, .match_offset=40448 }, { .children_offset=43143, .match_offset=0 }, { .children_offset=43145, .match_offset=0 }, { .children_offset=0, .match_offset=25985 }, { .children_offset=43147, .match_offset=12334 }, { .children_offset=43158, .match_offset=76981 }, { .children_offset=43161, .match_offset=0 }, { .children_offset=43163, .match_offset=0 }, { .children_offset=43165, .match_offset=0 }, { .children_offset=43167, .match_offset=0 }, { .children_offset=43169, .match_offset=0 }, { .children_offset=0, .match_offset=41864 }, { .children_offset=43171, .match_offset=0 }, { .children_offset=43173, .match_offset=0 }, { .children_offset=43175, .match_offset=0 }, { .children_offset=0, .match_offset=13883 }, { .children_offset=43177, .match_offset=0 }, { .children_offset=43179, .match_offset=0 }, { .children_offset=0, .match_offset=117555 }, { .children_offset=43181, .match_offset=104169 }, { .children_offset=0, .match_offset=104169 }, { .children_offset=43183, .match_offset=6519 }, { .children_offset=0, .match_offset=48227 }, { .children_offset=43185, .match_offset=0 }, { .children_offset=43187, .match_offset=0 }, { .children_offset=43189, .match_offset=0 }, { .children_offset=0, .match_offset=38931 }, { .children_offset=43191, .match_offset=116025 }, { .children_offset=0, .match_offset=69329 }, { .children_offset=43193, .match_offset=0 }, { .children_offset=0, .match_offset=109710 }, { .children_offset=43195, .match_offset=0 }, { .children_offset=43197, .match_offset=0 }, { .children_offset=43200, .match_offset=0 }, { .children_offset=43202, .match_offset=0 }, { .children_offset=43204, .match_offset=0 }, { .children_offset=43206, .match_offset=0 }, { .children_offset=0, .match_offset=133385 }, { .children_offset=43208, .match_offset=0 }, { .children_offset=0, .match_offset=1971 }, { .children_offset=43210, .match_offset=0 }, { .children_offset=43212, .match_offset=0 }, { .children_offset=43214, .match_offset=0 }, { .children_offset=0, .match_offset=60783 }, { .children_offset=43216, .match_offset=0 }, { .children_offset=43218, .match_offset=0 }, { .children_offset=43220, .match_offset=0 }, { .children_offset=43222, .match_offset=0 }, { .children_offset=43224, .match_offset=0 }, { .children_offset=43226, .match_offset=0 }, { .children_offset=43228, .match_offset=0 }, { .children_offset=43230, .match_offset=0 }, { .children_offset=0, .match_offset=131410 }, { .children_offset=43232, .match_offset=77278 }, { .children_offset=43241, .match_offset=0 }, { .children_offset=43243, .match_offset=0 }, { .children_offset=0, .match_offset=37167 }, { .children_offset=0, .match_offset=22683 }, { .children_offset=43245, .match_offset=0 }, { .children_offset=43248, .match_offset=0 }, { .children_offset=43250, .match_offset=0 }, { .children_offset=0, .match_offset=115584 }, { .children_offset=43252, .match_offset=0 }, { .children_offset=43254, .match_offset=130164 }, { .children_offset=43256, .match_offset=0 }, { .children_offset=43258, .match_offset=0 }, { .children_offset=43260, .match_offset=0 }, { .children_offset=43262, .match_offset=0 }, { .children_offset=0, .match_offset=134162 }, { .children_offset=43264, .match_offset=0 }, { .children_offset=43266, .match_offset=0 }, { .children_offset=43268, .match_offset=0 }, { .children_offset=0, .match_offset=60178 }, { .children_offset=43270, .match_offset=0 }, { .children_offset=43272, .match_offset=0 }, { .children_offset=43274, .match_offset=0 }, { .children_offset=0, .match_offset=54270 }, { .children_offset=43276, .match_offset=0 }, { .children_offset=43278, .match_offset=0 }, { .children_offset=43280, .match_offset=0 }, { .children_offset=43282, .match_offset=0 }, { .children_offset=43284, .match_offset=0 }, { .children_offset=43286, .match_offset=0 }, { .children_offset=0, .match_offset=109440 }, { .children_offset=43288, .match_offset=0 }, { .children_offset=43290, .match_offset=0 }, { .children_offset=43292, .match_offset=0 }, { .children_offset=43294, .match_offset=0 }, { .children_offset=43296, .match_offset=0 }, { .children_offset=43298, .match_offset=0 }, { .children_offset=43300, .match_offset=0 }, { .children_offset=0, .match_offset=90579 }, { .children_offset=43302, .match_offset=0 }, { .children_offset=43304, .match_offset=0 }, { .children_offset=43306, .match_offset=0 }, { .children_offset=43308, .match_offset=0 }, { .children_offset=0, .match_offset=74590 }, { .children_offset=43310, .match_offset=0 }, { .children_offset=43312, .match_offset=116522 }, { .children_offset=43314, .match_offset=0 }, { .children_offset=43325, .match_offset=0 }, { .children_offset=43328, .match_offset=0 }, { .children_offset=43330, .match_offset=0 }, { .children_offset=43332, .match_offset=0 }, { .children_offset=43334, .match_offset=0 }, { .children_offset=43336, .match_offset=0 }, { .children_offset=0, .match_offset=122520 }, { .children_offset=43338, .match_offset=0 }, { .children_offset=43340, .match_offset=0 }, { .children_offset=43342, .match_offset=0 }, { .children_offset=0, .match_offset=124881 }, { .children_offset=43344, .match_offset=0 }, { .children_offset=43346, .match_offset=0 }, { .children_offset=43348, .match_offset=0 }, { .children_offset=43350, .match_offset=0 }, { .children_offset=0, .match_offset=125689 }, { .children_offset=43352, .match_offset=0 }, { .children_offset=43354, .match_offset=0 }, { .children_offset=43356, .match_offset=0 }, { .children_offset=43358, .match_offset=0 }, { .children_offset=0, .match_offset=22664 }, { .children_offset=43360, .match_offset=0 }, { .children_offset=43364, .match_offset=0 }, { .children_offset=43366, .match_offset=0 }, { .children_offset=43368, .match_offset=0 }, { .children_offset=43370, .match_offset=0 }, { .children_offset=43372, .match_offset=0 }, { .children_offset=43374, .match_offset=0 }, { .children_offset=43376, .match_offset=0 }, { .children_offset=43378, .match_offset=0 }, { .children_offset=43380, .match_offset=0 }, { .children_offset=43382, .match_offset=0 }, { .children_offset=43384, .match_offset=0 }, { .children_offset=0, .match_offset=7495 }, { .children_offset=43386, .match_offset=0 }, { .children_offset=43388, .match_offset=0 }, { .children_offset=43390, .match_offset=0 }, { .children_offset=43392, .match_offset=0 }, { .children_offset=43394, .match_offset=0 }, { .children_offset=0, .match_offset=11462 }, { .children_offset=43396, .match_offset=0 }, { .children_offset=43398, .match_offset=0 }, { .children_offset=43400, .match_offset=0 }, { .children_offset=43402, .match_offset=0 }, { .children_offset=0, .match_offset=14626 }, { .children_offset=43404, .match_offset=0 }, { .children_offset=43406, .match_offset=0 }, { .children_offset=43408, .match_offset=0 }, { .children_offset=43410, .match_offset=0 }, { .children_offset=0, .match_offset=119233 }, { .children_offset=43412, .match_offset=0 }, { .children_offset=43414, .match_offset=0 }, { .children_offset=43416, .match_offset=0 }, { .children_offset=43418, .match_offset=0 }, { .children_offset=0, .match_offset=115723 }, { .children_offset=43420, .match_offset=0 }, { .children_offset=43424, .match_offset=0 }, { .children_offset=43426, .match_offset=0 }, { .children_offset=43428, .match_offset=0 }, { .children_offset=43430, .match_offset=0 }, { .children_offset=43432, .match_offset=0 }, { .children_offset=0, .match_offset=59084 }, { .children_offset=43434, .match_offset=0 }, { .children_offset=43436, .match_offset=0 }, { .children_offset=43438, .match_offset=0 }, { .children_offset=43440, .match_offset=0 }, { .children_offset=43442, .match_offset=0 }, { .children_offset=0, .match_offset=65197 }, { .children_offset=43444, .match_offset=0 }, { .children_offset=43446, .match_offset=0 }, { .children_offset=43448, .match_offset=0 }, { .children_offset=43450, .match_offset=27525 }, { .children_offset=43452, .match_offset=0 }, { .children_offset=43454, .match_offset=0 }, { .children_offset=43456, .match_offset=0 }, { .children_offset=43458, .match_offset=0 }, { .children_offset=43460, .match_offset=0 }, { .children_offset=43462, .match_offset=0 }, { .children_offset=0, .match_offset=122055 }, { .children_offset=43464, .match_offset=0 }, { .children_offset=43466, .match_offset=0 }, { .children_offset=43468, .match_offset=0 }, { .children_offset=43470, .match_offset=0 }, { .children_offset=0, .match_offset=57429 }, { .children_offset=43472, .match_offset=0 }, { .children_offset=43474, .match_offset=0 }, { .children_offset=43476, .match_offset=0 }, { .children_offset=43478, .match_offset=0 }, { .children_offset=43480, .match_offset=0 }, { .children_offset=43482, .match_offset=0 }, { .children_offset=43484, .match_offset=0 }, { .children_offset=43486, .match_offset=0 }, { .children_offset=0, .match_offset=30755 }, { .children_offset=43488, .match_offset=0 }, { .children_offset=43491, .match_offset=0 }, { .children_offset=43493, .match_offset=0 }, { .children_offset=43495, .match_offset=0 }, { .children_offset=43497, .match_offset=0 }, { .children_offset=43499, .match_offset=0 }, { .children_offset=0, .match_offset=10281 }, { .children_offset=43501, .match_offset=0 }, { .children_offset=43503, .match_offset=0 }, { .children_offset=43505, .match_offset=0 }, { .children_offset=43507, .match_offset=0 }, { .children_offset=0, .match_offset=108103 }, { .children_offset=0, .match_offset=44797 }, { .children_offset=43509, .match_offset=0 }, { .children_offset=43511, .match_offset=0 }, { .children_offset=43513, .match_offset=0 }, { .children_offset=43515, .match_offset=0 }, { .children_offset=0, .match_offset=26425 }, { .children_offset=43517, .match_offset=0 }, { .children_offset=0, .match_offset=73601 }, { .children_offset=43519, .match_offset=67693 }, { .children_offset=0, .match_offset=90616 }, { .children_offset=43521, .match_offset=55509 }, { .children_offset=43524, .match_offset=0 }, { .children_offset=43529, .match_offset=0 }, { .children_offset=43531, .match_offset=0 }, { .children_offset=43533, .match_offset=0 }, { .children_offset=0, .match_offset=104314 }, { .children_offset=43535, .match_offset=0 }, { .children_offset=43537, .match_offset=0 }, { .children_offset=43539, .match_offset=0 }, { .children_offset=43541, .match_offset=0 }, { .children_offset=43543, .match_offset=0 }, { .children_offset=0, .match_offset=118560 }, { .children_offset=43545, .match_offset=0 }, { .children_offset=43547, .match_offset=0 }, { .children_offset=43549, .match_offset=0 }, { .children_offset=43551, .match_offset=0 }, { .children_offset=43553, .match_offset=0 }, { .children_offset=0, .match_offset=104568 }, { .children_offset=43555, .match_offset=0 }, { .children_offset=43557, .match_offset=0 }, { .children_offset=43559, .match_offset=0 }, { .children_offset=43561, .match_offset=0 }, { .children_offset=43563, .match_offset=0 }, { .children_offset=0, .match_offset=37718 }, { .children_offset=43565, .match_offset=0 }, { .children_offset=43569, .match_offset=0 }, { .children_offset=43571, .match_offset=0 }, { .children_offset=43573, .match_offset=21988 }, { .children_offset=43575, .match_offset=0 }, { .children_offset=43577, .match_offset=123466 }, { .children_offset=43580, .match_offset=0 }, { .children_offset=0, .match_offset=85404 }, { .children_offset=0, .match_offset=28505 }, { .children_offset=0, .match_offset=61064 }, { .children_offset=43583, .match_offset=27694 }, { .children_offset=0, .match_offset=74433 }, { .children_offset=43585, .match_offset=43256 }, { .children_offset=43587, .match_offset=0 }, { .children_offset=43589, .match_offset=0 }, { .children_offset=43591, .match_offset=0 }, { .children_offset=43593, .match_offset=0 }, { .children_offset=43595, .match_offset=0 }, { .children_offset=43597, .match_offset=0 }, { .children_offset=43599, .match_offset=71935 }, { .children_offset=0, .match_offset=85228 }, { .children_offset=43601, .match_offset=0 }, { .children_offset=43603, .match_offset=0 }, { .children_offset=0, .match_offset=89682 }, { .children_offset=43605, .match_offset=0 }, { .children_offset=0, .match_offset=7092 }, { .children_offset=43607, .match_offset=0 }, { .children_offset=0, .match_offset=132842 }, { .children_offset=43609, .match_offset=30328 }, { .children_offset=43616, .match_offset=0 }, { .children_offset=43618, .match_offset=0 }, { .children_offset=43620, .match_offset=6148 }, { .children_offset=43622, .match_offset=0 }, { .children_offset=43624, .match_offset=0 }, { .children_offset=43626, .match_offset=0 }, { .children_offset=43628, .match_offset=0 }, { .children_offset=0, .match_offset=42049 }, { .children_offset=43630, .match_offset=0 }, { .children_offset=43632, .match_offset=0 }, { .children_offset=43634, .match_offset=0 }, { .children_offset=0, .match_offset=110970 }, { .children_offset=43636, .match_offset=118459 }, { .children_offset=43639, .match_offset=0 }, { .children_offset=0, .match_offset=25803 }, { .children_offset=0, .match_offset=85780 }, { .children_offset=43641, .match_offset=0 }, { .children_offset=43643, .match_offset=0 }, { .children_offset=43645, .match_offset=0 }, { .children_offset=43647, .match_offset=0 }, { .children_offset=0, .match_offset=54429 }, { .children_offset=43649, .match_offset=0 }, { .children_offset=43652, .match_offset=0 }, { .children_offset=0, .match_offset=12652 }, { .children_offset=43654, .match_offset=0 }, { .children_offset=0, .match_offset=58396 }, { .children_offset=43656, .match_offset=66445 }, { .children_offset=0, .match_offset=77282 }, { .children_offset=43658, .match_offset=0 }, { .children_offset=43664, .match_offset=0 }, { .children_offset=43669, .match_offset=0 }, { .children_offset=43671, .match_offset=0 }, { .children_offset=43673, .match_offset=0 }, { .children_offset=0, .match_offset=2138 }, { .children_offset=43675, .match_offset=0 }, { .children_offset=0, .match_offset=15705 }, { .children_offset=43677, .match_offset=0 }, { .children_offset=0, .match_offset=42471 }, { .children_offset=43679, .match_offset=0 }, { .children_offset=0, .match_offset=33998 }, { .children_offset=43682, .match_offset=0 }, { .children_offset=43684, .match_offset=0 }, { .children_offset=43686, .match_offset=0 }, { .children_offset=0, .match_offset=26940 }, { .children_offset=43688, .match_offset=0 }, { .children_offset=0, .match_offset=89134 }, { .children_offset=43692, .match_offset=0 }, { .children_offset=43694, .match_offset=90017 }, { .children_offset=43697, .match_offset=0 }, { .children_offset=43699, .match_offset=0 }, { .children_offset=0, .match_offset=35446 }, { .children_offset=0, .match_offset=58916 }, { .children_offset=43701, .match_offset=0 }, { .children_offset=43703, .match_offset=0 }, { .children_offset=0, .match_offset=27035 }, { .children_offset=43705, .match_offset=0 }, { .children_offset=43710, .match_offset=0 }, { .children_offset=0, .match_offset=37606 }, { .children_offset=43712, .match_offset=0 }, { .children_offset=43715, .match_offset=0 }, { .children_offset=0, .match_offset=73498 }, { .children_offset=43717, .match_offset=0 }, { .children_offset=43719, .match_offset=0 }, { .children_offset=0, .match_offset=104465 }, { .children_offset=43721, .match_offset=0 }, { .children_offset=43723, .match_offset=0 }, { .children_offset=43725, .match_offset=0 }, { .children_offset=43727, .match_offset=0 }, { .children_offset=0, .match_offset=72845 }, { .children_offset=43729, .match_offset=0 }, { .children_offset=0, .match_offset=34390 }, { .children_offset=43731, .match_offset=0 }, { .children_offset=43737, .match_offset=0 }, { .children_offset=0, .match_offset=60667 }, { .children_offset=43739, .match_offset=0 }, { .children_offset=0, .match_offset=61660 }, { .children_offset=43742, .match_offset=0 }, { .children_offset=43744, .match_offset=0 }, { .children_offset=0, .match_offset=26210 }, { .children_offset=43746, .match_offset=119219 }, { .children_offset=0, .match_offset=118656 }, { .children_offset=43748, .match_offset=0 }, { .children_offset=0, .match_offset=52261 }, { .children_offset=43750, .match_offset=104075 }, { .children_offset=43752, .match_offset=0 }, { .children_offset=0, .match_offset=50679 }, { .children_offset=43754, .match_offset=0 }, { .children_offset=0, .match_offset=124840 }, { .children_offset=43756, .match_offset=0 }, { .children_offset=43762, .match_offset=0 }, { .children_offset=43765, .match_offset=0 }, { .children_offset=43767, .match_offset=82082 }, { .children_offset=43771, .match_offset=0 }, { .children_offset=43773, .match_offset=0 }, { .children_offset=43775, .match_offset=0 }, { .children_offset=43777, .match_offset=0 }, { .children_offset=43779, .match_offset=0 }, { .children_offset=0, .match_offset=131558 }, { .children_offset=43781, .match_offset=0 }, { .children_offset=0, .match_offset=134853 }, { .children_offset=43783, .match_offset=0 }, { .children_offset=43785, .match_offset=0 }, { .children_offset=43787, .match_offset=0 }, { .children_offset=43789, .match_offset=0 }, { .children_offset=43791, .match_offset=0 }, { .children_offset=43793, .match_offset=0 }, { .children_offset=43795, .match_offset=0 }, { .children_offset=0, .match_offset=33969 }, { .children_offset=43797, .match_offset=0 }, { .children_offset=43799, .match_offset=78983 }, { .children_offset=0, .match_offset=114506 }, { .children_offset=43801, .match_offset=0 }, { .children_offset=43804, .match_offset=0 }, { .children_offset=0, .match_offset=87303 }, { .children_offset=43806, .match_offset=0 }, { .children_offset=43808, .match_offset=0 }, { .children_offset=43810, .match_offset=0 }, { .children_offset=43812, .match_offset=0 }, { .children_offset=0, .match_offset=48169 }, { .children_offset=43814, .match_offset=0 }, { .children_offset=0, .match_offset=134457 }, { .children_offset=43818, .match_offset=0 }, { .children_offset=0, .match_offset=130043 }, { .children_offset=43821, .match_offset=0 }, { .children_offset=43823, .match_offset=0 }, { .children_offset=0, .match_offset=65805 }, { .children_offset=43825, .match_offset=0 }, { .children_offset=43827, .match_offset=0 }, { .children_offset=43829, .match_offset=0 }, { .children_offset=43831, .match_offset=0 }, { .children_offset=0, .match_offset=37526 }, { .children_offset=43833, .match_offset=0 }, { .children_offset=43835, .match_offset=0 }, { .children_offset=43837, .match_offset=0 }, { .children_offset=43839, .match_offset=0 }, { .children_offset=0, .match_offset=8609 }, { .children_offset=43841, .match_offset=28609 }, { .children_offset=0, .match_offset=78200 }, { .children_offset=43843, .match_offset=0 }, { .children_offset=43847, .match_offset=131047 }, { .children_offset=43851, .match_offset=0 }, { .children_offset=0, .match_offset=27362 }, { .children_offset=43853, .match_offset=0 }, { .children_offset=0, .match_offset=133517 }, { .children_offset=0, .match_offset=122655 }, { .children_offset=43855, .match_offset=0 }, { .children_offset=43857, .match_offset=0 }, { .children_offset=43859, .match_offset=0 }, { .children_offset=43861, .match_offset=0 }, { .children_offset=43863, .match_offset=0 }, { .children_offset=0, .match_offset=31127 }, { .children_offset=43865, .match_offset=0 }, { .children_offset=43868, .match_offset=0 }, { .children_offset=0, .match_offset=58032 }, { .children_offset=43870, .match_offset=5282 }, { .children_offset=43874, .match_offset=0 }, { .children_offset=43876, .match_offset=0 }, { .children_offset=43878, .match_offset=0 }, { .children_offset=43880, .match_offset=0 }, { .children_offset=43882, .match_offset=0 }, { .children_offset=43884, .match_offset=0 }, { .children_offset=0, .match_offset=34716 }, { .children_offset=43886, .match_offset=0 }, { .children_offset=43888, .match_offset=0 }, { .children_offset=43890, .match_offset=0 }, { .children_offset=43892, .match_offset=0 }, { .children_offset=0, .match_offset=28084 }, { .children_offset=43894, .match_offset=0 }, { .children_offset=43896, .match_offset=0 }, { .children_offset=0, .match_offset=43734 }, { .children_offset=43898, .match_offset=63176 }, { .children_offset=43917, .match_offset=0 }, { .children_offset=0, .match_offset=6703 }, { .children_offset=0, .match_offset=74305 }, { .children_offset=0, .match_offset=57161 }, { .children_offset=0, .match_offset=5075 }, { .children_offset=0, .match_offset=48437 }, { .children_offset=0, .match_offset=34898 }, { .children_offset=0, .match_offset=122539 }, { .children_offset=43925, .match_offset=32863 }, { .children_offset=0, .match_offset=14313 }, { .children_offset=43927, .match_offset=0 }, { .children_offset=43931, .match_offset=0 }, { .children_offset=43933, .match_offset=0 }, { .children_offset=0, .match_offset=67336 }, { .children_offset=43935, .match_offset=0 }, { .children_offset=43937, .match_offset=0 }, { .children_offset=43939, .match_offset=0 }, { .children_offset=0, .match_offset=104009 }, { .children_offset=43941, .match_offset=0 }, { .children_offset=0, .match_offset=37512 }, { .children_offset=43943, .match_offset=61030 }, { .children_offset=43945, .match_offset=104541 }, { .children_offset=43950, .match_offset=0 }, { .children_offset=43952, .match_offset=0 }, { .children_offset=43954, .match_offset=0 }, { .children_offset=0, .match_offset=10999 }, { .children_offset=43956, .match_offset=0 }, { .children_offset=0, .match_offset=43134 }, { .children_offset=43958, .match_offset=0 }, { .children_offset=43960, .match_offset=0 }, { .children_offset=43962, .match_offset=0 }, { .children_offset=0, .match_offset=125751 }, { .children_offset=43964, .match_offset=0 }, { .children_offset=43966, .match_offset=0 }, { .children_offset=43968, .match_offset=0 }, { .children_offset=43970, .match_offset=0 }, { .children_offset=43972, .match_offset=0 }, { .children_offset=43974, .match_offset=0 }, { .children_offset=43976, .match_offset=0 }, { .children_offset=43978, .match_offset=0 }, { .children_offset=43980, .match_offset=0 }, { .children_offset=43982, .match_offset=0 }, { .children_offset=43984, .match_offset=0 }, { .children_offset=43986, .match_offset=0 }, { .children_offset=0, .match_offset=56575 }, { .children_offset=43988, .match_offset=0 }, { .children_offset=43990, .match_offset=0 }, { .children_offset=43992, .match_offset=0 }, { .children_offset=43994, .match_offset=0 }, { .children_offset=0, .match_offset=47989 }, { .children_offset=43996, .match_offset=35613 }, { .children_offset=44000, .match_offset=11047 }, { .children_offset=44002, .match_offset=0 }, { .children_offset=0, .match_offset=67531 }, { .children_offset=44004, .match_offset=0 }, { .children_offset=44006, .match_offset=0 }, { .children_offset=44008, .match_offset=0 }, { .children_offset=0, .match_offset=13050 }, { .children_offset=44010, .match_offset=0 }, { .children_offset=44012, .match_offset=109281 }, { .children_offset=44014, .match_offset=0 }, { .children_offset=0, .match_offset=27451 }, { .children_offset=44016, .match_offset=26909 }, { .children_offset=44018, .match_offset=0 }, { .children_offset=44020, .match_offset=0 }, { .children_offset=44022, .match_offset=0 }, { .children_offset=0, .match_offset=8505 }, { .children_offset=44024, .match_offset=35640 }, { .children_offset=0, .match_offset=14283 }, { .children_offset=44027, .match_offset=0 }, { .children_offset=44029, .match_offset=0 }, { .children_offset=0, .match_offset=26025 }, { .children_offset=44031, .match_offset=12772 }, { .children_offset=0, .match_offset=35113 }, { .children_offset=44033, .match_offset=33785 }, { .children_offset=0, .match_offset=6905 }, { .children_offset=0, .match_offset=45294 }, { .children_offset=44035, .match_offset=0 }, { .children_offset=0, .match_offset=8505 }, { .children_offset=0, .match_offset=57427 }, { .children_offset=0, .match_offset=15070 }, { .children_offset=44037, .match_offset=30765 }, { .children_offset=44041, .match_offset=0 }, { .children_offset=44044, .match_offset=0 }, { .children_offset=0, .match_offset=68629 }, { .children_offset=0, .match_offset=61719 }, { .children_offset=44046, .match_offset=0 }, { .children_offset=44048, .match_offset=0 }, { .children_offset=0, .match_offset=5359 }, { .children_offset=44050, .match_offset=0 }, { .children_offset=44052, .match_offset=72540 }, { .children_offset=44055, .match_offset=0 }, { .children_offset=44057, .match_offset=0 }, { .children_offset=44059, .match_offset=0 }, { .children_offset=44061, .match_offset=0 }, { .children_offset=44063, .match_offset=0 }, { .children_offset=44065, .match_offset=0 }, { .children_offset=0, .match_offset=20509 }, { .children_offset=44067, .match_offset=0 }, { .children_offset=44069, .match_offset=0 }, { .children_offset=0, .match_offset=133250 }, { .children_offset=44071, .match_offset=103458 }, { .children_offset=44073, .match_offset=0 }, { .children_offset=44075, .match_offset=0 }, { .children_offset=0, .match_offset=133260 }, { .children_offset=0, .match_offset=123744 }, { .children_offset=44077, .match_offset=50621 }, { .children_offset=44079, .match_offset=0 }, { .children_offset=44081, .match_offset=0 }, { .children_offset=44083, .match_offset=0 }, { .children_offset=0, .match_offset=28611 }, { .children_offset=44085, .match_offset=77758 }, { .children_offset=44096, .match_offset=0 }, { .children_offset=44102, .match_offset=0 }, { .children_offset=0, .match_offset=20237 }, { .children_offset=44105, .match_offset=0 }, { .children_offset=44107, .match_offset=0 }, { .children_offset=0, .match_offset=90632 }, { .children_offset=44109, .match_offset=0 }, { .children_offset=44111, .match_offset=35204 }, { .children_offset=44113, .match_offset=34523 }, { .children_offset=44115, .match_offset=0 }, { .children_offset=44117, .match_offset=0 }, { .children_offset=0, .match_offset=63718 }, { .children_offset=44119, .match_offset=0 }, { .children_offset=44121, .match_offset=0 }, { .children_offset=44123, .match_offset=0 }, { .children_offset=44125, .match_offset=0 }, { .children_offset=44127, .match_offset=0 }, { .children_offset=0, .match_offset=68617 }, { .children_offset=44129, .match_offset=68785 }, { .children_offset=44131, .match_offset=0 }, { .children_offset=44133, .match_offset=0 }, { .children_offset=44136, .match_offset=9874 }, { .children_offset=0, .match_offset=49891 }, { .children_offset=0, .match_offset=61600 }, { .children_offset=44139, .match_offset=0 }, { .children_offset=44141, .match_offset=0 }, { .children_offset=0, .match_offset=54274 }, { .children_offset=44143, .match_offset=0 }, { .children_offset=44145, .match_offset=0 }, { .children_offset=0, .match_offset=53783 }, { .children_offset=44147, .match_offset=0 }, { .children_offset=44153, .match_offset=0 }, { .children_offset=44156, .match_offset=0 }, { .children_offset=44160, .match_offset=0 }, { .children_offset=44162, .match_offset=0 }, { .children_offset=44164, .match_offset=0 }, { .children_offset=44166, .match_offset=0 }, { .children_offset=44168, .match_offset=0 }, { .children_offset=44170, .match_offset=0 }, { .children_offset=44172, .match_offset=0 }, { .children_offset=0, .match_offset=6130 }, { .children_offset=44174, .match_offset=0 }, { .children_offset=0, .match_offset=122574 }, { .children_offset=44176, .match_offset=0 }, { .children_offset=44178, .match_offset=0 }, { .children_offset=0, .match_offset=80189 }, { .children_offset=0, .match_offset=35117 }, { .children_offset=44180, .match_offset=0 }, { .children_offset=44182, .match_offset=0 }, { .children_offset=44184, .match_offset=0 }, { .children_offset=0, .match_offset=14362 }, { .children_offset=44186, .match_offset=0 }, { .children_offset=44189, .match_offset=0 }, { .children_offset=0, .match_offset=10206 }, { .children_offset=44191, .match_offset=0 }, { .children_offset=44193, .match_offset=0 }, { .children_offset=44195, .match_offset=0 }, { .children_offset=44197, .match_offset=0 }, { .children_offset=0, .match_offset=133564 }, { .children_offset=44199, .match_offset=0 }, { .children_offset=0, .match_offset=122551 }, { .children_offset=44201, .match_offset=0 }, { .children_offset=44203, .match_offset=0 }, { .children_offset=44205, .match_offset=0 }, { .children_offset=44207, .match_offset=0 }, { .children_offset=0, .match_offset=69107 }, { .children_offset=44209, .match_offset=0 }, { .children_offset=44211, .match_offset=0 }, { .children_offset=44213, .match_offset=0 }, { .children_offset=44215, .match_offset=0 }, { .children_offset=44217, .match_offset=0 }, { .children_offset=44219, .match_offset=0 }, { .children_offset=0, .match_offset=63423 }, { .children_offset=44221, .match_offset=0 }, { .children_offset=44226, .match_offset=0 }, { .children_offset=0, .match_offset=12610 }, { .children_offset=44228, .match_offset=0 }, { .children_offset=44230, .match_offset=0 }, { .children_offset=44232, .match_offset=46742 }, { .children_offset=0, .match_offset=22127 }, { .children_offset=44234, .match_offset=0 }, { .children_offset=0, .match_offset=87308 }, { .children_offset=44236, .match_offset=0 }, { .children_offset=44239, .match_offset=0 }, { .children_offset=0, .match_offset=350 }, { .children_offset=44242, .match_offset=0 }, { .children_offset=0, .match_offset=35773 }, { .children_offset=44244, .match_offset=0 }, { .children_offset=44246, .match_offset=22989 }, { .children_offset=44248, .match_offset=0 }, { .children_offset=0, .match_offset=131421 }, { .children_offset=44250, .match_offset=0 }, { .children_offset=44253, .match_offset=0 }, { .children_offset=44256, .match_offset=0 }, { .children_offset=44258, .match_offset=0 }, { .children_offset=44260, .match_offset=0 }, { .children_offset=44262, .match_offset=0 }, { .children_offset=0, .match_offset=469 }, { .children_offset=44264, .match_offset=0 }, { .children_offset=44266, .match_offset=0 }, { .children_offset=0, .match_offset=42899 }, { .children_offset=44268, .match_offset=0 }, { .children_offset=44270, .match_offset=118358 }, { .children_offset=44272, .match_offset=0 }, { .children_offset=44274, .match_offset=0 }, { .children_offset=44276, .match_offset=0 }, { .children_offset=0, .match_offset=37534 }, { .children_offset=44278, .match_offset=0 }, { .children_offset=44285, .match_offset=0 }, { .children_offset=44287, .match_offset=0 }, { .children_offset=0, .match_offset=73613 }, { .children_offset=44289, .match_offset=0 }, { .children_offset=44291, .match_offset=0 }, { .children_offset=0, .match_offset=132861 }, { .children_offset=44293, .match_offset=0 }, { .children_offset=0, .match_offset=68314 }, { .children_offset=0, .match_offset=22670 }, { .children_offset=44296, .match_offset=0 }, { .children_offset=44298, .match_offset=0 }, { .children_offset=0, .match_offset=28097 }, { .children_offset=0, .match_offset=77179 }, { .children_offset=44300, .match_offset=0 }, { .children_offset=44302, .match_offset=0 }, { .children_offset=44304, .match_offset=0 }, { .children_offset=44306, .match_offset=0 }, { .children_offset=0, .match_offset=110942 }, { .children_offset=44308, .match_offset=0 }, { .children_offset=44312, .match_offset=0 }, { .children_offset=44315, .match_offset=0 }, { .children_offset=0, .match_offset=80197 }, { .children_offset=44317, .match_offset=0 }, { .children_offset=44319, .match_offset=0 }, { .children_offset=44321, .match_offset=0 }, { .children_offset=44323, .match_offset=0 }, { .children_offset=44325, .match_offset=0 }, { .children_offset=44327, .match_offset=0 }, { .children_offset=44329, .match_offset=0 }, { .children_offset=0, .match_offset=63103 }, { .children_offset=44331, .match_offset=0 }, { .children_offset=44333, .match_offset=0 }, { .children_offset=44335, .match_offset=37213 }, { .children_offset=0, .match_offset=45961 }, { .children_offset=44337, .match_offset=0 }, { .children_offset=44339, .match_offset=0 }, { .children_offset=0, .match_offset=11045 }, { .children_offset=44341, .match_offset=0 }, { .children_offset=44343, .match_offset=0 }, { .children_offset=44345, .match_offset=0 }, { .children_offset=0, .match_offset=84846 }, { .children_offset=44347, .match_offset=0 }, { .children_offset=0, .match_offset=130944 }, { .children_offset=0, .match_offset=27035 }, { .children_offset=44349, .match_offset=0 }, { .children_offset=44354, .match_offset=0 }, { .children_offset=44357, .match_offset=0 }, { .children_offset=0, .match_offset=74307 }, { .children_offset=44359, .match_offset=0 }, { .children_offset=0, .match_offset=34360 }, { .children_offset=44361, .match_offset=0 }, { .children_offset=0, .match_offset=109115 }, { .children_offset=44363, .match_offset=0 }, { .children_offset=44365, .match_offset=0 }, { .children_offset=44368, .match_offset=22838 }, { .children_offset=0, .match_offset=16393 }, { .children_offset=44371, .match_offset=0 }, { .children_offset=44373, .match_offset=0 }, { .children_offset=44375, .match_offset=22838 }, { .children_offset=44377, .match_offset=0 }, { .children_offset=0, .match_offset=16393 }, { .children_offset=44379, .match_offset=61598 }, { .children_offset=0, .match_offset=44795 }, { .children_offset=44382, .match_offset=0 }, { .children_offset=44384, .match_offset=0 }, { .children_offset=44386, .match_offset=61598 }, { .children_offset=44388, .match_offset=0 }, { .children_offset=0, .match_offset=44795 }, { .children_offset=44390, .match_offset=64980 }, { .children_offset=44395, .match_offset=0 }, { .children_offset=44398, .match_offset=0 }, { .children_offset=44401, .match_offset=125948 }, { .children_offset=0, .match_offset=86093 }, { .children_offset=44406, .match_offset=0 }, { .children_offset=44408, .match_offset=0 }, { .children_offset=44410, .match_offset=0 }, { .children_offset=44412, .match_offset=0 }, { .children_offset=44414, .match_offset=0 }, { .children_offset=44416, .match_offset=0 }, { .children_offset=44418, .match_offset=0 }, { .children_offset=44420, .match_offset=0 }, { .children_offset=44422, .match_offset=0 }, { .children_offset=44424, .match_offset=0 }, { .children_offset=44426, .match_offset=0 }, { .children_offset=0, .match_offset=74307 }, { .children_offset=44428, .match_offset=132161 }, { .children_offset=44430, .match_offset=0 }, { .children_offset=44433, .match_offset=0 }, { .children_offset=44435, .match_offset=0 }, { .children_offset=44437, .match_offset=0 }, { .children_offset=44439, .match_offset=22838 }, { .children_offset=44441, .match_offset=0 }, { .children_offset=44443, .match_offset=0 }, { .children_offset=44445, .match_offset=0 }, { .children_offset=44447, .match_offset=0 }, { .children_offset=0, .match_offset=16393 }, { .children_offset=44449, .match_offset=0 }, { .children_offset=44451, .match_offset=0 }, { .children_offset=44453, .match_offset=0 }, { .children_offset=44455, .match_offset=0 }, { .children_offset=44457, .match_offset=0 }, { .children_offset=44459, .match_offset=61598 }, { .children_offset=44461, .match_offset=0 }, { .children_offset=44463, .match_offset=0 }, { .children_offset=44465, .match_offset=0 }, { .children_offset=44467, .match_offset=0 }, { .children_offset=0, .match_offset=44795 }, { .children_offset=44469, .match_offset=0 }, { .children_offset=44471, .match_offset=0 }, { .children_offset=44473, .match_offset=0 }, { .children_offset=44475, .match_offset=0 }, { .children_offset=0, .match_offset=34360 }, { .children_offset=0, .match_offset=5555 }, { .children_offset=0, .match_offset=72529 }, { .children_offset=44477, .match_offset=0 }, { .children_offset=44479, .match_offset=0 }, { .children_offset=44481, .match_offset=0 }, { .children_offset=44483, .match_offset=14983 }, { .children_offset=0, .match_offset=6651 }, { .children_offset=0, .match_offset=5555 }, { .children_offset=44485, .match_offset=0 }, { .children_offset=0, .match_offset=115758 }, { .children_offset=44490, .match_offset=0 }, { .children_offset=44492, .match_offset=0 }, { .children_offset=44494, .match_offset=0 }, { .children_offset=0, .match_offset=27959 }, { .children_offset=44496, .match_offset=0 }, { .children_offset=44498, .match_offset=0 }, { .children_offset=44500, .match_offset=0 }, { .children_offset=0, .match_offset=133253 }, { .children_offset=44502, .match_offset=0 }, { .children_offset=0, .match_offset=134359 }, { .children_offset=44504, .match_offset=134980 }, { .children_offset=44506, .match_offset=0 }, { .children_offset=44508, .match_offset=0 }, { .children_offset=0, .match_offset=46616 }, { .children_offset=44510, .match_offset=33241 }, { .children_offset=44521, .match_offset=12612 }, { .children_offset=0, .match_offset=52257 }, { .children_offset=44527, .match_offset=0 }, { .children_offset=44529, .match_offset=0 }, { .children_offset=44542, .match_offset=0 }, { .children_offset=44544, .match_offset=0 }, { .children_offset=44546, .match_offset=0 }, { .children_offset=44548, .match_offset=0 }, { .children_offset=0, .match_offset=55829 }, { .children_offset=44550, .match_offset=0 }, { .children_offset=44552, .match_offset=0 }, { .children_offset=44554, .match_offset=0 }, { .children_offset=44556, .match_offset=0 }, { .children_offset=44558, .match_offset=27056 }, { .children_offset=44560, .match_offset=0 }, { .children_offset=44562, .match_offset=0 }, { .children_offset=44564, .match_offset=0 }, { .children_offset=44566, .match_offset=0 }, { .children_offset=44568, .match_offset=0 }, { .children_offset=0, .match_offset=53590 }, { .children_offset=44570, .match_offset=0 }, { .children_offset=44572, .match_offset=0 }, { .children_offset=44574, .match_offset=0 }, { .children_offset=44576, .match_offset=0 }, { .children_offset=0, .match_offset=104062 }, { .children_offset=44578, .match_offset=0 }, { .children_offset=44580, .match_offset=0 }, { .children_offset=44582, .match_offset=0 }, { .children_offset=44584, .match_offset=0 }, { .children_offset=0, .match_offset=7374 }, { .children_offset=44586, .match_offset=0 }, { .children_offset=44588, .match_offset=0 }, { .children_offset=44590, .match_offset=0 }, { .children_offset=44592, .match_offset=0 }, { .children_offset=44594, .match_offset=0 }, { .children_offset=0, .match_offset=123841 }, { .children_offset=44596, .match_offset=0 }, { .children_offset=44598, .match_offset=0 }, { .children_offset=44600, .match_offset=0 }, { .children_offset=44602, .match_offset=0 }, { .children_offset=0, .match_offset=131645 }, { .children_offset=44604, .match_offset=0 }, { .children_offset=44606, .match_offset=0 }, { .children_offset=44608, .match_offset=0 }, { .children_offset=44610, .match_offset=0 }, { .children_offset=0, .match_offset=43929 }, { .children_offset=44612, .match_offset=0 }, { .children_offset=44614, .match_offset=0 }, { .children_offset=44616, .match_offset=0 }, { .children_offset=44618, .match_offset=0 }, { .children_offset=0, .match_offset=61017 }, { .children_offset=44620, .match_offset=0 }, { .children_offset=44622, .match_offset=0 }, { .children_offset=44624, .match_offset=0 }, { .children_offset=44626, .match_offset=0 }, { .children_offset=44628, .match_offset=122010 }, { .children_offset=44630, .match_offset=0 }, { .children_offset=44632, .match_offset=0 }, { .children_offset=44634, .match_offset=0 }, { .children_offset=44636, .match_offset=0 }, { .children_offset=44638, .match_offset=0 }, { .children_offset=44640, .match_offset=0 }, { .children_offset=44642, .match_offset=0 }, { .children_offset=0, .match_offset=38432 }, { .children_offset=44644, .match_offset=0 }, { .children_offset=44646, .match_offset=0 }, { .children_offset=44648, .match_offset=0 }, { .children_offset=44650, .match_offset=74681 }, { .children_offset=44652, .match_offset=0 }, { .children_offset=44656, .match_offset=0 }, { .children_offset=44658, .match_offset=0 }, { .children_offset=44660, .match_offset=0 }, { .children_offset=44662, .match_offset=0 }, { .children_offset=44664, .match_offset=0 }, { .children_offset=0, .match_offset=117527 }, { .children_offset=44666, .match_offset=0 }, { .children_offset=44668, .match_offset=0 }, { .children_offset=44670, .match_offset=0 }, { .children_offset=44672, .match_offset=0 }, { .children_offset=0, .match_offset=54247 }, { .children_offset=44674, .match_offset=0 }, { .children_offset=44676, .match_offset=0 }, { .children_offset=44678, .match_offset=0 }, { .children_offset=44680, .match_offset=0 }, { .children_offset=44682, .match_offset=0 }, { .children_offset=0, .match_offset=118556 }, { .children_offset=44684, .match_offset=0 }, { .children_offset=44687, .match_offset=0 }, { .children_offset=44689, .match_offset=0 }, { .children_offset=44691, .match_offset=0 }, { .children_offset=44693, .match_offset=0 }, { .children_offset=44695, .match_offset=0 }, { .children_offset=0, .match_offset=42267 }, { .children_offset=44697, .match_offset=0 }, { .children_offset=44699, .match_offset=0 }, { .children_offset=44701, .match_offset=0 }, { .children_offset=44703, .match_offset=0 }, { .children_offset=44705, .match_offset=81990 }, { .children_offset=44707, .match_offset=0 }, { .children_offset=44709, .match_offset=0 }, { .children_offset=44711, .match_offset=0 }, { .children_offset=44713, .match_offset=0 }, { .children_offset=44715, .match_offset=0 }, { .children_offset=0, .match_offset=90561 }, { .children_offset=44717, .match_offset=0 }, { .children_offset=44719, .match_offset=0 }, { .children_offset=44721, .match_offset=0 }, { .children_offset=44723, .match_offset=0 }, { .children_offset=44725, .match_offset=0 }, { .children_offset=44727, .match_offset=0 }, { .children_offset=44729, .match_offset=0 }, { .children_offset=44731, .match_offset=0 }, { .children_offset=44733, .match_offset=0 }, { .children_offset=44735, .match_offset=0 }, { .children_offset=0, .match_offset=63093 }, { .children_offset=0, .match_offset=26808 }, { .children_offset=0, .match_offset=76967 }, { .children_offset=0, .match_offset=71536 }, { .children_offset=44737, .match_offset=0 }, { .children_offset=0, .match_offset=45827 }, { .children_offset=44739, .match_offset=45921 }, { .children_offset=0, .match_offset=25934 }, { .children_offset=0, .match_offset=6999 }, { .children_offset=44744, .match_offset=0 }, { .children_offset=44746, .match_offset=0 }, { .children_offset=0, .match_offset=33969 }, { .children_offset=0, .match_offset=8971 }, { .children_offset=44748, .match_offset=0 }, { .children_offset=0, .match_offset=90197 }, { .children_offset=44751, .match_offset=0 }, { .children_offset=0, .match_offset=49883 }, { .children_offset=44753, .match_offset=118425 }, { .children_offset=44758, .match_offset=28448 }, { .children_offset=0, .match_offset=78657 }, { .children_offset=0, .match_offset=42242 }, { .children_offset=0, .match_offset=108218 }, { .children_offset=0, .match_offset=109714 }, { .children_offset=0, .match_offset=1889 }, { .children_offset=44761, .match_offset=0 }, { .children_offset=44763, .match_offset=0 }, { .children_offset=44765, .match_offset=0 }, { .children_offset=0, .match_offset=116235 }, { .children_offset=44767, .match_offset=42590 }, { .children_offset=0, .match_offset=40156 }, { .children_offset=0, .match_offset=119385 }, { .children_offset=0, .match_offset=14979 }, { .children_offset=44771, .match_offset=0 }, { .children_offset=44773, .match_offset=0 }, { .children_offset=44775, .match_offset=0 }, { .children_offset=0, .match_offset=67773 }, { .children_offset=44777, .match_offset=42066 }, { .children_offset=0, .match_offset=34284 }, { .children_offset=0, .match_offset=89975 }, { .children_offset=0, .match_offset=57250 }, { .children_offset=0, .match_offset=68291 }, { .children_offset=44782, .match_offset=12295 }, { .children_offset=0, .match_offset=35383 }, { .children_offset=44787, .match_offset=56971 }, { .children_offset=0, .match_offset=20290 }, { .children_offset=0, .match_offset=71574 }, { .children_offset=0, .match_offset=33924 }, { .children_offset=44789, .match_offset=33029 }, { .children_offset=0, .match_offset=26814 }, { .children_offset=44798, .match_offset=0 }, { .children_offset=44809, .match_offset=0 }, { .children_offset=44812, .match_offset=0 }, { .children_offset=44814, .match_offset=0 }, { .children_offset=44816, .match_offset=0 }, { .children_offset=44819, .match_offset=0 }, { .children_offset=44821, .match_offset=0 }, { .children_offset=44823, .match_offset=0 }, { .children_offset=44825, .match_offset=0 }, { .children_offset=44827, .match_offset=0 }, { .children_offset=0, .match_offset=65259 }, { .children_offset=0, .match_offset=58533 }, { .children_offset=44829, .match_offset=0 }, { .children_offset=44831, .match_offset=0 }, { .children_offset=0, .match_offset=125153 }, { .children_offset=44833, .match_offset=0 }, { .children_offset=44835, .match_offset=0 }, { .children_offset=44837, .match_offset=0 }, { .children_offset=0, .match_offset=117568 }, { .children_offset=44839, .match_offset=0 }, { .children_offset=0, .match_offset=113856 }, { .children_offset=44841, .match_offset=0 }, { .children_offset=44843, .match_offset=0 }, { .children_offset=44845, .match_offset=0 }, { .children_offset=44847, .match_offset=0 }, { .children_offset=0, .match_offset=81928 }, { .children_offset=44849, .match_offset=0 }, { .children_offset=44851, .match_offset=0 }, { .children_offset=44853, .match_offset=0 }, { .children_offset=0, .match_offset=130096 }, { .children_offset=44855, .match_offset=27854 }, { .children_offset=44857, .match_offset=9889 }, { .children_offset=44861, .match_offset=0 }, { .children_offset=44863, .match_offset=0 }, { .children_offset=0, .match_offset=25975 }, { .children_offset=44865, .match_offset=0 }, { .children_offset=44867, .match_offset=0 }, { .children_offset=0, .match_offset=16082 }, { .children_offset=44869, .match_offset=0 }, { .children_offset=44871, .match_offset=0 }, { .children_offset=44873, .match_offset=0 }, { .children_offset=44875, .match_offset=0 }, { .children_offset=0, .match_offset=123622 }, { .children_offset=44877, .match_offset=57187 }, { .children_offset=0, .match_offset=110395 }, { .children_offset=0, .match_offset=30140 }, { .children_offset=44883, .match_offset=0 }, { .children_offset=44885, .match_offset=0 }, { .children_offset=0, .match_offset=73611 }, { .children_offset=0, .match_offset=58589 }, { .children_offset=44887, .match_offset=134974 }, { .children_offset=44889, .match_offset=0 }, { .children_offset=44891, .match_offset=0 }, { .children_offset=0, .match_offset=125747 }, { .children_offset=44893, .match_offset=0 }, { .children_offset=44897, .match_offset=0 }, { .children_offset=44899, .match_offset=0 }, { .children_offset=0, .match_offset=29872 }, { .children_offset=44901, .match_offset=0 }, { .children_offset=44903, .match_offset=0 }, { .children_offset=0, .match_offset=53975 }, { .children_offset=44905, .match_offset=0 }, { .children_offset=0, .match_offset=58417 }, { .children_offset=44907, .match_offset=0 }, { .children_offset=44909, .match_offset=0 }, { .children_offset=44911, .match_offset=0 }, { .children_offset=0, .match_offset=34559 }, { .children_offset=44913, .match_offset=0 }, { .children_offset=44915, .match_offset=0 }, { .children_offset=44917, .match_offset=0 }, { .children_offset=0, .match_offset=31046 }, { .children_offset=0, .match_offset=60563 }, { .children_offset=44920, .match_offset=0 }, { .children_offset=44927, .match_offset=0 }, { .children_offset=44929, .match_offset=114609 }, { .children_offset=44932, .match_offset=0 }, { .children_offset=44934, .match_offset=0 }, { .children_offset=0, .match_offset=33306 }, { .children_offset=0, .match_offset=45090 }, { .children_offset=0, .match_offset=57574 }, { .children_offset=44936, .match_offset=0 }, { .children_offset=44938, .match_offset=0 }, { .children_offset=44940, .match_offset=0 }, { .children_offset=44942, .match_offset=0 }, { .children_offset=44944, .match_offset=0 }, { .children_offset=44946, .match_offset=0 }, { .children_offset=44948, .match_offset=0 }, { .children_offset=44950, .match_offset=0 }, { .children_offset=0, .match_offset=125533 }, { .children_offset=0, .match_offset=62612 }, { .children_offset=44952, .match_offset=0 }, { .children_offset=44954, .match_offset=0 }, { .children_offset=0, .match_offset=68285 }, { .children_offset=44956, .match_offset=0 }, { .children_offset=44958, .match_offset=0 }, { .children_offset=44960, .match_offset=0 }, { .children_offset=44962, .match_offset=0 }, { .children_offset=44964, .match_offset=0 }, { .children_offset=44966, .match_offset=0 }, { .children_offset=44968, .match_offset=0 }, { .children_offset=0, .match_offset=50363 }, { .children_offset=44970, .match_offset=0 }, { .children_offset=44976, .match_offset=0 }, { .children_offset=44978, .match_offset=2083 }, { .children_offset=44980, .match_offset=0 }, { .children_offset=44982, .match_offset=0 }, { .children_offset=0, .match_offset=123272 }, { .children_offset=44984, .match_offset=0 }, { .children_offset=44986, .match_offset=0 }, { .children_offset=0, .match_offset=60785 }, { .children_offset=44988, .match_offset=0 }, { .children_offset=0, .match_offset=24297 }, { .children_offset=0, .match_offset=20514 }, { .children_offset=44991, .match_offset=0 }, { .children_offset=44993, .match_offset=0 }, { .children_offset=0, .match_offset=23776 }, { .children_offset=44995, .match_offset=0 }, { .children_offset=44997, .match_offset=0 }, { .children_offset=44999, .match_offset=0 }, { .children_offset=0, .match_offset=62287 }, { .children_offset=45001, .match_offset=0 }, { .children_offset=45007, .match_offset=0 }, { .children_offset=0, .match_offset=77810 }, { .children_offset=45009, .match_offset=0 }, { .children_offset=0, .match_offset=114924 }, { .children_offset=45011, .match_offset=134734 }, { .children_offset=45014, .match_offset=0 }, { .children_offset=45017, .match_offset=0 }, { .children_offset=45019, .match_offset=0 }, { .children_offset=0, .match_offset=33045 }, { .children_offset=45021, .match_offset=0 }, { .children_offset=45023, .match_offset=0 }, { .children_offset=0, .match_offset=20276 }, { .children_offset=45025, .match_offset=0 }, { .children_offset=45027, .match_offset=0 }, { .children_offset=45029, .match_offset=0 }, { .children_offset=45031, .match_offset=0 }, { .children_offset=0, .match_offset=64759 }, { .children_offset=45033, .match_offset=0 }, { .children_offset=0, .match_offset=15018 }, { .children_offset=45035, .match_offset=0 }, { .children_offset=0, .match_offset=65292 }, { .children_offset=45037, .match_offset=0 }, { .children_offset=45043, .match_offset=0 }, { .children_offset=45048, .match_offset=0 }, { .children_offset=45050, .match_offset=0 }, { .children_offset=45052, .match_offset=0 }, { .children_offset=45054, .match_offset=0 }, { .children_offset=45056, .match_offset=0 }, { .children_offset=45058, .match_offset=0 }, { .children_offset=45060, .match_offset=0 }, { .children_offset=0, .match_offset=74436 }, { .children_offset=45062, .match_offset=0 }, { .children_offset=0, .match_offset=34392 }, { .children_offset=45066, .match_offset=0 }, { .children_offset=45068, .match_offset=0 }, { .children_offset=45070, .match_offset=135961 }, { .children_offset=45074, .match_offset=0 }, { .children_offset=45076, .match_offset=0 }, { .children_offset=45078, .match_offset=0 }, { .children_offset=45080, .match_offset=0 }, { .children_offset=45082, .match_offset=0 }, { .children_offset=45084, .match_offset=0 }, { .children_offset=0, .match_offset=25381 }, { .children_offset=45086, .match_offset=0 }, { .children_offset=45088, .match_offset=0 }, { .children_offset=45090, .match_offset=0 }, { .children_offset=0, .match_offset=63685 }, { .children_offset=45092, .match_offset=0 }, { .children_offset=45094, .match_offset=0 }, { .children_offset=0, .match_offset=42323 }, { .children_offset=45096, .match_offset=0 }, { .children_offset=45098, .match_offset=0 }, { .children_offset=0, .match_offset=123723 }, { .children_offset=45100, .match_offset=0 }, { .children_offset=45103, .match_offset=0 }, { .children_offset=45105, .match_offset=0 }, { .children_offset=0, .match_offset=126438 }, { .children_offset=45107, .match_offset=0 }, { .children_offset=45109, .match_offset=109434 }, { .children_offset=45111, .match_offset=0 }, { .children_offset=0, .match_offset=77847 }, { .children_offset=45113, .match_offset=32761 }, { .children_offset=45115, .match_offset=0 }, { .children_offset=45117, .match_offset=0 }, { .children_offset=45119, .match_offset=0 }, { .children_offset=45121, .match_offset=0 }, { .children_offset=0, .match_offset=134578 }, { .children_offset=45123, .match_offset=0 }, { .children_offset=45128, .match_offset=0 }, { .children_offset=45130, .match_offset=0 }, { .children_offset=45132, .match_offset=0 }, { .children_offset=0, .match_offset=16927 }, { .children_offset=45134, .match_offset=0 }, { .children_offset=45136, .match_offset=0 }, { .children_offset=45138, .match_offset=0 }, { .children_offset=0, .match_offset=122368 }, { .children_offset=45140, .match_offset=0 }, { .children_offset=0, .match_offset=49733 }, { .children_offset=45142, .match_offset=0 }, { .children_offset=45144, .match_offset=0 }, { .children_offset=45146, .match_offset=61842 }, { .children_offset=45148, .match_offset=0 }, { .children_offset=0, .match_offset=45885 }, { .children_offset=45150, .match_offset=0 }, { .children_offset=45155, .match_offset=0 }, { .children_offset=45157, .match_offset=0 }, { .children_offset=45159, .match_offset=0 }, { .children_offset=0, .match_offset=136152 }, { .children_offset=45161, .match_offset=0 }, { .children_offset=0, .match_offset=53573 }, { .children_offset=45163, .match_offset=0 }, { .children_offset=45165, .match_offset=32818 }, { .children_offset=45167, .match_offset=0 }, { .children_offset=45169, .match_offset=0 }, { .children_offset=45171, .match_offset=0 }, { .children_offset=45173, .match_offset=0 }, { .children_offset=45175, .match_offset=0 }, { .children_offset=45177, .match_offset=0 }, { .children_offset=0, .match_offset=12472 }, { .children_offset=45179, .match_offset=0 }, { .children_offset=0, .match_offset=33280 }, { .children_offset=45181, .match_offset=0 }, { .children_offset=0, .match_offset=12511 }, { .children_offset=45183, .match_offset=0 }, { .children_offset=45186, .match_offset=0 }, { .children_offset=45188, .match_offset=127066 }, { .children_offset=45191, .match_offset=0 }, { .children_offset=45201, .match_offset=130029 }, { .children_offset=0, .match_offset=125579 }, { .children_offset=0, .match_offset=65165 }, { .children_offset=0, .match_offset=13411 }, { .children_offset=0, .match_offset=64408 }, { .children_offset=0, .match_offset=77095 }, { .children_offset=0, .match_offset=114311 }, { .children_offset=0, .match_offset=43472 }, { .children_offset=0, .match_offset=111204 }, { .children_offset=0, .match_offset=14246 }, { .children_offset=0, .match_offset=116046 }, { .children_offset=0, .match_offset=133223 }, { .children_offset=45204, .match_offset=0 }, { .children_offset=0, .match_offset=29857 }, { .children_offset=45206, .match_offset=0 }, { .children_offset=45211, .match_offset=0 }, { .children_offset=45213, .match_offset=0 }, { .children_offset=45215, .match_offset=0 }, { .children_offset=45217, .match_offset=0 }, { .children_offset=45219, .match_offset=0 }, { .children_offset=0, .match_offset=35109 }, { .children_offset=45221, .match_offset=0 }, { .children_offset=45224, .match_offset=0 }, { .children_offset=0, .match_offset=61760 }, { .children_offset=0, .match_offset=30544 }, { .children_offset=45226, .match_offset=0 }, { .children_offset=45228, .match_offset=0 }, { .children_offset=45230, .match_offset=0 }, { .children_offset=0, .match_offset=118548 }, { .children_offset=45232, .match_offset=0 }, { .children_offset=0, .match_offset=73494 }, { .children_offset=45234, .match_offset=0 }, { .children_offset=0, .match_offset=13344 }, { .children_offset=45236, .match_offset=50294 }, { .children_offset=45256, .match_offset=0 }, { .children_offset=0, .match_offset=25776 }, { .children_offset=0, .match_offset=15281 }, { .children_offset=0, .match_offset=134465 }, { .children_offset=0, .match_offset=87701 }, { .children_offset=0, .match_offset=72781 }, { .children_offset=0, .match_offset=103397 }, { .children_offset=0, .match_offset=37183 }, { .children_offset=0, .match_offset=65788 }, { .children_offset=45265, .match_offset=48429 }, { .children_offset=0, .match_offset=39194 }, { .children_offset=45269, .match_offset=7024 }, { .children_offset=0, .match_offset=31002 }, { .children_offset=0, .match_offset=132787 }, { .children_offset=0, .match_offset=68983 }, { .children_offset=45272, .match_offset=20434 }, { .children_offset=45285, .match_offset=0 }, { .children_offset=45287, .match_offset=0 }, { .children_offset=0, .match_offset=53 }, { .children_offset=45289, .match_offset=45075 }, { .children_offset=45291, .match_offset=0 }, { .children_offset=45293, .match_offset=0 }, { .children_offset=0, .match_offset=63101 }, { .children_offset=45295, .match_offset=0 }, { .children_offset=45297, .match_offset=0 }, { .children_offset=45299, .match_offset=0 }, { .children_offset=45301, .match_offset=0 }, { .children_offset=0, .match_offset=69120 }, { .children_offset=45303, .match_offset=0 }, { .children_offset=45305, .match_offset=0 }, { .children_offset=0, .match_offset=104113 }, { .children_offset=45307, .match_offset=0 }, { .children_offset=45310, .match_offset=0 }, { .children_offset=45312, .match_offset=0 }, { .children_offset=0, .match_offset=14263 }, { .children_offset=45314, .match_offset=0 }, { .children_offset=45316, .match_offset=0 }, { .children_offset=45318, .match_offset=0 }, { .children_offset=45320, .match_offset=0 }, { .children_offset=0, .match_offset=112861 }, { .children_offset=0, .match_offset=6746 }, { .children_offset=45323, .match_offset=0 }, { .children_offset=45325, .match_offset=0 }, { .children_offset=45328, .match_offset=0 }, { .children_offset=45330, .match_offset=0 }, { .children_offset=45332, .match_offset=0 }, { .children_offset=45335, .match_offset=27867 }, { .children_offset=45337, .match_offset=0 }, { .children_offset=0, .match_offset=49 }, { .children_offset=0, .match_offset=103680 }, { .children_offset=45340, .match_offset=0 }, { .children_offset=45342, .match_offset=0 }, { .children_offset=0, .match_offset=89615 }, { .children_offset=45344, .match_offset=0 }, { .children_offset=45346, .match_offset=0 }, { .children_offset=45348, .match_offset=0 }, { .children_offset=0, .match_offset=26206 }, { .children_offset=45350, .match_offset=0 }, { .children_offset=45352, .match_offset=0 }, { .children_offset=45354, .match_offset=0 }, { .children_offset=0, .match_offset=129627 }, { .children_offset=45356, .match_offset=0 }, { .children_offset=0, .match_offset=61098 }, { .children_offset=45358, .match_offset=0 }, { .children_offset=45361, .match_offset=0 }, { .children_offset=45363, .match_offset=0 }, { .children_offset=0, .match_offset=62325 }, { .children_offset=45365, .match_offset=0 }, { .children_offset=45367, .match_offset=0 }, { .children_offset=45369, .match_offset=0 }, { .children_offset=45371, .match_offset=0 }, { .children_offset=45373, .match_offset=0 }, { .children_offset=0, .match_offset=81124 }, { .children_offset=45375, .match_offset=0 }, { .children_offset=45377, .match_offset=0 }, { .children_offset=45379, .match_offset=0 }, { .children_offset=0, .match_offset=46883 }, { .children_offset=45381, .match_offset=0 }, { .children_offset=45387, .match_offset=0 }, { .children_offset=45389, .match_offset=0 }, { .children_offset=45391, .match_offset=0 }, { .children_offset=45393, .match_offset=0 }, { .children_offset=0, .match_offset=13078 }, { .children_offset=45395, .match_offset=0 }, { .children_offset=45397, .match_offset=57739 }, { .children_offset=45400, .match_offset=0 }, { .children_offset=45402, .match_offset=14931 }, { .children_offset=0, .match_offset=90303 }, { .children_offset=45405, .match_offset=0 }, { .children_offset=45407, .match_offset=0 }, { .children_offset=0, .match_offset=14931 }, { .children_offset=45409, .match_offset=0 }, { .children_offset=45411, .match_offset=0 }, { .children_offset=45413, .match_offset=72850 }, { .children_offset=0, .match_offset=43672 }, { .children_offset=45415, .match_offset=0 }, { .children_offset=0, .match_offset=10306 }, { .children_offset=45417, .match_offset=0 }, { .children_offset=45419, .match_offset=0 }, { .children_offset=45421, .match_offset=0 }, { .children_offset=45423, .match_offset=0 }, { .children_offset=45425, .match_offset=0 }, { .children_offset=0, .match_offset=64390 }, { .children_offset=45428, .match_offset=0 }, { .children_offset=45430, .match_offset=0 }, { .children_offset=0, .match_offset=78547 }, { .children_offset=45432, .match_offset=0 }, { .children_offset=0, .match_offset=87155 }, { .children_offset=0, .match_offset=348 }, { .children_offset=45435, .match_offset=0 }, { .children_offset=45437, .match_offset=0 }, { .children_offset=45439, .match_offset=0 }, { .children_offset=0, .match_offset=135041 }, { .children_offset=45441, .match_offset=0 }, { .children_offset=45445, .match_offset=133591 }, { .children_offset=45451, .match_offset=0 }, { .children_offset=45453, .match_offset=0 }, { .children_offset=45455, .match_offset=0 }, { .children_offset=45457, .match_offset=0 }, { .children_offset=45459, .match_offset=0 }, { .children_offset=0, .match_offset=62542 }, { .children_offset=45461, .match_offset=0 }, { .children_offset=45463, .match_offset=0 }, { .children_offset=45465, .match_offset=0 }, { .children_offset=45467, .match_offset=0 }, { .children_offset=45469, .match_offset=0 }, { .children_offset=45471, .match_offset=0 }, { .children_offset=0, .match_offset=12035 }, { .children_offset=45473, .match_offset=0 }, { .children_offset=45476, .match_offset=0 }, { .children_offset=45478, .match_offset=28223 }, { .children_offset=45480, .match_offset=57167 }, { .children_offset=45484, .match_offset=0 }, { .children_offset=45486, .match_offset=0 }, { .children_offset=45488, .match_offset=0 }, { .children_offset=45490, .match_offset=0 }, { .children_offset=0, .match_offset=2229 }, { .children_offset=45492, .match_offset=0 }, { .children_offset=45494, .match_offset=0 }, { .children_offset=45496, .match_offset=0 }, { .children_offset=45498, .match_offset=0 }, { .children_offset=45500, .match_offset=0 }, { .children_offset=45502, .match_offset=0 }, { .children_offset=45504, .match_offset=0 }, { .children_offset=45506, .match_offset=0 }, { .children_offset=45508, .match_offset=0 }, { .children_offset=0, .match_offset=12035 }, { .children_offset=45510, .match_offset=0 }, { .children_offset=45512, .match_offset=0 }, { .children_offset=45514, .match_offset=0 }, { .children_offset=45516, .match_offset=0 }, { .children_offset=0, .match_offset=76965 }, { .children_offset=0, .match_offset=2229 }, { .children_offset=45518, .match_offset=0 }, { .children_offset=45522, .match_offset=0 }, { .children_offset=45524, .match_offset=0 }, { .children_offset=45526, .match_offset=0 }, { .children_offset=45528, .match_offset=0 }, { .children_offset=45530, .match_offset=0 }, { .children_offset=0, .match_offset=11564 }, { .children_offset=45532, .match_offset=0 }, { .children_offset=45534, .match_offset=0 }, { .children_offset=0, .match_offset=33276 }, { .children_offset=45536, .match_offset=0 }, { .children_offset=45538, .match_offset=0 }, { .children_offset=0, .match_offset=7100 }, { .children_offset=45540, .match_offset=0 }, { .children_offset=45542, .match_offset=0 }, { .children_offset=0, .match_offset=76965 }, { .children_offset=45544, .match_offset=0 }, { .children_offset=45546, .match_offset=0 }, { .children_offset=45548, .match_offset=0 }, { .children_offset=45550, .match_offset=0 }, { .children_offset=0, .match_offset=129312 }, { .children_offset=45552, .match_offset=68615 }, { .children_offset=45555, .match_offset=0 }, { .children_offset=0, .match_offset=14327 }, { .children_offset=45557, .match_offset=0 }, { .children_offset=45559, .match_offset=0 }, { .children_offset=0, .match_offset=24 }, { .children_offset=45561, .match_offset=49729 }, { .children_offset=0, .match_offset=44110 }, { .children_offset=0, .match_offset=131635 }, { .children_offset=45563, .match_offset=0 }, { .children_offset=45565, .match_offset=0 }, { .children_offset=0, .match_offset=74430 }, { .children_offset=45567, .match_offset=0 }, { .children_offset=45569, .match_offset=114046 }, { .children_offset=45571, .match_offset=0 }, { .children_offset=45573, .match_offset=0 }, { .children_offset=45575, .match_offset=0 }, { .children_offset=0, .match_offset=103379 }, { .children_offset=45577, .match_offset=0 }, { .children_offset=45579, .match_offset=70722 }, { .children_offset=0, .match_offset=52577 }, { .children_offset=45581, .match_offset=0 }, { .children_offset=45583, .match_offset=0 }, { .children_offset=45585, .match_offset=0 }, { .children_offset=0, .match_offset=116001 }, { .children_offset=45587, .match_offset=133311 }, { .children_offset=45590, .match_offset=0 }, { .children_offset=45592, .match_offset=0 }, { .children_offset=0, .match_offset=122324 }, { .children_offset=45594, .match_offset=0 }, { .children_offset=45597, .match_offset=0 }, { .children_offset=45599, .match_offset=0 }, { .children_offset=45601, .match_offset=0 }, { .children_offset=45603, .match_offset=0 }, { .children_offset=0, .match_offset=10031 }, { .children_offset=45605, .match_offset=0 }, { .children_offset=0, .match_offset=21815 }, { .children_offset=45607, .match_offset=29960 }, { .children_offset=45613, .match_offset=0 }, { .children_offset=45615, .match_offset=0 }, { .children_offset=45617, .match_offset=0 }, { .children_offset=45619, .match_offset=0 }, { .children_offset=45621, .match_offset=0 }, { .children_offset=0, .match_offset=28122 }, { .children_offset=45623, .match_offset=0 }, { .children_offset=45625, .match_offset=0 }, { .children_offset=45627, .match_offset=0 }, { .children_offset=45629, .match_offset=0 }, { .children_offset=45631, .match_offset=0 }, { .children_offset=0, .match_offset=38728 }, { .children_offset=45633, .match_offset=115397 }, { .children_offset=45635, .match_offset=0 }, { .children_offset=45637, .match_offset=0 }, { .children_offset=45639, .match_offset=0 }, { .children_offset=45641, .match_offset=0 }, { .children_offset=45643, .match_offset=0 }, { .children_offset=0, .match_offset=66512 }, { .children_offset=45645, .match_offset=0 }, { .children_offset=45647, .match_offset=0 }, { .children_offset=45649, .match_offset=0 }, { .children_offset=0, .match_offset=68759 }, { .children_offset=45651, .match_offset=0 }, { .children_offset=45653, .match_offset=0 }, { .children_offset=0, .match_offset=73632 }, { .children_offset=45655, .match_offset=65543 }, { .children_offset=0, .match_offset=46881 }, { .children_offset=0, .match_offset=65189 }, { .children_offset=45658, .match_offset=89548 }, { .children_offset=0, .match_offset=6914 }, { .children_offset=0, .match_offset=123205 }, { .children_offset=0, .match_offset=50711 }, { .children_offset=45671, .match_offset=0 }, { .children_offset=45674, .match_offset=0 }, { .children_offset=0, .match_offset=26059 }, { .children_offset=45676, .match_offset=0 }, { .children_offset=45678, .match_offset=0 }, { .children_offset=0, .match_offset=123460 }, { .children_offset=45680, .match_offset=44943 }, { .children_offset=45683, .match_offset=0 }, { .children_offset=45685, .match_offset=0 }, { .children_offset=0, .match_offset=42119 }, { .children_offset=45687, .match_offset=109434 }, { .children_offset=45693, .match_offset=0 }, { .children_offset=45695, .match_offset=0 }, { .children_offset=45697, .match_offset=0 }, { .children_offset=45699, .match_offset=0 }, { .children_offset=0, .match_offset=62646 }, { .children_offset=45701, .match_offset=0 }, { .children_offset=45703, .match_offset=0 }, { .children_offset=45705, .match_offset=0 }, { .children_offset=0, .match_offset=30481 }, { .children_offset=45707, .match_offset=0 }, { .children_offset=45709, .match_offset=0 }, { .children_offset=45711, .match_offset=0 }, { .children_offset=45713, .match_offset=0 }, { .children_offset=45715, .match_offset=0 }, { .children_offset=45717, .match_offset=0 }, { .children_offset=0, .match_offset=87815 }, { .children_offset=45719, .match_offset=0 }, { .children_offset=45722, .match_offset=0 }, { .children_offset=45724, .match_offset=0 }, { .children_offset=45726, .match_offset=0 }, { .children_offset=45728, .match_offset=0 }, { .children_offset=0, .match_offset=109802 }, { .children_offset=45730, .match_offset=0 }, { .children_offset=45732, .match_offset=57535 }, { .children_offset=45734, .match_offset=0 }, { .children_offset=45736, .match_offset=0 }, { .children_offset=45738, .match_offset=0 }, { .children_offset=45740, .match_offset=0 }, { .children_offset=0, .match_offset=52539 }, { .children_offset=45742, .match_offset=0 }, { .children_offset=45744, .match_offset=0 }, { .children_offset=45747, .match_offset=0 }, { .children_offset=45749, .match_offset=0 }, { .children_offset=45751, .match_offset=0 }, { .children_offset=45753, .match_offset=0 }, { .children_offset=0, .match_offset=22036 }, { .children_offset=45755, .match_offset=0 }, { .children_offset=0, .match_offset=62622 }, { .children_offset=45757, .match_offset=0 }, { .children_offset=45759, .match_offset=0 }, { .children_offset=45762, .match_offset=0 }, { .children_offset=0, .match_offset=125011 }, { .children_offset=45764, .match_offset=0 }, { .children_offset=0, .match_offset=135829 }, { .children_offset=45766, .match_offset=0 }, { .children_offset=45768, .match_offset=0 }, { .children_offset=45770, .match_offset=0 }, { .children_offset=0, .match_offset=33317 }, { .children_offset=45772, .match_offset=0 }, { .children_offset=45774, .match_offset=0 }, { .children_offset=45776, .match_offset=0 }, { .children_offset=0, .match_offset=80596 }, { .children_offset=45778, .match_offset=0 }, { .children_offset=0, .match_offset=103718 }, { .children_offset=45780, .match_offset=0 }, { .children_offset=45782, .match_offset=0 }, { .children_offset=45784, .match_offset=0 }, { .children_offset=0, .match_offset=5612 }, { .children_offset=45786, .match_offset=0 }, { .children_offset=45788, .match_offset=0 }, { .children_offset=45790, .match_offset=0 }, { .children_offset=45792, .match_offset=0 }, { .children_offset=45794, .match_offset=0 }, { .children_offset=45796, .match_offset=0 }, { .children_offset=45798, .match_offset=0 }, { .children_offset=0, .match_offset=10200 }, { .children_offset=45800, .match_offset=0 }, { .children_offset=45804, .match_offset=0 }, { .children_offset=45806, .match_offset=4939 }, { .children_offset=45809, .match_offset=0 }, { .children_offset=45811, .match_offset=52539 }, { .children_offset=0, .match_offset=29977 }, { .children_offset=45813, .match_offset=0 }, { .children_offset=45815, .match_offset=0 }, { .children_offset=45817, .match_offset=12044 }, { .children_offset=0, .match_offset=78401 }, { .children_offset=45819, .match_offset=0 }, { .children_offset=0, .match_offset=135798 }, { .children_offset=45821, .match_offset=0 }, { .children_offset=0, .match_offset=58030 }, { .children_offset=0, .match_offset=35172 }, { .children_offset=45824, .match_offset=102871 }, { .children_offset=0, .match_offset=64765 }, { .children_offset=45832, .match_offset=0 }, { .children_offset=45834, .match_offset=0 }, { .children_offset=0, .match_offset=8903 }, { .children_offset=0, .match_offset=109445 }, { .children_offset=45836, .match_offset=0 }, { .children_offset=45839, .match_offset=0 }, { .children_offset=45841, .match_offset=0 }, { .children_offset=0, .match_offset=134347 }, { .children_offset=45843, .match_offset=0 }, { .children_offset=0, .match_offset=50697 }, { .children_offset=45845, .match_offset=0 }, { .children_offset=45847, .match_offset=0 }, { .children_offset=45850, .match_offset=0 }, { .children_offset=45852, .match_offset=0 }, { .children_offset=45854, .match_offset=0 }, { .children_offset=45856, .match_offset=0 }, { .children_offset=0, .match_offset=44426 }, { .children_offset=45858, .match_offset=0 }, { .children_offset=45860, .match_offset=0 }, { .children_offset=0, .match_offset=78000 }, { .children_offset=0, .match_offset=9029 }, { .children_offset=45862, .match_offset=0 }, { .children_offset=0, .match_offset=65592 }, { .children_offset=45864, .match_offset=0 }, { .children_offset=45867, .match_offset=0 }, { .children_offset=0, .match_offset=58607 }, { .children_offset=45869, .match_offset=0 }, { .children_offset=45871, .match_offset=0 }, { .children_offset=45873, .match_offset=0 }, { .children_offset=45875, .match_offset=0 }, { .children_offset=45877, .match_offset=0 }, { .children_offset=45879, .match_offset=0 }, { .children_offset=0, .match_offset=28442 }, { .children_offset=45881, .match_offset=135831 }, { .children_offset=45883, .match_offset=0 }, { .children_offset=0, .match_offset=124993 }, { .children_offset=0, .match_offset=124968 }, { .children_offset=0, .match_offset=111074 }, { .children_offset=45885, .match_offset=63687 }, { .children_offset=45887, .match_offset=0 }, { .children_offset=45890, .match_offset=0 }, { .children_offset=45892, .match_offset=0 }, { .children_offset=45894, .match_offset=0 }, { .children_offset=0, .match_offset=5502 }, { .children_offset=45896, .match_offset=0 }, { .children_offset=45898, .match_offset=0 }, { .children_offset=0, .match_offset=37675 }, { .children_offset=45900, .match_offset=42112 }, { .children_offset=45909, .match_offset=85222 }, { .children_offset=0, .match_offset=44983 }, { .children_offset=0, .match_offset=42327 }, { .children_offset=45915, .match_offset=0 }, { .children_offset=45917, .match_offset=0 }, { .children_offset=45919, .match_offset=0 }, { .children_offset=45921, .match_offset=0 }, { .children_offset=0, .match_offset=33375 }, { .children_offset=45923, .match_offset=0 }, { .children_offset=45926, .match_offset=0 }, { .children_offset=0, .match_offset=81070 }, { .children_offset=45928, .match_offset=10278 }, { .children_offset=45930, .match_offset=0 }, { .children_offset=0, .match_offset=22654 }, { .children_offset=45932, .match_offset=0 }, { .children_offset=0, .match_offset=22550 }, { .children_offset=45934, .match_offset=123101 }, { .children_offset=45937, .match_offset=0 }, { .children_offset=0, .match_offset=135952 }, { .children_offset=45939, .match_offset=0 }, { .children_offset=0, .match_offset=68387 }, { .children_offset=0, .match_offset=68283 }, { .children_offset=45941, .match_offset=123714 }, { .children_offset=0, .match_offset=125241 }, { .children_offset=45945, .match_offset=0 }, { .children_offset=45948, .match_offset=0 }, { .children_offset=45951, .match_offset=0 }, { .children_offset=0, .match_offset=74582 }, { .children_offset=45953, .match_offset=0 }, { .children_offset=45955, .match_offset=0 }, { .children_offset=0, .match_offset=38777 }, { .children_offset=45957, .match_offset=0 }, { .children_offset=45959, .match_offset=0 }, { .children_offset=45961, .match_offset=0 }, { .children_offset=0, .match_offset=123243 }, { .children_offset=45963, .match_offset=0 }, { .children_offset=0, .match_offset=50036 }, { .children_offset=45965, .match_offset=0 }, { .children_offset=45967, .match_offset=0 }, { .children_offset=45969, .match_offset=0 }, { .children_offset=0, .match_offset=124782 }, { .children_offset=45971, .match_offset=127772 }, { .children_offset=0, .match_offset=14961 }, { .children_offset=45974, .match_offset=0 }, { .children_offset=45976, .match_offset=121852 }, { .children_offset=0, .match_offset=77920 }, { .children_offset=45978, .match_offset=0 }, { .children_offset=45980, .match_offset=0 }, { .children_offset=0, .match_offset=28699 }, { .children_offset=0, .match_offset=80568 }, { .children_offset=45982, .match_offset=61770 }, { .children_offset=0, .match_offset=20282 }, { .children_offset=0, .match_offset=20316 }, { .children_offset=45993, .match_offset=0 }, { .children_offset=45996, .match_offset=0 }, { .children_offset=45998, .match_offset=0 }, { .children_offset=46000, .match_offset=0 }, { .children_offset=46003, .match_offset=0 }, { .children_offset=46005, .match_offset=0 }, { .children_offset=0, .match_offset=23050 }, { .children_offset=46007, .match_offset=0 }, { .children_offset=46009, .match_offset=74731 }, { .children_offset=0, .match_offset=57255 }, { .children_offset=46011, .match_offset=0 }, { .children_offset=46013, .match_offset=0 }, { .children_offset=0, .match_offset=80507 }, { .children_offset=46015, .match_offset=0 }, { .children_offset=46018, .match_offset=0 }, { .children_offset=46020, .match_offset=0 }, { .children_offset=46022, .match_offset=104570 }, { .children_offset=46025, .match_offset=0 }, { .children_offset=46035, .match_offset=114225 }, { .children_offset=0, .match_offset=135936 }, { .children_offset=0, .match_offset=13837 }, { .children_offset=0, .match_offset=16373 }, { .children_offset=0, .match_offset=42992 }, { .children_offset=0, .match_offset=89634 }, { .children_offset=0, .match_offset=62694 }, { .children_offset=0, .match_offset=124691 }, { .children_offset=0, .match_offset=61643 }, { .children_offset=0, .match_offset=103131 }, { .children_offset=0, .match_offset=108098 }, { .children_offset=46046, .match_offset=122347 }, { .children_offset=0, .match_offset=116044 }, { .children_offset=0, .match_offset=68882 }, { .children_offset=0, .match_offset=78543 }, { .children_offset=0, .match_offset=12672 }, { .children_offset=0, .match_offset=114900 }, { .children_offset=0, .match_offset=368 }, { .children_offset=0, .match_offset=69024 }, { .children_offset=0, .match_offset=78484 }, { .children_offset=0, .match_offset=46774 }, { .children_offset=46056, .match_offset=26816 }, { .children_offset=0, .match_offset=104354 }, { .children_offset=0, .match_offset=11053 }, { .children_offset=0, .match_offset=27858 }, { .children_offset=0, .match_offset=38128 }, { .children_offset=0, .match_offset=28424 }, { .children_offset=0, .match_offset=126405 }, { .children_offset=46063, .match_offset=49248 }, { .children_offset=0, .match_offset=37153 }, { .children_offset=0, .match_offset=131887 }, { .children_offset=0, .match_offset=131550 }, { .children_offset=0, .match_offset=73257 }, { .children_offset=0, .match_offset=28460 }, { .children_offset=0, .match_offset=22638 }, { .children_offset=0, .match_offset=22044 }, { .children_offset=46071, .match_offset=68756 }, { .children_offset=0, .match_offset=90542 }, { .children_offset=0, .match_offset=119605 }, { .children_offset=0, .match_offset=77397 }, { .children_offset=0, .match_offset=108083 }, { .children_offset=0, .match_offset=119566 }, { .children_offset=0, .match_offset=70907 }, { .children_offset=0, .match_offset=134344 }, { .children_offset=0, .match_offset=133444 }, { .children_offset=0, .match_offset=37176 }, { .children_offset=0, .match_offset=74174 }, { .children_offset=46077, .match_offset=0 }, { .children_offset=46079, .match_offset=0 }, { .children_offset=46081, .match_offset=0 }, { .children_offset=46083, .match_offset=0 }, { .children_offset=46086, .match_offset=0 }, { .children_offset=0, .match_offset=33375 }, { .children_offset=0, .match_offset=72134 }, { .children_offset=46088, .match_offset=0 }, { .children_offset=46093, .match_offset=0 }, { .children_offset=46096, .match_offset=0 }, { .children_offset=0, .match_offset=135513 }, { .children_offset=46098, .match_offset=0 }, { .children_offset=46101, .match_offset=0 }, { .children_offset=0, .match_offset=89245 }, { .children_offset=46103, .match_offset=0 }, { .children_offset=46105, .match_offset=0 }, { .children_offset=46107, .match_offset=0 }, { .children_offset=0, .match_offset=1867 }, { .children_offset=46109, .match_offset=0 }, { .children_offset=46111, .match_offset=0 }, { .children_offset=46113, .match_offset=0 }, { .children_offset=46115, .match_offset=0 }, { .children_offset=46117, .match_offset=0 }, { .children_offset=46119, .match_offset=0 }, { .children_offset=46121, .match_offset=0 }, { .children_offset=0, .match_offset=114056 }, { .children_offset=46123, .match_offset=0 }, { .children_offset=46125, .match_offset=0 }, { .children_offset=46127, .match_offset=0 }, { .children_offset=46129, .match_offset=0 }, { .children_offset=46131, .match_offset=0 }, { .children_offset=0, .match_offset=32900 }, { .children_offset=46133, .match_offset=0 }, { .children_offset=46135, .match_offset=0 }, { .children_offset=46137, .match_offset=0 }, { .children_offset=0, .match_offset=5948 }, { .children_offset=46139, .match_offset=0 }, { .children_offset=46141, .match_offset=0 }, { .children_offset=46143, .match_offset=0 }, { .children_offset=0, .match_offset=64138 }, { .children_offset=0, .match_offset=129865 }, { .children_offset=46145, .match_offset=65214 }, { .children_offset=46149, .match_offset=0 }, { .children_offset=46152, .match_offset=0 }, { .children_offset=0, .match_offset=60324 }, { .children_offset=46154, .match_offset=0 }, { .children_offset=46156, .match_offset=0 }, { .children_offset=0, .match_offset=131505 }, { .children_offset=46158, .match_offset=0 }, { .children_offset=46160, .match_offset=5994 }, { .children_offset=46162, .match_offset=0 }, { .children_offset=46164, .match_offset=0 }, { .children_offset=46166, .match_offset=0 }, { .children_offset=0, .match_offset=38879 }, { .children_offset=0, .match_offset=88843 }, { .children_offset=0, .match_offset=63616 }, { .children_offset=0, .match_offset=59998 }, { .children_offset=46168, .match_offset=26791 }, { .children_offset=46177, .match_offset=111185 }, { .children_offset=0, .match_offset=55299 }, { .children_offset=46179, .match_offset=113865 }, { .children_offset=0, .match_offset=1909 }, { .children_offset=0, .match_offset=114873 }, { .children_offset=46181, .match_offset=0 }, { .children_offset=46183, .match_offset=0 }, { .children_offset=0, .match_offset=114956 }, { .children_offset=0, .match_offset=72861 }, { .children_offset=0, .match_offset=58344 }, { .children_offset=46185, .match_offset=0 }, { .children_offset=0, .match_offset=104163 }, { .children_offset=0, .match_offset=129449 }, { .children_offset=0, .match_offset=129918 }, { .children_offset=46188, .match_offset=0 }, { .children_offset=46213, .match_offset=0 }, { .children_offset=46216, .match_offset=0 }, { .children_offset=46218, .match_offset=0 }, { .children_offset=0, .match_offset=113823 }, { .children_offset=46220, .match_offset=0 }, { .children_offset=46222, .match_offset=0 }, { .children_offset=46224, .match_offset=0 }, { .children_offset=46226, .match_offset=0 }, { .children_offset=0, .match_offset=90618 }, { .children_offset=46228, .match_offset=0 }, { .children_offset=46233, .match_offset=0 }, { .children_offset=0, .match_offset=43912 }, { .children_offset=0, .match_offset=34886 }, { .children_offset=46243, .match_offset=57935 }, { .children_offset=0, .match_offset=16197 }, { .children_offset=0, .match_offset=12546 }, { .children_offset=0, .match_offset=45982 }, { .children_offset=0, .match_offset=23909 }, { .children_offset=46245, .match_offset=6405 }, { .children_offset=0, .match_offset=78327 }, { .children_offset=46247, .match_offset=77337 }, { .children_offset=0, .match_offset=25942 }, { .children_offset=46249, .match_offset=46196 }, { .children_offset=0, .match_offset=55285 }, { .children_offset=46251, .match_offset=0 }, { .children_offset=0, .match_offset=59145 }, { .children_offset=46262, .match_offset=28454 }, { .children_offset=0, .match_offset=112710 }, { .children_offset=0, .match_offset=104103 }, { .children_offset=0, .match_offset=5547 }, { .children_offset=0, .match_offset=81085 }, { .children_offset=0, .match_offset=129418 }, { .children_offset=46264, .match_offset=57952 }, { .children_offset=0, .match_offset=50199 }, { .children_offset=0, .match_offset=32744 }, { .children_offset=0, .match_offset=45109 }, { .children_offset=0, .match_offset=78990 }, { .children_offset=46266, .match_offset=0 }, { .children_offset=0, .match_offset=360 }, { .children_offset=0, .match_offset=45100 }, { .children_offset=0, .match_offset=59164 }, { .children_offset=0, .match_offset=119215 }, { .children_offset=0, .match_offset=108170 }, { .children_offset=0, .match_offset=28095 }, { .children_offset=0, .match_offset=24325 }, { .children_offset=0, .match_offset=85269 }, { .children_offset=0, .match_offset=55277 }, { .children_offset=0, .match_offset=34436 }, { .children_offset=46277, .match_offset=0 }, { .children_offset=0, .match_offset=6738 }, { .children_offset=0, .match_offset=125178 }, { .children_offset=46285, .match_offset=35319 }, { .children_offset=0, .match_offset=25924 }, { .children_offset=46287, .match_offset=42665 }, { .children_offset=0, .match_offset=16068 }, { .children_offset=0, .match_offset=130925 }, { .children_offset=0, .match_offset=8660 }, { .children_offset=0, .match_offset=28695 }, { .children_offset=46289, .match_offset=27249 }, { .children_offset=46314, .match_offset=0 }, { .children_offset=0, .match_offset=102934 }, { .children_offset=0, .match_offset=133503 }, { .children_offset=0, .match_offset=13357 }, { .children_offset=0, .match_offset=132142 }, { .children_offset=46320, .match_offset=0 }, { .children_offset=46322, .match_offset=0 }, { .children_offset=0, .match_offset=34635 }, { .children_offset=0, .match_offset=8463 }, { .children_offset=46324, .match_offset=103121 }, { .children_offset=0, .match_offset=35760 }, { .children_offset=0, .match_offset=13892 }, { .children_offset=46331, .match_offset=0 }, { .children_offset=46333, .match_offset=0 }, { .children_offset=46335, .match_offset=0 }, { .children_offset=0, .match_offset=24346 }, { .children_offset=0, .match_offset=8503 }, { .children_offset=0, .match_offset=35472 }, { .children_offset=46337, .match_offset=0 }, { .children_offset=46339, .match_offset=0 }, { .children_offset=46341, .match_offset=0 }, { .children_offset=0, .match_offset=15448 }, { .children_offset=46343, .match_offset=110336 }, { .children_offset=46347, .match_offset=0 }, { .children_offset=0, .match_offset=56839 }, { .children_offset=0, .match_offset=35903 }, { .children_offset=46349, .match_offset=0 }, { .children_offset=46351, .match_offset=0 }, { .children_offset=46353, .match_offset=0 }, { .children_offset=46355, .match_offset=0 }, { .children_offset=46357, .match_offset=0 }, { .children_offset=46359, .match_offset=0 }, { .children_offset=0, .match_offset=74216 }, { .children_offset=46361, .match_offset=0 }, { .children_offset=0, .match_offset=64441 }, { .children_offset=0, .match_offset=134989 }, { .children_offset=46364, .match_offset=84762 }, { .children_offset=0, .match_offset=77806 }, { .children_offset=46366, .match_offset=43517 }, { .children_offset=46369, .match_offset=0 }, { .children_offset=46371, .match_offset=0 }, { .children_offset=46373, .match_offset=0 }, { .children_offset=0, .match_offset=70934 }, { .children_offset=46375, .match_offset=0 }, { .children_offset=46377, .match_offset=0 }, { .children_offset=46379, .match_offset=0 }, { .children_offset=46381, .match_offset=0 }, { .children_offset=0, .match_offset=74044 }, { .children_offset=46383, .match_offset=131447 }, { .children_offset=46385, .match_offset=0 }, { .children_offset=46387, .match_offset=0 }, { .children_offset=0, .match_offset=114792 }, { .children_offset=46389, .match_offset=86313 }, { .children_offset=46392, .match_offset=69350 }, { .children_offset=46395, .match_offset=0 }, { .children_offset=0, .match_offset=33602 }, { .children_offset=46397, .match_offset=0 }, { .children_offset=46399, .match_offset=0 }, { .children_offset=46401, .match_offset=0 }, { .children_offset=0, .match_offset=7685 }, { .children_offset=46403, .match_offset=0 }, { .children_offset=46405, .match_offset=0 }, { .children_offset=46407, .match_offset=0 }, { .children_offset=0, .match_offset=61243 }, { .children_offset=46409, .match_offset=110999 }, { .children_offset=0, .match_offset=131512 }, { .children_offset=46414, .match_offset=6829 }, { .children_offset=46416, .match_offset=0 }, { .children_offset=46418, .match_offset=0 }, { .children_offset=0, .match_offset=33859 }, { .children_offset=46420, .match_offset=0 }, { .children_offset=46422, .match_offset=0 }, { .children_offset=46424, .match_offset=0 }, { .children_offset=46426, .match_offset=0 }, { .children_offset=46428, .match_offset=0 }, { .children_offset=0, .match_offset=54235 }, { .children_offset=46430, .match_offset=0 }, { .children_offset=0, .match_offset=116378 }, { .children_offset=46432, .match_offset=0 }, { .children_offset=46436, .match_offset=0 }, { .children_offset=46438, .match_offset=0 }, { .children_offset=46440, .match_offset=129416 }, { .children_offset=0, .match_offset=80410 }, { .children_offset=46442, .match_offset=0 }, { .children_offset=46444, .match_offset=0 }, { .children_offset=0, .match_offset=63014 }, { .children_offset=46446, .match_offset=59147 }, { .children_offset=0, .match_offset=64691 }, { .children_offset=46448, .match_offset=37652 }, { .children_offset=46451, .match_offset=0 }, { .children_offset=0, .match_offset=67676 }, { .children_offset=46453, .match_offset=0 }, { .children_offset=0, .match_offset=8308 }, { .children_offset=46456, .match_offset=0 }, { .children_offset=0, .match_offset=14851 }, { .children_offset=46458, .match_offset=26897 }, { .children_offset=46462, .match_offset=55777 }, { .children_offset=46464, .match_offset=0 }, { .children_offset=46466, .match_offset=0 }, { .children_offset=46468, .match_offset=0 }, { .children_offset=0, .match_offset=110359 }, { .children_offset=46470, .match_offset=45751 }, { .children_offset=46473, .match_offset=0 }, { .children_offset=46476, .match_offset=0 }, { .children_offset=0, .match_offset=115409 }, { .children_offset=46478, .match_offset=0 }, { .children_offset=46480, .match_offset=0 }, { .children_offset=46482, .match_offset=0 }, { .children_offset=0, .match_offset=134353 }, { .children_offset=46484, .match_offset=0 }, { .children_offset=0, .match_offset=66545 }, { .children_offset=46486, .match_offset=0 }, { .children_offset=46488, .match_offset=0 }, { .children_offset=0, .match_offset=33520 }, { .children_offset=0, .match_offset=2258 }, { .children_offset=46490, .match_offset=77820 }, { .children_offset=46492, .match_offset=130309 }, { .children_offset=0, .match_offset=77400 }, { .children_offset=0, .match_offset=104358 }, { .children_offset=46494, .match_offset=61139 }, { .children_offset=46498, .match_offset=0 }, { .children_offset=46500, .match_offset=0 }, { .children_offset=0, .match_offset=70968 }, { .children_offset=46502, .match_offset=0 }, { .children_offset=46504, .match_offset=0 }, { .children_offset=46506, .match_offset=124973 }, { .children_offset=46508, .match_offset=0 }, { .children_offset=0, .match_offset=25999 }, { .children_offset=46510, .match_offset=0 }, { .children_offset=46512, .match_offset=0 }, { .children_offset=0, .match_offset=77408 }, { .children_offset=46514, .match_offset=72515 }, { .children_offset=46516, .match_offset=0 }, { .children_offset=0, .match_offset=12406 }, { .children_offset=46518, .match_offset=134290 }, { .children_offset=46521, .match_offset=0 }, { .children_offset=46523, .match_offset=0 }, { .children_offset=46525, .match_offset=0 }, { .children_offset=46527, .match_offset=0 }, { .children_offset=0, .match_offset=14630 }, { .children_offset=46529, .match_offset=0 }, { .children_offset=46531, .match_offset=0 }, { .children_offset=46533, .match_offset=0 }, { .children_offset=0, .match_offset=125384 }, { .children_offset=46535, .match_offset=78937 }, { .children_offset=0, .match_offset=62676 }, { .children_offset=46538, .match_offset=0 }, { .children_offset=46540, .match_offset=0 }, { .children_offset=0, .match_offset=63635 }, { .children_offset=46542, .match_offset=102287 }, { .children_offset=46544, .match_offset=0 }, { .children_offset=46546, .match_offset=0 }, { .children_offset=46548, .match_offset=0 }, { .children_offset=46550, .match_offset=0 }, { .children_offset=0, .match_offset=49765 }, { .children_offset=46552, .match_offset=134200 }, { .children_offset=0, .match_offset=61007 }, { .children_offset=46555, .match_offset=0 }, { .children_offset=46557, .match_offset=0 }, { .children_offset=46559, .match_offset=0 }, { .children_offset=46561, .match_offset=0 }, { .children_offset=46563, .match_offset=0 }, { .children_offset=46565, .match_offset=0 }, { .children_offset=0, .match_offset=35738 }, { .children_offset=46567, .match_offset=77740 }, { .children_offset=0, .match_offset=118607 }, { .children_offset=46569, .match_offset=25431 }, { .children_offset=46571, .match_offset=0 }, { .children_offset=46573, .match_offset=0 }, { .children_offset=46575, .match_offset=0 }, { .children_offset=0, .match_offset=115483 }, { .children_offset=46577, .match_offset=0 }, { .children_offset=46579, .match_offset=0 }, { .children_offset=0, .match_offset=103557 }, { .children_offset=46581, .match_offset=119255 }, { .children_offset=46586, .match_offset=0 }, { .children_offset=46588, .match_offset=0 }, { .children_offset=46590, .match_offset=0 }, { .children_offset=0, .match_offset=67567 }, { .children_offset=46592, .match_offset=0 }, { .children_offset=46594, .match_offset=0 }, { .children_offset=46596, .match_offset=0 }, { .children_offset=0, .match_offset=110984 }, { .children_offset=46598, .match_offset=0 }, { .children_offset=46600, .match_offset=37193 }, { .children_offset=46602, .match_offset=33297 }, { .children_offset=46604, .match_offset=0 }, { .children_offset=0, .match_offset=129900 }, { .children_offset=0, .match_offset=22156 }, { .children_offset=46606, .match_offset=0 }, { .children_offset=46608, .match_offset=0 }, { .children_offset=0, .match_offset=122004 }, { .children_offset=46610, .match_offset=77853 }, { .children_offset=46629, .match_offset=0 }, { .children_offset=0, .match_offset=58769 }, { .children_offset=0, .match_offset=69102 }, { .children_offset=0, .match_offset=135959 }, { .children_offset=0, .match_offset=55293 }, { .children_offset=0, .match_offset=28 }, { .children_offset=0, .match_offset=90309 }, { .children_offset=0, .match_offset=57961 }, { .children_offset=0, .match_offset=8957 }, { .children_offset=0, .match_offset=43746 }, { .children_offset=0, .match_offset=30776 }, { .children_offset=46640, .match_offset=0 }, { .children_offset=46643, .match_offset=0 }, { .children_offset=46645, .match_offset=0 }, { .children_offset=0, .match_offset=60688 }, { .children_offset=46647, .match_offset=0 }, { .children_offset=46651, .match_offset=0 }, { .children_offset=46653, .match_offset=0 }, { .children_offset=46655, .match_offset=0 }, { .children_offset=0, .match_offset=42902 }, { .children_offset=46657, .match_offset=0 }, { .children_offset=46659, .match_offset=0 }, { .children_offset=46661, .match_offset=0 }, { .children_offset=46663, .match_offset=0 }, { .children_offset=46665, .match_offset=0 }, { .children_offset=46668, .match_offset=0 }, { .children_offset=46670, .match_offset=0 }, { .children_offset=46672, .match_offset=0 }, { .children_offset=46674, .match_offset=0 }, { .children_offset=46676, .match_offset=0 }, { .children_offset=0, .match_offset=111187 }, { .children_offset=46678, .match_offset=0 }, { .children_offset=46681, .match_offset=0 }, { .children_offset=46683, .match_offset=0 }, { .children_offset=46685, .match_offset=0 }, { .children_offset=46687, .match_offset=0 }, { .children_offset=46689, .match_offset=0 }, { .children_offset=0, .match_offset=56953 }, { .children_offset=46691, .match_offset=0 }, { .children_offset=46693, .match_offset=0 }, { .children_offset=46695, .match_offset=0 }, { .children_offset=46697, .match_offset=0 }, { .children_offset=0, .match_offset=60021 }, { .children_offset=0, .match_offset=1881 }, { .children_offset=46699, .match_offset=0 }, { .children_offset=46702, .match_offset=0 }, { .children_offset=0, .match_offset=77233 }, { .children_offset=46704, .match_offset=0 }, { .children_offset=46706, .match_offset=0 }, { .children_offset=0, .match_offset=70850 }, { .children_offset=46708, .match_offset=58899 }, { .children_offset=46712, .match_offset=0 }, { .children_offset=0, .match_offset=6120 }, { .children_offset=46714, .match_offset=0 }, { .children_offset=0, .match_offset=30970 }, { .children_offset=46716, .match_offset=0 }, { .children_offset=0, .match_offset=124759 }, { .children_offset=46718, .match_offset=0 }, { .children_offset=46720, .match_offset=0 }, { .children_offset=0, .match_offset=14860 }, { .children_offset=46722, .match_offset=58609 }, { .children_offset=46724, .match_offset=0 }, { .children_offset=0, .match_offset=68403 }, { .children_offset=46726, .match_offset=0 }, { .children_offset=46728, .match_offset=0 }, { .children_offset=0, .match_offset=65786 }, { .children_offset=0, .match_offset=85782 }, { .children_offset=46730, .match_offset=0 }, { .children_offset=46737, .match_offset=0 }, { .children_offset=46743, .match_offset=0 }, { .children_offset=46745, .match_offset=0 }, { .children_offset=46747, .match_offset=0 }, { .children_offset=46749, .match_offset=0 }, { .children_offset=0, .match_offset=38583 }, { .children_offset=46751, .match_offset=0 }, { .children_offset=0, .match_offset=11024 }, { .children_offset=46753, .match_offset=0 }, { .children_offset=46755, .match_offset=0 }, { .children_offset=46757, .match_offset=0 }, { .children_offset=46759, .match_offset=0 }, { .children_offset=0, .match_offset=20213 }, { .children_offset=46761, .match_offset=0 }, { .children_offset=46763, .match_offset=0 }, { .children_offset=46765, .match_offset=0 }, { .children_offset=46767, .match_offset=0 }, { .children_offset=0, .match_offset=129914 }, { .children_offset=46769, .match_offset=0 }, { .children_offset=46771, .match_offset=0 }, { .children_offset=46773, .match_offset=0 }, { .children_offset=46775, .match_offset=0 }, { .children_offset=46777, .match_offset=0 }, { .children_offset=0, .match_offset=61152 }, { .children_offset=46779, .match_offset=0 }, { .children_offset=46781, .match_offset=0 }, { .children_offset=46783, .match_offset=0 }, { .children_offset=0, .match_offset=87316 }, { .children_offset=46785, .match_offset=0 }, { .children_offset=46787, .match_offset=0 }, { .children_offset=0, .match_offset=54014 }, { .children_offset=46789, .match_offset=0 }, { .children_offset=46791, .match_offset=0 }, { .children_offset=0, .match_offset=66399 }, { .children_offset=46793, .match_offset=0 }, { .children_offset=46795, .match_offset=0 }, { .children_offset=0, .match_offset=44916 }, { .children_offset=46797, .match_offset=33930 }, { .children_offset=46799, .match_offset=0 }, { .children_offset=0, .match_offset=80637 }, { .children_offset=46801, .match_offset=0 }, { .children_offset=46803, .match_offset=0 }, { .children_offset=46806, .match_offset=0 }, { .children_offset=0, .match_offset=115997 }, { .children_offset=46808, .match_offset=0 }, { .children_offset=0, .match_offset=27438 }, { .children_offset=46810, .match_offset=53862 }, { .children_offset=46817, .match_offset=0 }, { .children_offset=46819, .match_offset=0 }, { .children_offset=46821, .match_offset=0 }, { .children_offset=46823, .match_offset=0 }, { .children_offset=46825, .match_offset=0 }, { .children_offset=46827, .match_offset=0 }, { .children_offset=0, .match_offset=59098 }, { .children_offset=46829, .match_offset=0 }, { .children_offset=0, .match_offset=134190 }, { .children_offset=46831, .match_offset=0 }, { .children_offset=46833, .match_offset=0 }, { .children_offset=0, .match_offset=72865 }, { .children_offset=46835, .match_offset=65478 }, { .children_offset=0, .match_offset=42688 }, { .children_offset=46837, .match_offset=44920 }, { .children_offset=0, .match_offset=20177 }, { .children_offset=46839, .match_offset=65419 }, { .children_offset=46841, .match_offset=0 }, { .children_offset=0, .match_offset=72132 }, { .children_offset=0, .match_offset=439 }, { .children_offset=46843, .match_offset=0 }, { .children_offset=46845, .match_offset=0 }, { .children_offset=46847, .match_offset=0 }, { .children_offset=46849, .match_offset=0 }, { .children_offset=46851, .match_offset=0 }, { .children_offset=0, .match_offset=27879 }, { .children_offset=46854, .match_offset=0 }, { .children_offset=46856, .match_offset=0 }, { .children_offset=0, .match_offset=87473 }, { .children_offset=46858, .match_offset=0 }, { .children_offset=0, .match_offset=130139 }, { .children_offset=46862, .match_offset=0 }, { .children_offset=46865, .match_offset=0 }, { .children_offset=46867, .match_offset=0 }, { .children_offset=46869, .match_offset=0 }, { .children_offset=0, .match_offset=133285 }, { .children_offset=46871, .match_offset=0 }, { .children_offset=46873, .match_offset=0 }, { .children_offset=0, .match_offset=11566 }, { .children_offset=0, .match_offset=114030 }, { .children_offset=46875, .match_offset=26868 }, { .children_offset=46879, .match_offset=0 }, { .children_offset=46881, .match_offset=0 }, { .children_offset=46883, .match_offset=0 }, { .children_offset=46886, .match_offset=0 }, { .children_offset=46888, .match_offset=0 }, { .children_offset=46890, .match_offset=0 }, { .children_offset=46892, .match_offset=0 }, { .children_offset=46894, .match_offset=0 }, { .children_offset=46896, .match_offset=0 }, { .children_offset=0, .match_offset=52723 }, { .children_offset=46898, .match_offset=0 }, { .children_offset=0, .match_offset=24260 }, { .children_offset=0, .match_offset=5317 }, { .children_offset=46900, .match_offset=0 }, { .children_offset=46902, .match_offset=0 }, { .children_offset=46907, .match_offset=0 }, { .children_offset=46909, .match_offset=0 }, { .children_offset=46911, .match_offset=0 }, { .children_offset=46913, .match_offset=0 }, { .children_offset=46915, .match_offset=0 }, { .children_offset=0, .match_offset=63204 }, { .children_offset=46917, .match_offset=0 }, { .children_offset=46919, .match_offset=0 }, { .children_offset=46921, .match_offset=0 }, { .children_offset=0, .match_offset=133100 }, { .children_offset=46923, .match_offset=0 }, { .children_offset=46925, .match_offset=0 }, { .children_offset=0, .match_offset=78466 }, { .children_offset=46927, .match_offset=0 }, { .children_offset=46930, .match_offset=0 }, { .children_offset=46932, .match_offset=0 }, { .children_offset=0, .match_offset=114359 }, { .children_offset=46934, .match_offset=0 }, { .children_offset=46936, .match_offset=0 }, { .children_offset=46938, .match_offset=0 }, { .children_offset=0, .match_offset=41944 }, { .children_offset=46940, .match_offset=14887 }, { .children_offset=46944, .match_offset=0 }, { .children_offset=46946, .match_offset=0 }, { .children_offset=0, .match_offset=21821 }, { .children_offset=0, .match_offset=49878 }, { .children_offset=0, .match_offset=66541 }, { .children_offset=46949, .match_offset=114248 }, { .children_offset=46951, .match_offset=0 }, { .children_offset=46953, .match_offset=0 }, { .children_offset=46956, .match_offset=0 }, { .children_offset=46958, .match_offset=0 }, { .children_offset=0, .match_offset=6126 }, { .children_offset=0, .match_offset=122527 }, { .children_offset=46960, .match_offset=0 }, { .children_offset=46962, .match_offset=0 }, { .children_offset=0, .match_offset=34394 }, { .children_offset=46964, .match_offset=114588 }, { .children_offset=0, .match_offset=64410 }, { .children_offset=46966, .match_offset=0 }, { .children_offset=0, .match_offset=15454 }, { .children_offset=46968, .match_offset=58844 }, { .children_offset=46980, .match_offset=0 }, { .children_offset=46982, .match_offset=0 }, { .children_offset=46984, .match_offset=0 }, { .children_offset=46986, .match_offset=0 }, { .children_offset=0, .match_offset=34184 }, { .children_offset=46988, .match_offset=85296 }, { .children_offset=46997, .match_offset=54237 }, { .children_offset=47000, .match_offset=0 }, { .children_offset=0, .match_offset=61887 }, { .children_offset=47002, .match_offset=0 }, { .children_offset=0, .match_offset=16126 }, { .children_offset=47004, .match_offset=0 }, { .children_offset=47006, .match_offset=0 }, { .children_offset=0, .match_offset=59444 }, { .children_offset=0, .match_offset=60575 }, { .children_offset=0, .match_offset=26270 }, { .children_offset=0, .match_offset=13870 }, { .children_offset=47008, .match_offset=12135 }, { .children_offset=47010, .match_offset=0 }, { .children_offset=47012, .match_offset=0 }, { .children_offset=0, .match_offset=127370 }, { .children_offset=47014, .match_offset=14373 }, { .children_offset=47017, .match_offset=0 }, { .children_offset=0, .match_offset=135957 }, { .children_offset=47019, .match_offset=0 }, { .children_offset=47021, .match_offset=0 }, { .children_offset=47023, .match_offset=0 }, { .children_offset=47025, .match_offset=0 }, { .children_offset=47027, .match_offset=0 }, { .children_offset=47029, .match_offset=0 }, { .children_offset=0, .match_offset=67741 }, { .children_offset=0, .match_offset=61709 }, { .children_offset=47031, .match_offset=58281 }, { .children_offset=0, .match_offset=114658 }, { .children_offset=0, .match_offset=115821 }, { .children_offset=0, .match_offset=29268 }, { .children_offset=47041, .match_offset=0 }, { .children_offset=47043, .match_offset=5497 }, { .children_offset=47045, .match_offset=0 }, { .children_offset=47047, .match_offset=0 }, { .children_offset=47049, .match_offset=0 }, { .children_offset=47051, .match_offset=0 }, { .children_offset=47053, .match_offset=0 }, { .children_offset=0, .match_offset=43429 }, { .children_offset=0, .match_offset=53604 }, { .children_offset=47055, .match_offset=0 }, { .children_offset=47058, .match_offset=20469 }, { .children_offset=0, .match_offset=81893 }, { .children_offset=47061, .match_offset=0 }, { .children_offset=47063, .match_offset=0 }, { .children_offset=47065, .match_offset=0 }, { .children_offset=0, .match_offset=81893 }, { .children_offset=47067, .match_offset=0 }, { .children_offset=47069, .match_offset=0 }, { .children_offset=47072, .match_offset=0 }, { .children_offset=47074, .match_offset=0 }, { .children_offset=47076, .match_offset=0 }, { .children_offset=47078, .match_offset=0 }, { .children_offset=47080, .match_offset=0 }, { .children_offset=47082, .match_offset=0 }, { .children_offset=0, .match_offset=61261 }, { .children_offset=47084, .match_offset=0 }, { .children_offset=47086, .match_offset=0 }, { .children_offset=47088, .match_offset=0 }, { .children_offset=47090, .match_offset=0 }, { .children_offset=0, .match_offset=32822 }, { .children_offset=47092, .match_offset=81176 }, { .children_offset=47095, .match_offset=0 }, { .children_offset=47097, .match_offset=0 }, { .children_offset=0, .match_offset=80466 }, { .children_offset=47099, .match_offset=0 }, { .children_offset=47101, .match_offset=0 }, { .children_offset=47103, .match_offset=0 }, { .children_offset=0, .match_offset=2260 }, { .children_offset=47105, .match_offset=0 }, { .children_offset=47108, .match_offset=78503 }, { .children_offset=47111, .match_offset=0 }, { .children_offset=47113, .match_offset=0 }, { .children_offset=0, .match_offset=34442 }, { .children_offset=0, .match_offset=34442 }, { .children_offset=47115, .match_offset=67828 }, { .children_offset=0, .match_offset=46872 }, { .children_offset=0, .match_offset=67354 }, { .children_offset=47117, .match_offset=77899 }, { .children_offset=47127, .match_offset=0 }, { .children_offset=0, .match_offset=62874 }, { .children_offset=47129, .match_offset=0 }, { .children_offset=47131, .match_offset=26125 }, { .children_offset=47134, .match_offset=0 }, { .children_offset=47136, .match_offset=0 }, { .children_offset=47138, .match_offset=0 }, { .children_offset=47140, .match_offset=0 }, { .children_offset=47142, .match_offset=0 }, { .children_offset=0, .match_offset=90570 }, { .children_offset=47144, .match_offset=0 }, { .children_offset=47146, .match_offset=0 }, { .children_offset=0, .match_offset=12334 }, { .children_offset=47148, .match_offset=0 }, { .children_offset=47150, .match_offset=0 }, { .children_offset=47152, .match_offset=0 }, { .children_offset=0, .match_offset=114746 }, { .children_offset=47154, .match_offset=0 }, { .children_offset=0, .match_offset=30355 }, { .children_offset=0, .match_offset=64166 }, { .children_offset=47156, .match_offset=32785 }, { .children_offset=0, .match_offset=65370 }, { .children_offset=47160, .match_offset=0 }, { .children_offset=47162, .match_offset=0 }, { .children_offset=47164, .match_offset=0 }, { .children_offset=0, .match_offset=56828 }, { .children_offset=47166, .match_offset=0 }, { .children_offset=47168, .match_offset=113994 }, { .children_offset=47170, .match_offset=0 }, { .children_offset=47172, .match_offset=0 }, { .children_offset=0, .match_offset=113994 }, { .children_offset=47174, .match_offset=0 }, { .children_offset=47177, .match_offset=15958 }, { .children_offset=47180, .match_offset=0 }, { .children_offset=47182, .match_offset=0 }, { .children_offset=47184, .match_offset=0 }, { .children_offset=47186, .match_offset=0 }, { .children_offset=47188, .match_offset=0 }, { .children_offset=0, .match_offset=55204 }, { .children_offset=0, .match_offset=124906 }, { .children_offset=47190, .match_offset=0 }, { .children_offset=47193, .match_offset=0 }, { .children_offset=47195, .match_offset=0 }, { .children_offset=0, .match_offset=74696 }, { .children_offset=47197, .match_offset=7459 }, { .children_offset=47199, .match_offset=0 }, { .children_offset=47203, .match_offset=0 }, { .children_offset=47205, .match_offset=0 }, { .children_offset=47207, .match_offset=0 }, { .children_offset=0, .match_offset=129960 }, { .children_offset=47209, .match_offset=0 }, { .children_offset=47211, .match_offset=0 }, { .children_offset=0, .match_offset=33228 }, { .children_offset=47213, .match_offset=0 }, { .children_offset=47215, .match_offset=0 }, { .children_offset=47217, .match_offset=0 }, { .children_offset=47219, .match_offset=0 }, { .children_offset=47221, .match_offset=0 }, { .children_offset=0, .match_offset=87088 }, { .children_offset=47223, .match_offset=0 }, { .children_offset=0, .match_offset=125376 }, { .children_offset=47225, .match_offset=0 }, { .children_offset=47227, .match_offset=0 }, { .children_offset=0, .match_offset=15717 }, { .children_offset=47229, .match_offset=0 }, { .children_offset=47232, .match_offset=0 }, { .children_offset=0, .match_offset=90570 }, { .children_offset=47234, .match_offset=0 }, { .children_offset=47236, .match_offset=0 }, { .children_offset=0, .match_offset=12334 }, { .children_offset=47238, .match_offset=131162 }, { .children_offset=0, .match_offset=66416 }, { .children_offset=0, .match_offset=37980 }, { .children_offset=0, .match_offset=121912 }, { .children_offset=47246, .match_offset=0 }, { .children_offset=0, .match_offset=22326 }, { .children_offset=0, .match_offset=125157 }, { .children_offset=47248, .match_offset=0 }, { .children_offset=0, .match_offset=81902 }, { .children_offset=47250, .match_offset=37510 }, { .children_offset=47253, .match_offset=0 }, { .children_offset=47255, .match_offset=0 }, { .children_offset=0, .match_offset=33359 }, { .children_offset=47257, .match_offset=0 }, { .children_offset=47259, .match_offset=0 }, { .children_offset=47261, .match_offset=0 }, { .children_offset=47263, .match_offset=21408 }, { .children_offset=0, .match_offset=130862 }, { .children_offset=47265, .match_offset=0 }, { .children_offset=47268, .match_offset=0 }, { .children_offset=47271, .match_offset=0 }, { .children_offset=0, .match_offset=124728 }, { .children_offset=47273, .match_offset=108235 }, { .children_offset=47275, .match_offset=0 }, { .children_offset=47284, .match_offset=0 }, { .children_offset=47286, .match_offset=0 }, { .children_offset=47288, .match_offset=0 }, { .children_offset=47290, .match_offset=0 }, { .children_offset=47292, .match_offset=0 }, { .children_offset=0, .match_offset=81858 }, { .children_offset=47294, .match_offset=130997 }, { .children_offset=47296, .match_offset=0 }, { .children_offset=0, .match_offset=114590 }, { .children_offset=47298, .match_offset=0 }, { .children_offset=0, .match_offset=63109 }, { .children_offset=47300, .match_offset=0 }, { .children_offset=47302, .match_offset=0 }, { .children_offset=47304, .match_offset=0 }, { .children_offset=47306, .match_offset=0 }, { .children_offset=47308, .match_offset=0 }, { .children_offset=47310, .match_offset=0 }, { .children_offset=47312, .match_offset=0 }, { .children_offset=47314, .match_offset=0 }, { .children_offset=47316, .match_offset=0 }, { .children_offset=47318, .match_offset=0 }, { .children_offset=47320, .match_offset=0 }, { .children_offset=47322, .match_offset=0 }, { .children_offset=47324, .match_offset=0 }, { .children_offset=47326, .match_offset=0 }, { .children_offset=47328, .match_offset=0 }, { .children_offset=47330, .match_offset=0 }, { .children_offset=47332, .match_offset=0 }, { .children_offset=47334, .match_offset=0 }, { .children_offset=47336, .match_offset=0 }, { .children_offset=47338, .match_offset=0 }, { .children_offset=0, .match_offset=109210 }, { .children_offset=47340, .match_offset=0 }, { .children_offset=47343, .match_offset=0 }, { .children_offset=47345, .match_offset=0 }, { .children_offset=47347, .match_offset=0 }, { .children_offset=47349, .match_offset=0 }, { .children_offset=0, .match_offset=42240 }, { .children_offset=47351, .match_offset=0 }, { .children_offset=47353, .match_offset=0 }, { .children_offset=0, .match_offset=77831 }, { .children_offset=47355, .match_offset=0 }, { .children_offset=47357, .match_offset=0 }, { .children_offset=47359, .match_offset=0 }, { .children_offset=47361, .match_offset=0 }, { .children_offset=47363, .match_offset=0 }, { .children_offset=0, .match_offset=60170 }, { .children_offset=47365, .match_offset=0 }, { .children_offset=47367, .match_offset=0 }, { .children_offset=47369, .match_offset=0 }, { .children_offset=47371, .match_offset=0 }, { .children_offset=47373, .match_offset=0 }, { .children_offset=47375, .match_offset=0 }, { .children_offset=0, .match_offset=118256 }, { .children_offset=47377, .match_offset=0 }, { .children_offset=47379, .match_offset=0 }, { .children_offset=47381, .match_offset=0 }, { .children_offset=47383, .match_offset=0 }, { .children_offset=47385, .match_offset=0 }, { .children_offset=0, .match_offset=62567 }, { .children_offset=47387, .match_offset=0 }, { .children_offset=47390, .match_offset=0 }, { .children_offset=47392, .match_offset=0 }, { .children_offset=0, .match_offset=114908 }, { .children_offset=47394, .match_offset=0 }, { .children_offset=47396, .match_offset=0 }, { .children_offset=47398, .match_offset=0 }, { .children_offset=0, .match_offset=130877 }, { .children_offset=47400, .match_offset=7455 }, { .children_offset=47404, .match_offset=0 }, { .children_offset=47406, .match_offset=134607 }, { .children_offset=0, .match_offset=79009 }, { .children_offset=47408, .match_offset=0 }, { .children_offset=47411, .match_offset=0 }, { .children_offset=47413, .match_offset=0 }, { .children_offset=47415, .match_offset=124644 }, { .children_offset=47417, .match_offset=0 }, { .children_offset=47419, .match_offset=0 }, { .children_offset=47421, .match_offset=0 }, { .children_offset=47423, .match_offset=0 }, { .children_offset=0, .match_offset=7713 }, { .children_offset=0, .match_offset=123708 }, { .children_offset=47425, .match_offset=0 }, { .children_offset=47428, .match_offset=0 }, { .children_offset=47430, .match_offset=0 }, { .children_offset=47432, .match_offset=0 }, { .children_offset=0, .match_offset=39459 }, { .children_offset=0, .match_offset=39459 }, { .children_offset=47434, .match_offset=0 }, { .children_offset=47439, .match_offset=42220 }, { .children_offset=0, .match_offset=66229 }, { .children_offset=47441, .match_offset=131049 }, { .children_offset=0, .match_offset=90069 }, { .children_offset=47443, .match_offset=131437 }, { .children_offset=0, .match_offset=37310 }, { .children_offset=47445, .match_offset=124695 }, { .children_offset=0, .match_offset=118370 }, { .children_offset=47447, .match_offset=0 }, { .children_offset=47449, .match_offset=0 }, { .children_offset=47451, .match_offset=0 }, { .children_offset=0, .match_offset=25181 }, { .children_offset=0, .match_offset=48213 }, { .children_offset=47453, .match_offset=71910 }, { .children_offset=47472, .match_offset=0 }, { .children_offset=0, .match_offset=121922 }, { .children_offset=0, .match_offset=21374 }, { .children_offset=0, .match_offset=86794 }, { .children_offset=0, .match_offset=40639 }, { .children_offset=0, .match_offset=21647 }, { .children_offset=0, .match_offset=74440 }, { .children_offset=0, .match_offset=86933 }, { .children_offset=0, .match_offset=118372 }, { .children_offset=47480, .match_offset=0 }, { .children_offset=47482, .match_offset=0 }, { .children_offset=0, .match_offset=63005 }, { .children_offset=47484, .match_offset=0 }, { .children_offset=47486, .match_offset=0 }, { .children_offset=47488, .match_offset=0 }, { .children_offset=47490, .match_offset=0 }, { .children_offset=0, .match_offset=135545 }, { .children_offset=47492, .match_offset=0 }, { .children_offset=47494, .match_offset=110944 }, { .children_offset=47496, .match_offset=0 }, { .children_offset=47498, .match_offset=129406 }, { .children_offset=0, .match_offset=105793 }, { .children_offset=47500, .match_offset=13896 }, { .children_offset=0, .match_offset=117576 }, { .children_offset=0, .match_offset=27356 }, { .children_offset=47503, .match_offset=0 }, { .children_offset=47505, .match_offset=0 }, { .children_offset=47507, .match_offset=0 }, { .children_offset=47509, .match_offset=0 }, { .children_offset=47511, .match_offset=0 }, { .children_offset=0, .match_offset=41956 }, { .children_offset=47513, .match_offset=0 }, { .children_offset=47516, .match_offset=0 }, { .children_offset=0, .match_offset=111135 }, { .children_offset=47518, .match_offset=0 }, { .children_offset=47520, .match_offset=2312 }, { .children_offset=47522, .match_offset=0 }, { .children_offset=47524, .match_offset=0 }, { .children_offset=47526, .match_offset=0 }, { .children_offset=47528, .match_offset=0 }, { .children_offset=47530, .match_offset=0 }, { .children_offset=47532, .match_offset=0 }, { .children_offset=47534, .match_offset=0 }, { .children_offset=47536, .match_offset=0 }, { .children_offset=0, .match_offset=90517 }, { .children_offset=0, .match_offset=51138 }, { .children_offset=47538, .match_offset=0 }, { .children_offset=47540, .match_offset=0 }, { .children_offset=47542, .match_offset=0 }, { .children_offset=47544, .match_offset=81005 }, { .children_offset=47546, .match_offset=0 }, { .children_offset=47554, .match_offset=0 }, { .children_offset=47557, .match_offset=0 }, { .children_offset=47559, .match_offset=0 }, { .children_offset=47561, .match_offset=0 }, { .children_offset=47563, .match_offset=0 }, { .children_offset=47565, .match_offset=0 }, { .children_offset=0, .match_offset=33355 }, { .children_offset=47567, .match_offset=0 }, { .children_offset=47569, .match_offset=0 }, { .children_offset=47571, .match_offset=0 }, { .children_offset=0, .match_offset=14487 }, { .children_offset=47573, .match_offset=0 }, { .children_offset=47575, .match_offset=0 }, { .children_offset=47577, .match_offset=0 }, { .children_offset=47579, .match_offset=0 }, { .children_offset=47581, .match_offset=0 }, { .children_offset=0, .match_offset=104446 }, { .children_offset=47583, .match_offset=0 }, { .children_offset=47585, .match_offset=0 }, { .children_offset=47587, .match_offset=0 }, { .children_offset=47589, .match_offset=0 }, { .children_offset=0, .match_offset=38135 }, { .children_offset=47591, .match_offset=0 }, { .children_offset=47593, .match_offset=0 }, { .children_offset=47595, .match_offset=0 }, { .children_offset=47597, .match_offset=0 }, { .children_offset=0, .match_offset=131051 }, { .children_offset=47599, .match_offset=0 }, { .children_offset=47601, .match_offset=0 }, { .children_offset=47603, .match_offset=0 }, { .children_offset=47605, .match_offset=0 }, { .children_offset=0, .match_offset=70750 }, { .children_offset=47607, .match_offset=0 }, { .children_offset=47609, .match_offset=0 }, { .children_offset=47611, .match_offset=0 }, { .children_offset=47613, .match_offset=116306 }, { .children_offset=47615, .match_offset=0 }, { .children_offset=47617, .match_offset=0 }, { .children_offset=47619, .match_offset=0 }, { .children_offset=47621, .match_offset=0 }, { .children_offset=47623, .match_offset=0 }, { .children_offset=47625, .match_offset=0 }, { .children_offset=0, .match_offset=102368 }, { .children_offset=47627, .match_offset=0 }, { .children_offset=47629, .match_offset=0 }, { .children_offset=47631, .match_offset=0 }, { .children_offset=47633, .match_offset=0 }, { .children_offset=47635, .match_offset=0 }, { .children_offset=47637, .match_offset=0 }, { .children_offset=0, .match_offset=61764 }, { .children_offset=47639, .match_offset=90079 }, { .children_offset=47643, .match_offset=0 }, { .children_offset=47645, .match_offset=72670 }, { .children_offset=47649, .match_offset=0 }, { .children_offset=47651, .match_offset=0 }, { .children_offset=47653, .match_offset=0 }, { .children_offset=47655, .match_offset=0 }, { .children_offset=0, .match_offset=104169 }, { .children_offset=47657, .match_offset=0 }, { .children_offset=47659, .match_offset=0 }, { .children_offset=47661, .match_offset=0 }, { .children_offset=47663, .match_offset=0 }, { .children_offset=47665, .match_offset=0 }, { .children_offset=47667, .match_offset=0 }, { .children_offset=47669, .match_offset=0 }, { .children_offset=47671, .match_offset=0 }, { .children_offset=0, .match_offset=55967 }, { .children_offset=47673, .match_offset=0 }, { .children_offset=47675, .match_offset=0 }, { .children_offset=47677, .match_offset=0 }, { .children_offset=47679, .match_offset=0 }, { .children_offset=0, .match_offset=90570 }, { .children_offset=47681, .match_offset=132629 }, { .children_offset=0, .match_offset=77330 }, { .children_offset=47683, .match_offset=6170 }, { .children_offset=47685, .match_offset=0 }, { .children_offset=47687, .match_offset=0 }, { .children_offset=0, .match_offset=21162 }, { .children_offset=47689, .match_offset=0 }, { .children_offset=47691, .match_offset=7744 }, { .children_offset=0, .match_offset=87327 }, { .children_offset=47694, .match_offset=81186 }, { .children_offset=47697, .match_offset=84854 }, { .children_offset=47699, .match_offset=0 }, { .children_offset=0, .match_offset=123222 }, { .children_offset=0, .match_offset=77303 }, { .children_offset=47701, .match_offset=59455 }, { .children_offset=47708, .match_offset=0 }, { .children_offset=47710, .match_offset=0 }, { .children_offset=47712, .match_offset=0 }, { .children_offset=0, .match_offset=70781 }, { .children_offset=47714, .match_offset=0 }, { .children_offset=47716, .match_offset=0 }, { .children_offset=47718, .match_offset=0 }, { .children_offset=47720, .match_offset=0 }, { .children_offset=0, .match_offset=16880 }, { .children_offset=0, .match_offset=62926 }, { .children_offset=47722, .match_offset=0 }, { .children_offset=0, .match_offset=6811 }, { .children_offset=0, .match_offset=65306 }, { .children_offset=0, .match_offset=122686 }, { .children_offset=47724, .match_offset=43304 }, { .children_offset=47727, .match_offset=0 }, { .children_offset=47729, .match_offset=0 }, { .children_offset=0, .match_offset=34006 }, { .children_offset=47731, .match_offset=0 }, { .children_offset=0, .match_offset=34584 }, { .children_offset=47733, .match_offset=37660 }, { .children_offset=47739, .match_offset=0 }, { .children_offset=0, .match_offset=11468 }, { .children_offset=47741, .match_offset=0 }, { .children_offset=47743, .match_offset=0 }, { .children_offset=47745, .match_offset=0 }, { .children_offset=0, .match_offset=34193 }, { .children_offset=47747, .match_offset=0 }, { .children_offset=47749, .match_offset=0 }, { .children_offset=47751, .match_offset=0 }, { .children_offset=47753, .match_offset=0 }, { .children_offset=0, .match_offset=119659 }, { .children_offset=47755, .match_offset=0 }, { .children_offset=0, .match_offset=11988 }, { .children_offset=47757, .match_offset=0 }, { .children_offset=47759, .match_offset=0 }, { .children_offset=0, .match_offset=22032 }, { .children_offset=47761, .match_offset=27478 }, { .children_offset=0, .match_offset=69408 }, { .children_offset=47765, .match_offset=0 }, { .children_offset=0, .match_offset=32676 }, { .children_offset=47767, .match_offset=0 }, { .children_offset=47769, .match_offset=0 }, { .children_offset=47771, .match_offset=0 }, { .children_offset=0, .match_offset=20205 }, { .children_offset=47773, .match_offset=0 }, { .children_offset=47777, .match_offset=0 }, { .children_offset=0, .match_offset=104409 }, { .children_offset=0, .match_offset=114820 }, { .children_offset=0, .match_offset=6271 }, { .children_offset=0, .match_offset=14858 }, { .children_offset=47779, .match_offset=0 }, { .children_offset=0, .match_offset=61484 }, { .children_offset=47781, .match_offset=0 }, { .children_offset=0, .match_offset=119435 }, { .children_offset=47789, .match_offset=109223 }, { .children_offset=0, .match_offset=114952 }, { .children_offset=47791, .match_offset=0 }, { .children_offset=0, .match_offset=33033 }, { .children_offset=47799, .match_offset=134862 }, { .children_offset=0, .match_offset=35450 }, { .children_offset=0, .match_offset=103467 }, { .children_offset=47801, .match_offset=39186 }, { .children_offset=0, .match_offset=114271 }, { .children_offset=0, .match_offset=59477 }, { .children_offset=47803, .match_offset=0 }, { .children_offset=0, .match_offset=67 }, { .children_offset=47805, .match_offset=0 }, { .children_offset=0, .match_offset=78588 }, { .children_offset=0, .match_offset=12046 }, { .children_offset=0, .match_offset=119655 }, { .children_offset=0, .match_offset=68631 }, { .children_offset=0, .match_offset=32983 }, { .children_offset=0, .match_offset=71285 }, { .children_offset=47807, .match_offset=131945 }, { .children_offset=47828, .match_offset=0 }, { .children_offset=0, .match_offset=32979 }, { .children_offset=0, .match_offset=21134 }, { .children_offset=0, .match_offset=58340 }, { .children_offset=0, .match_offset=42412 }, { .children_offset=0, .match_offset=77037 }, { .children_offset=0, .match_offset=25696 }, { .children_offset=47836, .match_offset=0 }, { .children_offset=0, .match_offset=62377 }, { .children_offset=47838, .match_offset=60453 }, { .children_offset=47840, .match_offset=0 }, { .children_offset=47842, .match_offset=0 }, { .children_offset=47844, .match_offset=0 }, { .children_offset=47846, .match_offset=0 }, { .children_offset=47848, .match_offset=0 }, { .children_offset=47850, .match_offset=0 }, { .children_offset=47852, .match_offset=0 }, { .children_offset=0, .match_offset=129916 }, { .children_offset=47854, .match_offset=0 }, { .children_offset=0, .match_offset=70871 }, { .children_offset=47856, .match_offset=0 }, { .children_offset=0, .match_offset=71271 }, { .children_offset=47858, .match_offset=0 }, { .children_offset=47860, .match_offset=0 }, { .children_offset=47862, .match_offset=0 }, { .children_offset=47864, .match_offset=0 }, { .children_offset=47866, .match_offset=0 }, { .children_offset=0, .match_offset=33472 }, { .children_offset=47868, .match_offset=0 }, { .children_offset=47870, .match_offset=0 }, { .children_offset=47872, .match_offset=0 }, { .children_offset=0, .match_offset=109899 }, { .children_offset=47874, .match_offset=0 }, { .children_offset=47876, .match_offset=0 }, { .children_offset=0, .match_offset=30759 }, { .children_offset=47878, .match_offset=0 }, { .children_offset=47880, .match_offset=0 }, { .children_offset=47882, .match_offset=0 }, { .children_offset=0, .match_offset=65557 }, { .children_offset=47884, .match_offset=0 }, { .children_offset=47887, .match_offset=0 }, { .children_offset=47889, .match_offset=0 }, { .children_offset=0, .match_offset=32971 }, { .children_offset=47891, .match_offset=0 }, { .children_offset=0, .match_offset=68277 }, { .children_offset=47893, .match_offset=131095 }, { .children_offset=47898, .match_offset=0 }, { .children_offset=0, .match_offset=64123 }, { .children_offset=47900, .match_offset=127887 }, { .children_offset=47902, .match_offset=0 }, { .children_offset=0, .match_offset=77907 }, { .children_offset=0, .match_offset=136199 }, { .children_offset=0, .match_offset=134220 }, { .children_offset=0, .match_offset=22656 }, { .children_offset=0, .match_offset=59257 }, { .children_offset=0, .match_offset=30985 }, { .children_offset=0, .match_offset=49910 }, { .children_offset=0, .match_offset=81897 }, { .children_offset=0, .match_offset=35719 }, { .children_offset=0, .match_offset=20526 }, { .children_offset=0, .match_offset=131491 }, { .children_offset=0, .match_offset=103059 }, { .children_offset=0, .match_offset=134367 }, { .children_offset=0, .match_offset=33477 }, { .children_offset=0, .match_offset=134479 }, { .children_offset=47918, .match_offset=103579 }, { .children_offset=47920, .match_offset=0 }, { .children_offset=0, .match_offset=49848 }, { .children_offset=47922, .match_offset=0 }, { .children_offset=0, .match_offset=119439 }, { .children_offset=47924, .match_offset=124829 }, { .children_offset=47928, .match_offset=0 }, { .children_offset=47930, .match_offset=0 }, { .children_offset=47932, .match_offset=0 }, { .children_offset=0, .match_offset=87868 }, { .children_offset=0, .match_offset=112693 }, { .children_offset=47934, .match_offset=0 }, { .children_offset=0, .match_offset=103161 }, { .children_offset=47936, .match_offset=88674 }, { .children_offset=47941, .match_offset=0 }, { .children_offset=47943, .match_offset=0 }, { .children_offset=47945, .match_offset=0 }, { .children_offset=47947, .match_offset=0 }, { .children_offset=47949, .match_offset=0 }, { .children_offset=47951, .match_offset=0 }, { .children_offset=47953, .match_offset=0 }, { .children_offset=0, .match_offset=55787 }, { .children_offset=47955, .match_offset=0 }, { .children_offset=47958, .match_offset=0 }, { .children_offset=0, .match_offset=40190 }, { .children_offset=47960, .match_offset=0 }, { .children_offset=0, .match_offset=60946 }, { .children_offset=47962, .match_offset=0 }, { .children_offset=47964, .match_offset=0 }, { .children_offset=0, .match_offset=65836 }, { .children_offset=47966, .match_offset=61650 }, { .children_offset=47968, .match_offset=0 }, { .children_offset=47970, .match_offset=0 }, { .children_offset=0, .match_offset=37399 }, { .children_offset=0, .match_offset=131184 }, { .children_offset=47972, .match_offset=0 }, { .children_offset=47977, .match_offset=0 }, { .children_offset=0, .match_offset=38120 }, { .children_offset=47980, .match_offset=0 }, { .children_offset=47982, .match_offset=0 }, { .children_offset=47984, .match_offset=0 }, { .children_offset=0, .match_offset=68264 }, { .children_offset=47986, .match_offset=0 }, { .children_offset=47988, .match_offset=0 }, { .children_offset=47990, .match_offset=0 }, { .children_offset=0, .match_offset=110898 }, { .children_offset=47992, .match_offset=0 }, { .children_offset=47994, .match_offset=13879 }, { .children_offset=47996, .match_offset=0 }, { .children_offset=47999, .match_offset=0 }, { .children_offset=48001, .match_offset=0 }, { .children_offset=48003, .match_offset=0 }, { .children_offset=48005, .match_offset=0 }, { .children_offset=48007, .match_offset=0 }, { .children_offset=48009, .match_offset=0 }, { .children_offset=48011, .match_offset=0 }, { .children_offset=48013, .match_offset=0 }, { .children_offset=48015, .match_offset=0 }, { .children_offset=0, .match_offset=125565 }, { .children_offset=48017, .match_offset=0 }, { .children_offset=48019, .match_offset=0 }, { .children_offset=48021, .match_offset=0 }, { .children_offset=48023, .match_offset=0 }, { .children_offset=48025, .match_offset=0 }, { .children_offset=48027, .match_offset=0 }, { .children_offset=48029, .match_offset=0 }, { .children_offset=48031, .match_offset=0 }, { .children_offset=0, .match_offset=16939 }, { .children_offset=48033, .match_offset=0 }, { .children_offset=48035, .match_offset=0 }, { .children_offset=48037, .match_offset=0 }, { .children_offset=48039, .match_offset=0 }, { .children_offset=0, .match_offset=102752 }, { .children_offset=48041, .match_offset=133617 }, { .children_offset=0, .match_offset=110566 }, { .children_offset=48043, .match_offset=125628 }, { .children_offset=48045, .match_offset=0 }, { .children_offset=0, .match_offset=87305 }, { .children_offset=48047, .match_offset=0 }, { .children_offset=48050, .match_offset=0 }, { .children_offset=48052, .match_offset=39439 }, { .children_offset=48056, .match_offset=0 }, { .children_offset=0, .match_offset=65185 }, { .children_offset=48058, .match_offset=0 }, { .children_offset=48060, .match_offset=0 }, { .children_offset=0, .match_offset=72875 }, { .children_offset=48062, .match_offset=0 }, { .children_offset=48064, .match_offset=0 }, { .children_offset=48066, .match_offset=0 }, { .children_offset=0, .match_offset=53503 }, { .children_offset=48068, .match_offset=0 }, { .children_offset=48070, .match_offset=0 }, { .children_offset=48072, .match_offset=0 }, { .children_offset=48074, .match_offset=0 }, { .children_offset=0, .match_offset=58514 }, { .children_offset=0, .match_offset=133668 }, { .children_offset=48076, .match_offset=0 }, { .children_offset=48079, .match_offset=0 }, { .children_offset=48081, .match_offset=0 }, { .children_offset=48083, .match_offset=0 }, { .children_offset=0, .match_offset=115682 }, { .children_offset=48085, .match_offset=0 }, { .children_offset=0, .match_offset=30759 }, { .children_offset=0, .match_offset=61508 }, { .children_offset=48087, .match_offset=0 }, { .children_offset=48089, .match_offset=0 }, { .children_offset=48091, .match_offset=0 }, { .children_offset=48093, .match_offset=0 }, { .children_offset=0, .match_offset=15297 }, { .children_offset=48095, .match_offset=127317 }, { .children_offset=48103, .match_offset=115372 }, { .children_offset=48113, .match_offset=0 }, { .children_offset=48116, .match_offset=38526 }, { .children_offset=48118, .match_offset=0 }, { .children_offset=48120, .match_offset=0 }, { .children_offset=48122, .match_offset=0 }, { .children_offset=0, .match_offset=33380 }, { .children_offset=48124, .match_offset=0 }, { .children_offset=48126, .match_offset=0 }, { .children_offset=0, .match_offset=49725 }, { .children_offset=48128, .match_offset=0 }, { .children_offset=0, .match_offset=134263 }, { .children_offset=48131, .match_offset=0 }, { .children_offset=48133, .match_offset=0 }, { .children_offset=48135, .match_offset=0 }, { .children_offset=48137, .match_offset=0 }, { .children_offset=48139, .match_offset=0 }, { .children_offset=48141, .match_offset=0 }, { .children_offset=0, .match_offset=113059 }, { .children_offset=48143, .match_offset=0 }, { .children_offset=48145, .match_offset=0 }, { .children_offset=48147, .match_offset=0 }, { .children_offset=0, .match_offset=37581 }, { .children_offset=48149, .match_offset=0 }, { .children_offset=48152, .match_offset=0 }, { .children_offset=48154, .match_offset=0 }, { .children_offset=48156, .match_offset=0 }, { .children_offset=0, .match_offset=67398 }, { .children_offset=0, .match_offset=124995 }, { .children_offset=48158, .match_offset=74444 }, { .children_offset=48160, .match_offset=0 }, { .children_offset=48162, .match_offset=0 }, { .children_offset=0, .match_offset=103351 }, { .children_offset=48164, .match_offset=0 }, { .children_offset=48166, .match_offset=0 }, { .children_offset=48170, .match_offset=0 }, { .children_offset=48172, .match_offset=0 }, { .children_offset=48174, .match_offset=0 }, { .children_offset=48176, .match_offset=0 }, { .children_offset=48178, .match_offset=0 }, { .children_offset=48180, .match_offset=0 }, { .children_offset=0, .match_offset=110092 }, { .children_offset=48182, .match_offset=0 }, { .children_offset=48185, .match_offset=0 }, { .children_offset=48187, .match_offset=0 }, { .children_offset=48189, .match_offset=0 }, { .children_offset=0, .match_offset=53494 }, { .children_offset=48191, .match_offset=0 }, { .children_offset=48193, .match_offset=0 }, { .children_offset=48195, .match_offset=0 }, { .children_offset=48197, .match_offset=0 }, { .children_offset=48199, .match_offset=0 }, { .children_offset=48201, .match_offset=0 }, { .children_offset=0, .match_offset=30305 }, { .children_offset=48203, .match_offset=0 }, { .children_offset=48205, .match_offset=0 }, { .children_offset=48207, .match_offset=0 }, { .children_offset=48209, .match_offset=0 }, { .children_offset=48211, .match_offset=0 }, { .children_offset=0, .match_offset=6146 }, { .children_offset=48213, .match_offset=0 }, { .children_offset=48215, .match_offset=0 }, { .children_offset=48217, .match_offset=0 }, { .children_offset=48219, .match_offset=0 }, { .children_offset=48221, .match_offset=0 }, { .children_offset=0, .match_offset=64751 }, { .children_offset=48223, .match_offset=0 }, { .children_offset=48225, .match_offset=0 }, { .children_offset=48227, .match_offset=0 }, { .children_offset=48229, .match_offset=0 }, { .children_offset=48232, .match_offset=0 }, { .children_offset=48234, .match_offset=0 }, { .children_offset=48236, .match_offset=0 }, { .children_offset=48238, .match_offset=0 }, { .children_offset=48240, .match_offset=0 }, { .children_offset=48242, .match_offset=0 }, { .children_offset=48244, .match_offset=0 }, { .children_offset=48246, .match_offset=0 }, { .children_offset=48248, .match_offset=0 }, { .children_offset=0, .match_offset=28027 }, { .children_offset=48250, .match_offset=0 }, { .children_offset=48252, .match_offset=0 }, { .children_offset=48254, .match_offset=0 }, { .children_offset=48256, .match_offset=0 }, { .children_offset=48258, .match_offset=0 }, { .children_offset=48260, .match_offset=0 }, { .children_offset=48262, .match_offset=0 }, { .children_offset=48264, .match_offset=0 }, { .children_offset=0, .match_offset=135753 }, { .children_offset=0, .match_offset=104390 }, { .children_offset=48266, .match_offset=0 }, { .children_offset=48273, .match_offset=0 }, { .children_offset=48275, .match_offset=0 }, { .children_offset=48277, .match_offset=0 }, { .children_offset=48279, .match_offset=0 }, { .children_offset=0, .match_offset=46823 }, { .children_offset=48281, .match_offset=0 }, { .children_offset=48283, .match_offset=0 }, { .children_offset=48285, .match_offset=0 }, { .children_offset=48287, .match_offset=0 }, { .children_offset=48289, .match_offset=0 }, { .children_offset=0, .match_offset=10908 }, { .children_offset=0, .match_offset=10768 }, { .children_offset=48291, .match_offset=0 }, { .children_offset=48293, .match_offset=0 }, { .children_offset=48295, .match_offset=0 }, { .children_offset=48297, .match_offset=0 }, { .children_offset=48299, .match_offset=0 }, { .children_offset=0, .match_offset=5619 }, { .children_offset=0, .match_offset=52726 }, { .children_offset=0, .match_offset=55427 }, { .children_offset=48303, .match_offset=0 }, { .children_offset=0, .match_offset=103930 }, { .children_offset=48305, .match_offset=0 }, { .children_offset=48307, .match_offset=0 }, { .children_offset=48309, .match_offset=0 }, { .children_offset=48311, .match_offset=0 }, { .children_offset=0, .match_offset=62351 }, { .children_offset=48313, .match_offset=60916 }, { .children_offset=48328, .match_offset=89176 }, { .children_offset=48330, .match_offset=0 }, { .children_offset=48332, .match_offset=0 }, { .children_offset=48335, .match_offset=0 }, { .children_offset=48337, .match_offset=5098 }, { .children_offset=48343, .match_offset=0 }, { .children_offset=48346, .match_offset=0 }, { .children_offset=48348, .match_offset=0 }, { .children_offset=48350, .match_offset=0 }, { .children_offset=48352, .match_offset=0 }, { .children_offset=48354, .match_offset=0 }, { .children_offset=0, .match_offset=113455 }, { .children_offset=48356, .match_offset=0 }, { .children_offset=48358, .match_offset=0 }, { .children_offset=48360, .match_offset=0 }, { .children_offset=48362, .match_offset=0 }, { .children_offset=0, .match_offset=6228 }, { .children_offset=48364, .match_offset=0 }, { .children_offset=48366, .match_offset=0 }, { .children_offset=48368, .match_offset=0 }, { .children_offset=0, .match_offset=30808 }, { .children_offset=48370, .match_offset=0 }, { .children_offset=48372, .match_offset=0 }, { .children_offset=48374, .match_offset=0 }, { .children_offset=48376, .match_offset=78694 }, { .children_offset=48378, .match_offset=0 }, { .children_offset=0, .match_offset=135000 }, { .children_offset=0, .match_offset=113401 }, { .children_offset=48380, .match_offset=0 }, { .children_offset=48382, .match_offset=0 }, { .children_offset=48384, .match_offset=0 }, { .children_offset=48386, .match_offset=0 }, { .children_offset=48388, .match_offset=15347 }, { .children_offset=48390, .match_offset=0 }, { .children_offset=0, .match_offset=134184 }, { .children_offset=48392, .match_offset=0 }, { .children_offset=48394, .match_offset=0 }, { .children_offset=48396, .match_offset=0 }, { .children_offset=0, .match_offset=49895 }, { .children_offset=48398, .match_offset=0 }, { .children_offset=48400, .match_offset=0 }, { .children_offset=48402, .match_offset=0 }, { .children_offset=48404, .match_offset=0 }, { .children_offset=0, .match_offset=20298 }, { .children_offset=48406, .match_offset=0 }, { .children_offset=48409, .match_offset=0 }, { .children_offset=48411, .match_offset=0 }, { .children_offset=0, .match_offset=65265 }, { .children_offset=48413, .match_offset=0 }, { .children_offset=0, .match_offset=102892 }, { .children_offset=0, .match_offset=113401 }, { .children_offset=48415, .match_offset=0 }, { .children_offset=48417, .match_offset=0 }, { .children_offset=48420, .match_offset=0 }, { .children_offset=48422, .match_offset=0 }, { .children_offset=48424, .match_offset=0 }, { .children_offset=48426, .match_offset=0 }, { .children_offset=0, .match_offset=77851 }, { .children_offset=48428, .match_offset=0 }, { .children_offset=48430, .match_offset=0 }, { .children_offset=48432, .match_offset=0 }, { .children_offset=0, .match_offset=48225 }, { .children_offset=48434, .match_offset=0 }, { .children_offset=48437, .match_offset=0 }, { .children_offset=48439, .match_offset=0 }, { .children_offset=48441, .match_offset=0 }, { .children_offset=48443, .match_offset=0 }, { .children_offset=0, .match_offset=25913 }, { .children_offset=48445, .match_offset=0 }, { .children_offset=48447, .match_offset=0 }, { .children_offset=48449, .match_offset=68602 }, { .children_offset=48451, .match_offset=0 }, { .children_offset=48453, .match_offset=0 }, { .children_offset=0, .match_offset=77747 }, { .children_offset=48455, .match_offset=0 }, { .children_offset=48457, .match_offset=0 }, { .children_offset=48459, .match_offset=0 }, { .children_offset=0, .match_offset=86054 }, { .children_offset=48461, .match_offset=0 }, { .children_offset=48463, .match_offset=0 }, { .children_offset=48465, .match_offset=0 }, { .children_offset=48467, .match_offset=0 }, { .children_offset=48469, .match_offset=0 }, { .children_offset=0, .match_offset=50590 }, { .children_offset=48471, .match_offset=0 }, { .children_offset=48473, .match_offset=0 }, { .children_offset=48475, .match_offset=0 }, { .children_offset=48477, .match_offset=0 }, { .children_offset=0, .match_offset=40864 }, { .children_offset=48479, .match_offset=0 }, { .children_offset=0, .match_offset=63127 }, { .children_offset=48481, .match_offset=0 }, { .children_offset=48484, .match_offset=0 }, { .children_offset=48488, .match_offset=89552 }, { .children_offset=48490, .match_offset=0 }, { .children_offset=48492, .match_offset=0 }, { .children_offset=0, .match_offset=122004 }, { .children_offset=0, .match_offset=11718 }, { .children_offset=48494, .match_offset=0 }, { .children_offset=0, .match_offset=30662 }, { .children_offset=48496, .match_offset=0 }, { .children_offset=0, .match_offset=20439 }, { .children_offset=48498, .match_offset=0 }, { .children_offset=0, .match_offset=14881 }, { .children_offset=48502, .match_offset=0 }, { .children_offset=48504, .match_offset=0 }, { .children_offset=0, .match_offset=59375 }, { .children_offset=48506, .match_offset=0 }, { .children_offset=48508, .match_offset=0 }, { .children_offset=48510, .match_offset=0 }, { .children_offset=0, .match_offset=61149 }, { .children_offset=48512, .match_offset=0 }, { .children_offset=48515, .match_offset=0 }, { .children_offset=48517, .match_offset=0 }, { .children_offset=0, .match_offset=44719 }, { .children_offset=48520, .match_offset=0 }, { .children_offset=48522, .match_offset=0 }, { .children_offset=48524, .match_offset=0 }, { .children_offset=48526, .match_offset=0 }, { .children_offset=0, .match_offset=48151 }, { .children_offset=48528, .match_offset=0 }, { .children_offset=0, .match_offset=112682 }, { .children_offset=48530, .match_offset=0 }, { .children_offset=48532, .match_offset=0 }, { .children_offset=48534, .match_offset=0 }, { .children_offset=0, .match_offset=35401 }, { .children_offset=48536, .match_offset=0 }, { .children_offset=48542, .match_offset=0 }, { .children_offset=48544, .match_offset=0 }, { .children_offset=48546, .match_offset=0 }, { .children_offset=48548, .match_offset=0 }, { .children_offset=48550, .match_offset=0 }, { .children_offset=48552, .match_offset=0 }, { .children_offset=0, .match_offset=52617 }, { .children_offset=48554, .match_offset=0 }, { .children_offset=48556, .match_offset=0 }, { .children_offset=48558, .match_offset=0 }, { .children_offset=48560, .match_offset=0 }, { .children_offset=48562, .match_offset=0 }, { .children_offset=48564, .match_offset=0 }, { .children_offset=0, .match_offset=12130 }, { .children_offset=48566, .match_offset=0 }, { .children_offset=48568, .match_offset=0 }, { .children_offset=48570, .match_offset=0 }, { .children_offset=48572, .match_offset=108137 }, { .children_offset=48574, .match_offset=0 }, { .children_offset=48576, .match_offset=0 }, { .children_offset=0, .match_offset=55985 }, { .children_offset=48578, .match_offset=0 }, { .children_offset=48580, .match_offset=0 }, { .children_offset=48582, .match_offset=0 }, { .children_offset=48584, .match_offset=0 }, { .children_offset=48589, .match_offset=0 }, { .children_offset=48591, .match_offset=0 }, { .children_offset=48593, .match_offset=0 }, { .children_offset=48595, .match_offset=0 }, { .children_offset=48597, .match_offset=0 }, { .children_offset=48599, .match_offset=0 }, { .children_offset=0, .match_offset=7583 }, { .children_offset=0, .match_offset=73468 }, { .children_offset=48601, .match_offset=0 }, { .children_offset=48604, .match_offset=0 }, { .children_offset=48606, .match_offset=0 }, { .children_offset=48608, .match_offset=0 }, { .children_offset=48610, .match_offset=0 }, { .children_offset=48612, .match_offset=0 }, { .children_offset=48614, .match_offset=0 }, { .children_offset=48616, .match_offset=0 }, { .children_offset=48618, .match_offset=0 }, { .children_offset=48620, .match_offset=0 }, { .children_offset=0, .match_offset=38892 }, { .children_offset=48622, .match_offset=0 }, { .children_offset=48624, .match_offset=0 }, { .children_offset=48626, .match_offset=0 }, { .children_offset=48628, .match_offset=0 }, { .children_offset=48630, .match_offset=0 }, { .children_offset=48632, .match_offset=0 }, { .children_offset=48634, .match_offset=0 }, { .children_offset=0, .match_offset=111469 }, { .children_offset=48636, .match_offset=0 }, { .children_offset=48638, .match_offset=0 }, { .children_offset=48640, .match_offset=0 }, { .children_offset=48642, .match_offset=0 }, { .children_offset=48644, .match_offset=0 }, { .children_offset=48646, .match_offset=0 }, { .children_offset=0, .match_offset=114928 }, { .children_offset=48648, .match_offset=0 }, { .children_offset=48651, .match_offset=0 }, { .children_offset=0, .match_offset=69344 }, { .children_offset=48653, .match_offset=0 }, { .children_offset=48655, .match_offset=0 }, { .children_offset=48657, .match_offset=0 }, { .children_offset=0, .match_offset=43289 }, { .children_offset=48659, .match_offset=0 }, { .children_offset=48661, .match_offset=0 }, { .children_offset=48663, .match_offset=0 }, { .children_offset=48665, .match_offset=0 }, { .children_offset=48667, .match_offset=0 }, { .children_offset=0, .match_offset=64751 }, { .children_offset=48669, .match_offset=0 }, { .children_offset=48675, .match_offset=0 }, { .children_offset=0, .match_offset=41763 }, { .children_offset=0, .match_offset=45990 }, { .children_offset=48677, .match_offset=0 }, { .children_offset=48679, .match_offset=0 }, { .children_offset=48682, .match_offset=0 }, { .children_offset=48692, .match_offset=89816 }, { .children_offset=0, .match_offset=52200 }, { .children_offset=0, .match_offset=65251 }, { .children_offset=0, .match_offset=113411 }, { .children_offset=0, .match_offset=86704 }, { .children_offset=0, .match_offset=45105 }, { .children_offset=0, .match_offset=50049 }, { .children_offset=0, .match_offset=118603 }, { .children_offset=0, .match_offset=87835 }, { .children_offset=0, .match_offset=74239 }, { .children_offset=0, .match_offset=135856 }, { .children_offset=48703, .match_offset=133073 }, { .children_offset=0, .match_offset=80552 }, { .children_offset=0, .match_offset=5733 }, { .children_offset=0, .match_offset=64573 }, { .children_offset=0, .match_offset=85226 }, { .children_offset=0, .match_offset=13205 }, { .children_offset=0, .match_offset=126551 }, { .children_offset=0, .match_offset=43302 }, { .children_offset=0, .match_offset=109392 }, { .children_offset=0, .match_offset=71534 }, { .children_offset=48706, .match_offset=0 }, { .children_offset=0, .match_offset=43933 }, { .children_offset=48708, .match_offset=0 }, { .children_offset=48711, .match_offset=0 }, { .children_offset=48713, .match_offset=0 }, { .children_offset=48715, .match_offset=0 }, { .children_offset=48717, .match_offset=0 }, { .children_offset=0, .match_offset=60502 }, { .children_offset=0, .match_offset=88834 }, { .children_offset=48719, .match_offset=0 }, { .children_offset=0, .match_offset=48207 }, { .children_offset=48721, .match_offset=0 }, { .children_offset=48723, .match_offset=0 }, { .children_offset=48725, .match_offset=0 }, { .children_offset=48727, .match_offset=0 }, { .children_offset=48729, .match_offset=0 }, { .children_offset=0, .match_offset=129580 }, { .children_offset=48731, .match_offset=25558 }, { .children_offset=48743, .match_offset=125098 }, { .children_offset=48747, .match_offset=90520 }, { .children_offset=48749, .match_offset=0 }, { .children_offset=48751, .match_offset=0 }, { .children_offset=0, .match_offset=4897 }, { .children_offset=0, .match_offset=63408 }, { .children_offset=48753, .match_offset=0 }, { .children_offset=0, .match_offset=2283 }, { .children_offset=48755, .match_offset=0 }, { .children_offset=0, .match_offset=5532 }, { .children_offset=0, .match_offset=87005 }, { .children_offset=48758, .match_offset=6619 }, { .children_offset=48761, .match_offset=70778 }, { .children_offset=0, .match_offset=2100 }, { .children_offset=48763, .match_offset=0 }, { .children_offset=0, .match_offset=46753 }, { .children_offset=48765, .match_offset=0 }, { .children_offset=48771, .match_offset=6927 }, { .children_offset=0, .match_offset=42465 }, { .children_offset=48773, .match_offset=0 }, { .children_offset=0, .match_offset=57156 }, { .children_offset=48775, .match_offset=57156 }, { .children_offset=48779, .match_offset=0 }, { .children_offset=0, .match_offset=43796 }, { .children_offset=0, .match_offset=50085 }, { .children_offset=0, .match_offset=73481 }, { .children_offset=48781, .match_offset=0 }, { .children_offset=48783, .match_offset=0 }, { .children_offset=0, .match_offset=74026 }, { .children_offset=0, .match_offset=29883 }, { .children_offset=48786, .match_offset=0 }, { .children_offset=48788, .match_offset=0 }, { .children_offset=0, .match_offset=49906 }, { .children_offset=48790, .match_offset=65098 }, { .children_offset=0, .match_offset=123088 }, { .children_offset=48792, .match_offset=70830 }, { .children_offset=0, .match_offset=62347 }, { .children_offset=48794, .match_offset=0 }, { .children_offset=0, .match_offset=38779 }, { .children_offset=0, .match_offset=38130 }, { .children_offset=48797, .match_offset=0 }, { .children_offset=48799, .match_offset=0 }, { .children_offset=48801, .match_offset=0 }, { .children_offset=0, .match_offset=65179 }, { .children_offset=0, .match_offset=65356 }, { .children_offset=0, .match_offset=90064 }, { .children_offset=48803, .match_offset=0 }, { .children_offset=0, .match_offset=53959 }, { .children_offset=0, .match_offset=6138 }, { .children_offset=0, .match_offset=114592 }, { .children_offset=48807, .match_offset=103383 }, { .children_offset=0, .match_offset=77825 }, { .children_offset=48817, .match_offset=50625 }, { .children_offset=0, .match_offset=22680 }, { .children_offset=48820, .match_offset=0 }, { .children_offset=48822, .match_offset=0 }, { .children_offset=48824, .match_offset=0 }, { .children_offset=48826, .match_offset=0 }, { .children_offset=0, .match_offset=110568 }, { .children_offset=48828, .match_offset=27556 }, { .children_offset=0, .match_offset=44424 }, { .children_offset=48831, .match_offset=103789 }, { .children_offset=48833, .match_offset=0 }, { .children_offset=0, .match_offset=42908 }, { .children_offset=48835, .match_offset=57931 }, { .children_offset=48842, .match_offset=63493 }, { .children_offset=0, .match_offset=6707 }, { .children_offset=48844, .match_offset=129964 }, { .children_offset=0, .match_offset=56949 }, { .children_offset=0, .match_offset=125481 }, { .children_offset=48846, .match_offset=87338 }, { .children_offset=0, .match_offset=33922 }, { .children_offset=0, .match_offset=60720 }, { .children_offset=48848, .match_offset=0 }, { .children_offset=0, .match_offset=6403 }, { .children_offset=0, .match_offset=118463 }, { .children_offset=0, .match_offset=63166 }, { .children_offset=48850, .match_offset=0 }, { .children_offset=0, .match_offset=35190 }, { .children_offset=48856, .match_offset=12606 }, { .children_offset=0, .match_offset=37521 }, { .children_offset=0, .match_offset=10304 }, { .children_offset=0, .match_offset=25760 }, { .children_offset=0, .match_offset=67519 }, { .children_offset=48858, .match_offset=0 }, { .children_offset=0, .match_offset=42963 }, { .children_offset=48861, .match_offset=0 }, { .children_offset=0, .match_offset=55210 }, { .children_offset=48863, .match_offset=125845 }, { .children_offset=48865, .match_offset=0 }, { .children_offset=48867, .match_offset=0 }, { .children_offset=48869, .match_offset=0 }, { .children_offset=48872, .match_offset=0 }, { .children_offset=0, .match_offset=30797 }, { .children_offset=0, .match_offset=87077 }, { .children_offset=48874, .match_offset=8780 }, { .children_offset=48889, .match_offset=0 }, { .children_offset=0, .match_offset=43515 }, { .children_offset=0, .match_offset=25665 }, { .children_offset=0, .match_offset=7078 }, { .children_offset=0, .match_offset=54382 }, { .children_offset=48895, .match_offset=0 }, { .children_offset=0, .match_offset=57409 }, { .children_offset=48897, .match_offset=0 }, { .children_offset=48900, .match_offset=88670 }, { .children_offset=0, .match_offset=8975 }, { .children_offset=48902, .match_offset=0 }, { .children_offset=48904, .match_offset=0 }, { .children_offset=0, .match_offset=133324 }, { .children_offset=48906, .match_offset=74204 }, { .children_offset=0, .match_offset=114030 }, { .children_offset=48908, .match_offset=0 }, { .children_offset=0, .match_offset=125484 }, { .children_offset=48911, .match_offset=0 }, { .children_offset=48913, .match_offset=0 }, { .children_offset=0, .match_offset=86935 }, { .children_offset=48915, .match_offset=62820 }, { .children_offset=48917, .match_offset=0 }, { .children_offset=48919, .match_offset=0 }, { .children_offset=48921, .match_offset=0 }, { .children_offset=48923, .match_offset=0 }, { .children_offset=48925, .match_offset=0 }, { .children_offset=0, .match_offset=29258 }, { .children_offset=48927, .match_offset=0 }, { .children_offset=48929, .match_offset=0 }, { .children_offset=0, .match_offset=5596 }, { .children_offset=48931, .match_offset=56924 }, { .children_offset=48935, .match_offset=0 }, { .children_offset=0, .match_offset=112946 }, { .children_offset=48937, .match_offset=0 }, { .children_offset=48939, .match_offset=0 }, { .children_offset=48941, .match_offset=0 }, { .children_offset=0, .match_offset=111200 }, { .children_offset=48943, .match_offset=0 }, { .children_offset=48945, .match_offset=0 }, { .children_offset=48947, .match_offset=0 }, { .children_offset=0, .match_offset=11988 }, { .children_offset=48949, .match_offset=0 }, { .children_offset=48951, .match_offset=0 }, { .children_offset=0, .match_offset=67791 }, { .children_offset=48953, .match_offset=114044 }, { .children_offset=0, .match_offset=8881 }, { .children_offset=0, .match_offset=8490 }, { .children_offset=0, .match_offset=123764 }, { .children_offset=48957, .match_offset=81082 }, { .children_offset=48959, .match_offset=0 }, { .children_offset=0, .match_offset=7064 }, { .children_offset=48961, .match_offset=77389 }, { .children_offset=48969, .match_offset=0 }, { .children_offset=48971, .match_offset=0 }, { .children_offset=0, .match_offset=40893 }, { .children_offset=48973, .match_offset=0 }, { .children_offset=48976, .match_offset=0 }, { .children_offset=0, .match_offset=53979 }, { .children_offset=48978, .match_offset=0 }, { .children_offset=0, .match_offset=84688 }, { .children_offset=48981, .match_offset=0 }, { .children_offset=0, .match_offset=111125 }, { .children_offset=48983, .match_offset=88825 }, { .children_offset=48986, .match_offset=0 }, { .children_offset=0, .match_offset=62163 }, { .children_offset=48988, .match_offset=0 }, { .children_offset=48990, .match_offset=0 }, { .children_offset=48992, .match_offset=0 }, { .children_offset=48994, .match_offset=0 }, { .children_offset=0, .match_offset=61889 }, { .children_offset=48996, .match_offset=0 }, { .children_offset=0, .match_offset=44114 }, { .children_offset=48998, .match_offset=0 }, { .children_offset=49000, .match_offset=0 }, { .children_offset=0, .match_offset=9039 }, { .children_offset=0, .match_offset=90003 }, { .children_offset=0, .match_offset=64256 }, { .children_offset=49002, .match_offset=123237 }, { .children_offset=49005, .match_offset=0 }, { .children_offset=49007, .match_offset=0 }, { .children_offset=49009, .match_offset=0 }, { .children_offset=49011, .match_offset=0 }, { .children_offset=49013, .match_offset=0 }, { .children_offset=0, .match_offset=1221 }, { .children_offset=49015, .match_offset=0 }, { .children_offset=0, .match_offset=70783 }, { .children_offset=49017, .match_offset=0 }, { .children_offset=49019, .match_offset=0 }, { .children_offset=0, .match_offset=61646 }, { .children_offset=49021, .match_offset=109572 }, { .children_offset=49023, .match_offset=0 }, { .children_offset=49025, .match_offset=0 }, { .children_offset=0, .match_offset=14229 }, { .children_offset=49027, .match_offset=0 }, { .children_offset=49030, .match_offset=0 }, { .children_offset=49032, .match_offset=0 }, { .children_offset=49034, .match_offset=0 }, { .children_offset=49036, .match_offset=0 }, { .children_offset=49038, .match_offset=0 }, { .children_offset=0, .match_offset=122472 }, { .children_offset=49040, .match_offset=0 }, { .children_offset=49042, .match_offset=0 }, { .children_offset=49044, .match_offset=0 }, { .children_offset=0, .match_offset=74592 }, { .children_offset=49046, .match_offset=0 }, { .children_offset=49051, .match_offset=63395 }, { .children_offset=0, .match_offset=60017 }, { .children_offset=49053, .match_offset=123491 }, { .children_offset=49056, .match_offset=0 }, { .children_offset=49059, .match_offset=0 }, { .children_offset=49061, .match_offset=0 }, { .children_offset=49063, .match_offset=66420 }, { .children_offset=0, .match_offset=37921 }, { .children_offset=49065, .match_offset=0 }, { .children_offset=49067, .match_offset=68543 }, { .children_offset=49069, .match_offset=0 }, { .children_offset=49071, .match_offset=0 }, { .children_offset=49073, .match_offset=0 }, { .children_offset=49075, .match_offset=0 }, { .children_offset=49077, .match_offset=0 }, { .children_offset=49079, .match_offset=0 }, { .children_offset=0, .match_offset=58554 }, { .children_offset=49081, .match_offset=0 }, { .children_offset=49083, .match_offset=0 }, { .children_offset=49086, .match_offset=0 }, { .children_offset=49088, .match_offset=0 }, { .children_offset=49090, .match_offset=0 }, { .children_offset=49092, .match_offset=113977 }, { .children_offset=0, .match_offset=6202 }, { .children_offset=49094, .match_offset=61173 }, { .children_offset=49096, .match_offset=0 }, { .children_offset=49103, .match_offset=0 }, { .children_offset=49105, .match_offset=0 }, { .children_offset=49107, .match_offset=0 }, { .children_offset=49109, .match_offset=0 }, { .children_offset=49111, .match_offset=5309 }, { .children_offset=0, .match_offset=51117 }, { .children_offset=49113, .match_offset=0 }, { .children_offset=49116, .match_offset=0 }, { .children_offset=49118, .match_offset=0 }, { .children_offset=0, .match_offset=105788 }, { .children_offset=49120, .match_offset=0 }, { .children_offset=49122, .match_offset=0 }, { .children_offset=0, .match_offset=1529 }, { .children_offset=49124, .match_offset=0 }, { .children_offset=49126, .match_offset=0 }, { .children_offset=49128, .match_offset=0 }, { .children_offset=0, .match_offset=43623 }, { .children_offset=49130, .match_offset=0 }, { .children_offset=49132, .match_offset=0 }, { .children_offset=0, .match_offset=131092 }, { .children_offset=49134, .match_offset=0 }, { .children_offset=49137, .match_offset=0 }, { .children_offset=49139, .match_offset=0 }, { .children_offset=49141, .match_offset=0 }, { .children_offset=0, .match_offset=86709 }, { .children_offset=49143, .match_offset=0 }, { .children_offset=0, .match_offset=108092 }, { .children_offset=49145, .match_offset=0 }, { .children_offset=49148, .match_offset=0 }, { .children_offset=49150, .match_offset=0 }, { .children_offset=49152, .match_offset=0 }, { .children_offset=0, .match_offset=122497 }, { .children_offset=49154, .match_offset=0 }, { .children_offset=0, .match_offset=42338 }, { .children_offset=49156, .match_offset=49868 }, { .children_offset=0, .match_offset=1968 }, { .children_offset=49160, .match_offset=0 }, { .children_offset=49162, .match_offset=0 }, { .children_offset=49165, .match_offset=0 }, { .children_offset=0, .match_offset=72419 }, { .children_offset=49167, .match_offset=0 }, { .children_offset=49169, .match_offset=0 }, { .children_offset=0, .match_offset=125565 }, { .children_offset=49171, .match_offset=0 }, { .children_offset=0, .match_offset=78712 }, { .children_offset=49173, .match_offset=85458 }, { .children_offset=49177, .match_offset=0 }, { .children_offset=49184, .match_offset=0 }, { .children_offset=49186, .match_offset=0 }, { .children_offset=49188, .match_offset=0 }, { .children_offset=49190, .match_offset=0 }, { .children_offset=49192, .match_offset=0 }, { .children_offset=0, .match_offset=5077 }, { .children_offset=49194, .match_offset=0 }, { .children_offset=0, .match_offset=103338 }, { .children_offset=49196, .match_offset=0 }, { .children_offset=49198, .match_offset=0 }, { .children_offset=49200, .match_offset=0 }, { .children_offset=49202, .match_offset=0 }, { .children_offset=49204, .match_offset=0 }, { .children_offset=0, .match_offset=57380 }, { .children_offset=49206, .match_offset=0 }, { .children_offset=49208, .match_offset=0 }, { .children_offset=49210, .match_offset=0 }, { .children_offset=0, .match_offset=108120 }, { .children_offset=49212, .match_offset=0 }, { .children_offset=49214, .match_offset=0 }, { .children_offset=49216, .match_offset=0 }, { .children_offset=49218, .match_offset=0 }, { .children_offset=49220, .match_offset=0 }, { .children_offset=0, .match_offset=42214 }, { .children_offset=49222, .match_offset=0 }, { .children_offset=49224, .match_offset=0 }, { .children_offset=0, .match_offset=40429 }, { .children_offset=49226, .match_offset=0 }, { .children_offset=49228, .match_offset=0 }, { .children_offset=49230, .match_offset=0 }, { .children_offset=49232, .match_offset=0 }, { .children_offset=49235, .match_offset=0 }, { .children_offset=49237, .match_offset=0 }, { .children_offset=49239, .match_offset=0 }, { .children_offset=49241, .match_offset=0 }, { .children_offset=49243, .match_offset=0 }, { .children_offset=49245, .match_offset=0 }, { .children_offset=49247, .match_offset=0 }, { .children_offset=49249, .match_offset=0 }, { .children_offset=0, .match_offset=35777 }, { .children_offset=49251, .match_offset=0 }, { .children_offset=49253, .match_offset=0 }, { .children_offset=49255, .match_offset=0 }, { .children_offset=49257, .match_offset=0 }, { .children_offset=49259, .match_offset=0 }, { .children_offset=49261, .match_offset=0 }, { .children_offset=49263, .match_offset=0 }, { .children_offset=49265, .match_offset=0 }, { .children_offset=49267, .match_offset=0 }, { .children_offset=0, .match_offset=31080 }, { .children_offset=0, .match_offset=132891 }, { .children_offset=49269, .match_offset=0 }, { .children_offset=0, .match_offset=64195 }, { .children_offset=49273, .match_offset=0 }, { .children_offset=49275, .match_offset=0 }, { .children_offset=49277, .match_offset=0 }, { .children_offset=0, .match_offset=39463 }, { .children_offset=49279, .match_offset=0 }, { .children_offset=0, .match_offset=74154 }, { .children_offset=49281, .match_offset=0 }, { .children_offset=49288, .match_offset=126428 }, { .children_offset=0, .match_offset=114736 }, { .children_offset=0, .match_offset=122013 }, { .children_offset=0, .match_offset=8951 }, { .children_offset=0, .match_offset=8654 }, { .children_offset=49290, .match_offset=0 }, { .children_offset=49292, .match_offset=43157 }, { .children_offset=49294, .match_offset=0 }, { .children_offset=49302, .match_offset=64302 }, { .children_offset=49304, .match_offset=0 }, { .children_offset=0, .match_offset=10204 }, { .children_offset=0, .match_offset=22322 }, { .children_offset=0, .match_offset=38908 }, { .children_offset=0, .match_offset=61061 }, { .children_offset=0, .match_offset=44766 }, { .children_offset=0, .match_offset=136002 }, { .children_offset=0, .match_offset=26009 }, { .children_offset=0, .match_offset=104409 }, { .children_offset=49306, .match_offset=26274 }, { .children_offset=49312, .match_offset=77404 }, { .children_offset=0, .match_offset=113397 }, { .children_offset=49314, .match_offset=65497 }, { .children_offset=0, .match_offset=113737 }, { .children_offset=49316, .match_offset=12656 }, { .children_offset=0, .match_offset=71500 }, { .children_offset=49318, .match_offset=80938 }, { .children_offset=0, .match_offset=61489 }, { .children_offset=0, .match_offset=22644 }, { .children_offset=49320, .match_offset=0 }, { .children_offset=49346, .match_offset=0 }, { .children_offset=0, .match_offset=44690 }, { .children_offset=0, .match_offset=126563 }, { .children_offset=0, .match_offset=77173 }, { .children_offset=0, .match_offset=8758 }, { .children_offset=0, .match_offset=84883 }, { .children_offset=49358, .match_offset=25377 }, { .children_offset=0, .match_offset=88830 }, { .children_offset=49360, .match_offset=0 }, { .children_offset=49362, .match_offset=0 }, { .children_offset=49364, .match_offset=0 }, { .children_offset=49366, .match_offset=0 }, { .children_offset=0, .match_offset=22413 }, { .children_offset=49368, .match_offset=0 }, { .children_offset=49370, .match_offset=0 }, { .children_offset=0, .match_offset=42310 }, { .children_offset=49372, .match_offset=0 }, { .children_offset=49374, .match_offset=0 }, { .children_offset=49376, .match_offset=0 }, { .children_offset=49378, .match_offset=0 }, { .children_offset=49380, .match_offset=0 }, { .children_offset=0, .match_offset=8818 }, { .children_offset=0, .match_offset=33384 }, { .children_offset=49382, .match_offset=0 }, { .children_offset=49384, .match_offset=34623 }, { .children_offset=0, .match_offset=72319 }, { .children_offset=49386, .match_offset=0 }, { .children_offset=49392, .match_offset=0 }, { .children_offset=0, .match_offset=76999 }, { .children_offset=0, .match_offset=39235 }, { .children_offset=0, .match_offset=26448 }, { .children_offset=0, .match_offset=30525 }, { .children_offset=0, .match_offset=44420 }, { .children_offset=49402, .match_offset=53557 }, { .children_offset=0, .match_offset=12443 }, { .children_offset=0, .match_offset=27447 }, { .children_offset=0, .match_offset=42038 }, { .children_offset=0, .match_offset=115742 }, { .children_offset=0, .match_offset=67382 }, { .children_offset=49405, .match_offset=0 }, { .children_offset=0, .match_offset=27177 }, { .children_offset=0, .match_offset=6416 }, { .children_offset=0, .match_offset=46144 }, { .children_offset=0, .match_offset=84838 }, { .children_offset=0, .match_offset=21966 }, { .children_offset=0, .match_offset=61849 }, { .children_offset=0, .match_offset=22640 }, { .children_offset=0, .match_offset=31053 }, { .children_offset=0, .match_offset=32783 }, { .children_offset=0, .match_offset=27521 }, { .children_offset=49416, .match_offset=0 }, { .children_offset=0, .match_offset=103705 }, { .children_offset=0, .match_offset=133686 }, { .children_offset=0, .match_offset=50042 }, { .children_offset=49427, .match_offset=46041 }, { .children_offset=0, .match_offset=7500 }, { .children_offset=0, .match_offset=87825 }, { .children_offset=0, .match_offset=109610 }, { .children_offset=0, .match_offset=103589 }, { .children_offset=0, .match_offset=27688 }, { .children_offset=0, .match_offset=64205 }, { .children_offset=49429, .match_offset=69020 }, { .children_offset=0, .match_offset=58782 }, { .children_offset=49431, .match_offset=0 }, { .children_offset=0, .match_offset=50597 }, { .children_offset=0, .match_offset=113704 }, { .children_offset=49442, .match_offset=132144 }, { .children_offset=0, .match_offset=9900 }, { .children_offset=0, .match_offset=80503 }, { .children_offset=0, .match_offset=77742 }, { .children_offset=0, .match_offset=52269 }, { .children_offset=0, .match_offset=60791 }, { .children_offset=0, .match_offset=74547 }, { .children_offset=0, .match_offset=126568 }, { .children_offset=0, .match_offset=35125 }, { .children_offset=49444, .match_offset=0 }, { .children_offset=0, .match_offset=12119 }, { .children_offset=0, .match_offset=109502 }, { .children_offset=0, .match_offset=11943 }, { .children_offset=0, .match_offset=52227 }, { .children_offset=49448, .match_offset=42925 }, { .children_offset=49453, .match_offset=0 }, { .children_offset=49455, .match_offset=0 }, { .children_offset=49457, .match_offset=0 }, { .children_offset=0, .match_offset=104536 }, { .children_offset=49459, .match_offset=48075 }, { .children_offset=0, .match_offset=7083 }, { .children_offset=49461, .match_offset=0 }, { .children_offset=49463, .match_offset=134489 }, { .children_offset=49465, .match_offset=0 }, { .children_offset=49467, .match_offset=0 }, { .children_offset=49469, .match_offset=0 }, { .children_offset=0, .match_offset=134580 }, { .children_offset=49471, .match_offset=0 }, { .children_offset=0, .match_offset=112705 }, { .children_offset=49473, .match_offset=26788 }, { .children_offset=49478, .match_offset=0 }, { .children_offset=49480, .match_offset=0 }, { .children_offset=49482, .match_offset=0 }, { .children_offset=49484, .match_offset=0 }, { .children_offset=0, .match_offset=73877 }, { .children_offset=49486, .match_offset=0 }, { .children_offset=49488, .match_offset=0 }, { .children_offset=49490, .match_offset=0 }, { .children_offset=49492, .match_offset=0 }, { .children_offset=49494, .match_offset=0 }, { .children_offset=0, .match_offset=50101 }, { .children_offset=49496, .match_offset=0 }, { .children_offset=49499, .match_offset=0 }, { .children_offset=0, .match_offset=87335 }, { .children_offset=49501, .match_offset=0 }, { .children_offset=49503, .match_offset=0 }, { .children_offset=0, .match_offset=21322 }, { .children_offset=49505, .match_offset=0 }, { .children_offset=49507, .match_offset=0 }, { .children_offset=49509, .match_offset=0 }, { .children_offset=49511, .match_offset=0 }, { .children_offset=0, .match_offset=7687 }, { .children_offset=49513, .match_offset=56918 }, { .children_offset=49516, .match_offset=0 }, { .children_offset=49518, .match_offset=0 }, { .children_offset=0, .match_offset=5670 }, { .children_offset=0, .match_offset=14550 }, { .children_offset=49520, .match_offset=108188 }, { .children_offset=49525, .match_offset=0 }, { .children_offset=49529, .match_offset=0 }, { .children_offset=0, .match_offset=43337 }, { .children_offset=49531, .match_offset=0 }, { .children_offset=0, .match_offset=68262 }, { .children_offset=49533, .match_offset=0 }, { .children_offset=49535, .match_offset=0 }, { .children_offset=0, .match_offset=78956 }, { .children_offset=49537, .match_offset=0 }, { .children_offset=49539, .match_offset=0 }, { .children_offset=49541, .match_offset=0 }, { .children_offset=0, .match_offset=32746 }, { .children_offset=49543, .match_offset=0 }, { .children_offset=49545, .match_offset=0 }, { .children_offset=0, .match_offset=33783 }, { .children_offset=49547, .match_offset=0 }, { .children_offset=0, .match_offset=26268 }, { .children_offset=49549, .match_offset=6839 }, { .children_offset=0, .match_offset=37949 }, { .children_offset=0, .match_offset=13840 }, { .children_offset=0, .match_offset=72629 }, { .children_offset=0, .match_offset=112950 }, { .children_offset=0, .match_offset=44701 }, { .children_offset=49555, .match_offset=0 }, { .children_offset=49558, .match_offset=0 }, { .children_offset=49560, .match_offset=0 }, { .children_offset=49562, .match_offset=0 }, { .children_offset=0, .match_offset=38883 }, { .children_offset=0, .match_offset=34937 }, { .children_offset=49564, .match_offset=0 }, { .children_offset=49567, .match_offset=0 }, { .children_offset=49569, .match_offset=0 }, { .children_offset=49571, .match_offset=0 }, { .children_offset=49573, .match_offset=0 }, { .children_offset=49575, .match_offset=0 }, { .children_offset=0, .match_offset=6354 }, { .children_offset=49577, .match_offset=0 }, { .children_offset=49579, .match_offset=0 }, { .children_offset=49581, .match_offset=0 }, { .children_offset=0, .match_offset=44999 }, { .children_offset=49583, .match_offset=87469 }, { .children_offset=49587, .match_offset=0 }, { .children_offset=49589, .match_offset=125013 }, { .children_offset=0, .match_offset=65195 }, { .children_offset=0, .match_offset=37229 }, { .children_offset=49592, .match_offset=0 }, { .children_offset=49594, .match_offset=0 }, { .children_offset=0, .match_offset=109851 }, { .children_offset=0, .match_offset=136047 }, { .children_offset=49596, .match_offset=61695 }, { .children_offset=49599, .match_offset=0 }, { .children_offset=49601, .match_offset=0 }, { .children_offset=49603, .match_offset=0 }, { .children_offset=0, .match_offset=114842 }, { .children_offset=49605, .match_offset=0 }, { .children_offset=49607, .match_offset=0 }, { .children_offset=49609, .match_offset=0 }, { .children_offset=49611, .match_offset=0 }, { .children_offset=49613, .match_offset=0 }, { .children_offset=0, .match_offset=84840 }, { .children_offset=49615, .match_offset=21806 }, { .children_offset=49619, .match_offset=0 }, { .children_offset=49621, .match_offset=0 }, { .children_offset=0, .match_offset=45874 }, { .children_offset=49623, .match_offset=0 }, { .children_offset=49625, .match_offset=0 }, { .children_offset=49627, .match_offset=0 }, { .children_offset=49629, .match_offset=0 }, { .children_offset=49631, .match_offset=0 }, { .children_offset=49633, .match_offset=0 }, { .children_offset=0, .match_offset=129342 }, { .children_offset=0, .match_offset=104084 }, { .children_offset=49635, .match_offset=0 }, { .children_offset=49639, .match_offset=0 }, { .children_offset=49642, .match_offset=0 }, { .children_offset=49644, .match_offset=0 }, { .children_offset=49646, .match_offset=132206 }, { .children_offset=49648, .match_offset=0 }, { .children_offset=0, .match_offset=132206 }, { .children_offset=49650, .match_offset=0 }, { .children_offset=49652, .match_offset=0 }, { .children_offset=0, .match_offset=125046 }, { .children_offset=49654, .match_offset=0 }, { .children_offset=49656, .match_offset=0 }, { .children_offset=0, .match_offset=72843 }, { .children_offset=0, .match_offset=133512 }, { .children_offset=49658, .match_offset=14541 }, { .children_offset=49663, .match_offset=0 }, { .children_offset=49665, .match_offset=0 }, { .children_offset=0, .match_offset=73246 }, { .children_offset=49667, .match_offset=0 }, { .children_offset=49670, .match_offset=0 }, { .children_offset=0, .match_offset=34304 }, { .children_offset=49672, .match_offset=0 }, { .children_offset=49674, .match_offset=0 }, { .children_offset=49676, .match_offset=0 }, { .children_offset=49678, .match_offset=0 }, { .children_offset=0, .match_offset=103145 }, { .children_offset=0, .match_offset=72425 }, { .children_offset=49680, .match_offset=0 }, { .children_offset=0, .match_offset=104423 }, { .children_offset=49682, .match_offset=85275 }, { .children_offset=49693, .match_offset=130959 }, { .children_offset=49697, .match_offset=0 }, { .children_offset=49699, .match_offset=0 }, { .children_offset=49701, .match_offset=0 }, { .children_offset=49703, .match_offset=0 }, { .children_offset=0, .match_offset=32990 }, { .children_offset=0, .match_offset=12357 }, { .children_offset=49705, .match_offset=0 }, { .children_offset=49707, .match_offset=0 }, { .children_offset=49709, .match_offset=0 }, { .children_offset=49711, .match_offset=0 }, { .children_offset=49713, .match_offset=0 }, { .children_offset=49715, .match_offset=0 }, { .children_offset=49717, .match_offset=0 }, { .children_offset=0, .match_offset=31006 }, { .children_offset=49719, .match_offset=0 }, { .children_offset=49721, .match_offset=0 }, { .children_offset=49723, .match_offset=0 }, { .children_offset=49725, .match_offset=0 }, { .children_offset=49727, .match_offset=0 }, { .children_offset=49729, .match_offset=0 }, { .children_offset=0, .match_offset=43990 }, { .children_offset=49731, .match_offset=0 }, { .children_offset=49734, .match_offset=0 }, { .children_offset=49736, .match_offset=0 }, { .children_offset=49738, .match_offset=0 }, { .children_offset=49740, .match_offset=0 }, { .children_offset=49742, .match_offset=0 }, { .children_offset=49744, .match_offset=0 }, { .children_offset=49746, .match_offset=0 }, { .children_offset=0, .match_offset=133277 }, { .children_offset=49748, .match_offset=0 }, { .children_offset=0, .match_offset=64393 }, { .children_offset=49750, .match_offset=0 }, { .children_offset=49753, .match_offset=0 }, { .children_offset=49755, .match_offset=26754 }, { .children_offset=49761, .match_offset=0 }, { .children_offset=49764, .match_offset=0 }, { .children_offset=0, .match_offset=72637 }, { .children_offset=49766, .match_offset=0 }, { .children_offset=49768, .match_offset=0 }, { .children_offset=49770, .match_offset=0 }, { .children_offset=0, .match_offset=55391 }, { .children_offset=49773, .match_offset=0 }, { .children_offset=49775, .match_offset=0 }, { .children_offset=0, .match_offset=60542 }, { .children_offset=49777, .match_offset=0 }, { .children_offset=49779, .match_offset=0 }, { .children_offset=0, .match_offset=10872 }, { .children_offset=49781, .match_offset=0 }, { .children_offset=49783, .match_offset=0 }, { .children_offset=49785, .match_offset=0 }, { .children_offset=0, .match_offset=11472 }, { .children_offset=49787, .match_offset=0 }, { .children_offset=49789, .match_offset=0 }, { .children_offset=49791, .match_offset=0 }, { .children_offset=49793, .match_offset=0 }, { .children_offset=49795, .match_offset=0 }, { .children_offset=49797, .match_offset=0 }, { .children_offset=49799, .match_offset=0 }, { .children_offset=49801, .match_offset=0 }, { .children_offset=49803, .match_offset=0 }, { .children_offset=49805, .match_offset=0 }, { .children_offset=0, .match_offset=21652 }, { .children_offset=49807, .match_offset=0 }, { .children_offset=49809, .match_offset=0 }, { .children_offset=0, .match_offset=89111 }, { .children_offset=0, .match_offset=102695 }, { .children_offset=49811, .match_offset=0 }, { .children_offset=49813, .match_offset=0 }, { .children_offset=49815, .match_offset=0 }, { .children_offset=0, .match_offset=22621 }, { .children_offset=0, .match_offset=67521 }, { .children_offset=49817, .match_offset=0 }, { .children_offset=49823, .match_offset=0 }, { .children_offset=49825, .match_offset=0 }, { .children_offset=49827, .match_offset=0 }, { .children_offset=0, .match_offset=38560 }, { .children_offset=49829, .match_offset=0 }, { .children_offset=49832, .match_offset=0 }, { .children_offset=49834, .match_offset=0 }, { .children_offset=0, .match_offset=43175 }, { .children_offset=49836, .match_offset=0 }, { .children_offset=49838, .match_offset=0 }, { .children_offset=0, .match_offset=4893 }, { .children_offset=49840, .match_offset=0 }, { .children_offset=49842, .match_offset=124861 }, { .children_offset=49844, .match_offset=0 }, { .children_offset=49846, .match_offset=0 }, { .children_offset=49848, .match_offset=0 }, { .children_offset=0, .match_offset=70957 }, { .children_offset=49850, .match_offset=6717 }, { .children_offset=49853, .match_offset=0 }, { .children_offset=0, .match_offset=84834 }, { .children_offset=0, .match_offset=43028 }, { .children_offset=49855, .match_offset=0 }, { .children_offset=49857, .match_offset=0 }, { .children_offset=49859, .match_offset=0 }, { .children_offset=49861, .match_offset=0 }, { .children_offset=49863, .match_offset=0 }, { .children_offset=0, .match_offset=24329 }, { .children_offset=49865, .match_offset=72512 }, { .children_offset=49867, .match_offset=0 }, { .children_offset=49869, .match_offset=0 }, { .children_offset=49871, .match_offset=0 }, { .children_offset=0, .match_offset=57336 }, { .children_offset=49873, .match_offset=0 }, { .children_offset=49875, .match_offset=0 }, { .children_offset=49877, .match_offset=0 }, { .children_offset=49879, .match_offset=0 }, { .children_offset=49881, .match_offset=0 }, { .children_offset=49883, .match_offset=0 }, { .children_offset=0, .match_offset=28111 }, { .children_offset=0, .match_offset=46757 }, { .children_offset=49885, .match_offset=110216 }, { .children_offset=49890, .match_offset=88617 }, { .children_offset=49892, .match_offset=0 }, { .children_offset=0, .match_offset=115497 }, { .children_offset=0, .match_offset=30817 }, { .children_offset=49894, .match_offset=108789 }, { .children_offset=0, .match_offset=29113 }, { .children_offset=0, .match_offset=125009 }, { .children_offset=49896, .match_offset=61267 }, { .children_offset=49909, .match_offset=0 }, { .children_offset=49911, .match_offset=0 }, { .children_offset=49913, .match_offset=0 }, { .children_offset=49915, .match_offset=0 }, { .children_offset=49917, .match_offset=0 }, { .children_offset=49919, .match_offset=0 }, { .children_offset=49921, .match_offset=0 }, { .children_offset=49923, .match_offset=0 }, { .children_offset=0, .match_offset=37196 }, { .children_offset=49925, .match_offset=0 }, { .children_offset=49928, .match_offset=0 }, { .children_offset=49930, .match_offset=0 }, { .children_offset=49932, .match_offset=0 }, { .children_offset=49934, .match_offset=0 }, { .children_offset=49936, .match_offset=0 }, { .children_offset=49938, .match_offset=0 }, { .children_offset=49940, .match_offset=0 }, { .children_offset=0, .match_offset=60918 }, { .children_offset=49942, .match_offset=0 }, { .children_offset=49944, .match_offset=0 }, { .children_offset=49946, .match_offset=0 }, { .children_offset=49948, .match_offset=24251 }, { .children_offset=49951, .match_offset=0 }, { .children_offset=49953, .match_offset=0 }, { .children_offset=0, .match_offset=49904 }, { .children_offset=49955, .match_offset=0 }, { .children_offset=49957, .match_offset=0 }, { .children_offset=49959, .match_offset=0 }, { .children_offset=49961, .match_offset=0 }, { .children_offset=49963, .match_offset=0 }, { .children_offset=49965, .match_offset=0 }, { .children_offset=49967, .match_offset=0 }, { .children_offset=49969, .match_offset=0 }, { .children_offset=0, .match_offset=68262 }, { .children_offset=49971, .match_offset=0 }, { .children_offset=49973, .match_offset=0 }, { .children_offset=49975, .match_offset=0 }, { .children_offset=49977, .match_offset=0 }, { .children_offset=49979, .match_offset=0 }, { .children_offset=49981, .match_offset=0 }, { .children_offset=49983, .match_offset=0 }, { .children_offset=49985, .match_offset=0 }, { .children_offset=0, .match_offset=103422 }, { .children_offset=49987, .match_offset=0 }, { .children_offset=49989, .match_offset=0 }, { .children_offset=49991, .match_offset=0 }, { .children_offset=49993, .match_offset=0 }, { .children_offset=49995, .match_offset=0 }, { .children_offset=49997, .match_offset=0 }, { .children_offset=49999, .match_offset=0 }, { .children_offset=50001, .match_offset=0 }, { .children_offset=50003, .match_offset=0 }, { .children_offset=50005, .match_offset=0 }, { .children_offset=0, .match_offset=33783 }, { .children_offset=50007, .match_offset=0 }, { .children_offset=50009, .match_offset=0 }, { .children_offset=50011, .match_offset=0 }, { .children_offset=50013, .match_offset=0 }, { .children_offset=50015, .match_offset=0 }, { .children_offset=50017, .match_offset=0 }, { .children_offset=50019, .match_offset=0 }, { .children_offset=50022, .match_offset=0 }, { .children_offset=50024, .match_offset=0 }, { .children_offset=50026, .match_offset=0 }, { .children_offset=0, .match_offset=65195 }, { .children_offset=50028, .match_offset=0 }, { .children_offset=50030, .match_offset=0 }, { .children_offset=50032, .match_offset=0 }, { .children_offset=50034, .match_offset=0 }, { .children_offset=0, .match_offset=37229 }, { .children_offset=50036, .match_offset=0 }, { .children_offset=50038, .match_offset=0 }, { .children_offset=0, .match_offset=70957 }, { .children_offset=50040, .match_offset=0 }, { .children_offset=50042, .match_offset=0 }, { .children_offset=50044, .match_offset=131889 }, { .children_offset=50047, .match_offset=0 }, { .children_offset=50049, .match_offset=0 }, { .children_offset=50051, .match_offset=0 }, { .children_offset=50053, .match_offset=0 }, { .children_offset=50055, .match_offset=0 }, { .children_offset=50057, .match_offset=0 }, { .children_offset=50059, .match_offset=0 }, { .children_offset=50061, .match_offset=0 }, { .children_offset=0, .match_offset=15464 }, { .children_offset=50063, .match_offset=0 }, { .children_offset=50065, .match_offset=0 }, { .children_offset=50067, .match_offset=0 }, { .children_offset=50069, .match_offset=0 }, { .children_offset=50071, .match_offset=0 }, { .children_offset=50073, .match_offset=0 }, { .children_offset=50075, .match_offset=0 }, { .children_offset=50077, .match_offset=0 }, { .children_offset=50079, .match_offset=0 }, { .children_offset=0, .match_offset=48125 }, { .children_offset=50081, .match_offset=0 }, { .children_offset=50083, .match_offset=0 }, { .children_offset=50085, .match_offset=0 }, { .children_offset=50087, .match_offset=0 }, { .children_offset=0, .match_offset=28065 }, { .children_offset=50089, .match_offset=0 }, { .children_offset=50091, .match_offset=43676 }, { .children_offset=50095, .match_offset=0 }, { .children_offset=50097, .match_offset=0 }, { .children_offset=50099, .match_offset=0 }, { .children_offset=50101, .match_offset=0 }, { .children_offset=50103, .match_offset=0 }, { .children_offset=50105, .match_offset=0 }, { .children_offset=0, .match_offset=28420 }, { .children_offset=0, .match_offset=114761 }, { .children_offset=50107, .match_offset=0 }, { .children_offset=50109, .match_offset=0 }, { .children_offset=0, .match_offset=123275 }, { .children_offset=50111, .match_offset=0 }, { .children_offset=50114, .match_offset=0 }, { .children_offset=50116, .match_offset=68979 }, { .children_offset=50118, .match_offset=0 }, { .children_offset=50120, .match_offset=0 }, { .children_offset=50122, .match_offset=0 }, { .children_offset=50124, .match_offset=0 }, { .children_offset=0, .match_offset=42040 }, { .children_offset=50126, .match_offset=0 }, { .children_offset=50128, .match_offset=0 }, { .children_offset=0, .match_offset=124546 }, { .children_offset=50130, .match_offset=0 }, { .children_offset=50132, .match_offset=0 }, { .children_offset=50134, .match_offset=0 }, { .children_offset=50136, .match_offset=0 }, { .children_offset=50138, .match_offset=0 }, { .children_offset=50140, .match_offset=0 }, { .children_offset=50142, .match_offset=0 }, { .children_offset=0, .match_offset=27551 }, { .children_offset=50144, .match_offset=0 }, { .children_offset=50146, .match_offset=0 }, { .children_offset=50148, .match_offset=0 }, { .children_offset=50150, .match_offset=44694 }, { .children_offset=0, .match_offset=60813 }, { .children_offset=50152, .match_offset=38495 }, { .children_offset=0, .match_offset=6187 }, { .children_offset=0, .match_offset=86718 }, { .children_offset=50161, .match_offset=67583 }, { .children_offset=50163, .match_offset=0 }, { .children_offset=50165, .match_offset=0 }, { .children_offset=0, .match_offset=129379 }, { .children_offset=50167, .match_offset=0 }, { .children_offset=50170, .match_offset=0 }, { .children_offset=50172, .match_offset=0 }, { .children_offset=50174, .match_offset=28456 }, { .children_offset=50176, .match_offset=0 }, { .children_offset=0, .match_offset=28456 }, { .children_offset=50178, .match_offset=0 }, { .children_offset=50180, .match_offset=0 }, { .children_offset=0, .match_offset=67574 }, { .children_offset=50182, .match_offset=49871 }, { .children_offset=0, .match_offset=103483 }, { .children_offset=50185, .match_offset=0 }, { .children_offset=0, .match_offset=25539 }, { .children_offset=0, .match_offset=42107 }, { .children_offset=0, .match_offset=45069 }, { .children_offset=50188, .match_offset=0 }, { .children_offset=50190, .match_offset=0 }, { .children_offset=0, .match_offset=79799 }, { .children_offset=50192, .match_offset=5966 }, { .children_offset=50196, .match_offset=0 }, { .children_offset=0, .match_offset=105781 }, { .children_offset=0, .match_offset=28607 }, { .children_offset=0, .match_offset=129402 }, { .children_offset=50198, .match_offset=125229 }, { .children_offset=50203, .match_offset=0 }, { .children_offset=0, .match_offset=29979 }, { .children_offset=50205, .match_offset=21362 }, { .children_offset=0, .match_offset=7380 }, { .children_offset=0, .match_offset=72114 }, { .children_offset=50208, .match_offset=74467 }, { .children_offset=0, .match_offset=15043 }, { .children_offset=50213, .match_offset=0 }, { .children_offset=50215, .match_offset=0 }, { .children_offset=50217, .match_offset=0 }, { .children_offset=0, .match_offset=34697 }, { .children_offset=50219, .match_offset=0 }, { .children_offset=50221, .match_offset=0 }, { .children_offset=0, .match_offset=20292 }, { .children_offset=0, .match_offset=119596 }, { .children_offset=50223, .match_offset=0 }, { .children_offset=50225, .match_offset=80936 }, { .children_offset=0, .match_offset=85947 }, { .children_offset=50227, .match_offset=0 }, { .children_offset=50232, .match_offset=0 }, { .children_offset=50234, .match_offset=0 }, { .children_offset=0, .match_offset=39223 }, { .children_offset=50236, .match_offset=0 }, { .children_offset=50238, .match_offset=0 }, { .children_offset=50240, .match_offset=0 }, { .children_offset=0, .match_offset=134806 }, { .children_offset=50242, .match_offset=0 }, { .children_offset=50244, .match_offset=123482 }, { .children_offset=0, .match_offset=129331 }, { .children_offset=50246, .match_offset=0 }, { .children_offset=50248, .match_offset=0 }, { .children_offset=0, .match_offset=87866 }, { .children_offset=50250, .match_offset=43828 }, { .children_offset=50256, .match_offset=0 }, { .children_offset=50258, .match_offset=0 }, { .children_offset=0, .match_offset=27551 }, { .children_offset=0, .match_offset=70667 }, { .children_offset=50260, .match_offset=0 }, { .children_offset=0, .match_offset=6176 }, { .children_offset=50262, .match_offset=8612 }, { .children_offset=0, .match_offset=6671 }, { .children_offset=0, .match_offset=33417 }, { .children_offset=0, .match_offset=90638 }, { .children_offset=50266, .match_offset=0 }, { .children_offset=50268, .match_offset=0 }, { .children_offset=50270, .match_offset=0 }, { .children_offset=50272, .match_offset=0 }, { .children_offset=0, .match_offset=52537 }, { .children_offset=50274, .match_offset=0 }, { .children_offset=50277, .match_offset=0 }, { .children_offset=50279, .match_offset=0 }, { .children_offset=50281, .match_offset=0 }, { .children_offset=50283, .match_offset=0 }, { .children_offset=0, .match_offset=87699 }, { .children_offset=0, .match_offset=134588 }, { .children_offset=50285, .match_offset=132486 }, { .children_offset=50287, .match_offset=0 }, { .children_offset=50289, .match_offset=0 }, { .children_offset=50291, .match_offset=0 }, { .children_offset=0, .match_offset=45281 }, { .children_offset=50293, .match_offset=0 }, { .children_offset=0, .match_offset=73747 }, { .children_offset=50297, .match_offset=0 }, { .children_offset=50299, .match_offset=0 }, { .children_offset=50301, .match_offset=0 }, { .children_offset=50303, .match_offset=0 }, { .children_offset=0, .match_offset=133599 }, { .children_offset=0, .match_offset=103811 }, { .children_offset=50305, .match_offset=0 }, { .children_offset=50325, .match_offset=0 }, { .children_offset=50331, .match_offset=0 }, { .children_offset=50341, .match_offset=67736 }, { .children_offset=0, .match_offset=16387 }, { .children_offset=0, .match_offset=44433 }, { .children_offset=0, .match_offset=34101 }, { .children_offset=0, .match_offset=103695 }, { .children_offset=0, .match_offset=26452 }, { .children_offset=0, .match_offset=123220 }, { .children_offset=0, .match_offset=68639 }, { .children_offset=0, .match_offset=25742 }, { .children_offset=0, .match_offset=22596 }, { .children_offset=50351, .match_offset=57297 }, { .children_offset=0, .match_offset=26200 }, { .children_offset=0, .match_offset=116311 }, { .children_offset=0, .match_offset=125577 }, { .children_offset=0, .match_offset=134461 }, { .children_offset=0, .match_offset=68648 }, { .children_offset=50353, .match_offset=27723 }, { .children_offset=0, .match_offset=130381 }, { .children_offset=0, .match_offset=27166 }, { .children_offset=0, .match_offset=22489 }, { .children_offset=0, .match_offset=42216 }, { .children_offset=50356, .match_offset=0 }, { .children_offset=0, .match_offset=62028 }, { .children_offset=50367, .match_offset=77376 }, { .children_offset=0, .match_offset=38543 }, { .children_offset=0, .match_offset=21878 }, { .children_offset=0, .match_offset=69348 }, { .children_offset=50371, .match_offset=116541 }, { .children_offset=0, .match_offset=86779 }, { .children_offset=0, .match_offset=65133 }, { .children_offset=0, .match_offset=59123 }, { .children_offset=0, .match_offset=60745 }, { .children_offset=0, .match_offset=57271 }, { .children_offset=0, .match_offset=73822 }, { .children_offset=0, .match_offset=113708 }, { .children_offset=0, .match_offset=22130 }, { .children_offset=0, .match_offset=55420 }, { .children_offset=50374, .match_offset=0 }, { .children_offset=50385, .match_offset=108158 }, { .children_offset=0, .match_offset=64749 }, { .children_offset=0, .match_offset=63716 }, { .children_offset=0, .match_offset=122629 }, { .children_offset=0, .match_offset=32967 }, { .children_offset=0, .match_offset=114638 }, { .children_offset=0, .match_offset=26786 }, { .children_offset=0, .match_offset=14879 }, { .children_offset=0, .match_offset=25521 }, { .children_offset=0, .match_offset=124753 }, { .children_offset=0, .match_offset=85240 }, { .children_offset=0, .match_offset=52194 }, { .children_offset=0, .match_offset=5731 }, { .children_offset=0, .match_offset=68641 }, { .children_offset=0, .match_offset=132221 }, { .children_offset=50398, .match_offset=109398 }, { .children_offset=0, .match_offset=122364 }, { .children_offset=0, .match_offset=34362 }, { .children_offset=0, .match_offset=50603 }, { .children_offset=0, .match_offset=27622 }, { .children_offset=0, .match_offset=122633 }, { .children_offset=50400, .match_offset=125092 }, { .children_offset=0, .match_offset=24254 }, { .children_offset=50402, .match_offset=14618 }, { .children_offset=0, .match_offset=34874 }, { .children_offset=50404, .match_offset=0 }, { .children_offset=50415, .match_offset=35632 }, { .children_offset=0, .match_offset=131398 }, { .children_offset=50417, .match_offset=8546 }, { .children_offset=0, .match_offset=35389 }, { .children_offset=0, .match_offset=12990 }, { .children_offset=50419, .match_offset=108735 }, { .children_offset=0, .match_offset=126526 }, { .children_offset=0, .match_offset=8833 }, { .children_offset=0, .match_offset=77345 }, { .children_offset=0, .match_offset=40643 }, { .children_offset=50421, .match_offset=130049 }, { .children_offset=0, .match_offset=43455 }, { .children_offset=0, .match_offset=33619 }, { .children_offset=0, .match_offset=61120 }, { .children_offset=50423, .match_offset=0 }, { .children_offset=50425, .match_offset=132851 }, { .children_offset=0, .match_offset=81937 }, { .children_offset=50427, .match_offset=16582 }, { .children_offset=50444, .match_offset=70805 }, { .children_offset=50446, .match_offset=0 }, { .children_offset=0, .match_offset=6166 }, { .children_offset=0, .match_offset=89359 }, { .children_offset=0, .match_offset=13924 }, { .children_offset=0, .match_offset=118261 }, { .children_offset=50448, .match_offset=0 }, { .children_offset=50450, .match_offset=0 }, { .children_offset=50452, .match_offset=0 }, { .children_offset=50454, .match_offset=0 }, { .children_offset=50456, .match_offset=0 }, { .children_offset=50458, .match_offset=0 }, { .children_offset=50460, .match_offset=0 }, { .children_offset=0, .match_offset=45913 }, { .children_offset=50462, .match_offset=0 }, { .children_offset=50464, .match_offset=0 }, { .children_offset=50466, .match_offset=0 }, { .children_offset=0, .match_offset=77201 }, { .children_offset=50468, .match_offset=0 }, { .children_offset=50471, .match_offset=0 }, { .children_offset=50473, .match_offset=0 }, { .children_offset=50475, .match_offset=0 }, { .children_offset=50477, .match_offset=0 }, { .children_offset=50479, .match_offset=0 }, { .children_offset=50481, .match_offset=0 }, { .children_offset=50483, .match_offset=0 }, { .children_offset=0, .match_offset=14470 }, { .children_offset=50485, .match_offset=0 }, { .children_offset=50487, .match_offset=0 }, { .children_offset=50489, .match_offset=0 }, { .children_offset=0, .match_offset=63447 }, { .children_offset=50491, .match_offset=0 }, { .children_offset=0, .match_offset=1937 }, { .children_offset=50494, .match_offset=0 }, { .children_offset=50496, .match_offset=0 }, { .children_offset=0, .match_offset=134985 }, { .children_offset=50498, .match_offset=50227 }, { .children_offset=50500, .match_offset=0 }, { .children_offset=50502, .match_offset=0 }, { .children_offset=50504, .match_offset=0 }, { .children_offset=0, .match_offset=7697 }, { .children_offset=50506, .match_offset=0 }, { .children_offset=50517, .match_offset=0 }, { .children_offset=50519, .match_offset=0 }, { .children_offset=50521, .match_offset=0 }, { .children_offset=50523, .match_offset=0 }, { .children_offset=0, .match_offset=61249 }, { .children_offset=50525, .match_offset=0 }, { .children_offset=50528, .match_offset=0 }, { .children_offset=50530, .match_offset=28724 }, { .children_offset=0, .match_offset=115672 }, { .children_offset=50532, .match_offset=0 }, { .children_offset=50534, .match_offset=0 }, { .children_offset=50536, .match_offset=0 }, { .children_offset=50538, .match_offset=0 }, { .children_offset=50540, .match_offset=0 }, { .children_offset=0, .match_offset=25381 }, { .children_offset=50542, .match_offset=0 }, { .children_offset=50545, .match_offset=71593 }, { .children_offset=50548, .match_offset=0 }, { .children_offset=0, .match_offset=62710 }, { .children_offset=50550, .match_offset=0 }, { .children_offset=50552, .match_offset=0 }, { .children_offset=50554, .match_offset=0 }, { .children_offset=0, .match_offset=74 }, { .children_offset=50556, .match_offset=0 }, { .children_offset=0, .match_offset=114734 }, { .children_offset=50558, .match_offset=0 }, { .children_offset=50560, .match_offset=0 }, { .children_offset=50562, .match_offset=0 }, { .children_offset=50564, .match_offset=0 }, { .children_offset=0, .match_offset=116450 }, { .children_offset=50566, .match_offset=0 }, { .children_offset=50568, .match_offset=0 }, { .children_offset=50570, .match_offset=0 }, { .children_offset=50572, .match_offset=0 }, { .children_offset=50574, .match_offset=0 }, { .children_offset=50576, .match_offset=0 }, { .children_offset=0, .match_offset=133398 }, { .children_offset=50578, .match_offset=0 }, { .children_offset=50582, .match_offset=0 }, { .children_offset=0, .match_offset=42323 }, { .children_offset=0, .match_offset=135764 }, { .children_offset=50584, .match_offset=0 }, { .children_offset=50586, .match_offset=0 }, { .children_offset=50588, .match_offset=0 }, { .children_offset=50590, .match_offset=0 }, { .children_offset=0, .match_offset=133595 }, { .children_offset=50592, .match_offset=103422 }, { .children_offset=50594, .match_offset=0 }, { .children_offset=0, .match_offset=78476 }, { .children_offset=50596, .match_offset=0 }, { .children_offset=50598, .match_offset=0 }, { .children_offset=50600, .match_offset=0 }, { .children_offset=50602, .match_offset=0 }, { .children_offset=0, .match_offset=89871 }, { .children_offset=50604, .match_offset=0 }, { .children_offset=50607, .match_offset=0 }, { .children_offset=50609, .match_offset=0 }, { .children_offset=50611, .match_offset=0 }, { .children_offset=0, .match_offset=34442 }, { .children_offset=50613, .match_offset=0 }, { .children_offset=50615, .match_offset=0 }, { .children_offset=50617, .match_offset=0 }, { .children_offset=50619, .match_offset=0 }, { .children_offset=50621, .match_offset=0 }, { .children_offset=50623, .match_offset=0 }, { .children_offset=50625, .match_offset=0 }, { .children_offset=50628, .match_offset=0 }, { .children_offset=50630, .match_offset=0 }, { .children_offset=50632, .match_offset=0 }, { .children_offset=0, .match_offset=77086 }, { .children_offset=50634, .match_offset=0 }, { .children_offset=50636, .match_offset=0 }, { .children_offset=50638, .match_offset=0 }, { .children_offset=50640, .match_offset=0 }, { .children_offset=0, .match_offset=50229 }, { .children_offset=50642, .match_offset=0 }, { .children_offset=0, .match_offset=81847 }, { .children_offset=50644, .match_offset=0 }, { .children_offset=50647, .match_offset=0 }, { .children_offset=0, .match_offset=21978 }, { .children_offset=50649, .match_offset=0 }, { .children_offset=50651, .match_offset=0 }, { .children_offset=50653, .match_offset=0 }, { .children_offset=50655, .match_offset=0 }, { .children_offset=0, .match_offset=77750 }, { .children_offset=50657, .match_offset=14275 }, { .children_offset=50659, .match_offset=0 }, { .children_offset=0, .match_offset=74168 }, { .children_offset=0, .match_offset=61521 }, { .children_offset=0, .match_offset=127307 }, { .children_offset=0, .match_offset=34954 }, { .children_offset=50661, .match_offset=0 }, { .children_offset=50663, .match_offset=0 }, { .children_offset=50665, .match_offset=0 }, { .children_offset=50667, .match_offset=0 }, { .children_offset=0, .match_offset=34965 }, { .children_offset=50669, .match_offset=0 }, { .children_offset=50671, .match_offset=0 }, { .children_offset=50673, .match_offset=113731 }, { .children_offset=0, .match_offset=49693 }, { .children_offset=50675, .match_offset=0 }, { .children_offset=0, .match_offset=134246 }, { .children_offset=50677, .match_offset=0 }, { .children_offset=50679, .match_offset=0 }, { .children_offset=50681, .match_offset=0 }, { .children_offset=50683, .match_offset=68301 }, { .children_offset=0, .match_offset=90540 }, { .children_offset=50685, .match_offset=49278 }, { .children_offset=50700, .match_offset=0 }, { .children_offset=50702, .match_offset=0 }, { .children_offset=50704, .match_offset=0 }, { .children_offset=0, .match_offset=103667 }, { .children_offset=50706, .match_offset=0 }, { .children_offset=0, .match_offset=64554 }, { .children_offset=50709, .match_offset=0 }, { .children_offset=0, .match_offset=55897 }, { .children_offset=50711, .match_offset=11163 }, { .children_offset=50714, .match_offset=0 }, { .children_offset=50716, .match_offset=0 }, { .children_offset=0, .match_offset=55291 }, { .children_offset=50718, .match_offset=0 }, { .children_offset=0, .match_offset=33043 }, { .children_offset=50720, .match_offset=53536 }, { .children_offset=50722, .match_offset=0 }, { .children_offset=50724, .match_offset=0 }, { .children_offset=50726, .match_offset=0 }, { .children_offset=0, .match_offset=132879 }, { .children_offset=50728, .match_offset=0 }, { .children_offset=0, .match_offset=13894 }, { .children_offset=50730, .match_offset=0 }, { .children_offset=0, .match_offset=58229 }, { .children_offset=50733, .match_offset=0 }, { .children_offset=50735, .match_offset=0 }, { .children_offset=0, .match_offset=13375 }, { .children_offset=50737, .match_offset=0 }, { .children_offset=0, .match_offset=116963 }, { .children_offset=0, .match_offset=11150 }, { .children_offset=50739, .match_offset=103414 }, { .children_offset=50746, .match_offset=0 }, { .children_offset=50748, .match_offset=0 }, { .children_offset=0, .match_offset=7013 }, { .children_offset=50750, .match_offset=0 }, { .children_offset=50752, .match_offset=0 }, { .children_offset=50754, .match_offset=0 }, { .children_offset=50756, .match_offset=0 }, { .children_offset=50758, .match_offset=0 }, { .children_offset=0, .match_offset=67752 }, { .children_offset=50760, .match_offset=0 }, { .children_offset=0, .match_offset=73509 }, { .children_offset=50762, .match_offset=0 }, { .children_offset=0, .match_offset=134369 }, { .children_offset=50765, .match_offset=0 }, { .children_offset=50767, .match_offset=0 }, { .children_offset=50769, .match_offset=0 }, { .children_offset=0, .match_offset=38141 }, { .children_offset=50771, .match_offset=7013 }, { .children_offset=50773, .match_offset=0 }, { .children_offset=50775, .match_offset=0 }, { .children_offset=50777, .match_offset=0 }, { .children_offset=50779, .match_offset=15078 }, { .children_offset=50785, .match_offset=0 }, { .children_offset=50787, .match_offset=0 }, { .children_offset=50795, .match_offset=0 }, { .children_offset=50797, .match_offset=0 }, { .children_offset=50799, .match_offset=0 }, { .children_offset=0, .match_offset=12509 }, { .children_offset=0, .match_offset=74112 }, { .children_offset=0, .match_offset=101024 }, { .children_offset=0, .match_offset=89533 }, { .children_offset=0, .match_offset=60000 }, { .children_offset=0, .match_offset=86666 }, { .children_offset=0, .match_offset=34910 }, { .children_offset=50807, .match_offset=0 }, { .children_offset=50809, .match_offset=0 }, { .children_offset=50811, .match_offset=0 }, { .children_offset=0, .match_offset=21804 }, { .children_offset=0, .match_offset=134445 }, { .children_offset=0, .match_offset=6567 }, { .children_offset=0, .match_offset=66215 }, { .children_offset=0, .match_offset=109597 }, { .children_offset=0, .match_offset=103159 }, { .children_offset=0, .match_offset=6241 }, { .children_offset=50819, .match_offset=0 }, { .children_offset=50821, .match_offset=0 }, { .children_offset=50823, .match_offset=0 }, { .children_offset=0, .match_offset=89818 }, { .children_offset=0, .match_offset=63123 }, { .children_offset=0, .match_offset=69294 }, { .children_offset=0, .match_offset=71506 }, { .children_offset=0, .match_offset=21813 }, { .children_offset=0, .match_offset=68153 }, { .children_offset=0, .match_offset=26925 }, { .children_offset=50831, .match_offset=0 }, { .children_offset=50833, .match_offset=0 }, { .children_offset=50835, .match_offset=0 }, { .children_offset=0, .match_offset=20543 }, { .children_offset=0, .match_offset=44918 }, { .children_offset=0, .match_offset=113927 }, { .children_offset=0, .match_offset=1231 }, { .children_offset=0, .match_offset=65750 }, { .children_offset=0, .match_offset=108090 }, { .children_offset=0, .match_offset=90331 }, { .children_offset=50843, .match_offset=0 }, { .children_offset=50845, .match_offset=0 }, { .children_offset=50847, .match_offset=0 }, { .children_offset=0, .match_offset=49846 }, { .children_offset=0, .match_offset=8484 }, { .children_offset=0, .match_offset=25758 }, { .children_offset=0, .match_offset=37187 }, { .children_offset=0, .match_offset=16114 }, { .children_offset=0, .match_offset=113819 }, { .children_offset=0, .match_offset=129594 }, { .children_offset=50855, .match_offset=0 }, { .children_offset=50857, .match_offset=0 }, { .children_offset=50859, .match_offset=0 }, { .children_offset=0, .match_offset=77007 }, { .children_offset=0, .match_offset=89105 }, { .children_offset=0, .match_offset=46077 }, { .children_offset=0, .match_offset=129885 }, { .children_offset=0, .match_offset=21674 }, { .children_offset=0, .match_offset=27069 }, { .children_offset=0, .match_offset=28485 }, { .children_offset=50867, .match_offset=0 }, { .children_offset=50869, .match_offset=0 }, { .children_offset=50871, .match_offset=0 }, { .children_offset=0, .match_offset=60446 }, { .children_offset=0, .match_offset=7506 }, { .children_offset=0, .match_offset=122661 }, { .children_offset=0, .match_offset=109265 }, { .children_offset=0, .match_offset=72330 }, { .children_offset=0, .match_offset=63131 }, { .children_offset=0, .match_offset=72429 }, { .children_offset=50879, .match_offset=0 }, { .children_offset=50881, .match_offset=0 }, { .children_offset=0, .match_offset=134457 }, { .children_offset=50883, .match_offset=0 }, { .children_offset=50886, .match_offset=0 }, { .children_offset=50888, .match_offset=0 }, { .children_offset=0, .match_offset=78676 }, { .children_offset=0, .match_offset=135841 }, { .children_offset=50890, .match_offset=0 }, { .children_offset=50892, .match_offset=0 }, { .children_offset=50894, .match_offset=0 }, { .children_offset=50896, .match_offset=0 }, { .children_offset=50898, .match_offset=0 }, { .children_offset=50900, .match_offset=0 }, { .children_offset=50902, .match_offset=0 }, { .children_offset=50904, .match_offset=0 }, { .children_offset=0, .match_offset=34110 }, { .children_offset=50906, .match_offset=0 }, { .children_offset=50908, .match_offset=0 }, { .children_offset=50910, .match_offset=0 }, { .children_offset=50912, .match_offset=0 }, { .children_offset=0, .match_offset=5237 }, { .children_offset=50914, .match_offset=134811 }, { .children_offset=50916, .match_offset=0 }, { .children_offset=50918, .match_offset=0 }, { .children_offset=50920, .match_offset=0 }, { .children_offset=50922, .match_offset=0 }, { .children_offset=50924, .match_offset=0 }, { .children_offset=50926, .match_offset=0 }, { .children_offset=50928, .match_offset=0 }, { .children_offset=50930, .match_offset=0 }, { .children_offset=0, .match_offset=133090 }, { .children_offset=50932, .match_offset=0 }, { .children_offset=50935, .match_offset=0 }, { .children_offset=50937, .match_offset=0 }, { .children_offset=0, .match_offset=4904 }, { .children_offset=50939, .match_offset=84816 }, { .children_offset=0, .match_offset=68310 }, { .children_offset=50941, .match_offset=0 }, { .children_offset=50945, .match_offset=0 }, { .children_offset=50947, .match_offset=44661 }, { .children_offset=50949, .match_offset=0 }, { .children_offset=50951, .match_offset=0 }, { .children_offset=0, .match_offset=38828 }, { .children_offset=0, .match_offset=74480 }, { .children_offset=0, .match_offset=69072 }, { .children_offset=0, .match_offset=87819 }, { .children_offset=0, .match_offset=90661 }, { .children_offset=50953, .match_offset=0 }, { .children_offset=0, .match_offset=29096 }, { .children_offset=50955, .match_offset=0 }, { .children_offset=0, .match_offset=86664 }, { .children_offset=0, .match_offset=108183 }, { .children_offset=50958, .match_offset=0 }, { .children_offset=0, .match_offset=46187 }, { .children_offset=50960, .match_offset=45996 }, { .children_offset=50975, .match_offset=0 }, { .children_offset=50977, .match_offset=0 }, { .children_offset=50979, .match_offset=0 }, { .children_offset=50981, .match_offset=0 }, { .children_offset=50983, .match_offset=0 }, { .children_offset=50985, .match_offset=0 }, { .children_offset=0, .match_offset=109227 }, { .children_offset=50987, .match_offset=0 }, { .children_offset=50989, .match_offset=0 }, { .children_offset=50991, .match_offset=0 }, { .children_offset=50993, .match_offset=0 }, { .children_offset=0, .match_offset=43787 }, { .children_offset=50995, .match_offset=0 }, { .children_offset=0, .match_offset=88607 }, { .children_offset=50999, .match_offset=0 }, { .children_offset=51001, .match_offset=87157 }, { .children_offset=51003, .match_offset=0 }, { .children_offset=51005, .match_offset=0 }, { .children_offset=51007, .match_offset=0 }, { .children_offset=51009, .match_offset=0 }, { .children_offset=51011, .match_offset=0 }, { .children_offset=51013, .match_offset=0 }, { .children_offset=51015, .match_offset=0 }, { .children_offset=0, .match_offset=65253 }, { .children_offset=51017, .match_offset=132172 }, { .children_offset=51019, .match_offset=0 }, { .children_offset=0, .match_offset=65042 }, { .children_offset=51021, .match_offset=6912 }, { .children_offset=0, .match_offset=64284 }, { .children_offset=0, .match_offset=37416 }, { .children_offset=51026, .match_offset=0 }, { .children_offset=51029, .match_offset=0 }, { .children_offset=51031, .match_offset=0 }, { .children_offset=51033, .match_offset=0 }, { .children_offset=0, .match_offset=71943 }, { .children_offset=51035, .match_offset=0 }, { .children_offset=51037, .match_offset=0 }, { .children_offset=0, .match_offset=35393 }, { .children_offset=0, .match_offset=52683 }, { .children_offset=51039, .match_offset=0 }, { .children_offset=51041, .match_offset=0 }, { .children_offset=51043, .match_offset=0 }, { .children_offset=51045, .match_offset=0 }, { .children_offset=51047, .match_offset=0 }, { .children_offset=51049, .match_offset=0 }, { .children_offset=0, .match_offset=25932 }, { .children_offset=51051, .match_offset=0 }, { .children_offset=51053, .match_offset=0 }, { .children_offset=51055, .match_offset=0 }, { .children_offset=51057, .match_offset=0 }, { .children_offset=0, .match_offset=116355 }, { .children_offset=51059, .match_offset=61232 }, { .children_offset=51061, .match_offset=63823 }, { .children_offset=51063, .match_offset=0 }, { .children_offset=51065, .match_offset=0 }, { .children_offset=51067, .match_offset=103104 }, { .children_offset=51069, .match_offset=0 }, { .children_offset=0, .match_offset=30319 }, { .children_offset=0, .match_offset=87325 }, { .children_offset=51072, .match_offset=0 }, { .children_offset=51074, .match_offset=0 }, { .children_offset=51076, .match_offset=0 }, { .children_offset=0, .match_offset=79714 }, { .children_offset=0, .match_offset=14382 }, { .children_offset=51078, .match_offset=0 }, { .children_offset=51082, .match_offset=0 }, { .children_offset=51084, .match_offset=0 }, { .children_offset=0, .match_offset=2043 }, { .children_offset=51086, .match_offset=0 }, { .children_offset=0, .match_offset=52679 }, { .children_offset=0, .match_offset=119612 }, { .children_offset=51089, .match_offset=0 }, { .children_offset=51091, .match_offset=0 }, { .children_offset=0, .match_offset=64767 }, { .children_offset=51093, .match_offset=0 }, { .children_offset=51096, .match_offset=0 }, { .children_offset=51098, .match_offset=0 }, { .children_offset=51100, .match_offset=0 }, { .children_offset=51102, .match_offset=31082 }, { .children_offset=51104, .match_offset=0 }, { .children_offset=0, .match_offset=78876 }, { .children_offset=51106, .match_offset=0 }, { .children_offset=51108, .match_offset=0 }, { .children_offset=51110, .match_offset=0 }, { .children_offset=51112, .match_offset=0 }, { .children_offset=51114, .match_offset=0 }, { .children_offset=51116, .match_offset=0 }, { .children_offset=0, .match_offset=34858 }, { .children_offset=51118, .match_offset=25724 }, { .children_offset=51121, .match_offset=0 }, { .children_offset=51123, .match_offset=30950 }, { .children_offset=51125, .match_offset=0 }, { .children_offset=0, .match_offset=60682 }, { .children_offset=51127, .match_offset=0 }, { .children_offset=51129, .match_offset=0 }, { .children_offset=51131, .match_offset=0 }, { .children_offset=51133, .match_offset=116518 }, { .children_offset=51135, .match_offset=0 }, { .children_offset=0, .match_offset=56640 }, { .children_offset=0, .match_offset=28728 }, { .children_offset=51137, .match_offset=0 }, { .children_offset=0, .match_offset=131610 }, { .children_offset=51139, .match_offset=0 }, { .children_offset=51141, .match_offset=0 }, { .children_offset=51143, .match_offset=0 }, { .children_offset=0, .match_offset=77086 }, { .children_offset=51145, .match_offset=10607 }, { .children_offset=51158, .match_offset=0 }, { .children_offset=51160, .match_offset=0 }, { .children_offset=51162, .match_offset=108505 }, { .children_offset=51164, .match_offset=0 }, { .children_offset=0, .match_offset=57586 }, { .children_offset=51167, .match_offset=0 }, { .children_offset=51169, .match_offset=0 }, { .children_offset=51171, .match_offset=0 }, { .children_offset=51173, .match_offset=0 }, { .children_offset=51175, .match_offset=0 }, { .children_offset=0, .match_offset=27049 }, { .children_offset=0, .match_offset=77412 }, { .children_offset=51177, .match_offset=0 }, { .children_offset=51180, .match_offset=0 }, { .children_offset=51183, .match_offset=0 }, { .children_offset=0, .match_offset=31064 }, { .children_offset=51186, .match_offset=0 }, { .children_offset=51188, .match_offset=0 }, { .children_offset=51190, .match_offset=0 }, { .children_offset=0, .match_offset=14530 }, { .children_offset=51192, .match_offset=0 }, { .children_offset=51194, .match_offset=0 }, { .children_offset=0, .match_offset=129285 }, { .children_offset=0, .match_offset=108503 }, { .children_offset=51196, .match_offset=0 }, { .children_offset=51202, .match_offset=0 }, { .children_offset=51204, .match_offset=0 }, { .children_offset=51206, .match_offset=0 }, { .children_offset=0, .match_offset=57963 }, { .children_offset=51208, .match_offset=0 }, { .children_offset=51210, .match_offset=0 }, { .children_offset=51212, .match_offset=0 }, { .children_offset=0, .match_offset=43756 }, { .children_offset=51214, .match_offset=0 }, { .children_offset=51216, .match_offset=0 }, { .children_offset=51218, .match_offset=0 }, { .children_offset=51220, .match_offset=0 }, { .children_offset=51222, .match_offset=0 }, { .children_offset=51224, .match_offset=0 }, { .children_offset=0, .match_offset=33315 }, { .children_offset=51226, .match_offset=0 }, { .children_offset=51228, .match_offset=0 }, { .children_offset=51230, .match_offset=0 }, { .children_offset=0, .match_offset=2041 }, { .children_offset=51232, .match_offset=0 }, { .children_offset=51234, .match_offset=0 }, { .children_offset=0, .match_offset=104105 }, { .children_offset=51236, .match_offset=42325 }, { .children_offset=51238, .match_offset=0 }, { .children_offset=51240, .match_offset=0 }, { .children_offset=51242, .match_offset=0 }, { .children_offset=51244, .match_offset=0 }, { .children_offset=0, .match_offset=65125 }, { .children_offset=51246, .match_offset=22777 }, { .children_offset=0, .match_offset=116171 }, { .children_offset=51248, .match_offset=77891 }, { .children_offset=0, .match_offset=115804 }, { .children_offset=0, .match_offset=20455 }, { .children_offset=0, .match_offset=5213 }, { .children_offset=0, .match_offset=114583 }, { .children_offset=51250, .match_offset=16314 }, { .children_offset=51252, .match_offset=0 }, { .children_offset=51254, .match_offset=9103 }, { .children_offset=51256, .match_offset=0 }, { .children_offset=51258, .match_offset=0 }, { .children_offset=51260, .match_offset=0 }, { .children_offset=51262, .match_offset=0 }, { .children_offset=51264, .match_offset=0 }, { .children_offset=51266, .match_offset=0 }, { .children_offset=51268, .match_offset=0 }, { .children_offset=0, .match_offset=114898 }, { .children_offset=0, .match_offset=44752 }, { .children_offset=51270, .match_offset=0 }, { .children_offset=51272, .match_offset=0 }, { .children_offset=51274, .match_offset=0 }, { .children_offset=0, .match_offset=133595 }, { .children_offset=51276, .match_offset=0 }, { .children_offset=51279, .match_offset=0 }, { .children_offset=51281, .match_offset=0 }, { .children_offset=51283, .match_offset=0 }, { .children_offset=0, .match_offset=134960 }, { .children_offset=51285, .match_offset=0 }, { .children_offset=51287, .match_offset=0 }, { .children_offset=0, .match_offset=50229 }, { .children_offset=51289, .match_offset=42047 }, { .children_offset=51291, .match_offset=0 }, { .children_offset=0, .match_offset=12393 }, { .children_offset=51293, .match_offset=68867 }, { .children_offset=51300, .match_offset=0 }, { .children_offset=0, .match_offset=42459 }, { .children_offset=51302, .match_offset=0 }, { .children_offset=51305, .match_offset=0 }, { .children_offset=51307, .match_offset=0 }, { .children_offset=51309, .match_offset=0 }, { .children_offset=51311, .match_offset=0 }, { .children_offset=0, .match_offset=8920 }, { .children_offset=51313, .match_offset=0 }, { .children_offset=51315, .match_offset=0 }, { .children_offset=0, .match_offset=77066 }, { .children_offset=0, .match_offset=114950 }, { .children_offset=51317, .match_offset=81098 }, { .children_offset=0, .match_offset=114946 }, { .children_offset=0, .match_offset=37157 }, { .children_offset=0, .match_offset=20574 }, { .children_offset=51319, .match_offset=0 }, { .children_offset=51321, .match_offset=0 }, { .children_offset=51323, .match_offset=0 }, { .children_offset=51325, .match_offset=0 }, { .children_offset=0, .match_offset=5526 }, { .children_offset=51327, .match_offset=118652 }, { .children_offset=0, .match_offset=134314 }, { .children_offset=0, .match_offset=24126 }, { .children_offset=51330, .match_offset=108557 }, { .children_offset=0, .match_offset=20270 }, { .children_offset=51335, .match_offset=1935 }, { .children_offset=0, .match_offset=8760 }, { .children_offset=0, .match_offset=44725 }, { .children_offset=0, .match_offset=125847 }, { .children_offset=51337, .match_offset=0 }, { .children_offset=51340, .match_offset=0 }, { .children_offset=51342, .match_offset=0 }, { .children_offset=51344, .match_offset=0 }, { .children_offset=51346, .match_offset=0 }, { .children_offset=0, .match_offset=129952 }, { .children_offset=51348, .match_offset=0 }, { .children_offset=51350, .match_offset=0 }, { .children_offset=0, .match_offset=41954 }, { .children_offset=51352, .match_offset=0 }, { .children_offset=51370, .match_offset=0 }, { .children_offset=51374, .match_offset=0 }, { .children_offset=0, .match_offset=108802 }, { .children_offset=0, .match_offset=23903 }, { .children_offset=51384, .match_offset=122326 }, { .children_offset=0, .match_offset=81062 }, { .children_offset=0, .match_offset=55769 }, { .children_offset=0, .match_offset=109212 }, { .children_offset=0, .match_offset=66256 }, { .children_offset=0, .match_offset=123414 }, { .children_offset=0, .match_offset=76956 }, { .children_offset=51386, .match_offset=78931 }, { .children_offset=0, .match_offset=43798 }, { .children_offset=51388, .match_offset=0 }, { .children_offset=51399, .match_offset=104034 }, { .children_offset=0, .match_offset=14494 }, { .children_offset=0, .match_offset=43037 }, { .children_offset=0, .match_offset=56826 }, { .children_offset=0, .match_offset=26464 }, { .children_offset=51401, .match_offset=13545 }, { .children_offset=0, .match_offset=67672 }, { .children_offset=0, .match_offset=40182 }, { .children_offset=0, .match_offset=54233 }, { .children_offset=51403, .match_offset=77784 }, { .children_offset=0, .match_offset=61664 }, { .children_offset=51405, .match_offset=42212 }, { .children_offset=0, .match_offset=113741 }, { .children_offset=0, .match_offset=34967 }, { .children_offset=51407, .match_offset=0 }, { .children_offset=0, .match_offset=33498 }, { .children_offset=0, .match_offset=113664 }, { .children_offset=0, .match_offset=22652 }, { .children_offset=0, .match_offset=104539 }, { .children_offset=51414, .match_offset=42923 }, { .children_offset=0, .match_offset=43001 }, { .children_offset=0, .match_offset=125155 }, { .children_offset=51416, .match_offset=41783 }, { .children_offset=51435, .match_offset=0 }, { .children_offset=0, .match_offset=131041 }, { .children_offset=0, .match_offset=8852 }, { .children_offset=0, .match_offset=6885 }, { .children_offset=0, .match_offset=58342 }, { .children_offset=0, .match_offset=65088 }, { .children_offset=51441, .match_offset=131858 }, { .children_offset=51443, .match_offset=0 }, { .children_offset=0, .match_offset=46231 }, { .children_offset=51445, .match_offset=0 }, { .children_offset=51447, .match_offset=0 }, { .children_offset=0, .match_offset=86785 }, { .children_offset=51449, .match_offset=88745 }, { .children_offset=0, .match_offset=61227 }, { .children_offset=51451, .match_offset=0 }, { .children_offset=51453, .match_offset=0 }, { .children_offset=51455, .match_offset=0 }, { .children_offset=0, .match_offset=6769 }, { .children_offset=51457, .match_offset=59479 }, { .children_offset=51460, .match_offset=0 }, { .children_offset=0, .match_offset=40444 }, { .children_offset=51462, .match_offset=0 }, { .children_offset=51464, .match_offset=0 }, { .children_offset=51466, .match_offset=0 }, { .children_offset=0, .match_offset=34861 }, { .children_offset=51468, .match_offset=0 }, { .children_offset=0, .match_offset=108783 }, { .children_offset=51471, .match_offset=55810 }, { .children_offset=51473, .match_offset=0 }, { .children_offset=51475, .match_offset=0 }, { .children_offset=51477, .match_offset=0 }, { .children_offset=51479, .match_offset=0 }, { .children_offset=0, .match_offset=35180 }, { .children_offset=51481, .match_offset=5250 }, { .children_offset=51486, .match_offset=0 }, { .children_offset=51488, .match_offset=0 }, { .children_offset=0, .match_offset=32682 }, { .children_offset=51490, .match_offset=0 }, { .children_offset=51492, .match_offset=0 }, { .children_offset=51494, .match_offset=0 }, { .children_offset=51496, .match_offset=0 }, { .children_offset=0, .match_offset=1133 }, { .children_offset=51498, .match_offset=0 }, { .children_offset=51500, .match_offset=0 }, { .children_offset=51502, .match_offset=0 }, { .children_offset=51504, .match_offset=0 }, { .children_offset=0, .match_offset=68619 }, { .children_offset=51506, .match_offset=0 }, { .children_offset=51508, .match_offset=0 }, { .children_offset=0, .match_offset=16215 }, { .children_offset=0, .match_offset=62832 }, { .children_offset=51510, .match_offset=0 }, { .children_offset=51512, .match_offset=0 }, { .children_offset=0, .match_offset=123702 }, { .children_offset=51514, .match_offset=0 }, { .children_offset=51517, .match_offset=0 }, { .children_offset=51519, .match_offset=0 }, { .children_offset=0, .match_offset=132227 }, { .children_offset=51521, .match_offset=0 }, { .children_offset=51523, .match_offset=0 }, { .children_offset=51525, .match_offset=0 }, { .children_offset=0, .match_offset=109469 }, { .children_offset=51527, .match_offset=0 }, { .children_offset=51532, .match_offset=0 }, { .children_offset=51534, .match_offset=0 }, { .children_offset=51536, .match_offset=0 }, { .children_offset=51538, .match_offset=0 }, { .children_offset=0, .match_offset=38887 }, { .children_offset=51540, .match_offset=0 }, { .children_offset=0, .match_offset=38175 }, { .children_offset=51542, .match_offset=0 }, { .children_offset=51544, .match_offset=0 }, { .children_offset=51546, .match_offset=0 }, { .children_offset=51548, .match_offset=0 }, { .children_offset=51550, .match_offset=0 }, { .children_offset=0, .match_offset=46063 }, { .children_offset=51552, .match_offset=0 }, { .children_offset=51555, .match_offset=0 }, { .children_offset=51557, .match_offset=0 }, { .children_offset=51559, .match_offset=0 }, { .children_offset=51561, .match_offset=0 }, { .children_offset=51563, .match_offset=0 }, { .children_offset=51565, .match_offset=0 }, { .children_offset=0, .match_offset=43742 }, { .children_offset=51567, .match_offset=0 }, { .children_offset=51569, .match_offset=0 }, { .children_offset=0, .match_offset=77750 }, { .children_offset=51571, .match_offset=32808 }, { .children_offset=51575, .match_offset=0 }, { .children_offset=0, .match_offset=50320 }, { .children_offset=51577, .match_offset=0 }, { .children_offset=51579, .match_offset=7359 }, { .children_offset=51581, .match_offset=0 }, { .children_offset=51583, .match_offset=0 }, { .children_offset=51585, .match_offset=0 }, { .children_offset=51587, .match_offset=0 }, { .children_offset=0, .match_offset=11010 }, { .children_offset=51589, .match_offset=0 }, { .children_offset=0, .match_offset=26262 }, { .children_offset=0, .match_offset=20892 }, { .children_offset=51591, .match_offset=0 }, { .children_offset=51595, .match_offset=32917 }, { .children_offset=0, .match_offset=50675 }, { .children_offset=51597, .match_offset=0 }, { .children_offset=51599, .match_offset=0 }, { .children_offset=0, .match_offset=56885 }, { .children_offset=0, .match_offset=62625 }, { .children_offset=51601, .match_offset=33557 }, { .children_offset=51603, .match_offset=0 }, { .children_offset=51605, .match_offset=0 }, { .children_offset=51607, .match_offset=0 }, { .children_offset=51609, .match_offset=0 }, { .children_offset=51611, .match_offset=0 }, { .children_offset=51613, .match_offset=0 }, { .children_offset=51615, .match_offset=0 }, { .children_offset=51617, .match_offset=0 }, { .children_offset=51619, .match_offset=0 }, { .children_offset=0, .match_offset=123549 }, { .children_offset=51621, .match_offset=89251 }, { .children_offset=51623, .match_offset=0 }, { .children_offset=51625, .match_offset=0 }, { .children_offset=0, .match_offset=74226 }, { .children_offset=0, .match_offset=58816 }, { .children_offset=0, .match_offset=37410 }, { .children_offset=51627, .match_offset=37942 }, { .children_offset=51629, .match_offset=0 }, { .children_offset=51631, .match_offset=0 }, { .children_offset=0, .match_offset=109871 }, { .children_offset=51633, .match_offset=56585 }, { .children_offset=51648, .match_offset=0 }, { .children_offset=0, .match_offset=46699 }, { .children_offset=0, .match_offset=129929 }, { .children_offset=0, .match_offset=134310 }, { .children_offset=0, .match_offset=125499 }, { .children_offset=51653, .match_offset=0 }, { .children_offset=51656, .match_offset=0 }, { .children_offset=51658, .match_offset=0 }, { .children_offset=0, .match_offset=30886 }, { .children_offset=51660, .match_offset=0 }, { .children_offset=0, .match_offset=81862 }, { .children_offset=0, .match_offset=11316 }, { .children_offset=51662, .match_offset=0 }, { .children_offset=51666, .match_offset=0 }, { .children_offset=51668, .match_offset=0 }, { .children_offset=0, .match_offset=88845 }, { .children_offset=51670, .match_offset=0 }, { .children_offset=51672, .match_offset=0 }, { .children_offset=51674, .match_offset=0 }, { .children_offset=0, .match_offset=102723 }, { .children_offset=51676, .match_offset=0 }, { .children_offset=51678, .match_offset=114330 }, { .children_offset=51681, .match_offset=0 }, { .children_offset=51683, .match_offset=0 }, { .children_offset=51685, .match_offset=0 }, { .children_offset=51687, .match_offset=0 }, { .children_offset=51689, .match_offset=0 }, { .children_offset=51691, .match_offset=0 }, { .children_offset=0, .match_offset=9049 }, { .children_offset=0, .match_offset=15319 }, { .children_offset=51693, .match_offset=136559 }, { .children_offset=0, .match_offset=23950 }, { .children_offset=51695, .match_offset=45119 }, { .children_offset=51698, .match_offset=0 }, { .children_offset=51700, .match_offset=0 }, { .children_offset=0, .match_offset=134877 }, { .children_offset=51702, .match_offset=0 }, { .children_offset=51704, .match_offset=0 }, { .children_offset=0, .match_offset=28498 }, { .children_offset=51706, .match_offset=0 }, { .children_offset=0, .match_offset=30514 }, { .children_offset=0, .match_offset=67655 }, { .children_offset=0, .match_offset=114877 }, { .children_offset=0, .match_offset=65523 }, { .children_offset=51708, .match_offset=0 }, { .children_offset=51710, .match_offset=38299 }, { .children_offset=51713, .match_offset=0 }, { .children_offset=51715, .match_offset=0 }, { .children_offset=51717, .match_offset=0 }, { .children_offset=51719, .match_offset=0 }, { .children_offset=0, .match_offset=16218 }, { .children_offset=51721, .match_offset=0 }, { .children_offset=51723, .match_offset=0 }, { .children_offset=0, .match_offset=22076 }, { .children_offset=0, .match_offset=124790 }, { .children_offset=51725, .match_offset=0 }, { .children_offset=0, .match_offset=111001 }, { .children_offset=0, .match_offset=25983 }, { .children_offset=51727, .match_offset=0 }, { .children_offset=0, .match_offset=34414 }, { .children_offset=0, .match_offset=27655 }, { .children_offset=51729, .match_offset=108807 }, { .children_offset=51734, .match_offset=0 }, { .children_offset=51736, .match_offset=0 }, { .children_offset=0, .match_offset=41861 }, { .children_offset=51738, .match_offset=0 }, { .children_offset=51741, .match_offset=0 }, { .children_offset=0, .match_offset=77752 }, { .children_offset=51743, .match_offset=0 }, { .children_offset=51745, .match_offset=11911 }, { .children_offset=51748, .match_offset=0 }, { .children_offset=51750, .match_offset=0 }, { .children_offset=51752, .match_offset=0 }, { .children_offset=51754, .match_offset=0 }, { .children_offset=0, .match_offset=103425 }, { .children_offset=51756, .match_offset=0 }, { .children_offset=0, .match_offset=125839 }, { .children_offset=51758, .match_offset=0 }, { .children_offset=51760, .match_offset=0 }, { .children_offset=51762, .match_offset=63839 }, { .children_offset=51764, .match_offset=0 }, { .children_offset=51766, .match_offset=0 }, { .children_offset=51768, .match_offset=0 }, { .children_offset=51770, .match_offset=0 }, { .children_offset=51772, .match_offset=0 }, { .children_offset=51774, .match_offset=0 }, { .children_offset=51776, .match_offset=0 }, { .children_offset=51778, .match_offset=0 }, { .children_offset=51780, .match_offset=0 }, { .children_offset=0, .match_offset=117535 }, { .children_offset=51782, .match_offset=0 }, { .children_offset=51784, .match_offset=0 }, { .children_offset=0, .match_offset=15286 }, { .children_offset=51786, .match_offset=102936 }, { .children_offset=51796, .match_offset=0 }, { .children_offset=0, .match_offset=43509 }, { .children_offset=0, .match_offset=60430 }, { .children_offset=0, .match_offset=122732 }, { .children_offset=0, .match_offset=13409 }, { .children_offset=0, .match_offset=69411 }, { .children_offset=51802, .match_offset=0 }, { .children_offset=51804, .match_offset=0 }, { .children_offset=51806, .match_offset=60709 }, { .children_offset=51808, .match_offset=0 }, { .children_offset=51810, .match_offset=0 }, { .children_offset=51812, .match_offset=0 }, { .children_offset=0, .match_offset=55202 }, { .children_offset=51814, .match_offset=0 }, { .children_offset=51817, .match_offset=61491 }, { .children_offset=51820, .match_offset=0 }, { .children_offset=51822, .match_offset=0 }, { .children_offset=51824, .match_offset=0 }, { .children_offset=51826, .match_offset=0 }, { .children_offset=51828, .match_offset=0 }, { .children_offset=51830, .match_offset=0 }, { .children_offset=0, .match_offset=13004 }, { .children_offset=51832, .match_offset=0 }, { .children_offset=51834, .match_offset=0 }, { .children_offset=51836, .match_offset=0 }, { .children_offset=0, .match_offset=43064 }, { .children_offset=51838, .match_offset=0 }, { .children_offset=0, .match_offset=14293 }, { .children_offset=51840, .match_offset=0 }, { .children_offset=51843, .match_offset=0 }, { .children_offset=51845, .match_offset=0 }, { .children_offset=51848, .match_offset=0 }, { .children_offset=0, .match_offset=16421 }, { .children_offset=0, .match_offset=134318 }, { .children_offset=51850, .match_offset=0 }, { .children_offset=51852, .match_offset=0 }, { .children_offset=51854, .match_offset=0 }, { .children_offset=0, .match_offset=25575 }, { .children_offset=0, .match_offset=104406 }, { .children_offset=51856, .match_offset=0 }, { .children_offset=51858, .match_offset=0 }, { .children_offset=51860, .match_offset=0 }, { .children_offset=0, .match_offset=35161 }, { .children_offset=51862, .match_offset=73682 }, { .children_offset=51869, .match_offset=114964 }, { .children_offset=51872, .match_offset=0 }, { .children_offset=0, .match_offset=58457 }, { .children_offset=0, .match_offset=77032 }, { .children_offset=0, .match_offset=38695 }, { .children_offset=51874, .match_offset=0 }, { .children_offset=0, .match_offset=72161 }, { .children_offset=51876, .match_offset=0 }, { .children_offset=0, .match_offset=2281 }, { .children_offset=51878, .match_offset=61776 }, { .children_offset=51880, .match_offset=0 }, { .children_offset=51882, .match_offset=0 }, { .children_offset=0, .match_offset=86059 }, { .children_offset=51884, .match_offset=0 }, { .children_offset=51886, .match_offset=0 }, { .children_offset=0, .match_offset=6887 }, { .children_offset=51888, .match_offset=0 }, { .children_offset=51890, .match_offset=0 }, { .children_offset=0, .match_offset=64370 }, { .children_offset=51892, .match_offset=0 }, { .children_offset=51894, .match_offset=2330 }, { .children_offset=51897, .match_offset=0 }, { .children_offset=0, .match_offset=114888 }, { .children_offset=51899, .match_offset=0 }, { .children_offset=51901, .match_offset=0 }, { .children_offset=0, .match_offset=43463 }, { .children_offset=51903, .match_offset=109874 }, { .children_offset=51915, .match_offset=0 }, { .children_offset=0, .match_offset=111005 }, { .children_offset=0, .match_offset=11067 }, { .children_offset=0, .match_offset=43692 }, { .children_offset=0, .match_offset=58501 }, { .children_offset=0, .match_offset=27727 }, { .children_offset=0, .match_offset=2271 }, { .children_offset=0, .match_offset=136227 }, { .children_offset=0, .match_offset=23948 }, { .children_offset=0, .match_offset=34656 }, { .children_offset=51923, .match_offset=0 }, { .children_offset=0, .match_offset=8438 }, { .children_offset=51926, .match_offset=0 }, { .children_offset=51928, .match_offset=0 }, { .children_offset=0, .match_offset=135924 }, { .children_offset=51930, .match_offset=0 }, { .children_offset=51933, .match_offset=0 }, { .children_offset=51935, .match_offset=13243 }, { .children_offset=0, .match_offset=10941 }, { .children_offset=51937, .match_offset=0 }, { .children_offset=51939, .match_offset=109125 }, { .children_offset=0, .match_offset=65792 }, { .children_offset=0, .match_offset=119584 }, { .children_offset=51941, .match_offset=9069 }, { .children_offset=51945, .match_offset=61926 }, { .children_offset=51947, .match_offset=0 }, { .children_offset=51949, .match_offset=0 }, { .children_offset=51951, .match_offset=0 }, { .children_offset=51953, .match_offset=0 }, { .children_offset=51955, .match_offset=0 }, { .children_offset=0, .match_offset=15331 }, { .children_offset=0, .match_offset=90142 }, { .children_offset=0, .match_offset=10037 }, { .children_offset=51957, .match_offset=30770 }, { .children_offset=0, .match_offset=69291 }, { .children_offset=51959, .match_offset=0 }, { .children_offset=51965, .match_offset=114850 }, { .children_offset=51967, .match_offset=0 }, { .children_offset=51969, .match_offset=0 }, { .children_offset=51971, .match_offset=0 }, { .children_offset=51973, .match_offset=0 }, { .children_offset=0, .match_offset=70689 }, { .children_offset=51975, .match_offset=58477 }, { .children_offset=51977, .match_offset=0 }, { .children_offset=0, .match_offset=15956 }, { .children_offset=51979, .match_offset=0 }, { .children_offset=0, .match_offset=60569 }, { .children_offset=51981, .match_offset=0 }, { .children_offset=51983, .match_offset=0 }, { .children_offset=51985, .match_offset=0 }, { .children_offset=0, .match_offset=58433 }, { .children_offset=51987, .match_offset=0 }, { .children_offset=51989, .match_offset=0 }, { .children_offset=51991, .match_offset=0 }, { .children_offset=0, .match_offset=43938 }, { .children_offset=0, .match_offset=125035 }, { .children_offset=0, .match_offset=111500 }, { .children_offset=0, .match_offset=134877 }, { .children_offset=51993, .match_offset=5237 }, { .children_offset=51999, .match_offset=0 }, { .children_offset=52001, .match_offset=102705 }, { .children_offset=52003, .match_offset=0 }, { .children_offset=52005, .match_offset=0 }, { .children_offset=0, .match_offset=40180 }, { .children_offset=52007, .match_offset=0 }, { .children_offset=52011, .match_offset=0 }, { .children_offset=52013, .match_offset=0 }, { .children_offset=0, .match_offset=5237 }, { .children_offset=52015, .match_offset=0 }, { .children_offset=52017, .match_offset=0 }, { .children_offset=0, .match_offset=49744 }, { .children_offset=52019, .match_offset=0 }, { .children_offset=52021, .match_offset=0 }, { .children_offset=52023, .match_offset=0 }, { .children_offset=52025, .match_offset=0 }, { .children_offset=52027, .match_offset=0 }, { .children_offset=0, .match_offset=26442 }, { .children_offset=52029, .match_offset=0 }, { .children_offset=52033, .match_offset=0 }, { .children_offset=52035, .match_offset=0 }, { .children_offset=52037, .match_offset=0 }, { .children_offset=52039, .match_offset=0 }, { .children_offset=0, .match_offset=26141 }, { .children_offset=0, .match_offset=135821 }, { .children_offset=52042, .match_offset=0 }, { .children_offset=0, .match_offset=14496 }, { .children_offset=52044, .match_offset=0 }, { .children_offset=52046, .match_offset=0 }, { .children_offset=52048, .match_offset=0 }, { .children_offset=0, .match_offset=114823 }, { .children_offset=52050, .match_offset=0 }, { .children_offset=52052, .match_offset=0 }, { .children_offset=0, .match_offset=23932 }, { .children_offset=0, .match_offset=125280 }, { .children_offset=52054, .match_offset=0 }, { .children_offset=52056, .match_offset=0 }, { .children_offset=0, .match_offset=14893 }, { .children_offset=52058, .match_offset=71974 }, { .children_offset=52066, .match_offset=0 }, { .children_offset=52068, .match_offset=0 }, { .children_offset=0, .match_offset=122753 }, { .children_offset=0, .match_offset=118395 }, { .children_offset=0, .match_offset=13174 }, { .children_offset=0, .match_offset=103175 }, { .children_offset=52071, .match_offset=0 }, { .children_offset=0, .match_offset=133681 }, { .children_offset=52073, .match_offset=60075 }, { .children_offset=52075, .match_offset=0 }, { .children_offset=0, .match_offset=60571 }, { .children_offset=52077, .match_offset=14449 }, { .children_offset=0, .match_offset=38968 }, { .children_offset=0, .match_offset=125644 }, { .children_offset=0, .match_offset=130094 }, { .children_offset=52080, .match_offset=126629 }, { .children_offset=0, .match_offset=6000 }, { .children_offset=0, .match_offset=57363 }, { .children_offset=0, .match_offset=114025 }, { .children_offset=52084, .match_offset=0 }, { .children_offset=52086, .match_offset=0 }, { .children_offset=0, .match_offset=14990 }, { .children_offset=0, .match_offset=1893 }, { .children_offset=52088, .match_offset=0 }, { .children_offset=52109, .match_offset=0 }, { .children_offset=0, .match_offset=102721 }, { .children_offset=52111, .match_offset=0 }, { .children_offset=52113, .match_offset=0 }, { .children_offset=0, .match_offset=66533 }, { .children_offset=0, .match_offset=13196 }, { .children_offset=0, .match_offset=33853 }, { .children_offset=52122, .match_offset=89109 }, { .children_offset=0, .match_offset=5520 }, { .children_offset=0, .match_offset=13220 }, { .children_offset=0, .match_offset=50325 }, { .children_offset=52125, .match_offset=132204 }, { .children_offset=0, .match_offset=23782 }, { .children_offset=0, .match_offset=68621 }, { .children_offset=52127, .match_offset=15989 }, { .children_offset=0, .match_offset=119236 }, { .children_offset=52129, .match_offset=129386 }, { .children_offset=0, .match_offset=52624 }, { .children_offset=0, .match_offset=63026 }, { .children_offset=52134, .match_offset=0 }, { .children_offset=0, .match_offset=12515 }, { .children_offset=52136, .match_offset=8812 }, { .children_offset=0, .match_offset=78562 }, { .children_offset=52138, .match_offset=0 }, { .children_offset=52142, .match_offset=0 }, { .children_offset=0, .match_offset=8854 }, { .children_offset=52144, .match_offset=0 }, { .children_offset=52146, .match_offset=0 }, { .children_offset=0, .match_offset=71992 }, { .children_offset=52148, .match_offset=0 }, { .children_offset=0, .match_offset=59497 }, { .children_offset=52150, .match_offset=0 }, { .children_offset=52152, .match_offset=0 }, { .children_offset=52154, .match_offset=0 }, { .children_offset=0, .match_offset=55281 }, { .children_offset=52156, .match_offset=8874 }, { .children_offset=0, .match_offset=6831 }, { .children_offset=0, .match_offset=65273 }, { .children_offset=52161, .match_offset=0 }, { .children_offset=52163, .match_offset=0 }, { .children_offset=52165, .match_offset=0 }, { .children_offset=0, .match_offset=103684 }, { .children_offset=52167, .match_offset=0 }, { .children_offset=0, .match_offset=63378 }, { .children_offset=52169, .match_offset=0 }, { .children_offset=0, .match_offset=134982 }, { .children_offset=0, .match_offset=46160 }, { .children_offset=52171, .match_offset=0 }, { .children_offset=52173, .match_offset=0 }, { .children_offset=52175, .match_offset=0 }, { .children_offset=0, .match_offset=131400 }, { .children_offset=52177, .match_offset=78696 }, { .children_offset=52184, .match_offset=0 }, { .children_offset=0, .match_offset=33799 }, { .children_offset=52187, .match_offset=0 }, { .children_offset=52189, .match_offset=0 }, { .children_offset=52191, .match_offset=0 }, { .children_offset=0, .match_offset=72465 }, { .children_offset=52193, .match_offset=72258 }, { .children_offset=0, .match_offset=10946 }, { .children_offset=0, .match_offset=84850 }, { .children_offset=0, .match_offset=109587 }, { .children_offset=0, .match_offset=7717 }, { .children_offset=52197, .match_offset=0 }, { .children_offset=52199, .match_offset=0 }, { .children_offset=0, .match_offset=30463 }, { .children_offset=0, .match_offset=6162 }, { .children_offset=0, .match_offset=51158 }, { .children_offset=52201, .match_offset=0 }, { .children_offset=52203, .match_offset=0 }, { .children_offset=52205, .match_offset=0 }, { .children_offset=0, .match_offset=44027 }, { .children_offset=52207, .match_offset=0 }, { .children_offset=52209, .match_offset=0 }, { .children_offset=0, .match_offset=84828 }, { .children_offset=52211, .match_offset=0 }, { .children_offset=52213, .match_offset=0 }, { .children_offset=0, .match_offset=113399 }, { .children_offset=52215, .match_offset=46590 }, { .children_offset=0, .match_offset=42450 }, { .children_offset=52222, .match_offset=0 }, { .children_offset=52224, .match_offset=0 }, { .children_offset=0, .match_offset=28041 }, { .children_offset=52226, .match_offset=71988 }, { .children_offset=0, .match_offset=123164 }, { .children_offset=0, .match_offset=56579 }, { .children_offset=52230, .match_offset=0 }, { .children_offset=52232, .match_offset=0 }, { .children_offset=0, .match_offset=89333 }, { .children_offset=0, .match_offset=55291 }, { .children_offset=52234, .match_offset=34563 }, { .children_offset=52236, .match_offset=0 }, { .children_offset=52238, .match_offset=0 }, { .children_offset=0, .match_offset=130075 }, { .children_offset=0, .match_offset=124904 }, { .children_offset=52240, .match_offset=0 }, { .children_offset=52242, .match_offset=0 }, { .children_offset=52244, .match_offset=0 }, { .children_offset=0, .match_offset=116946 }, { .children_offset=52246, .match_offset=0 }, { .children_offset=52250, .match_offset=0 }, { .children_offset=0, .match_offset=130954 }, { .children_offset=52252, .match_offset=0 }, { .children_offset=52254, .match_offset=0 }, { .children_offset=52256, .match_offset=0 }, { .children_offset=52258, .match_offset=0 }, { .children_offset=52260, .match_offset=0 }, { .children_offset=52262, .match_offset=0 }, { .children_offset=52264, .match_offset=0 }, { .children_offset=52266, .match_offset=0 }, { .children_offset=52268, .match_offset=0 }, { .children_offset=0, .match_offset=5741 }, { .children_offset=52270, .match_offset=0 }, { .children_offset=52272, .match_offset=0 }, { .children_offset=52274, .match_offset=0 }, { .children_offset=0, .match_offset=116937 }, { .children_offset=52276, .match_offset=70822 }, { .children_offset=52280, .match_offset=26131 }, { .children_offset=0, .match_offset=37172 }, { .children_offset=52282, .match_offset=0 }, { .children_offset=52284, .match_offset=0 }, { .children_offset=52286, .match_offset=0 }, { .children_offset=0, .match_offset=28430 }, { .children_offset=52288, .match_offset=0 }, { .children_offset=52290, .match_offset=0 }, { .children_offset=0, .match_offset=10997 }, { .children_offset=52292, .match_offset=0 }, { .children_offset=0, .match_offset=38555 }, { .children_offset=52295, .match_offset=11001 }, { .children_offset=0, .match_offset=16027 }, { .children_offset=52297, .match_offset=80994 }, { .children_offset=52301, .match_offset=6742 }, { .children_offset=0, .match_offset=59438 }, { .children_offset=52303, .match_offset=131548 }, { .children_offset=52306, .match_offset=0 }, { .children_offset=52308, .match_offset=0 }, { .children_offset=0, .match_offset=29893 }, { .children_offset=0, .match_offset=46194 }, { .children_offset=0, .match_offset=50201 }, { .children_offset=52310, .match_offset=22227 }, { .children_offset=52320, .match_offset=32793 }, { .children_offset=0, .match_offset=103439 }, { .children_offset=52322, .match_offset=78531 }, { .children_offset=52324, .match_offset=89619 }, { .children_offset=0, .match_offset=131143 }, { .children_offset=0, .match_offset=63766 }, { .children_offset=52326, .match_offset=102364 }, { .children_offset=52328, .match_offset=50213 }, { .children_offset=0, .match_offset=35868 }, { .children_offset=0, .match_offset=84822 }, { .children_offset=52330, .match_offset=2316 }, { .children_offset=0, .match_offset=22038 }, { .children_offset=0, .match_offset=135918 }, { .children_offset=0, .match_offset=41853 }, { .children_offset=0, .match_offset=13002 }, { .children_offset=52332, .match_offset=0 }, { .children_offset=52350, .match_offset=0 }, { .children_offset=52352, .match_offset=0 }, { .children_offset=52354, .match_offset=0 }, { .children_offset=52356, .match_offset=0 }, { .children_offset=0, .match_offset=40828 }, { .children_offset=52358, .match_offset=0 }, { .children_offset=52360, .match_offset=0 }, { .children_offset=52369, .match_offset=27767 }, { .children_offset=0, .match_offset=6321 }, { .children_offset=0, .match_offset=125190 }, { .children_offset=0, .match_offset=78202 }, { .children_offset=0, .match_offset=58928 }, { .children_offset=0, .match_offset=70708 }, { .children_offset=0, .match_offset=56934 }, { .children_offset=0, .match_offset=58799 }, { .children_offset=0, .match_offset=46006 }, { .children_offset=52371, .match_offset=54032 }, { .children_offset=52396, .match_offset=0 }, { .children_offset=0, .match_offset=5541 }, { .children_offset=0, .match_offset=6695 }, { .children_offset=0, .match_offset=38466 }, { .children_offset=0, .match_offset=118550 }, { .children_offset=0, .match_offset=65193 }, { .children_offset=0, .match_offset=131620 }, { .children_offset=0, .match_offset=6923 }, { .children_offset=52405, .match_offset=0 }, { .children_offset=0, .match_offset=34958 }, { .children_offset=52407, .match_offset=66208 }, { .children_offset=52411, .match_offset=0 }, { .children_offset=0, .match_offset=116088 }, { .children_offset=0, .match_offset=71491 }, { .children_offset=52413, .match_offset=0 }, { .children_offset=0, .match_offset=68841 }, { .children_offset=52415, .match_offset=116096 }, { .children_offset=0, .match_offset=35784 }, { .children_offset=52417, .match_offset=0 }, { .children_offset=0, .match_offset=43132 }, { .children_offset=52421, .match_offset=0 }, { .children_offset=52423, .match_offset=0 }, { .children_offset=0, .match_offset=69335 }, { .children_offset=0, .match_offset=102667 }, { .children_offset=52425, .match_offset=32852 }, { .children_offset=52428, .match_offset=64778 }, { .children_offset=0, .match_offset=63792 }, { .children_offset=0, .match_offset=79745 }, { .children_offset=52430, .match_offset=11039 }, { .children_offset=52432, .match_offset=0 }, { .children_offset=52434, .match_offset=0 }, { .children_offset=52436, .match_offset=0 }, { .children_offset=0, .match_offset=77827 }, { .children_offset=52438, .match_offset=74576 }, { .children_offset=0, .match_offset=33795 }, { .children_offset=52440, .match_offset=113960 }, { .children_offset=52443, .match_offset=35336 }, { .children_offset=0, .match_offset=64134 }, { .children_offset=0, .match_offset=26029 }, { .children_offset=52445, .match_offset=28264 }, { .children_offset=0, .match_offset=52541 }, { .children_offset=52447, .match_offset=42115 }, { .children_offset=52449, .match_offset=0 }, { .children_offset=52451, .match_offset=0 }, { .children_offset=52453, .match_offset=0 }, { .children_offset=52455, .match_offset=0 }, { .children_offset=52457, .match_offset=0 }, { .children_offset=52459, .match_offset=0 }, { .children_offset=0, .match_offset=27657 }, { .children_offset=52461, .match_offset=35642 }, { .children_offset=52464, .match_offset=0 }, { .children_offset=52466, .match_offset=0 }, { .children_offset=0, .match_offset=129459 }, { .children_offset=52468, .match_offset=10297 }, { .children_offset=0, .match_offset=86066 }, { .children_offset=0, .match_offset=108216 }, { .children_offset=52470, .match_offset=63691 }, { .children_offset=52473, .match_offset=0 }, { .children_offset=52475, .match_offset=0 }, { .children_offset=52477, .match_offset=0 }, { .children_offset=52479, .match_offset=0 }, { .children_offset=0, .match_offset=25770 }, { .children_offset=52481, .match_offset=0 }, { .children_offset=0, .match_offset=131544 }, { .children_offset=52483, .match_offset=10889 }, { .children_offset=0, .match_offset=84870 }, { .children_offset=0, .match_offset=11341 }, { .children_offset=0, .match_offset=34550 }, { .children_offset=52485, .match_offset=43793 }, { .children_offset=0, .match_offset=87793 }, { .children_offset=0, .match_offset=89977 }, { .children_offset=52488, .match_offset=49712 }, { .children_offset=0, .match_offset=8961 }, { .children_offset=0, .match_offset=69413 }, { .children_offset=52491, .match_offset=46018 }, { .children_offset=0, .match_offset=89103 }, { .children_offset=0, .match_offset=103353 }, { .children_offset=0, .match_offset=5363 }, { .children_offset=0, .match_offset=103954 }, { .children_offset=0, .match_offset=52729 }, { .children_offset=52495, .match_offset=6134 }, { .children_offset=52497, .match_offset=14954 }, { .children_offset=52499, .match_offset=0 }, { .children_offset=52501, .match_offset=0 }, { .children_offset=0, .match_offset=88749 }, { .children_offset=52503, .match_offset=6916 }, { .children_offset=52506, .match_offset=0 }, { .children_offset=52508, .match_offset=0 }, { .children_offset=52510, .match_offset=0 }, { .children_offset=0, .match_offset=114744 }, { .children_offset=0, .match_offset=130083 }, { .children_offset=52512, .match_offset=72119 }, { .children_offset=0, .match_offset=43098 }, { .children_offset=0, .match_offset=121961 }, { .children_offset=52515, .match_offset=0 }, { .children_offset=52518, .match_offset=0 }, { .children_offset=52520, .match_offset=0 }, { .children_offset=0, .match_offset=34893 }, { .children_offset=0, .match_offset=16384 }, { .children_offset=52522, .match_offset=62327 }, { .children_offset=52536, .match_offset=1067 }, { .children_offset=0, .match_offset=48457 }, { .children_offset=52538, .match_offset=7563 }, { .children_offset=0, .match_offset=81103 }, { .children_offset=0, .match_offset=90335 }, { .children_offset=52540, .match_offset=0 }, { .children_offset=0, .match_offset=30761 }, { .children_offset=52542, .match_offset=0 }, { .children_offset=52544, .match_offset=0 }, { .children_offset=52546, .match_offset=0 }, { .children_offset=0, .match_offset=34661 }, { .children_offset=52548, .match_offset=109273 }, { .children_offset=52551, .match_offset=0 }, { .children_offset=0, .match_offset=6835 }, { .children_offset=52553, .match_offset=0 }, { .children_offset=52555, .match_offset=0 }, { .children_offset=52557, .match_offset=0 }, { .children_offset=0, .match_offset=131099 }, { .children_offset=52559, .match_offset=61553 }, { .children_offset=52562, .match_offset=0 }, { .children_offset=0, .match_offset=6168 }, { .children_offset=0, .match_offset=88632 }, { .children_offset=52566, .match_offset=0 }, { .children_offset=0, .match_offset=104509 }, { .children_offset=52568, .match_offset=0 }, { .children_offset=52570, .match_offset=0 }, { .children_offset=52572, .match_offset=0 }, { .children_offset=52574, .match_offset=0 }, { .children_offset=52576, .match_offset=0 }, { .children_offset=52578, .match_offset=0 }, { .children_offset=52580, .match_offset=0 }, { .children_offset=0, .match_offset=64386 }, { .children_offset=52582, .match_offset=342 }, { .children_offset=52586, .match_offset=0 }, { .children_offset=0, .match_offset=11003 }, { .children_offset=0, .match_offset=108153 }, { .children_offset=0, .match_offset=16007 }, { .children_offset=52588, .match_offset=0 }, { .children_offset=52591, .match_offset=0 }, { .children_offset=52593, .match_offset=0 }, { .children_offset=52595, .match_offset=0 }, { .children_offset=52597, .match_offset=0 }, { .children_offset=52599, .match_offset=27529 }, { .children_offset=52601, .match_offset=0 }, { .children_offset=52606, .match_offset=0 }, { .children_offset=52608, .match_offset=0 }, { .children_offset=52610, .match_offset=0 }, { .children_offset=52612, .match_offset=0 }, { .children_offset=0, .match_offset=55218 }, { .children_offset=52614, .match_offset=0 }, { .children_offset=52616, .match_offset=0 }, { .children_offset=52618, .match_offset=0 }, { .children_offset=52620, .match_offset=0 }, { .children_offset=0, .match_offset=64250 }, { .children_offset=52622, .match_offset=0 }, { .children_offset=52624, .match_offset=0 }, { .children_offset=52626, .match_offset=0 }, { .children_offset=52628, .match_offset=0 }, { .children_offset=52630, .match_offset=0 }, { .children_offset=52632, .match_offset=0 }, { .children_offset=0, .match_offset=134279 }, { .children_offset=52634, .match_offset=0 }, { .children_offset=52636, .match_offset=0 }, { .children_offset=52638, .match_offset=0 }, { .children_offset=0, .match_offset=20284 }, { .children_offset=52640, .match_offset=0 }, { .children_offset=0, .match_offset=461 }, { .children_offset=52642, .match_offset=0 }, { .children_offset=52644, .match_offset=0 }, { .children_offset=0, .match_offset=77351 }, { .children_offset=52646, .match_offset=0 }, { .children_offset=52652, .match_offset=0 }, { .children_offset=52654, .match_offset=131489 }, { .children_offset=0, .match_offset=12324 }, { .children_offset=0, .match_offset=103110 }, { .children_offset=0, .match_offset=78474 }, { .children_offset=52656, .match_offset=0 }, { .children_offset=52658, .match_offset=0 }, { .children_offset=0, .match_offset=59031 }, { .children_offset=0, .match_offset=61571 }, { .children_offset=0, .match_offset=21880 }, { .children_offset=0, .match_offset=89156 }, { .children_offset=52660, .match_offset=0 }, { .children_offset=52663, .match_offset=0 }, { .children_offset=0, .match_offset=26793 }, { .children_offset=52666, .match_offset=0 }, { .children_offset=52668, .match_offset=0 }, { .children_offset=0, .match_offset=27624 }, { .children_offset=0, .match_offset=30819 }, { .children_offset=52670, .match_offset=0 }, { .children_offset=0, .match_offset=80925 }, { .children_offset=52672, .match_offset=35905 }, { .children_offset=52686, .match_offset=0 }, { .children_offset=0, .match_offset=14269 }, { .children_offset=52688, .match_offset=0 }, { .children_offset=0, .match_offset=56911 }, { .children_offset=52690, .match_offset=0 }, { .children_offset=52692, .match_offset=0 }, { .children_offset=52694, .match_offset=0 }, { .children_offset=52696, .match_offset=0 }, { .children_offset=0, .match_offset=131537 }, { .children_offset=52698, .match_offset=111191 }, { .children_offset=0, .match_offset=43914 }, { .children_offset=0, .match_offset=33489 }, { .children_offset=0, .match_offset=43994 }, { .children_offset=0, .match_offset=77918 }, { .children_offset=0, .match_offset=109163 }, { .children_offset=0, .match_offset=6653 }, { .children_offset=0, .match_offset=34300 }, { .children_offset=52703, .match_offset=80216 }, { .children_offset=0, .match_offset=13127 }, { .children_offset=0, .match_offset=79743 }, { .children_offset=0, .match_offset=102606 }, { .children_offset=52705, .match_offset=0 }, { .children_offset=0, .match_offset=131567 }, { .children_offset=0, .match_offset=110211 }, { .children_offset=52707, .match_offset=0 }, { .children_offset=52709, .match_offset=0 }, { .children_offset=0, .match_offset=57263 }, { .children_offset=0, .match_offset=40649 }, { .children_offset=52711, .match_offset=68506 }, { .children_offset=52726, .match_offset=0 }, { .children_offset=0, .match_offset=124850 }, { .children_offset=0, .match_offset=13209 }, { .children_offset=0, .match_offset=114869 }, { .children_offset=0, .match_offset=61131 }, { .children_offset=0, .match_offset=55868 }, { .children_offset=0, .match_offset=60471 }, { .children_offset=52738, .match_offset=29986 }, { .children_offset=0, .match_offset=130913 }, { .children_offset=52740, .match_offset=0 }, { .children_offset=0, .match_offset=73743 }, { .children_offset=0, .match_offset=58824 }, { .children_offset=0, .match_offset=30740 }, { .children_offset=52742, .match_offset=0 }, { .children_offset=52746, .match_offset=109290 }, { .children_offset=0, .match_offset=5247 }, { .children_offset=52748, .match_offset=0 }, { .children_offset=0, .match_offset=125626 }, { .children_offset=0, .match_offset=117533 }, { .children_offset=0, .match_offset=33901 }, { .children_offset=52750, .match_offset=87067 }, { .children_offset=0, .match_offset=103797 }, { .children_offset=52752, .match_offset=0 }, { .children_offset=0, .match_offset=64538 }, { .children_offset=52754, .match_offset=0 }, { .children_offset=0, .match_offset=11003 }, { .children_offset=0, .match_offset=63449 }, { .children_offset=52756, .match_offset=65397 }, { .children_offset=0, .match_offset=126423 }, { .children_offset=0, .match_offset=61222 }, { .children_offset=52758, .match_offset=0 }, { .children_offset=0, .match_offset=125275 }, { .children_offset=0, .match_offset=72532 }, { .children_offset=52760, .match_offset=459 }, { .children_offset=52762, .match_offset=0 }, { .children_offset=52764, .match_offset=0 }, { .children_offset=52766, .match_offset=0 }, { .children_offset=52768, .match_offset=0 }, { .children_offset=52770, .match_offset=30810 }, { .children_offset=52772, .match_offset=0 }, { .children_offset=52774, .match_offset=0 }, { .children_offset=52776, .match_offset=0 }, { .children_offset=0, .match_offset=65249 }, { .children_offset=52778, .match_offset=0 }, { .children_offset=0, .match_offset=116976 }, { .children_offset=0, .match_offset=34450 }, { .children_offset=0, .match_offset=117570 }, { .children_offset=52780, .match_offset=0 }, { .children_offset=52783, .match_offset=0 }, { .children_offset=52787, .match_offset=0 }, { .children_offset=52789, .match_offset=0 }, { .children_offset=52791, .match_offset=0 }, { .children_offset=52793, .match_offset=0 }, { .children_offset=52795, .match_offset=0 }, { .children_offset=52797, .match_offset=0 }, { .children_offset=52799, .match_offset=0 }, { .children_offset=52801, .match_offset=0 }, { .children_offset=52803, .match_offset=0 }, { .children_offset=0, .match_offset=57432 }, { .children_offset=52805, .match_offset=0 }, { .children_offset=52807, .match_offset=0 }, { .children_offset=52809, .match_offset=0 }, { .children_offset=52811, .match_offset=0 }, { .children_offset=52813, .match_offset=0 }, { .children_offset=0, .match_offset=131824 }, { .children_offset=52815, .match_offset=0 }, { .children_offset=52817, .match_offset=0 }, { .children_offset=52819, .match_offset=0 }, { .children_offset=0, .match_offset=110588 }, { .children_offset=52821, .match_offset=0 }, { .children_offset=52823, .match_offset=0 }, { .children_offset=52825, .match_offset=0 }, { .children_offset=0, .match_offset=102700 }, { .children_offset=52827, .match_offset=103183 }, { .children_offset=0, .match_offset=123151 }, { .children_offset=52829, .match_offset=0 }, { .children_offset=52831, .match_offset=0 }, { .children_offset=0, .match_offset=71951 }, { .children_offset=52833, .match_offset=68155 }, { .children_offset=52852, .match_offset=0 }, { .children_offset=0, .match_offset=114742 }, { .children_offset=0, .match_offset=88605 }, { .children_offset=0, .match_offset=113062 }, { .children_offset=0, .match_offset=28737 }, { .children_offset=52863, .match_offset=8945 }, { .children_offset=0, .match_offset=61069 }, { .children_offset=52865, .match_offset=103391 }, { .children_offset=0, .match_offset=60546 }, { .children_offset=0, .match_offset=109295 }, { .children_offset=0, .match_offset=114960 }, { .children_offset=0, .match_offset=7508 }, { .children_offset=52867, .match_offset=0 }, { .children_offset=52869, .match_offset=60468 }, { .children_offset=0, .match_offset=61040 }, { .children_offset=52871, .match_offset=0 }, { .children_offset=52874, .match_offset=0 }, { .children_offset=0, .match_offset=125497 }, { .children_offset=0, .match_offset=42981 }, { .children_offset=52876, .match_offset=0 }, { .children_offset=0, .match_offset=68457 }, { .children_offset=52878, .match_offset=0 }, { .children_offset=0, .match_offset=131140 }, { .children_offset=52880, .match_offset=33239 }, { .children_offset=0, .match_offset=34908 }, { .children_offset=0, .match_offset=123489 }, { .children_offset=0, .match_offset=55757 }, { .children_offset=52882, .match_offset=64304 }, { .children_offset=0, .match_offset=129413 }, { .children_offset=0, .match_offset=87983 }, { .children_offset=52884, .match_offset=57765 }, { .children_offset=0, .match_offset=42318 }, { .children_offset=0, .match_offset=62322 }, { .children_offset=0, .match_offset=38143 }, { .children_offset=0, .match_offset=123122 }, { .children_offset=0, .match_offset=124648 }, { .children_offset=0, .match_offset=38573 }, { .children_offset=52889, .match_offset=133679 }, { .children_offset=0, .match_offset=84766 }, { .children_offset=0, .match_offset=27769 }, { .children_offset=0, .match_offset=74159 }, { .children_offset=52891, .match_offset=0 }, { .children_offset=52893, .match_offset=0 }, { .children_offset=52895, .match_offset=0 }, { .children_offset=52897, .match_offset=0 }, { .children_offset=52899, .match_offset=0 }, { .children_offset=52901, .match_offset=0 }, { .children_offset=52903, .match_offset=0 }, { .children_offset=52905, .match_offset=0 }, { .children_offset=52907, .match_offset=0 }, { .children_offset=52909, .match_offset=0 }, { .children_offset=0, .match_offset=22310 }, { .children_offset=52911, .match_offset=0 }, { .children_offset=52913, .match_offset=0 }, { .children_offset=0, .match_offset=44931 }, { .children_offset=0, .match_offset=6655 }, { .children_offset=0, .match_offset=86086 }, { .children_offset=52915, .match_offset=0 }, { .children_offset=52920, .match_offset=132932 }, { .children_offset=0, .match_offset=20463 }, { .children_offset=0, .match_offset=133262 }, { .children_offset=52922, .match_offset=89664 }, { .children_offset=0, .match_offset=46832 }, { .children_offset=52924, .match_offset=34377 }, { .children_offset=0, .match_offset=42320 }, { .children_offset=52926, .match_offset=123330 }, { .children_offset=52933, .match_offset=58267 }, { .children_offset=0, .match_offset=64495 }, { .children_offset=0, .match_offset=54010 }, { .children_offset=0, .match_offset=29895 }, { .children_offset=52935, .match_offset=68779 }, { .children_offset=0, .match_offset=123710 }, { .children_offset=0, .match_offset=12351 }, { .children_offset=0, .match_offset=62375 }, { .children_offset=52937, .match_offset=0 }, { .children_offset=52956, .match_offset=0 }, { .children_offset=52959, .match_offset=0 }, { .children_offset=0, .match_offset=113449 }, { .children_offset=52969, .match_offset=115592 }, { .children_offset=0, .match_offset=5946 }, { .children_offset=0, .match_offset=28243 }, { .children_offset=0, .match_offset=40424 }, { .children_offset=0, .match_offset=65741 }, { .children_offset=52974, .match_offset=55800 }, { .children_offset=0, .match_offset=28730 }, { .children_offset=0, .match_offset=80484 }, { .children_offset=52977, .match_offset=33485 }, { .children_offset=0, .match_offset=109096 }, { .children_offset=52979, .match_offset=33 }, { .children_offset=0, .match_offset=40878 }, { .children_offset=0, .match_offset=62666 }, { .children_offset=0, .match_offset=131374 }, { .children_offset=0, .match_offset=62577 }, { .children_offset=0, .match_offset=59037 }, { .children_offset=52981, .match_offset=0 }, { .children_offset=0, .match_offset=30373 }, { .children_offset=0, .match_offset=58473 }, { .children_offset=0, .match_offset=24304 }, { .children_offset=0, .match_offset=33855 }, { .children_offset=0, .match_offset=109475 }, { .children_offset=52989, .match_offset=1082 }, { .children_offset=0, .match_offset=116212 }, { .children_offset=0, .match_offset=72159 }, { .children_offset=0, .match_offset=41937 }, { .children_offset=0, .match_offset=125024 }, { .children_offset=0, .match_offset=45868 }, { .children_offset=0, .match_offset=113426 }, { .children_offset=0, .match_offset=131719 }, { .children_offset=0, .match_offset=89194 }, { .children_offset=0, .match_offset=110991 }, { .children_offset=52999, .match_offset=85442 }, { .children_offset=0, .match_offset=38457 }, { .children_offset=0, .match_offset=53584 }, { .children_offset=0, .match_offset=114035 }, { .children_offset=0, .match_offset=117548 }, { .children_offset=0, .match_offset=77284 }, { .children_offset=0, .match_offset=30510 }, { .children_offset=0, .match_offset=67326 }, { .children_offset=0, .match_offset=81166 }, { .children_offset=53008, .match_offset=74626 }, { .children_offset=0, .match_offset=7057 }, { .children_offset=0, .match_offset=81839 }, { .children_offset=53026, .match_offset=0 }, { .children_offset=53028, .match_offset=0 }, { .children_offset=53030, .match_offset=0 }, { .children_offset=0, .match_offset=55382 }, { .children_offset=53032, .match_offset=0 }, { .children_offset=0, .match_offset=65302 }, { .children_offset=0, .match_offset=26041 }, { .children_offset=0, .match_offset=46618 }, { .children_offset=53034, .match_offset=6572 }, { .children_offset=0, .match_offset=12525 }, { .children_offset=0, .match_offset=6763 }, { .children_offset=53036, .match_offset=0 }, { .children_offset=0, .match_offset=16323 }, { .children_offset=53038, .match_offset=0 }, { .children_offset=53040, .match_offset=0 }, { .children_offset=53042, .match_offset=0 }, { .children_offset=53044, .match_offset=0 }, { .children_offset=53046, .match_offset=0 }, { .children_offset=53048, .match_offset=0 }, { .children_offset=0, .match_offset=126445 }, { .children_offset=0, .match_offset=67417 }, { .children_offset=53050, .match_offset=0 }, { .children_offset=53052, .match_offset=0 }, { .children_offset=0, .match_offset=22205 }, { .children_offset=53054, .match_offset=0 }, { .children_offset=0, .match_offset=88623 }, { .children_offset=53057, .match_offset=0 }, { .children_offset=0, .match_offset=11330 }, { .children_offset=53059, .match_offset=66543 }, { .children_offset=0, .match_offset=65827 }, { .children_offset=53061, .match_offset=0 }, { .children_offset=53063, .match_offset=0 }, { .children_offset=53065, .match_offset=0 }, { .children_offset=53067, .match_offset=0 }, { .children_offset=53069, .match_offset=0 }, { .children_offset=0, .match_offset=80492 }, { .children_offset=0, .match_offset=80226 }, { .children_offset=53071, .match_offset=0 }, { .children_offset=53074, .match_offset=0 }, { .children_offset=53076, .match_offset=72096 }, { .children_offset=53078, .match_offset=0 }, { .children_offset=53080, .match_offset=0 }, { .children_offset=53082, .match_offset=0 }, { .children_offset=53084, .match_offset=0 }, { .children_offset=0, .match_offset=61239 }, { .children_offset=0, .match_offset=74302 }, { .children_offset=53086, .match_offset=0 }, { .children_offset=53089, .match_offset=0 }, { .children_offset=53091, .match_offset=0 }, { .children_offset=53093, .match_offset=0 }, { .children_offset=0, .match_offset=113072 }, { .children_offset=0, .match_offset=50694 }, { .children_offset=53095, .match_offset=0 }, { .children_offset=53097, .match_offset=0 }, { .children_offset=0, .match_offset=132475 }, { .children_offset=53099, .match_offset=125587 }, { .children_offset=0, .match_offset=60789 }, { .children_offset=53110, .match_offset=0 }, { .children_offset=53112, .match_offset=0 }, { .children_offset=0, .match_offset=130055 }, { .children_offset=53114, .match_offset=5081 }, { .children_offset=53116, .match_offset=0 }, { .children_offset=53118, .match_offset=0 }, { .children_offset=0, .match_offset=21404 }, { .children_offset=53120, .match_offset=0 }, { .children_offset=53122, .match_offset=0 }, { .children_offset=53125, .match_offset=0 }, { .children_offset=0, .match_offset=53490 }, { .children_offset=53127, .match_offset=0 }, { .children_offset=0, .match_offset=58498 }, { .children_offset=0, .match_offset=129906 }, { .children_offset=0, .match_offset=30512 }, { .children_offset=53129, .match_offset=0 }, { .children_offset=53131, .match_offset=28979 }, { .children_offset=53133, .match_offset=0 }, { .children_offset=53135, .match_offset=0 }, { .children_offset=53137, .match_offset=0 }, { .children_offset=53139, .match_offset=0 }, { .children_offset=53141, .match_offset=0 }, { .children_offset=53143, .match_offset=0 }, { .children_offset=53145, .match_offset=0 }, { .children_offset=53147, .match_offset=0 }, { .children_offset=53149, .match_offset=0 }, { .children_offset=0, .match_offset=37591 }, { .children_offset=53151, .match_offset=0 }, { .children_offset=0, .match_offset=84798 }, { .children_offset=53153, .match_offset=0 }, { .children_offset=0, .match_offset=59104 }, { .children_offset=0, .match_offset=39072 }, { .children_offset=53155, .match_offset=0 }, { .children_offset=0, .match_offset=62313 }, { .children_offset=53157, .match_offset=67572 }, { .children_offset=53166, .match_offset=122436 }, { .children_offset=0, .match_offset=131439 }, { .children_offset=53174, .match_offset=0 }, { .children_offset=0, .match_offset=85454 }, { .children_offset=0, .match_offset=30768 }, { .children_offset=0, .match_offset=68843 }, { .children_offset=0, .match_offset=5338 }, { .children_offset=0, .match_offset=44731 }, { .children_offset=53176, .match_offset=0 }, { .children_offset=53178, .match_offset=0 }, { .children_offset=0, .match_offset=55765 }, { .children_offset=53180, .match_offset=0 }, { .children_offset=0, .match_offset=87466 }, { .children_offset=53182, .match_offset=130244 }, { .children_offset=0, .match_offset=133672 }, { .children_offset=0, .match_offset=68451 }, { .children_offset=0, .match_offset=109404 }, { .children_offset=0, .match_offset=110522 }, { .children_offset=53187, .match_offset=109487 }, { .children_offset=0, .match_offset=115490 }, { .children_offset=53190, .match_offset=0 }, { .children_offset=53192, .match_offset=0 }, { .children_offset=53194, .match_offset=0 }, { .children_offset=0, .match_offset=43347 }, { .children_offset=53196, .match_offset=62688 }, { .children_offset=0, .match_offset=134851 }, { .children_offset=0, .match_offset=78961 }, { .children_offset=0, .match_offset=26773 }, { .children_offset=0, .match_offset=26027 }, { .children_offset=0, .match_offset=113817 }, { .children_offset=53202, .match_offset=16099 }, { .children_offset=53208, .match_offset=26196 }, { .children_offset=0, .match_offset=26818 }, { .children_offset=0, .match_offset=104473 }, { .children_offset=0, .match_offset=109463 }, { .children_offset=53211, .match_offset=68783 }, { .children_offset=0, .match_offset=14352 }, { .children_offset=0, .match_offset=133014 }, { .children_offset=0, .match_offset=121850 }, { .children_offset=53213, .match_offset=0 }, { .children_offset=0, .match_offset=58548 }, { .children_offset=0, .match_offset=111437 }, { .children_offset=53216, .match_offset=28109 }, { .children_offset=0, .match_offset=70927 }, { .children_offset=53221, .match_offset=7106 }, { .children_offset=0, .match_offset=81152 }, { .children_offset=0, .match_offset=112703 }, { .children_offset=0, .match_offset=71813 }, { .children_offset=53223, .match_offset=30631 }, { .children_offset=0, .match_offset=32767 }, { .children_offset=0, .match_offset=65367 }, { .children_offset=53236, .match_offset=0 }, { .children_offset=0, .match_offset=78994 }, { .children_offset=53238, .match_offset=8620 }, { .children_offset=0, .match_offset=54478 }, { .children_offset=0, .match_offset=45313 }, { .children_offset=53241, .match_offset=124618 }, { .children_offset=53244, .match_offset=0 }, { .children_offset=53246, .match_offset=0 }, { .children_offset=53248, .match_offset=0 }, { .children_offset=0, .match_offset=113290 }, { .children_offset=53250, .match_offset=0 }, { .children_offset=53252, .match_offset=0 }, { .children_offset=0, .match_offset=117615 }, { .children_offset=53254, .match_offset=0 }, { .children_offset=53256, .match_offset=0 }, { .children_offset=0, .match_offset=13549 }, { .children_offset=53258, .match_offset=0 }, { .children_offset=53260, .match_offset=0 }, { .children_offset=0, .match_offset=34678 }, { .children_offset=53262, .match_offset=87310 }, { .children_offset=53264, .match_offset=0 }, { .children_offset=53266, .match_offset=0 }, { .children_offset=53268, .match_offset=0 }, { .children_offset=53270, .match_offset=0 }, { .children_offset=53272, .match_offset=0 }, { .children_offset=53274, .match_offset=0 }, { .children_offset=53276, .match_offset=0 }, { .children_offset=53278, .match_offset=0 }, { .children_offset=0, .match_offset=63206 }, { .children_offset=53280, .match_offset=0 }, { .children_offset=53282, .match_offset=0 }, { .children_offset=0, .match_offset=63694 }, { .children_offset=0, .match_offset=80480 }, { .children_offset=0, .match_offset=62708 }, { .children_offset=53284, .match_offset=0 }, { .children_offset=0, .match_offset=5256 }, { .children_offset=53286, .match_offset=0 }, { .children_offset=0, .match_offset=58511 }, { .children_offset=53288, .match_offset=0 }, { .children_offset=53290, .match_offset=86927 }, { .children_offset=53292, .match_offset=0 }, { .children_offset=0, .match_offset=6889 }, { .children_offset=53294, .match_offset=130151 }, { .children_offset=0, .match_offset=136189 }, { .children_offset=53301, .match_offset=0 }, { .children_offset=53303, .match_offset=0 }, { .children_offset=53305, .match_offset=0 }, { .children_offset=0, .match_offset=68894 }, { .children_offset=0, .match_offset=109091 }, { .children_offset=53307, .match_offset=57 }, { .children_offset=0, .match_offset=29840 }, { .children_offset=0, .match_offset=68499 }, { .children_offset=0, .match_offset=40440 }, { .children_offset=53309, .match_offset=0 }, { .children_offset=53311, .match_offset=0 }, { .children_offset=53313, .match_offset=0 }, { .children_offset=53315, .match_offset=0 }, { .children_offset=0, .match_offset=45957 }, { .children_offset=53317, .match_offset=0 }, { .children_offset=0, .match_offset=71906 }, { .children_offset=53319, .match_offset=0 }, { .children_offset=0, .match_offset=22780 }, { .children_offset=53323, .match_offset=0 }, { .children_offset=0, .match_offset=90104 }, { .children_offset=53325, .match_offset=0 }, { .children_offset=0, .match_offset=42387 }, { .children_offset=53327, .match_offset=28073 }, { .children_offset=0, .match_offset=5297 }, { .children_offset=53336, .match_offset=0 }, { .children_offset=53338, .match_offset=0 }, { .children_offset=0, .match_offset=125322 }, { .children_offset=0, .match_offset=74673 }, { .children_offset=53340, .match_offset=102725 }, { .children_offset=0, .match_offset=123126 }, { .children_offset=0, .match_offset=15481 }, { .children_offset=0, .match_offset=108115 }, { .children_offset=53343, .match_offset=113087 }, { .children_offset=0, .match_offset=132174 }, { .children_offset=0, .match_offset=135080 }, { .children_offset=0, .match_offset=135932 }, { .children_offset=53345, .match_offset=0 }, { .children_offset=53349, .match_offset=43331 }, { .children_offset=53351, .match_offset=0 }, { .children_offset=53353, .match_offset=0 }, { .children_offset=53355, .match_offset=0 }, { .children_offset=53357, .match_offset=0 }, { .children_offset=0, .match_offset=28232 }, { .children_offset=0, .match_offset=134335 }, { .children_offset=53359, .match_offset=0 }, { .children_offset=0, .match_offset=57181 }, { .children_offset=53361, .match_offset=129291 }, { .children_offset=53367, .match_offset=0 }, { .children_offset=53369, .match_offset=0 }, { .children_offset=0, .match_offset=27047 }, { .children_offset=0, .match_offset=22312 }, { .children_offset=53371, .match_offset=118654 }, { .children_offset=0, .match_offset=53575 }, { .children_offset=0, .match_offset=30980 }, { .children_offset=0, .match_offset=1869 }, { .children_offset=53373, .match_offset=0 }, { .children_offset=53381, .match_offset=109383 }, { .children_offset=0, .match_offset=25922 }, { .children_offset=0, .match_offset=34946 }, { .children_offset=0, .match_offset=34904 }, { .children_offset=0, .match_offset=27996 }, { .children_offset=53386, .match_offset=55274 }, { .children_offset=0, .match_offset=103781 }, { .children_offset=0, .match_offset=129922 }, { .children_offset=0, .match_offset=12417 }, { .children_offset=53390, .match_offset=115726 }, { .children_offset=53395, .match_offset=71999 }, { .children_offset=0, .match_offset=103061 }, { .children_offset=0, .match_offset=72091 }, { .children_offset=0, .match_offset=100900 }, { .children_offset=0, .match_offset=38721 }, { .children_offset=0, .match_offset=41779 }, { .children_offset=0, .match_offset=135894 }, { .children_offset=53399, .match_offset=60747 }, { .children_offset=0, .match_offset=116974 }, { .children_offset=0, .match_offset=13853 }, { .children_offset=53402, .match_offset=0 }, { .children_offset=0, .match_offset=74364 }, { .children_offset=53405, .match_offset=0 }, { .children_offset=0, .match_offset=22220 }, { .children_offset=53407, .match_offset=9897 }, { .children_offset=0, .match_offset=115764 }, { .children_offset=53411, .match_offset=49716 }, { .children_offset=0, .match_offset=12021 }, { .children_offset=0, .match_offset=124552 }, { .children_offset=53413, .match_offset=39032 }, { .children_offset=0, .match_offset=42218 }, { .children_offset=0, .match_offset=62018 }, { .children_offset=53419, .match_offset=63837 }, { .children_offset=0, .match_offset=28571 }, { .children_offset=0, .match_offset=132815 }, { .children_offset=0, .match_offset=5350 } }; // }}} static const uint32_t children_array[53421] = { // {{{ 0, 29, 301, 6449, 7228, 15713, 655970, 1023075, 1827940, 2313061, 2567014, 2783847, 3019880, 3302249, 3821418, 3893867, 4129644, 4516461, 4938350, 5404271, 5587056, 6054513, 6115186, 6515059, 7339636, 7816053, 7966070, 8132215, 8248184, 8288121, 8388474, 6, 609, 867, 2148, 3179, 4976, 6005, 1, 1128, 1, 1377, 2, 1644, 1906, 1, 2426, 1, 2677, 1, 2916, 1, 3432, 1, 3705, 2, 3945, 4469, 1, 4204, 1, 4708, 1, 5224, 1, 5490, 1, 5749, 1, 6253, 2, 6709, 6966, 6, 7523, 8296, 9836, 10606, 11376, 14196, 1, 7786, 1, 8043, 1, 8545, 1, 8814, 1, 9063, 1, 9333, 1, 9580, 1, 10095, 1, 10359, 1, 10863, 1, 11118, 2, 11628, 12658, 1, 11873, 1, 12142, 1, 12389, 1, 12905, 1, 13174, 1, 13409, 1, 13684, 1, 13925, 1, 14433, 1, 14702, 1, 14951, 1, 15221, 1, 15476, 36, 15916, 16173, 18736, 52529, 86578, 117811, 151348, 199477, 224310, 239671, 246840, 249441, 268898, 306275, 331364, 343653, 356966, 367463, 374632, 378729, 387691, 394092, 423533, 436078, 491887, 493936, 517489, 520818, 569459, 602228, 620661, 638838, 646775, 650104, 650617, 655482, 7, 16433, 16690, 16947, 17253, 17775, 18037, 18295, 1, 17525, 1, 18543, 10, 18992, 22321, 25906, 29235, 32564, 37173, 39990, 43575, 46392, 49209, 9, 19249, 19506, 19763, 20020, 20277, 20790, 21559, 21816, 22073, 1, 20577, 2, 21089, 21346, 10, 22576, 23089, 23346, 23603, 23860, 24373, 24630, 24887, 25400, 25657, 1, 22881, 1, 24161, 1, 25185, 10, 26160, 26417, 26674, 26931, 27188, 27445, 27702, 28215, 28472, 28985, 1, 28001, 1, 28770, 10, 29488, 29745, 30002, 30515, 30772, 31029, 31286, 31543, 31800, 32057, 1, 30305, 1, 32353, 10, 32816, 33329, 33842, 34355, 34868, 35125, 35638, 36407, 36664, 36921, 1, 33121, 1, 33633, 1, 34145, 1, 34657, 1, 35425, 2, 35937, 36194, 10, 37424, 37681, 37938, 38195, 38452, 38709, 38966, 39223, 39480, 39737, 10, 40240, 40497, 40754, 41011, 41268, 41525, 41782, 42807, 43064, 43321, 3, 42081, 42338, 42595, 10, 43824, 44081, 44338, 44595, 44852, 45109, 45366, 45623, 45880, 46137, 10, 46640, 46897, 47154, 47411, 47668, 47925, 48182, 48439, 48696, 48953, 10, 49456, 49713, 49970, 50227, 50484, 50741, 50998, 51255, 51768, 52281, 1, 51553, 1, 52065, 10, 52784, 59441, 63026, 66355, 69684, 72501, 75318, 78135, 80952, 83769, 10, 53040, 54577, 55090, 55603, 55860, 56885, 57654, 57911, 58936, 59193, 2, 53293, 54369, 1, 53553, 1, 53808, 1, 54066, 1, 54881, 1, 55393, 3, 56161, 56418, 56675, 2, 57185, 57442, 3, 58209, 58466, 58723, 10, 59696, 60465, 60722, 60979, 61236, 61493, 62006, 62263, 62520, 62777, 2, 60001, 60258, 1, 61793, 10, 63280, 63793, 64050, 64307, 64564, 64821, 65334, 65591, 65848, 66105, 1, 63586, 1, 65121, 10, 66608, 66865, 67378, 67635, 67892, 68149, 68662, 68919, 69176, 69433, 1, 67171, 1, 68449, 10, 69936, 70193, 70450, 70707, 70964, 71221, 71478, 71735, 71992, 72249, 10, 72752, 73009, 73266, 73523, 73780, 74037, 74294, 74551, 74808, 75065, 10, 75568, 75825, 76082, 76339, 76596, 76853, 77110, 77367, 77624, 77881, 10, 78384, 78641, 78898, 79155, 79412, 79669, 79926, 80183, 80440, 80697, 10, 81200, 81457, 81714, 81971, 82228, 82485, 82742, 82999, 83256, 83513, 10, 84016, 84273, 84530, 84787, 85044, 85301, 85558, 85815, 86072, 86329, 10, 86832, 90673, 94002, 97075, 99892, 102709, 105526, 108599, 111416, 114489, 10, 87088, 87345, 87602, 88371, 88628, 88885, 89142, 89399, 89912, 90169, 2, 87905, 88162, 1, 89697, 1, 90465, 10, 90928, 91185, 91442, 91699, 91956, 92213, 92726, 93239, 93496, 93753, 1, 92513, 1, 93025, 10, 94256, 94513, 94770, 95027, 95284, 95541, 95798, 96055, 96568, 96825, 1, 96353, 10, 97328, 97585, 97842, 98099, 98356, 98613, 98870, 99127, 99384, 99641, 10, 100144, 100401, 100658, 100915, 101172, 101429, 101686, 101943, 102200, 102457, 10, 102960, 103217, 103474, 103731, 103988, 104245, 104502, 104759, 105016, 105273, 10, 105776, 106033, 106290, 106547, 106804, 107061, 107318, 107575, 108088, 108345, 1, 107873, 10, 108848, 109105, 109362, 109619, 109876, 110133, 110390, 110647, 110904, 111161, 10, 111664, 111921, 112178, 112435, 112692, 112949, 113206, 113463, 113720, 113977, 1, 114273, 10, 114736, 114993, 115250, 115507, 115764, 116277, 116534, 116791, 117048, 117305, 1, 116065, 1, 117601, 10, 118064, 121649, 125234, 128307, 132660, 135477, 138550, 141879, 144952, 148537, 10, 118320, 118577, 118834, 119091, 119348, 119605, 119862, 120119, 120376, 120633, 3, 120929, 121186, 121443, 10, 121904, 122161, 122418, 122675, 123700, 123957, 124214, 124471, 124728, 124985, 3, 122977, 123234, 123491, 10, 125488, 125745, 126002, 126259, 126516, 126773, 127030, 127287, 127544, 127801, 1, 128097, 10, 128560, 128817, 129074, 130099, 130356, 130613, 130870, 131895, 132152, 132409, 3, 129377, 129634, 129891, 3, 131169, 131426, 131683, 10, 132912, 133169, 133426, 133683, 133940, 134197, 134454, 134711, 134968, 135225, 10, 135728, 135985, 136242, 136499, 136756, 137013, 137270, 137527, 137784, 138041, 1, 138337, 10, 138800, 139057, 139314, 139571, 139828, 140341, 140598, 140855, 141112, 141625, 1, 140129, 1, 141409, 10, 142128, 142385, 142898, 143155, 143412, 143669, 143926, 144183, 144440, 144697, 1, 142689, 10, 145200, 145457, 145970, 146227, 146740, 146997, 147254, 147767, 148024, 148281, 1, 145761, 1, 146529, 1, 147553, 10, 148784, 149041, 149298, 149555, 149812, 150069, 150326, 150583, 150840, 151097, 10, 151600, 164657, 176946, 179763, 182580, 185397, 188726, 191543, 194360, 197177, 10, 151856, 153137, 154418, 155699, 156980, 158261, 159542, 160823, 162104, 163385, 1, 152109, 1, 152438, 1, 152673, 1, 152947, 1, 153389, 1, 153718, 1, 153953, 1, 154227, 1, 154669, 1, 154998, 1, 155233, 1, 155507, 1, 155949, 1, 156278, 1, 156513, 1, 156787, 1, 157229, 1, 157558, 1, 157793, 1, 158067, 1, 158509, 1, 158838, 1, 159073, 1, 159347, 1, 159789, 1, 160118, 1, 160353, 1, 160627, 1, 161069, 1, 161398, 1, 161633, 1, 161907, 1, 162349, 1, 162678, 1, 162913, 1, 163187, 1, 163629, 1, 163958, 1, 164193, 1, 164467, 10, 164912, 166449, 167730, 169011, 170292, 171573, 172854, 174135, 175416, 176697, 2, 165165, 166241, 1, 165494, 1, 165729, 1, 166003, 1, 166701, 1, 167030, 1, 167265, 1, 167539, 1, 167981, 1, 168310, 1, 168545, 1, 168819, 1, 169261, 1, 169590, 1, 169825, 1, 170099, 1, 170541, 1, 170870, 1, 171105, 1, 171379, 1, 171821, 1, 172150, 1, 172385, 1, 172659, 1, 173101, 1, 173430, 1, 173665, 1, 173939, 1, 174381, 1, 174710, 1, 174945, 1, 175219, 1, 175661, 1, 175990, 1, 176225, 1, 176499, 10, 177200, 177457, 177714, 177971, 178228, 178485, 178742, 178999, 179256, 179513, 10, 180016, 180273, 180530, 180787, 181044, 181301, 181558, 181815, 182072, 182329, 10, 182832, 183089, 183346, 183603, 183860, 184117, 184374, 184631, 184888, 185145, 10, 185648, 186161, 186418, 186675, 186932, 187189, 187446, 187703, 188216, 188473, 1, 185953, 1, 188001, 10, 188976, 189233, 189490, 189747, 190004, 190261, 190518, 190775, 191032, 191289, 10, 191792, 192049, 192306, 192563, 192820, 193077, 193334, 193591, 193848, 194105, 10, 194608, 194865, 195122, 195379, 195636, 195893, 196150, 196407, 196664, 196921, 8, 197424, 197681, 197938, 198195, 198452, 198709, 198966, 199223, 10, 199728, 202289, 205106, 207923, 210484, 212533, 215094, 216887, 219704, 222521, 9, 199985, 200242, 200499, 200756, 201013, 201270, 201527, 201784, 202041, 10, 202544, 202801, 203058, 203315, 203572, 203829, 204086, 204343, 204600, 204857, 10, 205360, 205617, 205874, 206131, 206388, 206645, 206902, 207159, 207416, 207673, 9, 208176, 208433, 208690, 208948, 209205, 209462, 209719, 209976, 210233, 7, 210736, 210993, 211250, 211509, 211767, 212024, 212281, 9, 212784, 213041, 213298, 213555, 213812, 214069, 214326, 214583, 214841, 6, 215347, 215604, 215861, 216118, 216376, 216633, 10, 217136, 217393, 217650, 217907, 218164, 218421, 218678, 218935, 219192, 219449, 10, 219952, 220209, 220466, 220723, 220980, 221237, 221494, 221751, 222008, 222265, 6, 222769, 223026, 223284, 223541, 223798, 224056, 7, 224560, 226865, 229682, 232243, 233268, 235573, 238134, 8, 224816, 225073, 225330, 225587, 225844, 226102, 226360, 226617, 10, 227120, 227377, 227634, 227891, 228148, 228405, 228662, 228919, 229176, 229433, 9, 229936, 230193, 230450, 230707, 230964, 231222, 231479, 231736, 231993, 3, 232500, 232759, 233016, 8, 233520, 233778, 234035, 234292, 234549, 234806, 235064, 235321, 9, 235825, 236082, 236339, 236596, 236853, 237110, 237367, 237624, 237881, 5, 238384, 238641, 238898, 239155, 239412, 4, 239920, 243761, 245810, 246323, 9, 240177, 240434, 240691, 240948, 241205, 241462, 241719, 241976, 242233, 1, 242477, 4, 242738, 242995, 243252, 243510, 7, 244016, 244273, 244530, 244787, 245044, 245301, 245559, 1, 246070, 1, 246578, 1, 247088, 8, 247344, 247601, 247858, 248115, 248372, 248629, 248886, 249143, 14, 249648, 259682, 261475, 262505, 262762, 263019, 263277, 263534, 264047, 264306, 264821, 265079, 265337, 267130, 4, 249904, 252977, 255794, 258611, 9, 250161, 250418, 250675, 250932, 251189, 251446, 251703, 252472, 252729, 2, 252001, 252258, 10, 253232, 253489, 253746, 254003, 254260, 254517, 254774, 255031, 255288, 255545, 10, 256048, 256305, 256562, 256819, 257076, 257333, 257590, 257847, 258104, 258361, 3, 258864, 259121, 259378, 1, 259937, 1, 260193, 1, 260454, 1, 260713, 1, 260972, 1, 261225, 1, 261749, 1, 262004, 1, 262245, 1, 263783, 1, 264565, 2, 265569, 266601, 1, 265838, 1, 266094, 1, 266337, 1, 266862, 1, 267368, 1, 267617, 1, 267873, 1, 268139, 1, 268395, 1, 268661, 10, 269104, 289585, 294706, 295009, 297058, 299627, 301423, 302194, 303221, 305017, 9, 269360, 271921, 273458, 277299, 279092, 281397, 283958, 285751, 287800, 9, 269617, 269874, 270131, 270388, 270645, 270902, 271159, 271416, 271673, 5, 272176, 272433, 272691, 272950, 273207, 9, 273712, 273969, 274738, 275507, 276020, 276278, 276535, 276792, 277049, 2, 274278, 274541, 2, 275046, 275309, 1, 275821, 6, 277552, 277809, 278068, 278327, 278584, 278841, 8, 279344, 279601, 279860, 280117, 280374, 280631, 280888, 281145, 9, 281648, 281905, 282163, 282420, 282677, 282934, 283191, 283448, 283705, 6, 284208, 284465, 284725, 284982, 285239, 285497, 7, 286000, 286259, 286516, 286774, 287031, 287288, 287545, 6, 288048, 288305, 288562, 288821, 289078, 289335, 7, 289841, 290354, 291379, 292406, 292919, 293432, 294201, 1, 290104, 3, 290608, 290866, 291123, 1, 291633, 2, 291937, 292194, 1, 292660, 1, 293169, 2, 293680, 293944, 1, 294449, 2, 295267, 296038, 1, 295541, 1, 295795, 1, 296297, 1, 296556, 1, 296809, 1, 297330, 1, 297573, 1, 297846, 1, 298089, 1, 298337, 1, 298612, 1, 298857, 1, 299119, 1, 299374, 1, 299880, 1, 300129, 1, 300403, 1, 300649, 1, 300897, 1, 301166, 1, 301686, 1, 301925, 1, 302437, 1, 302710, 1, 302949, 1, 303470, 1, 303716, 1, 303969, 1, 304238, 1, 304483, 1, 304741, 1, 305267, 1, 305517, 1, 305761, 1, 306028, 10, 306529, 307811, 317284, 317541, 317801, 318571, 320882, 322932, 325749, 331129, 1, 306788, 1, 307045, 1, 307309, 1, 307577, 3, 308069, 311663, 314997, 2, 308334, 311152, 1, 308596, 1, 308781, 1, 309107, 1, 309364, 1, 309601, 1, 309859, 1, 310115, 1, 310369, 1, 310644, 1, 310895, 1, 311412, 2, 311917, 314229, 1, 312173, 1, 312431, 1, 312676, 1, 312929, 1, 313204, 1, 313449, 1, 313711, 1, 313966, 1, 314478, 1, 314740, 1, 315245, 1, 315509, 1, 315756, 1, 316001, 1, 316276, 1, 316521, 1, 316783, 1, 317038, 1, 318066, 1, 318307, 1, 318830, 1, 319087, 1, 319351, 1, 319596, 1, 319845, 1, 320100, 1, 320359, 1, 320613, 1, 321135, 1, 321392, 1, 321640, 1, 321903, 1, 322158, 1, 322409, 1, 322659, 2, 323177, 324469, 1, 323446, 1, 323681, 1, 323956, 1, 324197, 1, 324705, 1, 324972, 1, 325228, 1, 325497, 1, 326004, 1, 326245, 1, 326445, 2, 326759, 329581, 1, 327026, 1, 327265, 1, 327542, 1, 327781, 1, 327981, 1, 328289, 1, 328547, 1, 328821, 1, 329076, 1, 329317, 1, 329825, 1, 330083, 1, 330354, 1, 330607, 1, 330862, 10, 331617, 332132, 334437, 334952, 336489, 336748, 337517, 340335, 340597, 341366, 1, 331883, 2, 332385, 332914, 1, 332651, 1, 333157, 1, 333427, 1, 333683, 1, 333925, 1, 334180, 1, 334695, 1, 335205, 1, 335475, 1, 335721, 1, 335990, 1, 336229, 1, 336993, 1, 337261, 2, 337765, 338793, 1, 338036, 1, 338287, 1, 338547, 1, 339059, 1, 339315, 1, 339561, 1, 339823, 1, 340078, 1, 340844, 1, 341108, 1, 341601, 1, 341870, 2, 342115, 342644, 1, 342373, 1, 342881, 1, 343143, 1, 343397, 11, 343906, 344164, 346213, 347751, 348779, 349036, 351598, 352114, 353139, 355444, 355705, 1, 344417, 1, 344621, 1, 344944, 1, 345193, 1, 345452, 1, 345708, 1, 345953, 1, 346489, 1, 346721, 1, 346990, 1, 347246, 1, 347489, 1, 348005, 1, 348257, 1, 348526, 2, 349281, 351081, 1, 349485, 1, 349808, 1, 350057, 1, 350316, 1, 350572, 1, 350817, 1, 351335, 1, 351847, 1, 352361, 1, 352609, 1, 352876, 1, 353379, 1, 353653, 1, 353900, 1, 354145, 1, 354416, 1, 354665, 1, 354933, 1, 355187, 1, 355937, 1, 356206, 1, 356462, 1, 356705, 6, 357222, 360039, 361327, 364402, 365683, 366708, 2, 357481, 358002, 1, 357752, 1, 358249, 1, 358499, 1, 358753, 1, 359028, 1, 359273, 1, 359535, 1, 359790, 1, 360296, 1, 360545, 1, 360814, 1, 361065, 1, 361586, 1, 361829, 1, 362093, 1, 362341, 1, 362606, 1, 362868, 1, 363113, 1, 363375, 1, 363630, 1, 363877, 1, 364132, 1, 364649, 1, 364899, 1, 365153, 1, 365422, 1, 365921, 1, 366177, 1, 366449, 1, 366949, 1, 367218, 6, 367713, 368997, 369255, 372079, 372850, 373877, 1, 367977, 1, 368238, 1, 368499, 1, 368756, 1, 369522, 1, 369761, 1, 370038, 1, 370273, 1, 370548, 2, 370789, 371305, 1, 371044, 1, 371567, 1, 371822, 1, 372327, 1, 372585, 1, 373089, 1, 373366, 1, 373605, 1, 374126, 1, 374375, 4, 374881, 376936, 377199, 377715, 3, 375140, 375399, 376430, 1, 375655, 1, 375905, 1, 376178, 1, 376679, 1, 377453, 2, 377953, 378212, 1, 378465, 9, 378980, 379240, 380267, 381292, 381806, 382578, 384116, 384886, 386425, 1, 379510, 1, 379765, 1, 380019, 1, 380513, 1, 380786, 1, 381025, 1, 381549, 2, 382062, 382325, 1, 382832, 1, 383084, 1, 383329, 1, 383598, 1, 383845, 1, 384367, 1, 384622, 2, 385121, 385385, 1, 385644, 1, 385897, 1, 386155, 1, 386657, 1, 386926, 1, 387182, 1, 387425, 5, 387937, 388706, 389480, 391027, 391540, 1, 388210, 1, 388449, 1, 388961, 1, 389234, 1, 389741, 1, 389993, 1, 390253, 1, 390505, 1, 390755, 1, 391265, 1, 391785, 1, 392037, 1, 392307, 1, 392549, 1, 392812, 1, 393075, 1, 393323, 1, 393569, 1, 393826, 15, 394285, 396129, 398690, 400227, 402277, 405606, 406119, 406889, 409195, 410732, 413549, 414576, 417652, 421493, 422006, 1, 394604, 1, 394849, 1, 395115, 1, 395381, 1, 395630, 1, 395873, 5, 396390, 396654, 396912, 397426, 397945, 1, 397160, 1, 397677, 1, 398184, 1, 398437, 1, 398945, 1, 399214, 1, 399465, 1, 399713, 1, 399982, 1, 400488, 1, 400741, 1, 401005, 1, 401257, 1, 401507, 1, 401761, 1, 402028, 4, 402534, 403565, 404592, 405109, 1, 402803, 1, 403065, 1, 403309, 1, 403810, 1, 404073, 1, 404323, 1, 404840, 1, 405364, 1, 405857, 1, 406377, 1, 406650, 3, 407141, 407654, 408167, 1, 407406, 1, 407925, 1, 408430, 1, 408677, 1, 408932, 1, 409441, 1, 409708, 1, 409961, 1, 410157, 1, 410418, 3, 410977, 412009, 413295, 1, 411240, 1, 411503, 1, 411765, 1, 412257, 1, 412526, 1, 412771, 1, 413029, 1, 413807, 1, 414067, 1, 414324, 2, 414817, 417128, 1, 415088, 1, 415346, 1, 415585, 2, 415841, 416622, 1, 416110, 1, 416353, 1, 416865, 1, 417377, 2, 417889, 418149, 1, 418418, 1, 418670, 1, 418913, 1, 419188, 2, 419429, 419689, 3, 419950, 420463, 420982, 1, 420199, 1, 420718, 1, 421221, 1, 421741, 1, 422245, 1, 422511, 1, 422764, 1, 423009, 1, 423282, 6, 423777, 427106, 429157, 430959, 431984, 435061, 3, 424035, 424556, 426866, 1, 424306, 1, 424807, 1, 425057, 1, 425325, 1, 425569, 1, 425844, 1, 426089, 1, 426351, 1, 426606, 2, 427361, 427637, 1, 427884, 1, 428129, 1, 428398, 1, 428643, 1, 428901, 1, 429426, 1, 429673, 1, 429923, 1, 430177, 2, 430446, 430707, 1, 431221, 1, 431470, 1, 431732, 3, 432229, 433768, 434803, 1, 432498, 1, 432755, 1, 432993, 1, 433262, 1, 433508, 1, 434031, 1, 434290, 1, 434529, 1, 435308, 1, 435557, 1, 435828, 15, 436269, 437601, 441699, 443492, 446567, 461672, 462185, 463210, 463723, 464238, 468079, 468336, 469107, 470388, 488565, 1, 436590, 1, 436841, 1, 437107, 1, 437350, 2, 437872, 438132, 2, 438383, 439666, 1, 438636, 1, 438889, 1, 439137, 1, 439406, 1, 439913, 1, 440163, 1, 440424, 1, 440681, 1, 440947, 1, 441197, 1, 441441, 2, 441960, 442735, 1, 442223, 1, 442482, 1, 442994, 1, 443233, 4, 443745, 444772, 445043, 446326, 2, 444014, 444528, 1, 444260, 1, 445292, 1, 445551, 1, 445808, 1, 446053, 8, 446821, 447851, 449900, 451949, 455026, 456563, 458357, 460666, 3, 447076, 447340, 447602, 2, 448097, 448360, 1, 448609, 1, 448878, 1, 449131, 1, 449384, 1, 449653, 2, 450149, 450665, 1, 450404, 1, 450915, 1, 451169, 1, 451438, 1, 451681, 1, 452211, 1, 452452, 1, 452705, 8, 452961, 453218, 453475, 453732, 453989, 454246, 454503, 454760, 2, 455284, 456313, 1, 455542, 1, 455778, 1, 456036, 2, 456816, 457332, 1, 457064, 1, 457586, 1, 457839, 1, 458093, 2, 458601, 459884, 1, 458867, 1, 459112, 1, 459365, 1, 459620, 1, 460129, 1, 460402, 1, 460897, 1, 461170, 1, 461426, 1, 461941, 1, 462445, 1, 462689, 1, 462956, 1, 463465, 1, 463976, 3, 464481, 465263, 467061, 1, 464737, 1, 465013, 1, 465524, 1, 465761, 1, 466036, 1, 466281, 1, 466543, 1, 466798, 1, 467305, 1, 467572, 1, 467833, 1, 468581, 1, 468833, 2, 469352, 469877, 1, 469605, 1, 470138, 3, 470625, 472933, 473961, 1, 470898, 1, 471143, 1, 471407, 1, 471661, 1, 471925, 1, 472171, 1, 472424, 1, 472673, 1, 473198, 1, 473454, 1, 473697, 5, 474211, 478566, 479851, 483181, 485746, 1, 474476, 1, 474735, 1, 474979, 1, 475243, 1, 475511, 1, 475753, 1, 476019, 1, 476261, 1, 476461, 1, 476786, 1, 477039, 1, 477300, 1, 477537, 1, 477812, 1, 478053, 1, 478308, 1, 478831, 1, 479086, 1, 479337, 1, 479585, 1, 480101, 1, 480366, 1, 480623, 2, 480875, 482669, 1, 481145, 1, 481388, 1, 481641, 1, 481907, 1, 482157, 1, 482401, 1, 482913, 1, 483439, 1, 483694, 2, 483945, 484985, 1, 484193, 1, 484468, 1, 484709, 1, 485165, 1, 485426, 1, 485989, 1, 486259, 1, 486516, 1, 486770, 1, 487017, 1, 487267, 1, 487540, 1, 487785, 1, 488047, 1, 488302, 2, 488804, 490099, 1, 489057, 1, 489332, 1, 489588, 1, 489825, 1, 490358, 1, 490593, 1, 490866, 1, 491105, 1, 491385, 1, 491617, 4, 492135, 492912, 493426, 493685, 1, 492399, 1, 492654, 1, 493158, 8, 494177, 496485, 497257, 498028, 499311, 506992, 516210, 516981, 3, 494433, 495203, 495986, 1, 494708, 1, 494959, 1, 495465, 1, 495730, 1, 496244, 1, 496755, 1, 497007, 2, 497508, 497774, 2, 498281, 498543, 1, 498805, 1, 499054, 4, 499556, 501612, 502643, 505460, 1, 499813, 2, 500082, 500856, 1, 500333, 1, 500577, 1, 501097, 1, 501345, 1, 501868, 1, 502127, 1, 502382, 1, 502900, 1, 503154, 1, 503407, 2, 503654, 504688, 1, 503919, 2, 504169, 504435, 1, 504936, 1, 505189, 1, 505704, 1, 505957, 2, 506221, 506739, 1, 506465, 2, 507244, 511858, 3, 507493, 507753, 509561, 1, 508003, 1, 508257, 1, 508532, 1, 508777, 1, 509039, 1, 509294, 1, 509798, 1, 510069, 1, 510318, 1, 510563, 1, 510836, 1, 511081, 1, 511343, 1, 511598, 1, 512111, 2, 512353, 513656, 1, 512611, 1, 512872, 1, 513125, 1, 513395, 2, 513893, 514409, 1, 514161, 1, 514669, 1, 514913, 1, 515188, 1, 515429, 1, 515692, 1, 515961, 1, 516457, 1, 516716, 1, 517230, 1, 517749, 1, 517985, 2, 518246, 519794, 1, 518511, 1, 518770, 1, 519028, 1, 519273, 1, 519539, 1, 520041, 1, 520309, 1, 520563, 16, 521005, 524129, 530787, 532580, 536677, 537447, 541801, 544363, 546924, 547949, 550511, 555120, 557170, 562803, 564596, 568437, 1, 521330, 2, 521569, 523637, 1, 521832, 2, 522085, 522861, 1, 522341, 1, 522605, 1, 523105, 1, 523374, 1, 523874, 4, 524386, 527204, 527461, 529773, 1, 524649, 2, 524897, 525411, 1, 525166, 1, 525613, 1, 525929, 1, 526190, 1, 526436, 1, 526697, 1, 526947, 1, 527713, 2, 527917, 529509, 4, 528225, 528485, 529001, 529269, 1, 528751, 1, 530017, 1, 530281, 1, 530531, 1, 531048, 1, 531297, 1, 531561, 2, 531811, 532079, 1, 532334, 1, 532840, 1, 533089, 2, 533347, 534902, 1, 533601, 1, 533870, 1, 534116, 1, 534386, 1, 534625, 1, 535145, 1, 535411, 1, 535649, 1, 535922, 1, 536167, 1, 536417, 1, 536944, 1, 537185, 2, 537705, 537967, 3, 538222, 538483, 540788, 1, 538745, 1, 538990, 1, 539252, 1, 539496, 1, 539749, 1, 540020, 1, 540271, 1, 540526, 1, 541029, 1, 541298, 1, 541545, 3, 542053, 542574, 543091, 1, 542323, 1, 542823, 1, 543348, 1, 543589, 1, 543858, 1, 544097, 2, 544609, 545908, 2, 544865, 545634, 1, 545134, 1, 545397, 1, 546153, 1, 546411, 1, 546671, 1, 547169, 1, 547445, 1, 547687, 3, 548197, 549487, 550265, 1, 548462, 1, 548713, 1, 548961, 1, 549230, 1, 549749, 1, 550002, 1, 550773, 3, 551022, 553586, 554099, 1, 551268, 1, 551469, 1, 551792, 1, 552050, 1, 552303, 1, 552550, 1, 552809, 1, 553068, 1, 553317, 1, 553825, 1, 554345, 1, 554606, 1, 554855, 1, 555365, 1, 555623, 1, 555879, 1, 556137, 1, 556385, 1, 556660, 1, 556911, 3, 557409, 557929, 559471, 1, 557689, 1, 558198, 2, 558437, 558697, 1, 558958, 1, 559207, 1, 559735, 3, 559917, 561256, 562547, 1, 560244, 1, 560481, 1, 560745, 1, 561004, 1, 561509, 1, 561761, 1, 562020, 1, 562291, 1, 563045, 2, 563310, 564079, 1, 563561, 1, 563811, 1, 564339, 3, 564833, 565609, 568179, 1, 565090, 1, 565349, 2, 565859, 567667, 1, 566133, 1, 566380, 1, 566625, 1, 566900, 1, 567141, 1, 567396, 1, 567924, 1, 568680, 1, 568949, 1, 569185, 10, 569645, 571233, 572259, 574568, 576873, 579952, 583027, 588148, 597625, 601978, 1, 569971, 1, 570209, 1, 570474, 1, 570724, 1, 570977, 2, 571500, 572020, 1, 571698, 2, 572517, 574322, 1, 572782, 2, 573028, 574068, 1, 573289, 1, 573550, 1, 573799, 5, 574770, 575027, 575289, 575589, 576103, 1, 575859, 1, 576353, 1, 576610, 1, 577121, 1, 577325, 1, 577633, 1, 577909, 1, 578163, 1, 578420, 1, 578674, 1, 578913, 1, 579180, 1, 579433, 1, 579681, 2, 580197, 580713, 1, 580466, 1, 580978, 1, 581217, 1, 581492, 2, 581733, 582249, 1, 581988, 1, 582511, 1, 582766, 4, 583265, 584549, 586089, 586873, 1, 583532, 1, 583788, 1, 584033, 1, 584301, 1, 584818, 1, 585076, 1, 585321, 1, 585583, 1, 585838, 1, 586343, 1, 586606, 1, 587122, 1, 587369, 1, 587617, 1, 587886, 3, 588389, 590959, 592754, 1, 588658, 1, 588905, 1, 589171, 3, 589411, 590187, 590701, 1, 589685, 1, 589939, 1, 590451, 1, 591214, 1, 591465, 1, 591731, 1, 591976, 1, 592229, 1, 592484, 2, 592993, 593775, 1, 593253, 1, 593505, 2, 594028, 595822, 1, 594287, 1, 594535, 1, 594793, 1, 595043, 1, 595297, 1, 595564, 1, 596079, 1, 596333, 1, 596585, 1, 596835, 1, 597089, 1, 597356, 2, 597869, 601205, 1, 598128, 2, 598373, 598900, 1, 598641, 1, 599151, 1, 599412, 1, 599657, 1, 599907, 1, 600161, 1, 600428, 1, 600684, 1, 600953, 1, 601458, 1, 601697, 6, 602472, 610153, 613229, 614254, 615023, 615540, 3, 602669, 605025, 608876, 1, 602996, 1, 603240, 1, 603489, 1, 603756, 1, 604001, 1, 604276, 1, 604520, 1, 604769, 2, 605296, 606834, 1, 605537, 1, 605811, 1, 606051, 1, 606305, 1, 606574, 1, 607094, 1, 607329, 1, 607606, 1, 607845, 1, 608100, 1, 608361, 1, 608611, 1, 609125, 1, 609396, 1, 609641, 1, 609891, 4, 610411, 611692, 612469, 612729, 1, 610674, 1, 610913, 1, 611181, 1, 611425, 1, 611940, 1, 612197, 1, 612961, 1, 613473, 1, 613729, 1, 614005, 1, 614497, 1, 614760, 1, 615277, 4, 615777, 617317, 618856, 620137, 2, 616035, 617067, 1, 616296, 1, 616549, 1, 616804, 1, 617582, 1, 617844, 1, 618089, 1, 618351, 1, 618606, 1, 619105, 1, 619363, 1, 619617, 1, 619886, 1, 620387, 9, 620898, 622693, 622951, 626285, 626798, 627314, 632435, 633716, 637561, 1, 621157, 1, 621426, 1, 621671, 1, 621929, 1, 622190, 1, 622437, 2, 623213, 625525, 1, 623461, 1, 623726, 1, 623988, 1, 624225, 1, 624500, 1, 624745, 1, 625007, 1, 625262, 1, 625779, 1, 626036, 1, 626540, 1, 627054, 2, 627553, 630377, 1, 627821, 1, 628065, 1, 628346, 1, 628580, 1, 628833, 1, 629089, 2, 629293, 629864, 1, 629554, 1, 630113, 1, 630640, 1, 630889, 1, 631143, 1, 631405, 1, 631653, 1, 631918, 1, 632180, 1, 632692, 1, 632946, 1, 633185, 1, 633452, 2, 633967, 636789, 1, 634221, 2, 634465, 635503, 1, 634740, 1, 634981, 1, 635236, 1, 635746, 1, 636009, 1, 636268, 1, 636517, 1, 637037, 1, 637294, 1, 637793, 1, 638062, 1, 638318, 1, 638561, 3, 639073, 643173, 645487, 2, 639335, 640619, 1, 639602, 1, 639841, 1, 640104, 1, 640353, 1, 640882, 1, 641121, 1, 641384, 1, 641633, 1, 641907, 1, 642145, 1, 642414, 1, 642681, 1, 642913, 2, 643442, 644467, 1, 643681, 1, 643943, 1, 644197, 1, 644724, 1, 644961, 1, 645230, 1, 645731, 1, 645985, 1, 646244, 1, 646511, 4, 647009, 647523, 649061, 649321, 1, 647289, 1, 647791, 1, 648046, 1, 648297, 1, 648558, 1, 648820, 1, 649582, 1, 649844, 1, 650341, 5, 650849, 652130, 652389, 652905, 655214, 2, 651112, 651374, 1, 651630, 1, 651873, 1, 652658, 1, 653166, 1, 653357, 1, 653668, 1, 653921, 1, 654188, 1, 654437, 1, 654708, 1, 654952, 1, 655733, 27, 656172, 656432, 682033, 703282, 718643, 719457, 784226, 794723, 796516, 797541, 831846, 832360, 839017, 885098, 886635, 888172, 914286, 915055, 948080, 949361, 949618, 979059, 985973, 1011319, 1012600, 1013113, 1021562, 10, 656688, 659505, 662322, 665139, 667700, 670517, 673334, 676151, 678968, 681273, 9, 656945, 657202, 657459, 657716, 657973, 658486, 658743, 659000, 659257, 1, 658273, 10, 659760, 660017, 660274, 660531, 660788, 661045, 661302, 661559, 661816, 662073, 10, 662576, 662833, 663090, 663347, 663604, 663861, 664118, 664375, 664632, 664889, 9, 665392, 665649, 665906, 666163, 666420, 666678, 666935, 667192, 667449, 10, 667952, 668209, 668466, 668723, 668980, 669237, 669494, 669751, 670008, 670265, 10, 670768, 671025, 671282, 671539, 671796, 672053, 672310, 672567, 672824, 673081, 10, 673584, 673841, 674098, 674355, 674612, 674869, 675126, 675383, 675640, 675897, 10, 676400, 676657, 676914, 677171, 677428, 677685, 677942, 678199, 678456, 678713, 8, 679216, 679473, 679730, 679987, 680245, 680502, 680759, 681017, 2, 681520, 681777, 9, 682288, 687154, 689203, 690740, 692277, 695094, 697911, 700472, 702521, 8, 682544, 682802, 683060, 683317, 684086, 684855, 685624, 686393, 2, 683622, 683885, 2, 684390, 684653, 2, 685158, 685421, 2, 685926, 686189, 2, 686694, 686957, 7, 687408, 687665, 687922, 688179, 688437, 688695, 688952, 5, 689456, 689713, 689970, 690227, 690485, 5, 690992, 691249, 691506, 691765, 692022, 10, 692528, 692785, 693042, 693299, 693556, 693813, 694070, 694327, 694584, 694841, 10, 695344, 695601, 695858, 696115, 696372, 696629, 696886, 697143, 697400, 697657, 9, 698160, 698417, 698674, 698931, 699188, 699446, 699703, 699960, 700217, 7, 700720, 700977, 701234, 701491, 701748, 702005, 702265, 2, 702768, 703025, 6, 703536, 706353, 709170, 711475, 713268, 715829, 10, 703792, 704049, 704306, 704563, 704820, 705077, 705334, 705591, 705848, 706105, 10, 706608, 706865, 707122, 707379, 707636, 707893, 708150, 708407, 708664, 708921, 8, 709424, 709681, 709938, 710197, 710454, 710711, 710968, 711225, 6, 711728, 711985, 712242, 712499, 712756, 713014, 9, 713520, 713777, 714034, 714291, 714549, 714806, 715063, 715320, 715577, 10, 716080, 716337, 716594, 716851, 717108, 717365, 717622, 717879, 718136, 718393, 1, 718896, 1, 719157, 18, 719661, 720225, 721506, 722019, 735588, 738151, 741992, 745577, 747628, 755565, 757358, 762480, 762738, 772211, 778100, 782453, 782712, 782969, 1, 719922, 1, 720498, 1, 720741, 1, 721010, 1, 721269, 1, 721785, 3, 722283, 733807, 734324, 6, 722477, 724323, 725349, 727144, 728176, 729459, 1, 722804, 1, 723049, 1, 723308, 1, 723572, 1, 723813, 1, 724068, 1, 724591, 1, 724846, 1, 725095, 1, 725616, 1, 725875, 1, 726121, 1, 726380, 1, 726639, 1, 726894, 1, 727393, 1, 727662, 1, 727908, 1, 728434, 1, 728681, 1, 728941, 1, 729189, 3, 729705, 730732, 732784, 1, 729965, 1, 730213, 1, 730481, 1, 730977, 2, 731246, 732275, 1, 731508, 1, 731749, 1, 732004, 1, 732520, 1, 733025, 1, 733283, 1, 733541, 1, 734062, 1, 734578, 1, 734825, 1, 735073, 1, 735342, 2, 735847, 736621, 1, 736101, 1, 736370, 1, 736873, 1, 737134, 1, 737396, 1, 737647, 1, 737902, 6, 738355, 738657, 738917, 739431, 740467, 740725, 1, 739180, 1, 739681, 1, 739943, 1, 740197, 1, 740965, 1, 741236, 1, 741492, 1, 741733, 3, 742241, 743017, 745332, 1, 742514, 1, 742706, 1, 743282, 1, 743527, 1, 743791, 1, 744045, 1, 744309, 1, 744555, 1, 744808, 1, 745057, 2, 745837, 746610, 1, 746081, 1, 746345, 1, 746859, 1, 747105, 1, 747374, 5, 747873, 748388, 748649, 749932, 754805, 1, 748135, 1, 748910, 1, 749157, 1, 749427, 1, 749669, 3, 750181, 750703, 753520, 1, 750452, 2, 750959, 753268, 1, 751214, 1, 751405, 1, 751731, 1, 751984, 1, 752239, 1, 752491, 1, 752741, 1, 752996, 1, 753775, 1, 754025, 1, 754286, 1, 754548, 1, 755044, 1, 755297, 2, 755810, 756853, 1, 756079, 1, 756335, 1, 756595, 1, 757101, 7, 757554, 757857, 758628, 759655, 759914, 760427, 761716, 1, 758126, 1, 758369, 1, 758881, 1, 759143, 1, 759397, 1, 760175, 1, 760686, 1, 760943, 1, 761204, 1, 761445, 1, 761967, 1, 762211, 8, 762977, 763490, 764265, 766060, 767602, 769907, 770166, 770935, 1, 763186, 1, 763749, 1, 764018, 1, 764537, 1, 764783, 1, 765039, 1, 765299, 1, 765537, 1, 765806, 2, 766309, 766825, 1, 766585, 1, 767086, 1, 767333, 2, 767845, 769129, 3, 768100, 768357, 768619, 1, 768872, 1, 769381, 1, 769650, 1, 770405, 1, 770661, 1, 771173, 1, 771428, 1, 771687, 1, 771941, 4, 772453, 774760, 775787, 777587, 2, 772706, 773740, 1, 772961, 1, 773228, 1, 773484, 1, 773993, 1, 774254, 1, 774501, 1, 775019, 1, 775273, 1, 775538, 1, 776037, 1, 776308, 1, 776546, 1, 776801, 1, 777068, 1, 777324, 1, 777825, 3, 778337, 778856, 781428, 1, 778603, 2, 779105, 780660, 1, 779373, 1, 779617, 1, 779891, 1, 780129, 1, 780404, 1, 780917, 1, 781154, 1, 781669, 1, 781938, 1, 782201, 1, 783201, 1, 783470, 1, 783726, 1, 783969, 7, 784481, 785765, 786793, 788847, 789874, 791413, 793721, 4, 784737, 785008, 785268, 785528, 3, 786021, 786288, 786552, 4, 787045, 788080, 788340, 788600, 3, 787312, 787572, 787832, 3, 789104, 789364, 789624, 1, 790123, 1, 790388, 1, 790626, 1, 790898, 1, 791147, 5, 791663, 792432, 792690, 793204, 793464, 2, 791920, 792184, 1, 792952, 3, 793968, 794228, 794488, 3, 794977, 795503, 796281, 1, 795236, 1, 795758, 1, 796007, 1, 796785, 1, 797045, 1, 797295, 19, 797793, 802915, 804196, 804453, 807014, 808039, 810344, 811881, 812652, 815981, 817262, 820591, 821360, 822130, 826227, 827252, 829046, 830584, 830841, 7, 798051, 798564, 799085, 799854, 800114, 801140, 802166, 1, 798312, 1, 798835, 1, 799333, 1, 799588, 1, 800356, 1, 800613, 1, 800868, 1, 801385, 1, 801646, 1, 801895, 1, 802405, 1, 802674, 1, 803169, 1, 803445, 1, 803699, 1, 803941, 3, 804712, 805746, 806004, 1, 804969, 1, 805238, 1, 805477, 2, 806241, 806508, 1, 806757, 1, 807279, 1, 807538, 1, 807781, 1, 808297, 1, 808558, 1, 808814, 2, 809061, 809577, 1, 809330, 1, 809838, 1, 810087, 2, 810597, 811113, 1, 810856, 1, 811374, 1, 811620, 1, 812148, 1, 812392, 4, 812903, 814188, 815215, 815732, 1, 813172, 1, 813416, 1, 813679, 1, 813938, 1, 814440, 1, 814703, 1, 814960, 1, 815479, 1, 816240, 1, 816500, 1, 816761, 1, 817014, 4, 817508, 818023, 819060, 819578, 1, 817765, 1, 818273, 1, 818540, 1, 818793, 1, 819311, 1, 819813, 1, 820078, 1, 820325, 1, 820850, 1, 821091, 1, 821619, 1, 821865, 3, 822370, 823147, 824430, 1, 822629, 1, 822898, 1, 823393, 1, 823662, 1, 823905, 1, 824174, 1, 824687, 1, 824949, 1, 825196, 1, 825452, 1, 825705, 1, 825971, 1, 826473, 1, 826724, 1, 826981, 3, 827489, 827752, 828023, 1, 828261, 1, 828517, 1, 828782, 1, 829285, 1, 829554, 1, 829793, 1, 830055, 1, 830309, 1, 831097, 1, 831329, 1, 831596, 1, 832114, 5, 832609, 836965, 837993, 838255, 838773, 4, 832865, 833129, 834669, 834932, 1, 833387, 1, 833651, 1, 833909, 1, 834155, 1, 834409, 1, 835188, 1, 835433, 1, 835696, 1, 835954, 1, 836207, 1, 836460, 1, 836725, 2, 837221, 837492, 1, 837736, 1, 838511, 14, 839266, 841315, 844388, 845925, 846951, 861547, 862572, 866926, 871791, 873584, 873842, 876403, 881780, 884856, 1, 839532, 1, 839781, 1, 839981, 1, 840291, 1, 840562, 1, 840805, 1, 841061, 2, 841573, 842361, 1, 841840, 1, 842099, 1, 842595, 1, 842860, 2, 843109, 843625, 1, 843379, 1, 843891, 1, 844148, 1, 844645, 1, 844910, 1, 845172, 1, 845409, 1, 845676, 3, 846192, 846452, 846712, 7, 847203, 849263, 852595, 854644, 858229, 859510, 860279, 3, 847457, 847977, 848757, 1, 847728, 1, 848242, 1, 848483, 1, 849008, 3, 849508, 850288, 851316, 1, 849775, 1, 850036, 1, 850540, 1, 850805, 1, 851059, 1, 851561, 1, 851821, 1, 852069, 1, 852339, 2, 852849, 853876, 1, 853091, 1, 853365, 1, 853616, 1, 854113, 1, 854386, 1, 854898, 1, 855145, 1, 855393, 1, 855662, 1, 855911, 1, 856172, 1, 856421, 2, 856676, 857717, 1, 856943, 1, 857207, 1, 857454, 1, 857968, 1, 858480, 1, 858732, 1, 858997, 1, 859251, 1, 859749, 1, 860005, 1, 860517, 1, 860772, 1, 861031, 1, 861285, 1, 861801, 1, 862062, 1, 862313, 2, 862817, 864108, 1, 863074, 1, 863337, 1, 863585, 1, 863852, 2, 864357, 864873, 1, 864612, 2, 865121, 866159, 1, 865394, 1, 865636, 1, 865907, 1, 866414, 1, 866675, 3, 867169, 867940, 869231, 1, 867442, 1, 867705, 2, 868201, 868981, 1, 868462, 1, 868711, 2, 869475, 870774, 1, 869749, 1, 869996, 1, 870241, 1, 870514, 1, 871017, 1, 871276, 1, 871525, 1, 872040, 1, 872289, 1, 872570, 1, 872801, 1, 873074, 1, 873316, 4, 874084, 874343, 874868, 876149, 1, 874593, 1, 875112, 1, 875364, 1, 875617, 1, 875897, 4, 876641, 877157, 878696, 879469, 1, 876904, 1, 877411, 1, 877684, 1, 877929, 1, 878190, 1, 878439, 1, 878959, 1, 879216, 2, 879721, 881013, 1, 879980, 1, 880236, 1, 880481, 1, 880744, 1, 881268, 1, 881512, 4, 882019, 883045, 883305, 884084, 1, 882287, 1, 882537, 1, 882798, 1, 883566, 1, 883815, 1, 884325, 1, 884594, 1, 885345, 1, 885618, 1, 885867, 1, 886113, 1, 886382, 1, 886881, 2, 887085, 887410, 1, 887663, 1, 887927, 6, 888417, 905317, 906601, 907371, 908911, 913781, 3, 888675, 904292, 904814, 1, 888939, 5, 889133, 893286, 894316, 897395, 898932, 2, 889446, 891756, 1, 889701, 1, 889953, 1, 890228, 1, 890472, 1, 890725, 1, 890994, 1, 891237, 1, 891492, 1, 892005, 1, 892276, 1, 892532, 1, 892773, 1, 893042, 1, 893551, 1, 893807, 1, 894068, 2, 894565, 895855, 1, 894836, 1, 895092, 1, 895333, 1, 895602, 1, 896122, 1, 896357, 1, 896622, 1, 896871, 1, 897125, 1, 897649, 1, 897909, 1, 898145, 1, 898418, 1, 898661, 1, 899186, 1, 899433, 1, 899681, 1, 899950, 1, 900199, 1, 900460, 1, 900709, 3, 900964, 901996, 903026, 1, 901231, 1, 901495, 1, 901742, 1, 902245, 1, 902502, 1, 902772, 1, 903273, 1, 903527, 1, 903784, 1, 904052, 1, 904549, 1, 905067, 1, 905582, 1, 905828, 1, 906085, 1, 906340, 1, 906862, 1, 907115, 2, 907569, 908339, 2, 907826, 908084, 1, 908596, 5, 909155, 909678, 910191, 910707, 911735, 1, 909419, 1, 909924, 1, 910436, 1, 910963, 1, 911215, 1, 911469, 2, 911974, 913001, 1, 912233, 1, 912499, 1, 912744, 1, 913262, 1, 913511, 1, 914021, 1, 914543, 1, 914804, 14, 915297, 916324, 916840, 918380, 919149, 919662, 920175, 924016, 925810, 928116, 933493, 936055, 938872, 947577, 2, 915570, 916084, 1, 915812, 1, 916601, 1, 917089, 1, 917353, 1, 917618, 1, 917865, 1, 918115, 2, 918628, 918900, 1, 919394, 1, 919909, 3, 920427, 921965, 923508, 2, 920685, 921715, 1, 920929, 1, 921202, 1, 921451, 1, 922213, 1, 922482, 1, 922721, 1, 922990, 1, 923239, 1, 923763, 2, 924262, 924527, 1, 924781, 1, 925039, 1, 925286, 1, 925551, 2, 926049, 927349, 1, 926328, 1, 926509, 2, 926770, 927027, 1, 927604, 1, 927855, 2, 928360, 928628, 2, 928876, 929391, 1, 929125, 1, 929645, 1, 929837, 2, 930156, 931955, 1, 930409, 1, 930663, 1, 930920, 1, 931188, 1, 931429, 1, 931684, 1, 932200, 1, 932449, 1, 932708, 1, 932965, 1, 933220, 2, 933742, 935025, 1, 933988, 1, 934241, 1, 934514, 1, 934777, 1, 935285, 1, 935525, 1, 935796, 3, 936297, 937068, 938100, 1, 936558, 1, 936807, 1, 937321, 1, 937582, 1, 937831, 1, 938345, 1, 938597, 9, 939106, 939876, 940648, 941417, 942189, 943472, 944500, 945781, 946550, 1, 939375, 1, 939640, 2, 940140, 940402, 2, 940900, 941173, 1, 941678, 1, 941927, 1, 942441, 1, 942702, 1, 942965, 1, 943219, 1, 943724, 1, 943989, 1, 944243, 1, 944745, 1, 945005, 1, 945253, 1, 945523, 2, 946028, 946290, 3, 946792, 947052, 947314, 1, 947827, 1, 948338, 1, 948585, 1, 948845, 1, 949093, 7, 949857, 957028, 957541, 966249, 972655, 977269, 978038, 5, 950115, 951912, 952681, 953963, 954990, 2, 950373, 950635, 1, 950885, 1, 951156, 1, 951397, 1, 951652, 1, 952173, 1, 952425, 2, 952940, 953710, 1, 953196, 1, 953445, 1, 954211, 1, 954469, 1, 954740, 1, 955235, 1, 955496, 2, 955749, 956265, 1, 956019, 1, 956526, 1, 956775, 1, 957281, 2, 957793, 963446, 4, 958052, 958315, 960371, 962932, 1, 958580, 1, 958824, 1, 959090, 1, 959343, 1, 959605, 1, 959847, 1, 960104, 1, 960628, 1, 960813, 1, 961126, 1, 961381, 1, 961637, 1, 961892, 1, 962153, 1, 962414, 1, 962663, 1, 963176, 2, 963685, 965737, 1, 963885, 1, 964205, 1, 964449, 1, 964707, 1, 964978, 1, 965231, 1, 965486, 1, 966003, 5, 966499, 967012, 968037, 969831, 971635, 1, 966763, 2, 967269, 967527, 1, 967781, 1, 968294, 2, 968547, 969587, 1, 968801, 1, 969075, 1, 969317, 1, 970088, 1, 970356, 1, 970606, 1, 970853, 1, 971123, 1, 971379, 1, 971892, 1, 972140, 1, 972389, 6, 972897, 973411, 974699, 975470, 976239, 976759, 1, 973156, 1, 973667, 1, 973935, 1, 974188, 1, 974441, 1, 974949, 1, 975214, 1, 975738, 1, 975973, 1, 976493, 1, 977006, 1, 977523, 1, 977768, 1, 978274, 1, 978529, 1, 978802, 7, 979299, 979812, 980581, 981353, 982123, 983407, 985204, 1, 979570, 1, 980085, 1, 980339, 1, 980845, 1, 981097, 1, 981613, 1, 981861, 2, 982369, 982901, 1, 982573, 1, 983154, 1, 983660, 2, 983906, 984168, 1, 984435, 1, 984693, 1, 984930, 1, 985441, 1, 985714, 18, 986210, 987491, 988516, 988774, 990055, 991592, 992361, 994155, 994668, 998509, 999790, 1000815, 1001840, 1002098, 1004147, 1007476, 1009781, 1011064, 1, 986466, 1, 986732, 1, 986981, 1, 987251, 1, 987755, 1, 988012, 1, 988261, 1, 989030, 1, 989281, 1, 989548, 1, 989807, 1, 990313, 1, 990574, 1, 990821, 1, 991091, 1, 991333, 1, 991849, 1, 992100, 1, 992620, 1, 992868, 1, 993129, 1, 993390, 1, 993639, 1, 993907, 1, 994425, 3, 994914, 995180, 998005, 3, 995429, 995944, 996979, 1, 995700, 1, 996207, 1, 996466, 1, 996718, 1, 997221, 1, 997497, 1, 997733, 1, 998247, 1, 998768, 2, 999013, 999545, 1, 999281, 2, 1000039, 1000302, 1, 1000569, 3, 1001070, 1001328, 1001592, 4, 1002290, 1002610, 1003637, 1003896, 1, 1002857, 1, 1003124, 1, 1003375, 3, 1004393, 1005683, 1006964, 1, 1004654, 1, 1004901, 1, 1005171, 1, 1005427, 1, 1005945, 1, 1006181, 1, 1006450, 1, 1006709, 1, 1007219, 1, 1007732, 2, 1007973, 1009263, 1, 1008242, 1, 1008486, 1, 1008748, 1, 1009017, 1, 1009518, 1, 1010029, 1, 1010281, 1, 1010547, 1, 1010792, 3, 1011553, 1011813, 1012329, 1, 1012069, 1, 1012839, 6, 1013349, 1018480, 1018738, 1019252, 1019512, 1019770, 1, 1013612, 1, 1013871, 1, 1014130, 1, 1014389, 1, 1014643, 1, 1014899, 1, 1015145, 1, 1015393, 1, 1015662, 1, 1015853, 1, 1016181, 1, 1016427, 1, 1016690, 1, 1016929, 1, 1017193, 1, 1017454, 1, 1017705, 1, 1017953, 1, 1018222, 1, 1019000, 1, 1020001, 1, 1020270, 1, 1020532, 1, 1020777, 1, 1021038, 1, 1021285, 2, 1021800, 1022325, 1, 1022057, 1, 1022574, 1, 1022823, 20, 1023276, 1023533, 1027376, 1035617, 1103971, 1114724, 1115493, 1148006, 1148520, 1329257, 1365610, 1366124, 1408365, 1408623, 1738354, 1767539, 1769588, 1770613, 1811319, 1816441, 3, 1023793, 1024307, 1024883, 1, 1024056, 1, 1024569, 1, 1025129, 1, 1025389, 1, 1025648, 1, 1025900, 1, 1026153, 1, 1026406, 1, 1026665, 1, 1026917, 1, 1027172, 3, 1027632, 1030961, 1034034, 9, 1027889, 1028146, 1029171, 1029428, 1029685, 1029942, 1030199, 1030456, 1030713, 3, 1028449, 1028706, 1028963, 10, 1031216, 1031729, 1031986, 1032243, 1032500, 1032757, 1033014, 1033271, 1033528, 1033785, 1, 1031521, 5, 1034288, 1034545, 1034802, 1035059, 1035316, 19, 1035873, 1036898, 1041763, 1043556, 1045349, 1046632, 1046889, 1047147, 1048172, 1052525, 1055598, 1067120, 1080946, 1093235, 1095028, 1096053, 1100662, 1101176, 1101433, 2, 1036137, 1036398, 1, 1036647, 3, 1037154, 1039465, 1040492, 1, 1037409, 1, 1037671, 1, 1037925, 1, 1038125, 1, 1038452, 1, 1038706, 1, 1038949, 1, 1039205, 1, 1039726, 1, 1039973, 1, 1040244, 1, 1040741, 1, 1041015, 1, 1041249, 1, 1041529, 2, 1042036, 1042805, 1, 1042293, 1, 1042547, 1, 1043060, 1, 1043301, 2, 1043809, 1044085, 1, 1044323, 1, 1044581, 1, 1044853, 1, 1045107, 1, 1045619, 1, 1045877, 1, 1046130, 1, 1046369, 2, 1047397, 1047666, 1, 1047905, 5, 1048419, 1050213, 1051500, 1051768, 1052025, 1, 1048693, 1, 1048940, 1, 1049185, 1, 1049460, 1, 1049711, 1, 1049970, 1, 1050478, 1, 1050724, 1, 1050977, 1, 1051250, 1, 1052257, 3, 1052773, 1053806, 1054576, 2, 1053036, 1053298, 1, 1053537, 1, 1054069, 1, 1054307, 1, 1054825, 1, 1055086, 1, 1055335, 8, 1055841, 1057123, 1059684, 1062501, 1062759, 1063022, 1064303, 1064820, 1, 1056100, 1, 1056361, 1, 1056609, 1, 1056878, 1, 1057381, 2, 1057644, 1059442, 1, 1057900, 1, 1058145, 1, 1058420, 1, 1058665, 1, 1058927, 1, 1059182, 3, 1059948, 1060466, 1062265, 1, 1060197, 1, 1060705, 1, 1060962, 1, 1061225, 1, 1061486, 1, 1061732, 1, 1062005, 2, 1063269, 1063791, 1, 1063524, 1, 1064046, 1, 1064549, 1, 1065065, 1, 1065324, 1, 1065580, 1, 1065825, 1, 1066100, 1, 1066345, 1, 1066607, 1, 1066862, 10, 1067361, 1068130, 1069411, 1070692, 1071465, 1076847, 1077104, 1077874, 1079412, 1080437, 1, 1067630, 1, 1067876, 1, 1068402, 1, 1068643, 1, 1068917, 1, 1069168, 2, 1069665, 1070197, 1, 1069936, 1, 1070448, 1, 1070959, 1, 1071220, 1, 1071732, 2, 1071969, 1075829, 1, 1072236, 1, 1072484, 1, 1072745, 1, 1072998, 1, 1073254, 1, 1073509, 1, 1073778, 1, 1074021, 1, 1074286, 1, 1074548, 1, 1074793, 1, 1075041, 1, 1075308, 1, 1075556, 1, 1076076, 1, 1076341, 1, 1076589, 1, 1077349, 1, 1077604, 1, 1078121, 1, 1078371, 1, 1078639, 1, 1078898, 1, 1079150, 1, 1079657, 1, 1079926, 1, 1080165, 1, 1080692, 9, 1081188, 1081701, 1082217, 1083247, 1084784, 1086322, 1088627, 1088884, 1091705, 1, 1081459, 1, 1081972, 2, 1082465, 1082987, 1, 1082734, 2, 1083502, 1083765, 1, 1084019, 1, 1084261, 1, 1084524, 1, 1085029, 1, 1085294, 1, 1085556, 1, 1085810, 1, 1086073, 2, 1086569, 1088111, 2, 1086817, 1087589, 1, 1087079, 1, 1087333, 1, 1087858, 1, 1088372, 2, 1089138, 1090423, 1, 1089385, 1, 1089636, 1, 1089895, 1, 1090149, 1, 1090664, 1, 1090917, 1, 1091173, 1, 1091436, 1, 1091955, 1, 1092212, 1, 1092457, 1, 1092705, 1, 1092974, 2, 1093483, 1094260, 1, 1093733, 1, 1094004, 1, 1094508, 1, 1094757, 1, 1095265, 1, 1095543, 1, 1095777, 4, 1096291, 1097828, 1098348, 1099636, 1, 1096545, 1, 1096819, 1, 1097065, 1, 1097313, 1, 1097582, 1, 1098081, 1, 1098596, 1, 1098866, 1, 1099119, 1, 1099374, 1, 1099881, 1, 1100143, 1, 1100398, 1, 1100901, 3, 1101665, 1102700, 1103726, 1, 1101934, 1, 1102190, 1, 1102433, 1, 1102949, 1, 1103225, 1, 1103475, 6, 1104225, 1106021, 1107304, 1111401, 1112175, 1113461, 3, 1104481, 1104752, 1105266, 1, 1105011, 1, 1105519, 1, 1105774, 2, 1106276, 1107045, 1, 1106537, 1, 1106796, 6, 1107553, 1108069, 1108584, 1110633, 1110895, 1111157, 1, 1107809, 1, 1108325, 5, 1108833, 1109349, 1109865, 1110127, 1110389, 1, 1109089, 1, 1109605, 1, 1111666, 1, 1111907, 1, 1112430, 1, 1112681, 1, 1112942, 1, 1113204, 1, 1113712, 1, 1113971, 1, 1114227, 1, 1114477, 1, 1114991, 1, 1115252, 13, 1115745, 1116515, 1117796, 1119077, 1119849, 1121644, 1125741, 1127022, 1134191, 1143664, 1143922, 1146742, 1147768, 1, 1116012, 1, 1116259, 2, 1116769, 1117285, 1, 1117035, 1, 1117547, 1, 1118057, 1, 1118316, 1, 1118572, 1, 1118817, 2, 1119330, 1119606, 2, 1120108, 1121138, 1, 1120361, 1, 1120622, 1, 1120871, 1, 1121396, 3, 1121893, 1123955, 1124980, 1, 1122146, 1, 1122418, 1, 1122657, 1, 1122932, 1, 1123177, 1, 1123439, 1, 1123694, 1, 1124201, 1, 1124469, 1, 1124723, 1, 1125225, 1, 1125475, 1, 1126000, 1, 1126260, 1, 1126521, 1, 1126774, 1, 1127284, 3, 1127525, 1128818, 1132917, 1, 1127794, 1, 1128036, 1, 1128303, 1, 1128564, 2, 1129057, 1131365, 1, 1129324, 1, 1129577, 1, 1129850, 1, 1130081, 1, 1130356, 1, 1130601, 1, 1130863, 1, 1131118, 2, 1131620, 1131884, 1, 1132137, 1, 1132398, 1, 1132645, 1, 1133170, 1, 1133417, 1, 1133665, 1, 1133932, 1, 1134446, 1, 1134695, 1, 1134947, 1, 1135208, 1, 1135465, 1, 1135717, 1, 1135989, 1, 1136237, 2, 1136483, 1139315, 2, 1136744, 1138281, 1, 1137001, 1, 1137253, 1, 1137525, 1, 1137763, 1, 1138024, 1, 1138533, 1, 1138805, 1, 1139043, 2, 1139561, 1140339, 1, 1139823, 1, 1140083, 1, 1140577, 1, 1140846, 1, 1141095, 2, 1141347, 1142643, 1, 1141609, 1, 1141861, 1, 1142133, 1, 1142371, 1, 1142889, 1, 1143151, 1, 1143411, 2, 1144109, 1144933, 1, 1144439, 1, 1144673, 3, 1145195, 1145453, 1146483, 1, 1145711, 1, 1145966, 1, 1146233, 1, 1146985, 1, 1147252, 1, 1147509, 1, 1148274, 10, 1148769, 1270627, 1271141, 1286760, 1287273, 1308783, 1316722, 1323637, 1326967, 1327737, 12, 1149025, 1149284, 1149801, 1150827, 1151597, 1153646, 1154416, 1155442, 1267316, 1268597, 1268854, 1270392, 1, 1149537, 2, 1150062, 1150578, 1, 1150323, 1, 1151085, 1, 1151329, 2, 1151849, 1153131, 1, 1152108, 2, 1152361, 1152623, 1, 1152878, 1, 1153391, 1, 1153895, 1, 1154149, 1, 1154676, 1, 1154917, 1, 1155186, 3, 1155681, 1266281, 1267060, 1, 1155939, 1, 1156212, 1, 1156453, 1, 1156722, 2, 1156909, 1266035, 1, 1157169, 1, 1157474, 2, 1157681, 1197106, 9, 1157943, 1162296, 1166649, 1171041, 1175394, 1179747, 1184100, 1188453, 1192806, 16, 1158192, 1158449, 1158706, 1158963, 1159220, 1159477, 1159734, 1159991, 1160248, 1160505, 1160801, 1161058, 1161315, 1161572, 1161829, 1162086, 16, 1162544, 1162801, 1163058, 1163315, 1163572, 1163829, 1164086, 1164343, 1164600, 1164857, 1165153, 1165410, 1165667, 1165924, 1166181, 1166438, 16, 1166896, 1167153, 1167410, 1167667, 1167924, 1168181, 1168438, 1168695, 1168952, 1169209, 1169505, 1169762, 1170019, 1170276, 1170533, 1170790, 16, 1171248, 1171505, 1171762, 1172019, 1172276, 1172533, 1172790, 1173047, 1173304, 1173561, 1173857, 1174114, 1174371, 1174628, 1174885, 1175142, 16, 1175600, 1175857, 1176114, 1176371, 1176628, 1176885, 1177142, 1177399, 1177656, 1177913, 1178209, 1178466, 1178723, 1178980, 1179237, 1179494, 16, 1179952, 1180209, 1180466, 1180723, 1180980, 1181237, 1181494, 1181751, 1182008, 1182265, 1182561, 1182818, 1183075, 1183332, 1183589, 1183846, 16, 1184304, 1184561, 1184818, 1185075, 1185332, 1185589, 1185846, 1186103, 1186360, 1186617, 1186913, 1187170, 1187427, 1187684, 1187941, 1188198, 16, 1188656, 1188913, 1189170, 1189427, 1189684, 1189941, 1190198, 1190455, 1190712, 1190969, 1191265, 1191522, 1191779, 1192036, 1192293, 1192550, 16, 1193008, 1193265, 1193522, 1193779, 1194036, 1194293, 1194550, 1194807, 1195064, 1195321, 1195617, 1195874, 1196131, 1196388, 1196645, 1196902, 16, 1197360, 1201713, 1206066, 1210419, 1214772, 1219125, 1223478, 1227831, 1232184, 1236537, 1240929, 1245282, 1249635, 1253988, 1258341, 1262694, 16, 1197616, 1197873, 1198130, 1198387, 1198644, 1198901, 1199158, 1199415, 1199672, 1199929, 1200225, 1200482, 1200739, 1200996, 1201253, 1201510, 16, 1201968, 1202225, 1202482, 1202739, 1202996, 1203253, 1203510, 1203767, 1204024, 1204281, 1204577, 1204834, 1205091, 1205348, 1205605, 1205862, 16, 1206320, 1206577, 1206834, 1207091, 1207348, 1207605, 1207862, 1208119, 1208376, 1208633, 1208929, 1209186, 1209443, 1209700, 1209957, 1210214, 16, 1210672, 1210929, 1211186, 1211443, 1211700, 1211957, 1212214, 1212471, 1212728, 1212985, 1213281, 1213538, 1213795, 1214052, 1214309, 1214566, 16, 1215024, 1215281, 1215538, 1215795, 1216052, 1216309, 1216566, 1216823, 1217080, 1217337, 1217633, 1217890, 1218147, 1218404, 1218661, 1218918, 16, 1219376, 1219633, 1219890, 1220147, 1220404, 1220661, 1220918, 1221175, 1221432, 1221689, 1221985, 1222242, 1222499, 1222756, 1223013, 1223270, 16, 1223728, 1223985, 1224242, 1224499, 1224756, 1225013, 1225270, 1225527, 1225784, 1226041, 1226337, 1226594, 1226851, 1227108, 1227365, 1227622, 16, 1228080, 1228337, 1228594, 1228851, 1229108, 1229365, 1229622, 1229879, 1230136, 1230393, 1230689, 1230946, 1231203, 1231460, 1231717, 1231974, 16, 1232432, 1232689, 1232946, 1233203, 1233460, 1233717, 1233974, 1234231, 1234488, 1234745, 1235041, 1235298, 1235555, 1235812, 1236069, 1236326, 16, 1236784, 1237041, 1237298, 1237555, 1237812, 1238069, 1238326, 1238583, 1238840, 1239097, 1239393, 1239650, 1239907, 1240164, 1240421, 1240678, 16, 1241136, 1241393, 1241650, 1241907, 1242164, 1242421, 1242678, 1242935, 1243192, 1243449, 1243745, 1244002, 1244259, 1244516, 1244773, 1245030, 16, 1245488, 1245745, 1246002, 1246259, 1246516, 1246773, 1247030, 1247287, 1247544, 1247801, 1248097, 1248354, 1248611, 1248868, 1249125, 1249382, 16, 1249840, 1250097, 1250354, 1250611, 1250868, 1251125, 1251382, 1251639, 1251896, 1252153, 1252449, 1252706, 1252963, 1253220, 1253477, 1253734, 16, 1254192, 1254449, 1254706, 1254963, 1255220, 1255477, 1255734, 1255991, 1256248, 1256505, 1256801, 1257058, 1257315, 1257572, 1257829, 1258086, 16, 1258544, 1258801, 1259058, 1259315, 1259572, 1259829, 1260086, 1260343, 1260600, 1260857, 1261153, 1261410, 1261667, 1261924, 1262181, 1262438, 12, 1262896, 1263153, 1263410, 1263667, 1263924, 1264181, 1264438, 1264695, 1264952, 1265209, 1265505, 1265762, 1, 1266543, 1, 1266804, 1, 1267572, 1, 1267809, 1, 1268087, 1, 1268321, 1, 1269097, 1, 1269369, 1, 1269601, 1, 1269870, 1, 1270121, 1, 1270905, 12, 1271395, 1273445, 1276008, 1276265, 1278830, 1279088, 1279345, 1280882, 1283699, 1285236, 1285494, 1286520, 1, 1271659, 2, 1271909, 1272429, 1, 1272178, 1, 1272673, 1, 1272946, 1, 1273195, 4, 1273707, 1274221, 1274482, 1275507, 1, 1273971, 1, 1274729, 1, 1274990, 1, 1275239, 1, 1275749, 2, 1276523, 1278062, 1, 1276776, 2, 1277025, 1277541, 1, 1277294, 1, 1277801, 1, 1278305, 1, 1278576, 1, 1279605, 1, 1279845, 1, 1280114, 1, 1280357, 1, 1280612, 3, 1281135, 1282162, 1283449, 1, 1281387, 1, 1281637, 1, 1281893, 2, 1282409, 1283193, 1, 1282661, 1, 1282931, 2, 1283955, 1284212, 1, 1284462, 1, 1284725, 1, 1284980, 1, 1285746, 1, 1285999, 1, 1286254, 1, 1287009, 9, 1287523, 1288549, 1292907, 1293420, 1295213, 1295726, 1297776, 1299058, 1300340, 1, 1287787, 1, 1288037, 1, 1288302, 1, 1288821, 1, 1289059, 1, 1289320, 1, 1289517, 2, 1289832, 1291115, 1, 1290089, 1, 1290341, 1, 1290613, 1, 1290856, 1, 1291368, 1, 1291625, 1, 1291877, 1, 1292149, 1, 1292395, 1, 1292648, 1, 1293161, 2, 1293668, 1294700, 1, 1293938, 1, 1294181, 1, 1294446, 1, 1294965, 1, 1295461, 3, 1295973, 1296743, 1297007, 1, 1296243, 1, 1296485, 1, 1297263, 1, 1297515, 1, 1298029, 1, 1298293, 1, 1298542, 1, 1298795, 2, 1299301, 1299823, 1, 1299572, 1, 1300078, 1, 1300597, 1, 1300837, 1, 1301109, 1, 1301357, 2, 1301603, 1304435, 2, 1301864, 1303401, 1, 1302121, 1, 1302373, 1, 1302645, 1, 1302883, 1, 1303144, 1, 1303653, 1, 1303925, 1, 1304163, 2, 1304681, 1305459, 1, 1304943, 1, 1305203, 1, 1305697, 1, 1305966, 1, 1306215, 2, 1306467, 1307763, 1, 1306729, 1, 1306981, 1, 1307253, 1, 1307491, 1, 1308009, 1, 1308271, 1, 1308531, 10, 1309025, 1309283, 1310821, 1311083, 1311600, 1313394, 1314675, 1315956, 1316216, 1316473, 1, 1309551, 1, 1309804, 1, 1310049, 1, 1310324, 1, 1310565, 1, 1311333, 1, 1311859, 1, 1312116, 1, 1312361, 1, 1312611, 1, 1312875, 1, 1313139, 1, 1313637, 1, 1313910, 1, 1314157, 1, 1314401, 1, 1314917, 1, 1315183, 1, 1315438, 1, 1315687, 3, 1316969, 1319023, 1321081, 2, 1317235, 1318518, 1, 1317492, 1, 1317741, 1, 1317985, 1, 1318259, 1, 1318761, 3, 1319265, 1319533, 1320046, 1, 1319777, 1, 1320303, 2, 1320558, 1320821, 1, 1321331, 1, 1321569, 1, 1321838, 1, 1322100, 1, 1322344, 1, 1322597, 1, 1322861, 1, 1323125, 1, 1323373, 5, 1323884, 1324399, 1325424, 1325682, 1326712, 1, 1324129, 3, 1324656, 1324916, 1325176, 2, 1325923, 1326456, 1, 1326184, 2, 1327201, 1327478, 4, 1327984, 1328242, 1328756, 1329016, 1, 1328504, 10, 1329509, 1336425, 1336684, 1336941, 1337198, 1339504, 1339762, 1360500, 1363830, 1365368, 4, 1329776, 1330036, 1330293, 1336184, 1, 1330531, 1, 1330733, 3, 1331049, 1332336, 1333619, 1, 1331301, 1, 1331573, 1, 1331822, 1, 1332071, 1, 1332585, 1, 1332837, 1, 1333109, 1, 1333360, 1, 1333875, 1, 1334113, 1, 1334382, 1, 1334631, 1, 1334896, 1, 1335145, 1, 1335397, 1, 1335669, 1, 1335920, 2, 1337445, 1338222, 1, 1337709, 1, 1337953, 1, 1338465, 1, 1338722, 1, 1338977, 1, 1339250, 5, 1340003, 1357157, 1357414, 1358701, 1359475, 3, 1340261, 1340780, 1353589, 1, 1340529, 2, 1341029, 1352809, 6, 1341281, 1344868, 1348973, 1350256, 1351283, 1351540, 1, 1341554, 1, 1341810, 1, 1342063, 1, 1342327, 2, 1342572, 1343602, 1, 1342821, 1, 1343078, 1, 1343348, 1, 1343849, 1, 1344103, 1, 1344360, 1, 1344628, 6, 1345121, 1345891, 1346916, 1347951, 1348466, 1348723, 1, 1345395, 1, 1345652, 1, 1346153, 1, 1346418, 1, 1346659, 1, 1347169, 1, 1347443, 1, 1347688, 1, 1348212, 1, 1349225, 1, 1349486, 1, 1349749, 1, 1350003, 1, 1350508, 1, 1350773, 1, 1351027, 1, 1351785, 1, 1352045, 1, 1352293, 1, 1352563, 1, 1353070, 1, 1353319, 3, 1353836, 1355629, 1356915, 1, 1354081, 2, 1354354, 1354612, 1, 1354857, 1, 1355119, 1, 1355374, 1, 1355878, 1, 1356140, 1, 1356389, 1, 1356664, 1, 1357678, 1, 1357929, 1, 1358190, 1, 1358452, 1, 1358953, 1, 1359204, 1, 1359715, 1, 1359977, 1, 1360242, 3, 1360737, 1362025, 1362297, 1, 1361012, 1, 1361257, 1, 1361519, 1, 1361774, 1, 1362547, 1, 1362787, 1, 1363041, 1, 1363312, 1, 1363557, 1, 1364073, 1, 1364332, 1, 1364585, 1, 1364833, 1, 1365102, 1, 1365867, 5, 1366369, 1372517, 1375081, 1383279, 1400693, 6, 1366633, 1367149, 1368686, 1368944, 1370739, 1372279, 1, 1366893, 1, 1367411, 1, 1367656, 1, 1367909, 1, 1368172, 1, 1368428, 1, 1369200, 2, 1369445, 1369961, 1, 1369714, 1, 1370222, 1, 1370471, 1, 1370995, 1, 1371241, 1, 1371491, 1, 1371745, 1, 1372012, 2, 1372769, 1374054, 2, 1373042, 1373302, 1, 1373541, 1, 1373810, 1, 1374253, 2, 1374513, 1374770, 6, 1375331, 1375846, 1376365, 1378670, 1380976, 1382518, 1, 1375595, 1, 1376102, 2, 1376609, 1377634, 1, 1376867, 1, 1377141, 1, 1377395, 1, 1377897, 1, 1378158, 1, 1378407, 2, 1378919, 1379947, 1, 1379177, 1, 1379438, 1, 1379687, 1, 1380201, 1, 1380462, 1, 1380711, 1, 1381218, 1, 1381487, 1, 1381729, 1, 1382002, 1, 1382244, 1, 1382761, 1, 1383027, 6, 1383523, 1388915, 1397876, 1398901, 1399414, 1400183, 1, 1383787, 1, 1384055, 1, 1384297, 1, 1384563, 1, 1384805, 1, 1385059, 1, 1385327, 1, 1385582, 1, 1385844, 1, 1386095, 1, 1386357, 1, 1386610, 1, 1386857, 1, 1387118, 1, 1387380, 1, 1387621, 1, 1387879, 1, 1388146, 1, 1388385, 1, 1388652, 3, 1389157, 1396329, 1397109, 4, 1389411, 1394788, 1395054, 1396084, 1, 1389685, 1, 1389938, 1, 1390188, 1, 1390457, 2, 1390692, 1393521, 1, 1390959, 1, 1391221, 1, 1391458, 1, 1391724, 1, 1391973, 1, 1392241, 1, 1392501, 1, 1392751, 1, 1393012, 1, 1393253, 1, 1393781, 1, 1394031, 1, 1394292, 1, 1394533, 1, 1395301, 1, 1395571, 1, 1395827, 1, 1396590, 1, 1396839, 1, 1397362, 1, 1397605, 1, 1398120, 1, 1398373, 1, 1398643, 1, 1399140, 1, 1399653, 1, 1399922, 1, 1400430, 2, 1400930, 1404019, 2, 1401133, 1402995, 1, 1401459, 1, 1401712, 1, 1401967, 1, 1402219, 1, 1402469, 1, 1402724, 1, 1403253, 1, 1403497, 1, 1403764, 1, 1404276, 1, 1404517, 1, 1404786, 1, 1404973, 2, 1405286, 1406569, 1, 1405545, 1, 1405806, 1, 1406049, 1, 1406316, 1, 1406830, 1, 1407081, 1, 1407348, 1, 1407593, 1, 1407841, 1, 1408108, 16, 1408865, 1410403, 1412964, 1413477, 1414246, 1415276, 1419373, 1657710, 1705071, 1707376, 1714546, 1722996, 1723253, 1735542, 1737079, 1738104, 2, 1409139, 1410164, 1, 1409396, 1, 1409637, 1, 1409906, 2, 1410667, 1411951, 1, 1410932, 1, 1411169, 1, 1411433, 1, 1411692, 1, 1412206, 1, 1412469, 1, 1412724, 1, 1413217, 1, 1413742, 1, 1413991, 1, 1414502, 1, 1414761, 1, 1415022, 4, 1415524, 1415788, 1417327, 1418613, 1, 1416041, 1, 1416307, 1, 1416553, 1, 1416815, 1, 1417070, 2, 1417582, 1418354, 1, 1417829, 1, 1418097, 1, 1418861, 1, 1419118, 5, 1419618, 1422949, 1423465, 1424237, 1427056, 1, 1419881, 1, 1420142, 3, 1420385, 1421669, 1422185, 1, 1420660, 1, 1420905, 1, 1421167, 1, 1421422, 1, 1421924, 1, 1422446, 1, 1422695, 1, 1423220, 1, 1423726, 1, 1423975, 3, 1424481, 1424997, 1426543, 1, 1424756, 1, 1425266, 1, 1425507, 1, 1425769, 1, 1426017, 1, 1426284, 1, 1426798, 6, 1427297, 1430630, 1431148, 1436271, 1654130, 1656437, 3, 1427570, 1428083, 1428596, 1, 1427813, 1, 1428339, 1, 1428841, 1, 1429090, 1, 1429353, 1, 1429612, 1, 1429865, 1, 1430132, 1, 1430393, 1, 1430894, 2, 1431397, 1434985, 3, 1431661, 1432692, 1434232, 1, 1431909, 1, 1432174, 1, 1432436, 2, 1432933, 1433449, 1, 1433188, 1, 1433711, 1, 1433966, 1, 1434469, 1, 1434739, 1, 1435233, 1, 1435502, 1, 1435747, 1, 1436005, 2, 1436526, 1652595, 1, 1436773, 1, 1437038, 1, 1437300, 1, 1437485, 8, 1437744, 1465905, 1494322, 1522739, 1551156, 1579573, 1607990, 1636407, 10, 1438000, 1440561, 1443378, 1446195, 1449012, 1451829, 1454646, 1457463, 1460280, 1463097, 9, 1438257, 1438514, 1438771, 1439028, 1439285, 1439542, 1439799, 1440056, 1440313, 10, 1440816, 1441073, 1441330, 1441587, 1441844, 1442101, 1442358, 1442615, 1442872, 1443129, 10, 1443632, 1443889, 1444146, 1444403, 1444660, 1444917, 1445174, 1445431, 1445688, 1445945, 10, 1446448, 1446705, 1446962, 1447219, 1447476, 1447733, 1447990, 1448247, 1448504, 1448761, 10, 1449264, 1449521, 1449778, 1450035, 1450292, 1450549, 1450806, 1451063, 1451320, 1451577, 10, 1452080, 1452337, 1452594, 1452851, 1453108, 1453365, 1453622, 1453879, 1454136, 1454393, 10, 1454896, 1455153, 1455410, 1455667, 1455924, 1456181, 1456438, 1456695, 1456952, 1457209, 10, 1457712, 1457969, 1458226, 1458483, 1458740, 1458997, 1459254, 1459511, 1459768, 1460025, 10, 1460528, 1460785, 1461042, 1461299, 1461556, 1461813, 1462070, 1462327, 1462584, 1462841, 10, 1463344, 1463601, 1463858, 1464115, 1464372, 1464629, 1464886, 1465143, 1465400, 1465657, 10, 1466160, 1468977, 1471794, 1474611, 1477428, 1480245, 1483062, 1485879, 1488696, 1491513, 10, 1466416, 1466673, 1466930, 1467187, 1467444, 1467701, 1467958, 1468215, 1468472, 1468729, 10, 1469232, 1469489, 1469746, 1470003, 1470260, 1470517, 1470774, 1471031, 1471288, 1471545, 10, 1472048, 1472305, 1472562, 1472819, 1473076, 1473333, 1473590, 1473847, 1474104, 1474361, 10, 1474864, 1475121, 1475378, 1475635, 1475892, 1476149, 1476406, 1476663, 1476920, 1477177, 10, 1477680, 1477937, 1478194, 1478451, 1478708, 1478965, 1479222, 1479479, 1479736, 1479993, 10, 1480496, 1480753, 1481010, 1481267, 1481524, 1481781, 1482038, 1482295, 1482552, 1482809, 10, 1483312, 1483569, 1483826, 1484083, 1484340, 1484597, 1484854, 1485111, 1485368, 1485625, 10, 1486128, 1486385, 1486642, 1486899, 1487156, 1487413, 1487670, 1487927, 1488184, 1488441, 10, 1488944, 1489201, 1489458, 1489715, 1489972, 1490229, 1490486, 1490743, 1491000, 1491257, 10, 1491760, 1492017, 1492274, 1492531, 1492788, 1493045, 1493302, 1493559, 1493816, 1494073, 10, 1494576, 1497393, 1500210, 1503027, 1505844, 1508661, 1511478, 1514295, 1517112, 1519929, 10, 1494832, 1495089, 1495346, 1495603, 1495860, 1496117, 1496374, 1496631, 1496888, 1497145, 10, 1497648, 1497905, 1498162, 1498419, 1498676, 1498933, 1499190, 1499447, 1499704, 1499961, 10, 1500464, 1500721, 1500978, 1501235, 1501492, 1501749, 1502006, 1502263, 1502520, 1502777, 10, 1503280, 1503537, 1503794, 1504051, 1504308, 1504565, 1504822, 1505079, 1505336, 1505593, 10, 1506096, 1506353, 1506610, 1506867, 1507124, 1507381, 1507638, 1507895, 1508152, 1508409, 10, 1508912, 1509169, 1509426, 1509683, 1509940, 1510197, 1510454, 1510711, 1510968, 1511225, 10, 1511728, 1511985, 1512242, 1512499, 1512756, 1513013, 1513270, 1513527, 1513784, 1514041, 10, 1514544, 1514801, 1515058, 1515315, 1515572, 1515829, 1516086, 1516343, 1516600, 1516857, 10, 1517360, 1517617, 1517874, 1518131, 1518388, 1518645, 1518902, 1519159, 1519416, 1519673, 10, 1520176, 1520433, 1520690, 1520947, 1521204, 1521461, 1521718, 1521975, 1522232, 1522489, 10, 1522992, 1525809, 1528626, 1531443, 1534260, 1537077, 1539894, 1542711, 1545528, 1548345, 10, 1523248, 1523505, 1523762, 1524019, 1524276, 1524533, 1524790, 1525047, 1525304, 1525561, 10, 1526064, 1526321, 1526578, 1526835, 1527092, 1527349, 1527606, 1527863, 1528120, 1528377, 10, 1528880, 1529137, 1529394, 1529651, 1529908, 1530165, 1530422, 1530679, 1530936, 1531193, 10, 1531696, 1531953, 1532210, 1532467, 1532724, 1532981, 1533238, 1533495, 1533752, 1534009, 10, 1534512, 1534769, 1535026, 1535283, 1535540, 1535797, 1536054, 1536311, 1536568, 1536825, 10, 1537328, 1537585, 1537842, 1538099, 1538356, 1538613, 1538870, 1539127, 1539384, 1539641, 10, 1540144, 1540401, 1540658, 1540915, 1541172, 1541429, 1541686, 1541943, 1542200, 1542457, 10, 1542960, 1543217, 1543474, 1543731, 1543988, 1544245, 1544502, 1544759, 1545016, 1545273, 10, 1545776, 1546033, 1546290, 1546547, 1546804, 1547061, 1547318, 1547575, 1547832, 1548089, 10, 1548592, 1548849, 1549106, 1549363, 1549620, 1549877, 1550134, 1550391, 1550648, 1550905, 10, 1551408, 1554225, 1557042, 1559859, 1562676, 1565493, 1568310, 1571127, 1573944, 1576761, 10, 1551664, 1551921, 1552178, 1552435, 1552692, 1552949, 1553206, 1553463, 1553720, 1553977, 10, 1554480, 1554737, 1554994, 1555251, 1555508, 1555765, 1556022, 1556279, 1556536, 1556793, 10, 1557296, 1557553, 1557810, 1558067, 1558324, 1558581, 1558838, 1559095, 1559352, 1559609, 10, 1560112, 1560369, 1560626, 1560883, 1561140, 1561397, 1561654, 1561911, 1562168, 1562425, 10, 1562928, 1563185, 1563442, 1563699, 1563956, 1564213, 1564470, 1564727, 1564984, 1565241, 10, 1565744, 1566001, 1566258, 1566515, 1566772, 1567029, 1567286, 1567543, 1567800, 1568057, 10, 1568560, 1568817, 1569074, 1569331, 1569588, 1569845, 1570102, 1570359, 1570616, 1570873, 10, 1571376, 1571633, 1571890, 1572147, 1572404, 1572661, 1572918, 1573175, 1573432, 1573689, 10, 1574192, 1574449, 1574706, 1574963, 1575220, 1575477, 1575734, 1575991, 1576248, 1576505, 10, 1577008, 1577265, 1577522, 1577779, 1578036, 1578293, 1578550, 1578807, 1579064, 1579321, 10, 1579824, 1582641, 1585458, 1588275, 1591092, 1593909, 1596726, 1599543, 1602360, 1605177, 10, 1580080, 1580337, 1580594, 1580851, 1581108, 1581365, 1581622, 1581879, 1582136, 1582393, 10, 1582896, 1583153, 1583410, 1583667, 1583924, 1584181, 1584438, 1584695, 1584952, 1585209, 10, 1585712, 1585969, 1586226, 1586483, 1586740, 1586997, 1587254, 1587511, 1587768, 1588025, 10, 1588528, 1588785, 1589042, 1589299, 1589556, 1589813, 1590070, 1590327, 1590584, 1590841, 10, 1591344, 1591601, 1591858, 1592115, 1592372, 1592629, 1592886, 1593143, 1593400, 1593657, 10, 1594160, 1594417, 1594674, 1594931, 1595188, 1595445, 1595702, 1595959, 1596216, 1596473, 10, 1596976, 1597233, 1597490, 1597747, 1598004, 1598261, 1598518, 1598775, 1599032, 1599289, 10, 1599792, 1600049, 1600306, 1600563, 1600820, 1601077, 1601334, 1601591, 1601848, 1602105, 10, 1602608, 1602865, 1603122, 1603379, 1603636, 1603893, 1604150, 1604407, 1604664, 1604921, 10, 1605424, 1605681, 1605938, 1606195, 1606452, 1606709, 1606966, 1607223, 1607480, 1607737, 10, 1608240, 1611057, 1613874, 1616691, 1619508, 1622325, 1625142, 1627959, 1630776, 1633593, 10, 1608496, 1608753, 1609010, 1609267, 1609524, 1609781, 1610038, 1610295, 1610552, 1610809, 10, 1611312, 1611569, 1611826, 1612083, 1612340, 1612597, 1612854, 1613111, 1613368, 1613625, 10, 1614128, 1614385, 1614642, 1614899, 1615156, 1615413, 1615670, 1615927, 1616184, 1616441, 10, 1616944, 1617201, 1617458, 1617715, 1617972, 1618229, 1618486, 1618743, 1619000, 1619257, 10, 1619760, 1620017, 1620274, 1620531, 1620788, 1621045, 1621302, 1621559, 1621816, 1622073, 10, 1622576, 1622833, 1623090, 1623347, 1623604, 1623861, 1624118, 1624375, 1624632, 1624889, 10, 1625392, 1625649, 1625906, 1626163, 1626420, 1626677, 1626934, 1627191, 1627448, 1627705, 10, 1628208, 1628465, 1628722, 1628979, 1629236, 1629493, 1629750, 1630007, 1630264, 1630521, 10, 1631024, 1631281, 1631538, 1631795, 1632052, 1632309, 1632566, 1632823, 1633080, 1633337, 10, 1633840, 1634097, 1634354, 1634611, 1634868, 1635125, 1635382, 1635639, 1635896, 1636153, 6, 1636656, 1639473, 1642290, 1645107, 1647924, 1650741, 10, 1636912, 1637169, 1637426, 1637683, 1637940, 1638197, 1638454, 1638711, 1638968, 1639225, 10, 1639728, 1639985, 1640242, 1640499, 1640756, 1641013, 1641270, 1641527, 1641784, 1642041, 10, 1642544, 1642801, 1643058, 1643315, 1643572, 1643829, 1644086, 1644343, 1644600, 1644857, 10, 1645360, 1645617, 1645874, 1646131, 1646388, 1646645, 1646902, 1647159, 1647416, 1647673, 10, 1648176, 1648433, 1648690, 1648947, 1649204, 1649461, 1649718, 1649975, 1650232, 1650489, 6, 1650992, 1651249, 1651506, 1651763, 1652020, 1652277, 1, 1652841, 1, 1653108, 1, 1653353, 1, 1653615, 1, 1653870, 1, 1654373, 1, 1654643, 1, 1654899, 2, 1655141, 1655657, 1, 1655396, 1, 1655919, 1, 1656174, 1, 1656692, 1, 1656933, 1, 1657202, 1, 1657459, 8, 1657955, 1662310, 1667175, 1671785, 1673322, 1678451, 1685108, 1701750, 1, 1658209, 1, 1658486, 1, 1658725, 1, 1658925, 2, 1659248, 1661043, 1, 1659503, 1, 1659753, 1, 1660014, 1, 1660276, 1, 1660517, 1, 1660772, 1, 1661289, 1, 1661540, 1, 1661797, 1, 1662052, 4, 1662565, 1663596, 1664623, 1666165, 1, 1662836, 1, 1663092, 1, 1663337, 1, 1663849, 1, 1664099, 1, 1664372, 1, 1664885, 1, 1665134, 1, 1665380, 1, 1665637, 1, 1665892, 1, 1666419, 1, 1666661, 1, 1666916, 2, 1667428, 1668210, 1, 1667695, 1, 1667956, 2, 1668449, 1670773, 1, 1668724, 1, 1668981, 1, 1669228, 1, 1669473, 1, 1669748, 1, 1669993, 1, 1670255, 1, 1670510, 1, 1671013, 1, 1671278, 1, 1671540, 2, 1672035, 1672814, 1, 1672289, 1, 1672556, 1, 1673076, 2, 1673583, 1675637, 1, 1673833, 1, 1674094, 2, 1674341, 1674857, 1, 1674596, 1, 1675118, 1, 1675367, 2, 1675879, 1676910, 1, 1676129, 1, 1676404, 1, 1676645, 1, 1677155, 1, 1677428, 1, 1677673, 1, 1677935, 1, 1678190, 3, 1678693, 1680495, 1681780, 1, 1678947, 1, 1679221, 1, 1679476, 1, 1679721, 1, 1679990, 1, 1680229, 1, 1680750, 1, 1680993, 1, 1681262, 1, 1681524, 2, 1682017, 1683314, 1, 1682286, 2, 1682531, 1683060, 1, 1682809, 1, 1683573, 1, 1683811, 1, 1684084, 1, 1684329, 1, 1684591, 1, 1684846, 5, 1685345, 1687653, 1691241, 1694831, 1698162, 2, 1685603, 1686121, 1, 1685876, 1, 1686382, 2, 1686633, 1687411, 1, 1686894, 1, 1687143, 2, 1687917, 1689966, 1, 1688176, 1, 1688428, 1, 1688673, 1, 1688948, 1, 1689193, 1, 1689455, 1, 1689710, 1, 1690228, 1, 1690473, 1, 1690735, 1, 1690990, 1, 1691502, 1, 1691765, 3, 1692001, 1693289, 1694063, 1, 1692276, 1, 1692521, 1, 1692783, 1, 1693038, 1, 1693550, 1, 1693799, 1, 1694325, 1, 1694579, 1, 1695093, 1, 1695346, 2, 1695589, 1696105, 1, 1695844, 1, 1696366, 1, 1696628, 1, 1696869, 1, 1697127, 1, 1697394, 1, 1697633, 1, 1697900, 2, 1698401, 1701231, 2, 1698659, 1699954, 1, 1698932, 1, 1699177, 1, 1699439, 1, 1699694, 1, 1700201, 1, 1700453, 1, 1700724, 1, 1700985, 1, 1701484, 1, 1701989, 2, 1702254, 1703794, 1, 1702505, 1, 1702757, 1, 1703022, 1, 1703267, 1, 1703525, 1, 1704039, 1, 1704297, 1, 1704558, 1, 1704807, 2, 1705323, 1707116, 2, 1705573, 1706089, 1, 1705828, 2, 1706341, 1706606, 1, 1706855, 5, 1707622, 1707888, 1709170, 1710708, 1711481, 1, 1708133, 1, 1708402, 1, 1708589, 1, 1708850, 1, 1709423, 1, 1709668, 1, 1709941, 1, 1710179, 1, 1710452, 1, 1710953, 1, 1711203, 3, 1711724, 1712754, 1714035, 1, 1711973, 1, 1712230, 1, 1712500, 1, 1713001, 1, 1713255, 1, 1713512, 1, 1713780, 1, 1714290, 5, 1714795, 1715054, 1716847, 1717872, 1720434, 2, 1715301, 1716073, 1, 1715570, 1, 1715827, 1, 1716339, 1, 1716584, 1, 1717102, 1, 1717353, 1, 1717619, 2, 1718127, 1719923, 1, 1718386, 1, 1718625, 1, 1718900, 1, 1719145, 1, 1719407, 1, 1719662, 1, 1720165, 1, 1720677, 2, 1720931, 1721459, 1, 1721204, 1, 1721712, 1, 1721967, 1, 1722222, 1, 1722468, 1, 1722739, 3, 1723491, 1724014, 1734768, 1, 1723752, 2, 1724259, 1725044, 1, 1724521, 1, 1724780, 2, 1725285, 1733993, 1, 1725554, 3, 1725794, 1726819, 1732979, 1, 1726063, 1, 1726322, 1, 1726565, 1, 1727084, 1, 1727343, 1, 1727587, 1, 1727851, 1, 1728119, 1, 1728361, 1, 1728627, 1, 1728869, 1, 1729123, 1, 1729391, 1, 1729646, 1, 1729908, 1, 1730159, 1, 1730421, 1, 1730674, 1, 1730921, 1, 1731182, 1, 1731444, 1, 1731685, 1, 1731943, 1, 1732210, 1, 1732449, 1, 1732716, 1, 1733225, 1, 1733486, 1, 1733739, 1, 1734254, 1, 1734503, 1, 1735020, 1, 1735269, 1, 1735781, 1, 1736050, 1, 1736297, 1, 1736558, 1, 1736807, 1, 1737314, 1, 1737583, 1, 1737849, 6, 1738593, 1741413, 1746025, 1747311, 1757813, 1762937, 4, 1738850, 1739107, 1740146, 1740665, 1, 1739371, 1, 1739621, 1, 1739890, 1, 1740402, 1, 1740911, 1, 1741166, 3, 1741665, 1743204, 1743987, 2, 1741933, 1742196, 1, 1742441, 1, 1742710, 1, 1742949, 1, 1743465, 1, 1743732, 1, 1744227, 1, 1744485, 1, 1744750, 2, 1744996, 1745524, 1, 1745263, 1, 1745779, 1, 1746275, 1, 1746539, 1, 1746789, 1, 1747060, 5, 1747555, 1749609, 1751408, 1751667, 1757303, 2, 1747823, 1749109, 1, 1748068, 1, 1748329, 1, 1748588, 1, 1748837, 1, 1749363, 2, 1749875, 1751160, 1, 1750131, 1, 1750369, 1, 1750638, 1, 1750900, 1, 1751923, 4, 1752162, 1753445, 1755240, 1756521, 1, 1752431, 1, 1752686, 1, 1752933, 1, 1753203, 1, 1753700, 1, 1753901, 1, 1754228, 1, 1754465, 1, 1754729, 1, 1754988, 1, 1755489, 1, 1755764, 1, 1756003, 1, 1756264, 1, 1756782, 1, 1757031, 1, 1757550, 2, 1758051, 1761658, 1, 1758313, 2, 1758562, 1760614, 1, 1758828, 1, 1759077, 1, 1759277, 4, 1759538, 1759795, 1760052, 1760309, 1, 1760879, 1, 1761138, 1, 1761389, 1, 1761893, 1, 1762153, 1, 1762418, 1, 1762671, 3, 1763177, 1763952, 1766515, 1, 1763438, 1, 1763687, 1, 1764212, 1, 1764463, 1, 1764711, 1, 1764978, 1, 1765217, 1, 1765485, 1, 1765741, 1, 1765993, 1, 1766243, 1, 1766772, 1, 1767009, 1, 1767276, 2, 1767779, 1768309, 1, 1768050, 2, 1768546, 1769072, 1, 1768805, 1, 1769317, 1, 1769828, 1, 1770095, 1, 1770356, 16, 1770849, 1772898, 1773667, 1775204, 1776741, 1778028, 1781357, 1781614, 1783407, 1784176, 1790322, 1806451, 1809268, 1809526, 1810295, 1811064, 2, 1771117, 1771380, 1, 1771634, 1, 1771881, 1, 1772140, 1, 1772396, 1, 1772655, 1, 1773157, 1, 1773412, 1, 1773941, 1, 1774189, 1, 1774434, 1, 1774693, 1, 1774962, 1, 1775457, 1, 1775730, 1, 1775986, 2, 1776236, 1776498, 2, 1777008, 1777523, 1, 1777266, 1, 1777763, 2, 1778273, 1779316, 1, 1778546, 1, 1778802, 1, 1779056, 1, 1779561, 1, 1779830, 1, 1780065, 1, 1780340, 1, 1780585, 1, 1780847, 1, 1781102, 1, 1781861, 1, 1782121, 1, 1782374, 1, 1782639, 1, 1782898, 1, 1783149, 2, 1783664, 1783928, 6, 1784418, 1785699, 1787492, 1788265, 1789039, 1789552, 1, 1784690, 1, 1784931, 1, 1785185, 1, 1785456, 2, 1785953, 1786997, 2, 1786219, 1786736, 1, 1786469, 1, 1787248, 1, 1787759, 1, 1788020, 1, 1788516, 1, 1788783, 1, 1789298, 1, 1789797, 1, 1790052, 6, 1790561, 1791596, 1798258, 1800051, 1801078, 1806200, 1, 1790834, 1, 1791090, 1, 1791341, 2, 1791849, 1793401, 2, 1792099, 1792878, 1, 1792373, 1, 1792613, 1, 1793127, 3, 1793637, 1796214, 1796983, 1, 1793905, 2, 1794160, 1795187, 1, 1794418, 1, 1794661, 1, 1794915, 1, 1795445, 1, 1795683, 1, 1795939, 1, 1796453, 1, 1796709, 1, 1797221, 1, 1797476, 1, 1797735, 1, 1797989, 2, 1798501, 1799801, 1, 1798766, 2, 1799011, 1799540, 1, 1799289, 1, 1800297, 1, 1800566, 1, 1800805, 2, 1801317, 1805417, 2, 1801569, 1805156, 1, 1801842, 1, 1802098, 1, 1802351, 1, 1802615, 2, 1802860, 1803890, 1, 1803109, 1, 1803366, 1, 1803636, 1, 1804137, 1, 1804391, 1, 1804648, 1, 1804916, 1, 1805678, 1, 1805927, 2, 1806704, 1806964, 2, 1807201, 1807983, 1, 1807474, 1, 1807716, 1, 1808237, 2, 1808485, 1809011, 1, 1808754, 1, 1809765, 1, 1810021, 1, 1810533, 1, 1810788, 5, 1811553, 1812067, 1813605, 1814889, 1815919, 1, 1811809, 1, 1812335, 1, 1812590, 1, 1812841, 1, 1813102, 1, 1813364, 1, 1813871, 1, 1814130, 1, 1814388, 1, 1814632, 2, 1815145, 1815406, 1, 1815668, 1, 1816175, 7, 1816673, 1817443, 1818732, 1822064, 1824370, 1827444, 1827704, 2, 1816951, 1817209, 1, 1817708, 1, 1817967, 1, 1818222, 1, 1818469, 2, 1818979, 1819753, 1, 1819252, 1, 1819513, 1, 1820014, 1, 1820260, 1, 1820530, 1, 1820777, 1, 1821027, 1, 1821289, 1, 1821556, 1, 1821817, 2, 1822309, 1823346, 1, 1822578, 1, 1822837, 1, 1823091, 1, 1823593, 1, 1823855, 1, 1824116, 3, 1824613, 1825897, 1827192, 1, 1824878, 1, 1825121, 1, 1825385, 1, 1825635, 1, 1826156, 1, 1826412, 1, 1826665, 1, 1826915, 25, 1828140, 1828400, 1854002, 1854305, 1895266, 1897571, 1899620, 1916773, 1979750, 1981288, 1991529, 2078826, 2080875, 2081644, 2086253, 2086510, 2087023, 2254962, 2276979, 2279540, 2281333, 2296438, 2298487, 2300537, 2303354, 7, 1828656, 1831473, 1834290, 1837363, 1840692, 1844021, 1849654, 9, 1828913, 1829170, 1829427, 1829684, 1829941, 1830198, 1830455, 1830712, 1831225, 1, 1831009, 10, 1831728, 1831985, 1832242, 1832499, 1832756, 1833013, 1833270, 1833527, 1833784, 1834041, 10, 1834544, 1834801, 1835058, 1835315, 1835572, 1835829, 1836086, 1836343, 1836856, 1837113, 1, 1836641, 10, 1837616, 1837873, 1838386, 1838643, 1838900, 1839413, 1839670, 1839927, 1840184, 1840441, 1, 1838177, 1, 1839201, 10, 1840944, 1841201, 1841458, 1841715, 1841972, 1842229, 1842486, 1842999, 1843256, 1843769, 1, 1842785, 1, 1843553, 10, 1844272, 1846833, 1847090, 1847603, 1847860, 1848373, 1848630, 1848887, 1849144, 1849401, 9, 1844577, 1844834, 1845091, 1845348, 1845605, 1845862, 1846119, 1846376, 1846633, 1, 1847393, 1, 1848161, 8, 1849904, 1850161, 1850418, 1850675, 1850932, 1851189, 1851446, 1851703, 8, 1852001, 1852258, 1852515, 1852772, 1853029, 1853286, 1853543, 1853800, 17, 1854561, 1856612, 1856869, 1857895, 1863272, 1866089, 1867116, 1870701, 1873262, 1878384, 1882994, 1886579, 1889140, 1889910, 1891703, 1892216, 1892473, 3, 1854820, 1855596, 1856115, 1, 1855080, 1, 1855349, 1, 1855849, 1, 1856373, 2, 1857127, 1857390, 1, 1857639, 6, 1858099, 1858401, 1859682, 1861477, 1862247, 1863027, 2, 1858668, 1859450, 1, 1858919, 1, 1859169, 1, 1859937, 1, 1860211, 1, 1860457, 1, 1860718, 1, 1860974, 1, 1861217, 1, 1861747, 1, 1861992, 1, 1862501, 1, 1862770, 2, 1863521, 1864057, 1, 1863788, 1, 1864289, 1, 1864545, 1, 1864821, 1, 1865075, 1, 1865320, 1, 1865517, 1, 1865778, 2, 1866350, 1866866, 1, 1866599, 3, 1867361, 1868132, 1868645, 1, 1867636, 1, 1867880, 1, 1868385, 1, 1868916, 1, 1869160, 1, 1869357, 1, 1869682, 1, 1869925, 1, 1870195, 1, 1870440, 3, 1870945, 1871725, 1873008, 1, 1871218, 1, 1871477, 1, 1871969, 1, 1872244, 1, 1872481, 1, 1872750, 4, 1873507, 1875044, 1875559, 1876084, 2, 1873765, 1874281, 1, 1874034, 1, 1874542, 1, 1874791, 1, 1875297, 1, 1875823, 1, 1876321, 2, 1876586, 1877113, 1, 1876833, 1, 1877345, 1, 1877612, 1, 1877857, 1, 1878126, 1, 1878573, 3, 1878882, 1880429, 1881456, 2, 1879141, 1879669, 1, 1879401, 1, 1879919, 1, 1880174, 1, 1880693, 1, 1880943, 1, 1881209, 2, 1881705, 1882226, 1, 1881961, 1, 1882465, 1, 1882733, 5, 1883233, 1884007, 1884523, 1886066, 1886324, 2, 1883443, 1883700, 1, 1884257, 1, 1884773, 1, 1885038, 1, 1885289, 1, 1885550, 1, 1885799, 3, 1886821, 1887592, 1888617, 1, 1887081, 1, 1887329, 2, 1887845, 1888374, 1, 1888100, 1, 1888865, 2, 1889377, 1889637, 1, 1890153, 2, 1890404, 1890681, 1, 1890913, 1, 1891182, 1, 1891433, 1, 1891938, 2, 1892653, 1894241, 1, 1892974, 1, 1893225, 1, 1893479, 1, 1893736, 1, 1894004, 1, 1894510, 1, 1894766, 1, 1895009, 2, 1895531, 1896812, 1, 1895777, 1, 1896050, 1, 1896303, 1, 1896567, 1, 1897057, 1, 1897315, 3, 1897825, 1898856, 1899385, 1, 1898098, 1, 1898351, 1, 1898606, 1, 1899109, 8, 1899873, 1904996, 1906021, 1907048, 1909097, 1910895, 1913973, 1916279, 9, 1900129, 1900391, 1901416, 1902188, 1902448, 1902706, 1903220, 1903480, 1903737, 1, 1900647, 1, 1900901, 1, 1901170, 1, 1901665, 1, 1901932, 1, 1902962, 1, 1903969, 1, 1904238, 1, 1904494, 1, 1904737, 2, 1905249, 1905512, 1, 1905761, 3, 1906277, 1906544, 1906808, 5, 1907297, 1907813, 1908329, 1908591, 1908853, 1, 1907553, 1, 1908069, 4, 1909349, 1910128, 1910388, 1910648, 2, 1909616, 1909880, 4, 1911137, 1911408, 1911668, 1913720, 2, 1911922, 1912947, 1, 1912161, 1, 1912424, 1, 1912676, 1, 1913189, 1, 1913457, 5, 1914223, 1914992, 1915250, 1915764, 1916024, 2, 1914480, 1914744, 1, 1915512, 1, 1916513, 20, 1917025, 1918306, 1919075, 1931109, 1932646, 1937255, 1938536, 1939049, 1939307, 1939820, 1948013, 1949294, 1956208, 1960306, 1963635, 1971061, 1971830, 1976696, 1977465, 1979258, 3, 1917284, 1917542, 1917812, 1, 1918056, 1, 1918569, 1, 1918836, 5, 1919329, 1920357, 1921641, 1925999, 1928306, 1, 1919609, 1, 1919845, 1, 1920100, 1, 1920621, 1, 1920866, 1, 1921125, 1, 1921394, 3, 1921892, 1923181, 1923955, 1, 1922165, 1, 1922415, 1, 1922677, 1, 1922931, 1, 1923425, 1, 1923692, 1, 1924201, 1, 1924470, 1, 1924709, 1, 1924974, 1, 1925221, 1, 1925491, 1, 1925747, 1, 1926258, 1, 1926497, 1, 1926772, 1, 1927017, 2, 1927279, 1927798, 1, 1927534, 1, 1928037, 1, 1928549, 2, 1928801, 1929587, 1, 1929075, 1, 1929317, 1, 1929827, 1, 1930085, 1, 1930350, 1, 1930596, 1, 1930863, 3, 1931372, 1931632, 1932402, 1, 1931884, 1, 1932153, 2, 1932901, 1935465, 1, 1933155, 1, 1933428, 1, 1933673, 1, 1933942, 1, 1934181, 1, 1934446, 1, 1934693, 1, 1934963, 1, 1935219, 1, 1935726, 1, 1935977, 1, 1936244, 1, 1936489, 1, 1936751, 1, 1937006, 1, 1937522, 1, 1937765, 1, 1938021, 1, 1938291, 1, 1938793, 1, 1939553, 4, 1940069, 1941609, 1946480, 1947508, 1, 1940340, 2, 1940581, 1940841, 1, 1941103, 1, 1941358, 3, 1941859, 1943149, 1944438, 1, 1942121, 1, 1942383, 1, 1942645, 1, 1942899, 1, 1943401, 1, 1943668, 1, 1943909, 1, 1944178, 1, 1944677, 1, 1944946, 2, 1945185, 1946233, 1, 1945454, 1, 1945699, 1, 1945957, 1, 1946728, 1, 1946985, 1, 1947235, 1, 1947745, 1, 1948272, 1, 1948532, 1, 1948793, 1, 1949046, 6, 1949537, 1950821, 1951079, 1951342, 1952111, 1954164, 1, 1949810, 1, 1950057, 1, 1950325, 1, 1950579, 1, 1951589, 1, 1951854, 1, 1952365, 1, 1952617, 1, 1952878, 1, 1953121, 1, 1953396, 1, 1953647, 1, 1953906, 2, 1954401, 1954921, 1, 1954668, 1, 1955187, 1, 1955444, 1, 1955698, 1, 1955961, 2, 1956449, 1959796, 1, 1956722, 1, 1956980, 3, 1957225, 1957997, 1959029, 1, 1957486, 1, 1957735, 1, 1958245, 1, 1958510, 1, 1958772, 1, 1959282, 1, 1959525, 1, 1960040, 1, 1960549, 2, 1960812, 1961844, 1, 1961065, 1, 1961315, 1, 1961588, 1, 1962029, 1, 1962344, 1, 1962601, 1, 1962852, 1, 1963109, 1, 1963380, 4, 1963875, 1967973, 1969257, 1970027, 2, 1964133, 1966194, 1, 1964398, 1, 1964644, 2, 1964901, 1965417, 1, 1965170, 1, 1965678, 1, 1965927, 1, 1966441, 1, 1966704, 1, 1966964, 1, 1967209, 1, 1967471, 1, 1967726, 1, 1968242, 2, 1968485, 1969012, 1, 1968756, 1, 1969511, 1, 1969774, 1, 1970292, 1, 1970543, 1, 1970800, 1, 1971310, 1, 1971559, 3, 1972065, 1973861, 1975913, 1, 1972334, 1, 1972577, 1, 1972839, 1, 1973089, 1, 1973362, 1, 1973609, 1, 1974124, 1, 1974383, 1, 1974640, 1, 1974893, 1, 1975141, 1, 1975406, 1, 1975668, 1, 1976163, 1, 1976421, 1, 1976937, 1, 1977185, 1, 1977716, 1, 1977957, 1, 1978226, 1, 1978479, 2, 1978739, 1978997, 1, 1979496, 2, 1980009, 1981042, 1, 1980275, 1, 1980520, 1, 1980788, 6, 1981537, 1987429, 1987944, 1989993, 1990511, 1991285, 5, 1981793, 1982564, 1983340, 1985133, 1986162, 1, 1982060, 1, 1982325, 1, 1982824, 1, 1983077, 2, 1983585, 1984357, 1, 1983860, 1, 1984104, 1, 1984628, 1, 1984872, 1, 1985381, 1, 1985636, 1, 1985896, 3, 1986412, 1986669, 1987186, 1, 1986913, 1, 1987685, 5, 1988193, 1988453, 1988969, 1989231, 1989749, 1, 1988709, 1, 1989487, 1, 1990249, 2, 1990767, 1991029, 16, 1991777, 2016354, 2016613, 2018662, 2027623, 2033260, 2033517, 2042478, 2043760, 2046578, 2049907, 2066548, 2067318, 2077304, 2077561, 2078074, 8, 1992035, 2000997, 2004583, 2005868, 2008685, 2012018, 2013043, 2014324, 1, 1992306, 1, 1992553, 1, 1992820, 1, 1993065, 1, 1993315, 1, 1993569, 1, 1993836, 4, 1994081, 1995364, 1998439, 1999732, 1, 1994339, 1, 1994613, 1, 1994868, 1, 1995109, 1, 1995631, 2, 1995892, 1996149, 1, 1996386, 1, 1996652, 1, 1996901, 1, 1997153, 1, 1997411, 1, 1997685, 1, 1997940, 1, 1998181, 1, 1998706, 1, 1998945, 1, 1999222, 1, 1999461, 1, 1999977, 1, 2000236, 1, 2000484, 1, 2000741, 1, 2001266, 1, 2001509, 1, 2001779, 1, 2002025, 2, 2002291, 2003834, 1, 2002477, 1, 2002802, 1, 2003049, 1, 2003310, 1, 2003559, 1, 2004069, 1, 2004324, 1, 2004847, 1, 2005102, 1, 2005345, 1, 2005612, 2, 2006117, 2007417, 1, 2006371, 1, 2006644, 1, 2006829, 1, 2007152, 1, 2007668, 1, 2007913, 1, 2008171, 1, 2008417, 3, 2008933, 2009967, 2011763, 1, 2009204, 1, 2009445, 1, 2009714, 1, 2010222, 1, 2010468, 1, 2010739, 1, 2010997, 1, 2011241, 1, 2011508, 1, 2012263, 1, 2012527, 1, 2012782, 1, 2013300, 1, 2013551, 1, 2013804, 1, 2014057, 1, 2014575, 1, 2014830, 2, 2015081, 2015855, 1, 2015339, 1, 2015593, 1, 2016110, 3, 2016880, 2017139, 2018424, 2, 2017381, 2017897, 1, 2017644, 1, 2018163, 4, 2018913, 2019430, 2024815, 2026100, 1, 2019188, 2, 2019685, 2022505, 1, 2019954, 1, 2020197, 1, 2020462, 2, 2020707, 2021236, 1, 2020965, 1, 2021481, 1, 2021729, 1, 2021996, 1, 2022244, 1, 2022755, 1, 2023029, 1, 2023276, 1, 2023540, 2, 2023785, 2024569, 1, 2024037, 1, 2024307, 1, 2025070, 1, 2025321, 1, 2025569, 1, 2025843, 1, 2026351, 1, 2026599, 1, 2026855, 1, 2027119, 1, 2027379, 4, 2027873, 2028905, 2029679, 2030962, 1, 2028141, 1, 2028397, 1, 2028641, 1, 2029172, 1, 2029427, 1, 2029938, 1, 2030183, 1, 2030447, 1, 2030702, 1, 2031201, 2, 2031469, 2032752, 1, 2031725, 2, 2031969, 2032239, 1, 2032499, 1, 2033000, 4, 2033714, 2034021, 2036073, 2041453, 1, 2034286, 1, 2034547, 1, 2034793, 1, 2035055, 1, 2035310, 1, 2035553, 1, 2035820, 2, 2036324, 2037102, 1, 2036585, 1, 2036833, 2, 2037353, 2039157, 1, 2037619, 1, 2037864, 1, 2038125, 1, 2038373, 1, 2038638, 1, 2038900, 1, 2039412, 1, 2039657, 1, 2039919, 1, 2040174, 1, 2040365, 3, 2040625, 2040882, 2041139, 1, 2041705, 1, 2041966, 1, 2042215, 1, 2042727, 1, 2042978, 1, 2043233, 1, 2043508, 3, 2044012, 2045296, 2046068, 2, 2044265, 2044527, 1, 2044789, 1, 2045038, 1, 2045541, 1, 2045810, 1, 2046309, 2, 2046821, 2049383, 1, 2047075, 1, 2047348, 2, 2047593, 2048876, 1, 2047855, 1, 2048110, 1, 2048353, 1, 2048620, 1, 2049145, 1, 2049633, 8, 2050145, 2053475, 2056040, 2056297, 2057579, 2057840, 2060659, 2062452, 2, 2050402, 2051440, 1, 2050668, 1, 2050917, 1, 2051172, 1, 2051696, 1, 2051951, 1, 2052201, 1, 2052462, 1, 2052724, 1, 2052965, 1, 2053220, 1, 2053743, 1, 2053998, 1, 2054260, 1, 2054505, 1, 2054766, 1, 2055029, 1, 2055279, 1, 2055541, 1, 2055795, 2, 2056557, 2057326, 1, 2056815, 1, 2057077, 2, 2058085, 2059637, 1, 2058354, 1, 2058611, 1, 2058857, 1, 2059119, 1, 2059374, 1, 2059892, 1, 2060133, 1, 2060388, 1, 2060911, 1, 2061164, 1, 2061430, 1, 2061669, 1, 2061869, 1, 2062130, 2, 2062697, 2065007, 2, 2062956, 2063470, 1, 2063212, 1, 2063719, 1, 2063989, 1, 2064233, 1, 2064499, 1, 2064744, 1, 2065266, 1, 2065524, 1, 2065769, 1, 2066031, 1, 2066286, 1, 2066804, 1, 2067055, 3, 2067557, 2069353, 2075759, 1, 2067826, 1, 2068071, 1, 2068325, 1, 2068590, 1, 2068835, 1, 2069093, 3, 2069604, 2072942, 2074739, 1, 2069861, 4, 2070116, 2070383, 2072178, 2072691, 1, 2070638, 1, 2070900, 1, 2071145, 1, 2071405, 1, 2071653, 1, 2071923, 1, 2072435, 2, 2073185, 2074471, 1, 2073460, 1, 2073705, 1, 2073967, 1, 2074222, 1, 2074985, 1, 2075247, 1, 2075502, 2, 2076014, 2076530, 1, 2076280, 1, 2076771, 1, 2077029, 1, 2077793, 1, 2078330, 1, 2078585, 3, 2079073, 2079331, 2079845, 1, 2079609, 1, 2080114, 1, 2080374, 1, 2080617, 1, 2081121, 1, 2081394, 7, 2081889, 2082147, 2083941, 2084456, 2085481, 2085743, 2086005, 2, 2082415, 2083186, 1, 2082674, 1, 2082926, 1, 2083439, 1, 2083696, 1, 2084197, 2, 2084705, 2084985, 1, 2085217, 1, 2086753, 20, 2087213, 2087777, 2090082, 2090851, 2092388, 2093925, 2094439, 2095209, 2096235, 2097260, 2100333, 2102126, 2102639, 2103664, 2104178, 2105460, 2180725, 2220150, 2220663, 2254712, 1, 2087535, 1, 2088035, 1, 2088296, 1, 2088545, 1, 2088819, 1, 2089064, 1, 2089325, 1, 2089573, 1, 2089829, 1, 2090354, 1, 2090607, 1, 2091125, 1, 2091373, 1, 2091621, 1, 2091886, 1, 2092148, 1, 2092645, 1, 2092907, 1, 2093153, 1, 2093428, 1, 2093665, 1, 2094195, 1, 2094706, 1, 2094945, 2, 2095470, 2095988, 1, 2095719, 1, 2096493, 1, 2096737, 1, 2097001, 3, 2097513, 2098284, 2099312, 1, 2097781, 1, 2098029, 2, 2098529, 2099059, 1, 2098802, 1, 2099560, 1, 2099817, 1, 2100078, 2, 2100577, 2101353, 1, 2100841, 1, 2101102, 1, 2101614, 1, 2101871, 1, 2102375, 2, 2102894, 2103410, 1, 2103143, 1, 2103910, 2, 2104431, 2105205, 1, 2104685, 1, 2104933, 7, 2105700, 2106469, 2108524, 2109549, 2110832, 2111859, 2178932, 1, 2105967, 1, 2106228, 1, 2106737, 2, 2106980, 2107765, 1, 2107247, 1, 2107508, 1, 2108001, 1, 2108268, 1, 2108773, 1, 2109043, 1, 2109299, 1, 2109801, 1, 2110062, 1, 2110325, 1, 2110579, 1, 2111084, 1, 2111349, 1, 2111603, 2, 2112045, 2177649, 8, 2112305, 2145074, 2161459, 2169652, 2173749, 2175798, 2176823, 2177336, 7, 2112562, 2128947, 2137140, 2141237, 2143286, 2144311, 2144824, 6, 2112819, 2121012, 2125109, 2127158, 2128183, 2128696, 5, 2113076, 2117173, 2119222, 2120247, 2120760, 4, 2113333, 2115382, 2116407, 2116920, 3, 2113590, 2114615, 2115128, 2, 2113847, 2114360, 1, 2114104, 1, 2114872, 2, 2115639, 2116152, 1, 2115896, 1, 2116664, 3, 2117430, 2118455, 2118968, 2, 2117687, 2118200, 1, 2117944, 1, 2118712, 2, 2119479, 2119992, 1, 2119736, 1, 2120504, 4, 2121269, 2123318, 2124343, 2124856, 3, 2121526, 2122551, 2123064, 2, 2121783, 2122296, 1, 2122040, 1, 2122808, 2, 2123575, 2124088, 1, 2123832, 1, 2124600, 3, 2125366, 2126391, 2126904, 2, 2125623, 2126136, 1, 2125880, 1, 2126648, 2, 2127415, 2127928, 1, 2127672, 1, 2128440, 5, 2129204, 2133301, 2135350, 2136375, 2136888, 4, 2129461, 2131510, 2132535, 2133048, 3, 2129718, 2130743, 2131256, 2, 2129975, 2130488, 1, 2130232, 1, 2131000, 2, 2131767, 2132280, 1, 2132024, 1, 2132792, 3, 2133558, 2134583, 2135096, 2, 2133815, 2134328, 1, 2134072, 1, 2134840, 2, 2135607, 2136120, 1, 2135864, 1, 2136632, 4, 2137397, 2139446, 2140471, 2140984, 3, 2137654, 2138679, 2139192, 2, 2137911, 2138424, 1, 2138168, 1, 2138936, 2, 2139703, 2140216, 1, 2139960, 1, 2140728, 3, 2141494, 2142519, 2143032, 2, 2141751, 2142264, 1, 2142008, 1, 2142776, 2, 2143543, 2144056, 1, 2143800, 1, 2144568, 6, 2145331, 2153524, 2157621, 2159670, 2160695, 2161208, 5, 2145588, 2149685, 2151734, 2152759, 2153272, 4, 2145845, 2147894, 2148919, 2149432, 3, 2146102, 2147127, 2147640, 2, 2146359, 2146872, 1, 2146616, 1, 2147384, 2, 2148151, 2148664, 1, 2148408, 1, 2149176, 3, 2149942, 2150967, 2151480, 2, 2150199, 2150712, 1, 2150456, 1, 2151224, 2, 2151991, 2152504, 1, 2152248, 1, 2153016, 4, 2153781, 2155830, 2156855, 2157368, 3, 2154038, 2155063, 2155576, 2, 2154295, 2154808, 1, 2154552, 1, 2155320, 2, 2156087, 2156600, 1, 2156344, 1, 2157112, 3, 2157878, 2158903, 2159416, 2, 2158135, 2158648, 1, 2158392, 1, 2159160, 2, 2159927, 2160440, 1, 2160184, 1, 2160952, 5, 2161716, 2165813, 2167862, 2168887, 2169400, 4, 2161973, 2164022, 2165047, 2165560, 3, 2162230, 2163255, 2163768, 2, 2162487, 2163000, 1, 2162744, 1, 2163512, 2, 2164279, 2164792, 1, 2164536, 1, 2165304, 3, 2166070, 2167095, 2167608, 2, 2166327, 2166840, 1, 2166584, 1, 2167352, 2, 2168119, 2168632, 1, 2168376, 1, 2169144, 4, 2169909, 2171958, 2172983, 2173496, 3, 2170166, 2171191, 2171704, 2, 2170423, 2170936, 1, 2170680, 1, 2171448, 2, 2172215, 2172728, 1, 2172472, 1, 2173240, 3, 2174006, 2175031, 2175544, 2, 2174263, 2174776, 1, 2174520, 1, 2175288, 2, 2176055, 2176568, 1, 2176312, 1, 2177080, 1, 2177909, 1, 2178145, 1, 2178418, 1, 2178661, 1, 2179173, 1, 2179428, 1, 2179629, 3, 2179948, 2180206, 2180464, 2, 2180962, 2218855, 2, 2181228, 2218612, 1, 2181477, 8, 2181677, 2186082, 2188131, 2191972, 2194540, 2208370, 2211701, 2215798, 3, 2181989, 2183276, 2184563, 1, 2182254, 1, 2182500, 1, 2182757, 1, 2183012, 1, 2183529, 1, 2183790, 1, 2184037, 1, 2184292, 1, 2184820, 1, 2185074, 1, 2185333, 1, 2185571, 1, 2185835, 1, 2186337, 1, 2186610, 1, 2186871, 1, 2187109, 1, 2187364, 1, 2187623, 1, 2187877, 1, 2188399, 1, 2188654, 1, 2188916, 1, 2189167, 1, 2189429, 1, 2189682, 1, 2189929, 1, 2190190, 1, 2190452, 1, 2190693, 1, 2190951, 1, 2191218, 1, 2191457, 1, 2191724, 1, 2192239, 2, 2192500, 2192759, 1, 2193006, 1, 2193249, 1, 2193522, 1, 2193778, 1, 2194031, 1, 2194295, 2, 2194789, 2200175, 1, 2195046, 1, 2195316, 3, 2195553, 2196850, 2199412, 1, 2195826, 1, 2196082, 1, 2196335, 1, 2196599, 1, 2197097, 1, 2197351, 1, 2197608, 1, 2197876, 1, 2198113, 1, 2198386, 1, 2198642, 1, 2198895, 1, 2199159, 1, 2199653, 1, 2199909, 1, 2200430, 1, 2200679, 2, 2200940, 2205810, 1, 2201189, 1, 2201446, 1, 2201716, 2, 2201953, 2203250, 1, 2202226, 1, 2202482, 1, 2202735, 1, 2202999, 1, 2203497, 1, 2203751, 1, 2204008, 1, 2204276, 1, 2204513, 1, 2204786, 1, 2205042, 1, 2205295, 1, 2205559, 1, 2206057, 1, 2206311, 1, 2206568, 1, 2206836, 1, 2207073, 1, 2207346, 1, 2207602, 1, 2207855, 1, 2208119, 1, 2208617, 1, 2208871, 1, 2209128, 1, 2209396, 2, 2209633, 2210932, 1, 2209906, 1, 2210162, 1, 2210415, 1, 2210679, 1, 2211173, 1, 2211429, 1, 2211952, 2, 2212193, 2213476, 1, 2212466, 1, 2212722, 1, 2212975, 1, 2213239, 1, 2213743, 1, 2214007, 1, 2214254, 1, 2214497, 1, 2214770, 1, 2215026, 1, 2215279, 1, 2215543, 1, 2216037, 1, 2216306, 1, 2216564, 1, 2216809, 1, 2217059, 1, 2217313, 1, 2217580, 1, 2217826, 1, 2218081, 1, 2218354, 1, 2219112, 1, 2219374, 1, 2219637, 1, 2219892, 1, 2220389, 1, 2220910, 10, 2221101, 2223457, 2227298, 2228580, 2231144, 2235244, 2243698, 2249587, 2251380, 2253431, 1, 2221424, 1, 2221679, 1, 2221929, 1, 2222190, 1, 2222452, 1, 2222697, 1, 2222958, 1, 2223207, 1, 2223730, 1, 2223986, 1, 2224239, 1, 2224503, 2, 2224738, 2225525, 1, 2224993, 1, 2225266, 1, 2225776, 1, 2226017, 1, 2226290, 1, 2226546, 1, 2226799, 1, 2227063, 1, 2227570, 1, 2227813, 1, 2228086, 1, 2228325, 1, 2228847, 1, 2229111, 1, 2229358, 1, 2229601, 1, 2229874, 1, 2230130, 1, 2230383, 1, 2230647, 1, 2230899, 1, 2231393, 1, 2231666, 1, 2231920, 1, 2232175, 1, 2232431, 1, 2232686, 2, 2232940, 2233970, 1, 2233189, 1, 2233446, 1, 2233716, 1, 2234217, 1, 2234471, 1, 2234728, 1, 2234996, 1, 2235493, 1, 2235750, 1, 2236020, 3, 2236274, 2239092, 2241398, 1, 2236521, 1, 2236775, 1, 2237032, 1, 2237300, 1, 2237558, 1, 2237797, 1, 2238051, 1, 2238324, 1, 2238575, 1, 2238834, 1, 2239333, 1, 2239589, 1, 2239862, 1, 2240101, 1, 2240355, 1, 2240628, 1, 2240879, 1, 2241138, 1, 2241637, 1, 2241891, 1, 2242164, 1, 2242415, 1, 2242674, 1, 2242914, 1, 2243169, 1, 2243442, 1, 2243945, 1, 2244199, 1, 2244456, 1, 2244724, 2, 2244980, 2247286, 1, 2245221, 1, 2245477, 1, 2245750, 1, 2245989, 1, 2246243, 1, 2246516, 1, 2246767, 1, 2247026, 1, 2247525, 1, 2247779, 1, 2248052, 1, 2248303, 1, 2248562, 1, 2248802, 1, 2249057, 1, 2249330, 1, 2249827, 1, 2250081, 1, 2250348, 1, 2250601, 1, 2250862, 1, 2251111, 1, 2251621, 1, 2251877, 1, 2252129, 1, 2252402, 1, 2252658, 1, 2252911, 1, 2253175, 1, 2253665, 1, 2253938, 1, 2254180, 1, 2254451, 8, 2255201, 2261602, 2263139, 2264933, 2266473, 2268015, 2274677, 2276729, 6, 2255459, 2256742, 2258023, 2258797, 2259061, 2260343, 1, 2255720, 1, 2255981, 1, 2256225, 1, 2256499, 1, 2257012, 1, 2257257, 1, 2257518, 1, 2257767, 1, 2258287, 1, 2258542, 1, 2259303, 1, 2259560, 1, 2259828, 1, 2260083, 1, 2260585, 1, 2260846, 1, 2261095, 1, 2261363, 1, 2261867, 1, 2262113, 1, 2262386, 1, 2262639, 1, 2262903, 2, 2263407, 2264178, 1, 2263666, 1, 2263918, 1, 2264431, 1, 2264688, 2, 2265185, 2265971, 1, 2265453, 1, 2265721, 1, 2266227, 3, 2266732, 2266990, 2267510, 1, 2267243, 1, 2267749, 3, 2268269, 2269807, 2271088, 1, 2268517, 1, 2268772, 1, 2269025, 1, 2269298, 1, 2269561, 1, 2270060, 1, 2270313, 1, 2270574, 1, 2270823, 3, 2271277, 2273644, 2274419, 1, 2271603, 1, 2271848, 1, 2272097, 1, 2272356, 1, 2272623, 1, 2272887, 1, 2273125, 1, 2273380, 1, 2273893, 1, 2274164, 1, 2274925, 1, 2275187, 1, 2275444, 1, 2275689, 1, 2275939, 1, 2276203, 1, 2276467, 3, 2277219, 2277999, 2278516, 2, 2277490, 2277753, 1, 2278252, 1, 2278770, 1, 2279023, 1, 2279275, 2, 2279780, 2280562, 1, 2280047, 1, 2280308, 1, 2280809, 1, 2281062, 14, 2281569, 2282338, 2282851, 2283367, 2284136, 2284908, 2285165, 2286702, 2287727, 2288240, 2291314, 2293363, 2295156, 2296184, 1, 2281842, 1, 2282098, 1, 2282546, 1, 2283115, 1, 2283637, 1, 2283876, 1, 2284385, 1, 2284658, 1, 2285424, 1, 2285676, 1, 2285929, 1, 2286190, 1, 2286439, 3, 2286899, 2287156, 2287463, 1, 2287992, 2, 2288492, 2289775, 1, 2288751, 1, 2289017, 1, 2289249, 1, 2289518, 1, 2290030, 1, 2290276, 1, 2290537, 1, 2290805, 1, 2291059, 3, 2291506, 2291809, 2293112, 1, 2292084, 1, 2292329, 1, 2292591, 1, 2292846, 2, 2293608, 2294891, 1, 2293861, 1, 2294126, 1, 2294382, 1, 2294625, 1, 2295401, 1, 2295653, 1, 2295923, 2, 2296676, 2296937, 1, 2297203, 1, 2297462, 1, 2297697, 1, 2297970, 1, 2298209, 3, 2298721, 2300005, 2300271, 1, 2298990, 1, 2299239, 1, 2299500, 1, 2299749, 4, 2300769, 2301285, 2301806, 2303087, 1, 2301038, 1, 2301544, 1, 2302049, 1, 2302317, 1, 2302569, 1, 2302819, 11, 2303585, 2304355, 2304869, 2305896, 2307177, 2309226, 2309743, 2310005, 2310263, 2310777, 2311802, 2, 2303841, 2304121, 1, 2304633, 2, 2305125, 2305388, 1, 2305647, 3, 2306145, 2306405, 2306671, 1, 2306921, 2, 2307431, 2308724, 1, 2307698, 1, 2307937, 1, 2308210, 1, 2308466, 1, 2308961, 1, 2309477, 1, 2310501, 2, 2311009, 2311529, 1, 2311289, 3, 2312033, 2312293, 2312552, 1, 2312805, 30, 2313260, 2313517, 2316080, 2328626, 2328929, 2339682, 2341219, 2345060, 2348645, 2353254, 2354535, 2361192, 2365033, 2371434, 2372459, 2378092, 2396525, 2416238, 2446191, 2450032, 2462065, 2481778, 2488691, 2499956, 2506101, 2515062, 2518391, 2518904, 2550905, 2565754, 6, 2313778, 2314035, 2314292, 2314549, 2314806, 2315117, 1, 2315361, 1, 2315625, 1, 2315884, 4, 2316336, 2319409, 2322738, 2326067, 9, 2316593, 2316850, 2317107, 2317364, 2317621, 2317878, 2318135, 2318392, 2318905, 1, 2318689, 1, 2319201, 10, 2319664, 2319921, 2320178, 2320435, 2320692, 2320949, 2321206, 2321719, 2322232, 2322489, 1, 2321505, 1, 2322017, 10, 2322992, 2323505, 2323762, 2324019, 2324276, 2324533, 2324790, 2325047, 2325304, 2325817, 1, 2323297, 1, 2325601, 8, 2326320, 2326577, 2326834, 2327091, 2327348, 2327862, 2328119, 2328376, 1, 2327649, 8, 2329186, 2330467, 2331492, 2332775, 2333549, 2335858, 2337907, 2339444, 1, 2329448, 1, 2329697, 1, 2329956, 1, 2330216, 1, 2330741, 1, 2330996, 1, 2331237, 1, 2331752, 1, 2332001, 1, 2332260, 1, 2332520, 1, 2333036, 1, 2333285, 1, 2333800, 1, 2334049, 1, 2334318, 1, 2334563, 1, 2334824, 1, 2335087, 1, 2335340, 1, 2335596, 3, 2336108, 2336627, 2336884, 1, 2336377, 1, 2337128, 1, 2337388, 1, 2337657, 2, 2338149, 2338420, 1, 2338661, 1, 2338930, 1, 2339182, 1, 2339941, 1, 2340198, 1, 2340457, 1, 2340716, 1, 2340969, 6, 2341473, 2342504, 2342761, 2343535, 2344563, 2344825, 1, 2341746, 1, 2341999, 1, 2342254, 1, 2343026, 1, 2343267, 1, 2343788, 1, 2344047, 1, 2344302, 3, 2345316, 2346089, 2348143, 1, 2345583, 1, 2345844, 2, 2346350, 2346612, 1, 2346863, 1, 2347122, 1, 2347369, 1, 2347617, 1, 2347884, 1, 2348404, 5, 2348898, 2350696, 2350955, 2351726, 2351993, 1, 2349157, 1, 2349413, 1, 2349670, 1, 2349929, 1, 2350188, 1, 2350441, 1, 2351201, 1, 2351457, 1, 2352225, 1, 2352494, 1, 2352750, 1, 2352993, 2, 2353508, 2354290, 1, 2353775, 1, 2354036, 5, 2354791, 2355049, 2355570, 2356595, 2357625, 1, 2355314, 1, 2355809, 1, 2356086, 1, 2356325, 1, 2356836, 1, 2357103, 1, 2357364, 1, 2357872, 1, 2358132, 2, 2358377, 2359151, 1, 2358625, 1, 2358894, 1, 2359404, 1, 2359663, 1, 2359911, 1, 2360169, 1, 2360419, 1, 2360673, 1, 2360940, 5, 2361443, 2362219, 2362736, 2363252, 2364279, 1, 2361704, 1, 2361953, 1, 2362465, 1, 2362977, 2, 2363489, 2363763, 1, 2364001, 1, 2364513, 1, 2364794, 4, 2365285, 2365543, 2370926, 2371187, 1, 2365800, 1, 2366068, 5, 2366253, 2368101, 2368872, 2369385, 2370681, 1, 2366580, 1, 2366824, 1, 2367081, 1, 2367346, 1, 2367604, 1, 2367865, 1, 2368357, 1, 2368622, 1, 2369139, 1, 2369637, 1, 2369908, 1, 2370152, 1, 2370419, 1, 2371685, 1, 2371939, 1, 2372212, 3, 2372705, 2373734, 2376051, 2, 2372973, 2373234, 1, 2373473, 1, 2373999, 1, 2374254, 1, 2374505, 1, 2374772, 1, 2375017, 1, 2375275, 1, 2375535, 1, 2375790, 1, 2376308, 1, 2376562, 1, 2376805, 1, 2377072, 1, 2377332, 1, 2377583, 1, 2377838, 9, 2378337, 2380642, 2381925, 2389862, 2390121, 2392172, 2393971, 2394996, 2395257, 2, 2378598, 2379629, 1, 2378866, 1, 2379119, 1, 2379374, 1, 2379881, 1, 2380148, 1, 2380389, 1, 2380897, 1, 2381171, 1, 2381409, 1, 2381678, 4, 2382179, 2383981, 2385008, 2386294, 1, 2382452, 1, 2382706, 1, 2382953, 1, 2383203, 1, 2383457, 1, 2383724, 1, 2384229, 1, 2384494, 1, 2384756, 1, 2385256, 1, 2385505, 1, 2385774, 1, 2386036, 2, 2386529, 2387557, 1, 2386804, 1, 2387061, 1, 2387315, 1, 2387822, 1, 2388013, 1, 2388340, 1, 2388584, 1, 2388841, 1, 2389106, 1, 2389364, 1, 2389625, 2, 2390374, 2390894, 1, 2390633, 1, 2391156, 1, 2391397, 1, 2391666, 1, 2391923, 1, 2392425, 1, 2392688, 1, 2392947, 2, 2393189, 2393449, 1, 2393715, 1, 2394212, 1, 2394479, 1, 2394740, 1, 2395501, 1, 2395745, 1, 2396009, 1, 2396259, 5, 2396769, 2397538, 2404207, 2404976, 2414963, 1, 2397027, 1, 2397298, 3, 2397797, 2401644, 2402418, 2, 2398052, 2399340, 1, 2398308, 1, 2398569, 1, 2398830, 1, 2399079, 1, 2399596, 1, 2399849, 1, 2400115, 1, 2400360, 1, 2400621, 1, 2400869, 1, 2401134, 1, 2401396, 1, 2401893, 1, 2402157, 1, 2402671, 1, 2402921, 1, 2403172, 1, 2403429, 1, 2403698, 1, 2403961, 1, 2404458, 1, 2404713, 2, 2405224, 2407284, 1, 2405473, 2, 2405747, 2406516, 1, 2405993, 1, 2406259, 1, 2406761, 1, 2407011, 1, 2407545, 2, 2407795, 2411126, 2, 2408037, 2408557, 1, 2408308, 1, 2408801, 1, 2409068, 1, 2409324, 1, 2409587, 1, 2409841, 1, 2410101, 1, 2410337, 1, 2410610, 1, 2410853, 1, 2411365, 1, 2411634, 1, 2411897, 1, 2412147, 1, 2412397, 1, 2412641, 1, 2412908, 1, 2413164, 1, 2413427, 1, 2413681, 1, 2413941, 1, 2414177, 1, 2414450, 1, 2414693, 1, 2415216, 1, 2415409, 2, 2415667, 2415924, 13, 2416481, 2419299, 2423908, 2428263, 2429292, 2431598, 2432111, 2432625, 2433907, 2434420, 2442101, 2444406, 2445945, 1, 2416754, 2, 2417005, 2418552, 1, 2417263, 1, 2417518, 1, 2417769, 1, 2418031, 1, 2418291, 1, 2418793, 1, 2419059, 2, 2419564, 2422127, 1, 2419823, 1, 2420083, 2, 2420329, 2421109, 1, 2420590, 1, 2420839, 1, 2421362, 1, 2421605, 1, 2421875, 1, 2422389, 1, 2422638, 1, 2422900, 1, 2423141, 1, 2423410, 1, 2423667, 3, 2424165, 2425961, 2426735, 2, 2424417, 2425712, 1, 2424694, 1, 2424943, 1, 2425205, 1, 2425458, 1, 2426222, 1, 2426471, 1, 2426982, 1, 2427247, 1, 2427502, 1, 2427759, 1, 2428014, 1, 2428521, 1, 2428782, 1, 2429029, 1, 2429537, 1, 2429810, 1, 2430055, 1, 2430309, 1, 2430573, 1, 2430821, 1, 2431086, 1, 2431348, 1, 2431849, 1, 2432371, 1, 2432885, 1, 2433129, 1, 2433394, 1, 2433657, 1, 2434160, 4, 2434605, 2436453, 2439016, 2440818, 1, 2434931, 1, 2435176, 1, 2435425, 1, 2435696, 1, 2435941, 1, 2436196, 1, 2436722, 2, 2436969, 2437744, 1, 2437230, 1, 2437479, 1, 2438002, 1, 2438249, 1, 2438515, 1, 2438757, 1, 2439285, 1, 2439539, 1, 2439785, 1, 2440033, 1, 2440307, 1, 2440557, 1, 2441081, 1, 2441261, 2, 2441521, 2441778, 1, 2442349, 1, 2442597, 1, 2442866, 1, 2443105, 1, 2443380, 1, 2443625, 1, 2443887, 1, 2444142, 1, 2444645, 1, 2444908, 1, 2445167, 1, 2445424, 1, 2445669, 5, 2446381, 2447719, 2448488, 2448748, 2449520, 3, 2446693, 2447215, 2447477, 1, 2446965, 1, 2447983, 1, 2448238, 1, 2449000, 1, 2449272, 1, 2449766, 6, 2450273, 2451813, 2455145, 2458988, 2459759, 2460531, 2, 2450531, 2451058, 1, 2450804, 1, 2451315, 1, 2451564, 2, 2452071, 2453358, 1, 2452325, 1, 2452594, 1, 2452845, 1, 2453089, 1, 2453620, 1, 2453864, 1, 2454117, 1, 2454388, 1, 2454633, 1, 2454883, 2, 2455396, 2457191, 1, 2455649, 1, 2455925, 1, 2456178, 1, 2456421, 1, 2456673, 1, 2456942, 1, 2457458, 1, 2457697, 1, 2457968, 1, 2458216, 1, 2458473, 1, 2458723, 1, 2459253, 1, 2459507, 1, 2460003, 1, 2460264, 1, 2460777, 2, 2461036, 2461814, 1, 2461295, 1, 2461550, 4, 2462307, 2464371, 2467957, 2480246, 2, 2462569, 2463343, 1, 2462834, 1, 2463075, 1, 2463596, 1, 2463855, 1, 2464110, 2, 2464617, 2465132, 1, 2464877, 1, 2465377, 1, 2465646, 1, 2465908, 2, 2466151, 2466924, 1, 2466420, 1, 2466674, 1, 2467173, 1, 2467443, 1, 2467699, 3, 2468193, 2470245, 2471017, 1, 2468460, 2, 2468723, 2468980, 1, 2469225, 1, 2469484, 1, 2469732, 1, 2469989, 1, 2470515, 1, 2470772, 5, 2471265, 2473060, 2473320, 2474860, 2478198, 1, 2471534, 1, 2471783, 1, 2472053, 1, 2472300, 1, 2472545, 1, 2472818, 1, 2473583, 1, 2473840, 1, 2474096, 1, 2474341, 1, 2474610, 2, 2475105, 2476649, 1, 2475380, 1, 2475621, 1, 2475890, 1, 2476129, 1, 2476396, 1, 2476898, 1, 2477170, 1, 2477417, 1, 2477685, 1, 2477933, 2, 2478433, 2479716, 1, 2478700, 1, 2478949, 1, 2479214, 1, 2479476, 1, 2479972, 1, 2480496, 1, 2480737, 1, 2481010, 1, 2481267, 1, 2481516, 7, 2482017, 2483300, 2484069, 2484583, 2484841, 2485874, 2488435, 2, 2482290, 2482803, 1, 2482546, 1, 2483045, 1, 2483567, 1, 2483828, 1, 2484334, 2, 2485102, 2485619, 1, 2485298, 1, 2486127, 1, 2486386, 1, 2486573, 1, 2486882, 1, 2487137, 1, 2487410, 1, 2487666, 1, 2487909, 1, 2488164, 11, 2488877, 2490465, 2491235, 2492516, 2493288, 2495081, 2495599, 2495859, 2496116, 2498165, 2499706, 4, 2489137, 2489394, 2489651, 2489972, 1, 2490213, 1, 2490739, 1, 2490977, 2, 2491489, 2492274, 1, 2491760, 1, 2492005, 1, 2492783, 1, 2493044, 3, 2493489, 2494002, 2494565, 1, 2493750, 1, 2494257, 1, 2494771, 1, 2495341, 1, 2496361, 1, 2496621, 1, 2496865, 1, 2497140, 1, 2497381, 2, 2497636, 2497907, 1, 2498411, 1, 2498677, 1, 2498933, 1, 2499172, 1, 2499439, 5, 2500193, 2500453, 2502504, 2504558, 2505849, 1, 2500722, 2, 2500974, 2501999, 1, 2501225, 1, 2501492, 1, 2501753, 1, 2502254, 2, 2502757, 2503273, 1, 2503020, 1, 2503535, 1, 2503792, 1, 2504041, 1, 2504291, 1, 2504801, 1, 2505064, 1, 2505332, 1, 2505569, 4, 2506285, 2508140, 2508909, 2509426, 4, 2506593, 2506853, 2507631, 2507893, 2, 2507119, 2507381, 1, 2508389, 1, 2508658, 1, 2509164, 1, 2509679, 2, 2509869, 2512240, 1, 2510179, 1, 2510453, 1, 2510706, 1, 2510962, 1, 2511205, 1, 2511470, 1, 2511715, 1, 2511993, 1, 2512485, 2, 2512685, 2514529, 1, 2512993, 1, 2513254, 1, 2513522, 1, 2513769, 1, 2514019, 1, 2514273, 1, 2514798, 1, 2515301, 2, 2515566, 2516594, 1, 2515817, 1, 2516078, 1, 2516327, 2, 2516839, 2518137, 1, 2517106, 1, 2517349, 1, 2517605, 1, 2517870, 1, 2518629, 6, 2519139, 2526568, 2529129, 2530159, 2530416, 2539380, 4, 2519397, 2521448, 2522729, 2524524, 2, 2519660, 2520947, 1, 2519916, 1, 2520165, 1, 2520430, 1, 2520692, 1, 2521203, 1, 2521697, 1, 2521966, 1, 2522215, 1, 2522469, 1, 2522996, 1, 2523237, 1, 2523501, 1, 2523749, 1, 2524014, 1, 2524276, 1, 2524769, 1, 2525037, 1, 2525281, 1, 2525556, 1, 2525801, 1, 2526063, 1, 2526318, 1, 2526817, 2, 2527084, 2527605, 1, 2527333, 1, 2527859, 1, 2528116, 1, 2528361, 1, 2528623, 1, 2528878, 1, 2529395, 1, 2529652, 1, 2529907, 4, 2530661, 2532716, 2534255, 2536562, 1, 2530915, 1, 2531188, 1, 2531425, 1, 2531700, 1, 2531945, 1, 2532207, 1, 2532462, 1, 2532975, 1, 2533220, 1, 2533481, 1, 2533742, 1, 2533991, 1, 2534510, 1, 2534757, 1, 2535022, 1, 2535284, 1, 2535529, 1, 2535777, 1, 2536044, 1, 2536293, 1, 2536805, 1, 2537075, 1, 2537331, 1, 2537577, 1, 2537839, 1, 2538094, 1, 2538348, 1, 2538597, 1, 2538867, 1, 2539123, 3, 2539621, 2541929, 2544242, 1, 2539886, 2, 2540132, 2540915, 1, 2540389, 1, 2540644, 1, 2541161, 1, 2541423, 1, 2541678, 1, 2542190, 1, 2542439, 1, 2542709, 1, 2542953, 1, 2543219, 1, 2543464, 1, 2543717, 1, 2543986, 2, 2544481, 2549605, 2, 2544685, 2546804, 2, 2545000, 2546028, 1, 2545257, 1, 2545511, 1, 2545768, 1, 2546287, 1, 2546551, 1, 2547045, 1, 2547314, 1, 2547570, 1, 2547813, 1, 2548083, 1, 2548340, 1, 2548594, 1, 2548841, 1, 2549089, 1, 2549356, 1, 2549869, 1, 2550117, 1, 2550380, 1, 2550649, 5, 2551137, 2552162, 2553957, 2564974, 2565241, 1, 2551406, 1, 2551662, 1, 2551905, 1, 2552421, 1, 2552697, 1, 2552934, 1, 2553193, 1, 2553452, 1, 2553705, 4, 2554210, 2555495, 2563180, 2564723, 1, 2554482, 1, 2554735, 1, 2554999, 1, 2555251, 2, 2555745, 2561644, 1, 2556026, 1, 2556261, 1, 2556461, 2, 2556774, 2559351, 1, 2557036, 1, 2557295, 1, 2557551, 1, 2557810, 1, 2558064, 1, 2558316, 1, 2558561, 1, 2558830, 1, 2559077, 1, 2559585, 1, 2559852, 1, 2560108, 1, 2560368, 1, 2560620, 1, 2560865, 1, 2561134, 1, 2561381, 1, 2561889, 1, 2562163, 1, 2562419, 1, 2562661, 1, 2562931, 1, 2563425, 1, 2563699, 1, 2563944, 1, 2564197, 1, 2564467, 1, 2565497, 3, 2565989, 2566504, 2566771, 1, 2566254, 19, 2567212, 2567472, 2585953, 2612579, 2613093, 2632038, 2635112, 2636393, 2675564, 2703725, 2703982, 2704751, 2741872, 2743666, 2769267, 2770036, 2771317, 2781047, 2782585, 6, 2567728, 2570545, 2573618, 2576691, 2580276, 2583861, 9, 2567985, 2568498, 2568755, 2569012, 2569269, 2569526, 2569783, 2570040, 2570297, 1, 2568289, 10, 2570800, 2571057, 2571314, 2571571, 2572084, 2572341, 2572598, 2572855, 2573112, 2573369, 1, 2571873, 10, 2573872, 2574129, 2574642, 2574899, 2575156, 2575413, 2575670, 2575927, 2576184, 2576441, 1, 2574433, 10, 2576944, 2577201, 2577714, 2577971, 2578228, 2578485, 2578742, 2578999, 2579512, 2580025, 1, 2577505, 1, 2579297, 1, 2579809, 10, 2580528, 2580785, 2581042, 2581299, 2581556, 2581813, 2582326, 2582839, 2583352, 2583609, 1, 2582113, 1, 2582625, 1, 2583137, 4, 2584112, 2584369, 2585394, 2585651, 3, 2584673, 2584930, 2585187, 15, 2586209, 2588003, 2593896, 2595945, 2598506, 2598764, 2603117, 2604142, 2606192, 2606449, 2606706, 2607475, 2607988, 2611064, 2611321, 3, 2586470, 2586985, 2587245, 1, 2586741, 1, 2587489, 1, 2587749, 4, 2588261, 2590313, 2591347, 2592884, 1, 2588461, 6, 2588721, 2588978, 2589235, 2589492, 2589749, 2590006, 1, 2590574, 1, 2590823, 1, 2591091, 1, 2591593, 1, 2591853, 1, 2592105, 1, 2592364, 1, 2592613, 1, 2593135, 1, 2593394, 1, 2593657, 1, 2594162, 1, 2594405, 1, 2594670, 1, 2594920, 1, 2595173, 1, 2595433, 1, 2595700, 4, 2596194, 2596456, 2596972, 2598002, 1, 2596725, 1, 2597237, 1, 2597490, 1, 2597733, 1, 2598265, 2, 2599009, 2600044, 1, 2599270, 1, 2599525, 1, 2599788, 2, 2600293, 2600809, 1, 2600558, 1, 2601070, 1, 2601319, 1, 2601572, 1, 2601839, 1, 2602100, 1, 2602355, 1, 2602597, 1, 2602865, 1, 2603369, 1, 2603628, 1, 2603897, 2, 2604389, 2605927, 1, 2604658, 1, 2604911, 1, 2605171, 1, 2605417, 1, 2605683, 1, 2606963, 1, 2607209, 1, 2607732, 2, 2608232, 2610025, 2, 2608481, 2609509, 1, 2608756, 1, 2608993, 1, 2609262, 1, 2609778, 1, 2610279, 1, 2610549, 1, 2610789, 1, 2611553, 1, 2611822, 1, 2612078, 1, 2612321, 1, 2612857, 13, 2613345, 2615906, 2617445, 2618728, 2619241, 2619500, 2621549, 2623854, 2625135, 2625650, 2627955, 2629492, 2630005, 2, 2613618, 2614900, 2, 2613862, 2614638, 1, 2614133, 1, 2614380, 1, 2615144, 1, 2615397, 1, 2615666, 1, 2616178, 1, 2616437, 1, 2616673, 1, 2616946, 1, 2617209, 3, 2617700, 2617965, 2618222, 1, 2618471, 1, 2618997, 1, 2619756, 1, 2620015, 1, 2620279, 1, 2620531, 1, 2620776, 1, 2621033, 1, 2621296, 2, 2621793, 2622569, 1, 2622060, 1, 2622309, 1, 2622830, 1, 2623081, 1, 2623342, 1, 2623589, 2, 2624099, 2624871, 1, 2624357, 1, 2624626, 1, 2625384, 2, 2625901, 2626930, 1, 2626145, 1, 2626420, 1, 2626657, 2, 2627177, 2627705, 1, 2627443, 1, 2628212, 1, 2628457, 1, 2628726, 1, 2628961, 1, 2629228, 1, 2629736, 2, 2630246, 2631800, 1, 2630501, 1, 2630773, 1, 2631009, 1, 2631269, 1, 2631540, 3, 2632297, 2633324, 2634866, 1, 2632556, 1, 2632809, 1, 2633063, 2, 2633577, 2634092, 1, 2633831, 1, 2634345, 1, 2634599, 1, 2635380, 1, 2635631, 1, 2635890, 1, 2636129, 12, 2636645, 2637414, 2639463, 2642025, 2642284, 2652014, 2658928, 2659186, 2663795, 2667636, 2670198, 2673528, 1, 2636908, 1, 2637156, 1, 2637684, 3, 2637925, 2638696, 2639225, 1, 2638181, 1, 2638446, 1, 2638963, 2, 2639720, 2640245, 1, 2639988, 1, 2640498, 1, 2640741, 1, 2640941, 3, 2641201, 2641458, 2641715, 4, 2642533, 2642793, 2643308, 2651757, 1, 2643047, 1, 2643557, 2, 2643812, 2650738, 2, 2644083, 2646902, 1, 2644333, 1, 2644577, 1, 2644844, 1, 2645100, 1, 2645363, 1, 2645617, 1, 2645877, 1, 2646113, 1, 2646386, 1, 2646629, 1, 2647141, 1, 2647410, 1, 2647673, 1, 2647923, 1, 2648173, 1, 2648417, 1, 2648684, 1, 2648940, 1, 2649203, 1, 2649457, 1, 2649717, 1, 2649953, 1, 2650226, 1, 2650469, 1, 2650925, 2, 2651185, 2651442, 3, 2652257, 2654055, 2658153, 2, 2652524, 2652782, 1, 2653027, 1, 2653289, 1, 2653537, 1, 2653804, 1, 2654309, 1, 2654578, 4, 2654765, 2656101, 2656622, 2657907, 1, 2655088, 1, 2655343, 1, 2655603, 1, 2655860, 1, 2656356, 1, 2656865, 1, 2657129, 1, 2657388, 1, 2657651, 1, 2658420, 1, 2658661, 3, 2659429, 2662761, 2663027, 2, 2659683, 2661495, 1, 2659954, 1, 2660193, 1, 2660451, 1, 2660715, 1, 2660965, 1, 2661234, 1, 2661743, 1, 2662002, 1, 2662251, 1, 2662515, 1, 2663284, 1, 2663486, 2, 2664040, 2666868, 3, 2664293, 2665064, 2666089, 1, 2664569, 1, 2664805, 1, 2665327, 1, 2665583, 1, 2665835, 1, 2666350, 1, 2666599, 1, 2667109, 1, 2667364, 2, 2667873, 2668154, 1, 2668400, 1, 2668641, 1, 2668916, 1, 2669170, 1, 2669417, 1, 2669667, 1, 2669931, 1, 2670437, 1, 2670637, 2, 2670956, 2671988, 1, 2671209, 1, 2671470, 1, 2671717, 1, 2672232, 1, 2672489, 1, 2672754, 1, 2673012, 1, 2673273, 1, 2673765, 1, 2674020, 1, 2674221, 1, 2674534, 1, 2674799, 1, 2675058, 1, 2675309, 8, 2675809, 2684005, 2688361, 2690156, 2690927, 2698612, 2699381, 2702713, 4, 2676071, 2678125, 2679667, 2680180, 2, 2676269, 2677875, 5, 2676529, 2676786, 2677043, 2677300, 2677557, 2, 2678373, 2678633, 1, 2678894, 1, 2679143, 1, 2679407, 1, 2679912, 3, 2680418, 2681710, 2682740, 1, 2680690, 1, 2680933, 1, 2681185, 1, 2681444, 1, 2681957, 1, 2682227, 1, 2682483, 1, 2682981, 1, 2683246, 1, 2683493, 1, 2683748, 2, 2684277, 2687096, 1, 2684530, 2, 2684717, 2686575, 1, 2685028, 1, 2685285, 1, 2685485, 1, 2685804, 1, 2686057, 1, 2686323, 1, 2686830, 2, 2687333, 2687861, 1, 2687588, 1, 2688115, 3, 2688611, 2689127, 2689904, 1, 2688875, 1, 2689384, 1, 2689652, 1, 2690409, 1, 2690663, 5, 2691183, 2692976, 2693746, 2695541, 2696823, 1, 2691442, 1, 2691696, 1, 2691948, 1, 2692193, 1, 2692462, 1, 2692709, 1, 2693232, 1, 2693497, 2, 2693985, 2694501, 1, 2694252, 1, 2694772, 1, 2695028, 1, 2695269, 1, 2695794, 1, 2696041, 1, 2696307, 1, 2696552, 2, 2697061, 2697833, 1, 2697330, 1, 2697587, 1, 2698094, 1, 2698343, 1, 2698862, 1, 2699123, 2, 2699635, 2700660, 1, 2699880, 1, 2700133, 1, 2700388, 2, 2700901, 2701172, 1, 2701413, 1, 2701682, 1, 2701929, 1, 2702190, 1, 2702439, 1, 2702953, 1, 2703214, 1, 2703463, 1, 2704239, 1, 2704486, 10, 2704999, 2705772, 2708845, 2709102, 2710639, 2716528, 2717042, 2729331, 2731125, 2741624, 1, 2705255, 1, 2705529, 2, 2706020, 2707052, 1, 2706277, 2, 2706532, 2706802, 2, 2707311, 2708601, 1, 2707575, 1, 2707817, 1, 2708078, 1, 2708327, 2, 2709351, 2710388, 1, 2709613, 1, 2709857, 1, 2710126, 3, 2710884, 2711148, 2711412, 4, 2711650, 2712686, 2713712, 2715251, 1, 2711905, 1, 2712172, 1, 2712428, 1, 2712943, 1, 2713204, 1, 2713445, 1, 2713970, 1, 2714217, 1, 2714478, 1, 2714740, 1, 2714995, 1, 2715508, 1, 2715759, 1, 2716015, 1, 2716268, 1, 2716774, 7, 2717281, 2718051, 2718821, 2720107, 2721901, 2724468, 2728311, 1, 2717548, 1, 2717804, 1, 2718309, 1, 2718579, 1, 2719080, 1, 2719333, 1, 2719585, 1, 2719844, 3, 2720357, 2720873, 2721654, 1, 2720612, 1, 2721134, 1, 2721383, 3, 2722145, 2723685, 2724211, 1, 2722420, 1, 2722676, 1, 2722921, 1, 2723182, 1, 2723431, 1, 2723941, 4, 2724709, 2724969, 2726005, 2726777, 1, 2725221, 1, 2725492, 1, 2725736, 1, 2726254, 1, 2726501, 1, 2726957, 1, 2727270, 1, 2727529, 1, 2727798, 1, 2728037, 1, 2728545, 1, 2728818, 1, 2729060, 1, 2729588, 1, 2729829, 1, 2730098, 1, 2730345, 1, 2730606, 1, 2730855, 2, 2731374, 2732658, 1, 2731636, 1, 2731873, 1, 2732137, 1, 2732398, 3, 2732845, 2738793, 2740340, 4, 2733164, 2734192, 2735731, 2737268, 1, 2733417, 1, 2733678, 1, 2733925, 1, 2734437, 1, 2734706, 1, 2734893, 1, 2735205, 1, 2735469, 1, 2735988, 1, 2736242, 1, 2736489, 1, 2736750, 1, 2736999, 1, 2737512, 1, 2737769, 1, 2738034, 1, 2738292, 1, 2738553, 1, 2739045, 1, 2739314, 1, 2739572, 1, 2739826, 1, 2740070, 2, 2740581, 2741352, 1, 2740837, 1, 2741102, 1, 2742113, 1, 2742386, 1, 2742644, 1, 2742889, 1, 2743150, 1, 2743412, 4, 2743905, 2756453, 2760297, 2763375, 6, 2744163, 2750823, 2753131, 2754157, 2754926, 2755955, 7, 2744369, 2746162, 2746931, 2747956, 2748469, 2749239, 2749812, 6, 2744626, 2744883, 2745140, 2745397, 2745654, 2745912, 2, 2746419, 2746677, 3, 2747188, 2747445, 2747704, 1, 2748213, 2, 2748726, 2748984, 1, 2749496, 1, 2750057, 1, 2750319, 1, 2750574, 2, 2751085, 2752114, 1, 2751333, 1, 2751598, 1, 2751860, 1, 2752353, 1, 2752622, 1, 2752884, 1, 2753396, 1, 2753653, 1, 2753906, 1, 2754405, 1, 2754675, 2, 2755171, 2755435, 1, 2755699, 1, 2756204, 3, 2756709, 2757998, 2758772, 1, 2756986, 1, 2757225, 1, 2757486, 1, 2757735, 1, 2758243, 1, 2758504, 1, 2759010, 1, 2759279, 1, 2759521, 1, 2759794, 1, 2760036, 3, 2760547, 2762085, 2762868, 1, 2760801, 1, 2761076, 1, 2761321, 1, 2761590, 1, 2761829, 2, 2762340, 2762611, 1, 2763125, 4, 2763623, 2763885, 2764142, 2767991, 1, 2764404, 1, 2764589, 2, 2764902, 2766452, 1, 2765153, 1, 2765411, 1, 2765673, 1, 2765934, 1, 2766183, 1, 2766697, 1, 2766956, 1, 2767220, 1, 2767461, 1, 2767716, 1, 2768238, 1, 2768489, 1, 2768750, 1, 2768999, 1, 2769507, 1, 2769778, 1, 2770280, 1, 2770543, 1, 2770802, 1, 2771041, 10, 2771553, 2771813, 2772586, 2773100, 2775918, 2778992, 2779250, 2779763, 2780532, 2780792, 2, 2772076, 2772340, 1, 2772841, 1, 2773356, 2, 2773614, 2774647, 1, 2773861, 1, 2774131, 1, 2774387, 1, 2774889, 1, 2775140, 1, 2775412, 1, 2775656, 2, 2776163, 2777957, 1, 2776436, 1, 2776681, 1, 2776943, 1, 2777198, 1, 2777441, 1, 2777708, 1, 2778226, 1, 2778465, 1, 2778732, 1, 2779512, 2, 2780001, 2780261, 3, 2781281, 2781797, 2782313, 1, 2781537, 1, 2782053, 4, 2782817, 2783088, 2783348, 2783608, 23, 2784048, 2802226, 2802529, 2830178, 2837347, 2840420, 2841701, 2868582, 2869095, 2878824, 2895977, 2907498, 2908524, 2918510, 2924143, 2940784, 2941298, 2981235, 2983540, 2996085, 3013750, 3014775, 3016569, 6, 2784304, 2787633, 2790706, 2794035, 2797364, 2800693, 9, 2784561, 2784818, 2785075, 2785332, 2785589, 2785846, 2786359, 2787128, 2787385, 1, 2786145, 2, 2786657, 2786914, 10, 2787888, 2788145, 2788658, 2788915, 2789172, 2789429, 2789686, 2789943, 2790200, 2790457, 1, 2788449, 10, 2790960, 2791473, 2791730, 2791987, 2792244, 2792501, 2792758, 2793271, 2793528, 2793785, 1, 2791265, 1, 2793057, 10, 2794288, 2794545, 2794802, 2795059, 2795316, 2795573, 2795830, 2796343, 2796856, 2797113, 1, 2796129, 1, 2796641, 10, 2797616, 2797873, 2798130, 2798387, 2798900, 2799157, 2799670, 2799927, 2800184, 2800441, 1, 2798689, 1, 2799457, 5, 2800944, 2801201, 2801458, 2801715, 2801972, 20, 2802738, 2803041, 2804834, 2805347, 2806372, 2807141, 2809702, 2809959, 2810216, 2810473, 2810732, 2811757, 2814318, 2816624, 2817650, 2822515, 2823540, 2825589, 2827128, 2827385, 2, 2803302, 2803816, 1, 2803573, 1, 2804076, 1, 2804321, 1, 2804577, 1, 2805089, 1, 2805621, 1, 2805876, 1, 2806117, 1, 2806639, 1, 2806892, 1, 2807412, 1, 2807668, 1, 2807905, 1, 2808109, 1, 2808432, 1, 2808681, 1, 2808940, 1, 2809196, 1, 2809441, 2, 2810977, 2811497, 1, 2811245, 4, 2812001, 2812773, 2813036, 2813549, 2, 2812268, 2812526, 1, 2813281, 1, 2813793, 1, 2814052, 4, 2814514, 2814820, 2815335, 2816109, 1, 2815073, 1, 2815593, 1, 2815841, 1, 2816353, 1, 2816880, 1, 2817125, 1, 2817380, 6, 2817843, 2818148, 2818924, 2819693, 2820719, 2821235, 1, 2818405, 1, 2818670, 1, 2819177, 1, 2819427, 1, 2819941, 1, 2820206, 1, 2820468, 1, 2820974, 1, 2821480, 1, 2821749, 1, 2821998, 1, 2822249, 1, 2822760, 1, 2823009, 1, 2823278, 2, 2823781, 2824040, 1, 2824293, 1, 2824562, 1, 2824809, 1, 2825070, 1, 2825319, 1, 2825838, 1, 2826100, 1, 2826348, 1, 2826597, 1, 2826868, 1, 2827617, 1, 2827886, 2, 2828142, 2828661, 1, 2828385, 1, 2828907, 1, 2829161, 1, 2829428, 1, 2829684, 1, 2829921, 6, 2830433, 2832997, 2834537, 2835311, 2836082, 2837109, 2, 2830699, 2832505, 1, 2830965, 1, 2831218, 1, 2831477, 1, 2831726, 1, 2831973, 1, 2832238, 1, 2832745, 4, 2833253, 2833518, 2833780, 2834037, 1, 2834296, 1, 2834789, 1, 2835045, 2, 2835566, 2835823, 1, 2836325, 1, 2836598, 1, 2836837, 4, 2837601, 2838117, 2839145, 2840185, 1, 2837870, 1, 2838372, 1, 2838633, 1, 2838892, 2, 2839399, 2839666, 1, 2839907, 2, 2840673, 2841199, 1, 2840942, 1, 2841460, 15, 2841906, 2842465, 2842978, 2843748, 2845029, 2845548, 2845805, 2848366, 2852975, 2857072, 2857329, 2859122, 2862451, 2867828, 2868344, 1, 2842162, 1, 2842738, 2, 2843233, 2843503, 2, 2844005, 2844271, 1, 2844524, 1, 2844769, 1, 2845293, 1, 2846057, 1, 2846318, 2, 2846561, 2848105, 1, 2846836, 2, 2847077, 2847337, 1, 2847599, 1, 2847854, 3, 2848613, 2850153, 2852212, 1, 2848882, 2, 2849121, 2849641, 1, 2849388, 1, 2849891, 3, 2850405, 2850667, 2851188, 1, 2850921, 1, 2851433, 1, 2851702, 1, 2851941, 1, 2852460, 1, 2852709, 2, 2853229, 2855794, 1, 2853477, 1, 2853748, 1, 2854002, 1, 2854249, 1, 2854499, 1, 2854753, 1, 2855020, 1, 2855276, 1, 2855545, 1, 2856039, 1, 2856297, 1, 2856545, 1, 2856814, 2, 2857585, 2857843, 1, 2858092, 1, 2858337, 1, 2858606, 1, 2858868, 3, 2859365, 2860141, 2860915, 1, 2859635, 1, 2859880, 1, 2860385, 1, 2860654, 1, 2861160, 1, 2861409, 1, 2861689, 1, 2861929, 1, 2862189, 5, 2862691, 2863204, 2864488, 2866028, 2866804, 1, 2862947, 1, 2863471, 1, 2863732, 1, 2863983, 1, 2864236, 3, 2864690, 2865012, 2865781, 1, 2865257, 1, 2865518, 1, 2866277, 1, 2866547, 1, 2867061, 1, 2867314, 1, 2867557, 1, 2868065, 1, 2868850, 7, 2869345, 2870629, 2871911, 2872169, 2873711, 2874741, 2877303, 4, 2869601, 2869872, 2870132, 2870392, 4, 2870885, 2871152, 2871412, 2871672, 3, 2872421, 2873204, 2873464, 2, 2872688, 2872952, 3, 2873968, 2874228, 2874488, 5, 2874991, 2876016, 2876274, 2876788, 2877048, 3, 2875248, 2875508, 2875768, 1, 2876536, 3, 2877537, 2878053, 2878569, 1, 2877793, 1, 2878309, 8, 2879073, 2884453, 2891368, 2891881, 2892911, 2894197, 2895223, 2895738, 8, 2879329, 2880356, 2880617, 2881389, 2882670, 2882928, 2883186, 2883961, 1, 2879597, 1, 2879841, 1, 2880101, 1, 2880878, 1, 2881141, 2, 2881633, 2882157, 1, 2881900, 1, 2882401, 1, 2883425, 1, 2883685, 1, 2884206, 4, 2884709, 2884980, 2885237, 2890873, 4, 2885473, 2888295, 2890350, 2890616, 1, 2885733, 2, 2885991, 2887538, 1, 2886248, 1, 2886501, 1, 2886773, 1, 2887009, 1, 2887269, 1, 2887777, 1, 2888037, 1, 2888552, 1, 2888805, 2, 2889070, 2889333, 1, 2889569, 1, 2889829, 1, 2890093, 1, 2891123, 1, 2891617, 1, 2892141, 1, 2892389, 1, 2892652, 3, 2893165, 2893427, 2893941, 1, 2893684, 1, 2894446, 1, 2894702, 1, 2894945, 1, 2895457, 13, 2896180, 2896482, 2898020, 2898789, 2899814, 2900327, 2900845, 2901614, 2902384, 2902642, 2905971, 2906996, 2907256, 2, 2896737, 2896994, 1, 2897263, 1, 2897525, 1, 2897779, 1, 2898281, 1, 2898541, 3, 2899056, 2899316, 2899576, 1, 2900084, 1, 2900577, 1, 2901093, 1, 2901356, 1, 2901865, 1, 2902121, 5, 2902834, 2903091, 2903393, 2904428, 2904949, 1, 2903654, 1, 2903910, 1, 2904165, 1, 2904691, 1, 2905188, 1, 2905441, 1, 2905697, 2, 2906209, 2906728, 1, 2906476, 2, 2907747, 2908261, 1, 2908025, 5, 2908769, 2911845, 2912873, 2914666, 2914927, 2, 2909031, 2910835, 1, 2909295, 1, 2909548, 1, 2909801, 1, 2910068, 1, 2910313, 1, 2910563, 1, 2911091, 1, 2911333, 1, 2911603, 1, 2912105, 1, 2912355, 1, 2912616, 1, 2913139, 1, 2913395, 1, 2913633, 1, 2913902, 1, 2914148, 1, 2914415, 4, 2915170, 2915700, 2916726, 2917495, 1, 2915429, 1, 2915956, 1, 2916193, 1, 2916460, 1, 2916965, 1, 2917235, 1, 2917737, 1, 2917998, 1, 2918247, 4, 2918753, 2921829, 2922611, 2923385, 2, 2919024, 2920310, 1, 2919280, 1, 2919538, 1, 2919791, 1, 2920056, 1, 2920553, 1, 2920825, 1, 2921057, 1, 2921326, 1, 2921577, 1, 2922097, 1, 2922353, 1, 2922857, 1, 2923117, 1, 2923625, 1, 2923891, 12, 2924385, 2925154, 2926183, 2927465, 2928235, 2928492, 2929774, 2930799, 2931312, 2931826, 2939508, 2940536, 2, 2924652, 2924916, 1, 2925420, 1, 2925673, 1, 2925934, 1, 2926439, 1, 2926700, 1, 2926949, 1, 2927219, 1, 2927726, 1, 2927975, 2, 2928740, 2928998, 1, 2929253, 1, 2929522, 2, 2930020, 2930535, 1, 2930281, 1, 2931044, 1, 2931558, 4, 2932065, 2932327, 2936681, 2937716, 2, 2932585, 2932847, 3, 2933102, 2933363, 2935668, 1, 2933625, 1, 2933870, 1, 2934132, 1, 2934376, 1, 2934629, 1, 2934900, 1, 2935151, 1, 2935406, 1, 2935909, 1, 2936178, 1, 2936425, 1, 2936940, 1, 2937196, 1, 2937441, 1, 2937960, 1, 2938221, 1, 2938473, 1, 2938731, 1, 2938991, 1, 2939246, 1, 2939752, 1, 2940009, 1, 2940259, 1, 2941025, 5, 2941537, 2956133, 2973289, 2976367, 2980981, 9, 2941795, 2942308, 2944361, 2944877, 2945646, 2946672, 2948467, 2949236, 2950006, 1, 2942053, 1, 2942581, 1, 2942817, 2, 2943084, 2943348, 1, 2943593, 1, 2943855, 1, 2944110, 1, 2944622, 1, 2945133, 1, 2945377, 1, 2945908, 1, 2946152, 1, 2946401, 2, 2946917, 2947432, 1, 2947187, 1, 2947685, 1, 2947949, 1, 2948197, 2, 2948720, 2948979, 1, 2949477, 1, 2949746, 1, 2950245, 2, 2950445, 2955129, 2, 2950753, 2953581, 1, 2951011, 1, 2951285, 1, 2951540, 1, 2951781, 1, 2951981, 1, 2952295, 1, 2952562, 1, 2952801, 1, 2953078, 1, 2953317, 1, 2953825, 1, 2954083, 1, 2954354, 1, 2954607, 1, 2954862, 1, 2955361, 1, 2955634, 1, 2955876, 3, 2956385, 2970981, 2971751, 1, 2956660, 2, 2956901, 2969966, 1, 2957170, 7, 2957357, 2958693, 2960998, 2963303, 2965100, 2966131, 2968692, 1, 2957684, 1, 2957928, 1, 2958177, 1, 2958446, 1, 2958961, 1, 2959221, 1, 2959457, 1, 2959724, 1, 2959980, 1, 2960229, 1, 2960499, 1, 2960755, 1, 2961269, 1, 2961516, 1, 2961772, 1, 2962021, 1, 2962289, 1, 2962549, 1, 2962785, 1, 2963052, 1, 2963570, 1, 2963813, 1, 2964065, 1, 2964340, 1, 2964581, 1, 2964850, 1, 2965349, 1, 2965619, 1, 2965875, 1, 2966380, 1, 2966625, 1, 2966894, 1, 2967156, 1, 2967397, 1, 2967665, 1, 2967925, 1, 2968161, 1, 2968428, 1, 2968937, 1, 2969196, 1, 2969444, 1, 2969701, 1, 2970213, 1, 2970483, 1, 2970739, 2, 2971243, 2971502, 1, 2972015, 1, 2972274, 1, 2972521, 1, 2972769, 1, 2973038, 2, 2973549, 2975086, 1, 2973793, 1, 2974051, 1, 2974313, 1, 2974574, 1, 2974823, 1, 2975342, 1, 2975593, 1, 2975854, 1, 2976103, 3, 2976622, 2978933, 2979959, 1, 2976884, 1, 2977128, 1, 2977385, 1, 2977651, 1, 2977901, 1, 2978145, 1, 2978420, 1, 2978657, 2, 2979182, 2979696, 1, 2979428, 1, 2980201, 1, 2980462, 1, 2980711, 3, 2981475, 2981993, 2983029, 1, 2981746, 1, 2982253, 2, 2982501, 2982764, 1, 2983277, 6, 2983779, 2984804, 2985573, 2986092, 2987121, 2988402, 2, 2984035, 2984297, 1, 2984562, 1, 2985071, 1, 2985332, 1, 2985842, 1, 2986352, 1, 2986593, 1, 2986866, 1, 2987381, 1, 2987621, 1, 2987891, 1, 2988148, 5, 2988641, 2990692, 2991461, 2994284, 2995315, 2, 2988912, 2990194, 1, 2989168, 1, 2989426, 1, 2989679, 1, 2989944, 1, 2990450, 1, 2990959, 1, 2991220, 1, 2991729, 2, 2991980, 2993009, 1, 2992229, 1, 2992499, 1, 2992755, 1, 2993260, 1, 2993509, 1, 2993779, 1, 2994035, 1, 2994533, 1, 2994803, 1, 2995059, 1, 2995561, 1, 2995821, 15, 2996274, 2996577, 3000932, 3001189, 3001959, 3002217, 3003754, 3005292, 3005549, 3005806, 3007343, 3008368, 3008626, 3013236, 3013496, 2, 2996846, 2997106, 2, 2997345, 2998116, 1, 2997614, 1, 2997865, 2, 2998373, 2999923, 1, 2998628, 1, 2998894, 1, 2999141, 1, 2999411, 1, 2999667, 1, 3000173, 1, 3000417, 1, 3000686, 2, 3001448, 3001705, 2, 3002468, 3002996, 1, 3002725, 1, 3003233, 1, 3003506, 1, 3004001, 1, 3004274, 1, 3004513, 1, 3004788, 1, 3005033, 2, 3006058, 3007093, 1, 3006305, 1, 3006572, 1, 3006817, 3, 3007600, 3007860, 3008120, 5, 3008823, 3009121, 3010669, 3011957, 3012984, 1, 3009389, 1, 3009653, 1, 3009908, 1, 3010159, 1, 3010414, 1, 3010933, 1, 3011179, 1, 3011432, 1, 3011689, 2, 3012206, 3012467, 1, 3012712, 1, 3013985, 1, 3014254, 1, 3014503, 4, 3015009, 3015525, 3016041, 3016309, 1, 3015265, 1, 3015781, 6, 3016801, 3017829, 3018342, 3018857, 3019119, 3019637, 3, 3017057, 3017326, 3017587, 1, 3018085, 1, 3018613, 1, 3019374, 26, 3020077, 3021360, 3024225, 3087202, 3090019, 3091044, 3091557, 3138406, 3138919, 3139176, 3141737, 3178347, 3181420, 3190125, 3198574, 3205231, 3255664, 3256690, 3258227, 3261044, 3261557, 3278966, 3279223, 3281784, 3288697, 3299962, 1, 3020404, 1, 3020665, 1, 3020912, 1, 3021157, 1, 3021616, 8, 3021873, 3022130, 3022387, 3022644, 3022901, 3023158, 3023671, 3023928, 1, 3023457, 22, 3024429, 3028065, 3029091, 3029860, 3030629, 3031398, 3032679, 3033704, 3033961, 3036524, 3043437, 3048302, 3067759, 3068016, 3068786, 3076979, 3078772, 3082357, 3084662, 3085175, 3085688, 3085945, 10, 3024689, 3025458, 3025715, 3025972, 3026229, 3026486, 3026743, 3027000, 3027257, 3027560, 2, 3024944, 3025201, 1, 3027809, 2, 3028333, 3028594, 1, 3028853, 1, 3029349, 1, 3029611, 1, 3030117, 1, 3030387, 1, 3030887, 1, 3031148, 1, 3031669, 1, 3031915, 1, 3032168, 1, 3032417, 1, 3032940, 1, 3033185, 1, 3033466, 3, 3034226, 3035763, 3036020, 2, 3034467, 3035251, 1, 3034741, 1, 3034996, 1, 3035504, 1, 3036277, 5, 3036769, 3037794, 3038822, 3042671, 3042929, 1, 3037038, 1, 3037300, 1, 3037537, 1, 3038053, 1, 3038322, 1, 3038564, 2, 3039021, 3041399, 3, 3039281, 3039538, 3039843, 1, 3040105, 1, 3040370, 1, 3040611, 1, 3040876, 1, 3041125, 1, 3041641, 1, 3041892, 1, 3042164, 1, 3042408, 1, 3043169, 5, 3043682, 3045225, 3045997, 3046771, 3047802, 1, 3043957, 1, 3044210, 1, 3044455, 1, 3044709, 1, 3044978, 1, 3045484, 1, 3045748, 1, 3046245, 1, 3046514, 1, 3047028, 1, 3047269, 1, 3047538, 1, 3048033, 5, 3048493, 3049828, 3064167, 3065961, 3066741, 1, 3048801, 1, 3049067, 1, 3049313, 1, 3049588, 4, 3050029, 3060834, 3062124, 3062899, 5, 3050337, 3051619, 3055974, 3057768, 3059823, 1, 3050606, 1, 3050855, 1, 3051116, 1, 3051365, 3, 3051881, 3053164, 3053941, 1, 3052146, 1, 3052387, 1, 3052652, 1, 3052901, 1, 3053409, 1, 3053687, 2, 3054192, 3054450, 1, 3054700, 1, 3054953, 1, 3055203, 1, 3055477, 1, 3055717, 2, 3056233, 3057004, 1, 3056499, 1, 3056756, 1, 3057249, 1, 3057524, 2, 3058025, 3059055, 1, 3058286, 1, 3058535, 1, 3058789, 1, 3059311, 1, 3059563, 1, 3060086, 1, 3060321, 1, 3060588, 1, 3061089, 2, 3061351, 3061612, 1, 3061868, 1, 3062373, 1, 3062643, 1, 3063144, 1, 3063393, 1, 3063659, 1, 3063909, 2, 3064437, 3064954, 1, 3064684, 1, 3065192, 1, 3065455, 1, 3065717, 1, 3066214, 1, 3066473, 1, 3066990, 1, 3067247, 1, 3067503, 1, 3068272, 1, 3068537, 6, 3069026, 3070308, 3072107, 3073389, 3074672, 3075698, 1, 3069281, 1, 3069544, 1, 3069793, 1, 3070073, 2, 3070563, 3071086, 1, 3070841, 1, 3071333, 1, 3071603, 1, 3071859, 1, 3072364, 1, 3072613, 1, 3072865, 1, 3073134, 1, 3073647, 1, 3073902, 1, 3074153, 1, 3074403, 1, 3074927, 1, 3075183, 1, 3075438, 2, 3075939, 3076727, 1, 3076201, 1, 3076466, 2, 3077217, 3078245, 1, 3077486, 1, 3077748, 1, 3077985, 1, 3078514, 5, 3079009, 3079523, 3080805, 3081064, 3081586, 1, 3079270, 1, 3079784, 1, 3080041, 1, 3080302, 1, 3080551, 1, 3081321, 1, 3081825, 1, 3082094, 1, 3082608, 1, 3082868, 1, 3083123, 1, 3083380, 1, 3083625, 1, 3083885, 1, 3084141, 1, 3084389, 1, 3084901, 1, 3085418, 1, 3086177, 1, 3086446, 1, 3086702, 1, 3086945, 1, 3087457, 2, 3087730, 3087987, 1, 3088225, 1, 3088429, 1, 3088741, 1, 3089011, 1, 3089249, 1, 3089523, 1, 3089761, 1, 3090281, 1, 3090546, 1, 3090787, 1, 3091314, 16, 3091757, 3094881, 3111010, 3112036, 3113573, 3114344, 3114601, 3116395, 3118188, 3124333, 3124846, 3127152, 3127410, 3133812, 3134584, 3137913, 8, 3092017, 3092274, 3092531, 3092788, 3093045, 3093302, 3093559, 3093863, 1, 3094127, 1, 3094369, 1, 3094644, 3, 3095140, 3103346, 3109494, 5, 3095341, 3097445, 3097961, 3098736, 3100019, 1, 3095650, 1, 3095905, 1, 3096174, 1, 3096420, 1, 3096673, 1, 3096935, 1, 3097189, 1, 3097700, 1, 3098222, 1, 3098471, 1, 3098984, 1, 3099247, 1, 3099502, 1, 3099749, 2, 3100259, 3101300, 1, 3100513, 1, 3100786, 1, 3101030, 2, 3101551, 3102322, 1, 3101806, 1, 3102053, 1, 3102575, 1, 3102827, 1, 3103077, 3, 3103533, 3105641, 3106420, 1, 3103854, 1, 3104111, 1, 3104301, 1, 3104613, 1, 3104886, 1, 3105129, 1, 3105388, 1, 3105902, 1, 3106151, 2, 3106605, 3108467, 1, 3106931, 1, 3107176, 1, 3107425, 1, 3107696, 1, 3107941, 1, 3108196, 1, 3108725, 1, 3108969, 1, 3109236, 2, 3109733, 3110777, 1, 3109998, 1, 3110252, 1, 3110521, 1, 3111282, 1, 3111525, 1, 3111799, 1, 3112295, 1, 3112549, 1, 3112808, 1, 3113071, 1, 3113319, 2, 3113833, 3114092, 2, 3114855, 3115635, 1, 3115112, 1, 3115380, 1, 3115877, 1, 3116137, 1, 3116661, 1, 3116916, 1, 3117153, 1, 3117409, 1, 3117682, 1, 3117941, 3, 3118441, 3120492, 3123565, 2, 3118691, 3120248, 1, 3118959, 1, 3119216, 1, 3119476, 1, 3119717, 1, 3119986, 2, 3120745, 3121267, 1, 3121008, 1, 3121507, 1, 3121768, 1, 3122034, 1, 3122277, 1, 3122537, 1, 3122786, 1, 3123045, 1, 3123314, 1, 3123813, 1, 3124084, 1, 3124592, 2, 3125095, 3125364, 1, 3125601, 1, 3125865, 1, 3126119, 1, 3126369, 1, 3126638, 1, 3126881, 5, 3127649, 3128674, 3128931, 3129709, 3133045, 1, 3127909, 1, 3128181, 1, 3128429, 1, 3129199, 1, 3129454, 2, 3129957, 3130473, 1, 3130227, 2, 3130735, 3132020, 1, 3130990, 1, 3131241, 1, 3131489, 1, 3131758, 1, 3132265, 1, 3132513, 1, 3132782, 1, 3133300, 1, 3133557, 2, 3134049, 3134312, 2, 3134817, 3136617, 1, 3135079, 2, 3135343, 3135858, 1, 3135598, 1, 3136097, 1, 3136365, 1, 3136870, 1, 3137135, 1, 3137394, 1, 3137645, 1, 3138164, 1, 3138674, 6, 3139425, 3139941, 3140457, 3140719, 3140981, 3141239, 1, 3139681, 1, 3140197, 1, 3141473, 15, 3141933, 3144802, 3146340, 3147877, 3157607, 3164521, 3164779, 3165804, 3168366, 3169904, 3172466, 3174515, 3176052, 3177337, 3177850, 8, 3142193, 3142450, 3142707, 3142964, 3143221, 3143478, 3143735, 3144050, 1, 3144293, 1, 3144563, 1, 3145065, 1, 3145331, 1, 3145571, 1, 3145845, 1, 3146099, 2, 3146597, 3147113, 1, 3146868, 1, 3147374, 1, 3147623, 3, 3148146, 3150453, 3157368, 1, 3148399, 1, 3148647, 1, 3148908, 1, 3149177, 1, 3149424, 1, 3149672, 1, 3149929, 1, 3150179, 1, 3150696, 1, 3150893, 5, 3151213, 3152494, 3153776, 3155058, 3156339, 1, 3151465, 1, 3151717, 1, 3151989, 1, 3152237, 1, 3152745, 1, 3152997, 1, 3153269, 1, 3153518, 1, 3154025, 1, 3154277, 1, 3154549, 1, 3154800, 1, 3155305, 1, 3155557, 1, 3155829, 1, 3156076, 1, 3156585, 1, 3156847, 1, 3157107, 1, 3157864, 1, 3158061, 4, 3158376, 3159916, 3160690, 3163251, 1, 3158629, 1, 3158885, 1, 3159148, 1, 3159397, 1, 3159652, 1, 3160175, 1, 3160439, 1, 3160933, 1, 3161206, 1, 3161445, 1, 3161714, 1, 3161971, 1, 3162213, 1, 3162468, 1, 3162669, 1, 3162937, 1, 3163504, 1, 3163749, 1, 3164005, 1, 3164260, 1, 3165033, 1, 3165294, 1, 3165543, 1, 3166050, 1, 3166309, 1, 3166578, 1, 3166836, 1, 3167091, 1, 3167344, 1, 3167585, 1, 3167843, 1, 3168101, 2, 3168612, 3169127, 1, 3168885, 1, 3169381, 1, 3169636, 1, 3170160, 1, 3170415, 1, 3170672, 1, 3170927, 1, 3171188, 1, 3171425, 1, 3171693, 1, 3171957, 1, 3172211, 2, 3172705, 3173993, 1, 3172967, 1, 3173217, 1, 3173486, 1, 3173729, 1, 3174257, 1, 3174772, 1, 3175023, 1, 3175282, 1, 3175529, 1, 3175779, 1, 3176308, 1, 3176553, 1, 3176814, 1, 3177063, 1, 3177583, 1, 3178082, 1, 3178611, 2, 3178853, 3180151, 1, 3179105, 1, 3179378, 1, 3179631, 1, 3179895, 1, 3180385, 1, 3180658, 1, 3180911, 1, 3181175, 6, 3181665, 3182949, 3183721, 3185519, 3186293, 3188601, 4, 3181936, 3182196, 3182453, 3182712, 2, 3183216, 3183480, 4, 3183973, 3184752, 3185012, 3185272, 2, 3184240, 3184504, 2, 3185776, 3186040, 5, 3186543, 3187312, 3187570, 3188084, 3188344, 2, 3186800, 3187064, 1, 3187832, 4, 3188848, 3189106, 3189620, 3189880, 1, 3189368, 6, 3190369, 3191397, 3191657, 3193455, 3194997, 3197305, 3, 3190640, 3190900, 3191160, 4, 3191909, 3192688, 3192948, 3193208, 2, 3192176, 3192440, 4, 3193710, 3194224, 3194484, 3194744, 1, 3193959, 5, 3195247, 3196016, 3196274, 3196788, 3197048, 2, 3195504, 3195768, 1, 3196536, 3, 3197552, 3197810, 3198328, 1, 3198072, 5, 3198817, 3200101, 3200873, 3202927, 3203957, 4, 3199088, 3199348, 3199605, 3199864, 2, 3200368, 3200632, 4, 3201125, 3202160, 3202420, 3202680, 3, 3201392, 3201652, 3201912, 3, 3203184, 3203444, 3203704, 3, 3204194, 3204463, 3204980, 1, 3204728, 17, 3205421, 3207777, 3208547, 3210085, 3210345, 3210603, 3211116, 3214189, 3217006, 3218543, 3225712, 3226226, 3250291, 3251828, 3252853, 3255160, 3255417, 8, 3205681, 3205938, 3206195, 3206452, 3206709, 3206966, 3207223, 3207480, 1, 3208050, 1, 3208306, 2, 3208808, 3209323, 1, 3209071, 1, 3209573, 1, 3209849, 1, 3210849, 5, 3211361, 3211876, 3212901, 3213164, 3213935, 1, 3211629, 1, 3212137, 1, 3212398, 1, 3212647, 1, 3213423, 1, 3213687, 2, 3214447, 3216244, 1, 3214708, 1, 3214952, 1, 3215205, 1, 3215476, 1, 3215721, 1, 3215971, 1, 3216488, 1, 3216756, 1, 3217253, 1, 3217529, 1, 3217762, 1, 3218021, 1, 3218277, 5, 3218795, 3224430, 3224688, 3224946, 3225461, 3, 3219045, 3219564, 3221874, 1, 3219300, 1, 3219813, 1, 3220070, 1, 3220340, 1, 3220577, 1, 3220850, 1, 3221106, 1, 3221359, 1, 3221623, 1, 3222121, 1, 3222375, 1, 3222632, 1, 3222900, 1, 3223137, 1, 3223410, 1, 3223666, 1, 3223919, 1, 3224183, 1, 3225205, 1, 3225958, 6, 3226465, 3226722, 3227497, 3249006, 3249522, 3249779, 1, 3226977, 1, 3227250, 1, 3227770, 1, 3228015, 1, 3228270, 1, 3228532, 1, 3228769, 1, 3229036, 2, 3229229, 3247724, 1, 3229488, 7, 3229744, 3232305, 3234866, 3237427, 3239988, 3242549, 3245110, 1, 3229997, 1, 3230256, 7, 3230512, 3230769, 3231026, 3231283, 3231540, 3231797, 3232054, 1, 3232557, 1, 3232816, 7, 3233072, 3233329, 3233586, 3233843, 3234100, 3234357, 3234614, 1, 3235117, 1, 3235376, 7, 3235632, 3235889, 3236146, 3236403, 3236660, 3236917, 3237174, 1, 3237677, 1, 3237936, 7, 3238192, 3238449, 3238706, 3238963, 3239220, 3239477, 3239734, 1, 3240237, 1, 3240496, 7, 3240752, 3241009, 3241266, 3241523, 3241780, 3242037, 3242294, 1, 3242797, 1, 3243056, 7, 3243312, 3243569, 3243826, 3244083, 3244340, 3244597, 3244854, 1, 3245357, 1, 3245616, 7, 3245872, 3246129, 3246386, 3246643, 3246900, 3247157, 3247414, 2, 3247977, 3248761, 1, 3248238, 1, 3248485, 1, 3249267, 1, 3250021, 1, 3250544, 1, 3250793, 1, 3251060, 1, 3251297, 1, 3251564, 2, 3252065, 3252325, 1, 3252588, 2, 3253106, 3254643, 1, 3253351, 1, 3253612, 1, 3253857, 1, 3254131, 1, 3254387, 1, 3254885, 2, 3255905, 3256183, 1, 3256423, 1, 3256953, 1, 3257206, 1, 3257454, 1, 3257705, 1, 3257953, 3, 3258467, 3258988, 3260020, 1, 3258738, 1, 3259233, 1, 3259507, 1, 3259752, 1, 3260274, 1, 3260527, 1, 3260779, 1, 3261281, 13, 3261741, 3262817, 3264610, 3265127, 3266409, 3267435, 3267692, 3268205, 3272558, 3275631, 3276658, 3277427, 3278454, 3, 3262001, 3262258, 3262515, 2, 3263086, 3263346, 1, 3263585, 1, 3263844, 1, 3264100, 1, 3264367, 1, 3264818, 1, 3265383, 1, 3265641, 1, 3265902, 1, 3266151, 1, 3266665, 1, 3266932, 1, 3267183, 1, 3267890, 2, 3268449, 3268976, 1, 3268718, 2, 3269220, 3271269, 1, 3269487, 1, 3269751, 1, 3269998, 1, 3270248, 1, 3270517, 1, 3270765, 1, 3271024, 1, 3271537, 1, 3271797, 1, 3272033, 1, 3272300, 2, 3272804, 3274087, 1, 3273074, 1, 3273317, 1, 3273572, 1, 3273843, 1, 3274337, 1, 3274610, 1, 3274857, 1, 3275105, 1, 3275374, 3, 3275888, 3276148, 3276408, 1, 3276897, 1, 3277166, 1, 3277672, 1, 3277925, 1, 3278180, 1, 3278689, 5, 3279457, 3280485, 3281001, 3281263, 3281525, 2, 3279720, 3279977, 1, 3280242, 1, 3280741, 6, 3282017, 3283045, 3283817, 3285871, 3286901, 3288183, 3, 3282288, 3282548, 3282808, 2, 3283312, 3283576, 4, 3284069, 3285104, 3285364, 3285624, 3, 3284336, 3284596, 3284856, 3, 3286128, 3286388, 3286648, 1, 3287151, 3, 3287408, 3287668, 3287928, 1, 3288423, 5, 3288929, 3289186, 3290215, 3291760, 3297907, 1, 3289461, 1, 3289708, 1, 3289964, 1, 3290473, 1, 3290725, 2, 3290977, 3291241, 1, 3291489, 2, 3292008, 3295599, 1, 3292261, 1, 3292526, 2, 3292717, 3294305, 1, 3293037, 1, 3293289, 1, 3293550, 1, 3293813, 1, 3294067, 1, 3294580, 1, 3294825, 1, 3295087, 1, 3295342, 1, 3295844, 1, 3296105, 1, 3296353, 1, 3296627, 1, 3296884, 1, 3297135, 1, 3297388, 1, 3297637, 1, 3298164, 1, 3298405, 1, 3298674, 1, 3298917, 1, 3299187, 1, 3299433, 1, 3299699, 4, 3300199, 3300468, 3300727, 3301242, 1, 3300967, 2, 3301488, 3301754, 1, 3301991, 27, 3302445, 3310128, 3315809, 3318370, 3319907, 3327844, 3648101, 3671910, 3673191, 3675496, 3675753, 3680618, 3681643, 3682668, 3688045, 3705710, 3780207, 3786864, 3787889, 3789170, 3795315, 3808628, 3813237, 3815287, 3816312, 3816569, 3818362, 11, 3302705, 3302962, 3303219, 3303476, 3303777, 3305058, 3306085, 3306601, 3306863, 3307637, 3307897, 1, 3304050, 1, 3304289, 1, 3304549, 1, 3304801, 1, 3305317, 1, 3305569, 1, 3305837, 1, 3306357, 1, 3307053, 1, 3307369, 4, 3308129, 3309157, 3309679, 3309941, 2, 3308333, 3308901, 1, 3308655, 1, 3309423, 2, 3310384, 3313457, 9, 3310641, 3310898, 3311155, 3311412, 3311669, 3312182, 3312439, 3312696, 3312953, 1, 3311969, 1, 3313249, 6, 3313712, 3314225, 3314738, 3314995, 3315252, 3315509, 1, 3314017, 1, 3314529, 3, 3316067, 3317102, 3317621, 1, 3316341, 1, 3316596, 1, 3316837, 1, 3317351, 1, 3317860, 1, 3318113, 1, 3318633, 1, 3318886, 1, 3319145, 1, 3319404, 1, 3319657, 5, 3320165, 3322728, 3326313, 3327087, 3327609, 1, 3320428, 1, 3320673, 1, 3320942, 1, 3321188, 1, 3321449, 1, 3321699, 1, 3321901, 1, 3322233, 1, 3322482, 3, 3322977, 3324009, 3325551, 1, 3323236, 1, 3323497, 1, 3323758, 1, 3324269, 1, 3324513, 1, 3324788, 1, 3325039, 1, 3325299, 2, 3325811, 3326069, 1, 3326578, 1, 3326819, 1, 3327342, 4, 3328101, 3646569, 3647084, 3647599, 2, 3328366, 3331951, 1, 3328628, 1, 3328873, 2, 3329123, 3329894, 1, 3329377, 1, 3329644, 1, 3330153, 1, 3330403, 1, 3330657, 1, 3330932, 1, 3331177, 1, 3331439, 1, 3331694, 1, 3332199, 1, 3332466, 1, 3332705, 2, 3332973, 3333232, 1, 3333480, 3, 3333676, 3333933, 3646057, 8, 3334194, 3482932, 3485749, 3497270, 3506231, 3512376, 3514937, 3516774, 1, 3334502, 3, 3334712, 3404601, 3474529, 16, 3334960, 3339313, 3343666, 3348019, 3352372, 3356725, 3361078, 3365431, 3369784, 3374137, 3378529, 3382882, 3387235, 3391588, 3395941, 3400294, 16, 3335216, 3335473, 3335730, 3335987, 3336244, 3336501, 3336758, 3337015, 3337272, 3337529, 3337825, 3338082, 3338339, 3338596, 3338853, 3339110, 16, 3339568, 3339825, 3340082, 3340339, 3340596, 3340853, 3341110, 3341367, 3341624, 3341881, 3342177, 3342434, 3342691, 3342948, 3343205, 3343462, 16, 3343920, 3344177, 3344434, 3344691, 3344948, 3345205, 3345462, 3345719, 3345976, 3346233, 3346529, 3346786, 3347043, 3347300, 3347557, 3347814, 16, 3348272, 3348529, 3348786, 3349043, 3349300, 3349557, 3349814, 3350071, 3350328, 3350585, 3350881, 3351138, 3351395, 3351652, 3351909, 3352166, 16, 3352624, 3352881, 3353138, 3353395, 3353652, 3353909, 3354166, 3354423, 3354680, 3354937, 3355233, 3355490, 3355747, 3356004, 3356261, 3356518, 16, 3356976, 3357233, 3357490, 3357747, 3358004, 3358261, 3358518, 3358775, 3359032, 3359289, 3359585, 3359842, 3360099, 3360356, 3360613, 3360870, 16, 3361328, 3361585, 3361842, 3362099, 3362356, 3362613, 3362870, 3363127, 3363384, 3363641, 3363937, 3364194, 3364451, 3364708, 3364965, 3365222, 16, 3365680, 3365937, 3366194, 3366451, 3366708, 3366965, 3367222, 3367479, 3367736, 3367993, 3368289, 3368546, 3368803, 3369060, 3369317, 3369574, 16, 3370032, 3370289, 3370546, 3370803, 3371060, 3371317, 3371574, 3371831, 3372088, 3372345, 3372641, 3372898, 3373155, 3373412, 3373669, 3373926, 16, 3374384, 3374641, 3374898, 3375155, 3375412, 3375669, 3375926, 3376183, 3376440, 3376697, 3376993, 3377250, 3377507, 3377764, 3378021, 3378278, 16, 3378736, 3378993, 3379250, 3379507, 3379764, 3380021, 3380278, 3380535, 3380792, 3381049, 3381345, 3381602, 3381859, 3382116, 3382373, 3382630, 16, 3383088, 3383345, 3383602, 3383859, 3384116, 3384373, 3384630, 3384887, 3385144, 3385401, 3385697, 3385954, 3386211, 3386468, 3386725, 3386982, 16, 3387440, 3387697, 3387954, 3388211, 3388468, 3388725, 3388982, 3389239, 3389496, 3389753, 3390049, 3390306, 3390563, 3390820, 3391077, 3391334, 16, 3391792, 3392049, 3392306, 3392563, 3392820, 3393077, 3393334, 3393591, 3393848, 3394105, 3394401, 3394658, 3394915, 3395172, 3395429, 3395686, 16, 3396144, 3396401, 3396658, 3396915, 3397172, 3397429, 3397686, 3397943, 3398200, 3398457, 3398753, 3399010, 3399267, 3399524, 3399781, 3400038, 16, 3400496, 3400753, 3401010, 3401267, 3401524, 3401781, 3402038, 3402295, 3402552, 3402809, 3403105, 3403362, 3403619, 3403876, 3404133, 3404390, 16, 3404848, 3409201, 3413554, 3417907, 3422260, 3426613, 3430966, 3435319, 3439672, 3444025, 3448417, 3452770, 3457123, 3461476, 3465829, 3470182, 16, 3405104, 3405361, 3405618, 3405875, 3406132, 3406389, 3406646, 3406903, 3407160, 3407417, 3407713, 3407970, 3408227, 3408484, 3408741, 3408998, 16, 3409456, 3409713, 3409970, 3410227, 3410484, 3410741, 3410998, 3411255, 3411512, 3411769, 3412065, 3412322, 3412579, 3412836, 3413093, 3413350, 16, 3413808, 3414065, 3414322, 3414579, 3414836, 3415093, 3415350, 3415607, 3415864, 3416121, 3416417, 3416674, 3416931, 3417188, 3417445, 3417702, 16, 3418160, 3418417, 3418674, 3418931, 3419188, 3419445, 3419702, 3419959, 3420216, 3420473, 3420769, 3421026, 3421283, 3421540, 3421797, 3422054, 16, 3422512, 3422769, 3423026, 3423283, 3423540, 3423797, 3424054, 3424311, 3424568, 3424825, 3425121, 3425378, 3425635, 3425892, 3426149, 3426406, 16, 3426864, 3427121, 3427378, 3427635, 3427892, 3428149, 3428406, 3428663, 3428920, 3429177, 3429473, 3429730, 3429987, 3430244, 3430501, 3430758, 16, 3431216, 3431473, 3431730, 3431987, 3432244, 3432501, 3432758, 3433015, 3433272, 3433529, 3433825, 3434082, 3434339, 3434596, 3434853, 3435110, 16, 3435568, 3435825, 3436082, 3436339, 3436596, 3436853, 3437110, 3437367, 3437624, 3437881, 3438177, 3438434, 3438691, 3438948, 3439205, 3439462, 16, 3439920, 3440177, 3440434, 3440691, 3440948, 3441205, 3441462, 3441719, 3441976, 3442233, 3442529, 3442786, 3443043, 3443300, 3443557, 3443814, 16, 3444272, 3444529, 3444786, 3445043, 3445300, 3445557, 3445814, 3446071, 3446328, 3446585, 3446881, 3447138, 3447395, 3447652, 3447909, 3448166, 16, 3448624, 3448881, 3449138, 3449395, 3449652, 3449909, 3450166, 3450423, 3450680, 3450937, 3451233, 3451490, 3451747, 3452004, 3452261, 3452518, 16, 3452976, 3453233, 3453490, 3453747, 3454004, 3454261, 3454518, 3454775, 3455032, 3455289, 3455585, 3455842, 3456099, 3456356, 3456613, 3456870, 16, 3457328, 3457585, 3457842, 3458099, 3458356, 3458613, 3458870, 3459127, 3459384, 3459641, 3459937, 3460194, 3460451, 3460708, 3460965, 3461222, 16, 3461680, 3461937, 3462194, 3462451, 3462708, 3462965, 3463222, 3463479, 3463736, 3463993, 3464289, 3464546, 3464803, 3465060, 3465317, 3465574, 16, 3466032, 3466289, 3466546, 3466803, 3467060, 3467317, 3467574, 3467831, 3468088, 3468345, 3468641, 3468898, 3469155, 3469412, 3469669, 3469926, 16, 3470384, 3470641, 3470898, 3471155, 3471412, 3471669, 3471926, 3472183, 3472440, 3472697, 3472993, 3473250, 3473507, 3473764, 3474021, 3474278, 2, 3474736, 3479089, 16, 3474992, 3475249, 3475506, 3475763, 3476020, 3476277, 3476534, 3476791, 3477048, 3477305, 3477601, 3477858, 3478115, 3478372, 3478629, 3478886, 14, 3479344, 3479601, 3479858, 3480115, 3480372, 3480629, 3480886, 3481143, 3481400, 3481657, 3481953, 3482210, 3482467, 3482724, 1, 3483237, 4, 3483440, 3484210, 3484728, 3485281, 2, 3483696, 3483961, 1, 3484516, 1, 3485027, 1, 3485492, 10, 3486001, 3486770, 3489075, 3490356, 3491637, 3492408, 3493177, 3494498, 3495780, 3496550, 1, 3486264, 1, 3486564, 4, 3487025, 3487540, 3488055, 3488612, 1, 3487332, 1, 3487844, 1, 3488306, 1, 3488868, 2, 3489379, 3489894, 1, 3489635, 1, 3490099, 2, 3490608, 3491123, 1, 3490872, 1, 3491385, 1, 3491938, 1, 3492150, 1, 3492710, 1, 3492912, 2, 3493425, 3493938, 1, 3493729, 1, 3494201, 2, 3494709, 3495224, 1, 3494967, 1, 3495481, 1, 3496037, 1, 3496246, 1, 3496760, 1, 3497059, 7, 3497522, 3499315, 3500597, 3502390, 3503159, 3504741, 3505510, 3, 3497780, 3498293, 3498809, 1, 3498082, 1, 3498547, 1, 3499061, 2, 3499568, 3500085, 1, 3499831, 1, 3500341, 3, 3500853, 3501369, 3501922, 1, 3501111, 1, 3501625, 1, 3502128, 1, 3502642, 1, 3502896, 2, 3503408, 3504178, 2, 3503672, 3503929, 1, 3504483, 1, 3504952, 1, 3505200, 1, 3505713, 1, 3505972, 7, 3506480, 3507249, 3508021, 3509302, 3510073, 3510881, 3511652, 1, 3506786, 1, 3507001, 1, 3507506, 1, 3507761, 2, 3508273, 3508787, 1, 3508582, 1, 3509043, 1, 3509604, 1, 3509815, 1, 3510328, 1, 3510577, 1, 3511095, 1, 3511393, 1, 3511860, 1, 3512114, 3, 3512633, 3513443, 3514212, 1, 3512933, 1, 3513139, 1, 3513697, 1, 3513913, 1, 3514423, 1, 3514672, 2, 3515184, 3515953, 1, 3515444, 1, 3515745, 1, 3516212, 1, 3516516, 2, 3516985, 3586913, 16, 3517232, 3521585, 3525938, 3530291, 3534644, 3538997, 3543350, 3547703, 3552056, 3556409, 3560801, 3565154, 3569507, 3573860, 3578213, 3582566, 16, 3517488, 3517745, 3518002, 3518259, 3518516, 3518773, 3519030, 3519287, 3519544, 3519801, 3520097, 3520354, 3520611, 3520868, 3521125, 3521382, 16, 3521840, 3522097, 3522354, 3522611, 3522868, 3523125, 3523382, 3523639, 3523896, 3524153, 3524449, 3524706, 3524963, 3525220, 3525477, 3525734, 16, 3526192, 3526449, 3526706, 3526963, 3527220, 3527477, 3527734, 3527991, 3528248, 3528505, 3528801, 3529058, 3529315, 3529572, 3529829, 3530086, 16, 3530544, 3530801, 3531058, 3531315, 3531572, 3531829, 3532086, 3532343, 3532600, 3532857, 3533153, 3533410, 3533667, 3533924, 3534181, 3534438, 16, 3534896, 3535153, 3535410, 3535667, 3535924, 3536181, 3536438, 3536695, 3536952, 3537209, 3537505, 3537762, 3538019, 3538276, 3538533, 3538790, 16, 3539248, 3539505, 3539762, 3540019, 3540276, 3540533, 3540790, 3541047, 3541304, 3541561, 3541857, 3542114, 3542371, 3542628, 3542885, 3543142, 16, 3543600, 3543857, 3544114, 3544371, 3544628, 3544885, 3545142, 3545399, 3545656, 3545913, 3546209, 3546466, 3546723, 3546980, 3547237, 3547494, 16, 3547952, 3548209, 3548466, 3548723, 3548980, 3549237, 3549494, 3549751, 3550008, 3550265, 3550561, 3550818, 3551075, 3551332, 3551589, 3551846, 16, 3552304, 3552561, 3552818, 3553075, 3553332, 3553589, 3553846, 3554103, 3554360, 3554617, 3554913, 3555170, 3555427, 3555684, 3555941, 3556198, 16, 3556656, 3556913, 3557170, 3557427, 3557684, 3557941, 3558198, 3558455, 3558712, 3558969, 3559265, 3559522, 3559779, 3560036, 3560293, 3560550, 16, 3561008, 3561265, 3561522, 3561779, 3562036, 3562293, 3562550, 3562807, 3563064, 3563321, 3563617, 3563874, 3564131, 3564388, 3564645, 3564902, 16, 3565360, 3565617, 3565874, 3566131, 3566388, 3566645, 3566902, 3567159, 3567416, 3567673, 3567969, 3568226, 3568483, 3568740, 3568997, 3569254, 16, 3569712, 3569969, 3570226, 3570483, 3570740, 3570997, 3571254, 3571511, 3571768, 3572025, 3572321, 3572578, 3572835, 3573092, 3573349, 3573606, 16, 3574064, 3574321, 3574578, 3574835, 3575092, 3575349, 3575606, 3575863, 3576120, 3576377, 3576673, 3576930, 3577187, 3577444, 3577701, 3577958, 16, 3578416, 3578673, 3578930, 3579187, 3579444, 3579701, 3579958, 3580215, 3580472, 3580729, 3581025, 3581282, 3581539, 3581796, 3582053, 3582310, 16, 3582768, 3583025, 3583282, 3583539, 3583796, 3584053, 3584310, 3584567, 3584824, 3585081, 3585377, 3585634, 3585891, 3586148, 3586405, 3586662, 14, 3587120, 3591473, 3595826, 3600179, 3604532, 3608885, 3613238, 3617079, 3621432, 3625785, 3630177, 3634530, 3638883, 3643236, 16, 3587376, 3587633, 3587890, 3588147, 3588404, 3588661, 3588918, 3589175, 3589432, 3589689, 3589985, 3590242, 3590499, 3590756, 3591013, 3591270, 16, 3591728, 3591985, 3592242, 3592499, 3592756, 3593013, 3593270, 3593527, 3593784, 3594041, 3594337, 3594594, 3594851, 3595108, 3595365, 3595622, 16, 3596080, 3596337, 3596594, 3596851, 3597108, 3597365, 3597622, 3597879, 3598136, 3598393, 3598689, 3598946, 3599203, 3599460, 3599717, 3599974, 16, 3600432, 3600689, 3600946, 3601203, 3601460, 3601717, 3601974, 3602231, 3602488, 3602745, 3603041, 3603298, 3603555, 3603812, 3604069, 3604326, 16, 3604784, 3605041, 3605298, 3605555, 3605812, 3606069, 3606326, 3606583, 3606840, 3607097, 3607393, 3607650, 3607907, 3608164, 3608421, 3608678, 16, 3609136, 3609393, 3609650, 3609907, 3610164, 3610421, 3610678, 3610935, 3611192, 3611449, 3611745, 3612002, 3612259, 3612516, 3612773, 3613030, 14, 3613488, 3613745, 3614002, 3614259, 3614516, 3614773, 3615030, 3615287, 3615544, 3615801, 3616097, 3616354, 3616611, 3616868, 16, 3617328, 3617585, 3617842, 3618099, 3618356, 3618613, 3618870, 3619127, 3619384, 3619641, 3619937, 3620194, 3620451, 3620708, 3620965, 3621222, 16, 3621680, 3621937, 3622194, 3622451, 3622708, 3622965, 3623222, 3623479, 3623736, 3623993, 3624289, 3624546, 3624803, 3625060, 3625317, 3625574, 16, 3626032, 3626289, 3626546, 3626803, 3627060, 3627317, 3627574, 3627831, 3628088, 3628345, 3628641, 3628898, 3629155, 3629412, 3629669, 3629926, 16, 3630384, 3630641, 3630898, 3631155, 3631412, 3631669, 3631926, 3632183, 3632440, 3632697, 3632993, 3633250, 3633507, 3633764, 3634021, 3634278, 16, 3634736, 3634993, 3635250, 3635507, 3635764, 3636021, 3636278, 3636535, 3636792, 3637049, 3637345, 3637602, 3637859, 3638116, 3638373, 3638630, 16, 3639088, 3639345, 3639602, 3639859, 3640116, 3640373, 3640630, 3640887, 3641144, 3641401, 3641697, 3641954, 3642211, 3642468, 3642725, 3642982, 10, 3643440, 3643697, 3643954, 3644211, 3644468, 3644725, 3644982, 3645239, 3645496, 3645753, 1, 3646307, 1, 3646829, 1, 3647333, 1, 3647860, 5, 3648355, 3648880, 3649140, 3649397, 3671160, 1, 3648633, 1, 3649646, 1, 3649895, 1, 3650093, 8, 3650403, 3653224, 3654507, 3657581, 3658864, 3663218, 3664499, 3668084, 2, 3650664, 3652201, 1, 3650921, 1, 3651173, 1, 3651445, 1, 3651683, 1, 3651944, 1, 3652453, 1, 3652725, 1, 3652963, 1, 3653481, 1, 3653733, 1, 3654005, 1, 3654248, 2, 3654760, 3656297, 1, 3655017, 1, 3655269, 1, 3655541, 1, 3655787, 1, 3656040, 1, 3656569, 1, 3656805, 1, 3657071, 1, 3657323, 1, 3657833, 1, 3658085, 1, 3658357, 1, 3658605, 3, 3659105, 3660648, 3662185, 1, 3659374, 1, 3659635, 1, 3659881, 1, 3660143, 1, 3660403, 1, 3660905, 1, 3661157, 1, 3661429, 1, 3661680, 1, 3661928, 1, 3662437, 1, 3662709, 1, 3662960, 1, 3663465, 1, 3663717, 1, 3663989, 1, 3664236, 2, 3664745, 3665523, 1, 3665007, 1, 3665267, 1, 3665761, 1, 3666030, 1, 3666279, 1, 3666539, 1, 3666793, 1, 3667065, 1, 3667301, 1, 3667567, 1, 3667819, 2, 3668328, 3669865, 1, 3668585, 1, 3668837, 1, 3669109, 1, 3669364, 1, 3669608, 1, 3670123, 1, 3670373, 1, 3670645, 1, 3670900, 1, 3671395, 1, 3671660, 3, 3672166, 3672425, 3672946, 1, 3672686, 3, 3673447, 3674217, 3674482, 1, 3673719, 1, 3673971, 1, 3674721, 1, 3674998, 1, 3675237, 4, 3676009, 3677550, 3678575, 3679353, 2, 3676265, 3677038, 1, 3676526, 1, 3676788, 1, 3677300, 1, 3677798, 1, 3678057, 1, 3678318, 1, 3678836, 1, 3679073, 1, 3679585, 1, 3679854, 1, 3680110, 1, 3680353, 1, 3680876, 1, 3681129, 1, 3681383, 1, 3681889, 1, 3682162, 1, 3682401, 3, 3682866, 3683177, 3684725, 1, 3683437, 1, 3683693, 1, 3683957, 2, 3684147, 3684404, 3, 3684980, 3685237, 3686777, 1, 3685497, 1, 3685729, 1, 3685998, 1, 3686254, 1, 3686497, 1, 3687009, 1, 3687278, 1, 3687534, 1, 3687777, 5, 3688289, 3693673, 3700334, 3700591, 3701104, 3, 3688547, 3689063, 3693172, 1, 3688818, 4, 3689317, 3689577, 3691116, 3692144, 1, 3689838, 1, 3690081, 1, 3690354, 1, 3690617, 1, 3690857, 1, 3691369, 1, 3691630, 1, 3691877, 1, 3692385, 1, 3692658, 1, 3692916, 1, 3693416, 4, 3693924, 3695718, 3698798, 3699315, 1, 3694185, 1, 3694433, 1, 3694706, 1, 3694951, 1, 3695215, 1, 3695470, 2, 3695983, 3697012, 1, 3696238, 1, 3696495, 1, 3696750, 1, 3697256, 1, 3697519, 1, 3697778, 2, 3698017, 3698287, 1, 3698542, 1, 3698995, 1, 3699557, 1, 3699823, 1, 3700083, 1, 3700838, 2, 3701349, 3704684, 2, 3701604, 3701874, 2, 3702118, 3703913, 1, 3702373, 1, 3702627, 1, 3702900, 2, 3703137, 3703413, 1, 3703661, 1, 3704161, 1, 3704428, 1, 3704937, 1, 3705189, 1, 3705459, 17, 3705901, 3707233, 3707746, 3708515, 3716452, 3724902, 3730791, 3731816, 3735145, 3737195, 3737454, 3740015, 3741040, 3741811, 3750772, 3772278, 3779705, 1, 3706209, 1, 3706476, 1, 3706721, 1, 3706982, 1, 3707504, 1, 3708015, 1, 3708280, 5, 3708769, 3709544, 3709804, 3711343, 3713906, 1, 3709042, 1, 3709285, 1, 3710069, 1, 3710308, 1, 3710569, 1, 3710830, 1, 3711079, 1, 3711597, 2, 3711849, 3712624, 1, 3712110, 1, 3712359, 1, 3712876, 1, 3713125, 1, 3713396, 1, 3713637, 1, 3714149, 2, 3714401, 3715437, 1, 3714675, 1, 3714917, 1, 3715187, 1, 3715685, 1, 3715950, 1, 3716212, 3, 3716709, 3719017, 3723125, 2, 3716976, 3718776, 1, 3717221, 1, 3717486, 1, 3717732, 1, 3717989, 1, 3718254, 1, 3718516, 3, 3719265, 3719779, 3722098, 1, 3719534, 2, 3720033, 3721076, 1, 3720308, 1, 3720559, 1, 3720818, 1, 3721321, 1, 3721583, 1, 3721838, 1, 3722341, 1, 3722595, 1, 3722868, 1, 3723379, 1, 3723636, 1, 3723890, 1, 3724137, 1, 3724385, 1, 3724652, 3, 3725161, 3727212, 3728751, 1, 3725422, 2, 3725673, 3726452, 1, 3725940, 1, 3726201, 1, 3726697, 1, 3726949, 1, 3727477, 1, 3727717, 1, 3727982, 1, 3728227, 1, 3728485, 1, 3729010, 1, 3729261, 1, 3729505, 1, 3729780, 1, 3730025, 1, 3730287, 1, 3730542, 1, 3731063, 1, 3731297, 1, 3731578, 3, 3732065, 3732837, 3734121, 1, 3732332, 1, 3732581, 1, 3733106, 1, 3733349, 1, 3733614, 1, 3733876, 1, 3734370, 1, 3734633, 1, 3734900, 2, 3735406, 3736180, 1, 3735655, 1, 3735925, 1, 3736425, 1, 3736673, 1, 3736940, 3, 3737701, 3738222, 3738479, 1, 3737970, 1, 3738723, 1, 3738981, 1, 3739246, 1, 3739491, 1, 3739749, 1, 3740260, 1, 3740527, 1, 3740788, 1, 3741301, 1, 3741556, 5, 3742051, 3744613, 3746665, 3747444, 3749749, 1, 3742322, 1, 3742569, 1, 3742832, 1, 3743092, 1, 3743337, 1, 3743599, 1, 3743854, 1, 3744097, 1, 3744364, 2, 3744867, 3745394, 1, 3745140, 1, 3745652, 1, 3745897, 1, 3746159, 1, 3746414, 1, 3746916, 1, 3747173, 1, 3747698, 1, 3747957, 1, 3748205, 1, 3748453, 1, 3748718, 1, 3748980, 1, 3749217, 1, 3749484, 1, 3749996, 1, 3750241, 1, 3750514, 5, 3751011, 3751781, 3769705, 3769964, 3771248, 1, 3751265, 1, 3751532, 2, 3752039, 3754866, 2, 3752293, 3753074, 1, 3752562, 1, 3752819, 1, 3753313, 2, 3753580, 3753844, 1, 3754089, 1, 3754351, 1, 3754606, 7, 3755107, 3756645, 3757417, 3758188, 3762032, 3764082, 3765619, 1, 3755361, 1, 3755628, 1, 3755873, 1, 3756148, 1, 3756389, 1, 3756915, 1, 3757172, 1, 3757679, 1, 3757938, 3, 3758433, 3759465, 3760751, 1, 3758691, 1, 3758949, 1, 3759204, 1, 3759726, 1, 3759973, 1, 3760225, 1, 3760498, 1, 3760995, 1, 3761259, 1, 3761509, 1, 3761764, 1, 3762287, 1, 3762540, 1, 3762785, 1, 3763060, 1, 3763305, 1, 3763567, 1, 3763822, 1, 3764335, 1, 3764578, 1, 3764833, 1, 3765102, 1, 3765351, 2, 3765861, 3767929, 1, 3766115, 1, 3766388, 1, 3766633, 2, 3766894, 3767407, 1, 3767143, 1, 3767662, 1, 3768172, 1, 3768428, 1, 3768673, 1, 3768930, 1, 3769193, 1, 3769443, 1, 3770209, 1, 3770482, 1, 3770728, 1, 3770987, 1, 3771506, 1, 3771759, 1, 3772004, 2, 3772517, 3775593, 1, 3772786, 2, 3773043, 3773556, 1, 3773285, 1, 3773797, 2, 3774050, 3775332, 1, 3774322, 1, 3774561, 1, 3774836, 1, 3775077, 1, 3775859, 1, 3776105, 1, 3776354, 1, 3776620, 1, 3776869, 2, 3777123, 3778420, 1, 3777391, 1, 3777645, 1, 3777901, 1, 3778145, 1, 3778665, 1, 3778925, 1, 3779173, 1, 3779443, 1, 3779937, 7, 3780451, 3780964, 3782247, 3783022, 3783536, 3784050, 3784308, 1, 3780729, 1, 3781224, 1, 3781473, 1, 3781732, 1, 3781992, 1, 3782511, 1, 3782766, 1, 3783271, 1, 3783782, 2, 3784545, 3785577, 1, 3784820, 1, 3785061, 1, 3785316, 1, 3785830, 1, 3786089, 1, 3786341, 1, 3786596, 1, 3787122, 1, 3787375, 1, 3787620, 1, 3788149, 1, 3788389, 1, 3788659, 1, 3788916, 4, 3789410, 3789673, 3789935, 3792245, 1, 3790190, 1, 3790381, 1, 3790691, 1, 3790959, 1, 3791216, 1, 3791472, 1, 3791717, 1, 3791986, 2, 3792501, 3794041, 1, 3792761, 1, 3792993, 1, 3793262, 1, 3793518, 1, 3793761, 1, 3794273, 1, 3794542, 1, 3794798, 1, 3795041, 9, 3795501, 3797089, 3798371, 3798885, 3800680, 3800937, 3803244, 3804271, 3807603, 1, 3795824, 1, 3796073, 1, 3796332, 1, 3796588, 1, 3796833, 2, 3797355, 3798138, 1, 3797609, 1, 3797857, 1, 3798642, 1, 3799150, 1, 3799341, 1, 3799657, 1, 3799923, 1, 3800165, 1, 3800430, 1, 3801198, 4, 3801444, 3802213, 3802483, 3802998, 1, 3801711, 1, 3801972, 1, 3802742, 1, 3803489, 1, 3803758, 1, 3804004, 3, 3804524, 3805806, 3806067, 1, 3804769, 1, 3805044, 1, 3805285, 1, 3805540, 1, 3806307, 1, 3806565, 1, 3806828, 1, 3807077, 1, 3807347, 1, 3807848, 1, 3808097, 1, 3808370, 4, 3808865, 3809893, 3811945, 3812979, 1, 3809132, 1, 3809385, 1, 3809635, 2, 3810157, 3810418, 1, 3810657, 1, 3810932, 1, 3811177, 1, 3811439, 1, 3811694, 1, 3812204, 1, 3812452, 1, 3812709, 3, 3813482, 3813995, 3814765, 1, 3813729, 1, 3814243, 1, 3814521, 1, 3815020, 2, 3815521, 3816046, 1, 3815802, 2, 3816801, 3817829, 1, 3817070, 1, 3817326, 1, 3817569, 1, 3818091, 2, 3818593, 3819880, 1, 3818859, 1, 3819105, 1, 3819385, 1, 3819617, 2, 3820133, 3820393, 1, 3820660, 1, 3820915, 1, 3821153, 15, 3821613, 3824481, 3841123, 3842405, 3848038, 3848552, 3851625, 3858026, 3865453, 3866478, 3867247, 3876467, 3878261, 3891831, 3892345, 1, 3821939, 1, 3822185, 1, 3822445, 1, 3822704, 1, 3822956, 1, 3823209, 1, 3823462, 1, 3823721, 1, 3823973, 1, 3824228, 12, 3824737, 3824995, 3828324, 3828840, 3829097, 3829612, 3832942, 3834224, 3835762, 3836022, 3838839, 3839097, 1, 3825259, 2, 3825453, 3828083, 1, 3825775, 1, 3825965, 1, 3826284, 1, 3826529, 1, 3826798, 1, 3827060, 1, 3827301, 1, 3827570, 1, 3827822, 1, 3828581, 1, 3829358, 1, 3829868, 1, 3830113, 1, 3830378, 1, 3830625, 1, 3830892, 1, 3831137, 1, 3831404, 1, 3831663, 1, 3831925, 1, 3832168, 1, 3832431, 1, 3832693, 1, 3833205, 1, 3833441, 1, 3833714, 1, 3833977, 1, 3834465, 1, 3834734, 1, 3834981, 1, 3835251, 1, 3835493, 2, 3836257, 3837545, 1, 3836526, 1, 3836773, 1, 3837043, 1, 3837285, 1, 3837817, 1, 3838049, 1, 3838318, 1, 3838569, 3, 3839329, 3840361, 3840878, 1, 3839598, 1, 3839854, 1, 3840097, 1, 3840622, 2, 3841385, 3842169, 1, 3841650, 1, 3841891, 6, 3842657, 3843429, 3843943, 3845224, 3845490, 3847797, 1, 3842926, 1, 3843187, 1, 3843693, 1, 3844207, 1, 3844455, 1, 3844705, 1, 3844974, 2, 3845729, 3846261, 1, 3845998, 1, 3846515, 1, 3846753, 1, 3847020, 1, 3847269, 1, 3847533, 1, 3848306, 3, 3848801, 3850597, 3851119, 4, 3849057, 3849325, 3849582, 3849849, 1, 3850089, 1, 3850350, 1, 3850856, 1, 3851384, 9, 3851873, 3852133, 3853159, 3854184, 3856489, 3857004, 3857264, 3857524, 3857784, 3, 3852400, 3852660, 3852920, 1, 3853427, 1, 3853665, 1, 3853943, 1, 3854454, 1, 3854689, 1, 3854957, 1, 3855221, 1, 3855468, 1, 3855721, 1, 3855993, 1, 3856225, 1, 3856749, 6, 3858273, 3858533, 3859049, 3861103, 3862133, 3864441, 1, 3858789, 4, 3859301, 3860336, 3860596, 3860856, 3, 3859568, 3859828, 3860088, 3, 3861360, 3861620, 3861880, 5, 3862383, 3863152, 3863410, 3863924, 3864184, 2, 3862640, 3862904, 1, 3863672, 3, 3864688, 3864948, 3865208, 1, 3865697, 1, 3865972, 1, 3866216, 1, 3866745, 1, 3866977, 10, 3867489, 3867753, 3869547, 3870318, 3872367, 3872624, 3873140, 3873398, 3873912, 3874169, 1, 3868014, 2, 3868261, 3869044, 2, 3868516, 3868786, 1, 3869299, 1, 3869797, 1, 3870066, 2, 3870561, 3870823, 1, 3871091, 1, 3871333, 1, 3871599, 1, 3871854, 1, 3872103, 1, 3872870, 1, 3873637, 2, 3874415, 3875187, 1, 3874677, 1, 3874931, 1, 3875444, 1, 3875689, 1, 3875939, 1, 3876203, 2, 3876707, 3877221, 1, 3876978, 1, 3877490, 1, 3877731, 1, 3878009, 12, 3878500, 3882341, 3883111, 3884651, 3885420, 3885934, 3888239, 3889264, 3890546, 3891060, 3891317, 3891576, 3, 3878757, 3881319, 3881845, 1, 3879023, 1, 3879213, 1, 3879539, 1, 3879792, 1, 3880033, 1, 3880302, 1, 3880553, 1, 3880819, 1, 3881064, 1, 3881573, 1, 3882092, 1, 3882613, 1, 3882857, 1, 3883367, 1, 3883628, 1, 3883881, 1, 3884142, 1, 3884391, 1, 3884899, 1, 3885177, 1, 3885689, 3, 3886181, 3886439, 3887983, 1, 3886707, 1, 3886949, 1, 3887215, 1, 3887470, 1, 3887719, 3, 3888496, 3888756, 3889016, 1, 3889513, 1, 3889780, 1, 3890021, 1, 3890290, 1, 3890808, 1, 3892065, 4, 3892592, 3892850, 3893364, 3893624, 1, 3893112, 25, 3894064, 3896626, 3896929, 3949922, 3950179, 3952229, 3983462, 3983975, 3985256, 4006249, 4047978, 4049003, 4050796, 4053101, 4053358, 4063087, 4083824, 4088178, 4097139, 4098676, 4098933, 4115574, 4116087, 4120952, 4124537, 1, 3894320, 8, 3894577, 3894834, 3895091, 3895348, 3895605, 3895862, 3896119, 3896376, 23, 3897133, 3900722, 3901025, 3904354, 3904868, 3906150, 3906664, 3906921, 3908971, 3910508, 3910765, 3911534, 3916400, 3927665, 3927922, 3932787, 3936372, 3943797, 3945078, 3946103, 3947128, 3947385, 3948922, 10, 3897393, 3898162, 3898419, 3898676, 3898933, 3899190, 3899447, 3899704, 3899961, 3900267, 2, 3897648, 3897905, 1, 3900517, 6, 3901282, 3901795, 3902310, 3902825, 3903086, 3904118, 1, 3901537, 1, 3902069, 1, 3902581, 1, 3903339, 1, 3903605, 1, 3903861, 1, 3904609, 4, 3905074, 3905331, 3905588, 3905845, 1, 3906401, 4, 3907170, 3907442, 3907956, 3908726, 1, 3907689, 1, 3908200, 1, 3908457, 2, 3909217, 3910255, 1, 3909474, 1, 3909729, 1, 3910004, 2, 3910962, 3911220, 4, 3911777, 3912551, 3914350, 3915380, 1, 3912043, 1, 3912303, 2, 3912801, 3913848, 1, 3913074, 1, 3913327, 1, 3913583, 1, 3914089, 1, 3914593, 1, 3914852, 1, 3915105, 1, 3915617, 1, 3915882, 1, 3916129, 5, 3916641, 3917160, 3917423, 3917680, 3918457, 1, 3916908, 1, 3917921, 1, 3918198, 1, 3918693, 1, 3918959, 1, 3919221, 1, 3919470, 4, 3919725, 3921008, 3923826, 3925107, 1, 3919977, 1, 3920229, 1, 3920501, 1, 3920749, 2, 3921256, 3922793, 1, 3921513, 1, 3921765, 1, 3922037, 1, 3922288, 1, 3922536, 1, 3923045, 1, 3923317, 1, 3923568, 1, 3924073, 1, 3924325, 1, 3924597, 1, 3924844, 1, 3925363, 1, 3925601, 1, 3925870, 1, 3926119, 1, 3926384, 1, 3926633, 1, 3926885, 1, 3927157, 1, 3927408, 4, 3928161, 3929445, 3929967, 3931507, 2, 3928430, 3928692, 1, 3928948, 1, 3929199, 1, 3929710, 1, 3930226, 2, 3930465, 3930985, 1, 3930734, 1, 3931241, 1, 3931752, 1, 3932001, 1, 3932270, 1, 3932513, 3, 3933032, 3934315, 3935090, 1, 3933293, 1, 3933545, 1, 3933810, 1, 3934057, 1, 3934561, 1, 3934828, 1, 3935329, 1, 3935604, 1, 3935841, 1, 3936110, 3, 3936609, 3941480, 3943535, 2, 3936875, 3940214, 1, 3937121, 1, 3937390, 1, 3937633, 1, 3937837, 1, 3938152, 1, 3938409, 1, 3938674, 1, 3938913, 1, 3939175, 1, 3939425, 1, 3939694, 1, 3939937, 1, 3940449, 1, 3940723, 1, 3940973, 1, 3941217, 2, 3941729, 3942505, 1, 3941995, 1, 3942241, 1, 3942771, 1, 3943028, 1, 3943273, 3, 3944034, 3944302, 3944822, 1, 3944545, 1, 3945337, 1, 3945579, 1, 3945825, 3, 3946338, 3946601, 3946870, 1, 3947617, 2, 3947880, 3948142, 1, 3948398, 1, 3948641, 1, 3949153, 1, 3949419, 1, 3949672, 3, 3950433, 3950949, 3951993, 1, 3950700, 1, 3951204, 1, 3951465, 1, 3951724, 18, 3952429, 3954273, 3955042, 3955301, 3958118, 3959144, 3959916, 3960941, 3964782, 3967087, 3967600, 3967858, 3968627, 3969396, 3970165, 3980662, 3980920, 3981177, 6, 3952689, 3952946, 3953203, 3953460, 3953717, 3953974, 1, 3954529, 1, 3954789, 5, 3955554, 3955822, 3956336, 3957363, 3957878, 1, 3956071, 1, 3956585, 1, 3956846, 1, 3957095, 1, 3957621, 1, 3958389, 1, 3958636, 1, 3958881, 1, 3959397, 1, 3959656, 1, 3960182, 1, 3960425, 1, 3960686, 2, 3961186, 3962224, 1, 3961441, 1, 3961710, 1, 3961959, 3, 3962472, 3963756, 3964277, 1, 3962738, 1, 3962981, 1, 3963246, 1, 3963495, 1, 3964009, 1, 3964524, 2, 3965025, 3965556, 1, 3965300, 1, 3965801, 1, 3966061, 1, 3966305, 1, 3966580, 1, 3966817, 1, 3967351, 1, 3968101, 1, 3968372, 1, 3968872, 1, 3969074, 1, 3969652, 1, 3969897, 8, 3970401, 3972971, 3975277, 3975535, 3976048, 3976819, 3979384, 3979641, 1, 3970661, 3, 3970925, 3971186, 3971700, 1, 3971433, 1, 3971949, 1, 3972197, 1, 3972469, 1, 3972718, 2, 3973217, 3973733, 1, 3973489, 1, 3974005, 1, 3974260, 1, 3974510, 1, 3974756, 1, 3975009, 1, 3975796, 1, 3976309, 1, 3976561, 2, 3977061, 3977832, 1, 3977333, 1, 3977592, 1, 3978085, 1, 3978357, 1, 3978593, 1, 3978853, 1, 3979120, 1, 3979877, 1, 3980149, 1, 3980408, 2, 3981410, 3982691, 1, 3981679, 1, 3981921, 1, 3982194, 1, 3982436, 1, 3982945, 1, 3983216, 1, 3983730, 1, 3984242, 1, 3984485, 1, 3984741, 1, 3985006, 10, 3985505, 3992931, 3993445, 3994728, 3995497, 3997037, 3998063, 4001141, 4005239, 4006010, 10, 3985761, 3986018, 3986280, 3986537, 3986795, 3988589, 3989358, 3990384, 3990898, 3992694, 1, 3987041, 1, 3987315, 1, 3987571, 1, 3987817, 1, 3988065, 1, 3988334, 1, 3988852, 1, 3989097, 2, 3989604, 3990119, 1, 3989857, 1, 3990632, 1, 3991151, 1, 3991411, 1, 3991656, 1, 3991924, 1, 3992168, 1, 3992425, 1, 3993209, 3, 3993701, 3993961, 3994228, 1, 3994472, 2, 3994977, 3995247, 2, 3995749, 3996788, 1, 3996021, 1, 3996267, 1, 3996520, 2, 3997285, 3997813, 1, 3997554, 5, 3998314, 3999085, 3999854, 4000628, 4000885, 1, 3998571, 1, 3998825, 1, 3999349, 1, 3999604, 1, 4000110, 1, 4000353, 3, 4001377, 4001892, 4003685, 1, 4001652, 1, 4002145, 2, 4002413, 4002679, 1, 4002913, 1, 4003172, 1, 4003433, 1, 4003950, 1, 4004141, 1, 4004460, 1, 4004725, 1, 4004965, 1, 4005473, 1, 4005737, 21, 4006445, 4008801, 4009570, 4009827, 4010340, 4010597, 4012648, 4012905, 4013675, 4014956, 4015981, 4017006, 4021360, 4021617, 4021874, 4028019, 4030836, 4031350, 4031607, 4033400, 4033657, 8, 4006705, 4006962, 4007219, 4007476, 4007733, 4007990, 4008247, 4008504, 2, 4009058, 4009334, 1, 4010091, 4, 4010853, 4011376, 4011638, 4012408, 1, 4011117, 1, 4011873, 1, 4012142, 1, 4013178, 1, 4013416, 1, 4013921, 1, 4014187, 1, 4014453, 1, 4014697, 1, 4015212, 1, 4015461, 1, 4015730, 1, 4016239, 1, 4016494, 1, 4016751, 4, 4017252, 4019559, 4019822, 4020339, 1, 4017509, 1, 4017778, 1, 4018023, 1, 4018273, 1, 4018546, 1, 4018804, 1, 4019045, 1, 4019310, 1, 4020065, 1, 4020584, 1, 4020841, 1, 4021104, 2, 4022119, 4023151, 1, 4022376, 1, 4022633, 1, 4022906, 3, 4023399, 4024941, 4026743, 1, 4023669, 1, 4023922, 1, 4024161, 1, 4024429, 1, 4024693, 1, 4025189, 1, 4025445, 1, 4025716, 1, 4025967, 1, 4026226, 1, 4026485, 1, 4026977, 1, 4027252, 1, 4027508, 1, 4027759, 4, 4028257, 4028776, 4029033, 4029811, 1, 4028524, 1, 4029293, 1, 4029493, 1, 4030057, 1, 4030318, 1, 4030567, 1, 4031077, 1, 4031849, 1, 4032102, 1, 4032370, 1, 4032629, 1, 4032873, 1, 4033140, 1, 4033893, 1, 4034159, 1, 4034411, 1, 4034605, 8, 4034915, 4036712, 4037995, 4039790, 4041072, 4042354, 4043635, 4046452, 1, 4035176, 1, 4035433, 1, 4035685, 1, 4035957, 1, 4036195, 1, 4036456, 1, 4036969, 1, 4037221, 1, 4037493, 1, 4037736, 1, 4038248, 1, 4038505, 1, 4038757, 1, 4039029, 1, 4039275, 1, 4039528, 1, 4040041, 1, 4040293, 1, 4040565, 1, 4040814, 1, 4041321, 1, 4041573, 1, 4041845, 1, 4042096, 1, 4042601, 1, 4042853, 1, 4043125, 1, 4043372, 1, 4043881, 1, 4044143, 1, 4044403, 1, 4044589, 1, 4044907, 1, 4045161, 1, 4045433, 1, 4045669, 1, 4045935, 1, 4046187, 1, 4046697, 1, 4046955, 1, 4047205, 1, 4047477, 1, 4047732, 2, 4048227, 4048741, 1, 4048505, 5, 4049249, 4049509, 4050025, 4050287, 4050549, 1, 4049765, 2, 4051041, 4052073, 1, 4051315, 1, 4051565, 1, 4051809, 1, 4052340, 1, 4052591, 1, 4052846, 4, 4053605, 4055145, 4060783, 4061557, 1, 4053861, 1, 4054124, 1, 4054377, 1, 4054638, 1, 4054887, 2, 4055398, 4055911, 1, 4055653, 1, 4056168, 1, 4056436, 1, 4056621, 3, 4056930, 4058481, 4059762, 1, 4057193, 1, 4057459, 1, 4057704, 1, 4057967, 1, 4058224, 1, 4058741, 1, 4058981, 1, 4059237, 1, 4059502, 1, 4060015, 1, 4060271, 1, 4060523, 1, 4061026, 1, 4061299, 1, 4061795, 1, 4062059, 1, 4062316, 1, 4062565, 1, 4062835, 18, 4063277, 4064865, 4065634, 4065893, 4066407, 4067432, 4067689, 4068459, 4069229, 4070766, 4072303, 4074608, 4075633, 4076914, 4080756, 4081269, 4082806, 4083576, 4, 4063537, 4063794, 4064051, 4064363, 1, 4064617, 1, 4065132, 1, 4065377, 1, 4066164, 1, 4066664, 1, 4066927, 1, 4067181, 1, 4067950, 1, 4068201, 2, 4068709, 4068975, 2, 4069474, 4070505, 1, 4069749, 1, 4070006, 1, 4070241, 1, 4071028, 1, 4071269, 1, 4071542, 1, 4071789, 1, 4072033, 4, 4072546, 4072813, 4073840, 4074358, 1, 4073077, 1, 4073333, 1, 4073588, 1, 4074095, 2, 4074854, 4075120, 1, 4075361, 1, 4075886, 1, 4076132, 1, 4076399, 1, 4076654, 4, 4077153, 4078181, 4078959, 4079989, 1, 4077422, 1, 4077673, 1, 4077923, 1, 4078433, 1, 4078702, 1, 4079214, 1, 4079465, 1, 4079731, 1, 4080238, 1, 4080481, 1, 4081007, 1, 4081510, 1, 4081769, 1, 4082035, 1, 4082285, 1, 4082529, 1, 4083061, 1, 4083317, 5, 4084065, 4085605, 4086889, 4087151, 4087925, 3, 4084328, 4084590, 4084850, 1, 4085089, 1, 4085361, 3, 4085861, 4086126, 4086389, 1, 4086648, 2, 4087407, 4087665, 3, 4088417, 4094565, 4096111, 1, 4088692, 1, 4088937, 1, 4089197, 2, 4089441, 4090223, 1, 4089716, 1, 4089953, 2, 4090475, 4092537, 1, 4090735, 1, 4090997, 1, 4091238, 1, 4091497, 1, 4091763, 1, 4092013, 1, 4092257, 1, 4092784, 1, 4093039, 1, 4093298, 1, 4093554, 1, 4093807, 1, 4094063, 1, 4094318, 1, 4094829, 1, 4095073, 1, 4095347, 1, 4095604, 1, 4095849, 1, 4096366, 1, 4096623, 1, 4096883, 3, 4097379, 4097897, 4098163, 1, 4097650, 1, 4098401, 20, 4099117, 4101171, 4101428, 4101687, 4101985, 4102754, 4103013, 4103527, 4103788, 4104046, 4106351, 4107632, 4107889, 4108146, 4111987, 4113524, 4113781, 4114294, 4114552, 4114810, 7, 4099377, 4099634, 4099891, 4100148, 4100405, 4100662, 4100919, 2, 4102242, 4102518, 1, 4103284, 2, 4104292, 4106087, 1, 4104548, 1, 4104801, 1, 4105068, 1, 4105321, 1, 4105593, 1, 4105825, 4, 4106605, 4106864, 4107121, 4107384, 4, 4108399, 4109428, 4109685, 4111736, 1, 4108655, 1, 4108910, 1, 4109157, 2, 4109934, 4110458, 1, 4110185, 1, 4110693, 1, 4110953, 1, 4111218, 1, 4111471, 2, 4112232, 4113005, 1, 4112501, 1, 4112690, 1, 4113249, 1, 4114024, 1, 4115048, 1, 4115305, 1, 4115809, 8, 4116321, 4117602, 4117861, 4118377, 4118893, 4119151, 4119669, 4120694, 3, 4116577, 4116837, 4117369, 1, 4117108, 1, 4118117, 1, 4118633, 1, 4119407, 1, 4119859, 1, 4120113, 1, 4120376, 6, 4121185, 4121701, 4122217, 4122479, 4122741, 4122999, 1, 4121441, 1, 4121957, 3, 4123233, 4123749, 4124265, 1, 4123489, 1, 4124005, 6, 4124769, 4126309, 4126825, 4127084, 4128367, 4128629, 2, 4125025, 4125300, 1, 4125544, 1, 4125807, 1, 4126067, 1, 4126565, 1, 4127337, 1, 4127603, 1, 4127853, 1, 4128097, 1, 4128882, 1, 4129129, 1, 4129385, 30, 4129837, 4132656, 4135730, 4135987, 4136244, 4136502, 4136801, 4210274, 4214883, 4218724, 4224357, 4344166, 4346727, 4347240, 4353897, 4387178, 4389484, 4396909, 4400238, 4403567, 4475504, 4476786, 4481395, 4486772, 4494965, 4507254, 4507511, 4509560, 4509817, 4516218, 2, 4130163, 4131700, 1, 4130408, 1, 4130657, 1, 4130928, 1, 4131173, 1, 4131428, 1, 4131961, 1, 4132208, 1, 4132453, 1, 4132912, 8, 4133169, 4133426, 4133939, 4134196, 4134453, 4134710, 4135223, 4135480, 1, 4133729, 1, 4135009, 24, 4137057, 4139362, 4144995, 4147812, 4148325, 4150119, 4152424, 4153449, 4154218, 4156267, 4181356, 4181613, 4184942, 4189039, 4189296, 4191857, 4192626, 4200307, 4201076, 4204661, 4207735, 4207992, 4208249, 4209786, 4, 4137321, 4137581, 4138094, 4138866, 1, 4137845, 1, 4138337, 1, 4138597, 1, 4139122, 4, 4139617, 4140133, 4140649, 4143215, 1, 4139892, 1, 4140396, 1, 4140897, 1, 4141164, 1, 4141417, 1, 4141690, 1, 4141921, 1, 4142196, 1, 4142441, 1, 4142703, 1, 4142958, 2, 4143474, 4143733, 1, 4143986, 1, 4144233, 1, 4144494, 1, 4144743, 4, 4145249, 4145515, 4145778, 4147061, 1, 4146031, 1, 4146291, 1, 4146547, 1, 4146789, 1, 4147316, 1, 4147557, 1, 4148089, 2, 4148589, 4149878, 1, 4148848, 1, 4149108, 1, 4149369, 1, 4149622, 3, 4150369, 4151154, 4151925, 2, 4150626, 4150898, 1, 4151393, 1, 4151662, 1, 4152179, 1, 4152691, 1, 4152936, 1, 4153205, 1, 4153710, 1, 4153959, 1, 4154465, 1, 4154734, 1, 4155001, 1, 4155233, 1, 4155500, 1, 4155745, 1, 4156014, 4, 4156461, 4178277, 4178536, 4179307, 8, 4156720, 4162097, 4163378, 4166707, 4169268, 4173365, 4174134, 4176951, 8, 4156976, 4157490, 4158515, 4159029, 4159798, 4160311, 4160824, 4161593, 1, 4157235, 3, 4157744, 4158001, 4158261, 1, 4158768, 2, 4159280, 4159537, 1, 4160050, 1, 4160569, 2, 4161072, 4161329, 1, 4161842, 2, 4162355, 4162868, 1, 4162608, 1, 4163122, 4, 4163633, 4164402, 4165427, 4165942, 2, 4163888, 4164153, 3, 4164656, 4164917, 4165176, 1, 4165688, 2, 4166197, 4166454, 3, 4166964, 4167992, 4168761, 3, 4167219, 4167479, 4167736, 2, 4168243, 4168500, 1, 4169008, 5, 4169524, 4170293, 4171063, 4171576, 4172089, 2, 4169777, 4170041, 2, 4170544, 4170807, 1, 4171312, 1, 4171827, 4, 4172336, 4172594, 4172851, 4173109, 1, 4173621, 1, 4173872, 5, 4174384, 4174897, 4175411, 4175924, 4176438, 1, 4174648, 1, 4175159, 1, 4175670, 1, 4176184, 1, 4176696, 2, 4177202, 4177716, 1, 4177460, 1, 4177977, 1, 4178785, 1, 4179054, 1, 4179560, 1, 4179809, 1, 4180078, 1, 4180327, 1, 4180601, 1, 4180833, 1, 4181103, 5, 4181857, 4182626, 4183396, 4183909, 4184688, 1, 4182116, 1, 4182376, 1, 4182884, 1, 4183137, 1, 4183649, 1, 4184164, 1, 4184424, 4, 4185188, 4185445, 4185959, 4188020, 1, 4185715, 3, 4186212, 4186476, 4186997, 1, 4186725, 1, 4187233, 1, 4187495, 1, 4187749, 1, 4188261, 1, 4188530, 1, 4188782, 2, 4189537, 4190060, 1, 4189809, 1, 4190305, 1, 4190563, 1, 4190821, 1, 4191092, 1, 4191346, 1, 4191590, 1, 4192117, 1, 4192367, 4, 4192871, 4194153, 4194418, 4198777, 1, 4193125, 2, 4193394, 4193651, 1, 4193908, 7, 4194658, 4195430, 4195944, 4196460, 4196976, 4197491, 4198260, 1, 4194918, 1, 4195187, 1, 4195699, 1, 4196203, 1, 4196720, 1, 4197228, 1, 4197737, 1, 4197997, 1, 4198508, 1, 4199022, 1, 4199271, 1, 4199525, 1, 4199777, 1, 4200044, 1, 4200564, 1, 4200766, 3, 4201313, 4202085, 4203113, 1, 4201577, 1, 4201836, 1, 4202354, 1, 4202593, 1, 4202860, 2, 4203371, 4203630, 1, 4203873, 1, 4204148, 1, 4204389, 4, 4204903, 4206186, 4206443, 4207212, 1, 4205160, 1, 4205417, 1, 4205678, 1, 4205927, 1, 4206689, 1, 4206970, 1, 4207457, 1, 4208481, 2, 4208750, 4209522, 1, 4209006, 1, 4209249, 1, 4210041, 3, 4210529, 4211298, 4212082, 1, 4210802, 1, 4211058, 1, 4211570, 1, 4211819, 2, 4212321, 4213355, 1, 4212579, 2, 4212837, 4213099, 2, 4213605, 4213875, 1, 4214124, 2, 4214372, 4214645, 5, 4215137, 4216165, 4217705, 4217973, 4218489, 1, 4215410, 1, 4215663, 1, 4215918, 2, 4216420, 4217193, 1, 4216681, 1, 4216940, 1, 4217452, 1, 4218210, 6, 4218930, 4219233, 4219747, 4220273, 4221298, 4223859, 1, 4219502, 1, 4220001, 1, 4220533, 1, 4220783, 1, 4221042, 2, 4221540, 4222581, 1, 4221800, 1, 4222049, 1, 4222322, 1, 4222835, 1, 4223080, 1, 4223329, 1, 4223602, 1, 4224104, 19, 4224609, 4227940, 4228965, 4231270, 4299879, 4302185, 4303211, 4303468, 4304237, 4305262, 4311919, 4313200, 4314225, 4316019, 4338036, 4339317, 4340854, 4343416, 4343674, 3, 4224868, 4226406, 4226932, 2, 4225125, 4225641, 1, 4225394, 1, 4225902, 1, 4226151, 1, 4226681, 1, 4227176, 1, 4227429, 1, 4227698, 1, 4228199, 1, 4228453, 1, 4228722, 3, 4229221, 4229739, 4230002, 1, 4229477, 1, 4230241, 1, 4230501, 1, 4230775, 1, 4231009, 1, 4231540, 12, 4231725, 4244065, 4252515, 4254308, 4262758, 4264040, 4267372, 4269938, 4278900, 4288629, 4296310, 4298615, 6, 4232038, 4233576, 4235116, 4236912, 4238963, 4242036, 1, 4232289, 1, 4232547, 1, 4232809, 1, 4233070, 1, 4233319, 1, 4233825, 1, 4234094, 1, 4234340, 1, 4234597, 1, 4234852, 1, 4235369, 1, 4235623, 1, 4235880, 1, 4236148, 1, 4236389, 1, 4236644, 1, 4237167, 1, 4237417, 1, 4237678, 1, 4237940, 1, 4238185, 1, 4238446, 1, 4238695, 3, 4239208, 4240489, 4241268, 1, 4239457, 1, 4239716, 1, 4239973, 1, 4240228, 1, 4240740, 1, 4240997, 1, 4241509, 1, 4241773, 1, 4242287, 1, 4242477, 1, 4242802, 1, 4243049, 1, 4243303, 1, 4243560, 1, 4243828, 2, 4244334, 4247154, 1, 4244583, 1, 4244844, 1, 4245093, 1, 4245346, 1, 4245618, 1, 4245857, 1, 4246115, 1, 4246379, 1, 4246629, 1, 4246900, 1, 4247410, 1, 4247663, 1, 4247927, 3, 4248162, 4248946, 4251508, 1, 4248417, 1, 4248690, 1, 4249193, 1, 4249447, 1, 4249704, 1, 4249972, 1, 4250209, 1, 4250482, 1, 4250738, 1, 4250991, 1, 4251255, 1, 4251745, 1, 4252009, 1, 4252268, 1, 4252773, 1, 4253033, 1, 4253292, 1, 4253545, 1, 4253806, 1, 4254055, 1, 4254575, 2, 4254837, 4257655, 1, 4255074, 1, 4255340, 1, 4255589, 1, 4255842, 1, 4256114, 1, 4256353, 1, 4256611, 1, 4256875, 1, 4257125, 1, 4257396, 1, 4257902, 2, 4258164, 4260470, 1, 4258405, 1, 4258661, 1, 4258934, 1, 4259173, 1, 4259427, 1, 4259700, 1, 4259951, 1, 4260210, 1, 4260709, 1, 4260963, 1, 4261236, 1, 4261487, 1, 4261746, 1, 4261986, 1, 4262241, 1, 4262514, 1, 4263020, 1, 4263279, 1, 4263535, 1, 4263794, 1, 4264289, 1, 4264562, 1, 4264816, 1, 4265071, 1, 4265327, 1, 4265582, 2, 4265828, 4266869, 1, 4266095, 1, 4266359, 1, 4266606, 1, 4267120, 1, 4267621, 1, 4267878, 1, 4268148, 1, 4268385, 1, 4268658, 1, 4268914, 1, 4269167, 1, 4269431, 1, 4269683, 1, 4270185, 1, 4270439, 1, 4270696, 1, 4270964, 4, 4271201, 4272744, 4274803, 4277366, 1, 4271474, 1, 4271730, 1, 4271983, 1, 4272247, 1, 4272499, 1, 4272993, 1, 4273266, 1, 4273520, 1, 4273775, 1, 4274031, 1, 4274286, 1, 4274547, 1, 4275057, 1, 4275317, 1, 4275561, 1, 4275815, 1, 4276065, 1, 4276338, 1, 4276594, 1, 4276847, 1, 4277111, 1, 4277605, 1, 4277859, 1, 4278132, 1, 4278383, 1, 4278642, 3, 4279141, 4282472, 4284786, 1, 4279397, 2, 4279649, 4280950, 1, 4279922, 1, 4280178, 1, 4280431, 1, 4280695, 1, 4281189, 1, 4281443, 1, 4281716, 1, 4281967, 1, 4282226, 1, 4282738, 1, 4282981, 1, 4283237, 1, 4283508, 1, 4283753, 1, 4284013, 1, 4284261, 1, 4284531, 1, 4285033, 1, 4285281, 1, 4285550, 1, 4285799, 1, 4286060, 1, 4286309, 2, 4286562, 4287333, 1, 4286817, 1, 4287090, 1, 4287601, 1, 4287861, 1, 4288097, 1, 4288364, 1, 4288880, 3, 4289124, 4291700, 4294006, 1, 4289391, 1, 4289655, 1, 4289902, 1, 4290166, 1, 4290405, 1, 4290659, 1, 4290932, 1, 4291183, 1, 4291442, 1, 4291941, 1, 4292197, 1, 4292470, 1, 4292709, 1, 4292963, 1, 4293236, 1, 4293487, 1, 4293746, 1, 4294245, 1, 4294499, 1, 4294772, 1, 4295023, 1, 4295282, 1, 4295522, 1, 4295777, 1, 4296050, 1, 4296549, 1, 4296803, 1, 4297076, 1, 4297327, 1, 4297586, 1, 4297826, 1, 4298081, 1, 4298354, 1, 4298849, 1, 4299122, 1, 4299364, 1, 4299635, 3, 4300133, 4301161, 4301939, 1, 4300404, 1, 4300655, 1, 4300915, 1, 4301423, 1, 4301678, 1, 4302445, 1, 4302701, 1, 4302945, 1, 4303717, 1, 4303988, 1, 4304495, 2, 4304745, 4305006, 3, 4305511, 4309609, 4310132, 2, 4305761, 4306036, 1, 4306280, 2, 4306477, 4308581, 7, 4306737, 4306994, 4307251, 4307508, 4307765, 4308022, 4308279, 1, 4308846, 1, 4309093, 1, 4309362, 1, 4309875, 1, 4310377, 1, 4310627, 1, 4310901, 1, 4311148, 1, 4311393, 1, 4311666, 1, 4312176, 1, 4312417, 1, 4312690, 1, 4312932, 1, 4313443, 1, 4313704, 1, 4313953, 2, 4314481, 4314739, 1, 4314988, 1, 4315233, 1, 4315502, 1, 4315764, 5, 4316259, 4316772, 4318055, 4318824, 4319091, 1, 4316515, 1, 4317039, 1, 4317300, 1, 4317551, 1, 4317810, 1, 4318309, 1, 4318579, 9, 4319277, 4320609, 4322148, 4322917, 4328038, 4330343, 4332652, 4333683, 4336756, 1, 4319604, 1, 4319848, 1, 4320097, 1, 4320366, 1, 4320880, 1, 4321136, 1, 4321394, 1, 4321647, 1, 4321912, 1, 4322415, 1, 4322676, 2, 4323185, 4327794, 3, 4323431, 4324209, 4325237, 1, 4323700, 1, 4323954, 1, 4324455, 1, 4324724, 1, 4324978, 1, 4325473, 1, 4325740, 1, 4325991, 1, 4326258, 1, 4326501, 1, 4326753, 1, 4327028, 1, 4327269, 1, 4327538, 1, 4328309, 1, 4328556, 1, 4328812, 1, 4329061, 1, 4329329, 1, 4329589, 1, 4329825, 1, 4330092, 2, 4330610, 4332148, 1, 4330853, 1, 4331105, 1, 4331380, 1, 4331621, 1, 4331890, 1, 4332402, 1, 4332901, 1, 4333171, 1, 4333427, 2, 4333929, 4334444, 1, 4334189, 1, 4334689, 1, 4334958, 1, 4335220, 1, 4335461, 1, 4335729, 1, 4335989, 1, 4336225, 1, 4336492, 1, 4337001, 1, 4337260, 1, 4337508, 1, 4337765, 1, 4338292, 1, 4338533, 1, 4338802, 1, 4339059, 2, 4339553, 4340589, 1, 4339813, 2, 4340077, 4340336, 2, 4341093, 4341609, 1, 4341356, 1, 4341876, 1, 4342113, 1, 4342388, 1, 4342633, 1, 4342894, 1, 4343143, 1, 4343912, 3, 4344425, 4345452, 4346482, 1, 4344691, 1, 4344936, 1, 4345204, 1, 4345711, 1, 4345967, 1, 4346226, 1, 4346981, 7, 4347489, 4350818, 4351589, 4352105, 4352623, 4353141, 4353401, 4, 4347745, 4348007, 4348274, 4349302, 2, 4348516, 4348789, 1, 4349036, 1, 4349545, 1, 4349817, 1, 4350049, 1, 4350318, 1, 4350569, 1, 4351084, 1, 4351339, 1, 4351845, 1, 4352361, 1, 4352879, 1, 4353633, 21, 4354145, 4355938, 4357731, 4359012, 4359269, 4360550, 4361831, 4366953, 4367212, 4368493, 4373102, 4377967, 4378480, 4380017, 4381042, 4381555, 4382324, 4384630, 4385399, 4385912, 4386170, 1, 4354402, 1, 4354665, 1, 4354924, 1, 4355177, 1, 4355444, 1, 4355705, 2, 4356197, 4357234, 1, 4356466, 1, 4356724, 1, 4356985, 1, 4357473, 1, 4357995, 1, 4358249, 1, 4358510, 1, 4358759, 4, 4359525, 4359792, 4360052, 4360312, 2, 4360805, 4361076, 1, 4361317, 1, 4361586, 2, 4362081, 4364136, 1, 4362356, 2, 4362601, 4363381, 1, 4362862, 1, 4363111, 1, 4363634, 1, 4363877, 1, 4364404, 2, 4364648, 4365934, 1, 4364911, 1, 4365173, 1, 4365427, 1, 4365669, 1, 4366185, 1, 4366446, 1, 4366695, 2, 4367465, 4368249, 1, 4367732, 1, 4367976, 4, 4368738, 4369509, 4369769, 4372077, 2, 4369011, 4369269, 1, 4370036, 2, 4370273, 4371557, 1, 4370548, 1, 4370793, 1, 4371055, 1, 4371310, 1, 4371812, 1, 4372341, 2, 4372530, 4372788, 3, 4373349, 4375655, 4376427, 3, 4373549, 4374881, 4375411, 4, 4373809, 4374067, 4374327, 4374585, 1, 4375154, 1, 4375923, 1, 4376161, 2, 4376677, 4377193, 1, 4376932, 1, 4377454, 1, 4377703, 1, 4378222, 1, 4378739, 1, 4378996, 1, 4379241, 1, 4379491, 1, 4379755, 1, 4380277, 1, 4380521, 1, 4380772, 1, 4381281, 2, 4381800, 4382069, 3, 4382568, 4382834, 4383348, 1, 4383073, 2, 4383589, 4384108, 1, 4383858, 1, 4384357, 1, 4384882, 1, 4385125, 1, 4385646, 1, 4386401, 1, 4386674, 1, 4386916, 3, 4387427, 4387941, 4388213, 1, 4387705, 1, 4388452, 1, 4388713, 1, 4388970, 1, 4389221, 6, 4389729, 4391011, 4392549, 4394600, 4395628, 4396148, 2, 4389997, 4390514, 1, 4390241, 1, 4390770, 1, 4391279, 1, 4391538, 1, 4391790, 1, 4392037, 1, 4392306, 1, 4392806, 1, 4393076, 1, 4393313, 1, 4393586, 1, 4393842, 1, 4394095, 1, 4394359, 1, 4394849, 1, 4395122, 1, 4395364, 1, 4395873, 1, 4396402, 1, 4396649, 2, 4397161, 4398191, 1, 4397412, 1, 4397679, 1, 4397940, 1, 4398453, 1, 4398707, 1, 4398964, 1, 4399201, 1, 4399459, 1, 4399720, 1, 4399973, 3, 4400481, 4402021, 4402803, 1, 4400752, 1, 4401008, 1, 4401266, 1, 4401519, 1, 4401784, 1, 4402289, 1, 4402545, 1, 4403049, 1, 4403309, 19, 4403809, 4405090, 4406883, 4416100, 4417895, 4421740, 4423277, 4424302, 4443503, 4448880, 4450673, 4450930, 4452723, 4454260, 4456565, 4459894, 4460407, 4473720, 4473978, 2, 4404078, 4404594, 1, 4404327, 1, 4404850, 2, 4405362, 4405875, 1, 4405611, 1, 4406132, 1, 4406373, 1, 4406642, 3, 4407137, 4414059, 4414319, 1, 4407412, 1, 4407657, 2, 4407919, 4413558, 1, 4408174, 1, 4408365, 2, 4408678, 4411255, 1, 4408940, 1, 4409199, 1, 4409455, 1, 4409714, 1, 4409968, 1, 4410220, 1, 4410465, 1, 4410734, 1, 4410981, 1, 4411489, 1, 4411756, 1, 4412012, 1, 4412272, 1, 4412524, 1, 4412769, 1, 4413038, 1, 4413285, 1, 4413797, 1, 4414573, 1, 4414831, 1, 4415092, 1, 4415337, 1, 4415606, 1, 4415845, 1, 4416357, 1, 4416627, 1, 4416884, 1, 4417135, 1, 4417390, 1, 4417637, 3, 4418153, 4419183, 4421490, 1, 4418403, 1, 4418657, 1, 4418924, 2, 4419431, 4420468, 1, 4419698, 1, 4419937, 1, 4420205, 1, 4420729, 1, 4420976, 1, 4421221, 1, 4421996, 1, 4422249, 1, 4422512, 1, 4422767, 1, 4423024, 1, 4423533, 1, 4423777, 1, 4424037, 2, 4424551, 4442739, 5, 4424749, 4433505, 4433772, 4438637, 4440178, 2, 4425058, 4431980, 1, 4425330, 1, 4425569, 1, 4425838, 1, 4426083, 1, 4426344, 1, 4426541, 6, 4426849, 4427368, 4428909, 4429935, 4430707, 4431481, 1, 4427122, 1, 4427617, 1, 4427879, 1, 4428129, 1, 4428396, 1, 4428652, 1, 4429153, 1, 4429412, 1, 4429682, 1, 4430195, 1, 4430451, 1, 4430959, 1, 4431212, 1, 4431730, 1, 4432229, 1, 4432487, 1, 4432743, 1, 4432997, 1, 4433252, 1, 4434021, 1, 4434278, 1, 4434548, 2, 4434785, 4436082, 1, 4435058, 1, 4435314, 1, 4435567, 1, 4435831, 1, 4436329, 1, 4436583, 1, 4436840, 1, 4437108, 1, 4437345, 1, 4437618, 1, 4437874, 1, 4438127, 1, 4438391, 1, 4438881, 1, 4439152, 1, 4439411, 1, 4439668, 1, 4439919, 1, 4440425, 1, 4440679, 1, 4440936, 1, 4441204, 1, 4441441, 1, 4441714, 1, 4441970, 1, 4442223, 1, 4442487, 1, 4442997, 1, 4443245, 4, 4443755, 4444014, 4444272, 4448628, 2, 4444513, 4448101, 1, 4444786, 1, 4445042, 1, 4445295, 1, 4445559, 2, 4445804, 4446834, 1, 4446053, 1, 4446310, 1, 4446580, 1, 4447081, 1, 4447335, 1, 4447592, 1, 4447860, 1, 4448356, 3, 4449121, 4449638, 4449900, 1, 4449394, 1, 4450165, 1, 4450419, 1, 4451186, 2, 4451425, 4452473, 1, 4451689, 1, 4451950, 1, 4452197, 1, 4452979, 1, 4453228, 1, 4453477, 1, 4453747, 1, 4454003, 2, 4454505, 4456053, 2, 4454765, 4455535, 1, 4455013, 1, 4455283, 1, 4455790, 1, 4456307, 2, 4456804, 4459378, 2, 4457068, 4457587, 1, 4457337, 1, 4457840, 1, 4458085, 1, 4458337, 1, 4458603, 1, 4458853, 1, 4459122, 1, 4459621, 1, 4460133, 4, 4460589, 4466273, 4467042, 4467813, 4, 4460857, 4461158, 4462957, 4463730, 1, 4461409, 1, 4461676, 1, 4461932, 1, 4462185, 1, 4462446, 1, 4462695, 1, 4463209, 1, 4463460, 1, 4463973, 1, 4464246, 1, 4464485, 1, 4464754, 1, 4465011, 1, 4465253, 1, 4465508, 1, 4465709, 1, 4465977, 1, 4466547, 1, 4466804, 1, 4467297, 1, 4467570, 1, 4468082, 3, 4468325, 4468844, 4471154, 1, 4468580, 1, 4469093, 1, 4469350, 1, 4469620, 1, 4469857, 1, 4470130, 1, 4470386, 1, 4470639, 1, 4470903, 1, 4471401, 1, 4471655, 1, 4471912, 1, 4472180, 1, 4472417, 1, 4472690, 1, 4472946, 1, 4473199, 1, 4473463, 2, 4474213, 4475238, 1, 4474478, 1, 4474727, 1, 4474981, 1, 4475745, 1, 4476018, 1, 4476268, 1, 4476532, 5, 4477025, 4477795, 4479336, 4480365, 4480628, 1, 4477298, 1, 4477554, 1, 4478063, 1, 4478322, 1, 4478574, 1, 4478821, 1, 4479090, 1, 4479585, 1, 4479858, 1, 4480100, 1, 4480882, 1, 4481129, 6, 4481633, 4482659, 4483176, 4483433, 4484465, 4485748, 1, 4481905, 1, 4482165, 1, 4482415, 1, 4482930, 1, 4483693, 2, 4483941, 4484199, 2, 4484706, 4484981, 1, 4485231, 1, 4485490, 1, 4486002, 1, 4486255, 1, 4486507, 7, 4487011, 4488036, 4488808, 4489833, 4490860, 4491889, 4493170, 2, 4487267, 4487529, 1, 4487794, 1, 4488303, 1, 4488564, 1, 4489074, 1, 4489317, 1, 4489573, 1, 4490093, 1, 4490341, 1, 4490611, 1, 4491105, 1, 4491378, 1, 4491634, 1, 4492149, 1, 4492389, 1, 4492659, 1, 4492916, 2, 4493417, 4494192, 2, 4493669, 4493926, 1, 4494433, 1, 4494706, 17, 4495154, 4495411, 4495713, 4496482, 4496741, 4496999, 4498792, 4499561, 4500076, 4500333, 4500590, 4502383, 4503408, 4503666, 4506483, 4506740, 4507000, 1, 4495973, 1, 4496240, 2, 4497249, 4497767, 1, 4497516, 1, 4498017, 1, 4498279, 1, 4498533, 1, 4499061, 1, 4499314, 1, 4499827, 2, 4500833, 4501607, 1, 4501108, 1, 4501349, 1, 4501875, 1, 4502121, 3, 4502640, 4502900, 4503160, 3, 4503908, 4505205, 4506232, 1, 4504179, 1, 4504424, 1, 4504673, 1, 4504946, 1, 4505448, 1, 4505697, 1, 4505970, 4, 4507745, 4508261, 4508521, 4509039, 1, 4508001, 1, 4508777, 1, 4509295, 10, 4510049, 4510307, 4511332, 4512359, 4513641, 4514672, 4514930, 4515444, 4515704, 4515961, 1, 4510569, 1, 4510817, 1, 4511086, 1, 4511593, 1, 4511841, 1, 4512110, 1, 4512617, 1, 4512883, 1, 4513133, 1, 4513377, 2, 4513902, 4514420, 1, 4514151, 1, 4515192, 24, 4516656, 4550449, 4578401, 4678754, 4691043, 4693604, 4695909, 4746854, 4751463, 4762472, 4763497, 4818027, 4819564, 4821101, 4821358, 4823919, 4888176, 4888690, 4889203, 4890996, 4892789, 4929398, 4932471, 4934777, 10, 4516912, 4520241, 4526130, 4529715, 4533300, 4536373, 4539190, 4542007, 4544824, 4547641, 9, 4517169, 4517938, 4518195, 4518708, 4518965, 4519222, 4519479, 4519736, 4519993, 2, 4517473, 4517730, 1, 4518497, 10, 4520496, 4521009, 4521266, 4523571, 4523828, 4524085, 4524598, 4525111, 4525624, 4525881, 1, 4520801, 8, 4521569, 4521826, 4522083, 4522340, 4522597, 4522854, 4523111, 4523368, 1, 4524385, 1, 4524897, 1, 4525409, 10, 4526384, 4526641, 4526898, 4527411, 4527668, 4528181, 4528438, 4528695, 4528952, 4529465, 1, 4527201, 1, 4527969, 1, 4529249, 10, 4529968, 4530225, 4530738, 4530995, 4531764, 4532021, 4532278, 4532535, 4532792, 4533049, 1, 4530529, 2, 4531297, 4531554, 10, 4533552, 4534065, 4534322, 4534579, 4534836, 4535093, 4535350, 4535607, 4535864, 4536121, 1, 4533857, 10, 4536624, 4536881, 4537138, 4537395, 4537652, 4537909, 4538166, 4538423, 4538680, 4538937, 10, 4539440, 4539697, 4539954, 4540211, 4540468, 4540725, 4540982, 4541239, 4541496, 4541753, 10, 4542256, 4542513, 4542770, 4543027, 4543284, 4543541, 4543798, 4544055, 4544312, 4544569, 10, 4545072, 4545329, 4545586, 4545843, 4546100, 4546357, 4546614, 4546871, 4547128, 4547385, 10, 4547888, 4548145, 4548402, 4548659, 4548916, 4549173, 4549430, 4549687, 4549944, 4550201, 10, 4550704, 4553521, 4556338, 4559155, 4561972, 4564789, 4567606, 4570423, 4573240, 4576057, 10, 4550960, 4551217, 4551474, 4551731, 4551988, 4552245, 4552502, 4552759, 4553016, 4553273, 10, 4553776, 4554033, 4554290, 4554547, 4554804, 4555061, 4555318, 4555575, 4555832, 4556089, 10, 4556592, 4556849, 4557106, 4557363, 4557620, 4557877, 4558134, 4558391, 4558648, 4558905, 10, 4559408, 4559665, 4559922, 4560179, 4560436, 4560693, 4560950, 4561207, 4561464, 4561721, 10, 4562224, 4562481, 4562738, 4562995, 4563252, 4563509, 4563766, 4564023, 4564280, 4564537, 10, 4565040, 4565297, 4565554, 4565811, 4566068, 4566325, 4566582, 4566839, 4567096, 4567353, 10, 4567856, 4568113, 4568370, 4568627, 4568884, 4569141, 4569398, 4569655, 4569912, 4570169, 10, 4570672, 4570929, 4571186, 4571443, 4571700, 4571957, 4572214, 4572471, 4572728, 4572985, 10, 4573488, 4573745, 4574002, 4574259, 4574516, 4574773, 4575030, 4575287, 4575544, 4575801, 8, 4576304, 4576561, 4576818, 4577075, 4577332, 4577589, 4577846, 4578103, 21, 4578605, 4580658, 4580961, 4582499, 4588644, 4590437, 4599911, 4602728, 4609641, 4618603, 4620908, 4625518, 4639599, 4639856, 4644465, 4645234, 4661619, 4669044, 4674933, 4675192, 4676985, 7, 4578865, 4579122, 4579379, 4579636, 4579893, 4580150, 4580407, 2, 4581225, 4581497, 1, 4581753, 1, 4581985, 1, 4582241, 2, 4582760, 4583794, 1, 4583017, 1, 4583278, 1, 4583525, 1, 4584047, 1, 4584302, 1, 4584493, 3, 4584801, 4586082, 4587367, 1, 4585059, 1, 4585333, 1, 4585588, 1, 4585829, 1, 4586354, 1, 4586597, 1, 4586870, 1, 4587109, 1, 4587634, 1, 4587873, 1, 4588150, 1, 4588389, 3, 4588900, 4589685, 4589945, 1, 4589153, 1, 4589416, 1, 4590177, 5, 4590699, 4591724, 4592493, 4597870, 4599411, 1, 4590949, 1, 4591221, 1, 4591472, 1, 4591973, 1, 4592229, 4, 4592738, 4594535, 4595819, 4596854, 2, 4592993, 4593255, 1, 4593506, 1, 4593769, 1, 4594021, 1, 4594277, 1, 4594786, 1, 4595049, 1, 4595301, 1, 4595557, 1, 4596080, 1, 4596325, 1, 4596590, 1, 4597093, 1, 4597365, 1, 4597624, 2, 4598122, 4598905, 1, 4598373, 1, 4598644, 1, 4599145, 1, 4599657, 2, 4600165, 4600430, 2, 4600677, 4601193, 1, 4600948, 1, 4601446, 1, 4601721, 1, 4601961, 1, 4602222, 1, 4602471, 3, 4602977, 4608104, 4608618, 3, 4603233, 4605034, 4606064, 1, 4603504, 1, 4603762, 1, 4604001, 1, 4604257, 1, 4604526, 1, 4604769, 1, 4605281, 1, 4605550, 1, 4605801, 2, 4606305, 4607090, 1, 4606571, 1, 4606824, 1, 4607329, 1, 4607598, 1, 4607841, 1, 4608353, 1, 4608879, 1, 4609134, 1, 4609383, 8, 4609892, 4610667, 4611692, 4612717, 4614770, 4615284, 4616825, 4618106, 1, 4610149, 1, 4610414, 1, 4610933, 1, 4611186, 1, 4611439, 1, 4611938, 1, 4612207, 1, 4612472, 2, 4612961, 4614005, 1, 4613228, 1, 4613473, 1, 4613737, 1, 4614241, 1, 4614510, 1, 4615029, 1, 4615521, 1, 4615785, 1, 4616043, 1, 4616296, 1, 4616565, 1, 4617057, 1, 4617325, 1, 4617583, 1, 4617835, 1, 4618341, 2, 4618849, 4619891, 1, 4619123, 1, 4619361, 1, 4619634, 1, 4620149, 1, 4620402, 1, 4620641, 3, 4621153, 4623461, 4624500, 2, 4621419, 4622201, 1, 4621679, 1, 4621934, 1, 4622433, 1, 4622700, 1, 4622945, 1, 4623213, 1, 4623717, 1, 4623986, 1, 4624233, 1, 4624741, 1, 4625011, 1, 4625253, 9, 4625761, 4627299, 4628068, 4630887, 4632425, 4634222, 4634995, 4636788, 4638837, 2, 4626019, 4627060, 1, 4626284, 1, 4626533, 1, 4626803, 1, 4627560, 1, 4627829, 1, 4628321, 2, 4628585, 4630130, 2, 4628835, 4629100, 1, 4629353, 1, 4629614, 1, 4629863, 1, 4630377, 1, 4630638, 2, 4631137, 4632175, 1, 4631404, 1, 4631649, 1, 4631917, 1, 4632675, 1, 4632936, 1, 4633185, 1, 4633445, 1, 4633697, 1, 4633966, 1, 4634465, 1, 4634746, 2, 4635253, 4636025, 1, 4635489, 1, 4635749, 1, 4636271, 1, 4636526, 1, 4637029, 1, 4637292, 1, 4637552, 1, 4637801, 1, 4638053, 1, 4638307, 1, 4638565, 1, 4639073, 1, 4639340, 3, 4640105, 4640620, 4641139, 1, 4640369, 1, 4640869, 1, 4641396, 1, 4641647, 3, 4641892, 4642924, 4643957, 1, 4642159, 1, 4642423, 1, 4642670, 1, 4643173, 1, 4643430, 1, 4643700, 1, 4644208, 1, 4644705, 1, 4644966, 9, 4645474, 4646499, 4651621, 4651883, 4654194, 4657524, 4659573, 4660343, 4661369, 1, 4645749, 1, 4646004, 1, 4646241, 2, 4646753, 4650856, 2, 4647027, 4648052, 1, 4647273, 1, 4647540, 1, 4647781, 1, 4648303, 1, 4648493, 1, 4648819, 1, 4649076, 1, 4649313, 1, 4649571, 1, 4649827, 1, 4650081, 1, 4650356, 1, 4650607, 1, 4651109, 1, 4651374, 3, 4652077, 4653413, 4653939, 4, 4652337, 4652594, 4652851, 4653108, 1, 4653682, 3, 4654433, 4655465, 4656505, 1, 4654708, 1, 4654945, 1, 4655214, 1, 4655713, 1, 4655975, 1, 4656229, 1, 4656745, 1, 4657006, 1, 4657255, 2, 4657769, 4658553, 1, 4658017, 1, 4658284, 1, 4658802, 1, 4659049, 1, 4659297, 1, 4659819, 1, 4660085, 1, 4660577, 1, 4660850, 1, 4661097, 7, 4661857, 4662883, 4664424, 4665963, 4666223, 4666995, 4668789, 1, 4662130, 1, 4662369, 1, 4662637, 1, 4663157, 1, 4663404, 1, 4663657, 1, 4663918, 1, 4664165, 2, 4664626, 4664934, 1, 4665185, 1, 4665441, 1, 4665716, 1, 4666482, 1, 4666721, 2, 4667233, 4668009, 1, 4667495, 1, 4667749, 1, 4668270, 1, 4668519, 4, 4669285, 4670824, 4673138, 4673908, 1, 4669554, 1, 4669801, 1, 4670049, 1, 4670316, 1, 4670579, 1, 4671077, 1, 4671341, 1, 4671585, 1, 4671860, 1, 4672105, 1, 4672355, 1, 4672609, 1, 4672876, 1, 4673385, 1, 4673656, 1, 4674159, 1, 4674403, 1, 4674667, 1, 4675433, 1, 4675693, 2, 4675937, 4676201, 1, 4676474, 1, 4676709, 2, 4677217, 4678245, 1, 4677486, 1, 4677742, 1, 4677985, 1, 4678507, 8, 4678962, 4679219, 4679476, 4679777, 4682853, 4686697, 4688495, 4689013, 3, 4680033, 4681838, 4682609, 2, 4680299, 4681074, 1, 4680549, 1, 4680820, 1, 4681313, 1, 4681573, 1, 4682105, 1, 4682345, 4, 4683109, 4684398, 4684658, 4685429, 1, 4683371, 1, 4683621, 1, 4683877, 1, 4684148, 1, 4684897, 1, 4685157, 3, 4685677, 4685938, 4686456, 1, 4686185, 2, 4686962, 4688244, 1, 4687209, 1, 4687461, 1, 4687717, 1, 4687982, 1, 4688751, 4, 4689249, 4690021, 4690287, 4690805, 1, 4689509, 1, 4689773, 1, 4690545, 3, 4691304, 4692335, 4693369, 2, 4691553, 4692085, 1, 4691822, 1, 4692589, 1, 4692845, 1, 4693089, 3, 4693857, 4694628, 4695413, 1, 4694131, 1, 4694376, 1, 4694895, 1, 4695156, 1, 4695662, 16, 4696109, 4697441, 4700515, 4702564, 4710501, 4713575, 4716649, 4717420, 4721005, 4724590, 4727410, 4734323, 4736884, 4742773, 4745848, 4746106, 3, 4696369, 4696626, 4696941, 1, 4697185, 2, 4697715, 4700276, 1, 4697973, 1, 4698226, 1, 4698469, 1, 4698724, 1, 4698977, 1, 4699246, 1, 4699495, 1, 4699756, 1, 4700005, 1, 4700776, 1, 4701025, 1, 4701294, 1, 4701545, 1, 4701795, 1, 4702049, 1, 4702316, 3, 4702817, 4703333, 4705385, 1, 4703084, 1, 4703590, 1, 4703841, 1, 4704105, 1, 4704356, 1, 4704626, 1, 4704873, 1, 4705134, 4, 4705633, 4706147, 4707685, 4708725, 1, 4705900, 2, 4706401, 4706921, 1, 4706668, 1, 4707182, 1, 4707429, 1, 4707958, 1, 4708193, 1, 4708460, 1, 4708973, 1, 4709235, 1, 4709488, 1, 4709729, 1, 4709987, 1, 4710245, 4, 4710757, 4711274, 4711533, 4712052, 1, 4711013, 1, 4711797, 2, 4712293, 4712815, 1, 4712553, 1, 4713074, 1, 4713333, 1, 4713825, 3, 4714092, 4714608, 4715892, 1, 4714345, 1, 4714856, 1, 4715119, 1, 4715374, 1, 4715621, 1, 4716143, 1, 4716398, 1, 4716922, 1, 4717161, 3, 4717673, 4718188, 4719727, 1, 4717931, 1, 4718441, 1, 4718702, 1, 4718964, 1, 4719218, 1, 4719462, 2, 4719972, 4720750, 1, 4720233, 1, 4720483, 3, 4721197, 4722530, 4724335, 1, 4721521, 1, 4721775, 1, 4722032, 1, 4722280, 1, 4722789, 1, 4723058, 1, 4723315, 1, 4723560, 1, 4723817, 1, 4724080, 3, 4724836, 4725871, 4727155, 2, 4725093, 4725365, 1, 4725620, 2, 4726117, 4726386, 1, 4726625, 1, 4726888, 6, 4727651, 4728679, 4729193, 4730731, 4731503, 4732784, 1, 4727925, 1, 4728178, 1, 4728441, 1, 4728933, 1, 4729444, 1, 4729705, 1, 4729953, 1, 4730222, 1, 4730483, 1, 4730984, 1, 4731233, 1, 4731753, 1, 4732020, 1, 4732265, 1, 4732515, 1, 4733029, 1, 4733298, 1, 4733555, 1, 4733807, 1, 4734062, 4, 4734568, 4734825, 4735087, 4735347, 1, 4735589, 1, 4735854, 1, 4736105, 1, 4736353, 1, 4736622, 4, 4737121, 4737637, 4738415, 4739954, 1, 4737388, 2, 4737895, 4738155, 1, 4738658, 1, 4738917, 1, 4739180, 1, 4739445, 1, 4739699, 3, 4740197, 4741225, 4742511, 1, 4740468, 1, 4740709, 1, 4740979, 2, 4741473, 4741731, 1, 4741985, 1, 4742252, 3, 4743022, 4745329, 4745588, 1, 4743274, 1, 4743535, 1, 4743789, 1, 4744046, 1, 4744292, 1, 4744549, 1, 4744821, 1, 4745073, 1, 4746362, 1, 4746607, 5, 4747105, 4747621, 4749161, 4750703, 4751218, 1, 4747361, 1, 4747893, 3, 4748129, 4748657, 4748916, 1, 4748389, 2, 4749413, 4749945, 1, 4749669, 1, 4750177, 1, 4750449, 1, 4750958, 6, 4751713, 4752738, 4757605, 4758377, 4759151, 4760181, 3, 4751984, 4752244, 4752504, 5, 4752993, 4754021, 4755305, 4756079, 4757365, 1, 4753267, 1, 4753505, 1, 4753777, 3, 4754277, 4754542, 4754805, 1, 4755054, 1, 4755557, 1, 4755813, 2, 4756326, 4757103, 1, 4756597, 1, 4756845, 2, 4757872, 4758136, 1, 4758629, 1, 4758904, 3, 4759408, 4759668, 4759928, 5, 4760431, 4761200, 4761458, 4761972, 4762232, 2, 4760688, 4760952, 1, 4761720, 3, 4762721, 4762991, 4763258, 16, 4763693, 4765793, 4766307, 4770148, 4777317, 4797287, 4797545, 4798315, 4800620, 4804461, 4804974, 4814192, 4814450, 4816755, 4817524, 4817784, 7, 4763953, 4764210, 4764467, 4764724, 4764981, 4765238, 4765495, 1, 4766063, 1, 4766578, 1, 4766831, 3, 4767074, 4767600, 4768883, 1, 4767333, 1, 4767848, 1, 4768111, 1, 4768366, 1, 4768613, 1, 4769123, 1, 4769391, 1, 4769648, 1, 4769893, 5, 4770349, 4771937, 4772707, 4773476, 4776300, 1, 4770668, 1, 4770917, 1, 4771190, 1, 4771429, 1, 4771692, 1, 4772211, 1, 4772468, 1, 4772969, 1, 4773234, 2, 4773740, 4775791, 1, 4773989, 1, 4774189, 1, 4774519, 1, 4774757, 1, 4775020, 1, 4775283, 1, 4775528, 1, 4776052, 1, 4776553, 1, 4776814, 1, 4777061, 4, 4777573, 4777840, 4778101, 4797048, 1, 4778349, 1, 4778541, 8, 4778851, 4781672, 4782955, 4784494, 4785776, 4789874, 4791155, 4795508, 2, 4779112, 4780649, 1, 4779369, 1, 4779621, 1, 4779893, 1, 4780131, 1, 4780392, 1, 4780901, 1, 4781173, 1, 4781411, 1, 4781929, 1, 4782181, 1, 4782453, 1, 4782696, 1, 4783209, 1, 4783481, 1, 4783717, 1, 4783983, 1, 4784235, 1, 4784745, 1, 4784997, 1, 4785269, 1, 4785518, 2, 4786017, 4787561, 1, 4786286, 1, 4786547, 1, 4786793, 1, 4787055, 1, 4787315, 1, 4787813, 1, 4788085, 1, 4788336, 1, 4788525, 1, 4788851, 1, 4789097, 1, 4789359, 1, 4789619, 1, 4790121, 1, 4790373, 1, 4790645, 1, 4790892, 2, 4791401, 4792179, 1, 4791663, 1, 4791923, 1, 4792417, 1, 4792686, 1, 4792935, 2, 4793198, 4794483, 1, 4793449, 1, 4793701, 1, 4793973, 1, 4794222, 1, 4794729, 1, 4794991, 1, 4795251, 1, 4795753, 1, 4796011, 1, 4796261, 1, 4796533, 1, 4796788, 2, 4797805, 4798062, 2, 4798578, 4799605, 2, 4798825, 4799087, 1, 4799342, 1, 4799858, 1, 4800111, 1, 4800366, 3, 4800873, 4802155, 4802668, 1, 4801140, 1, 4801377, 1, 4801650, 1, 4801913, 1, 4802425, 2, 4802917, 4803433, 1, 4803188, 1, 4803695, 1, 4803950, 1, 4804211, 1, 4804709, 3, 4805225, 4809589, 4813945, 4, 4805474, 4806244, 4807277, 4808563, 1, 4805749, 1, 4806003, 1, 4806505, 1, 4806771, 1, 4807011, 2, 4807521, 4807785, 1, 4808058, 1, 4808293, 1, 4808820, 1, 4809061, 1, 4809330, 1, 4809843, 4, 4810029, 4812130, 4812388, 4812912, 1, 4810351, 1, 4810610, 1, 4810797, 1, 4811120, 1, 4811372, 1, 4811637, 1, 4811891, 1, 4812661, 1, 4813164, 1, 4813429, 1, 4813683, 2, 4814693, 4815209, 1, 4814948, 1, 4815458, 1, 4815713, 1, 4815969, 1, 4816242, 1, 4816501, 1, 4817010, 1, 4817249, 1, 4818288, 1, 4818529, 1, 4818802, 1, 4819041, 1, 4819313, 3, 4819809, 4820067, 4820580, 1, 4820336, 1, 4820850, 3, 4821601, 4822128, 4823161, 1, 4821875, 1, 4822380, 1, 4822645, 1, 4822899, 1, 4823393, 1, 4823661, 16, 4824109, 4825953, 4826210, 4827236, 4836200, 4837740, 4837998, 4856431, 4860784, 4861298, 4866675, 4868468, 4873077, 4876150, 4887160, 4887417, 6, 4824369, 4824626, 4824883, 4825140, 4825397, 4825654, 1, 4826473, 1, 4826732, 1, 4826981, 3, 4827493, 4829801, 4835445, 4, 4827756, 4828269, 4828530, 4829043, 1, 4828019, 1, 4828782, 1, 4829300, 1, 4829561, 1, 4830054, 1, 4830313, 1, 4830565, 1, 4830834, 1, 4831021, 9, 4831281, 4833330, 4833587, 4833844, 4834101, 4834358, 4834615, 4834872, 4835129, 7, 4831536, 4831793, 4832050, 4832307, 4832564, 4832821, 4833078, 1, 4835692, 1, 4835951, 1, 4836449, 1, 4836717, 1, 4836973, 1, 4837217, 1, 4837476, 7, 4838245, 4840295, 4843369, 4843627, 4844399, 4853875, 4854900, 1, 4838521, 1, 4838701, 1, 4839021, 1, 4839279, 1, 4839541, 1, 4839796, 1, 4840040, 2, 4840555, 4842095, 1, 4840805, 1, 4841077, 1, 4841313, 1, 4841573, 1, 4841841, 1, 4842348, 1, 4842601, 1, 4842849, 1, 4843118, 1, 4843877, 1, 4844153, 5, 4844643, 4846438, 4847975, 4850290, 4851315, 2, 4844908, 4845429, 1, 4845157, 1, 4845676, 1, 4845921, 1, 4846194, 1, 4846703, 1, 4846958, 1, 4847209, 1, 4847457, 1, 4847731, 1, 4848242, 1, 4848481, 2, 4848749, 4849776, 1, 4849005, 1, 4849263, 1, 4849523, 1, 4850024, 1, 4850529, 1, 4850793, 1, 4851052, 2, 4851568, 4852596, 1, 4851809, 1, 4852067, 1, 4852325, 1, 4852833, 1, 4853090, 1, 4853356, 1, 4853605, 1, 4854132, 1, 4854373, 1, 4854642, 2, 4855144, 4855401, 1, 4855653, 1, 4855909, 1, 4856174, 4, 4856676, 4856941, 4858734, 4858995, 2, 4857189, 4857968, 1, 4857461, 1, 4857716, 1, 4858229, 1, 4858481, 1, 4859237, 1, 4859437, 1, 4859747, 1, 4860018, 1, 4860261, 1, 4860517, 1, 4861030, 3, 4861550, 4862576, 4865140, 1, 4861801, 1, 4862062, 1, 4862311, 1, 4862824, 1, 4863087, 1, 4863340, 1, 4863599, 1, 4863847, 1, 4864105, 1, 4864355, 1, 4864609, 1, 4864876, 2, 4865377, 4865909, 1, 4865650, 1, 4866165, 1, 4866413, 1, 4866929, 1, 4867189, 2, 4867429, 4867689, 1, 4867956, 1, 4868207, 2, 4868712, 4869487, 1, 4868965, 1, 4869234, 1, 4869746, 3, 4869987, 4871273, 4872311, 1, 4870265, 1, 4870499, 1, 4870764, 1, 4871013, 1, 4871546, 1, 4871781, 1, 4872036, 1, 4872545, 1, 4872825, 3, 4873326, 4875123, 4875636, 2, 4873572, 4873844, 1, 4874081, 1, 4874345, 1, 4874606, 1, 4874867, 1, 4875365, 1, 4875880, 2, 4876389, 4886633, 3, 4876644, 4876909, 4886387, 1, 4877157, 1, 4877422, 1, 4877684, 1, 4877869, 4, 4878180, 4880230, 4882792, 4884087, 1, 4878441, 1, 4878689, 1, 4878951, 1, 4879215, 1, 4879470, 1, 4879713, 1, 4879980, 1, 4880492, 1, 4880751, 1, 4881007, 1, 4881266, 1, 4881520, 1, 4881772, 1, 4882017, 1, 4882286, 1, 4882533, 1, 4883049, 1, 4883310, 1, 4883559, 1, 4883813, 1, 4884321, 1, 4884588, 1, 4884844, 1, 4885104, 1, 4885356, 1, 4885601, 1, 4885870, 1, 4886117, 1, 4886885, 1, 4887649, 1, 4887913, 1, 4888417, 1, 4888943, 2, 4889443, 4889972, 1, 4889714, 1, 4890224, 1, 4890479, 1, 4890739, 1, 4891233, 1, 4891510, 1, 4891762, 1, 4892021, 1, 4892268, 1, 4892521, 18, 4892973, 4896097, 4897123, 4898405, 4898919, 4899433, 4899947, 4903788, 4910957, 4911726, 4913263, 4915312, 4915569, 4916594, 4918643, 4921460, 4923253, 4929144, 5, 4893233, 4893490, 4893747, 4894004, 4894311, 1, 4894561, 1, 4894817, 1, 4895080, 1, 4895340, 1, 4895585, 1, 4895841, 3, 4896357, 4896622, 4896883, 2, 4897377, 4898152, 1, 4897633, 1, 4897892, 1, 4898670, 1, 4899187, 1, 4899694, 3, 4900200, 4900715, 4902256, 1, 4900449, 1, 4900981, 1, 4901234, 1, 4901493, 1, 4901742, 1, 4901993, 1, 4902504, 1, 4902770, 1, 4903013, 1, 4903278, 1, 4903527, 1, 4904052, 2, 4904289, 4905065, 1, 4904558, 1, 4904809, 4, 4905325, 4906095, 4907632, 4910195, 1, 4905569, 1, 4905840, 1, 4906339, 1, 4906613, 1, 4906860, 1, 4907105, 1, 4907378, 1, 4907884, 2, 4908133, 4908393, 1, 4908643, 1, 4908897, 1, 4909172, 1, 4909417, 1, 4909679, 1, 4909934, 1, 4910437, 1, 4910708, 1, 4911201, 1, 4911472, 2, 4911969, 4912499, 1, 4912232, 1, 4912757, 1, 4912994, 5, 4913517, 4914288, 4914548, 4914808, 4915065, 1, 4913761, 1, 4914021, 1, 4915812, 1, 4916065, 1, 4916333, 4, 4916836, 4917349, 4917607, 4918392, 1, 4917089, 1, 4917877, 1, 4918066, 2, 4918888, 4920425, 2, 4919091, 4919410, 1, 4919663, 1, 4919919, 1, 4920173, 1, 4920675, 1, 4920929, 1, 4921196, 1, 4921704, 1, 4921953, 1, 4922220, 1, 4922473, 1, 4922745, 1, 4922977, 3, 4923506, 4925043, 4927094, 1, 4923748, 1, 4924008, 1, 4924257, 1, 4924522, 1, 4924769, 1, 4925289, 1, 4925547, 1, 4925793, 1, 4926068, 1, 4926319, 1, 4926561, 1, 4926830, 1, 4927349, 1, 4927610, 1, 4927848, 1, 4928097, 1, 4928363, 1, 4928619, 1, 4928885, 3, 4929637, 4931689, 4931951, 1, 4929909, 1, 4930145, 1, 4930405, 1, 4930670, 1, 4930919, 1, 4931169, 1, 4931437, 1, 4932208, 4, 4932705, 4933221, 4933737, 4934255, 1, 4932961, 1, 4933477, 1, 4933993, 1, 4934511, 5, 4935009, 4936304, 4936563, 4937844, 4938104, 1, 4935278, 1, 4935533, 1, 4935777, 1, 4936050, 1, 4936812, 1, 4937065, 1, 4937332, 1, 4937573, 27, 4938541, 4942640, 4956769, 4994146, 5001827, 5006692, 5021541, 5065830, 5066343, 5104488, 5107305, 5146730, 5161323, 5164652, 5180269, 5181038, 5186415, 5290608, 5295985, 5297010, 5307507, 5329268, 5345397, 5369718, 5375351, 5379961, 5395322, 3, 4938849, 4939619, 4940653, 1, 4939122, 1, 4939385, 1, 4939890, 1, 4940133, 1, 4940389, 1, 4940917, 1, 4941101, 1, 4941421, 1, 4941679, 1, 4941869, 2, 4942129, 4942386, 5, 4942896, 4945457, 4948786, 4951859, 4955700, 9, 4943153, 4943410, 4943667, 4943924, 4944181, 4944438, 4944695, 4944952, 4945209, 10, 4945712, 4945969, 4946226, 4946483, 4946740, 4946997, 4947254, 4947511, 4947768, 4948537, 2, 4948065, 4948322, 10, 4949040, 4949297, 4949554, 4949811, 4950068, 4950325, 4950838, 4951095, 4951352, 4951609, 1, 4950625, 10, 4952112, 4952369, 4952626, 4952883, 4953396, 4953909, 4954422, 4954679, 4955192, 4955449, 1, 4953185, 1, 4953697, 1, 4954209, 1, 4954977, 3, 4955952, 4956209, 4956466, 22, 4956973, 4959538, 4959796, 4960097, 4964450, 4966755, 4967781, 4968039, 4969320, 4969577, 4970605, 4971374, 4977263, 4977776, 4979569, 4979826, 4980851, 4984948, 4987765, 4991096, 4992121, 4993402, 9, 4957233, 4957490, 4957747, 4958004, 4958261, 4958518, 4958775, 4959032, 4959289, 3, 4960361, 4960619, 4962675, 1, 4960883, 1, 4961129, 1, 4961387, 1, 4961657, 1, 4961889, 1, 4962169, 1, 4962401, 1, 4962921, 1, 4963179, 1, 4963449, 1, 4963681, 1, 4963961, 1, 4964193, 2, 4964705, 4966252, 1, 4964980, 1, 4965217, 1, 4965477, 1, 4965729, 1, 4965998, 1, 4966497, 1, 4967029, 1, 4967284, 1, 4967525, 2, 4968289, 4968818, 1, 4968562, 1, 4969065, 2, 4969836, 4970098, 1, 4970337, 2, 4970802, 4971109, 5, 4971617, 4971876, 4973927, 4975727, 4975987, 1, 4972137, 1, 4972398, 1, 4972641, 1, 4972903, 1, 4973153, 1, 4973426, 1, 4973673, 1, 4974189, 1, 4974447, 1, 4974702, 1, 4974964, 1, 4975208, 1, 4975471, 1, 4976225, 1, 4976494, 1, 4976737, 1, 4977009, 1, 4977523, 2, 4978031, 4978544, 1, 4978291, 1, 4978802, 1, 4979055, 1, 4979320, 1, 4980082, 1, 4980335, 1, 4980599, 3, 4981089, 4983400, 4983915, 1, 4981356, 1, 4981609, 1, 4981882, 1, 4982113, 1, 4982388, 1, 4982633, 1, 4982895, 1, 4983150, 1, 4983657, 1, 4984161, 1, 4984432, 1, 4984681, 2, 4985193, 4986485, 1, 4985455, 1, 4985710, 1, 4985953, 1, 4986220, 1, 4986738, 1, 4986977, 1, 4987244, 1, 4987507, 3, 4988004, 4988787, 4990324, 1, 4988265, 1, 4988538, 1, 4989029, 1, 4989281, 1, 4989556, 1, 4989797, 1, 4990052, 1, 4990568, 1, 4990835, 1, 4991337, 1, 4991585, 1, 4991854, 1, 4992353, 1, 4992622, 1, 4992878, 1, 4993121, 1, 4993633, 1, 4993906, 6, 4994401, 4995433, 4997231, 4998259, 4998773, 5000313, 3, 4994672, 4994932, 4995192, 4, 4995685, 4996464, 4996724, 4996984, 2, 4995952, 4996216, 3, 4997488, 4997748, 4998008, 1, 4998512, 4, 4999024, 4999282, 4999796, 5000056, 1, 4999544, 4, 5000560, 5000818, 5001332, 5001592, 1, 5001080, 6, 5002081, 5003365, 5004392, 5005167, 5005941, 5006457, 2, 5002352, 5002610, 1, 5002863, 1, 5003118, 1, 5003620, 1, 5003881, 1, 5004140, 1, 5004641, 1, 5004917, 1, 5005422, 1, 5005671, 1, 5006192, 5, 5006945, 5011045, 5014121, 5016943, 5019765, 6, 5007201, 5009517, 5009776, 5010035, 5010548, 5010808, 1, 5007470, 1, 5007719, 1, 5007975, 1, 5008229, 1, 5008501, 1, 5008737, 1, 5008997, 1, 5009268, 1, 5010280, 4, 5011301, 5011568, 5011829, 5013880, 3, 5012065, 5013364, 5013624, 1, 5012325, 1, 5012594, 1, 5012837, 1, 5013093, 7, 5014369, 5014884, 5015397, 5015920, 5016177, 5016436, 5016696, 1, 5014641, 1, 5015137, 1, 5015672, 7, 5017196, 5017709, 5018478, 5018735, 5018992, 5019252, 5019512, 1, 5017445, 1, 5017954, 1, 5018229, 5, 5020014, 5020272, 5020530, 5021044, 5021304, 1, 5020792, 18, 5021741, 5024097, 5025890, 5028195, 5029477, 5029735, 5042537, 5043820, 5044078, 5045615, 5045872, 5047153, 5048946, 5049459, 5057652, 5059445, 5061239, 5064312, 7, 5022001, 5022258, 5022515, 5022772, 5023029, 5023286, 5023595, 1, 5023855, 1, 5024370, 2, 5024616, 5025138, 1, 5024875, 1, 5025391, 1, 5025655, 1, 5026149, 1, 5026414, 1, 5026675, 1, 5026932, 1, 5027177, 1, 5027437, 1, 5027693, 1, 5027941, 1, 5028459, 1, 5028724, 1, 5028969, 1, 5029221, 1, 5029985, 1, 5030260, 2, 5030501, 5031017, 1, 5030756, 2, 5031279, 5031798, 1, 5031534, 1, 5032037, 3, 5032301, 5035124, 5039222, 1, 5032549, 1, 5032804, 1, 5033065, 1, 5033333, 1, 5033581, 1, 5033843, 1, 5034096, 1, 5034337, 1, 5034595, 1, 5034853, 1, 5035368, 1, 5035625, 2, 5035875, 5037678, 1, 5036139, 1, 5036403, 1, 5036656, 1, 5036897, 1, 5037155, 1, 5037413, 1, 5037939, 1, 5038192, 1, 5038433, 1, 5038691, 1, 5038949, 1, 5039461, 1, 5039730, 1, 5039993, 1, 5040244, 1, 5040488, 1, 5040745, 1, 5041006, 1, 5041267, 1, 5041520, 1, 5041761, 1, 5042019, 1, 5042277, 1, 5042804, 1, 5043048, 1, 5043301, 1, 5043570, 2, 5044321, 5045103, 1, 5044590, 1, 5044847, 1, 5045349, 1, 5046132, 1, 5046389, 1, 5046638, 1, 5046885, 1, 5047413, 2, 5047652, 5048425, 1, 5047905, 1, 5048161, 1, 5048694, 1, 5049188, 3, 5049701, 5050483, 5051252, 1, 5049953, 1, 5050226, 1, 5050741, 1, 5050995, 1, 5051493, 1, 5051748, 2, 5052007, 5055596, 1, 5052274, 1, 5052517, 1, 5052769, 1, 5053044, 1, 5053285, 1, 5053554, 1, 5053799, 1, 5054066, 1, 5054309, 1, 5054561, 1, 5054836, 1, 5055077, 1, 5055346, 1, 5055845, 1, 5056115, 1, 5056371, 1, 5056620, 1, 5056869, 1, 5057139, 1, 5057395, 1, 5057911, 1, 5058159, 1, 5058418, 1, 5058667, 1, 5058917, 1, 5059172, 1, 5059700, 2, 5059941, 5060466, 1, 5060210, 1, 5060705, 1, 5060972, 3, 5061473, 5061740, 5062771, 1, 5061993, 1, 5062254, 1, 5062501, 1, 5063024, 1, 5063265, 1, 5063536, 1, 5063781, 1, 5064050, 2, 5064553, 5065588, 1, 5064819, 1, 5065076, 1, 5065331, 1, 5066098, 12, 5066593, 5069925, 5073511, 5085032, 5085545, 5086827, 5096815, 5099635, 5100404, 5100917, 5103478, 5103993, 9, 5066849, 5067368, 5067625, 5067886, 5068656, 5068913, 5069171, 5069428, 5069688, 1, 5067113, 1, 5068135, 1, 5068405, 6, 5070177, 5071214, 5071472, 5071729, 5071989, 5073272, 1, 5070436, 1, 5070689, 1, 5070956, 1, 5072242, 1, 5072485, 1, 5072757, 1, 5073012, 6, 5073761, 5075301, 5078121, 5078383, 5078901, 5084023, 2, 5074017, 5075056, 1, 5074285, 1, 5074529, 1, 5074789, 3, 5075557, 5076590, 5076853, 2, 5075813, 5076340, 1, 5076069, 2, 5077089, 5077880, 1, 5077349, 1, 5077620, 1, 5078639, 6, 5079137, 5080933, 5081709, 5081967, 5082992, 5083250, 1, 5079397, 2, 5079662, 5079923, 1, 5080168, 1, 5080417, 1, 5080677, 1, 5081189, 1, 5081460, 3, 5082221, 5082478, 5082737, 1, 5083489, 1, 5083749, 1, 5084257, 1, 5084517, 1, 5084782, 1, 5085281, 2, 5085797, 5086569, 2, 5086064, 5086328, 6, 5087073, 5088613, 5090921, 5092469, 5095031, 5096057, 3, 5087329, 5088112, 5088369, 1, 5087597, 1, 5087849, 1, 5088885, 3, 5089121, 5090162, 5090680, 1, 5089381, 2, 5089645, 5089905, 1, 5090409, 2, 5091173, 5091694, 1, 5091429, 1, 5091940, 1, 5092201, 4, 5092709, 5094253, 5094510, 5094768, 1, 5092974, 1, 5093242, 1, 5093477, 1, 5093749, 1, 5093997, 1, 5095265, 1, 5095525, 1, 5095790, 1, 5096293, 1, 5096549, 9, 5097061, 5097581, 5097838, 5098095, 5098352, 5098609, 5098868, 5099125, 5099384, 1, 5097320, 1, 5099881, 1, 5100141, 1, 5100658, 4, 5101153, 5102181, 5102446, 5102703, 2, 5101413, 5101934, 1, 5101684, 2, 5102964, 5103224, 1, 5103717, 1, 5104229, 4, 5104737, 5105514, 5106032, 5106805, 1, 5105010, 1, 5105266, 1, 5105761, 1, 5106273, 1, 5106546, 1, 5107045, 18, 5107501, 5110066, 5110369, 5110626, 5110885, 5126247, 5130856, 5132649, 5132907, 5137261, 5137518, 5142639, 5143152, 5143410, 5144435, 5145460, 5146230, 5146488, 8, 5107761, 5108018, 5108275, 5108532, 5108789, 5109046, 5109303, 5109620, 1, 5109861, 3, 5111152, 5111413, 5126008, 1, 5111662, 1, 5111853, 7, 5112163, 5114984, 5116267, 5117808, 5120626, 5121907, 5122932, 2, 5112424, 5113961, 1, 5112681, 1, 5112933, 1, 5113205, 1, 5113443, 1, 5113704, 1, 5114213, 1, 5114485, 1, 5114723, 1, 5115241, 1, 5115493, 1, 5115765, 1, 5116008, 1, 5116521, 1, 5116793, 1, 5117029, 1, 5117295, 1, 5117547, 2, 5118049, 5119593, 1, 5118318, 1, 5118579, 1, 5118825, 1, 5119087, 1, 5119347, 1, 5119845, 1, 5120117, 1, 5120368, 1, 5120873, 1, 5121125, 1, 5121397, 1, 5121644, 1, 5122153, 1, 5122415, 1, 5122675, 2, 5123176, 5124713, 1, 5123433, 1, 5123685, 1, 5123957, 1, 5124212, 1, 5124456, 1, 5124971, 1, 5125221, 1, 5125493, 1, 5125748, 3, 5126503, 5128040, 5128553, 1, 5126753, 1, 5127016, 1, 5127273, 1, 5127540, 1, 5127777, 1, 5128308, 1, 5128804, 1, 5129057, 2, 5129317, 5130093, 1, 5129587, 1, 5129832, 1, 5130345, 1, 5130606, 1, 5131123, 1, 5131368, 1, 5131638, 1, 5131873, 1, 5132147, 1, 5132385, 3, 5133153, 5134184, 5135471, 1, 5133416, 1, 5133673, 1, 5133940, 1, 5134433, 1, 5134696, 1, 5134953, 1, 5135220, 1, 5135724, 1, 5135987, 1, 5136226, 1, 5136501, 1, 5136754, 1, 5136999, 4, 5137721, 5138020, 5138789, 5142132, 1, 5138273, 1, 5138482, 2, 5138989, 5140852, 1, 5139316, 1, 5139560, 1, 5139817, 1, 5140082, 1, 5140340, 1, 5140601, 2, 5141093, 5141881, 1, 5141349, 1, 5141614, 1, 5142376, 1, 5142894, 1, 5143669, 1, 5143911, 1, 5144181, 2, 5144673, 5145188, 1, 5144935, 1, 5145714, 1, 5145957, 7, 5146977, 5149283, 5149797, 5152873, 5155183, 5156469, 5159801, 5, 5147233, 5147493, 5148525, 5148784, 5149041, 1, 5147757, 1, 5148012, 1, 5148265, 1, 5149561, 2, 5150053, 5150837, 1, 5150309, 1, 5150565, 3, 5151073, 5152372, 5152632, 1, 5151333, 2, 5151597, 5151854, 1, 5152097, 4, 5153125, 5154416, 5154676, 5154936, 4, 5153381, 5153648, 5153908, 5154168, 4, 5155439, 5155696, 5155956, 5156216, 7, 5156705, 5157221, 5157743, 5158256, 5158513, 5159026, 5159544, 1, 5156965, 1, 5157489, 1, 5158008, 1, 5158753, 1, 5159288, 4, 5160048, 5160306, 5160820, 5161080, 1, 5160568, 3, 5161569, 5163113, 5164143, 2, 5161825, 5162869, 1, 5162098, 1, 5162337, 1, 5162597, 1, 5163374, 1, 5163620, 1, 5163881, 1, 5164397, 6, 5164848, 5171553, 5172580, 5173093, 5178483, 5179252, 3, 5165104, 5167921, 5170994, 9, 5165361, 5165618, 5165875, 5166132, 5166389, 5166902, 5167159, 5167416, 5167673, 1, 5166689, 10, 5168176, 5168433, 5168690, 5168947, 5169204, 5169461, 5169718, 5169975, 5170488, 5170745, 1, 5170273, 1, 5171248, 2, 5171826, 5172341, 1, 5172082, 1, 5172850, 3, 5173350, 5177713, 5177971, 1, 5173620, 2, 5173857, 5175154, 1, 5174130, 1, 5174386, 1, 5174639, 1, 5174903, 1, 5175401, 1, 5175655, 1, 5175912, 1, 5176180, 1, 5176417, 1, 5176690, 1, 5176946, 1, 5177199, 1, 5177463, 1, 5178227, 1, 5178729, 1, 5178989, 1, 5179506, 1, 5179753, 1, 5180005, 1, 5180521, 1, 5180772, 8, 5181281, 5181794, 5182565, 5182823, 5184616, 5185134, 5185647, 5185913, 1, 5181537, 1, 5182067, 1, 5182320, 3, 5183073, 5183593, 5184111, 1, 5183329, 1, 5183849, 1, 5184367, 1, 5184865, 1, 5185377, 1, 5186145, 16, 5186605, 5189473, 5189730, 5191012, 5191531, 5192557, 5194606, 5205615, 5206384, 5206898, 5214067, 5214580, 5287286, 5289591, 5290104, 5290361, 6, 5186865, 5187122, 5187379, 5187636, 5187893, 5188194, 1, 5188466, 1, 5188709, 1, 5188961, 1, 5189227, 1, 5190002, 1, 5190245, 1, 5190497, 1, 5190763, 1, 5191269, 1, 5191784, 1, 5192053, 1, 5192299, 1, 5192809, 2, 5193070, 5193843, 1, 5193313, 1, 5193580, 1, 5194093, 1, 5194337, 3, 5194797, 5200482, 5203814, 3, 5195106, 5197162, 5198704, 1, 5195378, 1, 5195621, 1, 5195873, 1, 5196139, 1, 5196393, 1, 5196654, 1, 5196903, 1, 5197423, 1, 5197673, 1, 5197934, 1, 5198181, 1, 5198450, 1, 5198959, 1, 5199220, 1, 5199457, 1, 5199714, 1, 5199980, 1, 5200229, 1, 5200754, 1, 5200997, 1, 5201249, 1, 5201515, 1, 5201769, 1, 5202030, 1, 5202279, 1, 5202547, 1, 5202800, 1, 5203041, 1, 5203299, 1, 5203557, 1, 5204079, 1, 5204338, 1, 5204587, 1, 5204841, 1, 5205102, 1, 5205351, 1, 5205870, 1, 5206133, 1, 5206630, 3, 5207140, 5207917, 5208692, 1, 5207401, 1, 5207651, 1, 5208161, 1, 5208428, 1, 5208936, 2, 5209189, 5213047, 2, 5209441, 5212530, 1, 5209715, 1, 5209972, 1, 5210157, 1, 5210480, 1, 5210735, 1, 5210985, 1, 5211246, 1, 5211508, 1, 5211753, 1, 5212014, 1, 5212263, 1, 5212782, 1, 5213285, 1, 5213555, 1, 5213812, 1, 5214309, 13, 5214817, 5216099, 5220452, 5224805, 5231207, 5236585, 5238124, 5247342, 5248880, 5253490, 5261427, 5278068, 5284470, 1, 5215092, 1, 5215337, 1, 5215599, 1, 5215854, 3, 5216360, 5217135, 5219189, 1, 5216613, 1, 5216868, 1, 5217390, 1, 5217639, 1, 5217906, 1, 5218165, 1, 5218405, 1, 5218670, 1, 5218932, 1, 5219440, 1, 5219683, 1, 5219937, 1, 5220208, 1, 5220719, 1, 5220981, 1, 5221218, 1, 5221484, 1, 5221733, 1, 5222006, 1, 5222245, 1, 5222514, 1, 5222772, 1, 5223017, 1, 5223267, 1, 5223521, 1, 5223788, 1, 5224034, 1, 5224289, 1, 5224562, 6, 5225058, 5226088, 5227116, 5228657, 5229683, 5229944, 1, 5225327, 1, 5225583, 1, 5225835, 1, 5226341, 1, 5226593, 1, 5226852, 1, 5227365, 1, 5227629, 1, 5227877, 1, 5228142, 1, 5228404, 1, 5228917, 1, 5229153, 1, 5229420, 1, 5230185, 1, 5230451, 1, 5230708, 1, 5230963, 1, 5231474, 1, 5231717, 1, 5231969, 1, 5232244, 1, 5232485, 1, 5232754, 3, 5232997, 5234284, 5235316, 1, 5233265, 1, 5233525, 1, 5233761, 1, 5234028, 1, 5234533, 1, 5234803, 1, 5235059, 1, 5235561, 1, 5235820, 1, 5236068, 1, 5236325, 1, 5236846, 1, 5237110, 3, 5237345, 5237602, 5237859, 1, 5238373, 2, 5238630, 5242483, 1, 5238900, 1, 5239156, 1, 5239410, 1, 5239657, 1, 5239905, 1, 5240174, 1, 5240423, 1, 5240684, 1, 5240933, 1, 5241189, 1, 5241457, 1, 5241717, 1, 5241953, 1, 5242220, 1, 5242739, 3, 5242981, 5244263, 5246068, 1, 5243249, 1, 5243509, 1, 5243745, 1, 5244012, 1, 5244530, 1, 5244773, 1, 5245025, 1, 5245300, 1, 5245541, 1, 5245810, 1, 5246313, 1, 5246572, 1, 5246820, 1, 5247077, 1, 5247593, 1, 5247862, 3, 5248097, 5248354, 5248611, 1, 5249138, 1, 5249381, 1, 5249635, 1, 5249893, 1, 5250148, 1, 5250405, 1, 5250675, 1, 5250931, 1, 5251180, 1, 5251425, 1, 5251694, 1, 5251956, 1, 5252197, 1, 5252465, 1, 5252725, 1, 5252961, 1, 5253228, 2, 5253733, 5257065, 1, 5254006, 1, 5254245, 1, 5254514, 1, 5254771, 1, 5255013, 1, 5255269, 1, 5255532, 1, 5255781, 1, 5256045, 1, 5256293, 1, 5256558, 1, 5256820, 1, 5257319, 1, 5257576, 1, 5257844, 1, 5258100, 1, 5258354, 1, 5258601, 1, 5258849, 1, 5259118, 1, 5259367, 1, 5259628, 1, 5259877, 1, 5260133, 1, 5260401, 1, 5260661, 1, 5260897, 1, 5261164, 2, 5261681, 5268597, 1, 5261941, 1, 5262177, 1, 5262450, 1, 5262693, 1, 5262963, 1, 5263221, 2, 5263458, 5265776, 1, 5263731, 1, 5263973, 1, 5264244, 1, 5264485, 1, 5264753, 1, 5265013, 1, 5265249, 1, 5265516, 1, 5266021, 1, 5266290, 1, 5266547, 1, 5266789, 1, 5267060, 1, 5267301, 1, 5267569, 1, 5267829, 1, 5268065, 1, 5268332, 3, 5268834, 5271139, 5275248, 1, 5269107, 1, 5269349, 1, 5269620, 1, 5269861, 1, 5270129, 1, 5270389, 1, 5270625, 1, 5270892, 1, 5271395, 1, 5271653, 1, 5271909, 1, 5272164, 1, 5272435, 1, 5272691, 1, 5272940, 1, 5273185, 1, 5273454, 1, 5273716, 1, 5273957, 1, 5274225, 1, 5274485, 1, 5274721, 1, 5274988, 1, 5275493, 1, 5275762, 1, 5276019, 1, 5276261, 1, 5276532, 1, 5276773, 1, 5277041, 1, 5277301, 1, 5277537, 1, 5277804, 2, 5278313, 5284207, 1, 5278572, 1, 5278820, 1, 5279077, 3, 5279333, 5280614, 5282932, 1, 5279601, 1, 5279861, 1, 5280097, 1, 5280364, 1, 5280885, 1, 5281132, 1, 5281388, 1, 5281637, 1, 5281905, 1, 5282165, 1, 5282401, 1, 5282668, 1, 5283177, 1, 5283436, 1, 5283684, 1, 5283941, 1, 5284709, 1, 5284978, 1, 5285236, 1, 5285481, 1, 5285731, 1, 5285985, 1, 5286252, 1, 5286498, 1, 5286753, 1, 5287026, 2, 5287525, 5288809, 1, 5287789, 1, 5288034, 1, 5288293, 1, 5288562, 1, 5289068, 1, 5289317, 1, 5289827, 4, 5290849, 5292652, 5293167, 5294450, 1, 5291122, 1, 5291361, 1, 5291628, 1, 5291884, 1, 5292133, 1, 5292396, 1, 5292897, 1, 5293420, 1, 5293673, 1, 5293934, 1, 5294196, 2, 5294691, 5295461, 1, 5294965, 1, 5295205, 1, 5295715, 2, 5296225, 5296489, 1, 5296743, 7, 5297249, 5298789, 5300073, 5302383, 5303156, 5304181, 5305977, 4, 5297520, 5297778, 5298292, 5298552, 1, 5298034, 4, 5299056, 5299315, 5299572, 5299832, 1, 5300327, 1, 5300584, 1, 5300852, 1, 5301089, 1, 5301362, 1, 5301618, 1, 5301871, 1, 5302135, 2, 5302640, 5302904, 1, 5303410, 1, 5303657, 1, 5303909, 5, 5304417, 5304688, 5304946, 5305460, 5305720, 1, 5305208, 4, 5306224, 5306482, 5306996, 5307256, 1, 5306744, 10, 5307745, 5308003, 5309285, 5310824, 5317993, 5320045, 5320815, 5321328, 5322097, 5323893, 2, 5308259, 5309042, 1, 5308533, 1, 5308773, 2, 5309550, 5309813, 1, 5310049, 1, 5310309, 1, 5310574, 5, 5311073, 5311589, 5312105, 5312879, 5316469, 1, 5311345, 1, 5311845, 1, 5312357, 1, 5312613, 1, 5313138, 1, 5313396, 2, 5313645, 5314416, 1, 5313897, 1, 5314148, 1, 5314657, 1, 5314930, 1, 5315169, 1, 5315436, 1, 5315692, 1, 5315941, 1, 5316204, 3, 5316709, 5317231, 5317748, 1, 5316980, 1, 5317488, 2, 5318245, 5319277, 1, 5318501, 2, 5318768, 5319028, 1, 5319525, 1, 5319793, 1, 5320297, 1, 5320548, 1, 5321069, 1, 5321569, 1, 5321842, 1, 5322355, 1, 5322613, 2, 5322850, 5323376, 1, 5323109, 1, 5323621, 6, 5324130, 5325923, 5326445, 5326702, 5326959, 5327472, 2, 5324389, 5324659, 1, 5324901, 1, 5325172, 1, 5325413, 1, 5325681, 1, 5326179, 1, 5327220, 2, 5327717, 5327987, 1, 5328229, 1, 5328500, 1, 5328741, 1, 5329009, 11, 5329505, 5330277, 5332583, 5333096, 5333865, 5335404, 5335919, 5337458, 5342579, 5343349, 5344376, 2, 5329761, 5330032, 3, 5330533, 5330798, 5331061, 2, 5331309, 5331566, 1, 5331815, 1, 5332066, 1, 5332321, 1, 5332844, 1, 5333345, 1, 5333621, 2, 5334117, 5334636, 1, 5334373, 1, 5334884, 1, 5335141, 1, 5335655, 2, 5336167, 5336433, 1, 5336688, 1, 5336933, 1, 5337198, 1, 5337705, 1, 5337953, 1, 5338222, 1, 5338471, 1, 5338732, 1, 5338981, 2, 5339244, 5340786, 1, 5339493, 1, 5339750, 1, 5340020, 1, 5340261, 1, 5340529, 1, 5341033, 1, 5341287, 1, 5341544, 1, 5341812, 1, 5342053, 1, 5342321, 1, 5342817, 1, 5343093, 3, 5343594, 5343853, 5344117, 2, 5344609, 5344873, 1, 5345142, 17, 5345581, 5346608, 5354289, 5354849, 5355362, 5356389, 5357163, 5357932, 5358445, 5362798, 5365359, 5366128, 5366386, 5366899, 5367668, 5368949, 5369464, 3, 5345841, 5346098, 5346355, 3, 5346864, 5349425, 5353010, 9, 5347121, 5347378, 5347635, 5347892, 5348149, 5348406, 5348663, 5348920, 5349177, 10, 5349680, 5350193, 5350706, 5350963, 5351220, 5351477, 5351734, 5351991, 5352248, 5352761, 1, 5349985, 1, 5350497, 1, 5352545, 3, 5353264, 5353521, 5353778, 1, 5354081, 1, 5354545, 1, 5355109, 1, 5355625, 1, 5355873, 1, 5356142, 1, 5356654, 1, 5356903, 1, 5357428, 1, 5357665, 1, 5358188, 3, 5358690, 5359717, 5362291, 1, 5358949, 1, 5359218, 1, 5359475, 1, 5359986, 3, 5360225, 5361513, 5362031, 2, 5360492, 5360756, 1, 5361007, 1, 5361266, 1, 5361763, 1, 5362544, 3, 5363041, 5364583, 5364853, 1, 5363318, 2, 5363561, 5364085, 1, 5363819, 1, 5364340, 1, 5365114, 2, 5365616, 5365880, 1, 5366648, 1, 5367144, 1, 5367413, 1, 5367913, 1, 5368172, 1, 5368428, 1, 5368693, 1, 5369198, 5, 5369956, 5370984, 5372009, 5373292, 5374322, 1, 5370209, 1, 5370483, 1, 5370728, 1, 5371233, 1, 5371506, 1, 5371762, 1, 5372270, 1, 5372518, 1, 5372777, 1, 5373038, 1, 5373537, 1, 5373810, 1, 5374066, 1, 5374561, 1, 5374834, 1, 5375090, 5, 5375585, 5377637, 5377897, 5378414, 5379439, 2, 5375841, 5376114, 2, 5376360, 5376882, 1, 5376619, 1, 5377135, 1, 5377399, 1, 5378153, 1, 5378661, 1, 5378913, 1, 5379186, 1, 5379695, 10, 5380193, 5382755, 5383268, 5383525, 5384808, 5385321, 5390186, 5390703, 5392501, 5394807, 6, 5380449, 5380709, 5381736, 5381994, 5382253, 5382510, 1, 5380973, 1, 5381217, 1, 5381477, 1, 5383009, 4, 5383781, 5384040, 5384302, 5384564, 1, 5385057, 8, 5385569, 5386853, 5387886, 5388912, 5389170, 5389427, 5389684, 5389944, 1, 5385835, 1, 5386085, 1, 5386350, 1, 5386599, 3, 5387120, 5387380, 5387640, 1, 5388077, 1, 5388388, 1, 5388655, 1, 5390433, 6, 5390945, 5391214, 5391471, 5391728, 5391988, 5392248, 6, 5392741, 5393006, 5393263, 5394032, 5394292, 5394552, 2, 5393520, 5393784, 1, 5395041, 6, 5395553, 5396837, 5397865, 5399663, 5400437, 5402745, 4, 5395824, 5396081, 5396340, 5396600, 2, 5397109, 5397624, 1, 5397357, 4, 5398117, 5398896, 5399156, 5399416, 2, 5398384, 5398648, 2, 5399920, 5400184, 6, 5400686, 5400943, 5401456, 5401713, 5401970, 5402488, 1, 5401208, 1, 5402232, 4, 5402992, 5403250, 5403764, 5404024, 1, 5403512, 27, 5404461, 5408304, 5429345, 5433442, 5442915, 5450852, 5455717, 5457766, 5460327, 5463912, 5465193, 5466218, 5468523, 5470060, 5476205, 5482350, 5499759, 5505648, 5531249, 5531506, 5549683, 5554036, 5561461, 5566582, 5580663, 5581176, 5582969, 7, 5404721, 5404978, 5405235, 5405541, 5406063, 5406837, 5407097, 1, 5405807, 1, 5406253, 1, 5406569, 2, 5407329, 5407845, 1, 5407589, 1, 5408111, 6, 5408560, 5413169, 5417010, 5420851, 5425204, 5428021, 9, 5408817, 5409330, 5409587, 5409844, 5410101, 5410614, 5412407, 5412664, 5412921, 1, 5409121, 1, 5410401, 6, 5410913, 5411170, 5411427, 5411684, 5411941, 5412198, 10, 5413424, 5414449, 5414706, 5414963, 5415220, 5415477, 5415734, 5415991, 5416248, 5416505, 3, 5413729, 5413986, 5414243, 1, 5416801, 10, 5417264, 5417777, 5418034, 5418291, 5418548, 5419061, 5419574, 5419831, 5420088, 5420345, 1, 5417569, 1, 5418849, 1, 5419361, 1, 5420641, 10, 5421104, 5421617, 5421874, 5422131, 5422644, 5422901, 5423158, 5424439, 5424696, 5424953, 1, 5421409, 1, 5422433, 4, 5423457, 5423714, 5423971, 5424228, 10, 5425456, 5425713, 5425970, 5426227, 5426484, 5426741, 5426998, 5427255, 5427512, 5427769, 2, 5428272, 5429041, 2, 5428577, 5428834, 5, 5429602, 5431395, 5432427, 5432691, 5433209, 1, 5429871, 1, 5430113, 1, 5430374, 1, 5430633, 1, 5430892, 1, 5431145, 1, 5431669, 1, 5431924, 1, 5432165, 1, 5432948, 5, 5433701, 5435242, 5436268, 5437551, 5439347, 1, 5433964, 2, 5434223, 5434741, 1, 5434483, 1, 5434995, 1, 5435493, 1, 5435747, 1, 5436020, 1, 5436521, 1, 5436785, 1, 5437045, 1, 5437285, 2, 5437798, 5438828, 1, 5438057, 1, 5438316, 1, 5438569, 1, 5439091, 2, 5439589, 5440884, 1, 5439858, 1, 5440118, 1, 5440357, 1, 5440626, 1, 5441138, 1, 5441397, 1, 5441635, 1, 5441908, 1, 5442153, 1, 5442415, 1, 5442670, 6, 5443171, 5444969, 5445740, 5446770, 5447028, 5450617, 1, 5443436, 1, 5443701, 1, 5443955, 1, 5444201, 1, 5444463, 1, 5444718, 1, 5445234, 1, 5445475, 1, 5445999, 1, 5446243, 1, 5446507, 2, 5447265, 5448815, 1, 5447527, 1, 5447791, 1, 5448046, 1, 5448289, 1, 5448556, 2, 5449058, 5449840, 1, 5449317, 1, 5449586, 1, 5450101, 1, 5450355, 7, 5451105, 5451874, 5452900, 5453157, 5453673, 5454191, 5454707, 1, 5451379, 1, 5451624, 1, 5452140, 1, 5452385, 1, 5452643, 1, 5453422, 1, 5453942, 1, 5454452, 1, 5454959, 1, 5455212, 1, 5455460, 5, 5455973, 5456235, 5456492, 5457266, 5457529, 1, 5456745, 1, 5456999, 3, 5458019, 5458790, 5460082, 1, 5458281, 1, 5458546, 1, 5459049, 1, 5459299, 1, 5459557, 1, 5459826, 4, 5460584, 5461359, 5462386, 5463668, 1, 5460833, 1, 5461101, 1, 5461614, 1, 5461861, 1, 5462123, 2, 5462625, 5463397, 1, 5462902, 1, 5463141, 2, 5464162, 5464941, 1, 5464417, 1, 5464690, 2, 5465452, 5465710, 1, 5465972, 2, 5466469, 5467241, 1, 5466735, 1, 5466990, 1, 5467490, 1, 5467767, 1, 5468001, 1, 5468281, 2, 5468769, 5469556, 1, 5469042, 1, 5469281, 1, 5469807, 6, 5470305, 5471075, 5472868, 5473637, 5473897, 5475956, 1, 5470578, 1, 5470834, 2, 5471337, 5471858, 1, 5471602, 1, 5472111, 1, 5472371, 1, 5472627, 1, 5473125, 1, 5473394, 3, 5474151, 5474926, 5475446, 1, 5474415, 1, 5474670, 1, 5475173, 1, 5475685, 3, 5476449, 5477989, 5478761, 2, 5476707, 5477228, 1, 5476978, 1, 5477487, 1, 5477742, 1, 5478247, 1, 5478497, 4, 5479011, 5480036, 5480302, 5481075, 1, 5479282, 1, 5479535, 1, 5479790, 1, 5480565, 1, 5480819, 1, 5481331, 1, 5481577, 1, 5481839, 1, 5482094, 10, 5482541, 5483617, 5484131, 5485669, 5496935, 5497193, 5497963, 5498734, 5498995, 5499509, 1, 5482863, 1, 5483110, 1, 5483366, 1, 5483888, 1, 5484399, 1, 5484653, 1, 5484905, 1, 5485166, 1, 5485415, 2, 5485869, 5495923, 5, 5486184, 5491308, 5492336, 5493620, 5495159, 1, 5486453, 1, 5486702, 1, 5486948, 1, 5487218, 1, 5487461, 1, 5487716, 1, 5487917, 1, 5488225, 1, 5488494, 1, 5488740, 1, 5488941, 1, 5489267, 1, 5489513, 1, 5489784, 1, 5490036, 1, 5490281, 1, 5490533, 1, 5490804, 1, 5491048, 1, 5491561, 1, 5491822, 1, 5492069, 1, 5492585, 1, 5492837, 1, 5493091, 1, 5493349, 1, 5493864, 1, 5494121, 1, 5494386, 1, 5494644, 1, 5494905, 1, 5495393, 1, 5495673, 1, 5496165, 1, 5496428, 1, 5496678, 1, 5497455, 1, 5497710, 1, 5498209, 1, 5498482, 1, 5499253, 9, 5500002, 5501797, 5502056, 5502317, 5502830, 5503088, 5503605, 5503865, 5505146, 1, 5500271, 1, 5500527, 1, 5500774, 1, 5501033, 1, 5501292, 1, 5501545, 1, 5502581, 1, 5503334, 1, 5504097, 1, 5504366, 1, 5504622, 1, 5504865, 1, 5505381, 6, 5505889, 5506405, 5522280, 5524076, 5524848, 5529460, 1, 5506162, 2, 5506670, 5520754, 3, 5506861, 5514595, 5519977, 4, 5507171, 5510760, 5512303, 5514352, 1, 5507433, 1, 5507698, 1, 5507939, 1, 5508213, 1, 5508457, 1, 5508724, 1, 5508909, 1, 5509231, 1, 5509493, 1, 5509748, 1, 5510000, 1, 5510261, 1, 5510516, 1, 5511013, 1, 5511265, 1, 5511524, 1, 5511781, 1, 5512036, 1, 5512565, 1, 5512820, 1, 5513068, 1, 5513321, 1, 5513582, 1, 5513829, 1, 5514084, 1, 5514869, 1, 5515122, 1, 5515372, 1, 5515641, 2, 5515876, 5518705, 1, 5516143, 1, 5516405, 1, 5516642, 1, 5516908, 1, 5517157, 1, 5517425, 1, 5517685, 1, 5517935, 1, 5518196, 1, 5518437, 1, 5518965, 1, 5519215, 1, 5519476, 1, 5519717, 1, 5520238, 1, 5520487, 2, 5520993, 5522032, 1, 5521268, 1, 5521519, 1, 5521778, 1, 5522537, 1, 5522805, 1, 5523043, 1, 5523304, 1, 5523573, 1, 5523827, 1, 5524341, 1, 5524595, 2, 5525103, 5527666, 1, 5525363, 2, 5525605, 5525865, 2, 5526126, 5526644, 1, 5526375, 1, 5526889, 1, 5527151, 1, 5527406, 1, 5527909, 1, 5528179, 1, 5528435, 1, 5528681, 1, 5528943, 1, 5529198, 1, 5529705, 2, 5529955, 5530735, 1, 5530209, 1, 5530476, 1, 5530990, 11, 5531745, 5534307, 5535332, 5538149, 5538921, 5541483, 5542510, 5544815, 5545331, 5546612, 5549430, 2, 5532014, 5533810, 1, 5532263, 2, 5532517, 5532789, 1, 5533044, 1, 5533281, 1, 5533550, 1, 5534066, 1, 5534568, 1, 5534825, 1, 5535076, 4, 5535589, 5536614, 5536873, 5537901, 1, 5535858, 1, 5536111, 1, 5536358, 1, 5537134, 1, 5537377, 1, 5537644, 1, 5538349, 1, 5538610, 2, 5539175, 5540985, 2, 5539433, 5540463, 1, 5539694, 1, 5539937, 1, 5540204, 1, 5540710, 1, 5541217, 1, 5541736, 1, 5541999, 1, 5542254, 1, 5542753, 2, 5543021, 5544308, 1, 5543269, 1, 5543534, 1, 5543796, 1, 5544051, 1, 5544549, 1, 5545074, 1, 5545580, 1, 5545839, 1, 5546096, 1, 5546341, 1, 5546856, 1, 5547119, 2, 5547364, 5548135, 1, 5547631, 1, 5547896, 1, 5548399, 1, 5548654, 1, 5548897, 1, 5549164, 5, 5549921, 5550691, 5551212, 5552237, 5553519, 1, 5550183, 1, 5550437, 1, 5550962, 1, 5551457, 1, 5551731, 1, 5551976, 1, 5552481, 1, 5552750, 1, 5553017, 1, 5553249, 1, 5553772, 4, 5554280, 5556329, 5558644, 5561205, 2, 5554529, 5555557, 1, 5554796, 1, 5555041, 1, 5555310, 1, 5555826, 1, 5556083, 2, 5556588, 5557357, 1, 5556836, 1, 5557093, 1, 5557605, 1, 5557875, 1, 5558113, 1, 5558387, 3, 5558881, 5559653, 5560175, 1, 5559158, 1, 5559393, 1, 5559922, 1, 5560429, 1, 5560673, 1, 5560942, 3, 5561709, 5562222, 5563764, 1, 5561964, 2, 5562467, 5562987, 1, 5562725, 1, 5563241, 1, 5563489, 3, 5564002, 5564773, 5565292, 1, 5564271, 1, 5564536, 1, 5565042, 1, 5565545, 1, 5565806, 1, 5566053, 1, 5566308, 3, 5566817, 5567330, 5568101, 1, 5567084, 1, 5567585, 1, 5567858, 1, 5568370, 5, 5568610, 5571176, 5572716, 5576816, 5579634, 2, 5568865, 5569394, 1, 5569138, 1, 5569633, 1, 5569891, 2, 5570149, 5570411, 1, 5570661, 1, 5570932, 1, 5571429, 1, 5571681, 1, 5571956, 1, 5572197, 1, 5572452, 3, 5572961, 5575273, 5576047, 3, 5573225, 5573744, 5575033, 1, 5573476, 1, 5574000, 1, 5574249, 1, 5574510, 1, 5574759, 1, 5575534, 1, 5575781, 1, 5576302, 1, 5576551, 1, 5577057, 1, 5577330, 1, 5577573, 1, 5577838, 1, 5578100, 1, 5578344, 1, 5578597, 1, 5578867, 1, 5579113, 1, 5579379, 1, 5579881, 1, 5580132, 1, 5580389, 1, 5580908, 2, 5581413, 5582441, 1, 5581673, 1, 5581921, 1, 5582185, 1, 5582689, 3, 5583201, 5584242, 5586035, 1, 5583470, 1, 5583726, 1, 5583969, 1, 5584481, 1, 5584750, 1, 5585001, 1, 5585267, 1, 5585517, 1, 5585761, 1, 5586292, 1, 5586533, 1, 5586802, 23, 5587248, 5591346, 5591649, 5719395, 5719908, 5720165, 5779302, 5779815, 5780072, 5811305, 5871724, 5896301, 5896558, 5898351, 5938032, 5939058, 6015091, 6026356, 6027893, 6049910, 6050167, 6052729, 6054266, 2, 5587504, 5590577, 9, 5587761, 5588274, 5588531, 5589044, 5589301, 5589558, 5589815, 5590072, 5590329, 1, 5588065, 1, 5588833, 2, 5590832, 5591089, 21, 5591905, 5597027, 5599076, 5600871, 5602664, 5604713, 5610091, 5611116, 5621869, 5632622, 5661295, 5661552, 5664626, 5693299, 5708660, 5713269, 5714038, 5715575, 5716088, 5716345, 5718650, 6, 5592109, 5593705, 5593965, 5594226, 5595251, 5596532, 1, 5592432, 1, 5592681, 1, 5592940, 1, 5593196, 1, 5593441, 1, 5594465, 2, 5594725, 5594989, 1, 5595493, 1, 5595758, 1, 5596020, 1, 5596271, 1, 5596789, 1, 5597291, 2, 5597537, 5598313, 1, 5597799, 1, 5598053, 1, 5598574, 1, 5598823, 3, 5599329, 5599588, 5600365, 1, 5599852, 1, 5600101, 1, 5600609, 2, 5601125, 5601903, 2, 5601394, 5601651, 1, 5602148, 1, 5602401, 2, 5602913, 5603692, 1, 5603191, 1, 5603432, 1, 5603937, 1, 5604214, 1, 5604457, 3, 5604974, 5606770, 5608569, 1, 5605236, 1, 5605474, 1, 5605746, 1, 5606005, 1, 5606259, 1, 5606504, 2, 5607013, 5607540, 1, 5607268, 1, 5607784, 1, 5608050, 1, 5608289, 1, 5608801, 1, 5609070, 1, 5609326, 1, 5609583, 1, 5609833, 1, 5610352, 1, 5610593, 1, 5610859, 7, 5611361, 5615461, 5616489, 5616748, 5618029, 5619823, 5621109, 2, 5611636, 5614709, 1, 5611873, 1, 5612140, 1, 5612393, 1, 5612666, 2, 5612897, 5614181, 1, 5613172, 1, 5613417, 1, 5613679, 1, 5613934, 1, 5614436, 1, 5614958, 1, 5615207, 1, 5615732, 1, 5615988, 1, 5616229, 1, 5616993, 2, 5617267, 5617527, 1, 5617761, 2, 5618291, 5618553, 1, 5618802, 1, 5619045, 1, 5619310, 1, 5619557, 1, 5620067, 1, 5620328, 1, 5620587, 1, 5620833, 1, 5621364, 1, 5621601, 6, 5622113, 5623653, 5625705, 5627248, 5629043, 5630069, 2, 5622369, 5623140, 1, 5622629, 1, 5622888, 1, 5623393, 2, 5623918, 5624944, 1, 5624165, 1, 5624430, 1, 5624679, 1, 5625189, 1, 5625460, 1, 5625966, 1, 5626215, 1, 5626475, 1, 5626721, 1, 5626988, 1, 5627496, 1, 5627769, 1, 5628012, 1, 5628265, 1, 5628513, 1, 5628782, 1, 5629288, 1, 5629537, 1, 5629797, 2, 5630308, 5631342, 1, 5630576, 1, 5630831, 1, 5631076, 1, 5631591, 1, 5631851, 1, 5632097, 1, 5632360, 9, 5632865, 5634915, 5636196, 5636709, 5638503, 5647215, 5650035, 5655924, 5656441, 2, 5633125, 5634669, 1, 5633388, 1, 5633633, 1, 5633893, 1, 5634158, 1, 5634407, 1, 5635169, 1, 5635435, 1, 5635685, 1, 5635955, 1, 5636449, 1, 5636981, 1, 5637228, 1, 5637477, 1, 5637749, 1, 5637998, 1, 5638247, 6, 5638760, 5639787, 5641068, 5643119, 5644146, 5645943, 1, 5639029, 1, 5639276, 1, 5639541, 2, 5640033, 5640559, 1, 5640308, 1, 5640814, 2, 5641313, 5642351, 1, 5641593, 1, 5641825, 1, 5642098, 1, 5642606, 1, 5642855, 1, 5643372, 1, 5643617, 1, 5643892, 1, 5644385, 1, 5644654, 1, 5644903, 1, 5645163, 1, 5645413, 1, 5645680, 1, 5646185, 1, 5646451, 1, 5646689, 1, 5646948, 2, 5647468, 5648494, 1, 5647727, 1, 5647982, 1, 5648231, 1, 5648743, 1, 5649007, 1, 5649262, 1, 5649505, 1, 5649774, 1, 5650281, 1, 5650543, 1, 5650803, 1, 5650989, 2, 5651307, 5654640, 1, 5651553, 1, 5651824, 1, 5652089, 1, 5652325, 1, 5652591, 1, 5652853, 1, 5653102, 1, 5653360, 1, 5653609, 1, 5653861, 1, 5654133, 1, 5654384, 1, 5654889, 1, 5655141, 1, 5655413, 1, 5655664, 1, 5656169, 4, 5656673, 5658725, 5659753, 5660533, 2, 5656939, 5657710, 1, 5657202, 1, 5657441, 1, 5657959, 1, 5658215, 1, 5658465, 1, 5658979, 1, 5659237, 1, 5659499, 1, 5660011, 1, 5660277, 1, 5660779, 1, 5661045, 2, 5661797, 5663609, 1, 5662066, 1, 5662307, 1, 5662572, 1, 5662825, 1, 5663088, 1, 5663347, 1, 5663858, 1, 5664117, 1, 5664371, 8, 5664865, 5675877, 5682281, 5683563, 5683826, 5684595, 5685620, 5692789, 5, 5665123, 5666407, 5668715, 5672044, 5674352, 1, 5665384, 1, 5665653, 1, 5665908, 1, 5666149, 1, 5666674, 1, 5666913, 1, 5667184, 1, 5667432, 2, 5667695, 5668213, 1, 5667955, 1, 5668467, 2, 5668961, 5670508, 1, 5669228, 1, 5669477, 1, 5669747, 1, 5669997, 1, 5670241, 1, 5670761, 1, 5671028, 1, 5671273, 1, 5671531, 1, 5671785, 1, 5672300, 1, 5672549, 1, 5672812, 1, 5673071, 1, 5673319, 1, 5673586, 1, 5673825, 1, 5674093, 1, 5674600, 1, 5674866, 1, 5675105, 1, 5675379, 1, 5675621, 3, 5676142, 5679218, 5679987, 1, 5676404, 1, 5676648, 1, 5676901, 1, 5677171, 2, 5677413, 5677929, 1, 5677683, 2, 5678195, 5678458, 1, 5678693, 1, 5678948, 1, 5679461, 1, 5679726, 1, 5680244, 1, 5680489, 1, 5680743, 1, 5681005, 1, 5681253, 1, 5681518, 1, 5681775, 1, 5682030, 1, 5682531, 1, 5682792, 1, 5683055, 1, 5683310, 1, 5684079, 1, 5684340, 2, 5684841, 5685356, 1, 5685101, 4, 5685864, 5686889, 5690734, 5692537, 1, 5686121, 1, 5686369, 1, 5686638, 1, 5687137, 1, 5687404, 2, 5687652, 5687916, 1, 5688185, 1, 5688365, 1, 5688690, 1, 5688933, 1, 5689187, 1, 5689465, 1, 5689699, 1, 5689964, 1, 5690213, 1, 5690468, 1, 5690981, 1, 5691250, 1, 5691507, 1, 5691752, 1, 5692009, 1, 5692272, 1, 5693037, 5, 5693537, 5694821, 5695336, 5696627, 5708149, 1, 5693806, 1, 5694055, 1, 5694305, 1, 5694574, 1, 5695089, 2, 5695585, 5696116, 1, 5695845, 1, 5696353, 3, 5696869, 5698409, 5707120, 2, 5697124, 5697390, 1, 5697639, 1, 5697893, 1, 5698162, 2, 5698669, 5699958, 1, 5698914, 1, 5699169, 1, 5699438, 1, 5699687, 1, 5700197, 1, 5700397, 1, 5700720, 1, 5700981, 1, 5701228, 1, 5701484, 1, 5701677, 2, 5701988, 5704821, 1, 5702255, 1, 5702519, 1, 5702766, 1, 5702957, 1, 5703279, 1, 5703541, 1, 5703796, 1, 5704048, 1, 5704309, 1, 5704564, 1, 5705072, 1, 5705261, 1, 5705583, 1, 5705845, 1, 5706100, 1, 5706352, 1, 5706613, 1, 5706868, 1, 5707375, 1, 5707634, 1, 5707892, 1, 5708401, 3, 5708897, 5709672, 5712244, 2, 5709160, 5709419, 1, 5709921, 2, 5710187, 5710957, 1, 5710443, 1, 5710709, 1, 5711201, 1, 5711475, 1, 5711713, 1, 5711988, 1, 5712485, 1, 5712754, 1, 5713006, 1, 5713523, 1, 5713765, 1, 5714281, 1, 5714553, 1, 5714785, 1, 5715054, 1, 5715305, 1, 5715822, 2, 5716577, 5717605, 1, 5716846, 1, 5717102, 1, 5717345, 1, 5717874, 1, 5718127, 1, 5718379, 1, 5718885, 1, 5719154, 1, 5719673, 13, 5720417, 5724004, 5727333, 5729640, 5730409, 5731180, 5732718, 5745263, 5747056, 5748594, 5770611, 5772404, 5778037, 4, 5720675, 5722219, 5722734, 5723762, 3, 5720933, 5721192, 5721455, 1, 5721699, 1, 5721963, 1, 5722483, 1, 5722997, 1, 5723252, 1, 5723507, 2, 5724257, 5724773, 1, 5724524, 1, 5725043, 1, 5725300, 2, 5725537, 5726066, 1, 5725804, 1, 5726313, 1, 5726561, 1, 5726830, 1, 5727091, 5, 5727593, 5727853, 5728112, 5728371, 5729146, 1, 5728616, 1, 5728873, 1, 5729385, 1, 5729893, 1, 5730152, 1, 5730676, 1, 5730920, 1, 5731425, 1, 5731699, 1, 5731956, 1, 5732207, 1, 5732462, 7, 5732963, 5733733, 5735783, 5737577, 5738350, 5739635, 5740916, 1, 5733225, 1, 5733484, 1, 5734004, 1, 5734258, 1, 5734497, 1, 5734772, 1, 5735017, 1, 5735279, 1, 5735534, 2, 5736043, 5736821, 1, 5736289, 1, 5736556, 1, 5737065, 1, 5737326, 1, 5737832, 1, 5738089, 2, 5738593, 5739385, 1, 5738862, 1, 5739124, 2, 5739881, 5740661, 1, 5740150, 1, 5740389, 1, 5741153, 3, 5741415, 5742963, 5743988, 2, 5741679, 5742194, 1, 5741934, 1, 5742433, 1, 5742701, 1, 5743205, 1, 5743469, 1, 5743717, 1, 5744232, 1, 5744492, 1, 5744751, 1, 5745006, 2, 5745520, 5746290, 1, 5745772, 1, 5746021, 1, 5746548, 1, 5746792, 2, 5747301, 5747824, 1, 5747572, 1, 5748069, 1, 5748338, 8, 5748835, 5751910, 5755241, 5757805, 5760110, 5760880, 5763443, 5769076, 3, 5749093, 5749870, 5750389, 1, 5749358, 1, 5749620, 1, 5750132, 1, 5750643, 1, 5750899, 1, 5751145, 1, 5751414, 1, 5751653, 2, 5752165, 5753711, 1, 5752419, 1, 5752692, 2, 5752929, 5753205, 1, 5753453, 1, 5753970, 1, 5754221, 1, 5754473, 1, 5754734, 1, 5754983, 2, 5755503, 5756019, 1, 5755748, 1, 5756272, 1, 5756527, 1, 5756781, 1, 5757029, 1, 5757294, 1, 5757545, 2, 5758049, 5759337, 1, 5758318, 1, 5758565, 1, 5758830, 1, 5759092, 2, 5759587, 5759852, 1, 5760361, 1, 5760622, 1, 5761125, 1, 5761390, 1, 5761636, 1, 5761897, 1, 5762147, 1, 5762421, 1, 5762668, 1, 5762913, 1, 5763186, 4, 5763685, 5765481, 5766255, 5767280, 1, 5763958, 1, 5764197, 1, 5764466, 1, 5764713, 1, 5764974, 1, 5765223, 1, 5765729, 1, 5765998, 1, 5766510, 1, 5766753, 1, 5767020, 1, 5767525, 1, 5767779, 1, 5768052, 1, 5768297, 1, 5768566, 1, 5768805, 2, 5769317, 5770088, 1, 5769582, 1, 5769835, 1, 5770351, 3, 5770853, 5771624, 5772143, 1, 5771124, 1, 5771361, 1, 5771826, 2, 5772641, 5777522, 2, 5772908, 5773939, 1, 5773164, 1, 5773413, 1, 5773668, 2, 5774189, 5774708, 1, 5774433, 2, 5774953, 5775215, 1, 5775467, 1, 5775727, 1, 5775989, 1, 5776230, 1, 5776489, 1, 5776755, 1, 5777005, 1, 5777249, 1, 5777769, 2, 5778292, 5779064, 1, 5778529, 1, 5778789, 1, 5779570, 9, 5780321, 5789285, 5789801, 5801837, 5802862, 5803887, 5807730, 5808757, 5810807, 8, 5780577, 5781858, 5782119, 5783401, 5784685, 5784942, 5785202, 5786995, 1, 5780850, 1, 5781099, 1, 5781345, 1, 5781601, 1, 5782387, 1, 5782573, 1, 5782896, 1, 5783137, 1, 5783667, 1, 5783924, 1, 5784175, 1, 5784435, 1, 5785465, 1, 5785710, 1, 5785959, 1, 5786213, 1, 5786465, 1, 5786732, 1, 5787237, 1, 5787437, 6, 5787745, 5788002, 5788259, 5788516, 5788773, 5789030, 1, 5789541, 4, 5790053, 5796716, 5800558, 5801590, 1, 5790325, 1, 5790576, 1, 5790824, 1, 5791021, 4, 5791336, 5792624, 5793907, 5794932, 1, 5791593, 1, 5791845, 1, 5792117, 1, 5792360, 1, 5792873, 1, 5793125, 1, 5793397, 1, 5793648, 1, 5794153, 1, 5794415, 1, 5794675, 1, 5795176, 1, 5795433, 1, 5795685, 1, 5795957, 1, 5796212, 1, 5796456, 2, 5796969, 5798511, 1, 5797232, 1, 5797488, 1, 5797737, 1, 5797998, 1, 5798245, 1, 5798771, 1, 5799023, 1, 5799280, 1, 5799528, 1, 5799781, 1, 5800050, 1, 5800307, 1, 5800820, 1, 5801064, 1, 5801333, 1, 5802093, 1, 5802337, 1, 5802612, 1, 5803105, 1, 5803365, 1, 5803627, 4, 5804129, 5804389, 5806188, 5806958, 1, 5804654, 1, 5804905, 1, 5805155, 1, 5805417, 1, 5805665, 1, 5805934, 1, 5806453, 1, 5806707, 1, 5807205, 1, 5807475, 1, 5807969, 1, 5808243, 1, 5808485, 3, 5809006, 5809522, 5809780, 1, 5809255, 1, 5810024, 1, 5810273, 1, 5810543, 1, 5811041, 16, 5811553, 5814371, 5816421, 5847911, 5848169, 5848427, 5849708, 5851502, 5857904, 5861490, 5864051, 5866868, 5868662, 5868919, 5869432, 5869690, 2, 5811822, 5812339, 1, 5812079, 2, 5812589, 5813109, 1, 5812833, 1, 5813364, 1, 5813615, 1, 5813874, 1, 5814133, 2, 5814635, 5815412, 1, 5814885, 1, 5815156, 1, 5815669, 1, 5815922, 1, 5816165, 6, 5816675, 5817189, 5817968, 5818228, 5818485, 5847672, 1, 5816933, 2, 5817457, 5817716, 1, 5818736, 1, 5818925, 9, 5819235, 5822056, 5823339, 5826413, 5827694, 5828976, 5830770, 5834099, 5844596, 2, 5819496, 5821033, 1, 5819753, 1, 5820005, 1, 5820277, 1, 5820515, 1, 5820776, 1, 5821285, 1, 5821557, 1, 5821795, 1, 5822313, 1, 5822565, 1, 5822837, 1, 5823080, 2, 5823592, 5825129, 1, 5823849, 1, 5824101, 1, 5824373, 1, 5824619, 1, 5824872, 1, 5825401, 1, 5825637, 1, 5825903, 1, 5826155, 1, 5826665, 1, 5826917, 1, 5827189, 1, 5827437, 1, 5827945, 1, 5828197, 1, 5828469, 1, 5828718, 1, 5829224, 1, 5829481, 1, 5829733, 1, 5830005, 1, 5830256, 1, 5830504, 1, 5831017, 1, 5831269, 1, 5831541, 1, 5831788, 1, 5831981, 1, 5832304, 1, 5832552, 1, 5832809, 1, 5833061, 1, 5833333, 1, 5833584, 1, 5833832, 2, 5834345, 5842547, 1, 5834607, 1, 5834867, 1, 5835053, 4, 5835363, 5836651, 5838192, 5839476, 1, 5835625, 1, 5835877, 1, 5836149, 1, 5836387, 1, 5836905, 1, 5837177, 1, 5837413, 1, 5837679, 1, 5837931, 1, 5838441, 1, 5838693, 1, 5838965, 1, 5839216, 2, 5839720, 5841257, 1, 5839977, 1, 5840229, 1, 5840501, 1, 5840756, 1, 5841000, 1, 5841515, 1, 5841765, 1, 5842037, 1, 5842292, 1, 5842785, 1, 5843054, 1, 5843303, 1, 5843571, 1, 5843817, 1, 5844079, 1, 5844339, 2, 5844840, 5846377, 1, 5845097, 1, 5845349, 1, 5845621, 1, 5845876, 1, 5846120, 1, 5846635, 1, 5846885, 1, 5847157, 1, 5847412, 2, 5848687, 5848949, 1, 5849202, 1, 5849461, 3, 5849955, 5850981, 5851244, 1, 5850226, 1, 5850479, 1, 5850743, 5, 5851745, 5853539, 5854821, 5856359, 5856631, 1, 5852018, 1, 5852258, 1, 5852527, 1, 5852786, 1, 5853025, 1, 5853299, 1, 5853800, 1, 5854057, 1, 5854318, 1, 5854567, 1, 5855073, 1, 5855344, 1, 5855600, 1, 5855852, 1, 5856101, 1, 5856872, 1, 5857125, 1, 5857381, 1, 5857644, 2, 5858145, 5860713, 1, 5858405, 1, 5858669, 2, 5858914, 5859431, 1, 5859169, 1, 5859682, 1, 5859945, 1, 5860197, 1, 5860453, 1, 5860974, 1, 5861223, 3, 5861682, 5861985, 5862761, 1, 5862243, 1, 5862521, 2, 5863013, 5863783, 1, 5863269, 1, 5863534, 3, 5864291, 5865061, 5866100, 1, 5864549, 1, 5864819, 1, 5865324, 1, 5865573, 1, 5865832, 1, 5866351, 1, 5866604, 1, 5867107, 1, 5867368, 1, 5867622, 1, 5867887, 1, 5868146, 1, 5868395, 1, 5869170, 1, 5869946, 2, 5870177, 5870441, 1, 5870691, 1, 5870945, 1, 5871220, 1, 5871471, 5, 5871969, 5880421, 5883240, 5884015, 5885301, 7, 5872227, 5874279, 5875307, 5875566, 5877619, 5878900, 5879417, 1, 5872485, 1, 5872744, 1, 5873007, 1, 5873260, 1, 5873508, 1, 5873765, 1, 5874034, 1, 5874537, 1, 5874799, 1, 5875059, 3, 5875811, 5876581, 5877099, 1, 5876075, 1, 5876328, 1, 5876852, 1, 5877366, 1, 5877876, 1, 5878121, 1, 5878371, 1, 5878643, 1, 5879141, 1, 5879657, 1, 5879918, 1, 5880167, 2, 5880673, 5881972, 1, 5880932, 1, 5881193, 1, 5881454, 1, 5881703, 1, 5882216, 1, 5882482, 1, 5882735, 1, 5882990, 1, 5883489, 1, 5883765, 2, 5884272, 5885047, 1, 5884520, 1, 5884789, 6, 5885543, 5885803, 5886061, 5886834, 5887603, 5895540, 1, 5886309, 1, 5886564, 1, 5887073, 1, 5887340, 9, 5887789, 5889377, 5890402, 5890659, 5891428, 5892197, 5892461, 5894003, 5894772, 1, 5888109, 1, 5888361, 1, 5888622, 1, 5888885, 1, 5889139, 1, 5889635, 1, 5889897, 1, 5890162, 1, 5890921, 1, 5891186, 2, 5891695, 5891957, 2, 5892713, 5893742, 1, 5892974, 1, 5893237, 1, 5893491, 1, 5894249, 1, 5894509, 1, 5895031, 1, 5895279, 2, 5895777, 5896047, 1, 5896805, 1, 5897077, 1, 5897325, 1, 5897569, 1, 5897844, 1, 5898081, 18, 5898593, 5898851, 5899876, 5901157, 5902697, 5908075, 5910380, 5912429, 5913454, 5914223, 5915504, 5918578, 5921651, 5930100, 5931893, 5935223, 5937528, 5937785, 1, 5899115, 1, 5899365, 1, 5899636, 1, 5900129, 1, 5900404, 1, 5900661, 1, 5900915, 1, 5901428, 2, 5901673, 5902194, 1, 5901923, 1, 5902457, 1, 5902958, 2, 5903203, 5905524, 1, 5903457, 1, 5903730, 1, 5903973, 1, 5904240, 1, 5904492, 1, 5904737, 1, 5905006, 1, 5905253, 4, 5905765, 5906537, 5907567, 5907827, 2, 5906020, 5906290, 1, 5906798, 2, 5907047, 5907316, 2, 5908335, 5909106, 1, 5908586, 1, 5908841, 1, 5909369, 1, 5909620, 1, 5909865, 1, 5910117, 3, 5910629, 5910889, 5912175, 2, 5911139, 5911667, 1, 5911397, 1, 5911912, 1, 5912685, 1, 5912933, 1, 5913189, 1, 5913700, 1, 5913967, 2, 5914468, 5915246, 1, 5914732, 1, 5914981, 3, 5915747, 5916774, 5917040, 1, 5916015, 1, 5916274, 1, 5916526, 2, 5917285, 5917801, 1, 5917554, 1, 5918062, 1, 5918311, 2, 5918834, 5920372, 1, 5919077, 1, 5919331, 1, 5919604, 1, 5919861, 1, 5920115, 1, 5920609, 1, 5920866, 1, 5921132, 1, 5921381, 4, 5921893, 5923177, 5924723, 5926516, 1, 5922153, 1, 5922404, 1, 5922671, 1, 5922926, 1, 5923444, 1, 5923689, 1, 5923951, 1, 5924206, 1, 5924467, 1, 5924965, 1, 5925235, 1, 5925491, 1, 5925737, 1, 5925999, 1, 5926254, 3, 5926753, 5927266, 5928048, 1, 5927020, 1, 5927535, 1, 5927800, 1, 5928303, 1, 5928563, 1, 5928809, 1, 5929076, 1, 5929321, 1, 5929583, 1, 5929838, 1, 5930337, 2, 5930594, 5931380, 1, 5930860, 1, 5931109, 1, 5931631, 4, 5932131, 5932652, 5933678, 5934196, 1, 5932392, 1, 5932916, 1, 5933170, 1, 5933433, 1, 5933924, 1, 5934441, 1, 5934702, 1, 5934951, 2, 5935460, 5936741, 1, 5935717, 1, 5935986, 1, 5936229, 1, 5936484, 1, 5937010, 1, 5937267, 3, 5938273, 5938541, 5938806, 8, 5939297, 5944419, 5945189, 5976681, 5983598, 5985391, 6013299, 6014069, 3, 5939565, 5943408, 5943673, 1, 5939757, 3, 5940066, 5941613, 5942640, 2, 5940325, 5940853, 1, 5940585, 1, 5941103, 1, 5941358, 1, 5941877, 1, 5942127, 1, 5942393, 1, 5942889, 1, 5943145, 1, 5943909, 1, 5944178, 1, 5944693, 1, 5944933, 8, 5945443, 5962342, 5964391, 5965678, 5966704, 5969267, 5974388, 5975414, 6, 5945697, 5947235, 5949029, 5956457, 5958254, 5961587, 1, 5945968, 1, 5946224, 1, 5946482, 1, 5946735, 1, 5947000, 1, 5947509, 1, 5947762, 1, 5948012, 1, 5948281, 1, 5948517, 1, 5948785, 2, 5949284, 5956209, 2, 5949541, 5955433, 2, 5949796, 5950067, 3, 5950309, 5951603, 5954164, 1, 5950577, 1, 5950837, 1, 5951073, 1, 5951340, 1, 5951852, 1, 5952097, 1, 5952366, 1, 5952628, 1, 5952869, 1, 5953137, 1, 5953397, 1, 5953633, 1, 5953900, 1, 5954409, 1, 5954668, 1, 5954916, 1, 5955173, 1, 5955694, 1, 5955943, 1, 5956720, 1, 5956969, 1, 5957236, 1, 5957473, 1, 5957748, 1, 5957989, 3, 5958497, 5960037, 5960819, 1, 5958768, 1, 5959024, 1, 5959282, 1, 5959535, 1, 5959800, 1, 5960305, 1, 5960561, 1, 5961065, 1, 5961325, 1, 5961833, 1, 5962093, 2, 5962593, 5963369, 1, 5962851, 1, 5963109, 1, 5963640, 1, 5963877, 1, 5964132, 1, 5964654, 1, 5964897, 1, 5965166, 1, 5965428, 1, 5965931, 1, 5966184, 1, 5966433, 1, 5966959, 1, 5967214, 1, 5967460, 1, 5967717, 1, 5967986, 1, 5968225, 1, 5968494, 1, 5968739, 1, 5968997, 3, 5969507, 5971557, 5973619, 1, 5969778, 1, 5970025, 1, 5970288, 1, 5970548, 1, 5970793, 1, 5971055, 1, 5971310, 1, 5971822, 1, 5972084, 1, 5972321, 1, 5972596, 1, 5972841, 1, 5973103, 1, 5973358, 1, 5973861, 1, 5974116, 1, 5974650, 1, 5974885, 1, 5975148, 1, 5975657, 1, 5975919, 1, 5976181, 1, 5976435, 4, 5976941, 5977710, 5980019, 5982582, 1, 5977189, 1, 5977459, 2, 5977955, 5978996, 1, 5978213, 1, 5978483, 1, 5978739, 2, 5979237, 5979763, 1, 5979506, 1, 5980264, 1, 5980532, 1, 5980776, 1, 5981025, 1, 5981293, 1, 5981537, 1, 5981812, 1, 5982066, 1, 5982305, 1, 5982817, 1, 5983092, 1, 5983333, 3, 5983841, 5984357, 5984627, 1, 5984112, 1, 5984873, 1, 5985133, 12, 5985634, 5986660, 5987686, 5992039, 5993320, 5995114, 5997932, 6001007, 6001520, 6006387, 6010740, 6012790, 1, 5985897, 1, 5986158, 1, 5986407, 1, 5986933, 1, 5987171, 1, 5987444, 4, 5987937, 5988972, 5989999, 5991027, 1, 5988204, 1, 5988449, 1, 5988722, 1, 5989225, 1, 5989486, 1, 5989733, 1, 5990261, 1, 5990510, 1, 5990756, 1, 5991285, 1, 5991538, 1, 5991782, 1, 5992306, 1, 5992549, 1, 5992819, 1, 5993075, 1, 5993577, 1, 5993826, 1, 5994089, 1, 5994356, 1, 5994597, 1, 5994852, 1, 5995365, 1, 5995619, 1, 5995892, 2, 5996137, 5997423, 2, 5996399, 5996918, 1, 5996654, 1, 5997157, 1, 5997682, 2, 5998177, 5999727, 1, 5998452, 1, 5998697, 1, 5998959, 1, 5999214, 1, 5999461, 1, 5999982, 1, 6000231, 1, 6000485, 1, 6000740, 1, 6001254, 3, 6001765, 6003823, 6005876, 2, 6002028, 6003058, 1, 6002284, 1, 6002533, 1, 6002802, 1, 6003316, 1, 6003577, 1, 6004082, 1, 6004340, 1, 6004585, 1, 6004847, 1, 6005102, 1, 6005345, 1, 6005612, 1, 6006127, 2, 6006629, 6008167, 1, 6006898, 1, 6007152, 1, 6007401, 1, 6007662, 1, 6007905, 1, 6008421, 1, 6008679, 1, 6008946, 1, 6009185, 1, 6009453, 1, 6009709, 1, 6009957, 1, 6010222, 1, 6010473, 1, 6010991, 2, 6011251, 6011510, 1, 6011745, 1, 6012018, 1, 6012281, 1, 6012531, 1, 6013029, 1, 6013545, 1, 6013805, 1, 6014322, 1, 6014565, 1, 6014828, 3, 6015329, 6016611, 6017129, 1, 6015596, 1, 6015860, 1, 6016101, 1, 6016370, 1, 6016882, 2, 6017382, 6025324, 1, 6017641, 1, 6017907, 1, 6018164, 1, 6018415, 4, 6018668, 6020462, 6020720, 6023539, 1, 6018937, 1, 6019175, 1, 6019433, 1, 6019699, 1, 6019949, 1, 6020193, 1, 6020961, 1, 6021234, 1, 6021473, 1, 6021739, 1, 6021985, 1, 6022252, 1, 6022501, 1, 6022771, 1, 6023021, 1, 6023265, 1, 6023801, 1, 6024046, 1, 6024289, 1, 6024551, 1, 6024813, 1, 6025057, 2, 6025577, 6025839, 1, 6026094, 2, 6026597, 6026856, 1, 6027105, 1, 6027368, 1, 6027617, 17, 6028082, 6028385, 6030178, 6031203, 6031717, 6031974, 6033005, 6033518, 6037615, 6038384, 6038641, 6038898, 6042995, 6045556, 6048117, 6048632, 6048890, 3, 6028643, 6029669, 6029937, 1, 6028904, 1, 6029173, 1, 6029413, 1, 6030444, 1, 6030697, 1, 6030947, 1, 6031467, 1, 6032230, 1, 6032485, 1, 6032740, 1, 6033264, 2, 6033763, 6036583, 2, 6034035, 6034548, 1, 6034288, 1, 6034805, 2, 6035041, 6036339, 1, 6035316, 1, 6035561, 1, 6035823, 1, 6036078, 1, 6036833, 1, 6037089, 1, 6037357, 2, 6037872, 6038136, 5, 6039145, 6040430, 6041456, 6042227, 6042744, 2, 6039398, 6039924, 1, 6039673, 1, 6040185, 1, 6040673, 1, 6040941, 1, 6041185, 1, 6041708, 1, 6041957, 1, 6042469, 1, 6043240, 2, 6043497, 6044272, 1, 6043758, 1, 6044007, 1, 6044521, 2, 6044779, 6045294, 1, 6045025, 1, 6045810, 1, 6046053, 1, 6046310, 1, 6046561, 1, 6046819, 1, 6047092, 1, 6047337, 1, 6047599, 1, 6047854, 1, 6048372, 1, 6049146, 1, 6049388, 1, 6049637, 4, 6050401, 6050917, 6051433, 6051951, 1, 6050657, 1, 6051173, 1, 6051689, 2, 6052207, 6052473, 4, 6052976, 6053234, 6053748, 6054008, 1, 6053496, 14, 6054704, 6057057, 6065509, 6067046, 6067559, 6068072, 6072425, 6076014, 6076271, 6078832, 6080115, 6080885, 6110327, 6111865, 1, 6054960, 7, 6055217, 6055474, 6055731, 6055988, 6056245, 6056502, 6056759, 12, 6057313, 6058340, 6059110, 6059369, 6060908, 6061421, 6062448, 6062961, 6063218, 6064244, 6065013, 6065273, 2, 6057574, 6058089, 1, 6057845, 1, 6058605, 1, 6058849, 1, 6059634, 1, 6059892, 1, 6060136, 1, 6060402, 1, 6060641, 1, 6061153, 1, 6061665, 1, 6061940, 1, 6062195, 1, 6062696, 1, 6063470, 1, 6063717, 1, 6063993, 1, 6064481, 1, 6064750, 2, 6065765, 6066036, 1, 6066273, 1, 6066542, 1, 6066785, 1, 6067314, 1, 6067809, 6, 6068321, 6069093, 6069609, 6069871, 6070645, 6070903, 2, 6068577, 6068853, 1, 6069349, 1, 6070128, 1, 6070376, 3, 6071137, 6071653, 6072169, 1, 6071393, 1, 6071909, 7, 6072677, 6073702, 6073961, 6074222, 6074736, 6074996, 6075768, 3, 6072944, 6073204, 6073464, 1, 6074484, 1, 6075251, 1, 6075489, 6, 6076513, 6076774, 6077039, 6077296, 6078324, 6078584, 3, 6077537, 6077798, 6078056, 1, 6079090, 1, 6079337, 1, 6079597, 1, 6079845, 1, 6080355, 1, 6080626, 14, 6081121, 6090338, 6091365, 6094438, 6094697, 6103659, 6103919, 6106480, 6106738, 6107251, 6109044, 6109301, 6109814, 6110072, 4, 6081380, 6084974, 6086258, 6087540, 2, 6081635, 6082930, 1, 6081903, 1, 6082156, 1, 6082415, 1, 6082670, 2, 6083169, 6083957, 1, 6083438, 1, 6083700, 1, 6084208, 1, 6084460, 1, 6084709, 1, 6085236, 1, 6085481, 1, 6085748, 1, 6086009, 1, 6086516, 1, 6086757, 1, 6087026, 1, 6087283, 2, 6087781, 6089577, 1, 6088050, 1, 6088302, 1, 6088553, 1, 6088815, 1, 6089070, 1, 6089331, 1, 6089838, 1, 6090100, 1, 6090613, 1, 6090868, 1, 6091123, 2, 6091621, 6092147, 1, 6091886, 1, 6092404, 2, 6092645, 6093161, 1, 6092913, 1, 6093423, 1, 6093678, 1, 6093925, 1, 6094180, 3, 6094947, 6095468, 6096238, 1, 6095211, 2, 6095724, 6095988, 4, 6096481, 6097763, 6098788, 6100852, 1, 6096754, 1, 6097001, 1, 6097269, 1, 6097523, 1, 6098037, 1, 6098286, 1, 6098552, 1, 6099049, 1, 6099299, 1, 6099557, 1, 6099827, 1, 6100073, 1, 6100333, 1, 6100577, 2, 6101093, 6102889, 1, 6101363, 1, 6101619, 1, 6101861, 1, 6102126, 1, 6102371, 1, 6102629, 1, 6103148, 1, 6103397, 3, 6104176, 6104436, 6106232, 2, 6104673, 6105957, 1, 6104948, 1, 6105193, 1, 6105455, 1, 6105710, 1, 6107000, 1, 6107496, 1, 6107763, 1, 6108008, 1, 6108257, 1, 6108537, 1, 6108769, 1, 6109558, 3, 6110561, 6111077, 6111593, 1, 6110817, 1, 6111333, 9, 6112097, 6112613, 6113129, 6113391, 6113648, 6113906, 6114420, 6114677, 6114936, 1, 6112353, 1, 6112869, 1, 6114168, 24, 6115373, 6116656, 6126433, 6167906, 6173027, 6176612, 6180965, 6272870, 6275431, 6277480, 6282345, 6419562, 6420332, 6422381, 6424942, 6428271, 6463600, 6466418, 6476403, 6479732, 6485877, 6509943, 6512760, 6513017, 1, 6115683, 1, 6115954, 1, 6116197, 1, 6116453, 3, 6116912, 6120241, 6123570, 9, 6117169, 6117426, 6117939, 6118708, 6118965, 6119222, 6119479, 6119736, 6119993, 1, 6117729, 2, 6118241, 6118498, 10, 6120496, 6121009, 6121266, 6121523, 6121780, 6122037, 6122294, 6122807, 6123064, 6123321, 1, 6120801, 1, 6122593, 10, 6123824, 6124081, 6124338, 6124595, 6124852, 6125109, 6125366, 6125623, 6125880, 6126137, 23, 6126637, 6128946, 6129203, 6129505, 6130530, 6131555, 6135396, 6138469, 6140006, 6140520, 6142825, 6147435, 6148717, 6149998, 6151792, 6153073, 6153842, 6159475, 6162036, 6165109, 6165368, 6165625, 6167162, 5, 6126897, 6127154, 6127411, 6127668, 6127979, 1, 6128225, 1, 6128498, 1, 6128737, 2, 6129769, 6130034, 1, 6130290, 1, 6130786, 1, 6131049, 1, 6131316, 4, 6131811, 6132841, 6133617, 6134645, 1, 6132079, 1, 6132335, 1, 6132590, 1, 6133102, 1, 6133351, 1, 6133877, 1, 6134117, 1, 6134388, 1, 6134900, 1, 6135141, 1, 6135657, 2, 6135907, 6136687, 1, 6136161, 1, 6136428, 1, 6136929, 1, 6137187, 1, 6137460, 1, 6137705, 1, 6137974, 1, 6138213, 1, 6138733, 1, 6138992, 1, 6139252, 1, 6139513, 1, 6139766, 1, 6140261, 1, 6140781, 1, 6141025, 1, 6141300, 1, 6141557, 1, 6141804, 1, 6142060, 1, 6142305, 1, 6142568, 4, 6143076, 6143852, 6144878, 6145907, 2, 6143329, 6143599, 1, 6144119, 1, 6144353, 1, 6144633, 1, 6145122, 1, 6145391, 1, 6145655, 2, 6146149, 6146665, 1, 6146404, 1, 6146926, 1, 6147175, 1, 6147688, 1, 6147937, 1, 6148206, 1, 6148455, 2, 6148962, 6149747, 1, 6149217, 1, 6149492, 2, 6150241, 6150503, 3, 6150756, 6151013, 6151276, 1, 6151525, 1, 6152041, 1, 6152307, 1, 6152557, 1, 6152801, 1, 6153333, 1, 6153583, 1, 6154098, 10, 6154337, 6154850, 6155619, 6155878, 6156392, 6156908, 6157424, 6157939, 6158708, 6159223, 1, 6154608, 1, 6155110, 1, 6155379, 1, 6156147, 1, 6156651, 1, 6157168, 1, 6157676, 1, 6158185, 1, 6158445, 1, 6158956, 3, 6159720, 6160239, 6161015, 1, 6159969, 1, 6160501, 1, 6160748, 1, 6161249, 1, 6161508, 1, 6161769, 3, 6162273, 6163048, 6163561, 1, 6162537, 1, 6162796, 1, 6163297, 1, 6163823, 1, 6164078, 1, 6164321, 1, 6164588, 1, 6164851, 2, 6165857, 6166899, 1, 6166126, 1, 6166382, 1, 6166625, 1, 6167407, 1, 6167666, 3, 6168161, 6169442, 6170226, 2, 6168434, 6168947, 1, 6168690, 1, 6169185, 1, 6169714, 1, 6169963, 2, 6170465, 6171499, 1, 6170723, 2, 6170981, 6171243, 2, 6171749, 6172019, 1, 6172268, 2, 6172516, 6172789, 4, 6173281, 6174309, 6175861, 6176377, 1, 6173554, 1, 6173807, 1, 6174062, 2, 6174564, 6175337, 1, 6174825, 1, 6175084, 1, 6175596, 1, 6176098, 6, 6176867, 6177381, 6177900, 6179183, 6179441, 6180467, 1, 6177121, 1, 6177644, 1, 6178148, 1, 6178408, 1, 6178657, 1, 6178930, 1, 6179701, 1, 6179951, 1, 6180210, 1, 6180712, 20, 6181165, 6182497, 6187875, 6203748, 6206565, 6206822, 6209895, 6215784, 6216041, 6217066, 6218092, 6224493, 6227054, 6228592, 6236018, 6238579, 6253428, 6257525, 6258038, 6272632, 4, 6181425, 6181682, 6181939, 6182196, 3, 6182755, 6183272, 6184300, 1, 6183016, 1, 6183533, 1, 6183797, 1, 6184043, 4, 6184551, 6185833, 6186608, 6187635, 1, 6184801, 1, 6185074, 1, 6185261, 1, 6185522, 1, 6186094, 1, 6186341, 1, 6186849, 1, 6187122, 1, 6187380, 6, 6188133, 6191209, 6193007, 6195058, 6197364, 6201721, 2, 6188393, 6189936, 2, 6188656, 6189174, 1, 6188916, 1, 6189413, 1, 6189682, 1, 6190196, 1, 6190441, 1, 6190710, 1, 6190949, 1, 6191476, 1, 6191713, 1, 6191988, 1, 6192233, 1, 6192502, 1, 6192741, 1, 6193266, 1, 6193508, 2, 6193765, 6194281, 1, 6194034, 1, 6194542, 1, 6194791, 1, 6195301, 1, 6195553, 1, 6195828, 1, 6196073, 1, 6196335, 1, 6196590, 1, 6196833, 1, 6197100, 2, 6197601, 6199913, 1, 6197870, 1, 6198119, 2, 6198380, 6198901, 1, 6198629, 1, 6199148, 1, 6199393, 1, 6199666, 1, 6200172, 1, 6200425, 1, 6200686, 1, 6200933, 1, 6201185, 1, 6201458, 1, 6201955, 1, 6202220, 2, 6202469, 6202985, 1, 6202724, 1, 6203246, 1, 6203495, 1, 6204021, 1, 6204272, 1, 6204524, 1, 6204777, 1, 6205027, 1, 6205281, 1, 6205556, 1, 6205801, 1, 6206063, 1, 6206318, 2, 6207077, 6208623, 1, 6207346, 1, 6207589, 1, 6207854, 1, 6208099, 1, 6208357, 1, 6208882, 1, 6209133, 1, 6209381, 1, 6209636, 2, 6210153, 6213749, 3, 6210401, 6211183, 6212211, 1, 6210605, 1, 6210866, 1, 6211438, 1, 6211681, 1, 6211948, 1, 6212468, 1, 6212709, 1, 6212978, 1, 6213221, 1, 6213476, 1, 6213996, 1, 6214261, 1, 6214515, 1, 6214701, 3, 6214962, 6215219, 6215476, 2, 6216292, 6216567, 1, 6216801, 1, 6217313, 1, 6217582, 1, 6217831, 3, 6218337, 6221157, 6222185, 3, 6218593, 6218868, 6220408, 1, 6219113, 1, 6219375, 1, 6219630, 1, 6219873, 1, 6220140, 1, 6220645, 1, 6220900, 1, 6221409, 1, 6221683, 1, 6221925, 2, 6222437, 6223463, 1, 6222710, 1, 6222949, 1, 6223204, 1, 6223721, 1, 6223983, 1, 6224238, 3, 6224741, 6225513, 6226805, 1, 6224996, 1, 6225273, 1, 6225774, 1, 6226020, 1, 6226277, 1, 6226546, 1, 6227316, 1, 6227567, 1, 6227815, 1, 6228069, 1, 6228334, 5, 6228833, 6229093, 6231912, 6232428, 6234482, 2, 6229345, 6230388, 1, 6229620, 1, 6229861, 1, 6230116, 1, 6230633, 1, 6230900, 1, 6231145, 1, 6231407, 1, 6231662, 1, 6232161, 1, 6232673, 1, 6232931, 1, 6233189, 1, 6233453, 1, 6233701, 1, 6233966, 1, 6234228, 1, 6234725, 1, 6234995, 1, 6235237, 1, 6235502, 1, 6235764, 1, 6236261, 2, 6236523, 6237294, 1, 6236769, 1, 6237038, 1, 6237543, 1, 6237799, 1, 6238049, 1, 6238318, 6, 6238824, 6242153, 6245231, 6248048, 6249332, 6251893, 1, 6239021, 1, 6239329, 1, 6239609, 1, 6239849, 1, 6240110, 1, 6240301, 1, 6240612, 1, 6240865, 1, 6241132, 1, 6241381, 1, 6241652, 1, 6241896, 2, 6242404, 6243699, 1, 6242661, 1, 6242926, 1, 6243171, 1, 6243429, 1, 6243956, 1, 6244193, 1, 6244462, 1, 6244707, 1, 6244965, 2, 6245484, 6247029, 1, 6245749, 1, 6246004, 1, 6246249, 1, 6246511, 1, 6246766, 1, 6247282, 1, 6247523, 1, 6247781, 1, 6248303, 1, 6248558, 1, 6248819, 1, 6249061, 1, 6249586, 2, 6249833, 6251119, 1, 6250083, 1, 6250356, 1, 6250597, 1, 6250852, 1, 6251375, 1, 6251629, 1, 6252144, 1, 6252393, 1, 6252654, 1, 6252917, 1, 6253171, 3, 6253679, 6254450, 6256757, 1, 6253938, 1, 6254196, 2, 6254693, 6255471, 1, 6254945, 1, 6255220, 1, 6255718, 1, 6255980, 1, 6256229, 1, 6256504, 1, 6257010, 1, 6257262, 1, 6257784, 4, 6258277, 6268777, 6269293, 6269807, 1, 6258546, 1, 6258803, 1, 6259045, 3, 6259300, 6261093, 6265461, 1, 6259501, 1, 6259827, 1, 6260067, 1, 6260328, 1, 6260599, 1, 6260833, 2, 6261356, 6262897, 1, 6261605, 1, 6261869, 1, 6262117, 1, 6262382, 1, 6262644, 1, 6263157, 1, 6263401, 1, 6263660, 1, 6263913, 1, 6264162, 1, 6264434, 1, 6264681, 1, 6264949, 1, 6265197, 1, 6265712, 1, 6265957, 1, 6266225, 1, 6266485, 1, 6266729, 1, 6266988, 1, 6267241, 1, 6267490, 1, 6267762, 1, 6268009, 1, 6268277, 1, 6268525, 1, 6269025, 1, 6269537, 1, 6270060, 2, 6270325, 6271606, 1, 6270580, 1, 6270825, 1, 6271087, 1, 6271342, 1, 6271849, 1, 6272110, 1, 6272359, 3, 6273129, 6274156, 6275186, 1, 6273395, 1, 6273640, 1, 6273908, 1, 6274415, 1, 6274671, 1, 6274930, 1, 6275705, 2, 6275937, 6276457, 1, 6276206, 1, 6276718, 1, 6276967, 1, 6277235, 3, 6277729, 6279017, 6281071, 1, 6278002, 2, 6278244, 6278517, 1, 6278764, 1, 6279278, 1, 6279535, 1, 6279779, 1, 6280037, 1, 6280306, 1, 6280559, 1, 6280819, 2, 6281332, 6282102, 1, 6281577, 1, 6281827, 16, 6282541, 6284641, 6285154, 6286179, 6288229, 6335846, 6336615, 6405481, 6405739, 6406765, 6407790, 6411888, 6412914, 6413427, 6416244, 6418806, 7, 6282801, 6283058, 6283315, 6283572, 6283829, 6284086, 6284343, 1, 6284908, 1, 6285410, 1, 6285679, 1, 6285934, 2, 6286437, 6286955, 1, 6286701, 1, 6287219, 1, 6287464, 1, 6287713, 1, 6287991, 3, 6288485, 6288748, 6289013, 1, 6289260, 1, 6289453, 9, 6289763, 6291048, 6292331, 6301037, 6306414, 6307696, 6317939, 6325364, 6329977, 1, 6290025, 1, 6290277, 1, 6290549, 1, 6290787, 1, 6291305, 1, 6291557, 1, 6291829, 1, 6292072, 3, 6292577, 6295656, 6297193, 1, 6292848, 1, 6293113, 1, 6293349, 1, 6293615, 1, 6293877, 1, 6294126, 1, 6294384, 1, 6294633, 1, 6294885, 1, 6295157, 1, 6295408, 1, 6295913, 1, 6296165, 1, 6296437, 1, 6296683, 1, 6296936, 1, 6297465, 1, 6297701, 1, 6297967, 1, 6298219, 1, 6298413, 2, 6298728, 6300019, 1, 6298985, 1, 6299237, 1, 6299509, 1, 6299752, 1, 6300265, 1, 6300527, 1, 6300787, 1, 6301289, 1, 6301541, 1, 6301813, 1, 6302061, 1, 6302253, 3, 6302568, 6303851, 6305395, 1, 6302825, 1, 6303077, 1, 6303349, 1, 6303592, 1, 6304105, 1, 6304377, 1, 6304613, 1, 6304879, 1, 6305131, 1, 6305641, 1, 6305903, 1, 6306163, 1, 6306665, 1, 6306917, 1, 6307189, 1, 6307438, 3, 6307937, 6309480, 6311017, 1, 6308206, 1, 6308467, 1, 6308713, 1, 6308975, 1, 6309235, 1, 6309737, 1, 6309989, 1, 6310261, 1, 6310512, 1, 6310760, 1, 6311269, 1, 6311541, 1, 6311792, 1, 6311981, 4, 6312296, 6313584, 6315379, 6316404, 1, 6312553, 1, 6312805, 1, 6313077, 1, 6313320, 1, 6313832, 1, 6314089, 1, 6314341, 1, 6314613, 1, 6314864, 1, 6315112, 1, 6315625, 1, 6315887, 1, 6316147, 1, 6316649, 1, 6316907, 1, 6317157, 1, 6317429, 1, 6317684, 2, 6318185, 6318963, 1, 6318447, 1, 6318707, 1, 6319201, 1, 6319470, 1, 6319719, 4, 6319979, 6321520, 6322803, 6323828, 1, 6320233, 1, 6320505, 1, 6320741, 1, 6321007, 1, 6321259, 1, 6321769, 1, 6322021, 1, 6322293, 1, 6322544, 1, 6323049, 1, 6323311, 1, 6323571, 1, 6324073, 1, 6324331, 1, 6324581, 1, 6324853, 1, 6325108, 2, 6325608, 6327145, 1, 6325865, 1, 6326117, 1, 6326389, 1, 6326644, 1, 6326888, 1, 6327403, 1, 6327653, 1, 6327925, 1, 6328180, 1, 6328365, 1, 6328680, 1, 6328937, 1, 6329189, 1, 6329461, 1, 6329704, 1, 6330213, 2, 6330479, 6334323, 1, 6330738, 1, 6330985, 1, 6331246, 1, 6331496, 1, 6331753, 1, 6332005, 1, 6332277, 1, 6332520, 1, 6332717, 1, 6333032, 1, 6333289, 1, 6333541, 1, 6333813, 1, 6334056, 1, 6334569, 1, 6334821, 1, 6335093, 1, 6335342, 1, 6335591, 1, 6336108, 1, 6336357, 2, 6336872, 6404214, 1, 6337140, 13, 6337325, 6349665, 6357859, 6359652, 6368102, 6369384, 6373228, 6377842, 6380659, 6383220, 6392949, 6400630, 6402935, 6, 6337638, 6339176, 6340716, 6342512, 6344563, 6347892, 1, 6337889, 1, 6338147, 1, 6338409, 1, 6338670, 1, 6338919, 1, 6339425, 1, 6339694, 1, 6339940, 1, 6340197, 1, 6340452, 1, 6340969, 1, 6341223, 1, 6341480, 1, 6341748, 1, 6341989, 1, 6342244, 1, 6342767, 1, 6343017, 1, 6343278, 1, 6343540, 1, 6343785, 1, 6344046, 1, 6344295, 2, 6344808, 6347113, 1, 6345057, 1, 6345316, 2, 6345573, 6346095, 1, 6345828, 1, 6346359, 1, 6346597, 1, 6346852, 1, 6347364, 1, 6347621, 1, 6348143, 1, 6348333, 1, 6348652, 1, 6348901, 1, 6349158, 1, 6349428, 2, 6349934, 6352754, 1, 6350183, 1, 6350444, 1, 6350693, 1, 6350946, 1, 6351218, 1, 6351457, 1, 6351715, 1, 6351979, 1, 6352229, 1, 6352500, 1, 6353010, 1, 6353263, 1, 6353527, 3, 6353762, 6354540, 6356852, 1, 6354017, 1, 6354290, 1, 6354789, 1, 6355046, 1, 6355316, 1, 6355553, 1, 6355826, 1, 6356082, 1, 6356335, 1, 6356599, 1, 6357089, 1, 6357353, 1, 6357612, 1, 6358117, 1, 6358377, 1, 6358636, 1, 6358889, 1, 6359150, 1, 6359399, 1, 6359919, 2, 6360181, 6362999, 1, 6360418, 1, 6360684, 1, 6360933, 1, 6361186, 1, 6361458, 1, 6361697, 1, 6361955, 1, 6362219, 1, 6362469, 1, 6362740, 1, 6363246, 2, 6363508, 6365814, 1, 6363749, 1, 6364005, 1, 6364278, 1, 6364517, 1, 6364771, 1, 6365044, 1, 6365295, 1, 6365554, 1, 6366053, 1, 6366307, 1, 6366580, 1, 6366831, 1, 6367090, 1, 6367330, 1, 6367585, 1, 6367858, 1, 6368364, 1, 6368623, 1, 6368879, 1, 6369138, 1, 6369633, 2, 6369902, 6370418, 1, 6370148, 1, 6370672, 1, 6370927, 1, 6371183, 1, 6371438, 2, 6371684, 6372725, 1, 6371951, 1, 6372215, 1, 6372462, 1, 6372976, 1, 6373477, 1, 6373734, 1, 6374004, 2, 6374241, 6375784, 1, 6374514, 1, 6374770, 1, 6375023, 1, 6375287, 1, 6375539, 1, 6376033, 1, 6376306, 1, 6376560, 1, 6376815, 1, 6377071, 1, 6377326, 1, 6377587, 1, 6378089, 1, 6378343, 1, 6378600, 1, 6378868, 1, 6379105, 1, 6379378, 1, 6379634, 1, 6379887, 1, 6380151, 1, 6380403, 1, 6380913, 1, 6381173, 1, 6381417, 1, 6381671, 1, 6381921, 1, 6382194, 1, 6382450, 1, 6382703, 1, 6382967, 3, 6383461, 6386792, 6389106, 1, 6383717, 2, 6383969, 6385270, 1, 6384242, 1, 6384498, 1, 6384751, 1, 6385015, 1, 6385509, 1, 6385763, 1, 6386036, 1, 6386287, 1, 6386546, 1, 6387058, 1, 6387301, 1, 6387557, 1, 6387828, 1, 6388073, 1, 6388333, 1, 6388581, 1, 6388851, 1, 6389353, 1, 6389601, 1, 6389870, 1, 6390119, 1, 6390380, 1, 6390629, 2, 6390882, 6391653, 1, 6391137, 1, 6391410, 1, 6391921, 1, 6392181, 1, 6392417, 1, 6392684, 1, 6393200, 3, 6393444, 6396020, 6398326, 1, 6393711, 1, 6393975, 1, 6394222, 1, 6394486, 1, 6394725, 1, 6394979, 1, 6395252, 1, 6395503, 1, 6395762, 1, 6396261, 1, 6396517, 1, 6396790, 1, 6397029, 1, 6397283, 1, 6397556, 1, 6397807, 1, 6398066, 1, 6398565, 1, 6398819, 1, 6399092, 1, 6399343, 1, 6399602, 1, 6399842, 1, 6400097, 1, 6400370, 1, 6400869, 1, 6401123, 1, 6401396, 1, 6401647, 1, 6401906, 1, 6402146, 1, 6402401, 1, 6402674, 1, 6403169, 1, 6403442, 1, 6403684, 1, 6403955, 1, 6404453, 1, 6404708, 1, 6404969, 1, 6405219, 1, 6406002, 1, 6406249, 1, 6406507, 1, 6407015, 1, 6407266, 1, 6407521, 2, 6408038, 6410087, 1, 6408303, 1, 6408562, 1, 6408826, 1, 6409057, 1, 6409326, 1, 6409572, 1, 6409839, 3, 6410341, 6410857, 6411635, 1, 6410596, 1, 6411118, 1, 6411367, 1, 6412144, 1, 6412396, 1, 6412645, 1, 6413153, 2, 6413672, 6413929, 1, 6414190, 1, 6414439, 1, 6414692, 1, 6414959, 1, 6415220, 1, 6415475, 1, 6415717, 1, 6415985, 3, 6416499, 6417012, 6418037, 1, 6416745, 1, 6417263, 1, 6417522, 1, 6417781, 1, 6418273, 1, 6418540, 1, 6419045, 1, 6419314, 1, 6419813, 1, 6420083, 3, 6420577, 6421352, 6422125, 1, 6420850, 1, 6421106, 1, 6421601, 1, 6421874, 2, 6422639, 6424692, 1, 6422901, 1, 6423155, 1, 6423412, 1, 6423649, 1, 6423907, 1, 6424168, 1, 6424421, 4, 6425185, 6425709, 6426479, 6427257, 1, 6425453, 1, 6425961, 1, 6426212, 1, 6426735, 1, 6426990, 1, 6427497, 1, 6427758, 1, 6428007, 17, 6428461, 6430258, 6430561, 6432866, 6434659, 6435684, 6435943, 6436200, 6437740, 6440557, 6442095, 6444400, 6446195, 6447732, 6457205, 6462071, 6463352, 6, 6428721, 6428978, 6429235, 6429492, 6429749, 6430006, 3, 6430830, 6431346, 6431859, 1, 6431079, 1, 6431602, 1, 6432116, 1, 6432357, 1, 6432612, 3, 6433121, 6433647, 6434162, 1, 6433396, 1, 6433908, 1, 6434411, 1, 6434923, 1, 6435173, 1, 6435444, 1, 6436457, 1, 6436718, 1, 6436967, 1, 6437241, 1, 6437473, 1, 6437996, 2, 6438245, 6439785, 2, 6438500, 6439538, 1, 6438701, 1, 6439029, 1, 6439280, 1, 6440046, 1, 6440295, 1, 6440801, 1, 6441070, 1, 6441321, 1, 6441569, 1, 6441838, 5, 6442342, 6442603, 6442861, 6443123, 6444148, 1, 6443380, 1, 6443621, 1, 6443890, 3, 6444641, 6445158, 6445420, 1, 6444914, 1, 6445685, 1, 6445939, 2, 6446437, 6447464, 1, 6446708, 1, 6446964, 1, 6447205, 3, 6447969, 6455145, 6456181, 1, 6448244, 2, 6448485, 6449001, 1, 6448740, 1, 6449263, 1, 6449518, 2, 6449709, 6454899, 2, 6450022, 6452599, 1, 6450284, 1, 6450543, 1, 6450799, 1, 6451058, 1, 6451312, 1, 6451564, 1, 6451809, 1, 6452078, 1, 6452325, 1, 6452833, 1, 6453100, 1, 6453356, 1, 6453616, 1, 6453868, 1, 6454113, 1, 6454382, 1, 6454629, 1, 6455405, 1, 6455653, 1, 6455923, 1, 6456430, 1, 6456676, 1, 6456929, 1, 6457454, 1, 6457700, 3, 6457901, 6459749, 6460265, 1, 6458228, 1, 6458473, 1, 6458736, 1, 6458992, 1, 6459237, 1, 6459492, 1, 6460004, 1, 6460525, 1, 6460784, 1, 6461036, 1, 6461289, 1, 6461541, 1, 6461811, 1, 6462306, 1, 6462575, 1, 6462817, 1, 6463092, 2, 6463841, 6464880, 1, 6464114, 1, 6464359, 1, 6464628, 1, 6465135, 1, 6465388, 1, 6465641, 1, 6465902, 1, 6466164, 7, 6466657, 6467685, 6468969, 6471279, 6472306, 6472821, 6474873, 2, 6466930, 6467448, 1, 6467186, 4, 6467944, 6468208, 6468468, 6468728, 1, 6469223, 1, 6469480, 1, 6469748, 1, 6469985, 1, 6470258, 1, 6470514, 1, 6470767, 1, 6471031, 3, 6471536, 6471796, 6472056, 1, 6472545, 5, 6473071, 6473584, 6473842, 6474356, 6474616, 1, 6473336, 1, 6474104, 4, 6475120, 6475378, 6475892, 6476152, 1, 6475640, 4, 6476641, 6477667, 6478184, 6478449, 1, 6476913, 1, 6477173, 1, 6477423, 1, 6477938, 2, 6478690, 6478965, 1, 6479215, 1, 6479474, 5, 6479969, 6480741, 6481000, 6482793, 6483826, 1, 6480231, 1, 6480499, 2, 6481249, 6482034, 1, 6481518, 1, 6481767, 1, 6482277, 1, 6482533, 1, 6483053, 1, 6483301, 1, 6483571, 1, 6484073, 3, 6484325, 6484582, 6484844, 1, 6485108, 1, 6485362, 1, 6485609, 18, 6486061, 6487905, 6488162, 6488932, 6490725, 6490983, 6491753, 6492267, 6493804, 6499949, 6500974, 6504047, 6504816, 6506098, 6506611, 6508148, 6508405, 6509688, 6, 6486321, 6486578, 6486835, 6487092, 6487349, 6487606, 1, 6488428, 1, 6488677, 1, 6489193, 1, 6489453, 1, 6489701, 1, 6489966, 1, 6490228, 1, 6490465, 1, 6491234, 1, 6491513, 1, 6492019, 1, 6492523, 1, 6492769, 1, 6493035, 1, 6493288, 1, 6493537, 3, 6494049, 6494565, 6498933, 1, 6494313, 3, 6494765, 6496868, 6498674, 1, 6495076, 1, 6495333, 1, 6495596, 1, 6495841, 1, 6496121, 1, 6496357, 1, 6496612, 1, 6497125, 1, 6497388, 1, 6497633, 1, 6497913, 1, 6498149, 1, 6498404, 1, 6499176, 1, 6499425, 1, 6499698, 2, 6500193, 6500713, 1, 6500457, 3, 6501225, 6501742, 6503279, 1, 6501475, 2, 6501989, 6502505, 1, 6502258, 1, 6502766, 1, 6503015, 1, 6503541, 1, 6503796, 2, 6504304, 6504568, 2, 6505061, 6505577, 1, 6505317, 1, 6505833, 1, 6506360, 2, 6506857, 6507123, 1, 6507369, 1, 6507617, 1, 6507886, 1, 6508642, 1, 6508917, 1, 6509170, 1, 6509429, 4, 6510177, 6511205, 6511721, 6512239, 2, 6510433, 6510696, 1, 6510945, 1, 6511461, 1, 6511977, 1, 6512495, 6, 6513249, 6513520, 6513778, 6514292, 6514552, 6514809, 1, 6514040, 27, 6515245, 6517296, 6532705, 6597986, 6600291, 6626916, 6628709, 6765414, 6766695, 6768744, 6861673, 6947178, 6947691, 6955116, 6970477, 6983278, 6991471, 7020144, 7059313, 7081842, 7082867, 7124340, 7191669, 7288438, 7290743, 7303801, 7335802, 2, 6515571, 6517111, 1, 6515816, 1, 6516065, 1, 6516336, 1, 6516581, 1, 6516836, 5, 6517552, 6520625, 6524210, 6527539, 6530612, 9, 6517809, 6518066, 6518579, 6518836, 6519093, 6519350, 6519863, 6520120, 6520377, 1, 6518369, 1, 6519649, 10, 6520880, 6521137, 6521394, 6521651, 6521908, 6522677, 6522934, 6523191, 6523704, 6523961, 2, 6522209, 6522466, 1, 6523489, 10, 6524464, 6524721, 6524978, 6525235, 6525492, 6525749, 6526006, 6526775, 6527032, 6527289, 2, 6526305, 6526562, 10, 6527792, 6528049, 6528306, 6528563, 6528820, 6529077, 6529590, 6529847, 6530104, 6530361, 1, 6529377, 7, 6530864, 6531121, 6531378, 6531635, 6531892, 6532149, 6532406, 23, 6532909, 6535521, 6536803, 6539876, 6540902, 6542439, 6545000, 6545257, 6547818, 6548843, 6552172, 6559853, 6566254, 6577008, 6577521, 6577778, 6578547, 6579572, 6585973, 6590326, 6592119, 6592888, 6595961, 9, 6533169, 6533426, 6533683, 6533940, 6534197, 6534454, 6534711, 6534968, 6535273, 2, 6535780, 6536553, 1, 6536040, 1, 6536309, 2, 6537074, 6539125, 1, 6537321, 1, 6537574, 1, 6537833, 1, 6538083, 1, 6538345, 1, 6538593, 1, 6538860, 1, 6539380, 1, 6539621, 2, 6540133, 6540392, 1, 6540645, 2, 6541157, 6541928, 1, 6541428, 1, 6541689, 1, 6542177, 2, 6542689, 6542953, 1, 6543220, 1, 6543476, 1, 6543713, 1, 6543986, 1, 6544233, 1, 6544501, 1, 6544755, 2, 6545515, 6546540, 1, 6545781, 1, 6546034, 1, 6546293, 1, 6546786, 1, 6547055, 1, 6547297, 1, 6547572, 1, 6548068, 1, 6548321, 1, 6548584, 5, 6549093, 6550120, 6550633, 6551151, 6551668, 1, 6549365, 1, 6549601, 1, 6549861, 1, 6550369, 1, 6550894, 1, 6551412, 1, 6551905, 4, 6552365, 6554721, 6555500, 6557556, 1, 6552673, 1, 6552941, 1, 6553197, 1, 6553455, 1, 6553710, 1, 6553961, 1, 6554209, 1, 6554467, 2, 6554980, 6555245, 1, 6555745, 1, 6556012, 1, 6556268, 1, 6556513, 1, 6556776, 1, 6557039, 1, 6557301, 2, 6557741, 6558313, 1, 6558002, 2, 6558572, 6559346, 1, 6558828, 1, 6559087, 1, 6559589, 7, 6560097, 6561634, 6562149, 6562923, 6563440, 6564726, 6565497, 1, 6560370, 1, 6560617, 1, 6560884, 1, 6561121, 1, 6561390, 1, 6561889, 1, 6562411, 1, 6562664, 1, 6563169, 2, 6563688, 6564457, 1, 6563937, 1, 6564207, 1, 6564961, 1, 6565236, 1, 6565743, 1, 6565995, 7, 6566497, 6567012, 6569319, 6570094, 6570867, 6573684, 6574969, 1, 6566760, 3, 6567265, 6567784, 6568311, 1, 6567532, 1, 6568041, 1, 6568553, 1, 6568803, 1, 6569064, 1, 6569569, 1, 6569778, 1, 6570361, 1, 6570593, 2, 6571053, 6572651, 1, 6571379, 1, 6571621, 1, 6571890, 1, 6572137, 1, 6572390, 1, 6572914, 1, 6573161, 1, 6573428, 1, 6573929, 1, 6574185, 1, 6574445, 1, 6574709, 2, 6575201, 6575983, 1, 6575467, 1, 6575713, 1, 6576239, 1, 6576487, 1, 6576737, 1, 6577249, 2, 6578017, 6578281, 2, 6578785, 6579304, 1, 6579051, 5, 6579809, 6580835, 6581861, 6583403, 6585205, 1, 6580078, 1, 6580327, 1, 6580577, 1, 6581096, 1, 6581349, 1, 6581612, 1, 6582124, 1, 6582380, 1, 6582633, 1, 6582900, 1, 6583141, 1, 6583649, 1, 6583905, 1, 6584174, 1, 6584427, 1, 6584693, 1, 6584949, 1, 6585458, 1, 6585710, 3, 6586211, 6586985, 6587506, 1, 6586469, 1, 6586738, 1, 6587244, 2, 6587745, 6589295, 1, 6588019, 1, 6588264, 1, 6588532, 1, 6588786, 1, 6589025, 1, 6589552, 1, 6589807, 1, 6590052, 1, 6590575, 1, 6590837, 1, 6591090, 1, 6591337, 1, 6591598, 1, 6591847, 1, 6592353, 1, 6592622, 2, 6593129, 6594415, 1, 6593389, 1, 6593633, 1, 6593908, 1, 6594145, 1, 6594672, 1, 6594920, 1, 6595183, 1, 6595438, 1, 6595685, 2, 6596193, 6597225, 1, 6596462, 1, 6596718, 1, 6596961, 1, 6597491, 1, 6597737, 3, 6598257, 6599026, 6599797, 1, 6598517, 1, 6598767, 1, 6599285, 1, 6599532, 1, 6600034, 12, 6600545, 6604387, 6605157, 6607208, 6611817, 6613870, 6615663, 6618992, 6620530, 6625395, 6626167, 6626681, 4, 6600812, 6601582, 6603120, 6603378, 1, 6601061, 1, 6601331, 1, 6601828, 1, 6602089, 1, 6602339, 1, 6602613, 1, 6602867, 2, 6603622, 6603887, 1, 6604142, 1, 6604661, 1, 6604901, 2, 6605412, 6606192, 1, 6605673, 1, 6605932, 1, 6606452, 1, 6606693, 1, 6606962, 4, 6607461, 6608239, 6609778, 6611319, 1, 6607725, 1, 6607969, 2, 6608492, 6609263, 1, 6608737, 1, 6609010, 1, 6609516, 1, 6610031, 1, 6610277, 1, 6610532, 1, 6610789, 1, 6611058, 1, 6611553, 2, 6612082, 6612595, 1, 6612323, 1, 6612851, 1, 6613103, 1, 6613362, 1, 6613619, 3, 6614113, 6614629, 6614899, 1, 6614384, 1, 6615145, 1, 6615405, 2, 6615919, 6616946, 1, 6616180, 1, 6616421, 1, 6616690, 2, 6617189, 6617456, 1, 6617705, 2, 6617967, 6618485, 1, 6618222, 1, 6618739, 1, 6619247, 1, 6619500, 1, 6619753, 1, 6620014, 1, 6620276, 4, 6620773, 6622825, 6623599, 6624373, 2, 6621025, 6622309, 1, 6621293, 1, 6621545, 1, 6621806, 1, 6622055, 1, 6622574, 1, 6623088, 1, 6623348, 1, 6623852, 1, 6624108, 1, 6624624, 1, 6624876, 1, 6625125, 1, 6625641, 1, 6625901, 1, 6626401, 1, 6627183, 2, 6627438, 6627956, 1, 6627687, 2, 6628194, 6628453, 21, 6628909, 6630497, 6633826, 6635619, 6639716, 6640485, 6644839, 6647144, 6647401, 6648428, 6717037, 6733678, 6735728, 6740593, 6742642, 6745459, 6751860, 6754421, 6756726, 6762104, 6764921, 5, 6629169, 6629426, 6629683, 6629940, 6630197, 4, 6630759, 6631788, 6632050, 6633588, 1, 6631029, 1, 6631276, 1, 6631532, 2, 6632296, 6632818, 1, 6632555, 1, 6633071, 1, 6633335, 1, 6634081, 1, 6634356, 1, 6634594, 1, 6634853, 1, 6635113, 1, 6635380, 4, 6635873, 6636655, 6637426, 6638196, 1, 6636142, 1, 6636404, 1, 6636910, 1, 6637156, 1, 6637669, 1, 6637940, 2, 6638441, 6639215, 1, 6638703, 1, 6638958, 1, 6639474, 1, 6639982, 1, 6640225, 4, 6640685, 6642788, 6644078, 6644598, 1, 6641006, 1, 6641263, 1, 6641453, 1, 6641765, 1, 6642038, 1, 6642281, 1, 6642540, 1, 6643052, 1, 6643305, 1, 6643566, 1, 6643815, 1, 6644341, 3, 6645101, 6646126, 6646639, 1, 6645349, 1, 6645614, 1, 6645876, 1, 6646383, 1, 6646892, 1, 6647667, 1, 6647917, 1, 6648161, 2, 6648677, 6716262, 2, 6648931, 6715758, 1, 6649204, 1, 6649455, 1, 6649714, 1, 6649901, 9, 6650161, 6678578, 6695987, 6698804, 6701621, 6704438, 6707255, 6710072, 6712889, 10, 6650416, 6653233, 6656050, 6658867, 6661684, 6664501, 6667318, 6670135, 6672952, 6675769, 10, 6650672, 6650929, 6651186, 6651443, 6651700, 6651957, 6652214, 6652471, 6652728, 6652985, 10, 6653488, 6653745, 6654002, 6654259, 6654516, 6654773, 6655030, 6655287, 6655544, 6655801, 10, 6656304, 6656561, 6656818, 6657075, 6657332, 6657589, 6657846, 6658103, 6658360, 6658617, 10, 6659120, 6659377, 6659634, 6659891, 6660148, 6660405, 6660662, 6660919, 6661176, 6661433, 10, 6661936, 6662193, 6662450, 6662707, 6662964, 6663221, 6663478, 6663735, 6663992, 6664249, 10, 6664752, 6665009, 6665266, 6665523, 6665780, 6666037, 6666294, 6666551, 6666808, 6667065, 10, 6667568, 6667825, 6668082, 6668339, 6668596, 6668853, 6669110, 6669367, 6669624, 6669881, 10, 6670384, 6670641, 6670898, 6671155, 6671412, 6671669, 6671926, 6672183, 6672440, 6672697, 10, 6673200, 6673457, 6673714, 6673971, 6674228, 6674485, 6674742, 6674999, 6675256, 6675513, 10, 6676016, 6676273, 6676530, 6676787, 6677044, 6677301, 6677558, 6677815, 6678072, 6678329, 10, 6678832, 6681649, 6684466, 6687283, 6690100, 6692917, 6694966, 6695223, 6695480, 6695737, 10, 6679088, 6679345, 6679602, 6679859, 6680116, 6680373, 6680630, 6680887, 6681144, 6681401, 10, 6681904, 6682161, 6682418, 6682675, 6682932, 6683189, 6683446, 6683703, 6683960, 6684217, 10, 6684720, 6684977, 6685234, 6685491, 6685748, 6686005, 6686262, 6686519, 6686776, 6687033, 10, 6687536, 6687793, 6688050, 6688307, 6688564, 6688821, 6689078, 6689335, 6689592, 6689849, 10, 6690352, 6690609, 6690866, 6691123, 6691380, 6691637, 6691894, 6692151, 6692408, 6692665, 7, 6693168, 6693425, 6693682, 6693939, 6694196, 6694453, 6694710, 10, 6696240, 6696497, 6696754, 6697011, 6697268, 6697525, 6697782, 6698039, 6698296, 6698553, 10, 6699056, 6699313, 6699570, 6699827, 6700084, 6700341, 6700598, 6700855, 6701112, 6701369, 10, 6701872, 6702129, 6702386, 6702643, 6702900, 6703157, 6703414, 6703671, 6703928, 6704185, 10, 6704688, 6704945, 6705202, 6705459, 6705716, 6705973, 6706230, 6706487, 6706744, 6707001, 10, 6707504, 6707761, 6708018, 6708275, 6708532, 6708789, 6709046, 6709303, 6709560, 6709817, 10, 6710320, 6710577, 6710834, 6711091, 6711348, 6711605, 6711862, 6712119, 6712376, 6712633, 10, 6713136, 6713393, 6713650, 6713907, 6714164, 6714421, 6714678, 6714935, 6715192, 6715449, 1, 6716001, 1, 6716521, 1, 6716773, 3, 6717289, 6731371, 6732405, 7, 6717485, 6719330, 6720867, 6724452, 6725997, 6727539, 6730102, 1, 6717814, 1, 6718063, 1, 6718313, 1, 6718563, 1, 6718821, 1, 6719076, 1, 6719602, 1, 6719845, 1, 6720118, 1, 6720361, 1, 6720627, 2, 6721129, 6723439, 1, 6721394, 1, 6721635, 2, 6721900, 6722421, 1, 6722149, 1, 6722668, 1, 6722913, 1, 6723186, 1, 6723692, 1, 6723951, 1, 6724206, 1, 6724713, 1, 6724978, 1, 6725221, 1, 6725475, 1, 6725748, 1, 6726249, 1, 6726510, 1, 6726761, 1, 6727021, 1, 6727265, 2, 6727781, 6729327, 1, 6728056, 1, 6728308, 1, 6728553, 1, 6728812, 1, 6729061, 1, 6729574, 1, 6729844, 1, 6730351, 1, 6730615, 1, 6730853, 1, 6731116, 1, 6731617, 1, 6731892, 1, 6732136, 1, 6732654, 1, 6732899, 1, 6733161, 1, 6733409, 1, 6733940, 3, 6734177, 6735209, 6735471, 1, 6734439, 1, 6734703, 1, 6734958, 2, 6735969, 6738036, 1, 6736242, 1, 6736481, 1, 6736756, 2, 6736997, 6737519, 1, 6737252, 1, 6737778, 2, 6738277, 6739573, 1, 6738541, 1, 6738786, 1, 6739045, 1, 6739314, 1, 6739824, 1, 6740076, 1, 6740325, 1, 6740853, 1, 6741093, 1, 6741358, 1, 6741620, 1, 6741865, 1, 6742113, 1, 6742380, 2, 6742889, 6744438, 2, 6743142, 6743663, 1, 6743411, 1, 6743925, 1, 6744179, 1, 6744681, 1, 6744931, 1, 6745189, 4, 6745697, 6746481, 6749300, 6751095, 1, 6745965, 1, 6746213, 1, 6746741, 1, 6746985, 1, 6747249, 1, 6747509, 1, 6747745, 1, 6748004, 1, 6748274, 1, 6748513, 1, 6748788, 1, 6749029, 1, 6749541, 1, 6749810, 1, 6750068, 1, 6750313, 1, 6750581, 1, 6750835, 1, 6751329, 1, 6751602, 2, 6752102, 6752877, 1, 6752367, 1, 6752622, 2, 6753129, 6754158, 1, 6753390, 1, 6753653, 1, 6753907, 3, 6754657, 6755438, 6756472, 1, 6754917, 1, 6755185, 1, 6755705, 1, 6755937, 1, 6756205, 1, 6756965, 2, 6757230, 6760818, 2, 6757421, 6759284, 1, 6757748, 1, 6757992, 1, 6758249, 1, 6758514, 1, 6758772, 1, 6759033, 3, 6759525, 6760296, 6760569, 1, 6759781, 1, 6760046, 1, 6761057, 1, 6761326, 1, 6761571, 1, 6761829, 1, 6762356, 3, 6762593, 6763369, 6764149, 1, 6762862, 1, 6763123, 1, 6763628, 1, 6763877, 1, 6764396, 1, 6764641, 1, 6765163, 1, 6765682, 1, 6765935, 1, 6766199, 1, 6766446, 3, 6766945, 6767727, 6768242, 2, 6767202, 6767479, 1, 6767986, 1, 6768481, 13, 6768946, 6769249, 6786915, 6789221, 6799976, 6800489, 6808943, 6843762, 6845812, 6847093, 6857078, 6857335, 6859641, 16, 6769459, 6769718, 6770017, 6770274, 6770788, 6773094, 6773611, 6775660, 6778221, 6779502, 6780016, 6781554, 6783604, 6783862, 6786424, 6786681, 1, 6770486, 3, 6771044, 6771557, 6772079, 1, 6771297, 1, 6771812, 1, 6772343, 1, 6772581, 1, 6772836, 1, 6773364, 3, 6773861, 6774377, 6775156, 1, 6774130, 1, 6774638, 1, 6774887, 1, 6775401, 2, 6775916, 6776691, 1, 6776175, 1, 6776439, 1, 6776936, 1, 6777189, 1, 6777452, 1, 6777701, 1, 6777972, 1, 6778482, 1, 6778735, 1, 6778979, 1, 6779243, 1, 6779751, 2, 6780261, 6780777, 1, 6780531, 1, 6781038, 1, 6781287, 5, 6781746, 6782049, 6782827, 6783088, 6783349, 1, 6782308, 1, 6782561, 2, 6784101, 6784617, 1, 6784356, 2, 6784865, 6785401, 1, 6785134, 1, 6785633, 1, 6785902, 1, 6786153, 2, 6787176, 6788985, 3, 6787425, 6787683, 6788207, 1, 6787961, 1, 6788463, 1, 6788713, 13, 6789421, 6790757, 6791783, 6792297, 6792556, 6793326, 6793584, 6793841, 6794611, 6796660, 6796917, 6799222, 6799736, 1, 6789735, 1, 6789999, 1, 6790241, 1, 6790516, 2, 6791022, 6791536, 1, 6791285, 1, 6791993, 2, 6792806, 6793068, 1, 6794085, 1, 6794348, 1, 6794856, 3, 6795058, 6795369, 6795884, 1, 6795623, 1, 6796129, 1, 6796397, 3, 6797153, 6798447, 6798968, 1, 6797413, 1, 6797681, 1, 6797940, 1, 6798197, 1, 6798705, 1, 6799457, 1, 6800225, 11, 6800740, 6800997, 6801766, 6802281, 6802797, 6803310, 6805104, 6805361, 6805618, 6806644, 6807161, 1, 6801260, 1, 6801508, 1, 6802036, 1, 6802542, 1, 6803041, 3, 6803556, 6804073, 6804596, 1, 6803809, 1, 6804327, 1, 6804847, 2, 6805857, 6806388, 1, 6806117, 1, 6806881, 1, 6807417, 1, 6807649, 1, 6807905, 1, 6808172, 1, 6808417, 1, 6808673, 13, 6809185, 6809443, 6810469, 6810983, 6811503, 6813040, 6814321, 6814578, 6840436, 6840693, 6842487, 6843256, 6843513, 1, 6809707, 1, 6809957, 1, 6810212, 1, 6810739, 1, 6811241, 2, 6811753, 6812020, 1, 6812265, 1, 6812526, 1, 6812775, 1, 6813296, 1, 6813545, 1, 6813806, 1, 6814055, 1, 6814836, 11, 6815021, 6825315, 6826340, 6828645, 6829672, 6830700, 6833005, 6833776, 6835826, 6838387, 6838645, 1, 6815348, 1, 6815607, 1, 6815849, 1, 6816103, 1, 6816301, 9, 6816609, 6817122, 6818920, 6820461, 6821486, 6822511, 6823283, 6824052, 6824825, 1, 6816882, 1, 6817386, 1, 6817633, 1, 6817906, 1, 6818155, 1, 6818401, 1, 6818670, 1, 6819169, 1, 6819431, 1, 6819681, 1, 6819948, 1, 6820204, 1, 6820705, 1, 6820964, 1, 6821234, 1, 6821729, 1, 6822005, 1, 6822244, 1, 6822771, 1, 6823027, 1, 6823535, 1, 6823788, 1, 6824313, 1, 6824562, 1, 6825074, 1, 6825569, 1, 6825835, 1, 6826085, 1, 6826607, 1, 6826871, 1, 6827118, 1, 6827361, 1, 6827634, 1, 6827890, 1, 6828143, 1, 6828407, 1, 6828910, 1, 6829157, 1, 6829426, 1, 6829921, 1, 6830190, 1, 6830436, 1, 6830949, 1, 6831206, 1, 6831476, 1, 6831713, 1, 6831986, 1, 6832242, 1, 6832495, 1, 6832759, 1, 6833257, 1, 6833508, 1, 6834017, 1, 6834290, 1, 6834529, 1, 6834796, 1, 6835052, 1, 6835301, 1, 6835564, 1, 6836073, 1, 6836327, 1, 6836584, 1, 6836852, 1, 6837089, 1, 6837362, 1, 6837618, 1, 6837871, 1, 6838135, 1, 6838896, 1, 6839137, 1, 6839410, 1, 6839666, 1, 6839919, 1, 6840183, 1, 6840940, 1, 6841188, 1, 6841445, 1, 6841714, 1, 6841957, 1, 6842212, 1, 6842725, 1, 6842994, 2, 6844009, 6845301, 2, 6844269, 6844782, 1, 6844528, 1, 6845029, 1, 6845543, 1, 6846049, 1, 6846320, 1, 6846569, 1, 6846819, 12, 6847282, 6847585, 6848866, 6849637, 6851686, 6852716, 6852973, 6853231, 6854000, 6854258, 6854772, 6856824, 1, 6847854, 1, 6848103, 1, 6848376, 1, 6848617, 1, 6849141, 1, 6849394, 2, 6849902, 6851441, 1, 6850163, 1, 6850408, 1, 6850677, 1, 6850917, 1, 6851188, 1, 6851942, 1, 6852204, 1, 6852453, 2, 6853488, 6853752, 1, 6854520, 1, 6855028, 1, 6855276, 1, 6855525, 1, 6855779, 1, 6856047, 1, 6856291, 1, 6856555, 4, 6857569, 6858085, 6858345, 6858863, 1, 6857825, 1, 6858601, 2, 6859119, 6859385, 6, 6859873, 6860133, 6860400, 6860658, 6861172, 6861432, 1, 6860920, 20, 6861869, 6863713, 6863970, 6864483, 6866532, 6869349, 6870375, 6874729, 6874987, 6875756, 6880365, 6892910, 6904175, 6931824, 6932082, 6933363, 6933876, 6934392, 6945913, 6946682, 6, 6862129, 6862386, 6862643, 6862900, 6863157, 6863414, 1, 6864229, 1, 6864747, 2, 6865004, 6865518, 1, 6865253, 1, 6865765, 1, 6866035, 1, 6866291, 2, 6866788, 6868069, 1, 6867048, 2, 6867297, 6867817, 1, 6867565, 1, 6868343, 1, 6868577, 1, 6868857, 1, 6869107, 3, 6869605, 6869872, 6870136, 4, 6870580, 6870885, 6871405, 6872430, 1, 6871148, 1, 6871649, 2, 6871910, 6872182, 2, 6872691, 6872951, 1, 6873202, 1, 6873449, 1, 6873716, 1, 6873961, 1, 6874222, 1, 6874471, 2, 6875186, 6875497, 5, 6876001, 6876520, 6878313, 6879339, 6879606, 1, 6876211, 1, 6876783, 1, 6877045, 1, 6877285, 1, 6877556, 1, 6877812, 1, 6878053, 1, 6878577, 1, 6878837, 1, 6879073, 1, 6879845, 1, 6880114, 10, 6880609, 6883428, 6884197, 6884711, 6885225, 6886252, 6886766, 6887280, 6889586, 6890613, 2, 6880876, 6882414, 1, 6881141, 1, 6881390, 1, 6881639, 1, 6881909, 1, 6882158, 1, 6882675, 1, 6882921, 1, 6883187, 1, 6883695, 1, 6883956, 1, 6884465, 1, 6884965, 1, 6885484, 1, 6885729, 1, 6886002, 1, 6886501, 1, 6887013, 1, 6887532, 2, 6887785, 6889077, 1, 6888038, 1, 6888297, 1, 6888549, 1, 6888804, 1, 6889331, 1, 6889825, 1, 6890098, 1, 6890354, 1, 6890860, 1, 6891124, 1, 6891361, 1, 6891630, 1, 6891877, 1, 6892143, 1, 6892405, 1, 6892659, 8, 6893156, 6893925, 6894183, 6897000, 6898027, 6899054, 6900847, 6902901, 1, 6893416, 1, 6893673, 2, 6894433, 6895212, 1, 6894689, 1, 6894964, 1, 6895461, 1, 6895661, 1, 6895980, 1, 6896233, 1, 6896494, 1, 6896741, 1, 6897249, 1, 6897516, 1, 6897761, 1, 6898281, 1, 6898542, 1, 6898791, 1, 6899321, 1, 6899561, 1, 6899817, 1, 6900089, 1, 6900328, 1, 6900581, 1, 6901100, 1, 6901359, 1, 6901607, 1, 6901865, 1, 6902115, 1, 6902369, 1, 6902636, 1, 6903155, 1, 6903407, 1, 6903657, 1, 6903908, 1, 6904435, 1, 6904621, 10, 6904931, 6907752, 6909033, 6910315, 6916461, 6917742, 6919024, 6925170, 6926451, 6928756, 2, 6905192, 6906729, 1, 6905449, 1, 6905701, 1, 6905973, 1, 6906211, 1, 6906472, 1, 6906981, 1, 6907253, 1, 6907491, 1, 6908009, 1, 6908261, 1, 6908533, 1, 6908776, 1, 6909285, 1, 6909557, 1, 6909806, 1, 6910055, 3, 6910561, 6913640, 6915177, 1, 6910832, 1, 6911097, 1, 6911333, 1, 6911599, 1, 6911861, 1, 6912110, 1, 6912368, 1, 6912617, 1, 6912869, 1, 6913141, 1, 6913392, 1, 6913897, 1, 6914149, 1, 6914421, 1, 6914667, 1, 6914920, 1, 6915449, 1, 6915685, 1, 6915951, 1, 6916203, 1, 6916713, 1, 6916965, 1, 6917237, 1, 6917485, 1, 6917993, 1, 6918245, 1, 6918517, 1, 6918766, 3, 6919265, 6920808, 6922345, 1, 6919534, 1, 6919795, 1, 6920041, 1, 6920303, 1, 6920563, 1, 6921065, 1, 6921317, 1, 6921589, 1, 6921840, 1, 6922088, 1, 6922597, 1, 6922869, 1, 6923120, 1, 6923309, 1, 6923627, 1, 6923881, 1, 6924153, 1, 6924389, 1, 6924655, 1, 6924907, 1, 6925417, 1, 6925669, 1, 6925941, 1, 6926188, 1, 6926707, 1, 6926945, 1, 6927214, 1, 6927463, 1, 6927731, 1, 6927977, 1, 6928239, 1, 6928499, 2, 6929000, 6930537, 1, 6929257, 1, 6929509, 1, 6929781, 1, 6930036, 1, 6930280, 1, 6930795, 1, 6931045, 1, 6931317, 1, 6931572, 1, 6932329, 1, 6932590, 1, 6932839, 1, 6933109, 1, 6933601, 1, 6934117, 2, 6934573, 6940532, 4, 6934892, 6935920, 6937459, 6938996, 1, 6935145, 1, 6935406, 1, 6935653, 1, 6936165, 1, 6936434, 1, 6936621, 1, 6936933, 1, 6937197, 1, 6937716, 1, 6937970, 1, 6938217, 1, 6938478, 1, 6938727, 1, 6939240, 1, 6939497, 1, 6939762, 1, 6940020, 1, 6940281, 3, 6940773, 6943080, 6943609, 1, 6941029, 1, 6941294, 1, 6941556, 1, 6941800, 2, 6941997, 6942835, 2, 6942257, 6942514, 1, 6943347, 1, 6943789, 1, 6944102, 1, 6944367, 1, 6944629, 1, 6944882, 1, 6945140, 1, 6945384, 1, 6945651, 1, 6946145, 1, 6946417, 1, 6946917, 1, 6947429, 6, 6947937, 6949989, 6951017, 6952044, 6953333, 6954615, 1, 6948212, 1, 6948453, 1, 6948706, 1, 6948975, 1, 6949217, 1, 6949490, 1, 6949732, 1, 6950263, 1, 6950501, 1, 6950756, 2, 6951269, 6951790, 1, 6951538, 1, 6952297, 1, 6952562, 1, 6952815, 1, 6953070, 2, 6953580, 6954094, 1, 6953836, 1, 6954347, 1, 6954849, 5, 6955361, 6959205, 6962025, 6966127, 6969973, 4, 6955630, 6956658, 6957171, 6957686, 1, 6955892, 1, 6956133, 1, 6956388, 1, 6956914, 1, 6957416, 2, 6957925, 6958191, 1, 6958446, 1, 6958697, 1, 6958947, 3, 6959460, 6959717, 6961269, 1, 6959984, 2, 6960233, 6961017, 1, 6960494, 1, 6960743, 1, 6961524, 1, 6961768, 4, 6962275, 6962788, 6964327, 6965614, 1, 6962533, 2, 6963045, 6963561, 1, 6963314, 1, 6963822, 1, 6964071, 1, 6964584, 1, 6964852, 1, 6965100, 1, 6965369, 1, 6965863, 5, 6966369, 6966896, 6968180, 6968694, 6969207, 1, 6966638, 2, 6967141, 6967401, 1, 6967662, 1, 6967911, 1, 6968424, 1, 6968943, 1, 6969452, 1, 6969721, 1, 6970226, 5, 6970721, 6976357, 6978409, 6981487, 6982772, 2, 6970988, 6975603, 1, 6971244, 3, 6971491, 6973029, 6973555, 1, 6971753, 1, 6972018, 1, 6972259, 1, 6972524, 1, 6972773, 1, 6973298, 1, 6973797, 1, 6974068, 1, 6974317, 1, 6974569, 1, 6974830, 1, 6975093, 1, 6975347, 1, 6975848, 1, 6976112, 2, 6976609, 6977136, 1, 6976882, 1, 6977377, 1, 6977650, 1, 6977907, 1, 6978156, 3, 6978660, 6978924, 6980210, 2, 6979173, 6979433, 1, 6979694, 1, 6979943, 1, 6980459, 1, 6980713, 1, 6980974, 1, 6981223, 1, 6981739, 1, 6981993, 1, 6982254, 1, 6982503, 1, 6983013, 3, 6983521, 6985061, 6986607, 3, 6983785, 6984299, 6984816, 1, 6984044, 1, 6984549, 1, 6985317, 1, 6985594, 1, 6985833, 1, 6986094, 1, 6986343, 2, 6986869, 6987383, 1, 6987124, 3, 6987618, 6989414, 6990701, 1, 6987887, 1, 6988129, 1, 6988402, 1, 6988644, 1, 6988901, 1, 6989170, 1, 6989676, 1, 6989921, 1, 6990187, 1, 6990437, 1, 6990945, 1, 6991214, 18, 6991661, 6993761, 6994275, 6996838, 7003239, 7004524, 7007597, 7008878, 7010159, 7010672, 7011185, 7011442, 7011955, 7012212, 7012469, 7017591, 7018616, 7018873, 7, 6991921, 6992178, 6992435, 6992692, 6992949, 6993206, 6993463, 1, 6994032, 3, 6994531, 6995305, 6996331, 1, 6994789, 1, 6995058, 1, 6995557, 1, 6995828, 1, 6996089, 1, 6996595, 1, 6997108, 4, 6997346, 6998371, 6998894, 6999927, 1, 6997601, 1, 6997868, 1, 6998124, 1, 6998649, 1, 6999141, 1, 6999411, 1, 6999667, 1, 7000161, 1, 7000434, 1, 7000677, 1, 7000877, 1, 7001190, 1, 7001461, 1, 7001710, 1, 7001955, 1, 7002228, 1, 7002473, 1, 7002735, 1, 7002990, 1, 7003492, 1, 7003753, 1, 7004001, 1, 7004270, 3, 7004770, 7005540, 7006569, 1, 7005025, 1, 7005298, 1, 7005801, 1, 7006053, 1, 7006322, 1, 7006820, 1, 7007093, 1, 7007347, 1, 7007856, 1, 7008101, 1, 7008366, 1, 7008615, 2, 7009127, 7009386, 1, 7009633, 1, 7009901, 1, 7010414, 1, 7010918, 1, 7011681, 3, 7012718, 7013746, 7014516, 2, 7012961, 7013476, 1, 7013232, 1, 7013987, 1, 7014245, 1, 7014760, 2, 7014957, 7016805, 1, 7015283, 1, 7015532, 1, 7015777, 1, 7016054, 1, 7016293, 1, 7016569, 1, 7017074, 1, 7017326, 1, 7017833, 1, 7018092, 1, 7018351, 1, 7019119, 1, 7019373, 1, 7019618, 1, 7019887, 10, 7020385, 7028069, 7037288, 7039081, 7043692, 7047791, 7052658, 7057525, 7058551, 7059065, 5, 7020643, 7021924, 7023463, 7025010, 7027316, 2, 7020901, 7021161, 1, 7021422, 1, 7021671, 1, 7022181, 1, 7022451, 1, 7022709, 1, 7022953, 1, 7023220, 1, 7023720, 1, 7023973, 1, 7024244, 1, 7024500, 1, 7024745, 1, 7025259, 1, 7025516, 2, 7025765, 7026537, 2, 7026034, 7026291, 1, 7026798, 1, 7027047, 1, 7027560, 1, 7027817, 5, 7028321, 7032419, 7033445, 7035502, 7036019, 2, 7028587, 7032178, 3, 7028781, 7030885, 7031401, 1, 7029102, 1, 7029359, 1, 7029549, 1, 7029861, 1, 7030134, 1, 7030377, 1, 7030636, 1, 7031154, 1, 7031662, 1, 7031911, 1, 7032681, 1, 7032929, 1, 7033196, 2, 7033699, 7034212, 1, 7033960, 1, 7034466, 1, 7034735, 1, 7034977, 1, 7035252, 1, 7035764, 1, 7036269, 1, 7036521, 1, 7036780, 1, 7037039, 1, 7037541, 1, 7037810, 1, 7038057, 1, 7038307, 1, 7038561, 1, 7038828, 4, 7039331, 7039844, 7040878, 7041394, 1, 7039589, 1, 7040101, 1, 7040370, 1, 7040633, 1, 7041125, 2, 7041633, 7042665, 2, 7041900, 7042158, 1, 7042420, 1, 7042932, 1, 7043189, 1, 7043443, 2, 7043937, 7046249, 2, 7044211, 7045497, 1, 7044456, 1, 7044713, 1, 7044974, 1, 7045223, 1, 7045733, 1, 7045988, 1, 7046516, 1, 7046772, 1, 7047017, 1, 7047278, 1, 7047527, 6, 7048043, 7048814, 7049583, 7050354, 7051124, 7051381, 1, 7048293, 1, 7048548, 1, 7049063, 1, 7049317, 2, 7049836, 7050094, 1, 7050612, 1, 7050867, 1, 7051636, 1, 7051881, 1, 7052142, 1, 7052391, 3, 7052901, 7055721, 7056751, 2, 7053153, 7053667, 1, 7053412, 1, 7053928, 1, 7054183, 1, 7054437, 1, 7054707, 1, 7054945, 1, 7055214, 1, 7055463, 1, 7055982, 1, 7056231, 1, 7056499, 1, 7057013, 1, 7057268, 1, 7057774, 1, 7058023, 1, 7058291, 1, 7058785, 4, 7059555, 7060850, 7061363, 7065461, 2, 7059809, 7060341, 1, 7060080, 1, 7060592, 1, 7061108, 1, 7061621, 2, 7061858, 7063664, 2, 7062117, 7062387, 1, 7062629, 1, 7062900, 1, 7063141, 1, 7063409, 2, 7063909, 7064179, 1, 7064421, 1, 7064692, 1, 7064933, 1, 7065201, 4, 7065697, 7077221, 7078502, 7078761, 2, 7065970, 7076980, 2, 7066213, 7076710, 4, 7066468, 7066729, 7069811, 7075445, 1, 7066990, 1, 7067252, 1, 7067493, 1, 7067762, 1, 7068019, 1, 7068261, 1, 7068515, 1, 7068788, 1, 7069033, 1, 7069295, 1, 7069550, 1, 7070069, 2, 7070306, 7072624, 1, 7070579, 1, 7070821, 1, 7071092, 1, 7071333, 1, 7071601, 1, 7071861, 1, 7072097, 1, 7072364, 1, 7072869, 1, 7073138, 1, 7073395, 1, 7073637, 1, 7073908, 1, 7074149, 1, 7074417, 1, 7074677, 1, 7074913, 1, 7075180, 1, 7075694, 1, 7075945, 1, 7076207, 1, 7076462, 1, 7077477, 1, 7077754, 1, 7077989, 1, 7078244, 4, 7079012, 7079271, 7080306, 7081331, 1, 7079527, 1, 7079788, 1, 7080037, 1, 7080562, 1, 7080805, 1, 7081068, 1, 7081576, 1, 7082081, 1, 7082354, 1, 7082610, 10, 7083105, 7113315, 7113829, 7115624, 7116649, 7118445, 7119471, 7120500, 7121525, 7122809, 5, 7083361, 7083630, 7112560, 7112820, 7113080, 1, 7083879, 12, 7084129, 7085411, 7088232, 7089513, 7090795, 7092333, 7093614, 7094896, 7096178, 7099507, 7105140, 7109753, 1, 7084402, 1, 7084641, 1, 7084901, 1, 7085153, 1, 7085673, 1, 7085925, 1, 7086197, 1, 7086435, 1, 7086637, 1, 7086952, 1, 7087209, 1, 7087461, 1, 7087733, 1, 7087976, 1, 7088489, 1, 7088741, 1, 7089013, 1, 7089256, 1, 7089765, 1, 7090037, 1, 7090286, 1, 7090535, 1, 7091049, 1, 7091321, 1, 7091557, 1, 7091823, 1, 7092075, 1, 7092585, 1, 7092837, 1, 7093109, 1, 7093357, 1, 7093865, 1, 7094117, 1, 7094389, 1, 7094638, 1, 7095145, 1, 7095397, 1, 7095669, 1, 7095920, 1, 7096425, 1, 7096677, 1, 7096949, 1, 7097196, 1, 7097389, 1, 7097707, 1, 7097960, 1, 7098217, 1, 7098469, 1, 7098741, 1, 7098987, 1, 7099240, 1, 7099753, 1, 7100015, 1, 7100275, 1, 7100461, 3, 7100779, 7102320, 7103604, 1, 7101033, 1, 7101305, 1, 7101541, 1, 7101807, 1, 7102059, 1, 7102569, 1, 7102821, 1, 7103093, 1, 7103344, 1, 7103849, 1, 7104107, 1, 7104357, 1, 7104629, 1, 7104884, 2, 7105384, 7106921, 1, 7105641, 1, 7105893, 1, 7106165, 1, 7106420, 1, 7106664, 1, 7107179, 1, 7107429, 1, 7107701, 1, 7107956, 1, 7108141, 1, 7108464, 1, 7108713, 1, 7108965, 1, 7109237, 1, 7109488, 1, 7109989, 1, 7110255, 1, 7110514, 1, 7110761, 1, 7111022, 1, 7111272, 1, 7111529, 1, 7111781, 1, 7112053, 1, 7112296, 1, 7113586, 4, 7114085, 7114352, 7114612, 7115384, 1, 7114861, 1, 7115118, 2, 7115877, 7116137, 1, 7116398, 4, 7116901, 7117680, 7117940, 7118200, 2, 7117168, 7117432, 1, 7118697, 1, 7118956, 1, 7119205, 3, 7119728, 7119988, 7120248, 1, 7120737, 1, 7121010, 1, 7121254, 4, 7121776, 7122036, 7122293, 7122552, 4, 7123056, 7123314, 7123828, 7124088, 1, 7123576, 8, 7124530, 7124833, 7143269, 7150697, 7155567, 7161202, 7186805, 7191159, 10, 7125091, 7128676, 7129702, 7130220, 7131501, 7132526, 7135858, 7138676, 7140981, 7142006, 2, 7125347, 7127915, 1, 7125601, 1, 7125876, 2, 7126121, 7127663, 1, 7126387, 1, 7126643, 1, 7126889, 1, 7127149, 1, 7127407, 1, 7128165, 1, 7128420, 1, 7128937, 1, 7129205, 1, 7129453, 1, 7129958, 1, 7130476, 1, 7130729, 1, 7130991, 1, 7131246, 1, 7131760, 1, 7132005, 1, 7132260, 1, 7132772, 3, 7133025, 7133801, 7134579, 1, 7133298, 1, 7133540, 1, 7134062, 1, 7134311, 1, 7134836, 1, 7135081, 1, 7135340, 1, 7135596, 5, 7136102, 7136363, 7136626, 7137395, 7137652, 1, 7136869, 1, 7137124, 1, 7137897, 1, 7138158, 1, 7138407, 3, 7138917, 7139689, 7140469, 1, 7139186, 1, 7139443, 1, 7139951, 1, 7140206, 1, 7140709, 1, 7141234, 1, 7141487, 1, 7141747, 1, 7142258, 1, 7142511, 2, 7142771, 7143029, 6, 7143521, 7145069, 7145326, 7147632, 7147890, 7148660, 1, 7143789, 2, 7144041, 7144825, 1, 7144302, 1, 7144551, 1, 7145583, 1, 7145831, 1, 7146098, 1, 7146337, 1, 7146608, 1, 7146856, 1, 7147113, 1, 7147363, 1, 7148133, 1, 7148399, 1, 7148904, 1, 7149167, 1, 7149427, 1, 7149667, 1, 7149935, 1, 7150192, 1, 7150437, 5, 7150947, 7152231, 7153004, 7153773, 7154546, 1, 7151211, 1, 7151465, 1, 7151726, 1, 7151975, 1, 7152493, 1, 7152737, 2, 7153253, 7153516, 1, 7154029, 1, 7154277, 1, 7154802, 1, 7155061, 1, 7155312, 5, 7155811, 7156334, 7156848, 7160178, 7160694, 1, 7156075, 1, 7156581, 2, 7157104, 7158903, 2, 7157345, 7158121, 1, 7157607, 1, 7157861, 1, 7158382, 1, 7158631, 1, 7159137, 1, 7159412, 1, 7159651, 1, 7159912, 1, 7160421, 1, 7160933, 5, 7161441, 7172965, 7177065, 7181678, 7182191, 4, 7161703, 7163753, 7169396, 7171447, 1, 7161959, 1, 7162217, 1, 7162483, 1, 7162733, 1, 7162977, 1, 7163252, 1, 7163489, 3, 7164006, 7164263, 7168622, 1, 7164520, 1, 7164788, 3, 7165029, 7166830, 7167856, 1, 7165296, 1, 7165555, 1, 7165801, 1, 7166060, 1, 7166319, 1, 7166574, 1, 7167077, 1, 7167347, 1, 7167603, 1, 7168104, 1, 7168361, 1, 7168869, 1, 7169138, 2, 7169641, 7170421, 1, 7169889, 1, 7170158, 1, 7170669, 1, 7170861, 1, 7171122, 1, 7171682, 1, 7171941, 1, 7172210, 1, 7172466, 1, 7172729, 4, 7173217, 7174254, 7175283, 7175796, 1, 7173485, 1, 7173733, 1, 7174002, 1, 7174503, 1, 7174772, 1, 7175016, 1, 7175539, 1, 7176035, 1, 7176296, 1, 7176549, 1, 7176804, 4, 7177315, 7178340, 7178859, 7181168, 1, 7177588, 1, 7177836, 1, 7178105, 1, 7178597, 1, 7179109, 1, 7179380, 1, 7179624, 1, 7179890, 1, 7180143, 1, 7180405, 1, 7180647, 1, 7180904, 1, 7181413, 1, 7181939, 2, 7182443, 7186286, 1, 7182693, 2, 7182893, 7186035, 9, 7183153, 7183922, 7184179, 7184436, 7184693, 7184950, 7185207, 7185464, 7185721, 2, 7183408, 7183665, 1, 7186535, 4, 7187043, 7188580, 7189606, 7190640, 1, 7187307, 1, 7187501, 1, 7187823, 1, 7188085, 1, 7188340, 2, 7188841, 7189369, 1, 7189103, 1, 7189862, 1, 7190117, 1, 7190372, 1, 7190881, 1, 7191393, 19, 7191853, 7194209, 7195746, 7220835, 7237988, 7238501, 7238760, 7239529, 7241067, 7241836, 7242861, 7245934, 7252847, 7253616, 7278194, 7284595, 7287156, 7287925, 7288184, 8, 7192113, 7192370, 7192627, 7192884, 7193141, 7193398, 7193655, 7193912, 3, 7194466, 7194725, 7195501, 2, 7194990, 7195252, 12, 7196004, 7196773, 7197799, 7199081, 7199850, 7202412, 7206509, 7207534, 7208048, 7210610, 7211635, 7219829, 1, 7196271, 1, 7196532, 1, 7197028, 1, 7197295, 1, 7197556, 1, 7198066, 1, 7198319, 1, 7198581, 1, 7198832, 1, 7199348, 1, 7199599, 2, 7200101, 7200879, 1, 7200355, 1, 7200628, 1, 7201129, 1, 7201390, 1, 7201637, 2, 7201892, 7202162, 1, 7202665, 2, 7202925, 7205486, 1, 7203169, 1, 7203444, 2, 7203685, 7204713, 1, 7203885, 2, 7204146, 7204403, 1, 7204975, 1, 7205230, 1, 7205733, 1, 7205985, 1, 7206258, 1, 7206773, 1, 7207020, 1, 7207284, 1, 7207781, 2, 7208300, 7209077, 1, 7208565, 1, 7208819, 1, 7209326, 1, 7209571, 1, 7209844, 1, 7210089, 1, 7210355, 1, 7210849, 1, 7211122, 1, 7211378, 5, 7211875, 7213157, 7216233, 7216756, 7219061, 1, 7212146, 1, 7212393, 1, 7212656, 1, 7212916, 1, 7213428, 2, 7213669, 7215214, 1, 7213937, 2, 7214193, 7214453, 1, 7214689, 1, 7214956, 1, 7215461, 1, 7215729, 1, 7215985, 1, 7216493, 1, 7217001, 1, 7217268, 1, 7217525, 1, 7217780, 2, 7218021, 7218281, 1, 7218543, 1, 7218798, 2, 7219298, 7219568, 1, 7220078, 1, 7220329, 1, 7220596, 3, 7221091, 7235176, 7236459, 5, 7221345, 7222883, 7224677, 7231086, 7234419, 1, 7221616, 1, 7221872, 1, 7222130, 1, 7222383, 1, 7222648, 1, 7223157, 1, 7223410, 1, 7223660, 1, 7223929, 1, 7224165, 1, 7224433, 2, 7224933, 7230833, 1, 7225188, 1, 7225459, 3, 7225701, 7226995, 7229556, 1, 7225969, 1, 7226229, 1, 7226465, 1, 7226732, 1, 7227244, 1, 7227489, 1, 7227758, 1, 7228020, 1, 7228261, 1, 7228529, 1, 7228789, 1, 7229025, 1, 7229292, 1, 7229801, 1, 7230060, 1, 7230308, 1, 7230565, 3, 7231329, 7232869, 7233651, 1, 7231600, 1, 7231856, 1, 7232114, 1, 7232367, 1, 7232632, 1, 7233137, 1, 7233393, 1, 7233897, 1, 7234157, 1, 7234665, 1, 7234925, 1, 7235444, 1, 7235688, 1, 7235937, 1, 7236212, 2, 7236709, 7237225, 1, 7236964, 1, 7237486, 1, 7237735, 1, 7238194, 1, 7239029, 1, 7239282, 1, 7239796, 1, 7240033, 1, 7240290, 1, 7240556, 1, 7240805, 1, 7241333, 1, 7241582, 1, 7242086, 1, 7242357, 1, 7242610, 2, 7243105, 7243885, 1, 7243379, 1, 7243624, 2, 7244129, 7245413, 1, 7244404, 1, 7244649, 1, 7244911, 1, 7245166, 1, 7245682, 5, 7246180, 7247718, 7249255, 7251058, 7252083, 1, 7246433, 1, 7246702, 1, 7246949, 1, 7247219, 1, 7247461, 1, 7247980, 1, 7248239, 1, 7248503, 1, 7248741, 1, 7249010, 1, 7249516, 1, 7249761, 1, 7250035, 1, 7250291, 1, 7250533, 1, 7250803, 1, 7251305, 1, 7251571, 1, 7251813, 1, 7252325, 1, 7252596, 2, 7253104, 7253368, 12, 7253809, 7254066, 7254323, 7254628, 7256165, 7267176, 7268716, 7269741, 7270766, 7271280, 7272306, 7274355, 2, 7254895, 7255411, 1, 7255156, 1, 7255669, 1, 7255906, 2, 7256420, 7257202, 1, 7256687, 1, 7256948, 5, 7257446, 7258728, 7259753, 7261555, 7264886, 1, 7257705, 1, 7257976, 1, 7258213, 1, 7258468, 1, 7258981, 1, 7259250, 1, 7259503, 1, 7260013, 1, 7260272, 1, 7260527, 1, 7260787, 1, 7261029, 1, 7261284, 2, 7261795, 7263077, 1, 7262066, 1, 7262313, 1, 7262576, 1, 7262836, 1, 7263348, 1, 7263589, 1, 7263857, 1, 7264117, 1, 7264353, 1, 7264620, 1, 7265129, 2, 7265388, 7266675, 1, 7265644, 1, 7265889, 1, 7266153, 1, 7266414, 1, 7266917, 1, 7267443, 2, 7267695, 7268213, 1, 7267948, 1, 7268450, 1, 7268961, 1, 7269234, 1, 7269490, 1, 7270005, 1, 7270252, 1, 7270516, 1, 7271013, 1, 7271532, 1, 7271797, 1, 7272051, 1, 7272545, 1, 7272812, 1, 7273065, 1, 7273326, 1, 7273573, 1, 7273825, 1, 7274098, 3, 7274597, 7276905, 7277429, 1, 7274868, 2, 7275109, 7275886, 1, 7275377, 1, 7275633, 1, 7276133, 1, 7276401, 1, 7276657, 1, 7277165, 2, 7277666, 7277936, 7, 7278393, 7278689, 7279461, 7279718, 7281266, 7283832, 7284089, 1, 7278958, 1, 7279207, 2, 7279969, 7280741, 1, 7280227, 1, 7280485, 1, 7281010, 1, 7281519, 2, 7281767, 7283061, 1, 7282017, 1, 7282292, 1, 7282533, 1, 7282732, 1, 7283310, 1, 7283556, 1, 7284321, 2, 7284840, 7285360, 1, 7285097, 1, 7285605, 1, 7285870, 1, 7286131, 1, 7286377, 1, 7286639, 1, 7286894, 1, 7287410, 1, 7287649, 1, 7288673, 2, 7288946, 7289971, 1, 7289193, 1, 7289460, 1, 7289697, 1, 7290228, 1, 7290473, 8, 7290977, 7295077, 7296359, 7296617, 7300462, 7301487, 7302773, 7303546, 5, 7291233, 7291502, 7291760, 7293042, 7294579, 1, 7292016, 1, 7292265, 1, 7292526, 1, 7292775, 2, 7293288, 7293810, 1, 7293547, 1, 7294063, 1, 7294327, 1, 7294824, 2, 7295329, 7295845, 1, 7295604, 1, 7296116, 3, 7296873, 7297133, 7299954, 2, 7297389, 7298931, 2, 7297637, 7298153, 1, 7297906, 1, 7298414, 1, 7298663, 1, 7299189, 1, 7299433, 1, 7299700, 1, 7300204, 1, 7300727, 1, 7300961, 1, 7301234, 2, 7301743, 7302002, 1, 7302244, 1, 7302515, 1, 7303022, 1, 7303271, 10, 7304033, 7304297, 7304556, 7307885, 7322990, 7330415, 7331440, 7331698, 7335284, 7335544, 2, 7304812, 7307119, 1, 7305057, 1, 7305314, 2, 7305577, 7306348, 1, 7305827, 1, 7306099, 1, 7306597, 1, 7306796, 1, 7307380, 1, 7307625, 2, 7308130, 7321197, 1, 7308399, 1, 7308652, 2, 7308845, 7320947, 9, 7309105, 7311922, 7314483, 7316276, 7318325, 7319862, 7320119, 7320376, 7320633, 10, 7309360, 7309617, 7309874, 7310131, 7310388, 7310645, 7310902, 7311159, 7311416, 7311673, 9, 7312176, 7312433, 7312690, 7312947, 7313204, 7313461, 7313718, 7313975, 7314233, 6, 7314736, 7314994, 7315254, 7315511, 7315768, 7316025, 7, 7316528, 7316786, 7317043, 7317301, 7317559, 7317816, 7318073, 5, 7318576, 7318833, 7319090, 7319347, 7319604, 1, 7321445, 1, 7321716, 1, 7321970, 2, 7322217, 7322745, 1, 7322467, 4, 7323233, 7325795, 7327844, 7329381, 2, 7323494, 7324007, 1, 7323753, 2, 7324269, 7324783, 1, 7324513, 1, 7325031, 1, 7325301, 1, 7325541, 1, 7326056, 1, 7326322, 1, 7326575, 1, 7326830, 1, 7327087, 1, 7327349, 1, 7327603, 1, 7328101, 1, 7328371, 1, 7328621, 1, 7328879, 1, 7329139, 1, 7329654, 1, 7329901, 1, 7330145, 1, 7330677, 1, 7330935, 1, 7331169, 3, 7331945, 7333485, 7335032, 2, 7332193, 7332718, 1, 7332451, 1, 7332967, 1, 7333221, 1, 7333729, 1, 7334004, 1, 7334249, 1, 7334507, 1, 7334761, 8, 7336033, 7336549, 7337065, 7337324, 7338095, 7338357, 7338615, 7339386, 1, 7336289, 1, 7336805, 1, 7337577, 1, 7337831, 2, 7338849, 7339111, 24, 7339821, 7342128, 7354721, 7398754, 7399523, 7403364, 7404133, 7458150, 7458664, 7530601, 7579242, 7579756, 7584878, 7585135, 7628656, 7629938, 7723123, 7736180, 7747701, 7771766, 7774583, 7806584, 7808633, 7813498, 2, 7340146, 7340915, 1, 7340389, 1, 7340664, 1, 7341160, 1, 7341417, 1, 7341682, 1, 7341940, 4, 7342384, 7345969, 7349298, 7352115, 9, 7342641, 7342898, 7343155, 7343668, 7343925, 7344182, 7344439, 7344952, 7345465, 1, 7343457, 1, 7344737, 1, 7345249, 1, 7345761, 10, 7346224, 7346481, 7346994, 7347251, 7347508, 7347765, 7348022, 7348535, 7348792, 7349049, 1, 7346785, 1, 7348321, 10, 7349552, 7349809, 7350066, 7350323, 7350580, 7350837, 7351094, 7351351, 7351608, 7351865, 7, 7352368, 7352625, 7352882, 7353395, 7353908, 7354165, 7354422, 1, 7353185, 1, 7353697, 24, 7354925, 7356978, 7357281, 7360610, 7363427, 7364197, 7364711, 7367272, 7368297, 7371371, 7374956, 7377517, 7379310, 7384175, 7384432, 7385201, 7385458, 7388531, 7389300, 7391861, 7393142, 7394679, 7396984, 7397497, 5, 7355185, 7355442, 7355699, 7355956, 7356274, 1, 7356527, 1, 7356780, 6, 7357542, 7357801, 7358060, 7359085, 7359345, 7359603, 1, 7358325, 1, 7358570, 1, 7358817, 1, 7359848, 1, 7360097, 1, 7360357, 3, 7360876, 7361395, 7361653, 1, 7361125, 1, 7361900, 1, 7362145, 1, 7362420, 1, 7362665, 1, 7362927, 1, 7363182, 2, 7363691, 7363951, 1, 7364462, 2, 7364961, 7365986, 1, 7365228, 1, 7365487, 1, 7365735, 1, 7366241, 1, 7366510, 1, 7366775, 1, 7367009, 1, 7367521, 1, 7367788, 1, 7368033, 2, 7368556, 7370355, 2, 7368805, 7369324, 1, 7369060, 1, 7369573, 1, 7369843, 1, 7370099, 1, 7370617, 1, 7370863, 1, 7371125, 4, 7371572, 7371877, 7372904, 7374450, 1, 7372143, 1, 7372405, 1, 7372660, 1, 7373153, 1, 7373420, 1, 7373676, 1, 7373941, 1, 7374195, 1, 7374697, 3, 7375205, 7376233, 7377004, 1, 7375470, 1, 7375732, 1, 7375987, 1, 7376494, 1, 7376743, 1, 7377273, 2, 7377761, 7378281, 1, 7378030, 2, 7378540, 7378798, 1, 7379047, 3, 7379553, 7380839, 7383406, 1, 7379810, 1, 7380065, 1, 7380340, 1, 7380577, 2, 7381093, 7382901, 2, 7381358, 7381874, 1, 7381620, 1, 7382121, 1, 7382382, 1, 7382629, 1, 7383156, 1, 7383653, 1, 7383908, 1, 7384677, 1, 7384946, 3, 7385703, 7386484, 7387765, 1, 7385957, 1, 7386228, 1, 7386721, 1, 7386994, 1, 7387181, 1, 7387442, 1, 7388014, 1, 7388263, 1, 7388787, 1, 7389033, 2, 7389556, 7390839, 1, 7389807, 1, 7390063, 1, 7390309, 1, 7390564, 1, 7391077, 1, 7391333, 1, 7391596, 2, 7392109, 7392370, 1, 7392629, 1, 7392883, 1, 7393385, 1, 7393657, 1, 7393889, 1, 7394158, 1, 7394409, 2, 7394913, 7395173, 1, 7395436, 1, 7395692, 1, 7395941, 1, 7396205, 1, 7396453, 1, 7396724, 1, 7397225, 1, 7397729, 1, 7397998, 1, 7398254, 1, 7398497, 1, 7399026, 1, 7399275, 4, 7399777, 7400805, 7401832, 7403129, 1, 7400050, 1, 7400303, 1, 7400558, 1, 7401060, 1, 7401321, 1, 7401580, 1, 7402085, 1, 7402344, 1, 7402597, 1, 7402856, 1, 7403631, 1, 7403892, 18, 7404333, 7407201, 7415652, 7417189, 7418983, 7419752, 7420521, 7421291, 7421548, 7432045, 7433582, 7438704, 7438962, 7441267, 7444084, 7453557, 7456886, 7457656, 10, 7404593, 7404850, 7405107, 7405364, 7405621, 7405878, 7406135, 7406392, 7406649, 7406965, 2, 7407459, 7408242, 1, 7407733, 1, 7407984, 3, 7408429, 7409508, 7415411, 1, 7408751, 1, 7408998, 1, 7409254, 1, 7409778, 1, 7410031, 1, 7410288, 1, 7410477, 2, 7410786, 7412339, 1, 7411041, 1, 7411314, 1, 7411554, 1, 7411813, 1, 7412068, 2, 7412584, 7414128, 1, 7412833, 1, 7413102, 1, 7413355, 1, 7413605, 1, 7413860, 1, 7414383, 1, 7414635, 1, 7414885, 1, 7415140, 2, 7415908, 7416437, 1, 7416185, 1, 7416686, 1, 7416935, 3, 7417445, 7417966, 7418484, 1, 7417701, 1, 7418227, 1, 7418728, 1, 7419237, 1, 7419496, 1, 7420005, 1, 7420264, 1, 7420791, 1, 7421043, 6, 7421797, 7427945, 7428972, 7429743, 7430514, 7431285, 5, 7422055, 7423337, 7423856, 7425139, 7426422, 1, 7422322, 1, 7422561, 1, 7422832, 1, 7423080, 1, 7423585, 1, 7424104, 1, 7424367, 1, 7424622, 1, 7424869, 1, 7425379, 1, 7425647, 1, 7425904, 1, 7426149, 1, 7426665, 1, 7426931, 1, 7427177, 1, 7427439, 1, 7427694, 1, 7428211, 1, 7428456, 1, 7428705, 1, 7429221, 1, 7429490, 1, 7430005, 1, 7430259, 1, 7430757, 1, 7431011, 1, 7431527, 1, 7431797, 1, 7432304, 2, 7432556, 7433077, 1, 7432805, 1, 7433331, 6, 7433773, 7435623, 7436142, 7436915, 7437428, 7437941, 1, 7434100, 1, 7434344, 1, 7434601, 1, 7434866, 1, 7435124, 1, 7435385, 1, 7435877, 1, 7436393, 1, 7436659, 1, 7437157, 1, 7437672, 1, 7438196, 1, 7438447, 1, 7439213, 1, 7439465, 1, 7439726, 1, 7439969, 2, 7440236, 7440500, 1, 7440751, 1, 7441010, 3, 7441512, 7441779, 7443828, 2, 7442017, 7443045, 1, 7442290, 1, 7442543, 1, 7442798, 1, 7443314, 1, 7443553, 3, 7444321, 7447400, 7447666, 1, 7444594, 1, 7444852, 2, 7445097, 7446895, 1, 7445357, 1, 7445615, 1, 7445874, 1, 7446121, 1, 7446383, 1, 7446638, 1, 7447155, 1, 7447905, 4, 7448166, 7449703, 7450736, 7451507, 1, 7448431, 1, 7448686, 1, 7448937, 1, 7449185, 1, 7449459, 1, 7449970, 1, 7450209, 1, 7450477, 1, 7450988, 1, 7451241, 2, 7451749, 7452521, 1, 7452013, 1, 7452261, 1, 7452781, 1, 7453039, 1, 7453301, 3, 7453793, 7454830, 7455092, 1, 7454053, 2, 7454318, 7454577, 1, 7455333, 1, 7455605, 2, 7455863, 7456632, 1, 7456101, 1, 7456366, 1, 7457129, 1, 7457394, 1, 7457908, 1, 7458418, 11, 7458861, 7460193, 7467109, 7480169, 7496811, 7498351, 7502962, 7521909, 7527031, 7529337, 7530362, 1, 7459171, 1, 7459442, 1, 7459685, 1, 7459941, 8, 7460449, 7461736, 7462505, 7462762, 7463020, 7463277, 7464302, 7466871, 2, 7460716, 7461230, 1, 7460981, 1, 7461473, 1, 7461985, 1, 7462254, 1, 7463525, 1, 7463780, 1, 7464040, 2, 7464558, 7465076, 1, 7464801, 1, 7465320, 1, 7465569, 1, 7465835, 1, 7466088, 1, 7466337, 1, 7466612, 9, 7467361, 7467621, 7467880, 7468141, 7470190, 7470450, 7475827, 7477876, 7479929, 1, 7468385, 1, 7468660, 1, 7468905, 1, 7469171, 1, 7469421, 1, 7469679, 1, 7469939, 2, 7470693, 7472237, 2, 7470900, 7471206, 1, 7471471, 1, 7471730, 1, 7471973, 1, 7472495, 2, 7472740, 7474541, 1, 7473017, 1, 7473262, 1, 7473505, 1, 7473773, 1, 7474025, 1, 7474275, 1, 7474789, 1, 7475060, 1, 7475301, 1, 7475570, 2, 7476069, 7476848, 1, 7476335, 1, 7476595, 1, 7477097, 1, 7477345, 1, 7477614, 2, 7478113, 7479400, 2, 7478387, 7479158, 1, 7478649, 1, 7478893, 1, 7479653, 9, 7480417, 7480931, 7483749, 7484775, 7485289, 7485550, 7488370, 7495540, 7496053, 1, 7480674, 1, 7481195, 2, 7481441, 7482995, 1, 7481712, 1, 7481968, 1, 7482226, 1, 7482479, 1, 7482744, 1, 7483241, 1, 7483501, 1, 7484021, 1, 7484276, 1, 7484520, 1, 7485032, 3, 7485799, 7486059, 7487091, 1, 7486313, 1, 7486574, 1, 7486823, 1, 7487344, 1, 7487585, 1, 7487843, 1, 7488101, 2, 7488612, 7490676, 2, 7488813, 7490419, 1, 7489139, 1, 7489396, 1, 7489633, 1, 7489895, 1, 7490149, 2, 7490917, 7491705, 1, 7491173, 1, 7491438, 1, 7491885, 3, 7492198, 7493231, 7494003, 1, 7492457, 1, 7492726, 1, 7492965, 1, 7493486, 1, 7493733, 1, 7494245, 1, 7494499, 1, 7494767, 1, 7495022, 1, 7495268, 1, 7495777, 1, 7496308, 1, 7496552, 2, 7497057, 7497587, 1, 7497328, 1, 7497833, 1, 7498093, 7, 7498593, 7498858, 7499117, 7499374, 7499887, 7500146, 7500661, 1, 7499623, 1, 7500398, 2, 7500903, 7501683, 1, 7501160, 1, 7501428, 1, 7501921, 1, 7502190, 1, 7502436, 1, 7502707, 2, 7503205, 7519855, 2, 7503457, 7503973, 1, 7503716, 1, 7504173, 8, 7504483, 7506020, 7506789, 7507304, 7512684, 7514992, 7516529, 7518324, 1, 7504745, 1, 7505010, 1, 7505251, 1, 7505516, 1, 7505765, 1, 7506287, 1, 7506548, 1, 7507053, 1, 7507573, 1, 7507822, 1, 7508068, 1, 7508338, 1, 7508581, 1, 7508836, 1, 7509037, 1, 7509345, 1, 7509614, 1, 7509860, 1, 7510061, 1, 7510388, 1, 7510647, 1, 7510885, 1, 7511150, 1, 7511412, 1, 7511657, 1, 7511909, 1, 7512180, 1, 7512424, 2, 7512933, 7514217, 1, 7513191, 1, 7513447, 1, 7513701, 1, 7513956, 1, 7514478, 1, 7514725, 1, 7515237, 1, 7515506, 1, 7515693, 1, 7516005, 1, 7516269, 1, 7516789, 1, 7517025, 1, 7517298, 1, 7517556, 1, 7517797, 1, 7518066, 1, 7518568, 1, 7518825, 1, 7519090, 1, 7519348, 1, 7519609, 2, 7520117, 7520887, 1, 7520359, 1, 7520616, 1, 7521129, 1, 7521390, 1, 7521639, 3, 7522157, 7522926, 7525490, 1, 7522402, 1, 7522675, 2, 7523172, 7525223, 1, 7523429, 1, 7523698, 1, 7523955, 1, 7524212, 1, 7524463, 1, 7524722, 1, 7524973, 2, 7525737, 7526771, 1, 7526003, 1, 7526241, 1, 7526522, 4, 7527265, 7527781, 7528297, 7528815, 1, 7527521, 1, 7528037, 1, 7528553, 1, 7529071, 1, 7529583, 1, 7529839, 1, 7530093, 18, 7530797, 7532850, 7533153, 7533922, 7535203, 7536485, 7537254, 7538791, 7542377, 7542635, 7556716, 7563885, 7565934, 7569776, 7571314, 7575668, 7577719, 7579000, 7, 7531057, 7531314, 7531571, 7531828, 7532085, 7532342, 7532599, 1, 7533426, 1, 7533665, 1, 7534181, 1, 7534452, 1, 7534689, 1, 7534958, 1, 7535467, 1, 7535717, 1, 7535988, 1, 7536243, 2, 7536752, 7537016, 1, 7537513, 1, 7537774, 1, 7538017, 1, 7538279, 1, 7538536, 2, 7539045, 7539560, 1, 7539314, 1, 7539828, 1, 7540076, 1, 7540345, 1, 7540525, 1, 7540835, 1, 7541100, 1, 7541359, 1, 7541619, 1, 7541861, 1, 7542116, 1, 7542885, 1, 7543157, 1, 7543412, 1, 7543597, 7, 7543907, 7546731, 7548269, 7549552, 7550834, 7552115, 7554932, 2, 7544168, 7545705, 1, 7544425, 1, 7544677, 1, 7544949, 1, 7545187, 1, 7545448, 1, 7545957, 1, 7546229, 1, 7546467, 1, 7546985, 1, 7547257, 1, 7547493, 1, 7547759, 1, 7548011, 1, 7548521, 1, 7548773, 1, 7549045, 1, 7549293, 1, 7549801, 1, 7550053, 1, 7550325, 1, 7550576, 1, 7551081, 1, 7551333, 1, 7551605, 1, 7551852, 1, 7552361, 1, 7552623, 1, 7552883, 1, 7553069, 1, 7553387, 1, 7553641, 1, 7553913, 1, 7554149, 1, 7554415, 1, 7554667, 1, 7555176, 1, 7555433, 1, 7555685, 1, 7555957, 1, 7556212, 1, 7556456, 3, 7556964, 7562341, 7562868, 1, 7557221, 3, 7557477, 7558758, 7561076, 1, 7557745, 1, 7558005, 1, 7558241, 1, 7558508, 1, 7559029, 1, 7559276, 1, 7559532, 1, 7559781, 1, 7560049, 1, 7560309, 1, 7560545, 1, 7560812, 1, 7561321, 1, 7561580, 1, 7561828, 1, 7562085, 1, 7562611, 1, 7563113, 1, 7563374, 1, 7563623, 1, 7564133, 2, 7564402, 7564659, 2, 7564898, 7565668, 1, 7565153, 1, 7565426, 6, 7566177, 7567203, 7568487, 7568750, 7569268, 7569529, 1, 7566439, 1, 7566701, 1, 7566945, 1, 7567476, 1, 7567733, 1, 7567986, 1, 7568229, 1, 7568997, 2, 7570021, 7570800, 1, 7570280, 1, 7570529, 1, 7571049, 5, 7571557, 7572072, 7573103, 7574388, 7574905, 1, 7571812, 1, 7572341, 1, 7572596, 1, 7572833, 1, 7573358, 1, 7573609, 1, 7573857, 1, 7574126, 1, 7574625, 1, 7575137, 1, 7575403, 3, 7575905, 7576172, 7576693, 1, 7576431, 1, 7576929, 1, 7577189, 1, 7577456, 3, 7577953, 7578478, 7578738, 1, 7578234, 1, 7579493, 7, 7580001, 7580261, 7580776, 7583849, 7584111, 7584373, 7584630, 1, 7580517, 7, 7581025, 7581285, 7581801, 7582063, 7582581, 7582839, 7583353, 1, 7581541, 1, 7582319, 1, 7583077, 1, 7583585, 20, 7585325, 7587681, 7589988, 7590501, 7591015, 7592553, 7593579, 7594348, 7595373, 7596910, 7603311, 7605360, 7610737, 7610994, 7620723, 7621236, 7622005, 7626358, 7626615, 7628408, 7, 7585585, 7585842, 7586099, 7586356, 7586613, 7586870, 7587186, 1, 7587425, 1, 7587950, 1, 7588196, 1, 7588449, 1, 7588715, 1, 7588968, 1, 7589225, 1, 7589473, 1, 7589748, 1, 7590255, 1, 7590753, 1, 7591269, 1, 7591540, 1, 7591784, 1, 7592037, 1, 7592306, 1, 7592812, 1, 7593061, 1, 7593332, 1, 7593849, 1, 7594095, 1, 7594607, 1, 7594862, 1, 7595111, 2, 7595617, 7596400, 1, 7595892, 1, 7596143, 1, 7596649, 4, 7597153, 7597669, 7602023, 7602799, 1, 7597420, 1, 7597869, 15, 7598129, 7598386, 7598643, 7598900, 7599157, 7599414, 7599671, 7599928, 7600226, 7600484, 7600743, 7601002, 7601261, 7601523, 7601782, 1, 7602293, 1, 7602533, 1, 7603059, 3, 7603564, 7604590, 7604852, 1, 7603810, 1, 7604079, 1, 7604344, 1, 7605096, 4, 7605549, 7607650, 7608931, 7609702, 1, 7605868, 1, 7606121, 1, 7606375, 1, 7606632, 1, 7606900, 1, 7607141, 1, 7607396, 2, 7607905, 7608431, 1, 7608178, 1, 7608692, 1, 7609193, 1, 7609458, 1, 7609967, 1, 7610226, 1, 7610475, 4, 7611235, 7612782, 7613811, 7619444, 2, 7611496, 7611765, 1, 7612012, 1, 7612277, 1, 7612531, 1, 7613025, 1, 7613284, 1, 7613551, 1, 7614063, 1, 7614253, 2, 7614566, 7617143, 1, 7614828, 1, 7615087, 1, 7615343, 1, 7615602, 1, 7615856, 1, 7616108, 1, 7616353, 1, 7616622, 1, 7616869, 1, 7617377, 1, 7617644, 1, 7617900, 1, 7618160, 1, 7618412, 1, 7618657, 1, 7618926, 1, 7619173, 1, 7619695, 1, 7619945, 1, 7620211, 1, 7620453, 1, 7620961, 1, 7621473, 1, 7621740, 2, 7622243, 7625074, 1, 7622504, 3, 7622757, 7623273, 7624052, 1, 7623027, 1, 7623534, 1, 7623783, 1, 7624303, 1, 7624558, 1, 7624805, 1, 7625326, 1, 7625583, 1, 7625833, 1, 7626099, 2, 7626849, 7627877, 1, 7627122, 1, 7627364, 1, 7627635, 1, 7628146, 1, 7628914, 1, 7629161, 1, 7629421, 1, 7629669, 7, 7630177, 7653221, 7660393, 7692911, 7710064, 7711605, 7721593, 9, 7630435, 7632740, 7635046, 7636073, 7637613, 7638638, 7645552, 7647094, 7652985, 2, 7630699, 7631988, 1, 7630946, 1, 7631201, 1, 7631468, 1, 7631724, 1, 7632239, 1, 7632498, 2, 7632997, 7633257, 1, 7633524, 1, 7633769, 1, 7634031, 1, 7634286, 1, 7634529, 1, 7634796, 1, 7635302, 1, 7635561, 1, 7635811, 2, 7636332, 7637358, 1, 7636585, 1, 7636846, 1, 7637095, 1, 7637879, 1, 7638113, 1, 7638393, 1, 7638899, 3, 7639149, 7640944, 7644022, 1, 7639401, 1, 7639667, 1, 7639923, 1, 7640169, 1, 7640431, 1, 7640686, 2, 7641196, 7642223, 1, 7641461, 1, 7641716, 1, 7641967, 1, 7642483, 1, 7642729, 1, 7642996, 1, 7643241, 1, 7643503, 1, 7643758, 1, 7644261, 1, 7644530, 1, 7644787, 1, 7645025, 1, 7645292, 1, 7645797, 1, 7646074, 1, 7646313, 1, 7646581, 1, 7646829, 1, 7647333, 1, 7647596, 1, 7647789, 2, 7648102, 7650679, 1, 7648364, 1, 7648623, 1, 7648879, 1, 7649138, 1, 7649392, 1, 7649644, 1, 7649889, 1, 7650158, 1, 7650405, 1, 7650913, 1, 7651180, 1, 7651436, 1, 7651696, 1, 7651948, 1, 7652193, 1, 7652462, 1, 7652709, 6, 7653473, 7654756, 7656293, 7656557, 7658606, 7659123, 1, 7653732, 1, 7653993, 1, 7654254, 1, 7654503, 1, 7655013, 1, 7655267, 1, 7655529, 1, 7655788, 1, 7656037, 1, 7656815, 1, 7657068, 1, 7657327, 1, 7657517, 3, 7657777, 7658034, 7658291, 1, 7658852, 1, 7659369, 1, 7659628, 1, 7659884, 1, 7660143, 14, 7660641, 7670627, 7671908, 7673445, 7673702, 7676519, 7679593, 7680620, 7682157, 7683439, 7683952, 7686771, 7689076, 7691893, 1, 7660910, 1, 7661159, 2, 7661420, 7669621, 1, 7661669, 5, 7661869, 7664996, 7666028, 7667569, 7667826, 2, 7662184, 7663730, 1, 7662437, 1, 7662689, 1, 7662948, 1, 7663205, 1, 7663460, 1, 7663983, 1, 7664245, 1, 7664494, 1, 7664740, 1, 7665263, 1, 7665527, 1, 7665774, 1, 7666277, 1, 7666534, 1, 7666804, 1, 7667045, 1, 7667313, 1, 7668073, 1, 7668327, 1, 7668584, 1, 7668852, 1, 7669093, 1, 7669361, 1, 7669868, 1, 7670113, 1, 7670386, 1, 7670895, 1, 7671148, 1, 7671407, 1, 7671662, 2, 7672165, 7672943, 1, 7672430, 1, 7672692, 1, 7673204, 1, 7673967, 2, 7674220, 7675502, 1, 7674473, 1, 7674721, 1, 7674996, 1, 7675237, 1, 7675753, 1, 7676001, 1, 7676275, 2, 7676783, 7678066, 1, 7677042, 1, 7677287, 1, 7677551, 1, 7677806, 1, 7678305, 1, 7678573, 1, 7678829, 1, 7679087, 1, 7679347, 1, 7679859, 1, 7680097, 1, 7680368, 1, 7680876, 1, 7681129, 1, 7681391, 1, 7681646, 1, 7681907, 1, 7682409, 1, 7682670, 1, 7682933, 1, 7683187, 1, 7683694, 2, 7684204, 7686255, 3, 7684453, 7685481, 7685749, 1, 7684708, 1, 7684975, 1, 7685236, 1, 7686003, 1, 7686500, 3, 7687010, 7687269, 7688041, 1, 7687533, 1, 7687781, 1, 7688301, 1, 7688559, 1, 7688821, 2, 7689321, 7691375, 1, 7689581, 2, 7689829, 7690095, 1, 7690354, 1, 7690601, 1, 7690863, 1, 7691118, 1, 7691635, 1, 7692141, 1, 7692400, 1, 7692648, 5, 7693157, 7694955, 7696748, 7698541, 7708272, 1, 7693434, 1, 7693669, 1, 7693934, 1, 7694185, 1, 7694433, 1, 7694702, 1, 7695221, 1, 7695476, 1, 7695713, 1, 7695987, 1, 7696244, 1, 7696489, 1, 7697004, 1, 7697253, 1, 7697529, 1, 7697762, 1, 7698037, 1, 7698291, 1, 7698793, 1, 7699051, 1, 7699311, 4, 7699564, 7701358, 7701616, 7706483, 1, 7699833, 1, 7700071, 1, 7700329, 1, 7700595, 1, 7700845, 1, 7701089, 2, 7701857, 7704435, 1, 7702130, 1, 7702369, 1, 7702635, 1, 7702881, 1, 7703148, 1, 7703397, 1, 7703667, 1, 7703917, 1, 7704161, 1, 7704681, 1, 7704934, 1, 7705193, 1, 7705459, 1, 7705716, 1, 7705967, 1, 7706222, 1, 7706745, 1, 7706990, 1, 7707233, 1, 7707495, 1, 7707757, 1, 7708001, 2, 7708520, 7709033, 1, 7708793, 1, 7709283, 1, 7709537, 1, 7709804, 1, 7710309, 1, 7710586, 1, 7710825, 1, 7711093, 1, 7711341, 5, 7711843, 7712357, 7712621, 7719278, 7721076, 1, 7712107, 1, 7712880, 2, 7713069, 7718757, 9, 7713329, 7716146, 7716915, 7717172, 7717429, 7717686, 7717943, 7718200, 7718457, 10, 7713584, 7713841, 7714098, 7714355, 7714612, 7714869, 7715126, 7715383, 7715640, 7715897, 2, 7716400, 7716657, 1, 7719028, 2, 7719523, 7720811, 1, 7719777, 1, 7720052, 1, 7720293, 1, 7720548, 1, 7721320, 1, 7721826, 1, 7722092, 1, 7722345, 1, 7722607, 1, 7722862, 11, 7723361, 7725411, 7726181, 7727464, 7731817, 7732335, 7732851, 7733620, 7734645, 7734902, 7735159, 3, 7723617, 7724642, 7724900, 1, 7723876, 1, 7724137, 1, 7724409, 1, 7725161, 2, 7725682, 7725945, 2, 7726437, 7726962, 1, 7726690, 1, 7727205, 5, 7727713, 7728227, 7728741, 7730031, 7731061, 1, 7727970, 1, 7728505, 3, 7728997, 7729511, 7729779, 1, 7729258, 1, 7730287, 2, 7730538, 7730795, 1, 7731303, 1, 7731571, 1, 7732085, 1, 7732598, 2, 7733089, 7733349, 1, 7733874, 1, 7734127, 1, 7734379, 3, 7735393, 7735650, 7735909, 9, 7736370, 7736673, 7738469, 7739752, 7742569, 7742831, 7743091, 7744884, 7745909, 2, 7736929, 7737209, 1, 7737441, 1, 7737710, 1, 7737966, 1, 7738209, 2, 7738725, 7738984, 1, 7739237, 1, 7739496, 6, 7740001, 7740517, 7741033, 7741295, 7741813, 7742071, 1, 7740257, 1, 7740773, 1, 7741551, 1, 7742309, 5, 7743329, 7743589, 7744105, 7744367, 7744629, 1, 7743845, 2, 7745121, 7745384, 1, 7745633, 1, 7746148, 1, 7746404, 1, 7746657, 2, 7746913, 7747431, 1, 7747175, 14, 7747885, 7749729, 7751266, 7751783, 7753067, 7754860, 7755629, 7758446, 7759215, 7760240, 7761010, 7767668, 7769973, 7770744, 5, 7748145, 7748402, 7748659, 7748916, 7749236, 1, 7749487, 2, 7749989, 7750514, 1, 7750256, 1, 7750757, 1, 7751015, 1, 7751525, 2, 7751986, 7752306, 1, 7752553, 1, 7752811, 1, 7753335, 1, 7753573, 1, 7753838, 1, 7754100, 1, 7754345, 1, 7754611, 1, 7755113, 1, 7755376, 3, 7755873, 7756386, 7757413, 1, 7756133, 1, 7756652, 1, 7756901, 1, 7757170, 1, 7757684, 1, 7757925, 1, 7758195, 1, 7758702, 1, 7758969, 3, 7759472, 7759732, 7759992, 1, 7760494, 1, 7760745, 7, 7761250, 7762027, 7763822, 7765871, 7766388, 7767157, 7767416, 1, 7761505, 1, 7761774, 2, 7762277, 7762793, 1, 7762553, 2, 7763043, 7763315, 1, 7763560, 2, 7764069, 7764595, 1, 7764324, 1, 7764852, 1, 7765097, 1, 7765356, 1, 7765605, 1, 7766066, 1, 7766636, 1, 7766885, 2, 7767909, 7769460, 1, 7768185, 1, 7768417, 1, 7768691, 1, 7768929, 1, 7769204, 1, 7769721, 1, 7770221, 1, 7770485, 1, 7770981, 1, 7771236, 1, 7771503, 2, 7772009, 7773554, 1, 7772269, 1, 7772513, 1, 7772772, 1, 7773045, 1, 7773298, 1, 7773801, 1, 7774052, 1, 7774319, 4, 7774817, 7775333, 7790185, 7793007, 1, 7775073, 2, 7775596, 7779182, 2, 7775846, 7776886, 1, 7776116, 1, 7776360, 1, 7776627, 1, 7777125, 1, 7777325, 1, 7777652, 1, 7777896, 1, 7778153, 1, 7778418, 1, 7778676, 1, 7778937, 1, 7779444, 2, 7779689, 7780985, 1, 7779941, 1, 7780212, 1, 7780456, 1, 7780723, 1, 7781165, 6, 7781477, 7783014, 7784814, 7785839, 7786611, 7788404, 1, 7781737, 1, 7781991, 1, 7782248, 1, 7782516, 1, 7782760, 2, 7783273, 7784047, 1, 7783542, 1, 7783781, 1, 7784309, 1, 7784562, 1, 7785065, 1, 7785326, 1, 7785573, 1, 7786094, 1, 7786341, 2, 7786853, 7787881, 1, 7787126, 1, 7787365, 1, 7787630, 1, 7788152, 2, 7788648, 7789687, 1, 7788914, 1, 7789157, 1, 7789413, 1, 7789935, 3, 7790441, 7790707, 7792504, 1, 7790964, 2, 7791205, 7791721, 1, 7791460, 1, 7791982, 1, 7792231, 1, 7792756, 3, 7793197, 7800424, 7806319, 6, 7793507, 7795045, 7795560, 7797100, 7798132, 7799671, 1, 7793769, 1, 7794034, 1, 7794275, 1, 7794540, 1, 7794789, 1, 7795309, 1, 7795813, 1, 7796065, 1, 7796324, 1, 7796581, 1, 7796836, 1, 7797353, 1, 7797614, 1, 7797861, 1, 7798376, 1, 7798633, 1, 7798898, 1, 7799156, 1, 7799417, 1, 7799905, 1, 7800185, 1, 7800677, 1, 7800929, 1, 7801188, 2, 7801452, 7803762, 1, 7801701, 1, 7801958, 1, 7802228, 1, 7802465, 1, 7802738, 1, 7802994, 1, 7803247, 1, 7803511, 1, 7804009, 1, 7804263, 1, 7804520, 1, 7804788, 1, 7805025, 1, 7805298, 1, 7805554, 1, 7805807, 1, 7806071, 3, 7806817, 7807080, 7808119, 1, 7807333, 1, 7807589, 1, 7807850, 1, 7808374, 6, 7808865, 7809381, 7809641, 7809903, 7810160, 7813234, 1, 7809145, 1, 7810405, 1, 7810605, 7, 7810865, 7811634, 7811891, 7812148, 7812405, 7812662, 7812919, 1, 7811117, 1, 7811378, 5, 7813729, 7814245, 7814761, 7815279, 7815797, 1, 7813985, 1, 7814501, 1, 7815026, 1, 7815521, 25, 7816237, 7822896, 7836466, 7836769, 7840610, 7846499, 7847780, 7852389, 7853926, 7855463, 7858280, 7860585, 7863403, 7866476, 7870061, 7873902, 7903343, 7905392, 7940722, 7948403, 7953268, 7956853, 7960951, 7962745, 7964026, 11, 7816497, 7816754, 7817011, 7817268, 7817525, 7817825, 7818341, 7819625, 7820403, 7821941, 7822201, 1, 7818085, 1, 7818607, 1, 7818797, 1, 7819109, 1, 7819381, 1, 7819821, 1, 7820137, 1, 7820648, 1, 7820897, 1, 7821168, 1, 7821413, 1, 7821668, 1, 7822437, 1, 7822703, 5, 7823152, 7826225, 7829042, 7832371, 7835444, 9, 7823409, 7823666, 7823923, 7824180, 7824437, 7824694, 7825463, 7825720, 7825977, 2, 7824993, 7825250, 10, 7826480, 7826737, 7826994, 7827251, 7827508, 7827765, 7828022, 7828279, 7828536, 7828793, 10, 7829296, 7829553, 7829810, 7830067, 7830580, 7830837, 7831094, 7831351, 7831608, 7831865, 1, 7830369, 1, 7832161, 10, 7832624, 7832881, 7833138, 7833651, 7833908, 7834165, 7834422, 7834679, 7834936, 7835193, 1, 7833441, 3, 7835696, 7835953, 7836210, 4, 7837027, 7838062, 7838578, 7840116, 1, 7837301, 1, 7837556, 1, 7837797, 1, 7838311, 1, 7838834, 1, 7839087, 1, 7839331, 1, 7839593, 1, 7839858, 1, 7840360, 4, 7840865, 7842152, 7843698, 7845237, 1, 7841124, 1, 7841377, 1, 7841645, 1, 7841889, 1, 7842401, 1, 7842681, 1, 7842913, 1, 7843188, 1, 7843439, 2, 7843939, 7844453, 1, 7844217, 1, 7844726, 1, 7844965, 1, 7845478, 1, 7845737, 1, 7845996, 1, 7846249, 2, 7846761, 7847545, 1, 7847026, 1, 7847267, 4, 7848033, 7850082, 7851112, 7851893, 3, 7848289, 7848818, 7849332, 1, 7848564, 1, 7849074, 1, 7849588, 1, 7849825, 1, 7850348, 1, 7850593, 1, 7850851, 1, 7851361, 1, 7851634, 1, 7852135, 5, 7852641, 7852901, 7853161, 7853422, 7853689, 2, 7854185, 7855218, 1, 7854451, 1, 7854696, 1, 7854964, 2, 7855713, 7857266, 1, 7855986, 1, 7856233, 1, 7856500, 1, 7856745, 1, 7856995, 1, 7857505, 1, 7857782, 1, 7858021, 3, 7858529, 7859554, 7860324, 1, 7858802, 2, 7859052, 7859314, 1, 7859820, 1, 7860075, 2, 7860839, 7861868, 1, 7861096, 1, 7861365, 1, 7861618, 1, 7862124, 1, 7862373, 1, 7862625, 1, 7862894, 1, 7863150, 3, 7863649, 7864434, 7866229, 1, 7863922, 1, 7864161, 1, 7864673, 1, 7864937, 1, 7865198, 1, 7865449, 1, 7865697, 1, 7865966, 3, 7866723, 7869044, 7869813, 2, 7866991, 7868274, 1, 7867250, 1, 7867502, 1, 7867749, 1, 7868018, 1, 7868527, 1, 7868784, 1, 7869298, 1, 7869545, 4, 7870305, 7871074, 7873132, 7873397, 1, 7870563, 1, 7870834, 2, 7871337, 7871858, 1, 7871598, 1, 7872101, 1, 7872364, 1, 7872620, 1, 7872865, 1, 7873645, 10, 7874145, 7877986, 7879779, 7882596, 7891557, 7892583, 7892841, 7900011, 7901293, 7903086, 3, 7874413, 7875696, 7875955, 1, 7874677, 1, 7874931, 1, 7875173, 1, 7875428, 1, 7876208, 1, 7876457, 1, 7876722, 1, 7876961, 1, 7877236, 1, 7877477, 1, 7877732, 1, 7878252, 1, 7878501, 1, 7878766, 1, 7879012, 1, 7879269, 1, 7879524, 2, 7880037, 7882089, 1, 7880306, 1, 7880564, 1, 7880801, 1, 7881065, 1, 7881326, 1, 7881588, 1, 7881849, 1, 7882337, 2, 7882853, 7891311, 1, 7883122, 5, 7883362, 7885924, 7886700, 7887728, 7890548, 2, 7883617, 7884146, 1, 7883890, 1, 7884385, 1, 7884643, 2, 7884901, 7885163, 1, 7885413, 1, 7885684, 1, 7886191, 1, 7886452, 1, 7886953, 1, 7887214, 1, 7887461, 1, 7887969, 1, 7888242, 1, 7888485, 1, 7888750, 1, 7889012, 1, 7889256, 1, 7889509, 1, 7889779, 1, 7890025, 1, 7890291, 1, 7890793, 1, 7891045, 1, 7891830, 1, 7892069, 1, 7892334, 5, 7893091, 7894118, 7895919, 7897460, 7898486, 1, 7893359, 1, 7893618, 1, 7893870, 2, 7894377, 7895151, 1, 7894629, 1, 7894884, 1, 7895410, 1, 7895661, 1, 7896174, 1, 7896432, 1, 7896684, 1, 7896949, 1, 7897203, 2, 7897701, 7898233, 1, 7897956, 1, 7898725, 1, 7898994, 1, 7899251, 1, 7899489, 1, 7899756, 1, 7900270, 1, 7900527, 1, 7900791, 1, 7901038, 1, 7901537, 1, 7901810, 1, 7902066, 1, 7902313, 1, 7902565, 1, 7902820, 4, 7903591, 7904366, 7904624, 7905144, 1, 7903855, 1, 7904110, 1, 7904870, 12, 7905581, 7907937, 7914340, 7916645, 7919464, 7923564, 7924336, 7929970, 7931251, 7934580, 7937397, 7939447, 1, 7905904, 1, 7906159, 1, 7906409, 1, 7906670, 1, 7906932, 1, 7907177, 1, 7907438, 1, 7907687, 2, 7908196, 7910258, 1, 7908456, 1, 7908717, 1, 7908961, 1, 7909230, 1, 7909481, 1, 7909753, 1, 7909985, 1, 7910514, 1, 7910767, 1, 7911031, 2, 7911266, 7912036, 1, 7911521, 1, 7911794, 1, 7912303, 1, 7912567, 1, 7912814, 1, 7913057, 1, 7913330, 1, 7913586, 1, 7913839, 1, 7914103, 1, 7914607, 1, 7914871, 1, 7915118, 1, 7915361, 1, 7915634, 1, 7915890, 1, 7916143, 1, 7916407, 1, 7916913, 1, 7917173, 1, 7917417, 1, 7917676, 1, 7917929, 1, 7918178, 1, 7918450, 1, 7918697, 1, 7918965, 1, 7919213, 1, 7919713, 1, 7919986, 1, 7920240, 1, 7920495, 1, 7920751, 1, 7921006, 2, 7921260, 7922290, 1, 7921509, 1, 7921766, 1, 7922036, 1, 7922537, 1, 7922791, 1, 7923048, 1, 7923316, 1, 7923829, 1, 7924083, 1, 7924581, 1, 7924850, 2, 7925100, 7927410, 1, 7925349, 1, 7925606, 1, 7925876, 1, 7926113, 1, 7926386, 1, 7926642, 1, 7926895, 1, 7927159, 1, 7927657, 1, 7927911, 1, 7928168, 1, 7928436, 1, 7928673, 1, 7928946, 1, 7929202, 1, 7929455, 1, 7929719, 1, 7930217, 1, 7930471, 1, 7930728, 1, 7930996, 1, 7931497, 3, 7931748, 7933544, 7933804, 1, 7932005, 1, 7932205, 1, 7932516, 1, 7932783, 1, 7933047, 1, 7933294, 1, 7934063, 1, 7934318, 2, 7934821, 7936629, 1, 7935077, 1, 7935329, 1, 7935602, 1, 7935858, 1, 7936111, 1, 7936375, 1, 7936882, 1, 7937134, 1, 7937648, 1, 7937889, 1, 7938162, 1, 7938418, 1, 7938671, 1, 7938935, 1, 7939187, 1, 7939681, 1, 7939954, 1, 7940196, 1, 7940467, 8, 7940914, 7941172, 7941473, 7942499, 7944809, 7946094, 7946356, 7947125, 1, 7941742, 1, 7942005, 1, 7942259, 2, 7942767, 7944050, 1, 7943026, 1, 7943278, 1, 7943525, 1, 7943794, 1, 7944303, 1, 7944560, 2, 7945011, 7945326, 2, 7945573, 7945831, 1, 7946610, 1, 7946857, 3, 7947364, 7947891, 7948154, 1, 7947617, 4, 7948643, 7949157, 7949928, 7952499, 1, 7948914, 2, 7949356, 7949668, 4, 7950130, 7950437, 7951477, 7952248, 1, 7950702, 1, 7950958, 1, 7951201, 1, 7951725, 1, 7951992, 1, 7952757, 1, 7952947, 4, 7953508, 7954281, 7955314, 7956085, 1, 7953775, 1, 7954036, 1, 7954540, 1, 7954788, 1, 7955045, 1, 7955561, 1, 7955814, 1, 7956331, 1, 7956585, 5, 7957089, 7957861, 7958125, 7958645, 7959673, 1, 7957362, 1, 7957618, 1, 7958380, 3, 7958834, 7959091, 7959413, 1, 7959905, 1, 7960174, 1, 7960430, 1, 7960673, 2, 7961185, 7962485, 1, 7961454, 1, 7961703, 1, 7961964, 1, 7962213, 1, 7962977, 1, 7963246, 1, 7963502, 1, 7963745, 3, 7964211, 7964520, 7965813, 1, 7964769, 1, 7965035, 1, 7965291, 1, 7965557, 19, 7966256, 7987553, 8023138, 8024163, 8024676, 8025957, 8070758, 8071528, 8072041, 8098412, 8099439, 8118128, 8119154, 8121203, 8121973, 8126326, 8127607, 8128377, 8129914, 5, 7966512, 7972145, 7976242, 7982899, 7986740, 9, 7966769, 7969330, 7969843, 7970100, 7970357, 7970614, 7970871, 7971640, 7971897, 9, 7967073, 7967330, 7967587, 7967844, 7968101, 7968358, 7968615, 7968872, 7969129, 1, 7969633, 2, 7971169, 7971426, 10, 7972400, 7972657, 7973682, 7974451, 7974708, 7974965, 7975222, 7975479, 7975736, 7975993, 3, 7972961, 7973218, 7973475, 2, 7973985, 7974242, 10, 7976496, 7979825, 7980082, 7980339, 7980852, 7981109, 7981366, 7981623, 7981880, 7982393, 12, 7976801, 7977058, 7977315, 7977572, 7977829, 7978086, 7978343, 7978600, 7978857, 7979114, 7979371, 7979628, 1, 7980641, 1, 7982177, 1, 7982689, 10, 7983152, 7983665, 7984178, 7984435, 7984948, 7985205, 7985462, 7985719, 7986232, 7986489, 1, 7983457, 1, 7983969, 1, 7984737, 1, 7986017, 1, 7986992, 1, 7987297, 16, 7987809, 7988584, 7988841, 7989098, 7989355, 7991404, 7992429, 7995758, 7997040, 7998322, 8018291, 8020340, 8021109, 8021366, 8021624, 8021881, 1, 7988086, 1, 7988341, 1, 7989601, 1, 7989865, 1, 7990137, 1, 7990369, 1, 7990642, 1, 7990881, 1, 7991137, 1, 7991660, 1, 7991909, 1, 7992185, 2, 7992673, 7994736, 1, 7992935, 1, 7993199, 1, 7993453, 1, 7993717, 1, 7993963, 1, 7994216, 1, 7994465, 1, 7994985, 1, 7995250, 1, 7995493, 2, 7996005, 7996263, 1, 7996530, 1, 7996788, 1, 7997295, 1, 7997557, 1, 7997810, 1, 7998067, 10, 7998561, 7999845, 8002409, 8004971, 8006254, 8008048, 8010354, 8011123, 8012404, 8017785, 1, 7998817, 1, 7999083, 1, 7999329, 1, 7999598, 2, 8000105, 8000880, 1, 8000353, 1, 8000617, 1, 8001139, 1, 8001385, 1, 8001644, 1, 8001903, 1, 8002158, 2, 8002657, 8004459, 2, 8002926, 8003444, 1, 8003188, 1, 8003689, 1, 8003951, 1, 8004206, 1, 8004705, 1, 8005217, 1, 8005488, 1, 8005744, 1, 8005985, 1, 8006511, 1, 8006772, 1, 8007016, 1, 8007273, 1, 8007534, 1, 8007783, 3, 8008296, 8008809, 8009074, 1, 8008553, 1, 8009327, 1, 8009584, 1, 8009844, 1, 8010095, 1, 8010600, 1, 8010863, 1, 8011369, 1, 8011623, 1, 8011885, 1, 8012129, 2, 8012648, 8013682, 1, 8012901, 1, 8013172, 1, 8013409, 1, 8013929, 1, 8014177, 1, 8014446, 1, 8014695, 1, 8014956, 1, 8015205, 2, 8015468, 8016498, 1, 8015717, 1, 8015974, 1, 8016244, 1, 8016745, 1, 8016999, 1, 8017256, 1, 8017524, 1, 8018035, 2, 8018537, 8019060, 1, 8018803, 1, 8019310, 1, 8019557, 1, 8019827, 1, 8020083, 1, 8020584, 1, 8020857, 1, 8022113, 1, 8022382, 1, 8022638, 1, 8022881, 1, 8023393, 1, 8023666, 1, 8023926, 1, 8024441, 1, 8024929, 1, 8025203, 1, 8025448, 1, 8025708, 14, 8026211, 8027236, 8028261, 8029800, 8031081, 8031596, 8032878, 8033392, 8033650, 8066163, 8067701, 8069751, 8070008, 8070265, 1, 8026484, 1, 8026735, 1, 8026994, 2, 8027493, 8027753, 1, 8028003, 2, 8028514, 8029285, 1, 8028769, 1, 8029042, 1, 8029553, 1, 8030057, 1, 8030307, 1, 8030572, 1, 8030821, 1, 8031340, 2, 8031849, 8032108, 1, 8032361, 1, 8032624, 1, 8033124, 6, 8033890, 8034660, 8036199, 8036723, 8038260, 8063609, 1, 8034145, 1, 8034418, 1, 8034921, 1, 8035175, 1, 8035442, 1, 8035689, 1, 8035955, 1, 8036453, 2, 8036965, 8037225, 1, 8037475, 1, 8037740, 1, 8037989, 1, 8038505, 1, 8038755, 1, 8039009, 1, 8039276, 5, 8039469, 8057954, 8058732, 8060019, 8062324, 1, 8039728, 7, 8039984, 8042545, 8045106, 8047667, 8050228, 8052789, 8055350, 1, 8040237, 1, 8040496, 7, 8040752, 8041009, 8041266, 8041523, 8041780, 8042037, 8042294, 1, 8042797, 1, 8043056, 7, 8043312, 8043569, 8043826, 8044083, 8044340, 8044597, 8044854, 1, 8045357, 1, 8045616, 7, 8045872, 8046129, 8046386, 8046643, 8046900, 8047157, 8047414, 1, 8047917, 1, 8048176, 7, 8048432, 8048689, 8048946, 8049203, 8049460, 8049717, 8049974, 1, 8050477, 1, 8050736, 7, 8050992, 8051249, 8051506, 8051763, 8052020, 8052277, 8052534, 1, 8053037, 1, 8053296, 7, 8053552, 8053809, 8054066, 8054323, 8054580, 8054837, 8055094, 1, 8055597, 1, 8055856, 7, 8056112, 8056369, 8056626, 8056883, 8057140, 8057397, 8057654, 1, 8058209, 1, 8058482, 2, 8058985, 8059769, 1, 8059246, 1, 8059493, 1, 8060261, 1, 8060528, 1, 8060769, 1, 8061042, 1, 8061281, 1, 8061556, 1, 8061807, 1, 8062066, 1, 8062569, 1, 8062828, 1, 8063076, 1, 8063333, 1, 8063860, 1, 8064104, 1, 8064361, 1, 8064622, 1, 8064883, 1, 8065136, 1, 8065377, 1, 8065635, 1, 8065893, 2, 8066419, 8067188, 1, 8066661, 1, 8066924, 1, 8067425, 3, 8067937, 8069229, 8069496, 1, 8068197, 1, 8068464, 1, 8068709, 1, 8068974, 1, 8070522, 2, 8071009, 8071282, 1, 8071777, 14, 8072290, 8074083, 8075364, 8079205, 8082279, 8084076, 8085358, 8087407, 8088432, 8088690, 8091251, 8094836, 8097656, 8097913, 1, 8072562, 1, 8072801, 1, 8073076, 1, 8073321, 1, 8073583, 1, 8073838, 1, 8074356, 1, 8074607, 1, 8074866, 1, 8075129, 3, 8075617, 8075877, 8078442, 1, 8076143, 1, 8076387, 1, 8076641, 1, 8076915, 1, 8077171, 1, 8077413, 1, 8077684, 1, 8077940, 1, 8078181, 1, 8078637, 1, 8078898, 4, 8079472, 8079732, 8079991, 8082040, 2, 8080228, 8081257, 1, 8080481, 1, 8080756, 1, 8080993, 1, 8081518, 1, 8081767, 1, 8082537, 1, 8082798, 1, 8083060, 1, 8083305, 1, 8083564, 1, 8083813, 1, 8084332, 1, 8084577, 1, 8084839, 1, 8085093, 1, 8085605, 1, 8085863, 1, 8086113, 1, 8086386, 1, 8086573, 2, 8086834, 8087091, 1, 8087660, 1, 8087913, 1, 8088174, 3, 8088929, 8089703, 8090473, 1, 8089197, 1, 8089441, 2, 8089953, 8090223, 1, 8090721, 1, 8090989, 2, 8091489, 8093033, 1, 8091762, 1, 8092007, 1, 8092257, 1, 8092537, 1, 8092769, 1, 8093287, 1, 8093551, 1, 8093812, 1, 8094056, 1, 8094313, 1, 8094563, 2, 8095073, 8096114, 1, 8095333, 1, 8095533, 1, 8095794, 1, 8096361, 1, 8096623, 1, 8096876, 1, 8097069, 1, 8097330, 1, 8098159, 1, 8098676, 1, 8098930, 1, 8099177, 12, 8099683, 8102500, 8102761, 8105836, 8111725, 8113263, 8113776, 8114291, 8114548, 8114805, 8115063, 8117880, 1, 8099937, 1, 8100204, 1, 8100457, 2, 8100707, 8100986, 1, 8101217, 1, 8101492, 1, 8101737, 1, 8101999, 1, 8102254, 2, 8103011, 8105572, 2, 8103269, 8104809, 2, 8103524, 8103788, 1, 8104037, 1, 8104307, 1, 8104563, 1, 8105070, 1, 8105319, 5, 8106081, 8107107, 8108140, 8109940, 8110965, 1, 8106352, 1, 8106613, 1, 8106859, 1, 8107361, 1, 8107630, 1, 8107887, 1, 8108389, 1, 8108665, 1, 8108898, 1, 8109153, 1, 8109420, 1, 8109676, 1, 8110177, 1, 8110439, 1, 8110693, 1, 8111213, 1, 8111461, 1, 8111977, 1, 8112244, 1, 8112489, 1, 8112750, 1, 8112999, 1, 8113513, 1, 8114022, 1, 8115301, 1, 8115564, 1, 8115757, 1, 8116067, 1, 8116321, 1, 8116594, 1, 8116850, 1, 8117097, 1, 8117349, 1, 8117618, 1, 8118386, 1, 8118639, 1, 8118896, 2, 8119393, 8120436, 1, 8119651, 1, 8119912, 1, 8120185, 1, 8120690, 1, 8120937, 1, 8121443, 1, 8121714, 6, 8122213, 8122732, 8125040, 8125298, 8125812, 8126072, 1, 8122481, 2, 8122979, 8124263, 1, 8123233, 1, 8123502, 1, 8123765, 1, 8124019, 1, 8124513, 1, 8124786, 1, 8125560, 1, 8126564, 1, 8126817, 1, 8127091, 1, 8127336, 2, 8127841, 8128106, 4, 8128624, 8128882, 8129396, 8129656, 1, 8129144, 2, 8130153, 8131437, 1, 8130407, 1, 8130682, 1, 8130913, 1, 8131175, 1, 8131685, 1, 8131956, 17, 8132400, 8141665, 8173410, 8173667, 8174693, 8189798, 8190311, 8190568, 8198761, 8216943, 8231792, 8232050, 8241267, 8242037, 8246134, 8247161, 8247930, 3, 8132656, 8135729, 8139570, 9, 8132913, 8133170, 8133427, 8133940, 8134197, 8134454, 8134711, 8134968, 8135225, 1, 8133729, 1, 8135521, 10, 8135984, 8136497, 8136754, 8137011, 8137268, 8137781, 8138038, 8138295, 8138808, 8139321, 1, 8136289, 1, 8137569, 1, 8138593, 1, 8139105, 6, 8139824, 8140081, 8140338, 8140595, 8140852, 8141365, 1, 8141153, 18, 8141869, 8143457, 8144228, 8144997, 8145510, 8146537, 8148332, 8150382, 8154736, 8154993, 8155762, 8157811, 8164212, 8167285, 8167542, 8169335, 8172152, 8173177, 5, 8142129, 8142386, 8142643, 8142900, 8143157, 1, 8143734, 1, 8143989, 1, 8144484, 1, 8144737, 1, 8145262, 1, 8145766, 1, 8146028, 1, 8146277, 2, 8146803, 8147316, 1, 8147060, 1, 8147561, 1, 8147822, 1, 8148071, 2, 8148587, 8148844, 1, 8149104, 1, 8149356, 1, 8149601, 1, 8149870, 1, 8150117, 4, 8150627, 8151396, 8152679, 8153961, 1, 8150888, 1, 8151151, 1, 8151653, 1, 8151922, 1, 8152165, 1, 8152434, 1, 8152939, 1, 8153205, 1, 8153455, 1, 8153713, 1, 8154222, 1, 8154471, 1, 8155238, 1, 8155489, 2, 8156001, 8156782, 1, 8156270, 1, 8156519, 1, 8157033, 1, 8157294, 1, 8157543, 4, 8158049, 8159340, 8159859, 8161396, 1, 8158316, 1, 8158572, 1, 8158817, 1, 8159085, 1, 8159585, 1, 8160097, 1, 8160364, 1, 8160620, 1, 8160865, 1, 8161133, 2, 8161637, 8163433, 1, 8161890, 1, 8162145, 1, 8162419, 1, 8162667, 1, 8162917, 1, 8163188, 1, 8163694, 1, 8163943, 3, 8164451, 8164965, 8166772, 1, 8164712, 1, 8165234, 1, 8165485, 1, 8165733, 1, 8165996, 1, 8166255, 1, 8166510, 1, 8167023, 3, 8167781, 8168297, 8169081, 1, 8168051, 1, 8168558, 1, 8168807, 1, 8169517, 1, 8169825, 1, 8170105, 1, 8170345, 1, 8170606, 1, 8170797, 1, 8171122, 1, 8171365, 1, 8171635, 1, 8171880, 1, 8172393, 1, 8172654, 1, 8172903, 1, 8173929, 1, 8174194, 1, 8174435, 14, 8174893, 8176225, 8177762, 8178020, 8182629, 8183145, 8184940, 8185454, 8185711, 8185968, 8186227, 8188788, 8189045, 8189560, 4, 8175153, 8175410, 8175667, 8175924, 2, 8176496, 8177266, 1, 8176751, 1, 8177006, 1, 8177529, 3, 8178274, 8179044, 8180071, 1, 8178529, 1, 8178802, 1, 8179305, 1, 8179566, 1, 8179815, 1, 8180325, 2, 8180525, 8182385, 1, 8180852, 1, 8181089, 1, 8181353, 1, 8181612, 1, 8181861, 1, 8182116, 1, 8182894, 2, 8183397, 8184167, 1, 8183666, 1, 8183920, 1, 8184424, 1, 8184692, 1, 8185196, 1, 8186484, 2, 8186669, 8188005, 1, 8186979, 1, 8187250, 1, 8187493, 1, 8187749, 1, 8188274, 1, 8188526, 1, 8189304, 1, 8190066, 4, 8190817, 8191589, 8194665, 8197999, 1, 8191084, 1, 8191333, 2, 8191841, 8192357, 1, 8192116, 1, 8192620, 2, 8192867, 8194149, 1, 8193128, 1, 8193377, 1, 8193641, 1, 8193906, 1, 8194404, 1, 8194932, 1, 8195173, 1, 8195373, 1, 8195686, 1, 8195941, 1, 8196193, 1, 8196468, 1, 8196712, 1, 8196965, 1, 8197234, 1, 8197477, 1, 8197732, 1, 8198252, 1, 8198501, 9, 8198957, 8200545, 8202340, 8206183, 8208745, 8209004, 8210030, 8214386, 8215156, 5, 8199217, 8199474, 8199731, 8199988, 8200245, 1, 8200814, 1, 8201063, 1, 8201335, 1, 8201569, 1, 8201825, 1, 8202091, 2, 8202597, 8205684, 2, 8202797, 8204654, 1, 8203112, 1, 8203365, 1, 8203617, 1, 8203876, 1, 8204133, 1, 8204388, 1, 8204905, 1, 8205166, 1, 8205415, 1, 8205928, 2, 8206439, 8207726, 1, 8206700, 2, 8206949, 8207481, 1, 8207219, 1, 8207993, 1, 8208225, 1, 8208494, 1, 8209268, 1, 8209509, 1, 8209764, 6, 8210276, 8211301, 8211559, 8212074, 8212587, 8213620, 2, 8210543, 8211061, 1, 8210807, 1, 8211827, 1, 8212321, 1, 8212841, 1, 8213102, 1, 8213351, 1, 8213861, 1, 8214130, 1, 8214629, 1, 8214884, 1, 8215400, 2, 8215657, 8216175, 1, 8215918, 1, 8216437, 1, 8216692, 11, 8217133, 8219233, 8219493, 8219756, 8221037, 8222830, 8223087, 8225648, 8226162, 8231287, 8231544, 7, 8217393, 8217650, 8217907, 8218164, 8218421, 8218678, 8218935, 2, 8220006, 8220271, 1, 8220531, 1, 8220783, 2, 8221281, 8222053, 1, 8221550, 1, 8221811, 1, 8222318, 1, 8222579, 3, 8223332, 8225132, 8225390, 1, 8223603, 1, 8223789, 1, 8224099, 1, 8224370, 1, 8224613, 1, 8224869, 1, 8225894, 5, 8226404, 8227947, 8228716, 8229234, 8230259, 1, 8226675, 1, 8226928, 1, 8227169, 1, 8227427, 1, 8227685, 1, 8228197, 1, 8228466, 1, 8228964, 1, 8229481, 1, 8229733, 1, 8229988, 1, 8230504, 1, 8230761, 1, 8231024, 5, 8232289, 8233573, 8236905, 8240239, 8241017, 1, 8232560, 1, 8232816, 1, 8233061, 1, 8233316, 3, 8233825, 8234606, 8235379, 1, 8234100, 1, 8234344, 1, 8234851, 1, 8235112, 1, 8235636, 1, 8235884, 1, 8236133, 1, 8236402, 1, 8236659, 3, 8237166, 8238707, 8239220, 1, 8237419, 1, 8237676, 1, 8237925, 2, 8238180, 8238451, 1, 8238964, 1, 8239465, 1, 8239726, 1, 8239975, 1, 8240494, 1, 8240743, 1, 8241507, 1, 8241778, 7, 8242273, 8243301, 8243561, 8243820, 8244334, 8245103, 8245872, 1, 8242533, 2, 8242798, 8243060, 1, 8244085, 1, 8244586, 1, 8244847, 2, 8245360, 8245624, 3, 8246369, 8246629, 8246889, 1, 8247406, 1, 8247662, 20, 8248365, 8248880, 8252513, 8254307, 8256356, 8257381, 8259686, 8260199, 8260456, 8261481, 8265836, 8266861, 8267630, 8268399, 8272754, 8273779, 8278133, 8280694, 8281719, 8284025, 1, 8248696, 1, 8249136, 8, 8249393, 8249650, 8249907, 8250164, 8250933, 8251190, 8251703, 8251960, 2, 8250465, 8250722, 1, 8251489, 1, 8252257, 4, 8252769, 8253038, 8253296, 8253813, 1, 8253544, 1, 8254067, 3, 8254561, 8255081, 8255861, 1, 8254832, 1, 8255346, 1, 8255587, 1, 8256112, 1, 8256628, 1, 8256882, 1, 8257129, 4, 8257637, 8257896, 8258163, 8259193, 1, 8258420, 1, 8258661, 1, 8258931, 1, 8259438, 1, 8259954, 1, 8260705, 1, 8260978, 1, 8261234, 6, 8261729, 8263269, 8264304, 8264562, 8265332, 8265592, 2, 8261986, 8262254, 1, 8262503, 1, 8262769, 1, 8263017, 3, 8263536, 8263796, 8264056, 1, 8264815, 1, 8265070, 1, 8266081, 1, 8266354, 1, 8266610, 1, 8267105, 1, 8267376, 1, 8267881, 1, 8268147, 6, 8268641, 8268900, 8269680, 8271218, 8271476, 8272504, 1, 8269167, 1, 8269428, 3, 8269926, 8270184, 8270444, 1, 8270709, 1, 8270963, 1, 8271721, 1, 8271981, 1, 8272229, 1, 8272993, 1, 8273266, 1, 8273522, 3, 8274019, 8274536, 8277105, 1, 8274290, 1, 8274785, 1, 8275041, 1, 8275321, 1, 8275553, 1, 8275828, 1, 8276072, 1, 8276329, 1, 8276601, 1, 8276833, 1, 8277347, 1, 8277621, 1, 8277872, 3, 8278383, 8278896, 8279924, 1, 8278648, 1, 8279148, 1, 8279413, 1, 8279667, 1, 8280178, 1, 8280425, 2, 8280929, 8281189, 1, 8281445, 3, 8281953, 8282469, 8283753, 1, 8282209, 2, 8282724, 8283493, 1, 8282983, 1, 8283237, 9, 8284257, 8284773, 8285545, 8285807, 8286576, 8286834, 8287348, 8287605, 8287864, 1, 8284513, 1, 8285029, 1, 8285293, 1, 8286063, 1, 8286314, 1, 8287096, 17, 8288301, 8289584, 8292449, 8316771, 8318053, 8339302, 8341096, 8341609, 8348782, 8349039, 8361328, 8367986, 8368499, 8369269, 8383862, 8384119, 8386169, 1, 8288611, 1, 8288882, 1, 8289125, 1, 8289381, 1, 8289840, 8, 8290097, 8290610, 8290867, 8291124, 8291381, 8291638, 8291895, 8292152, 1, 8290401, 24, 8292653, 8295265, 8296802, 8297315, 8298852, 8299877, 8301158, 8301671, 8302696, 8303210, 8305259, 8306796, 8307053, 8309102, 8309616, 8309873, 8310130, 8310899, 8311668, 8312693, 8312950, 8313207, 8314489, 8316026, 8, 8292913, 8293170, 8293427, 8293684, 8293941, 8294255, 8294517, 8294777, 1, 8295023, 3, 8295524, 8296041, 8296306, 1, 8295791, 1, 8296565, 1, 8297064, 3, 8297576, 8297845, 8298617, 1, 8298100, 1, 8298341, 2, 8299108, 8299624, 1, 8299368, 1, 8300141, 1, 8300397, 1, 8300641, 1, 8300901, 1, 8301429, 2, 8301928, 8302446, 1, 8302184, 1, 8302952, 1, 8303477, 1, 8303730, 1, 8303990, 1, 8304229, 1, 8304484, 1, 8304745, 1, 8304995, 2, 8305505, 8306280, 1, 8305779, 1, 8306024, 1, 8306536, 2, 8307297, 8308591, 1, 8307563, 1, 8307819, 1, 8308065, 1, 8308334, 1, 8308843, 1, 8309351, 2, 8310382, 8310642, 2, 8311144, 8311411, 3, 8311912, 8312169, 8312436, 1, 8313454, 1, 8313705, 1, 8313966, 1, 8314215, 2, 8314721, 8315748, 1, 8314990, 1, 8315246, 1, 8315489, 2, 8316264, 8316538, 2, 8317033, 8317817, 1, 8317298, 1, 8317539, 13, 8318305, 8318821, 8319336, 8319593, 8320108, 8321134, 8322927, 8326514, 8327795, 8335476, 8336245, 8338807, 8339065, 1, 8318578, 1, 8319079, 1, 8319854, 1, 8320364, 1, 8320623, 1, 8320887, 2, 8321377, 8321897, 1, 8321648, 1, 8322163, 1, 8322405, 1, 8322665, 2, 8323117, 8324466, 3, 8323439, 8323701, 8323961, 1, 8324193, 1, 8324713, 1, 8324974, 1, 8325224, 1, 8325481, 1, 8325733, 1, 8326005, 1, 8326248, 3, 8326753, 8327273, 8327541, 1, 8327016, 2, 8328041, 8334964, 1, 8328293, 1, 8328565, 1, 8328814, 1, 8329063, 1, 8329261, 4, 8329576, 8330861, 8332144, 8333939, 1, 8329833, 1, 8330085, 1, 8330357, 1, 8330600, 1, 8331113, 1, 8331365, 1, 8331637, 1, 8331885, 1, 8332385, 1, 8332654, 1, 8332915, 1, 8333161, 1, 8333423, 1, 8333683, 1, 8334185, 1, 8334447, 1, 8334707, 1, 8335221, 1, 8335721, 1, 8335990, 5, 8336481, 8337261, 8337521, 8337778, 8338552, 1, 8336741, 1, 8337012, 1, 8338017, 1, 8338277, 2, 8339557, 8340850, 2, 8339822, 8340083, 1, 8340329, 1, 8340595, 1, 8341349, 13, 8341805, 8342371, 8342884, 8344165, 8345447, 8345704, 8345961, 8346222, 8346736, 8346996, 8347255, 8347768, 8348026, 1, 8342133, 1, 8342649, 1, 8343140, 1, 8343401, 1, 8343667, 1, 8343912, 4, 8344421, 8344688, 8344948, 8345208, 1, 8346471, 1, 8347502, 1, 8348261, 1, 8348532, 14, 8349229, 8354145, 8354404, 8354919, 8355437, 8355951, 8356208, 8356721, 8356978, 8357492, 8357749, 8360311, 8360824, 8361081, 11, 8349489, 8349746, 8350003, 8350260, 8350517, 8350774, 8351073, 8351589, 8352105, 8352367, 8352633, 1, 8351333, 1, 8351855, 3, 8352865, 8353381, 8353903, 1, 8353125, 1, 8353647, 1, 8354664, 1, 8355176, 1, 8355695, 1, 8356454, 1, 8357225, 1, 8358004, 1, 8358248, 1, 8358502, 1, 8358773, 1, 8359020, 1, 8359278, 1, 8359525, 1, 8359795, 1, 8360051, 1, 8360548, 2, 8361583, 8366963, 3, 8361831, 8364395, 8365938, 1, 8362085, 1, 8362343, 1, 8362610, 1, 8362849, 1, 8363117, 1, 8363373, 1, 8363621, 1, 8363886, 1, 8364137, 1, 8364658, 1, 8364905, 1, 8365171, 1, 8365417, 1, 8365683, 1, 8366194, 1, 8366447, 1, 8366697, 1, 8367209, 1, 8367468, 1, 8367721, 1, 8368249, 1, 8368739, 1, 8369010, 18, 8369453, 8373345, 8374371, 8374884, 8375397, 8375913, 8376170, 8376429, 8376942, 8377199, 8378480, 8378737, 8378994, 8379507, 8379764, 8380021, 8382839, 8383608, 10, 8369713, 8369970, 8370227, 8370484, 8370785, 8371301, 8371817, 8372079, 8372341, 8372601, 1, 8371045, 1, 8371567, 1, 8372837, 1, 8373103, 2, 8373605, 8374126, 1, 8373870, 1, 8374649, 1, 8375144, 1, 8375665, 1, 8376684, 4, 8377453, 8377712, 8377972, 8378232, 1, 8379256, 1, 8380267, 1, 8380513, 1, 8380780, 1, 8381029, 1, 8381281, 1, 8381552, 1, 8381801, 1, 8382062, 1, 8382324, 1, 8382581, 1, 8383087, 1, 8383345, 4, 8384353, 8384869, 8385129, 8385647, 1, 8384609, 1, 8385385, 1, 8385903, 6, 8386401, 8386917, 8387184, 8387442, 8387956, 8388216, 1, 8386657, 1, 8387704, 18, 8388656, 8399969, 8412515, 8414052, 8414821, 8423526, 8424040, 8436585, 8446570, 8447084, 8448111, 8450929, 8452210, 8452723, 8454261, 8457847, 8460409, 8462714, 2, 8388912, 8393521, 9, 8389169, 8389426, 8390707, 8391476, 8391989, 8392502, 8392759, 8393016, 8393273, 4, 8389729, 8389986, 8390243, 8390500, 2, 8391009, 8391266, 1, 8391777, 1, 8392289, 7, 8393776, 8394033, 8394290, 8394547, 8394804, 8395061, 8397622, 9, 8395361, 8395618, 8395875, 8396132, 8396389, 8396646, 8396903, 8397160, 8397417, 8, 8397921, 8398178, 8398435, 8398692, 8398949, 8399206, 8399463, 8399720, 17, 8400183, 8400481, 8400739, 8401765, 8402279, 8402536, 8402793, 8403308, 8403565, 8404078, 8405872, 8406129, 8406898, 8407924, 8408438, 8409976, 8410233, 1, 8401013, 1, 8401268, 1, 8401509, 1, 8402022, 1, 8403054, 1, 8403832, 1, 8404321, 1, 8404578, 1, 8404833, 1, 8405114, 1, 8405345, 1, 8405618, 1, 8406373, 1, 8406630, 2, 8407148, 8407409, 1, 8407649, 1, 8408161, 1, 8408681, 1, 8408953, 1, 8409185, 1, 8409454, 1, 8409705, 2, 8410473, 8412270, 1, 8410734, 1, 8410925, 1, 8411257, 1, 8411503, 1, 8411748, 1, 8412008, 2, 8412769, 8413817, 1, 8413042, 1, 8413295, 1, 8413550, 1, 8414319, 1, 8414580, 10, 8415026, 8415330, 8416101, 8417133, 8418670, 8418928, 8419186, 8422260, 8422773, 8423288, 1, 8415602, 1, 8415841, 1, 8416372, 1, 8416626, 1, 8416870, 1, 8417388, 2, 8417642, 8418169, 1, 8417889, 1, 8418401, 1, 8419439, 1, 8419703, 1, 8419945, 1, 8420196, 1, 8420468, 1, 8420712, 1, 8420979, 1, 8421232, 1, 8421473, 1, 8421731, 1, 8421989, 1, 8422497, 1, 8423027, 1, 8423794, 8, 8424289, 8427107, 8427621, 8428905, 8430447, 8431989, 8434295, 8435065, 7, 8424545, 8424809, 8425328, 8425586, 8425844, 8426104, 8426361, 1, 8425070, 1, 8426601, 1, 8426862, 1, 8427385, 4, 8427877, 8428144, 8428404, 8428664, 2, 8429164, 8429430, 1, 8429669, 1, 8429940, 1, 8430181, 5, 8430697, 8430959, 8431216, 8431476, 8431736, 5, 8432239, 8433008, 8433266, 8433780, 8434040, 2, 8432496, 8432760, 1, 8433528, 2, 8434529, 8434789, 4, 8435312, 8435570, 8436084, 8436344, 1, 8435832, 12, 8436787, 8437090, 8437348, 8437861, 8438631, 8440684, 8441454, 8442224, 8444785, 8445556, 8445816, 8446074, 1, 8437601, 2, 8438128, 8438392, 2, 8438898, 8439930, 1, 8439137, 1, 8439410, 1, 8439666, 1, 8440161, 1, 8440423, 1, 8440932, 1, 8441189, 1, 8441711, 1, 8441970, 1, 8442480, 1, 8442725, 1, 8442994, 1, 8443181, 1, 8443501, 1, 8443759, 1, 8444021, 1, 8444276, 1, 8444520, 1, 8445025, 1, 8445281, 1, 8446258, 1, 8446821, 1, 8447329, 1, 8447597, 1, 8447841, 6, 8448353, 8448621, 8449647, 8449904, 8450420, 8450680, 1, 8448866, 1, 8449129, 1, 8449381, 1, 8450150, 1, 8451169, 1, 8451440, 1, 8451688, 1, 8451937, 1, 8452449, 3, 8452961, 8453219, 8453736, 1, 8453490, 1, 8453985, 8, 8454453, 8454754, 8455533, 8455791, 8456560, 8456818, 8457332, 8457592, 1, 8455029, 1, 8455282, 2, 8456048, 8456312, 1, 8457080, 3, 8458081, 8459626, 8459886, 1, 8458354, 1, 8458593, 1, 8458859, 1, 8459105, 1, 8459385, 1, 8460138, 5, 8460647, 8461424, 8461682, 8462196, 8462456, 1, 8460911, 1, 8461171, 1, 8461944, 7, 8462945, 8464229, 8465257, 8467311, 8468083, 8469109, 8470393, 4, 8463201, 8463472, 8463732, 8463992, 3, 8464485, 8464752, 8465016, 4, 8465509, 8466544, 8466804, 8467064, 3, 8465776, 8466036, 8466296, 2, 8467568, 8467832, 2, 8468321, 8468601, 1, 8468833, 3, 8469360, 8469618, 8470136, 1, 8469880, 5, 8470625, 8470896, 8471154, 8471668, 8471928, 1, 8471416 }; // }}} END_ALLOW_CASE_RANGE kitty-0.15.0/kittens/unicode_input/unicode_names.c000066400000000000000000000073451356737523400222740ustar00rootroot00000000000000/* * unicode_names.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "names.h" static PyObject* all_words(PYNOARG) { PyObject *ans = PyTuple_New(arraysz(all_words_map)); if (!ans) return NULL; for (size_t i = 0; i < arraysz(all_words_map); i++) { PyObject *w = PyUnicode_FromString(all_words_map[i]); if (w == NULL) { Py_DECREF(ans); return NULL; } PyTuple_SET_ITEM(ans, i, w); } return ans; } static inline void add_matches(const word_trie *wt, char_type *codepoints, size_t *pos, const size_t sz) { size_t num = mark_groups[wt->match_offset]; for (size_t i = wt->match_offset + 1; i < wt->match_offset + 1 + num && *pos < sz; i++, (*pos)++) { codepoints[*pos] = mark_to_cp[mark_groups[i]]; } } static void process_trie_node(const word_trie *wt, char_type *codepoints, size_t *pos, const size_t sz) { if (wt->match_offset) add_matches(wt, codepoints, pos, sz); size_t num_children = children_array[wt->children_offset]; if (!num_children) return; for (size_t c = wt->children_offset + 1; c < wt->children_offset + 1 + num_children; c++) { if (*pos > sz) return; uint32_t x = children_array[c]; process_trie_node(&all_trie_nodes[x >> 8], codepoints, pos, sz); } } static inline PyObject* codepoints_for_word(const char *word, size_t len) { const word_trie *wt = all_trie_nodes; for (size_t i = 0; i < len; i++) { unsigned char ch = word[i]; size_t num_children = children_array[wt->children_offset]; if (!num_children) return PyFrozenSet_New(NULL); bool found = false; for (size_t c = wt->children_offset + 1; c < wt->children_offset + 1 + num_children; c++) { uint32_t x = children_array[c]; if ((x & 0xff) == ch) { found = true; wt = &all_trie_nodes[x >> 8]; break; } } if (!found) return PyFrozenSet_New(NULL); } static char_type codepoints[1024]; size_t cpos = 0; process_trie_node(wt, codepoints, &cpos, arraysz(codepoints)); PyObject *ans = PyFrozenSet_New(NULL); if (ans == NULL) return NULL; for (size_t i = 0; i < cpos; i++) { PyObject *t = PyLong_FromUnsignedLong(codepoints[i]); if (t == NULL) { Py_DECREF(ans); return NULL; } int ret = PySet_Add(ans, t); Py_DECREF(t); if (ret != 0) { Py_DECREF(ans); return NULL; } } return ans; } static PyObject* cfw(PyObject *self UNUSED, PyObject *args) { const char *word; if (!PyArg_ParseTuple(args, "s", &word)) return NULL; return codepoints_for_word(word, strlen(word)); } static PyObject* nfc(PyObject *self UNUSED, PyObject *args) { unsigned int cp; if (!PyArg_ParseTuple(args, "I", &cp)) return NULL; const char *n = name_for_codepoint(cp); if (n == NULL) Py_RETURN_NONE; return PyUnicode_FromString(n); } static PyMethodDef module_methods[] = { {"all_words", (PyCFunction)all_words, METH_NOARGS, ""}, {"codepoints_for_word", (PyCFunction)cfw, METH_VARARGS, ""}, {"name_for_codepoint", (PyCFunction)nfc, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; #if PY_VERSION_HEX >= 0x03000000 static struct PyModuleDef module = { .m_base = PyModuleDef_HEAD_INIT, .m_name = "unicode_names", /* name of module */ .m_doc = NULL, .m_size = -1, .m_methods = module_methods }; EXPORTED PyMODINIT_FUNC PyInit_unicode_names(void) { PyObject *m; m = PyModule_Create(&module); if (m == NULL) return NULL; return m; } #else EXPORTED initunicode_names(void) { PyObject *m; m = Py_InitModule3("unicode_names", module_methods, "" ); if (m == NULL) return; } #endif kitty-0.15.0/kitty/000077500000000000000000000000001356737523400141245ustar00rootroot00000000000000kitty-0.15.0/kitty/__init__.py000066400000000000000000000000101356737523400162240ustar00rootroot00000000000000# empty kitty-0.15.0/kitty/blit_fragment.glsl000066400000000000000000000002601356737523400176220ustar00rootroot00000000000000#version GLSL_VERSION uniform sampler2D image; in vec2 texcoord; out vec4 color; void main() { color = texture(image, texcoord); color = vec4(color.rgb, color.a); } kitty-0.15.0/kitty/blit_vertex.glsl000066400000000000000000000005751356737523400173450ustar00rootroot00000000000000#version GLSL_VERSION #define left -1.0f #define top 1.0f #define right 1.0f #define bottom -1.0f const vec2 pos_map[] = vec2[4]( vec2(right, top), vec2(right, bottom), vec2(left, bottom), vec2(left, top) ); out vec2 texcoord; void main() { vec2 vertex = pos_map[gl_VertexID]; gl_Position = vec4(vertex, 0, 1); texcoord = (vertex + 1.0) / 2.0; } kitty-0.15.0/kitty/border_fragment.glsl000066400000000000000000000002661356737523400201530ustar00rootroot00000000000000#version GLSL_VERSION uniform float background_opacity; in vec3 color; out vec4 final_color; void main() { final_color = vec4(color * background_opacity, background_opacity); } kitty-0.15.0/kitty/border_vertex.glsl000066400000000000000000000023141356737523400176610ustar00rootroot00000000000000#version GLSL_VERSION uniform uvec2 viewport; uniform vec3 default_bg; uniform vec3 active_border_color; uniform vec3 inactive_border_color; uniform vec3 bell_border_color; in uvec4 rect; // left, top, right, bottom in uint rect_color; out vec3 color; // indices into the rect vector const int LEFT = 0; const int TOP = 1; const int RIGHT = 2; const int BOTTOM = 3; const uint FF = uint(0xff); const uvec2 pos_map[] = uvec2[4]( uvec2(RIGHT, TOP), uvec2(RIGHT, BOTTOM), uvec2(LEFT, BOTTOM), uvec2(LEFT, TOP) ); vec2 to_opengl(uint x, uint y) { return vec2( -1.0 + 2.0 * (float(x) / float(viewport.x)), 1.0 - 2.0 * (float(y) / float(viewport.y)) ); } float to_color(uint c) { return float(c & FF) / 255.0; } void main() { uvec2 pos = pos_map[gl_VertexID]; gl_Position = vec4(to_opengl(rect[pos.x], rect[pos.y]), 0, 1); int rc = int(rect_color); vec3 window_bg = vec3(to_color(rect_color >> 24), to_color(rect_color >> 16), to_color(rect_color >> 8)); color = float(1 & rc) * default_bg + float((2 & rc) >> 1) * active_border_color + float((4 & rc) >> 2) * inactive_border_color + float((8 & rc) >> 3) * window_bg + float((16 & rc) >> 4) * bell_border_color; } kitty-0.15.0/kitty/borders.py000066400000000000000000000071001356737523400161340ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal from itertools import chain from .fast_data_types import ( BORDERS_PROGRAM, add_borders_rect, compile_program, init_borders_program ) from .utils import load_shaders try: from enum import IntFlag except ImportError: from enum import IntEnum as IntFlag class BorderColor(IntFlag): # See the border vertex shader for how these flags become actual colors default_bg, active, inactive, window_bg, bell = ((1 << i) for i in range(5)) def vertical_edge(os_window_id, tab_id, color, width, top, bottom, left): add_borders_rect(os_window_id, tab_id, left, top, left + width, bottom, color) def horizontal_edge(os_window_id, tab_id, color, height, left, right, top): add_borders_rect(os_window_id, tab_id, left, top, right, top + height, color) def draw_edges(os_window_id, tab_id, colors, width, geometry, base_width=0): left = geometry.left - (width + base_width) top = geometry.top - (width + base_width) right = geometry.right + (width + base_width) bottom = geometry.bottom + (width + base_width) horizontal_edge(os_window_id, tab_id, colors[1], width, left, right, top) horizontal_edge(os_window_id, tab_id, colors[3], width, left, right, geometry.bottom + base_width) vertical_edge(os_window_id, tab_id, colors[0], width, top, bottom, left) vertical_edge(os_window_id, tab_id, colors[2], width, top, bottom, geometry.right + base_width) def load_borders_program(): compile_program(BORDERS_PROGRAM, *load_shaders('border')) init_borders_program() Borders.program_initialized = True class Borders: def __init__(self, os_window_id, tab_id, opts, border_width, padding_width): self.os_window_id = os_window_id self.tab_id = tab_id self.border_width = border_width self.padding_width = padding_width self.draw_active_borders = opts.active_border_color is not None def __call__( self, windows, active_window, current_layout, extra_blank_rects, draw_window_borders=True ): add_borders_rect(self.os_window_id, self.tab_id, 0, 0, 0, 0, BorderColor.default_bg) for br in chain(current_layout.blank_rects, extra_blank_rects): add_borders_rect(self.os_window_id, self.tab_id, *br, BorderColor.default_bg) bw, pw = self.border_width, self.padding_width if bw + pw <= 0: return draw_borders = bw > 0 and draw_window_borders if draw_borders: border_data = current_layout.resolve_borders(windows, active_window) for i, w in enumerate(windows): g = w.geometry window_bg = w.screen.color_profile.default_bg window_bg = (window_bg << 8) | BorderColor.window_bg if draw_borders: # Draw the border rectangles if w is active_window and self.draw_active_borders: color = BorderColor.active else: color = BorderColor.bell if w.needs_attention else BorderColor.inactive colors = tuple(color if needed else window_bg for needed in next(border_data)) draw_edges( self.os_window_id, self.tab_id, colors, bw, g, base_width=pw) if pw > 0: # Draw the background rectangles over the padding region colors = (window_bg, window_bg, window_bg, window_bg) draw_edges( self.os_window_id, self.tab_id, colors, pw, g) kitty-0.15.0/kitty/boss.py000066400000000000000000001373131356737523400154540ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import atexit import json import os import re from contextlib import suppress from functools import partial from gettext import gettext as _ from weakref import WeakValueDictionary from .child import cached_process_data, cwd_of_process from .cli import create_opts, parse_args from .conf.utils import to_cmdline from .config import initial_window_size_func, prepare_config_file_for_editing from .config_data import MINIMUM_FONT_SIZE from .constants import ( appname, config_dir, is_macos, kitty_exe, set_boss, supports_primary_selection ) from .fast_data_types import ( ChildMonitor, background_opacity_of, change_background_opacity, change_os_window_state, create_os_window, current_os_window, destroy_global_data, focus_os_window, get_clipboard_string, global_font_size, mark_os_window_for_close, os_window_font_size, patch_global_colors, safe_pipe, set_clipboard_string, set_in_sequence_mode, thread_write, toggle_fullscreen, toggle_maximized ) from .keys import get_shortcut, shortcut_matches from .layout import set_layout_options from .remote_control import handle_cmd from .rgb import Color, color_from_int from .session import create_sessions from .tabs import SpecialWindow, SpecialWindowInstance, TabManager from .utils import ( func_name, get_editor, get_primary_selection, is_path_in_temp_dir, log_error, open_url, parse_address_spec, remove_socket_file, safe_print, set_primary_selection, single_instance, startup_notification_handler ) def listen_on(spec): import socket family, address, socket_path = parse_address_spec(spec) s = socket.socket(family) atexit.register(remove_socket_file, s, socket_path) s.bind(address) s.listen() return s.fileno() def data_for_at(w, arg, add_wrap_markers=False): def as_text(**kw): kw['add_wrap_markers'] = add_wrap_markers return w.as_text(**kw) if arg == '@selection': return w.text_for_selection() if arg in ('@ansi', '@ansi_screen_scrollback'): return as_text(as_ansi=True, add_history=True) if arg in ('@text', '@screen_scrollback'): return as_text(add_history=True) if arg == '@screen': return as_text() if arg == '@ansi_screen': return as_text(as_ansi=True) if arg == '@alternate': return as_text(alternate_screen=True) if arg == '@alternate_scrollback': return as_text(alternate_screen=True, add_history=True) if arg == '@ansi_alternate': return as_text(as_ansi=True, alternate_screen=True) if arg == '@ansi_alternate_scrollback': return as_text(as_ansi=True, alternate_screen=True, add_history=True) class DumpCommands: # {{{ def __init__(self, args): self.draw_dump_buf = [] if args.dump_bytes: self.dump_bytes_to = open(args.dump_bytes, 'wb') def __call__(self, *a): if a: if a[0] == 'draw': if a[1] is None: if self.draw_dump_buf: safe_print('draw', ''.join(self.draw_dump_buf)) self.draw_dump_buf = [] else: self.draw_dump_buf.append(a[1]) elif a[0] == 'bytes': self.dump_bytes_to.write(a[1]) self.dump_bytes_to.flush() else: if self.draw_dump_buf: safe_print('draw', ''.join(self.draw_dump_buf)) self.draw_dump_buf = [] safe_print(*a) # }}} class Boss: def __init__(self, os_window_id, opts, args, cached_values, new_os_window_trigger): set_layout_options(opts) self.clipboard_buffers = {} self.update_check_process = None self.window_id_map = WeakValueDictionary() self.startup_colors = {k: opts[k] for k in opts if isinstance(opts[k], Color)} self.startup_cursor_text_color = opts.cursor_text_color self.pending_sequences = None self.cached_values = cached_values self.os_window_map = {} self.os_window_death_actions = {} self.cursor_blinking = True self.shutting_down = False talk_fd = getattr(single_instance, 'socket', None) talk_fd = -1 if talk_fd is None else talk_fd.fileno() listen_fd = -1 if args.listen_on and (opts.allow_remote_control in ('y', 'socket-only')): listen_fd = listen_on(args.listen_on) self.child_monitor = ChildMonitor( self.on_child_death, DumpCommands(args) if args.dump_commands or args.dump_bytes else None, talk_fd, listen_fd ) set_boss(self) self.opts, self.args = opts, args startup_sessions = create_sessions(opts, args, default_session=opts.startup_session) self.keymap = self.opts.keymap.copy() if new_os_window_trigger is not None: self.keymap.pop(new_os_window_trigger, None) for startup_session in startup_sessions: self.add_os_window(startup_session, os_window_id=os_window_id) os_window_id = None if args.start_as != 'normal': if args.start_as == 'fullscreen': self.toggle_fullscreen() else: change_os_window_state(args.start_as) if is_macos: from .fast_data_types import cocoa_set_notification_activated_callback cocoa_set_notification_activated_callback(self.notification_activated) def add_os_window(self, startup_session=None, os_window_id=None, wclass=None, wname=None, opts_for_size=None, startup_id=None): if os_window_id is None: opts_for_size = opts_for_size or getattr(startup_session, 'os_window_size', None) or self.opts cls = wclass or self.args.cls or appname with startup_notification_handler(do_notify=startup_id is not None, startup_id=startup_id) as pre_show_callback: os_window_id = create_os_window( initial_window_size_func(opts_for_size, self.cached_values), pre_show_callback, appname, wname or self.args.name or cls, cls) tm = TabManager(os_window_id, self.opts, self.args, startup_session) self.os_window_map[os_window_id] = tm return os_window_id def list_os_windows(self): with cached_process_data(): active_tab, active_window = self.active_tab, self.active_window active_tab_manager = self.active_tab_manager for os_window_id, tm in self.os_window_map.items(): yield { 'id': os_window_id, 'is_focused': tm is active_tab_manager, 'tabs': list(tm.list_tabs(active_tab, active_window)), } @property def all_tab_managers(self): yield from self.os_window_map.values() @property def all_tabs(self): for tm in self.all_tab_managers: yield from tm @property def all_windows(self): for tab in self.all_tabs: yield from tab def match_windows(self, match): try: field, exp = match.split(':', 1) except ValueError: return if field == 'num': tab = self.active_tab if tab is not None: try: w = tab.get_nth_window(int(exp)) except Exception: return if w is not None: yield w return if field == 'env': kp, vp = exp.partition('=')[::2] if vp: pat = tuple(map(re.compile, (kp, vp))) else: pat = re.compile(kp), None else: pat = re.compile(exp) for window in self.all_windows: if window.matches(field, pat): yield window def tab_for_window(self, window): for tab in self.all_tabs: for w in tab: if w.id == window.id: return tab def match_tabs(self, match): try: field, exp = match.split(':', 1) except ValueError: return pat = re.compile(exp) found = False if field in ('title', 'id'): for tab in self.all_tabs: if tab.matches(field, pat): yield tab found = True if not found: tabs = {self.tab_for_window(w) for w in self.match_windows(match)} for tab in tabs: if tab: yield tab def set_active_window(self, window, switch_os_window_if_needed=False): for os_window_id, tm in self.os_window_map.items(): for tab in tm: for w in tab: if w.id == window.id: if tab is not self.active_tab: tm.set_active_tab(tab) tab.set_active_window(w) if switch_os_window_if_needed and current_os_window() != os_window_id: focus_os_window(os_window_id, True) return os_window_id def _new_os_window(self, args, cwd_from=None): if isinstance(args, SpecialWindowInstance): sw = args else: sw = self.args_to_special_window(args, cwd_from) if args else None startup_session = next(create_sessions(self.opts, special_window=sw, cwd_from=cwd_from)) return self.add_os_window(startup_session) def new_os_window(self, *args): self._new_os_window(args) @property def active_window_for_cwd(self): w = self.active_window if w is not None and w.overlay_for is not None and w.overlay_for in self.window_id_map: w = self.window_id_map[w.overlay_for] return w def new_os_window_with_cwd(self, *args): w = self.active_window_for_cwd cwd_from = w.child.pid_for_cwd if w is not None else None self._new_os_window(args, cwd_from) def new_os_window_with_wd(self, wd): special_window = SpecialWindow(None, cwd=wd) self._new_os_window(special_window) def add_child(self, window): self.child_monitor.add_child(window.id, window.child.pid, window.child.child_fd, window.screen) self.window_id_map[window.id] = window def _handle_remote_command(self, cmd, window=None, from_peer=False): response = None if self.opts.allow_remote_control == 'y' or from_peer or getattr(window, 'allow_remote_control', False): try: response = handle_cmd(self, window, cmd) except Exception as err: import traceback response = {'ok': False, 'error': str(err)} if not getattr(err, 'hide_traceback', False): response['tb'] = traceback.format_exc() else: response = {'ok': False, 'error': 'Remote control is disabled. Add allow_remote_control to your kitty.conf'} return response def peer_message_received(self, msg): msg = msg.decode('utf-8') cmd_prefix = '\x1bP@kitty-cmd' if msg.startswith(cmd_prefix): cmd = msg[len(cmd_prefix):-2] response = self._handle_remote_command(cmd, from_peer=True) if response is not None: response = (cmd_prefix + json.dumps(response) + '\x1b\\').encode('utf-8') return response else: msg = json.loads(msg) if isinstance(msg, dict) and msg.get('cmd') == 'new_instance': startup_id = msg.get('startup_id') args, rest = parse_args(msg['args'][1:]) args.args = rest opts = create_opts(args) if not os.path.isabs(args.directory): args.directory = os.path.join(msg['cwd'], args.directory) for session in create_sessions(opts, args, respect_cwd=True): os_window_id = self.add_os_window(session, wclass=args.cls, wname=args.name, opts_for_size=opts, startup_id=startup_id) if msg.get('notify_on_os_window_death'): self.os_window_death_actions[os_window_id] = partial(self.notify_on_os_window_death, msg['notify_on_os_window_death']) else: log_error('Unknown message received from peer, ignoring') def handle_remote_cmd(self, cmd, window=None): response = self._handle_remote_command(cmd, window) if response is not None: if window is not None: window.send_cmd_response(response) def _cleanup_tab_after_window_removal(self, src_tab): if len(src_tab) < 1: tm = src_tab.tab_manager_ref() if tm is not None: tm.remove(src_tab) src_tab.destroy() if len(tm) == 0: if not self.shutting_down: mark_os_window_for_close(src_tab.os_window_id) def on_child_death(self, window_id): window = self.window_id_map.pop(window_id, None) if window is None: return if window.action_on_close: try: window.action_on_close(window) except Exception: import traceback traceback.print_exc() os_window_id = window.os_window_id window.destroy() tm = self.os_window_map.get(os_window_id) tab = None if tm is not None: for q in tm: if window in q: tab = q break if tab is not None: tab.remove_window(window) self._cleanup_tab_after_window_removal(tab) if window.action_on_removal: try: window.action_on_removal(window) except Exception: import traceback traceback.print_exc() window.action_on_close = window.action_on_removal = None def close_window(self, window=None): if window is None: window = self.active_window self.child_monitor.mark_for_close(window.id) def close_tab(self, tab=None): if tab is None: tab = self.active_tab for window in tab: self.close_window(window) def toggle_fullscreen(self): toggle_fullscreen() def toggle_maximized(self): toggle_maximized() def start(self): if not getattr(self, 'io_thread_started', False): self.child_monitor.start() self.io_thread_started = True if self.opts.update_check_interval > 0 and not hasattr(self, 'update_check_started'): from .update_check import run_update_check run_update_check(self.opts.update_check_interval * 60 * 60) self.update_check_started = True def activate_tab_at(self, os_window_id, x): tm = self.os_window_map.get(os_window_id) if tm is not None: tm.activate_tab_at(x) def on_window_resize(self, os_window_id, w, h, dpi_changed): if dpi_changed: self.on_dpi_change(os_window_id) else: tm = self.os_window_map.get(os_window_id) if tm is not None: tm.resize() def clear_terminal(self, action, only_active): if only_active: windows = [] w = self.active_window if w is not None: windows.append(w) else: windows = self.all_windows reset = action == 'reset' how = 3 if action == 'scrollback' else 2 for w in windows: if action == 'scroll': w.screen.scroll_until_cursor() continue w.screen.cursor.x = w.screen.cursor.y = 0 if reset: w.screen.reset() else: w.screen.erase_in_display(how, False) def increase_font_size(self): # legacy cfs = global_font_size() self.set_font_size(min(self.opts.font_size * 5, cfs + 2.0)) def decrease_font_size(self): # legacy cfs = global_font_size() self.set_font_size(max(MINIMUM_FONT_SIZE, cfs - 2.0)) def restore_font_size(self): # legacy self.set_font_size(self.opts.font_size) def set_font_size(self, new_size): # legacy self.change_font_size(True, None, new_size) def change_font_size(self, all_windows, increment_operation, amt): def calc_new_size(old_size): new_size = old_size if amt == 0: new_size = self.opts.font_size else: if increment_operation: new_size += (1 if increment_operation == '+' else -1) * amt else: new_size = amt new_size = max(MINIMUM_FONT_SIZE, min(new_size, self.opts.font_size * 5)) return new_size if all_windows: current_global_size = global_font_size() new_size = calc_new_size(current_global_size) if new_size != current_global_size: global_font_size(new_size) os_windows = tuple(self.os_window_map.keys()) else: os_windows = [] w = self.active_window if w is not None: os_windows.append(w.os_window_id) if os_windows: final_windows = {} for wid in os_windows: current_size = os_window_font_size(wid) if current_size: new_size = calc_new_size(current_size) if new_size != current_size: final_windows[wid] = new_size if final_windows: self._change_font_size(final_windows) def _change_font_size(self, sz_map): for os_window_id, sz in sz_map.items(): tm = self.os_window_map.get(os_window_id) if tm is not None: os_window_font_size(os_window_id, sz) tm.resize() def on_dpi_change(self, os_window_id): tm = self.os_window_map.get(os_window_id) if tm is not None: sz = os_window_font_size(os_window_id) if sz: os_window_font_size(os_window_id, sz, True) tm.resize() def _set_os_window_background_opacity(self, os_window_id, opacity): change_background_opacity(os_window_id, max(0.1, min(opacity, 1.0))) def set_background_opacity(self, opacity): window = self.active_window if window is None or not opacity: return if not self.opts.dynamic_background_opacity: return self.show_error( _('Cannot change background opacity'), _('You must set the dynamic_background_opacity option in kitty.conf to be able to change background opacity')) os_window_id = window.os_window_id if opacity[0] in '+-': old_opacity = background_opacity_of(os_window_id) if old_opacity is None: return opacity = old_opacity + float(opacity) elif opacity == 'default': opacity = self.opts.background_opacity else: opacity = float(opacity) self._set_os_window_background_opacity(os_window_id, opacity) @property def active_tab_manager(self): os_window_id = current_os_window() return self.os_window_map.get(os_window_id) @property def active_tab(self): tm = self.active_tab_manager if tm is not None: return tm.active_tab @property def active_window(self): t = self.active_tab if t is not None: return t.active_window def dispatch_special_key(self, key, native_key, action, mods): # Handles shortcuts, return True if the key was consumed key_action = get_shortcut(self.keymap, mods, key, native_key) if key_action is None: sequences = get_shortcut(self.opts.sequence_map, mods, key, native_key) if sequences: self.pending_sequences = sequences set_in_sequence_mode(True) return True else: self.current_key_press_info = key, native_key, action, mods return self.dispatch_action(key_action) def process_sequence(self, key, native_key, action, mods): if not self.pending_sequences: set_in_sequence_mode(False) remaining = {} matched_action = None for seq, key_action in self.pending_sequences.items(): if shortcut_matches(seq[0], mods, key, native_key): seq = seq[1:] if seq: remaining[seq] = key_action else: matched_action = key_action if remaining: self.pending_sequences = remaining else: self.pending_sequences = None set_in_sequence_mode(False) if matched_action is not None: self.dispatch_action(matched_action) def start_resizing_window(self): w = self.active_window if w is None: return overlay_window = self._run_kitten('resize_window', args=[ '--horizontal-increment={}'.format(self.opts.window_resize_step_cells), '--vertical-increment={}'.format(self.opts.window_resize_step_lines) ]) if overlay_window is not None: overlay_window.allow_remote_control = True def resize_layout_window(self, window, increment, is_horizontal, reset=False): tab = window.tabref() if tab is None or not increment: return False if reset: return tab.reset_window_sizes() return tab.resize_window_by(window.id, increment, is_horizontal) def default_bg_changed_for(self, window_id): w = self.window_id_map.get(window_id) if w is not None: tm = self.os_window_map.get(w.os_window_id) if tm is not None: tm.update_tab_bar_data() tm.mark_tab_bar_dirty() t = tm.tab_for_id(w.tab_id) if t is not None: t.relayout_borders() def dispatch_action(self, key_action): if key_action is not None: f = getattr(self, key_action.func, None) if f is not None: if self.args.debug_keyboard: print('Keypress matched action:', func_name(f)) passthrough = f(*key_action.args) if passthrough is not True: return True tab = self.active_tab if tab is None: return False window = self.active_window if window is None: return False if key_action is not None: f = getattr(tab, key_action.func, getattr(window, key_action.func, None)) if f is not None: passthrough = f(*key_action.args) if self.args.debug_keyboard: print('Keypress matched action:', func_name(f)) if passthrough is not True: return True return False def combine(self, *actions): for key_action in actions: self.dispatch_action(key_action) def on_focus(self, os_window_id, focused): tm = self.os_window_map.get(os_window_id) if tm is not None: w = tm.active_window if w is not None: w.focus_changed(focused) tm.mark_tab_bar_dirty() def update_tab_bar_data(self, os_window_id): tm = self.os_window_map.get(os_window_id) if tm is not None: tm.update_tab_bar_data() def on_drop(self, os_window_id, strings): tm = self.os_window_map.get(os_window_id) if tm is not None: w = tm.active_window if w is not None: w.paste('\n'.join(strings)) def on_os_window_closed(self, os_window_id, viewport_width, viewport_height): self.cached_values['window-size'] = viewport_width, viewport_height tm = self.os_window_map.pop(os_window_id, None) if tm is not None: tm.destroy() for window_id in tuple(w.id for w in self.window_id_map.values() if getattr(w, 'os_window_id', None) == os_window_id): self.window_id_map.pop(window_id, None) action = self.os_window_death_actions.pop(os_window_id, None) if action is not None: action() def notify_on_os_window_death(self, address): import socket s = socket.socket(family=socket.AF_UNIX) with suppress(Exception): s.connect(address) s.sendall(b'c') with suppress(EnvironmentError): s.shutdown(socket.SHUT_RDWR) s.close() def display_scrollback(self, window, data, cmd): tab = self.active_tab if tab is not None and window.overlay_for is None: tab.new_special_window( SpecialWindow( cmd, data, _('History'), overlay_for=window.id)) def edit_config_file(self, *a): confpath = prepare_config_file_for_editing() # On macOS vim fails to handle SIGWINCH if it occurs early, so add a # small delay. cmd = [kitty_exe(), '+runpy', 'import os, sys, time; time.sleep(0.05); os.execvp(sys.argv[1], sys.argv[1:])'] + get_editor() + [confpath] self.new_os_window(*cmd) def get_output(self, source_window, num_lines=1): output = '' s = source_window.screen if num_lines is None: num_lines = s.lines for i in range(min(num_lines, s.lines)): output += str(s.linebuf.line(i)) return output def _run_kitten(self, kitten, args=(), input_data=None, window=None, custom_callback=None, action_on_removal=None): orig_args, args = list(args), list(args) from kittens.runner import create_kitten_handler end_kitten = create_kitten_handler(kitten, orig_args) if window is None: w = self.active_window tab = self.active_tab else: w = window tab = w.tabref() if end_kitten.no_ui: end_kitten(None, getattr(w, 'id', None), self) return if w is not None and tab is not None and w.overlay_for is None: args[0:0] = [config_dir, kitten] if input_data is None: type_of_input = end_kitten.type_of_input if type_of_input in ('text', 'history', 'ansi', 'ansi-history', 'screen', 'screen-history', 'screen-ansi', 'screen-ansi-history'): data = w.as_text( as_ansi='ansi' in type_of_input, add_history='history' in type_of_input, add_wrap_markers='screen' in type_of_input ).encode('utf-8') elif type_of_input is None: data = None else: raise ValueError('Unknown type_of_input: {}'.format(type_of_input)) else: data = input_data if isinstance(data, str): data = data.encode('utf-8') copts = {k: self.opts[k] for k in ('select_by_word_characters', 'open_url_with')} overlay_window = tab.new_special_window( SpecialWindow( [kitty_exe(), '+runpy', 'from kittens.runner import main; main()'] + args, stdin=data, env={ 'KITTY_COMMON_OPTS': json.dumps(copts), 'KITTY_CHILD_PID': w.child.pid, 'PYTHONWARNINGS': 'ignore', 'OVERLAID_WINDOW_LINES': str(w.screen.lines), 'OVERLAID_WINDOW_COLS': str(w.screen.columns), }, cwd=w.cwd_of_child, overlay_for=w.id ), copy_colors_from=w ) wid = w.id overlay_window.action_on_close = partial(self.on_kitten_finish, wid, custom_callback or end_kitten) if action_on_removal is not None: overlay_window.action_on_removal = lambda *a: action_on_removal(wid, self) return overlay_window def kitten(self, kitten, *args): import shlex cmdline = args[0] if args else '' args = shlex.split(cmdline) if cmdline else [] self._run_kitten(kitten, args) def on_kitten_finish(self, target_window_id, end_kitten, source_window): output = self.get_output(source_window, num_lines=None) from kittens.runner import deserialize data = deserialize(output) if data is not None: end_kitten(data, target_window_id, self) def input_unicode_character(self): self._run_kitten('unicode_input') def set_tab_title(self): tab = self.active_tab if tab: args = ['--name=tab-title', '--message', _('Enter the new title for this tab below.'), 'do_set_tab_title', str(tab.id)] self._run_kitten('ask', args) def show_error(self, title, msg): self._run_kitten('show_error', args=['--title', title], input_data=msg) def do_set_tab_title(self, title, tab_id): tm = self.active_tab_manager if tm is not None and title: tab_id = int(tab_id) for tab in tm.tabs: if tab.id == tab_id: tab.set_title(title) break def kitty_shell(self, window_type): cmd = ['@', kitty_exe(), '@'] if window_type == 'tab': self._new_tab(cmd) elif window_type == 'os_window': os_window_id = self._new_os_window(cmd) self.os_window_map[os_window_id] elif window_type == 'overlay': w = self.active_window tab = self.active_tab if w is not None and tab is not None and w.overlay_for is None: tab.new_special_window(SpecialWindow(cmd, overlay_for=w.id)) else: self._new_window(cmd) def switch_focus_to(self, window_idx): tab = self.active_tab tab.set_active_window_idx(window_idx) def open_url(self, url, program=None, cwd=None): if url: if isinstance(program, str): program = to_cmdline(program) open_url(url, program or self.opts.open_url_with, cwd=cwd) def open_url_lines(self, lines, program=None): self.open_url(''.join(lines), program) def destroy(self): self.shutting_down = True self.child_monitor.shutdown_monitor() self.set_update_check_process() self.update_check_process = None del self.child_monitor for tm in self.os_window_map.values(): tm.destroy() self.os_window_map = {} destroy_global_data() def paste_to_active_window(self, text): if text: w = self.active_window if w is not None: w.paste(text) def paste_from_clipboard(self): text = get_clipboard_string() self.paste_to_active_window(text) def paste_from_selection(self): text = get_primary_selection() if supports_primary_selection else get_clipboard_string() self.paste_to_active_window(text) def set_primary_selection(self): w = self.active_window if w is not None and not w.destroyed: text = w.text_for_selection() if text: set_primary_selection(text) if self.opts.copy_on_select: self.copy_to_buffer(self.opts.copy_on_select) def copy_to_buffer(self, buffer_name): w = self.active_window if w is not None and not w.destroyed: text = w.text_for_selection() if text: if buffer_name == 'clipboard': set_clipboard_string(text) elif buffer_name == 'primary': set_primary_selection(text) else: self.clipboard_buffers[buffer_name] = text def paste_from_buffer(self, buffer_name): if buffer_name == 'clipboard': text = get_clipboard_string() elif buffer_name == 'primary': text = get_primary_selection() else: text = self.clipboard_buffers.get(buffer_name) if text: self.paste_to_active_window(text) def goto_tab(self, tab_num): tm = self.active_tab_manager if tm is not None: tm.goto_tab(tab_num - 1) def set_active_tab(self, tab): tm = self.active_tab_manager if tm is not None: return tm.set_active_tab(tab) return False def next_tab(self): tm = self.active_tab_manager if tm is not None: tm.next_tab() def previous_tab(self): tm = self.active_tab_manager if tm is not None: tm.next_tab(-1) prev_tab = previous_tab def process_stdin_source(self, window=None, stdin=None): w = window or self.active_window env = None if stdin: add_wrap_markers = stdin.endswith('_wrap') if add_wrap_markers: stdin = stdin[:-len('_wrap')] stdin = data_for_at(w, stdin, add_wrap_markers=add_wrap_markers) if stdin is not None: pipe_data = w.pipe_data(stdin, has_wrap_markers=add_wrap_markers) if w else {} if pipe_data: env = { 'KITTY_PIPE_DATA': '{scrolled_by}:{cursor_x},{cursor_y}:{lines},{columns}'.format(**pipe_data) } stdin = stdin.encode('utf-8') return env, stdin def data_for_at(self, which, window=None, add_wrap_markers=False): return data_for_at(window or self.active_window, which, add_wrap_markers=add_wrap_markers) def special_window_for_cmd(self, cmd, window=None, stdin=None, cwd_from=None, as_overlay=False): w = window or self.active_window env, stdin = self.process_stdin_source(w, stdin) cmdline = [] for arg in cmd: if arg == '@selection': arg = data_for_at(w, arg) if not arg: continue cmdline.append(arg) overlay_for = w.id if as_overlay and w.overlay_for is None else None return SpecialWindow(cmd, stdin, cwd_from=cwd_from, overlay_for=overlay_for, env=env) def run_background_process(self, cmd, cwd=None, env=None, stdin=None, cwd_from=None): import subprocess if cwd_from: with suppress(Exception): cwd = cwd_of_process(cwd_from) if stdin: r, w = safe_pipe(False) try: subprocess.Popen(cmd, env=env, stdin=r, cwd=cwd) except Exception: os.close(w) else: thread_write(w, stdin) finally: os.close(r) else: subprocess.Popen(cmd, env=env, cwd=cwd) def pipe(self, source, dest, exe, *args): cmd = [exe] + list(args) window = self.active_window cwd_from = window.child.pid_for_cwd if window else None def create_window(): return self.special_window_for_cmd( cmd, stdin=source, as_overlay=dest == 'overlay', cwd_from=cwd_from) if dest == 'overlay' or dest == 'window': tab = self.active_tab if tab is not None: return tab.new_special_window(create_window()) elif dest == 'tab': tm = self.active_tab_manager if tm is not None: tm.new_tab(special_window=create_window(), cwd_from=cwd_from) elif dest == 'os_window': self._new_os_window(create_window(), cwd_from=cwd_from) elif dest in ('clipboard', 'primary'): env, stdin = self.process_stdin_source(stdin=source, window=window) if stdin: func = set_clipboard_string if dest == 'clipboard' else set_primary_selection func(stdin) else: env, stdin = self.process_stdin_source(stdin=source, window=window) self.run_background_process(cmd, cwd_from=cwd_from, stdin=stdin, env=env) def args_to_special_window(self, args, cwd_from=None): args = list(args) stdin = None w = self.active_window if args[0].startswith('@') and args[0] != '@': stdin = data_for_at(w, args[0]) or None if stdin is not None: stdin = stdin.encode('utf-8') del args[0] cmd = [] for arg in args: if arg == '@selection': arg = data_for_at(w, arg) if not arg: continue cmd.append(arg) return SpecialWindow(cmd, stdin, cwd_from=cwd_from) def _new_tab(self, args, cwd_from=None, as_neighbor=False): special_window = None if args: if isinstance(args, SpecialWindowInstance): special_window = args else: special_window = self.args_to_special_window(args, cwd_from=cwd_from) tm = self.active_tab_manager if tm is not None: return tm.new_tab(special_window=special_window, cwd_from=cwd_from, as_neighbor=as_neighbor) def _create_tab(self, args, cwd_from=None): as_neighbor = False if args and args[0].startswith('!'): as_neighbor = 'neighbor' in args[0][1:].split(',') args = args[1:] self._new_tab(args, as_neighbor=as_neighbor, cwd_from=cwd_from) def new_tab(self, *args): self._create_tab(args) def new_tab_with_cwd(self, *args): w = self.active_window_for_cwd cwd_from = w.child.pid_for_cwd if w is not None else None self._create_tab(args, cwd_from=cwd_from) def new_tab_with_wd(self, wd): special_window = SpecialWindow(None, cwd=wd) self._new_tab(special_window) def _new_window(self, args, cwd_from=None): tab = self.active_tab if tab is not None: allow_remote_control = False location = None if args and args[0].startswith('!'): location = args[0][1:].lower() args = args[1:] if args and args[0] == '@': args = args[1:] allow_remote_control = True if args: return tab.new_special_window( self.args_to_special_window(args, cwd_from=cwd_from), location=location, allow_remote_control=allow_remote_control) else: return tab.new_window(cwd_from=cwd_from, location=location, allow_remote_control=allow_remote_control) def new_window(self, *args): self._new_window(args) def new_window_with_cwd(self, *args): w = self.active_window_for_cwd if w is None: return self.new_window(*args) cwd_from = w.child.pid_for_cwd if w is not None else None self._new_window(args, cwd_from=cwd_from) def launch(self, *args): from kitty.launch import parse_launch_args, launch opts, args = parse_launch_args(args) launch(self, opts, args) def move_tab_forward(self): tm = self.active_tab_manager if tm is not None: tm.move_tab(1) def move_tab_backward(self): tm = self.active_tab_manager if tm is not None: tm.move_tab(-1) def disable_ligatures_in(self, where, strategy): if isinstance(where, str): windows = () if where == 'active': if self.active_window is not None: windows = (self.active_window,) elif where == 'all': windows = self.all_windows elif where == 'tab': if self.active_tab is not None: windows = tuple(self.active_tab) else: windows = where for window in windows: window.screen.disable_ligatures = strategy window.refresh() def patch_colors(self, spec, cursor_text_color, configured=False): if configured: for k, v in spec.items(): if hasattr(self.opts, k): setattr(self.opts, k, color_from_int(v)) if cursor_text_color is not False: if isinstance(cursor_text_color, int): cursor_text_color = color_from_int(cursor_text_color) self.opts.cursor_text_color = cursor_text_color for tm in self.all_tab_managers: tm.tab_bar.patch_colors(spec) patch_global_colors(spec, configured) def safe_delete_temp_file(self, path): if is_path_in_temp_dir(path): with suppress(FileNotFoundError): os.remove(path) def set_update_check_process(self, process=None): if self.update_check_process is not None: with suppress(Exception): if self.update_check_process.poll() is None: self.update_check_process.kill() self.update_check_process = process def on_monitored_pid_death(self, pid, exit_status): update_check_process = getattr(self, 'update_check_process', None) if update_check_process is not None and pid == update_check_process.pid: self.update_check_process = None from .update_check import process_current_release try: raw = update_check_process.stdout.read().decode('utf-8') except Exception as e: log_error('Failed to read data from update check process, with error: {}'.format(e)) else: try: process_current_release(raw) except Exception as e: log_error('Failed to process update check data {!r}, with error: {}'.format(raw, e)) def notification_activated(self, identifier): if identifier == 'new-version': from .update_check import notification_activated notification_activated() def dbus_notification_callback(self, activated, *args): from .notify import dbus_notification_created, dbus_notification_activated if activated: dbus_notification_activated(*args) else: dbus_notification_created(*args) def show_bad_config_lines(self, bad_lines): def format_bad_line(bad_line): return '{}:{} in line: {}\n'.format(bad_line.number, bad_line.exception, bad_line.line) msg = '\n'.join(map(format_bad_line, bad_lines)).rstrip() self.show_error(_('Errors in kitty.conf'), msg) def set_colors(self, *args): from .cmds import parse_subcommand_cli, cmd_set_colors, set_colors opts, items = parse_subcommand_cli(cmd_set_colors, ['set-colors'] + list(args)) payload = cmd_set_colors(None, opts, items) set_colors(self, self.active_window, payload) def _move_window_to(self, window=None, target_tab_id=None, target_os_window_id=None): window = window or self.active_window if not window: return src_tab = self.tab_for_window(window) if src_tab is None: return if target_os_window_id == 'new': target_os_window_id = self.add_os_window() tm = self.os_window_map[target_os_window_id] target_tab = tm.new_tab(empty_tab=True) else: target_os_window_id = target_os_window_id or current_os_window() if target_tab_id == 'new': tm = self.os_window_map[target_os_window_id] target_tab = tm.new_tab(empty_tab=True) else: for tab in self.all_tabs: if tab.id == target_tab_id: target_tab = tab target_os_window_id = tab.os_window_id break else: return underlaid_window, overlaid_window = src_tab.detach_window(window) if underlaid_window: target_tab.attach_window(underlaid_window) if overlaid_window: target_tab.attach_window(overlaid_window) self._cleanup_tab_after_window_removal(src_tab) target_tab.make_active() def _move_tab_to(self, tab=None, target_os_window_id=None): tab = tab or self.active_tab if tab is None: return if target_os_window_id is None: target_os_window_id = self.add_os_window() tm = self.os_window_map[target_os_window_id] target_tab = tm.new_tab(empty_tab=True) target_tab.take_over_from(tab) self._cleanup_tab_after_window_removal(tab) target_tab.make_active() def detach_window(self, *args): if not args or args[0] == 'new': return self._move_window_to(target_os_window_id='new') if args[0] == 'new-tab': return self._move_window_to(target_tab_id='new') lines = [ 'Choose a tab to move the window to', '' ] tab_id_map = {} current_tab = self.active_tab for i, tab in enumerate(self.all_tabs): if tab is not current_tab: tab_id_map[i + 1] = tab.id lines.append('{} {}'.format(i + 1, tab.title)) new_idx = len(tab_id_map) + 1 tab_id_map[new_idx] = 'new' lines.append('{} {}'.format(new_idx, 'New tab')) new_idx = len(tab_id_map) + 1 tab_id_map[new_idx] = None lines.append('{} {}'.format(new_idx, 'New OS Window')) def done(data, target_window_id, self): done.tab_id = tab_id_map[int(data['match'][0].partition(' ')[0])] def done2(target_window_id, self): tab_id = done.tab_id target_window = None for w in self.all_windows: if w.id == target_window_id: target_window = w break if tab_id is None: self._move_window_to(window=target_window, target_os_window_id='new') else: self._move_window_to(window=target_window, target_tab_id=tab_id) self._run_kitten( 'hints', args=('--type=regex', r'--regex=(?m)^\d+ .+$',), input_data='\r\n'.join(lines).encode('utf-8'), custom_callback=done, action_on_removal=done2) def detach_tab(self, *args): if not args or args[0] == 'new': return self._move_tab_to() lines = [ 'Choose an OS window to move the tab to', '' ] os_window_id_map = {} current_os_window = getattr(self.active_tab, 'os_window_id', 0) for i, osw in enumerate(self.os_window_map): tm = self.os_window_map[osw] if current_os_window != osw and tm.active_tab and tm.active_tab: os_window_id_map[i + 1] = osw lines.append('{} {}'.format(i + 1, tm.active_tab.title)) new_idx = len(os_window_id_map) + 1 os_window_id_map[new_idx] = None lines.append('{} {}'.format(new_idx, 'New OS Window')) def done(data, target_window_id, self): done.os_window_id = os_window_id_map[int(data['match'][0].partition(' ')[0])] def done2(target_window_id, self): os_window_id = done.os_window_id target_tab = self.active_tab for w in self.all_windows: if w.id == target_window_id: target_tab = w.tabref() break if target_tab and target_tab.os_window_id == os_window_id: return self._move_tab_to(tab=target_tab, target_os_window_id=os_window_id) self._run_kitten( 'hints', args=('--type=regex', r'--regex=(?m)^\d+ .+$',), input_data='\r\n'.join(lines).encode('utf-8'), custom_callback=done, action_on_removal=done2) kitty-0.15.0/kitty/cell_fragment.glsl000066400000000000000000000123371356737523400176170ustar00rootroot00000000000000#version GLSL_VERSION #define WHICH_PROGRAM #define NOT_TRANSPARENT #if defined(SIMPLE) || defined(BACKGROUND) || defined(SPECIAL) #define NEEDS_BACKROUND #endif #if defined(SIMPLE) || defined(FOREGROUND) #define NEEDS_FOREGROUND #endif #ifdef NEEDS_BACKROUND in vec3 background; #if defined(TRANSPARENT) || defined(SPECIAL) in float bg_alpha; #endif #endif #ifdef NEEDS_FOREGROUND uniform sampler2DArray sprites; in float effective_text_alpha; in vec3 sprite_pos; in vec3 underline_pos; in vec3 cursor_pos; in vec3 strike_pos; in vec3 foreground; in vec4 cursor_color_vec; in vec3 decoration_fg; in float colored_sprite; #endif out vec4 final_color; // Util functions {{{ vec4 alpha_blend(vec3 over, float over_alpha, vec3 under, float under_alpha) { // Alpha blend two colors returning the resulting color pre-multiplied by its alpha // and its alpha. // See https://en.wikipedia.org/wiki/Alpha_compositing float alpha = mix(under_alpha, 1.0f, over_alpha); vec3 combined_color = mix(under * under_alpha, over, over_alpha); return vec4(combined_color, alpha); } vec3 premul_blend(vec3 over, float over_alpha, vec3 under) { return over + (1.0f - over_alpha) * under; } vec4 alpha_blend_premul(vec3 over, float over_alpha, vec3 under, float under_alpha) { // Same as alpha_blend() except that it assumes over and under are both premultiplied. float alpha = mix(under_alpha, 1.0f, over_alpha); return vec4(premul_blend(over, over_alpha, under), alpha); } vec4 blend_onto_opaque_premul(vec3 over, float over_alpha, vec3 under) { // same as alpha_blend_premul with under_alpha = 1 outputs a blended color // with alpha 1 which is effectively pre-multiplied since alpha is 1 return vec4(premul_blend(over, over_alpha, under), 1.0); } // }}} /* * Explanation of rendering: * There are a couple of cases, in order of increasing complexity: * 1) Simple -- this path is used when there are either no images, or all images are * drawn on top of text and the background is opaque. In this case, there is a single pass, * of this shader with cell foreground and background colors blended directly. * Expected output is a color premultiplied by alpha, with an alpha specified as well. * * 2) Interleaved -- this path is used if background is not opaque and there are images or * if the background is opaque but there are images under text. Rendering happens in * multiple passes drawing the background and foreground separately and blending. * * 2a) Opaque bg with images under text * There are multiple passes, each pass is blended onto the previous using the opaque blend func (alpha, 1- alpha): * 1) Draw only the background -- expected output is color with alpha 1 * 2) Draw the images that are supposed to be below text. This happens in the graphics shader * 3) Draw the special cells (selection/cursor). Output is same as from step 1, with bg_alpha 1 for special cells and 0 otherwise * 4) Draw the foreground -- expected output is color with alpha which is blended using the opaque blend func * 5) Draw the images that are supposed to be above text again in the graphics shader * * 2b) Transparent bg with images * First everything is rendered into a framebuffer, and then the framebauffer is blended onto * the screen. The framebuffer is needed because it allows access to the background color pixels * to blend with the image pixels. The steps are basically the same as for 2a. * * In this shader exactly *one* of SIMPLE, SPECIAL, FOREGROUND or BACKGROUND will be defined, corresponding * to the appropriate rendering pass from above. */ #ifdef NEEDS_FOREGROUND vec4 calculate_foreground() { // returns the effective foreground color in pre-multiplied form vec4 text_fg = texture(sprites, sprite_pos); vec3 fg = mix(foreground, text_fg.rgb, colored_sprite); float text_alpha = text_fg.a; float underline_alpha = texture(sprites, underline_pos).a; float strike_alpha = texture(sprites, strike_pos).a; float cursor_alpha = texture(sprites, cursor_pos).a; // Since strike and text are the same color, we simply add the alpha values float combined_alpha = min(text_alpha + strike_alpha, 1.0f); // Underline color might be different, so alpha blend vec4 ans = alpha_blend(fg, combined_alpha * effective_text_alpha, decoration_fg, underline_alpha * effective_text_alpha); return mix(ans, cursor_color_vec, cursor_alpha); } #endif void main() { #ifdef SIMPLE vec4 fg = calculate_foreground(); #ifdef TRANSPARENT final_color = alpha_blend_premul(fg.rgb, fg.a, background.rgb * bg_alpha, bg_alpha); #else final_color = blend_onto_opaque_premul(fg.rgb, fg.a, background.rgb); #endif #endif #ifdef SPECIAL #ifdef TRANSPARENT final_color = vec4(background.rgb * bg_alpha, bg_alpha); #else final_color = vec4(background.rgb, bg_alpha); #endif #endif #ifdef BACKGROUND #ifdef TRANSPARENT final_color = vec4(background.rgb * bg_alpha, bg_alpha); #else final_color = vec4(background.rgb, 1.0f); #endif #endif #ifdef FOREGROUND vec4 fg = calculate_foreground(); // pre-multiplied foreground #ifdef TRANSPARENT final_color = fg; #else final_color = vec4(fg.rgb / fg.a, fg.a); #endif #endif } kitty-0.15.0/kitty/cell_vertex.glsl000066400000000000000000000160771356737523400173360ustar00rootroot00000000000000#version GLSL_VERSION #define WHICH_PROGRAM #define NOT_TRANSPARENT #define DECORATION_SHIFT {DECORATION_SHIFT} #define REVERSE_SHIFT {REVERSE_SHIFT} #define STRIKE_SHIFT {STRIKE_SHIFT} #define DIM_SHIFT {DIM_SHIFT} #define USE_SELECTION_FG // Inputs {{{ layout(std140) uniform CellRenderData { float xstart, ystart, dx, dy, sprite_dx, sprite_dy, background_opacity, cursor_text_uses_bg; uint default_fg, default_bg, highlight_fg, highlight_bg, cursor_color, cursor_text_color, url_color, url_style, inverted; uint xnum, ynum, cursor_fg_sprite_idx; float cursor_x, cursor_y, cursor_w; uint color_table[256]; }; // Have to use fixed locations here as all variants of the cell program share the same VAO layout(location=0) in uvec3 colors; layout(location=1) in uvec4 sprite_coords; layout(location=2) in uint is_selected; const int fg_index_map[] = int[3](0, 1, 0); const uvec2 cell_pos_map[] = uvec2[4]( uvec2(1, 0), // right, top uvec2(1, 1), // right, bottom uvec2(0, 1), // left, bottom uvec2(0, 0) // left, top ); // }}} #if defined(SIMPLE) || defined(BACKGROUND) || defined(SPECIAL) #define NEEDS_BACKROUND #endif #if defined(SIMPLE) || defined(FOREGROUND) #define NEEDS_FOREGROUND #endif #ifdef NEEDS_BACKROUND out vec3 background; #if defined(TRANSPARENT) || defined(SPECIAL) out float bg_alpha; #endif #endif #ifdef NEEDS_FOREGROUND uniform float inactive_text_alpha; uniform float dim_opacity; out vec3 sprite_pos; out vec3 underline_pos; out vec3 cursor_pos; out vec4 cursor_color_vec; out vec3 strike_pos; out vec3 foreground; out vec3 decoration_fg; out float colored_sprite; out float effective_text_alpha; #endif // Utility functions {{{ const uint BYTE_MASK = uint(0xFF); const uint Z_MASK = uint(0xFFF); const uint COLOR_MASK = uint(0x4000); const uint ZERO = uint(0); const uint ONE = uint(1); const uint TWO = uint(2); const uint THREE = uint(3); const uint FOUR = uint(4); vec3 color_to_vec(uint c) { uint r, g, b; r = (c >> 16) & BYTE_MASK; g = (c >> 8) & BYTE_MASK; b = c & BYTE_MASK; return vec3(float(r) / 255.0, float(g) / 255.0, float(b) / 255.0); } uint resolve_color(uint c, uint defval) { // Convert a cell color to an actual color based on the color table int t = int(c & BYTE_MASK); uint r; switch(t) { case 1: r = color_table[(c >> 8) & BYTE_MASK]; break; case 2: r = c >> 8; break; default: r = defval; } return r; } vec3 to_color(uint c, uint defval) { return color_to_vec(resolve_color(c, defval)); } vec3 to_sprite_pos(uvec2 pos, uint x, uint y, uint z) { vec2 s_xpos = vec2(x, float(x) + 1.0) * sprite_dx; vec2 s_ypos = vec2(y, float(y) + 1.0) * sprite_dy; return vec3(s_xpos[pos.x], s_ypos[pos.y], z); } vec3 choose_color(float q, vec3 a, vec3 b) { return mix(b, a, q); } float are_integers_equal(float a, float b) { // return 1 if equal otherwise 0 float delta = abs(a - b); // delta can be 0, 1 or larger return step(delta, 0.5); // 0 if 0.5 < delta else 1 } float is_cursor(uint xi, uint y) { float x = float(xi); float y_equal = are_integers_equal(float(y), cursor_y); float x1_equal = are_integers_equal(x, cursor_x); float x2_equal = are_integers_equal(x, cursor_w); float x_equal = step(0.5, x1_equal + x2_equal); return step(2.0, x_equal + y_equal); } // }}} void main() { // set cell vertex position {{{ uint instance_id = uint(gl_InstanceID); /* The current cell being rendered */ uint r = instance_id / xnum; uint c = instance_id - r * xnum; /* The position of this vertex, at a corner of the cell */ float left = xstart + c * dx; float top = ystart - r * dy; vec2 xpos = vec2(left, left + dx); vec2 ypos = vec2(top, top - dy); uvec2 pos = cell_pos_map[gl_VertexID]; gl_Position = vec4(xpos[pos.x], ypos[pos.y], 0, 1); // }}} // set cell color indices {{{ uvec2 default_colors = uvec2(default_fg, default_bg); uint text_attrs = sprite_coords[3]; uint is_inverted = ((text_attrs >> REVERSE_SHIFT) & ONE) + inverted; int fg_index = fg_index_map[is_inverted]; int bg_index = 1 - fg_index; float cell_has_cursor = is_cursor(c, r); float is_block_cursor = step(float(cursor_fg_sprite_idx), 0.5); float cell_has_block_cursor = cell_has_cursor * is_block_cursor; vec3 bg = to_color(colors[bg_index], default_colors[bg_index]); // }}} // Foreground {{{ #ifdef NEEDS_FOREGROUND // The character sprite being rendered sprite_pos = to_sprite_pos(pos, sprite_coords.x, sprite_coords.y, sprite_coords.z & Z_MASK); colored_sprite = float((sprite_coords.z & COLOR_MASK) >> 14); // Foreground uint resolved_fg = resolve_color(colors[fg_index], default_colors[fg_index]); foreground = color_to_vec(resolved_fg); float has_dim = float((text_attrs >> DIM_SHIFT) & ONE); effective_text_alpha = inactive_text_alpha * mix(1.0, dim_opacity, has_dim); float in_url = float((is_selected & TWO) >> 1); decoration_fg = choose_color(in_url, color_to_vec(url_color), to_color(colors[2], resolved_fg)); #ifdef USE_SELECTION_FG // Selection vec3 selection_color = color_to_vec(highlight_fg); foreground = choose_color(float(is_selected & ONE), selection_color, foreground); decoration_fg = choose_color(float(is_selected & ONE), selection_color, decoration_fg); #endif // Underline and strike through (rendered via sprites) underline_pos = choose_color(in_url, to_sprite_pos(pos, url_style, ZERO, ZERO), to_sprite_pos(pos, (text_attrs >> DECORATION_SHIFT) & THREE, ZERO, ZERO)); strike_pos = to_sprite_pos(pos, ((text_attrs >> STRIKE_SHIFT) & ONE) * FOUR, ZERO, ZERO); // Cursor cursor_color_vec = vec4(color_to_vec(cursor_color), 1.0); vec3 final_cursor_text_color = mix(color_to_vec(cursor_text_color), bg, cursor_text_uses_bg); foreground = choose_color(cell_has_block_cursor, final_cursor_text_color, foreground); decoration_fg = choose_color(cell_has_block_cursor, final_cursor_text_color, decoration_fg); cursor_pos = to_sprite_pos(pos, cursor_fg_sprite_idx * uint(cell_has_cursor), ZERO, ZERO); #endif // }}} // Background {{{ #ifdef NEEDS_BACKROUND #if defined(BACKGROUND) background = bg; #endif #if defined(TRANSPARENT) && !defined(SPECIAL) // If the background color is default, set its opacity to background_opacity, otherwise it should be opaque bg_alpha = step(0.5, float(colors[bg_index] & BYTE_MASK)); // Cursor must not be affected by background_opacity bg_alpha = mix(bg_alpha, 1.0, cell_has_block_cursor); bg_alpha = bg_alpha + (1.0f - bg_alpha) * background_opacity; #endif #if defined(SPECIAL) || defined(SIMPLE) // Selection and cursor bg = choose_color(float(is_selected & ONE), color_to_vec(highlight_bg), bg); background = choose_color(cell_has_block_cursor, color_to_vec(cursor_color), bg); #ifdef SPECIAL // bg_alpha should be 1 if cursor/selection otherwise 0 bg_alpha = mix(0.0, 1.0, step(0.5, float(is_selected & ONE) + cell_has_block_cursor)); #endif #endif #endif // }}} } kitty-0.15.0/kitty/charsets.c000066400000000000000000000406651356737523400161170ustar00rootroot00000000000000/* * consolemap.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ // Taken from consolemap.c in the linux vt driver sourcecode #include #include #define UTF8_ACCEPT 0 #define UTF8_REJECT 1 static uint32_t charset_translations[5][256] = { /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */ { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff }, /* VT100 graphics mapped to Unicode */ { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x2192, 0x2190, 0x2191, 0x2193, 0x002f, 0x2588, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x00a0, 0x25c6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1, 0x2591, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c, 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff }, /* IBM Codepage 437 mapped to Unicode */ { 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c, 0x25b6, 0x25c0, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8, 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302, 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 }, // VAX 42 map { 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c, 0x25b6, 0x25c0, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8, 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc, 0x0020, 0x043b, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x0435, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0441, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0435, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x043a, 0x0070, 0x0071, 0x0442, 0x0073, 0x043b, 0x0435, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302, 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 }, /* UK mapping, same as 8-bit Latin1 except the pound sign replaces # */ { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x00a3, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff }, }; uint32_t* translation_table(uint32_t which) { switch(which){ case 'B': return charset_translations[0]; case '0': return charset_translations[1]; case 'U': return charset_translations[2]; case 'V': return charset_translations[3]; case 'A': return charset_translations[4]; default: return charset_translations[0]; } } uint32_t *latin1_charset = charset_translations[0]; // UTF-8 decode taken from: https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ static const uint8_t utf8_data[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f 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, // a0..bf 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff 0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2 1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4 1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8 }; uint32_t decode_utf8(uint32_t* state, uint32_t* codep, uint8_t byte) { uint32_t type = utf8_data[byte]; *codep = (*state != UTF8_ACCEPT) ? (byte & 0x3fu) | (*codep << 6) : (0xff >> type) & (byte); *state = utf8_data[256 + *state*16 + type]; return *state; } size_t decode_utf8_string(const char *src, size_t sz, uint32_t *dest) { // dest must be a zeroed array of size at least sz uint32_t codep = 0, state = 0, prev = UTF8_ACCEPT; size_t i, d; for (i = 0, d = 0; i < sz; i++) { switch(decode_utf8(&state, &codep, src[i])) { case UTF8_ACCEPT: dest[d++] = codep; break; case UTF8_REJECT: state = UTF8_ACCEPT; if (prev != UTF8_ACCEPT && i > 0) i--; break; } prev = state; } return d; } unsigned int encode_utf8(uint32_t ch, char* dest) { if (ch < 0x80) { dest[0] = (char)ch; return 1; } if (ch < 0x800) { dest[0] = (ch>>6) | 0xC0; dest[1] = (ch & 0x3F) | 0x80; return 2; } if (ch < 0x10000) { dest[0] = (ch>>12) | 0xE0; dest[1] = ((ch>>6) & 0x3F) | 0x80; dest[2] = (ch & 0x3F) | 0x80; return 3; } if (ch < 0x110000) { dest[0] = (ch>>18) | 0xF0; dest[1] = ((ch>>12) & 0x3F) | 0x80; dest[2] = ((ch>>6) & 0x3F) | 0x80; dest[3] = (ch & 0x3F) | 0x80; return 4; } return 0; } // Base64 // standard decoding using + and / with = being the padding character static uint8_t b64_decoding_table[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; const char* base64_decode(const uint32_t *src, size_t src_sz, uint8_t *dest, size_t dest_capacity, size_t *dest_sz) { if (!src_sz) { *dest_sz = 0; return NULL; } if (src_sz % 4 != 0) return "base64 encoded data must have a length that is a multiple of four"; *dest_sz = (src_sz / 4) * 3; if (src[src_sz - 1] == '=') (*dest_sz)--; if (src[src_sz - 2] == '=') (*dest_sz)--; if (*dest_sz > dest_capacity) return "output buffer too small"; for (size_t i = 0, j = 0; i < src_sz;) { uint32_t sextet_a = src[i] == '=' ? 0 & i++ : b64_decoding_table[src[i++] & 0xff]; uint32_t sextet_b = src[i] == '=' ? 0 & i++ : b64_decoding_table[src[i++] & 0xff]; uint32_t sextet_c = src[i] == '=' ? 0 & i++ : b64_decoding_table[src[i++] & 0xff]; uint32_t sextet_d = src[i] == '=' ? 0 & i++ : b64_decoding_table[src[i++] & 0xff]; uint32_t triple = (sextet_a << 3 * 6) + (sextet_b << 2 * 6) + (sextet_c << 1 * 6) + (sextet_d << 0 * 6); if (j < *dest_sz) dest[j++] = (triple >> 2 * 8) & 0xFF; if (j < *dest_sz) dest[j++] = (triple >> 1 * 8) & 0xFF; if (j < *dest_sz) dest[j++] = (triple >> 0 * 8) & 0xFF; } return NULL; } kitty-0.15.0/kitty/charsets.h000066400000000000000000000005421356737523400161120ustar00rootroot00000000000000/* * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include #include uint32_t decode_utf8(uint32_t*, uint32_t*, uint8_t byte); size_t decode_utf8_string(const char *src, size_t sz, uint32_t *dest); unsigned int encode_utf8(uint32_t ch, char* dest); kitty-0.15.0/kitty/child-monitor.c000066400000000000000000001640341356737523400170500ustar00rootroot00000000000000/* * child-monitor.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "loop-utils.h" #include "state.h" #include "threading.h" #include "screen.h" #include "fonts.h" #include "charsets.h" #include "monotonic.h" #include #include #include #include #include #include #include #include extern PyTypeObject Screen_Type; #ifdef DEBUG_EVENT_LOOP #define EVDBG(...) log_event(__VA_ARGS__) #else #define EVDBG(...) #endif #define EXTRA_FDS 2 #ifndef MSG_NOSIGNAL // Apple does not implement MSG_NOSIGNAL #define MSG_NOSIGNAL 0 #endif #define USE_RENDER_FRAMES (global_state.has_render_frames && OPT(sync_to_monitor)) static void (*parse_func)(Screen*, PyObject*, monotonic_t); typedef struct { char *data; size_t sz; int fd; } Message; typedef struct { PyObject_HEAD PyObject *dump_callback, *update_screen, *death_notify; unsigned int count; bool shutting_down; pthread_t io_thread, talk_thread; int talk_fd, listen_fd; Message *messages; size_t messages_capacity, messages_count; LoopData io_loop_data; } ChildMonitor; typedef struct { Screen *screen; bool needs_removal; int fd; unsigned long id; pid_t pid; } Child; static const Child EMPTY_CHILD = {0}; #define screen_mutex(op, which) \ pthread_mutex_##op(&screen->which##_buf_lock); #define children_mutex(op) \ pthread_mutex_##op(&children_lock); #define peer_mutex(op) \ pthread_mutex_##op(&talk_data.peer_lock); static Child children[MAX_CHILDREN] = {{0}}; static Child scratch[MAX_CHILDREN] = {{0}}; static Child add_queue[MAX_CHILDREN] = {{0}}, remove_queue[MAX_CHILDREN] = {{0}}; static unsigned long remove_notify[MAX_CHILDREN] = {0}; static size_t add_queue_count = 0, remove_queue_count = 0; static struct pollfd fds[MAX_CHILDREN + EXTRA_FDS] = {{0}}; static pthread_mutex_t children_lock; static bool kill_signal_received = false; static ChildMonitor *the_monitor = NULL; static uint8_t drain_buf[1024]; typedef struct { pid_t pid; int status; } ReapedPID; static pid_t monitored_pids[256] = {0}; static size_t monitored_pids_count = 0; static ReapedPID reaped_pids[arraysz(monitored_pids)] = {{0}}; static size_t reaped_pids_count = 0; // Main thread functions {{{ #define FREE_CHILD(x) \ Py_CLEAR((x).screen); x = EMPTY_CHILD; #define XREF_CHILD(x, OP) OP(x.screen); #define INCREF_CHILD(x) XREF_CHILD(x, Py_INCREF) #define DECREF_CHILD(x) XREF_CHILD(x, Py_DECREF) // The max time (in secs) to wait for events from the window system // before ticking over the main loop. Negative values mean wait forever. static monotonic_t maximum_wait = -1; static inline void set_maximum_wait(monotonic_t val) { if (val >= 0 && (val < maximum_wait || maximum_wait < 0)) maximum_wait = val; } static PyObject * new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { ChildMonitor *self; PyObject *dump_callback, *death_notify; int talk_fd = -1, listen_fd = -1; int ret; if (the_monitor) { PyErr_SetString(PyExc_RuntimeError, "Can have only a single ChildMonitor instance"); return NULL; } if (!PyArg_ParseTuple(args, "OO|ii", &death_notify, &dump_callback, &talk_fd, &listen_fd)) return NULL; if ((ret = pthread_mutex_init(&children_lock, NULL)) != 0) { PyErr_Format(PyExc_RuntimeError, "Failed to create children_lock mutex: %s", strerror(ret)); return NULL; } self = (ChildMonitor *)type->tp_alloc(type, 0); if (!init_loop_data(&self->io_loop_data)) return PyErr_SetFromErrno(PyExc_OSError); if (!install_signal_handlers(&self->io_loop_data)) return PyErr_SetFromErrno(PyExc_OSError); self->talk_fd = talk_fd; self->listen_fd = listen_fd; if (self == NULL) return PyErr_NoMemory(); self->death_notify = death_notify; Py_INCREF(death_notify); if (dump_callback != Py_None) { self->dump_callback = dump_callback; Py_INCREF(dump_callback); parse_func = parse_worker_dump; } else parse_func = parse_worker; self->count = 0; fds[0].fd = self->io_loop_data.wakeup_read_fd; fds[1].fd = self->io_loop_data.signal_read_fd; fds[0].events = POLLIN; fds[1].events = POLLIN; the_monitor = self; return (PyObject*) self; } static void dealloc(ChildMonitor* self) { pthread_mutex_destroy(&children_lock); Py_CLEAR(self->dump_callback); Py_CLEAR(self->death_notify); Py_TYPE(self)->tp_free((PyObject*)self); while (remove_queue_count) { remove_queue_count--; FREE_CHILD(remove_queue[remove_queue_count]); } while (add_queue_count) { add_queue_count--; FREE_CHILD(add_queue[add_queue_count]); } free_loop_data(&self->io_loop_data); } static void wakeup_io_loop(ChildMonitor *self, bool in_signal_handler) { wakeup_loop(&self->io_loop_data, in_signal_handler, "io_loop"); } static void* io_loop(void *data); static void* talk_loop(void *data); static void send_response(int fd, const char *msg, size_t msg_sz); static void wakeup_talk_loop(bool); static bool talk_thread_started = false; static PyObject * start(PyObject *s, PyObject *a UNUSED) { #define start_doc "start() -> Start the I/O thread" ChildMonitor *self = (ChildMonitor*)s; if (self->talk_fd > -1 || self->listen_fd > -1) { if (pthread_create(&self->talk_thread, NULL, talk_loop, self) != 0) return PyErr_SetFromErrno(PyExc_OSError); talk_thread_started = true; } int ret = pthread_create(&self->io_thread, NULL, io_loop, self); if (ret != 0) return PyErr_SetFromErrno(PyExc_OSError); Py_RETURN_NONE; } static PyObject * wakeup(ChildMonitor *self, PyObject *args UNUSED) { #define wakeup_doc "wakeup() -> wakeup the ChildMonitor I/O thread, forcing it to exit from poll() if it is waiting there." wakeup_io_loop(self, false); Py_RETURN_NONE; } static PyObject * add_child(ChildMonitor *self, PyObject *args) { #define add_child_doc "add_child(id, pid, fd, screen) -> Add a child." children_mutex(lock); if (self->count + add_queue_count >= MAX_CHILDREN) { PyErr_SetString(PyExc_ValueError, "Too many children"); children_mutex(unlock); return NULL; } add_queue[add_queue_count] = EMPTY_CHILD; #define A(attr) &add_queue[add_queue_count].attr if (!PyArg_ParseTuple(args, "kiiO", A(id), A(pid), A(fd), A(screen))) { children_mutex(unlock); return NULL; } #undef A INCREF_CHILD(add_queue[add_queue_count]); add_queue_count++; children_mutex(unlock); wakeup_io_loop(self, false); Py_RETURN_NONE; } bool schedule_write_to_child(unsigned long id, unsigned int num, ...) { ChildMonitor *self = the_monitor; bool found = false; const char *data; size_t sz = 0; va_list ap; va_start(ap, num); for (unsigned int i = 0; i < num; i++) { data = va_arg(ap, const char*); sz += va_arg(ap, size_t); } va_end(ap); children_mutex(lock); for (size_t i = 0; i < self->count; i++) { if (children[i].id == id) { found = true; Screen *screen = children[i].screen; screen_mutex(lock, write); size_t space_left = screen->write_buf_sz - screen->write_buf_used; if (space_left < sz) { if (screen->write_buf_used + sz > 100 * 1024 * 1024) { log_error("Too much data being sent to child with id: %lu, ignoring it", id); screen_mutex(unlock, write); break; } screen->write_buf_sz = screen->write_buf_used + sz; screen->write_buf = PyMem_RawRealloc(screen->write_buf, screen->write_buf_sz); if (screen->write_buf == NULL) { fatal("Out of memory."); } } va_start(ap, num); for (unsigned int i = 0; i < num; i++) { data = va_arg(ap, const char*); size_t dsz = va_arg(ap, size_t); memcpy(screen->write_buf + screen->write_buf_used, data, dsz); screen->write_buf_used += dsz; } va_end(ap); if (screen->write_buf_sz > BUFSIZ && screen->write_buf_used < BUFSIZ) { screen->write_buf_sz = BUFSIZ; screen->write_buf = PyMem_RawRealloc(screen->write_buf, screen->write_buf_sz); if (screen->write_buf == NULL) { fatal("Out of memory."); } } if (screen->write_buf_used) wakeup_io_loop(self, false); screen_mutex(unlock, write); break; } } children_mutex(unlock); return found; } static PyObject * needs_write(ChildMonitor UNUSED *self, PyObject *args) { #define needs_write_doc "needs_write(id, data) -> Queue data to be written to child." unsigned long id, sz; const char *data; if (!PyArg_ParseTuple(args, "ks#", &id, &data, &sz)) return NULL; if (schedule_write_to_child(id, 1, data, (size_t)sz)) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } static PyObject * shutdown_monitor(ChildMonitor *self, PyObject *a UNUSED) { #define shutdown_monitor_doc "shutdown_monitor() -> Shutdown the monitor loop." self->shutting_down = true; wakeup_talk_loop(false); wakeup_io_loop(self, false); int ret = pthread_join(self->io_thread, NULL); if (ret != 0) return PyErr_Format(PyExc_OSError, "Failed to join() I/O thread with error: %s", strerror(ret)); if (talk_thread_started) { ret = pthread_join(self->talk_thread, NULL); if (ret != 0) return PyErr_Format(PyExc_OSError, "Failed to join() talk thread with error: %s", strerror(ret)); } talk_thread_started = false; Py_RETURN_NONE; } static inline bool do_parse(ChildMonitor *self, Screen *screen, monotonic_t now) { bool input_read = false; screen_mutex(lock, read); if (screen->read_buf_sz || screen->pending_mode.used) { monotonic_t time_since_new_input = now - screen->new_input_at; if (time_since_new_input >= OPT(input_delay)) { bool read_buf_full = screen->read_buf_sz >= READ_BUF_SZ; input_read = true; parse_func(screen, self->dump_callback, now); if (read_buf_full) wakeup_io_loop(self, false); // Ensure the read fd has POLLIN set screen->new_input_at = 0; if (screen->pending_mode.activated_at) { monotonic_t time_since_pending = MAX(0, now - screen->pending_mode.activated_at); set_maximum_wait(screen->pending_mode.wait_time - time_since_pending); } } else set_maximum_wait(OPT(input_delay) - time_since_new_input); } screen_mutex(unlock, read); return input_read; } static bool parse_input(ChildMonitor *self) { // Parse all available input that was read in the I/O thread. size_t count = 0, remove_count = 0; bool input_read = false; monotonic_t now = monotonic(); PyObject *msg = NULL; children_mutex(lock); while (remove_queue_count) { remove_queue_count--; remove_notify[remove_count] = remove_queue[remove_queue_count].id; remove_count++; FREE_CHILD(remove_queue[remove_queue_count]); } if (UNLIKELY(self->messages_count)) { msg = PyTuple_New(self->messages_count); if (msg) { for (size_t i = 0; i < self->messages_count; i++) { Message *m = self->messages + i; PyTuple_SET_ITEM(msg, i, Py_BuildValue("y#i", m->data, (int)m->sz, m->fd)); free(m->data); m->data = NULL; m->sz = 0; } self->messages_count = 0; } else fatal("Out of memory"); } if (UNLIKELY(kill_signal_received)) { global_state.terminate = true; } else { count = self->count; for (size_t i = 0; i < count; i++) { scratch[i] = children[i]; INCREF_CHILD(scratch[i]); } } children_mutex(unlock); if (msg) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(msg); i++) { PyObject *resp = PyObject_CallMethod(global_state.boss, "peer_message_received", "O", PyTuple_GET_ITEM(PyTuple_GET_ITEM(msg, i), 0)); int peer_fd = (int)PyLong_AsLong(PyTuple_GET_ITEM(PyTuple_GET_ITEM(msg, i), 1)); if (resp && PyBytes_Check(resp)) send_response(peer_fd, PyBytes_AS_STRING(resp), PyBytes_GET_SIZE(resp)); else { send_response(peer_fd, NULL, 0); if (!resp) PyErr_Print(); } Py_CLEAR(resp); } Py_CLEAR(msg); } while(remove_count) { // must be done while no locks are held, since the locks are non-recursive and // the python function could call into other functions in this module remove_count--; PyObject *t = PyObject_CallFunction(self->death_notify, "k", remove_notify[remove_count]); if (t == NULL) PyErr_Print(); else Py_DECREF(t); } for (size_t i = 0; i < count; i++) { if (!scratch[i].needs_removal) { if (do_parse(self, scratch[i].screen, now)) input_read = true; } DECREF_CHILD(scratch[i]); } return input_read; } static inline void mark_child_for_close(ChildMonitor *self, id_type window_id) { children_mutex(lock); for (size_t i = 0; i < self->count; i++) { if (children[i].id == window_id) { children[i].needs_removal = true; break; } } children_mutex(unlock); wakeup_io_loop(self, false); } static PyObject * mark_for_close(ChildMonitor *self, PyObject *args) { #define mark_for_close_doc "Mark a child to be removed from the child monitor" id_type window_id; if (!PyArg_ParseTuple(args, "K", &window_id)) return NULL; mark_child_for_close(self, window_id); Py_RETURN_NONE; } static inline bool pty_resize(int fd, struct winsize *dim) { while(true) { if (ioctl(fd, TIOCSWINSZ, dim) == -1) { if (errno == EINTR) continue; if (errno != EBADF && errno != ENOTTY) { log_error("Failed to resize tty associated with fd: %d with error: %s", fd, strerror(errno)); return false; } } break; } return true; } static PyObject * resize_pty(ChildMonitor *self, PyObject *args) { #define resize_pty_doc "Resize the pty associated with the specified child" unsigned long window_id; struct winsize dim; int fd = -1; if (!PyArg_ParseTuple(args, "kHHHH", &window_id, &dim.ws_row, &dim.ws_col, &dim.ws_xpixel, &dim.ws_ypixel)) return NULL; children_mutex(lock); #define FIND(queue, count) { \ for (size_t i = 0; i < count; i++) { \ if (queue[i].id == window_id) { \ fd = queue[i].fd; \ break; \ } \ }} FIND(children, self->count); if (fd == -1) FIND(add_queue, add_queue_count); if (fd != -1) { if (!pty_resize(fd, &dim)) PyErr_SetFromErrno(PyExc_OSError); } else log_error("Failed to send resize signal to child with id: %lu (children count: %u) (add queue: %zu)", window_id, self->count, add_queue_count); children_mutex(unlock); if (PyErr_Occurred()) return NULL; Py_RETURN_NONE; } bool set_iutf8(int UNUSED fd, bool UNUSED on) { #ifdef IUTF8 struct termios attrs; if (tcgetattr(fd, &attrs) != 0) return false; if (on) attrs.c_iflag |= IUTF8; else attrs.c_iflag &= ~IUTF8; if (tcsetattr(fd, TCSANOW, &attrs) != 0) return false; #endif return true; } static PyObject* pyset_iutf8(ChildMonitor *self, PyObject *args) { unsigned long window_id; int on; PyObject *found = Py_False; if (!PyArg_ParseTuple(args, "kp", &window_id, &on)) return NULL; children_mutex(lock); for (size_t i = 0; i < self->count; i++) { if (children[i].id == window_id) { found = Py_True; if (!set_iutf8(fds[EXTRA_FDS + i].fd, on & 1)) PyErr_SetFromErrno(PyExc_OSError); break; } } children_mutex(unlock); if (PyErr_Occurred()) return NULL; Py_INCREF(found); return found; } #undef FREE_CHILD #undef INCREF_CHILD #undef DECREF_CHILD extern void cocoa_update_menu_bar_title(PyObject*); static inline void collect_cursor_info(CursorRenderInfo *ans, Window *w, monotonic_t now, OSWindow *os_window) { ScreenRenderData *rd = &w->render_data; Cursor *cursor = rd->screen->cursor; ans->x = cursor->x; ans->y = cursor->y; ans->is_visible = false; if (rd->screen->scrolled_by || !screen_is_cursor_visible(rd->screen)) return; monotonic_t time_since_start_blink = now - os_window->cursor_blink_zero_time; bool cursor_blinking = OPT(cursor_blink_interval) > 0 && os_window->is_focused && (OPT(cursor_stop_blinking_after) == 0 || time_since_start_blink <= OPT(cursor_stop_blinking_after)); bool do_draw_cursor = true; if (cursor_blinking) { int t = monotonic_t_to_ms(time_since_start_blink); int d = monotonic_t_to_ms(OPT(cursor_blink_interval)); int n = t / d; do_draw_cursor = n % 2 == 0 ? true : false; monotonic_t bucket = ms_to_monotonic_t((n + 1) * d); monotonic_t delay = bucket - time_since_start_blink; set_maximum_wait(delay); } if (!do_draw_cursor) { ans->is_visible = false; return; } ans->is_visible = true; ColorProfile *cp = rd->screen->color_profile; ans->shape = cursor->shape ? cursor->shape : OPT(cursor_shape); ans->color = colorprofile_to_color(cp, cp->overridden.cursor_color, cp->configured.cursor_color); ans->is_focused = os_window->is_focused; } static inline bool update_window_title(Window *w, OSWindow *os_window) { if (w->title && w->title != os_window->window_title) { os_window->window_title = w->title; Py_INCREF(os_window->window_title); set_os_window_title(os_window, PyUnicode_AsUTF8(w->title)); #ifdef __APPLE__ if (os_window->is_focused && (OPT(macos_show_window_title_in) & MENUBAR)) cocoa_update_menu_bar_title(w->title); #endif return true; } return false; } static inline bool prepare_to_render_os_window(OSWindow *os_window, monotonic_t now, unsigned int *active_window_id, color_type *active_window_bg, unsigned int *num_visible_windows, bool *all_windows_have_same_bg) { #define TD os_window->tab_bar_render_data bool needs_render = os_window->needs_render; os_window->needs_render = false; if (TD.screen && os_window->num_tabs >= OPT(tab_bar_min_tabs)) { if (!os_window->tab_bar_data_updated) { call_boss(update_tab_bar_data, "K", os_window->id); os_window->tab_bar_data_updated = true; } if (send_cell_data_to_gpu(TD.vao_idx, 0, TD.xstart, TD.ystart, TD.dx, TD.dy, TD.screen, os_window)) needs_render = true; } if (OPT(mouse_hide_wait) > 0 && !is_mouse_hidden(os_window)) { if (now - os_window->last_mouse_activity_at >= OPT(mouse_hide_wait)) hide_mouse(os_window); else set_maximum_wait(OPT(mouse_hide_wait) - now + os_window->last_mouse_activity_at); } Tab *tab = os_window->tabs + os_window->active_tab; *active_window_bg = OPT(background); *all_windows_have_same_bg = true; *num_visible_windows = 0; color_type first_window_bg = 0; for (unsigned int i = 0; i < tab->num_windows; i++) { Window *w = tab->windows + i; #define WD w->render_data if (w->visible && WD.screen) { *num_visible_windows += 1; color_type window_bg = colorprofile_to_color(WD.screen->color_profile, WD.screen->color_profile->overridden.default_bg, WD.screen->color_profile->configured.default_bg); if (*num_visible_windows == 1) first_window_bg = window_bg; if (first_window_bg != window_bg) all_windows_have_same_bg = false; if (w->last_drag_scroll_at > 0) { if (now - w->last_drag_scroll_at >= ms_to_monotonic_t(20ll)) { if (drag_scroll(w, os_window)) { w->last_drag_scroll_at = now; set_maximum_wait(ms_to_monotonic_t(20ll)); needs_render = true; } else w->last_drag_scroll_at = 0; } else set_maximum_wait(now - w->last_drag_scroll_at); } bool is_active_window = i == tab->active_window; if (is_active_window) { *active_window_id = w->id; collect_cursor_info(&WD.screen->cursor_render_info, w, now, os_window); if (w->cursor_visible_at_last_render != WD.screen->cursor_render_info.is_visible || w->last_cursor_x != WD.screen->cursor_render_info.x || w->last_cursor_y != WD.screen->cursor_render_info.y || w->last_cursor_shape != WD.screen->cursor_render_info.shape) needs_render = true; update_window_title(w, os_window); *active_window_bg = window_bg; } else WD.screen->cursor_render_info.is_visible = false; if (send_cell_data_to_gpu(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx, WD.dy, WD.screen, os_window)) needs_render = true; if (WD.screen->start_visual_bell_at != 0) needs_render = true; } } return needs_render; } static inline void render_os_window(OSWindow *os_window, monotonic_t now, unsigned int active_window_id, color_type active_window_bg, unsigned int num_visible_windows, bool all_windows_have_same_bg) { // ensure all pixels are cleared to background color at least once in every buffer if (os_window->clear_count++ < 3) blank_os_window(os_window); Tab *tab = os_window->tabs + os_window->active_tab; BorderRects *br = &tab->border_rects; bool static_live_resize_in_progress = os_window->live_resize.in_progress && OPT(resize_draw_strategy) == RESIZE_DRAW_STATIC; float x_ratio = 1, y_ratio = 1; if (static_live_resize_in_progress) { x_ratio = (float) os_window->viewport_width / (float) os_window->live_resize.width; y_ratio = (float) os_window->viewport_height / (float) os_window->live_resize.height; } if (!static_live_resize_in_progress) { draw_borders(br->vao_idx, br->num_border_rects, br->rect_buf, br->is_dirty, os_window->viewport_width, os_window->viewport_height, active_window_bg, num_visible_windows, all_windows_have_same_bg, os_window); br->is_dirty = false; } if (TD.screen && os_window->num_tabs >= OPT(tab_bar_min_tabs)) draw_cells(TD.vao_idx, 0, TD.xstart, TD.ystart, TD.dx * x_ratio, TD.dy * y_ratio, TD.screen, os_window, true, false); for (unsigned int i = 0; i < tab->num_windows; i++) { Window *w = tab->windows + i; if (w->visible && WD.screen) { bool is_active_window = i == tab->active_window; draw_cells(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx * x_ratio, WD.dy * y_ratio, WD.screen, os_window, is_active_window, true); if (WD.screen->start_visual_bell_at != 0) { monotonic_t bell_left = OPT(visual_bell_duration) - (now - WD.screen->start_visual_bell_at); set_maximum_wait(bell_left); } w->cursor_visible_at_last_render = WD.screen->cursor_render_info.is_visible; w->last_cursor_x = WD.screen->cursor_render_info.x; w->last_cursor_y = WD.screen->cursor_render_info.y; w->last_cursor_shape = WD.screen->cursor_render_info.shape; } } swap_window_buffers(os_window); os_window->last_active_tab = os_window->active_tab; os_window->last_num_tabs = os_window->num_tabs; os_window->last_active_window_id = active_window_id; os_window->focused_at_last_render = os_window->is_focused; os_window->is_damaged = false; if (USE_RENDER_FRAMES) request_frame_render(os_window); #undef WD #undef TD } static inline void update_os_window_title(OSWindow *os_window) { Tab *tab = os_window->tabs + os_window->active_tab; if (tab->num_windows) { Window *w = tab->windows + tab->active_window; update_window_title(w, os_window); } } static void draw_resizing_text(OSWindow *w) { char text[32] = {0}; unsigned int width = w->live_resize.width, height = w->live_resize.height; snprintf(text, sizeof(text), "%u x %u cells", width / w->fonts_data->cell_width, height / w->fonts_data->cell_height); StringCanvas rendered = render_simple_text(w->fonts_data, text); if (rendered.canvas) { draw_centered_alpha_mask(w->gvao_idx, width, height, rendered.width, rendered.height, rendered.canvas); free(rendered.canvas); } } static inline bool no_render_frame_received_recently(OSWindow *w, monotonic_t now, monotonic_t max_wait) { bool ans = now - w->last_render_frame_received_at > max_wait; if (ans) log_error("No render frame received in %f seconds, re-requesting at: %f", monotonic_t_to_s_double(max_wait), monotonic_t_to_s_double(now)); return ans; } static inline void render(monotonic_t now, bool input_read) { EVDBG("input_read: %d", input_read); static monotonic_t last_render_at = MONOTONIC_T_MIN; monotonic_t time_since_last_render = now - last_render_at; if (!input_read && time_since_last_render < OPT(repaint_delay)) { set_maximum_wait(OPT(repaint_delay) - time_since_last_render); return; } for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; if (!w->num_tabs) continue; if (!should_os_window_be_rendered(w)) { update_os_window_title(w); continue; } if (USE_RENDER_FRAMES && w->render_state != RENDER_FRAME_READY) { if (w->render_state == RENDER_FRAME_NOT_REQUESTED || no_render_frame_received_recently(w, now, ms_to_monotonic_t(250ll))) request_frame_render(w); continue; } make_os_window_context_current(w); if (w->live_resize.in_progress && OPT(resize_draw_strategy) >= RESIZE_DRAW_BLANK) { blank_os_window(w); if (OPT(resize_draw_strategy) == RESIZE_DRAW_SIZE) draw_resizing_text(w); swap_window_buffers(w); if (USE_RENDER_FRAMES) request_frame_render(w); continue; } if (w->live_resize.in_progress && OPT(resize_draw_strategy) == RESIZE_DRAW_STATIC) blank_os_window(w); bool needs_render = w->is_damaged || w->live_resize.in_progress; if (w->viewport_size_dirty) { w->clear_count = 0; update_surface_size(w->viewport_width, w->viewport_height, w->offscreen_texture_id); w->viewport_size_dirty = false; needs_render = true; } unsigned int active_window_id = 0, num_visible_windows = 0; bool all_windows_have_same_bg; color_type active_window_bg = 0; if (!w->fonts_data) { log_error("No fonts data found for window id: %llu", w->id); continue; } if (prepare_to_render_os_window(w, now, &active_window_id, &active_window_bg, &num_visible_windows, &all_windows_have_same_bg)) needs_render = true; if (w->last_active_window_id != active_window_id || w->last_active_tab != w->active_tab || w->focused_at_last_render != w->is_focused) needs_render = true; if (needs_render) render_os_window(w, now, active_window_id, active_window_bg, num_visible_windows, all_windows_have_same_bg); } last_render_at = now; #undef TD } typedef struct { int fd; uint8_t *buf; size_t sz; } ThreadWriteData; static inline ThreadWriteData* alloc_twd(size_t sz) { ThreadWriteData *data = calloc(1, sizeof(ThreadWriteData)); if (data != NULL) { data->sz = sz; data->buf = malloc(sz); if (data->buf == NULL) { free(data); data = NULL; } } return data; } static inline void free_twd(ThreadWriteData *x) { if (x != NULL) free(x->buf); free(x); } static PyObject* monitor_pid(PyObject *self UNUSED, PyObject *args) { long pid; bool ok = true; if (!PyArg_ParseTuple(args, "l", &pid)) return NULL; children_mutex(lock); if (monitored_pids_count >= arraysz(monitored_pids)) { PyErr_SetString(PyExc_RuntimeError, "Too many monitored pids"); ok = false; } else { monitored_pids[monitored_pids_count++] = pid; } children_mutex(unlock); if (!ok) return NULL; Py_RETURN_NONE; } static inline void report_reaped_pids(void) { children_mutex(lock); if (reaped_pids_count) { for (size_t i = 0; i < reaped_pids_count; i++) { call_boss(on_monitored_pid_death, "ii", (int)reaped_pids[i].pid, reaped_pids[i].status); } reaped_pids_count = 0; } children_mutex(unlock); } static void* thread_write(void *x) { ThreadWriteData *data = (ThreadWriteData*)x; set_thread_name("KittyWriteStdin"); int flags = fcntl(data->fd, F_GETFL, 0); if (flags == -1) { free_twd(data); return 0; } flags &= ~O_NONBLOCK; fcntl(data->fd, F_SETFL, flags); size_t pos = 0; while (pos < data->sz) { errno = 0; ssize_t nbytes = write(data->fd, data->buf + pos, data->sz - pos); if (nbytes < 0) { if (errno == EAGAIN || errno == EINTR) continue; break; } if (nbytes == 0) break; pos += nbytes; } if (pos < data->sz) { log_error("Failed to write all data to STDIN of child process with error: %s", strerror(errno)); } safe_close(data->fd); free_twd(data); return 0; } PyObject* cm_thread_write(PyObject UNUSED *self, PyObject *args) { static pthread_t thread; int fd; Py_ssize_t sz; const char *buf; if (!PyArg_ParseTuple(args, "is#", &fd, &buf, &sz)) return NULL; ThreadWriteData *data = alloc_twd(sz); if (data == NULL) return PyErr_NoMemory(); data->fd = fd; memcpy(data->buf, buf, data->sz); int ret = pthread_create(&thread, NULL, thread_write, data); if (ret != 0) { safe_close(fd); free_twd(data); return PyErr_SetFromErrno(PyExc_OSError); } pthread_detach(thread); Py_RETURN_NONE; } static void python_timer_callback(id_type timer_id, void *data) { PyObject *callback = (PyObject*)data; unsigned long long id = timer_id; PyObject *ret = PyObject_CallFunction(callback, "K", id); if (ret == NULL) PyErr_Print(); else Py_DECREF(ret); } static void python_timer_cleanup(id_type timer_id UNUSED, void *data) { if (data) Py_DECREF((PyObject*)data); } static PyObject* add_python_timer(PyObject *self UNUSED, PyObject *args) { PyObject *callback; double interval; int repeats = 1; if (!PyArg_ParseTuple(args, "Od|p", &callback, &interval, &repeats)) return NULL; unsigned long long timer_id = add_main_loop_timer(s_double_to_monotonic_t(interval), repeats ? true: false, python_timer_callback, callback, python_timer_cleanup); Py_INCREF(callback); return Py_BuildValue("K", timer_id); } static PyObject* remove_python_timer(PyObject *self UNUSED, PyObject *args) { unsigned long long timer_id; if (!PyArg_ParseTuple(args, "K", &timer_id)) return NULL; remove_main_loop_timer(timer_id); Py_RETURN_NONE; } static inline void process_pending_resizes(monotonic_t now) { global_state.has_pending_resizes = false; for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; if (w->live_resize.in_progress) { bool update_viewport = false; if (w->live_resize.from_os_notification) { if (w->live_resize.os_says_resize_complete || (now - w->live_resize.last_resize_event_at) > 1) update_viewport = true; } else { monotonic_t debounce_time = OPT(resize_debounce_time); // if more than one resize event has occurred, wait at least 0.2 secs // before repainting, to avoid rapid transitions between the cells banner // and the normal screen if (w->live_resize.num_of_resize_events > 1 && OPT(resize_draw_strategy) == RESIZE_DRAW_SIZE) debounce_time = MAX(ms_to_monotonic_t(200ll), debounce_time); if (now - w->live_resize.last_resize_event_at >= debounce_time) update_viewport = true; else { global_state.has_pending_resizes = true; set_maximum_wait(OPT(resize_debounce_time) - now + w->live_resize.last_resize_event_at); } } if (update_viewport) { static const LiveResizeInfo empty = {0}; update_os_window_viewport(w, true); w->live_resize = empty; } } } } static inline void close_all_windows(void) { for (size_t w = 0; w < global_state.num_os_windows; w++) mark_os_window_for_close(&global_state.os_windows[w], true); } static inline bool process_pending_closes(ChildMonitor *self) { global_state.has_pending_closes = false; bool has_open_windows = false; for (size_t w = global_state.num_os_windows; w > 0; w--) { OSWindow *os_window = global_state.os_windows + w - 1; if (should_os_window_close(os_window)) { destroy_os_window(os_window); call_boss(on_os_window_closed, "Kii", os_window->id, os_window->window_width, os_window->window_height); for (size_t t=0; t < os_window->num_tabs; t++) { Tab *tab = os_window->tabs + t; for (size_t w = 0; w < tab->num_windows; w++) mark_child_for_close(self, tab->windows[w].id); } remove_os_window(os_window->id); } else has_open_windows = true; } #ifdef __APPLE__ if (!OPT(macos_quit_when_last_window_closed)) { if (!has_open_windows && !application_quit_requested()) has_open_windows = true; } #endif return has_open_windows; } #ifdef __APPLE__ // If we create new OS windows during wait_events(), using global menu actions // via the mouse causes a crash because of the way autorelease pools work in // glfw/cocoa. So we use a flag instead. static unsigned int cocoa_pending_actions = 0; static char *cocoa_pending_actions_wd = NULL; void set_cocoa_pending_action(CocoaPendingAction action, const char *wd) { if (wd) { if (cocoa_pending_actions_wd) free(cocoa_pending_actions_wd); cocoa_pending_actions_wd = strdup(wd); } cocoa_pending_actions |= action; // The main loop may be blocking on the event queue, if e.g. unfocused. // Unjam it so the pending action is processed right now. wakeup_main_loop(); } #endif static void process_global_state(void *data); static void do_state_check(id_type timer_id UNUSED, void *data) { EVDBG("State check timer fired"); process_global_state(data); } static id_type state_check_timer = 0; static void process_global_state(void *data) { EVDBG("Processing global state"); ChildMonitor *self = data; maximum_wait = -1; bool state_check_timer_enabled = false; monotonic_t now = monotonic(); if (global_state.has_pending_resizes) process_pending_resizes(now); bool input_read = parse_input(self); render(now, input_read); #ifdef __APPLE__ if (cocoa_pending_actions) { if (cocoa_pending_actions & PREFERENCES_WINDOW) { call_boss(edit_config_file, NULL); } if (cocoa_pending_actions & NEW_OS_WINDOW) { call_boss(new_os_window, NULL); } if (cocoa_pending_actions_wd) { if (cocoa_pending_actions & NEW_OS_WINDOW_WITH_WD) { call_boss(new_os_window_with_wd, "s", cocoa_pending_actions_wd); } if (cocoa_pending_actions & NEW_TAB_WITH_WD) { call_boss(new_tab_with_wd, "s", cocoa_pending_actions_wd); } free(cocoa_pending_actions_wd); cocoa_pending_actions_wd = NULL; } cocoa_pending_actions = 0; } #endif if (global_state.terminate) { global_state.terminate = false; close_all_windows(); #ifdef __APPLE__ request_application_quit(); #endif } report_reaped_pids(); bool has_open_windows = true; if (global_state.has_pending_closes) has_open_windows = process_pending_closes(self); if (has_open_windows) { if (maximum_wait >= 0) { if (maximum_wait == 0) request_tick_callback(); else state_check_timer_enabled = true; } } else { stop_main_loop(); } update_main_loop_timer(state_check_timer, MAX(0, maximum_wait), state_check_timer_enabled); } static PyObject* main_loop(ChildMonitor *self, PyObject *a UNUSED) { #define main_loop_doc "The main thread loop" state_check_timer = add_main_loop_timer(1000, true, do_state_check, self, NULL); run_main_loop(process_global_state, self); #ifdef __APPLE__ if (cocoa_pending_actions_wd) { free(cocoa_pending_actions_wd); cocoa_pending_actions_wd = NULL; } #endif if (PyErr_Occurred()) return NULL; Py_RETURN_NONE; } // }}} // I/O thread functions {{{ static inline void add_children(ChildMonitor *self) { for (; add_queue_count > 0 && self->count < MAX_CHILDREN;) { add_queue_count--; children[self->count] = add_queue[add_queue_count]; add_queue[add_queue_count] = EMPTY_CHILD; fds[EXTRA_FDS + self->count].fd = children[self->count].fd; fds[EXTRA_FDS + self->count].events = POLLIN; self->count++; } } static inline void hangup(pid_t pid) { errno = 0; pid_t pgid = getpgid(pid); if (errno == ESRCH) return; if (errno != 0) { perror("Failed to get process group id for child"); return; } if (killpg(pgid, SIGHUP) != 0) { if (errno != ESRCH) perror("Failed to kill child"); } } static inline void cleanup_child(ssize_t i) { safe_close(children[i].fd); hangup(children[i].pid); } static inline void remove_children(ChildMonitor *self) { if (self->count > 0) { size_t count = 0; for (ssize_t i = self->count - 1; i >= 0; i--) { if (children[i].needs_removal) { count++; cleanup_child(i); remove_queue[remove_queue_count] = children[i]; remove_queue_count++; children[i] = EMPTY_CHILD; fds[EXTRA_FDS + i].fd = -1; size_t num_to_right = self->count - 1 - i; if (num_to_right > 0) { memmove(children + i, children + i + 1, num_to_right * sizeof(Child)); memmove(fds + EXTRA_FDS + i, fds + EXTRA_FDS + i + 1, num_to_right * sizeof(struct pollfd)); } } } self->count -= count; } } static bool read_bytes(int fd, Screen *screen) { ssize_t len; size_t available_buffer_space, orig_sz; screen_mutex(lock, read); orig_sz = screen->read_buf_sz; if (orig_sz >= READ_BUF_SZ) { screen_mutex(unlock, read); return true; } // screen read buffer is full available_buffer_space = READ_BUF_SZ - orig_sz; screen_mutex(unlock, read); while(true) { len = read(fd, screen->read_buf + orig_sz, available_buffer_space); if (len < 0) { if (errno == EINTR || errno == EAGAIN) continue; if (errno != EIO) perror("Call to read() from child fd failed"); return false; } break; } if (UNLIKELY(len == 0)) return false; screen_mutex(lock, read); if (screen->new_input_at == 0) screen->new_input_at = monotonic(); if (orig_sz != screen->read_buf_sz) { // The other thread consumed some of the screen read buffer memmove(screen->read_buf + screen->read_buf_sz, screen->read_buf + orig_sz, len); } screen->read_buf_sz += len; screen_mutex(unlock, read); return true; } static inline void drain_fd(int fd) { while(true) { ssize_t len = read(fd, drain_buf, sizeof(drain_buf)); if (len < 0) { if (errno == EINTR) continue; break; } if (len > 0) continue; break; } } typedef struct { bool kill_signal, child_died; } SignalSet; static void handle_signal(int signum, void *data) { SignalSet *ss = data; switch(signum) { case SIGINT: case SIGTERM: ss->kill_signal = true; break; case SIGCHLD: ss->child_died = true; break; default: break; } } static inline void mark_child_for_removal(ChildMonitor *self, pid_t pid) { children_mutex(lock); for (size_t i = 0; i < self->count; i++) { if (children[i].pid == pid) { children[i].needs_removal = true; break; } } children_mutex(unlock); } static inline void mark_monitored_pids(pid_t pid, int status) { children_mutex(lock); for (ssize_t i = monitored_pids_count - 1; i >= 0; i--) { if (pid == monitored_pids[i]) { if (reaped_pids_count < arraysz(reaped_pids)) { reaped_pids[reaped_pids_count].status = status; reaped_pids[reaped_pids_count++].pid = pid; } remove_i_from_array(monitored_pids, (size_t)i, monitored_pids_count); } } children_mutex(unlock); } static inline void reap_children(ChildMonitor *self, bool enable_close_on_child_death) { int status; pid_t pid; (void)self; while(true) { pid = waitpid(-1, &status, WNOHANG); if (pid == -1) { if (errno != EINTR) break; } else if (pid > 0) { if (enable_close_on_child_death) mark_child_for_removal(self, pid); mark_monitored_pids(pid, status); } else break; } } static inline void write_to_child(int fd, Screen *screen) { size_t written = 0; ssize_t ret = 0; screen_mutex(lock, write); while (written < screen->write_buf_used) { ret = write(fd, screen->write_buf + written, screen->write_buf_used - written); if (ret > 0) { written += ret; } else if (ret == 0) { // could mean anything, ignore break; } else { if (errno == EINTR) continue; if (errno == EWOULDBLOCK || errno == EAGAIN) break; perror("Call to write() to child fd failed, discarding data."); written = screen->write_buf_used; } } if (written) { screen->write_buf_used -= written; if (screen->write_buf_used) { memmove(screen->write_buf, screen->write_buf + written, screen->write_buf_used); } } screen_mutex(unlock, write); } static void* io_loop(void *data) { // The I/O thread loop size_t i; int ret; bool has_more, data_received, has_pending_wakeups = false; monotonic_t last_main_loop_wakeup_at = -1, now = -1; Screen *screen; ChildMonitor *self = (ChildMonitor*)data; set_thread_name("KittyChildMon"); while (LIKELY(!self->shutting_down)) { children_mutex(lock); remove_children(self); add_children(self); children_mutex(unlock); data_received = false; for (i = 0; i < self->count + EXTRA_FDS; i++) fds[i].revents = 0; for (i = 0; i < self->count; i++) { screen = children[i].screen; /* printf("i:%lu id:%lu fd: %d read_buf_sz: %lu write_buf_used: %lu\n", i, children[i].id, children[i].fd, screen->read_buf_sz, screen->write_buf_used); */ screen_mutex(lock, read); screen_mutex(lock, write); fds[EXTRA_FDS + i].events = (screen->read_buf_sz < READ_BUF_SZ ? POLLIN : 0) | (screen->write_buf_used ? POLLOUT : 0); screen_mutex(unlock, read); screen_mutex(unlock, write); } if (has_pending_wakeups) { now = monotonic(); monotonic_t time_delta = OPT(input_delay) - (now - last_main_loop_wakeup_at); if (time_delta >= 0) ret = poll(fds, self->count + EXTRA_FDS, monotonic_t_to_ms(time_delta)); else ret = 0; } else { ret = poll(fds, self->count + EXTRA_FDS, -1); } if (ret > 0) { if (fds[0].revents && POLLIN) drain_fd(fds[0].fd); // wakeup if (fds[1].revents && POLLIN) { SignalSet ss = {0}; data_received = true; read_signals(fds[1].fd, handle_signal, &ss); if (ss.kill_signal) { children_mutex(lock); kill_signal_received = true; children_mutex(unlock); } if (ss.child_died) reap_children(self, OPT(close_on_child_death)); } for (i = 0; i < self->count; i++) { if (fds[EXTRA_FDS + i].revents & (POLLIN | POLLHUP)) { data_received = true; has_more = read_bytes(fds[EXTRA_FDS + i].fd, children[i].screen); if (!has_more) { // child is dead children_mutex(lock); children[i].needs_removal = true; children_mutex(unlock); } } if (fds[EXTRA_FDS + i].revents & POLLOUT) { write_to_child(children[i].fd, children[i].screen); } if (fds[EXTRA_FDS + i].revents & POLLNVAL) { // fd was closed children_mutex(lock); children[i].needs_removal = true; children_mutex(unlock); log_error("The child %lu had its fd unexpectedly closed", children[i].id); } } #ifdef DEBUG_POLL_EVENTS for (i = 0; i < self->count + EXTRA_FDS; i++) { #define P(w) if (fds[i].revents & w) printf("i:%lu %s\n", i, #w); P(POLLIN); P(POLLPRI); P(POLLOUT); P(POLLERR); P(POLLHUP); P(POLLNVAL); #undef P } #endif } else if (ret < 0) { if (errno != EAGAIN && errno != EINTR) { perror("Call to poll() failed"); } } #define WAKEUP { wakeup_main_loop(); last_main_loop_wakeup_at = now; has_pending_wakeups = false; } // we only wakeup the main loop after input_delay as wakeup is an expensive operation // on some platforms, such as cocoa if (data_received) { if ((now = monotonic()) - last_main_loop_wakeup_at > OPT(input_delay)) WAKEUP else has_pending_wakeups = true; } else { if (has_pending_wakeups && (now = monotonic()) - last_main_loop_wakeup_at > OPT(input_delay)) WAKEUP } } #undef WAKEUP children_mutex(lock); for (i = 0; i < self->count; i++) children[i].needs_removal = true; remove_children(self); children_mutex(unlock); return 0; } // }}} // {{{ Talk thread functions typedef struct { char *data; size_t capacity, used; int fd; bool finished, close_socket; } PeerReadData; static PeerReadData empty_prd = {.fd = -1, 0}; typedef struct { char *data; size_t sz, pos; int fd; bool finished; } PeerWriteData; static PeerWriteData empty_pwd = {.fd = -1, 0}; typedef struct { size_t num_listen_fds, num_talk_fds, num_reads, num_writes, num_queued_writes; size_t fds_capacity, reads_capacity, writes_capacity, queued_writes_capacity; struct pollfd *fds; PeerReadData *reads; PeerWriteData *writes; PeerWriteData *queued_writes; LoopData loop_data; pthread_mutex_t peer_lock; } TalkData; static TalkData talk_data = {0}; typedef struct pollfd PollFD; #define PEER_LIMIT 256 #define nuke_socket(s) { shutdown(s, SHUT_RDWR); safe_close(s); } static inline bool accept_peer(int listen_fd, bool shutting_down) { int peer = accept(listen_fd, NULL, NULL); if (UNLIKELY(peer == -1)) { if (errno == EINTR) return true; if (!shutting_down) perror("accept() on talk socket failed!"); return false; } size_t fd_idx = talk_data.num_listen_fds + talk_data.num_talk_fds; if (fd_idx < PEER_LIMIT && talk_data.reads_capacity < PEER_LIMIT) { ensure_space_for(&talk_data, fds, PollFD, fd_idx + 1, fds_capacity, 8, false); talk_data.fds[fd_idx].fd = peer; talk_data.fds[fd_idx].events = POLLIN; ensure_space_for(&talk_data, reads, PeerReadData, talk_data.num_reads + 1, reads_capacity, 8, false); talk_data.reads[talk_data.num_reads] = empty_prd; talk_data.reads[talk_data.num_reads++].fd = peer; talk_data.num_talk_fds++; } else { log_error("Too many peers want to talk, ignoring one."); nuke_socket(peer); } return true; } static inline bool read_from_peer(ChildMonitor *self, int s) { bool read_finished = false; for (size_t i = 0; i < talk_data.num_reads; i++) { PeerReadData *rd = talk_data.reads + i; #define failed(msg) { read_finished = true; log_error("%s", msg); rd->finished = true; rd->close_socket = true; break; } if (rd->fd == s) { if (rd->used >= rd->capacity) { if (rd->capacity >= 1024 * 1024) failed("Ignoring too large message from peer"); rd->capacity = MAX(8192u, rd->capacity * 2); rd->data = realloc(rd->data, rd->capacity); if (!rd->data) failed("Out of memory"); } ssize_t n = recv(s, rd->data + rd->used, rd->capacity - rd->used, 0); if (n == 0) { read_finished = true; rd->finished = true; children_mutex(lock); ensure_space_for(self, messages, Message, self->messages_count + 1, messages_capacity, 16, true); Message *m = self->messages + self->messages_count++; m->data = rd->data; rd->data = NULL; m->sz = rd->used; m->fd = s; children_mutex(unlock); wakeup_main_loop(); } else if (n < 0) { if (errno != EINTR) { perror("Error reading from talk peer"); failed(""); } } else rd->used += n; break; } } #undef failed return read_finished; } static inline bool write_to_peer(int fd) { bool write_finished = false; for (size_t i = 0; i < talk_data.num_writes; i++) { PeerWriteData *wd = talk_data.writes + i; #define failed(msg) { write_finished = true; log_error("%s", msg); wd->finished = true; break; } if (wd->fd == fd) { ssize_t n = send(fd, wd->data + wd->pos, wd->sz - wd->pos, MSG_NOSIGNAL); if (n == 0) { failed("send() to peer failed to send any data"); } else if (n < 0) { if (errno != EINTR) { perror("write() to peer socket failed with error"); failed(""); } } else { wd->pos += n; if (wd->pos >= wd->sz) { write_finished = true; wd->finished = true; } } break; } } #undef failed return write_finished; } static inline void remove_poll_fd(int fd) { size_t count = talk_data.num_talk_fds + talk_data.num_listen_fds; for (size_t i = talk_data.num_listen_fds; i < count; i++) { struct pollfd *pfd = talk_data.fds + i; if (pfd->fd == fd) { size_t num_to_right = count - 1 - i; if (num_to_right) memmove(talk_data.fds + i, talk_data.fds + i + 1, num_to_right * sizeof(struct pollfd)); talk_data.num_talk_fds--; break; } } } static inline void prune_finished_reads(void) { if (!talk_data.num_reads) return; for (ssize_t i = talk_data.num_reads - 1; i >= 0; i--) { PeerReadData *rd = talk_data.reads + i; if (rd->finished) { remove_poll_fd(rd->fd); if (rd->close_socket) { nuke_socket(rd->fd); } else shutdown(rd->fd, SHUT_RD); free(rd->data); ssize_t num_to_right = talk_data.num_reads - 1 - i; if (num_to_right > 0) memmove(talk_data.reads + i, talk_data.reads + i + 1, num_to_right * sizeof(PeerReadData)); else talk_data.reads[i] = empty_prd; talk_data.num_reads--; } } } static inline void prune_finished_writes(void) { if (!talk_data.num_writes) return; for (ssize_t i = talk_data.num_writes - 1; i >= 0; i--) { PeerWriteData *wd = talk_data.writes + i; if (wd->finished) { remove_poll_fd(wd->fd); shutdown(wd->fd, SHUT_WR); safe_close(wd->fd); free(wd->data); ssize_t num_to_right = talk_data.num_writes - 1 - i; if (num_to_right > 0) memmove(talk_data.writes + i, talk_data.writes + i + 1, num_to_right * sizeof(PeerWriteData)); else talk_data.writes[i] = empty_pwd; talk_data.num_writes--; } } } static void wakeup_talk_loop(bool in_signal_handler) { if (talk_thread_started) wakeup_loop(&talk_data.loop_data, in_signal_handler, "talk_loop"); } static inline void move_queued_writes(void) { while (talk_data.num_queued_writes) { PeerWriteData *src = talk_data.queued_writes + --talk_data.num_queued_writes; size_t fd_idx = talk_data.num_listen_fds + talk_data.num_talk_fds; if (fd_idx < PEER_LIMIT && talk_data.num_writes < PEER_LIMIT) { ensure_space_for(&talk_data, fds, PollFD, fd_idx + 1, fds_capacity, 8, false); talk_data.fds[fd_idx].fd = src->fd; talk_data.fds[fd_idx].events = POLLOUT; ensure_space_for(&talk_data, writes, PeerWriteData, talk_data.num_writes + 1, writes_capacity, 8, false); talk_data.writes[talk_data.num_writes++] = *src; talk_data.num_talk_fds++; } else { log_error("Cannot send response to peer, too many peers"); free(src->data); nuke_socket(src->fd); } *src = empty_pwd; } } static void* talk_loop(void *data) { // The talk thread loop ChildMonitor *self = (ChildMonitor*)data; set_thread_name("KittyPeerMon"); if ((pthread_mutex_init(&talk_data.peer_lock, NULL)) != 0) { perror("Failed to create peer mutex"); return 0; } if (!init_loop_data(&talk_data.loop_data)) { log_error("Failed to create wakeup fd for talk thread with error: %s", strerror(errno)); } ensure_space_for(&talk_data, fds, PollFD, 8, fds_capacity, 8, false); #define add_listener(which) \ if (self->which > -1) { \ talk_data.fds[talk_data.num_listen_fds].fd = self->which; talk_data.fds[talk_data.num_listen_fds++].events = POLLIN; \ } add_listener(talk_fd); add_listener(listen_fd); #undef add_listener talk_data.fds[talk_data.num_listen_fds].fd = talk_data.loop_data.wakeup_read_fd; talk_data.fds[talk_data.num_listen_fds++].events = POLLIN; while (LIKELY(!self->shutting_down)) { for (size_t i = 0; i < talk_data.num_listen_fds + talk_data.num_talk_fds; i++) { talk_data.fds[i].revents = 0; } int ret = poll(talk_data.fds, talk_data.num_listen_fds + talk_data.num_talk_fds, -1); if (ret > 0) { bool has_finished_reads = false, has_finished_writes = false; for (size_t i = 0; i < talk_data.num_listen_fds - 1; i++) { if (talk_data.fds[i].revents & POLLIN) {if (!accept_peer(talk_data.fds[i].fd, self->shutting_down)) goto end; } } if (talk_data.fds[talk_data.num_listen_fds - 1].revents & POLLIN) drain_fd(talk_data.fds[talk_data.num_listen_fds - 1].fd); // wakeup for (size_t i = talk_data.num_listen_fds; i < talk_data.num_talk_fds + talk_data.num_listen_fds; i++) { if (talk_data.fds[i].revents & (POLLIN | POLLHUP)) { if (read_from_peer(self, talk_data.fds[i].fd)) has_finished_reads = true; } if (talk_data.fds[i].revents & POLLOUT) { if (write_to_peer(talk_data.fds[i].fd)) has_finished_writes = true; } } if (has_finished_reads) prune_finished_reads(); if (has_finished_writes) prune_finished_writes(); peer_mutex(lock); if (talk_data.num_queued_writes) move_queued_writes(); peer_mutex(unlock); } else if (ret < 0) { if (errno != EAGAIN && errno != EINTR) perror("poll() on talk fds failed"); } } end: free_loop_data(&talk_data.loop_data); free(talk_data.fds); free(talk_data.reads); free(talk_data.writes); free(talk_data.queued_writes); return 0; } static inline bool add_peer_writer(int fd, const char* msg, size_t msg_sz) { bool ok = false; peer_mutex(lock); if (talk_data.num_queued_writes < PEER_LIMIT) { ensure_space_for(&talk_data, queued_writes, PeerWriteData, talk_data.num_queued_writes + 1, queued_writes_capacity, 8, false); talk_data.queued_writes[talk_data.num_queued_writes] = empty_pwd; talk_data.queued_writes[talk_data.num_queued_writes].data = malloc(msg_sz); if (talk_data.queued_writes[talk_data.num_queued_writes].data) { memcpy(talk_data.queued_writes[talk_data.num_queued_writes].data, msg, msg_sz); talk_data.queued_writes[talk_data.num_queued_writes].sz = msg_sz; talk_data.queued_writes[talk_data.num_queued_writes++].fd = fd; ok = true; } } else log_error("Cannot send response to peer, too many peers"); peer_mutex(unlock); return ok; } static void send_response(int fd, const char *msg, size_t msg_sz) { if (msg == NULL) { shutdown(fd, SHUT_WR); safe_close(fd); return; } if (!add_peer_writer(fd, msg, msg_sz)) { shutdown(fd, SHUT_WR); safe_close(fd); } else wakeup_talk_loop(false); } // }}} // Boilerplate {{{ static PyMethodDef methods[] = { METHOD(add_child, METH_VARARGS) METHOD(needs_write, METH_VARARGS) METHOD(start, METH_NOARGS) METHOD(wakeup, METH_NOARGS) METHOD(shutdown_monitor, METH_NOARGS) METHOD(main_loop, METH_NOARGS) METHOD(mark_for_close, METH_VARARGS) METHOD(resize_pty, METH_VARARGS) {NULL} /* Sentinel */ }; PyTypeObject ChildMonitor_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.ChildMonitor", .tp_basicsize = sizeof(ChildMonitor), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "ChildMonitor", .tp_methods = methods, .tp_new = new, }; static PyObject* safe_pipe(PyObject *self UNUSED, PyObject *args) { int nonblock = 1; if (!PyArg_ParseTuple(args, "|p", &nonblock)) return NULL; int fds[2] = {0}; if (!self_pipe(fds, nonblock)) return PyErr_SetFromErrno(PyExc_OSError); return Py_BuildValue("ii", fds[0], fds[1]); } static PyMethodDef module_methods[] = { METHODB(safe_pipe, METH_VARARGS), {"add_timer", (PyCFunction)add_python_timer, METH_VARARGS, ""}, {"remove_timer", (PyCFunction)remove_python_timer, METH_VARARGS, ""}, METHODB(monitor_pid, METH_VARARGS), {"set_iutf8_winid", (PyCFunction)pyset_iutf8, METH_VARARGS, ""}, {NULL} /* Sentinel */ }; bool init_child_monitor(PyObject *module) { if (PyType_Ready(&ChildMonitor_Type) < 0) return false; if (PyModule_AddObject(module, "ChildMonitor", (PyObject *)&ChildMonitor_Type) != 0) return false; Py_INCREF(&ChildMonitor_Type); if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } // }}} kitty-0.15.0/kitty/child.c000066400000000000000000000130361356737523400153560ustar00rootroot00000000000000/* * child.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include #include #include #include #include #include static inline char** serialize_string_tuple(PyObject *src) { Py_ssize_t sz = PyTuple_GET_SIZE(src); char **ans = calloc(sz + 1, sizeof(char*)); if (!ans) fatal("Out of memory"); for (Py_ssize_t i = 0; i < sz; i++) { const char *pysrc = PyUnicode_AsUTF8(PyTuple_GET_ITEM(src, i)); size_t len = strlen(pysrc); ans[i] = calloc(len + 1, sizeof(char)); if (ans[i] == NULL) fatal("Out of memory"); memcpy(ans[i], pysrc, len); } return ans; } static inline void free_string_tuple(char** data) { size_t i = 0; while(data[i]) free(data[i++]); free(data); } extern char **environ; static inline void write_to_stderr(const char *text) { size_t sz = strlen(text); size_t written = 0; while(written < sz) { ssize_t amt = write(2, text + written, sz - written); if (amt == 0) break; if (amt < 0) { if (errno == EAGAIN || errno == EINTR) continue; break; } written += amt; } } #define exit_on_err(m) { write_to_stderr(m); write_to_stderr(": "); write_to_stderr(strerror(errno)); exit(EXIT_FAILURE); } static inline void wait_for_terminal_ready(int fd) { char data; while(1) { int ret = read(fd, &data, 1); if (ret == -1 && (errno == EINTR || errno == EAGAIN)) continue; break; } } static PyObject* spawn(PyObject *self UNUSED, PyObject *args) { PyObject *argv_p, *env_p; int master, slave, stdin_read_fd, stdin_write_fd, ready_read_fd, ready_write_fd; char *cwd, *exe; if (!PyArg_ParseTuple(args, "ssO!O!iiiiii", &exe, &cwd, &PyTuple_Type, &argv_p, &PyTuple_Type, &env_p, &master, &slave, &stdin_read_fd, &stdin_write_fd, &ready_read_fd, &ready_write_fd)) return NULL; char name[2048] = {0}; if (ttyname_r(slave, name, sizeof(name) - 1) != 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } char **argv = serialize_string_tuple(argv_p); char **env = serialize_string_tuple(env_p); pid_t pid = fork(); switch(pid) { case 0: { // child sigset_t signals = {0}; struct sigaction act = {.sa_handler=SIG_DFL}; #define SA(which) { if (sigaction(which, &act, NULL) != 0) exit_on_err("sigaction() in child process failed"); } SA(SIGINT); SA(SIGTERM); SA(SIGCHLD); #undef SA if (sigprocmask(SIG_SETMASK, &signals, NULL) != 0) exit_on_err("sigprocmask() in child process failed"); // Use only signal-safe functions (man 7 signal-safety) if (chdir(cwd) != 0) { if (chdir("/") != 0) {} }; // ignore failure to chdir to / if (setsid() == -1) exit_on_err("setsid() in child process failed"); // Establish the controlling terminal (see man 7 credentials) int tfd = open(name, O_RDWR); if (tfd == -1) exit_on_err("Failed to open controlling terminal"); #ifdef TIOCSTTY // On BSD open() does not establish the controlling terminal if (ioctl(tfd, TIOCSCTTY, 0) == -1) exit_on_err("Failed to set controlling terminal with TIOCSCTTY"); #endif safe_close(tfd); // Redirect stdin/stdout/stderr to the pty if (dup2(slave, 1) == -1) exit_on_err("dup2() failed for fd number 1"); if (dup2(slave, 2) == -1) exit_on_err("dup2() failed for fd number 2"); if (stdin_read_fd > -1) { if (dup2(stdin_read_fd, 0) == -1) exit_on_err("dup2() failed for fd number 0"); safe_close(stdin_read_fd); safe_close(stdin_write_fd); } else { if (dup2(slave, 0) == -1) exit_on_err("dup2() failed for fd number 0"); } safe_close(slave); safe_close(master); // Wait for READY_SIGNAL which indicates kitty has setup the screen object safe_close(ready_write_fd); wait_for_terminal_ready(ready_read_fd); safe_close(ready_read_fd); // Close any extra fds inherited from parent for (int c = 3; c < 201; c++) safe_close(c); environ = env; // for some reason SIGPIPE is set to SIG_IGN, so reset it, needed by bash, // which does not reset signal handlers on its own signal(SIGPIPE, SIG_DFL); execvp(exe, argv); // Report the failure and exec a shell instead, so that we are not left // with a forked but not exec'ed process write_to_stderr("Failed to launch child: "); write_to_stderr(argv[0]); write_to_stderr("\nWith error: "); write_to_stderr(strerror(errno)); write_to_stderr("\nPress Enter to exit.\n"); execlp("sh", "sh", "-c", "read w", NULL); exit(EXIT_FAILURE); break; } case -1: PyErr_SetFromErrno(PyExc_OSError); break; default: break; } #undef exit_on_err free_string_tuple(argv); free_string_tuple(env); if (PyErr_Occurred()) return NULL; return PyLong_FromLong(pid); } static PyMethodDef module_methods[] = { METHODB(spawn, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_child(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } kitty-0.15.0/kitty/child.py000066400000000000000000000226171356737523400155710ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import fcntl import os import sys from collections import defaultdict from contextlib import contextmanager, suppress import kitty.fast_data_types as fast_data_types from .constants import is_macos, shell_path, terminfo_dir if is_macos: from kitty.fast_data_types import ( cmdline_of_process, cwd_of_process as _cwd, environ_of_process as _environ_of_process, process_group_map as _process_group_map ) def cwd_of_process(pid): return os.path.realpath(_cwd(pid)) def process_group_map(): ans = defaultdict(list) for pid, pgid in _process_group_map(): ans[pgid].append(pid) return ans else: def cmdline_of_process(pid): with open('/proc/{}/cmdline'.format(pid), 'rb') as f: return list(filter(None, f.read().decode('utf-8').split('\0'))) def cwd_of_process(pid): ans = '/proc/{}/cwd'.format(pid) return os.path.realpath(ans) def _environ_of_process(pid): with open('/proc/{}/environ'.format(pid), 'rb') as f: return f.read().decode('utf-8') def process_group_map(): ans = defaultdict(list) for x in os.listdir('/proc'): try: pid = int(x) except Exception: continue try: with open('/proc/' + x + '/stat', 'rb') as f: raw = f.read().decode('utf-8') except EnvironmentError: continue try: q = int(raw.split(' ', 5)[4]) except Exception: continue ans[q].append(pid) return ans def checked_terminfo_dir(): ans = getattr(checked_terminfo_dir, 'ans', None) if ans is None: ans = checked_terminfo_dir.ans = terminfo_dir if os.path.isdir(terminfo_dir) else None return ans def processes_in_group(grp): gmap = getattr(process_group_map, 'cached_map', None) if gmap is None: try: gmap = process_group_map() except Exception: gmap = {} return gmap.get(grp, []) @contextmanager def cached_process_data(): try: process_group_map.cached_map = process_group_map() except Exception: process_group_map.cached_map = {} try: yield finally: process_group_map.cached_map = None def parse_environ_block(data): """Parse a C environ block of environment variables into a dictionary.""" # The block is usually raw data from the target process. It might contain # trailing garbage and lines that do not look like assignments. ret = {} pos = 0 while True: next_pos = data.find("\0", pos) # nul byte at the beginning or double nul byte means finish if next_pos <= pos: break # there might not be an equals sign equal_pos = data.find("=", pos, next_pos) if equal_pos > pos: key = data[pos:equal_pos] value = data[equal_pos + 1:next_pos] ret[key] = value pos = next_pos + 1 return ret def environ_of_process(pid): return parse_environ_block(_environ_of_process(pid)) def remove_cloexec(fd): fcntl.fcntl(fd, fcntl.F_SETFD, fcntl.fcntl(fd, fcntl.F_GETFD) & ~fcntl.FD_CLOEXEC) def remove_blocking(fd): os.set_blocking(fd, False) def process_env(): ans = os.environ ssl_env_var = getattr(sys, 'kitty_ssl_env_var', None) if ssl_env_var is not None: ans = ans.copy() ans.pop(ssl_env_var, None) return ans def default_env(): try: return default_env.env except AttributeError: return process_env() def set_default_env(val=None): env = process_env().copy() if val: env.update(val) default_env.env = env def openpty(): master, slave = os.openpty() # Note that master and slave are in blocking mode remove_cloexec(slave) fast_data_types.set_iutf8_fd(master, True) return master, slave class Child: child_fd = pid = None forked = False def __init__(self, argv, cwd, opts, stdin=None, env=None, cwd_from=None, allow_remote_control=False): self.allow_remote_control = allow_remote_control self.argv = argv if cwd_from is not None: try: cwd = cwd_of_process(cwd_from) except Exception: import traceback traceback.print_exc() else: cwd = os.path.expandvars(os.path.expanduser(cwd or os.getcwd())) self.cwd = os.path.abspath(cwd) self.opts = opts self.stdin = stdin self.env = env or {} @property def final_env(self): env = getattr(self, '_final_env', None) if env is None: env = self._final_env = default_env().copy() env.update(self.env) env['TERM'] = self.opts.term env['COLORTERM'] = 'truecolor' if self.cwd: # needed in case cwd is a symlink, in which case shells # can use it to display the current directory name rather # than the resolved path env['PWD'] = self.cwd if checked_terminfo_dir(): env['TERMINFO'] = checked_terminfo_dir() return env def fork(self): if self.forked: return self.forked = True master, slave = openpty() stdin, self.stdin = self.stdin, None ready_read_fd, ready_write_fd = os.pipe() remove_cloexec(ready_read_fd) if stdin is not None: stdin_read_fd, stdin_write_fd = os.pipe() remove_cloexec(stdin_read_fd) else: stdin_read_fd = stdin_write_fd = -1 env = self.final_env env = tuple('{}={}'.format(k, v) for k, v in env.items()) argv = list(self.argv) exe = argv[0] if is_macos and exe == shell_path: # bash will only source ~/.bash_profile if it detects it is a login # shell (see the invocation section of the bash man page), which it # does if argv[0] is prefixed by a hyphen see # https://github.com/kovidgoyal/kitty/issues/247 # it is apparently common to use ~/.bash_profile instead of the # more correct ~/.bashrc on macOS to setup env vars, so if # the default shell is used prefix argv[0] by '-' # # it is arguable whether graphical terminals should start shells # in login mode in general, there are at least a few Linux users # that also make this incorrect assumption, see for example # https://github.com/kovidgoyal/kitty/issues/1870 # xterm, urxvt, konsole and gnome-terminal do not do it in my # testing. argv[0] = ('-' + exe.split('/')[-1]) pid = fast_data_types.spawn(exe, self.cwd, tuple(argv), env, master, slave, stdin_read_fd, stdin_write_fd, ready_read_fd, ready_write_fd) os.close(slave) self.pid = pid self.child_fd = master if stdin is not None: os.close(stdin_read_fd) fast_data_types.thread_write(stdin_write_fd, stdin) os.close(ready_read_fd) self.terminal_ready_fd = ready_write_fd remove_blocking(self.child_fd) return pid def mark_terminal_ready(self): os.close(self.terminal_ready_fd) self.terminal_ready_fd = -1 @property def foreground_processes(self): try: pgrp = os.tcgetpgrp(self.child_fd) foreground_processes = processes_in_group(pgrp) if pgrp >= 0 else [] def process_desc(pid): ans = {'pid': pid} with suppress(Exception): ans['cmdline'] = cmdline_of_process(pid) with suppress(Exception): ans['cwd'] = cwd_of_process(pid) or None return ans return list(map(process_desc, foreground_processes)) except Exception: return [] @property def cmdline(self): try: return cmdline_of_process(self.pid) or list(self.argv) except Exception: return list(self.argv) @property def foreground_cmdline(self): try: return cmdline_of_process(self.pid_for_cwd) or self.cmdline except Exception: return self.cmdline @property def environ(self): try: return environ_of_process(self.pid) except Exception: return {} @property def current_cwd(self): with suppress(Exception): return cwd_of_process(self.pid) @property def pid_for_cwd(self): with suppress(Exception): pgrp = os.tcgetpgrp(self.child_fd) foreground_processes = processes_in_group(pgrp) if pgrp >= 0 else [] if len(foreground_processes) == 1: return foreground_processes[0] return self.pid @property def foreground_cwd(self): with suppress(Exception): return cwd_of_process(self.pid_for_cwd) or None @property def foreground_environ(self): try: return environ_of_process(self.pid_for_cwd) except Exception: try: return environ_of_process(self.pid) except Exception: pass return {} kitty-0.15.0/kitty/cli.py000066400000000000000000000556601356737523400152610ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import re import sys from collections import deque from .conf.utils import resolve_config from .constants import appname, defconf, is_macos, is_wayland, str_version CONFIG_HELP = '''\ Specify a path to the configuration file(s) to use. All configuration files are merged onto the builtin {conf_name}.conf, overriding the builtin values. This option can be specified multiple times to read multiple configuration files in sequence, which are merged. Use the special value NONE to not load a config file. If this option is not specified, config files are searched for in the order: :file:`$XDG_CONFIG_HOME/{appname}/{conf_name}.conf`, :file:`~/.config/{appname}/{conf_name}.conf`, {macos_confpath} :file:`$XDG_CONFIG_DIRS/{appname}/{conf_name}.conf`. The first one that exists is used as the config file. If the environment variable :env:`KITTY_CONFIG_DIRECTORY` is specified, that directory is always used and the above searching does not happen. If :file:`/etc/xdg/{appname}/{conf_name}.conf` exists it is merged before (i.e. with lower priority) than any user config files. It can be used to specify system-wide defaults for all users. '''.replace( '{macos_confpath}', (':file:`~/Library/Preferences/{appname}/{conf_name}.conf`,' if is_macos else ''), 1 ) def surround(x, start, end): if sys.stdout.isatty(): x = '\033[{}m{}\033[{}m'.format(start, x, end) return x def emph(x): return surround(x, 91, 39) def cyan(x): return surround(x, 96, 39) def green(x): return surround(x, 32, 39) def blue(x): return surround(x, 34, 39) def yellow(x): return surround(x, 93, 39) def italic(x): return surround(x, 3, 23) def bold(x): return surround(x, 1, 22) def title(x): return blue(bold(x)) def opt(text): return text def option(x): idx = x.find('-') if idx > -1: x = x[idx:] parts = map(bold, x.split()) return ' '.join(parts) def code(x): return x def kbd(x): return x def env(x): return italic(x) def file(x): return italic(x) def parse_option_spec(spec=None): if spec is None: spec = options_spec() NORMAL, METADATA, HELP = 'NORMAL', 'METADATA', 'HELP' state = NORMAL lines = spec.splitlines() prev_line = '' seq = [] disabled = [] mpat = re.compile('([a-z]+)=(.+)') current_cmd = None for line in lines: line = line.rstrip() if state is NORMAL: if not line: continue if line.startswith('# '): seq.append(line[2:]) continue if line.startswith('--'): parts = line.split(' ') current_cmd = {'dest': parts[0][2:].replace('-', '_'), 'aliases': frozenset(parts), 'help': ''} state = METADATA continue raise ValueError('Invalid option spec, unexpected line: {}'.format(line)) elif state is METADATA: m = mpat.match(line) if m is None: state = HELP current_cmd['help'] += line else: k, v = m.group(1), m.group(2) if k == 'condition': v = eval(v) current_cmd[k] = v if k == 'choices': current_cmd['choices'] = {x.strip() for x in current_cmd['choices'].split(',')} elif state is HELP: if line: spc = '' if current_cmd['help'].endswith('\n') else ' ' current_cmd['help'] += spc + line else: if prev_line: current_cmd['help'] += '\n\n' else: state = NORMAL (seq if current_cmd.get('condition', True) else disabled).append(current_cmd) current_cmd = None prev_line = line if current_cmd is not None: (seq if current_cmd.get('condition', True) else disabled).append(current_cmd) return seq, disabled def prettify(text): role_map = globals() def sub(m): role, text = m.group(1, 2) return role_map[role](text) text = re.sub(r':([a-z]+):`([^`]+)`', sub, text) return text def prettify_rst(text): return re.sub(r':([a-z]+):`([^`]+)`(=[^\s.]+)', r':\1:`\2`:code:`\3`', text) def version(add_rev=False): rev = '' from . import fast_data_types if add_rev and hasattr(fast_data_types, 'KITTY_VCS_REV'): rev = ' ({})'.format(fast_data_types.KITTY_VCS_REV[:10]) return '{} {}{} created by {}'.format(italic(appname), green(str_version), rev, title('Kovid Goyal')) def wrap(text, limit=80): NORMAL, IN_FORMAT = 'NORMAL', 'IN_FORMAT' state = NORMAL last_space_at = None chars_in_line = 0 breaks = [] for i, ch in enumerate(text): if state is IN_FORMAT: if ch == 'm': state = NORMAL continue if ch == '\033': state = IN_FORMAT continue if ch == ' ': last_space_at = i if chars_in_line < limit: chars_in_line += 1 continue if last_space_at is not None: breaks.append(last_space_at) last_space_at = None chars_in_line = i - breaks[-1] lines = [] for b in reversed(breaks): lines.append(text[b:].lstrip()) text = text[:b] if text: lines.append(text) return reversed(lines) def get_defaults_from_seq(seq): ans = {} for opt in seq: if not isinstance(opt, str): ans[opt['dest']] = defval_for_opt(opt) return ans default_msg = ('''\ Run the :italic:`{appname}` terminal emulator. You can also specify the :italic:`program` to run inside :italic:`{appname}` as normal arguments following the :italic:`options`. For example: {appname} /bin/sh For comprehensive documentation for kitty, please see: https://sw.kovidgoyal.net/kitty/''').format(appname=appname) def print_help_for_seq(seq, usage, message, appname): from kitty.utils import screen_size_function screen_size = screen_size_function() try: linesz = min(screen_size().cols, 76) except EnvironmentError: linesz = 76 blocks = [] a = blocks.append def wa(text, indent=0, leading_indent=None): if leading_indent is None: leading_indent = indent j = '\n' + (' ' * indent) lines = [] for l in text.splitlines(): if l: lines.extend(wrap(l, limit=linesz - indent)) else: lines.append('') a((' ' * leading_indent) + j.join(lines)) usage = '[program-to-run ...]' if usage is None else usage optstring = '[options] ' if seq else '' a('{}: {} {}{}'.format(title('Usage'), bold(yellow(appname)), optstring, usage)) a('') message = message or default_msg wa(prettify(message)) a('') if seq: a('{}:'.format(title('Options'))) for opt in seq: if isinstance(opt, str): a('{}:'.format(title(opt))) continue help_text = opt['help'] if help_text == '!': continue # hidden option a(' ' + ', '.join(map(green, sorted(opt['aliases'])))) if not opt.get('type', '').startswith('bool-'): blocks[-1] += '={}'.format(italic(opt['dest'].upper())) if opt.get('help'): defval = opt.get('default') t = help_text.replace('%default', str(defval)) wa(prettify(t.strip()), indent=4) if defval is not None: wa('Default: {}'.format(defval), indent=4) if 'choices' in opt: wa('Choices: {}'.format(', '.join(opt['choices'])), indent=4) a('') text = '\n'.join(blocks) + '\n\n' + version() if print_help_for_seq.allow_pager and sys.stdout.isatty(): import subprocess p = subprocess.Popen(['less', '-isRXF'], stdin=subprocess.PIPE) try: p.communicate(text.encode('utf-8')) except KeyboardInterrupt: raise SystemExit(1) raise SystemExit(p.wait()) else: print(text) print_help_for_seq.allow_pager = True def seq_as_rst(seq, usage, message, appname, heading_char='-'): import textwrap blocks = [] a = blocks.append usage = '[program-to-run ...]' if usage is None else usage optstring = '[options] ' if seq else '' a('.. highlight:: sh') a('.. code-block:: sh') a('') a(' {} {}{}'.format(appname, optstring, usage)) a('') message = message or default_msg a(prettify_rst(message)) a('') if seq: a('Options') a(heading_char * 30) for opt in seq: if isinstance(opt, str): a(opt) a('~' * (len(opt) + 10)) continue help_text = opt['help'] if help_text == '!': continue # hidden option defn = '.. option:: ' if not opt.get('type', '').startswith('bool-'): val_name = ' <{}>'.format(opt['dest'].upper()) else: val_name = '' a(defn + ', '.join(o + val_name for o in sorted(opt['aliases']))) if opt.get('help'): defval = opt.get('default') t = help_text.replace('%default', str(defval)).strip() a('') a(textwrap.indent(prettify_rst(t), ' ' * 4)) if defval is not None: a(textwrap.indent('Default: :code:`{}`'.format(defval), ' ' * 4)) if 'choices' in opt: a(textwrap.indent('Choices: :code:`{}`'.format(', '.join(sorted(opt['choices']))), ' ' * 4)) a('') text = '\n'.join(blocks) return text def defval_for_opt(opt): dv = opt.get('default') typ = opt.get('type', '') if typ.startswith('bool-'): if dv is None: dv = False if typ == 'bool-set' else True else: dv = dv.lower() in ('true', 'yes', 'y') elif typ == 'list': dv = [] elif typ in ('int', 'float'): dv = (int if typ == 'int' else float)(dv or 0) return dv class Options: def __init__(self, seq, usage, message, appname): self.alias_map = {} self.seq = seq self.names_map = {} self.values_map = {} self.usage, self.message, self.appname = usage, message, appname for opt in seq: if isinstance(opt, str): continue for alias in opt['aliases']: self.alias_map[alias] = opt name = opt['dest'] self.names_map[name] = opt self.values_map[name] = defval_for_opt(opt) def opt_for_alias(self, alias): opt = self.alias_map.get(alias) if opt is None: raise SystemExit('Unknown option: {}'.format(emph(alias))) return opt def needs_arg(self, alias): if alias in ('-h', '--help'): print_help_for_seq(self.seq, self.usage, self.message, self.appname or appname) raise SystemExit(0) opt = self.opt_for_alias(alias) if opt['dest'] == 'version': print(version()) raise SystemExit(0) typ = opt.get('type', '') return not typ.startswith('bool-') def process_arg(self, alias, val=None): opt = self.opt_for_alias(alias) typ = opt.get('type', '') name = opt['dest'] nmap = {'float': float, 'int': int} if typ == 'bool-set': self.values_map[name] = True elif typ == 'bool-reset': self.values_map[name] = False elif typ == 'list': self.values_map.setdefault(name, []) self.values_map[name].append(val) elif typ == 'choices': choices = opt['choices'] if val not in choices: raise SystemExit('{} is not a valid value for the {} option. Valid values are: {}'.format( val, emph(alias), ', '.join(choices))) self.values_map[name] = val elif typ in nmap: f = nmap[typ] try: self.values_map[name] = f(val) except Exception: raise SystemExit('{} is not a valid value for the {} option, a number is required.'.format( val, emph(alias))) else: self.values_map[name] = val class Namespace: def __init__(self, kwargs): for name, val in kwargs.items(): setattr(self, name, val) def parse_cmdline(oc, disabled, args=None): NORMAL, EXPECTING_ARG = 'NORMAL', 'EXPECTING_ARG' state = NORMAL if args is None: args = sys.argv[1:] args = deque(args) current_option = None while args: arg = args.popleft() if state is NORMAL: if arg.startswith('-'): if arg == '--': break parts = arg.split('=', 1) needs_arg = oc.needs_arg(parts[0]) if not needs_arg: if len(parts) != 1: raise SystemExit('The {} option does not accept arguments'.format(emph(parts[0]))) oc.process_arg(parts[0]) continue if len(parts) == 1: current_option = parts[0] state = EXPECTING_ARG continue oc.process_arg(parts[0], parts[1]) else: args = [arg] + list(args) break else: oc.process_arg(current_option, arg) current_option, state = None, NORMAL if state is EXPECTING_ARG: raise SystemExit('An argument is required for the option: {}'.format(emph(arg))) ans = Namespace(oc.values_map) for opt in disabled: setattr(ans, opt['dest'], defval_for_opt(opt)) return ans, list(args) def options_spec(): if not hasattr(options_spec, 'ans'): OPTIONS = ''' --class dest=cls default={appname} condition=not is_macos Set the class part of the :italic:`WM_CLASS` window property. On Wayland, it sets the app id. --name condition=not is_macos Set the name part of the :italic:`WM_CLASS` property (defaults to using the value from :option:`{appname} --class`) --title -T Set the window title. This will override any title set by the program running inside kitty. So only use this if you are running a program that does not set titles. If combined with :option:`{appname} --session` the title will be used for all windows created by the session, that do not set their own titles. --config -c type=list {config_help} --override -o type=list Override individual configuration options, can be specified multiple times. Syntax: :italic:`name=value`. For example: :option:`kitty -o` font_size=20 --directory -d default=. Change to the specified directory when launching --detach type=bool-set condition=not is_macos Detach from the controlling terminal, if any --session Path to a file containing the startup :italic:`session` (tabs, windows, layout, programs). Use - to read from STDIN. See the README file for details and an example. --hold type=bool-set Remain open after child process exits. Note that this only affects the first window. You can quit by either using the close window shortcut or :kbd:`Ctrl+d`. --single-instance -1 type=bool-set If specified only a single instance of :italic:`{appname}` will run. New invocations will instead create a new top-level window in the existing :italic:`{appname}` instance. This allows :italic:`{appname}` to share a single sprite cache on the GPU and also reduces startup time. You can also have separate groups of :italic:`{appname}` instances by using the :option:`kitty --instance-group` option --instance-group Used in combination with the :option:`kitty --single-instance` option. All :italic:`{appname}` invocations with the same :option:`kitty --instance-group` will result in new windows being created in the first :italic:`{appname}` instance within that group --wait-for-single-instance-window-close type=bool-set Normally, when using :option:`--single-instance`, :italic:`{appname}` will open a new window in an existing instance and quit immediately. With this option, it will not quit till the newly opened window is closed. Note that if no previous instance is found, then :italic:`{appname}` will wait anyway, regardless of this option. --listen-on Tell kitty to listen on the specified address for control messages. For example, :option:`{appname} --listen-on`=unix:/tmp/mykitty or :option:`{appname} --listen-on`=tcp:localhost:12345. On Linux systems, you can also use abstract UNIX sockets, not associated with a file, like this: :option:`{appname} --listen-on`=unix:@mykitty. To control kitty, you can send it commands with :italic:`kitty @` using the :option:`kitty @ --to` option to specify this address. This option will be ignored, unless you set :opt:`allow_remote_control` to yes in :file:`kitty.conf`. Note that if you run :italic:`kitty @` within a kitty window, there is no need to specify the :italic:`--to` option as it is read automatically from the environment. --start-as type=choices default=normal choices=normal,fullscreen,maximized,minimized Control how the initial kitty window is created. # Debugging options --version -v type=bool-set The current {appname} version --dump-commands type=bool-set Output commands received from child process to stdout --replay-commands Replay previously dumped commands. Specify the path to a dump file previously created by --dump-commands. You can open a new kitty window to replay the commands with:: kitty sh -c "kitty --replay-commands /path/to/dump/file; read" --dump-bytes Path to file in which to store the raw bytes received from the child process --debug-gl type=bool-set Debug OpenGL commands. This will cause all OpenGL calls to check for errors instead of ignoring them. Useful when debugging rendering problems --debug-keyboard type=bool-set This option will cause kitty to print out key events as they are received --debug-font-fallback type=bool-set Print out information about the selection of fallback fonts for characters not present in the main font. --debug-config type=bool-set Print out information about the system and kitty configuration. --execute -e type=bool-set ! ''' options_spec.ans = OPTIONS.format( appname=appname, config_help=CONFIG_HELP.format(appname=appname, conf_name=appname) ) return options_spec.ans def options_for_completion(): raw = '--help -h\ntype=bool-set\nShow help for {appname} command line options\n\n{raw}'.format( appname=appname, raw=options_spec()) return parse_option_spec(raw)[0] def option_spec_as_rst(ospec=options_spec, usage=None, message=None, appname=None, heading_char='-'): options = parse_option_spec(ospec()) seq, disabled = options oc = Options(seq, usage, message, appname) return seq_as_rst(oc.seq, oc.usage, oc.message, oc.appname, heading_char=heading_char) def parse_args(args=None, ospec=options_spec, usage=None, message=None, appname=None): options = parse_option_spec(ospec()) seq, disabled = options oc = Options(seq, usage, message, appname) return parse_cmdline(oc, disabled, args=args) SYSTEM_CONF = '/etc/xdg/kitty/kitty.conf' def print_shortcut(key_sequence, action): if not getattr(print_shortcut, 'maps', None): from kitty.keys import defines v = vars(defines) mmap = {m[len('GLFW_MOD_'):].lower(): x for m, x in v.items() if m.startswith('GLFW_MOD_')} kmap = {k[len('GLFW_KEY_'):].lower(): x for k, x in v.items() if k.startswith('GLFW_KEY_')} krmap = {v: k for k, v in kmap.items()} print_shortcut.maps = mmap, krmap mmap, krmap = print_shortcut.maps keys = [] for key in key_sequence: names = [] mods, is_native, key = key for name, val in mmap.items(): if mods & val: names.append(name) if key: if is_native: from .fast_data_types import GLFW_KEY_UNKNOWN, glfw_get_key_name names.append(glfw_get_key_name(GLFW_KEY_UNKNOWN, key)) else: names.append(krmap[key]) keys.append('+'.join(names)) print('\t', ' > '.join(keys), action) def print_shortcut_changes(defns, text, changes): if changes: print(title(text)) for k in sorted(changes): print_shortcut(k, defns[k]) def compare_keymaps(final, initial): added = set(final) - set(initial) removed = set(initial) - set(final) changed = {k for k in set(final) & set(initial) if final[k] != initial[k]} print_shortcut_changes(final, 'Added shortcuts:', added) print_shortcut_changes(initial, 'Removed shortcuts:', removed) print_shortcut_changes(final, 'Changed shortcuts:', changed) def flatten_sequence_map(m): ans = {} for k, rest_map in m.items(): for r, action in rest_map.items(): ans[(k,) + (r)] = action return ans def compare_opts(opts): from .config import defaults, load_config print('\nConfig options different from defaults:') default_opts = load_config() changed_opts = [ f for f in sorted(defaults._fields) if f not in ('key_definitions', 'keymap', 'sequence_map') and getattr(opts, f) != getattr(defaults, f) ] field_len = max(map(len, changed_opts)) if changed_opts else 20 fmt = '{{:{:d}s}}'.format(field_len) for f in changed_opts: print(title(fmt.format(f)), getattr(opts, f)) final, initial = opts.keymap, default_opts.keymap final = {(k,): v for k, v in final.items()} initial = {(k,): v for k, v in initial.items()} final_s, initial_s = map(flatten_sequence_map, (opts.sequence_map, default_opts.sequence_map)) final.update(final_s) initial.update(initial_s) compare_keymaps(final, initial) def create_opts(args, debug_config=False, accumulate_bad_lines=None): from .config import load_config config = tuple(resolve_config(SYSTEM_CONF, defconf, args.config)) if debug_config: print(version(add_rev=True)) print(' '.join(os.uname())) if is_macos: import subprocess print(' '.join(subprocess.check_output(['sw_vers']).decode('utf-8').splitlines()).strip()) if os.path.exists('/etc/issue'): with open('/etc/issue', encoding='utf-8', errors='replace') as f: print(f.read().strip()) if os.path.exists('/etc/lsb-release'): with open('/etc/lsb-release', encoding='utf-8', errors='replace') as f: print(f.read().strip()) config = tuple(x for x in config if os.path.exists(x)) if config: print(green('Loaded config files:'), ', '.join(config)) overrides = (a.replace('=', ' ', 1) for a in args.override or ()) opts = load_config(*config, overrides=overrides, accumulate_bad_lines=accumulate_bad_lines) if debug_config: if not is_macos: print('Running under:', green('Wayland' if is_wayland(opts) else 'X11')) compare_opts(opts) return opts kitty-0.15.0/kitty/client.py000066400000000000000000000060171356737523400157600ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal # Replay the log from --dump-commands. To use first run # kitty --dump-commands > file.txt # then run # kitty --replay-commands file.txt # will replay the commands and pause at the end waiting for user to press enter import sys from contextlib import suppress CSI = '\033[' OSC = '\033]' def write(x): sys.stdout.write(x) sys.stdout.flush() def set_title(*args): pass def set_icon(*args): pass def screen_bell(): pass def screen_cursor_position(y, x): write(CSI + '%s;%sH' % (y, x)) def screen_cursor_forward(amt): write(CSI + '%sC' % amt) def screen_cursor_back1(amt): write(CSI + '%sD' % amt) def screen_designate_charset(which, to): which = '()'[int(which)] to = chr(int(to)) write('\033' + which + to) def select_graphic_rendition(*a): write(CSI + '%sm' % ';'.join(map(str, a))) def screen_cursor_to_column(c): write(CSI + '%dG' % c) def screen_cursor_to_line(l): write(CSI + '%dd' % l) def screen_set_mode(x, private): write(CSI + ('?' if private else '') + str(x) + 'h') def screen_reset_mode(x, private): write(CSI + ('?' if private else '') + str(x) + 'l') def screen_set_margins(t, b): write(CSI + '%d;%dr' % (t, b)) def screen_indexn(n): write(CSI + '%dS' % n) def screen_erase_in_display(how, private): write(CSI + ('?' if private else '') + str(how) + 'J') def screen_erase_in_line(how, private): write(CSI + ('?' if private else '') + str(how) + 'K') def screen_delete_lines(num): write(CSI + str(num) + 'M') def screen_cursor_up2(count): write(CSI + '%dA' % count) def screen_cursor_down(count): write(CSI + '%dB' % count) def screen_carriage_return(): write('\r') def screen_linefeed(): write('\n') def screen_backspace(): write('\x08') def screen_set_cursor(mode, secondary): write(CSI + '%d q' % secondary) def screen_insert_lines(num): write(CSI + '%dL' % num) def draw(*a): write(' '.join(a)) def screen_manipulate_title_stack(op, which): write(CSI + '%d;%dt' % (op, which)) def report_device_attributes(mode, char): x = CSI if char: x += ord(char) if mode: x += str(mode) write(CSI + x + 'c') def write_osc(code, string=''): if string: string = ';' + string write(OSC + str(code) + string + '\x07') set_dynamic_color = set_color_table_color = write_osc def replay(raw): for line in raw.splitlines(): if line.strip() and not line.startswith('#'): cmd, rest = line.partition(' ')[::2] if cmd in {'draw', 'set_title', 'set_icon', 'set_dynamic_color', 'set_color_table_color'}: globals()[cmd](rest) else: rest = map(int, rest.split()) if rest else () globals()[cmd](*rest) def main(path): with open(path) as f: raw = f.read() replay(raw) with suppress(EOFError, KeyboardInterrupt): input() kitty-0.15.0/kitty/cmds.py000066400000000000000000001247351356737523400154400ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import json import os import sys from contextlib import suppress from .cli import ( Namespace, get_defaults_from_seq, parse_args, parse_option_spec ) from .config import parse_config, parse_send_text_bytes from .constants import appname from .fast_data_types import focus_os_window from .launch import ( launch as do_launch, options_spec as launch_options_spec, parse_launch_args ) from .tabs import SpecialWindow from .utils import natsort_ints class MatchError(ValueError): hide_traceback = True def __init__(self, expression, target='windows'): ValueError.__init__(self, 'No matching {} for expression: {}'.format(target, expression)) class OpacityError(ValueError): hide_traceback = True class UnknownLayout(ValueError): hide_traceback = True cmap = {} def cmd( short_desc, desc=None, options_spec=None, no_response=False, argspec='...', string_return_is_error=False, args_count=None, ): if options_spec: defaults = None def get_defaut_value(name, missing=None): nonlocal defaults if defaults is None: defaults = get_defaults_from_seq(parse_option_spec(options_spec)[0]) return defaults.get(name, missing) else: def get_defaut_value(name, missing=None): return missing def payload_get(payload, key, opt_name=None): ans = payload.get(key, payload_get) if ans is not payload_get: return ans return get_defaut_value(opt_name or key) def w(func): func.short_desc = short_desc func.argspec = argspec func.desc = desc or short_desc func.name = func.__name__[4:].replace('_', '-') func.options_spec = options_spec func.is_cmd = True func.impl = lambda: globals()[func.__name__[4:]] func.no_response = no_response func.string_return_is_error = string_return_is_error func.args_count = 0 if not argspec else args_count func.get_default = get_defaut_value func.payload_get = payload_get cmap[func.name] = func return func return w MATCH_WINDOW_OPTION = '''\ --match -m The window to match. Match specifications are of the form: :italic:`field:regexp`. Where field can be one of: id, title, pid, cwd, cmdline, num, env. You can use the :italic:`ls` command to get a list of windows. Note that for numeric fields such as id, pid and num the expression is interpreted as a number, not a regular expression. The field num refers to the window position in the current tab, starting from zero and counting clockwise (this is the same as the order in which the windows are reported by the :italic:`ls` command). The window id of the current window is available as the KITTY_WINDOW_ID environment variable. When using the :italic:`env` field to match on environment variables you can specify only the environment variable name or a name and value, for example, :italic:`env:MY_ENV_VAR=2` ''' MATCH_TAB_OPTION = '''\ --match -m The tab to match. Match specifications are of the form: :italic:`field:regexp`. Where field can be one of: id, title, pid, cwd, env, cmdline. You can use the :italic:`ls` command to get a list of tabs. Note that for numeric fields such as id and pid the expression is interpreted as a number, not a regular expression. When using title or id, first a matching tab is looked for and if not found a matching window is looked for, and the tab for that window is used. ''' def windows_for_payload(boss, window, payload): if payload.get('all'): windows = tuple(boss.all_windows) else: windows = (window or boss.active_window,) if payload.get('match_window'): windows = tuple(boss.match_windows(payload['match_window'])) if not windows: raise MatchError(payload['match_window']) if payload.get('match_tab'): tabs = tuple(boss.match_tabs(payload['match_tab'])) if not tabs: raise MatchError(payload['match_tab'], 'tabs') for tab in tabs: windows += tuple(tab) return windows # ls {{{ @cmd( 'List all tabs/windows', 'List all windows. The list is returned as JSON tree. The top-level is a list of' ' operating system {appname} windows. Each OS window has an :italic:`id` and a list' ' of :italic:`tabs`. Each tab has its own :italic:`id`, a :italic:`title` and a list of :italic:`windows`.' ' Each window has an :italic:`id`, :italic:`title`, :italic:`current working directory`, :italic:`process id (PID)`, ' ' :italic:`command-line` and :italic:`environment` of the process running in the window.\n\n' 'You can use these criteria to select windows/tabs for the other commands.'.format(appname=appname), argspec='' ) def cmd_ls(global_opts, opts, args): ''' No payload ''' pass def ls(boss, window): data = list(boss.list_os_windows()) data = json.dumps(data, indent=2, sort_keys=True) return data # }}} # set_font_size {{{ @cmd( 'Set the font size in the active top-level OS window', 'Sets the font size to the specified size, in pts. Note' ' that in kitty all sub-windows in the same OS window' ' must have the same font size. A value of zero' ' resets the font size to default. Prefixing the value' ' with a + or - increments the font size by the specified' ' amount.', argspec='FONT_SIZE', args_count=1, options_spec='''\ --all -a type=bool-set By default, the font size is only changed in the active OS window, this option will cause it to be changed in all OS windows. ''') def cmd_set_font_size(global_opts, opts, args): ''' size+: The new font size in pts (a positive number) all: Boolean whether to change font size in the current window or all windows increment_op: The string ``+`` or ``-`` to interpret size as an increment ''' if not args: raise SystemExit('No font size specified') fs = args[0] inc = fs[0] if fs and fs[0] in '+-' else None return {'size': abs(float(fs)), 'all': opts.all, 'increment_op': inc} def set_font_size(boss, window, payload): boss.change_font_size( cmd_set_font_size.payload_get(payload, 'all'), payload.get('increment_op', None), payload['size']) # }}} # send_text {{{ @cmd( 'Send arbitrary text to specified windows', 'Send arbitrary text to specified windows. The text follows Python' ' escaping rules. So you can use escapes like :italic:`\\x1b` to send control codes' ' and :italic:`\\u21fa` to send unicode characters. If you use the :option:`kitty @ send-text --match` option' ' the text will be sent to all matched windows. By default, text is sent to' ' only the currently active window.', options_spec=MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--match-tab -t') + '''\n --stdin type=bool-set Read the text to be sent from :italic:`stdin`. Note that in this case the text is sent as is, not interpreted for escapes. If stdin is a terminal, you can press Ctrl-D to end reading. --from-file Path to a file whose contents you wish to send. Note that in this case the file contents are sent as is, not interpreted for escapes. ''', no_response=True, argspec='[TEXT TO SEND]' ) def cmd_send_text(global_opts, opts, args): ''' text+: The text being sent is_binary+: If False text is interpreted as a python string literal instead of plain text match: A string indicating the window to send text to match_tab: A string indicating the tab to send text to ''' limit = 1024 ret = {'match': opts.match, 'is_binary': False, 'match_tab': opts.match_tab} def pipe(): ret['is_binary'] = True if sys.stdin.isatty(): import select fd = sys.stdin.fileno() keep_going = True while keep_going: rd = select.select([fd], [], [])[0] if not rd: break data = os.read(fd, limit) if not data: break # eof data = data.decode('utf-8') if '\x04' in data: data = data[:data.index('\x04')] keep_going = False ret['text'] = data yield ret else: while True: data = sys.stdin.read(limit) if not data: break ret['text'] = data[:limit] yield ret def chunks(text): ret['is_binary'] = False while text: ret['text'] = text[:limit] yield ret text = text[limit:] def file_pipe(path): ret['is_binary'] = True with open(path, encoding='utf-8') as f: while True: data = f.read(limit) if not data: break ret['text'] = data yield ret sources = [] if opts.stdin: sources.append(pipe()) if opts.from_file: sources.append(file_pipe(opts.from_file)) text = ' '.join(args) sources.append(chunks(text)) def chain(): for src in sources: yield from src return chain() def send_text(boss, window, payload): windows = [boss.active_window] pg = cmd_send_text.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) mt = pg(payload, 'match_tab') if mt: windows = [] tabs = tuple(boss.match_tabs(mt)) if not tabs: raise MatchError(payload['match_tab'], 'tabs') for tab in tabs: windows += tuple(tab) data = payload['text'].encode('utf-8') if payload['is_binary'] else parse_send_text_bytes(payload['text']) for window in windows: if window is not None: window.write_to_child(data) # }}} # set_window_title {{{ @cmd( 'Set the window title', 'Set the title for the specified window(s). If you use the :option:`kitty @ set-window-title --match` option' ' the title will be set for all matched windows. By default, only the window' ' in which the command is run is affected. If you do not specify a title, the' ' last title set by the child process running in the window will be used.', options_spec=''' --temporary type=bool-set By default, if you use :italic:`set-window-title` the title will be permanently changed and programs running in the window will not be able to change it again. If you want to allow other programs to change it afterwards, use this option. ''' + '\n\n' + MATCH_WINDOW_OPTION, argspec='TITLE ...' ) def cmd_set_window_title(global_opts, opts, args): ''' title+: The new title match: Which windows to change the title in temporary: Boolean indicating if the change is temporary or permanent ''' return {'title': ' '.join(args), 'match': opts.match, 'temporary': opts.temporary} def set_window_title(boss, window, payload): windows = [window or boss.active_window] pg = cmd_set_window_title.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) for window in windows: if window: if pg(payload, 'temporary'): window.override_title = None window.title_changed(payload['title']) else: window.set_title(payload['title']) # }}} # set_tab_title {{{ @cmd( 'Set the tab title', 'Set the title for the specified tab(s). If you use the :option:`kitty @ set-tab-title --match` option' ' the title will be set for all matched tabs. By default, only the tab' ' in which the command is run is affected. If you do not specify a title, the' ' title of the currently active window in the tab is used.', options_spec=MATCH_TAB_OPTION, argspec='TITLE ...' ) def cmd_set_tab_title(global_opts, opts, args): ''' title+: The new title match: Which tab to change the title of ''' return {'title': ' '.join(args), 'match': opts.match} def set_tab_title(boss, window, payload): pg = cmd_set_tab_title.payload_get match = pg(payload, 'match') if match: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.tab_for_window(window) if window else boss.active_tab] for tab in tabs: if tab: tab.set_title(payload['title']) # }}} # detach_window {{{ @cmd( 'Detach a window and place it in a different/new tab', 'Detach the specified window and either move it into a new tab, a new OS window' ' or add it to the specified tab. Use the special value :code:`new` for --target-tab' ' to move to a new tab. If no target tab is specified the window is moved to a new OS window.', options_spec=MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--target-tab -t') + '''\n --self type=bool-set If specified detach the window this command is run in, rather than the active window. ''', argspec='' ) def cmd_detach_window(global_opts, opts, args): ''' match: Which window to detach target: Which tab to move the detached window to self: Boolean indicating whether to detach the window the command is run in ''' return {'match': opts.match, 'target': opts.target_tab, 'self': opts.self} def detach_window(boss, window, payload): pg = cmd_detach_window.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) else: windows = [window if window and pg(payload, 'self') else boss.active_window] match = pg(payload, 'target_tab') kwargs = {} if match: if match == 'new': kwargs['target_tab_id'] = 'new' else: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') kwargs['target_tab_id'] = tabs[0].id if not kwargs: kwargs['target_os_window_id'] = 'new' for window in windows: boss._move_window_to(window=window, **kwargs) # }}} # detach_tab {{{ @cmd( 'Detach a tab and place it in a different/new OS Window', 'Detach the specified tab and either move it into a new OS window' ' or add it to the OS Window containing the tab specified by --target-tab', options_spec=MATCH_TAB_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--target-tab -t') + '''\n --self type=bool-set If specified detach the tab this command is run in, rather than the active tab. ''', argspec='' ) def cmd_detach_tab(global_opts, opts, args): ''' match: Which tab to detach target: Which OS Window to move the detached tab to self: Boolean indicating whether to detach the tab the command is run in ''' return {'match': opts.match, 'target': opts.target_tab, 'self': opts.self} def detach_tab(boss, window, payload): pg = cmd_detach_tab.payload_get match = pg(payload, 'match') if match: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match) else: tabs = [window.tabref() if pg(payload, 'self') and window and window.tabref() else boss.active_tab] match = pg(payload, 'target_tab') kwargs = {} if match: targets = tuple(boss.match_tabs(match)) if not targets: raise MatchError(match, 'tabs') kwargs['target_os_window_id'] = targets[0].os_window_id for tab in tabs: boss._move_tab_to(tab=tab, **kwargs) # }}} # goto_layout {{{ @cmd( 'Set the window layout', 'Set the window layout in the specified tab (or the active tab if not specified).' ' You can use special match value :italic:`all` to set the layout in all tabs.', options_spec=MATCH_TAB_OPTION, argspec='LAYOUT_NAME' ) def cmd_goto_layout(global_opts, opts, args): ''' layout+: The new layout name match: Which tab to change the layout of ''' try: return {'layout': args[0], 'match': opts.match} except IndexError: raise SystemExit('No layout specified') def goto_layout(boss, window, payload): pg = cmd_goto_layout.payload_get match = pg(payload, 'match') if match: if match == 'all': tabs = tuple(boss.all_tabs) else: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.tab_for_window(window) if window else boss.active_tab] for tab in tabs: if tab: try: tab.goto_layout(payload['layout'], raise_exception=True) except ValueError: raise UnknownLayout('The layout {} is unknown or disabled'.format(payload['layout'])) # }}} # last_used_layout {{{ @cmd( 'Switch to the last used layout', 'Switch to the last used window layout in the specified tab (or the active tab if not specified).' ' You can use special match value :italic:`all` to set the layout in all tabs.', options_spec=MATCH_TAB_OPTION, ) def cmd_last_used_layout(global_opts, opts, args): ''' match: Which tab to change the layout of ''' return {'match': opts.match} def last_used_layout(boss, window, payload): pg = cmd_last_used_layout.payload_get match = pg(payload, 'match') if match: if match == 'all': tabs = tuple(boss.all_tabs) else: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.tab_for_window(window) if window else boss.active_tab] for tab in tabs: if tab: tab.last_used_layout() # }}} # close_window {{{ @cmd( 'Close the specified window(s)', options_spec=MATCH_WINDOW_OPTION + '''\n --self type=bool-set If specified close the window this command is run in, rather than the active window. ''', argspec='' ) def cmd_close_window(global_opts, opts, args): ''' match: Which window to close self: Boolean indicating whether to close the window the command is run in ''' return {'match': opts.match, 'self': opts.self} def close_window(boss, window, payload): pg = cmd_close_window.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) else: windows = [window if window and pg(payload, 'self') else boss.active_window] for window in windows: if window: boss.close_window(window) # }}} # resize_window {{{ @cmd( 'Resize the specified window', 'Resize the specified window in the current layout. Note that not all layouts can resize all windows in all directions.', options_spec=MATCH_WINDOW_OPTION + '''\n --increment -i type=int default=2 The number of cells to change the size by, can be negative to decrease the size. --axis -a type=choices choices=horizontal,vertical,reset default=horizontal The axis along which to resize. If :italic:`horizontal`, it will make the window wider or narrower by the specified increment. If :italic:`vertical`, it will make the window taller or shorter by the specified increment. The special value :italic:`reset` will reset the layout to its default configuration. --self type=bool-set If specified resize the window this command is run in, rather than the active window. ''', argspec='', string_return_is_error=True ) def cmd_resize_window(global_opts, opts, args): ''' match: Which window to resize self: Boolean indicating whether to close the window the command is run in increment: Integer specifying the resize increment axis: One of :code:`horizontal, vertical` or :code:`reset` ''' return {'match': opts.match, 'increment': opts.increment, 'axis': opts.axis, 'self': opts.self} def resize_window(boss, window, payload): pg = cmd_resize_window.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) else: windows = [window if window and pg(payload, 'self') else boss.active_window] resized = False if windows and windows[0]: resized = boss.resize_layout_window( windows[0], increment=pg(payload, 'increment'), is_horizontal=pg(payload, 'axis') == 'horizontal', reset=pg(payload, 'axis') == 'reset' ) return resized # }}} # close_tab {{{ @cmd( 'Close the specified tab(s)', options_spec=MATCH_TAB_OPTION + '''\n --self type=bool-set If specified close the tab this command is run in, rather than the active tab. ''', argspec='' ) def cmd_close_tab(global_opts, opts, args): ''' match: Which tab to close self: Boolean indicating whether to close the window the command is run in ''' return {'match': opts.match, 'self': opts.self} def close_tab(boss, window, payload): pg = cmd_close_tab.payload_get match = pg(payload, 'match') if match: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.tab_for_window(window) if window and pg(payload, 'self') else boss.active_tab] for tab in tabs: if window: if tab: boss.close_tab(tab) # }}} # new_window {{{ @cmd( 'Open new window', 'Open a new window in the specified tab. If you use the :option:`kitty @ new-window --match` option' ' the first matching tab is used. Otherwise the currently active tab is used.' ' Prints out the id of the newly opened window (unless :option:`--no-response` is used). Any command line arguments' ' are assumed to be the command line used to run in the new window, if none' ' are provided, the default shell is run. For example:\n' ':italic:`kitty @ new-window --title Email mutt`', options_spec=MATCH_TAB_OPTION + '''\n --title The title for the new window. By default it will use the title set by the program running in it. --cwd The initial working directory for the new window. Defaults to whatever the working directory for the kitty process you are talking to is. --keep-focus type=bool-set Keep the current window focused instead of switching to the newly opened window --window-type default=kitty choices=kitty,os What kind of window to open. A kitty window or a top-level OS window. --new-tab type=bool-set Open a new tab --tab-title When using --new-tab set the title of the tab. --no-response type=bool-set default=false Don't wait for a response giving the id of the newly opened window. Note that using this option means that you will not be notified of failures and that the id of the new window will not be printed out. ''', argspec='[CMD ...]' ) def cmd_new_window(global_opts, opts, args): ''' args+: The command line to run in the new window, as a list, use an empty list to run the default shell match: The tab to open the new window in title: Title for the new window cwd: Working directory for the new window tab_title: Title for the new tab window_type: One of :code:`kitty` or :code:`os` keep_focus: Boolean indicating whether the current window should retain focus or not ''' if opts.no_response: global_opts.no_command_response = True return {'match': opts.match, 'title': opts.title, 'cwd': opts.cwd, 'new_tab': opts.new_tab, 'tab_title': opts.tab_title, 'window_type': opts.window_type, 'no_response': opts.no_response, 'keep_focus': opts.keep_focus, 'args': args or []} def new_window(boss, window, payload): pg = cmd_new_window.payload_get w = SpecialWindow(cmd=payload['args'] or None, override_title=pg(payload, 'title'), cwd=pg(payload, 'cwd')) old_window = boss.active_window if pg(payload, 'new_tab'): boss._new_tab(w) tab = boss.active_tab if pg(payload, 'tab_title'): tab.set_title(pg(payload, 'tab_title')) wid = boss.active_window.id if pg(payload, 'keep_focus') and old_window: boss.set_active_window(old_window) return None if pg(payload, 'no_response') else str(wid) if pg(payload, 'window_type') == 'os': boss._new_os_window(w) wid = boss.active_window.id if pg(payload, 'keep_focus') and old_window: os_window_id = boss.set_active_window(old_window) if os_window_id: focus_os_window(os_window_id) return None if pg(payload, 'no_response') else str(wid) match = pg(payload, 'match') if match: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.active_tab] tab = tabs[0] w = tab.new_special_window(w) if pg(payload, 'keep_focus') and old_window: boss.set_active_window(old_window) return None if pg(payload, 'no_response') else str(w.id) # }}} # launch {{{ @cmd( 'Run an arbitrary process in a new window/tab', ' Prints out the id of the newly opened window. Any command line arguments' ' are assumed to be the command line used to run in the new window, if none' ' are provided, the default shell is run. For example:' ' :italic:`kitty @ launch --title Email mutt`.', options_spec=MATCH_TAB_OPTION + '\n\n' + '''\ --no-response type=bool-set Do not print out the id of the newly created window. --self type=bool-set If specified the tab containing the window this command is run in is used instead of the active tab ''' + '\n\n' + launch_options_spec().replace(':option:`launch', ':option:`kitty @ launch'), argspec='[CMD ...]' ) def cmd_launch(global_opts, opts, args): ''' args+: The command line to run in the new window, as a list, use an empty list to run the default shell match: The tab to open the new window in window_title: Title for the new window cwd: Working directory for the new window env: List of environment varibles of the form NAME=VALUE tab_title: Title for the new tab type: The type of window to open keep_focus: Boolean indicating whether the current window should retain focus or not copy_colors: Boolean indicating whether to copy the colors from the current window copy_cmdline: Boolean indicating whether to copy the cmdline from the current window copy_env: Boolean indicating whether to copy the environ from the current window location: Where in the tab to open the new window allow_remote_control: Boolean indicating whether to allow remote control from the new window stdin_source: Where to get stdin for thew process from stdin_add_formatting: Boolean indicating whether to add formatting codes to stdin stdin_add_line_wrap_markers: Boolean indicating whether to add line wrap markers to stdin no_response: Boolean indicating whether to send back the window id ''' if opts.no_response: global_opts.no_command_response = True ans = {'args': args or []} for attr, val in opts.__dict__.items(): ans[attr] = val return ans def launch(boss, window, payload): pg = cmd_launch.payload_get default_opts = parse_launch_args()[0] opts = {} for key, default_value in default_opts.__dict__.items(): opts[key] = payload.get(key, default_value) opts = Namespace(opts) match = pg(payload, 'match') if match: tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') else: tabs = [boss.active_tab] if pg(payload, 'self') and window and window.tabref(): tabs = [window.tabref()] tab = tabs[0] w = do_launch(boss, opts, pg(payload, 'args') or None, target_tab=tab) return None if pg(payload, 'no_response') else str(getattr(w, 'id', 0)) # }}} # focus_window {{{ @cmd( 'Focus the specified window', 'Focus the specified window, if no window is specified, focus the window this command is run inside.', argspec='', options_spec=MATCH_WINDOW_OPTION + '''\n\n --no-response type=bool-set default=false Don't wait for a response from kitty. This means that even if no matching window is found, the command will exit with a success code. ''' ) def cmd_focus_window(global_opts, opts, args): ''' match: The window to focus ''' if opts.no_response: global_opts.no_command_response = True return {'match': opts.match, 'no_response': opts.no_response} def focus_window(boss, window, payload): pg = cmd_focus_window.payload_get windows = [window or boss.active_window] match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) for window in windows: if window: os_window_id = boss.set_active_window(window) if os_window_id: focus_os_window(os_window_id, True) break # }}} # scroll_window {{{ @cmd( 'Scroll the specified window', 'Scroll the specified window, if no window is specified, scroll the window this command is run inside.' ' SCROLL_AMOUNT can be either the keywords :code:`start` or :code:`end` or an' ' argument of the form [unit][+-]. For example, 30 will scroll down 30 lines and 2p- will' ' scroll up 2 pages.', argspec='SCROLL_AMOUNT', options_spec=MATCH_WINDOW_OPTION ) def cmd_scroll_window(global_opts, opts, args): ''' amount+: The amount to scroll, a two item list with the first item being \ either a number or the keywords, start and end. \ And the second item being either 'p' for pages or 'l' for lines. match: The window to scroll ''' amt = args[0] ans = {'match': opts.match} if amt in ('start', 'end'): ans['amount'] = amt, None else: pages = 'p' in amt amt = amt.replace('p', '') mult = -1 if amt.endswith('-') else 1 amt = int(amt.replace('-', '')) ans['amount'] = [amt * mult, 'p' if pages else 'l'] return ans def scroll_window(boss, window, payload): pg = cmd_scroll_window.payload_get windows = [window or boss.active_window] match = pg(payload, 'match') amt = pg(payload, 'amount') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) for window in windows: if window: if amt[0] in ('start', 'end'): getattr(window, {'start': 'scroll_home'}.get(amt[0], 'scroll_end'))() else: amt, unit = amt unit = 'page' if unit == 'p' else 'line' direction = 'up' if amt < 0 else 'down' func = getattr(window, 'scroll_{}_{}'.format(unit, direction)) for i in range(abs(amt)): func() # }}} # focus_tab {{{ @cmd( 'Focus the specified tab', 'The active window in the specified tab will be focused.', options_spec=MATCH_TAB_OPTION + ''' --no-response type=bool-set default=false Don't wait for a response indicating the success of the action. Note that using this option means that you will not be notified of failures. ''', argspec='', ) def cmd_focus_tab(global_opts, opts, args): ''' match: The tab to focus ''' if opts.no_response: global_opts.no_command_response = True return {'match': opts.match} def focus_tab(boss, window, payload): pg = cmd_focus_tab.payload_get match = pg(payload, 'match') tabs = tuple(boss.match_tabs(match)) if not tabs: raise MatchError(match, 'tabs') tab = tabs[0] boss.set_active_tab(tab) # }}} # get_text {{{ @cmd( 'Get text from the specified window', options_spec=MATCH_WINDOW_OPTION + '''\n --extent default=screen choices=screen, all, selection What text to get. The default of screen means all text currently on the screen. all means all the screen+scrollback and selection means currently selected text. --ansi type=bool-set By default, only plain text is returned. If you specify this flag, the text will include the formatting escape codes for colors/bold/italic/etc. Note that when getting the current selection, the result is always plain text. --self type=bool-set If specified get text from the window this command is run in, rather than the active window. ''', argspec='' ) def cmd_get_text(global_opts, opts, args): ''' match: The tab to focus extent: One of :code:`screen`, :code:`all`, or :code:`selection` ansi: Boolean, if True send ANSI formatting codes self: Boolean, if True use window command was run in ''' return {'match': opts.match, 'extent': opts.extent, 'ansi': opts.ansi, 'self': opts.self} def get_text(boss, window, payload): pg = cmd_get_text.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) else: windows = [window if window and pg(payload, 'self') else boss.active_window] window = windows[0] if pg(payload, 'extent') == 'selection': ans = window.text_for_selection() else: ans = window.as_text(as_ansi=bool(pg(payload, 'ansi')), add_history=pg(payload, 'extent') == 'all') return ans # }}} # set_colors {{{ @cmd( 'Set terminal colors', 'Set the terminal colors for the specified windows/tabs (defaults to active window). You can either specify the path to a conf file' ' (in the same format as kitty.conf) to read the colors from or you can specify individual colors,' ' for example: kitty @ set-colors foreground=red background=white', options_spec='''\ --all -a type=bool-set By default, colors are only changed for the currently active window. This option will cause colors to be changed in all windows. --configured -c type=bool-set Also change the configured colors (i.e. the colors kitty will use for new windows or after a reset). --reset type=bool-set Restore all colors to the values they had at kitty startup. Note that if you specify this option, any color arguments are ignored and --configured and --all are implied. ''' + '\n\n' + MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--match-tab -t'), argspec='COLOR_OR_FILE ...' ) def cmd_set_colors(global_opts, opts, args): ''' colors+: An object mapping names to colors as 24-bit RGB integers cursor_text_color: A 24-bit color for text under the cursor match_window: Window to change colors in match_tab: Tab to change colors in all: Boolean indicating change colors everywhere or not configured: Boolean indicating whether to change the configured colors. Must be True if reset is True reset: Boolean indicating colors should be reset to startup values ''' from .rgb import color_as_int, Color colors, cursor_text_color = {}, False if not opts.reset: for spec in args: if '=' in spec: colors.update(parse_config((spec.replace('=', ' '),))) else: with open(os.path.expanduser(spec), encoding='utf-8', errors='replace') as f: colors.update(parse_config(f)) cursor_text_color = colors.pop('cursor_text_color', False) colors = {k: color_as_int(v) for k, v in colors.items() if isinstance(v, Color)} return { 'match_window': opts.match, 'match_tab': opts.match_tab, 'all': opts.all or opts.reset, 'configured': opts.configured or opts.reset, 'colors': colors, 'reset': opts.reset, 'cursor_text_color': cursor_text_color } def set_colors(boss, window, payload): pg = cmd_set_colors.payload_get from .rgb import color_as_int, Color windows = windows_for_payload(boss, window, payload) if pg(payload, 'reset'): payload['colors'] = {k: color_as_int(v) for k, v in boss.startup_colors.items()} payload['cursor_text_color'] = boss.startup_cursor_text_color profiles = tuple(w.screen.color_profile for w in windows) from .fast_data_types import patch_color_profiles cursor_text_color = payload.get('cursor_text_color', False) if isinstance(cursor_text_color, (tuple, list, Color)): cursor_text_color = color_as_int(Color(*cursor_text_color)) patch_color_profiles(payload['colors'], cursor_text_color, profiles, pg(payload, 'configured')) boss.patch_colors(payload['colors'], cursor_text_color, pg(payload, 'configured')) default_bg_changed = 'background' in payload['colors'] for w in windows: if default_bg_changed: boss.default_bg_changed_for(w.id) w.refresh() # }}} # get_colors {{{ @cmd( 'Get terminal colors', 'Get the terminal colors for the specified window (defaults to active window). Colors will be output to stdout in the same syntax as used for kitty.conf', options_spec='''\ --configured -c type=bool-set Instead of outputting the colors for the specified window, output the currently configured colors. ''' + '\n\n' + MATCH_WINDOW_OPTION ) def cmd_get_colors(global_opts, opts, args): ''' match: The window to get the colors for configured: Boolean indicating whether to get configured or current colors ''' return {'configured': opts.configured, 'match': opts.match} def get_colors(boss, window, payload): from .rgb import Color, color_as_sharp, color_from_int pg = cmd_get_colors.payload_get ans = {k: getattr(boss.opts, k) for k in boss.opts if isinstance(getattr(boss.opts, k), Color)} if not pg(payload, 'configured'): windows = (window or boss.active_window,) if pg(payload, 'match'): windows = tuple(boss.match_windows(pg(payload, 'match'))) if not windows: raise MatchError(pg(payload, 'match')) ans.update({k: color_from_int(v) for k, v in windows[0].current_colors.items()}) all_keys = natsort_ints(ans) maxlen = max(map(len, all_keys)) return '\n'.join(('{:%ds} {}' % maxlen).format(key, color_as_sharp(ans[key])) for key in all_keys) # }}} # set_background_opacity {{{ @cmd( 'Set the background_opacity', 'Set the background opacity for the specified windows. This will only work if you have turned on' ' :opt:`dynamic_background_opacity` in :file:`kitty.conf`. The background opacity affects all kitty windows in a' ' single os_window. For example: kitty @ set-background-opacity 0.5', options_spec='''\ --all -a type=bool-set By default, colors are only changed for the currently active window. This option will cause colors to be changed in all windows. ''' + '\n\n' + MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--match-tab -t'), argspec='OPACITY', args_count=1 ) def cmd_set_background_opacity(global_opts, opts, args): ''' opacity+: A number between 0.1 and 1 match_window: Window to change opacity in match_tab: Tab to change opacity in all: Boolean indicating operate on all windows ''' opacity = max(0.1, min(float(args[0]), 1.0)) return { 'opacity': opacity, 'match_window': opts.match, 'all': opts.all, 'match_tab': opts.match_tab } def set_background_opacity(boss, window, payload): if not boss.opts.dynamic_background_opacity: raise OpacityError('You must turn on the dynamic_background_opacity option in kitty.conf to be able to set background opacity') windows = windows_for_payload(boss, window, payload) for os_window_id in {w.os_window_id for w in windows}: boss._set_os_window_background_opacity(os_window_id, payload['opacity']) # }}} # disable_ligatures {{{ @cmd( 'Control ligature rendering', 'Control ligature rendering for the specified windows/tabs (defaults to active window). The STRATEGY' ' can be one of: never, always, cursor', options_spec='''\ --all -a type=bool-set By default, ligatures are only affected in the active window. This option will cause ligatures to be changed in all windows. ''' + '\n\n' + MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--match-tab -t'), argspec='STRATEGY' ) def cmd_disable_ligatures(global_opts, opts, args): ''' strategy+: One of :code:`never`, :code:`always` or :code:`cursor` match_window: Window to change opacity in match_tab: Tab to change opacity in all: Boolean indicating operate on all windows ''' strategy = args[0] if strategy not in ('never', 'always', 'cursor'): raise ValueError('{} is not a valid disable_ligatures strategy'.format('strategy')) return { 'strategy': strategy, 'match_window': opts.match, 'match_tab': opts.match_tab, 'all': opts.all, } def disable_ligatures(boss, window, payload): windows = windows_for_payload(boss, window, payload) boss.disable_ligatures_in(windows, payload['strategy']) # }}} # kitten {{{ @cmd( 'Run a kitten', 'Run a kitten over the specified window (active window by default).' ' The :italic:`kitten_name` can be either the name of a builtin kitten' ' or the path to a python file containing a custom kitten. If a relative path' ' is used it is searched for in the kitty config directory.', options_spec=MATCH_WINDOW_OPTION, argspec='kitten_name', ) def cmd_kitten(global_opts, opts, args): ''' kitten+: The name of the kitten to run args: Arguments to pass to the kitten as a list match: The window to run the kitten over ''' if len(args) < 1: raise SystemExit('Must specify kitten name') return {'match': opts.match, 'args': list(args)[1:], 'kitten': args[0]} def kitten(boss, window, payload): windows = [window or boss.active_window] pg = cmd_kitten.payload_get match = pg(payload, 'match') if match: windows = tuple(boss.match_windows(match)) if not windows: raise MatchError(match) for window in windows: if window: boss._run_kitten(payload['kitten'], args=tuple(payload.get('args', ())), window=window) break # }}} def cli_params_for(func): return (func.options_spec or '\n').format, func.argspec, func.desc, '{} @ {}'.format(appname, func.name) def parse_subcommand_cli(func, args): opts, items = parse_args(args[1:], *cli_params_for(func)) if func.args_count is not None and func.args_count != len(items): if func.args_count == 0: raise SystemExit('Unknown extra argument(s) supplied to {}'.format(func.name)) raise SystemExit('Must specify exactly {} argument(s) for {}'.format(func.args_count, func.name)) return opts, items def display_subcommand_help(func): with suppress(SystemExit): parse_args(['--help'], (func.options_spec or '\n').format, func.argspec, func.desc, func.name) kitty-0.15.0/kitty/cocoa_window.m000066400000000000000000000412361356737523400167630ustar00rootroot00000000000000/* * cocoa_window.m * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "monotonic.h" #include #include // Needed for _NSGetProgname #include #include #if (MAC_OS_X_VERSION_MAX_ALLOWED < 101200) #define NSWindowStyleMaskResizable NSResizableWindowMask #define NSEventModifierFlagOption NSAlternateKeyMask #define NSEventModifierFlagCommand NSCommandKeyMask #define NSEventModifierFlagControl NSControlKeyMask #endif typedef int CGSConnectionID; typedef int CGSWindowID; typedef int CGSWorkspaceID; typedef enum _CGSSpaceSelector { kCGSSpaceCurrent = 5, kCGSSpaceAll = 7 } CGSSpaceSelector; extern CGSConnectionID _CGSDefaultConnection(void); CFArrayRef CGSCopySpacesForWindows(CGSConnectionID Connection, CGSSpaceSelector Type, CFArrayRef Windows); static NSMenuItem* title_menu = NULL; static NSString* find_app_name(void) { size_t i; NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary]; // Keys to search for as potential application names NSString* name_keys[] = { @"CFBundleDisplayName", @"CFBundleName", @"CFBundleExecutable", }; for (i = 0; i < sizeof(name_keys) / sizeof(name_keys[0]); i++) { id name = infoDictionary[name_keys[i]]; if (name && [name isKindOfClass:[NSString class]] && ![name isEqualToString:@""]) { return name; } } char** progname = _NSGetProgname(); if (progname && *progname) return @(*progname); // Really shouldn't get here return @"kitty"; } @interface GlobalMenuTarget : NSObject + (GlobalMenuTarget *) shared_instance; @end @implementation GlobalMenuTarget - (void) show_preferences : (id)sender { (void)sender; set_cocoa_pending_action(PREFERENCES_WINDOW, NULL); } - (void) new_os_window : (id)sender { (void)sender; set_cocoa_pending_action(NEW_OS_WINDOW, NULL); } + (GlobalMenuTarget *) shared_instance { static GlobalMenuTarget *sharedGlobalMenuTarget = nil; @synchronized(self) { if (!sharedGlobalMenuTarget) sharedGlobalMenuTarget = [[GlobalMenuTarget alloc] init]; return sharedGlobalMenuTarget; } } @end static unichar new_window_key = 0; static NSEventModifierFlags new_window_mods = 0; static PyObject* cocoa_set_new_window_trigger(PyObject *self UNUSED, PyObject *args) { int mods, key; if (!PyArg_ParseTuple(args, "ii", &mods, &key)) return NULL; int nwm; get_cocoa_key_equivalent(key, mods, &new_window_key, &nwm); new_window_mods = nwm; if (new_window_key) Py_RETURN_TRUE; Py_RETURN_FALSE; } // Implementation of applicationDockMenu: for the app delegate static NSMenu *dockMenu = nil; static NSMenu * get_dock_menu(id self UNUSED, SEL _cmd UNUSED, NSApplication *sender UNUSED) { if (!dockMenu) { GlobalMenuTarget *global_menu_target = [GlobalMenuTarget shared_instance]; dockMenu = [[NSMenu alloc] init]; NSMenuItem *newWindowItem = [dockMenu addItemWithTitle:@"New OS window" action:@selector(new_os_window:) keyEquivalent:@""]; [newWindowItem setTarget:global_menu_target]; } return dockMenu; } static PyObject *notification_activated_callback = NULL; static PyObject* set_notification_activated_callback(PyObject *self UNUSED, PyObject *callback) { if (notification_activated_callback) Py_DECREF(notification_activated_callback); notification_activated_callback = callback; Py_INCREF(callback); Py_RETURN_NONE; } @interface NotificationDelegate : NSObject @end @implementation NotificationDelegate - (void)userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification { (void)(center); (void)(notification); } - (BOOL) userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification { (void)(center); (void)(notification); return YES; } - (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { (void)(center); (void)(notification); if (notification_activated_callback) { PyObject *ret = PyObject_CallFunction(notification_activated_callback, "z", notification.userInfo[@"user_id"] ? [notification.userInfo[@"user_id"] UTF8String] : NULL); if (ret == NULL) PyErr_Print(); else Py_DECREF(ret); } } @end static PyObject* cocoa_send_notification(PyObject *self UNUSED, PyObject *args) { char *identifier = NULL, *title = NULL, *subtitle = NULL, *informativeText = NULL, *path_to_image = NULL; if (!PyArg_ParseTuple(args, "zssz|z", &identifier, &title, &informativeText, &path_to_image, &subtitle)) return NULL; NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; if (!center) {PyErr_SetString(PyExc_RuntimeError, "Failed to get the user notification center"); return NULL; } if (!center.delegate) center.delegate = [[NotificationDelegate alloc] init]; NSUserNotification *n = [NSUserNotification new]; NSImage *img = nil; if (path_to_image) { NSString *p = @(path_to_image); NSURL *url = [NSURL fileURLWithPath:p]; img = [[NSImage alloc] initWithContentsOfURL:url]; [url release]; [p release]; if (img) { [n setValue:img forKey:@"_identityImage"]; [n setValue:@(false) forKey:@"_identityImageHasBorder"]; } [img release]; } #define SET(x) { \ if (x) { \ NSString *t = @(x); \ n.x = t; \ [t release]; \ }} SET(title); SET(subtitle); SET(informativeText); #undef SET if (identifier) { n.userInfo = @{@"user_id": @(identifier)}; } [center deliverNotification:n]; Py_RETURN_NONE; } @interface ServiceProvider : NSObject @end @implementation ServiceProvider - (void)openTab:(NSPasteboard*)pasteboard userData:(NSString *) UNUSED userData error:(NSError **) UNUSED error { [self openFilesFromPasteboard:pasteboard type:NEW_TAB_WITH_WD]; } - (void)openOSWindow:(NSPasteboard*)pasteboard userData:(NSString *) UNUSED userData error:(NSError **) UNUSED error { [self openFilesFromPasteboard:pasteboard type:NEW_OS_WINDOW_WITH_WD]; } - (void)openFilesFromPasteboard:(NSPasteboard *)pasteboard type:(int)type { NSDictionary *options = @{ NSPasteboardURLReadingFileURLsOnlyKey: @YES }; NSArray *filePathArray = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]] options:options]; for (NSURL *url in filePathArray) { NSString *path = [url path]; BOOL isDirectory = NO; if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDirectory]) { if (!isDirectory) { path = [path stringByDeletingLastPathComponent]; } set_cocoa_pending_action(type, [path UTF8String]); } } } @end // global menu {{{ void cocoa_create_global_menu(void) { NSString* app_name = find_app_name(); NSMenu* bar = [[NSMenu alloc] init]; GlobalMenuTarget *global_menu_target = [GlobalMenuTarget shared_instance]; [NSApp setMainMenu:bar]; NSMenuItem* appMenuItem = [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; NSMenu* appMenu = [[NSMenu alloc] init]; [appMenuItem setSubmenu:appMenu]; [appMenu addItemWithTitle:[NSString stringWithFormat:@"About %@", app_name] action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; NSMenuItem* preferences_menu_item = [[NSMenuItem alloc] initWithTitle:@"Preferences..." action:@selector(show_preferences:) keyEquivalent:@","], *new_os_window_menu_item = NULL; [preferences_menu_item setTarget:global_menu_target]; [appMenu addItem:preferences_menu_item]; if (new_window_key) { NSString *s = [NSString stringWithCharacters:&new_window_key length:1]; new_os_window_menu_item = [[NSMenuItem alloc] initWithTitle:@"New OS window" action:@selector(new_os_window:) keyEquivalent:s]; [new_os_window_menu_item setKeyEquivalentModifierMask:new_window_mods]; [new_os_window_menu_item setTarget:global_menu_target]; [appMenu addItem:new_os_window_menu_item]; [s release]; } [appMenu addItemWithTitle:[NSString stringWithFormat:@"Hide %@", app_name] action:@selector(hide:) keyEquivalent:@"h"]; [[appMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"] setKeyEquivalentModifierMask:NSEventModifierFlagOption | NSEventModifierFlagCommand]; [appMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; NSMenu* servicesMenu = [[NSMenu alloc] init]; [NSApp setServicesMenu:servicesMenu]; [[appMenu addItemWithTitle:@"Services" action:NULL keyEquivalent:@""] setSubmenu:servicesMenu]; [servicesMenu release]; [appMenu addItem:[NSMenuItem separatorItem]]; [appMenu addItemWithTitle:[NSString stringWithFormat:@"Quit %@", app_name] action:@selector(terminate:) keyEquivalent:@"q"]; [appMenu release]; NSMenuItem* windowMenuItem = [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; NSMenu* windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; [windowMenuItem setSubmenu:windowMenu]; [windowMenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [windowMenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [windowMenu addItem:[NSMenuItem separatorItem]]; [windowMenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""]; [windowMenu addItem:[NSMenuItem separatorItem]]; [[windowMenu addItemWithTitle:@"Enter Full Screen" action:@selector(toggleFullScreen:) keyEquivalent:@"f"] setKeyEquivalentModifierMask:NSEventModifierFlagControl | NSEventModifierFlagCommand]; [NSApp setWindowsMenu:windowMenu]; [windowMenu release]; [preferences_menu_item release]; if (new_os_window_menu_item) { [new_os_window_menu_item release]; } [bar release]; class_addMethod( object_getClass([NSApp delegate]), @selector(applicationDockMenu:), (IMP)get_dock_menu, "@@:@"); [NSApp setServicesProvider:[[[ServiceProvider alloc] init] autorelease]]; } void cocoa_update_menu_bar_title(PyObject *pytitle) { NSString *title = @(PyUnicode_AsUTF8(pytitle)); NSMenu *bar = [NSApp mainMenu]; if (title_menu != NULL) { [bar removeItem:title_menu]; } title_menu = [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; NSMenu *m = [[NSMenu alloc] initWithTitle:[NSString stringWithFormat:@" :: %@", title]]; [title_menu setSubmenu:m]; [m release]; } // }}} bool cocoa_make_window_resizable(void *w, bool resizable) { NSWindow *window = (NSWindow*)w; @try { if (resizable) { [window setStyleMask: [window styleMask] | NSWindowStyleMaskResizable]; } else { [window setStyleMask: [window styleMask] & ~NSWindowStyleMaskResizable]; } } @catch (NSException *e) { log_error("Failed to set style mask: %s: %s", [[e name] UTF8String], [[e reason] UTF8String]); return false; } return true; } #define NSLeftAlternateKeyMask (0x000020 | NSEventModifierFlagOption) #define NSRightAlternateKeyMask (0x000040 | NSEventModifierFlagOption) bool cocoa_alt_option_key_pressed(NSUInteger flags) { NSUInteger q = (OPT(macos_option_as_alt) == 1) ? NSRightAlternateKeyMask : NSLeftAlternateKeyMask; return ((q & flags) == q) ? true : false; } void cocoa_focus_window(void *w) { NSWindow *window = (NSWindow*)w; [window makeKeyWindow]; } size_t cocoa_get_workspace_ids(void *w, size_t *workspace_ids, size_t array_sz) { NSWindow *window = (NSWindow*)w; if (!window) return 0; NSArray *window_array = @[ @([window windowNumber]) ]; CFArrayRef spaces = CGSCopySpacesForWindows(_CGSDefaultConnection(), kCGSSpaceAll, (__bridge CFArrayRef)window_array); CFIndex ans = CFArrayGetCount(spaces); if (ans > 0) { for (CFIndex i = 0; i < MIN(ans, (CFIndex)array_sz); i++) { NSNumber *s = (NSNumber*)CFArrayGetValueAtIndex(spaces, i); workspace_ids[i] = [s intValue]; } } else ans = 0; CFRelease(spaces); return ans; } static PyObject* cocoa_get_lang(PyObject UNUSED *self) { @autoreleasepool { NSString* locale = nil; NSString* lang_code = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]; NSString* country_code = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; if (lang_code && country_code) { locale = [NSString stringWithFormat:@"%@_%@", lang_code, country_code]; } else { locale = [[NSLocale currentLocale] localeIdentifier]; } if (!locale) { Py_RETURN_NONE; } return Py_BuildValue("s", [locale UTF8String]); } // autoreleasepool } monotonic_t cocoa_cursor_blink_interval(void) { @autoreleasepool { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; double on_period_ms = [defaults doubleForKey:@"NSTextInsertionPointBlinkPeriodOn"]; double off_period_ms = [defaults doubleForKey:@"NSTextInsertionPointBlinkPeriodOff"]; double period_ms = [defaults doubleForKey:@"NSTextInsertionPointBlinkPeriod"]; double max_value = 60 * 1000.0, ans = -1.0; if (on_period_ms != 0. || off_period_ms != 0.) { ans = on_period_ms + off_period_ms; } else if (period_ms != 0.) { ans = period_ms; } return ans > max_value ? 0ll : ms_double_to_monotonic_t(ans); } // autoreleasepool } void cocoa_set_activation_policy(bool hide_from_tasks) { [NSApp setActivationPolicy:(hide_from_tasks ? NSApplicationActivationPolicyAccessory : NSApplicationActivationPolicyRegular)]; } void cocoa_set_titlebar_color(void *w, color_type titlebar_color) { @autoreleasepool { NSWindow *window = (NSWindow*)w; double red = ((titlebar_color >> 16) & 0xFF) / 255.0; double green = ((titlebar_color >> 8) & 0xFF) / 255.0; double blue = (titlebar_color & 0xFF) / 255.0; NSColor *background = [NSColor colorWithSRGBRed:red green:green blue:blue alpha:1.0]; [window setTitlebarAppearsTransparent:YES]; [window setBackgroundColor:background]; double luma = 0.2126 * red + 0.7152 * green + 0.0722 * blue; if (luma < 0.5) { [window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; } else { [window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]]; } } // autoreleasepool } static void cleanup() { @autoreleasepool { if (dockMenu) [dockMenu release]; dockMenu = nil; if (notification_activated_callback) Py_DECREF(notification_activated_callback); notification_activated_callback = NULL; } // autoreleasepool } void cocoa_hide_window_title(void *w) { @autoreleasepool { NSWindow *window = (NSWindow*)w; [window setTitleVisibility:NSWindowTitleHidden]; } // autoreleasepool } static PyMethodDef module_methods[] = { {"cocoa_get_lang", (PyCFunction)cocoa_get_lang, METH_NOARGS, ""}, {"cocoa_set_new_window_trigger", (PyCFunction)cocoa_set_new_window_trigger, METH_VARARGS, ""}, {"cocoa_send_notification", (PyCFunction)cocoa_send_notification, METH_VARARGS, ""}, {"cocoa_set_notification_activated_callback", (PyCFunction)set_notification_activated_callback, METH_O, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_cocoa(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; if (Py_AtExit(cleanup) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the cocoa_window at exit handler"); return false; } return true; } kitty-0.15.0/kitty/colors.c000066400000000000000000000315121356737523400155730ustar00rootroot00000000000000/* * colors.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #define EXTRA_INIT if (PyModule_AddFunctions(module, module_methods) != 0) return false; #include "data-types.h" #include PyTypeObject ColorProfile_Type; static uint32_t FG_BG_256[256] = { 0x000000, // 0 0xcd0000, // 1 0x00cd00, // 2 0xcdcd00, // 3 0x0000ee, // 4 0xcd00cd, // 5 0x00cdcd, // 6 0xe5e5e5, // 7 0x7f7f7f, // 8 0xff0000, // 9 0x00ff00, // 10 0xffff00, // 11 0x5c5cff, // 12 0xff00ff, // 13 0x00ffff, // 14 0xffffff, // 15 }; static inline void init_FG_BG_table(void) { if (UNLIKELY(FG_BG_256[255] == 0)) { // colors 16..232: the 6x6x6 color cube const uint8_t valuerange[6] = {0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff}; uint8_t i, j=16; for(i = 0; i < 216; i++, j++) { uint8_t r = valuerange[(i / 36) % 6], g = valuerange[(i / 6) % 6], b = valuerange[i % 6]; FG_BG_256[j] = (r << 16) | (g << 8) | b; } // colors 232..255: grayscale for(i = 0; i < 24; i++, j++) { uint8_t v = 8 + i * 10; FG_BG_256[j] = (v << 16) | (v << 8) | v; } } } PyObject* create_256_color_table() { init_FG_BG_table(); PyObject *ans = PyTuple_New(arraysz(FG_BG_256)); if (ans == NULL) return PyErr_NoMemory(); for (size_t i=0; i < arraysz(FG_BG_256); i++) { PyObject *temp = PyLong_FromUnsignedLong(FG_BG_256[i]); if (temp == NULL) { Py_CLEAR(ans); return NULL; } PyTuple_SET_ITEM(ans, i, temp); } return ans; } static PyObject * new(PyTypeObject *type, PyObject UNUSED *args, PyObject UNUSED *kwds) { ColorProfile *self; self = (ColorProfile *)type->tp_alloc(type, 0); if (self != NULL) { init_FG_BG_table(); memcpy(self->color_table, FG_BG_256, sizeof(FG_BG_256)); memcpy(self->orig_color_table, FG_BG_256, sizeof(FG_BG_256)); self->dirty = true; } return (PyObject*) self; } static void dealloc(ColorProfile* self) { Py_TYPE(self)->tp_free((PyObject*)self); } ColorProfile* alloc_color_profile() { return (ColorProfile*)new(&ColorProfile_Type, NULL, NULL); } static PyObject* update_ansi_color_table(ColorProfile *self, PyObject *val) { #define update_ansi_color_table_doc "Update the 256 basic colors" if (!PyList_Check(val)) { PyErr_SetString(PyExc_TypeError, "color table must be a list"); return NULL; } if (PyList_GET_SIZE(val) != arraysz(FG_BG_256)) { PyErr_SetString(PyExc_TypeError, "color table must have 256 items"); return NULL; } for (size_t i = 0; i < arraysz(FG_BG_256); i++) { self->color_table[i] = PyLong_AsUnsignedLong(PyList_GET_ITEM(val, i)); self->orig_color_table[i] = self->color_table[i]; } self->dirty = true; Py_RETURN_NONE; } void copy_color_profile(ColorProfile *dest, ColorProfile *src) { memcpy(dest->color_table, src->color_table, sizeof(dest->color_table)); memcpy(dest->orig_color_table, src->orig_color_table, sizeof(dest->color_table)); memcpy(&dest->configured, &src->configured, sizeof(dest->configured)); memcpy(&dest->overridden, &src->overridden, sizeof(dest->overridden)); dest->dirty = true; } static PyObject* patch_color_profiles(PyObject *module UNUSED, PyObject *args) { PyObject *spec, *profiles, *v; ColorProfile *self; int change_configured; PyObject *cursor_text_color; if (!PyArg_ParseTuple(args, "O!OO!p", &PyDict_Type, &spec, &cursor_text_color, &PyTuple_Type, &profiles, &change_configured)) return NULL; char key[32] = {0}; for (size_t i = 0; i < arraysz(FG_BG_256); i++) { snprintf(key, sizeof(key) - 1, "color%zu", i); v = PyDict_GetItemString(spec, key); if (v) { color_type color = PyLong_AsUnsignedLong(v); for (Py_ssize_t j = 0; j < PyTuple_GET_SIZE(profiles); j++) { self = (ColorProfile*)PyTuple_GET_ITEM(profiles, j); self->color_table[i] = color; if (change_configured) self->orig_color_table[i] = color; self->dirty = true; } } } #define S(config_name, profile_name) { \ v = PyDict_GetItemString(spec, #config_name); \ if (v) { \ color_type color = PyLong_AsUnsignedLong(v); \ for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(profiles); i++) { \ self = (ColorProfile*)PyTuple_GET_ITEM(profiles, i); \ self->overridden.profile_name = (color << 8) | 2; \ if (change_configured) self->configured.profile_name = color; \ self->dirty = true; \ } \ } \ } S(foreground, default_fg); S(background, default_bg); S(cursor, cursor_color); S(selection_foreground, highlight_fg); S(selection_background, highlight_bg); #undef S if (cursor_text_color != Py_False) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(profiles); i++) { self = (ColorProfile*)PyTuple_GET_ITEM(profiles, i); self->overridden.cursor_text_color = 0x111111; self->overridden.cursor_text_uses_bg = 3; if (cursor_text_color != Py_None) { self->overridden.cursor_text_color = (PyLong_AsUnsignedLong(cursor_text_color) << 8) | 2; self->overridden.cursor_text_uses_bg = 1; } if (change_configured) { self->configured.cursor_text_color = self->overridden.cursor_text_color; self->configured.cursor_text_uses_bg = self->overridden.cursor_text_uses_bg; } self->dirty = true; } } Py_RETURN_NONE; } color_type colorprofile_to_color(ColorProfile *self, color_type entry, color_type defval) { color_type t = entry & 0xFF, r; switch(t) { case 1: r = (entry >> 8) & 0xff; return self->color_table[r]; case 2: return entry >> 8; default: return defval; } } float cursor_text_as_bg(ColorProfile *self) { if (self->overridden.cursor_text_uses_bg & 1) { return self->overridden.cursor_text_uses_bg & 2 ? 1.f : 0.f; } return self->configured.cursor_text_uses_bg & 2 ? 1.f : 0.f; } static PyObject* as_dict(ColorProfile *self, PyObject *args UNUSED) { #define as_dict_doc "Return all colors as a dictionary of color_name to integer (names are the same as used in kitty.conf)" PyObject *ans = PyDict_New(); if (ans == NULL) return PyErr_NoMemory(); for (unsigned i = 0; i < arraysz(self->color_table); i++) { static char buf[32] = {0}; snprintf(buf, sizeof(buf) - 1, "color%u", i); PyObject *val = PyLong_FromUnsignedLong(self->color_table[i]); if (!val) { Py_CLEAR(ans); return PyErr_NoMemory(); } int ret = PyDict_SetItemString(ans, buf, val); Py_CLEAR(val); if (ret != 0) { Py_CLEAR(ans); return NULL; } } #define D(attr, name) { \ color_type c = colorprofile_to_color(self, self->overridden.attr, 0xffffffff); \ if (c != 0xffffffff) { \ PyObject *val = PyLong_FromUnsignedLong(c); \ if (!val) { Py_CLEAR(ans); return PyErr_NoMemory(); } \ int ret = PyDict_SetItemString(ans, #name, val); \ Py_CLEAR(val); \ if (ret != 0) { Py_CLEAR(ans); return NULL; } \ }} D(default_fg, foreground); D(default_bg, background); D(cursor_color, cursor); D(cursor_text_color, cursor_text); D(highlight_fg, selection_foreground); D(highlight_bg, selection_background); #undef D return ans; } static PyObject* as_color(ColorProfile *self, PyObject *val) { #define as_color_doc "Convert the specified terminal color into an (r, g, b) tuple based on the current profile values" if (!PyLong_Check(val)) { PyErr_SetString(PyExc_TypeError, "val must be an int"); return NULL; } unsigned long entry = PyLong_AsUnsignedLong(val); unsigned int t = entry & 0xFF; uint8_t r; uint32_t col = 0; PyObject *ans = NULL; switch(t) { case 1: r = (entry >> 8) & 0xff; col = self->color_table[r]; break; case 2: col = entry >> 8; break; default: ans = Py_None; Py_INCREF(Py_None); } if (ans == NULL) ans = Py_BuildValue("BBB", (unsigned char)(col >> 16), (unsigned char)((col >> 8) & 0xFF), (unsigned char)(col & 0xFF)); return ans; } static PyObject* reset_color_table(ColorProfile *self, PyObject *a UNUSED) { #define reset_color_table_doc "Reset all customized colors back to defaults" memcpy(self->color_table, self->orig_color_table, sizeof(FG_BG_256)); self->dirty = true; Py_RETURN_NONE; } static PyObject* reset_color(ColorProfile *self, PyObject *val) { #define reset_color_doc "Reset the specified color" uint8_t i = PyLong_AsUnsignedLong(val) & 0xff; self->color_table[i] = self->orig_color_table[i]; self->dirty = true; Py_RETURN_NONE; } static PyObject* set_color(ColorProfile *self, PyObject *args) { #define set_color_doc "Set the specified color" unsigned char i; unsigned long val; if (!PyArg_ParseTuple(args, "Bk", &i, &val)) return NULL; self->color_table[i] = val; self->dirty = true; Py_RETURN_NONE; } static PyObject* set_configured_colors(ColorProfile *self, PyObject *args) { #define set_configured_colors_doc "Set the configured colors" if (!PyArg_ParseTuple( args, "II|IIIII", &(self->configured.default_fg), &(self->configured.default_bg), &(self->configured.cursor_color), &(self->configured.cursor_text_color), &(self->configured.cursor_text_uses_bg), &(self->configured.highlight_fg), &(self->configured.highlight_bg))) return NULL; self->dirty = true; Py_RETURN_NONE; } void copy_color_table_to_buffer(ColorProfile *self, color_type *buf, int offset, size_t stride) { size_t i; stride = MAX(1u, stride); for (i = 0, buf = buf + offset; i < sizeof(self->color_table)/sizeof(self->color_table[0]); i++, buf += stride) { *buf = self->color_table[i]; } self->dirty = false; } void colorprofile_push_dynamic_colors(ColorProfile *self) { if (self->dynamic_color_stack_idx >= arraysz(self->dynamic_color_stack)) { memmove(self->dynamic_color_stack, self->dynamic_color_stack + 1, sizeof(self->dynamic_color_stack) - sizeof(self->dynamic_color_stack[0])); self->dynamic_color_stack_idx = arraysz(self->dynamic_color_stack) - 1; } self->dynamic_color_stack[self->dynamic_color_stack_idx++] = self->overridden; } void colorprofile_pop_dynamic_colors(ColorProfile *self) { if (!self->dynamic_color_stack_idx) return; self->overridden = self->dynamic_color_stack[--(self->dynamic_color_stack_idx)]; } static PyObject* color_table_address(ColorProfile *self, PyObject *a UNUSED) { #define color_table_address_doc "Pointer address to start of color table" return PyLong_FromVoidPtr((void*)self->color_table); } static PyObject* default_color_table(PyObject *self UNUSED, PyObject *args UNUSED) { return create_256_color_table(); } // Boilerplate {{{ #define CGETSET(name) \ static PyObject* name##_get(ColorProfile *self, void UNUSED *closure) { return PyLong_FromUnsignedLong(colorprofile_to_color(self, self->overridden.name, self->configured.name)); } \ static int name##_set(ColorProfile *self, PyObject *val, void UNUSED *closure) { if (val == NULL) { PyErr_SetString(PyExc_TypeError, "Cannot delete attribute"); return -1; } self->overridden.name = (color_type) PyLong_AsUnsignedLong(val); self->dirty = true; return 0; } CGETSET(default_fg) CGETSET(default_bg) CGETSET(cursor_color) CGETSET(cursor_text_color) CGETSET(highlight_fg) CGETSET(highlight_bg) static PyGetSetDef getsetters[] = { GETSET(default_fg) GETSET(default_bg) GETSET(cursor_color) GETSET(cursor_text_color) GETSET(highlight_fg) GETSET(highlight_bg) {NULL} /* Sentinel */ }; static PyMemberDef members[] = { {NULL} }; static PyMethodDef methods[] = { METHOD(update_ansi_color_table, METH_O) METHOD(reset_color_table, METH_NOARGS) METHOD(as_dict, METH_NOARGS) METHOD(color_table_address, METH_NOARGS) METHOD(as_color, METH_O) METHOD(reset_color, METH_O) METHOD(set_color, METH_VARARGS) METHOD(set_configured_colors, METH_VARARGS) {NULL} /* Sentinel */ }; PyTypeObject ColorProfile_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.ColorProfile", .tp_basicsize = sizeof(ColorProfile), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "ColorProfile", .tp_members = members, .tp_methods = methods, .tp_getset = getsetters, .tp_new = new, }; static PyMethodDef module_methods[] = { METHODB(default_color_table, METH_NOARGS), METHODB(patch_color_profiles, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; INIT_TYPE(ColorProfile) // }}} kitty-0.15.0/kitty/complete.py000066400000000000000000000340371356737523400163150ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2018, Kovid Goyal import os import shlex import sys from kittens.runner import get_kitten_cli_docs, all_kitten_names from .cli import options_for_completion, parse_option_spec from .cmds import cmap from .shell import options_for_cmd ''' To add completion for a new shell, you need to: 1) Add an entry to completion scripts for your shell, this is a simple function that calls kitty's completion code and passes the results to the shell's completion system. This can be output by `kitty +complete setup shell_name` and its output goes into your shell's rc file. 2) Add an input_parser function, this takes the input from the shell for the text being completed and returns a list of words alongwith a boolean indicating if we are on a new word or not. This is passed to kitty's completion system. 3) An output_serializer function that is responsible for taking the results from kitty's completion system and converting them into something your shell will understand. ''' parsers, serializers = {}, {} def debug(*a, **kw): kw['file'] = sys.stderr print(*a, **kw) class Completions: def __init__(self): self.match_groups = {} self.no_space_groups = set() self.files_groups = set() # Shell specific code {{{ completion_scripts = { 'zsh': ''' _kitty() { local src # Send all words up to the word the cursor is currently on src=$(printf "%s\n" "${(@)words[1,$CURRENT]}" | kitty +complete zsh) if [[ $? == 0 ]]; then eval ${src} fi } compdef _kitty kitty ''', 'bash': ''' _kitty_completions() { local src local limit # Send all words up to the word the cursor is currently on let limit=1+$COMP_CWORD src=$(printf "%s\n" "${COMP_WORDS[@]: 0:$limit}" | kitty +complete bash) if [[ $? == 0 ]]; then eval ${src} fi } complete -o nospace -F _kitty_completions kitty ''', 'fish': ''' function __kitty_completions # Send all words up to the one before the cursor commandline -cop | kitty +complete fish end complete -f -c kitty -a "(__kitty_completions)" ''', } def input_parser(func): name = func.__name__.split('_')[0] parsers[name] = func return func def output_serializer(func): name = func.__name__.split('_')[0] serializers[name] = func return func @input_parser def zsh_input_parser(data): new_word = data.endswith('\n\n') words = data.rstrip().splitlines() return words, new_word @input_parser def bash_input_parser(data): new_word = data.endswith('\n\n') words = data.rstrip().splitlines() return words, new_word @input_parser def fish_input_parser(data): return data.rstrip().splitlines(), True @output_serializer def zsh_output_serializer(ans): lines = [] for description, matches in ans.match_groups.items(): cmd = ['compadd', '-U', '-J', shlex.quote(description), '-X', shlex.quote(description)] if description in ans.no_space_groups: cmd += ['-S', '""'] if description in ans.files_groups: cmd.append('-f') common_prefix = os.path.commonprefix(tuple(matches)) if common_prefix: cmd.extend(('-p', shlex.quote(common_prefix))) matches = {k[len(common_prefix):]: v for k, v in matches.items()} cmd.append('--') for word, description in matches.items(): cmd.append(shlex.quote(word)) lines.append(' '.join(cmd) + ';') # debug('\n'.join(lines)) return '\n'.join(lines) @output_serializer def bash_output_serializer(ans): lines = [] for description, matches in ans.match_groups.items(): needs_space = description not in ans.no_space_groups for word in matches: if needs_space: word += ' ' lines.append('COMPREPLY+=({})'.format(shlex.quote(word))) # debug('\n'.join(lines)) return '\n'.join(lines) @output_serializer def fish_output_serializer(ans): lines = [] for matches in ans.match_groups.values(): for word in matches: lines.append(shlex.quote(word)) # debug('\n'.join(lines)) return '\n'.join(lines) # }}} def completions_for_first_word(ans, prefix, entry_points, namespaced_entry_points): cmds = ['@' + c for c in cmap] ans.match_groups['Entry points'] = { k: None for k in list(entry_points) + cmds + ['+' + k for k in namespaced_entry_points] if not prefix or k.startswith(prefix) } def kitty_cli_opts(ans, prefix=None): matches = {} for opt in options_for_completion(): if isinstance(opt, str): continue aliases = frozenset(x for x in opt['aliases'] if x.startswith(prefix)) if prefix else opt['aliases'] for alias in aliases: matches[alias] = opt['help'].strip() ans.match_groups['Options'] = matches def complete_kitty_cli_arg(ans, opt, prefix): prefix = prefix or '' if not opt: return dest = opt['dest'] if dest == 'override': from kitty.config import option_names_for_completion k = 'Config directives' ans.match_groups[k] = {k+'=': None for k in option_names_for_completion() if k.startswith(prefix)} ans.no_space_groups.add(k) elif dest == 'config': def is_conf_file(x): if os.path.isdir(x): return True return x.lower().endswith('.conf') complete_files_and_dirs(ans, prefix, files_group_name='Config files', predicate=is_conf_file) elif dest == 'session': complete_files_and_dirs(ans, prefix, files_group_name='Session files') elif dest == 'directory': complete_files_and_dirs(ans, prefix, files_group_name='Directories', predicate=os.path.isdir) elif dest == 'start_as': k = 'Start as' ans.match_groups[k] = {x: x for x in 'normal,fullscreen,maximized,minimized'.split(',') if x.startswith(prefix)} ans.no_space_groups.add(k) elif dest == 'listen_on': if ':' not in prefix: k = 'Address type' ans.match_groups[k] = {x: x for x in ('unix:', 'tcp:') if x.startswith(prefix)} ans.no_space_groups.add(k) elif prefix.startswith('unix:') and not prefix.startswith('@'): complete_files_and_dirs(ans, prefix[len('unix:'):], files_group_name='UNIX sockets', add_prefix='unix:') def complete_alias_map(ans, words, new_word, option_map, complete_args=None): expecting_arg = False opt = None last_word = words[-1] if words else '' for w in words: if expecting_arg: if w is last_word and not new_word: if opt is not None: complete_args(ans, opt, w) return expecting_arg = False continue opt = option_map.get(w) if w is last_word and not new_word: if w.startswith('-'): ans.match_groups['Options'] = {k: opt['help'] for k, opt in option_map.items() if k.startswith(last_word)} else: if complete_args is not None: complete_args(ans, None, last_word) return if opt is None: if complete_args is not None: complete_args(ans, None, '' if new_word else last_word) return # some non-option word encountered expecting_arg = not opt.get('type', '').startswith('bool-') if expecting_arg: if opt is not None and complete_args is not None: complete_args(ans, opt, '' if new_word else last_word) else: prefix = '' if new_word else last_word if complete_args is not None: complete_args(ans, None, prefix) ans.match_groups['Options'] = {k: opt['help'] for k, opt in option_map.items() if k.startswith(prefix)} def complete_cli(ans, words, new_word, seq, complete_args=lambda *a: None): option_map = {} for opt in seq: if not isinstance(opt, str): for alias in opt['aliases']: option_map[alias] = opt complete_alias_map(ans, words, new_word, option_map, complete_args) def complete_remote_command(ans, cmd_name, words, new_word): aliases, alias_map = options_for_cmd(cmd_name) if not alias_map: return complete_alias_map(ans, words, new_word, alias_map) def path_completion(prefix=''): prefix = prefix.replace(r'\ ', ' ') dirs, files = [], [] base = '.' if prefix.endswith('/'): base = prefix elif '/' in prefix: base = os.path.dirname(prefix) src = os.path.expandvars(os.path.expanduser(base)) src_prefix = os.path.abspath(os.path.expandvars(os.path.expanduser(prefix))) if prefix else '' try: items = os.scandir(src) except FileNotFoundError: items = () for x in items: abspath = os.path.abspath(x.path) if prefix and not abspath.startswith(src_prefix): continue if prefix: q = prefix + abspath[len(src_prefix):].lstrip(os.sep) q = os.path.expandvars(os.path.expanduser(q)) else: q = os.path.relpath(abspath) if x.is_dir(): dirs.append(q.rstrip(os.sep) + os.sep) else: files.append(q) return dirs, files def complete_files_and_dirs(ans, prefix, files_group_name='Files', predicate=None, add_prefix=None): dirs, files = path_completion(prefix or '') files = filter(predicate, files) if add_prefix: dirs = (add_prefix + x for x in dirs) files = (add_prefix + x for x in files) if dirs: ans.match_groups['Directories'] = dict.fromkeys(dirs) ans.files_groups.add('Directories'), ans.no_space_groups.add('Directories') if files: ans.match_groups[files_group_name] = dict.fromkeys(files) ans.files_groups.add(files_group_name) def complete_icat_args(ans, opt, prefix): from mimetypes import guess_type def icat_file_predicate(filename): mt = guess_type(filename)[0] if mt and mt.startswith('image/'): return True if opt is None: complete_files_and_dirs(ans, prefix, 'Images', icat_file_predicate) def config_file_predicate(filename): return filename.endswith('.conf') def complete_diff_args(ans, opt, prefix): if opt is None: complete_files_and_dirs(ans, prefix, 'Files') elif opt['dest'] == 'config': complete_files_and_dirs(ans, prefix, 'Config Files', config_file_predicate) def complete_kitten(ans, kitten, words, new_word): try: cd = get_kitten_cli_docs(kitten) except SystemExit: cd = None if cd is None: return options = cd['options']() seq = parse_option_spec(options)[0] option_map = {} for opt in seq: if not isinstance(opt, str): for alias in opt['aliases']: option_map[alias] = opt complete_alias_map(ans, words, new_word, option_map, { 'icat': complete_icat_args, 'diff': complete_diff_args, }.get(kitten)) def find_completions(words, new_word, entry_points, namespaced_entry_points): ans = Completions() if not words or words[0] != 'kitty': return ans words = words[1:] if not words or (len(words) == 1 and not new_word): prefix = words[0] if words else '' completions_for_first_word(ans, prefix, entry_points, namespaced_entry_points) kitty_cli_opts(ans, prefix) return ans if words[0] == '@': if len(words) == 1 or (len(words) == 2 and not new_word): prefix = words[1] if len(words) > 1 else '' ans.match_groups['Remote control commands'] = {c: None for c in cmap if c.startswith(prefix)} else: complete_remote_command(ans, words[1], words[2:], new_word) return ans if words[0].startswith('@'): if len(words) == 1 and not new_word: prefix = words[0] ans.match_groups['Remote control commands'] = {'@' + c: None for c in cmap if c.startswith(prefix)} else: complete_remote_command(ans, words[0][1:], words[1:], new_word) if words[0] == '+': if len(words) == 1 or (len(words) == 2 and not new_word): prefix = words[1] if len(words) > 1 else '' ans.match_groups['Entry points'] = {c: None for c in namespaced_entry_points if c.startswith(prefix)} else: if words[1] == 'kitten': if len(words) == 2 or (len(words) == 3 and not new_word): ans.match_groups['Kittens'] = dict.fromkeys(k for k in all_kitten_names() if k.startswith('' if len(words) == 2 else words[2])) else: complete_kitten(ans, words[2], words[3:], new_word) return ans if words[0].startswith('+'): if len(words) == 1: if new_word: if words[0] == '+kitten': ans.match_groups['Kittens'] = dict.fromkeys(all_kitten_names()) else: prefix = words[0] ans.match_groups['Entry points'] = {c: None for c in namespaced_entry_points if c.startswith(prefix)} else: if len(words) == 2 and not new_word: ans.match_groups['Kittens'] = dict.fromkeys(k for k in all_kitten_names() if k.startswith(words[1])) else: if words[0] == '+kitten': complete_kitten(ans, words[1], words[2:], new_word) else: complete_cli(ans, words, new_word, options_for_completion(), complete_kitty_cli_arg) return ans def setup(cstyle): print(completion_scripts[cstyle]) def main(args, entry_points, namespaced_entry_points): if not args: raise SystemExit('Must specify completion style') cstyle = args[0] if cstyle == 'setup': return setup(args[1]) data = sys.stdin.read() try: parser = parsers[cstyle] serializer = serializers[cstyle] except KeyError: raise SystemExit('Unknown completion style: {}'.format(cstyle)) words, new_word = parser(data) ans = find_completions(words, new_word, entry_points, namespaced_entry_points) print(serializer(ans), end='') kitty-0.15.0/kitty/conf/000077500000000000000000000000001356737523400150515ustar00rootroot00000000000000kitty-0.15.0/kitty/conf/__init__.py000066400000000000000000000000001356737523400171500ustar00rootroot00000000000000kitty-0.15.0/kitty/conf/definition.py000066400000000000000000000201451356737523400175550ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import re from functools import partial from .utils import to_bool def to_string(x): return x class Group: __slots__ = 'name', 'short_text', 'start_text', 'end_text' def __init__(self, name, short_text, start_text='', end_text=''): self.name, self.short_text = name, short_text.strip() self.start_text, self.end_text = start_text.strip(), end_text.strip() class Option: __slots__ = 'name', 'group', 'long_text', 'option_type', 'defval_as_string', 'add_to_default', 'add_to_docs', 'line' def __init__(self, name, group, defval, option_type, long_text, add_to_default, add_to_docs): self.name, self.group = name, group self.long_text, self.option_type = long_text.strip(), option_type self.defval_as_string = defval self.add_to_default = add_to_default self.add_to_docs = add_to_docs self.line = self.name + ' ' + self.defval_as_string class Shortcut: __slots__ = 'name', 'group', 'key', 'action_def', 'short_text', 'long_text', 'add_to_default', 'add_to_docs', 'line' def __init__(self, name, group, key, action_def, short_text, long_text, add_to_default, add_to_docs): self.name, self.group, self.key, self.action_def = name, group, key, action_def self.short_text, self.long_text = short_text, long_text self.add_to_default = add_to_default self.add_to_docs = add_to_docs self.line = 'map ' + self.key + ' ' + self.action_def def option( all_options, group, name, defval, long_text='', option_type=to_string, add_to_default=True, add_to_docs=True ): is_multiple = name.startswith('+') if is_multiple: name = name[1:] defval_type = type(defval) if defval_type is not str: if option_type is to_string: if defval_type is bool: option_type = to_bool else: option_type = defval_type if defval_type is bool: defval = 'yes' if defval else 'no' else: defval = str(defval) key = name if is_multiple: key = name + ' ' + defval.partition(' ')[0] ans = Option(name, group[0], defval, option_type, long_text, add_to_default, add_to_docs) all_options[key] = ans return ans def shortcut( all_options, group, action_name, key, action_def, short_text='', long_text='', add_to_default=True, add_to_docs=True ): ans = Shortcut(action_name, group[0], key, action_def, short_text, long_text, add_to_default, add_to_docs) key = 'sc-' + action_name all_options.setdefault(key, []).append(ans) return ans def option_func(all_options, all_groups): all_groups = {k: Group(k, *v) for k, v in all_groups.items()} group = [None] def change_group(name): group[0] = all_groups[name] return partial(option, all_options, group), partial(shortcut, all_options, group), change_group, all_groups def merged_opts(all_options, opt, i): yield opt for k in range(i + 1, len(all_options)): q = all_options[k] if not isinstance(q, Option): break if not q.long_text and q.add_to_docs: yield q else: break def remove_markup(text): def sub(m): if m.group(1) == 'ref': return { 'layouts': 'https://sw.kovidgoyal.net/kitty/index.html#layouts', 'sessions': 'https://sw.kovidgoyal.net/kitty/index.html#sessions', }[m.group(2)] return m.group(2) return re.sub(r':([a-zA-Z0-9]+):`(.+?)`', sub, text, flags=re.DOTALL) def iter_blocks(lines): current_block = [] prev_indent = 0 for line in lines: indent_size = len(line) - len(line.lstrip()) if indent_size != prev_indent or not line: if current_block: yield current_block, prev_indent current_block = [] prev_indent = indent_size if not line: yield [''], 100 else: current_block.append(line) if current_block: yield current_block, indent_size def wrapped_block(lines): wrapper = getattr(wrapped_block, 'wrapper', None) if wrapper is None: import textwrap wrapper = wrapped_block.wrapper = textwrap.TextWrapper( initial_indent='#: ', subsequent_indent='#: ', width=70, break_long_words=False ) for block, indent_size in iter_blocks(lines): if indent_size > 0: for line in block: if not line: yield line else: yield '#: ' + line else: for line in wrapper.wrap('\n'.join(block)): yield line def render_block(text): text = remove_markup(text) lines = text.splitlines() return '\n'.join(wrapped_block(lines)) def as_conf_file(all_options): ans = ['# vim:fileencoding=utf-8:ft=conf:foldmethod=marker', ''] a = ans.append current_group = None num_open_folds = 0 all_options = list(all_options) def render_group(group, is_shortcut): nonlocal num_open_folds if is_shortcut or '.' not in group.name: a('#: ' + group.short_text + ' {{''{') num_open_folds += 1 a('') if group.start_text: a(render_block(group.start_text)) a('') def handle_group_end(group, new_group_name='', new_group_is_shortcut=False): nonlocal num_open_folds if group.end_text: a(''), a(render_block(group.end_text)) is_subgroup = new_group_name.startswith(group.name + '.') if not is_subgroup and num_open_folds > 0: a('#: }}''}'), a('') num_open_folds -= 1 def handle_group(new_group, is_shortcut=False): nonlocal current_group if new_group is not current_group: if current_group: handle_group_end(current_group, new_group.name, is_shortcut) current_group = new_group render_group(current_group, is_shortcut) def handle_shortcut(shortcuts): handle_group(shortcuts[0].group, True) for sc in shortcuts: if sc.add_to_default: a('map {} {}'.format(sc.key, sc.action_def)) if sc.long_text: a(''), a(render_block(sc.long_text.strip())), a('') def handle_option(opt): if not opt.long_text or not opt.add_to_docs: return handle_group(opt.group) mopts = list(merged_opts(all_options, opt, i)) sz = max(len(x.name) for x in mopts) for mo in mopts: prefix = '' if mo.add_to_default else '# ' a('{}{} {}'.format(prefix, mo.name.ljust(sz), mo.defval_as_string)) a('') a(render_block(opt.long_text)) a('') for i, opt in enumerate(all_options): if isinstance(opt, Option): handle_option(opt) else: handle_shortcut(opt) if current_group: handle_group_end(current_group) while num_open_folds > 0: a('# }}''}') num_open_folds -= 1 map_groups = [] start = count = None for i, line in enumerate(ans): if line.startswith('map '): if start is None: start = i count = 1 else: count += 1 else: if start is not None: map_groups.append((start, count)) start = None for start, count in map_groups: r = range(start, start + count) sz = max(len(ans[i].split(' ', 3)[1]) for i in r) for i in r: line = ans[i] parts = line.split(' ', 3) parts[1] = parts[1].ljust(sz) ans[i] = ' '.join(parts) return ans def config_lines(all_options): for opt in all_options.values(): if isinstance(opt, Option): if opt.add_to_default: yield opt.line else: for sc in opt: if sc.add_to_default: yield sc.line kitty-0.15.0/kitty/conf/utils.py000066400000000000000000000166441356737523400165760ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import re import shlex from collections import namedtuple from ..rgb import to_color as as_color from ..utils import log_error key_pat = re.compile(r'([a-zA-Z][a-zA-Z0-9_-]*)\s+(.+)$') BadLine = namedtuple('BadLine', 'number line exception') def to_color(x): return as_color(x, validate=True) def to_color_or_none(x): return None if x.lower() == 'none' else to_color(x) def positive_int(x): return max(0, int(x)) def positive_float(x): return max(0, float(x)) def unit_float(x): return max(0, min(float(x), 1)) def to_bool(x): return x.lower() in ('y', 'yes', 'true') def to_cmdline(x): return list(map( lambda y: os.path.expandvars(os.path.expanduser(y)), shlex.split(x))) def python_string(text): import ast return ast.literal_eval("'''" + text.replace("'''", "'\\''") + "'''") def choices(*choices): defval = choices[0] choices = frozenset(choices) def choice(x): x = x.lower() if x not in choices: x = defval return x return choice def parse_line(line, type_map, special_handling, ans, all_keys, base_path_for_includes): line = line.strip() if not line or line.startswith('#'): return m = key_pat.match(line) if m is None: log_error('Ignoring invalid config line: {}'.format(line)) return key, val = m.groups() if special_handling(key, val, ans): return if key == 'include': val = os.path.expandvars(os.path.expanduser(val.strip())) if not os.path.isabs(val): val = os.path.join(base_path_for_includes, val) try: with open(val, encoding='utf-8', errors='replace') as include: _parse(include, type_map, special_handling, ans, all_keys) except FileNotFoundError: log_error('Could not find included config file: {}, ignoring'.format(val)) except EnvironmentError: log_error('Could not read from included config file: {}, ignoring'.format(val)) return if all_keys is not None and key not in all_keys: log_error('Ignoring unknown config key: {}'.format(key)) return tm = type_map.get(key) if tm is not None: val = tm(val) ans[key] = val def _parse(lines, type_map, special_handling, ans, all_keys, accumulate_bad_lines=None): name = getattr(lines, 'name', None) if name: base_path_for_includes = os.path.dirname(os.path.abspath(name)) else: from ..constants import config_dir base_path_for_includes = config_dir for i, line in enumerate(lines): try: parse_line(line, type_map, special_handling, ans, all_keys, base_path_for_includes) except Exception as e: if accumulate_bad_lines is None: raise accumulate_bad_lines.append(BadLine(i + 1, line.rstrip(), e)) def parse_config_base( lines, defaults, type_map, special_handling, ans, check_keys=True, accumulate_bad_lines=None ): all_keys = defaults._asdict() if check_keys else None _parse(lines, type_map, special_handling, ans, all_keys, accumulate_bad_lines) def create_options_class(keys): keys = tuple(sorted(keys)) slots = keys + ('_fields',) def __init__(self, kw): for k, v in kw.items(): setattr(self, k, v) def __iter__(self): return iter(keys) def __len__(self): return len(keys) def __getitem__(self, i): if isinstance(i, int): i = keys[i] try: return getattr(self, i) except AttributeError: raise KeyError('No option named: {}'.format(i)) def _asdict(self): return {k: getattr(self, k) for k in self._fields} def _replace(self, **kw): ans = self._asdict() ans.update(kw) return self.__class__(ans) ans = type('Options', (), { '__slots__': slots, '__init__': __init__, '_asdict': _asdict, '_replace': _replace, '__iter__': __iter__, '__len__': __len__, '__getitem__': __getitem__ }) ans._fields = keys return ans def merge_dicts(defaults, newvals): ans = defaults.copy() ans.update(newvals) return ans def resolve_config(SYSTEM_CONF, defconf, config_files_on_cmd_line): if config_files_on_cmd_line: if 'NONE' not in config_files_on_cmd_line: yield SYSTEM_CONF for cf in config_files_on_cmd_line: yield cf else: yield SYSTEM_CONF yield defconf def load_config(Options, defaults, parse_config, merge_configs, *paths, overrides=None): ans = defaults._asdict() for path in paths: if not path: continue try: with open(path, encoding='utf-8', errors='replace') as f: vals = parse_config(f) except FileNotFoundError: continue ans = merge_configs(ans, vals) if overrides is not None: vals = parse_config(overrides) ans = merge_configs(ans, vals) return Options(ans) def init_config(default_config_lines, parse_config): defaults = parse_config(default_config_lines, check_keys=False) Options = create_options_class(defaults.keys()) defaults = Options(defaults) return Options, defaults def key_func(): ans = {} def func_with_args(*names): def w(f): for name in names: if ans.setdefault(name, f) is not f: raise ValueError('the args_func {} is being redefined'.format(name)) return f return w return func_with_args, ans def parse_kittens_shortcut(sc): from ..key_encoding import config_key_map, config_mod_map, text_match if sc.endswith('+'): parts = list(filter(None, sc.rstrip('+').split('+') + ['+'])) else: parts = sc.split('+') mods = parts[:-1] or None if mods is not None: resolved_mods = 0 for mod in mods: m = config_mod_map.get(mod.upper()) if m is None: raise ValueError('Unknown shortcut modifiers: {}'.format(sc)) resolved_mods |= m mods = resolved_mods is_text = False rkey = parts[-1] tkey = text_match(rkey) if tkey is None: rkey = rkey.upper() rkey = config_key_map.get(rkey) if rkey is None: raise ValueError('Unknown shortcut key: {}'.format(sc)) else: is_text = True rkey = tkey return mods, rkey, is_text def parse_kittens_func_args(action, args_funcs): parts = action.strip().split(' ', 1) func = parts[0] if len(parts) == 1: return func, () rest = parts[1] try: parser = args_funcs[func] except KeyError as e: raise KeyError( 'Unknown action: {}. Check if map action: ' '{} is valid'.format(func, action) ) from e try: func, args = parser(func, rest) except Exception: raise ValueError('Unknown key action: {}'.format(action)) if not isinstance(args, (list, tuple)): args = (args,) return func, tuple(args) def parse_kittens_key(val, funcs_with_args): sc, action = val.partition(' ')[::2] if not sc or not action: return mods, key, is_text = parse_kittens_shortcut(sc) action = parse_kittens_func_args(action, funcs_with_args) return action, key, mods, is_text kitty-0.15.0/kitty/config.py000066400000000000000000000475731356737523400157630ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import json import os import re import sys from collections import namedtuple from contextlib import contextmanager from contextlib import suppress from functools import partial from . import fast_data_types as defines from .conf.definition import as_conf_file, config_lines from .conf.utils import ( init_config, key_func, load_config as _load_config, merge_dicts, parse_config_base, python_string, to_bool, to_cmdline ) from .config_data import all_options, parse_mods, type_map from .constants import cache_dir, defconf, is_macos from .utils import log_error from .key_names import get_key_name_lookup, key_name_aliases def parse_shortcut(sc): parts = sc.split('+') mods = 0 if len(parts) > 1: mods = parse_mods(parts[:-1], sc) if mods is None: return None, None, None key = parts[-1].upper() key = getattr(defines, 'GLFW_KEY_' + key_name_aliases.get(key, key), None) is_native = False if key is None: q = parts[-1] if q.startswith('0x'): with suppress(Exception): key = int(q, 16) else: key = get_key_name_lookup()(q) is_native = key is not None return mods, is_native, key KeyAction = namedtuple('KeyAction', 'func args') func_with_args, args_funcs = key_func() @func_with_args( 'pass_selection_to_program', 'new_window', 'new_tab', 'new_os_window', 'new_window_with_cwd', 'new_tab_with_cwd', 'new_os_window_with_cwd', 'launch' ) def shlex_parse(func, rest): return func, to_cmdline(rest) @func_with_args('combine') def combine_parse(func, rest): sep, rest = rest.split(maxsplit=1) parts = re.split(r'\s*' + re.escape(sep) + r'\s*', rest) args = tuple(map(parse_key_action, filter(None, parts))) return func, args @func_with_args('send_text') def send_text_parse(func, rest): args = rest.split(maxsplit=1) if len(args) > 0: try: args[1] = parse_send_text_bytes(args[1]) except Exception: log_error('Ignoring invalid send_text string: ' + args[1]) args[1] = '' return func, args @func_with_args('run_kitten', 'run_simple_kitten', 'kitten') def kitten_parse(func, rest): if func == 'kitten': args = rest.split(maxsplit=1) else: args = rest.split(maxsplit=2)[1:] func = 'kitten' return func, args @func_with_args('goto_tab') def goto_tab_parse(func, rest): args = (max(0, int(rest)), ) return func, args @func_with_args('detach_window') def detach_window_parse(func, rest): if rest not in ('new', 'new-tab', 'ask'): rest = 'new' return func, (rest,) @func_with_args('detach_tab') def detach_tab_parse(func, rest): if rest not in ('new', 'ask'): rest = 'new' return func, (rest,) @func_with_args('set_background_opacity', 'goto_layout', 'kitty_shell') def simple_parse(func, rest): return func, [rest] @func_with_args('set_font_size') def float_parse(func, rest): return func, (float(rest),) @func_with_args('change_font_size') def parse_change_font_size(func, rest): vals = rest.strip().split(maxsplit=1) if len(vals) != 2: log_error('Invalid change_font_size specification: {}, treating it as default'.format(rest)) args = [True, None, 0] else: args = [vals[0].lower() == 'all', None, 0] amt = vals[1] if amt[0] in '+-': args[1] = amt[0] amt = amt[1:] args[2] = float(amt.strip()) return func, args @func_with_args('clear_terminal') def clear_terminal(func, rest): vals = rest.strip().split(maxsplit=1) if len(vals) != 2: log_error('clear_terminal needs two arguments, using defaults') args = ['reset', 'active'] else: args = [vals[0].lower(), vals[1].lower() == 'active'] return func, args @func_with_args('copy_to_buffer') def copy_to_buffer(func, rest): return func, [rest] @func_with_args('paste_from_buffer') def paste_from_buffer(func, rest): return func, [rest] @func_with_args('neighboring_window') def neighboring_window(func, rest): rest = rest.lower() rest = {'up': 'top', 'down': 'bottom'}.get(rest, rest) if rest not in ('left', 'right', 'top', 'bottom'): log_error('Invalid neighbor specification: {}'.format(rest)) rest = 'right' return func, [rest] @func_with_args('resize_window') def resize_window(func, rest): vals = rest.strip().split(maxsplit=1) if len(vals) > 2: log_error('resize_window needs one or two arguments, using defaults') args = ['wider', 1] else: quality = vals[0].lower() if quality not in ('taller', 'shorter', 'wider', 'narrower'): log_error('Invalid quality specification: {}'.format(quality)) quality = 'wider' increment = 1 if len(vals) == 2: try: increment = int(vals[1]) except Exception: log_error('Invalid increment specification: {}'.format(vals[1])) args = [quality, increment] return func, args @func_with_args('move_window') def move_window(func, rest): rest = rest.lower() rest = {'up': 'top', 'down': 'bottom'}.get(rest, rest) try: rest = int(rest) except Exception: if rest not in ('left', 'right', 'top', 'bottom'): log_error('Invalid move_window specification: {}'.format(rest)) rest = 0 return func, [rest] @func_with_args('pipe') def pipe(func, rest): import shlex rest = shlex.split(rest) if len(rest) < 3: log_error('Too few arguments to pipe function') rest = ['none', 'none', 'true'] return func, rest @func_with_args('set_colors') def set_colors(func, rest): import shlex rest = shlex.split(rest) if len(rest) < 1: log_error('Too few arguments to set_colors function') return func, rest @func_with_args('nth_window') def nth_window(func, rest): try: num = int(rest) except Exception: log_error('Invalid nth_window number: {}'.format(rest)) num = 1 return func, [num] @func_with_args('disable_ligatures_in') def disable_ligatures_in(func, rest): parts = rest.split(maxsplit=1) if len(parts) == 1: where, strategy = 'active', parts[0] else: where, strategy = parts if where not in ('active', 'all', 'tab'): raise ValueError('{} is not a valid set of windows to disable ligatures in'.format(where)) if strategy not in ('never', 'always', 'cursor'): raise ValueError('{} is not a valid disable ligatures strategy'.format(strategy)) return func, [where, strategy] def parse_key_action(action): parts = action.strip().split(maxsplit=1) func = parts[0] if len(parts) == 1: return KeyAction(func, ()) rest = parts[1] parser = args_funcs.get(func) if parser is not None: try: func, args = parser(func, rest) except Exception: log_error('Ignoring invalid key action: {}'.format(action)) else: return KeyAction(func, args) all_key_actions = set() sequence_sep = '>' class KeyDefinition: def __init__(self, is_sequence, action, mods, is_native, key, rest=()): self.is_sequence = is_sequence self.action = action self.trigger = mods, is_native, key self.rest = rest def resolve(self, kitty_mod): self.trigger = defines.resolve_key_mods(kitty_mod, self.trigger[0]), self.trigger[1], self.trigger[2] self.rest = tuple((defines.resolve_key_mods(kitty_mod, mods), is_native, key) for mods, is_native, key in self.rest) def resolve_kitten_aliases(self, aliases): if not self.action.args: return kitten = self.action.args[0] rest = self.action.args[1] if len(self.action.args) > 1 else '' changed = False for key, expanded in aliases.items(): if key == kitten: changed = True kitten = expanded[0] if len(expanded) > 1: rest = expanded[1] + ' ' + rest if changed: self.action = self.action._replace(args=[kitten + (' ' + rest).rstrip()]) def parse_key(val, key_definitions): parts = val.split(maxsplit=1) if len(parts) != 2: return sc, action = parts sc, action = sc.strip().strip(sequence_sep), action.strip() if not sc or not action: return is_sequence = sequence_sep in sc if is_sequence: trigger = None rest = [] for part in sc.split(sequence_sep): mods, is_native, key = parse_shortcut(part) if key is None: if mods is not None: log_error('Shortcut: {} has unknown key, ignoring'.format(sc)) return if trigger is None: trigger = mods, is_native, key else: rest.append((mods, is_native, key)) rest = tuple(rest) else: mods, is_native, key = parse_shortcut(sc) if key is None: if mods is not None: log_error('Shortcut: {} has unknown key, ignoring'.format(sc)) return try: paction = parse_key_action(action) except Exception: log_error('Invalid shortcut action: {}. Ignoring.'.format( action)) else: if paction is not None: all_key_actions.add(paction.func) if is_sequence: key_definitions.append(KeyDefinition(True, paction, trigger[0], trigger[1], trigger[2], rest)) else: key_definitions.append(KeyDefinition(False, paction, mods, is_native, key)) def parse_symbol_map(val): parts = val.split() symbol_map = {} def abort(): log_error('Symbol map: {} is invalid, ignoring'.format( val)) return {} if len(parts) < 2: return abort() family = ' '.join(parts[1:]) def to_chr(x): if not x.startswith('U+'): raise ValueError() x = int(x[2:], 16) return x for x in parts[0].split(','): a, b = x.partition('-')[::2] b = b or a try: a, b = map(to_chr, (a, b)) except Exception: return abort() if b < a or max(a, b) > sys.maxunicode or min(a, b) < 1: return abort() symbol_map[(a, b)] = family return symbol_map def parse_send_text_bytes(text): return python_string(text).encode('utf-8') def parse_send_text(val, key_definitions): parts = val.split(' ') def abort(msg): log_error('Send text: {} is invalid ({}), ignoring'.format( val, msg)) return {} if len(parts) < 3: return abort('Incomplete') mode, sc = parts[:2] text = ' '.join(parts[2:]) key_str = '{} send_text {} {}'.format(sc, mode, text) return parse_key(key_str, key_definitions) special_handlers = {} def special_handler(func): special_handlers[func.__name__.partition('_')[2]] = func return func def deprecated_handler(*names): def special_handler(func): for name in names: special_handlers[name] = func return func return special_handler @special_handler def handle_map(key, val, ans): parse_key(val, ans['key_definitions']) @special_handler def handle_symbol_map(key, val, ans): ans['symbol_map'].update(parse_symbol_map(val)) @special_handler def handle_kitten_alias(key, val, ans): parts = val.split(maxsplit=2) if len(parts) >= 2: ans['kitten_aliases'][parts[0]] = parts[1:] @special_handler def handle_send_text(key, val, ans): # For legacy compatibility parse_send_text(val, ans['key_definitions']) @special_handler def handle_clear_all_shortcuts(key, val, ans): if to_bool(val): ans['key_definitions'] = [None] @deprecated_handler('x11_hide_window_decorations', 'macos_hide_titlebar') def handle_deprecated_hide_window_decorations_aliases(key, val, ans): if not hasattr(handle_deprecated_hide_window_decorations_aliases, key): handle_deprecated_hide_window_decorations_aliases.key = True log_error('The option {} is deprecated. Use hide_window_decorations instead.'.format(key)) if to_bool(val): if is_macos and key == 'macos_hide_titlebar' or (not is_macos and key == 'x11_hide_window_decorations'): ans['hide_window_decorations'] = True @deprecated_handler('macos_show_window_title_in_menubar') def handle_deprecated_macos_show_window_title_in_menubar_alias(key, val, ans): if not hasattr(handle_deprecated_macos_show_window_title_in_menubar_alias, key): handle_deprecated_macos_show_window_title_in_menubar_alias.key = True log_error('The option {} is deprecated. Use macos_show_window_title_in menubar instead.'.format(key)) macos_show_window_title_in = ans.get('macos_show_window_title_in', 'all') if to_bool(val): if macos_show_window_title_in == 'none': macos_show_window_title_in = 'menubar' elif macos_show_window_title_in == 'window': macos_show_window_title_in = 'all' else: if macos_show_window_title_in == 'all': macos_show_window_title_in = 'window' elif macos_show_window_title_in == 'menubar': macos_show_window_title_in = 'none' ans['macos_show_window_title_in'] = macos_show_window_title_in def expandvars(val, env): def sub(m): key = m.group(1) result = env.get(key) if result is None: result = os.environ.get(key) if result is None: result = m.group() return result return re.sub(r'\$\{(\S+?)\}', sub, val) @special_handler def handle_env(key, val, ans): key, val = val.partition('=')[::2] key, val = key.strip(), val.strip() ans['env'][key] = expandvars(val, ans['env']) def special_handling(key, val, ans): func = special_handlers.get(key) if func is not None: func(key, val, ans) return True defaults = None def option_names_for_completion(): yield from defaults yield from special_handlers def parse_config(lines, check_keys=True, accumulate_bad_lines=None): ans = {'symbol_map': {}, 'keymap': {}, 'sequence_map': {}, 'key_definitions': [], 'env': {}, 'kitten_aliases': {}} parse_config_base( lines, defaults, type_map, special_handling, ans, check_keys=check_keys, accumulate_bad_lines=accumulate_bad_lines ) return ans def parse_defaults(lines, check_keys=False): ans = parse_config(lines, check_keys) return ans Options, defaults = init_config(config_lines(all_options), parse_defaults) actions = frozenset(all_key_actions) | frozenset( 'run_simple_kitten combine send_text goto_tab goto_layout set_font_size new_tab_with_cwd new_window_with_cwd new_os_window_with_cwd'. split() ) no_op_actions = frozenset({'noop', 'no-op', 'no_op'}) def merge_configs(defaults, vals): ans = {} for k, v in defaults.items(): if isinstance(v, dict): newvals = vals.get(k, {}) ans[k] = merge_dicts(v, newvals) elif k == 'key_definitions': ans['key_definitions'] = v + vals.get('key_definitions', []) else: ans[k] = vals.get(k, v) return ans def build_ansi_color_table(opts=defaults): def as_int(x): return (x[0] << 16) | (x[1] << 8) | x[2] def col(i): return as_int(getattr(opts, 'color{}'.format(i))) return list(map(col, range(256))) def atomic_save(data, path): import tempfile fd, p = tempfile.mkstemp(dir=os.path.dirname(path), suffix='.tmp') try: with os.fdopen(fd, 'wb') as f: f.write(data) os.rename(p, path) finally: try: os.remove(p) except FileNotFoundError: pass except Exception as err: log_error('Failed to delete temp file {} for atomic save with error: {}'.format( p, err)) @contextmanager def cached_values_for(name): cached_path = os.path.join(cache_dir(), name + '.json') cached_values = {} try: with open(cached_path, 'rb') as f: cached_values.update(json.loads(f.read().decode('utf-8'))) except FileNotFoundError: pass except Exception as err: log_error('Failed to load cached in {} values with error: {}'.format( name, err)) yield cached_values try: data = json.dumps(cached_values).encode('utf-8') atomic_save(data, cached_path) except Exception as err: log_error('Failed to save cached values with error: {}'.format( err)) def initial_window_size_func(opts, cached_values): if 'window-size' in cached_values and opts.remember_window_size: ws = cached_values['window-size'] try: w, h = map(int, ws) def initial_window_size(*a): return w, h return initial_window_size except Exception: log_error('Invalid cached window size, ignoring') w, w_unit = opts.initial_window_width h, h_unit = opts.initial_window_height def get_window_size(cell_width, cell_height, dpi_x, dpi_y, xscale, yscale): if not is_macos: # scaling is not needed on Wayland, but is needed on macOS. Not # sure about X11. xscale = yscale = 1 if w_unit == 'cells': width = cell_width * w / xscale + (dpi_x / 72) * (opts.window_margin_width + opts.window_padding_width) + 1 else: width = w if h_unit == 'cells': height = cell_height * h / yscale + (dpi_y / 72) * (opts.window_margin_width + opts.window_padding_width) + 1 else: height = h return width, height return get_window_size def commented_out_default_config(): ans = [] for line in as_conf_file(all_options.values()): if line and line[0] != '#': line = '# ' + line ans.append(line) return '\n'.join(ans) def prepare_config_file_for_editing(): if not os.path.exists(defconf): d = os.path.dirname(defconf) with suppress(FileExistsError): os.makedirs(d) with open(defconf, 'w', encoding='utf-8') as f: f.write(commented_out_default_config()) return defconf def finalize_keys(opts): defns = [] for d in opts.key_definitions: if d is None: # clear_all_shortcuts defns = [] else: defns.append(d) kitten_aliases = opts.kitten_aliases for d in defns: d.resolve(opts.kitty_mod) if kitten_aliases and d.action.func == 'kitten': d.resolve_kitten_aliases(kitten_aliases) keymap = {} sequence_map = {} for defn in defns: is_no_op = defn.action.func in no_op_actions if defn.is_sequence: keymap.pop(defn.trigger, None) s = sequence_map.setdefault(defn.trigger, {}) if is_no_op: s.pop(defn.rest, None) if not s: del sequence_map[defn.trigger] else: s[defn.rest] = defn.action else: sequence_map.pop(defn.trigger, None) if is_no_op: keymap.pop(defn.trigger, None) else: keymap[defn.trigger] = defn.action opts.keymap = keymap opts.sequence_map = sequence_map def load_config(*paths, overrides=None, accumulate_bad_lines=None): parser = parse_config if accumulate_bad_lines is not None: parser = partial(parse_config, accumulate_bad_lines=accumulate_bad_lines) opts = _load_config(Options, defaults, parser, merge_configs, *paths, overrides=overrides) finalize_keys(opts) if opts.background_opacity < 1.0 and opts.macos_titlebar_color: log_error('Cannot use both macos_titlebar_color and background_opacity') opts.macos_titlebar_color = 0 return opts kitty-0.15.0/kitty/config_data.py000066400000000000000000001512451356737523400167440ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal # Utils {{{ import os from gettext import gettext as _ from . import fast_data_types as defines from .conf.definition import option_func from .conf.utils import ( choices, positive_float, positive_int, to_bool, to_cmdline, to_color, to_color_or_none, unit_float ) from .constants import config_dir, is_macos from .fast_data_types import CURSOR_BEAM, CURSOR_BLOCK, CURSOR_UNDERLINE from .layout import all_layouts from .rgb import color_as_int, color_as_sharp, color_from_int from .utils import log_error MINIMUM_FONT_SIZE = 4 mod_map = {'CTRL': 'CONTROL', 'CMD': 'SUPER', '⌘': 'SUPER', '⌥': 'ALT', 'OPTION': 'ALT', 'KITTY_MOD': 'KITTY'} def parse_mods(parts, sc): def map_mod(m): return mod_map.get(m, m) mods = 0 for m in parts: try: mods |= getattr(defines, 'GLFW_MOD_' + map_mod(m.upper())) except AttributeError: log_error('Shortcut: {} has unknown modifier, ignoring'.format(sc)) return return mods def to_modifiers(val): return parse_mods(val.split('+'), val) or 0 def uniq(vals, result_type=list): seen = set() seen_add = seen.add return result_type(x for x in vals if x not in seen and not seen_add(x)) # }}} # Groups {{{ all_options = {} o, k, g, all_groups = option_func(all_options, { 'fonts': [ _('Fonts'), _('kitty has very powerful font management. You can configure individual\n' 'font faces and even specify special fonts for particular characters.') ], 'cursor': [_('Cursor customization'), ], 'scrollback': [_('Scrollback'), ], 'mouse': [_('Mouse'), ], 'performance': [_('Performance tuning')], 'bell': [_('Terminal bell')], 'window': [_('Window layout')], 'tabbar': [_('Tab bar')], 'colors': [_('Color scheme')], 'colors.table': [ _('The color table'), _('''\ The 16 terminal colors. There are 8 basic colors, each color has a dull and bright version. You can also set the remaining colors from the 256 color table as color16 to color255.''') ], 'advanced': [_('Advanced')], 'os': [_('OS specific tweaks')], 'shortcuts': [ _('Keyboard shortcuts'), _('''\ For a list of key names, see: :link:`GLFW keys `. The name to use is the part after the :code:`GLFW_KEY_` prefix. For a list of modifier names, see: :link:`GLFW mods ` On Linux you can also use XKB key names to bind keys that are not supported by GLFW. See :link:`XKB keys ` for a list of key names. The name to use is the part after the :code:`XKB_KEY_` prefix. Note that you should only use an XKB key name for keys that are not present in the list of GLFW keys. Finally, you can use raw system key codes to map keys. To see the system key code for a key, start kitty with the :option:`kitty --debug-keyboard` option. Then kitty will output some debug text for every key event. In that text look for ``native_code`` the value of that becomes the key name in the shortcut. For example: .. code-block:: none on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a' Here, the key name for the :kbd:`A` key is :kbd:`0x61` and you can use it with:: map ctrl+0x61 something to map :kbd:`ctrl+a` to something. You can use the special action :code:`no_op` to unmap a keyboard shortcut that is assigned in the default configuration:: map kitty_mod+space no_op You can combine multiple actions to be triggered by a single shortcut, using the syntax below:: map key combine action1 action2 action3 ... For example:: map kitty_mod+e combine : new_window : next_layout this will create a new window and switch to the next available layout You can use multi-key shortcuts using the syntax shown below:: map key1>key2>key3 action For example:: map ctrl+f>2 set_font_size 20 ''') ], 'shortcuts.clipboard': [_('Clipboard')], 'shortcuts.scrolling': [_('Scrolling')], 'shortcuts.misc': [_('Miscellaneous')], 'shortcuts.window': [_('Window management')], 'shortcuts.tab': [ _('Tab management'), '', _('''\ You can also create shortcuts to go to specific tabs, with 1 being the first tab, 2 the second tab and -1 being the previously active tab:: map ctrl+alt+1 goto_tab 1 map ctrl+alt+2 goto_tab 2 Just as with :code:`new_window` above, you can also pass the name of arbitrary commands to run when using new_tab and use :code:`new_tab_with_cwd`. Finally, if you want the new tab to open next to the current tab rather than at the end of the tabs list, use:: map ctrl+t new_tab !neighbor [optional cmd to run] ''')], 'shortcuts.layout': [ _('Layout management'), '', _('''\ You can also create shortcuts to switch to specific layouts:: map ctrl+alt+t goto_layout tall map ctrl+alt+s goto_layout stack Similarly, to switch back to the previous layout:: map ctrl+alt+p last_used_layout ''')], 'shortcuts.fonts': [ _('Font sizes'), _('''\ You can change the font size for all top-level kitty OS windows at a time or only the current one. '''), _('''\ To setup shortcuts for specific font sizes:: map kitty_mod+f6 change_font_size all 10.0 To setup shortcuts to change only the current OS window's font size:: map kitty_mod+f6 change_font_size current 10.0 ''')], 'shortcuts.selection': [ _('Select and act on visible text'), _('''\ Use the hints kitten to select text and either pass it to an external program or insert it into the terminal or copy it to the clipboard. '''), _(''' The hints kitten has many more modes of operation that you can map to different shortcuts. For a full description see :doc:`kittens/hints`.''')], }) # }}} g('fonts') # {{{ o( 'font_family', 'monospace', long_text=_(''' You can specify different fonts for the bold/italic/bold-italic variants. To get a full list of supported fonts use the `kitty list-fonts` command. By default they are derived automatically, by the OSes font system. Setting them manually is useful for font families that have many weight variants like Book, Medium, Thick, etc. For example:: font_family Operator Mono Book bold_font Operator Mono Medium italic_font Operator Mono Book Italic bold_italic_font Operator Mono Medium Italic ''') ) o('bold_font', 'auto') o('italic_font', 'auto') o('bold_italic_font', 'auto') def to_font_size(x): return max(MINIMUM_FONT_SIZE, float(x)) o('font_size', 11.0, long_text=_('Font size (in pts)'), option_type=to_font_size) def adjust_line_height(x): if x.endswith('%'): ans = float(x[:-1].strip()) / 100.0 if ans < 0: log_error('Percentage adjustments of cell sizes must be positive numbers') return 0 return ans return int(x) o('adjust_line_height', 0, option_type=adjust_line_height, long_text=_(''' Change the size of each character cell kitty renders. You can use either numbers, which are interpreted as pixels or percentages (number followed by %), which are interpreted as percentages of the unmodified values. You can use negative pixels or percentages less than 100% to reduce sizes (but this might cause rendering artifacts).''')) o('adjust_column_width', 0, option_type=adjust_line_height) o( '+symbol_map', 'U+E0A0-U+E0A2,U+E0B0-U+E0B3 PowerlineSymbols', add_to_default=False, long_text=_(''' Map the specified unicode codepoints to a particular font. Useful if you need special rendering for some symbols, such as for Powerline. Avoids the need for patched fonts. Each unicode code point is specified in the form :code:`U+`. You can specify multiple code points, separated by commas and ranges separated by hyphens. :code:`symbol_map` itself can be specified multiple times. Syntax is:: symbol_map codepoints Font Family Name ''')) def disable_ligatures(x): cmap = {'never': 0, 'cursor': 1, 'always': 2} return cmap.get(x.lower(), 0) o('disable_ligatures', 'never', option_type=disable_ligatures, long_text=_(''' Choose how you want to handle multi-character ligatures. The default is to always render them. You can tell kitty to not render them when the cursor is over them by using :code:`cursor` to make editing easier, or have kitty never render them at all by using :code:`always`, if you don't like them. The ligature strategy can be set per-window either using the kitty remote control facility or by defining shortcuts for it in kitty.conf, for example:: map alt+1 disable_ligatures_in active always map alt+2 disable_ligatures_in all never map alt+3 disable_ligatures_in tab cursor ''')) def box_drawing_scale(x): ans = tuple(float(x.strip()) for x in x.split(',')) if len(ans) != 4: raise ValueError('Invalid box_drawing scale, must have four entries') return ans o( 'box_drawing_scale', '0.001, 1, 1.5, 2', option_type=box_drawing_scale, long_text=_(''' Change the sizes of the lines used for the box drawing unicode characters These values are in pts. They will be scaled by the monitor DPI to arrive at a pixel value. There must be four values corresponding to thin, normal, thick, and very thick lines. ''')) # }}} g('cursor') # {{{ cshapes = { 'block': CURSOR_BLOCK, 'beam': CURSOR_BEAM, 'underline': CURSOR_UNDERLINE } def to_cursor_shape(x): try: return cshapes[x.lower()] except KeyError: raise ValueError( 'Invalid cursor shape: {} allowed values are {}'.format( x, ', '.join(cshapes) ) ) def cursor_text_color(x): if x.lower() == 'background': return return to_color(x) o('cursor', '#cccccc', _('Default cursor color'), option_type=to_color) o('cursor_text_color', '#111111', option_type=cursor_text_color, long_text=_(''' Choose the color of text under the cursor. If you want it rendered with the background color of the cell underneath instead, use the special keyword: background''')) o('cursor_shape', 'block', option_type=to_cursor_shape, long_text=_( 'The cursor shape can be one of (block, beam, underline)')) o('cursor_blink_interval', -1, option_type=float, long_text=_(''' The interval (in seconds) at which to blink the cursor. Set to zero to disable blinking. Negative values mean use system default. Note that numbers smaller than :opt:`repaint_delay` will be limited to :opt:`repaint_delay`. ''')) o('cursor_stop_blinking_after', 15.0, option_type=positive_float, long_text=_(''' Stop blinking cursor after the specified number of seconds of keyboard inactivity. Set to zero to never stop blinking. ''')) # }}} g('scrollback') # {{{ def scrollback_lines(x): x = int(x) if x < 0: x = 2 ** 32 - 1 return x def scrollback_pager_history_size(x): ans = int(max(0, float(x)) * 1024 * 1024) return min(ans, 4096 * 1024 * 1024 - 1) o('scrollback_lines', 2000, option_type=scrollback_lines, long_text=_(''' Number of lines of history to keep in memory for scrolling back. Memory is allocated on demand. Negative numbers are (effectively) infinite scrollback. Note that using very large scrollback is not recommended as it can slow down resizing of the terminal and also use large amounts of RAM.''')) o('scrollback_pager', 'less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER', option_type=to_cmdline, long_text=_(''' Program with which to view scrollback in a new window. The scrollback buffer is passed as STDIN to this program. If you change it, make sure the program you use can handle ANSI escape sequences for colors and text formatting. INPUT_LINE_NUMBER in the command line above will be replaced by an integer representing which line should be at the top of the screen.''')) o('scrollback_pager_history_size', 0, option_type=scrollback_pager_history_size, long_text=_(''' Separate scrollback history size, used only for browsing the scrollback buffer (in MB). This separate buffer is not available for interactive scrolling but will be piped to the pager program when viewing scrollback buffer in a separate window. The current implementation stores one character in 4 bytes, so approximatively 2500 lines per megabyte at 100 chars per line. A value of zero or less disables this feature. The maximum allowed size is 4GB.''')) o('wheel_scroll_multiplier', 5.0, long_text=_(''' Modify the amount scrolled by the mouse wheel. Note this is only used for low precision scrolling devices, not for high precision scrolling on platforms such as macOS and Wayland. Use negative numbers to change scroll direction.''')) o('touch_scroll_multiplier', 1.0, long_text=_(''' Modify the amount scrolled by a touchpad. Note this is only used for high precision scrolling devices on platforms such as macOS and Wayland. Use negative numbers to change scroll direction.''')) # }}} g('mouse') # {{{ o('mouse_hide_wait', 0.0 if is_macos else 3.0, option_type=float, long_text=_(''' Hide mouse cursor after the specified number of seconds of the mouse not being used. Set to zero to disable mouse cursor hiding. Set to a negative value to hide the mouse cursor immediately when typing text. Disabled by default on macOS as getting it to work robustly with the ever-changing sea of bugs that is Cocoa is too much effort. ''')) o('url_color', '#0087bd', option_type=to_color, long_text=_(''' The color and style for highlighting URLs on mouse-over. :code:`url_style` can be one of: none, single, double, curly''')) def url_style(x): return url_style.map.get(x, url_style.map['curly']) url_style.map = dict( ((v, i) for i, v in enumerate('none single double curly'.split())) ) o('url_style', 'curly', option_type=url_style) o('open_url_modifiers', 'kitty_mod', option_type=to_modifiers, long_text=_(''' The modifier keys to press when clicking with the mouse on URLs to open the URL''')) o('open_url_with', 'default', option_type=to_cmdline, long_text=_(''' The program with which to open URLs that are clicked on. The special value :code:`default` means to use the operating system's default URL handler.''')) def copy_on_select(raw): q = raw.lower() # boolean values special cased for backwards compat if q in ('y', 'yes', 'true', 'clipboard'): return 'clipboard' if q in ('n', 'no', 'false', ''): return '' return raw o('copy_on_select', 'no', option_type=copy_on_select, long_text=_(''' Copy to clipboard or a private buffer on select. With this set to :code:`clipboard`, simply selecting text with the mouse will cause the text to be copied to clipboard. Useful on platforms such as macOS that do not have the concept of primary selections. You can instead specify a name such as :code:`a1` to copy to a private kitty buffer instead. Map a shortcut with the :code:`paste_from_buffer` action to paste from this private buffer. For example:: map cmd+shift+v paste_from_buffer a1 Note that copying to the clipboard is a security risk, as all programs, including websites open in your browser can read the contents of the system clipboard.''')) o('strip_trailing_spaces', 'never', option_type=choices('never', 'smart', 'always'), long_text=_(''' Remove spaces at the end of lines when copying to clipboard. A value of :code:`smart` will do it when using normal selections, but not rectangle selections. :code:`always` will always do it.''')) o('rectangle_select_modifiers', 'ctrl+alt', option_type=to_modifiers, long_text=_(''' The modifiers to use rectangular selection (i.e. to select text in a rectangular block with the mouse)''')) o('terminal_select_modifiers', 'shift', option_type=to_modifiers, long_text=_(''' The modifiers to override mouse selection even when a terminal application has grabbed the mouse''')) o('select_by_word_characters', ':@-./_~?&=%+#', long_text=_(''' Characters considered part of a word when double clicking. In addition to these characters any character that is marked as an alphanumeric character in the unicode database will be matched.''')) o('click_interval', -1.0, option_type=float, long_text=_(''' The interval between successive clicks to detect double/triple clicks (in seconds). Negative numbers will use the system default instead, if available, or fallback to 0.5.''')) o('focus_follows_mouse', False, long_text=_(''' Set the active window to the window under the mouse when moving the mouse around''')) o('pointer_shape_when_grabbed', 'arrow', option_type=choices('arrow', 'beam', 'hand'), long_text=(''' The shape of the mouse pointer when the program running in the terminal grabs the mouse. ''')) # }}} g('performance') # {{{ o('repaint_delay', 10, option_type=positive_int, long_text=_(''' Delay (in milliseconds) between screen updates. Decreasing it, increases frames-per-second (FPS) at the cost of more CPU usage. The default value yields ~100 FPS which is more than sufficient for most uses. Note that to actually achieve 100 FPS you have to either set :opt:`sync_to_monitor` to no or use a monitor with a high refresh rate. Also, to minimize latency when there is pending input to be processed, repaint_delay is ignored.''')) o('input_delay', 3, option_type=positive_int, long_text=_(''' Delay (in milliseconds) before input from the program running in the terminal is processed. Note that decreasing it will increase responsiveness, but also increase CPU usage and might cause flicker in full screen programs that redraw the entire screen on each loop, because kitty is so fast that partial screen updates will be drawn.''')) o('sync_to_monitor', True, long_text=_(''' Sync screen updates to the refresh rate of the monitor. This prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing) when scrolling. However, it limits the rendering speed to the refresh rate of your monitor. With a very high speed mouse/high keyboard repeat rate, you may notice some slight input latency. If so, set this to no.''')) # }}} g('bell') # {{{ o('enable_audio_bell', True, long_text=_(''' Enable/disable the audio bell. Useful in environments that require silence.''')) o('visual_bell_duration', 0.0, option_type=positive_float, long_text=_(''' Visual bell duration. Flash the screen when a bell occurs for the specified number of seconds. Set to zero to disable.''')) o('window_alert_on_bell', True, long_text=_(''' Request window attention on bell. Makes the dock icon bounce on macOS or the taskbar flash on linux.''')) o('bell_on_tab', True, long_text=_(''' Show a bell symbol on the tab if a bell occurs in one of the windows in the tab and the window is not the currently focused window''')) o('command_on_bell', 'none', option_type=to_cmdline, long_text=_(''' Program to run when a bell occurs. ''')) # }}} g('window') # {{{ o('remember_window_size', True, long_text=_(''' If enabled, the window size will be remembered so that new instances of kitty will have the same size as the previous instance. If disabled, the window will initially have size configured by initial_window_width/height, in pixels. You can use a suffix of "c" on the width/height values to have them interpreted as number of cells instead of pixels. ''')) def window_size(val): val = val.lower() unit = 'cells' if val.endswith('c') else 'px' return positive_int(val.rstrip('c')), unit o('initial_window_width', '640', option_type=window_size) o('initial_window_height', '400', option_type=window_size) def to_layout_names(raw): parts = [x.strip().lower() for x in raw.split(',')] ans = [] for p in parts: if p in ('*', 'all'): ans.extend(sorted(all_layouts)) continue name = p.partition(':')[0] if name not in all_layouts: raise ValueError('The window layout {} is unknown'.format(p)) ans.append(p) return uniq(ans) o('enabled_layouts', '*', option_type=to_layout_names, long_text=_(''' The enabled window layouts. A comma separated list of layout names. The special value :code:`all` means all layouts. The first listed layout will be used as the startup layout. For a list of available layouts, see the :ref:`layouts`. ''')) o('window_resize_step_cells', 2, option_type=positive_int, long_text=_(''' The step size (in units of cell width/cell height) to use when resizing windows. The cells value is used for horizontal resizing and the lines value for vertical resizing. ''')) o('window_resize_step_lines', 2, option_type=positive_int) o('window_border_width', 1.0, option_type=positive_float, long_text=_(''' The width (in pts) of window borders. Will be rounded to the nearest number of pixels based on screen resolution. Note that borders are displayed only when more than one window is visible. They are meant to separate multiple windows.''')) o('draw_minimal_borders', True, long_text=_(''' Draw only the minimum borders needed. This means that only the minimum needed borders for inactive windows are drawn. That is only the borders that separate the inactive window from a neighbor. Note that setting a non-zero window margin overrides this and causes all borders to be drawn. ''')) o('window_margin_width', 0.0, option_type=positive_float, long_text=_(''' The window margin (in pts) (blank area outside the border)''')) o('single_window_margin_width', -1000.0, option_type=float, long_text=_(''' The window margin (in pts) to use when only a single window is visible. Negative values will cause the value of :opt:`window_margin_width` to be used instead.''')) o('window_padding_width', 0.0, option_type=positive_float, long_text=_(''' The window padding (in pts) (blank area between the text and the window border)''')) o('placement_strategy', 'center', option_type=choices('center', 'top-left'), long_text=_(''' When the window size is not an exact multiple of the cell size, the cell area of the terminal window will have some extra padding on the sides. You can control how that padding is distributed with this option. Using a value of :code:`center` means the cell area will be placed centrally. A value of :code:`top-left` means the padding will be on only the bottom and right edges. ''')) o('active_border_color', '#00ff00', option_type=to_color_or_none, long_text=_(''' The color for the border of the active window. Set this to none to not draw borders around the active window.''')) o('inactive_border_color', '#cccccc', option_type=to_color, long_text=_(''' The color for the border of inactive windows''')) o('bell_border_color', '#ff5a00', option_type=to_color, long_text=_(''' The color for the border of inactive windows in which a bell has occurred''')) o('inactive_text_alpha', 1.0, option_type=unit_float, long_text=_(''' Fade the text in inactive windows by the specified amount (a number between zero and one, with zero being fully faded). ''')) o('hide_window_decorations', False, long_text=_(''' Hide the window decorations (title-bar and window borders). Whether this works and exactly what effect it has depends on the window manager/operating system. ''')) o('resize_debounce_time', 0.1, option_type=positive_float, long_text=_(''' The time (in seconds) to wait before redrawing the screen when a resize event is received. On platforms such as macOS, where the operating system sends events corresponding to the start and end of a resize, this number is ignored.''')) def resize_draw_strategy(x): cmap = {'static': 0, 'scale': 1, 'blank': 2, 'size': 3} return cmap.get(x.lower(), 0) o('resize_draw_strategy', 'static', option_type=resize_draw_strategy, long_text=_(''' Choose how kitty draws a window while a resize is in progress. A value of :code:`static` means draw the current window contents, mostly unchanged. A value of :code:`scale` means draw the current window contents scaled. A value of :code:`blank` means draw a blank window. A value of :code:`size` means show the window size in cells. ''')) # }}} g('tabbar') # {{{ default_tab_separator = ' ┇' def tab_separator(x): for q in '\'"': if x.startswith(q) and x.endswith(q): x = x[1:-1] break if not x.strip(): x = ('\xa0' * len(x)) if x else default_tab_separator return x def tab_bar_edge(x): return {'top': 1, 'bottom': 3}.get(x.lower(), 3) def tab_font_style(x): return { 'bold-italic': (True, True), 'bold': (True, False), 'italic': (False, True) }.get(x.lower().replace('_', '-'), (False, False)) o('tab_bar_edge', 'bottom', option_type=tab_bar_edge, long_text=_(''' Which edge to show the tab bar on, top or bottom''')) o('tab_bar_margin_width', 0.0, option_type=positive_float, long_text=_(''' The margin to the left and right of the tab bar (in pts)''')) o('tab_bar_style', 'fade', option_type=choices('fade', 'separator', 'powerline', 'hidden'), long_text=_(''' The tab bar style, can be one of: :code:`fade`, :code:`separator`, :code:`powerline`, or :code:`hidden`. In the fade style, each tab's edges fade into the background color, in the separator style, tabs are separated by a configurable separator, and the powerline shows the tabs as a continuous line. ''')) o('tab_bar_min_tabs', 2, option_type=lambda x: max(1, positive_int(x)), long_text=_(''' The minimum number of tabs that must exist before the tab bar is shown ''')) o('tab_switch_strategy', 'previous', option_type=choices('previous', 'left', 'last'), long_text=_(''' The algorithm to use when switching to a tab when the current tab is closed. The default of :code:`previous` will switch to the last used tab. A value of :code:`left` will switch to the tab to the left of the closed tab. A value of :code:`last` will switch to the right-most tab. ''')) def tab_fade(x): return tuple(map(unit_float, x.split())) o('tab_fade', '0.25 0.5 0.75 1', option_type=tab_fade, long_text=_(''' Control how each tab fades into the background when using :code:`fade` for the :opt:`tab_bar_style`. Each number is an alpha (between zero and one) that controls how much the corresponding cell fades into the background, with zero being no fade and one being full fade. You can change the number of cells used by adding/removing entries to this list. ''')) o('tab_separator', '"{}"'.format(default_tab_separator), option_type=tab_separator, long_text=_(''' The separator between tabs in the tab bar when using :code:`separator` as the :opt:`tab_bar_style`.''')) o('tab_title_template', '{title}', long_text=_(''' A template to render the tab title. The default just renders the title. If you wish to include the tab-index as well, use something like: :code:`{index}: {title}`. Useful if you have shortcuts mapped for :code:`goto_tab N`. ''')) o('active_tab_foreground', '#000', option_type=to_color, long_text=_(''' Tab bar colors and styles''')) o('active_tab_background', '#eee', option_type=to_color) o('active_tab_font_style', 'bold-italic', option_type=tab_font_style) o('inactive_tab_foreground', '#444', option_type=to_color) o('inactive_tab_background', '#999', option_type=to_color) o('inactive_tab_font_style', 'normal', option_type=tab_font_style) # }}} g('colors') # {{{ o('foreground', '#dddddd', option_type=to_color, long_text=_(''' The foreground and background colors''')) o('background', '#000000', option_type=to_color) o('background_opacity', 1.0, option_type=unit_float, long_text=_(''' The opacity of the background. A number between 0 and 1, where 1 is opaque and 0 is fully transparent. This will only work if supported by the OS (for instance, when using a compositor under X11). Note that it only sets the default background color's opacity. This is so that things like the status bar in vim, powerline prompts, etc. still look good. But it means that if you use a color theme with a background color in your editor, it will not be rendered as transparent. Instead you should change the default background color in your kitty config and not use a background color in the editor color scheme. Or use the escape codes to set the terminals default colors in a shell script to launch your editor. Be aware that using a value less than 1.0 is a (possibly significant) performance hit. If you want to dynamically change transparency of windows set :opt:`dynamic_background_opacity` to :code:`yes` (this is off by default as it has a performance cost) ''')) o('dynamic_background_opacity', False, long_text=_(''' Allow changing of the :opt:`background_opacity` dynamically, using either keyboard shortcuts (:sc:`increase_background_opacity` and :sc:`decrease_background_opacity`) or the remote control facility. ''')) o('dim_opacity', 0.75, option_type=unit_float, long_text=_(''' How much to dim text that has the DIM/FAINT attribute set. One means no dimming and zero means fully dimmed (i.e. invisible).''')) def selection_foreground(x): if x.lower() != 'none': return to_color(x) o('selection_foreground', '#000000', option_type=selection_foreground, long_text=_(''' The foreground for text selected with the mouse. A value of none means to leave the color unchanged.''')) o('selection_background', '#fffacd', option_type=to_color, long_text=_(''' The background for text selected with the mouse.''')) g('colors.table') o('color0', '#000000', long_text=_('black'), option_type=to_color) o('color8', '#767676', option_type=to_color) o('color1', '#cc0403', long_text=_('red'), option_type=to_color) o('color9', '#f2201f', option_type=to_color) o('color2', '#19cb00', long_text=_('green'), option_type=to_color) o('color10', '#23fd00', option_type=to_color) o('color3', '#cecb00', long_text=_('yellow'), option_type=to_color) o('color11', '#fffd00', option_type=to_color) o('color4', '#0d73cc', long_text=_('blue'), option_type=to_color) o('color12', '#1a8fff', option_type=to_color) o('color5', '#cb1ed1', long_text=_('magenta'), option_type=to_color) o('color13', '#fd28ff', option_type=to_color) o('color6', '#0dcdcd', long_text=_('cyan'), option_type=to_color) o('color14', '#14ffff', option_type=to_color) o('color7', '#dddddd', long_text=_('white'), option_type=to_color) o('color15', '#ffffff', option_type=to_color) dfctl = defines.default_color_table() for i in range(16, 256): o('color{}'.format(i), color_as_sharp(color_from_int(dfctl[i])), option_type=to_color, add_to_docs=False) # }}} g('advanced') # {{{ o('shell', '.', long_text=_(''' The shell program to execute. The default value of . means to use whatever shell is set as the default shell for the current user. Note that on macOS if you change this, you might need to add :code:`--login` to ensure that the shell starts in interactive mode and reads its startup rc files.''')) o('editor', '.', long_text=_(''' The console editor to use when editing the kitty config file or similar tasks. A value of . means to use the environment variables VISUAL and EDITOR in that order. Note that this environment variable has to be set not just in your shell startup scripts but system-wide, otherwise kitty will not see it. ''')) o('close_on_child_death', False, long_text=_(''' Close the window when the child process (shell) exits. If no (the default), the terminal will remain open when the child exits as long as there are still processes outputting to the terminal (for example disowned or backgrounded processes). If yes, the window will close as soon as the child process exits. Note that setting it to yes means that any background processes still using the terminal can fail silently because their stdout/stderr/stdin no longer work. ''')) def allow_remote_control(x): if x != 'socket-only': x = 'y' if to_bool(x) else 'n' return x o('allow_remote_control', 'no', option_type=allow_remote_control, long_text=_(''' Allow other programs to control kitty. If you turn this on other programs can control all aspects of kitty, including sending text to kitty windows, opening new windows, closing windows, reading the content of windows, etc. Note that this even works over ssh connections. You can chose to either allow any program running within kitty to control it, with :code:`yes` or only programs that connect to the socket specified with the :option:`kitty --listen-on` command line option, if you use the value :code:`socket-only`. The latter is useful if you want to prevent programs running on a remote computer over ssh from controlling kitty. ''')) o( '+env', '', add_to_default=False, long_text=_(''' Specify environment variables to set in all child processes. Note that environment variables are expanded recursively, so if you use:: env MYVAR1=a env MYVAR2=${MYVAR1}/${HOME}/b The value of MYVAR2 will be :code:`a//b`. ''')) o('update_check_interval', 24, option_type=float, long_text=_(''' Periodically check if an update to kitty is available. If an update is found a system notification is displayed informing you of the available update. The default is to check every 24 hrs, set to zero to disable. ''')) def startup_session(x): if x.lower() == 'none': return x = os.path.expanduser(x) x = os.path.expandvars(x) if not os.path.isabs(x): x = os.path.join(config_dir, x) return x o('startup_session', 'none', option_type=startup_session, long_text=_(''' Path to a session file to use for all kitty instances. Can be overridden by using the :option:`kitty --session` command line option for individual instances. See :ref:`sessions` in the kitty documentation for details. Note that relative paths are interpreted with respect to the kitty config directory. Environment variables in the path are expanded. ''')) o('clipboard_control', 'write-clipboard write-primary', option_type=lambda x: frozenset(x.lower().split()), long_text=_(''' Allow programs running in kitty to read and write from the clipboard. You can control exactly which actions are allowed. The set of possible actions is: write-clipboard read-clipboard write-primary read-primary. You can additionally specify no-append to disable kitty's protocol extension for clipboard concatenation. The default is to allow writing to the clipboard and primary selection with concatenation enabled. Note that enabling the read functionality is a security risk as it means that any program, even one running on a remote server via SSH can read your clipboard. ''')) o('term', 'xterm-kitty', long_text=_(''' The value of the TERM environment variable to set. Changing this can break many terminal programs, only change it if you know what you are doing, not because you read some advice on Stack Overflow to change it. The TERM variable is used by various programs to get information about the capabilities and behavior of the terminal. If you change it, depending on what programs you run, and how different the terminal you are changing it to is, various things from key-presses, to colors, to various advanced features may not work. ''')) # }}} g('os') # {{{ def macos_titlebar_color(x): x = x.strip('"') if x == 'system': return 0 if x == 'background': return 1 return (color_as_int(to_color(x)) << 8) | 2 o('macos_titlebar_color', 'system', option_type=macos_titlebar_color, long_text=_(''' Change the color of the kitty window's titlebar on macOS. A value of :code:`system` means to use the default system color, a value of :code:`background` means to use the background color of the currently active window and finally you can use an arbitrary color, such as :code:`#12af59` or :code:`red`. WARNING: This option works by using a hack, as there is no proper Cocoa API for it. It sets the background color of the entire window and makes the titlebar transparent. As such it is incompatible with :opt:`background_opacity`. If you want to use both, you are probably better off just hiding the titlebar with :opt:`hide_window_decorations`. ''')) def macos_option_as_alt(x): x = x.lower() if x == 'both': return 0b11 if x == 'left': return 0b10 if x == 'right': return 0b01 if to_bool(x): return 0b11 return 0 o('macos_option_as_alt', 'no', option_type=macos_option_as_alt, long_text=_(''' Use the option key as an alt key. With this set to :code:`no`, kitty will use the macOS native :kbd:`Option+Key` = unicode character behavior. This will break any :kbd:`Alt+key` keyboard shortcuts in your terminal programs, but you can use the macOS unicode input technique. You can use the values: :code:`left`, :code:`right`, or :code:`both` to use only the left, right or both Option keys as Alt, instead. ''')) o('macos_hide_from_tasks', False, long_text=_(''' Hide the kitty window from running tasks (:kbd:`Option+Tab`) on macOS. ''')) o('macos_quit_when_last_window_closed', False, long_text=_(''' Have kitty quit when all the top-level windows are closed. By default, kitty will stay running, even with no open windows, as is the expected behavior on macOS. ''')) o('macos_window_resizable', True, long_text=_(''' Disable this if you want kitty top-level (OS) windows to not be resizable on macOS. ''')) o('macos_thicken_font', 0, option_type=positive_float, long_text=_(''' Draw an extra border around the font with the given width, to increase legibility at small font sizes. For example, a value of 0.75 will result in rendering that looks similar to sub-pixel antialiasing at common font sizes. ''')) o('macos_traditional_fullscreen', False, long_text=_(''' Use the traditional full-screen transition, that is faster, but less pretty. ''')) o('macos_show_window_title_in', 'all', option_type=choices('all', 'window', 'menubar', 'none'), long_text=_(''' Show or hide the window title in the macOS window or menu-bar. A value of :code:`window` will show the title of the currently active window at the top of the macOS window. A value of :code:`menubar` will show the title of the currently active window in the macOS menu-bar, making use of otherwise wasted space. :code:`all` will show the title everywhere and :code:`none` hides the title in the window and the menu-bar. ''')) # Disabled by default because of https://github.com/kovidgoyal/kitty/issues/794 o('macos_custom_beam_cursor', False, long_text=_(''' Enable/disable custom mouse cursor for macOS that is easier to see on both light and dark backgrounds. WARNING: this might make your mouse cursor invisible on dual GPU machines.''')) o('linux_display_server', 'auto', option_type=choices('auto', 'x11', 'wayland'), long_text=_(''' Choose between Wayland and X11 backends. By default, an appropriate backend based on the system state is chosen automatically. Set it to :code:`x11` or :code:`wayland` to force the choice.''')) # }}} g('shortcuts') # {{{ o('kitty_mod', 'ctrl+shift', option_type=to_modifiers, long_text=_(''' The value of :code:`kitty_mod` is used as the modifier for all default shortcuts, you can change it in your kitty.conf to change the modifiers for all the default shortcuts.''')) o('clear_all_shortcuts', False, long_text=_(''' You can have kitty remove all shortcut definition seen up to this point. Useful, for instance, to remove the default shortcuts.''')) o('kitten_alias', 'hints hints --hints-offset=0', add_to_default=False, long_text=_(''' You can create aliases for kitten names, this allows overriding the defaults for kitten options and can also be used to shorten repeated mappings of the same kitten with a specific group of options. For example, the above alias changes the default value of :option:`kitty +kitten hints --hints-offset` to zero for all mappings, including the builtin ones. ''')) g('shortcuts.clipboard') # {{{ k('copy_to_clipboard', 'kitty_mod+c', 'copy_to_clipboard', _('Copy to clipboard'), long_text=_(''' There is also a :code:`copy_or_interrupt` action that can be optionally mapped to :kbd:`Ctrl+c`. It will copy only if there is a selection and send an interrupt otherwise.''')) if is_macos: k('copy_to_clipboard', 'cmd+c', 'copy_to_clipboard', _('Copy to clipboard'), add_to_docs=False) k('paste_from_clipboard', 'kitty_mod+v', 'paste_from_clipboard', _('Paste from clipboard')) if is_macos: k('paste_from_clipboard', 'cmd+v', 'paste_from_clipboard', _('Paste from clipboard'), add_to_docs=False) k('paste_from_selection', 'kitty_mod+s', 'paste_from_selection', _('Paste from selection')) k('paste_from_selection', 'shift+insert', 'paste_from_selection', _('Paste from selection')) k('pass_selection_to_program', 'kitty_mod+o', 'pass_selection_to_program', _('Pass selection to program'), long_text=_(''' You can also pass the contents of the current selection to any program using :code:`pass_selection_to_program`. By default, the system's open program is used, but you can specify your own, the selection will be passed as a command line argument to the program, for example:: map kitty_mod+o pass_selection_to_program firefox You can pass the current selection to a terminal program running in a new kitty window, by using the @selection placeholder:: map kitty_mod+y new_window less @selection ''')) # }}} g('shortcuts.scrolling') # {{{ k('scroll_line_up', 'kitty_mod+up', 'scroll_line_up', _('Scroll line up')) if is_macos: k('scroll_line_up', 'alt+cmd+page_up', 'scroll_line_up', _('Scroll line up'), add_to_docs=False) k('scroll_line_up', 'cmd+up', 'scroll_line_up', _('Scroll line up'), add_to_docs=False) k('scroll_line_up', 'kitty_mod+k', 'scroll_line_up') k('scroll_line_down', 'kitty_mod+down', 'scroll_line_down', _('Scroll line down')) k('scroll_line_down', 'kitty_mod+j', 'scroll_line_down') if is_macos: k('scroll_line_down', 'alt+cmd+page_down', 'scroll_line_down', _('Scroll line down'), add_to_docs=False) k('scroll_line_down', 'cmd+down', 'scroll_line_down', _('Scroll line down'), add_to_docs=False) k('scroll_page_up', 'kitty_mod+page_up', 'scroll_page_up', _('Scroll page up')) if is_macos: k('scroll_page_up', 'cmd+page_up', 'scroll_page_up', _('Scroll page up'), add_to_docs=False) k('scroll_page_down', 'kitty_mod+page_down', 'scroll_page_down', _('Scroll page down')) if is_macos: k('scroll_page_down', 'cmd+page_down', 'scroll_page_down', _('Scroll page down'), add_to_docs=False) k('scroll_home', 'kitty_mod+home', 'scroll_home', _('Scroll to top')) if is_macos: k('scroll_home', 'cmd+home', 'scroll_home', _('Scroll to top'), add_to_docs=False) k('scroll_end', 'kitty_mod+end', 'scroll_end', _('Scroll to bottom')) if is_macos: k('scroll_end', 'cmd+end', 'scroll_end', _('Scroll to bottom'), add_to_docs=False) k('show_scrollback', 'kitty_mod+h', 'show_scrollback', _('Browse scrollback buffer in less'), long_text=_(''' You can pipe the contents of the current screen + history buffer as :file:`STDIN` to an arbitrary program using the ``launch`` function. For example, the following opens the scrollback buffer in less in an overlay window:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R For more details on piping screen and buffer contents to external programs, see :doc:`launch`. ''')) # }}} g('shortcuts.window') # {{{ k('new_window', 'kitty_mod+enter', 'new_window', _(''), long_text=_(''' You can open a new window running an arbitrary program, for example:: map kitty_mod+y launch mutt You can open a new window with the current working directory set to the working directory of the current window using:: map ctrl+alt+enter launch --cwd=current You can open a new window that is allowed to control kitty via the kitty remote control facility by prefixing the command line with @. Any programs running in that window will be allowed to control kitty. For example:: map ctrl+enter launch --allow-remote-control some_program You can open a new window next to the currently active window or as the first window, with:: map ctrl+n launch --location=neighbor some_program map ctrl+f launch --location=first some_program For more details, see :doc:`launch`. ''')) if is_macos: k('new_window', 'cmd+enter', 'new_window', _('New window'), add_to_docs=False) k('new_os_window', 'kitty_mod+n', 'new_os_window', _('New OS window'), _( 'Works like new_window above, except that it opens a top level OS kitty window.' ' In particular you can use new_os_window_with_cwd to open a window with the current working directory.')) if is_macos: k('new_os_window', 'cmd+n', 'new_os_window', _('New OS window'), add_to_docs=False) k('close_window', 'kitty_mod+w', 'close_window', _('Close window')) if is_macos: k('close_window', 'shift+cmd+d', 'close_window', _('Close window'), add_to_docs=False) k('next_window', 'kitty_mod+]', 'next_window', _('Next window')) k('previous_window', 'kitty_mod+[', 'previous_window', _('Previous window')) k('move_window_forward', 'kitty_mod+f', 'move_window_forward', _('Move window forward')) k('move_window_backward', 'kitty_mod+b', 'move_window_backward', _('Move window backward')) k('move_window_to_top', 'kitty_mod+`', 'move_window_to_top', _('Move window to top')) k('start_resizing_window', 'kitty_mod+r', 'start_resizing_window', _('Start resizing window')) if is_macos: k('start_resizing_window', 'cmd+r', 'start_resizing_window', _('Start resizing window'), add_to_docs=False) k('first_window', 'kitty_mod+1', 'first_window', _('First window')) k('second_window', 'kitty_mod+2', 'second_window', _('Second window')) k('third_window', 'kitty_mod+3', 'third_window', _('Third window')) k('fourth_window', 'kitty_mod+4', 'fourth_window', _('Fourth window')) k('fifth_window', 'kitty_mod+5', 'fifth_window', _('Fifth window')) k('sixth_window', 'kitty_mod+6', 'sixth_window', _('Sixth window')) k('seventh_window', 'kitty_mod+7', 'seventh_window', _('Seventh window')) k('eighth_window', 'kitty_mod+8', 'eighth_window', _('Eight window')) k('ninth_window', 'kitty_mod+9', 'ninth_window', _('Ninth window')) k('tenth_window', 'kitty_mod+0', 'tenth_window', _('Tenth window')) if is_macos: k('first_window', 'cmd+1', 'first_window', _('First window'), add_to_docs=False) k('second_window', 'cmd+2', 'second_window', _('Second window'), add_to_docs=False) k('third_window', 'cmd+3', 'third_window', _('Third window'), add_to_docs=False) k('fourth_window', 'cmd+4', 'fourth_window', _('Fourth window'), add_to_docs=False) k('fifth_window', 'cmd+5', 'fifth_window', _('Fifth window'), add_to_docs=False) k('sixth_window', 'cmd+6', 'sixth_window', _('Sixth window'), add_to_docs=False) k('seventh_window', 'cmd+7', 'seventh_window', _('Seventh window'), add_to_docs=False) k('eighth_window', 'cmd+8', 'eighth_window', _('Eight window'), add_to_docs=False) k('ninth_window', 'cmd+9', 'ninth_window', _('Ninth window'), add_to_docs=False) # }}} g('shortcuts.tab') # {{{ k('next_tab', 'kitty_mod+right', 'next_tab', _('Next tab')) if is_macos: k('next_tab', 'ctrl+tab', 'next_tab', _('Next tab'), add_to_docs=False) k('next_tab', 'shift+cmd+]', 'next_tab', _('Next tab'), add_to_docs=False) k('previous_tab', 'kitty_mod+left', 'previous_tab', _('Previous tab')) if is_macos: k('previous_tab', 'shift+ctrl+tab', 'previous_tab', _('Previous tab'), add_to_docs=False) k('previous_tab', 'shift+cmd+[', 'previous_tab', _('Previous tab'), add_to_docs=False) k('new_tab', 'kitty_mod+t', 'new_tab', _('New tab')) if is_macos: k('new_tab', 'cmd+t', 'new_tab', _('New tab'), add_to_docs=False) k('close_tab', 'kitty_mod+q', 'close_tab', _('Close tab')) if is_macos: k('close_tab', 'cmd+w', 'close_tab', _('Close tab'), add_to_docs=False) # Not yet implemented # k('close_os_window', 'shift+cmd+w', 'close_os_window', _('Close os window'), add_to_docs=False) k('move_tab_forward', 'kitty_mod+.', 'move_tab_forward', _('Move tab forward')) k('move_tab_backward', 'kitty_mod+,', 'move_tab_backward', _('Move tab backward')) k('set_tab_title', 'kitty_mod+alt+t', 'set_tab_title', _('Set tab title')) if is_macos: k('set_tab_title', 'shift+cmd+i', 'set_tab_title', _('Set tab title'), add_to_docs=False) # }}} g('shortcuts.layout') # {{{ k('next_layout', 'kitty_mod+l', 'next_layout', _('Next layout')) # }}} g('shortcuts.fonts') # {{{ k('increase_font_size', 'kitty_mod+equal', 'change_font_size all +2.0', _('Increase font size')) if is_macos: k('increase_font_size', 'cmd+plus', 'change_font_size all +2.0', _('Increase font size'), add_to_docs=False) k('decrease_font_size', 'kitty_mod+minus', 'change_font_size all -2.0', _('Decrease font size')) if is_macos: k('decrease_font_size', 'cmd+minus', 'change_font_size all -2.0', _('Decrease font size'), add_to_docs=False) k('reset_font_size', 'kitty_mod+backspace', 'change_font_size all 0', _('Reset font size')) if is_macos: k('reset_font_size', 'cmd+0', 'change_font_size all 0', _('Reset font size'), add_to_docs=False) # }}} g('shortcuts.selection') # {{{ k('open_url', 'kitty_mod+e', 'kitten hints', _('Open URL'), _(''' Open a currently visible URL using the keyboard. The program used to open the URL is specified in :opt:`open_url_with`.''')) k('insert_selected_path', 'kitty_mod+p>f', 'kitten hints --type path --program -', _('Insert selected path'), long_text=_(''' Select a path/filename and insert it into the terminal. Useful, for instance to run git commands on a filename output from a previous git command.''')) k('open_selected_path', 'kitty_mod+p>shift+f', 'kitten hints --type path', _('Open selected path'), long_text=_(''' Select a path/filename and open it with the default open program.''')) k('insert_selected_line', 'kitty_mod+p>l', 'kitten hints --type line --program -', _('Insert selected line'), long_text=_(''' Select a line of text and insert it into the terminal. Use for the output of things like: ls -1''')) k('insert_selected_word', 'kitty_mod+p>w', 'kitten hints --type word --program -', _('Insert selected word'), long_text=_(''' Select words and insert into terminal.''')) k('insert_selected_hash', 'kitty_mod+p>h', 'kitten hints --type hash --program -', _('Insert selected hash'), long_text=_(''' Select something that looks like a hash and insert it into the terminal. Useful with git, which uses sha1 hashes to identify commits''')) # }}} g('shortcuts.misc') # {{{ k('toggle_fullscreen', 'kitty_mod+f11', 'toggle_fullscreen', _('Toggle fullscreen')) k('toggle_maximized', 'kitty_mod+f10', 'toggle_maximized', _('Toggle maximized')) k('input_unicode_character', 'kitty_mod+u', 'kitten unicode_input', _('Unicode input')) k('edit_config_file', 'kitty_mod+f2', 'edit_config_file', _('Edit config file')) k('kitty_shell', 'kitty_mod+escape', 'kitty_shell window', _('Open the kitty command shell'), long_text=_(''' Open the kitty shell in a new window/tab/overlay/os_window to control kitty using commands.''')) k('increase_background_opacity', 'kitty_mod+a>m', 'set_background_opacity +0.1', _('Increase background opacity')) k('decrease_background_opacity', 'kitty_mod+a>l', 'set_background_opacity -0.1', _('Decrease background opacity')) k('full_background_opacity', 'kitty_mod+a>1', 'set_background_opacity 1', _('Make background fully opaque')) k('reset_background_opacity', 'kitty_mod+a>d', 'set_background_opacity default', _('Reset background opacity')) k('reset_terminal', 'kitty_mod+delete', 'clear_terminal reset active', _('Reset the terminal'), long_text=_(''' You can create shortcuts to clear/reset the terminal. For example:: # Reset the terminal map kitty_mod+f9 clear_terminal reset active # Clear the terminal screen by erasing all contents map kitty_mod+f10 clear_terminal clear active # Clear the terminal scrollback by erasing it map kitty_mod+f11 clear_terminal scrollback active # Scroll the contents of the screen into the scrollback map kitty_mod+f12 clear_terminal scroll active If you want to operate on all windows instead of just the current one, use :italic:`all` instead of :italic:`active`. It is also possible to remap Ctrl+L to both scroll the current screen contents into the scrollback buffer and clear the screen, instead of just clearing the screen:: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \\x0c ''')) k('send_text', 'ctrl+shift+alt+h', 'send_text all Hello World', _('Send arbitrary text on key presses'), add_to_default=False, long_text=_(''' You can tell kitty to send arbitrary (UTF-8) encoded text to the client program when pressing specified shortcut keys. For example:: map ctrl+alt+a send_text all Special text This will send "Special text" when you press the :kbd:`ctrl+alt+a` key combination. The text to be sent is a python string literal so you can use escapes like :code:`\\x1b` to send control codes or :code:`\\u21fb` to send unicode characters (or you can just input the unicode characters directly as UTF-8 text). The first argument to :code:`send_text` is the keyboard modes in which to activate the shortcut. The possible values are :code:`normal` or :code:`application` or :code:`kitty` or a comma separated combination of them. The special keyword :code:`all` means all modes. The modes :code:`normal` and :code:`application` refer to the DECCKM cursor key mode for terminals, and :code:`kitty` refers to the special kitty extended keyboard protocol. Another example, that outputs a word and then moves the cursor to the start of the line (same as pressing the Home key):: map ctrl+alt+a send_text normal Word\\x1b[H map ctrl+alt+a send_text application Word\\x1bOH ''')) # }}} # }}} type_map = {o.name: o.option_type for o in all_options.values() if hasattr(o, 'option_type')} kitty-0.15.0/kitty/constants.py000066400000000000000000000131221356737523400165110ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import os import pwd import sys from collections import namedtuple from contextlib import suppress appname = 'kitty' version = (0, 15, 0) str_version = '.'.join(map(str, version)) _plat = sys.platform.lower() is_macos = 'darwin' in _plat base = os.path.dirname(os.path.abspath(__file__)) ScreenGeometry = namedtuple('ScreenGeometry', 'xstart ystart xnum ynum dx dy') WindowGeometry = namedtuple('WindowGeometry', 'left top right bottom xnum ynum') def kitty_exe(): ans = getattr(kitty_exe, 'ans', None) if ans is None: rpath = sys._xoptions.get('bundle_exe_dir') if not rpath: items = filter(None, os.environ.get('PATH', '').split(os.pathsep)) seen = set() for candidate in items: if candidate not in seen: seen.add(candidate) if os.access(os.path.join(candidate, 'kitty'), os.X_OK): rpath = candidate break else: rpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'launcher') ans = kitty_exe.ans = os.path.join(rpath, 'kitty') return ans def _get_config_dir(): if 'KITTY_CONFIG_DIRECTORY' in os.environ: return os.path.abspath(os.path.expanduser(os.environ['KITTY_CONFIG_DIRECTORY'])) locations = [] if 'XDG_CONFIG_HOME' in os.environ: locations.append(os.path.abspath(os.path.expanduser(os.environ['XDG_CONFIG_HOME']))) locations.append(os.path.expanduser('~/.config')) if is_macos: locations.append(os.path.expanduser('~/Library/Preferences')) for loc in filter(None, os.environ.get('XDG_CONFIG_DIRS', '').split(os.pathsep)): locations.append(os.path.abspath(os.path.expanduser(loc))) for loc in locations: if loc: q = os.path.join(loc, appname) if os.access(q, os.W_OK) and os.path.exists(os.path.join(q, 'kitty.conf')): return q candidate = os.path.abspath(os.path.expanduser(os.environ.get('XDG_CONFIG_HOME') or '~/.config')) ans = os.path.join(candidate, appname) try: os.makedirs(ans, exist_ok=True) except FileExistsError: raise SystemExit('A file {} already exists. It must be a directory, not a file.'.format(ans)) except PermissionError: import tempfile import atexit ans = tempfile.mkdtemp(prefix='kitty-conf-') def cleanup(): import shutil with suppress(Exception): shutil.rmtree(ans) atexit.register(cleanup) return ans config_dir = _get_config_dir() del _get_config_dir defconf = os.path.join(config_dir, 'kitty.conf') def _get_cache_dir(): if 'KITTY_CACHE_DIRECTORY' in os.environ: candidate = os.path.abspath(os.environ['KITTY_CACHE_DIRECTORY']) elif is_macos: candidate = os.path.join(os.path.expanduser('~/Library/Caches'), appname) else: candidate = os.environ.get('XDG_CACHE_HOME', '~/.cache') candidate = os.path.join(os.path.expanduser(candidate), appname) os.makedirs(candidate, exist_ok=True) return candidate def cache_dir(): ans = getattr(cache_dir, 'ans', None) if ans is None: ans = cache_dir.ans = _get_cache_dir() return ans def get_boss(): return get_boss.boss def set_boss(m): from .fast_data_types import set_boss as set_c_boss get_boss.boss = m set_c_boss(m) def wakeup(): get_boss.boss.child_monitor.wakeup() base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) terminfo_dir = os.path.join(base_dir, 'terminfo') logo_data_file = os.path.join(base_dir, 'logo', 'kitty.rgba') logo_png_file = os.path.join(base_dir, 'logo', 'kitty.png') beam_cursor_data_file = os.path.join(base_dir, 'logo', 'beam-cursor.png') try: shell_path = pwd.getpwuid(os.geteuid()).pw_shell or '/bin/sh' except KeyError: with suppress(Exception): print('Failed to read login shell via getpwuid() for current user, falling back to /bin/sh', file=sys.stderr) shell_path = '/bin/sh' def glfw_path(module): return os.path.join(base, 'glfw-{}.so'.format(module)) def detect_if_wayland_ok(): if 'WAYLAND_DISPLAY' not in os.environ: return False if 'KITTY_DISABLE_WAYLAND' in os.environ: return False wayland = glfw_path('wayland') if not os.path.exists(wayland): return False # GNOME does not support xdg-decorations # https://gitlab.gnome.org/GNOME/mutter/issues/217 import ctypes lib = ctypes.CDLL(wayland) check = lib.glfwWaylandCheckForServerSideDecorations check.restype = ctypes.c_char_p check.argtypes = () try: ans = bytes(check()) except Exception: return False if ans == b'NO': print( 'Your Wayland compositor does not support server side window decorations,' ' disabling Wayland. You can force Wayland support using the' ' linux_display_server option in kitty.conf' ' See https://drewdevault.com/2018/01/27/Sway-and-client-side-decorations.html' ' for more information.', file=sys.stderr) return ans == b'YES' def is_wayland(opts=None): if is_macos: return False if opts is None: return is_wayland.ans if opts.linux_display_server == 'auto': ans = detect_if_wayland_ok() else: ans = opts.linux_display_server == 'wayland' setattr(is_wayland, 'ans', ans) return ans supports_primary_selection = not is_macos kitty-0.15.0/kitty/control-codes.h000066400000000000000000000130131356737523400170460ustar00rootroot00000000000000/* * control_codes.h * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once // Space #define SP ' ' // *Null*: Does nothing. #define NUL 0 // *Bell*: Beeps. #define BEL 0x07 // *Backspace*: Backspace one column, but not past the beginning of the // line. #define BS 0x08 // *Horizontal tab*: Move cursor to the next tab stop, or to the end // of the line if there is no earlier tab stop. #define HT 0x09 // *Linefeed*: Give a line feed, and, if LNM (new // line mode) is set also a carriage return. #define LF 10 // *Vertical tab*: Same as :data:`LF`. #define VT 0x0b // *Form feed*: Same as :data:`LF`. #define FF 0x0c // *Carriage return*: Move cursor to left margin on current line. #define CR 13 // *Shift out*: Activate G1 character set. #define SO 0x0e // *Shift in*: Activate G0 character set. #define SI 0x0f // *Cancel*: Interrupt escape sequence. If received during an escape or // control sequence, cancels the sequence and displays substitution // character. #define CAN 0x18 // *Substitute*: Same as :data:`CAN`. #define SUB 0x1a // *Escape*: Starts an escape sequence. #define ESC 0x1b // *Delete*: Is ignored. #define DEL 0x7f #define IND 0x84 #define NEL 0x85 #define HTS 0x88 #define RI 0x8d #define DCS 0x90 #define CSI 0x9b #define ST 0x9c #define OSC 0x9d #define PM 0x9e #define APC 0x9f // Sharp control codes // ------------------- // Align display #define DECALN '8' // Esc control codes // ------------------ #define ESC_DCS 'P' #define ESC_OSC ']' #define ESC_CSI '[' #define ESC_ST '\\' #define ESC_PM '^' #define ESC_APC '_' // *Reset*. #define ESC_RIS 'c' // *Index*: Move cursor down one line in same column. If the cursor is // at the bottom margin, the screen performs a scroll-up. #define ESC_IND 'D' // *Next line*: Same as LF. #define ESC_NEL 'E' // Tabulation set: Set a horizontal tab stop at cursor position. #define ESC_HTS 'H' // *Reverse index*: Move cursor up one line in same column. If the // cursor is at the top margin, the screen performs a scroll-down. #define ESC_RI 'M' // Save cursor: Save cursor position, character attribute (graphic // rendition), character set, and origin mode selection (see // :data:`DECRC`). #define ESC_DECSC '7' // *Restore cursor*: Restore previously saved cursor position, character // attribute (graphic rendition), character set, and origin mode // selection. If none were saved, move cursor to home position. #define ESC_DECRC '8' // Set normal keypad mode #define ESC_DECPNM '>' // Set alternate keypad mode #define ESC_DECPAM '=' // ECMA-48 CSI sequences. // --------------------- // *Insert character*: Insert the indicated # of blank characters. #define ICH '@' // *Cursor up*: Move cursor up the indicated # of lines in same column. // Cursor stops at top margin. #define CUU 'A' // *Cursor down*: Move cursor down the indicated # of lines in same // column. Cursor stops at bottom margin. #define CUD 'B' // *Cursor forward*: Move cursor right the indicated # of columns. // Cursor stops at right margin. #define CUF 'C' // *Cursor back*: Move cursor left the indicated # of columns. Cursor // stops at left margin. #define CUB 'D' // *Cursor next line*: Move cursor down the indicated # of lines to // column 1. #define CNL 'E' // *Cursor previous line*: Move cursor up the indicated # of lines to // column 1. #define CPL 'F' // *Cursor horizontal align*: Move cursor to the indicated column in // current line. #define CHA 'G' // *Cursor position*: Move cursor to the indicated line, column (origin // at ``1, 1``). #define CUP 'H' // *Erase data* (default: from cursor to end of line). #define ED 'J' // *Erase in line* (default: from cursor to end of line). #define EL 'K' // *Insert line*: Insert the indicated # of blank lines, starting from // the current line. Lines displayed below cursor move down. Lines moved // past the bottom margin are lost. #define IL 'L' // *Delete line*: Delete the indicated # of lines, starting from the // current line. As lines are deleted, lines displayed below cursor // move up. Lines added to bottom of screen have spaces with same // character attributes as last line move up. #define DL 'M' // *Delete character*: Delete the indicated # of characters on the // current line. When character is deleted, all characters to the right // of cursor move left. #define DCH 'P' // Scroll up by the specified number of lines #define SU 'S' // Scroll down by the specified number of lines #define SD 'T' // *Erase character*: Erase the indicated # of characters on the // current line. #define ECH 'X' // *Horizontal position relative*: Same as :data:`CUF`. #define HPR 'a' // *Device Attributes*. #define DA 'c' // *Vertical position adjust*: Move cursor to the indicated line, // current column. #define VPA 'd' // *Vertical position relative*: Same as :data:`CUD`. #define VPR 'e' // *Horizontal / Vertical position*: Same as :data:`CUP`. #define HVP 'f' // *Tabulation clear*: Clears a horizontal tab stop at cursor position. #define TBC 'g' // *Set mode*. #define SM 'h' // *Reset mode*. #define RM 'l' // *Select graphics rendition*: The terminal can display the following // character attributes that change the character display without // changing the character #define SGR 'm' // *Device status report*. #define DSR 'n' // Soft reset #define DECSTR 'p' // *Horizontal position adjust*: Same as :data:`CHA`. #define HPA '`' // Back tab #define CBT 'Z' // Forward tab #define CHT 'I' // Misc sequences // ---------------- // Change cursor shape/blink #define DECSCUSR 'q' kitty-0.15.0/kitty/core_text.m000066400000000000000000000614671356737523400163140ustar00rootroot00000000000000/* * core_text.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "fonts.h" #include "unicode-data.h" #include #include #include #include #include #import #import #include #include #import #import typedef struct { PyObject_HEAD unsigned int units_per_em; float ascent, descent, leading, underline_position, underline_thickness, point_sz, scaled_point_sz; CTFontRef ct_font; hb_font_t *hb_font; PyObject *family_name, *full_name, *postscript_name, *path; } CTFace; PyTypeObject CTFace_Type; static inline char* convert_cfstring(CFStringRef src, int free_src) { #define SZ 4094 static char buf[SZ+2] = {0}; bool ok = false; if(!CFStringGetCString(src, buf, SZ, kCFStringEncodingUTF8)) PyErr_SetString(PyExc_ValueError, "Failed to convert CFString"); else ok = true; if (free_src) CFRelease(src); return ok ? buf : NULL; #undef SZ } static inline void init_face(CTFace *self, CTFontRef font) { if (self->hb_font) hb_font_destroy(self->hb_font); self->hb_font = NULL; if (self->ct_font) CFRelease(self->ct_font); self->ct_font = font; self->units_per_em = CTFontGetUnitsPerEm(self->ct_font); self->ascent = CTFontGetAscent(self->ct_font); self->descent = CTFontGetDescent(self->ct_font); self->leading = CTFontGetLeading(self->ct_font); self->underline_position = CTFontGetUnderlinePosition(self->ct_font); self->underline_thickness = CTFontGetUnderlineThickness(self->ct_font); self->scaled_point_sz = CTFontGetSize(self->ct_font); } static inline CTFace* ct_face(CTFontRef font) { CTFace *self = (CTFace *)CTFace_Type.tp_alloc(&CTFace_Type, 0); if (self) { init_face(self, font); self->family_name = Py_BuildValue("s", convert_cfstring(CTFontCopyFamilyName(self->ct_font), true)); self->full_name = Py_BuildValue("s", convert_cfstring(CTFontCopyFullName(self->ct_font), true)); self->postscript_name = Py_BuildValue("s", convert_cfstring(CTFontCopyPostScriptName(self->ct_font), true)); NSURL *url = (NSURL*)CTFontCopyAttribute(self->ct_font, kCTFontURLAttribute); self->path = Py_BuildValue("s", [[url path] UTF8String]); [url release]; if (self->family_name == NULL || self->full_name == NULL || self->postscript_name == NULL || self->path == NULL) { Py_CLEAR(self); } } return self; } static void dealloc(CTFace* self) { if (self->hb_font) hb_font_destroy(self->hb_font); if (self->ct_font) CFRelease(self->ct_font); self->hb_font = NULL; self->ct_font = NULL; Py_CLEAR(self->family_name); Py_CLEAR(self->full_name); Py_CLEAR(self->postscript_name); Py_CLEAR(self->path); Py_TYPE(self)->tp_free((PyObject*)self); } static PyObject* font_descriptor_to_python(CTFontDescriptorRef descriptor) { NSURL *url = (NSURL *) CTFontDescriptorCopyAttribute(descriptor, kCTFontURLAttribute); NSString *psName = (NSString *) CTFontDescriptorCopyAttribute(descriptor, kCTFontNameAttribute); NSString *family = (NSString *) CTFontDescriptorCopyAttribute(descriptor, kCTFontFamilyNameAttribute); NSString *style = (NSString *) CTFontDescriptorCopyAttribute(descriptor, kCTFontStyleNameAttribute); NSDictionary *traits = (NSDictionary *) CTFontDescriptorCopyAttribute(descriptor, kCTFontTraitsAttribute); unsigned int straits = [traits[(id)kCTFontSymbolicTrait] unsignedIntValue]; NSNumber *weightVal = traits[(id)kCTFontWeightTrait]; NSNumber *widthVal = traits[(id)kCTFontWidthTrait]; PyObject *ans = Py_BuildValue("{ssssssss sOsOsO sfsfsI}", "path", [[url path] UTF8String], "postscript_name", [psName UTF8String], "family", [family UTF8String], "style", [style UTF8String], "bold", (straits & kCTFontBoldTrait) != 0 ? Py_True : Py_False, "italic", (straits & kCTFontItalicTrait) != 0 ? Py_True : Py_False, "monospace", (straits & kCTFontMonoSpaceTrait) != 0 ? Py_True : Py_False, "weight", [weightVal floatValue], "width", [widthVal floatValue], "traits", straits ); [url release]; [psName release]; [family release]; [style release]; [traits release]; return ans; } static CTFontDescriptorRef font_descriptor_from_python(PyObject *src) { CTFontSymbolicTraits symbolic_traits = 0; NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; PyObject *t = PyDict_GetItemString(src, "traits"); if (t == NULL) { symbolic_traits = ( (PyDict_GetItemString(src, "bold") == Py_True ? kCTFontBoldTrait : 0) | (PyDict_GetItemString(src, "italic") == Py_True ? kCTFontItalicTrait : 0) | (PyDict_GetItemString(src, "monospace") == Py_True ? kCTFontMonoSpaceTrait : 0)); } else { symbolic_traits = PyLong_AsUnsignedLong(t); } NSDictionary *traits = @{(id)kCTFontSymbolicTrait:[NSNumber numberWithUnsignedInt:symbolic_traits]}; attrs[(id)kCTFontTraitsAttribute] = traits; #define SET(x, attr) \ t = PyDict_GetItemString(src, #x); \ if (t) attrs[(id)attr] = @(PyUnicode_AsUTF8(t)); SET(family, kCTFontFamilyNameAttribute); SET(style, kCTFontStyleNameAttribute); SET(postscript_name, kCTFontNameAttribute); #undef SET return CTFontDescriptorCreateWithAttributes((CFDictionaryRef) attrs); } static CTFontCollectionRef all_fonts_collection_data = NULL; static CTFontCollectionRef all_fonts_collection() { if (all_fonts_collection_data == NULL) all_fonts_collection_data = CTFontCollectionCreateFromAvailableFonts(NULL); return all_fonts_collection_data; } static PyObject* coretext_all_fonts(PyObject UNUSED *_self) { CFArrayRef matches = CTFontCollectionCreateMatchingFontDescriptors(all_fonts_collection()); const CFIndex count = CFArrayGetCount(matches); PyObject *ans = PyTuple_New(count), *temp; if (ans == NULL) return PyErr_NoMemory(); for (CFIndex i = 0; i < count; i++) { temp = font_descriptor_to_python((CTFontDescriptorRef) CFArrayGetValueAtIndex(matches, i)); if (temp == NULL) { Py_DECREF(ans); return NULL; } PyTuple_SET_ITEM(ans, i, temp); temp = NULL; } return ans; } static inline unsigned int glyph_id_for_codepoint_ctfont(CTFontRef ct_font, char_type ch) { unichar chars[2] = {0}; CGGlyph glyphs[2] = {0}; int count = CFStringGetSurrogatePairForLongCharacter(ch, chars) ? 2 : 1; CTFontGetGlyphsForCharacters(ct_font, chars, glyphs, count); return glyphs[0]; } static inline bool is_last_resort_font(CTFontRef new_font) { CFStringRef name = CTFontCopyPostScriptName(new_font); CFComparisonResult cr = CFStringCompare(name, CFSTR("LastResort"), 0); CFRelease(name); return cr == kCFCompareEqualTo; } static inline CTFontRef manually_search_fallback_fonts(CTFontRef current_font, CPUCell *cell) { CFArrayRef fonts = CTFontCollectionCreateMatchingFontDescriptors(all_fonts_collection()); CTFontRef ans = NULL; const CFIndex count = CFArrayGetCount(fonts); for (CFIndex i = 0; i < count; i++) { CTFontDescriptorRef descriptor = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fonts, i); CTFontRef new_font = CTFontCreateWithFontDescriptor(descriptor, CTFontGetSize(current_font), NULL); if (new_font) { if (!is_last_resort_font(new_font)) { char_type ch = cell->ch ? cell->ch : ' '; bool found = true; if (!glyph_id_for_codepoint_ctfont(new_font, ch)) found = false; for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i] && found; i++) { ch = codepoint_for_mark(cell->cc_idx[i]); if (!glyph_id_for_codepoint_ctfont(new_font, ch)) found = false; } if (found) { ans = new_font; break; } } CFRelease(new_font); } } return ans; } static inline CTFontRef find_substitute_face(CFStringRef str, CTFontRef old_font, CPUCell *cpu_cell) { // CTFontCreateForString returns the original font when there are combining // diacritics in the font and the base character is in the original font, // so we have to check each character individually CFIndex len = CFStringGetLength(str), start = 0, amt = len; while (start < len) { CTFontRef new_font = CTFontCreateForString(old_font, str, CFRangeMake(start, amt)); if (amt == len && len != 1) amt = 1; else start++; if (new_font == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to find fallback CTFont"); return NULL; } if (new_font == old_font) { CFRelease(new_font); continue; } if (is_last_resort_font(new_font)) { CFRelease(new_font); if (is_private_use(cpu_cell->ch)) { // CoreTexts fallback font mechanism does not work for private use characters new_font = manually_search_fallback_fonts(old_font, cpu_cell); if (new_font) return new_font; } PyErr_SetString(PyExc_ValueError, "Failed to find fallback CTFont other than the LastResort font"); return NULL; } return new_font; } PyErr_SetString(PyExc_ValueError, "CoreText returned the same font as a fallback font"); return NULL; } PyObject* create_fallback_face(PyObject *base_face, CPUCell* cell, bool UNUSED bold, bool UNUSED italic, bool emoji_presentation, FONTS_DATA_HANDLE fg UNUSED) { CTFace *self = (CTFace*)base_face; CTFontRef new_font; if (emoji_presentation) new_font = CTFontCreateWithName((CFStringRef)@"AppleColorEmoji", self->scaled_point_sz, NULL); else { char text[64] = {0}; cell_as_utf8_for_fallback(cell, text); CFStringRef str = CFStringCreateWithCString(NULL, text, kCFStringEncodingUTF8); if (str == NULL) return PyErr_NoMemory(); new_font = find_substitute_face(str, self->ct_font, cell); CFRelease(str); } if (new_font == NULL) return NULL; return (PyObject*)ct_face(new_font); } unsigned int glyph_id_for_codepoint(PyObject *s, char_type ch) { CTFace *self = (CTFace*)s; return glyph_id_for_codepoint_ctfont(self->ct_font, ch); } bool is_glyph_empty(PyObject *s, glyph_index g) { CTFace *self = (CTFace*)s; CGGlyph gg = g; CGRect bounds; CTFontGetBoundingRectsForGlyphs(self->ct_font, kCTFontOrientationHorizontal, &gg, &bounds, 1); return bounds.size.width <= 0; } int get_glyph_width(PyObject *s, glyph_index g) { CTFace *self = (CTFace*)s; CGGlyph gg = g; CGRect bounds; CTFontGetBoundingRectsForGlyphs(self->ct_font, kCTFontOrientationHorizontal, &gg, &bounds, 1); return (int)ceil(bounds.size.width); } static inline float scaled_point_sz(FONTS_DATA_HANDLE fg) { return ((fg->logical_dpi_x + fg->logical_dpi_y) / 144.0) * fg->font_sz_in_pts; } bool set_size_for_face(PyObject *s, unsigned int UNUSED desired_height, bool force, FONTS_DATA_HANDLE fg) { CTFace *self = (CTFace*)s; float sz = scaled_point_sz(fg); if (!force && self->scaled_point_sz == sz) return true; CTFontRef new_font = CTFontCreateCopyWithAttributes(self->ct_font, sz, NULL, NULL); if (new_font == NULL) fatal("Out of memory"); init_face(self, new_font); return true; } hb_font_t* harfbuzz_font_for_face(PyObject* s) { CTFace *self = (CTFace*)s; if (!self->hb_font) { self->hb_font = hb_coretext_font_create(self->ct_font); if (!self->hb_font) fatal("Failed to create hb_font"); hb_ot_font_set_funcs(self->hb_font); } return self->hb_font; } void cell_metrics(PyObject *s, unsigned int* cell_width, unsigned int* cell_height, unsigned int* baseline, unsigned int* underline_position, unsigned int* underline_thickness) { // See https://developer.apple.com/library/content/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/TypoFeatures/TextSystemFeatures.html CTFace *self = (CTFace*)s; #define count (128 - 32) unichar chars[count+1] = {0}; CGGlyph glyphs[count+1] = {0}; unsigned int width = 0, w, i; for (i = 0; i < count; i++) chars[i] = 32 + i; CTFontGetGlyphsForCharacters(self->ct_font, chars, glyphs, count); for (i = 0; i < count; i++) { if (glyphs[i]) { w = (unsigned int)(ceilf( CTFontGetAdvancesForGlyphs(self->ct_font, kCTFontOrientationHorizontal, glyphs+i, NULL, 1))); if (w > width) width = w; } } *cell_width = MAX(1u, width); *underline_position = (unsigned int)floor(self->ascent - self->underline_position + 0.5); *underline_thickness = (unsigned int)ceil(MAX(0.1, self->underline_thickness)); *baseline = (unsigned int)self->ascent; // float line_height = MAX(1, floor(self->ascent + self->descent + MAX(0, self->leading) + 0.5)); // Let CoreText's layout engine calculate the line height. Slower, but hopefully more accurate. #define W "AQWMH_gyl " CFStringRef ts = CFSTR(W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W); #undef W CFMutableAttributedStringRef test_string = CFAttributedStringCreateMutable(kCFAllocatorDefault, CFStringGetLength(ts)); CFAttributedStringReplaceString(test_string, CFRangeMake(0, 0), ts); CFAttributedStringSetAttribute(test_string, CFRangeMake(0, CFStringGetLength(ts)), kCTFontAttributeName, self->ct_font); CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL, CGRectMake(10, 10, 200, 200)); CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(test_string); CFRelease(test_string); CTFrameRef test_frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); CGPoint origin1, origin2; CTFrameGetLineOrigins(test_frame, CFRangeMake(0, 1), &origin1); CTFrameGetLineOrigins(test_frame, CFRangeMake(1, 1), &origin2); CGFloat line_height = origin1.y - origin2.y; CFRelease(test_frame); CFRelease(path); CFRelease(framesetter); *cell_height = MAX(4u, (unsigned int)ceilf(line_height)); #undef count } PyObject* face_from_descriptor(PyObject *descriptor, FONTS_DATA_HANDLE fg) { CTFontDescriptorRef desc = font_descriptor_from_python(descriptor); if (!desc) return NULL; CTFontRef font = CTFontCreateWithFontDescriptor(desc, scaled_point_sz(fg), NULL); CFRelease(desc); desc = NULL; if (!font) { PyErr_SetString(PyExc_ValueError, "Failed to create CTFont object"); return NULL; } return (PyObject*) ct_face(font); } PyObject* face_from_path(const char *path, int UNUSED index, FONTS_DATA_HANDLE fg UNUSED) { CFStringRef s = CFStringCreateWithCString(NULL, path, kCFStringEncodingUTF8); CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, s, kCFURLPOSIXPathStyle, false); CGDataProviderRef dp = CGDataProviderCreateWithURL(url); CGFontRef cg_font = CGFontCreateWithDataProvider(dp); CTFontRef ct_font = CTFontCreateWithGraphicsFont(cg_font, 0.0, NULL, NULL); CFRelease(cg_font); CFRelease(dp); CFRelease(url); CFRelease(s); return (PyObject*) ct_face(ct_font); } PyObject* specialize_font_descriptor(PyObject *base_descriptor, FONTS_DATA_HANDLE fg UNUSED) { Py_INCREF(base_descriptor); return base_descriptor; } static uint8_t *render_buf = NULL; static size_t render_buf_sz = 0; static CGGlyph glyphs[128]; static CGRect boxes[128]; static CGPoint positions[128]; static void finalize(void) { free(render_buf); if (all_fonts_collection_data) CFRelease(all_fonts_collection_data); } static inline void render_color_glyph(CTFontRef font, uint8_t *buf, int glyph_id, unsigned int width, unsigned int height, unsigned int baseline) { CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB(); if (color_space == NULL) fatal("Out of memory"); CGContextRef ctx = CGBitmapContextCreate(buf, width, height, 8, 4 * width, color_space, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault); if (ctx == NULL) fatal("Out of memory"); CGContextSetShouldAntialias(ctx, true); CGContextSetShouldSmoothFonts(ctx, true); // sub-pixel antialias CGContextSetRGBFillColor(ctx, 1, 1, 1, 1); CGAffineTransform transform = CGAffineTransformIdentity; CGContextSetTextDrawingMode(ctx, kCGTextFill); CGGlyph glyph = glyph_id; CGContextSetTextMatrix(ctx, transform); CGContextSetTextPosition(ctx, -boxes[0].origin.x, MAX(2, height - 1.2f * baseline)); // lower the emoji a bit so its bottom is not on the baseline CGPoint p = CGPointMake(0, 0); CTFontDrawGlyphs(font, &glyph, &p, 1, ctx); CGContextRelease(ctx); CGColorSpaceRelease(color_space); for (size_t r = 0; r < width; r++) { for (size_t c = 0; c < height; c++, buf += 4) { uint32_t px = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; *((pixel*)buf) = px; } } } static inline void ensure_render_space(size_t width, size_t height) { if (render_buf_sz >= width * height) return; free(render_buf); render_buf_sz = width * height; render_buf = malloc(render_buf_sz); if (render_buf == NULL) fatal("Out of memory"); } static inline void render_glyphs(CTFontRef font, unsigned int width, unsigned int height, unsigned int baseline, unsigned int num_glyphs) { memset(render_buf, 0, width * height); CGColorSpaceRef gray_color_space = CGColorSpaceCreateDeviceGray(); if (gray_color_space == NULL) fatal("Out of memory"); CGContextRef render_ctx = CGBitmapContextCreate(render_buf, width, height, 8, width, gray_color_space, (kCGBitmapAlphaInfoMask & kCGImageAlphaNone)); if (render_ctx == NULL) fatal("Out of memory"); CGContextSetShouldAntialias(render_ctx, true); CGContextSetShouldSmoothFonts(render_ctx, true); CGContextSetGrayFillColor(render_ctx, 1, 1); // white glyphs CGContextSetGrayStrokeColor(render_ctx, 1, 1); CGContextSetLineWidth(render_ctx, OPT(macos_thicken_font)); CGContextSetTextDrawingMode(render_ctx, kCGTextFillStroke); CGContextSetTextMatrix(render_ctx, CGAffineTransformIdentity); CGContextSetTextPosition(render_ctx, 0, height - baseline); CTFontDrawGlyphs(font, glyphs, positions, num_glyphs, render_ctx); CGContextRelease(render_ctx); CGColorSpaceRelease(gray_color_space); } StringCanvas render_simple_text_impl(PyObject *s, const char *text, unsigned int baseline) { CTFace *self = (CTFace*)s; CTFontRef font = self->ct_font; size_t num_chars = strnlen(text, 32); unichar chars[num_chars]; CGSize advances[num_chars]; for (size_t i = 0; i < num_chars; i++) chars[i] = text[i]; CTFontGetGlyphsForCharacters(font, chars, glyphs, num_chars); CTFontGetAdvancesForGlyphs(font, kCTFontOrientationDefault, glyphs, advances, num_chars); CGRect bounding_box = CTFontGetBoundingRectsForGlyphs(font, kCTFontOrientationDefault, glyphs, boxes, num_chars); StringCanvas ans = { .width = 0, .height = (size_t)(2 * bounding_box.size.height) }; for (size_t i = 0, y = 0; i < num_chars; i++) { positions[i] = CGPointMake(ans.width, y); ans.width += advances[i].width; y += advances[i].height; } ensure_render_space(ans.width, ans.height); render_glyphs(font, ans.width, ans.height, baseline, num_chars); ans.canvas = malloc(ans.width * ans.height); if (ans.canvas) memcpy(ans.canvas, render_buf, ans.width * ans.height); return ans; } static inline bool do_render(CTFontRef ct_font, bool bold, bool italic, hb_glyph_info_t *info, hb_glyph_position_t *hb_positions, unsigned int num_glyphs, pixel *canvas, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, unsigned int baseline, bool *was_colored, bool allow_resize, FONTS_DATA_HANDLE fg, bool center_glyph) { unsigned int canvas_width = cell_width * num_cells; CGRect br = CTFontGetBoundingRectsForGlyphs(ct_font, kCTFontOrientationHorizontal, glyphs, boxes, num_glyphs); if (allow_resize) { // Resize glyphs that would bleed into neighboring cells, by scaling the font size float right = 0; for (unsigned i=0; i < num_glyphs; i++) right = MAX(right, boxes[i].origin.x + boxes[i].size.width); if (!bold && !italic && right > canvas_width + 1) { CGFloat sz = CTFontGetSize(ct_font); sz *= canvas_width / right; CTFontRef new_font = CTFontCreateCopyWithAttributes(ct_font, sz, NULL, NULL); bool ret = do_render(new_font, bold, italic, info, hb_positions, num_glyphs, canvas, cell_width, cell_height, num_cells, baseline, was_colored, false, fg, center_glyph); CFRelease(new_font); return ret; } } for (unsigned i=0; i < num_glyphs; i++) { positions[i].x = MAX(0, -boxes[i].origin.x) + hb_positions[i].x_offset / 64.f; positions[i].y = hb_positions[i].y_offset / 64.f; } if (*was_colored) { render_color_glyph(ct_font, (uint8_t*)canvas, info[0].codepoint, cell_width * num_cells, cell_height, baseline); } else { ensure_render_space(canvas_width, cell_height); render_glyphs(ct_font, canvas_width, cell_height, baseline, num_glyphs); Region src = {.bottom=cell_height, .right=canvas_width}, dest = {.bottom=cell_height, .right=canvas_width}; render_alpha_mask(render_buf, canvas, &src, &dest, canvas_width, canvas_width); } if (num_cells > 1) { // center glyphs CGFloat delta = canvas_width - br.size.width; if (delta > 1) right_shift_canvas(canvas, canvas_width, cell_height, (unsigned)(delta / 2.f)); } return true; } bool render_glyphs_in_cells(PyObject *s, bool bold, bool italic, hb_glyph_info_t *info, hb_glyph_position_t *hb_positions, unsigned int num_glyphs, pixel *canvas, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, unsigned int baseline, bool *was_colored, FONTS_DATA_HANDLE fg, bool center_glyph) { CTFace *self = (CTFace*)s; for (unsigned i=0; i < num_glyphs; i++) glyphs[i] = info[i].codepoint; return do_render(self->ct_font, bold, italic, info, hb_positions, num_glyphs, canvas, cell_width, cell_height, num_cells, baseline, was_colored, true, fg, center_glyph); } // Boilerplate {{{ static PyObject* display_name(CTFace *self) { CFStringRef dn = CTFontCopyDisplayName(self->ct_font); const char *d = convert_cfstring(dn, true); return Py_BuildValue("s", d); } static PyMethodDef methods[] = { METHODB(display_name, METH_NOARGS), {NULL} /* Sentinel */ }; const char* postscript_name_for_face(const PyObject *face_) { const CTFace *self = (const CTFace*)face_; if (self->postscript_name) return PyUnicode_AsUTF8(self->postscript_name); return ""; } static PyObject * repr(CTFace *self) { char buf[1024] = {0}; snprintf(buf, sizeof(buf)/sizeof(buf[0]), "ascent=%.1f, descent=%.1f, leading=%.1f, point_sz=%.1f, scaled_point_sz=%.1f, underline_position=%.1f underline_thickness=%.1f", (self->ascent), (self->descent), (self->leading), (self->point_sz), (self->scaled_point_sz), (self->underline_position), (self->underline_thickness)); return PyUnicode_FromFormat( "Face(family=%U, full_name=%U, postscript_name=%U, path=%U, units_per_em=%u, %s)", self->family_name, self->full_name, self->postscript_name, self->path, self->units_per_em, buf ); } static PyMethodDef module_methods[] = { METHODB(coretext_all_fonts, METH_NOARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyMemberDef members[] = { #define MEM(name, type) {#name, type, offsetof(CTFace, name), READONLY, #name} MEM(units_per_em, T_UINT), MEM(point_sz, T_FLOAT), MEM(scaled_point_sz, T_FLOAT), MEM(ascent, T_FLOAT), MEM(descent, T_FLOAT), MEM(leading, T_FLOAT), MEM(underline_position, T_FLOAT), MEM(underline_thickness, T_FLOAT), MEM(family_name, T_OBJECT), MEM(path, T_OBJECT), MEM(full_name, T_OBJECT), MEM(postscript_name, T_OBJECT), {NULL} /* Sentinel */ }; PyTypeObject CTFace_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.CTFace", .tp_basicsize = sizeof(CTFace), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "CoreText Font face", .tp_methods = methods, .tp_members = members, .tp_repr = (reprfunc)repr, }; int init_CoreText(PyObject *module) { if (PyType_Ready(&CTFace_Type) < 0) return 0; if (PyModule_AddObject(module, "CTFace", (PyObject *)&CTFace_Type) != 0) return 0; if (PyModule_AddFunctions(module, module_methods) != 0) return 0; if (Py_AtExit(finalize) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the CoreText at exit handler"); return false; } return 1; } // }}} kitty-0.15.0/kitty/cursor.c000066400000000000000000000242621356737523400156130ustar00rootroot00000000000000/* * cursor.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include static PyObject * new(PyTypeObject *type, PyObject UNUSED *args, PyObject UNUSED *kwds) { Cursor *self; self = (Cursor *)type->tp_alloc(type, 0); return (PyObject*) self; } static void dealloc(Cursor* self) { Py_TYPE(self)->tp_free((PyObject*)self); } #define EQ(x) (a->x == b->x) static int __eq__(Cursor *a, Cursor *b) { return EQ(bold) && EQ(italic) && EQ(strikethrough) && EQ(dim) && EQ(reverse) && EQ(decoration) && EQ(fg) && EQ(bg) && EQ(decoration_fg) && EQ(x) && EQ(y) && EQ(shape) && EQ(blink); } static const char* cursor_names[NUM_OF_CURSOR_SHAPES] = { "NO_SHAPE", "BLOCK", "BEAM", "UNDERLINE" }; #define BOOL(x) ((x) ? Py_True : Py_False) static PyObject * repr(Cursor *self) { return PyUnicode_FromFormat( "Cursor(x=%u, y=%u, shape=%s, blink=%R, fg=#%08x, bg=#%08x, bold=%R, italic=%R, reverse=%R, strikethrough=%R, dim=%R, decoration=%d, decoration_fg=#%08x)", self->x, self->y, (self->shape < NUM_OF_CURSOR_SHAPES ? cursor_names[self->shape] : "INVALID"), BOOL(self->blink), self->fg, self->bg, BOOL(self->bold), BOOL(self->italic), BOOL(self->reverse), BOOL(self->strikethrough), BOOL(self->dim), self->decoration, self->decoration_fg ); } void cursor_reset_display_attrs(Cursor *self) { self->bg = 0; self->fg = 0; self->decoration_fg = 0; self->decoration = 0; self->bold = false; self->italic = false; self->reverse = false; self->strikethrough = false; self->dim = false; } static inline void parse_color(unsigned int *params, unsigned int *i, unsigned int count, uint32_t *result) { unsigned int attr; uint8_t r, g, b; if (*i < count) { attr = params[(*i)++]; switch(attr) { case 5: if (*i < count) *result = (params[(*i)++] & 0xFF) << 8 | 1; break; case 2: \ if (*i < count - 2) { /* Ignore the first parameter in a four parameter RGB */ /* sequence (unused color space id), see https://github.com/kovidgoyal/kitty/issues/227 */ if (*i < count - 3) (*i)++; r = params[(*i)++] & 0xFF; g = params[(*i)++] & 0xFF; b = params[(*i)++] & 0xFF; *result = r << 24 | g << 16 | b << 8 | 2; } break; } } } void cursor_from_sgr(Cursor *self, unsigned int *params, unsigned int count) { #define SET_COLOR(which) { parse_color(params, &i, count, &self->which); } break; START_ALLOW_CASE_RANGE unsigned int i = 0, attr; if (!count) { params[0] = 0; count = 1; } while (i < count) { attr = params[i++]; switch(attr) { case 0: cursor_reset_display_attrs(self); break; case 1: self->bold = true; break; case 2: self->dim = true; break; case 3: self->italic = true; break; case 4: if (i < count) { self->decoration = MIN(3u, params[i]); i++; } else self->decoration = 1; break; case 7: self->reverse = true; break; case 9: self->strikethrough = true; break; case 21: self->decoration = 2; break; case 22: self->bold = false; self->dim = false; break; case 23: self->italic = false; break; case 24: self->decoration = 0; break; case 27: self->reverse = false; break; case 29: self->strikethrough = false; break; case 30 ... 37: self->fg = ((attr - 30) << 8) | 1; break; case 38: SET_COLOR(fg); case 39: self->fg = 0; break; case 40 ... 47: self->bg = ((attr - 40) << 8) | 1; break; case 48: SET_COLOR(bg); case 49: self->bg = 0; break; case 90 ... 97: self->fg = ((attr - 90 + 8) << 8) | 1; break; case 100 ... 107: self->bg = ((attr - 100 + 8) << 8) | 1; break; case DECORATION_FG_CODE: SET_COLOR(decoration_fg); case DECORATION_FG_CODE + 1: self->decoration_fg = 0; break; } } #undef SET_COLOR END_ALLOW_CASE_RANGE } void apply_sgr_to_cells(GPUCell *first_cell, unsigned int cell_count, unsigned int *params, unsigned int count) { #define RANGE for(unsigned c = 0; c < cell_count; c++, cell++) #define SET(shift) RANGE { cell->attrs |= (1 << shift); } break; #define RESET(shift) RANGE { cell->attrs &= ~(1 << shift); } break; #define RESET2(shift1, shift2) RANGE { cell->attrs &= ~((1 << shift1) | (1 << shift2)); } break; #define SETM(val, mask, shift) { RANGE { cell->attrs &= ~(mask << shift); cell->attrs |= ((val) << shift); } break; } #define SET_COLOR(which) { color_type color = 0; parse_color(params, &i, count, &color); if (color) { RANGE { cell->which = color; }} } break; #define SIMPLE(which, val) RANGE { cell->which = (val); } break; unsigned int i = 0, attr; if (!count) { params[0] = 0; count = 1; } while (i < count) { GPUCell *cell = first_cell; attr = params[i++]; switch(attr) { case 0: RANGE { cell->attrs &= WIDTH_MASK; cell->fg = 0; cell->bg = 0; cell->decoration_fg = 0; } break; case 1: SET(BOLD_SHIFT); case 2: SET(DIM_SHIFT); case 3: SET(ITALIC_SHIFT); case 4: if (i < count) { uint8_t val = MIN(3u, params[i]); i++; SETM(val, DECORATION_MASK, DECORATION_SHIFT); } else { SETM(1, DECORATION_MASK, DECORATION_SHIFT); } case 7: SET(REVERSE_SHIFT); case 9: SET(STRIKE_SHIFT); case 21: SETM(2, DECORATION_MASK, DECORATION_SHIFT); case 22: RESET2(DIM_SHIFT, BOLD_SHIFT); case 23: RESET(ITALIC_SHIFT); case 24: SETM(0, DECORATION_MASK, DECORATION_SHIFT); case 27: RESET(REVERSE_SHIFT); case 29: RESET(STRIKE_SHIFT); START_ALLOW_CASE_RANGE case 30 ... 37: SIMPLE(fg, ((attr - 30) << 8) | 1); case 38: SET_COLOR(fg); case 39: SIMPLE(fg, 0); case 40 ... 47: SIMPLE(bg, ((attr - 40) << 8) | 1); case 48: SET_COLOR(bg); case 49: SIMPLE(bg, 0); case 90 ... 97: SIMPLE(fg, ((attr - 90 + 8) << 8) | 1); case 100 ... 107: SIMPLE(bg, ((attr - 100 + 8) << 8) | 1); END_ALLOW_CASE_RANGE case DECORATION_FG_CODE: SET_COLOR(decoration_fg); case DECORATION_FG_CODE + 1: SIMPLE(decoration_fg, 0); } } #undef RESET #undef RESET2 #undef SET_COLOR #undef SET #undef SETM #undef RANGE } const char* cursor_as_sgr(const Cursor *self) { GPUCell blank_cell = { 0 }, cursor_cell = { .attrs = CURSOR_TO_ATTRS(self, 1), .fg = self->fg & COL_MASK, .bg = self->bg & COL_MASK, .decoration_fg = self->decoration_fg & COL_MASK, }; return cell_as_sgr(&cursor_cell, &blank_cell); } static PyObject * reset_display_attrs(Cursor *self, PyObject *a UNUSED) { #define reset_display_attrs_doc "Reset all display attributes to unset" cursor_reset_display_attrs(self); Py_RETURN_NONE; } void cursor_reset(Cursor *self) { cursor_reset_display_attrs(self); self->x = 0; self->y = 0; self->shape = NO_CURSOR_SHAPE; self->blink = false; } void cursor_copy_to(Cursor *src, Cursor *dest) { #define CCY(x) dest->x = src->x; CCY(x); CCY(y); CCY(shape); CCY(blink); CCY(bold); CCY(italic); CCY(strikethrough); CCY(dim); CCY(reverse); CCY(decoration); CCY(fg); CCY(bg); CCY(decoration_fg); } static PyObject* copy(Cursor *self, PyObject*); #define copy_doc "Create a clone of this cursor" // Boilerplate {{{ BOOL_GETSET(Cursor, bold) BOOL_GETSET(Cursor, italic) BOOL_GETSET(Cursor, reverse) BOOL_GETSET(Cursor, strikethrough) BOOL_GETSET(Cursor, dim) BOOL_GETSET(Cursor, blink) static PyMemberDef members[] = { {"x", T_UINT, offsetof(Cursor, x), 0, "x"}, {"y", T_UINT, offsetof(Cursor, y), 0, "y"}, {"shape", T_INT, offsetof(Cursor, shape), 0, "shape"}, {"decoration", T_UBYTE, offsetof(Cursor, decoration), 0, "decoration"}, {"fg", T_UINT, offsetof(Cursor, fg), 0, "fg"}, {"bg", T_UINT, offsetof(Cursor, bg), 0, "bg"}, {"decoration_fg", T_UINT, offsetof(Cursor, decoration_fg), 0, "decoration_fg"}, {NULL} /* Sentinel */ }; static PyGetSetDef getseters[] = { GETSET(bold) GETSET(italic) GETSET(reverse) GETSET(strikethrough) GETSET(dim) GETSET(blink) {NULL} /* Sentinel */ }; static PyMethodDef methods[] = { METHOD(copy, METH_NOARGS) METHOD(reset_display_attrs, METH_NOARGS) {NULL} /* Sentinel */ }; static PyObject * richcmp(PyObject *obj1, PyObject *obj2, int op); PyTypeObject Cursor_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.Cursor", .tp_basicsize = sizeof(Cursor), .tp_dealloc = (destructor)dealloc, .tp_repr = (reprfunc)repr, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "Cursors", .tp_richcompare = richcmp, .tp_methods = methods, .tp_members = members, .tp_getset = getseters, .tp_new = new, }; RICHCMP(Cursor) // }}} Cursor* cursor_copy(Cursor *self) { Cursor* ans; ans = alloc_cursor(); if (ans == NULL) { PyErr_NoMemory(); return NULL; } cursor_copy_to(self, ans); return ans; } static PyObject* copy(Cursor *self, PyObject *a UNUSED) { return (PyObject*)cursor_copy(self); } Cursor *alloc_cursor() { return (Cursor*)new(&Cursor_Type, NULL, NULL); } INIT_TYPE(Cursor) kitty-0.15.0/kitty/data-types.c000066400000000000000000000217101356737523400163440ustar00rootroot00000000000000/* * data-types.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #define MONOTONIC_START_MODULE #ifdef __APPLE__ // Needed for _CS_DARWIN_USER_CACHE_DIR #define _DARWIN_C_SOURCE #include #undef _DARWIN_C_SOURCE #endif #include "data-types.h" #include "control-codes.h" #include "modes.h" #include #include #include #include #include #ifdef WITH_PROFILER #include #endif #include "monotonic.h" #ifdef __APPLE__ #include static PyObject* user_cache_dir() { static char buf[1024]; if (!confstr(_CS_DARWIN_USER_CACHE_DIR, buf, sizeof(buf) - 1)) return PyErr_SetFromErrno(PyExc_OSError); return PyUnicode_FromString(buf); } static PyObject* process_group_map() { int num_of_processes = proc_listallpids(NULL, 0); size_t bufsize = sizeof(pid_t) * (num_of_processes + 1024); pid_t *buf = malloc(bufsize); if (!buf) return PyErr_NoMemory(); num_of_processes = proc_listallpids(buf, (int)bufsize); PyObject *ans = PyTuple_New(num_of_processes); if (ans == NULL) { free(buf); return PyErr_NoMemory(); } for (int i = 0; i < num_of_processes; i++) { long pid = buf[i], pgid = getpgid(buf[i]); PyObject *t = Py_BuildValue("ll", pid, pgid); if (t == NULL) { free(buf); Py_DECREF(ans); return NULL; } PyTuple_SET_ITEM(ans, i, t); } free(buf); return ans; } #endif static PyObject* redirect_std_streams(PyObject UNUSED *self, PyObject *args) { char *devnull = NULL; if (!PyArg_ParseTuple(args, "s", &devnull)) return NULL; if (freopen(devnull, "r", stdin) == NULL) return PyErr_SetFromErrno(PyExc_EnvironmentError); if (freopen(devnull, "w", stdout) == NULL) return PyErr_SetFromErrno(PyExc_EnvironmentError); if (freopen(devnull, "w", stderr) == NULL) return PyErr_SetFromErrno(PyExc_EnvironmentError); Py_RETURN_NONE; } static PyObject* pyset_iutf8(PyObject UNUSED *self, PyObject *args) { int fd, on; if (!PyArg_ParseTuple(args, "ip", &fd, &on)) return NULL; if (!set_iutf8(fd, on & 1)) return PyErr_SetFromErrno(PyExc_OSError); Py_RETURN_NONE; } #ifdef WITH_PROFILER static PyObject* start_profiler(PyObject UNUSED *self, PyObject *args) { char *path; if (!PyArg_ParseTuple(args, "s", &path)) return NULL; ProfilerStart(path); Py_RETURN_NONE; } static PyObject* stop_profiler(PyObject UNUSED *self, PyObject *args UNUSED) { ProfilerStop(); Py_RETURN_NONE; } #endif static inline bool put_tty_in_raw_mode(int fd, const struct termios* termios_p, bool read_with_timeout) { struct termios raw_termios = *termios_p; cfmakeraw(&raw_termios); if (read_with_timeout) { raw_termios.c_cc[VMIN] = 0; raw_termios.c_cc[VTIME] = 1; } else { raw_termios.c_cc[VMIN] = 1; raw_termios.c_cc[VTIME] = 0; } if (tcsetattr(fd, TCSAFLUSH, &raw_termios) != 0) { PyErr_SetFromErrno(PyExc_OSError); return false; } return true; } static PyObject* open_tty(PyObject *self UNUSED, PyObject *args) { int read_with_timeout = 0; if (!PyArg_ParseTuple(args, "|p", &read_with_timeout)) return NULL; int flags = O_RDWR | O_CLOEXEC | O_NOCTTY; if (!read_with_timeout) flags |= O_NONBLOCK; static char ctty[L_ctermid+1]; int fd = open(ctermid(ctty), flags); if (fd == -1) { PyErr_Format(PyExc_OSError, "Failed to open controlling terminal: %s (identified with ctermid()) with error: %s", ctty, strerror(errno)); return NULL; } struct termios *termios_p = calloc(1, sizeof(struct termios)); if (!termios_p) return PyErr_NoMemory(); if (tcgetattr(fd, termios_p) != 0) { free(termios_p); PyErr_SetFromErrno(PyExc_OSError); return NULL; } if (!put_tty_in_raw_mode(fd, termios_p, read_with_timeout != 0)) { free(termios_p); return NULL; } return Py_BuildValue("iN", fd, PyLong_FromVoidPtr(termios_p)); } #define TTY_ARGS \ PyObject *tp; int fd; \ if (!PyArg_ParseTuple(args, "iO!", &fd, &PyLong_Type, &tp)) return NULL; \ struct termios *termios_p = PyLong_AsVoidPtr(tp); static PyObject* normal_tty(PyObject *self UNUSED, PyObject *args) { TTY_ARGS if (tcsetattr(fd, TCSAFLUSH, termios_p) != 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } Py_RETURN_NONE; } static PyObject* raw_tty(PyObject *self UNUSED, PyObject *args) { TTY_ARGS if (!put_tty_in_raw_mode(fd, termios_p, false)) return NULL; Py_RETURN_NONE; } static PyObject* close_tty(PyObject *self UNUSED, PyObject *args) { TTY_ARGS tcsetattr(fd, TCSAFLUSH, termios_p); // deliberately ignore failure free(termios_p); safe_close(fd); Py_RETURN_NONE; } #undef TTY_ARGS static PyMethodDef module_methods[] = { {"open_tty", open_tty, METH_VARARGS, ""}, {"normal_tty", normal_tty, METH_VARARGS, ""}, {"raw_tty", raw_tty, METH_VARARGS, ""}, {"close_tty", close_tty, METH_VARARGS, ""}, {"set_iutf8_fd", (PyCFunction)pyset_iutf8, METH_VARARGS, ""}, {"thread_write", (PyCFunction)cm_thread_write, METH_VARARGS, ""}, {"parse_bytes", (PyCFunction)parse_bytes, METH_VARARGS, ""}, {"parse_bytes_dump", (PyCFunction)parse_bytes_dump, METH_VARARGS, ""}, {"redirect_std_streams", (PyCFunction)redirect_std_streams, METH_VARARGS, ""}, #ifdef __APPLE__ METHODB(user_cache_dir, METH_NOARGS), METHODB(process_group_map, METH_NOARGS), #endif #ifdef WITH_PROFILER {"start_profiler", (PyCFunction)start_profiler, METH_VARARGS, ""}, {"stop_profiler", (PyCFunction)stop_profiler, METH_NOARGS, ""}, #endif {NULL, NULL, 0, NULL} /* Sentinel */ }; static struct PyModuleDef module = { .m_base = PyModuleDef_HEAD_INIT, .m_name = "fast_data_types", /* name of module */ .m_doc = NULL, .m_size = -1, .m_methods = module_methods }; extern int init_LineBuf(PyObject *); extern int init_HistoryBuf(PyObject *); extern int init_Cursor(PyObject *); extern bool init_child_monitor(PyObject *); extern int init_Line(PyObject *); extern int init_ColorProfile(PyObject *); extern int init_Screen(PyObject *); extern bool init_fontconfig_library(PyObject*); extern bool init_desktop(PyObject*); extern bool init_fonts(PyObject*); extern bool init_glfw(PyObject *m); extern bool init_child(PyObject *m); extern bool init_state(PyObject *module); extern bool init_keys(PyObject *module); extern bool init_graphics(PyObject *module); extern bool init_shaders(PyObject *module); extern bool init_mouse(PyObject *module); extern bool init_kittens(PyObject *module); extern bool init_logging(PyObject *module); extern bool init_png_reader(PyObject *module); #ifdef __APPLE__ extern int init_CoreText(PyObject *); extern bool init_cocoa(PyObject *module); extern bool init_macos_process_info(PyObject *module); #else extern bool init_freetype_library(PyObject*); #endif EXPORTED PyMODINIT_FUNC PyInit_fast_data_types(void) { PyObject *m; m = PyModule_Create(&module); if (m == NULL) return NULL; init_monotonic(); if (m != NULL) { if (!init_logging(m)) return NULL; if (!init_LineBuf(m)) return NULL; if (!init_HistoryBuf(m)) return NULL; if (!init_Line(m)) return NULL; if (!init_Cursor(m)) return NULL; if (!init_child_monitor(m)) return NULL; if (!init_ColorProfile(m)) return NULL; if (!init_Screen(m)) return NULL; if (!init_glfw(m)) return NULL; if (!init_child(m)) return NULL; if (!init_state(m)) return NULL; if (!init_keys(m)) return NULL; if (!init_graphics(m)) return NULL; if (!init_shaders(m)) return NULL; if (!init_mouse(m)) return NULL; if (!init_kittens(m)) return NULL; if (!init_png_reader(m)) return NULL; #ifdef __APPLE__ if (!init_macos_process_info(m)) return NULL; if (!init_CoreText(m)) return NULL; if (!init_cocoa(m)) return NULL; #else if (!init_freetype_library(m)) return NULL; if (!init_fontconfig_library(m)) return NULL; if (!init_desktop(m)) return NULL; #endif if (!init_fonts(m)) return NULL; PyModule_AddIntConstant(m, "BOLD", BOLD_SHIFT); PyModule_AddIntConstant(m, "ITALIC", ITALIC_SHIFT); PyModule_AddIntConstant(m, "REVERSE", REVERSE_SHIFT); PyModule_AddIntConstant(m, "STRIKETHROUGH", STRIKE_SHIFT); PyModule_AddIntConstant(m, "DIM", DIM_SHIFT); PyModule_AddIntConstant(m, "DECORATION", DECORATION_SHIFT); PyModule_AddStringMacro(m, ERROR_PREFIX); #ifdef KITTY_VCS_REV PyModule_AddStringMacro(m, KITTY_VCS_REV); #endif PyModule_AddIntMacro(m, CURSOR_BLOCK); PyModule_AddIntMacro(m, CURSOR_BEAM); PyModule_AddIntMacro(m, CURSOR_UNDERLINE); PyModule_AddIntMacro(m, DECAWM); PyModule_AddIntMacro(m, DECCOLM); PyModule_AddIntMacro(m, DECOM); PyModule_AddIntMacro(m, IRM); PyModule_AddIntMacro(m, CSI); PyModule_AddIntMacro(m, DCS); PyModule_AddIntMacro(m, APC); PyModule_AddIntMacro(m, OSC); } return m; } kitty-0.15.0/kitty/data-types.h000066400000000000000000000265601356737523400163610ustar00rootroot00000000000000/* * data-types.h * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #define PY_SSIZE_T_CLEAN #include #include #include #include #include #include "glfw-wrapper.h" // Required minimum OpenGL version #define OPENGL_REQUIRED_VERSION_MAJOR 3 #define OPENGL_REQUIRED_VERSION_MINOR 3 #define GLFW_MOD_KITTY 1024 #define UNUSED __attribute__ ((unused)) #define PYNOARG PyObject *__a1 UNUSED, PyObject *__a2 UNUSED #define EXPORTED __attribute__ ((visibility ("default"))) #define LIKELY(x) __builtin_expect (!!(x), 1) #define UNLIKELY(x) __builtin_expect (!!(x), 0) #define MAX(x, y) __extension__ ({ \ __typeof__ (x) a = (x); __typeof__ (y) b = (y); \ a > b ? a : b;}) #define MIN(x, y) __extension__ ({ \ __typeof__ (x) a = (x); __typeof__ (y) b = (y); \ a < b ? a : b;}) #define xstr(s) str(s) #define str(s) #s #define arraysz(x) (sizeof(x)/sizeof(x[0])) #define zero_at_i(array, idx) memset((array) + (idx), 0, sizeof((array)[0])) #define zero_at_ptr(p) memset((p), 0, sizeof((p)[0])) #define zero_at_ptr_count(p, count) memset((p), 0, (count) * sizeof((p)[0])) void log_error(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); #define fatal(...) { log_error(__VA_ARGS__); exit(EXIT_FAILURE); } typedef unsigned long long id_type; typedef uint32_t char_type; typedef uint32_t color_type; typedef uint16_t combining_type; typedef uint32_t pixel; typedef unsigned int index_type; typedef uint16_t sprite_index; typedef uint16_t attrs_type; typedef uint8_t line_attrs_type; typedef enum CursorShapes { NO_CURSOR_SHAPE, CURSOR_BLOCK, CURSOR_BEAM, CURSOR_UNDERLINE, NUM_OF_CURSOR_SHAPES } CursorShape; typedef enum { DISABLE_LIGATURES_NEVER, DISABLE_LIGATURES_CURSOR, DISABLE_LIGATURES_ALWAYS } DisableLigature; #define ERROR_PREFIX "[PARSE ERROR]" typedef enum MouseTrackingModes { NO_TRACKING, BUTTON_MODE, MOTION_MODE, ANY_MODE } MouseTrackingMode; typedef enum MouseTrackingProtocols { NORMAL_PROTOCOL, UTF8_PROTOCOL, SGR_PROTOCOL, URXVT_PROTOCOL} MouseTrackingProtocol; typedef enum MouseShapes { BEAM, HAND, ARROW } MouseShape; typedef enum { NONE, MENUBAR, WINDOW, ALL } WindowTitleIn; #define MAX_CHILDREN 512 #define BLANK_CHAR 0 #define ATTRS_MASK_WITHOUT_WIDTH 0xFFC #define WIDTH_MASK 3 #define DECORATION_SHIFT 2 #define DECORATION_MASK 3 #define BOLD_SHIFT 4 #define ITALIC_SHIFT 5 #define BI_VAL(attrs) ((attrs >> 4) & 3) #define REVERSE_SHIFT 6 #define STRIKE_SHIFT 7 #define DIM_SHIFT 8 #define COL_MASK 0xFFFFFFFF #define UTF8_ACCEPT 0 #define UTF8_REJECT 1 #define DECORATION_FG_CODE 58 #define CHAR_IS_BLANK(ch) ((ch) == 32 || (ch) == 0) #define CONTINUED_MASK 1 #define TEXT_DIRTY_MASK 2 #define FG 1 #define BG 2 #define CURSOR_TO_ATTRS(c, w) \ ((w) | (((c->decoration & 3) << DECORATION_SHIFT) | ((c->bold & 1) << BOLD_SHIFT) | \ ((c->italic & 1) << ITALIC_SHIFT) | ((c->reverse & 1) << REVERSE_SHIFT) | \ ((c->strikethrough & 1) << STRIKE_SHIFT) | ((c->dim & 1) << DIM_SHIFT))) #define ATTRS_TO_CURSOR(a, c) \ (c)->decoration = (a >> DECORATION_SHIFT) & 3; (c)->bold = (a >> BOLD_SHIFT) & 1; (c)->italic = (a >> ITALIC_SHIFT) & 1; \ (c)->reverse = (a >> REVERSE_SHIFT) & 1; (c)->strikethrough = (a >> STRIKE_SHIFT) & 1; (c)->dim = (a >> DIM_SHIFT) & 1; #define COPY_CELL(src, s, dest, d) \ (dest)->cpu_cells[d] = (src)->cpu_cells[s]; (dest)->gpu_cells[d] = (src)->gpu_cells[s]; #define COPY_SELF_CELL(s, d) COPY_CELL(self, s, self, d) #define METHOD(name, arg_type) {#name, (PyCFunction)name, arg_type, name##_doc}, #define METHODB(name, arg_type) {#name, (PyCFunction)name, arg_type, ""} #define BOOL_GETSET(type, x) \ static PyObject* x##_get(type *self, void UNUSED *closure) { PyObject *ans = self->x ? Py_True : Py_False; Py_INCREF(ans); return ans; } \ static int x##_set(type *self, PyObject *value, void UNUSED *closure) { if (value == NULL) { PyErr_SetString(PyExc_TypeError, "Cannot delete attribute"); return -1; } self->x = PyObject_IsTrue(value) ? true : false; return 0; } #define GETSET(x) \ {#x, (getter) x##_get, (setter) x##_set, #x, NULL}, #ifndef EXTRA_INIT #define EXTRA_INIT #endif #define INIT_TYPE(type) \ int init_##type(PyObject *module) {\ if (PyType_Ready(&type##_Type) < 0) return 0; \ if (PyModule_AddObject(module, #type, (PyObject *)&type##_Type) != 0) return 0; \ Py_INCREF(&type##_Type); \ EXTRA_INIT; \ return 1; \ } #define RICHCMP(type) \ static PyObject * richcmp(PyObject *obj1, PyObject *obj2, int op) { \ PyObject *result = NULL; \ int eq; \ if (op != Py_EQ && op != Py_NE) { Py_RETURN_NOTIMPLEMENTED; } \ if (!PyObject_TypeCheck(obj1, &type##_Type)) { Py_RETURN_FALSE; } \ if (!PyObject_TypeCheck(obj2, &type##_Type)) { Py_RETURN_FALSE; } \ eq = __eq__((type*)obj1, (type*)obj2); \ if (op == Py_NE) result = eq ? Py_False : Py_True; \ else result = eq ? Py_True : Py_False; \ Py_INCREF(result); \ return result; \ } #ifdef __clang__ #define START_ALLOW_CASE_RANGE _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wpedantic\"") #define END_ALLOW_CASE_RANGE _Pragma("clang diagnostic pop") #define ALLOW_UNUSED_RESULT _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wunused-result\"") #define END_ALLOW_UNUSED_RESULT _Pragma("clang diagnostic pop") #else #define START_ALLOW_CASE_RANGE _Pragma("GCC diagnostic ignored \"-Wpedantic\"") #define END_ALLOW_CASE_RANGE _Pragma("GCC diagnostic pop") #define ALLOW_UNUSED_RESULT _Pragma("GCC diagnostic ignored \"-Wunused-result\"") #define END_ALLOW_UNUSED_RESULT _Pragma("GCC diagnostic pop") #endif typedef struct { uint32_t left, top, right, bottom; } Region; typedef struct { color_type fg, bg, decoration_fg; sprite_index sprite_x, sprite_y, sprite_z; attrs_type attrs; } GPUCell; typedef struct { char_type ch; combining_type cc_idx[2]; } CPUCell; typedef struct { PyObject_HEAD GPUCell *gpu_cells; CPUCell *cpu_cells; index_type xnum, ynum; bool continued, needs_free, has_dirty_text; } Line; typedef struct { PyObject_HEAD GPUCell *gpu_cell_buf; CPUCell *cpu_cell_buf; index_type xnum, ynum, *line_map, *scratch; line_attrs_type *line_attrs; Line *line; } LineBuf; typedef struct { GPUCell *gpu_cells; CPUCell *cpu_cells; line_attrs_type *line_attrs; } HistoryBufSegment; typedef struct { index_type bufsize, maxsz; Py_UCS4 *buffer; index_type start, end; index_type bufend; bool rewrap_needed; } PagerHistoryBuf; typedef struct { PyObject_HEAD index_type xnum, ynum, num_segments; HistoryBufSegment *segments; PagerHistoryBuf *pagerhist; Line *line; index_type start_of_data, count; } HistoryBuf; typedef struct { PyObject_HEAD bool bold, italic, reverse, strikethrough, blink, dim; unsigned int x, y; uint8_t decoration; CursorShape shape; color_type fg, bg, decoration_fg; } Cursor; typedef struct { bool is_visible, is_focused; CursorShape shape; unsigned int x, y; color_type color; } CursorRenderInfo; typedef struct { color_type default_fg, default_bg, cursor_color, cursor_text_color, cursor_text_uses_bg, highlight_fg, highlight_bg; } DynamicColor; typedef struct { PyObject_HEAD bool dirty; uint32_t color_table[256]; uint32_t orig_color_table[256]; DynamicColor dynamic_color_stack[10]; size_t dynamic_color_stack_idx; DynamicColor configured, overridden; } ColorProfile; typedef struct { unsigned int width, height; } CellPixelSize; typedef struct {int x;} *SPRITE_MAP_HANDLE; #define FONTS_DATA_HEAD SPRITE_MAP_HANDLE sprite_map; double logical_dpi_x, logical_dpi_y, font_sz_in_pts; unsigned int cell_width, cell_height; typedef struct {FONTS_DATA_HEAD} *FONTS_DATA_HANDLE; #define PARSER_BUF_SZ (8 * 1024) #define READ_BUF_SZ (1024*1024) #define clear_sprite_position(cell) (cell).sprite_x = 0; (cell).sprite_y = 0; (cell).sprite_z = 0; #define left_shift_line(line, at, num) { \ for(index_type __i__ = (at); __i__ < (line)->xnum - (num); __i__++) { \ COPY_CELL(line, __i__ + (num), line, __i__) \ } \ if ((((line)->gpu_cells[(at)].attrs) & WIDTH_MASK) != 1) { \ (line)->cpu_cells[(at)].ch = BLANK_CHAR; \ (line)->gpu_cells[(at)].attrs = BLANK_CHAR ? 1 : 0; \ clear_sprite_position((line)->gpu_cells[(at)]); \ }\ } #define ensure_space_for(base, array, type, num, capacity, initial_cap, zero_mem) \ if ((base)->capacity < num) { \ size_t _newcap = MAX((size_t)initial_cap, MAX(2 * (base)->capacity, (size_t)num)); \ (base)->array = realloc((base)->array, sizeof(type) * _newcap); \ if ((base)->array == NULL) fatal("Out of memory while ensuring space for %zu elements in array of %s", (size_t)num, #type); \ if (zero_mem) memset((base)->array + (base)->capacity, 0, sizeof(type) * (_newcap - (base)->capacity)); \ (base)->capacity = _newcap; \ } #define remove_i_from_array(array, i, count) { \ (count)--; \ if ((i) < (count)) { \ memmove((array) + (i), (array) + (i) + 1, sizeof((array)[0]) * ((count) - (i))); \ }} // Global functions const char* base64_decode(const uint32_t *src, size_t src_sz, uint8_t *dest, size_t dest_capacity, size_t *dest_sz); Line* alloc_line(void); Cursor* alloc_cursor(void); LineBuf* alloc_linebuf(unsigned int, unsigned int); HistoryBuf* alloc_historybuf(unsigned int, unsigned int, unsigned int); ColorProfile* alloc_color_profile(void); void copy_color_profile(ColorProfile*, ColorProfile*); PyObject* create_256_color_table(void); PyObject* parse_bytes_dump(PyObject UNUSED *, PyObject *); PyObject* parse_bytes(PyObject UNUSED *, PyObject *); void cursor_reset(Cursor*); Cursor* cursor_copy(Cursor*); void cursor_copy_to(Cursor *src, Cursor *dest); void cursor_reset_display_attrs(Cursor*); void cursor_from_sgr(Cursor *self, unsigned int *params, unsigned int count); void apply_sgr_to_cells(GPUCell *first_cell, unsigned int cell_count, unsigned int *params, unsigned int count); const char* cell_as_sgr(const GPUCell *, const GPUCell *); const char* cursor_as_sgr(const Cursor *); PyObject* cm_thread_write(PyObject *self, PyObject *args); bool schedule_write_to_child(unsigned long id, unsigned int num, ...); bool set_iutf8(int, bool); color_type colorprofile_to_color(ColorProfile *self, color_type entry, color_type defval); float cursor_text_as_bg(ColorProfile *self); void copy_color_table_to_buffer(ColorProfile *self, color_type *address, int offset, size_t stride); void colorprofile_push_dynamic_colors(ColorProfile*); void colorprofile_pop_dynamic_colors(ColorProfile*); void set_mouse_cursor(MouseShape); void enter_event(void); void mouse_event(int, int, int); void focus_in_event(void); void scroll_event(double, double, int); void fake_scroll(int, bool); void set_special_key_combo(int glfw_key, int mods, bool is_native); void on_key_input(GLFWkeyevent *ev); void request_window_attention(id_type, bool); #ifndef __APPLE__ void play_canberra_sound(const char *which_sound, const char *event_id); #endif SPRITE_MAP_HANDLE alloc_sprite_map(unsigned int, unsigned int); SPRITE_MAP_HANDLE free_sprite_map(SPRITE_MAP_HANDLE); static inline void safe_close(int fd) { while(close(fd) != 0 && errno == EINTR); } void log_event(const char *format, ...) __attribute__((format(printf, 1, 2))); kitty-0.15.0/kitty/desktop.c000066400000000000000000000135261356737523400157500ustar00rootroot00000000000000/* * desktop.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include #define FUNC(name, restype, ...) typedef restype (*name##_func)(__VA_ARGS__); static name##_func name = NULL #define LOAD_FUNC(handle, name) {\ *(void **) (&name) = dlsym(handle, #name); \ const char* error = dlerror(); \ if (error != NULL) { \ PyErr_Format(PyExc_OSError, "Failed to load the function %s with error: %s", #name, error); dlclose(handle); handle = NULL; return NULL; \ } \ } FUNC(sn_display_new, void*, void*, void*, void*); FUNC(sn_launchee_context_new_from_environment, void*, void*, int); FUNC(sn_launchee_context_new, void*, void*, int, const char*); FUNC(sn_display_unref, void, void*); FUNC(sn_launchee_context_setup_window, void, void*, int32_t); FUNC(sn_launchee_context_complete, void, void*); FUNC(sn_launchee_context_unref, void, void*); static void* libsn_handle = NULL; static PyObject* init_x11_startup_notification(PyObject UNUSED *self, PyObject *args) { static bool done = false; static const char* libname = "libstartup-notification-1.so"; // some installs are missing the .so symlink, so try the full name static const char* libname2 = "libstartup-notification-1.so.0"; static const char* libname3 = "libstartup-notification-1.so.0.0.0"; if (!done) { done = true; libsn_handle = dlopen(libname, RTLD_LAZY); if (libsn_handle == NULL) libsn_handle = dlopen(libname2, RTLD_LAZY); if (libsn_handle == NULL) libsn_handle = dlopen(libname3, RTLD_LAZY); if (libsn_handle == NULL) { PyErr_Format(PyExc_OSError, "Failed to load %s with error: %s", libname, dlerror()); return NULL; } dlerror(); /* Clear any existing error */ #define F(name) LOAD_FUNC(libsn_handle, name) F(sn_display_new); F(sn_launchee_context_new_from_environment); F(sn_launchee_context_new); F(sn_display_unref); F(sn_launchee_context_setup_window); F(sn_launchee_context_complete); F(sn_launchee_context_unref); #undef F } int window_id; PyObject *dp; char *startup_id = NULL; if (!PyArg_ParseTuple(args, "O!i|z", &PyLong_Type, &dp, &window_id, &startup_id)) return NULL; void* display = PyLong_AsVoidPtr(dp); void* sn_display = sn_display_new(display, NULL, NULL); if (!sn_display) { PyErr_SetString(PyExc_OSError, "Failed to create SnDisplay"); return NULL; } void *ctx = startup_id ? sn_launchee_context_new(sn_display, 0, startup_id) : sn_launchee_context_new_from_environment(sn_display, 0); sn_display_unref(sn_display); if (!ctx) { PyErr_SetString(PyExc_OSError, "Failed to create startup-notification context"); return NULL; } sn_launchee_context_setup_window(ctx, window_id); return PyLong_FromVoidPtr(ctx); } static PyObject* end_x11_startup_notification(PyObject UNUSED *self, PyObject *args) { if (!libsn_handle) Py_RETURN_NONE; PyObject *dp; if (!PyArg_ParseTuple(args, "O!", &PyLong_Type, &dp)) return NULL; void *ctx = PyLong_AsVoidPtr(dp); sn_launchee_context_complete(ctx); sn_launchee_context_unref(ctx); Py_RETURN_NONE; } static PyMethodDef module_methods[] = { METHODB(init_x11_startup_notification, METH_VARARGS), METHODB(end_x11_startup_notification, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; static void* libcanberra_handle = NULL; static void *canberra_ctx = NULL; FUNC(ca_context_create, int, void**); FUNC(ca_context_destroy, int, void*); typedef int (*ca_context_play_func)(void*, uint32_t, ...); static ca_context_play_func ca_context_play = NULL; static PyObject* load_libcanberra_functions(void) { LOAD_FUNC(libcanberra_handle, ca_context_create); LOAD_FUNC(libcanberra_handle, ca_context_play); LOAD_FUNC(libcanberra_handle, ca_context_destroy); return NULL; } static void load_libcanberra(void) { static const char* libname = "libcanberra.so"; // some installs are missing the .so symlink, so try the full name static const char* libname2 = "libcanberra.so.0"; static const char* libname3 = "libcanberra.so.0.2.5"; static bool done = false; if (done) return; done = true; libcanberra_handle = dlopen(libname, RTLD_LAZY); if (libcanberra_handle == NULL) libsn_handle = dlopen(libname2, RTLD_LAZY); if (libcanberra_handle == NULL) libsn_handle = dlopen(libname3, RTLD_LAZY); if (libcanberra_handle == NULL) { fprintf(stderr, "Failed to load %s, cannot play beep sound, with error: %s\n", libname, dlerror()); return; } load_libcanberra_functions(); if (PyErr_Occurred()) { PyErr_Print(); dlclose(libcanberra_handle); libcanberra_handle = NULL; } if (ca_context_create(&canberra_ctx) != 0) { fprintf(stderr, "Failed to create libcanberra context, cannot play beep sound\n"); ca_context_destroy(canberra_ctx); canberra_ctx = NULL; dlclose(libcanberra_handle); libcanberra_handle = NULL; } } void play_canberra_sound(const char *which_sound, const char *event_id) { load_libcanberra(); if (libcanberra_handle == NULL || canberra_ctx == NULL) return; ca_context_play( canberra_ctx, 0, "event.id", which_sound, "event.description", event_id, NULL ); } static void finalize(void) { if (libsn_handle) dlclose(libsn_handle); libsn_handle = NULL; if (canberra_ctx) ca_context_destroy(canberra_ctx); canberra_ctx = NULL; if (libcanberra_handle) dlclose(libcanberra_handle); } bool init_desktop(PyObject *m) { if (PyModule_AddFunctions(m, module_methods) != 0) return false; if (Py_AtExit(finalize) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the desktop.c at exit handler"); return false; } return true; } kitty-0.15.0/kitty/emoji.h000066400000000000000000000300631356737523400154020ustar00rootroot00000000000000// unicode data, built from the unicode standard on: 2019-10-01 // see gen-wcwidth.py #pragma once #include "data-types.h" START_ALLOW_CASE_RANGE static inline bool is_emoji(char_type code) { switch(code) { case 0x23: return true; case 0x2a: return true; case 0x30 ... 0x39: return true; case 0xa9: return true; case 0xae: return true; case 0x200d: return true; case 0x203c: return true; case 0x2049: return true; case 0x20e3: return true; case 0x2122: return true; case 0x2139: return true; case 0x2194 ... 0x2199: return true; case 0x21a9 ... 0x21aa: return true; case 0x231a ... 0x231b: return true; case 0x2328: return true; case 0x2388: return true; case 0x23cf: return true; case 0x23e9 ... 0x23f3: return true; case 0x23f8 ... 0x23fa: return true; case 0x24c2: return true; case 0x25aa ... 0x25ab: return true; case 0x25b6: return true; case 0x25c0: return true; case 0x25fb ... 0x25fe: return true; case 0x2600 ... 0x2605: return true; case 0x2607 ... 0x2612: return true; case 0x2614 ... 0x2685: return true; case 0x2690 ... 0x2705: return true; case 0x2708 ... 0x2712: return true; case 0x2714: return true; case 0x2716: return true; case 0x271d: return true; case 0x2721: return true; case 0x2728: return true; case 0x2733 ... 0x2734: return true; case 0x2744: return true; case 0x2747: return true; case 0x274c: return true; case 0x274e: return true; case 0x2753 ... 0x2755: return true; case 0x2757: return true; case 0x2763 ... 0x2767: return true; case 0x2795 ... 0x2797: return true; case 0x27a1: return true; case 0x27b0: return true; case 0x27bf: return true; case 0x2934 ... 0x2935: return true; case 0x2b05 ... 0x2b07: return true; case 0x2b1b ... 0x2b1c: return true; case 0x2b50: return true; case 0x2b55: return true; case 0x3030: return true; case 0x303d: return true; case 0x3297: return true; case 0x3299: return true; case 0xfe0f: return true; case 0x1f000 ... 0x1f0ff: return true; case 0x1f10d ... 0x1f10f: return true; case 0x1f12f: return true; case 0x1f16c ... 0x1f171: return true; case 0x1f17e ... 0x1f17f: return true; case 0x1f18e: return true; case 0x1f191 ... 0x1f19a: return true; case 0x1f1ad ... 0x1f1ff: return true; case 0x1f201 ... 0x1f20f: return true; case 0x1f21a: return true; case 0x1f22f: return true; case 0x1f232 ... 0x1f23a: return true; case 0x1f23c ... 0x1f23f: return true; case 0x1f249 ... 0x1f53d: return true; case 0x1f546 ... 0x1f64f: return true; case 0x1f680 ... 0x1f6ff: return true; case 0x1f774 ... 0x1f77f: return true; case 0x1f7d5 ... 0x1f7ff: return true; case 0x1f80c ... 0x1f80f: return true; case 0x1f848 ... 0x1f84f: return true; case 0x1f85a ... 0x1f85f: return true; case 0x1f888 ... 0x1f88f: return true; case 0x1f8ae ... 0x1f8ff: return true; case 0x1f90c ... 0x1f93a: return true; case 0x1f93c ... 0x1f945: return true; case 0x1f947 ... 0x1fffd: return true; case 0xe0020 ... 0xe007f: return true; default: return false; } return false; } static inline bool is_emoji_modifier(char_type code) { switch(code) { case 0x1f3fb ... 0x1f3ff: return true; default: return false; } return false; } static inline bool is_symbol(char_type code) { switch(code) { case 0x24: return true; case 0x2b: return true; case 0x3c ... 0x3e: return true; case 0x5e: return true; case 0x60: return true; case 0x7c: return true; case 0x7e: return true; case 0xa2 ... 0xa6: return true; case 0xa8 ... 0xa9: return true; case 0xac: return true; case 0xae ... 0xb1: return true; case 0xb4: return true; case 0xb8: return true; case 0xd7: return true; case 0xf7: return true; case 0x2c2 ... 0x2c5: return true; case 0x2d2 ... 0x2df: return true; case 0x2e5 ... 0x2eb: return true; case 0x2ed: return true; case 0x2ef ... 0x2ff: return true; case 0x375: return true; case 0x384 ... 0x385: return true; case 0x3f6: return true; case 0x482: return true; case 0x58d ... 0x58f: return true; case 0x606 ... 0x608: return true; case 0x60b: return true; case 0x60e ... 0x60f: return true; case 0x6de: return true; case 0x6e9: return true; case 0x6fd ... 0x6fe: return true; case 0x7f6: return true; case 0x7fe ... 0x7ff: return true; case 0x9f2 ... 0x9f3: return true; case 0x9fa ... 0x9fb: return true; case 0xaf1: return true; case 0xb70: return true; case 0xbf3 ... 0xbfa: return true; case 0xc7f: return true; case 0xd4f: return true; case 0xd79: return true; case 0xe3f: return true; case 0xf01 ... 0xf03: return true; case 0xf13: return true; case 0xf15 ... 0xf17: return true; case 0xf1a ... 0xf1f: return true; case 0xf34: return true; case 0xf36: return true; case 0xf38: return true; case 0xfbe ... 0xfc5: return true; case 0xfc7 ... 0xfcc: return true; case 0xfce ... 0xfcf: return true; case 0xfd5 ... 0xfd8: return true; case 0x109e ... 0x109f: return true; case 0x1390 ... 0x1399: return true; case 0x166d: return true; case 0x17db: return true; case 0x1940: return true; case 0x19de ... 0x19ff: return true; case 0x1b61 ... 0x1b6a: return true; case 0x1b74 ... 0x1b7c: return true; case 0x1fbd: return true; case 0x1fbf ... 0x1fc1: return true; case 0x1fcd ... 0x1fcf: return true; case 0x1fdd ... 0x1fdf: return true; case 0x1fed ... 0x1fef: return true; case 0x1ffd ... 0x1ffe: return true; case 0x2044: return true; case 0x2052: return true; case 0x207a ... 0x207c: return true; case 0x208a ... 0x208c: return true; case 0x20a0 ... 0x20bf: return true; case 0x2100 ... 0x2101: return true; case 0x2103 ... 0x2106: return true; case 0x2108 ... 0x2109: return true; case 0x2114: return true; case 0x2116 ... 0x2118: return true; case 0x211e ... 0x2123: return true; case 0x2125: return true; case 0x2127: return true; case 0x2129: return true; case 0x212e: return true; case 0x213a ... 0x213b: return true; case 0x2140 ... 0x2144: return true; case 0x214a ... 0x214d: return true; case 0x214f: return true; case 0x218a ... 0x218b: return true; case 0x2190 ... 0x2307: return true; case 0x230c ... 0x2328: return true; case 0x232b ... 0x2426: return true; case 0x2440 ... 0x244a: return true; case 0x249c ... 0x24e9: return true; case 0x2500 ... 0x2767: return true; case 0x2794 ... 0x27c4: return true; case 0x27c7 ... 0x27e5: return true; case 0x27f0 ... 0x2982: return true; case 0x2999 ... 0x29d7: return true; case 0x29dc ... 0x29fb: return true; case 0x29fe ... 0x2b73: return true; case 0x2b76 ... 0x2b95: return true; case 0x2b98 ... 0x2bff: return true; case 0x2ce5 ... 0x2cea: return true; case 0x2e80 ... 0x2e99: return true; case 0x2e9b ... 0x2ef3: return true; case 0x2f00 ... 0x2fd5: return true; case 0x2ff0 ... 0x2ffb: return true; case 0x3004: return true; case 0x3012 ... 0x3013: return true; case 0x3020: return true; case 0x3036 ... 0x3037: return true; case 0x303e ... 0x303f: return true; case 0x309b ... 0x309c: return true; case 0x3190 ... 0x3191: return true; case 0x3196 ... 0x319f: return true; case 0x31c0 ... 0x31e3: return true; case 0x3200 ... 0x321e: return true; case 0x322a ... 0x3247: return true; case 0x3250: return true; case 0x3260 ... 0x327f: return true; case 0x328a ... 0x32b0: return true; case 0x32c0 ... 0x33ff: return true; case 0x4dc0 ... 0x4dff: return true; case 0xa490 ... 0xa4c6: return true; case 0xa700 ... 0xa716: return true; case 0xa720 ... 0xa721: return true; case 0xa789 ... 0xa78a: return true; case 0xa828 ... 0xa82b: return true; case 0xa836 ... 0xa839: return true; case 0xaa77 ... 0xaa79: return true; case 0xab5b: return true; case 0xfb29: return true; case 0xfbb2 ... 0xfbc1: return true; case 0xfdfc ... 0xfdfd: return true; case 0xfe62: return true; case 0xfe64 ... 0xfe66: return true; case 0xfe69: return true; case 0xff04: return true; case 0xff0b: return true; case 0xff1c ... 0xff1e: return true; case 0xff3e: return true; case 0xff40: return true; case 0xff5c: return true; case 0xff5e: return true; case 0xffe0 ... 0xffe6: return true; case 0xffe8 ... 0xffee: return true; case 0xfffc ... 0xfffd: return true; case 0x10137 ... 0x1013f: return true; case 0x10179 ... 0x10189: return true; case 0x1018c ... 0x1018e: return true; case 0x10190 ... 0x1019b: return true; case 0x101a0: return true; case 0x101d0 ... 0x101fc: return true; case 0x10877 ... 0x10878: return true; case 0x10ac8: return true; case 0x1173f: return true; case 0x11fd5 ... 0x11ff1: return true; case 0x16b3c ... 0x16b3f: return true; case 0x16b45: return true; case 0x1bc9c: return true; case 0x1d000 ... 0x1d0f5: return true; case 0x1d100 ... 0x1d126: return true; case 0x1d129 ... 0x1d164: return true; case 0x1d16a ... 0x1d16c: return true; case 0x1d183 ... 0x1d184: return true; case 0x1d18c ... 0x1d1a9: return true; case 0x1d1ae ... 0x1d1e8: return true; case 0x1d200 ... 0x1d241: return true; case 0x1d245: return true; case 0x1d300 ... 0x1d356: return true; case 0x1d6c1: return true; case 0x1d6db: return true; case 0x1d6fb: return true; case 0x1d715: return true; case 0x1d735: return true; case 0x1d74f: return true; case 0x1d76f: return true; case 0x1d789: return true; case 0x1d7a9: return true; case 0x1d7c3: return true; case 0x1d800 ... 0x1d9ff: return true; case 0x1da37 ... 0x1da3a: return true; case 0x1da6d ... 0x1da74: return true; case 0x1da76 ... 0x1da83: return true; case 0x1da85 ... 0x1da86: return true; case 0x1e14f: return true; case 0x1e2ff: return true; case 0x1ecac: return true; case 0x1ecb0: return true; case 0x1ed2e: return true; case 0x1eef0 ... 0x1eef1: return true; case 0x1f000 ... 0x1f02b: return true; case 0x1f030 ... 0x1f093: return true; case 0x1f0a0 ... 0x1f0ae: return true; case 0x1f0b1 ... 0x1f0bf: return true; case 0x1f0c1 ... 0x1f0cf: return true; case 0x1f0d1 ... 0x1f0f5: return true; case 0x1f110 ... 0x1f16c: return true; case 0x1f170 ... 0x1f1ac: return true; case 0x1f1e6 ... 0x1f202: return true; case 0x1f210 ... 0x1f23b: return true; case 0x1f240 ... 0x1f248: return true; case 0x1f250 ... 0x1f251: return true; case 0x1f260 ... 0x1f265: return true; case 0x1f300 ... 0x1f6d5: return true; case 0x1f6e0 ... 0x1f6ec: return true; case 0x1f6f0 ... 0x1f6fa: return true; case 0x1f700 ... 0x1f773: return true; case 0x1f780 ... 0x1f7d8: return true; case 0x1f7e0 ... 0x1f7eb: return true; case 0x1f800 ... 0x1f80b: return true; case 0x1f810 ... 0x1f847: return true; case 0x1f850 ... 0x1f859: return true; case 0x1f860 ... 0x1f887: return true; case 0x1f890 ... 0x1f8ad: return true; case 0x1f900 ... 0x1f90b: return true; case 0x1f90d ... 0x1f971: return true; case 0x1f973 ... 0x1f976: return true; case 0x1f97a ... 0x1f9a2: return true; case 0x1f9a5 ... 0x1f9aa: return true; case 0x1f9ae ... 0x1f9ca: return true; case 0x1f9cd ... 0x1fa53: return true; case 0x1fa60 ... 0x1fa6d: return true; case 0x1fa70 ... 0x1fa73: return true; case 0x1fa78 ... 0x1fa7a: return true; case 0x1fa80 ... 0x1fa82: return true; case 0x1fa90 ... 0x1fa95: return true; default: return false; } return false; } END_ALLOW_CASE_RANGE kitty-0.15.0/kitty/fontconfig.c000066400000000000000000000225001356737523400164230ustar00rootroot00000000000000/* * fontconfig.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "lineops.h" #include "fonts.h" #include #include "emoji.h" #ifndef FC_COLOR #define FC_COLOR "color" #endif static inline PyObject* pybool(FcBool x) { PyObject *ans = x ? Py_True: Py_False; Py_INCREF(ans); return ans; } static inline PyObject* pyspacing(int val) { #define S(x) case FC_##x: return PyUnicode_FromString(#x) switch(val) { S(PROPORTIONAL); S(DUAL); S(MONO); S(CHARCELL); default: return PyUnicode_FromString("UNKNOWN"); } #undef S } static inline PyObject* pattern_as_dict(FcPattern *pat) { PyObject *ans = PyDict_New(); if (ans == NULL) return NULL; #define PS(x) PyUnicode_Decode((const char*)x, strlen((const char*)x), "UTF-8", "replace") #define G(type, get, which, conv, name) { \ type out; PyObject *p; \ if (get(pat, which, 0, &out) == FcResultMatch) { \ p = conv(out); if (p == NULL) { Py_CLEAR(ans); return NULL; } \ if (PyDict_SetItemString(ans, #name, p) != 0) { Py_CLEAR(p); Py_CLEAR(ans); return NULL; } \ Py_CLEAR(p); \ }} #define S(which, key) G(FcChar8*, FcPatternGetString, which, PS, key) #define I(which, key) G(int, FcPatternGetInteger, which, PyLong_FromLong, key) #define B(which, key) G(int, FcPatternGetBool, which, pybool, key) #define E(which, key, conv) G(int, FcPatternGetInteger, which, conv, key) S(FC_FILE, path); S(FC_FAMILY, family); S(FC_STYLE, style); S(FC_FULLNAME, full_name); S(FC_POSTSCRIPT_NAME, postscript_name); I(FC_WEIGHT, weight); I(FC_SLANT, slant); I(FC_HINT_STYLE, hint_style); I(FC_INDEX, index); I(FC_RGBA, subpixel); I(FC_LCD_FILTER, lcdfilter); B(FC_HINTING, hinting); B(FC_SCALABLE, scalable); B(FC_OUTLINE, outline); B(FC_COLOR, color); E(FC_SPACING, spacing, pyspacing); return ans; #undef PS #undef S #undef I #undef B #undef E #undef G } static inline PyObject* font_set(FcFontSet *fs) { PyObject *ans = PyTuple_New(fs->nfont); if (ans == NULL) return NULL; for (int i = 0; i < fs->nfont; i++) { PyObject *d = pattern_as_dict(fs->fonts[i]); if (d == NULL) { Py_CLEAR(ans); break; } PyTuple_SET_ITEM(ans, i, d); } return ans; } #define AP(func, which, in, desc) if (!func(pat, which, in)) { PyErr_Format(PyExc_ValueError, "Failed to add %s to fontconfig pattern", desc, NULL); goto end; } static PyObject* fc_list(PyObject UNUSED *self, PyObject *args) { int allow_bitmapped_fonts = 0, spacing = -1; PyObject *ans = NULL; FcObjectSet *os = NULL; FcPattern *pat = NULL; FcFontSet *fs = NULL; if (!PyArg_ParseTuple(args, "|ip", &spacing, &allow_bitmapped_fonts)) return NULL; pat = FcPatternCreate(); if (pat == NULL) return PyErr_NoMemory(); if (!allow_bitmapped_fonts) { AP(FcPatternAddBool, FC_OUTLINE, true, "outline"); AP(FcPatternAddBool, FC_SCALABLE, true, "scalable"); } if (spacing > -1) AP(FcPatternAddInteger, FC_SPACING, spacing, "spacing"); os = FcObjectSetBuild(FC_FILE, FC_POSTSCRIPT_NAME, FC_FAMILY, FC_STYLE, FC_FULLNAME, FC_WEIGHT, FC_WIDTH, FC_SLANT, FC_HINT_STYLE, FC_INDEX, FC_HINTING, FC_SCALABLE, FC_OUTLINE, FC_COLOR, FC_SPACING, NULL); if (!os) { PyErr_SetString(PyExc_ValueError, "Failed to create fontconfig object set"); goto end; } fs = FcFontList(NULL, pat, os); if (!fs) { PyErr_SetString(PyExc_ValueError, "Failed to create fontconfig font set"); goto end; } ans = font_set(fs); end: if (pat != NULL) FcPatternDestroy(pat); if (os != NULL) FcObjectSetDestroy(os); if (fs != NULL) FcFontSetDestroy(fs); return ans; } static inline PyObject* _fc_match(FcPattern *pat) { FcPattern *match = NULL; PyObject *ans = NULL; FcResult result; FcConfigSubstitute(NULL, pat, FcMatchPattern); FcDefaultSubstitute(pat); /* printf("fc_match = %s\n", FcNameUnparse(pat)); */ match = FcFontMatch(NULL, pat, &result); if (match == NULL) { PyErr_SetString(PyExc_KeyError, "FcFontMatch() failed"); goto end; } ans = pattern_as_dict(match); end: if (match) FcPatternDestroy(match); return ans; } static Py_UCS4 char_buf[1024]; static inline void add_charset(FcPattern *pat, size_t num) { FcCharSet *charset = NULL; if (num) { charset = FcCharSetCreate(); if (charset == NULL) { PyErr_NoMemory(); goto end; } for (size_t i = 0; i < num; i++) { if (!FcCharSetAddChar(charset, char_buf[i])) { PyErr_SetString(PyExc_RuntimeError, "Failed to add character to fontconfig charset"); goto end; } } AP(FcPatternAddCharSet, FC_CHARSET, charset, "charset"); } end: if (charset != NULL) FcCharSetDestroy(charset); } static PyObject* fc_match(PyObject UNUSED *self, PyObject *args) { char *family = NULL; int bold = 0, italic = 0, allow_bitmapped_fonts = 0, spacing = FC_MONO; double size_in_pts = 0, dpi = 0; FcPattern *pat = NULL; PyObject *ans = NULL; if (!PyArg_ParseTuple(args, "|zppppdd", &family, &bold, &italic, &spacing, &allow_bitmapped_fonts, &size_in_pts, &dpi)) return NULL; pat = FcPatternCreate(); if (pat == NULL) return PyErr_NoMemory(); if (family && strlen(family) > 0) AP(FcPatternAddString, FC_FAMILY, (const FcChar8*)family, "family"); if (spacing >= FC_DUAL) { // pass the family,monospace as the family parameter to fc-match, // which will fallback to using monospace if the family does not match. AP(FcPatternAddString, FC_FAMILY, (const FcChar8*)"monospace", "family"); AP(FcPatternAddInteger, FC_SPACING, spacing, "spacing"); } if (!allow_bitmapped_fonts) { AP(FcPatternAddBool, FC_OUTLINE, true, "outline"); AP(FcPatternAddBool, FC_SCALABLE, true, "scalable"); } if (size_in_pts > 0) { AP(FcPatternAddDouble, FC_SIZE, size_in_pts, "size"); } if (dpi > 0) { AP(FcPatternAddDouble, FC_DPI, dpi, "dpi"); } if (bold) { AP(FcPatternAddInteger, FC_WEIGHT, FC_WEIGHT_BOLD, "weight"); } if (italic) { AP(FcPatternAddInteger, FC_SLANT, FC_SLANT_ITALIC, "slant"); } ans = _fc_match(pat); end: if (pat != NULL) FcPatternDestroy(pat); return ans; } PyObject* specialize_font_descriptor(PyObject *base_descriptor, FONTS_DATA_HANDLE fg) { PyObject *p = PyDict_GetItemString(base_descriptor, "path"), *ans = NULL; PyObject *idx = PyDict_GetItemString(base_descriptor, "index"); if (p == NULL) { PyErr_SetString(PyExc_ValueError, "Base descriptor has no path"); return NULL; } if (idx == NULL) { PyErr_SetString(PyExc_ValueError, "Base descriptor has no index"); return NULL; } FcPattern *pat = FcPatternCreate(); if (pat == NULL) return PyErr_NoMemory(); long face_idx = MAX(0, PyLong_AsLong(idx)); AP(FcPatternAddString, FC_FILE, (const FcChar8*)PyUnicode_AsUTF8(p), "path"); AP(FcPatternAddInteger, FC_INDEX, face_idx, "index"); AP(FcPatternAddDouble, FC_SIZE, fg->font_sz_in_pts, "size"); AP(FcPatternAddDouble, FC_DPI, (fg->logical_dpi_x + fg->logical_dpi_y) / 2.0, "dpi"); ans = _fc_match(pat); if (face_idx > 0) { // For some reason FcFontMatch sets the index to zero, so manually restore it. PyDict_SetItemString(ans, "index", idx); } end: if (pat != NULL) FcPatternDestroy(pat); return ans; } PyObject* create_fallback_face(PyObject UNUSED *base_face, CPUCell* cell, bool bold, bool italic, bool emoji_presentation, FONTS_DATA_HANDLE fg) { PyObject *ans = NULL; FcPattern *pat = FcPatternCreate(); if (pat == NULL) return PyErr_NoMemory(); AP(FcPatternAddString, FC_FAMILY, (const FcChar8*)(emoji_presentation ? "emoji" : "monospace"), "family"); if (!emoji_presentation && bold) { AP(FcPatternAddInteger, FC_WEIGHT, FC_WEIGHT_BOLD, "weight"); } if (!emoji_presentation && italic) { AP(FcPatternAddInteger, FC_SLANT, FC_SLANT_ITALIC, "slant"); } if (emoji_presentation) { AP(FcPatternAddBool, FC_COLOR, true, "color"); } size_t num = cell_as_unicode_for_fallback(cell, char_buf); add_charset(pat, num); PyObject *d = _fc_match(pat); if (d) { ans = face_from_descriptor(d, fg); Py_CLEAR(d); } end: if (pat != NULL) FcPatternDestroy(pat); return ans; } #undef AP static PyMethodDef module_methods[] = { METHODB(fc_list, METH_VARARGS), METHODB(fc_match, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_fontconfig_library(PyObject *module) { if (!FcInit()) { PyErr_SetString(PyExc_RuntimeError, "Failed to initialize the fontconfig library"); return false; } if (Py_AtExit(FcFini) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the fontconfig library at exit handler"); return false; } if (PyModule_AddFunctions(module, module_methods) != 0) return false; PyModule_AddIntMacro(module, FC_WEIGHT_REGULAR); PyModule_AddIntMacro(module, FC_WEIGHT_MEDIUM); PyModule_AddIntMacro(module, FC_WEIGHT_SEMIBOLD); PyModule_AddIntMacro(module, FC_WEIGHT_BOLD); PyModule_AddIntMacro(module, FC_SLANT_ITALIC); PyModule_AddIntMacro(module, FC_SLANT_ROMAN); PyModule_AddIntMacro(module, FC_PROPORTIONAL); PyModule_AddIntMacro(module, FC_DUAL); PyModule_AddIntMacro(module, FC_MONO); PyModule_AddIntMacro(module, FC_CHARCELL); return true; } kitty-0.15.0/kitty/fonts.c000066400000000000000000001707131356737523400154320ustar00rootroot00000000000000/* * vim:fileencoding=utf-8 * fonts.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "fonts.h" #include "state.h" #include "emoji.h" #include "unicode-data.h" #define MISSING_GLYPH 4 #define MAX_NUM_EXTRA_GLYPHS 8u #define CELLS_IN_CANVAS ((MAX_NUM_EXTRA_GLYPHS + 1u) * 3u) #define MAX_NUM_EXTRA_GLYPHS_PUA 4u typedef void (*send_sprite_to_gpu_func)(FONTS_DATA_HANDLE fg, unsigned int, unsigned int, unsigned int, pixel*); send_sprite_to_gpu_func current_send_sprite_to_gpu = NULL; static PyObject *python_send_to_gpu_impl = NULL; extern PyTypeObject Line_Type; typedef struct SpecialGlyphCache SpecialGlyphCache; enum {NO_FONT=-3, MISSING_FONT=-2, BLANK_FONT=-1, BOX_FONT=0}; typedef struct { glyph_index data[MAX_NUM_EXTRA_GLYPHS]; } ExtraGlyphs; typedef struct SpritePosition SpritePosition; struct SpritePosition { SpritePosition *next; bool filled, rendered, colored; sprite_index x, y, z; uint8_t ligature_index; glyph_index glyph; ExtraGlyphs extra_glyphs; }; #define SPECIAL_FILLED_MASK 1 #define SPECIAL_VALUE_MASK 2 #define EMPTY_FILLED_MASK 4 #define EMPTY_VALUE_MASK 8 #define SPECIAL_GLYPH_CACHE_SIZE 1024 struct SpecialGlyphCache { SpecialGlyphCache *next; glyph_index glyph; uint8_t data; }; typedef struct { size_t max_y; unsigned int x, y, z, xnum, ynum; } GPUSpriteTracker; static hb_buffer_t *harfbuzz_buffer = NULL; static hb_feature_t hb_features[3] = {{0}}; static char_type shape_buffer[4096] = {0}; static size_t max_texture_size = 1024, max_array_len = 1024; typedef enum { LIGA_FEATURE, DLIG_FEATURE, CALT_FEATURE } HBFeature; typedef struct { char_type left, right; size_t font_idx; } SymbolMap; static SymbolMap *symbol_maps = NULL; static size_t num_symbol_maps = 0; typedef struct { PyObject *face; // Map glyphs to sprite map co-ords SpritePosition sprite_map[1024]; hb_feature_t hb_features[8]; size_t num_hb_features; SpecialGlyphCache special_glyph_cache[SPECIAL_GLYPH_CACHE_SIZE]; bool bold, italic, emoji_presentation; } Font; typedef struct { FONTS_DATA_HEAD id_type id; unsigned int baseline, underline_position, underline_thickness; size_t fonts_capacity, fonts_count, fallback_fonts_count; ssize_t medium_font_idx, bold_font_idx, italic_font_idx, bi_font_idx, first_symbol_font_idx, first_fallback_font_idx; Font *fonts; pixel *canvas; GPUSpriteTracker sprite_tracker; } FontGroup; static FontGroup* font_groups = NULL; static size_t font_groups_capacity = 0; static size_t num_font_groups = 0; static id_type font_group_id_counter = 0; static void initialize_font_group(FontGroup *fg); static inline void save_window_font_groups(void) { for (size_t o = 0; o < global_state.num_os_windows; o++) { OSWindow *w = global_state.os_windows + o; w->temp_font_group_id = w->fonts_data ? ((FontGroup*)(w->fonts_data))->id : 0; } } static inline void restore_window_font_groups(void) { for (size_t o = 0; o < global_state.num_os_windows; o++) { OSWindow *w = global_state.os_windows + o; w->fonts_data = NULL; for (size_t i = 0; i < num_font_groups; i++) { if (font_groups[i].id == w->temp_font_group_id) { w->fonts_data = (FONTS_DATA_HANDLE)(font_groups + i); break; } } } } static inline bool font_group_is_unused(FontGroup *fg) { for (size_t o = 0; o < global_state.num_os_windows; o++) { OSWindow *w = global_state.os_windows + o; if (w->temp_font_group_id == fg->id) return false; } return true; } static inline void trim_unused_font_groups(void) { save_window_font_groups(); size_t i = 0; while (i < num_font_groups) { if (font_group_is_unused(font_groups + i)) { size_t num_to_right = (--num_font_groups) - i; if (!num_to_right) break; memmove(font_groups + i, font_groups + 1 + i, num_to_right * sizeof(FontGroup)); } else i++; } restore_window_font_groups(); } static inline void add_font_group(void) { if (num_font_groups) trim_unused_font_groups(); if (num_font_groups >= font_groups_capacity) { save_window_font_groups(); font_groups_capacity += 5; font_groups = realloc(font_groups, sizeof(FontGroup) * font_groups_capacity); if (font_groups == NULL) fatal("Out of memory creating a new font group"); restore_window_font_groups(); } num_font_groups++; } static inline FontGroup* font_group_for(double font_sz_in_pts, double logical_dpi_x, double logical_dpi_y) { for (size_t i = 0; i < num_font_groups; i++) { FontGroup *fg = font_groups + i; if (fg->font_sz_in_pts == font_sz_in_pts && fg->logical_dpi_x == logical_dpi_x && fg->logical_dpi_y == logical_dpi_y) return fg; } add_font_group(); FontGroup *fg = font_groups + num_font_groups - 1; zero_at_ptr(fg); fg->font_sz_in_pts = font_sz_in_pts; fg->logical_dpi_x = logical_dpi_x; fg->logical_dpi_y = logical_dpi_y; fg->id = ++font_group_id_counter; initialize_font_group(fg); return fg; } static inline void clear_canvas(FontGroup *fg) { if (fg->canvas) memset(fg->canvas, 0, CELLS_IN_CANVAS * fg->cell_width * fg->cell_height * sizeof(pixel)); } // Sprites {{{ static inline void sprite_map_set_error(int error) { switch(error) { case 1: PyErr_NoMemory(); break; case 2: PyErr_SetString(PyExc_RuntimeError, "Out of texture space for sprites"); break; default: PyErr_SetString(PyExc_RuntimeError, "Unknown error occurred while allocating sprites"); break; } } void sprite_tracker_set_limits(size_t max_texture_size_, size_t max_array_len_) { max_texture_size = max_texture_size_; max_array_len = MIN(0xfffu, max_array_len_); } static inline void do_increment(FontGroup *fg, int *error) { fg->sprite_tracker.x++; if (fg->sprite_tracker.x >= fg->sprite_tracker.xnum) { fg->sprite_tracker.x = 0; fg->sprite_tracker.y++; fg->sprite_tracker.ynum = MIN(MAX(fg->sprite_tracker.ynum, fg->sprite_tracker.y + 1), fg->sprite_tracker.max_y); if (fg->sprite_tracker.y >= fg->sprite_tracker.max_y) { fg->sprite_tracker.y = 0; fg->sprite_tracker.z++; if (fg->sprite_tracker.z >= MIN((size_t)UINT16_MAX, max_array_len)) *error = 2; } } } static inline bool extra_glyphs_equal(ExtraGlyphs *a, ExtraGlyphs *b) { for (size_t i = 0; i < MAX_NUM_EXTRA_GLYPHS; i++) { if (a->data[i] != b->data[i]) return false; if (a->data[i] == 0) return true; } return true; } static SpritePosition* sprite_position_for(FontGroup *fg, Font *font, glyph_index glyph, ExtraGlyphs *extra_glyphs, uint8_t ligature_index, int *error) { glyph_index idx = glyph & (SPECIAL_GLYPH_CACHE_SIZE - 1); SpritePosition *s = font->sprite_map + idx; // Optimize for the common case of glyph under 1024 already in the cache if (LIKELY(s->glyph == glyph && s->filled && extra_glyphs_equal(&s->extra_glyphs, extra_glyphs) && s->ligature_index == ligature_index)) return s; // Cache hit while(true) { if (s->filled) { if (s->glyph == glyph && extra_glyphs_equal(&s->extra_glyphs, extra_glyphs) && s->ligature_index == ligature_index) return s; // Cache hit } else { break; } if (!s->next) { s->next = calloc(1, sizeof(SpritePosition)); if (s->next == NULL) { *error = 1; return NULL; } } s = s->next; } s->glyph = glyph; memcpy(&s->extra_glyphs, extra_glyphs, sizeof(ExtraGlyphs)); s->ligature_index = ligature_index; s->filled = true; s->rendered = false; s->colored = false; s->x = fg->sprite_tracker.x; s->y = fg->sprite_tracker.y; s->z = fg->sprite_tracker.z; do_increment(fg, error); return s; } static inline SpecialGlyphCache* special_glyph_cache_for(Font *font, glyph_index glyph, uint8_t filled_mask) { SpecialGlyphCache *s = font->special_glyph_cache + (glyph & 0x3ff); // Optimize for the common case of glyph under SPECIAL_GLYPH_CACHE_SIZE already in the cache if (LIKELY(s->glyph == glyph && s->data & filled_mask)) return s; // Cache hit while(true) { if (s->data & filled_mask) { if (s->glyph == glyph) return s; // Cache hit } else { if (!s->glyph) break; // Empty cache slot else if (s->glyph == glyph) return s; // Cache slot that contains other data than the data indicated by filled_mask } if (!s->next) { s->next = calloc(1, sizeof(SpecialGlyphCache)); if (s->next == NULL) return NULL; } s = s->next; } s->glyph = glyph; return s; } void sprite_tracker_current_layout(FONTS_DATA_HANDLE data, unsigned int *x, unsigned int *y, unsigned int *z) { FontGroup *fg = (FontGroup*)data; *x = fg->sprite_tracker.xnum; *y = fg->sprite_tracker.ynum; *z = fg->sprite_tracker.z; } void free_maps(Font *font) { #define free_a_map(type, attr) {\ type *s, *t; \ for (size_t i = 0; i < sizeof(font->attr)/sizeof(font->attr[0]); i++) { \ s = font->attr[i].next; \ while (s) { \ t = s; \ s = s->next; \ free(t); \ } \ }\ memset(font->attr, 0, sizeof(font->attr)); \ } free_a_map(SpritePosition, sprite_map); free_a_map(SpecialGlyphCache, special_glyph_cache); #undef free_a_map } void clear_sprite_map(Font *font) { #define CLEAR(s) s->filled = false; s->rendered = false; s->colored = false; s->glyph = 0; zero_at_ptr(&s->extra_glyphs); s->x = 0; s->y = 0; s->z = 0; s->ligature_index = 0; SpritePosition *s; for (size_t i = 0; i < sizeof(font->sprite_map)/sizeof(font->sprite_map[0]); i++) { s = font->sprite_map + i; CLEAR(s); while ((s = s->next)) { CLEAR(s); } } #undef CLEAR } void clear_special_glyph_cache(Font *font) { #define CLEAR(s) s->data = 0; s->glyph = 0; SpecialGlyphCache *s; for (size_t i = 0; i < sizeof(font->special_glyph_cache)/sizeof(font->special_glyph_cache[0]); i++) { s = font->special_glyph_cache + i; CLEAR(s); while ((s = s->next)) { CLEAR(s); } } #undef CLEAR } static void sprite_tracker_set_layout(GPUSpriteTracker *sprite_tracker, unsigned int cell_width, unsigned int cell_height) { sprite_tracker->xnum = MIN(MAX(1u, max_texture_size / cell_width), (size_t)UINT16_MAX); sprite_tracker->max_y = MIN(MAX(1u, max_texture_size / cell_height), (size_t)UINT16_MAX); sprite_tracker->ynum = 1; sprite_tracker->x = 0; sprite_tracker->y = 0; sprite_tracker->z = 0; } // }}} static inline PyObject* desc_to_face(PyObject *desc, FONTS_DATA_HANDLE fg) { PyObject *d = specialize_font_descriptor(desc, fg); if (d == NULL) return NULL; PyObject *ans = face_from_descriptor(d, fg); Py_DECREF(d); return ans; } static inline void copy_hb_feature(Font *f, HBFeature which) { memcpy(f->hb_features + f->num_hb_features++, hb_features + which, sizeof(hb_features[0])); } static inline bool init_font(Font *f, PyObject *face, bool bold, bool italic, bool emoji_presentation) { f->face = face; Py_INCREF(f->face); f->bold = bold; f->italic = italic; f->emoji_presentation = emoji_presentation; f->num_hb_features = 0; const char *psname = postscript_name_for_face(face); if (strstr(psname, "NimbusMonoPS-") == psname) { copy_hb_feature(f, LIGA_FEATURE); copy_hb_feature(f, DLIG_FEATURE); } copy_hb_feature(f, CALT_FEATURE); return true; } static inline void del_font(Font *f) { Py_CLEAR(f->face); free_maps(f); f->bold = false; f->italic = false; } static inline void del_font_group(FontGroup *fg) { free(fg->canvas); fg->canvas = NULL; fg->sprite_map = free_sprite_map(fg->sprite_map); for (size_t i = 0; i < fg->fonts_count; i++) del_font(fg->fonts + i); free(fg->fonts); fg->fonts = NULL; } static inline void free_font_groups(void) { if (font_groups) { for (size_t i = 0; i < num_font_groups; i++) del_font_group(font_groups + i); free(font_groups); font_groups = NULL; font_groups_capacity = 0; num_font_groups = 0; } } static void python_send_to_gpu(FONTS_DATA_HANDLE fg, unsigned int x, unsigned int y, unsigned int z, pixel* buf) { if (python_send_to_gpu_impl) { if (!num_font_groups) fatal("Cannot call send to gpu with no font groups"); PyObject *ret = PyObject_CallFunction(python_send_to_gpu_impl, "IIIN", x, y, z, PyBytes_FromStringAndSize((const char*)buf, sizeof(pixel) * fg->cell_width * fg->cell_height)); if (ret == NULL) PyErr_Print(); else Py_DECREF(ret); } } static inline void calc_cell_metrics(FontGroup *fg) { unsigned int cell_height, cell_width, baseline, underline_position, underline_thickness; cell_metrics(fg->fonts[fg->medium_font_idx].face, &cell_width, &cell_height, &baseline, &underline_position, &underline_thickness); if (!cell_width) fatal("Failed to calculate cell width for the specified font"); unsigned int before_cell_height = cell_height; int cw = cell_width, ch = cell_height; if (OPT(adjust_line_height_px) != 0) ch += OPT(adjust_line_height_px); if (OPT(adjust_line_height_frac) != 0.f) ch = (int)(ch * OPT(adjust_line_height_frac)); if (OPT(adjust_column_width_px != 0)) cw += OPT(adjust_column_width_px); if (OPT(adjust_column_width_frac) != 0.f) cw = (int)(cw * OPT(adjust_column_width_frac)); #define MAX_DIM 1000 #define MIN_WIDTH 2 #define MIN_HEIGHT 4 if (cw >= MIN_WIDTH && cw <= MAX_DIM) cell_width = cw; else log_error("Cell width invalid after adjustment, ignoring adjust_column_width"); if (ch >= MIN_HEIGHT && ch <= MAX_DIM) cell_height = ch; else log_error("Cell height invalid after adjustment, ignoring adjust_line_height"); int line_height_adjustment = cell_height - before_cell_height; if (cell_height < MIN_HEIGHT) fatal("Line height too small: %u", cell_height); if (cell_height > MAX_DIM) fatal("Line height too large: %u", cell_height); if (cell_width < MIN_WIDTH) fatal("Cell width too small: %u", cell_width); if (cell_width > MAX_DIM) fatal("Cell width too large: %u", cell_width); #undef MIN_WIDTH #undef MIN_HEIGHT #undef MAX_DIM underline_position = MIN(cell_height - 1, underline_position); // ensure there is at least a couple of pixels available to render styled underlines while (underline_position > baseline + 1 && cell_height - underline_position < 2) underline_position--; if (line_height_adjustment > 1) { baseline += MIN(cell_height - 1, (unsigned)line_height_adjustment / 2); underline_position += MIN(cell_height - 1, (unsigned)line_height_adjustment / 2); } sprite_tracker_set_layout(&fg->sprite_tracker, cell_width, cell_height); fg->cell_width = cell_width; fg->cell_height = cell_height; fg->baseline = baseline; fg->underline_position = underline_position; fg->underline_thickness = underline_thickness; free(fg->canvas); fg->canvas = calloc(CELLS_IN_CANVAS * fg->cell_width * fg->cell_height, sizeof(pixel)); if (!fg->canvas) fatal("Out of memory allocating canvas for font group"); } static inline bool face_has_codepoint(PyObject* face, char_type cp) { return glyph_id_for_codepoint(face, cp) > 0; } static inline bool has_emoji_presentation(CPUCell *cpu_cell, GPUCell *gpu_cell) { return (gpu_cell->attrs & WIDTH_MASK) == 2 && is_emoji(cpu_cell->ch) && cpu_cell->cc_idx[0] != VS15; } static inline bool has_cell_text(Font *self, CPUCell *cell) { if (!face_has_codepoint(self->face, cell->ch)) return false; for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) { combining_type cc_idx = cell->cc_idx[i]; if (cc_idx == VS15 || cc_idx == VS16) continue; if (!face_has_codepoint(self->face, codepoint_for_mark(cc_idx))) return false; } return true; } static inline void output_cell_fallback_data(CPUCell *cell, bool bold, bool italic, bool emoji_presentation, PyObject *face, bool new_face) { printf("U+%x ", cell->ch); for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) { printf("U+%x ", codepoint_for_mark(cell->cc_idx[i])); } if (bold) printf("bold "); if (italic) printf("italic "); if (emoji_presentation) printf("emoji_presentation "); PyObject_Print(face, stdout, 0); if (new_face) printf(" (new face)"); printf("\n"); } static inline ssize_t load_fallback_font(FontGroup *fg, CPUCell *cell, bool bold, bool italic, bool emoji_presentation) { if (fg->fallback_fonts_count > 100) { log_error("Too many fallback fonts"); return MISSING_FONT; } ssize_t f; if (bold) f = fg->italic_font_idx > 0 ? fg->bi_font_idx : fg->bold_font_idx; else f = italic ? fg->italic_font_idx : fg->medium_font_idx; if (f < 0) f = fg->medium_font_idx; PyObject *face = create_fallback_face(fg->fonts[f].face, cell, bold, italic, emoji_presentation, (FONTS_DATA_HANDLE)fg); if (face == NULL) { PyErr_Print(); return MISSING_FONT; } if (face == Py_None) { Py_DECREF(face); return MISSING_FONT; } if (global_state.debug_font_fallback) output_cell_fallback_data(cell, bold, italic, emoji_presentation, face, true); set_size_for_face(face, fg->cell_height, true, (FONTS_DATA_HANDLE)fg); ensure_space_for(fg, fonts, Font, fg->fonts_count + 1, fonts_capacity, 5, true); ssize_t ans = fg->first_fallback_font_idx + fg->fallback_fonts_count; Font *af = &fg->fonts[ans]; if (!init_font(af, face, bold, italic, emoji_presentation)) fatal("Out of memory"); Py_DECREF(face); if (!has_cell_text(af, cell)) { if (global_state.debug_font_fallback) { printf("The font chosen by the OS for the text: "); printf("U+%x ", cell->ch); for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) { printf("U+%x ", codepoint_for_mark(cell->cc_idx[i])); } printf("is "); PyObject_Print(af->face, stdout, 0); printf(" but it does not actually contain glyphs for that text\n"); } del_font(af); return MISSING_FONT; } fg->fallback_fonts_count++; fg->fonts_count++; return ans; } static inline ssize_t fallback_font(FontGroup *fg, CPUCell *cpu_cell, GPUCell *gpu_cell) { bool bold = (gpu_cell->attrs >> BOLD_SHIFT) & 1; bool italic = (gpu_cell->attrs >> ITALIC_SHIFT) & 1; bool emoji_presentation = has_emoji_presentation(cpu_cell, gpu_cell); // Check if one of the existing fallback fonts has this text for (size_t i = 0, j = fg->first_fallback_font_idx; i < fg->fallback_fonts_count; i++, j++) { Font *ff = fg->fonts +j; if (ff->bold == bold && ff->italic == italic && ff->emoji_presentation == emoji_presentation && has_cell_text(ff, cpu_cell)) { if (global_state.debug_font_fallback) output_cell_fallback_data(cpu_cell, bold, italic, emoji_presentation, ff->face, false); return j; } } return load_fallback_font(fg, cpu_cell, bold, italic, emoji_presentation); } static inline ssize_t in_symbol_maps(FontGroup *fg, char_type ch) { for (size_t i = 0; i < num_symbol_maps; i++) { if (symbol_maps[i].left <= ch && ch <= symbol_maps[i].right) return fg->first_symbol_font_idx + symbol_maps[i].font_idx; } return NO_FONT; } // Decides which 'font' to use for a given cell. // // Possible results: // - NO_FONT // - MISSING_FONT // - BLANK_FONT // - BOX_FONT // - an index in the fonts list static inline ssize_t font_for_cell(FontGroup *fg, CPUCell *cpu_cell, GPUCell *gpu_cell, bool *is_fallback_font, bool *is_emoji_presentation) { *is_fallback_font = false; *is_emoji_presentation = false; START_ALLOW_CASE_RANGE ssize_t ans; switch(cpu_cell->ch) { case 0: case ' ': case '\t': return BLANK_FONT; case 0x2500 ... 0x2573: case 0x2574 ... 0x259f: case 0xe0b0 ... 0xe0b4: case 0xe0b6: case 0xe0b8: //  case 0xe0ba: //  case 0xe0bc: //  case 0xe0be: //  return BOX_FONT; default: ans = in_symbol_maps(fg, cpu_cell->ch); if (ans > -1) return ans; switch(BI_VAL(gpu_cell->attrs)) { case 0: ans = fg->medium_font_idx; break; case 1: ans = fg->bold_font_idx ; break; case 2: ans = fg->italic_font_idx; break; case 3: ans = fg->bi_font_idx; break; } if (ans < 0) ans = fg->medium_font_idx; *is_emoji_presentation = has_emoji_presentation(cpu_cell, gpu_cell); if (!*is_emoji_presentation && has_cell_text(fg->fonts + ans, cpu_cell)) return ans; *is_fallback_font = true; return fallback_font(fg, cpu_cell, gpu_cell); } END_ALLOW_CASE_RANGE } static inline void set_sprite(GPUCell *cell, sprite_index x, sprite_index y, sprite_index z) { cell->sprite_x = x; cell->sprite_y = y; cell->sprite_z = z; } // Gives a unique (arbitrary) id to a box glyph static inline glyph_index box_glyph_id(char_type ch) { START_ALLOW_CASE_RANGE switch(ch) { case 0x2500 ... 0x259f: return ch - 0x2500; // IDs from 0x00 to 0x9f case 0xe0b0 ... 0xe0d4: return 0xa0 + ch - 0xe0b0; // IDs from 0xa0 to 0xc4 default: return 0xff; } END_ALLOW_CASE_RANGE } static PyObject* box_drawing_function = NULL, *prerender_function = NULL, *descriptor_for_idx = NULL; void render_alpha_mask(uint8_t *alpha_mask, pixel* dest, Region *src_rect, Region *dest_rect, size_t src_stride, size_t dest_stride) { for (size_t sr = src_rect->top, dr = dest_rect->top; sr < src_rect->bottom && dr < dest_rect->bottom; sr++, dr++) { pixel *d = dest + dest_stride * dr; uint8_t *s = alpha_mask + src_stride * sr; for(size_t sc = src_rect->left, dc = dest_rect->left; sc < src_rect->right && dc < dest_rect->right; sc++, dc++) { pixel val = d[dc]; uint8_t alpha = s[sc]; d[dc] = 0xffffff00 | MIN(0xffu, alpha + (val & 0xff)); } } } static void render_box_cell(FontGroup *fg, CPUCell *cpu_cell, GPUCell *gpu_cell) { int error = 0; glyph_index glyph = box_glyph_id(cpu_cell->ch); static ExtraGlyphs extra_glyphs = {{0}}; SpritePosition *sp = sprite_position_for(fg, &fg->fonts[BOX_FONT], glyph, &extra_glyphs, false, &error); if (sp == NULL) { sprite_map_set_error(error); PyErr_Print(); set_sprite(gpu_cell, 0, 0, 0); return; } set_sprite(gpu_cell, sp->x, sp->y, sp->z); if (sp->rendered) return; sp->rendered = true; sp->colored = false; PyObject *ret = PyObject_CallFunction(box_drawing_function, "IIId", cpu_cell->ch, fg->cell_width, fg->cell_height, (fg->logical_dpi_x + fg->logical_dpi_y) / 2.0); if (ret == NULL) { PyErr_Print(); return; } uint8_t *alpha_mask = PyLong_AsVoidPtr(PyTuple_GET_ITEM(ret, 0)); clear_canvas(fg); Region r = { .right = fg->cell_width, .bottom = fg->cell_height }; render_alpha_mask(alpha_mask, fg->canvas, &r, &r, fg->cell_width, fg->cell_width); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, sp->x, sp->y, sp->z, fg->canvas); Py_DECREF(ret); } static inline void load_hb_buffer(CPUCell *first_cpu_cell, GPUCell *first_gpu_cell, index_type num_cells) { index_type num; hb_buffer_clear_contents(harfbuzz_buffer); while (num_cells) { attrs_type prev_width = 0; for (num = 0; num_cells && num < arraysz(shape_buffer) - 20 - arraysz(first_cpu_cell->cc_idx); first_cpu_cell++, first_gpu_cell++, num_cells--) { if (prev_width == 2) { prev_width = 0; continue; } shape_buffer[num++] = first_cpu_cell->ch; prev_width = first_gpu_cell->attrs & WIDTH_MASK; for (unsigned i = 0; i < arraysz(first_cpu_cell->cc_idx) && first_cpu_cell->cc_idx[i]; i++) { shape_buffer[num++] = codepoint_for_mark(first_cpu_cell->cc_idx[i]); } } hb_buffer_add_utf32(harfbuzz_buffer, shape_buffer, num, 0, num); } hb_buffer_guess_segment_properties(harfbuzz_buffer); } static inline void set_cell_sprite(GPUCell *cell, SpritePosition *sp) { cell->sprite_x = sp->x; cell->sprite_y = sp->y; cell->sprite_z = sp->z; if (sp->colored) cell->sprite_z |= 0x4000; } static inline pixel* extract_cell_from_canvas(FontGroup *fg, unsigned int i, unsigned int num_cells) { pixel *ans = fg->canvas + (fg->cell_width * fg->cell_height * (CELLS_IN_CANVAS - 1)), *dest = ans, *src = fg->canvas + (i * fg->cell_width); unsigned int stride = fg->cell_width * num_cells; for (unsigned int r = 0; r < fg->cell_height; r++, dest += fg->cell_width, src += stride) memcpy(dest, src, fg->cell_width * sizeof(pixel)); return ans; } static inline void render_group(FontGroup *fg, unsigned int num_cells, unsigned int num_glyphs, CPUCell *cpu_cells, GPUCell *gpu_cells, hb_glyph_info_t *info, hb_glyph_position_t *positions, Font *font, glyph_index glyph, ExtraGlyphs *extra_glyphs, bool center_glyph) { static SpritePosition* sprite_position[16]; int error = 0; num_cells = MIN(arraysz(sprite_position), num_cells); for (unsigned int i = 0; i < num_cells; i++) { sprite_position[i] = sprite_position_for(fg, font, glyph, extra_glyphs, (uint8_t)i, &error); if (error != 0) { sprite_map_set_error(error); PyErr_Print(); return; } } if (sprite_position[0]->rendered) { for (unsigned int i = 0; i < num_cells; i++) { set_cell_sprite(gpu_cells + i, sprite_position[i]); } return; } clear_canvas(fg); bool was_colored = (gpu_cells->attrs & WIDTH_MASK) == 2 && is_emoji(cpu_cells->ch); render_glyphs_in_cells(font->face, font->bold, font->italic, info, positions, num_glyphs, fg->canvas, fg->cell_width, fg->cell_height, num_cells, fg->baseline, &was_colored, (FONTS_DATA_HANDLE)fg, center_glyph); if (PyErr_Occurred()) PyErr_Print(); for (unsigned int i = 0; i < num_cells; i++) { sprite_position[i]->rendered = true; sprite_position[i]->colored = was_colored; set_cell_sprite(gpu_cells + i, sprite_position[i]); pixel *buf = num_cells == 1 ? fg->canvas : extract_cell_from_canvas(fg, i, num_cells); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, sprite_position[i]->x, sprite_position[i]->y, sprite_position[i]->z, buf); } } typedef struct { CPUCell *cpu_cell; GPUCell *gpu_cell; unsigned int num_codepoints; unsigned int codepoints_consumed; char_type current_codepoint; } CellData; typedef struct { unsigned int first_glyph_idx, first_cell_idx, num_glyphs, num_cells; bool has_special_glyph, is_space_ligature; } Group; typedef struct { uint32_t previous_cluster; bool prev_was_special, prev_was_empty; CellData current_cell_data; Group *groups; size_t groups_capacity, group_idx, glyph_idx, cell_idx, num_cells, num_glyphs; CPUCell *first_cpu_cell, *last_cpu_cell; GPUCell *first_gpu_cell, *last_gpu_cell; hb_glyph_info_t *info; hb_glyph_position_t *positions; } GroupState; static GroupState group_state = {0}; static inline unsigned int num_codepoints_in_cell(CPUCell *cell) { unsigned int ans = 1; for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) ans++; return ans; } static inline void shape(CPUCell *first_cpu_cell, GPUCell *first_gpu_cell, index_type num_cells, hb_font_t *font, Font *fobj, bool disable_ligature) { if (group_state.groups_capacity <= 2 * num_cells) { group_state.groups_capacity = MAX(128u, 2 * num_cells); // avoid unnecessary reallocs group_state.groups = realloc(group_state.groups, sizeof(Group) * group_state.groups_capacity); if (!group_state.groups) fatal("Out of memory"); } group_state.previous_cluster = UINT32_MAX; group_state.prev_was_special = false; group_state.prev_was_empty = false; group_state.current_cell_data.cpu_cell = first_cpu_cell; group_state.current_cell_data.gpu_cell = first_gpu_cell; group_state.current_cell_data.num_codepoints = num_codepoints_in_cell(first_cpu_cell); group_state.current_cell_data.codepoints_consumed = 0; group_state.current_cell_data.current_codepoint = first_cpu_cell->ch; zero_at_ptr_count(group_state.groups, group_state.groups_capacity); group_state.group_idx = 0; group_state.glyph_idx = 0; group_state.cell_idx = 0; group_state.num_cells = num_cells; group_state.first_cpu_cell = first_cpu_cell; group_state.first_gpu_cell = first_gpu_cell; group_state.last_cpu_cell = first_cpu_cell + (num_cells ? num_cells - 1 : 0); group_state.last_gpu_cell = first_gpu_cell + (num_cells ? num_cells - 1 : 0); load_hb_buffer(first_cpu_cell, first_gpu_cell, num_cells); hb_shape(font, harfbuzz_buffer, fobj->hb_features, fobj->num_hb_features - (disable_ligature ? 0 : 1)); unsigned int info_length, positions_length; group_state.info = hb_buffer_get_glyph_infos(harfbuzz_buffer, &info_length); group_state.positions = hb_buffer_get_glyph_positions(harfbuzz_buffer, &positions_length); if (!group_state.info || !group_state.positions) group_state.num_glyphs = 0; else group_state.num_glyphs = MIN(info_length, positions_length); } static inline bool is_special_glyph(glyph_index glyph_id, Font *font, CellData* cell_data) { // A glyph is special if the codepoint it corresponds to matches a // different glyph in the font SpecialGlyphCache *s = special_glyph_cache_for(font, glyph_id, SPECIAL_FILLED_MASK); if (s == NULL) return false; if (!(s->data & SPECIAL_FILLED_MASK)) { bool is_special = cell_data->current_codepoint ? ( glyph_id != glyph_id_for_codepoint(font->face, cell_data->current_codepoint) ? true : false) : false; uint8_t val = is_special ? SPECIAL_VALUE_MASK : 0; s->data |= val | SPECIAL_FILLED_MASK; } return s->data & SPECIAL_VALUE_MASK; } static inline bool is_empty_glyph(glyph_index glyph_id, Font *font) { // A glyph is empty if its metrics have a width of zero SpecialGlyphCache *s = special_glyph_cache_for(font, glyph_id, EMPTY_FILLED_MASK); if (s == NULL) return false; if (!(s->data & EMPTY_FILLED_MASK)) { uint8_t val = is_glyph_empty(font->face, glyph_id) ? EMPTY_VALUE_MASK : 0; s->data |= val | EMPTY_FILLED_MASK; } return s->data & EMPTY_VALUE_MASK; } static inline unsigned int check_cell_consumed(CellData *cell_data, CPUCell *last_cpu_cell) { cell_data->codepoints_consumed++; if (cell_data->codepoints_consumed >= cell_data->num_codepoints) { attrs_type width = cell_data->gpu_cell->attrs & WIDTH_MASK; cell_data->cpu_cell += MAX(1, width); cell_data->gpu_cell += MAX(1, width); cell_data->codepoints_consumed = 0; if (cell_data->cpu_cell <= last_cpu_cell) { cell_data->num_codepoints = num_codepoints_in_cell(cell_data->cpu_cell); cell_data->current_codepoint = cell_data->cpu_cell->ch; } else cell_data->current_codepoint = 0; return width; } else { switch(cell_data->codepoints_consumed) { case 0: cell_data->current_codepoint = cell_data->cpu_cell->ch; break; default: { index_type mark = cell_data->cpu_cell->cc_idx[cell_data->codepoints_consumed - 1]; // VS15/16 cause rendering to break, as they get marked as // special glyphs, so map to 0, to avoid that cell_data->current_codepoint = (mark == VS15 || mark == VS16) ? 0 : codepoint_for_mark(mark); break; } } } return 0; } static inline void shape_run(CPUCell *first_cpu_cell, GPUCell *first_gpu_cell, index_type num_cells, Font *font, bool disable_ligature) { shape(first_cpu_cell, first_gpu_cell, num_cells, harfbuzz_font_for_face(font->face), font, disable_ligature); #if 0 static char dbuf[1024]; // You can also generate this easily using hb-shape --show-extents --cluster-level=1 --shapers=ot /path/to/font/file text hb_buffer_serialize_glyphs(harfbuzz_buffer, 0, group_state.num_glyphs, dbuf, sizeof(dbuf), NULL, harfbuzz_font_for_face(font->face), HB_BUFFER_SERIALIZE_FORMAT_TEXT, HB_BUFFER_SERIALIZE_FLAG_DEFAULT | HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS); printf("\n%s\n", dbuf); #endif /* Now distribute the glyphs into groups of cells * Considerations to keep in mind: * Group sizes should be as small as possible for best performance * Combining chars can result in multiple glyphs rendered into a single cell * Emoji and East Asian wide chars can cause a single glyph to be rendered over multiple cells * Ligature fonts, take two common approaches: * 1. ABC becomes EMPTY, EMPTY, WIDE GLYPH this means we have to render N glyphs in N cells (example Fira Code) * 2. ABC becomes WIDE GLYPH this means we have to render one glyph in N cells (example Operator Mono Lig) * * We rely on the cluster numbers from harfbuzz to tell us how many unicode codepoints a glyph corresponds to. * Then we check if the glyph is a ligature glyph (is_special_glyph) and if it is an empty glyph. These three * datapoints give us enough information to satisfy the constraint above, for a wide variety of fonts. */ uint32_t cluster, next_cluster; bool add_to_current_group; #define G(x) (group_state.x) #define MAX_GLYPHS_IN_GROUP (MAX_NUM_EXTRA_GLYPHS + 1u) while (G(glyph_idx) < G(num_glyphs) && G(cell_idx) < G(num_cells)) { glyph_index glyph_id = G(info)[G(glyph_idx)].codepoint; cluster = G(info)[G(glyph_idx)].cluster; bool is_special = is_special_glyph(glyph_id, font, &G(current_cell_data)); bool is_empty = is_special && is_empty_glyph(glyph_id, font); uint32_t num_codepoints_used_by_glyph = 0; bool is_last_glyph = G(glyph_idx) == G(num_glyphs) - 1; Group *current_group = G(groups) + G(group_idx); if (is_last_glyph) { num_codepoints_used_by_glyph = UINT32_MAX; } else { next_cluster = G(info)[G(glyph_idx) + 1].cluster; // RTL languages like Arabic have decreasing cluster numbers if (next_cluster != cluster) num_codepoints_used_by_glyph = cluster > next_cluster ? cluster - next_cluster : next_cluster - cluster; } if (!current_group->num_glyphs) { add_to_current_group = true; } else { if (is_special) { add_to_current_group = G(prev_was_empty); } else { add_to_current_group = !G(prev_was_special); } } if (current_group->num_glyphs >= MAX_GLYPHS_IN_GROUP || current_group->num_cells >= MAX_GLYPHS_IN_GROUP) add_to_current_group = false; if (!add_to_current_group) { G(group_idx)++; current_group = G(groups) + G(group_idx); } if (!current_group->num_glyphs++) { current_group->first_glyph_idx = G(glyph_idx); current_group->first_cell_idx = G(cell_idx); } #define MOVE_GLYPH_TO_NEXT_GROUP(start_cell_idx) { \ current_group->num_glyphs--; \ G(group_idx)++; current_group = G(groups) + G(group_idx); \ current_group->first_cell_idx = start_cell_idx; \ current_group->num_glyphs = 1; \ current_group->first_glyph_idx = G(glyph_idx); \ } if (is_special) current_group->has_special_glyph = true; if (is_last_glyph) { // soak up all remaining cells if (G(cell_idx) < G(num_cells)) { unsigned int num_left = G(num_cells) - G(cell_idx); if (current_group->num_cells + num_left > MAX_GLYPHS_IN_GROUP) MOVE_GLYPH_TO_NEXT_GROUP(G(cell_idx)); current_group->num_cells += num_left; if (current_group->num_cells > MAX_GLYPHS_IN_GROUP) current_group->num_cells = MAX_GLYPHS_IN_GROUP; // leave any trailing cells empty G(cell_idx) += num_left; } } else { unsigned int num_cells_consumed = 0, start_cell_idx = G(cell_idx); while (num_codepoints_used_by_glyph && G(cell_idx) < G(num_cells)) { unsigned int w = check_cell_consumed(&G(current_cell_data), G(last_cpu_cell)); G(cell_idx) += w; num_cells_consumed += w; num_codepoints_used_by_glyph--; } if (num_cells_consumed) { if (num_cells_consumed > MAX_GLYPHS_IN_GROUP) { // Nasty, a single glyph used more than MAX_GLYPHS_IN_GROUP cells, we cannot render this case correctly log_error("The glyph: %u needs more than %u cells, cannot render it", glyph_id, MAX_GLYPHS_IN_GROUP); current_group->num_glyphs--; while (num_cells_consumed) { G(group_idx)++; current_group = G(groups) + G(group_idx); current_group->num_glyphs = 1; current_group->first_glyph_idx = G(glyph_idx); current_group->num_cells = MIN(num_cells_consumed, MAX_GLYPHS_IN_GROUP); current_group->first_cell_idx = start_cell_idx; start_cell_idx += current_group->num_cells; num_cells_consumed -= current_group->num_cells; } } else { if (num_cells_consumed + current_group->num_cells > MAX_GLYPHS_IN_GROUP) MOVE_GLYPH_TO_NEXT_GROUP(start_cell_idx); current_group->num_cells += num_cells_consumed; if (!is_special) { // not a ligature, end the group G(group_idx)++; current_group = G(groups) + G(group_idx); } } } } G(prev_was_special) = is_special; G(prev_was_empty) = is_empty; G(previous_cluster) = cluster; G(glyph_idx)++; } #undef MOVE_GLYPH_TO_NEXT_GROUP #undef MAX_GLYPHS_IN_GROUP } static inline void merge_groups_for_pua_space_ligature(void) { while (G(group_idx) > 0) { Group *g = G(groups), *g1 = G(groups) + 1; g->num_cells += g1->num_cells; g->num_glyphs += g1->num_glyphs; g->num_glyphs = MIN(g->num_glyphs, MAX_NUM_EXTRA_GLYPHS + 1); G(group_idx)--; } G(groups)->is_space_ligature = true; } static inline void split_run_at_offset(index_type cursor_offset, index_type *left, index_type *right) { *left = 0; *right = 0; for (unsigned idx = 0; idx < G(group_idx) + 1; idx++) { Group *group = G(groups) + idx; if (group->first_cell_idx <= cursor_offset && cursor_offset < group->first_cell_idx + group->num_cells) { GPUCell *first_cell = G(first_gpu_cell) + group->first_cell_idx; if (group->num_cells > 1 && group->has_special_glyph && (first_cell->attrs & WIDTH_MASK) == 1) { // likely a calt ligature *left = group->first_cell_idx; *right = group->first_cell_idx + group->num_cells; } break; } } } static inline void render_groups(FontGroup *fg, Font *font, bool center_glyph) { unsigned idx = 0; ExtraGlyphs ed; while (idx <= G(group_idx)) { Group *group = G(groups) + idx; if (!group->num_cells) break; /* printf("Group: idx: %u num_cells: %u num_glyphs: %u first_glyph_idx: %u first_cell_idx: %u total_num_glyphs: %zu\n", */ /* idx, group->num_cells, group->num_glyphs, group->first_glyph_idx, group->first_cell_idx, group_state.num_glyphs); */ glyph_index primary = group->num_glyphs ? G(info)[group->first_glyph_idx].codepoint : 0; unsigned int i; int last = -1; for (i = 1; i < MIN(arraysz(ed.data) + 1, group->num_glyphs); i++) { last = i - 1; ed.data[last] = G(info)[group->first_glyph_idx + i].codepoint; } if ((size_t)(last + 1) < arraysz(ed.data)) ed.data[last + 1] = 0; // We dont want to render the spaces in a space ligature because // there exist stupid fonts like Powerline that have no space glyph, // so special case it: https://github.com/kovidgoyal/kitty/issues/1225 unsigned int num_glyphs = group->is_space_ligature ? 1 : group->num_glyphs; render_group(fg, group->num_cells, num_glyphs, G(first_cpu_cell) + group->first_cell_idx, G(first_gpu_cell) + group->first_cell_idx, G(info) + group->first_glyph_idx, G(positions) + group->first_glyph_idx, font, primary, &ed, center_glyph); idx++; } } static PyObject* test_shape(PyObject UNUSED *self, PyObject *args) { Line *line; char *path = NULL; int index = 0; if(!PyArg_ParseTuple(args, "O!|zi", &Line_Type, &line, &path, &index)) return NULL; index_type num = 0; while(num < line->xnum && line->cpu_cells[num].ch) num += line->gpu_cells[num].attrs & WIDTH_MASK; PyObject *face = NULL; Font *font; if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create at least one font group first"); return NULL; } if (path) { face = face_from_path(path, index, (FONTS_DATA_HANDLE)font_groups); if (face == NULL) return NULL; font = calloc(1, sizeof(Font)); font->face = face; font->hb_features[0] = hb_features[CALT_FEATURE]; font->num_hb_features = 1; } else { FontGroup *fg = font_groups; font = fg->fonts + fg->medium_font_idx; } shape_run(line->cpu_cells, line->gpu_cells, num, font, false); PyObject *ans = PyList_New(0); unsigned int idx = 0; glyph_index first_glyph; while (idx <= G(group_idx)) { Group *group = G(groups) + idx; if (!group->num_cells) break; first_glyph = group->num_glyphs ? G(info)[group->first_glyph_idx].codepoint : 0; PyObject *eg = PyTuple_New(MAX_NUM_EXTRA_GLYPHS); for (size_t g = 0; g < MAX_NUM_EXTRA_GLYPHS; g++) PyTuple_SET_ITEM(eg, g, Py_BuildValue("H", g + 1 < group->num_glyphs ? G(info)[group->first_glyph_idx + g].codepoint : 0)); PyList_Append(ans, Py_BuildValue("IIHN", group->num_cells, group->num_glyphs, first_glyph, eg)); idx++; } if (face) { Py_CLEAR(face); free_maps(font); free(font); } return ans; } #undef G static inline void render_run(FontGroup *fg, CPUCell *first_cpu_cell, GPUCell *first_gpu_cell, index_type num_cells, ssize_t font_idx, bool pua_space_ligature, bool center_glyph, int cursor_offset, DisableLigature disable_ligature_strategy) { switch(font_idx) { default: shape_run(first_cpu_cell, first_gpu_cell, num_cells, &fg->fonts[font_idx], disable_ligature_strategy == DISABLE_LIGATURES_ALWAYS); if (pua_space_ligature) merge_groups_for_pua_space_ligature(); else if (cursor_offset > -1) { index_type left, right; split_run_at_offset(cursor_offset, &left, &right); if (right > left) { if (left) { shape_run(first_cpu_cell, first_gpu_cell, left, &fg->fonts[font_idx], false); render_groups(fg, &fg->fonts[font_idx], center_glyph); } shape_run(first_cpu_cell + left, first_gpu_cell + left, right - left, &fg->fonts[font_idx], true); render_groups(fg, &fg->fonts[font_idx], center_glyph); if (right < num_cells) { shape_run(first_cpu_cell + right, first_gpu_cell + right, num_cells - right, &fg->fonts[font_idx], false); render_groups(fg, &fg->fonts[font_idx], center_glyph); } break; } } render_groups(fg, &fg->fonts[font_idx], center_glyph); break; case BLANK_FONT: while(num_cells--) { set_sprite(first_gpu_cell, 0, 0, 0); first_cpu_cell++; first_gpu_cell++; } break; case BOX_FONT: while(num_cells--) { render_box_cell(fg, first_cpu_cell, first_gpu_cell); first_cpu_cell++; first_gpu_cell++; } break; case MISSING_FONT: while(num_cells--) { set_sprite(first_gpu_cell, MISSING_GLYPH, 0, 0); first_cpu_cell++; first_gpu_cell++; } break; } } void render_line(FONTS_DATA_HANDLE fg_, Line *line, index_type lnum, Cursor *cursor, DisableLigature disable_ligature_strategy) { #define RENDER if (run_font_idx != NO_FONT && i > first_cell_in_run) { \ int cursor_offset = -1; \ if (disable_ligature_at_cursor && first_cell_in_run <= cursor->x && cursor->x <= i) cursor_offset = cursor->x - first_cell_in_run; \ render_run(fg, line->cpu_cells + first_cell_in_run, line->gpu_cells + first_cell_in_run, i - first_cell_in_run, run_font_idx, false, center_glyph, cursor_offset, disable_ligature_strategy); \ } FontGroup *fg = (FontGroup*)fg_; ssize_t run_font_idx = NO_FONT; bool center_glyph = false; bool disable_ligature_at_cursor = cursor != NULL && disable_ligature_strategy == DISABLE_LIGATURES_CURSOR && lnum == cursor->y; index_type first_cell_in_run, i; attrs_type prev_width = 0; for (i=0, first_cell_in_run=0; i < line->xnum; i++) { if (prev_width == 2) { prev_width = 0; continue; } CPUCell *cpu_cell = line->cpu_cells + i; GPUCell *gpu_cell = line->gpu_cells + i; bool is_fallback_font, is_emoji_presentation; ssize_t cell_font_idx = font_for_cell(fg, cpu_cell, gpu_cell, &is_fallback_font, &is_emoji_presentation); if ( cell_font_idx != MISSING_FONT && ((is_fallback_font && !is_emoji_presentation && is_symbol(cpu_cell->ch)) || (cell_font_idx != BOX_FONT && is_private_use(cpu_cell->ch))) ) { unsigned int desired_cells = 1; if (cell_font_idx > 0) { Font *font = (fg->fonts + cell_font_idx); glyph_index glyph_id = glyph_id_for_codepoint(font->face, cpu_cell->ch); int width = get_glyph_width(font->face, glyph_id); desired_cells = (unsigned int)ceilf((float)width / fg->cell_width); } unsigned int num_spaces = 0; while ((line->cpu_cells[i+num_spaces+1].ch == ' ') && num_spaces < MAX_NUM_EXTRA_GLYPHS_PUA && num_spaces < desired_cells && i + num_spaces + 1 < line->xnum) { num_spaces++; // We have a private use char followed by space(s), render it as a multi-cell ligature. GPUCell *space_cell = line->gpu_cells + i + num_spaces; // Ensure the space cell uses the foreground color from the PUA cell. // This is needed because there are applications like // Powerline that use PUA+space with different foreground colors // for the space and the PUA. See for example: https://github.com/kovidgoyal/kitty/issues/467 space_cell->fg = gpu_cell->fg; space_cell->decoration_fg = gpu_cell->decoration_fg; } if (num_spaces) { center_glyph = true; RENDER center_glyph = false; render_run(fg, line->cpu_cells + i, line->gpu_cells + i, num_spaces + 1, cell_font_idx, true, center_glyph, -1, disable_ligature_strategy); run_font_idx = NO_FONT; first_cell_in_run = i + num_spaces + 1; prev_width = line->gpu_cells[i+num_spaces].attrs & WIDTH_MASK; i += num_spaces; continue; } } prev_width = gpu_cell->attrs & WIDTH_MASK; if (run_font_idx == NO_FONT) run_font_idx = cell_font_idx; if (run_font_idx == cell_font_idx) continue; RENDER run_font_idx = cell_font_idx; first_cell_in_run = i; } RENDER #undef RENDER } StringCanvas render_simple_text(FONTS_DATA_HANDLE fg_, const char *text) { FontGroup *fg = (FontGroup*)fg_; if (fg->fonts_count && fg->medium_font_idx) return render_simple_text_impl(fg->fonts[fg->medium_font_idx].face, text, fg->baseline); StringCanvas ans = {0}; return ans; } static inline void clear_symbol_maps(void) { if (symbol_maps) { free(symbol_maps); symbol_maps = NULL; num_symbol_maps = 0; } } typedef struct { unsigned int main, bold, italic, bi, num_symbol_fonts; } DescriptorIndices; DescriptorIndices descriptor_indices = {0}; static PyObject* set_font_data(PyObject UNUSED *m, PyObject *args) { PyObject *sm; Py_CLEAR(box_drawing_function); Py_CLEAR(prerender_function); Py_CLEAR(descriptor_for_idx); if (!PyArg_ParseTuple(args, "OOOIIIIO!d", &box_drawing_function, &prerender_function, &descriptor_for_idx, &descriptor_indices.bold, &descriptor_indices.italic, &descriptor_indices.bi, &descriptor_indices.num_symbol_fonts, &PyTuple_Type, &sm, &global_state.font_sz_in_pts)) return NULL; Py_INCREF(box_drawing_function); Py_INCREF(prerender_function); Py_INCREF(descriptor_for_idx); free_font_groups(); clear_symbol_maps(); num_symbol_maps = PyTuple_GET_SIZE(sm); symbol_maps = calloc(num_symbol_maps, sizeof(SymbolMap)); if (symbol_maps == NULL) return PyErr_NoMemory(); for (size_t s = 0; s < num_symbol_maps; s++) { unsigned int left, right, font_idx; SymbolMap *x = symbol_maps + s; if (!PyArg_ParseTuple(PyTuple_GET_ITEM(sm, s), "III", &left, &right, &font_idx)) return NULL; x->left = left; x->right = right; x->font_idx = font_idx; } Py_RETURN_NONE; } static inline void send_prerendered_sprites(FontGroup *fg) { int error = 0; sprite_index x = 0, y = 0, z = 0; // blank cell clear_canvas(fg); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas); do_increment(fg, &error); if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); } PyObject *args = PyObject_CallFunction(prerender_function, "IIIIIdd", fg->cell_width, fg->cell_height, fg->baseline, fg->underline_position, fg->underline_thickness, fg->logical_dpi_x, fg->logical_dpi_y); if (args == NULL) { PyErr_Print(); fatal("Failed to pre-render cells"); } for (ssize_t i = 0; i < PyTuple_GET_SIZE(args) - 1; i++) { x = fg->sprite_tracker.x; y = fg->sprite_tracker.y; z = fg->sprite_tracker.z; if (y > 0) { fatal("Too many pre-rendered sprites for your GPU or the font size is too large"); } do_increment(fg, &error); if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); } uint8_t *alpha_mask = PyLong_AsVoidPtr(PyTuple_GET_ITEM(args, i)); clear_canvas(fg); Region r = { .right = fg->cell_width, .bottom = fg->cell_height }; render_alpha_mask(alpha_mask, fg->canvas, &r, &r, fg->cell_width, fg->cell_width); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas); } Py_CLEAR(args); } static inline size_t initialize_font(FontGroup *fg, unsigned int desc_idx, const char *ftype) { PyObject *d = PyObject_CallFunction(descriptor_for_idx, "I", desc_idx); if (d == NULL) { PyErr_Print(); fatal("Failed for %s font", ftype); } bool bold = PyObject_IsTrue(PyTuple_GET_ITEM(d, 1)); bool italic = PyObject_IsTrue(PyTuple_GET_ITEM(d, 2)); PyObject *face = desc_to_face(PyTuple_GET_ITEM(d, 0), (FONTS_DATA_HANDLE)fg); Py_CLEAR(d); if (face == NULL) { PyErr_Print(); fatal("Failed to convert descriptor to face for %s font", ftype); } size_t idx = fg->fonts_count++; bool ok = init_font(fg->fonts + idx, face, bold, italic, false); Py_CLEAR(face); if (!ok) { if (PyErr_Occurred()) { PyErr_Print(); } fatal("Failed to initialize %s font: %zu", ftype, idx); } return idx; } static void initialize_font_group(FontGroup *fg) { fg->fonts_capacity = 10 + descriptor_indices.num_symbol_fonts; fg->fonts = calloc(fg->fonts_capacity, sizeof(Font)); if (fg->fonts == NULL) fatal("Out of memory allocating fonts array"); fg->fonts_count = 1; // the 0 index font is the box font #define I(attr) if (descriptor_indices.attr) fg->attr##_font_idx = initialize_font(fg, descriptor_indices.attr, #attr); else fg->attr##_font_idx = -1; fg->medium_font_idx = initialize_font(fg, 0, "medium"); I(bold); I(italic); I(bi); #undef I fg->first_symbol_font_idx = fg->fonts_count; fg->first_fallback_font_idx = fg->fonts_count; fg->fallback_fonts_count = 0; for (size_t i = 0; i < descriptor_indices.num_symbol_fonts; i++) { initialize_font(fg, descriptor_indices.bi + 1 + i, "symbol_map"); fg->first_fallback_font_idx++; } #undef I calc_cell_metrics(fg); } void send_prerendered_sprites_for_window(OSWindow *w) { FontGroup *fg = (FontGroup*)w->fonts_data; if (!fg->sprite_map) { fg->sprite_map = alloc_sprite_map(fg->cell_width, fg->cell_height); send_prerendered_sprites(fg); } } FONTS_DATA_HANDLE load_fonts_data(double font_sz_in_pts, double dpi_x, double dpi_y) { FontGroup *fg = font_group_for(font_sz_in_pts, dpi_x, dpi_y); return (FONTS_DATA_HANDLE)fg; } static void finalize(void) { Py_CLEAR(python_send_to_gpu_impl); clear_symbol_maps(); Py_CLEAR(box_drawing_function); Py_CLEAR(prerender_function); Py_CLEAR(descriptor_for_idx); free_font_groups(); if (harfbuzz_buffer) { hb_buffer_destroy(harfbuzz_buffer); harfbuzz_buffer = NULL; } free(group_state.groups); group_state.groups = NULL; group_state.groups_capacity = 0; } static PyObject* sprite_map_set_layout(PyObject UNUSED *self, PyObject *args) { unsigned int w, h; if(!PyArg_ParseTuple(args, "II", &w, &h)) return NULL; if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create font group first"); return NULL; } sprite_tracker_set_layout(&font_groups->sprite_tracker, w, h); Py_RETURN_NONE; } static PyObject* test_sprite_position_for(PyObject UNUSED *self, PyObject *args) { glyph_index glyph; ExtraGlyphs extra_glyphs = {{0}}; if (!PyArg_ParseTuple(args, "H|H", &glyph, &extra_glyphs.data)) return NULL; int error; FontGroup *fg = font_groups; if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create font group first"); return NULL; } SpritePosition *pos = sprite_position_for(fg, &fg->fonts[fg->medium_font_idx], glyph, &extra_glyphs, 0, &error); if (pos == NULL) { sprite_map_set_error(error); return NULL; } return Py_BuildValue("HHH", pos->x, pos->y, pos->z); } static PyObject* set_send_sprite_to_gpu(PyObject UNUSED *self, PyObject *func) { Py_CLEAR(python_send_to_gpu_impl); if (func != Py_None) { python_send_to_gpu_impl = func; Py_INCREF(python_send_to_gpu_impl); } current_send_sprite_to_gpu = python_send_to_gpu_impl ? python_send_to_gpu : send_sprite_to_gpu; Py_RETURN_NONE; } static PyObject* test_render_line(PyObject UNUSED *self, PyObject *args) { PyObject *line; if (!PyArg_ParseTuple(args, "O!", &Line_Type, &line)) return NULL; if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create font group first"); return NULL; } render_line((FONTS_DATA_HANDLE)font_groups, (Line*)line, 0, NULL, DISABLE_LIGATURES_NEVER); Py_RETURN_NONE; } static PyObject* concat_cells(PyObject UNUSED *self, PyObject *args) { // Concatenate cells returning RGBA data unsigned int cell_width, cell_height; int is_32_bit; PyObject *cells; if (!PyArg_ParseTuple(args, "IIpO!", &cell_width, &cell_height, &is_32_bit, &PyTuple_Type, &cells)) return NULL; size_t num_cells = PyTuple_GET_SIZE(cells), r, c, i; PyObject *ans = PyBytes_FromStringAndSize(NULL, 4 * cell_width * cell_height * num_cells); if (ans == NULL) return PyErr_NoMemory(); pixel *dest = (pixel*)PyBytes_AS_STRING(ans); for (r = 0; r < cell_height; r++) { for (c = 0; c < num_cells; c++) { void *s = ((uint8_t*)PyBytes_AS_STRING(PyTuple_GET_ITEM(cells, c))); if (is_32_bit) { pixel *src = (pixel*)s + cell_width * r; for (i = 0; i < cell_width; i++, dest++) { uint8_t *rgba = (uint8_t*)dest; rgba[0] = (src[i] >> 24) & 0xff; rgba[1] = (src[i] >> 16) & 0xff; rgba[2] = (src[i] >> 8) & 0xff; rgba[3] = src[i] & 0xff; } } else { uint8_t *src = (uint8_t*)s + cell_width * r; for (i = 0; i < cell_width; i++, dest++) { uint8_t *rgba = (uint8_t*)dest; if (src[i]) { memset(rgba, 0xff, 3); rgba[3] = src[i]; } else *dest = 0; } } } } return ans; } static PyObject* current_fonts(PYNOARG) { if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create font group first"); return NULL; } PyObject *ans = PyDict_New(); if (!ans) return NULL; FontGroup *fg = font_groups; #define SET(key, val) {if (PyDict_SetItemString(ans, #key, fg->fonts[val].face) != 0) { goto error; }} SET(medium, fg->medium_font_idx); if (fg->bold_font_idx > 0) SET(bold, fg->bold_font_idx); if (fg->italic_font_idx > 0) SET(italic, fg->italic_font_idx); if (fg->bi_font_idx > 0) SET(bi, fg->bi_font_idx); PyObject *ff = PyTuple_New(fg->fallback_fonts_count); if (!ff) goto error; for (size_t i = 0; i < fg->fallback_fonts_count; i++) { Py_INCREF(fg->fonts[fg->first_fallback_font_idx + i].face); PyTuple_SET_ITEM(ff, i, fg->fonts[fg->first_fallback_font_idx + i].face); } PyDict_SetItemString(ans, "fallback", ff); Py_CLEAR(ff); return ans; error: Py_CLEAR(ans); return NULL; #undef SET } static PyObject* get_fallback_font(PyObject UNUSED *self, PyObject *args) { if (!num_font_groups) { PyErr_SetString(PyExc_RuntimeError, "must create font group first"); return NULL; } PyObject *text; int bold, italic; if (!PyArg_ParseTuple(args, "Upp", &text, &bold, &italic)) return NULL; CPUCell cpu_cell = {0}; GPUCell gpu_cell = {0}; static Py_UCS4 char_buf[2 + arraysz(cpu_cell.cc_idx)]; if (!PyUnicode_AsUCS4(text, char_buf, arraysz(char_buf), 1)) return NULL; cpu_cell.ch = char_buf[0]; for (unsigned i = 0; i + 1 < (unsigned) PyUnicode_GetLength(text) && i < arraysz(cpu_cell.cc_idx); i++) cpu_cell.cc_idx[i] = mark_for_codepoint(char_buf[i + 1]); if (bold) gpu_cell.attrs |= 1 << BOLD_SHIFT; if (italic) gpu_cell.attrs |= 1 << ITALIC_SHIFT; FontGroup *fg = font_groups; ssize_t ans = fallback_font(fg, &cpu_cell, &gpu_cell); if (ans == MISSING_FONT) { PyErr_SetString(PyExc_ValueError, "No fallback font found"); return NULL; } if (ans < 0) { PyErr_SetString(PyExc_ValueError, "Too many fallback fonts"); return NULL; } return fg->fonts[ans].face; } static PyObject* create_test_font_group(PyObject *self UNUSED, PyObject *args) { double sz, dpix, dpiy; if (!PyArg_ParseTuple(args, "ddd", &sz, &dpix, &dpiy)) return NULL; FontGroup *fg = font_group_for(sz, dpix, dpiy); if (!fg->sprite_map) send_prerendered_sprites(fg); return Py_BuildValue("II", fg->cell_width, fg->cell_height); } static PyObject* free_font_data(PyObject *self UNUSED, PyObject *args UNUSED) { finalize(); Py_RETURN_NONE; } static PyMethodDef module_methods[] = { METHODB(set_font_data, METH_VARARGS), METHODB(free_font_data, METH_NOARGS), METHODB(create_test_font_group, METH_VARARGS), METHODB(sprite_map_set_layout, METH_VARARGS), METHODB(test_sprite_position_for, METH_VARARGS), METHODB(concat_cells, METH_VARARGS), METHODB(set_send_sprite_to_gpu, METH_O), METHODB(test_shape, METH_VARARGS), METHODB(current_fonts, METH_NOARGS), METHODB(test_render_line, METH_VARARGS), METHODB(get_fallback_font, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_fonts(PyObject *module) { harfbuzz_buffer = hb_buffer_create(); if (harfbuzz_buffer == NULL || !hb_buffer_allocation_successful(harfbuzz_buffer) || !hb_buffer_pre_allocate(harfbuzz_buffer, 2048)) { PyErr_NoMemory(); return false; } hb_buffer_set_cluster_level(harfbuzz_buffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); #define create_feature(feature, where) {\ if (!hb_feature_from_string(feature, sizeof(feature) - 1, &hb_features[where])) { \ PyErr_SetString(PyExc_RuntimeError, "Failed to create " feature " harfbuzz feature"); \ return false; \ }} create_feature("-liga", LIGA_FEATURE); create_feature("-dlig", DLIG_FEATURE); create_feature("-calt", CALT_FEATURE); #undef create_feature if (PyModule_AddFunctions(module, module_methods) != 0) return false; current_send_sprite_to_gpu = send_sprite_to_gpu; return true; } kitty-0.15.0/kitty/fonts.h000066400000000000000000000046651356737523400154410ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "lineops.h" #include "state.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #include #pragma GCC diagnostic pop typedef struct { uint8_t *canvas; size_t width, height; } StringCanvas; // API that font backends need to implement typedef uint16_t glyph_index; unsigned int glyph_id_for_codepoint(PyObject *, char_type); int get_glyph_width(PyObject *, glyph_index); bool is_glyph_empty(PyObject *, glyph_index); hb_font_t* harfbuzz_font_for_face(PyObject*); bool set_size_for_face(PyObject*, unsigned int, bool, FONTS_DATA_HANDLE); void cell_metrics(PyObject*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*); bool render_glyphs_in_cells(PyObject *f, bool bold, bool italic, hb_glyph_info_t *info, hb_glyph_position_t *positions, unsigned int num_glyphs, pixel *canvas, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, unsigned int baseline, bool *was_colored, FONTS_DATA_HANDLE, bool center_glyph); PyObject* create_fallback_face(PyObject *base_face, CPUCell* cell, bool bold, bool italic, bool emoji_presentation, FONTS_DATA_HANDLE fg); PyObject* specialize_font_descriptor(PyObject *base_descriptor, FONTS_DATA_HANDLE); PyObject* face_from_path(const char *path, int index, FONTS_DATA_HANDLE); PyObject* face_from_descriptor(PyObject*, FONTS_DATA_HANDLE); const char* postscript_name_for_face(const PyObject*); void sprite_tracker_current_layout(FONTS_DATA_HANDLE data, unsigned int *x, unsigned int *y, unsigned int *z); void render_alpha_mask(uint8_t *alpha_mask, pixel* dest, Region *src_rect, Region *dest_rect, size_t src_stride, size_t dest_stride); void render_line(FONTS_DATA_HANDLE, Line *line, index_type lnum, Cursor *cursor, DisableLigature); void sprite_tracker_set_limits(size_t max_texture_size, size_t max_array_len); typedef void (*free_extra_data_func)(void*); StringCanvas render_simple_text_impl(PyObject *s, const char *text, unsigned int baseline); StringCanvas render_simple_text(FONTS_DATA_HANDLE fg_, const char *text); static inline void right_shift_canvas(pixel *canvas, size_t width, size_t height, size_t amt) { pixel *src; size_t r; for (r = 0, src = canvas; r < height; r++, src += width) { memmove(src + amt, src, sizeof(pixel) * (width - amt)); zero_at_ptr_count(src, amt); } } kitty-0.15.0/kitty/fonts/000077500000000000000000000000001356737523400152555ustar00rootroot00000000000000kitty-0.15.0/kitty/fonts/__init__.py000066400000000000000000000000001356737523400173540ustar00rootroot00000000000000kitty-0.15.0/kitty/fonts/box_drawing.py000066400000000000000000000602441356737523400201400ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal # # NOTE: to add a new glyph, add an entry to the `box_chars` dict, then update # the functions `font_for_cell` and `box_glyph_id` in `kitty/fonts.c`. # import math from functools import partial as p from itertools import repeat scale = (0.001, 1, 1.5, 2) _dpi = 96.0 def set_scale(new_scale): global scale scale = tuple(new_scale) def thickness(level=1, horizontal=True): pts = scale[level] return int(math.ceil(pts * (_dpi / 72.0))) def draw_hline(buf, width, x1, x2, y, level): ' Draw a horizontal line between [x1, x2) centered at y with the thickness given by level ' sz = thickness(level=level, horizontal=False) start = y - sz // 2 for y in range(start, start + sz): offset = y * width for x in range(x1, x2): buf[offset + x] = 255 def draw_vline(buf, width, y1, y2, x, level): ' Draw a vertical line between [y1, y2) centered at x with the thickness given by level ' sz = thickness(level=level, horizontal=True) start = x - sz // 2 for x in range(start, start + sz): for y in range(y1, y2): buf[x + y * width] = 255 def half_hline(buf, width, height, level=1, which='left', extend_by=0): x1, x2 = (0, extend_by + width // 2) if which == 'left' else (width // 2 - extend_by, width) draw_hline(buf, width, x1, x2, height // 2, level) def half_vline(buf, width, height, level=1, which='top', extend_by=0): y1, y2 = (0, height // 2 + extend_by) if which == 'top' else (height // 2 - extend_by, height) draw_vline(buf, width, y1, y2, width // 2, level) def get_holes(sz, hole_sz, num): if num == 1: pts = [sz // 2] elif num == 2: ssz = (sz - 2 * hole_sz) // 3 pts = (ssz + hole_sz // 2, 2 * ssz + hole_sz // 2 + hole_sz) elif num == 3: ssz = (sz - 3 * hole_sz) // 4 pts = (ssz + hole_sz // 2, 2 * ssz + hole_sz // 2 + hole_sz, 3 * ssz + 2 * hole_sz + hole_sz // 2) holes = [] for c in pts: holes.append(tuple(range(c - hole_sz // 2, c - hole_sz // 2 + hole_sz))) return holes hole_factor = 8 def add_hholes(buf, width, height, level=1, num=1): line_sz = thickness(level=level, horizontal=True) hole_sz = width // hole_factor start = height // 2 - line_sz // 2 holes = get_holes(width, hole_sz, num) for y in range(start, start + line_sz): offset = y * width for hole in holes: for x in hole: buf[offset + x] = 0 def add_vholes(buf, width, height, level=1, num=1): line_sz = thickness(level=level, horizontal=False) hole_sz = height // hole_factor start = width // 2 - line_sz // 2 holes = get_holes(height, hole_sz, num) for x in range(start, start + line_sz): for hole in holes: for y in hole: buf[x + width * y] = 0 def hline(*a, level=1): half_hline(*a, level=level) half_hline(*a, level=level, which='right') def vline(*a, level=1): half_vline(*a, level=level) half_vline(*a, level=level, which='bottom') def hholes(*a, level=1, num=1): hline(*a, level=level) add_hholes(*a, level=level, num=num) def vholes(*a, level=1, num=1): vline(*a, level=level) add_vholes(*a, level=level, num=num) def corner(*a, hlevel=1, vlevel=1, which=None): wh = 'right' if which in '┌└' else 'left' half_hline(*a, level=hlevel, which=wh, extend_by=thickness(vlevel, horizontal=True) // 2) wv = 'top' if which in '└┘' else 'bottom' half_vline(*a, level=vlevel, which=wv) def vert_t(*args, a=1, b=1, c=1, which=None): half_vline(*args, level=a, which='top') half_hline(*args, level=b, which='left' if which == '┤' else 'right') half_vline(*args, level=c, which='bottom') def horz_t(*args, a=1, b=1, c=1, which=None): half_hline(*args, level=a, which='left') half_hline(*args, level=b, which='right') half_vline(*args, level=c, which='top' if which == 'â”´' else 'bottom') def cross(*s, a=1, b=1, c=1, d=1): half_hline(*s, level=a) half_hline(*s, level=b, which='right') half_vline(*s, level=c) half_vline(*s, level=d, which='bottom') def fill_region(buf, width, height, xlimits): for y in range(height): offset = y * width for x, (upper, lower) in enumerate(xlimits): buf[x + offset] = 255 if upper <= y <= lower else 0 # Anti-alias the boundary, simple y-axis anti-aliasing for x, limits in enumerate(xlimits): for y in limits: for ypx in range(int(math.floor(y)), int(math.ceil(y)) + 1): if 0 <= ypx < height: off = ypx * width + x buf[off] = min(255, buf[off] + int((1 - abs(y - ypx)) * 255)) def line_equation(x1, y1, x2, y2): m = (y2 - y1) / (x2 - x1) c = y1 - m * x1 def y(x): return m * x + c return y def triangle(buf, width, height, left=True): ay1, by1, y2 = 0, height - 1, height // 2 if left: x1, x2 = 0, width - 1 else: x1, x2 = width - 1, 0 uppery = line_equation(x1, ay1, x2, y2) lowery = line_equation(x1, by1, x2, y2) xlimits = [(uppery(x), lowery(x)) for x in range(width)] fill_region(buf, width, height, xlimits) def corner_triangle(buf, width, height, corner): if corner == 'top-right' or corner == 'bottom-left': diagonal_y = line_equation(0, 0, width - 1, height - 1) if corner == 'top-right': xlimits = [(0, diagonal_y(x)) for x in range(width)] elif corner == 'bottom-left': xlimits = [(diagonal_y(x), height - 1) for x in range(width)] else: diagonal_y = line_equation(width - 1, 0, 0, height - 1) if corner == 'top-left': xlimits = [(0, diagonal_y(x)) for x in range(width)] elif corner == 'bottom-right': xlimits = [(diagonal_y(x), height - 1) for x in range(width)] fill_region(buf, width, height, xlimits) def antialiased_1px_line(buf, width, height, p1, p2): # Draw an antialiased line using the Wu algorithm x1, y1 = p1 x2, y2 = p2 dx, dy = x2 - x1, y2 - y1 off_limit = height * width steep = abs(dx) < abs(dy) if steep: x1, y1, x2, y2, dx, dy = y1, x1, y2, x2, dy, dx def p(x, y): return y, x else: def p(x, y): return x, y if x2 < x1: x1, x2, y1, y2 = x2, x1, y2, y1 def fpart(x): return x - int(x) def rfpart(x): return 1 - fpart(x) def putpixel(p, alpha): x, y = p off = int(x + y * width) if 0 <= off < off_limit: buf[off] = int(min(buf[off] + (alpha * 255), 255)) def draw_endpoint(pt): x, y = pt xend = round(x) yend = y + grad * (xend - x) xgap = rfpart(x + 0.5) px, py = int(xend), int(yend) putpixel(p(px, py), rfpart(yend) * xgap) putpixel(p(px, py+1), fpart(yend) * xgap) return px grad = dy/dx intery = y1 + rfpart(x1) * grad xstart = draw_endpoint(p(*p1)) xend = draw_endpoint(p(*p2)) if xstart > xend: xstart, xend = xend, xstart xstart += 1 for x in range(xstart, xend): y = int(intery) putpixel(p(x, y), rfpart(intery)) putpixel(p(x, y+1), fpart(intery)) intery += grad def antialiased_line(buf, width, height, p1, p2, level=1): th = thickness(level) if th < 2: return antialiased_1px_line(buf, width, height, p1, p2) (x1, y1), (x2, y2) = p1, p2 dh = th // 2 items = range(-dh, dh + (th % 2)) for delta in items: antialiased_1px_line(buf, width, height, (x1, y1 + delta), (x2, y2 + delta)) def cross_line(buf, width, height, left=True, level=1): if left: p1, p2 = (0, 0), (width - 1, height - 1) else: p1, p2 = (width - 1, 0), (0, height - 1) antialiased_line(buf, width, height, p1, p2, level=level) def half_cross_line(buf, width, height, which='tl', level=1): my = (height - 1) // 2 if which == 'tl': p1 = 0, 0 p2 = width - 1, my elif which == 'bl': p2 = 0, height - 1 p1 = width - 1, my elif which == 'tr': p1 = width - 1, 0 p2 = 0, my else: p2 = width - 1, height - 1 p1 = 0, my antialiased_line(buf, width, height, p1, p2, level=level) def cubic_bezier(start, end, c1, c2): def bezier_eq(p0, p1, p2, p3): def f(t): tm1 = 1 - t tm1_3 = tm1 * tm1 * tm1 t_3 = t * t * t return tm1_3 * p0 + 3 * t * tm1 * (tm1 * p1 + t * p2) + t_3 * p3 return f bezier_x = bezier_eq(start[0], c1[0], c2[0], end[0]) bezier_y = bezier_eq(start[1], c1[1], c2[1], end[1]) return bezier_x, bezier_y def find_bezier_for_D(width, height): cx = last_cx = width - 1 start = (0, 0) end = (0, height - 1) while True: c1 = cx, start[1] c2 = cx, end[1] bezier_x, bezier_y = cubic_bezier(start, end, c1, c2) if bezier_x(0.5) > width - 1: return last_cx last_cx = cx cx += 1 def get_bezier_limits(bezier_x, bezier_y): start_x = bezier_x(0) max_x = int(bezier_x(0.5)) last_t, t_limit = 0, 0.5 def find_t_for_x(x, start_t): if abs(bezier_x(start_t) - x) < 0.1: return start_t increment = t_limit - start_t if increment <= 0: return start_t while True: q = bezier_x(start_t + increment) if (abs(q - x) < 0.1): return start_t + increment if q > x: increment /= 2 if increment < 1e-6: raise ValueError('Failed to find t for x={}'.format(x)) else: start_t += increment increment = t_limit - start_t if increment <= 0: return start_t for x in range(start_x, max_x + 1): if x > start_x: last_t = find_t_for_x(x, last_t) upper, lower = bezier_y(last_t), bezier_y(1 - last_t) if abs(upper - lower) <= 2: # avoid pip on end of D break yield upper, lower def D(buf, width, height, left=True): c1x = find_bezier_for_D(width, height) start = (0, 0) end = (0, height - 1) c1 = c1x, start[1] c2 = c1x, end[1] bezier_x, bezier_y = cubic_bezier(start, end, c1, c2) xlimits = list(get_bezier_limits(bezier_x, bezier_y)) if left: fill_region(buf, width, height, xlimits) else: mbuf = bytearray(width * height) fill_region(mbuf, width, height, xlimits) for y in range(height): offset = y * width for src_x in range(width): dest_x = width - 1 - src_x buf[offset + dest_x] = mbuf[offset + src_x] def half_dhline(buf, width, height, level=1, which='left', only=None): x1, x2 = (0, width // 2) if which == 'left' else (width // 2, width) gap = thickness(level + 1, horizontal=False) if only != 'bottom': draw_hline(buf, width, x1, x2, height // 2 - gap, level) if only != 'top': draw_hline(buf, width, x1, x2, height // 2 + gap, level) return height // 2 - gap, height // 2 + gap def half_dvline(buf, width, height, level=1, which='top', only=None): y1, y2 = (0, height // 2) if which == 'top' else (height // 2, height) gap = thickness(level + 1, horizontal=True) if only != 'right': draw_vline(buf, width, y1, y2, width // 2 - gap, level) if only != 'left': draw_vline(buf, width, y1, y2, width // 2 + gap, level) return width // 2 - gap, width // 2 + gap def dvline(*s, only=None, level=1): half_dvline(*s, only=only, level=level) return half_dvline(*s, only=only, which='bottom', level=level) def dhline(*s, only=None, level=1): half_dhline(*s, only=only, level=level) return half_dhline(*s, only=only, which='bottom', level=level) def dvcorner(*s, level=1, which='â•’'): hw = 'right' if which in '╒╘' else 'left' half_dhline(*s, which=hw) vw = 'top' if which in '╘╛' else 'bottom' gap = thickness(level + 1, horizontal=False) half_vline(*s, which=vw, extend_by=gap // 2 + thickness(level, horizontal=False)) def dhcorner(*s, level=1, which='â•“'): vw = 'top' if which in '╙╜' else 'bottom' half_dvline(*s, which=vw) hw = 'right' if which in 'â•“â•™' else 'left' gap = thickness(level + 1, horizontal=True) half_hline(*s, which=hw, extend_by=gap // 2 + thickness(level, horizontal=True)) def dcorner(buf, width, height, level=1, which='â•”'): hw = 'right' if which in '╔╚' else 'left' vw = 'top' if which in '╚â•' else 'bottom' hgap = thickness(level + 1, horizontal=False) vgap = thickness(level + 1, horizontal=True) x1, x2 = (0, width // 2) if hw == 'left' else (width // 2, width) ydelta = hgap if vw == 'top' else -hgap if hw == 'left': x2 += vgap else: x1 -= vgap draw_hline(buf, width, x1, x2, height // 2 + ydelta, level) if hw == 'left': x2 -= 2 * vgap else: x1 += 2 * vgap draw_hline(buf, width, x1, x2, height // 2 - ydelta, level) y1, y2 = (0, height // 2) if vw == 'top' else (height // 2, height) xdelta = vgap if hw == 'right' else -vgap yd = thickness(level, horizontal=True) // 2 if vw == 'top': y2 += hgap + yd else: y1 -= hgap + yd draw_vline(buf, width, y1, y2, width // 2 - xdelta, level) if vw == 'top': y2 -= 2 * hgap else: y1 += 2 * hgap draw_vline(buf, width, y1, y2, width // 2 + xdelta, level) def dpip(*a, level=1, which='╟'): if which in '╟╢': left, right = dvline(*a) x1, x2 = (0, left) if which == 'â•¢' else (right, a[1]) draw_hline(a[0], a[1], x1, x2, a[2] // 2, level) else: top, bottom = dhline(*a) y1, y2 = (0, top) if which == 'â•§' else (bottom, a[2]) draw_vline(a[0], a[1], y1, y2, a[1] // 2, level) def inner_corner(buf, width, height, which='tl', level=1): hgap = thickness(level + 1, horizontal=True) vgap = thickness(level + 1, horizontal=False) vthick = thickness(level, horizontal=True) // 2 x1, x2 = (0, width // 2 - hgap + vthick + 1) if 'l' in which else (width // 2 + hgap - vthick, width) yd = -1 if 't' in which else 1 draw_hline(buf, width, x1, x2, height // 2 + (yd * vgap), level) y1, y2 = (0, height // 2 - vgap) if 't' in which else (height // 2 + vgap, height) xd = -1 if 'l' in which else 1 draw_vline(buf, width, y1, y2, width // 2 + (xd * hgap), level) def vblock(buf, width, height, frac=1, gravity='top'): num_rows = min(height, round(frac * height)) start = 0 if gravity == 'top' else height - num_rows for r in range(start, start + num_rows): off = r * width for c in range(off, off + width): buf[c] = 255 def hblock(buf, width, height, frac=1, gravity='left'): num_cols = min(width, round(frac * width)) start = 0 if gravity == 'left' else width - num_cols for r in range(height): off = r * width + start for c in range(off, off + num_cols): buf[c] = 255 def shade(buf, width, height, light=False, invert=False): square_sz = max(1, width // 12) number_of_rows = height // square_sz number_of_cols = width // square_sz nums = tuple(range(square_sz)) dest = bytearray(width * height) if invert else buf for r in range(number_of_rows): y = r * square_sz is_odd = r % 2 != 0 if is_odd: continue fill_even = r % 4 == 0 for yr in nums: y = r * square_sz + yr if y >= height: break off = width * y for c in range(number_of_cols): if light: fill = (c % 4) == (0 if fill_even else 2) else: fill = (c % 2 == 0) == fill_even if fill: for xc in nums: x = (c * square_sz) + xc if x >= width: break dest[off + x] = 255 if invert: for y in range(height): off = width * y for x in range(width): q = off + x buf[q] = 255 - dest[q] def quad(buf, width, height, x=0, y=0): num_cols = width // 2 left = x * num_cols right = width if x else num_cols num_rows = height // 2 top = y * num_rows bottom = height if y else num_rows for r in range(top, bottom): off = r * width for c in range(left, right): buf[off + c] = 255 box_chars = { '─': [hline], 'â”': [p(hline, level=3)], '│': [vline], '┃': [p(vline, level=3)], '╌': [hholes], 'â•': [p(hholes, level=3)], '┄': [p(hholes, num=2)], 'â”…': [p(hholes, num=2, level=3)], '┈': [p(hholes, num=3)], '┉': [p(hholes, num=3, level=3)], '╎': [vholes], 'â•': [p(vholes, level=3)], '┆': [p(vholes, num=2)], '┇': [p(vholes, num=2, level=3)], '┊': [p(vholes, num=3)], '┋': [p(vholes, num=3, level=3)], 'â•´': [half_hline], '╵': [half_vline], 'â•¶': [p(half_hline, which='right')], 'â•·': [p(half_vline, which='bottom')], '╸': [p(half_hline, level=3)], '╹': [p(half_vline, level=3)], '╺': [p(half_hline, which='right', level=3)], 'â•»': [p(half_vline, which='bottom', level=3)], '╼': [half_hline, p(half_hline, level=3, which='right')], '╽': [half_vline, p(half_vline, level=3, which='bottom')], '╾': [p(half_hline, level=3), p(half_hline, which='right')], 'â•¿': [p(half_vline, level=3), p(half_vline, which='bottom')], 'î‚°': [triangle], '': [p(triangle, left=False)], 'î‚´': [D], 'î‚¶': [p(D, left=False)], '': [p(half_cross_line, which='tl'), p(half_cross_line, which='bl')], '': [p(half_cross_line, which='tr'), p(half_cross_line, which='br')], '': [p(corner_triangle, corner='bottom-left')], '': [p(corner_triangle, corner='bottom-right')], '': [p(corner_triangle, corner='top-left')], '': [p(corner_triangle, corner='top-right')], 'â•': [dhline], 'â•‘': [dvline], '╞': [vline, p(half_dhline, which='right')], 'â•¡': [vline, half_dhline], 'â•¥': [hline, p(half_dvline, which='bottom')], '╨': [hline, half_dvline], '╪': [vline, half_dhline, p(half_dhline, which='right')], 'â•«': [hline, half_dvline, p(half_dvline, which='bottom')], '╬': [p(inner_corner, which=x) for x in 'tl tr bl br'.split()], 'â• ': [p(inner_corner, which='tr'), p(inner_corner, which='br'), p(dvline, only='left')], 'â•£': [p(inner_corner, which='tl'), p(inner_corner, which='bl'), p(dvline, only='right')], '╦': [p(inner_corner, which='bl'), p(inner_corner, which='br'), p(dhline, only='top')], 'â•©': [p(inner_corner, which='tl'), p(inner_corner, which='tr'), p(dhline, only='bottom')], '╱': [p(cross_line, left=False)], '╲': [cross_line], '╳': [cross_line, p(cross_line, left=False)], 'â–€': [p(vblock, frac=1/2)], 'â–': [p(vblock, frac=1/8, gravity='bottom')], 'â–‚': [p(vblock, frac=1/4, gravity='bottom')], 'â–ƒ': [p(vblock, frac=3/8, gravity='bottom')], 'â–„': [p(vblock, frac=1/2, gravity='bottom')], 'â–…': [p(vblock, frac=5/8, gravity='bottom')], 'â–†': [p(vblock, frac=3/4, gravity='bottom')], 'â–‡': [p(vblock, frac=7/8, gravity='bottom')], 'â–ˆ': [p(vblock, frac=1, gravity='bottom')], 'â–‰': [p(hblock, frac=7/8)], 'â–Š': [p(hblock, frac=3/4)], 'â–‹': [p(hblock, frac=5/8)], 'â–Œ': [p(hblock, frac=1/2)], 'â–': [p(hblock, frac=3/8)], 'â–Ž': [p(hblock, frac=1/4)], 'â–': [p(hblock, frac=1/8)], 'â–': [p(hblock, frac=1/2, gravity='right')], 'â–‘': [p(shade, light=True)], 'â–’': [shade], 'â–“': [p(shade, invert=True)], 'â–”': [p(vblock, frac=1/8)], 'â–•': [p(hblock, frac=1/8, gravity='right')], 'â––': [p(quad, y=1)], 'â–—': [p(quad, x=1, y=1)], 'â–˜': [quad], 'â–™': [quad, p(quad, y=1), p(quad, x=1, y=1)], 'â–š': [quad, p(quad, x=1, y=1)], 'â–›': [quad, p(quad, x=1), p(quad, y=1)], 'â–œ': [quad, p(quad, x=1, y=1), p(quad, x=1)], 'â–': [p(quad, x=1)], 'â–ž': [p(quad, x=1), p(quad, y=1)], 'â–Ÿ': [p(quad, x=1), p(quad, y=1), p(quad, x=1, y=1)], } t, f = 1, 3 for start in '┌â”└┘': for i, (hlevel, vlevel) in enumerate(((t, t), (f, t), (t, f), (f, f))): box_chars[chr(ord(start) + i)] = [p(corner, which=start, hlevel=hlevel, vlevel=vlevel)] for ch, c in zip('╭╮╯╰', '┌â”┘└'): box_chars[ch] = [p(corner, which=c)] # TODO: Make these rounded for i, (a, b, c, d) in enumerate(( (t, t, t, t), (f, t, t, t), (t, f, t, t), (f, f, t, t), (t, t, f, t), (t, t, t, f), (t, t, f, f), (f, t, f, t), (t, f, f, t), (f, t, t, f), (t, f, t, f), (f, f, f, t), (f, f, t, f), (f, t, f, f), (t, f, f, f), (f, f, f, f) )): box_chars[chr(ord('┼') + i)] = [p(cross, a=a, b=b, c=c, d=d)] for starts, func, pattern in ( ('├┤', vert_t, ((t, t, t), (t, f, t), (f, t, t), (t, t, f), (f, t, f), (f, f, t), (t, f, f), (f, f, f))), ('┬┴', horz_t, ((t, t, t), (f, t, t), (t, f, t), (f, f, t), (t, t, f), (f, t, f), (t, f, f), (f, f, f))), ): for start in starts: for i, (a, b, c) in enumerate(pattern): box_chars[chr(ord(start) + i)] = [p(func, which=start, a=a, b=b, c=c)] for chars, func in (('╒╕╘╛', dvcorner), ('╓╖╙╜', dhcorner), ('╔╗╚â•', dcorner), ('╟╢╤╧', dpip)): for ch in chars: box_chars[ch] = [p(func, which=ch)] def render_box_char(ch, buf, width, height, dpi=96.0): global _dpi _dpi = dpi for func in box_chars[ch]: func(buf, width, height) return buf def render_missing_glyph(buf, width, height): hgap = thickness(level=0, horizontal=True) + 1 vgap = thickness(level=0, horizontal=False) + 1 draw_hline(buf, width, hgap, width - hgap + 1, vgap, 0) draw_hline(buf, width, hgap, width - hgap + 1, height - vgap, 0) draw_vline(buf, width, vgap, height - vgap + 1, hgap, 0) draw_vline(buf, width, vgap, height - vgap + 1, width - hgap, 0) def test_char(ch, sz=48): # kitty +runpy "from kitty.fonts.box_drawing import test_char; test_char('XXX')" from .render import display_bitmap, setup_for_testing from kitty.fast_data_types import concat_cells, set_send_sprite_to_gpu with setup_for_testing('monospace', sz) as (_, width, height): buf = bytearray(width * height) try: render_box_char(ch, buf, width, height) def join_cells(*cells): cells = tuple(bytes(x) for x in cells) return concat_cells(width, height, False, cells) rgb_data = join_cells(buf) display_bitmap(rgb_data, width, height) print() finally: set_send_sprite_to_gpu(None) def test_drawing(sz=48, family='monospace'): from .render import display_bitmap, setup_for_testing from kitty.fast_data_types import concat_cells, set_send_sprite_to_gpu with setup_for_testing(family, sz) as (_, width, height): space = bytearray(width * height) def join_cells(cells): cells = tuple(bytes(x) for x in cells) return concat_cells(width, height, False, cells) def render_chr(ch): if ch in box_chars: cell = bytearray(len(space)) render_box_char(ch, cell, width, height) return cell return space pos = 0x2500 rows = [] space_row = join_cells(repeat(space, 32)) try: for r in range(10): row = [] for i in range(16): row.append(render_chr(chr(pos))) row.append(space) pos += 1 rows.append(join_cells(row)) rows.append(space_row) rgb_data = b''.join(rows) width *= 32 height *= len(rows) assert len(rgb_data) == width * height * 4, '{} != {}'.format(len(rgb_data), width * height * 4) display_bitmap(rgb_data, width, height) finally: set_send_sprite_to_gpu(None) kitty-0.15.0/kitty/fonts/core_text.py000066400000000000000000000060101356737523400176200ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import re from kitty.fast_data_types import coretext_all_fonts from kitty.utils import log_error attr_map = {(False, False): 'font_family', (True, False): 'bold_font', (False, True): 'italic_font', (True, True): 'bold_italic_font'} def create_font_map(all_fonts): ans = {'family_map': {}, 'ps_map': {}, 'full_map': {}} for x in all_fonts: f = (x['family'] or '').lower() s = (x['style'] or '').lower() ps = (x['postscript_name'] or '').lower() ans['family_map'].setdefault(f, []).append(x) ans['ps_map'].setdefault(ps, []).append(x) ans['full_map'].setdefault(f + ' ' + s, []).append(x) return ans def all_fonts_map(): ans = getattr(all_fonts_map, 'ans', None) if ans is None: ans = all_fonts_map.ans = create_font_map(coretext_all_fonts()) return ans def list_fonts(): for fd in coretext_all_fonts(): f = fd['family'] if f: fn = (f + ' ' + (fd['style'] or '')).strip() is_mono = bool(fd['monospace']) yield {'family': f, 'full_name': fn, 'is_monospace': is_mono} def find_best_match(family, bold=False, italic=False): q = re.sub(r'\s+', ' ', family.lower()) font_map = all_fonts_map() def score(candidate): style_match = 1 if candidate['bold'] == bold and candidate[ 'italic' ] == italic else 0 monospace_match = 1 if candidate['monospace'] else 0 return style_match, monospace_match # First look for an exact match for selector in ('ps_map', 'full_map'): candidates = font_map[selector].get(q) if candidates: candidates.sort(key=score) return candidates[-1] # Let CoreText choose the font if the family exists, otherwise # fallback to Menlo if q not in font_map['family_map']: log_error('The font {} was not found, falling back to Menlo'.format(family)) family = 'Menlo' return { 'monospace': True, 'bold': bold, 'italic': italic, 'family': family } def resolve_family(f, main_family, bold=False, italic=False): if (bold or italic) and f == 'auto': f = main_family if f.lower() == 'monospace': f = 'Menlo' return f def get_font_files(opts): ans = {} for (bold, italic), attr in attr_map.items(): face = find_best_match(resolve_family(getattr(opts, attr), opts.font_family, bold, italic), bold, italic) key = {(False, False): 'medium', (True, False): 'bold', (False, True): 'italic', (True, True): 'bi'}[(bold, italic)] ans[key] = face if key == 'medium': get_font_files.medium_family = face['family'] return ans def font_for_family(family): ans = find_best_match(resolve_family(family, get_font_files.medium_family)) return ans, ans['bold'], ans['italic'] kitty-0.15.0/kitty/fonts/fontconfig.py000066400000000000000000000104311356737523400177620ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import re from functools import lru_cache from kitty.fast_data_types import ( FC_SLANT_ITALIC, FC_SLANT_ROMAN, FC_WEIGHT_BOLD, FC_WEIGHT_REGULAR, fc_list, fc_match as fc_match_impl, FC_DUAL, FC_MONO ) attr_map = {(False, False): 'font_family', (True, False): 'bold_font', (False, True): 'italic_font', (True, True): 'bold_italic_font'} def create_font_map(all_fonts): ans = {'family_map': {}, 'ps_map': {}, 'full_map': {}} for x in all_fonts: if 'path' not in x: continue f = (x.get('family') or '').lower() full = (x.get('full_name') or '').lower() ps = (x.get('postscript_name') or '').lower() ans['family_map'].setdefault(f, []).append(x) ans['ps_map'].setdefault(ps, []).append(x) ans['full_map'].setdefault(full, []).append(x) return ans @lru_cache() def all_fonts_map(monospaced=True): if monospaced: ans = fc_list(FC_DUAL) + fc_list(FC_MONO) else: ans = fc_list() return create_font_map(ans) def list_fonts(): for fd in fc_list(): f = fd.get('family') if f: fn = fd.get('full_name') or (f + ' ' + fd.get('style', '')).strip() is_mono = fd.get('spacing') in ('MONO', 'DUAL') yield {'family': f, 'full_name': fn, 'is_monospace': is_mono} def family_name_to_key(family): return re.sub(r'\s+', ' ', family.lower()) @lru_cache() def fc_match(family, bold, italic, spacing=FC_MONO): return fc_match_impl(family, bold, italic, spacing) def find_best_match(family, bold=False, italic=False, monospaced=True): q = family_name_to_key(family) font_map = all_fonts_map(monospaced) def score(candidate): bold_score = abs((FC_WEIGHT_BOLD if bold else FC_WEIGHT_REGULAR) - candidate.get('weight', 0)) italic_score = abs((FC_SLANT_ITALIC if italic else FC_SLANT_ROMAN) - candidate.get('slant', 0)) monospace_match = 0 if candidate.get('spacing') == 'MONO' else 1 return bold_score + italic_score, monospace_match # First look for an exact match for selector in ('ps_map', 'full_map', 'family_map'): candidates = font_map[selector].get(q) if candidates: candidates.sort(key=score) return candidates[0] # Use fc-match to see if we can find a monospaced font that matches family for spacing in (FC_MONO, FC_DUAL): possibility = fc_match(family, False, False, spacing) for key, map_key in (('postscript_name', 'ps_map'), ('full_name', 'full_map'), ('family', 'family_map')): val = possibility.get(key) if val: candidates = font_map[map_key].get(family_name_to_key(val)) if candidates: if len(candidates) == 1: # happens if the family name is an alias, so we search with # the actual family name to see if we can find all the # fonts in the family. family_name_candidates = font_map['family_map'].get(family_name_to_key(candidates[0]['family'])) if family_name_candidates and len(family_name_candidates) > 1: candidates = family_name_candidates return sorted(candidates, key=score)[0] # Use fc-match with a generic family family = 'monospace' if monospaced else 'sans-serif' return fc_match(family, bold, italic) def resolve_family(f, main_family, bold, italic): if (bold or italic) and f == 'auto': f = main_family return f def get_font_files(opts): ans = {} for (bold, italic), attr in attr_map.items(): rf = resolve_family(getattr(opts, attr), opts.font_family, bold, italic) font = find_best_match(rf, bold, italic) key = {(False, False): 'medium', (True, False): 'bold', (False, True): 'italic', (True, True): 'bi'}[(bold, italic)] ans[key] = font return ans def font_for_family(family): ans = find_best_match(family, monospaced=False) return ans, ans.get('weight', 0) >= FC_WEIGHT_BOLD, ans.get('slant', FC_SLANT_ROMAN) != FC_SLANT_ROMAN kitty-0.15.0/kitty/fonts/list.py000066400000000000000000000016321356737523400166040ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import sys from kitty.constants import is_macos if is_macos: from .core_text import list_fonts else: from .fontconfig import list_fonts def create_family_groups(monospaced=True): g = {} for f in list_fonts(): if not monospaced or f['is_monospace']: g.setdefault(f['family'], []).append(f) return g def main(argv): isatty = sys.stdout.isatty() groups = create_family_groups() for k in sorted(groups, key=lambda x: x.lower()): if isatty: print('\033[1;32m' + k + '\033[m') else: print(k) for f in sorted(groups[k], key=lambda x: x['full_name'].lower()): p = f['full_name'] if isatty: p = '\033[3m' + p + '\033[m' print(' ', p) print() kitty-0.15.0/kitty/fonts/render.py000066400000000000000000000274111356737523400171130ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import ctypes import sys from functools import partial from math import ceil, pi, cos, floor from kitty.config import defaults from kitty.constants import is_macos from kitty.fast_data_types import ( Screen, create_test_font_group, get_fallback_font, set_font_data, set_options, set_send_sprite_to_gpu, sprite_map_set_limits, test_render_line, test_shape ) from kitty.fonts.box_drawing import render_box_char, render_missing_glyph from kitty.utils import log_error if is_macos: from .core_text import get_font_files, font_for_family else: from .fontconfig import get_font_files, font_for_family current_faces = None def coalesce_symbol_maps(maps): if not maps: return maps items = tuple((k, maps[k]) for k in sorted(maps)) ans = [items[0]] def merge(prev_item, item): s, e = item[0] pe = prev_item[0][1] ans[-1] = ((prev_item[0][0], max(pe, e)), prev_item[1]) for item in items[1:]: current_item = ans[-1] if current_item[1] != item[1] or item[0][0] > current_item[0][1] + 1: ans.append(item) else: merge(current_item, item) return dict(ans) def create_symbol_map(opts): val = coalesce_symbol_maps(opts.symbol_map) family_map = {} count = 0 for family in val.values(): if family not in family_map: font, bold, italic = font_for_family(family) family_map[family] = count count += 1 current_faces.append((font, bold, italic)) sm = tuple((a, b, family_map[f]) for (a, b), f in val.items()) return sm def descriptor_for_idx(idx): return current_faces[idx] def dump_faces(ftypes, indices): def face_str(f): f = f[0] if is_macos: return f return '{}:{}'.format(f['path'], f['index']) log_error('Preloaded font faces:') log_error('normal face:', face_str(current_faces[0])) for ftype in ftypes: if indices[ftype]: log_error(ftype, 'face:', face_str(current_faces[indices[ftype]])) si_faces = current_faces[max(indices.values())+1:] if si_faces: log_error('Symbol map faces:') for face in si_faces: log_error(face_str(face)) def set_font_family(opts=None, override_font_size=None, debug_font_matching=False): global current_faces opts = opts or defaults sz = override_font_size or opts.font_size font_map = get_font_files(opts) current_faces = [(font_map['medium'], False, False)] ftypes = 'bold italic bi'.split() indices = {k: 0 for k in ftypes} for k in ftypes: if k in font_map: indices[k] = len(current_faces) current_faces.append((font_map[k], 'b' in k, 'i' in k)) before = len(current_faces) sm = create_symbol_map(opts) num_symbol_fonts = len(current_faces) - before if debug_font_matching: dump_faces(ftypes, indices) set_font_data( render_box_drawing, prerender_function, descriptor_for_idx, indices['bold'], indices['italic'], indices['bi'], num_symbol_fonts, sm, sz ) def add_line(buf, cell_width, position, thickness, cell_height): y = position - thickness // 2 while thickness > 0 and -1 < y < cell_height: thickness -= 1 ctypes.memset(ctypes.addressof(buf) + (cell_width * y), 255, cell_width) y += 1 def add_dline(buf, cell_width, position, thickness, cell_height): a = min(position - thickness, cell_height - 1) b = min(position, cell_height - 1) top, bottom = min(a, b), max(a, b) deficit = 2 - (bottom - top) if deficit > 0: if bottom + deficit < cell_height: bottom += deficit elif bottom < cell_height - 1: bottom += 1 if deficit > 1: top -= deficit - 1 else: top -= deficit top = max(0, min(top, cell_height - 1)) bottom = max(0, min(bottom, cell_height - 1)) for y in {top, bottom}: ctypes.memset(ctypes.addressof(buf) + (cell_width * y), 255, cell_width) def add_curl(buf, cell_width, position, thickness, cell_height): max_x, max_y = cell_width - 1, cell_height - 1 xfactor = 2.0 * pi / max_x half_height = max(thickness // 2, 1) def add_intensity(x, y, val): y += position y = min(y, max_y) idx = cell_width * y + x buf[idx] = min(255, buf[idx] + val) # Ensure all space at bottom of cell is used if position + half_height < max_y: position += max_y - (position + half_height) if position + half_height > max_y: position -= position + half_height - max_y # Use the Wu antialias algorithm to draw the curve # cosine waves always have slope <= 1 so are never steep for x in range(cell_width): y = half_height * cos(x * xfactor) y1, y2 = floor(y), ceil(y) i1 = int(255 * abs(y - y1)) add_intensity(x, y1, 255 - i1) add_intensity(x, y2, i1) def render_special( underline=0, strikethrough=False, missing=False, cell_width=None, cell_height=None, baseline=None, underline_position=None, underline_thickness=None): underline_position = min(underline_position, cell_height - underline_thickness) CharTexture = ctypes.c_ubyte * (cell_width * cell_height) ans = CharTexture if missing else CharTexture() def dl(f, *a): try: f(ans, cell_width, *a) except Exception as e: log_error('Failed to render {} at cell_width={} and cell_height={} with error: {}'.format( f.__name__, cell_width, cell_height, e)) if underline: t = underline_thickness if underline > 1: t = max(1, min(cell_height - underline_position - 1, t)) dl([None, add_line, add_dline, add_curl][underline], underline_position, t, cell_height) if strikethrough: pos = int(0.65 * baseline) dl(add_line, pos, underline_thickness, cell_height) if missing: buf = bytearray(cell_width * cell_height) render_missing_glyph(buf, cell_width, cell_height) ans = CharTexture.from_buffer(buf) return ans def render_cursor(which, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0): CharTexture = ctypes.c_ubyte * (cell_width * cell_height) ans = CharTexture() def vert(edge, width_pt=1): width = max(1, int(round(width_pt * dpi_x / 72.0))) left = 0 if edge == 'left' else max(0, cell_width - width) for y in range(cell_height): offset = y * cell_width + left for x in range(offset, offset + width): ans[x] = 255 def horz(edge, height_pt=1): height = max(1, int(round(height_pt * dpi_y / 72.0))) top = 0 if edge == 'top' else max(0, cell_height - height) for y in range(top, top + height): offset = y * cell_width for x in range(cell_width): ans[offset + x] = 255 if which == 1: # beam vert('left', 1.5) elif which == 2: # underline horz('bottom', 2.0) elif which == 3: # hollow vert('left'), vert('right'), horz('top'), horz('bottom') return ans def prerender_function(cell_width, cell_height, baseline, underline_position, underline_thickness, dpi_x, dpi_y): # Pre-render the special underline, strikethrough and missing and cursor cells f = partial( render_special, cell_width=cell_width, cell_height=cell_height, baseline=baseline, underline_position=underline_position, underline_thickness=underline_thickness) c = partial( render_cursor, cell_width=cell_width, cell_height=cell_height, dpi_x=dpi_x, dpi_y=dpi_y) cells = f(1), f(2), f(3), f(0, True), f(missing=True), c(1), c(2), c(3) return tuple(map(ctypes.addressof, cells)) + (cells,) def render_box_drawing(codepoint, cell_width, cell_height, dpi): CharTexture = ctypes.c_ubyte * (cell_width * cell_height) buf = render_box_char( chr(codepoint), CharTexture(), cell_width, cell_height, dpi ) return ctypes.addressof(buf), buf class setup_for_testing: def __init__(self, family='monospace', size=11.0, dpi=96.0): self.family, self.size, self.dpi = family, size, dpi def __enter__(self): from collections import OrderedDict opts = defaults._replace(font_family=self.family, font_size=self.size) set_options(opts) sprites = OrderedDict() def send_to_gpu(x, y, z, data): sprites[(x, y, z)] = data sprite_map_set_limits(100000, 100) set_send_sprite_to_gpu(send_to_gpu) try: set_font_family(opts) cell_width, cell_height = create_test_font_group(self.size, self.dpi, self.dpi) return sprites, cell_width, cell_height except Exception: set_send_sprite_to_gpu(None) raise def __exit__(self, *args): set_send_sprite_to_gpu(None) def render_string(text, family='monospace', size=11.0, dpi=96.0): with setup_for_testing(family, size, dpi) as (sprites, cell_width, cell_height): s = Screen(None, 1, len(text)*2) line = s.line(0) s.draw(text) test_render_line(line) cells = [] found_content = False for i in reversed(range(s.columns)): sp = list(line.sprite_at(i)) sp[2] &= 0xfff sp = tuple(sp) if sp == (0, 0, 0) and not found_content: continue found_content = True cells.append(sprites[sp]) return cell_width, cell_height, list(reversed(cells)) def shape_string(text="abcd", family='monospace', size=11.0, dpi=96.0, path=None): with setup_for_testing(family, size, dpi) as (sprites, cell_width, cell_height): s = Screen(None, 1, len(text)*2) line = s.line(0) s.draw(text) return test_shape(line, path) def display_bitmap(rgb_data, width, height): from tempfile import NamedTemporaryFile from kittens.icat.main import detect_support, show if not hasattr(display_bitmap, 'detected') and not detect_support(): raise SystemExit('Your terminal does not support the graphics protocol') display_bitmap.detected = True with NamedTemporaryFile(suffix='.rgba', delete=False) as f: f.write(rgb_data) assert len(rgb_data) == 4 * width * height show(f.name, width, height, 32, align='left') def test_render_string(text='Hello, world!', family='monospace', size=64.0, dpi=96.0): from kitty.fast_data_types import concat_cells, current_fonts cell_width, cell_height, cells = render_string(text, family, size, dpi) rgb_data = concat_cells(cell_width, cell_height, True, tuple(cells)) cf = current_fonts() fonts = [cf['medium'].display_name()] fonts.extend(f.display_name() for f in cf['fallback']) msg = 'Rendered string {} below, with fonts: {}\n'.format(text, ', '.join(fonts)) try: print(msg) except UnicodeEncodeError: sys.stdout.buffer.write(msg.encode('utf-8') + b'\n') display_bitmap(rgb_data, cell_width * len(cells), cell_height) print('\n') def test_fallback_font(qtext=None, bold=False, italic=False): with setup_for_testing(): trials = (qtext,) if qtext else ('ä½ ', 'He\u0347\u0305', '\U0001F929') for text in trials: f = get_fallback_font(text, bold, italic) try: print(text, f) except UnicodeEncodeError: sys.stdout.buffer.write((text + ' %s\n' % f).encode('utf-8')) def showcase(): f = 'monospace' if is_macos else 'Liberation Mono' test_render_string('He\u0347\u0305llo\u0337, w\u0302or\u0306l\u0354d!', family=f) test_render_string('你好,世界', family=f) test_render_string('│ðŸ˜â”‚ðŸ™â”‚😺│', family=f) test_render_string('A=>>B!=C', family='Fira Code') kitty-0.15.0/kitty/freetype.c000066400000000000000000000701751356737523400161250ustar00rootroot00000000000000/* * freetype.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "fonts.h" #include "state.h" #include #include #include #include #if HB_VERSION_MAJOR > 1 || (HB_VERSION_MAJOR == 1 && (HB_VERSION_MINOR > 6 || (HB_VERSION_MINOR == 6 && HB_VERSION_MICRO >= 3))) #define HARFBUZZ_HAS_CHANGE_FONT #endif #if FREETYPE_MAJOR == 2 && FREETYPE_MINOR < 7 #define FT_Bitmap_Init FT_Bitmap_New #endif #include FT_FREETYPE_H #include FT_BITMAP_H typedef struct { PyObject_HEAD FT_Face face; unsigned int units_per_EM; int ascender, descender, height, max_advance_width, max_advance_height, underline_position, underline_thickness; int hinting, hintstyle, index; bool is_scalable, has_color; float size_in_pts; FT_F26Dot6 char_width, char_height; FT_UInt xdpi, ydpi; PyObject *path; hb_font_t *harfbuzz_font; void *extra_data; free_extra_data_func free_extra_data; float apple_leading; } Face; PyTypeObject Face_Type; static PyObject* FreeType_Exception = NULL; void set_freetype_error(const char* prefix, int err_code) { int i = 0; #undef FTERRORS_H_ #undef __FTERRORS_H__ #define FT_ERRORDEF( e, v, s ) { e, s }, #define FT_ERROR_START_LIST { #define FT_ERROR_END_LIST { 0, NULL } }; static const struct { int err_code; const char* err_msg; } ft_errors[] = #ifdef FT_ERRORS_H #include FT_ERRORS_H #else FT_ERROR_START_LIST FT_ERROR_END_LIST #endif while(ft_errors[i].err_msg != NULL) { if (ft_errors[i].err_code == err_code) { PyErr_Format(FreeType_Exception, "%s %s", prefix, ft_errors[i].err_msg); return; } i++; } PyErr_Format(FreeType_Exception, "%s (error code: %d)", prefix, err_code); } static FT_Library library; static inline int font_units_to_pixels_y(Face *self, int x) { return (int)ceil((double)FT_MulFix(x, self->face->size->metrics.y_scale) / 64.0); } static inline int font_units_to_pixels_x(Face *self, int x) { return (int)ceil((double)FT_MulFix(x, self->face->size->metrics.x_scale) / 64.0); } static inline int get_load_flags(int hinting, int hintstyle, int base) { int flags = base; if (hinting) { if (hintstyle >= 3) flags |= FT_LOAD_TARGET_NORMAL; else if (0 < hintstyle && hintstyle < 3) flags |= FT_LOAD_TARGET_LIGHT; } else flags |= FT_LOAD_NO_HINTING; return flags; } static inline bool load_glyph(Face *self, int glyph_index, int load_type) { int flags = get_load_flags(self->hinting, self->hintstyle, load_type); int error = FT_Load_Glyph(self->face, glyph_index, flags); if (error) { set_freetype_error("Failed to load glyph, with error:", error); return false; } return true; } static inline unsigned int get_height_for_char(Face *self, char ch) { unsigned int ans = 0; int glyph_index = FT_Get_Char_Index(self->face, ch); if (load_glyph(self, glyph_index, FT_LOAD_DEFAULT)) { unsigned int baseline = font_units_to_pixels_y(self, self->ascender); FT_GlyphSlotRec *glyph = self->face->glyph; FT_Bitmap *bm = &glyph->bitmap; if (glyph->bitmap_top <= 0 || (glyph->bitmap_top > 0 && (unsigned int)glyph->bitmap_top < baseline)) { ans = baseline - glyph->bitmap_top + bm->rows; } } return ans; } static inline unsigned int calc_cell_height(Face *self, bool for_metrics) { unsigned int ans = font_units_to_pixels_y(self, self->height); if (for_metrics) { unsigned int underscore_height = get_height_for_char(self, '_'); if (underscore_height > ans) { if (global_state.debug_font_fallback) printf( "Increasing cell height by %u pixels to work around buggy font that renders underscore outside the bounding box\n", underscore_height - ans); return underscore_height; } } return ans; } static inline bool set_font_size(Face *self, FT_F26Dot6 char_width, FT_F26Dot6 char_height, FT_UInt xdpi, FT_UInt ydpi, unsigned int desired_height, unsigned int cell_height) { int error = FT_Set_Char_Size(self->face, 0, char_height, xdpi, ydpi); if (!error) { unsigned int ch = calc_cell_height(self, false); if (desired_height && ch != desired_height) { FT_F26Dot6 h = (FT_F26Dot6)floor((double)char_height * (double)desired_height / (double) ch); return set_font_size(self, 0, h, xdpi, ydpi, 0, cell_height); } self->char_width = char_width; self->char_height = char_height; self->xdpi = xdpi; self->ydpi = ydpi; if (self->harfbuzz_font != NULL) { #ifdef HARFBUZZ_HAS_CHANGE_FONT hb_ft_font_changed(self->harfbuzz_font); #else hb_font_set_scale( self->harfbuzz_font, (int) (((uint64_t) self->face->size->metrics.x_scale * (uint64_t) self->face->units_per_EM + (1u<<15)) >> 16), (int) (((uint64_t) self->face->size->metrics.y_scale * (uint64_t) self->face->units_per_EM + (1u<<15)) >> 16) ); #endif } } else { if (!self->is_scalable && self->face->num_fixed_sizes > 0) { int32_t min_diff = INT32_MAX; if (desired_height == 0) desired_height = cell_height; if (desired_height == 0) { desired_height = (unsigned int)ceil(((double)char_height / 64.) * (double)ydpi / 72.); desired_height += (unsigned int)ceil(0.2 * desired_height); } FT_Int strike_index = -1; for (FT_Int i = 0; i < self->face->num_fixed_sizes; i++) { int h = self->face->available_sizes[i].height; int32_t diff = h < (int32_t)desired_height ? (int32_t)desired_height - h : h - (int32_t)desired_height; if (diff < min_diff) { min_diff = diff; strike_index = i; } } if (strike_index > -1) { error = FT_Select_Size(self->face, strike_index); if (error) { set_freetype_error("Failed to set char size for non-scalable font, with error:", error); return false; } return true; } } set_freetype_error("Failed to set char size, with error:", error); return false; } return !error; } bool set_size_for_face(PyObject *s, unsigned int desired_height, bool force, FONTS_DATA_HANDLE fg) { Face *self = (Face*)s; FT_F26Dot6 w = (FT_F26Dot6)(ceil(fg->font_sz_in_pts * 64.0)); FT_UInt xdpi = (FT_UInt)fg->logical_dpi_x, ydpi = (FT_UInt)fg->logical_dpi_y; if (!force && (self->char_width == w && self->char_height == w && self->xdpi == xdpi && self->ydpi == ydpi)) return true; ((Face*)self)->size_in_pts = (float)fg->font_sz_in_pts; return set_font_size(self, w, w, xdpi, ydpi, desired_height, fg->cell_height); } static inline bool init_ft_face(Face *self, PyObject *path, int hinting, int hintstyle, FONTS_DATA_HANDLE fg) { #define CPY(n) self->n = self->face->n; CPY(units_per_EM); CPY(ascender); CPY(descender); CPY(height); CPY(max_advance_width); CPY(max_advance_height); CPY(underline_position); CPY(underline_thickness); #undef CPY self->is_scalable = FT_IS_SCALABLE(self->face); self->has_color = FT_HAS_COLOR(self->face); self->hinting = hinting; self->hintstyle = hintstyle; if (!set_size_for_face((PyObject*)self, 0, false, fg)) return false; self->harfbuzz_font = hb_ft_font_create(self->face, NULL); if (self->harfbuzz_font == NULL) { PyErr_NoMemory(); return false; } hb_ft_font_set_load_flags(self->harfbuzz_font, get_load_flags(self->hinting, self->hintstyle, FT_LOAD_DEFAULT)); self->path = path; Py_INCREF(self->path); self->index = self->face->face_index & 0xFFFF; return true; } PyObject* face_from_descriptor(PyObject *descriptor, FONTS_DATA_HANDLE fg) { #define D(key, conv, missing_ok) { \ PyObject *t = PyDict_GetItemString(descriptor, #key); \ if (t == NULL) { \ if (!missing_ok) { PyErr_SetString(PyExc_KeyError, "font descriptor is missing the key: " #key); return NULL; } \ } else key = conv(t); \ } const char *path = NULL; long index = 0; bool hinting = false; long hint_style = 0; D(path, PyUnicode_AsUTF8, false); D(index, PyLong_AsLong, true); D(hinting, PyObject_IsTrue, true); D(hint_style, PyLong_AsLong, true); #undef D Face *self = (Face *)Face_Type.tp_alloc(&Face_Type, 0); if (self != NULL) { int error = FT_New_Face(library, path, index, &(self->face)); if(error) { set_freetype_error("Failed to load face, with error:", error); Py_CLEAR(self); return NULL; } if (!init_ft_face(self, PyDict_GetItemString(descriptor, "path"), hinting, hint_style, fg)) { Py_CLEAR(self); return NULL; } } return (PyObject*)self; } PyObject* face_from_path(const char *path, int index, FONTS_DATA_HANDLE fg) { Face *ans = (Face*)Face_Type.tp_alloc(&Face_Type, 0); if (ans == NULL) return NULL; int error; error = FT_New_Face(library, path, index, &ans->face); if (error) { set_freetype_error("Failed to load face, with error:", error); ans->face = NULL; return NULL; } if (!init_ft_face(ans, Py_None, true, 3, fg)) { Py_CLEAR(ans); return NULL; } return (PyObject*)ans; } static void dealloc(Face* self) { if (self->harfbuzz_font) hb_font_destroy(self->harfbuzz_font); if (self->face) FT_Done_Face(self->face); if (self->extra_data && self->free_extra_data) self->free_extra_data(self->extra_data); Py_CLEAR(self->path); Py_TYPE(self)->tp_free((PyObject*)self); } static PyObject * repr(Face *self) { const char *ps_name = FT_Get_Postscript_Name(self->face); return PyUnicode_FromFormat( "Face(family=%s, style=%s, ps_name=%s, path=%S, index=%d, is_scalable=%S, has_color=%S, ascender=%i, descender=%i, height=%i, underline_position=%i, underline_thickness=%i)", self->face->family_name ? self->face->family_name : "", self->face->style_name ? self->face->style_name : "", ps_name ? ps_name: "", self->path, self->index, self->is_scalable ? Py_True : Py_False, self->has_color ? Py_True : Py_False, self->ascender, self->descender, self->height, self->underline_position, self->underline_thickness ); } const char* postscript_name_for_face(const PyObject *face_) { const Face *self = (const Face*)face_; const char *ps_name = FT_Get_Postscript_Name(self->face); return ps_name ? ps_name : ""; } static inline unsigned int calc_cell_width(Face *self) { unsigned int ans = 0; for (char_type i = 32; i < 128; i++) { int glyph_index = FT_Get_Char_Index(self->face, i); if (load_glyph(self, glyph_index, FT_LOAD_DEFAULT)) { ans = MAX(ans, (unsigned int)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f)); } } return ans; } void cell_metrics(PyObject *s, unsigned int* cell_width, unsigned int* cell_height, unsigned int* baseline, unsigned int* underline_position, unsigned int* underline_thickness) { Face *self = (Face*)s; *cell_width = calc_cell_width(self); *cell_height = calc_cell_height(self, true); *baseline = font_units_to_pixels_y(self, self->ascender); *underline_position = MIN(*cell_height - 1, (unsigned int)font_units_to_pixels_y(self, MAX(0, self->ascender - self->underline_position))); *underline_thickness = MAX(1, font_units_to_pixels_y(self, self->underline_thickness)); } unsigned int glyph_id_for_codepoint(PyObject *s, char_type cp) { return FT_Get_Char_Index(((Face*)s)->face, cp); } bool is_glyph_empty(PyObject *s, glyph_index g) { Face *self = (Face*)s; if (!load_glyph(self, g, FT_LOAD_DEFAULT)) { PyErr_Print(); return false; } #define M self->face->glyph->metrics /* printf("glyph: %u horiBearingX: %ld horiBearingY: %ld width: %ld height: %ld\n", g, M.horiBearingX, M.horiBearingY, M.width, M.height); */ return M.width == 0; #undef M } int get_glyph_width(PyObject *s, glyph_index g) { Face *self = (Face*)s; if (!load_glyph(self, g, FT_LOAD_DEFAULT)) { PyErr_Print(); return false; } #define M self->face->glyph->metrics #define B self->face->glyph->bitmap /* printf("glyph: %u bitmap.width: %d bitmap.rows: %d horiAdvance: %ld horiBearingX: %ld horiBearingY: %ld vertBearingX: %ld vertBearingY: %ld vertAdvance: %ld width: %ld height: %ld\n", */ /* g, B.width, B.rows, M.horiAdvance, M.horiBearingX, M.horiBearingY, M.vertBearingX, M.vertBearingY, M.vertAdvance, M.width, M.height); */ return B.width ? (int)B.width : (int)(M.width / 64); #undef M #undef B } hb_font_t* harfbuzz_font_for_face(PyObject *self) { return ((Face*)self)->harfbuzz_font; } typedef struct { unsigned char* buf; size_t start_x, width, stride; size_t rows; FT_Pixel_Mode pixel_mode; bool needs_free; unsigned int factor, right_edge; int bitmap_left, bitmap_top; } ProcessedBitmap; static inline void free_processed_bitmap(ProcessedBitmap *bm) { if (bm->needs_free) { bm->needs_free = false; free(bm->buf); bm->buf = NULL; } } static inline void trim_borders(ProcessedBitmap *ans, size_t extra) { bool column_has_text = false; // Trim empty columns from the right side of the bitmap for (ssize_t x = ans->width - 1; !column_has_text && x > -1 && extra > 0; x--) { for (size_t y = 0; y < ans->rows && !column_has_text; y++) { if (ans->buf[x + y * ans->stride] > 200) column_has_text = true; } if (!column_has_text) { ans->width--; extra--; } } // Remove any remaining extra columns from the left edge of the bitmap ans->start_x = extra; ans->width -= extra; } static inline void populate_processed_bitmap(FT_GlyphSlotRec *slot, FT_Bitmap *bitmap, ProcessedBitmap *ans, bool copy_buf) { ans->stride = bitmap->pitch < 0 ? -bitmap->pitch : bitmap->pitch; ans->rows = bitmap->rows; if (copy_buf) { ans->buf = calloc(ans->rows, ans->stride); if (!ans->buf) fatal("Out of memory"); ans->needs_free = true; memcpy(ans->buf, bitmap->buffer, ans->rows * ans->stride); } else ans->buf = bitmap->buffer; ans->start_x = 0; ans->width = bitmap->width; ans->pixel_mode = bitmap->pixel_mode; ans->bitmap_top = slot->bitmap_top; ans->bitmap_left = slot->bitmap_left; } static inline bool render_bitmap(Face *self, int glyph_id, ProcessedBitmap *ans, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, bool bold, bool italic, bool rescale, FONTS_DATA_HANDLE fg) { if (!load_glyph(self, glyph_id, FT_LOAD_RENDER)) return false; unsigned int max_width = cell_width * num_cells; // Embedded bitmap glyph? if (self->face->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_MONO) { FT_Bitmap bitmap; FT_Bitmap_Init(&bitmap); // This also sets pixel_mode to FT_PIXEL_MODE_GRAY so we don't have to int error = FT_Bitmap_Convert(library, &self->face->glyph->bitmap, &bitmap, 1); if (error) { set_freetype_error("Failed to convert bitmap, with error:", error); return false; } // Normalize gray levels to the range [0..255] bitmap.num_grays = 256; unsigned int stride = bitmap.pitch < 0 ? -bitmap.pitch : bitmap.pitch; for (unsigned i = 0; i < (unsigned)bitmap.rows; ++i) { // We only have 2 levels for (unsigned j = 0; j < (unsigned)bitmap.width; ++j) bitmap.buffer[i * stride + j] *= 255; } populate_processed_bitmap(self->face->glyph, &bitmap, ans, true); FT_Bitmap_Done(library, &bitmap); } else { populate_processed_bitmap(self->face->glyph, &self->face->glyph->bitmap, ans, false); } if (ans->width > max_width) { size_t extra = ans->width - max_width; if (italic && extra < cell_width / 2) { trim_borders(ans, extra); } else if (extra == 2 && num_cells == 1) { // there exist fonts that have bitmaps just a couple of pixels // wider than their advances, rather than rescale, which looks // bad, we just crop the bitmap on the right. See https://github.com/kovidgoyal/kitty/issues/352 } else if (rescale && self->is_scalable && extra > 1) { FT_F26Dot6 char_width = self->char_width, char_height = self->char_height; float ar = (float)max_width / (float)ans->width; if (set_font_size(self, (FT_F26Dot6)((float)self->char_width * ar), (FT_F26Dot6)((float)self->char_height * ar), self->xdpi, self->ydpi, 0, fg->cell_height)) { free_processed_bitmap(ans); if (!render_bitmap(self, glyph_id, ans, cell_width, cell_height, num_cells, bold, italic, false, fg)) return false; if (!set_font_size(self, char_width, char_height, self->xdpi, self->ydpi, 0, fg->cell_height)) return false; } else return false; } } return true; } static void downsample_bitmap(ProcessedBitmap *bm, unsigned int width, unsigned int cell_height) { // Downsample using a simple area averaging algorithm. Could probably do // better with bi-cubic or lanczos, but at these small sizes I don't think // it matters float ratio = MAX((float)bm->width / width, (float)bm->rows / cell_height); int factor = (int)ceilf(ratio); uint8_t *dest = calloc(4, width * cell_height); if (dest == NULL) fatal("Out of memory"); uint8_t *d = dest; for (unsigned int i = 0, sr = 0; i < cell_height; i++, sr += factor) { for (unsigned int j = 0, sc = 0; j < width; j++, sc += factor, d += 4) { // calculate area average unsigned int r=0, g=0, b=0, a=0, count=0; for (unsigned int y=sr; y < MIN(sr + factor, bm->rows); y++) { uint8_t *p = bm->buf + (y * bm->stride) + sc * 4; for (unsigned int x=sc; x < MIN(sc + factor, bm->width); x++, count++) { b += *(p++); g += *(p++); r += *(p++); a += *(p++); } } if (count) { d[0] = b / count; d[1] = g / count; d[2] = r / count; d[3] = a / count; } } } bm->buf = dest; bm->needs_free = true; bm->stride = 4 * width; bm->width = width; bm->rows = cell_height; bm->factor = factor; } static inline void detect_right_edge(ProcessedBitmap *ans) { ans->right_edge = 0; for (ssize_t x = ans->width - 1; !ans->right_edge && x > -1; x--) { for (size_t y = 0; y < ans->rows && !ans->right_edge; y++) { uint8_t *p = ans->buf + x * 4 + y * ans->stride; if (p[3] > 20) ans->right_edge = x; } } } static inline bool render_color_bitmap(Face *self, int glyph_id, ProcessedBitmap *ans, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, unsigned int baseline) { (void)baseline; unsigned short best = 0, diff = USHRT_MAX; for (short i = 0; i < self->face->num_fixed_sizes; i++) { unsigned short w = self->face->available_sizes[i].width; unsigned short d = w > (unsigned short)cell_width ? w - (unsigned short)cell_width : (unsigned short)cell_width - w; if (d < diff) { diff = d; best = i; } } FT_Error error = FT_Select_Size(self->face, best); if (error) { set_freetype_error("Failed to set char size for non-scalable font, with error:", error); return false; } if (!load_glyph(self, glyph_id, FT_LOAD_COLOR)) return false; FT_Set_Char_Size(self->face, 0, self->char_height, self->xdpi, self->ydpi); FT_Bitmap *bitmap = &self->face->glyph->bitmap; if (bitmap->pixel_mode != FT_PIXEL_MODE_BGRA) return false; ans->buf = bitmap->buffer; ans->start_x = 0; ans->width = bitmap->width; ans->stride = bitmap->pitch < 0 ? -bitmap->pitch : bitmap->pitch; ans->rows = bitmap->rows; ans->pixel_mode = bitmap->pixel_mode; if (ans->width > num_cells * cell_width + 2) downsample_bitmap(ans, num_cells * cell_width, cell_height); ans->bitmap_top = (int)((float)self->face->glyph->bitmap_top / ans->factor); ans->bitmap_left = (int)((float)self->face->glyph->bitmap_left / ans->factor); detect_right_edge(ans); return true; } static inline void copy_color_bitmap(uint8_t *src, pixel* dest, Region *src_rect, Region *dest_rect, size_t src_stride, size_t dest_stride) { for (size_t sr = src_rect->top, dr = dest_rect->top; sr < src_rect->bottom && dr < dest_rect->bottom; sr++, dr++) { pixel *d = dest + dest_stride * dr; uint8_t *s = src + src_stride * sr; for(size_t sc = src_rect->left, dc = dest_rect->left; sc < src_rect->right && dc < dest_rect->right; sc++, dc++) { uint8_t *bgra = s + 4 * sc; if (bgra[3]) { #define C(idx, shift) ( (uint8_t)(((float)bgra[idx] / (float)bgra[3]) * 255) << shift) d[dc] = C(2, 24) | C(1, 16) | C(0, 8) | bgra[3]; #undef C } else d[dc] = 0; } } } static inline void place_bitmap_in_canvas(pixel *cell, ProcessedBitmap *bm, size_t cell_width, size_t cell_height, float x_offset, float y_offset, size_t baseline) { // We want the glyph to be positioned inside the cell based on the bearingX // and bearingY values, making sure that it does not overflow the cell. Region src = { .left = bm->start_x, .bottom = bm->rows, .right = bm->width + bm->start_x }, dest = { .bottom = cell_height, .right = cell_width }; // Calculate column bounds int32_t xoff = (ssize_t)(x_offset + bm->bitmap_left); uint32_t extra; if (xoff < 0) src.left += -xoff; else dest.left = xoff; // Move the dest start column back if the width overflows because of it if (dest.left > 0 && dest.left + bm->width > cell_width) { extra = dest.left + bm->width - cell_width; dest.left = extra > dest.left ? 0 : dest.left - extra; } // Calculate row bounds int32_t yoff = (ssize_t)(y_offset + bm->bitmap_top); if ((yoff > 0 && (size_t)yoff > baseline)) { dest.top = 0; } else { dest.top = baseline - yoff; } /* printf("x_offset: %d bearing_x: %f y_offset: %d bearing_y: %f src_start_row: %u src_start_column: %u dest_start_row: %u dest_start_column: %u bm_width: %lu bitmap_rows: %lu\n", xoff, bearing_x, yoff, bearing_y, src.top, src.left, dest.top, dest.left, bm->width, bm->rows); */ if (bm->pixel_mode == FT_PIXEL_MODE_BGRA) { copy_color_bitmap(bm->buf, cell, &src, &dest, bm->stride, cell_width); } else render_alpha_mask(bm->buf, cell, &src, &dest, bm->stride, cell_width); } static const ProcessedBitmap EMPTY_PBM = {.factor = 1}; bool render_glyphs_in_cells(PyObject *f, bool bold, bool italic, hb_glyph_info_t *info, hb_glyph_position_t *positions, unsigned int num_glyphs, pixel *canvas, unsigned int cell_width, unsigned int cell_height, unsigned int num_cells, unsigned int baseline, bool *was_colored, FONTS_DATA_HANDLE fg, bool center_glyph) { Face *self = (Face*)f; bool is_emoji = *was_colored; *was_colored = is_emoji && self->has_color; float x = 0.f, y = 0.f, x_offset = 0.f; ProcessedBitmap bm; unsigned int canvas_width = cell_width * num_cells; for (unsigned int i = 0; i < num_glyphs; i++) { bm = EMPTY_PBM; if (*was_colored) { if (!render_color_bitmap(self, info[i].codepoint, &bm, cell_width, cell_height, num_cells, baseline)) { if (PyErr_Occurred()) PyErr_Print(); *was_colored = false; if (!render_bitmap(self, info[i].codepoint, &bm, cell_width, cell_height, num_cells, bold, italic, true, fg)) return false; } } else { if (!render_bitmap(self, info[i].codepoint, &bm, cell_width, cell_height, num_cells, bold, italic, true, fg)) return false; } x_offset = x + (float)positions[i].x_offset / 64.0f; y = (float)positions[i].y_offset / 64.0f; if ((*was_colored || self->face->glyph->metrics.width > 0) && bm.width > 0) { place_bitmap_in_canvas(canvas, &bm, canvas_width, cell_height, x_offset, y, baseline); } x += (float)positions[i].x_advance / 64.0f; free_processed_bitmap(&bm); } if (center_glyph && num_glyphs) { unsigned int right_edge = (unsigned int)x, delta; // x_advance is wrong for colored bitmaps that have been downsampled if (*was_colored) right_edge = num_glyphs == 1 ? bm.right_edge : canvas_width; if (num_cells > 1 && right_edge < canvas_width && (delta = (canvas_width - right_edge) / 2) && delta > 1) { right_shift_canvas(canvas, canvas_width, cell_height, delta); } } return true; } static PyObject* display_name(PyObject *s, PyObject *a UNUSED) { Face *self = (Face*)s; const char *psname = FT_Get_Postscript_Name(self->face); if (psname) return Py_BuildValue("s", psname); Py_INCREF(self->path); return self->path; } static PyObject* extra_data(PyObject *self, PyObject *a UNUSED) { return PyLong_FromVoidPtr(((Face*)self)->extra_data); } StringCanvas render_simple_text_impl(PyObject *s, const char *text, unsigned int baseline) { Face *self = (Face*)s; StringCanvas ans = {0}; size_t num_chars = strnlen(text, 32); int max_char_width = font_units_to_pixels_x(self, self->face->max_advance_width); size_t canvas_width = max_char_width * (num_chars*2); size_t canvas_height = font_units_to_pixels_y(self, self->face->height) + 8; pixel *canvas = calloc(canvas_width * canvas_height, sizeof(pixel)); if (!canvas) return ans; size_t pen_x = 0; ProcessedBitmap pbm; for (size_t n = 0; n < num_chars; n++) { FT_UInt glyph_index = FT_Get_Char_Index(self->face, text[n]); int error = FT_Load_Glyph(self->face, glyph_index, FT_LOAD_DEFAULT); if (error) continue; error = FT_Render_Glyph(self->face->glyph, FT_RENDER_MODE_NORMAL); if (error) continue; FT_Bitmap *bitmap = &self->face->glyph->bitmap; pbm = EMPTY_PBM; populate_processed_bitmap(self->face->glyph, bitmap, &pbm, false); place_bitmap_in_canvas(canvas, &pbm, canvas_width, canvas_height, pen_x, 0, baseline); pen_x += self->face->glyph->advance.x >> 6; } ans.width = pen_x; ans.height = canvas_height; ans.canvas = malloc(ans.width * ans.height); if (ans.canvas) { for (size_t row = 0; row < ans.height; row++) { unsigned char *destp = ans.canvas + (ans.width * row); pixel *srcp = canvas + (canvas_width * row); for (size_t i = 0; i < ans.width; i++) destp[i] = srcp[i] & 0xff; } } free(canvas); return ans; } // Boilerplate {{{ static PyMemberDef members[] = { #define MEM(name, type) {#name, type, offsetof(Face, name), READONLY, #name} MEM(units_per_EM, T_UINT), MEM(ascender, T_INT), MEM(descender, T_INT), MEM(height, T_INT), MEM(max_advance_width, T_INT), MEM(max_advance_height, T_INT), MEM(underline_position, T_INT), MEM(underline_thickness, T_INT), MEM(is_scalable, T_BOOL), MEM(path, T_OBJECT_EX), {NULL} /* Sentinel */ }; static PyMethodDef methods[] = { METHODB(display_name, METH_NOARGS), METHODB(extra_data, METH_NOARGS), {NULL} /* Sentinel */ }; PyTypeObject Face_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.Face", .tp_basicsize = sizeof(Face), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "FreeType Font face", .tp_methods = methods, .tp_members = members, .tp_repr = (reprfunc)repr, }; static void free_freetype(void) { FT_Done_FreeType(library); } bool init_freetype_library(PyObject *m) { if (PyType_Ready(&Face_Type) < 0) return 0; if (PyModule_AddObject(m, "Face", (PyObject *)&Face_Type) != 0) return 0; Py_INCREF(&Face_Type); FreeType_Exception = PyErr_NewException("fast_data_types.FreeTypeError", NULL, NULL); if (FreeType_Exception == NULL) return false; if (PyModule_AddObject(m, "FreeTypeError", FreeType_Exception) != 0) return false; int error = FT_Init_FreeType(&library); if (error) { set_freetype_error("Failed to initialize FreeType library, with error:", error); return false; } if (Py_AtExit(free_freetype) != 0) { PyErr_SetString(FreeType_Exception, "Failed to register the freetype library at exit handler"); return false; } return true; } // }}} kitty-0.15.0/kitty/gl-wrapper.c000066400000000000000000000000671356737523400163530ustar00rootroot00000000000000#define GLAD_GL_IMPLEMENTATION #include "gl-wrapper.h" kitty-0.15.0/kitty/gl-wrapper.h000066400000000000000000015616321356737523400163730ustar00rootroot00000000000000/** * Loader generated by glad 2.0.0-beta on Sun Jul 7 20:35:06 2019 * * Generator: C/C++ * Specification: gl * Extensions: 5 * * APIs: * - gl:core=3.3 * * Options: * - MX_GLOBAL = False * - ON_DEMAND = False * - LOADER = False * - ALIAS = False * - HEADER_ONLY = True * - DEBUG = True * - MX = False * * Commandline: * --api='gl:core=3.3' --extensions='GL_ARB_copy_image,GL_ARB_multisample,GL_ARB_robustness,GL_ARB_texture_storage,GL_KHR_debug' c --header-only --debug * * Online: * http://glad.sh/#api=gl%3Acore%3D3.3&extensions=GL_ARB_copy_image%2CGL_ARB_multisample%2CGL_ARB_robustness%2CGL_ARB_texture_storage%2CGL_KHR_debug&generator=c&options=HEADER_ONLY%2CDEBUG * */ #ifndef GLAD_GL_H_ #define GLAD_GL_H_ #ifdef __gl_h_ #error OpenGL header already included (API: gl), remove previous include! #endif #define __gl_h_ 1 #define GLAD_GL #define GLAD_OPTION_GL_HEADER_ONLY #define GLAD_OPTION_GL_DEBUG #ifdef __cplusplus extern "C" { #endif #ifndef GLAD_PLATFORM_H_ #define GLAD_PLATFORM_H_ #ifndef GLAD_PLATFORM_WIN32 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) #define GLAD_PLATFORM_WIN32 1 #else #define GLAD_PLATFORM_WIN32 0 #endif #endif #ifndef GLAD_PLATFORM_APPLE #ifdef __APPLE__ #define GLAD_PLATFORM_APPLE 1 #else #define GLAD_PLATFORM_APPLE 0 #endif #endif #ifndef GLAD_PLATFORM_EMSCRIPTEN #ifdef __EMSCRIPTEN__ #define GLAD_PLATFORM_EMSCRIPTEN 1 #else #define GLAD_PLATFORM_EMSCRIPTEN 0 #endif #endif #ifndef GLAD_PLATFORM_UWP #if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) #ifdef __has_include #if __has_include() #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 #endif #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 #endif #endif #ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY #include #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #define GLAD_PLATFORM_UWP 1 #endif #endif #ifndef GLAD_PLATFORM_UWP #define GLAD_PLATFORM_UWP 0 #endif #endif #ifdef __GNUC__ #define GLAD_GNUC_EXTENSION __extension__ #else #define GLAD_GNUC_EXTENSION #endif #ifndef GLAD_API_CALL #if defined(GLAD_API_CALL_EXPORT) #if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) #if defined(GLAD_API_CALL_EXPORT_BUILD) #if defined(__GNUC__) #define GLAD_API_CALL __attribute__ ((dllexport)) extern #else #define GLAD_API_CALL __declspec(dllexport) extern #endif #else #if defined(__GNUC__) #define GLAD_API_CALL __attribute__ ((dllimport)) extern #else #define GLAD_API_CALL __declspec(dllimport) extern #endif #endif #elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) #define GLAD_API_CALL __attribute__ ((visibility ("default"))) extern #else #define GLAD_API_CALL extern #endif #else #define GLAD_API_CALL extern #endif #endif #ifdef APIENTRY #define GLAD_API_PTR APIENTRY #elif GLAD_PLATFORM_WIN32 #define GLAD_API_PTR __stdcall #else #define GLAD_API_PTR #endif #ifndef GLAPI #define GLAPI GLAD_API_CALL #endif #ifndef GLAPIENTRY #define GLAPIENTRY GLAD_API_PTR #endif #define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) #define GLAD_VERSION_MAJOR(version) (version / 10000) #define GLAD_VERSION_MINOR(version) (version % 10000) #define GLAD_GENERATOR_VERSION "2.0.0-beta" typedef void (*GLADapiproc)(void); typedef GLADapiproc (*GLADloadfunc)(const char *name); typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...); #endif /* GLAD_PLATFORM_H_ */ #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_ALPHA 0x1906 #define GL_ALREADY_SIGNALED 0x911A #define GL_ALWAYS 0x0207 #define GL_AND 0x1501 #define GL_AND_INVERTED 0x1504 #define GL_AND_REVERSE 0x1502 #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_ARRAY_BUFFER 0x8892 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_BACK 0x0405 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_BGRA_INTEGER 0x8D9B #define GL_BGR_INTEGER 0x8D9A #define GL_BLEND 0x0BE2 #define GL_BLEND_COLOR 0x8005 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_EQUATION 0x8009 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLUE 0x1905 #define GL_BLUE_INTEGER 0x8D96 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_BUFFER 0x82E0 #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_BYTE 0x1400 #define GL_CCW 0x0901 #define GL_CLAMP_READ_COLOR 0x891C #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLAMP_TO_EDGE 0x812F #define GL_CLEAR 0x1500 #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_COLOR 0x1800 #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_COMPILE_STATUS 0x8B81 #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_RG 0x8226 #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CONDITION_SATISFIED 0x911C #define GL_CONSTANT_ALPHA 0x8003 #define GL_CONSTANT_COLOR 0x8001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_FLAGS 0x821E #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_CONTEXT_PROFILE_MASK 0x9126 #define GL_COPY 0x1503 #define GL_COPY_INVERTED 0x150C #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_CURRENT_PROGRAM 0x8B8D #define GL_CURRENT_QUERY 0x8865 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_CW 0x0900 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DECR 0x1E03 #define GL_DECR_WRAP 0x8508 #define GL_DELETE_STATUS 0x8B80 #define GL_DEPTH 0x1801 #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_DEPTH_CLAMP 0x864F #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_COMPONENT 0x1902 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH_FUNC 0x0B74 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_STENCIL 0x84F9 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DITHER 0x0BD0 #define GL_DONT_CARE 0x1100 #define GL_DOUBLE 0x140A #define GL_DOUBLEBUFFER 0x0C32 #define GL_DRAW_BUFFER 0x0C01 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DST_ALPHA 0x0304 #define GL_DST_COLOR 0x0306 #define GL_DYNAMIC_COPY 0x88EA #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_EQUAL 0x0202 #define GL_EQUIV 0x1509 #define GL_EXTENSIONS 0x1F03 #define GL_FALSE 0 #define GL_FASTEST 0x1101 #define GL_FILL 0x1B02 #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_FIXED_ONLY 0x891D #define GL_FLOAT 0x1406 #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4 0x8B5C #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_FRAMEBUFFER 0x8D40 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_FRONT 0x0404 #define GL_FRONT_AND_BACK 0x0408 #define GL_FRONT_FACE 0x0B46 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_FUNC_SUBTRACT 0x800A #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEQUAL 0x0206 #define GL_GREATER 0x0204 #define GL_GREEN 0x1904 #define GL_GREEN_INTEGER 0x8D95 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_HALF_FLOAT 0x140B #define GL_INCR 0x1E02 #define GL_INCR_WRAP 0x8507 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_INT 0x1404 #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_INT_2_10_10_10_REV 0x8D9F #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_INVALID_INDEX 0xFFFFFFFF #define GL_INVALID_OPERATION 0x0502 #define GL_INVALID_VALUE 0x0501 #define GL_INVERT 0x150A #define GL_KEEP 0x1E00 #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_LEFT 0x0406 #define GL_LEQUAL 0x0203 #define GL_LESS 0x0201 #define GL_LINE 0x1B01 #define GL_LINEAR 0x2601 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_LINES 0x0001 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_LOOP 0x0002 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_LINE_STRIP 0x0003 #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINK_STATUS 0x8B82 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_LOWER_LEFT 0x8CA1 #define GL_MAJOR_VERSION 0x821B #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAX 0x8008 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_INTEGER_SAMPLES 0x9110 #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_MAX_SAMPLES 0x8D57 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MIN 0x8007 #define GL_MINOR_VERSION 0x821C #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MULTISAMPLE 0x809D #define GL_MULTISAMPLE_ARB 0x809D #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #define GL_NAND 0x150E #define GL_NEAREST 0x2600 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_NEVER 0x0200 #define GL_NICEST 0x1102 #define GL_NONE 0 #define GL_NOOP 0x1505 #define GL_NOR 0x1508 #define GL_NOTEQUAL 0x0205 #define GL_NO_ERROR 0 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_NUM_EXTENSIONS 0x821D #define GL_OBJECT_TYPE 0x9112 #define GL_ONE 1 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_OR 0x1507 #define GL_OR_INVERTED 0x150D #define GL_OR_REVERSE 0x150B #define GL_OUT_OF_MEMORY 0x0505 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_POINT 0x1B00 #define GL_POINTS 0x0000 #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_PROGRAM 0x82E2 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_PROVOKING_VERTEX 0x8E4F #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_QUERY 0x82E3 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_QUERY_WAIT 0x8E13 #define GL_R11F_G11F_B10F 0x8C3A #define GL_R16 0x822A #define GL_R16F 0x822D #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R16_SNORM 0x8F98 #define GL_R32F 0x822E #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_R3_G3_B2 0x2A10 #define GL_R8 0x8229 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R8_SNORM 0x8F94 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_READ_BUFFER 0x0C02 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_READ_ONLY 0x88B8 #define GL_READ_WRITE 0x88BA #define GL_RED 0x1903 #define GL_RED_INTEGER 0x8D94 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERER 0x1F01 #define GL_REPEAT 0x2901 #define GL_REPLACE 0x1E01 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_RG 0x8227 #define GL_RG16 0x822C #define GL_RG16F 0x822F #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG16_SNORM 0x8F99 #define GL_RG32F 0x8230 #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GL_RG8 0x822B #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG8_SNORM 0x8F95 #define GL_RGB 0x1907 #define GL_RGB10 0x8052 #define GL_RGB10_A2 0x8059 #define GL_RGB10_A2UI 0x906F #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGB16F 0x881B #define GL_RGB16I 0x8D89 #define GL_RGB16UI 0x8D77 #define GL_RGB16_SNORM 0x8F9A #define GL_RGB32F 0x8815 #define GL_RGB32I 0x8D83 #define GL_RGB32UI 0x8D71 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB5_A1 0x8057 #define GL_RGB8 0x8051 #define GL_RGB8I 0x8D8F #define GL_RGB8UI 0x8D7D #define GL_RGB8_SNORM 0x8F96 #define GL_RGB9_E5 0x8C3D #define GL_RGBA 0x1908 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_RGBA16F 0x881A #define GL_RGBA16I 0x8D88 #define GL_RGBA16UI 0x8D76 #define GL_RGBA16_SNORM 0x8F9B #define GL_RGBA2 0x8055 #define GL_RGBA32F 0x8814 #define GL_RGBA32I 0x8D82 #define GL_RGBA32UI 0x8D70 #define GL_RGBA4 0x8056 #define GL_RGBA8 0x8058 #define GL_RGBA8I 0x8D8E #define GL_RGBA8UI 0x8D7C #define GL_RGBA8_SNORM 0x8F97 #define GL_RGBA_INTEGER 0x8D99 #define GL_RGB_INTEGER 0x8D98 #define GL_RG_INTEGER 0x8228 #define GL_RIGHT 0x0407 #define GL_SAMPLER 0x82E6 #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_BINDING 0x8919 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_SAMPLES 0x80A9 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLES_PASSED 0x8914 #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_SET 0x150F #define GL_SHADER 0x82E1 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_SHADER_TYPE 0x8B4F #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_SHORT 0x1402 #define GL_SIGNALED 0x9119 #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SRC1_ALPHA 0x8589 #define GL_SRC1_COLOR 0x88F9 #define GL_SRC_ALPHA 0x0302 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_SRC_COLOR 0x0300 #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_SRGB_ALPHA 0x8C42 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_STATIC_COPY 0x88E6 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STENCIL 0x1802 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_INDEX 0x1901 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX16 0x8D49 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STEREO 0x0C33 #define GL_STREAM_COPY 0x88E2 #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_SUBPIXEL_BITS 0x0D50 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_SYNC_STATUS 0x9114 #define GL_TEXTURE 0x1702 #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_TEXTURE_3D 0x806F #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TIMEOUT_EXPIRED 0x911B #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF #define GL_TIMESTAMP 0x8E28 #define GL_TIME_ELAPSED 0x88BF #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_FAN 0x0006 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_TRUE 1 #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNSIGNALED 0x9118 #define GL_UNSIGNED_BYTE 0x1401 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_INT 0x1405 #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_UNSIGNED_SHORT 0x1403 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UPPER_LEFT 0x8CA2 #define GL_VALIDATE_STATUS 0x8B83 #define GL_VENDOR 0x1F00 #define GL_VERSION 0x1F02 #define GL_VERTEX_ARRAY 0x8074 #define GL_VERTEX_ARRAY_BINDING 0x85B5 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_SHADER 0x8B31 #define GL_VIEWPORT 0x0BA2 #define GL_WAIT_FAILED 0x911D #define GL_WRITE_ONLY 0x88B9 #define GL_XOR 0x1506 #define GL_ZERO 0 #ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_GLAD_API_PTR * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_GLAD_API_PTR funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_GLAD_API_PTR *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(KHRONOS_STATIC) /* Win32 but not WinCE */ # define KHRONOS_GLAD_API_PTR __stdcall #else # define KHRONOS_GLAD_API_PTR #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef _WIN64 typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef khronos_int8_t GLbyte; typedef khronos_uint8_t GLubyte; typedef khronos_int16_t GLshort; typedef khronos_uint16_t GLushort; typedef int GLint; typedef unsigned int GLuint; typedef khronos_int32_t GLclampx; typedef int GLsizei; typedef khronos_float_t GLfloat; typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; typedef void *GLeglImageOES; typedef char GLchar; typedef char GLcharARB; #ifdef __APPLE__ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif typedef khronos_uint16_t GLhalf; typedef khronos_uint16_t GLhalfARB; typedef khronos_int32_t GLfixed; #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_intptr_t GLintptr; #else typedef khronos_intptr_t GLintptr; #endif #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_intptr_t GLintptrARB; #else typedef khronos_intptr_t GLintptrARB; #endif #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_ssize_t GLsizeiptr; #else typedef khronos_ssize_t GLsizeiptr; #endif #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) typedef khronos_ssize_t GLsizeiptrARB; #else typedef khronos_ssize_t GLsizeiptrARB; #endif typedef khronos_int64_t GLint64; typedef khronos_int64_t GLint64EXT; typedef khronos_uint64_t GLuint64; typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; typedef void ( *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void ( *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void ( *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); typedef void ( *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; typedef void ( *GLVULKANPROCNV)(void); #define GL_VERSION_1_0 1 GLAD_API_CALL int GLAD_GL_VERSION_1_0; #define GL_VERSION_1_1 1 GLAD_API_CALL int GLAD_GL_VERSION_1_1; #define GL_VERSION_1_2 1 GLAD_API_CALL int GLAD_GL_VERSION_1_2; #define GL_VERSION_1_3 1 GLAD_API_CALL int GLAD_GL_VERSION_1_3; #define GL_VERSION_1_4 1 GLAD_API_CALL int GLAD_GL_VERSION_1_4; #define GL_VERSION_1_5 1 GLAD_API_CALL int GLAD_GL_VERSION_1_5; #define GL_VERSION_2_0 1 GLAD_API_CALL int GLAD_GL_VERSION_2_0; #define GL_VERSION_2_1 1 GLAD_API_CALL int GLAD_GL_VERSION_2_1; #define GL_VERSION_3_0 1 GLAD_API_CALL int GLAD_GL_VERSION_3_0; #define GL_VERSION_3_1 1 GLAD_API_CALL int GLAD_GL_VERSION_3_1; #define GL_VERSION_3_2 1 GLAD_API_CALL int GLAD_GL_VERSION_3_2; #define GL_VERSION_3_3 1 GLAD_API_CALL int GLAD_GL_VERSION_3_3; #define GL_ARB_copy_image 1 GLAD_API_CALL int GLAD_GL_ARB_copy_image; #define GL_ARB_multisample 1 GLAD_API_CALL int GLAD_GL_ARB_multisample; #define GL_ARB_robustness 1 GLAD_API_CALL int GLAD_GL_ARB_robustness; #define GL_ARB_texture_storage 1 GLAD_API_CALL int GLAD_GL_ARB_texture_storage; #define GL_KHR_debug 1 GLAD_API_CALL int GLAD_GL_KHR_debug; typedef void (GLAD_API_PTR *PFNGLACTIVETEXTUREPROC)(GLenum texture); typedef void (GLAD_API_PTR *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); typedef void (GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); typedef void (GLAD_API_PTR *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); typedef void (GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); typedef void (GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); typedef void (GLAD_API_PTR *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); typedef void (GLAD_API_PTR *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); typedef void (GLAD_API_PTR *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); typedef void (GLAD_API_PTR *PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); typedef void (GLAD_API_PTR *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); typedef void (GLAD_API_PTR *PFNGLBINDVERTEXARRAYPROC)(GLuint array); typedef void (GLAD_API_PTR *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONPROC)(GLenum mode); typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); typedef void (GLAD_API_PTR *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (GLAD_API_PTR *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (GLAD_API_PTR *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); typedef void (GLAD_API_PTR *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); typedef GLenum (GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); typedef void (GLAD_API_PTR *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); typedef void (GLAD_API_PTR *PFNGLCLEARPROC)(GLbitfield mask); typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint * value); typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHPROC)(GLdouble depth); typedef void (GLAD_API_PTR *PFNGLCLEARSTENCILPROC)(GLint s); typedef GLenum (GLAD_API_PTR *PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (GLAD_API_PTR *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); typedef void (GLAD_API_PTR *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (GLAD_API_PTR *PFNGLCOMPILESHADERPROC)(GLuint shader); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); typedef void (GLAD_API_PTR *PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (GLAD_API_PTR *PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef GLuint (GLAD_API_PTR *PFNGLCREATEPROGRAMPROC)(void); typedef GLuint (GLAD_API_PTR *PFNGLCREATESHADERPROC)(GLenum type); typedef void (GLAD_API_PTR *PFNGLCULLFACEPROC)(GLenum mode); typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void * userParam); typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); typedef void (GLAD_API_PTR *PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); typedef void (GLAD_API_PTR *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); typedef void (GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMPROC)(GLuint program); typedef void (GLAD_API_PTR *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); typedef void (GLAD_API_PTR *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); typedef void (GLAD_API_PTR *PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint * samplers); typedef void (GLAD_API_PTR *PFNGLDELETESHADERPROC)(GLuint shader); typedef void (GLAD_API_PTR *PFNGLDELETESYNCPROC)(GLsync sync); typedef void (GLAD_API_PTR *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint * textures); typedef void (GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); typedef void (GLAD_API_PTR *PFNGLDEPTHFUNCPROC)(GLenum func); typedef void (GLAD_API_PTR *PFNGLDEPTHMASKPROC)(GLboolean flag); typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); typedef void (GLAD_API_PTR *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); typedef void (GLAD_API_PTR *PFNGLDISABLEPROC)(GLenum cap); typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); typedef void (GLAD_API_PTR *PFNGLDISABLEIPROC)(GLenum target, GLuint index); typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERPROC)(GLenum buf); typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices); typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); typedef void (GLAD_API_PTR *PFNGLENABLEPROC)(GLenum cap); typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); typedef void (GLAD_API_PTR *PFNGLENABLEIPROC)(GLenum target, GLuint index); typedef void (GLAD_API_PTR *PFNGLENDCONDITIONALRENDERPROC)(void); typedef void (GLAD_API_PTR *PFNGLENDQUERYPROC)(GLenum target); typedef void (GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKPROC)(void); typedef GLsync (GLAD_API_PTR *PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); typedef void (GLAD_API_PTR *PFNGLFINISHPROC)(void); typedef void (GLAD_API_PTR *PFNGLFLUSHPROC)(void); typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (GLAD_API_PTR *PFNGLFRONTFACEPROC)(GLenum mode); typedef void (GLAD_API_PTR *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); typedef void (GLAD_API_PTR *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); typedef void (GLAD_API_PTR *PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); typedef void (GLAD_API_PTR *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); typedef void (GLAD_API_PTR *PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint * samplers); typedef void (GLAD_API_PTR *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint * textures); typedef void (GLAD_API_PTR *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); typedef void (GLAD_API_PTR *PFNGLGENERATEMIPMAPPROC)(GLenum target); typedef void (GLAD_API_PTR *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); typedef GLint (GLAD_API_PTR *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean * data); typedef void (GLAD_API_PTR *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean * data); typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 * params); typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void ** params); typedef void (GLAD_API_PTR *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void * img); typedef GLuint (GLAD_API_PTR *PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); typedef void (GLAD_API_PTR *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble * data); typedef GLenum (GLAD_API_PTR *PFNGLGETERRORPROC)(void); typedef void (GLAD_API_PTR *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat * data); typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar * name); typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); typedef GLenum (GLAD_API_PTR *PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); typedef void (GLAD_API_PTR *PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 * data); typedef void (GLAD_API_PTR *PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 * data); typedef void (GLAD_API_PTR *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); typedef void (GLAD_API_PTR *PFNGLGETINTEGERVPROC)(GLenum pname, GLint * data); typedef void (GLAD_API_PTR *PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat * val); typedef void (GLAD_API_PTR *PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); typedef void (GLAD_API_PTR *PFNGLGETOBJECTPTRLABELPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); typedef void (GLAD_API_PTR *PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); typedef void (GLAD_API_PTR *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); typedef void (GLAD_API_PTR *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 * params); typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 * params); typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); typedef void (GLAD_API_PTR *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint * params); typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); typedef void (GLAD_API_PTR *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); typedef void (GLAD_API_PTR *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * params); typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGPROC)(GLenum name); typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); typedef void (GLAD_API_PTR *PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); typedef void (GLAD_API_PTR *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint * params); typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); typedef GLuint (GLAD_API_PTR *PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar * uniformBlockName); typedef void (GLAD_API_PTR *PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); typedef GLint (GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); typedef void (GLAD_API_PTR *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint * params); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint * params); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void ** pointer); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble * params); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void * img); typedef void (GLAD_API_PTR *PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); typedef void (GLAD_API_PTR *PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); typedef void (GLAD_API_PTR *PFNGLHINTPROC)(GLenum target, GLenum mode); typedef GLboolean (GLAD_API_PTR *PFNGLISBUFFERPROC)(GLuint buffer); typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDPROC)(GLenum cap); typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); typedef GLboolean (GLAD_API_PTR *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMPROC)(GLuint program); typedef GLboolean (GLAD_API_PTR *PFNGLISQUERYPROC)(GLuint id); typedef GLboolean (GLAD_API_PTR *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); typedef GLboolean (GLAD_API_PTR *PFNGLISSAMPLERPROC)(GLuint sampler); typedef GLboolean (GLAD_API_PTR *PFNGLISSHADERPROC)(GLuint shader); typedef GLboolean (GLAD_API_PTR *PFNGLISSYNCPROC)(GLsync sync); typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREPROC)(GLuint texture); typedef GLboolean (GLAD_API_PTR *PFNGLISVERTEXARRAYPROC)(GLuint array); typedef void (GLAD_API_PTR *PFNGLLINEWIDTHPROC)(GLfloat width); typedef void (GLAD_API_PTR *PFNGLLINKPROGRAMPROC)(GLuint program); typedef void (GLAD_API_PTR *PFNGLLOGICOPPROC)(GLenum opcode); typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); typedef void (GLAD_API_PTR *PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); typedef void (GLAD_API_PTR *PFNGLOBJECTPTRLABELPROC)(const void * ptr, GLsizei length, const GLchar * label); typedef void (GLAD_API_PTR *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); typedef void (GLAD_API_PTR *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); typedef void (GLAD_API_PTR *PFNGLPOINTSIZEPROC)(GLfloat size); typedef void (GLAD_API_PTR *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); typedef void (GLAD_API_PTR *PFNGLPOPDEBUGGROUPPROC)(void); typedef void (GLAD_API_PTR *PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); typedef void (GLAD_API_PTR *PFNGLPROVOKINGVERTEXPROC)(GLenum mode); typedef void (GLAD_API_PTR *PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); typedef void (GLAD_API_PTR *PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); typedef void (GLAD_API_PTR *PFNGLREADBUFFERPROC)(GLenum src); typedef void (GLAD_API_PTR *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); typedef void (GLAD_API_PTR *PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); typedef void (GLAD_API_PTR *PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); typedef void (GLAD_API_PTR *PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); typedef void (GLAD_API_PTR *PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint * param); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint * param); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat * param); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); typedef void (GLAD_API_PTR *PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint * param); typedef void (GLAD_API_PTR *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (GLAD_API_PTR *PFNGLSTENCILMASKPROC)(GLuint mask); typedef void (GLAD_API_PTR *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); typedef void (GLAD_API_PTR *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); typedef void (GLAD_API_PTR *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (GLAD_API_PTR *PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); typedef void (GLAD_API_PTR *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint * params); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint * params); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); typedef void (GLAD_API_PTR *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); typedef void (GLAD_API_PTR *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); typedef void (GLAD_API_PTR *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); typedef void (GLAD_API_PTR *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); typedef void (GLAD_API_PTR *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (GLAD_API_PTR *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); typedef void (GLAD_API_PTR *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (GLAD_API_PTR *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (GLAD_API_PTR *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPBUFFERPROC)(GLenum target); typedef void (GLAD_API_PTR *PFNGLUSEPROGRAMPROC)(GLuint program); typedef void (GLAD_API_PTR *PFNGLVALIDATEPROGRAMPROC)(GLuint program); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort * v); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); typedef void (GLAD_API_PTR *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GLAD_API_PTR *PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); GLAD_API_CALL PFNGLACTIVETEXTUREPROC glad_glActiveTexture; GLAD_API_CALL PFNGLACTIVETEXTUREPROC glad_debug_glActiveTexture; #define glActiveTexture glad_debug_glActiveTexture GLAD_API_CALL PFNGLATTACHSHADERPROC glad_glAttachShader; GLAD_API_CALL PFNGLATTACHSHADERPROC glad_debug_glAttachShader; #define glAttachShader glad_debug_glAttachShader GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERPROC glad_debug_glBeginConditionalRender; #define glBeginConditionalRender glad_debug_glBeginConditionalRender GLAD_API_CALL PFNGLBEGINQUERYPROC glad_glBeginQuery; GLAD_API_CALL PFNGLBEGINQUERYPROC glad_debug_glBeginQuery; #define glBeginQuery glad_debug_glBeginQuery GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKPROC glad_debug_glBeginTransformFeedback; #define glBeginTransformFeedback glad_debug_glBeginTransformFeedback GLAD_API_CALL PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; GLAD_API_CALL PFNGLBINDATTRIBLOCATIONPROC glad_debug_glBindAttribLocation; #define glBindAttribLocation glad_debug_glBindAttribLocation GLAD_API_CALL PFNGLBINDBUFFERPROC glad_glBindBuffer; GLAD_API_CALL PFNGLBINDBUFFERPROC glad_debug_glBindBuffer; #define glBindBuffer glad_debug_glBindBuffer GLAD_API_CALL PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; GLAD_API_CALL PFNGLBINDBUFFERBASEPROC glad_debug_glBindBufferBase; #define glBindBufferBase glad_debug_glBindBufferBase GLAD_API_CALL PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; GLAD_API_CALL PFNGLBINDBUFFERRANGEPROC glad_debug_glBindBufferRange; #define glBindBufferRange glad_debug_glBindBufferRange GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONPROC glad_debug_glBindFragDataLocation; #define glBindFragDataLocation glad_debug_glBindFragDataLocation GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_debug_glBindFragDataLocationIndexed; #define glBindFragDataLocationIndexed glad_debug_glBindFragDataLocationIndexed GLAD_API_CALL PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; GLAD_API_CALL PFNGLBINDFRAMEBUFFERPROC glad_debug_glBindFramebuffer; #define glBindFramebuffer glad_debug_glBindFramebuffer GLAD_API_CALL PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; GLAD_API_CALL PFNGLBINDRENDERBUFFERPROC glad_debug_glBindRenderbuffer; #define glBindRenderbuffer glad_debug_glBindRenderbuffer GLAD_API_CALL PFNGLBINDSAMPLERPROC glad_glBindSampler; GLAD_API_CALL PFNGLBINDSAMPLERPROC glad_debug_glBindSampler; #define glBindSampler glad_debug_glBindSampler GLAD_API_CALL PFNGLBINDTEXTUREPROC glad_glBindTexture; GLAD_API_CALL PFNGLBINDTEXTUREPROC glad_debug_glBindTexture; #define glBindTexture glad_debug_glBindTexture GLAD_API_CALL PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; GLAD_API_CALL PFNGLBINDVERTEXARRAYPROC glad_debug_glBindVertexArray; #define glBindVertexArray glad_debug_glBindVertexArray GLAD_API_CALL PFNGLBLENDCOLORPROC glad_glBlendColor; GLAD_API_CALL PFNGLBLENDCOLORPROC glad_debug_glBlendColor; #define glBlendColor glad_debug_glBlendColor GLAD_API_CALL PFNGLBLENDEQUATIONPROC glad_glBlendEquation; GLAD_API_CALL PFNGLBLENDEQUATIONPROC glad_debug_glBlendEquation; #define glBlendEquation glad_debug_glBlendEquation GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEPROC glad_debug_glBlendEquationSeparate; #define glBlendEquationSeparate glad_debug_glBlendEquationSeparate GLAD_API_CALL PFNGLBLENDFUNCPROC glad_glBlendFunc; GLAD_API_CALL PFNGLBLENDFUNCPROC glad_debug_glBlendFunc; #define glBlendFunc glad_debug_glBlendFunc GLAD_API_CALL PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; GLAD_API_CALL PFNGLBLENDFUNCSEPARATEPROC glad_debug_glBlendFuncSeparate; #define glBlendFuncSeparate glad_debug_glBlendFuncSeparate GLAD_API_CALL PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; GLAD_API_CALL PFNGLBLITFRAMEBUFFERPROC glad_debug_glBlitFramebuffer; #define glBlitFramebuffer glad_debug_glBlitFramebuffer GLAD_API_CALL PFNGLBUFFERDATAPROC glad_glBufferData; GLAD_API_CALL PFNGLBUFFERDATAPROC glad_debug_glBufferData; #define glBufferData glad_debug_glBufferData GLAD_API_CALL PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; GLAD_API_CALL PFNGLBUFFERSUBDATAPROC glad_debug_glBufferSubData; #define glBufferSubData glad_debug_glBufferSubData GLAD_API_CALL PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; GLAD_API_CALL PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_debug_glCheckFramebufferStatus; #define glCheckFramebufferStatus glad_debug_glCheckFramebufferStatus GLAD_API_CALL PFNGLCLAMPCOLORPROC glad_glClampColor; GLAD_API_CALL PFNGLCLAMPCOLORPROC glad_debug_glClampColor; #define glClampColor glad_debug_glClampColor GLAD_API_CALL PFNGLCLEARPROC glad_glClear; GLAD_API_CALL PFNGLCLEARPROC glad_debug_glClear; #define glClear glad_debug_glClear GLAD_API_CALL PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; GLAD_API_CALL PFNGLCLEARBUFFERFIPROC glad_debug_glClearBufferfi; #define glClearBufferfi glad_debug_glClearBufferfi GLAD_API_CALL PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; GLAD_API_CALL PFNGLCLEARBUFFERFVPROC glad_debug_glClearBufferfv; #define glClearBufferfv glad_debug_glClearBufferfv GLAD_API_CALL PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; GLAD_API_CALL PFNGLCLEARBUFFERIVPROC glad_debug_glClearBufferiv; #define glClearBufferiv glad_debug_glClearBufferiv GLAD_API_CALL PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; GLAD_API_CALL PFNGLCLEARBUFFERUIVPROC glad_debug_glClearBufferuiv; #define glClearBufferuiv glad_debug_glClearBufferuiv GLAD_API_CALL PFNGLCLEARCOLORPROC glad_glClearColor; GLAD_API_CALL PFNGLCLEARCOLORPROC glad_debug_glClearColor; #define glClearColor glad_debug_glClearColor GLAD_API_CALL PFNGLCLEARDEPTHPROC glad_glClearDepth; GLAD_API_CALL PFNGLCLEARDEPTHPROC glad_debug_glClearDepth; #define glClearDepth glad_debug_glClearDepth GLAD_API_CALL PFNGLCLEARSTENCILPROC glad_glClearStencil; GLAD_API_CALL PFNGLCLEARSTENCILPROC glad_debug_glClearStencil; #define glClearStencil glad_debug_glClearStencil GLAD_API_CALL PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; GLAD_API_CALL PFNGLCLIENTWAITSYNCPROC glad_debug_glClientWaitSync; #define glClientWaitSync glad_debug_glClientWaitSync GLAD_API_CALL PFNGLCOLORMASKPROC glad_glColorMask; GLAD_API_CALL PFNGLCOLORMASKPROC glad_debug_glColorMask; #define glColorMask glad_debug_glColorMask GLAD_API_CALL PFNGLCOLORMASKIPROC glad_glColorMaski; GLAD_API_CALL PFNGLCOLORMASKIPROC glad_debug_glColorMaski; #define glColorMaski glad_debug_glColorMaski GLAD_API_CALL PFNGLCOMPILESHADERPROC glad_glCompileShader; GLAD_API_CALL PFNGLCOMPILESHADERPROC glad_debug_glCompileShader; #define glCompileShader glad_debug_glCompileShader GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_debug_glCompressedTexImage1D; #define glCompressedTexImage1D glad_debug_glCompressedTexImage1D GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_debug_glCompressedTexImage2D; #define glCompressedTexImage2D glad_debug_glCompressedTexImage2D GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_debug_glCompressedTexImage3D; #define glCompressedTexImage3D glad_debug_glCompressedTexImage3D GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_debug_glCompressedTexSubImage1D; #define glCompressedTexSubImage1D glad_debug_glCompressedTexSubImage1D GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_debug_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D glad_debug_glCompressedTexSubImage2D GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_debug_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D glad_debug_glCompressedTexSubImage3D GLAD_API_CALL PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; GLAD_API_CALL PFNGLCOPYBUFFERSUBDATAPROC glad_debug_glCopyBufferSubData; #define glCopyBufferSubData glad_debug_glCopyBufferSubData GLAD_API_CALL PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; GLAD_API_CALL PFNGLCOPYIMAGESUBDATAPROC glad_debug_glCopyImageSubData; #define glCopyImageSubData glad_debug_glCopyImageSubData GLAD_API_CALL PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; GLAD_API_CALL PFNGLCOPYTEXIMAGE1DPROC glad_debug_glCopyTexImage1D; #define glCopyTexImage1D glad_debug_glCopyTexImage1D GLAD_API_CALL PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; GLAD_API_CALL PFNGLCOPYTEXIMAGE2DPROC glad_debug_glCopyTexImage2D; #define glCopyTexImage2D glad_debug_glCopyTexImage2D GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE1DPROC glad_debug_glCopyTexSubImage1D; #define glCopyTexSubImage1D glad_debug_glCopyTexSubImage1D GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE2DPROC glad_debug_glCopyTexSubImage2D; #define glCopyTexSubImage2D glad_debug_glCopyTexSubImage2D GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE3DPROC glad_debug_glCopyTexSubImage3D; #define glCopyTexSubImage3D glad_debug_glCopyTexSubImage3D GLAD_API_CALL PFNGLCREATEPROGRAMPROC glad_glCreateProgram; GLAD_API_CALL PFNGLCREATEPROGRAMPROC glad_debug_glCreateProgram; #define glCreateProgram glad_debug_glCreateProgram GLAD_API_CALL PFNGLCREATESHADERPROC glad_glCreateShader; GLAD_API_CALL PFNGLCREATESHADERPROC glad_debug_glCreateShader; #define glCreateShader glad_debug_glCreateShader GLAD_API_CALL PFNGLCULLFACEPROC glad_glCullFace; GLAD_API_CALL PFNGLCULLFACEPROC glad_debug_glCullFace; #define glCullFace glad_debug_glCullFace GLAD_API_CALL PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; GLAD_API_CALL PFNGLDEBUGMESSAGECALLBACKPROC glad_debug_glDebugMessageCallback; #define glDebugMessageCallback glad_debug_glDebugMessageCallback GLAD_API_CALL PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; GLAD_API_CALL PFNGLDEBUGMESSAGECONTROLPROC glad_debug_glDebugMessageControl; #define glDebugMessageControl glad_debug_glDebugMessageControl GLAD_API_CALL PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; GLAD_API_CALL PFNGLDEBUGMESSAGEINSERTPROC glad_debug_glDebugMessageInsert; #define glDebugMessageInsert glad_debug_glDebugMessageInsert GLAD_API_CALL PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; GLAD_API_CALL PFNGLDELETEBUFFERSPROC glad_debug_glDeleteBuffers; #define glDeleteBuffers glad_debug_glDeleteBuffers GLAD_API_CALL PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; GLAD_API_CALL PFNGLDELETEFRAMEBUFFERSPROC glad_debug_glDeleteFramebuffers; #define glDeleteFramebuffers glad_debug_glDeleteFramebuffers GLAD_API_CALL PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; GLAD_API_CALL PFNGLDELETEPROGRAMPROC glad_debug_glDeleteProgram; #define glDeleteProgram glad_debug_glDeleteProgram GLAD_API_CALL PFNGLDELETEQUERIESPROC glad_glDeleteQueries; GLAD_API_CALL PFNGLDELETEQUERIESPROC glad_debug_glDeleteQueries; #define glDeleteQueries glad_debug_glDeleteQueries GLAD_API_CALL PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; GLAD_API_CALL PFNGLDELETERENDERBUFFERSPROC glad_debug_glDeleteRenderbuffers; #define glDeleteRenderbuffers glad_debug_glDeleteRenderbuffers GLAD_API_CALL PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; GLAD_API_CALL PFNGLDELETESAMPLERSPROC glad_debug_glDeleteSamplers; #define glDeleteSamplers glad_debug_glDeleteSamplers GLAD_API_CALL PFNGLDELETESHADERPROC glad_glDeleteShader; GLAD_API_CALL PFNGLDELETESHADERPROC glad_debug_glDeleteShader; #define glDeleteShader glad_debug_glDeleteShader GLAD_API_CALL PFNGLDELETESYNCPROC glad_glDeleteSync; GLAD_API_CALL PFNGLDELETESYNCPROC glad_debug_glDeleteSync; #define glDeleteSync glad_debug_glDeleteSync GLAD_API_CALL PFNGLDELETETEXTURESPROC glad_glDeleteTextures; GLAD_API_CALL PFNGLDELETETEXTURESPROC glad_debug_glDeleteTextures; #define glDeleteTextures glad_debug_glDeleteTextures GLAD_API_CALL PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; GLAD_API_CALL PFNGLDELETEVERTEXARRAYSPROC glad_debug_glDeleteVertexArrays; #define glDeleteVertexArrays glad_debug_glDeleteVertexArrays GLAD_API_CALL PFNGLDEPTHFUNCPROC glad_glDepthFunc; GLAD_API_CALL PFNGLDEPTHFUNCPROC glad_debug_glDepthFunc; #define glDepthFunc glad_debug_glDepthFunc GLAD_API_CALL PFNGLDEPTHMASKPROC glad_glDepthMask; GLAD_API_CALL PFNGLDEPTHMASKPROC glad_debug_glDepthMask; #define glDepthMask glad_debug_glDepthMask GLAD_API_CALL PFNGLDEPTHRANGEPROC glad_glDepthRange; GLAD_API_CALL PFNGLDEPTHRANGEPROC glad_debug_glDepthRange; #define glDepthRange glad_debug_glDepthRange GLAD_API_CALL PFNGLDETACHSHADERPROC glad_glDetachShader; GLAD_API_CALL PFNGLDETACHSHADERPROC glad_debug_glDetachShader; #define glDetachShader glad_debug_glDetachShader GLAD_API_CALL PFNGLDISABLEPROC glad_glDisable; GLAD_API_CALL PFNGLDISABLEPROC glad_debug_glDisable; #define glDisable glad_debug_glDisable GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_debug_glDisableVertexAttribArray; #define glDisableVertexAttribArray glad_debug_glDisableVertexAttribArray GLAD_API_CALL PFNGLDISABLEIPROC glad_glDisablei; GLAD_API_CALL PFNGLDISABLEIPROC glad_debug_glDisablei; #define glDisablei glad_debug_glDisablei GLAD_API_CALL PFNGLDRAWARRAYSPROC glad_glDrawArrays; GLAD_API_CALL PFNGLDRAWARRAYSPROC glad_debug_glDrawArrays; #define glDrawArrays glad_debug_glDrawArrays GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; GLAD_API_CALL PFNGLDRAWARRAYSINSTANCEDPROC glad_debug_glDrawArraysInstanced; #define glDrawArraysInstanced glad_debug_glDrawArraysInstanced GLAD_API_CALL PFNGLDRAWBUFFERPROC glad_glDrawBuffer; GLAD_API_CALL PFNGLDRAWBUFFERPROC glad_debug_glDrawBuffer; #define glDrawBuffer glad_debug_glDrawBuffer GLAD_API_CALL PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; GLAD_API_CALL PFNGLDRAWBUFFERSPROC glad_debug_glDrawBuffers; #define glDrawBuffers glad_debug_glDrawBuffers GLAD_API_CALL PFNGLDRAWELEMENTSPROC glad_glDrawElements; GLAD_API_CALL PFNGLDRAWELEMENTSPROC glad_debug_glDrawElements; #define glDrawElements glad_debug_glDrawElements GLAD_API_CALL PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; GLAD_API_CALL PFNGLDRAWELEMENTSBASEVERTEXPROC glad_debug_glDrawElementsBaseVertex; #define glDrawElementsBaseVertex glad_debug_glDrawElementsBaseVertex GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDPROC glad_debug_glDrawElementsInstanced; #define glDrawElementsInstanced glad_debug_glDrawElementsInstanced GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; GLAD_API_CALL PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_debug_glDrawElementsInstancedBaseVertex; #define glDrawElementsInstancedBaseVertex glad_debug_glDrawElementsInstancedBaseVertex GLAD_API_CALL PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; GLAD_API_CALL PFNGLDRAWRANGEELEMENTSPROC glad_debug_glDrawRangeElements; #define glDrawRangeElements glad_debug_glDrawRangeElements GLAD_API_CALL PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; GLAD_API_CALL PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_debug_glDrawRangeElementsBaseVertex; #define glDrawRangeElementsBaseVertex glad_debug_glDrawRangeElementsBaseVertex GLAD_API_CALL PFNGLENABLEPROC glad_glEnable; GLAD_API_CALL PFNGLENABLEPROC glad_debug_glEnable; #define glEnable glad_debug_glEnable GLAD_API_CALL PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; GLAD_API_CALL PFNGLENABLEVERTEXATTRIBARRAYPROC glad_debug_glEnableVertexAttribArray; #define glEnableVertexAttribArray glad_debug_glEnableVertexAttribArray GLAD_API_CALL PFNGLENABLEIPROC glad_glEnablei; GLAD_API_CALL PFNGLENABLEIPROC glad_debug_glEnablei; #define glEnablei glad_debug_glEnablei GLAD_API_CALL PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; GLAD_API_CALL PFNGLENDCONDITIONALRENDERPROC glad_debug_glEndConditionalRender; #define glEndConditionalRender glad_debug_glEndConditionalRender GLAD_API_CALL PFNGLENDQUERYPROC glad_glEndQuery; GLAD_API_CALL PFNGLENDQUERYPROC glad_debug_glEndQuery; #define glEndQuery glad_debug_glEndQuery GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKPROC glad_debug_glEndTransformFeedback; #define glEndTransformFeedback glad_debug_glEndTransformFeedback GLAD_API_CALL PFNGLFENCESYNCPROC glad_glFenceSync; GLAD_API_CALL PFNGLFENCESYNCPROC glad_debug_glFenceSync; #define glFenceSync glad_debug_glFenceSync GLAD_API_CALL PFNGLFINISHPROC glad_glFinish; GLAD_API_CALL PFNGLFINISHPROC glad_debug_glFinish; #define glFinish glad_debug_glFinish GLAD_API_CALL PFNGLFLUSHPROC glad_glFlush; GLAD_API_CALL PFNGLFLUSHPROC glad_debug_glFlush; #define glFlush glad_debug_glFlush GLAD_API_CALL PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; GLAD_API_CALL PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_debug_glFlushMappedBufferRange; #define glFlushMappedBufferRange glad_debug_glFlushMappedBufferRange GLAD_API_CALL PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; GLAD_API_CALL PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_debug_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer glad_debug_glFramebufferRenderbuffer GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; GLAD_API_CALL PFNGLFRAMEBUFFERTEXTUREPROC glad_debug_glFramebufferTexture; #define glFramebufferTexture glad_debug_glFramebufferTexture GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DPROC glad_debug_glFramebufferTexture1D; #define glFramebufferTexture1D glad_debug_glFramebufferTexture1D GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DPROC glad_debug_glFramebufferTexture2D; #define glFramebufferTexture2D glad_debug_glFramebufferTexture2D GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE3DPROC glad_debug_glFramebufferTexture3D; #define glFramebufferTexture3D glad_debug_glFramebufferTexture3D GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_debug_glFramebufferTextureLayer; #define glFramebufferTextureLayer glad_debug_glFramebufferTextureLayer GLAD_API_CALL PFNGLFRONTFACEPROC glad_glFrontFace; GLAD_API_CALL PFNGLFRONTFACEPROC glad_debug_glFrontFace; #define glFrontFace glad_debug_glFrontFace GLAD_API_CALL PFNGLGENBUFFERSPROC glad_glGenBuffers; GLAD_API_CALL PFNGLGENBUFFERSPROC glad_debug_glGenBuffers; #define glGenBuffers glad_debug_glGenBuffers GLAD_API_CALL PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; GLAD_API_CALL PFNGLGENFRAMEBUFFERSPROC glad_debug_glGenFramebuffers; #define glGenFramebuffers glad_debug_glGenFramebuffers GLAD_API_CALL PFNGLGENQUERIESPROC glad_glGenQueries; GLAD_API_CALL PFNGLGENQUERIESPROC glad_debug_glGenQueries; #define glGenQueries glad_debug_glGenQueries GLAD_API_CALL PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; GLAD_API_CALL PFNGLGENRENDERBUFFERSPROC glad_debug_glGenRenderbuffers; #define glGenRenderbuffers glad_debug_glGenRenderbuffers GLAD_API_CALL PFNGLGENSAMPLERSPROC glad_glGenSamplers; GLAD_API_CALL PFNGLGENSAMPLERSPROC glad_debug_glGenSamplers; #define glGenSamplers glad_debug_glGenSamplers GLAD_API_CALL PFNGLGENTEXTURESPROC glad_glGenTextures; GLAD_API_CALL PFNGLGENTEXTURESPROC glad_debug_glGenTextures; #define glGenTextures glad_debug_glGenTextures GLAD_API_CALL PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; GLAD_API_CALL PFNGLGENVERTEXARRAYSPROC glad_debug_glGenVertexArrays; #define glGenVertexArrays glad_debug_glGenVertexArrays GLAD_API_CALL PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; GLAD_API_CALL PFNGLGENERATEMIPMAPPROC glad_debug_glGenerateMipmap; #define glGenerateMipmap glad_debug_glGenerateMipmap GLAD_API_CALL PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; GLAD_API_CALL PFNGLGETACTIVEATTRIBPROC glad_debug_glGetActiveAttrib; #define glGetActiveAttrib glad_debug_glGetActiveAttrib GLAD_API_CALL PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; GLAD_API_CALL PFNGLGETACTIVEUNIFORMPROC glad_debug_glGetActiveUniform; #define glGetActiveUniform glad_debug_glGetActiveUniform GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_debug_glGetActiveUniformBlockName; #define glGetActiveUniformBlockName glad_debug_glGetActiveUniformBlockName GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; GLAD_API_CALL PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_debug_glGetActiveUniformBlockiv; #define glGetActiveUniformBlockiv glad_debug_glGetActiveUniformBlockiv GLAD_API_CALL PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; GLAD_API_CALL PFNGLGETACTIVEUNIFORMNAMEPROC glad_debug_glGetActiveUniformName; #define glGetActiveUniformName glad_debug_glGetActiveUniformName GLAD_API_CALL PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; GLAD_API_CALL PFNGLGETACTIVEUNIFORMSIVPROC glad_debug_glGetActiveUniformsiv; #define glGetActiveUniformsiv glad_debug_glGetActiveUniformsiv GLAD_API_CALL PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; GLAD_API_CALL PFNGLGETATTACHEDSHADERSPROC glad_debug_glGetAttachedShaders; #define glGetAttachedShaders glad_debug_glGetAttachedShaders GLAD_API_CALL PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; GLAD_API_CALL PFNGLGETATTRIBLOCATIONPROC glad_debug_glGetAttribLocation; #define glGetAttribLocation glad_debug_glGetAttribLocation GLAD_API_CALL PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; GLAD_API_CALL PFNGLGETBOOLEANI_VPROC glad_debug_glGetBooleani_v; #define glGetBooleani_v glad_debug_glGetBooleani_v GLAD_API_CALL PFNGLGETBOOLEANVPROC glad_glGetBooleanv; GLAD_API_CALL PFNGLGETBOOLEANVPROC glad_debug_glGetBooleanv; #define glGetBooleanv glad_debug_glGetBooleanv GLAD_API_CALL PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; GLAD_API_CALL PFNGLGETBUFFERPARAMETERI64VPROC glad_debug_glGetBufferParameteri64v; #define glGetBufferParameteri64v glad_debug_glGetBufferParameteri64v GLAD_API_CALL PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; GLAD_API_CALL PFNGLGETBUFFERPARAMETERIVPROC glad_debug_glGetBufferParameteriv; #define glGetBufferParameteriv glad_debug_glGetBufferParameteriv GLAD_API_CALL PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; GLAD_API_CALL PFNGLGETBUFFERPOINTERVPROC glad_debug_glGetBufferPointerv; #define glGetBufferPointerv glad_debug_glGetBufferPointerv GLAD_API_CALL PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; GLAD_API_CALL PFNGLGETBUFFERSUBDATAPROC glad_debug_glGetBufferSubData; #define glGetBufferSubData glad_debug_glGetBufferSubData GLAD_API_CALL PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; GLAD_API_CALL PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_debug_glGetCompressedTexImage; #define glGetCompressedTexImage glad_debug_glGetCompressedTexImage GLAD_API_CALL PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; GLAD_API_CALL PFNGLGETDEBUGMESSAGELOGPROC glad_debug_glGetDebugMessageLog; #define glGetDebugMessageLog glad_debug_glGetDebugMessageLog GLAD_API_CALL PFNGLGETDOUBLEVPROC glad_glGetDoublev; GLAD_API_CALL PFNGLGETDOUBLEVPROC glad_debug_glGetDoublev; #define glGetDoublev glad_debug_glGetDoublev GLAD_API_CALL PFNGLGETERRORPROC glad_glGetError; GLAD_API_CALL PFNGLGETERRORPROC glad_debug_glGetError; #define glGetError glad_debug_glGetError GLAD_API_CALL PFNGLGETFLOATVPROC glad_glGetFloatv; GLAD_API_CALL PFNGLGETFLOATVPROC glad_debug_glGetFloatv; #define glGetFloatv glad_debug_glGetFloatv GLAD_API_CALL PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; GLAD_API_CALL PFNGLGETFRAGDATAINDEXPROC glad_debug_glGetFragDataIndex; #define glGetFragDataIndex glad_debug_glGetFragDataIndex GLAD_API_CALL PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; GLAD_API_CALL PFNGLGETFRAGDATALOCATIONPROC glad_debug_glGetFragDataLocation; #define glGetFragDataLocation glad_debug_glGetFragDataLocation GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_debug_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv glad_debug_glGetFramebufferAttachmentParameteriv GLAD_API_CALL PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB; GLAD_API_CALL PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_debug_glGetGraphicsResetStatusARB; #define glGetGraphicsResetStatusARB glad_debug_glGetGraphicsResetStatusARB GLAD_API_CALL PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; GLAD_API_CALL PFNGLGETINTEGER64I_VPROC glad_debug_glGetInteger64i_v; #define glGetInteger64i_v glad_debug_glGetInteger64i_v GLAD_API_CALL PFNGLGETINTEGER64VPROC glad_glGetInteger64v; GLAD_API_CALL PFNGLGETINTEGER64VPROC glad_debug_glGetInteger64v; #define glGetInteger64v glad_debug_glGetInteger64v GLAD_API_CALL PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; GLAD_API_CALL PFNGLGETINTEGERI_VPROC glad_debug_glGetIntegeri_v; #define glGetIntegeri_v glad_debug_glGetIntegeri_v GLAD_API_CALL PFNGLGETINTEGERVPROC glad_glGetIntegerv; GLAD_API_CALL PFNGLGETINTEGERVPROC glad_debug_glGetIntegerv; #define glGetIntegerv glad_debug_glGetIntegerv GLAD_API_CALL PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; GLAD_API_CALL PFNGLGETMULTISAMPLEFVPROC glad_debug_glGetMultisamplefv; #define glGetMultisamplefv glad_debug_glGetMultisamplefv GLAD_API_CALL PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; GLAD_API_CALL PFNGLGETOBJECTLABELPROC glad_debug_glGetObjectLabel; #define glGetObjectLabel glad_debug_glGetObjectLabel GLAD_API_CALL PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; GLAD_API_CALL PFNGLGETOBJECTPTRLABELPROC glad_debug_glGetObjectPtrLabel; #define glGetObjectPtrLabel glad_debug_glGetObjectPtrLabel GLAD_API_CALL PFNGLGETPOINTERVPROC glad_glGetPointerv; GLAD_API_CALL PFNGLGETPOINTERVPROC glad_debug_glGetPointerv; #define glGetPointerv glad_debug_glGetPointerv GLAD_API_CALL PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; GLAD_API_CALL PFNGLGETPROGRAMINFOLOGPROC glad_debug_glGetProgramInfoLog; #define glGetProgramInfoLog glad_debug_glGetProgramInfoLog GLAD_API_CALL PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; GLAD_API_CALL PFNGLGETPROGRAMIVPROC glad_debug_glGetProgramiv; #define glGetProgramiv glad_debug_glGetProgramiv GLAD_API_CALL PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; GLAD_API_CALL PFNGLGETQUERYOBJECTI64VPROC glad_debug_glGetQueryObjecti64v; #define glGetQueryObjecti64v glad_debug_glGetQueryObjecti64v GLAD_API_CALL PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; GLAD_API_CALL PFNGLGETQUERYOBJECTIVPROC glad_debug_glGetQueryObjectiv; #define glGetQueryObjectiv glad_debug_glGetQueryObjectiv GLAD_API_CALL PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; GLAD_API_CALL PFNGLGETQUERYOBJECTUI64VPROC glad_debug_glGetQueryObjectui64v; #define glGetQueryObjectui64v glad_debug_glGetQueryObjectui64v GLAD_API_CALL PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; GLAD_API_CALL PFNGLGETQUERYOBJECTUIVPROC glad_debug_glGetQueryObjectuiv; #define glGetQueryObjectuiv glad_debug_glGetQueryObjectuiv GLAD_API_CALL PFNGLGETQUERYIVPROC glad_glGetQueryiv; GLAD_API_CALL PFNGLGETQUERYIVPROC glad_debug_glGetQueryiv; #define glGetQueryiv glad_debug_glGetQueryiv GLAD_API_CALL PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; GLAD_API_CALL PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_debug_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv glad_debug_glGetRenderbufferParameteriv GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIIVPROC glad_debug_glGetSamplerParameterIiv; #define glGetSamplerParameterIiv glad_debug_glGetSamplerParameterIiv GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIUIVPROC glad_debug_glGetSamplerParameterIuiv; #define glGetSamplerParameterIuiv glad_debug_glGetSamplerParameterIuiv GLAD_API_CALL PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; GLAD_API_CALL PFNGLGETSAMPLERPARAMETERFVPROC glad_debug_glGetSamplerParameterfv; #define glGetSamplerParameterfv glad_debug_glGetSamplerParameterfv GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; GLAD_API_CALL PFNGLGETSAMPLERPARAMETERIVPROC glad_debug_glGetSamplerParameteriv; #define glGetSamplerParameteriv glad_debug_glGetSamplerParameteriv GLAD_API_CALL PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; GLAD_API_CALL PFNGLGETSHADERINFOLOGPROC glad_debug_glGetShaderInfoLog; #define glGetShaderInfoLog glad_debug_glGetShaderInfoLog GLAD_API_CALL PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; GLAD_API_CALL PFNGLGETSHADERSOURCEPROC glad_debug_glGetShaderSource; #define glGetShaderSource glad_debug_glGetShaderSource GLAD_API_CALL PFNGLGETSHADERIVPROC glad_glGetShaderiv; GLAD_API_CALL PFNGLGETSHADERIVPROC glad_debug_glGetShaderiv; #define glGetShaderiv glad_debug_glGetShaderiv GLAD_API_CALL PFNGLGETSTRINGPROC glad_glGetString; GLAD_API_CALL PFNGLGETSTRINGPROC glad_debug_glGetString; #define glGetString glad_debug_glGetString GLAD_API_CALL PFNGLGETSTRINGIPROC glad_glGetStringi; GLAD_API_CALL PFNGLGETSTRINGIPROC glad_debug_glGetStringi; #define glGetStringi glad_debug_glGetStringi GLAD_API_CALL PFNGLGETSYNCIVPROC glad_glGetSynciv; GLAD_API_CALL PFNGLGETSYNCIVPROC glad_debug_glGetSynciv; #define glGetSynciv glad_debug_glGetSynciv GLAD_API_CALL PFNGLGETTEXIMAGEPROC glad_glGetTexImage; GLAD_API_CALL PFNGLGETTEXIMAGEPROC glad_debug_glGetTexImage; #define glGetTexImage glad_debug_glGetTexImage GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERFVPROC glad_debug_glGetTexLevelParameterfv; #define glGetTexLevelParameterfv glad_debug_glGetTexLevelParameterfv GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERIVPROC glad_debug_glGetTexLevelParameteriv; #define glGetTexLevelParameteriv glad_debug_glGetTexLevelParameteriv GLAD_API_CALL PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; GLAD_API_CALL PFNGLGETTEXPARAMETERIIVPROC glad_debug_glGetTexParameterIiv; #define glGetTexParameterIiv glad_debug_glGetTexParameterIiv GLAD_API_CALL PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; GLAD_API_CALL PFNGLGETTEXPARAMETERIUIVPROC glad_debug_glGetTexParameterIuiv; #define glGetTexParameterIuiv glad_debug_glGetTexParameterIuiv GLAD_API_CALL PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; GLAD_API_CALL PFNGLGETTEXPARAMETERFVPROC glad_debug_glGetTexParameterfv; #define glGetTexParameterfv glad_debug_glGetTexParameterfv GLAD_API_CALL PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; GLAD_API_CALL PFNGLGETTEXPARAMETERIVPROC glad_debug_glGetTexParameteriv; #define glGetTexParameteriv glad_debug_glGetTexParameteriv GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_debug_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying glad_debug_glGetTransformFeedbackVarying GLAD_API_CALL PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; GLAD_API_CALL PFNGLGETUNIFORMBLOCKINDEXPROC glad_debug_glGetUniformBlockIndex; #define glGetUniformBlockIndex glad_debug_glGetUniformBlockIndex GLAD_API_CALL PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; GLAD_API_CALL PFNGLGETUNIFORMINDICESPROC glad_debug_glGetUniformIndices; #define glGetUniformIndices glad_debug_glGetUniformIndices GLAD_API_CALL PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; GLAD_API_CALL PFNGLGETUNIFORMLOCATIONPROC glad_debug_glGetUniformLocation; #define glGetUniformLocation glad_debug_glGetUniformLocation GLAD_API_CALL PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; GLAD_API_CALL PFNGLGETUNIFORMFVPROC glad_debug_glGetUniformfv; #define glGetUniformfv glad_debug_glGetUniformfv GLAD_API_CALL PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; GLAD_API_CALL PFNGLGETUNIFORMIVPROC glad_debug_glGetUniformiv; #define glGetUniformiv glad_debug_glGetUniformiv GLAD_API_CALL PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; GLAD_API_CALL PFNGLGETUNIFORMUIVPROC glad_debug_glGetUniformuiv; #define glGetUniformuiv glad_debug_glGetUniformuiv GLAD_API_CALL PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; GLAD_API_CALL PFNGLGETVERTEXATTRIBIIVPROC glad_debug_glGetVertexAttribIiv; #define glGetVertexAttribIiv glad_debug_glGetVertexAttribIiv GLAD_API_CALL PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; GLAD_API_CALL PFNGLGETVERTEXATTRIBIUIVPROC glad_debug_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv glad_debug_glGetVertexAttribIuiv GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVPROC glad_debug_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv glad_debug_glGetVertexAttribPointerv GLAD_API_CALL PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; GLAD_API_CALL PFNGLGETVERTEXATTRIBDVPROC glad_debug_glGetVertexAttribdv; #define glGetVertexAttribdv glad_debug_glGetVertexAttribdv GLAD_API_CALL PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; GLAD_API_CALL PFNGLGETVERTEXATTRIBFVPROC glad_debug_glGetVertexAttribfv; #define glGetVertexAttribfv glad_debug_glGetVertexAttribfv GLAD_API_CALL PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; GLAD_API_CALL PFNGLGETVERTEXATTRIBIVPROC glad_debug_glGetVertexAttribiv; #define glGetVertexAttribiv glad_debug_glGetVertexAttribiv GLAD_API_CALL PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB; GLAD_API_CALL PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_debug_glGetnCompressedTexImageARB; #define glGetnCompressedTexImageARB glad_debug_glGetnCompressedTexImageARB GLAD_API_CALL PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB; GLAD_API_CALL PFNGLGETNTEXIMAGEARBPROC glad_debug_glGetnTexImageARB; #define glGetnTexImageARB glad_debug_glGetnTexImageARB GLAD_API_CALL PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB; GLAD_API_CALL PFNGLGETNUNIFORMDVARBPROC glad_debug_glGetnUniformdvARB; #define glGetnUniformdvARB glad_debug_glGetnUniformdvARB GLAD_API_CALL PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB; GLAD_API_CALL PFNGLGETNUNIFORMFVARBPROC glad_debug_glGetnUniformfvARB; #define glGetnUniformfvARB glad_debug_glGetnUniformfvARB GLAD_API_CALL PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB; GLAD_API_CALL PFNGLGETNUNIFORMIVARBPROC glad_debug_glGetnUniformivARB; #define glGetnUniformivARB glad_debug_glGetnUniformivARB GLAD_API_CALL PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB; GLAD_API_CALL PFNGLGETNUNIFORMUIVARBPROC glad_debug_glGetnUniformuivARB; #define glGetnUniformuivARB glad_debug_glGetnUniformuivARB GLAD_API_CALL PFNGLHINTPROC glad_glHint; GLAD_API_CALL PFNGLHINTPROC glad_debug_glHint; #define glHint glad_debug_glHint GLAD_API_CALL PFNGLISBUFFERPROC glad_glIsBuffer; GLAD_API_CALL PFNGLISBUFFERPROC glad_debug_glIsBuffer; #define glIsBuffer glad_debug_glIsBuffer GLAD_API_CALL PFNGLISENABLEDPROC glad_glIsEnabled; GLAD_API_CALL PFNGLISENABLEDPROC glad_debug_glIsEnabled; #define glIsEnabled glad_debug_glIsEnabled GLAD_API_CALL PFNGLISENABLEDIPROC glad_glIsEnabledi; GLAD_API_CALL PFNGLISENABLEDIPROC glad_debug_glIsEnabledi; #define glIsEnabledi glad_debug_glIsEnabledi GLAD_API_CALL PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; GLAD_API_CALL PFNGLISFRAMEBUFFERPROC glad_debug_glIsFramebuffer; #define glIsFramebuffer glad_debug_glIsFramebuffer GLAD_API_CALL PFNGLISPROGRAMPROC glad_glIsProgram; GLAD_API_CALL PFNGLISPROGRAMPROC glad_debug_glIsProgram; #define glIsProgram glad_debug_glIsProgram GLAD_API_CALL PFNGLISQUERYPROC glad_glIsQuery; GLAD_API_CALL PFNGLISQUERYPROC glad_debug_glIsQuery; #define glIsQuery glad_debug_glIsQuery GLAD_API_CALL PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; GLAD_API_CALL PFNGLISRENDERBUFFERPROC glad_debug_glIsRenderbuffer; #define glIsRenderbuffer glad_debug_glIsRenderbuffer GLAD_API_CALL PFNGLISSAMPLERPROC glad_glIsSampler; GLAD_API_CALL PFNGLISSAMPLERPROC glad_debug_glIsSampler; #define glIsSampler glad_debug_glIsSampler GLAD_API_CALL PFNGLISSHADERPROC glad_glIsShader; GLAD_API_CALL PFNGLISSHADERPROC glad_debug_glIsShader; #define glIsShader glad_debug_glIsShader GLAD_API_CALL PFNGLISSYNCPROC glad_glIsSync; GLAD_API_CALL PFNGLISSYNCPROC glad_debug_glIsSync; #define glIsSync glad_debug_glIsSync GLAD_API_CALL PFNGLISTEXTUREPROC glad_glIsTexture; GLAD_API_CALL PFNGLISTEXTUREPROC glad_debug_glIsTexture; #define glIsTexture glad_debug_glIsTexture GLAD_API_CALL PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; GLAD_API_CALL PFNGLISVERTEXARRAYPROC glad_debug_glIsVertexArray; #define glIsVertexArray glad_debug_glIsVertexArray GLAD_API_CALL PFNGLLINEWIDTHPROC glad_glLineWidth; GLAD_API_CALL PFNGLLINEWIDTHPROC glad_debug_glLineWidth; #define glLineWidth glad_debug_glLineWidth GLAD_API_CALL PFNGLLINKPROGRAMPROC glad_glLinkProgram; GLAD_API_CALL PFNGLLINKPROGRAMPROC glad_debug_glLinkProgram; #define glLinkProgram glad_debug_glLinkProgram GLAD_API_CALL PFNGLLOGICOPPROC glad_glLogicOp; GLAD_API_CALL PFNGLLOGICOPPROC glad_debug_glLogicOp; #define glLogicOp glad_debug_glLogicOp GLAD_API_CALL PFNGLMAPBUFFERPROC glad_glMapBuffer; GLAD_API_CALL PFNGLMAPBUFFERPROC glad_debug_glMapBuffer; #define glMapBuffer glad_debug_glMapBuffer GLAD_API_CALL PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; GLAD_API_CALL PFNGLMAPBUFFERRANGEPROC glad_debug_glMapBufferRange; #define glMapBufferRange glad_debug_glMapBufferRange GLAD_API_CALL PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; GLAD_API_CALL PFNGLMULTIDRAWARRAYSPROC glad_debug_glMultiDrawArrays; #define glMultiDrawArrays glad_debug_glMultiDrawArrays GLAD_API_CALL PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; GLAD_API_CALL PFNGLMULTIDRAWELEMENTSPROC glad_debug_glMultiDrawElements; #define glMultiDrawElements glad_debug_glMultiDrawElements GLAD_API_CALL PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; GLAD_API_CALL PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_debug_glMultiDrawElementsBaseVertex; #define glMultiDrawElementsBaseVertex glad_debug_glMultiDrawElementsBaseVertex GLAD_API_CALL PFNGLOBJECTLABELPROC glad_glObjectLabel; GLAD_API_CALL PFNGLOBJECTLABELPROC glad_debug_glObjectLabel; #define glObjectLabel glad_debug_glObjectLabel GLAD_API_CALL PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; GLAD_API_CALL PFNGLOBJECTPTRLABELPROC glad_debug_glObjectPtrLabel; #define glObjectPtrLabel glad_debug_glObjectPtrLabel GLAD_API_CALL PFNGLPIXELSTOREFPROC glad_glPixelStoref; GLAD_API_CALL PFNGLPIXELSTOREFPROC glad_debug_glPixelStoref; #define glPixelStoref glad_debug_glPixelStoref GLAD_API_CALL PFNGLPIXELSTOREIPROC glad_glPixelStorei; GLAD_API_CALL PFNGLPIXELSTOREIPROC glad_debug_glPixelStorei; #define glPixelStorei glad_debug_glPixelStorei GLAD_API_CALL PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; GLAD_API_CALL PFNGLPOINTPARAMETERFPROC glad_debug_glPointParameterf; #define glPointParameterf glad_debug_glPointParameterf GLAD_API_CALL PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; GLAD_API_CALL PFNGLPOINTPARAMETERFVPROC glad_debug_glPointParameterfv; #define glPointParameterfv glad_debug_glPointParameterfv GLAD_API_CALL PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; GLAD_API_CALL PFNGLPOINTPARAMETERIPROC glad_debug_glPointParameteri; #define glPointParameteri glad_debug_glPointParameteri GLAD_API_CALL PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; GLAD_API_CALL PFNGLPOINTPARAMETERIVPROC glad_debug_glPointParameteriv; #define glPointParameteriv glad_debug_glPointParameteriv GLAD_API_CALL PFNGLPOINTSIZEPROC glad_glPointSize; GLAD_API_CALL PFNGLPOINTSIZEPROC glad_debug_glPointSize; #define glPointSize glad_debug_glPointSize GLAD_API_CALL PFNGLPOLYGONMODEPROC glad_glPolygonMode; GLAD_API_CALL PFNGLPOLYGONMODEPROC glad_debug_glPolygonMode; #define glPolygonMode glad_debug_glPolygonMode GLAD_API_CALL PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; GLAD_API_CALL PFNGLPOLYGONOFFSETPROC glad_debug_glPolygonOffset; #define glPolygonOffset glad_debug_glPolygonOffset GLAD_API_CALL PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; GLAD_API_CALL PFNGLPOPDEBUGGROUPPROC glad_debug_glPopDebugGroup; #define glPopDebugGroup glad_debug_glPopDebugGroup GLAD_API_CALL PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; GLAD_API_CALL PFNGLPRIMITIVERESTARTINDEXPROC glad_debug_glPrimitiveRestartIndex; #define glPrimitiveRestartIndex glad_debug_glPrimitiveRestartIndex GLAD_API_CALL PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; GLAD_API_CALL PFNGLPROVOKINGVERTEXPROC glad_debug_glProvokingVertex; #define glProvokingVertex glad_debug_glProvokingVertex GLAD_API_CALL PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; GLAD_API_CALL PFNGLPUSHDEBUGGROUPPROC glad_debug_glPushDebugGroup; #define glPushDebugGroup glad_debug_glPushDebugGroup GLAD_API_CALL PFNGLQUERYCOUNTERPROC glad_glQueryCounter; GLAD_API_CALL PFNGLQUERYCOUNTERPROC glad_debug_glQueryCounter; #define glQueryCounter glad_debug_glQueryCounter GLAD_API_CALL PFNGLREADBUFFERPROC glad_glReadBuffer; GLAD_API_CALL PFNGLREADBUFFERPROC glad_debug_glReadBuffer; #define glReadBuffer glad_debug_glReadBuffer GLAD_API_CALL PFNGLREADPIXELSPROC glad_glReadPixels; GLAD_API_CALL PFNGLREADPIXELSPROC glad_debug_glReadPixels; #define glReadPixels glad_debug_glReadPixels GLAD_API_CALL PFNGLREADNPIXELSPROC glad_glReadnPixels; GLAD_API_CALL PFNGLREADNPIXELSPROC glad_debug_glReadnPixels; #define glReadnPixels glad_debug_glReadnPixels GLAD_API_CALL PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB; GLAD_API_CALL PFNGLREADNPIXELSARBPROC glad_debug_glReadnPixelsARB; #define glReadnPixelsARB glad_debug_glReadnPixelsARB GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEPROC glad_debug_glRenderbufferStorage; #define glRenderbufferStorage glad_debug_glRenderbufferStorage GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_debug_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample glad_debug_glRenderbufferStorageMultisample GLAD_API_CALL PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; GLAD_API_CALL PFNGLSAMPLECOVERAGEPROC glad_debug_glSampleCoverage; #define glSampleCoverage glad_debug_glSampleCoverage GLAD_API_CALL PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; GLAD_API_CALL PFNGLSAMPLECOVERAGEARBPROC glad_debug_glSampleCoverageARB; #define glSampleCoverageARB glad_debug_glSampleCoverageARB GLAD_API_CALL PFNGLSAMPLEMASKIPROC glad_glSampleMaski; GLAD_API_CALL PFNGLSAMPLEMASKIPROC glad_debug_glSampleMaski; #define glSampleMaski glad_debug_glSampleMaski GLAD_API_CALL PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; GLAD_API_CALL PFNGLSAMPLERPARAMETERIIVPROC glad_debug_glSamplerParameterIiv; #define glSamplerParameterIiv glad_debug_glSamplerParameterIiv GLAD_API_CALL PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; GLAD_API_CALL PFNGLSAMPLERPARAMETERIUIVPROC glad_debug_glSamplerParameterIuiv; #define glSamplerParameterIuiv glad_debug_glSamplerParameterIuiv GLAD_API_CALL PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; GLAD_API_CALL PFNGLSAMPLERPARAMETERFPROC glad_debug_glSamplerParameterf; #define glSamplerParameterf glad_debug_glSamplerParameterf GLAD_API_CALL PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; GLAD_API_CALL PFNGLSAMPLERPARAMETERFVPROC glad_debug_glSamplerParameterfv; #define glSamplerParameterfv glad_debug_glSamplerParameterfv GLAD_API_CALL PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; GLAD_API_CALL PFNGLSAMPLERPARAMETERIPROC glad_debug_glSamplerParameteri; #define glSamplerParameteri glad_debug_glSamplerParameteri GLAD_API_CALL PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; GLAD_API_CALL PFNGLSAMPLERPARAMETERIVPROC glad_debug_glSamplerParameteriv; #define glSamplerParameteriv glad_debug_glSamplerParameteriv GLAD_API_CALL PFNGLSCISSORPROC glad_glScissor; GLAD_API_CALL PFNGLSCISSORPROC glad_debug_glScissor; #define glScissor glad_debug_glScissor GLAD_API_CALL PFNGLSHADERSOURCEPROC glad_glShaderSource; GLAD_API_CALL PFNGLSHADERSOURCEPROC glad_debug_glShaderSource; #define glShaderSource glad_debug_glShaderSource GLAD_API_CALL PFNGLSTENCILFUNCPROC glad_glStencilFunc; GLAD_API_CALL PFNGLSTENCILFUNCPROC glad_debug_glStencilFunc; #define glStencilFunc glad_debug_glStencilFunc GLAD_API_CALL PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; GLAD_API_CALL PFNGLSTENCILFUNCSEPARATEPROC glad_debug_glStencilFuncSeparate; #define glStencilFuncSeparate glad_debug_glStencilFuncSeparate GLAD_API_CALL PFNGLSTENCILMASKPROC glad_glStencilMask; GLAD_API_CALL PFNGLSTENCILMASKPROC glad_debug_glStencilMask; #define glStencilMask glad_debug_glStencilMask GLAD_API_CALL PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; GLAD_API_CALL PFNGLSTENCILMASKSEPARATEPROC glad_debug_glStencilMaskSeparate; #define glStencilMaskSeparate glad_debug_glStencilMaskSeparate GLAD_API_CALL PFNGLSTENCILOPPROC glad_glStencilOp; GLAD_API_CALL PFNGLSTENCILOPPROC glad_debug_glStencilOp; #define glStencilOp glad_debug_glStencilOp GLAD_API_CALL PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; GLAD_API_CALL PFNGLSTENCILOPSEPARATEPROC glad_debug_glStencilOpSeparate; #define glStencilOpSeparate glad_debug_glStencilOpSeparate GLAD_API_CALL PFNGLTEXBUFFERPROC glad_glTexBuffer; GLAD_API_CALL PFNGLTEXBUFFERPROC glad_debug_glTexBuffer; #define glTexBuffer glad_debug_glTexBuffer GLAD_API_CALL PFNGLTEXIMAGE1DPROC glad_glTexImage1D; GLAD_API_CALL PFNGLTEXIMAGE1DPROC glad_debug_glTexImage1D; #define glTexImage1D glad_debug_glTexImage1D GLAD_API_CALL PFNGLTEXIMAGE2DPROC glad_glTexImage2D; GLAD_API_CALL PFNGLTEXIMAGE2DPROC glad_debug_glTexImage2D; #define glTexImage2D glad_debug_glTexImage2D GLAD_API_CALL PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; GLAD_API_CALL PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_debug_glTexImage2DMultisample; #define glTexImage2DMultisample glad_debug_glTexImage2DMultisample GLAD_API_CALL PFNGLTEXIMAGE3DPROC glad_glTexImage3D; GLAD_API_CALL PFNGLTEXIMAGE3DPROC glad_debug_glTexImage3D; #define glTexImage3D glad_debug_glTexImage3D GLAD_API_CALL PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; GLAD_API_CALL PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_debug_glTexImage3DMultisample; #define glTexImage3DMultisample glad_debug_glTexImage3DMultisample GLAD_API_CALL PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; GLAD_API_CALL PFNGLTEXPARAMETERIIVPROC glad_debug_glTexParameterIiv; #define glTexParameterIiv glad_debug_glTexParameterIiv GLAD_API_CALL PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; GLAD_API_CALL PFNGLTEXPARAMETERIUIVPROC glad_debug_glTexParameterIuiv; #define glTexParameterIuiv glad_debug_glTexParameterIuiv GLAD_API_CALL PFNGLTEXPARAMETERFPROC glad_glTexParameterf; GLAD_API_CALL PFNGLTEXPARAMETERFPROC glad_debug_glTexParameterf; #define glTexParameterf glad_debug_glTexParameterf GLAD_API_CALL PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; GLAD_API_CALL PFNGLTEXPARAMETERFVPROC glad_debug_glTexParameterfv; #define glTexParameterfv glad_debug_glTexParameterfv GLAD_API_CALL PFNGLTEXPARAMETERIPROC glad_glTexParameteri; GLAD_API_CALL PFNGLTEXPARAMETERIPROC glad_debug_glTexParameteri; #define glTexParameteri glad_debug_glTexParameteri GLAD_API_CALL PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; GLAD_API_CALL PFNGLTEXPARAMETERIVPROC glad_debug_glTexParameteriv; #define glTexParameteriv glad_debug_glTexParameteriv GLAD_API_CALL PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; GLAD_API_CALL PFNGLTEXSTORAGE1DPROC glad_debug_glTexStorage1D; #define glTexStorage1D glad_debug_glTexStorage1D GLAD_API_CALL PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; GLAD_API_CALL PFNGLTEXSTORAGE2DPROC glad_debug_glTexStorage2D; #define glTexStorage2D glad_debug_glTexStorage2D GLAD_API_CALL PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; GLAD_API_CALL PFNGLTEXSTORAGE3DPROC glad_debug_glTexStorage3D; #define glTexStorage3D glad_debug_glTexStorage3D GLAD_API_CALL PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; GLAD_API_CALL PFNGLTEXSUBIMAGE1DPROC glad_debug_glTexSubImage1D; #define glTexSubImage1D glad_debug_glTexSubImage1D GLAD_API_CALL PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; GLAD_API_CALL PFNGLTEXSUBIMAGE2DPROC glad_debug_glTexSubImage2D; #define glTexSubImage2D glad_debug_glTexSubImage2D GLAD_API_CALL PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; GLAD_API_CALL PFNGLTEXSUBIMAGE3DPROC glad_debug_glTexSubImage3D; #define glTexSubImage3D glad_debug_glTexSubImage3D GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_debug_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings glad_debug_glTransformFeedbackVaryings GLAD_API_CALL PFNGLUNIFORM1FPROC glad_glUniform1f; GLAD_API_CALL PFNGLUNIFORM1FPROC glad_debug_glUniform1f; #define glUniform1f glad_debug_glUniform1f GLAD_API_CALL PFNGLUNIFORM1FVPROC glad_glUniform1fv; GLAD_API_CALL PFNGLUNIFORM1FVPROC glad_debug_glUniform1fv; #define glUniform1fv glad_debug_glUniform1fv GLAD_API_CALL PFNGLUNIFORM1IPROC glad_glUniform1i; GLAD_API_CALL PFNGLUNIFORM1IPROC glad_debug_glUniform1i; #define glUniform1i glad_debug_glUniform1i GLAD_API_CALL PFNGLUNIFORM1IVPROC glad_glUniform1iv; GLAD_API_CALL PFNGLUNIFORM1IVPROC glad_debug_glUniform1iv; #define glUniform1iv glad_debug_glUniform1iv GLAD_API_CALL PFNGLUNIFORM1UIPROC glad_glUniform1ui; GLAD_API_CALL PFNGLUNIFORM1UIPROC glad_debug_glUniform1ui; #define glUniform1ui glad_debug_glUniform1ui GLAD_API_CALL PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; GLAD_API_CALL PFNGLUNIFORM1UIVPROC glad_debug_glUniform1uiv; #define glUniform1uiv glad_debug_glUniform1uiv GLAD_API_CALL PFNGLUNIFORM2FPROC glad_glUniform2f; GLAD_API_CALL PFNGLUNIFORM2FPROC glad_debug_glUniform2f; #define glUniform2f glad_debug_glUniform2f GLAD_API_CALL PFNGLUNIFORM2FVPROC glad_glUniform2fv; GLAD_API_CALL PFNGLUNIFORM2FVPROC glad_debug_glUniform2fv; #define glUniform2fv glad_debug_glUniform2fv GLAD_API_CALL PFNGLUNIFORM2IPROC glad_glUniform2i; GLAD_API_CALL PFNGLUNIFORM2IPROC glad_debug_glUniform2i; #define glUniform2i glad_debug_glUniform2i GLAD_API_CALL PFNGLUNIFORM2IVPROC glad_glUniform2iv; GLAD_API_CALL PFNGLUNIFORM2IVPROC glad_debug_glUniform2iv; #define glUniform2iv glad_debug_glUniform2iv GLAD_API_CALL PFNGLUNIFORM2UIPROC glad_glUniform2ui; GLAD_API_CALL PFNGLUNIFORM2UIPROC glad_debug_glUniform2ui; #define glUniform2ui glad_debug_glUniform2ui GLAD_API_CALL PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; GLAD_API_CALL PFNGLUNIFORM2UIVPROC glad_debug_glUniform2uiv; #define glUniform2uiv glad_debug_glUniform2uiv GLAD_API_CALL PFNGLUNIFORM3FPROC glad_glUniform3f; GLAD_API_CALL PFNGLUNIFORM3FPROC glad_debug_glUniform3f; #define glUniform3f glad_debug_glUniform3f GLAD_API_CALL PFNGLUNIFORM3FVPROC glad_glUniform3fv; GLAD_API_CALL PFNGLUNIFORM3FVPROC glad_debug_glUniform3fv; #define glUniform3fv glad_debug_glUniform3fv GLAD_API_CALL PFNGLUNIFORM3IPROC glad_glUniform3i; GLAD_API_CALL PFNGLUNIFORM3IPROC glad_debug_glUniform3i; #define glUniform3i glad_debug_glUniform3i GLAD_API_CALL PFNGLUNIFORM3IVPROC glad_glUniform3iv; GLAD_API_CALL PFNGLUNIFORM3IVPROC glad_debug_glUniform3iv; #define glUniform3iv glad_debug_glUniform3iv GLAD_API_CALL PFNGLUNIFORM3UIPROC glad_glUniform3ui; GLAD_API_CALL PFNGLUNIFORM3UIPROC glad_debug_glUniform3ui; #define glUniform3ui glad_debug_glUniform3ui GLAD_API_CALL PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; GLAD_API_CALL PFNGLUNIFORM3UIVPROC glad_debug_glUniform3uiv; #define glUniform3uiv glad_debug_glUniform3uiv GLAD_API_CALL PFNGLUNIFORM4FPROC glad_glUniform4f; GLAD_API_CALL PFNGLUNIFORM4FPROC glad_debug_glUniform4f; #define glUniform4f glad_debug_glUniform4f GLAD_API_CALL PFNGLUNIFORM4FVPROC glad_glUniform4fv; GLAD_API_CALL PFNGLUNIFORM4FVPROC glad_debug_glUniform4fv; #define glUniform4fv glad_debug_glUniform4fv GLAD_API_CALL PFNGLUNIFORM4IPROC glad_glUniform4i; GLAD_API_CALL PFNGLUNIFORM4IPROC glad_debug_glUniform4i; #define glUniform4i glad_debug_glUniform4i GLAD_API_CALL PFNGLUNIFORM4IVPROC glad_glUniform4iv; GLAD_API_CALL PFNGLUNIFORM4IVPROC glad_debug_glUniform4iv; #define glUniform4iv glad_debug_glUniform4iv GLAD_API_CALL PFNGLUNIFORM4UIPROC glad_glUniform4ui; GLAD_API_CALL PFNGLUNIFORM4UIPROC glad_debug_glUniform4ui; #define glUniform4ui glad_debug_glUniform4ui GLAD_API_CALL PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; GLAD_API_CALL PFNGLUNIFORM4UIVPROC glad_debug_glUniform4uiv; #define glUniform4uiv glad_debug_glUniform4uiv GLAD_API_CALL PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; GLAD_API_CALL PFNGLUNIFORMBLOCKBINDINGPROC glad_debug_glUniformBlockBinding; #define glUniformBlockBinding glad_debug_glUniformBlockBinding GLAD_API_CALL PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; GLAD_API_CALL PFNGLUNIFORMMATRIX2FVPROC glad_debug_glUniformMatrix2fv; #define glUniformMatrix2fv glad_debug_glUniformMatrix2fv GLAD_API_CALL PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; GLAD_API_CALL PFNGLUNIFORMMATRIX2X3FVPROC glad_debug_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv glad_debug_glUniformMatrix2x3fv GLAD_API_CALL PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; GLAD_API_CALL PFNGLUNIFORMMATRIX2X4FVPROC glad_debug_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv glad_debug_glUniformMatrix2x4fv GLAD_API_CALL PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; GLAD_API_CALL PFNGLUNIFORMMATRIX3FVPROC glad_debug_glUniformMatrix3fv; #define glUniformMatrix3fv glad_debug_glUniformMatrix3fv GLAD_API_CALL PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; GLAD_API_CALL PFNGLUNIFORMMATRIX3X2FVPROC glad_debug_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv glad_debug_glUniformMatrix3x2fv GLAD_API_CALL PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; GLAD_API_CALL PFNGLUNIFORMMATRIX3X4FVPROC glad_debug_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv glad_debug_glUniformMatrix3x4fv GLAD_API_CALL PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; GLAD_API_CALL PFNGLUNIFORMMATRIX4FVPROC glad_debug_glUniformMatrix4fv; #define glUniformMatrix4fv glad_debug_glUniformMatrix4fv GLAD_API_CALL PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; GLAD_API_CALL PFNGLUNIFORMMATRIX4X2FVPROC glad_debug_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv glad_debug_glUniformMatrix4x2fv GLAD_API_CALL PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; GLAD_API_CALL PFNGLUNIFORMMATRIX4X3FVPROC glad_debug_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv glad_debug_glUniformMatrix4x3fv GLAD_API_CALL PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; GLAD_API_CALL PFNGLUNMAPBUFFERPROC glad_debug_glUnmapBuffer; #define glUnmapBuffer glad_debug_glUnmapBuffer GLAD_API_CALL PFNGLUSEPROGRAMPROC glad_glUseProgram; GLAD_API_CALL PFNGLUSEPROGRAMPROC glad_debug_glUseProgram; #define glUseProgram glad_debug_glUseProgram GLAD_API_CALL PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; GLAD_API_CALL PFNGLVALIDATEPROGRAMPROC glad_debug_glValidateProgram; #define glValidateProgram glad_debug_glValidateProgram GLAD_API_CALL PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; GLAD_API_CALL PFNGLVERTEXATTRIB1DPROC glad_debug_glVertexAttrib1d; #define glVertexAttrib1d glad_debug_glVertexAttrib1d GLAD_API_CALL PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; GLAD_API_CALL PFNGLVERTEXATTRIB1DVPROC glad_debug_glVertexAttrib1dv; #define glVertexAttrib1dv glad_debug_glVertexAttrib1dv GLAD_API_CALL PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; GLAD_API_CALL PFNGLVERTEXATTRIB1FPROC glad_debug_glVertexAttrib1f; #define glVertexAttrib1f glad_debug_glVertexAttrib1f GLAD_API_CALL PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; GLAD_API_CALL PFNGLVERTEXATTRIB1FVPROC glad_debug_glVertexAttrib1fv; #define glVertexAttrib1fv glad_debug_glVertexAttrib1fv GLAD_API_CALL PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; GLAD_API_CALL PFNGLVERTEXATTRIB1SPROC glad_debug_glVertexAttrib1s; #define glVertexAttrib1s glad_debug_glVertexAttrib1s GLAD_API_CALL PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; GLAD_API_CALL PFNGLVERTEXATTRIB1SVPROC glad_debug_glVertexAttrib1sv; #define glVertexAttrib1sv glad_debug_glVertexAttrib1sv GLAD_API_CALL PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; GLAD_API_CALL PFNGLVERTEXATTRIB2DPROC glad_debug_glVertexAttrib2d; #define glVertexAttrib2d glad_debug_glVertexAttrib2d GLAD_API_CALL PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; GLAD_API_CALL PFNGLVERTEXATTRIB2DVPROC glad_debug_glVertexAttrib2dv; #define glVertexAttrib2dv glad_debug_glVertexAttrib2dv GLAD_API_CALL PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; GLAD_API_CALL PFNGLVERTEXATTRIB2FPROC glad_debug_glVertexAttrib2f; #define glVertexAttrib2f glad_debug_glVertexAttrib2f GLAD_API_CALL PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; GLAD_API_CALL PFNGLVERTEXATTRIB2FVPROC glad_debug_glVertexAttrib2fv; #define glVertexAttrib2fv glad_debug_glVertexAttrib2fv GLAD_API_CALL PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; GLAD_API_CALL PFNGLVERTEXATTRIB2SPROC glad_debug_glVertexAttrib2s; #define glVertexAttrib2s glad_debug_glVertexAttrib2s GLAD_API_CALL PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; GLAD_API_CALL PFNGLVERTEXATTRIB2SVPROC glad_debug_glVertexAttrib2sv; #define glVertexAttrib2sv glad_debug_glVertexAttrib2sv GLAD_API_CALL PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; GLAD_API_CALL PFNGLVERTEXATTRIB3DPROC glad_debug_glVertexAttrib3d; #define glVertexAttrib3d glad_debug_glVertexAttrib3d GLAD_API_CALL PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; GLAD_API_CALL PFNGLVERTEXATTRIB3DVPROC glad_debug_glVertexAttrib3dv; #define glVertexAttrib3dv glad_debug_glVertexAttrib3dv GLAD_API_CALL PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; GLAD_API_CALL PFNGLVERTEXATTRIB3FPROC glad_debug_glVertexAttrib3f; #define glVertexAttrib3f glad_debug_glVertexAttrib3f GLAD_API_CALL PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; GLAD_API_CALL PFNGLVERTEXATTRIB3FVPROC glad_debug_glVertexAttrib3fv; #define glVertexAttrib3fv glad_debug_glVertexAttrib3fv GLAD_API_CALL PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; GLAD_API_CALL PFNGLVERTEXATTRIB3SPROC glad_debug_glVertexAttrib3s; #define glVertexAttrib3s glad_debug_glVertexAttrib3s GLAD_API_CALL PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; GLAD_API_CALL PFNGLVERTEXATTRIB3SVPROC glad_debug_glVertexAttrib3sv; #define glVertexAttrib3sv glad_debug_glVertexAttrib3sv GLAD_API_CALL PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; GLAD_API_CALL PFNGLVERTEXATTRIB4NBVPROC glad_debug_glVertexAttrib4Nbv; #define glVertexAttrib4Nbv glad_debug_glVertexAttrib4Nbv GLAD_API_CALL PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; GLAD_API_CALL PFNGLVERTEXATTRIB4NIVPROC glad_debug_glVertexAttrib4Niv; #define glVertexAttrib4Niv glad_debug_glVertexAttrib4Niv GLAD_API_CALL PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; GLAD_API_CALL PFNGLVERTEXATTRIB4NSVPROC glad_debug_glVertexAttrib4Nsv; #define glVertexAttrib4Nsv glad_debug_glVertexAttrib4Nsv GLAD_API_CALL PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; GLAD_API_CALL PFNGLVERTEXATTRIB4NUBPROC glad_debug_glVertexAttrib4Nub; #define glVertexAttrib4Nub glad_debug_glVertexAttrib4Nub GLAD_API_CALL PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; GLAD_API_CALL PFNGLVERTEXATTRIB4NUBVPROC glad_debug_glVertexAttrib4Nubv; #define glVertexAttrib4Nubv glad_debug_glVertexAttrib4Nubv GLAD_API_CALL PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; GLAD_API_CALL PFNGLVERTEXATTRIB4NUIVPROC glad_debug_glVertexAttrib4Nuiv; #define glVertexAttrib4Nuiv glad_debug_glVertexAttrib4Nuiv GLAD_API_CALL PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; GLAD_API_CALL PFNGLVERTEXATTRIB4NUSVPROC glad_debug_glVertexAttrib4Nusv; #define glVertexAttrib4Nusv glad_debug_glVertexAttrib4Nusv GLAD_API_CALL PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; GLAD_API_CALL PFNGLVERTEXATTRIB4BVPROC glad_debug_glVertexAttrib4bv; #define glVertexAttrib4bv glad_debug_glVertexAttrib4bv GLAD_API_CALL PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; GLAD_API_CALL PFNGLVERTEXATTRIB4DPROC glad_debug_glVertexAttrib4d; #define glVertexAttrib4d glad_debug_glVertexAttrib4d GLAD_API_CALL PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; GLAD_API_CALL PFNGLVERTEXATTRIB4DVPROC glad_debug_glVertexAttrib4dv; #define glVertexAttrib4dv glad_debug_glVertexAttrib4dv GLAD_API_CALL PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; GLAD_API_CALL PFNGLVERTEXATTRIB4FPROC glad_debug_glVertexAttrib4f; #define glVertexAttrib4f glad_debug_glVertexAttrib4f GLAD_API_CALL PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; GLAD_API_CALL PFNGLVERTEXATTRIB4FVPROC glad_debug_glVertexAttrib4fv; #define glVertexAttrib4fv glad_debug_glVertexAttrib4fv GLAD_API_CALL PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; GLAD_API_CALL PFNGLVERTEXATTRIB4IVPROC glad_debug_glVertexAttrib4iv; #define glVertexAttrib4iv glad_debug_glVertexAttrib4iv GLAD_API_CALL PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; GLAD_API_CALL PFNGLVERTEXATTRIB4SPROC glad_debug_glVertexAttrib4s; #define glVertexAttrib4s glad_debug_glVertexAttrib4s GLAD_API_CALL PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; GLAD_API_CALL PFNGLVERTEXATTRIB4SVPROC glad_debug_glVertexAttrib4sv; #define glVertexAttrib4sv glad_debug_glVertexAttrib4sv GLAD_API_CALL PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; GLAD_API_CALL PFNGLVERTEXATTRIB4UBVPROC glad_debug_glVertexAttrib4ubv; #define glVertexAttrib4ubv glad_debug_glVertexAttrib4ubv GLAD_API_CALL PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; GLAD_API_CALL PFNGLVERTEXATTRIB4UIVPROC glad_debug_glVertexAttrib4uiv; #define glVertexAttrib4uiv glad_debug_glVertexAttrib4uiv GLAD_API_CALL PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; GLAD_API_CALL PFNGLVERTEXATTRIB4USVPROC glad_debug_glVertexAttrib4usv; #define glVertexAttrib4usv glad_debug_glVertexAttrib4usv GLAD_API_CALL PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; GLAD_API_CALL PFNGLVERTEXATTRIBDIVISORPROC glad_debug_glVertexAttribDivisor; #define glVertexAttribDivisor glad_debug_glVertexAttribDivisor GLAD_API_CALL PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; GLAD_API_CALL PFNGLVERTEXATTRIBI1IPROC glad_debug_glVertexAttribI1i; #define glVertexAttribI1i glad_debug_glVertexAttribI1i GLAD_API_CALL PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; GLAD_API_CALL PFNGLVERTEXATTRIBI1IVPROC glad_debug_glVertexAttribI1iv; #define glVertexAttribI1iv glad_debug_glVertexAttribI1iv GLAD_API_CALL PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; GLAD_API_CALL PFNGLVERTEXATTRIBI1UIPROC glad_debug_glVertexAttribI1ui; #define glVertexAttribI1ui glad_debug_glVertexAttribI1ui GLAD_API_CALL PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; GLAD_API_CALL PFNGLVERTEXATTRIBI1UIVPROC glad_debug_glVertexAttribI1uiv; #define glVertexAttribI1uiv glad_debug_glVertexAttribI1uiv GLAD_API_CALL PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; GLAD_API_CALL PFNGLVERTEXATTRIBI2IPROC glad_debug_glVertexAttribI2i; #define glVertexAttribI2i glad_debug_glVertexAttribI2i GLAD_API_CALL PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; GLAD_API_CALL PFNGLVERTEXATTRIBI2IVPROC glad_debug_glVertexAttribI2iv; #define glVertexAttribI2iv glad_debug_glVertexAttribI2iv GLAD_API_CALL PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; GLAD_API_CALL PFNGLVERTEXATTRIBI2UIPROC glad_debug_glVertexAttribI2ui; #define glVertexAttribI2ui glad_debug_glVertexAttribI2ui GLAD_API_CALL PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; GLAD_API_CALL PFNGLVERTEXATTRIBI2UIVPROC glad_debug_glVertexAttribI2uiv; #define glVertexAttribI2uiv glad_debug_glVertexAttribI2uiv GLAD_API_CALL PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; GLAD_API_CALL PFNGLVERTEXATTRIBI3IPROC glad_debug_glVertexAttribI3i; #define glVertexAttribI3i glad_debug_glVertexAttribI3i GLAD_API_CALL PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; GLAD_API_CALL PFNGLVERTEXATTRIBI3IVPROC glad_debug_glVertexAttribI3iv; #define glVertexAttribI3iv glad_debug_glVertexAttribI3iv GLAD_API_CALL PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; GLAD_API_CALL PFNGLVERTEXATTRIBI3UIPROC glad_debug_glVertexAttribI3ui; #define glVertexAttribI3ui glad_debug_glVertexAttribI3ui GLAD_API_CALL PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; GLAD_API_CALL PFNGLVERTEXATTRIBI3UIVPROC glad_debug_glVertexAttribI3uiv; #define glVertexAttribI3uiv glad_debug_glVertexAttribI3uiv GLAD_API_CALL PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; GLAD_API_CALL PFNGLVERTEXATTRIBI4BVPROC glad_debug_glVertexAttribI4bv; #define glVertexAttribI4bv glad_debug_glVertexAttribI4bv GLAD_API_CALL PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; GLAD_API_CALL PFNGLVERTEXATTRIBI4IPROC glad_debug_glVertexAttribI4i; #define glVertexAttribI4i glad_debug_glVertexAttribI4i GLAD_API_CALL PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; GLAD_API_CALL PFNGLVERTEXATTRIBI4IVPROC glad_debug_glVertexAttribI4iv; #define glVertexAttribI4iv glad_debug_glVertexAttribI4iv GLAD_API_CALL PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; GLAD_API_CALL PFNGLVERTEXATTRIBI4SVPROC glad_debug_glVertexAttribI4sv; #define glVertexAttribI4sv glad_debug_glVertexAttribI4sv GLAD_API_CALL PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; GLAD_API_CALL PFNGLVERTEXATTRIBI4UBVPROC glad_debug_glVertexAttribI4ubv; #define glVertexAttribI4ubv glad_debug_glVertexAttribI4ubv GLAD_API_CALL PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; GLAD_API_CALL PFNGLVERTEXATTRIBI4UIPROC glad_debug_glVertexAttribI4ui; #define glVertexAttribI4ui glad_debug_glVertexAttribI4ui GLAD_API_CALL PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; GLAD_API_CALL PFNGLVERTEXATTRIBI4UIVPROC glad_debug_glVertexAttribI4uiv; #define glVertexAttribI4uiv glad_debug_glVertexAttribI4uiv GLAD_API_CALL PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; GLAD_API_CALL PFNGLVERTEXATTRIBI4USVPROC glad_debug_glVertexAttribI4usv; #define glVertexAttribI4usv glad_debug_glVertexAttribI4usv GLAD_API_CALL PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; GLAD_API_CALL PFNGLVERTEXATTRIBIPOINTERPROC glad_debug_glVertexAttribIPointer; #define glVertexAttribIPointer glad_debug_glVertexAttribIPointer GLAD_API_CALL PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; GLAD_API_CALL PFNGLVERTEXATTRIBP1UIPROC glad_debug_glVertexAttribP1ui; #define glVertexAttribP1ui glad_debug_glVertexAttribP1ui GLAD_API_CALL PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; GLAD_API_CALL PFNGLVERTEXATTRIBP1UIVPROC glad_debug_glVertexAttribP1uiv; #define glVertexAttribP1uiv glad_debug_glVertexAttribP1uiv GLAD_API_CALL PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; GLAD_API_CALL PFNGLVERTEXATTRIBP2UIPROC glad_debug_glVertexAttribP2ui; #define glVertexAttribP2ui glad_debug_glVertexAttribP2ui GLAD_API_CALL PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; GLAD_API_CALL PFNGLVERTEXATTRIBP2UIVPROC glad_debug_glVertexAttribP2uiv; #define glVertexAttribP2uiv glad_debug_glVertexAttribP2uiv GLAD_API_CALL PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; GLAD_API_CALL PFNGLVERTEXATTRIBP3UIPROC glad_debug_glVertexAttribP3ui; #define glVertexAttribP3ui glad_debug_glVertexAttribP3ui GLAD_API_CALL PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; GLAD_API_CALL PFNGLVERTEXATTRIBP3UIVPROC glad_debug_glVertexAttribP3uiv; #define glVertexAttribP3uiv glad_debug_glVertexAttribP3uiv GLAD_API_CALL PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; GLAD_API_CALL PFNGLVERTEXATTRIBP4UIPROC glad_debug_glVertexAttribP4ui; #define glVertexAttribP4ui glad_debug_glVertexAttribP4ui GLAD_API_CALL PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; GLAD_API_CALL PFNGLVERTEXATTRIBP4UIVPROC glad_debug_glVertexAttribP4uiv; #define glVertexAttribP4uiv glad_debug_glVertexAttribP4uiv GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERPROC glad_debug_glVertexAttribPointer; #define glVertexAttribPointer glad_debug_glVertexAttribPointer GLAD_API_CALL PFNGLVIEWPORTPROC glad_glViewport; GLAD_API_CALL PFNGLVIEWPORTPROC glad_debug_glViewport; #define glViewport glad_debug_glViewport GLAD_API_CALL PFNGLWAITSYNCPROC glad_glWaitSync; GLAD_API_CALL PFNGLWAITSYNCPROC glad_debug_glWaitSync; #define glWaitSync glad_debug_glWaitSync GLAD_API_CALL void gladSetGLPreCallback(GLADprecallback cb); GLAD_API_CALL void gladSetGLPostCallback(GLADpostcallback cb); GLAD_API_CALL void gladInstallGLDebug(void); GLAD_API_CALL void gladUninstallGLDebug(void); GLAD_API_CALL int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr); GLAD_API_CALL int gladLoadGL( GLADloadfunc load); #ifdef __cplusplus } #endif #endif /* Source */ #ifdef GLAD_GL_IMPLEMENTATION #include #include #include #ifndef GLAD_IMPL_UTIL_C_ #define GLAD_IMPL_UTIL_C_ #ifdef _MSC_VER #define GLAD_IMPL_UTIL_SSCANF sscanf_s #else #define GLAD_IMPL_UTIL_SSCANF sscanf #endif #endif /* GLAD_IMPL_UTIL_C_ */ int GLAD_GL_VERSION_1_0 = 0; int GLAD_GL_VERSION_1_1 = 0; int GLAD_GL_VERSION_1_2 = 0; int GLAD_GL_VERSION_1_3 = 0; int GLAD_GL_VERSION_1_4 = 0; int GLAD_GL_VERSION_1_5 = 0; int GLAD_GL_VERSION_2_0 = 0; int GLAD_GL_VERSION_2_1 = 0; int GLAD_GL_VERSION_3_0 = 0; int GLAD_GL_VERSION_3_1 = 0; int GLAD_GL_VERSION_3_2 = 0; int GLAD_GL_VERSION_3_3 = 0; int GLAD_GL_ARB_copy_image = 0; int GLAD_GL_ARB_multisample = 0; int GLAD_GL_ARB_robustness = 0; int GLAD_GL_ARB_texture_storage = 0; int GLAD_GL_KHR_debug = 0; static void _pre_call_gl_callback_default(const char *name, GLADapiproc apiproc, int len_args, ...) { (void) len_args; if (apiproc == NULL) { fprintf(stderr, "GLAD: ERROR %s is NULL!\n", name); return; } if (glad_glGetError == NULL) { fprintf(stderr, "GLAD: ERROR glGetError is NULL!\n"); return; } (void) glad_glGetError(); } static void _post_call_gl_callback_default(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...) { GLenum error_code; (void) ret; (void) apiproc; (void) len_args; error_code = glad_glGetError(); if (error_code != GL_NO_ERROR) { fprintf(stderr, "GLAD: ERROR %d in %s!\n", error_code, name); } } static GLADprecallback _pre_call_gl_callback = _pre_call_gl_callback_default; void gladSetGLPreCallback(GLADprecallback cb) { _pre_call_gl_callback = cb; } static GLADpostcallback _post_call_gl_callback = _post_call_gl_callback_default; void gladSetGLPostCallback(GLADpostcallback cb) { _post_call_gl_callback = cb; } PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; static void GLAD_API_PTR glad_debug_impl_glActiveTexture(GLenum texture) { _pre_call_gl_callback("glActiveTexture", (GLADapiproc) glad_glActiveTexture, 1, texture); glad_glActiveTexture(texture); _post_call_gl_callback(NULL, "glActiveTexture", (GLADapiproc) glad_glActiveTexture, 1, texture); } PFNGLACTIVETEXTUREPROC glad_debug_glActiveTexture = glad_debug_impl_glActiveTexture; PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; static void GLAD_API_PTR glad_debug_impl_glAttachShader(GLuint program, GLuint shader) { _pre_call_gl_callback("glAttachShader", (GLADapiproc) glad_glAttachShader, 2, program, shader); glad_glAttachShader(program, shader); _post_call_gl_callback(NULL, "glAttachShader", (GLADapiproc) glad_glAttachShader, 2, program, shader); } PFNGLATTACHSHADERPROC glad_debug_glAttachShader = glad_debug_impl_glAttachShader; PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; static void GLAD_API_PTR glad_debug_impl_glBeginConditionalRender(GLuint id, GLenum mode) { _pre_call_gl_callback("glBeginConditionalRender", (GLADapiproc) glad_glBeginConditionalRender, 2, id, mode); glad_glBeginConditionalRender(id, mode); _post_call_gl_callback(NULL, "glBeginConditionalRender", (GLADapiproc) glad_glBeginConditionalRender, 2, id, mode); } PFNGLBEGINCONDITIONALRENDERPROC glad_debug_glBeginConditionalRender = glad_debug_impl_glBeginConditionalRender; PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; static void GLAD_API_PTR glad_debug_impl_glBeginQuery(GLenum target, GLuint id) { _pre_call_gl_callback("glBeginQuery", (GLADapiproc) glad_glBeginQuery, 2, target, id); glad_glBeginQuery(target, id); _post_call_gl_callback(NULL, "glBeginQuery", (GLADapiproc) glad_glBeginQuery, 2, target, id); } PFNGLBEGINQUERYPROC glad_debug_glBeginQuery = glad_debug_impl_glBeginQuery; PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; static void GLAD_API_PTR glad_debug_impl_glBeginTransformFeedback(GLenum primitiveMode) { _pre_call_gl_callback("glBeginTransformFeedback", (GLADapiproc) glad_glBeginTransformFeedback, 1, primitiveMode); glad_glBeginTransformFeedback(primitiveMode); _post_call_gl_callback(NULL, "glBeginTransformFeedback", (GLADapiproc) glad_glBeginTransformFeedback, 1, primitiveMode); } PFNGLBEGINTRANSFORMFEEDBACKPROC glad_debug_glBeginTransformFeedback = glad_debug_impl_glBeginTransformFeedback; PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; static void GLAD_API_PTR glad_debug_impl_glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) { _pre_call_gl_callback("glBindAttribLocation", (GLADapiproc) glad_glBindAttribLocation, 3, program, index, name); glad_glBindAttribLocation(program, index, name); _post_call_gl_callback(NULL, "glBindAttribLocation", (GLADapiproc) glad_glBindAttribLocation, 3, program, index, name); } PFNGLBINDATTRIBLOCATIONPROC glad_debug_glBindAttribLocation = glad_debug_impl_glBindAttribLocation; PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glBindBuffer(GLenum target, GLuint buffer) { _pre_call_gl_callback("glBindBuffer", (GLADapiproc) glad_glBindBuffer, 2, target, buffer); glad_glBindBuffer(target, buffer); _post_call_gl_callback(NULL, "glBindBuffer", (GLADapiproc) glad_glBindBuffer, 2, target, buffer); } PFNGLBINDBUFFERPROC glad_debug_glBindBuffer = glad_debug_impl_glBindBuffer; PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; static void GLAD_API_PTR glad_debug_impl_glBindBufferBase(GLenum target, GLuint index, GLuint buffer) { _pre_call_gl_callback("glBindBufferBase", (GLADapiproc) glad_glBindBufferBase, 3, target, index, buffer); glad_glBindBufferBase(target, index, buffer); _post_call_gl_callback(NULL, "glBindBufferBase", (GLADapiproc) glad_glBindBufferBase, 3, target, index, buffer); } PFNGLBINDBUFFERBASEPROC glad_debug_glBindBufferBase = glad_debug_impl_glBindBufferBase; PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; static void GLAD_API_PTR glad_debug_impl_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) { _pre_call_gl_callback("glBindBufferRange", (GLADapiproc) glad_glBindBufferRange, 5, target, index, buffer, offset, size); glad_glBindBufferRange(target, index, buffer, offset, size); _post_call_gl_callback(NULL, "glBindBufferRange", (GLADapiproc) glad_glBindBufferRange, 5, target, index, buffer, offset, size); } PFNGLBINDBUFFERRANGEPROC glad_debug_glBindBufferRange = glad_debug_impl_glBindBufferRange; PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; static void GLAD_API_PTR glad_debug_impl_glBindFragDataLocation(GLuint program, GLuint color, const GLchar * name) { _pre_call_gl_callback("glBindFragDataLocation", (GLADapiproc) glad_glBindFragDataLocation, 3, program, color, name); glad_glBindFragDataLocation(program, color, name); _post_call_gl_callback(NULL, "glBindFragDataLocation", (GLADapiproc) glad_glBindFragDataLocation, 3, program, color, name); } PFNGLBINDFRAGDATALOCATIONPROC glad_debug_glBindFragDataLocation = glad_debug_impl_glBindFragDataLocation; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; static void GLAD_API_PTR glad_debug_impl_glBindFragDataLocationIndexed(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name) { _pre_call_gl_callback("glBindFragDataLocationIndexed", (GLADapiproc) glad_glBindFragDataLocationIndexed, 4, program, colorNumber, index, name); glad_glBindFragDataLocationIndexed(program, colorNumber, index, name); _post_call_gl_callback(NULL, "glBindFragDataLocationIndexed", (GLADapiproc) glad_glBindFragDataLocationIndexed, 4, program, colorNumber, index, name); } PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_debug_glBindFragDataLocationIndexed = glad_debug_impl_glBindFragDataLocationIndexed; PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glBindFramebuffer(GLenum target, GLuint framebuffer) { _pre_call_gl_callback("glBindFramebuffer", (GLADapiproc) glad_glBindFramebuffer, 2, target, framebuffer); glad_glBindFramebuffer(target, framebuffer); _post_call_gl_callback(NULL, "glBindFramebuffer", (GLADapiproc) glad_glBindFramebuffer, 2, target, framebuffer); } PFNGLBINDFRAMEBUFFERPROC glad_debug_glBindFramebuffer = glad_debug_impl_glBindFramebuffer; PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glBindRenderbuffer(GLenum target, GLuint renderbuffer) { _pre_call_gl_callback("glBindRenderbuffer", (GLADapiproc) glad_glBindRenderbuffer, 2, target, renderbuffer); glad_glBindRenderbuffer(target, renderbuffer); _post_call_gl_callback(NULL, "glBindRenderbuffer", (GLADapiproc) glad_glBindRenderbuffer, 2, target, renderbuffer); } PFNGLBINDRENDERBUFFERPROC glad_debug_glBindRenderbuffer = glad_debug_impl_glBindRenderbuffer; PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; static void GLAD_API_PTR glad_debug_impl_glBindSampler(GLuint unit, GLuint sampler) { _pre_call_gl_callback("glBindSampler", (GLADapiproc) glad_glBindSampler, 2, unit, sampler); glad_glBindSampler(unit, sampler); _post_call_gl_callback(NULL, "glBindSampler", (GLADapiproc) glad_glBindSampler, 2, unit, sampler); } PFNGLBINDSAMPLERPROC glad_debug_glBindSampler = glad_debug_impl_glBindSampler; PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; static void GLAD_API_PTR glad_debug_impl_glBindTexture(GLenum target, GLuint texture) { _pre_call_gl_callback("glBindTexture", (GLADapiproc) glad_glBindTexture, 2, target, texture); glad_glBindTexture(target, texture); _post_call_gl_callback(NULL, "glBindTexture", (GLADapiproc) glad_glBindTexture, 2, target, texture); } PFNGLBINDTEXTUREPROC glad_debug_glBindTexture = glad_debug_impl_glBindTexture; PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; static void GLAD_API_PTR glad_debug_impl_glBindVertexArray(GLuint array) { _pre_call_gl_callback("glBindVertexArray", (GLADapiproc) glad_glBindVertexArray, 1, array); glad_glBindVertexArray(array); _post_call_gl_callback(NULL, "glBindVertexArray", (GLADapiproc) glad_glBindVertexArray, 1, array); } PFNGLBINDVERTEXARRAYPROC glad_debug_glBindVertexArray = glad_debug_impl_glBindVertexArray; PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; static void GLAD_API_PTR glad_debug_impl_glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { _pre_call_gl_callback("glBlendColor", (GLADapiproc) glad_glBlendColor, 4, red, green, blue, alpha); glad_glBlendColor(red, green, blue, alpha); _post_call_gl_callback(NULL, "glBlendColor", (GLADapiproc) glad_glBlendColor, 4, red, green, blue, alpha); } PFNGLBLENDCOLORPROC glad_debug_glBlendColor = glad_debug_impl_glBlendColor; PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; static void GLAD_API_PTR glad_debug_impl_glBlendEquation(GLenum mode) { _pre_call_gl_callback("glBlendEquation", (GLADapiproc) glad_glBlendEquation, 1, mode); glad_glBlendEquation(mode); _post_call_gl_callback(NULL, "glBlendEquation", (GLADapiproc) glad_glBlendEquation, 1, mode); } PFNGLBLENDEQUATIONPROC glad_debug_glBlendEquation = glad_debug_impl_glBlendEquation; PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; static void GLAD_API_PTR glad_debug_impl_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) { _pre_call_gl_callback("glBlendEquationSeparate", (GLADapiproc) glad_glBlendEquationSeparate, 2, modeRGB, modeAlpha); glad_glBlendEquationSeparate(modeRGB, modeAlpha); _post_call_gl_callback(NULL, "glBlendEquationSeparate", (GLADapiproc) glad_glBlendEquationSeparate, 2, modeRGB, modeAlpha); } PFNGLBLENDEQUATIONSEPARATEPROC glad_debug_glBlendEquationSeparate = glad_debug_impl_glBlendEquationSeparate; PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; static void GLAD_API_PTR glad_debug_impl_glBlendFunc(GLenum sfactor, GLenum dfactor) { _pre_call_gl_callback("glBlendFunc", (GLADapiproc) glad_glBlendFunc, 2, sfactor, dfactor); glad_glBlendFunc(sfactor, dfactor); _post_call_gl_callback(NULL, "glBlendFunc", (GLADapiproc) glad_glBlendFunc, 2, sfactor, dfactor); } PFNGLBLENDFUNCPROC glad_debug_glBlendFunc = glad_debug_impl_glBlendFunc; PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; static void GLAD_API_PTR glad_debug_impl_glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) { _pre_call_gl_callback("glBlendFuncSeparate", (GLADapiproc) glad_glBlendFuncSeparate, 4, sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); glad_glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); _post_call_gl_callback(NULL, "glBlendFuncSeparate", (GLADapiproc) glad_glBlendFuncSeparate, 4, sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); } PFNGLBLENDFUNCSEPARATEPROC glad_debug_glBlendFuncSeparate = glad_debug_impl_glBlendFuncSeparate; PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { _pre_call_gl_callback("glBlitFramebuffer", (GLADapiproc) glad_glBlitFramebuffer, 10, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); glad_glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); _post_call_gl_callback(NULL, "glBlitFramebuffer", (GLADapiproc) glad_glBlitFramebuffer, 10, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } PFNGLBLITFRAMEBUFFERPROC glad_debug_glBlitFramebuffer = glad_debug_impl_glBlitFramebuffer; PFNGLBUFFERDATAPROC glad_glBufferData = NULL; static void GLAD_API_PTR glad_debug_impl_glBufferData(GLenum target, GLsizeiptr size, const void * data, GLenum usage) { _pre_call_gl_callback("glBufferData", (GLADapiproc) glad_glBufferData, 4, target, size, data, usage); glad_glBufferData(target, size, data, usage); _post_call_gl_callback(NULL, "glBufferData", (GLADapiproc) glad_glBufferData, 4, target, size, data, usage); } PFNGLBUFFERDATAPROC glad_debug_glBufferData = glad_debug_impl_glBufferData; PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; static void GLAD_API_PTR glad_debug_impl_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void * data) { _pre_call_gl_callback("glBufferSubData", (GLADapiproc) glad_glBufferSubData, 4, target, offset, size, data); glad_glBufferSubData(target, offset, size, data); _post_call_gl_callback(NULL, "glBufferSubData", (GLADapiproc) glad_glBufferSubData, 4, target, offset, size, data); } PFNGLBUFFERSUBDATAPROC glad_debug_glBufferSubData = glad_debug_impl_glBufferSubData; PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; static GLenum GLAD_API_PTR glad_debug_impl_glCheckFramebufferStatus(GLenum target) { GLenum ret; _pre_call_gl_callback("glCheckFramebufferStatus", (GLADapiproc) glad_glCheckFramebufferStatus, 1, target); ret = glad_glCheckFramebufferStatus(target); _post_call_gl_callback((void*) &ret, "glCheckFramebufferStatus", (GLADapiproc) glad_glCheckFramebufferStatus, 1, target); return ret; } PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_debug_glCheckFramebufferStatus = glad_debug_impl_glCheckFramebufferStatus; PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; static void GLAD_API_PTR glad_debug_impl_glClampColor(GLenum target, GLenum clamp) { _pre_call_gl_callback("glClampColor", (GLADapiproc) glad_glClampColor, 2, target, clamp); glad_glClampColor(target, clamp); _post_call_gl_callback(NULL, "glClampColor", (GLADapiproc) glad_glClampColor, 2, target, clamp); } PFNGLCLAMPCOLORPROC glad_debug_glClampColor = glad_debug_impl_glClampColor; PFNGLCLEARPROC glad_glClear = NULL; static void GLAD_API_PTR glad_debug_impl_glClear(GLbitfield mask) { _pre_call_gl_callback("glClear", (GLADapiproc) glad_glClear, 1, mask); glad_glClear(mask); _post_call_gl_callback(NULL, "glClear", (GLADapiproc) glad_glClear, 1, mask); } PFNGLCLEARPROC glad_debug_glClear = glad_debug_impl_glClear; PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; static void GLAD_API_PTR glad_debug_impl_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) { _pre_call_gl_callback("glClearBufferfi", (GLADapiproc) glad_glClearBufferfi, 4, buffer, drawbuffer, depth, stencil); glad_glClearBufferfi(buffer, drawbuffer, depth, stencil); _post_call_gl_callback(NULL, "glClearBufferfi", (GLADapiproc) glad_glClearBufferfi, 4, buffer, drawbuffer, depth, stencil); } PFNGLCLEARBUFFERFIPROC glad_debug_glClearBufferfi = glad_debug_impl_glClearBufferfi; PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; static void GLAD_API_PTR glad_debug_impl_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value) { _pre_call_gl_callback("glClearBufferfv", (GLADapiproc) glad_glClearBufferfv, 3, buffer, drawbuffer, value); glad_glClearBufferfv(buffer, drawbuffer, value); _post_call_gl_callback(NULL, "glClearBufferfv", (GLADapiproc) glad_glClearBufferfv, 3, buffer, drawbuffer, value); } PFNGLCLEARBUFFERFVPROC glad_debug_glClearBufferfv = glad_debug_impl_glClearBufferfv; PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; static void GLAD_API_PTR glad_debug_impl_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value) { _pre_call_gl_callback("glClearBufferiv", (GLADapiproc) glad_glClearBufferiv, 3, buffer, drawbuffer, value); glad_glClearBufferiv(buffer, drawbuffer, value); _post_call_gl_callback(NULL, "glClearBufferiv", (GLADapiproc) glad_glClearBufferiv, 3, buffer, drawbuffer, value); } PFNGLCLEARBUFFERIVPROC glad_debug_glClearBufferiv = glad_debug_impl_glClearBufferiv; PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value) { _pre_call_gl_callback("glClearBufferuiv", (GLADapiproc) glad_glClearBufferuiv, 3, buffer, drawbuffer, value); glad_glClearBufferuiv(buffer, drawbuffer, value); _post_call_gl_callback(NULL, "glClearBufferuiv", (GLADapiproc) glad_glClearBufferuiv, 3, buffer, drawbuffer, value); } PFNGLCLEARBUFFERUIVPROC glad_debug_glClearBufferuiv = glad_debug_impl_glClearBufferuiv; PFNGLCLEARCOLORPROC glad_glClearColor = NULL; static void GLAD_API_PTR glad_debug_impl_glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { _pre_call_gl_callback("glClearColor", (GLADapiproc) glad_glClearColor, 4, red, green, blue, alpha); glad_glClearColor(red, green, blue, alpha); _post_call_gl_callback(NULL, "glClearColor", (GLADapiproc) glad_glClearColor, 4, red, green, blue, alpha); } PFNGLCLEARCOLORPROC glad_debug_glClearColor = glad_debug_impl_glClearColor; PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; static void GLAD_API_PTR glad_debug_impl_glClearDepth(GLdouble depth) { _pre_call_gl_callback("glClearDepth", (GLADapiproc) glad_glClearDepth, 1, depth); glad_glClearDepth(depth); _post_call_gl_callback(NULL, "glClearDepth", (GLADapiproc) glad_glClearDepth, 1, depth); } PFNGLCLEARDEPTHPROC glad_debug_glClearDepth = glad_debug_impl_glClearDepth; PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; static void GLAD_API_PTR glad_debug_impl_glClearStencil(GLint s) { _pre_call_gl_callback("glClearStencil", (GLADapiproc) glad_glClearStencil, 1, s); glad_glClearStencil(s); _post_call_gl_callback(NULL, "glClearStencil", (GLADapiproc) glad_glClearStencil, 1, s); } PFNGLCLEARSTENCILPROC glad_debug_glClearStencil = glad_debug_impl_glClearStencil; PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; static GLenum GLAD_API_PTR glad_debug_impl_glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) { GLenum ret; _pre_call_gl_callback("glClientWaitSync", (GLADapiproc) glad_glClientWaitSync, 3, sync, flags, timeout); ret = glad_glClientWaitSync(sync, flags, timeout); _post_call_gl_callback((void*) &ret, "glClientWaitSync", (GLADapiproc) glad_glClientWaitSync, 3, sync, flags, timeout); return ret; } PFNGLCLIENTWAITSYNCPROC glad_debug_glClientWaitSync = glad_debug_impl_glClientWaitSync; PFNGLCOLORMASKPROC glad_glColorMask = NULL; static void GLAD_API_PTR glad_debug_impl_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { _pre_call_gl_callback("glColorMask", (GLADapiproc) glad_glColorMask, 4, red, green, blue, alpha); glad_glColorMask(red, green, blue, alpha); _post_call_gl_callback(NULL, "glColorMask", (GLADapiproc) glad_glColorMask, 4, red, green, blue, alpha); } PFNGLCOLORMASKPROC glad_debug_glColorMask = glad_debug_impl_glColorMask; PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; static void GLAD_API_PTR glad_debug_impl_glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { _pre_call_gl_callback("glColorMaski", (GLADapiproc) glad_glColorMaski, 5, index, r, g, b, a); glad_glColorMaski(index, r, g, b, a); _post_call_gl_callback(NULL, "glColorMaski", (GLADapiproc) glad_glColorMaski, 5, index, r, g, b, a); } PFNGLCOLORMASKIPROC glad_debug_glColorMaski = glad_debug_impl_glColorMaski; PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; static void GLAD_API_PTR glad_debug_impl_glCompileShader(GLuint shader) { _pre_call_gl_callback("glCompileShader", (GLADapiproc) glad_glCompileShader, 1, shader); glad_glCompileShader(shader); _post_call_gl_callback(NULL, "glCompileShader", (GLADapiproc) glad_glCompileShader, 1, shader); } PFNGLCOMPILESHADERPROC glad_debug_glCompileShader = glad_debug_impl_glCompileShader; PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexImage1D", (GLADapiproc) glad_glCompressedTexImage1D, 7, target, level, internalformat, width, border, imageSize, data); glad_glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexImage1D", (GLADapiproc) glad_glCompressedTexImage1D, 7, target, level, internalformat, width, border, imageSize, data); } PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_debug_glCompressedTexImage1D = glad_debug_impl_glCompressedTexImage1D; PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexImage2D", (GLADapiproc) glad_glCompressedTexImage2D, 8, target, level, internalformat, width, height, border, imageSize, data); glad_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexImage2D", (GLADapiproc) glad_glCompressedTexImage2D, 8, target, level, internalformat, width, height, border, imageSize, data); } PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_debug_glCompressedTexImage2D = glad_debug_impl_glCompressedTexImage2D; PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexImage3D", (GLADapiproc) glad_glCompressedTexImage3D, 9, target, level, internalformat, width, height, depth, border, imageSize, data); glad_glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexImage3D", (GLADapiproc) glad_glCompressedTexImage3D, 9, target, level, internalformat, width, height, depth, border, imageSize, data); } PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_debug_glCompressedTexImage3D = glad_debug_impl_glCompressedTexImage3D; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexSubImage1D", (GLADapiproc) glad_glCompressedTexSubImage1D, 7, target, level, xoffset, width, format, imageSize, data); glad_glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexSubImage1D", (GLADapiproc) glad_glCompressedTexSubImage1D, 7, target, level, xoffset, width, format, imageSize, data); } PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_debug_glCompressedTexSubImage1D = glad_debug_impl_glCompressedTexSubImage1D; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexSubImage2D", (GLADapiproc) glad_glCompressedTexSubImage2D, 9, target, level, xoffset, yoffset, width, height, format, imageSize, data); glad_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexSubImage2D", (GLADapiproc) glad_glCompressedTexSubImage2D, 9, target, level, xoffset, yoffset, width, height, format, imageSize, data); } PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_debug_glCompressedTexSubImage2D = glad_debug_impl_glCompressedTexSubImage2D; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data) { _pre_call_gl_callback("glCompressedTexSubImage3D", (GLADapiproc) glad_glCompressedTexSubImage3D, 11, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); glad_glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); _post_call_gl_callback(NULL, "glCompressedTexSubImage3D", (GLADapiproc) glad_glCompressedTexSubImage3D, 11, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_debug_glCompressedTexSubImage3D = glad_debug_impl_glCompressedTexSubImage3D; PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { _pre_call_gl_callback("glCopyBufferSubData", (GLADapiproc) glad_glCopyBufferSubData, 5, readTarget, writeTarget, readOffset, writeOffset, size); glad_glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); _post_call_gl_callback(NULL, "glCopyBufferSubData", (GLADapiproc) glad_glCopyBufferSubData, 5, readTarget, writeTarget, readOffset, writeOffset, size); } PFNGLCOPYBUFFERSUBDATAPROC glad_debug_glCopyBufferSubData = glad_debug_impl_glCopyBufferSubData; PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) { _pre_call_gl_callback("glCopyImageSubData", (GLADapiproc) glad_glCopyImageSubData, 15, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); glad_glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); _post_call_gl_callback(NULL, "glCopyImageSubData", (GLADapiproc) glad_glCopyImageSubData, 15, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); } PFNGLCOPYIMAGESUBDATAPROC glad_debug_glCopyImageSubData = glad_debug_impl_glCopyImageSubData; PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { _pre_call_gl_callback("glCopyTexImage1D", (GLADapiproc) glad_glCopyTexImage1D, 7, target, level, internalformat, x, y, width, border); glad_glCopyTexImage1D(target, level, internalformat, x, y, width, border); _post_call_gl_callback(NULL, "glCopyTexImage1D", (GLADapiproc) glad_glCopyTexImage1D, 7, target, level, internalformat, x, y, width, border); } PFNGLCOPYTEXIMAGE1DPROC glad_debug_glCopyTexImage1D = glad_debug_impl_glCopyTexImage1D; PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { _pre_call_gl_callback("glCopyTexImage2D", (GLADapiproc) glad_glCopyTexImage2D, 8, target, level, internalformat, x, y, width, height, border); glad_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); _post_call_gl_callback(NULL, "glCopyTexImage2D", (GLADapiproc) glad_glCopyTexImage2D, 8, target, level, internalformat, x, y, width, height, border); } PFNGLCOPYTEXIMAGE2DPROC glad_debug_glCopyTexImage2D = glad_debug_impl_glCopyTexImage2D; PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { _pre_call_gl_callback("glCopyTexSubImage1D", (GLADapiproc) glad_glCopyTexSubImage1D, 6, target, level, xoffset, x, y, width); glad_glCopyTexSubImage1D(target, level, xoffset, x, y, width); _post_call_gl_callback(NULL, "glCopyTexSubImage1D", (GLADapiproc) glad_glCopyTexSubImage1D, 6, target, level, xoffset, x, y, width); } PFNGLCOPYTEXSUBIMAGE1DPROC glad_debug_glCopyTexSubImage1D = glad_debug_impl_glCopyTexSubImage1D; PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { _pre_call_gl_callback("glCopyTexSubImage2D", (GLADapiproc) glad_glCopyTexSubImage2D, 8, target, level, xoffset, yoffset, x, y, width, height); glad_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); _post_call_gl_callback(NULL, "glCopyTexSubImage2D", (GLADapiproc) glad_glCopyTexSubImage2D, 8, target, level, xoffset, yoffset, x, y, width, height); } PFNGLCOPYTEXSUBIMAGE2DPROC glad_debug_glCopyTexSubImage2D = glad_debug_impl_glCopyTexSubImage2D; PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { _pre_call_gl_callback("glCopyTexSubImage3D", (GLADapiproc) glad_glCopyTexSubImage3D, 9, target, level, xoffset, yoffset, zoffset, x, y, width, height); glad_glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); _post_call_gl_callback(NULL, "glCopyTexSubImage3D", (GLADapiproc) glad_glCopyTexSubImage3D, 9, target, level, xoffset, yoffset, zoffset, x, y, width, height); } PFNGLCOPYTEXSUBIMAGE3DPROC glad_debug_glCopyTexSubImage3D = glad_debug_impl_glCopyTexSubImage3D; PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; static GLuint GLAD_API_PTR glad_debug_impl_glCreateProgram(void) { GLuint ret; _pre_call_gl_callback("glCreateProgram", (GLADapiproc) glad_glCreateProgram, 0); ret = glad_glCreateProgram(); _post_call_gl_callback((void*) &ret, "glCreateProgram", (GLADapiproc) glad_glCreateProgram, 0); return ret; } PFNGLCREATEPROGRAMPROC glad_debug_glCreateProgram = glad_debug_impl_glCreateProgram; PFNGLCREATESHADERPROC glad_glCreateShader = NULL; static GLuint GLAD_API_PTR glad_debug_impl_glCreateShader(GLenum type) { GLuint ret; _pre_call_gl_callback("glCreateShader", (GLADapiproc) glad_glCreateShader, 1, type); ret = glad_glCreateShader(type); _post_call_gl_callback((void*) &ret, "glCreateShader", (GLADapiproc) glad_glCreateShader, 1, type); return ret; } PFNGLCREATESHADERPROC glad_debug_glCreateShader = glad_debug_impl_glCreateShader; PFNGLCULLFACEPROC glad_glCullFace = NULL; static void GLAD_API_PTR glad_debug_impl_glCullFace(GLenum mode) { _pre_call_gl_callback("glCullFace", (GLADapiproc) glad_glCullFace, 1, mode); glad_glCullFace(mode); _post_call_gl_callback(NULL, "glCullFace", (GLADapiproc) glad_glCullFace, 1, mode); } PFNGLCULLFACEPROC glad_debug_glCullFace = glad_debug_impl_glCullFace; PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL; static void GLAD_API_PTR glad_debug_impl_glDebugMessageCallback(GLDEBUGPROC callback, const void * userParam) { _pre_call_gl_callback("glDebugMessageCallback", (GLADapiproc) glad_glDebugMessageCallback, 2, callback, userParam); glad_glDebugMessageCallback(callback, userParam); _post_call_gl_callback(NULL, "glDebugMessageCallback", (GLADapiproc) glad_glDebugMessageCallback, 2, callback, userParam); } PFNGLDEBUGMESSAGECALLBACKPROC glad_debug_glDebugMessageCallback = glad_debug_impl_glDebugMessageCallback; PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL; static void GLAD_API_PTR glad_debug_impl_glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) { _pre_call_gl_callback("glDebugMessageControl", (GLADapiproc) glad_glDebugMessageControl, 6, source, type, severity, count, ids, enabled); glad_glDebugMessageControl(source, type, severity, count, ids, enabled); _post_call_gl_callback(NULL, "glDebugMessageControl", (GLADapiproc) glad_glDebugMessageControl, 6, source, type, severity, count, ids, enabled); } PFNGLDEBUGMESSAGECONTROLPROC glad_debug_glDebugMessageControl = glad_debug_impl_glDebugMessageControl; PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL; static void GLAD_API_PTR glad_debug_impl_glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf) { _pre_call_gl_callback("glDebugMessageInsert", (GLADapiproc) glad_glDebugMessageInsert, 6, source, type, id, severity, length, buf); glad_glDebugMessageInsert(source, type, id, severity, length, buf); _post_call_gl_callback(NULL, "glDebugMessageInsert", (GLADapiproc) glad_glDebugMessageInsert, 6, source, type, id, severity, length, buf); } PFNGLDEBUGMESSAGEINSERTPROC glad_debug_glDebugMessageInsert = glad_debug_impl_glDebugMessageInsert; PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteBuffers(GLsizei n, const GLuint * buffers) { _pre_call_gl_callback("glDeleteBuffers", (GLADapiproc) glad_glDeleteBuffers, 2, n, buffers); glad_glDeleteBuffers(n, buffers); _post_call_gl_callback(NULL, "glDeleteBuffers", (GLADapiproc) glad_glDeleteBuffers, 2, n, buffers); } PFNGLDELETEBUFFERSPROC glad_debug_glDeleteBuffers = glad_debug_impl_glDeleteBuffers; PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) { _pre_call_gl_callback("glDeleteFramebuffers", (GLADapiproc) glad_glDeleteFramebuffers, 2, n, framebuffers); glad_glDeleteFramebuffers(n, framebuffers); _post_call_gl_callback(NULL, "glDeleteFramebuffers", (GLADapiproc) glad_glDeleteFramebuffers, 2, n, framebuffers); } PFNGLDELETEFRAMEBUFFERSPROC glad_debug_glDeleteFramebuffers = glad_debug_impl_glDeleteFramebuffers; PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteProgram(GLuint program) { _pre_call_gl_callback("glDeleteProgram", (GLADapiproc) glad_glDeleteProgram, 1, program); glad_glDeleteProgram(program); _post_call_gl_callback(NULL, "glDeleteProgram", (GLADapiproc) glad_glDeleteProgram, 1, program); } PFNGLDELETEPROGRAMPROC glad_debug_glDeleteProgram = glad_debug_impl_glDeleteProgram; PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteQueries(GLsizei n, const GLuint * ids) { _pre_call_gl_callback("glDeleteQueries", (GLADapiproc) glad_glDeleteQueries, 2, n, ids); glad_glDeleteQueries(n, ids); _post_call_gl_callback(NULL, "glDeleteQueries", (GLADapiproc) glad_glDeleteQueries, 2, n, ids); } PFNGLDELETEQUERIESPROC glad_debug_glDeleteQueries = glad_debug_impl_glDeleteQueries; PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) { _pre_call_gl_callback("glDeleteRenderbuffers", (GLADapiproc) glad_glDeleteRenderbuffers, 2, n, renderbuffers); glad_glDeleteRenderbuffers(n, renderbuffers); _post_call_gl_callback(NULL, "glDeleteRenderbuffers", (GLADapiproc) glad_glDeleteRenderbuffers, 2, n, renderbuffers); } PFNGLDELETERENDERBUFFERSPROC glad_debug_glDeleteRenderbuffers = glad_debug_impl_glDeleteRenderbuffers; PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteSamplers(GLsizei count, const GLuint * samplers) { _pre_call_gl_callback("glDeleteSamplers", (GLADapiproc) glad_glDeleteSamplers, 2, count, samplers); glad_glDeleteSamplers(count, samplers); _post_call_gl_callback(NULL, "glDeleteSamplers", (GLADapiproc) glad_glDeleteSamplers, 2, count, samplers); } PFNGLDELETESAMPLERSPROC glad_debug_glDeleteSamplers = glad_debug_impl_glDeleteSamplers; PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteShader(GLuint shader) { _pre_call_gl_callback("glDeleteShader", (GLADapiproc) glad_glDeleteShader, 1, shader); glad_glDeleteShader(shader); _post_call_gl_callback(NULL, "glDeleteShader", (GLADapiproc) glad_glDeleteShader, 1, shader); } PFNGLDELETESHADERPROC glad_debug_glDeleteShader = glad_debug_impl_glDeleteShader; PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteSync(GLsync sync) { _pre_call_gl_callback("glDeleteSync", (GLADapiproc) glad_glDeleteSync, 1, sync); glad_glDeleteSync(sync); _post_call_gl_callback(NULL, "glDeleteSync", (GLADapiproc) glad_glDeleteSync, 1, sync); } PFNGLDELETESYNCPROC glad_debug_glDeleteSync = glad_debug_impl_glDeleteSync; PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteTextures(GLsizei n, const GLuint * textures) { _pre_call_gl_callback("glDeleteTextures", (GLADapiproc) glad_glDeleteTextures, 2, n, textures); glad_glDeleteTextures(n, textures); _post_call_gl_callback(NULL, "glDeleteTextures", (GLADapiproc) glad_glDeleteTextures, 2, n, textures); } PFNGLDELETETEXTURESPROC glad_debug_glDeleteTextures = glad_debug_impl_glDeleteTextures; PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; static void GLAD_API_PTR glad_debug_impl_glDeleteVertexArrays(GLsizei n, const GLuint * arrays) { _pre_call_gl_callback("glDeleteVertexArrays", (GLADapiproc) glad_glDeleteVertexArrays, 2, n, arrays); glad_glDeleteVertexArrays(n, arrays); _post_call_gl_callback(NULL, "glDeleteVertexArrays", (GLADapiproc) glad_glDeleteVertexArrays, 2, n, arrays); } PFNGLDELETEVERTEXARRAYSPROC glad_debug_glDeleteVertexArrays = glad_debug_impl_glDeleteVertexArrays; PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; static void GLAD_API_PTR glad_debug_impl_glDepthFunc(GLenum func) { _pre_call_gl_callback("glDepthFunc", (GLADapiproc) glad_glDepthFunc, 1, func); glad_glDepthFunc(func); _post_call_gl_callback(NULL, "glDepthFunc", (GLADapiproc) glad_glDepthFunc, 1, func); } PFNGLDEPTHFUNCPROC glad_debug_glDepthFunc = glad_debug_impl_glDepthFunc; PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; static void GLAD_API_PTR glad_debug_impl_glDepthMask(GLboolean flag) { _pre_call_gl_callback("glDepthMask", (GLADapiproc) glad_glDepthMask, 1, flag); glad_glDepthMask(flag); _post_call_gl_callback(NULL, "glDepthMask", (GLADapiproc) glad_glDepthMask, 1, flag); } PFNGLDEPTHMASKPROC glad_debug_glDepthMask = glad_debug_impl_glDepthMask; PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; static void GLAD_API_PTR glad_debug_impl_glDepthRange(GLdouble n, GLdouble f) { _pre_call_gl_callback("glDepthRange", (GLADapiproc) glad_glDepthRange, 2, n, f); glad_glDepthRange(n, f); _post_call_gl_callback(NULL, "glDepthRange", (GLADapiproc) glad_glDepthRange, 2, n, f); } PFNGLDEPTHRANGEPROC glad_debug_glDepthRange = glad_debug_impl_glDepthRange; PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; static void GLAD_API_PTR glad_debug_impl_glDetachShader(GLuint program, GLuint shader) { _pre_call_gl_callback("glDetachShader", (GLADapiproc) glad_glDetachShader, 2, program, shader); glad_glDetachShader(program, shader); _post_call_gl_callback(NULL, "glDetachShader", (GLADapiproc) glad_glDetachShader, 2, program, shader); } PFNGLDETACHSHADERPROC glad_debug_glDetachShader = glad_debug_impl_glDetachShader; PFNGLDISABLEPROC glad_glDisable = NULL; static void GLAD_API_PTR glad_debug_impl_glDisable(GLenum cap) { _pre_call_gl_callback("glDisable", (GLADapiproc) glad_glDisable, 1, cap); glad_glDisable(cap); _post_call_gl_callback(NULL, "glDisable", (GLADapiproc) glad_glDisable, 1, cap); } PFNGLDISABLEPROC glad_debug_glDisable = glad_debug_impl_glDisable; PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; static void GLAD_API_PTR glad_debug_impl_glDisableVertexAttribArray(GLuint index) { _pre_call_gl_callback("glDisableVertexAttribArray", (GLADapiproc) glad_glDisableVertexAttribArray, 1, index); glad_glDisableVertexAttribArray(index); _post_call_gl_callback(NULL, "glDisableVertexAttribArray", (GLADapiproc) glad_glDisableVertexAttribArray, 1, index); } PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_debug_glDisableVertexAttribArray = glad_debug_impl_glDisableVertexAttribArray; PFNGLDISABLEIPROC glad_glDisablei = NULL; static void GLAD_API_PTR glad_debug_impl_glDisablei(GLenum target, GLuint index) { _pre_call_gl_callback("glDisablei", (GLADapiproc) glad_glDisablei, 2, target, index); glad_glDisablei(target, index); _post_call_gl_callback(NULL, "glDisablei", (GLADapiproc) glad_glDisablei, 2, target, index); } PFNGLDISABLEIPROC glad_debug_glDisablei = glad_debug_impl_glDisablei; PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawArrays(GLenum mode, GLint first, GLsizei count) { _pre_call_gl_callback("glDrawArrays", (GLADapiproc) glad_glDrawArrays, 3, mode, first, count); glad_glDrawArrays(mode, first, count); _post_call_gl_callback(NULL, "glDrawArrays", (GLADapiproc) glad_glDrawArrays, 3, mode, first, count); } PFNGLDRAWARRAYSPROC glad_debug_glDrawArrays = glad_debug_impl_glDrawArrays; PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { _pre_call_gl_callback("glDrawArraysInstanced", (GLADapiproc) glad_glDrawArraysInstanced, 4, mode, first, count, instancecount); glad_glDrawArraysInstanced(mode, first, count, instancecount); _post_call_gl_callback(NULL, "glDrawArraysInstanced", (GLADapiproc) glad_glDrawArraysInstanced, 4, mode, first, count, instancecount); } PFNGLDRAWARRAYSINSTANCEDPROC glad_debug_glDrawArraysInstanced = glad_debug_impl_glDrawArraysInstanced; PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawBuffer(GLenum buf) { _pre_call_gl_callback("glDrawBuffer", (GLADapiproc) glad_glDrawBuffer, 1, buf); glad_glDrawBuffer(buf); _post_call_gl_callback(NULL, "glDrawBuffer", (GLADapiproc) glad_glDrawBuffer, 1, buf); } PFNGLDRAWBUFFERPROC glad_debug_glDrawBuffer = glad_debug_impl_glDrawBuffer; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawBuffers(GLsizei n, const GLenum * bufs) { _pre_call_gl_callback("glDrawBuffers", (GLADapiproc) glad_glDrawBuffers, 2, n, bufs); glad_glDrawBuffers(n, bufs); _post_call_gl_callback(NULL, "glDrawBuffers", (GLADapiproc) glad_glDrawBuffers, 2, n, bufs); } PFNGLDRAWBUFFERSPROC glad_debug_glDrawBuffers = glad_debug_impl_glDrawBuffers; PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawElements(GLenum mode, GLsizei count, GLenum type, const void * indices) { _pre_call_gl_callback("glDrawElements", (GLADapiproc) glad_glDrawElements, 4, mode, count, type, indices); glad_glDrawElements(mode, count, type, indices); _post_call_gl_callback(NULL, "glDrawElements", (GLADapiproc) glad_glDrawElements, 4, mode, count, type, indices); } PFNGLDRAWELEMENTSPROC glad_debug_glDrawElements = glad_debug_impl_glDrawElements; PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex) { _pre_call_gl_callback("glDrawElementsBaseVertex", (GLADapiproc) glad_glDrawElementsBaseVertex, 5, mode, count, type, indices, basevertex); glad_glDrawElementsBaseVertex(mode, count, type, indices, basevertex); _post_call_gl_callback(NULL, "glDrawElementsBaseVertex", (GLADapiproc) glad_glDrawElementsBaseVertex, 5, mode, count, type, indices, basevertex); } PFNGLDRAWELEMENTSBASEVERTEXPROC glad_debug_glDrawElementsBaseVertex = glad_debug_impl_glDrawElementsBaseVertex; PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount) { _pre_call_gl_callback("glDrawElementsInstanced", (GLADapiproc) glad_glDrawElementsInstanced, 5, mode, count, type, indices, instancecount); glad_glDrawElementsInstanced(mode, count, type, indices, instancecount); _post_call_gl_callback(NULL, "glDrawElementsInstanced", (GLADapiproc) glad_glDrawElementsInstanced, 5, mode, count, type, indices, instancecount); } PFNGLDRAWELEMENTSINSTANCEDPROC glad_debug_glDrawElementsInstanced = glad_debug_impl_glDrawElementsInstanced; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex) { _pre_call_gl_callback("glDrawElementsInstancedBaseVertex", (GLADapiproc) glad_glDrawElementsInstancedBaseVertex, 6, mode, count, type, indices, instancecount, basevertex); glad_glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); _post_call_gl_callback(NULL, "glDrawElementsInstancedBaseVertex", (GLADapiproc) glad_glDrawElementsInstancedBaseVertex, 6, mode, count, type, indices, instancecount, basevertex); } PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_debug_glDrawElementsInstancedBaseVertex = glad_debug_impl_glDrawElementsInstancedBaseVertex; PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices) { _pre_call_gl_callback("glDrawRangeElements", (GLADapiproc) glad_glDrawRangeElements, 6, mode, start, end, count, type, indices); glad_glDrawRangeElements(mode, start, end, count, type, indices); _post_call_gl_callback(NULL, "glDrawRangeElements", (GLADapiproc) glad_glDrawRangeElements, 6, mode, start, end, count, type, indices); } PFNGLDRAWRANGEELEMENTSPROC glad_debug_glDrawRangeElements = glad_debug_impl_glDrawRangeElements; PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; static void GLAD_API_PTR glad_debug_impl_glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex) { _pre_call_gl_callback("glDrawRangeElementsBaseVertex", (GLADapiproc) glad_glDrawRangeElementsBaseVertex, 7, mode, start, end, count, type, indices, basevertex); glad_glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex); _post_call_gl_callback(NULL, "glDrawRangeElementsBaseVertex", (GLADapiproc) glad_glDrawRangeElementsBaseVertex, 7, mode, start, end, count, type, indices, basevertex); } PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_debug_glDrawRangeElementsBaseVertex = glad_debug_impl_glDrawRangeElementsBaseVertex; PFNGLENABLEPROC glad_glEnable = NULL; static void GLAD_API_PTR glad_debug_impl_glEnable(GLenum cap) { _pre_call_gl_callback("glEnable", (GLADapiproc) glad_glEnable, 1, cap); glad_glEnable(cap); _post_call_gl_callback(NULL, "glEnable", (GLADapiproc) glad_glEnable, 1, cap); } PFNGLENABLEPROC glad_debug_glEnable = glad_debug_impl_glEnable; PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; static void GLAD_API_PTR glad_debug_impl_glEnableVertexAttribArray(GLuint index) { _pre_call_gl_callback("glEnableVertexAttribArray", (GLADapiproc) glad_glEnableVertexAttribArray, 1, index); glad_glEnableVertexAttribArray(index); _post_call_gl_callback(NULL, "glEnableVertexAttribArray", (GLADapiproc) glad_glEnableVertexAttribArray, 1, index); } PFNGLENABLEVERTEXATTRIBARRAYPROC glad_debug_glEnableVertexAttribArray = glad_debug_impl_glEnableVertexAttribArray; PFNGLENABLEIPROC glad_glEnablei = NULL; static void GLAD_API_PTR glad_debug_impl_glEnablei(GLenum target, GLuint index) { _pre_call_gl_callback("glEnablei", (GLADapiproc) glad_glEnablei, 2, target, index); glad_glEnablei(target, index); _post_call_gl_callback(NULL, "glEnablei", (GLADapiproc) glad_glEnablei, 2, target, index); } PFNGLENABLEIPROC glad_debug_glEnablei = glad_debug_impl_glEnablei; PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; static void GLAD_API_PTR glad_debug_impl_glEndConditionalRender(void) { _pre_call_gl_callback("glEndConditionalRender", (GLADapiproc) glad_glEndConditionalRender, 0); glad_glEndConditionalRender(); _post_call_gl_callback(NULL, "glEndConditionalRender", (GLADapiproc) glad_glEndConditionalRender, 0); } PFNGLENDCONDITIONALRENDERPROC glad_debug_glEndConditionalRender = glad_debug_impl_glEndConditionalRender; PFNGLENDQUERYPROC glad_glEndQuery = NULL; static void GLAD_API_PTR glad_debug_impl_glEndQuery(GLenum target) { _pre_call_gl_callback("glEndQuery", (GLADapiproc) glad_glEndQuery, 1, target); glad_glEndQuery(target); _post_call_gl_callback(NULL, "glEndQuery", (GLADapiproc) glad_glEndQuery, 1, target); } PFNGLENDQUERYPROC glad_debug_glEndQuery = glad_debug_impl_glEndQuery; PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; static void GLAD_API_PTR glad_debug_impl_glEndTransformFeedback(void) { _pre_call_gl_callback("glEndTransformFeedback", (GLADapiproc) glad_glEndTransformFeedback, 0); glad_glEndTransformFeedback(); _post_call_gl_callback(NULL, "glEndTransformFeedback", (GLADapiproc) glad_glEndTransformFeedback, 0); } PFNGLENDTRANSFORMFEEDBACKPROC glad_debug_glEndTransformFeedback = glad_debug_impl_glEndTransformFeedback; PFNGLFENCESYNCPROC glad_glFenceSync = NULL; static GLsync GLAD_API_PTR glad_debug_impl_glFenceSync(GLenum condition, GLbitfield flags) { GLsync ret; _pre_call_gl_callback("glFenceSync", (GLADapiproc) glad_glFenceSync, 2, condition, flags); ret = glad_glFenceSync(condition, flags); _post_call_gl_callback((void*) &ret, "glFenceSync", (GLADapiproc) glad_glFenceSync, 2, condition, flags); return ret; } PFNGLFENCESYNCPROC glad_debug_glFenceSync = glad_debug_impl_glFenceSync; PFNGLFINISHPROC glad_glFinish = NULL; static void GLAD_API_PTR glad_debug_impl_glFinish(void) { _pre_call_gl_callback("glFinish", (GLADapiproc) glad_glFinish, 0); glad_glFinish(); _post_call_gl_callback(NULL, "glFinish", (GLADapiproc) glad_glFinish, 0); } PFNGLFINISHPROC glad_debug_glFinish = glad_debug_impl_glFinish; PFNGLFLUSHPROC glad_glFlush = NULL; static void GLAD_API_PTR glad_debug_impl_glFlush(void) { _pre_call_gl_callback("glFlush", (GLADapiproc) glad_glFlush, 0); glad_glFlush(); _post_call_gl_callback(NULL, "glFlush", (GLADapiproc) glad_glFlush, 0); } PFNGLFLUSHPROC glad_debug_glFlush = glad_debug_impl_glFlush; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; static void GLAD_API_PTR glad_debug_impl_glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) { _pre_call_gl_callback("glFlushMappedBufferRange", (GLADapiproc) glad_glFlushMappedBufferRange, 3, target, offset, length); glad_glFlushMappedBufferRange(target, offset, length); _post_call_gl_callback(NULL, "glFlushMappedBufferRange", (GLADapiproc) glad_glFlushMappedBufferRange, 3, target, offset, length); } PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_debug_glFlushMappedBufferRange = glad_debug_impl_glFlushMappedBufferRange; PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { _pre_call_gl_callback("glFramebufferRenderbuffer", (GLADapiproc) glad_glFramebufferRenderbuffer, 4, target, attachment, renderbuffertarget, renderbuffer); glad_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); _post_call_gl_callback(NULL, "glFramebufferRenderbuffer", (GLADapiproc) glad_glFramebufferRenderbuffer, 4, target, attachment, renderbuffertarget, renderbuffer); } PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_debug_glFramebufferRenderbuffer = glad_debug_impl_glFramebufferRenderbuffer; PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level) { _pre_call_gl_callback("glFramebufferTexture", (GLADapiproc) glad_glFramebufferTexture, 4, target, attachment, texture, level); glad_glFramebufferTexture(target, attachment, texture, level); _post_call_gl_callback(NULL, "glFramebufferTexture", (GLADapiproc) glad_glFramebufferTexture, 4, target, attachment, texture, level); } PFNGLFRAMEBUFFERTEXTUREPROC glad_debug_glFramebufferTexture = glad_debug_impl_glFramebufferTexture; PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { _pre_call_gl_callback("glFramebufferTexture1D", (GLADapiproc) glad_glFramebufferTexture1D, 5, target, attachment, textarget, texture, level); glad_glFramebufferTexture1D(target, attachment, textarget, texture, level); _post_call_gl_callback(NULL, "glFramebufferTexture1D", (GLADapiproc) glad_glFramebufferTexture1D, 5, target, attachment, textarget, texture, level); } PFNGLFRAMEBUFFERTEXTURE1DPROC glad_debug_glFramebufferTexture1D = glad_debug_impl_glFramebufferTexture1D; PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { _pre_call_gl_callback("glFramebufferTexture2D", (GLADapiproc) glad_glFramebufferTexture2D, 5, target, attachment, textarget, texture, level); glad_glFramebufferTexture2D(target, attachment, textarget, texture, level); _post_call_gl_callback(NULL, "glFramebufferTexture2D", (GLADapiproc) glad_glFramebufferTexture2D, 5, target, attachment, textarget, texture, level); } PFNGLFRAMEBUFFERTEXTURE2DPROC glad_debug_glFramebufferTexture2D = glad_debug_impl_glFramebufferTexture2D; PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { _pre_call_gl_callback("glFramebufferTexture3D", (GLADapiproc) glad_glFramebufferTexture3D, 6, target, attachment, textarget, texture, level, zoffset); glad_glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); _post_call_gl_callback(NULL, "glFramebufferTexture3D", (GLADapiproc) glad_glFramebufferTexture3D, 6, target, attachment, textarget, texture, level, zoffset); } PFNGLFRAMEBUFFERTEXTURE3DPROC glad_debug_glFramebufferTexture3D = glad_debug_impl_glFramebufferTexture3D; PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; static void GLAD_API_PTR glad_debug_impl_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { _pre_call_gl_callback("glFramebufferTextureLayer", (GLADapiproc) glad_glFramebufferTextureLayer, 5, target, attachment, texture, level, layer); glad_glFramebufferTextureLayer(target, attachment, texture, level, layer); _post_call_gl_callback(NULL, "glFramebufferTextureLayer", (GLADapiproc) glad_glFramebufferTextureLayer, 5, target, attachment, texture, level, layer); } PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_debug_glFramebufferTextureLayer = glad_debug_impl_glFramebufferTextureLayer; PFNGLFRONTFACEPROC glad_glFrontFace = NULL; static void GLAD_API_PTR glad_debug_impl_glFrontFace(GLenum mode) { _pre_call_gl_callback("glFrontFace", (GLADapiproc) glad_glFrontFace, 1, mode); glad_glFrontFace(mode); _post_call_gl_callback(NULL, "glFrontFace", (GLADapiproc) glad_glFrontFace, 1, mode); } PFNGLFRONTFACEPROC glad_debug_glFrontFace = glad_debug_impl_glFrontFace; PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glGenBuffers(GLsizei n, GLuint * buffers) { _pre_call_gl_callback("glGenBuffers", (GLADapiproc) glad_glGenBuffers, 2, n, buffers); glad_glGenBuffers(n, buffers); _post_call_gl_callback(NULL, "glGenBuffers", (GLADapiproc) glad_glGenBuffers, 2, n, buffers); } PFNGLGENBUFFERSPROC glad_debug_glGenBuffers = glad_debug_impl_glGenBuffers; PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glGenFramebuffers(GLsizei n, GLuint * framebuffers) { _pre_call_gl_callback("glGenFramebuffers", (GLADapiproc) glad_glGenFramebuffers, 2, n, framebuffers); glad_glGenFramebuffers(n, framebuffers); _post_call_gl_callback(NULL, "glGenFramebuffers", (GLADapiproc) glad_glGenFramebuffers, 2, n, framebuffers); } PFNGLGENFRAMEBUFFERSPROC glad_debug_glGenFramebuffers = glad_debug_impl_glGenFramebuffers; PFNGLGENQUERIESPROC glad_glGenQueries = NULL; static void GLAD_API_PTR glad_debug_impl_glGenQueries(GLsizei n, GLuint * ids) { _pre_call_gl_callback("glGenQueries", (GLADapiproc) glad_glGenQueries, 2, n, ids); glad_glGenQueries(n, ids); _post_call_gl_callback(NULL, "glGenQueries", (GLADapiproc) glad_glGenQueries, 2, n, ids); } PFNGLGENQUERIESPROC glad_debug_glGenQueries = glad_debug_impl_glGenQueries; PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; static void GLAD_API_PTR glad_debug_impl_glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) { _pre_call_gl_callback("glGenRenderbuffers", (GLADapiproc) glad_glGenRenderbuffers, 2, n, renderbuffers); glad_glGenRenderbuffers(n, renderbuffers); _post_call_gl_callback(NULL, "glGenRenderbuffers", (GLADapiproc) glad_glGenRenderbuffers, 2, n, renderbuffers); } PFNGLGENRENDERBUFFERSPROC glad_debug_glGenRenderbuffers = glad_debug_impl_glGenRenderbuffers; PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; static void GLAD_API_PTR glad_debug_impl_glGenSamplers(GLsizei count, GLuint * samplers) { _pre_call_gl_callback("glGenSamplers", (GLADapiproc) glad_glGenSamplers, 2, count, samplers); glad_glGenSamplers(count, samplers); _post_call_gl_callback(NULL, "glGenSamplers", (GLADapiproc) glad_glGenSamplers, 2, count, samplers); } PFNGLGENSAMPLERSPROC glad_debug_glGenSamplers = glad_debug_impl_glGenSamplers; PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; static void GLAD_API_PTR glad_debug_impl_glGenTextures(GLsizei n, GLuint * textures) { _pre_call_gl_callback("glGenTextures", (GLADapiproc) glad_glGenTextures, 2, n, textures); glad_glGenTextures(n, textures); _post_call_gl_callback(NULL, "glGenTextures", (GLADapiproc) glad_glGenTextures, 2, n, textures); } PFNGLGENTEXTURESPROC glad_debug_glGenTextures = glad_debug_impl_glGenTextures; PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; static void GLAD_API_PTR glad_debug_impl_glGenVertexArrays(GLsizei n, GLuint * arrays) { _pre_call_gl_callback("glGenVertexArrays", (GLADapiproc) glad_glGenVertexArrays, 2, n, arrays); glad_glGenVertexArrays(n, arrays); _post_call_gl_callback(NULL, "glGenVertexArrays", (GLADapiproc) glad_glGenVertexArrays, 2, n, arrays); } PFNGLGENVERTEXARRAYSPROC glad_debug_glGenVertexArrays = glad_debug_impl_glGenVertexArrays; PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; static void GLAD_API_PTR glad_debug_impl_glGenerateMipmap(GLenum target) { _pre_call_gl_callback("glGenerateMipmap", (GLADapiproc) glad_glGenerateMipmap, 1, target); glad_glGenerateMipmap(target); _post_call_gl_callback(NULL, "glGenerateMipmap", (GLADapiproc) glad_glGenerateMipmap, 1, target); } PFNGLGENERATEMIPMAPPROC glad_debug_glGenerateMipmap = glad_debug_impl_glGenerateMipmap; PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) { _pre_call_gl_callback("glGetActiveAttrib", (GLADapiproc) glad_glGetActiveAttrib, 7, program, index, bufSize, length, size, type, name); glad_glGetActiveAttrib(program, index, bufSize, length, size, type, name); _post_call_gl_callback(NULL, "glGetActiveAttrib", (GLADapiproc) glad_glGetActiveAttrib, 7, program, index, bufSize, length, size, type, name); } PFNGLGETACTIVEATTRIBPROC glad_debug_glGetActiveAttrib = glad_debug_impl_glGetActiveAttrib; PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) { _pre_call_gl_callback("glGetActiveUniform", (GLADapiproc) glad_glGetActiveUniform, 7, program, index, bufSize, length, size, type, name); glad_glGetActiveUniform(program, index, bufSize, length, size, type, name); _post_call_gl_callback(NULL, "glGetActiveUniform", (GLADapiproc) glad_glGetActiveUniform, 7, program, index, bufSize, length, size, type, name); } PFNGLGETACTIVEUNIFORMPROC glad_debug_glGetActiveUniform = glad_debug_impl_glGetActiveUniform; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName) { _pre_call_gl_callback("glGetActiveUniformBlockName", (GLADapiproc) glad_glGetActiveUniformBlockName, 5, program, uniformBlockIndex, bufSize, length, uniformBlockName); glad_glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); _post_call_gl_callback(NULL, "glGetActiveUniformBlockName", (GLADapiproc) glad_glGetActiveUniformBlockName, 5, program, uniformBlockIndex, bufSize, length, uniformBlockName); } PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_debug_glGetActiveUniformBlockName = glad_debug_impl_glGetActiveUniformBlockName; PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetActiveUniformBlockiv", (GLADapiproc) glad_glGetActiveUniformBlockiv, 4, program, uniformBlockIndex, pname, params); glad_glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); _post_call_gl_callback(NULL, "glGetActiveUniformBlockiv", (GLADapiproc) glad_glGetActiveUniformBlockiv, 4, program, uniformBlockIndex, pname, params); } PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_debug_glGetActiveUniformBlockiv = glad_debug_impl_glGetActiveUniformBlockiv; PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName) { _pre_call_gl_callback("glGetActiveUniformName", (GLADapiproc) glad_glGetActiveUniformName, 5, program, uniformIndex, bufSize, length, uniformName); glad_glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); _post_call_gl_callback(NULL, "glGetActiveUniformName", (GLADapiproc) glad_glGetActiveUniformName, 5, program, uniformIndex, bufSize, length, uniformName); } PFNGLGETACTIVEUNIFORMNAMEPROC glad_debug_glGetActiveUniformName = glad_debug_impl_glGetActiveUniformName; PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetActiveUniformsiv", (GLADapiproc) glad_glGetActiveUniformsiv, 5, program, uniformCount, uniformIndices, pname, params); glad_glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); _post_call_gl_callback(NULL, "glGetActiveUniformsiv", (GLADapiproc) glad_glGetActiveUniformsiv, 5, program, uniformCount, uniformIndices, pname, params); } PFNGLGETACTIVEUNIFORMSIVPROC glad_debug_glGetActiveUniformsiv = glad_debug_impl_glGetActiveUniformsiv; PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; static void GLAD_API_PTR glad_debug_impl_glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders) { _pre_call_gl_callback("glGetAttachedShaders", (GLADapiproc) glad_glGetAttachedShaders, 4, program, maxCount, count, shaders); glad_glGetAttachedShaders(program, maxCount, count, shaders); _post_call_gl_callback(NULL, "glGetAttachedShaders", (GLADapiproc) glad_glGetAttachedShaders, 4, program, maxCount, count, shaders); } PFNGLGETATTACHEDSHADERSPROC glad_debug_glGetAttachedShaders = glad_debug_impl_glGetAttachedShaders; PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; static GLint GLAD_API_PTR glad_debug_impl_glGetAttribLocation(GLuint program, const GLchar * name) { GLint ret; _pre_call_gl_callback("glGetAttribLocation", (GLADapiproc) glad_glGetAttribLocation, 2, program, name); ret = glad_glGetAttribLocation(program, name); _post_call_gl_callback((void*) &ret, "glGetAttribLocation", (GLADapiproc) glad_glGetAttribLocation, 2, program, name); return ret; } PFNGLGETATTRIBLOCATIONPROC glad_debug_glGetAttribLocation = glad_debug_impl_glGetAttribLocation; PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBooleani_v(GLenum target, GLuint index, GLboolean * data) { _pre_call_gl_callback("glGetBooleani_v", (GLADapiproc) glad_glGetBooleani_v, 3, target, index, data); glad_glGetBooleani_v(target, index, data); _post_call_gl_callback(NULL, "glGetBooleani_v", (GLADapiproc) glad_glGetBooleani_v, 3, target, index, data); } PFNGLGETBOOLEANI_VPROC glad_debug_glGetBooleani_v = glad_debug_impl_glGetBooleani_v; PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBooleanv(GLenum pname, GLboolean * data) { _pre_call_gl_callback("glGetBooleanv", (GLADapiproc) glad_glGetBooleanv, 2, pname, data); glad_glGetBooleanv(pname, data); _post_call_gl_callback(NULL, "glGetBooleanv", (GLADapiproc) glad_glGetBooleanv, 2, pname, data); } PFNGLGETBOOLEANVPROC glad_debug_glGetBooleanv = glad_debug_impl_glGetBooleanv; PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 * params) { _pre_call_gl_callback("glGetBufferParameteri64v", (GLADapiproc) glad_glGetBufferParameteri64v, 3, target, pname, params); glad_glGetBufferParameteri64v(target, pname, params); _post_call_gl_callback(NULL, "glGetBufferParameteri64v", (GLADapiproc) glad_glGetBufferParameteri64v, 3, target, pname, params); } PFNGLGETBUFFERPARAMETERI64VPROC glad_debug_glGetBufferParameteri64v = glad_debug_impl_glGetBufferParameteri64v; PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetBufferParameteriv", (GLADapiproc) glad_glGetBufferParameteriv, 3, target, pname, params); glad_glGetBufferParameteriv(target, pname, params); _post_call_gl_callback(NULL, "glGetBufferParameteriv", (GLADapiproc) glad_glGetBufferParameteriv, 3, target, pname, params); } PFNGLGETBUFFERPARAMETERIVPROC glad_debug_glGetBufferParameteriv = glad_debug_impl_glGetBufferParameteriv; PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBufferPointerv(GLenum target, GLenum pname, void ** params) { _pre_call_gl_callback("glGetBufferPointerv", (GLADapiproc) glad_glGetBufferPointerv, 3, target, pname, params); glad_glGetBufferPointerv(target, pname, params); _post_call_gl_callback(NULL, "glGetBufferPointerv", (GLADapiproc) glad_glGetBufferPointerv, 3, target, pname, params); } PFNGLGETBUFFERPOINTERVPROC glad_debug_glGetBufferPointerv = glad_debug_impl_glGetBufferPointerv; PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; static void GLAD_API_PTR glad_debug_impl_glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void * data) { _pre_call_gl_callback("glGetBufferSubData", (GLADapiproc) glad_glGetBufferSubData, 4, target, offset, size, data); glad_glGetBufferSubData(target, offset, size, data); _post_call_gl_callback(NULL, "glGetBufferSubData", (GLADapiproc) glad_glGetBufferSubData, 4, target, offset, size, data); } PFNGLGETBUFFERSUBDATAPROC glad_debug_glGetBufferSubData = glad_debug_impl_glGetBufferSubData; PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; static void GLAD_API_PTR glad_debug_impl_glGetCompressedTexImage(GLenum target, GLint level, void * img) { _pre_call_gl_callback("glGetCompressedTexImage", (GLADapiproc) glad_glGetCompressedTexImage, 3, target, level, img); glad_glGetCompressedTexImage(target, level, img); _post_call_gl_callback(NULL, "glGetCompressedTexImage", (GLADapiproc) glad_glGetCompressedTexImage, 3, target, level, img); } PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_debug_glGetCompressedTexImage = glad_debug_impl_glGetCompressedTexImage; PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL; static GLuint GLAD_API_PTR glad_debug_impl_glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog) { GLuint ret; _pre_call_gl_callback("glGetDebugMessageLog", (GLADapiproc) glad_glGetDebugMessageLog, 8, count, bufSize, sources, types, ids, severities, lengths, messageLog); ret = glad_glGetDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog); _post_call_gl_callback((void*) &ret, "glGetDebugMessageLog", (GLADapiproc) glad_glGetDebugMessageLog, 8, count, bufSize, sources, types, ids, severities, lengths, messageLog); return ret; } PFNGLGETDEBUGMESSAGELOGPROC glad_debug_glGetDebugMessageLog = glad_debug_impl_glGetDebugMessageLog; PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; static void GLAD_API_PTR glad_debug_impl_glGetDoublev(GLenum pname, GLdouble * data) { _pre_call_gl_callback("glGetDoublev", (GLADapiproc) glad_glGetDoublev, 2, pname, data); glad_glGetDoublev(pname, data); _post_call_gl_callback(NULL, "glGetDoublev", (GLADapiproc) glad_glGetDoublev, 2, pname, data); } PFNGLGETDOUBLEVPROC glad_debug_glGetDoublev = glad_debug_impl_glGetDoublev; PFNGLGETERRORPROC glad_glGetError = NULL; static GLenum GLAD_API_PTR glad_debug_impl_glGetError(void) { GLenum ret; _pre_call_gl_callback("glGetError", (GLADapiproc) glad_glGetError, 0); ret = glad_glGetError(); _post_call_gl_callback((void*) &ret, "glGetError", (GLADapiproc) glad_glGetError, 0); return ret; } PFNGLGETERRORPROC glad_debug_glGetError = glad_debug_impl_glGetError; PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetFloatv(GLenum pname, GLfloat * data) { _pre_call_gl_callback("glGetFloatv", (GLADapiproc) glad_glGetFloatv, 2, pname, data); glad_glGetFloatv(pname, data); _post_call_gl_callback(NULL, "glGetFloatv", (GLADapiproc) glad_glGetFloatv, 2, pname, data); } PFNGLGETFLOATVPROC glad_debug_glGetFloatv = glad_debug_impl_glGetFloatv; PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; static GLint GLAD_API_PTR glad_debug_impl_glGetFragDataIndex(GLuint program, const GLchar * name) { GLint ret; _pre_call_gl_callback("glGetFragDataIndex", (GLADapiproc) glad_glGetFragDataIndex, 2, program, name); ret = glad_glGetFragDataIndex(program, name); _post_call_gl_callback((void*) &ret, "glGetFragDataIndex", (GLADapiproc) glad_glGetFragDataIndex, 2, program, name); return ret; } PFNGLGETFRAGDATAINDEXPROC glad_debug_glGetFragDataIndex = glad_debug_impl_glGetFragDataIndex; PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; static GLint GLAD_API_PTR glad_debug_impl_glGetFragDataLocation(GLuint program, const GLchar * name) { GLint ret; _pre_call_gl_callback("glGetFragDataLocation", (GLADapiproc) glad_glGetFragDataLocation, 2, program, name); ret = glad_glGetFragDataLocation(program, name); _post_call_gl_callback((void*) &ret, "glGetFragDataLocation", (GLADapiproc) glad_glGetFragDataLocation, 2, program, name); return ret; } PFNGLGETFRAGDATALOCATIONPROC glad_debug_glGetFragDataLocation = glad_debug_impl_glGetFragDataLocation; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetFramebufferAttachmentParameteriv", (GLADapiproc) glad_glGetFramebufferAttachmentParameteriv, 4, target, attachment, pname, params); glad_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); _post_call_gl_callback(NULL, "glGetFramebufferAttachmentParameteriv", (GLADapiproc) glad_glGetFramebufferAttachmentParameteriv, 4, target, attachment, pname, params); } PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_debug_glGetFramebufferAttachmentParameteriv = glad_debug_impl_glGetFramebufferAttachmentParameteriv; PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB = NULL; static GLenum GLAD_API_PTR glad_debug_impl_glGetGraphicsResetStatusARB(void) { GLenum ret; _pre_call_gl_callback("glGetGraphicsResetStatusARB", (GLADapiproc) glad_glGetGraphicsResetStatusARB, 0); ret = glad_glGetGraphicsResetStatusARB(); _post_call_gl_callback((void*) &ret, "glGetGraphicsResetStatusARB", (GLADapiproc) glad_glGetGraphicsResetStatusARB, 0); return ret; } PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_debug_glGetGraphicsResetStatusARB = glad_debug_impl_glGetGraphicsResetStatusARB; PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetInteger64i_v(GLenum target, GLuint index, GLint64 * data) { _pre_call_gl_callback("glGetInteger64i_v", (GLADapiproc) glad_glGetInteger64i_v, 3, target, index, data); glad_glGetInteger64i_v(target, index, data); _post_call_gl_callback(NULL, "glGetInteger64i_v", (GLADapiproc) glad_glGetInteger64i_v, 3, target, index, data); } PFNGLGETINTEGER64I_VPROC glad_debug_glGetInteger64i_v = glad_debug_impl_glGetInteger64i_v; PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetInteger64v(GLenum pname, GLint64 * data) { _pre_call_gl_callback("glGetInteger64v", (GLADapiproc) glad_glGetInteger64v, 2, pname, data); glad_glGetInteger64v(pname, data); _post_call_gl_callback(NULL, "glGetInteger64v", (GLADapiproc) glad_glGetInteger64v, 2, pname, data); } PFNGLGETINTEGER64VPROC glad_debug_glGetInteger64v = glad_debug_impl_glGetInteger64v; PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetIntegeri_v(GLenum target, GLuint index, GLint * data) { _pre_call_gl_callback("glGetIntegeri_v", (GLADapiproc) glad_glGetIntegeri_v, 3, target, index, data); glad_glGetIntegeri_v(target, index, data); _post_call_gl_callback(NULL, "glGetIntegeri_v", (GLADapiproc) glad_glGetIntegeri_v, 3, target, index, data); } PFNGLGETINTEGERI_VPROC glad_debug_glGetIntegeri_v = glad_debug_impl_glGetIntegeri_v; PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetIntegerv(GLenum pname, GLint * data) { _pre_call_gl_callback("glGetIntegerv", (GLADapiproc) glad_glGetIntegerv, 2, pname, data); glad_glGetIntegerv(pname, data); _post_call_gl_callback(NULL, "glGetIntegerv", (GLADapiproc) glad_glGetIntegerv, 2, pname, data); } PFNGLGETINTEGERVPROC glad_debug_glGetIntegerv = glad_debug_impl_glGetIntegerv; PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetMultisamplefv(GLenum pname, GLuint index, GLfloat * val) { _pre_call_gl_callback("glGetMultisamplefv", (GLADapiproc) glad_glGetMultisamplefv, 3, pname, index, val); glad_glGetMultisamplefv(pname, index, val); _post_call_gl_callback(NULL, "glGetMultisamplefv", (GLADapiproc) glad_glGetMultisamplefv, 3, pname, index, val); } PFNGLGETMULTISAMPLEFVPROC glad_debug_glGetMultisamplefv = glad_debug_impl_glGetMultisamplefv; PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL; static void GLAD_API_PTR glad_debug_impl_glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label) { _pre_call_gl_callback("glGetObjectLabel", (GLADapiproc) glad_glGetObjectLabel, 5, identifier, name, bufSize, length, label); glad_glGetObjectLabel(identifier, name, bufSize, length, label); _post_call_gl_callback(NULL, "glGetObjectLabel", (GLADapiproc) glad_glGetObjectLabel, 5, identifier, name, bufSize, length, label); } PFNGLGETOBJECTLABELPROC glad_debug_glGetObjectLabel = glad_debug_impl_glGetObjectLabel; PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL; static void GLAD_API_PTR glad_debug_impl_glGetObjectPtrLabel(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label) { _pre_call_gl_callback("glGetObjectPtrLabel", (GLADapiproc) glad_glGetObjectPtrLabel, 4, ptr, bufSize, length, label); glad_glGetObjectPtrLabel(ptr, bufSize, length, label); _post_call_gl_callback(NULL, "glGetObjectPtrLabel", (GLADapiproc) glad_glGetObjectPtrLabel, 4, ptr, bufSize, length, label); } PFNGLGETOBJECTPTRLABELPROC glad_debug_glGetObjectPtrLabel = glad_debug_impl_glGetObjectPtrLabel; PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetPointerv(GLenum pname, void ** params) { _pre_call_gl_callback("glGetPointerv", (GLADapiproc) glad_glGetPointerv, 2, pname, params); glad_glGetPointerv(pname, params); _post_call_gl_callback(NULL, "glGetPointerv", (GLADapiproc) glad_glGetPointerv, 2, pname, params); } PFNGLGETPOINTERVPROC glad_debug_glGetPointerv = glad_debug_impl_glGetPointerv; PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; static void GLAD_API_PTR glad_debug_impl_glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) { _pre_call_gl_callback("glGetProgramInfoLog", (GLADapiproc) glad_glGetProgramInfoLog, 4, program, bufSize, length, infoLog); glad_glGetProgramInfoLog(program, bufSize, length, infoLog); _post_call_gl_callback(NULL, "glGetProgramInfoLog", (GLADapiproc) glad_glGetProgramInfoLog, 4, program, bufSize, length, infoLog); } PFNGLGETPROGRAMINFOLOGPROC glad_debug_glGetProgramInfoLog = glad_debug_impl_glGetProgramInfoLog; PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetProgramiv(GLuint program, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetProgramiv", (GLADapiproc) glad_glGetProgramiv, 3, program, pname, params); glad_glGetProgramiv(program, pname, params); _post_call_gl_callback(NULL, "glGetProgramiv", (GLADapiproc) glad_glGetProgramiv, 3, program, pname, params); } PFNGLGETPROGRAMIVPROC glad_debug_glGetProgramiv = glad_debug_impl_glGetProgramiv; PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64 * params) { _pre_call_gl_callback("glGetQueryObjecti64v", (GLADapiproc) glad_glGetQueryObjecti64v, 3, id, pname, params); glad_glGetQueryObjecti64v(id, pname, params); _post_call_gl_callback(NULL, "glGetQueryObjecti64v", (GLADapiproc) glad_glGetQueryObjecti64v, 3, id, pname, params); } PFNGLGETQUERYOBJECTI64VPROC glad_debug_glGetQueryObjecti64v = glad_debug_impl_glGetQueryObjecti64v; PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetQueryObjectiv(GLuint id, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetQueryObjectiv", (GLADapiproc) glad_glGetQueryObjectiv, 3, id, pname, params); glad_glGetQueryObjectiv(id, pname, params); _post_call_gl_callback(NULL, "glGetQueryObjectiv", (GLADapiproc) glad_glGetQueryObjectiv, 3, id, pname, params); } PFNGLGETQUERYOBJECTIVPROC glad_debug_glGetQueryObjectiv = glad_debug_impl_glGetQueryObjectiv; PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; static void GLAD_API_PTR glad_debug_impl_glGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64 * params) { _pre_call_gl_callback("glGetQueryObjectui64v", (GLADapiproc) glad_glGetQueryObjectui64v, 3, id, pname, params); glad_glGetQueryObjectui64v(id, pname, params); _post_call_gl_callback(NULL, "glGetQueryObjectui64v", (GLADapiproc) glad_glGetQueryObjectui64v, 3, id, pname, params); } PFNGLGETQUERYOBJECTUI64VPROC glad_debug_glGetQueryObjectui64v = glad_debug_impl_glGetQueryObjectui64v; PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint * params) { _pre_call_gl_callback("glGetQueryObjectuiv", (GLADapiproc) glad_glGetQueryObjectuiv, 3, id, pname, params); glad_glGetQueryObjectuiv(id, pname, params); _post_call_gl_callback(NULL, "glGetQueryObjectuiv", (GLADapiproc) glad_glGetQueryObjectuiv, 3, id, pname, params); } PFNGLGETQUERYOBJECTUIVPROC glad_debug_glGetQueryObjectuiv = glad_debug_impl_glGetQueryObjectuiv; PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetQueryiv(GLenum target, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetQueryiv", (GLADapiproc) glad_glGetQueryiv, 3, target, pname, params); glad_glGetQueryiv(target, pname, params); _post_call_gl_callback(NULL, "glGetQueryiv", (GLADapiproc) glad_glGetQueryiv, 3, target, pname, params); } PFNGLGETQUERYIVPROC glad_debug_glGetQueryiv = glad_debug_impl_glGetQueryiv; PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetRenderbufferParameteriv", (GLADapiproc) glad_glGetRenderbufferParameteriv, 3, target, pname, params); glad_glGetRenderbufferParameteriv(target, pname, params); _post_call_gl_callback(NULL, "glGetRenderbufferParameteriv", (GLADapiproc) glad_glGetRenderbufferParameteriv, 3, target, pname, params); } PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_debug_glGetRenderbufferParameteriv = glad_debug_impl_glGetRenderbufferParameteriv; PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetSamplerParameterIiv", (GLADapiproc) glad_glGetSamplerParameterIiv, 3, sampler, pname, params); glad_glGetSamplerParameterIiv(sampler, pname, params); _post_call_gl_callback(NULL, "glGetSamplerParameterIiv", (GLADapiproc) glad_glGetSamplerParameterIiv, 3, sampler, pname, params); } PFNGLGETSAMPLERPARAMETERIIVPROC glad_debug_glGetSamplerParameterIiv = glad_debug_impl_glGetSamplerParameterIiv; PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint * params) { _pre_call_gl_callback("glGetSamplerParameterIuiv", (GLADapiproc) glad_glGetSamplerParameterIuiv, 3, sampler, pname, params); glad_glGetSamplerParameterIuiv(sampler, pname, params); _post_call_gl_callback(NULL, "glGetSamplerParameterIuiv", (GLADapiproc) glad_glGetSamplerParameterIuiv, 3, sampler, pname, params); } PFNGLGETSAMPLERPARAMETERIUIVPROC glad_debug_glGetSamplerParameterIuiv = glad_debug_impl_glGetSamplerParameterIuiv; PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat * params) { _pre_call_gl_callback("glGetSamplerParameterfv", (GLADapiproc) glad_glGetSamplerParameterfv, 3, sampler, pname, params); glad_glGetSamplerParameterfv(sampler, pname, params); _post_call_gl_callback(NULL, "glGetSamplerParameterfv", (GLADapiproc) glad_glGetSamplerParameterfv, 3, sampler, pname, params); } PFNGLGETSAMPLERPARAMETERFVPROC glad_debug_glGetSamplerParameterfv = glad_debug_impl_glGetSamplerParameterfv; PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetSamplerParameteriv", (GLADapiproc) glad_glGetSamplerParameteriv, 3, sampler, pname, params); glad_glGetSamplerParameteriv(sampler, pname, params); _post_call_gl_callback(NULL, "glGetSamplerParameteriv", (GLADapiproc) glad_glGetSamplerParameteriv, 3, sampler, pname, params); } PFNGLGETSAMPLERPARAMETERIVPROC glad_debug_glGetSamplerParameteriv = glad_debug_impl_glGetSamplerParameteriv; PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; static void GLAD_API_PTR glad_debug_impl_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) { _pre_call_gl_callback("glGetShaderInfoLog", (GLADapiproc) glad_glGetShaderInfoLog, 4, shader, bufSize, length, infoLog); glad_glGetShaderInfoLog(shader, bufSize, length, infoLog); _post_call_gl_callback(NULL, "glGetShaderInfoLog", (GLADapiproc) glad_glGetShaderInfoLog, 4, shader, bufSize, length, infoLog); } PFNGLGETSHADERINFOLOGPROC glad_debug_glGetShaderInfoLog = glad_debug_impl_glGetShaderInfoLog; PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; static void GLAD_API_PTR glad_debug_impl_glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) { _pre_call_gl_callback("glGetShaderSource", (GLADapiproc) glad_glGetShaderSource, 4, shader, bufSize, length, source); glad_glGetShaderSource(shader, bufSize, length, source); _post_call_gl_callback(NULL, "glGetShaderSource", (GLADapiproc) glad_glGetShaderSource, 4, shader, bufSize, length, source); } PFNGLGETSHADERSOURCEPROC glad_debug_glGetShaderSource = glad_debug_impl_glGetShaderSource; PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetShaderiv(GLuint shader, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetShaderiv", (GLADapiproc) glad_glGetShaderiv, 3, shader, pname, params); glad_glGetShaderiv(shader, pname, params); _post_call_gl_callback(NULL, "glGetShaderiv", (GLADapiproc) glad_glGetShaderiv, 3, shader, pname, params); } PFNGLGETSHADERIVPROC glad_debug_glGetShaderiv = glad_debug_impl_glGetShaderiv; PFNGLGETSTRINGPROC glad_glGetString = NULL; static const GLubyte * GLAD_API_PTR glad_debug_impl_glGetString(GLenum name) { const GLubyte * ret; _pre_call_gl_callback("glGetString", (GLADapiproc) glad_glGetString, 1, name); ret = glad_glGetString(name); _post_call_gl_callback((void*) &ret, "glGetString", (GLADapiproc) glad_glGetString, 1, name); return ret; } PFNGLGETSTRINGPROC glad_debug_glGetString = glad_debug_impl_glGetString; PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; static const GLubyte * GLAD_API_PTR glad_debug_impl_glGetStringi(GLenum name, GLuint index) { const GLubyte * ret; _pre_call_gl_callback("glGetStringi", (GLADapiproc) glad_glGetStringi, 2, name, index); ret = glad_glGetStringi(name, index); _post_call_gl_callback((void*) &ret, "glGetStringi", (GLADapiproc) glad_glGetStringi, 2, name, index); return ret; } PFNGLGETSTRINGIPROC glad_debug_glGetStringi = glad_debug_impl_glGetStringi; PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values) { _pre_call_gl_callback("glGetSynciv", (GLADapiproc) glad_glGetSynciv, 5, sync, pname, bufSize, length, values); glad_glGetSynciv(sync, pname, bufSize, length, values); _post_call_gl_callback(NULL, "glGetSynciv", (GLADapiproc) glad_glGetSynciv, 5, sync, pname, bufSize, length, values); } PFNGLGETSYNCIVPROC glad_debug_glGetSynciv = glad_debug_impl_glGetSynciv; PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void * pixels) { _pre_call_gl_callback("glGetTexImage", (GLADapiproc) glad_glGetTexImage, 5, target, level, format, type, pixels); glad_glGetTexImage(target, level, format, type, pixels); _post_call_gl_callback(NULL, "glGetTexImage", (GLADapiproc) glad_glGetTexImage, 5, target, level, format, type, pixels); } PFNGLGETTEXIMAGEPROC glad_debug_glGetTexImage = glad_debug_impl_glGetTexImage; PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat * params) { _pre_call_gl_callback("glGetTexLevelParameterfv", (GLADapiproc) glad_glGetTexLevelParameterfv, 4, target, level, pname, params); glad_glGetTexLevelParameterfv(target, level, pname, params); _post_call_gl_callback(NULL, "glGetTexLevelParameterfv", (GLADapiproc) glad_glGetTexLevelParameterfv, 4, target, level, pname, params); } PFNGLGETTEXLEVELPARAMETERFVPROC glad_debug_glGetTexLevelParameterfv = glad_debug_impl_glGetTexLevelParameterfv; PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetTexLevelParameteriv", (GLADapiproc) glad_glGetTexLevelParameteriv, 4, target, level, pname, params); glad_glGetTexLevelParameteriv(target, level, pname, params); _post_call_gl_callback(NULL, "glGetTexLevelParameteriv", (GLADapiproc) glad_glGetTexLevelParameteriv, 4, target, level, pname, params); } PFNGLGETTEXLEVELPARAMETERIVPROC glad_debug_glGetTexLevelParameteriv = glad_debug_impl_glGetTexLevelParameteriv; PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexParameterIiv(GLenum target, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetTexParameterIiv", (GLADapiproc) glad_glGetTexParameterIiv, 3, target, pname, params); glad_glGetTexParameterIiv(target, pname, params); _post_call_gl_callback(NULL, "glGetTexParameterIiv", (GLADapiproc) glad_glGetTexParameterIiv, 3, target, pname, params); } PFNGLGETTEXPARAMETERIIVPROC glad_debug_glGetTexParameterIiv = glad_debug_impl_glGetTexParameterIiv; PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint * params) { _pre_call_gl_callback("glGetTexParameterIuiv", (GLADapiproc) glad_glGetTexParameterIuiv, 3, target, pname, params); glad_glGetTexParameterIuiv(target, pname, params); _post_call_gl_callback(NULL, "glGetTexParameterIuiv", (GLADapiproc) glad_glGetTexParameterIuiv, 3, target, pname, params); } PFNGLGETTEXPARAMETERIUIVPROC glad_debug_glGetTexParameterIuiv = glad_debug_impl_glGetTexParameterIuiv; PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) { _pre_call_gl_callback("glGetTexParameterfv", (GLADapiproc) glad_glGetTexParameterfv, 3, target, pname, params); glad_glGetTexParameterfv(target, pname, params); _post_call_gl_callback(NULL, "glGetTexParameterfv", (GLADapiproc) glad_glGetTexParameterfv, 3, target, pname, params); } PFNGLGETTEXPARAMETERFVPROC glad_debug_glGetTexParameterfv = glad_debug_impl_glGetTexParameterfv; PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetTexParameteriv", (GLADapiproc) glad_glGetTexParameteriv, 3, target, pname, params); glad_glGetTexParameteriv(target, pname, params); _post_call_gl_callback(NULL, "glGetTexParameteriv", (GLADapiproc) glad_glGetTexParameteriv, 3, target, pname, params); } PFNGLGETTEXPARAMETERIVPROC glad_debug_glGetTexParameteriv = glad_debug_impl_glGetTexParameteriv; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; static void GLAD_API_PTR glad_debug_impl_glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) { _pre_call_gl_callback("glGetTransformFeedbackVarying", (GLADapiproc) glad_glGetTransformFeedbackVarying, 7, program, index, bufSize, length, size, type, name); glad_glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name); _post_call_gl_callback(NULL, "glGetTransformFeedbackVarying", (GLADapiproc) glad_glGetTransformFeedbackVarying, 7, program, index, bufSize, length, size, type, name); } PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_debug_glGetTransformFeedbackVarying = glad_debug_impl_glGetTransformFeedbackVarying; PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; static GLuint GLAD_API_PTR glad_debug_impl_glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName) { GLuint ret; _pre_call_gl_callback("glGetUniformBlockIndex", (GLADapiproc) glad_glGetUniformBlockIndex, 2, program, uniformBlockName); ret = glad_glGetUniformBlockIndex(program, uniformBlockName); _post_call_gl_callback((void*) &ret, "glGetUniformBlockIndex", (GLADapiproc) glad_glGetUniformBlockIndex, 2, program, uniformBlockName); return ret; } PFNGLGETUNIFORMBLOCKINDEXPROC glad_debug_glGetUniformBlockIndex = glad_debug_impl_glGetUniformBlockIndex; PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; static void GLAD_API_PTR glad_debug_impl_glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices) { _pre_call_gl_callback("glGetUniformIndices", (GLADapiproc) glad_glGetUniformIndices, 4, program, uniformCount, uniformNames, uniformIndices); glad_glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices); _post_call_gl_callback(NULL, "glGetUniformIndices", (GLADapiproc) glad_glGetUniformIndices, 4, program, uniformCount, uniformNames, uniformIndices); } PFNGLGETUNIFORMINDICESPROC glad_debug_glGetUniformIndices = glad_debug_impl_glGetUniformIndices; PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; static GLint GLAD_API_PTR glad_debug_impl_glGetUniformLocation(GLuint program, const GLchar * name) { GLint ret; _pre_call_gl_callback("glGetUniformLocation", (GLADapiproc) glad_glGetUniformLocation, 2, program, name); ret = glad_glGetUniformLocation(program, name); _post_call_gl_callback((void*) &ret, "glGetUniformLocation", (GLADapiproc) glad_glGetUniformLocation, 2, program, name); return ret; } PFNGLGETUNIFORMLOCATIONPROC glad_debug_glGetUniformLocation = glad_debug_impl_glGetUniformLocation; PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetUniformfv(GLuint program, GLint location, GLfloat * params) { _pre_call_gl_callback("glGetUniformfv", (GLADapiproc) glad_glGetUniformfv, 3, program, location, params); glad_glGetUniformfv(program, location, params); _post_call_gl_callback(NULL, "glGetUniformfv", (GLADapiproc) glad_glGetUniformfv, 3, program, location, params); } PFNGLGETUNIFORMFVPROC glad_debug_glGetUniformfv = glad_debug_impl_glGetUniformfv; PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetUniformiv(GLuint program, GLint location, GLint * params) { _pre_call_gl_callback("glGetUniformiv", (GLADapiproc) glad_glGetUniformiv, 3, program, location, params); glad_glGetUniformiv(program, location, params); _post_call_gl_callback(NULL, "glGetUniformiv", (GLADapiproc) glad_glGetUniformiv, 3, program, location, params); } PFNGLGETUNIFORMIVPROC glad_debug_glGetUniformiv = glad_debug_impl_glGetUniformiv; PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetUniformuiv(GLuint program, GLint location, GLuint * params) { _pre_call_gl_callback("glGetUniformuiv", (GLADapiproc) glad_glGetUniformuiv, 3, program, location, params); glad_glGetUniformuiv(program, location, params); _post_call_gl_callback(NULL, "glGetUniformuiv", (GLADapiproc) glad_glGetUniformuiv, 3, program, location, params); } PFNGLGETUNIFORMUIVPROC glad_debug_glGetUniformuiv = glad_debug_impl_glGetUniformuiv; PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribIiv(GLuint index, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetVertexAttribIiv", (GLADapiproc) glad_glGetVertexAttribIiv, 3, index, pname, params); glad_glGetVertexAttribIiv(index, pname, params); _post_call_gl_callback(NULL, "glGetVertexAttribIiv", (GLADapiproc) glad_glGetVertexAttribIiv, 3, index, pname, params); } PFNGLGETVERTEXATTRIBIIVPROC glad_debug_glGetVertexAttribIiv = glad_debug_impl_glGetVertexAttribIiv; PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint * params) { _pre_call_gl_callback("glGetVertexAttribIuiv", (GLADapiproc) glad_glGetVertexAttribIuiv, 3, index, pname, params); glad_glGetVertexAttribIuiv(index, pname, params); _post_call_gl_callback(NULL, "glGetVertexAttribIuiv", (GLADapiproc) glad_glGetVertexAttribIuiv, 3, index, pname, params); } PFNGLGETVERTEXATTRIBIUIVPROC glad_debug_glGetVertexAttribIuiv = glad_debug_impl_glGetVertexAttribIuiv; PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribPointerv(GLuint index, GLenum pname, void ** pointer) { _pre_call_gl_callback("glGetVertexAttribPointerv", (GLADapiproc) glad_glGetVertexAttribPointerv, 3, index, pname, pointer); glad_glGetVertexAttribPointerv(index, pname, pointer); _post_call_gl_callback(NULL, "glGetVertexAttribPointerv", (GLADapiproc) glad_glGetVertexAttribPointerv, 3, index, pname, pointer); } PFNGLGETVERTEXATTRIBPOINTERVPROC glad_debug_glGetVertexAttribPointerv = glad_debug_impl_glGetVertexAttribPointerv; PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble * params) { _pre_call_gl_callback("glGetVertexAttribdv", (GLADapiproc) glad_glGetVertexAttribdv, 3, index, pname, params); glad_glGetVertexAttribdv(index, pname, params); _post_call_gl_callback(NULL, "glGetVertexAttribdv", (GLADapiproc) glad_glGetVertexAttribdv, 3, index, pname, params); } PFNGLGETVERTEXATTRIBDVPROC glad_debug_glGetVertexAttribdv = glad_debug_impl_glGetVertexAttribdv; PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) { _pre_call_gl_callback("glGetVertexAttribfv", (GLADapiproc) glad_glGetVertexAttribfv, 3, index, pname, params); glad_glGetVertexAttribfv(index, pname, params); _post_call_gl_callback(NULL, "glGetVertexAttribfv", (GLADapiproc) glad_glGetVertexAttribfv, 3, index, pname, params); } PFNGLGETVERTEXATTRIBFVPROC glad_debug_glGetVertexAttribfv = glad_debug_impl_glGetVertexAttribfv; PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; static void GLAD_API_PTR glad_debug_impl_glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) { _pre_call_gl_callback("glGetVertexAttribiv", (GLADapiproc) glad_glGetVertexAttribiv, 3, index, pname, params); glad_glGetVertexAttribiv(index, pname, params); _post_call_gl_callback(NULL, "glGetVertexAttribiv", (GLADapiproc) glad_glGetVertexAttribiv, 3, index, pname, params); } PFNGLGETVERTEXATTRIBIVPROC glad_debug_glGetVertexAttribiv = glad_debug_impl_glGetVertexAttribiv; PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnCompressedTexImageARB(GLenum target, GLint lod, GLsizei bufSize, void * img) { _pre_call_gl_callback("glGetnCompressedTexImageARB", (GLADapiproc) glad_glGetnCompressedTexImageARB, 4, target, lod, bufSize, img); glad_glGetnCompressedTexImageARB(target, lod, bufSize, img); _post_call_gl_callback(NULL, "glGetnCompressedTexImageARB", (GLADapiproc) glad_glGetnCompressedTexImageARB, 4, target, lod, bufSize, img); } PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_debug_glGetnCompressedTexImageARB = glad_debug_impl_glGetnCompressedTexImageARB; PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnTexImageARB(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img) { _pre_call_gl_callback("glGetnTexImageARB", (GLADapiproc) glad_glGetnTexImageARB, 6, target, level, format, type, bufSize, img); glad_glGetnTexImageARB(target, level, format, type, bufSize, img); _post_call_gl_callback(NULL, "glGetnTexImageARB", (GLADapiproc) glad_glGetnTexImageARB, 6, target, level, format, type, bufSize, img); } PFNGLGETNTEXIMAGEARBPROC glad_debug_glGetnTexImageARB = glad_debug_impl_glGetnTexImageARB; PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnUniformdvARB(GLuint program, GLint location, GLsizei bufSize, GLdouble * params) { _pre_call_gl_callback("glGetnUniformdvARB", (GLADapiproc) glad_glGetnUniformdvARB, 4, program, location, bufSize, params); glad_glGetnUniformdvARB(program, location, bufSize, params); _post_call_gl_callback(NULL, "glGetnUniformdvARB", (GLADapiproc) glad_glGetnUniformdvARB, 4, program, location, bufSize, params); } PFNGLGETNUNIFORMDVARBPROC glad_debug_glGetnUniformdvARB = glad_debug_impl_glGetnUniformdvARB; PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnUniformfvARB(GLuint program, GLint location, GLsizei bufSize, GLfloat * params) { _pre_call_gl_callback("glGetnUniformfvARB", (GLADapiproc) glad_glGetnUniformfvARB, 4, program, location, bufSize, params); glad_glGetnUniformfvARB(program, location, bufSize, params); _post_call_gl_callback(NULL, "glGetnUniformfvARB", (GLADapiproc) glad_glGetnUniformfvARB, 4, program, location, bufSize, params); } PFNGLGETNUNIFORMFVARBPROC glad_debug_glGetnUniformfvARB = glad_debug_impl_glGetnUniformfvARB; PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnUniformivARB(GLuint program, GLint location, GLsizei bufSize, GLint * params) { _pre_call_gl_callback("glGetnUniformivARB", (GLADapiproc) glad_glGetnUniformivARB, 4, program, location, bufSize, params); glad_glGetnUniformivARB(program, location, bufSize, params); _post_call_gl_callback(NULL, "glGetnUniformivARB", (GLADapiproc) glad_glGetnUniformivARB, 4, program, location, bufSize, params); } PFNGLGETNUNIFORMIVARBPROC glad_debug_glGetnUniformivARB = glad_debug_impl_glGetnUniformivARB; PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB = NULL; static void GLAD_API_PTR glad_debug_impl_glGetnUniformuivARB(GLuint program, GLint location, GLsizei bufSize, GLuint * params) { _pre_call_gl_callback("glGetnUniformuivARB", (GLADapiproc) glad_glGetnUniformuivARB, 4, program, location, bufSize, params); glad_glGetnUniformuivARB(program, location, bufSize, params); _post_call_gl_callback(NULL, "glGetnUniformuivARB", (GLADapiproc) glad_glGetnUniformuivARB, 4, program, location, bufSize, params); } PFNGLGETNUNIFORMUIVARBPROC glad_debug_glGetnUniformuivARB = glad_debug_impl_glGetnUniformuivARB; PFNGLHINTPROC glad_glHint = NULL; static void GLAD_API_PTR glad_debug_impl_glHint(GLenum target, GLenum mode) { _pre_call_gl_callback("glHint", (GLADapiproc) glad_glHint, 2, target, mode); glad_glHint(target, mode); _post_call_gl_callback(NULL, "glHint", (GLADapiproc) glad_glHint, 2, target, mode); } PFNGLHINTPROC glad_debug_glHint = glad_debug_impl_glHint; PFNGLISBUFFERPROC glad_glIsBuffer = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsBuffer(GLuint buffer) { GLboolean ret; _pre_call_gl_callback("glIsBuffer", (GLADapiproc) glad_glIsBuffer, 1, buffer); ret = glad_glIsBuffer(buffer); _post_call_gl_callback((void*) &ret, "glIsBuffer", (GLADapiproc) glad_glIsBuffer, 1, buffer); return ret; } PFNGLISBUFFERPROC glad_debug_glIsBuffer = glad_debug_impl_glIsBuffer; PFNGLISENABLEDPROC glad_glIsEnabled = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsEnabled(GLenum cap) { GLboolean ret; _pre_call_gl_callback("glIsEnabled", (GLADapiproc) glad_glIsEnabled, 1, cap); ret = glad_glIsEnabled(cap); _post_call_gl_callback((void*) &ret, "glIsEnabled", (GLADapiproc) glad_glIsEnabled, 1, cap); return ret; } PFNGLISENABLEDPROC glad_debug_glIsEnabled = glad_debug_impl_glIsEnabled; PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsEnabledi(GLenum target, GLuint index) { GLboolean ret; _pre_call_gl_callback("glIsEnabledi", (GLADapiproc) glad_glIsEnabledi, 2, target, index); ret = glad_glIsEnabledi(target, index); _post_call_gl_callback((void*) &ret, "glIsEnabledi", (GLADapiproc) glad_glIsEnabledi, 2, target, index); return ret; } PFNGLISENABLEDIPROC glad_debug_glIsEnabledi = glad_debug_impl_glIsEnabledi; PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsFramebuffer(GLuint framebuffer) { GLboolean ret; _pre_call_gl_callback("glIsFramebuffer", (GLADapiproc) glad_glIsFramebuffer, 1, framebuffer); ret = glad_glIsFramebuffer(framebuffer); _post_call_gl_callback((void*) &ret, "glIsFramebuffer", (GLADapiproc) glad_glIsFramebuffer, 1, framebuffer); return ret; } PFNGLISFRAMEBUFFERPROC glad_debug_glIsFramebuffer = glad_debug_impl_glIsFramebuffer; PFNGLISPROGRAMPROC glad_glIsProgram = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsProgram(GLuint program) { GLboolean ret; _pre_call_gl_callback("glIsProgram", (GLADapiproc) glad_glIsProgram, 1, program); ret = glad_glIsProgram(program); _post_call_gl_callback((void*) &ret, "glIsProgram", (GLADapiproc) glad_glIsProgram, 1, program); return ret; } PFNGLISPROGRAMPROC glad_debug_glIsProgram = glad_debug_impl_glIsProgram; PFNGLISQUERYPROC glad_glIsQuery = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsQuery(GLuint id) { GLboolean ret; _pre_call_gl_callback("glIsQuery", (GLADapiproc) glad_glIsQuery, 1, id); ret = glad_glIsQuery(id); _post_call_gl_callback((void*) &ret, "glIsQuery", (GLADapiproc) glad_glIsQuery, 1, id); return ret; } PFNGLISQUERYPROC glad_debug_glIsQuery = glad_debug_impl_glIsQuery; PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsRenderbuffer(GLuint renderbuffer) { GLboolean ret; _pre_call_gl_callback("glIsRenderbuffer", (GLADapiproc) glad_glIsRenderbuffer, 1, renderbuffer); ret = glad_glIsRenderbuffer(renderbuffer); _post_call_gl_callback((void*) &ret, "glIsRenderbuffer", (GLADapiproc) glad_glIsRenderbuffer, 1, renderbuffer); return ret; } PFNGLISRENDERBUFFERPROC glad_debug_glIsRenderbuffer = glad_debug_impl_glIsRenderbuffer; PFNGLISSAMPLERPROC glad_glIsSampler = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsSampler(GLuint sampler) { GLboolean ret; _pre_call_gl_callback("glIsSampler", (GLADapiproc) glad_glIsSampler, 1, sampler); ret = glad_glIsSampler(sampler); _post_call_gl_callback((void*) &ret, "glIsSampler", (GLADapiproc) glad_glIsSampler, 1, sampler); return ret; } PFNGLISSAMPLERPROC glad_debug_glIsSampler = glad_debug_impl_glIsSampler; PFNGLISSHADERPROC glad_glIsShader = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsShader(GLuint shader) { GLboolean ret; _pre_call_gl_callback("glIsShader", (GLADapiproc) glad_glIsShader, 1, shader); ret = glad_glIsShader(shader); _post_call_gl_callback((void*) &ret, "glIsShader", (GLADapiproc) glad_glIsShader, 1, shader); return ret; } PFNGLISSHADERPROC glad_debug_glIsShader = glad_debug_impl_glIsShader; PFNGLISSYNCPROC glad_glIsSync = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsSync(GLsync sync) { GLboolean ret; _pre_call_gl_callback("glIsSync", (GLADapiproc) glad_glIsSync, 1, sync); ret = glad_glIsSync(sync); _post_call_gl_callback((void*) &ret, "glIsSync", (GLADapiproc) glad_glIsSync, 1, sync); return ret; } PFNGLISSYNCPROC glad_debug_glIsSync = glad_debug_impl_glIsSync; PFNGLISTEXTUREPROC glad_glIsTexture = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsTexture(GLuint texture) { GLboolean ret; _pre_call_gl_callback("glIsTexture", (GLADapiproc) glad_glIsTexture, 1, texture); ret = glad_glIsTexture(texture); _post_call_gl_callback((void*) &ret, "glIsTexture", (GLADapiproc) glad_glIsTexture, 1, texture); return ret; } PFNGLISTEXTUREPROC glad_debug_glIsTexture = glad_debug_impl_glIsTexture; PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glIsVertexArray(GLuint array) { GLboolean ret; _pre_call_gl_callback("glIsVertexArray", (GLADapiproc) glad_glIsVertexArray, 1, array); ret = glad_glIsVertexArray(array); _post_call_gl_callback((void*) &ret, "glIsVertexArray", (GLADapiproc) glad_glIsVertexArray, 1, array); return ret; } PFNGLISVERTEXARRAYPROC glad_debug_glIsVertexArray = glad_debug_impl_glIsVertexArray; PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; static void GLAD_API_PTR glad_debug_impl_glLineWidth(GLfloat width) { _pre_call_gl_callback("glLineWidth", (GLADapiproc) glad_glLineWidth, 1, width); glad_glLineWidth(width); _post_call_gl_callback(NULL, "glLineWidth", (GLADapiproc) glad_glLineWidth, 1, width); } PFNGLLINEWIDTHPROC glad_debug_glLineWidth = glad_debug_impl_glLineWidth; PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; static void GLAD_API_PTR glad_debug_impl_glLinkProgram(GLuint program) { _pre_call_gl_callback("glLinkProgram", (GLADapiproc) glad_glLinkProgram, 1, program); glad_glLinkProgram(program); _post_call_gl_callback(NULL, "glLinkProgram", (GLADapiproc) glad_glLinkProgram, 1, program); } PFNGLLINKPROGRAMPROC glad_debug_glLinkProgram = glad_debug_impl_glLinkProgram; PFNGLLOGICOPPROC glad_glLogicOp = NULL; static void GLAD_API_PTR glad_debug_impl_glLogicOp(GLenum opcode) { _pre_call_gl_callback("glLogicOp", (GLADapiproc) glad_glLogicOp, 1, opcode); glad_glLogicOp(opcode); _post_call_gl_callback(NULL, "glLogicOp", (GLADapiproc) glad_glLogicOp, 1, opcode); } PFNGLLOGICOPPROC glad_debug_glLogicOp = glad_debug_impl_glLogicOp; PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; static void * GLAD_API_PTR glad_debug_impl_glMapBuffer(GLenum target, GLenum access) { void * ret; _pre_call_gl_callback("glMapBuffer", (GLADapiproc) glad_glMapBuffer, 2, target, access); ret = glad_glMapBuffer(target, access); _post_call_gl_callback((void*) &ret, "glMapBuffer", (GLADapiproc) glad_glMapBuffer, 2, target, access); return ret; } PFNGLMAPBUFFERPROC glad_debug_glMapBuffer = glad_debug_impl_glMapBuffer; PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; static void * GLAD_API_PTR glad_debug_impl_glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { void * ret; _pre_call_gl_callback("glMapBufferRange", (GLADapiproc) glad_glMapBufferRange, 4, target, offset, length, access); ret = glad_glMapBufferRange(target, offset, length, access); _post_call_gl_callback((void*) &ret, "glMapBufferRange", (GLADapiproc) glad_glMapBufferRange, 4, target, offset, length, access); return ret; } PFNGLMAPBUFFERRANGEPROC glad_debug_glMapBufferRange = glad_debug_impl_glMapBufferRange; PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; static void GLAD_API_PTR glad_debug_impl_glMultiDrawArrays(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount) { _pre_call_gl_callback("glMultiDrawArrays", (GLADapiproc) glad_glMultiDrawArrays, 4, mode, first, count, drawcount); glad_glMultiDrawArrays(mode, first, count, drawcount); _post_call_gl_callback(NULL, "glMultiDrawArrays", (GLADapiproc) glad_glMultiDrawArrays, 4, mode, first, count, drawcount); } PFNGLMULTIDRAWARRAYSPROC glad_debug_glMultiDrawArrays = glad_debug_impl_glMultiDrawArrays; PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; static void GLAD_API_PTR glad_debug_impl_glMultiDrawElements(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount) { _pre_call_gl_callback("glMultiDrawElements", (GLADapiproc) glad_glMultiDrawElements, 5, mode, count, type, indices, drawcount); glad_glMultiDrawElements(mode, count, type, indices, drawcount); _post_call_gl_callback(NULL, "glMultiDrawElements", (GLADapiproc) glad_glMultiDrawElements, 5, mode, count, type, indices, drawcount); } PFNGLMULTIDRAWELEMENTSPROC glad_debug_glMultiDrawElements = glad_debug_impl_glMultiDrawElements; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; static void GLAD_API_PTR glad_debug_impl_glMultiDrawElementsBaseVertex(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex) { _pre_call_gl_callback("glMultiDrawElementsBaseVertex", (GLADapiproc) glad_glMultiDrawElementsBaseVertex, 6, mode, count, type, indices, drawcount, basevertex); glad_glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex); _post_call_gl_callback(NULL, "glMultiDrawElementsBaseVertex", (GLADapiproc) glad_glMultiDrawElementsBaseVertex, 6, mode, count, type, indices, drawcount, basevertex); } PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_debug_glMultiDrawElementsBaseVertex = glad_debug_impl_glMultiDrawElementsBaseVertex; PFNGLOBJECTLABELPROC glad_glObjectLabel = NULL; static void GLAD_API_PTR glad_debug_impl_glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar * label) { _pre_call_gl_callback("glObjectLabel", (GLADapiproc) glad_glObjectLabel, 4, identifier, name, length, label); glad_glObjectLabel(identifier, name, length, label); _post_call_gl_callback(NULL, "glObjectLabel", (GLADapiproc) glad_glObjectLabel, 4, identifier, name, length, label); } PFNGLOBJECTLABELPROC glad_debug_glObjectLabel = glad_debug_impl_glObjectLabel; PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL; static void GLAD_API_PTR glad_debug_impl_glObjectPtrLabel(const void * ptr, GLsizei length, const GLchar * label) { _pre_call_gl_callback("glObjectPtrLabel", (GLADapiproc) glad_glObjectPtrLabel, 3, ptr, length, label); glad_glObjectPtrLabel(ptr, length, label); _post_call_gl_callback(NULL, "glObjectPtrLabel", (GLADapiproc) glad_glObjectPtrLabel, 3, ptr, length, label); } PFNGLOBJECTPTRLABELPROC glad_debug_glObjectPtrLabel = glad_debug_impl_glObjectPtrLabel; PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; static void GLAD_API_PTR glad_debug_impl_glPixelStoref(GLenum pname, GLfloat param) { _pre_call_gl_callback("glPixelStoref", (GLADapiproc) glad_glPixelStoref, 2, pname, param); glad_glPixelStoref(pname, param); _post_call_gl_callback(NULL, "glPixelStoref", (GLADapiproc) glad_glPixelStoref, 2, pname, param); } PFNGLPIXELSTOREFPROC glad_debug_glPixelStoref = glad_debug_impl_glPixelStoref; PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; static void GLAD_API_PTR glad_debug_impl_glPixelStorei(GLenum pname, GLint param) { _pre_call_gl_callback("glPixelStorei", (GLADapiproc) glad_glPixelStorei, 2, pname, param); glad_glPixelStorei(pname, param); _post_call_gl_callback(NULL, "glPixelStorei", (GLADapiproc) glad_glPixelStorei, 2, pname, param); } PFNGLPIXELSTOREIPROC glad_debug_glPixelStorei = glad_debug_impl_glPixelStorei; PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; static void GLAD_API_PTR glad_debug_impl_glPointParameterf(GLenum pname, GLfloat param) { _pre_call_gl_callback("glPointParameterf", (GLADapiproc) glad_glPointParameterf, 2, pname, param); glad_glPointParameterf(pname, param); _post_call_gl_callback(NULL, "glPointParameterf", (GLADapiproc) glad_glPointParameterf, 2, pname, param); } PFNGLPOINTPARAMETERFPROC glad_debug_glPointParameterf = glad_debug_impl_glPointParameterf; PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glPointParameterfv(GLenum pname, const GLfloat * params) { _pre_call_gl_callback("glPointParameterfv", (GLADapiproc) glad_glPointParameterfv, 2, pname, params); glad_glPointParameterfv(pname, params); _post_call_gl_callback(NULL, "glPointParameterfv", (GLADapiproc) glad_glPointParameterfv, 2, pname, params); } PFNGLPOINTPARAMETERFVPROC glad_debug_glPointParameterfv = glad_debug_impl_glPointParameterfv; PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; static void GLAD_API_PTR glad_debug_impl_glPointParameteri(GLenum pname, GLint param) { _pre_call_gl_callback("glPointParameteri", (GLADapiproc) glad_glPointParameteri, 2, pname, param); glad_glPointParameteri(pname, param); _post_call_gl_callback(NULL, "glPointParameteri", (GLADapiproc) glad_glPointParameteri, 2, pname, param); } PFNGLPOINTPARAMETERIPROC glad_debug_glPointParameteri = glad_debug_impl_glPointParameteri; PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glPointParameteriv(GLenum pname, const GLint * params) { _pre_call_gl_callback("glPointParameteriv", (GLADapiproc) glad_glPointParameteriv, 2, pname, params); glad_glPointParameteriv(pname, params); _post_call_gl_callback(NULL, "glPointParameteriv", (GLADapiproc) glad_glPointParameteriv, 2, pname, params); } PFNGLPOINTPARAMETERIVPROC glad_debug_glPointParameteriv = glad_debug_impl_glPointParameteriv; PFNGLPOINTSIZEPROC glad_glPointSize = NULL; static void GLAD_API_PTR glad_debug_impl_glPointSize(GLfloat size) { _pre_call_gl_callback("glPointSize", (GLADapiproc) glad_glPointSize, 1, size); glad_glPointSize(size); _post_call_gl_callback(NULL, "glPointSize", (GLADapiproc) glad_glPointSize, 1, size); } PFNGLPOINTSIZEPROC glad_debug_glPointSize = glad_debug_impl_glPointSize; PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; static void GLAD_API_PTR glad_debug_impl_glPolygonMode(GLenum face, GLenum mode) { _pre_call_gl_callback("glPolygonMode", (GLADapiproc) glad_glPolygonMode, 2, face, mode); glad_glPolygonMode(face, mode); _post_call_gl_callback(NULL, "glPolygonMode", (GLADapiproc) glad_glPolygonMode, 2, face, mode); } PFNGLPOLYGONMODEPROC glad_debug_glPolygonMode = glad_debug_impl_glPolygonMode; PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; static void GLAD_API_PTR glad_debug_impl_glPolygonOffset(GLfloat factor, GLfloat units) { _pre_call_gl_callback("glPolygonOffset", (GLADapiproc) glad_glPolygonOffset, 2, factor, units); glad_glPolygonOffset(factor, units); _post_call_gl_callback(NULL, "glPolygonOffset", (GLADapiproc) glad_glPolygonOffset, 2, factor, units); } PFNGLPOLYGONOFFSETPROC glad_debug_glPolygonOffset = glad_debug_impl_glPolygonOffset; PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL; static void GLAD_API_PTR glad_debug_impl_glPopDebugGroup(void) { _pre_call_gl_callback("glPopDebugGroup", (GLADapiproc) glad_glPopDebugGroup, 0); glad_glPopDebugGroup(); _post_call_gl_callback(NULL, "glPopDebugGroup", (GLADapiproc) glad_glPopDebugGroup, 0); } PFNGLPOPDEBUGGROUPPROC glad_debug_glPopDebugGroup = glad_debug_impl_glPopDebugGroup; PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; static void GLAD_API_PTR glad_debug_impl_glPrimitiveRestartIndex(GLuint index) { _pre_call_gl_callback("glPrimitiveRestartIndex", (GLADapiproc) glad_glPrimitiveRestartIndex, 1, index); glad_glPrimitiveRestartIndex(index); _post_call_gl_callback(NULL, "glPrimitiveRestartIndex", (GLADapiproc) glad_glPrimitiveRestartIndex, 1, index); } PFNGLPRIMITIVERESTARTINDEXPROC glad_debug_glPrimitiveRestartIndex = glad_debug_impl_glPrimitiveRestartIndex; PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; static void GLAD_API_PTR glad_debug_impl_glProvokingVertex(GLenum mode) { _pre_call_gl_callback("glProvokingVertex", (GLADapiproc) glad_glProvokingVertex, 1, mode); glad_glProvokingVertex(mode); _post_call_gl_callback(NULL, "glProvokingVertex", (GLADapiproc) glad_glProvokingVertex, 1, mode); } PFNGLPROVOKINGVERTEXPROC glad_debug_glProvokingVertex = glad_debug_impl_glProvokingVertex; PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL; static void GLAD_API_PTR glad_debug_impl_glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar * message) { _pre_call_gl_callback("glPushDebugGroup", (GLADapiproc) glad_glPushDebugGroup, 4, source, id, length, message); glad_glPushDebugGroup(source, id, length, message); _post_call_gl_callback(NULL, "glPushDebugGroup", (GLADapiproc) glad_glPushDebugGroup, 4, source, id, length, message); } PFNGLPUSHDEBUGGROUPPROC glad_debug_glPushDebugGroup = glad_debug_impl_glPushDebugGroup; PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; static void GLAD_API_PTR glad_debug_impl_glQueryCounter(GLuint id, GLenum target) { _pre_call_gl_callback("glQueryCounter", (GLADapiproc) glad_glQueryCounter, 2, id, target); glad_glQueryCounter(id, target); _post_call_gl_callback(NULL, "glQueryCounter", (GLADapiproc) glad_glQueryCounter, 2, id, target); } PFNGLQUERYCOUNTERPROC glad_debug_glQueryCounter = glad_debug_impl_glQueryCounter; PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glReadBuffer(GLenum src) { _pre_call_gl_callback("glReadBuffer", (GLADapiproc) glad_glReadBuffer, 1, src); glad_glReadBuffer(src); _post_call_gl_callback(NULL, "glReadBuffer", (GLADapiproc) glad_glReadBuffer, 1, src); } PFNGLREADBUFFERPROC glad_debug_glReadBuffer = glad_debug_impl_glReadBuffer; PFNGLREADPIXELSPROC glad_glReadPixels = NULL; static void GLAD_API_PTR glad_debug_impl_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels) { _pre_call_gl_callback("glReadPixels", (GLADapiproc) glad_glReadPixels, 7, x, y, width, height, format, type, pixels); glad_glReadPixels(x, y, width, height, format, type, pixels); _post_call_gl_callback(NULL, "glReadPixels", (GLADapiproc) glad_glReadPixels, 7, x, y, width, height, format, type, pixels); } PFNGLREADPIXELSPROC glad_debug_glReadPixels = glad_debug_impl_glReadPixels; PFNGLREADNPIXELSPROC glad_glReadnPixels = NULL; static void GLAD_API_PTR glad_debug_impl_glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data) { _pre_call_gl_callback("glReadnPixels", (GLADapiproc) glad_glReadnPixels, 8, x, y, width, height, format, type, bufSize, data); glad_glReadnPixels(x, y, width, height, format, type, bufSize, data); _post_call_gl_callback(NULL, "glReadnPixels", (GLADapiproc) glad_glReadnPixels, 8, x, y, width, height, format, type, bufSize, data); } PFNGLREADNPIXELSPROC glad_debug_glReadnPixels = glad_debug_impl_glReadnPixels; PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB = NULL; static void GLAD_API_PTR glad_debug_impl_glReadnPixelsARB(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data) { _pre_call_gl_callback("glReadnPixelsARB", (GLADapiproc) glad_glReadnPixelsARB, 8, x, y, width, height, format, type, bufSize, data); glad_glReadnPixelsARB(x, y, width, height, format, type, bufSize, data); _post_call_gl_callback(NULL, "glReadnPixelsARB", (GLADapiproc) glad_glReadnPixelsARB, 8, x, y, width, height, format, type, bufSize, data); } PFNGLREADNPIXELSARBPROC glad_debug_glReadnPixelsARB = glad_debug_impl_glReadnPixelsARB; PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; static void GLAD_API_PTR glad_debug_impl_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { _pre_call_gl_callback("glRenderbufferStorage", (GLADapiproc) glad_glRenderbufferStorage, 4, target, internalformat, width, height); glad_glRenderbufferStorage(target, internalformat, width, height); _post_call_gl_callback(NULL, "glRenderbufferStorage", (GLADapiproc) glad_glRenderbufferStorage, 4, target, internalformat, width, height); } PFNGLRENDERBUFFERSTORAGEPROC glad_debug_glRenderbufferStorage = glad_debug_impl_glRenderbufferStorage; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; static void GLAD_API_PTR glad_debug_impl_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { _pre_call_gl_callback("glRenderbufferStorageMultisample", (GLADapiproc) glad_glRenderbufferStorageMultisample, 5, target, samples, internalformat, width, height); glad_glRenderbufferStorageMultisample(target, samples, internalformat, width, height); _post_call_gl_callback(NULL, "glRenderbufferStorageMultisample", (GLADapiproc) glad_glRenderbufferStorageMultisample, 5, target, samples, internalformat, width, height); } PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_debug_glRenderbufferStorageMultisample = glad_debug_impl_glRenderbufferStorageMultisample; PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; static void GLAD_API_PTR glad_debug_impl_glSampleCoverage(GLfloat value, GLboolean invert) { _pre_call_gl_callback("glSampleCoverage", (GLADapiproc) glad_glSampleCoverage, 2, value, invert); glad_glSampleCoverage(value, invert); _post_call_gl_callback(NULL, "glSampleCoverage", (GLADapiproc) glad_glSampleCoverage, 2, value, invert); } PFNGLSAMPLECOVERAGEPROC glad_debug_glSampleCoverage = glad_debug_impl_glSampleCoverage; PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB = NULL; static void GLAD_API_PTR glad_debug_impl_glSampleCoverageARB(GLfloat value, GLboolean invert) { _pre_call_gl_callback("glSampleCoverageARB", (GLADapiproc) glad_glSampleCoverageARB, 2, value, invert); glad_glSampleCoverageARB(value, invert); _post_call_gl_callback(NULL, "glSampleCoverageARB", (GLADapiproc) glad_glSampleCoverageARB, 2, value, invert); } PFNGLSAMPLECOVERAGEARBPROC glad_debug_glSampleCoverageARB = glad_debug_impl_glSampleCoverageARB; PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; static void GLAD_API_PTR glad_debug_impl_glSampleMaski(GLuint maskNumber, GLbitfield mask) { _pre_call_gl_callback("glSampleMaski", (GLADapiproc) glad_glSampleMaski, 2, maskNumber, mask); glad_glSampleMaski(maskNumber, mask); _post_call_gl_callback(NULL, "glSampleMaski", (GLADapiproc) glad_glSampleMaski, 2, maskNumber, mask); } PFNGLSAMPLEMASKIPROC glad_debug_glSampleMaski = glad_debug_impl_glSampleMaski; PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint * param) { _pre_call_gl_callback("glSamplerParameterIiv", (GLADapiproc) glad_glSamplerParameterIiv, 3, sampler, pname, param); glad_glSamplerParameterIiv(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameterIiv", (GLADapiproc) glad_glSamplerParameterIiv, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERIIVPROC glad_debug_glSamplerParameterIiv = glad_debug_impl_glSamplerParameterIiv; PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint * param) { _pre_call_gl_callback("glSamplerParameterIuiv", (GLADapiproc) glad_glSamplerParameterIuiv, 3, sampler, pname, param); glad_glSamplerParameterIuiv(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameterIuiv", (GLADapiproc) glad_glSamplerParameterIuiv, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERIUIVPROC glad_debug_glSamplerParameterIuiv = glad_debug_impl_glSamplerParameterIuiv; PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) { _pre_call_gl_callback("glSamplerParameterf", (GLADapiproc) glad_glSamplerParameterf, 3, sampler, pname, param); glad_glSamplerParameterf(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameterf", (GLADapiproc) glad_glSamplerParameterf, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERFPROC glad_debug_glSamplerParameterf = glad_debug_impl_glSamplerParameterf; PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat * param) { _pre_call_gl_callback("glSamplerParameterfv", (GLADapiproc) glad_glSamplerParameterfv, 3, sampler, pname, param); glad_glSamplerParameterfv(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameterfv", (GLADapiproc) glad_glSamplerParameterfv, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERFVPROC glad_debug_glSamplerParameterfv = glad_debug_impl_glSamplerParameterfv; PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) { _pre_call_gl_callback("glSamplerParameteri", (GLADapiproc) glad_glSamplerParameteri, 3, sampler, pname, param); glad_glSamplerParameteri(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameteri", (GLADapiproc) glad_glSamplerParameteri, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERIPROC glad_debug_glSamplerParameteri = glad_debug_impl_glSamplerParameteri; PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint * param) { _pre_call_gl_callback("glSamplerParameteriv", (GLADapiproc) glad_glSamplerParameteriv, 3, sampler, pname, param); glad_glSamplerParameteriv(sampler, pname, param); _post_call_gl_callback(NULL, "glSamplerParameteriv", (GLADapiproc) glad_glSamplerParameteriv, 3, sampler, pname, param); } PFNGLSAMPLERPARAMETERIVPROC glad_debug_glSamplerParameteriv = glad_debug_impl_glSamplerParameteriv; PFNGLSCISSORPROC glad_glScissor = NULL; static void GLAD_API_PTR glad_debug_impl_glScissor(GLint x, GLint y, GLsizei width, GLsizei height) { _pre_call_gl_callback("glScissor", (GLADapiproc) glad_glScissor, 4, x, y, width, height); glad_glScissor(x, y, width, height); _post_call_gl_callback(NULL, "glScissor", (GLADapiproc) glad_glScissor, 4, x, y, width, height); } PFNGLSCISSORPROC glad_debug_glScissor = glad_debug_impl_glScissor; PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; static void GLAD_API_PTR glad_debug_impl_glShaderSource(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length) { _pre_call_gl_callback("glShaderSource", (GLADapiproc) glad_glShaderSource, 4, shader, count, string, length); glad_glShaderSource(shader, count, string, length); _post_call_gl_callback(NULL, "glShaderSource", (GLADapiproc) glad_glShaderSource, 4, shader, count, string, length); } PFNGLSHADERSOURCEPROC glad_debug_glShaderSource = glad_debug_impl_glShaderSource; PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilFunc(GLenum func, GLint ref, GLuint mask) { _pre_call_gl_callback("glStencilFunc", (GLADapiproc) glad_glStencilFunc, 3, func, ref, mask); glad_glStencilFunc(func, ref, mask); _post_call_gl_callback(NULL, "glStencilFunc", (GLADapiproc) glad_glStencilFunc, 3, func, ref, mask); } PFNGLSTENCILFUNCPROC glad_debug_glStencilFunc = glad_debug_impl_glStencilFunc; PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) { _pre_call_gl_callback("glStencilFuncSeparate", (GLADapiproc) glad_glStencilFuncSeparate, 4, face, func, ref, mask); glad_glStencilFuncSeparate(face, func, ref, mask); _post_call_gl_callback(NULL, "glStencilFuncSeparate", (GLADapiproc) glad_glStencilFuncSeparate, 4, face, func, ref, mask); } PFNGLSTENCILFUNCSEPARATEPROC glad_debug_glStencilFuncSeparate = glad_debug_impl_glStencilFuncSeparate; PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilMask(GLuint mask) { _pre_call_gl_callback("glStencilMask", (GLADapiproc) glad_glStencilMask, 1, mask); glad_glStencilMask(mask); _post_call_gl_callback(NULL, "glStencilMask", (GLADapiproc) glad_glStencilMask, 1, mask); } PFNGLSTENCILMASKPROC glad_debug_glStencilMask = glad_debug_impl_glStencilMask; PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilMaskSeparate(GLenum face, GLuint mask) { _pre_call_gl_callback("glStencilMaskSeparate", (GLADapiproc) glad_glStencilMaskSeparate, 2, face, mask); glad_glStencilMaskSeparate(face, mask); _post_call_gl_callback(NULL, "glStencilMaskSeparate", (GLADapiproc) glad_glStencilMaskSeparate, 2, face, mask); } PFNGLSTENCILMASKSEPARATEPROC glad_debug_glStencilMaskSeparate = glad_debug_impl_glStencilMaskSeparate; PFNGLSTENCILOPPROC glad_glStencilOp = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { _pre_call_gl_callback("glStencilOp", (GLADapiproc) glad_glStencilOp, 3, fail, zfail, zpass); glad_glStencilOp(fail, zfail, zpass); _post_call_gl_callback(NULL, "glStencilOp", (GLADapiproc) glad_glStencilOp, 3, fail, zfail, zpass); } PFNGLSTENCILOPPROC glad_debug_glStencilOp = glad_debug_impl_glStencilOp; PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; static void GLAD_API_PTR glad_debug_impl_glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) { _pre_call_gl_callback("glStencilOpSeparate", (GLADapiproc) glad_glStencilOpSeparate, 4, face, sfail, dpfail, dppass); glad_glStencilOpSeparate(face, sfail, dpfail, dppass); _post_call_gl_callback(NULL, "glStencilOpSeparate", (GLADapiproc) glad_glStencilOpSeparate, 4, face, sfail, dpfail, dppass); } PFNGLSTENCILOPSEPARATEPROC glad_debug_glStencilOpSeparate = glad_debug_impl_glStencilOpSeparate; PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; static void GLAD_API_PTR glad_debug_impl_glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer) { _pre_call_gl_callback("glTexBuffer", (GLADapiproc) glad_glTexBuffer, 3, target, internalformat, buffer); glad_glTexBuffer(target, internalformat, buffer); _post_call_gl_callback(NULL, "glTexBuffer", (GLADapiproc) glad_glTexBuffer, 3, target, internalformat, buffer); } PFNGLTEXBUFFERPROC glad_debug_glTexBuffer = glad_debug_impl_glTexBuffer; PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexImage1D", (GLADapiproc) glad_glTexImage1D, 8, target, level, internalformat, width, border, format, type, pixels); glad_glTexImage1D(target, level, internalformat, width, border, format, type, pixels); _post_call_gl_callback(NULL, "glTexImage1D", (GLADapiproc) glad_glTexImage1D, 8, target, level, internalformat, width, border, format, type, pixels); } PFNGLTEXIMAGE1DPROC glad_debug_glTexImage1D = glad_debug_impl_glTexImage1D; PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexImage2D", (GLADapiproc) glad_glTexImage2D, 9, target, level, internalformat, width, height, border, format, type, pixels); glad_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); _post_call_gl_callback(NULL, "glTexImage2D", (GLADapiproc) glad_glTexImage2D, 9, target, level, internalformat, width, height, border, format, type, pixels); } PFNGLTEXIMAGE2DPROC glad_debug_glTexImage2D = glad_debug_impl_glTexImage2D; PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; static void GLAD_API_PTR glad_debug_impl_glTexImage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { _pre_call_gl_callback("glTexImage2DMultisample", (GLADapiproc) glad_glTexImage2DMultisample, 6, target, samples, internalformat, width, height, fixedsamplelocations); glad_glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); _post_call_gl_callback(NULL, "glTexImage2DMultisample", (GLADapiproc) glad_glTexImage2DMultisample, 6, target, samples, internalformat, width, height, fixedsamplelocations); } PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_debug_glTexImage2DMultisample = glad_debug_impl_glTexImage2DMultisample; PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexImage3D", (GLADapiproc) glad_glTexImage3D, 10, target, level, internalformat, width, height, depth, border, format, type, pixels); glad_glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); _post_call_gl_callback(NULL, "glTexImage3D", (GLADapiproc) glad_glTexImage3D, 10, target, level, internalformat, width, height, depth, border, format, type, pixels); } PFNGLTEXIMAGE3DPROC glad_debug_glTexImage3D = glad_debug_impl_glTexImage3D; PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; static void GLAD_API_PTR glad_debug_impl_glTexImage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { _pre_call_gl_callback("glTexImage3DMultisample", (GLADapiproc) glad_glTexImage3DMultisample, 7, target, samples, internalformat, width, height, depth, fixedsamplelocations); glad_glTexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); _post_call_gl_callback(NULL, "glTexImage3DMultisample", (GLADapiproc) glad_glTexImage3DMultisample, 7, target, samples, internalformat, width, height, depth, fixedsamplelocations); } PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_debug_glTexImage3DMultisample = glad_debug_impl_glTexImage3DMultisample; PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameterIiv(GLenum target, GLenum pname, const GLint * params) { _pre_call_gl_callback("glTexParameterIiv", (GLADapiproc) glad_glTexParameterIiv, 3, target, pname, params); glad_glTexParameterIiv(target, pname, params); _post_call_gl_callback(NULL, "glTexParameterIiv", (GLADapiproc) glad_glTexParameterIiv, 3, target, pname, params); } PFNGLTEXPARAMETERIIVPROC glad_debug_glTexParameterIiv = glad_debug_impl_glTexParameterIiv; PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameterIuiv(GLenum target, GLenum pname, const GLuint * params) { _pre_call_gl_callback("glTexParameterIuiv", (GLADapiproc) glad_glTexParameterIuiv, 3, target, pname, params); glad_glTexParameterIuiv(target, pname, params); _post_call_gl_callback(NULL, "glTexParameterIuiv", (GLADapiproc) glad_glTexParameterIuiv, 3, target, pname, params); } PFNGLTEXPARAMETERIUIVPROC glad_debug_glTexParameterIuiv = glad_debug_impl_glTexParameterIuiv; PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameterf(GLenum target, GLenum pname, GLfloat param) { _pre_call_gl_callback("glTexParameterf", (GLADapiproc) glad_glTexParameterf, 3, target, pname, param); glad_glTexParameterf(target, pname, param); _post_call_gl_callback(NULL, "glTexParameterf", (GLADapiproc) glad_glTexParameterf, 3, target, pname, param); } PFNGLTEXPARAMETERFPROC glad_debug_glTexParameterf = glad_debug_impl_glTexParameterf; PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) { _pre_call_gl_callback("glTexParameterfv", (GLADapiproc) glad_glTexParameterfv, 3, target, pname, params); glad_glTexParameterfv(target, pname, params); _post_call_gl_callback(NULL, "glTexParameterfv", (GLADapiproc) glad_glTexParameterfv, 3, target, pname, params); } PFNGLTEXPARAMETERFVPROC glad_debug_glTexParameterfv = glad_debug_impl_glTexParameterfv; PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameteri(GLenum target, GLenum pname, GLint param) { _pre_call_gl_callback("glTexParameteri", (GLADapiproc) glad_glTexParameteri, 3, target, pname, param); glad_glTexParameteri(target, pname, param); _post_call_gl_callback(NULL, "glTexParameteri", (GLADapiproc) glad_glTexParameteri, 3, target, pname, param); } PFNGLTEXPARAMETERIPROC glad_debug_glTexParameteri = glad_debug_impl_glTexParameteri; PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; static void GLAD_API_PTR glad_debug_impl_glTexParameteriv(GLenum target, GLenum pname, const GLint * params) { _pre_call_gl_callback("glTexParameteriv", (GLADapiproc) glad_glTexParameteriv, 3, target, pname, params); glad_glTexParameteriv(target, pname, params); _post_call_gl_callback(NULL, "glTexParameteriv", (GLADapiproc) glad_glTexParameteriv, 3, target, pname, params); } PFNGLTEXPARAMETERIVPROC glad_debug_glTexParameteriv = glad_debug_impl_glTexParameteriv; PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) { _pre_call_gl_callback("glTexStorage1D", (GLADapiproc) glad_glTexStorage1D, 4, target, levels, internalformat, width); glad_glTexStorage1D(target, levels, internalformat, width); _post_call_gl_callback(NULL, "glTexStorage1D", (GLADapiproc) glad_glTexStorage1D, 4, target, levels, internalformat, width); } PFNGLTEXSTORAGE1DPROC glad_debug_glTexStorage1D = glad_debug_impl_glTexStorage1D; PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { _pre_call_gl_callback("glTexStorage2D", (GLADapiproc) glad_glTexStorage2D, 5, target, levels, internalformat, width, height); glad_glTexStorage2D(target, levels, internalformat, width, height); _post_call_gl_callback(NULL, "glTexStorage2D", (GLADapiproc) glad_glTexStorage2D, 5, target, levels, internalformat, width, height); } PFNGLTEXSTORAGE2DPROC glad_debug_glTexStorage2D = glad_debug_impl_glTexStorage2D; PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { _pre_call_gl_callback("glTexStorage3D", (GLADapiproc) glad_glTexStorage3D, 6, target, levels, internalformat, width, height, depth); glad_glTexStorage3D(target, levels, internalformat, width, height, depth); _post_call_gl_callback(NULL, "glTexStorage3D", (GLADapiproc) glad_glTexStorage3D, 6, target, levels, internalformat, width, height, depth); } PFNGLTEXSTORAGE3DPROC glad_debug_glTexStorage3D = glad_debug_impl_glTexStorage3D; PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexSubImage1D", (GLADapiproc) glad_glTexSubImage1D, 7, target, level, xoffset, width, format, type, pixels); glad_glTexSubImage1D(target, level, xoffset, width, format, type, pixels); _post_call_gl_callback(NULL, "glTexSubImage1D", (GLADapiproc) glad_glTexSubImage1D, 7, target, level, xoffset, width, format, type, pixels); } PFNGLTEXSUBIMAGE1DPROC glad_debug_glTexSubImage1D = glad_debug_impl_glTexSubImage1D; PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexSubImage2D", (GLADapiproc) glad_glTexSubImage2D, 9, target, level, xoffset, yoffset, width, height, format, type, pixels); glad_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); _post_call_gl_callback(NULL, "glTexSubImage2D", (GLADapiproc) glad_glTexSubImage2D, 9, target, level, xoffset, yoffset, width, height, format, type, pixels); } PFNGLTEXSUBIMAGE2DPROC glad_debug_glTexSubImage2D = glad_debug_impl_glTexSubImage2D; PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; static void GLAD_API_PTR glad_debug_impl_glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels) { _pre_call_gl_callback("glTexSubImage3D", (GLADapiproc) glad_glTexSubImage3D, 11, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); glad_glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); _post_call_gl_callback(NULL, "glTexSubImage3D", (GLADapiproc) glad_glTexSubImage3D, 11, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); } PFNGLTEXSUBIMAGE3DPROC glad_debug_glTexSubImage3D = glad_debug_impl_glTexSubImage3D; PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; static void GLAD_API_PTR glad_debug_impl_glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode) { _pre_call_gl_callback("glTransformFeedbackVaryings", (GLADapiproc) glad_glTransformFeedbackVaryings, 4, program, count, varyings, bufferMode); glad_glTransformFeedbackVaryings(program, count, varyings, bufferMode); _post_call_gl_callback(NULL, "glTransformFeedbackVaryings", (GLADapiproc) glad_glTransformFeedbackVaryings, 4, program, count, varyings, bufferMode); } PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_debug_glTransformFeedbackVaryings = glad_debug_impl_glTransformFeedbackVaryings; PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1f(GLint location, GLfloat v0) { _pre_call_gl_callback("glUniform1f", (GLADapiproc) glad_glUniform1f, 2, location, v0); glad_glUniform1f(location, v0); _post_call_gl_callback(NULL, "glUniform1f", (GLADapiproc) glad_glUniform1f, 2, location, v0); } PFNGLUNIFORM1FPROC glad_debug_glUniform1f = glad_debug_impl_glUniform1f; PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1fv(GLint location, GLsizei count, const GLfloat * value) { _pre_call_gl_callback("glUniform1fv", (GLADapiproc) glad_glUniform1fv, 3, location, count, value); glad_glUniform1fv(location, count, value); _post_call_gl_callback(NULL, "glUniform1fv", (GLADapiproc) glad_glUniform1fv, 3, location, count, value); } PFNGLUNIFORM1FVPROC glad_debug_glUniform1fv = glad_debug_impl_glUniform1fv; PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1i(GLint location, GLint v0) { _pre_call_gl_callback("glUniform1i", (GLADapiproc) glad_glUniform1i, 2, location, v0); glad_glUniform1i(location, v0); _post_call_gl_callback(NULL, "glUniform1i", (GLADapiproc) glad_glUniform1i, 2, location, v0); } PFNGLUNIFORM1IPROC glad_debug_glUniform1i = glad_debug_impl_glUniform1i; PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1iv(GLint location, GLsizei count, const GLint * value) { _pre_call_gl_callback("glUniform1iv", (GLADapiproc) glad_glUniform1iv, 3, location, count, value); glad_glUniform1iv(location, count, value); _post_call_gl_callback(NULL, "glUniform1iv", (GLADapiproc) glad_glUniform1iv, 3, location, count, value); } PFNGLUNIFORM1IVPROC glad_debug_glUniform1iv = glad_debug_impl_glUniform1iv; PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1ui(GLint location, GLuint v0) { _pre_call_gl_callback("glUniform1ui", (GLADapiproc) glad_glUniform1ui, 2, location, v0); glad_glUniform1ui(location, v0); _post_call_gl_callback(NULL, "glUniform1ui", (GLADapiproc) glad_glUniform1ui, 2, location, v0); } PFNGLUNIFORM1UIPROC glad_debug_glUniform1ui = glad_debug_impl_glUniform1ui; PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform1uiv(GLint location, GLsizei count, const GLuint * value) { _pre_call_gl_callback("glUniform1uiv", (GLADapiproc) glad_glUniform1uiv, 3, location, count, value); glad_glUniform1uiv(location, count, value); _post_call_gl_callback(NULL, "glUniform1uiv", (GLADapiproc) glad_glUniform1uiv, 3, location, count, value); } PFNGLUNIFORM1UIVPROC glad_debug_glUniform1uiv = glad_debug_impl_glUniform1uiv; PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2f(GLint location, GLfloat v0, GLfloat v1) { _pre_call_gl_callback("glUniform2f", (GLADapiproc) glad_glUniform2f, 3, location, v0, v1); glad_glUniform2f(location, v0, v1); _post_call_gl_callback(NULL, "glUniform2f", (GLADapiproc) glad_glUniform2f, 3, location, v0, v1); } PFNGLUNIFORM2FPROC glad_debug_glUniform2f = glad_debug_impl_glUniform2f; PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2fv(GLint location, GLsizei count, const GLfloat * value) { _pre_call_gl_callback("glUniform2fv", (GLADapiproc) glad_glUniform2fv, 3, location, count, value); glad_glUniform2fv(location, count, value); _post_call_gl_callback(NULL, "glUniform2fv", (GLADapiproc) glad_glUniform2fv, 3, location, count, value); } PFNGLUNIFORM2FVPROC glad_debug_glUniform2fv = glad_debug_impl_glUniform2fv; PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2i(GLint location, GLint v0, GLint v1) { _pre_call_gl_callback("glUniform2i", (GLADapiproc) glad_glUniform2i, 3, location, v0, v1); glad_glUniform2i(location, v0, v1); _post_call_gl_callback(NULL, "glUniform2i", (GLADapiproc) glad_glUniform2i, 3, location, v0, v1); } PFNGLUNIFORM2IPROC glad_debug_glUniform2i = glad_debug_impl_glUniform2i; PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2iv(GLint location, GLsizei count, const GLint * value) { _pre_call_gl_callback("glUniform2iv", (GLADapiproc) glad_glUniform2iv, 3, location, count, value); glad_glUniform2iv(location, count, value); _post_call_gl_callback(NULL, "glUniform2iv", (GLADapiproc) glad_glUniform2iv, 3, location, count, value); } PFNGLUNIFORM2IVPROC glad_debug_glUniform2iv = glad_debug_impl_glUniform2iv; PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2ui(GLint location, GLuint v0, GLuint v1) { _pre_call_gl_callback("glUniform2ui", (GLADapiproc) glad_glUniform2ui, 3, location, v0, v1); glad_glUniform2ui(location, v0, v1); _post_call_gl_callback(NULL, "glUniform2ui", (GLADapiproc) glad_glUniform2ui, 3, location, v0, v1); } PFNGLUNIFORM2UIPROC glad_debug_glUniform2ui = glad_debug_impl_glUniform2ui; PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform2uiv(GLint location, GLsizei count, const GLuint * value) { _pre_call_gl_callback("glUniform2uiv", (GLADapiproc) glad_glUniform2uiv, 3, location, count, value); glad_glUniform2uiv(location, count, value); _post_call_gl_callback(NULL, "glUniform2uiv", (GLADapiproc) glad_glUniform2uiv, 3, location, count, value); } PFNGLUNIFORM2UIVPROC glad_debug_glUniform2uiv = glad_debug_impl_glUniform2uiv; PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { _pre_call_gl_callback("glUniform3f", (GLADapiproc) glad_glUniform3f, 4, location, v0, v1, v2); glad_glUniform3f(location, v0, v1, v2); _post_call_gl_callback(NULL, "glUniform3f", (GLADapiproc) glad_glUniform3f, 4, location, v0, v1, v2); } PFNGLUNIFORM3FPROC glad_debug_glUniform3f = glad_debug_impl_glUniform3f; PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3fv(GLint location, GLsizei count, const GLfloat * value) { _pre_call_gl_callback("glUniform3fv", (GLADapiproc) glad_glUniform3fv, 3, location, count, value); glad_glUniform3fv(location, count, value); _post_call_gl_callback(NULL, "glUniform3fv", (GLADapiproc) glad_glUniform3fv, 3, location, count, value); } PFNGLUNIFORM3FVPROC glad_debug_glUniform3fv = glad_debug_impl_glUniform3fv; PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) { _pre_call_gl_callback("glUniform3i", (GLADapiproc) glad_glUniform3i, 4, location, v0, v1, v2); glad_glUniform3i(location, v0, v1, v2); _post_call_gl_callback(NULL, "glUniform3i", (GLADapiproc) glad_glUniform3i, 4, location, v0, v1, v2); } PFNGLUNIFORM3IPROC glad_debug_glUniform3i = glad_debug_impl_glUniform3i; PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3iv(GLint location, GLsizei count, const GLint * value) { _pre_call_gl_callback("glUniform3iv", (GLADapiproc) glad_glUniform3iv, 3, location, count, value); glad_glUniform3iv(location, count, value); _post_call_gl_callback(NULL, "glUniform3iv", (GLADapiproc) glad_glUniform3iv, 3, location, count, value); } PFNGLUNIFORM3IVPROC glad_debug_glUniform3iv = glad_debug_impl_glUniform3iv; PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) { _pre_call_gl_callback("glUniform3ui", (GLADapiproc) glad_glUniform3ui, 4, location, v0, v1, v2); glad_glUniform3ui(location, v0, v1, v2); _post_call_gl_callback(NULL, "glUniform3ui", (GLADapiproc) glad_glUniform3ui, 4, location, v0, v1, v2); } PFNGLUNIFORM3UIPROC glad_debug_glUniform3ui = glad_debug_impl_glUniform3ui; PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform3uiv(GLint location, GLsizei count, const GLuint * value) { _pre_call_gl_callback("glUniform3uiv", (GLADapiproc) glad_glUniform3uiv, 3, location, count, value); glad_glUniform3uiv(location, count, value); _post_call_gl_callback(NULL, "glUniform3uiv", (GLADapiproc) glad_glUniform3uiv, 3, location, count, value); } PFNGLUNIFORM3UIVPROC glad_debug_glUniform3uiv = glad_debug_impl_glUniform3uiv; PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { _pre_call_gl_callback("glUniform4f", (GLADapiproc) glad_glUniform4f, 5, location, v0, v1, v2, v3); glad_glUniform4f(location, v0, v1, v2, v3); _post_call_gl_callback(NULL, "glUniform4f", (GLADapiproc) glad_glUniform4f, 5, location, v0, v1, v2, v3); } PFNGLUNIFORM4FPROC glad_debug_glUniform4f = glad_debug_impl_glUniform4f; PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4fv(GLint location, GLsizei count, const GLfloat * value) { _pre_call_gl_callback("glUniform4fv", (GLADapiproc) glad_glUniform4fv, 3, location, count, value); glad_glUniform4fv(location, count, value); _post_call_gl_callback(NULL, "glUniform4fv", (GLADapiproc) glad_glUniform4fv, 3, location, count, value); } PFNGLUNIFORM4FVPROC glad_debug_glUniform4fv = glad_debug_impl_glUniform4fv; PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { _pre_call_gl_callback("glUniform4i", (GLADapiproc) glad_glUniform4i, 5, location, v0, v1, v2, v3); glad_glUniform4i(location, v0, v1, v2, v3); _post_call_gl_callback(NULL, "glUniform4i", (GLADapiproc) glad_glUniform4i, 5, location, v0, v1, v2, v3); } PFNGLUNIFORM4IPROC glad_debug_glUniform4i = glad_debug_impl_glUniform4i; PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4iv(GLint location, GLsizei count, const GLint * value) { _pre_call_gl_callback("glUniform4iv", (GLADapiproc) glad_glUniform4iv, 3, location, count, value); glad_glUniform4iv(location, count, value); _post_call_gl_callback(NULL, "glUniform4iv", (GLADapiproc) glad_glUniform4iv, 3, location, count, value); } PFNGLUNIFORM4IVPROC glad_debug_glUniform4iv = glad_debug_impl_glUniform4iv; PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { _pre_call_gl_callback("glUniform4ui", (GLADapiproc) glad_glUniform4ui, 5, location, v0, v1, v2, v3); glad_glUniform4ui(location, v0, v1, v2, v3); _post_call_gl_callback(NULL, "glUniform4ui", (GLADapiproc) glad_glUniform4ui, 5, location, v0, v1, v2, v3); } PFNGLUNIFORM4UIPROC glad_debug_glUniform4ui = glad_debug_impl_glUniform4ui; PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniform4uiv(GLint location, GLsizei count, const GLuint * value) { _pre_call_gl_callback("glUniform4uiv", (GLADapiproc) glad_glUniform4uiv, 3, location, count, value); glad_glUniform4uiv(location, count, value); _post_call_gl_callback(NULL, "glUniform4uiv", (GLADapiproc) glad_glUniform4uiv, 3, location, count, value); } PFNGLUNIFORM4UIVPROC glad_debug_glUniform4uiv = glad_debug_impl_glUniform4uiv; PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) { _pre_call_gl_callback("glUniformBlockBinding", (GLADapiproc) glad_glUniformBlockBinding, 3, program, uniformBlockIndex, uniformBlockBinding); glad_glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); _post_call_gl_callback(NULL, "glUniformBlockBinding", (GLADapiproc) glad_glUniformBlockBinding, 3, program, uniformBlockIndex, uniformBlockBinding); } PFNGLUNIFORMBLOCKBINDINGPROC glad_debug_glUniformBlockBinding = glad_debug_impl_glUniformBlockBinding; PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix2fv", (GLADapiproc) glad_glUniformMatrix2fv, 4, location, count, transpose, value); glad_glUniformMatrix2fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix2fv", (GLADapiproc) glad_glUniformMatrix2fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX2FVPROC glad_debug_glUniformMatrix2fv = glad_debug_impl_glUniformMatrix2fv; PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix2x3fv", (GLADapiproc) glad_glUniformMatrix2x3fv, 4, location, count, transpose, value); glad_glUniformMatrix2x3fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix2x3fv", (GLADapiproc) glad_glUniformMatrix2x3fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX2X3FVPROC glad_debug_glUniformMatrix2x3fv = glad_debug_impl_glUniformMatrix2x3fv; PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix2x4fv", (GLADapiproc) glad_glUniformMatrix2x4fv, 4, location, count, transpose, value); glad_glUniformMatrix2x4fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix2x4fv", (GLADapiproc) glad_glUniformMatrix2x4fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX2X4FVPROC glad_debug_glUniformMatrix2x4fv = glad_debug_impl_glUniformMatrix2x4fv; PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix3fv", (GLADapiproc) glad_glUniformMatrix3fv, 4, location, count, transpose, value); glad_glUniformMatrix3fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix3fv", (GLADapiproc) glad_glUniformMatrix3fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX3FVPROC glad_debug_glUniformMatrix3fv = glad_debug_impl_glUniformMatrix3fv; PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix3x2fv", (GLADapiproc) glad_glUniformMatrix3x2fv, 4, location, count, transpose, value); glad_glUniformMatrix3x2fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix3x2fv", (GLADapiproc) glad_glUniformMatrix3x2fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX3X2FVPROC glad_debug_glUniformMatrix3x2fv = glad_debug_impl_glUniformMatrix3x2fv; PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix3x4fv", (GLADapiproc) glad_glUniformMatrix3x4fv, 4, location, count, transpose, value); glad_glUniformMatrix3x4fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix3x4fv", (GLADapiproc) glad_glUniformMatrix3x4fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX3X4FVPROC glad_debug_glUniformMatrix3x4fv = glad_debug_impl_glUniformMatrix3x4fv; PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix4fv", (GLADapiproc) glad_glUniformMatrix4fv, 4, location, count, transpose, value); glad_glUniformMatrix4fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix4fv", (GLADapiproc) glad_glUniformMatrix4fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX4FVPROC glad_debug_glUniformMatrix4fv = glad_debug_impl_glUniformMatrix4fv; PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix4x2fv", (GLADapiproc) glad_glUniformMatrix4x2fv, 4, location, count, transpose, value); glad_glUniformMatrix4x2fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix4x2fv", (GLADapiproc) glad_glUniformMatrix4x2fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX4X2FVPROC glad_debug_glUniformMatrix4x2fv = glad_debug_impl_glUniformMatrix4x2fv; PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; static void GLAD_API_PTR glad_debug_impl_glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) { _pre_call_gl_callback("glUniformMatrix4x3fv", (GLADapiproc) glad_glUniformMatrix4x3fv, 4, location, count, transpose, value); glad_glUniformMatrix4x3fv(location, count, transpose, value); _post_call_gl_callback(NULL, "glUniformMatrix4x3fv", (GLADapiproc) glad_glUniformMatrix4x3fv, 4, location, count, transpose, value); } PFNGLUNIFORMMATRIX4X3FVPROC glad_debug_glUniformMatrix4x3fv = glad_debug_impl_glUniformMatrix4x3fv; PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; static GLboolean GLAD_API_PTR glad_debug_impl_glUnmapBuffer(GLenum target) { GLboolean ret; _pre_call_gl_callback("glUnmapBuffer", (GLADapiproc) glad_glUnmapBuffer, 1, target); ret = glad_glUnmapBuffer(target); _post_call_gl_callback((void*) &ret, "glUnmapBuffer", (GLADapiproc) glad_glUnmapBuffer, 1, target); return ret; } PFNGLUNMAPBUFFERPROC glad_debug_glUnmapBuffer = glad_debug_impl_glUnmapBuffer; PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; static void GLAD_API_PTR glad_debug_impl_glUseProgram(GLuint program) { _pre_call_gl_callback("glUseProgram", (GLADapiproc) glad_glUseProgram, 1, program); glad_glUseProgram(program); _post_call_gl_callback(NULL, "glUseProgram", (GLADapiproc) glad_glUseProgram, 1, program); } PFNGLUSEPROGRAMPROC glad_debug_glUseProgram = glad_debug_impl_glUseProgram; PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; static void GLAD_API_PTR glad_debug_impl_glValidateProgram(GLuint program) { _pre_call_gl_callback("glValidateProgram", (GLADapiproc) glad_glValidateProgram, 1, program); glad_glValidateProgram(program); _post_call_gl_callback(NULL, "glValidateProgram", (GLADapiproc) glad_glValidateProgram, 1, program); } PFNGLVALIDATEPROGRAMPROC glad_debug_glValidateProgram = glad_debug_impl_glValidateProgram; PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1d(GLuint index, GLdouble x) { _pre_call_gl_callback("glVertexAttrib1d", (GLADapiproc) glad_glVertexAttrib1d, 2, index, x); glad_glVertexAttrib1d(index, x); _post_call_gl_callback(NULL, "glVertexAttrib1d", (GLADapiproc) glad_glVertexAttrib1d, 2, index, x); } PFNGLVERTEXATTRIB1DPROC glad_debug_glVertexAttrib1d = glad_debug_impl_glVertexAttrib1d; PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1dv(GLuint index, const GLdouble * v) { _pre_call_gl_callback("glVertexAttrib1dv", (GLADapiproc) glad_glVertexAttrib1dv, 2, index, v); glad_glVertexAttrib1dv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib1dv", (GLADapiproc) glad_glVertexAttrib1dv, 2, index, v); } PFNGLVERTEXATTRIB1DVPROC glad_debug_glVertexAttrib1dv = glad_debug_impl_glVertexAttrib1dv; PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1f(GLuint index, GLfloat x) { _pre_call_gl_callback("glVertexAttrib1f", (GLADapiproc) glad_glVertexAttrib1f, 2, index, x); glad_glVertexAttrib1f(index, x); _post_call_gl_callback(NULL, "glVertexAttrib1f", (GLADapiproc) glad_glVertexAttrib1f, 2, index, x); } PFNGLVERTEXATTRIB1FPROC glad_debug_glVertexAttrib1f = glad_debug_impl_glVertexAttrib1f; PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1fv(GLuint index, const GLfloat * v) { _pre_call_gl_callback("glVertexAttrib1fv", (GLADapiproc) glad_glVertexAttrib1fv, 2, index, v); glad_glVertexAttrib1fv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib1fv", (GLADapiproc) glad_glVertexAttrib1fv, 2, index, v); } PFNGLVERTEXATTRIB1FVPROC glad_debug_glVertexAttrib1fv = glad_debug_impl_glVertexAttrib1fv; PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1s(GLuint index, GLshort x) { _pre_call_gl_callback("glVertexAttrib1s", (GLADapiproc) glad_glVertexAttrib1s, 2, index, x); glad_glVertexAttrib1s(index, x); _post_call_gl_callback(NULL, "glVertexAttrib1s", (GLADapiproc) glad_glVertexAttrib1s, 2, index, x); } PFNGLVERTEXATTRIB1SPROC glad_debug_glVertexAttrib1s = glad_debug_impl_glVertexAttrib1s; PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib1sv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttrib1sv", (GLADapiproc) glad_glVertexAttrib1sv, 2, index, v); glad_glVertexAttrib1sv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib1sv", (GLADapiproc) glad_glVertexAttrib1sv, 2, index, v); } PFNGLVERTEXATTRIB1SVPROC glad_debug_glVertexAttrib1sv = glad_debug_impl_glVertexAttrib1sv; PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) { _pre_call_gl_callback("glVertexAttrib2d", (GLADapiproc) glad_glVertexAttrib2d, 3, index, x, y); glad_glVertexAttrib2d(index, x, y); _post_call_gl_callback(NULL, "glVertexAttrib2d", (GLADapiproc) glad_glVertexAttrib2d, 3, index, x, y); } PFNGLVERTEXATTRIB2DPROC glad_debug_glVertexAttrib2d = glad_debug_impl_glVertexAttrib2d; PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2dv(GLuint index, const GLdouble * v) { _pre_call_gl_callback("glVertexAttrib2dv", (GLADapiproc) glad_glVertexAttrib2dv, 2, index, v); glad_glVertexAttrib2dv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib2dv", (GLADapiproc) glad_glVertexAttrib2dv, 2, index, v); } PFNGLVERTEXATTRIB2DVPROC glad_debug_glVertexAttrib2dv = glad_debug_impl_glVertexAttrib2dv; PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) { _pre_call_gl_callback("glVertexAttrib2f", (GLADapiproc) glad_glVertexAttrib2f, 3, index, x, y); glad_glVertexAttrib2f(index, x, y); _post_call_gl_callback(NULL, "glVertexAttrib2f", (GLADapiproc) glad_glVertexAttrib2f, 3, index, x, y); } PFNGLVERTEXATTRIB2FPROC glad_debug_glVertexAttrib2f = glad_debug_impl_glVertexAttrib2f; PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2fv(GLuint index, const GLfloat * v) { _pre_call_gl_callback("glVertexAttrib2fv", (GLADapiproc) glad_glVertexAttrib2fv, 2, index, v); glad_glVertexAttrib2fv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib2fv", (GLADapiproc) glad_glVertexAttrib2fv, 2, index, v); } PFNGLVERTEXATTRIB2FVPROC glad_debug_glVertexAttrib2fv = glad_debug_impl_glVertexAttrib2fv; PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2s(GLuint index, GLshort x, GLshort y) { _pre_call_gl_callback("glVertexAttrib2s", (GLADapiproc) glad_glVertexAttrib2s, 3, index, x, y); glad_glVertexAttrib2s(index, x, y); _post_call_gl_callback(NULL, "glVertexAttrib2s", (GLADapiproc) glad_glVertexAttrib2s, 3, index, x, y); } PFNGLVERTEXATTRIB2SPROC glad_debug_glVertexAttrib2s = glad_debug_impl_glVertexAttrib2s; PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib2sv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttrib2sv", (GLADapiproc) glad_glVertexAttrib2sv, 2, index, v); glad_glVertexAttrib2sv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib2sv", (GLADapiproc) glad_glVertexAttrib2sv, 2, index, v); } PFNGLVERTEXATTRIB2SVPROC glad_debug_glVertexAttrib2sv = glad_debug_impl_glVertexAttrib2sv; PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) { _pre_call_gl_callback("glVertexAttrib3d", (GLADapiproc) glad_glVertexAttrib3d, 4, index, x, y, z); glad_glVertexAttrib3d(index, x, y, z); _post_call_gl_callback(NULL, "glVertexAttrib3d", (GLADapiproc) glad_glVertexAttrib3d, 4, index, x, y, z); } PFNGLVERTEXATTRIB3DPROC glad_debug_glVertexAttrib3d = glad_debug_impl_glVertexAttrib3d; PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3dv(GLuint index, const GLdouble * v) { _pre_call_gl_callback("glVertexAttrib3dv", (GLADapiproc) glad_glVertexAttrib3dv, 2, index, v); glad_glVertexAttrib3dv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib3dv", (GLADapiproc) glad_glVertexAttrib3dv, 2, index, v); } PFNGLVERTEXATTRIB3DVPROC glad_debug_glVertexAttrib3dv = glad_debug_impl_glVertexAttrib3dv; PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) { _pre_call_gl_callback("glVertexAttrib3f", (GLADapiproc) glad_glVertexAttrib3f, 4, index, x, y, z); glad_glVertexAttrib3f(index, x, y, z); _post_call_gl_callback(NULL, "glVertexAttrib3f", (GLADapiproc) glad_glVertexAttrib3f, 4, index, x, y, z); } PFNGLVERTEXATTRIB3FPROC glad_debug_glVertexAttrib3f = glad_debug_impl_glVertexAttrib3f; PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3fv(GLuint index, const GLfloat * v) { _pre_call_gl_callback("glVertexAttrib3fv", (GLADapiproc) glad_glVertexAttrib3fv, 2, index, v); glad_glVertexAttrib3fv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib3fv", (GLADapiproc) glad_glVertexAttrib3fv, 2, index, v); } PFNGLVERTEXATTRIB3FVPROC glad_debug_glVertexAttrib3fv = glad_debug_impl_glVertexAttrib3fv; PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) { _pre_call_gl_callback("glVertexAttrib3s", (GLADapiproc) glad_glVertexAttrib3s, 4, index, x, y, z); glad_glVertexAttrib3s(index, x, y, z); _post_call_gl_callback(NULL, "glVertexAttrib3s", (GLADapiproc) glad_glVertexAttrib3s, 4, index, x, y, z); } PFNGLVERTEXATTRIB3SPROC glad_debug_glVertexAttrib3s = glad_debug_impl_glVertexAttrib3s; PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib3sv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttrib3sv", (GLADapiproc) glad_glVertexAttrib3sv, 2, index, v); glad_glVertexAttrib3sv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib3sv", (GLADapiproc) glad_glVertexAttrib3sv, 2, index, v); } PFNGLVERTEXATTRIB3SVPROC glad_debug_glVertexAttrib3sv = glad_debug_impl_glVertexAttrib3sv; PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nbv(GLuint index, const GLbyte * v) { _pre_call_gl_callback("glVertexAttrib4Nbv", (GLADapiproc) glad_glVertexAttrib4Nbv, 2, index, v); glad_glVertexAttrib4Nbv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Nbv", (GLADapiproc) glad_glVertexAttrib4Nbv, 2, index, v); } PFNGLVERTEXATTRIB4NBVPROC glad_debug_glVertexAttrib4Nbv = glad_debug_impl_glVertexAttrib4Nbv; PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Niv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttrib4Niv", (GLADapiproc) glad_glVertexAttrib4Niv, 2, index, v); glad_glVertexAttrib4Niv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Niv", (GLADapiproc) glad_glVertexAttrib4Niv, 2, index, v); } PFNGLVERTEXATTRIB4NIVPROC glad_debug_glVertexAttrib4Niv = glad_debug_impl_glVertexAttrib4Niv; PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nsv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttrib4Nsv", (GLADapiproc) glad_glVertexAttrib4Nsv, 2, index, v); glad_glVertexAttrib4Nsv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Nsv", (GLADapiproc) glad_glVertexAttrib4Nsv, 2, index, v); } PFNGLVERTEXATTRIB4NSVPROC glad_debug_glVertexAttrib4Nsv = glad_debug_impl_glVertexAttrib4Nsv; PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) { _pre_call_gl_callback("glVertexAttrib4Nub", (GLADapiproc) glad_glVertexAttrib4Nub, 5, index, x, y, z, w); glad_glVertexAttrib4Nub(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttrib4Nub", (GLADapiproc) glad_glVertexAttrib4Nub, 5, index, x, y, z, w); } PFNGLVERTEXATTRIB4NUBPROC glad_debug_glVertexAttrib4Nub = glad_debug_impl_glVertexAttrib4Nub; PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nubv(GLuint index, const GLubyte * v) { _pre_call_gl_callback("glVertexAttrib4Nubv", (GLADapiproc) glad_glVertexAttrib4Nubv, 2, index, v); glad_glVertexAttrib4Nubv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Nubv", (GLADapiproc) glad_glVertexAttrib4Nubv, 2, index, v); } PFNGLVERTEXATTRIB4NUBVPROC glad_debug_glVertexAttrib4Nubv = glad_debug_impl_glVertexAttrib4Nubv; PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nuiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttrib4Nuiv", (GLADapiproc) glad_glVertexAttrib4Nuiv, 2, index, v); glad_glVertexAttrib4Nuiv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Nuiv", (GLADapiproc) glad_glVertexAttrib4Nuiv, 2, index, v); } PFNGLVERTEXATTRIB4NUIVPROC glad_debug_glVertexAttrib4Nuiv = glad_debug_impl_glVertexAttrib4Nuiv; PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4Nusv(GLuint index, const GLushort * v) { _pre_call_gl_callback("glVertexAttrib4Nusv", (GLADapiproc) glad_glVertexAttrib4Nusv, 2, index, v); glad_glVertexAttrib4Nusv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4Nusv", (GLADapiproc) glad_glVertexAttrib4Nusv, 2, index, v); } PFNGLVERTEXATTRIB4NUSVPROC glad_debug_glVertexAttrib4Nusv = glad_debug_impl_glVertexAttrib4Nusv; PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4bv(GLuint index, const GLbyte * v) { _pre_call_gl_callback("glVertexAttrib4bv", (GLADapiproc) glad_glVertexAttrib4bv, 2, index, v); glad_glVertexAttrib4bv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4bv", (GLADapiproc) glad_glVertexAttrib4bv, 2, index, v); } PFNGLVERTEXATTRIB4BVPROC glad_debug_glVertexAttrib4bv = glad_debug_impl_glVertexAttrib4bv; PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { _pre_call_gl_callback("glVertexAttrib4d", (GLADapiproc) glad_glVertexAttrib4d, 5, index, x, y, z, w); glad_glVertexAttrib4d(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttrib4d", (GLADapiproc) glad_glVertexAttrib4d, 5, index, x, y, z, w); } PFNGLVERTEXATTRIB4DPROC glad_debug_glVertexAttrib4d = glad_debug_impl_glVertexAttrib4d; PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4dv(GLuint index, const GLdouble * v) { _pre_call_gl_callback("glVertexAttrib4dv", (GLADapiproc) glad_glVertexAttrib4dv, 2, index, v); glad_glVertexAttrib4dv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4dv", (GLADapiproc) glad_glVertexAttrib4dv, 2, index, v); } PFNGLVERTEXATTRIB4DVPROC glad_debug_glVertexAttrib4dv = glad_debug_impl_glVertexAttrib4dv; PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { _pre_call_gl_callback("glVertexAttrib4f", (GLADapiproc) glad_glVertexAttrib4f, 5, index, x, y, z, w); glad_glVertexAttrib4f(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttrib4f", (GLADapiproc) glad_glVertexAttrib4f, 5, index, x, y, z, w); } PFNGLVERTEXATTRIB4FPROC glad_debug_glVertexAttrib4f = glad_debug_impl_glVertexAttrib4f; PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4fv(GLuint index, const GLfloat * v) { _pre_call_gl_callback("glVertexAttrib4fv", (GLADapiproc) glad_glVertexAttrib4fv, 2, index, v); glad_glVertexAttrib4fv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4fv", (GLADapiproc) glad_glVertexAttrib4fv, 2, index, v); } PFNGLVERTEXATTRIB4FVPROC glad_debug_glVertexAttrib4fv = glad_debug_impl_glVertexAttrib4fv; PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4iv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttrib4iv", (GLADapiproc) glad_glVertexAttrib4iv, 2, index, v); glad_glVertexAttrib4iv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4iv", (GLADapiproc) glad_glVertexAttrib4iv, 2, index, v); } PFNGLVERTEXATTRIB4IVPROC glad_debug_glVertexAttrib4iv = glad_debug_impl_glVertexAttrib4iv; PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) { _pre_call_gl_callback("glVertexAttrib4s", (GLADapiproc) glad_glVertexAttrib4s, 5, index, x, y, z, w); glad_glVertexAttrib4s(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttrib4s", (GLADapiproc) glad_glVertexAttrib4s, 5, index, x, y, z, w); } PFNGLVERTEXATTRIB4SPROC glad_debug_glVertexAttrib4s = glad_debug_impl_glVertexAttrib4s; PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4sv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttrib4sv", (GLADapiproc) glad_glVertexAttrib4sv, 2, index, v); glad_glVertexAttrib4sv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4sv", (GLADapiproc) glad_glVertexAttrib4sv, 2, index, v); } PFNGLVERTEXATTRIB4SVPROC glad_debug_glVertexAttrib4sv = glad_debug_impl_glVertexAttrib4sv; PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4ubv(GLuint index, const GLubyte * v) { _pre_call_gl_callback("glVertexAttrib4ubv", (GLADapiproc) glad_glVertexAttrib4ubv, 2, index, v); glad_glVertexAttrib4ubv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4ubv", (GLADapiproc) glad_glVertexAttrib4ubv, 2, index, v); } PFNGLVERTEXATTRIB4UBVPROC glad_debug_glVertexAttrib4ubv = glad_debug_impl_glVertexAttrib4ubv; PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4uiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttrib4uiv", (GLADapiproc) glad_glVertexAttrib4uiv, 2, index, v); glad_glVertexAttrib4uiv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4uiv", (GLADapiproc) glad_glVertexAttrib4uiv, 2, index, v); } PFNGLVERTEXATTRIB4UIVPROC glad_debug_glVertexAttrib4uiv = glad_debug_impl_glVertexAttrib4uiv; PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttrib4usv(GLuint index, const GLushort * v) { _pre_call_gl_callback("glVertexAttrib4usv", (GLADapiproc) glad_glVertexAttrib4usv, 2, index, v); glad_glVertexAttrib4usv(index, v); _post_call_gl_callback(NULL, "glVertexAttrib4usv", (GLADapiproc) glad_glVertexAttrib4usv, 2, index, v); } PFNGLVERTEXATTRIB4USVPROC glad_debug_glVertexAttrib4usv = glad_debug_impl_glVertexAttrib4usv; PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribDivisor(GLuint index, GLuint divisor) { _pre_call_gl_callback("glVertexAttribDivisor", (GLADapiproc) glad_glVertexAttribDivisor, 2, index, divisor); glad_glVertexAttribDivisor(index, divisor); _post_call_gl_callback(NULL, "glVertexAttribDivisor", (GLADapiproc) glad_glVertexAttribDivisor, 2, index, divisor); } PFNGLVERTEXATTRIBDIVISORPROC glad_debug_glVertexAttribDivisor = glad_debug_impl_glVertexAttribDivisor; PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI1i(GLuint index, GLint x) { _pre_call_gl_callback("glVertexAttribI1i", (GLADapiproc) glad_glVertexAttribI1i, 2, index, x); glad_glVertexAttribI1i(index, x); _post_call_gl_callback(NULL, "glVertexAttribI1i", (GLADapiproc) glad_glVertexAttribI1i, 2, index, x); } PFNGLVERTEXATTRIBI1IPROC glad_debug_glVertexAttribI1i = glad_debug_impl_glVertexAttribI1i; PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI1iv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttribI1iv", (GLADapiproc) glad_glVertexAttribI1iv, 2, index, v); glad_glVertexAttribI1iv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI1iv", (GLADapiproc) glad_glVertexAttribI1iv, 2, index, v); } PFNGLVERTEXATTRIBI1IVPROC glad_debug_glVertexAttribI1iv = glad_debug_impl_glVertexAttribI1iv; PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI1ui(GLuint index, GLuint x) { _pre_call_gl_callback("glVertexAttribI1ui", (GLADapiproc) glad_glVertexAttribI1ui, 2, index, x); glad_glVertexAttribI1ui(index, x); _post_call_gl_callback(NULL, "glVertexAttribI1ui", (GLADapiproc) glad_glVertexAttribI1ui, 2, index, x); } PFNGLVERTEXATTRIBI1UIPROC glad_debug_glVertexAttribI1ui = glad_debug_impl_glVertexAttribI1ui; PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI1uiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttribI1uiv", (GLADapiproc) glad_glVertexAttribI1uiv, 2, index, v); glad_glVertexAttribI1uiv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI1uiv", (GLADapiproc) glad_glVertexAttribI1uiv, 2, index, v); } PFNGLVERTEXATTRIBI1UIVPROC glad_debug_glVertexAttribI1uiv = glad_debug_impl_glVertexAttribI1uiv; PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI2i(GLuint index, GLint x, GLint y) { _pre_call_gl_callback("glVertexAttribI2i", (GLADapiproc) glad_glVertexAttribI2i, 3, index, x, y); glad_glVertexAttribI2i(index, x, y); _post_call_gl_callback(NULL, "glVertexAttribI2i", (GLADapiproc) glad_glVertexAttribI2i, 3, index, x, y); } PFNGLVERTEXATTRIBI2IPROC glad_debug_glVertexAttribI2i = glad_debug_impl_glVertexAttribI2i; PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI2iv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttribI2iv", (GLADapiproc) glad_glVertexAttribI2iv, 2, index, v); glad_glVertexAttribI2iv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI2iv", (GLADapiproc) glad_glVertexAttribI2iv, 2, index, v); } PFNGLVERTEXATTRIBI2IVPROC glad_debug_glVertexAttribI2iv = glad_debug_impl_glVertexAttribI2iv; PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI2ui(GLuint index, GLuint x, GLuint y) { _pre_call_gl_callback("glVertexAttribI2ui", (GLADapiproc) glad_glVertexAttribI2ui, 3, index, x, y); glad_glVertexAttribI2ui(index, x, y); _post_call_gl_callback(NULL, "glVertexAttribI2ui", (GLADapiproc) glad_glVertexAttribI2ui, 3, index, x, y); } PFNGLVERTEXATTRIBI2UIPROC glad_debug_glVertexAttribI2ui = glad_debug_impl_glVertexAttribI2ui; PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI2uiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttribI2uiv", (GLADapiproc) glad_glVertexAttribI2uiv, 2, index, v); glad_glVertexAttribI2uiv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI2uiv", (GLADapiproc) glad_glVertexAttribI2uiv, 2, index, v); } PFNGLVERTEXATTRIBI2UIVPROC glad_debug_glVertexAttribI2uiv = glad_debug_impl_glVertexAttribI2uiv; PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) { _pre_call_gl_callback("glVertexAttribI3i", (GLADapiproc) glad_glVertexAttribI3i, 4, index, x, y, z); glad_glVertexAttribI3i(index, x, y, z); _post_call_gl_callback(NULL, "glVertexAttribI3i", (GLADapiproc) glad_glVertexAttribI3i, 4, index, x, y, z); } PFNGLVERTEXATTRIBI3IPROC glad_debug_glVertexAttribI3i = glad_debug_impl_glVertexAttribI3i; PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI3iv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttribI3iv", (GLADapiproc) glad_glVertexAttribI3iv, 2, index, v); glad_glVertexAttribI3iv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI3iv", (GLADapiproc) glad_glVertexAttribI3iv, 2, index, v); } PFNGLVERTEXATTRIBI3IVPROC glad_debug_glVertexAttribI3iv = glad_debug_impl_glVertexAttribI3iv; PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) { _pre_call_gl_callback("glVertexAttribI3ui", (GLADapiproc) glad_glVertexAttribI3ui, 4, index, x, y, z); glad_glVertexAttribI3ui(index, x, y, z); _post_call_gl_callback(NULL, "glVertexAttribI3ui", (GLADapiproc) glad_glVertexAttribI3ui, 4, index, x, y, z); } PFNGLVERTEXATTRIBI3UIPROC glad_debug_glVertexAttribI3ui = glad_debug_impl_glVertexAttribI3ui; PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI3uiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttribI3uiv", (GLADapiproc) glad_glVertexAttribI3uiv, 2, index, v); glad_glVertexAttribI3uiv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI3uiv", (GLADapiproc) glad_glVertexAttribI3uiv, 2, index, v); } PFNGLVERTEXATTRIBI3UIVPROC glad_debug_glVertexAttribI3uiv = glad_debug_impl_glVertexAttribI3uiv; PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4bv(GLuint index, const GLbyte * v) { _pre_call_gl_callback("glVertexAttribI4bv", (GLADapiproc) glad_glVertexAttribI4bv, 2, index, v); glad_glVertexAttribI4bv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4bv", (GLADapiproc) glad_glVertexAttribI4bv, 2, index, v); } PFNGLVERTEXATTRIBI4BVPROC glad_debug_glVertexAttribI4bv = glad_debug_impl_glVertexAttribI4bv; PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) { _pre_call_gl_callback("glVertexAttribI4i", (GLADapiproc) glad_glVertexAttribI4i, 5, index, x, y, z, w); glad_glVertexAttribI4i(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttribI4i", (GLADapiproc) glad_glVertexAttribI4i, 5, index, x, y, z, w); } PFNGLVERTEXATTRIBI4IPROC glad_debug_glVertexAttribI4i = glad_debug_impl_glVertexAttribI4i; PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4iv(GLuint index, const GLint * v) { _pre_call_gl_callback("glVertexAttribI4iv", (GLADapiproc) glad_glVertexAttribI4iv, 2, index, v); glad_glVertexAttribI4iv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4iv", (GLADapiproc) glad_glVertexAttribI4iv, 2, index, v); } PFNGLVERTEXATTRIBI4IVPROC glad_debug_glVertexAttribI4iv = glad_debug_impl_glVertexAttribI4iv; PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4sv(GLuint index, const GLshort * v) { _pre_call_gl_callback("glVertexAttribI4sv", (GLADapiproc) glad_glVertexAttribI4sv, 2, index, v); glad_glVertexAttribI4sv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4sv", (GLADapiproc) glad_glVertexAttribI4sv, 2, index, v); } PFNGLVERTEXATTRIBI4SVPROC glad_debug_glVertexAttribI4sv = glad_debug_impl_glVertexAttribI4sv; PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4ubv(GLuint index, const GLubyte * v) { _pre_call_gl_callback("glVertexAttribI4ubv", (GLADapiproc) glad_glVertexAttribI4ubv, 2, index, v); glad_glVertexAttribI4ubv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4ubv", (GLADapiproc) glad_glVertexAttribI4ubv, 2, index, v); } PFNGLVERTEXATTRIBI4UBVPROC glad_debug_glVertexAttribI4ubv = glad_debug_impl_glVertexAttribI4ubv; PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { _pre_call_gl_callback("glVertexAttribI4ui", (GLADapiproc) glad_glVertexAttribI4ui, 5, index, x, y, z, w); glad_glVertexAttribI4ui(index, x, y, z, w); _post_call_gl_callback(NULL, "glVertexAttribI4ui", (GLADapiproc) glad_glVertexAttribI4ui, 5, index, x, y, z, w); } PFNGLVERTEXATTRIBI4UIPROC glad_debug_glVertexAttribI4ui = glad_debug_impl_glVertexAttribI4ui; PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4uiv(GLuint index, const GLuint * v) { _pre_call_gl_callback("glVertexAttribI4uiv", (GLADapiproc) glad_glVertexAttribI4uiv, 2, index, v); glad_glVertexAttribI4uiv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4uiv", (GLADapiproc) glad_glVertexAttribI4uiv, 2, index, v); } PFNGLVERTEXATTRIBI4UIVPROC glad_debug_glVertexAttribI4uiv = glad_debug_impl_glVertexAttribI4uiv; PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribI4usv(GLuint index, const GLushort * v) { _pre_call_gl_callback("glVertexAttribI4usv", (GLADapiproc) glad_glVertexAttribI4usv, 2, index, v); glad_glVertexAttribI4usv(index, v); _post_call_gl_callback(NULL, "glVertexAttribI4usv", (GLADapiproc) glad_glVertexAttribI4usv, 2, index, v); } PFNGLVERTEXATTRIBI4USVPROC glad_debug_glVertexAttribI4usv = glad_debug_impl_glVertexAttribI4usv; PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer) { _pre_call_gl_callback("glVertexAttribIPointer", (GLADapiproc) glad_glVertexAttribIPointer, 5, index, size, type, stride, pointer); glad_glVertexAttribIPointer(index, size, type, stride, pointer); _post_call_gl_callback(NULL, "glVertexAttribIPointer", (GLADapiproc) glad_glVertexAttribIPointer, 5, index, size, type, stride, pointer); } PFNGLVERTEXATTRIBIPOINTERPROC glad_debug_glVertexAttribIPointer = glad_debug_impl_glVertexAttribIPointer; PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP1ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { _pre_call_gl_callback("glVertexAttribP1ui", (GLADapiproc) glad_glVertexAttribP1ui, 4, index, type, normalized, value); glad_glVertexAttribP1ui(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP1ui", (GLADapiproc) glad_glVertexAttribP1ui, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP1UIPROC glad_debug_glVertexAttribP1ui = glad_debug_impl_glVertexAttribP1ui; PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP1uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) { _pre_call_gl_callback("glVertexAttribP1uiv", (GLADapiproc) glad_glVertexAttribP1uiv, 4, index, type, normalized, value); glad_glVertexAttribP1uiv(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP1uiv", (GLADapiproc) glad_glVertexAttribP1uiv, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP1UIVPROC glad_debug_glVertexAttribP1uiv = glad_debug_impl_glVertexAttribP1uiv; PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP2ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { _pre_call_gl_callback("glVertexAttribP2ui", (GLADapiproc) glad_glVertexAttribP2ui, 4, index, type, normalized, value); glad_glVertexAttribP2ui(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP2ui", (GLADapiproc) glad_glVertexAttribP2ui, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP2UIPROC glad_debug_glVertexAttribP2ui = glad_debug_impl_glVertexAttribP2ui; PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP2uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) { _pre_call_gl_callback("glVertexAttribP2uiv", (GLADapiproc) glad_glVertexAttribP2uiv, 4, index, type, normalized, value); glad_glVertexAttribP2uiv(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP2uiv", (GLADapiproc) glad_glVertexAttribP2uiv, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP2UIVPROC glad_debug_glVertexAttribP2uiv = glad_debug_impl_glVertexAttribP2uiv; PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP3ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { _pre_call_gl_callback("glVertexAttribP3ui", (GLADapiproc) glad_glVertexAttribP3ui, 4, index, type, normalized, value); glad_glVertexAttribP3ui(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP3ui", (GLADapiproc) glad_glVertexAttribP3ui, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP3UIPROC glad_debug_glVertexAttribP3ui = glad_debug_impl_glVertexAttribP3ui; PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP3uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) { _pre_call_gl_callback("glVertexAttribP3uiv", (GLADapiproc) glad_glVertexAttribP3uiv, 4, index, type, normalized, value); glad_glVertexAttribP3uiv(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP3uiv", (GLADapiproc) glad_glVertexAttribP3uiv, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP3UIVPROC glad_debug_glVertexAttribP3uiv = glad_debug_impl_glVertexAttribP3uiv; PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP4ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { _pre_call_gl_callback("glVertexAttribP4ui", (GLADapiproc) glad_glVertexAttribP4ui, 4, index, type, normalized, value); glad_glVertexAttribP4ui(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP4ui", (GLADapiproc) glad_glVertexAttribP4ui, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP4UIPROC glad_debug_glVertexAttribP4ui = glad_debug_impl_glVertexAttribP4ui; PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribP4uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) { _pre_call_gl_callback("glVertexAttribP4uiv", (GLADapiproc) glad_glVertexAttribP4uiv, 4, index, type, normalized, value); glad_glVertexAttribP4uiv(index, type, normalized, value); _post_call_gl_callback(NULL, "glVertexAttribP4uiv", (GLADapiproc) glad_glVertexAttribP4uiv, 4, index, type, normalized, value); } PFNGLVERTEXATTRIBP4UIVPROC glad_debug_glVertexAttribP4uiv = glad_debug_impl_glVertexAttribP4uiv; PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; static void GLAD_API_PTR glad_debug_impl_glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer) { _pre_call_gl_callback("glVertexAttribPointer", (GLADapiproc) glad_glVertexAttribPointer, 6, index, size, type, normalized, stride, pointer); glad_glVertexAttribPointer(index, size, type, normalized, stride, pointer); _post_call_gl_callback(NULL, "glVertexAttribPointer", (GLADapiproc) glad_glVertexAttribPointer, 6, index, size, type, normalized, stride, pointer); } PFNGLVERTEXATTRIBPOINTERPROC glad_debug_glVertexAttribPointer = glad_debug_impl_glVertexAttribPointer; PFNGLVIEWPORTPROC glad_glViewport = NULL; static void GLAD_API_PTR glad_debug_impl_glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { _pre_call_gl_callback("glViewport", (GLADapiproc) glad_glViewport, 4, x, y, width, height); glad_glViewport(x, y, width, height); _post_call_gl_callback(NULL, "glViewport", (GLADapiproc) glad_glViewport, 4, x, y, width, height); } PFNGLVIEWPORTPROC glad_debug_glViewport = glad_debug_impl_glViewport; PFNGLWAITSYNCPROC glad_glWaitSync = NULL; static void GLAD_API_PTR glad_debug_impl_glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) { _pre_call_gl_callback("glWaitSync", (GLADapiproc) glad_glWaitSync, 3, sync, flags, timeout); glad_glWaitSync(sync, flags, timeout); _post_call_gl_callback(NULL, "glWaitSync", (GLADapiproc) glad_glWaitSync, 3, sync, flags, timeout); } PFNGLWAITSYNCPROC glad_debug_glWaitSync = glad_debug_impl_glWaitSync; static void glad_gl_load_GL_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_0) return; glad_glBlendFunc = (PFNGLBLENDFUNCPROC) load(userptr, "glBlendFunc"); glad_glClear = (PFNGLCLEARPROC) load(userptr, "glClear"); glad_glClearColor = (PFNGLCLEARCOLORPROC) load(userptr, "glClearColor"); glad_glClearDepth = (PFNGLCLEARDEPTHPROC) load(userptr, "glClearDepth"); glad_glClearStencil = (PFNGLCLEARSTENCILPROC) load(userptr, "glClearStencil"); glad_glColorMask = (PFNGLCOLORMASKPROC) load(userptr, "glColorMask"); glad_glCullFace = (PFNGLCULLFACEPROC) load(userptr, "glCullFace"); glad_glDepthFunc = (PFNGLDEPTHFUNCPROC) load(userptr, "glDepthFunc"); glad_glDepthMask = (PFNGLDEPTHMASKPROC) load(userptr, "glDepthMask"); glad_glDepthRange = (PFNGLDEPTHRANGEPROC) load(userptr, "glDepthRange"); glad_glDisable = (PFNGLDISABLEPROC) load(userptr, "glDisable"); glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC) load(userptr, "glDrawBuffer"); glad_glEnable = (PFNGLENABLEPROC) load(userptr, "glEnable"); glad_glFinish = (PFNGLFINISHPROC) load(userptr, "glFinish"); glad_glFlush = (PFNGLFLUSHPROC) load(userptr, "glFlush"); glad_glFrontFace = (PFNGLFRONTFACEPROC) load(userptr, "glFrontFace"); glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC) load(userptr, "glGetBooleanv"); glad_glGetDoublev = (PFNGLGETDOUBLEVPROC) load(userptr, "glGetDoublev"); glad_glGetError = (PFNGLGETERRORPROC) load(userptr, "glGetError"); glad_glGetFloatv = (PFNGLGETFLOATVPROC) load(userptr, "glGetFloatv"); glad_glGetIntegerv = (PFNGLGETINTEGERVPROC) load(userptr, "glGetIntegerv"); glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC) load(userptr, "glGetTexImage"); glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC) load(userptr, "glGetTexLevelParameterfv"); glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC) load(userptr, "glGetTexLevelParameteriv"); glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC) load(userptr, "glGetTexParameterfv"); glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC) load(userptr, "glGetTexParameteriv"); glad_glHint = (PFNGLHINTPROC) load(userptr, "glHint"); glad_glIsEnabled = (PFNGLISENABLEDPROC) load(userptr, "glIsEnabled"); glad_glLineWidth = (PFNGLLINEWIDTHPROC) load(userptr, "glLineWidth"); glad_glLogicOp = (PFNGLLOGICOPPROC) load(userptr, "glLogicOp"); glad_glPixelStoref = (PFNGLPIXELSTOREFPROC) load(userptr, "glPixelStoref"); glad_glPixelStorei = (PFNGLPIXELSTOREIPROC) load(userptr, "glPixelStorei"); glad_glPointSize = (PFNGLPOINTSIZEPROC) load(userptr, "glPointSize"); glad_glPolygonMode = (PFNGLPOLYGONMODEPROC) load(userptr, "glPolygonMode"); glad_glReadBuffer = (PFNGLREADBUFFERPROC) load(userptr, "glReadBuffer"); glad_glReadPixels = (PFNGLREADPIXELSPROC) load(userptr, "glReadPixels"); glad_glScissor = (PFNGLSCISSORPROC) load(userptr, "glScissor"); glad_glStencilFunc = (PFNGLSTENCILFUNCPROC) load(userptr, "glStencilFunc"); glad_glStencilMask = (PFNGLSTENCILMASKPROC) load(userptr, "glStencilMask"); glad_glStencilOp = (PFNGLSTENCILOPPROC) load(userptr, "glStencilOp"); glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC) load(userptr, "glTexImage1D"); glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC) load(userptr, "glTexImage2D"); glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC) load(userptr, "glTexParameterf"); glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC) load(userptr, "glTexParameterfv"); glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC) load(userptr, "glTexParameteri"); glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC) load(userptr, "glTexParameteriv"); glad_glViewport = (PFNGLVIEWPORTPROC) load(userptr, "glViewport"); } static void glad_gl_load_GL_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_1) return; glad_glBindTexture = (PFNGLBINDTEXTUREPROC) load(userptr, "glBindTexture"); glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC) load(userptr, "glCopyTexImage1D"); glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC) load(userptr, "glCopyTexImage2D"); glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC) load(userptr, "glCopyTexSubImage1D"); glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC) load(userptr, "glCopyTexSubImage2D"); glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC) load(userptr, "glDeleteTextures"); glad_glDrawArrays = (PFNGLDRAWARRAYSPROC) load(userptr, "glDrawArrays"); glad_glDrawElements = (PFNGLDRAWELEMENTSPROC) load(userptr, "glDrawElements"); glad_glGenTextures = (PFNGLGENTEXTURESPROC) load(userptr, "glGenTextures"); glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); glad_glIsTexture = (PFNGLISTEXTUREPROC) load(userptr, "glIsTexture"); glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC) load(userptr, "glPolygonOffset"); glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC) load(userptr, "glTexSubImage1D"); glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC) load(userptr, "glTexSubImage2D"); } static void glad_gl_load_GL_VERSION_1_2( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_2) return; glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC) load(userptr, "glCopyTexSubImage3D"); glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) load(userptr, "glDrawRangeElements"); glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC) load(userptr, "glTexImage3D"); glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC) load(userptr, "glTexSubImage3D"); } static void glad_gl_load_GL_VERSION_1_3( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_3) return; glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC) load(userptr, "glActiveTexture"); glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC) load(userptr, "glCompressedTexImage1D"); glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) load(userptr, "glCompressedTexImage2D"); glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC) load(userptr, "glCompressedTexImage3D"); glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) load(userptr, "glCompressedTexSubImage1D"); glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) load(userptr, "glCompressedTexSubImage2D"); glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) load(userptr, "glCompressedTexSubImage3D"); glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC) load(userptr, "glGetCompressedTexImage"); glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC) load(userptr, "glSampleCoverage"); } static void glad_gl_load_GL_VERSION_1_4( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_4) return; glad_glBlendColor = (PFNGLBLENDCOLORPROC) load(userptr, "glBlendColor"); glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC) load(userptr, "glBlendEquation"); glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC) load(userptr, "glBlendFuncSeparate"); glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC) load(userptr, "glMultiDrawArrays"); glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC) load(userptr, "glMultiDrawElements"); glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC) load(userptr, "glPointParameterf"); glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC) load(userptr, "glPointParameterfv"); glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC) load(userptr, "glPointParameteri"); glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC) load(userptr, "glPointParameteriv"); } static void glad_gl_load_GL_VERSION_1_5( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_1_5) return; glad_glBeginQuery = (PFNGLBEGINQUERYPROC) load(userptr, "glBeginQuery"); glad_glBindBuffer = (PFNGLBINDBUFFERPROC) load(userptr, "glBindBuffer"); glad_glBufferData = (PFNGLBUFFERDATAPROC) load(userptr, "glBufferData"); glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC) load(userptr, "glBufferSubData"); glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC) load(userptr, "glDeleteBuffers"); glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC) load(userptr, "glDeleteQueries"); glad_glEndQuery = (PFNGLENDQUERYPROC) load(userptr, "glEndQuery"); glad_glGenBuffers = (PFNGLGENBUFFERSPROC) load(userptr, "glGenBuffers"); glad_glGenQueries = (PFNGLGENQUERIESPROC) load(userptr, "glGenQueries"); glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC) load(userptr, "glGetBufferParameteriv"); glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC) load(userptr, "glGetBufferPointerv"); glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC) load(userptr, "glGetBufferSubData"); glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) load(userptr, "glGetQueryObjectiv"); glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) load(userptr, "glGetQueryObjectuiv"); glad_glGetQueryiv = (PFNGLGETQUERYIVPROC) load(userptr, "glGetQueryiv"); glad_glIsBuffer = (PFNGLISBUFFERPROC) load(userptr, "glIsBuffer"); glad_glIsQuery = (PFNGLISQUERYPROC) load(userptr, "glIsQuery"); glad_glMapBuffer = (PFNGLMAPBUFFERPROC) load(userptr, "glMapBuffer"); glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC) load(userptr, "glUnmapBuffer"); } static void glad_gl_load_GL_VERSION_2_0( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_2_0) return; glad_glAttachShader = (PFNGLATTACHSHADERPROC) load(userptr, "glAttachShader"); glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) load(userptr, "glBindAttribLocation"); glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC) load(userptr, "glBlendEquationSeparate"); glad_glCompileShader = (PFNGLCOMPILESHADERPROC) load(userptr, "glCompileShader"); glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC) load(userptr, "glCreateProgram"); glad_glCreateShader = (PFNGLCREATESHADERPROC) load(userptr, "glCreateShader"); glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC) load(userptr, "glDeleteProgram"); glad_glDeleteShader = (PFNGLDELETESHADERPROC) load(userptr, "glDeleteShader"); glad_glDetachShader = (PFNGLDETACHSHADERPROC) load(userptr, "glDetachShader"); glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) load(userptr, "glDisableVertexAttribArray"); glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC) load(userptr, "glDrawBuffers"); glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) load(userptr, "glEnableVertexAttribArray"); glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC) load(userptr, "glGetActiveAttrib"); glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) load(userptr, "glGetActiveUniform"); glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) load(userptr, "glGetAttachedShaders"); glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) load(userptr, "glGetAttribLocation"); glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) load(userptr, "glGetProgramInfoLog"); glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC) load(userptr, "glGetProgramiv"); glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) load(userptr, "glGetShaderInfoLog"); glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC) load(userptr, "glGetShaderSource"); glad_glGetShaderiv = (PFNGLGETSHADERIVPROC) load(userptr, "glGetShaderiv"); glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) load(userptr, "glGetUniformLocation"); glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC) load(userptr, "glGetUniformfv"); glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC) load(userptr, "glGetUniformiv"); glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC) load(userptr, "glGetVertexAttribPointerv"); glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC) load(userptr, "glGetVertexAttribdv"); glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC) load(userptr, "glGetVertexAttribfv"); glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC) load(userptr, "glGetVertexAttribiv"); glad_glIsProgram = (PFNGLISPROGRAMPROC) load(userptr, "glIsProgram"); glad_glIsShader = (PFNGLISSHADERPROC) load(userptr, "glIsShader"); glad_glLinkProgram = (PFNGLLINKPROGRAMPROC) load(userptr, "glLinkProgram"); glad_glShaderSource = (PFNGLSHADERSOURCEPROC) load(userptr, "glShaderSource"); glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) load(userptr, "glStencilFuncSeparate"); glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC) load(userptr, "glStencilMaskSeparate"); glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) load(userptr, "glStencilOpSeparate"); glad_glUniform1f = (PFNGLUNIFORM1FPROC) load(userptr, "glUniform1f"); glad_glUniform1fv = (PFNGLUNIFORM1FVPROC) load(userptr, "glUniform1fv"); glad_glUniform1i = (PFNGLUNIFORM1IPROC) load(userptr, "glUniform1i"); glad_glUniform1iv = (PFNGLUNIFORM1IVPROC) load(userptr, "glUniform1iv"); glad_glUniform2f = (PFNGLUNIFORM2FPROC) load(userptr, "glUniform2f"); glad_glUniform2fv = (PFNGLUNIFORM2FVPROC) load(userptr, "glUniform2fv"); glad_glUniform2i = (PFNGLUNIFORM2IPROC) load(userptr, "glUniform2i"); glad_glUniform2iv = (PFNGLUNIFORM2IVPROC) load(userptr, "glUniform2iv"); glad_glUniform3f = (PFNGLUNIFORM3FPROC) load(userptr, "glUniform3f"); glad_glUniform3fv = (PFNGLUNIFORM3FVPROC) load(userptr, "glUniform3fv"); glad_glUniform3i = (PFNGLUNIFORM3IPROC) load(userptr, "glUniform3i"); glad_glUniform3iv = (PFNGLUNIFORM3IVPROC) load(userptr, "glUniform3iv"); glad_glUniform4f = (PFNGLUNIFORM4FPROC) load(userptr, "glUniform4f"); glad_glUniform4fv = (PFNGLUNIFORM4FVPROC) load(userptr, "glUniform4fv"); glad_glUniform4i = (PFNGLUNIFORM4IPROC) load(userptr, "glUniform4i"); glad_glUniform4iv = (PFNGLUNIFORM4IVPROC) load(userptr, "glUniform4iv"); glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC) load(userptr, "glUniformMatrix2fv"); glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) load(userptr, "glUniformMatrix3fv"); glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) load(userptr, "glUniformMatrix4fv"); glad_glUseProgram = (PFNGLUSEPROGRAMPROC) load(userptr, "glUseProgram"); glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC) load(userptr, "glValidateProgram"); glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC) load(userptr, "glVertexAttrib1d"); glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC) load(userptr, "glVertexAttrib1dv"); glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC) load(userptr, "glVertexAttrib1f"); glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC) load(userptr, "glVertexAttrib1fv"); glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC) load(userptr, "glVertexAttrib1s"); glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC) load(userptr, "glVertexAttrib1sv"); glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC) load(userptr, "glVertexAttrib2d"); glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC) load(userptr, "glVertexAttrib2dv"); glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC) load(userptr, "glVertexAttrib2f"); glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC) load(userptr, "glVertexAttrib2fv"); glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC) load(userptr, "glVertexAttrib2s"); glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC) load(userptr, "glVertexAttrib2sv"); glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC) load(userptr, "glVertexAttrib3d"); glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC) load(userptr, "glVertexAttrib3dv"); glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC) load(userptr, "glVertexAttrib3f"); glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC) load(userptr, "glVertexAttrib3fv"); glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC) load(userptr, "glVertexAttrib3s"); glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC) load(userptr, "glVertexAttrib3sv"); glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC) load(userptr, "glVertexAttrib4Nbv"); glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC) load(userptr, "glVertexAttrib4Niv"); glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC) load(userptr, "glVertexAttrib4Nsv"); glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC) load(userptr, "glVertexAttrib4Nub"); glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC) load(userptr, "glVertexAttrib4Nubv"); glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC) load(userptr, "glVertexAttrib4Nuiv"); glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC) load(userptr, "glVertexAttrib4Nusv"); glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC) load(userptr, "glVertexAttrib4bv"); glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC) load(userptr, "glVertexAttrib4d"); glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC) load(userptr, "glVertexAttrib4dv"); glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC) load(userptr, "glVertexAttrib4f"); glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC) load(userptr, "glVertexAttrib4fv"); glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC) load(userptr, "glVertexAttrib4iv"); glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC) load(userptr, "glVertexAttrib4s"); glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC) load(userptr, "glVertexAttrib4sv"); glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC) load(userptr, "glVertexAttrib4ubv"); glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC) load(userptr, "glVertexAttrib4uiv"); glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC) load(userptr, "glVertexAttrib4usv"); glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) load(userptr, "glVertexAttribPointer"); } static void glad_gl_load_GL_VERSION_2_1( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_2_1) return; glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC) load(userptr, "glUniformMatrix2x3fv"); glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC) load(userptr, "glUniformMatrix2x4fv"); glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC) load(userptr, "glUniformMatrix3x2fv"); glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC) load(userptr, "glUniformMatrix3x4fv"); glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC) load(userptr, "glUniformMatrix4x2fv"); glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC) load(userptr, "glUniformMatrix4x3fv"); } static void glad_gl_load_GL_VERSION_3_0( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_3_0) return; glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC) load(userptr, "glBeginConditionalRender"); glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC) load(userptr, "glBeginTransformFeedback"); glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC) load(userptr, "glBindFragDataLocation"); glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) load(userptr, "glBindFramebuffer"); glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) load(userptr, "glBindRenderbuffer"); glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) load(userptr, "glBindVertexArray"); glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC) load(userptr, "glBlitFramebuffer"); glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckFramebufferStatus"); glad_glClampColor = (PFNGLCLAMPCOLORPROC) load(userptr, "glClampColor"); glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC) load(userptr, "glClearBufferfi"); glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC) load(userptr, "glClearBufferfv"); glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC) load(userptr, "glClearBufferiv"); glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC) load(userptr, "glClearBufferuiv"); glad_glColorMaski = (PFNGLCOLORMASKIPROC) load(userptr, "glColorMaski"); glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) load(userptr, "glDeleteFramebuffers"); glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) load(userptr, "glDeleteRenderbuffers"); glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) load(userptr, "glDeleteVertexArrays"); glad_glDisablei = (PFNGLDISABLEIPROC) load(userptr, "glDisablei"); glad_glEnablei = (PFNGLENABLEIPROC) load(userptr, "glEnablei"); glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC) load(userptr, "glEndConditionalRender"); glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC) load(userptr, "glEndTransformFeedback"); glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) load(userptr, "glFlushMappedBufferRange"); glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glFramebufferRenderbuffer"); glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC) load(userptr, "glFramebufferTexture1D"); glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) load(userptr, "glFramebufferTexture2D"); glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC) load(userptr, "glFramebufferTexture3D"); glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glFramebufferTextureLayer"); glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) load(userptr, "glGenFramebuffers"); glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) load(userptr, "glGenRenderbuffers"); glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) load(userptr, "glGenVertexArrays"); glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) load(userptr, "glGenerateMipmap"); glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC) load(userptr, "glGetBooleani_v"); glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC) load(userptr, "glGetFragDataLocation"); glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetFramebufferAttachmentParameteriv"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetRenderbufferParameteriv"); glad_glGetStringi = (PFNGLGETSTRINGIPROC) load(userptr, "glGetStringi"); glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC) load(userptr, "glGetTexParameterIiv"); glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC) load(userptr, "glGetTexParameterIuiv"); glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) load(userptr, "glGetTransformFeedbackVarying"); glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC) load(userptr, "glGetUniformuiv"); glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC) load(userptr, "glGetVertexAttribIiv"); glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC) load(userptr, "glGetVertexAttribIuiv"); glad_glIsEnabledi = (PFNGLISENABLEDIPROC) load(userptr, "glIsEnabledi"); glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC) load(userptr, "glIsFramebuffer"); glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC) load(userptr, "glIsRenderbuffer"); glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC) load(userptr, "glIsVertexArray"); glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) load(userptr, "glMapBufferRange"); glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) load(userptr, "glRenderbufferStorage"); glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glRenderbufferStorageMultisample"); glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC) load(userptr, "glTexParameterIiv"); glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC) load(userptr, "glTexParameterIuiv"); glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC) load(userptr, "glTransformFeedbackVaryings"); glad_glUniform1ui = (PFNGLUNIFORM1UIPROC) load(userptr, "glUniform1ui"); glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC) load(userptr, "glUniform1uiv"); glad_glUniform2ui = (PFNGLUNIFORM2UIPROC) load(userptr, "glUniform2ui"); glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC) load(userptr, "glUniform2uiv"); glad_glUniform3ui = (PFNGLUNIFORM3UIPROC) load(userptr, "glUniform3ui"); glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC) load(userptr, "glUniform3uiv"); glad_glUniform4ui = (PFNGLUNIFORM4UIPROC) load(userptr, "glUniform4ui"); glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC) load(userptr, "glUniform4uiv"); glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC) load(userptr, "glVertexAttribI1i"); glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC) load(userptr, "glVertexAttribI1iv"); glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC) load(userptr, "glVertexAttribI1ui"); glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC) load(userptr, "glVertexAttribI1uiv"); glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC) load(userptr, "glVertexAttribI2i"); glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC) load(userptr, "glVertexAttribI2iv"); glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC) load(userptr, "glVertexAttribI2ui"); glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC) load(userptr, "glVertexAttribI2uiv"); glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC) load(userptr, "glVertexAttribI3i"); glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC) load(userptr, "glVertexAttribI3iv"); glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC) load(userptr, "glVertexAttribI3ui"); glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC) load(userptr, "glVertexAttribI3uiv"); glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC) load(userptr, "glVertexAttribI4bv"); glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC) load(userptr, "glVertexAttribI4i"); glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC) load(userptr, "glVertexAttribI4iv"); glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC) load(userptr, "glVertexAttribI4sv"); glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC) load(userptr, "glVertexAttribI4ubv"); glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC) load(userptr, "glVertexAttribI4ui"); glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC) load(userptr, "glVertexAttribI4uiv"); glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC) load(userptr, "glVertexAttribI4usv"); glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) load(userptr, "glVertexAttribIPointer"); } static void glad_gl_load_GL_VERSION_3_1( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_3_1) return; glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC) load(userptr, "glCopyBufferSubData"); glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC) load(userptr, "glDrawArraysInstanced"); glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC) load(userptr, "glDrawElementsInstanced"); glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) load(userptr, "glGetActiveUniformBlockName"); glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC) load(userptr, "glGetActiveUniformBlockiv"); glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC) load(userptr, "glGetActiveUniformName"); glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC) load(userptr, "glGetActiveUniformsiv"); glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC) load(userptr, "glGetUniformBlockIndex"); glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC) load(userptr, "glGetUniformIndices"); glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC) load(userptr, "glPrimitiveRestartIndex"); glad_glTexBuffer = (PFNGLTEXBUFFERPROC) load(userptr, "glTexBuffer"); glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC) load(userptr, "glUniformBlockBinding"); } static void glad_gl_load_GL_VERSION_3_2( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_3_2) return; glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) load(userptr, "glClientWaitSync"); glad_glDeleteSync = (PFNGLDELETESYNCPROC) load(userptr, "glDeleteSync"); glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glDrawElementsBaseVertex"); glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) load(userptr, "glDrawElementsInstancedBaseVertex"); glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) load(userptr, "glDrawRangeElementsBaseVertex"); glad_glFenceSync = (PFNGLFENCESYNCPROC) load(userptr, "glFenceSync"); glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC) load(userptr, "glFramebufferTexture"); glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC) load(userptr, "glGetBufferParameteri64v"); glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC) load(userptr, "glGetInteger64i_v"); glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC) load(userptr, "glGetInteger64v"); glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC) load(userptr, "glGetMultisamplefv"); glad_glGetSynciv = (PFNGLGETSYNCIVPROC) load(userptr, "glGetSynciv"); glad_glIsSync = (PFNGLISSYNCPROC) load(userptr, "glIsSync"); glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) load(userptr, "glMultiDrawElementsBaseVertex"); glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC) load(userptr, "glProvokingVertex"); glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC) load(userptr, "glSampleMaski"); glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC) load(userptr, "glTexImage2DMultisample"); glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC) load(userptr, "glTexImage3DMultisample"); glad_glWaitSync = (PFNGLWAITSYNCPROC) load(userptr, "glWaitSync"); } static void glad_gl_load_GL_VERSION_3_3( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_VERSION_3_3) return; glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) load(userptr, "glBindFragDataLocationIndexed"); glad_glBindSampler = (PFNGLBINDSAMPLERPROC) load(userptr, "glBindSampler"); glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC) load(userptr, "glDeleteSamplers"); glad_glGenSamplers = (PFNGLGENSAMPLERSPROC) load(userptr, "glGenSamplers"); glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC) load(userptr, "glGetFragDataIndex"); glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) load(userptr, "glGetQueryObjecti64v"); glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) load(userptr, "glGetQueryObjectui64v"); glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC) load(userptr, "glGetSamplerParameterIiv"); glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC) load(userptr, "glGetSamplerParameterIuiv"); glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC) load(userptr, "glGetSamplerParameterfv"); glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC) load(userptr, "glGetSamplerParameteriv"); glad_glIsSampler = (PFNGLISSAMPLERPROC) load(userptr, "glIsSampler"); glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC) load(userptr, "glQueryCounter"); glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC) load(userptr, "glSamplerParameterIiv"); glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC) load(userptr, "glSamplerParameterIuiv"); glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC) load(userptr, "glSamplerParameterf"); glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC) load(userptr, "glSamplerParameterfv"); glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC) load(userptr, "glSamplerParameteri"); glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC) load(userptr, "glSamplerParameteriv"); glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC) load(userptr, "glVertexAttribDivisor"); glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC) load(userptr, "glVertexAttribP1ui"); glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC) load(userptr, "glVertexAttribP1uiv"); glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC) load(userptr, "glVertexAttribP2ui"); glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC) load(userptr, "glVertexAttribP2uiv"); glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC) load(userptr, "glVertexAttribP3ui"); glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC) load(userptr, "glVertexAttribP3uiv"); glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC) load(userptr, "glVertexAttribP4ui"); glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC) load(userptr, "glVertexAttribP4uiv"); } static void glad_gl_load_GL_ARB_copy_image( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_ARB_copy_image) return; glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC) load(userptr, "glCopyImageSubData"); } static void glad_gl_load_GL_ARB_multisample( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_ARB_multisample) return; glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC) load(userptr, "glSampleCoverage"); glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC) load(userptr, "glSampleCoverageARB"); } static void glad_gl_load_GL_ARB_robustness( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_ARB_robustness) return; glad_glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC) load(userptr, "glGetGraphicsResetStatusARB"); glad_glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) load(userptr, "glGetnCompressedTexImageARB"); glad_glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC) load(userptr, "glGetnTexImageARB"); glad_glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC) load(userptr, "glGetnUniformdvARB"); glad_glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC) load(userptr, "glGetnUniformfvARB"); glad_glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC) load(userptr, "glGetnUniformivARB"); glad_glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC) load(userptr, "glGetnUniformuivARB"); glad_glReadnPixels = (PFNGLREADNPIXELSPROC) load(userptr, "glReadnPixels"); glad_glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC) load(userptr, "glReadnPixelsARB"); } static void glad_gl_load_GL_ARB_texture_storage( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_ARB_texture_storage) return; glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC) load(userptr, "glTexStorage1D"); glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC) load(userptr, "glTexStorage2D"); glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC) load(userptr, "glTexStorage3D"); } static void glad_gl_load_GL_KHR_debug( GLADuserptrloadfunc load, void* userptr) { if(!GLAD_GL_KHR_debug) return; glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) load(userptr, "glDebugMessageCallback"); glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) load(userptr, "glDebugMessageControl"); glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) load(userptr, "glDebugMessageInsert"); glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) load(userptr, "glGetDebugMessageLog"); glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC) load(userptr, "glGetObjectLabel"); glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) load(userptr, "glGetObjectPtrLabel"); glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); glad_glObjectLabel = (PFNGLOBJECTLABELPROC) load(userptr, "glObjectLabel"); glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) load(userptr, "glObjectPtrLabel"); glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) load(userptr, "glPopDebugGroup"); glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) load(userptr, "glPushDebugGroup"); } #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) #define GLAD_GL_IS_SOME_NEW_VERSION 1 #else #define GLAD_GL_IS_SOME_NEW_VERSION 0 #endif static int glad_gl_get_extensions( int version, const char **out_exts, unsigned int *out_num_exts_i, char ***out_exts_i) { #if GLAD_GL_IS_SOME_NEW_VERSION if(GLAD_VERSION_MAJOR(version) < 3) { #else (void) version; (void) out_num_exts_i; (void) out_exts_i; #endif if (glad_glGetString == NULL) { return 0; } *out_exts = (const char *)glad_glGetString(GL_EXTENSIONS); #if GLAD_GL_IS_SOME_NEW_VERSION } else { unsigned int index = 0; unsigned int num_exts_i = 0; char **exts_i = NULL; if (glad_glGetStringi == NULL || glad_glGetIntegerv == NULL) { return 0; } glad_glGetIntegerv(GL_NUM_EXTENSIONS, (int*) &num_exts_i); if (num_exts_i > 0) { exts_i = (char **) malloc(num_exts_i * (sizeof *exts_i)); } if (exts_i == NULL) { return 0; } for(index = 0; index < num_exts_i; index++) { const char *gl_str_tmp = (const char*) glad_glGetStringi(GL_EXTENSIONS, index); size_t len = strlen(gl_str_tmp) + 1; char *local_str = (char*) malloc(len * sizeof(char)); if(local_str != NULL) { memcpy(local_str, gl_str_tmp, len * sizeof(char)); } exts_i[index] = local_str; } *out_num_exts_i = num_exts_i; *out_exts_i = exts_i; } #endif return 1; } static void glad_gl_free_extensions(char **exts_i, unsigned int num_exts_i) { if (exts_i != NULL) { unsigned int index; for(index = 0; index < num_exts_i; index++) { free((void *) (exts_i[index])); } free((void *)exts_i); exts_i = NULL; } } static int glad_gl_has_extension(int version, const char *exts, unsigned int num_exts_i, char **exts_i, const char *ext) { if(GLAD_VERSION_MAJOR(version) < 3 || !GLAD_GL_IS_SOME_NEW_VERSION) { const char *extensions; const char *loc; const char *terminator; extensions = exts; if(extensions == NULL || ext == NULL) { return 0; } while(1) { loc = strstr(extensions, ext); if(loc == NULL) { return 0; } terminator = loc + strlen(ext); if((loc == extensions || *(loc - 1) == ' ') && (*terminator == ' ' || *terminator == '\0')) { return 1; } extensions = terminator; } } else { unsigned int index; for(index = 0; index < num_exts_i; index++) { const char *e = exts_i[index]; if(strcmp(e, ext) == 0) { return 1; } } } return 0; } static GLADapiproc glad_gl_get_proc_from_userptr(void *userptr, const char* name) { return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name); } static int glad_gl_find_extensions_gl( int version) { const char *exts = NULL; unsigned int num_exts_i = 0; char **exts_i = NULL; if (!glad_gl_get_extensions(version, &exts, &num_exts_i, &exts_i)) return 0; GLAD_GL_ARB_copy_image = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_copy_image"); GLAD_GL_ARB_multisample = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_multisample"); GLAD_GL_ARB_robustness = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_robustness"); GLAD_GL_ARB_texture_storage = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_ARB_texture_storage"); GLAD_GL_KHR_debug = glad_gl_has_extension(version, exts, num_exts_i, exts_i, "GL_KHR_debug"); glad_gl_free_extensions(exts_i, num_exts_i); return 1; } static int glad_gl_find_core_gl(void) { int i, major, minor; const char* version; const char* prefixes[] = { "OpenGL ES-CM ", "OpenGL ES-CL ", "OpenGL ES ", NULL }; version = (const char*) glad_glGetString(GL_VERSION); if (!version) return 0; for (i = 0; prefixes[i]; i++) { const size_t length = strlen(prefixes[i]); if (strncmp(version, prefixes[i], length) == 0) { version += length; break; } } GLAD_IMPL_UTIL_SSCANF(version, "%d.%d", &major, &minor); GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; return GLAD_MAKE_VERSION(major, minor); } int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) { int version; glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); if(glad_glGetString == NULL) return 0; if(glad_glGetString(GL_VERSION) == NULL) return 0; version = glad_gl_find_core_gl(); glad_gl_load_GL_VERSION_1_0(load, userptr); glad_gl_load_GL_VERSION_1_1(load, userptr); glad_gl_load_GL_VERSION_1_2(load, userptr); glad_gl_load_GL_VERSION_1_3(load, userptr); glad_gl_load_GL_VERSION_1_4(load, userptr); glad_gl_load_GL_VERSION_1_5(load, userptr); glad_gl_load_GL_VERSION_2_0(load, userptr); glad_gl_load_GL_VERSION_2_1(load, userptr); glad_gl_load_GL_VERSION_3_0(load, userptr); glad_gl_load_GL_VERSION_3_1(load, userptr); glad_gl_load_GL_VERSION_3_2(load, userptr); glad_gl_load_GL_VERSION_3_3(load, userptr); if (!glad_gl_find_extensions_gl(version)) return 0; glad_gl_load_GL_ARB_copy_image(load, userptr); glad_gl_load_GL_ARB_multisample(load, userptr); glad_gl_load_GL_ARB_robustness(load, userptr); glad_gl_load_GL_ARB_texture_storage(load, userptr); glad_gl_load_GL_KHR_debug(load, userptr); return version; } int gladLoadGL( GLADloadfunc load) { return gladLoadGLUserPtr( glad_gl_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load); } void gladInstallGLDebug() { glad_debug_glActiveTexture = glad_debug_impl_glActiveTexture; glad_debug_glAttachShader = glad_debug_impl_glAttachShader; glad_debug_glBeginConditionalRender = glad_debug_impl_glBeginConditionalRender; glad_debug_glBeginQuery = glad_debug_impl_glBeginQuery; glad_debug_glBeginTransformFeedback = glad_debug_impl_glBeginTransformFeedback; glad_debug_glBindAttribLocation = glad_debug_impl_glBindAttribLocation; glad_debug_glBindBuffer = glad_debug_impl_glBindBuffer; glad_debug_glBindBufferBase = glad_debug_impl_glBindBufferBase; glad_debug_glBindBufferRange = glad_debug_impl_glBindBufferRange; glad_debug_glBindFragDataLocation = glad_debug_impl_glBindFragDataLocation; glad_debug_glBindFragDataLocationIndexed = glad_debug_impl_glBindFragDataLocationIndexed; glad_debug_glBindFramebuffer = glad_debug_impl_glBindFramebuffer; glad_debug_glBindRenderbuffer = glad_debug_impl_glBindRenderbuffer; glad_debug_glBindSampler = glad_debug_impl_glBindSampler; glad_debug_glBindTexture = glad_debug_impl_glBindTexture; glad_debug_glBindVertexArray = glad_debug_impl_glBindVertexArray; glad_debug_glBlendColor = glad_debug_impl_glBlendColor; glad_debug_glBlendEquation = glad_debug_impl_glBlendEquation; glad_debug_glBlendEquationSeparate = glad_debug_impl_glBlendEquationSeparate; glad_debug_glBlendFunc = glad_debug_impl_glBlendFunc; glad_debug_glBlendFuncSeparate = glad_debug_impl_glBlendFuncSeparate; glad_debug_glBlitFramebuffer = glad_debug_impl_glBlitFramebuffer; glad_debug_glBufferData = glad_debug_impl_glBufferData; glad_debug_glBufferSubData = glad_debug_impl_glBufferSubData; glad_debug_glCheckFramebufferStatus = glad_debug_impl_glCheckFramebufferStatus; glad_debug_glClampColor = glad_debug_impl_glClampColor; glad_debug_glClear = glad_debug_impl_glClear; glad_debug_glClearBufferfi = glad_debug_impl_glClearBufferfi; glad_debug_glClearBufferfv = glad_debug_impl_glClearBufferfv; glad_debug_glClearBufferiv = glad_debug_impl_glClearBufferiv; glad_debug_glClearBufferuiv = glad_debug_impl_glClearBufferuiv; glad_debug_glClearColor = glad_debug_impl_glClearColor; glad_debug_glClearDepth = glad_debug_impl_glClearDepth; glad_debug_glClearStencil = glad_debug_impl_glClearStencil; glad_debug_glClientWaitSync = glad_debug_impl_glClientWaitSync; glad_debug_glColorMask = glad_debug_impl_glColorMask; glad_debug_glColorMaski = glad_debug_impl_glColorMaski; glad_debug_glCompileShader = glad_debug_impl_glCompileShader; glad_debug_glCompressedTexImage1D = glad_debug_impl_glCompressedTexImage1D; glad_debug_glCompressedTexImage2D = glad_debug_impl_glCompressedTexImage2D; glad_debug_glCompressedTexImage3D = glad_debug_impl_glCompressedTexImage3D; glad_debug_glCompressedTexSubImage1D = glad_debug_impl_glCompressedTexSubImage1D; glad_debug_glCompressedTexSubImage2D = glad_debug_impl_glCompressedTexSubImage2D; glad_debug_glCompressedTexSubImage3D = glad_debug_impl_glCompressedTexSubImage3D; glad_debug_glCopyBufferSubData = glad_debug_impl_glCopyBufferSubData; glad_debug_glCopyImageSubData = glad_debug_impl_glCopyImageSubData; glad_debug_glCopyTexImage1D = glad_debug_impl_glCopyTexImage1D; glad_debug_glCopyTexImage2D = glad_debug_impl_glCopyTexImage2D; glad_debug_glCopyTexSubImage1D = glad_debug_impl_glCopyTexSubImage1D; glad_debug_glCopyTexSubImage2D = glad_debug_impl_glCopyTexSubImage2D; glad_debug_glCopyTexSubImage3D = glad_debug_impl_glCopyTexSubImage3D; glad_debug_glCreateProgram = glad_debug_impl_glCreateProgram; glad_debug_glCreateShader = glad_debug_impl_glCreateShader; glad_debug_glCullFace = glad_debug_impl_glCullFace; glad_debug_glDebugMessageCallback = glad_debug_impl_glDebugMessageCallback; glad_debug_glDebugMessageControl = glad_debug_impl_glDebugMessageControl; glad_debug_glDebugMessageInsert = glad_debug_impl_glDebugMessageInsert; glad_debug_glDeleteBuffers = glad_debug_impl_glDeleteBuffers; glad_debug_glDeleteFramebuffers = glad_debug_impl_glDeleteFramebuffers; glad_debug_glDeleteProgram = glad_debug_impl_glDeleteProgram; glad_debug_glDeleteQueries = glad_debug_impl_glDeleteQueries; glad_debug_glDeleteRenderbuffers = glad_debug_impl_glDeleteRenderbuffers; glad_debug_glDeleteSamplers = glad_debug_impl_glDeleteSamplers; glad_debug_glDeleteShader = glad_debug_impl_glDeleteShader; glad_debug_glDeleteSync = glad_debug_impl_glDeleteSync; glad_debug_glDeleteTextures = glad_debug_impl_glDeleteTextures; glad_debug_glDeleteVertexArrays = glad_debug_impl_glDeleteVertexArrays; glad_debug_glDepthFunc = glad_debug_impl_glDepthFunc; glad_debug_glDepthMask = glad_debug_impl_glDepthMask; glad_debug_glDepthRange = glad_debug_impl_glDepthRange; glad_debug_glDetachShader = glad_debug_impl_glDetachShader; glad_debug_glDisable = glad_debug_impl_glDisable; glad_debug_glDisableVertexAttribArray = glad_debug_impl_glDisableVertexAttribArray; glad_debug_glDisablei = glad_debug_impl_glDisablei; glad_debug_glDrawArrays = glad_debug_impl_glDrawArrays; glad_debug_glDrawArraysInstanced = glad_debug_impl_glDrawArraysInstanced; glad_debug_glDrawBuffer = glad_debug_impl_glDrawBuffer; glad_debug_glDrawBuffers = glad_debug_impl_glDrawBuffers; glad_debug_glDrawElements = glad_debug_impl_glDrawElements; glad_debug_glDrawElementsBaseVertex = glad_debug_impl_glDrawElementsBaseVertex; glad_debug_glDrawElementsInstanced = glad_debug_impl_glDrawElementsInstanced; glad_debug_glDrawElementsInstancedBaseVertex = glad_debug_impl_glDrawElementsInstancedBaseVertex; glad_debug_glDrawRangeElements = glad_debug_impl_glDrawRangeElements; glad_debug_glDrawRangeElementsBaseVertex = glad_debug_impl_glDrawRangeElementsBaseVertex; glad_debug_glEnable = glad_debug_impl_glEnable; glad_debug_glEnableVertexAttribArray = glad_debug_impl_glEnableVertexAttribArray; glad_debug_glEnablei = glad_debug_impl_glEnablei; glad_debug_glEndConditionalRender = glad_debug_impl_glEndConditionalRender; glad_debug_glEndQuery = glad_debug_impl_glEndQuery; glad_debug_glEndTransformFeedback = glad_debug_impl_glEndTransformFeedback; glad_debug_glFenceSync = glad_debug_impl_glFenceSync; glad_debug_glFinish = glad_debug_impl_glFinish; glad_debug_glFlush = glad_debug_impl_glFlush; glad_debug_glFlushMappedBufferRange = glad_debug_impl_glFlushMappedBufferRange; glad_debug_glFramebufferRenderbuffer = glad_debug_impl_glFramebufferRenderbuffer; glad_debug_glFramebufferTexture = glad_debug_impl_glFramebufferTexture; glad_debug_glFramebufferTexture1D = glad_debug_impl_glFramebufferTexture1D; glad_debug_glFramebufferTexture2D = glad_debug_impl_glFramebufferTexture2D; glad_debug_glFramebufferTexture3D = glad_debug_impl_glFramebufferTexture3D; glad_debug_glFramebufferTextureLayer = glad_debug_impl_glFramebufferTextureLayer; glad_debug_glFrontFace = glad_debug_impl_glFrontFace; glad_debug_glGenBuffers = glad_debug_impl_glGenBuffers; glad_debug_glGenFramebuffers = glad_debug_impl_glGenFramebuffers; glad_debug_glGenQueries = glad_debug_impl_glGenQueries; glad_debug_glGenRenderbuffers = glad_debug_impl_glGenRenderbuffers; glad_debug_glGenSamplers = glad_debug_impl_glGenSamplers; glad_debug_glGenTextures = glad_debug_impl_glGenTextures; glad_debug_glGenVertexArrays = glad_debug_impl_glGenVertexArrays; glad_debug_glGenerateMipmap = glad_debug_impl_glGenerateMipmap; glad_debug_glGetActiveAttrib = glad_debug_impl_glGetActiveAttrib; glad_debug_glGetActiveUniform = glad_debug_impl_glGetActiveUniform; glad_debug_glGetActiveUniformBlockName = glad_debug_impl_glGetActiveUniformBlockName; glad_debug_glGetActiveUniformBlockiv = glad_debug_impl_glGetActiveUniformBlockiv; glad_debug_glGetActiveUniformName = glad_debug_impl_glGetActiveUniformName; glad_debug_glGetActiveUniformsiv = glad_debug_impl_glGetActiveUniformsiv; glad_debug_glGetAttachedShaders = glad_debug_impl_glGetAttachedShaders; glad_debug_glGetAttribLocation = glad_debug_impl_glGetAttribLocation; glad_debug_glGetBooleani_v = glad_debug_impl_glGetBooleani_v; glad_debug_glGetBooleanv = glad_debug_impl_glGetBooleanv; glad_debug_glGetBufferParameteri64v = glad_debug_impl_glGetBufferParameteri64v; glad_debug_glGetBufferParameteriv = glad_debug_impl_glGetBufferParameteriv; glad_debug_glGetBufferPointerv = glad_debug_impl_glGetBufferPointerv; glad_debug_glGetBufferSubData = glad_debug_impl_glGetBufferSubData; glad_debug_glGetCompressedTexImage = glad_debug_impl_glGetCompressedTexImage; glad_debug_glGetDebugMessageLog = glad_debug_impl_glGetDebugMessageLog; glad_debug_glGetDoublev = glad_debug_impl_glGetDoublev; glad_debug_glGetError = glad_debug_impl_glGetError; glad_debug_glGetFloatv = glad_debug_impl_glGetFloatv; glad_debug_glGetFragDataIndex = glad_debug_impl_glGetFragDataIndex; glad_debug_glGetFragDataLocation = glad_debug_impl_glGetFragDataLocation; glad_debug_glGetFramebufferAttachmentParameteriv = glad_debug_impl_glGetFramebufferAttachmentParameteriv; glad_debug_glGetGraphicsResetStatusARB = glad_debug_impl_glGetGraphicsResetStatusARB; glad_debug_glGetInteger64i_v = glad_debug_impl_glGetInteger64i_v; glad_debug_glGetInteger64v = glad_debug_impl_glGetInteger64v; glad_debug_glGetIntegeri_v = glad_debug_impl_glGetIntegeri_v; glad_debug_glGetIntegerv = glad_debug_impl_glGetIntegerv; glad_debug_glGetMultisamplefv = glad_debug_impl_glGetMultisamplefv; glad_debug_glGetObjectLabel = glad_debug_impl_glGetObjectLabel; glad_debug_glGetObjectPtrLabel = glad_debug_impl_glGetObjectPtrLabel; glad_debug_glGetPointerv = glad_debug_impl_glGetPointerv; glad_debug_glGetProgramInfoLog = glad_debug_impl_glGetProgramInfoLog; glad_debug_glGetProgramiv = glad_debug_impl_glGetProgramiv; glad_debug_glGetQueryObjecti64v = glad_debug_impl_glGetQueryObjecti64v; glad_debug_glGetQueryObjectiv = glad_debug_impl_glGetQueryObjectiv; glad_debug_glGetQueryObjectui64v = glad_debug_impl_glGetQueryObjectui64v; glad_debug_glGetQueryObjectuiv = glad_debug_impl_glGetQueryObjectuiv; glad_debug_glGetQueryiv = glad_debug_impl_glGetQueryiv; glad_debug_glGetRenderbufferParameteriv = glad_debug_impl_glGetRenderbufferParameteriv; glad_debug_glGetSamplerParameterIiv = glad_debug_impl_glGetSamplerParameterIiv; glad_debug_glGetSamplerParameterIuiv = glad_debug_impl_glGetSamplerParameterIuiv; glad_debug_glGetSamplerParameterfv = glad_debug_impl_glGetSamplerParameterfv; glad_debug_glGetSamplerParameteriv = glad_debug_impl_glGetSamplerParameteriv; glad_debug_glGetShaderInfoLog = glad_debug_impl_glGetShaderInfoLog; glad_debug_glGetShaderSource = glad_debug_impl_glGetShaderSource; glad_debug_glGetShaderiv = glad_debug_impl_glGetShaderiv; glad_debug_glGetString = glad_debug_impl_glGetString; glad_debug_glGetStringi = glad_debug_impl_glGetStringi; glad_debug_glGetSynciv = glad_debug_impl_glGetSynciv; glad_debug_glGetTexImage = glad_debug_impl_glGetTexImage; glad_debug_glGetTexLevelParameterfv = glad_debug_impl_glGetTexLevelParameterfv; glad_debug_glGetTexLevelParameteriv = glad_debug_impl_glGetTexLevelParameteriv; glad_debug_glGetTexParameterIiv = glad_debug_impl_glGetTexParameterIiv; glad_debug_glGetTexParameterIuiv = glad_debug_impl_glGetTexParameterIuiv; glad_debug_glGetTexParameterfv = glad_debug_impl_glGetTexParameterfv; glad_debug_glGetTexParameteriv = glad_debug_impl_glGetTexParameteriv; glad_debug_glGetTransformFeedbackVarying = glad_debug_impl_glGetTransformFeedbackVarying; glad_debug_glGetUniformBlockIndex = glad_debug_impl_glGetUniformBlockIndex; glad_debug_glGetUniformIndices = glad_debug_impl_glGetUniformIndices; glad_debug_glGetUniformLocation = glad_debug_impl_glGetUniformLocation; glad_debug_glGetUniformfv = glad_debug_impl_glGetUniformfv; glad_debug_glGetUniformiv = glad_debug_impl_glGetUniformiv; glad_debug_glGetUniformuiv = glad_debug_impl_glGetUniformuiv; glad_debug_glGetVertexAttribIiv = glad_debug_impl_glGetVertexAttribIiv; glad_debug_glGetVertexAttribIuiv = glad_debug_impl_glGetVertexAttribIuiv; glad_debug_glGetVertexAttribPointerv = glad_debug_impl_glGetVertexAttribPointerv; glad_debug_glGetVertexAttribdv = glad_debug_impl_glGetVertexAttribdv; glad_debug_glGetVertexAttribfv = glad_debug_impl_glGetVertexAttribfv; glad_debug_glGetVertexAttribiv = glad_debug_impl_glGetVertexAttribiv; glad_debug_glGetnCompressedTexImageARB = glad_debug_impl_glGetnCompressedTexImageARB; glad_debug_glGetnTexImageARB = glad_debug_impl_glGetnTexImageARB; glad_debug_glGetnUniformdvARB = glad_debug_impl_glGetnUniformdvARB; glad_debug_glGetnUniformfvARB = glad_debug_impl_glGetnUniformfvARB; glad_debug_glGetnUniformivARB = glad_debug_impl_glGetnUniformivARB; glad_debug_glGetnUniformuivARB = glad_debug_impl_glGetnUniformuivARB; glad_debug_glHint = glad_debug_impl_glHint; glad_debug_glIsBuffer = glad_debug_impl_glIsBuffer; glad_debug_glIsEnabled = glad_debug_impl_glIsEnabled; glad_debug_glIsEnabledi = glad_debug_impl_glIsEnabledi; glad_debug_glIsFramebuffer = glad_debug_impl_glIsFramebuffer; glad_debug_glIsProgram = glad_debug_impl_glIsProgram; glad_debug_glIsQuery = glad_debug_impl_glIsQuery; glad_debug_glIsRenderbuffer = glad_debug_impl_glIsRenderbuffer; glad_debug_glIsSampler = glad_debug_impl_glIsSampler; glad_debug_glIsShader = glad_debug_impl_glIsShader; glad_debug_glIsSync = glad_debug_impl_glIsSync; glad_debug_glIsTexture = glad_debug_impl_glIsTexture; glad_debug_glIsVertexArray = glad_debug_impl_glIsVertexArray; glad_debug_glLineWidth = glad_debug_impl_glLineWidth; glad_debug_glLinkProgram = glad_debug_impl_glLinkProgram; glad_debug_glLogicOp = glad_debug_impl_glLogicOp; glad_debug_glMapBuffer = glad_debug_impl_glMapBuffer; glad_debug_glMapBufferRange = glad_debug_impl_glMapBufferRange; glad_debug_glMultiDrawArrays = glad_debug_impl_glMultiDrawArrays; glad_debug_glMultiDrawElements = glad_debug_impl_glMultiDrawElements; glad_debug_glMultiDrawElementsBaseVertex = glad_debug_impl_glMultiDrawElementsBaseVertex; glad_debug_glObjectLabel = glad_debug_impl_glObjectLabel; glad_debug_glObjectPtrLabel = glad_debug_impl_glObjectPtrLabel; glad_debug_glPixelStoref = glad_debug_impl_glPixelStoref; glad_debug_glPixelStorei = glad_debug_impl_glPixelStorei; glad_debug_glPointParameterf = glad_debug_impl_glPointParameterf; glad_debug_glPointParameterfv = glad_debug_impl_glPointParameterfv; glad_debug_glPointParameteri = glad_debug_impl_glPointParameteri; glad_debug_glPointParameteriv = glad_debug_impl_glPointParameteriv; glad_debug_glPointSize = glad_debug_impl_glPointSize; glad_debug_glPolygonMode = glad_debug_impl_glPolygonMode; glad_debug_glPolygonOffset = glad_debug_impl_glPolygonOffset; glad_debug_glPopDebugGroup = glad_debug_impl_glPopDebugGroup; glad_debug_glPrimitiveRestartIndex = glad_debug_impl_glPrimitiveRestartIndex; glad_debug_glProvokingVertex = glad_debug_impl_glProvokingVertex; glad_debug_glPushDebugGroup = glad_debug_impl_glPushDebugGroup; glad_debug_glQueryCounter = glad_debug_impl_glQueryCounter; glad_debug_glReadBuffer = glad_debug_impl_glReadBuffer; glad_debug_glReadPixels = glad_debug_impl_glReadPixels; glad_debug_glReadnPixels = glad_debug_impl_glReadnPixels; glad_debug_glReadnPixelsARB = glad_debug_impl_glReadnPixelsARB; glad_debug_glRenderbufferStorage = glad_debug_impl_glRenderbufferStorage; glad_debug_glRenderbufferStorageMultisample = glad_debug_impl_glRenderbufferStorageMultisample; glad_debug_glSampleCoverage = glad_debug_impl_glSampleCoverage; glad_debug_glSampleCoverageARB = glad_debug_impl_glSampleCoverageARB; glad_debug_glSampleMaski = glad_debug_impl_glSampleMaski; glad_debug_glSamplerParameterIiv = glad_debug_impl_glSamplerParameterIiv; glad_debug_glSamplerParameterIuiv = glad_debug_impl_glSamplerParameterIuiv; glad_debug_glSamplerParameterf = glad_debug_impl_glSamplerParameterf; glad_debug_glSamplerParameterfv = glad_debug_impl_glSamplerParameterfv; glad_debug_glSamplerParameteri = glad_debug_impl_glSamplerParameteri; glad_debug_glSamplerParameteriv = glad_debug_impl_glSamplerParameteriv; glad_debug_glScissor = glad_debug_impl_glScissor; glad_debug_glShaderSource = glad_debug_impl_glShaderSource; glad_debug_glStencilFunc = glad_debug_impl_glStencilFunc; glad_debug_glStencilFuncSeparate = glad_debug_impl_glStencilFuncSeparate; glad_debug_glStencilMask = glad_debug_impl_glStencilMask; glad_debug_glStencilMaskSeparate = glad_debug_impl_glStencilMaskSeparate; glad_debug_glStencilOp = glad_debug_impl_glStencilOp; glad_debug_glStencilOpSeparate = glad_debug_impl_glStencilOpSeparate; glad_debug_glTexBuffer = glad_debug_impl_glTexBuffer; glad_debug_glTexImage1D = glad_debug_impl_glTexImage1D; glad_debug_glTexImage2D = glad_debug_impl_glTexImage2D; glad_debug_glTexImage2DMultisample = glad_debug_impl_glTexImage2DMultisample; glad_debug_glTexImage3D = glad_debug_impl_glTexImage3D; glad_debug_glTexImage3DMultisample = glad_debug_impl_glTexImage3DMultisample; glad_debug_glTexParameterIiv = glad_debug_impl_glTexParameterIiv; glad_debug_glTexParameterIuiv = glad_debug_impl_glTexParameterIuiv; glad_debug_glTexParameterf = glad_debug_impl_glTexParameterf; glad_debug_glTexParameterfv = glad_debug_impl_glTexParameterfv; glad_debug_glTexParameteri = glad_debug_impl_glTexParameteri; glad_debug_glTexParameteriv = glad_debug_impl_glTexParameteriv; glad_debug_glTexStorage1D = glad_debug_impl_glTexStorage1D; glad_debug_glTexStorage2D = glad_debug_impl_glTexStorage2D; glad_debug_glTexStorage3D = glad_debug_impl_glTexStorage3D; glad_debug_glTexSubImage1D = glad_debug_impl_glTexSubImage1D; glad_debug_glTexSubImage2D = glad_debug_impl_glTexSubImage2D; glad_debug_glTexSubImage3D = glad_debug_impl_glTexSubImage3D; glad_debug_glTransformFeedbackVaryings = glad_debug_impl_glTransformFeedbackVaryings; glad_debug_glUniform1f = glad_debug_impl_glUniform1f; glad_debug_glUniform1fv = glad_debug_impl_glUniform1fv; glad_debug_glUniform1i = glad_debug_impl_glUniform1i; glad_debug_glUniform1iv = glad_debug_impl_glUniform1iv; glad_debug_glUniform1ui = glad_debug_impl_glUniform1ui; glad_debug_glUniform1uiv = glad_debug_impl_glUniform1uiv; glad_debug_glUniform2f = glad_debug_impl_glUniform2f; glad_debug_glUniform2fv = glad_debug_impl_glUniform2fv; glad_debug_glUniform2i = glad_debug_impl_glUniform2i; glad_debug_glUniform2iv = glad_debug_impl_glUniform2iv; glad_debug_glUniform2ui = glad_debug_impl_glUniform2ui; glad_debug_glUniform2uiv = glad_debug_impl_glUniform2uiv; glad_debug_glUniform3f = glad_debug_impl_glUniform3f; glad_debug_glUniform3fv = glad_debug_impl_glUniform3fv; glad_debug_glUniform3i = glad_debug_impl_glUniform3i; glad_debug_glUniform3iv = glad_debug_impl_glUniform3iv; glad_debug_glUniform3ui = glad_debug_impl_glUniform3ui; glad_debug_glUniform3uiv = glad_debug_impl_glUniform3uiv; glad_debug_glUniform4f = glad_debug_impl_glUniform4f; glad_debug_glUniform4fv = glad_debug_impl_glUniform4fv; glad_debug_glUniform4i = glad_debug_impl_glUniform4i; glad_debug_glUniform4iv = glad_debug_impl_glUniform4iv; glad_debug_glUniform4ui = glad_debug_impl_glUniform4ui; glad_debug_glUniform4uiv = glad_debug_impl_glUniform4uiv; glad_debug_glUniformBlockBinding = glad_debug_impl_glUniformBlockBinding; glad_debug_glUniformMatrix2fv = glad_debug_impl_glUniformMatrix2fv; glad_debug_glUniformMatrix2x3fv = glad_debug_impl_glUniformMatrix2x3fv; glad_debug_glUniformMatrix2x4fv = glad_debug_impl_glUniformMatrix2x4fv; glad_debug_glUniformMatrix3fv = glad_debug_impl_glUniformMatrix3fv; glad_debug_glUniformMatrix3x2fv = glad_debug_impl_glUniformMatrix3x2fv; glad_debug_glUniformMatrix3x4fv = glad_debug_impl_glUniformMatrix3x4fv; glad_debug_glUniformMatrix4fv = glad_debug_impl_glUniformMatrix4fv; glad_debug_glUniformMatrix4x2fv = glad_debug_impl_glUniformMatrix4x2fv; glad_debug_glUniformMatrix4x3fv = glad_debug_impl_glUniformMatrix4x3fv; glad_debug_glUnmapBuffer = glad_debug_impl_glUnmapBuffer; glad_debug_glUseProgram = glad_debug_impl_glUseProgram; glad_debug_glValidateProgram = glad_debug_impl_glValidateProgram; glad_debug_glVertexAttrib1d = glad_debug_impl_glVertexAttrib1d; glad_debug_glVertexAttrib1dv = glad_debug_impl_glVertexAttrib1dv; glad_debug_glVertexAttrib1f = glad_debug_impl_glVertexAttrib1f; glad_debug_glVertexAttrib1fv = glad_debug_impl_glVertexAttrib1fv; glad_debug_glVertexAttrib1s = glad_debug_impl_glVertexAttrib1s; glad_debug_glVertexAttrib1sv = glad_debug_impl_glVertexAttrib1sv; glad_debug_glVertexAttrib2d = glad_debug_impl_glVertexAttrib2d; glad_debug_glVertexAttrib2dv = glad_debug_impl_glVertexAttrib2dv; glad_debug_glVertexAttrib2f = glad_debug_impl_glVertexAttrib2f; glad_debug_glVertexAttrib2fv = glad_debug_impl_glVertexAttrib2fv; glad_debug_glVertexAttrib2s = glad_debug_impl_glVertexAttrib2s; glad_debug_glVertexAttrib2sv = glad_debug_impl_glVertexAttrib2sv; glad_debug_glVertexAttrib3d = glad_debug_impl_glVertexAttrib3d; glad_debug_glVertexAttrib3dv = glad_debug_impl_glVertexAttrib3dv; glad_debug_glVertexAttrib3f = glad_debug_impl_glVertexAttrib3f; glad_debug_glVertexAttrib3fv = glad_debug_impl_glVertexAttrib3fv; glad_debug_glVertexAttrib3s = glad_debug_impl_glVertexAttrib3s; glad_debug_glVertexAttrib3sv = glad_debug_impl_glVertexAttrib3sv; glad_debug_glVertexAttrib4Nbv = glad_debug_impl_glVertexAttrib4Nbv; glad_debug_glVertexAttrib4Niv = glad_debug_impl_glVertexAttrib4Niv; glad_debug_glVertexAttrib4Nsv = glad_debug_impl_glVertexAttrib4Nsv; glad_debug_glVertexAttrib4Nub = glad_debug_impl_glVertexAttrib4Nub; glad_debug_glVertexAttrib4Nubv = glad_debug_impl_glVertexAttrib4Nubv; glad_debug_glVertexAttrib4Nuiv = glad_debug_impl_glVertexAttrib4Nuiv; glad_debug_glVertexAttrib4Nusv = glad_debug_impl_glVertexAttrib4Nusv; glad_debug_glVertexAttrib4bv = glad_debug_impl_glVertexAttrib4bv; glad_debug_glVertexAttrib4d = glad_debug_impl_glVertexAttrib4d; glad_debug_glVertexAttrib4dv = glad_debug_impl_glVertexAttrib4dv; glad_debug_glVertexAttrib4f = glad_debug_impl_glVertexAttrib4f; glad_debug_glVertexAttrib4fv = glad_debug_impl_glVertexAttrib4fv; glad_debug_glVertexAttrib4iv = glad_debug_impl_glVertexAttrib4iv; glad_debug_glVertexAttrib4s = glad_debug_impl_glVertexAttrib4s; glad_debug_glVertexAttrib4sv = glad_debug_impl_glVertexAttrib4sv; glad_debug_glVertexAttrib4ubv = glad_debug_impl_glVertexAttrib4ubv; glad_debug_glVertexAttrib4uiv = glad_debug_impl_glVertexAttrib4uiv; glad_debug_glVertexAttrib4usv = glad_debug_impl_glVertexAttrib4usv; glad_debug_glVertexAttribDivisor = glad_debug_impl_glVertexAttribDivisor; glad_debug_glVertexAttribI1i = glad_debug_impl_glVertexAttribI1i; glad_debug_glVertexAttribI1iv = glad_debug_impl_glVertexAttribI1iv; glad_debug_glVertexAttribI1ui = glad_debug_impl_glVertexAttribI1ui; glad_debug_glVertexAttribI1uiv = glad_debug_impl_glVertexAttribI1uiv; glad_debug_glVertexAttribI2i = glad_debug_impl_glVertexAttribI2i; glad_debug_glVertexAttribI2iv = glad_debug_impl_glVertexAttribI2iv; glad_debug_glVertexAttribI2ui = glad_debug_impl_glVertexAttribI2ui; glad_debug_glVertexAttribI2uiv = glad_debug_impl_glVertexAttribI2uiv; glad_debug_glVertexAttribI3i = glad_debug_impl_glVertexAttribI3i; glad_debug_glVertexAttribI3iv = glad_debug_impl_glVertexAttribI3iv; glad_debug_glVertexAttribI3ui = glad_debug_impl_glVertexAttribI3ui; glad_debug_glVertexAttribI3uiv = glad_debug_impl_glVertexAttribI3uiv; glad_debug_glVertexAttribI4bv = glad_debug_impl_glVertexAttribI4bv; glad_debug_glVertexAttribI4i = glad_debug_impl_glVertexAttribI4i; glad_debug_glVertexAttribI4iv = glad_debug_impl_glVertexAttribI4iv; glad_debug_glVertexAttribI4sv = glad_debug_impl_glVertexAttribI4sv; glad_debug_glVertexAttribI4ubv = glad_debug_impl_glVertexAttribI4ubv; glad_debug_glVertexAttribI4ui = glad_debug_impl_glVertexAttribI4ui; glad_debug_glVertexAttribI4uiv = glad_debug_impl_glVertexAttribI4uiv; glad_debug_glVertexAttribI4usv = glad_debug_impl_glVertexAttribI4usv; glad_debug_glVertexAttribIPointer = glad_debug_impl_glVertexAttribIPointer; glad_debug_glVertexAttribP1ui = glad_debug_impl_glVertexAttribP1ui; glad_debug_glVertexAttribP1uiv = glad_debug_impl_glVertexAttribP1uiv; glad_debug_glVertexAttribP2ui = glad_debug_impl_glVertexAttribP2ui; glad_debug_glVertexAttribP2uiv = glad_debug_impl_glVertexAttribP2uiv; glad_debug_glVertexAttribP3ui = glad_debug_impl_glVertexAttribP3ui; glad_debug_glVertexAttribP3uiv = glad_debug_impl_glVertexAttribP3uiv; glad_debug_glVertexAttribP4ui = glad_debug_impl_glVertexAttribP4ui; glad_debug_glVertexAttribP4uiv = glad_debug_impl_glVertexAttribP4uiv; glad_debug_glVertexAttribPointer = glad_debug_impl_glVertexAttribPointer; glad_debug_glViewport = glad_debug_impl_glViewport; glad_debug_glWaitSync = glad_debug_impl_glWaitSync; } void gladUninstallGLDebug() { glad_debug_glActiveTexture = glad_glActiveTexture; glad_debug_glAttachShader = glad_glAttachShader; glad_debug_glBeginConditionalRender = glad_glBeginConditionalRender; glad_debug_glBeginQuery = glad_glBeginQuery; glad_debug_glBeginTransformFeedback = glad_glBeginTransformFeedback; glad_debug_glBindAttribLocation = glad_glBindAttribLocation; glad_debug_glBindBuffer = glad_glBindBuffer; glad_debug_glBindBufferBase = glad_glBindBufferBase; glad_debug_glBindBufferRange = glad_glBindBufferRange; glad_debug_glBindFragDataLocation = glad_glBindFragDataLocation; glad_debug_glBindFragDataLocationIndexed = glad_glBindFragDataLocationIndexed; glad_debug_glBindFramebuffer = glad_glBindFramebuffer; glad_debug_glBindRenderbuffer = glad_glBindRenderbuffer; glad_debug_glBindSampler = glad_glBindSampler; glad_debug_glBindTexture = glad_glBindTexture; glad_debug_glBindVertexArray = glad_glBindVertexArray; glad_debug_glBlendColor = glad_glBlendColor; glad_debug_glBlendEquation = glad_glBlendEquation; glad_debug_glBlendEquationSeparate = glad_glBlendEquationSeparate; glad_debug_glBlendFunc = glad_glBlendFunc; glad_debug_glBlendFuncSeparate = glad_glBlendFuncSeparate; glad_debug_glBlitFramebuffer = glad_glBlitFramebuffer; glad_debug_glBufferData = glad_glBufferData; glad_debug_glBufferSubData = glad_glBufferSubData; glad_debug_glCheckFramebufferStatus = glad_glCheckFramebufferStatus; glad_debug_glClampColor = glad_glClampColor; glad_debug_glClear = glad_glClear; glad_debug_glClearBufferfi = glad_glClearBufferfi; glad_debug_glClearBufferfv = glad_glClearBufferfv; glad_debug_glClearBufferiv = glad_glClearBufferiv; glad_debug_glClearBufferuiv = glad_glClearBufferuiv; glad_debug_glClearColor = glad_glClearColor; glad_debug_glClearDepth = glad_glClearDepth; glad_debug_glClearStencil = glad_glClearStencil; glad_debug_glClientWaitSync = glad_glClientWaitSync; glad_debug_glColorMask = glad_glColorMask; glad_debug_glColorMaski = glad_glColorMaski; glad_debug_glCompileShader = glad_glCompileShader; glad_debug_glCompressedTexImage1D = glad_glCompressedTexImage1D; glad_debug_glCompressedTexImage2D = glad_glCompressedTexImage2D; glad_debug_glCompressedTexImage3D = glad_glCompressedTexImage3D; glad_debug_glCompressedTexSubImage1D = glad_glCompressedTexSubImage1D; glad_debug_glCompressedTexSubImage2D = glad_glCompressedTexSubImage2D; glad_debug_glCompressedTexSubImage3D = glad_glCompressedTexSubImage3D; glad_debug_glCopyBufferSubData = glad_glCopyBufferSubData; glad_debug_glCopyImageSubData = glad_glCopyImageSubData; glad_debug_glCopyTexImage1D = glad_glCopyTexImage1D; glad_debug_glCopyTexImage2D = glad_glCopyTexImage2D; glad_debug_glCopyTexSubImage1D = glad_glCopyTexSubImage1D; glad_debug_glCopyTexSubImage2D = glad_glCopyTexSubImage2D; glad_debug_glCopyTexSubImage3D = glad_glCopyTexSubImage3D; glad_debug_glCreateProgram = glad_glCreateProgram; glad_debug_glCreateShader = glad_glCreateShader; glad_debug_glCullFace = glad_glCullFace; glad_debug_glDebugMessageCallback = glad_glDebugMessageCallback; glad_debug_glDebugMessageControl = glad_glDebugMessageControl; glad_debug_glDebugMessageInsert = glad_glDebugMessageInsert; glad_debug_glDeleteBuffers = glad_glDeleteBuffers; glad_debug_glDeleteFramebuffers = glad_glDeleteFramebuffers; glad_debug_glDeleteProgram = glad_glDeleteProgram; glad_debug_glDeleteQueries = glad_glDeleteQueries; glad_debug_glDeleteRenderbuffers = glad_glDeleteRenderbuffers; glad_debug_glDeleteSamplers = glad_glDeleteSamplers; glad_debug_glDeleteShader = glad_glDeleteShader; glad_debug_glDeleteSync = glad_glDeleteSync; glad_debug_glDeleteTextures = glad_glDeleteTextures; glad_debug_glDeleteVertexArrays = glad_glDeleteVertexArrays; glad_debug_glDepthFunc = glad_glDepthFunc; glad_debug_glDepthMask = glad_glDepthMask; glad_debug_glDepthRange = glad_glDepthRange; glad_debug_glDetachShader = glad_glDetachShader; glad_debug_glDisable = glad_glDisable; glad_debug_glDisableVertexAttribArray = glad_glDisableVertexAttribArray; glad_debug_glDisablei = glad_glDisablei; glad_debug_glDrawArrays = glad_glDrawArrays; glad_debug_glDrawArraysInstanced = glad_glDrawArraysInstanced; glad_debug_glDrawBuffer = glad_glDrawBuffer; glad_debug_glDrawBuffers = glad_glDrawBuffers; glad_debug_glDrawElements = glad_glDrawElements; glad_debug_glDrawElementsBaseVertex = glad_glDrawElementsBaseVertex; glad_debug_glDrawElementsInstanced = glad_glDrawElementsInstanced; glad_debug_glDrawElementsInstancedBaseVertex = glad_glDrawElementsInstancedBaseVertex; glad_debug_glDrawRangeElements = glad_glDrawRangeElements; glad_debug_glDrawRangeElementsBaseVertex = glad_glDrawRangeElementsBaseVertex; glad_debug_glEnable = glad_glEnable; glad_debug_glEnableVertexAttribArray = glad_glEnableVertexAttribArray; glad_debug_glEnablei = glad_glEnablei; glad_debug_glEndConditionalRender = glad_glEndConditionalRender; glad_debug_glEndQuery = glad_glEndQuery; glad_debug_glEndTransformFeedback = glad_glEndTransformFeedback; glad_debug_glFenceSync = glad_glFenceSync; glad_debug_glFinish = glad_glFinish; glad_debug_glFlush = glad_glFlush; glad_debug_glFlushMappedBufferRange = glad_glFlushMappedBufferRange; glad_debug_glFramebufferRenderbuffer = glad_glFramebufferRenderbuffer; glad_debug_glFramebufferTexture = glad_glFramebufferTexture; glad_debug_glFramebufferTexture1D = glad_glFramebufferTexture1D; glad_debug_glFramebufferTexture2D = glad_glFramebufferTexture2D; glad_debug_glFramebufferTexture3D = glad_glFramebufferTexture3D; glad_debug_glFramebufferTextureLayer = glad_glFramebufferTextureLayer; glad_debug_glFrontFace = glad_glFrontFace; glad_debug_glGenBuffers = glad_glGenBuffers; glad_debug_glGenFramebuffers = glad_glGenFramebuffers; glad_debug_glGenQueries = glad_glGenQueries; glad_debug_glGenRenderbuffers = glad_glGenRenderbuffers; glad_debug_glGenSamplers = glad_glGenSamplers; glad_debug_glGenTextures = glad_glGenTextures; glad_debug_glGenVertexArrays = glad_glGenVertexArrays; glad_debug_glGenerateMipmap = glad_glGenerateMipmap; glad_debug_glGetActiveAttrib = glad_glGetActiveAttrib; glad_debug_glGetActiveUniform = glad_glGetActiveUniform; glad_debug_glGetActiveUniformBlockName = glad_glGetActiveUniformBlockName; glad_debug_glGetActiveUniformBlockiv = glad_glGetActiveUniformBlockiv; glad_debug_glGetActiveUniformName = glad_glGetActiveUniformName; glad_debug_glGetActiveUniformsiv = glad_glGetActiveUniformsiv; glad_debug_glGetAttachedShaders = glad_glGetAttachedShaders; glad_debug_glGetAttribLocation = glad_glGetAttribLocation; glad_debug_glGetBooleani_v = glad_glGetBooleani_v; glad_debug_glGetBooleanv = glad_glGetBooleanv; glad_debug_glGetBufferParameteri64v = glad_glGetBufferParameteri64v; glad_debug_glGetBufferParameteriv = glad_glGetBufferParameteriv; glad_debug_glGetBufferPointerv = glad_glGetBufferPointerv; glad_debug_glGetBufferSubData = glad_glGetBufferSubData; glad_debug_glGetCompressedTexImage = glad_glGetCompressedTexImage; glad_debug_glGetDebugMessageLog = glad_glGetDebugMessageLog; glad_debug_glGetDoublev = glad_glGetDoublev; glad_debug_glGetError = glad_glGetError; glad_debug_glGetFloatv = glad_glGetFloatv; glad_debug_glGetFragDataIndex = glad_glGetFragDataIndex; glad_debug_glGetFragDataLocation = glad_glGetFragDataLocation; glad_debug_glGetFramebufferAttachmentParameteriv = glad_glGetFramebufferAttachmentParameteriv; glad_debug_glGetGraphicsResetStatusARB = glad_glGetGraphicsResetStatusARB; glad_debug_glGetInteger64i_v = glad_glGetInteger64i_v; glad_debug_glGetInteger64v = glad_glGetInteger64v; glad_debug_glGetIntegeri_v = glad_glGetIntegeri_v; glad_debug_glGetIntegerv = glad_glGetIntegerv; glad_debug_glGetMultisamplefv = glad_glGetMultisamplefv; glad_debug_glGetObjectLabel = glad_glGetObjectLabel; glad_debug_glGetObjectPtrLabel = glad_glGetObjectPtrLabel; glad_debug_glGetPointerv = glad_glGetPointerv; glad_debug_glGetProgramInfoLog = glad_glGetProgramInfoLog; glad_debug_glGetProgramiv = glad_glGetProgramiv; glad_debug_glGetQueryObjecti64v = glad_glGetQueryObjecti64v; glad_debug_glGetQueryObjectiv = glad_glGetQueryObjectiv; glad_debug_glGetQueryObjectui64v = glad_glGetQueryObjectui64v; glad_debug_glGetQueryObjectuiv = glad_glGetQueryObjectuiv; glad_debug_glGetQueryiv = glad_glGetQueryiv; glad_debug_glGetRenderbufferParameteriv = glad_glGetRenderbufferParameteriv; glad_debug_glGetSamplerParameterIiv = glad_glGetSamplerParameterIiv; glad_debug_glGetSamplerParameterIuiv = glad_glGetSamplerParameterIuiv; glad_debug_glGetSamplerParameterfv = glad_glGetSamplerParameterfv; glad_debug_glGetSamplerParameteriv = glad_glGetSamplerParameteriv; glad_debug_glGetShaderInfoLog = glad_glGetShaderInfoLog; glad_debug_glGetShaderSource = glad_glGetShaderSource; glad_debug_glGetShaderiv = glad_glGetShaderiv; glad_debug_glGetString = glad_glGetString; glad_debug_glGetStringi = glad_glGetStringi; glad_debug_glGetSynciv = glad_glGetSynciv; glad_debug_glGetTexImage = glad_glGetTexImage; glad_debug_glGetTexLevelParameterfv = glad_glGetTexLevelParameterfv; glad_debug_glGetTexLevelParameteriv = glad_glGetTexLevelParameteriv; glad_debug_glGetTexParameterIiv = glad_glGetTexParameterIiv; glad_debug_glGetTexParameterIuiv = glad_glGetTexParameterIuiv; glad_debug_glGetTexParameterfv = glad_glGetTexParameterfv; glad_debug_glGetTexParameteriv = glad_glGetTexParameteriv; glad_debug_glGetTransformFeedbackVarying = glad_glGetTransformFeedbackVarying; glad_debug_glGetUniformBlockIndex = glad_glGetUniformBlockIndex; glad_debug_glGetUniformIndices = glad_glGetUniformIndices; glad_debug_glGetUniformLocation = glad_glGetUniformLocation; glad_debug_glGetUniformfv = glad_glGetUniformfv; glad_debug_glGetUniformiv = glad_glGetUniformiv; glad_debug_glGetUniformuiv = glad_glGetUniformuiv; glad_debug_glGetVertexAttribIiv = glad_glGetVertexAttribIiv; glad_debug_glGetVertexAttribIuiv = glad_glGetVertexAttribIuiv; glad_debug_glGetVertexAttribPointerv = glad_glGetVertexAttribPointerv; glad_debug_glGetVertexAttribdv = glad_glGetVertexAttribdv; glad_debug_glGetVertexAttribfv = glad_glGetVertexAttribfv; glad_debug_glGetVertexAttribiv = glad_glGetVertexAttribiv; glad_debug_glGetnCompressedTexImageARB = glad_glGetnCompressedTexImageARB; glad_debug_glGetnTexImageARB = glad_glGetnTexImageARB; glad_debug_glGetnUniformdvARB = glad_glGetnUniformdvARB; glad_debug_glGetnUniformfvARB = glad_glGetnUniformfvARB; glad_debug_glGetnUniformivARB = glad_glGetnUniformivARB; glad_debug_glGetnUniformuivARB = glad_glGetnUniformuivARB; glad_debug_glHint = glad_glHint; glad_debug_glIsBuffer = glad_glIsBuffer; glad_debug_glIsEnabled = glad_glIsEnabled; glad_debug_glIsEnabledi = glad_glIsEnabledi; glad_debug_glIsFramebuffer = glad_glIsFramebuffer; glad_debug_glIsProgram = glad_glIsProgram; glad_debug_glIsQuery = glad_glIsQuery; glad_debug_glIsRenderbuffer = glad_glIsRenderbuffer; glad_debug_glIsSampler = glad_glIsSampler; glad_debug_glIsShader = glad_glIsShader; glad_debug_glIsSync = glad_glIsSync; glad_debug_glIsTexture = glad_glIsTexture; glad_debug_glIsVertexArray = glad_glIsVertexArray; glad_debug_glLineWidth = glad_glLineWidth; glad_debug_glLinkProgram = glad_glLinkProgram; glad_debug_glLogicOp = glad_glLogicOp; glad_debug_glMapBuffer = glad_glMapBuffer; glad_debug_glMapBufferRange = glad_glMapBufferRange; glad_debug_glMultiDrawArrays = glad_glMultiDrawArrays; glad_debug_glMultiDrawElements = glad_glMultiDrawElements; glad_debug_glMultiDrawElementsBaseVertex = glad_glMultiDrawElementsBaseVertex; glad_debug_glObjectLabel = glad_glObjectLabel; glad_debug_glObjectPtrLabel = glad_glObjectPtrLabel; glad_debug_glPixelStoref = glad_glPixelStoref; glad_debug_glPixelStorei = glad_glPixelStorei; glad_debug_glPointParameterf = glad_glPointParameterf; glad_debug_glPointParameterfv = glad_glPointParameterfv; glad_debug_glPointParameteri = glad_glPointParameteri; glad_debug_glPointParameteriv = glad_glPointParameteriv; glad_debug_glPointSize = glad_glPointSize; glad_debug_glPolygonMode = glad_glPolygonMode; glad_debug_glPolygonOffset = glad_glPolygonOffset; glad_debug_glPopDebugGroup = glad_glPopDebugGroup; glad_debug_glPrimitiveRestartIndex = glad_glPrimitiveRestartIndex; glad_debug_glProvokingVertex = glad_glProvokingVertex; glad_debug_glPushDebugGroup = glad_glPushDebugGroup; glad_debug_glQueryCounter = glad_glQueryCounter; glad_debug_glReadBuffer = glad_glReadBuffer; glad_debug_glReadPixels = glad_glReadPixels; glad_debug_glReadnPixels = glad_glReadnPixels; glad_debug_glReadnPixelsARB = glad_glReadnPixelsARB; glad_debug_glRenderbufferStorage = glad_glRenderbufferStorage; glad_debug_glRenderbufferStorageMultisample = glad_glRenderbufferStorageMultisample; glad_debug_glSampleCoverage = glad_glSampleCoverage; glad_debug_glSampleCoverageARB = glad_glSampleCoverageARB; glad_debug_glSampleMaski = glad_glSampleMaski; glad_debug_glSamplerParameterIiv = glad_glSamplerParameterIiv; glad_debug_glSamplerParameterIuiv = glad_glSamplerParameterIuiv; glad_debug_glSamplerParameterf = glad_glSamplerParameterf; glad_debug_glSamplerParameterfv = glad_glSamplerParameterfv; glad_debug_glSamplerParameteri = glad_glSamplerParameteri; glad_debug_glSamplerParameteriv = glad_glSamplerParameteriv; glad_debug_glScissor = glad_glScissor; glad_debug_glShaderSource = glad_glShaderSource; glad_debug_glStencilFunc = glad_glStencilFunc; glad_debug_glStencilFuncSeparate = glad_glStencilFuncSeparate; glad_debug_glStencilMask = glad_glStencilMask; glad_debug_glStencilMaskSeparate = glad_glStencilMaskSeparate; glad_debug_glStencilOp = glad_glStencilOp; glad_debug_glStencilOpSeparate = glad_glStencilOpSeparate; glad_debug_glTexBuffer = glad_glTexBuffer; glad_debug_glTexImage1D = glad_glTexImage1D; glad_debug_glTexImage2D = glad_glTexImage2D; glad_debug_glTexImage2DMultisample = glad_glTexImage2DMultisample; glad_debug_glTexImage3D = glad_glTexImage3D; glad_debug_glTexImage3DMultisample = glad_glTexImage3DMultisample; glad_debug_glTexParameterIiv = glad_glTexParameterIiv; glad_debug_glTexParameterIuiv = glad_glTexParameterIuiv; glad_debug_glTexParameterf = glad_glTexParameterf; glad_debug_glTexParameterfv = glad_glTexParameterfv; glad_debug_glTexParameteri = glad_glTexParameteri; glad_debug_glTexParameteriv = glad_glTexParameteriv; glad_debug_glTexStorage1D = glad_glTexStorage1D; glad_debug_glTexStorage2D = glad_glTexStorage2D; glad_debug_glTexStorage3D = glad_glTexStorage3D; glad_debug_glTexSubImage1D = glad_glTexSubImage1D; glad_debug_glTexSubImage2D = glad_glTexSubImage2D; glad_debug_glTexSubImage3D = glad_glTexSubImage3D; glad_debug_glTransformFeedbackVaryings = glad_glTransformFeedbackVaryings; glad_debug_glUniform1f = glad_glUniform1f; glad_debug_glUniform1fv = glad_glUniform1fv; glad_debug_glUniform1i = glad_glUniform1i; glad_debug_glUniform1iv = glad_glUniform1iv; glad_debug_glUniform1ui = glad_glUniform1ui; glad_debug_glUniform1uiv = glad_glUniform1uiv; glad_debug_glUniform2f = glad_glUniform2f; glad_debug_glUniform2fv = glad_glUniform2fv; glad_debug_glUniform2i = glad_glUniform2i; glad_debug_glUniform2iv = glad_glUniform2iv; glad_debug_glUniform2ui = glad_glUniform2ui; glad_debug_glUniform2uiv = glad_glUniform2uiv; glad_debug_glUniform3f = glad_glUniform3f; glad_debug_glUniform3fv = glad_glUniform3fv; glad_debug_glUniform3i = glad_glUniform3i; glad_debug_glUniform3iv = glad_glUniform3iv; glad_debug_glUniform3ui = glad_glUniform3ui; glad_debug_glUniform3uiv = glad_glUniform3uiv; glad_debug_glUniform4f = glad_glUniform4f; glad_debug_glUniform4fv = glad_glUniform4fv; glad_debug_glUniform4i = glad_glUniform4i; glad_debug_glUniform4iv = glad_glUniform4iv; glad_debug_glUniform4ui = glad_glUniform4ui; glad_debug_glUniform4uiv = glad_glUniform4uiv; glad_debug_glUniformBlockBinding = glad_glUniformBlockBinding; glad_debug_glUniformMatrix2fv = glad_glUniformMatrix2fv; glad_debug_glUniformMatrix2x3fv = glad_glUniformMatrix2x3fv; glad_debug_glUniformMatrix2x4fv = glad_glUniformMatrix2x4fv; glad_debug_glUniformMatrix3fv = glad_glUniformMatrix3fv; glad_debug_glUniformMatrix3x2fv = glad_glUniformMatrix3x2fv; glad_debug_glUniformMatrix3x4fv = glad_glUniformMatrix3x4fv; glad_debug_glUniformMatrix4fv = glad_glUniformMatrix4fv; glad_debug_glUniformMatrix4x2fv = glad_glUniformMatrix4x2fv; glad_debug_glUniformMatrix4x3fv = glad_glUniformMatrix4x3fv; glad_debug_glUnmapBuffer = glad_glUnmapBuffer; glad_debug_glUseProgram = glad_glUseProgram; glad_debug_glValidateProgram = glad_glValidateProgram; glad_debug_glVertexAttrib1d = glad_glVertexAttrib1d; glad_debug_glVertexAttrib1dv = glad_glVertexAttrib1dv; glad_debug_glVertexAttrib1f = glad_glVertexAttrib1f; glad_debug_glVertexAttrib1fv = glad_glVertexAttrib1fv; glad_debug_glVertexAttrib1s = glad_glVertexAttrib1s; glad_debug_glVertexAttrib1sv = glad_glVertexAttrib1sv; glad_debug_glVertexAttrib2d = glad_glVertexAttrib2d; glad_debug_glVertexAttrib2dv = glad_glVertexAttrib2dv; glad_debug_glVertexAttrib2f = glad_glVertexAttrib2f; glad_debug_glVertexAttrib2fv = glad_glVertexAttrib2fv; glad_debug_glVertexAttrib2s = glad_glVertexAttrib2s; glad_debug_glVertexAttrib2sv = glad_glVertexAttrib2sv; glad_debug_glVertexAttrib3d = glad_glVertexAttrib3d; glad_debug_glVertexAttrib3dv = glad_glVertexAttrib3dv; glad_debug_glVertexAttrib3f = glad_glVertexAttrib3f; glad_debug_glVertexAttrib3fv = glad_glVertexAttrib3fv; glad_debug_glVertexAttrib3s = glad_glVertexAttrib3s; glad_debug_glVertexAttrib3sv = glad_glVertexAttrib3sv; glad_debug_glVertexAttrib4Nbv = glad_glVertexAttrib4Nbv; glad_debug_glVertexAttrib4Niv = glad_glVertexAttrib4Niv; glad_debug_glVertexAttrib4Nsv = glad_glVertexAttrib4Nsv; glad_debug_glVertexAttrib4Nub = glad_glVertexAttrib4Nub; glad_debug_glVertexAttrib4Nubv = glad_glVertexAttrib4Nubv; glad_debug_glVertexAttrib4Nuiv = glad_glVertexAttrib4Nuiv; glad_debug_glVertexAttrib4Nusv = glad_glVertexAttrib4Nusv; glad_debug_glVertexAttrib4bv = glad_glVertexAttrib4bv; glad_debug_glVertexAttrib4d = glad_glVertexAttrib4d; glad_debug_glVertexAttrib4dv = glad_glVertexAttrib4dv; glad_debug_glVertexAttrib4f = glad_glVertexAttrib4f; glad_debug_glVertexAttrib4fv = glad_glVertexAttrib4fv; glad_debug_glVertexAttrib4iv = glad_glVertexAttrib4iv; glad_debug_glVertexAttrib4s = glad_glVertexAttrib4s; glad_debug_glVertexAttrib4sv = glad_glVertexAttrib4sv; glad_debug_glVertexAttrib4ubv = glad_glVertexAttrib4ubv; glad_debug_glVertexAttrib4uiv = glad_glVertexAttrib4uiv; glad_debug_glVertexAttrib4usv = glad_glVertexAttrib4usv; glad_debug_glVertexAttribDivisor = glad_glVertexAttribDivisor; glad_debug_glVertexAttribI1i = glad_glVertexAttribI1i; glad_debug_glVertexAttribI1iv = glad_glVertexAttribI1iv; glad_debug_glVertexAttribI1ui = glad_glVertexAttribI1ui; glad_debug_glVertexAttribI1uiv = glad_glVertexAttribI1uiv; glad_debug_glVertexAttribI2i = glad_glVertexAttribI2i; glad_debug_glVertexAttribI2iv = glad_glVertexAttribI2iv; glad_debug_glVertexAttribI2ui = glad_glVertexAttribI2ui; glad_debug_glVertexAttribI2uiv = glad_glVertexAttribI2uiv; glad_debug_glVertexAttribI3i = glad_glVertexAttribI3i; glad_debug_glVertexAttribI3iv = glad_glVertexAttribI3iv; glad_debug_glVertexAttribI3ui = glad_glVertexAttribI3ui; glad_debug_glVertexAttribI3uiv = glad_glVertexAttribI3uiv; glad_debug_glVertexAttribI4bv = glad_glVertexAttribI4bv; glad_debug_glVertexAttribI4i = glad_glVertexAttribI4i; glad_debug_glVertexAttribI4iv = glad_glVertexAttribI4iv; glad_debug_glVertexAttribI4sv = glad_glVertexAttribI4sv; glad_debug_glVertexAttribI4ubv = glad_glVertexAttribI4ubv; glad_debug_glVertexAttribI4ui = glad_glVertexAttribI4ui; glad_debug_glVertexAttribI4uiv = glad_glVertexAttribI4uiv; glad_debug_glVertexAttribI4usv = glad_glVertexAttribI4usv; glad_debug_glVertexAttribIPointer = glad_glVertexAttribIPointer; glad_debug_glVertexAttribP1ui = glad_glVertexAttribP1ui; glad_debug_glVertexAttribP1uiv = glad_glVertexAttribP1uiv; glad_debug_glVertexAttribP2ui = glad_glVertexAttribP2ui; glad_debug_glVertexAttribP2uiv = glad_glVertexAttribP2uiv; glad_debug_glVertexAttribP3ui = glad_glVertexAttribP3ui; glad_debug_glVertexAttribP3uiv = glad_glVertexAttribP3uiv; glad_debug_glVertexAttribP4ui = glad_glVertexAttribP4ui; glad_debug_glVertexAttribP4uiv = glad_glVertexAttribP4uiv; glad_debug_glVertexAttribPointer = glad_glVertexAttribPointer; glad_debug_glViewport = glad_glViewport; glad_debug_glWaitSync = glad_glWaitSync; } #endif /* GLAD_GL_IMPLEMENTATION */ kitty-0.15.0/kitty/gl.c000066400000000000000000000243361356737523400147020ustar00rootroot00000000000000/* * gl.c * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "gl.h" #include #include #include "glfw-wrapper.h" #include "state.h" // GL setup and error handling {{{ static void check_for_gl_error(void UNUSED *ret, const char *name, GLADapiproc UNUSED funcptr, int UNUSED len_args, ...) { #define f(msg) fatal("OpenGL error: %s (calling function: %s)", msg, name); break; GLenum code = glad_glGetError(); switch(code) { case GL_NO_ERROR: break; case GL_INVALID_ENUM: f("An enum value is invalid (GL_INVALID_ENUM)"); case GL_INVALID_VALUE: f("An numeric value is invalid (GL_INVALID_VALUE)"); case GL_INVALID_OPERATION: f("This operation is invalid (GL_INVALID_OPERATION)"); case GL_INVALID_FRAMEBUFFER_OPERATION: f("The framebuffer object is not complete (GL_INVALID_FRAMEBUFFER_OPERATION)"); case GL_OUT_OF_MEMORY: f("There is not enough memory left to execute the command. (GL_OUT_OF_MEMORY)"); case GL_STACK_UNDERFLOW: f("An attempt has been made to perform an operation that would cause an internal stack to underflow. (GL_STACK_UNDERFLOW)"); case GL_STACK_OVERFLOW: f("An attempt has been made to perform an operation that would cause an internal stack to overflow. (GL_STACK_OVERFLOW)"); default: fatal("An unknown OpenGL error occurred with code: %d (calling function: %s)", code, name); break; } } void gl_init() { static bool glad_loaded = false; if (!glad_loaded) { int gl_version = gladLoadGL(glfwGetProcAddress); if (!gl_version) { fatal("Loading the OpenGL library failed"); } if (!global_state.debug_gl) { gladUninstallGLDebug(); } gladSetGLPostCallback(check_for_gl_error); #define ARB_TEST(name) \ if (!GLAD_GL_ARB_##name) { \ fatal("The OpenGL driver on this system is missing the required extension: ARB_%s", #name); \ } ARB_TEST(texture_storage); #undef ARB_TEST glad_loaded = true; int gl_major = GLAD_VERSION_MAJOR(gl_version); int gl_minor = GLAD_VERSION_MINOR(gl_version); if (global_state.debug_gl) printf("GL version string: '%s' Detected version: %d.%d\n", glGetString(GL_VERSION), gl_major, gl_minor); if (gl_major < OPENGL_REQUIRED_VERSION_MAJOR || (gl_major == OPENGL_REQUIRED_VERSION_MAJOR && gl_minor < OPENGL_REQUIRED_VERSION_MINOR)) { fatal("OpenGL version is %d.%d, version >= 3.3 required for kitty", gl_major, gl_minor); } } } void update_surface_size(int w, int h, GLuint offscreen_texture_id) { glViewport(0, 0, w, h); if (offscreen_texture_id) { glBindTexture(GL_TEXTURE_2D, offscreen_texture_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); } } void free_texture(GLuint *tex_id) { glDeleteTextures(1, tex_id); *tex_id = 0; } // }}} // Programs {{{ static Program programs[64] = {{0}}; GLuint compile_shader(GLenum shader_type, const char *source) { GLuint shader_id = glCreateShader(shader_type); glShaderSource(shader_id, 1, (const GLchar **)&source, NULL); glCompileShader(shader_id); GLint ret = GL_FALSE; glGetShaderiv(shader_id, GL_COMPILE_STATUS, &ret); if (ret != GL_TRUE) { GLsizei len; static char glbuf[4096]; glGetShaderInfoLog(shader_id, sizeof(glbuf), &len, glbuf); log_error("Failed to compile GLSL shader!\n%s", glbuf); glDeleteShader(shader_id); PyErr_SetString(PyExc_ValueError, "Failed to compile shader"); return 0; } return shader_id; } Program* program_ptr(int program) { return programs + (size_t)program; } GLuint program_id(int program) { return programs[program].id; } void init_uniforms(int program) { Program *p = programs + program; glGetProgramiv(p->id, GL_ACTIVE_UNIFORMS, &(p->num_of_uniforms)); for (GLint i = 0; i < p->num_of_uniforms; i++) { Uniform *u = p->uniforms + i; glGetActiveUniform(p->id, (GLuint)i, sizeof(u->name)/sizeof(u->name[0]), NULL, &(u->size), &(u->type), u->name); u->location = glGetUniformLocation(p->id, u->name); u->idx = i; } } GLint get_uniform_information(int program, const char *name, GLenum information_type) { GLint q; GLuint t; static const char* names[] = {""}; names[0] = name; GLuint pid = program_id(program); glGetUniformIndices(pid, 1, (void*)names, &t); glGetActiveUniformsiv(pid, 1, &t, information_type, &q); return q; } GLint attrib_location(int program, const char *name) { GLint ans = glGetAttribLocation(programs[program].id, name); return ans; } GLuint block_index(int program, const char *name) { GLuint ans = glGetUniformBlockIndex(programs[program].id, name); if (ans == GL_INVALID_INDEX) { fatal("Could not find block index"); } return ans; } GLint block_size(int program, GLuint block_index) { GLint ans; glGetActiveUniformBlockiv(programs[program].id, block_index, GL_UNIFORM_BLOCK_DATA_SIZE, &ans); return ans; } void bind_program(int program) { glUseProgram(programs[program].id); } void unbind_program(void) { glUseProgram(0); } // }}} // Buffers {{{ typedef struct { GLuint id; GLsizeiptr size; GLenum usage; } Buffer; static Buffer buffers[MAX_CHILDREN * 6 + 4] = {{0}}; static ssize_t create_buffer(GLenum usage) { GLuint buffer_id; glGenBuffers(1, &buffer_id); for (size_t i = 0; i < sizeof(buffers)/sizeof(buffers[0]); i++) { if (buffers[i].id == 0) { buffers[i].id = buffer_id; buffers[i].size = 0; buffers[i].usage = usage; return i; } } glDeleteBuffers(1, &buffer_id); fatal("Too many buffers"); return -1; } static void delete_buffer(ssize_t buf_idx) { glDeleteBuffers(1, &(buffers[buf_idx].id)); buffers[buf_idx].id = 0; buffers[buf_idx].size = 0; } static GLuint bind_buffer(ssize_t buf_idx) { glBindBuffer(buffers[buf_idx].usage, buffers[buf_idx].id); return buffers[buf_idx].id; } static void unbind_buffer(ssize_t buf_idx) { glBindBuffer(buffers[buf_idx].usage, 0); } static inline void alloc_buffer(ssize_t idx, GLsizeiptr size, GLenum usage) { Buffer *b = buffers + idx; if (b->size == size) return; b->size = size; glBufferData(b->usage, size, NULL, usage); } static inline void* map_buffer(ssize_t idx, GLenum access) { void *ans = glMapBuffer(buffers[idx].usage, access); return ans; } static inline void unmap_buffer(ssize_t idx) { glUnmapBuffer(buffers[idx].usage); } // }}} // Vertex Array Objects (VAO) {{{ typedef struct { GLuint id; size_t num_buffers; ssize_t buffers[10]; } VAO; static VAO vaos[4*MAX_CHILDREN + 10] = {{0}}; ssize_t create_vao(void) { GLuint vao_id; glGenVertexArrays(1, &vao_id); for (size_t i = 0; i < sizeof(vaos)/sizeof(vaos[0]); i++) { if (!vaos[i].id) { vaos[i].id = vao_id; vaos[i].num_buffers = 0; glBindVertexArray(vao_id); return i; } } glDeleteVertexArrays(1, &vao_id); fatal("Too many VAOs"); return -1; } size_t add_buffer_to_vao(ssize_t vao_idx, GLenum usage) { VAO* vao = vaos + vao_idx; if (vao->num_buffers >= sizeof(vao->buffers) / sizeof(vao->buffers[0])) { fatal("Too many buffers in a single VAO"); } ssize_t buf = create_buffer(usage); vao->buffers[vao->num_buffers++] = buf; return vao->num_buffers - 1; } static void add_located_attribute_to_vao(ssize_t vao_idx, GLint aloc, GLint size, GLenum data_type, GLsizei stride, void *offset, GLuint divisor) { VAO *vao = vaos + vao_idx; if (!vao->num_buffers) fatal("You must create a buffer for this attribute first"); ssize_t buf = vao->buffers[vao->num_buffers - 1]; bind_buffer(buf); glEnableVertexAttribArray(aloc); switch(data_type) { case GL_BYTE: case GL_UNSIGNED_BYTE: case GL_SHORT: case GL_UNSIGNED_SHORT: case GL_INT: case GL_UNSIGNED_INT: glVertexAttribIPointer(aloc, size, data_type, stride, offset); break; default: glVertexAttribPointer(aloc, size, data_type, GL_FALSE, stride, offset); break; } if (divisor) { glVertexAttribDivisor(aloc, divisor); } unbind_buffer(buf); } void add_attribute_to_vao(int p, ssize_t vao_idx, const char *name, GLint size, GLenum data_type, GLsizei stride, void *offset, GLuint divisor) { GLint aloc = attrib_location(p, name); if (aloc == -1) fatal("No attribute named: %s found in this program", name); add_located_attribute_to_vao(vao_idx, aloc, size, data_type, stride, offset, divisor); } void remove_vao(ssize_t vao_idx) { VAO *vao = vaos + vao_idx; while (vao->num_buffers) { vao->num_buffers--; delete_buffer(vao->buffers[vao->num_buffers]); } glDeleteVertexArrays(1, &(vao->id)); vaos[vao_idx].id = 0; } void bind_vertex_array(ssize_t vao_idx) { glBindVertexArray(vaos[vao_idx].id); } void unbind_vertex_array(void) { glBindVertexArray(0); } ssize_t alloc_vao_buffer(ssize_t vao_idx, GLsizeiptr size, size_t bufnum, GLenum usage) { ssize_t buf_idx = vaos[vao_idx].buffers[bufnum]; bind_buffer(buf_idx); alloc_buffer(buf_idx, size, usage); return buf_idx; } void* map_vao_buffer(ssize_t vao_idx, size_t bufnum, GLenum access) { ssize_t buf_idx = vaos[vao_idx].buffers[bufnum]; bind_buffer(buf_idx); return map_buffer(buf_idx, access); } void* alloc_and_map_vao_buffer(ssize_t vao_idx, GLsizeiptr size, size_t bufnum, GLenum usage, GLenum access) { ssize_t buf_idx = alloc_vao_buffer(vao_idx, size, bufnum, usage); return map_buffer(buf_idx, access); } void bind_vao_uniform_buffer(ssize_t vao_idx, size_t bufnum, GLuint block_index) { ssize_t buf_idx = vaos[vao_idx].buffers[bufnum]; glBindBufferBase(GL_UNIFORM_BUFFER, block_index, buffers[buf_idx].id); } void unmap_vao_buffer(ssize_t vao_idx, size_t bufnum) { ssize_t buf_idx = vaos[vao_idx].buffers[bufnum]; unmap_buffer(buf_idx); unbind_buffer(buf_idx); } // }}} kitty-0.15.0/kitty/gl.h000066400000000000000000000036131356737523400147020ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #include "gl-wrapper.h" #define GLSL_VERSION (OPENGL_REQUIRED_VERSION_MAJOR * 100 + OPENGL_REQUIRED_VERSION_MINOR * 10) typedef struct { GLint size, index; } UniformBlock; typedef struct { GLint offset, stride, size; } ArrayInformation; typedef struct { char name[256]; GLint size, location, idx; GLenum type; } Uniform; typedef struct { GLuint id; Uniform uniforms[256]; GLint num_of_uniforms; } Program; void gl_init(void); void update_surface_size(int w, int h, GLuint offscreen_texture_id); void free_texture(GLuint *tex_id); void remove_vao(ssize_t vao_idx); void init_uniforms(int program); GLuint program_id(int program); Program* program_ptr(int program); GLuint block_index(int program, const char *name); GLint block_size(int program, GLuint block_index); GLint get_uniform_information(int program, const char *name, GLenum information_type); GLint attrib_location(int program, const char *name); ssize_t create_vao(void); size_t add_buffer_to_vao(ssize_t vao_idx, GLenum usage); void add_attribute_to_vao(int p, ssize_t vao_idx, const char *name, GLint size, GLenum data_type, GLsizei stride, void *offset, GLuint divisor); ssize_t alloc_vao_buffer(ssize_t vao_idx, GLsizeiptr size, size_t bufnum, GLenum usage); void* alloc_and_map_vao_buffer(ssize_t vao_idx, GLsizeiptr size, size_t bufnum, GLenum usage, GLenum access); void unmap_vao_buffer(ssize_t vao_idx, size_t bufnum); void* map_vao_buffer(ssize_t vao_idx, size_t bufnum, GLenum access); void bind_program(int program); void bind_vertex_array(ssize_t vao_idx); void bind_vao_uniform_buffer(ssize_t vao_idx, size_t bufnum, GLuint block_index); void unbind_vertex_array(void); void unbind_program(void); GLuint compile_shader(GLenum shader_type, const char *source); kitty-0.15.0/kitty/glfw-wrapper.c000066400000000000000000000664051356737523400167200ustar00rootroot00000000000000 #include "data-types.h" #include "glfw-wrapper.h" #include static void* handle = NULL; #define fail(msg, ...) { snprintf(buf, sizeof(buf), msg, __VA_ARGS__); return buf; } const char* load_glfw(const char* path) { static char buf[2048]; handle = dlopen(path, RTLD_LAZY); if (handle == NULL) fail("Failed to dlopen %s with error: %s", path, dlerror()); dlerror(); *(void **) (&glfwInit_impl) = dlsym(handle, "glfwInit"); if (glfwInit_impl == NULL) fail("Failed to load glfw function glfwInit with error: %s", dlerror()); *(void **) (&glfwRunMainLoop_impl) = dlsym(handle, "glfwRunMainLoop"); if (glfwRunMainLoop_impl == NULL) fail("Failed to load glfw function glfwRunMainLoop with error: %s", dlerror()); *(void **) (&glfwStopMainLoop_impl) = dlsym(handle, "glfwStopMainLoop"); if (glfwStopMainLoop_impl == NULL) fail("Failed to load glfw function glfwStopMainLoop with error: %s", dlerror()); *(void **) (&glfwAddTimer_impl) = dlsym(handle, "glfwAddTimer"); if (glfwAddTimer_impl == NULL) fail("Failed to load glfw function glfwAddTimer with error: %s", dlerror()); *(void **) (&glfwUpdateTimer_impl) = dlsym(handle, "glfwUpdateTimer"); if (glfwUpdateTimer_impl == NULL) fail("Failed to load glfw function glfwUpdateTimer with error: %s", dlerror()); *(void **) (&glfwRemoveTimer_impl) = dlsym(handle, "glfwRemoveTimer"); if (glfwRemoveTimer_impl == NULL) fail("Failed to load glfw function glfwRemoveTimer with error: %s", dlerror()); *(void **) (&glfwTerminate_impl) = dlsym(handle, "glfwTerminate"); if (glfwTerminate_impl == NULL) fail("Failed to load glfw function glfwTerminate with error: %s", dlerror()); *(void **) (&glfwInitHint_impl) = dlsym(handle, "glfwInitHint"); if (glfwInitHint_impl == NULL) fail("Failed to load glfw function glfwInitHint with error: %s", dlerror()); *(void **) (&glfwGetVersion_impl) = dlsym(handle, "glfwGetVersion"); if (glfwGetVersion_impl == NULL) fail("Failed to load glfw function glfwGetVersion with error: %s", dlerror()); *(void **) (&glfwGetVersionString_impl) = dlsym(handle, "glfwGetVersionString"); if (glfwGetVersionString_impl == NULL) fail("Failed to load glfw function glfwGetVersionString with error: %s", dlerror()); *(void **) (&glfwGetError_impl) = dlsym(handle, "glfwGetError"); if (glfwGetError_impl == NULL) fail("Failed to load glfw function glfwGetError with error: %s", dlerror()); *(void **) (&glfwSetErrorCallback_impl) = dlsym(handle, "glfwSetErrorCallback"); if (glfwSetErrorCallback_impl == NULL) fail("Failed to load glfw function glfwSetErrorCallback with error: %s", dlerror()); *(void **) (&glfwGetMonitors_impl) = dlsym(handle, "glfwGetMonitors"); if (glfwGetMonitors_impl == NULL) fail("Failed to load glfw function glfwGetMonitors with error: %s", dlerror()); *(void **) (&glfwGetPrimaryMonitor_impl) = dlsym(handle, "glfwGetPrimaryMonitor"); if (glfwGetPrimaryMonitor_impl == NULL) fail("Failed to load glfw function glfwGetPrimaryMonitor with error: %s", dlerror()); *(void **) (&glfwGetMonitorPos_impl) = dlsym(handle, "glfwGetMonitorPos"); if (glfwGetMonitorPos_impl == NULL) fail("Failed to load glfw function glfwGetMonitorPos with error: %s", dlerror()); *(void **) (&glfwGetMonitorWorkarea_impl) = dlsym(handle, "glfwGetMonitorWorkarea"); if (glfwGetMonitorWorkarea_impl == NULL) fail("Failed to load glfw function glfwGetMonitorWorkarea with error: %s", dlerror()); *(void **) (&glfwGetMonitorPhysicalSize_impl) = dlsym(handle, "glfwGetMonitorPhysicalSize"); if (glfwGetMonitorPhysicalSize_impl == NULL) fail("Failed to load glfw function glfwGetMonitorPhysicalSize with error: %s", dlerror()); *(void **) (&glfwGetMonitorContentScale_impl) = dlsym(handle, "glfwGetMonitorContentScale"); if (glfwGetMonitorContentScale_impl == NULL) fail("Failed to load glfw function glfwGetMonitorContentScale with error: %s", dlerror()); *(void **) (&glfwGetMonitorName_impl) = dlsym(handle, "glfwGetMonitorName"); if (glfwGetMonitorName_impl == NULL) fail("Failed to load glfw function glfwGetMonitorName with error: %s", dlerror()); *(void **) (&glfwSetMonitorUserPointer_impl) = dlsym(handle, "glfwSetMonitorUserPointer"); if (glfwSetMonitorUserPointer_impl == NULL) fail("Failed to load glfw function glfwSetMonitorUserPointer with error: %s", dlerror()); *(void **) (&glfwGetMonitorUserPointer_impl) = dlsym(handle, "glfwGetMonitorUserPointer"); if (glfwGetMonitorUserPointer_impl == NULL) fail("Failed to load glfw function glfwGetMonitorUserPointer with error: %s", dlerror()); *(void **) (&glfwSetMonitorCallback_impl) = dlsym(handle, "glfwSetMonitorCallback"); if (glfwSetMonitorCallback_impl == NULL) fail("Failed to load glfw function glfwSetMonitorCallback with error: %s", dlerror()); *(void **) (&glfwGetVideoModes_impl) = dlsym(handle, "glfwGetVideoModes"); if (glfwGetVideoModes_impl == NULL) fail("Failed to load glfw function glfwGetVideoModes with error: %s", dlerror()); *(void **) (&glfwGetVideoMode_impl) = dlsym(handle, "glfwGetVideoMode"); if (glfwGetVideoMode_impl == NULL) fail("Failed to load glfw function glfwGetVideoMode with error: %s", dlerror()); *(void **) (&glfwSetGamma_impl) = dlsym(handle, "glfwSetGamma"); if (glfwSetGamma_impl == NULL) fail("Failed to load glfw function glfwSetGamma with error: %s", dlerror()); *(void **) (&glfwGetGammaRamp_impl) = dlsym(handle, "glfwGetGammaRamp"); if (glfwGetGammaRamp_impl == NULL) fail("Failed to load glfw function glfwGetGammaRamp with error: %s", dlerror()); *(void **) (&glfwSetGammaRamp_impl) = dlsym(handle, "glfwSetGammaRamp"); if (glfwSetGammaRamp_impl == NULL) fail("Failed to load glfw function glfwSetGammaRamp with error: %s", dlerror()); *(void **) (&glfwDefaultWindowHints_impl) = dlsym(handle, "glfwDefaultWindowHints"); if (glfwDefaultWindowHints_impl == NULL) fail("Failed to load glfw function glfwDefaultWindowHints with error: %s", dlerror()); *(void **) (&glfwWindowHint_impl) = dlsym(handle, "glfwWindowHint"); if (glfwWindowHint_impl == NULL) fail("Failed to load glfw function glfwWindowHint with error: %s", dlerror()); *(void **) (&glfwWindowHintString_impl) = dlsym(handle, "glfwWindowHintString"); if (glfwWindowHintString_impl == NULL) fail("Failed to load glfw function glfwWindowHintString with error: %s", dlerror()); *(void **) (&glfwCreateWindow_impl) = dlsym(handle, "glfwCreateWindow"); if (glfwCreateWindow_impl == NULL) fail("Failed to load glfw function glfwCreateWindow with error: %s", dlerror()); *(void **) (&glfwToggleFullscreen_impl) = dlsym(handle, "glfwToggleFullscreen"); if (glfwToggleFullscreen_impl == NULL) fail("Failed to load glfw function glfwToggleFullscreen with error: %s", dlerror()); *(void **) (&glfwDestroyWindow_impl) = dlsym(handle, "glfwDestroyWindow"); if (glfwDestroyWindow_impl == NULL) fail("Failed to load glfw function glfwDestroyWindow with error: %s", dlerror()); *(void **) (&glfwWindowShouldClose_impl) = dlsym(handle, "glfwWindowShouldClose"); if (glfwWindowShouldClose_impl == NULL) fail("Failed to load glfw function glfwWindowShouldClose with error: %s", dlerror()); *(void **) (&glfwSetWindowShouldClose_impl) = dlsym(handle, "glfwSetWindowShouldClose"); if (glfwSetWindowShouldClose_impl == NULL) fail("Failed to load glfw function glfwSetWindowShouldClose with error: %s", dlerror()); *(void **) (&glfwSetWindowTitle_impl) = dlsym(handle, "glfwSetWindowTitle"); if (glfwSetWindowTitle_impl == NULL) fail("Failed to load glfw function glfwSetWindowTitle with error: %s", dlerror()); *(void **) (&glfwSetWindowIcon_impl) = dlsym(handle, "glfwSetWindowIcon"); if (glfwSetWindowIcon_impl == NULL) fail("Failed to load glfw function glfwSetWindowIcon with error: %s", dlerror()); *(void **) (&glfwGetWindowPos_impl) = dlsym(handle, "glfwGetWindowPos"); if (glfwGetWindowPos_impl == NULL) fail("Failed to load glfw function glfwGetWindowPos with error: %s", dlerror()); *(void **) (&glfwSetWindowPos_impl) = dlsym(handle, "glfwSetWindowPos"); if (glfwSetWindowPos_impl == NULL) fail("Failed to load glfw function glfwSetWindowPos with error: %s", dlerror()); *(void **) (&glfwGetWindowSize_impl) = dlsym(handle, "glfwGetWindowSize"); if (glfwGetWindowSize_impl == NULL) fail("Failed to load glfw function glfwGetWindowSize with error: %s", dlerror()); *(void **) (&glfwSetWindowSizeLimits_impl) = dlsym(handle, "glfwSetWindowSizeLimits"); if (glfwSetWindowSizeLimits_impl == NULL) fail("Failed to load glfw function glfwSetWindowSizeLimits with error: %s", dlerror()); *(void **) (&glfwSetWindowAspectRatio_impl) = dlsym(handle, "glfwSetWindowAspectRatio"); if (glfwSetWindowAspectRatio_impl == NULL) fail("Failed to load glfw function glfwSetWindowAspectRatio with error: %s", dlerror()); *(void **) (&glfwSetWindowSize_impl) = dlsym(handle, "glfwSetWindowSize"); if (glfwSetWindowSize_impl == NULL) fail("Failed to load glfw function glfwSetWindowSize with error: %s", dlerror()); *(void **) (&glfwGetFramebufferSize_impl) = dlsym(handle, "glfwGetFramebufferSize"); if (glfwGetFramebufferSize_impl == NULL) fail("Failed to load glfw function glfwGetFramebufferSize with error: %s", dlerror()); *(void **) (&glfwGetWindowFrameSize_impl) = dlsym(handle, "glfwGetWindowFrameSize"); if (glfwGetWindowFrameSize_impl == NULL) fail("Failed to load glfw function glfwGetWindowFrameSize with error: %s", dlerror()); *(void **) (&glfwGetWindowContentScale_impl) = dlsym(handle, "glfwGetWindowContentScale"); if (glfwGetWindowContentScale_impl == NULL) fail("Failed to load glfw function glfwGetWindowContentScale with error: %s", dlerror()); *(void **) (&glfwGetDoubleClickInterval_impl) = dlsym(handle, "glfwGetDoubleClickInterval"); if (glfwGetDoubleClickInterval_impl == NULL) fail("Failed to load glfw function glfwGetDoubleClickInterval with error: %s", dlerror()); *(void **) (&glfwGetWindowOpacity_impl) = dlsym(handle, "glfwGetWindowOpacity"); if (glfwGetWindowOpacity_impl == NULL) fail("Failed to load glfw function glfwGetWindowOpacity with error: %s", dlerror()); *(void **) (&glfwSetWindowOpacity_impl) = dlsym(handle, "glfwSetWindowOpacity"); if (glfwSetWindowOpacity_impl == NULL) fail("Failed to load glfw function glfwSetWindowOpacity with error: %s", dlerror()); *(void **) (&glfwIconifyWindow_impl) = dlsym(handle, "glfwIconifyWindow"); if (glfwIconifyWindow_impl == NULL) fail("Failed to load glfw function glfwIconifyWindow with error: %s", dlerror()); *(void **) (&glfwRestoreWindow_impl) = dlsym(handle, "glfwRestoreWindow"); if (glfwRestoreWindow_impl == NULL) fail("Failed to load glfw function glfwRestoreWindow with error: %s", dlerror()); *(void **) (&glfwMaximizeWindow_impl) = dlsym(handle, "glfwMaximizeWindow"); if (glfwMaximizeWindow_impl == NULL) fail("Failed to load glfw function glfwMaximizeWindow with error: %s", dlerror()); *(void **) (&glfwShowWindow_impl) = dlsym(handle, "glfwShowWindow"); if (glfwShowWindow_impl == NULL) fail("Failed to load glfw function glfwShowWindow with error: %s", dlerror()); *(void **) (&glfwHideWindow_impl) = dlsym(handle, "glfwHideWindow"); if (glfwHideWindow_impl == NULL) fail("Failed to load glfw function glfwHideWindow with error: %s", dlerror()); *(void **) (&glfwFocusWindow_impl) = dlsym(handle, "glfwFocusWindow"); if (glfwFocusWindow_impl == NULL) fail("Failed to load glfw function glfwFocusWindow with error: %s", dlerror()); *(void **) (&glfwRequestWindowAttention_impl) = dlsym(handle, "glfwRequestWindowAttention"); if (glfwRequestWindowAttention_impl == NULL) fail("Failed to load glfw function glfwRequestWindowAttention with error: %s", dlerror()); *(void **) (&glfwWindowBell_impl) = dlsym(handle, "glfwWindowBell"); if (glfwWindowBell_impl == NULL) fail("Failed to load glfw function glfwWindowBell with error: %s", dlerror()); *(void **) (&glfwGetWindowMonitor_impl) = dlsym(handle, "glfwGetWindowMonitor"); if (glfwGetWindowMonitor_impl == NULL) fail("Failed to load glfw function glfwGetWindowMonitor with error: %s", dlerror()); *(void **) (&glfwSetWindowMonitor_impl) = dlsym(handle, "glfwSetWindowMonitor"); if (glfwSetWindowMonitor_impl == NULL) fail("Failed to load glfw function glfwSetWindowMonitor with error: %s", dlerror()); *(void **) (&glfwGetWindowAttrib_impl) = dlsym(handle, "glfwGetWindowAttrib"); if (glfwGetWindowAttrib_impl == NULL) fail("Failed to load glfw function glfwGetWindowAttrib with error: %s", dlerror()); *(void **) (&glfwSetWindowAttrib_impl) = dlsym(handle, "glfwSetWindowAttrib"); if (glfwSetWindowAttrib_impl == NULL) fail("Failed to load glfw function glfwSetWindowAttrib with error: %s", dlerror()); *(void **) (&glfwSetWindowUserPointer_impl) = dlsym(handle, "glfwSetWindowUserPointer"); if (glfwSetWindowUserPointer_impl == NULL) fail("Failed to load glfw function glfwSetWindowUserPointer with error: %s", dlerror()); *(void **) (&glfwGetWindowUserPointer_impl) = dlsym(handle, "glfwGetWindowUserPointer"); if (glfwGetWindowUserPointer_impl == NULL) fail("Failed to load glfw function glfwGetWindowUserPointer with error: %s", dlerror()); *(void **) (&glfwSetWindowPosCallback_impl) = dlsym(handle, "glfwSetWindowPosCallback"); if (glfwSetWindowPosCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowPosCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowSizeCallback_impl) = dlsym(handle, "glfwSetWindowSizeCallback"); if (glfwSetWindowSizeCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowSizeCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowCloseCallback_impl) = dlsym(handle, "glfwSetWindowCloseCallback"); if (glfwSetWindowCloseCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowCloseCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowRefreshCallback_impl) = dlsym(handle, "glfwSetWindowRefreshCallback"); if (glfwSetWindowRefreshCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowRefreshCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowFocusCallback_impl) = dlsym(handle, "glfwSetWindowFocusCallback"); if (glfwSetWindowFocusCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowFocusCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowOcclusionCallback_impl) = dlsym(handle, "glfwSetWindowOcclusionCallback"); if (glfwSetWindowOcclusionCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowOcclusionCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowIconifyCallback_impl) = dlsym(handle, "glfwSetWindowIconifyCallback"); if (glfwSetWindowIconifyCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowIconifyCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowMaximizeCallback_impl) = dlsym(handle, "glfwSetWindowMaximizeCallback"); if (glfwSetWindowMaximizeCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowMaximizeCallback with error: %s", dlerror()); *(void **) (&glfwSetFramebufferSizeCallback_impl) = dlsym(handle, "glfwSetFramebufferSizeCallback"); if (glfwSetFramebufferSizeCallback_impl == NULL) fail("Failed to load glfw function glfwSetFramebufferSizeCallback with error: %s", dlerror()); *(void **) (&glfwSetWindowContentScaleCallback_impl) = dlsym(handle, "glfwSetWindowContentScaleCallback"); if (glfwSetWindowContentScaleCallback_impl == NULL) fail("Failed to load glfw function glfwSetWindowContentScaleCallback with error: %s", dlerror()); *(void **) (&glfwPostEmptyEvent_impl) = dlsym(handle, "glfwPostEmptyEvent"); if (glfwPostEmptyEvent_impl == NULL) fail("Failed to load glfw function glfwPostEmptyEvent with error: %s", dlerror()); *(void **) (&glfwGetInputMode_impl) = dlsym(handle, "glfwGetInputMode"); if (glfwGetInputMode_impl == NULL) fail("Failed to load glfw function glfwGetInputMode with error: %s", dlerror()); *(void **) (&glfwSetInputMode_impl) = dlsym(handle, "glfwSetInputMode"); if (glfwSetInputMode_impl == NULL) fail("Failed to load glfw function glfwSetInputMode with error: %s", dlerror()); *(void **) (&glfwGetKeyName_impl) = dlsym(handle, "glfwGetKeyName"); if (glfwGetKeyName_impl == NULL) fail("Failed to load glfw function glfwGetKeyName with error: %s", dlerror()); *(void **) (&glfwGetNativeKeyForKey_impl) = dlsym(handle, "glfwGetNativeKeyForKey"); if (glfwGetNativeKeyForKey_impl == NULL) fail("Failed to load glfw function glfwGetNativeKeyForKey with error: %s", dlerror()); *(void **) (&glfwGetKey_impl) = dlsym(handle, "glfwGetKey"); if (glfwGetKey_impl == NULL) fail("Failed to load glfw function glfwGetKey with error: %s", dlerror()); *(void **) (&glfwGetMouseButton_impl) = dlsym(handle, "glfwGetMouseButton"); if (glfwGetMouseButton_impl == NULL) fail("Failed to load glfw function glfwGetMouseButton with error: %s", dlerror()); *(void **) (&glfwGetCursorPos_impl) = dlsym(handle, "glfwGetCursorPos"); if (glfwGetCursorPos_impl == NULL) fail("Failed to load glfw function glfwGetCursorPos with error: %s", dlerror()); *(void **) (&glfwSetCursorPos_impl) = dlsym(handle, "glfwSetCursorPos"); if (glfwSetCursorPos_impl == NULL) fail("Failed to load glfw function glfwSetCursorPos with error: %s", dlerror()); *(void **) (&glfwCreateCursor_impl) = dlsym(handle, "glfwCreateCursor"); if (glfwCreateCursor_impl == NULL) fail("Failed to load glfw function glfwCreateCursor with error: %s", dlerror()); *(void **) (&glfwCreateStandardCursor_impl) = dlsym(handle, "glfwCreateStandardCursor"); if (glfwCreateStandardCursor_impl == NULL) fail("Failed to load glfw function glfwCreateStandardCursor with error: %s", dlerror()); *(void **) (&glfwDestroyCursor_impl) = dlsym(handle, "glfwDestroyCursor"); if (glfwDestroyCursor_impl == NULL) fail("Failed to load glfw function glfwDestroyCursor with error: %s", dlerror()); *(void **) (&glfwSetCursor_impl) = dlsym(handle, "glfwSetCursor"); if (glfwSetCursor_impl == NULL) fail("Failed to load glfw function glfwSetCursor with error: %s", dlerror()); *(void **) (&glfwSetKeyboardCallback_impl) = dlsym(handle, "glfwSetKeyboardCallback"); if (glfwSetKeyboardCallback_impl == NULL) fail("Failed to load glfw function glfwSetKeyboardCallback with error: %s", dlerror()); *(void **) (&glfwUpdateIMEState_impl) = dlsym(handle, "glfwUpdateIMEState"); if (glfwUpdateIMEState_impl == NULL) fail("Failed to load glfw function glfwUpdateIMEState with error: %s", dlerror()); *(void **) (&glfwSetMouseButtonCallback_impl) = dlsym(handle, "glfwSetMouseButtonCallback"); if (glfwSetMouseButtonCallback_impl == NULL) fail("Failed to load glfw function glfwSetMouseButtonCallback with error: %s", dlerror()); *(void **) (&glfwSetCursorPosCallback_impl) = dlsym(handle, "glfwSetCursorPosCallback"); if (glfwSetCursorPosCallback_impl == NULL) fail("Failed to load glfw function glfwSetCursorPosCallback with error: %s", dlerror()); *(void **) (&glfwSetCursorEnterCallback_impl) = dlsym(handle, "glfwSetCursorEnterCallback"); if (glfwSetCursorEnterCallback_impl == NULL) fail("Failed to load glfw function glfwSetCursorEnterCallback with error: %s", dlerror()); *(void **) (&glfwSetScrollCallback_impl) = dlsym(handle, "glfwSetScrollCallback"); if (glfwSetScrollCallback_impl == NULL) fail("Failed to load glfw function glfwSetScrollCallback with error: %s", dlerror()); *(void **) (&glfwSetDropCallback_impl) = dlsym(handle, "glfwSetDropCallback"); if (glfwSetDropCallback_impl == NULL) fail("Failed to load glfw function glfwSetDropCallback with error: %s", dlerror()); *(void **) (&glfwSetLiveResizeCallback_impl) = dlsym(handle, "glfwSetLiveResizeCallback"); if (glfwSetLiveResizeCallback_impl == NULL) fail("Failed to load glfw function glfwSetLiveResizeCallback with error: %s", dlerror()); *(void **) (&glfwJoystickPresent_impl) = dlsym(handle, "glfwJoystickPresent"); if (glfwJoystickPresent_impl == NULL) fail("Failed to load glfw function glfwJoystickPresent with error: %s", dlerror()); *(void **) (&glfwGetJoystickAxes_impl) = dlsym(handle, "glfwGetJoystickAxes"); if (glfwGetJoystickAxes_impl == NULL) fail("Failed to load glfw function glfwGetJoystickAxes with error: %s", dlerror()); *(void **) (&glfwGetJoystickButtons_impl) = dlsym(handle, "glfwGetJoystickButtons"); if (glfwGetJoystickButtons_impl == NULL) fail("Failed to load glfw function glfwGetJoystickButtons with error: %s", dlerror()); *(void **) (&glfwGetJoystickHats_impl) = dlsym(handle, "glfwGetJoystickHats"); if (glfwGetJoystickHats_impl == NULL) fail("Failed to load glfw function glfwGetJoystickHats with error: %s", dlerror()); *(void **) (&glfwGetJoystickName_impl) = dlsym(handle, "glfwGetJoystickName"); if (glfwGetJoystickName_impl == NULL) fail("Failed to load glfw function glfwGetJoystickName with error: %s", dlerror()); *(void **) (&glfwGetJoystickGUID_impl) = dlsym(handle, "glfwGetJoystickGUID"); if (glfwGetJoystickGUID_impl == NULL) fail("Failed to load glfw function glfwGetJoystickGUID with error: %s", dlerror()); *(void **) (&glfwSetJoystickUserPointer_impl) = dlsym(handle, "glfwSetJoystickUserPointer"); if (glfwSetJoystickUserPointer_impl == NULL) fail("Failed to load glfw function glfwSetJoystickUserPointer with error: %s", dlerror()); *(void **) (&glfwGetJoystickUserPointer_impl) = dlsym(handle, "glfwGetJoystickUserPointer"); if (glfwGetJoystickUserPointer_impl == NULL) fail("Failed to load glfw function glfwGetJoystickUserPointer with error: %s", dlerror()); *(void **) (&glfwJoystickIsGamepad_impl) = dlsym(handle, "glfwJoystickIsGamepad"); if (glfwJoystickIsGamepad_impl == NULL) fail("Failed to load glfw function glfwJoystickIsGamepad with error: %s", dlerror()); *(void **) (&glfwSetJoystickCallback_impl) = dlsym(handle, "glfwSetJoystickCallback"); if (glfwSetJoystickCallback_impl == NULL) fail("Failed to load glfw function glfwSetJoystickCallback with error: %s", dlerror()); *(void **) (&glfwUpdateGamepadMappings_impl) = dlsym(handle, "glfwUpdateGamepadMappings"); if (glfwUpdateGamepadMappings_impl == NULL) fail("Failed to load glfw function glfwUpdateGamepadMappings with error: %s", dlerror()); *(void **) (&glfwGetGamepadName_impl) = dlsym(handle, "glfwGetGamepadName"); if (glfwGetGamepadName_impl == NULL) fail("Failed to load glfw function glfwGetGamepadName with error: %s", dlerror()); *(void **) (&glfwGetGamepadState_impl) = dlsym(handle, "glfwGetGamepadState"); if (glfwGetGamepadState_impl == NULL) fail("Failed to load glfw function glfwGetGamepadState with error: %s", dlerror()); *(void **) (&glfwSetClipboardString_impl) = dlsym(handle, "glfwSetClipboardString"); if (glfwSetClipboardString_impl == NULL) fail("Failed to load glfw function glfwSetClipboardString with error: %s", dlerror()); *(void **) (&glfwGetClipboardString_impl) = dlsym(handle, "glfwGetClipboardString"); if (glfwGetClipboardString_impl == NULL) fail("Failed to load glfw function glfwGetClipboardString with error: %s", dlerror()); *(void **) (&glfwGetTime_impl) = dlsym(handle, "glfwGetTime"); if (glfwGetTime_impl == NULL) fail("Failed to load glfw function glfwGetTime with error: %s", dlerror()); *(void **) (&glfwSetTime_impl) = dlsym(handle, "glfwSetTime"); if (glfwSetTime_impl == NULL) fail("Failed to load glfw function glfwSetTime with error: %s", dlerror()); *(void **) (&glfwGetTimerValue_impl) = dlsym(handle, "glfwGetTimerValue"); if (glfwGetTimerValue_impl == NULL) fail("Failed to load glfw function glfwGetTimerValue with error: %s", dlerror()); *(void **) (&glfwGetTimerFrequency_impl) = dlsym(handle, "glfwGetTimerFrequency"); if (glfwGetTimerFrequency_impl == NULL) fail("Failed to load glfw function glfwGetTimerFrequency with error: %s", dlerror()); *(void **) (&glfwMakeContextCurrent_impl) = dlsym(handle, "glfwMakeContextCurrent"); if (glfwMakeContextCurrent_impl == NULL) fail("Failed to load glfw function glfwMakeContextCurrent with error: %s", dlerror()); *(void **) (&glfwGetCurrentContext_impl) = dlsym(handle, "glfwGetCurrentContext"); if (glfwGetCurrentContext_impl == NULL) fail("Failed to load glfw function glfwGetCurrentContext with error: %s", dlerror()); *(void **) (&glfwSwapBuffers_impl) = dlsym(handle, "glfwSwapBuffers"); if (glfwSwapBuffers_impl == NULL) fail("Failed to load glfw function glfwSwapBuffers with error: %s", dlerror()); *(void **) (&glfwSwapInterval_impl) = dlsym(handle, "glfwSwapInterval"); if (glfwSwapInterval_impl == NULL) fail("Failed to load glfw function glfwSwapInterval with error: %s", dlerror()); *(void **) (&glfwExtensionSupported_impl) = dlsym(handle, "glfwExtensionSupported"); if (glfwExtensionSupported_impl == NULL) fail("Failed to load glfw function glfwExtensionSupported with error: %s", dlerror()); *(void **) (&glfwGetProcAddress_impl) = dlsym(handle, "glfwGetProcAddress"); if (glfwGetProcAddress_impl == NULL) fail("Failed to load glfw function glfwGetProcAddress with error: %s", dlerror()); *(void **) (&glfwVulkanSupported_impl) = dlsym(handle, "glfwVulkanSupported"); if (glfwVulkanSupported_impl == NULL) fail("Failed to load glfw function glfwVulkanSupported with error: %s", dlerror()); *(void **) (&glfwGetRequiredInstanceExtensions_impl) = dlsym(handle, "glfwGetRequiredInstanceExtensions"); if (glfwGetRequiredInstanceExtensions_impl == NULL) fail("Failed to load glfw function glfwGetRequiredInstanceExtensions with error: %s", dlerror()); *(void **) (&glfwGetCocoaWindow_impl) = dlsym(handle, "glfwGetCocoaWindow"); *(void **) (&glfwGetNSGLContext_impl) = dlsym(handle, "glfwGetNSGLContext"); *(void **) (&glfwGetCocoaMonitor_impl) = dlsym(handle, "glfwGetCocoaMonitor"); *(void **) (&glfwSetCocoaTextInputFilter_impl) = dlsym(handle, "glfwSetCocoaTextInputFilter"); *(void **) (&glfwSetCocoaToggleFullscreenIntercept_impl) = dlsym(handle, "glfwSetCocoaToggleFullscreenIntercept"); *(void **) (&glfwSetApplicationShouldHandleReopen_impl) = dlsym(handle, "glfwSetApplicationShouldHandleReopen"); *(void **) (&glfwSetApplicationWillFinishLaunching_impl) = dlsym(handle, "glfwSetApplicationWillFinishLaunching"); *(void **) (&glfwGetCocoaKeyEquivalent_impl) = dlsym(handle, "glfwGetCocoaKeyEquivalent"); *(void **) (&glfwCocoaRequestRenderFrame_impl) = dlsym(handle, "glfwCocoaRequestRenderFrame"); *(void **) (&glfwGetX11Display_impl) = dlsym(handle, "glfwGetX11Display"); *(void **) (&glfwGetX11Window_impl) = dlsym(handle, "glfwGetX11Window"); *(void **) (&glfwSetPrimarySelectionString_impl) = dlsym(handle, "glfwSetPrimarySelectionString"); *(void **) (&glfwGetPrimarySelectionString_impl) = dlsym(handle, "glfwGetPrimarySelectionString"); *(void **) (&glfwGetNativeKeyForName_impl) = dlsym(handle, "glfwGetNativeKeyForName"); *(void **) (&glfwRequestWaylandFrameEvent_impl) = dlsym(handle, "glfwRequestWaylandFrameEvent"); *(void **) (&glfwDBusUserNotify_impl) = dlsym(handle, "glfwDBusUserNotify"); *(void **) (&glfwDBusSetUserNotificationHandler_impl) = dlsym(handle, "glfwDBusSetUserNotificationHandler"); return NULL; } void unload_glfw(void) { if (handle) { dlclose(handle); handle = NULL; } } kitty-0.15.0/kitty/glfw-wrapper.h000066400000000000000000002307451356737523400167250ustar00rootroot00000000000000// // THIS FILE IS GENERATED BY glfw.py // // SAVE YOURSELF SOME TIME, DO NOT MANUALLY EDIT // #pragma once #include #include #include "monotonic.h" /*! @name GLFW version macros * @{ */ /*! @brief The major version number of the GLFW library. * * This is incremented when the API is changed in non-compatible ways. * @ingroup init */ #define GLFW_VERSION_MAJOR 3 /*! @brief The minor version number of the GLFW library. * * This is incremented when features are added to the API but it remains * backward-compatible. * @ingroup init */ #define GLFW_VERSION_MINOR 4 /*! @brief The revision number of the GLFW library. * * This is incremented when a bug fix release is made that does not contain any * API changes. * @ingroup init */ #define GLFW_VERSION_REVISION 0 /*! @} */ /*! @name Key and button actions * @{ */ /*! @brief The key or mouse button was released. * * The key or mouse button was released. * * @ingroup input */ #define GLFW_RELEASE 0 /*! @brief The key or mouse button was pressed. * * The key or mouse button was pressed. * * @ingroup input */ #define GLFW_PRESS 1 /*! @brief The key was held down until it repeated. * * The key was held down until it repeated. * * @ingroup input */ #define GLFW_REPEAT 2 /*! @} */ /*! @defgroup hat_state Joystick hat states * @brief Joystick hat states. * * See [joystick hat input](@ref joystick_hat) for how these are used. * * @ingroup input * @{ */ #define GLFW_HAT_CENTERED 0 #define GLFW_HAT_UP 1 #define GLFW_HAT_RIGHT 2 #define GLFW_HAT_DOWN 4 #define GLFW_HAT_LEFT 8 #define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) #define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) #define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) #define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) /*! @} */ /*! @defgroup keys Keyboard keys * @brief Keyboard key IDs. * * See [key input](@ref input_key) for how these are used. * * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), * but re-arranged to map to 7-bit ASCII for printable keys (function keys are * put in the 256+ range). * * The naming of the key codes follow these rules: * - The US keyboard layout is used * - Names of printable alphanumeric characters are used (e.g. "A", "R", * "3", etc.) * - For non-alphanumeric characters, Unicode:ish names are used (e.g. * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not * correspond to the Unicode standard (usually for brevity) * - Keys that lack a clear US mapping are named "WORLD_x" * - For non-printable keys, custom names are used (e.g. "F4", * "BACKSPACE", etc.) * * @ingroup input * @{ */ /* The unknown key */ #define GLFW_KEY_UNKNOWN -1 /* Printable keys */ #define GLFW_KEY_SPACE 32 #define GLFW_KEY_EXCLAM 33 /* ! */ #define GLFW_KEY_DOUBLE_QUOTE 34 /* " */ #define GLFW_KEY_NUMBER_SIGN 35 /* # */ #define GLFW_KEY_DOLLAR 36 /* $ */ #define GLFW_KEY_AMPERSAND 38 /* & */ #define GLFW_KEY_APOSTROPHE 39 /* ' */ #define GLFW_KEY_PARENTHESIS_LEFT 40 /* ( */ #define GLFW_KEY_PARENTHESIS_RIGHT 41 /* ) */ #define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ #define GLFW_KEY_PERIOD 46 /* . */ #define GLFW_KEY_SLASH 47 /* / */ #define GLFW_KEY_0 48 #define GLFW_KEY_1 49 #define GLFW_KEY_2 50 #define GLFW_KEY_3 51 #define GLFW_KEY_4 52 #define GLFW_KEY_5 53 #define GLFW_KEY_6 54 #define GLFW_KEY_7 55 #define GLFW_KEY_8 56 #define GLFW_KEY_9 57 #define GLFW_KEY_COLON 58 /* : */ #define GLFW_KEY_SEMICOLON 59 /* ; */ #define GLFW_KEY_LESS 60 /* < */ #define GLFW_KEY_EQUAL 61 /* = */ #define GLFW_KEY_GREATER 62 /* > */ #define GLFW_KEY_AT 64 /* @ */ #define GLFW_KEY_A 65 #define GLFW_KEY_B 66 #define GLFW_KEY_C 67 #define GLFW_KEY_D 68 #define GLFW_KEY_E 69 #define GLFW_KEY_F 70 #define GLFW_KEY_G 71 #define GLFW_KEY_H 72 #define GLFW_KEY_I 73 #define GLFW_KEY_J 74 #define GLFW_KEY_K 75 #define GLFW_KEY_L 76 #define GLFW_KEY_M 77 #define GLFW_KEY_N 78 #define GLFW_KEY_O 79 #define GLFW_KEY_P 80 #define GLFW_KEY_Q 81 #define GLFW_KEY_R 82 #define GLFW_KEY_S 83 #define GLFW_KEY_T 84 #define GLFW_KEY_U 85 #define GLFW_KEY_V 86 #define GLFW_KEY_W 87 #define GLFW_KEY_X 88 #define GLFW_KEY_Y 89 #define GLFW_KEY_Z 90 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ #define GLFW_KEY_BACKSLASH 92 /* \ */ #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ #define GLFW_KEY_UNDERSCORE 95 /* _ */ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ #define GLFW_KEY_PARAGRAPH 167 /* § */ #define GLFW_KEY_MASCULINE 186 /* º */ #define GLFW_KEY_A_GRAVE 192 /* À */ #define GLFW_KEY_A_DIAERESIS 196 /* Ä */ #define GLFW_KEY_A_RING 197 /* Ã… */ #define GLFW_KEY_AE 198 /* Æ */ #define GLFW_KEY_C_CEDILLA 199 /* Ç */ #define GLFW_KEY_E_GRAVE 200 /* È */ #define GLFW_KEY_E_ACUTE 201 /* É */ #define GLFW_KEY_I_GRAVE 204 /* ÃŒ */ #define GLFW_KEY_N_TILDE 209 /* Ñ */ #define GLFW_KEY_O_GRAVE 210 /* Ã’ */ #define GLFW_KEY_O_DIAERESIS 214 /* Ö */ #define GLFW_KEY_O_SLASH 216 /* Ø */ #define GLFW_KEY_U_GRAVE 217 /* Ù */ #define GLFW_KEY_U_DIAERESIS 220 /* Ü */ #define GLFW_KEY_S_SHARP 222 /* ß */ #define GLFW_KEY_CYRILLIC_A 223 /* Ð */ #define GLFW_KEY_CYRILLIC_BE 224 /* Б */ #define GLFW_KEY_CYRILLIC_VE 225 /* Ð’ */ #define GLFW_KEY_CYRILLIC_GHE 226 /* Г */ #define GLFW_KEY_CYRILLIC_DE 227 /* Д */ #define GLFW_KEY_CYRILLIC_IE 228 /* Е */ #define GLFW_KEY_CYRILLIC_ZHE 229 /* Ж */ #define GLFW_KEY_CYRILLIC_ZE 230 /* З */ #define GLFW_KEY_CYRILLIC_I 231 /* И */ #define GLFW_KEY_CYRILLIC_SHORT_I 232 /* Й */ #define GLFW_KEY_CYRILLIC_KA 233 /* К */ #define GLFW_KEY_CYRILLIC_EL 234 /* Л */ #define GLFW_KEY_CYRILLIC_EM 235 /* М */ #define GLFW_KEY_CYRILLIC_EN 236 /* Ð */ #define GLFW_KEY_CYRILLIC_O 237 /* О */ #define GLFW_KEY_CYRILLIC_PE 238 /* П */ #define GLFW_KEY_CYRILLIC_ER 239 /* Р */ #define GLFW_KEY_CYRILLIC_ES 240 /* С */ #define GLFW_KEY_CYRILLIC_TE 241 /* Т */ #define GLFW_KEY_CYRILLIC_U 242 /* У */ #define GLFW_KEY_CYRILLIC_EF 243 /* Ф */ #define GLFW_KEY_CYRILLIC_HA 244 /* Ð¥ */ #define GLFW_KEY_CYRILLIC_TSE 245 /* Ц */ #define GLFW_KEY_CYRILLIC_CHE 246 /* Ч */ #define GLFW_KEY_CYRILLIC_SHA 247 /* Ш */ #define GLFW_KEY_CYRILLIC_SHCHA 248 /* Щ */ #define GLFW_KEY_CYRILLIC_HARD_SIGN 249 /* Ъ */ #define GLFW_KEY_CYRILLIC_YERU 250 /* Ы */ #define GLFW_KEY_CYRILLIC_SOFT_SIGN 251 /* Ь */ #define GLFW_KEY_CYRILLIC_E 252 /* Э */ #define GLFW_KEY_CYRILLIC_YU 253 /* Ю */ #define GLFW_KEY_CYRILLIC_YA 254 /* Я */ #define GLFW_KEY_CYRILLIC_IO 255 /* Ð */ #define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_CYRILLIC_IO /* Function keys */ #define GLFW_KEY_ESCAPE 256 #define GLFW_KEY_ENTER 257 #define GLFW_KEY_TAB 258 #define GLFW_KEY_BACKSPACE 259 #define GLFW_KEY_INSERT 260 #define GLFW_KEY_DELETE 261 #define GLFW_KEY_RIGHT 262 #define GLFW_KEY_LEFT 263 #define GLFW_KEY_DOWN 264 #define GLFW_KEY_UP 265 #define GLFW_KEY_PAGE_UP 266 #define GLFW_KEY_PAGE_DOWN 267 #define GLFW_KEY_HOME 268 #define GLFW_KEY_END 269 #define GLFW_KEY_CAPS_LOCK 280 #define GLFW_KEY_SCROLL_LOCK 281 #define GLFW_KEY_NUM_LOCK 282 #define GLFW_KEY_PRINT_SCREEN 283 #define GLFW_KEY_PAUSE 284 #define GLFW_KEY_F1 290 #define GLFW_KEY_F2 291 #define GLFW_KEY_F3 292 #define GLFW_KEY_F4 293 #define GLFW_KEY_F5 294 #define GLFW_KEY_F6 295 #define GLFW_KEY_F7 296 #define GLFW_KEY_F8 297 #define GLFW_KEY_F9 298 #define GLFW_KEY_F10 299 #define GLFW_KEY_F11 300 #define GLFW_KEY_F12 301 #define GLFW_KEY_F13 302 #define GLFW_KEY_F14 303 #define GLFW_KEY_F15 304 #define GLFW_KEY_F16 305 #define GLFW_KEY_F17 306 #define GLFW_KEY_F18 307 #define GLFW_KEY_F19 308 #define GLFW_KEY_F20 309 #define GLFW_KEY_F21 310 #define GLFW_KEY_F22 311 #define GLFW_KEY_F23 312 #define GLFW_KEY_F24 313 #define GLFW_KEY_F25 314 #define GLFW_KEY_KP_0 320 #define GLFW_KEY_KP_1 321 #define GLFW_KEY_KP_2 322 #define GLFW_KEY_KP_3 323 #define GLFW_KEY_KP_4 324 #define GLFW_KEY_KP_5 325 #define GLFW_KEY_KP_6 326 #define GLFW_KEY_KP_7 327 #define GLFW_KEY_KP_8 328 #define GLFW_KEY_KP_9 329 #define GLFW_KEY_KP_DECIMAL 330 #define GLFW_KEY_KP_DIVIDE 331 #define GLFW_KEY_KP_MULTIPLY 332 #define GLFW_KEY_KP_SUBTRACT 333 #define GLFW_KEY_KP_ADD 334 #define GLFW_KEY_KP_ENTER 335 #define GLFW_KEY_KP_EQUAL 336 #define GLFW_KEY_LEFT_SHIFT 340 #define GLFW_KEY_LEFT_CONTROL 341 #define GLFW_KEY_LEFT_ALT 342 #define GLFW_KEY_LEFT_SUPER 343 #define GLFW_KEY_RIGHT_SHIFT 344 #define GLFW_KEY_RIGHT_CONTROL 345 #define GLFW_KEY_RIGHT_ALT 346 #define GLFW_KEY_RIGHT_SUPER 347 #define GLFW_KEY_MENU 348 #define GLFW_KEY_LAST GLFW_KEY_MENU /*! @} */ /*! @defgroup mods Modifier key flags * @brief Modifier key flags. * * See [key input](@ref input_key) for how these are used. * * @ingroup input * @{ */ /*! @brief If this bit is set one or more Shift keys were held down. * * If this bit is set one or more Shift keys were held down. */ #define GLFW_MOD_SHIFT 0x0001 /*! @brief If this bit is set one or more Control keys were held down. * * If this bit is set one or more Control keys were held down. */ #define GLFW_MOD_CONTROL 0x0002 /*! @brief If this bit is set one or more Alt keys were held down. * * If this bit is set one or more Alt keys were held down. */ #define GLFW_MOD_ALT 0x0004 /*! @brief If this bit is set one or more Super keys were held down. * * If this bit is set one or more Super keys were held down. */ #define GLFW_MOD_SUPER 0x0008 /*! @brief If this bit is set the Caps Lock key is enabled. * * If this bit is set the Caps Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_CAPS_LOCK 0x0010 /*! @brief If this bit is set the Num Lock key is enabled. * * If this bit is set the Num Lock key is enabled and the @ref * GLFW_LOCK_KEY_MODS input mode is set. */ #define GLFW_MOD_NUM_LOCK 0x0020 /*! @} */ /*! @defgroup buttons Mouse buttons * @brief Mouse button IDs. * * See [mouse button input](@ref input_mouse_button) for how these are used. * * @ingroup input * @{ */ #define GLFW_MOUSE_BUTTON_1 0 #define GLFW_MOUSE_BUTTON_2 1 #define GLFW_MOUSE_BUTTON_3 2 #define GLFW_MOUSE_BUTTON_4 3 #define GLFW_MOUSE_BUTTON_5 4 #define GLFW_MOUSE_BUTTON_6 5 #define GLFW_MOUSE_BUTTON_7 6 #define GLFW_MOUSE_BUTTON_8 7 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 /*! @} */ /*! @defgroup joysticks Joysticks * @brief Joystick IDs. * * See [joystick input](@ref joystick) for how these are used. * * @ingroup input * @{ */ #define GLFW_JOYSTICK_1 0 #define GLFW_JOYSTICK_2 1 #define GLFW_JOYSTICK_3 2 #define GLFW_JOYSTICK_4 3 #define GLFW_JOYSTICK_5 4 #define GLFW_JOYSTICK_6 5 #define GLFW_JOYSTICK_7 6 #define GLFW_JOYSTICK_8 7 #define GLFW_JOYSTICK_9 8 #define GLFW_JOYSTICK_10 9 #define GLFW_JOYSTICK_11 10 #define GLFW_JOYSTICK_12 11 #define GLFW_JOYSTICK_13 12 #define GLFW_JOYSTICK_14 13 #define GLFW_JOYSTICK_15 14 #define GLFW_JOYSTICK_16 15 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 /*! @} */ /*! @defgroup gamepad_buttons Gamepad buttons * @brief Gamepad buttons. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_BUTTON_A 0 #define GLFW_GAMEPAD_BUTTON_B 1 #define GLFW_GAMEPAD_BUTTON_X 2 #define GLFW_GAMEPAD_BUTTON_Y 3 #define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 #define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 #define GLFW_GAMEPAD_BUTTON_BACK 6 #define GLFW_GAMEPAD_BUTTON_START 7 #define GLFW_GAMEPAD_BUTTON_GUIDE 8 #define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 #define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 #define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 #define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 #define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 #define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 #define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT #define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A #define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B #define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X #define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y /*! @} */ /*! @defgroup gamepad_axes Gamepad axes * @brief Gamepad axes. * * See @ref gamepad for how these are used. * * @ingroup input * @{ */ #define GLFW_GAMEPAD_AXIS_LEFT_X 0 #define GLFW_GAMEPAD_AXIS_LEFT_Y 1 #define GLFW_GAMEPAD_AXIS_RIGHT_X 2 #define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 #define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 #define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 #define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER /*! @} */ /*! @defgroup errors Error codes * @brief Error codes. * * See [error handling](@ref error_handling) for how these are used. * * @ingroup init * @{ */ /*! @brief No error has occurred. * * No error has occurred. * * @analysis Yay. */ #define GLFW_NO_ERROR 0 /*! @brief GLFW has not been initialized. * * This occurs if a GLFW function was called that must not be called unless the * library is [initialized](@ref intro_init). * * @analysis Application programmer error. Initialize GLFW before calling any * function that requires initialization. */ #define GLFW_NOT_INITIALIZED 0x00010001 /*! @brief No context is current for this thread. * * This occurs if a GLFW function was called that needs and operates on the * current OpenGL or OpenGL ES context but no context is current on the calling * thread. One such function is @ref glfwSwapInterval. * * @analysis Application programmer error. Ensure a context is current before * calling functions that require a current context. */ #define GLFW_NO_CURRENT_CONTEXT 0x00010002 /*! @brief One of the arguments to the function was an invalid enum value. * * One of the arguments to the function was an invalid enum value, for example * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_ENUM 0x00010003 /*! @brief One of the arguments to the function was an invalid value. * * One of the arguments to the function was an invalid value, for example * requesting a non-existent OpenGL or OpenGL ES version like 2.7. * * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead * result in a @ref GLFW_VERSION_UNAVAILABLE error. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_INVALID_VALUE 0x00010004 /*! @brief A memory allocation failed. * * A memory allocation failed. * * @analysis A bug in GLFW or the underlying operating system. Report the bug * to our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_OUT_OF_MEMORY 0x00010005 /*! @brief GLFW could not find support for the requested API on the system. * * GLFW could not find support for the requested API on the system. * * @analysis The installed graphics driver does not support the requested * API, or does not support it via the chosen context creation backend. * Below are a few examples. * * @par * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only * supports OpenGL ES via EGL, while Nvidia and Intel only support it via * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary * driver. Older graphics drivers do not support Vulkan. */ #define GLFW_API_UNAVAILABLE 0x00010006 /*! @brief The requested OpenGL or OpenGL ES version is not available. * * The requested OpenGL or OpenGL ES version (including any requested context * or framebuffer hints) is not available on this machine. * * @analysis The machine does not support your requirements. If your * application is sufficiently flexible, downgrade your requirements and try * again. Otherwise, inform the user that their machine does not match your * requirements. * * @par * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 * comes out before the 4.x series gets that far, also fail with this error and * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions * will exist. */ #define GLFW_VERSION_UNAVAILABLE 0x00010007 /*! @brief A platform-specific error occurred that does not match any of the * more specific categories. * * A platform-specific error occurred that does not match any of the more * specific categories. * * @analysis A bug or configuration error in GLFW, the underlying operating * system or its drivers, or a lack of required resources. Report the issue to * our [issue tracker](https://github.com/glfw/glfw/issues). */ #define GLFW_PLATFORM_ERROR 0x00010008 /*! @brief The requested format is not supported or available. * * If emitted during window creation, the requested pixel format is not * supported. * * If emitted when querying the clipboard, the contents of the clipboard could * not be converted to the requested format. * * @analysis If emitted during window creation, one or more * [hard constraints](@ref window_hints_hard) did not match any of the * available pixel formats. If your application is sufficiently flexible, * downgrade your requirements and try again. Otherwise, inform the user that * their machine does not match your requirements. * * @par * If emitted when querying the clipboard, ignore the error or report it to * the user, as appropriate. */ #define GLFW_FORMAT_UNAVAILABLE 0x00010009 /*! @brief The specified window does not have an OpenGL or OpenGL ES context. * * A window that does not have an OpenGL or OpenGL ES context was passed to * a function that requires it to have one. * * @analysis Application programmer error. Fix the offending call. */ #define GLFW_NO_WINDOW_CONTEXT 0x0001000A /*! @} */ /*! @addtogroup window * @{ */ /*! @brief Input focus window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUSED_hint) or * [window attribute](@ref GLFW_FOCUSED_attrib). */ #define GLFW_FOCUSED 0x00020001 /*! @brief Window iconification window attribute * * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). */ #define GLFW_ICONIFIED 0x00020002 /*! @brief Window resize-ability window hint and attribute * * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and * [window attribute](@ref GLFW_RESIZABLE_attrib). */ #define GLFW_RESIZABLE 0x00020003 /*! @brief Window visibility window hint and attribute * * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and * [window attribute](@ref GLFW_VISIBLE_attrib). */ #define GLFW_VISIBLE 0x00020004 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_DECORATED_hint) and * [window attribute](@ref GLFW_DECORATED_attrib). */ #define GLFW_DECORATED 0x00020005 /*! @brief Window auto-iconification window hint and attribute * * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). */ #define GLFW_AUTO_ICONIFY 0x00020006 /*! @brief Window decoration window hint and attribute * * Window decoration [window hint](@ref GLFW_FLOATING_hint) and * [window attribute](@ref GLFW_FLOATING_attrib). */ #define GLFW_FLOATING 0x00020007 /*! @brief Window maximization window hint and attribute * * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and * [window attribute](@ref GLFW_MAXIMIZED_attrib). */ #define GLFW_MAXIMIZED 0x00020008 /*! @brief Cursor centering window hint * * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). */ #define GLFW_CENTER_CURSOR 0x00020009 /*! @brief Window framebuffer transparency hint and attribute * * Window framebuffer transparency * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). */ #define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A /*! @brief Mouse cursor hover window attribute. * * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). */ #define GLFW_HOVERED 0x0002000B /*! @brief Input focus on calling show window hint and attribute * * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). */ #define GLFW_FOCUS_ON_SHOW 0x0002000C /*! @brief Occlusion window attribute * * Occlusion [window attribute](@ref GLFW_OCCLUDED_attrib). */ #define GLFW_OCCLUDED 0x0002000D /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). */ #define GLFW_RED_BITS 0x00021001 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). */ #define GLFW_GREEN_BITS 0x00021002 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). */ #define GLFW_BLUE_BITS 0x00021003 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). */ #define GLFW_ALPHA_BITS 0x00021004 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). */ #define GLFW_DEPTH_BITS 0x00021005 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). */ #define GLFW_STENCIL_BITS 0x00021006 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). */ #define GLFW_ACCUM_RED_BITS 0x00021007 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). */ #define GLFW_ACCUM_GREEN_BITS 0x00021008 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). */ #define GLFW_ACCUM_BLUE_BITS 0x00021009 /*! @brief Framebuffer bit depth hint. * * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). */ #define GLFW_ACCUM_ALPHA_BITS 0x0002100A /*! @brief Framebuffer auxiliary buffer hint. * * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). */ #define GLFW_AUX_BUFFERS 0x0002100B /*! @brief OpenGL stereoscopic rendering hint. * * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). */ #define GLFW_STEREO 0x0002100C /*! @brief Framebuffer MSAA samples hint. * * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). */ #define GLFW_SAMPLES 0x0002100D /*! @brief Framebuffer sRGB hint. * * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). */ #define GLFW_SRGB_CAPABLE 0x0002100E /*! @brief Monitor refresh rate hint. * * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). */ #define GLFW_REFRESH_RATE 0x0002100F /*! @brief Framebuffer double buffering hint. * * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER). */ #define GLFW_DOUBLEBUFFER 0x00021010 /*! @brief Context client API hint and attribute. * * Context client API [hint](@ref GLFW_CLIENT_API_hint) and * [attribute](@ref GLFW_CLIENT_API_attrib). */ #define GLFW_CLIENT_API 0x00022001 /*! @brief Context client API major version hint and attribute. * * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). */ #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 /*! @brief Context client API minor version hint and attribute. * * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). */ #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 /*! @brief Context client API revision number hint and attribute. * * Context client API revision number * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). */ #define GLFW_CONTEXT_REVISION 0x00022004 /*! @brief Context robustness hint and attribute. * * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). */ #define GLFW_CONTEXT_ROBUSTNESS 0x00022005 /*! @brief OpenGL forward-compatibility hint and attribute. * * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). */ #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 /*! @brief OpenGL debug context hint and attribute. * * OpenGL debug context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). */ #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 /*! @brief OpenGL profile hint and attribute. * * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). */ #define GLFW_OPENGL_PROFILE 0x00022008 /*! @brief Context flush-on-release hint and attribute. * * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). */ #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 /*! @brief Context error suppression hint and attribute. * * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). */ #define GLFW_CONTEXT_NO_ERROR 0x0002200A /*! @brief Context creation API hint and attribute. * * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). */ #define GLFW_CONTEXT_CREATION_API 0x0002200B /*! @brief Window content area scaling window * [window hint](@ref GLFW_SCALE_TO_MONITOR). */ #define GLFW_SCALE_TO_MONITOR 0x0002200C /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). */ #define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). */ #define GLFW_COCOA_FRAME_NAME 0x00023002 /*! @brief macOS specific * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). */ #define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_CLASS_NAME 0x00024001 /*! @brief X11 specific * [window hint](@ref GLFW_X11_CLASS_NAME_hint). */ #define GLFW_X11_INSTANCE_NAME 0x00024002 #define GLFW_WAYLAND_APP_ID 0x00025001 /*! @} */ #define GLFW_NO_API 0 #define GLFW_OPENGL_API 0x00030001 #define GLFW_OPENGL_ES_API 0x00030002 #define GLFW_NO_ROBUSTNESS 0 #define GLFW_NO_RESET_NOTIFICATION 0x00031001 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 #define GLFW_OPENGL_ANY_PROFILE 0 #define GLFW_OPENGL_CORE_PROFILE 0x00032001 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 #define GLFW_CURSOR 0x00033001 #define GLFW_STICKY_KEYS 0x00033002 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 #define GLFW_LOCK_KEY_MODS 0x00033004 #define GLFW_CURSOR_NORMAL 0x00034001 #define GLFW_CURSOR_HIDDEN 0x00034002 #define GLFW_CURSOR_DISABLED 0x00034003 #define GLFW_ANY_RELEASE_BEHAVIOR 0 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 #define GLFW_NATIVE_CONTEXT_API 0x00036001 #define GLFW_EGL_CONTEXT_API 0x00036002 #define GLFW_OSMESA_CONTEXT_API 0x00036003 /*! @defgroup shapes Standard cursor shapes * @brief Standard system cursor shapes. * * See [standard cursor creation](@ref cursor_standard) for how these are used. * * @ingroup input * @{ */ typedef enum { GLFW_ARROW_CURSOR, GLFW_IBEAM_CURSOR, GLFW_CROSSHAIR_CURSOR, GLFW_HAND_CURSOR, GLFW_HRESIZE_CURSOR, GLFW_VRESIZE_CURSOR, GLFW_NW_RESIZE_CURSOR, GLFW_NE_RESIZE_CURSOR, GLFW_SW_RESIZE_CURSOR, GLFW_SE_RESIZE_CURSOR, GLFW_INVALID_CURSOR } GLFWCursorShape; /*! @} */ #define GLFW_CONNECTED 0x00040001 #define GLFW_DISCONNECTED 0x00040002 /*! @addtogroup init * @{ */ /*! @brief Joystick hat buttons init hint. * * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). */ #define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 #define GLFW_DEBUG_KEYBOARD 0x00050002 #define GLFW_ENABLE_JOYSTICKS 0x00050003 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). */ #define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 /*! @brief macOS specific init hint. * * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). */ #define GLFW_COCOA_MENUBAR 0x00051002 /*! @} */ #define GLFW_DONT_CARE -1 /************************************************************************* * GLFW API types *************************************************************************/ /*! @brief Client API function pointer type. * * Generic function pointer used for returning client API function pointers * without forcing a cast from a regular pointer. * * @sa @ref context_glext * @sa @ref glfwGetProcAddress * * @since Added in version 3.0. * * @ingroup context */ typedef void (*GLFWglproc)(void); /*! @brief Vulkan API function pointer type. * * Generic function pointer used for returning Vulkan API function pointers * without forcing a cast from a regular pointer. * * @sa @ref vulkan_proc * @sa @ref glfwGetInstanceProcAddress * * @since Added in version 3.2. * * @ingroup vulkan */ typedef void (*GLFWvkproc)(void); /*! @brief Opaque monitor object. * * Opaque monitor object. * * @see @ref monitor_object * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWmonitor GLFWmonitor; /*! @brief Opaque window object. * * Opaque window object. * * @see @ref window_object * * @since Added in version 3.0. * * @ingroup window */ typedef struct GLFWwindow GLFWwindow; /*! @brief Opaque cursor object. * * Opaque cursor object. * * @see @ref cursor_object * * @since Added in version 3.1. * * @ingroup input */ typedef struct GLFWcursor GLFWcursor; typedef struct GLFWkeyevent { // The [keyboard key](@ref keys) that was pressed or released. int key; // The platform-specific identifier of the key. int native_key; // The event action. Either `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. int action; // Bit field describing which [modifier keys](@ref mods) were held down. int mods; // UTF-8 encoded text generated by this key event or empty string or NULL const char *text; // Used for Input Method events. Zero for normal key events. // A value of 1 means the pre-edit text for the input event has been changed. // A value of 2 means the text should be committed. int ime_state; } GLFWkeyevent; /*! @brief The function pointer type for error callbacks. * * This is the function pointer type for error callbacks. An error callback * function has the following signature: * @code * void callback_name(int error_code, const char* description) * @endcode * * @param[in] error_code An [error code](@ref errors). Future releases may add * more error codes. * @param[in] description A UTF-8 encoded string describing the error. * * @pointer_lifetime The error description string is valid until the callback * function returns. * * @sa @ref error_handling * @sa @ref glfwSetErrorCallback * * @since Added in version 3.0. * * @ingroup init */ typedef void (* GLFWerrorfun)(int,const char*); /*! @brief The function pointer type for window position callbacks. * * This is the function pointer type for window position callbacks. A window * position callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int xpos, int ypos) * @endcode * * @param[in] window The window that was moved. * @param[in] xpos The new x-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * @param[in] ypos The new y-coordinate, in screen coordinates, of the * upper-left corner of the content area of the window. * * @sa @ref window_pos * @sa @ref glfwSetWindowPosCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window size callbacks. * * This is the function pointer type for window size callbacks. A window size * callback function has the following signature: * @code * void callback_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window that was resized. * @param[in] width The new width, in screen coordinates, of the window. * @param[in] height The new height, in screen coordinates, of the window. * * @sa @ref window_size * @sa @ref glfwSetWindowSizeCallback * * @since Added in version 1.0. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window close callbacks. * * This is the function pointer type for window close callbacks. A window * close callback function has the following signature: * @code * void function_name(GLFWwindow* window) * @endcode * * @param[in] window The window that the user attempted to close. * * @sa @ref window_close * @sa @ref glfwSetWindowCloseCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowclosefun)(GLFWwindow*); /*! @brief The function pointer type for window content refresh callbacks. * * This is the function pointer type for window content refresh callbacks. * A window content refresh callback function has the following signature: * @code * void function_name(GLFWwindow* window); * @endcode * * @param[in] window The window whose content needs to be refreshed. * * @sa @ref window_refresh * @sa @ref glfwSetWindowRefreshCallback * * @since Added in version 2.5. * @glfw3 Added window handle parameter. * * @ingroup window */ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); /*! @brief The function pointer type for window focus callbacks. * * This is the function pointer type for window focus callbacks. A window * focus callback function has the following signature: * @code * void function_name(GLFWwindow* window, int focused) * @endcode * * @param[in] window The window that gained or lost input focus. * @param[in] focused `true` if the window was given input focus, or * `false` if it lost it. * * @sa @ref window_focus * @sa @ref glfwSetWindowFocusCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); /*! @brief The function signature for window occlusion callbacks. * * This is the function signature for window occlusion callback functions. * * @param[in] window The window whose occlusion state changed. * @param[in] occluded `true` if the window was occluded, or `false` * if the window is no longer occluded. * * @sa @ref window_occlusion * @sa @ref glfwSetWindowOcclusionCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowocclusionfun)(GLFWwindow*, bool); /*! @brief The function pointer type for window iconify callbacks. * * This is the function pointer type for window iconify callbacks. A window * iconify callback function has the following signature: * @code * void function_name(GLFWwindow* window, int iconified) * @endcode * * @param[in] window The window that was iconified or restored. * @param[in] iconified `true` if the window was iconified, or * `false` if it was restored. * * @sa @ref window_iconify * @sa @ref glfwSetWindowIconifyCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); /*! @brief The function pointer type for window maximize callbacks. * * This is the function pointer type for window maximize callbacks. A window * maximize callback function has the following signature: * @code * void function_name(GLFWwindow* window, int maximized) * @endcode * * @param[in] window The window that was maximized or restored. * @param[in] iconified `true` if the window was maximized, or * `false` if it was restored. * * @sa @ref window_maximize * @sa glfwSetWindowMaximizeCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int); /*! @brief The function pointer type for framebuffer size callbacks. * * This is the function pointer type for framebuffer size callbacks. * A framebuffer size callback function has the following signature: * @code * void function_name(GLFWwindow* window, int width, int height) * @endcode * * @param[in] window The window whose framebuffer was resized. * @param[in] width The new width, in pixels, of the framebuffer. * @param[in] height The new height, in pixels, of the framebuffer. * * @sa @ref window_fbsize * @sa @ref glfwSetFramebufferSizeCallback * * @since Added in version 3.0. * * @ingroup window */ typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); /*! @brief The function pointer type for window content scale callbacks. * * This is the function pointer type for window content scale callbacks. * A window content scale callback function has the following signature: * @code * void function_name(GLFWwindow* window, float xscale, float yscale) * @endcode * * @param[in] window The window whose content scale changed. * @param[in] xscale The new x-axis content scale of the window. * @param[in] yscale The new y-axis content scale of the window. * * @sa @ref window_scale * @sa @ref glfwSetWindowContentScaleCallback * * @since Added in version 3.3. * * @ingroup window */ typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float); /*! @brief The function pointer type for mouse button callbacks. * * This is the function pointer type for mouse button callback functions. * A mouse button callback function has the following signature: * @code * void function_name(GLFWwindow* window, int button, int action, int mods) * @endcode * * @param[in] window The window that received the event. * @param[in] button The [mouse button](@ref buttons) that was pressed or * released. * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases * may add more actions. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * * @sa @ref input_mouse_button * @sa @ref glfwSetMouseButtonCallback * * @since Added in version 1.0. * @glfw3 Added window handle and modifier mask parameters. * * @ingroup input */ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); /*! @brief The function pointer type for cursor position callbacks. * * This is the function pointer type for cursor position callbacks. A cursor * position callback function has the following signature: * @code * void function_name(GLFWwindow* window, double xpos, double ypos); * @endcode * * @param[in] window The window that received the event. * @param[in] xpos The new cursor x-coordinate, relative to the left edge of * the content area. * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the * content area. * * @sa @ref cursor_pos * @sa @ref glfwSetCursorPosCallback * * @since Added in version 3.0. Replaces `GLFWmouseposfun`. * * @ingroup input */ typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); /*! @brief The function pointer type for cursor enter/leave callbacks. * * This is the function pointer type for cursor enter/leave callbacks. * A cursor enter/leave callback function has the following signature: * @code * void function_name(GLFWwindow* window, int entered) * @endcode * * @param[in] window The window that received the event. * @param[in] entered `true` if the cursor entered the window's content * area, or `false` if it left it. * * @sa @ref cursor_enter * @sa @ref glfwSetCursorEnterCallback * * @since Added in version 3.0. * * @ingroup input */ typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); /*! @brief The function pointer type for scroll callbacks. * * This is the function pointer type for scroll callbacks. A scroll callback * function has the following signature: * @code * void function_name(GLFWwindow* window, double xoffset, double yoffset) * @endcode * * @param[in] window The window that received the event. * @param[in] xoffset The scroll offset along the x-axis. * @param[in] yoffset The scroll offset along the y-axis. * @param[in] flags A bit-mask providing extra data about the event. * flags & 1 will be true if and only if the offset values are "high-precision", * typically pixel values. Otherwise the offset values are number of lines. * (flags >> 1) & 7 will have value 1 for the start of momentum scrolling, * value 2 for stationary momentum scrolling, value 3 for momentum scrolling * in progress, value 4 for momentum scrolling ended, value 5 for momentum * scrolling cancelled and value 6 if scrolling may begin soon. * * @sa @ref scrolling * @sa @ref glfwSetScrollCallback * * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. * @since Changed in version 4.0. Added `flags` parameter. * * @ingroup input */ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double,int); /*! @brief The function pointer type for key callbacks. * * This is the function pointer type for key callbacks. A keyboard * key callback function has the following signature: * @code * void function_name(GLFWwindow* window, int key, int native_key, int action, int mods) * @endcode * The semantics of this function are that the key that is interacted with on the * keyboard is reported, and the text, if any generated by the key is reported. * So, for example, if on a US-ASCII keyboard the user presses Shift+= GLFW * will report the text "+" and the key as GLFW_KEY_EQUAL. The reported key takes into * account any current keyboard maps defined in the OS. So with a dvorak mapping, pressing * the "s" key will generate text "o" and GLFW_KEY_O. * * @param[in] window The window that received the event. * @param[in] ev The key event, see GLFWkeyevent. The data in this event is only valid for * the lifetime of the callback. * * @note On X11/Wayland if a modifier other than the modifiers GLFW reports * (ctrl/shift/alt/super) is used, GLFW will report the shifted key rather * than the unshifted key. So for example, if ISO_Shift_Level_5 is used to * convert the key A into UP GLFW will report the key as UP with no modifiers. * * @sa @ref input_key * @sa @ref glfwSetKeyboardCallback * * @since Added in version 4.0. * * @ingroup input */ typedef void (* GLFWkeyboardfun)(GLFWwindow*, GLFWkeyevent*); /*! @brief The function pointer type for path drop callbacks. * * This is the function pointer type for path drop callbacks. A path drop * callback function has the following signature: * @code * void function_name(GLFWwindow* window, int path_count, const char* paths[]) * @endcode * * @param[in] window The window that received the event. * @param[in] path_count The number of dropped paths. * @param[in] paths The UTF-8 encoded file and/or directory path names. * * @pointer_lifetime The path array and its strings are valid until the * callback function returns. * * @sa @ref path_drop * @sa @ref glfwSetDropCallback * * @since Added in version 3.1. * * @ingroup input */ typedef void (* GLFWdropfun)(GLFWwindow*,int,const char*[]); typedef void (* GLFWliveresizefun)(GLFWwindow*, bool); /*! @brief The function pointer type for monitor configuration callbacks. * * This is the function pointer type for monitor configuration callbacks. * A monitor callback function has the following signature: * @code * void function_name(GLFWmonitor* monitor, int event) * @endcode * * @param[in] monitor The monitor that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref monitor_event * @sa @ref glfwSetMonitorCallback * * @since Added in version 3.0. * * @ingroup monitor */ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); /*! @brief The function pointer type for joystick configuration callbacks. * * This is the function pointer type for joystick configuration callbacks. * A joystick configuration callback function has the following signature: * @code * void function_name(int jid, int event) * @endcode * * @param[in] jid The joystick that was connected or disconnected. * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future * releases may add more events. * * @sa @ref joystick_event * @sa @ref glfwSetJoystickCallback * * @since Added in version 3.2. * * @ingroup input */ typedef void (* GLFWjoystickfun)(int,int); typedef void (* GLFWuserdatafun)(unsigned long long, void*); typedef void (* GLFWtickcallback)(void*); /*! @brief Video mode type. * * This describes a single video mode. * * @sa @ref monitor_modes * @sa @ref glfwGetVideoMode * @sa @ref glfwGetVideoModes * * @since Added in version 1.0. * @glfw3 Added refresh rate member. * * @ingroup monitor */ typedef struct GLFWvidmode { /*! The width, in screen coordinates, of the video mode. */ int width; /*! The height, in screen coordinates, of the video mode. */ int height; /*! The bit depth of the red channel of the video mode. */ int redBits; /*! The bit depth of the green channel of the video mode. */ int greenBits; /*! The bit depth of the blue channel of the video mode. */ int blueBits; /*! The refresh rate, in Hz, of the video mode. */ int refreshRate; } GLFWvidmode; /*! @brief Gamma ramp. * * This describes the gamma ramp for a monitor. * * @sa @ref monitor_gamma * @sa @ref glfwGetGammaRamp * @sa @ref glfwSetGammaRamp * * @since Added in version 3.0. * * @ingroup monitor */ typedef struct GLFWgammaramp { /*! An array of value describing the response of the red channel. */ unsigned short* red; /*! An array of value describing the response of the green channel. */ unsigned short* green; /*! An array of value describing the response of the blue channel. */ unsigned short* blue; /*! The number of elements in each array. */ unsigned int size; } GLFWgammaramp; /*! @brief Image data. * * This describes a single 2D image. See the documentation for each related * function what the expected pixel format is. * * @sa @ref cursor_custom * @sa @ref window_icon * * @since Added in version 2.1. * @glfw3 Removed format and bytes-per-pixel members. * * @ingroup window */ typedef struct GLFWimage { /*! The width, in pixels, of this image. */ int width; /*! The height, in pixels, of this image. */ int height; /*! The pixel data of this image, arranged left-to-right, top-to-bottom. */ unsigned char* pixels; } GLFWimage; /*! @brief Gamepad input state * * This describes the input state of a gamepad. * * @sa @ref gamepad * @sa @ref glfwGetGamepadState * * @since Added in version 3.3. * * @ingroup input */ typedef struct GLFWgamepadstate { /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` * or `GLFW_RELEASE`. */ unsigned char buttons[15]; /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 * to 1.0 inclusive. */ float axes[6]; } GLFWgamepadstate; /************************************************************************* * GLFW API functions *************************************************************************/ /*! @brief Initializes the GLFW library. * * This function initializes the GLFW library. Before most GLFW functions can * be used, GLFW must be initialized, and before an application terminates GLFW * should be terminated in order to free any resources allocated during or * after initialization. * * If this function fails, it calls @ref glfwTerminate before returning. If it * succeeds, you should call @ref glfwTerminate before the application exits. * * Additional calls to this function after successful initialization but before * termination will return `true` immediately. * * @return `true` if successful, or `false` if an * [error](@ref error_handling) occurred. * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function will change the current directory of the * application to the `Contents/Resources` subdirectory of the application's * bundle, if present. This can be disabled with the @ref * GLFW_COCOA_CHDIR_RESOURCES init hint. * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init * @sa @ref glfwTerminate * * @since Added in version 1.0. * * @ingroup init */ typedef int (* GLFWcocoatextinputfilterfun)(int,int,unsigned int,unsigned long); typedef bool (* GLFWapplicationshouldhandlereopenfun)(int); typedef void (* GLFWapplicationwillfinishlaunchingfun)(void); typedef bool (* GLFWcocoatogglefullscreenfun)(GLFWwindow*); typedef void (* GLFWcocoarenderframefun)(GLFWwindow*); typedef void (*GLFWwaylandframecallbackfunc)(unsigned long long id); typedef void (*GLFWDBusnotificationcreatedfun)(unsigned long long, uint32_t, void*); typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*); typedef int (*glfwInit_func)(monotonic_t); glfwInit_func glfwInit_impl; #define glfwInit glfwInit_impl typedef void (*glfwRunMainLoop_func)(GLFWtickcallback, void*); glfwRunMainLoop_func glfwRunMainLoop_impl; #define glfwRunMainLoop glfwRunMainLoop_impl typedef void (*glfwStopMainLoop_func)(void); glfwStopMainLoop_func glfwStopMainLoop_impl; #define glfwStopMainLoop glfwStopMainLoop_impl typedef unsigned long long (*glfwAddTimer_func)(monotonic_t, bool, GLFWuserdatafun, void *, GLFWuserdatafun); glfwAddTimer_func glfwAddTimer_impl; #define glfwAddTimer glfwAddTimer_impl typedef void (*glfwUpdateTimer_func)(unsigned long long, monotonic_t, bool); glfwUpdateTimer_func glfwUpdateTimer_impl; #define glfwUpdateTimer glfwUpdateTimer_impl typedef void (*glfwRemoveTimer_func)(unsigned long); glfwRemoveTimer_func glfwRemoveTimer_impl; #define glfwRemoveTimer glfwRemoveTimer_impl typedef void (*glfwTerminate_func)(void); glfwTerminate_func glfwTerminate_impl; #define glfwTerminate glfwTerminate_impl typedef void (*glfwInitHint_func)(int, int); glfwInitHint_func glfwInitHint_impl; #define glfwInitHint glfwInitHint_impl typedef void (*glfwGetVersion_func)(int*, int*, int*); glfwGetVersion_func glfwGetVersion_impl; #define glfwGetVersion glfwGetVersion_impl typedef const char* (*glfwGetVersionString_func)(void); glfwGetVersionString_func glfwGetVersionString_impl; #define glfwGetVersionString glfwGetVersionString_impl typedef int (*glfwGetError_func)(const char**); glfwGetError_func glfwGetError_impl; #define glfwGetError glfwGetError_impl typedef GLFWerrorfun (*glfwSetErrorCallback_func)(GLFWerrorfun); glfwSetErrorCallback_func glfwSetErrorCallback_impl; #define glfwSetErrorCallback glfwSetErrorCallback_impl typedef GLFWmonitor** (*glfwGetMonitors_func)(int*); glfwGetMonitors_func glfwGetMonitors_impl; #define glfwGetMonitors glfwGetMonitors_impl typedef GLFWmonitor* (*glfwGetPrimaryMonitor_func)(void); glfwGetPrimaryMonitor_func glfwGetPrimaryMonitor_impl; #define glfwGetPrimaryMonitor glfwGetPrimaryMonitor_impl typedef void (*glfwGetMonitorPos_func)(GLFWmonitor*, int*, int*); glfwGetMonitorPos_func glfwGetMonitorPos_impl; #define glfwGetMonitorPos glfwGetMonitorPos_impl typedef void (*glfwGetMonitorWorkarea_func)(GLFWmonitor*, int*, int*, int*, int*); glfwGetMonitorWorkarea_func glfwGetMonitorWorkarea_impl; #define glfwGetMonitorWorkarea glfwGetMonitorWorkarea_impl typedef void (*glfwGetMonitorPhysicalSize_func)(GLFWmonitor*, int*, int*); glfwGetMonitorPhysicalSize_func glfwGetMonitorPhysicalSize_impl; #define glfwGetMonitorPhysicalSize glfwGetMonitorPhysicalSize_impl typedef void (*glfwGetMonitorContentScale_func)(GLFWmonitor*, float*, float*); glfwGetMonitorContentScale_func glfwGetMonitorContentScale_impl; #define glfwGetMonitorContentScale glfwGetMonitorContentScale_impl typedef const char* (*glfwGetMonitorName_func)(GLFWmonitor*); glfwGetMonitorName_func glfwGetMonitorName_impl; #define glfwGetMonitorName glfwGetMonitorName_impl typedef void (*glfwSetMonitorUserPointer_func)(GLFWmonitor*, void*); glfwSetMonitorUserPointer_func glfwSetMonitorUserPointer_impl; #define glfwSetMonitorUserPointer glfwSetMonitorUserPointer_impl typedef void* (*glfwGetMonitorUserPointer_func)(GLFWmonitor*); glfwGetMonitorUserPointer_func glfwGetMonitorUserPointer_impl; #define glfwGetMonitorUserPointer glfwGetMonitorUserPointer_impl typedef GLFWmonitorfun (*glfwSetMonitorCallback_func)(GLFWmonitorfun); glfwSetMonitorCallback_func glfwSetMonitorCallback_impl; #define glfwSetMonitorCallback glfwSetMonitorCallback_impl typedef const GLFWvidmode* (*glfwGetVideoModes_func)(GLFWmonitor*, int*); glfwGetVideoModes_func glfwGetVideoModes_impl; #define glfwGetVideoModes glfwGetVideoModes_impl typedef const GLFWvidmode* (*glfwGetVideoMode_func)(GLFWmonitor*); glfwGetVideoMode_func glfwGetVideoMode_impl; #define glfwGetVideoMode glfwGetVideoMode_impl typedef void (*glfwSetGamma_func)(GLFWmonitor*, float); glfwSetGamma_func glfwSetGamma_impl; #define glfwSetGamma glfwSetGamma_impl typedef const GLFWgammaramp* (*glfwGetGammaRamp_func)(GLFWmonitor*); glfwGetGammaRamp_func glfwGetGammaRamp_impl; #define glfwGetGammaRamp glfwGetGammaRamp_impl typedef void (*glfwSetGammaRamp_func)(GLFWmonitor*, const GLFWgammaramp*); glfwSetGammaRamp_func glfwSetGammaRamp_impl; #define glfwSetGammaRamp glfwSetGammaRamp_impl typedef void (*glfwDefaultWindowHints_func)(void); glfwDefaultWindowHints_func glfwDefaultWindowHints_impl; #define glfwDefaultWindowHints glfwDefaultWindowHints_impl typedef void (*glfwWindowHint_func)(int, int); glfwWindowHint_func glfwWindowHint_impl; #define glfwWindowHint glfwWindowHint_impl typedef void (*glfwWindowHintString_func)(int, const char*); glfwWindowHintString_func glfwWindowHintString_impl; #define glfwWindowHintString glfwWindowHintString_impl typedef GLFWwindow* (*glfwCreateWindow_func)(int, int, const char*, GLFWmonitor*, GLFWwindow*); glfwCreateWindow_func glfwCreateWindow_impl; #define glfwCreateWindow glfwCreateWindow_impl typedef bool (*glfwToggleFullscreen_func)(GLFWwindow*, unsigned int); glfwToggleFullscreen_func glfwToggleFullscreen_impl; #define glfwToggleFullscreen glfwToggleFullscreen_impl typedef void (*glfwDestroyWindow_func)(GLFWwindow*); glfwDestroyWindow_func glfwDestroyWindow_impl; #define glfwDestroyWindow glfwDestroyWindow_impl typedef int (*glfwWindowShouldClose_func)(GLFWwindow*); glfwWindowShouldClose_func glfwWindowShouldClose_impl; #define glfwWindowShouldClose glfwWindowShouldClose_impl typedef void (*glfwSetWindowShouldClose_func)(GLFWwindow*, int); glfwSetWindowShouldClose_func glfwSetWindowShouldClose_impl; #define glfwSetWindowShouldClose glfwSetWindowShouldClose_impl typedef void (*glfwSetWindowTitle_func)(GLFWwindow*, const char*); glfwSetWindowTitle_func glfwSetWindowTitle_impl; #define glfwSetWindowTitle glfwSetWindowTitle_impl typedef void (*glfwSetWindowIcon_func)(GLFWwindow*, int, const GLFWimage*); glfwSetWindowIcon_func glfwSetWindowIcon_impl; #define glfwSetWindowIcon glfwSetWindowIcon_impl typedef void (*glfwGetWindowPos_func)(GLFWwindow*, int*, int*); glfwGetWindowPos_func glfwGetWindowPos_impl; #define glfwGetWindowPos glfwGetWindowPos_impl typedef void (*glfwSetWindowPos_func)(GLFWwindow*, int, int); glfwSetWindowPos_func glfwSetWindowPos_impl; #define glfwSetWindowPos glfwSetWindowPos_impl typedef void (*glfwGetWindowSize_func)(GLFWwindow*, int*, int*); glfwGetWindowSize_func glfwGetWindowSize_impl; #define glfwGetWindowSize glfwGetWindowSize_impl typedef void (*glfwSetWindowSizeLimits_func)(GLFWwindow*, int, int, int, int); glfwSetWindowSizeLimits_func glfwSetWindowSizeLimits_impl; #define glfwSetWindowSizeLimits glfwSetWindowSizeLimits_impl typedef void (*glfwSetWindowAspectRatio_func)(GLFWwindow*, int, int); glfwSetWindowAspectRatio_func glfwSetWindowAspectRatio_impl; #define glfwSetWindowAspectRatio glfwSetWindowAspectRatio_impl typedef void (*glfwSetWindowSize_func)(GLFWwindow*, int, int); glfwSetWindowSize_func glfwSetWindowSize_impl; #define glfwSetWindowSize glfwSetWindowSize_impl typedef void (*glfwGetFramebufferSize_func)(GLFWwindow*, int*, int*); glfwGetFramebufferSize_func glfwGetFramebufferSize_impl; #define glfwGetFramebufferSize glfwGetFramebufferSize_impl typedef void (*glfwGetWindowFrameSize_func)(GLFWwindow*, int*, int*, int*, int*); glfwGetWindowFrameSize_func glfwGetWindowFrameSize_impl; #define glfwGetWindowFrameSize glfwGetWindowFrameSize_impl typedef void (*glfwGetWindowContentScale_func)(GLFWwindow*, float*, float*); glfwGetWindowContentScale_func glfwGetWindowContentScale_impl; #define glfwGetWindowContentScale glfwGetWindowContentScale_impl typedef monotonic_t (*glfwGetDoubleClickInterval_func)(GLFWwindow*); glfwGetDoubleClickInterval_func glfwGetDoubleClickInterval_impl; #define glfwGetDoubleClickInterval glfwGetDoubleClickInterval_impl typedef float (*glfwGetWindowOpacity_func)(GLFWwindow*); glfwGetWindowOpacity_func glfwGetWindowOpacity_impl; #define glfwGetWindowOpacity glfwGetWindowOpacity_impl typedef void (*glfwSetWindowOpacity_func)(GLFWwindow*, float); glfwSetWindowOpacity_func glfwSetWindowOpacity_impl; #define glfwSetWindowOpacity glfwSetWindowOpacity_impl typedef void (*glfwIconifyWindow_func)(GLFWwindow*); glfwIconifyWindow_func glfwIconifyWindow_impl; #define glfwIconifyWindow glfwIconifyWindow_impl typedef void (*glfwRestoreWindow_func)(GLFWwindow*); glfwRestoreWindow_func glfwRestoreWindow_impl; #define glfwRestoreWindow glfwRestoreWindow_impl typedef void (*glfwMaximizeWindow_func)(GLFWwindow*); glfwMaximizeWindow_func glfwMaximizeWindow_impl; #define glfwMaximizeWindow glfwMaximizeWindow_impl typedef void (*glfwShowWindow_func)(GLFWwindow*); glfwShowWindow_func glfwShowWindow_impl; #define glfwShowWindow glfwShowWindow_impl typedef void (*glfwHideWindow_func)(GLFWwindow*); glfwHideWindow_func glfwHideWindow_impl; #define glfwHideWindow glfwHideWindow_impl typedef void (*glfwFocusWindow_func)(GLFWwindow*); glfwFocusWindow_func glfwFocusWindow_impl; #define glfwFocusWindow glfwFocusWindow_impl typedef void (*glfwRequestWindowAttention_func)(GLFWwindow*); glfwRequestWindowAttention_func glfwRequestWindowAttention_impl; #define glfwRequestWindowAttention glfwRequestWindowAttention_impl typedef int (*glfwWindowBell_func)(GLFWwindow*); glfwWindowBell_func glfwWindowBell_impl; #define glfwWindowBell glfwWindowBell_impl typedef GLFWmonitor* (*glfwGetWindowMonitor_func)(GLFWwindow*); glfwGetWindowMonitor_func glfwGetWindowMonitor_impl; #define glfwGetWindowMonitor glfwGetWindowMonitor_impl typedef void (*glfwSetWindowMonitor_func)(GLFWwindow*, GLFWmonitor*, int, int, int, int, int); glfwSetWindowMonitor_func glfwSetWindowMonitor_impl; #define glfwSetWindowMonitor glfwSetWindowMonitor_impl typedef int (*glfwGetWindowAttrib_func)(GLFWwindow*, int); glfwGetWindowAttrib_func glfwGetWindowAttrib_impl; #define glfwGetWindowAttrib glfwGetWindowAttrib_impl typedef void (*glfwSetWindowAttrib_func)(GLFWwindow*, int, int); glfwSetWindowAttrib_func glfwSetWindowAttrib_impl; #define glfwSetWindowAttrib glfwSetWindowAttrib_impl typedef void (*glfwSetWindowUserPointer_func)(GLFWwindow*, void*); glfwSetWindowUserPointer_func glfwSetWindowUserPointer_impl; #define glfwSetWindowUserPointer glfwSetWindowUserPointer_impl typedef void* (*glfwGetWindowUserPointer_func)(GLFWwindow*); glfwGetWindowUserPointer_func glfwGetWindowUserPointer_impl; #define glfwGetWindowUserPointer glfwGetWindowUserPointer_impl typedef GLFWwindowposfun (*glfwSetWindowPosCallback_func)(GLFWwindow*, GLFWwindowposfun); glfwSetWindowPosCallback_func glfwSetWindowPosCallback_impl; #define glfwSetWindowPosCallback glfwSetWindowPosCallback_impl typedef GLFWwindowsizefun (*glfwSetWindowSizeCallback_func)(GLFWwindow*, GLFWwindowsizefun); glfwSetWindowSizeCallback_func glfwSetWindowSizeCallback_impl; #define glfwSetWindowSizeCallback glfwSetWindowSizeCallback_impl typedef GLFWwindowclosefun (*glfwSetWindowCloseCallback_func)(GLFWwindow*, GLFWwindowclosefun); glfwSetWindowCloseCallback_func glfwSetWindowCloseCallback_impl; #define glfwSetWindowCloseCallback glfwSetWindowCloseCallback_impl typedef GLFWwindowrefreshfun (*glfwSetWindowRefreshCallback_func)(GLFWwindow*, GLFWwindowrefreshfun); glfwSetWindowRefreshCallback_func glfwSetWindowRefreshCallback_impl; #define glfwSetWindowRefreshCallback glfwSetWindowRefreshCallback_impl typedef GLFWwindowfocusfun (*glfwSetWindowFocusCallback_func)(GLFWwindow*, GLFWwindowfocusfun); glfwSetWindowFocusCallback_func glfwSetWindowFocusCallback_impl; #define glfwSetWindowFocusCallback glfwSetWindowFocusCallback_impl typedef GLFWwindowocclusionfun (*glfwSetWindowOcclusionCallback_func)(GLFWwindow*, GLFWwindowocclusionfun); glfwSetWindowOcclusionCallback_func glfwSetWindowOcclusionCallback_impl; #define glfwSetWindowOcclusionCallback glfwSetWindowOcclusionCallback_impl typedef GLFWwindowiconifyfun (*glfwSetWindowIconifyCallback_func)(GLFWwindow*, GLFWwindowiconifyfun); glfwSetWindowIconifyCallback_func glfwSetWindowIconifyCallback_impl; #define glfwSetWindowIconifyCallback glfwSetWindowIconifyCallback_impl typedef GLFWwindowmaximizefun (*glfwSetWindowMaximizeCallback_func)(GLFWwindow*, GLFWwindowmaximizefun); glfwSetWindowMaximizeCallback_func glfwSetWindowMaximizeCallback_impl; #define glfwSetWindowMaximizeCallback glfwSetWindowMaximizeCallback_impl typedef GLFWframebuffersizefun (*glfwSetFramebufferSizeCallback_func)(GLFWwindow*, GLFWframebuffersizefun); glfwSetFramebufferSizeCallback_func glfwSetFramebufferSizeCallback_impl; #define glfwSetFramebufferSizeCallback glfwSetFramebufferSizeCallback_impl typedef GLFWwindowcontentscalefun (*glfwSetWindowContentScaleCallback_func)(GLFWwindow*, GLFWwindowcontentscalefun); glfwSetWindowContentScaleCallback_func glfwSetWindowContentScaleCallback_impl; #define glfwSetWindowContentScaleCallback glfwSetWindowContentScaleCallback_impl typedef void (*glfwPostEmptyEvent_func)(void); glfwPostEmptyEvent_func glfwPostEmptyEvent_impl; #define glfwPostEmptyEvent glfwPostEmptyEvent_impl typedef int (*glfwGetInputMode_func)(GLFWwindow*, int); glfwGetInputMode_func glfwGetInputMode_impl; #define glfwGetInputMode glfwGetInputMode_impl typedef void (*glfwSetInputMode_func)(GLFWwindow*, int, int); glfwSetInputMode_func glfwSetInputMode_impl; #define glfwSetInputMode glfwSetInputMode_impl typedef const char* (*glfwGetKeyName_func)(int, int); glfwGetKeyName_func glfwGetKeyName_impl; #define glfwGetKeyName glfwGetKeyName_impl typedef int (*glfwGetNativeKeyForKey_func)(int); glfwGetNativeKeyForKey_func glfwGetNativeKeyForKey_impl; #define glfwGetNativeKeyForKey glfwGetNativeKeyForKey_impl typedef int (*glfwGetKey_func)(GLFWwindow*, int); glfwGetKey_func glfwGetKey_impl; #define glfwGetKey glfwGetKey_impl typedef int (*glfwGetMouseButton_func)(GLFWwindow*, int); glfwGetMouseButton_func glfwGetMouseButton_impl; #define glfwGetMouseButton glfwGetMouseButton_impl typedef void (*glfwGetCursorPos_func)(GLFWwindow*, double*, double*); glfwGetCursorPos_func glfwGetCursorPos_impl; #define glfwGetCursorPos glfwGetCursorPos_impl typedef void (*glfwSetCursorPos_func)(GLFWwindow*, double, double); glfwSetCursorPos_func glfwSetCursorPos_impl; #define glfwSetCursorPos glfwSetCursorPos_impl typedef GLFWcursor* (*glfwCreateCursor_func)(const GLFWimage*, int, int, int); glfwCreateCursor_func glfwCreateCursor_impl; #define glfwCreateCursor glfwCreateCursor_impl typedef GLFWcursor* (*glfwCreateStandardCursor_func)(GLFWCursorShape); glfwCreateStandardCursor_func glfwCreateStandardCursor_impl; #define glfwCreateStandardCursor glfwCreateStandardCursor_impl typedef void (*glfwDestroyCursor_func)(GLFWcursor*); glfwDestroyCursor_func glfwDestroyCursor_impl; #define glfwDestroyCursor glfwDestroyCursor_impl typedef void (*glfwSetCursor_func)(GLFWwindow*, GLFWcursor*); glfwSetCursor_func glfwSetCursor_impl; #define glfwSetCursor glfwSetCursor_impl typedef GLFWkeyboardfun (*glfwSetKeyboardCallback_func)(GLFWwindow*, GLFWkeyboardfun); glfwSetKeyboardCallback_func glfwSetKeyboardCallback_impl; #define glfwSetKeyboardCallback glfwSetKeyboardCallback_impl typedef void (*glfwUpdateIMEState_func)(GLFWwindow*, int, int, int, int, int); glfwUpdateIMEState_func glfwUpdateIMEState_impl; #define glfwUpdateIMEState glfwUpdateIMEState_impl typedef GLFWmousebuttonfun (*glfwSetMouseButtonCallback_func)(GLFWwindow*, GLFWmousebuttonfun); glfwSetMouseButtonCallback_func glfwSetMouseButtonCallback_impl; #define glfwSetMouseButtonCallback glfwSetMouseButtonCallback_impl typedef GLFWcursorposfun (*glfwSetCursorPosCallback_func)(GLFWwindow*, GLFWcursorposfun); glfwSetCursorPosCallback_func glfwSetCursorPosCallback_impl; #define glfwSetCursorPosCallback glfwSetCursorPosCallback_impl typedef GLFWcursorenterfun (*glfwSetCursorEnterCallback_func)(GLFWwindow*, GLFWcursorenterfun); glfwSetCursorEnterCallback_func glfwSetCursorEnterCallback_impl; #define glfwSetCursorEnterCallback glfwSetCursorEnterCallback_impl typedef GLFWscrollfun (*glfwSetScrollCallback_func)(GLFWwindow*, GLFWscrollfun); glfwSetScrollCallback_func glfwSetScrollCallback_impl; #define glfwSetScrollCallback glfwSetScrollCallback_impl typedef GLFWdropfun (*glfwSetDropCallback_func)(GLFWwindow*, GLFWdropfun); glfwSetDropCallback_func glfwSetDropCallback_impl; #define glfwSetDropCallback glfwSetDropCallback_impl typedef GLFWliveresizefun (*glfwSetLiveResizeCallback_func)(GLFWwindow*, GLFWliveresizefun); glfwSetLiveResizeCallback_func glfwSetLiveResizeCallback_impl; #define glfwSetLiveResizeCallback glfwSetLiveResizeCallback_impl typedef int (*glfwJoystickPresent_func)(int); glfwJoystickPresent_func glfwJoystickPresent_impl; #define glfwJoystickPresent glfwJoystickPresent_impl typedef const float* (*glfwGetJoystickAxes_func)(int, int*); glfwGetJoystickAxes_func glfwGetJoystickAxes_impl; #define glfwGetJoystickAxes glfwGetJoystickAxes_impl typedef const unsigned char* (*glfwGetJoystickButtons_func)(int, int*); glfwGetJoystickButtons_func glfwGetJoystickButtons_impl; #define glfwGetJoystickButtons glfwGetJoystickButtons_impl typedef const unsigned char* (*glfwGetJoystickHats_func)(int, int*); glfwGetJoystickHats_func glfwGetJoystickHats_impl; #define glfwGetJoystickHats glfwGetJoystickHats_impl typedef const char* (*glfwGetJoystickName_func)(int); glfwGetJoystickName_func glfwGetJoystickName_impl; #define glfwGetJoystickName glfwGetJoystickName_impl typedef const char* (*glfwGetJoystickGUID_func)(int); glfwGetJoystickGUID_func glfwGetJoystickGUID_impl; #define glfwGetJoystickGUID glfwGetJoystickGUID_impl typedef void (*glfwSetJoystickUserPointer_func)(int, void*); glfwSetJoystickUserPointer_func glfwSetJoystickUserPointer_impl; #define glfwSetJoystickUserPointer glfwSetJoystickUserPointer_impl typedef void* (*glfwGetJoystickUserPointer_func)(int); glfwGetJoystickUserPointer_func glfwGetJoystickUserPointer_impl; #define glfwGetJoystickUserPointer glfwGetJoystickUserPointer_impl typedef int (*glfwJoystickIsGamepad_func)(int); glfwJoystickIsGamepad_func glfwJoystickIsGamepad_impl; #define glfwJoystickIsGamepad glfwJoystickIsGamepad_impl typedef GLFWjoystickfun (*glfwSetJoystickCallback_func)(GLFWjoystickfun); glfwSetJoystickCallback_func glfwSetJoystickCallback_impl; #define glfwSetJoystickCallback glfwSetJoystickCallback_impl typedef int (*glfwUpdateGamepadMappings_func)(const char*); glfwUpdateGamepadMappings_func glfwUpdateGamepadMappings_impl; #define glfwUpdateGamepadMappings glfwUpdateGamepadMappings_impl typedef const char* (*glfwGetGamepadName_func)(int); glfwGetGamepadName_func glfwGetGamepadName_impl; #define glfwGetGamepadName glfwGetGamepadName_impl typedef int (*glfwGetGamepadState_func)(int, GLFWgamepadstate*); glfwGetGamepadState_func glfwGetGamepadState_impl; #define glfwGetGamepadState glfwGetGamepadState_impl typedef void (*glfwSetClipboardString_func)(GLFWwindow*, const char*); glfwSetClipboardString_func glfwSetClipboardString_impl; #define glfwSetClipboardString glfwSetClipboardString_impl typedef const char* (*glfwGetClipboardString_func)(GLFWwindow*); glfwGetClipboardString_func glfwGetClipboardString_impl; #define glfwGetClipboardString glfwGetClipboardString_impl typedef monotonic_t (*glfwGetTime_func)(void); glfwGetTime_func glfwGetTime_impl; #define glfwGetTime glfwGetTime_impl typedef void (*glfwSetTime_func)(monotonic_t); glfwSetTime_func glfwSetTime_impl; #define glfwSetTime glfwSetTime_impl typedef uint64_t (*glfwGetTimerValue_func)(void); glfwGetTimerValue_func glfwGetTimerValue_impl; #define glfwGetTimerValue glfwGetTimerValue_impl typedef uint64_t (*glfwGetTimerFrequency_func)(void); glfwGetTimerFrequency_func glfwGetTimerFrequency_impl; #define glfwGetTimerFrequency glfwGetTimerFrequency_impl typedef void (*glfwMakeContextCurrent_func)(GLFWwindow*); glfwMakeContextCurrent_func glfwMakeContextCurrent_impl; #define glfwMakeContextCurrent glfwMakeContextCurrent_impl typedef GLFWwindow* (*glfwGetCurrentContext_func)(void); glfwGetCurrentContext_func glfwGetCurrentContext_impl; #define glfwGetCurrentContext glfwGetCurrentContext_impl typedef void (*glfwSwapBuffers_func)(GLFWwindow*); glfwSwapBuffers_func glfwSwapBuffers_impl; #define glfwSwapBuffers glfwSwapBuffers_impl typedef void (*glfwSwapInterval_func)(int); glfwSwapInterval_func glfwSwapInterval_impl; #define glfwSwapInterval glfwSwapInterval_impl typedef int (*glfwExtensionSupported_func)(const char*); glfwExtensionSupported_func glfwExtensionSupported_impl; #define glfwExtensionSupported glfwExtensionSupported_impl typedef GLFWglproc (*glfwGetProcAddress_func)(const char*); glfwGetProcAddress_func glfwGetProcAddress_impl; #define glfwGetProcAddress glfwGetProcAddress_impl typedef int (*glfwVulkanSupported_func)(void); glfwVulkanSupported_func glfwVulkanSupported_impl; #define glfwVulkanSupported glfwVulkanSupported_impl typedef const char** (*glfwGetRequiredInstanceExtensions_func)(uint32_t*); glfwGetRequiredInstanceExtensions_func glfwGetRequiredInstanceExtensions_impl; #define glfwGetRequiredInstanceExtensions glfwGetRequiredInstanceExtensions_impl typedef void* (*glfwGetCocoaWindow_func)(GLFWwindow*); glfwGetCocoaWindow_func glfwGetCocoaWindow_impl; #define glfwGetCocoaWindow glfwGetCocoaWindow_impl typedef void* (*glfwGetNSGLContext_func)(GLFWwindow*); glfwGetNSGLContext_func glfwGetNSGLContext_impl; #define glfwGetNSGLContext glfwGetNSGLContext_impl typedef uint32_t (*glfwGetCocoaMonitor_func)(GLFWmonitor*); glfwGetCocoaMonitor_func glfwGetCocoaMonitor_impl; #define glfwGetCocoaMonitor glfwGetCocoaMonitor_impl typedef GLFWcocoatextinputfilterfun (*glfwSetCocoaTextInputFilter_func)(GLFWwindow*, GLFWcocoatextinputfilterfun); glfwSetCocoaTextInputFilter_func glfwSetCocoaTextInputFilter_impl; #define glfwSetCocoaTextInputFilter glfwSetCocoaTextInputFilter_impl typedef GLFWcocoatogglefullscreenfun (*glfwSetCocoaToggleFullscreenIntercept_func)(GLFWwindow*, GLFWcocoatogglefullscreenfun); glfwSetCocoaToggleFullscreenIntercept_func glfwSetCocoaToggleFullscreenIntercept_impl; #define glfwSetCocoaToggleFullscreenIntercept glfwSetCocoaToggleFullscreenIntercept_impl typedef GLFWapplicationshouldhandlereopenfun (*glfwSetApplicationShouldHandleReopen_func)(GLFWapplicationshouldhandlereopenfun); glfwSetApplicationShouldHandleReopen_func glfwSetApplicationShouldHandleReopen_impl; #define glfwSetApplicationShouldHandleReopen glfwSetApplicationShouldHandleReopen_impl typedef GLFWapplicationwillfinishlaunchingfun (*glfwSetApplicationWillFinishLaunching_func)(GLFWapplicationwillfinishlaunchingfun); glfwSetApplicationWillFinishLaunching_func glfwSetApplicationWillFinishLaunching_impl; #define glfwSetApplicationWillFinishLaunching glfwSetApplicationWillFinishLaunching_impl typedef void (*glfwGetCocoaKeyEquivalent_func)(int, int, void*, void*); glfwGetCocoaKeyEquivalent_func glfwGetCocoaKeyEquivalent_impl; #define glfwGetCocoaKeyEquivalent glfwGetCocoaKeyEquivalent_impl typedef void (*glfwCocoaRequestRenderFrame_func)(GLFWwindow*, GLFWcocoarenderframefun); glfwCocoaRequestRenderFrame_func glfwCocoaRequestRenderFrame_impl; #define glfwCocoaRequestRenderFrame glfwCocoaRequestRenderFrame_impl typedef void* (*glfwGetX11Display_func)(void); glfwGetX11Display_func glfwGetX11Display_impl; #define glfwGetX11Display glfwGetX11Display_impl typedef int32_t (*glfwGetX11Window_func)(GLFWwindow*); glfwGetX11Window_func glfwGetX11Window_impl; #define glfwGetX11Window glfwGetX11Window_impl typedef void (*glfwSetPrimarySelectionString_func)(GLFWwindow*, const char*); glfwSetPrimarySelectionString_func glfwSetPrimarySelectionString_impl; #define glfwSetPrimarySelectionString glfwSetPrimarySelectionString_impl typedef const char* (*glfwGetPrimarySelectionString_func)(GLFWwindow*); glfwGetPrimarySelectionString_func glfwGetPrimarySelectionString_impl; #define glfwGetPrimarySelectionString glfwGetPrimarySelectionString_impl typedef int (*glfwGetNativeKeyForName_func)(const char*, int); glfwGetNativeKeyForName_func glfwGetNativeKeyForName_impl; #define glfwGetNativeKeyForName glfwGetNativeKeyForName_impl typedef void (*glfwRequestWaylandFrameEvent_func)(GLFWwindow*, unsigned long long, GLFWwaylandframecallbackfunc); glfwRequestWaylandFrameEvent_func glfwRequestWaylandFrameEvent_impl; #define glfwRequestWaylandFrameEvent glfwRequestWaylandFrameEvent_impl typedef unsigned long long (*glfwDBusUserNotify_func)(const char*, const char*, const char*, const char*, const char*, int32_t, GLFWDBusnotificationcreatedfun, void*); glfwDBusUserNotify_func glfwDBusUserNotify_impl; #define glfwDBusUserNotify glfwDBusUserNotify_impl typedef void (*glfwDBusSetUserNotificationHandler_func)(GLFWDBusnotificationactivatedfun); glfwDBusSetUserNotificationHandler_func glfwDBusSetUserNotificationHandler_impl; #define glfwDBusSetUserNotificationHandler glfwDBusSetUserNotificationHandler_impl const char* load_glfw(const char* path); kitty-0.15.0/kitty/glfw.c000066400000000000000000001472621356737523400152430ustar00rootroot00000000000000/* * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "glfw_tests.h" #include "fonts.h" #include "monotonic.h" #include #include "glfw-wrapper.h" extern bool cocoa_make_window_resizable(void *w, bool); extern void cocoa_focus_window(void *w); extern void cocoa_create_global_menu(void); extern void cocoa_hide_window_title(void *w); extern void cocoa_set_activation_policy(bool); extern void cocoa_set_titlebar_color(void *w, color_type color); extern bool cocoa_alt_option_key_pressed(unsigned long); extern size_t cocoa_get_workspace_ids(void *w, size_t *workspace_ids, size_t array_sz); extern monotonic_t cocoa_cursor_blink_interval(void); #if GLFW_KEY_LAST >= MAX_KEY_COUNT #error "glfw has too many keys, you should increase MAX_KEY_COUNT" #endif static GLFWcursor *standard_cursor = NULL, *click_cursor = NULL, *arrow_cursor = NULL; static void set_os_window_dpi(OSWindow *w); void request_tick_callback(void) { glfwPostEmptyEvent(); } static int min_width = 100, min_height = 100; void update_os_window_viewport(OSWindow *window, bool notify_boss) { int w, h, fw, fh; glfwGetFramebufferSize(window->handle, &fw, &fh); glfwGetWindowSize(window->handle, &w, &h); double xdpi = window->logical_dpi_x, ydpi = window->logical_dpi_y; set_os_window_dpi(window); if (fw == window->viewport_width && fh == window->viewport_height && w == window->window_width && h == window->window_height && xdpi == window->logical_dpi_x && ydpi == window->logical_dpi_y) { return; // no change, ignore } if (w <= 0 || h <= 0 || fw / w > 5 || fh / h > 5 || fw < min_width || fh < min_height || fw < w || fh < h) { log_error("Invalid geometry ignored: framebuffer: %dx%d window: %dx%d\n", fw, fh, w, h); if (!window->viewport_updated_at_least_once) { window->viewport_width = min_width; window->viewport_height = min_height; window->window_width = min_width; window->window_height = min_height; window->viewport_x_ratio = 1; window->viewport_y_ratio = 1; window->viewport_size_dirty = true; if (notify_boss) { call_boss(on_window_resize, "KiiO", window->id, window->viewport_width, window->viewport_height, Py_False); } } return; } window->viewport_updated_at_least_once = true; window->viewport_width = fw; window->viewport_height = fh; double xr = window->viewport_x_ratio, yr = window->viewport_y_ratio; window->viewport_x_ratio = w > 0 ? (double)window->viewport_width / (double)w : xr; window->viewport_y_ratio = h > 0 ? (double)window->viewport_height / (double)h : yr; bool dpi_changed = (xr != 0.0 && xr != window->viewport_x_ratio) || (yr != 0.0 && yr != window->viewport_y_ratio) || (xdpi != window->logical_dpi_x) || (ydpi != window->logical_dpi_y); window->viewport_size_dirty = true; window->viewport_width = MAX(window->viewport_width, min_width); window->viewport_height = MAX(window->viewport_height, min_height); window->window_width = MAX(w, min_width); window->window_height = MAX(h, min_height); if (notify_boss) { call_boss(on_window_resize, "KiiO", window->id, window->viewport_width, window->viewport_height, dpi_changed ? Py_True : Py_False); } } void log_event(const char *format, ...) { if (format) { va_list vl; fprintf(stderr, "[%.4f] ", monotonic_t_to_s_double(glfwGetTime())); va_start(vl, format); vfprintf(stderr, format, vl); va_end(vl); fprintf(stderr, "\n"); } } // callbacks {{{ void update_os_window_references() { for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; if (w->handle) glfwSetWindowUserPointer(w->handle, w); } } static inline bool set_callback_window(GLFWwindow *w) { global_state.callback_os_window = glfwGetWindowUserPointer(w); if (global_state.callback_os_window) return true; for (size_t i = 0; i < global_state.num_os_windows; i++) { if ((GLFWwindow*)(global_state.os_windows[i].handle) == w) { global_state.callback_os_window = global_state.os_windows + i; return true; } } return false; } static inline bool is_window_ready_for_callbacks(void) { OSWindow *w = global_state.callback_os_window; if (w->num_tabs == 0) return false; Tab *t = w->tabs + w->active_tab; if (t->num_windows == 0) return false; return true; } #define WINDOW_CALLBACK(name, fmt, ...) call_boss(name, "K" fmt, global_state.callback_os_window->id, __VA_ARGS__) static inline void show_mouse_cursor(GLFWwindow *w) { glfwSetInputMode(w, GLFW_CURSOR, GLFW_CURSOR_NORMAL); } void blank_os_window(OSWindow *w) { color_type color = OPT(background); if (w->num_tabs > 0) { Tab *t = w->tabs + w->active_tab; if (t->num_windows == 1) { Window *w = t->windows + t->active_window; Screen *s = w->render_data.screen; if (s) { color = colorprofile_to_color(s->color_profile, s->color_profile->overridden.default_bg, s->color_profile->configured.default_bg); } } } blank_canvas(w->is_semi_transparent ? w->background_opacity : 1.0f, color); } static void window_close_callback(GLFWwindow* window) { if (!set_callback_window(window)) return; global_state.has_pending_closes = true; request_tick_callback(); global_state.callback_os_window = NULL; } #ifdef __APPLE__ static void application_quit_canary_close_requested(GLFWwindow *window UNUSED) { global_state.has_pending_closes = true; request_tick_callback(); } #endif static void window_occlusion_callback(GLFWwindow *window, bool occluded UNUSED) { if (!set_callback_window(window)) return; request_tick_callback(); global_state.callback_os_window = NULL; } static void window_iconify_callback(GLFWwindow *window, int iconified UNUSED) { if (!set_callback_window(window)) return; request_tick_callback(); global_state.callback_os_window = NULL; } static void live_resize_callback(GLFWwindow *w, bool started) { if (!set_callback_window(w)) return; global_state.callback_os_window->live_resize.from_os_notification = true; global_state.callback_os_window->live_resize.in_progress = true; global_state.has_pending_resizes = true; if (!started) { global_state.callback_os_window->live_resize.os_says_resize_complete = true; request_tick_callback(); } global_state.callback_os_window = NULL; } static void framebuffer_size_callback(GLFWwindow *w, int width, int height) { if (!set_callback_window(w)) return; if (width >= min_width && height >= min_height) { OSWindow *window = global_state.callback_os_window; global_state.has_pending_resizes = true; window->live_resize.in_progress = true; window->live_resize.last_resize_event_at = monotonic(); window->live_resize.width = MAX(0, width); window->live_resize.height = MAX(0, height); window->live_resize.num_of_resize_events++; make_os_window_context_current(window); update_surface_size(width, height, window->offscreen_texture_id); request_tick_callback(); } else log_error("Ignoring resize request for tiny size: %dx%d", width, height); global_state.callback_os_window = NULL; } static void dpi_change_callback(GLFWwindow *w, float x_scale UNUSED, float y_scale UNUSED) { if (!set_callback_window(w)) return; // Ensure update_os_window_viewport() is called in the near future, it will // take care of DPI changes. OSWindow *window = global_state.callback_os_window; window->live_resize.in_progress = true; global_state.has_pending_resizes = true; window->live_resize.last_resize_event_at = monotonic(); global_state.callback_os_window = NULL; request_tick_callback(); } static void refresh_callback(GLFWwindow *w) { if (!set_callback_window(w)) return; global_state.callback_os_window->is_damaged = true; global_state.callback_os_window = NULL; request_tick_callback(); } static int mods_at_last_key_or_button_event = 0; static void key_callback(GLFWwindow *w, GLFWkeyevent *ev) { if (!set_callback_window(w)) return; mods_at_last_key_or_button_event = ev->mods; global_state.callback_os_window->cursor_blink_zero_time = monotonic(); if (ev->key >= 0 && ev->key <= GLFW_KEY_LAST) { global_state.callback_os_window->is_key_pressed[ev->key] = ev->action == GLFW_RELEASE ? false : true; } if (is_window_ready_for_callbacks()) on_key_input(ev); global_state.callback_os_window = NULL; request_tick_callback(); } static void cursor_enter_callback(GLFWwindow *w, int entered) { if (!set_callback_window(w)) return; if (entered) { show_mouse_cursor(w); monotonic_t now = monotonic(); global_state.callback_os_window->last_mouse_activity_at = now; if (is_window_ready_for_callbacks()) enter_event(); request_tick_callback(); } global_state.callback_os_window = NULL; } static void mouse_button_callback(GLFWwindow *w, int button, int action, int mods) { if (!set_callback_window(w)) return; show_mouse_cursor(w); mods_at_last_key_or_button_event = mods; monotonic_t now = monotonic(); global_state.callback_os_window->last_mouse_activity_at = now; if (button >= 0 && (unsigned int)button < arraysz(global_state.callback_os_window->mouse_button_pressed)) { global_state.callback_os_window->mouse_button_pressed[button] = action == GLFW_PRESS ? true : false; if (is_window_ready_for_callbacks()) mouse_event(button, mods, action); } request_tick_callback(); global_state.callback_os_window = NULL; } static void cursor_pos_callback(GLFWwindow *w, double x, double y) { if (!set_callback_window(w)) return; show_mouse_cursor(w); monotonic_t now = monotonic(); global_state.callback_os_window->last_mouse_activity_at = now; global_state.callback_os_window->cursor_blink_zero_time = now; global_state.callback_os_window->mouse_x = x * global_state.callback_os_window->viewport_x_ratio; global_state.callback_os_window->mouse_y = y * global_state.callback_os_window->viewport_y_ratio; if (is_window_ready_for_callbacks()) mouse_event(-1, mods_at_last_key_or_button_event, -1); request_tick_callback(); global_state.callback_os_window = NULL; } static void scroll_callback(GLFWwindow *w, double xoffset, double yoffset, int flags) { if (!set_callback_window(w)) return; show_mouse_cursor(w); monotonic_t now = monotonic(); global_state.callback_os_window->last_mouse_activity_at = now; if (is_window_ready_for_callbacks()) scroll_event(xoffset, yoffset, flags); request_tick_callback(); global_state.callback_os_window = NULL; } static id_type focus_counter = 0; static void window_focus_callback(GLFWwindow *w, int focused) { global_state.active_drag_in_window = 0; if (!set_callback_window(w)) return; global_state.callback_os_window->is_focused = focused ? true : false; if (focused) { show_mouse_cursor(w); focus_in_event(); global_state.callback_os_window->last_focused_counter = ++focus_counter; } monotonic_t now = monotonic(); global_state.callback_os_window->last_mouse_activity_at = now; global_state.callback_os_window->cursor_blink_zero_time = now; if (is_window_ready_for_callbacks()) { WINDOW_CALLBACK(on_focus, "O", focused ? Py_True : Py_False); glfwUpdateIMEState(global_state.callback_os_window->handle, 1, focused, 0, 0, 0); } request_tick_callback(); global_state.callback_os_window = NULL; } static void drop_callback(GLFWwindow *w, int count, const char **strings) { if (!set_callback_window(w)) return; PyObject *s = PyTuple_New(count); if (s) { for (int i = 0; i < count; i++) PyTuple_SET_ITEM(s, i, PyUnicode_FromString(strings[i])); WINDOW_CALLBACK(on_drop, "O", s); Py_CLEAR(s); request_tick_callback(); } global_state.callback_os_window = NULL; } // }}} void set_mouse_cursor(MouseShape type) { if (global_state.callback_os_window) { GLFWwindow *w = (GLFWwindow*)global_state.callback_os_window->handle; switch(type) { case HAND: glfwSetCursor(w, click_cursor); break; case ARROW: glfwSetCursor(w, arrow_cursor); break; default: glfwSetCursor(w, standard_cursor); break; } } } static GLFWimage logo = {0}; static PyObject* set_default_window_icon(PyObject UNUSED *self, PyObject *args) { Py_ssize_t sz; const char *logo_data; if(!PyArg_ParseTuple(args, "s#ii", &(logo_data), &sz, &(logo.width), &(logo.height))) return NULL; sz = (MAX(logo.width * logo.height, sz)); logo.pixels = malloc(sz); if (logo.pixels) memcpy(logo.pixels, logo_data, sz); Py_RETURN_NONE; } void make_os_window_context_current(OSWindow *w) { GLFWwindow *current_context = glfwGetCurrentContext(); if (w->handle != current_context) { glfwMakeContextCurrent(w->handle); } } static inline void get_window_content_scale(GLFWwindow *w, float *xscale, float *yscale, double *xdpi, double *ydpi) { if (w) glfwGetWindowContentScale(w, xscale, yscale); else { GLFWmonitor *monitor = glfwGetPrimaryMonitor(); if (monitor) glfwGetMonitorContentScale(monitor, xscale, yscale); } // check for zero, negative, NaN or excessive values of xscale/yscale if (*xscale <= 0 || *xscale != *xscale || *xscale >= 24) *xscale = 1.0; if (*yscale <= 0 || *yscale != *yscale || *yscale >= 24) *yscale = 1.0; #ifdef __APPLE__ const double factor = 72.0; #else const double factor = 96.0; #endif *xdpi = *xscale * factor; *ydpi = *yscale * factor; } static inline void get_window_dpi(GLFWwindow *w, double *x, double *y) { float xscale = 1, yscale = 1; get_window_content_scale(w, &xscale, &yscale, x, y); } static void set_os_window_dpi(OSWindow *w) { get_window_dpi(w->handle, &w->logical_dpi_x, &w->logical_dpi_y); } static inline bool do_toggle_fullscreen(OSWindow *w) { int width, height, x, y; glfwGetWindowSize(w->handle, &width, &height); glfwGetWindowPos(w->handle, &x, &y); if (glfwToggleFullscreen(w->handle, 0)) { w->before_fullscreen.is_set = true; w->before_fullscreen.w = width; w->before_fullscreen.h = height; w->before_fullscreen.x = x; w->before_fullscreen.y = y; return true; } if (w->before_fullscreen.is_set) { glfwSetWindowSize(w->handle, w->before_fullscreen.w, w->before_fullscreen.h); glfwSetWindowPos(w->handle, w->before_fullscreen.x, w->before_fullscreen.y); } return false; } static bool toggle_fullscreen_for_os_window(OSWindow *w) { if (w && w->handle) { #ifdef __APPLE__ if (!OPT(macos_traditional_fullscreen)) return glfwToggleFullscreen(w->handle, 1); #endif return do_toggle_fullscreen(w); } return false; } static bool toggle_maximized_for_os_window(OSWindow *w) { bool maximized = false; if (w && w->handle) { if (glfwGetWindowAttrib(w->handle, GLFW_MAXIMIZED)) { glfwRestoreWindow(w->handle); } else { glfwMaximizeWindow(w->handle); maximized = true; } } return maximized; } #ifdef __APPLE__ static int filter_option(int key UNUSED, int mods, unsigned int native_key UNUSED, unsigned long flags) { if ((mods == GLFW_MOD_ALT) || (mods == (GLFW_MOD_ALT | GLFW_MOD_SHIFT))) { if (OPT(macos_option_as_alt) == 3) return 1; if (cocoa_alt_option_key_pressed(flags)) return 1; } return 0; } static GLFWwindow *application_quit_canary = NULL; static bool on_application_reopen(int has_visible_windows) { if (has_visible_windows) return true; set_cocoa_pending_action(NEW_OS_WINDOW, NULL); return false; } static bool intercept_cocoa_fullscreen(GLFWwindow *w) { if (!OPT(macos_traditional_fullscreen) || !set_callback_window(w)) return false; toggle_fullscreen_for_os_window(global_state.callback_os_window); global_state.callback_os_window = NULL; return true; } #endif void set_titlebar_color(OSWindow *w, color_type color) { if (w->handle && (!w->last_titlebar_color || (w->last_titlebar_color & 0xffffff) != (color & 0xffffff))) { w->last_titlebar_color = (1 << 24) | (color & 0xffffff); #ifdef __APPLE__ cocoa_set_titlebar_color(glfwGetCocoaWindow(w->handle), color); #endif } } static inline PyObject* native_window_handle(GLFWwindow *w) { #ifdef __APPLE__ void *ans = glfwGetCocoaWindow(w); return PyLong_FromVoidPtr(ans); #endif if (glfwGetX11Window) return PyLong_FromLong((long)glfwGetX11Window(w)); return Py_None; } static PyObject* create_os_window(PyObject UNUSED *self, PyObject *args) { int x = -1, y = -1; char *title, *wm_class_class, *wm_class_name; PyObject *load_programs = NULL, *get_window_size, *pre_show_callback; if (!PyArg_ParseTuple(args, "OOsss|Oii", &get_window_size, &pre_show_callback, &title, &wm_class_name, &wm_class_class, &load_programs, &x, &y)) return NULL; static bool is_first_window = true; if (is_first_window) { glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, OPENGL_REQUIRED_VERSION_MAJOR); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, OPENGL_REQUIRED_VERSION_MINOR); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true); // We don't use depth and stencil buffers glfwWindowHint(GLFW_DEPTH_BITS, 0); glfwWindowHint(GLFW_STENCIL_BITS, 0); #ifdef __APPLE__ cocoa_set_activation_policy(OPT(macos_hide_from_tasks)); glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, true); glfwSetApplicationShouldHandleReopen(on_application_reopen); glfwSetApplicationWillFinishLaunching(cocoa_create_global_menu); if (OPT(hide_window_decorations)) glfwWindowHint(GLFW_DECORATED, false); #endif } #ifndef __APPLE__ glfwWindowHintString(GLFW_X11_INSTANCE_NAME, wm_class_name); glfwWindowHintString(GLFW_X11_CLASS_NAME, wm_class_class); glfwWindowHintString(GLFW_WAYLAND_APP_ID, wm_class_class); if (OPT(hide_window_decorations)) glfwWindowHint(GLFW_DECORATED, false); #endif if (global_state.num_os_windows >= MAX_CHILDREN) { PyErr_SetString(PyExc_ValueError, "Too many windows"); return NULL; } bool want_semi_transparent = (1.0 - OPT(background_opacity) >= 0.01) || OPT(dynamic_background_opacity); glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, want_semi_transparent); // We use a temp window to avoid the need to set the window size after // creation, which causes a resize event and all the associated processing. // The temp window is used to get the DPI. glfwWindowHint(GLFW_VISIBLE, false); GLFWwindow *common_context = global_state.num_os_windows ? global_state.os_windows[0].handle : NULL; #ifdef __APPLE__ if (is_first_window && !application_quit_canary) { application_quit_canary = glfwCreateWindow(100, 200, "quit_canary", NULL, NULL); glfwSetWindowCloseCallback(application_quit_canary, application_quit_canary_close_requested); } if (!common_context) common_context = application_quit_canary; #endif GLFWwindow *temp_window = NULL; if (!global_state.is_wayland) { // On Wayland windows dont get a content scale until they receive an enterEvent anyway // which wont happen until the event loop ticks, so using a temp window is useless. temp_window = glfwCreateWindow(640, 480, "temp", NULL, common_context); if (temp_window == NULL) { fatal("Failed to create GLFW temp window! This usually happens because of old/broken OpenGL drivers. kitty requires working OpenGL 3.3 drivers."); } } float xscale, yscale; double xdpi, ydpi; get_window_content_scale(temp_window, &xscale, &yscale, &xdpi, &ydpi); FONTS_DATA_HANDLE fonts_data = load_fonts_data(global_state.font_sz_in_pts, xdpi, ydpi); PyObject *ret = PyObject_CallFunction(get_window_size, "IIddff", fonts_data->cell_width, fonts_data->cell_height, fonts_data->logical_dpi_x, fonts_data->logical_dpi_y, xscale, yscale); if (ret == NULL) return NULL; int width = PyLong_AsLong(PyTuple_GET_ITEM(ret, 0)), height = PyLong_AsLong(PyTuple_GET_ITEM(ret, 1)); Py_CLEAR(ret); // The GLFW Wayland backend cannot create and show windows separately so we // cannot call the pre_show_callback. See // https://github.com/glfw/glfw/issues/1268 It doesn't matter since there // is no startup notification in Wayland anyway. It amazes me that anyone // uses Wayland as anything other than a butt for jokes. if (global_state.is_wayland) glfwWindowHint(GLFW_VISIBLE, true); GLFWwindow *glfw_window = glfwCreateWindow(width, height, title, NULL, temp_window ? temp_window : common_context); if (temp_window) { glfwDestroyWindow(temp_window); temp_window = NULL; } if (glfw_window == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to create GLFWwindow"); return NULL; } glfwMakeContextCurrent(glfw_window); if (is_first_window) { gl_init(); } bool is_semi_transparent = glfwGetWindowAttrib(glfw_window, GLFW_TRANSPARENT_FRAMEBUFFER); // blank the window once so that there is no initial flash of color // changing, in case the background color is not black blank_canvas(is_semi_transparent ? OPT(background_opacity) : 1.0f, OPT(background)); #ifndef __APPLE__ if (is_first_window) glfwSwapInterval(OPT(sync_to_monitor) && !global_state.is_wayland ? 1 : 0); #endif glfwSwapBuffers(glfw_window); if (!global_state.is_wayland) { PyObject *pret = PyObject_CallFunction(pre_show_callback, "N", native_window_handle(glfw_window)); if (pret == NULL) return NULL; Py_DECREF(pret); if (x != -1 && y != -1) glfwSetWindowPos(glfw_window, x, y); glfwShowWindow(glfw_window); } if (is_first_window) { PyObject *ret = PyObject_CallFunction(load_programs, "O", is_semi_transparent ? Py_True : Py_False); if (ret == NULL) return NULL; Py_DECREF(ret); #define CC(dest, shape) {\ if (!dest##_cursor) { \ dest##_cursor = glfwCreateStandardCursor(GLFW_##shape##_CURSOR); \ if (dest##_cursor == NULL) { log_error("Failed to create the %s mouse cursor, using default cursor.", #shape); } \ }} CC(standard, IBEAM); CC(click, HAND); CC(arrow, ARROW); #undef CC if (OPT(click_interval) < 0) OPT(click_interval) = glfwGetDoubleClickInterval(glfw_window); if (OPT(cursor_blink_interval) < 0) { OPT(cursor_blink_interval) = ms_to_monotonic_t(500ll); #ifdef __APPLE__ monotonic_t cbi = cocoa_cursor_blink_interval(); if (cbi >= 0) OPT(cursor_blink_interval) = cbi / 2; #endif } is_first_window = false; } OSWindow *w = add_os_window(); w->handle = glfw_window; update_os_window_references(); for (size_t i = 0; i < global_state.num_os_windows; i++) { // On some platforms (macOS) newly created windows don't get the initial focus in event OSWindow *q = global_state.os_windows + i; q->is_focused = q == w ? true : false; } w->logical_dpi_x = xdpi; w->logical_dpi_y = ydpi; w->fonts_data = fonts_data; w->shown_once = true; w->last_focused_counter = ++focus_counter; #ifdef __APPLE__ if (OPT(macos_option_as_alt)) glfwSetCocoaTextInputFilter(glfw_window, filter_option); glfwSetCocoaToggleFullscreenIntercept(glfw_window, intercept_cocoa_fullscreen); #endif send_prerendered_sprites_for_window(w); if (logo.pixels && logo.width && logo.height) glfwSetWindowIcon(glfw_window, 1, &logo); glfwSetCursor(glfw_window, standard_cursor); update_os_window_viewport(w, false); // missing pos callback // missing size callback glfwSetWindowCloseCallback(glfw_window, window_close_callback); glfwSetWindowRefreshCallback(glfw_window, refresh_callback); glfwSetWindowFocusCallback(glfw_window, window_focus_callback); glfwSetWindowOcclusionCallback(glfw_window, window_occlusion_callback); glfwSetWindowIconifyCallback(glfw_window, window_iconify_callback); // missing maximize/restore callback glfwSetFramebufferSizeCallback(glfw_window, framebuffer_size_callback); glfwSetLiveResizeCallback(glfw_window, live_resize_callback); glfwSetWindowContentScaleCallback(glfw_window, dpi_change_callback); glfwSetMouseButtonCallback(glfw_window, mouse_button_callback); glfwSetCursorPosCallback(glfw_window, cursor_pos_callback); glfwSetCursorEnterCallback(glfw_window, cursor_enter_callback); glfwSetScrollCallback(glfw_window, scroll_callback); glfwSetKeyboardCallback(glfw_window, key_callback); glfwSetDropCallback(glfw_window, drop_callback); #ifdef __APPLE__ if (glfwGetCocoaWindow) { if (!(OPT(macos_show_window_title_in) & WINDOW)) { cocoa_hide_window_title(glfwGetCocoaWindow(glfw_window)); } cocoa_make_window_resizable(glfwGetCocoaWindow(glfw_window), OPT(macos_window_resizable)); } else log_error("Failed to load glfwGetCocoaWindow"); #endif monotonic_t now = monotonic(); w->is_focused = true; w->cursor_blink_zero_time = now; w->last_mouse_activity_at = now; w->is_semi_transparent = is_semi_transparent; if (want_semi_transparent && !w->is_semi_transparent) { static bool warned = false; if (!warned) { log_error("Failed to enable transparency. This happens when your desktop environment does not support compositing."); warned = true; } } return PyLong_FromUnsignedLongLong(w->id); } #ifdef __APPLE__ static inline bool window_in_same_cocoa_workspace(void *w, size_t *source_workspaces, size_t source_workspace_count) { static size_t workspaces[64]; size_t workspace_count = cocoa_get_workspace_ids(w, workspaces, arraysz(workspaces)); for (size_t i = 0; i < workspace_count; i++) { for (size_t s = 0; s < source_workspace_count; s++) { if (source_workspaces[s] == workspaces[i]) return true; } } return false; } static inline void cocoa_focus_last_window(id_type source_window_id, size_t *source_workspaces, size_t source_workspace_count) { id_type highest_focus_number = 0; OSWindow *window_to_focus = NULL; for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; if ( w->id != source_window_id && w->handle && w->shown_once && w->last_focused_counter >= highest_focus_number && (!source_workspace_count || window_in_same_cocoa_workspace(glfwGetCocoaWindow(w->handle), source_workspaces, source_workspace_count)) ) { highest_focus_number = w->last_focused_counter; window_to_focus = w; } } if (window_to_focus) { glfwFocusWindow(window_to_focus->handle); } } #endif void destroy_os_window(OSWindow *w) { #ifdef __APPLE__ static size_t source_workspaces[64]; size_t source_workspace_count = 0; #endif if (w->handle) { #ifdef __APPLE__ source_workspace_count = cocoa_get_workspace_ids(glfwGetCocoaWindow(w->handle), source_workspaces, arraysz(source_workspaces)); #endif // Ensure mouse cursor is visible and reset to default shape, needed on macOS show_mouse_cursor(w->handle); glfwSetCursor(w->handle, NULL); glfwDestroyWindow(w->handle); } w->handle = NULL; #ifdef __APPLE__ // On macOS when closing a window, any other existing windows belonging to the same application do not // automatically get focus, so we do it manually. cocoa_focus_last_window(w->id, source_workspaces, source_workspace_count); #endif } void focus_os_window(OSWindow *w, bool also_raise) { if (w->handle) { #ifdef __APPLE__ if (!also_raise) cocoa_focus_window(glfwGetCocoaWindow(w->handle)); else glfwFocusWindow(w->handle); #else (void)also_raise; glfwFocusWindow(w->handle); #endif } } #ifdef __APPLE__ bool application_quit_requested() { return !application_quit_canary || glfwWindowShouldClose(application_quit_canary); } void request_application_quit() { if (application_quit_canary) { global_state.has_pending_closes = true; glfwSetWindowShouldClose(application_quit_canary, true); } } #endif // Global functions {{{ static void error_callback(int error, const char* description) { log_error("[glfw error %d]: %s", error, description); } #ifndef __APPLE__ static void dbus_user_notification_activated(uint32_t notification_id, const char* action) { unsigned long nid = notification_id; call_boss(dbus_notification_callback, "Oks", Py_True, nid, action); } #endif static PyObject* glfw_init(PyObject UNUSED *self, PyObject *args) { const char* path; int debug_keyboard = 0; if (!PyArg_ParseTuple(args, "s|p", &path, &debug_keyboard)) return NULL; const char* err = load_glfw(path); if (err) { PyErr_SetString(PyExc_RuntimeError, err); return NULL; } glfwSetErrorCallback(error_callback); glfwInitHint(GLFW_DEBUG_KEYBOARD, debug_keyboard); // Joysticks cause slow startup on some linux systems, see // https://github.com/kovidgoyal/kitty/issues/830 glfwInitHint(GLFW_ENABLE_JOYSTICKS, 0); OPT(debug_keyboard) = debug_keyboard != 0; #ifdef __APPLE__ glfwInitHint(GLFW_COCOA_CHDIR_RESOURCES, 0); glfwInitHint(GLFW_COCOA_MENUBAR, 0); #else if (glfwDBusSetUserNotificationHandler) { glfwDBusSetUserNotificationHandler(dbus_user_notification_activated); } #endif PyObject *ans = glfwInit(monotonic_start_time) ? Py_True: Py_False; if (ans == Py_True) { OSWindow w = {0}; set_os_window_dpi(&w); global_state.default_dpi.x = w.logical_dpi_x; global_state.default_dpi.y = w.logical_dpi_y; } Py_INCREF(ans); return ans; } static PyObject* glfw_terminate(PYNOARG) { glfwTerminate(); Py_RETURN_NONE; } static PyObject* get_physical_dpi(GLFWmonitor *m) { int width = 0, height = 0; glfwGetMonitorPhysicalSize(m, &width, &height); if (width == 0 || height == 0) { PyErr_SetString(PyExc_ValueError, "Failed to get primary monitor size"); return NULL; } const GLFWvidmode *vm = glfwGetVideoMode(m); if (vm == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to get video mode for monitor"); return NULL; } float dpix = (float)(vm->width / (width / 25.4)); float dpiy = (float)(vm->height / (height / 25.4)); return Py_BuildValue("ff", dpix, dpiy); } static PyObject* glfw_get_physical_dpi(PYNOARG) { GLFWmonitor *m = glfwGetPrimaryMonitor(); if (m == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to get primary monitor"); return NULL; } return get_physical_dpi(m); } static PyObject* glfw_get_key_name(PyObject UNUSED *self, PyObject *args) { int key, native_key; if (!PyArg_ParseTuple(args, "ii", &key, &native_key)) return NULL; return Py_BuildValue("s", glfwGetKeyName(key, native_key)); } static PyObject* glfw_window_hint(PyObject UNUSED *self, PyObject *args) { int key, val; if (!PyArg_ParseTuple(args, "ii", &key, &val)) return NULL; glfwWindowHint(key, val); Py_RETURN_NONE; } // }}} static PyObject* get_clipboard_string(PYNOARG) { OSWindow *w = current_os_window(); if (w) return Py_BuildValue("s", glfwGetClipboardString(w->handle)); return Py_BuildValue("s", ""); } void ring_audio_bell(OSWindow *w UNUSED) { static monotonic_t last_bell_at = -1; monotonic_t now = monotonic(); if (now - last_bell_at <= ms_to_monotonic_t(100ll)) return; last_bell_at = now; #ifdef __APPLE__ if (w->handle) { glfwWindowBell(w->handle); } #else play_canberra_sound("bell", "kitty bell"); #endif } static PyObject* ring_bell(PYNOARG) { OSWindow *w = current_os_window(); ring_audio_bell(w); Py_RETURN_NONE; } static PyObject* get_content_scale_for_window(PYNOARG) { OSWindow *w = global_state.callback_os_window ? global_state.callback_os_window : global_state.os_windows; float xscale, yscale; glfwGetWindowContentScale(w->handle, &xscale, &yscale); return Py_BuildValue("ff", xscale, yscale); } static PyObject* set_clipboard_string(PyObject UNUSED *self, PyObject *args) { char *title; Py_ssize_t sz; if(!PyArg_ParseTuple(args, "s#", &title, &sz)) return NULL; OSWindow *w = current_os_window(); if (w) glfwSetClipboardString(w->handle, title); Py_RETURN_NONE; } static PyObject* toggle_fullscreen(PYNOARG) { OSWindow *w = current_os_window(); if (!w) Py_RETURN_NONE; if (toggle_fullscreen_for_os_window(w)) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } static PyObject* toggle_maximized(PYNOARG) { OSWindow *w = current_os_window(); if (!w) Py_RETURN_NONE; if (toggle_maximized_for_os_window(w)) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } static PyObject* change_os_window_state(PyObject *self UNUSED, PyObject *args) { char *state; if (!PyArg_ParseTuple(args, "s", &state)) return NULL; OSWindow *w = current_os_window(); if (!w || !w->handle) Py_RETURN_NONE; if (strcmp(state, "maximized") == 0) glfwMaximizeWindow(w->handle); else if (strcmp(state, "minimized") == 0) glfwIconifyWindow(w->handle); else { PyErr_SetString(PyExc_ValueError, "Unknown window state"); return NULL; } Py_RETURN_NONE; } void request_window_attention(id_type kitty_window_id, bool audio_bell) { OSWindow *w = os_window_for_kitty_window(kitty_window_id); if (w) { if (audio_bell) ring_audio_bell(w); if (OPT(window_alert_on_bell)) glfwRequestWindowAttention(w->handle); glfwPostEmptyEvent(); } } void set_os_window_title(OSWindow *w, const char *title) { glfwSetWindowTitle(w->handle, title); } void hide_mouse(OSWindow *w) { glfwSetInputMode(w->handle, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); } bool is_mouse_hidden(OSWindow *w) { return w->handle && glfwGetInputMode(w->handle, GLFW_CURSOR) == GLFW_CURSOR_HIDDEN; } void swap_window_buffers(OSWindow *os_window) { glfwSwapBuffers(os_window->handle); } void wakeup_main_loop() { glfwPostEmptyEvent(); } void mark_os_window_for_close(OSWindow* w, bool yes) { global_state.has_pending_closes = true; glfwSetWindowShouldClose(w->handle, yes); } bool should_os_window_be_rendered(OSWindow* w) { return ( glfwGetWindowAttrib(w->handle, GLFW_ICONIFIED) || !glfwGetWindowAttrib(w->handle, GLFW_VISIBLE) || glfwGetWindowAttrib(w->handle, GLFW_OCCLUDED) ) ? false : true; } bool should_os_window_close(OSWindow* w) { return glfwWindowShouldClose(w->handle) ? true : false; } static PyObject* primary_monitor_size(PYNOARG) { GLFWmonitor* monitor = glfwGetPrimaryMonitor(); const GLFWvidmode* mode = glfwGetVideoMode(monitor); return Py_BuildValue("ii", mode->width, mode->height); } static PyObject* primary_monitor_content_scale(PYNOARG) { GLFWmonitor* monitor = glfwGetPrimaryMonitor(); float xscale = 1.0, yscale = 1.0; if (monitor) glfwGetMonitorContentScale(monitor, &xscale, &yscale); return Py_BuildValue("ff", xscale, yscale); } static PyObject* x11_display(PYNOARG) { if (glfwGetX11Display) { return PyLong_FromVoidPtr(glfwGetX11Display()); } else log_error("Failed to load glfwGetX11Display"); Py_RETURN_NONE; } static PyObject* x11_window_id(PyObject UNUSED *self, PyObject *os_wid) { if (glfwGetX11Window) { id_type os_window_id = PyLong_AsUnsignedLongLong(os_wid); for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; if (w->id == os_window_id) return Py_BuildValue("l", (long)glfwGetX11Window(w->handle)); } } else { PyErr_SetString(PyExc_RuntimeError, "Failed to load glfwGetX11Window"); return NULL; } PyErr_SetString(PyExc_ValueError, "No OSWindow with the specified id found"); return NULL; } static PyObject* get_primary_selection(PYNOARG) { if (glfwGetPrimarySelectionString) { OSWindow *w = current_os_window(); if (w) return Py_BuildValue("y", glfwGetPrimarySelectionString(w->handle)); } else log_error("Failed to load glfwGetPrimarySelectionString"); Py_RETURN_NONE; } static PyObject* set_primary_selection(PyObject UNUSED *self, PyObject *args) { char *text; Py_ssize_t sz; if (!PyArg_ParseTuple(args, "s#", &text, &sz)) return NULL; if (glfwSetPrimarySelectionString) { OSWindow *w = current_os_window(); if (w) glfwSetPrimarySelectionString(w->handle, text); } else log_error("Failed to load glfwSetPrimarySelectionString"); Py_RETURN_NONE; } static PyObject* set_smallest_allowed_resize(PyObject *self UNUSED, PyObject *args) { if (!PyArg_ParseTuple(args, "ii", &min_width, &min_height)) return NULL; Py_RETURN_NONE; } static PyObject* set_custom_cursor(PyObject *self UNUSED, PyObject *args) { int shape; int x=0, y=0; Py_ssize_t sz; PyObject *images; if (!PyArg_ParseTuple(args, "iO!|ii", &shape, &PyTuple_Type, &images, &x, &y)) return NULL; static GLFWimage gimages[16] = {{0}}; size_t count = MIN((size_t)PyTuple_GET_SIZE(images), arraysz(gimages)); for (size_t i = 0; i < count; i++) { if (!PyArg_ParseTuple(PyTuple_GET_ITEM(images, i), "s#ii", &gimages[i].pixels, &sz, &gimages[i].width, &gimages[i].height)) return NULL; if (gimages[i].width * gimages[i].height * 4 != sz) { PyErr_SetString(PyExc_ValueError, "The image data size does not match its width and height"); return NULL; } } #define CASE(which, dest) {\ case which: \ dest = glfwCreateCursor(gimages, x, y, count); \ if (dest == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to create custom cursor"); return NULL; } \ break; \ } switch(shape) { CASE(GLFW_IBEAM_CURSOR, standard_cursor); CASE(GLFW_HAND_CURSOR, click_cursor); CASE(GLFW_ARROW_CURSOR, arrow_cursor); default: PyErr_SetString(PyExc_ValueError, "Unknown cursor shape"); return NULL; } Py_RETURN_NONE; } #ifdef __APPLE__ void get_cocoa_key_equivalent(int key, int mods, unsigned short *cocoa_key, int *cocoa_mods) { glfwGetCocoaKeyEquivalent(key, mods, cocoa_key, cocoa_mods); } static void cocoa_frame_request_callback(GLFWwindow *window) { for (size_t i = 0; i < global_state.num_os_windows; i++) { if (global_state.os_windows[i].handle == window) { global_state.os_windows[i].render_state = RENDER_FRAME_READY; global_state.os_windows[i].last_render_frame_received_at = monotonic(); request_tick_callback(); break; } } } void request_frame_render(OSWindow *w) { glfwCocoaRequestRenderFrame(w->handle, cocoa_frame_request_callback); w->render_state = RENDER_FRAME_REQUESTED; } #else static void wayland_frame_request_callback(id_type os_window_id) { for (size_t i = 0; i < global_state.num_os_windows; i++) { if (global_state.os_windows[i].id == os_window_id) { global_state.os_windows[i].render_state = RENDER_FRAME_READY; global_state.os_windows[i].last_render_frame_received_at = monotonic(); request_tick_callback(); break; } } } void request_frame_render(OSWindow *w) { glfwRequestWaylandFrameEvent(w->handle, w->id, wayland_frame_request_callback); w->render_state = RENDER_FRAME_REQUESTED; } void dbus_notification_created_callback(unsigned long long notification_id, uint32_t new_notification_id, void* data UNUSED) { unsigned long new_id = new_notification_id; call_boss(dbus_notification_callback, "OKk", Py_False, notification_id, new_id); } static PyObject* dbus_send_notification(PyObject *self UNUSED, PyObject *args) { char *app_name, *icon, *summary, *body, *action_name; int timeout = -1; if (!PyArg_ParseTuple(args, "sssss|i", &app_name, &icon, &summary, &body, &action_name, &timeout)) return NULL; if (!glfwDBusUserNotify) { PyErr_SetString(PyExc_RuntimeError, "Failed to load glfwDBusUserNotify, did you call glfw_init?"); return NULL; } unsigned long long notification_id = glfwDBusUserNotify(app_name, icon, summary, body, action_name, timeout, dbus_notification_created_callback, NULL); return PyLong_FromUnsignedLongLong(notification_id); } #endif id_type add_main_loop_timer(monotonic_t interval, bool repeats, timer_callback_fun callback, void *callback_data, timer_callback_fun free_callback) { return glfwAddTimer(interval, repeats, callback, callback_data, free_callback); } void update_main_loop_timer(id_type timer_id, monotonic_t interval, bool enabled) { glfwUpdateTimer(timer_id, interval, enabled); } void remove_main_loop_timer(id_type timer_id) { glfwRemoveTimer(timer_id); } void run_main_loop(tick_callback_fun cb, void* cb_data) { glfwRunMainLoop(cb, cb_data); } void stop_main_loop(void) { glfwStopMainLoop(); } static PyObject* test_empty_event(PYNOARG) { // To run this, use // kitty +runpy "from kitty.main import init_glfw_module; init_glfw_module('x11'); from kitty.fast_data_types import glfw_test_empty_event; glfw_test_empty_event()" int ret = empty_main(); if (ret != EXIT_SUCCESS) { PyErr_Format(PyExc_RuntimeError, "Empty test returned failure code: %d", ret); return NULL; } Py_RETURN_NONE; } // Boilerplate {{{ static PyMethodDef module_methods[] = { METHODB(set_custom_cursor, METH_VARARGS), METHODB(set_smallest_allowed_resize, METH_VARARGS), METHODB(create_os_window, METH_VARARGS), METHODB(set_default_window_icon, METH_VARARGS), METHODB(get_clipboard_string, METH_NOARGS), METHODB(get_content_scale_for_window, METH_NOARGS), METHODB(ring_bell, METH_NOARGS), METHODB(set_clipboard_string, METH_VARARGS), METHODB(toggle_fullscreen, METH_NOARGS), METHODB(toggle_maximized, METH_NOARGS), METHODB(change_os_window_state, METH_VARARGS), METHODB(glfw_window_hint, METH_VARARGS), METHODB(get_primary_selection, METH_NOARGS), METHODB(x11_display, METH_NOARGS), METHODB(x11_window_id, METH_O), METHODB(set_primary_selection, METH_VARARGS), #ifndef __APPLE__ METHODB(dbus_send_notification, METH_VARARGS), #endif {"glfw_init", (PyCFunction)glfw_init, METH_VARARGS, ""}, {"glfw_terminate", (PyCFunction)glfw_terminate, METH_NOARGS, ""}, {"glfw_get_physical_dpi", (PyCFunction)glfw_get_physical_dpi, METH_NOARGS, ""}, {"glfw_get_key_name", (PyCFunction)glfw_get_key_name, METH_VARARGS, ""}, {"glfw_primary_monitor_size", (PyCFunction)primary_monitor_size, METH_NOARGS, ""}, {"glfw_primary_monitor_content_scale", (PyCFunction)primary_monitor_content_scale, METH_NOARGS, ""}, {"glfw_test_empty_event", (PyCFunction)test_empty_event, METH_NOARGS, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; void cleanup_glfw(void) { if (logo.pixels) free(logo.pixels); logo.pixels = NULL; } // constants {{{ bool init_glfw(PyObject *m) { if (PyModule_AddFunctions(m, module_methods) != 0) return false; if (Py_AtExit(cleanup_glfw) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the glfw exit handler"); return false; } #define ADDC(n) if(PyModule_AddIntConstant(m, #n, n) != 0) return false; ADDC(GLFW_RELEASE); ADDC(GLFW_PRESS); ADDC(GLFW_REPEAT); ADDC(true); ADDC(false); ADDC(GLFW_IBEAM_CURSOR); ADDC(GLFW_HAND_CURSOR); ADDC(GLFW_ARROW_CURSOR); // --- Keys -------------------------------------------------------------------- // --- The unknown key --------------------------------------------------------- ADDC(GLFW_KEY_UNKNOWN); // --- Printable keys ---------------------------------------------------------- ADDC(GLFW_KEY_SPACE); ADDC(GLFW_KEY_EXCLAM); ADDC(GLFW_KEY_DOUBLE_QUOTE); ADDC(GLFW_KEY_NUMBER_SIGN); ADDC(GLFW_KEY_DOLLAR); ADDC(GLFW_KEY_AMPERSAND); ADDC(GLFW_KEY_APOSTROPHE); ADDC(GLFW_KEY_PARENTHESIS_LEFT); ADDC(GLFW_KEY_PARENTHESIS_RIGHT); ADDC(GLFW_KEY_PLUS); ADDC(GLFW_KEY_COMMA); ADDC(GLFW_KEY_MINUS); ADDC(GLFW_KEY_PERIOD); ADDC(GLFW_KEY_SLASH); ADDC(GLFW_KEY_0); ADDC(GLFW_KEY_1); ADDC(GLFW_KEY_2); ADDC(GLFW_KEY_3); ADDC(GLFW_KEY_4); ADDC(GLFW_KEY_5); ADDC(GLFW_KEY_6); ADDC(GLFW_KEY_7); ADDC(GLFW_KEY_8); ADDC(GLFW_KEY_9); ADDC(GLFW_KEY_COLON); ADDC(GLFW_KEY_SEMICOLON); ADDC(GLFW_KEY_LESS); ADDC(GLFW_KEY_EQUAL); ADDC(GLFW_KEY_GREATER); ADDC(GLFW_KEY_AT); ADDC(GLFW_KEY_A); ADDC(GLFW_KEY_B); ADDC(GLFW_KEY_C); ADDC(GLFW_KEY_D); ADDC(GLFW_KEY_E); ADDC(GLFW_KEY_F); ADDC(GLFW_KEY_G); ADDC(GLFW_KEY_H); ADDC(GLFW_KEY_I); ADDC(GLFW_KEY_J); ADDC(GLFW_KEY_K); ADDC(GLFW_KEY_L); ADDC(GLFW_KEY_M); ADDC(GLFW_KEY_N); ADDC(GLFW_KEY_O); ADDC(GLFW_KEY_P); ADDC(GLFW_KEY_Q); ADDC(GLFW_KEY_R); ADDC(GLFW_KEY_S); ADDC(GLFW_KEY_T); ADDC(GLFW_KEY_U); ADDC(GLFW_KEY_V); ADDC(GLFW_KEY_W); ADDC(GLFW_KEY_X); ADDC(GLFW_KEY_Y); ADDC(GLFW_KEY_Z); ADDC(GLFW_KEY_LEFT_BRACKET); ADDC(GLFW_KEY_BACKSLASH); ADDC(GLFW_KEY_RIGHT_BRACKET); ADDC(GLFW_KEY_UNDERSCORE); ADDC(GLFW_KEY_GRAVE_ACCENT); ADDC(GLFW_KEY_WORLD_1); ADDC(GLFW_KEY_WORLD_2); ADDC(GLFW_KEY_PARAGRAPH); ADDC(GLFW_KEY_MASCULINE); ADDC(GLFW_KEY_A_GRAVE); ADDC(GLFW_KEY_A_DIAERESIS); ADDC(GLFW_KEY_A_RING); ADDC(GLFW_KEY_AE); ADDC(GLFW_KEY_C_CEDILLA); ADDC(GLFW_KEY_E_GRAVE); ADDC(GLFW_KEY_E_ACUTE); ADDC(GLFW_KEY_I_GRAVE); ADDC(GLFW_KEY_N_TILDE); ADDC(GLFW_KEY_O_GRAVE); ADDC(GLFW_KEY_O_DIAERESIS); ADDC(GLFW_KEY_O_SLASH); ADDC(GLFW_KEY_U_GRAVE); ADDC(GLFW_KEY_U_DIAERESIS); ADDC(GLFW_KEY_S_SHARP); ADDC(GLFW_KEY_CYRILLIC_A); ADDC(GLFW_KEY_CYRILLIC_BE); ADDC(GLFW_KEY_CYRILLIC_VE); ADDC(GLFW_KEY_CYRILLIC_GHE); ADDC(GLFW_KEY_CYRILLIC_DE); ADDC(GLFW_KEY_CYRILLIC_IE); ADDC(GLFW_KEY_CYRILLIC_ZHE); ADDC(GLFW_KEY_CYRILLIC_ZE); ADDC(GLFW_KEY_CYRILLIC_I); ADDC(GLFW_KEY_CYRILLIC_SHORT_I); ADDC(GLFW_KEY_CYRILLIC_KA); ADDC(GLFW_KEY_CYRILLIC_EL); ADDC(GLFW_KEY_CYRILLIC_EM); ADDC(GLFW_KEY_CYRILLIC_EN); ADDC(GLFW_KEY_CYRILLIC_O); ADDC(GLFW_KEY_CYRILLIC_PE); ADDC(GLFW_KEY_CYRILLIC_ER); ADDC(GLFW_KEY_CYRILLIC_ES); ADDC(GLFW_KEY_CYRILLIC_TE); ADDC(GLFW_KEY_CYRILLIC_U); ADDC(GLFW_KEY_CYRILLIC_EF); ADDC(GLFW_KEY_CYRILLIC_HA); ADDC(GLFW_KEY_CYRILLIC_TSE); ADDC(GLFW_KEY_CYRILLIC_CHE); ADDC(GLFW_KEY_CYRILLIC_SHA); ADDC(GLFW_KEY_CYRILLIC_SHCHA); ADDC(GLFW_KEY_CYRILLIC_HARD_SIGN); ADDC(GLFW_KEY_CYRILLIC_YERU); ADDC(GLFW_KEY_CYRILLIC_SOFT_SIGN); ADDC(GLFW_KEY_CYRILLIC_E); ADDC(GLFW_KEY_CYRILLIC_YU); ADDC(GLFW_KEY_CYRILLIC_YA); ADDC(GLFW_KEY_CYRILLIC_IO); ADDC(GLFW_KEY_LAST_PRINTABLE); // --- Function keys ----------------------------------------------------------- ADDC(GLFW_KEY_ESCAPE); ADDC(GLFW_KEY_ENTER); ADDC(GLFW_KEY_TAB); ADDC(GLFW_KEY_BACKSPACE); ADDC(GLFW_KEY_INSERT); ADDC(GLFW_KEY_DELETE); ADDC(GLFW_KEY_RIGHT); ADDC(GLFW_KEY_LEFT); ADDC(GLFW_KEY_DOWN); ADDC(GLFW_KEY_UP); ADDC(GLFW_KEY_PAGE_UP); ADDC(GLFW_KEY_PAGE_DOWN); ADDC(GLFW_KEY_HOME); ADDC(GLFW_KEY_END); ADDC(GLFW_KEY_CAPS_LOCK); ADDC(GLFW_KEY_SCROLL_LOCK); ADDC(GLFW_KEY_NUM_LOCK); ADDC(GLFW_KEY_PRINT_SCREEN); ADDC(GLFW_KEY_PAUSE); ADDC(GLFW_KEY_F1); ADDC(GLFW_KEY_F2); ADDC(GLFW_KEY_F3); ADDC(GLFW_KEY_F4); ADDC(GLFW_KEY_F5); ADDC(GLFW_KEY_F6); ADDC(GLFW_KEY_F7); ADDC(GLFW_KEY_F8); ADDC(GLFW_KEY_F9); ADDC(GLFW_KEY_F10); ADDC(GLFW_KEY_F11); ADDC(GLFW_KEY_F12); ADDC(GLFW_KEY_F13); ADDC(GLFW_KEY_F14); ADDC(GLFW_KEY_F15); ADDC(GLFW_KEY_F16); ADDC(GLFW_KEY_F17); ADDC(GLFW_KEY_F18); ADDC(GLFW_KEY_F19); ADDC(GLFW_KEY_F20); ADDC(GLFW_KEY_F21); ADDC(GLFW_KEY_F22); ADDC(GLFW_KEY_F23); ADDC(GLFW_KEY_F24); ADDC(GLFW_KEY_F25); ADDC(GLFW_KEY_KP_0); ADDC(GLFW_KEY_KP_1); ADDC(GLFW_KEY_KP_2); ADDC(GLFW_KEY_KP_3); ADDC(GLFW_KEY_KP_4); ADDC(GLFW_KEY_KP_5); ADDC(GLFW_KEY_KP_6); ADDC(GLFW_KEY_KP_7); ADDC(GLFW_KEY_KP_8); ADDC(GLFW_KEY_KP_9); ADDC(GLFW_KEY_KP_DECIMAL); ADDC(GLFW_KEY_KP_DIVIDE); ADDC(GLFW_KEY_KP_MULTIPLY); ADDC(GLFW_KEY_KP_SUBTRACT); ADDC(GLFW_KEY_KP_ADD); ADDC(GLFW_KEY_KP_ENTER); ADDC(GLFW_KEY_KP_EQUAL); ADDC(GLFW_KEY_LEFT_SHIFT); ADDC(GLFW_KEY_LEFT_CONTROL); ADDC(GLFW_KEY_LEFT_ALT); ADDC(GLFW_KEY_LEFT_SUPER); ADDC(GLFW_KEY_RIGHT_SHIFT); ADDC(GLFW_KEY_RIGHT_CONTROL); ADDC(GLFW_KEY_RIGHT_ALT); ADDC(GLFW_KEY_RIGHT_SUPER); ADDC(GLFW_KEY_MENU); ADDC(GLFW_KEY_LAST); // --- Modifiers --------------------------------------------------------------- ADDC(GLFW_MOD_SHIFT); ADDC(GLFW_MOD_CONTROL); ADDC(GLFW_MOD_ALT); ADDC(GLFW_MOD_SUPER); ADDC(GLFW_MOD_KITTY); // --- Mouse ------------------------------------------------------------------- ADDC(GLFW_MOUSE_BUTTON_1); ADDC(GLFW_MOUSE_BUTTON_2); ADDC(GLFW_MOUSE_BUTTON_3); ADDC(GLFW_MOUSE_BUTTON_4); ADDC(GLFW_MOUSE_BUTTON_5); ADDC(GLFW_MOUSE_BUTTON_6); ADDC(GLFW_MOUSE_BUTTON_7); ADDC(GLFW_MOUSE_BUTTON_8); ADDC(GLFW_MOUSE_BUTTON_LAST); ADDC(GLFW_MOUSE_BUTTON_LEFT); ADDC(GLFW_MOUSE_BUTTON_RIGHT); ADDC(GLFW_MOUSE_BUTTON_MIDDLE); // --- Joystick ---------------------------------------------------------------- ADDC(GLFW_JOYSTICK_1); ADDC(GLFW_JOYSTICK_2); ADDC(GLFW_JOYSTICK_3); ADDC(GLFW_JOYSTICK_4); ADDC(GLFW_JOYSTICK_5); ADDC(GLFW_JOYSTICK_6); ADDC(GLFW_JOYSTICK_7); ADDC(GLFW_JOYSTICK_8); ADDC(GLFW_JOYSTICK_9); ADDC(GLFW_JOYSTICK_10); ADDC(GLFW_JOYSTICK_11); ADDC(GLFW_JOYSTICK_12); ADDC(GLFW_JOYSTICK_13); ADDC(GLFW_JOYSTICK_14); ADDC(GLFW_JOYSTICK_15); ADDC(GLFW_JOYSTICK_16); ADDC(GLFW_JOYSTICK_LAST); // --- Error codes ------------------------------------------------------------- ADDC(GLFW_NOT_INITIALIZED); ADDC(GLFW_NO_CURRENT_CONTEXT); ADDC(GLFW_INVALID_ENUM); ADDC(GLFW_INVALID_VALUE); ADDC(GLFW_OUT_OF_MEMORY); ADDC(GLFW_API_UNAVAILABLE); ADDC(GLFW_VERSION_UNAVAILABLE); ADDC(GLFW_PLATFORM_ERROR); ADDC(GLFW_FORMAT_UNAVAILABLE); // --- ADDC(GLFW_FOCUSED); ADDC(GLFW_ICONIFIED); ADDC(GLFW_RESIZABLE); ADDC(GLFW_VISIBLE); ADDC(GLFW_DECORATED); ADDC(GLFW_AUTO_ICONIFY); ADDC(GLFW_FLOATING); // --- ADDC(GLFW_RED_BITS); ADDC(GLFW_GREEN_BITS); ADDC(GLFW_BLUE_BITS); ADDC(GLFW_ALPHA_BITS); ADDC(GLFW_DEPTH_BITS); ADDC(GLFW_STENCIL_BITS); ADDC(GLFW_ACCUM_RED_BITS); ADDC(GLFW_ACCUM_GREEN_BITS); ADDC(GLFW_ACCUM_BLUE_BITS); ADDC(GLFW_ACCUM_ALPHA_BITS); ADDC(GLFW_AUX_BUFFERS); ADDC(GLFW_STEREO); ADDC(GLFW_SAMPLES); ADDC(GLFW_SRGB_CAPABLE); ADDC(GLFW_REFRESH_RATE); ADDC(GLFW_DOUBLEBUFFER); // --- ADDC(GLFW_CLIENT_API); ADDC(GLFW_CONTEXT_VERSION_MAJOR); ADDC(GLFW_CONTEXT_VERSION_MINOR); ADDC(GLFW_CONTEXT_REVISION); ADDC(GLFW_CONTEXT_ROBUSTNESS); ADDC(GLFW_OPENGL_FORWARD_COMPAT); ADDC(GLFW_OPENGL_DEBUG_CONTEXT); ADDC(GLFW_OPENGL_PROFILE); // --- ADDC(GLFW_OPENGL_API); ADDC(GLFW_OPENGL_ES_API); // --- ADDC(GLFW_NO_ROBUSTNESS); ADDC(GLFW_NO_RESET_NOTIFICATION); ADDC(GLFW_LOSE_CONTEXT_ON_RESET); // --- ADDC(GLFW_OPENGL_ANY_PROFILE); ADDC(GLFW_OPENGL_CORE_PROFILE); ADDC(GLFW_OPENGL_COMPAT_PROFILE); // --- ADDC(GLFW_CURSOR); ADDC(GLFW_STICKY_KEYS); ADDC(GLFW_STICKY_MOUSE_BUTTONS); // --- ADDC(GLFW_CURSOR_NORMAL); ADDC(GLFW_CURSOR_HIDDEN); ADDC(GLFW_CURSOR_DISABLED); // --- ADDC(GLFW_CONNECTED); ADDC(GLFW_DISCONNECTED); return true; #undef ADDC } // }}} // }}} kitty-0.15.0/kitty/glfw_tests.c000066400000000000000000000046721356737523400164620ustar00rootroot00000000000000/* * glfw_tests.c * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "glfw_tests.h" #include "glfw-wrapper.h" #include "gl.h" #include #include #include #include static volatile bool running = true; static void* empty_thread_main(void* data UNUSED) { struct timespec time = { .tv_sec = 1 }; while (running) { nanosleep(&time, NULL); wakeup_main_loop(); } return 0; } static void key_callback(GLFWwindow *w UNUSED, GLFWkeyevent *ev) { if (ev->key == GLFW_KEY_ESCAPE && ev->action == GLFW_PRESS) { glfwSetWindowShouldClose(w, true); wakeup_main_loop(); } } static void window_close_callback(GLFWwindow* window) { glfwSetWindowShouldClose(window, true); wakeup_main_loop(); } static float nrand(void) { return (float) rand() / (float) RAND_MAX; } static void empty_main_tick(void *data) { GLFWwindow *window = data; if (glfwWindowShouldClose(window)) { running = false; glfwStopMainLoop(); return; } int width, height; float r = nrand(), g = nrand(), b = nrand(); float l = (float) sqrt(r * r + g * g + b * b); glfwGetFramebufferSize(window, &width, &height); glViewport(0, 0, width, height); glClearColor(r / l, g / l, b / l, 1.f); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); } int empty_main(void) { pthread_t thread; GLFWwindow* window; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, OPENGL_REQUIRED_VERSION_MAJOR); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, OPENGL_REQUIRED_VERSION_MINOR); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true); srand((unsigned int) time(NULL)); window = glfwCreateWindow(640, 480, "Empty Event Test", NULL, NULL); if (!window) { return (EXIT_FAILURE); } glfwMakeContextCurrent(window); gl_init(); glfwSetKeyboardCallback(window, key_callback); glfwSetWindowCloseCallback(window, window_close_callback); if (pthread_create(&thread, NULL, empty_thread_main, NULL) != 0) { fprintf(stderr, "Failed to create secondary thread\n"); return (EXIT_FAILURE); } glfwRunMainLoop(empty_main_tick, window); glfwHideWindow(window); pthread_join(thread, NULL); glfwDestroyWindow(window); return (EXIT_SUCCESS); } kitty-0.15.0/kitty/glfw_tests.h000066400000000000000000000002571356737523400164620ustar00rootroot00000000000000/* * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "state.h" int empty_main(void); kitty-0.15.0/kitty/graphics.c000066400000000000000000001061151356737523400160740ustar00rootroot00000000000000/* * graphics.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "graphics.h" #include "state.h" #include #include #include #include #include #include #include #include "png-reader.h" PyTypeObject GraphicsManager_Type; #define STORAGE_LIMIT (320u * (1024u * 1024u)) #define REPORT_ERROR(...) { log_error(__VA_ARGS__); } static bool send_to_gpu = true; GraphicsManager* grman_alloc() { GraphicsManager *self = (GraphicsManager *)GraphicsManager_Type.tp_alloc(&GraphicsManager_Type, 0); self->images_capacity = 64; self->images = calloc(self->images_capacity, sizeof(Image)); self->capacity = 64; self->render_data = calloc(self->capacity, sizeof(ImageRenderData)); if (self->images == NULL || self->render_data == NULL) { PyErr_NoMemory(); Py_CLEAR(self); return NULL; } return self; } static inline void free_refs_data(Image *img) { free(img->refs); img->refs = NULL; img->refcnt = 0; img->refcap = 0; } static inline void free_load_data(LoadData *ld) { free(ld->buf); ld->buf_used = 0; ld->buf_capacity = 0; ld->buf = NULL; if (ld->mapped_file) munmap(ld->mapped_file, ld->mapped_file_sz); ld->mapped_file = NULL; ld->mapped_file_sz = 0; } static inline void free_image(GraphicsManager *self, Image *img) { if (img->texture_id) free_texture(&img->texture_id); free_refs_data(img); free_load_data(&(img->load_data)); self->used_storage -= img->used_storage; } static void dealloc(GraphicsManager* self) { size_t i; if (self->images) { for (i = 0; i < self->image_count; i++) free_image(self, self->images + i); free(self->images); } free(self->render_data); Py_TYPE(self)->tp_free((PyObject*)self); } static id_type internal_id_counter = 1; static inline Image* img_by_internal_id(GraphicsManager *self, id_type id) { for (size_t i = 0; i < self->image_count; i++) { if (self->images[i].internal_id == id) return self->images + i; } return NULL; } static inline Image* img_by_client_id(GraphicsManager *self, uint32_t id) { for (size_t i = 0; i < self->image_count; i++) { if (self->images[i].client_id == id) return self->images + i; } return NULL; } static inline void remove_image(GraphicsManager *self, size_t idx) { free_image(self, self->images + idx); remove_i_from_array(self->images, idx, self->image_count); self->layers_dirty = true; } static inline void remove_images(GraphicsManager *self, bool(*predicate)(Image*), id_type skip_image_internal_id) { for (size_t i = self->image_count; i-- > 0;) { Image *img = self->images + i; if (img->internal_id != skip_image_internal_id && predicate(img)) { remove_image(self, i); } } } // Loading image data {{{ static bool trim_predicate(Image *img) { return !img->data_loaded || !img->refcnt; } static int oldest_last(const void* a, const void *b) { monotonic_t ans = ((Image*)(b))->atime - ((Image*)(a))->atime; return ans < 0 ? -1 : (ans == 0 ? 0 : 1); } static inline void apply_storage_quota(GraphicsManager *self, size_t storage_limit, id_type currently_added_image_internal_id) { // First remove unreferenced images, even if they have an id remove_images(self, trim_predicate, currently_added_image_internal_id); if (self->used_storage < storage_limit) return; qsort(self->images, self->image_count, sizeof(self->images[0]), oldest_last); while (self->used_storage > storage_limit && self->image_count > 0) { remove_image(self, self->image_count - 1); } if (!self->image_count) self->used_storage = 0; // sanity check } static char add_response[512] = {0}; static bool has_add_respose = false; static inline void set_add_response(const char *code, const char *fmt, ...) { va_list args; va_start(args, fmt); size_t sz = sizeof(add_response)/sizeof(add_response[0]); int num = snprintf(add_response, sz, "%s:", code); vsnprintf(add_response + num, sz - num, fmt, args); va_end(args); has_add_respose = true; } // Decode formats {{{ #define ABRT(code, ...) { set_add_response(#code, __VA_ARGS__); goto err; } static inline bool mmap_img_file(GraphicsManager UNUSED *self, Image *img, int fd, size_t sz, off_t offset) { if (!sz) { struct stat s; if (fstat(fd, &s) != 0) ABRT(EBADF, "Failed to fstat() the fd: %d file with error: [%d] %s", fd, errno, strerror(errno)); sz = s.st_size; } void *addr = mmap(0, sz, PROT_READ, MAP_SHARED, fd, offset); if (addr == MAP_FAILED) ABRT(EBADF, "Failed to map image file fd: %d at offset: %zd with size: %zu with error: [%d] %s", fd, offset, sz, errno, strerror(errno)); img->load_data.mapped_file = addr; img->load_data.mapped_file_sz = sz; return true; err: return false; } static inline const char* zlib_strerror(int ret) { #define Z(x) case x: return #x; static char buf[128]; switch(ret) { case Z_ERRNO: return strerror(errno); default: snprintf(buf, sizeof(buf)/sizeof(buf[0]), "Unknown error: %d", ret); return buf; Z(Z_STREAM_ERROR); Z(Z_DATA_ERROR); Z(Z_MEM_ERROR); Z(Z_BUF_ERROR); Z(Z_VERSION_ERROR); } #undef Z } static inline bool inflate_zlib(GraphicsManager UNUSED *self, Image *img, uint8_t *buf, size_t bufsz) { bool ok = false; z_stream z; uint8_t *decompressed = malloc(img->load_data.data_sz); if (decompressed == NULL) fatal("Out of memory allocating decompression buffer"); z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL; z.avail_in = bufsz; z.next_in = (Bytef*)buf; z.avail_out = img->load_data.data_sz; z.next_out = decompressed; int ret; if ((ret = inflateInit(&z)) != Z_OK) ABRT(ENOMEM, "Failed to initialize inflate with error: %s", zlib_strerror(ret)); if ((ret = inflate(&z, Z_FINISH)) != Z_STREAM_END) ABRT(EINVAL, "Failed to inflate image data with error: %s", zlib_strerror(ret)); if (z.avail_out) ABRT(EINVAL, "Image data size post inflation does not match expected size"); free_load_data(&img->load_data); img->load_data.buf_capacity = img->load_data.data_sz; img->load_data.buf = decompressed; img->load_data.buf_used = img->load_data.data_sz; ok = true; err: inflateEnd(&z); if (!ok) free(decompressed); return ok; } static void png_error_handler(const char *code, const char *msg) { set_add_response(code, "%s", msg); } static inline bool inflate_png(GraphicsManager UNUSED *self, Image *img, uint8_t *buf, size_t bufsz) { png_read_data d = {.err_handler=png_error_handler}; inflate_png_inner(&d, buf, bufsz); if (d.ok) { free_load_data(&img->load_data); img->load_data.buf = d.decompressed; img->load_data.buf_capacity = d.sz; img->load_data.buf_used = d.sz; img->load_data.data_sz = d.sz; img->width = d.width; img->height = d.height; } else free(d.decompressed); free(d.row_pointers); return d.ok; } #undef ABRT // }}} static bool add_trim_predicate(Image *img) { return !img->data_loaded || (!img->client_id && !img->refcnt); } static inline Image* find_or_create_image(GraphicsManager *self, uint32_t id, bool *existing) { if (id) { for (size_t i = 0; i < self->image_count; i++) { if (self->images[i].client_id == id) { *existing = true; return self->images + i; } } } *existing = false; ensure_space_for(self, images, Image, self->image_count + 1, images_capacity, 64, true); Image *ans = self->images + self->image_count++; zero_at_ptr(ans); return ans; } static Image* handle_add_command(GraphicsManager *self, const GraphicsCommand *g, const uint8_t *payload, bool *is_dirty, uint32_t iid) { #define ABRT(code, ...) { set_add_response(#code, __VA_ARGS__); self->loading_image = 0; if (img) img->data_loaded = false; return NULL; } #define MAX_DATA_SZ (4u * 100000000u) has_add_respose = false; bool existing, init_img = true; Image *img = NULL; unsigned char tt = g->transmission_type ? g->transmission_type : 'd'; enum FORMATS { RGB=24, RGBA=32, PNG=100 }; uint32_t fmt = g->format ? g->format : RGBA; if (tt == 'd' && self->loading_image) init_img = false; if (init_img) { self->last_init_graphics_command = *g; self->last_init_graphics_command.id = iid; self->loading_image = 0; if (g->data_width > 10000 || g->data_height > 10000) ABRT(EINVAL, "Image too large"); remove_images(self, add_trim_predicate, 0); img = find_or_create_image(self, iid, &existing); if (existing) { free_load_data(&img->load_data); img->data_loaded = false; free_refs_data(img); *is_dirty = true; self->layers_dirty = true; } else { img->internal_id = internal_id_counter++; img->client_id = iid; } img->atime = monotonic(); img->used_storage = 0; img->width = g->data_width; img->height = g->data_height; switch(fmt) { case PNG: if (g->data_sz > MAX_DATA_SZ) ABRT(EINVAL, "PNG data size too large"); img->load_data.is_4byte_aligned = true; img->load_data.is_opaque = false; img->load_data.data_sz = g->data_sz ? g->data_sz : 1024 * 100; break; case RGB: case RGBA: img->load_data.data_sz = g->data_width * g->data_height * (fmt / 8); if (!img->load_data.data_sz) ABRT(EINVAL, "Zero width/height not allowed"); img->load_data.is_4byte_aligned = fmt == RGBA || (img->width % 4 == 0); img->load_data.is_opaque = fmt == RGB; break; default: ABRT(EINVAL, "Unknown image format: %u", fmt); } if (tt == 'd') { if (g->more) self->loading_image = img->internal_id; img->load_data.buf_capacity = img->load_data.data_sz + (g->compressed ? 1024 : 10); // compression header img->load_data.buf = malloc(img->load_data.buf_capacity); img->load_data.buf_used = 0; if (img->load_data.buf == NULL) { ABRT(ENOMEM, "Out of memory"); img->load_data.buf_capacity = 0; img->load_data.buf_used = 0; } } } else { self->last_init_graphics_command.more = g->more; self->last_init_graphics_command.payload_sz = g->payload_sz; g = &self->last_init_graphics_command; tt = g->transmission_type ? g->transmission_type : 'd'; fmt = g->format ? g->format : RGBA; img = img_by_internal_id(self, self->loading_image); if (img == NULL) { self->loading_image = 0; ABRT(EILSEQ, "More payload loading refers to non-existent image"); } } int fd; static char fname[2056] = {0}; switch(tt) { case 'd': // direct if (img->load_data.buf_capacity - img->load_data.buf_used < g->payload_sz) { if (img->load_data.buf_used + g->payload_sz > MAX_DATA_SZ || fmt != PNG) ABRT(EFBIG, "Too much data"); img->load_data.buf_capacity = MIN(2 * img->load_data.buf_capacity, MAX_DATA_SZ); img->load_data.buf = realloc(img->load_data.buf, img->load_data.buf_capacity); if (img->load_data.buf == NULL) { ABRT(ENOMEM, "Out of memory"); img->load_data.buf_capacity = 0; img->load_data.buf_used = 0; } } memcpy(img->load_data.buf + img->load_data.buf_used, payload, g->payload_sz); img->load_data.buf_used += g->payload_sz; if (!g->more) { img->data_loaded = true; self->loading_image = 0; } break; case 'f': // file case 't': // temporary file case 's': // POSIX shared memory if (g->payload_sz > 2048) ABRT(EINVAL, "Filename too long"); snprintf(fname, sizeof(fname)/sizeof(fname[0]), "%.*s", (int)g->payload_sz, payload); if (tt == 's') fd = shm_open(fname, O_RDONLY, 0); else fd = open(fname, O_CLOEXEC | O_RDONLY); if (fd == -1) ABRT(EBADF, "Failed to open file %s for graphics transmission with error: [%d] %s", fname, errno, strerror(errno)); img->data_loaded = mmap_img_file(self, img, fd, g->data_sz, g->data_offset); safe_close(fd); if (tt == 't') { if (global_state.boss) { call_boss(safe_delete_temp_file, "s", fname); } else unlink(fname); } else if (tt == 's') shm_unlink(fname); break; default: ABRT(EINVAL, "Unknown transmission type: %c", g->transmission_type); } if (!img->data_loaded) return NULL; self->loading_image = 0; bool needs_processing = g->compressed || fmt == PNG; if (needs_processing) { uint8_t *buf; size_t bufsz; #define IB { if (img->load_data.buf) { buf = img->load_data.buf; bufsz = img->load_data.buf_used; } else { buf = img->load_data.mapped_file; bufsz = img->load_data.mapped_file_sz; } } switch(g->compressed) { case 'z': IB; if (!inflate_zlib(self, img, buf, bufsz)) { img->data_loaded = false; return NULL; } break; case 0: break; default: ABRT(EINVAL, "Unknown image compression: %c", g->compressed); } switch(fmt) { case PNG: IB; if (!inflate_png(self, img, buf, bufsz)) { img->data_loaded = false; return NULL; } break; default: break; } #undef IB img->load_data.data = img->load_data.buf; if (img->load_data.buf_used < img->load_data.data_sz) { ABRT(ENODATA, "Insufficient image data: %zu < %zu", img->load_data.buf_used, img->load_data.data_sz); } if (img->load_data.mapped_file) { munmap(img->load_data.mapped_file, img->load_data.mapped_file_sz); img->load_data.mapped_file = NULL; img->load_data.mapped_file_sz = 0; } } else { if (tt == 'd') { if (img->load_data.buf_used < img->load_data.data_sz) { ABRT(ENODATA, "Insufficient image data: %zu < %zu", img->load_data.buf_used, img->load_data.data_sz); } else img->load_data.data = img->load_data.buf; } else { if (img->load_data.mapped_file_sz < img->load_data.data_sz) { ABRT(ENODATA, "Insufficient image data: %zu < %zu", img->load_data.mapped_file_sz, img->load_data.data_sz); } else img->load_data.data = img->load_data.mapped_file; } } size_t required_sz = (img->load_data.is_opaque ? 3 : 4) * img->width * img->height; if (img->load_data.data_sz != required_sz) ABRT(EINVAL, "Image dimensions: %ux%u do not match data size: %zu, expected size: %zu", img->width, img->height, img->load_data.data_sz, required_sz); if (LIKELY(img->data_loaded && send_to_gpu)) { send_image_to_gpu(&img->texture_id, img->load_data.data, img->width, img->height, img->load_data.is_opaque, img->load_data.is_4byte_aligned); free_load_data(&img->load_data); self->used_storage += required_sz; img->used_storage = required_sz; } return img; #undef MAX_DATA_SZ #undef ABRT } static inline const char* create_add_response(GraphicsManager UNUSED *self, bool data_loaded, uint32_t iid) { static char rbuf[sizeof(add_response)/sizeof(add_response[0]) + 64]; if (iid) { if (!has_add_respose) { if (!data_loaded) return NULL; snprintf(add_response, 10, "OK"); } snprintf(rbuf, sizeof(rbuf)/sizeof(rbuf[0]) - 1, "Gi=%u;%s", iid, add_response); return rbuf; } return NULL; } // }}} // Displaying images {{{ static inline void update_src_rect(ImageRef *ref, Image *img) { // The src rect in OpenGL co-ords [0, 1] with origin at top-left corner of image ref->src_rect.left = (float)ref->src_x / (float)img->width; ref->src_rect.right = (float)(ref->src_x + ref->src_width) / (float)img->width; ref->src_rect.top = (float)ref->src_y / (float)img->height; ref->src_rect.bottom = (float)(ref->src_y + ref->src_height) / (float)img->height; } static inline void update_dest_rect(ImageRef *ref, uint32_t num_cols, uint32_t num_rows, CellPixelSize cell) { uint32_t t; if (num_cols == 0) { t = ref->src_width + ref->cell_x_offset; num_cols = t / cell.width; if (t > num_cols * cell.width) num_cols += 1; } if (num_rows == 0) { t = ref->src_height + ref->cell_y_offset; num_rows = t / cell.height; if (t > num_rows * cell.height) num_rows += 1; } ref->effective_num_rows = num_rows; ref->effective_num_cols = num_cols; } static void handle_put_command(GraphicsManager *self, const GraphicsCommand *g, Cursor *c, bool *is_dirty, Image *img, CellPixelSize cell) { has_add_respose = false; if (img == NULL) img = img_by_client_id(self, g->id); if (img == NULL) { set_add_response("ENOENT", "Put command refers to non-existent image with id: %u", g->id); return; } if (!img->data_loaded) { set_add_response("ENOENT", "Put command refers to image with id: %u that could not load its data", g->id); return; } ensure_space_for(img, refs, ImageRef, img->refcnt + 1, refcap, 16, true); *is_dirty = true; self->layers_dirty = true; ImageRef *ref = NULL; for (size_t i=0; i < img->refcnt; i++) { if ((unsigned)img->refs[i].start_row == c->x && (unsigned)img->refs[i].start_column == c->y) { ref = img->refs + i; break; } } if (ref == NULL) { ref = img->refs + img->refcnt++; zero_at_ptr(ref); } img->atime = monotonic(); ref->src_x = g->x_offset; ref->src_y = g->y_offset; ref->src_width = g->width ? g->width : img->width; ref->src_height = g->height ? g->height : img->height; ref->src_width = MIN(ref->src_width, img->width - (img->width > ref->src_x ? ref->src_x : img->width)); ref->src_height = MIN(ref->src_height, img->height - (img->height > ref->src_y ? ref->src_y : img->height)); ref->z_index = g->z_index; ref->start_row = c->y; ref->start_column = c->x; ref->cell_x_offset = MIN(g->cell_x_offset, cell.width - 1); ref->cell_y_offset = MIN(g->cell_y_offset, cell.height - 1); ref->num_cols = g->num_cells; ref->num_rows = g->num_lines; update_src_rect(ref, img); update_dest_rect(ref, g->num_cells, g->num_lines, cell); // Move the cursor, the screen will take care of ensuring it is in bounds c->x += ref->effective_num_cols; c->y += ref->effective_num_rows - 1; } static int cmp_by_zindex_and_image(const void *a_, const void *b_) { const ImageRenderData *a = (const ImageRenderData*)a_, *b = (const ImageRenderData*)b_; int ans = a->z_index - b->z_index; if (ans == 0) ans = a->image_id - b->image_id; return ans; } static inline void set_vertex_data(ImageRenderData *rd, const ImageRef *ref, const ImageRect *dest_rect) { #define R(n, a, b) rd->vertices[n*4] = ref->src_rect.a; rd->vertices[n*4 + 1] = ref->src_rect.b; rd->vertices[n*4 + 2] = dest_rect->a; rd->vertices[n*4 + 3] = dest_rect->b; R(0, right, top); R(1, right, bottom); R(2, left, bottom); R(3, left, top); #undef R } void gpu_data_for_centered_image(ImageRenderData *ans, unsigned int screen_width_px, unsigned int screen_height_px, unsigned int width, unsigned int height) { static const ImageRef source_rect = { .src_rect = { .left=0, .top=0, .bottom=1, .right=1 }}; const ImageRef *ref = &source_rect; float width_frac = 2 * MIN(1, width / (float)screen_width_px), height_frac = 2 * MIN(1, height / (float)screen_height_px); float hmargin = (2 - width_frac) / 2; float vmargin = (2 - height_frac) / 2; const ImageRect r = { .left = -1 + hmargin, .right = -1 + hmargin + width_frac, .top = 1 - vmargin, .bottom = 1 - vmargin - height_frac }; set_vertex_data(ans, ref, &r); } bool grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float screen_left, float screen_top, float dx, float dy, unsigned int num_cols, unsigned int num_rows, CellPixelSize cell) { if (self->last_scrolled_by != scrolled_by) self->layers_dirty = true; self->last_scrolled_by = scrolled_by; if (!self->layers_dirty) return false; self->layers_dirty = false; size_t i, j; self->num_of_negative_refs = 0; self->num_of_positive_refs = 0; Image *img; ImageRef *ref; ImageRect r; float screen_width = dx * num_cols, screen_height = dy * num_rows; float screen_bottom = screen_top - screen_height; float screen_width_px = num_cols * cell.width; float screen_height_px = num_rows * cell.height; float y0 = screen_top - dy * scrolled_by; // Iterate over all visible refs and create render data self->count = 0; for (i = 0; i < self->image_count; i++) { img = self->images + i; for (j = 0; j < img->refcnt; j++) { ref = img->refs + j; r.top = y0 - ref->start_row * dy - dy * (float)ref->cell_y_offset / (float)cell.height; if (ref->num_rows > 0) r.bottom = y0 - (ref->start_row + (int32_t)ref->num_rows) * dy; else r.bottom = r.top - screen_height * (float)ref->src_height / screen_height_px; if (r.top <= screen_bottom || r.bottom >= screen_top) continue; // not visible r.left = screen_left + ref->start_column * dx + dx * (float)ref->cell_x_offset / (float) cell.width; if (ref->num_cols > 0) r.right = screen_left + (ref->start_column + (int32_t)ref->num_cols) * dx; else r.right = r.left + screen_width * (float)ref->src_width / screen_width_px; if (ref->z_index < 0) self->num_of_negative_refs++; else self->num_of_positive_refs++; ensure_space_for(self, render_data, ImageRenderData, self->count + 1, capacity, 64, true); ImageRenderData *rd = self->render_data + self->count; zero_at_ptr(rd); set_vertex_data(rd, ref, &r); self->count++; rd->z_index = ref->z_index; rd->image_id = img->internal_id; rd->texture_id = img->texture_id; }} if (!self->count) return false; // Sort visible refs in draw order (z-index, img) qsort(self->render_data, self->count, sizeof(self->render_data[0]), cmp_by_zindex_and_image); // Calculate the group counts i = 0; while (i < self->count) { id_type image_id = self->render_data[i].image_id, start = i; if (start == self->count - 1) i = self->count; else { while (i < self->count - 1 && self->render_data[++i].image_id == image_id) {} } self->render_data[start].group_count = i - start; } return true; } // }}} // Image lifetime/scrolling {{{ static inline void filter_refs(GraphicsManager *self, const void* data, bool free_images, bool (*filter_func)(ImageRef*, Image*, const void*, CellPixelSize), CellPixelSize cell) { self->layers_dirty = self->image_count > 0; for (size_t i = self->image_count; i-- > 0;) { Image *img = self->images + i; for (size_t j = img->refcnt; j-- > 0;) { ImageRef *ref = img->refs + j; if (filter_func(ref, img, data, cell)) { remove_i_from_array(img->refs, j, img->refcnt); } } if (img->refcnt == 0 && (free_images || img->client_id == 0)) remove_image(self, i); } } static inline bool scroll_filter_func(ImageRef *ref, Image UNUSED *img, const void *data, CellPixelSize cell UNUSED) { ScrollData *d = (ScrollData*)data; ref->start_row += d->amt; return ref->start_row + (int32_t)ref->effective_num_rows <= d->limit; } static inline bool ref_within_region(ImageRef *ref, index_type margin_top, index_type margin_bottom) { return ref->start_row >= (int32_t)margin_top && ref->start_row + ref->effective_num_rows <= margin_bottom; } static inline bool ref_outside_region(ImageRef *ref, index_type margin_top, index_type margin_bottom) { return ref->start_row + ref->effective_num_rows <= margin_top || ref->start_row > (int32_t)margin_bottom; } static inline bool scroll_filter_margins_func(ImageRef* ref, Image* img, const void* data, CellPixelSize cell) { ScrollData *d = (ScrollData*)data; if (ref_within_region(ref, d->margin_top, d->margin_bottom)) { ref->start_row += d->amt; if (ref_outside_region(ref, d->margin_top, d->margin_bottom)) return true; // Clip the image if scrolling has resulted in part of it being outside the page area uint32_t clip_amt, clipped_rows; if (ref->start_row < (int32_t)d->margin_top) { // image moved up clipped_rows = d->margin_top - ref->start_row; clip_amt = cell.height * clipped_rows; if (ref->src_height <= clip_amt) return true; ref->src_y += clip_amt; ref->src_height -= clip_amt; ref->effective_num_rows -= clipped_rows; update_src_rect(ref, img); ref->start_row += clipped_rows; } else if (ref->start_row + ref->effective_num_rows > d->margin_bottom) { // image moved down clipped_rows = ref->start_row + ref->effective_num_rows - d->margin_bottom; clip_amt = cell.height * clipped_rows; if (ref->src_height <= clip_amt) return true; ref->src_height -= clip_amt; ref->effective_num_rows -= clipped_rows; update_src_rect(ref, img); } return ref_outside_region(ref, d->margin_top, d->margin_bottom); } return false; } void grman_scroll_images(GraphicsManager *self, const ScrollData *data, CellPixelSize cell) { filter_refs(self, data, true, data->has_margins ? scroll_filter_margins_func : scroll_filter_func, cell); } static inline bool clear_filter_func(ImageRef *ref, Image UNUSED *img, const void UNUSED *data, CellPixelSize cell UNUSED) { return ref->start_row + (int32_t)ref->effective_num_rows > 0; } static inline bool clear_all_filter_func(ImageRef *ref UNUSED, Image UNUSED *img, const void UNUSED *data, CellPixelSize cell UNUSED) { return true; } void grman_clear(GraphicsManager *self, bool all, CellPixelSize cell) { filter_refs(self, NULL, true, all ? clear_all_filter_func : clear_filter_func, cell); } static inline bool id_filter_func(ImageRef UNUSED *ref, Image *img, const void *data, CellPixelSize cell UNUSED) { uint32_t iid = *(uint32_t*)data; return img->client_id == iid; } static inline bool x_filter_func(ImageRef *ref, Image UNUSED *img, const void *data, CellPixelSize cell UNUSED) { const GraphicsCommand *g = data; return ref->start_column <= (int32_t)g->x_offset - 1 && ((int32_t)g->x_offset - 1) < ((int32_t)(ref->start_column + ref->effective_num_cols)); } static inline bool y_filter_func(ImageRef *ref, Image UNUSED *img, const void *data, CellPixelSize cell UNUSED) { const GraphicsCommand *g = data; return ref->start_row <= (int32_t)g->y_offset - 1 && ((int32_t)(g->y_offset - 1 < ref->start_row + ref->effective_num_rows)); } static inline bool z_filter_func(ImageRef *ref, Image UNUSED *img, const void *data, CellPixelSize cell UNUSED) { const GraphicsCommand *g = data; return ref->z_index == g->z_index; } static inline bool point_filter_func(ImageRef *ref, Image *img, const void *data, CellPixelSize cell) { return x_filter_func(ref, img, data, cell) && y_filter_func(ref, img, data, cell); } static inline bool point3d_filter_func(ImageRef *ref, Image *img, const void *data, CellPixelSize cell) { return z_filter_func(ref, img, data, cell) && point_filter_func(ref, img, data, cell); } static void handle_delete_command(GraphicsManager *self, const GraphicsCommand *g, Cursor *c, bool *is_dirty, CellPixelSize cell) { static GraphicsCommand d; switch (g->delete_action) { #define I(u, data, func) filter_refs(self, data, g->delete_action == u, func, cell); *is_dirty = true; break #define D(l, u, data, func) case l: case u: I(u, data, func) #define G(l, u, func) D(l, u, g, func) case 0: D('a', 'A', NULL, clear_filter_func); D('i', 'I', &g->id, id_filter_func); G('p', 'P', point_filter_func); G('q', 'Q', point3d_filter_func); G('x', 'X', x_filter_func); G('y', 'Y', y_filter_func); G('z', 'Z', z_filter_func); case 'c': case 'C': d.x_offset = c->x + 1; d.y_offset = c->y + 1; I('C', &d, point_filter_func); default: REPORT_ERROR("Unknown graphics command delete action: %c", g->delete_action); break; #undef G #undef D #undef I } } // }}} void grman_resize(GraphicsManager *self, index_type UNUSED old_lines, index_type UNUSED lines, index_type UNUSED old_columns, index_type UNUSED columns) { self->layers_dirty = true; } void grman_rescale(GraphicsManager *self, CellPixelSize cell) { ImageRef *ref; Image *img; self->layers_dirty = true; for (size_t i = self->image_count; i-- > 0;) { img = self->images + i; for (size_t j = img->refcnt; j-- > 0;) { ref = img->refs + j; ref->cell_x_offset = MIN(ref->cell_x_offset, cell.width - 1); ref->cell_y_offset = MIN(ref->cell_y_offset, cell.height - 1); update_dest_rect(ref, ref->num_cols, ref->num_rows, cell); } } } const char* grman_handle_command(GraphicsManager *self, const GraphicsCommand *g, const uint8_t *payload, Cursor *c, bool *is_dirty, CellPixelSize cell) { const char *ret = NULL; switch(g->action) { case 0: case 't': case 'T': case 'q': { uint32_t iid = g->id, q_iid = iid; if (g->action == 'q') { iid = 0; if (!q_iid) { REPORT_ERROR("Query graphics command without image id"); break; } } Image *image = handle_add_command(self, g, payload, is_dirty, iid); ret = create_add_response(self, image != NULL, g->action == 'q' ? q_iid: self->last_init_graphics_command.id); if (self->last_init_graphics_command.action == 'T' && image && image->data_loaded) handle_put_command(self, &self->last_init_graphics_command, c, is_dirty, image, cell); id_type added_image_id = image ? image->internal_id : 0; if (g->action == 'q') remove_images(self, add_trim_predicate, 0); if (self->used_storage > STORAGE_LIMIT) apply_storage_quota(self, STORAGE_LIMIT, added_image_id); break; } case 'p': if (!g->id) { REPORT_ERROR("Put graphics command without image id"); break; } handle_put_command(self, g, c, is_dirty, NULL, cell); ret = create_add_response(self, true, g->id); break; case 'd': handle_delete_command(self, g, c, is_dirty, cell); break; default: REPORT_ERROR("Unknown graphics command action: %c", g->action); break; } return ret; } // Boilerplate {{{ static PyObject * new(PyTypeObject UNUSED *type, PyObject UNUSED *args, PyObject UNUSED *kwds) { PyObject *ans = (PyObject*)grman_alloc(); if (ans == NULL) PyErr_NoMemory(); return ans; } static inline PyObject* image_as_dict(Image *img) { #define U(x) #x, img->x return Py_BuildValue("{sI sI sI sI sK sI sO sO sN}", U(texture_id), U(client_id), U(width), U(height), U(internal_id), U(refcnt), "data_loaded", img->data_loaded ? Py_True : Py_False, "is_4byte_aligned", img->load_data.is_4byte_aligned ? Py_True : Py_False, "data", Py_BuildValue("y#", img->load_data.data, img->load_data.data_sz) ); #undef U } #define W(x) static PyObject* py##x(GraphicsManager UNUSED *self, PyObject *args) #define PA(fmt, ...) if(!PyArg_ParseTuple(args, fmt, __VA_ARGS__)) return NULL; W(image_for_client_id) { unsigned long id = PyLong_AsUnsignedLong(args); bool existing = false; Image *img = find_or_create_image(self, id, &existing); if (!existing) { Py_RETURN_NONE; } return image_as_dict(img); } W(shm_write) { const char *name, *data; Py_ssize_t sz; PA("ss#", &name, &data, &sz); int fd = shm_open(name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (fd == -1) { PyErr_SetFromErrnoWithFilename(PyExc_OSError, name); return NULL; } int ret = ftruncate(fd, sz); if (ret != 0) { safe_close(fd); PyErr_SetFromErrnoWithFilename(PyExc_OSError, name); return NULL; } void *addr = mmap(0, sz, PROT_WRITE, MAP_SHARED, fd, 0); if (addr == MAP_FAILED) { safe_close(fd); PyErr_SetFromErrnoWithFilename(PyExc_OSError, name); return NULL; } memcpy(addr, data, sz); if (munmap(addr, sz) != 0) { safe_close(fd); PyErr_SetFromErrnoWithFilename(PyExc_OSError, name); return NULL; } safe_close(fd); Py_RETURN_NONE; } W(shm_unlink) { char *name; PA("s", &name); int ret = shm_unlink(name); if (ret == -1) { PyErr_SetFromErrnoWithFilename(PyExc_OSError, name); return NULL; } Py_RETURN_NONE; } W(set_send_to_gpu) { send_to_gpu = PyObject_IsTrue(args) ? true : false; Py_RETURN_NONE; } W(update_layers) { unsigned int scrolled_by, sx, sy; float xstart, ystart, dx, dy; CellPixelSize cell; PA("IffffIIII", &scrolled_by, &xstart, &ystart, &dx, &dy, &sx, &sy, &cell.width, &cell.height); grman_update_layers(self, scrolled_by, xstart, ystart, dx, dy, sx, sy, cell); PyObject *ans = PyTuple_New(self->count); for (size_t i = 0; i < self->count; i++) { ImageRenderData *r = self->render_data + i; #define R(offset) Py_BuildValue("{sf sf sf sf}", "left", r->vertices[offset + 8], "top", r->vertices[offset + 1], "right", r->vertices[offset], "bottom", r->vertices[offset + 5]) PyTuple_SET_ITEM(ans, i, Py_BuildValue("{sN sN sI si sK}", "src_rect", R(0), "dest_rect", R(2), "group_count", r->group_count, "z_index", r->z_index, "image_id", r->image_id) ); #undef R } return ans; } #define M(x, va) {#x, (PyCFunction)py##x, va, ""} static PyMethodDef methods[] = { M(image_for_client_id, METH_O), M(update_layers, METH_VARARGS), {NULL} /* Sentinel */ }; static PyMemberDef members[] = { {"image_count", T_UINT, offsetof(GraphicsManager, image_count), 0, "image_count"}, {NULL}, }; PyTypeObject GraphicsManager_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.GraphicsManager", .tp_basicsize = sizeof(GraphicsManager), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "GraphicsManager", .tp_new = new, .tp_methods = methods, .tp_members = members, }; static PyMethodDef module_methods[] = { M(shm_write, METH_VARARGS), M(shm_unlink, METH_VARARGS), M(set_send_to_gpu, METH_O), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_graphics(PyObject *module) { if (PyType_Ready(&GraphicsManager_Type) < 0) return false; if (PyModule_AddObject(module, "GraphicsManager", (PyObject *)&GraphicsManager_Type) != 0) return false; if (PyModule_AddFunctions(module, module_methods) != 0) return false; Py_INCREF(&GraphicsManager_Type); return true; } // }}} kitty-0.15.0/kitty/graphics.h000066400000000000000000000053531356737523400161030ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #include "monotonic.h" typedef struct { unsigned char action, transmission_type, compressed, delete_action; uint32_t format, more, id, data_sz, data_offset; uint32_t width, height, x_offset, y_offset, data_height, data_width, num_cells, num_lines, cell_x_offset, cell_y_offset; int32_t z_index; size_t payload_sz; } GraphicsCommand; typedef struct { uint8_t *buf; size_t buf_capacity, buf_used; uint8_t *mapped_file; size_t mapped_file_sz; size_t data_sz; uint8_t *data; bool is_4byte_aligned; bool is_opaque; } LoadData; typedef struct { float left, top, right, bottom; } ImageRect; typedef struct { uint32_t src_width, src_height, src_x, src_y; uint32_t cell_x_offset, cell_y_offset, num_cols, num_rows, effective_num_rows, effective_num_cols; int32_t z_index; int32_t start_row, start_column; ImageRect src_rect; } ImageRef; typedef struct { uint32_t texture_id, client_id, width, height; id_type internal_id; bool data_loaded; LoadData load_data; ImageRef *refs; size_t refcnt, refcap; monotonic_t atime; size_t used_storage; } Image; typedef struct { float vertices[16]; uint32_t texture_id, group_count; int z_index; id_type image_id; } ImageRenderData; typedef struct { PyObject_HEAD size_t image_count, images_capacity; id_type loading_image; GraphicsCommand last_init_graphics_command; Image *images; size_t count, capacity; ImageRenderData *render_data; bool layers_dirty; size_t num_of_negative_refs, num_of_positive_refs; unsigned int last_scrolled_by; size_t used_storage; } GraphicsManager; typedef struct { int32_t amt, limit; index_type margin_top, margin_bottom; bool has_margins; } ScrollData; GraphicsManager* grman_alloc(void); void grman_clear(GraphicsManager*, bool, CellPixelSize fg); const char* grman_handle_command(GraphicsManager *self, const GraphicsCommand *g, const uint8_t *payload, Cursor *c, bool *is_dirty, CellPixelSize fg); bool grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float screen_left, float screen_top, float dx, float dy, unsigned int num_cols, unsigned int num_rows, CellPixelSize); void grman_scroll_images(GraphicsManager *self, const ScrollData*, CellPixelSize fg); void grman_resize(GraphicsManager*, index_type, index_type, index_type, index_type); void grman_rescale(GraphicsManager *self, CellPixelSize fg); void gpu_data_for_centered_image(ImageRenderData *ans, unsigned int screen_width_px, unsigned int screen_height_px, unsigned int width, unsigned int height); kitty-0.15.0/kitty/graphics_fragment.glsl000066400000000000000000000012601356737523400204710ustar00rootroot00000000000000#version GLSL_VERSION #define ALPHA_TYPE uniform sampler2D image; #ifdef ALPHA_MASK uniform uint fg; #else uniform float inactive_text_alpha; #endif in vec2 texcoord; out vec4 color; #ifdef ALPHA_MASK const uint BYTE_MASK = uint(0xFF); vec3 color_to_vec(uint c) { uint r, g, b; r = (c >> 16) & BYTE_MASK; g = (c >> 8) & BYTE_MASK; b = c & BYTE_MASK; return vec3(float(r) / 255.0, float(g) / 255.0, float(b) / 255.0); } #endif void main() { color = texture(image, texcoord); #ifdef ALPHA_MASK color = vec4(color_to_vec(fg), color.r); #else color.a *= inactive_text_alpha; #ifdef PREMULT color = vec4(color.rgb * color.a, color.a); #endif #endif } kitty-0.15.0/kitty/graphics_vertex.glsl000066400000000000000000000004041356737523400202020ustar00rootroot00000000000000#version GLSL_VERSION // Have to use fixed locations here as all variants of the program share the same VAO layout(location=0) in vec4 src; out vec2 texcoord; void main() { texcoord = vec2(src[0], src[1]); gl_Position = vec4(src[2], src[3], 0, 1); } kitty-0.15.0/kitty/history.c000066400000000000000000000403471356737523400160010ustar00rootroot00000000000000/* * history.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include "lineops.h" #include extern PyTypeObject Line_Type; #define SEGMENT_SIZE 2048 static inline void add_segment(HistoryBuf *self) { self->num_segments += 1; self->segments = PyMem_Realloc(self->segments, sizeof(HistoryBufSegment) * self->num_segments); if (self->segments == NULL) fatal("Out of memory allocating new history buffer segment"); HistoryBufSegment *s = self->segments + self->num_segments - 1; s->cpu_cells = PyMem_Calloc(self->xnum * SEGMENT_SIZE, sizeof(CPUCell)); s->gpu_cells = PyMem_Calloc(self->xnum * SEGMENT_SIZE, sizeof(GPUCell)); s->line_attrs = PyMem_Calloc(SEGMENT_SIZE, sizeof(line_attrs_type)); if (s->cpu_cells == NULL || s->gpu_cells == NULL || s->line_attrs == NULL) fatal("Out of memory allocating new history buffer segment"); } static inline index_type segment_for(HistoryBuf *self, index_type y) { index_type seg_num = y / SEGMENT_SIZE; while (UNLIKELY(seg_num >= self->num_segments && SEGMENT_SIZE * self->num_segments < self->ynum)) add_segment(self); if (UNLIKELY(seg_num >= self->num_segments)) fatal("Out of bounds access to history buffer line number: %u", y); return seg_num; } #define seg_ptr(which, stride) { \ index_type seg_num = segment_for(self, y); \ y -= seg_num * SEGMENT_SIZE; \ return self->segments[seg_num].which + y * stride; \ } static inline CPUCell* cpu_lineptr(HistoryBuf *self, index_type y) { seg_ptr(cpu_cells, self->xnum); } static inline GPUCell* gpu_lineptr(HistoryBuf *self, index_type y) { seg_ptr(gpu_cells, self->xnum); } static inline line_attrs_type* attrptr(HistoryBuf *self, index_type y) { seg_ptr(line_attrs, 1); } static inline PagerHistoryBuf* alloc_pagerhist(unsigned int pagerhist_sz) { PagerHistoryBuf *ph; if (!pagerhist_sz) return NULL; ph = PyMem_Calloc(1, sizeof(PagerHistoryBuf)); if (!ph) return NULL; ph->maxsz = pagerhist_sz / sizeof(Py_UCS4); ph->bufsize = 1024*1024 / sizeof(Py_UCS4); ph->buffer = PyMem_RawMalloc(1024*1024); if (!ph->buffer) { PyMem_Free(ph); return NULL; } return ph; } static inline void free_pagerhist(HistoryBuf *self) { if (self->pagerhist) PyMem_Free(self->pagerhist->buffer); PyMem_Free(self->pagerhist); self->pagerhist = NULL; } static inline bool pagerhist_extend(PagerHistoryBuf *ph, size_t minsz) { if (ph->bufsize >= ph->maxsz) return false; size_t newsz = ph->bufsize + MAX(1024u * 1024u, minsz); void *newbuf = PyMem_Realloc(ph->buffer, newsz * sizeof(Py_UCS4)); if (!newbuf) return false; ph->buffer = newbuf; ph->bufsize = newsz; return true; } static inline void pagerhist_clear(HistoryBuf *self) { if (!self->pagerhist || !self->pagerhist->maxsz) return; index_type pagerhist_sz = self->pagerhist->maxsz * sizeof(Py_UCS4); free_pagerhist(self); self->pagerhist = alloc_pagerhist(pagerhist_sz); } static PyObject * new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { HistoryBuf *self; unsigned int xnum = 1, ynum = 1, pagerhist_sz = 0; if (!PyArg_ParseTuple(args, "II|I", &ynum, &xnum, &pagerhist_sz)) return NULL; if (xnum == 0 || ynum == 0) { PyErr_SetString(PyExc_ValueError, "Cannot create an empty history buffer"); return NULL; } self = (HistoryBuf *)type->tp_alloc(type, 0); if (self != NULL) { self->xnum = xnum; self->ynum = ynum; self->num_segments = 0; add_segment(self); self->line = alloc_line(); self->line->xnum = xnum; self->pagerhist = alloc_pagerhist(pagerhist_sz); } return (PyObject*)self; } static void dealloc(HistoryBuf* self) { Py_CLEAR(self->line); for (size_t i = 0; i < self->num_segments; i++) { PyMem_Free(self->segments[i].cpu_cells); PyMem_Free(self->segments[i].gpu_cells); PyMem_Free(self->segments[i].line_attrs); } PyMem_Free(self->segments); free_pagerhist(self); Py_TYPE(self)->tp_free((PyObject*)self); } static inline index_type index_of(HistoryBuf *self, index_type lnum) { // The index (buffer position) of the line with line number lnum // This is reverse indexing, i.e. lnum = 0 corresponds to the *last* line in the buffer. if (self->count == 0) return 0; index_type idx = self->count - 1 - MIN(self->count - 1, lnum); return (self->start_of_data + idx) % self->ynum; } static inline void init_line(HistoryBuf *self, index_type num, Line *l) { // Initialize the line l, setting its pointer to the offsets for the line at index (buffer position) num l->cpu_cells = cpu_lineptr(self, num); l->gpu_cells = gpu_lineptr(self, num); l->continued = *attrptr(self, num) & CONTINUED_MASK; l->has_dirty_text = *attrptr(self, num) & TEXT_DIRTY_MASK ? true : false; } void historybuf_init_line(HistoryBuf *self, index_type lnum, Line *l) { init_line(self, index_of(self, lnum), l); } void historybuf_mark_line_clean(HistoryBuf *self, index_type y) { line_attrs_type *p = attrptr(self, index_of(self, y)); *p &= ~TEXT_DIRTY_MASK; } void historybuf_mark_line_dirty(HistoryBuf *self, index_type y) { line_attrs_type *p = attrptr(self, index_of(self, y)); *p |= TEXT_DIRTY_MASK; } void historybuf_clear(HistoryBuf *self) { pagerhist_clear(self); self->count = 0; self->start_of_data = 0; } static inline void pagerhist_push(HistoryBuf *self) { PagerHistoryBuf *ph = self->pagerhist; if (!ph) return; bool truncated; const GPUCell *prev_cell = NULL; Line l = {.xnum=self->xnum}; init_line(self, self->start_of_data, &l); #define EXPAND_IF_FULL(sz) { \ if (ph->bufsize - ph->end < sz && !pagerhist_extend(ph, sz)) { \ ph->bufend = ph->end; ph->end = 0; \ } \ } size_t sz = MAX(1024u, ph->bufsize - ph->end); sz = MAX(sz, self->xnum + self->xnum); EXPAND_IF_FULL(sz); if (ph->start != ph->end && !l.continued) { ph->buffer[ph->end++] = '\n'; } while(sz < ph->maxsz - 2) { size_t num = line_as_ansi(&l, ph->buffer + ph->end, ph->bufsize - ph->end - 2, &truncated, &prev_cell); if (!truncated) { ph->end += num; ph->buffer[ph->end++] = '\r'; if (ph->bufend) { ph->start = ph->end + 1 < ph->bufend ? ph->end + 1 : 0; } break; } // check if sz is too large too fit in buffer if (ph->bufsize > ph->maxsz && !ph->end) break; sz *= 2; EXPAND_IF_FULL(sz); } #undef EXPAND_IF_FULL } static inline index_type historybuf_push(HistoryBuf *self) { index_type idx = (self->start_of_data + self->count) % self->ynum; init_line(self, idx, self->line); if (self->count == self->ynum) { pagerhist_push(self); self->start_of_data = (self->start_of_data + 1) % self->ynum; } else self->count++; return idx; } void historybuf_add_line(HistoryBuf *self, const Line *line) { index_type idx = historybuf_push(self); copy_line(line, self->line); *attrptr(self, idx) = (line->continued & CONTINUED_MASK) | (line->has_dirty_text ? TEXT_DIRTY_MASK : 0); } static PyObject* line(HistoryBuf *self, PyObject *val) { #define line_doc "Return the line with line number val. This buffer grows upwards, i.e. 0 is the most recently added line" if (self->count == 0) { PyErr_SetString(PyExc_IndexError, "This buffer is empty"); return NULL; } index_type lnum = PyLong_AsUnsignedLong(val); if (lnum >= self->count) { PyErr_SetString(PyExc_IndexError, "Out of bounds"); return NULL; } init_line(self, index_of(self, lnum), self->line); Py_INCREF(self->line); return (PyObject*)self->line; } static PyObject* __str__(HistoryBuf *self) { PyObject *lines = PyTuple_New(self->count); if (lines == NULL) return PyErr_NoMemory(); for (index_type i = 0; i < self->count; i++) { init_line(self, index_of(self, i), self->line); PyObject *t = line_as_unicode(self->line); if (t == NULL) { Py_CLEAR(lines); return NULL; } PyTuple_SET_ITEM(lines, i, t); } PyObject *sep = PyUnicode_FromString("\n"); PyObject *ans = PyUnicode_Join(sep, lines); Py_CLEAR(lines); Py_CLEAR(sep); return ans; } static PyObject* push(HistoryBuf *self, PyObject *args) { #define push_doc "Push a line into this buffer, removing the oldest line, if necessary" Line *line; if (!PyArg_ParseTuple(args, "O!", &Line_Type, &line)) return NULL; historybuf_add_line(self, line); Py_RETURN_NONE; } static PyObject* as_ansi(HistoryBuf *self, PyObject *callback) { #define as_ansi_doc "as_ansi(callback) -> The contents of this buffer as ANSI escaped text. callback is called with each successive line." static Py_UCS4 t[5120]; Line l = {.xnum=self->xnum}; bool truncated; const GPUCell *prev_cell = NULL; for(unsigned int i = 0; i < self->count; i++) { init_line(self, i, &l); if (i < self->count - 1) { l.continued = *attrptr(self, index_of(self, i + 1)) & CONTINUED_MASK; } else l.continued = false; index_type num = line_as_ansi(&l, t, 5120, &truncated, &prev_cell); if (!(l.continued) && num < 5119) t[num++] = 10; // 10 = \n PyObject *ans = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, t, num); if (ans == NULL) return PyErr_NoMemory(); PyObject *ret = PyObject_CallFunctionObjArgs(callback, ans, NULL); Py_CLEAR(ans); if (ret == NULL) return NULL; Py_CLEAR(ret); } Py_RETURN_NONE; } static inline Line* get_line(HistoryBuf *self, index_type y, Line *l) { init_line(self, index_of(self, self->count - y - 1), l); return l; } static void pagerhist_rewrap(PagerHistoryBuf *ph, index_type xnum) { Py_UCS4 *buf = PyMem_RawMalloc(ph->bufsize * sizeof(Py_UCS4)); if (!buf) return; index_type s = ph->start, i = s, dest = 0, dest_bufend = 0, x = 0; index_type end = ph->bufend ? ph->bufend : ph->end; index_type lastmod_s = 0, lastmod_len = 0; #define CPY(_s, _l) { if (dest + (_l) >= ph->bufsize - 1) { dest_bufend = dest; dest = 0; } \ memcpy(buf + dest, ph->buffer + (_s), (_l) * sizeof(Py_UCS4)); dest += (_l); } while (i < end) { switch (ph->buffer[i]) { case '\n': CPY(s, i - s + 1); x = 0; s = i + 1; lastmod_len = 0; break; case '\r': CPY(s, i - s); if (!memcmp(ph->buffer + lastmod_s, ph->buffer + i + 1, lastmod_len * sizeof(Py_UCS4))) i += lastmod_len; s = i + 1; break; case '\x1b': if (ph->buffer[i+1] != '[') break; lastmod_s = i; while (ph->buffer[++i] != 'm'); lastmod_len = i - lastmod_s + 1; break; default: x++; break; } i++; if (ph->bufend && i == ph->bufend) { if (s != i) CPY(s, i - s); end = ph->end; i = s = 0; } if (x == xnum) { CPY(s, i - s); buf[dest++] = '\r'; s = i; x = 0; if (!(ph->buffer[i] == '\x1b' && ph->buffer[i+1] == '[') && lastmod_len) CPY(lastmod_s, lastmod_len); } } #undef CPY PyMem_Free(ph->buffer); ph->buffer = buf; ph->end = dest; ph->bufend = dest_bufend; ph->start = dest_bufend ? dest + 1 : 0; ph->rewrap_needed = false; } static PyObject * pagerhist_as_text(HistoryBuf *self, PyObject *callback) { PagerHistoryBuf *ph = self->pagerhist; PyObject *ret = NULL, *t = NULL; Py_UCS4 *buf = NULL; index_type num; if (!ph) Py_RETURN_NONE; if (ph->rewrap_needed) pagerhist_rewrap(ph, self->xnum); #define CALLBACK { \ if (t == NULL) goto end; \ ret = PyObject_CallFunctionObjArgs(callback, t, NULL); \ Py_DECREF(t); \ if (ret == NULL) goto end; \ Py_DECREF(ret); \ } num = (ph->bufend ? ph->bufend : ph->end) - ph->start; buf = ph->buffer + ph->start; t = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, num); CALLBACK; if (ph->bufend) { num = ph->end; buf = ph->buffer; t = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, num); CALLBACK; } Line l = {.xnum=self->xnum}; get_line(self, 0, &l); if (!l.continued) { t = PyUnicode_FromString("\n"); CALLBACK; } #undef CALLBACK end: if (PyErr_Occurred()) return NULL; Py_RETURN_NONE; } static PyObject* as_text(HistoryBuf *self, PyObject *args) { Line l = {.xnum=self->xnum}; #define gl(self, y) get_line(self, y, &l); as_text_generic(args, self, gl, self->count, self->xnum); #undef gl } static PyObject* dirty_lines(HistoryBuf *self, PyObject *a UNUSED) { #define dirty_lines_doc "dirty_lines() -> Line numbers of all lines that have dirty text." PyObject *ans = PyList_New(0); for (index_type i = 0; i < self->count; i++) { if (*attrptr(self, i) & TEXT_DIRTY_MASK) { PyList_Append(ans, PyLong_FromUnsignedLong(i)); } } return ans; } // Boilerplate {{{ static PyObject* rewrap(HistoryBuf *self, PyObject *args); #define rewrap_doc "" static PyMethodDef methods[] = { METHOD(line, METH_O) METHOD(as_ansi, METH_O) METHODB(pagerhist_as_text, METH_O), METHODB(as_text, METH_VARARGS), METHOD(dirty_lines, METH_NOARGS) METHOD(push, METH_VARARGS) METHOD(rewrap, METH_VARARGS) {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyMemberDef members[] = { {"xnum", T_UINT, offsetof(HistoryBuf, xnum), READONLY, "xnum"}, {"ynum", T_UINT, offsetof(HistoryBuf, ynum), READONLY, "ynum"}, {"count", T_UINT, offsetof(HistoryBuf, count), READONLY, "count"}, {NULL} /* Sentinel */ }; PyTypeObject HistoryBuf_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.HistoryBuf", .tp_basicsize = sizeof(HistoryBuf), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "History buffers", .tp_methods = methods, .tp_members = members, .tp_str = (reprfunc)__str__, .tp_new = new }; INIT_TYPE(HistoryBuf) HistoryBuf *alloc_historybuf(unsigned int lines, unsigned int columns, unsigned int pagerhist_sz) { return (HistoryBuf*)new(&HistoryBuf_Type, Py_BuildValue("III", lines, columns, pagerhist_sz), NULL); } // }}} #define BufType HistoryBuf #define map_src_index(y) ((src->start_of_data + y) % src->ynum) #define init_src_line(src_y) init_line(src, map_src_index(src_y), src->line); #define is_src_line_continued(src_y) (map_src_index(src_y) < src->ynum - 1 ? (*attrptr(src, map_src_index(src_y + 1)) & CONTINUED_MASK) : false) #define next_dest_line(cont) *attrptr(dest, historybuf_push(dest)) = cont & CONTINUED_MASK; dest->line->continued = cont; #define first_dest_line next_dest_line(false); #include "rewrap.h" void historybuf_rewrap(HistoryBuf *self, HistoryBuf *other) { while(other->num_segments < self->num_segments) add_segment(other); if (other->xnum == self->xnum && other->ynum == self->ynum) { // Fast path for (index_type i = 0; i < self->num_segments; i++) { memcpy(other->segments[i].cpu_cells, self->segments[i].cpu_cells, SEGMENT_SIZE * self->xnum * sizeof(CPUCell)); memcpy(other->segments[i].gpu_cells, self->segments[i].gpu_cells, SEGMENT_SIZE * self->xnum * sizeof(GPUCell)); memcpy(other->segments[i].line_attrs, self->segments[i].line_attrs, SEGMENT_SIZE * sizeof(line_attrs_type)); } other->count = self->count; other->start_of_data = self->start_of_data; return; } if (other->pagerhist && other->xnum != self->xnum && other->pagerhist->end != other->pagerhist->start) other->pagerhist->rewrap_needed = true; other->count = 0; other->start_of_data = 0; index_type x = 0, y = 0; if (self->count > 0) { rewrap_inner(self, other, self->count, NULL, &x, &y); for (index_type i = 0; i < other->count; i++) *attrptr(other, (other->start_of_data + i) % other->ynum) |= TEXT_DIRTY_MASK; } } static PyObject* rewrap(HistoryBuf *self, PyObject *args) { HistoryBuf *other; if (!PyArg_ParseTuple(args, "O!", &HistoryBuf_Type, &other)) return NULL; historybuf_rewrap(self, other); Py_RETURN_NONE; } kitty-0.15.0/kitty/key_encoding.py000066400000000000000000000227161356737523400171440ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import string from collections import namedtuple from . import fast_data_types as defines from .key_names import key_name_aliases # ENCODING {{{ ENCODING = { '0': 'G', '1': 'H', '2': 'I', '3': 'J', '4': 'K', '5': 'L', '6': 'M', '7': 'N', '8': 'O', '9': 'P', 'A': 'S', 'APOSTROPHE': 'B', 'B': 'T', 'BACKSLASH': 't', 'BACKSPACE': '1', 'C': 'U', 'CAPS LOCK': ':', 'COMMA': 'C', 'D': 'V', 'DELETE': '3', 'DOWN': '6', 'E': 'W', 'END': '-', 'ENTER': 'z', 'EQUAL': 'R', 'ESCAPE': 'y', 'F': 'X', 'F1': '/', 'F10': ']', 'F11': '{', 'F12': '}', 'F13': '@', 'F14': '%', 'F15': '$', 'F16': '#', 'F17': 'BA', 'F18': 'BB', 'F19': 'BC', 'F2': '*', 'F20': 'BD', 'F21': 'BE', 'F22': 'BF', 'F23': 'BG', 'F24': 'BH', 'F25': 'BI', 'F3': '?', 'F4': '&', 'F5': '<', 'F6': '>', 'F7': '(', 'F8': ')', 'F9': '[', 'G': 'Y', 'GRAVE ACCENT': 'v', 'H': 'Z', 'HOME': '.', 'I': 'a', 'INSERT': '2', 'J': 'b', 'K': 'c', 'KP 0': 'BJ', 'KP 1': 'BK', 'KP 2': 'BL', 'KP 3': 'BM', 'KP 4': 'BN', 'KP 5': 'BO', 'KP 6': 'BP', 'KP 7': 'BQ', 'KP 8': 'BR', 'KP 9': 'BS', 'KP ADD': 'BX', 'KP DECIMAL': 'BT', 'KP DIVIDE': 'BU', 'KP ENTER': 'BY', 'KP EQUAL': 'BZ', 'KP MULTIPLY': 'BV', 'KP SUBTRACT': 'BW', 'L': 'd', 'LEFT': '5', 'LEFT ALT': 'Bc', 'LEFT BRACKET': 's', 'LEFT CONTROL': 'Bb', 'LEFT SHIFT': 'Ba', 'LEFT SUPER': 'Bd', 'M': 'e', 'MINUS': 'D', 'N': 'f', 'NUM LOCK': '=', 'O': 'g', 'P': 'h', 'PAGE DOWN': '9', 'PAGE UP': '8', 'PAUSE': '!', 'PERIOD': 'E', 'PRINT SCREEN': '^', 'Q': 'i', 'R': 'j', 'RIGHT': '4', 'RIGHT ALT': 'Bg', 'RIGHT BRACKET': 'u', 'RIGHT CONTROL': 'Bf', 'RIGHT SHIFT': 'Be', 'RIGHT SUPER': 'Bh', 'S': 'k', 'SCROLL LOCK': '+', 'SEMICOLON': 'Q', 'SLASH': 'F', 'SPACE': 'A', 'T': 'l', 'TAB': '0', 'U': 'm', 'UP': '7', 'V': 'n', 'W': 'o', 'WORLD 1': 'w', 'WORLD 2': 'x', 'X': 'p', 'Y': 'q', 'Z': 'r', 'PLUS': 'Bi', 'UNDERSCORE': 'Bj', 'MENU': 'Bk', 'EXCLAM': 'Bl', 'DOUBLE QUOTE': 'Bm', 'NUMBER SIGN': 'Bn', 'DOLLAR': 'Bo', 'AMPERSAND': 'Bp', 'PARENTHESIS LEFT': 'Bq', 'PARENTHESIS RIGHT': 'Br', 'COLON': 'Bs', 'LESS': 'Bt', 'GREATER': 'Bu', 'AT': 'Bv', 'PARAGRAPH': 'Bw', 'MASCULINE': 'Bx', 'A GRAVE': 'By', 'A DIAERESIS': 'Bz', 'A RING': 'B0', 'AE': 'B1', 'C CEDILLA': 'B2', 'E GRAVE': 'B3', 'E ACUTE': 'B4', 'I GRAVE': 'B5', 'N TILDE': 'B6', 'O GRAVE': 'B7', 'O DIAERESIS': 'B8', 'O SLASH': 'B9', 'U GRAVE': 'B.', 'U DIAERESIS': 'B-', 'S SHARP': 'B:', 'CYRILLIC A': 'B+', 'CYRILLIC BE': 'B=', 'CYRILLIC VE': 'B^', 'CYRILLIC GHE': 'B!', 'CYRILLIC DE': 'B/', 'CYRILLIC IE': 'B*', 'CYRILLIC ZHE': 'B?', 'CYRILLIC ZE': 'B&', 'CYRILLIC I': 'B<', 'CYRILLIC SHORT I': 'B>', 'CYRILLIC KA': 'B(', 'CYRILLIC EL': 'B)', 'CYRILLIC EM': 'B[', 'CYRILLIC EN': 'B]', 'CYRILLIC O': 'B{', 'CYRILLIC PE': 'B}', 'CYRILLIC ER': 'B@', 'CYRILLIC ES': 'B%', 'CYRILLIC TE': 'B$', 'CYRILLIC U': 'B#', 'CYRILLIC EF': 'CA', 'CYRILLIC HA': 'CB', 'CYRILLIC TSE': 'CC', 'CYRILLIC CHE': 'CD', 'CYRILLIC SHA': 'CE', 'CYRILLIC SHCHA': 'CF', 'CYRILLIC HARD SIGN': 'CG', 'CYRILLIC YERU': 'CH', 'CYRILLIC SOFT SIGN': 'CI', 'CYRILLIC E': 'CJ', 'CYRILLIC YU': 'CK', 'CYRILLIC YA': 'CL', 'CYRILLIC IO': 'CM' } KEY_MAP = { 32: 'A', 33: 'Bl', 34: 'Bm', 35: 'Bn', 36: 'Bo', 38: 'Bp', 39: 'B', 40: 'Bq', 41: 'Br', 43: 'Bi', 44: 'C', 45: 'D', 46: 'E', 47: 'F', 48: 'G', 49: 'H', 50: 'I', 51: 'J', 52: 'K', 53: 'L', 54: 'M', 55: 'N', 56: 'O', 57: 'P', 58: 'Bs', 59: 'Q', 60: 'Bt', 61: 'R', 62: 'Bu', 64: 'Bv', 65: 'S', 66: 'T', 67: 'U', 68: 'V', 69: 'W', 70: 'X', 71: 'Y', 72: 'Z', 73: 'a', 74: 'b', 75: 'c', 76: 'd', 77: 'e', 78: 'f', 79: 'g', 80: 'h', 81: 'i', 82: 'j', 83: 'k', 84: 'l', 85: 'm', 86: 'n', 87: 'o', 88: 'p', 89: 'q', 90: 'r', 91: 's', 92: 't', 93: 'u', 95: 'Bj', 96: 'v', 161: 'w', 162: 'x', 167: 'Bw', 186: 'Bx', 192: 'By', 196: 'Bz', 197: 'B0', 198: 'B1', 199: 'B2', 200: 'B3', 201: 'B4', 204: 'B5', 209: 'B6', 210: 'B7', 214: 'B8', 216: 'B9', 217: 'B.', 220: 'B-', 222: 'B:', 223: 'B+', 224: 'B=', 225: 'B^', 226: 'B!', 227: 'B/', 228: 'B*', 229: 'B?', 230: 'B&', 231: 'B<', 232: 'B>', 233: 'B(', 234: 'B)', 235: 'B[', 236: 'B]', 237: 'B{', 238: 'B}', 239: 'B@', 240: 'B%', 241: 'B$', 242: 'B#', 243: 'CA', 244: 'CB', 245: 'CC', 246: 'CD', 247: 'CE', 248: 'CF', 249: 'CG', 250: 'CH', 251: 'CI', 252: 'CJ', 253: 'CK', 254: 'CL', 255: 'CM', 256: 'y', 257: 'z', 258: '0', 259: '1', 260: '2', 261: '3', 262: '4', 263: '5', 264: '6', 265: '7', 266: '8', 267: '9', 268: '.', 269: '-', 280: ':', 281: '+', 282: '=', 283: '^', 284: '!', 290: '/', 291: '*', 292: '?', 293: '&', 294: '<', 295: '>', 296: '(', 297: ')', 298: '[', 299: ']', 300: '{', 301: '}', 302: '@', 303: '%', 304: '$', 305: '#', 306: 'BA', 307: 'BB', 308: 'BC', 309: 'BD', 310: 'BE', 311: 'BF', 312: 'BG', 313: 'BH', 314: 'BI', 320: 'BJ', 321: 'BK', 322: 'BL', 323: 'BM', 324: 'BN', 325: 'BO', 326: 'BP', 327: 'BQ', 328: 'BR', 329: 'BS', 330: 'BT', 331: 'BU', 332: 'BV', 333: 'BW', 334: 'BX', 335: 'BY', 336: 'BZ', 340: 'Ba', 341: 'Bb', 342: 'Bc', 343: 'Bd', 344: 'Be', 345: 'Bf', 346: 'Bg', 347: 'Bh', 348: 'Bk' } # END_ENCODING }}} text_keys = ( string.ascii_uppercase + string.ascii_lowercase + string.digits + '`~!@#$%^&*()_-+=[{]}\\|<,>./?;:\'" ' 'ÄäÖöÜüß§ºàåæçèéìñòøùабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑÑ‘' ) def text_match(key): if key.upper() == 'SPACE': return ' ' if key not in text_keys: return return key def encode( integer, chars=string.ascii_uppercase + string.ascii_lowercase + string.digits + '.-:+=^!/*?&<>()[]{}@%$#' ): ans = '' d = len(chars) while True: integer, remainder = divmod(integer, d) ans = chars[remainder] + ans if integer == 0: break return ans def symbolic_name(glfw_name): return glfw_name[9:].replace('_', ' ') def update_encoding(): import re import subprocess keys = {a for a in dir(defines) if a.startswith('GLFW_KEY_')} ans = ENCODING key_map = {} i = len(ans) for k in sorted(keys, key=lambda k: getattr(defines, k)): if k in ('GLFW_KEY_LAST', 'GLFW_KEY_LAST_PRINTABLE'): continue val = getattr(defines, k) name = symbolic_name(k) if val <= defines.GLFW_KEY_LAST and val != defines.GLFW_KEY_UNKNOWN: if name not in ans: ans[name] = encode(i) i += 1 key_map[val] = ans[name] with open(__file__, 'r+') as f: raw = f.read() nraw = re.sub( r'^ENCODING = {.+^# END_ENCODING', 'ENCODING = {!r}\nKEY_MAP={!r}\n# END_ENCODING'.format( ans, key_map ), raw, flags=re.MULTILINE | re.DOTALL ) if raw == nraw: raise SystemExit('Failed to replace ENCODING dict') f.seek(0), f.truncate() f.write(nraw) subprocess.check_call(['yapf', '-i', __file__]) PRESS, REPEAT, RELEASE = 1, 2, 4 SHIFT, ALT, CTRL, SUPER = 1, 2, 4, 8 KeyEvent = namedtuple('KeyEvent', 'type mods key') type_map = {'p': PRESS, 't': REPEAT, 'r': RELEASE} rtype_map = {v: k for k, v in type_map.items()} mod_map = {c: i for i, c in enumerate('ABCDEFGHIJKLMNOP')} rmod_map = {v: k for k, v in mod_map.items()} key_rmap = {} g = globals() config_key_map = {} config_mod_map = { 'SHIFT': SHIFT, 'ALT': ALT, 'OPTION': ALT, '⌥': ALT, '⌘': SUPER, 'CMD': SUPER, 'SUPER': SUPER, 'CTRL': CTRL, 'CONTROL': CTRL } for key_name, enc in ENCODING.items(): key_name = key_name.replace(' ', '_') g[key_name] = config_key_map[key_name] = key_name key_rmap[enc] = key_name config_key_map.update({k: g[v] for k, v in key_name_aliases.items() if v in g}) enter_key = KeyEvent(PRESS, 0, g['ENTER']) backspace_key = KeyEvent(PRESS, 0, g['BACKSPACE']) del key_name, enc, g def decode_key_event(text): typ = type_map[text[1]] mods = mod_map[text[2]] key = key_rmap[text[3:5]] return KeyEvent(typ, mods, key) def encode_key_event(key_event): typ = rtype_map[key_event.type] mods = rmod_map[key_event.mods] key = ENCODING[key_event.key.replace('_', ' ')] return typ + mods + key kitty-0.15.0/kitty/key_names.py000066400000000000000000000064561356737523400164640ustar00rootroot00000000000000#!/usr/bin/env python # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal import sys from contextlib import suppress from .constants import is_macos key_name_aliases = { '!': 'EXCLAM', '"': 'DOUBLE_QUOTE', '#': 'NUMBER_SIGN', '$': 'DOLLAR', '&': 'AMPERSAND', "'": 'APOSTROPHE', '(': 'PARENTHESIS_LEFT', ')': 'PARENTHESIS_RIGHT', ',': 'COMMA', '-': 'MINUS', '.': 'PERIOD', '/': 'SLASH', ':': 'COLON', ';': 'SEMICOLON', '<': 'LESS', '=': 'EQUAL', '>': 'GREATER', '@': 'AT', '[': 'LEFT_BRACKET', '\\': 'BACKSLASH', ']': 'RIGHT_BRACKET', '_': 'UNDERSCORE', '`': 'GRAVE_ACCENT', '§': 'PARAGRAPH', 'º': 'MASCULINE', 'À': 'A_GRAVE', 'Ä': 'A_DIAERESIS', 'Ã…': 'A_RING', 'Æ': 'AE', 'Ç': 'C_CEDILLA', 'È': 'E_GRAVE', 'É': 'E_ACUTE', 'ÃŒ': 'I_GRAVE', 'Ñ': 'N_TILDE', 'Ã’': 'O_GRAVE', 'Ö': 'O_DIAERESIS', 'Ø': 'O_SLASH', 'Ù': 'U_GRAVE', 'Ü': 'U_DIAERESIS', 'SS': 'S_SHARP', # 'ß'.upper() == 'SS' 'Ð': 'CYRILLIC_A', 'Б': 'CYRILLIC_BE', 'Ð’': 'CYRILLIC_VE', 'Г': 'CYRILLIC_GHE', 'Д': 'CYRILLIC_DE', 'Е': 'CYRILLIC_IE', 'Ж': 'CYRILLIC_ZHE', 'З': 'CYRILLIC_ZE', 'И': 'CYRILLIC_I', 'Й': 'CYRILLIC_SHORT_I', 'К': 'CYRILLIC_KA', 'Л': 'CYRILLIC_EL', 'М': 'CYRILLIC_EM', 'Ð': 'CYRILLIC_EN', 'О': 'CYRILLIC_O', 'П': 'CYRILLIC_PE', 'Р': 'CYRILLIC_ER', 'С': 'CYRILLIC_ES', 'Т': 'CYRILLIC_TE', 'У': 'CYRILLIC_U', 'Ф': 'CYRILLIC_EF', 'Ð¥': 'CYRILLIC_HA', 'Ц': 'CYRILLIC_TSE', 'Ч': 'CYRILLIC_CHE', 'Ш': 'CYRILLIC_SHA', 'Щ': 'CYRILLIC_SHCHA', 'Ъ': 'CYRILLIC_HARD_SIGN', 'Ы': 'CYRILLIC_YERU', 'Ь': 'CYRILLIC_SOFT_SIGN', 'Э': 'CYRILLIC_E', 'Ю': 'CYRILLIC_YU', 'Я': 'CYRILLIC_YA', 'Ð': 'CYRILLIC_IO', 'ESC': 'ESCAPE', 'PGUP': 'PAGE_UP', 'PAGEUP': 'PAGE_UP', 'PGDN': 'PAGE_DOWN', 'PAGEDOWN': 'PAGE_DOWN', 'RETURN': 'ENTER', 'ARROWUP': 'UP', 'ARROWDOWN': 'DOWN', 'ARROWRIGHT': 'RIGHT', 'ARROWLEFT': 'LEFT' } def null_lookup(name, case_sensitive=False): pass if is_macos: def get_key_name_lookup(): return null_lookup else: def load_libxkb_lookup(): import ctypes for suffix in ('.0', ''): with suppress(Exception): lib = ctypes.CDLL('libxkbcommon.so' + suffix) break else: from ctypes.util import find_library lib = ctypes.CDLL(find_library('xkbcommon')) f = lib.xkb_keysym_from_name f.argtypes = [ctypes.c_char_p, ctypes.c_int] f.restype = ctypes.c_int def xkb_lookup(name, case_sensitive=False): name = name.encode('utf-8') return f(name, int(case_sensitive)) or None return xkb_lookup def get_key_name_lookup(): ans = getattr(get_key_name_lookup, 'ans', None) if ans is None: try: ans = load_libxkb_lookup() except Exception as e: print('Failed to load libxkbcommon.xkb_keysym_from_name with error:', e, file=sys.stderr) ans = null_lookup get_key_name_lookup.ans = ans return ans kitty-0.15.0/kitty/keys.c000066400000000000000000000227501356737523400152510ustar00rootroot00000000000000/* * keys.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "keys.h" #include "screen.h" #include "glfw-wrapper.h" #include "control-codes.h" static bool needs_special_handling[128 * 16] = {0}; const char* key_to_bytes(int glfw_key, bool smkx, bool extended, int mods, int action) { if ((action & 3) == 3) return NULL; if ((unsigned)glfw_key >= sizeof(key_map)/sizeof(key_map[0]) || glfw_key < 0) return NULL; uint16_t key = key_map[glfw_key]; if (key == UINT8_MAX) return NULL; KeyboardMode mode = extended ? EXTENDED : (smkx ? APPLICATION : NORMAL); return key_lookup(key, mode, mods, action); } #define SPECIAL_INDEX(key) ((key & 0x7f) | ( (mods & 0xF) << 7)) #define IS_ALT_MODS(mods) (mods == GLFW_MOD_ALT || mods == (GLFW_MOD_ALT | GLFW_MOD_SHIFT)) typedef struct { int mods, native_key; } NativeKey; static NativeKey *native_special_keys = NULL; static size_t native_special_keys_capacity = 0, native_special_keys_count = 0; void set_special_key_combo(int glfw_key, int mods, bool is_native) { if (is_native) { if (native_special_keys_count >= native_special_keys_capacity) { native_special_keys_capacity = MAX(128u, 2 * native_special_keys_capacity); native_special_keys = realloc(native_special_keys, sizeof(native_special_keys[0]) * native_special_keys_capacity); if (native_special_keys == NULL) fatal("Out of memory"); } native_special_keys[native_special_keys_count].mods = mods; native_special_keys[native_special_keys_count++].native_key = glfw_key; } else { uint16_t key = key_map[glfw_key]; if (key != UINT8_MAX) { key = SPECIAL_INDEX(key); needs_special_handling[key] = true; } } } static inline Window* active_window(void) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; Window *w = t->windows + t->active_window; if (w->render_data.screen) return w; return NULL; } static inline bool is_modifier_key(int key) { switch(key) { case GLFW_KEY_LEFT_SHIFT: case GLFW_KEY_RIGHT_SHIFT: case GLFW_KEY_LEFT_ALT: case GLFW_KEY_RIGHT_ALT: case GLFW_KEY_LEFT_CONTROL: case GLFW_KEY_RIGHT_CONTROL: case GLFW_KEY_LEFT_SUPER: case GLFW_KEY_RIGHT_SUPER: case GLFW_KEY_CAPS_LOCK: return true; default: return false; } } static inline void send_key_to_child(Window *w, int key, int mods, int action) { Screen *screen = w->render_data.screen; const char *data = key_to_bytes(key, screen->modes.mDECCKM, screen->modes.mEXTENDED_KEYBOARD, mods, action); if (data) { if (screen->modes.mEXTENDED_KEYBOARD) { if (*data == 1) schedule_write_to_child(w->id, 1, (data + 1), 1); else write_escape_code_to_child(screen, APC, data + 1); } else { if (*data > 2 && data[1] == 0x1b && data[2] == '[') { // CSI code write_escape_code_to_child(screen, CSI, data + 3); } else schedule_write_to_child(w->id, 1, (data + 1), *data); } } } static inline bool is_ascii_control_char(char c) { return c == 0 || (1 <= c && c <= 31) || c == 127; } static inline bool check_if_special(int key, int mods, int native_key) { uint16_t qkey = (0 <= key && key < (ssize_t)arraysz(key_map)) ? key_map[key] : UINT8_MAX; bool special = false; if (qkey != UINT8_MAX) { qkey = SPECIAL_INDEX(qkey); special = needs_special_handling[qkey]; } for (size_t i = 0; !special && i < native_special_keys_count; i++) { if (native_key == native_special_keys[i].native_key && mods == native_special_keys[i].mods) special = true; } return special; } static inline void update_ime_position(OSWindow *os_window, Window* w, Screen *screen) { unsigned int cell_width = os_window->fonts_data->cell_width, cell_height = os_window->fonts_data->cell_height; unsigned int left = w->geometry.left, top = w->geometry.top; left += screen->cursor->x * cell_width; top += screen->cursor->y * cell_height; glfwUpdateIMEState(global_state.callback_os_window->handle, 2, left, top, cell_width, cell_height); } #define debug(...) if (OPT(debug_keyboard)) printf(__VA_ARGS__); void on_key_input(GLFWkeyevent *ev) { Window *w = active_window(); int action = ev->action, native_key = ev->native_key, key = ev->key, mods = ev->mods; const char *text = ev->text ? ev->text : ""; debug("on_key_input: glfw key: %d native_code: 0x%x action: %s mods: 0x%x text: '%s' state: %d ", key, native_key, (action == GLFW_RELEASE ? "RELEASE" : (action == GLFW_PRESS ? "PRESS" : "REPEAT")), mods, text, ev->ime_state); if (!w) { debug("no active window, ignoring\n"); return; } if (OPT(mouse_hide_wait) < 0 && !is_modifier_key(key)) hide_mouse(global_state.callback_os_window); Screen *screen = w->render_data.screen; switch(ev->ime_state) { case 1: // update pre-edit text update_ime_position(global_state.callback_os_window, w, screen); screen_draw_overlay_text(screen, text); debug("updated pre-edit text: '%s'\n", text); return; case 2: // commit text if (*text) { schedule_write_to_child(w->id, 1, text, strlen(text)); debug("committed pre-edit text: %s\n", text); } else debug("committed pre-edit text: (null)\n"); return; case 0: // for macOS, update ime position on every key input // because the position is required before next input #if defined(__APPLE__) update_ime_position(global_state.callback_os_window, w, screen); #endif break; default: debug("invalid state, ignoring\n"); return; } if (global_state.in_sequence_mode) { debug("in sequence mode, handling as shortcut\n"); if ( action != GLFW_RELEASE && key != GLFW_KEY_LEFT_SHIFT && key != GLFW_KEY_RIGHT_SHIFT && key != GLFW_KEY_LEFT_ALT && key != GLFW_KEY_RIGHT_ALT && key != GLFW_KEY_LEFT_CONTROL && key != GLFW_KEY_RIGHT_CONTROL ) call_boss(process_sequence, "iiii", key, native_key, action, mods); return; } bool has_text = text[0] && !is_ascii_control_char(text[0]); if (action == GLFW_PRESS || action == GLFW_REPEAT) { if (check_if_special(key, mods, native_key)) { PyObject *ret = PyObject_CallMethod(global_state.boss, "dispatch_special_key", "iiii", key, native_key, action, mods); if (ret == NULL) { PyErr_Print(); } else { bool consumed = ret == Py_True; Py_DECREF(ret); if (consumed) { debug("handled as shortcut\n"); return; } } } } if (action == GLFW_REPEAT && !screen->modes.mDECARM) { debug("discarding repeat key event as DECARM is off\n"); return; } if (screen->scrolled_by && action == GLFW_PRESS && !is_modifier_key(key)) { screen_history_scroll(screen, SCROLL_FULL, false); // scroll back to bottom } bool ok_to_send = action == GLFW_PRESS || action == GLFW_REPEAT || screen->modes.mEXTENDED_KEYBOARD; if (ok_to_send) { if (has_text) { schedule_write_to_child(w->id, 1, text, strlen(text)); debug("sent text to child\n"); } else { send_key_to_child(w, key, mods, action); debug("sent key to child\n"); } } else { debug("ignoring as keyboard mode does not allow %s events\n", action == GLFW_RELEASE ? "release" : "repeat"); } } void fake_scroll(int amount, bool upwards) { Window *w = active_window(); if (!w) return; int key = upwards ? GLFW_KEY_UP : GLFW_KEY_DOWN; while (amount-- > 0) { send_key_to_child(w, key, 0, GLFW_PRESS); send_key_to_child(w, key, 0, GLFW_RELEASE); } } #define PYWRAP1(name) static PyObject* py##name(PyObject UNUSED *self, PyObject *args) #define PA(fmt, ...) if(!PyArg_ParseTuple(args, fmt, __VA_ARGS__)) return NULL; #define M(name, arg_type) {#name, (PyCFunction)py##name, arg_type, NULL} PYWRAP1(key_to_bytes) { int glfw_key, smkx, extended, mods, action; PA("ippii", &glfw_key, &smkx, &extended, &mods, &action); const char *ans = key_to_bytes(glfw_key, smkx & 1, extended & 1, mods, action); if (ans == NULL) return Py_BuildValue("y#", "", 0); return Py_BuildValue("y#", ans + 1, *ans); } PYWRAP1(key_for_native_key_name) { const char *name; int case_sensitive = 0; PA("s|p", &name, &case_sensitive); #ifndef __APPLE__ if (glfwGetNativeKeyForName) { // if this function is called before GLFW is initialized glfwGetNativeKeyForName will be NULL int native_key = glfwGetNativeKeyForName(name, case_sensitive); if (native_key) return Py_BuildValue("i", native_key); } #endif Py_RETURN_NONE; } static PyMethodDef module_methods[] = { M(key_to_bytes, METH_VARARGS), M(key_for_native_key_name, METH_VARARGS), {0} }; void finalize(void) { free(native_special_keys); } bool init_keys(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; if (Py_AtExit(finalize) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the keys at exit handler"); return false; } return true; } kitty-0.15.0/kitty/keys.h000066400000000000000000041436371356737523400152720ustar00rootroot00000000000000// auto-generated from keys.py, do not edit! #pragma once #include #include #include #include // map glfw key numbers to 7-bit numbers for compact data storage static const uint8_t key_map[349] = { UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 0, /* SPACE */ 1, /* EXCLAM */ 2, /* DOUBLE_QUOTE */ 3, /* NUMBER_SIGN */ 4, /* DOLLAR */ UINT8_MAX, 5, /* AMPERSAND */ 6, /* APOSTROPHE */ 7, /* PARENTHESIS_LEFT */ 8, /* PARENTHESIS_RIGHT */ UINT8_MAX, 9, /* PLUS */ 10, /* COMMA */ 11, /* MINUS */ 12, /* PERIOD */ 13, /* SLASH */ 14, /* 0 */ 15, /* 1 */ 16, /* 2 */ 17, /* 3 */ 18, /* 4 */ 19, /* 5 */ 20, /* 6 */ 21, /* 7 */ 22, /* 8 */ 23, /* 9 */ 24, /* COLON */ 25, /* SEMICOLON */ 26, /* LESS */ 27, /* EQUAL */ 28, /* GREATER */ UINT8_MAX, 29, /* AT */ 30, /* A */ 31, /* B */ 32, /* C */ 33, /* D */ 34, /* E */ 35, /* F */ 36, /* G */ 37, /* H */ 38, /* I */ 39, /* J */ 40, /* K */ 41, /* L */ 42, /* M */ 43, /* N */ 44, /* O */ 45, /* P */ 46, /* Q */ 47, /* R */ 48, /* S */ 49, /* T */ 50, /* U */ 51, /* V */ 52, /* W */ 53, /* X */ 54, /* Y */ 55, /* Z */ 56, /* LEFT_BRACKET */ 57, /* BACKSLASH */ 58, /* RIGHT_BRACKET */ UINT8_MAX, 59, /* UNDERSCORE */ 60, /* GRAVE_ACCENT */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 61, /* WORLD_1 */ 62, /* WORLD_2 */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 63, /* PARAGRAPH */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 64, /* MASCULINE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 65, /* A_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 66, /* A_DIAERESIS */ 67, /* A_RING */ 68, /* AE */ 69, /* C_CEDILLA */ 70, /* E_GRAVE */ 71, /* E_ACUTE */ UINT8_MAX, UINT8_MAX, 72, /* I_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 73, /* N_TILDE */ 74, /* O_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 75, /* O_DIAERESIS */ UINT8_MAX, 76, /* O_SLASH */ 77, /* U_GRAVE */ UINT8_MAX, UINT8_MAX, 78, /* U_DIAERESIS */ UINT8_MAX, 79, /* S_SHARP */ 80, /* CYRILLIC_A */ 81, /* CYRILLIC_BE */ 82, /* CYRILLIC_VE */ 83, /* CYRILLIC_GHE */ 84, /* CYRILLIC_DE */ 85, /* CYRILLIC_IE */ 86, /* CYRILLIC_ZHE */ 87, /* CYRILLIC_ZE */ 88, /* CYRILLIC_I */ 89, /* CYRILLIC_SHORT_I */ 90, /* CYRILLIC_KA */ 91, /* CYRILLIC_EL */ 92, /* CYRILLIC_EM */ 93, /* CYRILLIC_EN */ 94, /* CYRILLIC_O */ 95, /* CYRILLIC_PE */ 96, /* CYRILLIC_ER */ 97, /* CYRILLIC_ES */ 98, /* CYRILLIC_TE */ 99, /* CYRILLIC_U */ 100, /* CYRILLIC_EF */ 101, /* CYRILLIC_HA */ 102, /* CYRILLIC_TSE */ 103, /* CYRILLIC_CHE */ 104, /* CYRILLIC_SHA */ 105, /* CYRILLIC_SHCHA */ 106, /* CYRILLIC_HARD_SIGN */ 107, /* CYRILLIC_YERU */ 108, /* CYRILLIC_SOFT_SIGN */ 109, /* CYRILLIC_E */ 110, /* CYRILLIC_YU */ 111, /* CYRILLIC_YA */ 112, /* CYRILLIC_IO */ 113, /* ESCAPE */ 114, /* ENTER */ 115, /* TAB */ 116, /* BACKSPACE */ 117, /* INSERT */ 118, /* DELETE */ 119, /* RIGHT */ 120, /* LEFT */ 121, /* DOWN */ 122, /* UP */ 123, /* PAGE_UP */ 124, /* PAGE_DOWN */ 125, /* HOME */ 126, /* END */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 127, /* CAPS_LOCK */ 128, /* SCROLL_LOCK */ 129, /* NUM_LOCK */ 130, /* PRINT_SCREEN */ 131, /* PAUSE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 132, /* F1 */ 133, /* F2 */ 134, /* F3 */ 135, /* F4 */ 136, /* F5 */ 137, /* F6 */ 138, /* F7 */ 139, /* F8 */ 140, /* F9 */ 141, /* F10 */ 142, /* F11 */ 143, /* F12 */ 144, /* F13 */ 145, /* F14 */ 146, /* F15 */ 147, /* F16 */ 148, /* F17 */ 149, /* F18 */ 150, /* F19 */ 151, /* F20 */ 152, /* F21 */ 153, /* F22 */ 154, /* F23 */ 155, /* F24 */ 156, /* F25 */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 157, /* KP_0 */ 158, /* KP_1 */ 159, /* KP_2 */ 160, /* KP_3 */ 161, /* KP_4 */ 162, /* KP_5 */ 163, /* KP_6 */ 164, /* KP_7 */ 165, /* KP_8 */ 166, /* KP_9 */ 167, /* KP_DECIMAL */ 168, /* KP_DIVIDE */ 169, /* KP_MULTIPLY */ 170, /* KP_SUBTRACT */ 171, /* KP_ADD */ 172, /* KP_ENTER */ 173, /* KP_EQUAL */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 174, /* LEFT_SHIFT */ 175, /* LEFT_CONTROL */ 176, /* LEFT_ALT */ 177, /* LEFT_SUPER */ 178, /* RIGHT_SHIFT */ 179, /* RIGHT_CONTROL */ 180, /* RIGHT_ALT */ 181, /* RIGHT_SUPER */ 182, /* MENU */ }; static inline const char* key_name(int key) { switch(key) { case 32: return "SPACE"; case 33: return "EXCLAM"; case 34: return "DOUBLE_QUOTE"; case 35: return "NUMBER_SIGN"; case 36: return "DOLLAR"; case 38: return "AMPERSAND"; case 39: return "APOSTROPHE"; case 40: return "PARENTHESIS_LEFT"; case 41: return "PARENTHESIS_RIGHT"; case 43: return "PLUS"; case 44: return "COMMA"; case 45: return "MINUS"; case 46: return "PERIOD"; case 47: return "SLASH"; case 48: return "0"; case 49: return "1"; case 50: return "2"; case 51: return "3"; case 52: return "4"; case 53: return "5"; case 54: return "6"; case 55: return "7"; case 56: return "8"; case 57: return "9"; case 58: return "COLON"; case 59: return "SEMICOLON"; case 60: return "LESS"; case 61: return "EQUAL"; case 62: return "GREATER"; case 64: return "AT"; case 65: return "A"; case 66: return "B"; case 67: return "C"; case 68: return "D"; case 69: return "E"; case 70: return "F"; case 71: return "G"; case 72: return "H"; case 73: return "I"; case 74: return "J"; case 75: return "K"; case 76: return "L"; case 77: return "M"; case 78: return "N"; case 79: return "O"; case 80: return "P"; case 81: return "Q"; case 82: return "R"; case 83: return "S"; case 84: return "T"; case 85: return "U"; case 86: return "V"; case 87: return "W"; case 88: return "X"; case 89: return "Y"; case 90: return "Z"; case 91: return "LEFT_BRACKET"; case 92: return "BACKSLASH"; case 93: return "RIGHT_BRACKET"; case 95: return "UNDERSCORE"; case 96: return "GRAVE_ACCENT"; case 161: return "WORLD_1"; case 162: return "WORLD_2"; case 167: return "PARAGRAPH"; case 186: return "MASCULINE"; case 192: return "A_GRAVE"; case 196: return "A_DIAERESIS"; case 197: return "A_RING"; case 198: return "AE"; case 199: return "C_CEDILLA"; case 200: return "E_GRAVE"; case 201: return "E_ACUTE"; case 204: return "I_GRAVE"; case 209: return "N_TILDE"; case 210: return "O_GRAVE"; case 214: return "O_DIAERESIS"; case 216: return "O_SLASH"; case 217: return "U_GRAVE"; case 220: return "U_DIAERESIS"; case 222: return "S_SHARP"; case 223: return "CYRILLIC_A"; case 224: return "CYRILLIC_BE"; case 225: return "CYRILLIC_VE"; case 226: return "CYRILLIC_GHE"; case 227: return "CYRILLIC_DE"; case 228: return "CYRILLIC_IE"; case 229: return "CYRILLIC_ZHE"; case 230: return "CYRILLIC_ZE"; case 231: return "CYRILLIC_I"; case 232: return "CYRILLIC_SHORT_I"; case 233: return "CYRILLIC_KA"; case 234: return "CYRILLIC_EL"; case 235: return "CYRILLIC_EM"; case 236: return "CYRILLIC_EN"; case 237: return "CYRILLIC_O"; case 238: return "CYRILLIC_PE"; case 239: return "CYRILLIC_ER"; case 240: return "CYRILLIC_ES"; case 241: return "CYRILLIC_TE"; case 242: return "CYRILLIC_U"; case 243: return "CYRILLIC_EF"; case 244: return "CYRILLIC_HA"; case 245: return "CYRILLIC_TSE"; case 246: return "CYRILLIC_CHE"; case 247: return "CYRILLIC_SHA"; case 248: return "CYRILLIC_SHCHA"; case 249: return "CYRILLIC_HARD_SIGN"; case 250: return "CYRILLIC_YERU"; case 251: return "CYRILLIC_SOFT_SIGN"; case 252: return "CYRILLIC_E"; case 253: return "CYRILLIC_YU"; case 254: return "CYRILLIC_YA"; case 255: return "CYRILLIC_IO"; case 256: return "ESCAPE"; case 257: return "ENTER"; case 258: return "TAB"; case 259: return "BACKSPACE"; case 260: return "INSERT"; case 261: return "DELETE"; case 262: return "RIGHT"; case 263: return "LEFT"; case 264: return "DOWN"; case 265: return "UP"; case 266: return "PAGE_UP"; case 267: return "PAGE_DOWN"; case 268: return "HOME"; case 269: return "END"; case 280: return "CAPS_LOCK"; case 281: return "SCROLL_LOCK"; case 282: return "NUM_LOCK"; case 283: return "PRINT_SCREEN"; case 284: return "PAUSE"; case 290: return "F1"; case 291: return "F2"; case 292: return "F3"; case 293: return "F4"; case 294: return "F5"; case 295: return "F6"; case 296: return "F7"; case 297: return "F8"; case 298: return "F9"; case 299: return "F10"; case 300: return "F11"; case 301: return "F12"; case 302: return "F13"; case 303: return "F14"; case 304: return "F15"; case 305: return "F16"; case 306: return "F17"; case 307: return "F18"; case 308: return "F19"; case 309: return "F20"; case 310: return "F21"; case 311: return "F22"; case 312: return "F23"; case 313: return "F24"; case 314: return "F25"; case 320: return "KP_0"; case 321: return "KP_1"; case 322: return "KP_2"; case 323: return "KP_3"; case 324: return "KP_4"; case 325: return "KP_5"; case 326: return "KP_6"; case 327: return "KP_7"; case 328: return "KP_8"; case 329: return "KP_9"; case 330: return "KP_DECIMAL"; case 331: return "KP_DIVIDE"; case 332: return "KP_MULTIPLY"; case 333: return "KP_SUBTRACT"; case 334: return "KP_ADD"; case 335: return "KP_ENTER"; case 336: return "KP_EQUAL"; case 340: return "LEFT_SHIFT"; case 341: return "LEFT_CONTROL"; case 342: return "LEFT_ALT"; case 343: return "LEFT_SUPER"; case 344: return "RIGHT_SHIFT"; case 345: return "RIGHT_CONTROL"; case 346: return "RIGHT_ALT"; case 347: return "RIGHT_SUPER"; case 348: return "MENU"; default: return NULL; }} typedef enum { NORMAL, APPLICATION, EXTENDED } KeyboardMode; static inline const char* key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { switch(mode) { case NORMAL: switch(action & 3) { case 3: return NULL; case 0: // RELEASE return NULL; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode NORMAL break; case APPLICATION: switch(action & 3) { case 3: return NULL; case 0: // RELEASE return NULL; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode APPLICATION break; case EXTENDED: switch(action & 3) { case 3: return NULL; case 0: // RELEASE switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x72\x41\x79"; case 115: // TAB return "\x04\x4b\x72\x41\x30"; case 117: // INSERT return "\x04\x4b\x72\x41\x32"; case 118: // DELETE return "\x04\x4b\x72\x41\x33"; case 119: // RIGHT return "\x04\x4b\x72\x41\x34"; case 120: // LEFT return "\x04\x4b\x72\x41\x35"; case 121: // DOWN return "\x04\x4b\x72\x41\x36"; case 122: // UP return "\x04\x4b\x72\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x41\x39"; case 125: // HOME return "\x04\x4b\x72\x41\x2e"; case 126: // END return "\x04\x4b\x72\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x41\x21"; case 132: // F1 return "\x04\x4b\x72\x41\x2f"; case 133: // F2 return "\x04\x4b\x72\x41\x2a"; case 134: // F3 return "\x04\x4b\x72\x41\x3f"; case 135: // F4 return "\x04\x4b\x72\x41\x26"; case 136: // F5 return "\x04\x4b\x72\x41\x3c"; case 137: // F6 return "\x04\x4b\x72\x41\x3e"; case 138: // F7 return "\x04\x4b\x72\x41\x28"; case 139: // F8 return "\x04\x4b\x72\x41\x29"; case 140: // F9 return "\x04\x4b\x72\x41\x5b"; case 141: // F10 return "\x04\x4b\x72\x41\x5d"; case 142: // F11 return "\x04\x4b\x72\x41\x7b"; case 143: // F12 return "\x04\x4b\x72\x41\x7d"; case 144: // F13 return "\x04\x4b\x72\x41\x40"; case 145: // F14 return "\x04\x4b\x72\x41\x25"; case 146: // F15 return "\x04\x4b\x72\x41\x24"; case 147: // F16 return "\x04\x4b\x72\x41\x23"; case 148: // F17 return "\x05\x4b\x72\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x72\x42\x79"; case 114: // ENTER return "\x04\x4b\x72\x42\x7a"; case 115: // TAB return "\x04\x4b\x72\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x42\x31"; case 117: // INSERT return "\x04\x4b\x72\x42\x32"; case 118: // DELETE return "\x04\x4b\x72\x42\x33"; case 119: // RIGHT return "\x04\x4b\x72\x42\x34"; case 120: // LEFT return "\x04\x4b\x72\x42\x35"; case 121: // DOWN return "\x04\x4b\x72\x42\x36"; case 122: // UP return "\x04\x4b\x72\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x42\x39"; case 125: // HOME return "\x04\x4b\x72\x42\x2e"; case 126: // END return "\x04\x4b\x72\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x42\x21"; case 132: // F1 return "\x04\x4b\x72\x42\x2f"; case 133: // F2 return "\x04\x4b\x72\x42\x2a"; case 134: // F3 return "\x04\x4b\x72\x42\x3f"; case 135: // F4 return "\x04\x4b\x72\x42\x26"; case 136: // F5 return "\x04\x4b\x72\x42\x3c"; case 137: // F6 return "\x04\x4b\x72\x42\x3e"; case 138: // F7 return "\x04\x4b\x72\x42\x28"; case 139: // F8 return "\x04\x4b\x72\x42\x29"; case 140: // F9 return "\x04\x4b\x72\x42\x5b"; case 141: // F10 return "\x04\x4b\x72\x42\x5d"; case 142: // F11 return "\x04\x4b\x72\x42\x7b"; case 143: // F12 return "\x04\x4b\x72\x42\x7d"; case 144: // F13 return "\x04\x4b\x72\x42\x40"; case 145: // F14 return "\x04\x4b\x72\x42\x25"; case 146: // F15 return "\x04\x4b\x72\x42\x24"; case 147: // F16 return "\x04\x4b\x72\x42\x23"; case 148: // F17 return "\x05\x4b\x72\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x45\x43"; case 11: // MINUS return "\x04\x4b\x72\x45\x44"; case 12: // PERIOD return "\x04\x4b\x72\x45\x45"; case 13: // SLASH return "\x04\x4b\x72\x45\x46"; case 14: // 0 return "\x04\x4b\x72\x45\x47"; case 15: // 1 return "\x04\x4b\x72\x45\x48"; case 16: // 2 return "\x04\x4b\x72\x45\x49"; case 17: // 3 return "\x04\x4b\x72\x45\x4a"; case 18: // 4 return "\x04\x4b\x72\x45\x4b"; case 19: // 5 return "\x04\x4b\x72\x45\x4c"; case 20: // 6 return "\x04\x4b\x72\x45\x4d"; case 21: // 7 return "\x04\x4b\x72\x45\x4e"; case 22: // 8 return "\x04\x4b\x72\x45\x4f"; case 23: // 9 return "\x04\x4b\x72\x45\x50"; case 24: // COLON return "\x05\x4b\x72\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x45\x51"; case 26: // LESS return "\x05\x4b\x72\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x45\x52"; case 28: // GREATER return "\x05\x4b\x72\x45\x42\x75"; case 29: // AT return "\x05\x4b\x72\x45\x42\x76"; case 30: // A return "\x04\x4b\x72\x45\x53"; case 31: // B return "\x04\x4b\x72\x45\x54"; case 32: // C return "\x04\x4b\x72\x45\x55"; case 33: // D return "\x04\x4b\x72\x45\x56"; case 34: // E return "\x04\x4b\x72\x45\x57"; case 35: // F return "\x04\x4b\x72\x45\x58"; case 36: // G return "\x04\x4b\x72\x45\x59"; case 37: // H return "\x04\x4b\x72\x45\x5a"; case 38: // I return "\x04\x4b\x72\x45\x61"; case 39: // J return "\x04\x4b\x72\x45\x62"; case 40: // K return "\x04\x4b\x72\x45\x63"; case 41: // L return "\x04\x4b\x72\x45\x64"; case 42: // M return "\x04\x4b\x72\x45\x65"; case 43: // N return "\x04\x4b\x72\x45\x66"; case 44: // O return "\x04\x4b\x72\x45\x67"; case 45: // P return "\x04\x4b\x72\x45\x68"; case 46: // Q return "\x04\x4b\x72\x45\x69"; case 47: // R return "\x04\x4b\x72\x45\x6a"; case 48: // S return "\x04\x4b\x72\x45\x6b"; case 49: // T return "\x04\x4b\x72\x45\x6c"; case 50: // U return "\x04\x4b\x72\x45\x6d"; case 51: // V return "\x04\x4b\x72\x45\x6e"; case 52: // W return "\x04\x4b\x72\x45\x6f"; case 53: // X return "\x04\x4b\x72\x45\x70"; case 54: // Y return "\x04\x4b\x72\x45\x71"; case 55: // Z return "\x04\x4b\x72\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x45\x42\x30"; case 68: // AE return "\x05\x4b\x72\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x45\x79"; case 114: // ENTER return "\x04\x4b\x72\x45\x7a"; case 115: // TAB return "\x04\x4b\x72\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x45\x31"; case 117: // INSERT return "\x04\x4b\x72\x45\x32"; case 118: // DELETE return "\x04\x4b\x72\x45\x33"; case 119: // RIGHT return "\x04\x4b\x72\x45\x34"; case 120: // LEFT return "\x04\x4b\x72\x45\x35"; case 121: // DOWN return "\x04\x4b\x72\x45\x36"; case 122: // UP return "\x04\x4b\x72\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x45\x39"; case 125: // HOME return "\x04\x4b\x72\x45\x2e"; case 126: // END return "\x04\x4b\x72\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x45\x21"; case 132: // F1 return "\x04\x4b\x72\x45\x2f"; case 133: // F2 return "\x04\x4b\x72\x45\x2a"; case 134: // F3 return "\x04\x4b\x72\x45\x3f"; case 135: // F4 return "\x04\x4b\x72\x45\x26"; case 136: // F5 return "\x04\x4b\x72\x45\x3c"; case 137: // F6 return "\x04\x4b\x72\x45\x3e"; case 138: // F7 return "\x04\x4b\x72\x45\x28"; case 139: // F8 return "\x04\x4b\x72\x45\x29"; case 140: // F9 return "\x04\x4b\x72\x45\x5b"; case 141: // F10 return "\x04\x4b\x72\x45\x5d"; case 142: // F11 return "\x04\x4b\x72\x45\x7b"; case 143: // F12 return "\x04\x4b\x72\x45\x7d"; case 144: // F13 return "\x04\x4b\x72\x45\x40"; case 145: // F14 return "\x04\x4b\x72\x45\x25"; case 146: // F15 return "\x04\x4b\x72\x45\x24"; case 147: // F16 return "\x04\x4b\x72\x45\x23"; case 148: // F17 return "\x05\x4b\x72\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x46\x43"; case 11: // MINUS return "\x04\x4b\x72\x46\x44"; case 12: // PERIOD return "\x04\x4b\x72\x46\x45"; case 13: // SLASH return "\x04\x4b\x72\x46\x46"; case 14: // 0 return "\x04\x4b\x72\x46\x47"; case 15: // 1 return "\x04\x4b\x72\x46\x48"; case 16: // 2 return "\x04\x4b\x72\x46\x49"; case 17: // 3 return "\x04\x4b\x72\x46\x4a"; case 18: // 4 return "\x04\x4b\x72\x46\x4b"; case 19: // 5 return "\x04\x4b\x72\x46\x4c"; case 20: // 6 return "\x04\x4b\x72\x46\x4d"; case 21: // 7 return "\x04\x4b\x72\x46\x4e"; case 22: // 8 return "\x04\x4b\x72\x46\x4f"; case 23: // 9 return "\x04\x4b\x72\x46\x50"; case 24: // COLON return "\x05\x4b\x72\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x46\x51"; case 26: // LESS return "\x05\x4b\x72\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x46\x52"; case 28: // GREATER return "\x05\x4b\x72\x46\x42\x75"; case 29: // AT return "\x05\x4b\x72\x46\x42\x76"; case 30: // A return "\x04\x4b\x72\x46\x53"; case 31: // B return "\x04\x4b\x72\x46\x54"; case 32: // C return "\x04\x4b\x72\x46\x55"; case 33: // D return "\x04\x4b\x72\x46\x56"; case 34: // E return "\x04\x4b\x72\x46\x57"; case 35: // F return "\x04\x4b\x72\x46\x58"; case 36: // G return "\x04\x4b\x72\x46\x59"; case 37: // H return "\x04\x4b\x72\x46\x5a"; case 38: // I return "\x04\x4b\x72\x46\x61"; case 39: // J return "\x04\x4b\x72\x46\x62"; case 40: // K return "\x04\x4b\x72\x46\x63"; case 41: // L return "\x04\x4b\x72\x46\x64"; case 42: // M return "\x04\x4b\x72\x46\x65"; case 43: // N return "\x04\x4b\x72\x46\x66"; case 44: // O return "\x04\x4b\x72\x46\x67"; case 45: // P return "\x04\x4b\x72\x46\x68"; case 46: // Q return "\x04\x4b\x72\x46\x69"; case 47: // R return "\x04\x4b\x72\x46\x6a"; case 48: // S return "\x04\x4b\x72\x46\x6b"; case 49: // T return "\x04\x4b\x72\x46\x6c"; case 50: // U return "\x04\x4b\x72\x46\x6d"; case 51: // V return "\x04\x4b\x72\x46\x6e"; case 52: // W return "\x04\x4b\x72\x46\x6f"; case 53: // X return "\x04\x4b\x72\x46\x70"; case 54: // Y return "\x04\x4b\x72\x46\x71"; case 55: // Z return "\x04\x4b\x72\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x46\x42\x30"; case 68: // AE return "\x05\x4b\x72\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x46\x79"; case 114: // ENTER return "\x04\x4b\x72\x46\x7a"; case 115: // TAB return "\x04\x4b\x72\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x46\x31"; case 117: // INSERT return "\x04\x4b\x72\x46\x32"; case 118: // DELETE return "\x04\x4b\x72\x46\x33"; case 119: // RIGHT return "\x04\x4b\x72\x46\x34"; case 120: // LEFT return "\x04\x4b\x72\x46\x35"; case 121: // DOWN return "\x04\x4b\x72\x46\x36"; case 122: // UP return "\x04\x4b\x72\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x46\x39"; case 125: // HOME return "\x04\x4b\x72\x46\x2e"; case 126: // END return "\x04\x4b\x72\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x46\x21"; case 132: // F1 return "\x04\x4b\x72\x46\x2f"; case 133: // F2 return "\x04\x4b\x72\x46\x2a"; case 134: // F3 return "\x04\x4b\x72\x46\x3f"; case 135: // F4 return "\x04\x4b\x72\x46\x26"; case 136: // F5 return "\x04\x4b\x72\x46\x3c"; case 137: // F6 return "\x04\x4b\x72\x46\x3e"; case 138: // F7 return "\x04\x4b\x72\x46\x28"; case 139: // F8 return "\x04\x4b\x72\x46\x29"; case 140: // F9 return "\x04\x4b\x72\x46\x5b"; case 141: // F10 return "\x04\x4b\x72\x46\x5d"; case 142: // F11 return "\x04\x4b\x72\x46\x7b"; case 143: // F12 return "\x04\x4b\x72\x46\x7d"; case 144: // F13 return "\x04\x4b\x72\x46\x40"; case 145: // F14 return "\x04\x4b\x72\x46\x25"; case 146: // F15 return "\x04\x4b\x72\x46\x24"; case 147: // F16 return "\x04\x4b\x72\x46\x23"; case 148: // F17 return "\x05\x4b\x72\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x43\x43"; case 11: // MINUS return "\x04\x4b\x72\x43\x44"; case 12: // PERIOD return "\x04\x4b\x72\x43\x45"; case 13: // SLASH return "\x04\x4b\x72\x43\x46"; case 14: // 0 return "\x04\x4b\x72\x43\x47"; case 15: // 1 return "\x04\x4b\x72\x43\x48"; case 16: // 2 return "\x04\x4b\x72\x43\x49"; case 17: // 3 return "\x04\x4b\x72\x43\x4a"; case 18: // 4 return "\x04\x4b\x72\x43\x4b"; case 19: // 5 return "\x04\x4b\x72\x43\x4c"; case 20: // 6 return "\x04\x4b\x72\x43\x4d"; case 21: // 7 return "\x04\x4b\x72\x43\x4e"; case 22: // 8 return "\x04\x4b\x72\x43\x4f"; case 23: // 9 return "\x04\x4b\x72\x43\x50"; case 24: // COLON return "\x05\x4b\x72\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x43\x51"; case 26: // LESS return "\x05\x4b\x72\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x43\x52"; case 28: // GREATER return "\x05\x4b\x72\x43\x42\x75"; case 29: // AT return "\x05\x4b\x72\x43\x42\x76"; case 30: // A return "\x04\x4b\x72\x43\x53"; case 31: // B return "\x04\x4b\x72\x43\x54"; case 32: // C return "\x04\x4b\x72\x43\x55"; case 33: // D return "\x04\x4b\x72\x43\x56"; case 34: // E return "\x04\x4b\x72\x43\x57"; case 35: // F return "\x04\x4b\x72\x43\x58"; case 36: // G return "\x04\x4b\x72\x43\x59"; case 37: // H return "\x04\x4b\x72\x43\x5a"; case 38: // I return "\x04\x4b\x72\x43\x61"; case 39: // J return "\x04\x4b\x72\x43\x62"; case 40: // K return "\x04\x4b\x72\x43\x63"; case 41: // L return "\x04\x4b\x72\x43\x64"; case 42: // M return "\x04\x4b\x72\x43\x65"; case 43: // N return "\x04\x4b\x72\x43\x66"; case 44: // O return "\x04\x4b\x72\x43\x67"; case 45: // P return "\x04\x4b\x72\x43\x68"; case 46: // Q return "\x04\x4b\x72\x43\x69"; case 47: // R return "\x04\x4b\x72\x43\x6a"; case 48: // S return "\x04\x4b\x72\x43\x6b"; case 49: // T return "\x04\x4b\x72\x43\x6c"; case 50: // U return "\x04\x4b\x72\x43\x6d"; case 51: // V return "\x04\x4b\x72\x43\x6e"; case 52: // W return "\x04\x4b\x72\x43\x6f"; case 53: // X return "\x04\x4b\x72\x43\x70"; case 54: // Y return "\x04\x4b\x72\x43\x71"; case 55: // Z return "\x04\x4b\x72\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x43\x42\x30"; case 68: // AE return "\x05\x4b\x72\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x43\x79"; case 114: // ENTER return "\x04\x4b\x72\x43\x7a"; case 115: // TAB return "\x04\x4b\x72\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x43\x31"; case 117: // INSERT return "\x04\x4b\x72\x43\x32"; case 118: // DELETE return "\x04\x4b\x72\x43\x33"; case 119: // RIGHT return "\x04\x4b\x72\x43\x34"; case 120: // LEFT return "\x04\x4b\x72\x43\x35"; case 121: // DOWN return "\x04\x4b\x72\x43\x36"; case 122: // UP return "\x04\x4b\x72\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x43\x39"; case 125: // HOME return "\x04\x4b\x72\x43\x2e"; case 126: // END return "\x04\x4b\x72\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x43\x21"; case 132: // F1 return "\x04\x4b\x72\x43\x2f"; case 133: // F2 return "\x04\x4b\x72\x43\x2a"; case 134: // F3 return "\x04\x4b\x72\x43\x3f"; case 135: // F4 return "\x04\x4b\x72\x43\x26"; case 136: // F5 return "\x04\x4b\x72\x43\x3c"; case 137: // F6 return "\x04\x4b\x72\x43\x3e"; case 138: // F7 return "\x04\x4b\x72\x43\x28"; case 139: // F8 return "\x04\x4b\x72\x43\x29"; case 140: // F9 return "\x04\x4b\x72\x43\x5b"; case 141: // F10 return "\x04\x4b\x72\x43\x5d"; case 142: // F11 return "\x04\x4b\x72\x43\x7b"; case 143: // F12 return "\x04\x4b\x72\x43\x7d"; case 144: // F13 return "\x04\x4b\x72\x43\x40"; case 145: // F14 return "\x04\x4b\x72\x43\x25"; case 146: // F15 return "\x04\x4b\x72\x43\x24"; case 147: // F16 return "\x04\x4b\x72\x43\x23"; case 148: // F17 return "\x05\x4b\x72\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x44\x43"; case 11: // MINUS return "\x04\x4b\x72\x44\x44"; case 12: // PERIOD return "\x04\x4b\x72\x44\x45"; case 13: // SLASH return "\x04\x4b\x72\x44\x46"; case 14: // 0 return "\x04\x4b\x72\x44\x47"; case 15: // 1 return "\x04\x4b\x72\x44\x48"; case 16: // 2 return "\x04\x4b\x72\x44\x49"; case 17: // 3 return "\x04\x4b\x72\x44\x4a"; case 18: // 4 return "\x04\x4b\x72\x44\x4b"; case 19: // 5 return "\x04\x4b\x72\x44\x4c"; case 20: // 6 return "\x04\x4b\x72\x44\x4d"; case 21: // 7 return "\x04\x4b\x72\x44\x4e"; case 22: // 8 return "\x04\x4b\x72\x44\x4f"; case 23: // 9 return "\x04\x4b\x72\x44\x50"; case 24: // COLON return "\x05\x4b\x72\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x44\x51"; case 26: // LESS return "\x05\x4b\x72\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x44\x52"; case 28: // GREATER return "\x05\x4b\x72\x44\x42\x75"; case 29: // AT return "\x05\x4b\x72\x44\x42\x76"; case 30: // A return "\x04\x4b\x72\x44\x53"; case 31: // B return "\x04\x4b\x72\x44\x54"; case 32: // C return "\x04\x4b\x72\x44\x55"; case 33: // D return "\x04\x4b\x72\x44\x56"; case 34: // E return "\x04\x4b\x72\x44\x57"; case 35: // F return "\x04\x4b\x72\x44\x58"; case 36: // G return "\x04\x4b\x72\x44\x59"; case 37: // H return "\x04\x4b\x72\x44\x5a"; case 38: // I return "\x04\x4b\x72\x44\x61"; case 39: // J return "\x04\x4b\x72\x44\x62"; case 40: // K return "\x04\x4b\x72\x44\x63"; case 41: // L return "\x04\x4b\x72\x44\x64"; case 42: // M return "\x04\x4b\x72\x44\x65"; case 43: // N return "\x04\x4b\x72\x44\x66"; case 44: // O return "\x04\x4b\x72\x44\x67"; case 45: // P return "\x04\x4b\x72\x44\x68"; case 46: // Q return "\x04\x4b\x72\x44\x69"; case 47: // R return "\x04\x4b\x72\x44\x6a"; case 48: // S return "\x04\x4b\x72\x44\x6b"; case 49: // T return "\x04\x4b\x72\x44\x6c"; case 50: // U return "\x04\x4b\x72\x44\x6d"; case 51: // V return "\x04\x4b\x72\x44\x6e"; case 52: // W return "\x04\x4b\x72\x44\x6f"; case 53: // X return "\x04\x4b\x72\x44\x70"; case 54: // Y return "\x04\x4b\x72\x44\x71"; case 55: // Z return "\x04\x4b\x72\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x44\x42\x30"; case 68: // AE return "\x05\x4b\x72\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x44\x79"; case 114: // ENTER return "\x04\x4b\x72\x44\x7a"; case 115: // TAB return "\x04\x4b\x72\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x44\x31"; case 117: // INSERT return "\x04\x4b\x72\x44\x32"; case 118: // DELETE return "\x04\x4b\x72\x44\x33"; case 119: // RIGHT return "\x04\x4b\x72\x44\x34"; case 120: // LEFT return "\x04\x4b\x72\x44\x35"; case 121: // DOWN return "\x04\x4b\x72\x44\x36"; case 122: // UP return "\x04\x4b\x72\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x44\x39"; case 125: // HOME return "\x04\x4b\x72\x44\x2e"; case 126: // END return "\x04\x4b\x72\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x44\x21"; case 132: // F1 return "\x04\x4b\x72\x44\x2f"; case 133: // F2 return "\x04\x4b\x72\x44\x2a"; case 134: // F3 return "\x04\x4b\x72\x44\x3f"; case 135: // F4 return "\x04\x4b\x72\x44\x26"; case 136: // F5 return "\x04\x4b\x72\x44\x3c"; case 137: // F6 return "\x04\x4b\x72\x44\x3e"; case 138: // F7 return "\x04\x4b\x72\x44\x28"; case 139: // F8 return "\x04\x4b\x72\x44\x29"; case 140: // F9 return "\x04\x4b\x72\x44\x5b"; case 141: // F10 return "\x04\x4b\x72\x44\x5d"; case 142: // F11 return "\x04\x4b\x72\x44\x7b"; case 143: // F12 return "\x04\x4b\x72\x44\x7d"; case 144: // F13 return "\x04\x4b\x72\x44\x40"; case 145: // F14 return "\x04\x4b\x72\x44\x25"; case 146: // F15 return "\x04\x4b\x72\x44\x24"; case 147: // F16 return "\x04\x4b\x72\x44\x23"; case 148: // F17 return "\x05\x4b\x72\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x47\x43"; case 11: // MINUS return "\x04\x4b\x72\x47\x44"; case 12: // PERIOD return "\x04\x4b\x72\x47\x45"; case 13: // SLASH return "\x04\x4b\x72\x47\x46"; case 14: // 0 return "\x04\x4b\x72\x47\x47"; case 15: // 1 return "\x04\x4b\x72\x47\x48"; case 16: // 2 return "\x04\x4b\x72\x47\x49"; case 17: // 3 return "\x04\x4b\x72\x47\x4a"; case 18: // 4 return "\x04\x4b\x72\x47\x4b"; case 19: // 5 return "\x04\x4b\x72\x47\x4c"; case 20: // 6 return "\x04\x4b\x72\x47\x4d"; case 21: // 7 return "\x04\x4b\x72\x47\x4e"; case 22: // 8 return "\x04\x4b\x72\x47\x4f"; case 23: // 9 return "\x04\x4b\x72\x47\x50"; case 24: // COLON return "\x05\x4b\x72\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x47\x51"; case 26: // LESS return "\x05\x4b\x72\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x47\x52"; case 28: // GREATER return "\x05\x4b\x72\x47\x42\x75"; case 29: // AT return "\x05\x4b\x72\x47\x42\x76"; case 30: // A return "\x04\x4b\x72\x47\x53"; case 31: // B return "\x04\x4b\x72\x47\x54"; case 32: // C return "\x04\x4b\x72\x47\x55"; case 33: // D return "\x04\x4b\x72\x47\x56"; case 34: // E return "\x04\x4b\x72\x47\x57"; case 35: // F return "\x04\x4b\x72\x47\x58"; case 36: // G return "\x04\x4b\x72\x47\x59"; case 37: // H return "\x04\x4b\x72\x47\x5a"; case 38: // I return "\x04\x4b\x72\x47\x61"; case 39: // J return "\x04\x4b\x72\x47\x62"; case 40: // K return "\x04\x4b\x72\x47\x63"; case 41: // L return "\x04\x4b\x72\x47\x64"; case 42: // M return "\x04\x4b\x72\x47\x65"; case 43: // N return "\x04\x4b\x72\x47\x66"; case 44: // O return "\x04\x4b\x72\x47\x67"; case 45: // P return "\x04\x4b\x72\x47\x68"; case 46: // Q return "\x04\x4b\x72\x47\x69"; case 47: // R return "\x04\x4b\x72\x47\x6a"; case 48: // S return "\x04\x4b\x72\x47\x6b"; case 49: // T return "\x04\x4b\x72\x47\x6c"; case 50: // U return "\x04\x4b\x72\x47\x6d"; case 51: // V return "\x04\x4b\x72\x47\x6e"; case 52: // W return "\x04\x4b\x72\x47\x6f"; case 53: // X return "\x04\x4b\x72\x47\x70"; case 54: // Y return "\x04\x4b\x72\x47\x71"; case 55: // Z return "\x04\x4b\x72\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x47\x42\x30"; case 68: // AE return "\x05\x4b\x72\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x47\x79"; case 114: // ENTER return "\x04\x4b\x72\x47\x7a"; case 115: // TAB return "\x04\x4b\x72\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x47\x31"; case 117: // INSERT return "\x04\x4b\x72\x47\x32"; case 118: // DELETE return "\x04\x4b\x72\x47\x33"; case 119: // RIGHT return "\x04\x4b\x72\x47\x34"; case 120: // LEFT return "\x04\x4b\x72\x47\x35"; case 121: // DOWN return "\x04\x4b\x72\x47\x36"; case 122: // UP return "\x04\x4b\x72\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x47\x39"; case 125: // HOME return "\x04\x4b\x72\x47\x2e"; case 126: // END return "\x04\x4b\x72\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x47\x21"; case 132: // F1 return "\x04\x4b\x72\x47\x2f"; case 133: // F2 return "\x04\x4b\x72\x47\x2a"; case 134: // F3 return "\x04\x4b\x72\x47\x3f"; case 135: // F4 return "\x04\x4b\x72\x47\x26"; case 136: // F5 return "\x04\x4b\x72\x47\x3c"; case 137: // F6 return "\x04\x4b\x72\x47\x3e"; case 138: // F7 return "\x04\x4b\x72\x47\x28"; case 139: // F8 return "\x04\x4b\x72\x47\x29"; case 140: // F9 return "\x04\x4b\x72\x47\x5b"; case 141: // F10 return "\x04\x4b\x72\x47\x5d"; case 142: // F11 return "\x04\x4b\x72\x47\x7b"; case 143: // F12 return "\x04\x4b\x72\x47\x7d"; case 144: // F13 return "\x04\x4b\x72\x47\x40"; case 145: // F14 return "\x04\x4b\x72\x47\x25"; case 146: // F15 return "\x04\x4b\x72\x47\x24"; case 147: // F16 return "\x04\x4b\x72\x47\x23"; case 148: // F17 return "\x05\x4b\x72\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x48\x43"; case 11: // MINUS return "\x04\x4b\x72\x48\x44"; case 12: // PERIOD return "\x04\x4b\x72\x48\x45"; case 13: // SLASH return "\x04\x4b\x72\x48\x46"; case 14: // 0 return "\x04\x4b\x72\x48\x47"; case 15: // 1 return "\x04\x4b\x72\x48\x48"; case 16: // 2 return "\x04\x4b\x72\x48\x49"; case 17: // 3 return "\x04\x4b\x72\x48\x4a"; case 18: // 4 return "\x04\x4b\x72\x48\x4b"; case 19: // 5 return "\x04\x4b\x72\x48\x4c"; case 20: // 6 return "\x04\x4b\x72\x48\x4d"; case 21: // 7 return "\x04\x4b\x72\x48\x4e"; case 22: // 8 return "\x04\x4b\x72\x48\x4f"; case 23: // 9 return "\x04\x4b\x72\x48\x50"; case 24: // COLON return "\x05\x4b\x72\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x48\x51"; case 26: // LESS return "\x05\x4b\x72\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x48\x52"; case 28: // GREATER return "\x05\x4b\x72\x48\x42\x75"; case 29: // AT return "\x05\x4b\x72\x48\x42\x76"; case 30: // A return "\x04\x4b\x72\x48\x53"; case 31: // B return "\x04\x4b\x72\x48\x54"; case 32: // C return "\x04\x4b\x72\x48\x55"; case 33: // D return "\x04\x4b\x72\x48\x56"; case 34: // E return "\x04\x4b\x72\x48\x57"; case 35: // F return "\x04\x4b\x72\x48\x58"; case 36: // G return "\x04\x4b\x72\x48\x59"; case 37: // H return "\x04\x4b\x72\x48\x5a"; case 38: // I return "\x04\x4b\x72\x48\x61"; case 39: // J return "\x04\x4b\x72\x48\x62"; case 40: // K return "\x04\x4b\x72\x48\x63"; case 41: // L return "\x04\x4b\x72\x48\x64"; case 42: // M return "\x04\x4b\x72\x48\x65"; case 43: // N return "\x04\x4b\x72\x48\x66"; case 44: // O return "\x04\x4b\x72\x48\x67"; case 45: // P return "\x04\x4b\x72\x48\x68"; case 46: // Q return "\x04\x4b\x72\x48\x69"; case 47: // R return "\x04\x4b\x72\x48\x6a"; case 48: // S return "\x04\x4b\x72\x48\x6b"; case 49: // T return "\x04\x4b\x72\x48\x6c"; case 50: // U return "\x04\x4b\x72\x48\x6d"; case 51: // V return "\x04\x4b\x72\x48\x6e"; case 52: // W return "\x04\x4b\x72\x48\x6f"; case 53: // X return "\x04\x4b\x72\x48\x70"; case 54: // Y return "\x04\x4b\x72\x48\x71"; case 55: // Z return "\x04\x4b\x72\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x48\x42\x30"; case 68: // AE return "\x05\x4b\x72\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x48\x79"; case 114: // ENTER return "\x04\x4b\x72\x48\x7a"; case 115: // TAB return "\x04\x4b\x72\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x48\x31"; case 117: // INSERT return "\x04\x4b\x72\x48\x32"; case 118: // DELETE return "\x04\x4b\x72\x48\x33"; case 119: // RIGHT return "\x04\x4b\x72\x48\x34"; case 120: // LEFT return "\x04\x4b\x72\x48\x35"; case 121: // DOWN return "\x04\x4b\x72\x48\x36"; case 122: // UP return "\x04\x4b\x72\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x48\x39"; case 125: // HOME return "\x04\x4b\x72\x48\x2e"; case 126: // END return "\x04\x4b\x72\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x48\x21"; case 132: // F1 return "\x04\x4b\x72\x48\x2f"; case 133: // F2 return "\x04\x4b\x72\x48\x2a"; case 134: // F3 return "\x04\x4b\x72\x48\x3f"; case 135: // F4 return "\x04\x4b\x72\x48\x26"; case 136: // F5 return "\x04\x4b\x72\x48\x3c"; case 137: // F6 return "\x04\x4b\x72\x48\x3e"; case 138: // F7 return "\x04\x4b\x72\x48\x28"; case 139: // F8 return "\x04\x4b\x72\x48\x29"; case 140: // F9 return "\x04\x4b\x72\x48\x5b"; case 141: // F10 return "\x04\x4b\x72\x48\x5d"; case 142: // F11 return "\x04\x4b\x72\x48\x7b"; case 143: // F12 return "\x04\x4b\x72\x48\x7d"; case 144: // F13 return "\x04\x4b\x72\x48\x40"; case 145: // F14 return "\x04\x4b\x72\x48\x25"; case 146: // F15 return "\x04\x4b\x72\x48\x24"; case 147: // F16 return "\x04\x4b\x72\x48\x23"; case 148: // F17 return "\x05\x4b\x72\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x49\x43"; case 11: // MINUS return "\x04\x4b\x72\x49\x44"; case 12: // PERIOD return "\x04\x4b\x72\x49\x45"; case 13: // SLASH return "\x04\x4b\x72\x49\x46"; case 14: // 0 return "\x04\x4b\x72\x49\x47"; case 15: // 1 return "\x04\x4b\x72\x49\x48"; case 16: // 2 return "\x04\x4b\x72\x49\x49"; case 17: // 3 return "\x04\x4b\x72\x49\x4a"; case 18: // 4 return "\x04\x4b\x72\x49\x4b"; case 19: // 5 return "\x04\x4b\x72\x49\x4c"; case 20: // 6 return "\x04\x4b\x72\x49\x4d"; case 21: // 7 return "\x04\x4b\x72\x49\x4e"; case 22: // 8 return "\x04\x4b\x72\x49\x4f"; case 23: // 9 return "\x04\x4b\x72\x49\x50"; case 24: // COLON return "\x05\x4b\x72\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x49\x51"; case 26: // LESS return "\x05\x4b\x72\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x49\x52"; case 28: // GREATER return "\x05\x4b\x72\x49\x42\x75"; case 29: // AT return "\x05\x4b\x72\x49\x42\x76"; case 30: // A return "\x04\x4b\x72\x49\x53"; case 31: // B return "\x04\x4b\x72\x49\x54"; case 32: // C return "\x04\x4b\x72\x49\x55"; case 33: // D return "\x04\x4b\x72\x49\x56"; case 34: // E return "\x04\x4b\x72\x49\x57"; case 35: // F return "\x04\x4b\x72\x49\x58"; case 36: // G return "\x04\x4b\x72\x49\x59"; case 37: // H return "\x04\x4b\x72\x49\x5a"; case 38: // I return "\x04\x4b\x72\x49\x61"; case 39: // J return "\x04\x4b\x72\x49\x62"; case 40: // K return "\x04\x4b\x72\x49\x63"; case 41: // L return "\x04\x4b\x72\x49\x64"; case 42: // M return "\x04\x4b\x72\x49\x65"; case 43: // N return "\x04\x4b\x72\x49\x66"; case 44: // O return "\x04\x4b\x72\x49\x67"; case 45: // P return "\x04\x4b\x72\x49\x68"; case 46: // Q return "\x04\x4b\x72\x49\x69"; case 47: // R return "\x04\x4b\x72\x49\x6a"; case 48: // S return "\x04\x4b\x72\x49\x6b"; case 49: // T return "\x04\x4b\x72\x49\x6c"; case 50: // U return "\x04\x4b\x72\x49\x6d"; case 51: // V return "\x04\x4b\x72\x49\x6e"; case 52: // W return "\x04\x4b\x72\x49\x6f"; case 53: // X return "\x04\x4b\x72\x49\x70"; case 54: // Y return "\x04\x4b\x72\x49\x71"; case 55: // Z return "\x04\x4b\x72\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x49\x42\x30"; case 68: // AE return "\x05\x4b\x72\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x49\x79"; case 114: // ENTER return "\x04\x4b\x72\x49\x7a"; case 115: // TAB return "\x04\x4b\x72\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x49\x31"; case 117: // INSERT return "\x04\x4b\x72\x49\x32"; case 118: // DELETE return "\x04\x4b\x72\x49\x33"; case 119: // RIGHT return "\x04\x4b\x72\x49\x34"; case 120: // LEFT return "\x04\x4b\x72\x49\x35"; case 121: // DOWN return "\x04\x4b\x72\x49\x36"; case 122: // UP return "\x04\x4b\x72\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x49\x39"; case 125: // HOME return "\x04\x4b\x72\x49\x2e"; case 126: // END return "\x04\x4b\x72\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x49\x21"; case 132: // F1 return "\x04\x4b\x72\x49\x2f"; case 133: // F2 return "\x04\x4b\x72\x49\x2a"; case 134: // F3 return "\x04\x4b\x72\x49\x3f"; case 135: // F4 return "\x04\x4b\x72\x49\x26"; case 136: // F5 return "\x04\x4b\x72\x49\x3c"; case 137: // F6 return "\x04\x4b\x72\x49\x3e"; case 138: // F7 return "\x04\x4b\x72\x49\x28"; case 139: // F8 return "\x04\x4b\x72\x49\x29"; case 140: // F9 return "\x04\x4b\x72\x49\x5b"; case 141: // F10 return "\x04\x4b\x72\x49\x5d"; case 142: // F11 return "\x04\x4b\x72\x49\x7b"; case 143: // F12 return "\x04\x4b\x72\x49\x7d"; case 144: // F13 return "\x04\x4b\x72\x49\x40"; case 145: // F14 return "\x04\x4b\x72\x49\x25"; case 146: // F15 return "\x04\x4b\x72\x49\x24"; case 147: // F16 return "\x04\x4b\x72\x49\x23"; case 148: // F17 return "\x05\x4b\x72\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4a\x43"; case 11: // MINUS return "\x04\x4b\x72\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4a\x45"; case 13: // SLASH return "\x04\x4b\x72\x4a\x46"; case 14: // 0 return "\x04\x4b\x72\x4a\x47"; case 15: // 1 return "\x04\x4b\x72\x4a\x48"; case 16: // 2 return "\x04\x4b\x72\x4a\x49"; case 17: // 3 return "\x04\x4b\x72\x4a\x4a"; case 18: // 4 return "\x04\x4b\x72\x4a\x4b"; case 19: // 5 return "\x04\x4b\x72\x4a\x4c"; case 20: // 6 return "\x04\x4b\x72\x4a\x4d"; case 21: // 7 return "\x04\x4b\x72\x4a\x4e"; case 22: // 8 return "\x04\x4b\x72\x4a\x4f"; case 23: // 9 return "\x04\x4b\x72\x4a\x50"; case 24: // COLON return "\x05\x4b\x72\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4a\x51"; case 26: // LESS return "\x05\x4b\x72\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4a\x52"; case 28: // GREATER return "\x05\x4b\x72\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4a\x42\x76"; case 30: // A return "\x04\x4b\x72\x4a\x53"; case 31: // B return "\x04\x4b\x72\x4a\x54"; case 32: // C return "\x04\x4b\x72\x4a\x55"; case 33: // D return "\x04\x4b\x72\x4a\x56"; case 34: // E return "\x04\x4b\x72\x4a\x57"; case 35: // F return "\x04\x4b\x72\x4a\x58"; case 36: // G return "\x04\x4b\x72\x4a\x59"; case 37: // H return "\x04\x4b\x72\x4a\x5a"; case 38: // I return "\x04\x4b\x72\x4a\x61"; case 39: // J return "\x04\x4b\x72\x4a\x62"; case 40: // K return "\x04\x4b\x72\x4a\x63"; case 41: // L return "\x04\x4b\x72\x4a\x64"; case 42: // M return "\x04\x4b\x72\x4a\x65"; case 43: // N return "\x04\x4b\x72\x4a\x66"; case 44: // O return "\x04\x4b\x72\x4a\x67"; case 45: // P return "\x04\x4b\x72\x4a\x68"; case 46: // Q return "\x04\x4b\x72\x4a\x69"; case 47: // R return "\x04\x4b\x72\x4a\x6a"; case 48: // S return "\x04\x4b\x72\x4a\x6b"; case 49: // T return "\x04\x4b\x72\x4a\x6c"; case 50: // U return "\x04\x4b\x72\x4a\x6d"; case 51: // V return "\x04\x4b\x72\x4a\x6e"; case 52: // W return "\x04\x4b\x72\x4a\x6f"; case 53: // X return "\x04\x4b\x72\x4a\x70"; case 54: // Y return "\x04\x4b\x72\x4a\x71"; case 55: // Z return "\x04\x4b\x72\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4a\x79"; case 114: // ENTER return "\x04\x4b\x72\x4a\x7a"; case 115: // TAB return "\x04\x4b\x72\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4a\x31"; case 117: // INSERT return "\x04\x4b\x72\x4a\x32"; case 118: // DELETE return "\x04\x4b\x72\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4a\x34"; case 120: // LEFT return "\x04\x4b\x72\x4a\x35"; case 121: // DOWN return "\x04\x4b\x72\x4a\x36"; case 122: // UP return "\x04\x4b\x72\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4a\x39"; case 125: // HOME return "\x04\x4b\x72\x4a\x2e"; case 126: // END return "\x04\x4b\x72\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4a\x21"; case 132: // F1 return "\x04\x4b\x72\x4a\x2f"; case 133: // F2 return "\x04\x4b\x72\x4a\x2a"; case 134: // F3 return "\x04\x4b\x72\x4a\x3f"; case 135: // F4 return "\x04\x4b\x72\x4a\x26"; case 136: // F5 return "\x04\x4b\x72\x4a\x3c"; case 137: // F6 return "\x04\x4b\x72\x4a\x3e"; case 138: // F7 return "\x04\x4b\x72\x4a\x28"; case 139: // F8 return "\x04\x4b\x72\x4a\x29"; case 140: // F9 return "\x04\x4b\x72\x4a\x5b"; case 141: // F10 return "\x04\x4b\x72\x4a\x5d"; case 142: // F11 return "\x04\x4b\x72\x4a\x7b"; case 143: // F12 return "\x04\x4b\x72\x4a\x7d"; case 144: // F13 return "\x04\x4b\x72\x4a\x40"; case 145: // F14 return "\x04\x4b\x72\x4a\x25"; case 146: // F15 return "\x04\x4b\x72\x4a\x24"; case 147: // F16 return "\x04\x4b\x72\x4a\x23"; case 148: // F17 return "\x05\x4b\x72\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4d\x43"; case 11: // MINUS return "\x04\x4b\x72\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4d\x45"; case 13: // SLASH return "\x04\x4b\x72\x4d\x46"; case 14: // 0 return "\x04\x4b\x72\x4d\x47"; case 15: // 1 return "\x04\x4b\x72\x4d\x48"; case 16: // 2 return "\x04\x4b\x72\x4d\x49"; case 17: // 3 return "\x04\x4b\x72\x4d\x4a"; case 18: // 4 return "\x04\x4b\x72\x4d\x4b"; case 19: // 5 return "\x04\x4b\x72\x4d\x4c"; case 20: // 6 return "\x04\x4b\x72\x4d\x4d"; case 21: // 7 return "\x04\x4b\x72\x4d\x4e"; case 22: // 8 return "\x04\x4b\x72\x4d\x4f"; case 23: // 9 return "\x04\x4b\x72\x4d\x50"; case 24: // COLON return "\x05\x4b\x72\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4d\x51"; case 26: // LESS return "\x05\x4b\x72\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4d\x52"; case 28: // GREATER return "\x05\x4b\x72\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4d\x42\x76"; case 30: // A return "\x04\x4b\x72\x4d\x53"; case 31: // B return "\x04\x4b\x72\x4d\x54"; case 32: // C return "\x04\x4b\x72\x4d\x55"; case 33: // D return "\x04\x4b\x72\x4d\x56"; case 34: // E return "\x04\x4b\x72\x4d\x57"; case 35: // F return "\x04\x4b\x72\x4d\x58"; case 36: // G return "\x04\x4b\x72\x4d\x59"; case 37: // H return "\x04\x4b\x72\x4d\x5a"; case 38: // I return "\x04\x4b\x72\x4d\x61"; case 39: // J return "\x04\x4b\x72\x4d\x62"; case 40: // K return "\x04\x4b\x72\x4d\x63"; case 41: // L return "\x04\x4b\x72\x4d\x64"; case 42: // M return "\x04\x4b\x72\x4d\x65"; case 43: // N return "\x04\x4b\x72\x4d\x66"; case 44: // O return "\x04\x4b\x72\x4d\x67"; case 45: // P return "\x04\x4b\x72\x4d\x68"; case 46: // Q return "\x04\x4b\x72\x4d\x69"; case 47: // R return "\x04\x4b\x72\x4d\x6a"; case 48: // S return "\x04\x4b\x72\x4d\x6b"; case 49: // T return "\x04\x4b\x72\x4d\x6c"; case 50: // U return "\x04\x4b\x72\x4d\x6d"; case 51: // V return "\x04\x4b\x72\x4d\x6e"; case 52: // W return "\x04\x4b\x72\x4d\x6f"; case 53: // X return "\x04\x4b\x72\x4d\x70"; case 54: // Y return "\x04\x4b\x72\x4d\x71"; case 55: // Z return "\x04\x4b\x72\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4d\x79"; case 114: // ENTER return "\x04\x4b\x72\x4d\x7a"; case 115: // TAB return "\x04\x4b\x72\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4d\x31"; case 117: // INSERT return "\x04\x4b\x72\x4d\x32"; case 118: // DELETE return "\x04\x4b\x72\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4d\x34"; case 120: // LEFT return "\x04\x4b\x72\x4d\x35"; case 121: // DOWN return "\x04\x4b\x72\x4d\x36"; case 122: // UP return "\x04\x4b\x72\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4d\x39"; case 125: // HOME return "\x04\x4b\x72\x4d\x2e"; case 126: // END return "\x04\x4b\x72\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4d\x21"; case 132: // F1 return "\x04\x4b\x72\x4d\x2f"; case 133: // F2 return "\x04\x4b\x72\x4d\x2a"; case 134: // F3 return "\x04\x4b\x72\x4d\x3f"; case 135: // F4 return "\x04\x4b\x72\x4d\x26"; case 136: // F5 return "\x04\x4b\x72\x4d\x3c"; case 137: // F6 return "\x04\x4b\x72\x4d\x3e"; case 138: // F7 return "\x04\x4b\x72\x4d\x28"; case 139: // F8 return "\x04\x4b\x72\x4d\x29"; case 140: // F9 return "\x04\x4b\x72\x4d\x5b"; case 141: // F10 return "\x04\x4b\x72\x4d\x5d"; case 142: // F11 return "\x04\x4b\x72\x4d\x7b"; case 143: // F12 return "\x04\x4b\x72\x4d\x7d"; case 144: // F13 return "\x04\x4b\x72\x4d\x40"; case 145: // F14 return "\x04\x4b\x72\x4d\x25"; case 146: // F15 return "\x04\x4b\x72\x4d\x24"; case 147: // F16 return "\x04\x4b\x72\x4d\x23"; case 148: // F17 return "\x05\x4b\x72\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4e\x43"; case 11: // MINUS return "\x04\x4b\x72\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4e\x45"; case 13: // SLASH return "\x04\x4b\x72\x4e\x46"; case 14: // 0 return "\x04\x4b\x72\x4e\x47"; case 15: // 1 return "\x04\x4b\x72\x4e\x48"; case 16: // 2 return "\x04\x4b\x72\x4e\x49"; case 17: // 3 return "\x04\x4b\x72\x4e\x4a"; case 18: // 4 return "\x04\x4b\x72\x4e\x4b"; case 19: // 5 return "\x04\x4b\x72\x4e\x4c"; case 20: // 6 return "\x04\x4b\x72\x4e\x4d"; case 21: // 7 return "\x04\x4b\x72\x4e\x4e"; case 22: // 8 return "\x04\x4b\x72\x4e\x4f"; case 23: // 9 return "\x04\x4b\x72\x4e\x50"; case 24: // COLON return "\x05\x4b\x72\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4e\x51"; case 26: // LESS return "\x05\x4b\x72\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4e\x52"; case 28: // GREATER return "\x05\x4b\x72\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4e\x42\x76"; case 30: // A return "\x04\x4b\x72\x4e\x53"; case 31: // B return "\x04\x4b\x72\x4e\x54"; case 32: // C return "\x04\x4b\x72\x4e\x55"; case 33: // D return "\x04\x4b\x72\x4e\x56"; case 34: // E return "\x04\x4b\x72\x4e\x57"; case 35: // F return "\x04\x4b\x72\x4e\x58"; case 36: // G return "\x04\x4b\x72\x4e\x59"; case 37: // H return "\x04\x4b\x72\x4e\x5a"; case 38: // I return "\x04\x4b\x72\x4e\x61"; case 39: // J return "\x04\x4b\x72\x4e\x62"; case 40: // K return "\x04\x4b\x72\x4e\x63"; case 41: // L return "\x04\x4b\x72\x4e\x64"; case 42: // M return "\x04\x4b\x72\x4e\x65"; case 43: // N return "\x04\x4b\x72\x4e\x66"; case 44: // O return "\x04\x4b\x72\x4e\x67"; case 45: // P return "\x04\x4b\x72\x4e\x68"; case 46: // Q return "\x04\x4b\x72\x4e\x69"; case 47: // R return "\x04\x4b\x72\x4e\x6a"; case 48: // S return "\x04\x4b\x72\x4e\x6b"; case 49: // T return "\x04\x4b\x72\x4e\x6c"; case 50: // U return "\x04\x4b\x72\x4e\x6d"; case 51: // V return "\x04\x4b\x72\x4e\x6e"; case 52: // W return "\x04\x4b\x72\x4e\x6f"; case 53: // X return "\x04\x4b\x72\x4e\x70"; case 54: // Y return "\x04\x4b\x72\x4e\x71"; case 55: // Z return "\x04\x4b\x72\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4e\x79"; case 114: // ENTER return "\x04\x4b\x72\x4e\x7a"; case 115: // TAB return "\x04\x4b\x72\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4e\x31"; case 117: // INSERT return "\x04\x4b\x72\x4e\x32"; case 118: // DELETE return "\x04\x4b\x72\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4e\x34"; case 120: // LEFT return "\x04\x4b\x72\x4e\x35"; case 121: // DOWN return "\x04\x4b\x72\x4e\x36"; case 122: // UP return "\x04\x4b\x72\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4e\x39"; case 125: // HOME return "\x04\x4b\x72\x4e\x2e"; case 126: // END return "\x04\x4b\x72\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4e\x21"; case 132: // F1 return "\x04\x4b\x72\x4e\x2f"; case 133: // F2 return "\x04\x4b\x72\x4e\x2a"; case 134: // F3 return "\x04\x4b\x72\x4e\x3f"; case 135: // F4 return "\x04\x4b\x72\x4e\x26"; case 136: // F5 return "\x04\x4b\x72\x4e\x3c"; case 137: // F6 return "\x04\x4b\x72\x4e\x3e"; case 138: // F7 return "\x04\x4b\x72\x4e\x28"; case 139: // F8 return "\x04\x4b\x72\x4e\x29"; case 140: // F9 return "\x04\x4b\x72\x4e\x5b"; case 141: // F10 return "\x04\x4b\x72\x4e\x5d"; case 142: // F11 return "\x04\x4b\x72\x4e\x7b"; case 143: // F12 return "\x04\x4b\x72\x4e\x7d"; case 144: // F13 return "\x04\x4b\x72\x4e\x40"; case 145: // F14 return "\x04\x4b\x72\x4e\x25"; case 146: // F15 return "\x04\x4b\x72\x4e\x24"; case 147: // F16 return "\x04\x4b\x72\x4e\x23"; case 148: // F17 return "\x05\x4b\x72\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4b\x43"; case 11: // MINUS return "\x04\x4b\x72\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4b\x45"; case 13: // SLASH return "\x04\x4b\x72\x4b\x46"; case 14: // 0 return "\x04\x4b\x72\x4b\x47"; case 15: // 1 return "\x04\x4b\x72\x4b\x48"; case 16: // 2 return "\x04\x4b\x72\x4b\x49"; case 17: // 3 return "\x04\x4b\x72\x4b\x4a"; case 18: // 4 return "\x04\x4b\x72\x4b\x4b"; case 19: // 5 return "\x04\x4b\x72\x4b\x4c"; case 20: // 6 return "\x04\x4b\x72\x4b\x4d"; case 21: // 7 return "\x04\x4b\x72\x4b\x4e"; case 22: // 8 return "\x04\x4b\x72\x4b\x4f"; case 23: // 9 return "\x04\x4b\x72\x4b\x50"; case 24: // COLON return "\x05\x4b\x72\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4b\x51"; case 26: // LESS return "\x05\x4b\x72\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4b\x52"; case 28: // GREATER return "\x05\x4b\x72\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4b\x42\x76"; case 30: // A return "\x04\x4b\x72\x4b\x53"; case 31: // B return "\x04\x4b\x72\x4b\x54"; case 32: // C return "\x04\x4b\x72\x4b\x55"; case 33: // D return "\x04\x4b\x72\x4b\x56"; case 34: // E return "\x04\x4b\x72\x4b\x57"; case 35: // F return "\x04\x4b\x72\x4b\x58"; case 36: // G return "\x04\x4b\x72\x4b\x59"; case 37: // H return "\x04\x4b\x72\x4b\x5a"; case 38: // I return "\x04\x4b\x72\x4b\x61"; case 39: // J return "\x04\x4b\x72\x4b\x62"; case 40: // K return "\x04\x4b\x72\x4b\x63"; case 41: // L return "\x04\x4b\x72\x4b\x64"; case 42: // M return "\x04\x4b\x72\x4b\x65"; case 43: // N return "\x04\x4b\x72\x4b\x66"; case 44: // O return "\x04\x4b\x72\x4b\x67"; case 45: // P return "\x04\x4b\x72\x4b\x68"; case 46: // Q return "\x04\x4b\x72\x4b\x69"; case 47: // R return "\x04\x4b\x72\x4b\x6a"; case 48: // S return "\x04\x4b\x72\x4b\x6b"; case 49: // T return "\x04\x4b\x72\x4b\x6c"; case 50: // U return "\x04\x4b\x72\x4b\x6d"; case 51: // V return "\x04\x4b\x72\x4b\x6e"; case 52: // W return "\x04\x4b\x72\x4b\x6f"; case 53: // X return "\x04\x4b\x72\x4b\x70"; case 54: // Y return "\x04\x4b\x72\x4b\x71"; case 55: // Z return "\x04\x4b\x72\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4b\x79"; case 114: // ENTER return "\x04\x4b\x72\x4b\x7a"; case 115: // TAB return "\x04\x4b\x72\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4b\x31"; case 117: // INSERT return "\x04\x4b\x72\x4b\x32"; case 118: // DELETE return "\x04\x4b\x72\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4b\x34"; case 120: // LEFT return "\x04\x4b\x72\x4b\x35"; case 121: // DOWN return "\x04\x4b\x72\x4b\x36"; case 122: // UP return "\x04\x4b\x72\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4b\x39"; case 125: // HOME return "\x04\x4b\x72\x4b\x2e"; case 126: // END return "\x04\x4b\x72\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4b\x21"; case 132: // F1 return "\x04\x4b\x72\x4b\x2f"; case 133: // F2 return "\x04\x4b\x72\x4b\x2a"; case 134: // F3 return "\x04\x4b\x72\x4b\x3f"; case 135: // F4 return "\x04\x4b\x72\x4b\x26"; case 136: // F5 return "\x04\x4b\x72\x4b\x3c"; case 137: // F6 return "\x04\x4b\x72\x4b\x3e"; case 138: // F7 return "\x04\x4b\x72\x4b\x28"; case 139: // F8 return "\x04\x4b\x72\x4b\x29"; case 140: // F9 return "\x04\x4b\x72\x4b\x5b"; case 141: // F10 return "\x04\x4b\x72\x4b\x5d"; case 142: // F11 return "\x04\x4b\x72\x4b\x7b"; case 143: // F12 return "\x04\x4b\x72\x4b\x7d"; case 144: // F13 return "\x04\x4b\x72\x4b\x40"; case 145: // F14 return "\x04\x4b\x72\x4b\x25"; case 146: // F15 return "\x04\x4b\x72\x4b\x24"; case 147: // F16 return "\x04\x4b\x72\x4b\x23"; case 148: // F17 return "\x05\x4b\x72\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4c\x43"; case 11: // MINUS return "\x04\x4b\x72\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4c\x45"; case 13: // SLASH return "\x04\x4b\x72\x4c\x46"; case 14: // 0 return "\x04\x4b\x72\x4c\x47"; case 15: // 1 return "\x04\x4b\x72\x4c\x48"; case 16: // 2 return "\x04\x4b\x72\x4c\x49"; case 17: // 3 return "\x04\x4b\x72\x4c\x4a"; case 18: // 4 return "\x04\x4b\x72\x4c\x4b"; case 19: // 5 return "\x04\x4b\x72\x4c\x4c"; case 20: // 6 return "\x04\x4b\x72\x4c\x4d"; case 21: // 7 return "\x04\x4b\x72\x4c\x4e"; case 22: // 8 return "\x04\x4b\x72\x4c\x4f"; case 23: // 9 return "\x04\x4b\x72\x4c\x50"; case 24: // COLON return "\x05\x4b\x72\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4c\x51"; case 26: // LESS return "\x05\x4b\x72\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4c\x52"; case 28: // GREATER return "\x05\x4b\x72\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4c\x42\x76"; case 30: // A return "\x04\x4b\x72\x4c\x53"; case 31: // B return "\x04\x4b\x72\x4c\x54"; case 32: // C return "\x04\x4b\x72\x4c\x55"; case 33: // D return "\x04\x4b\x72\x4c\x56"; case 34: // E return "\x04\x4b\x72\x4c\x57"; case 35: // F return "\x04\x4b\x72\x4c\x58"; case 36: // G return "\x04\x4b\x72\x4c\x59"; case 37: // H return "\x04\x4b\x72\x4c\x5a"; case 38: // I return "\x04\x4b\x72\x4c\x61"; case 39: // J return "\x04\x4b\x72\x4c\x62"; case 40: // K return "\x04\x4b\x72\x4c\x63"; case 41: // L return "\x04\x4b\x72\x4c\x64"; case 42: // M return "\x04\x4b\x72\x4c\x65"; case 43: // N return "\x04\x4b\x72\x4c\x66"; case 44: // O return "\x04\x4b\x72\x4c\x67"; case 45: // P return "\x04\x4b\x72\x4c\x68"; case 46: // Q return "\x04\x4b\x72\x4c\x69"; case 47: // R return "\x04\x4b\x72\x4c\x6a"; case 48: // S return "\x04\x4b\x72\x4c\x6b"; case 49: // T return "\x04\x4b\x72\x4c\x6c"; case 50: // U return "\x04\x4b\x72\x4c\x6d"; case 51: // V return "\x04\x4b\x72\x4c\x6e"; case 52: // W return "\x04\x4b\x72\x4c\x6f"; case 53: // X return "\x04\x4b\x72\x4c\x70"; case 54: // Y return "\x04\x4b\x72\x4c\x71"; case 55: // Z return "\x04\x4b\x72\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4c\x79"; case 114: // ENTER return "\x04\x4b\x72\x4c\x7a"; case 115: // TAB return "\x04\x4b\x72\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4c\x31"; case 117: // INSERT return "\x04\x4b\x72\x4c\x32"; case 118: // DELETE return "\x04\x4b\x72\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4c\x34"; case 120: // LEFT return "\x04\x4b\x72\x4c\x35"; case 121: // DOWN return "\x04\x4b\x72\x4c\x36"; case 122: // UP return "\x04\x4b\x72\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4c\x39"; case 125: // HOME return "\x04\x4b\x72\x4c\x2e"; case 126: // END return "\x04\x4b\x72\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4c\x21"; case 132: // F1 return "\x04\x4b\x72\x4c\x2f"; case 133: // F2 return "\x04\x4b\x72\x4c\x2a"; case 134: // F3 return "\x04\x4b\x72\x4c\x3f"; case 135: // F4 return "\x04\x4b\x72\x4c\x26"; case 136: // F5 return "\x04\x4b\x72\x4c\x3c"; case 137: // F6 return "\x04\x4b\x72\x4c\x3e"; case 138: // F7 return "\x04\x4b\x72\x4c\x28"; case 139: // F8 return "\x04\x4b\x72\x4c\x29"; case 140: // F9 return "\x04\x4b\x72\x4c\x5b"; case 141: // F10 return "\x04\x4b\x72\x4c\x5d"; case 142: // F11 return "\x04\x4b\x72\x4c\x7b"; case 143: // F12 return "\x04\x4b\x72\x4c\x7d"; case 144: // F13 return "\x04\x4b\x72\x4c\x40"; case 145: // F14 return "\x04\x4b\x72\x4c\x25"; case 146: // F15 return "\x04\x4b\x72\x4c\x24"; case 147: // F16 return "\x04\x4b\x72\x4c\x23"; case 148: // F17 return "\x05\x4b\x72\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4f\x43"; case 11: // MINUS return "\x04\x4b\x72\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4f\x45"; case 13: // SLASH return "\x04\x4b\x72\x4f\x46"; case 14: // 0 return "\x04\x4b\x72\x4f\x47"; case 15: // 1 return "\x04\x4b\x72\x4f\x48"; case 16: // 2 return "\x04\x4b\x72\x4f\x49"; case 17: // 3 return "\x04\x4b\x72\x4f\x4a"; case 18: // 4 return "\x04\x4b\x72\x4f\x4b"; case 19: // 5 return "\x04\x4b\x72\x4f\x4c"; case 20: // 6 return "\x04\x4b\x72\x4f\x4d"; case 21: // 7 return "\x04\x4b\x72\x4f\x4e"; case 22: // 8 return "\x04\x4b\x72\x4f\x4f"; case 23: // 9 return "\x04\x4b\x72\x4f\x50"; case 24: // COLON return "\x05\x4b\x72\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4f\x51"; case 26: // LESS return "\x05\x4b\x72\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4f\x52"; case 28: // GREATER return "\x05\x4b\x72\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4f\x42\x76"; case 30: // A return "\x04\x4b\x72\x4f\x53"; case 31: // B return "\x04\x4b\x72\x4f\x54"; case 32: // C return "\x04\x4b\x72\x4f\x55"; case 33: // D return "\x04\x4b\x72\x4f\x56"; case 34: // E return "\x04\x4b\x72\x4f\x57"; case 35: // F return "\x04\x4b\x72\x4f\x58"; case 36: // G return "\x04\x4b\x72\x4f\x59"; case 37: // H return "\x04\x4b\x72\x4f\x5a"; case 38: // I return "\x04\x4b\x72\x4f\x61"; case 39: // J return "\x04\x4b\x72\x4f\x62"; case 40: // K return "\x04\x4b\x72\x4f\x63"; case 41: // L return "\x04\x4b\x72\x4f\x64"; case 42: // M return "\x04\x4b\x72\x4f\x65"; case 43: // N return "\x04\x4b\x72\x4f\x66"; case 44: // O return "\x04\x4b\x72\x4f\x67"; case 45: // P return "\x04\x4b\x72\x4f\x68"; case 46: // Q return "\x04\x4b\x72\x4f\x69"; case 47: // R return "\x04\x4b\x72\x4f\x6a"; case 48: // S return "\x04\x4b\x72\x4f\x6b"; case 49: // T return "\x04\x4b\x72\x4f\x6c"; case 50: // U return "\x04\x4b\x72\x4f\x6d"; case 51: // V return "\x04\x4b\x72\x4f\x6e"; case 52: // W return "\x04\x4b\x72\x4f\x6f"; case 53: // X return "\x04\x4b\x72\x4f\x70"; case 54: // Y return "\x04\x4b\x72\x4f\x71"; case 55: // Z return "\x04\x4b\x72\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4f\x79"; case 114: // ENTER return "\x04\x4b\x72\x4f\x7a"; case 115: // TAB return "\x04\x4b\x72\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4f\x31"; case 117: // INSERT return "\x04\x4b\x72\x4f\x32"; case 118: // DELETE return "\x04\x4b\x72\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4f\x34"; case 120: // LEFT return "\x04\x4b\x72\x4f\x35"; case 121: // DOWN return "\x04\x4b\x72\x4f\x36"; case 122: // UP return "\x04\x4b\x72\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4f\x39"; case 125: // HOME return "\x04\x4b\x72\x4f\x2e"; case 126: // END return "\x04\x4b\x72\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4f\x21"; case 132: // F1 return "\x04\x4b\x72\x4f\x2f"; case 133: // F2 return "\x04\x4b\x72\x4f\x2a"; case 134: // F3 return "\x04\x4b\x72\x4f\x3f"; case 135: // F4 return "\x04\x4b\x72\x4f\x26"; case 136: // F5 return "\x04\x4b\x72\x4f\x3c"; case 137: // F6 return "\x04\x4b\x72\x4f\x3e"; case 138: // F7 return "\x04\x4b\x72\x4f\x28"; case 139: // F8 return "\x04\x4b\x72\x4f\x29"; case 140: // F9 return "\x04\x4b\x72\x4f\x5b"; case 141: // F10 return "\x04\x4b\x72\x4f\x5d"; case 142: // F11 return "\x04\x4b\x72\x4f\x7b"; case 143: // F12 return "\x04\x4b\x72\x4f\x7d"; case 144: // F13 return "\x04\x4b\x72\x4f\x40"; case 145: // F14 return "\x04\x4b\x72\x4f\x25"; case 146: // F15 return "\x04\x4b\x72\x4f\x24"; case 147: // F16 return "\x04\x4b\x72\x4f\x23"; case 148: // F17 return "\x05\x4b\x72\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x50\x43"; case 11: // MINUS return "\x04\x4b\x72\x50\x44"; case 12: // PERIOD return "\x04\x4b\x72\x50\x45"; case 13: // SLASH return "\x04\x4b\x72\x50\x46"; case 14: // 0 return "\x04\x4b\x72\x50\x47"; case 15: // 1 return "\x04\x4b\x72\x50\x48"; case 16: // 2 return "\x04\x4b\x72\x50\x49"; case 17: // 3 return "\x04\x4b\x72\x50\x4a"; case 18: // 4 return "\x04\x4b\x72\x50\x4b"; case 19: // 5 return "\x04\x4b\x72\x50\x4c"; case 20: // 6 return "\x04\x4b\x72\x50\x4d"; case 21: // 7 return "\x04\x4b\x72\x50\x4e"; case 22: // 8 return "\x04\x4b\x72\x50\x4f"; case 23: // 9 return "\x04\x4b\x72\x50\x50"; case 24: // COLON return "\x05\x4b\x72\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x50\x51"; case 26: // LESS return "\x05\x4b\x72\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x50\x52"; case 28: // GREATER return "\x05\x4b\x72\x50\x42\x75"; case 29: // AT return "\x05\x4b\x72\x50\x42\x76"; case 30: // A return "\x04\x4b\x72\x50\x53"; case 31: // B return "\x04\x4b\x72\x50\x54"; case 32: // C return "\x04\x4b\x72\x50\x55"; case 33: // D return "\x04\x4b\x72\x50\x56"; case 34: // E return "\x04\x4b\x72\x50\x57"; case 35: // F return "\x04\x4b\x72\x50\x58"; case 36: // G return "\x04\x4b\x72\x50\x59"; case 37: // H return "\x04\x4b\x72\x50\x5a"; case 38: // I return "\x04\x4b\x72\x50\x61"; case 39: // J return "\x04\x4b\x72\x50\x62"; case 40: // K return "\x04\x4b\x72\x50\x63"; case 41: // L return "\x04\x4b\x72\x50\x64"; case 42: // M return "\x04\x4b\x72\x50\x65"; case 43: // N return "\x04\x4b\x72\x50\x66"; case 44: // O return "\x04\x4b\x72\x50\x67"; case 45: // P return "\x04\x4b\x72\x50\x68"; case 46: // Q return "\x04\x4b\x72\x50\x69"; case 47: // R return "\x04\x4b\x72\x50\x6a"; case 48: // S return "\x04\x4b\x72\x50\x6b"; case 49: // T return "\x04\x4b\x72\x50\x6c"; case 50: // U return "\x04\x4b\x72\x50\x6d"; case 51: // V return "\x04\x4b\x72\x50\x6e"; case 52: // W return "\x04\x4b\x72\x50\x6f"; case 53: // X return "\x04\x4b\x72\x50\x70"; case 54: // Y return "\x04\x4b\x72\x50\x71"; case 55: // Z return "\x04\x4b\x72\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x50\x42\x30"; case 68: // AE return "\x05\x4b\x72\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x50\x79"; case 114: // ENTER return "\x04\x4b\x72\x50\x7a"; case 115: // TAB return "\x04\x4b\x72\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x50\x31"; case 117: // INSERT return "\x04\x4b\x72\x50\x32"; case 118: // DELETE return "\x04\x4b\x72\x50\x33"; case 119: // RIGHT return "\x04\x4b\x72\x50\x34"; case 120: // LEFT return "\x04\x4b\x72\x50\x35"; case 121: // DOWN return "\x04\x4b\x72\x50\x36"; case 122: // UP return "\x04\x4b\x72\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x50\x39"; case 125: // HOME return "\x04\x4b\x72\x50\x2e"; case 126: // END return "\x04\x4b\x72\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x50\x21"; case 132: // F1 return "\x04\x4b\x72\x50\x2f"; case 133: // F2 return "\x04\x4b\x72\x50\x2a"; case 134: // F3 return "\x04\x4b\x72\x50\x3f"; case 135: // F4 return "\x04\x4b\x72\x50\x26"; case 136: // F5 return "\x04\x4b\x72\x50\x3c"; case 137: // F6 return "\x04\x4b\x72\x50\x3e"; case 138: // F7 return "\x04\x4b\x72\x50\x28"; case 139: // F8 return "\x04\x4b\x72\x50\x29"; case 140: // F9 return "\x04\x4b\x72\x50\x5b"; case 141: // F10 return "\x04\x4b\x72\x50\x5d"; case 142: // F11 return "\x04\x4b\x72\x50\x7b"; case 143: // F12 return "\x04\x4b\x72\x50\x7d"; case 144: // F13 return "\x04\x4b\x72\x50\x40"; case 145: // F14 return "\x04\x4b\x72\x50\x25"; case 146: // F15 return "\x04\x4b\x72\x50\x24"; case 147: // F16 return "\x04\x4b\x72\x50\x23"; case 148: // F17 return "\x05\x4b\x72\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x70\x41\x79"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x04\x4b\x70\x41\x30"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x4b\x70\x41\x32"; case 118: // DELETE return "\x04\x4b\x70\x41\x33"; case 119: // RIGHT return "\x04\x4b\x70\x41\x34"; case 120: // LEFT return "\x04\x4b\x70\x41\x35"; case 121: // DOWN return "\x04\x4b\x70\x41\x36"; case 122: // UP return "\x04\x4b\x70\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x41\x39"; case 125: // HOME return "\x04\x4b\x70\x41\x2e"; case 126: // END return "\x04\x4b\x70\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x41\x21"; case 132: // F1 return "\x04\x4b\x70\x41\x2f"; case 133: // F2 return "\x04\x4b\x70\x41\x2a"; case 134: // F3 return "\x04\x4b\x70\x41\x3f"; case 135: // F4 return "\x04\x4b\x70\x41\x26"; case 136: // F5 return "\x04\x4b\x70\x41\x3c"; case 137: // F6 return "\x04\x4b\x70\x41\x3e"; case 138: // F7 return "\x04\x4b\x70\x41\x28"; case 139: // F8 return "\x04\x4b\x70\x41\x29"; case 140: // F9 return "\x04\x4b\x70\x41\x5b"; case 141: // F10 return "\x04\x4b\x70\x41\x5d"; case 142: // F11 return "\x04\x4b\x70\x41\x7b"; case 143: // F12 return "\x04\x4b\x70\x41\x7d"; case 144: // F13 return "\x04\x4b\x70\x41\x40"; case 145: // F14 return "\x04\x4b\x70\x41\x25"; case 146: // F15 return "\x04\x4b\x70\x41\x24"; case 147: // F16 return "\x04\x4b\x70\x41\x23"; case 148: // F17 return "\x05\x4b\x70\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x70\x42\x79"; case 114: // ENTER return "\x04\x4b\x70\x42\x7a"; case 115: // TAB return "\x04\x4b\x70\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x42\x31"; case 117: // INSERT return "\x04\x4b\x70\x42\x32"; case 118: // DELETE return "\x04\x4b\x70\x42\x33"; case 119: // RIGHT return "\x04\x4b\x70\x42\x34"; case 120: // LEFT return "\x04\x4b\x70\x42\x35"; case 121: // DOWN return "\x04\x4b\x70\x42\x36"; case 122: // UP return "\x04\x4b\x70\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x42\x39"; case 125: // HOME return "\x04\x4b\x70\x42\x2e"; case 126: // END return "\x04\x4b\x70\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x42\x21"; case 132: // F1 return "\x04\x4b\x70\x42\x2f"; case 133: // F2 return "\x04\x4b\x70\x42\x2a"; case 134: // F3 return "\x04\x4b\x70\x42\x3f"; case 135: // F4 return "\x04\x4b\x70\x42\x26"; case 136: // F5 return "\x04\x4b\x70\x42\x3c"; case 137: // F6 return "\x04\x4b\x70\x42\x3e"; case 138: // F7 return "\x04\x4b\x70\x42\x28"; case 139: // F8 return "\x04\x4b\x70\x42\x29"; case 140: // F9 return "\x04\x4b\x70\x42\x5b"; case 141: // F10 return "\x04\x4b\x70\x42\x5d"; case 142: // F11 return "\x04\x4b\x70\x42\x7b"; case 143: // F12 return "\x04\x4b\x70\x42\x7d"; case 144: // F13 return "\x04\x4b\x70\x42\x40"; case 145: // F14 return "\x04\x4b\x70\x42\x25"; case 146: // F15 return "\x04\x4b\x70\x42\x24"; case 147: // F16 return "\x04\x4b\x70\x42\x23"; case 148: // F17 return "\x05\x4b\x70\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x45\x43"; case 11: // MINUS return "\x04\x4b\x70\x45\x44"; case 12: // PERIOD return "\x04\x4b\x70\x45\x45"; case 13: // SLASH return "\x04\x4b\x70\x45\x46"; case 14: // 0 return "\x04\x4b\x70\x45\x47"; case 15: // 1 return "\x04\x4b\x70\x45\x48"; case 16: // 2 return "\x04\x4b\x70\x45\x49"; case 17: // 3 return "\x04\x4b\x70\x45\x4a"; case 18: // 4 return "\x04\x4b\x70\x45\x4b"; case 19: // 5 return "\x04\x4b\x70\x45\x4c"; case 20: // 6 return "\x04\x4b\x70\x45\x4d"; case 21: // 7 return "\x04\x4b\x70\x45\x4e"; case 22: // 8 return "\x04\x4b\x70\x45\x4f"; case 23: // 9 return "\x04\x4b\x70\x45\x50"; case 24: // COLON return "\x05\x4b\x70\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x45\x51"; case 26: // LESS return "\x05\x4b\x70\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x45\x52"; case 28: // GREATER return "\x05\x4b\x70\x45\x42\x75"; case 29: // AT return "\x05\x4b\x70\x45\x42\x76"; case 30: // A return "\x04\x4b\x70\x45\x53"; case 31: // B return "\x04\x4b\x70\x45\x54"; case 32: // C return "\x04\x4b\x70\x45\x55"; case 33: // D return "\x04\x4b\x70\x45\x56"; case 34: // E return "\x04\x4b\x70\x45\x57"; case 35: // F return "\x04\x4b\x70\x45\x58"; case 36: // G return "\x04\x4b\x70\x45\x59"; case 37: // H return "\x04\x4b\x70\x45\x5a"; case 38: // I return "\x04\x4b\x70\x45\x61"; case 39: // J return "\x04\x4b\x70\x45\x62"; case 40: // K return "\x04\x4b\x70\x45\x63"; case 41: // L return "\x04\x4b\x70\x45\x64"; case 42: // M return "\x04\x4b\x70\x45\x65"; case 43: // N return "\x04\x4b\x70\x45\x66"; case 44: // O return "\x04\x4b\x70\x45\x67"; case 45: // P return "\x04\x4b\x70\x45\x68"; case 46: // Q return "\x04\x4b\x70\x45\x69"; case 47: // R return "\x04\x4b\x70\x45\x6a"; case 48: // S return "\x04\x4b\x70\x45\x6b"; case 49: // T return "\x04\x4b\x70\x45\x6c"; case 50: // U return "\x04\x4b\x70\x45\x6d"; case 51: // V return "\x04\x4b\x70\x45\x6e"; case 52: // W return "\x04\x4b\x70\x45\x6f"; case 53: // X return "\x04\x4b\x70\x45\x70"; case 54: // Y return "\x04\x4b\x70\x45\x71"; case 55: // Z return "\x04\x4b\x70\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x45\x42\x30"; case 68: // AE return "\x05\x4b\x70\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x45\x79"; case 114: // ENTER return "\x04\x4b\x70\x45\x7a"; case 115: // TAB return "\x04\x4b\x70\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x45\x31"; case 117: // INSERT return "\x04\x4b\x70\x45\x32"; case 118: // DELETE return "\x04\x4b\x70\x45\x33"; case 119: // RIGHT return "\x04\x4b\x70\x45\x34"; case 120: // LEFT return "\x04\x4b\x70\x45\x35"; case 121: // DOWN return "\x04\x4b\x70\x45\x36"; case 122: // UP return "\x04\x4b\x70\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x45\x39"; case 125: // HOME return "\x04\x4b\x70\x45\x2e"; case 126: // END return "\x04\x4b\x70\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x45\x21"; case 132: // F1 return "\x04\x4b\x70\x45\x2f"; case 133: // F2 return "\x04\x4b\x70\x45\x2a"; case 134: // F3 return "\x04\x4b\x70\x45\x3f"; case 135: // F4 return "\x04\x4b\x70\x45\x26"; case 136: // F5 return "\x04\x4b\x70\x45\x3c"; case 137: // F6 return "\x04\x4b\x70\x45\x3e"; case 138: // F7 return "\x04\x4b\x70\x45\x28"; case 139: // F8 return "\x04\x4b\x70\x45\x29"; case 140: // F9 return "\x04\x4b\x70\x45\x5b"; case 141: // F10 return "\x04\x4b\x70\x45\x5d"; case 142: // F11 return "\x04\x4b\x70\x45\x7b"; case 143: // F12 return "\x04\x4b\x70\x45\x7d"; case 144: // F13 return "\x04\x4b\x70\x45\x40"; case 145: // F14 return "\x04\x4b\x70\x45\x25"; case 146: // F15 return "\x04\x4b\x70\x45\x24"; case 147: // F16 return "\x04\x4b\x70\x45\x23"; case 148: // F17 return "\x05\x4b\x70\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x46\x43"; case 11: // MINUS return "\x04\x4b\x70\x46\x44"; case 12: // PERIOD return "\x04\x4b\x70\x46\x45"; case 13: // SLASH return "\x04\x4b\x70\x46\x46"; case 14: // 0 return "\x04\x4b\x70\x46\x47"; case 15: // 1 return "\x04\x4b\x70\x46\x48"; case 16: // 2 return "\x04\x4b\x70\x46\x49"; case 17: // 3 return "\x04\x4b\x70\x46\x4a"; case 18: // 4 return "\x04\x4b\x70\x46\x4b"; case 19: // 5 return "\x04\x4b\x70\x46\x4c"; case 20: // 6 return "\x04\x4b\x70\x46\x4d"; case 21: // 7 return "\x04\x4b\x70\x46\x4e"; case 22: // 8 return "\x04\x4b\x70\x46\x4f"; case 23: // 9 return "\x04\x4b\x70\x46\x50"; case 24: // COLON return "\x05\x4b\x70\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x46\x51"; case 26: // LESS return "\x05\x4b\x70\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x46\x52"; case 28: // GREATER return "\x05\x4b\x70\x46\x42\x75"; case 29: // AT return "\x05\x4b\x70\x46\x42\x76"; case 30: // A return "\x04\x4b\x70\x46\x53"; case 31: // B return "\x04\x4b\x70\x46\x54"; case 32: // C return "\x04\x4b\x70\x46\x55"; case 33: // D return "\x04\x4b\x70\x46\x56"; case 34: // E return "\x04\x4b\x70\x46\x57"; case 35: // F return "\x04\x4b\x70\x46\x58"; case 36: // G return "\x04\x4b\x70\x46\x59"; case 37: // H return "\x04\x4b\x70\x46\x5a"; case 38: // I return "\x04\x4b\x70\x46\x61"; case 39: // J return "\x04\x4b\x70\x46\x62"; case 40: // K return "\x04\x4b\x70\x46\x63"; case 41: // L return "\x04\x4b\x70\x46\x64"; case 42: // M return "\x04\x4b\x70\x46\x65"; case 43: // N return "\x04\x4b\x70\x46\x66"; case 44: // O return "\x04\x4b\x70\x46\x67"; case 45: // P return "\x04\x4b\x70\x46\x68"; case 46: // Q return "\x04\x4b\x70\x46\x69"; case 47: // R return "\x04\x4b\x70\x46\x6a"; case 48: // S return "\x04\x4b\x70\x46\x6b"; case 49: // T return "\x04\x4b\x70\x46\x6c"; case 50: // U return "\x04\x4b\x70\x46\x6d"; case 51: // V return "\x04\x4b\x70\x46\x6e"; case 52: // W return "\x04\x4b\x70\x46\x6f"; case 53: // X return "\x04\x4b\x70\x46\x70"; case 54: // Y return "\x04\x4b\x70\x46\x71"; case 55: // Z return "\x04\x4b\x70\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x46\x42\x30"; case 68: // AE return "\x05\x4b\x70\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x46\x79"; case 114: // ENTER return "\x04\x4b\x70\x46\x7a"; case 115: // TAB return "\x04\x4b\x70\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x46\x31"; case 117: // INSERT return "\x04\x4b\x70\x46\x32"; case 118: // DELETE return "\x04\x4b\x70\x46\x33"; case 119: // RIGHT return "\x04\x4b\x70\x46\x34"; case 120: // LEFT return "\x04\x4b\x70\x46\x35"; case 121: // DOWN return "\x04\x4b\x70\x46\x36"; case 122: // UP return "\x04\x4b\x70\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x46\x39"; case 125: // HOME return "\x04\x4b\x70\x46\x2e"; case 126: // END return "\x04\x4b\x70\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x46\x21"; case 132: // F1 return "\x04\x4b\x70\x46\x2f"; case 133: // F2 return "\x04\x4b\x70\x46\x2a"; case 134: // F3 return "\x04\x4b\x70\x46\x3f"; case 135: // F4 return "\x04\x4b\x70\x46\x26"; case 136: // F5 return "\x04\x4b\x70\x46\x3c"; case 137: // F6 return "\x04\x4b\x70\x46\x3e"; case 138: // F7 return "\x04\x4b\x70\x46\x28"; case 139: // F8 return "\x04\x4b\x70\x46\x29"; case 140: // F9 return "\x04\x4b\x70\x46\x5b"; case 141: // F10 return "\x04\x4b\x70\x46\x5d"; case 142: // F11 return "\x04\x4b\x70\x46\x7b"; case 143: // F12 return "\x04\x4b\x70\x46\x7d"; case 144: // F13 return "\x04\x4b\x70\x46\x40"; case 145: // F14 return "\x04\x4b\x70\x46\x25"; case 146: // F15 return "\x04\x4b\x70\x46\x24"; case 147: // F16 return "\x04\x4b\x70\x46\x23"; case 148: // F17 return "\x05\x4b\x70\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x43\x43"; case 11: // MINUS return "\x04\x4b\x70\x43\x44"; case 12: // PERIOD return "\x04\x4b\x70\x43\x45"; case 13: // SLASH return "\x04\x4b\x70\x43\x46"; case 14: // 0 return "\x04\x4b\x70\x43\x47"; case 15: // 1 return "\x04\x4b\x70\x43\x48"; case 16: // 2 return "\x04\x4b\x70\x43\x49"; case 17: // 3 return "\x04\x4b\x70\x43\x4a"; case 18: // 4 return "\x04\x4b\x70\x43\x4b"; case 19: // 5 return "\x04\x4b\x70\x43\x4c"; case 20: // 6 return "\x04\x4b\x70\x43\x4d"; case 21: // 7 return "\x04\x4b\x70\x43\x4e"; case 22: // 8 return "\x04\x4b\x70\x43\x4f"; case 23: // 9 return "\x04\x4b\x70\x43\x50"; case 24: // COLON return "\x05\x4b\x70\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x43\x51"; case 26: // LESS return "\x05\x4b\x70\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x43\x52"; case 28: // GREATER return "\x05\x4b\x70\x43\x42\x75"; case 29: // AT return "\x05\x4b\x70\x43\x42\x76"; case 30: // A return "\x04\x4b\x70\x43\x53"; case 31: // B return "\x04\x4b\x70\x43\x54"; case 32: // C return "\x04\x4b\x70\x43\x55"; case 33: // D return "\x04\x4b\x70\x43\x56"; case 34: // E return "\x04\x4b\x70\x43\x57"; case 35: // F return "\x04\x4b\x70\x43\x58"; case 36: // G return "\x04\x4b\x70\x43\x59"; case 37: // H return "\x04\x4b\x70\x43\x5a"; case 38: // I return "\x04\x4b\x70\x43\x61"; case 39: // J return "\x04\x4b\x70\x43\x62"; case 40: // K return "\x04\x4b\x70\x43\x63"; case 41: // L return "\x04\x4b\x70\x43\x64"; case 42: // M return "\x04\x4b\x70\x43\x65"; case 43: // N return "\x04\x4b\x70\x43\x66"; case 44: // O return "\x04\x4b\x70\x43\x67"; case 45: // P return "\x04\x4b\x70\x43\x68"; case 46: // Q return "\x04\x4b\x70\x43\x69"; case 47: // R return "\x04\x4b\x70\x43\x6a"; case 48: // S return "\x04\x4b\x70\x43\x6b"; case 49: // T return "\x04\x4b\x70\x43\x6c"; case 50: // U return "\x04\x4b\x70\x43\x6d"; case 51: // V return "\x04\x4b\x70\x43\x6e"; case 52: // W return "\x04\x4b\x70\x43\x6f"; case 53: // X return "\x04\x4b\x70\x43\x70"; case 54: // Y return "\x04\x4b\x70\x43\x71"; case 55: // Z return "\x04\x4b\x70\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x43\x42\x30"; case 68: // AE return "\x05\x4b\x70\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x43\x79"; case 114: // ENTER return "\x04\x4b\x70\x43\x7a"; case 115: // TAB return "\x04\x4b\x70\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x43\x31"; case 117: // INSERT return "\x04\x4b\x70\x43\x32"; case 118: // DELETE return "\x04\x4b\x70\x43\x33"; case 119: // RIGHT return "\x04\x4b\x70\x43\x34"; case 120: // LEFT return "\x04\x4b\x70\x43\x35"; case 121: // DOWN return "\x04\x4b\x70\x43\x36"; case 122: // UP return "\x04\x4b\x70\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x43\x39"; case 125: // HOME return "\x04\x4b\x70\x43\x2e"; case 126: // END return "\x04\x4b\x70\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x43\x21"; case 132: // F1 return "\x04\x4b\x70\x43\x2f"; case 133: // F2 return "\x04\x4b\x70\x43\x2a"; case 134: // F3 return "\x04\x4b\x70\x43\x3f"; case 135: // F4 return "\x04\x4b\x70\x43\x26"; case 136: // F5 return "\x04\x4b\x70\x43\x3c"; case 137: // F6 return "\x04\x4b\x70\x43\x3e"; case 138: // F7 return "\x04\x4b\x70\x43\x28"; case 139: // F8 return "\x04\x4b\x70\x43\x29"; case 140: // F9 return "\x04\x4b\x70\x43\x5b"; case 141: // F10 return "\x04\x4b\x70\x43\x5d"; case 142: // F11 return "\x04\x4b\x70\x43\x7b"; case 143: // F12 return "\x04\x4b\x70\x43\x7d"; case 144: // F13 return "\x04\x4b\x70\x43\x40"; case 145: // F14 return "\x04\x4b\x70\x43\x25"; case 146: // F15 return "\x04\x4b\x70\x43\x24"; case 147: // F16 return "\x04\x4b\x70\x43\x23"; case 148: // F17 return "\x05\x4b\x70\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x44\x43"; case 11: // MINUS return "\x04\x4b\x70\x44\x44"; case 12: // PERIOD return "\x04\x4b\x70\x44\x45"; case 13: // SLASH return "\x04\x4b\x70\x44\x46"; case 14: // 0 return "\x04\x4b\x70\x44\x47"; case 15: // 1 return "\x04\x4b\x70\x44\x48"; case 16: // 2 return "\x04\x4b\x70\x44\x49"; case 17: // 3 return "\x04\x4b\x70\x44\x4a"; case 18: // 4 return "\x04\x4b\x70\x44\x4b"; case 19: // 5 return "\x04\x4b\x70\x44\x4c"; case 20: // 6 return "\x04\x4b\x70\x44\x4d"; case 21: // 7 return "\x04\x4b\x70\x44\x4e"; case 22: // 8 return "\x04\x4b\x70\x44\x4f"; case 23: // 9 return "\x04\x4b\x70\x44\x50"; case 24: // COLON return "\x05\x4b\x70\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x44\x51"; case 26: // LESS return "\x05\x4b\x70\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x44\x52"; case 28: // GREATER return "\x05\x4b\x70\x44\x42\x75"; case 29: // AT return "\x05\x4b\x70\x44\x42\x76"; case 30: // A return "\x04\x4b\x70\x44\x53"; case 31: // B return "\x04\x4b\x70\x44\x54"; case 32: // C return "\x04\x4b\x70\x44\x55"; case 33: // D return "\x04\x4b\x70\x44\x56"; case 34: // E return "\x04\x4b\x70\x44\x57"; case 35: // F return "\x04\x4b\x70\x44\x58"; case 36: // G return "\x04\x4b\x70\x44\x59"; case 37: // H return "\x04\x4b\x70\x44\x5a"; case 38: // I return "\x04\x4b\x70\x44\x61"; case 39: // J return "\x04\x4b\x70\x44\x62"; case 40: // K return "\x04\x4b\x70\x44\x63"; case 41: // L return "\x04\x4b\x70\x44\x64"; case 42: // M return "\x04\x4b\x70\x44\x65"; case 43: // N return "\x04\x4b\x70\x44\x66"; case 44: // O return "\x04\x4b\x70\x44\x67"; case 45: // P return "\x04\x4b\x70\x44\x68"; case 46: // Q return "\x04\x4b\x70\x44\x69"; case 47: // R return "\x04\x4b\x70\x44\x6a"; case 48: // S return "\x04\x4b\x70\x44\x6b"; case 49: // T return "\x04\x4b\x70\x44\x6c"; case 50: // U return "\x04\x4b\x70\x44\x6d"; case 51: // V return "\x04\x4b\x70\x44\x6e"; case 52: // W return "\x04\x4b\x70\x44\x6f"; case 53: // X return "\x04\x4b\x70\x44\x70"; case 54: // Y return "\x04\x4b\x70\x44\x71"; case 55: // Z return "\x04\x4b\x70\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x44\x42\x30"; case 68: // AE return "\x05\x4b\x70\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x44\x79"; case 114: // ENTER return "\x04\x4b\x70\x44\x7a"; case 115: // TAB return "\x04\x4b\x70\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x44\x31"; case 117: // INSERT return "\x04\x4b\x70\x44\x32"; case 118: // DELETE return "\x04\x4b\x70\x44\x33"; case 119: // RIGHT return "\x04\x4b\x70\x44\x34"; case 120: // LEFT return "\x04\x4b\x70\x44\x35"; case 121: // DOWN return "\x04\x4b\x70\x44\x36"; case 122: // UP return "\x04\x4b\x70\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x44\x39"; case 125: // HOME return "\x04\x4b\x70\x44\x2e"; case 126: // END return "\x04\x4b\x70\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x44\x21"; case 132: // F1 return "\x04\x4b\x70\x44\x2f"; case 133: // F2 return "\x04\x4b\x70\x44\x2a"; case 134: // F3 return "\x04\x4b\x70\x44\x3f"; case 135: // F4 return "\x04\x4b\x70\x44\x26"; case 136: // F5 return "\x04\x4b\x70\x44\x3c"; case 137: // F6 return "\x04\x4b\x70\x44\x3e"; case 138: // F7 return "\x04\x4b\x70\x44\x28"; case 139: // F8 return "\x04\x4b\x70\x44\x29"; case 140: // F9 return "\x04\x4b\x70\x44\x5b"; case 141: // F10 return "\x04\x4b\x70\x44\x5d"; case 142: // F11 return "\x04\x4b\x70\x44\x7b"; case 143: // F12 return "\x04\x4b\x70\x44\x7d"; case 144: // F13 return "\x04\x4b\x70\x44\x40"; case 145: // F14 return "\x04\x4b\x70\x44\x25"; case 146: // F15 return "\x04\x4b\x70\x44\x24"; case 147: // F16 return "\x04\x4b\x70\x44\x23"; case 148: // F17 return "\x05\x4b\x70\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x47\x43"; case 11: // MINUS return "\x04\x4b\x70\x47\x44"; case 12: // PERIOD return "\x04\x4b\x70\x47\x45"; case 13: // SLASH return "\x04\x4b\x70\x47\x46"; case 14: // 0 return "\x04\x4b\x70\x47\x47"; case 15: // 1 return "\x04\x4b\x70\x47\x48"; case 16: // 2 return "\x04\x4b\x70\x47\x49"; case 17: // 3 return "\x04\x4b\x70\x47\x4a"; case 18: // 4 return "\x04\x4b\x70\x47\x4b"; case 19: // 5 return "\x04\x4b\x70\x47\x4c"; case 20: // 6 return "\x04\x4b\x70\x47\x4d"; case 21: // 7 return "\x04\x4b\x70\x47\x4e"; case 22: // 8 return "\x04\x4b\x70\x47\x4f"; case 23: // 9 return "\x04\x4b\x70\x47\x50"; case 24: // COLON return "\x05\x4b\x70\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x47\x51"; case 26: // LESS return "\x05\x4b\x70\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x47\x52"; case 28: // GREATER return "\x05\x4b\x70\x47\x42\x75"; case 29: // AT return "\x05\x4b\x70\x47\x42\x76"; case 30: // A return "\x04\x4b\x70\x47\x53"; case 31: // B return "\x04\x4b\x70\x47\x54"; case 32: // C return "\x04\x4b\x70\x47\x55"; case 33: // D return "\x04\x4b\x70\x47\x56"; case 34: // E return "\x04\x4b\x70\x47\x57"; case 35: // F return "\x04\x4b\x70\x47\x58"; case 36: // G return "\x04\x4b\x70\x47\x59"; case 37: // H return "\x04\x4b\x70\x47\x5a"; case 38: // I return "\x04\x4b\x70\x47\x61"; case 39: // J return "\x04\x4b\x70\x47\x62"; case 40: // K return "\x04\x4b\x70\x47\x63"; case 41: // L return "\x04\x4b\x70\x47\x64"; case 42: // M return "\x04\x4b\x70\x47\x65"; case 43: // N return "\x04\x4b\x70\x47\x66"; case 44: // O return "\x04\x4b\x70\x47\x67"; case 45: // P return "\x04\x4b\x70\x47\x68"; case 46: // Q return "\x04\x4b\x70\x47\x69"; case 47: // R return "\x04\x4b\x70\x47\x6a"; case 48: // S return "\x04\x4b\x70\x47\x6b"; case 49: // T return "\x04\x4b\x70\x47\x6c"; case 50: // U return "\x04\x4b\x70\x47\x6d"; case 51: // V return "\x04\x4b\x70\x47\x6e"; case 52: // W return "\x04\x4b\x70\x47\x6f"; case 53: // X return "\x04\x4b\x70\x47\x70"; case 54: // Y return "\x04\x4b\x70\x47\x71"; case 55: // Z return "\x04\x4b\x70\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x47\x42\x30"; case 68: // AE return "\x05\x4b\x70\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x47\x79"; case 114: // ENTER return "\x04\x4b\x70\x47\x7a"; case 115: // TAB return "\x04\x4b\x70\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x47\x31"; case 117: // INSERT return "\x04\x4b\x70\x47\x32"; case 118: // DELETE return "\x04\x4b\x70\x47\x33"; case 119: // RIGHT return "\x04\x4b\x70\x47\x34"; case 120: // LEFT return "\x04\x4b\x70\x47\x35"; case 121: // DOWN return "\x04\x4b\x70\x47\x36"; case 122: // UP return "\x04\x4b\x70\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x47\x39"; case 125: // HOME return "\x04\x4b\x70\x47\x2e"; case 126: // END return "\x04\x4b\x70\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x47\x21"; case 132: // F1 return "\x04\x4b\x70\x47\x2f"; case 133: // F2 return "\x04\x4b\x70\x47\x2a"; case 134: // F3 return "\x04\x4b\x70\x47\x3f"; case 135: // F4 return "\x04\x4b\x70\x47\x26"; case 136: // F5 return "\x04\x4b\x70\x47\x3c"; case 137: // F6 return "\x04\x4b\x70\x47\x3e"; case 138: // F7 return "\x04\x4b\x70\x47\x28"; case 139: // F8 return "\x04\x4b\x70\x47\x29"; case 140: // F9 return "\x04\x4b\x70\x47\x5b"; case 141: // F10 return "\x04\x4b\x70\x47\x5d"; case 142: // F11 return "\x04\x4b\x70\x47\x7b"; case 143: // F12 return "\x04\x4b\x70\x47\x7d"; case 144: // F13 return "\x04\x4b\x70\x47\x40"; case 145: // F14 return "\x04\x4b\x70\x47\x25"; case 146: // F15 return "\x04\x4b\x70\x47\x24"; case 147: // F16 return "\x04\x4b\x70\x47\x23"; case 148: // F17 return "\x05\x4b\x70\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x48\x43"; case 11: // MINUS return "\x04\x4b\x70\x48\x44"; case 12: // PERIOD return "\x04\x4b\x70\x48\x45"; case 13: // SLASH return "\x04\x4b\x70\x48\x46"; case 14: // 0 return "\x04\x4b\x70\x48\x47"; case 15: // 1 return "\x04\x4b\x70\x48\x48"; case 16: // 2 return "\x04\x4b\x70\x48\x49"; case 17: // 3 return "\x04\x4b\x70\x48\x4a"; case 18: // 4 return "\x04\x4b\x70\x48\x4b"; case 19: // 5 return "\x04\x4b\x70\x48\x4c"; case 20: // 6 return "\x04\x4b\x70\x48\x4d"; case 21: // 7 return "\x04\x4b\x70\x48\x4e"; case 22: // 8 return "\x04\x4b\x70\x48\x4f"; case 23: // 9 return "\x04\x4b\x70\x48\x50"; case 24: // COLON return "\x05\x4b\x70\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x48\x51"; case 26: // LESS return "\x05\x4b\x70\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x48\x52"; case 28: // GREATER return "\x05\x4b\x70\x48\x42\x75"; case 29: // AT return "\x05\x4b\x70\x48\x42\x76"; case 30: // A return "\x04\x4b\x70\x48\x53"; case 31: // B return "\x04\x4b\x70\x48\x54"; case 32: // C return "\x04\x4b\x70\x48\x55"; case 33: // D return "\x04\x4b\x70\x48\x56"; case 34: // E return "\x04\x4b\x70\x48\x57"; case 35: // F return "\x04\x4b\x70\x48\x58"; case 36: // G return "\x04\x4b\x70\x48\x59"; case 37: // H return "\x04\x4b\x70\x48\x5a"; case 38: // I return "\x04\x4b\x70\x48\x61"; case 39: // J return "\x04\x4b\x70\x48\x62"; case 40: // K return "\x04\x4b\x70\x48\x63"; case 41: // L return "\x04\x4b\x70\x48\x64"; case 42: // M return "\x04\x4b\x70\x48\x65"; case 43: // N return "\x04\x4b\x70\x48\x66"; case 44: // O return "\x04\x4b\x70\x48\x67"; case 45: // P return "\x04\x4b\x70\x48\x68"; case 46: // Q return "\x04\x4b\x70\x48\x69"; case 47: // R return "\x04\x4b\x70\x48\x6a"; case 48: // S return "\x04\x4b\x70\x48\x6b"; case 49: // T return "\x04\x4b\x70\x48\x6c"; case 50: // U return "\x04\x4b\x70\x48\x6d"; case 51: // V return "\x04\x4b\x70\x48\x6e"; case 52: // W return "\x04\x4b\x70\x48\x6f"; case 53: // X return "\x04\x4b\x70\x48\x70"; case 54: // Y return "\x04\x4b\x70\x48\x71"; case 55: // Z return "\x04\x4b\x70\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x48\x42\x30"; case 68: // AE return "\x05\x4b\x70\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x48\x79"; case 114: // ENTER return "\x04\x4b\x70\x48\x7a"; case 115: // TAB return "\x04\x4b\x70\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x48\x31"; case 117: // INSERT return "\x04\x4b\x70\x48\x32"; case 118: // DELETE return "\x04\x4b\x70\x48\x33"; case 119: // RIGHT return "\x04\x4b\x70\x48\x34"; case 120: // LEFT return "\x04\x4b\x70\x48\x35"; case 121: // DOWN return "\x04\x4b\x70\x48\x36"; case 122: // UP return "\x04\x4b\x70\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x48\x39"; case 125: // HOME return "\x04\x4b\x70\x48\x2e"; case 126: // END return "\x04\x4b\x70\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x48\x21"; case 132: // F1 return "\x04\x4b\x70\x48\x2f"; case 133: // F2 return "\x04\x4b\x70\x48\x2a"; case 134: // F3 return "\x04\x4b\x70\x48\x3f"; case 135: // F4 return "\x04\x4b\x70\x48\x26"; case 136: // F5 return "\x04\x4b\x70\x48\x3c"; case 137: // F6 return "\x04\x4b\x70\x48\x3e"; case 138: // F7 return "\x04\x4b\x70\x48\x28"; case 139: // F8 return "\x04\x4b\x70\x48\x29"; case 140: // F9 return "\x04\x4b\x70\x48\x5b"; case 141: // F10 return "\x04\x4b\x70\x48\x5d"; case 142: // F11 return "\x04\x4b\x70\x48\x7b"; case 143: // F12 return "\x04\x4b\x70\x48\x7d"; case 144: // F13 return "\x04\x4b\x70\x48\x40"; case 145: // F14 return "\x04\x4b\x70\x48\x25"; case 146: // F15 return "\x04\x4b\x70\x48\x24"; case 147: // F16 return "\x04\x4b\x70\x48\x23"; case 148: // F17 return "\x05\x4b\x70\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x49\x43"; case 11: // MINUS return "\x04\x4b\x70\x49\x44"; case 12: // PERIOD return "\x04\x4b\x70\x49\x45"; case 13: // SLASH return "\x04\x4b\x70\x49\x46"; case 14: // 0 return "\x04\x4b\x70\x49\x47"; case 15: // 1 return "\x04\x4b\x70\x49\x48"; case 16: // 2 return "\x04\x4b\x70\x49\x49"; case 17: // 3 return "\x04\x4b\x70\x49\x4a"; case 18: // 4 return "\x04\x4b\x70\x49\x4b"; case 19: // 5 return "\x04\x4b\x70\x49\x4c"; case 20: // 6 return "\x04\x4b\x70\x49\x4d"; case 21: // 7 return "\x04\x4b\x70\x49\x4e"; case 22: // 8 return "\x04\x4b\x70\x49\x4f"; case 23: // 9 return "\x04\x4b\x70\x49\x50"; case 24: // COLON return "\x05\x4b\x70\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x49\x51"; case 26: // LESS return "\x05\x4b\x70\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x49\x52"; case 28: // GREATER return "\x05\x4b\x70\x49\x42\x75"; case 29: // AT return "\x05\x4b\x70\x49\x42\x76"; case 30: // A return "\x04\x4b\x70\x49\x53"; case 31: // B return "\x04\x4b\x70\x49\x54"; case 32: // C return "\x04\x4b\x70\x49\x55"; case 33: // D return "\x04\x4b\x70\x49\x56"; case 34: // E return "\x04\x4b\x70\x49\x57"; case 35: // F return "\x04\x4b\x70\x49\x58"; case 36: // G return "\x04\x4b\x70\x49\x59"; case 37: // H return "\x04\x4b\x70\x49\x5a"; case 38: // I return "\x04\x4b\x70\x49\x61"; case 39: // J return "\x04\x4b\x70\x49\x62"; case 40: // K return "\x04\x4b\x70\x49\x63"; case 41: // L return "\x04\x4b\x70\x49\x64"; case 42: // M return "\x04\x4b\x70\x49\x65"; case 43: // N return "\x04\x4b\x70\x49\x66"; case 44: // O return "\x04\x4b\x70\x49\x67"; case 45: // P return "\x04\x4b\x70\x49\x68"; case 46: // Q return "\x04\x4b\x70\x49\x69"; case 47: // R return "\x04\x4b\x70\x49\x6a"; case 48: // S return "\x04\x4b\x70\x49\x6b"; case 49: // T return "\x04\x4b\x70\x49\x6c"; case 50: // U return "\x04\x4b\x70\x49\x6d"; case 51: // V return "\x04\x4b\x70\x49\x6e"; case 52: // W return "\x04\x4b\x70\x49\x6f"; case 53: // X return "\x04\x4b\x70\x49\x70"; case 54: // Y return "\x04\x4b\x70\x49\x71"; case 55: // Z return "\x04\x4b\x70\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x49\x42\x30"; case 68: // AE return "\x05\x4b\x70\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x49\x79"; case 114: // ENTER return "\x04\x4b\x70\x49\x7a"; case 115: // TAB return "\x04\x4b\x70\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x49\x31"; case 117: // INSERT return "\x04\x4b\x70\x49\x32"; case 118: // DELETE return "\x04\x4b\x70\x49\x33"; case 119: // RIGHT return "\x04\x4b\x70\x49\x34"; case 120: // LEFT return "\x04\x4b\x70\x49\x35"; case 121: // DOWN return "\x04\x4b\x70\x49\x36"; case 122: // UP return "\x04\x4b\x70\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x49\x39"; case 125: // HOME return "\x04\x4b\x70\x49\x2e"; case 126: // END return "\x04\x4b\x70\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x49\x21"; case 132: // F1 return "\x04\x4b\x70\x49\x2f"; case 133: // F2 return "\x04\x4b\x70\x49\x2a"; case 134: // F3 return "\x04\x4b\x70\x49\x3f"; case 135: // F4 return "\x04\x4b\x70\x49\x26"; case 136: // F5 return "\x04\x4b\x70\x49\x3c"; case 137: // F6 return "\x04\x4b\x70\x49\x3e"; case 138: // F7 return "\x04\x4b\x70\x49\x28"; case 139: // F8 return "\x04\x4b\x70\x49\x29"; case 140: // F9 return "\x04\x4b\x70\x49\x5b"; case 141: // F10 return "\x04\x4b\x70\x49\x5d"; case 142: // F11 return "\x04\x4b\x70\x49\x7b"; case 143: // F12 return "\x04\x4b\x70\x49\x7d"; case 144: // F13 return "\x04\x4b\x70\x49\x40"; case 145: // F14 return "\x04\x4b\x70\x49\x25"; case 146: // F15 return "\x04\x4b\x70\x49\x24"; case 147: // F16 return "\x04\x4b\x70\x49\x23"; case 148: // F17 return "\x05\x4b\x70\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4a\x43"; case 11: // MINUS return "\x04\x4b\x70\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4a\x45"; case 13: // SLASH return "\x04\x4b\x70\x4a\x46"; case 14: // 0 return "\x04\x4b\x70\x4a\x47"; case 15: // 1 return "\x04\x4b\x70\x4a\x48"; case 16: // 2 return "\x04\x4b\x70\x4a\x49"; case 17: // 3 return "\x04\x4b\x70\x4a\x4a"; case 18: // 4 return "\x04\x4b\x70\x4a\x4b"; case 19: // 5 return "\x04\x4b\x70\x4a\x4c"; case 20: // 6 return "\x04\x4b\x70\x4a\x4d"; case 21: // 7 return "\x04\x4b\x70\x4a\x4e"; case 22: // 8 return "\x04\x4b\x70\x4a\x4f"; case 23: // 9 return "\x04\x4b\x70\x4a\x50"; case 24: // COLON return "\x05\x4b\x70\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4a\x51"; case 26: // LESS return "\x05\x4b\x70\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4a\x52"; case 28: // GREATER return "\x05\x4b\x70\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4a\x42\x76"; case 30: // A return "\x04\x4b\x70\x4a\x53"; case 31: // B return "\x04\x4b\x70\x4a\x54"; case 32: // C return "\x04\x4b\x70\x4a\x55"; case 33: // D return "\x04\x4b\x70\x4a\x56"; case 34: // E return "\x04\x4b\x70\x4a\x57"; case 35: // F return "\x04\x4b\x70\x4a\x58"; case 36: // G return "\x04\x4b\x70\x4a\x59"; case 37: // H return "\x04\x4b\x70\x4a\x5a"; case 38: // I return "\x04\x4b\x70\x4a\x61"; case 39: // J return "\x04\x4b\x70\x4a\x62"; case 40: // K return "\x04\x4b\x70\x4a\x63"; case 41: // L return "\x04\x4b\x70\x4a\x64"; case 42: // M return "\x04\x4b\x70\x4a\x65"; case 43: // N return "\x04\x4b\x70\x4a\x66"; case 44: // O return "\x04\x4b\x70\x4a\x67"; case 45: // P return "\x04\x4b\x70\x4a\x68"; case 46: // Q return "\x04\x4b\x70\x4a\x69"; case 47: // R return "\x04\x4b\x70\x4a\x6a"; case 48: // S return "\x04\x4b\x70\x4a\x6b"; case 49: // T return "\x04\x4b\x70\x4a\x6c"; case 50: // U return "\x04\x4b\x70\x4a\x6d"; case 51: // V return "\x04\x4b\x70\x4a\x6e"; case 52: // W return "\x04\x4b\x70\x4a\x6f"; case 53: // X return "\x04\x4b\x70\x4a\x70"; case 54: // Y return "\x04\x4b\x70\x4a\x71"; case 55: // Z return "\x04\x4b\x70\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4a\x79"; case 114: // ENTER return "\x04\x4b\x70\x4a\x7a"; case 115: // TAB return "\x04\x4b\x70\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4a\x31"; case 117: // INSERT return "\x04\x4b\x70\x4a\x32"; case 118: // DELETE return "\x04\x4b\x70\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4a\x34"; case 120: // LEFT return "\x04\x4b\x70\x4a\x35"; case 121: // DOWN return "\x04\x4b\x70\x4a\x36"; case 122: // UP return "\x04\x4b\x70\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4a\x39"; case 125: // HOME return "\x04\x4b\x70\x4a\x2e"; case 126: // END return "\x04\x4b\x70\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4a\x21"; case 132: // F1 return "\x04\x4b\x70\x4a\x2f"; case 133: // F2 return "\x04\x4b\x70\x4a\x2a"; case 134: // F3 return "\x04\x4b\x70\x4a\x3f"; case 135: // F4 return "\x04\x4b\x70\x4a\x26"; case 136: // F5 return "\x04\x4b\x70\x4a\x3c"; case 137: // F6 return "\x04\x4b\x70\x4a\x3e"; case 138: // F7 return "\x04\x4b\x70\x4a\x28"; case 139: // F8 return "\x04\x4b\x70\x4a\x29"; case 140: // F9 return "\x04\x4b\x70\x4a\x5b"; case 141: // F10 return "\x04\x4b\x70\x4a\x5d"; case 142: // F11 return "\x04\x4b\x70\x4a\x7b"; case 143: // F12 return "\x04\x4b\x70\x4a\x7d"; case 144: // F13 return "\x04\x4b\x70\x4a\x40"; case 145: // F14 return "\x04\x4b\x70\x4a\x25"; case 146: // F15 return "\x04\x4b\x70\x4a\x24"; case 147: // F16 return "\x04\x4b\x70\x4a\x23"; case 148: // F17 return "\x05\x4b\x70\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4d\x43"; case 11: // MINUS return "\x04\x4b\x70\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4d\x45"; case 13: // SLASH return "\x04\x4b\x70\x4d\x46"; case 14: // 0 return "\x04\x4b\x70\x4d\x47"; case 15: // 1 return "\x04\x4b\x70\x4d\x48"; case 16: // 2 return "\x04\x4b\x70\x4d\x49"; case 17: // 3 return "\x04\x4b\x70\x4d\x4a"; case 18: // 4 return "\x04\x4b\x70\x4d\x4b"; case 19: // 5 return "\x04\x4b\x70\x4d\x4c"; case 20: // 6 return "\x04\x4b\x70\x4d\x4d"; case 21: // 7 return "\x04\x4b\x70\x4d\x4e"; case 22: // 8 return "\x04\x4b\x70\x4d\x4f"; case 23: // 9 return "\x04\x4b\x70\x4d\x50"; case 24: // COLON return "\x05\x4b\x70\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4d\x51"; case 26: // LESS return "\x05\x4b\x70\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4d\x52"; case 28: // GREATER return "\x05\x4b\x70\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4d\x42\x76"; case 30: // A return "\x04\x4b\x70\x4d\x53"; case 31: // B return "\x04\x4b\x70\x4d\x54"; case 32: // C return "\x04\x4b\x70\x4d\x55"; case 33: // D return "\x04\x4b\x70\x4d\x56"; case 34: // E return "\x04\x4b\x70\x4d\x57"; case 35: // F return "\x04\x4b\x70\x4d\x58"; case 36: // G return "\x04\x4b\x70\x4d\x59"; case 37: // H return "\x04\x4b\x70\x4d\x5a"; case 38: // I return "\x04\x4b\x70\x4d\x61"; case 39: // J return "\x04\x4b\x70\x4d\x62"; case 40: // K return "\x04\x4b\x70\x4d\x63"; case 41: // L return "\x04\x4b\x70\x4d\x64"; case 42: // M return "\x04\x4b\x70\x4d\x65"; case 43: // N return "\x04\x4b\x70\x4d\x66"; case 44: // O return "\x04\x4b\x70\x4d\x67"; case 45: // P return "\x04\x4b\x70\x4d\x68"; case 46: // Q return "\x04\x4b\x70\x4d\x69"; case 47: // R return "\x04\x4b\x70\x4d\x6a"; case 48: // S return "\x04\x4b\x70\x4d\x6b"; case 49: // T return "\x04\x4b\x70\x4d\x6c"; case 50: // U return "\x04\x4b\x70\x4d\x6d"; case 51: // V return "\x04\x4b\x70\x4d\x6e"; case 52: // W return "\x04\x4b\x70\x4d\x6f"; case 53: // X return "\x04\x4b\x70\x4d\x70"; case 54: // Y return "\x04\x4b\x70\x4d\x71"; case 55: // Z return "\x04\x4b\x70\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4d\x79"; case 114: // ENTER return "\x04\x4b\x70\x4d\x7a"; case 115: // TAB return "\x04\x4b\x70\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4d\x31"; case 117: // INSERT return "\x04\x4b\x70\x4d\x32"; case 118: // DELETE return "\x04\x4b\x70\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4d\x34"; case 120: // LEFT return "\x04\x4b\x70\x4d\x35"; case 121: // DOWN return "\x04\x4b\x70\x4d\x36"; case 122: // UP return "\x04\x4b\x70\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4d\x39"; case 125: // HOME return "\x04\x4b\x70\x4d\x2e"; case 126: // END return "\x04\x4b\x70\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4d\x21"; case 132: // F1 return "\x04\x4b\x70\x4d\x2f"; case 133: // F2 return "\x04\x4b\x70\x4d\x2a"; case 134: // F3 return "\x04\x4b\x70\x4d\x3f"; case 135: // F4 return "\x04\x4b\x70\x4d\x26"; case 136: // F5 return "\x04\x4b\x70\x4d\x3c"; case 137: // F6 return "\x04\x4b\x70\x4d\x3e"; case 138: // F7 return "\x04\x4b\x70\x4d\x28"; case 139: // F8 return "\x04\x4b\x70\x4d\x29"; case 140: // F9 return "\x04\x4b\x70\x4d\x5b"; case 141: // F10 return "\x04\x4b\x70\x4d\x5d"; case 142: // F11 return "\x04\x4b\x70\x4d\x7b"; case 143: // F12 return "\x04\x4b\x70\x4d\x7d"; case 144: // F13 return "\x04\x4b\x70\x4d\x40"; case 145: // F14 return "\x04\x4b\x70\x4d\x25"; case 146: // F15 return "\x04\x4b\x70\x4d\x24"; case 147: // F16 return "\x04\x4b\x70\x4d\x23"; case 148: // F17 return "\x05\x4b\x70\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4e\x43"; case 11: // MINUS return "\x04\x4b\x70\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4e\x45"; case 13: // SLASH return "\x04\x4b\x70\x4e\x46"; case 14: // 0 return "\x04\x4b\x70\x4e\x47"; case 15: // 1 return "\x04\x4b\x70\x4e\x48"; case 16: // 2 return "\x04\x4b\x70\x4e\x49"; case 17: // 3 return "\x04\x4b\x70\x4e\x4a"; case 18: // 4 return "\x04\x4b\x70\x4e\x4b"; case 19: // 5 return "\x04\x4b\x70\x4e\x4c"; case 20: // 6 return "\x04\x4b\x70\x4e\x4d"; case 21: // 7 return "\x04\x4b\x70\x4e\x4e"; case 22: // 8 return "\x04\x4b\x70\x4e\x4f"; case 23: // 9 return "\x04\x4b\x70\x4e\x50"; case 24: // COLON return "\x05\x4b\x70\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4e\x51"; case 26: // LESS return "\x05\x4b\x70\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4e\x52"; case 28: // GREATER return "\x05\x4b\x70\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4e\x42\x76"; case 30: // A return "\x04\x4b\x70\x4e\x53"; case 31: // B return "\x04\x4b\x70\x4e\x54"; case 32: // C return "\x04\x4b\x70\x4e\x55"; case 33: // D return "\x04\x4b\x70\x4e\x56"; case 34: // E return "\x04\x4b\x70\x4e\x57"; case 35: // F return "\x04\x4b\x70\x4e\x58"; case 36: // G return "\x04\x4b\x70\x4e\x59"; case 37: // H return "\x04\x4b\x70\x4e\x5a"; case 38: // I return "\x04\x4b\x70\x4e\x61"; case 39: // J return "\x04\x4b\x70\x4e\x62"; case 40: // K return "\x04\x4b\x70\x4e\x63"; case 41: // L return "\x04\x4b\x70\x4e\x64"; case 42: // M return "\x04\x4b\x70\x4e\x65"; case 43: // N return "\x04\x4b\x70\x4e\x66"; case 44: // O return "\x04\x4b\x70\x4e\x67"; case 45: // P return "\x04\x4b\x70\x4e\x68"; case 46: // Q return "\x04\x4b\x70\x4e\x69"; case 47: // R return "\x04\x4b\x70\x4e\x6a"; case 48: // S return "\x04\x4b\x70\x4e\x6b"; case 49: // T return "\x04\x4b\x70\x4e\x6c"; case 50: // U return "\x04\x4b\x70\x4e\x6d"; case 51: // V return "\x04\x4b\x70\x4e\x6e"; case 52: // W return "\x04\x4b\x70\x4e\x6f"; case 53: // X return "\x04\x4b\x70\x4e\x70"; case 54: // Y return "\x04\x4b\x70\x4e\x71"; case 55: // Z return "\x04\x4b\x70\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4e\x79"; case 114: // ENTER return "\x04\x4b\x70\x4e\x7a"; case 115: // TAB return "\x04\x4b\x70\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4e\x31"; case 117: // INSERT return "\x04\x4b\x70\x4e\x32"; case 118: // DELETE return "\x04\x4b\x70\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4e\x34"; case 120: // LEFT return "\x04\x4b\x70\x4e\x35"; case 121: // DOWN return "\x04\x4b\x70\x4e\x36"; case 122: // UP return "\x04\x4b\x70\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4e\x39"; case 125: // HOME return "\x04\x4b\x70\x4e\x2e"; case 126: // END return "\x04\x4b\x70\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4e\x21"; case 132: // F1 return "\x04\x4b\x70\x4e\x2f"; case 133: // F2 return "\x04\x4b\x70\x4e\x2a"; case 134: // F3 return "\x04\x4b\x70\x4e\x3f"; case 135: // F4 return "\x04\x4b\x70\x4e\x26"; case 136: // F5 return "\x04\x4b\x70\x4e\x3c"; case 137: // F6 return "\x04\x4b\x70\x4e\x3e"; case 138: // F7 return "\x04\x4b\x70\x4e\x28"; case 139: // F8 return "\x04\x4b\x70\x4e\x29"; case 140: // F9 return "\x04\x4b\x70\x4e\x5b"; case 141: // F10 return "\x04\x4b\x70\x4e\x5d"; case 142: // F11 return "\x04\x4b\x70\x4e\x7b"; case 143: // F12 return "\x04\x4b\x70\x4e\x7d"; case 144: // F13 return "\x04\x4b\x70\x4e\x40"; case 145: // F14 return "\x04\x4b\x70\x4e\x25"; case 146: // F15 return "\x04\x4b\x70\x4e\x24"; case 147: // F16 return "\x04\x4b\x70\x4e\x23"; case 148: // F17 return "\x05\x4b\x70\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4b\x43"; case 11: // MINUS return "\x04\x4b\x70\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4b\x45"; case 13: // SLASH return "\x04\x4b\x70\x4b\x46"; case 14: // 0 return "\x04\x4b\x70\x4b\x47"; case 15: // 1 return "\x04\x4b\x70\x4b\x48"; case 16: // 2 return "\x04\x4b\x70\x4b\x49"; case 17: // 3 return "\x04\x4b\x70\x4b\x4a"; case 18: // 4 return "\x04\x4b\x70\x4b\x4b"; case 19: // 5 return "\x04\x4b\x70\x4b\x4c"; case 20: // 6 return "\x04\x4b\x70\x4b\x4d"; case 21: // 7 return "\x04\x4b\x70\x4b\x4e"; case 22: // 8 return "\x04\x4b\x70\x4b\x4f"; case 23: // 9 return "\x04\x4b\x70\x4b\x50"; case 24: // COLON return "\x05\x4b\x70\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4b\x51"; case 26: // LESS return "\x05\x4b\x70\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4b\x52"; case 28: // GREATER return "\x05\x4b\x70\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4b\x42\x76"; case 30: // A return "\x04\x4b\x70\x4b\x53"; case 31: // B return "\x04\x4b\x70\x4b\x54"; case 32: // C return "\x04\x4b\x70\x4b\x55"; case 33: // D return "\x04\x4b\x70\x4b\x56"; case 34: // E return "\x04\x4b\x70\x4b\x57"; case 35: // F return "\x04\x4b\x70\x4b\x58"; case 36: // G return "\x04\x4b\x70\x4b\x59"; case 37: // H return "\x04\x4b\x70\x4b\x5a"; case 38: // I return "\x04\x4b\x70\x4b\x61"; case 39: // J return "\x04\x4b\x70\x4b\x62"; case 40: // K return "\x04\x4b\x70\x4b\x63"; case 41: // L return "\x04\x4b\x70\x4b\x64"; case 42: // M return "\x04\x4b\x70\x4b\x65"; case 43: // N return "\x04\x4b\x70\x4b\x66"; case 44: // O return "\x04\x4b\x70\x4b\x67"; case 45: // P return "\x04\x4b\x70\x4b\x68"; case 46: // Q return "\x04\x4b\x70\x4b\x69"; case 47: // R return "\x04\x4b\x70\x4b\x6a"; case 48: // S return "\x04\x4b\x70\x4b\x6b"; case 49: // T return "\x04\x4b\x70\x4b\x6c"; case 50: // U return "\x04\x4b\x70\x4b\x6d"; case 51: // V return "\x04\x4b\x70\x4b\x6e"; case 52: // W return "\x04\x4b\x70\x4b\x6f"; case 53: // X return "\x04\x4b\x70\x4b\x70"; case 54: // Y return "\x04\x4b\x70\x4b\x71"; case 55: // Z return "\x04\x4b\x70\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4b\x79"; case 114: // ENTER return "\x04\x4b\x70\x4b\x7a"; case 115: // TAB return "\x04\x4b\x70\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4b\x31"; case 117: // INSERT return "\x04\x4b\x70\x4b\x32"; case 118: // DELETE return "\x04\x4b\x70\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4b\x34"; case 120: // LEFT return "\x04\x4b\x70\x4b\x35"; case 121: // DOWN return "\x04\x4b\x70\x4b\x36"; case 122: // UP return "\x04\x4b\x70\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4b\x39"; case 125: // HOME return "\x04\x4b\x70\x4b\x2e"; case 126: // END return "\x04\x4b\x70\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4b\x21"; case 132: // F1 return "\x04\x4b\x70\x4b\x2f"; case 133: // F2 return "\x04\x4b\x70\x4b\x2a"; case 134: // F3 return "\x04\x4b\x70\x4b\x3f"; case 135: // F4 return "\x04\x4b\x70\x4b\x26"; case 136: // F5 return "\x04\x4b\x70\x4b\x3c"; case 137: // F6 return "\x04\x4b\x70\x4b\x3e"; case 138: // F7 return "\x04\x4b\x70\x4b\x28"; case 139: // F8 return "\x04\x4b\x70\x4b\x29"; case 140: // F9 return "\x04\x4b\x70\x4b\x5b"; case 141: // F10 return "\x04\x4b\x70\x4b\x5d"; case 142: // F11 return "\x04\x4b\x70\x4b\x7b"; case 143: // F12 return "\x04\x4b\x70\x4b\x7d"; case 144: // F13 return "\x04\x4b\x70\x4b\x40"; case 145: // F14 return "\x04\x4b\x70\x4b\x25"; case 146: // F15 return "\x04\x4b\x70\x4b\x24"; case 147: // F16 return "\x04\x4b\x70\x4b\x23"; case 148: // F17 return "\x05\x4b\x70\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4c\x43"; case 11: // MINUS return "\x04\x4b\x70\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4c\x45"; case 13: // SLASH return "\x04\x4b\x70\x4c\x46"; case 14: // 0 return "\x04\x4b\x70\x4c\x47"; case 15: // 1 return "\x04\x4b\x70\x4c\x48"; case 16: // 2 return "\x04\x4b\x70\x4c\x49"; case 17: // 3 return "\x04\x4b\x70\x4c\x4a"; case 18: // 4 return "\x04\x4b\x70\x4c\x4b"; case 19: // 5 return "\x04\x4b\x70\x4c\x4c"; case 20: // 6 return "\x04\x4b\x70\x4c\x4d"; case 21: // 7 return "\x04\x4b\x70\x4c\x4e"; case 22: // 8 return "\x04\x4b\x70\x4c\x4f"; case 23: // 9 return "\x04\x4b\x70\x4c\x50"; case 24: // COLON return "\x05\x4b\x70\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4c\x51"; case 26: // LESS return "\x05\x4b\x70\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4c\x52"; case 28: // GREATER return "\x05\x4b\x70\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4c\x42\x76"; case 30: // A return "\x04\x4b\x70\x4c\x53"; case 31: // B return "\x04\x4b\x70\x4c\x54"; case 32: // C return "\x04\x4b\x70\x4c\x55"; case 33: // D return "\x04\x4b\x70\x4c\x56"; case 34: // E return "\x04\x4b\x70\x4c\x57"; case 35: // F return "\x04\x4b\x70\x4c\x58"; case 36: // G return "\x04\x4b\x70\x4c\x59"; case 37: // H return "\x04\x4b\x70\x4c\x5a"; case 38: // I return "\x04\x4b\x70\x4c\x61"; case 39: // J return "\x04\x4b\x70\x4c\x62"; case 40: // K return "\x04\x4b\x70\x4c\x63"; case 41: // L return "\x04\x4b\x70\x4c\x64"; case 42: // M return "\x04\x4b\x70\x4c\x65"; case 43: // N return "\x04\x4b\x70\x4c\x66"; case 44: // O return "\x04\x4b\x70\x4c\x67"; case 45: // P return "\x04\x4b\x70\x4c\x68"; case 46: // Q return "\x04\x4b\x70\x4c\x69"; case 47: // R return "\x04\x4b\x70\x4c\x6a"; case 48: // S return "\x04\x4b\x70\x4c\x6b"; case 49: // T return "\x04\x4b\x70\x4c\x6c"; case 50: // U return "\x04\x4b\x70\x4c\x6d"; case 51: // V return "\x04\x4b\x70\x4c\x6e"; case 52: // W return "\x04\x4b\x70\x4c\x6f"; case 53: // X return "\x04\x4b\x70\x4c\x70"; case 54: // Y return "\x04\x4b\x70\x4c\x71"; case 55: // Z return "\x04\x4b\x70\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4c\x79"; case 114: // ENTER return "\x04\x4b\x70\x4c\x7a"; case 115: // TAB return "\x04\x4b\x70\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4c\x31"; case 117: // INSERT return "\x04\x4b\x70\x4c\x32"; case 118: // DELETE return "\x04\x4b\x70\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4c\x34"; case 120: // LEFT return "\x04\x4b\x70\x4c\x35"; case 121: // DOWN return "\x04\x4b\x70\x4c\x36"; case 122: // UP return "\x04\x4b\x70\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4c\x39"; case 125: // HOME return "\x04\x4b\x70\x4c\x2e"; case 126: // END return "\x04\x4b\x70\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4c\x21"; case 132: // F1 return "\x04\x4b\x70\x4c\x2f"; case 133: // F2 return "\x04\x4b\x70\x4c\x2a"; case 134: // F3 return "\x04\x4b\x70\x4c\x3f"; case 135: // F4 return "\x04\x4b\x70\x4c\x26"; case 136: // F5 return "\x04\x4b\x70\x4c\x3c"; case 137: // F6 return "\x04\x4b\x70\x4c\x3e"; case 138: // F7 return "\x04\x4b\x70\x4c\x28"; case 139: // F8 return "\x04\x4b\x70\x4c\x29"; case 140: // F9 return "\x04\x4b\x70\x4c\x5b"; case 141: // F10 return "\x04\x4b\x70\x4c\x5d"; case 142: // F11 return "\x04\x4b\x70\x4c\x7b"; case 143: // F12 return "\x04\x4b\x70\x4c\x7d"; case 144: // F13 return "\x04\x4b\x70\x4c\x40"; case 145: // F14 return "\x04\x4b\x70\x4c\x25"; case 146: // F15 return "\x04\x4b\x70\x4c\x24"; case 147: // F16 return "\x04\x4b\x70\x4c\x23"; case 148: // F17 return "\x05\x4b\x70\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4f\x43"; case 11: // MINUS return "\x04\x4b\x70\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4f\x45"; case 13: // SLASH return "\x04\x4b\x70\x4f\x46"; case 14: // 0 return "\x04\x4b\x70\x4f\x47"; case 15: // 1 return "\x04\x4b\x70\x4f\x48"; case 16: // 2 return "\x04\x4b\x70\x4f\x49"; case 17: // 3 return "\x04\x4b\x70\x4f\x4a"; case 18: // 4 return "\x04\x4b\x70\x4f\x4b"; case 19: // 5 return "\x04\x4b\x70\x4f\x4c"; case 20: // 6 return "\x04\x4b\x70\x4f\x4d"; case 21: // 7 return "\x04\x4b\x70\x4f\x4e"; case 22: // 8 return "\x04\x4b\x70\x4f\x4f"; case 23: // 9 return "\x04\x4b\x70\x4f\x50"; case 24: // COLON return "\x05\x4b\x70\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4f\x51"; case 26: // LESS return "\x05\x4b\x70\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4f\x52"; case 28: // GREATER return "\x05\x4b\x70\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4f\x42\x76"; case 30: // A return "\x04\x4b\x70\x4f\x53"; case 31: // B return "\x04\x4b\x70\x4f\x54"; case 32: // C return "\x04\x4b\x70\x4f\x55"; case 33: // D return "\x04\x4b\x70\x4f\x56"; case 34: // E return "\x04\x4b\x70\x4f\x57"; case 35: // F return "\x04\x4b\x70\x4f\x58"; case 36: // G return "\x04\x4b\x70\x4f\x59"; case 37: // H return "\x04\x4b\x70\x4f\x5a"; case 38: // I return "\x04\x4b\x70\x4f\x61"; case 39: // J return "\x04\x4b\x70\x4f\x62"; case 40: // K return "\x04\x4b\x70\x4f\x63"; case 41: // L return "\x04\x4b\x70\x4f\x64"; case 42: // M return "\x04\x4b\x70\x4f\x65"; case 43: // N return "\x04\x4b\x70\x4f\x66"; case 44: // O return "\x04\x4b\x70\x4f\x67"; case 45: // P return "\x04\x4b\x70\x4f\x68"; case 46: // Q return "\x04\x4b\x70\x4f\x69"; case 47: // R return "\x04\x4b\x70\x4f\x6a"; case 48: // S return "\x04\x4b\x70\x4f\x6b"; case 49: // T return "\x04\x4b\x70\x4f\x6c"; case 50: // U return "\x04\x4b\x70\x4f\x6d"; case 51: // V return "\x04\x4b\x70\x4f\x6e"; case 52: // W return "\x04\x4b\x70\x4f\x6f"; case 53: // X return "\x04\x4b\x70\x4f\x70"; case 54: // Y return "\x04\x4b\x70\x4f\x71"; case 55: // Z return "\x04\x4b\x70\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4f\x79"; case 114: // ENTER return "\x04\x4b\x70\x4f\x7a"; case 115: // TAB return "\x04\x4b\x70\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4f\x31"; case 117: // INSERT return "\x04\x4b\x70\x4f\x32"; case 118: // DELETE return "\x04\x4b\x70\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4f\x34"; case 120: // LEFT return "\x04\x4b\x70\x4f\x35"; case 121: // DOWN return "\x04\x4b\x70\x4f\x36"; case 122: // UP return "\x04\x4b\x70\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4f\x39"; case 125: // HOME return "\x04\x4b\x70\x4f\x2e"; case 126: // END return "\x04\x4b\x70\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4f\x21"; case 132: // F1 return "\x04\x4b\x70\x4f\x2f"; case 133: // F2 return "\x04\x4b\x70\x4f\x2a"; case 134: // F3 return "\x04\x4b\x70\x4f\x3f"; case 135: // F4 return "\x04\x4b\x70\x4f\x26"; case 136: // F5 return "\x04\x4b\x70\x4f\x3c"; case 137: // F6 return "\x04\x4b\x70\x4f\x3e"; case 138: // F7 return "\x04\x4b\x70\x4f\x28"; case 139: // F8 return "\x04\x4b\x70\x4f\x29"; case 140: // F9 return "\x04\x4b\x70\x4f\x5b"; case 141: // F10 return "\x04\x4b\x70\x4f\x5d"; case 142: // F11 return "\x04\x4b\x70\x4f\x7b"; case 143: // F12 return "\x04\x4b\x70\x4f\x7d"; case 144: // F13 return "\x04\x4b\x70\x4f\x40"; case 145: // F14 return "\x04\x4b\x70\x4f\x25"; case 146: // F15 return "\x04\x4b\x70\x4f\x24"; case 147: // F16 return "\x04\x4b\x70\x4f\x23"; case 148: // F17 return "\x05\x4b\x70\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x50\x43"; case 11: // MINUS return "\x04\x4b\x70\x50\x44"; case 12: // PERIOD return "\x04\x4b\x70\x50\x45"; case 13: // SLASH return "\x04\x4b\x70\x50\x46"; case 14: // 0 return "\x04\x4b\x70\x50\x47"; case 15: // 1 return "\x04\x4b\x70\x50\x48"; case 16: // 2 return "\x04\x4b\x70\x50\x49"; case 17: // 3 return "\x04\x4b\x70\x50\x4a"; case 18: // 4 return "\x04\x4b\x70\x50\x4b"; case 19: // 5 return "\x04\x4b\x70\x50\x4c"; case 20: // 6 return "\x04\x4b\x70\x50\x4d"; case 21: // 7 return "\x04\x4b\x70\x50\x4e"; case 22: // 8 return "\x04\x4b\x70\x50\x4f"; case 23: // 9 return "\x04\x4b\x70\x50\x50"; case 24: // COLON return "\x05\x4b\x70\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x50\x51"; case 26: // LESS return "\x05\x4b\x70\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x50\x52"; case 28: // GREATER return "\x05\x4b\x70\x50\x42\x75"; case 29: // AT return "\x05\x4b\x70\x50\x42\x76"; case 30: // A return "\x04\x4b\x70\x50\x53"; case 31: // B return "\x04\x4b\x70\x50\x54"; case 32: // C return "\x04\x4b\x70\x50\x55"; case 33: // D return "\x04\x4b\x70\x50\x56"; case 34: // E return "\x04\x4b\x70\x50\x57"; case 35: // F return "\x04\x4b\x70\x50\x58"; case 36: // G return "\x04\x4b\x70\x50\x59"; case 37: // H return "\x04\x4b\x70\x50\x5a"; case 38: // I return "\x04\x4b\x70\x50\x61"; case 39: // J return "\x04\x4b\x70\x50\x62"; case 40: // K return "\x04\x4b\x70\x50\x63"; case 41: // L return "\x04\x4b\x70\x50\x64"; case 42: // M return "\x04\x4b\x70\x50\x65"; case 43: // N return "\x04\x4b\x70\x50\x66"; case 44: // O return "\x04\x4b\x70\x50\x67"; case 45: // P return "\x04\x4b\x70\x50\x68"; case 46: // Q return "\x04\x4b\x70\x50\x69"; case 47: // R return "\x04\x4b\x70\x50\x6a"; case 48: // S return "\x04\x4b\x70\x50\x6b"; case 49: // T return "\x04\x4b\x70\x50\x6c"; case 50: // U return "\x04\x4b\x70\x50\x6d"; case 51: // V return "\x04\x4b\x70\x50\x6e"; case 52: // W return "\x04\x4b\x70\x50\x6f"; case 53: // X return "\x04\x4b\x70\x50\x70"; case 54: // Y return "\x04\x4b\x70\x50\x71"; case 55: // Z return "\x04\x4b\x70\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x50\x42\x30"; case 68: // AE return "\x05\x4b\x70\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x50\x79"; case 114: // ENTER return "\x04\x4b\x70\x50\x7a"; case 115: // TAB return "\x04\x4b\x70\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x50\x31"; case 117: // INSERT return "\x04\x4b\x70\x50\x32"; case 118: // DELETE return "\x04\x4b\x70\x50\x33"; case 119: // RIGHT return "\x04\x4b\x70\x50\x34"; case 120: // LEFT return "\x04\x4b\x70\x50\x35"; case 121: // DOWN return "\x04\x4b\x70\x50\x36"; case 122: // UP return "\x04\x4b\x70\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x50\x39"; case 125: // HOME return "\x04\x4b\x70\x50\x2e"; case 126: // END return "\x04\x4b\x70\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x50\x21"; case 132: // F1 return "\x04\x4b\x70\x50\x2f"; case 133: // F2 return "\x04\x4b\x70\x50\x2a"; case 134: // F3 return "\x04\x4b\x70\x50\x3f"; case 135: // F4 return "\x04\x4b\x70\x50\x26"; case 136: // F5 return "\x04\x4b\x70\x50\x3c"; case 137: // F6 return "\x04\x4b\x70\x50\x3e"; case 138: // F7 return "\x04\x4b\x70\x50\x28"; case 139: // F8 return "\x04\x4b\x70\x50\x29"; case 140: // F9 return "\x04\x4b\x70\x50\x5b"; case 141: // F10 return "\x04\x4b\x70\x50\x5d"; case 142: // F11 return "\x04\x4b\x70\x50\x7b"; case 143: // F12 return "\x04\x4b\x70\x50\x7d"; case 144: // F13 return "\x04\x4b\x70\x50\x40"; case 145: // F14 return "\x04\x4b\x70\x50\x25"; case 146: // F15 return "\x04\x4b\x70\x50\x24"; case 147: // F16 return "\x04\x4b\x70\x50\x23"; case 148: // F17 return "\x05\x4b\x70\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x74\x41\x79"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x04\x4b\x74\x41\x30"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x4b\x74\x41\x32"; case 118: // DELETE return "\x04\x4b\x74\x41\x33"; case 119: // RIGHT return "\x04\x4b\x74\x41\x34"; case 120: // LEFT return "\x04\x4b\x74\x41\x35"; case 121: // DOWN return "\x04\x4b\x74\x41\x36"; case 122: // UP return "\x04\x4b\x74\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x41\x39"; case 125: // HOME return "\x04\x4b\x74\x41\x2e"; case 126: // END return "\x04\x4b\x74\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x41\x21"; case 132: // F1 return "\x04\x4b\x74\x41\x2f"; case 133: // F2 return "\x04\x4b\x74\x41\x2a"; case 134: // F3 return "\x04\x4b\x74\x41\x3f"; case 135: // F4 return "\x04\x4b\x74\x41\x26"; case 136: // F5 return "\x04\x4b\x74\x41\x3c"; case 137: // F6 return "\x04\x4b\x74\x41\x3e"; case 138: // F7 return "\x04\x4b\x74\x41\x28"; case 139: // F8 return "\x04\x4b\x74\x41\x29"; case 140: // F9 return "\x04\x4b\x74\x41\x5b"; case 141: // F10 return "\x04\x4b\x74\x41\x5d"; case 142: // F11 return "\x04\x4b\x74\x41\x7b"; case 143: // F12 return "\x04\x4b\x74\x41\x7d"; case 144: // F13 return "\x04\x4b\x74\x41\x40"; case 145: // F14 return "\x04\x4b\x74\x41\x25"; case 146: // F15 return "\x04\x4b\x74\x41\x24"; case 147: // F16 return "\x04\x4b\x74\x41\x23"; case 148: // F17 return "\x05\x4b\x74\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x74\x42\x79"; case 114: // ENTER return "\x04\x4b\x74\x42\x7a"; case 115: // TAB return "\x04\x4b\x74\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x42\x31"; case 117: // INSERT return "\x04\x4b\x74\x42\x32"; case 118: // DELETE return "\x04\x4b\x74\x42\x33"; case 119: // RIGHT return "\x04\x4b\x74\x42\x34"; case 120: // LEFT return "\x04\x4b\x74\x42\x35"; case 121: // DOWN return "\x04\x4b\x74\x42\x36"; case 122: // UP return "\x04\x4b\x74\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x42\x39"; case 125: // HOME return "\x04\x4b\x74\x42\x2e"; case 126: // END return "\x04\x4b\x74\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x42\x21"; case 132: // F1 return "\x04\x4b\x74\x42\x2f"; case 133: // F2 return "\x04\x4b\x74\x42\x2a"; case 134: // F3 return "\x04\x4b\x74\x42\x3f"; case 135: // F4 return "\x04\x4b\x74\x42\x26"; case 136: // F5 return "\x04\x4b\x74\x42\x3c"; case 137: // F6 return "\x04\x4b\x74\x42\x3e"; case 138: // F7 return "\x04\x4b\x74\x42\x28"; case 139: // F8 return "\x04\x4b\x74\x42\x29"; case 140: // F9 return "\x04\x4b\x74\x42\x5b"; case 141: // F10 return "\x04\x4b\x74\x42\x5d"; case 142: // F11 return "\x04\x4b\x74\x42\x7b"; case 143: // F12 return "\x04\x4b\x74\x42\x7d"; case 144: // F13 return "\x04\x4b\x74\x42\x40"; case 145: // F14 return "\x04\x4b\x74\x42\x25"; case 146: // F15 return "\x04\x4b\x74\x42\x24"; case 147: // F16 return "\x04\x4b\x74\x42\x23"; case 148: // F17 return "\x05\x4b\x74\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x45\x43"; case 11: // MINUS return "\x04\x4b\x74\x45\x44"; case 12: // PERIOD return "\x04\x4b\x74\x45\x45"; case 13: // SLASH return "\x04\x4b\x74\x45\x46"; case 14: // 0 return "\x04\x4b\x74\x45\x47"; case 15: // 1 return "\x04\x4b\x74\x45\x48"; case 16: // 2 return "\x04\x4b\x74\x45\x49"; case 17: // 3 return "\x04\x4b\x74\x45\x4a"; case 18: // 4 return "\x04\x4b\x74\x45\x4b"; case 19: // 5 return "\x04\x4b\x74\x45\x4c"; case 20: // 6 return "\x04\x4b\x74\x45\x4d"; case 21: // 7 return "\x04\x4b\x74\x45\x4e"; case 22: // 8 return "\x04\x4b\x74\x45\x4f"; case 23: // 9 return "\x04\x4b\x74\x45\x50"; case 24: // COLON return "\x05\x4b\x74\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x45\x51"; case 26: // LESS return "\x05\x4b\x74\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x45\x52"; case 28: // GREATER return "\x05\x4b\x74\x45\x42\x75"; case 29: // AT return "\x05\x4b\x74\x45\x42\x76"; case 30: // A return "\x04\x4b\x74\x45\x53"; case 31: // B return "\x04\x4b\x74\x45\x54"; case 32: // C return "\x04\x4b\x74\x45\x55"; case 33: // D return "\x04\x4b\x74\x45\x56"; case 34: // E return "\x04\x4b\x74\x45\x57"; case 35: // F return "\x04\x4b\x74\x45\x58"; case 36: // G return "\x04\x4b\x74\x45\x59"; case 37: // H return "\x04\x4b\x74\x45\x5a"; case 38: // I return "\x04\x4b\x74\x45\x61"; case 39: // J return "\x04\x4b\x74\x45\x62"; case 40: // K return "\x04\x4b\x74\x45\x63"; case 41: // L return "\x04\x4b\x74\x45\x64"; case 42: // M return "\x04\x4b\x74\x45\x65"; case 43: // N return "\x04\x4b\x74\x45\x66"; case 44: // O return "\x04\x4b\x74\x45\x67"; case 45: // P return "\x04\x4b\x74\x45\x68"; case 46: // Q return "\x04\x4b\x74\x45\x69"; case 47: // R return "\x04\x4b\x74\x45\x6a"; case 48: // S return "\x04\x4b\x74\x45\x6b"; case 49: // T return "\x04\x4b\x74\x45\x6c"; case 50: // U return "\x04\x4b\x74\x45\x6d"; case 51: // V return "\x04\x4b\x74\x45\x6e"; case 52: // W return "\x04\x4b\x74\x45\x6f"; case 53: // X return "\x04\x4b\x74\x45\x70"; case 54: // Y return "\x04\x4b\x74\x45\x71"; case 55: // Z return "\x04\x4b\x74\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x45\x42\x30"; case 68: // AE return "\x05\x4b\x74\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x45\x79"; case 114: // ENTER return "\x04\x4b\x74\x45\x7a"; case 115: // TAB return "\x04\x4b\x74\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x45\x31"; case 117: // INSERT return "\x04\x4b\x74\x45\x32"; case 118: // DELETE return "\x04\x4b\x74\x45\x33"; case 119: // RIGHT return "\x04\x4b\x74\x45\x34"; case 120: // LEFT return "\x04\x4b\x74\x45\x35"; case 121: // DOWN return "\x04\x4b\x74\x45\x36"; case 122: // UP return "\x04\x4b\x74\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x45\x39"; case 125: // HOME return "\x04\x4b\x74\x45\x2e"; case 126: // END return "\x04\x4b\x74\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x45\x21"; case 132: // F1 return "\x04\x4b\x74\x45\x2f"; case 133: // F2 return "\x04\x4b\x74\x45\x2a"; case 134: // F3 return "\x04\x4b\x74\x45\x3f"; case 135: // F4 return "\x04\x4b\x74\x45\x26"; case 136: // F5 return "\x04\x4b\x74\x45\x3c"; case 137: // F6 return "\x04\x4b\x74\x45\x3e"; case 138: // F7 return "\x04\x4b\x74\x45\x28"; case 139: // F8 return "\x04\x4b\x74\x45\x29"; case 140: // F9 return "\x04\x4b\x74\x45\x5b"; case 141: // F10 return "\x04\x4b\x74\x45\x5d"; case 142: // F11 return "\x04\x4b\x74\x45\x7b"; case 143: // F12 return "\x04\x4b\x74\x45\x7d"; case 144: // F13 return "\x04\x4b\x74\x45\x40"; case 145: // F14 return "\x04\x4b\x74\x45\x25"; case 146: // F15 return "\x04\x4b\x74\x45\x24"; case 147: // F16 return "\x04\x4b\x74\x45\x23"; case 148: // F17 return "\x05\x4b\x74\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x46\x43"; case 11: // MINUS return "\x04\x4b\x74\x46\x44"; case 12: // PERIOD return "\x04\x4b\x74\x46\x45"; case 13: // SLASH return "\x04\x4b\x74\x46\x46"; case 14: // 0 return "\x04\x4b\x74\x46\x47"; case 15: // 1 return "\x04\x4b\x74\x46\x48"; case 16: // 2 return "\x04\x4b\x74\x46\x49"; case 17: // 3 return "\x04\x4b\x74\x46\x4a"; case 18: // 4 return "\x04\x4b\x74\x46\x4b"; case 19: // 5 return "\x04\x4b\x74\x46\x4c"; case 20: // 6 return "\x04\x4b\x74\x46\x4d"; case 21: // 7 return "\x04\x4b\x74\x46\x4e"; case 22: // 8 return "\x04\x4b\x74\x46\x4f"; case 23: // 9 return "\x04\x4b\x74\x46\x50"; case 24: // COLON return "\x05\x4b\x74\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x46\x51"; case 26: // LESS return "\x05\x4b\x74\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x46\x52"; case 28: // GREATER return "\x05\x4b\x74\x46\x42\x75"; case 29: // AT return "\x05\x4b\x74\x46\x42\x76"; case 30: // A return "\x04\x4b\x74\x46\x53"; case 31: // B return "\x04\x4b\x74\x46\x54"; case 32: // C return "\x04\x4b\x74\x46\x55"; case 33: // D return "\x04\x4b\x74\x46\x56"; case 34: // E return "\x04\x4b\x74\x46\x57"; case 35: // F return "\x04\x4b\x74\x46\x58"; case 36: // G return "\x04\x4b\x74\x46\x59"; case 37: // H return "\x04\x4b\x74\x46\x5a"; case 38: // I return "\x04\x4b\x74\x46\x61"; case 39: // J return "\x04\x4b\x74\x46\x62"; case 40: // K return "\x04\x4b\x74\x46\x63"; case 41: // L return "\x04\x4b\x74\x46\x64"; case 42: // M return "\x04\x4b\x74\x46\x65"; case 43: // N return "\x04\x4b\x74\x46\x66"; case 44: // O return "\x04\x4b\x74\x46\x67"; case 45: // P return "\x04\x4b\x74\x46\x68"; case 46: // Q return "\x04\x4b\x74\x46\x69"; case 47: // R return "\x04\x4b\x74\x46\x6a"; case 48: // S return "\x04\x4b\x74\x46\x6b"; case 49: // T return "\x04\x4b\x74\x46\x6c"; case 50: // U return "\x04\x4b\x74\x46\x6d"; case 51: // V return "\x04\x4b\x74\x46\x6e"; case 52: // W return "\x04\x4b\x74\x46\x6f"; case 53: // X return "\x04\x4b\x74\x46\x70"; case 54: // Y return "\x04\x4b\x74\x46\x71"; case 55: // Z return "\x04\x4b\x74\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x46\x42\x30"; case 68: // AE return "\x05\x4b\x74\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x46\x79"; case 114: // ENTER return "\x04\x4b\x74\x46\x7a"; case 115: // TAB return "\x04\x4b\x74\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x46\x31"; case 117: // INSERT return "\x04\x4b\x74\x46\x32"; case 118: // DELETE return "\x04\x4b\x74\x46\x33"; case 119: // RIGHT return "\x04\x4b\x74\x46\x34"; case 120: // LEFT return "\x04\x4b\x74\x46\x35"; case 121: // DOWN return "\x04\x4b\x74\x46\x36"; case 122: // UP return "\x04\x4b\x74\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x46\x39"; case 125: // HOME return "\x04\x4b\x74\x46\x2e"; case 126: // END return "\x04\x4b\x74\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x46\x21"; case 132: // F1 return "\x04\x4b\x74\x46\x2f"; case 133: // F2 return "\x04\x4b\x74\x46\x2a"; case 134: // F3 return "\x04\x4b\x74\x46\x3f"; case 135: // F4 return "\x04\x4b\x74\x46\x26"; case 136: // F5 return "\x04\x4b\x74\x46\x3c"; case 137: // F6 return "\x04\x4b\x74\x46\x3e"; case 138: // F7 return "\x04\x4b\x74\x46\x28"; case 139: // F8 return "\x04\x4b\x74\x46\x29"; case 140: // F9 return "\x04\x4b\x74\x46\x5b"; case 141: // F10 return "\x04\x4b\x74\x46\x5d"; case 142: // F11 return "\x04\x4b\x74\x46\x7b"; case 143: // F12 return "\x04\x4b\x74\x46\x7d"; case 144: // F13 return "\x04\x4b\x74\x46\x40"; case 145: // F14 return "\x04\x4b\x74\x46\x25"; case 146: // F15 return "\x04\x4b\x74\x46\x24"; case 147: // F16 return "\x04\x4b\x74\x46\x23"; case 148: // F17 return "\x05\x4b\x74\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x43\x43"; case 11: // MINUS return "\x04\x4b\x74\x43\x44"; case 12: // PERIOD return "\x04\x4b\x74\x43\x45"; case 13: // SLASH return "\x04\x4b\x74\x43\x46"; case 14: // 0 return "\x04\x4b\x74\x43\x47"; case 15: // 1 return "\x04\x4b\x74\x43\x48"; case 16: // 2 return "\x04\x4b\x74\x43\x49"; case 17: // 3 return "\x04\x4b\x74\x43\x4a"; case 18: // 4 return "\x04\x4b\x74\x43\x4b"; case 19: // 5 return "\x04\x4b\x74\x43\x4c"; case 20: // 6 return "\x04\x4b\x74\x43\x4d"; case 21: // 7 return "\x04\x4b\x74\x43\x4e"; case 22: // 8 return "\x04\x4b\x74\x43\x4f"; case 23: // 9 return "\x04\x4b\x74\x43\x50"; case 24: // COLON return "\x05\x4b\x74\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x43\x51"; case 26: // LESS return "\x05\x4b\x74\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x43\x52"; case 28: // GREATER return "\x05\x4b\x74\x43\x42\x75"; case 29: // AT return "\x05\x4b\x74\x43\x42\x76"; case 30: // A return "\x04\x4b\x74\x43\x53"; case 31: // B return "\x04\x4b\x74\x43\x54"; case 32: // C return "\x04\x4b\x74\x43\x55"; case 33: // D return "\x04\x4b\x74\x43\x56"; case 34: // E return "\x04\x4b\x74\x43\x57"; case 35: // F return "\x04\x4b\x74\x43\x58"; case 36: // G return "\x04\x4b\x74\x43\x59"; case 37: // H return "\x04\x4b\x74\x43\x5a"; case 38: // I return "\x04\x4b\x74\x43\x61"; case 39: // J return "\x04\x4b\x74\x43\x62"; case 40: // K return "\x04\x4b\x74\x43\x63"; case 41: // L return "\x04\x4b\x74\x43\x64"; case 42: // M return "\x04\x4b\x74\x43\x65"; case 43: // N return "\x04\x4b\x74\x43\x66"; case 44: // O return "\x04\x4b\x74\x43\x67"; case 45: // P return "\x04\x4b\x74\x43\x68"; case 46: // Q return "\x04\x4b\x74\x43\x69"; case 47: // R return "\x04\x4b\x74\x43\x6a"; case 48: // S return "\x04\x4b\x74\x43\x6b"; case 49: // T return "\x04\x4b\x74\x43\x6c"; case 50: // U return "\x04\x4b\x74\x43\x6d"; case 51: // V return "\x04\x4b\x74\x43\x6e"; case 52: // W return "\x04\x4b\x74\x43\x6f"; case 53: // X return "\x04\x4b\x74\x43\x70"; case 54: // Y return "\x04\x4b\x74\x43\x71"; case 55: // Z return "\x04\x4b\x74\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x43\x42\x30"; case 68: // AE return "\x05\x4b\x74\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x43\x79"; case 114: // ENTER return "\x04\x4b\x74\x43\x7a"; case 115: // TAB return "\x04\x4b\x74\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x43\x31"; case 117: // INSERT return "\x04\x4b\x74\x43\x32"; case 118: // DELETE return "\x04\x4b\x74\x43\x33"; case 119: // RIGHT return "\x04\x4b\x74\x43\x34"; case 120: // LEFT return "\x04\x4b\x74\x43\x35"; case 121: // DOWN return "\x04\x4b\x74\x43\x36"; case 122: // UP return "\x04\x4b\x74\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x43\x39"; case 125: // HOME return "\x04\x4b\x74\x43\x2e"; case 126: // END return "\x04\x4b\x74\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x43\x21"; case 132: // F1 return "\x04\x4b\x74\x43\x2f"; case 133: // F2 return "\x04\x4b\x74\x43\x2a"; case 134: // F3 return "\x04\x4b\x74\x43\x3f"; case 135: // F4 return "\x04\x4b\x74\x43\x26"; case 136: // F5 return "\x04\x4b\x74\x43\x3c"; case 137: // F6 return "\x04\x4b\x74\x43\x3e"; case 138: // F7 return "\x04\x4b\x74\x43\x28"; case 139: // F8 return "\x04\x4b\x74\x43\x29"; case 140: // F9 return "\x04\x4b\x74\x43\x5b"; case 141: // F10 return "\x04\x4b\x74\x43\x5d"; case 142: // F11 return "\x04\x4b\x74\x43\x7b"; case 143: // F12 return "\x04\x4b\x74\x43\x7d"; case 144: // F13 return "\x04\x4b\x74\x43\x40"; case 145: // F14 return "\x04\x4b\x74\x43\x25"; case 146: // F15 return "\x04\x4b\x74\x43\x24"; case 147: // F16 return "\x04\x4b\x74\x43\x23"; case 148: // F17 return "\x05\x4b\x74\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x44\x43"; case 11: // MINUS return "\x04\x4b\x74\x44\x44"; case 12: // PERIOD return "\x04\x4b\x74\x44\x45"; case 13: // SLASH return "\x04\x4b\x74\x44\x46"; case 14: // 0 return "\x04\x4b\x74\x44\x47"; case 15: // 1 return "\x04\x4b\x74\x44\x48"; case 16: // 2 return "\x04\x4b\x74\x44\x49"; case 17: // 3 return "\x04\x4b\x74\x44\x4a"; case 18: // 4 return "\x04\x4b\x74\x44\x4b"; case 19: // 5 return "\x04\x4b\x74\x44\x4c"; case 20: // 6 return "\x04\x4b\x74\x44\x4d"; case 21: // 7 return "\x04\x4b\x74\x44\x4e"; case 22: // 8 return "\x04\x4b\x74\x44\x4f"; case 23: // 9 return "\x04\x4b\x74\x44\x50"; case 24: // COLON return "\x05\x4b\x74\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x44\x51"; case 26: // LESS return "\x05\x4b\x74\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x44\x52"; case 28: // GREATER return "\x05\x4b\x74\x44\x42\x75"; case 29: // AT return "\x05\x4b\x74\x44\x42\x76"; case 30: // A return "\x04\x4b\x74\x44\x53"; case 31: // B return "\x04\x4b\x74\x44\x54"; case 32: // C return "\x04\x4b\x74\x44\x55"; case 33: // D return "\x04\x4b\x74\x44\x56"; case 34: // E return "\x04\x4b\x74\x44\x57"; case 35: // F return "\x04\x4b\x74\x44\x58"; case 36: // G return "\x04\x4b\x74\x44\x59"; case 37: // H return "\x04\x4b\x74\x44\x5a"; case 38: // I return "\x04\x4b\x74\x44\x61"; case 39: // J return "\x04\x4b\x74\x44\x62"; case 40: // K return "\x04\x4b\x74\x44\x63"; case 41: // L return "\x04\x4b\x74\x44\x64"; case 42: // M return "\x04\x4b\x74\x44\x65"; case 43: // N return "\x04\x4b\x74\x44\x66"; case 44: // O return "\x04\x4b\x74\x44\x67"; case 45: // P return "\x04\x4b\x74\x44\x68"; case 46: // Q return "\x04\x4b\x74\x44\x69"; case 47: // R return "\x04\x4b\x74\x44\x6a"; case 48: // S return "\x04\x4b\x74\x44\x6b"; case 49: // T return "\x04\x4b\x74\x44\x6c"; case 50: // U return "\x04\x4b\x74\x44\x6d"; case 51: // V return "\x04\x4b\x74\x44\x6e"; case 52: // W return "\x04\x4b\x74\x44\x6f"; case 53: // X return "\x04\x4b\x74\x44\x70"; case 54: // Y return "\x04\x4b\x74\x44\x71"; case 55: // Z return "\x04\x4b\x74\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x44\x42\x30"; case 68: // AE return "\x05\x4b\x74\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x44\x79"; case 114: // ENTER return "\x04\x4b\x74\x44\x7a"; case 115: // TAB return "\x04\x4b\x74\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x44\x31"; case 117: // INSERT return "\x04\x4b\x74\x44\x32"; case 118: // DELETE return "\x04\x4b\x74\x44\x33"; case 119: // RIGHT return "\x04\x4b\x74\x44\x34"; case 120: // LEFT return "\x04\x4b\x74\x44\x35"; case 121: // DOWN return "\x04\x4b\x74\x44\x36"; case 122: // UP return "\x04\x4b\x74\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x44\x39"; case 125: // HOME return "\x04\x4b\x74\x44\x2e"; case 126: // END return "\x04\x4b\x74\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x44\x21"; case 132: // F1 return "\x04\x4b\x74\x44\x2f"; case 133: // F2 return "\x04\x4b\x74\x44\x2a"; case 134: // F3 return "\x04\x4b\x74\x44\x3f"; case 135: // F4 return "\x04\x4b\x74\x44\x26"; case 136: // F5 return "\x04\x4b\x74\x44\x3c"; case 137: // F6 return "\x04\x4b\x74\x44\x3e"; case 138: // F7 return "\x04\x4b\x74\x44\x28"; case 139: // F8 return "\x04\x4b\x74\x44\x29"; case 140: // F9 return "\x04\x4b\x74\x44\x5b"; case 141: // F10 return "\x04\x4b\x74\x44\x5d"; case 142: // F11 return "\x04\x4b\x74\x44\x7b"; case 143: // F12 return "\x04\x4b\x74\x44\x7d"; case 144: // F13 return "\x04\x4b\x74\x44\x40"; case 145: // F14 return "\x04\x4b\x74\x44\x25"; case 146: // F15 return "\x04\x4b\x74\x44\x24"; case 147: // F16 return "\x04\x4b\x74\x44\x23"; case 148: // F17 return "\x05\x4b\x74\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x47\x43"; case 11: // MINUS return "\x04\x4b\x74\x47\x44"; case 12: // PERIOD return "\x04\x4b\x74\x47\x45"; case 13: // SLASH return "\x04\x4b\x74\x47\x46"; case 14: // 0 return "\x04\x4b\x74\x47\x47"; case 15: // 1 return "\x04\x4b\x74\x47\x48"; case 16: // 2 return "\x04\x4b\x74\x47\x49"; case 17: // 3 return "\x04\x4b\x74\x47\x4a"; case 18: // 4 return "\x04\x4b\x74\x47\x4b"; case 19: // 5 return "\x04\x4b\x74\x47\x4c"; case 20: // 6 return "\x04\x4b\x74\x47\x4d"; case 21: // 7 return "\x04\x4b\x74\x47\x4e"; case 22: // 8 return "\x04\x4b\x74\x47\x4f"; case 23: // 9 return "\x04\x4b\x74\x47\x50"; case 24: // COLON return "\x05\x4b\x74\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x47\x51"; case 26: // LESS return "\x05\x4b\x74\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x47\x52"; case 28: // GREATER return "\x05\x4b\x74\x47\x42\x75"; case 29: // AT return "\x05\x4b\x74\x47\x42\x76"; case 30: // A return "\x04\x4b\x74\x47\x53"; case 31: // B return "\x04\x4b\x74\x47\x54"; case 32: // C return "\x04\x4b\x74\x47\x55"; case 33: // D return "\x04\x4b\x74\x47\x56"; case 34: // E return "\x04\x4b\x74\x47\x57"; case 35: // F return "\x04\x4b\x74\x47\x58"; case 36: // G return "\x04\x4b\x74\x47\x59"; case 37: // H return "\x04\x4b\x74\x47\x5a"; case 38: // I return "\x04\x4b\x74\x47\x61"; case 39: // J return "\x04\x4b\x74\x47\x62"; case 40: // K return "\x04\x4b\x74\x47\x63"; case 41: // L return "\x04\x4b\x74\x47\x64"; case 42: // M return "\x04\x4b\x74\x47\x65"; case 43: // N return "\x04\x4b\x74\x47\x66"; case 44: // O return "\x04\x4b\x74\x47\x67"; case 45: // P return "\x04\x4b\x74\x47\x68"; case 46: // Q return "\x04\x4b\x74\x47\x69"; case 47: // R return "\x04\x4b\x74\x47\x6a"; case 48: // S return "\x04\x4b\x74\x47\x6b"; case 49: // T return "\x04\x4b\x74\x47\x6c"; case 50: // U return "\x04\x4b\x74\x47\x6d"; case 51: // V return "\x04\x4b\x74\x47\x6e"; case 52: // W return "\x04\x4b\x74\x47\x6f"; case 53: // X return "\x04\x4b\x74\x47\x70"; case 54: // Y return "\x04\x4b\x74\x47\x71"; case 55: // Z return "\x04\x4b\x74\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x47\x42\x30"; case 68: // AE return "\x05\x4b\x74\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x47\x79"; case 114: // ENTER return "\x04\x4b\x74\x47\x7a"; case 115: // TAB return "\x04\x4b\x74\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x47\x31"; case 117: // INSERT return "\x04\x4b\x74\x47\x32"; case 118: // DELETE return "\x04\x4b\x74\x47\x33"; case 119: // RIGHT return "\x04\x4b\x74\x47\x34"; case 120: // LEFT return "\x04\x4b\x74\x47\x35"; case 121: // DOWN return "\x04\x4b\x74\x47\x36"; case 122: // UP return "\x04\x4b\x74\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x47\x39"; case 125: // HOME return "\x04\x4b\x74\x47\x2e"; case 126: // END return "\x04\x4b\x74\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x47\x21"; case 132: // F1 return "\x04\x4b\x74\x47\x2f"; case 133: // F2 return "\x04\x4b\x74\x47\x2a"; case 134: // F3 return "\x04\x4b\x74\x47\x3f"; case 135: // F4 return "\x04\x4b\x74\x47\x26"; case 136: // F5 return "\x04\x4b\x74\x47\x3c"; case 137: // F6 return "\x04\x4b\x74\x47\x3e"; case 138: // F7 return "\x04\x4b\x74\x47\x28"; case 139: // F8 return "\x04\x4b\x74\x47\x29"; case 140: // F9 return "\x04\x4b\x74\x47\x5b"; case 141: // F10 return "\x04\x4b\x74\x47\x5d"; case 142: // F11 return "\x04\x4b\x74\x47\x7b"; case 143: // F12 return "\x04\x4b\x74\x47\x7d"; case 144: // F13 return "\x04\x4b\x74\x47\x40"; case 145: // F14 return "\x04\x4b\x74\x47\x25"; case 146: // F15 return "\x04\x4b\x74\x47\x24"; case 147: // F16 return "\x04\x4b\x74\x47\x23"; case 148: // F17 return "\x05\x4b\x74\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x48\x43"; case 11: // MINUS return "\x04\x4b\x74\x48\x44"; case 12: // PERIOD return "\x04\x4b\x74\x48\x45"; case 13: // SLASH return "\x04\x4b\x74\x48\x46"; case 14: // 0 return "\x04\x4b\x74\x48\x47"; case 15: // 1 return "\x04\x4b\x74\x48\x48"; case 16: // 2 return "\x04\x4b\x74\x48\x49"; case 17: // 3 return "\x04\x4b\x74\x48\x4a"; case 18: // 4 return "\x04\x4b\x74\x48\x4b"; case 19: // 5 return "\x04\x4b\x74\x48\x4c"; case 20: // 6 return "\x04\x4b\x74\x48\x4d"; case 21: // 7 return "\x04\x4b\x74\x48\x4e"; case 22: // 8 return "\x04\x4b\x74\x48\x4f"; case 23: // 9 return "\x04\x4b\x74\x48\x50"; case 24: // COLON return "\x05\x4b\x74\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x48\x51"; case 26: // LESS return "\x05\x4b\x74\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x48\x52"; case 28: // GREATER return "\x05\x4b\x74\x48\x42\x75"; case 29: // AT return "\x05\x4b\x74\x48\x42\x76"; case 30: // A return "\x04\x4b\x74\x48\x53"; case 31: // B return "\x04\x4b\x74\x48\x54"; case 32: // C return "\x04\x4b\x74\x48\x55"; case 33: // D return "\x04\x4b\x74\x48\x56"; case 34: // E return "\x04\x4b\x74\x48\x57"; case 35: // F return "\x04\x4b\x74\x48\x58"; case 36: // G return "\x04\x4b\x74\x48\x59"; case 37: // H return "\x04\x4b\x74\x48\x5a"; case 38: // I return "\x04\x4b\x74\x48\x61"; case 39: // J return "\x04\x4b\x74\x48\x62"; case 40: // K return "\x04\x4b\x74\x48\x63"; case 41: // L return "\x04\x4b\x74\x48\x64"; case 42: // M return "\x04\x4b\x74\x48\x65"; case 43: // N return "\x04\x4b\x74\x48\x66"; case 44: // O return "\x04\x4b\x74\x48\x67"; case 45: // P return "\x04\x4b\x74\x48\x68"; case 46: // Q return "\x04\x4b\x74\x48\x69"; case 47: // R return "\x04\x4b\x74\x48\x6a"; case 48: // S return "\x04\x4b\x74\x48\x6b"; case 49: // T return "\x04\x4b\x74\x48\x6c"; case 50: // U return "\x04\x4b\x74\x48\x6d"; case 51: // V return "\x04\x4b\x74\x48\x6e"; case 52: // W return "\x04\x4b\x74\x48\x6f"; case 53: // X return "\x04\x4b\x74\x48\x70"; case 54: // Y return "\x04\x4b\x74\x48\x71"; case 55: // Z return "\x04\x4b\x74\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x48\x42\x30"; case 68: // AE return "\x05\x4b\x74\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x48\x79"; case 114: // ENTER return "\x04\x4b\x74\x48\x7a"; case 115: // TAB return "\x04\x4b\x74\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x48\x31"; case 117: // INSERT return "\x04\x4b\x74\x48\x32"; case 118: // DELETE return "\x04\x4b\x74\x48\x33"; case 119: // RIGHT return "\x04\x4b\x74\x48\x34"; case 120: // LEFT return "\x04\x4b\x74\x48\x35"; case 121: // DOWN return "\x04\x4b\x74\x48\x36"; case 122: // UP return "\x04\x4b\x74\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x48\x39"; case 125: // HOME return "\x04\x4b\x74\x48\x2e"; case 126: // END return "\x04\x4b\x74\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x48\x21"; case 132: // F1 return "\x04\x4b\x74\x48\x2f"; case 133: // F2 return "\x04\x4b\x74\x48\x2a"; case 134: // F3 return "\x04\x4b\x74\x48\x3f"; case 135: // F4 return "\x04\x4b\x74\x48\x26"; case 136: // F5 return "\x04\x4b\x74\x48\x3c"; case 137: // F6 return "\x04\x4b\x74\x48\x3e"; case 138: // F7 return "\x04\x4b\x74\x48\x28"; case 139: // F8 return "\x04\x4b\x74\x48\x29"; case 140: // F9 return "\x04\x4b\x74\x48\x5b"; case 141: // F10 return "\x04\x4b\x74\x48\x5d"; case 142: // F11 return "\x04\x4b\x74\x48\x7b"; case 143: // F12 return "\x04\x4b\x74\x48\x7d"; case 144: // F13 return "\x04\x4b\x74\x48\x40"; case 145: // F14 return "\x04\x4b\x74\x48\x25"; case 146: // F15 return "\x04\x4b\x74\x48\x24"; case 147: // F16 return "\x04\x4b\x74\x48\x23"; case 148: // F17 return "\x05\x4b\x74\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x49\x43"; case 11: // MINUS return "\x04\x4b\x74\x49\x44"; case 12: // PERIOD return "\x04\x4b\x74\x49\x45"; case 13: // SLASH return "\x04\x4b\x74\x49\x46"; case 14: // 0 return "\x04\x4b\x74\x49\x47"; case 15: // 1 return "\x04\x4b\x74\x49\x48"; case 16: // 2 return "\x04\x4b\x74\x49\x49"; case 17: // 3 return "\x04\x4b\x74\x49\x4a"; case 18: // 4 return "\x04\x4b\x74\x49\x4b"; case 19: // 5 return "\x04\x4b\x74\x49\x4c"; case 20: // 6 return "\x04\x4b\x74\x49\x4d"; case 21: // 7 return "\x04\x4b\x74\x49\x4e"; case 22: // 8 return "\x04\x4b\x74\x49\x4f"; case 23: // 9 return "\x04\x4b\x74\x49\x50"; case 24: // COLON return "\x05\x4b\x74\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x49\x51"; case 26: // LESS return "\x05\x4b\x74\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x49\x52"; case 28: // GREATER return "\x05\x4b\x74\x49\x42\x75"; case 29: // AT return "\x05\x4b\x74\x49\x42\x76"; case 30: // A return "\x04\x4b\x74\x49\x53"; case 31: // B return "\x04\x4b\x74\x49\x54"; case 32: // C return "\x04\x4b\x74\x49\x55"; case 33: // D return "\x04\x4b\x74\x49\x56"; case 34: // E return "\x04\x4b\x74\x49\x57"; case 35: // F return "\x04\x4b\x74\x49\x58"; case 36: // G return "\x04\x4b\x74\x49\x59"; case 37: // H return "\x04\x4b\x74\x49\x5a"; case 38: // I return "\x04\x4b\x74\x49\x61"; case 39: // J return "\x04\x4b\x74\x49\x62"; case 40: // K return "\x04\x4b\x74\x49\x63"; case 41: // L return "\x04\x4b\x74\x49\x64"; case 42: // M return "\x04\x4b\x74\x49\x65"; case 43: // N return "\x04\x4b\x74\x49\x66"; case 44: // O return "\x04\x4b\x74\x49\x67"; case 45: // P return "\x04\x4b\x74\x49\x68"; case 46: // Q return "\x04\x4b\x74\x49\x69"; case 47: // R return "\x04\x4b\x74\x49\x6a"; case 48: // S return "\x04\x4b\x74\x49\x6b"; case 49: // T return "\x04\x4b\x74\x49\x6c"; case 50: // U return "\x04\x4b\x74\x49\x6d"; case 51: // V return "\x04\x4b\x74\x49\x6e"; case 52: // W return "\x04\x4b\x74\x49\x6f"; case 53: // X return "\x04\x4b\x74\x49\x70"; case 54: // Y return "\x04\x4b\x74\x49\x71"; case 55: // Z return "\x04\x4b\x74\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x49\x42\x30"; case 68: // AE return "\x05\x4b\x74\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x49\x79"; case 114: // ENTER return "\x04\x4b\x74\x49\x7a"; case 115: // TAB return "\x04\x4b\x74\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x49\x31"; case 117: // INSERT return "\x04\x4b\x74\x49\x32"; case 118: // DELETE return "\x04\x4b\x74\x49\x33"; case 119: // RIGHT return "\x04\x4b\x74\x49\x34"; case 120: // LEFT return "\x04\x4b\x74\x49\x35"; case 121: // DOWN return "\x04\x4b\x74\x49\x36"; case 122: // UP return "\x04\x4b\x74\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x49\x39"; case 125: // HOME return "\x04\x4b\x74\x49\x2e"; case 126: // END return "\x04\x4b\x74\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x49\x21"; case 132: // F1 return "\x04\x4b\x74\x49\x2f"; case 133: // F2 return "\x04\x4b\x74\x49\x2a"; case 134: // F3 return "\x04\x4b\x74\x49\x3f"; case 135: // F4 return "\x04\x4b\x74\x49\x26"; case 136: // F5 return "\x04\x4b\x74\x49\x3c"; case 137: // F6 return "\x04\x4b\x74\x49\x3e"; case 138: // F7 return "\x04\x4b\x74\x49\x28"; case 139: // F8 return "\x04\x4b\x74\x49\x29"; case 140: // F9 return "\x04\x4b\x74\x49\x5b"; case 141: // F10 return "\x04\x4b\x74\x49\x5d"; case 142: // F11 return "\x04\x4b\x74\x49\x7b"; case 143: // F12 return "\x04\x4b\x74\x49\x7d"; case 144: // F13 return "\x04\x4b\x74\x49\x40"; case 145: // F14 return "\x04\x4b\x74\x49\x25"; case 146: // F15 return "\x04\x4b\x74\x49\x24"; case 147: // F16 return "\x04\x4b\x74\x49\x23"; case 148: // F17 return "\x05\x4b\x74\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4a\x43"; case 11: // MINUS return "\x04\x4b\x74\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4a\x45"; case 13: // SLASH return "\x04\x4b\x74\x4a\x46"; case 14: // 0 return "\x04\x4b\x74\x4a\x47"; case 15: // 1 return "\x04\x4b\x74\x4a\x48"; case 16: // 2 return "\x04\x4b\x74\x4a\x49"; case 17: // 3 return "\x04\x4b\x74\x4a\x4a"; case 18: // 4 return "\x04\x4b\x74\x4a\x4b"; case 19: // 5 return "\x04\x4b\x74\x4a\x4c"; case 20: // 6 return "\x04\x4b\x74\x4a\x4d"; case 21: // 7 return "\x04\x4b\x74\x4a\x4e"; case 22: // 8 return "\x04\x4b\x74\x4a\x4f"; case 23: // 9 return "\x04\x4b\x74\x4a\x50"; case 24: // COLON return "\x05\x4b\x74\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4a\x51"; case 26: // LESS return "\x05\x4b\x74\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4a\x52"; case 28: // GREATER return "\x05\x4b\x74\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4a\x42\x76"; case 30: // A return "\x04\x4b\x74\x4a\x53"; case 31: // B return "\x04\x4b\x74\x4a\x54"; case 32: // C return "\x04\x4b\x74\x4a\x55"; case 33: // D return "\x04\x4b\x74\x4a\x56"; case 34: // E return "\x04\x4b\x74\x4a\x57"; case 35: // F return "\x04\x4b\x74\x4a\x58"; case 36: // G return "\x04\x4b\x74\x4a\x59"; case 37: // H return "\x04\x4b\x74\x4a\x5a"; case 38: // I return "\x04\x4b\x74\x4a\x61"; case 39: // J return "\x04\x4b\x74\x4a\x62"; case 40: // K return "\x04\x4b\x74\x4a\x63"; case 41: // L return "\x04\x4b\x74\x4a\x64"; case 42: // M return "\x04\x4b\x74\x4a\x65"; case 43: // N return "\x04\x4b\x74\x4a\x66"; case 44: // O return "\x04\x4b\x74\x4a\x67"; case 45: // P return "\x04\x4b\x74\x4a\x68"; case 46: // Q return "\x04\x4b\x74\x4a\x69"; case 47: // R return "\x04\x4b\x74\x4a\x6a"; case 48: // S return "\x04\x4b\x74\x4a\x6b"; case 49: // T return "\x04\x4b\x74\x4a\x6c"; case 50: // U return "\x04\x4b\x74\x4a\x6d"; case 51: // V return "\x04\x4b\x74\x4a\x6e"; case 52: // W return "\x04\x4b\x74\x4a\x6f"; case 53: // X return "\x04\x4b\x74\x4a\x70"; case 54: // Y return "\x04\x4b\x74\x4a\x71"; case 55: // Z return "\x04\x4b\x74\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4a\x79"; case 114: // ENTER return "\x04\x4b\x74\x4a\x7a"; case 115: // TAB return "\x04\x4b\x74\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4a\x31"; case 117: // INSERT return "\x04\x4b\x74\x4a\x32"; case 118: // DELETE return "\x04\x4b\x74\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4a\x34"; case 120: // LEFT return "\x04\x4b\x74\x4a\x35"; case 121: // DOWN return "\x04\x4b\x74\x4a\x36"; case 122: // UP return "\x04\x4b\x74\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4a\x39"; case 125: // HOME return "\x04\x4b\x74\x4a\x2e"; case 126: // END return "\x04\x4b\x74\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4a\x21"; case 132: // F1 return "\x04\x4b\x74\x4a\x2f"; case 133: // F2 return "\x04\x4b\x74\x4a\x2a"; case 134: // F3 return "\x04\x4b\x74\x4a\x3f"; case 135: // F4 return "\x04\x4b\x74\x4a\x26"; case 136: // F5 return "\x04\x4b\x74\x4a\x3c"; case 137: // F6 return "\x04\x4b\x74\x4a\x3e"; case 138: // F7 return "\x04\x4b\x74\x4a\x28"; case 139: // F8 return "\x04\x4b\x74\x4a\x29"; case 140: // F9 return "\x04\x4b\x74\x4a\x5b"; case 141: // F10 return "\x04\x4b\x74\x4a\x5d"; case 142: // F11 return "\x04\x4b\x74\x4a\x7b"; case 143: // F12 return "\x04\x4b\x74\x4a\x7d"; case 144: // F13 return "\x04\x4b\x74\x4a\x40"; case 145: // F14 return "\x04\x4b\x74\x4a\x25"; case 146: // F15 return "\x04\x4b\x74\x4a\x24"; case 147: // F16 return "\x04\x4b\x74\x4a\x23"; case 148: // F17 return "\x05\x4b\x74\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4d\x43"; case 11: // MINUS return "\x04\x4b\x74\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4d\x45"; case 13: // SLASH return "\x04\x4b\x74\x4d\x46"; case 14: // 0 return "\x04\x4b\x74\x4d\x47"; case 15: // 1 return "\x04\x4b\x74\x4d\x48"; case 16: // 2 return "\x04\x4b\x74\x4d\x49"; case 17: // 3 return "\x04\x4b\x74\x4d\x4a"; case 18: // 4 return "\x04\x4b\x74\x4d\x4b"; case 19: // 5 return "\x04\x4b\x74\x4d\x4c"; case 20: // 6 return "\x04\x4b\x74\x4d\x4d"; case 21: // 7 return "\x04\x4b\x74\x4d\x4e"; case 22: // 8 return "\x04\x4b\x74\x4d\x4f"; case 23: // 9 return "\x04\x4b\x74\x4d\x50"; case 24: // COLON return "\x05\x4b\x74\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4d\x51"; case 26: // LESS return "\x05\x4b\x74\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4d\x52"; case 28: // GREATER return "\x05\x4b\x74\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4d\x42\x76"; case 30: // A return "\x04\x4b\x74\x4d\x53"; case 31: // B return "\x04\x4b\x74\x4d\x54"; case 32: // C return "\x04\x4b\x74\x4d\x55"; case 33: // D return "\x04\x4b\x74\x4d\x56"; case 34: // E return "\x04\x4b\x74\x4d\x57"; case 35: // F return "\x04\x4b\x74\x4d\x58"; case 36: // G return "\x04\x4b\x74\x4d\x59"; case 37: // H return "\x04\x4b\x74\x4d\x5a"; case 38: // I return "\x04\x4b\x74\x4d\x61"; case 39: // J return "\x04\x4b\x74\x4d\x62"; case 40: // K return "\x04\x4b\x74\x4d\x63"; case 41: // L return "\x04\x4b\x74\x4d\x64"; case 42: // M return "\x04\x4b\x74\x4d\x65"; case 43: // N return "\x04\x4b\x74\x4d\x66"; case 44: // O return "\x04\x4b\x74\x4d\x67"; case 45: // P return "\x04\x4b\x74\x4d\x68"; case 46: // Q return "\x04\x4b\x74\x4d\x69"; case 47: // R return "\x04\x4b\x74\x4d\x6a"; case 48: // S return "\x04\x4b\x74\x4d\x6b"; case 49: // T return "\x04\x4b\x74\x4d\x6c"; case 50: // U return "\x04\x4b\x74\x4d\x6d"; case 51: // V return "\x04\x4b\x74\x4d\x6e"; case 52: // W return "\x04\x4b\x74\x4d\x6f"; case 53: // X return "\x04\x4b\x74\x4d\x70"; case 54: // Y return "\x04\x4b\x74\x4d\x71"; case 55: // Z return "\x04\x4b\x74\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4d\x79"; case 114: // ENTER return "\x04\x4b\x74\x4d\x7a"; case 115: // TAB return "\x04\x4b\x74\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4d\x31"; case 117: // INSERT return "\x04\x4b\x74\x4d\x32"; case 118: // DELETE return "\x04\x4b\x74\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4d\x34"; case 120: // LEFT return "\x04\x4b\x74\x4d\x35"; case 121: // DOWN return "\x04\x4b\x74\x4d\x36"; case 122: // UP return "\x04\x4b\x74\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4d\x39"; case 125: // HOME return "\x04\x4b\x74\x4d\x2e"; case 126: // END return "\x04\x4b\x74\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4d\x21"; case 132: // F1 return "\x04\x4b\x74\x4d\x2f"; case 133: // F2 return "\x04\x4b\x74\x4d\x2a"; case 134: // F3 return "\x04\x4b\x74\x4d\x3f"; case 135: // F4 return "\x04\x4b\x74\x4d\x26"; case 136: // F5 return "\x04\x4b\x74\x4d\x3c"; case 137: // F6 return "\x04\x4b\x74\x4d\x3e"; case 138: // F7 return "\x04\x4b\x74\x4d\x28"; case 139: // F8 return "\x04\x4b\x74\x4d\x29"; case 140: // F9 return "\x04\x4b\x74\x4d\x5b"; case 141: // F10 return "\x04\x4b\x74\x4d\x5d"; case 142: // F11 return "\x04\x4b\x74\x4d\x7b"; case 143: // F12 return "\x04\x4b\x74\x4d\x7d"; case 144: // F13 return "\x04\x4b\x74\x4d\x40"; case 145: // F14 return "\x04\x4b\x74\x4d\x25"; case 146: // F15 return "\x04\x4b\x74\x4d\x24"; case 147: // F16 return "\x04\x4b\x74\x4d\x23"; case 148: // F17 return "\x05\x4b\x74\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4e\x43"; case 11: // MINUS return "\x04\x4b\x74\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4e\x45"; case 13: // SLASH return "\x04\x4b\x74\x4e\x46"; case 14: // 0 return "\x04\x4b\x74\x4e\x47"; case 15: // 1 return "\x04\x4b\x74\x4e\x48"; case 16: // 2 return "\x04\x4b\x74\x4e\x49"; case 17: // 3 return "\x04\x4b\x74\x4e\x4a"; case 18: // 4 return "\x04\x4b\x74\x4e\x4b"; case 19: // 5 return "\x04\x4b\x74\x4e\x4c"; case 20: // 6 return "\x04\x4b\x74\x4e\x4d"; case 21: // 7 return "\x04\x4b\x74\x4e\x4e"; case 22: // 8 return "\x04\x4b\x74\x4e\x4f"; case 23: // 9 return "\x04\x4b\x74\x4e\x50"; case 24: // COLON return "\x05\x4b\x74\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4e\x51"; case 26: // LESS return "\x05\x4b\x74\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4e\x52"; case 28: // GREATER return "\x05\x4b\x74\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4e\x42\x76"; case 30: // A return "\x04\x4b\x74\x4e\x53"; case 31: // B return "\x04\x4b\x74\x4e\x54"; case 32: // C return "\x04\x4b\x74\x4e\x55"; case 33: // D return "\x04\x4b\x74\x4e\x56"; case 34: // E return "\x04\x4b\x74\x4e\x57"; case 35: // F return "\x04\x4b\x74\x4e\x58"; case 36: // G return "\x04\x4b\x74\x4e\x59"; case 37: // H return "\x04\x4b\x74\x4e\x5a"; case 38: // I return "\x04\x4b\x74\x4e\x61"; case 39: // J return "\x04\x4b\x74\x4e\x62"; case 40: // K return "\x04\x4b\x74\x4e\x63"; case 41: // L return "\x04\x4b\x74\x4e\x64"; case 42: // M return "\x04\x4b\x74\x4e\x65"; case 43: // N return "\x04\x4b\x74\x4e\x66"; case 44: // O return "\x04\x4b\x74\x4e\x67"; case 45: // P return "\x04\x4b\x74\x4e\x68"; case 46: // Q return "\x04\x4b\x74\x4e\x69"; case 47: // R return "\x04\x4b\x74\x4e\x6a"; case 48: // S return "\x04\x4b\x74\x4e\x6b"; case 49: // T return "\x04\x4b\x74\x4e\x6c"; case 50: // U return "\x04\x4b\x74\x4e\x6d"; case 51: // V return "\x04\x4b\x74\x4e\x6e"; case 52: // W return "\x04\x4b\x74\x4e\x6f"; case 53: // X return "\x04\x4b\x74\x4e\x70"; case 54: // Y return "\x04\x4b\x74\x4e\x71"; case 55: // Z return "\x04\x4b\x74\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4e\x79"; case 114: // ENTER return "\x04\x4b\x74\x4e\x7a"; case 115: // TAB return "\x04\x4b\x74\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4e\x31"; case 117: // INSERT return "\x04\x4b\x74\x4e\x32"; case 118: // DELETE return "\x04\x4b\x74\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4e\x34"; case 120: // LEFT return "\x04\x4b\x74\x4e\x35"; case 121: // DOWN return "\x04\x4b\x74\x4e\x36"; case 122: // UP return "\x04\x4b\x74\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4e\x39"; case 125: // HOME return "\x04\x4b\x74\x4e\x2e"; case 126: // END return "\x04\x4b\x74\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4e\x21"; case 132: // F1 return "\x04\x4b\x74\x4e\x2f"; case 133: // F2 return "\x04\x4b\x74\x4e\x2a"; case 134: // F3 return "\x04\x4b\x74\x4e\x3f"; case 135: // F4 return "\x04\x4b\x74\x4e\x26"; case 136: // F5 return "\x04\x4b\x74\x4e\x3c"; case 137: // F6 return "\x04\x4b\x74\x4e\x3e"; case 138: // F7 return "\x04\x4b\x74\x4e\x28"; case 139: // F8 return "\x04\x4b\x74\x4e\x29"; case 140: // F9 return "\x04\x4b\x74\x4e\x5b"; case 141: // F10 return "\x04\x4b\x74\x4e\x5d"; case 142: // F11 return "\x04\x4b\x74\x4e\x7b"; case 143: // F12 return "\x04\x4b\x74\x4e\x7d"; case 144: // F13 return "\x04\x4b\x74\x4e\x40"; case 145: // F14 return "\x04\x4b\x74\x4e\x25"; case 146: // F15 return "\x04\x4b\x74\x4e\x24"; case 147: // F16 return "\x04\x4b\x74\x4e\x23"; case 148: // F17 return "\x05\x4b\x74\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4b\x43"; case 11: // MINUS return "\x04\x4b\x74\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4b\x45"; case 13: // SLASH return "\x04\x4b\x74\x4b\x46"; case 14: // 0 return "\x04\x4b\x74\x4b\x47"; case 15: // 1 return "\x04\x4b\x74\x4b\x48"; case 16: // 2 return "\x04\x4b\x74\x4b\x49"; case 17: // 3 return "\x04\x4b\x74\x4b\x4a"; case 18: // 4 return "\x04\x4b\x74\x4b\x4b"; case 19: // 5 return "\x04\x4b\x74\x4b\x4c"; case 20: // 6 return "\x04\x4b\x74\x4b\x4d"; case 21: // 7 return "\x04\x4b\x74\x4b\x4e"; case 22: // 8 return "\x04\x4b\x74\x4b\x4f"; case 23: // 9 return "\x04\x4b\x74\x4b\x50"; case 24: // COLON return "\x05\x4b\x74\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4b\x51"; case 26: // LESS return "\x05\x4b\x74\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4b\x52"; case 28: // GREATER return "\x05\x4b\x74\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4b\x42\x76"; case 30: // A return "\x04\x4b\x74\x4b\x53"; case 31: // B return "\x04\x4b\x74\x4b\x54"; case 32: // C return "\x04\x4b\x74\x4b\x55"; case 33: // D return "\x04\x4b\x74\x4b\x56"; case 34: // E return "\x04\x4b\x74\x4b\x57"; case 35: // F return "\x04\x4b\x74\x4b\x58"; case 36: // G return "\x04\x4b\x74\x4b\x59"; case 37: // H return "\x04\x4b\x74\x4b\x5a"; case 38: // I return "\x04\x4b\x74\x4b\x61"; case 39: // J return "\x04\x4b\x74\x4b\x62"; case 40: // K return "\x04\x4b\x74\x4b\x63"; case 41: // L return "\x04\x4b\x74\x4b\x64"; case 42: // M return "\x04\x4b\x74\x4b\x65"; case 43: // N return "\x04\x4b\x74\x4b\x66"; case 44: // O return "\x04\x4b\x74\x4b\x67"; case 45: // P return "\x04\x4b\x74\x4b\x68"; case 46: // Q return "\x04\x4b\x74\x4b\x69"; case 47: // R return "\x04\x4b\x74\x4b\x6a"; case 48: // S return "\x04\x4b\x74\x4b\x6b"; case 49: // T return "\x04\x4b\x74\x4b\x6c"; case 50: // U return "\x04\x4b\x74\x4b\x6d"; case 51: // V return "\x04\x4b\x74\x4b\x6e"; case 52: // W return "\x04\x4b\x74\x4b\x6f"; case 53: // X return "\x04\x4b\x74\x4b\x70"; case 54: // Y return "\x04\x4b\x74\x4b\x71"; case 55: // Z return "\x04\x4b\x74\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4b\x79"; case 114: // ENTER return "\x04\x4b\x74\x4b\x7a"; case 115: // TAB return "\x04\x4b\x74\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4b\x31"; case 117: // INSERT return "\x04\x4b\x74\x4b\x32"; case 118: // DELETE return "\x04\x4b\x74\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4b\x34"; case 120: // LEFT return "\x04\x4b\x74\x4b\x35"; case 121: // DOWN return "\x04\x4b\x74\x4b\x36"; case 122: // UP return "\x04\x4b\x74\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4b\x39"; case 125: // HOME return "\x04\x4b\x74\x4b\x2e"; case 126: // END return "\x04\x4b\x74\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4b\x21"; case 132: // F1 return "\x04\x4b\x74\x4b\x2f"; case 133: // F2 return "\x04\x4b\x74\x4b\x2a"; case 134: // F3 return "\x04\x4b\x74\x4b\x3f"; case 135: // F4 return "\x04\x4b\x74\x4b\x26"; case 136: // F5 return "\x04\x4b\x74\x4b\x3c"; case 137: // F6 return "\x04\x4b\x74\x4b\x3e"; case 138: // F7 return "\x04\x4b\x74\x4b\x28"; case 139: // F8 return "\x04\x4b\x74\x4b\x29"; case 140: // F9 return "\x04\x4b\x74\x4b\x5b"; case 141: // F10 return "\x04\x4b\x74\x4b\x5d"; case 142: // F11 return "\x04\x4b\x74\x4b\x7b"; case 143: // F12 return "\x04\x4b\x74\x4b\x7d"; case 144: // F13 return "\x04\x4b\x74\x4b\x40"; case 145: // F14 return "\x04\x4b\x74\x4b\x25"; case 146: // F15 return "\x04\x4b\x74\x4b\x24"; case 147: // F16 return "\x04\x4b\x74\x4b\x23"; case 148: // F17 return "\x05\x4b\x74\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4c\x43"; case 11: // MINUS return "\x04\x4b\x74\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4c\x45"; case 13: // SLASH return "\x04\x4b\x74\x4c\x46"; case 14: // 0 return "\x04\x4b\x74\x4c\x47"; case 15: // 1 return "\x04\x4b\x74\x4c\x48"; case 16: // 2 return "\x04\x4b\x74\x4c\x49"; case 17: // 3 return "\x04\x4b\x74\x4c\x4a"; case 18: // 4 return "\x04\x4b\x74\x4c\x4b"; case 19: // 5 return "\x04\x4b\x74\x4c\x4c"; case 20: // 6 return "\x04\x4b\x74\x4c\x4d"; case 21: // 7 return "\x04\x4b\x74\x4c\x4e"; case 22: // 8 return "\x04\x4b\x74\x4c\x4f"; case 23: // 9 return "\x04\x4b\x74\x4c\x50"; case 24: // COLON return "\x05\x4b\x74\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4c\x51"; case 26: // LESS return "\x05\x4b\x74\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4c\x52"; case 28: // GREATER return "\x05\x4b\x74\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4c\x42\x76"; case 30: // A return "\x04\x4b\x74\x4c\x53"; case 31: // B return "\x04\x4b\x74\x4c\x54"; case 32: // C return "\x04\x4b\x74\x4c\x55"; case 33: // D return "\x04\x4b\x74\x4c\x56"; case 34: // E return "\x04\x4b\x74\x4c\x57"; case 35: // F return "\x04\x4b\x74\x4c\x58"; case 36: // G return "\x04\x4b\x74\x4c\x59"; case 37: // H return "\x04\x4b\x74\x4c\x5a"; case 38: // I return "\x04\x4b\x74\x4c\x61"; case 39: // J return "\x04\x4b\x74\x4c\x62"; case 40: // K return "\x04\x4b\x74\x4c\x63"; case 41: // L return "\x04\x4b\x74\x4c\x64"; case 42: // M return "\x04\x4b\x74\x4c\x65"; case 43: // N return "\x04\x4b\x74\x4c\x66"; case 44: // O return "\x04\x4b\x74\x4c\x67"; case 45: // P return "\x04\x4b\x74\x4c\x68"; case 46: // Q return "\x04\x4b\x74\x4c\x69"; case 47: // R return "\x04\x4b\x74\x4c\x6a"; case 48: // S return "\x04\x4b\x74\x4c\x6b"; case 49: // T return "\x04\x4b\x74\x4c\x6c"; case 50: // U return "\x04\x4b\x74\x4c\x6d"; case 51: // V return "\x04\x4b\x74\x4c\x6e"; case 52: // W return "\x04\x4b\x74\x4c\x6f"; case 53: // X return "\x04\x4b\x74\x4c\x70"; case 54: // Y return "\x04\x4b\x74\x4c\x71"; case 55: // Z return "\x04\x4b\x74\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4c\x79"; case 114: // ENTER return "\x04\x4b\x74\x4c\x7a"; case 115: // TAB return "\x04\x4b\x74\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4c\x31"; case 117: // INSERT return "\x04\x4b\x74\x4c\x32"; case 118: // DELETE return "\x04\x4b\x74\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4c\x34"; case 120: // LEFT return "\x04\x4b\x74\x4c\x35"; case 121: // DOWN return "\x04\x4b\x74\x4c\x36"; case 122: // UP return "\x04\x4b\x74\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4c\x39"; case 125: // HOME return "\x04\x4b\x74\x4c\x2e"; case 126: // END return "\x04\x4b\x74\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4c\x21"; case 132: // F1 return "\x04\x4b\x74\x4c\x2f"; case 133: // F2 return "\x04\x4b\x74\x4c\x2a"; case 134: // F3 return "\x04\x4b\x74\x4c\x3f"; case 135: // F4 return "\x04\x4b\x74\x4c\x26"; case 136: // F5 return "\x04\x4b\x74\x4c\x3c"; case 137: // F6 return "\x04\x4b\x74\x4c\x3e"; case 138: // F7 return "\x04\x4b\x74\x4c\x28"; case 139: // F8 return "\x04\x4b\x74\x4c\x29"; case 140: // F9 return "\x04\x4b\x74\x4c\x5b"; case 141: // F10 return "\x04\x4b\x74\x4c\x5d"; case 142: // F11 return "\x04\x4b\x74\x4c\x7b"; case 143: // F12 return "\x04\x4b\x74\x4c\x7d"; case 144: // F13 return "\x04\x4b\x74\x4c\x40"; case 145: // F14 return "\x04\x4b\x74\x4c\x25"; case 146: // F15 return "\x04\x4b\x74\x4c\x24"; case 147: // F16 return "\x04\x4b\x74\x4c\x23"; case 148: // F17 return "\x05\x4b\x74\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4f\x43"; case 11: // MINUS return "\x04\x4b\x74\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4f\x45"; case 13: // SLASH return "\x04\x4b\x74\x4f\x46"; case 14: // 0 return "\x04\x4b\x74\x4f\x47"; case 15: // 1 return "\x04\x4b\x74\x4f\x48"; case 16: // 2 return "\x04\x4b\x74\x4f\x49"; case 17: // 3 return "\x04\x4b\x74\x4f\x4a"; case 18: // 4 return "\x04\x4b\x74\x4f\x4b"; case 19: // 5 return "\x04\x4b\x74\x4f\x4c"; case 20: // 6 return "\x04\x4b\x74\x4f\x4d"; case 21: // 7 return "\x04\x4b\x74\x4f\x4e"; case 22: // 8 return "\x04\x4b\x74\x4f\x4f"; case 23: // 9 return "\x04\x4b\x74\x4f\x50"; case 24: // COLON return "\x05\x4b\x74\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4f\x51"; case 26: // LESS return "\x05\x4b\x74\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4f\x52"; case 28: // GREATER return "\x05\x4b\x74\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4f\x42\x76"; case 30: // A return "\x04\x4b\x74\x4f\x53"; case 31: // B return "\x04\x4b\x74\x4f\x54"; case 32: // C return "\x04\x4b\x74\x4f\x55"; case 33: // D return "\x04\x4b\x74\x4f\x56"; case 34: // E return "\x04\x4b\x74\x4f\x57"; case 35: // F return "\x04\x4b\x74\x4f\x58"; case 36: // G return "\x04\x4b\x74\x4f\x59"; case 37: // H return "\x04\x4b\x74\x4f\x5a"; case 38: // I return "\x04\x4b\x74\x4f\x61"; case 39: // J return "\x04\x4b\x74\x4f\x62"; case 40: // K return "\x04\x4b\x74\x4f\x63"; case 41: // L return "\x04\x4b\x74\x4f\x64"; case 42: // M return "\x04\x4b\x74\x4f\x65"; case 43: // N return "\x04\x4b\x74\x4f\x66"; case 44: // O return "\x04\x4b\x74\x4f\x67"; case 45: // P return "\x04\x4b\x74\x4f\x68"; case 46: // Q return "\x04\x4b\x74\x4f\x69"; case 47: // R return "\x04\x4b\x74\x4f\x6a"; case 48: // S return "\x04\x4b\x74\x4f\x6b"; case 49: // T return "\x04\x4b\x74\x4f\x6c"; case 50: // U return "\x04\x4b\x74\x4f\x6d"; case 51: // V return "\x04\x4b\x74\x4f\x6e"; case 52: // W return "\x04\x4b\x74\x4f\x6f"; case 53: // X return "\x04\x4b\x74\x4f\x70"; case 54: // Y return "\x04\x4b\x74\x4f\x71"; case 55: // Z return "\x04\x4b\x74\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4f\x79"; case 114: // ENTER return "\x04\x4b\x74\x4f\x7a"; case 115: // TAB return "\x04\x4b\x74\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4f\x31"; case 117: // INSERT return "\x04\x4b\x74\x4f\x32"; case 118: // DELETE return "\x04\x4b\x74\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4f\x34"; case 120: // LEFT return "\x04\x4b\x74\x4f\x35"; case 121: // DOWN return "\x04\x4b\x74\x4f\x36"; case 122: // UP return "\x04\x4b\x74\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4f\x39"; case 125: // HOME return "\x04\x4b\x74\x4f\x2e"; case 126: // END return "\x04\x4b\x74\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4f\x21"; case 132: // F1 return "\x04\x4b\x74\x4f\x2f"; case 133: // F2 return "\x04\x4b\x74\x4f\x2a"; case 134: // F3 return "\x04\x4b\x74\x4f\x3f"; case 135: // F4 return "\x04\x4b\x74\x4f\x26"; case 136: // F5 return "\x04\x4b\x74\x4f\x3c"; case 137: // F6 return "\x04\x4b\x74\x4f\x3e"; case 138: // F7 return "\x04\x4b\x74\x4f\x28"; case 139: // F8 return "\x04\x4b\x74\x4f\x29"; case 140: // F9 return "\x04\x4b\x74\x4f\x5b"; case 141: // F10 return "\x04\x4b\x74\x4f\x5d"; case 142: // F11 return "\x04\x4b\x74\x4f\x7b"; case 143: // F12 return "\x04\x4b\x74\x4f\x7d"; case 144: // F13 return "\x04\x4b\x74\x4f\x40"; case 145: // F14 return "\x04\x4b\x74\x4f\x25"; case 146: // F15 return "\x04\x4b\x74\x4f\x24"; case 147: // F16 return "\x04\x4b\x74\x4f\x23"; case 148: // F17 return "\x05\x4b\x74\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x50\x43"; case 11: // MINUS return "\x04\x4b\x74\x50\x44"; case 12: // PERIOD return "\x04\x4b\x74\x50\x45"; case 13: // SLASH return "\x04\x4b\x74\x50\x46"; case 14: // 0 return "\x04\x4b\x74\x50\x47"; case 15: // 1 return "\x04\x4b\x74\x50\x48"; case 16: // 2 return "\x04\x4b\x74\x50\x49"; case 17: // 3 return "\x04\x4b\x74\x50\x4a"; case 18: // 4 return "\x04\x4b\x74\x50\x4b"; case 19: // 5 return "\x04\x4b\x74\x50\x4c"; case 20: // 6 return "\x04\x4b\x74\x50\x4d"; case 21: // 7 return "\x04\x4b\x74\x50\x4e"; case 22: // 8 return "\x04\x4b\x74\x50\x4f"; case 23: // 9 return "\x04\x4b\x74\x50\x50"; case 24: // COLON return "\x05\x4b\x74\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x50\x51"; case 26: // LESS return "\x05\x4b\x74\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x50\x52"; case 28: // GREATER return "\x05\x4b\x74\x50\x42\x75"; case 29: // AT return "\x05\x4b\x74\x50\x42\x76"; case 30: // A return "\x04\x4b\x74\x50\x53"; case 31: // B return "\x04\x4b\x74\x50\x54"; case 32: // C return "\x04\x4b\x74\x50\x55"; case 33: // D return "\x04\x4b\x74\x50\x56"; case 34: // E return "\x04\x4b\x74\x50\x57"; case 35: // F return "\x04\x4b\x74\x50\x58"; case 36: // G return "\x04\x4b\x74\x50\x59"; case 37: // H return "\x04\x4b\x74\x50\x5a"; case 38: // I return "\x04\x4b\x74\x50\x61"; case 39: // J return "\x04\x4b\x74\x50\x62"; case 40: // K return "\x04\x4b\x74\x50\x63"; case 41: // L return "\x04\x4b\x74\x50\x64"; case 42: // M return "\x04\x4b\x74\x50\x65"; case 43: // N return "\x04\x4b\x74\x50\x66"; case 44: // O return "\x04\x4b\x74\x50\x67"; case 45: // P return "\x04\x4b\x74\x50\x68"; case 46: // Q return "\x04\x4b\x74\x50\x69"; case 47: // R return "\x04\x4b\x74\x50\x6a"; case 48: // S return "\x04\x4b\x74\x50\x6b"; case 49: // T return "\x04\x4b\x74\x50\x6c"; case 50: // U return "\x04\x4b\x74\x50\x6d"; case 51: // V return "\x04\x4b\x74\x50\x6e"; case 52: // W return "\x04\x4b\x74\x50\x6f"; case 53: // X return "\x04\x4b\x74\x50\x70"; case 54: // Y return "\x04\x4b\x74\x50\x71"; case 55: // Z return "\x04\x4b\x74\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x50\x42\x30"; case 68: // AE return "\x05\x4b\x74\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x50\x79"; case 114: // ENTER return "\x04\x4b\x74\x50\x7a"; case 115: // TAB return "\x04\x4b\x74\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x50\x31"; case 117: // INSERT return "\x04\x4b\x74\x50\x32"; case 118: // DELETE return "\x04\x4b\x74\x50\x33"; case 119: // RIGHT return "\x04\x4b\x74\x50\x34"; case 120: // LEFT return "\x04\x4b\x74\x50\x35"; case 121: // DOWN return "\x04\x4b\x74\x50\x36"; case 122: // UP return "\x04\x4b\x74\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x50\x39"; case 125: // HOME return "\x04\x4b\x74\x50\x2e"; case 126: // END return "\x04\x4b\x74\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x50\x21"; case 132: // F1 return "\x04\x4b\x74\x50\x2f"; case 133: // F2 return "\x04\x4b\x74\x50\x2a"; case 134: // F3 return "\x04\x4b\x74\x50\x3f"; case 135: // F4 return "\x04\x4b\x74\x50\x26"; case 136: // F5 return "\x04\x4b\x74\x50\x3c"; case 137: // F6 return "\x04\x4b\x74\x50\x3e"; case 138: // F7 return "\x04\x4b\x74\x50\x28"; case 139: // F8 return "\x04\x4b\x74\x50\x29"; case 140: // F9 return "\x04\x4b\x74\x50\x5b"; case 141: // F10 return "\x04\x4b\x74\x50\x5d"; case 142: // F11 return "\x04\x4b\x74\x50\x7b"; case 143: // F12 return "\x04\x4b\x74\x50\x7d"; case 144: // F13 return "\x04\x4b\x74\x50\x40"; case 145: // F14 return "\x04\x4b\x74\x50\x25"; case 146: // F15 return "\x04\x4b\x74\x50\x24"; case 147: // F16 return "\x04\x4b\x74\x50\x23"; case 148: // F17 return "\x05\x4b\x74\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode EXTENDED break; } return NULL; } kitty-0.15.0/kitty/keys.py000066400000000000000000000323031356737523400154520ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import string from . import fast_data_types as defines from .key_encoding import KEY_MAP from .terminfo import key_as_bytes, modify_key_bytes from .utils import base64_encode def modify_complex_key(name, amt): if not isinstance(name, bytes): name = key_as_bytes(name) return modify_key_bytes(name, amt) control_codes = { defines.GLFW_KEY_BACKSPACE: b'\x08' } smkx_key_map = {} alt_codes = { defines.GLFW_KEY_TAB: b'\033\t', defines.GLFW_KEY_ENTER: b'\033\r', defines.GLFW_KEY_ESCAPE: b'\033\033', defines.GLFW_KEY_BACKSPACE: b'\033\177' } shift_alt_codes = alt_codes.copy() shift_alt_codes[defines.GLFW_KEY_TAB] = key_as_bytes('kcbt') alt_mods = (defines.GLFW_MOD_ALT, defines.GLFW_MOD_SHIFT | defines.GLFW_MOD_ALT) ctrl_shift_mod = defines.GLFW_MOD_SHIFT | defines.GLFW_MOD_CONTROL ctrl_alt_mod = defines.GLFW_MOD_ALT | defines.GLFW_MOD_CONTROL ctrl_alt_shift_mod = ctrl_alt_mod | defines.GLFW_MOD_SHIFT SHIFTED_KEYS = { defines.GLFW_KEY_TAB: key_as_bytes('kcbt'), defines.GLFW_KEY_HOME: key_as_bytes('kHOM'), defines.GLFW_KEY_END: key_as_bytes('kEND'), defines.GLFW_KEY_LEFT: key_as_bytes('kLFT'), defines.GLFW_KEY_RIGHT: key_as_bytes('kRIT'), defines.GLFW_KEY_UP: key_as_bytes('kri'), defines.GLFW_KEY_DOWN: key_as_bytes('kind'), defines.GLFW_KEY_PAGE_UP: modify_complex_key('kpp', 2), defines.GLFW_KEY_PAGE_DOWN: modify_complex_key('knp', 2), } control_alt_codes = { defines.GLFW_KEY_SPACE: b'\x1b\0', } control_alt_shift_codes = {} ASCII_C0_SHIFTED = { # ^@ '2': b'\x00', # ^^ '6': b'\x1e', # ^_ 'MINUS': b'\x1f', # ^? 'SLASH': b'\x7f', } control_shift_keys = {getattr(defines, 'GLFW_KEY_' + k): v for k, v in ASCII_C0_SHIFTED.items()} def create_modifier_variants(keycode, terminfo_name_or_bytes, add_shifted_key=True): kn = terminfo_name_or_bytes smkx_key_map[keycode] = kn if isinstance(kn, bytes) else key_as_bytes(kn) if add_shifted_key: SHIFTED_KEYS[keycode] = modify_complex_key(kn, 2) alt_codes[keycode] = modify_complex_key(kn, 3) shift_alt_codes[keycode] = modify_complex_key(kn, 4) control_codes[keycode] = modify_complex_key(kn, 5) control_shift_keys[keycode] = modify_complex_key(kn, 6) control_alt_codes[keycode] = modify_complex_key(kn, 7) control_alt_shift_codes[keycode] = modify_complex_key(kn, 8) for kf, kn in { defines.GLFW_KEY_UP: 'kcuu1', defines.GLFW_KEY_DOWN: 'kcud1', defines.GLFW_KEY_LEFT: 'kcub1', defines.GLFW_KEY_RIGHT: 'kcuf1', defines.GLFW_KEY_HOME: 'khome', defines.GLFW_KEY_END: 'kend', defines.GLFW_KEY_INSERT: 'kich1', defines.GLFW_KEY_DELETE: 'kdch1', defines.GLFW_KEY_PAGE_UP: 'kpp', defines.GLFW_KEY_PAGE_DOWN: 'knp', }.items(): create_modifier_variants(kf, kn, add_shifted_key=False) for f in range(1, 13): kf = getattr(defines, 'GLFW_KEY_F{}'.format(f)) kn = 'kf{}'.format(f) create_modifier_variants(kf, kn) for f in range(13, 26): kf = getattr(defines, 'GLFW_KEY_F{}'.format(f)) kn = 'kf{}'.format(f) smkx_key_map[kf] = key_as_bytes(kn) create_modifier_variants(defines.GLFW_KEY_MENU, b'\x1b[29~') f = {k: k for k in '0123456789'} f.update({ 'COMMA': ',', 'PERIOD': '.', 'SEMICOLON': ';', 'APOSTROPHE': "'", 'MINUS': '-', 'EQUAL': '=', }) for kf, kn in f.items(): control_codes[getattr(defines, 'GLFW_KEY_' + kf)] = (ord(kn),) del f, kf, kn smkx_key_map[defines.GLFW_KEY_ESCAPE] = b'\033' smkx_key_map[defines.GLFW_KEY_ENTER] = b'\r' smkx_key_map[defines.GLFW_KEY_KP_ENTER] = b'\r' smkx_key_map[defines.GLFW_KEY_BACKSPACE] = key_as_bytes('kbs') smkx_key_map[defines.GLFW_KEY_TAB] = b'\t' control_codes.update({ k: (1 + i, ) for i, k in enumerate(range(defines.GLFW_KEY_A, defines.GLFW_KEY_RIGHT_BRACKET + 1)) }) control_codes[defines.GLFW_KEY_GRAVE_ACCENT] = (0,) control_codes[defines.GLFW_KEY_UNDERSCORE] = (0,) control_codes[defines.GLFW_KEY_SPACE] = (0,) control_codes[defines.GLFW_KEY_2] = (0,) control_codes[defines.GLFW_KEY_3] = (27,) control_codes[defines.GLFW_KEY_4] = (28,) control_codes[defines.GLFW_KEY_5] = (29,) control_codes[defines.GLFW_KEY_6] = (30,) control_codes[defines.GLFW_KEY_7] = (31,) control_codes[defines.GLFW_KEY_SLASH] = (31,) control_codes[defines.GLFW_KEY_8] = (127,) rmkx_key_map = smkx_key_map.copy() rmkx_key_map.update({ defines.GLFW_KEY_UP: b'\033[A', defines.GLFW_KEY_DOWN: b'\033[B', defines.GLFW_KEY_LEFT: b'\033[D', defines.GLFW_KEY_RIGHT: b'\033[C', defines.GLFW_KEY_HOME: b'\033[H', defines.GLFW_KEY_END: b'\033[F', }) cursor_key_mode_map = {True: smkx_key_map, False: rmkx_key_map} def keyboard_mode_name(screen): if screen.extended_keyboard: return 'kitty' return 'application' if screen.cursor_key_mode else 'normal' action_map = { defines.GLFW_PRESS: 'p', defines.GLFW_RELEASE: 'r', defines.GLFW_REPEAT: 't' } def extended_key_event(key, mods, action): if key >= defines.GLFW_KEY_LAST or key == defines.GLFW_KEY_UNKNOWN or ( # Shifted printable key should be handled by on_text_input() mods <= defines.GLFW_MOD_SHIFT and defines.GLFW_KEY_SPACE <= key <= defines.GLFW_KEY_LAST_PRINTABLE ): return b'' if mods == 0 and key in ( defines.GLFW_KEY_BACKSPACE, defines.GLFW_KEY_ENTER ): if action == defines.GLFW_RELEASE: return b'' return smkx_key_map[key] if key in (defines.GLFW_KEY_LEFT_SHIFT, defines.GLFW_KEY_RIGHT_SHIFT): return b'' name = KEY_MAP.get(key) if name is None: return b'' m = 0 if mods & defines.GLFW_MOD_SHIFT: m |= 0x1 if mods & defines.GLFW_MOD_ALT: m |= 0x2 if mods & defines.GLFW_MOD_CONTROL: m |= 0x4 if mods & defines.GLFW_MOD_SUPER: m |= 0x8 return 'K{}{}{}'.format( action_map[action], base64_encode(m), name ).encode('ascii') def pmap(names, r): names = names.split() r = [x.encode('ascii') for x in r] if len(names) != len(r): raise ValueError('Incorrect mapping for {}'.format(names)) names = [getattr(defines, 'GLFW_KEY_' + n) for n in names] return dict(zip(names, r)) UN_SHIFTED_PRINTABLE = { getattr(defines, 'GLFW_KEY_' + x): x.lower().encode('ascii') for x in string.digits + string.ascii_uppercase } UN_SHIFTED_PRINTABLE.update(pmap( 'SPACE APOSTROPHE COMMA MINUS PERIOD SLASH SEMICOLON EQUAL', " ',-./;=" )) UN_SHIFTED_PRINTABLE.update(pmap( 'LEFT_BRACKET BACKSLASH RIGHT_BRACKET GRAVE_ACCENT UNDERSCORE', "[\\]`_" )) SHIFTED_PRINTABLE = UN_SHIFTED_PRINTABLE.copy() SHIFTED_PRINTABLE.update({ getattr(defines, 'GLFW_KEY_' + x): x.encode('ascii') for x in string.ascii_uppercase }) SHIFTED_PRINTABLE.update(pmap( '1 2 3 4 5 6 7 8 9 0', '!@#$%^&*()' )) SHIFTED_PRINTABLE.update(pmap( 'APOSTROPHE COMMA MINUS PERIOD SLASH SEMICOLON EQUAL', '"<_>?:+' )) SHIFTED_PRINTABLE.update(pmap( 'LEFT_BRACKET BACKSLASH RIGHT_BRACKET GRAVE_ACCENT', "{|}~" )) CTRL_ALT_KEYS = {getattr(defines, 'GLFW_KEY_' + k) for k in string.ascii_uppercase} all_control_alt_keys = set(CTRL_ALT_KEYS) | set(control_alt_codes) def key_to_bytes(key, smkx, extended, mods, action): if extended: return extended_key_event(key, mods, action) data = bytearray() if mods == defines.GLFW_MOD_CONTROL and key in control_codes: # Map Ctrl-key to ascii control code data.extend(control_codes[key]) elif mods == ctrl_shift_mod and key in control_shift_keys: data.extend(control_shift_keys[key]) elif mods in alt_mods: if key in alt_codes: data.extend((alt_codes if mods == defines.GLFW_MOD_ALT else shift_alt_codes)[key]) elif key in UN_SHIFTED_PRINTABLE: m = UN_SHIFTED_PRINTABLE if mods == defines.GLFW_MOD_ALT else SHIFTED_PRINTABLE data.append(0o33) data.extend(m[key]) elif mods == ctrl_alt_mod and key in all_control_alt_keys: if key in CTRL_ALT_KEYS: data.append(0x1b), data.extend(control_codes[key]) else: data.extend(control_alt_codes[key]) elif mods == ctrl_alt_shift_mod and key in control_alt_shift_codes: data.extend(control_alt_shift_codes[key]) else: key_map = cursor_key_mode_map[smkx] x = key_map.get(key) if x is not None: if mods == defines.GLFW_MOD_SHIFT: x = SHIFTED_KEYS.get(key, x) data.extend(x) return bytes(data) def interpret_key_event(key, native_key, mods, window, action): screen = window.screen if ( action == defines.GLFW_PRESS or (action == defines.GLFW_REPEAT and screen.auto_repeat_enabled) or screen.extended_keyboard ): return defines.key_to_bytes(key, screen.cursor_key_mode, screen.extended_keyboard, mods, action) return b'' def get_shortcut(keymap, mods, key, native_key): mods &= 0b1111 ans = keymap.get((mods, False, key)) if ans is None: ans = keymap.get((mods, True, native_key)) return ans def shortcut_matches(s, mods, key, native_key): mods &= 0b1111 q = native_key if s[1] else key return s[0] & 0b1111 == mods & 0b1111 and s[2] == q def generate_key_table_impl(w): w('// auto-generated from keys.py, do not edit!') w('#pragma once') w('#include ') w('#include ') w('#include ') w('#include ') number_of_keys = defines.GLFW_KEY_LAST + 1 w('// map glfw key numbers to 7-bit numbers for compact data storage') w('static const uint8_t key_map[%d] = {' % number_of_keys) key_count = 0 def key_name(k): return k[len('GLFW_KEY_'):] keys = {v: k for k, v in vars(defines).items() if k.startswith('GLFW_KEY_') and k not in {'GLFW_KEY_LAST', 'GLFW_KEY_LAST_PRINTABLE', 'GLFW_KEY_UNKNOWN'}} key_rmap = [] for i in range(number_of_keys): k = keys.get(i) if k is None: w('UINT8_MAX,') else: w('%d, /* %s */' % (key_count, key_name(k))) key_rmap.append(i) key_count += 1 if key_count > 256: raise OverflowError('Too many keys') w('};\n') w('static inline const char* key_name(int key) { switch(key) {') for i in range(number_of_keys): k = keys.get(i) if k is not None: w('case %d: return "%s";' % (i, key_name(k))) w('default: return NULL; }}\n') w('typedef enum { NORMAL, APPLICATION, EXTENDED } KeyboardMode;\n') w('static inline const char*\nkey_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) {') i = 1 def ind(*a): w((' ' * i)[:-1], *a) ind('switch(mode) {') mmap = [(False, False), (True, False), (False, True)] for (smkx, extended), mode in zip(mmap, 'NORMAL APPLICATION EXTENDED'.split()): i += 1 ind('case {}:'.format(mode)) i += 1 ind('switch(action & 3) { case 3: return NULL;') for action in (defines.GLFW_RELEASE, defines.GLFW_PRESS, defines.GLFW_REPEAT): i += 1 ind('case {}: // {}'.format(action, 'RELEASE PRESS REPEAT'.split()[action])) i += 1 if action != defines.GLFW_RELEASE or mode == 'EXTENDED': ind('switch (mods & 0xf) {') i += 1 for mods in range(16): key_bytes = {} for key in range(key_count): glfw_key = key_rmap[key] data = key_to_bytes(glfw_key, smkx, extended, mods, action) if data: key_bytes[key] = data, glfw_key i += 1 ind('case 0x{:x}:'.format(mods)) i += 1 if key_bytes: ind('switch(key & 0xff) { default: return NULL;') i += 1 for key, (data, glfw_key) in key_bytes.items(): ind('case {}: // {}'.format(key, key_name(keys[glfw_key]))) i += 1 items = bytearray(data) items.insert(0, len(items)) ind('return "{}";'.format(''.join('\\x{:02x}'.format(x) for x in items))) i -= 1 i -= 1 ind('} // end switch(key)') else: ind('return NULL;') i -= 2 i -= 1 ind('} // end switch(mods)') ind('break;\n') i -= 1 else: ind('return NULL;\n') i -= 1 i -= 1 ind('}} // end switch(action) in mode {}'.format(mode)) ind('break;\n\n') i -= 1 i -= 1 ind('}') ind('return NULL;') i -= 1 w('}') def generate_key_table(): # To run this, use: python3 . +runpy "from kitty.keys import *; generate_key_table()" import os from functools import partial with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'keys.h'), 'w') as f: w = partial(print, file=f) generate_key_table_impl(w) kitty-0.15.0/kitty/kittens.c000066400000000000000000000160341356737523400157550ustar00rootroot00000000000000/* * kittens.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include "monotonic.h" #define CMD_BUF_SZ 2048 static inline bool append_buf(char buf[CMD_BUF_SZ], size_t *pos, PyObject *ans) { if (*pos) { PyObject *bytes = PyBytes_FromStringAndSize(buf, *pos); if (!bytes) { PyErr_NoMemory(); return false; } int ret = PyList_Append(ans, bytes); Py_CLEAR(bytes); if (ret != 0) return false; *pos = 0; } return true; } static inline bool add_char(char buf[CMD_BUF_SZ], size_t *pos, char ch, PyObject *ans) { if (*pos >= CMD_BUF_SZ) { if (!append_buf(buf, pos, ans)) return false; } buf[*pos] = ch; *pos += 1; return true; } static inline bool read_response(int fd, monotonic_t timeout, PyObject *ans) { static char buf[CMD_BUF_SZ]; size_t pos = 0; enum ReadState {START, STARTING_ESC, P, AT, K, I, T, T2, Y, HYPHEN, C, M, BODY, TRAILING_ESC}; enum ReadState state = START; char ch; monotonic_t end_time = monotonic() + timeout; while(monotonic() <= end_time) { ssize_t len = read(fd, &ch, 1); if (len == 0) continue; if (len < 0) { if (errno == EINTR || errno == EAGAIN) continue; PyErr_SetFromErrno(PyExc_OSError); return false; } end_time = monotonic() + timeout; switch(state) { case START: if (ch == 0x1b) state = STARTING_ESC; break; #define CASE(curr, q, next) case curr: state = ch == q ? next : START; break; CASE(STARTING_ESC, 'P', P); CASE(P, '@', AT); CASE(AT, 'k', K); CASE(K, 'i', I); CASE(I, 't', T); CASE(T, 't', T2); CASE(T2, 'y', Y); CASE(Y, '-', HYPHEN); CASE(HYPHEN, 'c', C); CASE(C, 'm', M); CASE(M, 'd', BODY); case BODY: if (ch == 0x1b) { state = TRAILING_ESC; } else { if (!add_char(buf, &pos, ch, ans)) return false; } break; case TRAILING_ESC: if (ch == '\\') return append_buf(buf, &pos, ans); if (!add_char(buf, &pos, 0x1b, ans)) return false; if (!add_char(buf, &pos, ch, ans)) return false; state = BODY; break; } } PyErr_SetString(PyExc_TimeoutError, "Timed out while waiting to read command response." " Make sure you are running this command from within the kitty terminal." " If you want to run commands from outside, then you have to setup a" " socket with the --listen-on command line flag."); return false; } static PyObject* read_command_response(PyObject *self UNUSED, PyObject *args) { double timeout; int fd; PyObject *ans; if (!PyArg_ParseTuple(args, "idO!", &fd, &timeout, &PyList_Type, &ans)) return NULL; if (!read_response(fd, s_double_to_monotonic_t(timeout), ans)) return NULL; Py_RETURN_NONE; } static PyObject* parse_input_from_terminal(PyObject *self UNUSED, PyObject *args) { enum State { NORMAL, ESC, CSI, ST, ESC_ST }; enum State state = NORMAL; PyObject *uo, *text_callback, *dcs_callback, *csi_callback, *osc_callback, *pm_callback, *apc_callback, *callback; int inbp = 0; if (!PyArg_ParseTuple(args, "OOOOOOUp", &text_callback, &dcs_callback, &csi_callback, &osc_callback, &pm_callback, &apc_callback, &uo, &inbp)) return NULL; Py_ssize_t sz = PyUnicode_GET_LENGTH(uo), pos = 0, start = 0, count = 0, consumed = 0; callback = text_callback; int kind = PyUnicode_KIND(uo); void *data = PyUnicode_DATA(uo); bool in_bracketed_paste_mode = inbp != 0; #define CALL(cb, s_, num_) {\ PyObject *fcb = cb; \ Py_ssize_t s = s_, num = num_; \ if (in_bracketed_paste_mode && fcb != text_callback) { \ fcb = text_callback; num += 2; s -= 2; \ } \ if (num > 0) { \ PyObject *ret = PyObject_CallFunction(fcb, "N", PyUnicode_Substring(uo, s, s + num)); \ if (ret == NULL) return NULL; \ Py_DECREF(ret); \ } \ consumed = s_ + num_; \ count = 0; \ } START_ALLOW_CASE_RANGE; while (pos < sz) { Py_UCS4 ch = PyUnicode_READ(kind, data, pos); switch(state) { case NORMAL: if (ch == 0x1b) { state = ESC; CALL(text_callback, start, count); start = pos; } else count++; break; case ESC: start = pos; count = 0; switch(ch) { case 'P': state = ST; callback = dcs_callback; break; case '[': state = CSI; callback = csi_callback; break; case ']': state = ST; callback = osc_callback; break; case '^': state = ST; callback = pm_callback; break; case '_': state = ST; callback = apc_callback; break; default: state = NORMAL; break; } break; case CSI: count++; switch (ch) { case 'a' ... 'z': case 'A' ... 'Z': case '@': case '`': case '{': case '|': case '}': case '~': #define IBP(w) ch == '~' && PyUnicode_READ(kind, data, start + 1) == '2' && PyUnicode_READ(kind, data, start + 2) == '0' && PyUnicode_READ(kind, data, start + 3) == w if (IBP('1')) in_bracketed_paste_mode = false; CALL(callback, start + 1, count); if (IBP('0')) in_bracketed_paste_mode = true; #undef IBP state = NORMAL; start = pos + 1; break; } break; case ESC_ST: if (ch == '\\') { CALL(callback, start + 1, count); state = NORMAL; start = pos + 1; consumed += 2; } else count += 2; break; case ST: if (ch == 0x1b) { state = ESC_ST; } else count++; break; } pos++; } if (state == NORMAL && count > 0) CALL(text_callback, start, count); return PyUnicode_Substring(uo, consumed, sz); END_ALLOW_CASE_RANGE; #undef CALL } static PyMethodDef module_methods[] = { METHODB(parse_input_from_terminal, METH_VARARGS), METHODB(read_command_response, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_kittens(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } kitty-0.15.0/kitty/launch.py000066400000000000000000000155351356737523400157610ustar00rootroot00000000000000#!/usr/bin/env python # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal from kitty.cli import parse_args from kitty.fast_data_types import set_clipboard_string from kitty.utils import set_primary_selection def options_spec(): if not hasattr(options_spec, 'ans'): OPTIONS = ''' --window-title --title The title to set for the new window. By default, title is controlled by the child process. --tab-title The title for the new tab if launching in a new tab. By default, the title of the actie window in the tab is used as the tab title. --type type=choices default=window choices=window,tab,os-window,overlay,background,clipboard,primary Where to launch the child process, in a new kitty window in the current tab, a new tab, or a new OS window or an overlay over the current window. Note that if the current window already has an overlay, then it will open a new window. The value of none means the process will be run in the background. The values clipboard and primary are meant to work with :option:`launch --stdin-source` to copy data to the system clipboard or primary selection. --keep-focus type=bool-set Keep the focus on the currently active window instead of switching to the newly opened window. --cwd The working directory for the newly launched child. Use the special value :code:`current` to use the working directory of the currently active window. --env type=list Environment variables to set in the child process. Can be specified multiple times to set different environment variables. Syntax: :italic:`name=value`. --copy-colors type=bool-set Set the colors of the newly created window to be the same as the colors in the currently active window. --copy-cmdline type=bool-set Ignore any specified command line and instead use the command line from the currently active window. --copy-env type=bool-set Copy the environment variables from the currently active window into the newly launched child process. --location type=choices default=last choices=first,neighbor,last Where to place the newly created window when it is added to a tab which already has existing windows in it. Also applies to creating a new tab, where the value of neighbor will cause the new tab to be placed next to the current tab instead of at the end. --allow-remote-control type=bool-set Programs running in this window can control kitty (if remote control is enabled). Note that any program with the right level of permissions can still write to the pipes of any other program on the same computer and therefore can control kitty. It can, however, be useful to block programs running on other computers (for example, over ssh) or as other users. --stdin-source type=choices default=none choices=none,@selection,@screen,@screen_scrollback,@alternate,@alternate_scrollback Pass the screen contents as :code:`STDIN` to the child process. @selection is the currently selected text. @screen is the contents of the currently active window. @screen_scrollback is the same as @screen, but includes the scrollback buffer as well. @alternate is the secondary screen of the current active window. For example if you run a full screen terminal application, the secondary screen will be the screen you return to when quitting the application. --stdin-add-formatting type=bool-set When using :option:`launch --stdin-source` add formatting escape codes, without this only plain text will be sent. --stdin-add-line-wrap-markers type=bool-set When using :option:`launch --stdin-source` add a carriage return at every line wrap location (where long lines are wrapped at screen edges). This is useful if you want to pipe to program that wants to duplicate the screen layout of the screen. ''' options_spec.ans = OPTIONS return options_spec.ans def parse_launch_args(args=None): args = list(args or ()) try: opts, args = parse_args(args=args, ospec=options_spec) except SystemExit as e: raise ValueError from e return opts, args def get_env(opts, active_child): env = {} if opts.copy_env and active_child: env.update(active_child.foreground_environ) for x in opts.env: parts = x.split('=', 1) if len(parts) == 2: env[parts[0]] = parts[1] return env def tab_for_window(boss, opts, target_tab=None): if opts.type == 'tab': tm = boss.active_tab_manager tab = tm.new_tab(empty_tab=True, as_neighbor=opts.location == 'neighbor') if opts.tab_title: tab.set_title(opts.tab_title) elif opts.type == 'os-window': oswid = boss.add_os_window() tm = boss.os_window_map[oswid] tab = tm.new_tab(empty_tab=True) if opts.tab_title: tab.set_title(opts.tab_title) else: tab = target_tab or boss.active_tab return tab def launch(boss, opts, args, target_tab=None): active = boss.active_window_for_cwd active_child = getattr(active, 'child', None) env = get_env(opts, active_child) kw = { 'allow_remote_control': opts.allow_remote_control } if opts.cwd: if opts.cwd == 'current': if active_child: kw['cwd_from'] = active_child.pid_for_cwd else: kw['cwd'] = opts.cwd if opts.location != 'last': kw['location'] = opts.location if opts.window_title: kw['override_title'] = opts.window_title if opts.copy_colors and active: kw['copy_colors_from'] = active cmd = args or None if opts.copy_cmdline and active_child: cmd = active_child.foreground_cmdline if cmd: final_cmd = [] for x in cmd: if x == '@selection' and active and not opts.copy_cmdline: s = boss.data_for_at(active, x) if s: x = s final_cmd.append(x) kw['cmd'] = final_cmd if opts.type == 'overlay' and active and not active.overlay_window_id: kw['overlay_for'] = active.id if opts.stdin_source and opts.stdin_source != 'none': q = opts.stdin_source if opts.stdin_add_line_wrap_markers: q += '_wrap' penv, stdin = boss.process_stdin_source(window=active, stdin=q) if stdin: kw['stdin'] = stdin if penv: env.update(penv) if opts.type == 'background': boss.run_background_process(kw['cmd'], cwd=kw.get('cwd'), cwd_from=kw.get('cwd_from'), env=env or None, stdin=kw.get('stdin')) elif opts.type in ('clipboard', 'primary'): if 'stdin' in kw: func = set_clipboard_string if opts.type == 'clipboard' else set_primary_selection func(kw['stdin']) else: tab = tab_for_window(boss, opts, target_tab) new_window = tab.new_window(env=env or None, **kw) if opts.keep_focus and active: boss.set_active_window(active, switch_os_window_if_needed=True) return new_window kitty-0.15.0/kitty/layout.py000066400000000000000000001072541356737523400160240ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal from collections import namedtuple from functools import partial from itertools import islice, repeat from .constants import WindowGeometry from .fast_data_types import ( Region, set_active_window, swap_windows, viewport_for_window ) # Utils {{{ central = Region((0, 0, 199, 199, 200, 200)) cell_width = cell_height = 20 all_borders = True, True, True, True no_borders = False, False, False, False draw_minimal_borders = False draw_active_borders = True align_top_left = False def idx_for_id(win_id, windows): for i, w in enumerate(windows): if w.id == win_id: return i def set_layout_options(opts): global draw_minimal_borders, draw_active_borders, align_top_left draw_minimal_borders = opts.draw_minimal_borders and opts.window_margin_width == 0 draw_active_borders = opts.active_border_color is not None align_top_left = opts.placement_strategy == 'top-left' def layout_dimension(start_at, length, cell_length, decoration_pairs, left_align=False, bias=None): number_of_windows = len(decoration_pairs) number_of_cells = length // cell_length space_needed_for_decorations = sum(map(sum, decoration_pairs)) extra = length - number_of_cells * cell_length while extra < space_needed_for_decorations: number_of_cells -= 1 extra = length - number_of_cells * cell_length cells_per_window = number_of_cells // number_of_windows extra -= space_needed_for_decorations pos = start_at if not left_align: pos += extra // 2 def calc_window_geom(i, cells_in_window): nonlocal pos pos += decoration_pairs[i][0] inner_length = cells_in_window * cell_length return inner_length + decoration_pairs[i][1] if bias is not None and 1 < number_of_windows == len(bias) and cells_per_window > 5: cells_map = [int(b * number_of_cells) for b in bias] while min(cells_map) < 5: maxi, mini = map(cells_map.index, (max(cells_map), min(cells_map))) if maxi == mini: break cells_map[mini] += 1 cells_map[maxi] -= 1 else: cells_map = list(repeat(cells_per_window, number_of_windows)) extra = number_of_cells - sum(cells_map) if extra > 0: cells_map[-1] += extra for i, cells_per_window in enumerate(cells_map): window_length = calc_window_geom(i, cells_per_window) yield pos, cells_per_window pos += window_length Rect = namedtuple('Rect', 'left top right bottom') def process_overlaid_windows(all_windows): id_map = {w.id: w for w in all_windows} overlaid_windows = frozenset(w for w in all_windows if w.overlay_window_id is not None and w.overlay_window_id in id_map) windows = [w for w in all_windows if w not in overlaid_windows] return overlaid_windows, windows def window_geometry(xstart, xnum, ystart, ynum): return WindowGeometry(left=xstart, top=ystart, xnum=xnum, ynum=ynum, right=xstart + cell_width * xnum, bottom=ystart + cell_height * ynum) def layout_single_window(xdecoration_pairs, ydecoration_pairs, left_align=False): xstart, xnum = next(layout_dimension(central.left, central.width, cell_width, xdecoration_pairs, left_align=align_top_left)) ystart, ynum = next(layout_dimension(central.top, central.height, cell_height, ydecoration_pairs, left_align=align_top_left)) return window_geometry(xstart, xnum, ystart, ynum) def left_blank_rect(w, rects): lt = w.geometry.left if lt > central.left: rects.append(Rect(central.left, central.top, lt, central.bottom + 1)) def right_blank_rect(w, rects): r = w.geometry.right if r < central.right: rects.append(Rect(r, central.top, central.right + 1, central.bottom + 1)) def top_blank_rect(w, rects): t = w.geometry.top if t > central.top: rects.append(Rect(central.left, central.top, central.right + 1, t)) def bottom_blank_rect(w, rects): b = w.geometry.bottom # Need to use <= here as otherwise a single pixel row at the bottom of the # window is sometimes not covered. See https://github.com/kovidgoyal/kitty/issues/506 if b <= central.bottom: rects.append(Rect(central.left, b, central.right + 1, central.bottom + 1)) def blank_rects_for_window(w): ans = [] left_blank_rect(w, ans), top_blank_rect(w, ans), right_blank_rect(w, ans), bottom_blank_rect(w, ans) return ans def safe_increment_bias(old_val, increment): return max(0.1, min(old_val + increment, 0.9)) def normalize_biases(biases): s = sum(biases) if s == 1: return biases return [x/s for x in biases] def distribute_indexed_bias(base_bias, index_bias_map): if not index_bias_map: return base_bias ans = list(base_bias) limit = len(ans) for row, increment in index_bias_map.items(): if row >= limit or not increment: continue other_increment = -increment / (limit - 1) ans = [safe_increment_bias(b, increment if i == row else other_increment) for i, b in enumerate(ans)] return normalize_biases(ans) def variable_bias(num_windows, candidate): return distribute_indexed_bias(list(repeat(1/(num_windows), num_windows)), candidate) # }}} class Layout: # {{{ name = None needs_window_borders = True only_active_window_visible = False def __init__(self, os_window_id, tab_id, margin_width, single_window_margin_width, padding_width, border_width, layout_opts=''): self.os_window_id = os_window_id self.tab_id = tab_id self.set_active_window_in_os_window = partial(set_active_window, os_window_id, tab_id) self.swap_windows_in_os_window = partial(swap_windows, os_window_id, tab_id) self.border_width = border_width self.margin_width = margin_width self.single_window_margin_width = single_window_margin_width self.padding_width = padding_width # A set of rectangles corresponding to the blank spaces at the edges of # this layout, i.e. spaces that are not covered by any window self.blank_rects = [] self.layout_opts = self.parse_layout_opts(layout_opts) self.full_name = self.name + ((':' + layout_opts) if layout_opts else '') self.remove_all_biases() def bias_increment_for_cell(self, is_horizontal): self._set_dimensions() if is_horizontal: return (cell_width + 1) / central.width return (cell_height + 1) / central.height def apply_bias(self, idx, increment_as_percent, num_windows, is_horizontal): return False def remove_all_biases(self): return False def modify_size_of_window(self, all_windows, window_id, increment, is_horizontal=True): idx = idx_for_id(window_id, all_windows) if idx is None: return False w = all_windows[idx] windows = process_overlaid_windows(all_windows)[1] idx = idx_for_id(w.id, windows) if idx is None: idx = idx_for_id(w.overlay_window_id, windows) if idx is not None: return self.apply_bias(idx, increment, len(windows), is_horizontal) return False def parse_layout_opts(self, layout_opts): if not layout_opts: return {} ans = {} for x in layout_opts.split(';'): k, v = x.partition('=')[::2] if k and v: ans[k] = v return ans def nth_window(self, all_windows, num, make_active=True): windows = process_overlaid_windows(all_windows)[1] w = windows[min(num, len(windows) - 1)] if not make_active: return w active_window_idx = idx_for_id(w.id, all_windows) return self.set_active_window(all_windows, active_window_idx) def next_window(self, all_windows, active_window_idx, delta=1): w = all_windows[active_window_idx] windows = process_overlaid_windows(all_windows)[1] idx = idx_for_id(w.id, windows) if idx is None: idx = idx_for_id(w.overlay_window_id, windows) active_window_idx = (idx + len(windows) + delta) % len(windows) active_window_idx = idx_for_id(windows[active_window_idx].id, all_windows) return self.set_active_window(all_windows, active_window_idx) def neighbors(self, all_windows, active_window_idx): w = all_windows[active_window_idx] windows = process_overlaid_windows(all_windows)[1] ans = self.neighbors_for_window(w, windows) for values in ans.values(): values[:] = [idx_for_id(w.id, all_windows) for w in values] return ans def move_window(self, all_windows, active_window_idx, delta=1): # delta can be either a number or a string such as 'left', 'top', etc # for neighborhood moves w = all_windows[active_window_idx] windows = process_overlaid_windows(all_windows)[1] if len(windows) < 2 or not delta: return active_window_idx idx = idx_for_id(w.id, windows) if idx is None: idx = idx_for_id(w.overlay_window_id, windows) if isinstance(delta, int): nidx = (idx + len(windows) + delta) % len(windows) else: delta = delta.lower() delta = {'up': 'top', 'down': 'bottom'}.get(delta, delta) neighbors = self.neighbors_for_window(w, windows) if not neighbors.get(delta): return active_window_idx nidx = idx_for_id(neighbors[delta][0].id, windows) nw = windows[nidx] nidx = idx_for_id(nw.id, all_windows) idx = active_window_idx all_windows[nidx], all_windows[idx] = all_windows[idx], all_windows[nidx] self.swap_windows_in_os_window(nidx, idx) return self.set_active_window(all_windows, nidx) def add_window(self, all_windows, window, current_active_window_idx, location=None): active_window_idx = None if window.overlay_for is not None: i = idx_for_id(window.overlay_for, all_windows) if i is not None: # put the overlay window in the position occupied by the # overlaid window and move the overlaid window to the end self.swap_windows_in_os_window(len(all_windows), i) all_windows.append(all_windows[i]) all_windows[i] = window active_window_idx = i elif location is not None: if location == 'neighbor' and current_active_window_idx is not None and len(all_windows) > 1: active_window_idx = min(current_active_window_idx + 1, len(all_windows)) elif location == 'first': active_window_idx = 0 if active_window_idx is not None: for i in range(len(all_windows), active_window_idx, -1): self.swap_windows_in_os_window(i, i - 1) all_windows.insert(active_window_idx, window) if active_window_idx is None: active_window_idx = len(all_windows) all_windows.append(window) self(all_windows, active_window_idx) self.set_active_window_in_os_window(active_window_idx) return active_window_idx def remove_window(self, all_windows, window, current_active_window_idx, swapped=False): try: active_window = all_windows[current_active_window_idx] except Exception: active_window = window if not swapped and window.overlay_for is not None: nidx = idx_for_id(window.overlay_for, all_windows) if nidx is not None: idx = all_windows.index(window) all_windows[nidx], all_windows[idx] = all_windows[idx], all_windows[nidx] self.swap_windows_in_os_window(nidx, idx) return self.remove_window(all_windows, window, current_active_window_idx, swapped=True) position = all_windows.index(window) del all_windows[position] active_window_idx = None if window.overlay_for is not None: i = idx_for_id(window.overlay_for, all_windows) if i is not None: overlaid_window = all_windows[i] overlaid_window.overlay_window_id = None if active_window is window: active_window = overlaid_window active_window_idx = idx_for_id(active_window.id, all_windows) if active_window_idx is None: if active_window is window: active_window_idx = max(0, min(current_active_window_idx, len(all_windows) - 1)) else: active_window_idx = idx_for_id(active_window.id, all_windows) if all_windows: self(all_windows, active_window_idx) self.set_active_window(all_windows, active_window_idx) return active_window_idx def update_visibility(self, all_windows, active_window, overlaid_windows=None): if overlaid_windows is None: overlaid_windows = process_overlaid_windows(all_windows)[0] for i, w in enumerate(all_windows): w.set_visible_in_layout(i, w is active_window or (not self.only_active_window_visible and w not in overlaid_windows)) def set_active_window(self, all_windows, active_window_idx): if not all_windows: self.set_active_window_in_os_window(0) return 0 w = all_windows[active_window_idx] if w.overlay_window_id is not None: i = idx_for_id(w.overlay_window_id, all_windows) if i is not None: active_window_idx = i self.update_visibility(all_windows, all_windows[active_window_idx]) self.set_active_window_in_os_window(active_window_idx) return active_window_idx def _set_dimensions(self): global central, cell_width, cell_height central, tab_bar, vw, vh, cell_width, cell_height = viewport_for_window(self.os_window_id) def __call__(self, all_windows, active_window_idx): self._set_dimensions() active_window = all_windows[active_window_idx] overlaid_windows, windows = process_overlaid_windows(all_windows) if overlaid_windows: windows = [w for w in all_windows if w not in overlaid_windows] active_window_idx = idx_for_id(active_window.id, windows) if active_window_idx is None: active_window_idx = idx_for_id(active_window.overlay_window_id, windows) or 0 active_window = windows[active_window_idx] else: windows = all_windows self.update_visibility(all_windows, active_window, overlaid_windows) self.blank_rects = [] self.do_layout(windows, active_window_idx) return idx_for_id(active_window.id, all_windows) # Utils {{{ def layout_single_window(self, w): mw = self.margin_width if self.single_window_margin_width < 0 else self.single_window_margin_width decoration_pairs = ((self.padding_width + mw, self.padding_width + mw),) wg = layout_single_window(decoration_pairs, decoration_pairs) w.set_geometry(0, wg) self.blank_rects = blank_rects_for_window(w) def xlayout(self, num, bias=None): decoration = self.margin_width + self.border_width + self.padding_width decoration_pairs = tuple(repeat((decoration, decoration), num)) return layout_dimension(central.left, central.width, cell_width, decoration_pairs, bias=bias, left_align=align_top_left) def ylayout(self, num, left_align=True, bias=None): decoration = self.margin_width + self.border_width + self.padding_width decoration_pairs = tuple(repeat((decoration, decoration), num)) return layout_dimension(central.top, central.height, cell_height, decoration_pairs, bias=bias, left_align=align_top_left) def simple_blank_rects(self, first_window, last_window): br = self.blank_rects left_blank_rect(first_window, br), top_blank_rect(first_window, br), right_blank_rect(last_window, br) def between_blank_rect(self, left_window, right_window): self.blank_rects.append(Rect(left_window.geometry.right, central.top, right_window.geometry.left, central.bottom + 1)) def bottom_blank_rect(self, window): self.blank_rects.append(Rect(window.geometry.left, window.geometry.bottom, window.geometry.right, central.bottom + 1)) # }}} def do_layout(self, windows, active_window_idx): raise NotImplementedError() def neighbors_for_window(self, window, windows): return {'left': [], 'right': [], 'top': [], 'bottom': []} def resolve_borders(self, windows, active_window): if draw_minimal_borders: needs_borders_map = {w.id: ((w is active_window and draw_active_borders) or w.needs_attention) for w in windows} yield from self.minimal_borders(windows, active_window, needs_borders_map) else: yield from Layout.minimal_borders(self, windows, active_window, None) def minimal_borders(self, windows, active_window, needs_borders_map): for w in windows: if w is active_window and not draw_active_borders and not w.needs_attention: yield no_borders else: yield all_borders # }}} class Stack(Layout): # {{{ name = 'stack' needs_window_borders = False only_active_window_visible = True def do_layout(self, windows, active_window_idx): mw = self.margin_width if self.single_window_margin_width < 0 else self.single_window_margin_width decoration_pairs = ((mw + self.padding_width, mw + self.padding_width),) wg = layout_single_window(decoration_pairs, decoration_pairs, left_align=align_top_left) for i, w in enumerate(windows): w.set_geometry(i, wg) if w.is_visible_in_layout: self.blank_rects = blank_rects_for_window(w) # }}} class Tall(Layout): # {{{ name = 'tall' vlayout = Layout.ylayout main_is_horizontal = True only_between_border = False, False, False, True only_main_border = False, False, True, False def remove_all_biases(self): self.main_bias = list(self.layout_opts['bias']) self.biased_map = {} return True def variable_layout(self, num_windows, biased_map): num_windows -= 1 return self.vlayout(num_windows, bias=variable_bias(num_windows, biased_map) if num_windows > 1 else None) def apply_bias(self, idx, increment, num_windows, is_horizontal): if self.main_is_horizontal == is_horizontal: before = self.main_bias if idx == 0: self.main_bias = [safe_increment_bias(self.main_bias[0], increment), safe_increment_bias(self.main_bias[1], -increment)] else: self.main_bias = [safe_increment_bias(self.main_bias[0], -increment), safe_increment_bias(self.main_bias[1], increment)] self.main_bias = normalize_biases(self.main_bias) after = self.main_bias else: if idx == 0 or num_windows < 3: return False idx -= 1 before_layout = list(self.variable_layout(num_windows, self.biased_map)) candidate = self.biased_map.copy() before = candidate.get(idx, 0) candidate[idx] = after = before + increment if before_layout == list(self.variable_layout(num_windows, candidate)): return False self.biased_map = candidate return before != after def parse_layout_opts(self, layout_opts): ans = Layout.parse_layout_opts(self, layout_opts) try: ans['bias'] = int(ans.get('bias', 50)) / 100 except Exception: ans['bias'] = 0.5 ans['bias'] = max(0.1, min(ans['bias'], 0.9)) ans['bias'] = ans['bias'], 1.0 - ans['bias'] return ans def do_layout(self, windows, active_window_idx): if len(windows) == 1: return self.layout_single_window(windows[0]) xlayout = self.xlayout(2, bias=self.main_bias) xstart, xnum = next(xlayout) ystart, ynum = next(self.vlayout(1)) windows[0].set_geometry(0, window_geometry(xstart, xnum, ystart, ynum)) xstart, xnum = next(xlayout) ylayout = self.variable_layout(len(windows), self.biased_map) for i, (w, (ystart, ynum)) in enumerate(zip(islice(windows, 1, None), ylayout)): w.set_geometry(i + 1, window_geometry(xstart, xnum, ystart, ynum)) # right bottom blank rect self.bottom_blank_rect(windows[i + 1]) # left, top and right blank rects self.simple_blank_rects(windows[0], windows[-1]) # between blank rect self.between_blank_rect(windows[0], windows[1]) # left bottom blank rect self.bottom_blank_rect(windows[0]) def neighbors_for_window(self, window, windows): if window is windows[0]: return {'left': [], 'right': windows[1:], 'top': [], 'bottom': []} idx = windows.index(window) return {'left': [windows[0]], 'right': [], 'top': [] if idx <= 1 else [windows[idx-1]], 'bottom': [] if window is windows[-1] else [windows[idx+1]]} def minimal_borders(self, windows, active_window, needs_borders_map): last_i = len(windows) - 1 for i, w in enumerate(windows): if needs_borders_map[w.id]: yield all_borders continue if i == 0: if last_i == 1 and needs_borders_map[windows[1].id]: yield no_borders else: yield self.only_main_border continue if i == last_i: yield no_borders break if needs_borders_map[windows[i+1].id]: yield no_borders else: yield self.only_between_border # }}} class Fat(Tall): # {{{ name = 'fat' vlayout = Layout.xlayout main_is_horizontal = False only_between_border = False, False, True, False only_main_border = False, False, False, True def do_layout(self, windows, active_window_idx): if len(windows) == 1: return self.layout_single_window(windows[0]) xstart, xnum = next(self.xlayout(1)) ylayout = self.ylayout(2, bias=self.main_bias) ystart, ynum = next(ylayout) windows[0].set_geometry(0, window_geometry(xstart, xnum, ystart, ynum)) xlayout = self.variable_layout(len(windows), self.biased_map) ystart, ynum = next(ylayout) for i, (w, (xstart, xnum)) in enumerate(zip(islice(windows, 1, None), xlayout)): w.set_geometry(i + 1, window_geometry(xstart, xnum, ystart, ynum)) if i > 0: # bottom between blank rect self.between_blank_rect(windows[i - 1], windows[i]) # left, top and right blank rects self.simple_blank_rects(windows[0], windows[-1]) # top bottom blank rect self.bottom_blank_rect(windows[0]) # bottom blank rect self.blank_rects.append(Rect(windows[0].geometry.left, windows[0].geometry.bottom, windows[-1].geometry.right, central.bottom + 1)) def neighbors_for_window(self, window, windows): if window is windows[0]: return {'left': [], 'bottom': windows[1:], 'top': [], 'right': []} idx = windows.index(window) return {'top': [windows[0]], 'bottom': [], 'left': [] if idx <= 1 else [windows[idx-1]], 'right': [] if window is windows[-1] else [windows[idx+1]]} # }}} class Grid(Layout): # {{{ name = 'grid' def remove_all_biases(self): self.biased_rows = {} self.biased_cols = {} return True def variable_layout(self, layout_func, num_windows, biased_map): return layout_func(num_windows, bias=variable_bias(num_windows, biased_map) if num_windows > 1 else None) def apply_bias(self, idx, increment, num_windows, is_horizontal): b = self.biased_cols if is_horizontal else self.biased_rows ncols, nrows, special_rows, special_col = self.calc_grid_size(num_windows) def position_for_window_idx(idx): row_num = col_num = 0 def on_col_done(col_windows): nonlocal col_num, row_num row_num = 0 col_num += 1 for window_idx, xstart, xnum, ystart, ynum in self.layout_windows( num_windows, nrows, ncols, special_rows, special_col, on_col_done): if idx == window_idx: return row_num, col_num row_num += 1 row_num, col_num = position_for_window_idx(idx) if is_horizontal: b = self.biased_cols if ncols < 2: return False bias_idx = col_num layout_func = self.xlayout attr = 'biased_cols' else: b = self.biased_rows if max(nrows, special_rows) < 2: return False bias_idx = row_num layout_func = self.ylayout attr = 'biased_rows' before_layout = list(self.variable_layout(layout_func, num_windows, b)) candidate = b.copy() before = candidate.get(bias_idx, 0) candidate[bias_idx] = before + increment if before_layout == list(self.variable_layout(layout_func, num_windows, candidate)): return False setattr(self, attr, candidate) return True def calc_grid_size(self, n): if n <= 5: ncols = 1 if n == 1 else 2 else: for ncols in range(3, (n // 2) + 1): if ncols * ncols >= n: break nrows = n // ncols special_rows = n - (nrows * (ncols - 1)) special_col = 0 if special_rows < nrows else ncols - 1 return ncols, nrows, special_rows, special_col def layout_windows(self, num_windows, nrows, ncols, special_rows, special_col, on_col_done=lambda col_windows: None): # Distribute windows top-to-bottom, left-to-right (i.e. in columns) xlayout = self.variable_layout(self.xlayout, ncols, self.biased_cols) yvals_normal = tuple(self.variable_layout(self.ylayout, nrows, self.biased_rows)) yvals_special = yvals_normal if special_rows == nrows else tuple(self.variable_layout(self.ylayout, special_rows, self.biased_rows)) pos = 0 for col in range(ncols): rows = special_rows if col == special_col else nrows yl = yvals_special if col == special_col else yvals_normal xstart, xnum = next(xlayout) col_windows = [] for i, (ystart, ynum) in enumerate(yl): window_idx = pos + i yield window_idx, xstart, xnum, ystart, ynum col_windows.append(window_idx) pos += rows on_col_done(col_windows) def do_layout(self, windows, active_window_idx): n = len(windows) if n == 1: return self.layout_single_window(windows[0]) ncols, nrows, special_rows, special_col = self.calc_grid_size(n) layout_data = n, ncols, nrows, special_rows, special_col for w in windows: w.layout_data = layout_data win_col_map = [] def on_col_done(col_windows): col_windows = [windows[i] for i in col_windows] win_col_map.append(col_windows) # bottom blank rect self.bottom_blank_rect(col_windows[-1]) for window_idx, xstart, xnum, ystart, ynum in self.layout_windows( len(windows), nrows, ncols, special_rows, special_col, on_col_done): w = windows[window_idx] w.set_geometry(window_idx, window_geometry(xstart, xnum, ystart, ynum)) # left, top and right blank rects self.simple_blank_rects(windows[0], windows[-1]) # the in-between columns blank rects for i in range(ncols - 1): self.between_blank_rect(win_col_map[i][0], win_col_map[i + 1][0]) def minimal_borders(self, windows, active_window, needs_borders_map): try: n, ncols, nrows, special_rows, special_col = windows[0].layout_data except Exception: n = -1 if n != len(windows): # Something bad happened yield from Layout.minimal_borders(self, windows, active_window, needs_borders_map) return blank_row = [None for i in range(ncols)] matrix = tuple(blank_row[:] for j in range(max(nrows, special_rows))) wi = iter(windows) pos_map = {} col_counts = [] for col in range(ncols): rows = special_rows if col == special_col else nrows for row in range(rows): matrix[row][col] = wid = next(wi).id pos_map[wid] = row, col col_counts.append(rows) for w in windows: wid = w.id if needs_borders_map[wid]: yield all_borders continue row, col = pos_map[wid] if col + 1 < ncols: next_col_has_different_count = col_counts[col + 1] != col_counts[col] right_neighbor_id = matrix[row][col+1] else: right_neighbor_id = None next_col_has_different_count = False try: bottom_neighbor_id = matrix[row+1][col] except IndexError: bottom_neighbor_id = None yield ( False, False, (right_neighbor_id is not None and not needs_borders_map[right_neighbor_id]) or next_col_has_different_count, bottom_neighbor_id is not None and not needs_borders_map[bottom_neighbor_id] ) def neighbors_for_window(self, window, windows): n = len(windows) if n < 4: return Tall.neighbors_for_window(self, window, windows) try: n, ncols, nrows, special_rows, special_col = windows[0].layout_data except Exception: n = -1 if n != len(windows): # Something bad happened return Layout.neighbors_for_window(self, window, windows) blank_row = [None for i in range(ncols)] matrix = tuple(blank_row[:] for j in range(max(nrows, special_rows))) wi = iter(windows) pos_map = {} col_counts = [] id_map = {} for col in range(ncols): rows = special_rows if col == special_col else nrows for row in range(rows): w = next(wi) matrix[row][col] = wid = w.id pos_map[wid] = row, col id_map[wid] = w col_counts.append(rows) row, col = pos_map[window.id] def neighbors(row, col): try: ans = matrix[row][col] except IndexError: ans = None return [] if ans is None else [id_map[ans]] def side(row, col, delta): neighbor_col = col + delta if col_counts[neighbor_col] == col_counts[col]: return neighbors(row, neighbor_col) return neighbors(min(row, col_counts[neighbor_col] - 1), neighbor_col) return { 'top': neighbors(row-1, col) if row else [], 'bottom': neighbors(row + 1, col), 'left': side(row, col, -1) if col else [], 'right': side(row, col, 1) if col < ncols - 1 else [], } # }}} class Vertical(Layout): # {{{ name = 'vertical' main_is_horizontal = False vlayout = Layout.ylayout only_between_border = False, False, False, True def variable_layout(self, num_windows, biased_map): return self.vlayout(num_windows, bias=variable_bias(num_windows, biased_map) if num_windows else None) def remove_all_biases(self): self.biased_map = {} return True def apply_bias(self, idx, increment, num_windows, is_horizontal): if self.main_is_horizontal != is_horizontal: return False if num_windows < 2: return False before_layout = list(self.variable_layout(num_windows, self.biased_map)) candidate = self.biased_map.copy() before = candidate.get(idx, 0) candidate[idx] = before + increment if before_layout == list(self.variable_layout(num_windows, candidate)): return False self.biased_map = candidate return True def do_layout(self, windows, active_window_idx): window_count = len(windows) if window_count == 1: return self.layout_single_window(windows[0]) xlayout = self.xlayout(1) xstart, xnum = next(xlayout) ylayout = self.variable_layout(window_count, self.biased_map) for i, (w, (ystart, ynum)) in enumerate(zip(windows, ylayout)): w.set_geometry(i, window_geometry(xstart, xnum, ystart, ynum)) # bottom blank rect self.bottom_blank_rect(windows[i]) # left, top and right blank rects self.simple_blank_rects(windows[0], windows[-1]) def minimal_borders(self, windows, active_window, needs_borders_map): last_i = len(windows) - 1 for i, w in enumerate(windows): if needs_borders_map[w.id]: yield all_borders continue if i == last_i: yield no_borders break if needs_borders_map[windows[i+1].id]: yield no_borders else: yield self.only_between_border def neighbors_for_window(self, window, windows): idx = windows.index(window) before = [] if window is windows[0] else [windows[idx-1]] after = [] if window is windows[-1] else [windows[idx+1]] if self.main_is_horizontal: return {'left': before, 'right': after, 'top': [], 'bottom': []} return {'top': before, 'bottom': after, 'left': [], 'right': []} # }}} class Horizontal(Vertical): # {{{ name = 'horizontal' main_is_horizontal = True vlayout = Layout.xlayout only_between_border = False, False, True, False def do_layout(self, windows, active_window_idx): window_count = len(windows) if window_count == 1: return self.layout_single_window(windows[0]) xlayout = self.variable_layout(window_count, self.biased_map) ylayout = self.ylayout(1) ystart, ynum = next(ylayout) for i, (w, (xstart, xnum)) in enumerate(zip(windows, xlayout)): w.set_geometry(i, window_geometry(xstart, xnum, ystart, ynum)) if i > 0: # between blank rect self.between_blank_rect(windows[i - 1], windows[i]) # left, top and right blank rects self.simple_blank_rects(windows[0], windows[-1]) # bottom blank rect self.blank_rects.append(Rect(windows[0].geometry.left, windows[0].geometry.bottom, windows[-1].geometry.right, central.bottom + 1)) # }}} # Instantiation {{{ all_layouts = {o.name: o for o in globals().values() if isinstance(o, type) and issubclass(o, Layout) and o is not Layout} def create_layout_object_for(name, os_window_id, tab_id, margin_width, single_window_margin_width, padding_width, border_width, layout_opts=''): key = name, os_window_id, tab_id, margin_width, single_window_margin_width, padding_width, border_width, layout_opts ans = create_layout_object_for.cache.get(key) if ans is None: name, layout_opts = name.partition(':')[::2] ans = create_layout_object_for.cache[key] = all_layouts[name]( os_window_id, tab_id, margin_width, single_window_margin_width, padding_width, border_width, layout_opts) return ans create_layout_object_for.cache = {} def evict_cached_layouts(tab_id): remove = [key for key in create_layout_object_for.cache if key[2] == tab_id] for key in remove: del create_layout_object_for.cache[key] # }}} kitty-0.15.0/kitty/line-buf.c000066400000000000000000000505501356737523400157760ustar00rootroot00000000000000/* * line-buf.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include "lineops.h" #include extern PyTypeObject Line_Type; extern PyTypeObject HistoryBuf_Type; static inline CPUCell* cpu_lineptr(LineBuf *linebuf, index_type y) { return linebuf->cpu_cell_buf + y * linebuf->xnum; } static inline GPUCell* gpu_lineptr(LineBuf *linebuf, index_type y) { return linebuf->gpu_cell_buf + y * linebuf->xnum; } static inline void clear_chars_to(LineBuf* linebuf, index_type y, char_type ch) { clear_chars_in_line(cpu_lineptr(linebuf, y), gpu_lineptr(linebuf, y), linebuf->xnum, ch); } void linebuf_clear(LineBuf *self, char_type ch) { zero_at_ptr_count(self->cpu_cell_buf, self->xnum * self->ynum); zero_at_ptr_count(self->gpu_cell_buf, self->xnum * self->ynum); zero_at_ptr_count(self->line_attrs, self->ynum); for (index_type i = 0; i < self->ynum; i++) self->line_map[i] = i; if (ch != 0) { for (index_type i = 0; i < self->ynum; i++) { clear_chars_to(self, i, ch); self->line_attrs[i] = TEXT_DIRTY_MASK; } } } void linebuf_mark_line_dirty(LineBuf *self, index_type y) { self->line_attrs[y] |= TEXT_DIRTY_MASK; } void linebuf_mark_line_clean(LineBuf *self, index_type y) { self->line_attrs[y] &= ~TEXT_DIRTY_MASK; } static PyObject* clear(LineBuf *self, PyObject *a UNUSED) { #define clear_doc "Clear all lines in this LineBuf" linebuf_clear(self, BLANK_CHAR); Py_RETURN_NONE; } static PyObject * new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { LineBuf *self; unsigned int xnum = 1, ynum = 1; if (!PyArg_ParseTuple(args, "II", &ynum, &xnum)) return NULL; if (xnum > 5000 || ynum > 50000) { PyErr_SetString(PyExc_ValueError, "Number of rows or columns is too large."); return NULL; } if (xnum * ynum == 0) { PyErr_SetString(PyExc_ValueError, "Cannot create an empty LineBuf"); return NULL; } self = (LineBuf *)type->tp_alloc(type, 0); if (self != NULL) { self->xnum = xnum; self->ynum = ynum; self->cpu_cell_buf = PyMem_Calloc(xnum * ynum, sizeof(CPUCell)); self->gpu_cell_buf = PyMem_Calloc(xnum * ynum, sizeof(GPUCell)); self->line_map = PyMem_Calloc(ynum, sizeof(index_type)); self->scratch = PyMem_Calloc(ynum, sizeof(index_type)); self->line_attrs = PyMem_Calloc(ynum, sizeof(line_attrs_type)); self->line = alloc_line(); if (self->cpu_cell_buf == NULL || self->gpu_cell_buf == NULL || self->line_map == NULL || self->scratch == NULL || self->line_attrs == NULL || self->line == NULL) { PyErr_NoMemory(); PyMem_Free(self->cpu_cell_buf); PyMem_Free(self->gpu_cell_buf); PyMem_Free(self->line_map); PyMem_Free(self->line_attrs); Py_CLEAR(self->line); Py_CLEAR(self); } else { self->line->xnum = xnum; for(index_type i = 0; i < ynum; i++) { self->line_map[i] = i; if (BLANK_CHAR != 0) clear_chars_to(self, i, BLANK_CHAR); } } } return (PyObject*)self; } static void dealloc(LineBuf* self) { PyMem_Free(self->cpu_cell_buf); PyMem_Free(self->gpu_cell_buf); PyMem_Free(self->line_map); PyMem_Free(self->line_attrs); PyMem_Free(self->scratch); Py_CLEAR(self->line); Py_TYPE(self)->tp_free((PyObject*)self); } static inline void init_line(LineBuf *lb, Line *l, index_type ynum) { l->cpu_cells = cpu_lineptr(lb, ynum); l->gpu_cells = gpu_lineptr(lb, ynum); } void linebuf_init_line(LineBuf *self, index_type idx) { self->line->ynum = idx; self->line->xnum = self->xnum; self->line->continued = self->line_attrs[idx] & CONTINUED_MASK ? true : false; self->line->has_dirty_text = self->line_attrs[idx] & TEXT_DIRTY_MASK ? true : false; init_line(self, self->line, self->line_map[idx]); } static PyObject* line(LineBuf *self, PyObject *y) { #define line_doc "Return the specified line as a Line object. Note the Line Object is a live view into the underlying buffer. And only a single line object can be used at a time." unsigned long idx = PyLong_AsUnsignedLong(y); if (idx >= self->ynum) { PyErr_SetString(PyExc_IndexError, "Line number too large"); return NULL; } linebuf_init_line(self, idx); Py_INCREF(self->line); return (PyObject*)self->line; } unsigned int linebuf_char_width_at(LineBuf *self, index_type x, index_type y) { return (gpu_lineptr(self, self->line_map[y])[x].attrs) & WIDTH_MASK; } void linebuf_set_attribute(LineBuf *self, unsigned int shift, unsigned int val) { for (index_type y = 0; y < self->ynum; y++) { set_attribute_on_line(gpu_lineptr(self, y), shift, val, self->xnum); self->line_attrs[y] |= TEXT_DIRTY_MASK; } } static PyObject* set_attribute(LineBuf *self, PyObject *args) { #define set_attribute_doc "set_attribute(which, val) -> Set the attribute on all cells in the line." unsigned int shift, val; if (!PyArg_ParseTuple(args, "II", &shift, &val)) return NULL; if (shift < DECORATION_SHIFT || shift > DIM_SHIFT) { PyErr_SetString(PyExc_ValueError, "Unknown attribute"); return NULL; } linebuf_set_attribute(self, shift, val); Py_RETURN_NONE; } static PyObject* set_continued(LineBuf *self, PyObject *args) { #define set_continued_doc "set_continued(y, val) -> Set the continued values for the specified line." unsigned int y; int val; if (!PyArg_ParseTuple(args, "Ip", &y, &val)) return NULL; if (y >= self->ynum) { PyErr_SetString(PyExc_ValueError, "Out of bounds."); return NULL; } if (val) self->line_attrs[y] |= CONTINUED_MASK; else self->line_attrs[y] &= ~CONTINUED_MASK; Py_RETURN_NONE; } static PyObject* dirty_lines(LineBuf *self, PyObject *a UNUSED) { #define dirty_lines_doc "dirty_lines() -> Line numbers of all lines that have dirty text." PyObject *ans = PyList_New(0); for (index_type i = 0; i < self->ynum; i++) { if (self->line_attrs[i] & TEXT_DIRTY_MASK) { PyList_Append(ans, PyLong_FromUnsignedLong(i)); } } return ans; } static inline bool allocate_line_storage(Line *line, bool initialize) { if (initialize) { line->cpu_cells = PyMem_Calloc(line->xnum, sizeof(CPUCell)); line->gpu_cells = PyMem_Calloc(line->xnum, sizeof(GPUCell)); if (line->cpu_cells == NULL || line->gpu_cells) { PyErr_NoMemory(); return false; } if (BLANK_CHAR != 0) clear_chars_in_line(line->cpu_cells, line->gpu_cells, line->xnum, BLANK_CHAR); } else { line->cpu_cells = PyMem_Malloc(line->xnum * sizeof(CPUCell)); line->gpu_cells = PyMem_Malloc(line->xnum * sizeof(GPUCell)); if (line->cpu_cells == NULL || line->gpu_cells == NULL) { PyErr_NoMemory(); return false; } } line->needs_free = 1; return true; } static inline PyObject* create_line_copy_inner(LineBuf* self, index_type y) { Line src, *line; line = alloc_line(); if (line == NULL) return PyErr_NoMemory(); src.xnum = self->xnum; line->xnum = self->xnum; if (!allocate_line_storage(line, 0)) { Py_CLEAR(line); return PyErr_NoMemory(); } line->ynum = y; line->continued = self->line_attrs[y] & CONTINUED_MASK ? true : false; line->has_dirty_text = self->line_attrs[y] & TEXT_DIRTY_MASK ? true : false; init_line(self, &src, self->line_map[y]); copy_line(&src, line); return (PyObject*)line; } static PyObject* create_line_copy(LineBuf *self, PyObject *ynum) { #define create_line_copy_doc "Create a new Line object that is a copy of the line at ynum. Note that this line has its own copy of the data and does not refer to the data in the LineBuf." index_type y = (index_type)PyLong_AsUnsignedLong(ynum); if (y >= self->ynum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } return create_line_copy_inner(self, y); } static PyObject* copy_line_to(LineBuf *self, PyObject *args) { #define copy_line_to_doc "Copy the line at ynum to the provided line object." unsigned int y; Line src, *dest; if (!PyArg_ParseTuple(args, "IO!", &y, &Line_Type, &dest)) return NULL; src.xnum = self->xnum; dest->xnum = self->xnum; dest->ynum = y; dest->continued = self->line_attrs[y] & CONTINUED_MASK; dest->has_dirty_text = self->line_attrs[y] & TEXT_DIRTY_MASK; init_line(self, &src, self->line_map[y]); copy_line(&src, dest); Py_RETURN_NONE; } static inline void clear_line_(Line *l, index_type xnum) { zero_at_ptr_count(l->cpu_cells, xnum); zero_at_ptr_count(l->gpu_cells, xnum); if (BLANK_CHAR != 0) clear_chars_in_line(l->cpu_cells, l->gpu_cells, xnum, BLANK_CHAR); l->has_dirty_text = false; } void linebuf_clear_line(LineBuf *self, index_type y) { Line l; init_line(self, &l, self->line_map[y]); clear_line_(&l, self->xnum); self->line_attrs[y] = 0; } static PyObject* clear_line(LineBuf *self, PyObject *val) { #define clear_line_doc "clear_line(y) -> Clear the specified line" index_type y = (index_type)PyLong_AsUnsignedLong(val); if (y >= self->ynum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } linebuf_clear_line(self, y); Py_RETURN_NONE; } void linebuf_index(LineBuf* self, index_type top, index_type bottom) { if (top >= self->ynum - 1 || bottom >= self->ynum || bottom <= top) return; index_type old_top = self->line_map[top]; line_attrs_type old_attrs = self->line_attrs[top]; for (index_type i = top; i < bottom; i++) { self->line_map[i] = self->line_map[i + 1]; self->line_attrs[i] = self->line_attrs[i + 1]; } self->line_map[bottom] = old_top; self->line_attrs[bottom] = old_attrs; } static PyObject* pyw_index(LineBuf *self, PyObject *args) { #define index_doc "index(top, bottom) -> Scroll all lines in the range [top, bottom] by one upwards. After scrolling, bottom will be top." unsigned int top, bottom; if (!PyArg_ParseTuple(args, "II", &top, &bottom)) return NULL; linebuf_index(self, top, bottom); Py_RETURN_NONE; } void linebuf_reverse_index(LineBuf *self, index_type top, index_type bottom) { if (top >= self->ynum - 1 || bottom >= self->ynum || bottom <= top) return; index_type old_bottom = self->line_map[bottom]; line_attrs_type old_attrs = self->line_attrs[bottom]; for (index_type i = bottom; i > top; i--) { self->line_map[i] = self->line_map[i - 1]; self->line_attrs[i] = self->line_attrs[i - 1]; } self->line_map[top] = old_bottom; self->line_attrs[top] = old_attrs; } static PyObject* reverse_index(LineBuf *self, PyObject *args) { #define reverse_index_doc "reverse_index(top, bottom) -> Scroll all lines in the range [top, bottom] by one down. After scrolling, top will be bottom." unsigned int top, bottom; if (!PyArg_ParseTuple(args, "II", &top, &bottom)) return NULL; linebuf_reverse_index(self, top, bottom); Py_RETURN_NONE; } static PyObject* is_continued(LineBuf *self, PyObject *val) { #define is_continued_doc "is_continued(y) -> Whether the line y is continued or not" unsigned long y = PyLong_AsUnsignedLong(val); if (y >= self->ynum) { PyErr_SetString(PyExc_ValueError, "Out of bounds."); return NULL; } if (self->line_attrs[y] & CONTINUED_MASK) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } void linebuf_insert_lines(LineBuf *self, unsigned int num, unsigned int y, unsigned int bottom) { index_type i; if (y >= self->ynum || y > bottom || bottom >= self->ynum) return; index_type ylimit = bottom + 1; num = MIN(ylimit - y, num); if (num > 0) { for (i = ylimit - num; i < ylimit; i++) { self->scratch[i] = self->line_map[i]; } for (i = ylimit - 1; i >= y + num; i--) { self->line_map[i] = self->line_map[i - num]; self->line_attrs[i] = self->line_attrs[i - num]; } if (y + num < self->ynum) self->line_attrs[y + num] &= ~CONTINUED_MASK; for (i = 0; i < num; i++) { self->line_map[y + i] = self->scratch[ylimit - num + i]; } Line l; for (i = y; i < y + num; i++) { init_line(self, &l, self->line_map[i]); clear_line_(&l, self->xnum); self->line_attrs[i] = 0; } } } static PyObject* insert_lines(LineBuf *self, PyObject *args) { #define insert_lines_doc "insert_lines(num, y, bottom) -> Insert num blank lines at y, only changing lines in the range [y, bottom]." unsigned int y, num, bottom; if (!PyArg_ParseTuple(args, "III", &num, &y, &bottom)) return NULL; linebuf_insert_lines(self, num, y, bottom); Py_RETURN_NONE; } void linebuf_delete_lines(LineBuf *self, index_type num, index_type y, index_type bottom) { index_type i; index_type ylimit = bottom + 1; num = MIN(bottom + 1 - y, num); if (y >= self->ynum || y > bottom || bottom >= self->ynum || num < 1) return; for (i = y; i < y + num; i++) { self->scratch[i] = self->line_map[i]; } for (i = y; i < ylimit && i + num < self->ynum; i++) { self->line_map[i] = self->line_map[i + num]; self->line_attrs[i] = self->line_attrs[i + num]; } self->line_attrs[y] &= ~CONTINUED_MASK; for (i = 0; i < num; i++) { self->line_map[ylimit - num + i] = self->scratch[y + i]; } Line l; for (i = ylimit - num; i < ylimit; i++) { init_line(self, &l, self->line_map[i]); clear_line_(&l, self->xnum); self->line_attrs[i] = 0; } } static PyObject* delete_lines(LineBuf *self, PyObject *args) { #define delete_lines_doc "delete_lines(num, y, bottom) -> Delete num lines at y, only changing lines in the range [y, bottom]." unsigned int y, num, bottom; if (!PyArg_ParseTuple(args, "III", &num, &y, &bottom)) return NULL; linebuf_delete_lines(self, num, y, bottom); Py_RETURN_NONE; } static PyObject* as_ansi(LineBuf *self, PyObject *callback) { #define as_ansi_doc "as_ansi(callback) -> The contents of this buffer as ANSI escaped text. callback is called with each successive line." static Py_UCS4 t[5120]; Line l = {.xnum=self->xnum}; // remove trailing empty lines index_type ylimit = self->ynum - 1; bool truncated; const GPUCell *prev_cell = NULL; do { init_line(self, (&l), self->line_map[ylimit]); if (line_as_ansi(&l, t, 5120, &truncated, &prev_cell) != 0) break; ylimit--; } while(ylimit > 0); for(index_type i = 0; i <= ylimit; i++) { l.continued = ((i < self->ynum - 1) ? self->line_attrs[i+1] : self->line_attrs[i]) & CONTINUED_MASK; init_line(self, (&l), self->line_map[i]); index_type num = line_as_ansi(&l, t, 5120, &truncated, &prev_cell); if (!(l.continued) && num < 5119) t[num++] = 10; // 10 = \n PyObject *ans = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, t, num); if (ans == NULL) return PyErr_NoMemory(); PyObject *ret = PyObject_CallFunctionObjArgs(callback, ans, NULL); Py_CLEAR(ans); if (ret == NULL) return NULL; Py_CLEAR(ret); } Py_RETURN_NONE; } static inline Line* get_line(LineBuf *self, index_type y) { linebuf_init_line(self, y); return self->line; } static PyObject* as_text(LineBuf *self, PyObject *args) { as_text_generic(args, self, get_line, self->ynum, self->xnum); } static PyObject* __str__(LineBuf *self) { PyObject *lines = PyTuple_New(self->ynum); if (lines == NULL) return PyErr_NoMemory(); for (index_type i = 0; i < self->ynum; i++) { init_line(self, self->line, self->line_map[i]); PyObject *t = line_as_unicode(self->line); if (t == NULL) { Py_CLEAR(lines); return NULL; } PyTuple_SET_ITEM(lines, i, t); } PyObject *sep = PyUnicode_FromString("\n"); PyObject *ans = PyUnicode_Join(sep, lines); Py_CLEAR(lines); Py_CLEAR(sep); return ans; } // Boilerplate {{{ static PyObject* copy_old(LineBuf *self, PyObject *y); #define copy_old_doc "Copy the contents of the specified LineBuf to this LineBuf. Both must have the same number of columns, but the number of lines can be different, in which case the bottom lines are copied." static PyObject* rewrap(LineBuf *self, PyObject *args); #define rewrap_doc "rewrap(new_screen) -> Fill up new screen (which can have different size to this screen) with as much of the contents of this screen as will fit. Return lines that overflow." static PyMethodDef methods[] = { METHOD(line, METH_O) METHOD(clear_line, METH_O) METHOD(copy_old, METH_O) METHOD(copy_line_to, METH_VARARGS) METHOD(create_line_copy, METH_O) METHOD(rewrap, METH_VARARGS) METHOD(clear, METH_NOARGS) METHOD(as_ansi, METH_O) METHODB(as_text, METH_VARARGS), METHOD(set_attribute, METH_VARARGS) METHOD(set_continued, METH_VARARGS) METHOD(dirty_lines, METH_NOARGS) {"index", (PyCFunction)pyw_index, METH_VARARGS, NULL}, METHOD(reverse_index, METH_VARARGS) METHOD(insert_lines, METH_VARARGS) METHOD(delete_lines, METH_VARARGS) METHOD(is_continued, METH_O) {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyMemberDef members[] = { {"xnum", T_UINT, offsetof(LineBuf, xnum), READONLY, "xnum"}, {"ynum", T_UINT, offsetof(LineBuf, ynum), READONLY, "ynum"}, {NULL} /* Sentinel */ }; PyTypeObject LineBuf_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.LineBuf", .tp_basicsize = sizeof(LineBuf), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "Line buffers", .tp_methods = methods, .tp_members = members, .tp_str = (reprfunc)__str__, .tp_new = new }; INIT_TYPE(LineBuf) // }}} static PyObject* copy_old(LineBuf *self, PyObject *y) { if (!PyObject_TypeCheck(y, &LineBuf_Type)) { PyErr_SetString(PyExc_TypeError, "Not a LineBuf object"); return NULL; } LineBuf *other = (LineBuf*)y; if (other->xnum != self->xnum) { PyErr_SetString(PyExc_ValueError, "LineBuf has a different number of columns"); return NULL; } Line sl = {{0}}, ol = {{0}}; sl.xnum = self->xnum; ol.xnum = other->xnum; for (index_type i = 0; i < MIN(self->ynum, other->ynum); i++) { index_type s = self->ynum - 1 - i, o = other->ynum - 1 - i; self->line_attrs[s] = other->line_attrs[o]; s = self->line_map[s]; o = other->line_map[o]; init_line(self, &sl, s); init_line(other, &ol, o); copy_line(&ol, &sl); } Py_RETURN_NONE; } #include "rewrap.h" void linebuf_rewrap(LineBuf *self, LineBuf *other, index_type *num_content_lines_before, index_type *num_content_lines_after, HistoryBuf *historybuf, index_type *track_x, index_type *track_y) { index_type first, i; bool is_empty = true; // Fast path if (other->xnum == self->xnum && other->ynum == self->ynum) { memcpy(other->line_map, self->line_map, sizeof(index_type) * self->ynum); memcpy(other->line_attrs, self->line_attrs, sizeof(bool) * self->ynum); memcpy(other->cpu_cell_buf, self->cpu_cell_buf, self->xnum * self->ynum * sizeof(CPUCell)); memcpy(other->gpu_cell_buf, self->gpu_cell_buf, self->xnum * self->ynum * sizeof(GPUCell)); *num_content_lines_before = self->ynum; *num_content_lines_after = self->ynum; return; } // Find the first line that contains some content first = self->ynum; do { first--; CPUCell *cells = cpu_lineptr(self, self->line_map[first]); for(i = 0; i < self->xnum; i++) { if ((cells[i].ch) != BLANK_CHAR) { is_empty = false; break; } } } while(is_empty && first > 0); if (is_empty) { // All lines are empty *num_content_lines_after = 0; *num_content_lines_before = 0; return; } rewrap_inner(self, other, first + 1, historybuf, track_x, track_y); *num_content_lines_after = other->line->ynum + 1; for (i = 0; i < *num_content_lines_after; i++) other->line_attrs[i] |= TEXT_DIRTY_MASK; *num_content_lines_before = first + 1; } static PyObject* rewrap(LineBuf *self, PyObject *args) { LineBuf* other; HistoryBuf *historybuf; unsigned int nclb, ncla; if (!PyArg_ParseTuple(args, "O!O!", &LineBuf_Type, &other, &HistoryBuf_Type, &historybuf)) return NULL; index_type x = 0, y = 0; linebuf_rewrap(self, other, &nclb, &ncla, historybuf, &x, &y); return Py_BuildValue("II", nclb, ncla); } LineBuf *alloc_linebuf(unsigned int lines, unsigned int columns) { return (LineBuf*)new(&LineBuf_Type, Py_BuildValue("II", lines, columns), NULL); } kitty-0.15.0/kitty/line.c000066400000000000000000000635431356737523400152320ustar00rootroot00000000000000/* * line.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include "unicode-data.h" #include "lineops.h" #include "charsets.h" extern PyTypeObject Cursor_Type; static PyObject * new(PyTypeObject UNUSED *type, PyObject UNUSED *args, PyObject UNUSED *kwds) { PyErr_SetString(PyExc_TypeError, "Line objects cannot be instantiated directly, create them using LineBuf.line()"); return NULL; } static void dealloc(Line* self) { if (self->needs_free) { PyMem_Free(self->cpu_cells); PyMem_Free(self->gpu_cells); } Py_TYPE(self)->tp_free((PyObject*)self); } unsigned int line_length(Line *self) { index_type last = self->xnum - 1; for (index_type i = 0; i < self->xnum; i++) { if ((self->cpu_cells[last - i].ch) != BLANK_CHAR) return self->xnum - i; } return 0; } PyObject* cell_text(CPUCell *cell) { PyObject *ans; unsigned num = 1; static Py_UCS4 buf[arraysz(cell->cc_idx) + 1]; buf[0] = cell->ch; for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) buf[num++] = codepoint_for_mark(cell->cc_idx[i]); ans = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, num); return ans; } // URL detection {{{ static const char* url_prefixes[4] = {"https", "http", "file", "ftp"}; static size_t url_prefix_lengths[sizeof(url_prefixes)/sizeof(url_prefixes[0])] = {0}; static inline index_type find_colon_slash(Line *self, index_type x, index_type limit) { // Find :// at or before x index_type pos = x; enum URL_PARSER_STATES {ANY, FIRST_SLASH, SECOND_SLASH}; enum URL_PARSER_STATES state = ANY; limit = MAX(2u, limit); if (pos < limit) return 0; do { char_type ch = self->cpu_cells[pos].ch; if (!is_url_char(ch)) return false; if (pos == x) { if (ch == ':') { if (pos + 2 < self->xnum && self->cpu_cells[pos+1].ch == '/' && self->cpu_cells[pos + 2].ch == '/') state = SECOND_SLASH; } else if (ch == '/') { if (pos + 1 < self->xnum && self->cpu_cells[pos+1].ch == '/') state = FIRST_SLASH; } } switch(state) { case ANY: if (ch == '/') state = FIRST_SLASH; break; case FIRST_SLASH: state = ch == '/' ? SECOND_SLASH : ANY; break; case SECOND_SLASH: if (ch == ':') return pos; state = ANY; break; } pos--; } while(pos >= limit); return 0; } static inline bool prefix_matches(Line *self, index_type at, const char* prefix, index_type prefix_len) { if (prefix_len > at) return false; index_type p, i; for (p = at - prefix_len, i = 0; i < prefix_len && p < self->xnum; i++, p++) { if ((self->cpu_cells[p].ch) != (unsigned char)prefix[i]) return false; } return i == prefix_len; } static inline bool has_url_prefix_at(Line *self, index_type at, index_type min_prefix_len, index_type *ans) { if (UNLIKELY(!url_prefix_lengths[0])) { for (index_type i = 0; i < sizeof(url_prefixes)/sizeof(url_prefixes[0]); i++) url_prefix_lengths[i] = strlen(url_prefixes[i]); } for (index_type i = 0; i < sizeof(url_prefixes)/sizeof(url_prefixes[0]); i++) { index_type prefix_len = url_prefix_lengths[i]; if (at < prefix_len || prefix_len < min_prefix_len) continue; if (prefix_matches(self, at, url_prefixes[i], prefix_len)) { *ans = at - prefix_len; return true; } } return false; } #define MAX_URL_SCHEME_LEN 5 #define MIN_URL_LEN 5 static inline bool has_url_beyond(Line *self, index_type x) { if (self->xnum <= x + MIN_URL_LEN + 3) return false; for (index_type i = x; i < MIN(x + MIN_URL_LEN + 3, self->xnum); i++) { if (!is_url_char(self->cpu_cells[i].ch)) return false; } return true; } index_type line_url_start_at(Line *self, index_type x) { // Find the starting cell for a URL that contains the position x. A URL is defined as // known-prefix://url-chars. If no URL is found self->xnum is returned. if (x >= self->xnum || self->xnum <= MIN_URL_LEN + 3) return self->xnum; index_type ds_pos = 0, t; // First look for :// ahead of x if (self->xnum - x > MAX_URL_SCHEME_LEN + 3) ds_pos = find_colon_slash(self, x + MAX_URL_SCHEME_LEN + 3, x < 2 ? 0 : x - 2); if (ds_pos != 0 && has_url_beyond(self, ds_pos)) { if (has_url_prefix_at(self, ds_pos, ds_pos > x ? ds_pos - x: 0, &t)) return t; } ds_pos = find_colon_slash(self, x, 0); if (ds_pos == 0 || self->xnum < ds_pos + MIN_URL_LEN + 3 || !has_url_beyond(self, ds_pos)) return self->xnum; if (has_url_prefix_at(self, ds_pos, 0, &t)) return t; return self->xnum; } index_type line_url_end_at(Line *self, index_type x, bool check_short, char_type sentinel) { index_type ans = x; if (x >= self->xnum || (check_short && self->xnum <= MIN_URL_LEN + 3)) return 0; if (sentinel) { while (ans < self->xnum && self->cpu_cells[ans].ch != sentinel && is_url_char(self->cpu_cells[ans].ch)) ans++; } else { while (ans < self->xnum && is_url_char(self->cpu_cells[ans].ch)) ans++; } if (ans) ans--; while (ans > x && can_strip_from_end_of_url(self->cpu_cells[ans].ch)) ans--; return ans; } static PyObject* url_start_at(Line *self, PyObject *x) { #define url_start_at_doc "url_start_at(x) -> Return the start cell number for a URL containing x or self->xnum if not found" return PyLong_FromUnsignedLong((unsigned long)line_url_start_at(self, PyLong_AsUnsignedLong(x))); } static PyObject* url_end_at(Line *self, PyObject *args) { #define url_end_at_doc "url_end_at(x) -> Return the end cell number for a URL containing x or 0 if not found" unsigned int x, sentinel = 0; if (!PyArg_ParseTuple(args, "I|I", &x, &sentinel)) return NULL; return PyLong_FromUnsignedLong((unsigned long)line_url_end_at(self, x, true, sentinel)); } // }}} static PyObject* text_at(Line* self, Py_ssize_t xval) { #define text_at_doc "[x] -> Return the text in the specified cell" if ((unsigned)xval >= self->xnum) { PyErr_SetString(PyExc_IndexError, "Column number out of bounds"); return NULL; } return cell_text(self->cpu_cells + xval); } size_t cell_as_unicode(CPUCell *cell, bool include_cc, Py_UCS4 *buf, char_type zero_char) { size_t n = 1; buf[0] = cell->ch ? cell->ch : zero_char; if (include_cc) { for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) buf[n++] = codepoint_for_mark(cell->cc_idx[i]); } return n; } size_t cell_as_unicode_for_fallback(CPUCell *cell, Py_UCS4 *buf) { size_t n = 1; buf[0] = cell->ch ? cell->ch : ' '; if (buf[0] != '\t') { for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) { if (cell->cc_idx[i] != VS15 && cell->cc_idx[i] != VS16) buf[n++] = codepoint_for_mark(cell->cc_idx[i]); } } else buf[0] = ' '; return n; } size_t cell_as_utf8(CPUCell *cell, bool include_cc, char *buf, char_type zero_char) { char_type ch = cell->ch ? cell->ch : zero_char; if (ch == '\t') { include_cc = false; } size_t n = encode_utf8(ch, buf); if (include_cc) { for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) n += encode_utf8(codepoint_for_mark(cell->cc_idx[i]), buf + n); } buf[n] = 0; return n; } size_t cell_as_utf8_for_fallback(CPUCell *cell, char *buf) { char_type ch = cell->ch ? cell->ch : ' '; bool include_cc = true; if (ch == '\t') { ch = ' '; include_cc = false; } size_t n = encode_utf8(ch, buf); if (include_cc) { for (unsigned i = 0; i < arraysz(cell->cc_idx) && cell->cc_idx[i]; i++) { if (cell->cc_idx[i] != VS15 && cell->cc_idx[i] != VS16) { n += encode_utf8(codepoint_for_mark(cell->cc_idx[i]), buf + n); } } } buf[n] = 0; return n; } PyObject* unicode_in_range(Line *self, index_type start, index_type limit, bool include_cc, char leading_char) { size_t n = 0; static Py_UCS4 buf[4096]; if (leading_char) buf[n++] = leading_char; char_type previous_width = 0; for(index_type i = start; i < limit && n < arraysz(buf) - 2 - arraysz(self->cpu_cells->cc_idx); i++) { char_type ch = self->cpu_cells[i].ch; if (ch == 0) { if (previous_width == 2) { previous_width = 0; continue; }; } if (ch == '\t') { buf[n++] = '\t'; unsigned num_cells_to_skip_for_tab = self->cpu_cells[i].cc_idx[0]; while (num_cells_to_skip_for_tab && i + 1 < limit && self->cpu_cells[i+1].ch == ' ') { i++; num_cells_to_skip_for_tab--; } } else { n += cell_as_unicode(self->cpu_cells + i, include_cc, buf + n, ' '); } previous_width = self->gpu_cells[i].attrs & WIDTH_MASK; } return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, n); } PyObject * line_as_unicode(Line* self) { return unicode_in_range(self, 0, xlimit_for_line(self), true, 0); } static PyObject* sprite_at(Line* self, PyObject *x) { #define sprite_at_doc "[x] -> Return the sprite in the specified cell" unsigned long xval = PyLong_AsUnsignedLong(x); if (xval >= self->xnum) { PyErr_SetString(PyExc_IndexError, "Column number out of bounds"); return NULL; } GPUCell *c = self->gpu_cells + xval; return Py_BuildValue("HHH", c->sprite_x, c->sprite_y, c->sprite_z); } static inline bool write_sgr(const char *val, Py_UCS4 *buf, index_type buflen, index_type *i) { static char s[128]; unsigned int num = snprintf(s, sizeof(s), "\x1b[%sm", val); if (buflen - (*i) < num + 3) return false; for(unsigned int si=0; si < num; si++) buf[(*i)++] = s[si]; return true; } index_type line_as_ansi(Line *self, Py_UCS4 *buf, index_type buflen, bool *truncated, const GPUCell** prev_cell) { #define WRITE_SGR(val) { if (!write_sgr(val, buf, buflen, &i)) { *truncated = true; return i; } } #define WRITE_CH(val) if (i > buflen - 1) { *truncated = true; return i; } buf[i++] = val; index_type limit = xlimit_for_line(self), i=0; *truncated = false; if (limit == 0) return 0; char_type previous_width = 0; static const GPUCell blank_cell = { 0 }; GPUCell *cell; if (*prev_cell == NULL) *prev_cell = &blank_cell; for (index_type pos=0; pos < limit; pos++) { char_type ch = self->cpu_cells[pos].ch; if (ch == 0) { if (previous_width == 2) { previous_width = 0; continue; } ch = ' '; } cell = &self->gpu_cells[pos]; #define CMP_ATTRS (cell->attrs & ATTRS_MASK_WITHOUT_WIDTH) != ((*prev_cell)->attrs & ATTRS_MASK_WITHOUT_WIDTH) #define CMP(x) cell->x != (*prev_cell)->x if (CMP_ATTRS || CMP(fg) || CMP(bg) || CMP(decoration_fg)) { const char *sgr = cell_as_sgr(cell, *prev_cell); if (*sgr) WRITE_SGR(sgr); } *prev_cell = cell; WRITE_CH(ch); if (ch == '\t') { unsigned num_cells_to_skip_for_tab = self->cpu_cells[pos].cc_idx[0]; while (num_cells_to_skip_for_tab && pos + 1 < limit && self->cpu_cells[pos+1].ch == ' ') { num_cells_to_skip_for_tab--; pos++; } } else { for(unsigned c = 0; c < arraysz(self->cpu_cells[pos].cc_idx) && self->cpu_cells[pos].cc_idx[c]; c++) { WRITE_CH(codepoint_for_mark(self->cpu_cells[pos].cc_idx[c])); } } previous_width = cell->attrs & WIDTH_MASK; } return i; #undef CMP_ATTRS #undef CMP #undef WRITE_SGR #undef WRITE_CH } static PyObject* as_ansi(Line* self, PyObject *a UNUSED) { #define as_ansi_doc "Return the line's contents with ANSI (SGR) escape codes for formatting" static Py_UCS4 t[5120] = {0}; bool truncated; const GPUCell *prev_cell = NULL; index_type num = line_as_ansi(self, t, 5120, &truncated, &prev_cell); PyObject *ans = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, t, num); return ans; } static PyObject* is_continued(Line* self, PyObject *a UNUSED) { #define is_continued_doc "Return the line's continued flag" PyObject *ans = self->continued ? Py_True : Py_False; Py_INCREF(ans); return ans; } static PyObject* __repr__(Line* self) { PyObject *s = line_as_unicode(self); if (s == NULL) return NULL; PyObject *ans = PyObject_Repr(s); Py_CLEAR(s); return ans; } static PyObject* width(Line *self, PyObject *val) { #define width_doc "width(x) -> the width of the character at x" unsigned long x = PyLong_AsUnsignedLong(val); if (x >= self->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } char_type attrs = self->gpu_cells[x].attrs; return PyLong_FromUnsignedLong((unsigned long) (attrs & WIDTH_MASK)); } void line_add_combining_char(Line *self, uint32_t ch, unsigned int x) { CPUCell *cell = self->cpu_cells + x; if (!cell->ch) { if (x > 0 && (self->gpu_cells[x-1].attrs & WIDTH_MASK) == 2 && self->cpu_cells[x-1].ch) cell = self->cpu_cells + x - 1; else return; // don't allow adding combining chars to a null cell } for (unsigned i = 0; i < arraysz(cell->cc_idx); i++) { if (!cell->cc_idx[i]) { cell->cc_idx[i] = mark_for_codepoint(ch); return; } } cell->cc_idx[arraysz(cell->cc_idx) - 1] = mark_for_codepoint(ch); } static PyObject* add_combining_char(Line* self, PyObject *args) { #define add_combining_char_doc "add_combining_char(x, ch) -> Add the specified character as a combining char to the specified cell." int new_char; unsigned int x; if (!PyArg_ParseTuple(args, "IC", &x, &new_char)) return NULL; if (x >= self->xnum) { PyErr_SetString(PyExc_ValueError, "Column index out of bounds"); return NULL; } line_add_combining_char(self, new_char, x); Py_RETURN_NONE; } static PyObject* set_text(Line* self, PyObject *args) { #define set_text_doc "set_text(src, offset, sz, cursor) -> Set the characters and attributes from the specified text and cursor" PyObject *src; Py_ssize_t offset, sz, limit; char_type attrs; Cursor *cursor; int kind; void *buf; if (!PyArg_ParseTuple(args, "UnnO!", &src, &offset, &sz, &Cursor_Type, &cursor)) return NULL; if (PyUnicode_READY(src) != 0) { PyErr_NoMemory(); return NULL; } kind = PyUnicode_KIND(src); buf = PyUnicode_DATA(src); limit = offset + sz; if (PyUnicode_GET_LENGTH(src) < limit) { PyErr_SetString(PyExc_ValueError, "Out of bounds offset/sz"); return NULL; } attrs = CURSOR_TO_ATTRS(cursor, 1); color_type fg = (cursor->fg & COL_MASK), bg = cursor->bg & COL_MASK; color_type dfg = cursor->decoration_fg & COL_MASK; for (index_type i = cursor->x; offset < limit && i < self->xnum; i++, offset++) { self->cpu_cells[i].ch = (PyUnicode_READ(kind, buf, offset)); self->gpu_cells[i].attrs = attrs; self->gpu_cells[i].fg = fg; self->gpu_cells[i].bg = bg; self->gpu_cells[i].decoration_fg = dfg; memset(self->cpu_cells[i].cc_idx, 0, sizeof(self->cpu_cells[i].cc_idx)); } Py_RETURN_NONE; } static PyObject* cursor_from(Line* self, PyObject *args) { #define cursor_from_doc "cursor_from(x, y=0) -> Create a cursor object based on the formatting attributes at the specified x position. The y value of the cursor is set as specified." unsigned int x, y = 0; Cursor* ans; if (!PyArg_ParseTuple(args, "I|I", &x, &y)) return NULL; if (x >= self->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds x"); return NULL; } ans = alloc_cursor(); if (ans == NULL) { PyErr_NoMemory(); return NULL; } ans->x = x; ans->y = y; char_type attrs = self->gpu_cells[x].attrs; ATTRS_TO_CURSOR(attrs, ans); ans->fg = self->gpu_cells[x].fg; ans->bg = self->gpu_cells[x].bg; ans->decoration_fg = self->gpu_cells[x].decoration_fg & COL_MASK; return (PyObject*)ans; } void line_clear_text(Line *self, unsigned int at, unsigned int num, char_type ch) { attrs_type width = ch ? 1 : 0; #define PREFIX \ for (index_type i = at; i < MIN(self->xnum, at + num); i++) { \ self->cpu_cells[i].ch = ch; memset(self->cpu_cells[i].cc_idx, 0, sizeof(self->cpu_cells[i].cc_idx)); \ self->gpu_cells[i].attrs = (self->gpu_cells[i].attrs & ATTRS_MASK_WITHOUT_WIDTH) | width; \ } if (CHAR_IS_BLANK(ch)) { PREFIX } else { PREFIX } } static PyObject* clear_text(Line* self, PyObject *args) { #define clear_text_doc "clear_text(at, num, ch=BLANK_CHAR) -> Clear characters in the specified range, preserving formatting." unsigned int at, num; int ch = BLANK_CHAR; if (!PyArg_ParseTuple(args, "II|C", &at, &num, &ch)) return NULL; line_clear_text(self, at, num, ch); Py_RETURN_NONE; } void line_apply_cursor(Line *self, Cursor *cursor, unsigned int at, unsigned int num, bool clear_char) { char_type attrs = CURSOR_TO_ATTRS(cursor, 1); color_type fg = (cursor->fg & COL_MASK), bg = (cursor->bg & COL_MASK); color_type dfg = cursor->decoration_fg & COL_MASK; if (!clear_char) attrs = attrs & ATTRS_MASK_WITHOUT_WIDTH; for (index_type i = at; i < self->xnum && i < at + num; i++) { if (clear_char) { self->cpu_cells[i].ch = BLANK_CHAR; memset(self->cpu_cells[i].cc_idx, 0, sizeof(self->cpu_cells[i].cc_idx)); self->gpu_cells[i].attrs = attrs; clear_sprite_position(self->gpu_cells[i]); } else { attrs_type w = self->gpu_cells[i].attrs & WIDTH_MASK; self->gpu_cells[i].attrs = attrs | w; } self->gpu_cells[i].fg = fg; self->gpu_cells[i].bg = bg; self->gpu_cells[i].decoration_fg = dfg; } } static PyObject* apply_cursor(Line* self, PyObject *args) { #define apply_cursor_doc "apply_cursor(cursor, at=0, num=1, clear_char=False) -> Apply the formatting attributes from cursor to the specified characters in this line." Cursor* cursor; unsigned int at=0, num=1; int clear_char = 0; if (!PyArg_ParseTuple(args, "O!|IIp", &Cursor_Type, &cursor, &at, &num, &clear_char)) return NULL; line_apply_cursor(self, cursor, at, num, clear_char & 1); Py_RETURN_NONE; } void line_right_shift(Line *self, unsigned int at, unsigned int num) { for(index_type i = self->xnum - 1; i >= at + num; i--) { COPY_SELF_CELL(i - num, i) } // Check if a wide character was split at the right edge char_type w = (self->gpu_cells[self->xnum - 1].attrs) & WIDTH_MASK; if (w != 1) { self->cpu_cells[self->xnum - 1].ch = BLANK_CHAR; self->gpu_cells[self->xnum - 1].attrs = BLANK_CHAR ? 1 : 0; clear_sprite_position(self->gpu_cells[self->xnum - 1]); } } static PyObject* right_shift(Line *self, PyObject *args) { #define right_shift_doc "right_shift(at, num) -> ..." unsigned int at, num; if (!PyArg_ParseTuple(args, "II", &at, &num)) return NULL; if (at >= self->xnum || at + num > self->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } if (num > 0) { line_right_shift(self, at, num); } Py_RETURN_NONE; } static PyObject* left_shift(Line *self, PyObject *args) { #define left_shift_doc "left_shift(at, num) -> ..." unsigned int at, num; if (!PyArg_ParseTuple(args, "II", &at, &num)) return NULL; if (at >= self->xnum || at + num > self->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } if (num > 0) left_shift_line(self, at, num); Py_RETURN_NONE; } void line_set_char(Line *self, unsigned int at, uint32_t ch, unsigned int width, Cursor *cursor, bool UNUSED is_second) { if (cursor == NULL) { self->gpu_cells[at].attrs = (self->gpu_cells[at].attrs & ATTRS_MASK_WITHOUT_WIDTH) | width; } else { self->gpu_cells[at].attrs = CURSOR_TO_ATTRS(cursor, width & WIDTH_MASK); self->gpu_cells[at].fg = (cursor->fg & COL_MASK); self->gpu_cells[at].bg = (cursor->bg & COL_MASK); self->gpu_cells[at].decoration_fg = cursor->decoration_fg & COL_MASK; } self->cpu_cells[at].ch = ch; memset(self->cpu_cells[at].cc_idx, 0, sizeof(self->cpu_cells[at].cc_idx)); } static PyObject* set_char(Line *self, PyObject *args) { #define set_char_doc "set_char(at, ch, width=1, cursor=None) -> Set the character at the specified cell. If cursor is not None, also set attributes from that cursor." unsigned int at, width=1; int ch; Cursor *cursor = NULL; if (!PyArg_ParseTuple(args, "IC|IO!", &at, &ch, &width, &Cursor_Type, &cursor)) return NULL; if (at >= self->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } line_set_char(self, at, ch, width, cursor, false); Py_RETURN_NONE; } static PyObject* set_attribute(Line *self, PyObject *args) { #define set_attribute_doc "set_attribute(which, val) -> Set the attribute on all cells in the line." unsigned int shift, val; if (!PyArg_ParseTuple(args, "II", &shift, &val)) return NULL; if (shift < DECORATION_SHIFT || shift > DIM_SHIFT) { PyErr_SetString(PyExc_ValueError, "Unknown attribute"); return NULL; } set_attribute_on_line(self->gpu_cells, shift, val, self->xnum); Py_RETURN_NONE; } static inline int color_as_sgr(char *buf, size_t sz, unsigned long val, unsigned simple_code, unsigned aix_code, unsigned complex_code) { switch(val & 0xff) { case 1: val >>= 8; if (val < 16 && simple_code) { return snprintf(buf, sz, "%lu;", (val < 8) ? simple_code + val : aix_code + (val - 8)); } return snprintf(buf, sz, "%u:5:%lu;", complex_code, val); case 2: return snprintf(buf, sz, "%u:2:%lu:%lu:%lu;", complex_code, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff); default: return snprintf(buf, sz, "%u;", complex_code + 1); // reset } } static inline const char* decoration_as_sgr(uint8_t decoration) { switch(decoration) { case 1: return "4;"; case 2: return "4:2;"; case 3: return "4:3;"; default: return "24;"; } } const char* cell_as_sgr(const GPUCell *cell, const GPUCell *prev) { static char buf[128]; #define SZ sizeof(buf) - (p - buf) - 2 #define P(s) { size_t len = strlen(s); if (SZ > len) { memcpy(p, s, len); p += len; } } char *p = buf; #define CMP(attr) (attr(cell) != attr(prev)) #define BOLD(cell) (cell->attrs & (1 << BOLD_SHIFT)) #define DIM(cell) (cell->attrs & (1 << DIM_SHIFT)) #define ITALIC(cell) (cell->attrs & (1 << ITALIC_SHIFT)) #define REVERSE(cell) (cell->attrs & (1 << REVERSE_SHIFT)) #define STRIKETHROUGH(cell) (cell->attrs & (1 << STRIKE_SHIFT)) #define DECORATION(cell) (cell->attrs & (DECORATION_MASK << DECORATION_SHIFT)) bool intensity_differs = CMP(BOLD) || CMP(DIM); if (intensity_differs) { if (!BOLD(cell) && !DIM(cell)) { P("22;"); } else { if (BOLD(cell)) P("1;"); if (DIM(cell)) P("2;"); } } if (CMP(ITALIC)) P(ITALIC(cell) ? "3;" : "23;"); if (CMP(REVERSE)) P(REVERSE(cell) ? "7;" : "27;"); if (CMP(STRIKETHROUGH)) P(STRIKETHROUGH(cell) ? "9;" : "29;"); if (cell->fg != prev->fg) p += color_as_sgr(p, SZ, cell->fg, 30, 90, 38); if (cell->bg != prev->bg) p += color_as_sgr(p, SZ, cell->bg, 40, 100, 48); if (cell->decoration_fg != prev->decoration_fg) p += color_as_sgr(p, SZ, cell->decoration_fg, 0, 0, DECORATION_FG_CODE); if (CMP(DECORATION)) P(decoration_as_sgr((cell->attrs >> DECORATION_SHIFT) & DECORATION_MASK)); #undef CMP #undef BOLD #undef DIM #undef ITALIC #undef REVERSE #undef STRIKETHROUGH #undef DECORATION #undef P #undef SZ if (p > buf) *(p - 1) = 0; // remove trailing semi-colon *p = 0; // ensure string is null-terminated return buf; } static Py_ssize_t __len__(PyObject *self) { return (Py_ssize_t)(((Line*)self)->xnum); } static int __eq__(Line *a, Line *b) { return a->xnum == b->xnum && memcmp(a->cpu_cells, b->cpu_cells, sizeof(CPUCell) * a->xnum) == 0 && memcmp(a->gpu_cells, b->gpu_cells, sizeof(GPUCell) * a->xnum) == 0; } // Boilerplate {{{ static PyObject* copy_char(Line* self, PyObject *args); #define copy_char_doc "copy_char(src, to, dest) -> Copy the character at src to to the character dest in the line `to`" static PyObject * richcmp(PyObject *obj1, PyObject *obj2, int op); static PySequenceMethods sequence_methods = { .sq_length = __len__, .sq_item = (ssizeargfunc)text_at }; static PyMethodDef methods[] = { METHOD(add_combining_char, METH_VARARGS) METHOD(set_text, METH_VARARGS) METHOD(cursor_from, METH_VARARGS) METHOD(apply_cursor, METH_VARARGS) METHOD(clear_text, METH_VARARGS) METHOD(copy_char, METH_VARARGS) METHOD(right_shift, METH_VARARGS) METHOD(left_shift, METH_VARARGS) METHOD(set_char, METH_VARARGS) METHOD(set_attribute, METH_VARARGS) METHOD(as_ansi, METH_NOARGS) METHOD(is_continued, METH_NOARGS) METHOD(width, METH_O) METHOD(url_start_at, METH_O) METHOD(url_end_at, METH_VARARGS) METHOD(sprite_at, METH_O) {NULL} /* Sentinel */ }; PyTypeObject Line_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.Line", .tp_basicsize = sizeof(Line), .tp_dealloc = (destructor)dealloc, .tp_repr = (reprfunc)__repr__, .tp_str = (reprfunc)line_as_unicode, .tp_as_sequence = &sequence_methods, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_richcompare = richcmp, .tp_doc = "Lines", .tp_methods = methods, .tp_new = new }; Line *alloc_line() { Line *ans = (Line*)PyType_GenericAlloc(&Line_Type, 0); ans->needs_free = 0; return ans; } RICHCMP(Line) INIT_TYPE(Line) // }}} static PyObject* copy_char(Line* self, PyObject *args) { unsigned int src, dest; Line *to; if (!PyArg_ParseTuple(args, "IO!I", &src, &Line_Type, &to, &dest)) return NULL; if (src >= self->xnum || dest >= to->xnum) { PyErr_SetString(PyExc_ValueError, "Out of bounds"); return NULL; } COPY_CELL(self, src, to, dest); Py_RETURN_NONE; } kitty-0.15.0/kitty/lineops.h000066400000000000000000000141111356737523400157440ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" static inline void set_attribute_on_line(GPUCell *cells, uint32_t shift, uint32_t val, index_type xnum) { // Set a single attribute on all cells in the line attrs_type mask = shift == DECORATION_SHIFT ? 3 : 1; attrs_type aval = (val & mask) << shift; mask = ~(mask << shift); for (index_type i = 0; i < xnum; i++) cells[i].attrs = (cells[i].attrs & mask) | aval; } static inline void copy_line(const Line *src, Line *dest) { memcpy(dest->cpu_cells, src->cpu_cells, sizeof(CPUCell) * MIN(src->xnum, dest->xnum)); memcpy(dest->gpu_cells, src->gpu_cells, sizeof(GPUCell) * MIN(src->xnum, dest->xnum)); } static inline void clear_chars_in_line(CPUCell *cpu_cells, GPUCell *gpu_cells, index_type xnum, char_type ch) { // Clear only the char part of each cell, the rest must have been cleared by a memset or similar if (ch) { for (index_type i = 0; i < xnum; i++) { cpu_cells[i].ch = ch; gpu_cells[i].attrs = 1; } } } static inline index_type xlimit_for_line(Line *line) { index_type xlimit = line->xnum; if (BLANK_CHAR == 0) { while (xlimit > 0 && (line->cpu_cells[xlimit - 1].ch) == BLANK_CHAR) xlimit--; if (xlimit < line->xnum && (line->gpu_cells[xlimit > 0 ? xlimit - 1 : xlimit].attrs & WIDTH_MASK) == 2) xlimit++; } return xlimit; } static inline void line_save_cells(Line *line, index_type start, index_type num, GPUCell *gpu_cells, CPUCell *cpu_cells) { memcpy(gpu_cells + start, line->gpu_cells + start, sizeof(GPUCell) * num); memcpy(cpu_cells + start, line->cpu_cells + start, sizeof(CPUCell) * num); } static inline void line_reset_cells(Line *line, index_type start, index_type num, GPUCell *gpu_cells, CPUCell *cpu_cells) { memcpy(line->gpu_cells + start, gpu_cells + start, sizeof(GPUCell) * num); memcpy(line->cpu_cells + start, cpu_cells + start, sizeof(CPUCell) * num); } void line_clear_text(Line *self, unsigned int at, unsigned int num, char_type ch); void line_apply_cursor(Line *self, Cursor *cursor, unsigned int at, unsigned int num, bool clear_char); void line_set_char(Line *, unsigned int , uint32_t , unsigned int , Cursor *, bool); void line_right_shift(Line *, unsigned int , unsigned int ); void line_add_combining_char(Line *, uint32_t , unsigned int ); index_type line_url_start_at(Line *self, index_type x); index_type line_url_end_at(Line *self, index_type x, bool, char_type); index_type line_as_ansi(Line *self, Py_UCS4 *buf, index_type buflen, bool*, const GPUCell**) __attribute__((nonnull)); unsigned int line_length(Line *self); size_t cell_as_unicode(CPUCell *cell, bool include_cc, Py_UCS4 *buf, char_type); size_t cell_as_unicode_for_fallback(CPUCell *cell, Py_UCS4 *buf); size_t cell_as_utf8(CPUCell *cell, bool include_cc, char *buf, char_type); size_t cell_as_utf8_for_fallback(CPUCell *cell, char *buf); PyObject* unicode_in_range(Line *self, index_type start, index_type limit, bool include_cc, char leading_char); PyObject* line_as_unicode(Line *); void linebuf_init_line(LineBuf *, index_type); void linebuf_clear(LineBuf *, char_type ch); void linebuf_index(LineBuf* self, index_type top, index_type bottom); void linebuf_reverse_index(LineBuf *self, index_type top, index_type bottom); void linebuf_clear_line(LineBuf *self, index_type y); void linebuf_insert_lines(LineBuf *self, unsigned int num, unsigned int y, unsigned int bottom); void linebuf_delete_lines(LineBuf *self, index_type num, index_type y, index_type bottom); void linebuf_set_attribute(LineBuf *, unsigned int , unsigned int ); void linebuf_rewrap(LineBuf *self, LineBuf *other, index_type *, index_type *, HistoryBuf *, index_type *, index_type *); void linebuf_mark_line_dirty(LineBuf *self, index_type y); void linebuf_mark_line_clean(LineBuf *self, index_type y); unsigned int linebuf_char_width_at(LineBuf *self, index_type x, index_type y); void linebuf_refresh_sprite_positions(LineBuf *self); void historybuf_add_line(HistoryBuf *self, const Line *line); void historybuf_rewrap(HistoryBuf *self, HistoryBuf *other); void historybuf_init_line(HistoryBuf *self, index_type num, Line *l); void historybuf_mark_line_clean(HistoryBuf *self, index_type y); void historybuf_mark_line_dirty(HistoryBuf *self, index_type y); void historybuf_refresh_sprite_positions(HistoryBuf *self); void historybuf_clear(HistoryBuf *self); #define as_text_generic(args, container, get_line, lines, columns) { \ PyObject *callback; \ int as_ansi = 0, insert_wrap_markers = 0; \ if (!PyArg_ParseTuple(args, "O|pp", &callback, &as_ansi, &insert_wrap_markers)) return NULL; \ PyObject *ret = NULL, *t = NULL; \ Py_UCS4 *buf = NULL; \ PyObject *nl = PyUnicode_FromString("\n"); \ PyObject *cr = PyUnicode_FromString("\r"); \ const GPUCell *prev_cell = NULL; \ if (nl == NULL || cr == NULL) goto end; \ if (as_ansi) { \ buf = malloc(sizeof(Py_UCS4) * columns * 100); \ if (buf == NULL) { PyErr_NoMemory(); goto end; } \ } \ for (index_type y = 0; y < lines; y++) { \ Line *line = get_line(container, y); \ if (!line->continued && y > 0) { \ ret = PyObject_CallFunctionObjArgs(callback, nl, NULL); \ if (ret == NULL) goto end; \ Py_CLEAR(ret); \ } \ if (as_ansi) { \ bool truncated; \ index_type num = line_as_ansi(line, buf, columns * 100 - 2, &truncated, &prev_cell); \ t = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, num); \ } else { \ t = line_as_unicode(line); \ } \ if (t == NULL) goto end; \ ret = PyObject_CallFunctionObjArgs(callback, t, NULL); \ Py_DECREF(t); if (ret == NULL) goto end; Py_DECREF(ret); \ if (insert_wrap_markers) { \ ret = PyObject_CallFunctionObjArgs(callback, cr, NULL); \ if (ret == NULL) goto end; \ Py_CLEAR(ret); \ }\ } \ end: \ Py_CLEAR(nl); Py_CLEAR(cr); free(buf); \ if (PyErr_Occurred()) return NULL; \ Py_RETURN_NONE; \ } kitty-0.15.0/kitty/logging.c000066400000000000000000000036631356737523400157260ustar00rootroot00000000000000/* * logging.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include #include #include #include #ifdef __APPLE__ #include #endif static bool use_os_log = false; void log_error(const char *fmt, ...) { va_list ar; struct timeval tv; #ifdef __APPLE__ // Apple does not provide a varargs style os_logv char logbuf[16 * 1024] = {0}; #else char logbuf[4]; #endif char *p = logbuf; #define bufprint(func, ...) { if ((size_t)(p - logbuf) < sizeof(logbuf) - 2) { p += func(p, sizeof(logbuf) - (p - logbuf), __VA_ARGS__); } } if (!use_os_log) { // Apple's os_log already records timestamps gettimeofday(&tv, NULL); struct tm *tmp = localtime(&tv.tv_sec); if (tmp) { char tbuf[256] = {0}, buf[256] = {0}; if (strftime(buf, sizeof(buf), "%j %H:%M:%S.%%06u", tmp) != 0) { snprintf(tbuf, sizeof(tbuf), buf, tv.tv_usec); fprintf(stderr, "[%s] ", tbuf); } } } va_start(ar, fmt); if (use_os_log) { bufprint(vsnprintf, fmt, ar); } else vfprintf(stderr, fmt, ar); va_end(ar); #ifdef __APPLE__ if (use_os_log) os_log(OS_LOG_DEFAULT, "%{public}s", logbuf); #endif if (!use_os_log) fprintf(stderr, "\n"); } static PyObject* log_error_string(PyObject *self UNUSED, PyObject *args) { const char *msg; if (!PyArg_ParseTuple(args, "s", &msg)) return NULL; log_error("%s", msg); Py_RETURN_NONE; } static PyMethodDef module_methods[] = { METHODB(log_error_string, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_logging(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; #ifdef __APPLE__ if (getenv("KITTY_LAUNCHED_BY_LAUNCH_SERVICES") != NULL) use_os_log = true; #endif return true; } kitty-0.15.0/kitty/loop-utils.c000066400000000000000000000103361356737523400164020ustar00rootroot00000000000000/* * loop-utils.c * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "loop-utils.h" #include bool init_loop_data(LoopData *ld) { #ifdef HAS_EVENT_FD ld->wakeup_read_fd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); if (ld->wakeup_read_fd < 0) return false; #else if (!self_pipe(ld->wakeup_fds, true)) return false; ld->wakeup_read_fd = ld->wakeup_fds[0]; #endif ld->signal_read_fd = -1; #ifndef HAS_SIGNAL_FD ld->signal_fds[0] = -1; ld->signal_fds[1] = -1; #endif return true; } #ifndef HAS_SIGNAL_FD static int signal_write_fd = -1; static void handle_signal(int sig_num) { int save_err = errno; unsigned char byte = (unsigned char)sig_num; while(signal_write_fd != -1) { ssize_t ret = write(signal_write_fd, &byte, 1); if (ret < 0 && errno == EINTR) continue; break; } errno = save_err; } #endif #define SIGNAL_SET \ sigset_t signals = {0}; \ sigemptyset(&signals); \ sigaddset(&signals, SIGINT); sigaddset(&signals, SIGTERM); sigaddset(&signals, SIGCHLD); \ void free_loop_data(LoopData *ld) { #define CLOSE(which, idx) if (ld->which[idx] > -1) safe_close(ld->which[idx]); ld->which[idx] = -1; #ifndef HAS_EVENT_FD CLOSE(wakeup_fds, 0); CLOSE(wakeup_fds, 1); #endif #ifndef HAS_SIGNAL_FD CLOSE(signal_fds, 0); CLOSE(signal_fds, 1); #endif #undef CLOSE if (ld->signal_read_fd) { #ifdef HAS_SIGNAL_FD safe_close(ld->signal_read_fd); SIGNAL_SET sigprocmask(SIG_UNBLOCK, &signals, NULL); #else signal_write_fd = -1; #endif signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); signal(SIGCHLD, SIG_DFL); } #ifdef HAS_EVENT_FD safe_close(ld->wakeup_read_fd); #endif ld->signal_read_fd = -1; ld->wakeup_read_fd = -1; } void wakeup_loop(LoopData *ld, bool in_signal_handler, const char *loop_name) { while(true) { #ifdef HAS_EVENT_FD static const int64_t value = 1; ssize_t ret = write(ld->wakeup_read_fd, &value, sizeof value); #else ssize_t ret = write(ld->wakeup_fds[1], "w", 1); #endif if (ret < 0) { if (errno == EINTR) continue; if (!in_signal_handler) log_error("Failed to write to %s wakeup fd with error: %s", loop_name, strerror(errno)); } break; } } bool install_signal_handlers(LoopData *ld) { #ifdef HAS_SIGNAL_FD SIGNAL_SET if (sigprocmask(SIG_BLOCK, &signals, NULL) == -1) return false; ld->signal_read_fd = signalfd(-1, &signals, SFD_NONBLOCK | SFD_CLOEXEC); if (ld->signal_read_fd == -1) return false; #else if (!self_pipe(ld->signal_fds, true)) return false; signal_write_fd = ld->signal_fds[1]; struct sigaction act = {.sa_handler=handle_signal}; #define SA(which) { if (sigaction(which, &act, NULL) != 0) return false; if (siginterrupt(which, false) != 0) return false; } SA(SIGINT); SA(SIGTERM); SA(SIGCHLD); #undef SA ld->signal_read_fd = ld->signal_fds[0]; #endif return true; } void read_signals(int fd, handle_signal_func callback, void *data) { #ifdef HAS_SIGNAL_FD static struct signalfd_siginfo fdsi[32]; while (true) { ssize_t s = read(fd, &fdsi, sizeof(fdsi)); if (s < 0) { if (errno == EINTR) continue; if (errno == EAGAIN) break; log_error("Call to read() from read_signals() failed with error: %s", strerror(errno)); break; } if (s == 0) break; size_t num_signals = s / sizeof(struct signalfd_siginfo); if (num_signals == 0 || num_signals * sizeof(struct signalfd_siginfo) != (size_t)s) { log_error("Incomplete signal read from signalfd"); break; } for (size_t i = 0; i < num_signals; i++) callback(fdsi[i].ssi_signo, data); } #else static char buf[256]; while(true) { ssize_t len = read(fd, buf, sizeof(buf)); if (len < 0) { if (errno == EINTR) continue; if (errno != EIO && errno != EAGAIN) log_error("Call to read() from read_signals() failed with error: %s", strerror(errno)); break; } for (ssize_t i = 0; i < len; i++) callback(buf[i], data); if (len == 0) break; } #endif } kitty-0.15.0/kitty/loop-utils.h000066400000000000000000000032241356737523400164050ustar00rootroot00000000000000/* * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #include #include #ifdef __has_include #if __has_include() #define HAS_SIGNAL_FD #include #endif #if __has_include() #define HAS_EVENT_FD #include #endif #else #define HAS_SIGNAL_FD #include #define HAS_EVENT_FD #include #endif typedef struct { #ifndef HAS_EVENT_FD int wakeup_fds[2]; #endif #ifndef HAS_SIGNAL_FD int signal_fds[2]; #endif int wakeup_read_fd; int signal_read_fd; } LoopData; typedef void(*handle_signal_func)(int, void *data); bool init_loop_data(LoopData *ld); void free_loop_data(LoopData *ld); void wakeup_loop(LoopData *ld, bool in_signal_handler, const char*); bool install_signal_handlers(LoopData *ld); void read_signals(int fd, handle_signal_func callback, void *data); static inline bool self_pipe(int fds[2], bool nonblock) { #ifdef __APPLE__ int flags; flags = pipe(fds); if (flags != 0) return false; for (int i = 0; i < 2; i++) { flags = fcntl(fds[i], F_GETFD); if (flags == -1) { return false; } if (fcntl(fds[i], F_SETFD, flags | FD_CLOEXEC) == -1) { return false; } if (nonblock) { flags = fcntl(fds[i], F_GETFL); if (flags == -1) { return false; } if (fcntl(fds[i], F_SETFL, flags | O_NONBLOCK) == -1) { return false; } } } return true; #else int flags = O_CLOEXEC; if (nonblock) flags |= O_NONBLOCK; return pipe2(fds, flags) == 0; #endif } kitty-0.15.0/kitty/macos_process_info.c000066400000000000000000000163441356737523400201530ustar00rootroot00000000000000/* * macos_process_info.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include typedef void* rusage_info_t; // needed for libproc.h #include static PyObject* cwd_of_process(PyObject *self UNUSED, PyObject *pid_) { if (!PyLong_Check(pid_)) { PyErr_SetString(PyExc_TypeError, "pid must be an int"); return NULL; } long pid = PyLong_AsLong(pid_); if (pid < 0) { PyErr_SetString(PyExc_TypeError, "pid cannot be negative"); return NULL; } struct proc_vnodepathinfo vpi; int ret = proc_pidinfo(pid, PROC_PIDVNODEPATHINFO, 0, &vpi, sizeof(vpi)); if (ret < 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } return PyUnicode_FromString(vpi.pvi_cdir.vip_path); } // Read the maximum argument size for processes static inline int get_argmax() { int argmax; int mib[] = { CTL_KERN, KERN_ARGMAX }; size_t size = sizeof(argmax); if (sysctl(mib, 2, &argmax, &size, NULL, 0) == 0) return argmax; return 0; } static PyObject* cmdline_of_process(PyObject *self UNUSED, PyObject *pid_) { // Taken from psutil, with thanks (BSD 3-clause license) int mib[3]; int nargs; size_t len; char *procargs = NULL; char *arg_ptr; char *arg_end; char *curr_arg; size_t argmax; PyObject *py_arg = NULL; PyObject *py_retlist = NULL; if (!PyLong_Check(pid_)) { PyErr_SetString(PyExc_TypeError, "pid must be an int"); goto error; } long pid = PyLong_AsLong(pid_); if (pid < 0) { PyErr_SetString(PyExc_TypeError, "pid cannot be negative"); goto error; } // special case for PID 0 (kernel_task) where cmdline cannot be fetched if (pid == 0) return Py_BuildValue("[]"); // read argmax and allocate memory for argument space. argmax = get_argmax(); if (!argmax) { PyErr_SetFromErrno(PyExc_OSError); goto error; } procargs = (char *)malloc(argmax); if (NULL == procargs) { PyErr_SetFromErrno(PyExc_OSError); goto error; } // read argument space mib[0] = CTL_KERN; mib[1] = KERN_PROCARGS2; mib[2] = (pid_t)pid; if (sysctl(mib, 3, procargs, &argmax, NULL, 0) < 0) { // In case of zombie process or non-existent process we'll get EINVAL. if (errno == EINVAL) PyErr_Format(PyExc_ValueError, "process with pid %ld either does not exist or is a zombie", pid); else PyErr_SetFromErrno(PyExc_OSError); goto error; } arg_end = &procargs[argmax]; // copy the number of arguments to nargs memcpy(&nargs, procargs, sizeof(nargs)); arg_ptr = procargs + sizeof(nargs); len = strlen(arg_ptr); arg_ptr += len + 1; if (arg_ptr == arg_end) { free(procargs); return Py_BuildValue("[]"); } // skip ahead to the first argument for (; arg_ptr < arg_end; arg_ptr++) { if (*arg_ptr != '\0') break; } // iterate through arguments curr_arg = arg_ptr; py_retlist = Py_BuildValue("[]"); if (!py_retlist) goto error; while (arg_ptr < arg_end && nargs > 0) { if (*arg_ptr++ == '\0') { py_arg = PyUnicode_DecodeFSDefault(curr_arg); if (! py_arg) goto error; if (PyList_Append(py_retlist, py_arg)) goto error; Py_DECREF(py_arg); // iterate to next arg and decrement # of args curr_arg = arg_ptr; nargs--; } } free(procargs); return py_retlist; error: Py_XDECREF(py_arg); Py_XDECREF(py_retlist); if (procargs != NULL) free(procargs); return NULL; } PyObject * environ_of_process(PyObject *self UNUSED, PyObject *pid_) { // Taken from psutil, with thanks (BSD 3-clause license) int mib[3]; int nargs; char *procargs = NULL; char *procenv = NULL; char *arg_ptr; char *arg_end; char *env_start; size_t argmax; PyObject *py_ret = NULL; if (!PyLong_Check(pid_)) { PyErr_SetString(PyExc_TypeError, "pid must be an int"); goto error; } long pid = PyLong_AsLong(pid_); if (pid < 0) { PyErr_SetString(PyExc_TypeError, "pid cannot be negative"); goto error; } // special case for PID 0 (kernel_task) where cmdline cannot be fetched if (pid == 0) goto empty; // read argmax and allocate memory for argument space. argmax = get_argmax(); if (! argmax) { PyErr_SetFromErrno(PyExc_OSError); goto error; } procargs = (char *)malloc(argmax); if (NULL == procargs) { PyErr_SetFromErrno(PyExc_OSError); goto error; } // read argument space mib[0] = CTL_KERN; mib[1] = KERN_PROCARGS2; mib[2] = (pid_t)pid; if (sysctl(mib, 3, procargs, &argmax, NULL, 0) < 0) { // In case of zombie process or a non-existent process we'll get EINVAL // to NSP and _psosx.py will translate it to ZP. if (errno == EINVAL) PyErr_Format(PyExc_ValueError, "process with pid %ld either does not exist or is a zombie", pid); else PyErr_SetFromErrno(PyExc_OSError); goto error; } arg_end = &procargs[argmax]; // copy the number of arguments to nargs memcpy(&nargs, procargs, sizeof(nargs)); // skip executable path arg_ptr = procargs + sizeof(nargs); arg_ptr = memchr(arg_ptr, '\0', arg_end - arg_ptr); if (arg_ptr == NULL || arg_ptr == arg_end) goto empty; // skip ahead to the first argument for (; arg_ptr < arg_end; arg_ptr++) { if (*arg_ptr != '\0') break; } // iterate through arguments while (arg_ptr < arg_end && nargs > 0) { if (*arg_ptr++ == '\0') nargs--; } // build an environment variable block env_start = arg_ptr; procenv = calloc(1, arg_end - arg_ptr); if (procenv == NULL) { PyErr_NoMemory(); goto error; } while (*arg_ptr != '\0' && arg_ptr < arg_end) { char *s = memchr(arg_ptr + 1, '\0', arg_end - arg_ptr); if (s == NULL) break; memcpy(procenv + (arg_ptr - env_start), arg_ptr, s - arg_ptr); arg_ptr = s + 1; } py_ret = PyUnicode_DecodeFSDefaultAndSize( procenv, arg_ptr - env_start + 1); if (!py_ret) { // XXX: don't want to free() this as per: // https://github.com/giampaolo/psutil/issues/926 // It sucks but not sure what else to do. procargs = NULL; goto error; } free(procargs); free(procenv); return py_ret; empty: if (procargs != NULL) free(procargs); return Py_BuildValue("s", ""); error: Py_XDECREF(py_ret); if (procargs != NULL) free(procargs); if (procenv != NULL) free(procargs); return NULL; } static PyMethodDef module_methods[] = { {"cwd_of_process", (PyCFunction)cwd_of_process, METH_O, ""}, {"cmdline_of_process", (PyCFunction)cmdline_of_process, METH_O, ""}, {"environ_of_process", (PyCFunction)environ_of_process, METH_O, ""}, {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_macos_process_info(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } kitty-0.15.0/kitty/main.py000066400000000000000000000306341356737523400154300ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import locale import os import shutil import sys from contextlib import contextmanager, suppress from .borders import load_borders_program from .boss import Boss from .child import set_default_env, openpty, remove_blocking from .cli import create_opts, parse_args from .config import cached_values_for, initial_window_size_func from .constants import ( appname, beam_cursor_data_file, config_dir, glfw_path, is_macos, is_wayland, kitty_exe, logo_data_file ) from .fast_data_types import ( GLFW_IBEAM_CURSOR, GLFW_MOD_SUPER, create_os_window, free_font_data, glfw_init, glfw_terminate, load_png_data, set_custom_cursor, set_default_window_icon, set_options ) from .fonts.box_drawing import set_scale from .fonts.render import set_font_family from .utils import ( detach, log_error, single_instance, startup_notification_handler, unix_socket_paths ) from .window import load_shader_programs def set_custom_ibeam_cursor(): with open(beam_cursor_data_file, 'rb') as f: data = f.read() rgba_data, width, height = load_png_data(data) c2x = os.path.splitext(beam_cursor_data_file) with open(c2x[0] + '@2x' + c2x[1], 'rb') as f: data = f.read() rgba_data2, width2, height2 = load_png_data(data) images = (rgba_data, width, height), (rgba_data2, width2, height2) try: set_custom_cursor(GLFW_IBEAM_CURSOR, images, 4, 8) except Exception as e: log_error('Failed to set custom beam cursor with error: {}'.format(e)) def talk_to_instance(args): import json import socket data = {'cmd': 'new_instance', 'args': tuple(sys.argv), 'startup_id': os.environ.get('DESKTOP_STARTUP_ID'), 'cwd': os.getcwd()} notify_socket = None if args.wait_for_single_instance_window_close: address = '\0{}-os-window-close-notify-{}-{}'.format(appname, os.getpid(), os.geteuid()) notify_socket = socket.socket(family=socket.AF_UNIX) try: notify_socket.bind(address) except FileNotFoundError: for address in unix_socket_paths(address[1:], ext='.sock'): notify_socket.bind(address) break data['notify_on_os_window_death'] = address notify_socket.listen() data = json.dumps(data, ensure_ascii=False).encode('utf-8') single_instance.socket.sendall(data) with suppress(EnvironmentError): single_instance.socket.shutdown(socket.SHUT_RDWR) single_instance.socket.close() if args.wait_for_single_instance_window_close: conn = notify_socket.accept()[0] conn.recv(1) with suppress(EnvironmentError): conn.shutdown(socket.SHUT_RDWR) conn.close() def load_all_shaders(semi_transparent=0): load_shader_programs(semi_transparent) load_borders_program() def init_glfw_module(glfw_module, debug_keyboard=False): if not glfw_init(glfw_path(glfw_module), debug_keyboard): raise SystemExit('GLFW initialization failed') def init_glfw(opts, debug_keyboard=False): glfw_module = 'cocoa' if is_macos else ('wayland' if is_wayland(opts) else 'x11') init_glfw_module(glfw_module, debug_keyboard) return glfw_module def prefer_cmd_shortcuts(x): return x[0] == GLFW_MOD_SUPER def get_new_os_window_trigger(opts): new_os_window_trigger = None if is_macos: new_os_window_shortcuts = [] for k, v in opts.keymap.items(): if v.func == 'new_os_window': new_os_window_shortcuts.append(k) if new_os_window_shortcuts: from .fast_data_types import cocoa_set_new_window_trigger new_os_window_shortcuts.sort(key=prefer_cmd_shortcuts, reverse=True) for candidate in new_os_window_shortcuts: if cocoa_set_new_window_trigger(candidate[0], candidate[2]): new_os_window_trigger = candidate break return new_os_window_trigger def _run_app(opts, args, bad_lines=()): new_os_window_trigger = get_new_os_window_trigger(opts) if is_macos and opts.macos_custom_beam_cursor: set_custom_ibeam_cursor() if not is_wayland() and not is_macos: # no window icons on wayland with open(logo_data_file, 'rb') as f: set_default_window_icon(f.read(), 256, 256) load_shader_programs.use_selection_fg = opts.selection_foreground is not None with cached_values_for(run_app.cached_values_name) as cached_values: with startup_notification_handler(extra_callback=run_app.first_window_callback) as pre_show_callback: window_id = create_os_window( run_app.initial_window_size_func(opts, cached_values), pre_show_callback, appname, args.name or args.cls or appname, args.cls or appname, load_all_shaders) boss = Boss(window_id, opts, args, cached_values, new_os_window_trigger) boss.start() if bad_lines: boss.show_bad_config_lines(bad_lines) try: boss.child_monitor.main_loop() finally: boss.destroy() def run_app(opts, args, bad_lines=()): set_scale(opts.box_drawing_scale) set_options(opts, is_wayland(), args.debug_gl, args.debug_font_fallback) set_font_family(opts, debug_font_matching=args.debug_font_fallback) try: _run_app(opts, args, bad_lines) finally: free_font_data() # must free font data before glfw/freetype/fontconfig/opengl etc are finalized run_app.cached_values_name = 'main' run_app.first_window_callback = lambda window_handle: None run_app.initial_window_size_func = initial_window_size_func def ensure_macos_locale(): # Ensure the LANG env var is set. See # https://github.com/kovidgoyal/kitty/issues/90 from .fast_data_types import cocoa_get_lang if 'LANG' not in os.environ: lang = cocoa_get_lang() if lang is not None: os.environ['LANG'] = lang + '.UTF-8' @contextmanager def setup_profiling(args): try: from .fast_data_types import start_profiler, stop_profiler except ImportError: start_profiler = stop_profiler = None if start_profiler is not None: start_profiler('/tmp/kitty-profile.log') yield if stop_profiler is not None: import subprocess stop_profiler() exe = kitty_exe() cg = '/tmp/kitty-profile.callgrind' print('Post processing profile data for', exe, '...') subprocess.call(['pprof', '--callgrind', exe, '/tmp/kitty-profile.log'], stdout=open(cg, 'wb')) try: subprocess.Popen(['kcachegrind', cg]) except FileNotFoundError: subprocess.call(['pprof', '--text', exe, '/tmp/kitty-profile.log']) print('To view the graphical call data, use: kcachegrind', cg) def macos_cmdline(argv_args): try: with open(os.path.join(config_dir, 'macos-launch-services-cmdline')) as f: raw = f.read() except FileNotFoundError: return argv_args import shlex raw = raw.strip() ans = shlex.split(raw) if ans and ans[0] == 'kitty': del ans[0] return ans def read_shell_environment(opts=None): if not hasattr(read_shell_environment, 'ans'): import subprocess from .session import resolved_shell shell = resolved_shell(opts) master, slave = openpty() remove_blocking(master) p = subprocess.Popen(shell + ['-l', '-c', 'env'], stdout=slave, stdin=slave, stderr=slave, start_new_session=True, close_fds=True) with os.fdopen(master, 'rb') as stdout, os.fdopen(slave, 'wb'): raw = b'' from subprocess import TimeoutExpired from time import monotonic start_time = monotonic() while monotonic() - start_time < 1.5: try: ret = p.wait(0.01) except TimeoutExpired: ret = None with suppress(Exception): raw += stdout.read() if ret is not None: break if p.returncode is None: log_error('Timed out waiting for shell to quit while reading shell environment') p.kill() elif p.returncode == 0: while True: try: x = stdout.read() except Exception: break if not x: break raw += x raw = raw.decode('utf-8', 'replace') ans = read_shell_environment.ans = {} for line in raw.splitlines(): k, v = line.partition('=')[::2] if k and v: ans[k] = v else: log_error('Failed to run shell to read its environment') read_shell_environment.ans = {} return read_shell_environment.ans def get_editor_from_env(shell_env): for var in ('VISUAL', 'EDITOR'): editor = shell_env.get(var) if editor: if 'PATH' in shell_env: import shlex editor_cmd = shlex.split(editor) if not os.path.isabs(editor_cmd[0]): editor_cmd[0] = shutil.which(editor_cmd[0], path=shell_env['PATH']) if editor_cmd[0]: editor = ' '.join(map(shlex.quote, editor_cmd)) else: editor = None if editor: return editor def setup_environment(opts, args): extra_env = opts.env.copy() if opts.editor == '.': editor = get_editor_from_env(os.environ) if not editor: shell_env = read_shell_environment(opts) editor = get_editor_from_env(shell_env) if editor: os.environ['EDITOR'] = editor else: os.environ['EDITOR'] = opts.editor if args.listen_on: os.environ['KITTY_LISTEN_ON'] = args.listen_on set_default_env(extra_env) def _main(): with suppress(AttributeError): # python compiled without threading sys.setswitchinterval(1000.0) # we have only a single python thread if is_macos: ensure_macos_locale() try: locale.setlocale(locale.LC_ALL, '') except Exception: if not is_macos: raise log_error('Failed to set locale with LANG:', os.environ.get('LANG')) os.environ.pop('LANG', None) try: locale.setlocale(locale.LC_ALL, '') except Exception: log_error('Failed to set locale with no LANG, ignoring') # Ensure the correct kitty is in PATH rpath = sys._xoptions.get('bundle_exe_dir') if rpath: modify_path = is_macos or getattr(sys, 'frozen', False) or sys._xoptions.get('kitty_from_source') == '1' if modify_path or not shutil.which('kitty'): existing_paths = list(filter(None, os.environ.get('PATH', '').split(os.pathsep))) existing_paths.insert(0, rpath) os.environ['PATH'] = os.pathsep.join(existing_paths) args = sys.argv[1:] if is_macos and os.environ.pop('KITTY_LAUNCHED_BY_LAUNCH_SERVICES', None) == '1': os.chdir(os.path.expanduser('~')) args = macos_cmdline(args) try: cwd_ok = os.path.isdir(os.getcwd()) except Exception: cwd_ok = False if not cwd_ok: os.chdir(os.path.expanduser('~')) args, rest = parse_args(args=args) args.args = rest if args.debug_config: create_opts(args, debug_config=True) return if getattr(args, 'detach', False): detach() if args.replay_commands: from kitty.client import main main(args.replay_commands) return if args.single_instance: is_first = single_instance(args.instance_group) if not is_first: talk_to_instance(args) return bad_lines = [] opts = create_opts(args, accumulate_bad_lines=bad_lines) init_glfw(opts, args.debug_keyboard) setup_environment(opts, args) try: with setup_profiling(args): # Avoid needing to launch threads to reap zombies run_app(opts, args, bad_lines) finally: glfw_terminate() def main(): try: _main() except Exception: import traceback tb = traceback.format_exc() log_error(tb) raise SystemExit(1) kitty-0.15.0/kitty/modes.h000066400000000000000000000041761356737523400154140ustar00rootroot00000000000000/* * modes.h * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once /* *Line Feed/New Line Mode*: When enabled, causes a received LF, FF, or VT to move the cursor to the first column of the next line. */ #define LNM 20 /* *Insert/Replace Mode*: When enabled, new display characters move old display characters to the right. Characters moved past the right margin are lost. Otherwise, new display characters replace old display characters at the cursor position. */ #define IRM 4 // Private modes. // Arrow keys send application sequences or cursor movement commands #define DECCKM (1 << 5) // *Column Mode*: selects the number of columns per line (80 or 132) // on the screen. #define DECCOLM (3 << 5) // Scroll speed #define DECSCLM (4 << 5) // *Screen Mode*: toggles screen-wide reverse-video mode. #define DECSCNM (5 << 5) // Auto-repeat of keys #define DECARM (8 << 5) /* *Origin Mode*: allows cursor addressing relative to a user-defined origin. This mode resets when the terminal is powered up or reset. It does not affect the erase in display (ED) function. */ #define DECOM (6 << 5) // *Auto Wrap Mode*: selects where received graphic characters appear // when the cursor is at the right margin. #define DECAWM (7 << 5) // Toggle cursor blinking #define CONTROL_CURSOR_BLINK (12 << 5) // *Text Cursor Enable Mode*: determines if the text cursor is visible. #define DECTCEM (25 << 5) // National Replacement Character Set Mode #define DECNRCM (42 << 5) // Xterm mouse protocol #define MOUSE_BUTTON_TRACKING (1000 << 5) #define MOUSE_MOTION_TRACKING (1002 << 5) #define MOUSE_MOVE_TRACKING (1003 << 5) #define FOCUS_TRACKING (1004 << 5) #define MOUSE_UTF8_MODE (1005 << 5) #define MOUSE_SGR_MODE (1006 << 5) #define MOUSE_URXVT_MODE (1015 << 5) // Alternate screen buffer #define ALTERNATE_SCREEN (1049 << 5) // Bracketed paste mode // https://cirw.in/blog/bracketed-paste #define BRACKETED_PASTE (2004 << 5) #define BRACKETED_PASTE_START "200~" #define BRACKETED_PASTE_END "201~" // Extended keyboard protocol #define EXTENDED_KEYBOARD (2017 << 5) kitty-0.15.0/kitty/monotonic.h000066400000000000000000000040301356737523400162770ustar00rootroot00000000000000/* * monotonic.h * Copyright (C) 2019 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include #include #define MONOTONIC_T_MAX INT64_MAX #define MONOTONIC_T_MIN INT64_MIN typedef int64_t monotonic_t; static inline monotonic_t calc_nano_time(struct timespec time) { int64_t result = (monotonic_t)time.tv_sec; result *= 1000LL; result *= 1000LL; result *= 1000LL; result += (monotonic_t)time.tv_nsec; return result; } static inline struct timespec calc_time(monotonic_t nsec) { struct timespec result; result.tv_sec = nsec / (1000LL * 1000LL * 1000LL); result.tv_nsec = nsec % (1000LL * 1000LL * 1000LL); return result; } static inline monotonic_t s_double_to_monotonic_t(double time) { time *= 1000.0; time *= 1000.0; time *= 1000.0; return (monotonic_t)time; } static inline monotonic_t ms_double_to_monotonic_t(double time) { time *= 1000.0; time *= 1000.0; return (monotonic_t)time; } static inline monotonic_t s_to_monotonic_t(monotonic_t time) { return time * 1000ll * 1000ll * 1000ll; } static inline monotonic_t ms_to_monotonic_t(monotonic_t time) { return time * 1000ll * 1000ll; } static inline int monotonic_t_to_ms(monotonic_t time) { return (int)(time / 1000ll / 1000ll); } static inline double monotonic_t_to_s_double(monotonic_t time) { return (double)time / 1000.0 / 1000.0 / 1000.0; } #ifdef MONOTONIC_START_MODULE monotonic_t monotonic_start_time = 0; #else extern monotonic_t monotonic_start_time; #endif static inline monotonic_t monotonic_(void) { struct timespec ts = {0}; #ifdef CLOCK_HIGHRES clock_gettime(CLOCK_HIGHRES, &ts); #elif CLOCK_MONOTONIC_RAW clock_gettime(CLOCK_MONOTONIC_RAW, &ts); #else clock_gettime(CLOCK_MONOTONIC, &ts); #endif return calc_nano_time(ts); } static inline monotonic_t monotonic(void) { return monotonic_() - monotonic_start_time; } static inline void init_monotonic(void) { monotonic_start_time = monotonic_(); } kitty-0.15.0/kitty/mouse.c000066400000000000000000000625021356737523400154250ustar00rootroot00000000000000/* * mouse.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include "screen.h" #include "lineops.h" #include "charsets.h" #include #include #include "glfw-wrapper.h" #include "control-codes.h" #include "monotonic.h" static MouseShape mouse_cursor_shape = BEAM; typedef enum MouseActions { PRESS, RELEASE, DRAG, MOVE } MouseAction; // Encoding of mouse events {{{ #define SHIFT_INDICATOR (1 << 2) #define ALT_INDICATOR (1 << 3) #define CONTROL_INDICATOR (1 << 4) #define MOTION_INDICATOR (1 << 5) #define EXTRA_BUTTON_INDICATOR (1 << 6) static inline unsigned int button_map(int button) { switch(button) { case GLFW_MOUSE_BUTTON_LEFT: return 0; case GLFW_MOUSE_BUTTON_RIGHT: return 2; case GLFW_MOUSE_BUTTON_MIDDLE: return 1; case GLFW_MOUSE_BUTTON_4: return EXTRA_BUTTON_INDICATOR; case GLFW_MOUSE_BUTTON_5: return EXTRA_BUTTON_INDICATOR | 1; default: return UINT_MAX; } } static char mouse_event_buf[64]; static inline int encode_mouse_event_impl(unsigned int x, unsigned int y, int mouse_tracking_protocol, int button, MouseAction action, int mods) { unsigned int cb = 0; if (action == MOVE) { cb = 3; } else { cb = button_map(button); if (cb == UINT_MAX) return 0; } if (action == DRAG || action == MOVE) cb |= MOTION_INDICATOR; else if (action == RELEASE && mouse_tracking_protocol != SGR_PROTOCOL) cb = 3; if (mods & GLFW_MOD_SHIFT) cb |= SHIFT_INDICATOR; if (mods & GLFW_MOD_ALT) cb |= ALT_INDICATOR; if (mods & GLFW_MOD_CONTROL) cb |= CONTROL_INDICATOR; switch(mouse_tracking_protocol) { case SGR_PROTOCOL: return snprintf(mouse_event_buf, sizeof(mouse_event_buf), "<%d;%d;%d%s", cb, x, y, action == RELEASE ? "m" : "M"); break; case URXVT_PROTOCOL: return snprintf(mouse_event_buf, sizeof(mouse_event_buf), "%d;%d;%dM", cb + 32, x, y); break; case UTF8_PROTOCOL: mouse_event_buf[0] = 'M'; mouse_event_buf[1] = cb + 32; unsigned int sz = 2; sz += encode_utf8(x + 32, mouse_event_buf + sz); sz += encode_utf8(y + 32, mouse_event_buf + sz); return sz; break; default: if (x > 223 || y > 223) return 0; else { mouse_event_buf[0] = 'M'; mouse_event_buf[1] = cb + 32; mouse_event_buf[2] = x + 32; mouse_event_buf[3] = y + 32; return 4; } break; } return 0; } static int encode_mouse_event(Window *w, int button, MouseAction action, int mods) { unsigned int x = w->mouse_pos.cell_x + 1, y = w->mouse_pos.cell_y + 1; // 1 based indexing Screen *screen = w->render_data.screen; return encode_mouse_event_impl(x, y, screen->modes.mouse_tracking_protocol, button, action, mods); } // }}} static inline double window_left(Window *w, OSWindow *os_window) { return w->geometry.left - OPT(window_padding_width) * (os_window->logical_dpi_x / 72.0); } static inline double window_right(Window *w, OSWindow *os_window) { return w->geometry.right + OPT(window_padding_width) * (os_window->logical_dpi_x / 72.0); } static inline double window_top(Window *w, OSWindow *os_window) { return w->geometry.top - OPT(window_padding_width) * (os_window->logical_dpi_y / 72.0); } static inline double window_bottom(Window *w, OSWindow *os_window) { return w->geometry.bottom + OPT(window_padding_width) * (os_window->logical_dpi_y / 72.0); } static inline bool contains_mouse(Window *w, OSWindow *os_window) { double x = global_state.callback_os_window->mouse_x, y = global_state.callback_os_window->mouse_y; return (w->visible && window_left(w, os_window) <= x && x <= window_right(w, os_window) && window_top(w, os_window) <= y && y <= window_bottom(w, os_window)); } static inline double distance_to_window(Window *w, OSWindow *os_window) { double x = global_state.callback_os_window->mouse_x, y = global_state.callback_os_window->mouse_y; double cx = (window_left(w, os_window) + window_right(w, os_window)) / 2.0; double cy = (window_top(w, os_window) + window_bottom(w, os_window)) / 2.0; return (x - cx) * (x - cx) + (y - cy) * (y - cy); } static bool clamp_to_window = false; static inline bool cell_for_pos(Window *w, unsigned int *x, unsigned int *y, OSWindow *os_window) { WindowGeometry *g = &w->geometry; Screen *screen = w->render_data.screen; if (!screen) return false; unsigned int qx = 0, qy = 0; double mouse_x = global_state.callback_os_window->mouse_x; double mouse_y = global_state.callback_os_window->mouse_y; double left = window_left(w, os_window), top = window_top(w, os_window), right = window_right(w, os_window), bottom = window_bottom(w, os_window); if (clamp_to_window) { mouse_x = MIN(MAX(mouse_x, left), right); mouse_y = MIN(MAX(mouse_y, top), bottom); } w->mouse_pos.x = mouse_x - left; w->mouse_pos.y = mouse_y - top; if (mouse_x < left || mouse_y < top || mouse_x > right || mouse_y > bottom) return false; if (mouse_x >= g->right) qx = screen->columns - 1; else if (mouse_x >= g->left) qx = (unsigned int)((double)(mouse_x - g->left) / os_window->fonts_data->cell_width); if (mouse_y >= g->bottom) qy = screen->lines - 1; else if (mouse_y >= g->top) qy = (unsigned int)((double)(mouse_y - g->top) / os_window->fonts_data->cell_height); if (qx < screen->columns && qy < screen->lines) { *x = qx; *y = qy; return true; } return false; } #define HANDLER(name) static inline void name(Window UNUSED *w, int UNUSED button, int UNUSED modifiers, unsigned int UNUSED window_idx) static inline void update_drag(bool from_button, Window *w, bool is_release, int modifiers) { Screen *screen = w->render_data.screen; if (from_button) { if (is_release) { global_state.active_drag_in_window = 0; w->last_drag_scroll_at = 0; if (screen->selection.in_progress) screen_update_selection(screen, w->mouse_pos.cell_x, w->mouse_pos.cell_y, true); } else { global_state.active_drag_in_window = w->id; screen_start_selection(screen, w->mouse_pos.cell_x, w->mouse_pos.cell_y, modifiers == (int)OPT(rectangle_select_modifiers) || modifiers == ((int)OPT(rectangle_select_modifiers) | (int)OPT(terminal_select_modifiers)), EXTEND_CELL); } } else if (screen->selection.in_progress) { screen_update_selection(screen, w->mouse_pos.cell_x, w->mouse_pos.cell_y, false); } } bool drag_scroll(Window *w, OSWindow *frame) { unsigned int margin = frame->fonts_data->cell_height / 2; double y = frame->mouse_y; bool upwards = y <= (w->geometry.top + margin); if (upwards || y >= w->geometry.bottom - margin) { Screen *screen = w->render_data.screen; if (screen->linebuf == screen->main_linebuf) { screen_history_scroll(screen, SCROLL_LINE, upwards); update_drag(false, w, false, 0); frame->last_mouse_activity_at = monotonic(); if (mouse_cursor_shape != ARROW) { mouse_cursor_shape = ARROW; set_mouse_cursor(mouse_cursor_shape); } return true; } } return false; } static inline void extend_selection(Window *w) { Screen *screen = w->render_data.screen; if (screen_has_selection(screen)) { screen_update_selection(screen, w->mouse_pos.cell_x, w->mouse_pos.cell_y, true); } } static inline void extend_url(Screen *screen, Line *line, index_type *x, index_type *y, char_type sentinel) { unsigned int count = 0; while(count++ < 10) { if (*x != line->xnum - 1) break; line = screen_visual_line(screen, *y + 1); if (!line) break; // we deliberately allow non-continued lines as some programs, like mutt split URLs with newlines at line boundaries index_type new_x = line_url_end_at(line, 0, false, sentinel); if (!new_x) break; *y += 1; *x = new_x; } } static inline char_type get_url_sentinel(Line *line, index_type url_start) { char_type before = 0, sentinel; if (url_start > 0 && url_start < line->xnum) before = line->cpu_cells[url_start - 1].ch; switch(before) { case '"': case '\'': case '*': sentinel = before; break; case '(': sentinel = ')'; break; case '[': sentinel = ']'; break; case '{': sentinel = '}'; break; case '<': sentinel = '>'; break; default: sentinel = 0; break; } return sentinel; } static inline void set_mouse_cursor_for_screen(Screen *screen) { mouse_cursor_shape = screen->modes.mouse_tracking_mode == NO_TRACKING ? BEAM : OPT(pointer_shape_when_grabbed); } static inline void detect_url(Screen *screen, unsigned int x, unsigned int y) { bool has_url = false; index_type url_start, url_end = 0; Line *line = screen_visual_line(screen, y); char_type sentinel; if (line) { url_start = line_url_start_at(line, x); sentinel = get_url_sentinel(line, url_start); if (url_start < line->xnum) url_end = line_url_end_at(line, x, true, sentinel); has_url = url_end > url_start; } if (has_url) { mouse_cursor_shape = HAND; index_type y_extended = y; extend_url(screen, line, &url_end, &y_extended, sentinel); screen_mark_url(screen, url_start, y, url_end, y_extended); } else { set_mouse_cursor_for_screen(screen); screen_mark_url(screen, 0, 0, 0, 0); } } HANDLER(handle_move_event) { unsigned int x = 0, y = 0; if (OPT(focus_follows_mouse)) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; if (window_idx != t->active_window) { call_boss(switch_focus_to, "I", window_idx); } } if (!cell_for_pos(w, &x, &y, global_state.callback_os_window)) return; Screen *screen = w->render_data.screen; detect_url(screen, x, y); bool mouse_cell_changed = x != w->mouse_pos.cell_x || y != w->mouse_pos.cell_y; w->mouse_pos.cell_x = x; w->mouse_pos.cell_y = y; bool in_tracking_mode = ( screen->modes.mouse_tracking_mode == ANY_MODE || (screen->modes.mouse_tracking_mode == MOTION_MODE && button >= 0)); bool has_terminal_select_modifiers = modifiers == (int)OPT(terminal_select_modifiers) || modifiers == ((int)OPT(rectangle_select_modifiers) | (int)OPT(terminal_select_modifiers)); bool handle_in_kitty = !in_tracking_mode || has_terminal_select_modifiers; if (handle_in_kitty) { if (screen->selection.in_progress && button == GLFW_MOUSE_BUTTON_LEFT) { monotonic_t now = monotonic(); if ((now - w->last_drag_scroll_at) >= ms_to_monotonic_t(20ll) || mouse_cell_changed) { update_drag(false, w, false, 0); w->last_drag_scroll_at = now; } } } else { if (!mouse_cell_changed) return; int sz = encode_mouse_event(w, MAX(0, button), button >=0 ? DRAG : MOVE, 0); if (sz > 0) { mouse_event_buf[sz] = 0; write_escape_code_to_child(screen, CSI, mouse_event_buf); } } } static inline void multi_click(Window *w, unsigned int count) { Screen *screen = w->render_data.screen; index_type start, end; bool found_selection = false; SelectionExtendMode mode = EXTEND_CELL; unsigned int y1 = w->mouse_pos.cell_y, y2 = w->mouse_pos.cell_y; switch(count) { case 2: found_selection = screen_selection_range_for_word(screen, w->mouse_pos.cell_x, &y1, &y2, &start, &end, true); mode = EXTEND_WORD; break; case 3: found_selection = screen_selection_range_for_line(screen, w->mouse_pos.cell_y, &start, &end); mode = EXTEND_LINE; break; default: break; } if (found_selection) { screen_start_selection(screen, start, y1, false, mode); screen_update_selection(screen, end, y2, false); } } static inline double distance(double x1, double y1, double x2, double y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } HANDLER(add_click) { ClickQueue *q = &w->click_queue; if (q->length == CLICK_QUEUE_SZ) { memmove(q->clicks, q->clicks + 1, sizeof(Click) * (CLICK_QUEUE_SZ - 1)); q->length--; } monotonic_t now = monotonic(); #define N(n) (q->clicks[q->length - n]) N(0).at = now; N(0).button = button; N(0).modifiers = modifiers; N(0).x = w->mouse_pos.x; N(0).y = w->mouse_pos.y; q->length++; double multi_click_allowed_radius = 1.2 * global_state.callback_os_window->fonts_data->cell_height; // Now dispatch the multi-click if any if (q->length > 2) { // possible triple-click if ( N(1).at - N(3).at <= 2 * OPT(click_interval) && distance(N(1).x, N(1).y, N(3).x, N(3).y) <= multi_click_allowed_radius ) { multi_click(w, 3); q->length = 0; } } if (q->length > 1) { // possible double-click if ( N(1).at - N(2).at <= OPT(click_interval) && distance(N(1).x, N(1).y, N(2).x, N(2).y) <= multi_click_allowed_radius ) { multi_click(w, 2); } } #undef N } static inline void open_url(Window *w) { Screen *screen = w->render_data.screen; detect_url(screen, w->mouse_pos.cell_x, w->mouse_pos.cell_y); screen_open_url(screen); } HANDLER(handle_button_event) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; bool is_release = !global_state.callback_os_window->mouse_button_pressed[button]; if (window_idx != t->active_window && !is_release) { call_boss(switch_focus_to, "I", window_idx); } Screen *screen = w->render_data.screen; if (!screen) return; bool handle_in_kitty = ( modifiers == (int)OPT(terminal_select_modifiers) || modifiers == ((int)OPT(rectangle_select_modifiers) | (int)OPT(terminal_select_modifiers)) || screen->modes.mouse_tracking_mode == 0 || button == GLFW_MOUSE_BUTTON_MIDDLE || (modifiers == (int)OPT(open_url_modifiers) && button == GLFW_MOUSE_BUTTON_LEFT) ); if (handle_in_kitty) { switch(button) { case GLFW_MOUSE_BUTTON_LEFT: update_drag(true, w, is_release, modifiers); if (is_release) { if (modifiers == (int)OPT(open_url_modifiers)) open_url(w); } else add_click(w, button, modifiers, window_idx); break; case GLFW_MOUSE_BUTTON_MIDDLE: if (is_release && !modifiers) { call_boss(paste_from_selection, NULL); return; } break; case GLFW_MOUSE_BUTTON_RIGHT: if (is_release) { extend_selection(w); } break; } } else { int sz = encode_mouse_event(w, button, is_release ? RELEASE : PRESS, modifiers); if (sz > 0) { mouse_event_buf[sz] = 0; write_escape_code_to_child(screen, CSI, mouse_event_buf); } } } static inline int currently_pressed_button(void) { for (int i = 0; i < GLFW_MOUSE_BUTTON_5; i++) { if (global_state.callback_os_window->mouse_button_pressed[i]) return i; } return -1; } HANDLER(handle_event) { switch(button) { case -1: button = currently_pressed_button(); handle_move_event(w, button, modifiers, window_idx); break; case GLFW_MOUSE_BUTTON_LEFT: case GLFW_MOUSE_BUTTON_RIGHT: case GLFW_MOUSE_BUTTON_MIDDLE: case GLFW_MOUSE_BUTTON_4: case GLFW_MOUSE_BUTTON_5: handle_button_event(w, button, modifiers, window_idx); break; default: break; } } static inline void handle_tab_bar_mouse(int button, int UNUSED modifiers) { if (button != GLFW_MOUSE_BUTTON_LEFT || !global_state.callback_os_window->mouse_button_pressed[button]) return; call_boss(activate_tab_at, "Kd", global_state.callback_os_window->id, global_state.callback_os_window->mouse_x); } static inline bool mouse_in_region(Region *r) { if (r->left == r->right) return false; if (global_state.callback_os_window->mouse_y < r->top || global_state.callback_os_window->mouse_y > r->bottom) return false; if (global_state.callback_os_window->mouse_x < r->left || global_state.callback_os_window->mouse_x > r->right) return false; return true; } static inline Window* window_for_id(id_type window_id) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; for (unsigned int i = 0; i < t->num_windows; i++) { Window *w = t->windows + i; if (w->id == window_id) return w; } return NULL; } static inline Window* window_for_event(unsigned int *window_idx, bool *in_tab_bar) { Region central, tab_bar; os_window_regions(global_state.callback_os_window, ¢ral, &tab_bar); *in_tab_bar = mouse_in_region(&tab_bar); if (!*in_tab_bar && global_state.callback_os_window->num_tabs > 0) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; for (unsigned int i = 0; i < t->num_windows; i++) { if (contains_mouse(t->windows + i, global_state.callback_os_window) && t->windows[i].render_data.screen) { *window_idx = i; return t->windows + i; } } } return NULL; } static inline Window* closest_window_for_event(unsigned int *window_idx) { Window *ans = NULL; double closest_distance = UINT_MAX; if (global_state.callback_os_window->num_tabs > 0) { Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; for (unsigned int i = 0; i < t->num_windows; i++) { Window *w = t->windows + i; double d = distance_to_window(w, global_state.callback_os_window); if (d < closest_distance) { ans = w; closest_distance = d; *window_idx = i; } } } return ans; } void focus_in_event() { // Ensure that no URL is highlighted and the mouse cursor is in default shape bool in_tab_bar; unsigned int window_idx = 0; mouse_cursor_shape = BEAM; Window *w = window_for_event(&window_idx, &in_tab_bar); if (w && w->render_data.screen) { screen_mark_url(w->render_data.screen, 0, 0, 0, 0); set_mouse_cursor_for_screen(w->render_data.screen); } set_mouse_cursor(mouse_cursor_shape); } void enter_event() { #ifdef __APPLE__ // On cocoa there is no way to configure the window manager to // focus windows on mouse enter, so we do it ourselves if (OPT(focus_follows_mouse) && !global_state.callback_os_window->is_focused) { focus_os_window(global_state.callback_os_window, false); } #endif } void mouse_event(int button, int modifiers, int action) { MouseShape old_cursor = mouse_cursor_shape; bool in_tab_bar; unsigned int window_idx = 0; Window *w = NULL; if (global_state.active_drag_in_window) { if (button == -1) { // drag move w = window_for_id(global_state.active_drag_in_window); if (w) { button = currently_pressed_button(); if (button == GLFW_MOUSE_BUTTON_LEFT) { clamp_to_window = true; Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; for (window_idx = 0; window_idx < t->num_windows && t->windows[window_idx].id != w->id; window_idx++); handle_move_event(w, button, modifiers, window_idx); clamp_to_window = false; return; } } } else if (action == GLFW_RELEASE && button == GLFW_MOUSE_BUTTON_LEFT) { w = window_for_id(global_state.active_drag_in_window); if (w) { update_drag(true, w, true, modifiers); } } } w = window_for_event(&window_idx, &in_tab_bar); if (in_tab_bar) { mouse_cursor_shape = HAND; handle_tab_bar_mouse(button, modifiers); } else if (w) { handle_event(w, button, modifiers, window_idx); } else if (button == GLFW_MOUSE_BUTTON_LEFT && global_state.callback_os_window->mouse_button_pressed[button]) { // initial click, clamp it to the closest window w = closest_window_for_event(&window_idx); if (w) { clamp_to_window = true; handle_event(w, button, modifiers, window_idx); clamp_to_window = false; } } if (mouse_cursor_shape != old_cursor) { set_mouse_cursor(mouse_cursor_shape); } } void scroll_event(double UNUSED xoffset, double yoffset, int flags) { bool in_tab_bar; static id_type window_for_momentum_scroll = 0; static bool main_screen_for_momentum_scroll = false; unsigned int window_idx = 0; Window *w = window_for_event(&window_idx, &in_tab_bar); if (!w && !in_tab_bar) { // allow scroll events even if window is not currently focused (in // which case on some platforms such as macOS the mouse location is zeroed so // window_for_event() does not work). Tab *t = global_state.callback_os_window->tabs + global_state.callback_os_window->active_tab; if (t) w = t->windows + t->active_window; } if (!w) return; Screen *screen = w->render_data.screen; enum MomentumData { NoMomentumData, MomentumPhaseBegan, MomentumPhaseStationary, MomentumPhaseActive, MomentumPhaseEnded, MomentumPhaseCancelled, MomentumPhaseMayBegin }; enum MomentumData momentum_data = (flags >> 1) & 7; switch(momentum_data) { case NoMomentumData: break; case MomentumPhaseBegan: window_for_momentum_scroll = w->id; main_screen_for_momentum_scroll = screen->linebuf == screen->main_linebuf; break; case MomentumPhaseStationary: case MomentumPhaseActive: if (window_for_momentum_scroll != w->id || main_screen_for_momentum_scroll != (screen->linebuf == screen->main_linebuf)) return; break; case MomentumPhaseEnded: case MomentumPhaseCancelled: window_for_momentum_scroll = 0; break; case MomentumPhaseMayBegin: default: break; } if (yoffset == 0.0) return; int s; bool is_high_resolution = flags & 1; if (is_high_resolution) { yoffset *= OPT(touch_scroll_multiplier); if (yoffset * screen->pending_scroll_pixels < 0) { screen->pending_scroll_pixels = 0; // change of direction } double pixels = screen->pending_scroll_pixels + yoffset; if (fabs(pixels) < global_state.callback_os_window->fonts_data->cell_height) { screen->pending_scroll_pixels = pixels; return; } s = (int)round(pixels) / (int)global_state.callback_os_window->fonts_data->cell_height; screen->pending_scroll_pixels = pixels - s * (int) global_state.callback_os_window->fonts_data->cell_height; } else { if (screen->linebuf == screen->main_linebuf || !screen->modes.mouse_tracking_mode) { // Only use wheel_scroll_multiplier if we are scrolling kitty scrollback or in mouse // tracking mode, where the application is responsible for interpreting scroll events yoffset *= OPT(wheel_scroll_multiplier); } else if (OPT(wheel_scroll_multiplier) < 0) { // ensure that changing scroll direction still works, even though // we are not using wheel_scroll_multiplier yoffset *= -1; } s = (int) round(yoffset); // apparently on cocoa some mice generate really small yoffset values // when scrolling slowly https://github.com/kovidgoyal/kitty/issues/1238 if (s == 0 && yoffset != 0) s = yoffset > 0 ? 1 : -1; screen->pending_scroll_pixels = 0; } if (s == 0) return; bool upwards = s > 0; if (screen->linebuf == screen->main_linebuf) { screen_history_scroll(screen, abs(s), upwards); } else { if (screen->modes.mouse_tracking_mode) { int sz = encode_mouse_event(w, upwards ? GLFW_MOUSE_BUTTON_4 : GLFW_MOUSE_BUTTON_5, PRESS, 0); if (sz > 0) { mouse_event_buf[sz] = 0; for (s = abs(s); s > 0; s--) { write_escape_code_to_child(screen, CSI, mouse_event_buf); } } } else { fake_scroll(abs(s), upwards); } } } static PyObject* test_encode_mouse(PyObject *self UNUSED, PyObject *args) { unsigned int x, y; int mouse_tracking_protocol, button, action, mods; if (!PyArg_ParseTuple(args, "IIiiii", &x, &y, &mouse_tracking_protocol, &button, &action, &mods)) return NULL; int sz = encode_mouse_event_impl(x, y, mouse_tracking_protocol, button, action, mods); return PyUnicode_FromStringAndSize(mouse_event_buf, sz); } static PyMethodDef module_methods[] = { METHODB(test_encode_mouse, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_mouse(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } kitty-0.15.0/kitty/notify.py000066400000000000000000000027501356737523400160120ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal from .constants import is_macos, logo_png_file if is_macos: from .fast_data_types import cocoa_send_notification def notify( title, body, timeout=5000, application='kitty', icon=True, identifier=None ): if icon is True: icon = None cocoa_send_notification(identifier, title, body, icon) else: from .fast_data_types import dbus_send_notification from .constants import get_boss alloc_map = {} identifier_map = {} def dbus_notification_created(alloc_id, notification_id): identifier = alloc_map.pop(alloc_id, None) if identifier is not None: identifier_map[identifier] = notification_id def dbus_notification_activated(notification_id, action): rmap = {v: k for k, v in identifier_map.items()} identifier = rmap.get(notification_id) if identifier is not None: get_boss().notification_activated(identifier) def notify( title, body, timeout=-1, application='kitty', icon=True, identifier=None ): if icon is True: icon = logo_png_file alloc_id = dbus_send_notification(application, icon, title, body, 'Click to see changes', timeout) if alloc_id and identifier is not None: alloc_map[alloc_id] = identifier kitty-0.15.0/kitty/parse-graphics-command.h000066400000000000000000000236141356737523400206270ustar00rootroot00000000000000// This file is generated by ./gen-apc-parsers.py do not edit! #pragma once static inline void parse_graphics_code(Screen *screen, PyObject UNUSED *dump_callback) { unsigned int pos = 1; enum PARSER_STATES { KEY, EQUAL, UINT, INT, FLAG, AFTER_VALUE, PAYLOAD }; enum PARSER_STATES state = KEY, value_state = FLAG; static GraphicsCommand g; unsigned int i, code; uint64_t lcode; bool is_negative; zero_at_ptr(&g); size_t sz; static uint8_t payload[4096]; enum KEYS { action = 'a', delete_action = 'd', transmission_type = 't', compressed = 'o', format = 'f', more = 'm', id = 'i', width = 'w', height = 'h', x_offset = 'x', y_offset = 'y', data_height = 'v', data_width = 's', data_sz = 'S', data_offset = 'O', num_cells = 'c', num_lines = 'r', cell_x_offset = 'X', cell_y_offset = 'Y', z_index = 'z' }; enum KEYS key = 'a'; while (pos < screen->parser_buf_pos) { switch (state) { case KEY: key = screen->parser_buf[pos++]; state = EQUAL; switch (key) { case action: value_state = FLAG; break; case delete_action: value_state = FLAG; break; case transmission_type: value_state = FLAG; break; case compressed: value_state = FLAG; break; case format: value_state = UINT; break; case more: value_state = UINT; break; case id: value_state = UINT; break; case width: value_state = UINT; break; case height: value_state = UINT; break; case x_offset: value_state = UINT; break; case y_offset: value_state = UINT; break; case data_height: value_state = UINT; break; case data_width: value_state = UINT; break; case data_sz: value_state = UINT; break; case data_offset: value_state = UINT; break; case num_cells: value_state = UINT; break; case num_lines: value_state = UINT; break; case cell_x_offset: value_state = UINT; break; case cell_y_offset: value_state = UINT; break; case z_index: value_state = INT; break; default: REPORT_ERROR("Malformed GraphicsCommand control block, invalid key " "character: 0x%x", key); return; } break; case EQUAL: if (screen->parser_buf[pos++] != '=') { REPORT_ERROR("Malformed GraphicsCommand control block, no = after key, " "found: 0x%x instead", screen->parser_buf[pos - 1]); return; } state = value_state; break; case FLAG: switch (key) { case action: { g.action = screen->parser_buf[pos++] & 0xff; if (g.action != 'q' && g.action != 'd' && g.action != 't' && g.action != 'T' && g.action != 'p') { REPORT_ERROR("Malformed GraphicsCommand control block, unknown flag " "value for action: 0x%x", g.action); return; }; } break; case delete_action: { g.delete_action = screen->parser_buf[pos++] & 0xff; if (g.delete_action != 'q' && g.delete_action != 'c' && g.delete_action != 'Z' && g.delete_action != 'z' && g.delete_action != 'x' && g.delete_action != 'X' && g.delete_action != 'I' && g.delete_action != 'i' && g.delete_action != 'P' && g.delete_action != 'y' && g.delete_action != 'a' && g.delete_action != 'A' && g.delete_action != 'Q' && g.delete_action != 'C' && g.delete_action != 'p' && g.delete_action != 'Y') { REPORT_ERROR("Malformed GraphicsCommand control block, unknown flag " "value for delete_action: 0x%x", g.delete_action); return; }; } break; case transmission_type: { g.transmission_type = screen->parser_buf[pos++] & 0xff; if (g.transmission_type != 's' && g.transmission_type != 'f' && g.transmission_type != 't' && g.transmission_type != 'd') { REPORT_ERROR("Malformed GraphicsCommand control block, unknown flag " "value for transmission_type: 0x%x", g.transmission_type); return; }; } break; case compressed: { g.compressed = screen->parser_buf[pos++] & 0xff; if (g.compressed != 'z') { REPORT_ERROR("Malformed GraphicsCommand control block, unknown flag " "value for compressed: 0x%x", g.compressed); return; }; } break; default: break; } state = AFTER_VALUE; break; case INT: #define READ_UINT \ for (i = pos; i < MIN(screen->parser_buf_pos, pos + 10); i++) { \ if (screen->parser_buf[i] < '0' || screen->parser_buf[i] > '9') \ break; \ } \ if (i == pos) { \ REPORT_ERROR("Malformed GraphicsCommand control block, expecting an " \ "integer value for key: %c", \ key & 0xFF); \ return; \ } \ lcode = utoi(screen->parser_buf + pos, i - pos); \ pos = i; \ if (lcode > UINT32_MAX) { \ REPORT_ERROR( \ "Malformed GraphicsCommand control block, number is too large"); \ return; \ } \ code = lcode; is_negative = false; if (screen->parser_buf[pos] == '-') { is_negative = true; pos++; } #define I(x) \ case x: \ g.x = is_negative ? 0 - (int32_t)code : (int32_t)code; \ break READ_UINT; switch (key) { I(z_index); default: break; } state = AFTER_VALUE; break; #undef I case UINT: READ_UINT; #define U(x) \ case x: \ g.x = code; \ break switch (key) { U(format); U(more); U(id); U(width); U(height); U(x_offset); U(y_offset); U(data_height); U(data_width); U(data_sz); U(data_offset); U(num_cells); U(num_lines); U(cell_x_offset); U(cell_y_offset); default: break; } state = AFTER_VALUE; break; #undef U #undef READ_UINT case AFTER_VALUE: switch (screen->parser_buf[pos++]) { default: REPORT_ERROR("Malformed GraphicsCommand control block, expecting a " "comma or semi-colon after a value, found: 0x%x", screen->parser_buf[pos - 1]); return; case ',': state = KEY; break; case ';': state = PAYLOAD; break; } break; case PAYLOAD: { sz = screen->parser_buf_pos - pos; const char *err = base64_decode(screen->parser_buf + pos, sz, payload, sizeof(payload), &g.payload_sz); if (err != NULL) { REPORT_ERROR( "Failed to parse GraphicsCommand command payload with error: %s", err); return; } pos = screen->parser_buf_pos; } break; } // end switch } // end while switch (state) { case EQUAL: REPORT_ERROR("Malformed GraphicsCommand control block, no = after key"); return; case INT: case UINT: REPORT_ERROR( "Malformed GraphicsCommand control block, expecting an integer value"); return; case FLAG: REPORT_ERROR( "Malformed GraphicsCommand control block, expecting a flag value"); return; default: break; } REPORT_VA_COMMAND( "s {sc sc sc sc sI sI sI sI sI sI sI sI sI sI sI sI sI sI sI si sI} y#", "graphics_command", "action", g.action, "delete_action", g.delete_action, "transmission_type", g.transmission_type, "compressed", g.compressed, "format", (unsigned int)g.format, "more", (unsigned int)g.more, "id", (unsigned int)g.id, "width", (unsigned int)g.width, "height", (unsigned int)g.height, "x_offset", (unsigned int)g.x_offset, "y_offset", (unsigned int)g.y_offset, "data_height", (unsigned int)g.data_height, "data_width", (unsigned int)g.data_width, "data_sz", (unsigned int)g.data_sz, "data_offset", (unsigned int)g.data_offset, "num_cells", (unsigned int)g.num_cells, "num_lines", (unsigned int)g.num_lines, "cell_x_offset", (unsigned int)g.cell_x_offset, "cell_y_offset", (unsigned int)g.cell_y_offset, "z_index", (int)g.z_index, "payload_sz", g.payload_sz, payload, g.payload_sz); screen_handle_graphics_command(screen, &g, payload); } kitty-0.15.0/kitty/parser.c000066400000000000000000001316101356737523400155660ustar00rootroot00000000000000/* * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "data-types.h" #include "control-codes.h" #include "screen.h" #include "graphics.h" #include "charsets.h" #include "monotonic.h" #include extern PyTypeObject Screen_Type; // utils {{{ static uint64_t pow10_array[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000 }; static inline uint64_t utoi(uint32_t *buf, unsigned int sz) { uint64_t ans = 0; uint32_t *p = buf; // Ignore leading zeros while(sz > 0) { if (*p == '0') { p++; sz--; } else break; } if (sz < sizeof(pow10_array)/sizeof(pow10_array[0])) { for (int i = sz-1, j=0; i >= 0; i--, j++) { ans += (p[i] - '0') * pow10_array[j]; } } return ans; } static inline const char* utf8(char_type codepoint) { if (!codepoint) return ""; static char buf[8]; int n = encode_utf8(codepoint, buf); buf[n] = 0; return buf; } // }}} // Macros {{{ #define MAX_PARAMS 256 #define IS_DIGIT \ case '0': \ case '1': \ case '2': \ case '3': \ case '4': \ case '5': \ case '6': \ case '7': \ case '8': \ case '9': #ifdef DUMP_COMMANDS static void _report_error(PyObject *dump_callback, const char *fmt, ...) { va_list argptr; va_start(argptr, fmt); PyObject *temp = PyUnicode_FromFormatV(fmt, argptr); va_end(argptr); if (temp != NULL) { Py_XDECREF(PyObject_CallFunctionObjArgs(dump_callback, temp, NULL)); PyErr_Clear(); Py_CLEAR(temp); } } static void _report_params(PyObject *dump_callback, const char *name, unsigned int *params, unsigned int count, Region *r) { static char buf[MAX_PARAMS*3] = {0}; unsigned int i, p=0; if (r) p += snprintf(buf + p, sizeof(buf) - 2, "%u %u %u %u ", r->top, r->left, r->bottom, r->right); for(i = 0; i < count && p < MAX_PARAMS*3-20; i++) { int n = snprintf(buf + p, MAX_PARAMS*3 - p, "%u ", params[i]); if (n < 0) break; p += n; } buf[p] = 0; Py_XDECREF(PyObject_CallFunction(dump_callback, "ss", name, buf)); PyErr_Clear(); } #define DUMP_UNUSED #define REPORT_ERROR(...) _report_error(dump_callback, __VA_ARGS__); #define REPORT_COMMAND1(name) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "s", #name)); PyErr_Clear(); #define REPORT_COMMAND2(name, x) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "si", #name, (int)x)); PyErr_Clear(); #define REPORT_COMMAND3(name, x, y) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "sii", #name, (int)x, (int)y)); PyErr_Clear(); #define GET_MACRO(_1,_2,_3,NAME,...) NAME #define REPORT_COMMAND(...) GET_MACRO(__VA_ARGS__, REPORT_COMMAND3, REPORT_COMMAND2, REPORT_COMMAND1, SENTINEL)(__VA_ARGS__) #define REPORT_VA_COMMAND(...) Py_XDECREF(PyObject_CallFunction(dump_callback, __VA_ARGS__)); PyErr_Clear(); #define REPORT_DRAW(ch) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "sC", "draw", ch)); PyErr_Clear(); #define REPORT_PARAMS(name, params, num, region) _report_params(dump_callback, name, params, num_params, region) #define FLUSH_DRAW \ Py_XDECREF(PyObject_CallFunction(dump_callback, "sO", "draw", Py_None)); PyErr_Clear(); #define REPORT_OSC(name, string) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "sO", #name, string)); PyErr_Clear(); #define REPORT_OSC2(name, code, string) \ Py_XDECREF(PyObject_CallFunction(dump_callback, "sIO", #name, code, string)); PyErr_Clear(); #else #define DUMP_UNUSED UNUSED #define REPORT_ERROR(...) log_error(ERROR_PREFIX " " __VA_ARGS__); #define REPORT_COMMAND(...) #define REPORT_VA_COMMAND(...) #define REPORT_DRAW(ch) #define REPORT_PARAMS(...) #define FLUSH_DRAW #define REPORT_OSC(name, string) #define REPORT_OSC2(name, code, string) #endif #define SET_STATE(state) screen->parser_state = state; screen->parser_buf_pos = 0; // }}} // Normal mode {{{ static inline void screen_nel(Screen *screen) { screen_carriage_return(screen); screen_linefeed(screen); } static inline void handle_normal_mode_char(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { #define CALL_SCREEN_HANDLER(name) REPORT_COMMAND(name); name(screen); break; switch(ch) { case BEL: CALL_SCREEN_HANDLER(screen_bell); case BS: CALL_SCREEN_HANDLER(screen_backspace); case HT: CALL_SCREEN_HANDLER(screen_tab); case NEL: CALL_SCREEN_HANDLER(screen_nel); case LF: case VT: case FF: CALL_SCREEN_HANDLER(screen_linefeed); case CR: CALL_SCREEN_HANDLER(screen_carriage_return); case SI: REPORT_COMMAND(screen_change_charset, 0); screen_change_charset(screen, 0); break; case SO: REPORT_COMMAND(screen_change_charset, 1); screen_change_charset(screen, 1); break; case IND: CALL_SCREEN_HANDLER(screen_index); case RI: CALL_SCREEN_HANDLER(screen_reverse_index); case HTS: CALL_SCREEN_HANDLER(screen_set_tab_stop); case ESC: case CSI: case OSC: case DCS: case APC: case PM: SET_STATE(ch); break; case NUL: case DEL: break; // no-op default: REPORT_DRAW(ch); screen_draw(screen, ch); break; } #undef CALL_SCREEN_HANDLER } // }}} // Esc mode {{{ static inline void handle_esc_mode_char(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { #define CALL_ED(name) REPORT_COMMAND(name); name(screen); SET_STATE(0); #define CALL_ED1(name, ch) REPORT_COMMAND(name, ch); name(screen, ch); SET_STATE(0); #define CALL_ED2(name, a, b) REPORT_COMMAND(name, a, b); name(screen, a, b); SET_STATE(0); switch(screen->parser_buf_pos) { case 0: switch (ch) { case ESC_DCS: SET_STATE(DCS); break; case ESC_OSC: SET_STATE(OSC); break; case ESC_CSI: SET_STATE(CSI); break; case ESC_APC: SET_STATE(APC); break; case ESC_PM: SET_STATE(PM); break; case ESC_RIS: CALL_ED(screen_reset); break; case ESC_IND: CALL_ED(screen_index); break; case ESC_NEL: CALL_ED(screen_nel); break; case ESC_RI: CALL_ED(screen_reverse_index); break; case ESC_HTS: CALL_ED(screen_set_tab_stop); break; case ESC_DECSC: CALL_ED(screen_save_cursor); break; case ESC_DECRC: CALL_ED(screen_restore_cursor); break; case ESC_DECPNM: CALL_ED(screen_normal_keypad_mode); break; case ESC_DECPAM: CALL_ED(screen_alternate_keypad_mode); break; case '%': case '(': case ')': case '*': case '+': case '-': case '.': case '/': case ' ': case '#': screen->parser_buf[screen->parser_buf_pos++] = ch; break; default: REPORT_ERROR("%s0x%x", "Unknown char after ESC: ", ch); SET_STATE(0); break; } break; default: switch(screen->parser_buf[0]) { case '%': switch(ch) { case '@': REPORT_COMMAND(screen_use_latin1, 1); screen_use_latin1(screen, true); break; case 'G': REPORT_COMMAND(screen_use_latin1, 0); screen_use_latin1(screen, false); break; default: REPORT_ERROR("Unhandled Esc %% code: 0x%x", ch); break; } break; case '#': if (ch == '8') { CALL_ED(screen_align); } else { REPORT_ERROR("Unhandled Esc # code: 0x%x", ch); } break; case '(': case ')': switch(ch) { case 'A': case 'B': case '0': case 'U': case 'V': CALL_ED2(screen_designate_charset, screen->parser_buf[0] - '(', ch); break; default: REPORT_ERROR("Unknown charset: 0x%x", ch); break; } break; case ' ': switch(ch) { case 'F': case 'G': REPORT_COMMAND(screen_set_8bit_controls, ch == 'G'); screen_set_8bit_controls(screen, ch == 'G'); break; default: REPORT_ERROR("Unhandled ESC SP escape code: 0x%x", ch); break; } break; default: REPORT_ERROR("Unhandled charset related escape code: 0x%x 0x%x", screen->parser_buf[0], ch); break; } SET_STATE(0); break; } #undef CALL_ED #undef CALL_ED1 } // }}} // OSC mode {{{ static inline void dispatch_osc(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { #define DISPATCH_OSC(name) REPORT_OSC(name, string); name(screen, string); #define SET_COLOR(name) REPORT_OSC2(name, code, string); name(screen, code, string); const unsigned int limit = screen->parser_buf_pos; unsigned int code=0, i; for (i = 0; i < MIN(limit, 5u); i++) { if (screen->parser_buf[i] < '0' || screen->parser_buf[i] > '9') break; } if (i > 0) { code = utoi(screen->parser_buf, i); if (i < limit && screen->parser_buf[i] == ';') i++; } PyObject *string = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, screen->parser_buf + i, limit - i); if (string != NULL) { switch(code) { case 0: DISPATCH_OSC(set_title); DISPATCH_OSC(set_icon); break; case 1: DISPATCH_OSC(set_icon); break; case 2: DISPATCH_OSC(set_title); break; case 4: case 104: SET_COLOR(set_color_table_color); break; case 10: case 11: case 12: case 17: case 19: case 110: case 111: case 112: case 117: case 119: SET_COLOR(set_dynamic_color); break; case 52: DISPATCH_OSC(clipboard_control); break; case 30001: REPORT_COMMAND(screen_push_dynamic_colors); screen_push_dynamic_colors(screen); break; case 30101: REPORT_COMMAND(screen_pop_dynamic_colors); screen_pop_dynamic_colors(screen); break; default: REPORT_ERROR("Unknown OSC code: %u", code); break; } Py_CLEAR(string); } #undef DISPATCH_OSC #undef SET_COLOR } // }}} // CSI mode {{{ #define CSI_SECONDARY \ case ';': \ case ':': \ case '"': \ case '*': \ case '\'': \ case ' ': \ case '$': static inline void screen_cursor_up2(Screen *s, unsigned int count) { screen_cursor_up(s, count, false, -1); } static inline void screen_cursor_back1(Screen *s, unsigned int count) { screen_cursor_back(s, count, -1); } static inline void screen_tabn(Screen *s, unsigned int count) { for (index_type i=0; i < MAX(1u, count); i++) screen_tab(s); } static inline const char* repr_csi_params(unsigned int *params, unsigned int num_params) { if (!num_params) return ""; static char buf[256]; unsigned int pos = 0; while (pos < 200 && num_params && sizeof(buf) > pos + 1) { const char *fmt = num_params > 1 ? "%u " : "%u"; int ret = snprintf(buf + pos, sizeof(buf) - pos - 1, fmt, params[num_params--]); if (ret < 0) return "An error occurred formatting the params array"; pos += ret; } buf[pos] = 0; return buf; } static inline void parse_sgr(Screen *screen, uint32_t *buf, unsigned int num, unsigned int *params, PyObject DUMP_UNUSED *dump_callback, const char *report_name DUMP_UNUSED, Region *region) { enum State { START, NORMAL, MULTIPLE, COLOR, COLOR1, COLOR3 }; enum State state = START; unsigned int num_params, num_start, i; #define READ_PARAM { params[num_params++] = utoi(buf + num_start, i - num_start); } #define SEND_SGR { REPORT_PARAMS(report_name, params, num_params, region); select_graphic_rendition(screen, params, num_params, region); state = START; num_params = 0; } for (i=0, num_start=0, num_params=0; i < num && num_params < MAX_PARAMS; i++) { switch(buf[i]) { IS_DIGIT switch(state) { case START: num_start = i; state = NORMAL; num_params = 0; break; default: break; } break; case ';': switch(state) { case START: params[num_params++] = 0; SEND_SGR; break; case NORMAL: READ_PARAM; switch(params[0]) { case 38: case 48: case 58: state = COLOR; num_start = i + 1; break; default: SEND_SGR; break; } break; case MULTIPLE: READ_PARAM; SEND_SGR; break; case COLOR: READ_PARAM; switch(params[1]) { case 2: state = COLOR3; break; case 5: state = COLOR1; break; default: REPORT_ERROR("Invalid SGR color code with unknown color type: %u", params[1]); return; } num_start = i + 1; break; case COLOR1: READ_PARAM; SEND_SGR; break; case COLOR3: READ_PARAM; if (num_params == 5) { SEND_SGR; } else num_start = i + 1; break; } break; case ':': switch(state) { case START: REPORT_ERROR("Invalid SGR code containing ':' at an invalid location: %u", i); return; case NORMAL: READ_PARAM; state = MULTIPLE; num_start = i + 1; break; case MULTIPLE: READ_PARAM; num_start = i + 1; break; case COLOR: case COLOR1: case COLOR3: REPORT_ERROR("Invalid SGR code containing disallowed character: %s", utf8(buf[i])); return; } break; default: REPORT_ERROR("Invalid SGR code containing disallowed character: %s", utf8(buf[i])); return; } } switch(state) { case START: if (num_params < MAX_PARAMS) params[num_params++] = 0; SEND_SGR; break; case COLOR1: case NORMAL: case MULTIPLE: if (i > num_start && num_params < MAX_PARAMS) { READ_PARAM; } if (num_params) { SEND_SGR; } else { REPORT_ERROR("Incomplete SGR code"); } break; case COLOR: REPORT_ERROR("Invalid SGR code containing incomplete semi-colon separated color sequence"); break; case COLOR3: if (i > num_start && num_params < MAX_PARAMS) READ_PARAM; if (num_params != 5) { REPORT_ERROR("Invalid SGR code containing incomplete semi-colon separated color sequence"); break; } if (num_params) { SEND_SGR; } else { REPORT_ERROR("Incomplete SGR code"); } break; } #undef READ_PARAM #undef SEND_SGR } static inline unsigned int parse_region(Region *r, uint32_t *buf, unsigned int num) { unsigned int i, start, params[8] = {0}, num_params=0; for (i=0, start=0; i < num && num_params < 4; i++) { switch(buf[i]) { IS_DIGIT break; default: if (i > start) params[num_params++] = utoi(buf + start, i - start); else if (i == start && buf[i] == ';') params[num_params++] = 0; start = i + 1; break; } } switch(num_params) { case 0: break; case 1: r->top = params[0]; break; case 2: r->top = params[0]; r->left = params[1]; break; case 3: r->top = params[0]; r->left = params[1]; r->bottom = params[2]; break; default: r->top = params[0]; r->left = params[1]; r->bottom = params[2]; r->right = params[3]; break; } return i; } static inline void dispatch_csi(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { #define CALL_CSI_HANDLER1(name, defval) \ p1 = num_params > 0 ? params[0] : defval; \ REPORT_COMMAND(name, p1); \ name(screen, p1); \ break; #define CALL_CSI_HANDLER1P(name, defval, qch) \ p1 = num_params > 0 ? params[0] : defval; \ private = start_modifier == qch; \ REPORT_COMMAND(name, p1, private); \ name(screen, p1, private); \ break; #define CALL_CSI_HANDLER1S(name, defval) \ p1 = num_params > 0 ? params[0] : defval; \ REPORT_COMMAND(name, p1, start_modifier); \ name(screen, p1, start_modifier); \ break; #define CALL_CSI_HANDLER1M(name, defval) \ p1 = num_params > 0 ? params[0] : defval; \ REPORT_COMMAND(name, p1, end_modifier); \ name(screen, p1, end_modifier); \ break; #define CALL_CSI_HANDLER2(name, defval1, defval2) \ p1 = num_params > 0 ? params[0] : defval1; \ p2 = num_params > 1 ? params[1] : defval2; \ REPORT_COMMAND(name, p1, p2); \ name(screen, p1, p2); \ break; #define SET_MODE(func) \ p1 = start_modifier == '?' ? 5 : 0; \ for (i = 0; i < num_params; i++) { \ REPORT_COMMAND(func, params[i], start_modifier == '?'); \ func(screen, params[i] << p1); \ } \ break; #define NO_MODIFIERS(modifier, special, special_msg) { \ if (start_modifier || end_modifier) { \ if (special && modifier == special) { REPORT_ERROR(special_msg); } \ else { REPORT_ERROR("CSI code 0x%x has unsupported start modifier: 0x%x or end modifier: 0x%x", code, start_modifier, end_modifier);} \ break; \ }} char start_modifier = 0, end_modifier = 0; uint32_t *buf = screen->parser_buf, code = screen->parser_buf[screen->parser_buf_pos]; unsigned int num = screen->parser_buf_pos, start, i, num_params=0, p1, p2; static unsigned int params[MAX_PARAMS] = {0}; bool private; if (buf[0] == '>' || buf[0] == '?' || buf[0] == '!' || buf[0] == '=' || buf[0] == '-') { start_modifier = (char)screen->parser_buf[0]; buf++; num--; } if (code == SGR && !start_modifier) { parse_sgr(screen, buf, num, params, dump_callback, "select_graphic_rendition", NULL); return; } if (code == 'r' && !start_modifier && num > 0 && buf[num - 1] == '$') { // DECCARA Region r = {0}; unsigned int consumed = parse_region(&r, buf, --num); num -= consumed; buf += consumed; parse_sgr(screen, buf, num, params, dump_callback, "deccara", &r); return; } if (num > 0) { switch(buf[num-1]) { CSI_SECONDARY end_modifier = (char)buf[--num]; } } for (i=0, start=0; i < num; i++) { switch(buf[i]) { IS_DIGIT break; default: if (i > start) params[num_params++] = utoi(buf + start, i - start); else if (i == start && buf[i] == ';') params[num_params++] = 0; if (num_params >= MAX_PARAMS) { i = num; start = num + 1; } else { start = i + 1; break; } } } if (i > start) params[num_params++] = utoi(buf + start, i - start); switch(code) { case ICH: NO_MODIFIERS(end_modifier, ' ', "Shift left escape code not implemented"); CALL_CSI_HANDLER1(screen_insert_characters, 1); case CUU: NO_MODIFIERS(end_modifier, ' ', "Shift right escape code not implemented"); CALL_CSI_HANDLER1(screen_cursor_up2, 1); case CUD: case VPR: CALL_CSI_HANDLER1(screen_cursor_down, 1); case CUF: case HPR: CALL_CSI_HANDLER1(screen_cursor_forward, 1); case CUB: CALL_CSI_HANDLER1(screen_cursor_back1, 1); case CNL: CALL_CSI_HANDLER1(screen_cursor_down1, 1); case CPL: CALL_CSI_HANDLER1(screen_cursor_up1, 1); case CHA: case HPA: CALL_CSI_HANDLER1(screen_cursor_to_column, 1); case VPA: CALL_CSI_HANDLER1(screen_cursor_to_line, 1); case CBT: CALL_CSI_HANDLER1(screen_backtab, 1); case CHT: CALL_CSI_HANDLER1(screen_tabn, 1); case CUP: case HVP: CALL_CSI_HANDLER2(screen_cursor_position, 1, 1); case ED: CALL_CSI_HANDLER1P(screen_erase_in_display, 0, '?'); case EL: CALL_CSI_HANDLER1P(screen_erase_in_line, 0, '?'); case IL: CALL_CSI_HANDLER1(screen_insert_lines, 1); case DL: CALL_CSI_HANDLER1(screen_delete_lines, 1); case DCH: CALL_CSI_HANDLER1(screen_delete_characters, 1); case ECH: CALL_CSI_HANDLER1(screen_erase_characters, 1); case DA: CALL_CSI_HANDLER1S(report_device_attributes, 0); case TBC: CALL_CSI_HANDLER1(screen_clear_tab_stop, 0); case SM: SET_MODE(screen_set_mode); case RM: SET_MODE(screen_reset_mode); case DSR: CALL_CSI_HANDLER1P(report_device_status, 0, '?'); case 's': if (!start_modifier && !end_modifier && !num_params) { REPORT_COMMAND(screen_save_cursor); screen_save_cursor(screen); break; } else if (start_modifier == '?' && !end_modifier && !num_params) { REPORT_COMMAND(screen_save_modes); screen_save_modes(screen); break; } REPORT_ERROR("Unknown CSI s sequence with start and end modifiers: '%c' '%c' and %u parameters", start_modifier, end_modifier, num_params); break; case 't': if (!num_params) { REPORT_ERROR("Unknown CSI t sequence with start and end modifiers: '%c' '%c' and no parameters", start_modifier, end_modifier); break; } if (start_modifier || end_modifier) { REPORT_ERROR("Unknown CSI t sequence with start and end modifiers: '%c' '%c', %u parameters and first parameter: %u", start_modifier, end_modifier, num_params, params[0]); break; } switch(params[0]) { case 4: case 8: log_error("Escape codes to resize text area are not supported"); break; case 14: case 16: case 18: CALL_CSI_HANDLER1(screen_report_size, 0); break; case 22: case 23: CALL_CSI_HANDLER2(screen_manipulate_title_stack, 22, 0); break; default: REPORT_ERROR("Unknown CSI t window manipulation sequence with %u parameters and first parameter: %u", num_params, params[0]); break; } break; case 'u': if (!start_modifier && !end_modifier && !num_params) { REPORT_COMMAND(screen_restore_cursor); screen_restore_cursor(screen); break; } REPORT_ERROR("Unknown CSI u sequence with start and end modifiers: '%c' '%c' and %u parameters", start_modifier, end_modifier, num_params); break; case 'r': if (!start_modifier && !end_modifier) { // DECSTBM CALL_CSI_HANDLER2(screen_set_margins, 0, 0); } else if (start_modifier == '?' && !end_modifier && !num_params) { REPORT_COMMAND(screen_restore_modes); screen_restore_modes(screen); break; } REPORT_ERROR("Unknown CSI r sequence with start and end modifiers: '%c' '%c' and %u parameters", start_modifier, end_modifier, num_params); break; case 'x': if (!start_modifier && end_modifier == '*') { CALL_CSI_HANDLER1(screen_decsace, 0); } REPORT_ERROR("Unknown CSI x sequence with start and end modifiers: '%c' '%c'", start_modifier, end_modifier); break; case DECSCUSR: CALL_CSI_HANDLER1M(screen_set_cursor, 1); case SU: NO_MODIFIERS(end_modifier, ' ', "Select presentation directions escape code not implemented"); CALL_CSI_HANDLER1(screen_scroll, 1); case SD: CALL_CSI_HANDLER1(screen_reverse_scroll, 1); case DECSTR: if (end_modifier == '$') { // DECRQM CALL_CSI_HANDLER1P(report_mode_status, 0, '?'); } else { REPORT_ERROR("Unknown DECSTR CSI sequence with start and end modifiers: '%c' '%c'", start_modifier, end_modifier); } break; default: REPORT_ERROR("Unknown CSI code: '%s' with start_modifier: '%c' and end_modifier: '%c' and parameters: '%s'", utf8(code), start_modifier, end_modifier, repr_csi_params(params, num_params)); } } // }}} // DCS mode {{{ static inline bool startswith(const uint32_t *string, size_t sz, const char *prefix) { size_t l = strlen(prefix); if (sz < l) return false; for (size_t i = 0; i < l; i++) { if (string[i] != (unsigned char)prefix[i]) return false; } return true; } #define PENDING_MODE_CHAR '=' static inline void dispatch_dcs(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { if (screen->parser_buf_pos < 2) return; switch(screen->parser_buf[0]) { case '+': case '$': if (screen->parser_buf[1] == 'q') { PyObject *string = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, screen->parser_buf + 2, screen->parser_buf_pos - 2); if (string != NULL) { REPORT_OSC2(screen_request_capabilities, (char)screen->parser_buf[0], string); screen_request_capabilities(screen, (char)screen->parser_buf[0], string); Py_DECREF(string); } else PyErr_Clear(); } else { REPORT_ERROR("Unrecognized DCS %c code: 0x%x", (char)screen->parser_buf[0], screen->parser_buf[1]); } break; case PENDING_MODE_CHAR: if (screen->parser_buf_pos > 2 && (screen->parser_buf[1] == '1' || screen->parser_buf[2] == '2') && screen->parser_buf[2] == 's') { if (screen->parser_buf[1] == '1') { screen->pending_mode.activated_at = monotonic(); REPORT_COMMAND(screen_start_pending_mode); } else { // ignore stop without matching start REPORT_COMMAND(screen_stop_pending_mode); } } else { REPORT_ERROR("Unrecognized DCS %c code: 0x%x", (char)screen->parser_buf[0], screen->parser_buf[1]); } break; case '@': #define CMD_PREFIX "kitty-cmd{" if (startswith(screen->parser_buf + 1, screen->parser_buf_pos - 2, CMD_PREFIX)) { PyObject *cmd = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, screen->parser_buf + 10, screen->parser_buf_pos - 10); if (cmd != NULL) { REPORT_OSC2(screen_handle_cmd, (char)screen->parser_buf[0], cmd); screen_handle_cmd(screen, cmd); Py_DECREF(cmd); } else PyErr_Clear(); #undef CMD_PREFIX #define PRINT_PREFIX "kitty-print|" } else if (startswith(screen->parser_buf + 1, screen->parser_buf_pos - 1, PRINT_PREFIX)) { PyObject *msg = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, screen->parser_buf + sizeof(PRINT_PREFIX), screen->parser_buf_pos - sizeof(PRINT_PREFIX)); if (msg != NULL) { REPORT_OSC2(screen_handle_print, (char)screen->parser_buf[0], msg); screen_handle_print(screen, msg); Py_DECREF(msg); } else PyErr_Clear(); } else { REPORT_ERROR("Unrecognized DCS @ code: 0x%x", screen->parser_buf[1]); } break; #undef PRINT_PREFIX default: REPORT_ERROR("Unrecognized DCS code: 0x%x", screen->parser_buf[0]); break; } } // }}} // APC mode {{{ #include "parse-graphics-command.h" static inline void dispatch_apc(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { if (screen->parser_buf_pos < 2) return; switch(screen->parser_buf[0]) { case 'G': parse_graphics_code(screen, dump_callback); break; default: REPORT_ERROR("Unrecognized APC code: 0x%x", screen->parser_buf[0]); break; } } // }}} // PM mode {{{ static inline void dispatch_pm(Screen *screen, PyObject DUMP_UNUSED *dump_callback) { if (screen->parser_buf_pos < 2) return; switch(screen->parser_buf[0]) { default: REPORT_ERROR("Unrecognized PM code: 0x%x", screen->parser_buf[0]); break; } } // }}} // Parse loop {{{ static inline bool accumulate_osc(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { switch(ch) { case ST: return true; case BEL: return true; case NUL: case DEL: break; case ESC_ST: if (screen->parser_buf_pos > 0 && screen->parser_buf[screen->parser_buf_pos - 1] == ESC) { screen->parser_buf_pos--; return true; } /* fallthrough */ default: if (screen->parser_buf_pos >= PARSER_BUF_SZ - 1) { REPORT_ERROR("OSC sequence too long, truncating."); return true; } screen->parser_buf[screen->parser_buf_pos++] = ch; break; } return false; } static inline bool accumulate_dcs(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { switch(ch) { case ST: return true; case NUL: case DEL: break; case ESC: START_ALLOW_CASE_RANGE case 32 ... 126: END_ALLOW_CASE_RANGE if (screen->parser_buf_pos > 0 && screen->parser_buf[screen->parser_buf_pos-1] == ESC) { if (ch == '\\') { screen->parser_buf_pos--; return true; } REPORT_ERROR("DCS sequence contained non-printable character: 0x%x ignoring the sequence", ESC); SET_STATE(ESC); return false; } if (screen->parser_buf_pos >= PARSER_BUF_SZ - 1) { REPORT_ERROR("DCS sequence too long, truncating."); return true; } screen->parser_buf[screen->parser_buf_pos++] = ch; break; default: REPORT_ERROR("DCS sequence contained non-printable character: 0x%x ignoring the sequence", ch); } return false; } static inline bool accumulate_oth(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { switch(ch) { case ST: return true; case ESC_ST: if (screen->parser_buf_pos > 0 && screen->parser_buf[screen->parser_buf_pos - 1] == ESC) { screen->parser_buf_pos--; return true; } /* fallthrough */ default: if (screen->parser_buf_pos >= PARSER_BUF_SZ - 1) { REPORT_ERROR("OTH sequence too long, truncating."); return true; } screen->parser_buf[screen->parser_buf_pos++] = ch; break; } return false; } static inline bool accumulate_csi(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback) { #define ENSURE_SPACE \ if (screen->parser_buf_pos > PARSER_BUF_SZ - 1) { \ REPORT_ERROR("CSI sequence too long, ignoring"); \ SET_STATE(0); \ return false; \ } switch(ch) { IS_DIGIT CSI_SECONDARY ENSURE_SPACE; screen->parser_buf[screen->parser_buf_pos++] = ch; break; case '?': case '>': case '!': case '=': case '-': if (screen->parser_buf_pos != 0) { REPORT_ERROR("Invalid character in CSI: 0x%x, ignoring the sequence", ch); SET_STATE(0); return false; } ENSURE_SPACE; screen->parser_buf[screen->parser_buf_pos++] = ch; break; START_ALLOW_CASE_RANGE case 'a' ... 'z': case 'A' ... 'Z': END_ALLOW_CASE_RANGE case '@': case '`': case '{': case '|': case '}': case '~': screen->parser_buf[screen->parser_buf_pos] = ch; return true; case BEL: case BS: case HT: case LF: case VT: case FF: case NEL: case CR: case SO: case SI: case IND: case RI: case HTS: handle_normal_mode_char(screen, ch, dump_callback); break; case NUL: case DEL: break; // no-op default: REPORT_ERROR("Invalid character in CSI: 0x%x, ignoring the sequence", ch); SET_STATE(0); return false; } return false; #undef ENSURE_SPACE } #define dispatch_unicode_char(codepoint, watch_for_pending) { \ switch(screen->parser_state) { \ case ESC: \ handle_esc_mode_char(screen, codepoint, dump_callback); \ break; \ case CSI: \ if (accumulate_csi(screen, codepoint, dump_callback)) { dispatch_csi(screen, dump_callback); SET_STATE(0); } \ break; \ case OSC: \ if (accumulate_osc(screen, codepoint, dump_callback)) { dispatch_osc(screen, dump_callback); SET_STATE(0); } \ break; \ case APC: \ if (accumulate_oth(screen, codepoint, dump_callback)) { dispatch_apc(screen, dump_callback); SET_STATE(0); } \ break; \ case PM: \ if (accumulate_oth(screen, codepoint, dump_callback)) { dispatch_pm(screen, dump_callback); SET_STATE(0); } \ break; \ case DCS: \ if (accumulate_dcs(screen, codepoint, dump_callback)) { dispatch_dcs(screen, dump_callback); SET_STATE(0); watch_for_pending; } \ if (screen->parser_state == ESC) { handle_esc_mode_char(screen, codepoint, dump_callback); break; } \ break; \ default: \ handle_normal_mode_char(screen, codepoint, dump_callback); \ break; \ } \ } \ extern uint32_t *latin1_charset; static inline void _parse_bytes(Screen *screen, const uint8_t *buf, Py_ssize_t len, PyObject DUMP_UNUSED *dump_callback) { uint32_t prev = screen->utf8_state; for (unsigned int i = 0; i < (unsigned int)len; i++) { if (screen->use_latin1) { dispatch_unicode_char(latin1_charset[buf[i]], ;); } else { switch (decode_utf8(&screen->utf8_state, &screen->utf8_codepoint, buf[i])) { case UTF8_ACCEPT: dispatch_unicode_char(screen->utf8_codepoint, ;); break; case UTF8_REJECT: screen->utf8_state = UTF8_ACCEPT; if (prev != UTF8_ACCEPT && i > 0) i--; break; } prev = screen->utf8_state; } } FLUSH_DRAW; } static inline size_t _parse_bytes_watching_for_pending(Screen *screen, const uint8_t *buf, Py_ssize_t len, PyObject DUMP_UNUSED *dump_callback) { uint32_t prev = screen->utf8_state; size_t i = 0; while(i < (size_t)len) { uint8_t ch = buf[i++]; if (screen->use_latin1) { dispatch_unicode_char(latin1_charset[ch], if (screen->pending_mode.activated_at) goto end); } else { switch (decode_utf8(&screen->utf8_state, &screen->utf8_codepoint, ch)) { case UTF8_ACCEPT: dispatch_unicode_char(screen->utf8_codepoint, if (screen->pending_mode.activated_at) goto end); break; case UTF8_REJECT: screen->utf8_state = UTF8_ACCEPT; if (prev != UTF8_ACCEPT && i > 0) i--; break; } prev = screen->utf8_state; } } end: FLUSH_DRAW; return i; } static inline size_t _queue_pending_bytes(Screen *screen, const uint8_t *buf, size_t len, PyObject *dump_callback DUMP_UNUSED) { size_t pos = 0; enum STATE { NORMAL, MAYBE_DCS, IN_DCS, EXPECTING_DATA, EXPECTING_SLASH }; enum STATE state = screen->pending_mode.state; #define COPY(what) screen->pending_mode.buf[screen->pending_mode.used++] = what #define COPY_STOP_BUF { \ COPY(0x1b); COPY('P'); COPY(PENDING_MODE_CHAR); \ for (size_t i = 0; i < screen->pending_mode.stop_buf_pos; i++) { \ COPY(screen->pending_mode.stop_buf[i]); \ } \ screen->pending_mode.stop_buf_pos = 0;} while (pos < len) { uint8_t ch = buf[pos++]; switch(state) { case NORMAL: if (ch == ESC) state = MAYBE_DCS; else COPY(ch); break; case MAYBE_DCS: if (ch == 'P') state = IN_DCS; else { state = NORMAL; COPY(0x1b); COPY(ch); } break; case IN_DCS: if (ch == PENDING_MODE_CHAR) { state = EXPECTING_DATA; screen->pending_mode.stop_buf_pos = 0; } else { state = NORMAL; COPY(0x1b); COPY('P'); COPY(ch); } break; case EXPECTING_DATA: if (ch == 0x1b) state = EXPECTING_SLASH; else { screen->pending_mode.stop_buf[screen->pending_mode.stop_buf_pos++] = ch; if (screen->pending_mode.stop_buf_pos >= sizeof(screen->pending_mode.stop_buf)) { state = NORMAL; COPY_STOP_BUF; } } break; case EXPECTING_SLASH: if ( ch == '\\' && screen->pending_mode.stop_buf_pos >= 2 && (screen->pending_mode.stop_buf[0] == '1' || screen->pending_mode.stop_buf[0] == '2') && screen->pending_mode.stop_buf[1] == 's' ) { // We found a pending mode sequence if (screen->pending_mode.stop_buf[0] == '2') { REPORT_COMMAND(screen_stop_pending_mode); screen->pending_mode.activated_at = 0; goto end; } else { REPORT_COMMAND(screen_start_pending_mode); screen->pending_mode.activated_at = monotonic(); } } else { state = NORMAL; COPY_STOP_BUF; COPY(ch); } break; } } end: screen->pending_mode.state = state; return pos; #undef COPY #undef COPY_STOP_BUF } static inline void do_parse_bytes(Screen *screen, const uint8_t *read_buf, const size_t read_buf_sz, monotonic_t now, PyObject *dump_callback DUMP_UNUSED) { enum STATE {START, PARSE_PENDING, PARSE_READ_BUF, QUEUE_PENDING}; enum STATE state = START; size_t read_buf_pos = 0; do { switch(state) { case START: if (screen->pending_mode.activated_at) { if (screen->pending_mode.activated_at + screen->pending_mode.wait_time < now) { screen->pending_mode.activated_at = 0; state = screen->pending_mode.used ? PARSE_PENDING : PARSE_READ_BUF; } else state = QUEUE_PENDING; } else { state = screen->pending_mode.used ? PARSE_PENDING : PARSE_READ_BUF; } break; case PARSE_PENDING: _parse_bytes(screen, screen->pending_mode.buf, screen->pending_mode.used, dump_callback); screen->pending_mode.used = 0; screen->pending_mode.state = 0; screen->pending_mode.activated_at = 0; // ignore any pending starts in the pending bytes state = START; break; case PARSE_READ_BUF: screen->pending_mode.activated_at = 0; screen->pending_mode.state = 0; read_buf_pos += _parse_bytes_watching_for_pending(screen, read_buf + read_buf_pos, read_buf_sz - read_buf_pos, dump_callback); state = START; break; case QUEUE_PENDING: { if (screen->pending_mode.capacity - screen->pending_mode.used < read_buf_sz + sizeof(screen->pending_mode.stop_buf)) { if (screen->pending_mode.capacity >= READ_BUF_SZ) { // Too much pending data, drain it screen->pending_mode.activated_at = 0; state = START; break; } screen->pending_mode.capacity = MAX(screen->pending_mode.capacity * 2, screen->pending_mode.used + read_buf_sz); screen->pending_mode.buf = realloc(screen->pending_mode.buf, screen->pending_mode.capacity); if (!screen->pending_mode.buf) fatal("Out of memory"); } read_buf_pos += _queue_pending_bytes(screen, read_buf + read_buf_pos, read_buf_sz - read_buf_pos, dump_callback); state = START; } break; } } while(read_buf_pos < read_buf_sz || (!screen->pending_mode.activated_at && screen->pending_mode.used)); } // }}} // Entry points {{{ #ifdef DUMP_COMMANDS #define FNAME(x) x##_dump #else #define FNAME(x) x #endif PyObject* FNAME(parse_bytes)(PyObject UNUSED *self, PyObject *args) { PyObject *dump_callback = NULL; Py_buffer pybuf; Screen *screen; #ifdef DUMP_COMMANDS if (!PyArg_ParseTuple(args, "OO!y*", &dump_callback, &Screen_Type, &screen, &pybuf)) return NULL; #else if (!PyArg_ParseTuple(args, "O!y*", &Screen_Type, &screen, &pybuf)) return NULL; #endif do_parse_bytes(screen, pybuf.buf, pybuf.len, monotonic(), dump_callback); Py_RETURN_NONE; } void FNAME(parse_worker)(Screen *screen, PyObject *dump_callback, monotonic_t now) { #ifdef DUMP_COMMANDS if (screen->read_buf_sz) { Py_XDECREF(PyObject_CallFunction(dump_callback, "sy#", "bytes", screen->read_buf, screen->read_buf_sz)); PyErr_Clear(); } #endif do_parse_bytes(screen, screen->read_buf, screen->read_buf_sz, now, dump_callback); screen->read_buf_sz = 0; } #undef FNAME // }}} kitty-0.15.0/kitty/png-reader.c000066400000000000000000000105751356737523400163240ustar00rootroot00000000000000/* * png-reader.c * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "png-reader.h" struct fake_file { const uint8_t *buf; size_t sz, cur; }; static void read_png_from_buffer(png_structp png, png_bytep out, png_size_t length) { struct fake_file *f = png_get_io_ptr(png); if (f) { size_t amt = MIN(length, f->sz - f->cur); memcpy(out, f->buf + f->cur, amt); f->cur += amt; } } struct custom_error_handler { jmp_buf jb; png_error_handler_func err_handler; }; static void read_png_error_handler(png_structp png_ptr, png_const_charp msg) { struct custom_error_handler *eh; eh = png_get_error_ptr(png_ptr); if (eh == NULL) fatal("read_png_error_handler: could not retrieve error handler"); if(eh->err_handler) eh->err_handler("EBADPNG", msg); longjmp(eh->jb, 1); } static void read_png_warn_handler(png_structp UNUSED png_ptr, png_const_charp UNUSED msg) { // ignore warnings } #define ABRT(code, msg) { if(d->err_handler) d->err_handler(#code, msg); goto err; } void inflate_png_inner(png_read_data *d, const uint8_t *buf, size_t bufsz) { struct fake_file f = {.buf = buf, .sz = bufsz}; png_structp png = NULL; png_infop info = NULL; struct custom_error_handler eh = {.err_handler = d->err_handler}; png = png_create_read_struct(PNG_LIBPNG_VER_STRING, &eh, read_png_error_handler, read_png_warn_handler); if (!png) ABRT(ENOMEM, "Failed to create PNG read structure"); info = png_create_info_struct(png); if (!info) ABRT(ENOMEM, "Failed to create PNG info structure"); if (setjmp(eh.jb)) goto err; png_set_read_fn(png, &f, read_png_from_buffer); png_read_info(png, info); png_byte color_type, bit_depth; d->width = png_get_image_width(png, info); d->height = png_get_image_height(png, info); color_type = png_get_color_type(png, info); bit_depth = png_get_bit_depth(png, info); // Ensure we get RGBA data out of libpng if (bit_depth == 16) png_set_strip_16(png); if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png); // PNG_COLOR_TYPE_GRAY_ALPHA is always 8 or 16bit depth. if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png); if (png_get_valid(png, info, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png); // These color_type don't have an alpha channel then fill it with 0xff. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE) png_set_filler(png, 0xFF, PNG_FILLER_AFTER); if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png); png_read_update_info(png, info); int rowbytes = png_get_rowbytes(png, info); d->sz = rowbytes * d->height * sizeof(png_byte); d->decompressed = malloc(d->sz + 16); if (d->decompressed == NULL) ABRT(ENOMEM, "Out of memory allocating decompression buffer for PNG"); d->row_pointers = malloc(d->height * sizeof(png_bytep)); if (d->row_pointers == NULL) ABRT(ENOMEM, "Out of memory allocating row_pointers buffer for PNG"); for (int i = 0; i < d->height; i++) d->row_pointers[i] = d->decompressed + i * rowbytes; png_read_image(png, d->row_pointers); d->ok = true; err: if (png) png_destroy_read_struct(&png, info ? &info : NULL, NULL); return; } static void png_error_handler(const char *code, const char *msg) { PyErr_Format(PyExc_ValueError, "[%s] %s", code, msg); } static PyObject* load_png_data(PyObject *self UNUSED, PyObject *args) { Py_ssize_t sz; const char *data; if (!PyArg_ParseTuple(args, "s#", &data, &sz)) return NULL; png_read_data d = {.err_handler=png_error_handler}; inflate_png_inner(&d, (const uint8_t*)data, sz); PyObject *ans = NULL; if (d.ok && !PyErr_Occurred()) { ans = Py_BuildValue("y#ii", d.decompressed, (int)d.sz, d.width, d.height); } else { if (!PyErr_Occurred()) PyErr_SetString(PyExc_ValueError, "Unknown error while reading PNG data"); } free(d.decompressed); free(d.row_pointers); return ans; } static PyMethodDef module_methods[] = { METHODB(load_png_data, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_png_reader(PyObject *module) { if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } kitty-0.15.0/kitty/png-reader.h000066400000000000000000000007611356737523400163250ustar00rootroot00000000000000/* * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #include typedef void(*png_error_handler_func)(const char*, const char*); typedef struct { uint8_t *decompressed; bool ok; png_bytep *row_pointers; int width, height; size_t sz; png_error_handler_func err_handler; } png_read_data; void inflate_png_inner(png_read_data *d, const uint8_t *buf, size_t bufsz); kitty-0.15.0/kitty/remote_control.py000066400000000000000000000134621356737523400175370ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import json import os import re import sys import types from functools import partial from contextlib import suppress from .cli import emph, parse_args from .cmds import cmap, parse_subcommand_cli from .constants import appname, version from .fast_data_types import read_command_response from .utils import TTYIO, parse_address_spec def handle_cmd(boss, window, cmd): cmd = json.loads(cmd) v = cmd['version'] no_response = cmd.get('no_response', False) if tuple(v)[:2] > version[:2]: if no_response: return return {'ok': False, 'error': 'The kitty client you are using to send remote commands is newer than this kitty instance. This is not supported.'} c = cmap[cmd['cmd']] func = partial(c.impl(), boss, window) payload = cmd.get('payload') try: ans = func() if payload is None else func(payload) except Exception: if no_response: # don't report errors if --no-response was used return raise response = {'ok': True} if ans is not None: response['data'] = ans if not c.no_response and not no_response: return response global_options_spec = partial('''\ --to An address for the kitty instance to control. Corresponds to the address given to the kitty instance via the :option:`kitty --listen-on` option. If not specified, messages are sent to the controlling terminal for this process, i.e. they will only work if this process is run within an existing kitty window. '''.format, appname=appname) def encode_send(send): send = ('@kitty-cmd' + json.dumps(send)).encode('ascii') return b'\x1bP' + send + b'\x1b\\' class SocketIO: def __init__(self, to): self.family, self.address = parse_address_spec(to)[:2] def __enter__(self): import socket self.socket = socket.socket(self.family) self.socket.setblocking(True) self.socket.connect(self.address) def __exit__(self, *a): import socket with suppress(EnvironmentError): # on some OSes such as macOS the socket is already closed at this point self.socket.shutdown(socket.SHUT_RDWR) self.socket.close() def send(self, data): import socket with self.socket.makefile('wb') as out: if isinstance(data, bytes): out.write(data) else: for chunk in data: if isinstance(chunk, str): chunk = chunk.encode('utf-8') out.write(chunk) out.flush() self.socket.shutdown(socket.SHUT_WR) def recv(self, timeout): dcs = re.compile(br'\x1bP@kitty-cmd([^\x1b]+)\x1b\\') self.socket.settimeout(timeout) with self.socket.makefile('rb') as src: data = src.read() m = dcs.search(data) if m is None: raise TimeoutError('Timed out while waiting to read cmd response') return m.group(1) class RCIO(TTYIO): def recv(self, timeout): ans = [] read_command_response(self.tty_fd, timeout, ans) return b''.join(ans) def do_io(to, send, no_response): payload = send.get('payload') if not isinstance(payload, types.GeneratorType): send_data = encode_send(send) else: def send_generator(): for chunk in payload: send['payload'] = chunk yield encode_send(send) send_data = send_generator() io = SocketIO(to) if to else RCIO() with io: io.send(send_data) if no_response: return {'ok': True} received = io.recv(timeout=10) response = json.loads(received.decode('ascii')) return response all_commands = tuple(sorted(cmap)) cli_msg = ( 'Control {appname} by sending it commands. Set the' ' :opt:`allow_remote_control` option to yes in :file:`kitty.conf` for this' ' to work.' ).format(appname=appname) def parse_rc_args(args): cmds = (' :green:`{}`\n {}'.format(cmap[c].name, cmap[c].short_desc) for c in all_commands) msg = cli_msg + ( '\n\n:title:`Commands`:\n{cmds}\n\n' 'You can get help for each individual command by using:\n' '{appname} @ :italic:`command` -h').format(appname=appname, cmds='\n'.join(cmds)) return parse_args(args[1:], global_options_spec, 'command ...', msg, '{} @'.format(appname)) def main(args): global_opts, items = parse_rc_args(args) global_opts.no_command_response = None if not items: from kitty.shell import main main(global_opts) return cmd = items[0] try: func = cmap[cmd] except KeyError: raise SystemExit('{} is not a known command. Known commands are: {}'.format( emph(cmd), ', '.join(all_commands))) opts, items = parse_subcommand_cli(func, items) payload = func(global_opts, opts, items) send = { 'cmd': cmd, 'version': version, } if payload is not None: send['payload'] = payload if global_opts.no_command_response is not None: no_response = global_opts.no_command_response else: no_response = func.no_response send['no_response'] = no_response if not global_opts.to and 'KITTY_LISTEN_ON' in os.environ: global_opts.to = os.environ['KITTY_LISTEN_ON'] response = do_io(global_opts.to, send, no_response) if no_response: return if not response.get('ok'): if response.get('tb'): print(response['tb'], file=sys.stderr) raise SystemExit(response['error']) data = response.get('data') if data is not None: if func.string_return_is_error and isinstance(data, str): raise SystemExit(data) print(data) kitty-0.15.0/kitty/rewrap.h000066400000000000000000000056331356737523400156040ustar00rootroot00000000000000/* * rewrap.h * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #ifndef BufType #define BufType LineBuf #endif #ifndef init_src_line #define init_src_line(src_y) init_line(src, src->line, src->line_map[src_y]); #endif #ifndef init_dest_line #define init_dest_line(dest_y) init_line(dest, dest->line, dest->line_map[dest_y]); dest->line->continued = dest->line_attrs[dest_y]; #endif #ifndef first_dest_line #define first_dest_line init_dest_line(0) #endif #ifndef next_dest_line #define next_dest_line(continued) \ if (dest_y >= dest->ynum - 1) { \ linebuf_index(dest, 0, dest->ynum - 1); \ if (historybuf != NULL) { \ init_dest_line(dest->ynum - 1); \ historybuf_add_line(historybuf, dest->line); \ }\ linebuf_clear_line(dest, dest->ynum - 1); \ } else dest_y++; \ init_dest_line(dest_y); \ dest->line_attrs[dest_y] = continued ? CONTINUED_MASK : 0; #endif #ifndef is_src_line_continued #define is_src_line_continued(src_y) (src_y < src->ynum - 1 ? (src->line_attrs[src_y + 1] & CONTINUED_MASK) : false) #endif static inline void copy_range(Line *src, index_type src_at, Line* dest, index_type dest_at, index_type num) { memcpy(dest->cpu_cells + dest_at, src->cpu_cells + src_at, num * sizeof(CPUCell)); memcpy(dest->gpu_cells + dest_at, src->gpu_cells + src_at, num * sizeof(GPUCell)); } static void rewrap_inner(BufType *src, BufType *dest, const index_type src_limit, HistoryBuf UNUSED *historybuf, index_type *track_x, index_type *track_y) { bool src_line_is_continued = false; index_type src_y = 0, src_x = 0, dest_x = 0, dest_y = 0, num = 0, src_x_limit = 0; first_dest_line; do { bool is_tracked_line = src_y == *track_y; init_src_line(src_y); src_line_is_continued = is_src_line_continued(src_y); src_x_limit = src->xnum; if (!src_line_is_continued) { // Trim trailing blanks since there is a hard line break at the end of this line while(src_x_limit && (src->line->cpu_cells[src_x_limit - 1].ch) == BLANK_CHAR) src_x_limit--; } if (is_tracked_line && *track_x >= src_x_limit) *track_x = MAX(1u, src_x_limit) - 1; while (src_x < src_x_limit) { if (dest_x >= dest->xnum) { next_dest_line(true); dest_x = 0; } num = MIN(src->line->xnum - src_x, dest->xnum - dest_x); copy_range(src->line, src_x, dest->line, dest_x, num); if (is_tracked_line && src_x <= *track_x && *track_x < src_x + num) { *track_y = dest_y; *track_x = dest_x + (*track_x - src_x + 1); } src_x += num; dest_x += num; } src_y++; src_x = 0; if (!src_line_is_continued && src_y < src_limit) { next_dest_line(false); dest_x = 0; } } while (src_y < src_limit); dest->line->ynum = dest_y; } kitty-0.15.0/kitty/rgb.py000066400000000000000000000704731356737523400152630ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import re from collections import namedtuple from contextlib import suppress Color = namedtuple('Color', 'red green blue') def alpha_blend_channel(top_color, bottom_color, alpha): return int(alpha * top_color + (1 - alpha) * bottom_color) def alpha_blend(top_color, bottom_color, alpha): return Color( alpha_blend_channel(top_color.red, bottom_color.red, alpha), alpha_blend_channel(top_color.green, bottom_color.green, alpha), alpha_blend_channel(top_color.blue, bottom_color.blue, alpha) ) def parse_single_color(c): if len(c) == 1: c += c return int(c[:2], 16) def parse_sharp(spec): if len(spec) in (3, 6, 9, 12): part_len = len(spec) // 3 colors = re.findall(r'[a-fA-F0-9]{%d}' % part_len, spec) return Color(*map(parse_single_color, colors)) def parse_rgb(spec): colors = spec.split('/') if len(colors) == 3: return Color(*map(parse_single_color, colors)) def color_from_int(x): return Color((x >> 16) & 255, (x >> 8) & 255, x & 255) def color_as_int(x): return x.red << 16 | x.green << 8 | x.blue def color_as_sharp(x): return '#{:02x}{:02x}{:02x}'.format(*x) def color_as_sgr(x): return ':2:{}:{}:{}'.format(*x) def to_color(raw, validate=False): # See man XParseColor x = raw.strip().lower() ans = color_names.get(x) if ans is not None: return ans val = None with suppress(Exception): if raw.startswith('#'): val = parse_sharp(raw[1:]) elif raw[:4].lower() == 'rgb:': val = parse_rgb(raw[4:]) if val is None and validate: raise ValueError('Invalid color name: {}'.format(raw)) return val # BEGIN_DATA_SECTION {{{ color_names = { 'alice blue': Color(240, 248, 255), 'aliceblue': Color(240, 248, 255), 'antique white': Color(250, 235, 215), 'antiquewhite': Color(250, 235, 215), 'antiquewhite1': Color(255, 239, 219), 'antiquewhite2': Color(238, 223, 204), 'antiquewhite3': Color(205, 192, 176), 'antiquewhite4': Color(139, 131, 120), 'aquamarine': Color(127, 255, 212), 'aquamarine1': Color(127, 255, 212), 'aquamarine2': Color(118, 238, 198), 'aquamarine3': Color(102, 205, 170), 'aquamarine4': Color(69, 139, 116), 'azure': Color(240, 255, 255), 'azure1': Color(240, 255, 255), 'azure2': Color(224, 238, 238), 'azure3': Color(193, 205, 205), 'azure4': Color(131, 139, 139), 'beige': Color(245, 245, 220), 'bisque': Color(255, 228, 196), 'bisque1': Color(255, 228, 196), 'bisque2': Color(238, 213, 183), 'bisque3': Color(205, 183, 158), 'bisque4': Color(139, 125, 107), 'black': Color(0, 0, 0), 'blanched almond': Color(255, 235, 205), 'blanchedalmond': Color(255, 235, 205), 'blue': Color(0, 0, 255), 'blue violet': Color(138, 43, 226), 'blue1': Color(0, 0, 255), 'blue2': Color(0, 0, 238), 'blue3': Color(0, 0, 205), 'blue4': Color(0, 0, 139), 'blueviolet': Color(138, 43, 226), 'brown': Color(165, 42, 42), 'brown1': Color(255, 64, 64), 'brown2': Color(238, 59, 59), 'brown3': Color(205, 51, 51), 'brown4': Color(139, 35, 35), 'burlywood': Color(222, 184, 135), 'burlywood1': Color(255, 211, 155), 'burlywood2': Color(238, 197, 145), 'burlywood3': Color(205, 170, 125), 'burlywood4': Color(139, 115, 85), 'cadet blue': Color(95, 158, 160), 'cadetblue': Color(95, 158, 160), 'cadetblue1': Color(152, 245, 255), 'cadetblue2': Color(142, 229, 238), 'cadetblue3': Color(122, 197, 205), 'cadetblue4': Color(83, 134, 139), 'chartreuse': Color(127, 255, 0), 'chartreuse1': Color(127, 255, 0), 'chartreuse2': Color(118, 238, 0), 'chartreuse3': Color(102, 205, 0), 'chartreuse4': Color(69, 139, 0), 'chocolate': Color(210, 105, 30), 'chocolate1': Color(255, 127, 36), 'chocolate2': Color(238, 118, 33), 'chocolate3': Color(205, 102, 29), 'chocolate4': Color(139, 69, 19), 'coral': Color(255, 127, 80), 'coral1': Color(255, 114, 86), 'coral2': Color(238, 106, 80), 'coral3': Color(205, 91, 69), 'coral4': Color(139, 62, 47), 'cornflower blue': Color(100, 149, 237), 'cornflowerblue': Color(100, 149, 237), 'cornsilk': Color(255, 248, 220), 'cornsilk1': Color(255, 248, 220), 'cornsilk2': Color(238, 232, 205), 'cornsilk3': Color(205, 200, 177), 'cornsilk4': Color(139, 136, 120), 'cyan': Color(0, 255, 255), 'cyan1': Color(0, 255, 255), 'cyan2': Color(0, 238, 238), 'cyan3': Color(0, 205, 205), 'cyan4': Color(0, 139, 139), 'dark blue': Color(0, 0, 139), 'dark cyan': Color(0, 139, 139), 'dark goldenrod': Color(184, 134, 11), 'dark gray': Color(169, 169, 169), 'dark green': Color(0, 100, 0), 'dark grey': Color(169, 169, 169), 'dark khaki': Color(189, 183, 107), 'dark magenta': Color(139, 0, 139), 'dark olive green': Color(85, 107, 47), 'dark orange': Color(255, 140, 0), 'dark orchid': Color(153, 50, 204), 'dark red': Color(139, 0, 0), 'dark salmon': Color(233, 150, 122), 'dark sea green': Color(143, 188, 143), 'dark slate blue': Color(72, 61, 139), 'dark slate gray': Color(47, 79, 79), 'dark slate grey': Color(47, 79, 79), 'dark turquoise': Color(0, 206, 209), 'dark violet': Color(148, 0, 211), 'darkblue': Color(0, 0, 139), 'darkcyan': Color(0, 139, 139), 'darkgoldenrod': Color(184, 134, 11), 'darkgoldenrod1': Color(255, 185, 15), 'darkgoldenrod2': Color(238, 173, 14), 'darkgoldenrod3': Color(205, 149, 12), 'darkgoldenrod4': Color(139, 101, 8), 'darkgray': Color(169, 169, 169), 'darkgreen': Color(0, 100, 0), 'darkgrey': Color(169, 169, 169), 'darkkhaki': Color(189, 183, 107), 'darkmagenta': Color(139, 0, 139), 'darkolivegreen': Color(85, 107, 47), 'darkolivegreen1': Color(202, 255, 112), 'darkolivegreen2': Color(188, 238, 104), 'darkolivegreen3': Color(162, 205, 90), 'darkolivegreen4': Color(110, 139, 61), 'darkorange': Color(255, 140, 0), 'darkorange1': Color(255, 127, 0), 'darkorange2': Color(238, 118, 0), 'darkorange3': Color(205, 102, 0), 'darkorange4': Color(139, 69, 0), 'darkorchid': Color(153, 50, 204), 'darkorchid1': Color(191, 62, 255), 'darkorchid2': Color(178, 58, 238), 'darkorchid3': Color(154, 50, 205), 'darkorchid4': Color(104, 34, 139), 'darkred': Color(139, 0, 0), 'darksalmon': Color(233, 150, 122), 'darkseagreen': Color(143, 188, 143), 'darkseagreen1': Color(193, 255, 193), 'darkseagreen2': Color(180, 238, 180), 'darkseagreen3': Color(155, 205, 155), 'darkseagreen4': Color(105, 139, 105), 'darkslateblue': Color(72, 61, 139), 'darkslategray': Color(47, 79, 79), 'darkslategray1': Color(151, 255, 255), 'darkslategray2': Color(141, 238, 238), 'darkslategray3': Color(121, 205, 205), 'darkslategray4': Color(82, 139, 139), 'darkslategrey': Color(47, 79, 79), 'darkturquoise': Color(0, 206, 209), 'darkviolet': Color(148, 0, 211), 'debianred': Color(215, 7, 81), 'deep pink': Color(255, 20, 147), 'deep sky blue': Color(0, 191, 255), 'deeppink': Color(255, 20, 147), 'deeppink1': Color(255, 20, 147), 'deeppink2': Color(238, 18, 137), 'deeppink3': Color(205, 16, 118), 'deeppink4': Color(139, 10, 80), 'deepskyblue': Color(0, 191, 255), 'deepskyblue1': Color(0, 191, 255), 'deepskyblue2': Color(0, 178, 238), 'deepskyblue3': Color(0, 154, 205), 'deepskyblue4': Color(0, 104, 139), 'dim gray': Color(105, 105, 105), 'dim grey': Color(105, 105, 105), 'dimgray': Color(105, 105, 105), 'dimgrey': Color(105, 105, 105), 'dodger blue': Color(30, 144, 255), 'dodgerblue': Color(30, 144, 255), 'dodgerblue1': Color(30, 144, 255), 'dodgerblue2': Color(28, 134, 238), 'dodgerblue3': Color(24, 116, 205), 'dodgerblue4': Color(16, 78, 139), 'firebrick': Color(178, 34, 34), 'firebrick1': Color(255, 48, 48), 'firebrick2': Color(238, 44, 44), 'firebrick3': Color(205, 38, 38), 'firebrick4': Color(139, 26, 26), 'floral white': Color(255, 250, 240), 'floralwhite': Color(255, 250, 240), 'forest green': Color(34, 139, 34), 'forestgreen': Color(34, 139, 34), 'gainsboro': Color(220, 220, 220), 'ghost white': Color(248, 248, 255), 'ghostwhite': Color(248, 248, 255), 'gold': Color(255, 215, 0), 'gold1': Color(255, 215, 0), 'gold2': Color(238, 201, 0), 'gold3': Color(205, 173, 0), 'gold4': Color(139, 117, 0), 'goldenrod': Color(218, 165, 32), 'goldenrod1': Color(255, 193, 37), 'goldenrod2': Color(238, 180, 34), 'goldenrod3': Color(205, 155, 29), 'goldenrod4': Color(139, 105, 20), 'gray': Color(190, 190, 190), 'gray0': Color(0, 0, 0), 'gray1': Color(3, 3, 3), 'gray10': Color(26, 26, 26), 'gray100': Color(255, 255, 255), 'gray11': Color(28, 28, 28), 'gray12': Color(31, 31, 31), 'gray13': Color(33, 33, 33), 'gray14': Color(36, 36, 36), 'gray15': Color(38, 38, 38), 'gray16': Color(41, 41, 41), 'gray17': Color(43, 43, 43), 'gray18': Color(46, 46, 46), 'gray19': Color(48, 48, 48), 'gray2': Color(5, 5, 5), 'gray20': Color(51, 51, 51), 'gray21': Color(54, 54, 54), 'gray22': Color(56, 56, 56), 'gray23': Color(59, 59, 59), 'gray24': Color(61, 61, 61), 'gray25': Color(64, 64, 64), 'gray26': Color(66, 66, 66), 'gray27': Color(69, 69, 69), 'gray28': Color(71, 71, 71), 'gray29': Color(74, 74, 74), 'gray3': Color(8, 8, 8), 'gray30': Color(77, 77, 77), 'gray31': Color(79, 79, 79), 'gray32': Color(82, 82, 82), 'gray33': Color(84, 84, 84), 'gray34': Color(87, 87, 87), 'gray35': Color(89, 89, 89), 'gray36': Color(92, 92, 92), 'gray37': Color(94, 94, 94), 'gray38': Color(97, 97, 97), 'gray39': Color(99, 99, 99), 'gray4': Color(10, 10, 10), 'gray40': Color(102, 102, 102), 'gray41': Color(105, 105, 105), 'gray42': Color(107, 107, 107), 'gray43': Color(110, 110, 110), 'gray44': Color(112, 112, 112), 'gray45': Color(115, 115, 115), 'gray46': Color(117, 117, 117), 'gray47': Color(120, 120, 120), 'gray48': Color(122, 122, 122), 'gray49': Color(125, 125, 125), 'gray5': Color(13, 13, 13), 'gray50': Color(127, 127, 127), 'gray51': Color(130, 130, 130), 'gray52': Color(133, 133, 133), 'gray53': Color(135, 135, 135), 'gray54': Color(138, 138, 138), 'gray55': Color(140, 140, 140), 'gray56': Color(143, 143, 143), 'gray57': Color(145, 145, 145), 'gray58': Color(148, 148, 148), 'gray59': Color(150, 150, 150), 'gray6': Color(15, 15, 15), 'gray60': Color(153, 153, 153), 'gray61': Color(156, 156, 156), 'gray62': Color(158, 158, 158), 'gray63': Color(161, 161, 161), 'gray64': Color(163, 163, 163), 'gray65': Color(166, 166, 166), 'gray66': Color(168, 168, 168), 'gray67': Color(171, 171, 171), 'gray68': Color(173, 173, 173), 'gray69': Color(176, 176, 176), 'gray7': Color(18, 18, 18), 'gray70': Color(179, 179, 179), 'gray71': Color(181, 181, 181), 'gray72': Color(184, 184, 184), 'gray73': Color(186, 186, 186), 'gray74': Color(189, 189, 189), 'gray75': Color(191, 191, 191), 'gray76': Color(194, 194, 194), 'gray77': Color(196, 196, 196), 'gray78': Color(199, 199, 199), 'gray79': Color(201, 201, 201), 'gray8': Color(20, 20, 20), 'gray80': Color(204, 204, 204), 'gray81': Color(207, 207, 207), 'gray82': Color(209, 209, 209), 'gray83': Color(212, 212, 212), 'gray84': Color(214, 214, 214), 'gray85': Color(217, 217, 217), 'gray86': Color(219, 219, 219), 'gray87': Color(222, 222, 222), 'gray88': Color(224, 224, 224), 'gray89': Color(227, 227, 227), 'gray9': Color(23, 23, 23), 'gray90': Color(229, 229, 229), 'gray91': Color(232, 232, 232), 'gray92': Color(235, 235, 235), 'gray93': Color(237, 237, 237), 'gray94': Color(240, 240, 240), 'gray95': Color(242, 242, 242), 'gray96': Color(245, 245, 245), 'gray97': Color(247, 247, 247), 'gray98': Color(250, 250, 250), 'gray99': Color(252, 252, 252), 'green': Color(0, 255, 0), 'green yellow': Color(173, 255, 47), 'green1': Color(0, 255, 0), 'green2': Color(0, 238, 0), 'green3': Color(0, 205, 0), 'green4': Color(0, 139, 0), 'greenyellow': Color(173, 255, 47), 'grey': Color(190, 190, 190), 'grey0': Color(0, 0, 0), 'grey1': Color(3, 3, 3), 'grey10': Color(26, 26, 26), 'grey100': Color(255, 255, 255), 'grey11': Color(28, 28, 28), 'grey12': Color(31, 31, 31), 'grey13': Color(33, 33, 33), 'grey14': Color(36, 36, 36), 'grey15': Color(38, 38, 38), 'grey16': Color(41, 41, 41), 'grey17': Color(43, 43, 43), 'grey18': Color(46, 46, 46), 'grey19': Color(48, 48, 48), 'grey2': Color(5, 5, 5), 'grey20': Color(51, 51, 51), 'grey21': Color(54, 54, 54), 'grey22': Color(56, 56, 56), 'grey23': Color(59, 59, 59), 'grey24': Color(61, 61, 61), 'grey25': Color(64, 64, 64), 'grey26': Color(66, 66, 66), 'grey27': Color(69, 69, 69), 'grey28': Color(71, 71, 71), 'grey29': Color(74, 74, 74), 'grey3': Color(8, 8, 8), 'grey30': Color(77, 77, 77), 'grey31': Color(79, 79, 79), 'grey32': Color(82, 82, 82), 'grey33': Color(84, 84, 84), 'grey34': Color(87, 87, 87), 'grey35': Color(89, 89, 89), 'grey36': Color(92, 92, 92), 'grey37': Color(94, 94, 94), 'grey38': Color(97, 97, 97), 'grey39': Color(99, 99, 99), 'grey4': Color(10, 10, 10), 'grey40': Color(102, 102, 102), 'grey41': Color(105, 105, 105), 'grey42': Color(107, 107, 107), 'grey43': Color(110, 110, 110), 'grey44': Color(112, 112, 112), 'grey45': Color(115, 115, 115), 'grey46': Color(117, 117, 117), 'grey47': Color(120, 120, 120), 'grey48': Color(122, 122, 122), 'grey49': Color(125, 125, 125), 'grey5': Color(13, 13, 13), 'grey50': Color(127, 127, 127), 'grey51': Color(130, 130, 130), 'grey52': Color(133, 133, 133), 'grey53': Color(135, 135, 135), 'grey54': Color(138, 138, 138), 'grey55': Color(140, 140, 140), 'grey56': Color(143, 143, 143), 'grey57': Color(145, 145, 145), 'grey58': Color(148, 148, 148), 'grey59': Color(150, 150, 150), 'grey6': Color(15, 15, 15), 'grey60': Color(153, 153, 153), 'grey61': Color(156, 156, 156), 'grey62': Color(158, 158, 158), 'grey63': Color(161, 161, 161), 'grey64': Color(163, 163, 163), 'grey65': Color(166, 166, 166), 'grey66': Color(168, 168, 168), 'grey67': Color(171, 171, 171), 'grey68': Color(173, 173, 173), 'grey69': Color(176, 176, 176), 'grey7': Color(18, 18, 18), 'grey70': Color(179, 179, 179), 'grey71': Color(181, 181, 181), 'grey72': Color(184, 184, 184), 'grey73': Color(186, 186, 186), 'grey74': Color(189, 189, 189), 'grey75': Color(191, 191, 191), 'grey76': Color(194, 194, 194), 'grey77': Color(196, 196, 196), 'grey78': Color(199, 199, 199), 'grey79': Color(201, 201, 201), 'grey8': Color(20, 20, 20), 'grey80': Color(204, 204, 204), 'grey81': Color(207, 207, 207), 'grey82': Color(209, 209, 209), 'grey83': Color(212, 212, 212), 'grey84': Color(214, 214, 214), 'grey85': Color(217, 217, 217), 'grey86': Color(219, 219, 219), 'grey87': Color(222, 222, 222), 'grey88': Color(224, 224, 224), 'grey89': Color(227, 227, 227), 'grey9': Color(23, 23, 23), 'grey90': Color(229, 229, 229), 'grey91': Color(232, 232, 232), 'grey92': Color(235, 235, 235), 'grey93': Color(237, 237, 237), 'grey94': Color(240, 240, 240), 'grey95': Color(242, 242, 242), 'grey96': Color(245, 245, 245), 'grey97': Color(247, 247, 247), 'grey98': Color(250, 250, 250), 'grey99': Color(252, 252, 252), 'honeydew': Color(240, 255, 240), 'honeydew1': Color(240, 255, 240), 'honeydew2': Color(224, 238, 224), 'honeydew3': Color(193, 205, 193), 'honeydew4': Color(131, 139, 131), 'hot pink': Color(255, 105, 180), 'hotpink': Color(255, 105, 180), 'hotpink1': Color(255, 110, 180), 'hotpink2': Color(238, 106, 167), 'hotpink3': Color(205, 96, 144), 'hotpink4': Color(139, 58, 98), 'indian red': Color(205, 92, 92), 'indianred': Color(205, 92, 92), 'indianred1': Color(255, 106, 106), 'indianred2': Color(238, 99, 99), 'indianred3': Color(205, 85, 85), 'indianred4': Color(139, 58, 58), 'ivory': Color(255, 255, 240), 'ivory1': Color(255, 255, 240), 'ivory2': Color(238, 238, 224), 'ivory3': Color(205, 205, 193), 'ivory4': Color(139, 139, 131), 'khaki': Color(240, 230, 140), 'khaki1': Color(255, 246, 143), 'khaki2': Color(238, 230, 133), 'khaki3': Color(205, 198, 115), 'khaki4': Color(139, 134, 78), 'lavender': Color(230, 230, 250), 'lavender blush': Color(255, 240, 245), 'lavenderblush': Color(255, 240, 245), 'lavenderblush1': Color(255, 240, 245), 'lavenderblush2': Color(238, 224, 229), 'lavenderblush3': Color(205, 193, 197), 'lavenderblush4': Color(139, 131, 134), 'lawn green': Color(124, 252, 0), 'lawngreen': Color(124, 252, 0), 'lemon chiffon': Color(255, 250, 205), 'lemonchiffon': Color(255, 250, 205), 'lemonchiffon1': Color(255, 250, 205), 'lemonchiffon2': Color(238, 233, 191), 'lemonchiffon3': Color(205, 201, 165), 'lemonchiffon4': Color(139, 137, 112), 'light blue': Color(173, 216, 230), 'light coral': Color(240, 128, 128), 'light cyan': Color(224, 255, 255), 'light goldenrod': Color(238, 221, 130), 'light goldenrod yellow': Color(250, 250, 210), 'light gray': Color(211, 211, 211), 'light green': Color(144, 238, 144), 'light grey': Color(211, 211, 211), 'light pink': Color(255, 182, 193), 'light salmon': Color(255, 160, 122), 'light sea green': Color(32, 178, 170), 'light sky blue': Color(135, 206, 250), 'light slate blue': Color(132, 112, 255), 'light slate gray': Color(119, 136, 153), 'light slate grey': Color(119, 136, 153), 'light steel blue': Color(176, 196, 222), 'light yellow': Color(255, 255, 224), 'lightblue': Color(173, 216, 230), 'lightblue1': Color(191, 239, 255), 'lightblue2': Color(178, 223, 238), 'lightblue3': Color(154, 192, 205), 'lightblue4': Color(104, 131, 139), 'lightcoral': Color(240, 128, 128), 'lightcyan': Color(224, 255, 255), 'lightcyan1': Color(224, 255, 255), 'lightcyan2': Color(209, 238, 238), 'lightcyan3': Color(180, 205, 205), 'lightcyan4': Color(122, 139, 139), 'lightgoldenrod': Color(238, 221, 130), 'lightgoldenrod1': Color(255, 236, 139), 'lightgoldenrod2': Color(238, 220, 130), 'lightgoldenrod3': Color(205, 190, 112), 'lightgoldenrod4': Color(139, 129, 76), 'lightgoldenrodyellow': Color(250, 250, 210), 'lightgray': Color(211, 211, 211), 'lightgreen': Color(144, 238, 144), 'lightgrey': Color(211, 211, 211), 'lightpink': Color(255, 182, 193), 'lightpink1': Color(255, 174, 185), 'lightpink2': Color(238, 162, 173), 'lightpink3': Color(205, 140, 149), 'lightpink4': Color(139, 95, 101), 'lightsalmon': Color(255, 160, 122), 'lightsalmon1': Color(255, 160, 122), 'lightsalmon2': Color(238, 149, 114), 'lightsalmon3': Color(205, 129, 98), 'lightsalmon4': Color(139, 87, 66), 'lightseagreen': Color(32, 178, 170), 'lightskyblue': Color(135, 206, 250), 'lightskyblue1': Color(176, 226, 255), 'lightskyblue2': Color(164, 211, 238), 'lightskyblue3': Color(141, 182, 205), 'lightskyblue4': Color(96, 123, 139), 'lightslateblue': Color(132, 112, 255), 'lightslategray': Color(119, 136, 153), 'lightslategrey': Color(119, 136, 153), 'lightsteelblue': Color(176, 196, 222), 'lightsteelblue1': Color(202, 225, 255), 'lightsteelblue2': Color(188, 210, 238), 'lightsteelblue3': Color(162, 181, 205), 'lightsteelblue4': Color(110, 123, 139), 'lightyellow': Color(255, 255, 224), 'lightyellow1': Color(255, 255, 224), 'lightyellow2': Color(238, 238, 209), 'lightyellow3': Color(205, 205, 180), 'lightyellow4': Color(139, 139, 122), 'lime green': Color(50, 205, 50), 'limegreen': Color(50, 205, 50), 'linen': Color(250, 240, 230), 'magenta': Color(255, 0, 255), 'magenta1': Color(255, 0, 255), 'magenta2': Color(238, 0, 238), 'magenta3': Color(205, 0, 205), 'magenta4': Color(139, 0, 139), 'maroon': Color(176, 48, 96), 'maroon1': Color(255, 52, 179), 'maroon2': Color(238, 48, 167), 'maroon3': Color(205, 41, 144), 'maroon4': Color(139, 28, 98), 'medium aquamarine': Color(102, 205, 170), 'medium blue': Color(0, 0, 205), 'medium orchid': Color(186, 85, 211), 'medium purple': Color(147, 112, 219), 'medium sea green': Color(60, 179, 113), 'medium slate blue': Color(123, 104, 238), 'medium spring green': Color(0, 250, 154), 'medium turquoise': Color(72, 209, 204), 'medium violet red': Color(199, 21, 133), 'mediumaquamarine': Color(102, 205, 170), 'mediumblue': Color(0, 0, 205), 'mediumorchid': Color(186, 85, 211), 'mediumorchid1': Color(224, 102, 255), 'mediumorchid2': Color(209, 95, 238), 'mediumorchid3': Color(180, 82, 205), 'mediumorchid4': Color(122, 55, 139), 'mediumpurple': Color(147, 112, 219), 'mediumpurple1': Color(171, 130, 255), 'mediumpurple2': Color(159, 121, 238), 'mediumpurple3': Color(137, 104, 205), 'mediumpurple4': Color(93, 71, 139), 'mediumseagreen': Color(60, 179, 113), 'mediumslateblue': Color(123, 104, 238), 'mediumspringgreen': Color(0, 250, 154), 'mediumturquoise': Color(72, 209, 204), 'mediumvioletred': Color(199, 21, 133), 'midnight blue': Color(25, 25, 112), 'midnightblue': Color(25, 25, 112), 'mint cream': Color(245, 255, 250), 'mintcream': Color(245, 255, 250), 'misty rose': Color(255, 228, 225), 'mistyrose': Color(255, 228, 225), 'mistyrose1': Color(255, 228, 225), 'mistyrose2': Color(238, 213, 210), 'mistyrose3': Color(205, 183, 181), 'mistyrose4': Color(139, 125, 123), 'moccasin': Color(255, 228, 181), 'navajo white': Color(255, 222, 173), 'navajowhite': Color(255, 222, 173), 'navajowhite1': Color(255, 222, 173), 'navajowhite2': Color(238, 207, 161), 'navajowhite3': Color(205, 179, 139), 'navajowhite4': Color(139, 121, 94), 'navy': Color(0, 0, 128), 'navy blue': Color(0, 0, 128), 'navyblue': Color(0, 0, 128), 'old lace': Color(253, 245, 230), 'oldlace': Color(253, 245, 230), 'olive drab': Color(107, 142, 35), 'olivedrab': Color(107, 142, 35), 'olivedrab1': Color(192, 255, 62), 'olivedrab2': Color(179, 238, 58), 'olivedrab3': Color(154, 205, 50), 'olivedrab4': Color(105, 139, 34), 'orange': Color(255, 165, 0), 'orange red': Color(255, 69, 0), 'orange1': Color(255, 165, 0), 'orange2': Color(238, 154, 0), 'orange3': Color(205, 133, 0), 'orange4': Color(139, 90, 0), 'orangered': Color(255, 69, 0), 'orangered1': Color(255, 69, 0), 'orangered2': Color(238, 64, 0), 'orangered3': Color(205, 55, 0), 'orangered4': Color(139, 37, 0), 'orchid': Color(218, 112, 214), 'orchid1': Color(255, 131, 250), 'orchid2': Color(238, 122, 233), 'orchid3': Color(205, 105, 201), 'orchid4': Color(139, 71, 137), 'pale goldenrod': Color(238, 232, 170), 'pale green': Color(152, 251, 152), 'pale turquoise': Color(175, 238, 238), 'pale violet red': Color(219, 112, 147), 'palegoldenrod': Color(238, 232, 170), 'palegreen': Color(152, 251, 152), 'palegreen1': Color(154, 255, 154), 'palegreen2': Color(144, 238, 144), 'palegreen3': Color(124, 205, 124), 'palegreen4': Color(84, 139, 84), 'paleturquoise': Color(175, 238, 238), 'paleturquoise1': Color(187, 255, 255), 'paleturquoise2': Color(174, 238, 238), 'paleturquoise3': Color(150, 205, 205), 'paleturquoise4': Color(102, 139, 139), 'palevioletred': Color(219, 112, 147), 'palevioletred1': Color(255, 130, 171), 'palevioletred2': Color(238, 121, 159), 'palevioletred3': Color(205, 104, 137), 'palevioletred4': Color(139, 71, 93), 'papaya whip': Color(255, 239, 213), 'papayawhip': Color(255, 239, 213), 'peach puff': Color(255, 218, 185), 'peachpuff': Color(255, 218, 185), 'peachpuff1': Color(255, 218, 185), 'peachpuff2': Color(238, 203, 173), 'peachpuff3': Color(205, 175, 149), 'peachpuff4': Color(139, 119, 101), 'peru': Color(205, 133, 63), 'pink': Color(255, 192, 203), 'pink1': Color(255, 181, 197), 'pink2': Color(238, 169, 184), 'pink3': Color(205, 145, 158), 'pink4': Color(139, 99, 108), 'plum': Color(221, 160, 221), 'plum1': Color(255, 187, 255), 'plum2': Color(238, 174, 238), 'plum3': Color(205, 150, 205), 'plum4': Color(139, 102, 139), 'powder blue': Color(176, 224, 230), 'powderblue': Color(176, 224, 230), 'purple': Color(160, 32, 240), 'purple1': Color(155, 48, 255), 'purple2': Color(145, 44, 238), 'purple3': Color(125, 38, 205), 'purple4': Color(85, 26, 139), 'red': Color(255, 0, 0), 'red1': Color(255, 0, 0), 'red2': Color(238, 0, 0), 'red3': Color(205, 0, 0), 'red4': Color(139, 0, 0), 'rosy brown': Color(188, 143, 143), 'rosybrown': Color(188, 143, 143), 'rosybrown1': Color(255, 193, 193), 'rosybrown2': Color(238, 180, 180), 'rosybrown3': Color(205, 155, 155), 'rosybrown4': Color(139, 105, 105), 'royal blue': Color(65, 105, 225), 'royalblue': Color(65, 105, 225), 'royalblue1': Color(72, 118, 255), 'royalblue2': Color(67, 110, 238), 'royalblue3': Color(58, 95, 205), 'royalblue4': Color(39, 64, 139), 'saddle brown': Color(139, 69, 19), 'saddlebrown': Color(139, 69, 19), 'salmon': Color(250, 128, 114), 'salmon1': Color(255, 140, 105), 'salmon2': Color(238, 130, 98), 'salmon3': Color(205, 112, 84), 'salmon4': Color(139, 76, 57), 'sandy brown': Color(244, 164, 96), 'sandybrown': Color(244, 164, 96), 'sea green': Color(46, 139, 87), 'seagreen': Color(46, 139, 87), 'seagreen1': Color(84, 255, 159), 'seagreen2': Color(78, 238, 148), 'seagreen3': Color(67, 205, 128), 'seagreen4': Color(46, 139, 87), 'seashell': Color(255, 245, 238), 'seashell1': Color(255, 245, 238), 'seashell2': Color(238, 229, 222), 'seashell3': Color(205, 197, 191), 'seashell4': Color(139, 134, 130), 'sienna': Color(160, 82, 45), 'sienna1': Color(255, 130, 71), 'sienna2': Color(238, 121, 66), 'sienna3': Color(205, 104, 57), 'sienna4': Color(139, 71, 38), 'sky blue': Color(135, 206, 235), 'skyblue': Color(135, 206, 235), 'skyblue1': Color(135, 206, 255), 'skyblue2': Color(126, 192, 238), 'skyblue3': Color(108, 166, 205), 'skyblue4': Color(74, 112, 139), 'slate blue': Color(106, 90, 205), 'slate gray': Color(112, 128, 144), 'slate grey': Color(112, 128, 144), 'slateblue': Color(106, 90, 205), 'slateblue1': Color(131, 111, 255), 'slateblue2': Color(122, 103, 238), 'slateblue3': Color(105, 89, 205), 'slateblue4': Color(71, 60, 139), 'slategray': Color(112, 128, 144), 'slategray1': Color(198, 226, 255), 'slategray2': Color(185, 211, 238), 'slategray3': Color(159, 182, 205), 'slategray4': Color(108, 123, 139), 'slategrey': Color(112, 128, 144), 'snow': Color(255, 250, 250), 'snow1': Color(255, 250, 250), 'snow2': Color(238, 233, 233), 'snow3': Color(205, 201, 201), 'snow4': Color(139, 137, 137), 'spring green': Color(0, 255, 127), 'springgreen': Color(0, 255, 127), 'springgreen1': Color(0, 255, 127), 'springgreen2': Color(0, 238, 118), 'springgreen3': Color(0, 205, 102), 'springgreen4': Color(0, 139, 69), 'steel blue': Color(70, 130, 180), 'steelblue': Color(70, 130, 180), 'steelblue1': Color(99, 184, 255), 'steelblue2': Color(92, 172, 238), 'steelblue3': Color(79, 148, 205), 'steelblue4': Color(54, 100, 139), 'tan': Color(210, 180, 140), 'tan1': Color(255, 165, 79), 'tan2': Color(238, 154, 73), 'tan3': Color(205, 133, 63), 'tan4': Color(139, 90, 43), 'thistle': Color(216, 191, 216), 'thistle1': Color(255, 225, 255), 'thistle2': Color(238, 210, 238), 'thistle3': Color(205, 181, 205), 'thistle4': Color(139, 123, 139), 'tomato': Color(255, 99, 71), 'tomato1': Color(255, 99, 71), 'tomato2': Color(238, 92, 66), 'tomato3': Color(205, 79, 57), 'tomato4': Color(139, 54, 38), 'turquoise': Color(64, 224, 208), 'turquoise1': Color(0, 245, 255), 'turquoise2': Color(0, 229, 238), 'turquoise3': Color(0, 197, 205), 'turquoise4': Color(0, 134, 139), 'violet': Color(238, 130, 238), 'violet red': Color(208, 32, 144), 'violetred': Color(208, 32, 144), 'violetred1': Color(255, 62, 150), 'violetred2': Color(238, 58, 140), 'violetred3': Color(205, 50, 120), 'violetred4': Color(139, 34, 82), 'wheat': Color(245, 222, 179), 'wheat1': Color(255, 231, 186), 'wheat2': Color(238, 216, 174), 'wheat3': Color(205, 186, 150), 'wheat4': Color(139, 126, 102), 'white': Color(255, 255, 255), 'white smoke': Color(245, 245, 245), 'whitesmoke': Color(245, 245, 245), 'yellow': Color(255, 255, 0), 'yellow green': Color(154, 205, 50), 'yellow1': Color(255, 255, 0), 'yellow2': Color(238, 238, 0), 'yellow3': Color(205, 205, 0), 'yellow4': Color(139, 139, 0), 'yellowgreen': Color(154, 205, 50)} # END_DATA_SECTION }}} if __name__ == '__main__': # Read RGB color table from specified rgb.txt file import sys import pprint data = {} with open(sys.argv[-1]) as f: for line in f: line = line.strip() if not line or line.startswith('!'): continue parts = line.split() r, g, b = map(int, parts[:3]) name = ' '.join(parts[3:]).lower() data[name] = data[name.replace(' ', '')] = r, g, b data = pprint.pformat(data).replace('{', '{\n ').replace('(', 'Color(') with open(__file__, 'r+') as src: raw = src.read() raw = re.sub( r'^# BEGIN_DATA_SECTION {{{$.*^# END_DATA_SECTION }}}', '# BEGIN_DATA_SECTION {{{\ncolor_names = %s\n# END_DATA_SECTION }}}' % data, raw, flags=re.DOTALL | re.MULTILINE ) src.seek(0), src.truncate(), src.write(raw) kitty-0.15.0/kitty/screen.c000066400000000000000000002550261356737523400155610ustar00rootroot00000000000000/* * screen.c * Copyright (C) 2016 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #define EXTRA_INIT { \ PyModule_AddIntMacro(module, SCROLL_LINE); PyModule_AddIntMacro(module, SCROLL_PAGE); PyModule_AddIntMacro(module, SCROLL_FULL); \ if (PyModule_AddFunctions(module, module_methods) != 0) return false; \ } #include "state.h" #include "fonts.h" #include "lineops.h" #include "screen.h" #include #include #include #include #include #include "unicode-data.h" #include "modes.h" #include "wcwidth-std.h" #include "control-codes.h" #include "charsets.h" static const ScreenModes empty_modes = {0, .mDECAWM=true, .mDECTCEM=true, .mDECARM=true}; static Selection EMPTY_SELECTION = {0}; typedef struct { unsigned int x; int y; } FullSelectionBoundary; // Constructor/destructor {{{ static inline void init_tabstops(bool *tabstops, index_type count) { // In terminfo we specify the number of initial tabstops (it) as 8 for (unsigned int t=0; t < count; t++) { tabstops[t] = t % 8 == 0 ? true : false; } } static inline bool init_overlay_line(Screen *self, index_type columns) { PyMem_Free(self->overlay_line.cpu_cells); PyMem_Free(self->overlay_line.gpu_cells); self->overlay_line.cpu_cells = PyMem_Calloc(columns, sizeof(CPUCell)); self->overlay_line.gpu_cells = PyMem_Calloc(columns, sizeof(GPUCell)); if (!self->overlay_line.cpu_cells || !self->overlay_line.gpu_cells) { PyErr_NoMemory(); return false; } self->overlay_line.is_active = false; self->overlay_line.xnum = 0; self->overlay_line.ynum = 0; self->overlay_line.xstart = 0; return true; } #define RESET_CHARSETS \ self->g0_charset = translation_table(0); \ self->g1_charset = self->g0_charset; \ self->g_charset = self->g0_charset; \ self->current_charset = 0; \ self->utf8_state = 0; \ self->utf8_codepoint = 0; \ self->use_latin1 = false; #define CALLBACK(...) \ if (self->callbacks != Py_None) { \ PyObject *callback_ret = PyObject_CallMethod(self->callbacks, __VA_ARGS__); \ if (callback_ret == NULL) PyErr_Print(); else Py_DECREF(callback_ret); \ } static PyObject* new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) { Screen *self; int ret = 0; PyObject *callbacks = Py_None, *test_child = Py_None; unsigned int columns=80, lines=24, scrollback=0, cell_width=10, cell_height=20; id_type window_id=0; if (!PyArg_ParseTuple(args, "|OIIIIIKO", &callbacks, &lines, &columns, &scrollback, &cell_width, &cell_height, &window_id, &test_child)) return NULL; self = (Screen *)type->tp_alloc(type, 0); if (self != NULL) { if ((ret = pthread_mutex_init(&self->read_buf_lock, NULL)) != 0) { Py_CLEAR(self); PyErr_Format(PyExc_RuntimeError, "Failed to create Screen read_buf_lock mutex: %s", strerror(ret)); return NULL; } if ((ret = pthread_mutex_init(&self->write_buf_lock, NULL)) != 0) { Py_CLEAR(self); PyErr_Format(PyExc_RuntimeError, "Failed to create Screen write_buf_lock mutex: %s", strerror(ret)); return NULL; } self->cell_size.width = cell_width; self->cell_size.height = cell_height; self->columns = columns; self->lines = lines; self->write_buf = PyMem_RawMalloc(BUFSIZ); self->window_id = window_id; if (self->write_buf == NULL) { Py_CLEAR(self); return PyErr_NoMemory(); } self->write_buf_sz = BUFSIZ; self->modes = empty_modes; self->is_dirty = true; self->scroll_changed = false; self->margin_top = 0; self->margin_bottom = self->lines - 1; self->history_line_added_count = 0; RESET_CHARSETS; self->callbacks = callbacks; Py_INCREF(callbacks); self->test_child = test_child; Py_INCREF(test_child); self->cursor = alloc_cursor(); self->color_profile = alloc_color_profile(); self->main_linebuf = alloc_linebuf(lines, columns); self->alt_linebuf = alloc_linebuf(lines, columns); self->linebuf = self->main_linebuf; self->historybuf = alloc_historybuf(MAX(scrollback, lines), columns, OPT(scrollback_pager_history_size)); self->main_grman = grman_alloc(); self->alt_grman = grman_alloc(); self->grman = self->main_grman; self->pending_mode.wait_time = 2.0; self->disable_ligatures = OPT(disable_ligatures); self->main_tabstops = PyMem_Calloc(2 * self->columns, sizeof(bool)); if (self->cursor == NULL || self->main_linebuf == NULL || self->alt_linebuf == NULL || self->main_tabstops == NULL || self->historybuf == NULL || self->main_grman == NULL || self->alt_grman == NULL || self->color_profile == NULL) { Py_CLEAR(self); return NULL; } self->alt_tabstops = self->main_tabstops + self->columns * sizeof(bool); self->tabstops = self->main_tabstops; init_tabstops(self->main_tabstops, self->columns); init_tabstops(self->alt_tabstops, self->columns); if (!init_overlay_line(self, self->columns)) { Py_CLEAR(self); return NULL; } } return (PyObject*) self; } static void deactivate_overlay_line(Screen *self); static inline Line* range_line_(Screen *self, int y); void screen_reset(Screen *self) { if (self->linebuf == self->alt_linebuf) screen_toggle_screen_buffer(self); if (self->overlay_line.is_active) deactivate_overlay_line(self); linebuf_clear(self->linebuf, BLANK_CHAR); historybuf_clear(self->historybuf); grman_clear(self->grman, false, self->cell_size); self->modes = empty_modes; #define R(name) self->color_profile->overridden.name = 0 R(default_fg); R(default_bg); R(cursor_color); R(highlight_fg); R(highlight_bg); #undef R RESET_CHARSETS; self->margin_top = 0; self->margin_bottom = self->lines - 1; screen_normal_keypad_mode(self); init_tabstops(self->main_tabstops, self->columns); init_tabstops(self->alt_tabstops, self->columns); cursor_reset(self->cursor); self->is_dirty = true; self->selection = EMPTY_SELECTION; screen_cursor_position(self, 1, 1); set_dynamic_color(self, 110, NULL); set_dynamic_color(self, 111, NULL); set_color_table_color(self, 104, NULL); self->parser_state = 0; self->parser_text_start = 0; self->parser_buf_pos = 0; self->parser_has_pending_text = false; } void screen_dirty_sprite_positions(Screen *self) { self->is_dirty = true; for (index_type i = 0; i < self->lines; i++) { linebuf_mark_line_dirty(self->main_linebuf, i); linebuf_mark_line_dirty(self->alt_linebuf, i); } for (index_type i = 0; i < self->historybuf->count; i++) historybuf_mark_line_dirty(self->historybuf, i); } static inline HistoryBuf* realloc_hb(HistoryBuf *old, unsigned int lines, unsigned int columns) { HistoryBuf *ans = alloc_historybuf(lines, columns, 0); if (ans == NULL) { PyErr_NoMemory(); return NULL; } ans->pagerhist = old->pagerhist; old->pagerhist = NULL; historybuf_rewrap(old, ans); return ans; } static inline LineBuf* realloc_lb(LineBuf *old, unsigned int lines, unsigned int columns, index_type *nclb, index_type *ncla, HistoryBuf *hb, index_type *x, index_type *y) { LineBuf *ans = alloc_linebuf(lines, columns); if (ans == NULL) { PyErr_NoMemory(); return NULL; } linebuf_rewrap(old, ans, nclb, ncla, hb, x, y); return ans; } static bool screen_resize(Screen *self, unsigned int lines, unsigned int columns) { if (self->overlay_line.is_active) deactivate_overlay_line(self); lines = MAX(1u, lines); columns = MAX(1u, columns); bool is_main = self->linebuf == self->main_linebuf; index_type num_content_lines_before, num_content_lines_after, num_content_lines; unsigned int cursor_x = 0, cursor_y = 0; bool cursor_is_beyond_content = false; #define setup_cursor() { \ cursor_x = x; cursor_y = y; \ cursor_is_beyond_content = num_content_lines_before > 0 && self->cursor->y >= num_content_lines_before; \ num_content_lines = num_content_lines_after; \ } // Resize overlay line if (!init_overlay_line(self, columns)) return false; // Resize main linebuf HistoryBuf *nh = realloc_hb(self->historybuf, self->historybuf->ynum, columns); if (nh == NULL) return false; Py_CLEAR(self->historybuf); self->historybuf = nh; index_type x = self->cursor->x, y = self->cursor->y; LineBuf *n = realloc_lb(self->main_linebuf, lines, columns, &num_content_lines_before, &num_content_lines_after, self->historybuf, &x, &y); if (n == NULL) return false; Py_CLEAR(self->main_linebuf); self->main_linebuf = n; if (is_main) setup_cursor(); grman_resize(self->main_grman, self->lines, lines, self->columns, columns); // Resize alt linebuf x = self->cursor->x, y = self->cursor->y; n = realloc_lb(self->alt_linebuf, lines, columns, &num_content_lines_before, &num_content_lines_after, NULL, &x, &y); if (n == NULL) return false; Py_CLEAR(self->alt_linebuf); self->alt_linebuf = n; if (!is_main) setup_cursor(); grman_resize(self->alt_grman, self->lines, lines, self->columns, columns); #undef setup_cursor self->linebuf = is_main ? self->main_linebuf : self->alt_linebuf; /* printf("\nold_size: (%u, %u) new_size: (%u, %u)\n", self->columns, self->lines, columns, lines); */ self->lines = lines; self->columns = columns; self->margin_top = 0; self->margin_bottom = self->lines - 1; PyMem_Free(self->main_tabstops); self->main_tabstops = PyMem_Calloc(2*self->columns, sizeof(bool)); if (self->main_tabstops == NULL) { PyErr_NoMemory(); return false; } self->alt_tabstops = self->main_tabstops + self->columns * sizeof(bool); self->tabstops = self->main_tabstops; init_tabstops(self->main_tabstops, self->columns); init_tabstops(self->alt_tabstops, self->columns); self->is_dirty = true; self->selection = EMPTY_SELECTION; self->url_range = EMPTY_SELECTION; self->selection_updated_once = false; /* printf("old_cursor: (%u, %u) new_cursor: (%u, %u) beyond_content: %d\n", self->cursor->x, self->cursor->y, cursor_x, cursor_y, cursor_is_beyond_content); */ self->cursor->x = MIN(cursor_x, self->columns - 1); self->cursor->y = MIN(cursor_y, self->lines - 1); if (cursor_is_beyond_content) { self->cursor->y = num_content_lines; if (self->cursor->y >= self->lines) { self->cursor->y = self->lines - 1; screen_index(self); } } return true; } void screen_rescale_images(Screen *self) { grman_rescale(self->main_grman, self->cell_size); grman_rescale(self->alt_grman, self->cell_size); } static PyObject* reset_callbacks(Screen *self, PyObject *a UNUSED) { Py_CLEAR(self->callbacks); self->callbacks = Py_None; Py_INCREF(self->callbacks); Py_RETURN_NONE; } static void dealloc(Screen* self) { pthread_mutex_destroy(&self->read_buf_lock); pthread_mutex_destroy(&self->write_buf_lock); Py_CLEAR(self->main_grman); Py_CLEAR(self->alt_grman); PyMem_RawFree(self->write_buf); Py_CLEAR(self->callbacks); Py_CLEAR(self->test_child); Py_CLEAR(self->cursor); Py_CLEAR(self->main_linebuf); Py_CLEAR(self->alt_linebuf); Py_CLEAR(self->historybuf); Py_CLEAR(self->color_profile); PyMem_Free(self->overlay_line.cpu_cells); PyMem_Free(self->overlay_line.gpu_cells); PyMem_Free(self->main_tabstops); free(self->pending_mode.buf); Py_TYPE(self)->tp_free((PyObject*)self); } // }}} // Draw text {{{ void screen_change_charset(Screen *self, uint32_t which) { switch(which) { case 0: self->current_charset = 0; self->g_charset = self->g0_charset; break; case 1: self->current_charset = 1; self->g_charset = self->g1_charset; break; } } void screen_designate_charset(Screen *self, uint32_t which, uint32_t as) { switch(which) { case 0: self->g0_charset = translation_table(as); if (self->current_charset == 0) self->g_charset = self->g0_charset; break; case 1: self->g1_charset = translation_table(as); if (self->current_charset == 1) self->g_charset = self->g1_charset; break; } } static inline void move_widened_char(Screen *self, CPUCell* cpu_cell, GPUCell *gpu_cell, index_type xpos, index_type ypos) { self->cursor->x = xpos; self->cursor->y = ypos; CPUCell src_cpu = *cpu_cell, *dest_cpu; GPUCell src_gpu = *gpu_cell, *dest_gpu; line_clear_text(self->linebuf->line, xpos, 1, BLANK_CHAR); if (self->modes.mDECAWM) { // overflow goes onto next line screen_carriage_return(self); screen_linefeed(self); self->linebuf->line_attrs[self->cursor->y] |= CONTINUED_MASK; linebuf_init_line(self->linebuf, self->cursor->y); dest_cpu = self->linebuf->line->cpu_cells; dest_gpu = self->linebuf->line->gpu_cells; self->cursor->x = MIN(2u, self->columns); linebuf_mark_line_dirty(self->linebuf, self->cursor->y); } else { dest_cpu = cpu_cell - 1; dest_gpu = gpu_cell - 1; self->cursor->x = self->columns; } *dest_cpu = src_cpu; *dest_gpu = src_gpu; } static inline bool selection_has_screen_line(Selection *s, int y) { if (s->start_scrolled_by == s->end_scrolled_by && s->start_x == s->end_x && s->start_y == s->end_y) return false; int top = (int)s->start_y - s->start_scrolled_by; int bottom = (int)s->end_y - s->end_scrolled_by; return top <= y && y <= bottom; } static inline void draw_combining_char(Screen *self, char_type ch) { bool has_prev_char = false; index_type xpos = 0, ypos = 0; if (self->cursor->x > 0) { ypos = self->cursor->y; linebuf_init_line(self->linebuf, ypos); xpos = self->cursor->x - 1; has_prev_char = true; } else if (self->cursor->y > 0) { ypos = self->cursor->y - 1; linebuf_init_line(self->linebuf, ypos); xpos = self->columns - 1; has_prev_char = true; } if (has_prev_char) { line_add_combining_char(self->linebuf->line, ch, xpos); self->is_dirty = true; if (selection_has_screen_line(&self->selection, ypos)) self->selection = EMPTY_SELECTION; linebuf_mark_line_dirty(self->linebuf, ypos); if (ch == 0xfe0f) { // emoji presentation variation marker makes default text presentation emoji (narrow emoji) into wide emoji CPUCell *cpu_cell = self->linebuf->line->cpu_cells + xpos; GPUCell *gpu_cell = self->linebuf->line->gpu_cells + xpos; if ((gpu_cell->attrs & WIDTH_MASK) != 2 && cpu_cell->cc_idx[0] == VS16 && is_emoji_presentation_base(cpu_cell->ch)) { if (self->cursor->x <= self->columns - 1) line_set_char(self->linebuf->line, self->cursor->x, 0, 0, self->cursor, true); gpu_cell->attrs = (gpu_cell->attrs & !WIDTH_MASK) | 2; if (xpos == self->columns - 1) move_widened_char(self, cpu_cell, gpu_cell, xpos, ypos); else self->cursor->x++; } } else if (ch == 0xfe0e) { CPUCell *cpu_cell = self->linebuf->line->cpu_cells + xpos; GPUCell *gpu_cell = self->linebuf->line->gpu_cells + xpos; if ((gpu_cell->attrs & WIDTH_MASK) == 0 && cpu_cell->ch == 0 && xpos > 0) { xpos--; if (self->cursor->x > 0) self->cursor->x--; cpu_cell = self->linebuf->line->cpu_cells + xpos; gpu_cell = self->linebuf->line->gpu_cells + xpos; } if ((gpu_cell->attrs & WIDTH_MASK) == 2 && cpu_cell->cc_idx[0] == VS15 && is_emoji_presentation_base(cpu_cell->ch)) { gpu_cell->attrs = (gpu_cell->attrs & !WIDTH_MASK) | 1; } } } } void screen_draw(Screen *self, uint32_t och) { if (is_ignored_char(och)) return; uint32_t ch = och < 256 ? self->g_charset[och] : och; bool is_cc = is_combining_char(ch); if (UNLIKELY(is_cc)) { draw_combining_char(self, ch); return; } int char_width = wcwidth_std(ch); if (UNLIKELY(char_width < 1)) { if (char_width == 0) return; char_width = 1; } if (UNLIKELY(self->columns - self->cursor->x < (unsigned int)char_width)) { if (self->modes.mDECAWM) { screen_carriage_return(self); screen_linefeed(self); self->linebuf->line_attrs[self->cursor->y] |= CONTINUED_MASK; } else { self->cursor->x = self->columns - char_width; } } linebuf_init_line(self->linebuf, self->cursor->y); if (self->modes.mIRM) { line_right_shift(self->linebuf->line, self->cursor->x, char_width); } line_set_char(self->linebuf->line, self->cursor->x, ch, char_width, self->cursor, false); self->cursor->x++; if (char_width == 2) { line_set_char(self->linebuf->line, self->cursor->x, 0, 0, self->cursor, true); self->cursor->x++; } self->is_dirty = true; if (selection_has_screen_line(&self->selection, self->cursor->y)) self->selection = EMPTY_SELECTION; linebuf_mark_line_dirty(self->linebuf, self->cursor->y); } void screen_draw_overlay_text(Screen *self, const char *utf8_text) { if (self->overlay_line.is_active) deactivate_overlay_line(self); if (!utf8_text || !utf8_text[0]) return; Line *line = range_line_(self, self->cursor->y); if (!line) return; line_save_cells(line, 0, self->columns, self->overlay_line.gpu_cells, self->overlay_line.cpu_cells); self->overlay_line.is_active = true; self->overlay_line.ynum = self->cursor->y; self->overlay_line.xstart = self->cursor->x; self->overlay_line.xnum = 0; uint32_t codepoint = 0, state = UTF8_ACCEPT; bool orig_line_wrap_mode = self->modes.mDECAWM; self->modes.mDECAWM = false; self->cursor->reverse ^= true; index_type before; while (*utf8_text) { switch(decode_utf8(&state, &codepoint, *(utf8_text++))) { case UTF8_ACCEPT: before = self->cursor->x; screen_draw(self, codepoint); self->overlay_line.xnum += self->cursor->x - before; break; case UTF8_REJECT: break; } } self->cursor->reverse ^= true; self->modes.mDECAWM = orig_line_wrap_mode; } void screen_align(Screen *self) { self->margin_top = 0; self->margin_bottom = self->lines - 1; screen_cursor_position(self, 1, 1); linebuf_clear(self->linebuf, 'E'); } // }}} // Graphics {{{ void screen_alignment_display(Screen *self) { // https://www.vt100.net/docs/vt510-rm/DECALN.html screen_cursor_position(self, 1, 1); self->margin_top = 0; self->margin_bottom = self->lines - 1; for (unsigned int y = 0; y < self->linebuf->ynum; y++) { linebuf_init_line(self->linebuf, y); line_clear_text(self->linebuf->line, 0, self->linebuf->xnum, 'E'); linebuf_mark_line_dirty(self->linebuf, y); } } void select_graphic_rendition(Screen *self, unsigned int *params, unsigned int count, Region *region_) { if (region_) { Region region = *region_; if (!region.top) region.top = 1; if (!region.left) region.left = 1; if (!region.bottom) region.bottom = self->lines; if (!region.right) region.right = self->columns; if (self->modes.mDECOM) { region.top += self->margin_top; region.bottom += self->margin_top; } region.left -= 1; region.top -= 1; region.right -= 1; region.bottom -= 1; // switch to zero based indexing if (self->modes.mDECSACE) { index_type x = MIN(region.left, self->columns - 1); index_type num = region.right >= x ? region.right - x + 1 : 0; num = MIN(num, self->columns - x); for (index_type y = region.top; y < MIN(region.bottom + 1, self->lines); y++) { linebuf_init_line(self->linebuf, y); apply_sgr_to_cells(self->linebuf->line->gpu_cells + x, num, params, count); } } else { index_type x, num; for (index_type y = region.top; y < MIN(region.bottom + 1, self->lines); y++) { if (y == region.top) { x = MIN(region.left, self->columns - 1); num = self->columns - x; } else if (y == region.bottom) { x = 0; num = MIN(region.right + 1, self->columns); } else { x = 0; num = self->columns; } linebuf_init_line(self->linebuf, y); apply_sgr_to_cells(self->linebuf->line->gpu_cells + x, num, params, count); } } } else cursor_from_sgr(self->cursor, params, count); } static inline void write_to_test_child(Screen *self, const char *data, size_t sz) { PyObject *r = PyObject_CallMethod(self->test_child, "write", "y#", data, sz); if (r == NULL) PyErr_Print(); Py_CLEAR(r); } static inline void write_to_child(Screen *self, const char *data, size_t sz) { if (self->window_id) schedule_write_to_child(self->window_id, 1, data, sz); if (self->test_child != Py_None) { write_to_test_child(self, data, sz); } } void write_escape_code_to_child(Screen *self, unsigned char which, const char *data) { const char *prefix, *suffix = self->modes.eight_bit_controls ? "\x9c" : "\033\\"; switch(which) { case DCS: prefix = self->modes.eight_bit_controls ? "\x90" : "\033P"; break; case CSI: prefix = self->modes.eight_bit_controls ? "\x9b" : "\033["; suffix = ""; break; case OSC: prefix = self->modes.eight_bit_controls ? "\x9d" : "\033]"; break; case PM: prefix = self->modes.eight_bit_controls ? "\x9e" : "\033^"; break; case APC: prefix = self->modes.eight_bit_controls ? "\x9f" : "\033_"; break; default: fatal("Unknown escape code to write: %u", which); } if (self->window_id) { if (suffix[0]) { schedule_write_to_child(self->window_id, 3, prefix, strlen(prefix), data, strlen(data), suffix, strlen(suffix)); } else { schedule_write_to_child(self->window_id, 2, prefix, strlen(prefix), data, strlen(data)); } } if (self->test_child != Py_None) { write_to_test_child(self, prefix, strlen(prefix)); write_to_test_child(self, data, strlen(data)); if (suffix[0]) write_to_test_child(self, suffix, strlen(suffix)); } } static inline bool cursor_within_margins(Screen *self) { return self->margin_top <= self->cursor->y && self->cursor->y <= self->margin_bottom; } void screen_handle_graphics_command(Screen *self, const GraphicsCommand *cmd, const uint8_t *payload) { unsigned int x = self->cursor->x, y = self->cursor->y; const char *response = grman_handle_command(self->grman, cmd, payload, self->cursor, &self->is_dirty, self->cell_size); if (response != NULL) write_escape_code_to_child(self, APC, response); if (x != self->cursor->x || y != self->cursor->y) { bool in_margins = cursor_within_margins(self); if (self->cursor->x >= self->columns) { self->cursor->x = 0; self->cursor->y++; } if (self->cursor->y > self->margin_bottom) screen_scroll(self, self->cursor->y - self->margin_bottom); screen_ensure_bounds(self, false, in_margins); } } // }}} // Modes {{{ void screen_toggle_screen_buffer(Screen *self) { bool to_alt = self->linebuf == self->main_linebuf; grman_clear(self->alt_grman, true, self->cell_size); // always clear the alt buffer graphics to free up resources, since it has to be cleared when switching back to it anyway if (to_alt) { linebuf_clear(self->alt_linebuf, BLANK_CHAR); screen_save_cursor(self); self->linebuf = self->alt_linebuf; self->tabstops = self->alt_tabstops; self->grman = self->alt_grman; screen_cursor_position(self, 1, 1); cursor_reset(self->cursor); } else { self->linebuf = self->main_linebuf; self->tabstops = self->main_tabstops; screen_restore_cursor(self); self->grman = self->main_grman; } screen_history_scroll(self, SCROLL_FULL, false); self->is_dirty = true; self->selection = EMPTY_SELECTION; } void screen_normal_keypad_mode(Screen UNUSED *self) {} // Not implemented as this is handled by the GUI void screen_alternate_keypad_mode(Screen UNUSED *self) {} // Not implemented as this is handled by the GUI static inline void set_mode_from_const(Screen *self, unsigned int mode, bool val) { #define SIMPLE_MODE(name) \ case name: \ self->modes.m##name = val; break; #define MOUSE_MODE(name, attr, value) \ case name: \ self->modes.attr = val ? value : 0; break; bool private; switch(mode) { SIMPLE_MODE(LNM) SIMPLE_MODE(IRM) SIMPLE_MODE(DECARM) SIMPLE_MODE(BRACKETED_PASTE) SIMPLE_MODE(EXTENDED_KEYBOARD) SIMPLE_MODE(FOCUS_TRACKING) MOUSE_MODE(MOUSE_BUTTON_TRACKING, mouse_tracking_mode, BUTTON_MODE) MOUSE_MODE(MOUSE_MOTION_TRACKING, mouse_tracking_mode, MOTION_MODE) MOUSE_MODE(MOUSE_MOVE_TRACKING, mouse_tracking_mode, ANY_MODE) MOUSE_MODE(MOUSE_UTF8_MODE, mouse_tracking_protocol, UTF8_PROTOCOL) MOUSE_MODE(MOUSE_SGR_MODE, mouse_tracking_protocol, SGR_PROTOCOL) MOUSE_MODE(MOUSE_URXVT_MODE, mouse_tracking_protocol, URXVT_PROTOCOL) case DECSCLM: case DECNRCM: break; // we ignore these modes case DECCKM: self->modes.mDECCKM = val; break; case DECTCEM: self->modes.mDECTCEM = val; break; case DECSCNM: // Render screen in reverse video if (self->modes.mDECSCNM != val) { self->modes.mDECSCNM = val; self->is_dirty = true; } break; case DECOM: self->modes.mDECOM = val; // According to `vttest`, DECOM should also home the cursor, see // vttest/main.c:303. screen_cursor_position(self, 1, 1); break; case DECAWM: self->modes.mDECAWM = val; break; case DECCOLM: self->modes.mDECCOLM = val; if (val) { // When DECCOLM mode is set, the screen is erased and the cursor // moves to the home position. screen_erase_in_display(self, 2, false); screen_cursor_position(self, 1, 1); } break; case CONTROL_CURSOR_BLINK: self->cursor->blink = val; break; case ALTERNATE_SCREEN: if (val && self->linebuf == self->main_linebuf) screen_toggle_screen_buffer(self); else if (!val && self->linebuf != self->main_linebuf) screen_toggle_screen_buffer(self); break; default: private = mode >= 1 << 5; if (private) mode >>= 5; log_error("%s %s %u %s", ERROR_PREFIX, "Unsupported screen mode: ", mode, private ? "(private)" : ""); } #undef SIMPLE_MODE #undef MOUSE_MODE } void screen_set_mode(Screen *self, unsigned int mode) { set_mode_from_const(self, mode, true); } void screen_decsace(Screen *self, unsigned int val) { self->modes.mDECSACE = val == 2 ? true : false; } void screen_reset_mode(Screen *self, unsigned int mode) { set_mode_from_const(self, mode, false); } void screen_set_8bit_controls(Screen *self, bool yes) { self->modes.eight_bit_controls = yes; } // }}} // Cursor {{{ unsigned long screen_current_char_width(Screen *self) { unsigned long ans = 1; if (self->cursor->x < self->columns - 1 && self->cursor->y < self->lines) { ans = linebuf_char_width_at(self->linebuf, self->cursor->x, self->cursor->y); } return ans; } bool screen_is_cursor_visible(Screen *self) { return self->modes.mDECTCEM; } void screen_backspace(Screen *self) { screen_cursor_back(self, 1, -1); } void screen_tab(Screen *self) { // Move to the next tab space, or the end of the screen if there aren't anymore left. unsigned int found = 0; for (unsigned int i = self->cursor->x + 1; i < self->columns; i++) { if (self->tabstops[i]) { found = i; break; } } if (!found) found = self->columns - 1; if (found != self->cursor->x) { if (self->cursor->x < self->columns) { linebuf_init_line(self->linebuf, self->cursor->y); combining_type diff = found - self->cursor->x; CPUCell *cpu_cell = self->linebuf->line->cpu_cells + self->cursor->x; bool ok = true; for (combining_type i = 0; i < diff; i++) { CPUCell *c = cpu_cell + i; if (c->ch != ' ' && c->ch != 0) { ok = false; break; } } if (ok) { for (combining_type i = 0; i < diff; i++) { CPUCell *c = cpu_cell + i; c->ch = ' '; zero_at_ptr_count(c->cc_idx, arraysz(c->cc_idx)); } cpu_cell->ch = '\t'; cpu_cell->cc_idx[0] = diff; } } self->cursor->x = found; } } void screen_backtab(Screen *self, unsigned int count) { // Move back count tabs if (!count) count = 1; int i; while (count > 0 && self->cursor->x > 0) { count--; for (i = self->cursor->x - 1; i >= 0; i--) { if (self->tabstops[i]) { self->cursor->x = i; break; } } if (i <= 0) self->cursor->x = 0; } } void screen_clear_tab_stop(Screen *self, unsigned int how) { switch(how) { case 0: if (self->cursor->x < self->columns) self->tabstops[self->cursor->x] = false; break; case 2: break; // no-op case 3: for (unsigned int i = 0; i < self->columns; i++) self->tabstops[i] = false; break; default: log_error("%s %s %u", ERROR_PREFIX, "Unsupported clear tab stop mode: ", how); break; } } void screen_set_tab_stop(Screen *self) { if (self->cursor->x < self->columns) self->tabstops[self->cursor->x] = true; } void screen_cursor_back(Screen *self, unsigned int count/*=1*/, int move_direction/*=-1*/) { if (count == 0) count = 1; if (move_direction < 0 && count > self->cursor->x) self->cursor->x = 0; else self->cursor->x += move_direction * count; screen_ensure_bounds(self, false, cursor_within_margins(self)); } void screen_cursor_forward(Screen *self, unsigned int count/*=1*/) { screen_cursor_back(self, count, 1); } void screen_cursor_up(Screen *self, unsigned int count/*=1*/, bool do_carriage_return/*=false*/, int move_direction/*=-1*/) { bool in_margins = cursor_within_margins(self); if (count == 0) count = 1; if (move_direction < 0 && count > self->cursor->y) self->cursor->y = 0; else self->cursor->y += move_direction * count; screen_ensure_bounds(self, true, in_margins); if (do_carriage_return) self->cursor->x = 0; } void screen_cursor_up1(Screen *self, unsigned int count/*=1*/) { screen_cursor_up(self, count, true, -1); } void screen_cursor_down(Screen *self, unsigned int count/*=1*/) { screen_cursor_up(self, count, false, 1); } void screen_cursor_down1(Screen *self, unsigned int count/*=1*/) { screen_cursor_up(self, count, true, 1); } void screen_cursor_to_column(Screen *self, unsigned int column) { unsigned int x = MAX(column, 1u) - 1; if (x != self->cursor->x) { self->cursor->x = x; screen_ensure_bounds(self, false, cursor_within_margins(self)); } } static inline void index_selection(Screen *self, Selection *s, bool up) { if (s->start_scrolled_by == s->end_scrolled_by && s->start_x == s->end_x && s->start_y == s->end_y) return; if (up) { if (s->start_y == 0) s->start_scrolled_by += 1; else s->start_y--; if (s->end_y == 0) s->end_scrolled_by += 1; else s->end_y--; } else { if (s->start_y >= self->lines - 1) s->start_scrolled_by -= 1; else s->start_y++; if (s->end_y >= self->lines - 1) s->end_scrolled_by -= 1; else s->end_y++; } } #define INDEX_GRAPHICS(amtv) { \ bool is_main = self->linebuf == self->main_linebuf; \ static ScrollData s; \ s.amt = amtv; s.limit = is_main ? -self->historybuf->ynum : 0; \ s.has_margins = self->margin_top != 0 || self->margin_bottom != self->lines - 1; \ s.margin_top = top; s.margin_bottom = bottom; \ grman_scroll_images(self->grman, &s, self->cell_size); \ } #define INDEX_UP \ if (self->overlay_line.is_active) deactivate_overlay_line(self); \ linebuf_index(self->linebuf, top, bottom); \ INDEX_GRAPHICS(-1) \ if (self->linebuf == self->main_linebuf && bottom == self->lines - 1) { \ /* Only add to history when no page margins have been set */ \ linebuf_init_line(self->linebuf, bottom); \ historybuf_add_line(self->historybuf, self->linebuf->line); \ self->history_line_added_count++; \ } \ linebuf_clear_line(self->linebuf, bottom); \ self->is_dirty = true; \ index_selection(self, &self->selection, true); void screen_index(Screen *self) { // Move cursor down one line, scrolling screen if needed unsigned int top = self->margin_top, bottom = self->margin_bottom; if (self->cursor->y == bottom) { INDEX_UP; } else screen_cursor_down(self, 1); } void screen_scroll(Screen *self, unsigned int count) { // Scroll the screen up by count lines, not moving the cursor unsigned int top = self->margin_top, bottom = self->margin_bottom; while (count > 0) { count--; INDEX_UP; } } #define INDEX_DOWN \ if (self->overlay_line.is_active) deactivate_overlay_line(self); \ linebuf_reverse_index(self->linebuf, top, bottom); \ linebuf_clear_line(self->linebuf, top); \ INDEX_GRAPHICS(1) \ self->is_dirty = true; \ index_selection(self, &self->selection, false); void screen_reverse_index(Screen *self) { // Move cursor up one line, scrolling screen if needed unsigned int top = self->margin_top, bottom = self->margin_bottom; if (self->cursor->y == top) { INDEX_DOWN; } else screen_cursor_up(self, 1, false, -1); } void screen_reverse_scroll(Screen *self, unsigned int count) { // Scroll the screen down by count lines, not moving the cursor count = MIN(self->lines, count); unsigned int top = self->margin_top, bottom = self->margin_bottom; while (count > 0) { count--; INDEX_DOWN; } } void screen_carriage_return(Screen *self) { if (self->cursor->x != 0) { self->cursor->x = 0; } } void screen_linefeed(Screen *self) { bool in_margins = cursor_within_margins(self); screen_index(self); if (self->modes.mLNM) screen_carriage_return(self); screen_ensure_bounds(self, false, in_margins); } #define buffer_push(self, ans) { \ ans = (self)->buf + (((self)->start_of_data + (self)->count) % SAVEPOINTS_SZ); \ if ((self)->count == SAVEPOINTS_SZ) (self)->start_of_data = ((self)->start_of_data + 1) % SAVEPOINTS_SZ; \ else (self)->count++; \ } #define buffer_pop(self, ans) { \ if ((self)->count == 0) ans = NULL; \ else { \ (self)->count--; \ ans = (self)->buf + (((self)->start_of_data + (self)->count) % SAVEPOINTS_SZ); \ } \ } #define COPY_CHARSETS(self, sp) \ sp->utf8_state = self->utf8_state; \ sp->utf8_codepoint = self->utf8_codepoint; \ sp->g0_charset = self->g0_charset; \ sp->g1_charset = self->g1_charset; \ sp->current_charset = self->current_charset; \ sp->use_latin1 = self->use_latin1; void screen_save_cursor(Screen *self) { SavepointBuffer *pts = self->linebuf == self->main_linebuf ? &self->main_savepoints : &self->alt_savepoints; Savepoint *sp; buffer_push(pts, sp); cursor_copy_to(self->cursor, &(sp->cursor)); sp->mDECOM = self->modes.mDECOM; sp->mDECAWM = self->modes.mDECAWM; sp->mDECSCNM = self->modes.mDECSCNM; COPY_CHARSETS(self, sp); } void screen_save_modes(Screen *self) { ScreenModes *m; buffer_push(&self->modes_savepoints, m); *m = self->modes; } void screen_restore_cursor(Screen *self) { SavepointBuffer *pts = self->linebuf == self->main_linebuf ? &self->main_savepoints : &self->alt_savepoints; Savepoint *sp; buffer_pop(pts, sp); if (sp == NULL) { screen_cursor_position(self, 1, 1); screen_reset_mode(self, DECOM); RESET_CHARSETS; screen_reset_mode(self, DECSCNM); } else { COPY_CHARSETS(sp, self); self->g_charset = self->current_charset ? self->g1_charset : self->g0_charset; set_mode_from_const(self, DECOM, sp->mDECOM); set_mode_from_const(self, DECAWM, sp->mDECAWM); set_mode_from_const(self, DECSCNM, sp->mDECSCNM); cursor_copy_to(&(sp->cursor), self->cursor); screen_ensure_bounds(self, false, false); } } void screen_restore_modes(Screen *self) { const ScreenModes *m; buffer_pop(&self->modes_savepoints, m); if (m == NULL) m = &empty_modes; #define S(name) set_mode_from_const(self, name, m->m##name) S(DECTCEM); S(DECSCNM); S(DECSCNM); S(DECOM); S(DECAWM); S(DECARM); S(DECCKM); S(BRACKETED_PASTE); S(FOCUS_TRACKING); S(EXTENDED_KEYBOARD); self->modes.mouse_tracking_mode = m->mouse_tracking_mode; self->modes.mouse_tracking_protocol = m->mouse_tracking_protocol; #undef S } void screen_ensure_bounds(Screen *self, bool force_use_margins/*=false*/, bool in_margins) { unsigned int top, bottom; if (in_margins && (force_use_margins || self->modes.mDECOM)) { top = self->margin_top; bottom = self->margin_bottom; } else { top = 0; bottom = self->lines - 1; } self->cursor->x = MIN(self->cursor->x, self->columns - 1); self->cursor->y = MAX(top, MIN(self->cursor->y, bottom)); } void screen_cursor_position(Screen *self, unsigned int line, unsigned int column) { bool in_margins = cursor_within_margins(self); line = (line == 0 ? 1 : line) - 1; column = (column == 0 ? 1: column) - 1; if (self->modes.mDECOM) { line += self->margin_top; line = MAX(self->margin_top, MIN(line, self->margin_bottom)); } self->cursor->x = column; self->cursor->y = line; screen_ensure_bounds(self, false, in_margins); } void screen_cursor_to_line(Screen *self, unsigned int line) { screen_cursor_position(self, line, self->cursor->x + 1); } // }}} // Editing {{{ void screen_erase_in_line(Screen *self, unsigned int how, bool private) { /*Erases a line in a specific way. :param int how: defines the way the line should be erased in: * ``0`` -- Erases from cursor to end of line, including cursor position. * ``1`` -- Erases from beginning of line to cursor, including cursor position. * ``2`` -- Erases complete line. :param bool private: when ``True`` character attributes are left unchanged. */ unsigned int s = 0, n = 0; switch(how) { case 0: s = self->cursor->x; n = self->columns - self->cursor->x; break; case 1: n = self->cursor->x + 1; break; case 2: n = self->columns; break; default: break; } if (n > 0) { linebuf_init_line(self->linebuf, self->cursor->y); if (private) { line_clear_text(self->linebuf->line, s, n, BLANK_CHAR); } else { line_apply_cursor(self->linebuf->line, self->cursor, s, n, true); } self->is_dirty = true; if (selection_has_screen_line(&self->selection, self->cursor->y)) self->selection = EMPTY_SELECTION; linebuf_mark_line_dirty(self->linebuf, self->cursor->y); } } void screen_erase_in_display(Screen *self, unsigned int how, bool private) { /* Erases display in a specific way. :param int how: defines the way the screen should be erased: * ``0`` -- Erases from cursor to end of screen, including cursor position. * ``1`` -- Erases from beginning of screen to cursor, including cursor position. * ``2`` -- Erases complete display. All lines are erased and changed to single-width. Cursor does not move. * ``3`` -- Erase complete display and scrollback buffer as well. :param bool private: when ``True`` character attributes are left unchanged */ unsigned int a, b; switch(how) { case 0: a = self->cursor->y + 1; b = self->lines; break; case 1: a = 0; b = self->cursor->y; break; case 2: case 3: grman_clear(self->grman, how == 3, self->cell_size); a = 0; b = self->lines; break; default: return; } if (b > a) { for (unsigned int i=a; i < b; i++) { linebuf_init_line(self->linebuf, i); if (private) { line_clear_text(self->linebuf->line, 0, self->columns, BLANK_CHAR); } else { line_apply_cursor(self->linebuf->line, self->cursor, 0, self->columns, true); } linebuf_mark_line_dirty(self->linebuf, i); } self->is_dirty = true; self->selection = EMPTY_SELECTION; } if (how != 2) { screen_erase_in_line(self, how, private); } if (how == 3 && self->linebuf == self->main_linebuf) { historybuf_clear(self->historybuf); if (self->scrolled_by != 0) { self->scrolled_by = 0; self->scroll_changed = true; } } } void screen_insert_lines(Screen *self, unsigned int count) { unsigned int top = self->margin_top, bottom = self->margin_bottom; if (count == 0) count = 1; if (top <= self->cursor->y && self->cursor->y <= bottom) { linebuf_insert_lines(self->linebuf, count, self->cursor->y, bottom); self->is_dirty = true; self->selection = EMPTY_SELECTION; screen_carriage_return(self); } } void screen_scroll_until_cursor(Screen *self) { unsigned int num_lines_to_scroll = MIN(self->margin_bottom, self->cursor->y + 1); index_type y = self->cursor->y; self->cursor->y = self->margin_bottom; while (num_lines_to_scroll--) screen_index(self); self->cursor->y = y; } void screen_delete_lines(Screen *self, unsigned int count) { unsigned int top = self->margin_top, bottom = self->margin_bottom; if (count == 0) count = 1; if (top <= self->cursor->y && self->cursor->y <= bottom) { linebuf_delete_lines(self->linebuf, count, self->cursor->y, bottom); self->is_dirty = true; self->selection = EMPTY_SELECTION; screen_carriage_return(self); } } void screen_insert_characters(Screen *self, unsigned int count) { unsigned int top = self->margin_top, bottom = self->margin_bottom; if (count == 0) count = 1; if (top <= self->cursor->y && self->cursor->y <= bottom) { unsigned int x = self->cursor->x; unsigned int num = MIN(self->columns - x, count); linebuf_init_line(self->linebuf, self->cursor->y); line_right_shift(self->linebuf->line, x, num); line_apply_cursor(self->linebuf->line, self->cursor, x, num, true); linebuf_mark_line_dirty(self->linebuf, self->cursor->y); self->is_dirty = true; if (selection_has_screen_line(&self->selection, self->cursor->y)) self->selection = EMPTY_SELECTION; } } void screen_delete_characters(Screen *self, unsigned int count) { // Delete characters, later characters are moved left unsigned int top = self->margin_top, bottom = self->margin_bottom; if (count == 0) count = 1; if (top <= self->cursor->y && self->cursor->y <= bottom) { unsigned int x = self->cursor->x; unsigned int num = MIN(self->columns - x, count); linebuf_init_line(self->linebuf, self->cursor->y); left_shift_line(self->linebuf->line, x, num); line_apply_cursor(self->linebuf->line, self->cursor, self->columns - num, num, true); linebuf_mark_line_dirty(self->linebuf, self->cursor->y); self->is_dirty = true; if (selection_has_screen_line(&self->selection, self->cursor->y)) self->selection = EMPTY_SELECTION; } } void screen_erase_characters(Screen *self, unsigned int count) { // Delete characters replacing them by spaces if (count == 0) count = 1; unsigned int x = self->cursor->x; unsigned int num = MIN(self->columns - x, count); linebuf_init_line(self->linebuf, self->cursor->y); line_apply_cursor(self->linebuf->line, self->cursor, x, num, true); linebuf_mark_line_dirty(self->linebuf, self->cursor->y); self->is_dirty = true; if (selection_has_screen_line(&self->selection, self->cursor->y)) self->selection = EMPTY_SELECTION; } // }}} // Device control {{{ void screen_use_latin1(Screen *self, bool on) { self->use_latin1 = on; self->utf8_state = 0; self->utf8_codepoint = 0; CALLBACK("use_utf8", "O", on ? Py_False : Py_True); } bool screen_invert_colors(Screen *self) { bool inverted = false; if (self->start_visual_bell_at > 0) { if (monotonic() - self->start_visual_bell_at <= OPT(visual_bell_duration)) inverted = true; else self->start_visual_bell_at = 0; } if (self->modes.mDECSCNM) inverted = inverted ? false : true; return inverted; } void screen_bell(Screen *self) { request_window_attention(self->window_id, OPT(enable_audio_bell)); if (OPT(visual_bell_duration) > 0.0f) self->start_visual_bell_at = monotonic(); CALLBACK("on_bell", NULL); } void report_device_attributes(Screen *self, unsigned int mode, char start_modifier) { if (mode == 0) { switch(start_modifier) { case 0: write_escape_code_to_child(self, CSI, "?62;c"); break; case '>': write_escape_code_to_child(self, CSI, ">1;" xstr(PRIMARY_VERSION) ";" xstr(SECONDARY_VERSION) "c"); // VT-220 + primary version + secondary version break; } } } void screen_report_size(Screen *self, unsigned int which) { char buf[32] = {0}; unsigned int code = 0; unsigned int width = 0, height = 0; switch(which) { case 14: code = 4; width = self->cell_size.width * self->columns; height = self->cell_size.height * self->lines; break; case 16: code = 6; width = self->cell_size.width; height = self->cell_size.height; break; case 18: code = 8; width = self->columns; height = self->lines; break; } if (code) { snprintf(buf, sizeof(buf), "%u;%u;%ut", code, height, width); write_escape_code_to_child(self, CSI, buf); } } void screen_manipulate_title_stack(Screen *self, unsigned int op, unsigned int which) { CALLBACK("manipulate_title_stack", "OOO", op == 23 ? Py_True : Py_False, which == 0 || which == 2 ? Py_True : Py_False, which == 0 || which == 1 ? Py_True : Py_False ); } void report_device_status(Screen *self, unsigned int which, bool private) { // We don't implement the private device status codes, since I haven't come // across any programs that use them unsigned int x, y; static char buf[64]; switch(which) { case 5: // device status write_escape_code_to_child(self, CSI, "0n"); break; case 6: // cursor position x = self->cursor->x; y = self->cursor->y; if (x >= self->columns) { if (y < self->lines - 1) { x = 0; y++; } else x--; } if (self->modes.mDECOM) y -= MAX(y, self->margin_top); // 1-based indexing int sz = snprintf(buf, sizeof(buf) - 1, "%s%u;%uR", (private ? "?": ""), y + 1, x + 1); if (sz > 0) write_escape_code_to_child(self, CSI, buf); break; } } void report_mode_status(Screen *self, unsigned int which, bool private) { unsigned int q = private ? which << 5 : which; unsigned int ans = 0; char buf[50] = {0}; switch(q) { #define KNOWN_MODE(x) \ case x: \ ans = self->modes.m##x ? 1 : 2; break; KNOWN_MODE(LNM); KNOWN_MODE(IRM); KNOWN_MODE(DECTCEM); KNOWN_MODE(DECSCNM); KNOWN_MODE(DECOM); KNOWN_MODE(DECAWM); KNOWN_MODE(DECCOLM); KNOWN_MODE(DECARM); KNOWN_MODE(DECCKM); KNOWN_MODE(BRACKETED_PASTE); KNOWN_MODE(EXTENDED_KEYBOARD); KNOWN_MODE(FOCUS_TRACKING); #undef KNOWN_MODE } int sz = snprintf(buf, sizeof(buf) - 1, "%s%u;%u$y", (private ? "?" : ""), which, ans); if (sz > 0) write_escape_code_to_child(self, CSI, buf); } void screen_set_margins(Screen *self, unsigned int top, unsigned int bottom) { if (!top) top = 1; if (!bottom) bottom = self->lines; top = MIN(self->lines, top); bottom = MIN(self->lines, bottom); top--; bottom--; // 1 based indexing if (bottom > top) { // Even though VT102 and VT220 require DECSTBM to ignore regions // of width less than 2, some programs (like aptitude for example) // rely on it. Practicality beats purity. self->margin_top = top; self->margin_bottom = bottom; // The cursor moves to the home position when the top and // bottom margins of the scrolling region (DECSTBM) changes. screen_cursor_position(self, 1, 1); } } void screen_set_cursor(Screen *self, unsigned int mode, uint8_t secondary) { uint8_t shape; bool blink; switch(secondary) { case 0: // DECLL break; case '"': // DECCSA break; case ' ': // DECSCUSR shape = 0; blink = false; if (mode > 0) { blink = mode % 2; shape = (mode < 3) ? CURSOR_BLOCK : (mode < 5) ? CURSOR_UNDERLINE : (mode < 7) ? CURSOR_BEAM : NO_CURSOR_SHAPE; } if (shape != self->cursor->shape || blink != self->cursor->blink) { self->cursor->shape = shape; self->cursor->blink = blink; } break; } } void set_title(Screen *self, PyObject *title) { CALLBACK("title_changed", "O", title); } void set_icon(Screen *self, PyObject *icon) { CALLBACK("icon_changed", "O", icon); } void set_dynamic_color(Screen *self, unsigned int code, PyObject *color) { if (color == NULL) { CALLBACK("set_dynamic_color", "Is", code, ""); } else { CALLBACK("set_dynamic_color", "IO", code, color); } } void clipboard_control(Screen *self, PyObject *data) { CALLBACK("clipboard_control", "O", data); } void set_color_table_color(Screen *self, unsigned int code, PyObject *color) { if (color == NULL) { CALLBACK("set_color_table_color", "Is", code, ""); } else { CALLBACK("set_color_table_color", "IO", code, color); } } void screen_handle_cmd(Screen *self, PyObject *cmd) { CALLBACK("handle_remote_cmd", "O", cmd); } void screen_push_dynamic_colors(Screen *self) { colorprofile_push_dynamic_colors(self->color_profile); } void screen_pop_dynamic_colors(Screen *self) { colorprofile_pop_dynamic_colors(self->color_profile); } void screen_handle_print(Screen *self, PyObject *msg) { CALLBACK("handle_remote_print", "O", msg); } void screen_request_capabilities(Screen *self, char c, PyObject *q) { static char buf[128]; int shape = 0; const char *query; switch(c) { case '+': CALLBACK("request_capabilities", "O", q); break; case '$': // report status query = PyUnicode_AsUTF8(q); if (strcmp(" q", query) == 0) { // cursor shape switch(self->cursor->shape) { case NO_CURSOR_SHAPE: case NUM_OF_CURSOR_SHAPES: shape = 1; break; case CURSOR_BLOCK: shape = self->cursor->blink ? 0 : 2; break; case CURSOR_UNDERLINE: shape = self->cursor->blink ? 3 : 4; break; case CURSOR_BEAM: shape = self->cursor->blink ? 5 : 6; break; } shape = snprintf(buf, sizeof(buf), "1$r%d q", shape); } else if (strcmp("m", query) == 0) { // SGR shape = snprintf(buf, sizeof(buf), "1$r%sm", cursor_as_sgr(self->cursor)); } else if (strcmp("r", query) == 0) { shape = snprintf(buf, sizeof(buf), "1$r%u;%ur", self->margin_top + 1, self->margin_bottom + 1); } else { shape = snprintf(buf, sizeof(buf), "0$r%s", query); } if (shape > 0) write_escape_code_to_child(self, DCS, buf); break; } } // }}} // Rendering {{{ static inline void update_line_data(Line *line, unsigned int dest_y, uint8_t *data) { size_t base = dest_y * line->xnum * sizeof(GPUCell); memcpy(data + base, line->gpu_cells, line->xnum * sizeof(GPUCell)); } static inline void screen_reset_dirty(Screen *self) { self->is_dirty = false; self->history_line_added_count = 0; } void screen_update_cell_data(Screen *self, void *address, FONTS_DATA_HANDLE fonts_data, bool cursor_has_moved) { unsigned int history_line_added_count = self->history_line_added_count; index_type lnum; bool was_dirty = self->is_dirty; if (self->scrolled_by) self->scrolled_by = MIN(self->scrolled_by + history_line_added_count, self->historybuf->count); screen_reset_dirty(self); self->scroll_changed = false; for (index_type y = 0; y < MIN(self->lines, self->scrolled_by); y++) { lnum = self->scrolled_by - 1 - y; historybuf_init_line(self->historybuf, lnum, self->historybuf->line); if (self->historybuf->line->has_dirty_text) { render_line(fonts_data, self->historybuf->line, lnum, self->cursor, self->disable_ligatures); historybuf_mark_line_clean(self->historybuf, lnum); } update_line_data(self->historybuf->line, y, address); } for (index_type y = self->scrolled_by; y < self->lines; y++) { lnum = y - self->scrolled_by; linebuf_init_line(self->linebuf, lnum); if (self->linebuf->line->has_dirty_text || (cursor_has_moved && (self->cursor->y == lnum || self->last_rendered_cursor_y == lnum))) { render_line(fonts_data, self->linebuf->line, lnum, self->cursor, self->disable_ligatures); linebuf_mark_line_clean(self->linebuf, lnum); } update_line_data(self->linebuf->line, y, address); } if (was_dirty) { self->url_range = EMPTY_SELECTION; } } static inline bool is_selection_empty(Screen *self, unsigned int start_x, unsigned int start_y, unsigned int end_x, unsigned int end_y) { return start_x >= self->columns || start_y >= self->lines || end_x >= self->columns || end_y >= self->lines || (start_x == end_x && start_y == end_y); } static inline void selection_coord(Screen *self, unsigned int x, unsigned int y, unsigned int ydelta, SelectionBoundary *ans) { if (y + self->scrolled_by < ydelta) { ans->x = 0; ans->y = 0; } else { y = y - ydelta + self->scrolled_by; if (y >= self->lines) { ans->x = self->columns - 1; ans->y = self->lines - 1; } else { ans->x = x; ans->y = y; } } } static inline void full_selection_coord(Screen *self, unsigned int x, unsigned int y, unsigned int ydelta, FullSelectionBoundary *ans) { ans->x = MIN(x, self->columns - 1); ans->y = y - ydelta; if (y >= self->lines) { ans->x = self->columns - 1; ans->y = self->lines - 1; } } #define selection_limits_(which, left, right) { \ SelectionBoundary a, b; \ selection_coord(self, self->which.start_x, self->which.start_y, self->which.start_scrolled_by, &a); \ selection_coord(self, self->which.end_x, self->which.end_y, self->which.end_scrolled_by, &b); \ if (a.y < b.y || (a.y == b.y && a.x <= b.x)) { *(left) = a; *(right) = b; } \ else { *(left) = b; *(right) = a; } \ } #define full_selection_limits_(which, left, right) { \ FullSelectionBoundary a, b; \ full_selection_coord(self, self->which.start_x, self->which.start_y, self->which.start_scrolled_by, &a); \ full_selection_coord(self, self->which.end_x, self->which.end_y, self->which.end_scrolled_by, &b); \ if (a.y < b.y || (a.y == b.y && a.x <= b.x)) { *(left) = a; *(right) = b; } \ else { *(left) = b; *(right) = a; } \ } static inline Line* visual_line_(Screen *self, index_type y) { if (self->scrolled_by) { if (y < self->scrolled_by) { historybuf_init_line(self->historybuf, self->scrolled_by - 1 - y, self->historybuf->line); return self->historybuf->line; } y -= self->scrolled_by; } linebuf_init_line(self->linebuf, y); return self->linebuf->line; } static inline Line* range_line_(Screen *self, int y) { if (y < 0) { historybuf_init_line(self->historybuf, -(y + 1), self->historybuf->line); return self->historybuf->line; } linebuf_init_line(self->linebuf, y); return self->linebuf->line; } static inline int clamp_for_range_line(Screen *self, int y) { if (y < 0) { unsigned int idx = -(y + 1); if (idx >= self->historybuf->count) { y += idx - self->historybuf->count + 1; } return y; } return MIN((unsigned int)y, self->lines - 1); } #define iterate_over_rectangle(start, end, line_func, y_type) { \ y_type min_y = MIN(start->y, end->y), max_y = MAX(start->y, end->y); \ index_type min_x = MIN(start->x, end->x), max_x = MAX(start->x, end->x); \ for (y_type y = min_y; y <= max_y; y++) { \ Line *line = line_func(self, y); \ index_type xlimit = xlimit_for_line(line); \ xlimit = MIN(max_x + 1, xlimit); \ index_type x_start = min_x; #define iterate_over_region(start, end, line_func, y_type) { \ for (y_type y = start->y; y <= end->y; y++) { \ Line *line = line_func(self, y); \ index_type xlimit = xlimit_for_line(line); \ if (y == end->y) xlimit = MIN(end->x + 1, xlimit); \ index_type x_start = y == start->y ? start->x : 0; static inline void apply_selection(Screen *self, uint8_t *data, SelectionBoundary *start, SelectionBoundary *end, uint8_t set_mask, bool rectangle_select) { if (is_selection_empty(self, start->x, start->y, end->x, end->y)) return; if (rectangle_select) { iterate_over_rectangle(start, end, visual_line_, index_type) uint8_t *line_start = data + self->columns * y; for (index_type x = x_start; x < xlimit; x++) line_start[x] |= set_mask; }} } else { iterate_over_region(start, end, visual_line_, index_type) uint8_t *line_start = data + self->columns * y; for (index_type x = x_start; x < xlimit; x++) line_start[x] |= set_mask; }} } } bool screen_has_selection(Screen *self) { SelectionBoundary start, end; selection_limits_(selection, &start, &end); return !is_selection_empty(self, start.x, start.y, end.x, end.y); } void screen_apply_selection(Screen *self, void *address, size_t size) { memset(address, 0, size); self->last_selection_scrolled_by = self->scrolled_by; self->selection_updated_once = true; selection_limits_(selection, &self->last_rendered_selection_start, &self->last_rendered_selection_end); apply_selection(self, address, &self->last_rendered_selection_start, &self->last_rendered_selection_end, 1, self->selection.rectangle_select); selection_limits_(url_range, &self->last_rendered_url_start, &self->last_rendered_url_end); apply_selection(self, address, &self->last_rendered_url_start, &self->last_rendered_url_end, 2, false); } #define text_for_range_action(ans, insert_newlines) { \ char leading_char = (i > 0 && insert_newlines && !line->continued) ? '\n' : 0; \ PyObject *text = unicode_in_range(line, x_start, xlimit, true, leading_char); \ if (text == NULL) { Py_DECREF(ans); return PyErr_NoMemory(); } \ PyTuple_SET_ITEM(ans, i++, text); \ } #define text_for_range(ans, start, end, rectangle_select, insert_newlines, line_func, y_type) { \ int num_of_lines = end.y - start.y + 1, i = 0; \ ans = PyTuple_New(num_of_lines); \ if (ans == NULL) return PyErr_NoMemory(); \ if (rectangle_select) { \ iterate_over_rectangle((&start), (&end), line_func, y_type) \ text_for_range_action(ans, insert_newlines); \ } }} else { \ iterate_over_region((&start), (&end), line_func, y_type) \ text_for_range_action(ans, insert_newlines); \ } }} \ } bool screen_open_url(Screen *self) { SelectionBoundary start, end; selection_limits_(url_range, &start, &end); if (is_selection_empty(self, start.x, start.y, end.x, end.y)) return false; PyObject *url; text_for_range(url, start, end, false, false, visual_line_, index_type); if (url) { call_boss(open_url_lines, "(O)", url); Py_CLEAR(url); } else PyErr_Print(); return true; } static void deactivate_overlay_line(Screen *self) { if (self->overlay_line.is_active && self->overlay_line.xnum && self->overlay_line.ynum < self->lines) { Line *line = range_line_(self, self->overlay_line.ynum); line_reset_cells(line, self->overlay_line.xstart, self->overlay_line.xnum, self->overlay_line.gpu_cells, self->overlay_line.cpu_cells); if (self->cursor->y == self->overlay_line.ynum) self->cursor->x = self->overlay_line.xstart; self->is_dirty = true; linebuf_mark_line_dirty(self->linebuf, self->overlay_line.ynum); } self->overlay_line.is_active = false; self->overlay_line.ynum = 0; self->overlay_line.xnum = 0; self->overlay_line.xstart = 0; } // }}} // Python interface {{{ #define WRAP0(name) static PyObject* name(Screen *self, PyObject *a UNUSED) { screen_##name(self); Py_RETURN_NONE; } #define WRAP0x(name) static PyObject* xxx_##name(Screen *self, PyObject *a UNUSED) { screen_##name(self); Py_RETURN_NONE; } #define WRAP1(name, defval) static PyObject* name(Screen *self, PyObject *args) { unsigned int v=defval; if(!PyArg_ParseTuple(args, "|I", &v)) return NULL; screen_##name(self, v); Py_RETURN_NONE; } #define WRAP1B(name, defval) static PyObject* name(Screen *self, PyObject *args) { unsigned int v=defval; int b=false; if(!PyArg_ParseTuple(args, "|Ip", &v, &b)) return NULL; screen_##name(self, v, b); Py_RETURN_NONE; } #define WRAP1E(name, defval, ...) static PyObject* name(Screen *self, PyObject *args) { unsigned int v=defval; if(!PyArg_ParseTuple(args, "|I", &v)) return NULL; screen_##name(self, v, __VA_ARGS__); Py_RETURN_NONE; } #define WRAP2(name, defval1, defval2) static PyObject* name(Screen *self, PyObject *args) { unsigned int a=defval1, b=defval2; if(!PyArg_ParseTuple(args, "|II", &a, &b)) return NULL; screen_##name(self, a, b); Py_RETURN_NONE; } #define WRAP2B(name) static PyObject* name(Screen *self, PyObject *args) { unsigned int a, b; int p; if(!PyArg_ParseTuple(args, "IIp", &a, &b, &p)) return NULL; screen_##name(self, a, b, (bool)p); Py_RETURN_NONE; } static PyObject* set_pending_timeout(Screen *self, PyObject *val) { if (!PyFloat_Check(val)) { PyErr_SetString(PyExc_TypeError, "timeout must be a float"); return NULL; } PyObject *ans = PyFloat_FromDouble(self->pending_mode.wait_time); self->pending_mode.wait_time = s_double_to_monotonic_t(PyFloat_AS_DOUBLE(val)); return ans; } static PyObject* as_text(Screen *self, PyObject *args) { as_text_generic(args, self, visual_line_, self->lines, self->columns); } static PyObject* as_text_non_visual(Screen *self, PyObject *args) { as_text_generic(args, self, range_line_, self->lines, self->columns); } static inline PyObject* as_text_generic_wrapper(Screen *self, PyObject *args, Line*(get_line)(Screen *, int)) { as_text_generic(args, self, get_line, self->lines, self->columns); } static PyObject* as_text_alternate(Screen *self, PyObject *args) { LineBuf *original = self->linebuf; self->linebuf = original == self->main_linebuf ? self->alt_linebuf : self->main_linebuf; PyObject *ans = as_text_generic_wrapper(self, args, range_line_); self->linebuf = original; return ans; } static PyObject* screen_wcswidth(PyObject UNUSED *self, PyObject *str) { if (PyUnicode_READY(str) != 0) return NULL; int kind = PyUnicode_KIND(str); void *data = PyUnicode_DATA(str); Py_ssize_t len = PyUnicode_GET_LENGTH(str), i; unsigned long ans = 0; char_type prev_ch = 0; int prev_width = 0; bool in_sgr = false; for (i = 0; i < len; i++) { char_type ch = PyUnicode_READ(kind, data, i); if (in_sgr) { if (ch == 'm') in_sgr = false; continue; } if (ch == 0x1b && i + 1 < len && PyUnicode_READ(kind, data, i + 1) == '[') { in_sgr = true; continue; } if (ch == 0xfe0f) { if (is_emoji_presentation_base(prev_ch) && prev_width == 1) { ans += 1; prev_width = 2; } else prev_width = 0; } else if (ch == 0xfe0e) { if (is_emoji_presentation_base(prev_ch) && prev_width == 2) { ans -= 1; prev_width = 1; } else prev_width = 0; } else { int w = wcwidth_std(ch); switch(w) { case -1: case 0: prev_width = 0; break; case 2: prev_width = 2; break; default: prev_width = 1; break; } ans += prev_width; } prev_ch = ch; } return PyLong_FromUnsignedLong(ans); } static PyObject* screen_truncate_point_for_length(PyObject UNUSED *self, PyObject *args) { PyObject *str; unsigned int num_cells, start_pos = 0; if (!PyArg_ParseTuple(args, "OI|I", &str, &num_cells, &start_pos)) return NULL; if (PyUnicode_READY(str) != 0) return NULL; int kind = PyUnicode_KIND(str); void *data = PyUnicode_DATA(str); Py_ssize_t len = PyUnicode_GET_LENGTH(str), i; char_type prev_ch = 0; int prev_width = 0; bool in_sgr = false; unsigned long width_so_far = 0; for (i = start_pos; i < len && width_so_far < num_cells; i++) { char_type ch = PyUnicode_READ(kind, data, i); if (in_sgr) { if (ch == 'm') in_sgr = false; continue; } if (ch == 0x1b && i + 1 < len && PyUnicode_READ(kind, data, i + 1) == '[') { in_sgr = true; continue; } if (ch == 0xfe0f) { if (is_emoji_presentation_base(prev_ch) && prev_width == 1) { width_so_far += 1; prev_width = 2; } else prev_width = 0; } else { int w = wcwidth_std(ch); switch(w) { case -1: case 0: prev_width = 0; break; case 2: prev_width = 2; break; default: prev_width = 1; break; } if (width_so_far + prev_width > num_cells) { break; } width_so_far += prev_width; } prev_ch = ch; } return PyLong_FromUnsignedLong(i); } static PyObject* line(Screen *self, PyObject *val) { unsigned long y = PyLong_AsUnsignedLong(val); if (y >= self->lines) { PyErr_SetString(PyExc_IndexError, "Out of bounds"); return NULL; } linebuf_init_line(self->linebuf, y); Py_INCREF(self->linebuf->line); return (PyObject*) self->linebuf->line; } Line* screen_visual_line(Screen *self, index_type y) { if (y >= self->lines) return NULL; return visual_line_(self, y); } static PyObject* visual_line(Screen *self, PyObject *args) { // The line corresponding to the yth visual line, taking into account scrolling unsigned int y; if (!PyArg_ParseTuple(args, "I", &y)) return NULL; if (y >= self->lines) { Py_RETURN_NONE; } return Py_BuildValue("O", visual_line_(self, y)); } static PyObject* draw(Screen *self, PyObject *src) { if (!PyUnicode_Check(src)) { PyErr_SetString(PyExc_TypeError, "A unicode string is required"); return NULL; } if (PyUnicode_READY(src) != 0) { return PyErr_NoMemory(); } int kind = PyUnicode_KIND(src); void *buf = PyUnicode_DATA(src); Py_ssize_t sz = PyUnicode_GET_LENGTH(src); for (Py_ssize_t i = 0; i < sz; i++) screen_draw(self, PyUnicode_READ(kind, buf, i)); Py_RETURN_NONE; } static PyObject* reset_mode(Screen *self, PyObject *args) { int private = false; unsigned int mode; if (!PyArg_ParseTuple(args, "I|p", &mode, &private)) return NULL; if (private) mode <<= 5; screen_reset_mode(self, mode); Py_RETURN_NONE; } static PyObject* _select_graphic_rendition(Screen *self, PyObject *args) { unsigned int params[256] = {0}; for (int i = 0; i < PyTuple_GET_SIZE(args); i++) { params[i] = PyLong_AsUnsignedLong(PyTuple_GET_ITEM(args, i)); } select_graphic_rendition(self, params, PyTuple_GET_SIZE(args), NULL); Py_RETURN_NONE; } static PyObject* set_mode(Screen *self, PyObject *args) { int private = false; unsigned int mode; if (!PyArg_ParseTuple(args, "I|p", &mode, &private)) return NULL; if (private) mode <<= 5; screen_set_mode(self, mode); Py_RETURN_NONE; } static PyObject* reset_dirty(Screen *self, PyObject *a UNUSED) { screen_reset_dirty(self); Py_RETURN_NONE; } static PyObject* is_using_alternate_linebuf(Screen *self, PyObject *a UNUSED) { if (self->linebuf == self->alt_linebuf) Py_RETURN_TRUE; Py_RETURN_FALSE; } WRAP1E(cursor_back, 1, -1) WRAP1B(erase_in_line, 0) WRAP1B(erase_in_display, 0) WRAP0(scroll_until_cursor) #define MODE_GETSET(name, uname) \ static PyObject* name##_get(Screen *self, void UNUSED *closure) { PyObject *ans = self->modes.m##uname ? Py_True : Py_False; Py_INCREF(ans); return ans; } \ static int name##_set(Screen *self, PyObject *val, void UNUSED *closure) { if (val == NULL) { PyErr_SetString(PyExc_TypeError, "Cannot delete attribute"); return -1; } set_mode_from_const(self, uname, PyObject_IsTrue(val) ? true : false); return 0; } MODE_GETSET(in_bracketed_paste_mode, BRACKETED_PASTE) MODE_GETSET(extended_keyboard, EXTENDED_KEYBOARD) MODE_GETSET(focus_tracking_enabled, FOCUS_TRACKING) MODE_GETSET(auto_repeat_enabled, DECARM) MODE_GETSET(cursor_visible, DECTCEM) MODE_GETSET(cursor_key_mode, DECCKM) static PyObject* disable_ligatures_get(Screen *self, void UNUSED *closure) { const char *ans = NULL; switch(self->disable_ligatures) { case DISABLE_LIGATURES_NEVER: ans = "never"; break; case DISABLE_LIGATURES_CURSOR: ans = "cursor"; break; case DISABLE_LIGATURES_ALWAYS: ans = "always"; break; } return PyUnicode_FromString(ans); } static int disable_ligatures_set(Screen *self, PyObject *val, void UNUSED *closure) { if (val == NULL) { PyErr_SetString(PyExc_TypeError, "Cannot delete attribute"); return -1; } if (!PyUnicode_Check(val)) { PyErr_SetString(PyExc_TypeError, "unicode string expected"); return -1; } if (PyUnicode_READY(val) != 0) return -1; const char *q = PyUnicode_AsUTF8(val); DisableLigature dl = DISABLE_LIGATURES_NEVER; if (strcmp(q, "always") == 0) dl = DISABLE_LIGATURES_ALWAYS; else if (strcmp(q, "cursor") == 0) dl = DISABLE_LIGATURES_CURSOR; if (dl != self->disable_ligatures) { self->disable_ligatures = dl; screen_dirty_sprite_positions(self); } return 0; } static PyObject* cursor_up(Screen *self, PyObject *args) { unsigned int count = 1; int do_carriage_return = false, move_direction = -1; if (!PyArg_ParseTuple(args, "|Ipi", &count, &do_carriage_return, &move_direction)) return NULL; screen_cursor_up(self, count, do_carriage_return, move_direction); Py_RETURN_NONE; } WRAP0x(index) WRAP0(reverse_index) WRAP0(reset) WRAP0(set_tab_stop) WRAP1(clear_tab_stop, 0) WRAP0(backspace) WRAP0(tab) WRAP0(linefeed) WRAP0(carriage_return) WRAP2(resize, 1, 1) WRAP2(set_margins, 1, 1) WRAP0(rescale_images) WRAP2B(update_selection) static PyObject* start_selection(Screen *self, PyObject *args) { unsigned int x, y; int rectangle_select = 0, extend_mode = EXTEND_CELL; if (!PyArg_ParseTuple(args, "II|pi", &x, &y, &rectangle_select, &extend_mode)) return NULL; screen_start_selection(self, x, y, rectangle_select, extend_mode); Py_RETURN_NONE; } static PyObject* is_rectangle_select(Screen *self, PyObject *a UNUSED) { PyObject *ans = self->selection.rectangle_select ? Py_True : Py_False; Py_INCREF(ans); return ans; } static PyObject* copy_colors_from(Screen *self, Screen *other) { copy_color_profile(self->color_profile, other->color_profile); Py_RETURN_NONE; } static PyObject* text_for_selection(Screen *self, PyObject *a UNUSED) { FullSelectionBoundary start, end; full_selection_limits_(selection, &start, &end); PyObject *ans = NULL; start.y = clamp_for_range_line(self, start.y); end.y = clamp_for_range_line(self, end.y); if (start.y == end.y && start.x == end.x) ans = PyTuple_New(0); else text_for_range(ans, start, end, self->selection.rectangle_select, true, range_line_, int); return ans; } bool screen_selection_range_for_line(Screen *self, index_type y, index_type *start, index_type *end) { if (y >= self->lines) { return false; } Line *line = visual_line_(self, y); index_type xlimit = line->xnum, xstart = 0; while (xlimit > 0 && CHAR_IS_BLANK(line->cpu_cells[xlimit - 1].ch)) xlimit--; while (xstart < xlimit && CHAR_IS_BLANK(line->cpu_cells[xstart].ch)) xstart++; *start = xstart; *end = xlimit > 0 ? xlimit - 1 : 0; return true; } static inline bool is_opt_word_char(char_type ch) { for (size_t i = 0; i < OPT(select_by_word_characters_count); i++) { if (OPT(select_by_word_characters[i]) == ch) return true; } return false; } bool screen_selection_range_for_word(Screen *self, index_type x, index_type *y1, index_type *y2, index_type *s, index_type *e, bool initial_selection) { if (*y1 >= self->lines || x >= self->columns) return false; index_type start, end; Line *line = visual_line_(self, *y1); *y2 = *y1; #define is_ok(x) (is_word_char((line->cpu_cells[x].ch)) || is_opt_word_char(line->cpu_cells[x].ch)) if (!is_ok(x)) { if (initial_selection) return false; *s = x; *e = x; return true; } start = x; end = x; while(true) { while(start > 0 && is_ok(start - 1)) start--; if (start > 0 || !line->continued || *y1 == 0) break; line = visual_line_(self, *y1 - 1); if (!is_ok(self->columns - 1)) break; (*y1)--; start = self->columns - 1; } line = visual_line_(self, *y2); while(true) { while(end < self->columns - 1 && is_ok(end + 1)) end++; if (end < self->columns - 1 || *y2 >= self->lines - 1) break; line = visual_line_(self, *y2 + 1); if (!line->continued || !is_ok(0)) break; (*y2)++; end = 0; } *s = start; *e = end; return true; #undef is_ok } bool screen_history_scroll(Screen *self, int amt, bool upwards) { switch(amt) { case SCROLL_LINE: amt = 1; break; case SCROLL_PAGE: amt = self->lines - 1; break; case SCROLL_FULL: amt = self->historybuf->count; break; default: amt = MAX(0, amt); break; } if (!upwards) { amt = MIN((unsigned int)amt, self->scrolled_by); amt *= -1; } if (amt == 0) return false; unsigned int new_scroll = MIN(self->scrolled_by + amt, self->historybuf->count); if (new_scroll != self->scrolled_by) { self->scrolled_by = new_scroll; self->scroll_changed = true; return true; } return false; } static PyObject* scroll(Screen *self, PyObject *args) { int amt, upwards; if (!PyArg_ParseTuple(args, "ip", &amt, &upwards)) return NULL; if (screen_history_scroll(self, amt, upwards)) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } bool screen_is_selection_dirty(Screen *self) { SelectionBoundary start, end; selection_limits_(selection, &start, &end); if (self->last_selection_scrolled_by != self->scrolled_by || start.x != self->last_rendered_selection_start.x || start.y != self->last_rendered_selection_start.y || end.x != self->last_rendered_selection_end.x || end.y != self->last_rendered_selection_end.y || !self->selection_updated_once) return true; selection_limits_(url_range, &start, &end); if (start.x != self->last_rendered_url_start.x || start.y != self->last_rendered_url_start.y || end.x != self->last_rendered_url_end.x || end.y != self->last_rendered_url_end.y) return true; return false; } void screen_start_selection(Screen *self, index_type x, index_type y, bool rectangle_select, SelectionExtendMode extend_mode) { #define A(attr, val) self->selection.attr = val; A(start_x, x); A(end_x, x); A(start_y, y); A(end_y, y); A(start_scrolled_by, self->scrolled_by); A(end_scrolled_by, self->scrolled_by); A(in_progress, true); A(rectangle_select, rectangle_select); A(extend_mode, extend_mode); #undef A } void screen_mark_url(Screen *self, index_type start_x, index_type start_y, index_type end_x, index_type end_y) { #define A(attr, val) self->url_range.attr = val; A(start_x, start_x); A(end_x, end_x); A(start_y, start_y); A(end_y, end_y); A(start_scrolled_by, self->scrolled_by); A(end_scrolled_by, self->scrolled_by); #undef A } void screen_update_selection(Screen *self, index_type x, index_type y, bool ended) { index_type orig_x = self->selection.end_x, orig_y = self->selection.end_y, orig_scrolled_by = self->selection.end_scrolled_by; self->selection.end_x = x; self->selection.end_y = y; self->selection.end_scrolled_by = self->scrolled_by; if (ended) self->selection.in_progress = false; index_type start, end; bool found = false; bool extending_leftwards = self->selection.end_y < self->selection.start_y || (self->selection.end_y == self->selection.start_y && self->selection.end_x < self->selection.start_x); switch(self->selection.extend_mode) { case EXTEND_WORD: { index_type y1 = y, y2; found = screen_selection_range_for_word(self, x, &y1, &y2, &start, &end, false); if (found) { if (extending_leftwards) { self->selection.end_x = start; self->selection.end_y = y1; y1 = self->selection.start_y; found = screen_selection_range_for_word(self, self->selection.start_x, &y1, &y2, &start, &end, false); if (found) { self->selection.start_x = end; self->selection.start_y = y2; } } else { self->selection.end_x = end; self->selection.end_y = y2; y1 = self->selection.start_y; found = screen_selection_range_for_word(self, self->selection.start_x, &y1, &y2, &start, &end, false); if (found) { self->selection.start_x = start; self->selection.start_y = y1; } } } else { self->selection.end_x = orig_x; self->selection.end_y = orig_y; self->selection.end_scrolled_by = orig_scrolled_by; } break; } case EXTEND_LINE: { index_type top_line = extending_leftwards ? self->selection.end_y : self->selection.start_y; index_type bottom_line = extending_leftwards ? self->selection.start_y : self->selection.end_y; while(top_line > 0 && visual_line_(self, top_line)->continued) top_line--; while(bottom_line < self->lines - 1 && visual_line_(self, bottom_line + 1)->continued) bottom_line++; found = screen_selection_range_for_line(self, top_line, &start, &end); if (found) { if (extending_leftwards) { self->selection.end_x = start; self->selection.end_y = top_line; } else { self->selection.start_x = start; self->selection.start_y = top_line; } } found = screen_selection_range_for_line(self, bottom_line, &start, &end); if (found) { if (extending_leftwards) { self->selection.start_x = end; self->selection.start_y = bottom_line; } else { self->selection.end_x = end; self->selection.end_y = bottom_line; } } break; } case EXTEND_CELL: break; } if (!self->selection.in_progress) call_boss(set_primary_selection, NULL); } static PyObject* mark_as_dirty(Screen *self, PyObject *a UNUSED) { self->is_dirty = true; Py_RETURN_NONE; } static PyObject* current_char_width(Screen *self, PyObject *a UNUSED) { #define current_char_width_doc "The width of the character under the cursor" return PyLong_FromUnsignedLong(screen_current_char_width(self)); } static PyObject* is_main_linebuf(Screen *self, PyObject *a UNUSED) { PyObject *ans = (self->linebuf == self->main_linebuf) ? Py_True : Py_False; Py_INCREF(ans); return ans; } static PyObject* toggle_alt_screen(Screen *self, PyObject *a UNUSED) { screen_toggle_screen_buffer(self); Py_RETURN_NONE; } static PyObject* send_escape_code_to_child(Screen *self, PyObject *args) { int code; char *text; if (!PyArg_ParseTuple(args, "is", &code, &text)) return NULL; write_escape_code_to_child(self, code, text); Py_RETURN_NONE; } static PyObject* paste(Screen *self, PyObject *bytes) { if (self->modes.mBRACKETED_PASTE) write_escape_code_to_child(self, CSI, BRACKETED_PASTE_START); write_to_child(self, PyBytes_AS_STRING(bytes), PyBytes_GET_SIZE(bytes)); if (self->modes.mBRACKETED_PASTE) write_escape_code_to_child(self, CSI, BRACKETED_PASTE_END); Py_RETURN_NONE; } WRAP2(cursor_position, 1, 1) #define COUNT_WRAP(name) WRAP1(name, 1) COUNT_WRAP(insert_lines) COUNT_WRAP(delete_lines) COUNT_WRAP(insert_characters) COUNT_WRAP(delete_characters) COUNT_WRAP(erase_characters) COUNT_WRAP(cursor_up1) COUNT_WRAP(cursor_down) COUNT_WRAP(cursor_down1) COUNT_WRAP(cursor_forward) static PyObject* wcwidth_wrap(PyObject UNUSED *self, PyObject *chr) { return PyLong_FromLong(wcwidth_std(PyLong_AsLong(chr))); } static PyObject* screen_is_emoji_presentation_base(PyObject UNUSED *self, PyObject *code_) { unsigned long code = PyLong_AsUnsignedLong(code_); if (is_emoji_presentation_base(code)) Py_RETURN_TRUE; Py_RETURN_FALSE; } #define MND(name, args) {#name, (PyCFunction)name, args, #name}, #define MODEFUNC(name) MND(name, METH_NOARGS) MND(set_##name, METH_O) static PyMethodDef methods[] = { MND(line, METH_O) MND(visual_line, METH_VARARGS) MND(draw, METH_O) MND(cursor_position, METH_VARARGS) MND(set_mode, METH_VARARGS) MND(reset_mode, METH_VARARGS) MND(reset, METH_NOARGS) MND(reset_dirty, METH_NOARGS) MND(is_using_alternate_linebuf, METH_NOARGS) MND(is_main_linebuf, METH_NOARGS) MND(cursor_back, METH_VARARGS) MND(erase_in_line, METH_VARARGS) MND(erase_in_display, METH_VARARGS) MND(scroll_until_cursor, METH_NOARGS) METHOD(current_char_width, METH_NOARGS) MND(insert_lines, METH_VARARGS) MND(delete_lines, METH_VARARGS) MND(insert_characters, METH_VARARGS) MND(delete_characters, METH_VARARGS) MND(erase_characters, METH_VARARGS) MND(cursor_up, METH_VARARGS) MND(cursor_up1, METH_VARARGS) MND(cursor_down, METH_VARARGS) MND(cursor_down1, METH_VARARGS) MND(cursor_forward, METH_VARARGS) {"index", (PyCFunction)xxx_index, METH_VARARGS, ""}, MND(set_pending_timeout, METH_O) MND(as_text, METH_VARARGS) MND(as_text_non_visual, METH_VARARGS) MND(as_text_alternate, METH_VARARGS) MND(tab, METH_NOARGS) MND(backspace, METH_NOARGS) MND(linefeed, METH_NOARGS) MND(carriage_return, METH_NOARGS) MND(set_tab_stop, METH_NOARGS) MND(clear_tab_stop, METH_VARARGS) MND(start_selection, METH_VARARGS) MND(update_selection, METH_VARARGS) MND(reverse_index, METH_NOARGS) MND(mark_as_dirty, METH_NOARGS) MND(resize, METH_VARARGS) MND(set_margins, METH_VARARGS) MND(rescale_images, METH_NOARGS) MND(text_for_selection, METH_NOARGS) MND(is_rectangle_select, METH_NOARGS) MND(scroll, METH_VARARGS) MND(send_escape_code_to_child, METH_VARARGS) MND(toggle_alt_screen, METH_NOARGS) MND(reset_callbacks, METH_NOARGS) MND(paste, METH_O) MND(copy_colors_from, METH_O) {"select_graphic_rendition", (PyCFunction)_select_graphic_rendition, METH_VARARGS, ""}, {NULL} /* Sentinel */ }; static PyGetSetDef getsetters[] = { GETSET(in_bracketed_paste_mode) GETSET(extended_keyboard) GETSET(auto_repeat_enabled) GETSET(focus_tracking_enabled) GETSET(cursor_visible) GETSET(cursor_key_mode) GETSET(disable_ligatures) {NULL} /* Sentinel */ }; #if UINT_MAX == UINT32_MAX #define T_COL T_UINT #elif ULONG_MAX == UINT32_MAX #define T_COL T_ULONG #else #error Neither int nor long is 4-bytes in size #endif static PyMemberDef members[] = { {"callbacks", T_OBJECT_EX, offsetof(Screen, callbacks), 0, "callbacks"}, {"cursor", T_OBJECT_EX, offsetof(Screen, cursor), READONLY, "cursor"}, {"grman", T_OBJECT_EX, offsetof(Screen, grman), READONLY, "grman"}, {"color_profile", T_OBJECT_EX, offsetof(Screen, color_profile), READONLY, "color_profile"}, {"linebuf", T_OBJECT_EX, offsetof(Screen, linebuf), READONLY, "linebuf"}, {"main_linebuf", T_OBJECT_EX, offsetof(Screen, main_linebuf), READONLY, "main_linebuf"}, {"historybuf", T_OBJECT_EX, offsetof(Screen, historybuf), READONLY, "historybuf"}, {"scrolled_by", T_UINT, offsetof(Screen, scrolled_by), READONLY, "scrolled_by"}, {"lines", T_UINT, offsetof(Screen, lines), READONLY, "lines"}, {"columns", T_UINT, offsetof(Screen, columns), READONLY, "columns"}, {"margin_top", T_UINT, offsetof(Screen, margin_top), READONLY, "margin_top"}, {"margin_bottom", T_UINT, offsetof(Screen, margin_bottom), READONLY, "margin_bottom"}, {"history_line_added_count", T_UINT, offsetof(Screen, history_line_added_count), 0, "history_line_added_count"}, {NULL} }; PyTypeObject Screen_Type = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "fast_data_types.Screen", .tp_basicsize = sizeof(Screen), .tp_dealloc = (destructor)dealloc, .tp_flags = Py_TPFLAGS_DEFAULT, .tp_doc = "Screen", .tp_methods = methods, .tp_members = members, .tp_new = new, .tp_getset = getsetters, }; static PyMethodDef module_methods[] = { {"wcwidth", (PyCFunction)wcwidth_wrap, METH_O, ""}, {"wcswidth", (PyCFunction)screen_wcswidth, METH_O, ""}, {"is_emoji_presentation_base", (PyCFunction)screen_is_emoji_presentation_base, METH_O, ""}, {"truncate_point_for_length", (PyCFunction)screen_truncate_point_for_length, METH_VARARGS, ""}, {NULL} /* Sentinel */ }; INIT_TYPE(Screen) // }}} kitty-0.15.0/kitty/screen.h000066400000000000000000000211521356737523400155550ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "graphics.h" #include "monotonic.h" typedef enum ScrollTypes { SCROLL_LINE = -999999, SCROLL_PAGE, SCROLL_FULL } ScrollType; typedef struct { bool mLNM, mIRM, mDECTCEM, mDECSCNM, mDECOM, mDECAWM, mDECCOLM, mDECARM, mDECCKM, mBRACKETED_PASTE, mFOCUS_TRACKING, mEXTENDED_KEYBOARD, mDECSACE; MouseTrackingMode mouse_tracking_mode; MouseTrackingProtocol mouse_tracking_protocol; bool eight_bit_controls; // S8C1T } ScreenModes; typedef struct { unsigned int x, y; } SelectionBoundary; typedef enum SelectionExtendModes { EXTEND_CELL, EXTEND_WORD, EXTEND_LINE } SelectionExtendMode; typedef struct { unsigned int start_x, start_y, start_scrolled_by, end_x, end_y, end_scrolled_by; bool in_progress, rectangle_select; SelectionExtendMode extend_mode; } Selection; #define SAVEPOINTS_SZ 256 typedef struct { uint32_t utf8_state, utf8_codepoint, *g0_charset, *g1_charset; unsigned int current_charset; bool use_latin1; Cursor cursor; bool mDECOM, mDECAWM, mDECSCNM; } Savepoint; typedef struct { Savepoint buf[SAVEPOINTS_SZ]; index_type start_of_data, count; } SavepointBuffer; typedef struct { ScreenModes buf[SAVEPOINTS_SZ]; index_type start_of_data, count; } SavemodesBuffer; typedef struct { CPUCell *cpu_cells; GPUCell *gpu_cells; bool is_active; index_type xstart, ynum, xnum; } OverlayLine; typedef struct { PyObject_HEAD unsigned int columns, lines, margin_top, margin_bottom, charset, scrolled_by, last_selection_scrolled_by; unsigned int last_rendered_cursor_x, last_rendered_cursor_y; double pending_scroll_pixels; CellPixelSize cell_size; OverlayLine overlay_line; id_type window_id; uint32_t utf8_state, utf8_codepoint, *g0_charset, *g1_charset, *g_charset; unsigned int current_charset; Selection selection; SelectionBoundary last_rendered_selection_start, last_rendered_selection_end, last_rendered_url_start, last_rendered_url_end; Selection url_range; bool use_latin1, selection_updated_once, is_dirty, scroll_changed; Cursor *cursor; SavepointBuffer main_savepoints, alt_savepoints; SavemodesBuffer modes_savepoints; PyObject *callbacks, *test_child; LineBuf *linebuf, *main_linebuf, *alt_linebuf; GraphicsManager *grman, *main_grman, *alt_grman; HistoryBuf *historybuf; unsigned int history_line_added_count; bool *tabstops, *main_tabstops, *alt_tabstops; ScreenModes modes; ColorProfile *color_profile; monotonic_t start_visual_bell_at; uint32_t parser_buf[PARSER_BUF_SZ]; unsigned int parser_state, parser_text_start, parser_buf_pos; bool parser_has_pending_text; uint8_t read_buf[READ_BUF_SZ], *write_buf; monotonic_t new_input_at; size_t read_buf_sz, write_buf_sz, write_buf_used; pthread_mutex_t read_buf_lock, write_buf_lock; CursorRenderInfo cursor_render_info; struct { size_t capacity, used, stop_buf_pos; uint8_t *buf; monotonic_t activated_at, wait_time; int state; uint8_t stop_buf[32]; } pending_mode; DisableLigature disable_ligatures; } Screen; void parse_worker(Screen *screen, PyObject *dump_callback, monotonic_t now); void parse_worker_dump(Screen *screen, PyObject *dump_callback, monotonic_t now); void screen_align(Screen*); void screen_restore_cursor(Screen *); void screen_save_cursor(Screen *); void screen_restore_modes(Screen *); void screen_save_modes(Screen *); void write_escape_code_to_child(Screen *self, unsigned char which, const char *data); void screen_cursor_position(Screen*, unsigned int, unsigned int); void screen_cursor_back(Screen *self, unsigned int count/*=1*/, int move_direction/*=-1*/); void screen_erase_in_line(Screen *, unsigned int, bool); void screen_erase_in_display(Screen *, unsigned int, bool); void screen_draw(Screen *screen, uint32_t codepoint); void screen_ensure_bounds(Screen *self, bool use_margins, bool cursor_was_within_margins); void screen_toggle_screen_buffer(Screen *self); void screen_normal_keypad_mode(Screen *self); void screen_alternate_keypad_mode(Screen *self); void screen_change_default_color(Screen *self, unsigned int which, uint32_t col); void screen_alignment_display(Screen *self); void screen_reverse_index(Screen *self); void screen_index(Screen *self); void screen_scroll(Screen *self, unsigned int count); void screen_reverse_scroll(Screen *self, unsigned int count); void screen_reset(Screen *self); void screen_set_tab_stop(Screen *self); void screen_tab(Screen *self); void screen_backtab(Screen *self, unsigned int); void screen_clear_tab_stop(Screen *self, unsigned int how); void screen_set_mode(Screen *self, unsigned int mode); void screen_reset_mode(Screen *self, unsigned int mode); void screen_decsace(Screen *self, unsigned int); void screen_insert_characters(Screen *self, unsigned int count); void screen_cursor_up(Screen *self, unsigned int count/*=1*/, bool do_carriage_return/*=false*/, int move_direction/*=-1*/); void screen_set_cursor(Screen *self, unsigned int mode, uint8_t secondary); void screen_cursor_to_column(Screen *self, unsigned int column); void screen_cursor_down(Screen *self, unsigned int count/*=1*/); void screen_cursor_forward(Screen *self, unsigned int count/*=1*/); void screen_cursor_down1(Screen *self, unsigned int count/*=1*/); void screen_cursor_up1(Screen *self, unsigned int count/*=1*/); void screen_cursor_to_line(Screen *screen, unsigned int line); void screen_insert_lines(Screen *self, unsigned int count/*=1*/); void screen_delete_lines(Screen *self, unsigned int count/*=1*/); void screen_delete_characters(Screen *self, unsigned int count); void screen_erase_characters(Screen *self, unsigned int count); void screen_set_margins(Screen *self, unsigned int top, unsigned int bottom); void screen_change_charset(Screen *, uint32_t to); void screen_handle_cmd(Screen *, PyObject *cmd); void screen_push_dynamic_colors(Screen *); void screen_pop_dynamic_colors(Screen *); void screen_handle_print(Screen *, PyObject *cmd); void screen_designate_charset(Screen *, uint32_t which, uint32_t as); void screen_use_latin1(Screen *, bool); void set_title(Screen *self, PyObject*); void set_icon(Screen *self, PyObject*); void set_dynamic_color(Screen *self, unsigned int code, PyObject*); void clipboard_control(Screen *self, PyObject*); void set_color_table_color(Screen *self, unsigned int code, PyObject*); uint32_t* translation_table(uint32_t which); void screen_request_capabilities(Screen *, char, PyObject *); void screen_set_8bit_controls(Screen *, bool); void report_device_attributes(Screen *self, unsigned int UNUSED mode, char start_modifier); void select_graphic_rendition(Screen *self, unsigned int *params, unsigned int count, Region*); void report_device_status(Screen *self, unsigned int which, bool UNUSED); void report_mode_status(Screen *self, unsigned int which, bool); void screen_apply_selection(Screen *self, void *address, size_t size); bool screen_is_selection_dirty(Screen *self); bool screen_has_selection(Screen*); bool screen_invert_colors(Screen *self); void screen_update_cell_data(Screen *self, void *address, FONTS_DATA_HANDLE, bool cursor_has_moved); bool screen_is_cursor_visible(Screen *self); bool screen_selection_range_for_line(Screen *self, index_type y, index_type *start, index_type *end); bool screen_selection_range_for_word(Screen *self, index_type x, index_type *, index_type *, index_type *start, index_type *end, bool); void screen_start_selection(Screen *self, index_type x, index_type y, bool, SelectionExtendMode); void screen_update_selection(Screen *self, index_type x, index_type y, bool ended); bool screen_history_scroll(Screen *self, int amt, bool upwards); Line* screen_visual_line(Screen *self, index_type y); unsigned long screen_current_char_width(Screen *self); void screen_mark_url(Screen *self, index_type start_x, index_type start_y, index_type end_x, index_type end_y); void screen_handle_graphics_command(Screen *self, const GraphicsCommand *cmd, const uint8_t *payload); bool screen_open_url(Screen*); void screen_dirty_sprite_positions(Screen *self); void screen_rescale_images(Screen *self); void screen_report_size(Screen *, unsigned int which); void screen_manipulate_title_stack(Screen *, unsigned int op, unsigned int which); void screen_draw_overlay_text(Screen *self, const char *utf8_text); #define DECLARE_CH_SCREEN_HANDLER(name) void screen_##name(Screen *screen); DECLARE_CH_SCREEN_HANDLER(bell) DECLARE_CH_SCREEN_HANDLER(backspace) DECLARE_CH_SCREEN_HANDLER(tab) DECLARE_CH_SCREEN_HANDLER(linefeed) DECLARE_CH_SCREEN_HANDLER(carriage_return) kitty-0.15.0/kitty/session.py000066400000000000000000000130261356737523400161630ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import shlex import sys from collections import namedtuple from .config_data import to_layout_names from .constants import kitty_exe, shell_path from .layout import all_layouts from .utils import log_error WindowSizeOpts = namedtuple( 'WindowSizeOpts', 'initial_window_width initial_window_height window_margin_width window_padding_width remember_window_size') class Tab: def __init__(self, opts, name): self.windows = [] self.name = name.strip() self.active_window_idx = 0 self.enabled_layouts = opts.enabled_layouts self.layout = (self.enabled_layouts or ['tall'])[0] self.cwd = None self.next_title = None class Session: def __init__(self, default_title=None): self.tabs = [] self.active_tab_idx = 0 self.default_title = default_title self.os_window_size = None def add_tab(self, opts, name=''): if self.tabs and not self.tabs[-1].windows: del self.tabs[-1] self.tabs.append(Tab(opts, name)) def set_next_title(self, title): self.tabs[-1].next_title = title.strip() def set_layout(self, val): if val not in all_layouts: raise ValueError('{} is not a valid layout'.format(val)) self.tabs[-1].layout = val def add_window(self, cmd): if cmd: cmd = shlex.split(cmd) if isinstance(cmd, str) else cmd else: cmd = None from .tabs import SpecialWindow t = self.tabs[-1] t.windows.append(SpecialWindow(cmd, cwd=t.cwd, override_title=t.next_title or self.default_title)) t.next_title = None def add_special_window(self, sw): self.tabs[-1].windows.append(sw) def focus(self): self.active_tab_idx = max(0, len(self.tabs) - 1) self.tabs[-1].active_window_idx = max(0, len(self.tabs[-1].windows) - 1) def set_enabled_layouts(self, raw): self.tabs[-1].enabled_layouts = to_layout_names(raw) if self.tabs[-1].layout not in self.tabs[-1].enabled_layouts: self.tabs[-1].layout = self.tabs[-1].enabled_layouts[0] def set_cwd(self, val): self.tabs[-1].cwd = val def resolved_shell(opts=None): ans = getattr(opts, 'shell', '.') if ans == '.': ans = [shell_path] else: ans = shlex.split(ans) return ans def parse_session(raw, opts, default_title=None): def finalize_session(ans): for t in ans.tabs: if not t.windows: t.windows.append(resolved_shell(opts)) return ans ans = Session(default_title) ans.add_tab(opts) for line in raw.splitlines(): line = line.strip() if line and not line.startswith('#'): parts = line.split(maxsplit=1) if len(parts) == 1: cmd, rest = parts[0], '' else: cmd, rest = parts cmd, rest = cmd.strip(), rest.strip() if cmd == 'new_tab': ans.add_tab(opts, rest) elif cmd == 'new_os_window': yield finalize_session(ans) ans = Session(default_title) ans.add_tab(opts, rest) elif cmd == 'layout': ans.set_layout(rest) elif cmd == 'launch': ans.add_window(rest) elif cmd == 'focus': ans.focus() elif cmd == 'enabled_layouts': ans.set_enabled_layouts(rest) elif cmd == 'cd': ans.set_cwd(rest) elif cmd == 'title': ans.set_next_title(rest) elif cmd == 'os_window_size': from kitty.config_data import window_size w, h = map(window_size, rest.split(maxsplit=1)) ans.os_window_size = WindowSizeOpts(w, h, opts.window_margin_width, opts.window_padding_width, False) else: raise ValueError('Unknown command in session file: {}'.format(cmd)) yield finalize_session(ans) def create_sessions(opts, args=None, special_window=None, cwd_from=None, respect_cwd=False, default_session=None): if args and args.session: if args.session == '-': f = sys.stdin else: f = open(args.session) with f: session_data = f.read() yield from parse_session(session_data, opts, getattr(args, 'title', None)) return if default_session and default_session != 'none': try: with open(default_session) as f: session_data = f.read() except EnvironmentError: log_error('Failed to read from session file, ignoring: {}'.format(default_session)) else: yield from parse_session(session_data, opts, getattr(args, 'title', None)) return ans = Session() current_layout = opts.enabled_layouts[0] if opts.enabled_layouts else 'tall' ans.add_tab(opts) ans.tabs[-1].layout = current_layout if special_window is None: cmd = args.args if args and args.args else resolved_shell(opts) if args and args.hold: cmd = [kitty_exe(), '+hold'] + cmd from kitty.tabs import SpecialWindow k = {'cwd_from': cwd_from} if respect_cwd: k['cwd'] = args.directory if getattr(args, 'title', None): k['override_title'] = args.title special_window = SpecialWindow(cmd, **k) ans.add_special_window(special_window) yield ans kitty-0.15.0/kitty/shaders.c000066400000000000000000001011071356737523400157210ustar00rootroot00000000000000/* * shaders.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "fonts.h" #include "gl.h" #include enum { CELL_PROGRAM, CELL_BG_PROGRAM, CELL_SPECIAL_PROGRAM, CELL_FG_PROGRAM, BORDERS_PROGRAM, GRAPHICS_PROGRAM, GRAPHICS_PREMULT_PROGRAM, GRAPHICS_ALPHA_MASK_PROGRAM, BLIT_PROGRAM, NUM_PROGRAMS }; enum { SPRITE_MAP_UNIT, GRAPHICS_UNIT, BLIT_UNIT }; // Sprites {{{ typedef struct { unsigned int cell_width, cell_height; int xnum, ynum, x, y, z, last_num_of_layers, last_ynum; GLuint texture_id; GLint max_texture_size, max_array_texture_layers; } SpriteMap; static const SpriteMap NEW_SPRITE_MAP = { .xnum = 1, .ynum = 1, .last_num_of_layers = 1, .last_ynum = -1 }; static GLint max_texture_size = 0, max_array_texture_layers = 0; SPRITE_MAP_HANDLE alloc_sprite_map(unsigned int cell_width, unsigned int cell_height) { if (!max_texture_size) { glGetIntegerv(GL_MAX_TEXTURE_SIZE, &(max_texture_size)); glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &(max_array_texture_layers)); #ifdef __APPLE__ // Since on Apple we could have multiple GPUs, with different capabilities, // upper bound the values according to the data from https://developer.apple.com/graphicsimaging/opengl/capabilities/ max_texture_size = MIN(8192, max_texture_size); max_array_texture_layers = MIN(512, max_array_texture_layers); #endif sprite_tracker_set_limits(max_texture_size, max_array_texture_layers); } SpriteMap *ans = calloc(1, sizeof(SpriteMap)); if (!ans) fatal("Out of memory allocating a sprite map"); *ans = NEW_SPRITE_MAP; ans->max_texture_size = max_texture_size; ans->max_array_texture_layers = max_array_texture_layers; ans->cell_width = cell_width; ans->cell_height = cell_height; return (SPRITE_MAP_HANDLE)ans; } SPRITE_MAP_HANDLE free_sprite_map(SPRITE_MAP_HANDLE sm) { SpriteMap *sprite_map = (SpriteMap*)sm; if (sprite_map) { if (sprite_map->texture_id) free_texture(&sprite_map->texture_id); free(sprite_map); } return NULL; } static bool copy_image_warned = false; static void copy_image_sub_data(GLuint src_texture_id, GLuint dest_texture_id, unsigned int width, unsigned int height, unsigned int num_levels) { if (!GLAD_GL_ARB_copy_image) { // ARB_copy_image not available, do a slow roundtrip copy if (!copy_image_warned) { copy_image_warned = true; log_error("WARNING: Your system's OpenGL implementation does not have glCopyImageSubData, falling back to a slower implementation"); } size_t sz = width * height * num_levels; pixel *src = malloc(sz * sizeof(pixel)); if (src == NULL) { fatal("Out of memory."); } glBindTexture(GL_TEXTURE_2D_ARRAY, src_texture_id); glGetTexImage(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, GL_UNSIGNED_BYTE, src); glBindTexture(GL_TEXTURE_2D_ARRAY, dest_texture_id); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, num_levels, GL_RGBA, GL_UNSIGNED_BYTE, src); free(src); } else { glCopyImageSubData(src_texture_id, GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, dest_texture_id, GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, num_levels); } } static void realloc_sprite_texture(FONTS_DATA_HANDLE fg) { GLuint tex; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D_ARRAY, tex); // We use GL_NEAREST otherwise glyphs that touch the edge of the cell // often show a border between cells glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); unsigned int xnum, ynum, z, znum, width, height, src_ynum; sprite_tracker_current_layout(fg, &xnum, &ynum, &z); znum = z + 1; SpriteMap *sprite_map = (SpriteMap*)fg->sprite_map; width = xnum * sprite_map->cell_width; height = ynum * sprite_map->cell_height; glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, width, height, znum); if (sprite_map->texture_id) { // need to re-alloc src_ynum = MAX(1, sprite_map->last_ynum); copy_image_sub_data(sprite_map->texture_id, tex, width, src_ynum * sprite_map->cell_height, sprite_map->last_num_of_layers); glDeleteTextures(1, &sprite_map->texture_id); } glBindTexture(GL_TEXTURE_2D_ARRAY, 0); sprite_map->last_num_of_layers = znum; sprite_map->last_ynum = ynum; sprite_map->texture_id = tex; } static inline void ensure_sprite_map(FONTS_DATA_HANDLE fg) { SpriteMap *sprite_map = (SpriteMap*)fg->sprite_map; if (!sprite_map->texture_id) realloc_sprite_texture(fg); // We have to rebind since we don't know if the texture was ever bound // in the context of the current OSWindow glActiveTexture(GL_TEXTURE0 + SPRITE_MAP_UNIT); glBindTexture(GL_TEXTURE_2D_ARRAY, sprite_map->texture_id); } void send_sprite_to_gpu(FONTS_DATA_HANDLE fg, unsigned int x, unsigned int y, unsigned int z, pixel *buf) { SpriteMap *sprite_map = (SpriteMap*)fg->sprite_map; unsigned int xnum, ynum, znum; sprite_tracker_current_layout(fg, &xnum, &ynum, &znum); if ((int)znum >= sprite_map->last_num_of_layers || (znum == 0 && (int)ynum > sprite_map->last_ynum)) realloc_sprite_texture(fg); glBindTexture(GL_TEXTURE_2D_ARRAY, sprite_map->texture_id); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); x *= sprite_map->cell_width; y *= sprite_map->cell_height; glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, x, y, z, sprite_map->cell_width, sprite_map->cell_height, 1, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buf); } void send_image_to_gpu(GLuint *tex_id, const void* data, GLsizei width, GLsizei height, bool is_opaque, bool is_4byte_aligned) { if (!(*tex_id)) { glGenTextures(1, tex_id); } glBindTexture(GL_TEXTURE_2D, *tex_id); glPixelStorei(GL_UNPACK_ALIGNMENT, is_4byte_aligned ? 4 : 1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, is_opaque ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, data); } // }}} // Cell {{{ typedef struct { UniformBlock render_data; ArrayInformation color_table; } CellProgramLayout; static CellProgramLayout cell_program_layouts[NUM_PROGRAMS]; static GLuint offscreen_framebuffer = 0; static ssize_t blit_vertex_array; static void init_cell_program(void) { for (int i = CELL_PROGRAM; i < BORDERS_PROGRAM; i++) { cell_program_layouts[i].render_data.index = block_index(i, "CellRenderData"); cell_program_layouts[i].render_data.size = block_size(i, cell_program_layouts[i].render_data.index); cell_program_layouts[i].color_table.size = get_uniform_information(i, "color_table[0]", GL_UNIFORM_SIZE); cell_program_layouts[i].color_table.offset = get_uniform_information(i, "color_table[0]", GL_UNIFORM_OFFSET); cell_program_layouts[i].color_table.stride = get_uniform_information(i, "color_table[0]", GL_UNIFORM_ARRAY_STRIDE); } // Sanity check to ensure the attribute location binding worked #define C(p, name, expected) { int aloc = attrib_location(p, #name); if (aloc != expected && aloc != -1) fatal("The attribute location for %s is %d != %d in program: %d", #name, aloc, expected, p); } for (int p = CELL_PROGRAM; p < BORDERS_PROGRAM; p++) { C(p, colors, 0); C(p, sprite_coords, 1); C(p, is_selected, 2); } #undef C glGenFramebuffers(1, &offscreen_framebuffer); blit_vertex_array = create_vao(); } #define CELL_BUFFERS enum { cell_data_buffer, selection_buffer, uniform_buffer }; ssize_t create_cell_vao() { ssize_t vao_idx = create_vao(); #define A(name, size, dtype, offset, stride) \ add_attribute_to_vao(CELL_PROGRAM, vao_idx, #name, \ /*size=*/size, /*dtype=*/dtype, /*stride=*/stride, /*offset=*/offset, /*divisor=*/1); #define A1(name, size, dtype, offset) A(name, size, dtype, (void*)(offsetof(GPUCell, offset)), sizeof(GPUCell)) add_buffer_to_vao(vao_idx, GL_ARRAY_BUFFER); A1(sprite_coords, 4, GL_UNSIGNED_SHORT, sprite_x); A1(colors, 3, GL_UNSIGNED_INT, fg); add_buffer_to_vao(vao_idx, GL_ARRAY_BUFFER); A(is_selected, 1, GL_UNSIGNED_BYTE, NULL, 0); size_t bufnum = add_buffer_to_vao(vao_idx, GL_UNIFORM_BUFFER); alloc_vao_buffer(vao_idx, cell_program_layouts[CELL_PROGRAM].render_data.size, bufnum, GL_STREAM_DRAW); return vao_idx; #undef A #undef A1 } ssize_t create_graphics_vao() { ssize_t vao_idx = create_vao(); add_buffer_to_vao(vao_idx, GL_ARRAY_BUFFER); add_attribute_to_vao(GRAPHICS_PROGRAM, vao_idx, "src", 4, GL_FLOAT, 0, NULL, 0); return vao_idx; } struct CellUniformData { bool constants_set; bool alpha_mask_fg_set; GLint gploc, gpploc, cploc, cfploc, fg_loc; GLfloat prev_inactive_text_alpha; }; static struct CellUniformData cell_uniform_data = {0, .prev_inactive_text_alpha=-1}; static inline void send_graphics_data_to_gpu(size_t image_count, ssize_t gvao_idx, const ImageRenderData *render_data) { size_t sz = sizeof(GLfloat) * 16 * image_count; GLfloat *a = alloc_and_map_vao_buffer(gvao_idx, sz, 0, GL_STREAM_DRAW, GL_WRITE_ONLY); for (size_t i = 0; i < image_count; i++, a += 16) memcpy(a, render_data[i].vertices, sizeof(render_data[0].vertices)); unmap_vao_buffer(gvao_idx, 0); a = NULL; } static inline void cell_update_uniform_block(ssize_t vao_idx, Screen *screen, int uniform_buffer, GLfloat xstart, GLfloat ystart, GLfloat dx, GLfloat dy, CursorRenderInfo *cursor, bool inverted, OSWindow *os_window) { struct CellRenderData { GLfloat xstart, ystart, dx, dy, sprite_dx, sprite_dy, background_opacity, cursor_text_uses_bg; GLuint default_fg, default_bg, highlight_fg, highlight_bg, cursor_color, cursor_text_color, url_color, url_style, inverted; GLuint xnum, ynum, cursor_fg_sprite_idx; GLfloat cursor_x, cursor_y, cursor_w; }; static struct CellRenderData *rd; // Send the uniform data rd = (struct CellRenderData*)map_vao_buffer(vao_idx, uniform_buffer, GL_WRITE_ONLY); if (UNLIKELY(screen->color_profile->dirty)) { copy_color_table_to_buffer(screen->color_profile, (GLuint*)rd, cell_program_layouts[CELL_PROGRAM].color_table.offset / sizeof(GLuint), cell_program_layouts[CELL_PROGRAM].color_table.stride / sizeof(GLuint)); } // Cursor position enum { BLOCK_IDX = 0, BEAM_IDX = 6, UNDERLINE_IDX = 7, UNFOCUSED_IDX = 8 }; if (cursor->is_visible) { rd->cursor_x = screen->cursor->x, rd->cursor_y = screen->cursor->y; if (cursor->is_focused) { switch(cursor->shape) { default: rd->cursor_fg_sprite_idx = BLOCK_IDX; break; case CURSOR_BEAM: rd->cursor_fg_sprite_idx = BEAM_IDX; break; case CURSOR_UNDERLINE: rd->cursor_fg_sprite_idx = UNDERLINE_IDX; break; } } else rd->cursor_fg_sprite_idx = UNFOCUSED_IDX; } else rd->cursor_x = screen->columns, rd->cursor_y = screen->lines; rd->cursor_w = rd->cursor_x; if ( (rd->cursor_fg_sprite_idx == BLOCK_IDX || rd->cursor_fg_sprite_idx == UNDERLINE_IDX) && screen_current_char_width(screen) > 1 ) rd->cursor_w += 1; rd->xnum = screen->columns; rd->ynum = screen->lines; rd->xstart = xstart; rd->ystart = ystart; rd->dx = dx; rd->dy = dy; unsigned int x, y, z; sprite_tracker_current_layout(os_window->fonts_data, &x, &y, &z); rd->sprite_dx = 1.0f / (float)x; rd->sprite_dy = 1.0f / (float)y; rd->inverted = inverted ? 1 : 0; rd->background_opacity = os_window->is_semi_transparent ? os_window->background_opacity : 1.0f; #define COLOR(name) colorprofile_to_color(screen->color_profile, screen->color_profile->overridden.name, screen->color_profile->configured.name) rd->default_fg = COLOR(default_fg); rd->default_bg = COLOR(default_bg); rd->highlight_fg = COLOR(highlight_fg); rd->highlight_bg = COLOR(highlight_bg); rd->cursor_text_color = COLOR(cursor_text_color); #undef COLOR rd->cursor_color = cursor->color; rd->url_color = OPT(url_color); rd->url_style = OPT(url_style); rd->cursor_text_uses_bg = cursor_text_as_bg(screen->color_profile); unmap_vao_buffer(vao_idx, uniform_buffer); rd = NULL; } static inline bool cell_prepare_to_render(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, GLfloat xstart, GLfloat ystart, GLfloat dx, GLfloat dy, FONTS_DATA_HANDLE fonts_data) { size_t sz; CELL_BUFFERS; void *address; bool changed = false; ensure_sprite_map(fonts_data); bool cursor_pos_changed = screen->cursor->x != screen->last_rendered_cursor_x || screen->cursor->y != screen->last_rendered_cursor_y; bool disable_ligatures = screen->disable_ligatures == DISABLE_LIGATURES_CURSOR; if (screen->scroll_changed || screen->is_dirty || (disable_ligatures && cursor_pos_changed)) { sz = sizeof(GPUCell) * screen->lines * screen->columns; address = alloc_and_map_vao_buffer(vao_idx, sz, cell_data_buffer, GL_STREAM_DRAW, GL_WRITE_ONLY); screen_update_cell_data(screen, address, fonts_data, disable_ligatures && cursor_pos_changed); unmap_vao_buffer(vao_idx, cell_data_buffer); address = NULL; changed = true; } if (cursor_pos_changed) { screen->last_rendered_cursor_x = screen->cursor->x; screen->last_rendered_cursor_y = screen->cursor->y; } if (screen_is_selection_dirty(screen)) { sz = screen->lines * screen->columns; address = alloc_and_map_vao_buffer(vao_idx, sz, selection_buffer, GL_STREAM_DRAW, GL_WRITE_ONLY); screen_apply_selection(screen, address, sz); unmap_vao_buffer(vao_idx, selection_buffer); address = NULL; changed = true; } if (gvao_idx && grman_update_layers(screen->grman, screen->scrolled_by, xstart, ystart, dx, dy, screen->columns, screen->lines, screen->cell_size)) { send_graphics_data_to_gpu(screen->grman->count, gvao_idx, screen->grman->render_data); changed = true; } return changed; } static void draw_graphics(int program, ssize_t vao_idx, ssize_t gvao_idx, ImageRenderData *data, GLuint start, GLuint count) { bind_program(program); bind_vertex_array(gvao_idx); glActiveTexture(GL_TEXTURE0 + GRAPHICS_UNIT); GLuint base = 4 * start; glEnable(GL_SCISSOR_TEST); for (GLuint i=0; i < count;) { ImageRenderData *rd = data + start + i; glBindTexture(GL_TEXTURE_2D, rd->texture_id); // You could reduce the number of draw calls by using // glDrawArraysInstancedBaseInstance but Apple chose to abandon OpenGL // before implementing it. for (GLuint k=0; k < rd->group_count; k++, base += 4, i++) glDrawArrays(GL_TRIANGLE_FAN, base, 4); } glDisable(GL_SCISSOR_TEST); bind_vertex_array(vao_idx); } #define BLEND_ONTO_OPAQUE glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // blending onto opaque colors #define BLEND_PREMULT glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); // blending of pre-multiplied colors void draw_centered_alpha_mask(ssize_t gvao_idx, size_t screen_width, size_t screen_height, size_t width, size_t height, uint8_t *canvas) { static ImageRenderData data = {.group_count=1}; gpu_data_for_centered_image(&data, screen_width, screen_height, width, height); if (!data.texture_id) { glGenTextures(1, &data.texture_id); } glBindTexture(GL_TEXTURE_2D, data.texture_id); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, canvas); bind_program(GRAPHICS_ALPHA_MASK_PROGRAM); if (!cell_uniform_data.alpha_mask_fg_set) { cell_uniform_data.alpha_mask_fg_set = true; glUniform1i(glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "image"), GRAPHICS_UNIT); glUniform1ui(glGetUniformLocation(program_id(GRAPHICS_ALPHA_MASK_PROGRAM), "fg"), OPT(foreground)); } glScissor(0, 0, screen_width, screen_height); send_graphics_data_to_gpu(1, gvao_idx, &data); glEnable(GL_BLEND); BLEND_ONTO_OPAQUE; draw_graphics(GRAPHICS_ALPHA_MASK_PROGRAM, 0, gvao_idx, &data, 0, 1); glDisable(GL_BLEND); } static void draw_cells_simple(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen) { bind_program(CELL_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); if (screen->grman->count) { glEnable(GL_BLEND); BLEND_ONTO_OPAQUE; draw_graphics(GRAPHICS_PROGRAM, vao_idx, gvao_idx, screen->grman->render_data, 0, screen->grman->count); glDisable(GL_BLEND); } } static void draw_cells_interleaved(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen) { bind_program(CELL_BG_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); glEnable(GL_BLEND); BLEND_ONTO_OPAQUE; if (screen->grman->num_of_negative_refs) draw_graphics(GRAPHICS_PROGRAM, vao_idx, gvao_idx, screen->grman->render_data, 0, screen->grman->num_of_negative_refs); bind_program(CELL_SPECIAL_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); bind_program(CELL_FG_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); if (screen->grman->num_of_positive_refs) draw_graphics(GRAPHICS_PROGRAM, vao_idx, gvao_idx, screen->grman->render_data, screen->grman->num_of_negative_refs, screen->grman->num_of_positive_refs); glDisable(GL_BLEND); } static void draw_cells_interleaved_premult(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, OSWindow *os_window) { if (!os_window->offscreen_texture_id) { glGenTextures(1, &os_window->offscreen_texture_id); glBindTexture(GL_TEXTURE_2D, os_window->offscreen_texture_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, os_window->viewport_width, os_window->viewport_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, offscreen_framebuffer); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, os_window->offscreen_texture_id, 0); /* if (glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) fatal("Offscreen framebuffer not complete"); */ bind_program(CELL_BG_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); glEnable(GL_BLEND); BLEND_PREMULT; if (screen->grman->num_of_negative_refs) draw_graphics(GRAPHICS_PREMULT_PROGRAM, vao_idx, gvao_idx, screen->grman->render_data, 0, screen->grman->num_of_negative_refs); bind_program(CELL_SPECIAL_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); bind_program(CELL_FG_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); if (screen->grman->num_of_positive_refs) draw_graphics(GRAPHICS_PREMULT_PROGRAM, vao_idx, gvao_idx, screen->grman->render_data, screen->grman->num_of_negative_refs, screen->grman->num_of_positive_refs); glDisable(GL_BLEND); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); // Now render the framebuffer to the screen glEnable(GL_SCISSOR_TEST); bind_program(BLIT_PROGRAM); bind_vertex_array(blit_vertex_array); static bool blit_constants_set = false; if (!blit_constants_set) { glUniform1i(glGetUniformLocation(program_id(BLIT_PROGRAM), "image"), BLIT_UNIT); blit_constants_set = true; } glActiveTexture(GL_TEXTURE0 + BLIT_UNIT); glBindTexture(GL_TEXTURE_2D, os_window->offscreen_texture_id); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisable(GL_SCISSOR_TEST); } static inline void set_cell_uniforms(float current_inactive_text_alpha) { if (!cell_uniform_data.constants_set) { cell_uniform_data.gploc = glGetUniformLocation(program_id(GRAPHICS_PROGRAM), "inactive_text_alpha"); cell_uniform_data.gpploc = glGetUniformLocation(program_id(GRAPHICS_PREMULT_PROGRAM), "inactive_text_alpha"); cell_uniform_data.cploc = glGetUniformLocation(program_id(CELL_PROGRAM), "inactive_text_alpha"); cell_uniform_data.cfploc = glGetUniformLocation(program_id(CELL_FG_PROGRAM), "inactive_text_alpha"); #define S(prog, name, val, type) { bind_program(prog); glUniform##type(glGetUniformLocation(program_id(prog), #name), val); } S(GRAPHICS_PROGRAM, image, GRAPHICS_UNIT, 1i); S(GRAPHICS_PREMULT_PROGRAM, image, GRAPHICS_UNIT, 1i); S(CELL_PROGRAM, sprites, SPRITE_MAP_UNIT, 1i); S(CELL_FG_PROGRAM, sprites, SPRITE_MAP_UNIT, 1i); S(CELL_PROGRAM, dim_opacity, OPT(dim_opacity), 1f); S(CELL_FG_PROGRAM, dim_opacity, OPT(dim_opacity), 1f); #undef S cell_uniform_data.constants_set = true; } if (current_inactive_text_alpha != cell_uniform_data.prev_inactive_text_alpha) { cell_uniform_data.prev_inactive_text_alpha = current_inactive_text_alpha; #define S(prog, loc) { bind_program(prog); glUniform1f(cell_uniform_data.loc, current_inactive_text_alpha); } S(CELL_PROGRAM, cploc); S(CELL_FG_PROGRAM, cfploc); S(GRAPHICS_PROGRAM, gploc); S(GRAPHICS_PREMULT_PROGRAM, gpploc); #undef S } } void blank_canvas(float background_opacity, color_type color) { #define C(shift) (((GLfloat)((color >> shift) & 0xFF)) / 255.0f) glClearColor(C(16), C(8), C(0), background_opacity); #undef C glClear(GL_COLOR_BUFFER_BIT); } bool send_cell_data_to_gpu(ssize_t vao_idx, ssize_t gvao_idx, GLfloat xstart, GLfloat ystart, GLfloat dx, GLfloat dy, Screen *screen, OSWindow *os_window) { bool changed = false; if (os_window->fonts_data) { if (cell_prepare_to_render(vao_idx, gvao_idx, screen, xstart, ystart, dx, dy, os_window->fonts_data)) changed = true; } return changed; } void draw_cells(ssize_t vao_idx, ssize_t gvao_idx, GLfloat xstart, GLfloat ystart, GLfloat dx, GLfloat dy, Screen *screen, OSWindow *os_window, bool is_active_window, bool can_be_focused) { CELL_BUFFERS; bool inverted = screen_invert_colors(screen); cell_update_uniform_block(vao_idx, screen, uniform_buffer, xstart, ystart, dx, dy, &screen->cursor_render_info, inverted, os_window); bind_vao_uniform_buffer(vao_idx, uniform_buffer, cell_program_layouts[CELL_PROGRAM].render_data.index); bind_vertex_array(vao_idx); float current_inactive_text_alpha = (!can_be_focused || screen->cursor_render_info.is_focused) && is_active_window ? 1.0f : (float)OPT(inactive_text_alpha); set_cell_uniforms(current_inactive_text_alpha); GLfloat w = (GLfloat)screen->columns * dx, h = (GLfloat)screen->lines * dy; // The scissor limits below are calculated to ensure that they do not // overlap with the pixels outside the draw area, // for a test case (scissor is also used to blit framebuffer in draw_cells_interleaved_premult) run: // kitty -o background=cyan -o background_opacity=0.7 -o window_margin_width=40 sh -c "kitty +kitten icat logo/kitty.png; read" #define SCALE(w, x) ((GLfloat)(os_window->viewport_##w) * (GLfloat)(x)) glScissor( (GLint)(ceilf(SCALE(width, (xstart + 1.0f) / 2.0f))), // x (GLint)(ceilf(SCALE(height, ((ystart - h) + 1.0f) / 2.0f))), // y (GLsizei)(floorf(SCALE(width, w / 2.0f))), // width (GLsizei)(floorf(SCALE(height, h / 2.0f))) // height ); #undef SCALE if (os_window->is_semi_transparent) { if (screen->grman->count) draw_cells_interleaved_premult(vao_idx, gvao_idx, screen, os_window); else draw_cells_simple(vao_idx, gvao_idx, screen); } else { if (screen->grman->num_of_negative_refs) draw_cells_interleaved(vao_idx, gvao_idx, screen); else draw_cells_simple(vao_idx, gvao_idx, screen); } } // }}} // Borders {{{ enum BorderUniforms { BORDER_viewport, BORDER_background_opacity, BORDER_default_bg, BORDER_active_border_color, BORDER_inactive_border_color, BORDER_bell_border_color, NUM_BORDER_UNIFORMS }; static GLint border_uniform_locations[NUM_BORDER_UNIFORMS] = {0}; static void init_borders_program(void) { Program *p = program_ptr(BORDERS_PROGRAM); int left = NUM_BORDER_UNIFORMS; for (int i = 0; i < p->num_of_uniforms; i++, left--) { #define SET_LOC(which) (strcmp(p->uniforms[i].name, #which) == 0) border_uniform_locations[BORDER_##which] = p->uniforms[i].location if SET_LOC(viewport); else if SET_LOC(background_opacity); else if SET_LOC(default_bg); else if SET_LOC(active_border_color); else if SET_LOC(inactive_border_color); else if SET_LOC(bell_border_color); else { fatal("Unknown uniform in borders program: %s", p->uniforms[i].name); return; } } if (left) { fatal("Left over uniforms in borders program"); return; } #undef SET_LOC } ssize_t create_border_vao(void) { ssize_t vao_idx = create_vao(); add_buffer_to_vao(vao_idx, GL_ARRAY_BUFFER); add_attribute_to_vao(BORDERS_PROGRAM, vao_idx, "rect", /*size=*/4, /*dtype=*/GL_UNSIGNED_INT, /*stride=*/sizeof(GLuint)*5, /*offset=*/0, /*divisor=*/1); add_attribute_to_vao(BORDERS_PROGRAM, vao_idx, "rect_color", /*size=*/1, /*dtype=*/GL_UNSIGNED_INT, /*stride=*/sizeof(GLuint)*5, /*offset=*/(void*)(sizeof(GLuint)*4), /*divisor=*/1); return vao_idx; } void draw_borders(ssize_t vao_idx, unsigned int num_border_rects, BorderRect *rect_buf, bool rect_data_is_dirty, uint32_t viewport_width, uint32_t viewport_height, color_type active_window_bg, unsigned int num_visible_windows, bool all_windows_have_same_bg, OSWindow *w) { if (num_border_rects) { if (rect_data_is_dirty) { size_t sz = sizeof(GLuint) * 5 * num_border_rects; void *borders_buf_address = alloc_and_map_vao_buffer(vao_idx, sz, 0, GL_STATIC_DRAW, GL_WRITE_ONLY); if (borders_buf_address) memcpy(borders_buf_address, rect_buf, sz); unmap_vao_buffer(vao_idx, 0); } bind_program(BORDERS_PROGRAM); #define CV3(x) (((float)((x >> 16) & 0xff))/255.f), (((float)((x >> 8) & 0xff))/255.f), (((float)(x & 0xff))/255.f) glUniform1f(border_uniform_locations[BORDER_background_opacity], w->is_semi_transparent ? w->background_opacity : 1.0f); glUniform3f(border_uniform_locations[BORDER_active_border_color], CV3(OPT(active_border_color))); glUniform3f(border_uniform_locations[BORDER_inactive_border_color], CV3(OPT(inactive_border_color))); glUniform3f(border_uniform_locations[BORDER_bell_border_color], CV3(OPT(bell_border_color))); glUniform2ui(border_uniform_locations[BORDER_viewport], viewport_width, viewport_height); color_type default_bg = (num_visible_windows > 1 && !all_windows_have_same_bg) ? OPT(background) : active_window_bg; glUniform3f(border_uniform_locations[BORDER_default_bg], CV3(default_bg)); #undef CV3 bind_vertex_array(vao_idx); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, num_border_rects); unbind_vertex_array(); unbind_program(); } } // }}} // Python API {{{ static PyObject* compile_program(PyObject UNUSED *self, PyObject *args) { const char *vertex_shader, *fragment_shader; int which; GLuint vertex_shader_id = 0, fragment_shader_id = 0; if (!PyArg_ParseTuple(args, "iss", &which, &vertex_shader, &fragment_shader)) return NULL; if (which < 0 || which >= NUM_PROGRAMS) { PyErr_Format(PyExc_ValueError, "Unknown program: %d", which); return NULL; } Program *program = program_ptr(which); if (program->id != 0) { PyErr_SetString(PyExc_ValueError, "program already compiled"); return NULL; } program->id = glCreateProgram(); vertex_shader_id = compile_shader(GL_VERTEX_SHADER, vertex_shader); fragment_shader_id = compile_shader(GL_FRAGMENT_SHADER, fragment_shader); glAttachShader(program->id, vertex_shader_id); glAttachShader(program->id, fragment_shader_id); glLinkProgram(program->id); GLint ret = GL_FALSE; glGetProgramiv(program->id, GL_LINK_STATUS, &ret); if (ret != GL_TRUE) { GLsizei len; static char glbuf[4096]; glGetProgramInfoLog(program->id, sizeof(glbuf), &len, glbuf); log_error("Failed to compile GLSL shader!\n%s", glbuf); PyErr_SetString(PyExc_ValueError, "Failed to compile shader"); goto end; } init_uniforms(which); end: if (vertex_shader_id != 0) glDeleteShader(vertex_shader_id); if (fragment_shader_id != 0) glDeleteShader(fragment_shader_id); if (PyErr_Occurred()) { glDeleteProgram(program->id); program->id = 0; return NULL;} return Py_BuildValue("I", program->id); Py_RETURN_NONE; } #define PYWRAP0(name) static PyObject* py##name(PYNOARG) #define PYWRAP1(name) static PyObject* py##name(PyObject UNUSED *self, PyObject *args) #define PA(fmt, ...) if(!PyArg_ParseTuple(args, fmt, __VA_ARGS__)) return NULL; #define ONE_INT(name) PYWRAP1(name) { name(PyLong_AsSsize_t(args)); Py_RETURN_NONE; } #define TWO_INT(name) PYWRAP1(name) { int a, b; PA("ii", &a, &b); name(a, b); Py_RETURN_NONE; } #define NO_ARG(name) PYWRAP0(name) { name(); Py_RETURN_NONE; } #define NO_ARG_INT(name) PYWRAP0(name) { return PyLong_FromSsize_t(name()); } ONE_INT(bind_program) NO_ARG(unbind_program) PYWRAP0(create_vao) { int ans = create_vao(); if (ans < 0) return NULL; return Py_BuildValue("i", ans); } ONE_INT(bind_vertex_array) NO_ARG(unbind_vertex_array) TWO_INT(unmap_vao_buffer) NO_ARG(init_borders_program) NO_ARG(init_cell_program) static PyObject* sprite_map_set_limits(PyObject UNUSED *self, PyObject *args) { unsigned int w, h; if(!PyArg_ParseTuple(args, "II", &w, &h)) return NULL; sprite_tracker_set_limits(w, h); max_texture_size = w; max_array_texture_layers = h; Py_RETURN_NONE; } #define M(name, arg_type) {#name, (PyCFunction)name, arg_type, NULL} #define MW(name, arg_type) {#name, (PyCFunction)py##name, arg_type, NULL} static PyMethodDef module_methods[] = { M(compile_program, METH_VARARGS), M(sprite_map_set_limits, METH_VARARGS), MW(create_vao, METH_NOARGS), MW(bind_vertex_array, METH_O), MW(unbind_vertex_array, METH_NOARGS), MW(unmap_vao_buffer, METH_VARARGS), MW(bind_program, METH_O), MW(unbind_program, METH_NOARGS), MW(init_borders_program, METH_NOARGS), MW(init_cell_program, METH_NOARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; bool init_shaders(PyObject *module) { #define C(x) if (PyModule_AddIntConstant(module, #x, x) != 0) { PyErr_NoMemory(); return false; } C(CELL_PROGRAM); C(CELL_BG_PROGRAM); C(CELL_SPECIAL_PROGRAM); C(CELL_FG_PROGRAM); C(BORDERS_PROGRAM); C(GRAPHICS_PROGRAM); C(GRAPHICS_PREMULT_PROGRAM); C(GRAPHICS_ALPHA_MASK_PROGRAM); C(BLIT_PROGRAM); C(GLSL_VERSION); C(GL_VERSION); C(GL_VENDOR); C(GL_SHADING_LANGUAGE_VERSION); C(GL_RENDERER); C(GL_TRIANGLE_FAN); C(GL_TRIANGLE_STRIP); C(GL_TRIANGLES); C(GL_LINE_LOOP); C(GL_COLOR_BUFFER_BIT); C(GL_VERTEX_SHADER); C(GL_FRAGMENT_SHADER); C(GL_TRUE); C(GL_FALSE); C(GL_COMPILE_STATUS); C(GL_LINK_STATUS); C(GL_TEXTURE0); C(GL_TEXTURE1); C(GL_TEXTURE2); C(GL_TEXTURE3); C(GL_TEXTURE4); C(GL_TEXTURE5); C(GL_TEXTURE6); C(GL_TEXTURE7); C(GL_TEXTURE8); C(GL_MAX_ARRAY_TEXTURE_LAYERS); C(GL_TEXTURE_BINDING_BUFFER); C(GL_MAX_TEXTURE_BUFFER_SIZE); C(GL_MAX_TEXTURE_SIZE); C(GL_TEXTURE_2D_ARRAY); C(GL_LINEAR); C(GL_CLAMP_TO_EDGE); C(GL_NEAREST); C(GL_TEXTURE_MIN_FILTER); C(GL_TEXTURE_MAG_FILTER); C(GL_TEXTURE_WRAP_S); C(GL_TEXTURE_WRAP_T); C(GL_UNPACK_ALIGNMENT); C(GL_R8); C(GL_RED); C(GL_UNSIGNED_BYTE); C(GL_UNSIGNED_SHORT); C(GL_R32UI); C(GL_RGB32UI); C(GL_RGBA); C(GL_TEXTURE_BUFFER); C(GL_STATIC_DRAW); C(GL_STREAM_DRAW); C(GL_DYNAMIC_DRAW); C(GL_SRC_ALPHA); C(GL_ONE_MINUS_SRC_ALPHA); C(GL_WRITE_ONLY); C(GL_READ_ONLY); C(GL_READ_WRITE); C(GL_BLEND); C(GL_FLOAT); C(GL_UNSIGNED_INT); C(GL_ARRAY_BUFFER); C(GL_UNIFORM_BUFFER); #undef C if (PyModule_AddFunctions(module, module_methods) != 0) return false; return true; } // }}} kitty-0.15.0/kitty/shell.py000066400000000000000000000141741356737523400156140ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal import os import readline import shlex import sys import traceback from functools import lru_cache from contextlib import suppress from .cli import ( emph, green, italic, parse_option_spec, print_help_for_seq, title ) from .cmds import cmap, display_subcommand_help, parse_subcommand_cli from .constants import cache_dir, is_macos, version all_commands = tuple(sorted(cmap)) match_commands = tuple(sorted(all_commands + ('exit', 'help', 'quit'))) def init_readline(readline): try: readline.read_init_file() except EnvironmentError: if not is_macos: raise if 'libedit' in readline.__doc__: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind('tab: complete') def cmd_names_matching(prefix): for cmd in match_commands: if not prefix or cmd.startswith(prefix): yield cmd + ' ' @lru_cache() def options_for_cmd(cmd): alias_map = {} try: func = cmap[cmd] except KeyError: return (), alias_map if not func.options_spec: return (), alias_map seq, disabled = parse_option_spec(func.options_spec) ans = [] for opt in seq: if isinstance(opt, str): continue for alias in opt['aliases']: ans.append(alias) alias_map[alias] = opt return tuple(sorted(ans)), alias_map def options_matching(prefix, aliases, alias_map): for alias in aliases: if (not prefix or alias.startswith(prefix)) and alias.startswith('--'): yield alias + ' ' class Completer: def __init__(self): self.matches = [] ddir = cache_dir() with suppress(FileExistsError): os.makedirs(ddir) self.history_path = os.path.join(ddir, 'shell.history') def complete(self, text, state): if state == 0: line = readline.get_line_buffer() cmdline = shlex.split(line) if len(cmdline) < 2 and not line.endswith(' '): self.matches = list(cmd_names_matching(text)) else: self.matches = list(options_matching(text, *options_for_cmd(cmdline[0]))) if state < len(self.matches): return self.matches[state] def __enter__(self): with suppress(Exception): readline.read_history_file(self.history_path) readline.set_completer(self.complete) delims = readline.get_completer_delims() readline.set_completer_delims(delims.replace('-', '')) return self def __exit__(self, *a): readline.write_history_file(self.history_path) def print_err(*a, **kw): kw['file'] = sys.stderr print(*a, **kw) def print_help(which=None): if which is None: print('Control kitty by sending it commands.') print() print(title('Commands') + ':') for cmd in all_commands: c = cmap[cmd] print(' ', green(c.name)) print(' ', c.short_desc) print(' ', green('exit')) print(' ', 'Exit this shell') print('\nUse help {} for help on individual commands'.format(italic('command'))) else: try: func = cmap[which] except KeyError: if which == 'exit': print('Exit this shell') elif which == 'help': print('Show help') else: print('Unknown command: {}'.format(emph(which))) return display_subcommand_help(func) def run_cmd(global_opts, cmd, func, opts, items): from .remote_control import do_io payload = func(global_opts, opts, items) send = { 'cmd': cmd, 'version': version, 'no_response': False, } if payload is not None: send['payload'] = payload response = do_io(global_opts.to, send, func.no_response) if not response.get('ok'): if response.get('tb'): print_err(response['tb']) print_err(response['error']) return if 'data' in response: print(response['data']) def real_main(global_opts): init_readline(readline) print_help_for_seq.allow_pager = False print('Welcome to the kitty shell!') print('Use {} for assistance or {} to quit'.format(green('help'), green('exit'))) while True: try: try: cmdline = input('🱠') except UnicodeEncodeError: cmdline = input('kitty> ') except EOFError: break except KeyboardInterrupt: print() continue if not cmdline: continue cmdline = shlex.split(cmdline) cmd = cmdline[0].lower() try: func = cmap[cmd] except KeyError: if cmd in ('exit', 'quit'): break if cmd == 'help': print_help(cmdline[1] if len(cmdline) > 1 else None) continue print_err('"{}" is an unknown command. Use "help" to see a list of commands.'.format(emph(cmd))) continue try: opts, items = parse_subcommand_cli(func, cmdline) except SystemExit as e: if e.code != 0: print_err(e) print_err('Use "{}" to see how to use this command.'.format(emph('help ' + cmd))) continue except Exception: print_err('Unhandled error:') traceback.print_exc() continue else: try: run_cmd(global_opts, cmd, func, opts, items) except SystemExit as e: print_err(e) continue except KeyboardInterrupt: print() continue except Exception: print_err('Unhandled error:') traceback.print_exc() continue def main(global_opts): try: with Completer(): real_main(global_opts) except Exception: traceback.print_exc() input('Press enter to quit...') raise SystemExit(1) kitty-0.15.0/kitty/state.c000066400000000000000000001000531356737523400154070ustar00rootroot00000000000000/* * state.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include "state.h" #include GlobalState global_state = {{0}}; #define REMOVER(array, qid, count, destroy, capacity) { \ for (size_t i = 0; i < count; i++) { \ if (array[i].id == qid) { \ destroy(array + i); \ zero_at_i(array, i); \ remove_i_from_array(array, i, count); \ break; \ } \ }} #define WITH_OS_WINDOW(os_window_id) \ for (size_t o = 0; o < global_state.num_os_windows; o++) { \ OSWindow *os_window = global_state.os_windows + o; \ if (os_window->id == os_window_id) { #define END_WITH_OS_WINDOW break; }} #define WITH_TAB(os_window_id, tab_id) \ for (size_t o = 0; o < global_state.num_os_windows; o++) { \ OSWindow *osw = global_state.os_windows + o; \ if (osw->id == os_window_id) { \ for (size_t t = 0; t < osw->num_tabs; t++) { \ if (osw->tabs[t].id == tab_id) { \ Tab *tab = osw->tabs + t; #define END_WITH_TAB break; }}}} #define WITH_OS_WINDOW_REFS \ id_type cb_window_id = 0, focused_window_id = 0; \ if (global_state.callback_os_window) cb_window_id = global_state.callback_os_window->id; \ #define END_WITH_OS_WINDOW_REFS \ if (cb_window_id || focused_window_id) { \ global_state.callback_os_window = NULL; \ for (size_t wn = 0; wn < global_state.num_os_windows; wn++) { \ OSWindow *wp = global_state.os_windows + wn; \ if (wp->id == cb_window_id && cb_window_id) global_state.callback_os_window = wp; \ }} OSWindow* current_os_window() { if (global_state.callback_os_window) return global_state.callback_os_window; for (size_t i = 0; i < global_state.num_os_windows; i++) { if (global_state.os_windows[i].is_focused) return global_state.os_windows + i; } return global_state.os_windows; } OSWindow* os_window_for_kitty_window(id_type kitty_window_id) { for (size_t i = 0; i < global_state.num_os_windows; i++) { OSWindow *w = global_state.os_windows + i; for (size_t t = 0; t < w->num_tabs; t++) { Tab *tab = w->tabs + t; for (size_t c = 0; c < tab->num_windows; c++) { if (tab->windows[c].id == kitty_window_id) return w; } } } return NULL; } OSWindow* add_os_window() { WITH_OS_WINDOW_REFS ensure_space_for(&global_state, os_windows, OSWindow, global_state.num_os_windows + 1, capacity, 1, true); OSWindow *ans = global_state.os_windows + global_state.num_os_windows++; zero_at_ptr(ans); ans->id = ++global_state.os_window_id_counter; ans->tab_bar_render_data.vao_idx = create_cell_vao(); ans->gvao_idx = create_graphics_vao(); ans->background_opacity = OPT(background_opacity); ans->font_sz_in_pts = global_state.font_sz_in_pts; END_WITH_OS_WINDOW_REFS return ans; } static inline id_type add_tab(id_type os_window_id) { WITH_OS_WINDOW(os_window_id) make_os_window_context_current(os_window); ensure_space_for(os_window, tabs, Tab, os_window->num_tabs + 1, capacity, 1, true); zero_at_i(os_window->tabs, os_window->num_tabs); os_window->tabs[os_window->num_tabs].id = ++global_state.tab_id_counter; os_window->tabs[os_window->num_tabs].border_rects.vao_idx = create_border_vao(); return os_window->tabs[os_window->num_tabs++].id; END_WITH_OS_WINDOW return 0; } static inline void create_gpu_resources_for_window(Window *w) { w->render_data.vao_idx = create_cell_vao(); w->render_data.gvao_idx = create_graphics_vao(); } static inline void release_gpu_resources_for_window(Window *w) { remove_vao(w->render_data.vao_idx); remove_vao(w->render_data.gvao_idx); w->render_data.vao_idx = 0; w->render_data.gvao_idx = 0; } static inline id_type add_window(id_type os_window_id, id_type tab_id, PyObject *title) { WITH_TAB(os_window_id, tab_id); ensure_space_for(tab, windows, Window, tab->num_windows + 1, capacity, 1, true); make_os_window_context_current(osw); zero_at_i(tab->windows, tab->num_windows); tab->windows[tab->num_windows].id = ++global_state.window_id_counter; tab->windows[tab->num_windows].visible = true; tab->windows[tab->num_windows].title = title; create_gpu_resources_for_window(&tab->windows[tab->num_windows]); Py_INCREF(tab->windows[tab->num_windows].title); return tab->windows[tab->num_windows++].id; END_WITH_TAB; return 0; } static inline void update_window_title(id_type os_window_id, id_type tab_id, id_type window_id, PyObject *title) { WITH_TAB(os_window_id, tab_id); for (size_t i = 0; i < tab->num_windows; i++) { if (tab->windows[i].id == window_id) { Py_CLEAR(tab->windows[i].title); tab->windows[i].title = title; Py_INCREF(tab->windows[i].title); break; } } END_WITH_TAB; } static inline void destroy_window(Window *w) { Py_CLEAR(w->render_data.screen); Py_CLEAR(w->title); release_gpu_resources_for_window(w); } static inline void remove_window_inner(Tab *tab, id_type id) { REMOVER(tab->windows, id, tab->num_windows, destroy_window, tab->capacity); } static inline void remove_window(id_type os_window_id, id_type tab_id, id_type id) { WITH_TAB(os_window_id, tab_id); make_os_window_context_current(osw); remove_window_inner(tab, id); END_WITH_TAB; } typedef struct { unsigned int num_windows, capacity; Window *windows; } DetachedWindows; static DetachedWindows detached_windows = {0}; static void add_detached_window(Window *w) { ensure_space_for(&detached_windows, windows, Window, detached_windows.num_windows + 1, capacity, 8, true); memcpy(detached_windows.windows + detached_windows.num_windows++, w, sizeof(Window)); } static inline void detach_window(id_type os_window_id, id_type tab_id, id_type id) { WITH_TAB(os_window_id, tab_id); for (size_t i = 0; i < tab->num_windows; i++) { if (tab->windows[i].id == id) { make_os_window_context_current(osw); release_gpu_resources_for_window(&tab->windows[i]); add_detached_window(tab->windows + i); zero_at_i(tab->windows, i); remove_i_from_array(tab->windows, i, tab->num_windows); break; } } END_WITH_TAB; } static inline void resize_screen(OSWindow *os_window, Screen *screen, bool has_graphics) { if (screen) { screen->cell_size.width = os_window->fonts_data->cell_width; screen->cell_size.height = os_window->fonts_data->cell_height; screen_dirty_sprite_positions(screen); if (has_graphics) screen_rescale_images(screen); } } static inline void attach_window(id_type os_window_id, id_type tab_id, id_type id) { WITH_TAB(os_window_id, tab_id); for (size_t i = 0; i < detached_windows.num_windows; i++) { if (detached_windows.windows[i].id == id) { ensure_space_for(tab, windows, Window, tab->num_windows + 1, capacity, 1, true); Window *w = tab->windows + tab->num_windows++; memcpy(w, detached_windows.windows + i, sizeof(Window)); zero_at_i(detached_windows.windows, i); remove_i_from_array(detached_windows.windows, i, detached_windows.num_windows); make_os_window_context_current(osw); create_gpu_resources_for_window(w); if ( w->render_data.screen->cell_size.width != osw->fonts_data->cell_width || w->render_data.screen->cell_size.height != osw->fonts_data->cell_height ) resize_screen(osw, w->render_data.screen, true); else screen_dirty_sprite_positions(w->render_data.screen); break; } } END_WITH_TAB; } static inline void destroy_tab(Tab *tab) { for (size_t i = tab->num_windows; i > 0; i--) remove_window_inner(tab, tab->windows[i - 1].id); remove_vao(tab->border_rects.vao_idx); free(tab->border_rects.rect_buf); tab->border_rects.rect_buf = NULL; free(tab->windows); tab->windows = NULL; } static inline void remove_tab_inner(OSWindow *os_window, id_type id) { make_os_window_context_current(os_window); REMOVER(os_window->tabs, id, os_window->num_tabs, destroy_tab, os_window->capacity); } static inline void remove_tab(id_type os_window_id, id_type id) { WITH_OS_WINDOW(os_window_id) remove_tab_inner(os_window, id); END_WITH_OS_WINDOW } static inline void destroy_os_window_item(OSWindow *w) { for (size_t t = w->num_tabs; t > 0; t--) { Tab *tab = w->tabs + t - 1; remove_tab_inner(w, tab->id); } Py_CLEAR(w->window_title); Py_CLEAR(w->tab_bar_render_data.screen); if (w->offscreen_texture_id) free_texture(&w->offscreen_texture_id); remove_vao(w->tab_bar_render_data.vao_idx); remove_vao(w->gvao_idx); free(w->tabs); w->tabs = NULL; } bool remove_os_window(id_type os_window_id) { bool found = false; WITH_OS_WINDOW(os_window_id) found = true; make_os_window_context_current(os_window); END_WITH_OS_WINDOW if (found) { WITH_OS_WINDOW_REFS REMOVER(global_state.os_windows, os_window_id, global_state.num_os_windows, destroy_os_window_item, global_state.capacity); END_WITH_OS_WINDOW_REFS update_os_window_references(); } return found; } static inline void set_active_tab(id_type os_window_id, unsigned int idx) { WITH_OS_WINDOW(os_window_id) os_window->active_tab = idx; os_window->needs_render = true; END_WITH_OS_WINDOW } static inline void set_active_window(id_type os_window_id, id_type tab_id, unsigned int idx) { WITH_TAB(os_window_id, tab_id) tab->active_window = idx; osw->needs_render = true; END_WITH_TAB; } static inline void swap_tabs(id_type os_window_id, unsigned int a, unsigned int b) { WITH_OS_WINDOW(os_window_id) Tab t = os_window->tabs[b]; os_window->tabs[b] = os_window->tabs[a]; os_window->tabs[a] = t; END_WITH_OS_WINDOW } static inline void swap_windows(id_type os_window_id, id_type tab_id, unsigned int a, unsigned int b) { WITH_TAB(os_window_id, tab_id); Window w = tab->windows[b]; tab->windows[b] = tab->windows[a]; tab->windows[a] = w; END_WITH_TAB; } static void add_borders_rect(id_type os_window_id, id_type tab_id, uint32_t left, uint32_t top, uint32_t right, uint32_t bottom, uint32_t color) { WITH_TAB(os_window_id, tab_id) BorderRects *br = &tab->border_rects; br->is_dirty = true; if (!left && !top && !right && !bottom) { br->num_border_rects = 0; return; } ensure_space_for(br, rect_buf, BorderRect, br->num_border_rects + 1, capacity, 32, false); BorderRect *r = br->rect_buf + br->num_border_rects++; r->left = left; r->right = right; r->top = top; r->bottom = bottom; r->color = color; END_WITH_TAB } void os_window_regions(OSWindow *os_window, Region *central, Region *tab_bar) { if (!global_state.tab_bar_hidden && os_window->num_tabs >= OPT(tab_bar_min_tabs)) { switch(OPT(tab_bar_edge)) { case TOP_EDGE: central->left = 0; central->top = os_window->fonts_data->cell_height; central->right = os_window->viewport_width - 1; central->bottom = os_window->viewport_height - 1; tab_bar->left = central->left; tab_bar->right = central->right; tab_bar->top = 0; tab_bar->bottom = central->top - 1; break; default: central->left = 0; central->top = 0; central->right = os_window->viewport_width - 1; central->bottom = os_window->viewport_height - os_window->fonts_data->cell_height - 1; tab_bar->left = central->left; tab_bar->right = central->right; tab_bar->top = central->bottom + 1; tab_bar->bottom = os_window->viewport_height - 1; break; } } else { zero_at_ptr(tab_bar); central->left = 0; central->top = 0; central->right = os_window->viewport_width - 1; central->bottom = os_window->viewport_height - 1; } } // Python API {{{ #define PYWRAP0(name) static PyObject* py##name(PYNOARG) #define PYWRAP1(name) static PyObject* py##name(PyObject UNUSED *self, PyObject *args) #define PA(fmt, ...) if(!PyArg_ParseTuple(args, fmt, __VA_ARGS__)) return NULL; #define ONE_UINT(name) PYWRAP1(name) { name((unsigned int)PyLong_AsUnsignedLong(args)); Py_RETURN_NONE; } #define TWO_UINT(name) PYWRAP1(name) { unsigned int a, b; PA("II", &a, &b); name(a, b); Py_RETURN_NONE; } #define THREE_UINT(name) PYWRAP1(name) { unsigned int a, b, c; PA("III", &a, &b, &c); name(a, b, c); Py_RETURN_NONE; } #define TWO_ID(name) PYWRAP1(name) { id_type a, b; PA("KK", &a, &b); name(a, b); Py_RETURN_NONE; } #define THREE_ID(name) PYWRAP1(name) { id_type a, b, c; PA("KKK", &a, &b, &c); name(a, b, c); Py_RETURN_NONE; } #define THREE_ID_OBJ(name) PYWRAP1(name) { id_type a, b, c; PyObject *o; PA("KKKO", &a, &b, &c, &o); name(a, b, c, o); Py_RETURN_NONE; } #define KI(name) PYWRAP1(name) { id_type a; unsigned int b; PA("KI", &a, &b); name(a, b); Py_RETURN_NONE; } #define KII(name) PYWRAP1(name) { id_type a; unsigned int b, c; PA("KII", &a, &b, &c); name(a, b, c); Py_RETURN_NONE; } #define KKI(name) PYWRAP1(name) { id_type a, b; unsigned int c; PA("KKI", &a, &b, &c); name(a, b, c); Py_RETURN_NONE; } #define KKII(name) PYWRAP1(name) { id_type a, b; unsigned int c, d; PA("KKII", &a, &b, &c, &d); name(a, b, c, d); Py_RETURN_NONE; } #define KK5I(name) PYWRAP1(name) { id_type a, b; unsigned int c, d, e, f, g; PA("KKIIIII", &a, &b, &c, &d, &e, &f, &g); name(a, b, c, d, e, f, g); Py_RETURN_NONE; } #define BOOL_SET(name) PYWRAP1(set_##name) { global_state.name = PyObject_IsTrue(args); Py_RETURN_NONE; } static color_type default_color = 0; static inline color_type color_as_int(PyObject *color) { if (color == Py_None && default_color) return default_color; if (!PyTuple_Check(color)) { PyErr_SetString(PyExc_TypeError, "Not a color tuple"); return 0; } #define I(n, s) ((PyLong_AsUnsignedLong(PyTuple_GET_ITEM(color, n)) & 0xff) << s) return (I(0, 16) | I(1, 8) | I(2, 0)) & 0xffffff; #undef I } static inline monotonic_t parse_s_double_to_monotonic_t(PyObject *val) { return s_double_to_monotonic_t(PyFloat_AsDouble(val)); } static inline monotonic_t parse_ms_long_to_monotonic_t(PyObject *val) { return ms_to_monotonic_t(PyLong_AsUnsignedLong(val)); } static int kitty_mod = 0; static inline int resolve_mods(int mods) { if (mods & GLFW_MOD_KITTY) { mods = (mods & ~GLFW_MOD_KITTY) | kitty_mod; } return mods; } static int convert_mods(PyObject *obj) { return resolve_mods(PyLong_AsLong(obj)); } static WindowTitleIn window_title_in(PyObject *title_in) { const char *in = PyUnicode_AsUTF8(title_in); switch(in[0]) { case 'a': return ALL; case 'w': return WINDOW; case 'm': return MENUBAR; case 'n': return NONE; default: break; } return ALL; } static MouseShape pointer_shape(PyObject *shape_name) { const char *name = PyUnicode_AsUTF8(shape_name); switch(name[0]) { case 'a': return ARROW; case 'h': return HAND; case 'b': return BEAM; default: break; } return BEAM; } #define dict_iter(d) { \ PyObject *key, *value; Py_ssize_t pos = 0; \ while (PyDict_Next(d, &pos, &key, &value)) static inline void set_special_keys(PyObject *dict) { dict_iter(dict) { if (!PyTuple_Check(key)) { PyErr_SetString(PyExc_TypeError, "dict keys for special keys must be tuples"); return; } int mods = PyLong_AsLong(PyTuple_GET_ITEM(key, 0)); bool is_native = PyTuple_GET_ITEM(key, 1) == Py_True; int glfw_key = PyLong_AsLong(PyTuple_GET_ITEM(key, 2)); set_special_key_combo(glfw_key, mods, is_native); }} } static inline float PyFloat_AsFloat(PyObject *o) { return (float)PyFloat_AsDouble(o); } PYWRAP0(next_window_id) { return PyLong_FromUnsignedLongLong(global_state.window_id_counter + 1); } PYWRAP1(handle_for_window_id) { id_type os_window_id; PA("K", &os_window_id); WITH_OS_WINDOW(os_window_id) return PyLong_FromVoidPtr(os_window->handle); END_WITH_OS_WINDOW PyErr_SetString(PyExc_ValueError, "No such window"); return NULL; } PYWRAP1(set_options) { PyObject *ret, *opts; int is_wayland = 0, debug_gl = 0, debug_font_fallback = 0; PA("O|ppp", &opts, &is_wayland, &debug_gl, &debug_font_fallback); global_state.is_wayland = is_wayland ? true : false; #ifdef __APPLE__ global_state.has_render_frames = true; #endif if (global_state.is_wayland) global_state.has_render_frames = true; global_state.debug_gl = debug_gl ? true : false; global_state.debug_font_fallback = debug_font_fallback ? true : false; #define GA(name) ret = PyObject_GetAttrString(opts, #name); if (ret == NULL) return NULL; #define SS(name, dest, convert) { GA(name); dest = convert(ret); Py_DECREF(ret); if (PyErr_Occurred()) return NULL; } #define S(name, convert) SS(name, OPT(name), convert) SS(kitty_mod, kitty_mod, PyLong_AsLong); S(hide_window_decorations, PyObject_IsTrue); S(visual_bell_duration, parse_s_double_to_monotonic_t); S(enable_audio_bell, PyObject_IsTrue); S(focus_follows_mouse, PyObject_IsTrue); S(cursor_blink_interval, parse_s_double_to_monotonic_t); S(cursor_stop_blinking_after, parse_s_double_to_monotonic_t); S(background_opacity, PyFloat_AsFloat); S(dim_opacity, PyFloat_AsFloat); S(dynamic_background_opacity, PyObject_IsTrue); S(inactive_text_alpha, PyFloat_AsFloat); S(window_padding_width, PyFloat_AsFloat); S(scrollback_pager_history_size, PyLong_AsUnsignedLong); S(cursor_shape, PyLong_AsLong); S(url_style, PyLong_AsUnsignedLong); S(tab_bar_edge, PyLong_AsLong); S(mouse_hide_wait, parse_s_double_to_monotonic_t); S(wheel_scroll_multiplier, PyFloat_AsDouble); S(touch_scroll_multiplier, PyFloat_AsDouble); S(open_url_modifiers, convert_mods); S(rectangle_select_modifiers, convert_mods); S(terminal_select_modifiers, convert_mods); S(click_interval, parse_s_double_to_monotonic_t); S(resize_debounce_time, parse_s_double_to_monotonic_t); S(url_color, color_as_int); S(background, color_as_int); S(foreground, color_as_int); default_color = 0x00ff00; S(active_border_color, color_as_int); default_color = 0; S(inactive_border_color, color_as_int); S(bell_border_color, color_as_int); S(repaint_delay, parse_ms_long_to_monotonic_t); S(input_delay, parse_ms_long_to_monotonic_t); S(sync_to_monitor, PyObject_IsTrue); S(close_on_child_death, PyObject_IsTrue); S(window_alert_on_bell, PyObject_IsTrue); S(macos_option_as_alt, PyLong_AsUnsignedLong); S(macos_traditional_fullscreen, PyObject_IsTrue); S(macos_quit_when_last_window_closed, PyObject_IsTrue); S(macos_show_window_title_in, window_title_in); S(macos_window_resizable, PyObject_IsTrue); S(macos_hide_from_tasks, PyObject_IsTrue); S(macos_thicken_font, PyFloat_AsFloat); S(tab_bar_min_tabs, PyLong_AsUnsignedLong); S(disable_ligatures, PyLong_AsLong); S(resize_draw_strategy, PyLong_AsLong); S(pointer_shape_when_grabbed, pointer_shape); GA(tab_bar_style); global_state.tab_bar_hidden = PyUnicode_CompareWithASCIIString(ret, "hidden") == 0 ? true: false; Py_CLEAR(ret); if (PyErr_Occurred()) return NULL; PyObject *chars = PyObject_GetAttrString(opts, "select_by_word_characters"); if (chars == NULL) return NULL; for (size_t i = 0; i < MIN((size_t)PyUnicode_GET_LENGTH(chars), sizeof(OPT(select_by_word_characters))/sizeof(OPT(select_by_word_characters[0]))); i++) { OPT(select_by_word_characters)[i] = PyUnicode_READ(PyUnicode_KIND(chars), PyUnicode_DATA(chars), i); } OPT(select_by_word_characters_count) = PyUnicode_GET_LENGTH(chars); Py_DECREF(chars); GA(keymap); set_special_keys(ret); Py_DECREF(ret); if (PyErr_Occurred()) return NULL; GA(sequence_map); set_special_keys(ret); Py_DECREF(ret); if (PyErr_Occurred()) return NULL; #define read_adjust(name) { \ PyObject *al = PyObject_GetAttrString(opts, #name); \ if (PyFloat_Check(al)) { \ OPT(name##_frac) = (float)PyFloat_AsDouble(al); \ OPT(name##_px) = 0; \ } else { \ OPT(name##_frac) = 0; \ OPT(name##_px) = (int)PyLong_AsLong(al); \ } \ Py_DECREF(al); \ } read_adjust(adjust_line_height); read_adjust(adjust_column_width); #undef read_adjust #undef S #undef SS Py_RETURN_NONE; } BOOL_SET(in_sequence_mode) PYWRAP1(set_tab_bar_render_data) { ScreenRenderData d = {0}; id_type os_window_id; PA("KffffO", &os_window_id, &d.xstart, &d.ystart, &d.dx, &d.dy, &d.screen); WITH_OS_WINDOW(os_window_id) Py_CLEAR(os_window->tab_bar_render_data.screen); d.vao_idx = os_window->tab_bar_render_data.vao_idx; os_window->tab_bar_render_data = d; Py_INCREF(os_window->tab_bar_render_data.screen); END_WITH_OS_WINDOW Py_RETURN_NONE; } static PyTypeObject RegionType; static PyStructSequence_Field region_fields[] = { {"left", ""}, {"top", ""}, {"right", ""}, {"bottom", ""}, {"width", ""}, {"height", ""}, {NULL, NULL} }; static PyStructSequence_Desc region_desc = {"Region", NULL, region_fields, 6}; static inline PyObject* wrap_region(Region *r) { PyObject *ans = PyStructSequence_New(&RegionType); if (ans) { PyStructSequence_SET_ITEM(ans, 0, PyLong_FromUnsignedLong(r->left)); PyStructSequence_SET_ITEM(ans, 1, PyLong_FromUnsignedLong(r->top)); PyStructSequence_SET_ITEM(ans, 2, PyLong_FromUnsignedLong(r->right)); PyStructSequence_SET_ITEM(ans, 3, PyLong_FromUnsignedLong(r->bottom)); PyStructSequence_SET_ITEM(ans, 4, PyLong_FromUnsignedLong(r->right - r->left + 1)); PyStructSequence_SET_ITEM(ans, 5, PyLong_FromUnsignedLong(r->bottom - r->top + 1)); } return ans; } PYWRAP1(viewport_for_window) { id_type os_window_id; int vw = 100, vh = 100; unsigned int cell_width = 1, cell_height = 1; PA("K", &os_window_id); Region central = {0}, tab_bar = {0}; WITH_OS_WINDOW(os_window_id) os_window_regions(os_window, ¢ral, &tab_bar); vw = os_window->viewport_width; vh = os_window->viewport_height; cell_width = os_window->fonts_data->cell_width; cell_height = os_window->fonts_data->cell_height; goto end; END_WITH_OS_WINDOW end: return Py_BuildValue("NNiiII", wrap_region(¢ral), wrap_region(&tab_bar), vw, vh, cell_width, cell_height); } PYWRAP1(cell_size_for_window) { id_type os_window_id; unsigned int cell_width = 0, cell_height = 0; PA("K", &os_window_id); WITH_OS_WINDOW(os_window_id) cell_width = os_window->fonts_data->cell_width; cell_height = os_window->fonts_data->cell_height; goto end; END_WITH_OS_WINDOW end: return Py_BuildValue("II", cell_width, cell_height); } PYWRAP1(mark_os_window_for_close) { id_type os_window_id; int yes = 1; PA("K|p", &os_window_id, &yes); WITH_OS_WINDOW(os_window_id) mark_os_window_for_close(os_window, yes ? true : false); Py_RETURN_TRUE; END_WITH_OS_WINDOW Py_RETURN_FALSE; } PYWRAP1(focus_os_window) { id_type os_window_id; int also_raise = 1; PA("K|p", &os_window_id, &also_raise); WITH_OS_WINDOW(os_window_id) if (!os_window->is_focused) focus_os_window(os_window, also_raise); Py_RETURN_TRUE; END_WITH_OS_WINDOW Py_RETURN_FALSE; } PYWRAP1(set_titlebar_color) { id_type os_window_id; unsigned int color; PA("KI", &os_window_id, &color); WITH_OS_WINDOW(os_window_id) set_titlebar_color(os_window, color); Py_RETURN_TRUE; END_WITH_OS_WINDOW Py_RETURN_FALSE; } PYWRAP1(mark_tab_bar_dirty) { id_type os_window_id = PyLong_AsUnsignedLongLong(args); WITH_OS_WINDOW(os_window_id) os_window->tab_bar_data_updated = false; END_WITH_OS_WINDOW Py_RETURN_NONE; } PYWRAP1(change_background_opacity) { id_type os_window_id; float opacity; PA("Kf", &os_window_id, &opacity); WITH_OS_WINDOW(os_window_id) os_window->background_opacity = opacity; os_window->is_damaged = true; Py_RETURN_TRUE; END_WITH_OS_WINDOW Py_RETURN_FALSE; } PYWRAP1(background_opacity_of) { id_type os_window_id = PyLong_AsUnsignedLongLong(args); WITH_OS_WINDOW(os_window_id) return PyFloat_FromDouble((double)os_window->background_opacity); END_WITH_OS_WINDOW Py_RETURN_NONE; } static inline bool fix_window_idx(Tab *tab, id_type window_id, unsigned int *window_idx) { for (id_type fix = 0; fix < tab->num_windows; fix++) { if (tab->windows[fix].id == window_id) { *window_idx = fix; return true; } } return false; } PYWRAP1(set_window_render_data) { #define A(name) &(d.name) #define B(name) &(g.name) id_type os_window_id, tab_id, window_id; unsigned int window_idx; ScreenRenderData d = {0}; WindowGeometry g = {0}; PA("KKKIffffOIIII", &os_window_id, &tab_id, &window_id, &window_idx, A(xstart), A(ystart), A(dx), A(dy), A(screen), B(left), B(top), B(right), B(bottom)); WITH_TAB(os_window_id, tab_id); if (tab->windows[window_idx].id != window_id) { if (!fix_window_idx(tab, window_id, &window_idx)) Py_RETURN_NONE; } Py_CLEAR(tab->windows[window_idx].render_data.screen); d.vao_idx = tab->windows[window_idx].render_data.vao_idx; d.gvao_idx = tab->windows[window_idx].render_data.gvao_idx; tab->windows[window_idx].render_data = d; tab->windows[window_idx].geometry = g; Py_INCREF(tab->windows[window_idx].render_data.screen); END_WITH_TAB; Py_RETURN_NONE; #undef A #undef B } PYWRAP1(update_window_visibility) { id_type os_window_id, tab_id, window_id; unsigned int window_idx; int visible; PA("KKKIp", &os_window_id, &tab_id, &window_id, &window_idx, &visible); WITH_TAB(os_window_id, tab_id); if (tab->windows[window_idx].id != window_id) { if (!fix_window_idx(tab, window_id, &window_idx)) Py_RETURN_NONE; } tab->windows[window_idx].visible = visible & 1; END_WITH_TAB; Py_RETURN_NONE; } static inline double dpi_for_os_window_id(id_type os_window_id) { double dpi = 0; if (os_window_id) { WITH_OS_WINDOW(os_window_id) dpi = (os_window->logical_dpi_x + os_window->logical_dpi_y) / 2.; END_WITH_OS_WINDOW } if (dpi == 0) { dpi = (global_state.default_dpi.x + global_state.default_dpi.y) / 2.; } return dpi; } PYWRAP1(pt_to_px) { double pt, dpi = 0; id_type os_window_id = 0; PA("d|K", &pt, &os_window_id); dpi = dpi_for_os_window_id(os_window_id); return PyLong_FromLong((long)round((pt * (dpi / 72.0)))); } PYWRAP1(global_font_size) { double set_val = -1; PA("|d", &set_val); if (set_val > 0) global_state.font_sz_in_pts = set_val; return Py_BuildValue("d", global_state.font_sz_in_pts); } PYWRAP1(os_window_font_size) { id_type os_window_id; int force = 0; double new_sz = -1; PA("K|dp", &os_window_id, &new_sz, &force); WITH_OS_WINDOW(os_window_id) if (new_sz > 0 && (force || new_sz != os_window->font_sz_in_pts)) { os_window->font_sz_in_pts = new_sz; os_window->fonts_data = NULL; os_window->fonts_data = load_fonts_data(os_window->font_sz_in_pts, os_window->logical_dpi_x, os_window->logical_dpi_y); send_prerendered_sprites_for_window(os_window); resize_screen(os_window, os_window->tab_bar_render_data.screen, false); for (size_t ti = 0; ti < os_window->num_tabs; ti++) { Tab *tab = os_window->tabs + ti; for (size_t wi = 0; wi < tab->num_windows; wi++) { Window *w = tab->windows + wi; resize_screen(os_window, w->render_data.screen, true); } } } return Py_BuildValue("d", os_window->font_sz_in_pts); END_WITH_OS_WINDOW return Py_BuildValue("d", 0.0); } PYWRAP1(set_boss) { Py_CLEAR(global_state.boss); global_state.boss = args; Py_INCREF(global_state.boss); Py_RETURN_NONE; } PYWRAP1(patch_global_colors) { PyObject *spec; int configured; if (!PyArg_ParseTuple(args, "Op", &spec, &configured)) return NULL; #define P(name) { \ PyObject *val = PyDict_GetItemString(spec, #name); \ if (val) { \ OPT(name) = PyLong_AsLong(val); \ } \ } P(active_border_color); P(inactive_border_color); P(bell_border_color); if (configured) { P(background); P(url_color); } if (PyErr_Occurred()) return NULL; Py_RETURN_NONE; } PYWRAP0(destroy_global_data) { Py_CLEAR(global_state.boss); free(global_state.os_windows); global_state.os_windows = NULL; Py_RETURN_NONE; } THREE_ID_OBJ(update_window_title) THREE_ID(remove_window) THREE_ID(detach_window) THREE_ID(attach_window) PYWRAP1(resolve_key_mods) { int mods; PA("ii", &kitty_mod, &mods); return PyLong_FromLong(resolve_mods(mods)); } PYWRAP1(add_tab) { return PyLong_FromUnsignedLongLong(add_tab(PyLong_AsUnsignedLongLong(args))); } PYWRAP1(add_window) { PyObject *title; id_type a, b; PA("KKO", &a, &b, &title); return PyLong_FromUnsignedLongLong(add_window(a, b, title)); } PYWRAP0(current_os_window) { OSWindow *w = current_os_window(); if (!w) Py_RETURN_NONE; return PyLong_FromUnsignedLongLong(w->id); } TWO_ID(remove_tab) KI(set_active_tab) KKI(set_active_window) KII(swap_tabs) KKII(swap_windows) KK5I(add_borders_rect) #define M(name, arg_type) {#name, (PyCFunction)name, arg_type, NULL} #define MW(name, arg_type) {#name, (PyCFunction)py##name, arg_type, NULL} static PyMethodDef module_methods[] = { MW(current_os_window, METH_NOARGS), MW(next_window_id, METH_NOARGS), MW(set_options, METH_VARARGS), MW(set_in_sequence_mode, METH_O), MW(resolve_key_mods, METH_VARARGS), MW(handle_for_window_id, METH_VARARGS), MW(pt_to_px, METH_VARARGS), MW(add_tab, METH_O), MW(add_window, METH_VARARGS), MW(update_window_title, METH_VARARGS), MW(remove_tab, METH_VARARGS), MW(remove_window, METH_VARARGS), MW(detach_window, METH_VARARGS), MW(attach_window, METH_VARARGS), MW(set_active_tab, METH_VARARGS), MW(set_active_window, METH_VARARGS), MW(swap_tabs, METH_VARARGS), MW(swap_windows, METH_VARARGS), MW(add_borders_rect, METH_VARARGS), MW(set_tab_bar_render_data, METH_VARARGS), MW(set_window_render_data, METH_VARARGS), MW(viewport_for_window, METH_VARARGS), MW(cell_size_for_window, METH_VARARGS), MW(mark_os_window_for_close, METH_VARARGS), MW(set_titlebar_color, METH_VARARGS), MW(focus_os_window, METH_VARARGS), MW(mark_tab_bar_dirty, METH_O), MW(change_background_opacity, METH_VARARGS), MW(background_opacity_of, METH_O), MW(update_window_visibility, METH_VARARGS), MW(global_font_size, METH_VARARGS), MW(os_window_font_size, METH_VARARGS), MW(set_boss, METH_O), MW(patch_global_colors, METH_VARARGS), MW(destroy_global_data, METH_NOARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; static void finalize(void) { while(detached_windows.num_windows--) { destroy_window(&detached_windows.windows[detached_windows.num_windows]); } if (detached_windows.windows) free(detached_windows.windows); detached_windows.capacity = 0; } bool init_state(PyObject *module) { global_state.font_sz_in_pts = 11.0; #ifdef __APPLE__ #define DPI 72.0 #else #define DPI 96.0 #endif global_state.default_dpi.x = DPI; global_state.default_dpi.y = DPI; if (PyModule_AddFunctions(module, module_methods) != 0) return false; if (PyStructSequence_InitType2(&RegionType, ®ion_desc) != 0) return false; Py_INCREF((PyObject *) &RegionType); PyModule_AddObject(module, "Region", (PyObject *) &RegionType); if (Py_AtExit(finalize) != 0) { PyErr_SetString(PyExc_RuntimeError, "Failed to register the state at exit handler"); return false; } return true; } // }}} kitty-0.15.0/kitty/state.h000066400000000000000000000206761356737523400154300ustar00rootroot00000000000000/* * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include "data-types.h" #include "screen.h" #include "monotonic.h" #define OPT(name) global_state.opts.name typedef enum { LEFT_EDGE, TOP_EDGE, RIGHT_EDGE, BOTTOM_EDGE } Edge; typedef enum { RESIZE_DRAW_STATIC, RESIZE_DRAW_SCALED, RESIZE_DRAW_BLANK, RESIZE_DRAW_SIZE } ResizeDrawStrategy; typedef struct { monotonic_t visual_bell_duration, cursor_blink_interval, cursor_stop_blinking_after, mouse_hide_wait, click_interval; double wheel_scroll_multiplier, touch_scroll_multiplier; bool enable_audio_bell; CursorShape cursor_shape; unsigned int open_url_modifiers; unsigned int rectangle_select_modifiers; unsigned int terminal_select_modifiers; unsigned int url_style; unsigned int scrollback_pager_history_size; char_type select_by_word_characters[256]; size_t select_by_word_characters_count; color_type url_color, background, foreground, active_border_color, inactive_border_color, bell_border_color; monotonic_t repaint_delay, input_delay; bool focus_follows_mouse, hide_window_decorations; bool macos_hide_from_tasks, macos_quit_when_last_window_closed, macos_window_resizable, macos_traditional_fullscreen; unsigned int macos_option_as_alt; float macos_thicken_font; WindowTitleIn macos_show_window_title_in; int adjust_line_height_px, adjust_column_width_px; float adjust_line_height_frac, adjust_column_width_frac; float background_opacity, dim_opacity; bool dynamic_background_opacity; float inactive_text_alpha; float window_padding_width; Edge tab_bar_edge; unsigned long tab_bar_min_tabs; DisableLigature disable_ligatures; ResizeDrawStrategy resize_draw_strategy; bool sync_to_monitor; bool close_on_child_death; bool window_alert_on_bell; bool debug_keyboard; monotonic_t resize_debounce_time; MouseShape pointer_shape_when_grabbed; } Options; typedef struct { ssize_t vao_idx, gvao_idx; float xstart, ystart, dx, dy; Screen *screen; } ScreenRenderData; typedef struct { unsigned int left, top, right, bottom; } WindowGeometry; typedef struct { monotonic_t at; int button, modifiers; double x, y; } Click; #define CLICK_QUEUE_SZ 3 typedef struct { Click clicks[CLICK_QUEUE_SZ]; unsigned int length; } ClickQueue; typedef struct { id_type id; bool visible, cursor_visible_at_last_render; unsigned int last_cursor_x, last_cursor_y; CursorShape last_cursor_shape; PyObject *title; ScreenRenderData render_data; struct { unsigned int cell_x, cell_y; double x, y; } mouse_pos; WindowGeometry geometry; ClickQueue click_queue; monotonic_t last_drag_scroll_at; } Window; typedef struct { uint32_t left, top, right, bottom, color; } BorderRect; typedef struct { BorderRect *rect_buf; unsigned int num_border_rects, capacity; bool is_dirty; ssize_t vao_idx; } BorderRects; typedef struct { id_type id; unsigned int active_window, num_windows, capacity; Window *windows; BorderRects border_rects; } Tab; #define MAX_KEY_COUNT 512 typedef struct { int x, y, w, h; bool is_set; } OSWindowGeometry; enum RENDER_STATE { RENDER_FRAME_NOT_REQUESTED, RENDER_FRAME_REQUESTED, RENDER_FRAME_READY }; typedef struct { monotonic_t last_resize_event_at; bool in_progress; bool from_os_notification; bool os_says_resize_complete; unsigned int width, height, num_of_resize_events; } LiveResizeInfo; typedef struct { void *handle; id_type id; OSWindowGeometry before_fullscreen; int viewport_width, viewport_height, window_width, window_height; double viewport_x_ratio, viewport_y_ratio; Tab *tabs; unsigned int active_tab, num_tabs, capacity, last_active_tab, last_num_tabs, last_active_window_id; bool focused_at_last_render, needs_render; ScreenRenderData tab_bar_render_data; bool tab_bar_data_updated; bool is_focused; monotonic_t cursor_blink_zero_time, last_mouse_activity_at; double mouse_x, mouse_y; double logical_dpi_x, logical_dpi_y, font_sz_in_pts; bool mouse_button_pressed[20]; PyObject *window_title; bool is_key_pressed[MAX_KEY_COUNT]; bool viewport_size_dirty, viewport_updated_at_least_once; LiveResizeInfo live_resize; bool has_pending_resizes, is_semi_transparent, shown_once, is_damaged; uint32_t offscreen_texture_id; unsigned int clear_count; color_type last_titlebar_color; float background_opacity; FONTS_DATA_HANDLE fonts_data; id_type temp_font_group_id; enum RENDER_STATE render_state; monotonic_t last_render_frame_received_at; id_type last_focused_counter; ssize_t gvao_idx; } OSWindow; typedef struct { Options opts; id_type os_window_id_counter, tab_id_counter, window_id_counter; PyObject *boss; OSWindow *os_windows; size_t num_os_windows, capacity; OSWindow *callback_os_window; bool terminate; bool is_wayland; bool has_render_frames; bool debug_gl, debug_font_fallback; bool has_pending_resizes, has_pending_closes; bool in_sequence_mode; bool tab_bar_hidden; double font_sz_in_pts; struct { double x, y; } default_dpi; id_type active_drag_in_window; } GlobalState; extern GlobalState global_state; #define call_boss(name, ...) if (global_state.boss) { \ PyObject *cret_ = PyObject_CallMethod(global_state.boss, #name, __VA_ARGS__); \ if (cret_ == NULL) { PyErr_Print(); } \ else Py_DECREF(cret_); \ } void gl_init(void); void remove_vao(ssize_t vao_idx); bool remove_os_window(id_type os_window_id); void make_os_window_context_current(OSWindow *w); void update_os_window_references(void); void mark_os_window_for_close(OSWindow* w, bool yes); void update_os_window_viewport(OSWindow *window, bool); bool should_os_window_close(OSWindow* w); bool should_os_window_be_rendered(OSWindow* w); void wakeup_main_loop(void); void swap_window_buffers(OSWindow *w); void make_window_context_current(OSWindow *w); void hide_mouse(OSWindow *w); bool is_mouse_hidden(OSWindow *w); void destroy_os_window(OSWindow *w); void focus_os_window(OSWindow *w, bool also_raise); void set_os_window_title(OSWindow *w, const char *title); OSWindow* os_window_for_kitty_window(id_type); OSWindow* add_os_window(void); OSWindow* current_os_window(void); void os_window_regions(OSWindow*, Region *main, Region *tab_bar); bool drag_scroll(Window *, OSWindow*); void draw_borders(ssize_t vao_idx, unsigned int num_border_rects, BorderRect *rect_buf, bool rect_data_is_dirty, uint32_t viewport_width, uint32_t viewport_height, color_type, unsigned int, bool, OSWindow *w); ssize_t create_cell_vao(void); ssize_t create_graphics_vao(void); ssize_t create_border_vao(void); bool send_cell_data_to_gpu(ssize_t, ssize_t, float, float, float, float, Screen *, OSWindow *); void draw_cells(ssize_t, ssize_t, float, float, float, float, Screen *, OSWindow *, bool, bool); void draw_centered_alpha_mask(ssize_t gvao_idx, size_t screen_width, size_t screen_height, size_t width, size_t height, uint8_t *canvas); void update_surface_size(int, int, uint32_t); void free_texture(uint32_t*); void send_image_to_gpu(uint32_t*, const void*, int32_t, int32_t, bool, bool); void send_sprite_to_gpu(FONTS_DATA_HANDLE fg, unsigned int, unsigned int, unsigned int, pixel*); void blank_canvas(float, color_type); void blank_os_window(OSWindow *); void set_titlebar_color(OSWindow *w, color_type color); FONTS_DATA_HANDLE load_fonts_data(double, double, double); void send_prerendered_sprites_for_window(OSWindow *w); #ifdef __APPLE__ void get_cocoa_key_equivalent(int, int, unsigned short*, int*); typedef enum { PREFERENCES_WINDOW = 1, NEW_OS_WINDOW = 2, NEW_OS_WINDOW_WITH_WD = 4, NEW_TAB_WITH_WD = 8 } CocoaPendingAction; void set_cocoa_pending_action(CocoaPendingAction action, const char*); bool application_quit_requested(void); void request_application_quit(void); #endif void request_frame_render(OSWindow *w); void request_tick_callback(void); typedef void (* timer_callback_fun)(id_type, void*); typedef void (* tick_callback_fun)(void*); id_type add_main_loop_timer(monotonic_t interval, bool repeats, timer_callback_fun callback, void *callback_data, timer_callback_fun free_callback); void remove_main_loop_timer(id_type timer_id); void update_main_loop_timer(id_type timer_id, monotonic_t interval, bool enabled); void run_main_loop(tick_callback_fun, void*); void stop_main_loop(void); kitty-0.15.0/kitty/tab_bar.py000066400000000000000000000242701356737523400160750ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from collections import namedtuple from .config import build_ansi_color_table from .constants import WindowGeometry from .fast_data_types import ( DECAWM, Screen, cell_size_for_window, pt_to_px, set_tab_bar_render_data, viewport_for_window ) from .layout import Rect from .utils import color_as_int, log_error from .window import calculate_gl_geometry from .rgb import alpha_blend, color_from_int TabBarData = namedtuple('TabBarData', 'title is_active needs_attention') DrawData = namedtuple( 'DrawData', 'leading_spaces sep trailing_spaces bell_on_tab' ' bell_fg alpha active_fg active_bg inactive_fg inactive_bg default_bg title_template') def as_rgb(x): return (x << 8) | 2 def draw_title(draw_data, screen, tab, index): if tab.needs_attention and draw_data.bell_on_tab: fg = screen.cursor.fg screen.cursor.fg = draw_data.bell_fg screen.draw('🔔 ') screen.cursor.fg = fg try: title = draw_data.title_template.format(title=tab.title, index=index) except Exception as e: if not hasattr(draw_title, 'template_failure_reported'): draw_title.template_failure_reported = True log_error('Invalid tab title template: "{}" with error: {}'.format(draw_data.title_template, e)) title = tab.title screen.draw(title) def draw_tab_with_separator(draw_data, screen, tab, before, max_title_length, index, is_last): if draw_data.leading_spaces: screen.draw(' ' * draw_data.leading_spaces) draw_title(draw_data, screen, tab, index) trailing_spaces = min(max_title_length - 1, draw_data.trailing_spaces) max_title_length -= trailing_spaces extra = screen.cursor.x - before - max_title_length if extra > 0: screen.cursor.x -= extra + 1 screen.draw('…') if trailing_spaces: screen.draw(' ' * trailing_spaces) end = screen.cursor.x screen.cursor.bold = screen.cursor.italic = False screen.cursor.fg = screen.cursor.bg = 0 screen.draw(draw_data.sep) return end def draw_tab_with_fade(draw_data, screen, tab, before, max_title_length, index, is_last): tab_bg = draw_data.active_bg if tab.is_active else draw_data.inactive_bg fade_colors = [as_rgb(color_as_int(alpha_blend(tab_bg, draw_data.default_bg, alpha))) for alpha in draw_data.alpha] for bg in fade_colors: screen.cursor.bg = bg screen.draw(' ') draw_title(draw_data, screen, tab, index) extra = screen.cursor.x - before - max_title_length if extra > 0: screen.cursor.x = before draw_title(draw_data, screen, tab, index) extra = screen.cursor.x - before - max_title_length if extra > 0: screen.cursor.x -= extra + 1 screen.draw('…') for bg in reversed(fade_colors): if extra >= 0: break extra += 1 screen.cursor.bg = bg screen.draw(' ') end = screen.cursor.x screen.cursor.bg = as_rgb(color_as_int(draw_data.default_bg)) screen.draw(' ') return end def draw_tab_with_powerline(draw_data, screen, tab, before, max_title_length, index, is_last): tab_bg = as_rgb(color_as_int(draw_data.active_bg if tab.is_active else draw_data.inactive_bg)) tab_fg = as_rgb(color_as_int(draw_data.active_fg if tab.is_active else draw_data.inactive_fg)) inactive_bg = as_rgb(color_as_int(draw_data.inactive_bg)) default_bg = as_rgb(color_as_int(draw_data.default_bg)) min_title_length = 1 + 2 if screen.cursor.x + min_title_length >= screen.columns: screen.cursor.x -= 2 screen.cursor.bg = default_bg screen.cursor.fg = inactive_bg screen.draw('î‚° ') return screen.cursor.x start_draw = 2 if tab.is_active and screen.cursor.x >= 2: screen.cursor.x -= 2 screen.cursor.fg = inactive_bg screen.cursor.bg = tab_bg screen.draw('î‚° ') screen.cursor.fg = tab_fg elif screen.cursor.x == 0: screen.draw(' ') start_draw = 1 if min_title_length >= max_title_length: screen.draw('…') else: draw_title(draw_data, screen, tab, index) extra = screen.cursor.x + start_draw - before - max_title_length if extra > 0 and extra + 1 < screen.cursor.x: screen.cursor.x -= extra + 1 screen.draw('…') if tab.is_active or is_last: screen.draw(' ') screen.cursor.fg = tab_bg if is_last: screen.cursor.bg = default_bg else: screen.cursor.bg = inactive_bg screen.draw('î‚°') else: screen.draw(' ') end = screen.cursor.x if end < screen.columns: screen.draw(' ') return end class TabBar: def __init__(self, os_window_id, opts): self.os_window_id = os_window_id self.opts = opts draw_title.template = opts.tab_title_template self.num_tabs = 1 self.margin_width = pt_to_px(self.opts.tab_bar_margin_width, self.os_window_id) self.cell_width, cell_height = cell_size_for_window(self.os_window_id) self.data_buffer_size = 0 self.laid_out_once = False self.dirty = True self.screen = s = Screen(None, 1, 10, 0, self.cell_width, cell_height) s.color_profile.update_ansi_color_table(build_ansi_color_table(opts)) s.color_profile.set_configured_colors( color_as_int(opts.inactive_tab_foreground), color_as_int(opts.inactive_tab_background) ) self.blank_rects = () sep = opts.tab_separator self.trailing_spaces = self.leading_spaces = 0 while sep and sep[0] == ' ': sep = sep[1:] self.trailing_spaces += 1 while sep and sep[-1] == ' ': self.leading_spaces += 1 sep = sep[:-1] self.sep = sep self.active_font_style = opts.active_tab_font_style self.inactive_font_style = opts.inactive_tab_font_style self.active_bg = as_rgb(color_as_int(opts.active_tab_background)) self.active_fg = as_rgb(color_as_int(opts.active_tab_foreground)) self.bell_fg = as_rgb(0xff0000) self.draw_data = DrawData( self.leading_spaces, self.sep, self.trailing_spaces, self.opts.bell_on_tab, self.bell_fg, self.opts.tab_fade, self.opts.active_tab_foreground, self.opts.active_tab_background, self.opts.inactive_tab_foreground, self.opts.inactive_tab_background, self.opts.background, self.opts.tab_title_template ) if self.opts.tab_bar_style == 'separator': self.draw_func = draw_tab_with_separator elif self.opts.tab_bar_style == 'powerline': self.draw_func = draw_tab_with_powerline else: self.draw_func = draw_tab_with_fade def patch_colors(self, spec): if 'active_tab_foreground' in spec: self.active_fg = (spec['active_tab_foreground'] << 8) | 2 if 'active_tab_background' in spec: self.active_bg = (spec['active_tab_background'] << 8) | 2 self.draw_data = self.draw_data._replace(active_bg=color_from_int(spec['active_tab_background'])) if 'inactive_tab_background' in spec: self.draw_data = self.draw_data._replace(inactive_bg=color_from_int(spec['inactive_tab_background'])) if 'background' in spec: self.draw_data = self.draw_data._replace(default_bg=color_from_int(spec['background'])) self.screen.color_profile.set_configured_colors( spec.get('inactive_tab_foreground', color_as_int(self.opts.inactive_tab_foreground)), spec.get('inactive_tab_background', color_as_int(self.opts.inactive_tab_background)) ) def layout(self): central, tab_bar, vw, vh, cell_width, cell_height = viewport_for_window(self.os_window_id) if tab_bar.width < 2: return self.cell_width = cell_width s = self.screen viewport_width = tab_bar.width - 2 * self.margin_width ncells = viewport_width // cell_width s.resize(1, ncells) s.reset_mode(DECAWM) self.laid_out_once = True margin = (viewport_width - ncells * cell_width) // 2 + self.margin_width self.window_geometry = g = WindowGeometry( margin, tab_bar.top, viewport_width - margin, tab_bar.bottom, s.columns, s.lines) if margin > 0: self.blank_rects = (Rect(0, g.top, g.left, g.bottom + 1), Rect(g.right - 1, g.top, viewport_width, g.bottom + 1)) else: self.blank_rects = () self.screen_geometry = sg = calculate_gl_geometry(g, vw, vh, cell_width, cell_height) set_tab_bar_render_data(self.os_window_id, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen) def update(self, data): if not self.laid_out_once: return s = self.screen s.cursor.x = 0 s.erase_in_line(2, False) max_title_length = max(1, (self.screen_geometry.xnum // max(1, len(data))) - 1) cr = [] last_tab = data[-1] if data else None for i, t in enumerate(data): s.cursor.bg = self.active_bg if t.is_active else 0 s.cursor.fg = self.active_fg if t.is_active else 0 s.cursor.bold, s.cursor.italic = self.active_font_style if t.is_active else self.inactive_font_style before = s.cursor.x end = self.draw_func(self.draw_data, s, t, before, max_title_length, i + 1, t is last_tab) cr.append((before, end)) if s.cursor.x > s.columns - max_title_length and t is not last_tab: s.cursor.x = s.columns - 2 s.cursor.bg = as_rgb(color_as_int(self.draw_data.default_bg)) s.cursor.fg = self.bell_fg s.draw(' …') break s.erase_in_line(0, False) # Ensure no long titles bleed after the last tab self.cell_ranges = cr def destroy(self): self.screen.reset_callbacks() del self.screen def tab_at(self, x): x = (x - self.window_geometry.left) // self.cell_width for i, (a, b) in enumerate(self.cell_ranges): if a <= x <= b: return i kitty-0.15.0/kitty/tabs.py000066400000000000000000000620661356737523400154410ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import weakref from collections import deque, namedtuple from contextlib import suppress from functools import partial from .borders import Borders from .child import Child from .constants import appname, get_boss, is_macos, is_wayland from .fast_data_types import ( add_tab, attach_window, detach_window, mark_tab_bar_dirty, next_window_id, pt_to_px, remove_tab, remove_window, ring_bell, set_active_tab, swap_tabs, x11_window_id ) from .layout import create_layout_object_for, evict_cached_layouts from .session import resolved_shell from .tab_bar import TabBar, TabBarData from .utils import log_error from .window import Window SpecialWindowInstance = namedtuple('SpecialWindow', 'cmd stdin override_title cwd_from cwd overlay_for env') def SpecialWindow(cmd, stdin=None, override_title=None, cwd_from=None, cwd=None, overlay_for=None, env=None): return SpecialWindowInstance(cmd, stdin, override_title, cwd_from, cwd, overlay_for, env) def add_active_id_to_history(items, item_id, maxlen=64): with suppress(ValueError): items.remove(item_id) items.append(item_id) if len(items) > maxlen: items.popleft() class Tab: # {{{ def __init__(self, tab_manager, session_tab=None, special_window=None, cwd_from=None, no_initial_window=False): self._active_window_idx = 0 self.tab_manager_ref = weakref.ref(tab_manager) self.os_window_id = tab_manager.os_window_id self.id = add_tab(self.os_window_id) self.active_window_history = deque() if not self.id: raise Exception('No OS window with id {} found, or tab counter has wrapped'.format(self.os_window_id)) self.opts, self.args = tab_manager.opts, tab_manager.args self.margin_width, self.padding_width, self.single_window_margin_width = map( lambda x: pt_to_px(getattr(self.opts, x), self.os_window_id), ( 'window_margin_width', 'window_padding_width', 'single_window_margin_width')) self.name = getattr(session_tab, 'name', '') self.enabled_layouts = [x.lower() for x in getattr(session_tab, 'enabled_layouts', None) or self.opts.enabled_layouts] self.borders = Borders(self.os_window_id, self.id, self.opts, pt_to_px(self.opts.window_border_width, self.os_window_id), self.padding_width) self.windows = deque() for i, which in enumerate('first second third fourth fifth sixth seventh eighth ninth tenth'.split()): setattr(self, which + '_window', partial(self.nth_window, num=i)) self._last_used_layout = self._current_layout_name = None self.cwd = self.args.directory if no_initial_window: self._set_current_layout(self.enabled_layouts[0]) elif session_tab is None: sl = self.enabled_layouts[0] self._set_current_layout(sl) if special_window is None: self.new_window(cwd_from=cwd_from) else: self.new_special_window(special_window) else: if session_tab.cwd: self.cwd = session_tab.cwd l0 = session_tab.layout self._set_current_layout(l0) self.startup(session_tab) def take_over_from(self, other_tab): self.name, self.cwd = other_tab.name, other_tab.cwd self.enabled_layouts = list(other_tab.enabled_layouts) self._set_current_layout(other_tab._current_layout_name) self._last_used_layout = other_tab._last_used_layout orig_windows = deque(other_tab.windows) orig_history = deque(other_tab.active_window_history) orig_active = other_tab._active_window_idx for window in other_tab.windows: detach_window(other_tab.os_window_id, other_tab.id, window.id) other_tab.windows = deque() other_tab._active_window_idx = 0 self.active_window_history = orig_history self.windows = orig_windows self._active_window_idx = orig_active for window in self.windows: window.change_tab(self) attach_window(self.os_window_id, self.id, window.id) self.relayout() def _set_current_layout(self, layout_name): self._last_used_layout = self._current_layout_name self.current_layout = self.create_layout_object(layout_name) self._current_layout_name = layout_name def startup(self, session_tab): for cmd in session_tab.windows: if isinstance(cmd, (SpecialWindowInstance,)): self.new_special_window(cmd) else: self.new_window(cmd=cmd) self.set_active_window_idx(session_tab.active_window_idx) @property def active_window_idx(self): return self._active_window_idx @active_window_idx.setter def active_window_idx(self, val): try: old_active_window = self.windows[self._active_window_idx] except Exception: old_active_window = None else: wid = old_active_window.id if old_active_window.overlay_for is None else old_active_window.overlay_for add_active_id_to_history(self.active_window_history, wid) self._active_window_idx = max(0, min(val, len(self.windows) - 1)) try: new_active_window = self.windows[self._active_window_idx] except Exception: new_active_window = None if old_active_window is not new_active_window: if old_active_window is not None: old_active_window.focus_changed(False) if new_active_window is not None: new_active_window.focus_changed(True) tm = self.tab_manager_ref() if tm is not None: self.relayout_borders() tm.mark_tab_bar_dirty() @property def active_window(self): return self.windows[self.active_window_idx] if self.windows else None @property def title(self): return getattr(self.active_window, 'title', appname) def set_title(self, title): self.name = title or '' tm = self.tab_manager_ref() if tm is not None: tm.mark_tab_bar_dirty() def title_changed(self, window): if window is self.active_window: tm = self.tab_manager_ref() if tm is not None: tm.mark_tab_bar_dirty() def on_bell(self, window): tm = self.tab_manager_ref() if tm is not None: self.relayout_borders() tm.mark_tab_bar_dirty() def visible_windows(self): for w in self.windows: if w.is_visible_in_layout: yield w def relayout(self): if self.windows: self.active_window_idx = self.current_layout(self.windows, self.active_window_idx) self.relayout_borders() def relayout_borders(self): tm = self.tab_manager_ref() if tm is not None: visible_windows = [w for w in self.windows if w.is_visible_in_layout] w = self.active_window self.borders(visible_windows, w, self.current_layout, tm.blank_rects, self.current_layout.needs_window_borders and len(visible_windows) > 1) if w is not None: w.change_titlebar_color() def create_layout_object(self, name): return create_layout_object_for( name, self.os_window_id, self.id, self.margin_width, self.single_window_margin_width, self.padding_width, self.borders.border_width) def next_layout(self): if len(self.enabled_layouts) > 1: for i, layout_name in enumerate(self.enabled_layouts): if layout_name == self.current_layout.full_name: idx = i break else: idx = -1 nl = self.enabled_layouts[(idx + 1) % len(self.enabled_layouts)] self._set_current_layout(nl) self.relayout() def last_used_layout(self): if len(self.enabled_layouts) > 1 and self._last_used_layout and self._last_used_layout != self._current_layout_name: self._set_current_layout(self._last_used_layout) self.relayout() def goto_layout(self, layout_name, raise_exception=False): layout_name = layout_name.lower() if layout_name not in self.enabled_layouts: if raise_exception: raise ValueError(layout_name) log_error('Unknown or disabled layout: {}'.format(layout_name)) return self._set_current_layout(layout_name) self.relayout() def resize_window_by(self, window_id, increment, is_horizontal): increment_as_percent = self.current_layout.bias_increment_for_cell(is_horizontal) * increment if self.current_layout.modify_size_of_window(self.windows, window_id, increment_as_percent, is_horizontal): self.relayout() return return 'Could not resize' def resize_window(self, quality, increment): if increment < 1: raise ValueError(increment) is_horizontal = quality in ('wider', 'narrower') increment *= 1 if quality in ('wider', 'taller') else -1 if self.resize_window_by( self.windows[self.active_window_idx].id, increment, is_horizontal) is not None: ring_bell() def reset_window_sizes(self): if self.current_layout.remove_all_biases(): self.relayout() def launch_child(self, use_shell=False, cmd=None, stdin=None, cwd_from=None, cwd=None, env=None, allow_remote_control=False): if cmd is None: if use_shell: cmd = resolved_shell(self.opts) else: cmd = self.args.args or resolved_shell(self.opts) fenv = {} if env: fenv.update(env) fenv['KITTY_WINDOW_ID'] = str(next_window_id()) if not is_macos and not is_wayland(): try: fenv['WINDOWID'] = str(x11_window_id(self.os_window_id)) except Exception: import traceback traceback.print_exc() ans = Child(cmd, cwd or self.cwd, self.opts, stdin, fenv, cwd_from, allow_remote_control=allow_remote_control) ans.fork() return ans def _add_window(self, window, location=None): self.active_window_idx = self.current_layout.add_window(self.windows, window, self.active_window_idx, location) self.relayout_borders() def new_window( self, use_shell=True, cmd=None, stdin=None, override_title=None, cwd_from=None, cwd=None, overlay_for=None, env=None, location=None, copy_colors_from=None, allow_remote_control=False ): child = self.launch_child( use_shell=use_shell, cmd=cmd, stdin=stdin, cwd_from=cwd_from, cwd=cwd, env=env, allow_remote_control=allow_remote_control) window = Window(self, child, self.opts, self.args, override_title=override_title, copy_colors_from=copy_colors_from) if overlay_for is not None: overlaid = next(w for w in self.windows if w.id == overlay_for) window.overlay_for = overlay_for overlaid.overlay_window_id = window.id # Must add child before laying out so that resize_pty succeeds get_boss().add_child(window) self._add_window(window, location=location) return window def new_special_window(self, special_window, location=None, copy_colors_from=None, allow_remote_control=False): return self.new_window(False, *special_window, location=location, copy_colors_from=copy_colors_from, allow_remote_control=allow_remote_control) def close_window(self): if self.windows: self.remove_window(self.windows[self.active_window_idx]) def previous_active_window_idx(self, num): try: old_window_id = self.active_window_history[-num] except IndexError: return for idx, w in enumerate(self.windows): if w.id == old_window_id: return idx def remove_window(self, window, destroy=True): idx = self.previous_active_window_idx(1) next_window_id = None if idx is not None: next_window_id = self.windows[idx].id active_window_idx = self.current_layout.remove_window(self.windows, window, self.active_window_idx) if destroy: remove_window(self.os_window_id, self.id, window.id) else: detach_window(self.os_window_id, self.id, window.id) if window.overlay_for is not None: for idx, q in enumerate(self.windows): if q.id == window.overlay_for: active_window_idx = idx next_window_id = q.id break if next_window_id is None and active_window_idx is not None and len(self.windows) > active_window_idx: next_window_id = self.windows[active_window_idx].id if next_window_id is not None: for idx, window in enumerate(self.windows): if window.id == next_window_id: self.active_window_idx = self.current_layout.set_active_window(self.windows, idx) break else: self.active_window_idx = active_window_idx else: self.active_window_idx = active_window_idx self.relayout_borders() active_window = self.active_window if active_window: self.title_changed(active_window) def detach_window(self, window): underlaid_window = None overlaid_window = window if window.overlay_for: for x in self.windows: if x.id == window.overlay_for: underlaid_window = x break elif window.overlay_window_id: underlaid_window = window overlaid_window = None for x in self.windows: if x.id == window.overlay_window_id: overlaid_window = x break if overlaid_window is not None: self.remove_window(overlaid_window, destroy=False) if underlaid_window is not None: self.remove_window(underlaid_window, destroy=False) return underlaid_window, overlaid_window def attach_window(self, window): window.change_tab(self) attach_window(self.os_window_id, self.id, window.id) self._add_window(window) def set_active_window_idx(self, idx): if idx != self.active_window_idx: self.active_window_idx = self.current_layout.set_active_window(self.windows, idx) self.relayout_borders() def set_active_window(self, window): try: idx = self.windows.index(window) except ValueError: return self.set_active_window_idx(idx) def get_nth_window(self, n): if self.windows: return self.current_layout.nth_window(self.windows, n, make_active=False) def nth_window(self, num=0): if self.windows: if num < 0: idx = self.previous_active_window_idx(-num) if idx is None: return self.active_window_idx = self.current_layout.set_active_window(self.windows, idx) else: self.active_window_idx = self.current_layout.nth_window(self.windows, num) self.relayout_borders() def _next_window(self, delta=1): if len(self.windows) > 1: self.active_window_idx = self.current_layout.next_window(self.windows, self.active_window_idx, delta) self.relayout_borders() def next_window(self): self._next_window() def previous_window(self): self._next_window(-1) prev_window = previous_window def neighboring_window(self, which): neighbors = self.current_layout.neighbors(self.windows, self.active_window_idx) candidates = neighbors.get(which) if candidates: self.active_window_idx = self.current_layout.set_active_window(self.windows, candidates[0]) self.relayout_borders() def move_window(self, delta=1): self.active_window_idx = self.current_layout.move_window(self.windows, self.active_window_idx, delta) self.relayout() def move_window_to_top(self): self.move_window(-self.active_window_idx) def move_window_forward(self): self.move_window() def move_window_backward(self): self.move_window(-1) def list_windows(self, active_window): for w in self: yield w.as_dict(is_focused=w is active_window) def matches(self, field, pat): if field == 'id': return pat.pattern == str(self.id) if field == 'title': return pat.search(self.name or self.title) is not None return False def __iter__(self): return iter(self.windows) def __len__(self): return len(self.windows) def __contains__(self, window): return window in self.windows def destroy(self): evict_cached_layouts(self.id) for w in self.windows: w.destroy() self.windows = deque() def __repr__(self): return 'Tab(title={}, id={})'.format(self.name or self.title, hex(id(self))) def make_active(self): tm = self.tab_manager_ref() if tm is not None: tm.set_active_tab(self) # }}} class TabManager: # {{{ def __init__(self, os_window_id, opts, args, startup_session=None): self.os_window_id = os_window_id self.last_active_tab_id = None self.opts, self.args = opts, args self.tab_bar_hidden = self.opts.tab_bar_style == 'hidden' self.tabs = [] self.active_tab_history = deque() self.tab_bar = TabBar(self.os_window_id, opts) self._active_tab_idx = 0 if startup_session is not None: for t in startup_session.tabs: self._add_tab(Tab(self, session_tab=t)) self._set_active_tab(max(0, min(startup_session.active_tab_idx, len(self.tabs) - 1))) @property def active_tab_idx(self): return self._active_tab_idx @active_tab_idx.setter def active_tab_idx(self, val): try: old_active_tab = self.tabs[self._active_tab_idx] except Exception: old_active_tab = None else: add_active_id_to_history(self.active_tab_history, old_active_tab.id) self._active_tab_idx = max(0, min(val, len(self.tabs) - 1)) try: new_active_tab = self.tabs[self._active_tab_idx] except Exception: new_active_tab = None if old_active_tab is not new_active_tab: if old_active_tab is not None: w = old_active_tab.active_window if w is not None: w.focus_changed(False) if new_active_tab is not None: w = new_active_tab.active_window if w is not None: w.focus_changed(True) def refresh_sprite_positions(self): if not self.tab_bar_hidden: self.tab_bar.screen.refresh_sprite_positions() @property def tab_bar_should_be_visible(self): return len(self.tabs) >= self.opts.tab_bar_min_tabs def _add_tab(self, tab): visible_before = self.tab_bar_should_be_visible self.tabs.append(tab) if not visible_before and self.tab_bar_should_be_visible: self.tabbar_visibility_changed() def _remove_tab(self, tab): visible_before = self.tab_bar_should_be_visible remove_tab(self.os_window_id, tab.id) self.tabs.remove(tab) if visible_before and not self.tab_bar_should_be_visible: self.tabbar_visibility_changed() def _set_active_tab(self, idx): self.active_tab_idx = idx set_active_tab(self.os_window_id, idx) def tabbar_visibility_changed(self): if not self.tab_bar_hidden: self.tab_bar.layout() self.resize(only_tabs=True) def mark_tab_bar_dirty(self): if self.tab_bar_should_be_visible and not self.tab_bar_hidden: mark_tab_bar_dirty(self.os_window_id) def update_tab_bar_data(self): self.tab_bar.update(self.tab_bar_data) def resize(self, only_tabs=False): if not only_tabs: if not self.tab_bar_hidden: self.tab_bar.layout() self.mark_tab_bar_dirty() for tab in self.tabs: tab.relayout() def set_active_tab_idx(self, idx): self._set_active_tab(idx) self.active_tab.relayout_borders() self.mark_tab_bar_dirty() def set_active_tab(self, tab): try: idx = self.tabs.index(tab) except Exception: return False self.set_active_tab_idx(idx) return True def next_tab(self, delta=1): if len(self.tabs) > 1: self.set_active_tab_idx((self.active_tab_idx + len(self.tabs) + delta) % len(self.tabs)) def goto_tab(self, tab_num): if 0 <= tab_num < len(self.tabs): self.set_active_tab_idx(tab_num) elif tab_num < 0: try: old_active_tab_id = self.active_tab_history[tab_num] except IndexError: return for idx, tab in enumerate(self.tabs): if tab.id == old_active_tab_id: self.set_active_tab_idx(idx) break def __iter__(self): return iter(self.tabs) def __len__(self): return len(self.tabs) def list_tabs(self, active_tab, active_window): for tab in self: yield { 'id': tab.id, 'is_focused': tab is active_tab, 'title': tab.name or tab.title, 'layout': tab.current_layout.name, 'windows': list(tab.list_windows(active_window)), } @property def active_tab(self): return self.tabs[self.active_tab_idx] if self.tabs else None @property def active_window(self): t = self.active_tab if t is not None: return t.active_window def tab_for_id(self, tab_id): for t in self.tabs: if t.id == tab_id: return t def move_tab(self, delta=1): if len(self.tabs) > 1: idx = self.active_tab_idx nidx = (idx + len(self.tabs) + delta) % len(self.tabs) step = 1 if idx < nidx else -1 for i in range(idx, nidx, step): self.tabs[i], self.tabs[i + step] = self.tabs[i + step], self.tabs[i] swap_tabs(self.os_window_id, i, i + step) self._set_active_tab(nidx) self.mark_tab_bar_dirty() def new_tab(self, special_window=None, cwd_from=None, as_neighbor=False, empty_tab=False): nidx = self.active_tab_idx + 1 idx = len(self.tabs) self._add_tab(Tab(self, no_initial_window=True) if empty_tab else Tab(self, special_window=special_window, cwd_from=cwd_from)) self._set_active_tab(idx) if len(self.tabs) > 2 and as_neighbor and idx != nidx: for i in range(idx, nidx, -1): self.tabs[i], self.tabs[i-1] = self.tabs[i-1], self.tabs[i] swap_tabs(self.os_window_id, i, i-1) self._set_active_tab(nidx) idx = nidx self.mark_tab_bar_dirty() return self.tabs[idx] def remove(self, tab): self._remove_tab(tab) next_active_tab = -1 while True: try: self.active_tab_history.remove(tab.id) except ValueError: break if self.opts.tab_switch_strategy == 'previous': while self.active_tab_history and next_active_tab < 0: tab_id = self.active_tab_history.pop() for idx, qtab in enumerate(self.tabs): if qtab.id == tab_id: next_active_tab = idx break elif self.opts.tab_switch_strategy == 'left': next_active_tab = max(0, self.active_tab_idx - 1) if next_active_tab < 0: next_active_tab = max(0, min(self.active_tab_idx, len(self.tabs) - 1)) self._set_active_tab(next_active_tab) self.mark_tab_bar_dirty() tab.destroy() @property def tab_bar_data(self): at = self.active_tab ans = [] for t in self.tabs: title = (t.name or t.title or appname).strip() needs_attention = False for w in t: if w.needs_attention: needs_attention = True break ans.append(TabBarData(title, t is at, needs_attention)) return ans def activate_tab_at(self, x): i = self.tab_bar.tab_at(x) if i is not None: self.set_active_tab_idx(i) @property def blank_rects(self): return self.tab_bar.blank_rects if self.tab_bar_should_be_visible else () def destroy(self): for t in self: t.destroy() self.tab_bar.destroy() del self.tab_bar del self.tabs # }}} kitty-0.15.0/kitty/terminfo.py000066400000000000000000000312701356737523400163240ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import re from binascii import hexlify, unhexlify def modify_key_bytes(keybytes, amt): if amt == 0: return keybytes ans = bytearray(keybytes) amt = str(amt).encode('ascii') if ans[-1] == ord('~'): return bytes(ans[:-1] + bytearray(b';' + amt + b'~')) if ans[1] == ord('O'): return bytes(ans[:1] + bytearray(b'[1;' + amt) + ans[-1:]) raise ValueError('Unknown key type in key: {!r}'.format(keybytes)) def encode_keystring(keybytes): return keybytes.decode('ascii').replace('\033', r'\E') names = 'xterm-kitty', 'KovIdTTY' termcap_aliases = { 'TN': 'name' } bool_capabilities = { # auto_right_margin (terminal has automatic margins) 'am', # can_change (terminal can redefine existing colors) 'ccc', # has_meta key (i.e. sets the eight bit) 'km', # prtr_silent (printer will not echo on screen) 'mc5i', # move_insert_mode (safe to move while in insert mode) 'mir', # move_standout_mode (safe to move while in standout mode) 'msgr', # no_pad_char (pad character does not exist) 'npc', # eat_newline_glitch (newline ignored after 80 columns) 'xenl', # has extra status line (window title) 'hs', # Terminfo extension used by tmux to detect true color support (non-standard) 'Tc', # Indicates support for styled and colored underlines (non-standard) as # described at: # https://github.com/kovidgoyal/kitty/blob/master/protocol-extensions.asciidoc 'Su', # Indicates support for full keyboard mode (non-standard) as # described at: # https://github.com/kovidgoyal/kitty/blob/master/protocol-extensions.asciidoc 'fullkbd', # The following are entries that we don't use # # background color erase # 'bce', } termcap_aliases.update({ 'am': 'am', 'cc': 'ccc', 'km': 'km', '5i': 'mc5i', 'mi': 'mir', 'ms': 'msgr', 'NP': 'npc', 'xn': 'xenl', 'hs': 'hs', }) numeric_capabilities = { # maximum number of colors on screen 'colors': 256, 'cols': 80, 'lines': 24, # tabs initially every # spaces 'it': 8, # maximum number of color-pairs on the screen 'pairs': 32767, } termcap_aliases.update({ 'Co': 'colors', 'pa': 'pairs', 'li': 'lines', 'co': 'cols', 'it': 'it', }) string_capabilities = { # graphics charset pairs 'acsc': r'++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~', # The audible bell character 'bel': r'^G', # Escape code for bold 'bold': r'\E[1m', # Back tab 'cbt': r'\E[Z', 'kcbt': r'\E[Z', # Make cursor invisible 'civis': r'\E[?25l', # Clear screen 'clear': r'\E[H\E[2J', # Make cursor appear normal 'cnorm': r'\E[?12l\E[?25h', # Carriage return 'cr': r'^M', # CR (carriage return \r) # Change scroll region 'csr': r'\E[%i%p1%d;%p2%dr', # Move cursor to the left by the specified amount 'cub': r'\E[%p1%dD', 'cub1': r'^H', # BS (backspace) # Move cursor down specified number of lines 'cud': r'\E[%p1%dB', 'cud1': r'^J', # LF (line-feed \n) # Move cursor to the right by the specified amount 'cuf': r'\E[%p1%dC', 'cuf1': r'\E[C', # Move cursor up specified number of lines 'cuu': r'\E[%p1%dA', 'cuu1': r'\E[A', # Move cursor to specified location 'cup': r'\E[%i%p1%d;%p2%dH', # Make cursor very visible 'cvvis': r'\E[?12;25h', # Delete the specified number of characters 'dch': r'\E[%p1%dP', 'dch1': r'\E[P', # Turn on half bright mode 'dim': r'\E[2m', # Delete the specified number of lines 'dl': r'\E[%p1%dM', 'dl1': r'\E[M', # Erase specified number of characters 'ech': r'\E[%p1%dX', # Clear to end of screen 'ed': r'\E[J', # Clear to end of line 'el': r'\E[K', # Clear to start of line 'el1': r'\E[1K', # visible bell 'flash': r'\E[?5h$<100/>\E[?5l', # Home cursor 'home': r'\E[H', # Move cursor to column 'hpa': r'\E[%i%p1%dG', # Move to next tab 'ht': r'^I', # Set tabstop at current position 'hts': r'\EH', # Insert specified number of characters 'ich': r'\E[%p1%d@', # Insert specified number of lines 'il': r'\E[%p1%dL', 'il1': r'\E[L', # scroll up by specified amount 'ind': r'^J', 'indn': r'\E[%p1%dS', # initialize color (set dynamic colors) 'initc': r'\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\', # Set all colors to original values 'oc': r'\E]104\007', # turn on blank mode (characters invisible) # 'invis': r'\E[8m', # Backspace 'kbs': r'\177', # Mouse event has occurred 'kmous': r'\E[M', # Scroll backwards (reverse index) 'kri': r'\E[1;2A', # scroll forwards (index) 'kind': r'\E[1;2B', # Restore cursor 'rc': r'\E8', # Reverse video 'rev': r'\E[7m', # Scroll backwards the specified number of lines (reverse index) 'ri': r'\EM', 'rin': r'\E[%p1%dT', # Turn off automatic margins 'rmam': r'\E[?7l', # Exit alternate screen 'rmcup': r'\E[?1049l', # Exit insert mode 'rmir': r'\E[4l', # Exit application keypad mode 'rmkx': r'\E[?1l', # Exit standout mode 'rmso': r'\E[27m', # Exit underline mode 'rmul': r'\E[24m', # Reset string1 (empty OSC sequence to exit OSC/OTH modes, and regular reset) 'rs1': r'\E]\E\\\Ec', # Save cursor 'sc': r'\E7', # Set background color 'setab': r'\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m', # Set foreground color 'setaf': r'\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m', # Set attributes 'sgr': r'%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m', # Clear all attributes 'sgr0': r'\E(B\E[m', # Reset color pair to its original value 'op': r'\E[39;49m', # Turn on automatic margins 'smam': r'\E[?7h', # Start alternate screen 'smcup': r'\E[?1049h', # Enster insert mode 'smir': r'\E[4h', # Enter application keymap mode 'smkx': r'\E[?1h', # Enter standout mode 'smso': r'\E[7m', # Enter underline mode 'smul': r'\E[4m', # Clear all tab stops 'tbc': r'\E[3g', # To status line (used to set window titles) 'tsl': r'\E]2;', # From status line (end window title string) 'fsl': r'^G', # Disable status line (clear window title) 'dsl': r'\E]2;\007', # Move to specified line 'vpa': r'\E[%i%p1%dd', # Enter italics mode 'sitm': r'\E[3m', # Leave italics mode 'ritm': r'\E[23m', # Select alternate charset 'smacs': r'\E(0', 'rmacs': r'\E(B', # Special keys 'khlp': r'', 'kund': r'', 'ka1': r'', 'ka3': r'', 'kc1': r'', 'kc3': r'', # Set RGB foreground color (non-standard used by neovim) 'setrgbf': r'\E[38:2:%p1%d:%p2%d:%p3%dm', # Set RGB background color (non-standard used by neovim) 'setrgbb': r'\E[48:2:%p1%d:%p2%d:%p3%dm', # The following are entries that we don't use # # turn on blank mode, (characters invisible) # 'invis': r'\E[8m', # # init2 string # 'is2': r'\E[!p\E[?3;4l\E[4l\E>', # # Enter/send key # 'kent': r'\EOM', # # reset2 # 'rs2': r'\E[!p\E[?3;4l\E[4l\E>', } string_capabilities.update({ 'kf{}'.format(offset + n): encode_keystring(modify_key_bytes(b'\033' + value, mod)) for offset, mod in {0: 0, 12: 2, 24: 5, 36: 6, 48: 3, 60: 4}.items() for n, value in zip(range(1, 13), b'OP OQ OR OS [15~ [17~ [18~ [19~ [20~ [21~ [23~ [24~'.split()) if offset + n < 64 }) string_capabilities.update({ name.format(unmod=unmod, key=key): encode_keystring(modify_key_bytes(b'\033' + value, mod)) for unmod, key, value in zip( 'cuu1 cud1 cuf1 cub1 end home ich1 dch1 pp np'.split(), 'UP DN RIT LFT END HOM IC DC PRV NXT'.split(), b'OA OB OC OD OF OH [2~ [3~ [5~ [6~'.split()) for name, mod in { 'k{unmod}': 0, 'k{key}': 2, 'k{key}3': 3, 'k{key}4': 4, 'k{key}5': 5, 'k{key}6': 6, 'k{key}7': 7}.items() }) termcap_aliases.update({ 'ac': 'acsc', 'bl': 'bel', 'md': 'bold', 'bt': 'cbt', 'kB': 'kcbt', 'cl': 'clear', 'vi': 'civis', 'vs': 'cvvis', 've': 'cnorm', 'cr': 'cr', 'cs': 'csr', 'LE': 'cub', 'le': 'cub1', 'DO': 'cud', 'do': 'cud1', 'UP': 'cuu', 'up': 'cuu1', 'nd': 'cuf1', 'RI': 'cuf', 'cm': 'cup', 'DC': 'dch', 'dc': 'dch1', 'mh': 'dim', 'DL': 'dl', 'dl': 'dl1', 'ec': 'ech', 'cd': 'ed', 'ce': 'el', 'cb': 'el1', 'vb': 'flash', 'ho': 'home', 'ch': 'hpa', 'ta': 'ht', 'st': 'hts', 'IC': 'ich', 'AL': 'il', 'al': 'il1', 'sf': 'ind', 'SF': 'indn', 'Ic': 'initc', 'oc': 'oc', # 'mk': 'invis', 'kb': 'kbs', 'kl': 'kcub1', 'kd': 'kcud1', 'kr': 'kcuf1', 'ku': 'kcuu1', 'kh': 'khome', '@7': 'kend', 'kI': 'kich1', 'kD': 'kdch1', 'Km': 'kmous', 'kN': 'knp', 'kP': 'kpp', 'kR': 'kri', 'kF': 'kind', 'rc': 'rc', 'mr': 'rev', 'sr': 'ri', 'SR': 'rin', 'RA': 'rmam', 'te': 'rmcup', 'ei': 'rmir', 'se': 'rmso', 'ue': 'rmul', 'r1': 'rs1', 'sc': 'sc', 'AB': 'setab', 'AF': 'setaf', 'sa': 'sgr', 'me': 'sgr0', 'op': 'op', 'SA': 'smam', 'ti': 'smcup', 'im': 'smir', 'so': 'smso', 'us': 'smul', 'ct': 'tbc', 'cv': 'vpa', 'ZH': 'sitm', 'ZR': 'ritm', 'as': 'smacs', 'ae': 'rmacs', 'ks': 'smkx', 'ke': 'rmkx', '#2': 'kHOM', '#3': 'kIC', '#4': 'kLFT', '*4': 'kDC', '*7': 'kEND', '%c': 'kNXT', '%e': 'kPRV', '%i': 'kRIT', '%1': 'khlp', '&8': 'kund', 'K1': 'ka1', 'K3': 'ka3', 'K4': 'kc1', 'K5': 'kc3', 'ts': 'tsl', 'fs': 'fsl', 'ds': 'dsl', # 'ut': 'bce', # 'ds': 'dsl', # 'fs': 'fsl', # 'mk': 'invis', # 'is': 'is2', # '@8': 'kent', # 'r2': 'rs2', }) termcap_aliases.update({ tc: 'kf{}'.format(n) for n, tc in enumerate( 'k1 k2 k3 k4 k5 k6 k7 k8 k9 k; F1 F2 F3 F4 F5 F6 F7 F8 F9 FA ' 'FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU ' 'FV FW FX FY FZ Fa Fb Fc Fd Fe Ff Fg Fh Fi Fj Fk Fl Fm Fn Fo ' 'Fp Fq Fr'.split(), 1)}) queryable_capabilities = numeric_capabilities.copy() queryable_capabilities.update(string_capabilities) extra = (bool_capabilities | numeric_capabilities.keys() | string_capabilities.keys()) - set(termcap_aliases.values()) no_termcap_for = frozenset( 'Su Tc setrgbf setrgbb fullkbd kUP kDN'.split() + [ 'k{}{}'.format(key, mod) for key in 'UP DN RIT LFT END HOM IC DC PRV NXT'.split() for mod in range(3, 8)]) if extra - no_termcap_for: raise Exception('Termcap aliases not complete, missing: {}'.format(extra - no_termcap_for)) del extra def generate_terminfo(): # Use ./build-terminfo to update definition files ans = ['|'.join(names)] ans.extend(sorted(bool_capabilities)) ans.extend('{}#{}'.format(k, numeric_capabilities[k]) for k in sorted(numeric_capabilities)) ans.extend('{}={}'.format(k, string_capabilities[k]) for k in sorted(string_capabilities)) return ',\n\t'.join(ans) + ',\n' octal_escape = re.compile(r'\\([0-7]{3})') escape_escape = re.compile(r'\\[eE]') def key_as_bytes(name): ans = string_capabilities[name] ans = octal_escape.sub(lambda m: chr(int(m.group(1), 8)), ans) ans = escape_escape.sub('\033', ans) return ans.encode('ascii') def get_capabilities(query_string): from .fast_data_types import ERROR_PREFIX ans = [] try: for q in query_string.split(';'): name = qname = unhexlify(q).decode('utf-8') if name in ('TN', 'name'): val = names[0] else: try: val = queryable_capabilities[name] except KeyError: try: qname = termcap_aliases[name] val = queryable_capabilities[qname] except Exception: from .utils import log_error log_error(ERROR_PREFIX, 'Unknown terminfo property:', name) raise if qname in string_capabilities and '%' not in val: val = key_as_bytes(qname).decode('ascii') ans.append(q + '=' + hexlify(str(val).encode('utf-8')).decode('ascii')) return '1+r' + ';'.join(ans) except Exception: return '0+r' + query_string kitty-0.15.0/kitty/threading.h000066400000000000000000000021171356737523400162430ustar00rootroot00000000000000/* * Copyright (C) 2018 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #pragma once #include #include #if defined(__FreeBSD__) || defined(__OpenBSD__) #define FREEBSD_SET_NAME #endif #if defined(__APPLE__) // I can't figure out how to get pthread.h to include this definition on macOS. MACOSX_DEPLOYMENT_TARGET does not work. extern int pthread_setname_np(const char *name); #elif defined(FREEBSD_SET_NAME) // Function has a different name on FreeBSD void pthread_set_name_np(pthread_t tid, const char *name); #else // Need _GNU_SOURCE for pthread_setname_np on linux and that causes other issues on systems with old glibc extern int pthread_setname_np(pthread_t, const char *name); #endif static inline void set_thread_name(const char *name) { int ret; #if defined(__APPLE__) ret = pthread_setname_np(name); #elif defined(FREEBSD_SET_NAME) pthread_set_name_np(pthread_self(), name); ret = 0; #else ret = pthread_setname_np(pthread_self(), name); #endif if (ret != 0) perror("Failed to set thread name"); } kitty-0.15.0/kitty/unicode-data.c000066400000000000000000002777471356737523400166550ustar00rootroot00000000000000// unicode data, built from the unicode standard on: 2019-10-01 // see gen-wcwidth.py #include "data-types.h" START_ALLOW_CASE_RANGE #include "unicode-data.h" bool is_combining_char(char_type code) { // M category (marks) (2274 codepoints) {{{ switch(code) { case 0x300 ... 0x36f: return true; case 0x483 ... 0x489: return true; case 0x591 ... 0x5bd: return true; case 0x5bf: return true; case 0x5c1 ... 0x5c2: return true; case 0x5c4 ... 0x5c5: return true; case 0x5c7: return true; case 0x610 ... 0x61a: return true; case 0x64b ... 0x65f: return true; case 0x670: return true; case 0x6d6 ... 0x6dc: return true; case 0x6df ... 0x6e4: return true; case 0x6e7 ... 0x6e8: return true; case 0x6ea ... 0x6ed: return true; case 0x711: return true; case 0x730 ... 0x74a: return true; case 0x7a6 ... 0x7b0: return true; case 0x7eb ... 0x7f3: return true; case 0x7fd: return true; case 0x816 ... 0x819: return true; case 0x81b ... 0x823: return true; case 0x825 ... 0x827: return true; case 0x829 ... 0x82d: return true; case 0x859 ... 0x85b: return true; case 0x8d3 ... 0x8e1: return true; case 0x8e3 ... 0x903: return true; case 0x93a ... 0x93c: return true; case 0x93e ... 0x94f: return true; case 0x951 ... 0x957: return true; case 0x962 ... 0x963: return true; case 0x981 ... 0x983: return true; case 0x9bc: return true; case 0x9be ... 0x9c4: return true; case 0x9c7 ... 0x9c8: return true; case 0x9cb ... 0x9cd: return true; case 0x9d7: return true; case 0x9e2 ... 0x9e3: return true; case 0x9fe: return true; case 0xa01 ... 0xa03: return true; case 0xa3c: return true; case 0xa3e ... 0xa42: return true; case 0xa47 ... 0xa48: return true; case 0xa4b ... 0xa4d: return true; case 0xa51: return true; case 0xa70 ... 0xa71: return true; case 0xa75: return true; case 0xa81 ... 0xa83: return true; case 0xabc: return true; case 0xabe ... 0xac5: return true; case 0xac7 ... 0xac9: return true; case 0xacb ... 0xacd: return true; case 0xae2 ... 0xae3: return true; case 0xafa ... 0xaff: return true; case 0xb01 ... 0xb03: return true; case 0xb3c: return true; case 0xb3e ... 0xb44: return true; case 0xb47 ... 0xb48: return true; case 0xb4b ... 0xb4d: return true; case 0xb56 ... 0xb57: return true; case 0xb62 ... 0xb63: return true; case 0xb82: return true; case 0xbbe ... 0xbc2: return true; case 0xbc6 ... 0xbc8: return true; case 0xbca ... 0xbcd: return true; case 0xbd7: return true; case 0xc00 ... 0xc04: return true; case 0xc3e ... 0xc44: return true; case 0xc46 ... 0xc48: return true; case 0xc4a ... 0xc4d: return true; case 0xc55 ... 0xc56: return true; case 0xc62 ... 0xc63: return true; case 0xc81 ... 0xc83: return true; case 0xcbc: return true; case 0xcbe ... 0xcc4: return true; case 0xcc6 ... 0xcc8: return true; case 0xcca ... 0xccd: return true; case 0xcd5 ... 0xcd6: return true; case 0xce2 ... 0xce3: return true; case 0xd00 ... 0xd03: return true; case 0xd3b ... 0xd3c: return true; case 0xd3e ... 0xd44: return true; case 0xd46 ... 0xd48: return true; case 0xd4a ... 0xd4d: return true; case 0xd57: return true; case 0xd62 ... 0xd63: return true; case 0xd82 ... 0xd83: return true; case 0xdca: return true; case 0xdcf ... 0xdd4: return true; case 0xdd6: return true; case 0xdd8 ... 0xddf: return true; case 0xdf2 ... 0xdf3: return true; case 0xe31: return true; case 0xe34 ... 0xe3a: return true; case 0xe47 ... 0xe4e: return true; case 0xeb1: return true; case 0xeb4 ... 0xebc: return true; case 0xec8 ... 0xecd: return true; case 0xf18 ... 0xf19: return true; case 0xf35: return true; case 0xf37: return true; case 0xf39: return true; case 0xf3e ... 0xf3f: return true; case 0xf71 ... 0xf84: return true; case 0xf86 ... 0xf87: return true; case 0xf8d ... 0xf97: return true; case 0xf99 ... 0xfbc: return true; case 0xfc6: return true; case 0x102b ... 0x103e: return true; case 0x1056 ... 0x1059: return true; case 0x105e ... 0x1060: return true; case 0x1062 ... 0x1064: return true; case 0x1067 ... 0x106d: return true; case 0x1071 ... 0x1074: return true; case 0x1082 ... 0x108d: return true; case 0x108f: return true; case 0x109a ... 0x109d: return true; case 0x135d ... 0x135f: return true; case 0x1712 ... 0x1714: return true; case 0x1732 ... 0x1734: return true; case 0x1752 ... 0x1753: return true; case 0x1772 ... 0x1773: return true; case 0x17b4 ... 0x17d3: return true; case 0x17dd: return true; case 0x180b ... 0x180d: return true; case 0x1885 ... 0x1886: return true; case 0x18a9: return true; case 0x1920 ... 0x192b: return true; case 0x1930 ... 0x193b: return true; case 0x1a17 ... 0x1a1b: return true; case 0x1a55 ... 0x1a5e: return true; case 0x1a60 ... 0x1a7c: return true; case 0x1a7f: return true; case 0x1ab0 ... 0x1abe: return true; case 0x1b00 ... 0x1b04: return true; case 0x1b34 ... 0x1b44: return true; case 0x1b6b ... 0x1b73: return true; case 0x1b80 ... 0x1b82: return true; case 0x1ba1 ... 0x1bad: return true; case 0x1be6 ... 0x1bf3: return true; case 0x1c24 ... 0x1c37: return true; case 0x1cd0 ... 0x1cd2: return true; case 0x1cd4 ... 0x1ce8: return true; case 0x1ced: return true; case 0x1cf4: return true; case 0x1cf7 ... 0x1cf9: return true; case 0x1dc0 ... 0x1df9: return true; case 0x1dfb ... 0x1dff: return true; case 0x200d: return true; case 0x20d0 ... 0x20f0: return true; case 0x2cef ... 0x2cf1: return true; case 0x2d7f: return true; case 0x2de0 ... 0x2dff: return true; case 0x302a ... 0x302f: return true; case 0x3099 ... 0x309a: return true; case 0xa66f ... 0xa672: return true; case 0xa674 ... 0xa67d: return true; case 0xa69e ... 0xa69f: return true; case 0xa6f0 ... 0xa6f1: return true; case 0xa802: return true; case 0xa806: return true; case 0xa80b: return true; case 0xa823 ... 0xa827: return true; case 0xa880 ... 0xa881: return true; case 0xa8b4 ... 0xa8c5: return true; case 0xa8e0 ... 0xa8f1: return true; case 0xa8ff: return true; case 0xa926 ... 0xa92d: return true; case 0xa947 ... 0xa953: return true; case 0xa980 ... 0xa983: return true; case 0xa9b3 ... 0xa9c0: return true; case 0xa9e5: return true; case 0xaa29 ... 0xaa36: return true; case 0xaa43: return true; case 0xaa4c ... 0xaa4d: return true; case 0xaa7b ... 0xaa7d: return true; case 0xaab0: return true; case 0xaab2 ... 0xaab4: return true; case 0xaab7 ... 0xaab8: return true; case 0xaabe ... 0xaabf: return true; case 0xaac1: return true; case 0xaaeb ... 0xaaef: return true; case 0xaaf5 ... 0xaaf6: return true; case 0xabe3 ... 0xabea: return true; case 0xabec ... 0xabed: return true; case 0xfb1e: return true; case 0xfe00 ... 0xfe0f: return true; case 0xfe20 ... 0xfe2f: return true; case 0x101fd: return true; case 0x102e0: return true; case 0x10376 ... 0x1037a: return true; case 0x10a01 ... 0x10a03: return true; case 0x10a05 ... 0x10a06: return true; case 0x10a0c ... 0x10a0f: return true; case 0x10a38 ... 0x10a3a: return true; case 0x10a3f: return true; case 0x10ae5 ... 0x10ae6: return true; case 0x10d24 ... 0x10d27: return true; case 0x10f46 ... 0x10f50: return true; case 0x11000 ... 0x11002: return true; case 0x11038 ... 0x11046: return true; case 0x1107f ... 0x11082: return true; case 0x110b0 ... 0x110ba: return true; case 0x11100 ... 0x11102: return true; case 0x11127 ... 0x11134: return true; case 0x11145 ... 0x11146: return true; case 0x11173: return true; case 0x11180 ... 0x11182: return true; case 0x111b3 ... 0x111c0: return true; case 0x111c9 ... 0x111cc: return true; case 0x1122c ... 0x11237: return true; case 0x1123e: return true; case 0x112df ... 0x112ea: return true; case 0x11300 ... 0x11303: return true; case 0x1133b ... 0x1133c: return true; case 0x1133e ... 0x11344: return true; case 0x11347 ... 0x11348: return true; case 0x1134b ... 0x1134d: return true; case 0x11357: return true; case 0x11362 ... 0x11363: return true; case 0x11366 ... 0x1136c: return true; case 0x11370 ... 0x11374: return true; case 0x11435 ... 0x11446: return true; case 0x1145e: return true; case 0x114b0 ... 0x114c3: return true; case 0x115af ... 0x115b5: return true; case 0x115b8 ... 0x115c0: return true; case 0x115dc ... 0x115dd: return true; case 0x11630 ... 0x11640: return true; case 0x116ab ... 0x116b7: return true; case 0x1171d ... 0x1172b: return true; case 0x1182c ... 0x1183a: return true; case 0x119d1 ... 0x119d7: return true; case 0x119da ... 0x119e0: return true; case 0x119e4: return true; case 0x11a01 ... 0x11a0a: return true; case 0x11a33 ... 0x11a39: return true; case 0x11a3b ... 0x11a3e: return true; case 0x11a47: return true; case 0x11a51 ... 0x11a5b: return true; case 0x11a8a ... 0x11a99: return true; case 0x11c2f ... 0x11c36: return true; case 0x11c38 ... 0x11c3f: return true; case 0x11c92 ... 0x11ca7: return true; case 0x11ca9 ... 0x11cb6: return true; case 0x11d31 ... 0x11d36: return true; case 0x11d3a: return true; case 0x11d3c ... 0x11d3d: return true; case 0x11d3f ... 0x11d45: return true; case 0x11d47: return true; case 0x11d8a ... 0x11d8e: return true; case 0x11d90 ... 0x11d91: return true; case 0x11d93 ... 0x11d97: return true; case 0x11ef3 ... 0x11ef6: return true; case 0x16af0 ... 0x16af4: return true; case 0x16b30 ... 0x16b36: return true; case 0x16f4f: return true; case 0x16f51 ... 0x16f87: return true; case 0x16f8f ... 0x16f92: return true; case 0x1bc9d ... 0x1bc9e: return true; case 0x1d165 ... 0x1d169: return true; case 0x1d16d ... 0x1d172: return true; case 0x1d17b ... 0x1d182: return true; case 0x1d185 ... 0x1d18b: return true; case 0x1d1aa ... 0x1d1ad: return true; case 0x1d242 ... 0x1d244: return true; case 0x1da00 ... 0x1da36: return true; case 0x1da3b ... 0x1da6c: return true; case 0x1da75: return true; case 0x1da84: return true; case 0x1da9b ... 0x1da9f: return true; case 0x1daa1 ... 0x1daaf: return true; case 0x1e000 ... 0x1e006: return true; case 0x1e008 ... 0x1e018: return true; case 0x1e01b ... 0x1e021: return true; case 0x1e023 ... 0x1e024: return true; case 0x1e026 ... 0x1e02a: return true; case 0x1e130 ... 0x1e136: return true; case 0x1e2ec ... 0x1e2ef: return true; case 0x1e8d0 ... 0x1e8d6: return true; case 0x1e944 ... 0x1e94a: return true; case 0x1f3fb ... 0x1f3ff: return true; case 0xe0100 ... 0xe01ef: return true; } // }}} return false; } bool is_ignored_char(char_type code) { // Control characters and non-characters (2339 codepoints) {{{ switch(code) { case 0x0 ... 0x1f: return true; case 0x7f ... 0x9f: return true; case 0xad: return true; case 0x600 ... 0x605: return true; case 0x61c: return true; case 0x6dd: return true; case 0x70f: return true; case 0x8e2: return true; case 0x180e: return true; case 0x200b ... 0x200c: return true; case 0x200e ... 0x200f: return true; case 0x202a ... 0x202e: return true; case 0x2060 ... 0x2064: return true; case 0x2066 ... 0x206f: return true; case 0xd800 ... 0xdfff: return true; case 0xfdd0 ... 0xfdef: return true; case 0xfeff: return true; case 0xfff9 ... 0xfffb: return true; case 0xfffe ... 0xffff: return true; case 0x110bd: return true; case 0x110cd: return true; case 0x13430 ... 0x13438: return true; case 0x1bca0 ... 0x1bca3: return true; case 0x1d173 ... 0x1d17a: return true; case 0x1fffe ... 0x1ffff: return true; case 0x2fffe ... 0x2ffff: return true; case 0x3fffe ... 0x3ffff: return true; case 0x4fffe ... 0x4ffff: return true; case 0x5fffe ... 0x5ffff: return true; case 0x6fffe ... 0x6ffff: return true; case 0x7fffe ... 0x7ffff: return true; case 0x8fffe ... 0x8ffff: return true; case 0x9fffe ... 0x9ffff: return true; case 0xafffe ... 0xaffff: return true; case 0xbfffe ... 0xbffff: return true; case 0xcfffe ... 0xcffff: return true; case 0xdfffe ... 0xdffff: return true; case 0xe0001: return true; case 0xe0020 ... 0xe007f: return true; case 0xefffe ... 0xeffff: return true; case 0xffffe ... 0xfffff: return true; case 0x10fffe ... 0x10ffff: return true; } // }}} return false; } bool is_word_char(char_type code) { // L and N categories (127397 codepoints) {{{ switch(code) { case 0x30 ... 0x39: return true; case 0x41 ... 0x5a: return true; case 0x61 ... 0x7a: return true; case 0xaa: return true; case 0xb2 ... 0xb3: return true; case 0xb5: return true; case 0xb9 ... 0xba: return true; case 0xbc ... 0xbe: return true; case 0xc0 ... 0xd6: return true; case 0xd8 ... 0xf6: return true; case 0xf8 ... 0x2c1: return true; case 0x2c6 ... 0x2d1: return true; case 0x2e0 ... 0x2e4: return true; case 0x2ec: return true; case 0x2ee: return true; case 0x370 ... 0x374: return true; case 0x376 ... 0x377: return true; case 0x37a ... 0x37d: return true; case 0x37f: return true; case 0x386: return true; case 0x388 ... 0x38a: return true; case 0x38c: return true; case 0x38e ... 0x3a1: return true; case 0x3a3 ... 0x3f5: return true; case 0x3f7 ... 0x481: return true; case 0x48a ... 0x52f: return true; case 0x531 ... 0x556: return true; case 0x559: return true; case 0x560 ... 0x588: return true; case 0x5d0 ... 0x5ea: return true; case 0x5ef ... 0x5f2: return true; case 0x620 ... 0x64a: return true; case 0x660 ... 0x669: return true; case 0x66e ... 0x66f: return true; case 0x671 ... 0x6d3: return true; case 0x6d5: return true; case 0x6e5 ... 0x6e6: return true; case 0x6ee ... 0x6fc: return true; case 0x6ff: return true; case 0x710: return true; case 0x712 ... 0x72f: return true; case 0x74d ... 0x7a5: return true; case 0x7b1: return true; case 0x7c0 ... 0x7ea: return true; case 0x7f4 ... 0x7f5: return true; case 0x7fa: return true; case 0x800 ... 0x815: return true; case 0x81a: return true; case 0x824: return true; case 0x828: return true; case 0x840 ... 0x858: return true; case 0x860 ... 0x86a: return true; case 0x8a0 ... 0x8b4: return true; case 0x8b6 ... 0x8bd: return true; case 0x904 ... 0x939: return true; case 0x93d: return true; case 0x950: return true; case 0x958 ... 0x961: return true; case 0x966 ... 0x96f: return true; case 0x971 ... 0x980: return true; case 0x985 ... 0x98c: return true; case 0x98f ... 0x990: return true; case 0x993 ... 0x9a8: return true; case 0x9aa ... 0x9b0: return true; case 0x9b2: return true; case 0x9b6 ... 0x9b9: return true; case 0x9bd: return true; case 0x9ce: return true; case 0x9dc ... 0x9dd: return true; case 0x9df ... 0x9e1: return true; case 0x9e6 ... 0x9f1: return true; case 0x9f4 ... 0x9f9: return true; case 0x9fc: return true; case 0xa05 ... 0xa0a: return true; case 0xa0f ... 0xa10: return true; case 0xa13 ... 0xa28: return true; case 0xa2a ... 0xa30: return true; case 0xa32 ... 0xa33: return true; case 0xa35 ... 0xa36: return true; case 0xa38 ... 0xa39: return true; case 0xa59 ... 0xa5c: return true; case 0xa5e: return true; case 0xa66 ... 0xa6f: return true; case 0xa72 ... 0xa74: return true; case 0xa85 ... 0xa8d: return true; case 0xa8f ... 0xa91: return true; case 0xa93 ... 0xaa8: return true; case 0xaaa ... 0xab0: return true; case 0xab2 ... 0xab3: return true; case 0xab5 ... 0xab9: return true; case 0xabd: return true; case 0xad0: return true; case 0xae0 ... 0xae1: return true; case 0xae6 ... 0xaef: return true; case 0xaf9: return true; case 0xb05 ... 0xb0c: return true; case 0xb0f ... 0xb10: return true; case 0xb13 ... 0xb28: return true; case 0xb2a ... 0xb30: return true; case 0xb32 ... 0xb33: return true; case 0xb35 ... 0xb39: return true; case 0xb3d: return true; case 0xb5c ... 0xb5d: return true; case 0xb5f ... 0xb61: return true; case 0xb66 ... 0xb6f: return true; case 0xb71 ... 0xb77: return true; case 0xb83: return true; case 0xb85 ... 0xb8a: return true; case 0xb8e ... 0xb90: return true; case 0xb92 ... 0xb95: return true; case 0xb99 ... 0xb9a: return true; case 0xb9c: return true; case 0xb9e ... 0xb9f: return true; case 0xba3 ... 0xba4: return true; case 0xba8 ... 0xbaa: return true; case 0xbae ... 0xbb9: return true; case 0xbd0: return true; case 0xbe6 ... 0xbf2: return true; case 0xc05 ... 0xc0c: return true; case 0xc0e ... 0xc10: return true; case 0xc12 ... 0xc28: return true; case 0xc2a ... 0xc39: return true; case 0xc3d: return true; case 0xc58 ... 0xc5a: return true; case 0xc60 ... 0xc61: return true; case 0xc66 ... 0xc6f: return true; case 0xc78 ... 0xc7e: return true; case 0xc80: return true; case 0xc85 ... 0xc8c: return true; case 0xc8e ... 0xc90: return true; case 0xc92 ... 0xca8: return true; case 0xcaa ... 0xcb3: return true; case 0xcb5 ... 0xcb9: return true; case 0xcbd: return true; case 0xcde: return true; case 0xce0 ... 0xce1: return true; case 0xce6 ... 0xcef: return true; case 0xcf1 ... 0xcf2: return true; case 0xd05 ... 0xd0c: return true; case 0xd0e ... 0xd10: return true; case 0xd12 ... 0xd3a: return true; case 0xd3d: return true; case 0xd4e: return true; case 0xd54 ... 0xd56: return true; case 0xd58 ... 0xd61: return true; case 0xd66 ... 0xd78: return true; case 0xd7a ... 0xd7f: return true; case 0xd85 ... 0xd96: return true; case 0xd9a ... 0xdb1: return true; case 0xdb3 ... 0xdbb: return true; case 0xdbd: return true; case 0xdc0 ... 0xdc6: return true; case 0xde6 ... 0xdef: return true; case 0xe01 ... 0xe30: return true; case 0xe32 ... 0xe33: return true; case 0xe40 ... 0xe46: return true; case 0xe50 ... 0xe59: return true; case 0xe81 ... 0xe82: return true; case 0xe84: return true; case 0xe86 ... 0xe8a: return true; case 0xe8c ... 0xea3: return true; case 0xea5: return true; case 0xea7 ... 0xeb0: return true; case 0xeb2 ... 0xeb3: return true; case 0xebd: return true; case 0xec0 ... 0xec4: return true; case 0xec6: return true; case 0xed0 ... 0xed9: return true; case 0xedc ... 0xedf: return true; case 0xf00: return true; case 0xf20 ... 0xf33: return true; case 0xf40 ... 0xf47: return true; case 0xf49 ... 0xf6c: return true; case 0xf88 ... 0xf8c: return true; case 0x1000 ... 0x102a: return true; case 0x103f ... 0x1049: return true; case 0x1050 ... 0x1055: return true; case 0x105a ... 0x105d: return true; case 0x1061: return true; case 0x1065 ... 0x1066: return true; case 0x106e ... 0x1070: return true; case 0x1075 ... 0x1081: return true; case 0x108e: return true; case 0x1090 ... 0x1099: return true; case 0x10a0 ... 0x10c5: return true; case 0x10c7: return true; case 0x10cd: return true; case 0x10d0 ... 0x10fa: return true; case 0x10fc ... 0x1248: return true; case 0x124a ... 0x124d: return true; case 0x1250 ... 0x1256: return true; case 0x1258: return true; case 0x125a ... 0x125d: return true; case 0x1260 ... 0x1288: return true; case 0x128a ... 0x128d: return true; case 0x1290 ... 0x12b0: return true; case 0x12b2 ... 0x12b5: return true; case 0x12b8 ... 0x12be: return true; case 0x12c0: return true; case 0x12c2 ... 0x12c5: return true; case 0x12c8 ... 0x12d6: return true; case 0x12d8 ... 0x1310: return true; case 0x1312 ... 0x1315: return true; case 0x1318 ... 0x135a: return true; case 0x1369 ... 0x137c: return true; case 0x1380 ... 0x138f: return true; case 0x13a0 ... 0x13f5: return true; case 0x13f8 ... 0x13fd: return true; case 0x1401 ... 0x166c: return true; case 0x166f ... 0x167f: return true; case 0x1681 ... 0x169a: return true; case 0x16a0 ... 0x16ea: return true; case 0x16ee ... 0x16f8: return true; case 0x1700 ... 0x170c: return true; case 0x170e ... 0x1711: return true; case 0x1720 ... 0x1731: return true; case 0x1740 ... 0x1751: return true; case 0x1760 ... 0x176c: return true; case 0x176e ... 0x1770: return true; case 0x1780 ... 0x17b3: return true; case 0x17d7: return true; case 0x17dc: return true; case 0x17e0 ... 0x17e9: return true; case 0x17f0 ... 0x17f9: return true; case 0x1810 ... 0x1819: return true; case 0x1820 ... 0x1878: return true; case 0x1880 ... 0x1884: return true; case 0x1887 ... 0x18a8: return true; case 0x18aa: return true; case 0x18b0 ... 0x18f5: return true; case 0x1900 ... 0x191e: return true; case 0x1946 ... 0x196d: return true; case 0x1970 ... 0x1974: return true; case 0x1980 ... 0x19ab: return true; case 0x19b0 ... 0x19c9: return true; case 0x19d0 ... 0x19da: return true; case 0x1a00 ... 0x1a16: return true; case 0x1a20 ... 0x1a54: return true; case 0x1a80 ... 0x1a89: return true; case 0x1a90 ... 0x1a99: return true; case 0x1aa7: return true; case 0x1b05 ... 0x1b33: return true; case 0x1b45 ... 0x1b4b: return true; case 0x1b50 ... 0x1b59: return true; case 0x1b83 ... 0x1ba0: return true; case 0x1bae ... 0x1be5: return true; case 0x1c00 ... 0x1c23: return true; case 0x1c40 ... 0x1c49: return true; case 0x1c4d ... 0x1c7d: return true; case 0x1c80 ... 0x1c88: return true; case 0x1c90 ... 0x1cba: return true; case 0x1cbd ... 0x1cbf: return true; case 0x1ce9 ... 0x1cec: return true; case 0x1cee ... 0x1cf3: return true; case 0x1cf5 ... 0x1cf6: return true; case 0x1cfa: return true; case 0x1d00 ... 0x1dbf: return true; case 0x1e00 ... 0x1f15: return true; case 0x1f18 ... 0x1f1d: return true; case 0x1f20 ... 0x1f45: return true; case 0x1f48 ... 0x1f4d: return true; case 0x1f50 ... 0x1f57: return true; case 0x1f59: return true; case 0x1f5b: return true; case 0x1f5d: return true; case 0x1f5f ... 0x1f7d: return true; case 0x1f80 ... 0x1fb4: return true; case 0x1fb6 ... 0x1fbc: return true; case 0x1fbe: return true; case 0x1fc2 ... 0x1fc4: return true; case 0x1fc6 ... 0x1fcc: return true; case 0x1fd0 ... 0x1fd3: return true; case 0x1fd6 ... 0x1fdb: return true; case 0x1fe0 ... 0x1fec: return true; case 0x1ff2 ... 0x1ff4: return true; case 0x1ff6 ... 0x1ffc: return true; case 0x2070 ... 0x2071: return true; case 0x2074 ... 0x2079: return true; case 0x207f ... 0x2089: return true; case 0x2090 ... 0x209c: return true; case 0x2102: return true; case 0x2107: return true; case 0x210a ... 0x2113: return true; case 0x2115: return true; case 0x2119 ... 0x211d: return true; case 0x2124: return true; case 0x2126: return true; case 0x2128: return true; case 0x212a ... 0x212d: return true; case 0x212f ... 0x2139: return true; case 0x213c ... 0x213f: return true; case 0x2145 ... 0x2149: return true; case 0x214e: return true; case 0x2150 ... 0x2189: return true; case 0x2460 ... 0x249b: return true; case 0x24ea ... 0x24ff: return true; case 0x2776 ... 0x2793: return true; case 0x2c00 ... 0x2c2e: return true; case 0x2c30 ... 0x2c5e: return true; case 0x2c60 ... 0x2ce4: return true; case 0x2ceb ... 0x2cee: return true; case 0x2cf2 ... 0x2cf3: return true; case 0x2cfd: return true; case 0x2d00 ... 0x2d25: return true; case 0x2d27: return true; case 0x2d2d: return true; case 0x2d30 ... 0x2d67: return true; case 0x2d6f: return true; case 0x2d80 ... 0x2d96: return true; case 0x2da0 ... 0x2da6: return true; case 0x2da8 ... 0x2dae: return true; case 0x2db0 ... 0x2db6: return true; case 0x2db8 ... 0x2dbe: return true; case 0x2dc0 ... 0x2dc6: return true; case 0x2dc8 ... 0x2dce: return true; case 0x2dd0 ... 0x2dd6: return true; case 0x2dd8 ... 0x2dde: return true; case 0x2e2f: return true; case 0x3005 ... 0x3007: return true; case 0x3021 ... 0x3029: return true; case 0x3031 ... 0x3035: return true; case 0x3038 ... 0x303c: return true; case 0x3041 ... 0x3096: return true; case 0x309d ... 0x309f: return true; case 0x30a1 ... 0x30fa: return true; case 0x30fc ... 0x30ff: return true; case 0x3105 ... 0x312f: return true; case 0x3131 ... 0x318e: return true; case 0x3192 ... 0x3195: return true; case 0x31a0 ... 0x31ba: return true; case 0x31f0 ... 0x31ff: return true; case 0x3220 ... 0x3229: return true; case 0x3248 ... 0x324f: return true; case 0x3251 ... 0x325f: return true; case 0x3280 ... 0x3289: return true; case 0x32b1 ... 0x32bf: return true; case 0x3400 ... 0x4db5: return true; case 0x4e00 ... 0x9fef: return true; case 0xa000 ... 0xa48c: return true; case 0xa4d0 ... 0xa4fd: return true; case 0xa500 ... 0xa60c: return true; case 0xa610 ... 0xa62b: return true; case 0xa640 ... 0xa66e: return true; case 0xa67f ... 0xa69d: return true; case 0xa6a0 ... 0xa6ef: return true; case 0xa717 ... 0xa71f: return true; case 0xa722 ... 0xa788: return true; case 0xa78b ... 0xa7bf: return true; case 0xa7c2 ... 0xa7c6: return true; case 0xa7f7 ... 0xa801: return true; case 0xa803 ... 0xa805: return true; case 0xa807 ... 0xa80a: return true; case 0xa80c ... 0xa822: return true; case 0xa830 ... 0xa835: return true; case 0xa840 ... 0xa873: return true; case 0xa882 ... 0xa8b3: return true; case 0xa8d0 ... 0xa8d9: return true; case 0xa8f2 ... 0xa8f7: return true; case 0xa8fb: return true; case 0xa8fd ... 0xa8fe: return true; case 0xa900 ... 0xa925: return true; case 0xa930 ... 0xa946: return true; case 0xa960 ... 0xa97c: return true; case 0xa984 ... 0xa9b2: return true; case 0xa9cf ... 0xa9d9: return true; case 0xa9e0 ... 0xa9e4: return true; case 0xa9e6 ... 0xa9fe: return true; case 0xaa00 ... 0xaa28: return true; case 0xaa40 ... 0xaa42: return true; case 0xaa44 ... 0xaa4b: return true; case 0xaa50 ... 0xaa59: return true; case 0xaa60 ... 0xaa76: return true; case 0xaa7a: return true; case 0xaa7e ... 0xaaaf: return true; case 0xaab1: return true; case 0xaab5 ... 0xaab6: return true; case 0xaab9 ... 0xaabd: return true; case 0xaac0: return true; case 0xaac2: return true; case 0xaadb ... 0xaadd: return true; case 0xaae0 ... 0xaaea: return true; case 0xaaf2 ... 0xaaf4: return true; case 0xab01 ... 0xab06: return true; case 0xab09 ... 0xab0e: return true; case 0xab11 ... 0xab16: return true; case 0xab20 ... 0xab26: return true; case 0xab28 ... 0xab2e: return true; case 0xab30 ... 0xab5a: return true; case 0xab5c ... 0xab67: return true; case 0xab70 ... 0xabe2: return true; case 0xabf0 ... 0xabf9: return true; case 0xac00 ... 0xd7a3: return true; case 0xd7b0 ... 0xd7c6: return true; case 0xd7cb ... 0xd7fb: return true; case 0xf900 ... 0xfa6d: return true; case 0xfa70 ... 0xfad9: return true; case 0xfb00 ... 0xfb06: return true; case 0xfb13 ... 0xfb17: return true; case 0xfb1d: return true; case 0xfb1f ... 0xfb28: return true; case 0xfb2a ... 0xfb36: return true; case 0xfb38 ... 0xfb3c: return true; case 0xfb3e: return true; case 0xfb40 ... 0xfb41: return true; case 0xfb43 ... 0xfb44: return true; case 0xfb46 ... 0xfbb1: return true; case 0xfbd3 ... 0xfd3d: return true; case 0xfd50 ... 0xfd8f: return true; case 0xfd92 ... 0xfdc7: return true; case 0xfdf0 ... 0xfdfb: return true; case 0xfe70 ... 0xfe74: return true; case 0xfe76 ... 0xfefc: return true; case 0xff10 ... 0xff19: return true; case 0xff21 ... 0xff3a: return true; case 0xff41 ... 0xff5a: return true; case 0xff66 ... 0xffbe: return true; case 0xffc2 ... 0xffc7: return true; case 0xffca ... 0xffcf: return true; case 0xffd2 ... 0xffd7: return true; case 0xffda ... 0xffdc: return true; case 0x10000 ... 0x1000b: return true; case 0x1000d ... 0x10026: return true; case 0x10028 ... 0x1003a: return true; case 0x1003c ... 0x1003d: return true; case 0x1003f ... 0x1004d: return true; case 0x10050 ... 0x1005d: return true; case 0x10080 ... 0x100fa: return true; case 0x10107 ... 0x10133: return true; case 0x10140 ... 0x10178: return true; case 0x1018a ... 0x1018b: return true; case 0x10280 ... 0x1029c: return true; case 0x102a0 ... 0x102d0: return true; case 0x102e1 ... 0x102fb: return true; case 0x10300 ... 0x10323: return true; case 0x1032d ... 0x1034a: return true; case 0x10350 ... 0x10375: return true; case 0x10380 ... 0x1039d: return true; case 0x103a0 ... 0x103c3: return true; case 0x103c8 ... 0x103cf: return true; case 0x103d1 ... 0x103d5: return true; case 0x10400 ... 0x1049d: return true; case 0x104a0 ... 0x104a9: return true; case 0x104b0 ... 0x104d3: return true; case 0x104d8 ... 0x104fb: return true; case 0x10500 ... 0x10527: return true; case 0x10530 ... 0x10563: return true; case 0x10600 ... 0x10736: return true; case 0x10740 ... 0x10755: return true; case 0x10760 ... 0x10767: return true; case 0x10800 ... 0x10805: return true; case 0x10808: return true; case 0x1080a ... 0x10835: return true; case 0x10837 ... 0x10838: return true; case 0x1083c: return true; case 0x1083f ... 0x10855: return true; case 0x10858 ... 0x10876: return true; case 0x10879 ... 0x1089e: return true; case 0x108a7 ... 0x108af: return true; case 0x108e0 ... 0x108f2: return true; case 0x108f4 ... 0x108f5: return true; case 0x108fb ... 0x1091b: return true; case 0x10920 ... 0x10939: return true; case 0x10980 ... 0x109b7: return true; case 0x109bc ... 0x109cf: return true; case 0x109d2 ... 0x10a00: return true; case 0x10a10 ... 0x10a13: return true; case 0x10a15 ... 0x10a17: return true; case 0x10a19 ... 0x10a35: return true; case 0x10a40 ... 0x10a48: return true; case 0x10a60 ... 0x10a7e: return true; case 0x10a80 ... 0x10a9f: return true; case 0x10ac0 ... 0x10ac7: return true; case 0x10ac9 ... 0x10ae4: return true; case 0x10aeb ... 0x10aef: return true; case 0x10b00 ... 0x10b35: return true; case 0x10b40 ... 0x10b55: return true; case 0x10b58 ... 0x10b72: return true; case 0x10b78 ... 0x10b91: return true; case 0x10ba9 ... 0x10baf: return true; case 0x10c00 ... 0x10c48: return true; case 0x10c80 ... 0x10cb2: return true; case 0x10cc0 ... 0x10cf2: return true; case 0x10cfa ... 0x10d23: return true; case 0x10d30 ... 0x10d39: return true; case 0x10e60 ... 0x10e7e: return true; case 0x10f00 ... 0x10f27: return true; case 0x10f30 ... 0x10f45: return true; case 0x10f51 ... 0x10f54: return true; case 0x10fe0 ... 0x10ff6: return true; case 0x11003 ... 0x11037: return true; case 0x11052 ... 0x1106f: return true; case 0x11083 ... 0x110af: return true; case 0x110d0 ... 0x110e8: return true; case 0x110f0 ... 0x110f9: return true; case 0x11103 ... 0x11126: return true; case 0x11136 ... 0x1113f: return true; case 0x11144: return true; case 0x11150 ... 0x11172: return true; case 0x11176: return true; case 0x11183 ... 0x111b2: return true; case 0x111c1 ... 0x111c4: return true; case 0x111d0 ... 0x111da: return true; case 0x111dc: return true; case 0x111e1 ... 0x111f4: return true; case 0x11200 ... 0x11211: return true; case 0x11213 ... 0x1122b: return true; case 0x11280 ... 0x11286: return true; case 0x11288: return true; case 0x1128a ... 0x1128d: return true; case 0x1128f ... 0x1129d: return true; case 0x1129f ... 0x112a8: return true; case 0x112b0 ... 0x112de: return true; case 0x112f0 ... 0x112f9: return true; case 0x11305 ... 0x1130c: return true; case 0x1130f ... 0x11310: return true; case 0x11313 ... 0x11328: return true; case 0x1132a ... 0x11330: return true; case 0x11332 ... 0x11333: return true; case 0x11335 ... 0x11339: return true; case 0x1133d: return true; case 0x11350: return true; case 0x1135d ... 0x11361: return true; case 0x11400 ... 0x11434: return true; case 0x11447 ... 0x1144a: return true; case 0x11450 ... 0x11459: return true; case 0x1145f: return true; case 0x11480 ... 0x114af: return true; case 0x114c4 ... 0x114c5: return true; case 0x114c7: return true; case 0x114d0 ... 0x114d9: return true; case 0x11580 ... 0x115ae: return true; case 0x115d8 ... 0x115db: return true; case 0x11600 ... 0x1162f: return true; case 0x11644: return true; case 0x11650 ... 0x11659: return true; case 0x11680 ... 0x116aa: return true; case 0x116b8: return true; case 0x116c0 ... 0x116c9: return true; case 0x11700 ... 0x1171a: return true; case 0x11730 ... 0x1173b: return true; case 0x11800 ... 0x1182b: return true; case 0x118a0 ... 0x118f2: return true; case 0x118ff: return true; case 0x119a0 ... 0x119a7: return true; case 0x119aa ... 0x119d0: return true; case 0x119e1: return true; case 0x119e3: return true; case 0x11a00: return true; case 0x11a0b ... 0x11a32: return true; case 0x11a3a: return true; case 0x11a50: return true; case 0x11a5c ... 0x11a89: return true; case 0x11a9d: return true; case 0x11ac0 ... 0x11af8: return true; case 0x11c00 ... 0x11c08: return true; case 0x11c0a ... 0x11c2e: return true; case 0x11c40: return true; case 0x11c50 ... 0x11c6c: return true; case 0x11c72 ... 0x11c8f: return true; case 0x11d00 ... 0x11d06: return true; case 0x11d08 ... 0x11d09: return true; case 0x11d0b ... 0x11d30: return true; case 0x11d46: return true; case 0x11d50 ... 0x11d59: return true; case 0x11d60 ... 0x11d65: return true; case 0x11d67 ... 0x11d68: return true; case 0x11d6a ... 0x11d89: return true; case 0x11d98: return true; case 0x11da0 ... 0x11da9: return true; case 0x11ee0 ... 0x11ef2: return true; case 0x11fc0 ... 0x11fd4: return true; case 0x12000 ... 0x12399: return true; case 0x12400 ... 0x1246e: return true; case 0x12480 ... 0x12543: return true; case 0x13000 ... 0x1342e: return true; case 0x14400 ... 0x14646: return true; case 0x16800 ... 0x16a38: return true; case 0x16a40 ... 0x16a5e: return true; case 0x16a60 ... 0x16a69: return true; case 0x16ad0 ... 0x16aed: return true; case 0x16b00 ... 0x16b2f: return true; case 0x16b40 ... 0x16b43: return true; case 0x16b50 ... 0x16b59: return true; case 0x16b5b ... 0x16b61: return true; case 0x16b63 ... 0x16b77: return true; case 0x16b7d ... 0x16b8f: return true; case 0x16e40 ... 0x16e96: return true; case 0x16f00 ... 0x16f4a: return true; case 0x16f50: return true; case 0x16f93 ... 0x16f9f: return true; case 0x16fe0 ... 0x16fe1: return true; case 0x16fe3: return true; case 0x17000 ... 0x187f7: return true; case 0x18800 ... 0x18af2: return true; case 0x1b000 ... 0x1b11e: return true; case 0x1b150 ... 0x1b152: return true; case 0x1b164 ... 0x1b167: return true; case 0x1b170 ... 0x1b2fb: return true; case 0x1bc00 ... 0x1bc6a: return true; case 0x1bc70 ... 0x1bc7c: return true; case 0x1bc80 ... 0x1bc88: return true; case 0x1bc90 ... 0x1bc99: return true; case 0x1d2e0 ... 0x1d2f3: return true; case 0x1d360 ... 0x1d378: return true; case 0x1d400 ... 0x1d454: return true; case 0x1d456 ... 0x1d49c: return true; case 0x1d49e ... 0x1d49f: return true; case 0x1d4a2: return true; case 0x1d4a5 ... 0x1d4a6: return true; case 0x1d4a9 ... 0x1d4ac: return true; case 0x1d4ae ... 0x1d4b9: return true; case 0x1d4bb: return true; case 0x1d4bd ... 0x1d4c3: return true; case 0x1d4c5 ... 0x1d505: return true; case 0x1d507 ... 0x1d50a: return true; case 0x1d50d ... 0x1d514: return true; case 0x1d516 ... 0x1d51c: return true; case 0x1d51e ... 0x1d539: return true; case 0x1d53b ... 0x1d53e: return true; case 0x1d540 ... 0x1d544: return true; case 0x1d546: return true; case 0x1d54a ... 0x1d550: return true; case 0x1d552 ... 0x1d6a5: return true; case 0x1d6a8 ... 0x1d6c0: return true; case 0x1d6c2 ... 0x1d6da: return true; case 0x1d6dc ... 0x1d6fa: return true; case 0x1d6fc ... 0x1d714: return true; case 0x1d716 ... 0x1d734: return true; case 0x1d736 ... 0x1d74e: return true; case 0x1d750 ... 0x1d76e: return true; case 0x1d770 ... 0x1d788: return true; case 0x1d78a ... 0x1d7a8: return true; case 0x1d7aa ... 0x1d7c2: return true; case 0x1d7c4 ... 0x1d7cb: return true; case 0x1d7ce ... 0x1d7ff: return true; case 0x1e100 ... 0x1e12c: return true; case 0x1e137 ... 0x1e13d: return true; case 0x1e140 ... 0x1e149: return true; case 0x1e14e: return true; case 0x1e2c0 ... 0x1e2eb: return true; case 0x1e2f0 ... 0x1e2f9: return true; case 0x1e800 ... 0x1e8c4: return true; case 0x1e8c7 ... 0x1e8cf: return true; case 0x1e900 ... 0x1e943: return true; case 0x1e94b: return true; case 0x1e950 ... 0x1e959: return true; case 0x1ec71 ... 0x1ecab: return true; case 0x1ecad ... 0x1ecaf: return true; case 0x1ecb1 ... 0x1ecb4: return true; case 0x1ed01 ... 0x1ed2d: return true; case 0x1ed2f ... 0x1ed3d: return true; case 0x1ee00 ... 0x1ee03: return true; case 0x1ee05 ... 0x1ee1f: return true; case 0x1ee21 ... 0x1ee22: return true; case 0x1ee24: return true; case 0x1ee27: return true; case 0x1ee29 ... 0x1ee32: return true; case 0x1ee34 ... 0x1ee37: return true; case 0x1ee39: return true; case 0x1ee3b: return true; case 0x1ee42: return true; case 0x1ee47: return true; case 0x1ee49: return true; case 0x1ee4b: return true; case 0x1ee4d ... 0x1ee4f: return true; case 0x1ee51 ... 0x1ee52: return true; case 0x1ee54: return true; case 0x1ee57: return true; case 0x1ee59: return true; case 0x1ee5b: return true; case 0x1ee5d: return true; case 0x1ee5f: return true; case 0x1ee61 ... 0x1ee62: return true; case 0x1ee64: return true; case 0x1ee67 ... 0x1ee6a: return true; case 0x1ee6c ... 0x1ee72: return true; case 0x1ee74 ... 0x1ee77: return true; case 0x1ee79 ... 0x1ee7c: return true; case 0x1ee7e: return true; case 0x1ee80 ... 0x1ee89: return true; case 0x1ee8b ... 0x1ee9b: return true; case 0x1eea1 ... 0x1eea3: return true; case 0x1eea5 ... 0x1eea9: return true; case 0x1eeab ... 0x1eebb: return true; case 0x1f100 ... 0x1f10c: return true; case 0x20000 ... 0x2a6d6: return true; case 0x2a700 ... 0x2b734: return true; case 0x2b740 ... 0x2b81d: return true; case 0x2b820 ... 0x2cea1: return true; case 0x2ceb0 ... 0x2ebe0: return true; case 0x2f800 ... 0x2fa1d: return true; } // }}} return false; } bool is_CZ_category(char_type code) { // C and Z categories (139761 codepoints) {{{ switch(code) { case 0x0 ... 0x20: return true; case 0x7f ... 0xa0: return true; case 0xad: return true; case 0x600 ... 0x605: return true; case 0x61c: return true; case 0x6dd: return true; case 0x70f: return true; case 0x8e2: return true; case 0x1680: return true; case 0x180e: return true; case 0x2000 ... 0x200f: return true; case 0x2028 ... 0x202f: return true; case 0x205f ... 0x2064: return true; case 0x2066 ... 0x206f: return true; case 0x3000: return true; case 0xd800 ... 0xf8ff: return true; case 0xfeff: return true; case 0xfff9 ... 0xfffb: return true; case 0x110bd: return true; case 0x110cd: return true; case 0x13430 ... 0x13438: return true; case 0x1bca0 ... 0x1bca3: return true; case 0x1d173 ... 0x1d17a: return true; case 0xe0001: return true; case 0xe0020 ... 0xe007f: return true; case 0xf0000 ... 0xffffd: return true; case 0x100000 ... 0x10fffd: return true; } // }}} return false; } bool is_P_category(char_type code) { // P category (punctuation) (792 codepoints) {{{ switch(code) { case 0x21 ... 0x23: return true; case 0x25 ... 0x2a: return true; case 0x2c ... 0x2f: return true; case 0x3a ... 0x3b: return true; case 0x3f ... 0x40: return true; case 0x5b ... 0x5d: return true; case 0x5f: return true; case 0x7b: return true; case 0x7d: return true; case 0xa1: return true; case 0xa7: return true; case 0xab: return true; case 0xb6 ... 0xb7: return true; case 0xbb: return true; case 0xbf: return true; case 0x37e: return true; case 0x387: return true; case 0x55a ... 0x55f: return true; case 0x589 ... 0x58a: return true; case 0x5be: return true; case 0x5c0: return true; case 0x5c3: return true; case 0x5c6: return true; case 0x5f3 ... 0x5f4: return true; case 0x609 ... 0x60a: return true; case 0x60c ... 0x60d: return true; case 0x61b: return true; case 0x61e ... 0x61f: return true; case 0x66a ... 0x66d: return true; case 0x6d4: return true; case 0x700 ... 0x70d: return true; case 0x7f7 ... 0x7f9: return true; case 0x830 ... 0x83e: return true; case 0x85e: return true; case 0x964 ... 0x965: return true; case 0x970: return true; case 0x9fd: return true; case 0xa76: return true; case 0xaf0: return true; case 0xc77: return true; case 0xc84: return true; case 0xdf4: return true; case 0xe4f: return true; case 0xe5a ... 0xe5b: return true; case 0xf04 ... 0xf12: return true; case 0xf14: return true; case 0xf3a ... 0xf3d: return true; case 0xf85: return true; case 0xfd0 ... 0xfd4: return true; case 0xfd9 ... 0xfda: return true; case 0x104a ... 0x104f: return true; case 0x10fb: return true; case 0x1360 ... 0x1368: return true; case 0x1400: return true; case 0x166e: return true; case 0x169b ... 0x169c: return true; case 0x16eb ... 0x16ed: return true; case 0x1735 ... 0x1736: return true; case 0x17d4 ... 0x17d6: return true; case 0x17d8 ... 0x17da: return true; case 0x1800 ... 0x180a: return true; case 0x1944 ... 0x1945: return true; case 0x1a1e ... 0x1a1f: return true; case 0x1aa0 ... 0x1aa6: return true; case 0x1aa8 ... 0x1aad: return true; case 0x1b5a ... 0x1b60: return true; case 0x1bfc ... 0x1bff: return true; case 0x1c3b ... 0x1c3f: return true; case 0x1c7e ... 0x1c7f: return true; case 0x1cc0 ... 0x1cc7: return true; case 0x1cd3: return true; case 0x2010 ... 0x2027: return true; case 0x2030 ... 0x2043: return true; case 0x2045 ... 0x2051: return true; case 0x2053 ... 0x205e: return true; case 0x207d ... 0x207e: return true; case 0x208d ... 0x208e: return true; case 0x2308 ... 0x230b: return true; case 0x2329 ... 0x232a: return true; case 0x2768 ... 0x2775: return true; case 0x27c5 ... 0x27c6: return true; case 0x27e6 ... 0x27ef: return true; case 0x2983 ... 0x2998: return true; case 0x29d8 ... 0x29db: return true; case 0x29fc ... 0x29fd: return true; case 0x2cf9 ... 0x2cfc: return true; case 0x2cfe ... 0x2cff: return true; case 0x2d70: return true; case 0x2e00 ... 0x2e2e: return true; case 0x2e30 ... 0x2e4f: return true; case 0x3001 ... 0x3003: return true; case 0x3008 ... 0x3011: return true; case 0x3014 ... 0x301f: return true; case 0x3030: return true; case 0x303d: return true; case 0x30a0: return true; case 0x30fb: return true; case 0xa4fe ... 0xa4ff: return true; case 0xa60d ... 0xa60f: return true; case 0xa673: return true; case 0xa67e: return true; case 0xa6f2 ... 0xa6f7: return true; case 0xa874 ... 0xa877: return true; case 0xa8ce ... 0xa8cf: return true; case 0xa8f8 ... 0xa8fa: return true; case 0xa8fc: return true; case 0xa92e ... 0xa92f: return true; case 0xa95f: return true; case 0xa9c1 ... 0xa9cd: return true; case 0xa9de ... 0xa9df: return true; case 0xaa5c ... 0xaa5f: return true; case 0xaade ... 0xaadf: return true; case 0xaaf0 ... 0xaaf1: return true; case 0xabeb: return true; case 0xfd3e ... 0xfd3f: return true; case 0xfe10 ... 0xfe19: return true; case 0xfe30 ... 0xfe52: return true; case 0xfe54 ... 0xfe61: return true; case 0xfe63: return true; case 0xfe68: return true; case 0xfe6a ... 0xfe6b: return true; case 0xff01 ... 0xff03: return true; case 0xff05 ... 0xff0a: return true; case 0xff0c ... 0xff0f: return true; case 0xff1a ... 0xff1b: return true; case 0xff1f ... 0xff20: return true; case 0xff3b ... 0xff3d: return true; case 0xff3f: return true; case 0xff5b: return true; case 0xff5d: return true; case 0xff5f ... 0xff65: return true; case 0x10100 ... 0x10102: return true; case 0x1039f: return true; case 0x103d0: return true; case 0x1056f: return true; case 0x10857: return true; case 0x1091f: return true; case 0x1093f: return true; case 0x10a50 ... 0x10a58: return true; case 0x10a7f: return true; case 0x10af0 ... 0x10af6: return true; case 0x10b39 ... 0x10b3f: return true; case 0x10b99 ... 0x10b9c: return true; case 0x10f55 ... 0x10f59: return true; case 0x11047 ... 0x1104d: return true; case 0x110bb ... 0x110bc: return true; case 0x110be ... 0x110c1: return true; case 0x11140 ... 0x11143: return true; case 0x11174 ... 0x11175: return true; case 0x111c5 ... 0x111c8: return true; case 0x111cd: return true; case 0x111db: return true; case 0x111dd ... 0x111df: return true; case 0x11238 ... 0x1123d: return true; case 0x112a9: return true; case 0x1144b ... 0x1144f: return true; case 0x1145b: return true; case 0x1145d: return true; case 0x114c6: return true; case 0x115c1 ... 0x115d7: return true; case 0x11641 ... 0x11643: return true; case 0x11660 ... 0x1166c: return true; case 0x1173c ... 0x1173e: return true; case 0x1183b: return true; case 0x119e2: return true; case 0x11a3f ... 0x11a46: return true; case 0x11a9a ... 0x11a9c: return true; case 0x11a9e ... 0x11aa2: return true; case 0x11c41 ... 0x11c45: return true; case 0x11c70 ... 0x11c71: return true; case 0x11ef7 ... 0x11ef8: return true; case 0x11fff: return true; case 0x12470 ... 0x12474: return true; case 0x16a6e ... 0x16a6f: return true; case 0x16af5: return true; case 0x16b37 ... 0x16b3b: return true; case 0x16b44: return true; case 0x16e97 ... 0x16e9a: return true; case 0x16fe2: return true; case 0x1bc9f: return true; case 0x1da87 ... 0x1da8b: return true; case 0x1e95e ... 0x1e95f: return true; } // }}} return false; } char_type codepoint_for_mark(combining_type m) { static char_type map[2275] = { 0, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1471, 1473, 1474, 1476, 1477, 1479, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1648, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1759, 1760, 1761, 1762, 1763, 1764, 1767, 1768, 1770, 1771, 1772, 1773, 1809, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2045, 2070, 2071, 2072, 2073, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2085, 2086, 2087, 2089, 2090, 2091, 2092, 2093, 2137, 2138, 2139, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2362, 2363, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2402, 2403, 2433, 2434, 2435, 2492, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2503, 2504, 2507, 2508, 2509, 2519, 2530, 2531, 2558, 2561, 2562, 2563, 2620, 2622, 2623, 2624, 2625, 2626, 2631, 2632, 2635, 2636, 2637, 2641, 2672, 2673, 2677, 2689, 2690, 2691, 2748, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2759, 2760, 2761, 2763, 2764, 2765, 2786, 2787, 2810, 2811, 2812, 2813, 2814, 2815, 2817, 2818, 2819, 2876, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2887, 2888, 2891, 2892, 2893, 2902, 2903, 2914, 2915, 2946, 3006, 3007, 3008, 3009, 3010, 3014, 3015, 3016, 3018, 3019, 3020, 3021, 3031, 3072, 3073, 3074, 3075, 3076, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3142, 3143, 3144, 3146, 3147, 3148, 3149, 3157, 3158, 3170, 3171, 3201, 3202, 3203, 3260, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3270, 3271, 3272, 3274, 3275, 3276, 3277, 3285, 3286, 3298, 3299, 3328, 3329, 3330, 3331, 3387, 3388, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3398, 3399, 3400, 3402, 3403, 3404, 3405, 3415, 3426, 3427, 3458, 3459, 3530, 3535, 3536, 3537, 3538, 3539, 3540, 3542, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3570, 3571, 3633, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3761, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3784, 3785, 3786, 3787, 3788, 3789, 3864, 3865, 3893, 3895, 3897, 3902, 3903, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3974, 3975, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4038, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4182, 4183, 4184, 4185, 4190, 4191, 4192, 4194, 4195, 4196, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4209, 4210, 4211, 4212, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4239, 4250, 4251, 4252, 4253, 4957, 4958, 4959, 5906, 5907, 5908, 5938, 5939, 5940, 5970, 5971, 6002, 6003, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6109, 6155, 6156, 6157, 6277, 6278, 6313, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6679, 6680, 6681, 6682, 6683, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6783, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6912, 6913, 6914, 6915, 6916, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7040, 7041, 7042, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7376, 7377, 7378, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7405, 7412, 7415, 7416, 7417, 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7672, 7673, 7675, 7676, 7677, 7678, 7679, 8205, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 11503, 11504, 11505, 11647, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11759, 11760, 11761, 11762, 11763, 11764, 11765, 11766, 11767, 11768, 11769, 11770, 11771, 11772, 11773, 11774, 11775, 12330, 12331, 12332, 12333, 12334, 12335, 12441, 12442, 42607, 42608, 42609, 42610, 42612, 42613, 42614, 42615, 42616, 42617, 42618, 42619, 42620, 42621, 42654, 42655, 42736, 42737, 43010, 43014, 43019, 43043, 43044, 43045, 43046, 43047, 43136, 43137, 43188, 43189, 43190, 43191, 43192, 43193, 43194, 43195, 43196, 43197, 43198, 43199, 43200, 43201, 43202, 43203, 43204, 43205, 43232, 43233, 43234, 43235, 43236, 43237, 43238, 43239, 43240, 43241, 43242, 43243, 43244, 43245, 43246, 43247, 43248, 43249, 43263, 43302, 43303, 43304, 43305, 43306, 43307, 43308, 43309, 43335, 43336, 43337, 43338, 43339, 43340, 43341, 43342, 43343, 43344, 43345, 43346, 43347, 43392, 43393, 43394, 43395, 43443, 43444, 43445, 43446, 43447, 43448, 43449, 43450, 43451, 43452, 43453, 43454, 43455, 43456, 43493, 43561, 43562, 43563, 43564, 43565, 43566, 43567, 43568, 43569, 43570, 43571, 43572, 43573, 43574, 43587, 43596, 43597, 43643, 43644, 43645, 43696, 43698, 43699, 43700, 43703, 43704, 43710, 43711, 43713, 43755, 43756, 43757, 43758, 43759, 43765, 43766, 44003, 44004, 44005, 44006, 44007, 44008, 44009, 44010, 44012, 44013, 64286, 65024, 65025, 65026, 65027, 65028, 65029, 65030, 65031, 65032, 65033, 65034, 65035, 65036, 65037, 65038, 65039, 65056, 65057, 65058, 65059, 65060, 65061, 65062, 65063, 65064, 65065, 65066, 65067, 65068, 65069, 65070, 65071, 66045, 66272, 66422, 66423, 66424, 66425, 66426, 68097, 68098, 68099, 68101, 68102, 68108, 68109, 68110, 68111, 68152, 68153, 68154, 68159, 68325, 68326, 68900, 68901, 68902, 68903, 69446, 69447, 69448, 69449, 69450, 69451, 69452, 69453, 69454, 69455, 69456, 69632, 69633, 69634, 69688, 69689, 69690, 69691, 69692, 69693, 69694, 69695, 69696, 69697, 69698, 69699, 69700, 69701, 69702, 69759, 69760, 69761, 69762, 69808, 69809, 69810, 69811, 69812, 69813, 69814, 69815, 69816, 69817, 69818, 69888, 69889, 69890, 69927, 69928, 69929, 69930, 69931, 69932, 69933, 69934, 69935, 69936, 69937, 69938, 69939, 69940, 69957, 69958, 70003, 70016, 70017, 70018, 70067, 70068, 70069, 70070, 70071, 70072, 70073, 70074, 70075, 70076, 70077, 70078, 70079, 70080, 70089, 70090, 70091, 70092, 70188, 70189, 70190, 70191, 70192, 70193, 70194, 70195, 70196, 70197, 70198, 70199, 70206, 70367, 70368, 70369, 70370, 70371, 70372, 70373, 70374, 70375, 70376, 70377, 70378, 70400, 70401, 70402, 70403, 70459, 70460, 70462, 70463, 70464, 70465, 70466, 70467, 70468, 70471, 70472, 70475, 70476, 70477, 70487, 70498, 70499, 70502, 70503, 70504, 70505, 70506, 70507, 70508, 70512, 70513, 70514, 70515, 70516, 70709, 70710, 70711, 70712, 70713, 70714, 70715, 70716, 70717, 70718, 70719, 70720, 70721, 70722, 70723, 70724, 70725, 70726, 70750, 70832, 70833, 70834, 70835, 70836, 70837, 70838, 70839, 70840, 70841, 70842, 70843, 70844, 70845, 70846, 70847, 70848, 70849, 70850, 70851, 71087, 71088, 71089, 71090, 71091, 71092, 71093, 71096, 71097, 71098, 71099, 71100, 71101, 71102, 71103, 71104, 71132, 71133, 71216, 71217, 71218, 71219, 71220, 71221, 71222, 71223, 71224, 71225, 71226, 71227, 71228, 71229, 71230, 71231, 71232, 71339, 71340, 71341, 71342, 71343, 71344, 71345, 71346, 71347, 71348, 71349, 71350, 71351, 71453, 71454, 71455, 71456, 71457, 71458, 71459, 71460, 71461, 71462, 71463, 71464, 71465, 71466, 71467, 71724, 71725, 71726, 71727, 71728, 71729, 71730, 71731, 71732, 71733, 71734, 71735, 71736, 71737, 71738, 72145, 72146, 72147, 72148, 72149, 72150, 72151, 72154, 72155, 72156, 72157, 72158, 72159, 72160, 72164, 72193, 72194, 72195, 72196, 72197, 72198, 72199, 72200, 72201, 72202, 72243, 72244, 72245, 72246, 72247, 72248, 72249, 72251, 72252, 72253, 72254, 72263, 72273, 72274, 72275, 72276, 72277, 72278, 72279, 72280, 72281, 72282, 72283, 72330, 72331, 72332, 72333, 72334, 72335, 72336, 72337, 72338, 72339, 72340, 72341, 72342, 72343, 72344, 72345, 72751, 72752, 72753, 72754, 72755, 72756, 72757, 72758, 72760, 72761, 72762, 72763, 72764, 72765, 72766, 72767, 72850, 72851, 72852, 72853, 72854, 72855, 72856, 72857, 72858, 72859, 72860, 72861, 72862, 72863, 72864, 72865, 72866, 72867, 72868, 72869, 72870, 72871, 72873, 72874, 72875, 72876, 72877, 72878, 72879, 72880, 72881, 72882, 72883, 72884, 72885, 72886, 73009, 73010, 73011, 73012, 73013, 73014, 73018, 73020, 73021, 73023, 73024, 73025, 73026, 73027, 73028, 73029, 73031, 73098, 73099, 73100, 73101, 73102, 73104, 73105, 73107, 73108, 73109, 73110, 73111, 73459, 73460, 73461, 73462, 92912, 92913, 92914, 92915, 92916, 92976, 92977, 92978, 92979, 92980, 92981, 92982, 94031, 94033, 94034, 94035, 94036, 94037, 94038, 94039, 94040, 94041, 94042, 94043, 94044, 94045, 94046, 94047, 94048, 94049, 94050, 94051, 94052, 94053, 94054, 94055, 94056, 94057, 94058, 94059, 94060, 94061, 94062, 94063, 94064, 94065, 94066, 94067, 94068, 94069, 94070, 94071, 94072, 94073, 94074, 94075, 94076, 94077, 94078, 94079, 94080, 94081, 94082, 94083, 94084, 94085, 94086, 94087, 94095, 94096, 94097, 94098, 113821, 113822, 119141, 119142, 119143, 119144, 119145, 119149, 119150, 119151, 119152, 119153, 119154, 119163, 119164, 119165, 119166, 119167, 119168, 119169, 119170, 119173, 119174, 119175, 119176, 119177, 119178, 119179, 119210, 119211, 119212, 119213, 119362, 119363, 119364, 121344, 121345, 121346, 121347, 121348, 121349, 121350, 121351, 121352, 121353, 121354, 121355, 121356, 121357, 121358, 121359, 121360, 121361, 121362, 121363, 121364, 121365, 121366, 121367, 121368, 121369, 121370, 121371, 121372, 121373, 121374, 121375, 121376, 121377, 121378, 121379, 121380, 121381, 121382, 121383, 121384, 121385, 121386, 121387, 121388, 121389, 121390, 121391, 121392, 121393, 121394, 121395, 121396, 121397, 121398, 121403, 121404, 121405, 121406, 121407, 121408, 121409, 121410, 121411, 121412, 121413, 121414, 121415, 121416, 121417, 121418, 121419, 121420, 121421, 121422, 121423, 121424, 121425, 121426, 121427, 121428, 121429, 121430, 121431, 121432, 121433, 121434, 121435, 121436, 121437, 121438, 121439, 121440, 121441, 121442, 121443, 121444, 121445, 121446, 121447, 121448, 121449, 121450, 121451, 121452, 121461, 121476, 121499, 121500, 121501, 121502, 121503, 121505, 121506, 121507, 121508, 121509, 121510, 121511, 121512, 121513, 121514, 121515, 121516, 121517, 121518, 121519, 122880, 122881, 122882, 122883, 122884, 122885, 122886, 122888, 122889, 122890, 122891, 122892, 122893, 122894, 122895, 122896, 122897, 122898, 122899, 122900, 122901, 122902, 122903, 122904, 122907, 122908, 122909, 122910, 122911, 122912, 122913, 122915, 122916, 122918, 122919, 122920, 122921, 122922, 123184, 123185, 123186, 123187, 123188, 123189, 123190, 123628, 123629, 123630, 123631, 125136, 125137, 125138, 125139, 125140, 125141, 125142, 125252, 125253, 125254, 125255, 125256, 125257, 125258, 127995, 127996, 127997, 127998, 127999, 917760, 917761, 917762, 917763, 917764, 917765, 917766, 917767, 917768, 917769, 917770, 917771, 917772, 917773, 917774, 917775, 917776, 917777, 917778, 917779, 917780, 917781, 917782, 917783, 917784, 917785, 917786, 917787, 917788, 917789, 917790, 917791, 917792, 917793, 917794, 917795, 917796, 917797, 917798, 917799, 917800, 917801, 917802, 917803, 917804, 917805, 917806, 917807, 917808, 917809, 917810, 917811, 917812, 917813, 917814, 917815, 917816, 917817, 917818, 917819, 917820, 917821, 917822, 917823, 917824, 917825, 917826, 917827, 917828, 917829, 917830, 917831, 917832, 917833, 917834, 917835, 917836, 917837, 917838, 917839, 917840, 917841, 917842, 917843, 917844, 917845, 917846, 917847, 917848, 917849, 917850, 917851, 917852, 917853, 917854, 917855, 917856, 917857, 917858, 917859, 917860, 917861, 917862, 917863, 917864, 917865, 917866, 917867, 917868, 917869, 917870, 917871, 917872, 917873, 917874, 917875, 917876, 917877, 917878, 917879, 917880, 917881, 917882, 917883, 917884, 917885, 917886, 917887, 917888, 917889, 917890, 917891, 917892, 917893, 917894, 917895, 917896, 917897, 917898, 917899, 917900, 917901, 917902, 917903, 917904, 917905, 917906, 917907, 917908, 917909, 917910, 917911, 917912, 917913, 917914, 917915, 917916, 917917, 917918, 917919, 917920, 917921, 917922, 917923, 917924, 917925, 917926, 917927, 917928, 917929, 917930, 917931, 917932, 917933, 917934, 917935, 917936, 917937, 917938, 917939, 917940, 917941, 917942, 917943, 917944, 917945, 917946, 917947, 917948, 917949, 917950, 917951, 917952, 917953, 917954, 917955, 917956, 917957, 917958, 917959, 917960, 917961, 917962, 917963, 917964, 917965, 917966, 917967, 917968, 917969, 917970, 917971, 917972, 917973, 917974, 917975, 917976, 917977, 917978, 917979, 917980, 917981, 917982, 917983, 917984, 917985, 917986, 917987, 917988, 917989, 917990, 917991, 917992, 917993, 917994, 917995, 917996, 917997, 917998, 917999 }; // {{{ mapping }}} if (m < arraysz(map)) return map[m]; return 0; } combining_type mark_for_codepoint(char_type c) { switch(c) { // {{{ case 0: return 0; case 768: case 769: case 770: case 771: case 772: case 773: case 774: case 775: case 776: case 777: case 778: case 779: case 780: case 781: case 782: case 783: case 784: case 785: case 786: case 787: case 788: case 789: case 790: case 791: case 792: case 793: case 794: case 795: case 796: case 797: case 798: case 799: case 800: case 801: case 802: case 803: case 804: case 805: case 806: case 807: case 808: case 809: case 810: case 811: case 812: case 813: case 814: case 815: case 816: case 817: case 818: case 819: case 820: case 821: case 822: case 823: case 824: case 825: case 826: case 827: case 828: case 829: case 830: case 831: case 832: case 833: case 834: case 835: case 836: case 837: case 838: case 839: case 840: case 841: case 842: case 843: case 844: case 845: case 846: case 847: case 848: case 849: case 850: case 851: case 852: case 853: case 854: case 855: case 856: case 857: case 858: case 859: case 860: case 861: case 862: case 863: case 864: case 865: case 866: case 867: case 868: case 869: case 870: case 871: case 872: case 873: case 874: case 875: case 876: case 877: case 878: case 879: return 1 + c - 768; case 1155: case 1156: case 1157: case 1158: case 1159: case 1160: case 1161: return 113 + c - 1155; case 1425: case 1426: case 1427: case 1428: case 1429: case 1430: case 1431: case 1432: case 1433: case 1434: case 1435: case 1436: case 1437: case 1438: case 1439: case 1440: case 1441: case 1442: case 1443: case 1444: case 1445: case 1446: case 1447: case 1448: case 1449: case 1450: case 1451: case 1452: case 1453: case 1454: case 1455: case 1456: case 1457: case 1458: case 1459: case 1460: case 1461: case 1462: case 1463: case 1464: case 1465: case 1466: case 1467: case 1468: case 1469: return 120 + c - 1425; case 1471: return 165; case 1473: case 1474: return 166 + c - 1473; case 1476: case 1477: return 168 + c - 1476; case 1479: return 170; case 1552: case 1553: case 1554: case 1555: case 1556: case 1557: case 1558: case 1559: case 1560: case 1561: case 1562: return 171 + c - 1552; case 1611: case 1612: case 1613: case 1614: case 1615: case 1616: case 1617: case 1618: case 1619: case 1620: case 1621: case 1622: case 1623: case 1624: case 1625: case 1626: case 1627: case 1628: case 1629: case 1630: case 1631: return 182 + c - 1611; case 1648: return 203; case 1750: case 1751: case 1752: case 1753: case 1754: case 1755: case 1756: return 204 + c - 1750; case 1759: case 1760: case 1761: case 1762: case 1763: case 1764: return 211 + c - 1759; case 1767: case 1768: return 217 + c - 1767; case 1770: case 1771: case 1772: case 1773: return 219 + c - 1770; case 1809: return 223; case 1840: case 1841: case 1842: case 1843: case 1844: case 1845: case 1846: case 1847: case 1848: case 1849: case 1850: case 1851: case 1852: case 1853: case 1854: case 1855: case 1856: case 1857: case 1858: case 1859: case 1860: case 1861: case 1862: case 1863: case 1864: case 1865: case 1866: return 224 + c - 1840; case 1958: case 1959: case 1960: case 1961: case 1962: case 1963: case 1964: case 1965: case 1966: case 1967: case 1968: return 251 + c - 1958; case 2027: case 2028: case 2029: case 2030: case 2031: case 2032: case 2033: case 2034: case 2035: return 262 + c - 2027; case 2045: return 271; case 2070: case 2071: case 2072: case 2073: return 272 + c - 2070; case 2075: case 2076: case 2077: case 2078: case 2079: case 2080: case 2081: case 2082: case 2083: return 276 + c - 2075; case 2085: case 2086: case 2087: return 285 + c - 2085; case 2089: case 2090: case 2091: case 2092: case 2093: return 288 + c - 2089; case 2137: case 2138: case 2139: return 293 + c - 2137; case 2259: case 2260: case 2261: case 2262: case 2263: case 2264: case 2265: case 2266: case 2267: case 2268: case 2269: case 2270: case 2271: case 2272: case 2273: return 296 + c - 2259; case 2275: case 2276: case 2277: case 2278: case 2279: case 2280: case 2281: case 2282: case 2283: case 2284: case 2285: case 2286: case 2287: case 2288: case 2289: case 2290: case 2291: case 2292: case 2293: case 2294: case 2295: case 2296: case 2297: case 2298: case 2299: case 2300: case 2301: case 2302: case 2303: case 2304: case 2305: case 2306: case 2307: return 311 + c - 2275; case 2362: case 2363: case 2364: return 344 + c - 2362; case 2366: case 2367: case 2368: case 2369: case 2370: case 2371: case 2372: case 2373: case 2374: case 2375: case 2376: case 2377: case 2378: case 2379: case 2380: case 2381: case 2382: case 2383: return 347 + c - 2366; case 2385: case 2386: case 2387: case 2388: case 2389: case 2390: case 2391: return 365 + c - 2385; case 2402: case 2403: return 372 + c - 2402; case 2433: case 2434: case 2435: return 374 + c - 2433; case 2492: return 377; case 2494: case 2495: case 2496: case 2497: case 2498: case 2499: case 2500: return 378 + c - 2494; case 2503: case 2504: return 385 + c - 2503; case 2507: case 2508: case 2509: return 387 + c - 2507; case 2519: return 390; case 2530: case 2531: return 391 + c - 2530; case 2558: return 393; case 2561: case 2562: case 2563: return 394 + c - 2561; case 2620: return 397; case 2622: case 2623: case 2624: case 2625: case 2626: return 398 + c - 2622; case 2631: case 2632: return 403 + c - 2631; case 2635: case 2636: case 2637: return 405 + c - 2635; case 2641: return 408; case 2672: case 2673: return 409 + c - 2672; case 2677: return 411; case 2689: case 2690: case 2691: return 412 + c - 2689; case 2748: return 415; case 2750: case 2751: case 2752: case 2753: case 2754: case 2755: case 2756: case 2757: return 416 + c - 2750; case 2759: case 2760: case 2761: return 424 + c - 2759; case 2763: case 2764: case 2765: return 427 + c - 2763; case 2786: case 2787: return 430 + c - 2786; case 2810: case 2811: case 2812: case 2813: case 2814: case 2815: return 432 + c - 2810; case 2817: case 2818: case 2819: return 438 + c - 2817; case 2876: return 441; case 2878: case 2879: case 2880: case 2881: case 2882: case 2883: case 2884: return 442 + c - 2878; case 2887: case 2888: return 449 + c - 2887; case 2891: case 2892: case 2893: return 451 + c - 2891; case 2902: case 2903: return 454 + c - 2902; case 2914: case 2915: return 456 + c - 2914; case 2946: return 458; case 3006: case 3007: case 3008: case 3009: case 3010: return 459 + c - 3006; case 3014: case 3015: case 3016: return 464 + c - 3014; case 3018: case 3019: case 3020: case 3021: return 467 + c - 3018; case 3031: return 471; case 3072: case 3073: case 3074: case 3075: case 3076: return 472 + c - 3072; case 3134: case 3135: case 3136: case 3137: case 3138: case 3139: case 3140: return 477 + c - 3134; case 3142: case 3143: case 3144: return 484 + c - 3142; case 3146: case 3147: case 3148: case 3149: return 487 + c - 3146; case 3157: case 3158: return 491 + c - 3157; case 3170: case 3171: return 493 + c - 3170; case 3201: case 3202: case 3203: return 495 + c - 3201; case 3260: return 498; case 3262: case 3263: case 3264: case 3265: case 3266: case 3267: case 3268: return 499 + c - 3262; case 3270: case 3271: case 3272: return 506 + c - 3270; case 3274: case 3275: case 3276: case 3277: return 509 + c - 3274; case 3285: case 3286: return 513 + c - 3285; case 3298: case 3299: return 515 + c - 3298; case 3328: case 3329: case 3330: case 3331: return 517 + c - 3328; case 3387: case 3388: return 521 + c - 3387; case 3390: case 3391: case 3392: case 3393: case 3394: case 3395: case 3396: return 523 + c - 3390; case 3398: case 3399: case 3400: return 530 + c - 3398; case 3402: case 3403: case 3404: case 3405: return 533 + c - 3402; case 3415: return 537; case 3426: case 3427: return 538 + c - 3426; case 3458: case 3459: return 540 + c - 3458; case 3530: return 542; case 3535: case 3536: case 3537: case 3538: case 3539: case 3540: return 543 + c - 3535; case 3542: return 549; case 3544: case 3545: case 3546: case 3547: case 3548: case 3549: case 3550: case 3551: return 550 + c - 3544; case 3570: case 3571: return 558 + c - 3570; case 3633: return 560; case 3636: case 3637: case 3638: case 3639: case 3640: case 3641: case 3642: return 561 + c - 3636; case 3655: case 3656: case 3657: case 3658: case 3659: case 3660: case 3661: case 3662: return 568 + c - 3655; case 3761: return 576; case 3764: case 3765: case 3766: case 3767: case 3768: case 3769: case 3770: case 3771: case 3772: return 577 + c - 3764; case 3784: case 3785: case 3786: case 3787: case 3788: case 3789: return 586 + c - 3784; case 3864: case 3865: return 592 + c - 3864; case 3893: return 594; case 3895: return 595; case 3897: return 596; case 3902: case 3903: return 597 + c - 3902; case 3953: case 3954: case 3955: case 3956: case 3957: case 3958: case 3959: case 3960: case 3961: case 3962: case 3963: case 3964: case 3965: case 3966: case 3967: case 3968: case 3969: case 3970: case 3971: case 3972: return 599 + c - 3953; case 3974: case 3975: return 619 + c - 3974; case 3981: case 3982: case 3983: case 3984: case 3985: case 3986: case 3987: case 3988: case 3989: case 3990: case 3991: return 621 + c - 3981; case 3993: case 3994: case 3995: case 3996: case 3997: case 3998: case 3999: case 4000: case 4001: case 4002: case 4003: case 4004: case 4005: case 4006: case 4007: case 4008: case 4009: case 4010: case 4011: case 4012: case 4013: case 4014: case 4015: case 4016: case 4017: case 4018: case 4019: case 4020: case 4021: case 4022: case 4023: case 4024: case 4025: case 4026: case 4027: case 4028: return 632 + c - 3993; case 4038: return 668; case 4139: case 4140: case 4141: case 4142: case 4143: case 4144: case 4145: case 4146: case 4147: case 4148: case 4149: case 4150: case 4151: case 4152: case 4153: case 4154: case 4155: case 4156: case 4157: case 4158: return 669 + c - 4139; case 4182: case 4183: case 4184: case 4185: return 689 + c - 4182; case 4190: case 4191: case 4192: return 693 + c - 4190; case 4194: case 4195: case 4196: return 696 + c - 4194; case 4199: case 4200: case 4201: case 4202: case 4203: case 4204: case 4205: return 699 + c - 4199; case 4209: case 4210: case 4211: case 4212: return 706 + c - 4209; case 4226: case 4227: case 4228: case 4229: case 4230: case 4231: case 4232: case 4233: case 4234: case 4235: case 4236: case 4237: return 710 + c - 4226; case 4239: return 722; case 4250: case 4251: case 4252: case 4253: return 723 + c - 4250; case 4957: case 4958: case 4959: return 727 + c - 4957; case 5906: case 5907: case 5908: return 730 + c - 5906; case 5938: case 5939: case 5940: return 733 + c - 5938; case 5970: case 5971: return 736 + c - 5970; case 6002: case 6003: return 738 + c - 6002; case 6068: case 6069: case 6070: case 6071: case 6072: case 6073: case 6074: case 6075: case 6076: case 6077: case 6078: case 6079: case 6080: case 6081: case 6082: case 6083: case 6084: case 6085: case 6086: case 6087: case 6088: case 6089: case 6090: case 6091: case 6092: case 6093: case 6094: case 6095: case 6096: case 6097: case 6098: case 6099: return 740 + c - 6068; case 6109: return 772; case 6155: case 6156: case 6157: return 773 + c - 6155; case 6277: case 6278: return 776 + c - 6277; case 6313: return 778; case 6432: case 6433: case 6434: case 6435: case 6436: case 6437: case 6438: case 6439: case 6440: case 6441: case 6442: case 6443: return 779 + c - 6432; case 6448: case 6449: case 6450: case 6451: case 6452: case 6453: case 6454: case 6455: case 6456: case 6457: case 6458: case 6459: return 791 + c - 6448; case 6679: case 6680: case 6681: case 6682: case 6683: return 803 + c - 6679; case 6741: case 6742: case 6743: case 6744: case 6745: case 6746: case 6747: case 6748: case 6749: case 6750: return 808 + c - 6741; case 6752: case 6753: case 6754: case 6755: case 6756: case 6757: case 6758: case 6759: case 6760: case 6761: case 6762: case 6763: case 6764: case 6765: case 6766: case 6767: case 6768: case 6769: case 6770: case 6771: case 6772: case 6773: case 6774: case 6775: case 6776: case 6777: case 6778: case 6779: case 6780: return 818 + c - 6752; case 6783: return 847; case 6832: case 6833: case 6834: case 6835: case 6836: case 6837: case 6838: case 6839: case 6840: case 6841: case 6842: case 6843: case 6844: case 6845: case 6846: return 848 + c - 6832; case 6912: case 6913: case 6914: case 6915: case 6916: return 863 + c - 6912; case 6964: case 6965: case 6966: case 6967: case 6968: case 6969: case 6970: case 6971: case 6972: case 6973: case 6974: case 6975: case 6976: case 6977: case 6978: case 6979: case 6980: return 868 + c - 6964; case 7019: case 7020: case 7021: case 7022: case 7023: case 7024: case 7025: case 7026: case 7027: return 885 + c - 7019; case 7040: case 7041: case 7042: return 894 + c - 7040; case 7073: case 7074: case 7075: case 7076: case 7077: case 7078: case 7079: case 7080: case 7081: case 7082: case 7083: case 7084: case 7085: return 897 + c - 7073; case 7142: case 7143: case 7144: case 7145: case 7146: case 7147: case 7148: case 7149: case 7150: case 7151: case 7152: case 7153: case 7154: case 7155: return 910 + c - 7142; case 7204: case 7205: case 7206: case 7207: case 7208: case 7209: case 7210: case 7211: case 7212: case 7213: case 7214: case 7215: case 7216: case 7217: case 7218: case 7219: case 7220: case 7221: case 7222: case 7223: return 924 + c - 7204; case 7376: case 7377: case 7378: return 944 + c - 7376; case 7380: case 7381: case 7382: case 7383: case 7384: case 7385: case 7386: case 7387: case 7388: case 7389: case 7390: case 7391: case 7392: case 7393: case 7394: case 7395: case 7396: case 7397: case 7398: case 7399: case 7400: return 947 + c - 7380; case 7405: return 968; case 7412: return 969; case 7415: case 7416: case 7417: return 970 + c - 7415; case 7616: case 7617: case 7618: case 7619: case 7620: case 7621: case 7622: case 7623: case 7624: case 7625: case 7626: case 7627: case 7628: case 7629: case 7630: case 7631: case 7632: case 7633: case 7634: case 7635: case 7636: case 7637: case 7638: case 7639: case 7640: case 7641: case 7642: case 7643: case 7644: case 7645: case 7646: case 7647: case 7648: case 7649: case 7650: case 7651: case 7652: case 7653: case 7654: case 7655: case 7656: case 7657: case 7658: case 7659: case 7660: case 7661: case 7662: case 7663: case 7664: case 7665: case 7666: case 7667: case 7668: case 7669: case 7670: case 7671: case 7672: case 7673: return 973 + c - 7616; case 7675: case 7676: case 7677: case 7678: case 7679: return 1031 + c - 7675; case 8205: return 1036; case 8400: case 8401: case 8402: case 8403: case 8404: case 8405: case 8406: case 8407: case 8408: case 8409: case 8410: case 8411: case 8412: case 8413: case 8414: case 8415: case 8416: case 8417: case 8418: case 8419: case 8420: case 8421: case 8422: case 8423: case 8424: case 8425: case 8426: case 8427: case 8428: case 8429: case 8430: case 8431: case 8432: return 1037 + c - 8400; case 11503: case 11504: case 11505: return 1070 + c - 11503; case 11647: return 1073; case 11744: case 11745: case 11746: case 11747: case 11748: case 11749: case 11750: case 11751: case 11752: case 11753: case 11754: case 11755: case 11756: case 11757: case 11758: case 11759: case 11760: case 11761: case 11762: case 11763: case 11764: case 11765: case 11766: case 11767: case 11768: case 11769: case 11770: case 11771: case 11772: case 11773: case 11774: case 11775: return 1074 + c - 11744; case 12330: case 12331: case 12332: case 12333: case 12334: case 12335: return 1106 + c - 12330; case 12441: case 12442: return 1112 + c - 12441; case 42607: case 42608: case 42609: case 42610: return 1114 + c - 42607; case 42612: case 42613: case 42614: case 42615: case 42616: case 42617: case 42618: case 42619: case 42620: case 42621: return 1118 + c - 42612; case 42654: case 42655: return 1128 + c - 42654; case 42736: case 42737: return 1130 + c - 42736; case 43010: return 1132; case 43014: return 1133; case 43019: return 1134; case 43043: case 43044: case 43045: case 43046: case 43047: return 1135 + c - 43043; case 43136: case 43137: return 1140 + c - 43136; case 43188: case 43189: case 43190: case 43191: case 43192: case 43193: case 43194: case 43195: case 43196: case 43197: case 43198: case 43199: case 43200: case 43201: case 43202: case 43203: case 43204: case 43205: return 1142 + c - 43188; case 43232: case 43233: case 43234: case 43235: case 43236: case 43237: case 43238: case 43239: case 43240: case 43241: case 43242: case 43243: case 43244: case 43245: case 43246: case 43247: case 43248: case 43249: return 1160 + c - 43232; case 43263: return 1178; case 43302: case 43303: case 43304: case 43305: case 43306: case 43307: case 43308: case 43309: return 1179 + c - 43302; case 43335: case 43336: case 43337: case 43338: case 43339: case 43340: case 43341: case 43342: case 43343: case 43344: case 43345: case 43346: case 43347: return 1187 + c - 43335; case 43392: case 43393: case 43394: case 43395: return 1200 + c - 43392; case 43443: case 43444: case 43445: case 43446: case 43447: case 43448: case 43449: case 43450: case 43451: case 43452: case 43453: case 43454: case 43455: case 43456: return 1204 + c - 43443; case 43493: return 1218; case 43561: case 43562: case 43563: case 43564: case 43565: case 43566: case 43567: case 43568: case 43569: case 43570: case 43571: case 43572: case 43573: case 43574: return 1219 + c - 43561; case 43587: return 1233; case 43596: case 43597: return 1234 + c - 43596; case 43643: case 43644: case 43645: return 1236 + c - 43643; case 43696: return 1239; case 43698: case 43699: case 43700: return 1240 + c - 43698; case 43703: case 43704: return 1243 + c - 43703; case 43710: case 43711: return 1245 + c - 43710; case 43713: return 1247; case 43755: case 43756: case 43757: case 43758: case 43759: return 1248 + c - 43755; case 43765: case 43766: return 1253 + c - 43765; case 44003: case 44004: case 44005: case 44006: case 44007: case 44008: case 44009: case 44010: return 1255 + c - 44003; case 44012: case 44013: return 1263 + c - 44012; case 64286: return 1265; case 65024: case 65025: case 65026: case 65027: case 65028: case 65029: case 65030: case 65031: case 65032: case 65033: case 65034: case 65035: case 65036: case 65037: case 65038: case 65039: return 1266 + c - 65024; case 65056: case 65057: case 65058: case 65059: case 65060: case 65061: case 65062: case 65063: case 65064: case 65065: case 65066: case 65067: case 65068: case 65069: case 65070: case 65071: return 1282 + c - 65056; case 66045: return 1298; case 66272: return 1299; case 66422: case 66423: case 66424: case 66425: case 66426: return 1300 + c - 66422; case 68097: case 68098: case 68099: return 1305 + c - 68097; case 68101: case 68102: return 1308 + c - 68101; case 68108: case 68109: case 68110: case 68111: return 1310 + c - 68108; case 68152: case 68153: case 68154: return 1314 + c - 68152; case 68159: return 1317; case 68325: case 68326: return 1318 + c - 68325; case 68900: case 68901: case 68902: case 68903: return 1320 + c - 68900; case 69446: case 69447: case 69448: case 69449: case 69450: case 69451: case 69452: case 69453: case 69454: case 69455: case 69456: return 1324 + c - 69446; case 69632: case 69633: case 69634: return 1335 + c - 69632; case 69688: case 69689: case 69690: case 69691: case 69692: case 69693: case 69694: case 69695: case 69696: case 69697: case 69698: case 69699: case 69700: case 69701: case 69702: return 1338 + c - 69688; case 69759: case 69760: case 69761: case 69762: return 1353 + c - 69759; case 69808: case 69809: case 69810: case 69811: case 69812: case 69813: case 69814: case 69815: case 69816: case 69817: case 69818: return 1357 + c - 69808; case 69888: case 69889: case 69890: return 1368 + c - 69888; case 69927: case 69928: case 69929: case 69930: case 69931: case 69932: case 69933: case 69934: case 69935: case 69936: case 69937: case 69938: case 69939: case 69940: return 1371 + c - 69927; case 69957: case 69958: return 1385 + c - 69957; case 70003: return 1387; case 70016: case 70017: case 70018: return 1388 + c - 70016; case 70067: case 70068: case 70069: case 70070: case 70071: case 70072: case 70073: case 70074: case 70075: case 70076: case 70077: case 70078: case 70079: case 70080: return 1391 + c - 70067; case 70089: case 70090: case 70091: case 70092: return 1405 + c - 70089; case 70188: case 70189: case 70190: case 70191: case 70192: case 70193: case 70194: case 70195: case 70196: case 70197: case 70198: case 70199: return 1409 + c - 70188; case 70206: return 1421; case 70367: case 70368: case 70369: case 70370: case 70371: case 70372: case 70373: case 70374: case 70375: case 70376: case 70377: case 70378: return 1422 + c - 70367; case 70400: case 70401: case 70402: case 70403: return 1434 + c - 70400; case 70459: case 70460: return 1438 + c - 70459; case 70462: case 70463: case 70464: case 70465: case 70466: case 70467: case 70468: return 1440 + c - 70462; case 70471: case 70472: return 1447 + c - 70471; case 70475: case 70476: case 70477: return 1449 + c - 70475; case 70487: return 1452; case 70498: case 70499: return 1453 + c - 70498; case 70502: case 70503: case 70504: case 70505: case 70506: case 70507: case 70508: return 1455 + c - 70502; case 70512: case 70513: case 70514: case 70515: case 70516: return 1462 + c - 70512; case 70709: case 70710: case 70711: case 70712: case 70713: case 70714: case 70715: case 70716: case 70717: case 70718: case 70719: case 70720: case 70721: case 70722: case 70723: case 70724: case 70725: case 70726: return 1467 + c - 70709; case 70750: return 1485; case 70832: case 70833: case 70834: case 70835: case 70836: case 70837: case 70838: case 70839: case 70840: case 70841: case 70842: case 70843: case 70844: case 70845: case 70846: case 70847: case 70848: case 70849: case 70850: case 70851: return 1486 + c - 70832; case 71087: case 71088: case 71089: case 71090: case 71091: case 71092: case 71093: return 1506 + c - 71087; case 71096: case 71097: case 71098: case 71099: case 71100: case 71101: case 71102: case 71103: case 71104: return 1513 + c - 71096; case 71132: case 71133: return 1522 + c - 71132; case 71216: case 71217: case 71218: case 71219: case 71220: case 71221: case 71222: case 71223: case 71224: case 71225: case 71226: case 71227: case 71228: case 71229: case 71230: case 71231: case 71232: return 1524 + c - 71216; case 71339: case 71340: case 71341: case 71342: case 71343: case 71344: case 71345: case 71346: case 71347: case 71348: case 71349: case 71350: case 71351: return 1541 + c - 71339; case 71453: case 71454: case 71455: case 71456: case 71457: case 71458: case 71459: case 71460: case 71461: case 71462: case 71463: case 71464: case 71465: case 71466: case 71467: return 1554 + c - 71453; case 71724: case 71725: case 71726: case 71727: case 71728: case 71729: case 71730: case 71731: case 71732: case 71733: case 71734: case 71735: case 71736: case 71737: case 71738: return 1569 + c - 71724; case 72145: case 72146: case 72147: case 72148: case 72149: case 72150: case 72151: return 1584 + c - 72145; case 72154: case 72155: case 72156: case 72157: case 72158: case 72159: case 72160: return 1591 + c - 72154; case 72164: return 1598; case 72193: case 72194: case 72195: case 72196: case 72197: case 72198: case 72199: case 72200: case 72201: case 72202: return 1599 + c - 72193; case 72243: case 72244: case 72245: case 72246: case 72247: case 72248: case 72249: return 1609 + c - 72243; case 72251: case 72252: case 72253: case 72254: return 1616 + c - 72251; case 72263: return 1620; case 72273: case 72274: case 72275: case 72276: case 72277: case 72278: case 72279: case 72280: case 72281: case 72282: case 72283: return 1621 + c - 72273; case 72330: case 72331: case 72332: case 72333: case 72334: case 72335: case 72336: case 72337: case 72338: case 72339: case 72340: case 72341: case 72342: case 72343: case 72344: case 72345: return 1632 + c - 72330; case 72751: case 72752: case 72753: case 72754: case 72755: case 72756: case 72757: case 72758: return 1648 + c - 72751; case 72760: case 72761: case 72762: case 72763: case 72764: case 72765: case 72766: case 72767: return 1656 + c - 72760; case 72850: case 72851: case 72852: case 72853: case 72854: case 72855: case 72856: case 72857: case 72858: case 72859: case 72860: case 72861: case 72862: case 72863: case 72864: case 72865: case 72866: case 72867: case 72868: case 72869: case 72870: case 72871: return 1664 + c - 72850; case 72873: case 72874: case 72875: case 72876: case 72877: case 72878: case 72879: case 72880: case 72881: case 72882: case 72883: case 72884: case 72885: case 72886: return 1686 + c - 72873; case 73009: case 73010: case 73011: case 73012: case 73013: case 73014: return 1700 + c - 73009; case 73018: return 1706; case 73020: case 73021: return 1707 + c - 73020; case 73023: case 73024: case 73025: case 73026: case 73027: case 73028: case 73029: return 1709 + c - 73023; case 73031: return 1716; case 73098: case 73099: case 73100: case 73101: case 73102: return 1717 + c - 73098; case 73104: case 73105: return 1722 + c - 73104; case 73107: case 73108: case 73109: case 73110: case 73111: return 1724 + c - 73107; case 73459: case 73460: case 73461: case 73462: return 1729 + c - 73459; case 92912: case 92913: case 92914: case 92915: case 92916: return 1733 + c - 92912; case 92976: case 92977: case 92978: case 92979: case 92980: case 92981: case 92982: return 1738 + c - 92976; case 94031: return 1745; case 94033: case 94034: case 94035: case 94036: case 94037: case 94038: case 94039: case 94040: case 94041: case 94042: case 94043: case 94044: case 94045: case 94046: case 94047: case 94048: case 94049: case 94050: case 94051: case 94052: case 94053: case 94054: case 94055: case 94056: case 94057: case 94058: case 94059: case 94060: case 94061: case 94062: case 94063: case 94064: case 94065: case 94066: case 94067: case 94068: case 94069: case 94070: case 94071: case 94072: case 94073: case 94074: case 94075: case 94076: case 94077: case 94078: case 94079: case 94080: case 94081: case 94082: case 94083: case 94084: case 94085: case 94086: case 94087: return 1746 + c - 94033; case 94095: case 94096: case 94097: case 94098: return 1801 + c - 94095; case 113821: case 113822: return 1805 + c - 113821; case 119141: case 119142: case 119143: case 119144: case 119145: return 1807 + c - 119141; case 119149: case 119150: case 119151: case 119152: case 119153: case 119154: return 1812 + c - 119149; case 119163: case 119164: case 119165: case 119166: case 119167: case 119168: case 119169: case 119170: return 1818 + c - 119163; case 119173: case 119174: case 119175: case 119176: case 119177: case 119178: case 119179: return 1826 + c - 119173; case 119210: case 119211: case 119212: case 119213: return 1833 + c - 119210; case 119362: case 119363: case 119364: return 1837 + c - 119362; case 121344: case 121345: case 121346: case 121347: case 121348: case 121349: case 121350: case 121351: case 121352: case 121353: case 121354: case 121355: case 121356: case 121357: case 121358: case 121359: case 121360: case 121361: case 121362: case 121363: case 121364: case 121365: case 121366: case 121367: case 121368: case 121369: case 121370: case 121371: case 121372: case 121373: case 121374: case 121375: case 121376: case 121377: case 121378: case 121379: case 121380: case 121381: case 121382: case 121383: case 121384: case 121385: case 121386: case 121387: case 121388: case 121389: case 121390: case 121391: case 121392: case 121393: case 121394: case 121395: case 121396: case 121397: case 121398: return 1840 + c - 121344; case 121403: case 121404: case 121405: case 121406: case 121407: case 121408: case 121409: case 121410: case 121411: case 121412: case 121413: case 121414: case 121415: case 121416: case 121417: case 121418: case 121419: case 121420: case 121421: case 121422: case 121423: case 121424: case 121425: case 121426: case 121427: case 121428: case 121429: case 121430: case 121431: case 121432: case 121433: case 121434: case 121435: case 121436: case 121437: case 121438: case 121439: case 121440: case 121441: case 121442: case 121443: case 121444: case 121445: case 121446: case 121447: case 121448: case 121449: case 121450: case 121451: case 121452: return 1895 + c - 121403; case 121461: return 1945; case 121476: return 1946; case 121499: case 121500: case 121501: case 121502: case 121503: return 1947 + c - 121499; case 121505: case 121506: case 121507: case 121508: case 121509: case 121510: case 121511: case 121512: case 121513: case 121514: case 121515: case 121516: case 121517: case 121518: case 121519: return 1952 + c - 121505; case 122880: case 122881: case 122882: case 122883: case 122884: case 122885: case 122886: return 1967 + c - 122880; case 122888: case 122889: case 122890: case 122891: case 122892: case 122893: case 122894: case 122895: case 122896: case 122897: case 122898: case 122899: case 122900: case 122901: case 122902: case 122903: case 122904: return 1974 + c - 122888; case 122907: case 122908: case 122909: case 122910: case 122911: case 122912: case 122913: return 1991 + c - 122907; case 122915: case 122916: return 1998 + c - 122915; case 122918: case 122919: case 122920: case 122921: case 122922: return 2000 + c - 122918; case 123184: case 123185: case 123186: case 123187: case 123188: case 123189: case 123190: return 2005 + c - 123184; case 123628: case 123629: case 123630: case 123631: return 2012 + c - 123628; case 125136: case 125137: case 125138: case 125139: case 125140: case 125141: case 125142: return 2016 + c - 125136; case 125252: case 125253: case 125254: case 125255: case 125256: case 125257: case 125258: return 2023 + c - 125252; case 127995: case 127996: case 127997: case 127998: case 127999: return 2030 + c - 127995; case 917760: case 917761: case 917762: case 917763: case 917764: case 917765: case 917766: case 917767: case 917768: case 917769: case 917770: case 917771: case 917772: case 917773: case 917774: case 917775: case 917776: case 917777: case 917778: case 917779: case 917780: case 917781: case 917782: case 917783: case 917784: case 917785: case 917786: case 917787: case 917788: case 917789: case 917790: case 917791: case 917792: case 917793: case 917794: case 917795: case 917796: case 917797: case 917798: case 917799: case 917800: case 917801: case 917802: case 917803: case 917804: case 917805: case 917806: case 917807: case 917808: case 917809: case 917810: case 917811: case 917812: case 917813: case 917814: case 917815: case 917816: case 917817: case 917818: case 917819: case 917820: case 917821: case 917822: case 917823: case 917824: case 917825: case 917826: case 917827: case 917828: case 917829: case 917830: case 917831: case 917832: case 917833: case 917834: case 917835: case 917836: case 917837: case 917838: case 917839: case 917840: case 917841: case 917842: case 917843: case 917844: case 917845: case 917846: case 917847: case 917848: case 917849: case 917850: case 917851: case 917852: case 917853: case 917854: case 917855: case 917856: case 917857: case 917858: case 917859: case 917860: case 917861: case 917862: case 917863: case 917864: case 917865: case 917866: case 917867: case 917868: case 917869: case 917870: case 917871: case 917872: case 917873: case 917874: case 917875: case 917876: case 917877: case 917878: case 917879: case 917880: case 917881: case 917882: case 917883: case 917884: case 917885: case 917886: case 917887: case 917888: case 917889: case 917890: case 917891: case 917892: case 917893: case 917894: case 917895: case 917896: case 917897: case 917898: case 917899: case 917900: case 917901: case 917902: case 917903: case 917904: case 917905: case 917906: case 917907: case 917908: case 917909: case 917910: case 917911: case 917912: case 917913: case 917914: case 917915: case 917916: case 917917: case 917918: case 917919: case 917920: case 917921: case 917922: case 917923: case 917924: case 917925: case 917926: case 917927: case 917928: case 917929: case 917930: case 917931: case 917932: case 917933: case 917934: case 917935: case 917936: case 917937: case 917938: case 917939: case 917940: case 917941: case 917942: case 917943: case 917944: case 917945: case 917946: case 917947: case 917948: case 917949: case 917950: case 917951: case 917952: case 917953: case 917954: case 917955: case 917956: case 917957: case 917958: case 917959: case 917960: case 917961: case 917962: case 917963: case 917964: case 917965: case 917966: case 917967: case 917968: case 917969: case 917970: case 917971: case 917972: case 917973: case 917974: case 917975: case 917976: case 917977: case 917978: case 917979: case 917980: case 917981: case 917982: case 917983: case 917984: case 917985: case 917986: case 917987: case 917988: case 917989: case 917990: case 917991: case 917992: case 917993: case 917994: case 917995: case 917996: case 917997: case 917998: case 917999: return 2035 + c - 917760; default: return 0; } // }}} } END_ALLOW_CASE_RANGE kitty-0.15.0/kitty/unicode-data.h000066400000000000000000000014301356737523400166300ustar00rootroot00000000000000#pragma once #include "data-types.h" #define VS15 1280 #define VS16 1281 bool is_combining_char(char_type ch); bool is_ignored_char(char_type ch); bool is_word_char(char_type ch); bool is_CZ_category(char_type); bool is_P_category(char_type); char_type codepoint_for_mark(combining_type m); combining_type mark_for_codepoint(char_type c); static inline bool is_url_char(uint32_t ch) { return ch && !is_CZ_category(ch); } static inline bool can_strip_from_end_of_url(uint32_t ch) { // remove trailing punctuation return ( (is_P_category(ch) && ch != '/') || ch == '>' ) ? true : false; } static inline bool is_private_use(char_type ch) { return (0xe000 <= ch && ch <= 0xf8ff) || (0xF0000 <= ch && ch <= 0xFFFFF) || (0x100000 <= ch && ch <= 0x10FFFF); } kitty-0.15.0/kitty/update_check.py000066400000000000000000000072511356737523400171220ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal import os import subprocess import time from collections import namedtuple from urllib.request import urlopen from contextlib import suppress from .config import atomic_save from .constants import cache_dir, get_boss, kitty_exe, version from .fast_data_types import add_timer, monitor_pid from .notify import notify from .utils import log_error, open_url CHANGELOG_URL = 'https://sw.kovidgoyal.net/kitty/changelog.html' RELEASED_VERSION_URL = 'https://sw.kovidgoyal.net/kitty/current-version.txt' CHECK_INTERVAL = 24 * 60 * 60 Notification = namedtuple('Notification', 'version time_of_last_notification count') def notification_activated(): open_url(CHANGELOG_URL) def version_notification_log(): override = getattr(version_notification_log, 'override', None) if override: return override return os.path.join(cache_dir(), 'new-version-notifications-1.txt') def notify_new_version(release_version): notify( 'kitty update available!', 'kitty version {} released'.format('.'.join(map(str, release_version))), identifier='new-version', ) def get_released_version(): try: raw = urlopen(RELEASED_VERSION_URL).read().decode('utf-8').strip() except Exception: raw = '0.0.0' return raw def parse_line(line): parts = line.split(',') version, timestamp, count = parts version = tuple(map(int, version.split('.'))) return Notification(version, float(timestamp), int(count)) def read_cache(): notified_versions = {} with suppress(FileNotFoundError): with open(version_notification_log()) as f: for line in f: try: n = parse_line(line) except Exception: continue notified_versions[n.version] = n return notified_versions def already_notified(version): notified_versions = read_cache() return version in notified_versions def save_notification(version): notified_versions = read_cache() if version in notified_versions: v = notified_versions[version] notified_versions[version] = v._replace(time_of_last_notification=time.time(), count=v.count + 1) else: notified_versions[version] = Notification(version, time.time(), 1) lines = [] for version in sorted(notified_versions): n = notified_versions[version] lines.append('{},{},{}'.format( '.'.join(map(str, n.version)), n.time_of_last_notification, n.count)) atomic_save('\n'.join(lines).encode('utf-8'), version_notification_log()) def process_current_release(raw): release_version = tuple(map(int, raw.split('.'))) if release_version > version and not already_notified(release_version): save_notification(release_version) notify_new_version(release_version) def run_worker(): import time import random time.sleep(random.randint(1000, 4000) / 1000) with suppress(BrokenPipeError): # happens if parent process is killed before us print(get_released_version()) def update_check(timer_id=None): try: p = subprocess.Popen([ kitty_exe(), '+runpy', 'from kitty.update_check import run_worker; run_worker()' ], stdout=subprocess.PIPE) except EnvironmentError as e: log_error('Failed to run kitty for update check, with error: {}'.format(e)) return False monitor_pid(p.pid) get_boss().set_update_check_process(p) return True def run_update_check(interval=CHECK_INTERVAL): if update_check(): add_timer(update_check, interval) kitty-0.15.0/kitty/utils.py000066400000000000000000000317011356737523400156400ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import atexit import errno import fcntl import math import os import re import string import sys from time import monotonic from contextlib import suppress from .constants import ( appname, is_macos, is_wayland, supports_primary_selection ) from .rgb import Color, to_color BASE = os.path.dirname(os.path.abspath(__file__)) def load_shaders(name): from .fast_data_types import GLSL_VERSION with open(os.path.join(BASE, '{}_vertex.glsl'.format(name))) as f: vert = f.read().replace('GLSL_VERSION', str(GLSL_VERSION), 1) with open(os.path.join(BASE, '{}_fragment.glsl'.format(name))) as f: frag = f.read().replace('GLSL_VERSION', str(GLSL_VERSION), 1) return vert, frag def safe_print(*a, **k): with suppress(Exception): print(*a, **k) def log_error(*a, **k): from .fast_data_types import log_error_string with suppress(Exception): msg = k.get('sep', ' ').join(map(str, a)) + k.get('end', '') log_error_string(msg.replace('\0', '')) def ceil_int(x): return int(math.ceil(x)) def sanitize_title(x): return re.sub(r'\s+', ' ', re.sub(r'[\0-\x19\x80-\x9f]', '', x)) def color_as_int(val): return val[0] << 16 | val[1] << 8 | val[2] def color_from_int(val): return Color((val >> 16) & 0xFF, (val >> 8) & 0xFF, val & 0xFF) def parse_color_set(raw): parts = raw.split(';') lp = len(parts) if lp % 2 != 0: return for c, spec in [parts[i:i + 2] for i in range(0, len(parts), 2)]: try: c = int(c) if c < 0 or c > 255: continue if spec == '?': yield c, None else: r, g, b = to_color(spec) yield c, r << 16 | g << 8 | b except Exception: continue def screen_size_function(fd=None): ans = getattr(screen_size_function, 'ans', None) if ans is None: from collections import namedtuple import array import fcntl import termios Size = namedtuple('Size', 'rows cols width height cell_width cell_height') if fd is None: fd = sys.stdout def screen_size(): if screen_size.changed: buf = array.array('H', [0, 0, 0, 0]) fcntl.ioctl(fd, termios.TIOCGWINSZ, buf) rows, cols, width, height = tuple(buf) cell_width, cell_height = width // (cols or 1), height // (rows or 1) screen_size.ans = Size(rows, cols, width, height, cell_width, cell_height) screen_size.changed = False return screen_size.ans screen_size.changed = True screen_size.Size = Size ans = screen_size_function.ans = screen_size return ans def fit_image(width, height, pwidth, pheight): from math import floor if height > pheight: corrf = pheight / float(height) width, height = floor(corrf * width), pheight if width > pwidth: corrf = pwidth / float(width) width, height = pwidth, floor(corrf * height) if height > pheight: corrf = pheight / float(height) width, height = floor(corrf * width), pheight return int(width), int(height) def set_primary_selection(text): if not supports_primary_selection: return # There is no primary selection if isinstance(text, bytes): text = text.decode('utf-8') from kitty.fast_data_types import set_primary_selection set_primary_selection(text) def get_primary_selection(): if not supports_primary_selection: return '' # There is no primary selection from kitty.fast_data_types import get_primary_selection return (get_primary_selection() or b'').decode('utf-8', 'replace') def base64_encode( integer, chars=string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/' ): ans = '' while True: integer, remainder = divmod(integer, 64) ans = chars[remainder] + ans if integer == 0: break return ans def command_for_open(program='default'): if isinstance(program, str): from .conf.utils import to_cmdline program = to_cmdline(program) if program == ['default']: cmd = ['open'] if is_macos else ['xdg-open'] else: cmd = program return cmd def open_cmd(cmd, arg=None, cwd=None): import subprocess if arg is not None: cmd = list(cmd) if isinstance(arg, (list, tuple)): cmd.extend(arg) else: cmd.append(arg) return subprocess.Popen(cmd, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, cwd=cwd or None) def open_url(url, program='default', cwd=None): return open_cmd(command_for_open(program), url, cwd=cwd) def detach(fork=True, setsid=True, redirect=True): if fork: # Detach from the controlling process. if os.fork() != 0: raise SystemExit(0) if setsid: os.setsid() if redirect: from .fast_data_types import redirect_std_streams redirect_std_streams(os.devnull) def adjust_line_height(cell_height, val): if isinstance(val, int): return cell_height + val return int(cell_height * val) def init_startup_notification_x11(window_handle, startup_id=None): # https://specifications.freedesktop.org/startup-notification-spec/startup-notification-latest.txt from kitty.fast_data_types import init_x11_startup_notification sid = startup_id or os.environ.pop('DESKTOP_STARTUP_ID', None) # ensure child processes don't get this env var if not sid: return from .fast_data_types import x11_display display = x11_display() if not display: return return init_x11_startup_notification(display, window_handle, sid) def end_startup_notification_x11(ctx): from kitty.fast_data_types import end_x11_startup_notification end_x11_startup_notification(ctx) def init_startup_notification(window_handle, startup_id=None): if is_macos or is_wayland(): return if window_handle is None: log_error('Could not perform startup notification as window handle not present') return try: return init_startup_notification_x11(window_handle, startup_id) except Exception: import traceback traceback.print_exc() def end_startup_notification(ctx): if not ctx: return if is_macos or is_wayland(): return try: end_startup_notification_x11(ctx) except Exception: import traceback traceback.print_exc() class startup_notification_handler: def __init__(self, do_notify=True, startup_id=None, extra_callback=None): self.do_notify = do_notify self.startup_id = startup_id self.extra_callback = extra_callback self.ctx = None def __enter__(self): def pre_show_callback(window_handle): if self.extra_callback is not None: self.extra_callback(window_handle) if self.do_notify: self.ctx = init_startup_notification(window_handle, self.startup_id) return pre_show_callback def __exit__(self, *a): if self.ctx is not None: end_startup_notification(self.ctx) def remove_socket_file(s, path=None): with suppress(EnvironmentError): s.close() if path: with suppress(EnvironmentError): os.unlink(path) def unix_socket_paths(name, ext='.lock'): import tempfile home = os.path.expanduser('~') candidates = [tempfile.gettempdir(), home] if is_macos: from .fast_data_types import user_cache_dir candidates = [user_cache_dir(), '/Library/Caches'] for loc in candidates: if os.access(loc, os.W_OK | os.R_OK | os.X_OK): filename = ('.' if loc == home else '') + name + ext yield os.path.join(loc, filename) def single_instance_unix(name): import socket for path in unix_socket_paths(name): socket_path = path.rpartition('.')[0] + '.sock' fd = os.open(path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC | os.O_CLOEXEC) try: fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB) except EnvironmentError as err: if err.errno in (errno.EAGAIN, errno.EACCES): # Client s = socket.socket(family=socket.AF_UNIX) s.connect(socket_path) single_instance.socket = s return False raise s = socket.socket(family=socket.AF_UNIX) try: s.bind(socket_path) except EnvironmentError as err: if err.errno in (errno.EADDRINUSE, errno.EEXIST): os.unlink(socket_path) s.bind(socket_path) else: raise single_instance.socket = s # prevent garbage collection from closing the socket atexit.register(remove_socket_file, s, socket_path) s.listen() s.set_inheritable(False) return True def single_instance(group_id=None): import socket name = '{}-ipc-{}'.format(appname, os.geteuid()) if group_id: name += '-{}'.format(group_id) s = socket.socket(family=socket.AF_UNIX) # First try with abstract UDS addr = '\0' + name try: s.bind(addr) except EnvironmentError as err: if err.errno == errno.ENOENT: return single_instance_unix(name) if err.errno == errno.EADDRINUSE: s.connect(addr) single_instance.socket = s return False raise s.listen() single_instance.socket = s # prevent garbage collection from closing the socket s.set_inheritable(False) atexit.register(remove_socket_file, s) return True def parse_address_spec(spec): import socket protocol, rest = spec.split(':', 1) socket_path = None if protocol == 'unix': family = socket.AF_UNIX address = rest if address.startswith('@') and len(address) > 1: address = '\0' + address[1:] else: socket_path = address elif protocol in ('tcp', 'tcp6'): family = socket.AF_INET if protocol == 'tcp' else socket.AF_INET6 host, port = rest.rsplit(':', 1) address = host, int(port) else: raise ValueError('Unknown protocol in --listen-on value: {}'.format(spec)) return family, address, socket_path def write_all(fd, data): if isinstance(data, str): data = data.encode('utf-8') while data: n = os.write(fd, data) if not n: break data = data[n:] class TTYIO: def __enter__(self): from .fast_data_types import open_tty self.tty_fd, self.original_termios = open_tty(True) return self def __exit__(self, *a): from .fast_data_types import close_tty close_tty(self.tty_fd, self.original_termios) def send(self, data): if isinstance(data, (str, bytes)): write_all(self.tty_fd, data) else: for chunk in data: write_all(self.tty_fd, chunk) def recv(self, more_needed, timeout, sz=1): fd = self.tty_fd start_time = monotonic() while timeout > monotonic() - start_time: # will block for 0.1 secs waiting for data because we have set # VMIN=0 VTIME=1 in termios data = os.read(fd, sz) if data and not more_needed(data): break def natsort_ints(iterable): def convert(text): return int(text) if text.isdigit() else text def alphanum_key(key): return tuple(map(convert, re.split(r'(\d+)', key))) return sorted(iterable, key=alphanum_key) def exe_exists(exe): for loc in os.environ.get('PATH', '').split(os.pathsep): if loc and os.access(os.path.join(loc, exe), os.X_OK): return os.path.join(loc, exe) return False def get_editor(): ans = getattr(get_editor, 'ans', False) if ans is False: import shlex for ans in (os.environ.get('VISUAL'), os.environ.get('EDITOR'), 'vim', 'nvim', 'vi', 'emacs', 'kak', 'micro', 'nano', 'vis'): if ans and exe_exists(shlex.split(ans)[0]): break else: ans = 'vim' ans = shlex.split(ans) get_editor.ans = ans return ans def is_path_in_temp_dir(path): if not path: return False def abspath(x): if x: return os.path.abspath(os.path.realpath(x)) import tempfile path = abspath(path) candidates = frozenset(map(abspath, ('/tmp', '/dev/shm', os.environ.get('TMPDIR', None), tempfile.gettempdir()))) for q in candidates: if q and path.startswith(q): return True return False def func_name(f): if hasattr(f, '__name__'): return f.__name__ if hasattr(f, 'func') and hasattr(f.func, '__name__'): return f.func.__name__ return str(f) kitty-0.15.0/kitty/wcwidth-std.h000066400000000000000000001567721356737523400165600ustar00rootroot00000000000000// unicode data, built from the unicode standard on: 2019-10-01 // see gen-wcwidth.py #pragma once #include "data-types.h" START_ALLOW_CASE_RANGE static int wcwidth_std(int32_t code) { switch(code) { // Marks (2275 codepoints) {{{ case 0x0: return 0; case 0x300 ... 0x36f: return 0; case 0x483 ... 0x489: return 0; case 0x591 ... 0x5bd: return 0; case 0x5bf: return 0; case 0x5c1 ... 0x5c2: return 0; case 0x5c4 ... 0x5c5: return 0; case 0x5c7: return 0; case 0x610 ... 0x61a: return 0; case 0x64b ... 0x65f: return 0; case 0x670: return 0; case 0x6d6 ... 0x6dc: return 0; case 0x6df ... 0x6e4: return 0; case 0x6e7 ... 0x6e8: return 0; case 0x6ea ... 0x6ed: return 0; case 0x711: return 0; case 0x730 ... 0x74a: return 0; case 0x7a6 ... 0x7b0: return 0; case 0x7eb ... 0x7f3: return 0; case 0x7fd: return 0; case 0x816 ... 0x819: return 0; case 0x81b ... 0x823: return 0; case 0x825 ... 0x827: return 0; case 0x829 ... 0x82d: return 0; case 0x859 ... 0x85b: return 0; case 0x8d3 ... 0x8e1: return 0; case 0x8e3 ... 0x903: return 0; case 0x93a ... 0x93c: return 0; case 0x93e ... 0x94f: return 0; case 0x951 ... 0x957: return 0; case 0x962 ... 0x963: return 0; case 0x981 ... 0x983: return 0; case 0x9bc: return 0; case 0x9be ... 0x9c4: return 0; case 0x9c7 ... 0x9c8: return 0; case 0x9cb ... 0x9cd: return 0; case 0x9d7: return 0; case 0x9e2 ... 0x9e3: return 0; case 0x9fe: return 0; case 0xa01 ... 0xa03: return 0; case 0xa3c: return 0; case 0xa3e ... 0xa42: return 0; case 0xa47 ... 0xa48: return 0; case 0xa4b ... 0xa4d: return 0; case 0xa51: return 0; case 0xa70 ... 0xa71: return 0; case 0xa75: return 0; case 0xa81 ... 0xa83: return 0; case 0xabc: return 0; case 0xabe ... 0xac5: return 0; case 0xac7 ... 0xac9: return 0; case 0xacb ... 0xacd: return 0; case 0xae2 ... 0xae3: return 0; case 0xafa ... 0xaff: return 0; case 0xb01 ... 0xb03: return 0; case 0xb3c: return 0; case 0xb3e ... 0xb44: return 0; case 0xb47 ... 0xb48: return 0; case 0xb4b ... 0xb4d: return 0; case 0xb56 ... 0xb57: return 0; case 0xb62 ... 0xb63: return 0; case 0xb82: return 0; case 0xbbe ... 0xbc2: return 0; case 0xbc6 ... 0xbc8: return 0; case 0xbca ... 0xbcd: return 0; case 0xbd7: return 0; case 0xc00 ... 0xc04: return 0; case 0xc3e ... 0xc44: return 0; case 0xc46 ... 0xc48: return 0; case 0xc4a ... 0xc4d: return 0; case 0xc55 ... 0xc56: return 0; case 0xc62 ... 0xc63: return 0; case 0xc81 ... 0xc83: return 0; case 0xcbc: return 0; case 0xcbe ... 0xcc4: return 0; case 0xcc6 ... 0xcc8: return 0; case 0xcca ... 0xccd: return 0; case 0xcd5 ... 0xcd6: return 0; case 0xce2 ... 0xce3: return 0; case 0xd00 ... 0xd03: return 0; case 0xd3b ... 0xd3c: return 0; case 0xd3e ... 0xd44: return 0; case 0xd46 ... 0xd48: return 0; case 0xd4a ... 0xd4d: return 0; case 0xd57: return 0; case 0xd62 ... 0xd63: return 0; case 0xd82 ... 0xd83: return 0; case 0xdca: return 0; case 0xdcf ... 0xdd4: return 0; case 0xdd6: return 0; case 0xdd8 ... 0xddf: return 0; case 0xdf2 ... 0xdf3: return 0; case 0xe31: return 0; case 0xe34 ... 0xe3a: return 0; case 0xe47 ... 0xe4e: return 0; case 0xeb1: return 0; case 0xeb4 ... 0xebc: return 0; case 0xec8 ... 0xecd: return 0; case 0xf18 ... 0xf19: return 0; case 0xf35: return 0; case 0xf37: return 0; case 0xf39: return 0; case 0xf3e ... 0xf3f: return 0; case 0xf71 ... 0xf84: return 0; case 0xf86 ... 0xf87: return 0; case 0xf8d ... 0xf97: return 0; case 0xf99 ... 0xfbc: return 0; case 0xfc6: return 0; case 0x102b ... 0x103e: return 0; case 0x1056 ... 0x1059: return 0; case 0x105e ... 0x1060: return 0; case 0x1062 ... 0x1064: return 0; case 0x1067 ... 0x106d: return 0; case 0x1071 ... 0x1074: return 0; case 0x1082 ... 0x108d: return 0; case 0x108f: return 0; case 0x109a ... 0x109d: return 0; case 0x135d ... 0x135f: return 0; case 0x1712 ... 0x1714: return 0; case 0x1732 ... 0x1734: return 0; case 0x1752 ... 0x1753: return 0; case 0x1772 ... 0x1773: return 0; case 0x17b4 ... 0x17d3: return 0; case 0x17dd: return 0; case 0x180b ... 0x180d: return 0; case 0x1885 ... 0x1886: return 0; case 0x18a9: return 0; case 0x1920 ... 0x192b: return 0; case 0x1930 ... 0x193b: return 0; case 0x1a17 ... 0x1a1b: return 0; case 0x1a55 ... 0x1a5e: return 0; case 0x1a60 ... 0x1a7c: return 0; case 0x1a7f: return 0; case 0x1ab0 ... 0x1abe: return 0; case 0x1b00 ... 0x1b04: return 0; case 0x1b34 ... 0x1b44: return 0; case 0x1b6b ... 0x1b73: return 0; case 0x1b80 ... 0x1b82: return 0; case 0x1ba1 ... 0x1bad: return 0; case 0x1be6 ... 0x1bf3: return 0; case 0x1c24 ... 0x1c37: return 0; case 0x1cd0 ... 0x1cd2: return 0; case 0x1cd4 ... 0x1ce8: return 0; case 0x1ced: return 0; case 0x1cf4: return 0; case 0x1cf7 ... 0x1cf9: return 0; case 0x1dc0 ... 0x1df9: return 0; case 0x1dfb ... 0x1dff: return 0; case 0x200d: return 0; case 0x20d0 ... 0x20f0: return 0; case 0x2cef ... 0x2cf1: return 0; case 0x2d7f: return 0; case 0x2de0 ... 0x2dff: return 0; case 0x302a ... 0x302f: return 0; case 0x3099 ... 0x309a: return 0; case 0xa66f ... 0xa672: return 0; case 0xa674 ... 0xa67d: return 0; case 0xa69e ... 0xa69f: return 0; case 0xa6f0 ... 0xa6f1: return 0; case 0xa802: return 0; case 0xa806: return 0; case 0xa80b: return 0; case 0xa823 ... 0xa827: return 0; case 0xa880 ... 0xa881: return 0; case 0xa8b4 ... 0xa8c5: return 0; case 0xa8e0 ... 0xa8f1: return 0; case 0xa8ff: return 0; case 0xa926 ... 0xa92d: return 0; case 0xa947 ... 0xa953: return 0; case 0xa980 ... 0xa983: return 0; case 0xa9b3 ... 0xa9c0: return 0; case 0xa9e5: return 0; case 0xaa29 ... 0xaa36: return 0; case 0xaa43: return 0; case 0xaa4c ... 0xaa4d: return 0; case 0xaa7b ... 0xaa7d: return 0; case 0xaab0: return 0; case 0xaab2 ... 0xaab4: return 0; case 0xaab7 ... 0xaab8: return 0; case 0xaabe ... 0xaabf: return 0; case 0xaac1: return 0; case 0xaaeb ... 0xaaef: return 0; case 0xaaf5 ... 0xaaf6: return 0; case 0xabe3 ... 0xabea: return 0; case 0xabec ... 0xabed: return 0; case 0xfb1e: return 0; case 0xfe00 ... 0xfe0f: return 0; case 0xfe20 ... 0xfe2f: return 0; case 0x101fd: return 0; case 0x102e0: return 0; case 0x10376 ... 0x1037a: return 0; case 0x10a01 ... 0x10a03: return 0; case 0x10a05 ... 0x10a06: return 0; case 0x10a0c ... 0x10a0f: return 0; case 0x10a38 ... 0x10a3a: return 0; case 0x10a3f: return 0; case 0x10ae5 ... 0x10ae6: return 0; case 0x10d24 ... 0x10d27: return 0; case 0x10f46 ... 0x10f50: return 0; case 0x11000 ... 0x11002: return 0; case 0x11038 ... 0x11046: return 0; case 0x1107f ... 0x11082: return 0; case 0x110b0 ... 0x110ba: return 0; case 0x11100 ... 0x11102: return 0; case 0x11127 ... 0x11134: return 0; case 0x11145 ... 0x11146: return 0; case 0x11173: return 0; case 0x11180 ... 0x11182: return 0; case 0x111b3 ... 0x111c0: return 0; case 0x111c9 ... 0x111cc: return 0; case 0x1122c ... 0x11237: return 0; case 0x1123e: return 0; case 0x112df ... 0x112ea: return 0; case 0x11300 ... 0x11303: return 0; case 0x1133b ... 0x1133c: return 0; case 0x1133e ... 0x11344: return 0; case 0x11347 ... 0x11348: return 0; case 0x1134b ... 0x1134d: return 0; case 0x11357: return 0; case 0x11362 ... 0x11363: return 0; case 0x11366 ... 0x1136c: return 0; case 0x11370 ... 0x11374: return 0; case 0x11435 ... 0x11446: return 0; case 0x1145e: return 0; case 0x114b0 ... 0x114c3: return 0; case 0x115af ... 0x115b5: return 0; case 0x115b8 ... 0x115c0: return 0; case 0x115dc ... 0x115dd: return 0; case 0x11630 ... 0x11640: return 0; case 0x116ab ... 0x116b7: return 0; case 0x1171d ... 0x1172b: return 0; case 0x1182c ... 0x1183a: return 0; case 0x119d1 ... 0x119d7: return 0; case 0x119da ... 0x119e0: return 0; case 0x119e4: return 0; case 0x11a01 ... 0x11a0a: return 0; case 0x11a33 ... 0x11a39: return 0; case 0x11a3b ... 0x11a3e: return 0; case 0x11a47: return 0; case 0x11a51 ... 0x11a5b: return 0; case 0x11a8a ... 0x11a99: return 0; case 0x11c2f ... 0x11c36: return 0; case 0x11c38 ... 0x11c3f: return 0; case 0x11c92 ... 0x11ca7: return 0; case 0x11ca9 ... 0x11cb6: return 0; case 0x11d31 ... 0x11d36: return 0; case 0x11d3a: return 0; case 0x11d3c ... 0x11d3d: return 0; case 0x11d3f ... 0x11d45: return 0; case 0x11d47: return 0; case 0x11d8a ... 0x11d8e: return 0; case 0x11d90 ... 0x11d91: return 0; case 0x11d93 ... 0x11d97: return 0; case 0x11ef3 ... 0x11ef6: return 0; case 0x16af0 ... 0x16af4: return 0; case 0x16b30 ... 0x16b36: return 0; case 0x16f4f: return 0; case 0x16f51 ... 0x16f87: return 0; case 0x16f8f ... 0x16f92: return 0; case 0x1bc9d ... 0x1bc9e: return 0; case 0x1d165 ... 0x1d169: return 0; case 0x1d16d ... 0x1d172: return 0; case 0x1d17b ... 0x1d182: return 0; case 0x1d185 ... 0x1d18b: return 0; case 0x1d1aa ... 0x1d1ad: return 0; case 0x1d242 ... 0x1d244: return 0; case 0x1da00 ... 0x1da36: return 0; case 0x1da3b ... 0x1da6c: return 0; case 0x1da75: return 0; case 0x1da84: return 0; case 0x1da9b ... 0x1da9f: return 0; case 0x1daa1 ... 0x1daaf: return 0; case 0x1e000 ... 0x1e006: return 0; case 0x1e008 ... 0x1e018: return 0; case 0x1e01b ... 0x1e021: return 0; case 0x1e023 ... 0x1e024: return 0; case 0x1e026 ... 0x1e02a: return 0; case 0x1e130 ... 0x1e136: return 0; case 0x1e2ec ... 0x1e2ef: return 0; case 0x1e8d0 ... 0x1e8d6: return 0; case 0x1e944 ... 0x1e94a: return 0; case 0x1f3fb ... 0x1f3ff: return 0; case 0xe0100 ... 0xe01ef: return 0; // }}} // Non-printing characters (2272 codepoints) {{{ case 0x1 ... 0x1f: return -1; case 0x7f ... 0x9f: return -1; case 0xad: return -1; case 0x600 ... 0x605: return -1; case 0x61c: return -1; case 0x6dd: return -1; case 0x70f: return -1; case 0x8e2: return -1; case 0x180e: return -1; case 0x200b ... 0x200c: return -1; case 0x200e ... 0x200f: return -1; case 0x202a ... 0x202e: return -1; case 0x2060 ... 0x2064: return -1; case 0x2066 ... 0x206f: return -1; case 0xd800 ... 0xdfff: return -1; case 0xfeff: return -1; case 0xfff9 ... 0xfffb: return -1; case 0x110bd: return -1; case 0x110cd: return -1; case 0x13430 ... 0x13438: return -1; case 0x1bca0 ... 0x1bca3: return -1; case 0x1d173 ... 0x1d17a: return -1; case 0xe0001: return -1; case 0xe0020 ... 0xe007f: return -1; // }}} // Private use (137468 codepoints) {{{ case 0xe000 ... 0xf8ff: return -3; case 0xf0000 ... 0xffffd: return -3; case 0x100000 ... 0x10fffd: return -3; // }}} // Text Presentation (218 codepoints) {{{ case 0x23: return 1; case 0x2a: return 1; case 0x30 ... 0x39: return 1; case 0xa9: return 1; case 0xae: return 1; case 0x203c: return 1; case 0x2049: return 1; case 0x2122: return 1; case 0x2139: return 1; case 0x2194 ... 0x2199: return 1; case 0x21a9 ... 0x21aa: return 1; case 0x2328: return 1; case 0x23cf: return 1; case 0x23ed ... 0x23ef: return 1; case 0x23f1 ... 0x23f2: return 1; case 0x23f8 ... 0x23fa: return 1; case 0x24c2: return 1; case 0x25aa ... 0x25ab: return 1; case 0x25b6: return 1; case 0x25c0: return 1; case 0x25fb ... 0x25fc: return 1; case 0x2600 ... 0x2604: return 1; case 0x260e: return 1; case 0x2611: return 1; case 0x2618: return 1; case 0x261d: return 1; case 0x2620: return 1; case 0x2622 ... 0x2623: return 1; case 0x2626: return 1; case 0x262a: return 1; case 0x262e ... 0x262f: return 1; case 0x2638 ... 0x263a: return 1; case 0x2640: return 1; case 0x2642: return 1; case 0x265f ... 0x2660: return 1; case 0x2663: return 1; case 0x2665 ... 0x2666: return 1; case 0x2668: return 1; case 0x267b: return 1; case 0x267e: return 1; case 0x2692: return 1; case 0x2694 ... 0x2697: return 1; case 0x2699: return 1; case 0x269b ... 0x269c: return 1; case 0x26a0: return 1; case 0x26b0 ... 0x26b1: return 1; case 0x26c8: return 1; case 0x26cf: return 1; case 0x26d1: return 1; case 0x26d3: return 1; case 0x26e9: return 1; case 0x26f0 ... 0x26f1: return 1; case 0x26f4: return 1; case 0x26f7 ... 0x26f9: return 1; case 0x2702: return 1; case 0x2708 ... 0x2709: return 1; case 0x270c ... 0x270d: return 1; case 0x270f: return 1; case 0x2712: return 1; case 0x2714: return 1; case 0x2716: return 1; case 0x271d: return 1; case 0x2721: return 1; case 0x2733 ... 0x2734: return 1; case 0x2744: return 1; case 0x2747: return 1; case 0x2763 ... 0x2764: return 1; case 0x27a1: return 1; case 0x2934 ... 0x2935: return 1; case 0x2b05 ... 0x2b07: return 1; case 0x3030: return 1; case 0x303d: return 1; case 0x3297: return 1; case 0x3299: return 1; case 0x1f170 ... 0x1f171: return 1; case 0x1f17e ... 0x1f17f: return 1; case 0x1f202: return 1; case 0x1f237: return 1; case 0x1f321: return 1; case 0x1f324 ... 0x1f32c: return 1; case 0x1f336: return 1; case 0x1f37d: return 1; case 0x1f396 ... 0x1f397: return 1; case 0x1f399 ... 0x1f39b: return 1; case 0x1f39e ... 0x1f39f: return 1; case 0x1f3cb ... 0x1f3ce: return 1; case 0x1f3d4 ... 0x1f3df: return 1; case 0x1f3f3: return 1; case 0x1f3f5: return 1; case 0x1f3f7: return 1; case 0x1f43f: return 1; case 0x1f441: return 1; case 0x1f4fd: return 1; case 0x1f549 ... 0x1f54a: return 1; case 0x1f56f ... 0x1f570: return 1; case 0x1f573 ... 0x1f579: return 1; case 0x1f587: return 1; case 0x1f58a ... 0x1f58d: return 1; case 0x1f590: return 1; case 0x1f5a5: return 1; case 0x1f5a8: return 1; case 0x1f5b1 ... 0x1f5b2: return 1; case 0x1f5bc: return 1; case 0x1f5c2 ... 0x1f5c4: return 1; case 0x1f5d1 ... 0x1f5d3: return 1; case 0x1f5dc ... 0x1f5de: return 1; case 0x1f5e1: return 1; case 0x1f5e3: return 1; case 0x1f5e8: return 1; case 0x1f5ef: return 1; case 0x1f5f3: return 1; case 0x1f5fa: return 1; case 0x1f6cb: return 1; case 0x1f6cd ... 0x1f6cf: return 1; case 0x1f6e0 ... 0x1f6e5: return 1; case 0x1f6e9: return 1; case 0x1f6f0: return 1; case 0x1f6f3: return 1; // }}} // East Asian ambiguous width (869 codepoints) {{{ case 0xa1: return -2; case 0xa4: return -2; case 0xa7 ... 0xa8: return -2; case 0xaa: return -2; case 0xb0 ... 0xb4: return -2; case 0xb6 ... 0xba: return -2; case 0xbc ... 0xbf: return -2; case 0xc6: return -2; case 0xd0: return -2; case 0xd7 ... 0xd8: return -2; case 0xde ... 0xe1: return -2; case 0xe6: return -2; case 0xe8 ... 0xea: return -2; case 0xec ... 0xed: return -2; case 0xf0: return -2; case 0xf2 ... 0xf3: return -2; case 0xf7 ... 0xfa: return -2; case 0xfc: return -2; case 0xfe: return -2; case 0x101: return -2; case 0x111: return -2; case 0x113: return -2; case 0x11b: return -2; case 0x126 ... 0x127: return -2; case 0x12b: return -2; case 0x131 ... 0x133: return -2; case 0x138: return -2; case 0x13f ... 0x142: return -2; case 0x144: return -2; case 0x148 ... 0x14b: return -2; case 0x14d: return -2; case 0x152 ... 0x153: return -2; case 0x166 ... 0x167: return -2; case 0x16b: return -2; case 0x1ce: return -2; case 0x1d0: return -2; case 0x1d2: return -2; case 0x1d4: return -2; case 0x1d6: return -2; case 0x1d8: return -2; case 0x1da: return -2; case 0x1dc: return -2; case 0x251: return -2; case 0x261: return -2; case 0x2c4: return -2; case 0x2c7: return -2; case 0x2c9 ... 0x2cb: return -2; case 0x2cd: return -2; case 0x2d0: return -2; case 0x2d8 ... 0x2db: return -2; case 0x2dd: return -2; case 0x2df: return -2; case 0x391 ... 0x3a1: return -2; case 0x3a3 ... 0x3a9: return -2; case 0x3b1 ... 0x3c1: return -2; case 0x3c3 ... 0x3c9: return -2; case 0x401: return -2; case 0x410 ... 0x44f: return -2; case 0x451: return -2; case 0x2010: return -2; case 0x2013 ... 0x2016: return -2; case 0x2018 ... 0x2019: return -2; case 0x201c ... 0x201d: return -2; case 0x2020 ... 0x2022: return -2; case 0x2024 ... 0x2027: return -2; case 0x2030: return -2; case 0x2032 ... 0x2033: return -2; case 0x2035: return -2; case 0x203b: return -2; case 0x203e: return -2; case 0x2074: return -2; case 0x207f: return -2; case 0x2081 ... 0x2084: return -2; case 0x20ac: return -2; case 0x2103: return -2; case 0x2105: return -2; case 0x2109: return -2; case 0x2113: return -2; case 0x2116: return -2; case 0x2121: return -2; case 0x2126: return -2; case 0x212b: return -2; case 0x2153 ... 0x2154: return -2; case 0x215b ... 0x215e: return -2; case 0x2160 ... 0x216b: return -2; case 0x2170 ... 0x2179: return -2; case 0x2189: return -2; case 0x2190 ... 0x2193: return -2; case 0x21b8 ... 0x21b9: return -2; case 0x21d2: return -2; case 0x21d4: return -2; case 0x21e7: return -2; case 0x2200: return -2; case 0x2202 ... 0x2203: return -2; case 0x2207 ... 0x2208: return -2; case 0x220b: return -2; case 0x220f: return -2; case 0x2211: return -2; case 0x2215: return -2; case 0x221a: return -2; case 0x221d ... 0x2220: return -2; case 0x2223: return -2; case 0x2225: return -2; case 0x2227 ... 0x222c: return -2; case 0x222e: return -2; case 0x2234 ... 0x2237: return -2; case 0x223c ... 0x223d: return -2; case 0x2248: return -2; case 0x224c: return -2; case 0x2252: return -2; case 0x2260 ... 0x2261: return -2; case 0x2264 ... 0x2267: return -2; case 0x226a ... 0x226b: return -2; case 0x226e ... 0x226f: return -2; case 0x2282 ... 0x2283: return -2; case 0x2286 ... 0x2287: return -2; case 0x2295: return -2; case 0x2299: return -2; case 0x22a5: return -2; case 0x22bf: return -2; case 0x2312: return -2; case 0x2460 ... 0x24c1: return -2; case 0x24c3 ... 0x24e9: return -2; case 0x24eb ... 0x254b: return -2; case 0x2550 ... 0x2573: return -2; case 0x2580 ... 0x258f: return -2; case 0x2592 ... 0x2595: return -2; case 0x25a0 ... 0x25a1: return -2; case 0x25a3 ... 0x25a9: return -2; case 0x25b2 ... 0x25b3: return -2; case 0x25b7: return -2; case 0x25bc ... 0x25bd: return -2; case 0x25c1: return -2; case 0x25c6 ... 0x25c8: return -2; case 0x25cb: return -2; case 0x25ce ... 0x25d1: return -2; case 0x25e2 ... 0x25e5: return -2; case 0x25ef: return -2; case 0x2605 ... 0x2606: return -2; case 0x2609: return -2; case 0x260f: return -2; case 0x261c: return -2; case 0x261e: return -2; case 0x2661: return -2; case 0x2664: return -2; case 0x2667: return -2; case 0x2669 ... 0x266a: return -2; case 0x266c ... 0x266d: return -2; case 0x266f: return -2; case 0x269e ... 0x269f: return -2; case 0x26bf: return -2; case 0x26c6 ... 0x26c7: return -2; case 0x26c9 ... 0x26cd: return -2; case 0x26d0: return -2; case 0x26d2: return -2; case 0x26d5 ... 0x26e1: return -2; case 0x26e3: return -2; case 0x26e8: return -2; case 0x26eb ... 0x26ef: return -2; case 0x26f6: return -2; case 0x26fb ... 0x26fc: return -2; case 0x26fe ... 0x26ff: return -2; case 0x273d: return -2; case 0x2776 ... 0x277f: return -2; case 0x2b56 ... 0x2b59: return -2; case 0x3248 ... 0x324f: return -2; case 0xfffd: return -2; case 0x1f100 ... 0x1f10a: return -2; case 0x1f110 ... 0x1f12d: return -2; case 0x1f130 ... 0x1f169: return -2; case 0x1f172 ... 0x1f17d: return -2; case 0x1f180 ... 0x1f18d: return -2; case 0x1f18f ... 0x1f190: return -2; case 0x1f19b ... 0x1f1ac: return -2; // }}} // East Asian double width (181868 codepoints) {{{ case 0x1100 ... 0x115f: return 2; case 0x231a ... 0x231b: return 2; case 0x2329 ... 0x232a: return 2; case 0x23e9 ... 0x23ec: return 2; case 0x23f0: return 2; case 0x23f3: return 2; case 0x25fd ... 0x25fe: return 2; case 0x2614 ... 0x2615: return 2; case 0x2648 ... 0x2653: return 2; case 0x267f: return 2; case 0x2693: return 2; case 0x26a1: return 2; case 0x26aa ... 0x26ab: return 2; case 0x26bd ... 0x26be: return 2; case 0x26c4 ... 0x26c5: return 2; case 0x26ce: return 2; case 0x26d4: return 2; case 0x26ea: return 2; case 0x26f2 ... 0x26f3: return 2; case 0x26f5: return 2; case 0x26fa: return 2; case 0x26fd: return 2; case 0x2705: return 2; case 0x270a ... 0x270b: return 2; case 0x2728: return 2; case 0x274c: return 2; case 0x274e: return 2; case 0x2753 ... 0x2755: return 2; case 0x2757: return 2; case 0x2795 ... 0x2797: return 2; case 0x27b0: return 2; case 0x27bf: return 2; case 0x2b1b ... 0x2b1c: return 2; case 0x2b50: return 2; case 0x2b55: return 2; case 0x2e80 ... 0x2e99: return 2; case 0x2e9b ... 0x2ef3: return 2; case 0x2f00 ... 0x2fd5: return 2; case 0x2ff0 ... 0x2ffb: return 2; case 0x3000 ... 0x3029: return 2; case 0x3031 ... 0x303c: return 2; case 0x303e: return 2; case 0x3041 ... 0x3096: return 2; case 0x309b ... 0x30ff: return 2; case 0x3105 ... 0x312f: return 2; case 0x3131 ... 0x318e: return 2; case 0x3190 ... 0x31ba: return 2; case 0x31c0 ... 0x31e3: return 2; case 0x31f0 ... 0x321e: return 2; case 0x3220 ... 0x3247: return 2; case 0x3250 ... 0x3296: return 2; case 0x3298: return 2; case 0x329a ... 0x4dbf: return 2; case 0x4e00 ... 0xa48c: return 2; case 0xa490 ... 0xa4c6: return 2; case 0xa960 ... 0xa97c: return 2; case 0xac00 ... 0xd7a3: return 2; case 0xf900 ... 0xfaff: return 2; case 0xfe10 ... 0xfe19: return 2; case 0xfe30 ... 0xfe52: return 2; case 0xfe54 ... 0xfe66: return 2; case 0xfe68 ... 0xfe6b: return 2; case 0xff01 ... 0xff60: return 2; case 0xffe0 ... 0xffe6: return 2; case 0x16fe0 ... 0x16fe3: return 2; case 0x17000 ... 0x187f7: return 2; case 0x18800 ... 0x18af2: return 2; case 0x1b000 ... 0x1b11e: return 2; case 0x1b150 ... 0x1b152: return 2; case 0x1b164 ... 0x1b167: return 2; case 0x1b170 ... 0x1b2fb: return 2; case 0x1f004: return 2; case 0x1f0cf: return 2; case 0x1f18e: return 2; case 0x1f191 ... 0x1f19a: return 2; case 0x1f200 ... 0x1f201: return 2; case 0x1f210 ... 0x1f236: return 2; case 0x1f238 ... 0x1f23b: return 2; case 0x1f240 ... 0x1f248: return 2; case 0x1f250 ... 0x1f251: return 2; case 0x1f260 ... 0x1f265: return 2; case 0x1f300 ... 0x1f320: return 2; case 0x1f32d ... 0x1f335: return 2; case 0x1f337 ... 0x1f37c: return 2; case 0x1f37e ... 0x1f393: return 2; case 0x1f3a0 ... 0x1f3ca: return 2; case 0x1f3cf ... 0x1f3d3: return 2; case 0x1f3e0 ... 0x1f3f0: return 2; case 0x1f3f4: return 2; case 0x1f3f8 ... 0x1f3fa: return 2; case 0x1f400 ... 0x1f43e: return 2; case 0x1f440: return 2; case 0x1f442 ... 0x1f4fc: return 2; case 0x1f4ff ... 0x1f53d: return 2; case 0x1f54b ... 0x1f54e: return 2; case 0x1f550 ... 0x1f567: return 2; case 0x1f57a: return 2; case 0x1f595 ... 0x1f596: return 2; case 0x1f5a4: return 2; case 0x1f5fb ... 0x1f64f: return 2; case 0x1f680 ... 0x1f6c5: return 2; case 0x1f6cc: return 2; case 0x1f6d0 ... 0x1f6d2: return 2; case 0x1f6d5: return 2; case 0x1f6eb ... 0x1f6ec: return 2; case 0x1f6f4 ... 0x1f6fa: return 2; case 0x1f7e0 ... 0x1f7eb: return 2; case 0x1f90d ... 0x1f971: return 2; case 0x1f973 ... 0x1f976: return 2; case 0x1f97a ... 0x1f9a2: return 2; case 0x1f9a5 ... 0x1f9aa: return 2; case 0x1f9ae ... 0x1f9ca: return 2; case 0x1f9cd ... 0x1f9ff: return 2; case 0x1fa70 ... 0x1fa73: return 2; case 0x1fa78 ... 0x1fa7a: return 2; case 0x1fa80 ... 0x1fa82: return 2; case 0x1fa90 ... 0x1fa95: return 2; case 0x20000 ... 0x2fffd: return 2; case 0x30000 ... 0x3fffd: return 2; // }}} // Emoji Presentation (26 codepoints) {{{ case 0x1f1e6 ... 0x1f1ff: return 2; // }}} // Not assigned in the unicode character database (766326 codepoints) {{{ case 0x378 ... 0x379: return -4; case 0x380 ... 0x383: return -4; case 0x38b: return -4; case 0x38d: return -4; case 0x3a2: return -4; case 0x530: return -4; case 0x557 ... 0x558: return -4; case 0x58b ... 0x58c: return -4; case 0x590: return -4; case 0x5c8 ... 0x5cf: return -4; case 0x5eb ... 0x5ee: return -4; case 0x5f5 ... 0x5ff: return -4; case 0x61d: return -4; case 0x70e: return -4; case 0x74b ... 0x74c: return -4; case 0x7b2 ... 0x7bf: return -4; case 0x7fb ... 0x7fc: return -4; case 0x82e ... 0x82f: return -4; case 0x83f: return -4; case 0x85c ... 0x85d: return -4; case 0x85f: return -4; case 0x86b ... 0x89f: return -4; case 0x8b5: return -4; case 0x8be ... 0x8d2: return -4; case 0x984: return -4; case 0x98d ... 0x98e: return -4; case 0x991 ... 0x992: return -4; case 0x9a9: return -4; case 0x9b1: return -4; case 0x9b3 ... 0x9b5: return -4; case 0x9ba ... 0x9bb: return -4; case 0x9c5 ... 0x9c6: return -4; case 0x9c9 ... 0x9ca: return -4; case 0x9cf ... 0x9d6: return -4; case 0x9d8 ... 0x9db: return -4; case 0x9de: return -4; case 0x9e4 ... 0x9e5: return -4; case 0x9ff ... 0xa00: return -4; case 0xa04: return -4; case 0xa0b ... 0xa0e: return -4; case 0xa11 ... 0xa12: return -4; case 0xa29: return -4; case 0xa31: return -4; case 0xa34: return -4; case 0xa37: return -4; case 0xa3a ... 0xa3b: return -4; case 0xa3d: return -4; case 0xa43 ... 0xa46: return -4; case 0xa49 ... 0xa4a: return -4; case 0xa4e ... 0xa50: return -4; case 0xa52 ... 0xa58: return -4; case 0xa5d: return -4; case 0xa5f ... 0xa65: return -4; case 0xa77 ... 0xa80: return -4; case 0xa84: return -4; case 0xa8e: return -4; case 0xa92: return -4; case 0xaa9: return -4; case 0xab1: return -4; case 0xab4: return -4; case 0xaba ... 0xabb: return -4; case 0xac6: return -4; case 0xaca: return -4; case 0xace ... 0xacf: return -4; case 0xad1 ... 0xadf: return -4; case 0xae4 ... 0xae5: return -4; case 0xaf2 ... 0xaf8: return -4; case 0xb00: return -4; case 0xb04: return -4; case 0xb0d ... 0xb0e: return -4; case 0xb11 ... 0xb12: return -4; case 0xb29: return -4; case 0xb31: return -4; case 0xb34: return -4; case 0xb3a ... 0xb3b: return -4; case 0xb45 ... 0xb46: return -4; case 0xb49 ... 0xb4a: return -4; case 0xb4e ... 0xb55: return -4; case 0xb58 ... 0xb5b: return -4; case 0xb5e: return -4; case 0xb64 ... 0xb65: return -4; case 0xb78 ... 0xb81: return -4; case 0xb84: return -4; case 0xb8b ... 0xb8d: return -4; case 0xb91: return -4; case 0xb96 ... 0xb98: return -4; case 0xb9b: return -4; case 0xb9d: return -4; case 0xba0 ... 0xba2: return -4; case 0xba5 ... 0xba7: return -4; case 0xbab ... 0xbad: return -4; case 0xbba ... 0xbbd: return -4; case 0xbc3 ... 0xbc5: return -4; case 0xbc9: return -4; case 0xbce ... 0xbcf: return -4; case 0xbd1 ... 0xbd6: return -4; case 0xbd8 ... 0xbe5: return -4; case 0xbfb ... 0xbff: return -4; case 0xc0d: return -4; case 0xc11: return -4; case 0xc29: return -4; case 0xc3a ... 0xc3c: return -4; case 0xc45: return -4; case 0xc49: return -4; case 0xc4e ... 0xc54: return -4; case 0xc57: return -4; case 0xc5b ... 0xc5f: return -4; case 0xc64 ... 0xc65: return -4; case 0xc70 ... 0xc76: return -4; case 0xc8d: return -4; case 0xc91: return -4; case 0xca9: return -4; case 0xcb4: return -4; case 0xcba ... 0xcbb: return -4; case 0xcc5: return -4; case 0xcc9: return -4; case 0xcce ... 0xcd4: return -4; case 0xcd7 ... 0xcdd: return -4; case 0xcdf: return -4; case 0xce4 ... 0xce5: return -4; case 0xcf0: return -4; case 0xcf3 ... 0xcff: return -4; case 0xd04: return -4; case 0xd0d: return -4; case 0xd11: return -4; case 0xd45: return -4; case 0xd49: return -4; case 0xd50 ... 0xd53: return -4; case 0xd64 ... 0xd65: return -4; case 0xd80 ... 0xd81: return -4; case 0xd84: return -4; case 0xd97 ... 0xd99: return -4; case 0xdb2: return -4; case 0xdbc: return -4; case 0xdbe ... 0xdbf: return -4; case 0xdc7 ... 0xdc9: return -4; case 0xdcb ... 0xdce: return -4; case 0xdd5: return -4; case 0xdd7: return -4; case 0xde0 ... 0xde5: return -4; case 0xdf0 ... 0xdf1: return -4; case 0xdf5 ... 0xe00: return -4; case 0xe3b ... 0xe3e: return -4; case 0xe5c ... 0xe80: return -4; case 0xe83: return -4; case 0xe85: return -4; case 0xe8b: return -4; case 0xea4: return -4; case 0xea6: return -4; case 0xebe ... 0xebf: return -4; case 0xec5: return -4; case 0xec7: return -4; case 0xece ... 0xecf: return -4; case 0xeda ... 0xedb: return -4; case 0xee0 ... 0xeff: return -4; case 0xf48: return -4; case 0xf6d ... 0xf70: return -4; case 0xf98: return -4; case 0xfbd: return -4; case 0xfcd: return -4; case 0xfdb ... 0xfff: return -4; case 0x10c6: return -4; case 0x10c8 ... 0x10cc: return -4; case 0x10ce ... 0x10cf: return -4; case 0x1249: return -4; case 0x124e ... 0x124f: return -4; case 0x1257: return -4; case 0x1259: return -4; case 0x125e ... 0x125f: return -4; case 0x1289: return -4; case 0x128e ... 0x128f: return -4; case 0x12b1: return -4; case 0x12b6 ... 0x12b7: return -4; case 0x12bf: return -4; case 0x12c1: return -4; case 0x12c6 ... 0x12c7: return -4; case 0x12d7: return -4; case 0x1311: return -4; case 0x1316 ... 0x1317: return -4; case 0x135b ... 0x135c: return -4; case 0x137d ... 0x137f: return -4; case 0x139a ... 0x139f: return -4; case 0x13f6 ... 0x13f7: return -4; case 0x13fe ... 0x13ff: return -4; case 0x169d ... 0x169f: return -4; case 0x16f9 ... 0x16ff: return -4; case 0x170d: return -4; case 0x1715 ... 0x171f: return -4; case 0x1737 ... 0x173f: return -4; case 0x1754 ... 0x175f: return -4; case 0x176d: return -4; case 0x1771: return -4; case 0x1774 ... 0x177f: return -4; case 0x17de ... 0x17df: return -4; case 0x17ea ... 0x17ef: return -4; case 0x17fa ... 0x17ff: return -4; case 0x180f: return -4; case 0x181a ... 0x181f: return -4; case 0x1879 ... 0x187f: return -4; case 0x18ab ... 0x18af: return -4; case 0x18f6 ... 0x18ff: return -4; case 0x191f: return -4; case 0x192c ... 0x192f: return -4; case 0x193c ... 0x193f: return -4; case 0x1941 ... 0x1943: return -4; case 0x196e ... 0x196f: return -4; case 0x1975 ... 0x197f: return -4; case 0x19ac ... 0x19af: return -4; case 0x19ca ... 0x19cf: return -4; case 0x19db ... 0x19dd: return -4; case 0x1a1c ... 0x1a1d: return -4; case 0x1a5f: return -4; case 0x1a7d ... 0x1a7e: return -4; case 0x1a8a ... 0x1a8f: return -4; case 0x1a9a ... 0x1a9f: return -4; case 0x1aae ... 0x1aaf: return -4; case 0x1abf ... 0x1aff: return -4; case 0x1b4c ... 0x1b4f: return -4; case 0x1b7d ... 0x1b7f: return -4; case 0x1bf4 ... 0x1bfb: return -4; case 0x1c38 ... 0x1c3a: return -4; case 0x1c4a ... 0x1c4c: return -4; case 0x1c89 ... 0x1c8f: return -4; case 0x1cbb ... 0x1cbc: return -4; case 0x1cc8 ... 0x1ccf: return -4; case 0x1cfb ... 0x1cff: return -4; case 0x1dfa: return -4; case 0x1f16 ... 0x1f17: return -4; case 0x1f1e ... 0x1f1f: return -4; case 0x1f46 ... 0x1f47: return -4; case 0x1f4e ... 0x1f4f: return -4; case 0x1f58: return -4; case 0x1f5a: return -4; case 0x1f5c: return -4; case 0x1f5e: return -4; case 0x1f7e ... 0x1f7f: return -4; case 0x1fb5: return -4; case 0x1fc5: return -4; case 0x1fd4 ... 0x1fd5: return -4; case 0x1fdc: return -4; case 0x1ff0 ... 0x1ff1: return -4; case 0x1ff5: return -4; case 0x1fff: return -4; case 0x2065: return -4; case 0x2072 ... 0x2073: return -4; case 0x208f: return -4; case 0x209d ... 0x209f: return -4; case 0x20c0 ... 0x20cf: return -4; case 0x20f1 ... 0x20ff: return -4; case 0x218c ... 0x218f: return -4; case 0x2427 ... 0x243f: return -4; case 0x244b ... 0x245f: return -4; case 0x2b74 ... 0x2b75: return -4; case 0x2b96 ... 0x2b97: return -4; case 0x2c2f: return -4; case 0x2c5f: return -4; case 0x2cf4 ... 0x2cf8: return -4; case 0x2d26: return -4; case 0x2d28 ... 0x2d2c: return -4; case 0x2d2e ... 0x2d2f: return -4; case 0x2d68 ... 0x2d6e: return -4; case 0x2d71 ... 0x2d7e: return -4; case 0x2d97 ... 0x2d9f: return -4; case 0x2da7: return -4; case 0x2daf: return -4; case 0x2db7: return -4; case 0x2dbf: return -4; case 0x2dc7: return -4; case 0x2dcf: return -4; case 0x2dd7: return -4; case 0x2ddf: return -4; case 0x2e50 ... 0x2e7f: return -4; case 0x2e9a: return -4; case 0x2ef4 ... 0x2eff: return -4; case 0x2fd6 ... 0x2fef: return -4; case 0x2ffc ... 0x2fff: return -4; case 0x3040: return -4; case 0x3097 ... 0x3098: return -4; case 0x3100 ... 0x3104: return -4; case 0x3130: return -4; case 0x318f: return -4; case 0x31bb ... 0x31bf: return -4; case 0x31e4 ... 0x31ef: return -4; case 0x321f: return -4; case 0xa48d ... 0xa48f: return -4; case 0xa4c7 ... 0xa4cf: return -4; case 0xa62c ... 0xa63f: return -4; case 0xa6f8 ... 0xa6ff: return -4; case 0xa7c0 ... 0xa7c1: return -4; case 0xa7c7 ... 0xa7f6: return -4; case 0xa82c ... 0xa82f: return -4; case 0xa83a ... 0xa83f: return -4; case 0xa878 ... 0xa87f: return -4; case 0xa8c6 ... 0xa8cd: return -4; case 0xa8da ... 0xa8df: return -4; case 0xa954 ... 0xa95e: return -4; case 0xa97d ... 0xa97f: return -4; case 0xa9ce: return -4; case 0xa9da ... 0xa9dd: return -4; case 0xa9ff: return -4; case 0xaa37 ... 0xaa3f: return -4; case 0xaa4e ... 0xaa4f: return -4; case 0xaa5a ... 0xaa5b: return -4; case 0xaac3 ... 0xaada: return -4; case 0xaaf7 ... 0xab00: return -4; case 0xab07 ... 0xab08: return -4; case 0xab0f ... 0xab10: return -4; case 0xab17 ... 0xab1f: return -4; case 0xab27: return -4; case 0xab2f: return -4; case 0xab68 ... 0xab6f: return -4; case 0xabee ... 0xabef: return -4; case 0xabfa ... 0xabff: return -4; case 0xd7a4 ... 0xd7af: return -4; case 0xd7c7 ... 0xd7ca: return -4; case 0xd7fc ... 0xd7ff: return -4; case 0xfb07 ... 0xfb12: return -4; case 0xfb18 ... 0xfb1c: return -4; case 0xfb37: return -4; case 0xfb3d: return -4; case 0xfb3f: return -4; case 0xfb42: return -4; case 0xfb45: return -4; case 0xfbc2 ... 0xfbd2: return -4; case 0xfd40 ... 0xfd4f: return -4; case 0xfd90 ... 0xfd91: return -4; case 0xfdc8 ... 0xfdef: return -4; case 0xfdfe ... 0xfdff: return -4; case 0xfe1a ... 0xfe1f: return -4; case 0xfe53: return -4; case 0xfe67: return -4; case 0xfe6c ... 0xfe6f: return -4; case 0xfe75: return -4; case 0xfefd ... 0xfefe: return -4; case 0xff00: return -4; case 0xffbf ... 0xffc1: return -4; case 0xffc8 ... 0xffc9: return -4; case 0xffd0 ... 0xffd1: return -4; case 0xffd8 ... 0xffd9: return -4; case 0xffdd ... 0xffdf: return -4; case 0xffe7: return -4; case 0xffef ... 0xfff8: return -4; case 0xfffe ... 0xffff: return -4; case 0x1000c: return -4; case 0x10027: return -4; case 0x1003b: return -4; case 0x1003e: return -4; case 0x1004e ... 0x1004f: return -4; case 0x1005e ... 0x1007f: return -4; case 0x100fb ... 0x100ff: return -4; case 0x10103 ... 0x10106: return -4; case 0x10134 ... 0x10136: return -4; case 0x1018f: return -4; case 0x1019c ... 0x1019f: return -4; case 0x101a1 ... 0x101cf: return -4; case 0x101fe ... 0x1027f: return -4; case 0x1029d ... 0x1029f: return -4; case 0x102d1 ... 0x102df: return -4; case 0x102fc ... 0x102ff: return -4; case 0x10324 ... 0x1032c: return -4; case 0x1034b ... 0x1034f: return -4; case 0x1037b ... 0x1037f: return -4; case 0x1039e: return -4; case 0x103c4 ... 0x103c7: return -4; case 0x103d6 ... 0x103ff: return -4; case 0x1049e ... 0x1049f: return -4; case 0x104aa ... 0x104af: return -4; case 0x104d4 ... 0x104d7: return -4; case 0x104fc ... 0x104ff: return -4; case 0x10528 ... 0x1052f: return -4; case 0x10564 ... 0x1056e: return -4; case 0x10570 ... 0x105ff: return -4; case 0x10737 ... 0x1073f: return -4; case 0x10756 ... 0x1075f: return -4; case 0x10768 ... 0x107ff: return -4; case 0x10806 ... 0x10807: return -4; case 0x10809: return -4; case 0x10836: return -4; case 0x10839 ... 0x1083b: return -4; case 0x1083d ... 0x1083e: return -4; case 0x10856: return -4; case 0x1089f ... 0x108a6: return -4; case 0x108b0 ... 0x108df: return -4; case 0x108f3: return -4; case 0x108f6 ... 0x108fa: return -4; case 0x1091c ... 0x1091e: return -4; case 0x1093a ... 0x1093e: return -4; case 0x10940 ... 0x1097f: return -4; case 0x109b8 ... 0x109bb: return -4; case 0x109d0 ... 0x109d1: return -4; case 0x10a04: return -4; case 0x10a07 ... 0x10a0b: return -4; case 0x10a14: return -4; case 0x10a18: return -4; case 0x10a36 ... 0x10a37: return -4; case 0x10a3b ... 0x10a3e: return -4; case 0x10a49 ... 0x10a4f: return -4; case 0x10a59 ... 0x10a5f: return -4; case 0x10aa0 ... 0x10abf: return -4; case 0x10ae7 ... 0x10aea: return -4; case 0x10af7 ... 0x10aff: return -4; case 0x10b36 ... 0x10b38: return -4; case 0x10b56 ... 0x10b57: return -4; case 0x10b73 ... 0x10b77: return -4; case 0x10b92 ... 0x10b98: return -4; case 0x10b9d ... 0x10ba8: return -4; case 0x10bb0 ... 0x10bff: return -4; case 0x10c49 ... 0x10c7f: return -4; case 0x10cb3 ... 0x10cbf: return -4; case 0x10cf3 ... 0x10cf9: return -4; case 0x10d28 ... 0x10d2f: return -4; case 0x10d3a ... 0x10e5f: return -4; case 0x10e7f ... 0x10eff: return -4; case 0x10f28 ... 0x10f2f: return -4; case 0x10f5a ... 0x10fdf: return -4; case 0x10ff7 ... 0x10fff: return -4; case 0x1104e ... 0x11051: return -4; case 0x11070 ... 0x1107e: return -4; case 0x110c2 ... 0x110cc: return -4; case 0x110ce ... 0x110cf: return -4; case 0x110e9 ... 0x110ef: return -4; case 0x110fa ... 0x110ff: return -4; case 0x11135: return -4; case 0x11147 ... 0x1114f: return -4; case 0x11177 ... 0x1117f: return -4; case 0x111ce ... 0x111cf: return -4; case 0x111e0: return -4; case 0x111f5 ... 0x111ff: return -4; case 0x11212: return -4; case 0x1123f ... 0x1127f: return -4; case 0x11287: return -4; case 0x11289: return -4; case 0x1128e: return -4; case 0x1129e: return -4; case 0x112aa ... 0x112af: return -4; case 0x112eb ... 0x112ef: return -4; case 0x112fa ... 0x112ff: return -4; case 0x11304: return -4; case 0x1130d ... 0x1130e: return -4; case 0x11311 ... 0x11312: return -4; case 0x11329: return -4; case 0x11331: return -4; case 0x11334: return -4; case 0x1133a: return -4; case 0x11345 ... 0x11346: return -4; case 0x11349 ... 0x1134a: return -4; case 0x1134e ... 0x1134f: return -4; case 0x11351 ... 0x11356: return -4; case 0x11358 ... 0x1135c: return -4; case 0x11364 ... 0x11365: return -4; case 0x1136d ... 0x1136f: return -4; case 0x11375 ... 0x113ff: return -4; case 0x1145a: return -4; case 0x1145c: return -4; case 0x11460 ... 0x1147f: return -4; case 0x114c8 ... 0x114cf: return -4; case 0x114da ... 0x1157f: return -4; case 0x115b6 ... 0x115b7: return -4; case 0x115de ... 0x115ff: return -4; case 0x11645 ... 0x1164f: return -4; case 0x1165a ... 0x1165f: return -4; case 0x1166d ... 0x1167f: return -4; case 0x116b9 ... 0x116bf: return -4; case 0x116ca ... 0x116ff: return -4; case 0x1171b ... 0x1171c: return -4; case 0x1172c ... 0x1172f: return -4; case 0x11740 ... 0x117ff: return -4; case 0x1183c ... 0x1189f: return -4; case 0x118f3 ... 0x118fe: return -4; case 0x11900 ... 0x1199f: return -4; case 0x119a8 ... 0x119a9: return -4; case 0x119d8 ... 0x119d9: return -4; case 0x119e5 ... 0x119ff: return -4; case 0x11a48 ... 0x11a4f: return -4; case 0x11aa3 ... 0x11abf: return -4; case 0x11af9 ... 0x11bff: return -4; case 0x11c09: return -4; case 0x11c37: return -4; case 0x11c46 ... 0x11c4f: return -4; case 0x11c6d ... 0x11c6f: return -4; case 0x11c90 ... 0x11c91: return -4; case 0x11ca8: return -4; case 0x11cb7 ... 0x11cff: return -4; case 0x11d07: return -4; case 0x11d0a: return -4; case 0x11d37 ... 0x11d39: return -4; case 0x11d3b: return -4; case 0x11d3e: return -4; case 0x11d48 ... 0x11d4f: return -4; case 0x11d5a ... 0x11d5f: return -4; case 0x11d66: return -4; case 0x11d69: return -4; case 0x11d8f: return -4; case 0x11d92: return -4; case 0x11d99 ... 0x11d9f: return -4; case 0x11daa ... 0x11edf: return -4; case 0x11ef9 ... 0x11fbf: return -4; case 0x11ff2 ... 0x11ffe: return -4; case 0x1239a ... 0x123ff: return -4; case 0x1246f: return -4; case 0x12475 ... 0x1247f: return -4; case 0x12544 ... 0x12fff: return -4; case 0x1342f: return -4; case 0x13439 ... 0x143ff: return -4; case 0x14647 ... 0x167ff: return -4; case 0x16a39 ... 0x16a3f: return -4; case 0x16a5f: return -4; case 0x16a6a ... 0x16a6d: return -4; case 0x16a70 ... 0x16acf: return -4; case 0x16aee ... 0x16aef: return -4; case 0x16af6 ... 0x16aff: return -4; case 0x16b46 ... 0x16b4f: return -4; case 0x16b5a: return -4; case 0x16b62: return -4; case 0x16b78 ... 0x16b7c: return -4; case 0x16b90 ... 0x16e3f: return -4; case 0x16e9b ... 0x16eff: return -4; case 0x16f4b ... 0x16f4e: return -4; case 0x16f88 ... 0x16f8e: return -4; case 0x16fa0 ... 0x16fdf: return -4; case 0x16fe4 ... 0x16fff: return -4; case 0x187f8 ... 0x187ff: return -4; case 0x18af3 ... 0x1afff: return -4; case 0x1b11f ... 0x1b14f: return -4; case 0x1b153 ... 0x1b163: return -4; case 0x1b168 ... 0x1b16f: return -4; case 0x1b2fc ... 0x1bbff: return -4; case 0x1bc6b ... 0x1bc6f: return -4; case 0x1bc7d ... 0x1bc7f: return -4; case 0x1bc89 ... 0x1bc8f: return -4; case 0x1bc9a ... 0x1bc9b: return -4; case 0x1bca4 ... 0x1cfff: return -4; case 0x1d0f6 ... 0x1d0ff: return -4; case 0x1d127 ... 0x1d128: return -4; case 0x1d1e9 ... 0x1d1ff: return -4; case 0x1d246 ... 0x1d2df: return -4; case 0x1d2f4 ... 0x1d2ff: return -4; case 0x1d357 ... 0x1d35f: return -4; case 0x1d379 ... 0x1d3ff: return -4; case 0x1d455: return -4; case 0x1d49d: return -4; case 0x1d4a0 ... 0x1d4a1: return -4; case 0x1d4a3 ... 0x1d4a4: return -4; case 0x1d4a7 ... 0x1d4a8: return -4; case 0x1d4ad: return -4; case 0x1d4ba: return -4; case 0x1d4bc: return -4; case 0x1d4c4: return -4; case 0x1d506: return -4; case 0x1d50b ... 0x1d50c: return -4; case 0x1d515: return -4; case 0x1d51d: return -4; case 0x1d53a: return -4; case 0x1d53f: return -4; case 0x1d545: return -4; case 0x1d547 ... 0x1d549: return -4; case 0x1d551: return -4; case 0x1d6a6 ... 0x1d6a7: return -4; case 0x1d7cc ... 0x1d7cd: return -4; case 0x1da8c ... 0x1da9a: return -4; case 0x1daa0: return -4; case 0x1dab0 ... 0x1dfff: return -4; case 0x1e007: return -4; case 0x1e019 ... 0x1e01a: return -4; case 0x1e022: return -4; case 0x1e025: return -4; case 0x1e02b ... 0x1e0ff: return -4; case 0x1e12d ... 0x1e12f: return -4; case 0x1e13e ... 0x1e13f: return -4; case 0x1e14a ... 0x1e14d: return -4; case 0x1e150 ... 0x1e2bf: return -4; case 0x1e2fa ... 0x1e2fe: return -4; case 0x1e300 ... 0x1e7ff: return -4; case 0x1e8c5 ... 0x1e8c6: return -4; case 0x1e8d7 ... 0x1e8ff: return -4; case 0x1e94c ... 0x1e94f: return -4; case 0x1e95a ... 0x1e95d: return -4; case 0x1e960 ... 0x1ec70: return -4; case 0x1ecb5 ... 0x1ed00: return -4; case 0x1ed3e ... 0x1edff: return -4; case 0x1ee04: return -4; case 0x1ee20: return -4; case 0x1ee23: return -4; case 0x1ee25 ... 0x1ee26: return -4; case 0x1ee28: return -4; case 0x1ee33: return -4; case 0x1ee38: return -4; case 0x1ee3a: return -4; case 0x1ee3c ... 0x1ee41: return -4; case 0x1ee43 ... 0x1ee46: return -4; case 0x1ee48: return -4; case 0x1ee4a: return -4; case 0x1ee4c: return -4; case 0x1ee50: return -4; case 0x1ee53: return -4; case 0x1ee55 ... 0x1ee56: return -4; case 0x1ee58: return -4; case 0x1ee5a: return -4; case 0x1ee5c: return -4; case 0x1ee5e: return -4; case 0x1ee60: return -4; case 0x1ee63: return -4; case 0x1ee65 ... 0x1ee66: return -4; case 0x1ee6b: return -4; case 0x1ee73: return -4; case 0x1ee78: return -4; case 0x1ee7d: return -4; case 0x1ee7f: return -4; case 0x1ee8a: return -4; case 0x1ee9c ... 0x1eea0: return -4; case 0x1eea4: return -4; case 0x1eeaa: return -4; case 0x1eebc ... 0x1eeef: return -4; case 0x1eef2 ... 0x1efff: return -4; case 0x1f02c ... 0x1f02f: return -4; case 0x1f094 ... 0x1f09f: return -4; case 0x1f0af ... 0x1f0b0: return -4; case 0x1f0c0: return -4; case 0x1f0d0: return -4; case 0x1f0f6 ... 0x1f0ff: return -4; case 0x1f10d ... 0x1f10f: return -4; case 0x1f16d ... 0x1f16f: return -4; case 0x1f1ad ... 0x1f1e5: return -4; case 0x1f203 ... 0x1f20f: return -4; case 0x1f23c ... 0x1f23f: return -4; case 0x1f249 ... 0x1f24f: return -4; case 0x1f252 ... 0x1f25f: return -4; case 0x1f266 ... 0x1f2ff: return -4; case 0x1f6d6 ... 0x1f6df: return -4; case 0x1f6ed ... 0x1f6ef: return -4; case 0x1f6fb ... 0x1f6ff: return -4; case 0x1f774 ... 0x1f77f: return -4; case 0x1f7d9 ... 0x1f7df: return -4; case 0x1f7ec ... 0x1f7ff: return -4; case 0x1f80c ... 0x1f80f: return -4; case 0x1f848 ... 0x1f84f: return -4; case 0x1f85a ... 0x1f85f: return -4; case 0x1f888 ... 0x1f88f: return -4; case 0x1f8ae ... 0x1f8ff: return -4; case 0x1f90c: return -4; case 0x1f972: return -4; case 0x1f977 ... 0x1f979: return -4; case 0x1f9a3 ... 0x1f9a4: return -4; case 0x1f9ab ... 0x1f9ad: return -4; case 0x1f9cb ... 0x1f9cc: return -4; case 0x1fa54 ... 0x1fa5f: return -4; case 0x1fa6e ... 0x1fa6f: return -4; case 0x1fa74 ... 0x1fa77: return -4; case 0x1fa7b ... 0x1fa7f: return -4; case 0x1fa83 ... 0x1fa8f: return -4; case 0x1fa96 ... 0x1ffff: return -4; case 0x2fffe ... 0x2ffff: return -4; case 0x3fffe ... 0xe0000: return -4; case 0xe0002 ... 0xe001f: return -4; case 0xe0080 ... 0xe00ff: return -4; case 0xe01f0 ... 0xeffff: return -4; case 0xffffe ... 0xfffff: return -4; case 0x10fffe: return -4; // }}} default: return 1; } return 1; } static bool is_emoji_presentation_base(uint32_t code) { switch(code) { case 0x23: return true; case 0x2a: return true; case 0x30 ... 0x39: return true; case 0xa9: return true; case 0xae: return true; case 0x203c: return true; case 0x2049: return true; case 0x2122: return true; case 0x2139: return true; case 0x2194 ... 0x2199: return true; case 0x21a9 ... 0x21aa: return true; case 0x231a ... 0x231b: return true; case 0x2328: return true; case 0x23cf: return true; case 0x23e9 ... 0x23ea: return true; case 0x23ed ... 0x23ef: return true; case 0x23f1 ... 0x23f3: return true; case 0x23f8 ... 0x23fa: return true; case 0x24c2: return true; case 0x25aa ... 0x25ab: return true; case 0x25b6: return true; case 0x25c0: return true; case 0x25fb ... 0x25fe: return true; case 0x2600 ... 0x2604: return true; case 0x260e: return true; case 0x2611: return true; case 0x2614 ... 0x2615: return true; case 0x2618: return true; case 0x261d: return true; case 0x2620: return true; case 0x2622 ... 0x2623: return true; case 0x2626: return true; case 0x262a: return true; case 0x262e ... 0x262f: return true; case 0x2638 ... 0x263a: return true; case 0x2640: return true; case 0x2642: return true; case 0x2648 ... 0x2653: return true; case 0x265f ... 0x2660: return true; case 0x2663: return true; case 0x2665 ... 0x2666: return true; case 0x2668: return true; case 0x267b: return true; case 0x267e ... 0x267f: return true; case 0x2692 ... 0x2697: return true; case 0x2699: return true; case 0x269b ... 0x269c: return true; case 0x26a0 ... 0x26a1: return true; case 0x26aa ... 0x26ab: return true; case 0x26b0 ... 0x26b1: return true; case 0x26bd ... 0x26be: return true; case 0x26c4 ... 0x26c5: return true; case 0x26c8: return true; case 0x26cf: return true; case 0x26d1: return true; case 0x26d3 ... 0x26d4: return true; case 0x26e9 ... 0x26ea: return true; case 0x26f0 ... 0x26f5: return true; case 0x26f7 ... 0x26fa: return true; case 0x26fd: return true; case 0x2702: return true; case 0x2708 ... 0x2709: return true; case 0x270c ... 0x270d: return true; case 0x270f: return true; case 0x2712: return true; case 0x2714: return true; case 0x2716: return true; case 0x271d: return true; case 0x2721: return true; case 0x2733 ... 0x2734: return true; case 0x2744: return true; case 0x2747: return true; case 0x2753: return true; case 0x2757: return true; case 0x2763 ... 0x2764: return true; case 0x27a1: return true; case 0x2934 ... 0x2935: return true; case 0x2b05 ... 0x2b07: return true; case 0x2b1b ... 0x2b1c: return true; case 0x2b50: return true; case 0x2b55: return true; case 0x3030: return true; case 0x303d: return true; case 0x3297: return true; case 0x3299: return true; case 0x1f004: return true; case 0x1f170 ... 0x1f171: return true; case 0x1f17e ... 0x1f17f: return true; case 0x1f202: return true; case 0x1f21a: return true; case 0x1f22f: return true; case 0x1f237: return true; case 0x1f30d ... 0x1f30f: return true; case 0x1f315: return true; case 0x1f31c: return true; case 0x1f321: return true; case 0x1f324 ... 0x1f32c: return true; case 0x1f336: return true; case 0x1f378: return true; case 0x1f37d: return true; case 0x1f393: return true; case 0x1f396 ... 0x1f397: return true; case 0x1f399 ... 0x1f39b: return true; case 0x1f39e ... 0x1f39f: return true; case 0x1f3a7: return true; case 0x1f3ac ... 0x1f3ae: return true; case 0x1f3c2: return true; case 0x1f3c4: return true; case 0x1f3c6: return true; case 0x1f3ca ... 0x1f3ce: return true; case 0x1f3d4 ... 0x1f3e0: return true; case 0x1f3ed: return true; case 0x1f3f3: return true; case 0x1f3f5: return true; case 0x1f3f7: return true; case 0x1f408: return true; case 0x1f415: return true; case 0x1f41f: return true; case 0x1f426: return true; case 0x1f43f: return true; case 0x1f441 ... 0x1f442: return true; case 0x1f446 ... 0x1f449: return true; case 0x1f44d ... 0x1f44e: return true; case 0x1f453: return true; case 0x1f46a: return true; case 0x1f47d: return true; case 0x1f4a3: return true; case 0x1f4b0: return true; case 0x1f4b3: return true; case 0x1f4bb: return true; case 0x1f4bf: return true; case 0x1f4cb: return true; case 0x1f4da: return true; case 0x1f4df: return true; case 0x1f4e4 ... 0x1f4e6: return true; case 0x1f4ea ... 0x1f4ed: return true; case 0x1f4f7: return true; case 0x1f4f9 ... 0x1f4fb: return true; case 0x1f4fd: return true; case 0x1f508: return true; case 0x1f50d: return true; case 0x1f512 ... 0x1f513: return true; case 0x1f549 ... 0x1f54a: return true; case 0x1f550 ... 0x1f567: return true; case 0x1f56f ... 0x1f570: return true; case 0x1f573 ... 0x1f579: return true; case 0x1f587: return true; case 0x1f58a ... 0x1f58d: return true; case 0x1f590: return true; case 0x1f5a5: return true; case 0x1f5a8: return true; case 0x1f5b1 ... 0x1f5b2: return true; case 0x1f5bc: return true; case 0x1f5c2 ... 0x1f5c4: return true; case 0x1f5d1 ... 0x1f5d3: return true; case 0x1f5dc ... 0x1f5de: return true; case 0x1f5e1: return true; case 0x1f5e3: return true; case 0x1f5e8: return true; case 0x1f5ef: return true; case 0x1f5f3: return true; case 0x1f5fa: return true; case 0x1f610: return true; case 0x1f687: return true; case 0x1f68d: return true; case 0x1f691: return true; case 0x1f694: return true; case 0x1f698: return true; case 0x1f6ad: return true; case 0x1f6b2: return true; case 0x1f6b9 ... 0x1f6ba: return true; case 0x1f6bc: return true; case 0x1f6cb: return true; case 0x1f6cd ... 0x1f6cf: return true; case 0x1f6e0 ... 0x1f6e5: return true; case 0x1f6e9: return true; case 0x1f6f0: return true; case 0x1f6f3: return true; default: return false; } return 1; } END_ALLOW_CASE_RANGE kitty-0.15.0/kitty/window.py000066400000000000000000000546341356737523400160210ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import json import os import sys import weakref from collections import deque from enum import IntEnum from itertools import chain from .config import build_ansi_color_table from .constants import ( ScreenGeometry, WindowGeometry, appname, get_boss, wakeup ) from .fast_data_types import ( BLIT_PROGRAM, CELL_BG_PROGRAM, CELL_FG_PROGRAM, CELL_PROGRAM, CELL_SPECIAL_PROGRAM, CSI, DCS, DECORATION, DIM, GRAPHICS_ALPHA_MASK_PROGRAM, GRAPHICS_PREMULT_PROGRAM, GRAPHICS_PROGRAM, OSC, REVERSE, SCROLL_FULL, SCROLL_LINE, SCROLL_PAGE, STRIKETHROUGH, Screen, add_window, cell_size_for_window, compile_program, get_clipboard_string, init_cell_program, set_clipboard_string, set_titlebar_color, set_window_render_data, update_window_title, update_window_visibility, viewport_for_window ) from .keys import defines, extended_key_event, keyboard_mode_name from .rgb import to_color from .terminfo import get_capabilities from .utils import ( color_as_int, get_primary_selection, load_shaders, open_cmd, open_url, parse_color_set, sanitize_title, set_primary_selection ) class DynamicColor(IntEnum): default_fg, default_bg, cursor_color, highlight_fg, highlight_bg = range(1, 6) DYNAMIC_COLOR_CODES = { 10: DynamicColor.default_fg, 11: DynamicColor.default_bg, 12: DynamicColor.cursor_color, 17: DynamicColor.highlight_bg, 19: DynamicColor.highlight_fg, } DYNAMIC_COLOR_CODES.update({k+100: v for k, v in DYNAMIC_COLOR_CODES.items()}) def calculate_gl_geometry(window_geometry, viewport_width, viewport_height, cell_width, cell_height): dx, dy = 2 * cell_width / viewport_width, 2 * cell_height / viewport_height xmargin = window_geometry.left / viewport_width ymargin = window_geometry.top / viewport_height xstart = -1 + 2 * xmargin ystart = 1 - 2 * ymargin return ScreenGeometry(xstart, ystart, window_geometry.xnum, window_geometry.ynum, dx, dy) def load_shader_programs(semi_transparent=False): compile_program(BLIT_PROGRAM, *load_shaders('blit')) v, f = load_shaders('cell') for which, p in { 'SIMPLE': CELL_PROGRAM, 'BACKGROUND': CELL_BG_PROGRAM, 'SPECIAL': CELL_SPECIAL_PROGRAM, 'FOREGROUND': CELL_FG_PROGRAM, }.items(): vv, ff = v.replace('WHICH_PROGRAM', which), f.replace('WHICH_PROGRAM', which) for gln, pyn in { 'REVERSE_SHIFT': REVERSE, 'STRIKE_SHIFT': STRIKETHROUGH, 'DIM_SHIFT': DIM, 'DECORATION_SHIFT': DECORATION, }.items(): vv = vv.replace('{{{}}}'.format(gln), str(pyn), 1) if semi_transparent: vv = vv.replace('#define NOT_TRANSPARENT', '#define TRANSPARENT') ff = ff.replace('#define NOT_TRANSPARENT', '#define TRANSPARENT') if not load_shader_programs.use_selection_fg: vv = vv.replace('#define USE_SELECTION_FG', '#define DONT_USE_SELECTION_FG') ff = ff.replace('#define USE_SELECTION_FG', '#define DONT_USE_SELECTION_FG') compile_program(p, vv, ff) v, f = load_shaders('graphics') for which, p in { 'SIMPLE': GRAPHICS_PROGRAM, 'PREMULT': GRAPHICS_PREMULT_PROGRAM, 'ALPHA_MASK': GRAPHICS_ALPHA_MASK_PROGRAM, }.items(): ff = f.replace('ALPHA_TYPE', which) compile_program(p, v, ff) init_cell_program() load_shader_programs.use_selection_fg = True def setup_colors(screen, opts): screen.color_profile.update_ansi_color_table(build_ansi_color_table(opts)) cursor_text_color = opts.cursor_text_color or (12, 12, 12) cursor_text_color_as_bg = 3 if opts.cursor_text_color is None else 1 sfg = (0, 0, 0) if opts.selection_foreground is None else opts.selection_foreground screen.color_profile.set_configured_colors(*map(color_as_int, ( opts.foreground, opts.background, opts.cursor, cursor_text_color, (0, 0, cursor_text_color_as_bg), sfg, opts.selection_background) )) def text_sanitizer(as_ansi, add_wrap_markers): pat = getattr(text_sanitizer, 'pat', None) if pat is None: import re pat = text_sanitizer.pat = re.compile(r'\033\[.+?m') ansi, wrap_markers = not as_ansi, not add_wrap_markers def remove_wrap_markers(line): return line.replace('\r', '') def remove_sgr(line): return pat.sub('', line) def remove_both(line): return pat.sub('', line.replace('\r', '')) if ansi: return remove_both if wrap_markers else remove_sgr return remove_wrap_markers class Window: def __init__(self, tab, child, opts, args, override_title=None, copy_colors_from=None): self.action_on_close = self.action_on_removal = None self.layout_data = None self.pty_resized_once = False self.needs_attention = False self.override_title = override_title self.overlay_window_id = None self.overlay_for = None self.default_title = os.path.basename(child.argv[0] or appname) self.child_title = self.default_title self.title_stack = deque(maxlen=10) self.allow_remote_control = child.allow_remote_control self.id = add_window(tab.os_window_id, tab.id, self.title) if not self.id: raise Exception('No tab with id: {} in OS Window: {} was found, or the window counter wrapped'.format(tab.id, tab.os_window_id)) self.tab_id = tab.id self.os_window_id = tab.os_window_id self.tabref = weakref.ref(tab) self.clipboard_control_buffers = {'p': '', 'c': ''} self.destroyed = False self.click_queue = deque(maxlen=3) self.geometry = WindowGeometry(0, 0, 0, 0, 0, 0) self.needs_layout = True self.is_visible_in_layout = True self.child, self.opts = child, opts cell_width, cell_height = cell_size_for_window(self.os_window_id) self.screen = Screen(self, 24, 80, opts.scrollback_lines, cell_width, cell_height, self.id) if copy_colors_from is not None: self.screen.copy_colors_from(copy_colors_from.screen) else: setup_colors(self.screen, opts) def change_tab(self, tab): self.tab_id = tab.id self.os_window_id = tab.os_window_id self.tabref = weakref.ref(tab) @property def title(self): return self.override_title or self.child_title def __repr__(self): return 'Window(title={}, id={}, overlay_for={}, overlay_window_id={})'.format( self.title, self.id, self.overlay_for, self.overlay_window_id) def as_dict(self, is_focused=False): return dict( id=self.id, is_focused=is_focused, title=self.override_title or self.title, pid=self.child.pid, cwd=self.child.current_cwd or self.child.cwd, cmdline=self.child.cmdline, env=self.child.environ, foreground_processes=self.child.foreground_processes ) @property def current_colors(self): return self.screen.color_profile.as_dict() def matches(self, field, pat): if field == 'id': return pat.pattern == str(self.id) if field == 'pid': return pat.pattern == str(self.child.pid) if field == 'title': return pat.search(self.override_title or self.title) is not None if field in 'cwd': return pat.search(self.child.current_cwd or self.child.cwd) is not None if field == 'cmdline': for x in self.child.cmdline: if pat.search(x) is not None: return True return False if field == 'env': key_pat, val_pat = pat for key, val in self.child.environ.items(): if key_pat.search(key) is not None and ( val_pat is None or val_pat.search(val) is not None): return True return False def set_visible_in_layout(self, window_idx, val): val = bool(val) if val is not self.is_visible_in_layout: self.is_visible_in_layout = val update_window_visibility(self.os_window_id, self.tab_id, self.id, window_idx, val) if val: self.refresh() def refresh(self): self.screen.mark_as_dirty() wakeup() def update_position(self, window_geometry): central, tab_bar, vw, vh, cw, ch = viewport_for_window(self.os_window_id) self.screen_geometry = sg = calculate_gl_geometry(window_geometry, vw, vh, cw, ch) return sg def set_geometry(self, window_idx, new_geometry): if self.destroyed: return if self.needs_layout or new_geometry.xnum != self.screen.columns or new_geometry.ynum != self.screen.lines: boss = get_boss() self.screen.resize(new_geometry.ynum, new_geometry.xnum) current_pty_size = ( self.screen.lines, self.screen.columns, max(0, new_geometry.right - new_geometry.left), max(0, new_geometry.bottom - new_geometry.top)) sg = self.update_position(new_geometry) self.needs_layout = False boss.child_monitor.resize_pty(self.id, *current_pty_size) if not self.pty_resized_once: self.pty_resized_once = True self.child.mark_terminal_ready() else: sg = self.update_position(new_geometry) self.geometry = g = new_geometry set_window_render_data(self.os_window_id, self.tab_id, self.id, window_idx, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen, *g[:4]) def contains(self, x, y): g = self.geometry return g.left <= x <= g.right and g.top <= y <= g.bottom def close(self): get_boss().close_window(self) def send_text(self, *args): mode = keyboard_mode_name(self.screen) required_mode, text = args[-2:] required_mode = frozenset(required_mode.split(',')) if not required_mode & {mode, 'all'}: return True if not text: return True self.write_to_child(text) def write_to_child(self, data): if data: if get_boss().child_monitor.needs_write(self.id, data) is not True: print('Failed to write to child %d as it does not exist' % self.id, file=sys.stderr) def title_updated(self): update_window_title(self.os_window_id, self.tab_id, self.id, self.title) t = self.tabref() if t is not None: t.title_changed(self) def set_title(self, title): if title: title = sanitize_title(title) self.override_title = title or None self.title_updated() # screen callbacks {{{ def use_utf8(self, on): get_boss().child_monitor.set_iutf8_winid(self.id, on) def focus_changed(self, focused): if focused: self.needs_attention = False if self.screen.focus_tracking_enabled: self.screen.send_escape_code_to_child(CSI, 'I') else: if self.screen.focus_tracking_enabled: self.screen.send_escape_code_to_child(CSI, 'O') def title_changed(self, new_title): self.child_title = sanitize_title(new_title or self.default_title) if self.override_title is None: self.title_updated() def icon_changed(self, new_icon): pass # TODO: Implement this @property def is_active(self): return get_boss().active_window is self def on_bell(self): if self.opts.command_on_bell and self.opts.command_on_bell != ['none']: import subprocess import shlex env = self.child.final_env env['KITTY_CHILD_CMDLINE'] = ' '.join(map(shlex.quote, self.child.cmdline)) subprocess.Popen(self.opts.command_on_bell, env=env, cwd=self.child.foreground_cwd) if not self.is_active: self.needs_attention = True tab = self.tabref() if tab is not None: tab.on_bell(self) def change_titlebar_color(self): val = self.opts.macos_titlebar_color if val: if (val & 0xff) == 1: val = self.screen.color_profile.default_bg else: val = val >> 8 set_titlebar_color(self.os_window_id, val) def change_colors(self, changes): dirtied = default_bg_changed = False def item(raw): if raw is None: return 0 val = to_color(raw) return None if val is None else (color_as_int(val) << 8) | 2 for which, val in changes.items(): val = item(val) if val is None: continue dirtied = True setattr(self.screen.color_profile, which.name, val) if which.name == 'default_bg': default_bg_changed = True if dirtied: self.screen.mark_as_dirty() if default_bg_changed: get_boss().default_bg_changed_for(self.id) def report_color(self, code, r, g, b): r |= r << 8 g |= g << 8 b |= b << 8 self.screen.send_escape_code_to_child(OSC, '{};rgb:{:04x}/{:04x}/{:04x}'.format(code, r, g, b)) def set_dynamic_color(self, code, value): if isinstance(value, bytes): value = value.decode('utf-8') color_changes = {} for val in value.split(';'): w = DYNAMIC_COLOR_CODES.get(code) if w is not None: if val == '?': col = getattr(self.screen.color_profile, w.name) self.report_color(str(code), col >> 16, (col >> 8) & 0xff, col & 0xff) else: if code >= 110: val = None color_changes[w] = val code += 1 if color_changes: self.change_colors(color_changes) def set_color_table_color(self, code, value): cp = self.screen.color_profile if code == 4: changed = False for c, val in parse_color_set(value): if val is None: # color query self.report_color('4;{}'.format(c), *self.screen.color_profile.as_color((c << 8) | 1)) else: changed = True cp.set_color(c, val) if changed: self.refresh() elif code == 104: if not value.strip(): cp.reset_color_table() else: for c in value.split(';'): try: c = int(c) except Exception: continue if 0 <= c <= 255: cp.reset_color(c) self.refresh() def request_capabilities(self, q): self.screen.send_escape_code_to_child(DCS, get_capabilities(q)) def handle_remote_cmd(self, cmd): get_boss().handle_remote_cmd(cmd, self) def handle_remote_print(self, msg): from base64 import standard_b64decode msg = standard_b64decode(msg).decode('utf-8') print(msg, end='', file=sys.stderr) sys.stderr.flush() def send_cmd_response(self, response): self.screen.send_escape_code_to_child(DCS, '@kitty-cmd' + json.dumps(response)) def clipboard_control(self, data): where, text = data.partition(';')[::2] if not where: where = 's0' if text == '?': response = None if 's' in where or 'c' in where: response = get_clipboard_string() if 'read-clipboard' in self.opts.clipboard_control else '' loc = 'c' elif 'p' in where: response = get_primary_selection() if 'read-primary' in self.opts.clipboard_control else '' loc = 'p' response = response or '' from base64 import standard_b64encode self.screen.send_escape_code_to_child(OSC, '52;{};{}'.format( loc, standard_b64encode(response.encode('utf-8')).decode('ascii'))) else: from base64 import standard_b64decode try: text = standard_b64decode(text).decode('utf-8') except Exception: text = '' def write(key, func): if text: if ('no-append' in self.opts.clipboard_control or len(self.clipboard_control_buffers[key]) > 1024*1024): self.clipboard_control_buffers[key] = '' self.clipboard_control_buffers[key] += text else: self.clipboard_control_buffers[key] = '' func(self.clipboard_control_buffers[key]) if 's' in where or 'c' in where: if 'write-clipboard' in self.opts.clipboard_control: write('c', set_clipboard_string) if 'p' in where: if self.opts.copy_on_select == 'clipboard': if 'write-clipboard' in self.opts.clipboard_control: write('c', set_clipboard_string) if 'write-primary' in self.opts.clipboard_control: write('p', set_primary_selection) def manipulate_title_stack(self, pop, title, icon): if title: if pop: if self.title_stack: self.child_title = self.title_stack.pop() self.title_updated() else: if self.child_title: self.title_stack.append(self.child_title) # }}} def text_for_selection(self): lines = self.screen.text_for_selection() if self.opts.strip_trailing_spaces == 'always' or ( self.opts.strip_trailing_spaces == 'smart' and not self.screen.is_rectangle_select()): lines = ((l.rstrip() or '\n') for l in lines) return ''.join(lines) def destroy(self): self.destroyed = True if self.screen is not None: # Remove cycles so that screen is de-allocated immediately self.screen.reset_callbacks() self.screen = None def as_text(self, as_ansi=False, add_history=False, add_wrap_markers=False, alternate_screen=False): lines = [] add_history = add_history and not (self.screen.is_using_alternate_linebuf() ^ alternate_screen) if alternate_screen: f = self.screen.as_text_alternate else: f = self.screen.as_text_non_visual if add_history else self.screen.as_text f(lines.append, as_ansi, add_wrap_markers) if add_history: h = [] self.screen.historybuf.pagerhist_as_text(h.append) if h and (not as_ansi or not add_wrap_markers): sanitizer = text_sanitizer(as_ansi, add_wrap_markers) h = list(map(sanitizer, h)) self.screen.historybuf.as_text(h.append, as_ansi, add_wrap_markers) if h: if not self.screen.linebuf.is_continued(0): h[-1] += '\n' if as_ansi: h[-1] += '\x1b[m' lines = chain(h, lines) return ''.join(lines) @property def cwd_of_child(self): return self.child.foreground_cwd or self.child.current_cwd def pipe_data(self, text, has_wrap_markers=False): text = text or '' if has_wrap_markers: text = text.replace('\r\n', '\n').replace('\r', '\n') lines = text.count('\n') input_line_number = (lines - (self.screen.lines - 1) - self.screen.scrolled_by) return { 'input_line_number': input_line_number, 'scrolled_by': self.screen.scrolled_by, 'cursor_x': self.screen.cursor.x + 1, 'cursor_y': self.screen.cursor.y + 1, 'lines': self.screen.lines, 'columns': self.screen.columns, 'text': text } # actions {{{ def show_scrollback(self): text = self.as_text(as_ansi=True, add_history=True, add_wrap_markers=True) data = self.pipe_data(text, has_wrap_markers=True) cmd = [x.replace('INPUT_LINE_NUMBER', str(data['input_line_number'])) for x in self.opts.scrollback_pager] get_boss().display_scrollback(self, data['text'], cmd) def paste(self, text): if text and not self.destroyed: if isinstance(text, str): text = text.encode('utf-8') if self.screen.in_bracketed_paste_mode: while True: new_text = text.replace(b'\033[201~', b'').replace(b'\x9b201~', b'') if len(text) == len(new_text): break text = new_text else: # Workaround for broken editors like nano that cannot handle # newlines in pasted text see https://github.com/kovidgoyal/kitty/issues/994 text = b'\r'.join(text.splitlines()) self.screen.paste(text) def copy_to_clipboard(self): text = self.text_for_selection() if text: set_clipboard_string(text) def copy_or_interrupt(self): text = self.text_for_selection() if text: set_clipboard_string(text) else: mode = keyboard_mode_name(self.screen) text = extended_key_event(defines.GLFW_KEY_C, defines.GLFW_MOD_CONTROL, defines.GLFW_PRESS) if mode == 'kitty' else b'\x03' self.write_to_child(text) def pass_selection_to_program(self, *args): cwd = self.cwd_of_child text = self.text_for_selection() if text: if args: open_cmd(args, text, cwd=cwd) else: open_url(text, cwd=cwd) def scroll_line_up(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_LINE, True) def scroll_line_down(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_LINE, False) def scroll_page_up(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_PAGE, True) def scroll_page_down(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_PAGE, False) def scroll_home(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_FULL, True) def scroll_end(self): if self.screen.is_main_linebuf(): self.screen.scroll(SCROLL_FULL, False) # }}} kitty-0.15.0/kitty_tests/000077500000000000000000000000001356737523400153465ustar00rootroot00000000000000kitty-0.15.0/kitty_tests/FiraCode-Medium.otf000066400000000000000000004700701356737523400207620ustar00rootroot00000000000000OTTO €@CFF %”ñ6\è•[GDEFBE@òDnGPOSf¤Ø¿ò´dGSUBñX/êbOS/2—–øth`cmap[‹3* 0<–headNwÔ6hheaXD$hmtx€T½Ê 6maxpQPÌnameÂ)|Èfpostÿ¸3\È PQ49 P'•_<õèÔDEœÔDEœùþ ¨XZXXXXXXXXXXXÿôXÿôXQX4X4X4X4X4X4XGXXGXXqXqXqXqXqXqXqXqXqXqXX%X%X%X%X%XGXXGX\X X\X\X\X\X\X\X\X\X\X<X<XXXXXxX6XxXxXxXXXGXGXGXGXGXGX&X&X&X&X&X&X&X&X&X&X&XX`XYX(XUXUXUXUXXXXXXX!X!X!X!X!X=X=X=X=X=X=X=X=X=X=X=XXXXXXXX X X X X X;X;X;X;X4XGX&XX;X8X8X8X8X8X8X8X8X8X8XÿúXÿúXYXSXSXSXSXSXSX9X9XX3XBXBXBXBXBXBXBXBXBXBXWX5X5X5X5X5XYXXYXlXlXlXlXlXlXlXlX+XlXlXlXVXVXVX\X\XYX2X2X2X2X2X2X*XYXYXÿþXYXYXYXYX=X=X=X=X=X=X=X=X=X=X=XÿüXYXYX=X^X^X^X^X@X@X@X@X@X@XRXGXGXGXGXGXYXYXYXYXYXYXYXYXYXYXYX0X X X X X X+X1X1X1X1X1X[X[X[X[XSXYX=X@X[X[Xû«X_XYX¢X-XÿòXÿÿXÿœXXTXQXwXwXwXÿüXqXqXqXXXGXGXGXGXOXOXXXGX&XGX`X4X!XXX XX)XGX*X*XGXOXÿÿXXÿüX$XX1XX\X\X<XÿúX)XXÿúXX X!XXXX XJX X&XXXX7XDXXXOXOXXXGXXGXX4X!X X XX)X)XGXGXÿÿXÿÿX\XXGXXGX=X)XXXXqX#X#XXX;XGXGX&X&X&XXXXX)XwXX?X XX'X XXCXX*X%XX3XXÿüX*XX(XXKXÿõXXX`X8X?XcXXXXXBXBXBX X+XYXYXYXRX]X]XX"XYX=XYXYXSX9X1X1XX+XGXPX(X(XYXpXX0XÿÿX9X@XSXSXlXlXVXX/X(XXX2X?XX&XXXMX$X=X+X+XÿþXVX^XX+X]X]XXXIXQXX4XSX9X-X-X+X=XGXZXTX X X2X X]XXYXXXGX(X8X8XBX=X=X X+X4XYXYX=X=X=XSX1X1X1XGXX0XKX!X+X9XXXKXÿýX%XAXXLXX X!XX=X X\XÿñXX9XSX)XÿôXXÿ¬X7XHXXXÿôXÿúX<XXQXwXXqX;XGX&X\XXX XXGXDX&XGX`XBX!X XXX X&XXÿ¿Xÿ•XÿªXÿ½XÿcXÿ¾X\X XkXXGX&X>XoX=XXQXXÿqXX&XYX4XXX4XXXXÿ`XÿZXÿXÿXÿiXÿhXÿìXXXXXXXÿ`XÿZXÿXÿXÿiXÿhXÿÉXÿ¸XÿXÿXÿ'Xÿ)XÿµXÿ¿XÿŸXÿŽXþòXþðXþýXþÿXþßXþÝXÿ‹Xÿ•XGXÿŸXÿŽXþòXþðXþýXþÿXþßXþÝXÿ´Xÿ·Xÿ-Xÿ*XÿXÿXþôXþòXÿ²XÿªX\X\XÿÇXÿ¢XþóXþñXÿXÿXÿˆXÿ©Xÿ§XÿXþçXþÍXþ¯XÿzXÿcX X XÿÈXÿŸXþñXþïXÿXÿXÿXÿXÿˆXÿªX&XÿÈXÿŸXþñXþïXÿXÿXÿXÿX2XMX X:XLXiXBX=X5XJX(XPXXZX=XXTX]X=X XYXX(X$XX5X5X5XYXYXYX=XX2XLXBXeXXTXOXSXOX=XAXqXLXX7XEXGX#XX8XTXSXVXSXYX X'X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2X2XLXLXLXLXLXLXLXLXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X=X=X=X=X=X=X=X=XTXTXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXXXXXXXXXXXXXXXXXXXXXXXX¾X¾XAXQX4X'X>X?XDXVX9X:X.XZXAX2X9XDXDXRX9X:XAX.XX¿X—XXŽX–XXžX‹XXX¿X—XXŽX–XXžX‹XXX¿X—XXŽX–XXžX‹XXX¿X—XXŽX–XXžX‹XXþäX XÿõXÿïXÿÔXÿøXÿùXÿçXÿÍXÿàXÿØXXXÿïXÿïXÿúXÿùX(X,XËXªXÒXÇXXàXàX.XËXMXXX—XïXÇX,XPX2X2XáXXX(X.XÒXÐXàXqXX­XšXtX¥XÔXÜXqXX­XšXtX¥XÐXàXÔXÜXXXX"X^XXXX^XX^X"XGXGX°X°XeXeXdXÔXÓXÓXGXGX°X°|ýéXûÜXýÐXýôXþXûàXþBXþÞXüšXþ€XÿXþXû­XþNXûóXûÇXþXûÇXþXûÇXþXþXþXþ:XýÖXû~Xù&XþXþXþXûºXþMXþLXþëXüÙXüäXþ¡XþrXþ'Xþ¤XþYXþÓXþ$XþXû®Xþ8XþXûàXýÚXÌXÍXXXXXXXXX`X!X;XwX"X\X4X3XVX>XX`X!X;XwX"X4X3XVX>XXËXþäX®X®X]X>XñX¯X¯X5XgXsXgX]X]XQXQX_X_XgXQX#XgXÿøX9X>XXX[XXPXKX XX²X²XgXÿøX²X¯X®X5X²X¯X®X5XgXsXgX]X]XQXQX_X_XgXQX#XgXÿøX>XX[XXKX XXÿòXXXXÿòXXXXÿ¢XÿòXXÿØXXÿØXXXÿØXÿØXXXXXXXXXXXXXXXXXX,X XX,XXXXXX,XXX2XXXXXXXXXXX,XXXXXXXXXXXXXX,XX,XXX9XŽXXXŽXXXÿûXÿûXÿûXÿûXÿûXXÿûXÿûXXÿûXÿûXÿûXÿûXÿûX´XÿûXÿûXÿûXÿûXX´X´X´XÿûXÿûX´XÿûXÿûXÿûXÿûXÿûXÿûX´XXX´XÿûXÿûXXXXXŽXŽXXXXXXXXXXXXXXXXXXXXÿûXÿûXÿûX´X´XÿûXÿûXÿûXÿûXX´XÿûXÿûX´X´XÿûXÿûX´XÿûXÿûXÿûXX´XÿûXÿûX´X´X´XÿûXÿûX´XÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûX8X8X8XÿûXXXÿûXÿûXXX´XÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûXÿûX´X´XÿûXÿûXÿûXÿûX´XXÿûXÿûX´XÿûXÿûXX9XXXXXX‹X<XFXFX2XhXmXXX0X"X_XX&XXCXøXøXJXOXOXXX=Xÿ±X(XXÿ°XÿtXÿ°XÿµXÿâX/X5X_XCXMXMXþ XÿXúÛXüHXýXþ XþÃXþXþ>XþXûéXýÝXû²XþXû­XûÂXþXûÂXþÂXüXû­XþXûÍXþÚXûÌXýúXûÁXûÍXûÔXþ+XüXþ¥XüXúYXüiXþXü#XùXþXûÂXûÂXûÄXþ+XüXþÂXûXûXûÂXþ+Xþ*XûÂXûÂXüXþXüXû^XýùXüXýËXþXþ“XþMXþ8Xû‚XýÙXSXÊXÊþ&þ‹þVþXþ)þ'þ'þ6þZþ'þGþ)þpþ‘þ”þ\þýŒþ”XäXxXžXÊX°XŽXX³XX~XâX°XXžX½X²X~XóX°XXX³XXXãX²X‚XŸX³XXÍXÍþ&þfXáXÞXzXìXìXêX“X‘X“X‘XzX}X}X~XX®X°X~XÛXÞXXXŽ*ûóXþí=”dd§þ÷|ùûX¨JXôŠXKŠX^2<  @‡8CTDBÀ ÿÿ§þ÷§ `Ÿ² n# #,2L<\˜4§Û Û ê ê :ú4 FN  ” ´ 4 ö x ö hŒ ô ô   t2 4¦ Ú  ìCopyright © 2015 by Nikita ProkopovFira CodeMedium1.204;CTDB;FiraCode-MediumFira Code MediumVersion 1.204;PS 001.204;hotconv 1.0.88;makeotf.lib2.5.64775FiraCode-MediumFira Mono is a trademark of The Mozilla Corporation.Nikita Prokopovhttp://tonsky.meLicensed under the Open Font License, version 1.1 or laterhttp://scripts.sil.org/OFLCopyright © 2015 by Nikita ProkopovFira Code MediumRegular1.204;CTDB;FiraCode-MediumFiraCode-MediumVersion 1.204;PS 001.204;hotconv 1.0.88;makeotf.lib2.5.64775Fira Mono is a trademark of The Mozilla Corporation.Nikita Prokopovhttp://tonsky.meLicensed under the Open Font License, version 1.1 or laterhttp://scripts.sil.org/OFLFira CodeMedium$¶,$ ¶ø ÷JJJÕÛ×T‡˜ÜíîÎpÓÿØÞ€‚ƒ„…†‡ˆÒÝwtvÙ— "#(+68:@AGSUVZ`epqvw|ëÏì¦à…‘’˜œ¦§¬¯»¾ÁÇÈÏÛÝÞâéîùúÿéŸê| FKi†Šˆ‰Ž•£ ¡±¶³´ÎÐÔÒÓÙïóñò¢žR[šÑ™èœ›u O~zyx\…†ƒ‚×€K×ÚÖ}„W{ÔK QRÚýü  s÷z½V  £Ð ˆ-/02HJLfhj° ’<< /~~’ÿ7º¼ÇÉÝ '6BEwzŠŒ¡°á/5:y/…ó'/7?EMWY[]_g}‡—Ÿ§´ÄÏÓÛßïôþ      " & 0 : D J p  Ž ¬ ¯ º ½!!!"!.!T!_!‹!™!æ!ê"""""""")"+"H"a"e###!#(#+#Î%%l%€%”%Ÿ%£%¯%²%¶%º%¼%À%Ä%Ç%Ë%Ï%Ó%×%Û%å%ë%ï%ó%÷& &<&@&B&`&c&f&k'¡+àà¢à³þÿÿÿ 0 ’ü7¹¼ÆÉØ &5BEpz{„ŒŽ‘£±ð06;Š€ò (08@HPY[]_`h€ˆ˜ ¨¶ÆÐÖÝàòö      & 0 9 D J p t € ¬ ¯ ¹ ½!!!"!.!S!U!Š!!æ!ç"""""""")"+"H"`"d### #&#+#Î%% %q%%•% %ª%²%¶%º%¼%À%Ä%Æ%É%Î%Ð%Õ%Ù%Ü%ç%ï%ð%ô& &9&@&B&`&c&e&j'¡+àà à°þÿÿÿCÅþ…PEõòáÔêèþÄþ£äã`ä ãeäã]ä ã`ä ã\äãTãSãRãQäã”âíã£âøãÔãwäAäAãÊãöã®äXãÐãyã•ãCãªã¦ãœäŽää{ävâmâÑâ„â{âsâSâ`âVâUâ3â¦á{â€áàß9ß„ßß~ß}ßyßvßtß/ßßßCÞïß?ÞòßjßRßOßNß1ß/ß.ß+Ý:Xô®´¸¸¸ÂÊÎÆÒÚäæ`ž¨°Øâêf°ºœ¼Ôð ,0<>B:Ph^rt„„„~€~€€†Fd†‚††ˆ€„ŠŽ”JÕÛ×T‡˜ÜíîÎpÓÿØÞ€‚ƒ„…†‡ˆÒÝwtvÙ— "#(+68:@AGSUVZ`epqvw|ëÏì¦à…‘’˜œ¦§¬¯»¾ÁÇÈÏÛÝÞâéîùúÿéŸê|KÖR[S\ š›}œžzµ¶…™Ð´Â¿ÃÚ  2-/0FLHJQKrOjfhixT芆ˆŽ‰•£ ¡¶±³´™ÎÔÐÒÙÓs×óïñòÜ‹‡Œ“–—”š› ¤ž¢!¥Ÿ%©$¨'«&ª*®)­5º3¸.²4¹1°,·7½9¿À;Â=Ä<Ã>Å?ÆBÉDÌCËÊEÍNÖIÑMÕRÚWßYáXà[ã^æ]å\äcìbëaêoølõgðn÷kômösüyz}~ PØ_çdí ûüþúùýÿUìVí÷øWîïðñG3.0LFMNOQRãEFGHIJKSTéêëáæÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàâåçäè]øù^_`úû÷XòYóZô[õ\öüýþÿaöbcdefg H@?BCD=>E(%29!"#$')*+,-./01346578;<:AFG ¡¢£¦§ª«¬­°²³´µ¶·¸¹º¼½¿¾ÀÁÄÅÃÊÏШ©Ñ¤ÉÈËÌÍÆÇα®»ÂIÒJÓKÔLÕMÖN×OØPÙQÚRÛSÜTÝUÞ&¯ž'Ÿ(¥VßWàXáYâZã[ä\å]æ^ç-._éaêbëcìdíeîfï/0gðhñiòkôlõmn÷oøpùqúrûsütýöuþvÿ12wxyz{|}~€  ‚ ƒ „ …†‡ˆ‰Š‹ŒŽ‘’“”•–— ˜!™"š#›$œ%&`èjó,*)+uþrûtý{µ¶·¸¹º»¼  #$-.DERS^_noÀÁÂÃÄÅÆÇrspqt2}1?<102/;ƒ„Ž468FK¢£ ¡579abcdTU`e³´±²¬:;=rqsp|ª«½¾¿>3þýüû   ¢£Ñ·¸¹º»¼Šojïð•–—˜™š›œž‰niçèZXÄÅÆÇÈÉÊËÌ;°¯°ª¬®²³±«­¯´µ¶©ƒqg„ukyxml¬ª­OXüF@NþD>Mý‚|Wÿ€zUˆ{A…G[‡y?„EZ]pC=s`L^q~xtaT_r†wBƒcv\oH}ubYgIhJ  !    #"fedjmliPSRKknQVļ½¾¿ÀÁÂÃÌËÊÉÈÇÆÍÙÚÛÅ()ùúøûê÷ÝëÜåãäñòóôïð:;<9º¸¹FGHIJKLMNOPQ ,༠P J!!Õ""Û##×$$T%%‡&&˜''Ü()í**Î++p,,Ó--ÿ..Ø//Þ09::Ò;;Ý<<w==t>>v??Ù@@—AABC DDEEFG"HH(II+JJ6KK8LL:MN@OOGPPSQRUSSZTT`UUeVWpXYvZZ|[[ë\\Ï]]ì^^¦__à``aa…bc‘dd˜eeœfg¦hh¬ii¯jj»kk¾llÁmnÇooÏppÛqrÝssâttéuuîvwùxyÿzz{{é||Ÿ}}ê~~|  K¡¡Ö¢¢R££[¤¤S¥¥\¦¦ §§š¨¨©©›ªª««¬¬}­­®®œ¯¯°°ž±±z²³µ´´µµ…¶¶™··и¸¹¹´ºº»»¼¼½½¿¾¾ÿ¿ÚÀÀÁÁÂÂÃà ÄÄÅÅ ÆÆ ÇÇÈÈÉÉÊËÌÌ2ÍÍ-ÎÏ/ÐÐÑÑFÒÒLÓÓHÔÔJÕÕQÖÖK××rØØOÙÙjÚÚfÛÜhÝÝxÞÞTßßèààŠáá†ââˆããŽää‰ååææçç•èè£ééêë ìì¶íí±îï³ðð™ññÎòòÔóóÐôôÒõõÙööÓ÷÷søø×ùùóúúïûüñýýþþÜÿÿ‹‡Œ“  –    —    ”š› ¤ž¢!¥Ÿ%©$¨  '!!«""&##ª$$*%%®&&)''­((5))º**3++¸,,.--²..4//¹00111°22,33·44755½66978¿99;::Â;;=<<Ä==<>>Ã??>@@ÅAA?BBÆCCBDDÉEEDFFÌGGCHHËIIÊJJEKKÍLLNMMÖNNIOOÑPPMQQÕRRRSSÚTTWUUßVVYWWáXXXYYàZZ[[[ã\\^]]æ^^]__å``\aaäbbcccìddbeeëffaggêhhoiiøjjlkkõllgmmðnnnoo÷ppkqqôrrmssöttsuuüvvywwxxzyy}zz{{||}}~~~’’Wüü ýýþþPÿÿØ_çdí77¼¹¹ºº ¼¼ ÆÆÇÇÉÉØØÙÙÚÚÛÛÜÜÝÝûþúù    ý  ÿ&'56 BB,EE-ppUqqìrrVssítu÷vvWwwîzz~{}ï~~G3„„.……0††L‡‡FˆŠMŒŒPŽQã‘¡4£©Eª«S¬®é¯¯á°°æ±ÉÈÊÊâËËåÌÌçÍÍäÎÎèÏÏ]ÐÑøÒÔ^ÕÖú××÷ØØXÙÙòÚÚYÛÛóÜÜZÝÝôÞÞ[ßßõàà\ááöðóüôôaõõööö÷÷bøøùúcûüýÿeH@?B  =  E  (  %29!'#)$%3&&6''5()7*+;,,:--A./F03 45¦69ª::°;C²DE¼FF¿GG¾HIÀJKÄLLÃMMÊNOÏPQ¨RRÑSS¤TTÉUUÈVXËYZÆ[[Î\\±]]®^^»__Â``IaaÒbbJccÓddKeeÔffLggÕhhMiiÖjjNkk×llOmmØnnPooÙppQqqÚrrRssÛttSuuÜvvTwwÝxxUyyÞŠŠ&‹‹¯ŒŒž'ŽŽŸ(‘‘¥’’V““ß””W••à––X——ᘘY™™âššZ››ãœœ[äžž\ŸŸå  ]¡¡æ¢¢^££ç¤¥-¦¦_§§é¨¨a©©êªªb««ë¬¬c­­ì®®d¯¯í°°e±±î²²f³³ï´µ/¶¶g··ð¸¸h¹¹ñººi»»ò¼¼k½½ô¾¾l¿¿õÀÁmÂÂ÷ÃÃoÄÄøÅÅpÆÆùÇÇqÈÈúÉÉrÊÊûËËsÌÌüÍÍtÎÎýÏÏöÐÐuÑÑþÒÒvÓÓÿÔÕ1ÖÖw×רØxÙÙÚÚyÛÛÜÜzÝÝÞÞ{ßßàà|ááââ}ããää~ååææççèè€éé êêëë ìì‚íí îîƒïï ðð„ññ òò…óóôô†õõöö‡÷÷øøˆùùúú‰ûûüüŠýýþþ‹ÿÿŒŽ    ‘    ’  “”•–— ˜!™"š#›$  œ!!%""##&$$`%%è&&j''ó(()),**++*,,--)..//+€€uþ‚‚rƒƒû„„t……ýòò{óóh} '%(/…07<8?˜@ELHM¤PWVYY­[[®]]¯__°`gfhoµpq rs#tu-vwDxyRz{^|}n€‡ˆu—3˜Ÿ §t¨¯À°±²²³³´´¶¶··¸¹rº»p¼¼t½½2¾¾}¿¿1ÀÀ?ÁÁ<ÂÂ1ÃÃ0ÄÄ2ÆÆ/ÇÇ;ÈɃÊÌÍÍ4ÎÎ6ÏÏ8ÐÓGÖÖF××KØÙ¢ÚÛ ÝÝ5ÞÞ7ßß9àãaäåTææ`ççeèé³êë±ìì¬íî:ïï=òòróóqôôsööp÷÷|øùªúü½ýý>þþ3  H L  þ  ý  ü  û  á       !¢ " "Ñ & &Ô 0 0ˆ 9 : D D½ J Jß p p³ t y· z zŠ { {o | |j } ~ï   € ‰• РЉ ‹ ‹n Œ Œi Žç ¬ ¬V ¯ ¯U ¹ ¹Z º ºX ½ ½Y!!¡!!¥!"!"!.!.¤!S!TÀ!U!^Ä!_!_¾!Š!а!‹!‹¯!!°!‘!‘ª!’!’¬!“!“®!”!•²!–!–±!—!—«!˜!˜­!™!™¯!æ!æ·!ç!é´!ê!ê©""†""""‚""ƒ""q""h""g""„""~")")"+"+€"H"H{"`"`u"a"ak"d"dy"e"ex##¨##‹# # m#!#!l#&#&¬#'#'ª#(#(­#+#+«#Î#ή%%%%O%%%%X% % ü% % F%%@%%N%%þ%%D%%>%%M%%ý%%‚%%|%%W%%ÿ%%€%%z%%U%%%%ˆ%%{%%A% % …%!%!G%"%"%#%#[%$%$%%%%‡%&%&y%'%'?%(%(„%)%)E%*%*%+%+Z%,%,%-%-]%.%.p%/%/C%0%0=%1%1s%2%2`%3%3L%4%4%5%5^%6%6q%7%7~%8%8x%9%9t%:%:a%;%;T%<%<%=%=_%>%>r%?%?†%@%@w%A%AB%B%Bƒ%C%Cc%D%Dv%E%E\%F%Fo%G%GH%H%H}%I%Iu%J%Jb%K%KY%L%Lg%M%MI%N%Nh%O%OJ%P%P%Q%Q %R%S %T%T%U%U %V%V %W%W %X%X%Y%Y%Z%Z%[%[%\%\%]%]%^%_%`%`%a%b%c%c %d%e%f%f%g%h%i%i%j%j#%k%k"%l%l%q%qf%r%re%s%sd%t%tj%u%um%v%vl%w%wi%x%xP%y%yS%z%zR%{%{K%|%|k%}%}n%~%~Q%%V%€%€Ä%%ˆ¼%‰%‰Ì%Š%ŠË%‹%‹Ê%Œ%ŒÉ%%È%Ž%ŽÇ%%Æ%%Í%‘%“Ù%”%”Å%•%ŸÎ% %£$%ª%«(%¬%­ù%®%®ø%¯%¯û%²%²3%¶%¶4%º%º7%¼%¼5%À%À6%Ä%Ä8%Æ%Çõ%É%Éê%Ê%Ê÷%Ë%ËÝ%Î%Îë%Ï%ÏÜ%Ð%Óß%Õ%Õå%Ö%×ã%Ù%Ûì%Ü%ßñ%à%áï%â%ä:%å%å9%ç%ë*%ï%ïÞ%ð%ó/%ô%÷æ& & Š&9&<‹&@&@&B&B&`&`‘&c&c’&e&f“&j&k•'¡'¡»++º++¸ààFà à¢Jà°à³MþÿþÿQóó§ÿµ2FiraCode-Medium-ôõöøŒ ùüˆ¨ú®b¦oGÅl¢p!(28CIOV`kq}ƒ˜š¡«¯¶½ÃÉÔÚàäðö$/6<BNT_gmqw~Š‘˜Ÿ¤ª°»ÈÎÔßåëõ(6DJQX^eku{‡—¢©°»ÆÒÖÜâìóù(39=IOU`frx…Œ—™œ¢¨°¼ÂÈÓÚàäñý !(17BHVdr|Š˜¢¨¯µ¼ÃÊÑØßæí÷þ !(/6=DKRY`gnu|ƒŠ‘˜Ÿ¦­´»ÂÉÐ×Þåìóú$+29@GNU\cjqx†”›¢©°·¾ÅÌÓÚáèïöý  '.5<CJQX_fmt{‚‰—ž¥¬³ºÁÈÏÖÝäëòù#*18?FMT[bipw~…Œ“𡍝¶½ÄËÒÙàçîõü     & - 4 ; B I P W ^ e l s z ˆ – ¤ « ² ¹ À Ç Î Õ Ü ã ê ñ ø ÿ    " ) 0 7 > E L S Z a h o v } „ ‹ ’ ™   § ® µ ¼ Ã Ê Ñ Ø ß æ í ô û     % , 3 : A H O V ] d k r y € ‡ Ž • œ £ ª ± ¸ ¿ Æ Í Ô Û â é ð ÷ þ    ! ( / 6 = D K R Y ` g n u | ƒ Š ‘ – › ¢ ¦ ª ± ¸ » Â Æ Ë Í Ï Ñ Ó Ú ß æ í ó ø û þ    ! $ , 8 ? F P \ h w ~ … Œ • œ £ ª ± ¸ ¿ Æ Í Ô Û â é ð ÷ þ !(/6=DKRY`gnu|ƒŠ‘˜Ÿ¦­´»ÂÉÐ×Þåìóú$+29@GNU\cjqx†”›¢©°·¾ÅÌÓÚáèïöý  '.5<CJQX_fmt{€‡‹•œ £§¬²·¹ÀÇÎÕ×Úáèêñô÷üÿ$-9ELV^h|ƒŠ™ ¬³ºÁÈÏÖÝäëòù#*18?FMT[bipw~…Œ“𡍝¶½ÄËÒÙàçîõü &-4;BIPW^elszˆ–¤«²¹ÀÇÎÕÜãêñøÿ ")07>ELSZahov}„‹’™ §®µ¼ÃÊÑØßæíôû %,3:AHOV]dkry€‡˜Ÿ§°·ÁÊÒÜãêóú'.5=DMV`isz‚Š“œ¤¬µ¿ÈÐ×áèñû  '.5<FMT[bipw~…Œ—¤³ºÂÓÚáñÿ+:HWel}„“𥰻ÇÐßñ)>Vlˆ˜ºÍÝï2HYtŽ °Ïåþ.D^p‰£´Æê2EY~”¬ÀÓãù .HOenu|ƒŠ”žª¬Üãêñøü$0<CKW^gsz‡’œ¦­´»ÄÏÛâêòù '4;ENXeox‚‰‘š¡«µÁÌÙêø   % 1 > K T c s z — ž ® · ¾ Ç Î Û ç î ÷ þ!! !!!!!(!/!6!=!D!M!T![!`!n!u!|!ƒ!Š!‘!˜!Ÿ!¦!­!´!»!Â!É!Ð!×!Þ!å!ì!ó!ú""""""#"*"1"8"?"F"M"T"["b"i"r"y"€"‡"Ž"•"œ"£"ª"±"¸"¿"Æ"Í"×"Þ"å"ì"ó"ú######$#+#2#9#@#G#N#U#\#c#j#q#x##†##”#›#¢#©#°#·#¾#Å#Ì#Ó#Ú#á#è#ï#ö#ý$$ $$$"$)$0$7$>$E$L$S$Z$a$h$o$v$}$„$‹$’$™$ $§$®$µ$¼$Ã$Ê$Ñ$Ø$ß$æ$í$ô$û%% %%%%%%,%3%:%A%H%O%V%]%d%k%r%y%€%‡%Ž%•%œ%£%ª%±%¸%¿%Æ%Í%Ô%Û%â%é%ð%÷%þ&& &&&!&(&/&6&=&D&K&R&Y&`&g&n&u&|&ƒ&Š&‘&˜&Ÿ&¦&­&´&»&Â&É&Ð&Ü&è&ï&ö&ü'' ''''%'3':'='A'F'M'V']'d'i'p'w'~'…'Œ'—'¢'©'·'Ã'Û'í'ô(((((@(L(`(q(„(”(ª(À(Ø(ê(ø)))5)I)_)y)Œ) )²)Í)ß)å)ÿ**%*2*G*a*q*‰* *º*Ò*î*þ++2+A+V+d+r+‡+›+¯+Â+Ó+è+ü,,),>,M,d,ƒ,•,±,¸,Ï,é,ð---$-+-2-9-@-T-[-b-i-r-y-€-‡-Ž-•-œ-£-ª-¶-½-Ä-Ë-Ò-Ù-ã-ì-ö....'.4.E.Q.c.l.w.|.‰.“..¤.«.².¿.Æ.Í.Ô.Û.â.é.ð.÷.þ//// /'/+/2/>/E/L/S/Z/a/h/o/v/}/„/‹/’/™/ /§/Î/ÞAbreveAmacronAogonekCacuteCcaronAEacuteCdotaccentDcroatCcircumflexDcaronEbreveEmacronEdotaccentGcircumflexGbreveGcommaaccentEcaronGdotaccentHcircumflexIJEogonekIdotaccentHbarImacronIogonekIbreveItildeJcircumflexLacuteLcaronLdotKcommaaccentNacuteNcommaaccentEngLcommaaccentNcaronOhungarumlautOslashacuteOmacronRacuteRcaronRcommaaccentSacuteScircumflexScedillaObreveTbarTcaronuni021AScommaaccentuni0162UmacronUogonekUringUbreveWacuteWcircumflexUhungarumlautWgraveUtildeYcircumflexYgraveZacuteZdotaccentOacute.loclPLKCacute.loclPLKSacute.loclPLKWdieresisNacute.loclPLKZacute.loclPLKabreveamacronaogonekcacuteaeacuteccaroncdotaccentdcaronebreveecarondcroatedotaccentccircumflexemacroneogonekgcircumflexhcircumflexgcommaaccenthbaribrevegbrevegdotaccentimacronitildeuni0237iogoneki.loclTRKkgreenlandickcommaaccentjcircumflexlcaronldotlcommaaccentlacutenacutenapostrophencaronncommaaccentobreveohungarumlautomacronoslashacuteijengracutesacutescedillascommaaccentrcarontcaronscircumflexuni0163ubrevetbaruhungarumlautrcommaaccentuni021Buringumacronutildewcircumflexuogonekwdieresiswacuteycircumflexygravecacute.loclPLKnacute.loclPLKoacute.loclPLKx.multiplysacute.loclPLKzacute.loclPLKzdotaccentwgraveuni207Fzacuteuni052Cuni0410uni052Euni0411uni0413uni052Auni0412uni0403w_w_w.ligauni0490uni0528uni0414uni0415uni0416uni0401uni0419uni0400uni048Auni041Auni041Buni0417uni0418uni041Cuni041Funi041Euni0420uni0421uni040Duni0423uni041Duni0425uni0427uni0424uni0426uni0422uni040Funi0429uni042Cuni042Auni042Buni040Euni0428uni0409uni0404uni0406uni042Duni040Cuni0408uni0405uni042Funi042Euni040Buni0460uni0462uni0402uni0464uni0468uni040Auni046Cuni0470uni0407uni0466uni0474uni0476uni046Auni0494uni0492uni049Auni0472uni049Cuni0498uni0496uni049Euni046Euni04A2uni04A6uni0524uni04ACuni04AEuni04AAuni04B0uni0478uni04B6uni04BAuni04B8uni0526uni04BCuni04B2uni04A8uni04C5uni04C3uni04A0uni04C9uni04C1uni04C0uni04CBuni04CDuni04BEuni04D2uni04D6uni04D8uni04D0uni04C7uni04DAuni04E0uni04E2uni04E4uni04E8uni04EAuni04F0uni04E6uni04DCuni04ECuni04DEuni04EEuni04F4uni04FAuni04FEuni0500uni04F2uni0502uni0506uni04F8uni0508uni04FCuni050Auni050Euni04F6uni0512uni0510uni0514uni0516uni051Cuni051Euni0520uni050Cuni0522uni048Cuni0518uni051Auni0433uni0453uni0432uni0504uni0491uni0430uni0435uni0431uni048Euni0438uni0437uni0450uni0439uni045Duni0451uni043Buni0434uni045Cuni043Funi043Cuni0436uni048Buni043Auni0442uni0441uni043Duni0443uni0445uni0447uni0440uni0448uni0444uni045Funi0449uni045Euni0446uni044Auni044Cuni0459uni0455uni044Duni043Euni0458uni045Auni0457uni045Buni0454uni044Euni0456uni0461uni0463uni044Buni0465uni044Funi0469uni0467uni0471uni046Funi0473uni0475uni0493uni0452uni0477uni046Buni0497uni0495uni049Buni049Duni04A1uni049Funi04A3uni0525uni04ADuni04A7uni0499uni04AFuni04ABuni04A9uni04B1uni046Duni04B3uni04B7uni04BBuni0527uni04CFuni04BDuni0479uni04C6uni04C4uni04C8uni04CAuni04CEuni04B9uni04D1uni04D7uni04BFuni04D9uni04C2uni04DBuni04E1uni04E3uni04CCuni04DFuni04E5uni04E7uni04D3uni04EBuni04EFuni04F7uni04F1uni04DDuni04F5uni04FBuni04F9uni04E9uni04FDuni04EDuni0503uni0507uni0505uni0509uni04F3uni050Funi0511uni0513uni0515uni0517uni0501uni0519uni051Duni04FFuni050Buni050Duni0521uni0523uni048Funi051Buni051Funi0529uni052Buni052Duni052Funi04A4uni04B4uni04B5uni04A5uni048DAlphaGammaEpsilonZetaBetauni04D4uni0394Etauni037FIotaKappaMuNuXiPiOmicronSigmauni04D5UpsilonLambdaThetaChiRhoPsiAlphatonosEpsilontonosuni03A9PhiTauEtatonosUpsilontonosuni0370uni0372OmegatonosIotadieresisOmicrontonosUpsilondieresisuni03DCuni0376uni03DEIotatonosuni03E0uni03CFuni03DAuni03D2uni03F4uni03F9uni03FAuni03FDuni03D3uni03D8uni03F7uni03D4uni03FFuni03FEuni1F09uni1F08uni1F0Duni1F0Buni1F0Auni1FBBuni1FB9uni1F0Euni1F0Cuni1F0Funi1FB8uni1FBAuni1FBCuni1F89uni1F8Buni1F8Auni1F8Cuni1F88uni1F8Funi1F8Euni1F8Duni1F18uni1F19uni1F1Auni1F1Buni1FC8uni1F28uni1F1Duni1FC9uni1F2Cuni1F2Duni1F1Cuni1F29uni1F2Buni1F2Funi1F2Euni1F2Auni1FCAuni1F98uni1F99uni1F9Auni1F9Buni1FCBuni1FCCuni1F38uni1F9Euni1F9Funi1F3Auni1F3Buni1F9Cuni1F3Cuni1F3Duni1FDBuni1F9Duni1FD8uni1FDAuni1F39uni1F48uni1F49uni1F4Auni1F4Buni1FD9uni1F4Duni1FF8uni1F3Euni1F59uni1F5Duni1F4Cuni1F3Funi1F5Funi1FF9uni1FEAuni1FEBuni1FE9uni1FECuni1F5Buni1FE8uni1F6Buni1F6Cuni1F6Duni1F6Euni1FFAuni1F69uni1F68uni1FFBuni1F6Funi1FFCuni1FA8uni1F6Auni1FA9uni1FAAuni1FAEalphauni1FAFbetagammadeltaepsilonzetaetaiotathetalambdakappanuuni1FADuni03BCuni1FABuni1FACxirhouni03C2omicronpiupsilontauphisigmachipsiiotadieresisiotadieresistonosomegaiotatonosomicrontonosupsilontonosuni0371omegatonosetatonosalphatonosupsilondieresistonosuni0377uni037Bupsilondieresisuni0373epsilontonosuni03D9uni03DBuni03E1uni03DFuni037Cuni03DDuni037Duni03D7uni03D1uni03F0uni03F2uni03D6uni03F1uni03F3uni03F5uni03FBuni1F00uni1F01uni03F8uni03FCuni03D0uni1F02uni1F04uni03D5uni1F06uni1F70uni1F03uni1F71uni1FB0uni1FB1uni1F05uni1FB6uni1FB3uni1F07uni1FB2uni1F81uni1FB4uni1F85uni1F86uni1FB7uni1F84uni1F10uni1F83uni1F82uni1F11uni1F12uni1F13uni1F72uni1F73uni1F20uni1F21uni1F80uni1F24uni1F87uni1F25uni1F26uni1F74uni1F27uni1F75uni1FC6uni1F15uni1FC2uni1F23uni1FC4uni1F22uni1FC3uni1F14uni1F91uni1F90uni1F94uni1FC7uni1F30uni1F92uni1F31uni1F95uni1F97uni1F32uni1F96uni1F93uni1F76uni1F36uni1F33uni1F35uni1F34uni1FD0uni1F77uni1FD2uni1FD3uni1F40uni1FD7uni1F37uni1F42uni1F43uni1FD1uni1F44uni1F78uni1F79uni1F45uni1FE4uni1FE5uni1F50uni1FD6uni1F54uni1F55uni1F56uni1F53uni1F41uni1F7Auni1F7Buni1FE6uni1FE0uni1F51uni1F52uni1F57uni1FE1uni1F60uni1F61uni1FE2uni1FE7uni1FE3uni1F65uni1F62uni1F63uni1F64uni1F7Duni1FF6uni1FF3uni1F66uni1FF2uni1F7Cuni1F67uni1FA0uni1FA3uni1FF4uni1FA5uni1FBEuni1FA6uni1FA1uni037Auni1FF7uni1FA4zero.tosfone.tosfuni1FA2two.tosffour.tosfuni1FA7seven.tosffive.tosfsix.tosfthree.tosfuni2081uni2080zero.zerouni2082uni2083uni2084eight.tosfuni2087zero.tosf.zerouni2085uni2086one.dnomuni2089four.dnomzero.dnomthree.dnomfive.dnomseven.dnomuni2088six.dnomone.numrzero.numrnine.dnomtwo.dnomtwo.numrnine.tosfthree.numrfour.numrsix.numruni2070eight.numruni00B9five.numrseven.numruni00B2nine.numruni2074uni2077uni2075uni2076uni2079uni2078uni00B3eight.dnomuni2153uni2155uni2156uni2158uni2157uni215Funi215Auni2159uni2154uni204Aasterisk.lcunderscoredblexclamdown.caseuni208Dcolon.ucquestiondown.caseuni207Duni208Ebracketleft.casebraceleft.casebraceright.casenumbersign.tosfparenleft.caseparenright.caseparenleft.dnomparenright.dnomparenleft.numruni2015bracketright.caseuni207Eparenright.numruni00ADemdash.caseendash.casehyphen.caseuni00AD.casehyphen.lcfiguredash.tosfguilsinglleft.caseguillemotleft.caseguillemotright.caseguilsinglright.caseasterisk_greater.ligabackslash_backslash.ligaasterisk_asterisk.ligabracketright_numbersign.ligacolon_equal.ligabackslash_backslash_backslash.ligaasterisk_slash.ligacolon_colon.ligaexclam_exclam.ligaexclam_equal_equal.ligahyphen_hyphen_hyphen.ligahyphen_greater.ligacolon_colon_colon.ligaexclam_equal.ligahyphen_greater_greater.ligahyphen_hyphen_greater.ligahyphen_hyphen.ligahyphen_less.ligaasterisk_asterisk_asterisk.ligahyphen_asciitilde.liganumbersign_braceleft.ligahyphen_less_less.liganumbersign_bracketleft.liganumbersign_exclam.liganumbersign_numbersign.ligaperiod_hyphen.liganumbersign_parenleft.liganumbersign_underscore.ligaperiod_equal.ligaperiod_period.liganumbersign_underscore_parenleft.liganumbersign_question.ligaperiod_period_period.ligaperiod_period_less.ligaquestion_equal.ligaquestion_period.liganumbersign_numbersign_numbersign.ligaquestion_question.ligasemicolon_semicolon.ligaperiod_question.ligaslash_asterisk.ligaslash_equal.ligaslash_equal_equal.ligaquestion_colon.ligaslash_greater.ligaslash_slash.ligaunderscore_underscore.ligauni2007slash_slash_slash.ligaanoteleiauni2008uni00A0uni200Buni037Espace.fracuni2007.tfuni2007.tosfCRnumbersign_numbersign_numbersign_numbersign.ligauniFEFFuni20AFuni20BAuni20B9Eurocent.tosfdollar.tosfuni20BDcurrency.tosfuni20BA.tosfuni20AF.tosfuni2219yen.tosfuni20B9.tosfuni2215Euro.tosfuni20BD.tosfuni207Csterling.tosfequivalenceintegralbtintegraltpuni208Buni207Buni208Clessequalapproxequalintersectionuni2206infinitynotequalproductsummationgreaterequalpartialdiffradicaluni207Arevlogicalnotuni00B5minus.dnomplus.dnomequal.dnominfinity.caseminus.numrplus.numrequal.numruni208Aintegralplus.tosfplus.lcminus.tosfequal.tosfgreater.tosfdivide.tosfnotequal.tosfgreaterequal.tosflessequal.tosfplusminus.tosflogicalnot.tosfapproxequal.tosfproduct.tosfmultiply.tosfinfinity.tosfless.tosfasciitilde.tosfpartialdiff.tosfarrowupuni2197percent.tosfarrowrightuni2198perthousand.tosfarrowdownuni2199arrowleftuni2196integral.tosfradical.tosfuni21E7arrowupdnuni21E8uni2B06uni21E9uni2B07uni2B05uni2581uni27A1uni2582uni2583dnblockuni2585arrowbothuni2586uni2587blocksummation.tosfupblockuni2594uni258Funi258Euni258Dlfblockuni21E6uni258Buni258Auni2589rtblockuni2595uni2596uni2597uni2598uni2599uni259Buni259Auni259Duni259Cuni259Funi259Euni25CFcircleuni25EFuni25D0uni25D1uni25D6uni25D2uni25D7uni25F4uni25D3uni25F6uni25D5uni25F7uni25F5invcircleuni25C9uni25DAuni25DBuni25CEuni25E0uni25E1uni25DDuni25DEuni25DFuni25C6uni25AEuni25DClozengefilledrectuni25ADuni25C7uni2514uni2510uni25AFuni253Cuni252Cuni250Cuni251Cuni2518uni2524uni2500uni2561uni2502uni2556uni2534uni2555uni2551uni2563uni2562uni255Cuni2557uni255Euni255Duni255Buni2569uni2554uni255Auni255Funi2550uni2560uni2566uni2568uni2564uni2565uni2559uni2567uni256Cuni2553uni2558uni2552ltshadefilledboxuni25A1uni25AAuni256Auni25A2uni25A3uni256Bdkshadeuni25E7uni25ABuni25EAuni25E9uni25E8triagupuni25F0uni25EBuni25B6triagdnuni25C0uni25F2triagrttriaglfuni25E5uni25E2uni25F1uni25E3uni25E4uni2530uni2512uni25F3uni2527uni250Euni251Funi2541uni2511uni2529uni2521uni2547uni254Duni254Funi257Buni250Duni2533uni2513uni250Funi252Funi2501uni257Auni257Euni2579uni2578uni253Buni251Buni257Funi2517uni2503uni252Buni2523uni2545uni2535uni254Buni2532uni253Auni253Duni2572uni2543uni2571uni254Auni2577uni2574uni254Euni2573uni257Cuni2576uni252Duni2575uni257Duni254Cuni2546uni252Euni2536uni2531uni253Euni2539uni2549uni2544uni2538uni251Auni2526uni251Euni2516uni2537uni2548uni2519uni252Auni2522uni2528uni2540uni2525uni253Funi251Duni2515uni2542lozenge.tosfinvsmilefaceuni2639uni2520femalesmilefacespadediamondheartclubmusicalnotemusicalnotedbluni2620sunmaleshadeuni2113estimateduni2116uni21EAhouseuni2327uni2326uni218Auni218Buni232Bdagger.tosfdegree.tosfuni23CEdaggerdbl.tosfbar_bar.ligabar_bar_bar_greater.ligabar_bar_equal.ligauni2328bar_equal.ligabar_greater.ligaasciicircum_equal.ligaampersand_ampersand.ligasection.tosfbar_bar_greater.ligaplus_greater.ligadollar_greater.ligaequal_equal.ligaequal_equal_equal.ligaequal_colon_equal.ligaequal_equal_greater.ligaequal_greater.ligaplus_plus.ligaequal_less.ligagreater_hyphen.ligagreater_hyphen_greater.ligaequal_less_less.ligaequal_slash_equal.ligaequal_greater_greater.ligaplus_plus_plus.ligagreater_greater.ligagreater_equal.ligagreater_greater_hyphen.ligaless_asterisk.ligau1F310less_asterisk_greater.ligaless_bar_bar.ligaless_bar_greater.ligaless_bar.ligaless_bar_bar_bar.ligagreater_equal_greater.ligaless_hyphen.ligaless_dollar_greater.ligaless_hyphen_hyphen.ligagreater_greater_equal.ligaless_hyphen_greater.ligagreater_greater_greater.ligaless_dollar.ligaless_plus_greater.ligaless_exclam_hyphen_hyphen.ligaless_equal.ligaless_equal_equal.ligaless_plus.ligaless_less.ligaless_less_hyphen.ligaless_equal_less.ligaless_less_equal.ligaless_less_less.ligaless_greater.ligaless_hyphen_less.ligaless_asciitilde.ligaless_equal_greater.ligaasciitilde_hyphen.ligaasciitilde_equal.ligaless_slash.ligaless_slash_greater.ligaless_asciitilde_asciitilde.ligaasciitilde_at.ligaless_asciitilde_greater.ligauni0374asciitilde_greater.ligaasciitilde_asciitilde.ligauni0375asciitilde_asciitilde_greater.ligagravecombacutecombuni030Buni0308uni0302uni030Cpercent_percent.ligauni0306uni03F6uni0304tildecombuni0313uni0314uni0326uni0335uni0327uni0336uni02BCuni0307uni0326.caseuni02B9uni02BAuni030Auni030Funi02C9acute.casecaron.altbreve.casecaron.casecircumflex.casegrave.casedotaccent.casedieresis.casehungarumlaut.casecedilla.caseacute.case.loclPLKring.casemacron.casetonosacute.loclPLKtonos.casetilde.caseuni0342uni1FBFuni1FBDdieresistonosuni1FFEuni1FCDuni1FDDuni1FCEuni1FDEuni1FEEuni1FEFuni1FC1uni1FFDuni1FDFuni1FEF.caseuni1FFD.caseLIGuni1FC0nulluni0345brevecy.caseuni1FEDuniE0A0uniE0A1uniE002uniE0B0uniE0B1uniE0B2brevecyuniE0B3uniE0A2uni1FCFuniE001uniE000uniE003001.204Copyright \(c\) 2015 by Nikita ProkopovFira Code MediumÃ!?w¡ú/b®Ùò@_—ª÷!AKq|¢Óá =\uz§»Í:Yc”¦¸ÆÌÙë ¹ü`o‰Ÿ±Þ 0AJÉÎ H b p ‹ “ G ¹ * 5 n { ¡ § ¶ Û í ò õ ü 0 7 “ ö  # =   » ¿ Õ3–šª¼ÉÍÚ=VaµÂ,y…£¹¼ U ÃßõOn€†›Þ#=Eou¹¾ÅÒÙ÷/BHQŽÇÛ#>IYemŒ•´»ñ7>rv¨Ûöù+/8=X‰¸çñþ4bq€†‹¸Ñãõþ/7@P^flqw„”—¤¬ÑÚâçþ&IX`flp”˜¤°¶Îãç÷ $-4:?_v|Ž™¤ÃÐÕâ%,IWbj{—¬·ÁÑÝéõ!2LRZiot˜±ÈÕÝãè$2;DJPgl’¥°ÄÑÞëø "7=Rej~ƒˆš¦®´º¿Ä×êïóü    ' 9 K Y k v Œ ‘ œ § ­ ³ ¹ Ê Û á ç ñ!!! !!!%!+!4!>!F!N!U!]!e!j!q!v!{!Š!™!¨!·!Æ!Ô!×!Ü!ç!õ""""$"-"1":"C"L"U"^"d"j"o"t"y"~"‰""š"§"´"Á"È"Ï"Ô"Û"à"ä"ð"ü### #,#8#>#F#N#T#\#d#l#r#z#€#†#Œ#‘#–#œ#§#²#·#Â#Í#Ø#ã#ê#ó#ü$$$ $gpphu•y›nû ɽ󗤑ŸŸ¯o¥g gophw‘w—q½$Én÷›˜•¡÷ ÷.|û -JXW~Ìôê“Ý«÷.pBs'ûû:¾4ñÌ´°Õ?™¶hÐð¿æ÷6 ûCû û8ûHÔ.÷ ã½Ç䥕T–O²p»ƒ±än”~™„­q÷ ÷€÷FÍû"UJ€rI§<žÀ¿“®Õ¶pFi@û51Lû)ÍI÷ÎÉ£¼²ž]²v¾…¥×o”›´ûzOPm©ÃÉ´°ôÉû `q\r]û.5ûû9û?à!÷.÷-á÷÷<÷<7÷û.4Û³OûûcO::cÇ÷÷´ÇÜ÷ûA2û'ûiûmäû ÷A÷Aä÷%÷iû ûFb1%(_ä÷F÷G´åññ´1ûF—5ű`û&¤û6mXj_OiÃ÷÷¯ÍÉ û-“/=û&J^JQj«Ó÷óûûüû ÝO÷÷÷ Ü÷Oó€à{ßé¼@ûFû0f9Ae7÷oãû ) û 3÷pßA±eÝ÷0÷F»Öê ÷²˜ãü3ýFø9ãûÅ÷o÷ŽâûŽMT£¬bPGa¼Ñkí÷ ÷¼÷ïG¯$§"¨nš³®§¢Óɺwp´»Ò®[K¥2û:N0/Ðfôp÷oœw`__pE ÷{ø>ûû9ûÛû7÷Ûû÷{ü?û›÷ 9O½÷÷ůߏ¶{o´¿ÑµXO¡Cû7+û û5û9éû÷7ÑÐ¥²¹XÓqdaxZ ùFûû­ûv÷­û‡ ÷Î÷v ÷8èHf§·¼µ¡ÓÀÀr¶¿Ë²Q;›Cû)Z.Q°`Ùzð2]d; ñR÷ñÞ§³ÃTÐkZQwD8\¬À¾¬¤ÜûûüVûøVû ÷Fü¤±o?id z™7÷(˜Òܳ÷ åÈÀÖ“F™alx\]nžµ~G}@“ÆVä Y@½ïÖ6 û üNûfS56fÃ÷øNûüdû"à*÷-÷,ãî÷ ˆ)rÖûcÏœ ùÆ  ùí¿ÚÓ“G˜Z}ni÷Å ­¼~F~C“½<î Ç[¸3PWt]cÅ`«¦§–©«Ÿzqcjsû/1N÷¬–Ðû>÷ IJ­É ù¿ûaû ¬P÷oä øÆ÷í÷ûA2û'ûiûmäû ÷A÷Aä÷%÷i @YÖ÷*H é¼@ûFû0f9AeÔ7÷oãû Ò) Êû 3÷pßÒA±eÝ÷0÷F»ÖêRY|f]¹\¤­©•®®~rtw€if‚X KÁ`Ú¥œŽž•؆u{‰vdzœª ùJ  ú/Cûû¸X÷Ý÷9·¾ ù÷ç÷/¸½û÷Cûû ƒ hvû16:Õ÷@9;Ó€ ÞÜB÷ û¡÷1-o  vøàñ¤øºø¬ùFû -üb(øbûdýFó™÷ãŽë‰ï‡Ä÷üfðñøfˆS‰,&›ûäöáø¤#Tü^GøûAüTø^ûäü¤÷Ëø Çü ´“§µû\‡™œ˜²³œ}}x|ƒmY•y”ž v÷:å÷ìå‹w ùT2AhHQÖQ»²½ ¹Ç·oZ%ûAŽû9iö¨÷÷Ky÷4Þ?Øû Ü÷*Ü÷*Ü÷*Ü ûœ9÷,üû19ø1Ýû$ú0ûaû§Q÷sÛ ®¥\Á øª÷”jÉü«û” ]x’Gìø¤û¸d ú,û9ûÝ^X÷ûÓ÷÷ AZÕ÷)÷  ù­ÆûY÷W1 @ßø÷ßêô9÷÷ ÷9óä÷ÒùTÔû6N0] g±nè^pf_T:½dòiòjžzceesUWb›¦b^Cj¸ÆuÖ÷ÝÆèºu¯g¦Ô·¦¯·ÃÜZ³#¬&¬wœ³°¬¤Á¿²}p³¹Ñä¬\S¡B=û¼÷\©Yr|nrsû¹m–À£˜¨¦£ûWvù*Ý÷‰ ÷»÷&)÷÷ç ø÷[ ¨©³³nª_èâû—ûÔ9÷dûêû''Rû1m5÷v´÷ä÷Y÷V ¿ Ìm÷÷?4´ÙûJÊk÷÷>5· ÷ûA2û'ûiûmäû ÷A÷Aä÷%÷iûš÷ è¶Aû(‘û±÷(’¶Õèü¬+_Û÷/‡÷³û/‡b;)vû16:Õ÷@9;Ó Wtwflz”–u`Hv§°xÃðÊÅ÷ ›ñ@ô@‹é€Y ò€”Uµ`Áµ¶ÁÀa¶TUa`V ÷'$ÑûBûSýF÷÷Šß÷2÷Í÷5û "Oi46÷¡ßäÆg-BJvbW¾H©´¶˜¼Ú¼]'”ûw<÷yû‚V^9Yb˜ªbWHa½ÌuÒ÷:å÷÷9÷:7÷û7f÷8 °¯§§¯¯o¦g ûü(¼PòȨ́À² ‹ã÷oâ÷dã øzŒƒ÷'°al0EdYŽ„³›Áž¹œt~L[kUŽƒµŸÚ°Šaeh_x`Žƒ÷ ÇrtjgzW„Ö¿|zym„rƒ”¥˜­–v}x€}„•УЋWo‹ÂAâXQìð‚½¨¦ŽŒ’†¡†—‘”–°¡ ùK! ¯÷ 3¤œl!lxwvûA2û'ûiû%µûÙQfûärªò¬‡žž‰ ÷Aä÷%÷i÷%a÷>Åû#^›™‰ˆ—û!ü}lµ}Ò÷÷H´åòü®|}Ž~÷!ø}ªa™CûûGb1$÷îø‹æüO-÷ÏûóüŽ1øi—ë÷ û÷pÊ÷oû÷ –”‚€A€‚‚€A€‚”–Õ–””– ~áøâ² —ˆ¦†˜ŠŒzštœ£‹ŒŽŽšrªuÆv÷ `›­o‹oyx‰w7¨hž‚‡ûnqŠF”W¸r¨Ž^ÃN’‡²{†u~`rd‘Š›™­š˜ŒŠŒ‹Šzq‰z†}yZ¦™y‡ˆ’u®_¦w  vùFw øÃ±ùF÷Sû×ûdü÷{÷.÷¹÷-û¹÷ûiø ÷S÷ÑûûûŒû÷Œ÷&ánâ¹ánáÜøJ˜÷søs@`U[sÐg¨›œ¢­·¬Rި׵Áº£F°n{zti˜_jÄ8hûQ@`T\sÐf¨›œ¢­·¬Rި׵Áº£F°n{ztih_jÅ8÷ß÷šÞàî÷}ðéø÷NNà5vja\[—a¡j55ÈNàáw­µ€¹¸´–Ÿ¬á7ÈÇ6ß¡¬™µ¼º~¶u¬ßßNÈ65 ja–^]a€vi÷XزZ98d[>>c»Þݳ¼Øû¯ûÑ÷¯ûÑÙÎ ªû;÷áû7]÷q÷4áûC^÷g÷l˜áüûTýF÷´÷;ŸâÙ÷ôÌûôZ²b½¿±´¼¼e´W ìSÐ((RE+*ÄEîîÃÑì0Cuoaat¬ÎТ©µµ¡qBØt Vvû4é ÷4÷ê û×2÷cûþ$UQ5^^–®T\BbÃÌtÖ÷HÓ÷ ÷Y²c½¿±³½¼e³WYdcZ t ü° -v#¸@ c‘ …‘@7÷oãû ‘ )  û 3÷pß‘ A±eÝ÷0÷F»Öê¥ )Õý» ûWv÷_âøá÷Zw¬÷¶ ÷p÷ î÷]ù…öû~þP÷‚ ¸xÂ÷Ñ÷ ÷5÷¡÷ü#û‹*øKû¥ã[¸~æŠ5Ôå÷›á÷÷ ÷ ûÖû°÷hº†Óq÷C Qj«Ó÷óûûüû ÝO÷÷÷ Ü÷O Ûb ÷uøÜD‚.ûûÄ÷ùFû ~ß÷¯áÖ÷÷s÷÷0ù]r;÷:`ê2›û¶k\ªLû9/ûû#ì6÷÷$ß÷ ÷0÷• ÷û™Ë÷ûû»®uW±oûŠeH?IaÂå蹸ÃûVv÷^æR÷º Û÷÷W÷Üø‡ø¤ûüdpclWE…Âì÷¾ûý{÷—÷±ƒ«´f¦¢~»½½¬¼ªŽp“g”x¼ò˜€º€ÇÐûWv÷v ú| ¸V±04Sf[c¡w²~ ÷Àøùé¼@ûFû0f9Ae ø;ú3´ü<þ Û« ÷!lœ“ ™û’ûäi'÷ŠIû(ûNãL÷÷^÷ûdâÌû5÷R÷‡Ìlïû‚3˜÷’~å÷€Ú÷qæ±÷ ¾÷M¿÷ ÷û ûGa2%(^ã÷G÷Hµäññµ2ûGWkÚûM<ûr¥Ã' ÀR÷J÷?èÈôà;Éû  ÷u÷.‹å÷Ï÷rä÷$÷÷ñùTû@8ûû =GÙ!H‡a=r6øW™åû⿨–ºÀõ÷YÏûY÷Ö®¯Ë¹­{bªÓÁË]K§<mvprolûû÷~â÷1Ú÷&áÞ÷÷éø²û5*û û5û9èû÷9ËÒ ´¼ZÏm`c~Z’¶ÌÎ˱OûCÎ÷[Î÷$æ÷æø[ ð ÷‰÷  ÷;÷@ ÷qw 9 äÉf7=R[)DM¤¸XIMLÈâhò÷?òå÷ô?Ä,” O ù¿\2÷o2¬Æ ‹÷,vø2÷‹w ÷Qøì ÷ÀùÔûÀû¾÷=ü„÷¢ ø„÷= ¥øÓÜøK÷øíW8÷Û ç¼ ®p¦gøcýW÷. ÕÃÂÕÕSÃAASTAAÃSÕ v÷vâ÷kwä÷÷Z÷ø# ÷9 ûVÔ÷ ÷Ü ¸m±H‘ ®p¦g ÷"ûA ¯¦¦®¡{—¨÷ MY#r…wwg§q¯ ÷èø2øø\ü2/÷Ô 0ø2÷0 û¢ J\ºÅª±É¹¨zg¬ÊÄ ‹ëøˆéÆøu ~r ÷m2÷ ä9fWQ8ûà3÷0÷/åã÷ÝXÊ0´ØÖ  v÷°à÷áà÷ =Îj ~å÷oä÷xæ°÷ üÊ/øÊþûDY²c¾¾²³½¼d³XXdcZ ù—÷- ÷Ú÷ ÷øºùFüC‡ øæ÷Ã÷„ ©Ú ÷ ÷N ~àøºÝÄ÷4÷÷j÷4÷Øø—ø¢ Û÷z÷*~ûÊø` ûý¾Ûùn÷M¡ó÷÷I ÷9 þÒý·ù j …i{ž©¤”Ÿ”¡J¨yozmbAº]å‰ ÷Ÿø&÷ã÷^)û^ü&÷^)û^ ÷G ÷íù¾÷*÷ÊÛ÷˜Û¿ ptd{\4dÇÑÏ´Öé )û^ûY2÷Yû^í ÑÁÑ÷B÷ø= aqfiYEcÄ÷ ü;ýNËhø<ùN ÷7 È÷÷‰÷ —Ü( ä2÷I vø\á ùFw÷^÷X÷^ø;÷4 ›Û‘©Õ²“›§ž§¯½y…ª‡ ˆ™ X÷Y â¼øŠ ú"ûû-¸c÷#÷ nûh ½÷ ¡÷1-hV ynx|žs—}‘ЕВ‘š {ûû0cJø`cÌû0{÷] ù:!û,û=?@ADSJEGFVIMLKPNOQWRZTcU^XYk\[a`]_budefrighjqlnmop{xwts€vyz|}~‰‹‚ƒ„ˆ…†ŠŒ‡‘™”Ž–’©“•—¡˜›šœ¤¥žŸ ¢£®«­¨¦§ª¶¬±´º°¯²³»¼·µ¹¿Ï¸Ã¾½ÀÈÅÁÂÉÄÇÆËÊÙÌÑÍÔÎÖÒÐÓÕÛãרÚÝÜåõßÞàáäüâçæðèéëêìíïóòîñôö÷øùûúþýÿ     (%)* !"#$&.'/+,8-21304756>JA9=:?;<@MBCLDEFHGOIUKTNPSQRVa\WZ[]XY_kd^`bcejmflghionqptsxrwy{uzv|}~€„ƒ‚…†‡ˆ‹‰ŒŠ”‘Ž“’•š›–—˜™¡¥žœ¨Ÿ ¢£°´§¤¦­©ª«¬³®¯¶º±»²µ·¸¼¹ÃÂȽ¾¿ÀÅÁÄÆÇÉÊÛÜÙËÍÌÎÏÐÑÒÓÕÔ×ÖÚØÝàáÞßåãâäæçêëèéíõòìïñ÷ðîöóôüþøùýûúÿ     +#" -!$%&:4'()*86,./1023957<;@F=BEC>?ADIKJHRGM]LUNOQPbSTVYWXZ[\gha^_`icdefjmonklqrspwzytuvx}{‡|„~€Šƒ‚…†ˆŽ‰Œ‹•¨‘—’“”˜™–¡›š¦žœŸ¢ º¥¤£§©ª¯«°­²¬®±¹³µ¶´¸·cÀ›»Þ£¼½¿¾ÂÁ@ABC =rt y` {hÄ@ÆÇÊÅÐÉÈÌ\^<> ËØÎÏÍ×ÑÒÓÔÕÙÖ‰o:ÚÛÜÝÞßàjxklviwAuâãáäç÷åëæêèìñéíòîõïôðóöúøùûüý ÿþ     ag!$e"'#bd%(&*/)0-2,+.8134567 ¦¨Ÿ>A9œ:_—=;O<?@CFBzNDEJHGIQLKMPR]USVT_WXY[`Z^l\madgbcefhijk{onpr†qstvuwxyz|}~€‚ƒ„…‡ˆ‰Š‹ŒŽ‘“’•”ÜSä–—˜™šœŸ›¡ž£ ¢¥¨¤¦§©ª°«¬­®´±¯²³·ºµ¶¼¸¹Â»½¾À¿ÆÁÃÅÄÈÊÇËÉÏÎÍÌÒÑÐØ×ÓÔÕÖÚÛÙãàÝÞáâßæåéèçìëõðúêíîïñòóôö÷øùûüýþ ÿ    ' $*#!"%&()+,-/.012>3546798;:<BC=G@?ADPFIEQHRJMLKNO!sfª¥™¡] TpqUV?XWY]Ze`\[j_^aibcdkfghmszlpnoqrytwxuv|…{}‰‹~€ƒ„‚Œ‡Ž†ˆŠ˜‘š”—’“•–™¡Ÿž ›œ£¤¦­¯¢¥ª¹§¨©«¬®½±°¾²³´¶µ·º¸¼¿»}ˆ…~ƒ‚|†€‡„ÁÀÂÃÉÄÇÆÅÈÌËÐÎÊÑäÍÏÔÒÓÕÖרÙðÞæÚÜÛÝâßàáíåãòñéóçèïêëìîQ‡›²Ìãÿ6z›ÀÉÖØâðþq~›¯±ÈÊØêý!?]o‹Îô2GikÁÍ×'9FgŒ™›Üû  "Yf|©ÂÞ$0u¼"8HSs¬µËÝ ^ l n p  ¢ ¹ Ã Ñ Þ f s ‰ ‹ ¼ á  J R h { † ¨ ´  ä 5 [ o › ¤ · Ä Þ ë í ÷   7 D L Y f € Ž š ¦ ´ Á É Ô ë ÷"BÌñ+3>¡ªÃõiŒ¨ª$ÒÚæý @Ze„ü?R~”ÃöEGVexˆ¦ÂÒJj¾ñó!Sc{§­ÅæÿS´ÃÙ7X£Þæû !AVd†¦¾XZ\^­è#0LÍÚøk‹ØV‰•¿ÊýG’Ë@HYk„–µ¾Óè   * A Y i ž ­ â!r!ç"3"i"ß#q#±#Ô#è$,$.$1$L$p$¹$Ç$Ù$÷%%,%8%Z%m%¦%¾%Ú& &&&%&(&6&@&B&P&c&Ï&Ñ&î'''D'['™'Ü(%((Í(×)+)?)I)j){)Ÿ**O*„*î+9+¥+å,7,ƒ,ß-[-]-t-}-Œ..%.c.¿/0/[/¡/î0*0V0}0§1*1œ1Á1Ë1ÿ2292Š2½2û3,3y3ƒ3˜3á4474d4”4ä55515G5m5‹5¾6696i6‰6 6Æ6è777,7V7s7Ñ88"8m8ª99€9Ó:':}:‹:Ô;=;v;Ð+>3> ???*?J?”?œ?§?Ç?Ô?ù@@;@\@¦@µ@ËAANAdAlA‚A„AA¬AµAÊBeB„B¥B¾BËBÛBûC9CyC‘CøDCDKDMDaDcDDƒD…DæE.E…E™EçFTFŽFØG)GGúGüHHH+H¨HÀIIhIÚJ#JfJ°JçKK*KUKÔLoWoƒo¯oÞppVp™pªq-qrqóqýrernrÈrÖs*swsys´t>tFtt§uueu¨u±v(vxvzvŽv vÂvåvñww4w@wXwmwzw†w·wéxAxIx^xnxÎy0yzyËz&z¦{/{||—|ø}h}q}s}u}w}¾~~/~Q~d~ˆ~ ~Í~ü+?T“­Ñë€ €*€T€€¨€Õ8|À‚ ‚e‚„‚—‚·‚΃:ƒHƒUƒqƒƒÇƒõ„$„S„Š„¾„˄ׅ…+…J…f…†…¸…膆Q†Ž†Ê‡‡L‡d‡‡›‡º‡Ø‡øˆ%ˆQˆbˆtˆ©ˆ¼ˆÚˆþ‰‰L‰i‰ÃŠŠwŠÓ‹1‹F‹[‹}‹à‹ýŒ4ŒkŒ£ŒÞEq†š°ÇæŽ Ž$ŽYހޭŽÕ/^ á"a…¯Ö‘ ‘?‘q‘©‘Þ’’c’¯’þ“ ““|“£“é”U”‹”ܔޔþ••o•È•ì–0–œ–Í——!—@—]—¶˜˜t˜|˜†˜˜¤˜¯˜·˜¿˜È˜Ï™-™5™>™G™[™„™Œ™”™Ÿ™¦™°™¹™Ä™Ì™ûš šYš¼šÆšéšòšû›››&›1›:›C›M›U›^›a›v›˜›É›üœ8œœœ¼œÞ&JnÚžž`žÕŸŸŸŸ0ŸBŸWŸˆŸ·ŸÔ  - V k ¨ Ø õ¡¡¡?¡R¡n¡œ¡Ø¡ç¢ ¢%¢3¢A¢S¢f¢p¢}¢¢¢«¢¹¢Ë¢Þ¢è¢õ£££#£1£@£O£R£b£u£x£‚£—£§£ª£´£É£Ó£Ö£ã£ñ£ü¤¤N¤”¤ä¥¥2¥Y¥g¥u¥¥¥¥¥Á¥×¥é¥÷¦¦z¦¤¦á§§2§`§¶§Õ§ÿ¨¨0¨i¨„¨­¨å©’©úªEª”ª®«$«¬¬5¬”¬»¬æ¬ý­­3­c­ ­Õ­ë®_®®£®É¯¯'¯5¯H¯]¯o¯‹¯Œ¯¯Ž¯¯‘¯’¯“¯”¯•¯—¯™¯›¯¯Ÿ¯¡¯ô¯ö¯ø¯ú¯ü¯þ°°°°°° ° °°°°$°'°/°8°V°°±°¹°Ã°Ñ°Ô°Ö°Ø°Û°Ý°à°í°ï°ñ°ó°õ°÷°ú±±:±<±>±@±B±D±F±H±J±L±T±^±u±~±ˆ±’±š±¨±²±¼±Å±Ó±Ö±Ø±Ú±Ý±ß±â±ï±ñ±ó±õ±÷±ù±ü²²² ² ² ²²²²+²^²u²¥²Û³³$³T³¡³Ü³÷´´B´f´q´|´ˆ´”´¥´¶´Æ´×´è´ùµ µµ&µ2µAµTµgµuµˆµ›µ®µ¹µËµÛµìµù¶ ¶2¶A¶M¶^¶}¶‹¶È¹èºoº|ºžºÀºÛ»»%»C»I»j»»Ì¼¼<¼q¼ª¼ø½7½}½Ä½Ú½ý¾¾¾<¾[¾j¾‹¾¾›¾°¾Ê¾å¾ø¿¿¿$¿5¿F¿V¿a¿r¿}¿Š¿¡¿¾¿Í¿ã¿ò¿üÀÀ/À8ÀMÀcÀlÀˆÀžÀ°À¿ÀáÀñÁÁÁ'Á6ÁIÁSÁeÁuÁŽÁšÁ¸Á¿ÁÅÂÂ'Â3ÂNÂaÂ|€‡ ºÂÙÂúÃÃÃ)Ã2Ã<ÃFÃPÃYÃaÃhÃmÃÃëúÃÔÃìÃøÄÄÄÄ5ÄJÄnąĔĦıÄÉÄÖÄâÄòÅÅÅÅ)Å<ÅIÅWÅgÅsłţÅÅÅÐÅÜÅ÷Æ Æ$ÆJÆzƌƠÆÄÆ×ÆâÆïÇÇ ÇÇ.ÇQÇtÇˆÇ Ç­ÇÆÇÛÈÈÈ"È/È;ÈLÈYÈtÈ}ȗȜȵÈÁÈÒÈâÈïÈûÉÉÉÊ^Ê¡ÊáË"ËÁÌÌkÌ¡ÌõÍ0ÍMÍÍ®ÎÎOÎ‚Î„Ï ÏÏéÏëÏóÐÐ\ÐkÐ|ÐàÑ|Ñ–ÓYÓˆÓÎÓóÔÔ=ÔôÕKÕµÕùÕûÕýÖ ÖÖ•ÖµÖß× ×'×G×U×~×ÿØØ<ØQ؀؜ØÊØêÙÙ%Ù'Ùi٘ٮÙîÚ!ÚUÚcÚ€Ú»ÚáÚõÛÛ!Û;Û]Û£ÛÀÛëÜ,ÜBÜZ܃ÜÈÜÚÜôÜöÝÝBÝwݨݵÝìÞÞAÞ¤ÞÇß7ßOßpßîà*àxàÅàÙá>á¤á¸á»áÕáçáøâââCâeâ‹â¸âÌâûã ãã2ãGãZã’ã§ã»ãÎãúää$ä'ä3äAäOäQä]änä}ä‰äšäªäÈäÚåå!å.å<åKåMå\åmå}åŒåå­åÀåÚåëåúæ)æ8æGæUæjæ{æŽæ æ³æÇæÞæôçç8ç]çzçžç­ç¹çåçôèèèè#è%é ëµì½ïïlï»ð}ð‰ð¡ð¥ðµûò¿÷îÓ÷¯»ø·¿åÂñÑO½´ÁÁÁ»€åú®úˆø8xUú¼ûË÷Ëû)ýÍ¸Ε§±ÑÇrÂ5dUp~”šŒ“œ™Ž ½–mdVxwC‡7|—‚˜—˜”šý€O3vš{ŸŸš› Ÿ|šww||w F“øÜØø9÷:% èJ  F“øÜØøJ…ý0% èJ  FáÝ“øÜÜ÷¾4 ÷üâ% ìJ  F“øÜØ÷ä?Wý% èJ  Fê÷ â÷Þ÷Tù‘! ˜üë% îJ  F“øÜØ÷xœ ˆý% èJ  F÷ Ü÷2÷¯ÜøMùª ÷›ý% ìJ û‚Ø÷JF÷Ûåìø­ÂûpùFû$ûpýF÷ »÷:÷жû'2h[^E=± ®î³ûæ÷”ôJ  FÊÆ÷Ç÷FÒðÒß÷ÀúT? ÷ ýr% ïJ  FðÝhÞ“øÜÚ÷ùù—ž ÚKÖËüñ% æJ ÷> ÷Ø÷;k÷> øJJû4ý/k= ÷G÷úùT+ ÷GøQJûû+ ÷GøNûGû9+ ñ¼´éGvùæ¿÷ ÷דäwø U´èË®·¶SÒme_nAû9Õ÷S÷WâÓòÁºziµÇÓ¸SQ¤-û<û÷¹ oûdóû÷'sƒ,·€” wmQ·€† w÷÷Gø$?ûG$+ ~éø¨æÊ÷!¿÷ ÷ ÷'÷ÿú < †û`+ ‹ãø•äÒ÷÷÷øÅ÷ñÝ–‹ãø•äÒ÷÷÷ø2NòüœÝ–^÷÷÷yøî*^÷÷ø&Jûoû|*^ÍÝ÷÷÷Ó4 1û.*^÷÷øVNûûŸ*^÷÷÷ù?ûûa*^Ö÷÷÷9o ÷÷iù‘! èû\û7*^Ø÷!÷÷÷'ü÷Ôú < è0ûÆ*^÷÷÷œ ûlûf*^ïÜ÷÷Y÷¯÷yøbùª ø½ûP*û‚Ø÷5ã÷oâ÷dã÷÷¨åx÷yã÷o÷ŽâûŽ÷d÷²˜ãü3ýFü÷„MkjbQ=± ®î³Íã v÷ºã÷pã÷÷÷‡øî÷¼—ãü<‡ ÷º÷˜ãû˜÷"÷«÷÷Ò~2 ~å÷oä÷xæ¿Ý°÷ ÷«÷÷Ü4 ý•2 ÷"÷«÷ø?ûMýÈ2 ÷"÷÷µ÷÷Ò~2 ˜S ~å÷oä÷xæÊ÷!°÷ í÷'­÷÷Ýú < €þ-2 Œ v÷ÏèíÖ@÷LÔ÷÷r÷÷ øêøÙDÜ÷ûìûûrÜ÷ûìûDÜ@ÒüŽ÷÷Ï÷rûÏ÷øŽÒûO)ûrí÷r i ÷ä?Oý»¤ øùF÷W ‹Þø Þï÷÷j÷÷QD™8÷ªÔ÷÷<ø‘ü§8åü 18÷¤ÞFø ÷jü=û#a5ûXs‹äø•ã÷†÷÷Üû$÷W Ð ÍÝ÷ ÷¾4 ÷fI÷W ÷ä?®û ÷W Ð Ö÷ }÷|÷÷y÷Tù‘! ï@ü43È/ Ð Ø÷!÷v÷'û÷÷ç ÷¿ú < ÷eûnü43È/ ÷xœ ßû÷W ¹ û‚Ø÷5äø•ã÷(å÷høøîãü43÷*ü•ðû*2÷+MkjbQ=± ®î³÷*ähû*ø•Ð ÜÝhÞ÷†÷è÷Ø" èK÷+:÷W ~æøŸäø÷øùFp~æøŸäø÷ø?{û p×  vùFwã÷¼÷÷`ùFûýF÷ ø÷‹ü÷û˜ø ÷…÷Îûûý‹ ÷Ù÷ ÷÷'÷Ù÷ ÷÷—JûMýÖ÷N÷Ù w¬w÷ ÷˜÷×ùT÷èÊ÷ZûÃýG÷OÈøåû÷Ù÷ ÷©÷à÷'ð÷dý‹ ‹ì÷i÷!÷ƒw÷ ÷÷6÷'÷'÷òûƒË÷Ù÷÷÷ƒì÷w÷V÷ _Îû*.÷£ûûë+Q¶FÀ¬û‘ø0˜ìCº øQ º øJWýÖQ º øDN)ýùQ ‹ò9vøßò‹wÒòÌ÷ÇòZø÷+ùF$ûΚû— bûpøßû+ýFò÷Ín÷÷ ‡´÷$ý$ ûnä÷*vøßò‹wÒò÷òÜø>ùFûÎû— bûpøßû+ýFò÷Íì÷÷ ‡´÷püß®RG ùw‹ò9vøßò‹wðÝhÞÒò÷ò[÷ü± W" [KWý—÷+ùF$ûΗû— bûpøßû+ýFò÷Íg÷÷ ‡´~åø¬æ±÷ ÷²÷ øÆ÷í&~åø¬æ±÷ ÷²÷ ÷÷ü}&é¿ÝÍ ÷¾4 ÷œü/&} ÷ä?äüb&éÈ÷±÷ lo m÷ ÷ ÷Tù‘! Ò÷.ü8&} ÷xœ ÷üg&} ÷Aù£T÷ý&éáܱ÷ Œ÷¯÷ ÷è øMùª ôø(üQ&÷h øOù'a÷h ø?ùÖ]åûaû§Q÷ƒ,aéÎÝhÞ±ÁÃ÷aü>&~àCÓCá÷qá÷gáBÔBâŽ÷÷dó“€÷mùTû&Gûûyû}Îû÷'9€¨¢“¤÷Ïáû‡®¹¡ÓŽò÷!áû!†îxÐl¶÷p˜áûÇ“€”psnU€4ר@ûYûXl>AEj×÷X÷X©ØÔ÷ ÷|÷ øÈømZ£ˆ ÷ ÷t÷ ø¶ø~P ÷ ÷t÷ ÷÷ ûìP ÷ ÷t÷ øANÔüP ÷ ´÷Ã÷ ø¶ø~P û üà ÷ø¹÷W* ÷øJ÷ý* ÷øHNÐý6* ñ¼µåø«æË÷ Êדä”÷ ~€ø¹÷W÷3¼û ®û¯e¤ÁÇÁ¨ÒÄÄxa¼ÈÐÀPB©(û&Aû ×T÷'`÷jªnNAJf=:O¦¸ZKD¿XÓjꄃ0¿€” ~€mQ¿€† ~€÷µ÷$—ÞÜ÷÷÷ë?Ðüø* ð Á÷Ë÷ ø¹÷W* ûûœ ¯ v÷äØ÷Ké÷…÷øÀøè—éü«-÷dûKû>÷ûä÷÷ä÷Øû÷K vøèé÷…÷ø@Nûû¥÷[—éü«-÷düè÷ñ¼Övøèé÷…÷}ä|÷ùøè÷[—éü«-÷dü袂$º” |mQº† |÷Á vøèé÷‚÷û÷Ð÷ùøè÷[—éü«-÷düè÷àSF Ù ø¯ùF3~çø÷wÈ÷÷‰÷ ÷÷û$3~çø÷wáÝ÷6÷¾4 ÷…I3Ù ÷ä?Íû 3~çø÷wê÷È÷Xo X÷ ÷ ÷Tù‘! ò÷@3Ù ÷xœ ÷û3Ù ÷Aù£T÷û§3~çø÷w÷ ÜÈ÷x÷¯x÷ ÷è øMùª ôø'3û‚Ø÷@vùPwÈ÷‹å÷/÷ ôø:ùFüNûfS56fÃ÷øNûüdûÐ/÷zìYlpeW=± ®ì²îªÂà÷ød~çø÷wÊÆ÷ÇÈ÷ŒÒðÒŒ÷ ÷÷ÀúT? ù÷ƒûf3~çø÷wðÝhÞ÷7Ã÷J:3‹÷øØwšøÎà÷Â÷û7øØû÷oýF÷÷oùFû ÷ øêùFD ‹÷øÖwøè÷÷?û$D ÷ ÷ä?÷û D ‹÷øÖwê÷÷o ÷Tù‘! ÷R@D ÷ ÷xœ ÷BûD gª ÷ú÷œ,ª øJDüÎ,ª ÷æ?û ü³, vùFwê÷÷÷{÷~÷÷y÷Vù‘! èWü‰,ª ÷zœ Gü¸,÷÷Tëb÷ø"Jûývb÷øRNû¾ý™b‹ëøˆéØ÷!÷‡÷'÷Ðú < ûýÀb÷Gø-Ç ûûD+ º ÷ðÇ RþQ } ÷íÇ ÷ü«&÷÷ôÇ ÷ýA* ÷÷þÇ û•ý¤b¼ø÷$¼ø 8Ôüå$¿ÜÜÃ÷ ÷d÷÷·6÷^ü‚$¼÷9@ø ü³$¿ñ÷Ã÷ So 8÷÷÷Lù! éèü—$¼øP÷ÙüÞ$¿÷ÜÃ÷ s÷¯X÷÷yøEù1 ú÷ëü°$ûØ÷5ÝNv÷ŸÑ÷ãÃ÷ ÷å†÷]ø~¥×o”›´÷€÷FÍû"UJ€rI§<žÀ¿“®Õ¶pFi@û51Lû)ÍI÷ÎÉ£¼²=”tšz€¾/gX^C=]± ®î³û÷*`q\r]Pm©ÃÉ´°ôÉ¿ÑÆ÷ÇÃ÷ ‡ÒðÒl÷û÷¸îü€÷]ý$¿÷÷Ã÷ ÷d÷ó÷ñùç½³®Ç¥óLªmy}}vë" óKç÷$ü$å øDø²5 å ø8‰ûH5 ~àX÷:÷Zw¬÷¶ ÷s÷ ®÷]øe÷´vû~ýx¿_­ºvÄ÷Õ÷ ÷5÷÷,ûšw“JîøèÛ·ûTüT÷4÷·ÇÖ¶®uf¥Ÿ ÷J÷x$ Ÿ ø8û“ü‚$ ³ÜÜÍ÷÷‰÷÷È6ûü$ ³÷cwÍ÷÷‰÷øIp ûÀü$ Ÿ ÷J@¹üP$ ³ñ÷Í÷]o S÷÷÷]ù! éûü4$ ³ó÷!Í÷Á÷'·÷÷ÈÄ ûüÃ$ Ÿ ø$Pˆü{$ ³÷ÜÍ÷}÷¯s÷÷yøVù1 úšüM$ û‚Ø÷)áJv÷„×÷/ÞÍ÷¡å÷÷½ø«÷ª÷83ïû û*0û û2û/Úû÷&~ßSokcX=± ®î³±–­§¢[Ïm^`{XÝ?N¹÷„÷ò½˜Œžûö¥õ’½¼ÑÖ´T' vø+Þ÷Dâ÷c÷ø.ù…û:G',û 8÷ ü+÷ø+÷8˜ÞûEéì¥Ð²²„|®­Ùž_Z—Jæ ÷O ÷T÷× ò€øªøçXæ ÜÜ÷O ÷T÷× õ@÷»6÷ƒo›ô ö ‹ìÀY õ@”æ ÷O ÷T÷× ò€÷=@ø/>Xæ ÷O §÷°÷× òÀ÷ºøé÷÷„‰›ñ ô ‹éÀY òÀ”æ ó÷!÷O Ÿ÷'¤÷× õ`÷»Ä ÷ƒûT›ðò‹è Y ñ ”÷¸÷e÷ ÷]ùƒûýwš MPpW`• ÷¸÷e÷ ÷äúaCûû¸X÷Ý÷9·¾û¤!ûýwš MPpW`§÷? ÷÷ø ø¤I÷? ÷÷¨XûVI÷? êÜ÷÷÷¿6Ù,I÷? ÷÷¡÷Žû$I÷? ÷÷ ”÷i÷÷y÷Tù! ÈlûI÷? ÷‰ ÷v÷'û÷÷ç ÷¿Ä ÈÙû—I÷? ÷÷²÷]ûOIûWv÷lÝøÛ÷‰ ÷÷'û÷÷!÷'û ÷ú÷Kù§`nlcc¨m¶·ª©³³lª_÷ `mlcc©m¶¶ª©³³lª`õÍû—üi;Ûü69÷¥Ý<ø÷>ü û 2]ûe®6÷4¾÷×÷=÷? ÷!Ü÷2÷¯ûD÷÷ç øMù1 è÷oû!Iû‚Ø÷5ÝøÝ÷‰ ÷;ål÷'ûô t÷¿ù·Å_`mlcc©m¶bÙüÈøRûœ9÷,üêû19÷.MkjbQ=± ®î³÷$Ý÷? ÷÷÷ô ä÷¶̽³®Ç¥äLªmy}}vÔ" äKÌŸûIRûWvù*Ý÷ë÷ø[ø¤ûÔ9÷dûêû''Rû1m5÷v´÷ä÷YûWvù*Ý÷ë÷÷†@÷—û$ûÔ9÷dûêû''Rû1m5÷v´÷ä÷Y÷¦Ø÷`ù…è÷ ÷¦²÷Ø÷`ù…ì÷ hûý  ÷º ä÷÷]ø¤÷` ÷ñø¤ûûgûŒ÷wû¬÷û‚÷´÷Í ö ÷Í ÷ëú“ûaû ¬P÷oäFûVR ~åøÙÝ™w÷eô °ø ù†÷ÃÊ÷ZÐûCŠR ~åøÙÝ÷e÷t÷àö гûi ~å÷÷!÷aÝ÷e÷÷=÷'ö ÷†÷ÉË÷Í øyê€pp„m÷a ÷h÷×_Ï;Y÷¶û£9÷3û©%M¶HƯû#ÉLõƹ˜œª vø[â}wµï÷æ÷îÜøYø²Xhpcm½|hœcXknam¼ƒÄ7ü¤ïÜø&±¥¤š¦ªtTü æø&±¥¥š¥ªtTü îø÷ ^¬O ÷ ØäF ¸÷o ÷ Øø8ûçýfF ¸÷o÷Ò÷Œw‰÷t÷÷[ô ÚÉùˆgopiu–z›~pûÈ´àž²‘œŸ®o¥hÖ³ýˆF ¶÷o÷Ò÷…w÷n Üø@p üýF ¼÷o÷Òä÷²÷¬÷ÔäF ¼ƒÐ*÷jüé ûVv÷€÷ ìø”´÷ìî[Å(LKnU_܃Ð*÷¹ìø³§¸±½Í•h/û¼ûgpFl´9÷¼Ë»÷3÷Ò÷"÷÷n Ó÷¶ǽ³®Ç¥ÓLªmy}}vË" ÓKÇû ýF §÷oe÷Áø²%~áøâÈ÷ ÷†÷ ¨ûûH%~áøâÜܲ ÷¿6:%~áøâÈ÷ ÷†÷ ¡÷Bû%~áøâñ÷÷»Vo W÷ ÷ ÷Tù! ò %%~áøâÈ÷ ÷†÷ ²÷ûA%e÷>ù*TûûÂ%~áøâ÷Ü÷»v÷¯w÷ ÷è øMù1 ô÷#û%÷iø?ø‘c ÷iø@ùf\äûaû ¬P÷nûc ~áøâ÷÷È÷ ÷†÷ ¹Sû%~Þ8á÷1Õ÷,á:܇ô÷/ð÷3ëoøQø²CbcSsÆtf°=ûWûû9û?Á!÷ Õ±°Ã£O¨½jÓƶ ¬³¯\Íslr~hJm¼÷‚÷™Œ›o÷:[íû ‡:Ä›V#û3÷ ’¤³¿wûš†àQûû"wYRRvÁ÷÷ ÆÄv wx‹ÛøÛ˜÷—°øcø±÷œØ| °“ssk‹ÛøÛ˜÷—Ðø]ùf\äûaû ¬P°÷u/÷œØ| °“ssk‹ÛøÛ˜w÷x÷—Øøù÷÷^½û/ûç]Y÷û¸÷>:÷œÜ| ¸“ssk‹ÛøÛ˜w÷;÷û÷÷4Û¨øcø±÷œÌ| ¨“sskÐû}üö Ù÷­Ó+Ùø8û0ý+~àøà÷cwê÷÷N÷ øIp û]ý9+ñ¼µßøàê÷°×“äs÷ ~€ø–÷+ïG¯$§"¨nš³®§¢Óɺwp´»Ò®[K¥2û:N0/Ðfôp÷oœw`__pEMT£¬bPG·fÇmÝ…ƒ0¿” ~€mQ¿† ~€÷¶ó•ã½ñÙ÷J@÷%üì+~àøàê÷§÷ª÷ è÷­Ó+øžû! ~ã@ŸùßÝ÷Øòˆ÷n÷t÷»ù…û>=û#ü¨÷ø¯笱ÍÄ fhA'{-ºû÷GŽû PjmSro“˜tzc?ºv®´¿õáË÷÷?ûS”ÞÉôœêtáDÊû~åøÝ÷P÷ø¦§cÕn #ÌF÷ÆÃ›¤²~å÷]ØæÝ÷P÷ø~ñ|pjeJp¦Ä÷ ÷:Øû:æ÷:˜ÝûG÷û~û û 9÷ 0!>õû #ÌF÷ÆÃ›¤²~åøÝ÷P÷ø ù©÷ÃÊ÷ZÁý€cÕn #ÌF÷ÆÃ›¤²ñ¼´åLvøYÝ÷P÷š×“äwøU´À޽š¯¢cÕvn n4¸Máyoƒ+®€” nmQ®€† w÷~åøÝ÷P÷‘÷àø¦§cÕn #ÌF÷ÆÃ›¤²Ðû5* »÷]ø¤M»ø8ûwûVM~àX÷º ÷Ü÷: ÷Z÷¼÷¿6),]|’Gìø¤û¼d »÷A@Õû$M~àX÷º ÷÷÷: @o Aô ¶÷Tù! ¹ûcû]y’Gìø¤û¹d »øP¤ûOM»÷>ù*TûuûÐM~àX÷º ÷5Ü÷: `÷¯aô ´øMù1 º¶û!]z’Gìø¤ûºd û‚Ø÷(àKv­vø¤÷¶ ïå“ô ø“ø¤ûÍd øûü(¼PòȨ́À²­‘O¯Bjd`L=± ®î³~àX÷º óÆ÷Ç÷: tÒðÒu÷»÷Àî¼€(û]|€’Gìø¤û¼€d ~àX÷º ÷"÷ä÷÷Zô ³÷¶§½³®Ç¥³Lªmy}}v«" ³K§û0û]g’Gìø¤û§d ‹èC÷º »øŒpø¼ø¤û°ûüGûøGû ÷Oü¤÷÷æøŠD‹Ñø^w—øÔ¨ÕýfD‹Ñø^w—øÔ¡ø ý4D÷Ø÷÷÷o ÷Tù! éýD‹Ñø^w—øÔ²÷Úý_D ÷º ¶ø–÷;÷÷l÷ûl÷ûR÷¯’ ÷>ø»ø¤0ûWv÷vø¤w¼øŠ¨÷ûV0ûWv÷vø¤w¼øŠ¡ø<û$0â÷÷÷o ÷Tù! ÷#û0ûWv÷vø¤w¼øŠ²ø ûO0÷†÷uå{÷†ø8ûhý {‹å÷ðå÷qwæø5øIp û•ý'{‹å÷ðå÷ ÷!÷÷'÷ÈÄ 8ýM{÷† øù¡ç ûý- ÷ Ø÷ìù«ç ûêýsF ¸÷oe÷ìù«ç ûûU%Ù÷õù«ç û3ý++÷†÷õù«ç ûký{ø©wæø5øNø©û"û"û#÷"II÷#û"û#û#ÍI÷#÷$÷"û$ÍÍû"÷#÷"÷"‹Ñ÷Å÷-‹wþéS°ø)ø¤Tü^Eøû9üEøûEüAøû=üEøû>üDøûAüTø^ûåü¤÷ÐÌø Ìü ÷êÏø Ìü ÷Ðø Ìü ÷Êø Êü ÷×ø Èü ÷âø¤‹ã÷nÓ÷ÎéØêö÷;ì÷¶ù…^S‚uO¦Eœ»¸’¦È«xWtRû;W2:ÈU濼 ±¬œg©zº†¢Îu’˜¨÷MæUÁûÚû‚7jshwg]q¢·¹­£à÷Kü?ü$3ø$‹ã÷nÙ÷¸Øäô÷gô÷Àù…û9.ûûÜ2÷÷Üç÷÷;åû>̳^&%c_JJb·ñð´¸Ì÷]üàü%3ø%ù#Ï÷6âñã÷çùgjg~jpˆ±=ûåâ÷¢œ£ž£«xYûdã÷†Ìk±G‹æ÷xã÷Wã¸ó+æ÷®ôôø§÷Üû·wûZ‚C\ž|¶Ò÷#û û¹DósìoûeGg`cûŒæ›÷1÷Å›û1æ÷Œû€ø“åûWû¤Ž¥Ž¨ûü ¹½¬É£÷÷ûx‹Ø÷‰×÷nÕ}ÿL€£Ûÿ3€Üÿÿó€ÿL€zÛõøŸøÕ÷Ö:Kû¸q÷¸;û¸\÷¸ýûa|û„ò|û‚v@rOkû~К÷1÷ešû1Ð÷1ýÊ÷Ö¥ÒûÖåüØû³Í Ù•÷t”÷?º÷ûºû‰\÷‰÷ 7vø÷èø÷hXøˆ÷Üûókû£8÷L´Â®÷ØŸ÷=÷Xüé͘›û1æX÷Æ ûnä÷*÷uùFû­ûv÷­ûýG ÷ÿ÷vûÎ÷ê  F“øÜØø9÷:% èJ ‹å÷â÷=çß÷÷|÷ ø|ùFü(ýF÷\÷0÷Ë÷0÷%%Ëû>;÷=÷©ûUû”åÅh3&Po36÷= ÷%÷Ú÷ ÷ø%ûXû]Þ"÷3ƒHìëÎ÷2“ßõ÷\÷X>ñû9—0Büq)”fÐ÷6÷<´Êé‘áé…´Lû<û6fF)‚g v÷gèøw´÷÷”÷ø1ùFx ÷ê ÷Ž÷Ü÷¼ ø,›û1æ÷Œ‹ãøîwµï÷ç÷ïøÂùF'÷‹ø˜‹ã3æøëwµï÷ç÷ï|øÂ÷Ü'¼÷‹øfí÷ŽùF÷¼ ÷D›û1æ÷1÷C‹ä÷Ÿâ÷‹wÚ÷÷ˆ÷÷WùFûýF÷g÷4÷Î÷4÷*#Íû?0ë4åÅg-!Pl4)÷Ÿ‹ã÷¡á÷.è÷÷÷…÷ ÷sùFût.÷üé÷_÷2÷Ì÷6÷*#Íû?6ç5æÅf-ûLo13÷¡‹á÷§Þ÷Šw¦õ÷K÷´õ÷ùF!ýF÷*÷/éÓ÷/÷"5Öû9aøL÷Š!ýFõü÷ýá·^1#[g7X÷§‹ß>vø Ü÷7ß÷–ï÷ö¼÷úùFû¥pü |~ûTwfnm¼Dͺª­›÷…Ÿ÷¾Û¼üòõ÷%æÎ÷4÷(8Ïû3™:ܳc+!bg<|÷ª‹à÷’Þ÷ w¯ñ÷ ñ÷õ÷üùF%û û ÷ %ýFñ÷ç÷ ûçó÷*ãÊ÷/÷ 7Êû0Œ—9ÜŠ´m/#bp:Š÷“÷ø¹÷W* ~æ÷zç÷kä¼÷ ÷öùTû=û÷¹ û~÷û÷Gòѱµ¸SÐmg]oA#:Ð÷5ƒ÷´çû²÷/—ÞÇíÀ¹zl¸ÄÍ·SO¦.~æ÷{å÷läø@÷ ÷žùT£ øùF÷W Ð Ö÷ }÷|÷÷y÷Tù‘! ï@ü43È/ ~æøŸäø÷øùFp÷u ø;ùF÷J ûŽ÷÷Œ÷PÓû R`ukh÷Y÷,~àXv÷Îâ÷nà}w´îÆõ÷?õ·øùTûXûûVƒOo÷µ(ýFî÷ÎÆ·û^¹û÷!÷ ¿÷÷}÷\÷û%6ȤKûfûerKNLuÌ÷e÷f¡ÊÊ v÷Ÿá÷áÈ÷ ÷{÷ø¥ùFû[ûE/Aû2³KÚgû3û·÷÷÷Ÿ÷ûŸ÷ûøðû)5\±ãຳë÷u ÷—øí÷,—ä÷J û,3xe6h¨6÷°ÖÆ÷)÷+÷PÓû S_smh}æøùwš÷÷î÷÷ø•ùF&­ûª û?ûJk`cls¥Ê÷|(û|Istp]mÄ÷=÷>¨õ¯÷%n:`û ûTûxÛ5äÉ­¯ËŸLž¬fÎëÒä÷u÷Ta÷ lÜ‹ä÷–âç×?÷8÷#÷÷W÷ Ü÷ÎøFTç÷"ì×û"Üãûì3ûÜ?÷ü¢÷<÷À û1ŠûíU÷–Á÷Á ~ãUv÷Éå÷nâ~w¬÷È÷¶øÁñ}rp~a5YÑ÷8…÷_åû^÷1•ÀÈܬ£„|¦¸Ò¤fg˜Qû'-!ûY|Mn÷¶ûýG÷÷Èȶûf”åû÷*˶œ¥° v÷¥ã÷ŒÜ‹w÷ëØøo÷ ûpùFû$ûpýF÷Ú÷¥½û¥ë÷¥¼û>ãèÓ÷ŒÓûŒŸv¡v÷­Ù÷™Ñ¢ð÷iÞ|øðû1ùFû$@ûßû÷ß&¼ýGð÷®ç|Kû­ìÅ÷­©û­Þ÷­¨ûÙÁ÷™Âû™ v÷Ë×÷yÕ÷Žïøgø?÷÷~ÐüGF÷û~DûüîÛ÷˹ûËï÷˹ÛûËîüøü÷vûûyŸv¡v÷Ë×÷{Ó˜ð÷pê|ø¯øDõ÷~ÐüFôû~ûH÷Ã&¼ýGð÷Ìì|EûËëÅ÷˲ûËê÷˲ÄûËìû$øþ,û{+÷{ûYvøœÙ÷oæà÷÷c÷ ÷Óù…÷÷_¾û9ûÝ^X÷ûÂü y÷c÷qäü50÷²û]ûsA÷ä¸i;;Qi(zûwZgGN¼Zíb´Ñ\¤pž¥¥ —è›÷žðÆ÷÷AÒû*ŒŒ ~å÷Ú÷ræ±÷ ÷³÷ øÆ÷íU÷ŠøÎøø® ÷Š÷ŒùÌØ ÷sûJ® ûWv÷_Ú^÷º ÷ Úç÷æÞ÷4~÷¶÷÷t÷t`÷ûû]û ûpût¹û÷ÚZzÜ÷Y÷Yšß¾½›8ûYûY|9X÷Pû®Þ¢ÊÈŸ÷Ûø¦7WüVVøV6¾Úü¤³}2idPv v÷öÚ÷5ë÷(÷øË÷x û•.<èûö÷÷ö÷æ ûmä÷)vøé÷ çÏ÷÷“÷÷õø^CUra`÷c÷©™çü+‡ ÷À÷ÈûµG ÷®÷Ó÷ ÷}Ö÷·w÷•á÷Kß|øÇæ3÷«ó÷Ô%5û·[÷·5û·[6÷·$óûÔû üôê÷ؼûØá÷Ø»éûØ£¼œû1ß|÷Æ ñ¼µä÷‹ä÷^ä÷ƒ×“ä‰÷*÷ ~@ø¹÷^ô?Ä,”~€÷m,;mRHÐ~@äÉf7=R[)DM¤¸XIMÂSÖi䄃0¿@” ~@mQ¿@† ~@÷¶÷'˜âà÷÷ ÷vå÷¯wÚ÷÷Êæ|ø®æûA÷«ÞÕ÷VûÑ¥¼í v÷Ôß÷²wÚ÷¶Á÷{÷)Á÷?£÷3ûÔ÷ûYø÷F÷Ôûû*û²t÷;Uû;`÷²ûýF÷÷Ô¶ v÷Ñå÷ Û;÷7ê÷Øøø÷S÷Ôû û>û¯B÷ òèÛ$ØÞûè8GØ;Ïü£÷÷ÑÔ÷BûÑ÷ v÷Ñä÷Sè÷ ÷÷»÷Ñ÷CûÑ÷ûgø÷U÷Ôû û>û°J÷°ûs.÷üé÷÷Ñ÷ ÷sê÷­w÷P |ø¥÷Üûû­ûv÷­û‡ ÷Î÷vûÎͼíûmß÷.vøä÷&ä¥ô÷ ô÷ô÷« ûÞýFôøí÷ üíôÌ÷ øé÷P xø¥÷Üü^‡ øè÷vüè͸›û1æx÷Æ }å÷§Û÷Kæ©÷÷ë÷ ñøÚ÷óKÉ+,KF&K£P°M€-IÖ÷V÷[ÔÑÞ»´zi·ÄйTW¦3û(ûûû~û}÷û÷:£¢Ž¡§d«b¬_ͼ;÷Û¿¶éæûs‰ ¬´²ŸoS:sS]nkÀx½ÆûŠÑsv÷fçDvùæ¿÷ ÷jâ^ø"€ܓĬ³²®SÒme_nAû9Õ÷S÷WâÓòÁºziµÇÓ¸SQ¤-û<û÷¹ ûh÷û÷,vÁhŸc÷¾^qNž÷ä ^¾o²[©÷ øé÷…÷pøÀøè—éü«-÷düèÍ÷K Røª ÷ú÷œ, v÷|Øøw÷ øáùFûû9ûÛû7÷Ûû÷bü(>÷û|÷÷|÷Ø'÷ øëwøæpø¤Ö ¥÷K ÷ ÷ èøw´÷÷”÷|ø¥÷Üûx ͼí v÷gé÷ƒw÷:w´÷òÈç÷ø1ùFûâuvmxcƒ÷€NûƒGh³Þ÷•ûû›ûÛ;÷˜1Èî«”¨›ª¡ûŸ÷ê  vøé÷|wÒ÷÷“÷÷øø^CUra`÷¿û‡ ÷À÷Èû}÷÷~÷Ó÷ ÷¥é÷|wÒ÷÷ˆ÷|ø·æ÷#÷ÓIWrdc÷¼û‡ ÷Á±«³¤ÄÚ¯`3û}˼í~à÷xß÷'w÷àŠßÀ÷÷sòÑûd”à!÷"Ô©°µ[ÊtkjuU÷û‚Ø÷Bv÷Èß÷'w÷àŠßÀ÷‰å÷òþ€Ñý€“ûKÍ$÷tWlodV=± ®î³®—©Ÿ¤¡[ÊtkjuUþ€÷øùF÷W ÷² åÜ÷•á÷¾ùŒ1büHj ûmä÷)v÷Äæ÷»wÒ÷÷‡÷øø÷C÷¾û û8û»5÷»û‡ ÷Ä÷Ø®d7ûG ÷{÷UÒûš‹ï.vø÷èø÷°øŠïøâûìkû£p÷L´Â®÷ØŸ÷=÷°üéË÷Uûmä÷)÷uùFû­ûv÷­û‡ ÷Î÷vüG ùv‹ï÷iì÷¬wÈ÷÷^÷øƒïøâûû¬û^÷¬û‡ ÷Í÷^ûÍË÷U‹æ÷ èøw´÷Ææõ÷ø1ùFx ÷ê ûÍüëûŒæ›÷1¥xæ‹ïø{òŸøæø¦ïjøâû >üb9øbûdýFò™÷ãŽë‰ïˆÃçüeðàøeˆSŠ-&œûäºgû1âá÷• FåÜ“øÜÜ÷¾ùŒ1÷üæ% ìJ  Fê÷ â÷Þ÷Tù‘! ˜üë% îJ ^ÑÜ÷÷÷ÓùŒ11û2*~ã÷xá÷wã®÷÷¾÷ ®÷á—~ã÷xá÷wãÈ÷®÷po u÷ ÷÷Mù‘! éüüD—÷² ê÷ Œá‹÷ú÷Tù‘! ôû+üMj ÷²È÷÷ o Q÷*÷ ù÷Où‘g úû N,;mRHÐù÷ú÷m}å÷ŠÚ÷Zæø8÷ ÷Ïø%~÷c÷\äü60÷µûdûaC÷á¾k96X\2Ca ¯YRH[ÂÇk÷÷4îè÷÷ CÕû.÷ ÷ ÜÒ÷s÷¯t÷ZøMùª m4ýª÷!“ ÷ ê÷Ò÷So T÷[÷Tù‘! l€ûåý‘÷!œ€“ éÈ÷±÷ lo m÷ ÷ ÷Tù‘! Ò÷.ü8&~å÷Ú÷ræ±÷ ÷³÷ øÆ÷íU~å÷Ú÷ræÈ÷±÷ mo m÷ ÷÷Tù‘! é÷.ü8U~æ÷{å÷läÇ÷÷o m÷ ú÷Eùg úûO£ ÷Ø ÷ Ü÷<÷¯÷ç øWùª ø:'N ÷Ø ê÷÷o ÷^ù‘! ÷@@N ÷Ø ™øÔ÷Kù£T÷+û§N  v÷gèøwê÷´÷`o [÷÷÷Hù‘! ùœ@x ÷ê ÷ ø‹ë÷ ÷pø®÷x ýFÒ÷K Mø‹‹á÷§Þ÷Šwê÷¦õ„÷Ç÷8÷…õõ÷Tù‘! ê€û§@!ýF÷*÷/éÓ÷/÷"5Öû9aøL÷Š!ýFõü÷ýá·^1#[g7X÷§ûmä÷æ÷›Ú÷5ë÷>÷W÷øøá÷x û•.<èûöôËSG ÷øK÷›÷æ ûmä÷æøëwøm÷ø˜Ö ­SG ÷ v÷ÛÜ÷®w øÃø÷Û÷CÜûH÷>÷®ûûûŒû÷Œû÷;û®ûA:÷BûMûÛ÷{÷.÷¹÷-û¹÷‹ä÷›â÷w²÷÷ˆ÷÷Â÷oùFûû,û:":û û)÷F÷-ä4P¬ëçÁµëéû›|ß8Þ÷¯Û÷–w”ñ÷1ð÷ð¾ø×ø&ŽadYûn^emz¦Àø±&û–`û:4û(~û!ÖEݱ¤ºª¾\¤¶qÃñÏÛ÷L½‰³ˆ²üûÉak­êö·ºÒµûh[sttg~ã÷eß÷€á÷˜÷ á÷øÑøûŽac`ûla^gvŸÁsC÷1æ©¿Åë÷/ÎûE15äñºj:4Yh2B7Ú×û50µÀ^è÷ÕÚ÷Q¸‰´ˆ²÷ ÷Uà÷áø÷ eæxøzæû÷eä¦ÏÉð÷/ÍûEû>5÷Eê¹j:4Yi2û*6÷ t÷Bû°µ´›û1æt÷Æ |ßø¬àçëáð÷ñøÞø%ŽadYûo^emy¦Àø±û¥wû©÷Ö ÀBØÊª¼ž÷¶™÷mÚüVûÌTÜñÐÛ÷L½‰³ˆ²|ß[v÷Íä÷´wµó÷ó÷ó¾øÝø$ŽadYûn^fmy¦Àø±#û´û÷´#~ýFó÷Í÷û2¾ûÎTÝóÐÛ÷L½‰³‡²÷"÷«÷÷Ò~2 ~áø è÷L÷÷4÷øËøûŽbc]û`^Uct¨Ñø=÷H—èür.÷>ü7ûÚLë÷òÚ÷N»‰³ˆ²÷²¾÷ *÷ð÷ÕùTèû%%?û9ÈZâ~ð,€?R"ûñ3÷;ôä®ÊÉKÉ^VMrC*R»Øàɰäõ˜äûè?O«ÑÌÄ®ÛÒÀtd¼ÇËðÄGA©*ûmä÷vø÷èø1÷÷/ùFkû£kû©jiVa»;÷ʳ¯÷Øž÷=÷1ý!G ùv’v®vøîãâÿ_€pødø÷÷Ó'3û2÷ûmˆˆŽwû©°÷Ö ÀB×ʪ¼ž÷¶š÷jÂæû~pûüïï÷ºóûºó v÷Šâ÷¤àµö÷$ïøèû7÷û÷3÷ß$+ûk÷Š<ÜûûýFö÷НÊÀ¥µ¯÷"ûÎûÀ÷ám÷¤­ϵa1#ZgJ‹â÷Hà^â÷eâœ÷÷-÷¼ø â÷p÷*âû*÷e÷L—âûàû'+9û2³NÖfûû·÷Üó÷ŸÂûŸ÷ÌâûÌ÷]L_²â๵Õ¬ˆ ÷ øêùFD  v÷Ñå÷w÷>wÖ÷÷ýøÐô÷M²Î#Çî÷*û H&ûÍeH÷L<û A÷¯ûýF÷÷ÑÕ÷VûÑ÷ûmÞ÷!v®vøä÷*àÛÿ_€ÿV€ð÷ ñ¿ø\ø[cn|ts÷¥û¥wû©ß÷Ö ÀB×Ê«¼÷¶š÷mÚ¿üñð÷åž  •£¬u\ûüYvvflx”˜vbJv§°xÂâÌÅõ÷ýà^É:ûmß÷.v÷Íägä÷w¤ó÷ò÷ôß÷« $ïû´û÷´#ýFó÷Í÷ûÍòßÌ‹ä÷–âèÕA÷7÷÷÷u÷ Ü÷ÌøF5è÷ìÕûÜäûì2;ÜAÛü£÷Z÷À û0‰ûí7÷–ß÷Á ÷ ÷÷ øÈøl÷($ÑûBûSýF÷÷Šß´±‘•¬Å-Ú@÷Ʊ¯ÈÝûû3÷¡âäÆg+_‚lxuKô<àû‡yw‰t¼ø÷$~à÷æà÷–wÊ÷ ÷ƒ÷ ÷çøƒESjSg˜÷²®á¨Ù¦¸¡·§_ÙShe{;qû3Waûûoûjë/÷ ÷îæ÷?÷.9çûcü;@_Ì÷ Ë«»¬Àͳ`û û VhH‹Ý÷6Ó÷&Ûî÷÷U÷1÷ôø,÷´ø×ž«²Äå2¼ûFMƒLüž÷gô÷÷¸÷Ø^·2•û÷BøÖ¯vXUewM.÷ ô¥¢¬ü4÷6ïÈÁyKGNH÷ ÷”÷” ÷ ø88ûgýf÷” ÷ ÷:÷ø:ù0û ûª÷¹øJ÷™˜å÷ ‹â÷ùß ä«÷· ÿ—€÷øŽ÷ëûúû>}ûGwU`eeûˆä›÷1÷Ó÷°û-ûˆĵž¿™÷KÛ÷)Ÿ ÷J÷x$ Ÿ ø$Pˆü{$ ³ñ÷Í÷]o S÷÷÷]ù! éûü4$ ÷³÷•á÷•h ~à÷6Ü÷#ßø÷1÷ è÷K÷Ï„:÷÷ ð© ÷ ä÷÷b÷\ø“ø¤ûœ¢l¸ ÷ ÷Üä÷÷b÷^÷¾ù1÷i!ûž¢n¸ ÷ ä÷÷b÷\øP÷ãûOûœ¢l¸ ‹é÷Þó‹w÷ÜÝ÷÷Wö¼÷±ù1÷cü°øFûûXü>–¹“ÜÜ÷nûü¤÷Ü÷Tø<…dƒ?/ûmÇ÷T ÷Ú ÷ewè÷èî ÷Ú ÷ewè÷ø%8û÷ýfî ’v®vøMâÿƒ€÷· ÷>÷x÷̸{ûaplYk»D󪾜÷‚“÷÷:xüM÷ vø:õ­ø¨ø¤ø¤û2ûï(÷ïûfü¤ñ–÷wŽÊчÉñûãêç÷ãˆDMŽN›ûxò ÷÷ø¤ûûkûZ÷ ÷Ze÷Áø²% vøMâä÷˜ø$÷ø¤÷à v ÷† ÷ìÚ- vøMâ÷ˆ÷ø¹ø¤ü€4÷OüM÷øM÷H÷>ø»ø¤0â÷ܼøŠ÷¾ù1÷‘!0ûWv÷_ÜøÝ÷[w«w¢ö÷å÷öï÷“ù…û™®pnšg!iûû=û<¹û묫œ®¤û“å—÷‡h¤©z¬ìº÷÷<÷=p÷ fj|fo÷÷û,û­¥š~o ûÇot|{s^yÂ÷!÷"Á¸÷p¶™Uû"û"wU`r{š¨v÷ǧ¡˜§ ÷º ¶ø–÷;÷÷l÷ûl÷ûR÷¯’  v÷2à÷±wÒ÷÷d÷ø‹ø¤ûû~À÷‹ãøLwÛ÷˜øŠ÷ë÷Àøè ÷ ø¤÷| øœ÷ ÷ë÷| øsè ‹ãøLwä÷˜ø“ø¤÷À÷2›û1ä÷1÷3‹Þ÷^Û÷7w÷÷÷\÷ ÷tø¤ûü¤÷f÷ ñ½÷÷IÎû;6à;á¨jH=asJ.÷^‹Þ÷]ÜÛÞ÷#÷÷J÷ ÷“ø¤ûy8÷ üQ÷A÷"ì¾÷÷1Áû0UÈ:Ù¶pD9ZvDM÷]‹Ù÷dÖ÷;w»ð÷&÷ºñ÷)ø¤È ‹ØEv÷¿ÖâÜÝÿb€ÿZ€î÷ ö¾øø¤û¯ûc~û\njdm±CëÀ®À•÷y÷ã¾üS÷÷ÝÇ÷÷@Âûš@Õ©oB8hsG{÷d‹Ù÷H×÷VwÄð÷î÷ õø ø¤(ûVû÷V&ü¤ð÷–÷û–÷÷ß»÷ ÷=½û›AÓ«sH>d}G~÷JÙ÷­Ó+~â÷1Ú÷&áø/÷÷ªø²[§÷? ÷÷ ”÷i÷÷y÷Tù! ÈlûIR• ~Ý[v÷wß÷)Ý}wºðÇó÷0ö·øø²û T1û!‚Oo÷m&ü¤ð÷wÇ·û"’¿)÷÷Á÷÷<÷?Sõû9ÇMûû}GKL|Ï÷÷›ÈÉ v÷YÙ÷BÚÖ÷ ÷Y÷÷Áø¤û&;N"K«[Çoûûr÷{ö÷Y÷ ûY÷ø¤û_û‘Ak§ÈÅ®¦ÓåûBûVv÷€÷:ÁØÙ÷ ÷]ùƒûIA>Õüè÷ø³§¸±½¾¤tQûì!fpGl´9÷¼É¼÷8÷æî[Å(MOoZa÷÷2Øû2÷/ ø£ø¤7 XÄò"w ‹Þ÷YÜñØ÷÷÷R÷ ÷„ù*ûû=>Ùüc÷K÷#é¿÷÷1Áû0Mñ÷ —ØûÐû˜Ù¶pE;YwEE÷Y~ÞZv÷wß;Ú÷*Ý}wÊòÄó›øIÑN^¹÷‡÷GÚûFí•®¿Î°¥~v¦¾Æ°b^ŸS«ûC+û}Pg÷m$ü¤ò÷wÄ›û'•×.÷¾¿¡³³WÅvrq{d v÷XÛ÷KÐ÷“âøc÷û_ø¤ûû`ü¤öÐ÷X½ûXâ÷X¾û4ÛÌ÷KÍûK v÷WÚ÷Nϱí÷eÙø“éû/ø¤ûAû’û÷’)ü¤í÷WäRûWèÀ÷WªûWÙ÷W®ûÚ½÷N¾ûN‹÷Àû«v÷qÚ÷.Õ÷Žðxør÷À0÷ ÷@Ãü2S÷ û@7 ûÀîÒ÷qËûqð÷qËÓûqíüøZ÷U˜+û.‹÷Á<Ú÷0Ò í÷ræxø¥÷ÁMñ÷?Ãü Sñû?ûG÷w)¸ü¤íx÷rð¸GûréxÆ÷r¯¸ûræx÷r®¸ÅûrêûÔø]÷;9û0ûZvø;Ú÷2â÷qwØ÷÷k÷ ø4p ûŠþ\°Òc už¢¥ —öœ÷ŸÞ¶óíH»ûO÷b÷7Ýü54÷ªûXû7A÷<¼¦y[U`zûzûwZeHM¼^äf‰ ~á÷1×÷*áÈ÷ ÷ˆ÷ ÷Áø²[ ÷’ ÷qÆ÷’ ÷‘ù*Ø ûý ÆûWv÷_ÓevøjÓ}w‰æ÷æÖ÷0~÷»÷÷<÷<]÷û Xûû9û?½!÷÷(û_÷›ÙÌ¢÷®âø 1QüVRøV.áü¤µx/`h3uÖû÷dX{È÷$÷$œÉ½½œNû$û%zNY v÷wÚ÷å÷A÷÷} ÷÷w÷çûmâ÷+v÷›àêàé÷÷V÷÷ý÷ðIVlag÷<÷ošàûî÷¹÷R´¬¯«À¸¦tNûW÷óNÄ1û1÷ˆ4â÷.Õ÷iw÷•á÷QÖ|ø¸â;÷Y÷÷ˆ%6ûi]÷i5ûi]9÷i"÷ûˆûû°ôå÷…¸û…á÷…·æû…°¼œû1Ö|÷ˆñ¼µß÷6Ü÷#ß÷‹×“äd÷1÷ ^@ø ÷0ÛG³@^€© ,„:÷~@Ú´qYW_i4ATŸ®WXG»eÏn燃0¿” ^@mQŸ† ~@÷¶^@÷ —ÞÄíû1÷ˆ4â÷*Ý÷ewè÷÷½ä|øšâû÷Y÷:÷ˆû ûûe.÷e÷` ÷æ÷-û°¼›û1ä|÷ˆ v÷„×÷hwè÷´»è÷÷„´û »÷ £÷ û„÷ û?÷°÷(÷ˆûûûhs÷[ûb÷hû÷Ú ÷ewÅØìw¬w÷÷öø÷°÷9÷ˆû ûûeB÷‹÷Øû÷úû~*<>ÚüÊ÷÷Ò÷-û÷ê÷Ú ÷Þ÷÷ø+÷°÷7÷ˆû ûûe7÷eûy8÷ üQ÷÷Ü÷+û÷‹â÷â÷kwÔ÷÷Z÷øƒ÷ëûûkûZ÷ ÷Zûvßè ‹â÷öâÜ÷˜ø‹÷ë÷à üMßè ûmß÷.v÷Þêà£õ÷õ÷ôøi÷ð÷±ûêü¤õøO÷üOõÉ~å÷eÖæå¿÷ íèòêøÄ÷læPÁ5/UL9^›^©Zƒ6X¿÷÷¿ÆÙ©¥„~£´Ú eb•\û+.ûû;û=ê#÷.¤¢Ž¡¨e­a±^Ç»j´o®tªÒ¶´ÕÕûZ¶¦®«saUv^^ssµ~°³ûŠÑsv÷|vøbåÞ÷ ÷Aâ|øn÷qdaxZ9O½÷÷ůߏ¶{o´¿ÑµXO¡Cû7+û û5û,Û#÷{¼ÀhŸd÷¾|qN¼÷ä ¿n²Z©Á”¾¡¯ª‹â÷öâ÷ˆ÷ø¬øM˜âü€4÷OüMß÷°>÷öûWvù|w÷‰÷÷‰ûl÷˜÷k÷\ø˜÷“ ÷\ü˜ûWv÷h×ø\w÷‰÷ø¿ø¤÷“ ÷Eü\=?ðûh÷˜÷[ð×=‹âs£øMwÿÏ€ÿ€°ø>÷ûR÷¯’ ÷p±Ê°L°÷°ûØ÷‹âÒà÷±wÈ÷÷d÷ø÷ëûû~Àßè  v÷2á÷°wÒ÷ÐÃÞ÷øø¤û~wvlzkƒ÷%Sû)]t¤Ä÷Zûûg(ÂOô’’‹Œ’CÃÝ«•¨š¡žûi÷ø¤ vø"á÷Ÿwå÷÷Y÷÷øøxJVm]g÷. ÷÷ÕòPÇ+‹â÷Ëá÷Ÿwß÷÷Y÷øâ÷~òPÇ+JVm]g÷. ßè ~à÷0×÷1Ü”ÝÃô÷có÷Éû>%û÷-û%–Ù+÷"Ðħ«²ZÊujl{YDVº÷ˆ÷ȘŒž÷lû‚Ø÷Av÷×÷1Ü”ÝÃô‡å÷ óû÷Éýû>%û÷-û•ûÈ1÷wXloeV=± ®î³¬–¨¡ZÊujl{YýDVº÷ˆ÷Èû˜Œžý÷l÷Í ö ÷³÷Ü÷•á÷¾ù1býh ûmâ÷+v÷sÝ÷swè÷÷T÷ø ÷Á÷!÷wûûûsI÷s÷` ÷sòÊ¥tKûVW÷Pë[Á5–‹é4vø[â÷÷· ÿ‹€÷¸øxéøFûï÷( ÷¸üMÌ÷T ûmâ÷+÷ø¤ûkûZ÷ ÷Zû°WøÔ‹é÷â÷kwã÷÷D÷ø|éøFûûkûD÷ ÷DûvË÷T ‹ââà÷¡wÒ÷÷d÷øø¤ûnlnWw_To£Ê÷JûûX)ÂOôËÅ¡¬±û"Bûˆä›÷1Ûø¤‹é÷èé³øÈøéløFûHûï?÷ïûfü¤ð–÷wŽÊшÕÞûïêÕ÷ïŠ8MNšûx¿gû1ÞÚ÷¿çÜÃ÷ ÷d÷÷¶ù1÷_ü$¿ñ÷Ã÷ So 8÷÷÷Lù! éèü—$³çÜÍ÷÷‰÷÷Çù1ûü*$ ~ß÷-×÷0áÈ÷÷“÷÷¸ø²˜~ß÷-×÷0áñ÷È÷do V÷÷÷Xù! éû %˜÷³÷÷ Œá‹÷ú÷Tù! ôû+ýh ~à÷6Ü÷#ßð÷÷ o 8÷1÷ ù÷Kùg ûlûÜ„:÷ù÷ ú© ûlã÷—Ù÷{ãø-÷ ÷½÷e÷j÷‚Üü53÷·ûcû}?éçÂj21V\7E_ ´]ONSÀËjö÷*ðè÷÷-Íû÷ ÷5Üä÷d÷¯e÷ZøMù1 ÷õû!û¢m¸ ÷ ÷÷ä÷Do E÷[÷Tù! œ€òûû¢l€¸ ~áøâñ÷÷»Vo W÷ ÷ ÷Tù! ò %%~á÷1×÷*áÈ÷ ÷ˆ÷ ÷Áø²[ ~á÷1×÷*áñ÷È÷ Xo W÷ ÷÷Uù! éû%[ ~â÷1Ú÷&áñ÷÷o P÷ú÷Qùg úû%[â÷5Ü÷2÷¯øøMù1 øû!0â÷÷÷o ÷Tù! ÷#û0÷>÷>ù*T÷ûÐ0 v÷2à÷±w÷÷Ò÷Eo F÷÷÷Gù! ù÷ûûû~À÷‹â÷óå÷$÷ø™øJ˜åüü¤ß÷°>÷ó‹Ù÷dÖ÷;w÷÷»ðt÷²÷O÷tñõ÷Tù! ú€û—ûÈ ûmâ÷â÷ Ú÷å÷A÷f÷ø÷} ôÖQW÷ø@÷ ÷çûmâ÷âøMwøW÷ø}âû÷X’ ÷÷÷l÷ûl®QW÷ v÷ŒÒ÷ew¶ø–ø÷Œ÷"Òû!÷!÷eûûûY ÷Yû÷!ûeûD÷%û=ûŒ÷÷÷v÷ûv÷u |ß9ÞøÞ÷Zw«w‘÷÷)ó÷ õ¯øá÷M p^blv§Ä·øÞo#—û•§uož`)Gû û6û<Æûô¸°£Ç¬¯P¦½pÃôÓ÷w oü(ûÈ`qÁ÷ ÷©Ç»© wmŸûŸXqrvn|á÷Þ÷>Ý÷„÷÷÷øÑøûŽad^ûi_Zin™¿n_ÛϦ²¸Õö<Åû)û 9÷ Ô²rPNfrH38î´@.¾Ãcä÷Ü÷w û1÷ˆ4âôß÷>Ý÷ö÷täxøZâ5÷Щ¬¹Ñö<Åû(û<9÷;Õ±rPNfrIû7÷+t÷ ûT¸´›û1ät÷ˆ|ßø áÿL€ÿb€ãô÷ õøÞ÷M m^ck{¨²øû¯zûm}ûStgilºH׿¬¹œ÷x•÷Þû´ûÐTÞïØ÷w |ß[v÷và÷mw°ô÷ó÷ õ¾øá÷M l^cj{¨²ø#ûmû÷m"~ü¤ô÷v÷C¾ûÐTÞïÙ÷w ~á÷'Ü÷-ãÌ÷ ÷n÷÷Óø²ûû $ûCûLç.÷)áÎ¥¨½÷—û_—:Þûpm„f=]Á÷÷ÉÅÙ»®{m´ÄϲYW¦8|áøâ÷0÷÷@÷ø¶øûŽcfXûZaVao§Ç÷®÷,˜âüC4÷.û§û ×Kò÷òÛ÷AÀ‰±ˆ±~à÷6Ü÷#ß×÷ 1÷ðø=÷Ï$èJe§·¼´¡ÒÀÄ|oº½Ê´S=¢<û+S0N¸gÑzðA‡Fa;ûôR÷#òت´ÀXÎiWSwB4_­¿½´¥Úóûmâ÷vø[âÿƒ€÷· ÷>÷÷Ì{ûaplYk»D󪾜÷‚“÷÷:üLŠPW»Œ’v®vøQÞÿY€ÿb€pøh÷¯÷÷‰'?ûN@÷Nûzûm°}ûStgilºH׿«¹÷x•÷ÔÚû;pûûªñå÷lçûlöûWv÷_àXvø]à}w¬ó÷-ñ¶øëû÷£®÷ ÷•!1ûm¶÷$ƒ_â/Vhp^l΄Å2ý|ó—÷‡i¥§y¸ÛËä÷$–¶ìûpÖû§ÓnsŸ­t÷¢°¤¦£­»žZû$û!jX_~ÞZv÷Y×^Ö÷,ÔIÍIÛ™ñ÷ó÷6í™Àøè÷ª“À÷8NïûiÀru†‚vûû?D*E¬^Æp%ûnóä÷Y²™ÀûÏ7öÒ뫯[Çncr_Reº÷ˆ÷”˜Œžû˜¤•À÷’¨¼½½£V!©ÀüÄ˰ªÌÅp\{LŠCwMi¨Åx÷æøŠD÷Ú Ý÷‹wç÷Øø÷°²ÄáZè¯É9ºâ÷û V;5½gMÞ[]F.÷e÷` ÷æ÷-û÷êûmß÷ v®v÷ÞéáÌíìõ÷ô¿øi÷ð÷±û¹{ûmß|ûStgil»HÖ¿­¹›÷x•÷ç¿üNõ÷ž ¡–©¯Ÿt`û›Zswfkz”—uaJv§±xÂéËÅ÷÷’äTÃ?ûmß÷÷Ëû¶v÷và]Þ÷Hw£ô÷ó÷ô¯€øi÷ðÇ€÷±#·€ûmû÷m"ü¤ô÷v÷ûvó¯€É‹Þ÷FÜÆÔB÷÷÷÷E÷ Ü÷Ï÷êFÆ÷ì–Ôû#ÜÁûìU>ÜBØü%÷7÷(ëÀ÷õ=Èû(û—P÷FÐÓ¯oRBYwGûWv÷_âøá}wÞ÷÷s÷ìø©÷÷‚[xoI÷<âû#ЂЀ‹ß÷2Ú÷Ù´í<á¹÷· ÿl€ñöøŽßøPûÀ}ûP‡Š‡‡h—z¨Äñ)$,µIízîy$lhmraû…á›÷1÷Á›û1á÷…ûžøôûûŒ”‹•Œ•÷ûžûa«¤©´ç÷‹Ü÷3×÷ÖÿN€‘ÿT€½Þÿÿó€ÿN€xÝõø•÷°á÷ˆ8Cûhr÷h9ûh\÷híûg~ûPò~ûU}iqkrû‚Ó˜÷1÷Z˜û1Ó÷1íÊ÷„£Úû„åü)Üû¶·•¹•÷G‘òº÷ûiû3\÷3‹â;vø[â÷÷· ÿ•€÷¸ø÷ëûù÷( ÷%¸üMàè ûnâ÷,÷ø¤ûkûZ÷kûüßW÷§÷Zûv÷ø¤ v÷Íì÷OèÂ÷÷K÷øöùFû•û¬ûK÷¬ûýF÷÷Í÷KûÍ÷øé÷ v÷vâ÷âÓ÷÷<÷øðø¤ûûkû<÷ ÷<ûv÷øM÷‹èø•ß÷÷÷I÷ø—÷ÜûüéûIø•ó–ßûç7÷üò÷ò›û1à÷Œ‹ã÷üÛ÷÷÷?÷ø‡÷ëûüLû?÷üîšÛûá;÷üT÷îœû1á÷ˆ÷> ÷Ø÷;kå øDø²5 ~æøŸäø÷øùFp F“øÜØø9÷:% èJ = ÷%Ü ^÷÷÷yøî*÷÷TëbŒŠøùF÷W × ÷Ú‹w—øÓ°øùFû$ûlýF÷ Ð÷:øæ÷:üæ÷{Cº øQ ‹ð÷]ë÷VíÏødø¢ùFü^)øOdûVûó+÷óÇû]üd&ød~åø¬æ±÷ ÷²÷ øÆ÷í&÷ ÷ ÷|÷ øÈømZ‹æø‘åÍøhø/÷ÎÊûj÷s÷ååüh0÷ƒû”ûƒû‘1øhæû寪 ÷ú÷œ,‹÷/ø÷,“÷÷ë0á÷÷÷y÷ðùF+<û:„=5û>ûBß3÷4†:ëÜ÷2áã÷B÷?;àû8’ì0Bü%fÆ÷÷´Àíá습VûûfO%†gŒ ‹÷Ü ±cä…è7÷oãû ä) Ôû 3÷pßäA±eÝ÷0÷F»Öê F“øÜØÇl ÷†ü % èJ ^÷÷ol ÷3* i El øýF¤ Zl øJ÷eé}w±ÁØmù\fûlÚ~¸Ø÷cøm­ ª û l ÷ûü>,‹÷Ü }w±cÒn÷{ ÷f>;Ð Ö÷ }÷|÷÷y÷Tù‘! ï@ü43È/  vùFwê÷÷÷{÷~÷÷y÷Vù‘! èWü‰, v÷Îê÷­wö÷ø÷Îêû¢÷­û‡ ÷Πvøèé¨è÷ ÷÷ è¨ùFû¨è÷J÷ üè÷øè÷ ûIè÷§÷ ÷N \Òˆû`÷­Kv¡vùæ±÷ â÷â÷ >øÆ÷í÷ûA2û'ûi^ûTÑû÷ožûX÷>÷Y÷§Ñ÷÷Qžûšû (_ä÷F÷G´åññ´1ûFûFb1%ûXvùÀêÉ÷ ÷x÷ øûm÷¼½½ÖÝO±û¸ûÀcÀ÷÷Ðë÷0÷ šêû4ûƒ%û-ûHûAÖ9÷ Róa©zf_erVq v÷¾å÷bë÷÷ø¦÷x ‡ ÷¾÷¶¢…‚£¨Üœln’Yû"÷b v÷Àë÷ºwÈøsø›ø ûÞ÷p÷ºûûqûºŸ+÷àûsûÀ÷ê÷r÷ÀŒ vùFwœøÊøÛû˜ùF(¬;û„üö÷÷Bø¯"ûüå‰Ý÷ çû ûmä÷çøêwÜ÷÷œ÷Ü÷šø@üêûI÷°÷p÷ÎûûoûÕ÷xüªSG ÷ ÷Š øÔø÷¨ ÷Š !ù\fûlÚ~¨Ø÷c˜øÇ<¨  vøûä}w¢wç÷÷÷v÷ ‚÷÷Wù‘! ÷9û. ÝÊ’{xsBhn4g,ûvªû#÷Üû÷fü?û›÷ ÷œÊ÷÷¿²š˜£–“‰‰“Š£÷G÷úùT+ C÷H ø?©÷á ¿÷ ÷ ÷$÷úùT+ ’÷T÷á ÷6÷$÷ ©x÷T F“øÜüÀ÷+ ÔîùW ÷Ö¯ èJ  v÷:å÷p÷j1哸ÜüÔ÷+ äÛùW!÷é¯ ØJ  F ÷A û4ù„ý÷+ Å->ÊK ÷­ûÊôÒûpùFû$ûpýF÷ »÷:£åâJ  F ÷A û:÷ûùŠÆ%_ ÉH ÷±ûÊôÑûpùFû$ûpýF÷ »÷:£åáJ  F ÷A ûùeýb÷+ ÅL>Ê÷ˆB ÷’÷àÒûpùFû$ûpýF÷ »÷:£åâJ  v÷:å÷d—÷å‹w w£wû÷ûùcãL`䀠 ÷Ž÷àè€ûpùFû$ûpýF÷ »÷:£åð€J  v÷:å÷÷H‘ÝVå÷Õ b÷Ð€ÛøÏ‽³®Ç¥Ñ€Lªmy}}vä€" ЀKâ€÷éü)% è€J ü8÷Ê  v÷:å÷÷H‘ÝUå÷Ñ _÷Ð€ÚøÐ‽³®Ç¥Ñ€Lªmy}}vä€" ЀKâ€÷êü*% è€J ûß÷• FwøøØî¬ ÷±ûÞ% èJ  FŽøáسl ÷šü % èJ  FáÝ“øÜÜ÷¾4 ÷üâ% ìJ  F÷ Ü÷2÷¯ÜøMùª ÷›ý% ìJ ûVÔ÷"F÷‘äìø9÷:% ôJ qüV ûVÔ÷"F¯÷åäîîùW ÷Ö¯ öJ qüV ÷_÷p÷j1å‹w›÷÷äçÛ÷ ó½$Én÷›˜•¡ç®p¦g÷é¯ ëJ qüV ûVÔ÷"F ÷A û1÷÷¯äã€->å€K ÷­ûÊôé€ûpùFû$ûpýF÷ »÷:£åñ€J qüV ûVÔ÷"F ÷A û:÷÷¸äã€%_ å€H ÷±ûÊôé€ûpùFû$ûpýF÷ »÷:£åñ€J qüV ûVÔ÷"F ÷A û÷÷äã€L>å€÷ˆB ÷’÷àé€ûpùFû$ûpýF÷ »÷:£åñ€J qüV ÷_÷d—÷å‹w w£wû÷÷‘äñÀL`òÀ  ÷Ž÷àôÀûpùFû$ûpýF÷ »÷:£åøÀJ qüV ÷_÷÷H‘ÝVå÷Õ b÷÷:äè ÛøÏñ ½³®Ç¥è Lªmy}}vò " è Kñ ÷éü)% ô`J ü8÷0 ø ý ÷_÷÷H‘ÝUå÷Ñ _÷÷=äè ÚøÐñ ½³®Ç¥è Lªmy}}vò " è Kñ ÷êü*% ô`J ûß÷. øüØ ^W÷±÷–ùW ÷n"*^C÷Å÷ƒùW!÷"*^wûu÷÷g÷hÜû6ùJã ä÷1÷*^wûz÷÷l÷hÜû:_ H ä÷1÷*^s£wûj÷÷\÷hÎû+ùJë ÒÖ÷câ÷*K*‹ã÷oâÑ—÷ãs£wûk÷÷]÷hçû+`÷‡]ûkÐzÉÖ÷cÑ÷&K*^÷÷·¬ ÷(õ*^÷÷ol ÷3* v÷Îê÷­w-÷±÷÷v÷lùW øPýW¤  ÷~ ÷v÷ÞY÷ î½$Én÷›˜•¡Þ÷ ÷ ûŸ÷÷g÷÷v÷Ïû`>×K øüp÷ç. ÷ û¤÷÷l÷÷v÷Ïûd_ ×H øüp÷ç. ÷s÷v÷ÞûU>î÷ˆB ø ý.¤  ÷f÷v÷ïûU`÷  øý.¤  ÷D ÷v÷ÔÀQøÏÄÀ½³®Ç¥ÒÀLªmy}}vÈÀ" ÔÀKÄÀøküÏ÷.¥ÀüÒÒÊ  ÷C ÷v÷ÔÀOøÐÄÀ½³®Ç¥ÒÀLªmy}}vÈÀ" ÔÀKÄÀømüÐ÷.¥ÀüzÓ• i ¬ ø ü„¤  i El øýF¤ ûVÔ÷"v÷Îê÷­wÒ÷ÏäÐ÷ø1÷.cü ûVÔ÷"v÷Îê÷­w-÷±÷ÏäÐ÷lùW øPýWºûVÔ÷"÷~ ÏäÐ÷ï€Y÷ ÷€½$Én÷›˜•¡p¦gøcýWºûVÔ÷"÷ ûŸ÷÷g÷ÏäÐ÷çÀû`>ëÀK øüp÷óÀ.cü ûVÔ÷"÷ û¤÷÷l÷ÏäÐ÷çÀûd_ ëÀH øüp÷óÀ.cü ûVÔ÷"÷sÏäÐ÷ï€ûU>÷€÷ˆB ø µ ûVÔ÷"÷fÏäÐ÷÷ÀûU`ûÀ  øµ ûVÔ÷"÷D ÏäÐ÷êpQøÏâp½³®Ç¥épLªmy}}väp" êpKâpøküÏ÷.ÒðüÒÒ0 ø˜ý ûVÔ÷"÷C ÏäÐ÷êpOøÐâp½³®Ç¥épLªmy}}väp" êpKâpømüÐ÷.ÒðüzÓ. øŽüØ ÷  ùW øšz÷W ÷  ‚ùW!ø™z÷W Ð wûd÷÷×÷h¸û%ùJã Èø7÷j÷W Ð wûj÷÷Ý÷h¸û*_ H Èø8÷j÷W Ð s£wû÷÷ò÷hœû@ùJë ¤Ö÷cÄøV£÷W ‹äø —÷ãs£wû€÷÷ó÷hÎû@`÷‡]ûkÐz’Ö÷c¢øR£÷W ‹ä÷¼÷H‘ÝXã÷Õ û2÷÷¤÷ €føÏ„€½³®Ç¥¢€Lªmy}}vˆ€"  €KÑ€øµ÷ ÷W ýûmÊ ‹ä÷½÷H‘ÝWã÷Ñ û6÷÷¨÷ €døÐ„€½³®Ç¥¢€Lªmy}}vˆ€"  €KÑ€ø·÷ ÷W üÄûl•´¬ øB÷V÷W Zl øJ÷eÐ ÍÝ÷ ÷¾4 ÷fI÷W ¹ éU÷h÷Ý”ùW ø½¢ é-÷÷ÝmùW!øä¢ é~÷A ûž÷÷EÁÆ9žý‘÷ñ ¦K Æø0ûûFb1%(_ä÷F÷G´åññ´1ûFé~÷A û£÷÷JÁÆ9žý•÷ñ!¦H Æø0ûûFb1%(_ä÷F÷G´åññ´1ûFé~÷A û€÷÷'ÁÆ9žýs÷ñ ¦÷ˆB ÆøûÕûFb1%(_ä÷F÷G´åññ´1ûF~åø—÷æ~w£wû÷÷(Áã9Ïýs÷ò!Ó  ãøûÕûFb1%(_ä÷F÷G´åññ´1ûF} Ь ø¢û+&é}w±ÁØYù\fûlÚ~¸Ø÷cø­  v÷Šã÷¡â2÷Å÷÷|÷ rùW!øáû~Z vøp÷j‹wû÷÷†÷¸L÷ ؽ$Én÷›˜•¡¸®p¦gø9üO, vùFw ÷A û­÷ø ÷œûm_ ¬H ÷åûhÌ, vød—÷R£wûÇ÷ø:÷hÜû‡`ä  øü&, vø¦ h¢“wûy÷÷ë÷h©!øÐɽ³®Ç¥¥Lªmy}}vÑ" ©KËødûÈ,üqø•ª |¬ ÷äû|,ª û l ÷ûü>, vùFwáÝ÷ ÷À4 Åü€, vùFw÷ Ü÷4÷¯û]÷÷ç øOùª è÷Zü¢,‹÷Ü V÷gcâ•ùW Ò÷¶-;‹÷Ü *÷“còjùW!Ò÷á-;÷… û ÷÷GA üÜ ¤€K ÷… û¥÷÷LA ü‘Ü!¤€H ÷… û÷÷&A ülÜ ¤€÷ˆB ‹ãø —÷æ~w£wû€÷÷'câ@…â€7÷oãû â@) á@û 3÷pßâ@A±eÝ÷0÷F»ÖêÎ@ülÝ!Ò@  ‹ã÷½÷H‘Ýcæ5Þ‡wû÷»uûÑa- ‰ " ¥ KÓ $ûNÊ ‹ã÷¾÷H‘Ýbæ6Þ‡wû"÷¿uûÓb- ‰ " ¥ KÓ ~ûN•‹÷Ü ±c䊬 ÷œ÷ é¼@ûFû0f9Aeè7÷oãû ä) Ôû 3÷pßäA±eÝ÷0÷F»Öê‹÷Ü }w±cÒZ÷{ ÷z>;÷±Î ÷Àøùv÷V÷gÎ ÷•ùW ï÷¶s÷*÷“Î ÿjùW!ï÷ásûVÔ÷ ÷– û ÷÷GÎ ãÀ÷Àøù)ÏÀüÜ ÓÀK ÷íý2 ûVÔ÷ ÷– û¥÷÷LÎ ãÀ÷Àøù)ÏÀü‘Ü!ÓÀH ÷íý2 ûVÔ÷ ÷– û÷÷&Î ãÀ÷Àøù)ÏÀülÜ ÓÀ÷ˆB ÷Ðýð ûVÔ÷ ãø —÷æ~w£wû€÷÷'Î ñà÷Àøù)çàülÝ!éà  ÷Ìýð ûVÔ÷ ã÷½÷H‘Ýcæ5Þ‡wû÷»Î èð÷Àøù)ÒðûÑa- äð" ÒðKéð$ûN0 øpý ûVÔ÷ ã÷¾÷H‘Ýbæ6Þ‡wû"÷¿Î èð÷Àøù)ÒðûÓb- äð" ÒðKéð~ûN. øfüØ ÍÐ÷ø²Å ÐZ X ûYv÷`â÷¯Þ÷zàØ÷÷^÷M÷ú÷øø)üášÆ¿í÷0Ôû û7=ûý÷œ÷k¶¼{¾ú÷íá÷÷+û²1•]ûàYe˜¦jøEÞ®³ÍüÇ´h@7^gQb8¹úíÅZ)/Q_DûVvùˆwÿà^¸ÿi Íø[ø±û,ü9j÷LM÷.KÞûcß0ÜûY»ûXn<Œ6­Gä—{ã‹Ì¨Ñ÷køƒ~áøéÞNwÅ÷ Q÷÷W÷ Ô÷Òù…Ìû=T2Q¤eÔfÔ.dJ;ûû%æû÷-÷,è÷÷$÷*IÏûÄÌ7­rš´°©¢Á·¯€lµ´ÁËÔ°^T£@mûÊ÷]«cûû]Q;;]Ê÷æ¨ÊÞ·œðø&÷~/û_vúáBÔô÷ ÷V÷ Øø¦ùxü ~5÷ÅÖŒ—¦û}û1)û ûûÓ\÷%VÔr¢l^eqUo¶A÷½ÁÄÙØU£û² °c§å¸÷ó÷÷k÷BÓ øø²& ~á÷˜Ø÷”âÈ÷÷÷÷Áù…û.5û"û„û‡àû!÷.÷-á÷%÷„÷‡7÷û.4ܳEûNû÷N´ÑÝ÷ûáûQ†cD;;bÒ÷Q†ë÷u÷÷uøL' ’v®÷º ¬wí÷XøSø±û}û˜˜÷Aû`·T¯oʃ²åf“sšg³û÷'÷]÷_hûú²û›O“OJûë÷÷Ý΃×wÃ’v¡vø±w÷Šw³ø§x÷wø¤¸ûOü™÷r÷'ø`x´ût¼û Ó,÷±=à[÷#T÷z`÷GJÏû@£|9÷z°c§4‹æEvø±w w¥ø¨X÷t÷÷^ø™û¤¨û+üWg÷WS÷@DÞ eXÜ@Õû{¶ûYû_vùá÷PÞOwå÷ ;÷÷S÷ ê÷úù…æû"K"<ÅfÎsêD~/Xûû(ò_÷3SÊv€l[cmXr¶A÷½ÂÄÙÚZ¨û¯û¹Y¡ìÔÁÀæö˜áûæA_ªÌǺ«Ø»¿~pµÚ¿Êê³RGŸ>e÷Áø²%“v­vøMâö÷÷3÷xøÉøMâüIXf‡|h¡:§”žŽ¬ŒüM÷øM÷3û¸/³aÝy¯ái–~ž¼÷µûWv÷_âøàß÷÷s÷ ÷Èø²§ ûYvù2åè÷ ÷Q÷ ÷óø²û+ #û8û#ÒR÷]æj €f_esUt¸A÷¼À¾ÙÛQ©(¯û ¸k§ê÷ ÍÄÜ¿®~p³¿ÑµTU>~áø á;Û„w÷»÷„÷ œøÊø¤ÌŽE)9û7/ûû8û>ã!÷+÷+ã÷÷9‰ŠéiËY­÷ƒûžü;bÆ÷¬÷2Ï­÷¯l¥T"ÌûcP<~åøâ÷k÷øšøMâûëR^†|b9—¹«Žµ¸û¹&ÌOñÿ™›§oÙ€qm„o\k¼÷½÷¤ øø¤(ûWv÷vvønÚ}w§ñ÷ê÷ôîø%ø²ûa:û!û‘1™rÊ÷ ÞØÞ®ö&pBp,û û(Í3÷+}ûaê—÷U÷#™äÜ÷Mî÷HYèû Š<À™SûûlM+}÷ˆãÌÅû[v¡vùŠw¡w³ø¡Xø÷J÷F÷éhû›ûû´XY÷$]ÚNÎûdØ@À=Òû=û[ü÷y÷)÷ؘ÷'ûÙ÷ ‰ ÷/ ø£ø¤7 XÄò"w ë÷u÷÷±¬ûBûü' ë÷÷÷÷z÷ƒ÷÷y÷Fù! èû=û`' ëä÷÷÷÷ˆ÷è÷ª÷\ô’èûAûÄ' ÷¤ ÷¿¬êû¤(â ÷÷÷: @o X÷÷ ÷Tù! òïû(â ÷÷÷: <÷ì÷T÷ò÷¸÷\ì’òëûl(e÷¿¬ûû–%÷/ ÷¿¬÷û¤7 XÄò"w ÍÐ÷©¬ûû–Å ÐZ X œð÷ϬpüÊ/Ó ÷¬Yû–&  v÷uæ÷uw÷÷ø£÷Ðûµ¤÷{¿y°$|™b–YEü÷÷u÷µûWvù$ã÷‡÷øÌø¤üMYpˆ~i8”¬ ²÷ý$÷˜ù÷i‹÷ûv­vø3÷‹wß÷÷^÷.ø÷,ø û Žûcü0’§”àÜ÷nûü¤÷V÷fø3…byûAR1±\Ýw®Ý.j›¼÷_ ø#·÷áÞ÷ Þ÷"÷ìÚ-—÷“÷f ÷á÷>÷"â·w÷ï÷f ûWv÷dÜOvøcâ÷»Í÷Í÷ ¾ø¯÷÷<7÷û.û.5ûû9û)Ì'÷ tûd÷˜÷W÷ £Íñ÷'ÞûƒûT:cÇ÷÷´ÇÜÛ³OûûcO:ûXvÌ÷ ÷b÷ )òÐø-øØC]†ûnûl@Qûû&á[÷gàÞpµ€abisRp·D÷»¿½ÖÝN¨(¬û³f¨ä꾡ñ¤Ðô¦Ò¦÷ ûXvøá÷^ã÷÷÷ÄøL÷jŒ™âûû MKûüÏ÷›÷õ÷*´¤…ƒ£¦×›mn“Yû2÷ Ĥ¥Á“vù”w×øTû©î,îàøøoû¼6ÐÉ÷Äï£É‘Ò( ‚S|[W$,ûU©7÷¾áÈJûR&rN…Dîv”Ûº¾òí÷[ûVv÷€vù‡wø?ïçù‡fCå[ÔXÃQûü¢ð÷høTžošm˜kû.ûúâï÷…’^[Wû~(y6ä~¢Ýž÷ó÷ßû&÷Wûµ÷ûmá÷#vø·w£wï÷÷H÷Nõ÷ øµÍjšœÁ÷ö)«ûsü1”·¡÷1ÇÜâe¼9Ÿh8¬|—zXûöìl÷sø1‚_vû2OÚS›h¬t2Zrvdix”˜sbFw¦´xÃïËÃ÷÷ìŠ~á÷ÂÇ÷ÞÐ÷÷Z÷>÷ ôøøG}|‰†xø÷°ÅÒÞÌbÐûûûû"ûžûtÊû÷;ô÷'à÷÷÷`ëûøh÷«Ÿyd:YWû Zo€÷PšÎÉÈôküé5nä÷AŒ§˜ž²¦“­Ù¢P-0`QC~á÷ÞÝ÷JáÒö2÷÷P÷ ìø²ø{c÷7y>òû$ôû;:)(ÓC÷%î‰û‰c8?ì_ŠoªÏ÷GûûJûÞPé÷<Ô÷!÷¦Œ­û‘ÝôJ^¨Ê¿¬±ÀϳUû—ûWvú[w®õõõ'é÷öìøÉ÷žô÷05çû•÷w!ûkû „-2û9û1â/÷ûpõ˜÷cì÷ “èä÷9ü<ˆ÷ ±ÈÕ’üB‘dÉ÷÷bûKøÓ„²NûûfNA‚~áÿv€ÿP€°ñ÷ æ÷ ñøßø¤üaEŠr‡lž@£’˜Ž£ŒpN{E<û7¿4ìÄ´°Õ?™µhÈëÁæ÷3ÛyÑpÈÊû ûa"~J\\Äò÷0}(-J^\}ÌôÑÊšÒ÷²Œ›C‘LE“v¤vø·w£wð÷÷H÷\øˆ÷,l÷ö)«ûrü1“·¡÷1Ç\âf¼9Ÿh8«|˜zXŠûöíl÷sø1‚_uû2Oœ4°[Ýw¯Ý\jš½ûYv÷„á÷ñàß÷÷r÷ ÷Þ/ ›p›ÕÕ\®¹xÀ÷Õ÷÷÷/;íû*û'?.ûEûûÅ\÷zè|™…™nð«{¿c§-™vø¹ѲTûû`HA`f¢¸rÜ÷¨Ðß÷† ÷ìÚ-Rw‚øKä‹w˜ø½ؘûlñ–¬ø:è‘Ö‹ÉÝãü ðïø‰/ŒPDšûmô_ø¤û/ü;øûûWvÙÙºâøà÷÷÷s÷ ÷ü~÷Ñ÷÷,÷Åû)@,ûCûàA=Õ=½ Ì÷+Ùû+ôd­¹xÂû÷Ÿ÷§ÐÝÖ±RûûbK>`f ±rÍß÷Ø÷Í5Nû¨tØZ X ÷÷Ww÷A“÷+ Ü÷‚ùÆ!™û¨nÜZ ØX Íc÷+ È÷QùÀã û?W~ ÷÷Qw÷AH÷+ Ô÷7ùÀ!H û)WnÔZ ØX Í÷+ È÷}ùÀë Ö÷cûgû†~ ÷Õ—ów÷Ao÷+ Ú÷^ùÁ!  ûLû†Ü#¼@ ÚZ ÜX ÷Ѧ ÷AÊ÷Ê÷òùž ÊK×$ûN0 ~)( ¶@ ×Z X ÷Ò¦ ÷A¼÷Ê÷æù‘ž ÊK×~ûN. ~f( ¶@ ×Z X ÍÐøPíûAÅ ÐZ X ÍÐ÷û8û.ûHÅ ÐZ X ÷÷"÷½÷hÒ÷ãùƽ³®Ç¥ÒLªmy}}vÊ" ÒKÆ8û( ¦@ ÆZ X ÷÷Ü÷AØ÷©6r:tØZ X ÷÷5Ü÷Am÷¯Ôø7ù1 ÷ûnÔZ ØX y ½÷åäì÷ø²( Ü@ ìZ 9 y ÷Lw÷Aåäî÷[÷ û,û*( Þ@ îZ 9 y ½÷åäì÷û8û.ûH( Ü@ ìZ 9 y ½÷ß÷û ä÷ ÷Í5Nû¨( Ú@ ìZ 'ê÷ý y ÷Ww÷A“÷^äî÷‚ùÆ!™û¨í#Ý@ îZ í9 y ½÷c÷Žää÷QùÀã û?Wê#Ú@ äZ ê9 y ÷Qw÷AH÷©äë÷7ùÀ!H û)Wí#Ý@ ëZ í9 y ½÷÷bää÷}ùÀë Ö÷cûgû†ê#Ú@ äZ ê9 y Õ—ów÷Ao÷‚äí÷^ùÁ!  ûLû†î€#Þ€@ íZ î€9 y Ѧ ÷AÊ÷&äå@÷òù- ë@" å@Kë€$ûN0 ~)( Û@@ ë€Z 'ë@÷ý y Ò¦ ÷A¼÷4äå@÷æù‘- ë@" å@Kë€~ûN. ~f( Û@@ ë€Z 'ë@÷ý y ÷"÷½÷åäé€÷ãù〽³®Ç¥é€Lªmy}}vå€" é€Kã€8û( Ó€@ ã€Z 9 œØ÷ô÷ó5¾üÜ÷8ìHf§·¼µ¡ÓÀÀr¶¿Ë²Q;›Cû)Z.Q°`Ùzô2]d; ñR÷ñÞ§³ÃTÐkZQwD8\¬À¾¬¤Ü~à÷6Ü÷#ß÷5÷° Œ÷+ ú÷¨ùÆ!÷üÜ‘œ\÷+ ä÷wùÀã Pûü/~à÷6Ü÷#ß÷/÷° A÷+ ò÷]ùÀ!H fûü‘œˆ÷÷y÷£ùÀë Ö÷c(üº/~à÷6Ü÷#ß³—ó÷° h÷+ ù÷„ùÁ!  Cüº÷8êHf§·¼µ¡ÓÀÀr¶¿Ë²Q;›Cû)Z.Q°`Ùzì2]d; ñR÷ñÞ§³ÃTÐkZQwD8\¬À¾¬¤Üœðø+P÷füu/œðø!8aü|/‚ø\á÷Ÿ Ó÷‹ô ø÷æ5ô§û¨& ‚ø\á÷5÷Ÿ‡÷×÷÷÷›ùÆ!òû¨MKnS]ú# ö÷‘ ‚ø\á÷Ÿ W÷÷÷÷ ÷jùÀã 9WMKnS]ô# ì÷‘ ‚ø\á÷/÷Ÿ<÷÷+÷÷÷PùÀ!H OWMKnS]ú# ö÷‘ ‚ø\á÷Ÿ ƒ÷Û÷÷ ÷–ùÀë Ö÷cûû†MKnS]ô# ì÷‘ ‚ø\á³—ó÷Ÿc÷÷ô û÷wùÁ!  ,û†MKnS]ý# û÷‘ ‚ø\᯦ ÷Ÿ ¾÷Ÿ÷ê€ø ù- ö€" ê€K÷€$ûN0 ö€×)& ‚ø\á°¦ ÷Ÿ °÷­÷ê€÷ÿù‘- ö€" ê€K÷€~ûN. ×f& Ó øP÷OûA& Ó ø8JûH& ‚ø\á÷÷æ÷÷[ô ó÷üùç½³®Ç¥óLªmy}}vë" óKç‘û& y÷Ÿ ÷[÷¼øø²& |û1ýt y÷*÷Ÿ÷[÷¾÷t÷ Lû*& ~û1ýt y÷Ÿ ÷[÷¼ø8JûH& |û1ýt y÷Ÿ Ó÷‹ô ¼÷æ5º§û¨& zû1ýt y÷5÷Ÿ‡÷×ô »÷›ùÆ!òû¨MKnS]½# »î[Å'}û1ýt y÷Ÿ W÷÷ô ¶÷jùÀã 9WMKnS]º# ¶î[Å'zû1ýt y÷/÷Ÿ<÷÷+ô »÷PùÀ!H OWMKnS]½# »î[Å'}û1ýt y÷Ÿ ƒ÷Ûô ¶÷–ùÀë Ö÷cûû†MKnS]º# ¶î[Å'zû1ýt y³—ó÷Ÿc÷÷÷½€÷wùÁ!  ,û†MKnS]¾€# ½€î[Å'~€û1ýt y¯¦ ÷Ÿ ¾÷Ÿ÷µ@ø ù- »@" µ@K»À$ûN0 »@×)& {@û1ýt y°¦ ÷Ÿ °÷­÷µ@÷ÿù‘- »@" µ@K»À~ûN. ×f& {@û1ýt y÷÷æ÷÷[÷¹€÷üù³€½³®Ç¥¹€Lªmy}}vµ€" ¹€K³€‘û& s€û1ýt ë÷u÷<÷+ Ð÷Õ5à+ü' ë÷Cw÷J÷7÷÷ç ÷ŠùÆ!èvü' ë÷÷gô à÷YùÀã Ðûbû.' ë÷=wö÷‚÷÷ç ÷?ùÀ!H èûLû.' ë÷F÷;ô à÷…ùÀë Ö÷cÐûŠûì' ëÁ—ów÷&÷[ô ø÷fùÁ!  ôûoûì' 뽦 ÷u÷'÷Ô÷úù- ì" ÔKê$ûN0 ì[û\' 뾦 ÷s÷ûô Ò÷îù‘- ê" ÒKì~ûN. ê[û' ë÷u÷ø PÊû§' ë÷u÷ø8ûQû®' ë÷÷÷uô ä÷ëù̽³®Ç¥äLªmy}}vÔ" äKÌû ûf' ëêÜ÷u÷÷±6OûK' ë÷!Ü÷$÷¯û^÷÷ç ø?ù1 èÜûy' ÷W÷f÷[ôû0~\÷ohnpgg¨o®Îèû>ûÄ' ÷Wø÷?ôû’$\÷o÷ èû>ûÄ' ëÞ÷Ò ÷÷w÷†÷ò÷îù - ê" òKíû9û=! êû@û?' ~áøâ÷»è÷¡÷ ø÷ã5èiû¨%~áøâ÷5w÷»œ÷í÷ ü÷˜ùÆ!´û¨ôû.5ûû9û?à!÷.÷-á÷÷<ü÷<7÷û.ô4Û³OûûcO::cÇ÷÷´ÇÜ~áøâ÷»l÷÷&÷ Ø÷gùÀã û$Wèû.5ûû9û?à!÷.÷-á÷÷<Ø÷<7÷û.è4Û³OûûcO::cÇ÷÷´ÇÜ~áøâ÷/w÷»Q÷÷A÷ ÷ ÷MùÀ!H ûWôû.5ûû9û?à!÷.÷-á÷÷<ì÷<7÷û.ô4Û³OûûcO::cÇ÷÷´ÇÜ~áøâ÷»˜÷ñ÷ ø÷“ùÀë Ö÷cûLû†èû.5ûû9û?à!÷.÷-á÷÷<ø÷<7÷û.è4Û³OûûcO::cÇ÷÷´ÇÜ~áøâ³—ów÷»x÷÷÷ ÷÷tùÁ!  û1û†úû.5ûû9û?à!÷.÷-á÷÷<ö÷<7÷û.ú4Û³OûûcO::cÇ÷÷´ÇÜ~áøâÈ÷ ÷†÷ ²÷ûA%~áøâÈ÷ ÷†÷ ¨ûûH%ûWv÷_âøàß÷ß÷—÷ ü÷ë5ôhû¨§ ûWv÷_âøà÷5wß÷“÷ã÷ þ÷ ùÆ!³û¨úû)@,ûCü|÷‚ ¹xÂ÷Ñ÷÷,þ÷Åú‰6Ö±RûûbK>`f ±r÷ ÷§ÐÝ~áø[÷¶ Ò÷¢÷ø÷ã5è÷Aû¶(â ÷W÷¶ †÷î÷÷ ÷˜ùÆ!÷Œû¶û-“/=û&J^Jô}ìó€à{ß~áø[÷¶ V÷÷'÷Ø÷gùÀã ÊIû-“/=û&J^Jè}Øó€à{ßâ ÷Q÷¶ ;÷÷B÷÷ ÷MùÀ!H àIû-“/=û&J^Jô}ìó€à{ß~áø[÷¶ ‚÷ò÷Ø÷“ùÀë Ö÷c¢û”û-“/=û&J^Jè}Øó€à{ßâ Õ—ó÷¶ b÷÷÷÷÷tùÁ!  ½û”û-“/=û&J^Jú}öó€à{ßâ Ѧ ÷: ½÷¶÷Õøù- í" ÕKï$ûN0 ÷qû(â Ò¦ ÷: ¯÷Ä÷Õ÷üù‘- í" ÕKï~ûN. ÷qX(~áø[wä÷÷q÷²÷àûO(~áø[wä÷÷q÷¨ÛûV(â ÷"÷ä÷÷q÷¹÷+û(â ÷Üä÷÷q÷÷¿6÷e,(â ÷5Ü÷: `÷¯x÷÷è øMù1 ô÷òû!(÷B ÷t÷[ìû0~\÷ohnpgg¨o®Îòîûl(÷B ø÷?ìû’$\÷o÷ òîûl(â ò÷Ò ä÷Co U÷ô€÷üù - ì€" ô€Këû9û=! ì€ì8(÷´ ÷è@÷Öó÷ ÷ã5÷T÷ŒôXÄò"ìw â ÷W÷ºÑ÷F÷Iú÷˜ùÆ!÷Ÿ÷ŒöXÄò"úw ÷´ ¡÷v÷I÷y÷gùÀã ÝI7 ìXÄò"ôw â ÷Q÷º†÷‘÷Iê÷MùÀ!H óI7 öXÄò"êw ÷´ Í÷J÷I÷y÷“ùÀë Ö÷cµ÷‹ ìXÄò"ôw â Õ—ó÷º­÷j÷Iý÷tùÁ!  Ð÷‹ ûXÄò"ýw â Ѧ ¡ó÷÷û÷Ý øù- í€" Õ€Kî€$ûN0 ÷„û7 í€XÄò"î€w â Ò¦ ¡ó÷÷û÷Ý ÷üù‘- í€" Õ€Kî€~ûN. ÷„X7 í€XÄò"î€w ~áø[w¡ó÷è÷ó²÷óûO7 XÄò"w ~áø[w¡ó÷è÷ó¨îûV7 XÄò"w â ÷"÷÷+ç÷¶Ͻ³®Ç¥çLªmy}}v×" çKÏ÷>û7 XÄò"w ¥ ¡ó÷÷9öø£ø¤7 XÄò"w úû/ýf ¥ ÷L÷º÷÷9û÷q÷ ðû87 XÄò"w ýû/ýf ¥ ¡ó÷÷9öø8îûV7 XÄò"w úû/ýf ¥ ¡ó÷ä2è@÷Öóó÷ã5÷T÷ŒõXÄò"ów ùû/ýf ¥ ÷W÷ºÑ÷F÷ü€÷˜ùÆ!÷Ÿ÷Œù€XÄò"ü€w ú€û/ýf ¥ ¡ó¡÷v÷9ù÷gùÀã ÝI7 óXÄò"ùw õû/ýf ¥ ÷Q÷º†÷‘÷ô€÷MùÀ!H óI7 ù€XÄò"ô€w ú€û/ýf ¥ ¡óÍ÷J÷9ù÷“ùÀë Ö÷cµ÷‹ óXÄò"ùw õû/ýf ¥ Õ—ó÷º­÷j÷þ@÷tùÁ!  Ð÷‹ üÀXÄò"þ@w ý@û/ýf ¥ Ѧ ¡ó÷÷û÷ê`øù- ö`" ê`K÷ $ûN0 ÷„û7 ö`XÄò"÷ w ö û/ýf ¥ Ò¦ ¡ó÷÷û÷ê`÷üù‘- ö`" ê`K÷ ~ûN. ÷„X7 ö`XÄò"÷ w ö û/ýf ¥ ÷"÷¡ó÷÷òÀ÷¶æÀ½³®Ç¥òÀLªmy}}vêÀ" òÀKæÀ÷>û7 XÄò"w ç@û/ýf ûVÔ÷Rä÷ÈûV ûVÔ÷Rä÷ÈûV ~à÷c÷÷dáÌ÷Ä÷Ã÷÷ÀùTû/;ûûxûyÛû÷/÷/Û÷÷y÷x;÷û/5Ù·?ûXûY_>=>^×÷Z÷V·ÙÙûdfongf§n°±§¨°¯o¨e‹ãøîw÷­÷øãøî(ûhû»=÷,èü{û<3ø5ã‹åø åø ÷÷¤ùT'HeGVÓS½´°¡Éѵ`F&L=û‹û‚6øA—åûÍ÷q÷\×í÷ ÷<âû ~ã÷‹Ý÷iâø÷-÷÷ç ÷¢ùT;DpQOÆK´¶µ ÅϾfHAShJa~9ÆèÚÂk2=U[5TT¡¹dFOJÁÞlâ÷+îç÷ ÷B¿5”ðØÇÆàê7Ûû v÷3âø^w÷ð÷ø®÷Š9÷L+€ûLû>÷Cø9-°ûZüg=÷²û3÷÷3Ý~ã÷°Ý÷9ß÷ö÷O÷ ø†ùFüûöÞ𝧓­Ì»g&.XU6T]¡¶dILS¿Ðiå÷*íë÷÷:Üûff„wd÷T÷s ”vøúãáøA÷‡÷¤ùÛüA3÷ÐûœüÚ÷(÷ &Çû!ûNû>¬_Ôe÷µ²¸ÎÄ÷‹ß÷³÷¿ ùSû%5û)ûß6÷ÏŒ½ª°µ}û$#AûE]¤:÷¢Î÷ ö÷¯÷8>õû3‚üH_²íïµ½Øå­Oû0ˆh`cpUŠ~ß÷'÷÷'ß¹÷Ú÷Ý÷÷¬ûLìû÷1÷1ì÷÷L÷L+÷û27ÙÍTû.û.IQ==IÄ÷/÷.ÍÂÙ‰û'gpohg¦o¯°¦§¯®p§f‹â÷´÷ø"âøs(ûeûº=÷+åûÿû:4ø0â‹åø"ãø÷÷²øÔ*FeDTÐSø¶ Å̶eQ?i`û¥ûP6ø9˜åû¸÷÷-¨Éçð7Ùûû ã÷…Ü÷[áø ÷-÷÷ç ÷§øÔ9HpTPÅL³¶µžÁѵhPGYfEc~:Äèß¼g:>Z\7R]Ÿ¹aJOM¿Ôkå÷-æä÷õIÀ3•ðØÂÂÛåAÙû¯àø5w÷÷öø¼÷ 1÷D,€ûDûK÷Dø5-±ûZüd?÷¾û$ö÷$åû ä÷¦Ý÷0à÷ö÷P÷ø‹øËüûîÞ™«§”®νg+2VV8Q_ µeINS¾Îhè÷(îë÷÷:Üûeh„yg÷I÷žs ørãÝø@ø’øÊü@3÷Îû„üËòi÷øõ÷(÷ &Èû!ûMû>®`Òd÷´²¸ÏÄ÷ß÷¢÷¿ øÔû%1ûûß1÷ŒÐŒ¾§¯¸…ûû;ûJ[¤9÷¢Ï÷ ÷÷”÷5>õû3‚û÷HŠ_·ââµÀØâ®Sû$Šh[cvUŠ~àø¶áÌ÷÷‹÷÷ÀùTû/;ûûxûyÛû÷/÷/Û÷÷y÷x;÷û/5°§ožûWü"‚´‡ÁÒ÷V¸ÙÚü¶iq•¢x÷Tø’dŽZLûY`>;~ßø9ß¹÷÷¸÷÷¬ûIíû÷0÷1ì÷÷L÷H)÷û07¢¡ˆƒûEû÷v¬€½Õ÷.ÎÂÚü9qt•w÷G÷û¢k˜X=û.HQ<û[÷km”v÷™ûU÷ ûU÷3 ¨7û[÷ ÷<è> ÷pðí ûÌ÷Ðû“û[÷= 61 û[÷1 Á8 Ç÷^û^° û[ï ¾E ;ȳvÏÍ÷$å÷æx÷Fû J÷?ŸãÃ÷ÝSÁ%6DaCøGÂk̳§˜­xnTUx"~ø÷÷ hs–©©¥›±x¸¢u]Œø€vqƒp…÷÷5m v÷™k ‹÷3 ÷r7…÷ ÷Û<è> ÷pðí ‹÷ JÌ÷Öß`ø*þ ÷ `ûûpT÷H Sß…÷= ÷1 …÷1 ÷‹8 —v÷š÷^‚° …ï ÷ˆE ˜v÷ ÷L Ä` ø÷ø¨mùFw÷™ø÷ ø÷3 Ï÷ÿ÷] ÷ôä>æØ÷ÇùL<Ô> ´÷p¸½”Ÿ¡°ØÀZ¯6ø=Ì÷fw÷Ðø=“÷ÿ÷‚÷KÞçç¼øVøqÑY¯Hst…ƒwÂ÷3“ÍûŽÌûJɼ“¢‘­Ÿ|mmvyagm–¢pW]e³¾{ÄåɳÕ÷ÿÍëÄewõÍ÷$å÷å¼øøü²Àžje“fûO?--ÂFöá˹ÓÜÐR«L¼_l|tpƨ¦À§ ‡ŸÜA0ªŸ}jnvwd^{§­‚¢¦£–§ù÷^÷ü° ÷ÿÍ÷w÷ Ç÷ó÷ øPøù„ò\ ìEòM øv÷L ø>` ÷É÷øpm÷Ï÷Õ÷™÷Ï÷ ÷Ï÷3 ø­7÷É÷ ù<è> ÷pðí øÌ÷Ðø“÷É÷= ø;1 ÷É÷1 øÆ8 øÌ÷^÷ư ÷Éï øÃE ø@÷L ø` ÷) ùFw÷"â÷"øk 3ü4÷§‹Ð÷QÐ÷ÿw÷ â÷Àç÷ øk ?ü4Løáv7…ÌܾÓË÷ÿw÷â÷Íä>æü÷øk >ü4Løfß<ú> ÷püí …ÌܾÓ˵Ð÷QÐ÷+ç÷¾ä>æý÷‡ÏûFü.Lþøeß<ý> ÷pþí ‹÷ JÌøÍw÷â÷šß¸÷øk @ü4Lxø²ûO¾¸÷ xûûpT÷H¸Sß‹÷ JÌ÷†÷] ÷^ä>æ÷;ß¶€÷1ùL<µ€> ­€÷p®€½”Ÿ¡°¶€ÀZ¯6&ü—Lm€øªûO¾­€÷ m€ûûpT÷H­€Sß÷à øwõâ÷:Þççõøk 3ü4Lùû1 ÷à »Ð÷QÐ÷$ç÷(Þçç÷€ÏûRü.Lùû1 ÷à µ÷] ÷Eä>æàÞççû`÷ùL<úà> öà÷p÷`½”Ÿ¡°û`ÀZ¯6"ü—Löàùû1 ÷à óÌ÷fw÷ ß÷*Þçç÷tø=“ûKûPLùû1 …ÍëÄ»Í÷ÿw÷âÈå÷å÷øk 0ü4Løš8 …ÍëĻͯ÷‚®Þçç|å÷å÷ ÷ÂøqÑY¯Hst…ƒwÂ÷3“ÍûŽù`ûJÉ÷ “¢‘­Ÿ|mmvyagm–¢pW]e³¾{ÄåɳÕû”û¼L÷`øœ8 …Í÷cÇ÷ÿw÷âêóö÷øk :ü4Løî÷% ù\ öEùM …Í÷cǯ÷] ÷Tä>æóö÷'ùL<õ> í÷pî½”Ÿ¡°öÀZ¯6ûü—Lí`øë÷% ì\ í`EìM …Í÷cǯ÷‚¦Þçç„óï÷ºøqÑY¯Hst…ƒwÂ÷3“ÍûŽóûJÉï“¢‘­Ÿ|mmvyagm–¢pW]e³¾{ÄåɳÕûžû¼Lï`øê÷% î\ ï`EîM …Í÷cÇ÷»Ï÷²óò÷@÷ü° MûjLìøê÷% ò\ ìEòM åø‚³øœ÷‰øÜ3 ÷Û·ø”·ù—Õ ÷‰÷U÷_÷U÷_÷ê÷t ÷h÷—÷>÷˜÷À÷h÷÷˜ ÷f÷G÷føDÔ û÷qûPø÷e÷K÷œ ÷À÷HXccYlšo¢{[û_âØ÷EŸ·”¥ª½c³W}÷(¤÷)¾÷)¿÷)¤Ç÷|÷\b­j´´¬¬´´j¬bbijb÷]÷|~÷+ø¼w÷t÷5 Ð÷üùF÷F à['Þ ÷ô÷,÷t÷+ÿÿ~€ÿl€÷œ ÷¿÷È ¶¬­´µj®` ºû.|üX÷ ÷2 ¹øøkøXBvû4è÷ ûq§÷h÷÷@~÷Uû@v÷_÷U`÷_ßUµ`Áµ¶Á Àa¶T`Ua`V÷š ÷[÷* Ø÷¾Gès÷d ûlæøq÷r ÷È µ­­´µi®aèÄû nûûKû48×>÷åÕ®ÏÄ@Ä[dYv]O÷® øm÷Ÿ÷3ÿi€Òÿi€÷;ømäœ÷Ÿû÷UûŸä›÷Ÿûøm÷Ÿÿ÷€ô÷œ ÷”ømãœ÷Ÿû÷ê÷H÷f÷G÷¿øžYdbZlûìŠ ÷Û·ø”÷Çû[vù'äÛø>÷Žûp÷”ù.Ýü>2÷Ëû‰ýûKç½øˆ½ûKøˆçüˆûkÚÄÚ½øˆøºüˆ<øˆRüˆ<øˆ vø¼÷,÷u÷5 à÷À÷˶¬­´¶j­`йû‘/{üW÷~åøo÷r ÷˵­­´¶i­aèÄûŽ nûûKžû58×?÷åÕ­ÎÅ@Å\dXu\P÷® ½ø‚³øœ÷‰ø´3  ÷2 ¹øøkøXBvû4è÷ ûq§÷h÷÷@Î÷G÷D÷H÷f÷G÷fø”Ô û÷qû»ø«÷dâ÷»ozû»ø«÷Äâ÷Äoz û÷x÷„ó6òèø]ùÙ‘ û÷x÷‚ò6ó÷è ÷#ùÙŽ û ÷Îû ÷û ÷Ê ùÆ÷Zû'úv÷÷÷{÷òÑ û'úvø÷ø÷òÒù€w÷hâ÷¿øtzù€w÷Àâ÷Àøtz û'÷x÷„ó6òèø]ùÏ‘ û'÷x÷‚ò6ó÷è ÷#ùÏŽ û÷Îû÷û÷Ê ù¼÷Zû1úv÷÷÷{÷èÑ û1úvø÷ø÷èÒ%ø«÷dâ÷»÷9z%ø«÷Äâ÷Ä÷9z ÷¡ø«÷hâ÷¿ø¬z÷¡ø«÷Àâ÷Àø¬z ÷g ÷Ÿç÷Q÷Ÿøìçüì÷Ÿçªø®ª÷Ÿø®çü®÷g÷Ÿ÷Ð ÷Ÿ÷§ ÷Ÿç÷!÷Ò÷!÷Ÿ÷ÒçûÒ÷Çç÷Q÷Çøìçüì÷g ÷Ç÷Ð ÷Ç÷§ ÷Çç÷!÷Ò÷!÷Ç÷ÒçûÒ÷w÷Ð ÷w÷§ ÷gø±wÒø^÷ÊÝÌ ø±wÒø^÷Z÷·Óø±÷›ø<à÷< ø±÷›÷È÷·÷KŸv÷÷:Ã÷9à÷É÷ƒ ÖÙ÷8±ž¢·g¯\^eg_÷r÷ƒ ÕÙ÷8¯ ¢·g¯]^eg_øe÷Øð÷9Å÷9÷žøµ¦¡x™´÷I@>û8ye†vv_®gº¹°¯·÷s¦~÷Ž ‡vv_®gº¸±¯·øh÷×÷÷9Ä÷:à÷ù\p—u}bûIÖØ÷7²‘ž¢¸g­]^ei^÷r÷ƒ ÕÙ÷7ž²ž¢¸f­]^ei^øe÷Ø÷h÷9÷œ ø øµ¦÷Ž †vv_¯g¹¹°¯·øe÷Ø÷r÷:÷œ ÷rùYp—už~aûJ÷ã Ÿ¡¸f®]]fh^Ÿv÷r÷:÷œ ÷rÉp—už}aûI÷ã ž¢·f¯]^eg_áøˆÒø^÷Ê÷Ì áøˆÒø^÷Z÷äÓø³÷›ø<÷÷< ø³÷›÷È÷ä÷Kø¥åø‚ü«úÂûÞøÜ3 ø®÷Y3 åùþ¸ðû÷ùr3 ü”º3 úp÷Y3 ˜vû¼ÿ]€ªù °ý™÷¡‰÷Ûü úy½Çû¬ù63 ÷ÛüŽúˆüŽ÷$÷Ûþ´èþ´÷$ø0bø;þä³ü<úû ä¨ò ²äû«õ¶ø‚øXÜB®S ¶÷7 ®S ¶vû1û­÷±÷Z÷ª÷{Övû4é¶ ÷4÷êÖvû4è¶÷! ûëûhû…÷h÷¢÷Tûh] ÷˜ û¶÷G÷q÷Gû¶øDÔ ø$lYdbZü$û÷qø$q÷˜ ýú÷G÷Á÷G÷Á÷GýúøDÔ øtlYdbZøtlYdbZþTû÷qøtqøtq÷­ü÷Hhü÷Rú¡÷#XúÑ÷— ~÷+ø¼wû”÷5 ÿæ€÷5 Ôû ùF÷F ø øX÷F èü,'Þ ÷üÞ ÷üúŠøøçü÷Êü¬/øuL!ü60÷ÿ÷Íø±æü{ÊõÐçõæõç÷wþçNøødçüöÛ÷8µ"ûDþ/ùÝL!ýž0ùhL!ý)/øò<ûßaó÷BúçýáÊõù¢æýlËõ÷ŸçüFùøüF÷Ÿøçüøp/øçü÷Ÿçþ¡Âþ¡÷ŸøOçüOø˜/øNçüNø—/øOçüO÷9 þÍ÷_ù ÷ ú-~Ž÷9 üuú[÷_ù ÷ ý»-ùºŽ÷9 þÍûù =H÷û«gžx­uþÂ-úÁmvprplûûÙH÷°÷ÑÀ÷ÑÔ÷ üuú\ø{÷ßý/ù÷†û£÷Ô÷ þÍ ÷*÷ßþ#/ú#÷†û£÷ÔøÉ÷Ž÷!ûx÷Ž÷qæ^çüuúZ÷èø2øZqnjc`Niï'6V=üD/øXÚ“ÁÊɱ'ê ÷ ûÞÁ÷„;ÛÌåÄÜ:÷‚ËÞ÷„ó»ø]ù†Þû0dû˜šûûηS »÷7 ·S »VÛvû4é» ÷4÷êÛvû4è»õ ÷þ}ûû~æd÷ÞGXšÅ‘÷L•ìa¯7™Ü™¸²éy÷LÄ…½›Ðýü–] ø8ûhû÷÷p ÷Ùd~`y41èµw^•û ã©ò ²ä÷Aõ¶øRùmäû¥û±û|®S ¶÷7 ®S ¶VÖvû4é¶ ÷4÷êÖvû4è¶õ ÷­ûª÷¥ãû;ù‹üjü}] Ìûh§÷h÷†ûh‹÷ ²Û÷hÜ÷1wüZù¾nøXBvû4è÷ ÷õŒÇøU-OüUütЧ÷h÷÷@ø3û„÷ -yû ‹ò ü¾úè÷÷=û÷=û³™÷²÷Ï éh ÷4÷¨÷¼àÛA§÷hýfûh] ÷òûhû±÷p ÷²÷Tûh] ‹ò û~¬÷Ah÷! úÖ ‹ò ù& ÷¡÷1-(vû1û¡÷1-(vû1û³AHõ ÷²÷6 éH ÷4÷ˆ÷¼àÛA§÷hø~ûhû§÷h÷÷òûhû±§÷h÷²÷T ‹ò ÷÷h÷{÷ò÷UË÷÷ ÷NÇû.:+dûû]™÷³ûÛ.÷/ÈÇû#÷Nö÷Tü:û] Ìûh§÷h÷T‡kˆigdŽf‘i~÷+û v÷4Û÷hÜ:÷‚>æ÷[÷* u€÷¾ùT2û`û`%i€S u€÷7 i€S u€ovû4è÷! ÷D÷³é£¹Ç·oZ%ûAŽû9iö¨÷÷Ky÷4Þ?Øûü}üd] ¶€øHûÎ÷vûKç÷÷2 ü‚ú¨û 0«÷àÛA÷p B^ûëù°çýø÷ß§÷h÷÷@ûKç÷÷2 ÷÷÷{÷ò÷UÇ÷÷ ÷NÇû5û(ûûuŒûUÚû÷ûþ¬«÷àÛA÷p B^ûëïÃÂû,÷-÷"÷cþ’û] ÷O÷—ûGçüG÷˜û˜ú(÷èûÅ÷O÷P÷›ÛøŸçüŸ÷;æõçüH÷˜û˜úCÐøø\üÊ/øÊàýÁûG÷ùÁÔ÷— ~÷Uû©÷U÷œ û©ß÷t ÷üY~÷Uý»úû÷ ¥þûüH÷t ÷üY~÷Uý°÷U÷œ ý°ß÷t ø$Yø$Y÷š ûó÷,÷Œ÷* ì÷(Gü;üÊ`jib`¬j¶µ­¬¶´i­aôø#q ÷˜ ææû·÷Hû&öÍ÷ Ø÷GîûEG÷³û¤Ô öü%û÷Y³c½¾²³½¼d³XYccZø%q~÷+¨æõç÷1æûó÷* vûGùYûŒüD-/ø¢!üá0øáúýqn÷v÷š ûv÷* æ÷+ÜûGìsé ÷š ûÁ÷+ûö÷¦÷* Ö÷ZùT8ElQR¾mI±-2AhHQÖQ»²½ ¹Ç·oZ%ûAŽû9iö¨÷÷‘µè÷ Ù×™±Ç·oZ%ûAŽû9iö¨÷÷Ky÷4Þ?Øûêü<é ÷ê÷Hû¶÷G÷q÷Gû]øžYdbZlø$YdbZlü$ûìŠ ø$Š ÷ÛüpúeüÇù*ù63 ÷üŽúWü5ÇúWøžüš^/øÇ!üú_0ù&÷þæMþÇúWøžüš^/øÇùçüÒ/øÒý!üú_0ù&ùæüÒ0øÒ÷Ûü\úd–ù9¸é3´ü<þäc÷ãùKø[û¨ç÷ÛüŽúˆü5!÷$ ÷Ûþ´èþ[Çøác÷$ ûKçüºúàüºûKúàçþà÷‰÷U÷`÷U÷`÷ê÷t ÷ê÷H÷l÷G÷ÅøžYdbZlûìŠ   e iU m a ûVvù(Þ÷â÷X÷øù…ûNF/K78ßü0ûhpFk³:÷ºÈ¿÷8ø!÷˜Þûʾž£Ä¦©†|¬­Øžad–U‹  {  e iU m a ‹  {  ÷‰÷U÷_÷U÷_÷ê÷t ÷) û÷3Ñæø÷3øÖæÐçõ÷@ èø2øøÀü2/÷Ô 0÷Ô /ø2ûlã÷…÷÷óƒûþ·^wsaptšji=y³¬€Âë̾öù”â÷…÷ø(ùë!RR ûY÷©¼›¥¼§¦†|¬­Ùžae•UL÷^ ‘÷m øQ÷^ ø–÷m ÷Ÿä÷Ží÷ðøÂì÷Y¤÷µ÷¥øÓÜøKøh¥ãרh´ ÷E ÷ ÷Mø–C ø‡çÄæ÷Äæ÷ÀøãûûûûûÕæ÷ÕÞÐÏÞÞÐG8ûÕæ÷Õ÷û÷ûžÜ Ò É È€W L M÷wé÷ øR÷wøî÷ ÷¡æòíø…÷üüûí÷&÷¼÷1÷Mø¾C ÷÷w÷³÷ ÷÷^ ÷[÷m Ð÷3÷›æ÷wä÷Ží÷ðøšìøˆ÷wù$÷ ø‡÷^ øÌ÷m øJ÷3ù æ÷Ÿä÷Ží÷ðøÂì÷Y¤÷µ÷¥øÓÜøKøh¥ãרh´ ÷E ÷ ÷Mø–C žÒ É È€W L  v÷Š÷÷Àù8÷s ü›÷ø›÷€ ø…êøcíðËøøc‡mŽ`•ûEó‘uøFüA¡…*÷E‚¸‰ ³“üü÷®é™øÐ÷Ãù÷ ü0-ø/Ž·êø^òðøÐBBøüc“v^‰ûE‘+øA¡¡øF#‘ûFˆ`m•ckù8÷Š÷÷öùûü›z¬w¡m¦û÷ IC÷Îû²÷Î÷²IÓûû mowvyi·ê²íø‡øÐüü•³©ˆ¶÷F#…¡üFøAu‘ëûE•^v‰cƒøø÷®é™øÐ÷½ùê ø/éü0ðø…ê²òø‡ËÔÔüø³ƒ ‰¸÷E”…ìüAuuüFó…•÷E޶‡©³÷®é-ù¨ùJ÷Ýû˜÷¸=Hç&¬gx­uüf­¡ž¬¯éð=Îûšû¸÷›û¹ÙÍ,òoªq¤l øflvprpl.$ÚIû]úÈ÷Š÷÷Àùÿ÷s ýŽz¬w m§û÷ ID÷Îû²÷Î÷²IÒûû mowvyhù÷€ ·øŠ¸÷=º÷<º÷ ÷É ü·û<ø· ÷Q·÷4·c·÷æ¸÷ û‘÷S÷QûSûQûS÷ü÷4ø÷3¸øŠ·÷=º÷<ºñ Ž_ü·öûSûQûS÷Qöø·÷Q·÷4·÷i¸÷æ·÷^Îûøû4üûûQ÷S”v÷=÷š÷ ù‚w÷=÷šñ ÷Q÷Œcù<÷÷Q÷Œcù<÷ üˆ÷P÷ ûÌüìûP÷¨ üˆø ÷ ûüìü ÷¨ üˆøÆ÷ ÉüìüÆ÷¨ üˆù‚÷ ÷Žüìý‚÷¨ üˆú=÷ øIüìþ=÷¨ üˆúù÷ ùüìþù÷¨ üˆ ÷ ùÀüìúà÷¨ üˆÜ÷¾ ú$÷¨ ÷Žù‚÷¾ ý‚÷¨ ùÀ÷P÷¾ ûP÷¨ ÷ ÖÖƒ@ú$Ö÷ ÷*÷*ƒû*ú$÷*÷ ÷u÷uƒûuú$÷uüˆÜ÷\ ú$÷Ç÷ ø ø ƒü ú$ø ÷ øVøVƒüVú$øV÷ ø¡ø¡ƒü¡ú$ø¡÷& ûÀú$÷Ç÷ ø¡Öøìƒ@ú$Öüˆù‚‹÷À÷À÷Ž÷üˆù‚÷À÷Àøì÷Ž÷÷Žù‚÷\ ý‚÷ÀüˆÜ÷\ ú$øìù‚ûÀÛ‹÷À‹÷À÷œ ÷ÀƒûÀý‚ ÷Àý‚÷ÀùƒÀûÀ÷ ÷À÷l ÷Àù‚÷Ç÷& üìý‚÷À÷‘÷Žù‚÷À÷Àøìú|÷Û‹÷À‹÷À÷èøìƒûÀý÷ÀÀûÀŠ÷÷& ûÀý‚ûÀý‚÷¨ üˆ÷e ½÷Ç ïú12üˆ@2üˆ@2üˆ@2üˆ@2üˆ@2üˆ@2üˆ@2üˆ@2üˆ@2üˆ×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×Š×ŠÖ‹½Š¾Š¾Š¾Š¾Š¾Š¾Š¾Š¾Š¾Š¾Š¾øºƒX AZÕX (AZ ÕX  AZ€ÕX"€AZÕX*AZÕY@T¼AHZ?D¼AZ?¼AZ?¼AZ?P¼A@Z?@¼AZ?¼AZ?¼AZ?P¼A@Z?@¼€@¾@Ö¼€@¾@@Ö¼€@@¾@PÖ¼€@¾@Ö¼€@¾@Ö¼€@¾× YÕ ½×(YÕ½× YÕ½×€YÕ€½× YÕ ½×(YÕ½× YÕ½×€YÕ€½× YÕ ½× YUUü%Š÷ ªªû]A÷b û+ª÷ªEU&A÷b û*AY¦÷ªŠªü%A÷b ÷)Œ÷b ÷*AYÕ÷)ªUûÁ;  ªûÁA÷b X÷ˆ ÷÷ UûÁ; ( ªü%; PUûÁ;   ªü%; @UûÁ; € ªü%; UûÁ;  ªü%@õ÷*AYÕ÷)÷ UŠA@ZÕû÷ ÷÷ˆ ( ªöPUûÁ@÷   ªöü=÷e ‹÷Ç ÷l ½Ö½@½Ö½@½Ö½@½Ö½@½Ö½@½Ö½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½ÖYÖ½üˆ:ûòû*:ûòû*:ûòû*:ûòû*:ûòû*:ûòû*:ûòû*:ûòû*: vø°w©ø°, ‹ÛøÛ©ÛøÛ, ;óá5#"56#"6àôóàáô‹ÛøÛ©ÛøÛ, ;óá5#"56#"6àôóàáô‹ÛøÛ©÷¢÷RÛ, ;óá5#"56#‹ÛøÛ©Û÷R÷; –÷$‘÷÷ ÷'÷–;ü"6àôóàáô‹÷¢÷RÛ©ÛøÛ, ;óá5#üóàáô‹Û÷R÷¢©ÛøÛ, ÷Rû¢"56#"6àô½÷;  vø°w÷À÷¢÷ÀÚ ÷)÷ ÷ ÷*÷V÷ û)‹÷¢ûvø`Û©Û÷R÷¢x, ;¸ûRûRxóàáô‹÷Æ÷&ß‹w©ß÷&÷ÆÞ, îc7û&û&›ÓÄÅÔ›ÛŠàyÌ>1"56#/@Ëáx÷v‹ß÷&÷Æ©ß÷&÷Æ, ;óá5#0J?6x÷vûvàž×Ìæcûzû&BšRÅ{Ô‹ß÷&÷Æ÷z÷%à, ;åØJ6ûuûv5žKÖçóàáô÷Mûz{BRQC|÷&‹÷Æ÷%à÷z÷&ß, c6ûu÷u5y>K1"6àôåËØáÛÓ{ÅR›Cû&‹ÛÛ÷pÛÛ©ÛÛ÷pÛÛ, ;óá5#"56#"6àôóàáô;NZYON¼ZÈǽ¼ÈÇY½O‹ÛÛÛÇÛÛÛ©ÛÛÛÇÛÛÛ, ;óá5#"56#"6àôóàáô;NZYON¼ZÈǽ¼ÈÇY½O;›™}{z}~{z~˜œ›˜™œ‹³ø`³©³ø`³b û¢øˆ÷ó#ûû#$ûû$ò÷÷òó÷;8HG98ÎHÞÝÏÎÞÝGÏ9÷¢÷*û*÷¢c³©³ø`³¸øÎÚ Xû¢³¸÷òó÷X÷ó#û³¸û¢÷*8HG9÷ÀÝGÏ9‹³c÷¢û*÷*©³ø`³XøÎ÷¢c¸û#$ûXû$ò÷c¸û¢ø°û ÷¢ûÀ8ÎHÞÝÏÎÞø`Û©Ûø÷S óá5#Û÷–‹÷© ;"56#"6àô;û*÷ û ÷*÷)÷ ÷ ÷*ø`Û©÷S ø`Ûø~ÛÛ ;óá5#Û÷–‹Û©Û÷÷¢;û*÷ û ÷*Û"6àô‹Ûø~ÛøÎ÷¢;"56#;÷)÷ ÷ ÷*÷û¢÷¢û¢÷¢÷¢÷û¢÷¢û¢÷¢÷¢û¢÷0÷0û0û0û1û1÷1´ vø°w÷"÷±÷ª ‹÷¢©ø°øÎ÷¢ü°û¢ø°‹Û÷÷© ü°û¢ø°;÷Rûü÷‹ÛøÛ÷"Û÷Û÷ª ;ø`üûø÷PøñøûíþÛù¾÷÷ÊÛ: ýF÷íÛ÷Q ÷P÷èøûí;÷ý¾Û÷ÊÛ: üöû;÷ë ÷ÊÛ: üöû;÷ý¾÷Ï÷Pøñøüö÷¯÷÷ÊÛ: üöû;øöÛ÷Q ÷ÊÛ: ú$÷Ï÷ÊÛ: üöû;÷ý¾Û÷´øñø÷› üˆÜ: ú$Û÷zÛÛÛ: ü¦û;÷;û;÷‡÷„÷˜‚ ÷ž ÷Mý¾Û÷4Ü;ú$Û÷„ø8øü=÷¿÷zÛÛÛè÷¸ ;÷;û;÷‡¶ú$Ûû4ù¾÷G üˆÜ÷" ­ø8øjü=;÷íþÛû4ù¾÷G ­Á ;ýFûí;ø=û4ù–;÷¨;÷¸÷ž ø=÷zÛÛÛ: ü¦û;÷;û;÷ë ÷zÛÛÛ: ú$Ûùn÷ÛûÛ÷ ÷ÊÛ÷" ÷U ­÷˜‚ ý–ø=Ûûí÷4ùF;üö÷Û÷c ­øñøjü=þ^Ûú÷í;÷*¶üö÷ÛûM÷Mû4÷› ­øñøj÷› ûí;÷/­÷˜‚ ú$Û÷4Ü;üö÷ÛûM÷Mû4÷*÷zÛÛÛ†øö÷øö¶üö÷ÛûMû4û4÷/÷zÛÛÛ: ü¦û;øöÛû÷û4÷› ¸÷ž øöÛ÷c ÷zÛÛÛ÷˜Û÷÷Â÷„øñøüö÷¿ù¾÷M¸ýFø=Û÷c ÷zÛÛÛ: ý–÷íÛûÛ÷ ÷zÛÛÛ÷i ÛûÛ÷÷„øñøü=þÛù¾Ûý¾Ûù¾÷M¸üöûM÷¿÷U ÷zÛÛÛ: ü¦û;÷;û;÷Ö÷ÛûÛ÷ ÷kø°¶ ø‹ÛøÛ©ÛøÛÛ ûzcbûyûz³c÷z÷y´³÷z÷yb´ûy;÷5¨nû5û6noû5û6o§÷6÷5§¨÷6‹ÛÛ÷pÛÛ©ÛÛ÷pÛ· ø÷À;ûpûp÷p‹÷¢÷"÷±÷«‹Û÷Û÷"Û÷Û÷«;÷Rûû÷‹ÛøÛ©÷¢÷R„ ûRø‹ÛøÛ©Û÷R÷¢b û¢ø`üûRø¶ ¶ ø‹Ûø÷)üû*øøüû*ø‹Û÷*÷Æ÷z÷*· ÷*÷z÷z;÷n‹Û÷*÷Æ÷z÷*„ û*÷zûz÷*÷*ûz÷n‹Û÷*÷Æ÷z÷*– û*ûzûzû*øøûz÷n‹Û÷*Û÷*÷)ûz÷zû*üøø÷n÷ü°ø°÷&ø°÷¢ß ÷¢ü°ß û¢ø°û¢÷&ø°÷¢ß û¢ø°û¢ß ø°ü°÷kø°÷&ø°÷k÷¦ üö;÷Mý¾÷„ù¾÷M÷ÊÛ÷Ë ü=;÷Mý¾÷„÷ÊÛà üöû;÷Mý¾À÷„ú ;÷¦ ü=þ÷„ù¾÷M÷ÊÛà üöÀ;þ ÷„ù¾÷MÛ÷Q ÷ÊÛ: üöû;÷Mý¾÷„ù¾÷MÛ÷Q ê÷˜Û÷…÷Âê÷˜Û÷â ÷‡å÷H ÷ÖÀÛê÷i åý– ÛýnÛùn÷÷„À÷c å÷H ÷Ö÷÷„À÷c ê†÷M÷„÷M÷HøjûMû„÷Mø=÷„ûMû„÷MüˆÜSü¦÷„û„û„ýn÷„üˆú÷Ë û„þ÷„ê÷V ÷…÷`ùn÷Mê÷V ÷ ê÷V øñøjü=þ^÷„ùn÷Mê†øö÷…øöê†÷í÷â ÷ë ÷ÊÛ†øö÷â ÷íÛ÷ ê÷˜÷íøñ÷¸ û„÷ë ÷ÊùFSýF÷„êS÷Høö÷„÷c êS÷Hø=÷ ÷˜Û¿ ýFÛý¾Ûù¾ÛêSý–ø=÷„÷c üˆÜSú$÷„êS÷H÷`÷Ä ÷c êS÷H÷`êSú$÷„÷Ä ÷c … û4ÛP÷aü¦û û„÷`÷•ÛP;÷z÷ˆ÷˜Û÷è÷è÷¸ `û„÷‡ù¾÷Ûû÷ÊÛá÷íÛ÷ ÷ÊÛá÷ýn÷Ï… ÷èøñøjü=`÷â ùn÷M… `^ ÷ž ÷M ;ø=÷é… `^ ÷ž ÷Mý¾÷„ ùn÷M÷é… û4ÛPÁ  û„÷¨Pû„÷Ö`ÛÛ÷MÛP÷c ÷µ ø{øæûOûOûO÷ORR÷OûOûOûOÄR÷O÷O÷OûOÄÄûO÷O÷O÷O÷µ ÷øæRRøCüCÄÄ÷µ ø{øæüCüCÄRøCøC÷ÊÛ†÷Û÷à÷˜øû;÷÷íÛû;÷üˆÜ: üöÛ;;ý¾Û÷ÊùF: ýFÛ÷ÊÛ†÷í÷è÷Î ÷´øñ÷¸ ;û;÷;÷ë ÷y ÷íøñ÷Î üˆúèø;þÛüˆÜ: üö;þ÷„ú;… û4ÛP÷aü¦`;÷â ùn÷MP÷„û÷z÷ˆ÷˜Û÷èøñ÷¸ `;û;÷ý¾Ûùn÷÷ÊÛ: üöû;÷;÷í÷„÷Q ÷ÊÛ: üöû;÷ý¾Ûùn÷÷„÷Q … ÷è÷ ÷•… `^  ÷Hø=`Û÷MÛûM… `^  ÷H÷`÷•… û4Û`Á Pû„÷ž `÷M;PÛýnÛùn÷ ÷é÷0üöûM÷¯÷Û÷c ÷ÊÛS÷ž øöÛ÷c ÷0üöûM÷¯Û÷ÊÛS÷ž ø=÷0ýFÛý¾Ûù¾÷Û÷c ÷ÊÛSýFø=Û÷c ÷z÷„à ü¦ûû„À÷`÷Ä  ÷Q À øö÷„÷Q ÷z÷„à ü¦ûû„À÷`ú^ ;À ÷ë ÷z÷„à ü¦À;þ^÷„÷Ä  ÷Q ÷“ý–÷í÷„÷Q ÷ÊÛS÷ž ÷Mý¾÷„÷U ÷ÊÛS÷ž ÷Mý¾÷„÷ÊÛSú$÷„÷U À ÷Ö÷÷„÷Q À ÷‡÷“ú$Ûùn÷÷„÷Q ´êÁÿF€ÿ˜€÷E‹w‹÷´ŸÚÎÛŸ²÷_€÷Áø¯.FJ3k“e kW¤y¶@÷¶Ö¥¿Ÿ«“±«ãFÌ/û…û@|„~€ƒƒ‘„~pxˆ}€z|™„˜š—™¡¾vÂo›¦†ƒªqøupƒlp†o{X¾œ}¢—†š—™’šœ}–yŽ~¦‘’““–„˜|gûΆ¢œztuzxtvyž¡¢œ ÷' žztuxxvtzž¡¢œœ¢B9–›rw’ni’h„¨Ÿ’œ¤–„ûûCd–t€~z€€}zœ˜sˆƒ‰……|•~›¡“©­Ѷ÷ˆµqaÐ`i“m¡›–˜š‘‰‘‡“™£›—œ™–z~†€t‹¿÷A¸¨çë¿©ÆÜëËëàÆÙ®ÿ9+à ÷4à Ìû“ÛÔ‚TÈ<÷}Ëû5B‚PO<Ô÷‡÷ MÔ€wÞ÷Þã;÷‰;áÖ@ø`ùQ×@)k-ûûª2îì«æ÷Ö@÷næ'Î@û(€8ûÈû˜ûn‡"øÐû ýFÞ÷Çæ@÷}÷†¦÷üÎ÷ ×@÷(ù­”[%#‚\ij‚ºóñ”»¬Ö€÷ü´û‰7÷‰ø£÷ÎÈør÷òùÝ÷¡ ÷ûs÷|²÷L­õ¯ô­žw÷D¼c³<±÷°÷-³÷.°÷±ëð÷Àùûfû=û?ûfûf÷=û?÷f÷f÷=÷?÷f÷fû=÷?ûfvc@ûLdb’d•¤Ç°Â¹¼ëðŒŽ‹³‹Š¸Z°T¤O@d€a…d‰&÷CebkZtTm–o˜s›¸¾È°Ðœ÷8ÐzÇf¸Xt{n~m€uÂj¼f´)°ûýû§zª}­}`‚]‰ZûŽÎ¢Ê¯¾øÁ°X¢LŽHûм‚¹}¶¬—ª™§œñðüAUµ·ƒ·‰"û-¸“µ˜³÷˜c“aŒ^û.ô·Œ¸”¶—ûþû7Z”\™ail|ozg¿tɈÏ÷Ô!_‰_„a~²ƒ¶‰¸÷ïŠ^ƒ`~d`—^“_Œõ÷ÖˆGtMfWoœlšj—™µ”ºŒ¼û{û ûL‡‡Œˆ]½fÁrDz–´’²Œ³²Šµ„²€rOfU^Y†‡Š‡ûV÷.¢T«Z±cF›N±^¾£›§˜©•÷ñ©¨~¢{^XOeF{°³¬¼¡Â‹Ìønw³ÑøÑ÷¿ø¯û—û{ûÈøœ÷Èû™÷ ÷Sû?ûhü÷h·Üµïµ÷¸÷=º÷<º÷ÀùÔûÀû¾÷=û«÷š÷«÷=÷É û®û<÷® ÷Öü<ûšû ÷¢ \Ö:û<Ü÷± ;ùŒù ù5ý(÷¥ ù(÷o øµ©wŸmûXû˜ ÷± øÙîù ù5üBûèûÕ÷èûØøB÷o øµ©wŸmûû˜ ÷± ;îø$ù5üB÷¥ øB÷è÷Øü÷a˜ ±Ò÷¾÷Ã÷Ö@Ç÷ÅyÅÕÅyÅÕÎpÎéÈý0ù#ù ý<÷Äüƒ÷‰ù<÷o øƒ©wŸmüÔ@d÷ŠdqP÷Šd÷§–”‚€ûˆ€‚‚€@ U€‚”–÷–‚”€zÀ€‚”–Õ–””–ü/û>d÷Šdè°÷Šd÷&û9–”‚€A€‚‚€üH€‚”–Õ–””–÷Q·÷4¸÷ ·÷s¸ò¸÷<¹øØù‚û3÷Äûš$÷Bû¾û¿÷¾û¾÷B÷Ì÷o øa©wŸm_ümûýûûQ÷S÷Q÷Sû÷U÷Í|â÷iÝ÷‹ãº÷-÷÷è ÷¶|ÛÒ¦ÅÇPËb`avQGX°ÎÕî̵˜ÝPðyOP6,ß;÷|åø åÐ÷÷´|ïαÏÀCÃYbfuMEa¶ÐðÊÙ÷‹÷‚àüA1÷Íûqû\?)û ûÚ4÷ Q  vøFç÷‰õ÷ó÷E v÷/ç÷Jç÷‰õ÷óò~à÷¥Û÷ZÛüŠ÷¯ À÷¯ ö€÷’ø=í€÷ÆUTœGû =@0_™c­oûÛ÷ÆUTœGû =@0G­Ràvˆö€)uSK!÷' ÷cjuYI÷' ÛÛý?ûÊ÷1ïøˆûz÷1ï$ú#û|ò÷•òûù¼$þ#ò÷üú#$þ#ò3ù´úÛéøé÷îéû9ù\-ý´éø`ù´-ý´éøLù´Ê÷þLò÷‹òýå÷³ ÷òùÐ$ýÐòúøÃý^/ù^!ý^0ù^3ù´ý’é÷Åéý4ù\-ý´éø#ù´Ê÷ûôòû÷³ ù$øÃüŽ/øŽ!üŽ0øŽ3ù´ûÑéûsù\Ê÷ü}úF{ø\ûL÷Å÷¡ ÷@ûÆø¬çü¬ûµø¬æü¬Eôuvü4÷ÜÔ÷÷xÜù @¼<¤;“÷Bûû~H11-ÊO÷a¸û·LŠT–!Éxû¸ã[¸~æŠ5Ôå÷›á÷÷ ÷ ûÖû°÷hº†Óq÷C÷Û ûœû2jûø÷Šìý~Ó« ÷ŸäûÀíø&íû^÷.ûY2÷Yû^í÷Ÿäýæíø&íø&íû÷.ü&÷^÷2÷^ø&û^í˜v÷§äûÀíªù °ý4÷Šì ÷­ü÷H(ü÷Rû&¡üÊ/øÊú¡ç÷#Hû&Ñ÷— ú¡æ÷— ÷üúŠøø\þŠ/úŠ!þŠ0úŠÐçõ÷@ þçNøøÀù²/N!ù²0N!ù²/NÖþÒV÷‘Úú¦/¡÷žú_0Z» Öüzú’÷‘Úý–/ùÝ÷žýÝ0ù–» ÖþÒ$9ÚþŸ/úæ÷žþæ0úŸ» ÷ÑÔÆ ÖþƒÊþƒø\/úŒ÷m÷ƒ=ÍûSûiøL÷@jûx÷Ž÷x÷Žú6ûÃ0úX÷SûkÙÎûm÷ƒ÷þçNøøçý1÷ÊýØ/ù¡L!ýb0ù+÷ÍùÝæý§Êõ÷ ü{ú\øu÷ûý÷R ù÷9 þÇ÷\ù EO÷û¬gžx­uþÚû…÷¢÷]÷…÷¢úÙmvprolûûÑO÷°÷Ñø¯wûºøøû”¶ø»÷‰çü»÷‰e5øiûaüiûaøÒŠüºû†±5øº÷‰ÖþÈ÷_ÚþÊû-÷@ûqÞ ÷9 üzú[û_ù ê ùºéý»ð÷,û÷oªp¤m ~éúð÷9 þÒ$÷_ù ÷ û­¡žž¬¯÷÷=Λ âŽ÷9 þÐøoøÇ=Îû…û¢þÚ­¡žž¬¯÷÷EÇû°ûÑ÷°ûÑÑÇû÷oªp¤m úÙ÷…û¢÷Ô˜v÷§ä÷\ím™ ÷Üãì ˜v÷§äûòíüØ™ øÅ÷°ý4÷Šì Æ ÖûVøzøçú¦ Zæú_[À»ÀÖûˆ÷‘Úûp » ú-V[À»À÷žÖþÒþ÷–[À»À±÷H÷Y<Îû-û@þÊ úÊ÷-ûAÚÎûH÷Ypù;üiú?ù üiû¶*øiû¸øj÷¸ìüjû¦ü ÷uø ÷vø ûv¯ø¾üjúprË ÷,ûx÷Ž÷x÷Ž÷—Îû°ûÑ÷°ûÑÙÎû÷pªp¤m úÁéþ­¡žž«¯÷÷ÖþÒ$ýiøÅ÷!ûx÷ŽŸÀçþŸ úŸæþæ[À»À¯ø¾þÐüÓË ø]ÞüQûy+øRûyµßü÷Uø÷Vœv÷sç“ç/íü‘úD÷è ÷•ø/Ø÷Ù L}õûû‘=‰7¢© ¦¤§ª÷÷=ξ yŸ}š|˜”ï”ÔÅè˘'÷÷˜ïË®®g_ŸãµËs:ÍB÷qæ”æþŸ`ý ¥øùÜW8÷Û çàû㫾÷ƒû^ȸøcø_wggiØK~ïûû~'LK~ïûûƒ'JK~ïûû~'LRÑ—-š˜™šžŸ÷÷=Λ ¢„׊B÷÷Þ ÷”èÌÌ–(÷÷Þ ¸ÓÝÍË¢û2ú^ü›úcøùÀ÷# øUú5û2ú^þŸ2ù9¸é3´÷# ÷ýùø[û¨ç/ÚiØ÷Sæ”æ_÷­ o€÷±ùTTû%‡4=QIjûucZqnjcNiï'w€±¯€ãºÏÒ­ž³¨ì¾ÃÏÈ÷ ‹²÷B­ûûZ÷ä÷Œ o€÷¤¯€÷£o€÷qS÷VûŽˆüå÷”Ÿ›‡‚÷Ÿç^æüyúZ`ü2÷|¼¥¨¬³ È­'ïà•ÀÙøDçüX<ƒULMeï,`3]GDh÷;æÃë–ëüùn°û+ø™ûH÷ü÷  ù ÷Fü<÷ûo8 ù„÷A ük÷ê`ükøúÌm÷÷?4´ÙûJÊk ÷÷>5· øæ÷;üm÷îû›ùCûû¸X÷Ý÷9·¾ ùPwÒwüm÷îû?ùƒû9ûÝ^X÷ûÓ÷÷ øßÝü^÷ÐûÁøßåÈÂØ“F™c~ms÷Å £³~F}>“ÆTå øÈÆ÷Çü:ÒðÒûÀù«ï ù÷üm÷ïû†ù0½³®Ç¥Lªmy}}vP" K ùÜüM÷¯û2ù  ù ÷jük÷êû¹ù*Ø  ø²÷{ü!÷÷œ ûâù™  øÇ÷{ü÷÷œ ûÃøÇ÷ ûÀ÷{ûý÷÷œ û¾F  û’ÎØ÷ ûòÖ“ä÷ç ûŸû)pu€hus’•wmQ† à÷ÑEû ðë„k ÷«Øüv÷ÿû ÷«Øûÿ> ÷«Øýù%¨÷«Øý%> ûÀ÷{ûý÷÷œ û¾F ù„w÷x÷÷¸ù„gophu–y›q"Ȳ۟³’žž®o¥gø;÷Ÿ÷ ÷û÷œ ÷ ø;÷4 ÚûŸ÷4 ù;Ü÷2÷¯øMù; ÷;ù ÷F÷D÷¨ùÜ÷"÷Ï÷¿6ùw÷÷îø@p — ù÷E÷÷î¡ù÷÷o ÷Tù! ù÷!÷v÷'÷¿Ä ù÷K÷D÷²ù ÷j÷÷ê÷ù*Tù1Ü÷2÷¯øMù1 û‚Ø÷Jv÷Qåø²ûeE[7=± ®î³øøÆ÷Ç÷FÒðÒ÷Àîù÷÷÷ï÷¶0½³®Ç¥Lªmy}}vP" KùFw¬w÷‡÷`÷¥ùS÷àÊ÷Zù†÷>÷D÷÷ùˆÝ÷#÷Ï÷¿4 ù…÷;÷÷îøAN— ùˆ÷;÷÷î÷ä?ù‘÷÷o ÷Uù‘! ù“÷!÷w÷'÷Àú Ëù†÷@÷F÷‹÷yœ ùƒ÷j÷÷ê÷ù£TùªÜ÷3÷¯øNùª ùqÆ÷Ç÷GÒðÒ÷ÁúTïù—ÝhÞ÷÷ï÷è÷ú± `"  KøÖ÷i÷a÷R÷Èù«ç ùp÷a÷a÷S÷ÉÇ  ù÷ün÷ïû‡ù0½³®Ç¥Lªmy}}vP" K ûVÔü.äû¸ûV øå÷z÷u÷+÷š¬ùFw÷r÷0÷—l øý÷÷÷ì÷÷¸÷\’øß÷{÷ƒ÷÷œ ÷Â5øÞ÷{÷ƒ÷÷œ ÷ÂùÅ ùSw÷~÷÷œ ÷¾ùÆ!øÕ÷÷*÷÷œ ÷iùÀã ùMw÷%÷÷œ ÷eùÀ!H øÕ÷÷*÷÷œ ÷iùÀë Ö÷cøÚ—ów÷%÷+ à÷eùÁ!  øÖ¦ ÷|÷P÷õù- °" PK°$ûNÊ ø×¦ ÷}÷P÷øù‘- °" PK°~ûN•øý÷÷÷æ÷÷t÷[û0~\÷ohnpgg¨o®Îøý÷÷÷æ÷ø÷?û’$\÷o÷ ø÷÷Ò ÷o Ø÷üù - ¸" ØK¸û9û=! ùHw÷B÷÷q÷ ù ÷F÷D÷¨ù÷÷÷ï÷¶0½³®Ç¥Lªmy}}vP" Køw÷y÷o÷0÷æ¬ ùFw÷r÷0÷—l ùÜ÷#÷Ï÷¿ù1ùŒÜ÷"÷Ï÷¾ùŒ1  ÷Ì ç÷WÆ[ÿ€ÿ€ y”‚÷û w wò¶ ¶tÁø`÷~÷Ý®…Ëg¸¸+ÈÍ_÷<¬ ʳ ÷é ÷¬ ¸+È÷¥÷é ÷€¬ È÷I ¨‹¨÷ ”‘ŠŠŒ‰‡¨+Ä÷ ÷é ÷C¬ Úä ÷é ÷j Ü Øf÷é f ¸+Èw‰z‡w…¨CÈ󇨋È÷£ ¨CÈ÷, ÷é ÷t© È÷¡÷é ÷X ¨Ȫzˆ÷é j…h{y{ª È÷þ¦÷d ’v¨v¤v÷²ºÿ­€ÿ €‰Ÿÿÿø€ÿ_€/w÷%¾b ÷™ÿ¨€ÿ€„¨ø¡$´÷ÈøÎˆŸ‘œŸŒ†dotZVzz{‡‡y˜„¥†™‰ˆˆwŠ‚†Š›‰ŠЄЄ…e›f—wšr´`ropyo~މ‹‹¼ŒŸŽ‡D´}vDlk|‘†ណ†KeGÝ÷ lȘw« ‘´ž}µq‹‹”š‘˜pŸh·„¡Ž}¼p™œ—œ¥ŒŠ‹Œ~Ši|{}…Œ²¶¤¡˜d›„Sȸ•ˆ¤n¿^Ђ¥Œ÷¨”®xßnŸ‡ž§‹i§‡{û ¶P l¡|¤ˆŠˆ‹‰‰s¢zœ|Ї~ŒpŽE¦Ù¬•­˜TžkŽš¥‹‹–œ‘ %VÇŽŽ½vâC÷,ØxÄ|Ñ„‹‹”Ÿ£†¦‚‡‡‡|…Œ„Œ…™x£š(¬ž¨—~œVœH£K¡^§d¬‡Š·V‰†.Y¨¬"¬¥«”—ŽŒŠ…Œ‚wdƒd!l{šzkž€´‹>˜–§÷¹¾œ˜ˆ†“•…žpXHqz[…Œ$´š—˜”’Š“uXš]û>ûr~÷„‡£’ŸÊ䣛†‹†„!´XqЉqjƒŒ‚‚…}•sš±$´v„vu‹Î1…Ž›®›¬‘ŽlœŒ‹¹” p­Œ‹¹|¬hЇ~ˆvˆ…Ї¦Zˆˆ‹a”k_h…‹(´÷Ь³ˆ†ƒ‡Š‚pt˜¡pŒ ÷š£÷”wŸ¶ù‡šéª–£˜¢ì¥ÿ€ÿ€0ù¥øÚŽ€‹‚Œ‘€•ƒŠŠŽ•’““޼c„–„“„‘…P‚†„ƒˆ0ŠŠ‘‘Œ’ $ˆ©û~„Œ„‹©¡ˆ“†…Š„„„·Œ‰ƒ‹r‹£¢‘‰ƒƒ®tŒs‹››‘“†ƒŽ…ŒŠŠˆ‰‹ %²†Šk—Žš£‹‹~Ž~³‹s€˜••›Œ~Ž|‹´{Œ‡ƒ‘œœ‘Œ‰|Žˆˆˆˆ‡€€´ŒŽe‹Ÿ£“ŽˆŽ‡÷Ì ¥±§˜•’÷7Æ[ÿ€ÿ €¦{ y”‚÷j¶ ¶tÁ÷#÷~o¡š¶÷ ˜¢ÿ€ÿ€™§˜¥ÿ€ÿÿð€®…Ëg¸ª"òIû_÷<³ À÷¬ ª"òI÷¥÷€ ÷I  ÷ "”‘ŠŠŒ‰‡÷ ÷Cä ÷j Pf @f ª"òIw‰z‡w…@ó‡@÷£ @÷, € ÷t ÷¡€ ÷X  @ªzˆ€ j…h{y{÷Æõƒˆ„ƒ‰ŒˆŒ‰“…–Š—”•‹ˆ– ¼c„ЅІ…†Œ† $“Ž’”‘’…’ƒ’€@€’d÷d§ûO’Œ’‘•—ƒ‡Žmu‹Š’’·Œ€“—‡…€st@€‹‹¤“€®t@‹ŽŒŒ‘Š“ˆ %€…ƒ{{‹@±ž ˜‰˜ˆ‹‹|sˆ´¡‹š‰˜ˆЇ{~ ‰–‰£‹´{ŽŽŽŽšˆŠ…zz…‰‰“Š• ·fˆ±›Žˆˆƒws‹ûRvú&wÈ÷#õ÷‚÷Ø÷Aú!ý9õ¼ø´÷pû÷gûŽûg·G÷+ìû'C^YrûFèû N^aûû/÷÷&߾ͬî½÷ƺ÷÷=÷,*YÇ÷¬ÇÅÚ÷(ã8Ù÷Ú4÷(ù¼ü$÷¸”Úûi÷Õì}üšòûè÷ø$<ûIB’Ms$÷èûü$Ù÷J˄҉¢UÙ÷èÙ÷µÐŒÝ×Ù£Ú¢Ù×ÝûøÊø-Ÿwo˜l]÷{×X¾?o?XX?û{\lp~wwww~plû¦l˜pŸwwŸ¦~ªø ª§˜ŸŸŸŸ˜¦ª÷¦ª~¦wŸûÝ÷œ±žŸ±—±žweû{û÷¬ü sxysûñtx£÷”£ž¢÷ñ£žysÿûmŠa‡hmanšs¢~!Úõ¡™™£§µi©a÷Áþâøˆø»÷Áûøü7üü7ûøˆø»÷J÷J÷üø7øø7{›ø¤›÷&›­›ût›}™ø£™÷(™¯™ûl™  7ÿ ‹ â ÷ â ÷ øìöÅà G\…Îè÷:ÇÛì2m²Ýÿ“¦´ù"®Ôß‚«¹Ûõú ·Ñü<ez”#.„¨°ò     Z Ô Ú S b Ù Q z ´ ¾ ÷    ¦ ¬ Ä Ö Ý D J Ž ë ò@¡ÄÉÖ5HOSlq{‡Œä:Z¯iÒ"@Q`‹’Ìó+5Alwƒ‰žß$+4;t¶ÚãN’¥ª´ó#05Fi{ˆ–¡¨­äìñø,:m £¨Úàêòø'Vajw¦Ôî÷ý05GRdjot ¸ÆÒÚãçó9ISw‚‰Ž“š¨ÍØâñøü 4HT\{ž¸½ÍÖäîõü0AS[bjo|ˆ§ÅÍÑÞï &+GOksy‰•¡­·¿ÇÎÕÚáù"'<Qf}ˆ’™±É×åóü 2>CHMclq~Š”ž¥«°¶ºÀÆÙì ! 3 > F N T Z _ q „ ˆ › ® · À Ç Ì Þ ð!!!&!6!A!F!L!R!W!_!e!i!o!!…!–!¤!µ!¹!¾!Ä!Ô!ä!ò!ü"" """$")"."5";"@"L"["f"u""‹"™"¡"¥"³"Á"Ï"Ý"ë"÷##### #%#.#3#9#?#D#I#V#c#l#t##Ž#™# #§#®#³#·#Ã#Ï#Û#ç#ò#þ$ $$$#$+$3$:$B$J$R$X$^$d$j$o$t$~$‰$”$Ÿ$ª$³$¾$É$Ô$Ý$â$ç$ì$ñ$õ¼«œ¡gÁ€y}†tp}™¦³2aHµ^ׯ§¦¯°o¦gfnpfg¨p°÷l°§¦¯°o¦fgnpfg¨p¯ gu»QVe_UsÊl©›˜›£ ‡¦²#|–d™QKü÷ø³§¸±½Ì–h/üµ½ øà ÷ò˜Œž÷83ïû û*0û û2û9åû÷9ÕФ³¼[Ïm^`{X?N¹÷„÷÷{Ö´T'û‰õ’½¼ÑôûpùFû$ûpýF÷ »÷:£å MKnS]# î[Å' û¸&ÍOñÿ™›§oÙ€qm„o÷a øû¥€3# á¹·â÷÷h(÷û7û7(ûûhû¶2á_ ÷3¼û ®û¯e¤ÁÇÁ¨ÒÄÄxa¼ÈÐÀPB©(û&Aû ×T÷'`÷jªnNAJf=:O¦¸ZKDRÅßh÷÷;ìà÷ û<û÷¹ û~÷û÷Dðа¸¹SÒme_nAû9Õ÷S÷WâÓòÁºziµÇÓ¸SQ¤- ÷X÷)÷ ÷ ÷*÷V÷ û) ½³®Ç¥Lªmy}}v zÉ£˜–£÷rfqpgx‘y¢a e ÷*ü•û*2ø4äû*ø•÷* Ç ²¢´‘Ÿ÷epphr–z¤} ÑY¯Hst…ƒwÂ÷3“ÍûŽûJÉ“¢‘­Ÿ|mmvyagm–¢pW]e³¾{ÄåɳÕëÒ¥°Ì÷ãû†—2÷ ûRxjdaûS×÷U÷YáÑìÁ´yeµÌξUR¨-û5û û ûû‚ôû ÷D ÷ûY÷KÓ­$ûSY÷û-3L!÷:!û:3Ê÷÷-ûS½­ò÷KC ùˆåÈÂØ“F™c~ms\]o£³}G}>“ÆTä M`kZv¼ud«>]^~u\¦Cžµ£“­ŬkC_h_ûDNû)ÅIèα¦Ç¶S¬»lÓȸ ¬³\Ískp~goJk½÷‚÷–Œ™Œ›÷:Yíû‡:ÇžV#Œû8÷ ‘¤³ÀŸûHûcfŽg’kUmqnedr«ÆÇ§°àI ïÖI ïÖI ïÖI ïÖI ,ª –8,"JW ²Àžje“fûO?--ÂFöá˹ÓÐR«L_l|tpƨ¦À§ ‡ŸA0ªŸ}jnvwd^{§­‚¢¦£–§'÷ý èƒ; @AZÕ÷)O `mlcc©m¶·Å_ ‹å÷wâ÷[âÜ÷÷c÷ 0÷ ôø¼÷[÷8³@˜øÍšÉ»á÷û³ûûQýF÷^ô÷÷¸÷.øû(÷ÇCcm>1÷[ÞÚ¸pEô¦ûÇ/AzI-÷wíØÆr.¼¶Ÿorv{^ei–¥mV^b³Æ{ÂîÆ³Ç BZXMM¼WÔÔ»¿ÉÉ[¾BOªžxihxwllwŸ®­Ÿžª Ê÷ &qû# cÄ€…Å7÷oãû Ä€) €û 3÷pßÄ€A±eÝ÷0÷F»Ö꜀ ]ûkÐzÖ÷c ?aWIjÙf^³Dûb3ûû´2÷×¶¾Í«>¯¹cÒ÷´ã÷÷cäûûº:Á¤O]ŸItsMW_u²ÙÚ¢±¶÷±Š·¡d=÷¬Ã=UT94ÁXÙØÁ¾âýßUÀ>û¬O¸‘gb`…f^`‚²´´”¯¶Ã÷¬¶”gb`‚f`_ƒ²´´“¯·÷û%wq|]\t˜¢žœ›¬•Ä€®‚qû û5üDûEøDû ÷sü‹¶nGhkû|›6÷6œÆÆÃ÷AZÕ÷)ª ÷/ÍûEûT‡ ÷°Ö÷Bû°÷ûX÷Àä¦ÏÉðû 4Yi35÷Þê¹j: ÷+ùF$ûΜû— bûpøßû+ýFò÷Íl÷÷ ‡´û£9÷3üŒ#ÉÕpp„m÷a ¡÷1- ÷6 éH ÷4÷÷6 è ãKvùZw wß÷ÜÔá÷^÷ïùçB®û*ûH>1-ÊO÷aûŽLZ¨`´OG¹^Ô`ë…û$Ô^÷'÷œÐàñ÷ 5Ãû°÷cº†¶x±jÇÊ_²K¬;“B4ûIJ§{¥´»«¨¼”ÔûÏÍmŸiZOngR÷ ûS …Í^v÷ÎÓÍ÷NΘâ÷ â„â÷ â¾€øoùZ~€÷5ü÷jHß÷°ûؽ€/UD32ÁDççÀÒä~€äVÑ/½€Hà'/Vž œ”œ™•„  ‰©÷ÚÖòËjµL¨ɽޙ´ ÷yV¹/ û.5ûû9û?à!÷.÷-á÷÷<÷<7÷û.5Ô´Y'’ûˆ𑵼Ö÷ ûvûƒb]BAc¹÷ƒX~ordQÃcòòǴƶl¢T› û÷p ÷ Á û„ ùJ!  J÷?ŸãÃ÷ÝSÁ%6DaCGÂk̳§˜­nTUx"~÷÷ hs–©©¥›±¸¢u]Œ€vqƒp~ä÷5ÐßÏ÷1äÿw€ÿs€øùTû(2û1l=zGáŠ7GzFèû5¤ã2÷%Ƽš ²ðqjZuQ2\¼÷|÷IœÐû`ß÷rœÏûz÷žÁ¸Û³¬s°»Ö©^^Arø° ´÷4¤œeû l~}Œ|û.5ûû9û³5Ô_bûâq°÷¬‰˜šŠš÷-á÷÷<÷câC·ûV””ŠŠ“ûûôp§¿Ý÷´ÇÝŠü‚‚ŒŒƒ÷÷ó¥n—X;ûcO9übq[jZYr¤É û0÷Iv¡vø_à6÷~û+w¡wë÷ Øã)€øùB3%€û+ûvGûû$û(Î&÷xƒ€û)äC€÷(¸‘´›±«‘€WÖlbl€e=Z½÷÷ºÆÛ°«‚l´¿Ñe«bœ^‘…~‚|‹‹a¥x™‡‡•vŸk—~‰Nû ªÏ9˱ˆ5x…«šÒª™ ‡wˆZŠ‹‹ˆ˜§¦§¤b¶|¤Ÿ{°±‘Œ’Œ’Œ•{ŒŒ”ŽŸŽ•}’q~†›‰œœÀ¢¼²§Š ¯§¦¯°o¦gfnpfg¨p°ü÷l°§¦¯°o¦fgnpfg¨p¯ á÷…·íû…ôû÷°÷÷ˆ%/ûi]÷i5ûi]3÷i!÷ûˆûû°ôì÷…¸v÷Îê÷­÷å ûØá÷Ø»éûØöû øó÷Ô%5û·[÷·5û·[6÷·$óûÔû üôê÷Øâ÷ÕCû&8µRäº ù\fûlÚ~Ø÷c ûOv÷É÷tǰÊ÷ Å÷9×÷Ü÷ìùF2ûü÷þûK÷ßÜû û7ã'0[PûûÄד÷'xŸ¥ªß·Ùë÷ZÉ.†û°tw”|Ùݘ°»³¢m8Axf\|pjeJp¦Ä÷±÷:˜ÝûG÷û~û û 9÷ û² ÷â÷ ù³û/ûç]Y÷ûÓ÷÷ ajib`¬jµ¶¬¬¶´j­` àøá}w ~à÷¿Þ÷9àÏ÷÷ƒ÷÷éøZNVsS_÷+Çéè®­x©¶Ó¥d\›Sû?%û-ûzûWÎû÷A÷ëí÷(÷'3Õ kü3hÐ÷*‰»«º«Âʵf!.eL?øÎÚ ~àX÷:÷Zw¬wÄ÷ ÷s÷®ø#ù…û¡šv“Jîùxûlû°¶®uf¥®û÷4v÷·ÇÖûWv÷_âøá}÷¶ ÷p÷ ì÷ïø²PToUcÜ„Ï*ý|÷• ¸xÂ÷Ñ÷ ÷5ì÷ì´q«c÷/w÷û7;Ùü=;÷¼Û!÷X©òÃÇÕûÛž÷W éÍ ÐÅ ÈZ ÐX ‹÷KHÎÐÛ÷¤á÷ ÷÷b÷ ¼÷÷Å÷2÷Í÷0÷&#ÑûAû:ûúE;ÑFE|HѼû÷|÷÷6¼Îû6ø9ÅäÆg-ûOj4PT Hõ ÷²T Hõ ÷²T Üû¯: ƒ; V (vû1û³V (vû1û³V – ü ÷z÷ˆ÷V |¥³€¶ÕÆ±Í ýF÷ €ãø¬æ³÷ ÷¬÷ øÆ÷í÷m3÷ûA3û'ûiûmáû÷8÷ »R"¶ö³hôU´&žöİ÷÷"û ûFe1%(bä÷F÷F±æññ±1ûFûWv÷xvø­w¯ñ÷ë÷ ò÷ñø¤+üZ7•l³Ù÷Ú%ûß!Æ5÷2}ûcë˜÷V÷2Íå÷0óßzà&›(”3;ûwR&}XecYm™o¢{[û]áØ÷Dž¶“¦¨½e³W ‹ìøMw÷@w÷÷ø{÷_?cZm5J÷)÷JßnÈû-DÔ÷JßoÈû-D÷sûû©;f¨N¾£B;f§O¿£ûU÷B÷ÙÁñº vùFw—÷÷÷"ð÷÷÷y÷‰÷÷R÷3œÕæ÷÷›ûû™ì0lX)ø3&ü4&—n¾ç÷™ûû›ôûÓ/÷5{¦›š›™šÀÅ÷®VÅ}›|špœ 8Ͼ{R…ðyûL,·eä|2~_g•*ûLQ‘Y|F8÷æ²÷~x÷@Ò„¸«÷åû^ªÒ’èž÷B÷˜0²ûüQûy+øRûyµßü÷Uø÷V ‹÷]HÎÛÎ÷êw÷‡÷xøÑùFû û+ûćû+÷Äû÷PûêûH÷;ûH÷¸û÷x÷÷ÎûÛ÷Îûû0dû˜žûAD’elû1÷°kD„ðxûAû~æd÷ÞGXšÅ‘è÷L•ìa¯7™Ü™¸²éy÷LÄ…½›Ð÷9÷‰ûûûNû÷Nû÷=ûŽûRûª ûyüà—Ú“Õ÷÷Åû ë„kpu€hus’•w ÷¸ÁØÙ÷ øø²MPpW`÷÷2Øû2ÙûIA>Õüèš ~;ø` ñ÷ ÷Ö“ä¸÷àû"pu€hus’•wpmQ¸† p÷ÑEû ¸Ã«„kÎFûû÷ûHHû÷ûûHÎ÷÷û÷ÎÐ÷ûù üKû£*øKû¥÷ûë÷b÷ë÷c ÷ø³§¸±½À¢rLü÷øî[Å( ¾ oªp¤m  ú2X1÷m9©Å ûh] ÷òûhû±÷p ÷²÷Tûh] ÷òûhû±÷p ÷²÷Tûh] ½³®Ç¥÷ ³Í÷÷‰÷ ÷‡B `8øûVüûUµ7øR÷yë ûþ÷ØûA2û'ûiûmäû ÷Aè÷Aä÷%÷iû ûFb1%Ø(_ä÷F÷G´åñèñ´1ûF'Ee[RÆKª³º©ÔðÈPû1“û±1÷±û5„MEûK\¡²]MKUÁØiç÷E÷÷÷†÷~ ÷ ûB÷.ûVÔ÷÷ ÷H‘ÝhÞ û)@,ûCü|÷‚ ¹xÂ÷Ñ÷÷,÷ʼn6Ö±RûûbK>`f ±r÷ ÷§ÐÝ ÝÈ’{xsBhn4g,ûv¨û#÷Üû÷fü?û›÷ ÷œÈ÷÷¿²š˜£˜–“‰‰“Ñž¸°Çê+½û<÷w«5÷J4b÷û? ~çø÷w÷6 ø°ü° ÷Àø° ‹êøŒæ‹w“øÜ°øùFû$ûpýFøÜÐûºøë÷$üŒûµøâä ajib`¬jµ·«¬¶´k­_ ÷„ øÎø°ü° owwrpŸw§§ŸŸ¦¤wŸo r ÷A ~÷ K ”pys‚w‹‹E’Rš>žûê4ÓY ˆˆÀO‘…—z‹€‹y|q‡ % ~Ú<Þ÷4ÕYÐ÷Ü…õ÷(ë÷8ëo ûlÝ÷$âÖÔ÷oÙRÄ $ûGÁi÷÷1 ›û1ä÷ˆ ÷d ø$q › ÷ˆ]ûkÐz )ûû‹2÷‹ûí÷÷äû½”Ÿ¡°ÀZ¯6÷÷æ÷-û÷êûQ÷°÷:÷ˆû ûûe.÷eûÍ÷cÇ÷óØøP ~æø«æË÷ øù‚û6÷Äü„û=÷Àû¾÷À÷¾û=ø„©wŸm ÷„;Û÷hÜ:÷‚ ÷H÷ˆ ÷  ÷4 ÷ÕùxR <58EÞ6ÚàÝÑ9ƒ~ŽzXû]€o‰†Ø~‹–b«x—|œ†›—²²“Ÿ S (vû1 ÷:}w÷n =H÷û¬gžx­u ÷†÷ Û Ú´qYW_i4ATŸ®WXGb¿Öló÷$õÅ÷ÛG³@ “|ytETcY]³sÌÔ¾½³ ù\üÎûò*øÎûõéù´ ‹÷øÖwøè S vû1 ÷êøùûDûà÷·û(÷‰÷àûD÷¾÷À û~ýx÷÷òø¤ûûhûƒ÷wûµ÷û÷¸  vøèé÷P ø1÷ê ü^‡ øè÷váø[w ÷½÷*AYÕ÷)ª g÷8 ¯Î ùWgophw‘w—q ‹ñ:vøÜõ‹w õ àÛA û1÷Œ0æ ÷Û÷Q Lªmy}}vÖ" ˆk‚qj½nè_ÀŒ²j¸oËuÎsÀz˜z ÌܾÓË÷ôä>æ÷ç ÷Ç ÌXÞA86÷÷JA§ ÷k÷` ÷v wä÷™ ÷÷÷ ÷ ‹  v÷Šã÷¡âë÷ v÷Îê÷­w ÷A ÷ §÷h «÷˜‚ ú$Û÷4Ü;ú$Û üýˆü=÷•÷ë÷cWÜüûƒ*ørû½b5äc †øác†Œ„ ÷ ÷À÷Àøìƒ ûÕ(÷0÷ ̽³®÷  {û_x|ûaolZkºDôª¾›÷‚”÷ ÷I÷Òû°øÌûŽ÷I÷§÷+ûöÍ÷ ÷ ‰”Š”“¬—¥Œ¾¥’‹{s2wLs„ Õ ø0bÕ ÷ëûýw÷÷Ö¸«°ªÀº§uHûÉ â ÷+ ÷„ Û ÍëÄ»Í÷$å÷åø v÷4Û÷hÜ÷1w Ð÷QÐ÷îçøJ Û÷÷Ÿû ÷+ûÿl€ ˆvû4 vû1û opgg§o œv÷¢é ä÷ ÷¢÷S û÷b÷÷cG¶ûHûh?÷HûhÍèÈ´Í÷KÞççøV ‹áÜâÀá÷gáøþ ‹ÝøÝ æõç w¢w â ÷÷÷: ?÷æ÷W÷ò v÷Îêt¦ h¢“wûK÷÷÷ v÷Îês¦ h£’wûG÷÷÷ ÷¡æø#íø…÷üü0÷¼û&íû™üXê û;÷ Û ~éø¨æ ‚„~‰|‘Šœ»Î¥¾¦—x‘† üA2÷-üí÷÷Õ ¢«£¿Ï¥j8 °›û1æp÷Œ ÈâÍ÷$å÷æ÷F ø"Žad^û Ò÷÷€÷ Àï8÷9ï Ò÷÷v÷ ûû†÷£÷]÷†÷£ ÛÛ û*÷cû)Ûóàáô fû1æÚ÷÷Õ÷H÷„ ÷e j®]š‹Ї¦i‰v]‚‹Ї S hvû1 êó ù§`mlcc©m¶· ‹÷À÷ÀƒûÀ Ìܾvw÷Ë Ð÷C÷Žø= ~çø å û÷¹ ÷‡ @ZÕ ûMüÊ÷v Ö÷v  anmed¨nµµ¨¨²±n©a÷Ççªø®ª÷Çø®çü®~äMvùå„w±÷ ÷´÷ ¬ ÷Þûíþ^Ûùn÷ x«†Â†‡~ij=Ñp•† ˹[KK]\KK^ºË˸»Ëøìƒüìú$ ûŽF÷Žä÷÷[÷ ©ŸŸ© §÷h ÛÛÛ ÷,ã÷ ´÷+ûö÷ç ÷Õ ûÎû²ÍC÷÷ ©§Ÿ¡œ¬ Y  vøç÷#ä÷'÷÷]÷ ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖ Û÷Q¸‰³‡² øæ—ëüC ÷ÊÛ÷˜ ÷b ù\fûlÚ~²Ø÷cÒ 'üLûøL/üLûøL'ü¤ ø¶øJ˜åüûr4<âûw v÷ÎêÎ÷j‹wû÷Å÷ ‹ãøLw³ï÷ç÷ïøÄ iŸv©o÷û ÍÓ vøJå÷$÷ ÷• p˜÷µ ½ø° ‹÷– ÷_ Þ÷  \j¼ õ ÷ ÷!  vøûä}÷A ÷‚÷ ˜ û”7  ÷½©S\•[ûD/û> ø8øjü=û„÷` ¡x™µ÷I@=û8ye k ì î[Å'‹éBvø{ã\w¶ø¸X ûûü4ûø4û  øJ÷™˜åüü¤÷˜÷Œd­ ÷Ü ~÷A üÊ0øÊ ~÷G÷D÷H ÷÷[÷ ~÷+øoæ ÷z À ã¹ÏÒ® üöûM; æ÷ Ð B÷÷P÷ 'ûQûÎ÷÷÷s ÷‰÷6÷o ‹ ¡ ’e£|™‘ â ä÷÷q÷ ÷Äüµ÷‰ ÷ÊÛ÷V øñø ø0çü0øìÛ©ÛøÛøÎ÷¢ ø?ø°û±ü°÷± øYø[bl|tr÷¥ x#¸Yûû5H6 ×÷EÞ£ó÷.ë÷ï _§¼ñ÷Aˆ÷9÷A÷÷\ò w÷Ñ §÷ø'÷  v÷ØÖ÷·w ùi$ýÐò ~÷Ó ø­wÃø| w÷: ÿg€ øjûí ûû| vø¤w ù =H÷ûØ ûüéûvøéûýF ÷b û÷ˆ ÷ ƒüì àÅ÷÷„÷÷¸ ÷-÷Ð÷/÷!#Ð âÁh2&Oj:œv÷£ç …ÍèÈ´Í ùn÷M÷„ \\o ÷Œ½½½½½½½½½½½ øŒajhab¬iµ ûÀ÷~÷SûQ äùŠä÷Õõø? ÷V ø8ø û²Üv¨v÷(±— ~åøÙÝ÷e÷ øûí;÷ë ¨vû4 çéø0é DÞh¢“w ÷µÝhÞ áø[÷º ø2!ü2 CÞh£’w wû¦wbbd ÷H÷ “vùSw û~'K  v÷Ý ÷êûa ãø¡æ ÷IÕ€ ÷™õËʘ'÷ ÷˜ïÊË™!÷ ü:ü¤÷øM÷\ ~é÷Z÷÷Xæ ÷è÷¸ û„ ÖÙ÷8±‘ }¤«€¶ß¿¹Ð û)û*÷ û ÷* ÷+Úû+÷5ð è ¬ È ÷ùF ÷í L ,-23~R´µõöøù ,-ù  ,,-- $&DFLT&cyrl4grekBlatnPzinhþzyyy ÿÿÿÿÿÿ@ AFK JAZE TCAT ^CRT hKAZ rMOL |PLK †ROM TAT šTRK ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿÿÿ markÂmarkÌmarkÖmarkàmarkêmarkômarkþmarkmarkmarkmark&mark0mark:markDmarkNmarkXmkmkbmkmklmkmkvmkmk€mkmkŠmkmk”mkmkžmkmk¨mkmk²mkmk¼mkmkÆmkmkÐmkmkÚmkmkämkmkîmkmkø&.60Z<.°Üž´ Z@@@@F@@@@@@LRX444@:ù"(.(.(.4:4:4@FL::RX^djjpÒÒ"v|‚ˆÒŽ”š ¦FL:RX^d¬¬ppp""‚4:²¸‚F¾‚‚‚ÄjÊjÐ(.‚ÖÜâpèîôú   $^*006<ÒÒBFÒÒ"HÒÒNÒT^ZÒ`ÒfHlrx^*0~6<„ŠB–œ¢¨Ò®Ò´N^ºNNÒfÒÀÆÒÒNÒÌ NþÔþ“þÔþ¯ÿþ”þÑ,ÿ0,²,*±W²DA²A<#'²_l²++²6² ²3²±,<_²²$²ëëÎt².²%²%<'<;6< <䊲 IJ²(=²$,äÈS,55Ã#@SX),Ãq¸Œ -ðIåp$"&&ägä$Ã00Ã#Â-Ã)ÃÃl" Zxxxx~xxxxxx„ŠlllxrGHNTZHZ`fHZlrHxHZHZHZ~xHZH„HZHZHZHZHZŠH–HZHZHZœZTZlrHZHZHZH–œZH¢H¨HZHZHZ®ZŠZ´ºHZHZ®ŠŠ„Š„ŠÀHZHZHZHZHZHZHZTÆTÌTÒTØTÞTäTêTðTZTZTZTZöZöÆöÌöÒöØöÞöäöêöðlüllllllrlrH H&H,H2H8H>HDHJHZHZPZP P&P,P2P8P>PDPJHVH\HbHhHnHtHzH€HZHZHZHZH†HŒH’H˜HžH¤HZHZHªH°H¶H¼HÂH–H–H–H–œÈœÎœÔœÚœnœtœàœæœZœZìZìÈìÎìÔìÚìnìtìàìæœò®ø®þHø ®øHøHHþHø®þHþ®øHþHþ®"®þHþHþHþ®þ®þ®þŠþHH(HHþH.HþHþŠþœò Hþ®þHþHþ®þ®þ®þHø®ø®þHøHþHþ®þHþŠ4Hþ®ø®þ:@œFœLœRœXœ^œdœjœpœòœòœòœòœòìòìvì|ìFìLìRìXì^ìdìjìpì‚ˆŽ”š ¦  ¬²¸¾ÄÊÐÖÜÜâÜèܬܸܾܲÜÄÜÊÜÐÜÖÜîHôH¦HúHHH HHHHHHHHHHH$H*H0H6H<HBHþHþ®H®NH$H*H0H6H<HBHTHZHþHþHþHþHþHþHþH`Š$Š*Š0Š6Š<ŠBŠTŠZŠþŠþŠþfþflfrf$f*f0f6f<fBfTfZfx~ŠH„þÔþ“þÔþ¯ÿþ”þÑ,_²*,²±W²DA²=²:/²++².²-,<.<,ÿ0©O²/<c¾W¾ÿ¨·¸ÿö¸ÿη½½vÿ> ¾ÿÿ¾ÿd·ÿϸÿž¸ÿv·ÿá¾ÿÕ¾ÿ:·ÿ¥¸ÿt¸ÿL·ÿ•½ÿнxÿ>ÿö¾ÿþ¾ÿu·ÿ߸ÿ‰¸ÿa·ÿª½ÿŸ½ ¾ÿé¾ÿ;·ÿ¦¸ÿˆ¸ÿ`·ÿî¾ÿȾÿœ¸ÿ·ÿ\½ ¾ÿæ¾ÿ9·ÿ¤¸ÿ¾½ÿ³½yÿ>,ä,9<ˆ/4Ã,ÃqIÿ0Q9-õ-Ã-..×--~~+ +à_--é->.D.ý-R--Ü-1.7.ð-F~1~Ôÿ>2+%+2àA-Ë- .&.ß-5~ ~!¢O- -Ù-..4.í-W--C~.~/¢wÿ>/+"+/à7ÿ>)‚f Zttttztttttt€†ŒhhhtnDJDJDJDJDPDJDJDJDJDJV\V\VJbhbhbhbhbhbhVntzVntz€†€†€†€†€†€Œ€†€†€†€†VJ’˜’˜’˜’˜’˜VJVJVJVJVJVJVPVJVJVJVJVJVžVž¤ª¤ª°¶°¶°¶°¶°¶¼ÂVJVÈVÈVÈVÈVÈVÈVJVJVJVJVPVJVJVJVJVJVJVJVJVJVJÎJÎJÎJÎJDÔDÔDÔDÔDÔDÔÚàÚàÚàÚàÚàVJVJVJVJVPVJVJVJVJVJVJVJVJVJVJVPVJVJVæVæVæVìVæVªVªVªVªbhVÈVJDÔVªVòVòVòVòVøVòVòVòVòVòšþšþV      V"(V.V.V.V.V.V4V.V.V.V.:@šFšFšFšFšFVVVVššLšLšLšLšRšLšLšLšLšLšXšXšX^^VLdjdjdjdjdjdjVLpLpL¤vpLpLpLVLVLVLVLVRVLVLVLšLšLVLVL|VL‚ˆ‚ˆ‚ˆ‚ˆD.D.D.D.D.D.ޔޔޔޔޔšLšLšLšLšRšLšLšLšLšLšLVLVLVLVLVRVLVLšLšLšLšRšLV.V.V.V. pLVLD.V.þÔþ“þÔþ¯ÿþ”þÑ*,²,<,e²_l²²7(²DA²A<IJ²_²:=²F²²J¶²/²/3²++².².<$$Ã2,äSX  ä&&ä55Ãrä(,,Ãq0gä-9,ÿ0äIoôŒ ° JHHHHNHHHHHHTZ`H(.4:þÔþ¯ÿþ”þÑþÔÃþÎI,Ã-<2> þÔþ“þßÿ>â JXXXX^XXXXXXdjpX 8>DJPV\bhntzþÔþ¯ÿþ”þÑþ×à.-1-Û-F. .Þ-0~*~/¢/+"+ù  ,-:<D'FH0JT3V[>^iDkoPqqUssVu{W}“^•¡u£®‚°³ŽµÃ’ÅÝ¡ßàºâä¼èó¿öøËüüÎþÏÖë*ì3=?î ðð»ò÷¼ùùÂû}ÃööF(*+(-˜*š¶–¸Ì³ÎÙÈÛçÔé áù,,ù# --,,1139<>  xÒDFLT&cyrlHgrekjlatnŒzinh*zyyyLÿÿ  0@ZjzŠšªºÿÿ !1A[k{‹›«»ÿÿ "2B\l|Œœ¬¼@ AFK ^AZE ~CAT žCRT ¾KAZ ÞMOL þPLK ROM >TAT ^TRK ~ÿÿ #3C]m}­½ÿÿ $4DP^n~Žž®¾ÿÿ %5EQ_oŸ¯¿ÿÿ &6FR`p€ °Àÿÿ '7GSaq‘¡±Áÿÿ (8HTbr‚’¢²Âÿÿ )9IUcsƒ“£³Ãÿÿ *:JVdt„”¤´Äÿÿ +;KWeu…•¥µÅÿÿ ,<LXfv†–¦¶Æÿÿ -=MYgw‡—§·Çÿÿ .>Nhxˆ˜¨¸Èÿÿ /?Oiy‰™©¹ÉÊaalt¾aaltÆaaltÎaaltÖaaltÞaaltæaaltîaaltöaaltþaaltaaltaaltaaltaalt&aalt.aalt6calt>calt:calt6calt2calt .calt *calt &calt "calt caltcaltcaltcaltcalt caltcaltcaseþcasecase casecasecasecase"case(case.case4case:case@caseFcaseLcaseRcaseXdnom^dnomddnomjdnompdnomvdnom|dnom‚dnomˆdnomŽdnom”dnomšdnom dnom¦dnom¬dnom²dnom¸frac¾fracÈfracÒfracÜfracæfracðfracúfracfracfracfrac"frac,frac6frac@fracJfracTlocl^locldlocljloclploclvlocl|locl‚loclˆloclŽlocl”numršnumr numr¦numr¬numr²numr¸numr¾numrÄnumrÊnumrÐnumrÖnumrÜnumrânumrènumrînumrôonumúonumonumonum onumonumonumonum$onum*onum0onum6onum?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”                                                                 æÎÖÞæîöþ"*2:BJRZbjr|„Œ”œ®ÀÒäô$4DTdtˆ˜¨¸ÈØèø(8HXhxˆ˜¨¸ÈØèø(8HXhxˆ˜¨¸ÈØæô"0>LZhv„’ ®¼ÊØæô,:HVdr€Žœª¸ÆÔâðþ (6DR`n|Š˜¦´ÂÐâðþ  ( 6 D V d l z ˆ – ¤ ² ¼ Æ Ô Ü ä ì ô ü    $ , 4 < D L T \ d l t | „ Œ ” œ ¤ ¬ ´ ¼ Ä Ì Ô Ü ä ì ô ü    $ , 4 < D L T \ d l t | „ Œ ” œ ¤ ¬ ´ ¼ Ä Ì Ô Ü ä ì ô ü    $ , 4 < D L T45ˆ ~ š ¶ Ò Ð Î à è ú    n ° ® ¬ ² ¸ ¶ Ê È Ü æ ä ú   * > T j € „ ˜ ¬ Â Ø î ò   0 F \ ` t ˆ ž ´ Ê Î à ò0BVjn€’¦º¾Ðâö  2FZ^p‚–ª®ÀÒæúþ"6JN`r†šž°ÂÔæú 2FZ^p‚–ª®ÀÒæúþ"6JN`r†šž°ÂÖêî&:>PbvŠŽ ²ÆÚÞð*.@Rfz~¢¶ÊÎàò0BVjn€’¦º¾Ðâö  2FZ^p‚–ª®ÀÒæúþ"6JN`r†šž°ÂÖêî&:>PbvŠŽ ²ÆÚÞð*.@Rfz~¢¶ÊÎàò0BVjn€’¦º¾Ðâö  2FZ^p‚–ª®ÀÒæúþ"6JN`r†šž®¾ÐÔäô *<@P`p€’’¢²ÄÈØèúþ04DTfjzŠœ °ÀÒÖæö ,>BRbtxˆ˜ª®¾Îàäô    * : L P ` p ‚ † – ¦ ¸ ¼ Ì Ü î ò!!!$!(!8!H!Z!^!n!~!!”!¤!´!Æ!Ê!Ú!ê!ü""" "2"6"F"V"h"l"|"Œ"ž"¢"²"Â"Ô"Ø"è"ø# ###.#@#D#T#d#v#z#Š#š#¬#°#À#Ð#â#æ#ö$$$$,$<$N$R$b$r$„$ˆ$˜$¨$º$¾$Î$Þ$ð$ô%%%&%*%:%J%\%`%p%€%’%–%¦%¶%È%Ì%Ü%ì%þ&&&"&4&8&H&X&j&n&~&Ž& &¤&´&Ä&Ö&Ú&ê&ú' '' '0'B'F'V'f'x'|'Œ'œ'®'²'Â'Ò'ä'è'ø((((.(>(N(^(p(p(€((¢(¦(¶(Æ(Ø(Ü(ì(ü)))")2)D)H)X)h)z)~)Ž)ž)°)´)Ä)Ô)æ)ê)ú* ****<*<*L*\*n*r*~*Ž*ž*°*´*Ä*Ô*æ*ê*ú+ ++ +0+@+R+V+f+v+ˆ+Œ+ +ª+¼+Ä+Ö+è+ü00020006080<0@0H0L0P0R0T0Z0\0^0h0j0l0p0t0z0|0z0€0~0‚0„0‚0†0Š0’0–0”0–0”0 0¢0¦0ª0°0²0¶0´0º0¼0º0¸0º0À0Â0Ä0Æ0È0Ò0Ö0Ú0Ü0Þ0ä0ì0î0ò0ü111111&10141<1@1H1L1T1Z1`1d1p2N³´µ¶·¸¹º»¼ïðŠoj2*©ª«¬­®¯°±²ùú‘’“2Ÿ ¡¢£¤¥¦§¨÷øŽ1þÿß1þ*22•21ö•1Ô1ø•1Â1î•1ä¥ÏØ1Ö1Ö2‰Š‹ŒŽ‘’åO]^_`abcdef”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©‰±²³´1Ä"âãñòóôõöŒ  !"#$%&'()/@AD1Â1¼1¼_dçí1®_dçí1š1¦ €‚ƒ„     *1x1ž1¤1ž–1–11––1J1‚ ÊÈÊÈ1l•–—˜™š›œžçè‰n1`“”1^1^1d1j1j1J1P1V1V1V1H1H1H1B—12121,1,˜1111˜0ô0ú11˜0ö0ö0ö0ö0ö0â0â0â0â0â0È0È0È0Θ0²0²0¸0¸™0œ0¢0¢0¢™0Œ0Œ0Œ0Œ™0^0^0|0|0|0J0h0h0h0h0H0H0H0T™02020>0>š00(0(0(š/ô000š/ü/ü/ü/ü0/è/è/è/î/î/È/È/È/Úš/²/²/¾/Äš/œ/¨/¨/®š/’/’/’/˜š/^/^/ˆ/‚/L/v/p/p/L/L/^›/8/P/J›//.>.J.b.,.8.P.P.,.,.>...*-ò-þ....-ê-ð-ð-Ø-Ø-Ì-Ì-Æž-¸-Ê-²ž-¶-¶-žž-´-´-~-~-¢-l-l-l-l-l-Zž-X-F-FŸ-h-2-2Ÿ---T-- -B- - - - ,ú ,ø-,æ ,Ò-,Ò¡,ú,ú,ú,â,è,è,Ð,Ð,¬,¬,¾¡,˜,Â,ª¡,®,®,–¡,v,v,v,v,d,d,d,d,L,L,R¡,8,>,>¢,*,*,*¢,@,@,@,@,.,.,.,.*,,,, , , *~+È+È+ø¢+´+ä+ä£+Ð+Ð+У+Â+Â+Â+Â+°+°+°+°+h+h+ž£+T+Š+Ф+v+v+v¤++++P+++>+>+++,¤*ô*â+¤*Î*Î+¤*º*º*Ø*Þ*¨*Æ*Ì*Ì*¨*¨*º¤*”* *¦¤*n*Œ*’¤*¨*¨*¨*¨*–*–*–*–*H*H*„¤*4*p*p¥*\*\*\¥(°(°(°(°(ž(ž(ž(ž)è)è(Œ¥)Ô(x(x¦(d(d(d¦(P(P)Ð)Ð(>)¾)¾)¾)ˆ)ˆ)¬¦)t)˜)˜§()„)„§):):)F)F)()4)4)4)()()"§)))¨(î(ú(ú¨))(þ(þ(þ(ì(ì(ì(È(È(Ú¨(´(Æ(Æ©(Ä(²(²©(z(z(†(z(h(t(h(h(h(h(V©(T(N(B©(.(:(.ª((((&(((((((ª'ô'â'îª'Î'Î'Úª'Æ'Æ'Æ'Æ'´'´'´'´'¨'¨'¢«'”'Ž'ެ'z'z'z¬'Z'Z&'~'H%þ'l'l'H'H'Z¬'4%Ø'F¬'%Ä'2¬''''&ô' ' ' &è&è&ú­&Ô&æ&æ®&º&Ò&Ò®&¦&¦&š&š&”&ˆ&ˆ&ˆ&ˆ&ˆ&v®&t&b&b¯&Z&N&N¯&:&:&:&:&(&(&(&(&(&(&°&&&±%î%î%î±%ø%ø%ø%þ%æ%æ%ì%ì%È%È%Ú±%´%À%Ʊ%¬%¬%²±%°%°%°%ž%ž%ž%Œ%Œ%h%h%z²%T%x%f²%d%d%R²%n%n%n%n%\%\%\%\%%%J²$ô%6%6³%"%"%"³$º$º$ö$Þ$¨$ä$Ì$Ì$¨$¨$º³$”$¾$¦³$n$ª$’³$Z$Z$$$H$~$~$~$H$H$l³$4$X$X´$$D$D´$$$0$$ $$ $ #è#è#ú´#Ô#ø#æ´#Ò#ä#Òµ#¾#¾#¦#¾#¬#”#¬#¬#ˆ#ˆ#š¶#t#n#†¶#r#Z#r·#:#:#|#^#(#j#L#L#(#(#:¸##D#&¸"î#0#¸"ò"ò#4#:"à#"#(#("È"È#¸"´"ü#¸"¦"è"î¸"¤"¤"¤"¤"’"’"’"’"h"h"€¸"T"l"l¹"X"X"X¹"""V"V""D"D"D"""2¹!ô""º!Î" " º!º!º!Ø!Ø!¨!Æ!Æ!Æ!¨!¨!´º!”! ! »!n!Œ!Œ»!`!`!!!N!~!~!~!H!H!l»!4!X!X¼!!D!D¼!!!! ô ô! !  è è ú¼ Ô Î æ¼ º º Ò¼ Ð ÐP Ð ¾> ¾ ¾ ˆ ˆ ¬½ t ˜½ „ „¾ : : p ^ ( ^ L L ( ( :¾  8 &¾î $ ¾þþþþììììÈÈÚ¿´ÆÆÀ²²²Àžžž°ŒŒžžhhŒÀTfxÀRRdÀnnn\\öÀô6âÀ""ÎÀðð ðÞÞÞ¨¨ÌÁ”è¸Á¤Ô¤Â~~~~HHlÃ4XXÄDDDÄ````NNNNèè<ÄÔ((ÅÅššÊŠººŒªÅh˜Å²²²H¢ÅÆNNN>>>.ÆÇdððààT ÐǾ¾ÈŽŽŽ~~~\nÈ\\ÉÜÜÜÌÌ̼ɪªÊHH8ÔøÊæÊžžÂ޲²¢ÊlÊ```PPPL@Ê..ËRR:B**Ë ËððöàææÄÖ̾ÄÌŽŽŽ~~~€nÌ\\ÍVVVFFF<6Í$$ÎxxxhhhøXÎFFÏ..øèè´ØÏüÆÏØØØÈÈÈp¸Ï¦¦Ðdd^TNN,>Ð2,Ð22,"è ÐúÐ**èØØ¤ÈÑø¶ÑŒŒ¤|””`„ÒZrÒrrrbbbRÒ@@ÓþþRîBBØ2ÓÌ Ó¢¢X’HH”8Óp&Ó|||lllP\ÓJJÔD 44 $ÔèÔîîîÞÞÞÈÎÔ¼¼Õªªòšââ„ÒÕxÀÕrrZbJJ@:Õ@(Õ""üðÕðÞÕêêüÚìì¸ÜÕ¸ÊÕðððtàÕÎÎÖÂÂV²FF06Ö$Ö00 ìþÖþìÖ¶²¦¦¨–Ö„Ö®®~žnnd^×|L×dddTTT D×22Ø>> .ÜÙ îÙ¾¾®ðð˜àÙŒÎÙbb€RppT`Ù0NÙŠŠrzbbRÚX@ÚææÖÌöÚ´äÚØØºÈªªˆšÚ¦ˆÚ¦¦^–NND>Ût,Û888(((ÛÜââTÒDD¼4ܰ"ܼ¼†¬vvxfÜŠTÜBBx2hh4XÝFÝRRRBBBð2Ý  Þººöªææ¬ÖÞˆÄÞÊÊâºÒÒhÂÞ˜°Þ²²²$¢Þßàòßìàß``ÎP¾¾œ®à.œàÒÒ̼¼X¬à šà Ø Ød ÈTT ¸D ¸4 ¨4ô$à †à¾¾®ðð°àáŒÎက°p  láN~á ì ìl Ü\\(Lâ º:â þ þ î ä öâ Ì äâ ® ® º ž ª ª   šã | ˆã Ð Ð Ð À À À \ °ã ž žä > > ¼ . ¬ ¬  œä  Šä $ $ ˜  ˆ ˆ x  x ô h ô ´ Xä Ò Fä º º  ª  p úä ˆ èä : v ^å ¼ z z j j ¸ œ Zå H –å Š î ¬ œ Þ z Î Œå z ¼å F È h X ¸ 6 ¨ Hå 6 –å  œ $  Œ ò | å ò jå ¾ | à Ð l ® ž \å J Œå Ä Ê Ðå ð ¶ ðå ì å  å  "å  å î  þå ú ê Úå ìÁ€‚ƒ_d„ µ   çí ST48:<BGK44444444444444444444488888888:::::::::::::::::::<<<<<<<<<<<<BBBBBBBBDGGGGGGGGKKKKKKKKKKKKKKKKKKK”Ÿ ¡¢£¤¥¦§¨âãò]^`abcdef–—™œžŸ¡£¤¥¦§©‰ï±²³´B  !"#$%&'()/@AD ¦(V\jv‚Žš¦²¾ÊÖäìø$*8@FLRbnŠ˜®ºî,DRX`frB³©Ÿ‰•“´ª Š–µ«¡‹—¶¬¢Œ˜·­£™¸®¤Žš¹¯¥›º°¦œ»±§‘¼²¨’žB?ÒäBB:æB,å/B.-8B<6Ñ=B19>B½DBCíBE2ñ*ó+ôBïù÷õç30ðúøöè ÚBÏÜç#"Êð4ÛNO_BØ Š‘”‰B¿ß¾o’Ž•nj“˜¸BèAâ!ÉÐÁÃ;ñ¼ºÌÂ5á @š·àÙÝBôׯî&¹ÄëÍËÓ$ãÑÎåò»ÀŽB% ›BÈäÞ(é7æ'Ç Bìó)ꢌ¨õBµBÖBÕ¶Ô* ‚Ÿ ¡¢£¤¥¦§¨ € >ÐÅÐÛ dB/BB bBÖ `·BB ^BàB \B¸ÙBB ZBÝB NÏBÈ LBB BBä @.ôBB >B <B :Bè×BB 8BD 6BA 4BÜBÚBÆB &BBBÞ $çB$ BBîB ÿ°œBB(ôBBàr^¹BBì8BÄêBâëBBèBÍBÊÌàBËºÌØBBB3¿ÓBÖBìÔBBÕÒ!BBÐBBB$8BÉxBãBZ[²BÐB7°BÁNÎHOšB˜B=ØB–Bó”B’BÎCBŽBBåBŒBòB2»æB¬"BtBµrBE;BpBBñÀBn¼BlºBjBB1íB¶h-ßBBf,B0ÊÌBõdBBBÅ'BbðÂB<ÎZBB25BÔXB<BB)VB4¾TB+BBÇR6áBPB9>BêNBB½L?:BBBJÒB BHBB@%FÛBDBBB*BïBpST48:<BGK44444444444444444444488888888:::::::::::::::::::<<<<<<<<<<<<BBBBBBBBDGGGGGGGGKKKKKKKKKKKKKKKKKKKäæÑóˆíî pq ttÞˆ½©²Ÿ¨…GÏAHˆ×× þþ HH RV X\p~€€&‚„'†ˆ*÷÷-šš.žž/¢£0"ÖÚéêëìíîüýÿ  ~.=>C¯]cåì BH[}“ÉÐãÁÐ:܈íî pq ‰wÕÿBןvpTt|ÎÏúØàíÒÙ˜¦‡ìëÝé—ꄟ„3Lj¦¯°°… ,Ž..0022È~ÿ "…‘’˜œ¦€‚ƒ„…†‡ˆ¯°ˆ¯° LMPQh„¤«!­´)<LMPPh„¤« GLRhÇ4ThÇ!J5BBGH[[]]cc}}…… ““ ¯¯ ÉÉ ÏÐ ããååììÿÿ<<GGLRhlj‰}©²~ÖÖˆÚÚ‰êêŠüþ‹Ž RS“UV•X\—rsœuužx{Ÿ}}£€€¤‚„¥††¨ˆˆ©÷÷ª——«šš¬žž­¢£®¦¦°±²»..½=>¾CCÀ(ú€‚ƒ„…†‡ˆÎÏÒÕרÙÝÞàéëìíîÿHTpqtvw|~‡˜ŸG…Ï©ª«¬­®¯°±²:ÁÕ×ÿwןvwŸpvwTtvwŸÿvwtw×vw|Î×ÎÏúÏtvwŸúÞÞtÞÿtÿtvwÿwÞÿvwØtvØtvw|tvwÿvÎ×àípvwp|w|ŸtwŸÕÿtvØtvwÒtÒÙTwÙ|Î|ÎvÞvÒÕÞtvwÕv|ÿ˜Ùàt˜àptv|t¦ÏtŸÏ×ÙÞwŸ×pwŸÕ×íÿtv‡×ìÿtvw‡ÿt|רàtwŸÎØÙÿv|Øÿp×ëptwØtwØÙÝw|ÝTvÎÒÙÞvÎÕtwÞÿtvÒÿwÎÒ×Þé|— ÿÿ<<GGLRhÇ ÎÎjÒÒkØØlÿÿmppn||okitty-0.15.0/kitty_tests/LiberationMono-Regular.ttf000066400000000000000000011441001356737523400224060ustar00rootroot00000000000000 FFTMa ‘8GDEFyÛpÑ‘TˆGPOSÏNÏQ‘Ü3>GSUB(³k_Å"OS/2nº†¨`cmapCÕ'h.cvt gmW:È®fpgm~a¶-˜´gasp ‘(glyf)PuõbÜÆøheadün„þ,6hheaÂ9d$hmtxÛŒÎ%`locaQ^=x%dmaxp ÏÀˆ nameoŠ7w)Ô ¦post<È”±5|[«prepÈóŒ5Lz±©3_<õÌ“GÌ“Gü%ý™ñÙ©ý™Íü%úzñ X X"H[/\¹Íš3š3af à ÿ@xÿ1ASC@ þ#çþ~©g`¿ß÷:E ÍÍÍÍÍÍ6ÍBÍÍ+ÍöÍVÍPÍøÍtÍÍNÍðÍrÍ|Í”ÍÍ€Íg̀͗͞ͅÍÍðÍ`ÍtÍtÍtÍ^Í,ÍÍ¢Íq͢͢ÍÂÍqÍ¢ÍÊͰÍ¢ÍíÍÍ¢ÍfÍ¢ÍfÍ¢ÍOÍLÍŽÍ ÍÍ$Í$ÍIÍšÍsÍÍ…ÍÿûÍ’Í€ͳ͂͊͊ͅÍ͹ÍÍuÍì͆ÍcͳÍ‚ͳÍŠÍòͧ;͹ÍEÍÍ^ÍBÍ“ÍãÍͧÍlÍÍÍ…Í8ÍžÍ4ÍÍŸÍOÍÍÎÍÍtÍNÍÍÿûÍGÍtÍ8Í2Í’ÍÍÍðÍwÍÍâÍkÍÍÍ Í™ÍÍÍÍÍÍÍÍq͢͢͢͢ÍÊÍÊÍÊÍÊÍÍ¢ÍfÍfÍfÍfÍfÍÍ8ÍŽÍŽÍŽÍŽÍ$͎̀̀̀̀̀̀͢Í͂ͅͅͅͅÍÍÍÍÍ}ͳ͂͂͂͂͂ÍtÍn͹͹͹͹ÍB͹ÍBÍÍ€ÍÍ€ÍÍ€ÍqÍ‚ÍqÍ‚ÍqÍ‚Íq͂͢ÍÍ͊͢͢͢͢͢ͅͅͅͅͅÍqÍÍqÍÍqÍÍqÍÍ¢͹ÍÍ5ÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍbÍØͰÍuÍ¢ÍìÍìÍí͆Íí͆ÍíÍUÍí͆Í6͆Í¢ͳÍ¢ͳÍ¢ͳÍͳͳÍfÍ‚ÍfÍ‚ÍfÍ‚ÍÍÍ¢ÍòÍ¢ÍËÍ¢ÍòÍOͧÍOͧÍOͧÍOͧÍL;ÍLÍeÍLÍÈÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍÍÍ$ÍBÍ$ÍIÍ“ÍIÍ“ÍIÍ“ÍÍ:ÍÿÝÍ¢ͳÍÍ9ÍWÍfÍ‚ÍÍÿÝÍ9ÍŠÍ‚ÍkÍgÍ]ÍÿàÍêÍqÍÍi͆ÍÊÍ¢Íì͆ÍrÍUÍÿËͳÍfÍfÍ‚Í2Í&ÍÿÝ͹Í¢ÍdÍ©ÍlÍß;Í;ÍLÍŽÍ´Í:ÍŽÍÍLÍIÍ“ÍÍF̀͗Í{ÍxÍ Í͹Í ÍrÍ‚ÍÍYÍYÍ2ÍYÍYÍÍYÍYÍSÍÍ€ÍÊÍÍf͎͂͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹Í…ÍÍ€ÍÍ€ÍÍÍqÍfÍqÍÍ¢ÍìÍfÍ‚ÍfÍ‚Í4Í‹ÍuÍYÍYÍ2ÍqÍÍ]Í¢Í¢ÍÆÍÍ€ÍÍÍ8ÍnÍÍ_Í̀͢Ís͢ͅÍrÍÍÊÍÍfÍsÍf͂͢ÍsÍ¢ÍòÍŽÍ}ÍŽ͹ÍOͧÍL;ÍxͤÍ¢͹Í¢Í$ÍYÍ€ÍIÍ“Í̀͢ͅÍfÍ‚ÍfÍ‚ÍfÍ‚ÍfÍ‚Í$ÍBÍÖ͈ÍÍFÍFÍÿÿÍ)ÍuÍcÍ)ͯͪÍ3ÍÈÍ!Í Í Í¢ÍyͰÍuÍqÍ„ÍͪÍ Í%Í1ÍŠͳͳ͋͂͊͊ͅͅÍ/ͯÍŠÍ5͆ÍxÍÍÍ‚Í1ÍÍ´͹͹ÍÍöÍÍ͆͆Íá͹ÍhÍhÍcÍÿþͳ͹Í‚Í8Í4Í‚͸͸͸ÍòÍòÍ͸͸͸ͧÍÿÍÿÍÍrͱ;ÍIÍuÍ£ÍEÍÍDÍ;͓͓Íz͊͢ͅͅͅÍf͹ÍzÍ‚͵ÍIÍhÍ ÍŠÍ…Í…Í2Í2ÍÍÍ/ÍÿìÍÍF͹ÍŽÍ­ÍÍÍCÍ@ͪÍÌÍhÍ_Í4ÍmÍ ÍöÍÍÍÍÍ&ÍîÍ6Í6ÍkÍ€ÍvÍvÍÍÍ.ÍQͺÍ`Í.ÍT;;ÍûÍûÍ&ÍîͳͳͳÍ.Í-ÍÍt͹ÍÿÍÍÿæÍÍ ÍÍ7ÍÍ6ÍtÍtÍtÍtÍtÍsÍsÍ*Í.ÍÍÍÍÈÍÈÍÍÍÿæÍÿçÍÿéÍ͛͛͛͛ÍíÍêÍKýüþ•þµüCþíý«þÜÿ¦þéþÿ8þþµÿÉÿYþþÜþÜÿ›ÿ›ÿ›ÿôÿ[ÿOÿ?ÿ^þ‡>ÿ¦ÿLÿMÿKþÉÿüõþéÿ8ÿ™ÿJÿLÿ½þ‡þþ¹þµþÜþÜþšþíý«þÉþšþ¡ý­þþæÿ£þ‡ÿDþ¢ÿ%ÿ—ý¬þ³þ¤ÿœþ«ÿºþ‡þ ÿGÿ5þšþ˜þŸþïÿOýÿtÿ£þÜÿ%ÿtÿtþèÿ¤õÿAþ¿ÿ8ÿSÿSÿSÿSÿSÿSÿSþ¸þ¼ÿÄþ³þØþÍþÈþáþÿOÿWþ©þ¶ùuð͋͂͋Í`ÍÛÍ7ÍÍðÍÿÏÍÍÍÿÏÍÍÿÎÍ•ÍÍ¢ÍàÍ Í¢ÍIÍ¢ÍfÍÊÍ¢Í ÍÍ¢͇Ífͣ͢ÍlÍLÍ$ÍÍ$Í1Í;ÍÊÍ$Íͯͳ͕ͣÍͬÍ5Ípͯ͸ͳÍ—Í•ÍìÍrÍœÍ\Ϳ͂ÍÍͰÍ\͕ͣÍ2Í:ÍXÍ5͕ͣ͂ͣÍ5Í‚Í0ÍÍþ{ÍÍ‚Í(Í6ÍfÍ‚ÍqÍ‚ÍÂÍ ÍÿöÍzÍ(ÍÍUÍhÍnÍŽÍ¢ÍÍZÍdÍ ÍÍfÍ‚Ín͇Í6͂͂ÍuÍf͖͂͢͹Íq͇ÍfÍKÍWÍqÍW͢͢ÍÍàÍqÍOÍÊÍÊͰÍÍGÍͨÍ¢ÍÍœÍ͢͢ÍàÍÍ¢ÍÍCͨ͢͢ÍÿþÍÍ¢Íf͢͢ÍqÍLÍÍÍ$Í€Í_ÍYÍVÍÍiÍ¢ÍWÍVÍ4̀͌͹Í ÍÍ…ÍÍŠ͹͹ÍÚÍÍf͵Í‚͵ͳ͂͂ÍBÍFÍ^ͰÍšÍfÍ\ÍÿÿÍjÍÌÍ|ÍFÍEÍ…Í…Í5Í Í‘ͧÍÍÍuÍÍ\Í5ÍÚ͹ÍB͵ÍHÍÿìÍÍÍ?ÍcÍ ÍEÍ?ÍcÍÍ#Í?Í.ÍLÍ–ÍÿÿÍÍfÍÍ ÍSÍ ÍSÍÍÍfÍ<ÍÍ'ÍHÍÿìÍqͤÍnþ¢þ¼ÿŸÿŸýÓü%ükÍ¢͹ÍÍPÍ¢ͬÍâÍôÍ7ÍÍ®ͳÍÍÍCÍŠͨÍÚͨÍÚÍÍ ÍÍ<Í¢͵͎̈́ÍTÍTÍSÍ‚ÍqÍ‚ÍLÍ‚Í$ÍEÍ$ÍEÍ$Í^ÍÍÍ_ÍšÍ_͚͢͹ÍÿéÍÍÿéÍÍÊÍÍͨÍÈÍÿþÍ ÍŒÍ¿Í¢Í¿Í_ÍšÍÍf͆ÍÍ€ÍÍ€ÍÍ͢ͅÍgÍ…ÍhÍ…ÍÍÍCÍŠÍMÍzÍ¢͹Í¢͹ÍfÍ‚ÍfÍ‚ÍfÍ‚ÍWÍ|ÍÍBÍÍBÍÍBÍ_ÍšÍàÍ ÍiÍjÍ7Í{Í$Í}Í$Í}ÍnÍŠÍ ÍaÍÍ ÍÍgÍÍÍiÍVÍqÍ‚ÍÍÍ\ͯÍÿþÍ ÍfÍŠÍͨ¤Ó²ÃÏ;ÃŰÃÃ\qÁ¨ÃÅÃÉÃq¨ÅÃÃ;9VV¤¤ÃÃw/ÍHÃÍÍðÍNÍÍNÍðÍ7Í{Í ÍX̓Í…Í Í`ͬÍ‘̓ÍÍ Í%ÍÍFÍsÍuÍmÍJÍÍ`ÍÍ'Í Í Í Í®ÍÏÍÍÿûÍÍU͂ͥÍÍÍͳÍhͲÍìÍÈÍp͸͂͋Í5Í5Í%ÍÍÖ̓̓ÍËÍ9Í9Í´Í£Í?ÍÍ?ÍEÍÍ“ͼÍñÍ Í[ÍEÍÊÍËÍ Í Í“ÍÿùÍÍ®ÍÜÍÿÍ×ÍœÍÝÍÍÍïÍCÍ‘ÍÝÍÝ͇ÍÍÍØÍØÍ×ÍÿëÍÍìÍ-Í0Í-Í-ÍÍÍRÍRÍ-Í*Í8Í~Í?ÍÍ:ÍÍÍ-Í´Í?ÍìÍ~ÍÍÜÍ!ÍÍÍÝÍÍ*ÍÌÍDÍÍ"ÍÍÍÝÍÍÍÿÂÍVÍŠÍÿÆÍÿáÍÿÄÍ6ÍñÍhÍ|ͤͤÍCÍuÍ*ÍÍÍAÍTÍ*ͯÍ„ÍWÍ.ÍëÍ£ÍcͰÍ®Í"ͨÍÍmÍuͤÍWÍVÍVÍÍÐÍÐÍXÍýÍ­Í Í…̓Í-Í:Í8ÍÍQͮͮÍ-Í@ÍØÍ*Í*ÍØÍSÍàÍáÍÍÍÍðÍóÍAÍÍÍ7ÍuÍµÍøÍÍ@Í@ÍÍ4ÍôÍ ÍÍ+þ°þ„ÿ…þ©þÆþÔþÆþÔþbþbÿoÿtþèÍ̀͢ͳÍ¢ͳÍ¢ͳÍq͂͊͊͊͊͊͢͢͢͢͢͢͢͢͢͢ͅͅͅͅͅÍÂÍŠÍqÍÍ¢͹Í¢͹Í¢͹͉͕͢͹ÍÊÍÍÊÍÍ¢ÍìÍ¢ÍìÍ¢ÍìÍí͆Íí͆Íí͆Íí͆ÍÍcÍÍcÍÍcÍ¢ÍÆÍ¢ÍÆÍ¢ÍÆÍ¢ÍÆÍfÍ‚ÍfÍ‚ÍfÍ‚Íf͂͢ͳÍ¢ͳÍ¢ÍòÍ¢ÍòÍ¢ÍòÍ¢ÍtÍOͧÍOͧÍOͧÍOͧÍOͧÍL;ÍL;ÍL;ÍL;ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹Í ÍEÍ ÍEÍÍÍÍÍÍÍÍÍÍÍ$Í^Í$Í^Í$ÍBÍIÍ“ÍIÍ“ÍIÍ“͹;ÍÍBÍ€ÍÍ–ÍÍ€ÍÍ€ÍÍ€ÍÍ@ÍÍ€ÍÍ€ÍÍ€ÍÍ€ÍÍ€ÍÍ€ÍÍ€Í̀͢͢͢͢ͅͅͅͅÍjÍU͢͢͢ͅͅͅÍÊÍÍÊÍÍfÍ‚ÍfÍ‚ÍfÍ‚ÍIÍXÍfÍ‚ÍfÍ‚ÍfÍ‚ÍfÍ‚ÍfÍ‚ÍfÍ‚ÍfÍ‚Íf͎͂͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹ÍŽ͹Í$ÍBÍ$ÍBÍ$ÍBÍ$ÍBÍÍÍÍÍÍÍÍÍÍÍþÿÍþÿÍþÿÍþÿÍÿÍÿͯͯͯͯͯͯÍÿGÍÍýÀÍýÀÍýÀÍýÀͳͳͳͳͳͳͳͳÍÿGÍÿ@ÍýÀÍýÓÍýÀÍýÀÍý£Íý£Í•͕͕͕͕͕͕͕ÍÿGÍÿ@ÍýÀÍýÀÍýÀÍýÀÍý£Íý£Í‚͂͂͂͂͂Íÿ«Íÿ¤Íþ$Íþ$ÍþˆÍþˆÍ£Í£Í£Í£Í£Í£Í£Í£ÍþÜÍýÀÍý\Íý˜Í5Í5Í5Í5Í5Í5Í5Í5Íÿ«Íÿ¤Íþ$Íþ"ÍþˆÍþˆÍþYÍþYÍÍͯͯͳͳ͕͕͂͂ͣͣÍ5Í5ÍÍÍÍÍÍÍÍÍÍÍþÿÍþÿÍþÿÍþÿÍÿÍÿͳͳͳͳͳͳͳͳÍÿGÍÿ@ÍýÀÍýÀÍýÀÍýÀÍý…Íý…Í5Í5Í5Í5Í5Í5Í5Í5Íÿ«Íÿ¤Íþ$Íþ$ÍþˆÍþˆÍþYÍþYÍÍÍÍÍÍÍÍÍÍÍÍÍóÍÍóÍÿéÍͳͳͳͳͳÍþöÍÿ2ÍþöÍÿ2Í¢Í*Í*Íÿï͕͕͕͕͕͕ÍÊÍÊÍþôÍÿwÍ*Í*ÍÿïͣͣͣͣÍÍͣͣÍ$Í$Íþ»ÍþîÍÿ@ÍÿêÍÿêÍËÍ5Í5Í5Í5Í5Íÿ0ÍÿwÍÿ0ÍÿwÍ;ÍóÍìÿÖÿ ÿ×þLͪͪÍÿöÍÿöÍÿûÍÍÍ]ÍŽͱͲͲÍ®ͶͶÍPÍuÿ×þMÿÿÿÍÍöÍͦÍZÍnÍíÍÿûÍÌÍÿÿÿÿÿÿÍeÍÍÍÍÍÍ6ÍqÍqÍ"ÍPÍcÍÍ-ÍÍÍ1ÍŠÍ[ÍÍLÍÍ<ÍÍqÍÍÍqþ“ÍÍÍÍÍÍ;Í_ÍÍÉÍÍÿæÍÍ Í%Í9Í­ÍÍvÍÍvÍÍvÍvÍiÍ ÍiÍÍuÍÌÍðÍNÍÍ4ÍœÍëÍlÍtÍtÍsÍtÍŠÍsÍÍËÍÿöÍÍÍÿöÍÍÿöÍÍÿöÍÿöÍÿöÍÿöÍÿöÍjÍÍjÍjÍÿöÍÿöÍÿöÍÍjÍjÍÿöÍÿöÍÿöÍÍjÍjÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÿöÍÍÍÍÍfÍÍÍÍwÍÍhÍhÍÍÍ4ÍÍÍsÍ£ÍhÍ®Í%Í%ÍnÍÍÍÍ<ͤÍfÍaÍfÍ„ÍÍp͘Í_ÍžÍÍÍ¢ÍnÍÍ¢͹ÍŽÍìÍIͤÍqÍ`ÍÍÍÍÊÍÍ$ÍRÿJÿ³þîþîÍÿÍÿÍøÍøÍøþ þ ÍÍÍ Í Í ÍTÍTÍ Í ÍZÍÍ7Í{ͬÍ‘̓Í`Í'ÍÍÍÍÍÍÍÍÍNÍðÍ7Í{Í~ÍÍ…Í‘Í`ͬÍ‘ÍÍ%ÍÍsÍuÍJÍÍ`ÍÍ'Í ÍNͬÍuÍüéÿýüüÍÛÍÍÛÍÛÍuÍ%ÍúÍêÍÅÍÍüÍÿþ?ÍþÖþÖþÏþÖþîþÂþ7ÍÿåþîþîþÂþÂÿYþµþÖÍÍÍÍÍÍÍÍÍ͕͕͕͕͕͕͕͕ͣͣͣͣͣͣͣͣÍ͢͞͞þÌÿXþÝþÐþÂþÏþ×þÝþ×þØþSþUþ|þÂþÇþÇþÇþÂþSþSþlþ¸þ³þ³þ³þ³ÍjÍHÍÍÍ-ÍÿèÍ ÍÍTÍ/Í/Í`Í`ÍÍÍÍ‘ÍÄããÍt$þ€~~6ou~ŠŒ¡ÎÇêôÊ›žùEMWY[]}´ÄÓÛïôþ   " & . 0 4 : < > D ^ o  ” µ ð!!!!"!&!.!N!T!^!„!•!¨"""""""")"+"H"a"e###!%%% %%%%%$%,%4%<%l%€%„%ˆ%Œ%“%¡%¬%²%º%¼%Ä%Ì%Ï%Ù%æ&<&@&B&`&c&f&k&o,m,w.§!§Œûû6û<û>ûAûDûOþ#ÿÿ  8tz„ŒŽ£Ð‘Ððþž  HPY[]_€¶ÆÖÝòö   & * 0 2 9 < > D ^ j    ð!!!!"!&!.!M!S![!„!!¨"""""""")"+"H"`"d### %%% %%%%%$%,%4%<%P%€%„%ˆ%Œ%% %ª%²%º%¼%Ä%Ê%Ï%Ø%æ&:&@&B&`&c&e&j&o,`,q.§§ˆûûû8û>û@ûCûFþ ÿÿÿãÿÂÿÁÿ½ÿ¹ÿ´ÿ³ÿ²ÿ±ÿ°ÿªÿ7ÿ/ÿ*èçìçêçéçãçáçßçÝçÛçÚçÙçØç×çÕçÔçÓçÑçÐçÎçÍçÀç¾ç½çºç·ç¶çµç±ç°ç¯çªç‘ç†çwçgç\ç"ççæÿæõæòæëæÍæÉæÃæžæ“ææ(æ%ææææææ æ åîå×åÕå9å,åã?ã>ã5ã2ã/ã,ã)ã"ããã âúâçâäâáâÞâÛâÏâÇâÂâ»âºâ³â®â¬â¤â˜âEâBâAâ$â"â!ââÜ+Ü(Ú‰aŠa$ ° – • ” “ ’ ‘ Á   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾Ýrdeißx¡pkvj7ˆš2s9:gw*-,q5l|Z¨ºcn1T6+m}àb‚…—ÑÒÙÚÕÖ¹xÁ:îêë±²Þy×Û愌ƒŠ‘Ž•–”œ›ó‡q™š›zžœˆ@G[ZYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! , °`E°% Fa#E#aH-, EhD-,E#F`° a °F`°&#HH-,E#F#a° ` °&a° a°&#HH-,E#F`°@a °f`°&#HH-,E#F#a°@` °&a°@a°&#HH-, <<-, E# °ÍD# ¸ZQX# °D#Y °íQX# °MD#Y °&QX# ° D#Y!!-, EhD °` E°FvhŠE`D-,± C#Ce -,± C#C -,°(#p±(>°(#p±(E:± -, E°%Ead°PQXED!!Y-,I°#D-, E°C`D-,°C°Ce -, i°@a°‹ ±,ÀŠŒ¸b`+ d#da\X°aY-,ŠEŠŠ‡°+°)#D°)zä-,Ee°,#DE°+#D-,KRXED!!Y-,KQXED!!Y-,°%# Šõ°`#íì-,°%# Šõ°a#íì-,°%õíì-,°C°RX!!!!!F#F`ŠŠF# FŠ`Ša¸ÿ€b# #б ŠpE` °PX°a¸ÿº‹°FŒY°`h:Y-, E°%FRK°Q[X°%F ha°%°%?#!8!Y-, E°%FPX°%F ha°%°%?#!8!Y-,°C°C -,!! d#d‹¸@b-,!°€QX d#d‹¸ b²@/+Y°`-,!°ÀQX d#d‹¸Ub²€/+Y°`-, d#d‹¸@b`#!-,KSXа%Id#Ei°@‹a°€b° aj°#D#°ö!#Š 9/Y-,KSX °%Idi °&°%Id#a°€b° aj°#D°&°öа#D°ö°#D°íа& 9# 9//Y-,E#E`#E`#E`#vh°€b -,°H+-, E°TX°@D E°@aD!!Y-,E±0/E#Ea`°`iD-,KQX°/#p°#B!!Y-,KQX °%EiSXD!!Y!!Y-,E°C°`c°`iD-,°/ED-,E# EŠ`D-,E#E`D-,K#QX¹3ÿà±4 ³34YDD-,°CX°&EŠXdf°`d° `f X!°@Y°aY#XeY°)#D#°)à!!!!!Y-,°CTXKS#KQZX8!!Y!!!!Y-,°CX°%Ed° `f X!°@Y°a#XeY°)#D°%°% XY°%°% F°%#B<°%°%°%°% F°%°`#B< XY°%°%°)à°) EeD°%°%°)à°%°% XY°%°%CH°%°%°%°%°`CH!Y!!!!!!!-,°% F°%#B°%°%EH!!!!-,°% °%°%CH!!!-,E# E °P X#e#Y#h °@PX!°@Y#XeYŠ`D-,KS#KQZX EŠ`D!!Y-,KTX EŠ`D!!Y-,KS#KQZX8!!Y-,°!KTX8!!Y-,°CTX°F+!!!!Y-,°CTX°G+!!!Y-,°CTX°H+!!!!Y-,°CTX°I+!!!Y-, Š#KSŠKQZX#8!!Y-,°%I°SX °@8!Y-,F#F`#Fa#  FŠa¸ÿ€bб@@ŠpE`h:-, Š#IdŠ#SX<!Y-,KRX}zY-,°KKTB-,±B±#ˆQ±@ˆSZX¹ ˆTX²C`BY±$ˆQX¹ @ˆTX²C`B±$ˆTX² C`BKKRX²C`BY¹@€ˆTX²C`BY¹@€c¸ˆTX²C`BY¹@c¸ˆTX²C`BY±&ˆQX¹@c¸ˆTX²@C`BY¹@c¸ˆTX²€C`BYYYYYY±CTX@ @@ @  ±CTX²@º ³  ±€CRX²@¸€± @²@º€ @Y¹@€ˆU¹@c¸ˆUZX³ ³ YYYBBBBB-,Eh#KQX# E d°@PX|YhŠ`YD-,°°%°%°#>°#>± ° #eB° #B°#?°#?± °#eB°#B°-,°€°CP°°CT[X!#° ÉŠíY-,°Y+-,Šå-A&SMURMUVTUTO3NUL3MU==<U<:U;=:U54²€A.444.U3H2U€22.U1=0U00.U/=.U .`.. . .²U¸-²=U¸,³ÿpADD>UC=BUB>U?=>@gUýõP(òF(ñF*ðF5îŸî¯îoïï¿ï ïï_ïoïì@ì ëFÿçä&æä=åääãâFâ@âFáàF¿àÏàßà@à36FàF¼>U@ =Uß=ÝUÞ=ÜUAU¯ P@SÿÝÜU ÜP܀ܰÜÜÐ3_ÃoÃÿÂÁP&p¾ ¾0¾À¾p¾€¾¼¼/¼?¼o¼¯¼ß¼¹­& ¸0¸P¸p¸€¸¸ÿÀ@¸)F· ·P·€·°·€µ°µ³?³ï³¸ @+ªH€°°°°À°Ð°/¯?¯ ­°­À­Ð­/¬?¬Ÿ«ÀªÐªA 2U @Pœ`œpœ™–&˜F&0—@—¸ÿÀ³–F¸ÿÀ@ –F¡”< A E<GE<FE@(d•ÿ”¯”¿”@”1F@”F@” F“/“?““ o @ ’&‘Sÿß0/o ¸ÿÀ@ F Ž0ŽO_o0ŒŒŒ/Œ@ŒF¿  0 ÿÀ ² F¹ÿÀ @PF‹‚&‰J<ˆ‡=‡„<†JÿŸ…„ „0„0ƒ‚@‚ FsP&oF5nF5U3U3Uÿ`P&_P&¹ÿà²&F¹ÿà@F^ZH\F1[ZHZF12UU2U¸µ<¹²5@¸²(F¸ @%P&RPïQÿQ@Q58F@Q%(FÏPßLLFKFHP¸@bJF&IF5HF5GF5¯FßFïF€FU2UU2UUÿd?_/Ooßÿ?ïoO ¸±TS++K¸ÿRK° P[°ˆ°%S°ˆ°@QZ°ˆ°UZ[X±ŽY…BK°2SX°`YK°dSX°@YK°€SX°±BYststu+++++++stu++++s++tt++s++++s++++++++++++++++++++stts+++++++s+sttt+usttt++ss+++s+++++++s++sts+sststtst+ssst+s+ststu+st+ss++sss+s++++++t++^s+^s++++^ssssts++++s++++s+++^st++s++s++s++++++++++ÌÌ}E`E:wÿìÿìÿ_ÿìþWþW´½ª È´…ˆ~¥À¿É«Œ¼›4¹´|”_¨ox¤Èƒ»^Š`t¸ÀP±ÃþLë²Ã {+–É–ÛØÕ’¨k’·k›ò’>n¥E‰ `LÃN¤[^€io^h&J‡{uh‚ü± ÿôƒ‰–iq[R²»®µ‹©p¼ý™‘‘MMddŸ¨þhþœ›EEþöÿézEM ÿî˜üónLbFèÌüÿòû þÓ¿[ý"ÿìÿxÿðþ`þSû¥²Ãy_hËÿìÿÓþƒÛªº HHHHœè `Tt¨hT”Èø4ð ` ø ì p ( ø TT(xØ<¼Ð<ÔLÀHÀlØD´4pHøÈxÜ”  € ä!4!p!À""L"„#x$$à%ˆ&8&¼' ((ˆ))x)Ð*ˆ++€,(,Ì-@..ˆ/ /t0,0¨141”2T2ˆ3L3Ð3à4455ô6Ð7€7Ð9 9|:Ì;¸<\<¤<´=à=ô>t??À@¬@äAtAäAôBxBäC\DDLDˆDÌE€E°EàFF@FtF¤G|G¤GÔHH4HhH˜HÈHøI,IèJJHJxJ¨JØK KtLPL€L°LàMMDMÈN°NàO O@O|O´OäQ(QPQ€Q¬QØRR@RlR¨RðSðTTLTxT¤TÐUUŒVlVœVÈVøW,WXXX0X`XXÀXìYY<YlY˜YÈYôZ$ZPZ€Z¬ZÜ[¼[Ì\°\à] ]<]h]˜]Ä]ì^^D^t^¤^Ð__,_\_ˆ_¬_Ø``ÀahbbLb|b¬bÜc c8c`cˆc¸dd˜e<ele„e¬eÔfHfxfüg$gLgxg¨gÐgüh|ii@ipi˜iÀiðjjPkk¤kÔll0l\llÄm¬n¬nÜoo0oXoˆo¸oèppDppp˜pÀpðqqDqhq˜qÄrDrðs sPs€s°sàttXtŒtÀtôuu@upu uÐvv4vdvvÀvìwwHw x„ydytz,z´{`{ô|¼}ˆ}˜~<~̈€0€ D‚ ‚¤ƒ@„„À…l…|† †¸‡L‡Øˆx‰$‰¨‰¸‰ÈŠ€‹0‹ÐŒx àŽ„T 0ð‘ ’’´“ “¸”|•4•¼–H–ü— ˜D˜ô™ šH››àœ€Üžxž¨žìŸxŸˆ ˆ¡€¢´£4£Ü¤¥H¦¦ô§$§T§„§´§ä¨¨@¨p¨¨¨È©© ©X©x©°©Ð©àªª|ª°««@«l¬D­L­|­¬­Ü®€®˜®°®ä¯¯<¯\¯ˆ°@°ü±ì²²H²Ü³x³¨³Èµ¶´¶ä··@·l· ·Ô¸¸4¸h¸œ¸Ì¸ü¹0¹d¹”¹Ä¹øº,º\ºŒºÀºô»$»T»ˆ»¼»ì¼¼D¼l¼”¼¼½ˆ¾d¾”¿D¿´ÀÔÁаÃ4øÃèÄÄ0ÄHÄ€ÄÜÅÅPŀŬÅàÆ4ÆdÆÇ4È0ÈüÊÊüËÐ̼ͬÎδÏÄÐhÐðÑlÒdÓ ÓÔ ÕDÕÜÖˆ×DØذÙTÚ ÚðÛØÜ„Ý(ÝìÞ|ßTààÜá„â,ãã,ã<äDååˆæ€æç4çÜèØéTéèêœë8ë”ëøì°ípíÌî”ïPððàñ|òòˆò˜ólô,ôìõ\õÌöTöÈ÷\÷°øøœù4ú0ú¬ûLûÈü”ýý˜þXÿ ÿ0ÿŒ˜üˆDìÐ\èx°ÀŒdt 0 ¨ ì ¬ l , Dxt`€pLÀŒ¨`tt¤DÄÔä(l°üLÜl|ŒÜ,tÀð $ d ¤ Ô!!D!€!Ð""P"œ"à#$#x#¤$$T$ü%`%ä&H&œ&ü' ((È)D)T)Œ)Ð**X**È++`+¨,,d,°,ô-8-¤-à.@.œ//X//È0080|0´11H1€1Ô2D2p2œ3343t3Ø4D4¤4ø5$5h5È646ˆ6È7 7P7”7Ì88<8|8´8ø9<9|9¼::@:„:È:Ü;;„;È,>€>Ð?@?l?˜?à@L@x@¤@ÔAALAŒAÐBLB°C(CpC¬CèDXDœEELEEÔFFLGG¨H€HÐILL`L¨M M„MÈNNˆNÐOOPLP”PèQDQtQ¤RRlR¬S˜THTœUU˜V,VäWhX$X”YYpYìZ(Z`ZtZ„[P\\(\l\ä]]T]”^4^t^¤_@`,```p`€`¼aHaXahaxb8bHbXb¼bÌbÜchcxcÀcÐd\dld|ePe`eôf¬fàgg@glg˜gÄgøhÐiœj$jØk¬ldlämŒnnn°oDo¬p”p¤q<qÔrŒs s ttÔuŒvvìw wTw€w¬wØxÌyÄzPzhzœz¬{|||}} ~(~øhÜ€°à‚ˆƒP„ „´…L…䆨‡°ˆt‰HŠŠÄ‹pŒŒ„HŽŽ(Ž8ŽHŽà|Œœ¬$°‘t‘„‘¸‘ì’’P““@”0”@”P”„””•T––”–Ä–ô—$—Œ—œ˜4˜D˜T˜ð™™øšð›l›œœ8œ¸œÈœØœè0@P`øžžž|žèŸLŸÈ T è¡d¢`£ £Ì£Ü¤¬¥h¥¨¦D¦T§@¨$¨”¨À©P©Èª`ªÈªØ«$«4«D«« ¬`¬p¬Ø­D­¨® ®°¯H¯È°¬±p² ²<²l³8³h´P´`´p´ ´°µp¶ ¶Ì¶ø·(·T·¸¸ ¹D¹èºˆ»h¼D¼Ü½p¾8¾ü¿ÄÀ„ÁpÂXÃÌÅ0ÅÔÆlÇDÈÈÉÉDÉxÊdËLÌDÍ<ΤÏàÐÐ8ÐÈÑXÒÒhÒÌÓÓTÓÄÕ@Öð×ÄØÙ4ÙÔڌۄÛÐÜÜŒÜüÝ´Þlß„àŒá”â ãPääÄ倿4æèçˆè(è´é<é°ê0êðë¬ì¬í¤îxïpïØð@ðPðÀñDñÔòpóó„ôôˆõõ¨öHö´öÄ÷œøpù\úDúTú„ú´ûxüDüÜý|þþ¸ÿ<ÿÈPؘDT€°ä(8h”¤´èL|°à Ðü0`”Äx$Xˆ¼ì  H | ¬ à  H x Ô 0 d ” D ð  Tø¤ 0ä´„TÌ|$Èdt„Œ\l¤´ÄÔäHÜŒ <dì HœÐà0ô d ¸!!D!l! !ð"$"4"¤"´"à## #0#Œ#ð$À%4%´%ì&H&Ð&ø' 'd'œ($(`(„(°(Ü) )H)€)È**8*¤*Ô+€+ô,,à-T-ˆ-ø.\.ô/,/„/ø0t0ä1œ1Ð282è3X3Ð4l4ð5€6 6`77¨7Ä7à7ü848Œ99È;(< <<ˆ=0=¬>t>è?T?d?Ð@`@Ì@Ü@ìAdAìB¼CÌD„DÜE8E°FLFÜG(G8G¼H|IDITIdItJKKÐLL LlL|M M„N NèO´PˆQQŒRRÌSDSxSìThT°UTUÀV0V¸WtWôXœXðY\ZZü[ì\¤]ô^¬_d``Üa¸bcxcÌdHee¤f$f´ggph(h¨i,i¨jhjÄk|lTl¼mln(nÄnØnìoooÐpDpüq¬qÀr´sÈtÈu¬vôwðyyèz¬{°| }t~P~À˜€´ ‚‚¬ƒ˜„|…\†‡<‡ìˆX‰DŠŠì‹”ŒŒT쎠(@‘$’’à“Ԕȕ¤–,–ì—Œ˜L™,™àš|›xœ\TØž\žlžðŸpŸ¤ŸØ 8 ü¡T¡È¢¢è£ ¤D¤è¥d¦ ¦Ô§Ì¨L¨ø©¼ªˆªì«`«¼¬,¬Ì­¨®\¯,¯¤° °Ð±<±±Ü²$²p²Ð³(³€³Ä´L´t´ ´Ð´èµµ8µ`µˆµÈ¶¶8¶X¶€¶¨¶Ð¶ø· ·H·p·˜·Ì¸¸8¸p¸˜¸À¸è¹¹H¹|¹¬º\ºŒº¼ºì»€»¨»Ð¼¼¨¼À¼Ø½½(½P½x½°¾¾4¾Ø¿¿(¿P¿x¿ ¿È¿ôÀˆÀ°ÀØÁÁ(ÁXÁˆÁ¸Áä Â4ÂdÂ|¤¼ÂäÂüÃ$Ã<ÃpÃàÄÄpĤÅÅ4ÅÅÀÅìÆÆHÆxƤÆÌÆôÇ ÇHÇpǘÇÈÇôÈÈDÈxȬÈàÉÉ@ÉhɘÉÈÉðÊÊ@ÊhÊʸÊàË Ë4Ë\Ë„ˬËàÌTÌŒÌÔÍÍ0ÍXÍ€ͰÍàÎÎ<ÎpΠÎÐÎüÏ$ÏLÏ|ϨÏÜÐ Ð<ÐhИÐÄÐìÑÑ<ÑdÑŒÑÌÑüÒ,Ò\ÒÔÓ˜ÓÀÓèÔÔHÔ|Ô°ÔäÕÕLÕ€Õ´ÕèÖ ÖhÖœÖÐ××8×l× ×ÔØØ@ØxØ ØÈØøÙ(ÙXلٸÙìÚ ÚTÚˆÚ¼ÚðÛ$Û`Û˜ÛÈÛøÜ ÜHÜpܘÜÈÜøÝ,Ý`Ý”ÝÈÝüÞ0ÞdÞ˜ÞÐßß8ßdß”ßÄßôà$àTà„à¬àÔàüá$áTá„á´áÔââ$âTâxâ¨âÈâðãã8ãhãã¨ãØää8ädä”äÄäøå,å`å”åÈåüææ,æDæ\ætæŒæ¤æ¼æìççPç„ç¸çìèè è8èPèhè€è°èàééHé|é°éäêê0êHê`êxêê¨êÀêØëë8ëlë ëÔìì<ìpìˆì ì¸ìÐìèííí0í`ííÄíøî,î`îxîî¨îÀîØîðï ïPï„ï¸ïìð ðTðˆð ð¸ðÐðèññHñ|ñ°ñäòòLò€ò˜ò°òÈòàòøóó(ó@ópó óÐóüô,ôXôˆô´ôäõõ@õlõœõÈöö8ötö°öì÷(÷d÷ ÷À÷àøø ø@ø`ø€ø øÌøøù$ùPù|ù¨ùÔúú ú@ú`ú€ú úÀúàûû,ûXû„û°ûÜüü4ü`ü€ü üÀüàýý ý@ý`ýýÀýìþþ<þlþ”þÄþôÿ ÿ$ÿLÿ”ÿÜ$”<h€¬Ø0H`ˆx,\Œ¸äL|¬ÄÜTÌ„´ä<lœÌ  0 ` x  ¨  € Ä ð  @ l ” ¬ Ä Ü ô  X ¬ Ø \ ¼(Xˆ¸T”ÔxØ@\Äp´D|À|Ø XxØ8¸Ìˆh ä@¤(<PdxŒ\ˆl !"$#”$Ô&&Ð&ô'ø(”)D*Ü+È,ð-Ô.Ø0D1$182X3\4H5L66Ì7Œ8è9L9l9Œ9Ô::h:¼;|;à<<<œ<ø=ˆ>>Ì?¸@<@ˆA A<ALAŒAèBÌCClCÜDäE¸F<FÀGDG GèHDH HÔIIHIŒIÌJJ`J¬JüKLK°LLPL´M M|MÜN4N¤OO\OÌP,P„PôQdQÈRPR¼S S¨TT€UU|UàVlWW˜XTX„X´XäYYD\ÈciiDiŒiÄj(jTj„j´jèkkœl0n”nàoDoàplq¼rÈsÄtŒuhvv¬ww`wàxÈy°zTzÔ{x| |Ü~D ¬€H€ØlÜ‚L‚äƒ`„$„ð…À††l‡‡x‡Àˆ ˆPˆˆˆÜ‰0‰€‰ÐŠ$Špм‹ ‹P‹˜‹ÐŒŒ¼Pt´ØèøŽŽŽ(Ž8ŽHŽXŽh޼ŽèlÀè` ‘‘L‘”’’d’°“@“ˆ“ð”,”ˆ”ð•<•t•°––H–”–Ì—,—D—l—”—¼˜D˜Œ˜Ô™$™x™Àšš`𤛛„œ,0¼žpžÐŸÀŸè L ¤¡ ¡|¢¢p¢Ä£d£°¤¤`¤´¥L¥ø¦X¦Ä§,§°§ì¨(¨d¨ ¨è©0©x©À©üª8ªtª°ªø«@«ˆ«Ð¬ ¬H¬„¬À­­P­˜­à­à­à­à­à­à­à­à­à®®¸¯H¯ø°d°¨±T²8²´³x´,´Œµh¶,¶°·4·Ø¸¹ ¹ˆº$ºØ»P»È¼h½½”¾ ¾¨¿X¿˜¿ØÀ,À€ÀÌÁ@Á¤ÁüÂ0¨ÂüÃ8ÃtÃÀÃøÄ Ä0Ä|ÅXÅØÆ`Æøî@  /Í/Í9933103!!!þîýmþÉD*@ [?/+9/933310#353±”ÄÆÂ·ú¼ÉÉM¶Ì!@ ?33/2993310#3#3ŒŽ(àþ)àMý6‹E±@j     !  ! ¯Y ¯Y Ÿ O _ OO_ï@"H   /3?399//+]q]q33+3333+339939939939223910!!#!##53#5!3!33!!¢CþåXnVþ•TnTÉáCñYnXkXnXÓý@EjCAþÃlþh˜þh˜l=l˜þh˜þhlþÃ=Bÿs~Ä$,4¨@f 2 )- %-56**sY1 ) sY ))@ 'H@H2  sY  @ P ` @ P   ° ð  ?33/]3/]q+3?3/++33/9/3+3+39933333393310#5$7'.546753.'4.'>~ðà€þZFª ˆ¨IÛÑ€ºÊ-®€m¬š\.ü°/Zw~‚¤7d‰”|¢½ ¡¡Y%~}é)aˆ^•§‚‚‘©!jlþV*H\y.9M3eý*BV9#þ) uÿôÎQ%1[@6,## & 32)¶Y ·[ /¶Y  ¶Y ·[¶Y???+++?+++932393333103#3% #"&5464&#"326 #"&5464&#"326Ý‘¤“ü ’’Œ?JMBBLGC’’Œ?JMBBLGCIþ°§®¬©§©þ°wmjztpoóþ°§®¬©§©þ°wmjztpo+ÿì¡M%1;j@C6, &$2.4  <=E2 2  . 42 )QY!99QY?3+3?+9_^]^]]93333310"&'#"&5%.54632673274&#">&'3260I2™ÂÇÛ$ +¹¦’¯O•³„‘X%‘,v+a(:%0þ›`LYo=¡b4J´ˆ³Šx@} F;‰È² —<™Eˆ¢{KueKçž¶à+ìâ63‡IFQbRnrD?KüËËîaÇsˆ7öMÖÌ@ ?3/9310#3¬)àMVþW{Ì "@  ??93333310#&73ªÀ¾À§¤Ã¾ÀªþíþDìì»·ðìþCPþWuÌ "@  ??93333310#6'3u¥ÀÀĨ¨ÄÀâþèþGìñ½  ½ñðþLøüÔËc@0     u …    p€¸ÿÀ¶ H ?3/+]39/]9]333333999310% '7%73Ÿ-þæ¹w–œw½þè- ˆ¤g„IúHÿHøI†k)t´Wž @  ­Y³?+910#!5!3!¯“þX¨“¨`þT¬’¬þT’þ•µ+ @œ[›[++993310!© þÉþ•–ýjNÐ~p@ ºY//]+99105!N0Р ðÛ+@ ›[/+9310!3ðë+þÕrÿìYÌ@ ??9933103r5²üÏàú |ÿìOZ T@.   @ sY sY?+?+9/_^]Í^]q99339910#"!2#"32%53Oùóóôîÿùí·¢¦‘“ Ÿ”þXë£þ®þ›cT]Zþ£þ¦"ÿþÛþãþùžùù”jE8@   sY  sY?+3?33/+93331035!#52$73!·%þ놔4¦a‘ýNt”‚cûL‘<Z<@   sYsY?+3?+3/99333331035>7>54&#"'>32!1ϲŸŒŠ€r ¸îÂÕΟ!ÓumÝŽ¼Wox}qªÇÀ°såx¤›I’€ÿìKZ*v@A'$,$$ +,'sY!!!sY! sY@@ð?3/]q+?+3/9/_^]+9993333339910#"$'7!2654.+532>54&#"'>32KüâÖÿº$ˆ›[œafbVR…ƒw“ µ÷ÂÔ랉—·rºÌ¼ú~yKg7œ9hGjwzo­Â»§w°²geE F@'    sY  / o   ??39/]33+399333310#!533 !©´ýr{Ǽþþ ô?þÁ?ŒzüˆŽCýK€ÿìKEX@- sYsYsY sY?3/+?+9/+3/+993333333310#"&'732654&#"#!!632Kvã›Åò ¶9쨦‹I~?°/!ý…u®Ìû¼‹Òs¬£Ѩ‘|ž.7Ø‘þWZë—ÿìHZ#[@2 $%sY_  sY  !sY?+?3/_^]+9/_^]]+993333310#"3 &#">324&#"326HóÔìþð?S¬5³™ª1²sÀè·™ƒJ„K¡~—¾ÔþY=\|þá¬þêû[_íΠCwK˜Ì¨ž-E ,@  sY??+39939310#!5!-þ'¼õòýºýXýîaL‘…ÿìFZ&2j@9- ' " -'34 %*%*sY%%sY0sY?+?+9/+93_^]]993333339910#"&54675.54>324&#"3 4&#"326Fùçâÿž{pˆoʃ‰ÌlŠp‚›Þ‡{‰Š|#œˆ›—’“z¸ÖÒºµ®pb XYžeq®±õoqrnozþ€x‹r‡Šÿì?Z#_@8 $% sY Ÿ¯ïÿ sY sYp€?3/]+?+9/_^]3+993333310#"&'7327#"5463 4&#"32>?þöô¥Ç+¬6¸š­(Ât½åûÚÝÄ ‚––€L‡N¿þ¦þ‡‹›°öZmÿÍÔ÷þ¡É®‹¯E{ðÛ:'@ ›[›[/+?+933310!33ðëëë+þÕ+þÕ`þ•:0@ œ[›[›[?+++993393103!ðëþ…© þÉ+þÕû†–ýjtšWª;@ ?o@H/]3/+]39=/339933105 tãü¦Z;Í¢šþ’þ‘™tXWìV@; ­YoŸ¯@H­Y0P`pPp€°Ð/]]q+/+_^]+9933105!5!tãüãX””þ””tšWª9@?o@H/+]2/]39=/3399331075 5tZü¦ãš™onšþ^Í^1Z!E@!!! "# [_Y?+3//+9/9933933310#>7>54&#"'6$32531,S\nG)¯-O_kC(Ÿˆ‡©¸ ÏßýÃêIraBPJV7Fo]GNJU7mu’~ ÅÕÁûgÉÉ,þå¥Ì<I@R=-.D.5 '55JKF FÖY @ÖY    _ o    -  -199#ÕY91*ÕY1/+?+9///_^]^]3^]3/+33+399339333310#"=7##"&54632373325#"3267#"&5$324&#"326¥¥Œ"{Njwa§gG[ tc(1NcÚ´”ä|èÊ^®eGsØw¥û†š¼žé~þbF;?jArJv9óþÖþŸXkȹ¡¥SZ—þÒDX*ùU×þzùþËþŽFXWcZÂmî»ñµþµ¼jm…ó„þç¾:ÌE S@*   _Y ZK?2?33]]9/3+3/9323933999910!!#3 ! Šý͉ÄþÙõýœ E—Ï­~þ‚Eú»µ'ÔþYô¢€E P@(  _Y_Y_Y?+?+9/+99933393910#!! 4&+3 4&+!26€þîôþ(œð|§·þî——ßá,Q²°ü ¯¥|´ÈEþ¹z¤²ãk[þ`þrxþ"yqÿìvZe@?    _Y0@P °àð  _Y ?+3/_^]q?3/+_^]]939333103267! ! .#":«°e¤9Ÿ•þ²þùþåS¨%g«¥©þïþAþŒjS±þ±Aqƒþþ¢eE(@  _Y_Y?+?+993310)! &+32eþÍþâþŽ7ICÀÜïy¢Ôΰþµþ›Eþ·þ´ñûó ¢bE W@6   _Y//?_¯ß_Y _Y?+?+9/_^]q+9333103!!!!!¢—ý(œýdEœþZšþ3œÂ=E L@/ _YO_?o @)H_Y??+9/+_^]r+93310!!#!¤ý\¿{©þžýãEœqÿìOZP@  ¸ÿð@ H_Y _Y _Y?+?3/+9/++993333910%#"! &#"!267!5!Måéúþì Zs«PЩ¡UD’.þÛß…™sJ[Vþµ8çüþçýÞ* P ¢*E ;@   _YP ° ?2?39/]q+99333310!!#3!3kýö¿¿ ¿oý‘EýÊ6ú»ÊE 9@ _Y _Y?+3?+393333310!!!!5!!Ê7þÄ<üÉ<þÄEœûóœœ °ÿìÚE0@ _Y _Y?3/+?+9933910#"&'732!5!ÚÒ¾«Ì#»uYÑþÉõ¤Ñç²Àv€ œ¢ËE H@&     H v†?2?399]33+99333993310!#33 ëþ£¿¿<áþE~©þ+Eý_¡ýÄü÷íLE@_Y?+?9931033!í¿ EûWœKEH@  ¸ÿÀ@ H?2?39/3+33933333310!4?#&'#3?3©@¤‰¦N í¹/,¹ád‡BdÎUþJ¶.õþÓüœEþ5²ZŒêú»¢*E D@&   Œziƒuf?33]]]?3]]]399333310!#3&53DýøªÞ¬j¬Rü”EûŽ‚`ú»fÿìfZ (@  _Y _Y?+?+993310#"32! 32fþ÷øùþúý÷ÉþÊþÈž™£”©þ¯þ”fWQ`þ¥þªýëþòþì¢_E 4@ _Y_Y??+9/+9933310#!#!24!#326_wÝ‘þç¿ÌîÀþ¸öþ•«±}ÄnýþEÕÂþýí’fþ}qZ C@$!"_Y_Y `Y_  /]+?3+?+93339310327#"&'&32! 32fÅ·)†e7<]U–Ã?Ûæý÷ÉþÊþÈž™£”©þÞþ¡,~r †©Êc@Q`þ¥þªýëþòþ좙E _@5     _YO?o¿ï _Y?2?+9/_^]q+399333933310!##!24)!26½þ’î¿âéô»øþÐþð™?ýÁEÁ´•Ìý«Íßþ*€OÿìhZ,J@(" -."  `Y _Y@P?3/]+?3/+999333310# 732654.'.54632.# hþóùþ7J¹°“Ÿ¥Aj…D¡‰R*óãÔà,¼}þå5[yE‹z_D'r¸Îf%u|rFX8#*BUnJ­»”°!peÕÉEüzVÁ•‚†ÌE[@1   /O_   $  ?3333]3?39/]39933933333310!# '#3>33úÐJM+1wÐÓ½m +z¯EO1#h½ À}ÊþSEü½ƒ×Š´½ýþÞÜZC$©E @@!     ?3?3999339933910 3 # # 3fMÍþMÜÍþŠþ‹ÍÜþMÍDý|ý?=ýÃÁ„$¨E>@! @P`???39/]]33933923310#3 3ļþÍvtÍHý¸HýýcIƒE 5@  _Y_Y?+3?+399333310)5!5!!ƒûÆ2ýÂüÎaœ‹ûâšþW½Ì(@ õYõY?+?+933310!!!š#þ‘oþWu‹ù¡‹sÿìZÌ@ ??9933103¤üϲ5àú þW1Ì(@ õYõY?+?+9333105!!5!oþ‘#þW‹_‹ø‹…ºFE1@?3]3/2993393310 #3¬þ·þº˜zË|º#üÝ‹üuÿûÿ$Ñÿ„@ »Y/+33105!ÖÜ``’±:´@ Œ[“?+9310%53¾þÔÅã±æï€ÿìˆN"/d@:-'' 01(QY oßïÿ PY #PYQY ?33/++?+3/_^]9/+93333310%27#"&'##"&5%754&#"'!2%2>=M!DGd[A±‚ž Æìjtvh ¼.yÈÉ*ýÚ`”R¾v|EYopipyj¬–];ƒsTX$»±þ.PQ\šRY0cRRd³ÿìBÌ!8@  "#PY PY?3+???3+99333310#"'##653363 4&#"326B˽ôZ®´[ó‡º{ƒ•ˆ„—‡y"þäþæ¸0h 6©íþYA\ÈýÌàÉÛÞÑÊÑ‚ÿì8Nh@ p`p€À ¸ÿÀ@ HPY PY@H?3/+]+?+3/+_^]q9933331032.#"3267#"‚ô¶ìÀ€vž““l޾ wÄyõÿ"¯”[iÄÛÞÍjm `Y ŠÿæÌ":@#$ PY PY?3+?3+??99333310%#"!23'3#.532654&#"^1¢yʾˆy£1´¬ýáw†’Œ‡•‡x®i_6Vb—£û©6t+lÞËÓæ×ÄÎ…ÿìFNO@,  PY PY PYßï€ ?3/]]+?+9/+93333103267#"32"!B¡Œg›ž,ë£ìþùëëòþ%†œH÷¶ÎYM-|„& þâþßÒ¯™HŠKÌ3@  PY PY??3+3?+9933310#!5!54632.#"!D´þúÁáH§*·/hj1ë¬üT¬Žͬ ‘ .h] ŽþXK!/Q@+(" 01%PY,PY PY 0?2/]+?3+?3+?9933333310"&'7325##"32346734&#"32>g¨Ì¸q\ø1®xÆ·ÄÌq§-«Ô!–ƒ‰z3laUFþXŠKQ;Âgj ia 6ªüÆãåÏÁݿߗ¯P_·¹Ì0@   PY??3+?3993333103363 #4&#"#¹µ iê^µis|Ÿ´Ìþz;ŠÍþƒý/·ˆ„µ›ýeÌ <@  SY PYPY?+3?+?+93333310%!!5!!5!'53é|ü*¦þÁóÈÈŽŽŽŽÒÀÀuþWDÌ6@  SYPY PY?+?+?+9933310#"&'53265!5!'53DàÏO¤-–{€ŠþiKÈȻҌ"„wÅŽÒÀÀìeÌ =@    ?2??993399333339910!#33 ’þ’„´´ÛÓþIÎóbþoÌüa þ/ý—†\Ì ,@ PYPY?+3?+933310%!!5!!5!à|ü*¦þßÕŽŽŽ°ŽcdN'E@"''   ()#PY  ?22??333+39933393910!4&#"#4'33>323>32#4&#"1A@O©•"hNXW(oUvf¨1ABM®š{À¤ý¡S½*0f]`djZ¬Ñý/®š{¨¨ý³N/@  PY  ?2??+39933310!4&#"#4'33632dis|Ÿ´ªiñ­ª·ˆ„µ›ýS½*,9OÍ»Âý/‚ÿìIN (@  PY PY?+?+993310#"324&#"326Iûíè÷ýèô™›ŸŽþïþß$þêþæ×ÔØÓÒÛÖ³þWBP#8@  $%PY !PY?3+???3+99333310!"'##4'33>324&#"326BþxöUµ¯2›}ÆÂºzƒ—††•…z"ýʸžþYª63ci_þïþãâÁÛÞÕÆÊŠþWJ"5@  #$ PY PY?2+??3+99333310234673#7##"4&#"326š1¯µ5ž|ʾÕˆ”†yzƒ“‹JY_ 6äû6·¨ke6ýàÔÇÌßÝÌÚòN)@RY ???+3993310&#"#4&'33>32pd¡Æ´«(2`„_hf–ò»þ½LÎcŠppi5§ÿì$K&N@* '( PYp  PY?3/+?3/_^]+999333310#"&'73 54&'$.54632.#"$éÎÎ×!Ÿ}—beþøŽLÔɰÒ¢ xwõS\w£R5š¯‹VO«@OAJoS“¦…HJ—£y²¥:ýRœy° sü­½*,9Op]±ÌÑE‡: 4@   UD?33]]?3993393310!#3?3ËÕþOÊ 4#'É:ý@5¸uv¸:Z@.    u …  ?3333]3?333/9/39933933333310!#'#36734>73úÌ9'¨Ë·²]!'‡Á‚  e°×Ê‹ýê:ý¡þø> 6¨þWilZ_V_^m: <@    ?2?3999333393310! # 3 3 ¤þ¿þ½ÂŸþsÇ,*Éþs¤¼þD,þ[¥ýôýÒBþW‰:9@     PY?+?39/39933993310"'5326?373$J2&.O‹0þ*À[)6¾þ8Y¿þW ‡v1/ý~ànûÆë¾“,: 5@ PYPY?+3?+39933331035!5!!“©ýLýVω&‹‰üÚ‹ãþW%Ì#V@2# #$%õY/Ïï#õY"õY?+?+9/_^]+9933310"&54&'5>5463!#";‚¤’‚‘¢„ Õ[P€gfP[ÕþW©†_kx‰zh`‰¦‹Xkþ¦b•“gþ¥jY‹þW¹Ì@ ??93103¦þWuø‹§þWéÌ#Z@5   $% õY/¯ÏïõYõY?+?+9/_^]+9933310532654675.54&+5!2#§Õ[Q€ff€P\Õ …¡’‚‘¤‚þW‹Yj[f”–aZiZ‹¦‰þ iy‰yjþ¡‡¨l)`'8@ ­Y@H@ H @ ­Y  /]+3Í++2+99102327#"&'&#"56sf…“W$‚r=#5354632.#"!!!267“2¸üWG%ººÙÍ™Ì"®uNzx˜þhHSX;9 ððš,NqRŽÜÂÊym9?@s}ØŽ‹€,55žá/s'a@3"()  °Y0  %°Y/+3/3/_^]]+933333/399331047'76327'#"''7&732654&#"¶NdhcrŒ‰rah`PRdfer‰miffNš¤ur¦¥su¤¬ŠrdgeRPai`u‡ŠrdieNPiifrŒr¦¢vt¥§4˜EZ@/    `Y `Y  ??399//33+33+3933932310!!!!#!5!7!5!3 3üAþþ²þƒ}þ@þeÇimÇ§Ž‰ÿ‰Žžý—iþ9¹®&@ ??99//93331033¦¦¦¤ üöû• üõŸÿT,Ì4AŠ@I?;;,/85 22,,5%,BC8/?)/$/ //"QY` QY?2/+/3/_^]+99_^]]33339933333333399399102.#"#"&'732654.'.5467.5464&'>x­Õ¡m}32327#"'##"&732>=δ²¿´T\ •°’™¦+24š+’fy‰“RFEsBš‚vfu{+¶DM jx†…þÝ:<^  MYr}@JDm63C`¬T@)       ï[ î?2+39=/33333933333333310%53 !53 ¬þ®R²þ®Týoþ°P±þ±Qm?sþŒþ‘m?sþŒþ‘t´Wò(@ ­Y³?+Æ_^]99310%!5!Æü®ã´¬’ýÂÿÿNÐ~p&­Ì*3}@E)&0 !**+&!&45!)0ÈY"/ÈY""!! !0""0! ÈY ÈYÐ?+?+9///_^]]++33993993333393310#"$54$32#"32##!24&+326­Žþø±±þùŽ °° Ž\þüç—ÛvÿééþÞÇ¡3Ž—hUÝŸ_Qª¶PTùãþ¹©«FââF«ªþ»ä-G‘þåÈþÕþ¶HuPþ°?~of{þ¢PEHþÓUÿÿÿûòÑRBÎG …Z 3@ ¯Y  ¯Y ?+3/_^]+933310#"&546324&#"326…©vv©§xx§mgKKgiIJh=w¦¨uu¨¦wLhjJJjitWà h@7    ­Y Y_o¯¿­Y ¸ÿÀ³H/+3+3Æ_^]q++/+9933933310#!5!3!5!¯“þX¨“¨üã¨þu‹‘Šþv‘ýX‘‘83”D@"     äYÞäYÝ?+3?+3/_^]993333310'>7>54&#"'>32!:€laXGJDX… ¤~ƒ‘^`„dË3gE€KBr<>KIDlƒpK†D]\2k2'™%~@G" &'"  äY_o  / äYÞäY@ß?3/]+?+3/_^]9/^]]+9993333339910# '73254+532654&#"'>32™›Žþâ ˆ¤ ½=9P\JGDT‡ ‚”VZ[jt€ã ˆ”‰mHA7>733267#"$#5™,S\nG)¯-O_kC(Ÿˆ‡©¸þõÏßÿqÃOIraCOJV7Fo]FOJU7mu’~ ÅÕÁ™ÉÉÿÿ̧&$Cÿ£ó´&¸ÿ£´%+5+5ÿÿ̨&$v]ô@ &]%+5+5ÿÿ̨&$‡ô@ &%+5+5ÿÿÌ&$ô@ &%%+5+5ÿÿÌ]&$jâ@ &%+55+55ÿÿÌ`&$›U@ #%+55?55«E‚@L   _Y _Y//?_¯ß_Y _Y?3+?+399//_^]q++99933339999910!#!!!!!!#!†þ±Ž¨æ›þ¯Gþ¹zýÛIM‚œþdE˜þR–þ/˜²þüþ“ÿÿqþDvZ&&zb ¶ %+5ÿÿ¢b¨&(Cÿ¹ô´ &¸ÿ´  %+5+5ÿÿ¢b¨&(v[ô@  &?  %+5+5ÿÿ¢b¨&(‡ô´ &¸ÿä´ %+5+5ÿÿ¢b]&(jâ¶ &¸ÿø´ %+55+55ÿÿʨ&,Cÿ¯ô´ &¸ÿ°´ %+5+5ÿÿʨ&,vgô@  &g %+5+5ÿÿʨ&,‡ô@  & %+5+5ÿÿÊ]&,jâ@  &%+55+55eE \@4_Y?¿ï  _Y _Y?+?+9/_^]q3+3993333910)#53! !32&+!eþÍþâþއ‡7ICþþߢÔÎÜïy!°þµþ›U•[þ·þYþG  ñþAÿÿ¢*ž&1õ@ &% %+5+5ÿÿfÿìf¨&2Cÿªô´&¸ÿª´%+5+5ÿÿfÿìf¨&2vbô@ &b%+5+5ÿÿfÿìf¨&2‡ô@ &%+5+5ÿÿfÿìf&2ô@ & -%+5+5ÿÿfÿìf]&2jâ@ &%+55+55á.s $@  ²?399339310 7   bþ h^^iþ¢`fþŸþœJb`gþŸ_iþ¤þ iaþ8ÿÚ’p"Y@2  #$! !_Y _Y?3+?39+99933339910#"''7&3274'32&# fþ÷øÚ€u^_ýÙ€t^Œ`ÉþO˜£”ý’M™þÈ©þ¯þ”ŠœA½®#Q`†œA»ªþߤrýRŠ ¦t¬ƒÿÿŽÿì=¨&8CÿŸô´&¸ÿ ´%+5+5ÿÿŽÿì=¨&8vVô@ &V%+5+5ÿÿŽÿì=¨&8‡ô@ &%+5+5ÿÿŽÿì=]&8jâ@ &%+55+55ÿÿ$¨¨&<veô@  &e %+5+5¢_E 6@ `Y `Y  ??99//++99333310#!#3!24&+326_tÛ–þç¿¿ ïÀ¤¤öþ™§´€ÇoþEëÞ̆•ýÀ›ŽÿãÌ1V@/ ,'' 23 ,$$PY$  PY`p€?3/]+??+999339933910#"/32654&'.5467>54&#"#4632¾¨«p:šE\bRd\[96:5†m”‹´ëè¾áqG*BwY_'˜¬1¤!$_OCi=7~R=d-0T2M] ¢üãæ¡ˆŠe?<"*EP<–ÿÿ€ÿ숴&DCŽ´0&¸ÿp´14%+5+5ÿÿ€ÿ숴&DvM@ 0&/03%+5+5ÿÿ€ÿ숴&D‡î·1& 6¸ÿд60%+]5+5ÿÿ€ÿ숩&Dø"@0&0: ::¸ÿÚ´:G%+]]]5+5ÿÿ€ÿìˆ{&Djð@ 0& 4¸ÿÒ´42%+]55+55ÿÿ€ÿìˆ &D›ø@ 3&60%+55+55ÿì¸N(5<‰@J "1911'):''=>6 PY9PY1QY99$" o  ,,PY €?3/]33+3?3/_^]3399//+++399333333933399103267#"&'#"&5%754&#"'>3263232>="!.§´KYŠDöy‰"4•aJ§@HJC¨›°GU¡¦©ü99@`6zOQ.žR]i X÷þ^H-ÿnzzn¤ž];‡oQ[—‹‹þåþÜÌRdY—XY0dM®š«ÿÿ‚þD8N&FzQ ¶!%+5ÿÿ…ÿìF´&HC±´&¸ÿ²´ %+5+5ÿÿ…ÿìF´&Hvo@ &o %+5+5ÿÿ…ÿìF´&H‡@ &! %+5+5ÿÿ…ÿìF{&Hj@ & %+55+55ÿÿe´&óC½@  &` P ¸ÿ©´ %+]]5+5ÿÿe´&óvh@  &T %+5+5ÿÿe´&ó‡ "@ &`P0¸ÿö´ %+]]]5+5ÿÿe{&ój)/@ &€p`P@  %+]]]]]]55+55}ÿìNØ&@J !'( -  "   PY  $PY ?3/3?+99//_^]3+9_^]]99333999102&''7&'3%#"5464&#"326d‰^U‡þü7Úm…ÑPZ7ÓKûöèøøœ‘‘¡•Ó;Ãzsn^WG$Brl\þÓþ!þûþóóôþþÀ­®¿¾²¯ÿÿ³©&Q @ & #0 %+5+5ÿÿ‚ÿìI´&RCº´&¸ÿ»´%+5+5ÿÿ‚ÿìI´&Rve@ &e%+5+5ÿÿ‚ÿìI´&R‡@ &%+5+5ÿÿ‚ÿìI©&R@ &"/%+5+5ÿÿ‚ÿìI{&Rj@ &%+55+55tßWu U@5   ®Y[®YO_¯ïÿ ­Y³?+Æ_^]q++++99933310535!53¨ý»ãýº¨¾··þ¢’’þ··nÿì]N#_@5  $%! !PY  PY?3/+?3/9+99933339910#"''7&53274'326%&#"]þüøÌMLTcøÕzHNPa½!þM¨™ý‹"ýK•¤›þðþÞkWD_Ží dRDZ‰÷“_ýÀ_ÕØ’\@Y×ÿÿ¹ÿì´&XC¢´&¸ÿœ´ %+5+5ÿÿ¹ÿì´&XvZ@ &T %+5+5ÿÿ¹ÿì´&X‡´&¸ÿú´  %+5+5ÿÿ¹ÿì{&Xj¶&¸ÿú´ %+55+55ÿÿBþW‰´&\vk@ &k %+5+5¹þWBÌ >@!" PY PY?+3?+3??993333104&#"326>32!"'##3ˆzƒ—††•…zýè2›}ÆÂþxöUµ´"âÁÛÞÕÆÊMi_þïþãýʸžþYuþYA\ÿÿBþW‰{&\j@ & %+55+55ÿÿÌ^&$Š @ &%+5+5ÿÿ€ÿìˆS&DŠÛ´0&¸ÿô´10%+5+5ÿÿÌ©&$™õ@ &%+5+5ÿÿ€ÿ숴&D™í@ 0&3;%+5+5ÿÿþ`ßE&$œÈ ¶%+5ÿÿ€þUˆN&Dœq¹ÿ´99%+5ÿÿqÿìv¨&&v„ô@ &v %+5+5ÿÿ‚ÿì8´&Fvf@ &o%+5+5ÿÿqÿìv©&&‡õ@ & %+5+5ÿÿ‚ÿì8´&F‡@ & !%+5+5ÿÿqÿìvf&&šš@ & %+5+5ÿÿ‚ÿì8Ì&Fš@ &%+5+5ÿÿqÿìv©&&ˆõ@ & %+5+5ÿÿ‚ÿì8´&Fˆü@ &#%+5+5ÿÿ¢e©&'ˆÿãõ´&¸ÿÆ´%+5+5ÿæÏÌ#)W@)$$&''+*+&)¸ @Y&& !PY PY?3+?3+?3/+?993333333310%#"323'3#.532654&#"53—1…aª·¼¥b„1´¬þ>]io‰…rg`âOÅ«®i_#  )Vb—£û©6t+lÙÐðɽÞÐ’!$%þàÿÿeE’Šÿæ–Ì*d@'%+,QY(PY¸ÿÀ@ H "PY ??3+?+3+?9/_^]3+399333310#.5##"!23'5!5!53332654&#"¬1¢yʾˆy£1þÔ,´ƒü®v‡“‹…—†y¬ü3©6t+i_+Vb—ƒƒý_×ÃÎÛÏÂËÿÿ¢b^&(Š ´ &¸ÿõ´ %+5+5ÿÿ…ÿìFS&HŠ@ & %+5+5ÿÿ¢b©&(™õ´ &¸ÿä´ %+5+5ÿÿ…ÿìF´&H™@ && %+5+5ÿÿ¢bf&(šš´ &¸ÿå´  %+5+5ÿÿ…ÿìFÒ&Hš@ & %+5+5ÿÿ¢þUbE&(œK¹ÿ´ %+5ÿÿ…þUFN&Hœ>¹þî´$$%+5ÿÿ¢b©&(ˆõ´ &¸ÿä´ %+5+5ÿÿ…ÿìF´&Hˆù´&¸ÿú´# %+5+5ÿÿqÿìO©&*‡õ@ &  %+5+5ÿÿþX´&J‡÷@ 1&60%+5+5ÿÿqÿìO©&*™õ@ & % %+5+5ÿÿþX´&J™÷@ 0&3;%+5+5ÿÿqÿìOf&*š š@ & %+5+5ÿÿþXÌ&Jš÷@ 0&02%+5+5ÿÿqþYOZ&*å ¶ %+5ÿÿþX&Jèÿ@ 2& 30%+5+5ÿÿ¢*©&+‡õ@  &  %+5+5¹©W@.  PY ŽYŒY?Î2++?39/3+93333933333103363 #4&#"##'##573¹µ iê^µis|Ÿ´øiÛèhþ¤EþÅ;ŠÍþƒýk{ˆ„µ›ýɹ‹‹ðÊE[@1    _Y `YP ° ?3?399//]q33+33+99333333331053!533##!##55!¢¿ ¿  ¿ýö¿ iýöÄÄÄÄ”üoý‘í”þŽÞÞ5Ì\@)QY PY à ð  ¸ÿÀ¶ H ??+]q+9/3+3?39393333103!!363 #4&#"##53¹µ+þÕ iê^µis|Ÿ´„„̃„;ŠÍþƒýM™ˆ„µ›ý«¬ƒÿÿÊž&,õ@  &#%+5+5ÿÿe©&ó´ &¸ÿì´!%+5+5ÿÿÊ^&,Š @  & %+5+5ÿÿeS&óŠ´ &¸ÿó´ %+5+5ÿÿʨ&,™ô@  &%+5+5ÿÿe´&ó™@  & %+5+5ÿÿÊþUE&,œ · %+55ÿÿþUeÌ&Lœ8·&%+55ÿÿÊf&,šš@  & %+5+5e: ,@ PYPY?+3?+933310%!!5!!5!é|ü*¦þÁóŽŽŽŽbÿì…E;@ _Y _Y ??3+?+3/9333103#%265!5!#"&'7b¿¿žh_þñÍʼ¨¹%ºgEú»‡Š œü_Óå­ÅuØþW%ÌH@(   PY 0`€?2?/]q3/3?+9333333103#533#"&'5326553í³´ÈÑ´àÏO¤-–{€ŠÈ:ûÆ ÀÀÒûª»ÒŒ"„w%ÀÀÿÿ°ÿì)©&-‡xõ@ &™%+5+5ÿÿuþW´&é‡gÿÿ¢þYËE&.å¹ÿ¯´  %+5ÿÿìþYeÌ&Nå¹ÿ½´  %+5ìe: <@    ?2?39933933339910!#33 ’þ’„´´ÛÓþIÎîbþt:ýæþ/ý—ÿÿíL©&/vÿžõ´&¸ÿh´ %+5+5†\© G@$   ŒY@PYPY?+3?+Î+9333333310%!!5!!5!'573à|ü*¦þßÕÍãÅþÔŽŽŽ)Ž`ðçÿÿíþYLE&/å ¹ÿÓ´ %+5ÿÿ†þY\Ì&Oå¹ÿô´ %+5ÿÿíLE&/å,§@ ô %+5?5ÿÿU“Ì&OÏ礳 ¸É´ %+5?5ÿÿíLE&/šœýT ¶f%+5ÿÿ†kÌ&Oš ýT±¸–´ %+556LE H@'    / _Y?+?99//_^]92399333103'73%!íuB·¿$=þŸ Ê=y`ßý„—y¹þnœ†\ÌO@*         PYPY?+3?+99//_^]99333107!!5!'%!5!àá>þá|ü*¦Ú@þ­tq¤ý®ŽŽí{pŸ/Žÿÿ¢*©&1vzõ@ &z %+5+5ÿÿ³´&Qv‰@ &‰ %+5+5ÿÿ¢þY*E&1åá¹ÿà´ %+5ÿÿ³þYN&Qåå¹ÿä´ %+5ÿÿ¢*©&1ˆõ@ & %+5+5ÿÿ³´&Qˆ@ &! %+5+5ÿÿ‚F&Qiåþ*¨¶ ¸ýÀ´ %+]5?5³ÿìUZ#C@"  $%!!`Y! _Y?3/+???+3993239310#"&'732654&#"#4'336! U¢±\ƒ>ƒ+F.OJt|¶´ªjkþÓþû?Yd<'¼á¡‰ƒ·™ü_½*,9OÍþƒ³þWN!8@ "#PY PY???+3?+933310"#4'33632#"'52654&ˆ|Ÿ´ªiñ­ªxyM2>E8iõ›ýS½*,9OÍ»Âü©—Œ ‹Hh"ˆ„ÿÿfÿìf^&2Š @ &%+5+5ÿÿ‚ÿìIS&RŠ@ &%+5+5ÿÿfÿìf©&2™õ@ &!%+5+5ÿÿ‚ÿìI´&R™@ &#%+5+5ÿÿfÿìf¨&2ž-ô@ &_%+55+55ÿÿ‚ÿìS´&Rž@@ &r%+55+55ÿûÅKy@J   !_YO_?_oŸ¯ß¿  _Y _Y ?3/+3?3/+39/_^]qr+93333910!#"!2!!!!!%27&#"a9)ÿìí:3.þroþ‘·ý;H&=£•šR\^D˜þH–þ9˜Œ!ÿþðþíþöÿì´N%,o@; )!*-.)PY)) &PY# #PY ßï€ ?3/]]33+3?33+39/+99333393399103267#"'#"3263 %4&#"326"!.ÈWQANŠ?æ¶QS·¨ª¢»OU®?ýkO[[Uª^RLHVDP÷½Ç^H-ÿ··!±±ýÁ'ÛÐÐÛþSч­›«ÿÿ¢™©&5vHõ@ & %+5+5ÿÿò´&UvY@ &; %+5+5ÿÿ¢þY™E&5åý¹ÿÅ´ %+5ÿÿËþYN&Uåþð¹þÒ´ %+5ÿÿ¢™©&5ˆÿíõ´&¸ÿ¶´ %+5+5ÿÿò´&Uˆ´&¸ÿ÷´ %+5+5ÿÿOÿìh©&6vxõ@ -&‚-0%+5+5ÿÿ§ÿì$´&VvV@ '&V'*%+5+5ÿÿOÿìh©&6‡õ@ .&3-%+5+5ÿÿ§ÿì$´&V‡@ (&-'%+5+5ÿÿOþDhZ&6zL ¶1-%+5ÿÿ§þD$K&VzV ¶+'%+5ÿÿOÿìh¨&6ˆô@ -& /5%+5+5ÿÿ§ÿì$´&Vˆ@ '&)/%+5+5ÿÿLþY€E&7åã¹ÿâ´ %+5ÿÿ¾þYùT&Wå ¶%+5ÿÿL€©&7ˆõ@ & %+5+5ÿÿeÿðÅÌ&W§çÖ±¸8´%+55L€EF@#   _Y _Y  ??9/3+3+393333939103###53!5!Åðð¾ððþE4©þX•ý”l•¨œœÈÿðTR@,PYPY PY ?+?3/39/3+3+393333310!327#"&=#53#533!!ÔþPUa†£©¦¢¢¨¨¨ª:x°þP‡„ãOL"‰.‰”ö„%ŽþæŽþÛÿÿŽÿì=ž&8õ@ &)%+5+5ÿÿ¹ÿì©&X´&¸ÿû´$1 %+5+5ÿÿŽÿì=^&8Š @ &%+5+5ÿÿ¹ÿìS&XŠ´&¸ÿû´ %+5+5ÿÿŽÿì=©&8™õ@ &%+5+5ÿÿ¹ÿì´&X™´&¸ÿú´% %+5+5ÿÿŽÿì=©&8›ž.²¸ÿÀ@Hp%+55]]]]+55ÿÿ¹ÿì &X›¶&¸ÿú´  %+55+55ÿÿŽÿìK©&8ž8õ@ &j%+55+55ÿÿ¹ÿìQ´&Xž>@ &j  %+55+55ÿÿŽþU=E&8œ; ¶=%+5ÿÿ¹þU8:&Xœ! ¶"" %+5ÿÿÌ©&:‡ÿüõ´&¸ÿü´ %+5+5ÿÿ¸´&Z‡ü´&¸ÿü´ %+5+5ÿÿ$¨©&<‡ÿüõ´ &¸ÿü´ %+5+5ÿÿBþW‰´&\‡ü´&¸ÿý´ %+5+5ÿÿ$¨]&<jâ@  & %+55+55ÿÿIƒ©&=vfõ@  &f %+5+5ÿÿ“,´&]vU@  &[ %+5+5ÿÿIƒf&=š š@  & %+5+5ÿÿ“,Ì&]šý@  & %+5+5ÿÿIƒ¨&=ˆ ô@  & %+5+5ÿÿ“,´&]ˆ@  & %+5+5KÌ@ PY??+99310!#4632.#"D´ÁáH§*·/hj1Sͬ ‘ .h]:ÿìBÌ)f@.$*+'PYQY  !PY ¸ÿÀ¶ H ??+3+9/_^]3+3?3+?9933333310353!!363 #"'##65#4&#"326:´1þÏ[ó‡Ë½ôZ®Nz„•ˆ…–‡y9““ƒ‘A\ÈýÒþäþæ¸0h 6©×ýfÞËÜÝÒÉÑÿÝ€E!)\@.' *+''_Y' ' &`Y_Y?+?+399//+999333339910#!"&5463! 4&+3264&+3 €þîôþŒMB››Ž8ð}§·Á²°˜¦¯¥Q——{},|´È±DG18A<…—þ¹z£²vrxþ"yÔk[þ`ÿÿ¢”EÁ³ÿìBÌ#G@  $%PY ¸ @ Y  !PY?3+??+?3+993333910#"'##65!!363 4&#"326B˽ôZ®ÞýÖ[ó‡ºz„•ˆ…–‡y"þäþæ¸0h 6©íŸþøA\ÈýÌÞËÜÝÒÉÑ”E 4@  _Y _Y?+?9/+99333310#!'5%3!24&#!!26”ÿæýóž%8BòÿÀ¤¤þÕ3¤œ‰·Ò·¥!ÈýÊÌÀysþ(p9ÿìBÌ$:@  %&PY "PY?3+???3+993333310#"'##65'5%3363 4&#"326B˽ôZ®€3[ó‡ºz„•ˆ…–‡y"þäþæ¸0h 6©_´!¹þYA\ÈýÌÞËÜÝÒÉÑWÿì\Z<@   _Y _Y ?+?+99//99333310#"'! ! 732“¤¬g%¨Sþåþùþ²•Ÿ8¥e°«©ƒqAOýOþ­þ–tAŠfÿì-"$Q@)  %&_Y "_Y _Y ?+?+99//9Ä+99333393103267# !254632&#".#"/«°e¤9ŸPò¡þùþåºz‰z6B-+G>¨%g«¥©þïþAÁ³jS±i ŠžGMéAqƒþþ‚ÿìþ%W@ &'##PY# ¸ @ YPY?+Ä+?+99//9993333931032>32&#".#"3267#"‚ô®u†s/4$+B7À€vž““l޾ wÄyõÿ"Q~ˆ –GMÒ[iÄÛÞÍjm `Y ÿÿeE’ÿÝeE=@  _Y`Y_Y?+?++9/99333310)"&546; &+32eþÍþâþòMB››ŽÓICÀÜï>Ôΰþµþ›±DG18A<…—þ·þ´ñûó 9+E ?@   _Y  _Y _Y?+?+9/+993339104$3!!5!!"$73!!"9ÿòBý)–ýóåÿÀœ¤3þÕ¤¤‰ºÌšœú»Ñ²|pØsŠÿæÌ$G@%&¸ @Y"PY PY?3+?3+?+?993339210%#"!23'!5!#.532654&#"^1¢yʾˆy£1ýÖÞ¬ýáw†’Œ†–‡x®i_6Vb—Ÿû©6~*làÉÓæÖÅ΂þWIN>@"   PYPYPY?+?+3?+933310!5!.'.5324&#"326IþI_üødÞimVýèô™™’’Ž›’þþÛ„‘Y¯X[Ó¨þêþæ×ÔÒÙÈÒËk+E ?@   _Y _Y _Y?+?+9/+9933991035!!5!!5!kýdœý(—œÍš¦œú»gÿìeZE@#   _Y  _Y_Y?+?+99//+993333310>3 #"5!!" !›LÙ› þ÷øøþû5þÎÆd9#ý‘ ŸnuwýOþ¯þ”bWPɪüsÔèì]ÿì€Y%T@-"##&'`Y"" _Y  _Y?+?+9///+993333310"$5467$54$32.#"!3#"3 `îþëµþèÙÃøH¨5®{„™bGGÊÀ±˜w›Wþ÷Ѷ…¸Cã£Îœ²AƒqygÚ”y}p…M¼ ÿàþW=EV@3 _YO_?o @)H_Y _Y/+?+9/+_^]r+99333910!!#"'7325!¤ý\ƒ=R#3$h{©þžýa˜œ²œêþW-YM@'    QY  sY?+?9/_^]3+3993339999102&#"!!##737>OQ(6LTL.þÑó´óüû$³Yˆ=_‰ƒû2΃˜šqÿì,&&Z@/ "%'(_Y%$_Y %%_Y_Y?+?+99//9+Ä+933339310%#"!254632&#"&#"!267!5!Måéúþì »t‰z6B8 G>«QÏ©¡UBŒ6þÛß…™sJ[Ve ŠžGMé8çüþçýÞ'#P þWÇEB@!       _Y/+?3999933933310"&54?3 3'4&'326ht…MFþÉš–ÉþHO†;:.((.þWˆrdŽ„~ü7Éûƒƒerˆü)_yy_)154iÿìdÌ#C@# "" $% PY PY?+???+3?93333310".54&#"#3363232653Id{;5©M›•Y•l®—ý‚Ìþ~z1¯¬½þ›˜sx“ºý3þÿÿ†\ÌOÊE`@3   `Y°  _Y _Y?+3?+39/_^]3+39333333310!!3#!!5!#53!Ê7þÄÏÏ<üÉ<ÏÏþÄEœþfþœœæš¢ËZJ@%  _Y?3?+?93993333399310!#4632&#"3 ëþ!«¿˜ŒBB29~<áþ=s²þ?2™¥”þlµýµýìeÌH@$  RY?3?+?93993333399310!#4632&#"3 ’þ’„´˜ŒBB2B€ÛÓþIÎóbþo¤™¥”ý— þ/ý—†\ÌL@&   PY PYPY?+3?+9/3+39333333103#!!5!#53!5!àÑÑ|ü*¦ââþßÕ-ýŽrRÌM@*       ?3?99?9/9939299310#&'#''7'37. ľÏ)*þâ»ÁE·.¼I±6û<ûACpf.iý~ʾDvEÍ“9UÿìyE!D@!   "# _Y ?333+3?33?9933939310"'#"&5332653323#'ˆ> uM˜Š£?PIB¢=H•¢ Š>§L[ÕÛ©üg›Š‚‡µü[’‡£û¢xo†šÿËþW*E5@  _Y?2Ä+?33993333310!#"'53253&53Dýøˆ€G2,8sÞ¬j°Nü’• ¢²ûŽ‚`ú»ÿÿ³þWNhÿÿfÿìfZ˜fÿìæH@%  _Y `Y  _Y _Y?+?+9/+Æ+99333310#"3 65#53! 32fþ÷øùþú øLvRXâ"ÉþÊþÈž™£”©þ¯þ”fWYXþÏ?r§jÔn­ýëþòþì‚ÿìN!B@! "# RY PY PY?+?+?+9/99333310#"3 65#534&#"326Iûíè÷ýèE_XÃ`^½‰™™’ŸŽþïþß$þ‡C§jr³7,0×ÔÒÙÒÛÖ2þXqZC@"    _Y_Y?Æ+?+?9339333310%#"32%3##'&#"327…“âëòÑ}qc+´¦´+Gv‡~>&K_fWDmG@ù3+þæûýþÛ &þW‰ND@#   PY PY??+?+?9339333310##"!2%3"327&Û³9™QíòåR•3:*ý…ž‹•@84þW?ü©',!0+AúrÏÜÖ×.ÿÝiED@"  _Y`Y??+399//+993333310+#"&5463!24!#326iwÝ‘¿¿MB››ŽrîÀþ¸œ¤•«±}Änýþ±DG18A<…—ÕÂþýí’¹þWBÌ)C@#$  *+!PYRY 'PY?3+??+?3+993333910!"&'##4632&#"3>324&#"326Bþx{©'µ’6'%8<}2›~ÆÂºx…—††•…z"ýÊ^ZžþYM‘—¦”þògaþïþãÝÆÛÞÕÆÊ¢þÁ¥EK@&   _Y_Y?Æ?99//++3993333339310 ##3!2 4)!26Éþ‚ê¿¿#éô¼  þüþÐþð’–þÁåþZE™Á´“Îýsßþ*€dÿìxZ(R@*#$$ )* &## ##&& _Y& `Y?+3/?+3/_^]999933333104>7>54! '>323267!"$d3_¡¡Ec;þåþô-·/íÙáïU¶¯­‚J«Ÿ“«´Jþ9÷þômQ^J& 2L<ÕÕ!¬˜»­ab&&>^Hs{x~%þšÆ©ÿì"K'T@+!"" () %!!%%PY%p  PY?+3/_^]?+3/9999333333104>7>54#"'>3 3267#"&©+U†’AlN+õÛžÒ°™Y¤øh`Ž€…›!ÓÎÒå>cO@');.’’~„þÛUzU=O?QZRS"ˆ˜ÿÿl¡ETßþW•Õ$S@ %&»YÿÀ@ H"¸´Y ¸ ²Y?+Ä+9/++933333104632327#"&5#"&732654&#"ßo^†„;:64EA€=ThM<01<;20<Ze˜‰úÐDK ž ™ý gU1<<10<<¾þWùT M@ !" ¸ ´Y¸ @ YPY?Æ3+3?+?+9933333310533!!327#"'5326=#"&5¾ª:x°þPUa†£ýCD82<6[L¢¢¬ŽþæŽýtOL"þÊþæ BG} ‰”Ÿ€E5@  _Y??+39/9333310##"&5463!žÊMB››—:©ûW©‹þE4©úêQLž”ˆ6œœŽÿì$=@   `Y_Y?+??3Æ9/+993333310>5#53#"&332653_YXÃ’‘Õíãοiˆ‘t¾ûoS§j™À!þMþ÷õêmü­Ð›¢ÖF´ÿìï:$T@#  #%&$ PY  ¸@ Y  ?33?99//+3?+?993333331032653>5#53#.'##"&5hVvyеRFXÃ{ˆª@˜nª™:ýRx±Ÿsþt#hZ§j•¹1þ–½*,9OsZ±ÌÑ:ÿë’E#C@! !!$% _Y _Y?+?3+333993399332210"47+5!32654'5!#"'fõþᮣu,Èㆂ¬¤¨ªƒ…ãÈ,u£®þáD½Il œàbþø¬àèìÜ­bàœ mþ·¼þìþ½ŽÿìfZ-@ _Y _Y?+??+93310"&533264&#"'63 YîÝ¿|’n”KOZ:2CNI?Åùýcü­¾­›OŽ þCþéþ­×pKZ:@     _Y?+??9933933923102&#"#3 >c?n;TM;/4þª¼þÍv 0xZ-3ˆE.$ýãý¸HýýÛONLþWñÌF@    ¸ @Y PY?+?933?+999399310"'532?3367>32&#"*F2&*¯`þ*ÀPL,†o‚lRDHa3þIW¿þW ‡ü,/ý~(Ð@Ð {x]€>‰û\í¼IƒE\@1     _Y `Y _Y?+3?9/_^]3+3+3939939910!!5!!!!!5!{¬TýÂþ ]þ<þ•aûÆvþ¼õ´œ‹þ;…þ,œá“,:\@1     PY PY PY?+3?9/_^]3+3+3939939910!!5!!!!!5!¥ƒýLþêþrþÜÏüg%þíiF‹‰þ¸…þ§‹‰[þVsEK@(  _Y `Y_Y?+3?9/3+Ä+9333310 !5!#".'732654&+ŒôüùÜþ  þû¦ŠÍ=¢?º†°ÏèùJ»þþðù¬þõ”I„KéÍÅÈFþV¡EJ@' `Y _Y_Y ?Ä+?+9/+39333310#"3267# 4%5!!?JîþûÈ·…½=¡TþïÈþüþÖ'þÜüùô.ßÌÃÕ…‹K¶¤$ñ/í¡œþ€þWF:K@( PY  PY PY?+?+99//3+9333310!#"3 7#"5475!ýJ‰R¢¸¢‰$±üÙÚÿä¿þ‚i­þ~½¤½ü »¾ÿ×Ï j°—þVh:(S@,#()*PYPY((&PY?Ä+99//+3+393333310#".54>7>54!5!3 7h(þóÒŠ×iU•©«rÃÁdýŽdþt²¶Oа‰a4ŒˆBe›ªL‰\OnN+*Q:J=‹*Œwþ¾ ‹wRlH+".A0IRÉ{QZ!Z@.   #"!!`Y `Y `Y ?+3/?+9/3+393993229910!654&#"'>323!!!5>7!{i‰ˆ‚r ¸íÃØëj•þâô~XêüT3¿þ7õw€ln}q©È¼­ˆt…¿up:’u~é”xÿìEEG@& _Y_Y `Y?3/+?+39/+933310#"&'732654&+#5!!32Eþöê¿ø"³#•q“£®¢Û¶qýýDéÀÙû«~u«–’‘ÊœœþÑé ÿì!:G@&   PY PY PY?+3?3/+9/+9333104&+#5!!32#"&'73 lŸÅÔ\þJÕèãÑÂæ%®˜i ZhdˆŒŒþ­§®Â¡ª aqÿì1ã)E@#'$  *+"#"QY '&# PY ?3/+?Ä39+393333310#"&'732654.'.=#5373Ì"UU„N*ãÜÝî%Ÿ¦“…ˆ'LsK{?—˜³õ·aSD,&;Jb@Ÿ§…WQO`1?, S_sƒ[NþWƒ¹þWBP?@  ¸ @Y PY ???3+9/+99333310#336324&#">BŽþ×þ㵩 [çÃͺ{ŽÍàms£þïÖhþÖãiJÉôê¯¤ÌØýóM­Ú ÀÌ·?Í9310!3 ´Ìú4rZÌ@  ?2Í2993310!333r¥ž¥Ìú4Ìú4‚JÌC@!  _Y _Y ?Æ99//3+33+393333310!3!!!!#!5!!‚Œ®ŽþrŽþr®þtŒþtÆþ:™þÌ™þ` ™4ÿÿÉDYÖ &y@@ !!% $$ '($!!_Y"%%_Y Œ[ ŽY ?++3?3+33?3+33933333333933331053373#+32&+32!5!5!!Úh–”h«¦õÉÉ¥z£ÁY§o{csÚýÎ|þÍéþy{{Ôý þ£þ­E„þëü÷ûó þXŽœŠûáYÙ &u@A  $##%% '($`Y! `Y!_Y_Y Œ[ ŽY ?++3?3+?+?++933333333933331053373#+32&+325!5!!·h–”h«¦ÒÉÉ¥z£ÁY§o{cs¨`þÈåþ›Š…{{Ôýÿþ£þ­E„þëü÷ûó þX„+‹„üÕ‹2ÿæÍÌ +5Œ@M & //-.242-672/0/PY0-3,3PY,)PY #PY  Œ[ ŽY ?++3?3+?3+???+3?+3933333393333331053373##"323'3#&532654&#"5!5!!Ëh–”h«¦þ[ NEzrîGL ˜ ü:DB88AB=Ë`þÈåþ›€…{{ÔûËW?6;Uƒû²-džâÇ×âÔÇÇý„+‹„üÕ‹YÿìwE8@ _Y _Y_Y?+??+?+9331033!73265#5!#"'Y¢8w32wͺb\VZuÊkµµý7AG[¡•!pXon¼Ñ‘„wÅŽÒÀÀúô·‰ƒ´œýS½*¯_d´Éý/ÿÿ̨&$ E@ &%+5+5ÿÿ€ÿ숴&Dˆ÷´1&¸ÿÙ´39%+5+5ÿÿʨ&, E@  & %+5+5ÿÿe´&óˆ´ &¸ÿï´ %+5+5ÿÿfÿìf¨&2 E@ &%+5+5ÿÿ‚ÿìI´&Rˆ@ &!%+5+5ÿÿŽÿì=¨&8 E@ &%+5+5ÿÿ¹ÿì´&Xˆ´&¸ÿú´# %+5+5ÿÿŽÿì=+&8ôf@&%+555+555ÿÿ¹ÿìj&X&j JÿÿŽÿì=+&8õf@&%+555+555ÿÿ¹ÿìÌ&X&jv‚ÿÿŽÿì=+&8öe@"&%+555+555ÿÿ¹ÿìÌ&X&jˆÿÿŽÿì=+&8÷f@&%+555+555ÿÿ¹ÿìÌ&X&jCÿ”ÿÿ…ÿìFNÿÿÌ+&$ôf@&%+555+555ÿÿ€ÿìˆP&D&jîí JÿíþB@:@H:@H:@H:¸ÿÀ@ H:@ H:0&¸ÿÒ´42%+555+55+++++5ÿÿÌ+&$øf@ &%+55+55ÿÿ€ÿìˆP&D&ší Jþ>@5@H5@H5@H5¸ÿÀ@ H5@ H50&¸ÿÒ´03%+55+5+++++5ÿÿ«^&ˆЍ @ &¶%+5+5ÿÿÿì¸R&¨ J@ >&?@(%+5+5qÿìÍZ j@8   !"`Y_Y  _Y _Y?+?+9///_^]+3+39999322333103##"! &#"!275!5!5!5!M€€åéúþì Zs«QÏ©¡UþÑ/þÑß¶‚¯™sJ[Vþµ8çüþçýÞKb‚k fþXZK&4k@0 .'%56 "PY1PY11 +PY &&¸³Y?2+3?3+?9/+3?+9/9933333333103!##"32346733##"&'73267!4.#"32>fÿañÃ¿ÊÆq¨-«BKÑÁ¡×$µ/¹ixý ÿHP†}yŒQGÇÿia”6ªü¦]¥¦ys‚Zi¢u¯\¼Äɹ]¯ÿÿqÿìO¨&* E@ &# %+5+5ÿÿþX´&Jˆã´1&¸ÿó´39%+5+5ÿÿ¢Ë¨&. E´ &¸ÿ­´ %+5+5ìe¨ P@)     Œ[ ŽY   ?3?Ä9933?++39933339310!#33 #'53373’þ’„´´ÛÓþIÎþ}¤þhèÛióbþoEüè þ/ý—¥ïŠŠÿÿfþUfZ&2œ$ÿÿ‚þUIN&Rœ'ÿÿfþUf^&2'Š œ"@ &%+5+5ÿÿ‚þUIR&R& Jœ-@ &%+5+5ÿÿ4þV¨&y E5³&+5ÿÿ‹þWR´&Sˆ³&+5ÿÿuþW±´&éˆ@ &‰%+5+5YÃE L@' _Y_Y?3+33?3+33933333310+32&+32!5!5!!ÉÉ¥z£ÁY§o{csÚýÎ|þÍéþ°þ£þ­E„þëü÷ûó þXŽœŠûáYÃE U@, `Y_Y_Y?3+33?+9/+3933333310+32&+325!5!!ÉÉ¥z£ÁY§o{cs¨`þÈåþ›Š°þ£þ­E„þëü÷ûó þX„+‹„üÕ‹2ÿæÍÌ!+d@6*$()%##(-,(%&%PY&#)")PY"PY PY?3+?3+???+3?+393333333310%#"323'3#&532654&#"5!5!!Ñ NEzrîGL ˜ ü:DB88AB=Ë`þÈåþ›€|W?6;Uƒû²-džâÇ×âÔÇÇý„+‹„üÕ‹ÿÿqÿìO›&* C¶@ &r %+5+5ÿÿþX´&JvB@ 5&Q14%+5+5]ÿìxEC@"   _Y `Y ?+??399//+993933231032653! !#3!3Ô32!"6iÅþŸâ¿¸<´jÓáÃþôYŽQ›—g×þhþÂZþ÷î¤XaùùWaªcü±<dÿÿ¢*œ&1 B´&¸ÿš´ %+5+5ÿÿÆ,´&QCÀ³&+5Ì©+£@@ &  -,ŒY_Y)ŽY ¸ÿÀ@ H#ŽYÜ?333?+99//+333+3+3Æ+99339933393339933310#!#&54632#!&5734&#"326XWËŠý͉ÄÑ]…moƒç%Œ¹‡BnãÅþÔVA87CC78A»g9ûåCþ½9kYnoþà)p/þ±O«Ïðçê%..%&..€ÿ숩-:@LÒ@Y=>>@;%;(AG("#(#822MN3QY""/""@ H""%%J@+DŽY+@!H+;Ÿ¯@ JpJJ¸ÿÀ³ H;¸ÿÀ³H;¸ÿÀ@ HJ;;J.= ..PY?33+3/9///+++_^]^]]Æ++Í933/+_^]+9933339333933310327#"&'##"&5%754&#"'67.546322>=5734&#"326N35*;!DGd[A±‚ž Æìjtvh ¼$÷10…moƒþž`”R¾v|EYfãÅþÔ]A87CC78Aè4Z<þàþ.PQpipyj¬–];ƒsTXé/X2Ynoû5\šRY0cRRdc½´ð%..%&..ÿÿ«©&ˆvõõ´&¸´ %+5+5ÿÿÿ츴&¨vZ@ =&Z=@'%+5+5ÿÿ8ÿÚ’©&švdõ@ #&e#&%+5+5ÿÿnÿì]´&ºvd@ $&d$' %+5+5ÿÿÌœ&$Ðô¶&¸ÿ·´%+55+55ÿÿ_ÿ숨&DÐà¶;&¸ÿ]´85%+55+55ÿÿÌ®&$Òfô@ &%+5+5ÿÿ€ÿ숺&DÒQ´;&¸ÿÍ´;3%+5+5ÿÿ¢bœ&(Ð$ô¶&¸ÿ£´ %+55+55ÿÿsÿìF¨&HÐô¶&&¸ÿ´# %+55+55ÿÿ¢b®&(Òzô´&¸ÿø´ %+5+5ÿÿ…ÿìFº&HÒf@ &&& %+5+5ÿÿrœ&,Ðóô¶&¸ÿŽ´ %+55+55ÿÿe¨&óж&¸ÿ‰´%+55+55ÿÿÊ®&,Òfô@ & %+5+5ÿÿeº&óÒp´&¸ÿö´ %+5+5ÿÿfÿìfœ&2Ðô¶!&¸ÿ©´%+55+55ÿÿsÿìI¨&RÐô¶#&¸ÿ´ %+55+55ÿÿfÿìf®&2Òfô@ !&!%+5+5ÿÿ‚ÿìIº&RÒf@ #&#%+5+5ÿÿ¢™œ&5Ð0ô¶!&¸ÿ“´ %+55+55ÿÿs¨&UÐô¶!&¸ÿq´ %+55+55ÿÿ¢™®&5Òlô´!&¸ÿÏ´! %+5+5ÿÿòº&UÒ„@ !&! %+5+5ÿÿŽÿì=œ&8Ðô¶&¸ÿ·´%+55+55ÿÿ}ÿì¨&XÐþ¶%&¸ÿ“´" %+55+55ÿÿŽÿì=®&8Òfô@ &%+5+5ÿÿ¹ÿìº&XÒf´%&¸ÿú´% %+5+5ÿÿOþ9hZ&6çn ¶16%+5ÿÿ§þ9$K&Vçn ¶+0%+5ÿÿLþ9€E&7çn ¶ %+5ÿÿ¾þ9ùT&Wçn ¶%+5xþU1Z"W@-  #$ _Y   _Y_Y?+Ä+99//93+9333993105$54&'5,54&#"'>321üW^*%°þIfD‹s>™U÷¨„Åm;F@Phýîþÿ¦a2ÅI„(‡‘­nîžorTlOƒ[¨i[H<­¤þVN&_@$ !!!'(¸ @ Y$ ¸ @ YPY?+Ä+99//93+933399310%5,54&'5>54&#"'>32¸þþþ>H-+gþÓšã܃D{xr†%©4Ú½ÌÕ@97Bã•ýÅ6›Mó?L4^”2Q^tIflU\!އ®«PŽ5/yÿÿ¢*¨&+ E@  & %+5+5¹¼Q@,  Œ[ŽY PY?Ä3+?3?++393333333103363 #4&#"##'53373¹µ iê^µis|Ÿ´÷¤þhèÛiDþ;ŠÍþƒý/·ˆ„µ›ý¹ïŠŠ¢þW=Z/@    `Y  ?Æ??+399333104&#"#3632ˆrU²8´²«Ù»ªþWKžgMûåF—«Òæúµ$þVÊÌ#/;j@9$"6* "0" <="69PY3PY -PY 'PY?3+?3+9/9+??Æ+99333339310%#"323'3632#"''67532654&#"4&#"326‹-„h±¢¬j„+´A<€ŒH{J¹OHUnylþRYm{ihzm[N9:&> G=4?®kWZbyÁûŸ‡wSq>½Dzu©`ÚpçÀÑâÙÆÃüO0AP^9Yÿìs–'2c@4.$$'(  34+!!+`Y`Y!! '`Y 1`Y ?+Ä+99//++9399393993310#"$54675.546732654&'4&#"3 zÛøŽ~‘¡þêöýþ彩‰å܉ƒ¥Ž’ž‘ŠA¸¡œ¶²§R–Å¢|±¸ÁÚØÁ‹¼%}aŠ—‚STY^ylüˆ|Œ˜‚€ÿìMÒ'4F@%+% 1 56 ((QY!.PY?+Ä29/+9993333102654&'7#"&54675.5467"32654.f}ŠQII‹{p‚˜þÿèæþ˜‚o€{‹IIQ‰}‹¦›——šI‹jˆ}Q~#qD®p® ÉÕçèÔÇ ®€p®Dq#~Q~‡ƒ§‰¡¢œW‹NIÿŽE;@ _Y _Y?+3?Ä+39933333107!5!!2'654&#!I2ýÂüÎS„•›GMü霋ûâƒ~MM"8 G>“ÿ ?:;@ PY PY?+3?Ä+39933333107!5!!2'654&#!“©ýLýVÉ“†›GMý‚‰&‹‰üÚpsGV"1'?<ÿÿÌf&$š š@ & %+5+5ÿÿ€ÿìˆÌ&Dš´3&¸ÿã´13%+5+5ÿÿ¢þDbE&(zvÿÿ…þDFN&HzVÿÿfÿìf+&2ôf@&%+555+555ÿÿ‚ÿìIj&R&j J<¶!@H!¸ÿÀ@ H!@H!¸ÿÀ@ H!&%+555+55++++5ÿÿfÿìf+&2ùf@ "&".%+55+55ÿÿ‚ÿìIœ&R& JJ@3@ H3&"/%+55+5+5ÿÿfÿìff&2š š@ & %+5+5ÿÿ‚ÿìIÌ&Rš@ &%+5+5ÿÿfÿìf+&2øf@ &%+55+55ÿÿ‚ÿìIj&R&š J2±¸ÿÀ@ H@H¸ÿÀ@ H&%+55+5+++5ÿÿ$¨j&< J@  & %+5+5ÿÿBþW‰R&\ J@ & %+5+5ÖþVöÌA@" PY   PY ?Æ+?9/9+993333910632#"''674&#"326kD;€ŒH{J¹Onb¤9:&> G=4?Ìús‡wSq>½¾u³Vøù‰0AP^9ˆþVÍN'3c@4.#'('45.'$!#!!1PY!PY+QY ??9/+?+3?+9Æ99333333104&#"#4'33>32632#"''674&#"326’@UVe´ª0~Y‰{D;}ŠH{J¹Onyl 9:&> G=4?®œy®¢ýS½*,9Or[µÈýn…ySq>½¾u©`0AP^9ÿëÊT%T@-  &'PYPY    #PY ?+??Æ39/9++3993333333310632#"''67#533!!4&#"326DB‰H{J¾Qnyl¨ª:x°þPó9:&: D<4?Ô‡wSq>½¾u©`CŽþæŽý>0ATZ9Fÿì†Ì#-7]@0$ 33)!!).)891+ +PY 5''PY ??333+3?333+3?93333333310!&5##"323'33>32#"'#32#"4&#"326"7¤…t…{Ie" "eI{…t…¢9þCAG¡ŸGCòBHŸ¡FB2^¤)BRq¡þ_qRBþæþäþÖþþ¤^2ØÏ³ŸÔ×ÕÖþaþMÍFþW†N!*3V@,"/'+45!-))PY1%%PY ??333+3?333+3?933333333103632!"&'##7## 3234732#"#"326ª9¢‚wÿOa   aOÿvƒ¤7þËAIŸ¡ˆòˆ¡ŸHB:2^¤þïþÑýÞFNpþG¹pMG"/¤^2ýØÒÏŸ³þO±þMþaÌÿÿÿŒÌÌ p@;  _Y  ?3Æ?Æ39/933+33333339399339910!!#7#33 3/! Šþmþ´¢MLþÙXú¢þžcü´.7! Eá¨ÿ~þtEïvýíüGœ¢d'Ô«ü)ÿw«Ì$m@=  %& _Y"_Y ?Æ3/+?+3/_^]Ä99333339223107&!273&'3267#"'#&#"í|ps¢­:#¨ þT•e¤9ŸPò¡Â‚„¢'ÜLg«¥¸µ<±I»þåJ\A%üÜ`‰‘AÁ³cØ2º{ ?þþuþWWÌ%l@>  !  &' ! `PY#PY ?Æ3/+?+3/_^]Ä9993/39332310%&323&'3267#"'#&#"Z˜ðàI<²ŽÉ ¹ "þ¾7Q`¶à¬tXÅŽ -0",€Y5Žþ=V¨D.ý.#hl œº%þF˰eª ¾cLE ;@   _Y _Y?+?9/3+3999223103#533!!!튊¿“þm \œMý³œþ@œ)ÿw«ÌM@'   _Y ?Ä?Æ39+33933333333310 ##!5!7337#ùþ̾þÄ¢ÞþEjS¢S(þE’’©þ ýN{ýü %œ‡‡œïï¯þVK;b@'3&-, ,&<=37"))0PY---) ¸ @ YPY?33/+Ä+?3/_^]+99333310#"'3267#"/&'&'732654&/.54632.#"çÐ!FÃE"6`8g8š~ICM…9…u‰Xb›ƒJÓʳÓ¢ƒnzt0^—~I(+™¦ Ò!q;*š¥RTaWX=TT@P"(MnP”›~‹HMJK.<*%$=JaªþVr:C@ PY¸ @ YPY?+3Ä+?+393310%2327#"./.+5!5!t>QBDª2 4<`8g81NE: %DNœ•ý“8‹/PÉ#Dq;18GÁ, ‹$‹‰3L–7@ `Y `Y?Ä+3/9/+93310!3 4&#"'6$3 ½4KT­´„©µ$ Óÿ܀ƹuv¥¶þõþûêþèþ„ÈN8@ QY PY ??+3/9/+93310!2654&#"'>32£m¿¹×£ÍÛ£—°{…Ä–­ÒÃÊ&þÆ!€E&}@H $  '(`Y$$_Y$$ $0$P$ð$$$ #_Y _Y?+?+99//_^]]qq+93+39333333910#!#53! 4&+!!!264&+3 €þîôþ(œð}§·Á²°übþž ¯¥Q——ßá,|´ÈH…xþ¹z£²vrxª…¯yÔk[þ` ÿìÂEG@#   _Y _Y?+?39/33+3399333333103##"&5#533!326=!=……äüò݃ƒ¿2¾þ¡‚ýÎ4uí™jþõóé|™Xý¨XûB¤ÔUb“•Cÿÿ ÂEM¢ÿ bÌ@V  _Y_Y //?_¯ß _Y?3Æ+3?Æ39/_^]q3+3+3993333993310!#7#!733#3!!!!3#Öaa¥ê:Ž:b¶ÜþáÆJüÿ2¶þ)ÆïààE‡‡œþZšþ3œ¦ûóÍyþX[Ì#'+™@X $$"!'& +* (,-"*&PY$ $PY+    PYßï€ ?3/]]+??9/99993+3+9?93333339933103267#"'#&323"!&%&'¦¥59g›ž,ë£\L¿×Ëùë_O¶ŽÏºþ%†œŠ4þ˜Tu7d÷þYM-|„þVâ‡c —þ0‰þœÒ¯™3þ.¹h!Š‘Nß°ÿì`EH@$  _Y_Y_Y ?3/+?+9/3+3993333103##"&'7325!5!!5!Ú††Ò¾«Ì#»r\ÑþùþÉõ혱Ñç²Àuµ˜¼œuþWFÌP@$ SYPYPY ¸ ²Y?+?+9/3+3?+993333310!!#"&'53265!5!!5!'53DþþàÏO¤-–{€Šþ†zþiKÈÈi…þ»ÒŒ"„wý…CŽÒÀÀqþWZ"D@" #$ _Y _Y_Y?3+Ä+?3+?993333310 5#"!273327327&#"þùf£þþï±i…873/:ü\«°™ZO¯«¥þW Ô_pMQ`\MúBQC¢Rþïþïy>€þþ„þWÜN ,A@"'! -.RY $PY *PY?3+?3+??+993333310%7##"!234673327#"&54&#"326c6žÎÀŽ{ 6­87&02J|Š—‰xy†™Š1k[6We“;ìülQC ¢ •“«ÓÌÌßãÄÚ™EM@' _Y _Y ?3?+9/3+339333333310!###53!24)!26½þ’î¿¢¢âéô»øþÐþð’–?ýÁ?–pÁ´•Ìý«Íßþ*€ªNH@  RY ¸ @ Y  ??9/3+3?+3993333910&#"!!##5354&'33>32pd‚¸ qþ‚´||«(2`„_hf–¥Œ’þæ’ELÎcŠppi5 ÃEh@3    `Y  ??39/933+333393339933399399999103!#!53'3!737! ºþéè¼éþ츟͙¸™Íý¿‚þûJ’þý¸Hp’ûûûýÖ%þW«: r@' !"¸ @Y PY?+?39/933+3333933992993992299103##"'5326?#533!37!ù²ïûCtYJ2&.O‹0þÿò²•ÀŒ·†¾ýã)vþ¿šå’ý­­©S ‡v1H’Uþ«Uü€n+þ‹1ÿì9N"/V@-(-01(QY((PY #PY QY?+3/3+?+99//+93333310"56323>323267!"&54&"7>54&l!DGd[A±‚ž þ:ìjtvh ¼.þ‡ÈÉ*&`”R¾v|EYËpipyj¬–þ£;ƒsTXþÜ»±ÒPQ\šRY0cRRdŠÿæJ$:@ %&PY "PY?3+?3+??99333310%#"!234673#&'4&#"326a5}˽‡š1¯­ˆ”†yx…“‹¶ke6Y_„3çý¾OJltÔÇÌßÛÎÚ³ÿìBP"8@  #$PY  PY?3+???3+99333310#"'##654'3363 4&#"326B˽ôZ®¬ [ó‡ºz„•ˆ…–‡y"þäþæ¸0h 6©i—[9yÈýÌÞËÜÝÒÉѳÿìBÌ+C@#&& ,-#PYRY )PY?3+??+?3+993333910#"'##654632&#"363 4&#"326B˽ôZ®”’BO:E?E[ó‡ºz„•ˆ…–‡y"þäþæ¸0h 6©ÅŽš¦LHqA\ÈýÌÞËÜÝÒÉÑ‹ÿìAN<@ PY PY?+?+99//99333310#"&'73 4&#"'>3 AþøóµèÀ#Ý7’žl޾ |Ê{è'þðþÕ®•ĪÛÅjm ^žZ‚ÿ§EN+O@, $) ,-&PY) PY  PY?Æ+?+99//9+9333310"''67&532&#">3 '2>54#"Œ¶} 8{H%_ôµêÀ"åž’YåçÐ^DZ¹VwO%aYt2Šî"«˜ÄÅÛ•RZj呜†(D+k_]'ŠþWØÌ'C@" " ()%PY PY RY?+?3+?3+?993333310#"##"!23'332732654&#"Ø2J÷1¢yʾˆy£1´87&0ülw†’Œ†–‡xþc (/i_6Vb—£ùÁQC àÉÓæÖÅΊÿæÚ*D@" %%+,RY(PY "PY?3+?3+Ä+?993333310%#"!23'5!2&#"#.532654&#"^1¢yʾˆy£1AF:;y¬ýáw†’Œ†–‡x®i_6Vb—‰(¨”ü;©6~*làÉÓæÖÅÎ…ÿìFNE@# PY  PY PY?+?+99//+993333310532#"&'73265"!.…úíçóþì¥é,ž›g þᇙ I–÷&þäþòþíþÛ„|-MYζÒ©Ÿš®…ÿìFNE@#  PY PY PY ?+?+99//+9933333104&#"'>32#"5267!‰¡Œg›ž,ë£ìþùëëòÛ†œý¸C¶ÎYM-|„þÚþîþõþá!þ.¯™þ¸/ÿìN!)i@" ((  *+¸ @ Y"))PY!  %PY PY ?+?+9///33+33+993333333310.#"'>3 7327#"&'# 53265'Ô~_\ž+ΙZPr (&)=6VKMläØþK· {yyˆÓsWO-€€þ¤DC(Œ;”z(5þöþà?o¸«ÉºOÿÿ¯ÿìANfÿÿŠÿì%Nç5ÿíN3r@"!!/* /145,&¸ @$Y1PY/!!,,PY PY?+?+9////93+9+93333333310#"&'732654&+532654&#"'>3273267#"&'cÔÀ·Ó±Õltpt`Z]pi^­³Ê¢Šº"‰/2%=";~U[€!´y€!¥¨­ß^]W`\NR]̘©e\DC“4yp‚7ІÿíMN'F@%!! () PY %%PY%PY?+?+9/+993331032654&+532654&#"32# CBŽ‚xŒnv`Z]p€k® ½óÊëÛx€nËþóÿ&”Á`sYRT\NP_ÑÛ ' Š°?yr^˜Sxþn9:4@ PY ¸ ¶Y ??3Ä++39933310%3!!#"&'532>=!5´þúÁáH§*·/hj1þެüTŽͬ ‘ .h] ŽþXÚ&4Z@.-' %%56!RY 1 PY11*PYPY?+?3+99//+3Ä+99333333310"&'7325##"3234632&#"4&#"32>g¨Ì¸q\øfñÆ·ÄÌq§-’ &729@A³–ƒ‰z3laUFþXŠKQ;ÂÑ ia1‘— ¦NFû|þ8ÏÁݿߗ¯P_·ÿÿþXKJ‚ÿì(NE@#PY PY PY?+?+99//+993339210!# 4632.#"3275#y¯Oß{þuæ“©Þ¹ul–™š¥jùþ^EJ±‘¬—ZjßÔÔÄCÛ1þW›:E@$  PY ?3?+9933933333310%3 3#"&54>4'326öþ;ÍdnËþ0}kj}%÷LK'$%'–¤ýúü]Þum€€m(Z\ØSˆŠQ.43ÿèÆA 8N@$44!,9: !(/(¸ @Y4++ / PY?+?39/993+3/393993310%4.'322'&#"#"&54?.#"'>32?>° )  GHL8r!??#-ƒ3R}kj}P1ƒ-#?>"r8Lau)77(uÖ*3L00/]È`\o2[55þÑ^‘QjxxjVŒ]055[2o\`Wn—FF—mX´þW:0@  PY?3+?3?99333310%#"&5332653#?e>£y²¥´b~–µ´¹p]±ÌÑýRœy° sú™J¹Ú:@ RYPY ?3+Ä+?399333910!2&#"363 #4&#"#¹EI5B~ iê^µis|Ÿ´²(¥Žd;ŠÍþƒý/·ˆ„µ›ý¹þWÚ%D@# $$%%&'%PYRY PY ?3+Ä+?+?9333910!2&#"363 #"'52654&#"#¹EI5B~ iê^xyM2>E8is|Ÿ´²(¥Žd;ŠÍþƒü©—Œ ‹Hh"ˆ„µ›ýeÌS@+  S[ PY PYPY?+3?+9/3+3?+93333333103#!!5!#53!5!'53éÖÖ|ü*¦ééþÁóÈÈi…þªŽŽV…CŽÒÀÀöÿïs:%@  PY ¸ ²Y?+?+9310327# !5!¶97!,2-þîþôÀ%QF   (•ŽÍ: 1@ PY PY?+3?+3933310!!!!5!!Í3þÀ@üÍ?þÁ:Žü⎎†\Ì Q@* !" PYPY  PY PY?+3?+99//3++39333331032673#"'!!5!&#"#>3!5!à ‚Z`#|ü*¦'‚kT7þßÕ/0rrþŽŽ=0/h|뎆\Ìb@2     QYQYPYPY?+3?+99//+33+3933333393103#!!5!#"&546;!5!5#"3à©©|ü*¦d…fþßÕ´3;nÚþ5ŽŽ˃kc{ŽýØ<3iáþWÌ"@  PY RY?+?+9310327# !5!¶977/E-þçþßÕsQC¢(¿Ž¹þW…Ìd@3  ! PY PYQY???9/+3+3?+9/993339933331033!#"&'732>54&+5!¹´ôþ½Øç’¼é'±7ãa”O½RýÊÌþn²þ”þÁ‰ä˜–¶_§a˜¸‚üShÿìi:'D@" & &()'##PY ??333+3?339333931032653#/##"&'##"&533265¹1A@O©•"hNXW(oUvf¨1ABM:ýRš{À¤_ü­½*0f]`djZ¬ÑÑýRš{¨¨shþWc:&D@"% %'(&""PY ??333+3?339333931032653#47##"&'##"&533265¹1A@O©§#eEXW(oUvf¨1ABM:ýRš{À¤_ú#|YN`djZ¬ÑÑýRš{¨¨scþWdN0P@* 00(# 12!%PY!,PY  ?3??3+333?+9333933310!4&#"#4'33>323>32#"'52654&#"1A@O©•"iMXW(oUvfxy@2>E81ABM®š{À¤ý¡S½*0f]`djZ¬Ñü©—Œ ‹Hhš{¨¨ýÿþþWN!9@ !!"#PY PY ??+??+399333310!4&#"#"'52654'33632dis|ŸxxM2>E8ªiñ­ª·ˆ„µ›ý™Š ‹Hh¾½*,9OÍ»Âý/³þWøN 7@"! PYRY?+???+39933310327# 4&#"#4'33632u>,@;þçis|Ÿ´ªiñ­ªs”¤(8ˆ„µ›ýS½*,9Oͻ¹:0@  ?3?399993333310 '3#&'#gÍ%ª§þ7(!©:ýSJ}˜ûÆ»:GbAýg:ÿÿ‚ÿìIN™8ÿì N"f@8  #$QY PYPY PY PY?+?3+?3+?+9/_^]+933333310!!!5#"325!!4&#"326bþvÈý A‚Ÿ¦¨¡BY$LþLO[[U©_Rq‚þ–…K_ #0?‰þÀSàËÎÝþSÒ4ÿì˜N&D@" $$'(!!PY! PY?+?3+39/9933931032654#"326= #"&'#"&5¶NNTGʽ¾ÉHTNNO+¢–a„ƒ[›,Mjð´·èþú丳°Ãjþ´þÙòý†{„}þñ'L‚þWIÌN@)    PY PYPY??3+3?+??+993933333210&%34&'>%½ÏŒ¤ÔÃþiÚhrqiý³ejlcþWšù2ƒþ~þëþýþ-þfÇÇÊüµÏÁ¸ÐD̸ÿìÛ:)@RY ???+3993310732653#&'##"'¸pd¡Æ´«(2`„_hf¤ò»üýCLÎcŠppi5¸ÿìÛÌ)@RY ???+3993310732653#&'##"'¸pd¡Æ´«(2`„_hf¤ò»Žû±LÎcŠppi5¸þWx:5@RY ¸ ´Y??+?+39933310732653327#"##"'¸pd¡Æ´873/;Gþ.`ƒ\hf¤ò»üûNQC  (kfe3òþWN)@RY ???+3993310&#"#4&'33>32pd¡Æ´«(2`„_hf–ò»ü[fLÎcŠppi5òþWN2@  !RY RY?+??+39933310&#"327# 4&'33>32pd¡Æ876+".þë«(2`„_hf–ò»ý‘QC ¤(>LÎcŠppi5N @  RY??+99310!!2&#" igdhÁ¼/§ÒÚþ¸þW±N @   RY ??+993104&#"563 ½Àhdgi  þW¦ÛѧþÒþäüS¸n: I@$    PYPY ?3?+9/+399333339310!#!2##!254&#l´Ó»Ð}ŒaÚþ´ÜÛtk:¢•ž#þ=·úþŽ»\[¸n:I@$   PY PY?+?39/+399333339310%2654#!33#!3zlsÛþîÜLÚþŸŒ}ϼþ-´‰[\»þŽú·þ="Ÿ”£:§þW$K4c@4 +&%%56+"")PY&p& &&"RYPY?3/+?+?3/_^]+99993333333910#"'327# 73 54&'$.54632.#"$éηez9*"$+þêŸ Dhnbfþþ’MÔɰÒ¢ uxõ+NlAA‰qI5š¯;Ÿ ¢(y=H «?P@JoT“¦…II—.9&)FmÿþWÃÌ.@   ¸ ´Y ¸ ²Y?+?+933310"'532>54632&#"…O7<96=—“k,1BMK˜þW ,Uh­µ§i€ûu´¯ÿþWÃÌ C@!" PY ¸ ´Y ¸ ²Y?+?+?3+393333310%34632&#"3##"'532>=#AÁ˜žZ11BMKªª˜›O7<96=ÁŒÞ²°§i€üGŒF´¯ ,Uh%þWºN.@   ¸ ´Y ¸ ²Y?+?+933310"&54&#"56323274™KKB1,W¢š849<7þW¬· ƒf§©®üäfW, rþVÃÌ'R@## ()%PY#¸ @ Y PY?Æ+?+9/9+933333310/#".546324632&#"3265&#"¸fynFTQ¿I{I‹@D—“k,1BMKþUA/>IN9:61ZªuXe¼=qTvˆ+­µ§i€û86_O1A±ìd;@PY ¸ ³Y?Ä+9/3+39933310##!5!4&#"5632ìª:xþP°Ua†£©¦¢¢¨Žþ掌OL"‰.‰”ýa¾þWùT6@   ¸ @ YPY?Æ3+3?+9933310533!!327#"&5¾ª:x°þPUa†£©¦¢¢¬ŽþæŽûÛOL"‰.‰”8Iÿì€:%N@'"!&'"PY PY ??3+?39/33+3399333333310!33##.'##"&=#5326=!h÷µllª>£y²¥kk”–þ b:þ/Ñþ/…ý½*,9Op]±Ì{…Ñü=° XœyuÿìW:/?@ ((#--01% PY" PY?+?3+3993399332210"547>54&+53232654'&546;#"fáþðT3!++R|YmCD§Ž¨CDnX|R++ 4TþòÔŒvH@*‹gW_tt]Ÿ¾¾Ÿ]tt_Xf‹*>IvŒÑþýÿÿ£ÿìD:vE‡: (@    ?2?393333103#/#Õ±Êþô4#'þìÉ:ûÆÀ6·uvý>¸:*@  ?222?39/3933103>3#5#&'#ÓÌ9 2“Ë·²]!'‡Á‚  e°:þ)Ê+©ÍûÆ_> 6þX©ilZ_Vý¡D‹ã.@   PY ?3Ä+93933102&#"#&'#>©J2&.O‹0ÖÀþø[)þʾÈY¿ã ‡v1ûÑ‚àmüí:ë¾;‘:2@ ??3933933392310!3 3þ5ÑW`Îþ)¸‚þòý{þK“þWè:C@"  PY  PY RY?+?+3?+3993333310327#"5!5!5!!,+75%C:ðý©ýLýVÏsQC ¡ (‰&‹‰üÚ“ÿN‹: Q@+ !"PYPYPY ?3Ä+33?9/++39933392210%>32+'7!5!5!%"32654& e½avˆŒ˜ý0"‹7þÏ•ý“8ýj./dF¬MF6‹ªž{gxy^T=u‰&‹‰üÚ·Qf,7'-zþWA:L@( PY PY PY?+3?+99//+3933310!#"&'732654&+5!´iþÄßvØŒØþ²šˆ‰¢·£R‰ýK:°þ–ûNj侻 …wǤœ´‚¢þV: *^@6(#  ,+%PYPY# !QY  PY?+3?Æ+99//9+3+933310!'#".54632654&+5!27&#"´iþÄßA>Cd|”Ù´_ª»Ö¹ S‰ýKiµa®¤ISx:°þ–ýƃn8I}ˆ‡EzJu‚•?J³‚û,i:5=J…1Ì:@  PY   PY??+99//+933310!32654&#"'>32¸4E¡£Žžkйõ·òðêÛÖÈ×¾ic”·þìþôøþßþ~…1Ì:@  PY  PY??+99//+933310!&4>32.# 327Jäá}ᓲ깉lþÔ£¡E4‚°÷²™ciþkÈÖýâ…ÿì1Ì;@   PYPY?+?+9/?933310#"&'73 4&#"läá}ᓲ깉l,£¡E4Ìþjþòþý°÷²™ci•ÈÖ2ŠþV@N=@ PYPY?+Ä+99//99333310!2&#"327# Šþ±å À(Öž›š ß"¾ñ¹þþóSû¨›ÄþÓþÆþ¾þÌÔ ›»rfÿìfZ C@ @  ¸ ´Y ¸ ²Y?+Ä+9/Í99393210#"32! 32%53fþ÷øùþú ø÷ÉþÊþÈž™£”þhéþ¯þ”fWYXþ¥þªýëþòþì¿ÛÛÿÿ¹::âzÿíIN'P@," "() PY ß   %%PY%PY?+?+9/_^]+99333104.#";# 32>7!"&5467.54632ŒIŒ{o‚…z;@þéˆx‰H½ÿþûØó€yomîÎõ,‘µW^QN\ºRf]ÄšþÞþ㣒o‰"qXŒ©þä‚ÿìÜ'`@   %%()¸ @Y 'PY   PY #PY?+?+99//9+Ä+99333333910!# 4632>32&#".#"3275#y¯Oß{þuæ“ f‰s/4$+B7¹ul–™š¥jùþ^EJ±‘O}‡ –GMÒZjßÔÔÄCÛÿÿµ:íIþW9Ì"Q@*"  $# S[ PY PY PY?+?+9/3+3?+9933333310!!!#"&546;!26=#"53ùðPþ°O”gŸ·’½þÄŠV\·MAQàÈ:ü$‹%bœY‹}~Nû9kk<98A'ÀÀhþná: =@        ???399339933932310 73## ;n„´´þ%Ó·þ2:þ b‘ú4ŸýóÑi :"@ ¸ ²Y?+?99310)3!üô´X:ü[ŠþWÚ(A@"# )*&PYRY PY?2+?+??3+993333310234632&#"#7##"4&#"326}ž3’7'%8<}µ5}˽Õˆ”†yx…“‹JVd"‘—¦”ù³·¨ke6ýàÔÇÌßÛÎÚ…1Ì[@2  !QYPY   PY?+?9///_^]+3+393333310!32654&#"'>32!!#5!…34E¡£Žžkйõ·òðêÛUþ«´þÍ ÖÈ×¾ic”·þìþôøþßn{™™…1Ì]@3! QYPY  PY ??+9///_^]+3+393333310!5!5!5&4>32.# 327!!Jþ«Uäá}ᓲ깉lþÔ£¡E43þÍ™{n°÷²™ciþkÈÖþö{™2ÿìÍÌ"%d@5##$&'%%PY PY PY#PY?+3?3+?+3??+3933333333310!&5##"323'3!!32#" !7¤…t…{Ie" þ›€ü AG¡ŸGCÉcþ2^¤)BRq¡þn„üÕ‹ØÏ³ŸÔýˆ22þWÃÌ/9„@G0 ""5!/& %))% /!:;,,PY,% # PY#! && QY&&7PY3PY??3+?+39/+3??+3?+9/93333333331032654&+'!#&5##"323'3!#"&'32#"ÁMBSap_.éþŸ ž7¤…t…{Ie" î€{´£‡—*þµAG¡ŸGC„WEĬ§¤t üÎ}2^¤)BRq¡þnþ]!àÉñþúu˜ºØÏ³ŸÔÿSÍÌ$.19~@D% 558/*08"" :;11PY2PY/,PY (PY 5PY?3+3?Æ3+?+??9/9++3933333333993310!'7#&5##"323'3!3>32!32#" !"3254)2ƒ-•7¤…t…{Ie" ýñ;LŒ_egþæýAG¡ŸGCÉ^þ¢p-F'Kx58u2^¤)BRq¡þn„üÕš€c\æØÏ³ŸÔþ’(ýpIK[9›,"4a@311 -%-56%PY0 QY 4PY?+?Æ3+3?3/_^]+999333333310#!"&5#5373!632.#"254.'.547#3›×¿þYtm}„!x†BC—² cRª!=#"&53327/ª:x°—“k,1BMK˜›O7<96=“¢¢´Uaj¬Žþæ0­µ§i€ûu´¯ ,Uh7"‰”ŸýtOLÿìÿìÃ,0<t@6 $4--;&=>!PY QY*7PY&;** ¸ @ Y1PY?+?+?Æ399//9++3?+9333333310"'#"&5#53733#327&53 &#">32'2654&#"Z doŒn„}„!x°°8G=?LÕÇ04¥¬}p"S`_7s…R¡nck82/\7A-dd‰zȃòòƒýkUF5ŽÔ"þ½ÄÑÎeWI&}kXG†GF0;6;AFþWdÊ1c@5*11$    23(-PY("#"QY1#  RY PY?3+?+?3?3+3?+9333333333103>32!"'53254&#"#'###5354632&#"Ž"h[znþü’­GÌ g@4    ?3?3?33399//333/333933333333310# #333# #333z…”…¿|†™{›…zÄ…”…¿|†™{›…z #ýÝÃýÈ8ýÈ8ú5#ýÝÃýÈ8ýÈ8­ÌD@"     RY RY?+?399//3+9933333310#!#!#!#!®ýë¯r®ýë¯rå?þÁçú4?þÁçþV'L9@  RYPY?3+Æ?+?99333310%##"&54.#"'63 32653#r0“p¡˜50(.0?hYkoˆ´µPU±Ì‡p;”)þZþå¢s¯–úþW@L(?@!((#)*% RY% RYPY?3+?+??+993333310%##"&54.#"'63 32653327#"&5r0“p¡˜50(.0?hYkoˆ´ES/9MA¬”PU±Ì‡p;”)þZþå¢s¯–û²€sŸ»ÓÿÿCê+b@êŒ F@ A HY3. I²Y¸1?3+?3?+9333310>32#4&#"#432&#"·)oTvs{FRXf{Á10"/VbMD{’þäqR}hþ>OÑ udDpªº¤Ì=@  ¸I´Y»H[,?+Ä+9}/933331053#"'52653){PT9*4!{Wuuü)ea_9>)Ìê(ó1@  ¸H²Y ¼10.???3+93333104'33>32&#"ÐtJF%NOêJq@›bGtŠ}þrhÜÄå/· »0 H²Y º/.??3+?933310#'##"'53265ÀtLF%ONåý¶q@›`ItŠ}Ž_¾Få=@  ¸HµY  ¾0 HY 4?+?9/3+9333310327#"=#"'53265·&&'3&­NH$MOåü°9/ qÑâPEtŠ}Ž4ê¬å X@  ¸I@ Y@ H  ¾0 IY .?+?39/+3+9933333931033#!3254+®ˆâ”ñ]f“}þÆz¸—”»°5þÄx\fsûýe…þúmë`åI@   »0 0´ ¸.?333?3?393333333310#&'#373?3Žu  …Îy|—ƒ xëì'~0IýèúýúR9<Uýõ†>M ¾Àå8@   ¾0IY4?+?393393310%"'5267373Œ1#98]+þ܃›C/¡‚þåA¾_XtøþZË‹æý¬€ÿÿöMÖÌ ÿÿM¶ÌËÌ @  ?Ì9/93310546733%+y_Y’a“C‰}ÃËÌ @  ?Ì9/93310#65#5Ë%+y_YÌ’a“C‰}ÃËÌ @  ?Ì9/93310##.=ÅY_y,$ÌÃ}‰F“^’&xßó @   /Î99331026544#&*77*TeeTÍ8117UfWWgîx§ó @ ¸G?Î993310"&5463"3§UddU*77*xhVWfU71186ê‘ÌE@  ¸I@ Y  ½IY,.??+3/9/+93331032654&#"'>32*iYWh‰~•pž¤Œ„êb “‡Ž…… hsÀ¶¥Ä ø6ê‘ÌE@ ¸I@ Y  ½IY,.??+3/9/+9333105.54632&#"327F„Œ¤žq”~‰hWYi*êø Ä¥µÁsh ……އ“ þžÿÿkšNª÷ÿÿ€šcª! víW¸&@/3Í29333310%# #3W§þµþ¸§š¨íüòËvíW¸&@/3Í29333310%#3 3¸¨þf§HK§íËüò±±´ @ ŽY Œ[“?3++9310#'##573±iÛèhþ¤ÅŠŠï±±´ "@ Œ[ŽY“?++39310#'53373½¤þhèÛi±ïŠŠ.€ŸÌ¶¸G?Í9310#3Ÿqq€LQÔxS@ Y”?+9910!5!xýÙ'Ôºµ Ì@ ¸G?Í93331053º‚Ïóµú`µ±Ì@ ¸G?Í933310'53SóÏ‚µúþý.þjŸÿ¶¶/Í9310#3ŸqqþjLTþìyÿk@ Y•?+9910!5!yýÛ%þì¾þjÿ@ /Í933310'53±óÏ‚þjúþý¾þjÿ@ /Í93331053¾‚ÏóþjúûÒ:(@ ??9993339310#'73Òe ee e:××ûÆ××ûcÒ:@ ?293910#'Òe e:××&\ß× @   /Î993310%26544#&*77*TeeT±8117UfWWgî\§× @ /Î993310%"&5463"3§UddU*77*\hVWfU7118³­þ @  /Ì33933310%!53533þ™{q{­låå³­þ @  /Ì23933310##5#5!{q{g’åål³£ *@    /Í9/333933310##5#53533{q{{q{ }}l||.ž µ/39910!5!žýp-±Ÿ´ (@   Œ[Y“?++3993310"&'332673e|§VRUU¥±Žu?FF?wŒ ËÌ4@"9P`0` °à€/]qr^]/931053È ÀÀt|X Z@>  ŽY   @ H ŽY/Ooß/?OoŸ¿@H/+]q+Ä+_^]+933310#"&546324&#"326Xƒop‚…moƒyA87CC78ADWqqWYnoX%..%&..¹þU&@ ŽY•?+/9333310#"&54673327?LijSH…@S1-6=þpfUDƒ)$}B*0ÿ±Ì©/@  YŒ[Y “?2+++3993310".#"#>3232673*TPM# o /R?,TPJ!%( pc±%-%$@`b6%-%/HŠn±´ 1@   Œ[ “?3+393333310573!573‰Ï»þÔþ6Ï»þÔ±ïæïæÿæe @   À /3Ì29933107327#"å324P;~UÒ*Né#ˆD<(“4 -¸Ñ *@     /3Í2993310''7'77¸XúúXûûXúúXû…XûûXúúXûûXú º¬»G@   ¸I³Y /3/+9933933333331033#"&5474'32û‚ÁÇ‚þý JQIIRJƒ232Azþþý‡SHYYHSÐ323273ì*TNG76 [ 0Q?,TNEd\dþl%-%>9fi=%-%w”x’ÈÌ*@ ‘[@‘[/+Ì+9333105353ÃÃÃýÏÏü•ÏÏ›|1Ì@ /Ì299310!#!1þì‚–QÕP›|1Ì@ /Í299310!#5!›–‚þìÌþ°Õ›þW1ÿ§@ /Í299310!3!1þj‚þWPÕ›þW1ÿ§@ /Ì299310!53!›‚þjþÒÕþ°íþWßÿ§@  /3Í2993310!3!53ßýˆá‰þWPÉÉêþXâÿ§@ /Í2993103!!êiýYȇKþX‚œ .@ /Ì9/39993332310!#53!‚þV¹pÖÖp¹ªµóóýü ÿM#@ /Í333310'53þïóÏ‚ úþýþ• ÿæ#·/Í33321053þ•‚Ïó úþµ±KÓ )@   €“?3Í2333393310#'##53KiÛèhêÌÅ©©üCüÿ"@  € /Ä3Ý2Ä333310".#"#>323273þF*TNG76 [ 0Q?,TNEd\dü%-%>9fi=%-%w”xþíÔS´/33310!5!ýÛ%Ôý«#T¥´/233105!ý«©#‚‚þÜ$“ 8@#  €//?OŸ¿ï/]q2Ì2333310"&'332673xi cLJcišw;IG=zŠÿ¦ÕZµ/Í331053Z´Õ¬¬þéÃ{@ ”?2Í233331053!53s£ýÓ¥ø¸¸¸þÉÿÈ+&@  /3Ì2Æ33393104&#"'632#5>ß3*HFZjíQ[pE0"c•;U 2xÿ8åÈb @   /3Ì2333310#"&546324&#"326ÈxPPxwQRv`;--<<--;¤QnoPPnnP-77--99þ±‚ä )@  €“?2Í23323331053353þÙÏþ¶ýÙÏþ¶±þêþêþµ±KÓ )@ €“?3Í2333393310#53373kÌêhèÛi±©©ÿÉ€:̵?Í3210#3:qq€LÿY€§Ì@ ?Í23323310#3#36qqÝqq€Lþ´Lþ±‚¨ +@  €“?2Í233333310%53!%53$þ¶ÏÙþGþ¶ÏÙ±ÚãÚãþܳ$d -@   “?2Ì29/333339310"&'332673#5xi cLJciš´³w;IG=zᬬþܶ$º @   € “?3Ì23333102#.#"#>w›ibJLc ižº‰{>FI;wÿ›ëdÌ @  ?Ì9/32210546733e&({^Xë¨jŽAˆ~Ûÿ›ëdÌ @  ?Ì9/33310#65#5d&({^X̨jŽAˆ~Ûÿ›ëdÌ @  ?Ì9/33310##.=^X^{(&ÌÛ~ˆ@‘h¨ÿôéÅÉ @    ?Ì9/33310'67#53ÅUP,h^Á$“ƒ%G*žÑÿ[þi¬ÿ€@ /Í333310'53NóÏ‚þiúþýÿOþj ÿ·/Í32231053±‚Ïóþjúÿ?þ_¢ÿµ@ /Í9/3332210#5#5353¢oôôoþ_sqrÿ^þ_Áÿµ@ /Í9/333331033##¢oôôoKrqsþ‡Åyˆ@ ”?Í233210#!5!yýòÅ9Š>Ì @  ?Ì9/33310#65#5%+y_YÌ’a“C‰}Ãÿ¦þW_ÿÒ ¶ /Î33310"&5463"3_UddU*77*þWhVWfU7118ÿLþW³ÿ¨@ /Ì23329310!53533³þ™{q{þWlååÿMþW´ÿ¨ @ /Ì33339310##5#5!´{q{gÄåålÿKþW²ÿ¼ .@   À /Í9/33333933310##5#53533²{q{{q{þÔ}}l||þÉþÖ9ÿc´/33310!5!9ýpþÖÿþW²› · /Ì2333107!"'5325²þç3U2Ex›þäþؤ”þW¡› · /Ì2333107327# ²xE2U3þç›þò”¤(ÿÿüõþ¿ý½ÿñýðþéþWÿ@ /3Í233331053!53s£ýÓ¥þW¸¸¸¸ÿ8þWÈÿÔ @ À /3Ì2333310#"&546324&#"326ÈxPPxwQRv`;--<<--;êQnoPPnnP-77--99ÿ™þ9bÿž @     /]Ì333310#65#53b,(u^XÃÌWu/dZ§ÿJþD¶;@    ’Y@ HY•?+/9/++3933310!"'53254&+73¶þî9!1%“=HAk'^^þþºbV(*¶dSÿLþUª"@  ŽY•?+/33310#"&54673327ª?LijWD…@S1-6=þpfUF„&$}B*0ÿ½þWCÿµ´/Í3210#3C††þW^þ‡þWyÿ§@ €/3Í2333310#5!#!y‰þˆòþWÉÉPþþcÿ}0@   /33Ì223333393910#"&533265332653#"MD^\a..7A\A7..a\^rþë&5lLCJEEJDKlþ¹þWEÿ[ &@ €/3Í2333393310#'53373eÌàhÞÛiþWï‹‹þµþWAÿ[ (@  € /3Í2333393310#'##573AiÛÞhàÌþl‹‹ïþÜþr$ÿv @ € /3Ì2333310"&'332673xi cLJcišþrw;IG=zŠþÜþr$ÿv @   €/2Ì23333102#.#"#>w›ibJLc ižŠ‰{>FI;wþšþWgÿc"@ € /33Í22333310".#"#>323273*TNG76 [ 0Q?,TNEd\dþW%-%>9fi=%-%w”xþíþ¼ÿ;´/33310!5!ýÛ%þ¼ý«þiTþë´/333105!ý«©þi‚‚þÉþW9ÿœ@ €/3Ì2333310!5!!5!9ýpýpÚvþ»vþšñgý"@  €/22Í223333107".#"#>323273*TNG76 [ 0Q?,TNEd\dñ%-%>9fi=%-%w”xþ¡_¡´/33310!5!_ýB¾ý­V™´/33310!5!VûW©}þÿäã´/Í3310 'ücc‚übažþæÿÝç´/Í3310 #þX‘©çùö ÿ£þN\ÿÉ @   /Î33331026544#]*77*TeeTþ£8117UfWWgþ‡þWyÿ§@ €/3Í2332310!3!53yýˆá‰þWPÉÉÿDþW¼ÿÏ@ /3Ì2332310!!5#¼þˆx_ºþWxþ纺þ¢þ•^ÿ‚0@   /333Í223322393910&#"#4&#"#>32>32üJ7<\<7Jb ZNp9 N6N_ þÚJJEEJJNZ[3(ZNÿ%rÚ% .@    /3Í293333910''7'77ÚW„ƒVƒ„W„„V„ÇU†…S……U…„S„ÿ—li‰(@ /3Ì299333333105>54.5467i/PS,1#_s-0# 1?$ M&*15<"DN L$,25;ý¬ U0@ €/2Ì23333105!%5!ý¬©ûW© ff¾ffþ³ªÿïÂ@ €“?Í333310#5š‰xÄÂþô  ªNÂ@ €“?Í333210#5NÄx‰Âþ÷  þ¤±]½'@   € “?Ì2/33/3333210".#"#323273Œ*GAA%/3 e®,IDA$[fi»%49%mˆzÿœeÌ @  ?Ì9/33310#65#5e%+y_YÌ’a“C‰}Ãþ«ÏSã 2@    €/Í33333333933310#553!53±½uƒþ©–|–ãþû þ쬬¬¬ÿºþWšÿ @  € /Ì233310327#"=3>!,&Ž„ü!p ˜’þ‡Òy"@ €/3Í2333310#5!#!y‰þˆòÒÉÉPþ þWðÿ~@ €/3Ì23333105!5!þ ãüãìjj½jjÿGþW¾ÿµ@ /3Í2332310#3#33††ñ††þW^þ¢^ÿ5þWËÿ§@ €/Í333310!#5!Ë–‚þìYþ°Õþšugù]@.        €“?Ì2/32/3/33/99333393992910&#"#>3273273#"''P(c[ 0Q?>O=a=*d\dU;Q=azfi=0l6lz”x1m7þ˜bi B@  ! /3Ì299//3/33/33333933310".#"#>32326735353ž+QLE72 h 0R?,RKD62jeþ¬´´´7 '!53Y]6!'!72kÕ¬¬ô¬¬þŸÁpµ1G@!!"" ./ 2&&/"+""   ”?3/2Ì2/32/3/3Ì2/33333323310".#"#>3232673".#"#>3232673¥+QLE72 h 0R?,RKD62jeU+QLE72 h 0R?,RKD62jeÁ '!53Y]6!'!72k '!53Y]6!'!72kþïþWÿ¹ (@   /3Ì29/3333233105#'735–ö––öö³€€³¯vvÿOþW±ÿÔ @ /Í333393105#7#;v±±|þWîîýêÌ %-5=EKQYaiqy‰‘™¡§<@§šH¦¦£rvj‚‚n†F¢R’’V–6ŠŠ:ŽŸ.zz2~bbfžZZ^>>"B&*MM*B^žf~ŸŽ–¢†v L›I£ O OL£L¨ ›¦|€P¤dŒŒh\””`˜@„„Dˆ(tt,x ll$pTTXI88<04€¤˜ˆxpXI<44557š449 885å667ýÿ775æ558þÒ849*557sNüsmmIÜÿt}!"@/Î93333331057'5þ窪xR©r``rÿ£x\ó · /Î33310"&5463"3\UddU*77*xhVWfU7118þÜÕ$† 6@  [¡?Ì2+9/3333393102#.#"#>53w›ibJLc iž´†‰{>FI;wþO¬¬ÿ%þBÚÿõ 1@    /3Í293333993310''7'77ÚW„ƒVƒ„W„„V„þ—U†…S……U…„S„ÿtþVÿú @ /Î933333310%5ªªþçr``r©RÿtþVÿú@ /Î93333321057'5þ窪¯R©r``rþèþV­ÿú H@!    /Î99//92333333399333331057'5#'#3þ窪År``r©R¯R©r``rþ¥ªªÿ¤x]ó @   /Î33331026544#\*77*TeeTÍ8117UfWWgõ§³e @  ‘[ “?+33104632#"&õ8''89&'8'89&'88ÿAþV¾ÿÃA@!         /Ì29/9333339393107''7'7'3 …Ž]CKNB^Œ† SÊ3K%z)~)y%L5Žþ¿þWEÿ½+<@&&  ,# ) /33Í2223333333939910#"'#"&5463263232654&#"4&#"326EiNY33YOhiNZ22ZOhýÈ=,,;;,,=ê=,,;;,,=öNeIIeNNeHHeN36=,,=6336=,,=6ÿ8gÈ4@ /Ì9/3333310#7!3È_q@ÿ_q@þæ³³ÿSþW†ÿÊ @  Y/2Ì+333310! 332$7†éýÐýÏé…^JììK^6þs‚vv‚ÿS¿†2 $@  @Y”?+Ì2333210! 332$7†éýÐýÏé…^JììK^2þs‚vv‚ÿSœ@ Y/+3310!5!û¶JÿSþÖÿU@ Y/+3310!5!û¶JþÖÿSÃ…ÿ&@  € /Ì9/33/3333210#"%$#"#>32327…-´†™þéþèŽ^t…-Â{YÍ‘ªš9ÿ —VUT\”£(-V°ÿSÆ6 @   /2Ì2333310&$#"#! ^þµììþ¶^…ê0/êÂvv‚sþÿSþWÏÿ¹@ /Í9/33332105!5!5Ï–üæö³€lvþ¸Ü„ó#/`@) -0*¸I@ Y! »IY1³$$¸I²Y¸.?2+3?+99//9+3333339310"&546?54&#"'6!2327#"&'#'2>=ipoš¤¥MQQL€ Š(3,F;/y@Bi=†}bAÜyjx~*_N:? ΄}þ¸99O LMVJ_@m<>OQ?Cþ¼ÜJóY@ ¸I@Y@ H A IY1 IY /?+?+99//++3333333103267#"&5463 '.#"ÃidP`kœq¤ªª D~ a]YgM„ŽB3 [YÈȽÊþkaynynÿÄê=.·A 0.H[2?+??33331053332#4&#"#3¨)oTvs{FRXf{{bMD{’þäqR}hþ>þðpþêèó%N@%  &!¸I²Y¸1´ ¸0² ¸.?33?93?3+333333933104&#"#'33>323632#4&#";8NN\zs&eLTaCœpey8ON[êäkXzsþFX£`#NCFK‘ŽþäkXwvþFÿOê«ó/@   A HY 10.??9?+3333104'33>32&#"­tJF%NOêJq@›bGtŠ}þrÿWß»<@ ¸I³Y ¾0IY/?+?Æ3+33333310#"5#53733#327»;A“UZ$Rˆˆ"+-ð¬ý]ªª]þ7, þ©êXå /@  »0.?3?3333393310#3>3E‘þõ‚¢0·‚êûþ§4C!þ¶êOå ?@     »0.?3?3932232393310 #33ÇÆÇ„ù‡¸¶‰ú ê:þƉrþØ(þþvù«6Ì@ €?Í33331053ùnÏß« þüuþW²ÿx@ €/Í322310#5²nÏ߈þóÿÿðþWÐÿ6ÿÿ‹ÿìAN‚ÿì8Nf@>  RY`p€À PY PY?3/]+?+3/_^]9/+933331032.#"3267#"%53‚ô³ìÀ€vž““l޾ wÄyõÿŸ´"«˜[iÄÛÞÍjm `Y Ǭ¬‹ÿìANh@? RY/ PY PYp€Ð?3/]+?+3/_^]q9/+9333310#"&'73 4&#"'>3 53AþøóµèÀ#Ý7’žl޾ |Ê{èý²´'þðþÕ®•ĪÛÅjm ^žZý…¬¬ÿÿ`þ•:Û±ïö!@ ¸ ²[“?+93331053ÛOÅ«±!$%þà7±–A ?@  Y ¸ ²[“?+Ä2+39333331053753!53 6Å’•ý¡‘±!o%þ•¸¸¸¸ÿÿÌF&$8þ&ÿP³¸þ%´%+5?5ð¤ÛÏ%@›[?oŸÏï/]+93103ðë¤+þÕÿÿÿÏÃF&(a8ýôÿP&´¸ÿÀ³H¸ÿÀ² H¸ÿà´%+++5?5iE Z@   ¸ @Y_YP ° ?2?39/]q+3/+993333333310!!#3!353¯þX¿¿¨ºû—OÅ«oý‘EýÊ6ú»!$%þàÿÿ€F&,8þ&ÿP&´¸ÿÀ³H¸ÿÀ² H¸ÿÌ´%+++5?5ÿÿÿÏÿì¬Z&2F8ýôÿP³¸ý­´%+5?5¯EY@  ¸ @Y @P`???39/]]333+9392333333310#3353M¼þžÉøöÉûQOÅ«Hý¸Hýý§Yþ»!$%þàÿΛZ$*b@'((%*%!  ! !+,'*¸ @Y'  _Y _Y?+?3+33/3?+993333993333331026;!5>54&#"!532&54653㥘_.Èþ1|xž”” x|þ1È._˜¥~äýÕOÅ«Zþ¸þñËþ¿f œà[þ½×ñïÙ½ý\àœ eA̱”þ¦!$%þàÿÿ•ÿì]A&j9óµ¸ÿá´ %+555555ÿÿÌE$ÿÿ¢€E%à[E@_Y??+99310!#!!Ÿ¿{ýDEœ ÀEI@'      _Y?+3///?33_^]]9333310353!&' Ýôãý¤?/þÙ4þÆ3$‘´ûN“¾ ¹yý ƒsÿÿ¢bE(ÿÿIƒE=ÿÿ¢*E+fÿìfZ X@9 _Y/_Ÿ¯¯¿ßïÿ  _Y _Y?+?+9/_^]q+93310#"32! 32!5fþ÷øùþúý÷ÉþÊþÈž™£”þ±©þ¯þ”fWQ`þ¥þªýëþòþìVššÿÿÊE,ÿÿ¢ËE. ÂE 2@  ZK ?2?33]]9333310!#&'#3ÂÉþÂ0$5þÀÉùƆ‡ÁVüzEÿÿKE0ÿÿ¢*E1‡FE W@5  _Y /  / ? _  ¯ ß  _Y_Y?+?+9/_^]q+993399105!5!!5›—üU¿‘ýc©œœûWœœššÿÿfÿìfZ2£*E#@ _Y?2?+9933103!#!£‡¿ý÷Eú»©ûWÿÿ¢_E3l¡E S@*   _Y  _Y?+3?9/_^]33+3993393331035 5!!!lý÷çüðÊþm¢%Ý¡œþa|þœÿÿL€E7ÿÿ$¨E<ÿõÅO )V@.%!  +*&&`Y%%`Y??99//]3+33+393333310+#5#".54;53324&+326%;#"Åx׌)µ)‹ØxàµàÂ¥˜ “£üÇ£“ •¥ŠçƒÙÙ‚é‰Ü¬¬þüᤲýHÁ¡¢À¸°ÿÿ$©E;1œE<@   `Y ??339/3+393333310!#"53;332653+:Ëã¡„3›3…¡äÊ:ð±þK¶Å0üÐȳµþOðþéþs;“Z#D@#!   !$%  _Y _Y?+?3+33393333331026;!5654&#"!532&5gõ®£u,Èþ†‚¬¤¨ªƒ…þÈ,u£®Zþ¼þí½þ·l œàb¬àèìÜ­þùbàœ mI¼Cÿÿʆ&,j @  &%+55+55ÿÿ$¨†&<j @  & %+55+55ÿÿÿìö&b8<@ &&&)%+5+5ÿÿ¯ÿìAö&f8P@ (&=(+ %+5+5ÿÿ³þWö&h8P@ &O %+5+5ÿÿ•ÿì]ö&j8@ &  %+5+5ÿÿ£ÿìDA&v9ñµ¸ÿä´%+555555ÿìN%X@0 &'#PY   PY{‹?3]+?3_^]+??993333333310%#"323673#.'3267.#"vsôÍÁÙÑ~³-2¼2T;/·#ýÄr„x¥˜wˆyíþÿ†ywtjþÍb þÌg=!1ÞÉçÄÓÔɬþWgÌ)M@) #' *+'&'&PY''PY  PY?+??+9/+99333310#"'##46324&#"32654>gíÜ·‡´äâÅÑß”ªþôyn“@¥Q˜ÎÅ—œ•Æã^rXþ׬íÜ·¦ýWÌ;bp›§üÐ+1š‡žŽ ’5þX:@@$  v†; K [   ?2?9/33]]93339910 >3#67ÿ J6&ÅþKE$¿@þ):ýo ÌŽìûû¶þÙÀó/pÿìUÌ ?@" !"  PY PY?+?9+393333104.'326'#"5475!˜8Qb¸È§“¡þðš<€o<þôåæþòòîþÁì×V”zfAð™£Ã¸þÇ~Ÿ¬hÞþï ä½RH‚¯ÿìAN']@2% !  () !"!"PY!!PY PY?+3/?3/_^]+9/+99333310%267#"&54675.54632.#"3 ml¿@iPõ›ÖÜ›wk†èÄ”ÓC€/‘i€w¿íÿÈ„rTMdab¤—l–  ˆb…œVcXGDUJXX‡ce[]¸þ•NÌ"B@!$#$PYfv†  ¸ ??9/3]+3933933310'>54&'.545#!5!wss|™•GS~ †³®¹\NnHUþ2"þôþàˆ{Nc#Hc@e8R3J##_]½Ü<ŽŠóþ¬þï³þWN0@  PY  ????+399333104&#"#4'33632dis|Ÿ´ªiñ­ªþW`ˆ„µ›ýS½*,9OÍ»Âû†—ÿì6Ë >@QYQY PY?+/+9/+99333310#"!22!"! 6ðäàëÑïßþ*„ýÝŽ‚#}ÝþƒþŒ}tîþüþìþäÙþõþå •ÿì]::@   PY  PY?+3/_^]?+933310327#"&5!5!ˆPTne^³±¦þÁóZoejxŒ±ÀOŽÿÿìe:úrRÌF@&@H  PY ?+?39/+33_^]9333310.#"'>32#.'#3V5:23#b$KdT;«¾Ï /8þÿ»Åìd' „8ƒœû‹A—$Z~ýÁœþW}:7@   PY ??3?33+399333310332653327#"&'##"&'œµkw€’´#+A0[_jÁCmþWãýRŠ‹®¢süÐKF^dÂ)&þ\6:(@  ?3?39333310#3654'36Ôªþf½K•‰1±4N³þFá:ü`¹O£‡na¿þš#Ì0S@*$$ 12QY- ¸ ¶Y--&¸ ·PY?+3?99//++99333104>75.54675#5!'>54&'.¿y塱őžÿ^ÞþýÞÅñûþÉpnz”vCS~ wšª·Xbt¿ tj€Žˆy`amƒÁOf$>^F`8R7F"^ÿÿ‚ÿìINRÿì¢:2@  !PY PY ?+??+33993310327#"&5!#6="5>3!Ö*4#MBsfþŒD¼')P‚k4Õ¬ý^LEq†ÉHý¥þ÷›ÈùP – ŽþWTO1@   PY PY?3+??+9933310#"&'##4324&# 326TóÂkŸD´òÕŽä~Á«þù;¦VŒîþÖAN54.'.54632&°–«=‹š9ydA$/~ 4j}½±UŠã“q¹>qsÁþèØRkQ.&3!!327#"&5‘R”k4ÐþŠ|8Pr8€w¬ – ŽýT‡ ƒw€É£ÿìD:/@  PY?+?3_^]993310#"&53!2654'3DúëãÙµ˜ŒI)¼5:;þâþÏØß—ýcþÚ×é‚3Nvþì2þW™R E@$  !" QY QY??3+3?3+393333310#&4746324&#"$™ûï éôÕÀz‡4ž• ·©[Q•A5þïþ× þi—  å+!ˆä­þ`DÃÜþÝö¿ßþßý¹ :þXŽPb@=  Td_o+;    PY ?3?+9_^]]]]]?93333310%#.#"'6323 #sþ•¼Ö¾;^3"7IZ|U¢&»þr´¾ïýi9WkpƒnœþÙýGü×XþWq<>@    PY  ??3+3?33/93333310%>53#.533´¡}ŸÐí ìС{  r”¬†ý|óÕþk•Õó„ýz«’Ê5ÿì™O)R@+'! '! '*+(( $$PYp€ ?3?33]+39/93339991032654&'7#"&'##"547326=3·\IGKgaœ¸¢Žd„…c£·agKGK[ŸÁš¶Ñ¾Âí† þ½çøþß“xy’ ùæC!†èǽҷ™üÿÿ•ÿì]{&jjä¶&¸ÿÑ´ %+55+55ÿÿ£ÿìD{&vjä¶&¸ÿÖ´%+55+55ÿÿ‚ÿìIö&R8<@ &;%+5+5ÿÿ£ÿìDö&v8@ &%+5+5ÿÿ5ÿì™ö&z8-@ *&+*- %+5+5‚ÿìKÌ'0`@8-((" 12%PY/PY °À // +PY QY ?+?+99//_^]9++93339910>32#"&!2#"32654&#"4&#"32K'5·jÝðóÚ¬ãmþ¡¸·•©€”„‡’Žˆ‰’ÎaS±Vv›ª*€˜?8P[ÜÍÎã—>!{oˆzr…ýÆ’™–™¦7aAc:[5&+5þ¨¼þÍv1yZ*1‚#,#ýàý¸HýýÒPVÿÿþ{?Ì&‚1ý‚ÿÿ?†&‚ F#¶&¸ÿÇ´%+55+55ÿÿ‚þWIÌ9(ÿë¥:'S@, %%""()PY ## ## PY?+33?39/_^]9+39339310!##"##"547#2'!32653(}}3=¢•Ç2vj”£p|% eý»d¡HOŸQ:‹Xé~ùþô €‹ ûîÑüÇu ¹·þøþ†­aþŸœ®6þW‘>-p@ -**'./'¸ ´Y'#¸ @ Y ¸ ´Y ??+?99?+?+993333393333910 !4#"'632!327#"'5326=.547fýÙþ÷îw8"BK|z6$  oyw*2ð@C+578ca5"üáPi癘µuþîI–þŒ¿ç þèþØ ¡ DQd•¦ŒBfþWfZ2@  _Y`Y ?Í3+?+99393210&32! 32Ë× ø÷×ÈÖþÊþÈž™£”þWœa6YXþ¥þªþÑþœ"þcRýëþòþì‚þWIN3@  PYQY ??3+?+99393210&5324&#"326¾ÈýèôîÊÃЉ™™’ŸŽþW›ñþêþæöþåþeÇ×ÔÒÙÒÛÖq[Z8@ _Y   _Y?+?99//+933310&5432.#"327#4ßä"ô¥ëD¨'œh ®¢¯:.¿ õù.£¬Av~ƾǾ þA‚þW6N,K@  & -.¸ @ Y# #*¸ @ Y# PY ?+?+99//+93333104.'.532.#"#"&'5326X.[lšªg6ñ²í ÀuŸ”7dW>y_:æêf³4zšI„„w*7$Pw¬r©šZjÈÞm}G# >eRš¢¨+JÂ=E >@  _Y _Y ??+99//+99333910!#5!#!¤µþ¿{©þþ‘ÑýãEœ þX: @@ ¸ @Y PY  ??+99//+99932310!!#5!#!ý£+žþs´¬þâþ²¹ü_âÿöÿíëÍ*J@$)&+,*)**" "_Y" _Y ?+?+99//339933333310327#"&547'654.#"'632W%??;;$@T‚‡…ðä @-' :$@TZk2çN”þ=”dm ¢±ue^œ•f }ê­UO- IŠ€wþÊWèzR $@ RY?Ä9/+993310 #!53!RþìÂèýÂèêüýŒ1Äý¬(þYtZc@4       _Y?+Ä9///993233933333910'>='&''.#"'>32tþÊþ­7Éßgþ_=Ò*þ0=ÑJžhb¤Nshà’¹›ÐþœþQd˜GÁ·!ÿ|~nþì|{dgum’yëþ^þVÔP@(           //99//99323393933210%54''%&''%%7.Â7,þœF~-Gþ„GpÒþ¤¬œ¾jÜþþ6êÎ’­»wq¹µ«UÄý3UþXpE)P@' ! ' *+( !"`Y!_Y?3+3Ä+?339999339939310"'#"&5332653323#!5!26=#ˆ> uM˜Š£?PIB¢=H•¢Sµ™ýÁ?|@§L[ÕÛ©üg›Š‚‡µü[’‡£ûÃÚi“º3‰hþXc:,O@'$#,,# # -.,#((PYPY?+?3+3?33999933993931032653#!5!26=##"&'##"&533265¹1A@O©ßäýäš…#eEXW(oUvf¨1ABM:ýRš{À¤_ûÙä׋‹¢ƒYN`djZ¬ÑÑýRš{¨¨sn*Z?@!  _Y_Y  ??99//+3?+933310&#"32673##"&54632f9D½‰}M¨D¿¿¦¨Ë俬Gg.Œ4þÕ–£/+ú»VôÙÚñ'&Ž*Z>@  PY RY ??+99//3+933310!#"&5!2&#"32653u8³‡ÀµH@:=u/k`¬´)[P°Í7(§”þúro4®—÷ú»¢þXeE;@  _Y_Y?Æ+?9/+39933331032>54&#"#3>32#!¢ü™kK)•’¿¿^ŽFãïLîÎþÕþí"M‡Ï“ÝèZýPEþ3%þÑþÖÅþç¶_ÿì5–(3[@,% 1%45¸ @Y/"PY1/// PY )PY?Æ+?+?99//9++9333310267#".#"#46323 4'#"&54>"327.+¨€4#|H%|øîHhN<B˜u]U_^V!6_Øn‡–m½{’HA³£#mOPNI\t2’æþñþß#Kez22¡ŽV_eqyYŒD‡QF47º"&ZÿìnZ,S@,"' '.- *%% %%** _Y* `Y?+3/?+3/_^]9993333104>7>54! '>323 4'7#"$Z3_¡¡Ec;þåþô-·/íÙáïU¶¯­‚J©¢R$¬2þåõùþõmQ^J& 2L<ÕÕ!¬˜»­ab&&>^Hq}IS8jbÅëÈdÿìTZ(H@")*"PY((%¸ ²Y?+3/?+3/99933310%#"$54>7>54! '>323267Fêõ÷þô3_¡¡Ec;þåþô-·/íÙáïU¶¯­‚J«ŸyÙ{6JÆ»Q^J& 2L<ÕÕ!¬˜»­ab&&>^Hs{&# Ö!$P@+" $#  $%&_Y$   "_Y ?+/393+393333333102'&#"!5.#"'6327>!¬¡vj :@)1|;ü²6|2).,&jv¤\t,GG&vþ6Öî–Æd0T&.þÖý‘‘á*.&/:cÆ[sÀÀhfû H²A#T@! $% ¸ @Y PY?+?393+3933333331032'&#"!5.#"'>3276hmÜÇL8h!B@ #$ PY  ¸ @ Y PY?+?+9/+93310#"%6332654&#"5632Sþÿåîý7A›}þÚÁ¦J ”–€H;/seÜÌz»Ó$  –P®žÉÔwn †¶n_EB@      _Y  ??9/93+339333333310'654+##"&5!3533 _“šh¾h™“9`¾b8JBA8‚üC½‚8ABëë‡ÿñFØ9@    PY  ??399+3Æ293333310!%53!#!#!Fþ{þíeþÖJŒe…®üCd=” ždþá6ÿì—>$J@ !%&¸ ·Y ¸ µY ?3?+?3?+993333333310 !4#"'632!327#"&547fýÙþ÷îw8"BK|z6$  oyw8"BK|z5"üáPi癘µuþîI–þŒ¿ç™˜µŒB‚þWTN ,H@''!-.¸ @Y  *PY $PY?+?3+?9/+9933333104>32#"&'32#.#".4&#"326‚6t¼ˆøìöóp¤>]®°˜‡@Ÿ$O…¸yC‡ŸŽŠ˜£Œañ¢RþòþèþîþêMN‡¡I$UZ >kÆÚÇÊ×ÐÓËÿÿ‚ÿì8NFÿÿuþWDÌMÿÿfÿìfZ˜‚7:Q@/   PY¯ ß ï  Ï ß    PYPY?+?+9/_^]q+99392310)"3!!"!!)7þåíÿäÒþ&‹—ý#Ù'Œ®›„þ«–K:S@0 PY¯ßïÏß  PY PY ?+?+9/_^]q+993392107!265!5!4&#!5!2#!–ÙŽ•ý”Žþ&Üìíüàþ'Œ®§„¢§ŒþõþúþÿþØÿÿ¢_E ÿÿ¹þWBÌÀÿÿqÿìvZ&‡EE @@    ?3?39/333933333310!##33™è†úªûíáõýÜ$ûpEýçú»fþWg:<@    ??3??333933333310!?##3673Îþã™þÚšúÈ5.ÈïÔrsüG·œGûƒãý©‰Ÿ“ûÆKþWTO'J@'"  ()PY PY %PY?3+?9/3+3?+93333310#"&'#!!#5#534324&#"326TÒ»n @?þÁ´zzâÑŒÛuÁ›Œ~u7¨XunøþàDK@@H@ H@ H+++5ÿÿWÿì\Z&HÿÔ@@H@ H@ H+++5ÿÿ¢b¨&(Cÿ¹ô´&¸ÿ´ %+5+5ÿÿ¢b]&(jâ¶ &¸ÿø´ %+55+55ÿìŠE"X@/   #$_Y° _Y_Y?2/+??+39/_^]+9933333910"&'7326=4&#"#!5!!>32eN‚!eA-,r33fnÇzm2ý*©œœþ¾$±¼à«¾ÿÿà[©&Evxõ@ &@ %+5+5qÿìvZ’@`      `Y/_¯¿ßïÿ _Y _Y 0`p0€Ðà?3/]q+?3/+9/_^]q+_^]]9933333910!267! ! .#"!;Ee¤9Ÿ•þ²þùþåS¨%g ¥ «aþ&‰‘AþŒjS±þ±Aqƒãé‘ÿÿOÿìhZ6ÿÿÊE,ÿÿÊ]&,jâ@  &%+55+55ÿÿ°ÿìÚE-ÿð±E#L@)  %$`Y`Y `Y  `Y?+?+?+9/+9333310+# #"'532>!324&+326±Ì¡áµ?sx5 :9' 6ë*«Î¢vZ19Zn‰­Ü¹þTþ®þ·‚ „AŸÙýÀͱl†þˆG±EM@&    `Y `Y ?2?3+9/3+39933393331032#!!#3!4&+326Ü\«ÎÌ¡þíþ·¡¡IÞvZckZnEýÀͯ­Üyý‡EýÀ@üBl†þˆŠEJ@'  _Y€   _Y ?2?+39/_^]q+993333310!4&#"#!5!!>32ÌP`sžþÚ7þ­‡8¶°!zm2ý*©œœþ¾$±¼ýËÿÿ¨©&ÊvWõ@ & %+5+5ÿÿ¢*œ&È BÍ´&¸ÿ¥´%+5+5ÿÿÿì¶©&Óæõ@ & %+5+5œþW0E 4@    _Y??+3?399339310!3!3! þ¿¿þþW©Eû[¥ú»þWÿÿÌE$¢”E G@%   _Y  _Y_Y?+?+9/_^]+99333910#!!!!24&#!!26”ÿæýó–ý)BòÿÀ¤¤þÕ3¤œ‰·ÒEœþfÌÀysþ(pÿÿ¢€E%ÿÿà[EEþh¯EI@$   _Y _Y¸?3?+33?+9933933310%3#!#367!!!¯ ü– w]iC\¦þÙ1!YI–ýÒ˜þh.tIôþ–þ†óþÉuÿÿ¢bE(ÌE‚@G !  `Y?ï ?22?339/]q+3_^]399339333333333999910!/#&'33>73#M÷¹:=+É­”)_D D_)”­É(A;¹÷V_ý‡Ï=aØþ~gb[ý¥bg‚þ(\Aý0yý¡CÿìpY(~@K"  % %%)*"  `Y/_¯¿ßÿ_Y_Y€Ðà?2/]+?+3/_^]9/]q+99933933910"$'7!2654&+532654&#"'6$32mËþöU¥w™°ÀÊGG´®˜€~°2¯FÈÓýˆ”®}좺MþðŠuzr”zierv=­¨ÂŸvŸ!©|y»g¢*E D@&  Œ z i   ƒuf?2]]]2?33]]]99333310333#47¢¬ÞªýøEü ‚rú»lR¬û–ÿÿ¢*©&Èæÿîõ´&¸ÿü´%+5+5¨EP@*        _Y ?2?39/+99_^]9933333991032673###¨¿]žIûÊþØ)H7ýÞþU$f#¿Eý³em{þR7!#£þ†+2b’„:%=L:6=׺¥þ®þuþ¯‡ ˜L£Ïàú»ÿÿKE0ÿÿ¢*E+ÿÿfÿìfZ2¢*E#@ _Y?2?+993310!!#!kýö¿ˆ¥û[Eú»ÿÿ¢_E3ÿÿqÿìvZ&ÿÿL€E7ÿì¶EI@(     0  _Y?+?39/3_^]_]99333910"&'732>73 3>‡.Q^H&:69Kýæ×¡]ÍýìNl}& ;5Xýãûù˜€:ÿÿÿõÅOWÿÿ$©E;€þW·E 2@    _Y??+3?3933310%#!3!3·´ü}¿ ¿ ý·©Eû[¥û[_1E-@ _Y ?3?9/+9933310#"&533273#s§•>Î̾êwõ¾¾Þ%»²4ýàç1Öú»YsE 3@  `Y?+3?339933931033!3!3Y¢¢¢EûG¹ûG¹ú»VþWÌE>@      `Y??+33?339933339310!3!3!33>ü¢¢¢ŽþW©EûG¹ûG¹ûGý˃E =@  _Y _Y _Y?+?+9/+9933331032#!!5!4&+326„òÿÿæþ±þ±µ¤¤mu¤œ̺·Ò©œüByoþ(ticE @@ `Y`Y?3+?39/+993339310+3324!#3263Cþÿäõ«>öû¢þ¸EM¥›«‰·ÒEýÀȶòþ}þöEú»¢”E 2@ _Y_Y?+?9/+9933310#!3!24&#!!26”ÿæýó¿BòÿÀ¤¤þÕ3¤œ‰·ÒEýÊÌÀysþ(pWÿì\Zœ@f  /   `Y?_o¿ï @$)H _Y0@P °àð  _Y ?+3/?3/_^]q+9/+_^]qr+_^]]99333993105!.#"'>3 !"&'73267çª Ÿ¥g%¨Dè¦þåþù¢òOŸ8¥e¢¬ a‘âêƒqA­¢ýOþ­þ–´ÀAŠèòVÿì—ZW@/     `Y ¿   `Y  `Y?+???+9/_^]+9933393310#"##3332#"32—Ⱦ²Ä ™¡¡™ Ʋ¼È¬jomj×Ù©þªþ™B3ýŸEý­44þ¨þ§ þ÷þêýÔ4+E ]@4      _YO?o¿ï _Y ?2?+9/_^]q+3993333393103.5463!##3!! 4»õèâ¿îþ’˜þðþÐUÌ•´Áú»?ýÁÍxÖÿÿ€ÿìˆNDŒÿìSÞ %R@#&'# PY¸ @Y  RY PY?+/+99//++3993339104&#"3262#"6767>–„•Ÿ•‹•¡ŒóÞÒúîöélæÉŠï΄›”T).ÊöÊ¿ÁÈÂû×þûþúþ÷þýBNC¶'!¡Do±€‰¹::!P@(   "#QYPYPY?+?+9/+999333939102#!!2654&#!!2654&#‡ÈÈtkÛÁþ´Špwþø€mfy:Œƒ^|ƒj“¥:üKU]eSÂþÀHZRL :@PY??+99310!#ý£´:ŽüT:þhv:K@$    PY PY  ¸?3?+33?+993333993310! !#!#36!3?þÄ$[@û7£üæ£wNn+p’¬þõþyŒýÚ˜þh&€Ì`üTÿÿ…ÿìFNHË:!t@(!!! #" ¸ @Y/ ?22?339/]3+39933993333339333999910!.'#.33>?3#7 ý¹O<õ²”AZ.š0Y@”²ØG(P¹ý 7à ýû`Qrïh`Èþ8afïþ»j+ý  þ Šÿì%N&r@A  $ $$'( PY @P`pÐà PYPY?2/+?+3/_^]q9/+99933933910"&'73 54춮#"'>32ZÅÚ1Ÿ˜ƒÓ¹·Ã÷€ ¢×ÁÆçI€H€«íw‡,TP¹_i‰ZR GI‰y™„AjC’išª¹: 4@  Š   … ?3]3?33]993333103#4?#g óŬþÀ:ý°þëeûÆ”Ad0ü—:ÿÿ¹´&èæó@ & %+5+5Ú\:F@#    PY/ ?2?39/]+999933333991032673###Ú´q”J´ÂâNHÌþÃ"n5´:þ&^o þ»o4ý®ýþ&ÿì:/@  PY PY??+?+9939310!! #"'5326!cþƒ.$Owj2,+:IBCƬþºþÿþõn ”MèûÆfg:H@%   @P? ?333]]?33399333393310!47##3673Îþã™þÚšúÈ5.ÈïÔ5°üG·K˜ý,:ý©‰Ÿ“ûƵ: 5@   QY/ ?2?39/]+99333310!3#!#iû´´þ´:þ6ÊûÆíþ:ÿÿ‚ÿìINRµ:#@ PY?3?+993310#!#´þ´:ûƬüT:ÿÿ³þWBPSÿÿ‚ÿì8NF‚J:'@ PY?+3?933310!!#!‚Èþv´þv:ŽüT¬ÿÿBþW‰:\FþW…ÌN@(     PY PY??3+3?3+3?9933933310#&54734&'$…îâ›âòðä›ëåü~Šņüþãþg˜!ûýþþëþûþ‚+NÑÀÃÑü³)ÿÿ^m:[°þh¦: 6@     QY ¸²?2??+399333310!33#!dû´“£ü­:üI·üIýå˜:šý:+@  PY ?2?9/+99333103273##"&5NeauÀ´´ç¢’”:þnNT4ûÆÒ[žŠ›fg: 3@  QY?+3?339933931033!3!3f   :üI·üI·ûÆ\þh½:B@   ¸@  QY?+33?33?99333393103333333#\ ù ù :üI·üI·üIýå˜ÿÿ~: E@$  QY    PY  QY?+?+9/_^]+993333102#!!5!32654&+ßÍÒØÆþgþ¸üÊ‚xt…Ëp“Ÿš¤¬Žþ6þ\c^Wjb: F@$  QY    QY?3+?39/_^]+9933393102#!332654&+3©ÍÒØÆþÀ¤›}sq~œ°¤p“Ÿš¤:þ6þ^a^Wþ :ûÆÌ): :@  QY    QY?+?9/_^]+99333102#!332654&+ŠÍÒØÆþA´ð‚xt…ñp“Ÿš¤:þ6þ\c^W|ÿì<N}@OQY/¿ïÿßï PY PY p€`À?3/]q+?+3/_^]9/]q+9933399310#".'73267!5!.#"'>32<þÿôyÉ| ¾”r‘” þ‚~”“vŠÀõ´ôþîþàYž_ fq°»ƒ²ªi[–­þÞFÿì˜N[@1  !QYÏß   PY PY?+?+9/_^]+??99333933103>32#"'##332654.#"ê©Χ±Îʶ²Ï§¤¤Tohhn5^=lqpâüþÐþþþùþ×îþ:ýâËàÜÏ‹½eÝEû: K@%   QYQY ?3?+9/+399333339310 #&463!##";KþÅËXùØÏ°´ê‚xk|ýÊþ6×4•–ûÆÊñ\]^]ÿÿ…ÿìF´&HC±´ &¸ÿ²´ %+5+5ÿÿ…ÿìF{&Hj@ & %+55+555þWÌ%`@! %!!&'#$#QY$ PY ¸ÿÀ@ H$ $ !PY??+?99//+3+3+399333339103!!363 #"'52654&#"##53¹µ+þÕ iê^xxM2>F6is|Ÿ´„„̃„;ŠÍþƒüÇ™Š ‹Hhˆ„µ›ý«¬ƒÿÿ ´&ãv“@ &g %+5+5‘ÿìQNƒ@S  QY  ¯ ß ï  Ï ß   PY p€`À  PY?3/]+?3/_^]q+9/_^]q+993333391032.#"!!3267#"‘ô·õÀŠv” ~þ‚ ”q”¾ |Èzõÿ"±’[i¤¸ƒÀ«pg _žY ÿÿ§ÿì$KVÿÿeÌLÿÿe{&ój)@  & %+55+55ÿÿuþWDÌMÿì§: W@.!" QY QY PY QY?+?+?+9/_^]+9939933310 +##"'532>7!3254+‹Î¼Ï¥(>d^/%%04#5È3æå4pþΖ¨ÁþE×ä_ E¬»þ6þÉ¿\°:W@,    QY  QY ?2?3+9/_^]3+399333933310!332+!#32654&+öKš6ÍÒØÆÑþµš6€zt…7:þ6Êþ6“Ÿš¤÷þ :ü;de^a5ÌT@QY PY ¸ÿÀ@ H  ??399//+3+3+399333339103!!363 #4&#"##53¹µ+þÕ iê^µis|Ÿ´„„̃„;ŠÍþƒýM™ˆ„µ›ý«¬ƒÿÿÚ\´&êvj@ &5 %+5+5ÿÿ¹´&èCÚ´&¸ÿÙ´ %+5+5ÿÿBþW‰´&\æñ@ & %+5+5µþW: 4@  QY?+3?3?9933931033!3!#µ´û´þ £:üI·ûÆþW©Hÿì…Z.Q@*)$# #/0 & &_Y ,,_Y?33+3?39/+3933339310332#"'632#"'#"32&#"327–?0KSRJ+#[F}£¢““WT–™›£?X(Y!-JRRJT8þn:N%2Vrþ‹þºþ¹þ”««dOHs6;W2þêþûþúþàÿì¦:O@'           ?3?3399333393933333310# #33654't2Œ o‡ªþ¢· ’‰·àS\0:yާþ]éˆþx:ün®äünšK—œz”EH@% _Y `Y  _Y?+?99//3+3+993333310!2#!#5353!!4&#!!26aBòÿÿæýó¿Ëþ5s¤¤þÕ3¤œ̺·Òæ“ÌÌ“ýysþ(p¦ËG@$  QYQYPY?Æ3+3?+9/+993333310!3!!!2#!!3254&+-´*þÖÍÒÙÅþ:þÓá÷út…ø:‘þo‹þ娟°¯üÐÎ^f?ÿìÌZ$i@7"$%&_Y_Y" _Y ?+??9///3+3?+9933399333331032>7#"##33!2.#"!B z}3M@1™F½‰Èß ª££ª“‹Á8¡#;O5{s FaüÞ2a~8Æ®>3ý£Eý³b£¯>j\.Öö‘cÿìŸN"i@8"" #$PY PY QY/ ??9///]3+3?+?+99333993332310#33632.#"!!3267#"'¤¤ª ʶ¹­ [TlfNþ² ÍMe «½“¶Í âþ:þ+êÿ§•Zjª¹ƒþ‘gm ›´ô ÂE K@&    _Y  ?33?39/+3939932239910!#####3!'&'Âɼ‚¯}¼ÉùÆb'%OEN+!ýìýìE©iÝÝ|}E‡: K@&   PY   ?33?39/+3939932239910!#####3'&'‡É{¤tŒÊ±Õ.O *7Lpþpþ:ý¾ÊX“4¹È?ÍEg@5       _Y   ?333??39/3+339399229933993310!#######333!'&'Í¢™_¢[™¢¡º££éÉ O @?ýìýìýìEýj–©…sÝÝX^cÂ:k@6    QY ?3?3339/3+33?93333939939939910 3#######3!Ž{x5ˆjžqT™Qn£}Ú¤¤ø’þnBûÆpþpþqþ:ýº¸E_@/   `Y_Y ?33?+9/33+3993393933993310#54.'##54>7!!0“ªK´8†{¾Š:´O®•þÉîþÁþrwÔßÍÒ”FýŽrI™¹ÒÍÚ×x@ý¹«#ª:[@/  QYPY?33?+9/+33393339333310!#54.'#"#5467!!ªª;ˆƒ©|Š>ª¶ÙþÊØþÈ”­Mþ˜þOÖF‘DþQ¯E•FFþÜýúkƯiþ~?£E"%t@:$"%!"! ##  '& _Y#!!%_Y!?333??+9/33+33993339933933993310#54.'##5467##3!!#„ku6 ¦!PK¤NS#¦†¢¢yÓÊþ tó ]”ÅuÍÒ×…@ýŽrCŒÌÒ;¨8ý•EýÁ?ý¹«.´:!$r@9"# $$ !! &%  PY$#PY ?222??+9/33+3399333993393399331033!!#54.'#"#5467##.´„ÒÊÊqz5ª MM©KL!ª8<×’ó|:ýúýú \¯ÖFF»w4þQ¯6~µFFš¤+þQ¯þ~LþW\ëT@Q6K#A@ &,,&@)K UV=C_Y2O`Y)`Y# _Y=22=HH8_YAH`Y/Ä+/Ä+9/////_^]+33+9++933333333104&+532654&#"'>737>32&#"32>32#4#"#"&54>7>›ÀÊGGµ­‘‡~¬3²7Á—¸œ£[H6S-B X´ˆ˜ª0RuŽ›—m;¤:kc]-^m˜JVl~Cˆ¢Tœ¡“lW?#“…v”w{k{u‚=‰§Sþ»ØC8M>ȽŒ¦ ¯„[ƒ\;$ 3)l!‚dM"zWn>%>Y–þWú©M@9'*1DCC1 *-  NO@F¸ @Y- PYD@  @DKK;¸ ´YK#¸@Y'@PY?+Ý33Ä+?+9////+9+933333333104>7>54!52654&#"'6737>32&#"32>32#4#"#"&–H…Š„k9þµ¡˜c]Yq ¢$Ô¼œ£[H6S-B [pˆ‘gy™R¬³pO*˜:\RN-[j˜JEWlD{žŸNc<-L=ȉTXJVJFÊ,Yþ»ØC8M>Ðfeˆ  m_…P.$t$}hM#–ÿÿœED@"`Y??339/3+33393933310!".'33332653+„tNF*d¡d -1FQ›3…¡åÉ:(cĸ±þKކI0üÐȳµþOòþëþsþW^:>@   PY  ??3+3?339933933310%>53#.'33¢Œ áíŸl‚R%w§€*>7Ÿwž±rý÷åþk•Q®É„ýRxm/ÃfÿìfZ 'H@&!()_Y# _Y## _Y _Y?+?+99//++99333310#"32"3267#".%27! 632fþ÷øùþú ø÷ýOI=ž•Ž”+&?2OKOþäþê!0þïþè#Îð¹ !)!!¶®™ !(! 1O0@  _Y ?3??+93393310!#3632&#"ÍÊþÉ@(,QÉ;ŸHc+a+,-EüzxŸ,±Ê5+q.øHc+a+,-üßþwÀî 8@— tN5+q.¾4&"9O% þñ °Ÿñ4‚Ç…›˜„…šk{7Ÿ42454055þW ‡w€+5üîûÆê¿Lþ…þÄBu3ƒþçþèîâdjêàÛìogïþWÉN +S@-%$ )#&'((&$,-'$)&#PYQYQY?+?+?+?33?3933333310! 324.#"32>"'5326?33[þàþä‹”“ŠŸ424631564&"9O% þñ °Ÿñ4‚ýÎ2þõþÛ¶¬MS¶¦§µUO¸üã ‡w€+5üîûÆê¿fÿŸf£+e@7" $**$ ,-  _Y *$''$ $_Y ?33/]+3/3?3/_^]3+33/9333310#"&'&7>32'#"&'>326f²­V56U¯¯¶¬T33S®µÉžR01Rœ O00PŸ©þíþ¦8-87,6\M2*44*2þ²þä{m'//'lþ„þs&,/&o<ÿ­*m@<(" +, PY  %%"((PY?3/]3+33/?33/_^]+3/_^]3933331047632#"'&>32>54&'#"&'<ÏÌ,db-šÒÈ-ba-Æ×½jqK65ItghrJ55Iuhødc-þûþèc`ÂÒ0<:.Í¿ÂÍ.:9-ÑÿìËÙ/:M}@DCD800:# )M :DNO:9`YM;;D,_Y:D66D:G GAŽYG & _Y# ?333+3Ä+9////3+33/3+933333310>32#"'#"32.#"326732#"#65#5"&'.#"#>323ê B1±Ç±–XW–±Ç³1C 7 6GM{h:hh:izKG6 h %jSNCKRWt7¶$¶„<{`\AW"þƒþ®þ¬þymm†UT{"”"þØþõþüþÁUFFUA1 @b*<4:bG€58<1Ý¥´.<:0'ÿì§”#.Aw@,78,$$. A .8BC;5ŽY;A//8.-PY.¸ @Y*!PY ?333+3?3Æ+3Æ+Æ2/3Ä+93333331044#"'#"3"3267326#65#5"&'.#"#>323é|’áë§§Ždg‹¦¨ëá’|U]=ut=]UþÐ %jSNCKRWt7¶$¶„<{`\A"ݹ–þßþñþâþìSS!–¸Þé¿<++<À„b*<4:bG€58<1Ý¥´.<:0ÿÿHÿì…é&úfh ¶:/%+5ÿÿÿì¦&úI@  &! %+5+5qþU[Z;@  _Y _Y?+??+9/933310%27#&!2.#"•A-¿äï¦çE¨%g«¥«‡ý¿œh5±¢­Aqƒþþþíþïþï¤þW)L;@  PYPY??+?+9/933310&532.#"327DÎÒè¦Û¹ri™Ž™”=.þWŸ"ü ¬—ZjÃÒÑÙýÅnÿà_ÚP@)        //9////9933333393310%%#%7%73_)þŸNd)þ›€¡Œþ¦)\Mþ¡)a~Ÿ‰‘˜^þë_˜`þ5ó]˜^^™_Ãþþ¢{`å"@ /3/Ì2333310#!#"&5463!54632`I5þ¥C.2BI5[C.2Bq2<8<@42<8<@þ¼ËLÁ!@ ŽY /2/3Ì+33310.#"+53267632ó55!B&thfi4X*aFcgËJ@&H .}yÿŸIbÌ @  ?Ì9/33310##.=bYNw#̺^k3rL’ÿŸIbÌ @  ?Ì9/33310#65#5b%wNYÌ’Jm:k^ºýÓ;.”(@  Y @Y /3/+Í+33310"&'.#"#>323.f¹er‰Fv‡ ߤAƒoª\>58?.mp¤µ*@91ü%þªÛ· '1;EO¡@U1O-KAAKO;77PE 'E'##Q#FK>C HH%M 27 449(-**/KCM79-//-97MCKA</3/39////////3333333333333333333333992333104#"#324#"#324#"#324#"#324#"#324#"#324#"#32%4#"#32ürrgÙÙrrgÙÙürrgÙÙ-rrgÙÙú…rrgÙÙßrrgÙÙ‘rrgÙÙýrrgÙÙÄ••ÿÿþ••ÿÿî••ÿÿúæ••ÿÿ&••ÿÿþ••ÿÿüà••ÿÿô••ÿÿükþŸç '1;EO±@a;<7EdBKdBKýjzD])XQ›¬zD])XQ›=V0/ G95nüEV0/ F95o V1S1Gl:5nÓV0T1Gn95m;zD])XPœÞzD])XPœýdBK4dBKþ÷W0T1Fm85nV0T1Gm95nü>V0/ G:5nˆV1. G96m¢þfÊ©l@:  / @ŽY@ _Y ?2?33?+ÆÎ+Í_^]29333333333103333##47 332673¢¬Þ ¼¬ŠlýøÙþš ¤\ji]¤ Eü ‚rûhý¹šlN°û–¥MHHMþü¹þÉÃðc@4  ŽY RY ?+Æ?3?33?+Ä_^]293333333331033##467#% 33273g ó٬yþÀ°þœ ¤ ¿¿ ¤ :ý°þëeügþ(7”$’ü—:v@ÇÇþÀ”EJ@&  _Y`Y  _Y?+?99//3+3+9939223310#!#53533#!24&#!!26”ÿæýóžž¿ÇÇBòÿÀ¤¤þÕ3¤œ‰·Òå“ÍÍ“ÖÌÀysþ(pP)ÌJ@&  QYQYQY??+99//3+3+993333310533#!2#!#532654&+Ê´ww ÍÒØÆþ?z.ò‚xt…󹹃ýà“Ÿš¤ƒûl\c^W¢|E\@.   _Y _Y  ??+9//}/99+9999339939910'#!#!24!#327'76_Zwkyw§þç¿ÌîÀþ¸öþvNmlc±™r€`‚FýþEÕÂþýí-val9¬þWIM-m@7)*,++*$ */. PY),'++'PY ?3+?9|/?9/99?3+9993333339939910'#"'##4'33>324&#"327'76E^bd^WyúV´®0žÈƽz…ky?ˆ™X8ve_#"þëŒjZe6¼¢þY§61fd]þôþÝâÂZ¿™ÕÊ*[hbâv©%@ _Y??3/+9933103!#´ý+¿EdþûXDôÌ&@ PY??+?993310!#!3!¨´o£ý¢:’ýà7[E ;@    `Y _Y?+?9/3+3999223103!!!!##7©{ýD˜þh¿©é\œþ@“ýªV: =@  PY  PY ??+9/3+399922310!3###53ý£ËË´zz:ŽþÚ„ýþ„´®þW\EN@)   !_Y_Y  _Y ?Ä+9/?+9/3+9333310>32#"&'732&#"#!!m:•Jðæùí¦Ø:µ+sf–’‘˜?I¿{ýDr%)þÃþ²þ›þ‡†˜_H,ì"-ý)Eœ³þW?: P@*!"PYPY PY?+?9/?+9/+39333310%#"&'732654.#"#!!632?tÓ‹±Ð.²yf’•Uœbtf´aþSts’ã|\Ÿë{Œ TK½¶p¤V þc:‹þt#uÞþhÍE'’@Q""#' '' )(# & `Y¿ï  !@!_Y! ?3?33?+Í9/_^]+_^]339393399223333993310!.'#&'33>733##  ÷¹:=+É­”)_D D_)”­É(AõG´÷L_ý‡Ï=aØþ~gb[ý¥bg‚þ(\AýÐýȘyý¡þhÍ:%„@& !%%% '&!$¸ @Y    QY  ?3?33?+Æ9/_^]93+333393399223333993310!.'#.33>?33##=ý¹O<õ²”AZ.š0Y@”²ØG(K£ý<à ýû`Qrïh`Èþ8afïþ»j+þ#ýå˜ þ CþWpY5o@<*,! ''!$1 67$`Y_Y/4`Y/*_Y?3/+3Ä+?+3/9/+99333333104'.'7!2654&+532654&#"'6$32#"'532gÄúQ¥w™°ÀÊGG´®˜€°1¯FÈÓýˆ”®ß¿€tsSYV¤PA£³MþðŠuys”zierx=­¨ÂŸvŸ!©|¥Ù|R_n"‡#ŠþW%N7m@<(7*5 %%!57 / 89-2QY-! PY PY(PY?2/+3?+3/9/+9?+933333310"&'73 54춮&#"'>32#"'532654'ZÇÜ-Ÿ˜ƒØ´·Ãu‚|„ ¢ÖÂÆçJF€«ž”!wxgTWN@;z„,TP¹`h‰ZRIWFJˆzšƒAjE’i} sSkq!„"=?KL¨þhE]@/    _Y _Y?2/?+Æ9/+99?9333333331032733####¨¿¹‹ûÊþØ)H7Žo´*þUm'¿Eý³Ò{þR3###!<Û04BüØ]#aÈþêA´þÙ:þ&3\;þ»ˆý°ñ þ#¯¢þh±EQ@-  _Y°  _Y?+Æ??39/_^]+93333310!!#3!33#kýö¿¿ ¿‡´oý‘EýÊ6û[ýȘµþh‘:M@)   QY   QY ?+Æ??39/_^]+93333310!33##!#iû´y£Šþ´:þ6ÊüIýå˜íþ:„ÍE ?@   _Y _Y ?3??+9/+993333310!!#3!!#þ(¿¿Ø²óoý‘EýÊ6œûWŽÍ: G@$    QY  PY?+?39/_^]+?993333310!!!#!#B±ÚþÚ´þO´:þ6Ê‹üQíþ:TþW›E!P@*!"#_Y _Y _Y ?2Ä+9/?+9/3+93333103!632#"&'732&#"#!TcU[šš¦¬r& E;]QLO5+'¤þåEþ-NþÅþ°þŽþ”PW9ë$ý)©ûWTþW›;Z@ ! ¸ @Y PY¸ µY?2?+9/3+?+9/93333103!632#"&'732654&#"#!TcMc›™¥­r& E;\RKPXN¤þå;ýÑ:æóþôþöPW´Ó¯>þŸüaSÿìïZ)4[@0 -%02""0 56*_Y _Y '_Y%00?33399+3?+9/+933333310%#"&'# 32&#"327&5432327"64&ïPd=\0j£ýîüë{SO6Iˆ—­À%OWe¡Ž‚œ^W&0?Cþ½=EF>rA(<7ÀJd6„"þâöþàþõS±× þíÚ«þäU,X´’ŽøE©–º‚ÿìšL&2_@ -#0'!!0 34*¸ @Y PY $QY#00?33399+3?+9/+933333310%#"'#"32&#"37.54632274&#">šFkZRVwéþûäËR@@*+m…¤šFDG’vyŠ0D0¾7./46/.5#7%%!/òÅÌÚNÝu²âÞ²þ÷”'xvˆŠtiÁ44ºqþWvZ&W@.  !  '(!! $_Y`Y  `Y ?+3Ä+?+99//933333103267#"'53254'3&!2.#":«°e¤9Ÿþ÷€tsSYV÷þû¦çE¨%g«¥©þïþAþ¿+„L_n"‡#PA kD±¢­Aqƒþþ‚þW8N({@+ &$$&)*!QY&`p€À ¸ÿÀ@ HQY PY@H?3/+]+?+3/+_^]3?+9333331032.#"3267#"'532654'&‚ô³ìÀ€vž““l޾À!wxgTWN@;ãò"«˜[iÄÛÞÍjm ·|Ekq!„"=?PG Lþh€E 7@   _Y _Y?+Æ?+3993333103##!5!ÅŒ±™þE4©û÷ýȘ©œœ‚þhJ: 8@    QY  PY?+3?+Æ99333310!!3##!‚Èþvt£…þv:Žü×ý嘬ÿÿ$¨E<EþW‡: 4@  ??3933939233310!#37>3¼´þ=Ê 4# ÉþW©:ýL+¸p&7Ê$¨ED@!   _Y  ??39/33+393933233310!!#!5!3 3$<þd¼þf:þ|ÍvtÍà˜ý¸H˜eýcEþW‡:B@   PY??3+3?3993339332310)!#!5!37>3¼>þ´þÂ>þ=Ê 4# ÉŠþáŠ:ýL+¸p&7Ê$þhÅER@+         _Y ?+Æ??399933393322310 3 3## # 3fMÍþMpˆ´5þŠþ‹ÍÜþMÍDý|ýßýȘ=ýÃÁ„^þhn:P@*       QY??3?+Æ9993339332310 # 3 3 3##cþ½ÂŸþsÇ,*ÉþsAd£'¼þD,þ[¥ýôþUýå˜þW·EA@!   _Y   _Y?Æ+3?3+393333310%#!!5!!!3·´üÿþþÃþþˆ¿ ý·©©œœû÷¥û[þhÈ:B@"    QY PY?+3??Æ+393333310!!!33#!!¶þÿÄ´“£üäþÿ:ŒüÕ·üIý嘮_þh½E>@   _Y _Y ?3?+Æ9/+9333310# 332733##s§•>þf¾êwõ¾Œ±™Þ%m4ýàç1Öû[ýȘšþh:>@  PY QY?+Æ?39/+9333310!#"&53326733#I碒”´eaG¬B´’£Ò[žŠ›þnNT!üIýå˜_1EJ@& _Y  ?3?9///3+3933333310#5# 3;3673#s‡g{þf¾ê{c‹¾¾Þ ôém4ýàçòþ Öú»šý:L@' PY  ??39///3+3393333331033673##5#"&5NdapmY´´dbp#0’”:þnNT0þØûÆÒ)ÛÆžŠ›¢tE/@ _Y?3?9/9+9933310>32#4#"#3`§•>Î̾êwõ¾¾g%»²ýÌ ç1ý*Eÿÿ¹ÌKÿéÿì³Z$^@0! "%&_Y! _Y_Y?+?+99//3/3+39333333310%#""&54733 !3267"!.QÌõó v^úãéüó ˜`„2þÛŽŠ G ŒØ~n41ƒ:;;2b 2;ýGPçâTVàôæîÿì¤N$^@0 $  %&  PY$ !PY PY ?+?+99//3/3+393333333103267!"#"5473;>3 '.#"Ü‹„a…ž]þ¸Óè ÿ§zèÆ¿»€yu‹÷¼ÈWO-ÿ ë=>;2páìýÁŠ«¯™ÿéþ˳Z 'g@5$    % ()  _Y$  !_Y_Y?3Í+?+99//3/3+393333333310%#&"&54733 !3267"!.F¦q†ÙÙ v^úãéüó ˜`„2þÛŽŠ G ŒØlmþÚ#4ƒ:;;2b 2;ýGPçâTVàôæîþʤN&m@8&   '(PY& #PY @ QY ?+3Í?+99//3/3+3933333333103267#$#"5473;>3 '.#"Ü‹„a…žSþô…þ ÿ§zèÆ¿»€yu‹÷¼ÈWO-èþÜ&)ßë=>;2páìýÁŠ«¯™ÿÿÊE,ÿÿÌå&Æûõ@  &"(%+5+5ÿÿËð&æû@ "&$*%+5+5¨þW©E!R@*  "#_Y _Y?Ä+9/?39/+9933333910#"&'732654$!##3273Œø%„òœ°ð8³*‹o¦±þíþÛN¿¿¹‹ûÊþØNMàþæö¼þꔓ]OìâÖÑýŸEý³Ò{þRq1ÈþWT:#Z@-!$%!QY PY?+?9/?39/+9993339933910%#"&'732654.+#32>3TrÒŽ±Ð.²yf‘–nÃ|€´´04BüØT&å\¡êzŒ TKº·³]þ :þ&3\;þ»|$þóÿþþfÊE>@_Y  _Y?Æ3+33?+3992233310! #"'5326!3##gþÂ+2b’„:%MYG&=›©¼¬Š…¥þ®þuþ¯‡ ˜„/'àûhý¹š þÉÇ:G@& QY PY PY RY?+?Æ++?+9333399310#! #"'5326!3Y~þ‰;@JmV2,+7C7#,ΪÂþÉ7·þLþÏœJ nEügþ(ŒþW*EH@$  _Y _Y ?Ä+9/?39/+9933333310!#3!3#"&'732kýö¿¿ ¿õñ¦Ø:µ+sf™oý‘EýÊ6ûðþ˜þІ˜_H'¿þW:O@(    PY QY/    ??39/]+?+9/99333333103265!#3!3#"&'zlk~xþ´´ç´ßųÍ"€VJ²µ¦þ:þ6Êüßþ÷…—¢þfÊEE@#     _Y   _Y?Æ+??39/+99333333310#!#3!33bŠýö¿¿ ¿ ¼þfšoý‘EýÊ6ûhý¹¿þÉÉ:O@*    QY   RY ?+Æ??39/_^]+993333310!33##!#s紻¬Žþ´:þ6Êügþ(7íþ:_þh1E@@  _Y @_Y?3?+Í9/+993333310%3# 33273##銧•>þf¾êwõ¾”´ >%m4ýàç1Öú»þhšþhý:<@   PY  QY ?Í+?39/+99333331032673##3#"&5NeaG¬B´}£l碒”:þnNT!ûÆþhO[žŠ›þfÊET@*    _Y?Æ+??39/933933333333310#7#/#376733bŠC .&¤‰¦:& í¹(# ¹á¼þfšd#”kþJ¶«wþÔüœEþQ–Zuêûhý¹fþÉÍ:M@'    RY?+?Æ3??333933333333310#?##36733_þã™þÚšúÈ5.ÈïfÂþÉ7ÔrsüG·œGý,:ý©‰Ÿ“ügþ(ÿÿ†\ÌOÿÿÌž&$ I@ &%+5+5ÿÿ€ÿ숴&D™í´0&¸ÿÏ´3;%+5+5ÿÿÌ]&$jâ@ &%+55+55ÿÿ€ÿìˆ{&Djð¶7&¸ÿÒ´53%+55+55ÿÿ«Eˆÿÿÿì¸N¨ÿÿ¢bž&( I´ &¸ÿø´ %+5+5ÿÿ…ÿìF´&H™ @ & & %+5+5ÿÿgÿìeZQÿÿ…ÿìFNÿÿhÿìf†&Q F#@ & %+55+55ÿÿ…ÿìF{&j@ "&  %+55+55ÿÿ̆&Æ F#@ '&%#%+55+55ÿÿË{&æj@ )&'%%+55+55ÿÿCÿìp†&Ç F)@ 0&.,%%+55+55ÿÿŠÿì%{&çjø@ .&,*$%+55+55Mÿì†R@*    `Y_Y_Y?2/+Ä+39/+393333310"$'7!2654&+5!5!wÌþøV¥w™°ÀÊ?¸üÖþ7Îïì¡»Mþ𡇅“’Žœ¥þq ܲƒÐuÿÿzþWA:Sÿÿ¢*^&ÈŠ @ &%+5+5ÿÿ¹R&è J@ & %+5+5ÿÿ¢*†&È F#@ &%+55+55ÿÿ¹{&èj@ & %+55+55ÿÿfÿìf†&2 F#@ &%+55+55ÿÿ‚ÿìI{&Rj@ &%+55+55fÿìfZ M@+_YO  _Y  _Y?+?+9/_^]+99333310#"32 !"!fþ÷øùþú ø÷þ#ý’ ž’› n©þ¯þ”fWYXþ¥üˆÔèì7áèÉ‚ÿìIN G@%QY  PY  PY?+?+9/_^]+99333310#"32267!"!.Iûíè÷ýèôîþ” ýµ”Š‘ G ‰þïþß$þêý9ºÃºÃX«­­«ÿÿfÿìf†&˜ F#@ &%+55+55ÿÿ‚ÿìI{&™j@ !&%+55+55ÿÿWÿì\†&Ý F¶#&¸ÿÿ´!%+55+55ÿÿ|ÿì<{&ýjú@ %&#!%+55+55ÿÿÿì¶^&ÓŠ @ & %+5+5ÿÿBþW‰R&\ J@ & %+5+5ÿÿÿ춆&Ó F3@ & %+55+55ÿÿBþW‰{&\j@ & %+55+55ÿÿÿì¶œ&Ó H7@  &i %+55+55ÿÿBþW‰´&\ž%@  &W %+55+55ÿÿ_1†&× F@ & %+55+55ÿÿšý{&÷jî@ & %+55+55àþh[E 0@  _Y_Y?+Æ?+9993210%3##!!Ÿ‹±™{ýD ýȘEœ þh: 0@ PY QY?+Æ?+9993210!3##ý£t£…:Žü×ýå˜:ÿÿic†&Û F#@ &%+55+55ÿÿjb{&ûj@ &%+55+557þW[E^@2 `Y _Y_Y _Y?+?+?+9/_^]3+3933333310!!3!"'532=##53!!Ÿ¤þ\Yþç;I2E{m©©{ýDô“þ:þäþØ ”wa“Qœ{þW:\@#  PYPY¸ ´Y ¸ ²Y ?+?+?+9/3+3933333310!3#3!"'532=##53ý£ËËSþç3I1>~_zz:ŽþÚ„þ™þäþØ ‘z„´$þWÍEJ@' _Y?+??3993399329910#"'532654&' # 3 3 Í €;I:=5C&4þ¨þ‹ÍÜþMÍLMÍþM´L£t’ ’þn+E 4@ _Y  _Y ??+9/+99333104>3!3!"$7!3#"nwÝ‘¿þ4îþýÀHöþ•«”}Änú»ÕÂþ’ÿÿŠÿæÌG ÿì­E$C@#  %&`Y"`Y  ??3399//++393339310332653#"'#"&54$;3265#"o¢>AA:¢†šµ@TÒ«¼ésþ>fd{}z™¯Eü.…ut†Ñþ1ϺÕÃÂçþO}Œ‡€-žaÿìlÌ*K@&  &&+,(PY ##PY?33+3?3+9/?93339310%#"323'332653#"&'3265#"57¤…t…{If"¢;@A:¢†šg‡&þÐAGSQ¢GC¤)BRq¡û§‡st†Ñþ1ϺNVŽØÏáÒŸÔÿì®Y*U@-*$   +,  `Y  `Y**'_Y?+3/?+99//+99333310>3232653#"&54&+532654&#"?»…ªÃ|g~‡>AA:¢†š•‰–£&:€€ejNr+g~tŸ}š®Š…ut†Ñþ1ϺÀÇ…x”jydsHO ÿì¬N(U@- & )*PY# #PY# PY ?+3/?+99//+9933331052654&#"'!232653#"&'.¡˜c]Yq ¢.K¨Î‘g‰ :=;9¢†š‰Š ¡ó‰TXJVJFŸ~eˆ lb„_q‰Ñþ1Ϻ¤j\þh¹Y"T@,  "#$`Y ""_Y" _Y?+3/?+Æ9/+9933333104&+532654&#"'6$323##nØÁGG´®˜€°1¯FÈÓýˆ¥™´—a€”zierx=­¨ÂŸvŸ!®‰ÔýȘgþhEN"V@-  #$ PY PYQY?+Æ?+3/9/+993333310%3##54춮&#"'>32Îw£ƒÊ·Ãu‚|„ ¢ÖÂÆçJFŒƒýå˜ö{‚‰ZRIWFJˆzšƒAjEŸŠÿì±E!B@ #" `Y`Y?3+3?+9/3939933103#"&5# #"'532>!3265¢Œ™–“µ?sx5 :9' 6ë?BA?Dþ1ѸÀÆGþTþ®þ·‚ „AŸÙü.yu…ÿì‘:!?@ !!"#QY  PY?3+3?+9/933310##"'532>7!32653#"&5X¯(@ia/%%04#5ã9AA:¢†š‘ˆÁþEÔâd E¬»ý9†tt†Ñþ1ϺºÌiÿìxEO@+  `Y_YP °??399//]q+?+9933393310!#3!332653#"&5:þÒ££.¢>AA:¢†š“‹oý‘EýÊ6ü.…ut†Ñþ1Ϻ¼ÊVÿìw:I@&  PYQY/??399//]+?+9933393310!#3!332653#"&5+þß´´!´;@A:¢†š––íþ:þ6Êý9‡st†Ñþ1Ϻ¿ÇÿÿqÿìOZ*ÿÿ‚ÿì(N#ÿì§E<@   `Y_Y?+3?+9/99333310!5!!32653#"&5•þ¼þeijgµÉ¾¿Ì©œœüò—‡ˆ™ªþEÍÔ×Êÿì§:<@   PYQY?+3?+9/99333310!!326=3#"&5!(þÆu~~xµë¿¾êþÆ:ƒýýŸžžŸÆéÀåæ¿&\ÿì‰Z(U@-  %&& )*`Y _Y %%#_Y?+3/?3/+9/+99333310"$5467.54>32.#";#"3 eîþ嬖‰uÚ‹ÇÿF²3¥{‡›­µGGÊÀ³œu¥Yþû満£"•xi¤[¤®=„pqguqp~wŠM¼ ÿÿ¯ÿìANfÿþþW]E8@_Y_Y _Y?+?+?+39399310! #"'5326!#"'5325£þ†+2b’„:%MYG&=×—’;@,B|¥þ®þuþ¯‡ ˜„/'àú:Žš ” þW:8@   QYPY¸ ²Y?+?+?+93310!"'53265! #"'5326!þç=@,D7:þ‰;@JmV2,+7C7#,ÎþØœCQ2þLþÏœJ nEÿÿfþ}qZ4ÿÿŠþWJTÿÿÌE:ÿÿ¸:Z¨þ#ÿË!@ ß@P`/Ì]]29/3310#54&#"#546753#g&03'dBGgHCþ/6..6/1U] ^^ ]U¤N'¼ #(@ ¯ïÿ@ H!¸R?3Ì+]q223104632#"&74632#"&4632#"&¤. ".." .å. ".." .r- ".0 -o -- ".." -- "..¯".."".0ÓNúü ±¸R?Ì10#7'7'7úœœœœ°wœœœœœüVVVVVVVVVVN¶¼ "@ ¯ïÿ@ H¸R?3Ì+]q2104632#"&4632#"&- "0/# -0 0/!".m"--" ..¯".0 0.²N¼ (@ ¯ïÿ@ H¸R?3Ì+]q2ÄÄ104632#"&4632#"&3y." 00 ".. !/." .Çom"--" ..¯ 0/!"...nþ’Ãþ ÿ®¶/Ì]103"&51rgªR[jj¡ŽÏXþ¨ ±¸R?Í10'7þ˜——¨¨¨;P‘ƒ! @    ¸R?Ì]99//3310"&5463232654'7#"&'.Ë&:mRB2T.(7 &:lQ>2P6.19&%@H&xAR;D9/&%@H(vAR4K?)ÃN ¶¸R?Ì]1044œqh›¬N\hm ‘Åþÿç±/Ì10#'73²²²þ´´´°þÿò·@ /3Ì]9/10#52654632#"&ªžgtÿ. !/." .R¢ji\ 0/!"..ÃN ¶¸R?Í]10463"ëœgrN¡mh\ÿÿÃN ÓN®@ ¸R?2Í]210463"!463"f¬œfsþJ«œgrN¢me_¡mh\\;q)+7!@//))55 P##/]333Ä]223104632#"''7&732654&#"'#"&546324&#"326Á~YY€~[;.XRXx7((:<&%:þÓXRX/:\}~[Y~y:$&<:(&8RY~}ZZ}XTX0;(89''98(;0XTX}ZY~~Y(8:&'98q;\)@ /P  /]3Ä]2104632#"''7&732654&#"®~YY~|[:0VTXw8((8:&&:RY~~YY~XTX,?(88((88ÁN š@  ¸R?Ì]29/310#"'#3326= WW"dd !0&š2Xf fLŠ -72¨þ#ÿË!@ß@P` /3Ì]]9/3310#5.=3326=3#‹gN;d'30&gfª\\ dN1150051Ãþ¤ ÿݵ/Ì]210!535 þ¹Û#þÇjÏÅþÿç±/Ì10#'73´´´þ´´´Ãþ ÿ®·/Í]210#5265 «œgrR jj[þ®ÿ®@  /2Í]22310#5265!#5265f«œgr¶«grR jj[ jkZÉþÿø ´@/Ì]1057'%þ㎪þ²3Pà3LÿÿÃN Ðq;\)@ /  P/]3Ä]210'#"&546324&#"326XTV28[|~YW€w:&':8)(8R?,XTX~YY~~Y(89'(88ÿÿ¨þ#ÿËÙÅN¶ ±¸R?Ì10#'73´´´N´´´ÃN ‡µ¸R?3Ì]10!535 þ¹Û‡þÇjÏÿÿÃþ ÿ®Íÿÿ;P‘ƒÏ{=) ¶/ /3Ì]2104632#"&732654&#"~YY~|[[|w8()8:'&:RY~~YY~~Y(88((88þ¶ÿî @ @  /3Ì]q2104632#"&4632#"&/ ".0 /-" 0/!"-b".0 ..¯ 00 0.9þ“ÿî #/;'@39!@! !!- ' /333Ì]q223104632#"&74632#"&4632#"&%4632#"&4632#"&9. ".." .æ. "--" .s. ".0 .J. "--" .0 !./ ".` .. ".." .. "..¯".."".0ï".." ..¯".0 "..Vþuÿî@@  /3Ì]q29/3105!74632#"&4632#"&VH7."".0 ".. !/." .¢mm@".0 ..¯ 0/!"..Vþuÿî!@@  /3Ì]q29/33105#5!#74632#"&4632#"&ÅoHk¢."".0 ".. !/." .þìrmmr²".0 ..¯ 0/!"..þ¤¶ÿB ± /3104632#"&/ ".0 /þò".0 ..¤þ¤)ÿD ´ /333104632#"&74632#"&¤0 0/!".ç. !/." .þô".0 0." 0/!"..¤þ)ÿî #@!@! !! /333Ì]q2104632#"&74632#"&4632#"&¤."".0 0ç. ".0 .t/ 0/! /b".0 0/!".."".0¯ .. 0.Ãÿ ÿƒ ´/]310!!ÃGþ¹}jÃþ¤ ÿƒ°/105#5!#1nGjþ¤ujju¶¸ @O  Ÿ Ï   /]]3104632#"&/ 0/! /h10 0.¦¶F ± ¸S?3104632#"&/ 0/! /ö10 0.wþTÿð #@ @! !! /3Ì]29/3104632#"&4632#"&4632#"&w. "--" .0 0/!". 0 0/!".`".." ..I 00 00H".0 0.q¶ ¶ 0  /]3104632#"&/ 00 /¾#--# --/þ¤žÿƒ±/31053/oþ¤ßßHyƒLµ/39910!!H;ýÅLÓÃG ±·//]]310!!ÃGþ¹±jþ`²×¶//93103™þ` wö‰A¶á ´/  /]3104632#"&/ 0/! /‘10 0.¦¶F ± ¸S?3104632#"&/ 0/! /ö10 0.ðÛ9!@  ¸N?Æ23933310!33ðëëë+þÕ+þÕ¶¶ ± /3104632#"&/ 00 /f10 "--þj¶ÿ ± /3104632#"&/ ".0 /þ¸".0 ..N¨Ë4@  A TYM TYN?+?+9939104>;#"!!ND’¡ª±KM ¢ý¦ð¶ËZª<‹žýîªþ=ÿž °/10##57#5!=´m²°Í  kºËJ@     »NM?2?39933933339999103673##>7LãÖ¿ \MËý“ŒßÛk¬–fþ#Í?f€þm¥“YN}Ë9@   »TYM³ »TY N?+3?+99393105! 3!5!4&#}yî…ûÑñ“¸!ªìþðýÛªª'¶šðÝË@@ ¾NTYM?+?39/3993339‡À102##7>?'.+5´aiD94®¶qTM2!¼"#FveB )2=9‡ËEŒáýø54&#"5632LóÔ¸4ti~Ž@Xkf_N‰‰KjæõÓý3‰™D`ÈâÐÁA°=výÊþýþÚ FÃË@ ¸M?Í]93103# ¹¹Ëý{`þÛË &¶ ¾QTYM?+?99310#4&#!5! Û¸•·þ‰yîþR¸˜ªêþî¬Ë4@  A TYMTYN?+?+993310)5!26=4&#!5! ýÍþÀD¾¶·½þ¼@3Tý¬ªÓÕ'ÕÓªý¬‘ÿÓ'9@   A P TY MJ??+?39933910%6$54#!3!  ¿êþ¹L‘þRþ“¢GØÿ†Û`þJþ›þÜþ‚ƒLË 4@  A TYMTYN?+?+993310)! !4&#Lü7ÇîüïX“¸ËìþðRü‰'¶šLßW@AMN TYLTYN?+?+??939933339102!5!4.#" #>73>°ÛÁý¦Ÿ,_Xzœ@qÆ4êËuJ¤ßþßþ¹ý‰ª¶­Ë[øþÏýöN´/Ëxg þÃ˵ºMQ??93103# ¹¹Ëù´%Ë2@   A TY MTYN?+?+9310)5!4.+532ý¦¢!NJ°ª “Dª Š;ªYË·ÿìbËE@ ! A TYM TY O?+?+3993393310467#5! ! 32>=4&#j:)´1üÿþöþúèD’y‹>œºƒxò4ªóþ÷Xþ°þÅ-GÁxþâ5êÖ[ÀÈXµ›Fÿß^Ë 2@  »PM?3?3999333107 7363FžþËHyÀÈþCþm¢3öüXfª˜þ/ýôûsþFË=@   ¸T´Y ¾Q TYM?+?9/+9933910 #4&#!3!D¸þëôþRËìþðû°R¶šþ¦ª®uVËL@ ¸T¶Y A TY MTYN?+?+9/+993393104&#!3!! )5!265œ¦²þëôþRÑ ýÍþ\¨¿¶ª½ºþ¦ª®þóþèRý¬ªÔÔmþ7Ë6@  ºMQ??39/3993393310#4&/3>?3b¸W‚dÙŽW,\h5 ÀÉßþ¢tÓÉšß§ŒQP‡}øþéÖÛ,JDËG@  ¸M³»TYN?+3?393939922310)5!3>?3DüOËüìå}NE ¿6g\@ª!ýú!ƒƒßÛ‘Ž_$þPþLË=@  A OTYMQ??+?39/933310#!25654&#!j¸3÷Ðþ±þâÑáuýòûbž®±Ìþæþ)xÓ^OІf`ÛË &¶ ¾NTYM?+?99310!#4&#!5! Û¸•·þ‰yîѸ˜ªêþîÿöªËP@   ¸V¶Y¾M UYN?+?339/+933339910>732>73 !3NmT ¿?~ƒ3¸Êm?Á@$¥þ¯þ²é¾bz‘Fþ¸ž [þí`ÚÒ ýúþÒþÛ|Õ'LËA@¸T²Y¸N³ »TYM?+3?3+99339310#5! #4&++532>5ð¿𹕸žD’¡ EP$!ªëþïý1Ѹ˜ýº¶ËZª1hsÿÿ ÃË'ÿÿÿ ÃË'ÿÿÿ FÃË'ÿ®@ ¸J?Í933310#37‰‰è{Ïþ-@ ¸J?3Í29933333310#3#3X‰‰çØŠŠç{ý…{M: @@"    PY  ?3?339/3+39333310!#!#3 Mªvþut¯”¨Fœ—5þË:ýƒÍþ3ÿûÀ:u@>  PY PY      PYPY?+??+399//_^]++3333933333993910)!#!!!!!3#Àý¹þדÂþ®þ†Sþ­“üÐéLþ´:‹þÁŠþ¥KÙÿì¸N(5<£@e:'" 919)9'=>6$6PY1QY(:PY((/1?1O1¿11_11Ÿ11@H11 " $Ïßp $, PY / ?3/]33+3?3/_^]]339/+]q3/+++39333339933105#"'32>323267#"'#"5%4&#"7>267!%´KYŠDöy‰"4•aþ¶§@HJC¨›°GU¡¦©û99@`6zOQ.ýbR]þ— XCs^H-nzzn¤žþ£;‡oQ[—‹‹$ÌRdY—XY0dý³®š«Ue:&n@= #'( PY¯Ïß PYPY?+?+9/_^]q33+339933339393103!23##!#!!2654&#32654&#Uu¯ºÖK§‹!-ÆÊþ2u)yfnqþòïyffybØždFŠ]3’˜Øþ°RRYSÙþ±URRVÿÿ‚ÿì8NF¥;:(@  PY PY?+?+993310)! 4&+326;þåþóþ’n(¹­Ä¸»··-þíþæ:ýõʵüÝË;: R@*    PY   PY PY?+?+9/_^]3+39933339103! )#%4&+3#326‡n(þåþóþ’‡d­Ä¸ññ»··pÊýóþíþææIʵþŠþ¥ËÍå: I@&   PY PY PY?+?+9/_^]+99333910)!!!!!åüèÿýµ$ýÜd:‹þÁŠþ¥³ÿìàN$W@. "" %& PY PYPY?+3/?+3/9/+99333310"&'732654!52654&#"'!2L§Å-Ÿ5É`qþµ¡˜c]Yq ¢.K¨Î‘gy™×},¤^[ȉTXJVJFŸ~eˆ  m˜¬hþn>: >@   S[  PY PY?+3?+?+93333310!5!!!!#5äþ„ÖþZ?þ ÈÈ¬ŽŽüâŽÒÀÀ²ÿì\:,@  PY PY?2/+?+993310 73265#5!ýþé4œ_@O^'dZhrc‹ýŸ´ÿÿìe:úÈÈ: 6@      PY?+?99//9933310)5737!Èýwww´»»ÕŸeŸeüþpŸŸŸþ€p]:@@   ?3333?33393333333310!##!67!#?½¡þü® 60  ­œGýT:ýÐÁ{“©0ûƬrs¸: 0@      ?33?3399333333103#467#f óŬþÀ:ý°þëeûÆ”$’ü—:ÿÿ‚ÿìINRÿÿ‹ÿìAN51—ø &@SY SY/+/+993310 ! 4$"32654&eþßþïýÐàËÏÜ×ÖÐøúîíòåøê½…ž‹•¢‹5k—Þ/@   SY SY/3+3/+93310".54$! '>54&kØÐhl œº¬—Zj¾"ˆ‰`¶à¬ãïðà¦Û¹ri€%ÿÖ§^"Y@2   #$ SY SY /3/+/3/+9993333910% $547'563 ''27"654&iþäþêbtÖŠä0[iÉ…ð\ýÎXÐÝ‚U1QÏ2úîÃvd§¸SþÉs[§­Q½ãD‰¢‹MþCŒžÿì´N%,@L* )!)-.&&PY*PYO @$'H@H # PY / ?3/]33+3?339/++_^]q++393339933104&#"'32632#"'# 53265#"267!WQANŠ?æ¶QS·¨ª¢»OU®þÁ•O[[Uª^Rþ´HVþ¼PC½Ç^H-··þßþïþéþç±±?'ÛÐÐÛ­Ñýy­›«Öÿì÷:%F@%  &'RY  #QY ?+?39/+999333310#"&54675.5332#"326ày„™ÐÀÁСxy‹¸f\À!âlrtnmq:ƒ¸ÁÃÐҿ÷ˆýC ‰ƒ‚ŒˆƒJN &@   PY ?+Ä29933104&#"#!2…ž½åøêàËÏÜ0þïþáƒÿìJ &@   PY ?+Ä299331032653#"@‹•¢‹½úîíòÖ×ÐÝþäþê!Ë): 4@  PY  PY??+9/+9933310!#!2#!!2654&#´Î²Þظþæivuj:³”œ´þze`^c9ï: K@%   QYQY ?3?+9/+399333339310 #&463!##";?þÅËXùØÏ°´ê‚xk|ýÊþ6×3•–ûÆÊñ\]^]9ï: B@"    QY  QY?+?39/3+9333333103!"&573#";;´þPÏØùþ¨Ë;üý|kx‚êpÊûÆ–•3×þ6}]^]\´:'@ QY?+3?933310!!#!´dþ¨´þ¨:ƒüI·ÿÿ£ÿìD:v?X¾-@  SY SY /+3/+93310!2>54&#!5!27#!?®kv4²žýS½*,9Op]±Ìý/ *\Y‚–´ª>£y²¥Xµ¾"P@+!"  #$"RYRY SY SY /+3/+99//++93333310!2>54&#!5!27#!3#3#/ækv4²žþU‹½*,9Op]±Ìý÷þ鸸¸¸ *\Y‚–´ª>£y²¥>£-¥?ÿYô)L@'%%  +*))RY !RY  SY /+3/+9/+393333310!2654&#!5!27#!5!2654&#!?®x° ýS½*,9OsZbkm`²Ëý/®x¯¡ý|Vps†³ª:–l{8Ÿq¤•²VpvƒÿÿE‡:Yÿÿ¸:Zÿÿ“,:]¼ÿìé:P@*    QYPYPY?2/+?+39/+39333310"&'732654&+5!5!U§Å-Ÿ5É`y‰š06ýçéþ§¨µ×},¤dZkb‰)‹‡þ«—˜¬ñÿëÛL'‚@K$ $()'QY@QY!Oo ! !!PY! p   PY ?+3/_^]?+3/_^]9/]99+Í+93333310#"327#"&5467532654&#"'>32À;xgbT 5ªË—§Âš;xgbT 5ªË—§Âš¬PQ@V«Ž“–‡t|PQ@V«Ž“—†t ÿì¬M+5@ (!(,- ( PY$?2+3?99393310"&'7326?'.546323267#"&/$Wu8X!Z-"G]‘J:ù¸Ä:J‘]G"-Z!X9sXWz:779y7?s'4"#ƒ²[ˆC’¡Ÿ“CŠZ²ƒ#"4's?7G[UUZH[|:@QY??+99310!#|þ“´:ƒüI:ÿÿE‡:MÊ:#@ QY?3?+993310#!#´þ/´:ûÆ·üI:ÿÿË):7 Â:>@  PY  ??339/3+39933933310!".53332653# —í­²¤±¥²­|ìœ6l¾wcþÌ›°ý« 4þy¾jþÊ ÿì:-@ QY PY??+?+93310!! #"'5326!hþ‰;@JmV2,+7C7#,ηþLþÏœJ nEûÆ“ê9Ì D@ ¸H·Y »,.?3?339/3+39333310!#3 !&©mþXo’ˆœ‚þ/3wV{ê!þßâüe•þÀA'ÿùêÀÌ‹@  ¸H²Y ¸H@Y/ÿ  / ÿ    A HY,. HY.?+??+399//_^]]++3399333310!#!!!!!#yþ˜†’ÓÙþavþŠºý¹ZÜê!þßâtþÊrþ®tåþêùÌ h@  ¸H@Y/ A HY,HY.?+?+9/_^]+993333910#!! 4&+324+326ù»©þ{[VUUosÅhaÎÎÉ7èæñrk„–âóO{ƒfOBþÎþæ¬þ¢X®ê3Ì"h@    #$ ¸H@ Y A HY.HY,?+?+9/33+339933339399103! 3##!#4+3264&+32®^[VF¼ŠL»©þ{^¸çæñrj6haÎÎÉ-ŸójBxDm„–˧¬þ¢XOBþÎÜêÌ 4@  A HY,HY.?+?+993310#!!24&+326tØŠþš<÷ Ž¿¶¬É ¸åšçzâýê¶¿ýÓÿêõÌ [@   ¸H@Y/ÿ A HY, HY.?+?+9/_^]+99992310!!!!!ÿÚý³%ýÛiêâtþÊrþ®t×êÍÌ ]@  ¸H@Y/ÿ  A HY ,HY.?+?+9/_^]+993399105!!5!!5!×iýÛ%ý³ÚêtRr6tüœÜ0ÛP@ ¸H¶Y¾HY/ H³Y¸-?3/+?+9/+933310432.#"32675!5!#"œûå£É4„)j¡¬¶¡XŸ5þâ Há…åþÿàò s{)TOÌ»¹Ø73¯wþ§N\ÝêðÌ D@  ¸H@ Y/?O »,.?3?39/]+99333310!#3!3aþ ÷êÊþ6âþ^¢üê­Ìµº,.??9310#3­ŽŽêâÜWÌ7@   ¾HY ,H³Y¸/?2/+?+993310"73265#5!8ö0Š R>CN·D˜Ü TZb`GtýH¨ïêÌ B@   »,.?3?3993393333310 #33 lþ†väþgÏêÚ]þƒâþæþPýÎCê²Ì&¶¾,HY.?+?993103!Câêâü’t‘ê<ÌC@   ¸,´ ¸.?3?333933333333104?#&/#3?3¼ ÷dûµÿ  û°ê—V]x.ý\¤!88žýiâýRj!a®üÝêðÌ 5@   ¸,²¸.?22?339933333310 #3&53Jþ  øê6¢ýlâüÅT\‹üÝêðÌ 5@    ¸,²¸.?22?33993333331033#47Ý€ø¡€þêâýu¢;ü”ZHüʇÜEÛ 4@   A HY -HY/?+?+993310#"54324&#"326Eÿáßÿþâßÿ³›Ÿ²²¡¯àîþêòï þóîºÍÌ»¹ØÐʺ¡%L@# &'¸I¶Y  ¸I³Y /3/+9/+9993333102653#"&5467.53"32654&gSbSGVa¦¯­¥`WHR€^Ycseqqcr±€pl¢©y½´µ¼{¨rvzc”x“…ˆx”êñÌ >@  ¸H¶Y½HY,.??+9/+9933310#!#!24+!2ñ´šþ혦°ÙûÓŸ§þ⡼þØêÌ T@      ¸H¶Y¾HY,.?3?+9/+399333339310!#!24#!!26|÷þàǦ°{l¶ÕþÓ3_pêšþf☆m—þUíþš_ØêôÌ-@  ½HY,.??+3933310#!5!¬Œþ¸Xü’ntt×ÜöÌ-@  ¾, HY/?+?3993310"&5332653a¶Ô|€ˆØÜɯxý“…‹‘ˆdý•´ÑÿëêâÌI@      ¸,²  ¸.?33?333333933333310#&/#3?33Û¤§ §¤þù”ʦ†§$È“êv,RTcRýŠâü±quiý—D MÜàó#/l@- ((01*¸I@Y/ »IY1³$$¸I³Y ¸.?22+3?+3/_^]9/+93333310"&546?54&#"'6!2327#"&'#'2>=ópoš¤¥MQQL€ Š(3,F;/y@Bi=†}bAÜyjx~*_N:? ΄}þ¸99O LMVJ_@m<>OQ?Cìܸó#/b@) -01)¸I@ Y)) »IY.³$$¸I´Y ¸1?2/2+3?+3/9/+9333331023267!"&54&#"56323>"7>54&Ùpoš¤¥MQNL € þùŠ(3,F;*}ADi;†}bAóyjx~*_N5D ΄}H99O LMSM_An:>OQ?C-ÜŸò"J@  #$½.0 I²Y »1I²Y¸/?3+?3+??99333310#"&5!23473#&532654&#"!#oTŒ‚Tp#uuþ‰Q]h^^g\SeJ?ÂÆŽAE3Fˆþ*e8*Q¡‰–—ŒŒ0Üœó(4;œ@5();- #;(<=8%8¸I²Y)¸I²Y(5¸I@Y(()/)?))) !%%¸/³0 ¸I@Y o ¸1?3/]33+3?3/_^]39/]3/+++3933333333105.#"'>32>323267!"'# 57>54&#"32677g^P`k%˜oÙG7Žcrrœ«£LRRO þò«CQšþ»‚…€gD?Fj9ýü a]Vc‚ ‚„B3 _UµcRyjx~*_N6C Îbb•RN=EAl<Šynyn-ÜŸ$G@ %&¸I²Y¿12 ."I²Y¸/?3+???3+99333310!"&'##6533>324&#"326ŸþòTo#vz#oTŒ‚€Q]h^^g\Skþq?E'"8eyþÖlJ?ÂÊ“Ÿ—ŽŒ-ÜŸ"J@ #$½.2 I²Y »1I²Y¸/?3+?3+??99333310#"&5!235'3#&532654&#"!#oTŒ‚To#zuþ‰Q]h^^g\SeJ?ÂÆ@E?<ü‡e8*Q¡‰–—ŒÜ­ó\@  ¸I@ Y@ H »IY1´ »IY /?+3/?+9/++93333103267#"&5463 '.#" idP`kœq¤ªª D~ a]YgM„ŽB3 [YÈȽÊþkaynynÜ­óo@ ¸I@Y/ »IY/@/ »IY 1?+3/_^]?+9/_^]+93333104&#"'632# 53267,idP`k@줪ª þ¼~ a]Yg‚„ŽB3 ´ÈȽÊ•aynynRÜ{ó"s@   #$¸I@ Y@ H ¸I³Y ¸1@ »IY/?+3/_^]?3/+9/++99333310"&54675.54632&#"3"327e’fUH`pãn?CÔàM@‰$l…ÜzjKg `FZo¶e<4z`@Ct[XRÜ{ó#n@ !! $% ¸I@Y @ H ¾IY1I¶Y`¸/?2/]+?+3/9/++99333310"&'732654#5254&#"'632hs…l$‰@MàÔC?@KnãqŒbFUf“ÜX[tC@`z4<50¶oZG_ hJjz-¾Ÿñ+f@& ,-»0#I²Y»1 )I²Y ».I@ Y`p¸4?2/]+?3+?3+?93333310%"&'732=##"&54632346734&#"326f~Š{ЏG¦ŒzŠŠNs r—kX^VR`Yl¾hUnÞ{”ÿ̿JE$\‰ý¹¡¡©ŒŸŒŸŸ†*Ï£å-@  »0H²[¸.?Æ+?933310#5#£yyyHyyýû8ê• A@    ½02.?3??999933332310#33 ùZzzCþÕ;ê\Mþñýsrþ¸þM~êNó%G@ % &'½IY1 0² ¸.?33??+33393333104&#"#'33>323632#4&#"+8NN\zs&eLTaCœpey8ON[êäkXzsþFX£`#NCFK‘ŽþäkXwvþF?¾ŽóI@   AIY10.HY4?+???+3933310#"'53254&#"#'33>32Ž¿)*-PBWWg{s,mS{nÑ t h5lWzsþFX£`#PAŽÜ¯ó 4@   A IY1IY/?+?+993310!"&5!24&#"326¯þ´š«J¬›€[jl`^fn_hþtÃɋůž’›–˜“:Ü“óC@   ¸I³Y¸/´ »IY 1?+3/?3/+993333104&#"'>32#"&'732Wbˆ~–o™¢£šu™{ XB¹kˆ‹ nvÌ¿Á˃nLIh¯ó +@    »IY 1?+Ä29933104&#"#!2/[jl`€J¬›hž’›‹ÅÆÜ¯h /@    »IY/?+Ä29/993310!"&533265¯þ´š«€^fn_hþtÃÉ–˜“›-¾Ÿò$I@  %&¸I²Y¿1 0 4"I²Y¸/?3+???3+993333310!"'##/33>324&#"326Ÿþò©<zv"lV‰…€TZk[^g\Skþq„Gþ«‹‡$*I?¿Ë¢†—›—´ß>@ ¸I³Y ¾0IY/?+?Æ3+39933310#"5#53733#327;A“UZ$Rˆˆ"+-ð¬ý]ªª]þ7, ?ÜŽå:@    ¸0³ ½IY/ .??+3?3993331032653#'##"&5¹BWWgzt*nT{nåþnUzsºý¨£‚LDŽüìáf3@  ¸HµY  ¸H±Y /+3/+93310!2654&#!5!7#!ìÐnUzsþZD£‚MCŽþ‘BWWgzt*nT{n~ÝNæ&L@& &'(&¸0³""¸I´Yº/ .??333+3?339333931032653#/##"&'##"&533265¡8NN\zs+bJTa hWqdy8ON[æþkXzsºý¨£`#S>FKCNŽüþkXwvºê¾å -@  »0.?3?39333310#3>3«‘þõ‚¢0·‚êûþ§4C!ÜÝñó'>@ () $¸1³¸I²Y ¸/?2+3?993/9910"&'732?'&546323267#".'3S+<4>7 EhY€‚€%4b@"4=;+R3';4DI27Ý#2RA)W€ndgwwf-aE{W.$R2#,]`+!¾«(`@ " )*¸I¶Y %A IY 2 4I²Y¸/?3+??+9/+99333310#"'##463232654>54&#"«¥’{]{›šˆŒ—esýñ&qð­§t¡ª—‡¬efÔp„;6bnexÁÑ þáɾ Ö`(þù–™˯‰”¾þe™¿ÅôJ@ A 0 IY 15?3?+?993333310#'.#"'6323#kã€,t/."/9H9`´ú’þ-Fòd6\ByÐ|þýÆÿÿ*ÿx£Ž&fýŽÿÿÌÿx(týŽÿÿDÿj“swýŽÿÿÿx¾szýŽ"þa«Ž(D@ " )*% ºD @²¸??33??39/399333310%#"'##463232654>54&#"«¥’{]zš›‡˜frýñ$v9beuoWLTIbZ–ŽžB޽먚u¯@û'o]eodbVGMkxþ`½r6@    »AB?2?93393333103>3#67‚§" .¤þ÷1‚ /rþ$fA™Ûý*‹±d»þ`¸#H@ $% ¸A@ ! /»?C?3?]33?9/3993333310%!2!"&'32#.#".4&#"326J¬›þ´Ph%‡¥”bo7šžB[jl`_en_ö‹ÆÅþs51„^8Ueîž’›—˜“Ýþað€"A@   #$ºC C´ º?@??333??39939333210#.546746324&#">ð­§t «˜†SXdfikp„:7bneÁÑ þùÇÀ¡Ô`–†–Ž™‰•˰‰”¾þešÿÿþMÅ‚€ýŽÿì¸N%,i@: ) !*!-.&PY)PY))  PY#ß ï €  ?33/]]3+3?39/+?3+9333339310%#".5332653632!3267#"&"!.H vps7©:FR?¡U¡¦©ýï´KYŠDösŠôR]i Y©mPE—¡ÑýRxr£®w‹þåþÜþ^H-ÿ\®š«ÿÂÿìMÌ-9m@8 4$ .:;##PYPY++1PY'+ 7PY?3+???3+99/|/+3+399333333333310!"&'##65&#"#>35332673#'3>324&#"326Mþr{£3®'‚kT7´‚Z`72¥zÍÁ½x‡˜‹ˆ™ˆy"ýÊYc 6©ü0/h|i­/0rrtAXhZþìþâãÄÐâÕËÉVÿìÚÌ,8]@0-3,%9:)$$PY PY6PY 0PY?3+?3+?99//+3+3?9933333310%#"!23'5&#"#>35332673#'#.532654&#"52¥zÍÁŽ{¤2'‚kT7´‚Z`7¬ýÚx‡™ŠŠ—ˆy®hZ6ZbyÐ0/h|i­/0rrüF©6t*pãÄÔß×ÈÉŠKÌ0X@ .%12")¸ @Y"PY  PYPY.??399//3++3+3?+993333310332673#'##&#"#>3!5!54632.#"!D‚Z`7´'‚kT6þúÁáH§*·/hj1ë¬þx/0rrþbà0/h|DŽͬ ‘ .h] ŽÿÆùN.9C„@E= /..@2))"((DE6::PY>QY% >"1+1QY' -/@+>+>+)?33??33399//922+333+3+39993333339333310!&###>754'33>323>32673#"'3754&#""7254&‰M+©‚OD•"iMXW(oUvf „v¨CPn|H=1ABMþæ=N6\o1Ó)þ¸Ndý½*0f]`djZ¬Ñw“9þO‡þ_,&¤š{¨¨P¯™Pš{ÿáìN'3d@3(, ''45 (PY#( ,,PY& ((1PY?3??3+99//33+333+399333333310!.'##46754'33>3265354.#"gA‚{:´,-‚zaª>£y²¥N‚oaýT_ª¯?*\Y‚–M (.-þò ;&]‡Ù½*,9Op]±Ì÷$}wþ±p=? Ûkv4³ÿÄþWKM.;n@=6( /<=,2PY(,#PY PY 9PY?3+?99//_^]9+33+??3+9933333310!"'#32673#"'#5&#"#>34'33>324&#"326KþrúV ‚Z`#´'‚kT3®0žÈƽz…ky?ˆ™†{"ýʼ¢¬/0rrv·0/h|ǧ61fd]þôþÝâÂZ¿™ÕÊÅ6N,^@4%-.PY PY%**RY*"???+399//_^]9+33+99333310&#"32673#"'#&#"#>354&'33>32pd¡Æ‚Z`#´'‚kT/«(2`„_hf–ò»5 /0rrþ¿ƒ0/h|³LÎcŠppi5ñÛN%U@/ %&'$PY$!PY %$$$$ RY?+?99//_^]9+33+99333104>32&#"32673#"'#&#"#>3á\¾€;%$<|n‚Z`#°'‚kT/®€ºf ¥ ‹¨¯ /0rrþ¿ƒ0/h|hÿìeK7a@206(("! !8964 -(44%PY PY?+?+99//999939932329910#"&'732654&/.#"#67&54632.#"32673%çÐÊÛ!Ÿ€‰Tg€U†+K‚†ÓʳÓ¢ƒnzt+MlAKŠ/‚a!+™¦…WQTT>L%(i²)5J”›~‹HMJK)7((3§,<|ÿðùT-l@+ ,""./( PY+$PY, #+++++¸ @ YPY?Æ3+3?+99//_^]92++3993333310533!!32673#"&'327#"&='"#>3¾ª:x°þP3‚Z`:Ua†£©¦¢¢&'‚kT)¬ŽþæŽþ“/0rr™OL"‰.‰”î0/h|*¤):!c@7"#PY PYPYPY?+3?99//_^]92++3+399333310"'!!5&#"#>32!5!32673U3¤þð»ü{38'‚oU5~ý“8þÖJ*‚Z¯'þµ‹‰w 0/h| =‹‰þ•00rr¤þW=K-P@)  './ *PY $PYPY?2/+?3+9/3+?933333102.# 3632#"&'##6532654&#"o±Òµ{dþóióÇ»ÉÍs©.«³HƒSŠ~vU„HK‹€KQþÅ®Ñþøþåþáþïia 6ª;Èü:„¿eÈàÞÂd»CÛŠ¨ =@  ¸@Y? /2/39/]q+99333310!#3!3þ¨wwXxÛCþ½ÍþØ(ý3uþWW: ,Q@+$ ** -.!PY  'PY PY ?+3?+9/99+9393231074>3.546?!5!#"."32654&u~Þƒ )+9±ý«%þõ-=]k]=€çŽã{횣¥˜›ª©8ˆÚy <&)<,‰‹‡Ý$6CUtšeŽÛxwÛå±¥§´¶¥¤²*ÿÇ ë1‡@G&**# 1/+0112311,) !"!QY* +/&$"PY?33/?+?3Æ3399+33?3/9333333993333333910#4&+#327#"'#7&5#53733#33îcZ¨1A… ¨ëC$DY]I0.¡| }„5nÎÎ ´]¡L ¬Åý/®š{Ä323#!"'###267!"!.Al®0ž»Å NMþŠúV´lA}|ýߋއ  {iô§61fd]ëù…þ¼¢þYþ­ÆÁ²Q®«·¢Tÿìx:I@$  PYPY?3?+9/33+33993333331033!33##"&=#26=!TgµîµeeâÌÉágwþwiÑþ/Ñþ/…{·ÆÅ¸{þ“Š‹XXˆ*ÿì¢:#,a@2* ! ''!-.)##PY $PYPY?3+333?+9/33+33933333333103>7!5!!.'5!!3##"=#26=!*][iþøÆNwMwNÇþ÷g\_LþòäáþðJ;¨ý“§iQf‹‹&¦zy§&‹‹eR…ÑþýÔ$þ—¾Ÿ Ÿ¾¯þWHÌ$0R@'+ %12"(PY" .PY ¸ ²Y?+?3+?33??3+93333310!"'532=#"&'##6533>324&#"326H^þç;I2E}?H{£3®´2¥zÍÁ½x‡˜‹ˆ™ˆy"þîþþþØ ”wYc 6©íþYAXhZþìþâãÄÐâÕËÉ„þWpÌ ,Z@!'-.¸ ´Y¸ @Y*PY $PY?3+?3+??+?+933333310%#"!23'33!"'532=#.532654&#"c2¥zÍÁŽ{¤2´Yþç;I2E}VýÚx‡™ŠŠ—ˆy®hZ6ZbyÁúÏþäþØ ”wt*pãÄÔß×ÈÉWþWvÊ!R@ "#QYQY¸ ´Y ¸ ²Y?+?+?3+3?+933333103!"'532=##5354632&#"3£Tþç6E/?}_˜˜‚†K4-#E>Ó·üäþäþØ ”w·ƒz”‚ ‰F\aƒ.þWÌK0>w@'8 ++1") ?@%)PY))5PY!.¸ @Y.. ;PY PY ?3/+?3+9/+?3+9/+?93333333310326=#!"&'73 5##"3234673!#"'4.#"32>Û lþ;±Òµ{d 3²wÇ»ÉÍs©.« \B3 ÍHƒSŠ~vU„H—*àfþ8‹€KQ;®hiia”6ªý¹þuRnM„¿eÈàÞÂd»ëþWaÌZ@   ¸ @Y   ¸ ²Y?+???9?+933333393102=##33 3!"'5;}'þ’„´´ÛÓþIZqþç;I2þõ”wîmþÌüa þ/þ2þäþØ £þW)Ì5@   ¸ ¶Y  ¸ ²Y?+??+933331032=#33!"'£+5d´Wþç-@ÿ ”wÌúÏþäþØ cþWÆN3\@ 3) +$ 45+¸ ´Y+"'¸ @Y"/PY  ?3??333+3?+?+933333310!4&#"#4'33>323>323!"'532=#4&#"1A@O©•"iMXW(oUvfbþç;I2E}a1ABM®š{À¤ý¡S½*0f]`djZ¬ÑýÊþäþØ ”w®š{¨¨ý°þWpN&O@  $'("¸ @Y" PY¸ ²Y?+???+3?+933333102=#4.#"#4'33>323!"'5J}f*\Y‚–´ª>£y²¥Zþç;I2þõ”w®kv4²žýS½*,9Op]±ÌýÊþäþØ ®þWGM%2P@&- &34#)PY#0PY ¸ ²Y?+?333+???3+93333310!"'5326=#"'##4'33>324&#"326G|þë;I2E=@67úV´®0žÈƽz…ky?ˆ™†{"þËÛþØ CQp ¼¢þY§61fd]þôþÝâÂZ¿™ÕÊÅ"þWªNF@  !¸ @YRY ¸ ²Y?+??3+?+9933333102=#4'33>32&#"3!"'5‘}^ª+pf$%$rЏ%‹f ¥ Á´þgþäþØ ¨þW%K4b@0+%$ 44$56+/ !!(PY%%%! PY ¸ ²Y?+?33/+?3/_^]+9933333310!"'532=#"&'732654&/.54632.#"%þç;I2E}l¢ÊÛ!Ÿ€‰Xb›ƒJÓʳÓ¢ƒnzt0^—~I(þØ ”–3…WQTT@P"(MnP”›~‹HMJK.<*%$=Ja>þWÔÌ%V@  %&'¸ @ YPY# #¸ ´Y# ¸ ²Y ?+?+99//++993333991032>5!2&#"!!"'532=!#"'5!6;=ž£¤Ýöópxyn ¼.„ÌÎ]!v(-.)þí  E·ZcšYŃF_¬–¨´;„rRZ$»±þ.¡î— (y Í|g‡ZSY0dQX`VþVøN".Z@)) ##   /0&PY,PY  !PY ¸ ²Y?+?+?3+?3+?99393333310327# 5#'5##"!23467334&#"326-v(-.)þíQ6žÎÀŽ{ 6­DøŠ—‰xy†™Šx— (‚w;k[6We“;ìýjŸÓÌÌßãÄÚVþW×Ú".R@#)/0 ¸ @Y RY ,PY &PY?3+?3+?+?+9933333310%##"!23'5!2&#"327# 32654&#"92¥zÍÁŽ{¤2AF:;yz@*?=þèýÚx‡™ŠŠ—ˆy®hZ6Zby§(¨”úᔚ(ŸãÄÔß×ÈÉþWN$j@5$ %&$PY$$!PY_oPY ¸ ²Y?+?+3/_^]]3?+9/+9333333103267327# 5#"3 '.#"<š”užz@*?=þèh¡ðûûéݺ‡ƒ™÷ºÊ^H-þ™”š(±D ýÁŠ«¯™ÐþWáN/j@ .)"## 01+&¸ @!Y+PY PY ."" PY?+3/3?3/+9/+9?+933333310"&54675.5463 .#"3"327327# 5d¿Õ–|kÑ¥K.¢ pZ]c–£§§oeÉ5Ÿz@*?=þèc«–l“  …c¡þþFJVJWU‰faTf¤,þ›”š(©<ÐþWýN/i@3 #**#& 01&PY /-- PY - PY ¸ ²Y?+?+3/?3/+39/+993333310327# 732654춮&#"'!2#"'€z@*?=þèŸ5Éeo§§¡˜c]Yq ¢.K¤ÒŽj{—ÔÀ†c{”š(k,¤eUaf‰TXJVJF ‚c…  ’m–«<XþWHN&b@$ & '(  PY  #PY¸ @ Y PY ?+3/?+?+9/3+393333333104&#"'>323327# # 53267û{Z|ž,Ë“ÏÝ °z@*?=þåܾþUº vplC»ÉWO-ƒ}þùþúýD”š(;áí?Š«®šýþWðÌC@ R[¸ ´Y ¸ ²Y?+?+??+933333310 5#3332753tþè_´[z@*?þL´þW(:üaþꔚɬ¬­þW N#O@"  "$% ¸ @Y PY  PY?+3/?3/+3?+933331032654&#"'>32#"'327# c`ЇŽir¹Ù§àðïã‹fz@*?=þèNlhÑ×â½jZ—¬þáþïþíþáG®”š(à þWÁÌ!=@ "#¸ ´Y¸ ´Y ¸ ²Y ?+?+?+9933310%327#"&=32>54632&#"¶|/;@*?=‹<927—“k,1BMKέ© B:šŠ“ª'Ngˆ­µ§i€…þW:$Q@$   $ %& $ PY  ¸ ´Y¸ ²Y?+?+?+3?39933333310326533327# 5#.'##"&5:*\Y‚–´YzA$?8þèM>£y²¥:ýRkv4²žsüaþꔚ(,9Op]±ÌуþWJ:%j@*$  $&'PY  QY""¸ @ Y"  PY?+3?+99//+33/+393333310%32654&+5!5!#"'327# 5—‹…¦£¸RvýUsþ€¤y׊ÏvD>@*?=þè̃uŽgŽ€U–þ´þŽg²el2IKš(A-Û ó!J@ "#½0.I²Y »/I²Y¸1?3+?3+??99333310>32!"&'##4'34&#"326¬"oTŒƒþñTo"{uvP]h^^fZUjJ?ÂÆþp@EU!]„1JþüŽ—œ—Ž‹:Ü“ôN@  ¸I³Y¸1@  »IY /?+3/_^]?3/+993333103267#"&54632&#"ººBV |—w˜¥¡›r“~‰bVlþÕILm…ÉľÍxl Šˆ8ª”ô'@"&()&$¸I@Y  ¸I@ Y  ¸1´»IY/?+3/?3/_^]+9/_^]+993333310"''7&54632&#"632'2>54#"lM#TJC¡šr“~‹aW‡¶?y[8M)Tpc/Ý874Auf£½Îxl Šƒ¡_E‹¢=^9^0Kƒ3ݳ'j@""  ()   ¸I·Y  ¾2%IY/?+?99//3+3/993399399310"&54632&'57&'374&#"326aª¨£^@JVÌ”?f4?Ðp{©(]mn_bbodݵ¬«µ*˜P]PB5;0]OAiþ欷¿a…}†}}QÛ{ò%‰@! !#&'#¸I@"YO_o/?@ H¾IY1 I@ Y@P¸/?3/]+?+3/_^]9/+]q+99333310#"&'732654&+532654&#"'>32{‘‚| y ’KMMNA=?MCEuz Šoxˆ–RX´duwz žE?=DdA76E jyra}0b®êþ@@   »IY 2³¸I²Yº0.??3+3?+9333310##5354632'"3{ggX\96/*‰ýaŸ\Uh\a1AD\®Ñå@@  ¸I·Y  ¸I²Y ¸0?Ä+9/3+3933331033##"'526=#5={ggX\96/*ÿæþ\þòh\a1Aý\ÿÿ-¾Ÿñl@êŒ7@  ¸IµY».2?3?9/3+9933310#"&5332653#47)oTwr{GQXf{{ˆMD}üþtO}hÂûêpØêõ F@    »H[ 2³ ¸I´Yº0.??9/3+3?+933310#5333#53+SSyQQyyêjX9þÇXþ–yy*ê£åµº0.??93103*yêûý*ê£åµº0.??93103*yêûýØêõå 3@   ¸I´Yº0.??9/3+3933310#5333#+SSyQQêjX9þÇXþ–S¿yb@    !»H[2³ ¸I@ Y @ H¾0IY5?+?9/+3+3?+99333310%"&546;33#'26=#"53}4,7¦z¿aYYZ¹ýGbj‡dMJ))'.dyyà¿í (·  ¾2HY5?+?93310327#"53['%$","¿{™9/ r Ðqá¿ë=@   A HY 52 HY.?+??+933331032=#33#"'á "VDz<¿(#6hTüWÈÐê=å&¶¾0IY.?+?99310!3!=þSx5êûýn¾Nó-X@-$$(./&+»HY&4µ  A IY10.?3??+333?+933333104&#"#4&#"#'33>323632#"'5325Õ8NN\y8NN\ys&eLSaCœpd¿*2%,QÍlXwvþFãlX{rþFX£`#NCFK‘Žý©Ñ s i¾Lå#J@" "$%#¸0³¸I´Y º/ 4??333+3?339333331032653##"&'##"&533265£9MN\yx&eKSa iWpdy9MN\åþmVzsºûÙ§L=EKBN~ŽýþmVwvºð¾ÝóF@   !A HY4. I²Y º10??3+??+993333104'33>32#4&#"#"'5325‘t,mSzo{BVWg¿(5"/PB`#PAŽþãpT{rýëÑ r ió¾ÚóI@   AIY10.HY4?+???+399333310327#"54&#"#'33>32BP+**¿BUXgzs,mR{n™i t Ñ>pT{rþFX£`#PAŽAêŒä9@  ¿0..0???3?3993333310 '3#&'#·=trþÇ säþ.XÔýì@sþ,úܯô N@ ¸I¶YA IY1 IY/?+?+9/+99333310!"&5!2267!"!.¯þ´š«J¬›þ³f^þs_dc`[iþsÃÊ‹Æþ {}\{}w¿¯\@  ¸2³¸I²Y ¸1³¸I²Yº/5??3+3?3+3?9333333310%.5%34&'>%+Œ p„þì”HLKIþoID¿!Á·d$þð÷þ–þß©Œ ý®Šþü$NŽ7À–ò1i@''  0!0!23.)»HY.5@  &$$¸I³Y$»/I³Y¸1?3/+?3/+39?+999933323103254.'.54632&#"#"'327#"5£bW³!=xg\2‰zn™SO6APyW4›sOS $+"½´=9v$- 6O8hmXci36(2!6T>lu*perÐu¿W4@   A HY 2HY5?+?+933310%"'532>54632&#"Ð1*0 $)efI#+62¿ q:L7y€ vKYüÌúµ¿U@  ¸I³YA 0 IY /HY5?+?+?Æ3+3933333310#"'5326=#"5#53733#327¬,0%$#* “UY$Rˆˆ",(†Ç q (9O­ý\««\þ8, øÝÕå![@ "#¸I·Y »0I²Y º/ .??3+?39/33+3399333333310!33##'##"&=#5326=!»WzIIt,nQ{oHHXgþ©Båþ¹Gþ¹^³¢‚Q?~ŽW^GýZs>nUݸå1G@*!/ &//23' ¸I²Y$ ¾0IY/?+?3+3993333910"&54>54&+53232654.546;#"f˜º$*$8TWC5bF?/FAE.q…„r.EAF/?Fb5CW>•´@ÝŒå-@    ¾0IY/?+?3993310"&533253f’”{««{”ÝŽŸÛþÃÃãþ%ŸŽ@ÝŒå-@ ¾0 IY/?+?3993310#"&53324&'3Œ¡““…{LW°)%€!+}ÇÙ“¢Óþ)gh;]ÂLHÈê¾å -@    ».0?2?393333103#'#"‘ ‚¢0·‚åýñ§4Cýß4ê™å @@ »IY0³»IY.?+3?+3993333105!5!!4ÂþY1þ>Ûê`9b`ýÇbô¾ÙåW@  »IY0³  A IY .HY4?+?+3?+39933333310327#"=!5!5!!Y&!1$£þÂþY1þ>Û™90q Ñ[`9baýÈ m¿ås@  !¸I²Y¸I@ Y ¸0´¸I³Y ¸.?3Ä+33?9/_^]++39933333933310>32+'7#5!5!%"32654& FBRZ^h¬^%ÏÁþZ0þ>{BQu40&LyoXHTV:C+Ra8b`ýÇ &¾¯å^@  ¸I¶Y ¸I³Y ¸4³»IY0?+3?3/+9/+39333310!#"&'732654&+5!>Yþû‡–ºœˆ¤y¨er{p8 þ"å~þ®›Â‰ ²‹une+⢠m@¸I@!Yo¯¿O_oŸ A IY3 IY/?+?+9/_^]q+99333310#"!2267!"!.¢¤›“¥=¤–þÀaYþXbaXsUõþóþúþùýAÁÊÁÊkºÉɺþ°ÂP) A@   [@ [ ”?+3/Í2/+33339933105375353,Ò¾_6£ý`¥ÂB%þº!¯¸¸®¸¸þ„Â}) A@   [@ [ ”?+3/Í2/+333399331053%5353Œ_¾Ò£ý¥Â!F%þ¾¯¸¸®¸¸ÿ…þNfÿª,4@) $$ -),/3Ì29333933310"54>54.54>54#"'632Z³!)!!)!$*$1+/ <   þ©ã]Õ-@ Y @ H  ŽY¡?+Ä+2/+33310#"#"&5332>;]"8``g@m†B94Z]iC#Z%-%…m9G(0(þÆÔ,Ô/@/ Y/+Ä_^]339310!5!7,þñþ©:ìh”€€þÔÔ:Ô'@Y//Í]+339310!%7!:þ©þñ@ì:Ô”l€þÆÔ,Ô'@Y//Í]+339310'!5!ììþÆWÔ€€”þÔÔ:Ô'@Y//Ä]+339310!'%!:þÆì@WT€l”þbÔ¡Õ4@//33Ä]2333993310'%77¡=àöþÔ=ìëAmzz”m€€þbÔ¡Õ0@//22Í]2233993310''%7vëì=,öà=Ô€€m”zzmÿoþWlÿÊ@   /ÔÌ333233104'33>3&#"ŽT71$=5þW>J0!ZG7œÿt}!"@/3Î2933323310%5ªªþç!r``r©RþèþV­ÿú N@$      /3Î299//92333333333339331057'5#373þ窪R©r``r¯R©r``rþ¥ªªÿÿþWÌE&$æf ·%+55ÿÿ€þ0ˆN&DæDÿÙ±¸ÿÀ´60%+55ÿÿ¢€f&%šš´"&¸ÿÖ´ "%+5+5ÿÿ³ÿìBÌ&EšLÿÿ¢þ¿€E&%ñ¹ÿì´ "%+5ÿÿ³þ¿BÌ&Eñò¹ÿá´#% %+5ÿÿ¢þ¼€E&%ò€¹ÿï´!"%+5ÿÿ³þ¼BÌ&Eò7¹ÿ¼´$% %+5ÿÿqþDv›&&' CËzb@&! %v %+5+5+5ÿÿ‚þD8´&F'v¡zQ@&!%!%o%+5+5+5ÿÿ¢ef&'šÿØš´&¸ÿ¼´%+5+5ÿÿŠÿæÌ&Gš¼²$?5ÿÿ¢þ¿eE&'ñé¹ÿÏ´%+5ÿÿŠþ¿Ì&Gñî ¶$&%+5ÿÿ¢þ¼eE&'òX¹ÿÔ´%+5ÿÿŠþ¼Ì&GòT ¶%&%+5ÿÿ¢þ9eE&'çV¹ÿд%+5ÿÿŠþ9Ì&GçX ¶',%+5ÿÿ¢þWeE&'î`¹ÿØ´%+5ÿÿŠþWÌ&Gî\ ¶*$%+5ÿÿ¢b+&(üz¶&¸ÿù´ %+55+55ÿÿ…ÿìFÇ&H'CÿÊ@ "&"! %+55+55ÿÿ¢b+&(ý„@ & %+55+55ÿÿ…ÿìFÇ&H'v=Š@ "&"! %+55+55ÿÿ¢þWbE&(î– ¶  %+5ÿÿ…þWFN&Hît ¶ " %+5ÿÿ¢þWbE&(ñ” ¶! %+5ÿÿ…þWFN&Hñl ¶$0 %+5ÿÿ¢þDb©&('zu™õ´ &¸ÿä´#+ %+5+5ÿÿ…þDF´&H'zG™@ /&2: %+5+5ÿÿÂ=f&)š1š@  &  %+5+5ŠKfS@" PY ‘[ @ ¸ ´Y ??+Î+9/3+3933339310#!5!54632.#"!53D´þúÁáH§*·/hj1ëþUÈ%üÛ%Žͬ ‘ .h] ŽÀÀÿÿqÿìO^&*Š& @ &* %+5+5ÿÿþXR&J Jç´1&¸ÿ÷´23%+5+5ÿÿ¢*f&+šš@ &  %+5+5¹fB@# ‘[ PY??+?39/3?+93333103363 #4&#"#53¹µ iê^µis|Ÿ´IÈEÿ;ŠÍþƒý/·ˆ„µ›ý¦ÀÀÿÿ¢þ¿*E&+ñý ¶  %+5ÿÿ¹þ¿Ì&Kñý¹ÿý´ %+5ÿÿ¢*†&+ F#@ & %+55+55¹†H@& Y PY??3+?3?3+3933333103363 #4&#"#53!53¹µ iê^µis|Ÿ´!£ýÓ¥Eÿ;ŠÍþƒý/·ˆ„µ›ýθ¸¸¸ÿÿ‰þD*E&+zÿÿ•þDÌ&Kzÿÿ¢þr*E&+ïf ¶ %+5ÿÿ¹þrÌ&Kïf¹ÿý´  %+5ÿÿÊþWE&,ñf ¶! %+5ÿÿþWeÌ&Lñz ¶#%+5ÿÿÊ+&,õf@& %+555+555ÿÿe¸&ó&jÚvJ3@! &€p`P@  %+]]]]]]555+555ÿÿ¢Ë›&. CÙ@ &>  %+5+5ìeà X@.    @ H  ?3??9933?Í+9333333339310!#33 573’þ’„´´ÛÓþIÎý¦ÙÏþÊóbþoEüè þ/ý—ÍâÙÿÿ¢þ¿ËE&.ñ,¹ÿß´  %+5ÿÿìþ¿eÌ&Nñ¹ÿÙ´  %+5ÿÿ¢þ¼ËE&.ò•¹ÿÞ´ %+5ÿÿìþ¼eÌ&Nò}¹ÿÔ´ %+5ÿÿíþ¿LE&/ñ)¹ÿö´ %+5ÿÿ†þ¿\Ì&Oñ ¶ %+5ÿÿíþ¿L^&/'ñ)Š& ³ &+5†þÉ\^ O@* YPY R[ @PY?+3Î+?+?+93333310%!!5!!5!53!5!à|ü*¦þßÕ¶´¢ýÙ'ŽŽŽ)Žù„¬¬ÿÿíþ¼LE&/ò›¹ÿþ´ %+5ÿÿ†þ¼\Ì&Oò† ¶ %+5ÿÿíþWLE&/î¤ ¶ %+5ÿÿ†þW\Ì&Oî‹ ¶ %+5ÿÿK›&0 CÌ@ &‚%+5+5ÿÿcd´&Pv˜@ -&š), %+5+5ÿÿKf&0šš@ &%+5+5ÿÿcdÌ&Pš@ +&)+ %+5+5ÿÿþ¿KE&0ñý ¶%+5ÿÿcþ¿dN&Pñý ¶)+ %+5ÿÿ¢*f&1šš@ & %+5+5ÿÿÆ,Ì&Qšÿÿ¢þ¿*E&1ñý ¶ %+5ÿÿÆþ¿,N&Qñÿÿ¢þ¼*E&1òf ¶ %+5ÿÿÆþ¼,N&Qòzÿÿ¢þW*E&1îk ¶ %+5ÿÿÆþW,N&Qîÿÿfÿìf+&2þf@ &*%+55+55ÿÿ‚ÿìI¥&R& CÏ O@;2€H2@H2@H2@H2€H2@ H2€ H2@ H2€ H2&"/%+55+5+++++++++5ÿÿfÿìfS&2ÿf@&&&2%+555+555ÿÿ‚ÿìI&R& F# 5@$6@ H6€ H6@ H6€ H6&"/%+555+5++++55ÿÿfÿìf+&2üf@ &%+55+55ÿÿ‚ÿìIk&R& J BäÿÏ;@+@H@H€H@H@H@ H&%+5+5++++++5ÿÿfÿìf+&2ýf@ &%+55+55ÿÿ‚ÿìIj&R& J CwÿÏ;@+@H@H€H@H@H@ H&%+5+5++++++5ÿÿ¢_›&3 Cˆ@ &#%+5+5ÿÿ³þWB´&Sv_@ )&J%( %+5+5ÿÿ¢_f&3šš´&¸ÿç´%+5+5ÿÿ³þWBÌ&Sš@ '&%' %+5+5ÿÿ¢™f&5šš´&¸ÿÊ´ %+5+5ÿÿòÌ&Uš"@ & %+5+5ÿÿ¢þ¿™E&5ñý¹ÿÉ´ %+5ÿÿòþ¿N&Uñ¹ÿ´ %+5ÿÿ¢þ¿™^&5'ñýŠ& ³&+5ÿÿòþ¿R&U'ñ J#³&+5ÿÿ¢þ¼™E&5òf¹ÿÈ´ %+5ÿÿtþ¼N&Uò‡¹ÿ´ %+5ÿÿOÿìhf&6šš@ 0&.0%+5+5ÿÿ§ÿì$Ì&Vš@ *&(*%+5+5ÿÿOþ¿hZ&6ñþ ¶ .0%+5ÿÿ§þ¿$K&Vñ ¶ (*%+5ÿÿOÿìhº&6 [@ 6&X/5%+55+55ÿÿ§ÿì$È&V Qÿ@ 0&D)/%+55+55ÿÿOÿìhö&6 w@ 2&4:%+55+55ÿÿ§ÿì$&V gÿ @ ,&.4%+55+55ÿÿOþ¿hf&6'ñšš³1&+5ÿÿ§þ¿$Ì&V'ñýš³+&+5ÿÿL€f&7šš@  & %+5+5ÿÿ¾ÿðùf&Wš]š@ &h%+5+5ÿÿLþ¿€E&7ñý ¶ %+5ÿÿ¾þ¿ùT&Wñ°¹ÿ¾´%+5ÿÿLþ¼€E&7òf ¶ %+5ÿÿ¾þ¼ùT&Wò ¶4%+5ÿÿLþW€E&7îk ¶ %+5ÿÿ¾þWùT&Wîw ¶%+5ÿÿŽþÃ=E&8åfl ·%+55ÿÿ¹þÃ:&Xåfl±¸ÿú´ %+55ÿÿŽþW=E&8ñf ¶'%+5ÿÿ¹þW:&Xñf¹ÿû´#/ %+5ÿÿŽþW=E&8îk ¶%+5ÿÿ¹þW:&Xîk¹ÿú´! %+5ÿÿŽÿì=+&8þf@ &&%+55+55ÿÿ¹ÿì›&X& C¶R@59€H9@H9@H9@H9€H9@ H9€ H9@ H9€ H9&¸ÿû´$1 %+55+5+++++++++5ÿÿŽÿì=+&8 f@&%+555+555ÿÿ¹ÿìa&X& Jjæ&@"@H"&¸ÿû´ %+555+5+55ÿÿ Ÿ&9 G@ &! %+5+5ÿÿE‡©&Y@ &" %+5+5ÿÿ þ¿ÂE&9ñý ¶  %+5ÿÿEþ¿‡:&Yñý ¶  %+5ÿÿÌ©&:CÿÅõ´&¸ÿÅ´ %+5+5ÿÿ¸´&ZCˆ´&¸ÿˆ´%+5+5ÿÿÌ©&:vgõ@ &g %+5+5ÿÿ¸´&Zv^@ &]%+5+5ÿÿÌ^&:jã@ & %+55+55ÿÿ¸{&Zj@ &%+55+55ÿÿÌf&:šš@ & %+5+5ÿÿ¸Ì&Zš@ &%+5+5ÿÿþ¿ÌE&:ñý ¶ %+5ÿÿþ¿¸:&Zñý ¶%+5ÿÿ$©f&;šš@ & %+5+5ÿÿ^mÌ&[š@ &  %+5+5ÿÿ$©†&; F#@ &%+55+55ÿÿ^m{&[j@ & %+55+55ÿÿ$¨f&<šš@  & %+5+5ÿÿBþW‰Ì&\š@ & %+5+5ÿÿIƒ¨&= DA@ &&  %+5+5ÿÿ“,´&]‡@ &  %+5+5ÿÿIþ¿ƒE&=ñ ¶  %+5ÿÿ“þ¿,:&]ñ ¶  %+5ÿÿIþ¼ƒE&=òr ¶  %+5ÿÿ“þ¼,:&]òf ¶  %+5ÿÿ¹þ¼Ì&Kòp ¶ %+5ÿÿ¾ÿðù`&Wj å#@@((H@H&%+55+++55ÿÿ¸ &Z›@ & %+55+55ÿÿBþW‰ &\›@ & %+55+55ÿÿ€ÿìˆó&DÒ´=&¸ÿÑ´=:%+5+5Kf0@‘[ ¸ ´Y??+?+93310!#4632.#"53D´ÁáH§*·/hj15ÈÌͬ ‘ .h]éÀÀ–ÿì}V$K@("! !%&""`Y""_Y _Y?+??+9/+39333310#"'732654&+7.#"#3 }jÁ}‡yZv|–›)î%…D`w8¿Øô ¦þþ¡¶€¿e ž'Ž„y™6B^²§üý=þÿþÇÐÿÿþ¿ÌE&$ñý ¶%+5ÿÿ€þ¿ˆN&Dñì¹ÿÑ´13%+5ÿÿÌ+&$Ê@ & %+5+5ÿÿ€ÿìˆö&DÊ`þË´?&¸ÿÌ´6:%+5+5ÿÿÌ&$ 2Í@ &g%+55+55ÿÿ€ÿìˆ&&D :¿@ ;&;=2%+55+55ÿÿÌ&$ 3ý¶&¸ÿ˜´%+55+55ÿÿ@ÿìˆ &D ;íÿú¶=&¸ÿi´49%+55+55ÿÿÌ&$ 4¡@ $&;&%+55+55ÿÿ€ÿìˆh&D <§ÿó@ G&#I9%+55+55ÿÿÌ&$ 5f@ '&"%+55+55ÿÿ€ÿìˆå&D =Oÿö¶7&¸ÿÌ´B3%+55+55ÿÿþ¿Ì¨&$'ñý‡ô@ &%+55+5ÿÿ€þ¿ˆ´&D&‡ôñ×&´5&¸ÿÑ@ ;=% 6¸ÿд60%+]5+5+5ÿÿÌ&$ 6f@ &%+55+55ÿÿ€ÿìˆð&D >N¶0&¸ÿÊ´39%+55+55ÿÿÌ&$ 7j@ &%+55+55ÿÿ€ÿìˆð&D ?J¶0&¸ÿÆ´39%+55+55ÿÿÌ&$ 8f@ &%+55+55ÿÿ€ÿìˆ+&D @\¶0&¸ÿØ´39%+55+55ÿÿÌ&$ 9f@ &"/%+55+55ÿÿ€ÿìˆï&D AY¶0&¸ÿÕ´39%+55+55ÿÿþ¿Ì©&$'™õñý@ &%+55+5ÿÿ€þ¿ˆ´&D&™íñá@ 0&3;%+55+5ÿÿ¢þ¿bE&(ñ& ¶  %+5ÿÿ…þ¿FN&Hñ ¶ %+5ÿÿ¢b+&(Ê“@ & %+5+5ÿÿ…ÿìFö&HÊyþË@ *&!% %+5+5ÿÿ¢bž&(õ´&¸ÿå´# %+5+5ÿÿ…ÿìF©&H@ $&%2 %+5+5ÿÿ¢Ž&( 2á@ &_ %+55+55ÿÿ…ÿì…&&H :Ø@ &&r( %+55+55ÿÿjb&( 3¶&¸ÿ”´ %+55+55ÿÿUÿìF&&H ;¶(&¸ÿ´$ %+55+55ÿÿ¢b&( 4³@ "&1$ %+55+55ÿÿ…ÿìOu&H <º@ 2&U4$ %+55+55ÿÿ¢b&( 5v¶%&¸ÿõ´  %+55+55ÿÿ…ÿìFï&H =m@ "&- %+55+55ÿÿ¢þ¿b¨&('‡ôñµ &¸ÿä´ %+55+5ÿÿ…þ¿F´&H&‡ñ@ &! %+55+5ÿÿÊ+&,Êv@ & %+5+5ÿÿe &óÊvþà´&¸ÿì´%+5+5ÿÿÊþ¿E&,ñý ¶  %+5ÿÿþ¿eÌ&Lñ ¶%+5ÿÿfþ¿fZ&2ñý ¶%+5ÿÿ‚þ¿IN&Rñý ¶%+5ÿÿfÿìf+&2Êv@ %& %+5+5ÿÿ‚ÿìI &RÊvþà@ '&"%+5+5ÿÿfÿìm&2 2À@ !&Z#%+55+55ÿÿ‚ÿìz&&R :Í@ #&g%%+55+55ÿÿIÿìf&2 3ô¶!&¸ÿ´%+55+55ÿÿXÿìI&&R ;¶%&¸ÿ ´!%+55+55ÿÿfÿìf&2 4®@ ,&H.%+55+55ÿÿ‚ÿìJu&R <µ@ /&P1!%+55+55ÿÿfÿìf&2 5f@ /&*%+55+55ÿÿ‚ÿìIï&R =j@ &*%+55+55ÿÿfþ¿f¨&2'‡ôñý@ &%+55+5ÿÿ‚þ¿I´&R&‡ñý@ &%+55+5ÿÿfÿìæ¨&bvbô@ $&" #%+5+5ÿÿ‚ÿì´&cve@ '&#&%+5+5ÿÿfÿìæ¨&bCÿªô´&¸ÿj´!$%+5+5ÿÿ‚ÿì´&cCº´"&¸ÿ»´$'%+5+5ÿÿfÿìæ+&bÊ„´.&¸ÿδ%)%+5+5ÿÿ‚ÿì &cÊzþà´1&¸ÿ§´(,%+5+5ÿÿfÿìæ&bô´(&¸ÿÀ´)6%+5+5ÿÿ‚ÿì©&c´+&¸ÿ£´,9%+5+5ÿÿfþ¿æ&bñ¹ÿÉ´ "%+5ÿÿ‚þ¿N&cñý¹ÿ¤´#%%+5ÿÿŽþ¿=E&8ñý ¶%+5ÿÿ¹þ¿:&Xñý¹ÿú´ %+5ÿÿŽÿì=+&8Êv@ !&%+5+5ÿÿ¹ÿì &XÊoþà´)&¸ÿó´ $ %+5+5ÿÿŽÿì$¨&qvVô´"&¸ÿã´!%+5+5ÿÿ¹ÿìô´&rvU³*&+5ÿÿŽÿì$¨&qCÿŸô´&¸ÿ,´"%+5+5ÿÿ¹ÿìô´&rC³%&+5ÿÿŽÿì$+&qÊY´,&¸ÿp´#'%+5+5ÿÿ¹ÿìô &rÊgþà³4&+5ÿÿŽÿì$ž&qÿÚõ´'&¸ÿg´'4%+5+5ÿÿ¹ÿìô©&rý³/&+5ÿÿŽþ¿$&qñÞ¹ÿn´ %+5ÿÿ¹þ¿ô:&rñêÿÿ$¨©&<Cÿºõ´ &¸ÿº´ %+5+5ÿÿBþW‰´&\CÅ´&¸ÿÆ´ %+5+5ÿÿ$þ¿¨E&<ñ ¶ %+5ÿÿBþW‰:&\ñ)ÿÿ$¨+&<Êq´&¸ÿû´%+5+5ÿÿBþW‰ &\Êsþà´$&¸ÿý´ %+5+5ÿÿ$¨ž&<õ@ & %+5+5ÿÿBþW‰©&\@ &, %+5+5ÿÿÿì0&b‘ýd´+&¸ÿÍ´+'%+5+5ÿÿÿì0&bËód´,&¸ÿ¼´0+%+5+5ÿÿÿì0&b ùd¶1&¸ÿ½´1'%+55+55ÿÿÿì0&b­ìd¶2&¸ÿ°´6'%+55+55ÿÿÿì0&b¡1d¶1&¸ÿú´1(%+55+55ÿÿÿì0&b®&d¶2&¸ÿï´6(%+55+55ÿÿÿìJ&b¢d¶D&¸ÿδ/<%+55+55ÿÿÿìJ&b¯öd¶E&¸ÿô/<%+55+55ÿÿÌÌ&$‘‰ÿÿÌÌ&$Ë“ÿÿþÿÌÌ&$ þÕÿÿþÿÌÌ&$­þÕÿÿþÿÌÌ&$¡þÕÿÿþÿÌÌ&$®þÕÿÿÿÌæ&$¢ÿ%ÿÿÿÌæ&$¯ÿ%ÿÿ¯ÿìA0&f‘(d@ -&-) %+5+5ÿÿ¯ÿìA0&fË d´.&¸ÿç´2- %+5+5ÿÿ¯ÿìA0&f &d¶3&¸ÿú´3) %+55+55ÿÿ¯ÿìA0&f­d¶4&¸ÿå´8) %+55+55ÿÿ¯ÿìA0&f¡Cd@ 3&3* %+55+55ÿÿ¯ÿìA0&f®Rd@ 4&+8* %+55+55ÿÿÿGbÌ&(‘þTÿÿ*Ì'(ÈËÿÿÿýÀbÌ&( ý–ÿÿýÀbÌ&(­ý–ÿÿýÀbÌ&(¡ý–ÿÿýÀbÌ&(®ý–ÿÿ³þW0&h‘"d@ & %+5+5ÿÿ³þW0&hË)d@ &# %+5+5ÿÿ³þW0&h d@ $&$ %+55+55ÿÿ³þW0&h­d@ %&) %+55+55ÿÿ³þW0&h¡d@ $&$ %+55+55ÿÿ³þW0&h®d@ %&) %+55+55ÿÿ³þWJ&h¢d@ 7&"/ %+55+55ÿÿ³þWJ&h¯'d@ 8&"/ %+55+55ÿÿÿG*Ì&+‘þTÿÿÿ@*Ì&+ËþTÿÿýÀ*Ì&+ ý–ÿÿýÓ*Ì&+­ý©ÿÿýÀ*Ì&+¡ý–ÿÿýÀ*Ì&+®ý–ÿÿý£*æ&+¢ý´ÿÿý£*æ&+¯ý´ÿÿ•ÿì]0&j‘Üd´&¸ÿ¼´%+5+5ÿÿ•ÿì]0&jËØd´&¸ÿ±´%+5+5ÿÿ•ÿì]0&j æd¶&¸ÿ¹´%+55+55ÿÿ•ÿì]0&j­âd¶&¸ÿµ´ %+55+55ÿÿ•ÿì]0&j¡ãd¶&¸ÿ»´%+55+55ÿÿ•ÿì]0&j®ßd¶&¸ÿ·´ %+55+55ÿÿ•ÿì]J&j¢Ùd¶.&¸ÿ¶´&%+55+55ÿÿ•ÿì]J&j¯Ùd¶/&¸ÿ¶´&%+55+55ÿÿÿGÌ&,‘þTÿÿÿ@Ì&,ËþTÿÿýÀÌ&, ý–ÿÿýÀÌ&,­ý–ÿÿýÀÌ&,¡ý–ÿÿýÀÌ&,®ý–ÿÿý£æ&,¢ý´ÿÿý£æ&,¯ý´ÿÿ‚ÿìI0&R‘d@ &%+5+5ÿÿ‚ÿìI0&RËd@ &"%+5+5ÿÿ‚ÿìI0&R d@ #&#%+55+55ÿÿ‚ÿìI0&R­d@ $&(%+55+55ÿÿ‚ÿìI0&R¡d@ #&#%+55+55ÿÿ‚ÿìI0&R®d@ $&(%+55+55ÿÿÿ«ÿìfÌ&2‘þ¸ÿÿÿ¤ÿìfÌ&2Ëþ¸ÿÿþ$ÿìfÌ&2 ýúÿÿþ$ÿìfÌ&2­ýúÿÿþˆÿìfÌ&2¡þ^ÿÿþˆÿìfÌ&2®þ^ÿÿ£ÿìD0&v‘þd´&¸ÿã´%+5+5ÿÿ£ÿìD0&vËîd´&¸ÿÌ´%+5+5ÿÿ£ÿìD0&v ýd¶ &¸ÿÖ´ %+55+55ÿÿ£ÿìD0&v­ùd¶!&¸ÿÒ´%%+55+55ÿÿ£ÿìD0&v¡,d@  & %+55+55ÿÿ£ÿìD0&v®,d@ !& %%+55+55ÿÿ£ÿìDJ&v¢d¶3&¸ÿó´+%+55+55ÿÿ£ÿìDJ&v¯d¶4&¸ÿó´+%+55+55ÿÿþܨÌ&<ËýðÿÿýÀ¨Ì&<­ý–ÿÿý\¨Ì&<®ý2ÿÿý˜¨æ&<¯ý©ÿÿ5ÿì™0&z‘d@ /&/+ %+5+5ÿÿ5ÿì™0&zËd@ 0&4/ %+5+5ÿÿ5ÿì™0&z d¶5&¸ÿÿ´5+ %+55+55ÿÿ5ÿì™0&z­d¶6&¸ÿÿ´:+ %+55+55ÿÿ5ÿì™0&z¡)d@ 5&5, %+55+55ÿÿ5ÿì™0&z®)d@ 6&:, %+55+55ÿÿ5ÿì™J&z¢d@ H&3@ %+55+55ÿÿ5ÿì™J&z¯d@ I&3@ %+55+55ÿÿÿ«“Ì&Z‘þ¸ÿÿÿ¤“Ì&ZËþ¸ÿÿþ$“Ì&Z ýúÿÿþ"’Ì&Zÿ­ýøÿÿþˆ“Ì&Z¡þ^ÿÿþˆ“Ì&Z®þ^ÿÿþY“æ&Z¢þjÿÿþY“æ&Z¯þjÿÿÿì&b¿¬´+&¸ÿy´(+%+5+5ÿÿÿìö&b8!´+&¸ÿþ´'*%+5+5ÿÿ¯ÿìA&f¿Ö´-&¸ÿ³´*- %+5+5ÿÿ¯ÿìAö&f8b@ -&O), %+5+5ÿÿ³þW&h¿Ý´&¸ÿÌ´ %+5+5ÿÿ³þWö&h8W@ &V %+5+5ÿÿ•ÿì]&j¿Ÿ´&¸ÿ{´%+5+5ÿÿ•ÿì]ö&j8@ &%+5+5ÿÿ‚ÿìI&R¿Ò´&¸ÿ´%+5+5ÿÿ‚ÿìIö&R8!@ & %+5+5ÿÿ£ÿìD&v¿Â´&¸ÿ¤´%+5+5ÿÿ£ÿìDö&v8@ & %+5+5ÿÿ5ÿì™&z¿º´/&¸ÿ¨´,/ %+5+5ÿÿ5ÿì™ö&z8;@ /&9+. %+5+5ÿÿþW0&b'‘údD´+&¸ÿÍ´+'%+5+5ÿÿþW0&b'ËôdD´,&¸ÿ¼´0+%+5+5ÿÿþW)&b' ó]D¶1&¸ÿ½´1'%+55+55ÿÿþW0&b'­ôdD¶2&¸ÿ°´6'%+55+55ÿÿþW0&b'¡dD¶1&¸ÿú´1(%+55+55ÿÿþW0&b'®dD¶2&¸ÿï´6(%+55+55ÿÿþWJ&b'¢÷dD¶D&¸ÿδ/<%+55+55ÿÿþWJ&b'¯ðdD¶E&¸ÿô/<%+55+55ÿÿþWÌÌ&$&‘hÿÿþWÌÌ&$&ËhÿÿþÿþWÌÌ&$' þÕhÿÿþÿþWÌÌ&$'­þÕhÿÿþÿþWÌÌ&$'¡þÕhÿÿþÿþWÌÌ&$'®þÕhÿÿÿþWÌæ&$'¢ÿ%hÿÿÿþWÌæ&$'¯ÿ%hÿÿ³þW0&h'‘ d³&+5ÿÿ³þW0&h'Ëd³&+5ÿÿ³þW0&h' d ´$&+55ÿÿ³þW0&h'­ÿd ´$&+55ÿÿ³þW0&h'¡ d ´$&+55ÿÿ³þW0&h'®!d ´$&+55ÿÿ³þWD&h'¢^ ´6&+55ÿÿ³þWJ&h'¯ d ´7&+55ÿÿÿGþW*Ì&+'‘þTeÿÿÿ@þW*Ì&+'ËþTeÿÿýÀþW*Ì&+' ý–eÿÿýÀþW*Ì&+'­ý–eÿÿýÀþW*Ì&+'¡ý–eÿÿýÀþW*Ì&+'®ý–eÿÿý…þW*æ&+'¢ý–eÿÿý…þW*æ&+'¯ý–eÿÿ5þW™0&z'‘dn³/&+5ÿÿ5þW™0&z'Ëdn³/&+5ÿÿ5þW™0&z' dn ´5&+55ÿÿ5þW™0&z'­dn ´6&+55ÿÿ5þW™0&z'¡3dn ´5&+55ÿÿ5þW™0&z'®3dn ´6&+55ÿÿ5þW™J&z'¢dn ´H&+55ÿÿ5þW™J&z'¯dn ´I&+55ÿÿÿ«þW“Ì&Z'‘þ¸vÿÿÿ¤þW“Ì&Z'Ëþ¸vÿÿþ$þW“Ì&Z' ýúvÿÿþ$þW“Ì&Z'­ýúvÿÿþˆþW“Ì&Z'¡þ^vÿÿþˆþW“Ì&Z'®þ^vÿÿþYþW“æ&Z'¢þjvÿÿþYþW“æ&Z'¯þjvÿÿÿì´&b™´&&¸ÿÞ´)1%+5+5ÿÿÿìR&b J´'&¸ÿÞ´()%+5+5ÿÿþW&b'¿¢D³&&+5ÿÿþWN&bD¹ÿæ´1,%+5ÿÿþWö&b&8"D³+&+5ÿÿÿì©&b´0&¸ÿÞ´0=%+5+5ÿÿþW©&b&D³0&+5ÿÿÌ©&$™õ@ &%+5+5ÿÿÌ^&$Š @ &%+5+5ÿÿÌ&$¿ÿiÿÿÌö&$8þvÿÿþWÌE&$n ¶2%+5ó…¾Ì @  ?Í9/93310#>5#5¾--.WÌMWn53L#¥þWôÿ @  QY /Í+93310327#"=3˜!,&Ž„ü!p ˜’ó…¾Ì @  ?Í9/93310#>5#5¾--.WÌMWn53L#¥ÿé±¶½#@  € “?22Í22333310".#"#>323273ì*TNG76 [ 0Q?,TNEd\d±%-%>9fi=%-%w”xÛÀD@   @[”?3+3Ì229/3333339933105353".#"#>323273¿£ýæ¥÷&LFA30S ]N(LF@[S *Hĸ¸¸¸ "("84r"("l_^6ÿÿ³þW&h'¿§³&+5ÿÿ³þWN&hÿÿ³þWö&h'8#³&+5ÿÿ³þW©&h @ #& #0 %+5+5ÿÿ³þW©&h' ³0&+5ÿÿþöb&(¿þ+ÿÿÿ2bö&(8ýWÿÿþö*&+¿þ+ÿÿÿ2*ö&+8ýWÿÿ¢þW*E&+o ¶3 %+5*…nÌ9@  ¸ ³[?3+39/993333310#53!#>5#5nr½æþÐ--.W¬ MWn53L#¥*…xÌ9@  ¸ ³[?3+39/9933333103#5#>5#5’æ½rT--.WÌþâ  MWn53L#¥ÿï{¼æ#F@!##  $!!##¸ @ [  #¸G?Ì229/33+9/333393310".#"#>3232673#>5#5ò*TNG76 [ /R?,UPG62\c”--.Wî$49ac9%58Šn,MWn53L#¥ÿÿ•ÿì]´&j™¹´&¸ÿ¦´%+5+5ÿÿ•ÿì]R&j JÈ´&¸ÿ¶´%+5+5ÿÿ•ÿì]÷&j&jÇ¿˜ð µ&+555ÿÿ•ÿì]æ&j&jÊ8ð µ&+555ÿÿ•ÿì]©&jд&¸ÿ½´'%+5+5ÿÿ•ÿì]À&j•Õ@ &¸ÿ²´!,%+555+555ÿÿʨ&,™ô@  & %+5+5ÿÿÊ^&,Š @  & %+5+5ÿÿþô&,¿þ)ÿÿÿwö&,8ýœ*…nÌ9@  ¸ ³[?3+39/993333310#53!##.=nr½æþÌW.--¬ ¥#L36nVM*…xÌ9@  ¸ ³[?3+39/9933333103#5##.=’æ½rXW.--Ìþâ  ¥#L36nVMÿï{¼æ#I@##  $# @ ##» [#G?+3/33Í229/333393310".#"#>3232673##.=ò*TNG76 [ /R?,UPG62\c˜W.--î$49ac9%58Šn,¥#L36nVMÿÿ£ÿìD´&v™´&¸ÿó´ %+5+5ÿÿ£ÿìDR&v J´&¸ÿó´%+5+5ÿÿ£ÿìD÷&v&j¿Úð µ&+555ÿÿ£ÿìDæ&v&j8Eð µ&+555ÿÿþWT0&r‘d´$&¸ÿó´$ %+5+5ÿÿþWT0&rË d´%&¸ÿå´)$ %+5+5ÿÿ£ÿìD©&v´&¸ÿó´,%+5+5ÿÿ£ÿìDÀ&v•@ &¸ÿó´&1%+555+555ÿÿ$¨ž&< I@  & %+5+5ÿÿ$¨^&<Š @  & %+5+5ÿÿþ»¨&<¿ýðÿÿþî¨ö&<8ýÿÿÿ@_Ì&3ËþTÿêÐÁã 5@    [ ”?3Î3+33333933310#53#53#53Á­­êuÀ²½­­к­  þíºÿêÐÁã 5@   [ ”?Î33+33333933310#53%3#5#53Á­­þ•²Àu<­­кY þù ºËÂß!@ ¸ ²[”?+93331053”ÉÏE %þÜ!ÿÿ5þW™&z'¿Ën³*&+5ÿÿ5þW™O&zn ¶150 %+5ÿÿ5þW™ö&z&8Hn³/&+5ÿÿ5ÿ왩&z@ 4&4A %+5+5ÿÿ5þW™©&z&n³4&+5ÿÿÿ0ÿìf&2¿þeÿÿÿwÿìfö&28ýœÿÿÿ0“&Z¿þeÿÿÿw“ö&Z8ýœÿÿ;þW“Z&Zv ¶9/* %+5ó«DÂ@ €“?Í93331053ó‚Ïó«úì…·Ì )@  ¸ ²[?+9/93310##.=³W.--Ì¥#L36nVMÿÖþï*µ//3310#*Tùèÿ þïà†F@"    //39///3333323333310#'7'77'*T7©©7©©7©©7þïY€7¨§8ªª8§¨7€ÿ×þﳆ 0@   //99//3322339910'7##!'7³ß7„øRJ„7©Û7}úmâ}8þLþï(† ,@    //99//3322339910##'7!(Rø„7ßß7„Jþï“}7ÛÝ8}ÿÿªÃ"LѪÃ"L@ ¹Y¼?+99105!ªxɉÿöÃÖL@ ¹Y¼?+33105! àɉÿöÃÖL@ ¹Y/+33105! àɉÿûþWÑÿ„6@  »Y¸ÿÀ@ H»Y@ H/++/++3333105!5!Öû*ÖÜ``Í``^?Ì@œ[?+933310!?©þ÷7Ìý’n^AÌ@œ[?+933310!© þÉ^ný’]þ• @œ[›[++933310!]© þÉþ•ný’Ž^@Ì@œ[?+933310 !ÅþÉ ©^ný’±^Ì3@ œ[?3+39333333310!!!c©þ÷72©þ÷7Ìý’ný’n²^Ì/@ œ[?3+3933333310!!!i© þÉýΩ þÉ^ný’ný’²þ”6@ œ[›[+3+393333310!!!i© þÉýΩ þÉþ”ný’ný’ÿÿ®^Ì'Øÿ ØÃ¶ÿ+Ë /@  ÁY Â[/?+3+3933310#53%­sþ˜hÃiÝûN²¤nþ’¤¶ÿ+ËP@*   ÁY  Â[ÁYÂ[/+3+3?+3+393333310%#553%%þ—Ãþ˜h""þ˜hÃiþ—""*¤þ’n¤bb¤nþ’¤þžþžP‘{¼ ·  /3/9310#"&54632{§ro£¢ps¦ªu¤¤usŸŸuXÛ .@  ›[/22+33933310!53!53!53ª®ý¹¬ý¸¯ÛÛÛÛÛÛÿ×þï³Ñ·//333310#!*SÜ‚úmâOþMþï)Ñ·/3/333105!#þMÜS‚Oú“ÿþïîƒ@ //9/3322310###!îÄTÄÜÑûâ²ÿþïîƒ ,@    //39/3332233310###!!!îÄTÄÜþu‹Ñûâ²Oþëÿþïîƒ .@    /3/9/3333333310!!5!###î‹þuÜÄTÄOþNûẫ%1=H‡@O,##& D;;>5 5JI2A¶Y82·[8G¶Y8)¶Y ·[ /¶Y  ¶Y ·[¶YÜ?+++?+99//++?+++933333393333310#32#"&5464&#"322#"&5464&#"3262#"&5464&#"32“‘G“þuowqttrÜ-69026d¡åwqsvrÝ04810832–uowqrvrÝ049026e‹y•“•˜š“””þØbZWeeWþ¶þØ•˜˜•””þØeWVf_]Y‹•“•˜™”””þØeWWeeWöMÖÌ@ ?3/9310#3¬)àMM¶Ì!@ ?33/2933310#3#3ŒŽ(àþ)àMýÿÿ¦M)Ì'çþ°&ççSZ]¬2@ ï[î?+9=/3393333310%53 ªþ°P±þ±Qm?sþŒþ‘nq¬2@ ï[î?+9=/33933310%#5 53 ²Rþ°°Qotþ?íàD <@   Y  ?3/3+39/399333310#353#353›”ÄÆÂ”ÄÆÂ·ú¼ÉÉ·ú¼ÉÉÿÿÿû¬Ñ BˆÌþE@ ??993310!#3Bv¿sEÈÌ H@&   Ÿ[ Ÿ[ Ÿ[Ÿ[?+?+99//++9333333310!53535353ÃÃÃÃÃÃÃÛÛñÛÛþ[ÛÛþYÛÛÿþïîƒD@        /33/9/33333/3933333103#5!#3###îÄÄÜÄÄÄTÄOOþëNûâÿþïîƒ .@   /3/9/3333333310!!!##:þÆQÜÄTþ²þNûâÿþïðƒ·//333210#!*TÆàÆþï&nþ’ÿþïðŠ@ //9/3322310##*TÆððÑûâ¹þGÿþïï† *@   //333332393310#'77'*TÅïïÅT~~~þïµÝݵµqqpÿþïîƒ 0@      /3/9/33333333103#5!3###îÄÄÄÄTÄOþœNûâeƒ<@    äY  @ H /]2/+]3/+399333104&#"#'33>326FHU€w#cJnaŽZFd^þ”ÿ‹oA:lyþOÿÿÿgÍ~bÿíý‹ÿÿÿj­hýŽÿÿÿi¯€qýÿÿÿx³s0dýŽÿÿÿi­€iý6Ôj@9   `Y  `Y  `Y`Y?+3/?+99//_^]+3+3933333310&#"!!!!!!&432ø-³‰Œ™_þU„þ|ÄýˆòïþéœÐ$¬›±¼Ä¸µ‹þÕŠþ¹‹Ïù‘ƒqÿvÌ &,‰@F'   -.$)! )   @&  _Y*##_Y?2Í2+3?+3Î2399//999933339333333331073'6#'#7&'#&?3&'ÐSE0ŽHM0¨þüÑlŸPò¡'Ž"JF7ŽYxëæ#ŽDBRþì1SÙ ÊpeV "¡öQzA4ü‰AÁ³^t2¼/µ6@Xvþ·3üRN# gK²+þÿqÿìvZ)^@2$##*+ _Y $$ '_Y _Y?+3?+9///3/3+93333333104'33>32&#"6# !2.#":Ī+pf$%$=#535#5354632.#"!!!!!27f°ýFgHººººÎÄ“È"®oHrp˜þh˜þh©ã®7–¡š6{kŽ˜LÃÉym9?Ls}T˜Ž×X°cÿ8d@*b@3  (**#"" +,(PY) # ?3Ì3?39+33393333939933310!5#54&#"#4'33>32332#4&+­J1A@O©•"iMWW¶™evf¨1AŽØþ`bš{À¤ý¡S½*0f]_b³ò¬Ñý/®š{þ©ý”¯E#'*š@U!"*(())'$  $&&+,'_Y # _Y) $(    ?3?399//993+3333+39933333333933910!!##535#533!33#3#35#3'#&'#3D¼þΉ‰‰‰Þ¹E¬…………þÂ’ýþËôjŠD LþE™þg™›ç›þqþq›ç›þg4çççý¸@†Ñ´-ÿö´E ,5Iœ@R#"" (-;??8H2H KJ>676tY( &tY##;79972sY7272 A tYF  1sY??+?3/3+399//+3/33/3/+99+3933333333333310+#3 #"&'732654&'.54632.#"4&+32653733#327#"5Fª‘=¡ÒGn`ZJb l="-0MA^WFXm#753ƒüðMQ8@KKZ;G••D-34¨÷¥ÄýrEûhSdSPX%($>!4e8OVVH ,#I%9#YÚd^þerþœaŽŽaþ€Na ¡’ÿìÌE ;@L    5+10#0+ <=5#--3`Y1p1 11-!`Y _Y_Y?3?+9/+3?3/+?3/_^]+99933333333339310!##324&+326#"&'73254.'.5!2&#"ÐÓ8­Ò»Ãd^îÚfyml‚• “P?’!D^ZX/w–k}?mh\6?ýÁEò…µ#ýÍpoþ*uýÖ™œ}XM«2D4($OqS%‡}’—JL,*RxÍE#&*.›@Z# )'  '"+ %$$+'/0 &)_Y ,#+_Y $'' ?333?399//33+33+39392293333939103#3#####53'#533!337#37#7#7#3'@X$|”?Ðn©pÐ@“z$V>>½4ì2½þWŠæþ?ˆ@æPþ8M.[¶›ç›þg™þg™›ç›þqüïçççýñññÎ(¿€1žËX@ ! ¸M·A TYN TYMN??+?+99//?93333102#54.+#332>53#š­ÀY¸1ro­¸<¸°oq0¹[Á«ËjéÊþøü™ŸGûßËû5ÙýÑG£•¢ýRËêhÿÿŠþÖ–Ì&ÓÑý²-?5[ÿìcZ(†@H$"&&)*)sY'%sY"?  sY sY0 ?3/]+?3/+99//_^]]3+33+39933393339310!3267#"&'#53'47#53!2&#"!!!iþ5›—KŠaLd¾jÝÿƒww:Ãj¶[RФ”Íþ%ÚϬœ+=‡C9ððK+$ŽÖ5?Œd‘«NJËEP@)   _Y  ?3?39/33+33393333333310!###53333!!ëþ$”¿¡¡¿[ááþ =þ1Òošþ+o 6ýÊ6ýÊ ý‘L€EV@-  _Y      ??9////99999+39333333310%%#5%55%!5!ÅGþ¹Gþ¹¾þ¹Gþ¹GþE4©þÙ¬Ÿª¥¬Ÿªþ]@©š«¦©š«‹œœþºÆ)7CPY†@M8N4 1%H!QUQ!% 4[ZD%+%aY1+;aYSaYHQ!@ H++.JXXaYAaY ?Æ33/3++3/9//|/+9++3+39333333310%#"&'#67>32"&'#"&5463277563>7%4&#"32632654&&#"32Æh\#5$u#J^OSdý(@d8Q69?賚ŒHPSE>@zᩨ&£­¤€~–¦>30@5)7L¶¼þ\ý–N@~‰›"<73BÁþ[úþÖD쀘–r5FC8Nþ~è¿E"', @J !%)('  ' _Y&  `Y `Y(' '0'°'À'Ð' 0° ¸ÿÀ@ H'' ,_Y ??+9///+_^]]]33+3333+33+/33/3/3333339/3103##!##535#535!23#'!!627!!&+_d8ãþ翉‰‰‰̺æ0aÀýÅ8þÀ¤Sþ þR¶ö± …q{ýþî…b…ë~m…'böUUÁRqÿ,OÌ"h@7  ! #$ _Y_Y  `Y _Y?3Í+3?+33/9/++3933333333310%#5&%53&'!>7MmÂ[|áõÖ|Æ9«EœŠüí ‰„‰6o+…HFÃÃp5‹#uv žœ8Ãþ þ7+ýþzþh&PÍE"Š@K       $# _Y _Y    ?3?399//33+3333+33999333929393339103##!##537!5!3!!'!73&/®TË“ˆÉ€ýڀɇ‘ÉTþãU®Æ­Wü»½Pþã5´.$,àá•þ–jþ–j•á•Ðþ0•áá•‚”ÿì¾Z5Í@ƒ(%** & 01167(_Y% _Y ?  300@000 0@0P0`0ð0 0033-_Y3/o¿Ïß @ H`Y?+3/+_^]q?+3/_^]q99//]3+33+3933933333291047#53>?!5!654!"'>323#!!3267!"$_TŽ"^wšpýqeþå}¼,àÔáõ‹ÆZp(åüi ¥Ÿ•®¹Jþ7ùþór"•-?/)•Õep!°”»­5•(:,!$•&r|v€%þšÍqÿvÌm@A   _Y`Y_Y  0 0 € Ð à  ?3/]q3Í+3?33/++39333333310.'67#5&753Ót¨wK©[Ÿˆþå|êüöð|þgŒ‘—†V"þ×AZ~ûØ&îAþ±!ÜÛg@IWtüÝøþò/þôÿÿþ“oê ý›ÿôÍP .2„@L12/020# 4*)##31/ð  ¶Y& ¸[&-¶Y* **& ¶Y ¸[¶Y?+++?3/_^]+++3/_^]??3333333333993310#"&5463 4&#"326327#"&54632.#"#3ÍŽ€€‰…ˆ ”8>B89?=;üYE9S ‚b‡Œ‡^z +-}°v¿s”É××ÉÓÒþ[¥‘’¤š˜”»¥© y™ßÅÊØ‡| HUû!Eÿì•&‹@$  '( ¸µY  ¸@ Y $¸¶Y$$ ¸@Y?Oo ¸´Y?3/+/_^]+9/+3/_^]+3/+93333310%2673#"&=56746324&#"6Æ3NE(Ûs…3QO5ƒ{i~°HœH723f~Nhmþɦ”¯IK“˜£‰¹þÀRôewc„gyþE¹E$(e@5 % ()*"¶Y%%&`Y%¶Y  ?33?33?]+?+9/+99333399333310!#3&53#"324&#"3265!ªþòŒÀHxƒõù€w•)68,'5:-þijX9müäEûÞ rú»²Ð·‡†»Ë—}™–yý숈&­Ì'0`@4-($$12-ÈY,@, ÈY,, , , ÈY ÈY/+3/?+?_^]+Í+99993333210#"$54$32#"32%#!2#4&+326­Žþù²°þùŽ °° Ž\þüç—ÛvÿééýŠ3Ž—~_Qª¶PTùäþº©ªDåâF«ªþ»ä-G‘þåÈþÕþ¶HÛþ°?~ovŒEHþÓUJÈËf@6  ÈY    Ñ?33]33]?3333+3993333393393310#'#373##5!_ÈY™/iœ¸ =‹˜üVo«ÉJþ„|þþ/#žVý%ýÛ%\\;“Z#G@#  ! !!$%  _Y _Y?+?3+33399333399331026;!5654&#"!532&5gõ®£u,Èþ†‚¬¤¨ªƒ…þÈ,u£®Zþ¼þí½þ·l œàb¬àèìÜ­þùbàœ mI¼C_ÿÞƒHT@   !  ¸¶Y¸´Y¸²Y?+?+9/+9/993333310"&54632!3267.#"ržð…†÷–˜ó†üÅ2£U„¹NHbÜ•3¢W³u"‘¦ÿŽþþ¥þœ6Fl~*›zŠ5AuþêÿÿÅE 5­@b    .#)((# 67.&¶Y&+¶Y)) )°)))& ¶Y ` ? & & ???39///]]3+33/_^]+3?3/+99933333339922339910 # '##33#"&'73254.'.54632&#"\üýmýÐ;Ó>lä`áþîO [uh}bCF‰4XXH(vpÊcr32#"&'7326dŽir¹Ù§àðïã«á¶`Ї"â½jZ—¬þáþïþíþẜ lhÑdÄD -@   @ ¯Y /Í+Í33399310#&'5673!ç9>HH>9Ý)C‚•I$I•‚CVvÿÃV &@   o/Ä]299/9333105673&'#;C‚•I$I•‚CV 9>HH>9ü#dÄD )@    @ ¯Y /Î+Î33329910&'3#67!5å9>HH>9ü#C‚•I$I•‚CVvÿÃV &@  `  /Ä]299/933310%67#&'53‘C‚•I$I•‚CV¢9>HH>9ÝdÄD?@    @ ¯Y /+Í2Í233399333910#&'5673!&'3#67ç9>HH>9þ9>HH>9)C‚•I$I•‚CC‚•I$I•‚CvÿÃV<@   ` o/Ì]299/Ì]299933333105673&'67#&'5;C‚•I$I•‚CC‚•I$I•‚C 9>HH>9ý9>HH>9vÿHVS@) @¯Y o /Ì]299/3/+Ì_^]2999333333310!!5673&'67#&'5vàþ ÅC‚•I$I•‚CC‚•I$I•‚ChPX9>HH>9ý9>HH>9iÿåcÅ,b@7&-. "QY  / O _ o  PY)PY?+?+3/9/_^]+33993333910 #"&54>323654&#"7632.#"326c\©ë‘µÄTŒÃudš%’‘<Š4'|zÒäÙ†Ue¤jod_¥uª³þ‚þõ‰É¶vû³dcT?6ÄÑ'$“>þìý÷Yr…þùs†• À I@%   _Y?+3/3/?33_^]]993393310353! Ýôãý¤bþÊ4þÆ‘ðû“úþëü·Iiþ9bE"@ _Y/2?+993310!#!ªý~¿ùþ9jù– øôþ9±E J@$    _Y  _Y/+3?9/3+3993339333105 5!! !{ý•Bü²Hý¨¢þ9m"j˜ýý˜u`Xò@ ­Y³?+99105!uã`’’ÿÿÌþEîð¤ÛÏ%@›[?@H/+]+93103ðë¤+þÕNÿò}T0@ ¯Y/2?9/+993393310##5!3‰jþå¶ò®uýN‡Ë«× +Z@5'!  ,-$$­Y!!**­Y?_ÿ@,H@H/++]3+3/393+39939210#"#"&5463232%"32654&.#"32« z¹w8žR~ž¡{·s‚®™þÎ=g0-fBH^^þ`,gCG\\IuN¦Ý~–Ô¯«ØþåÕR~‚€€sk“ú€€’ps‹4˜Ç@ ¯Y//+993103!!4^ûœÇû—^œÿþ0!@ ¯Y /2/+9933104>32#4&#"œtÑ‚ƒÓwgÄ ¢À–ï…„ò”þ¾äâÂþëþ9áã&@ ­Y ­Y/+/+933310"#"'53254632&nSY®£O7<9ª®¦W,1Xwrû-¬·“éѬ¶”lP`ô-|@L&./)#­Y)@H)@ H)@&­Y_@H  ­Y @H @ H @­Y?/]2+Í+++3/_^]+]+3Í++2+993310"&'&#"563232727#"&'&#"5632\E‘I…T?rGr•M“FYN‚r’ý™©@  //ÍÍ93310#432#".#"¯‘¤•Fe2#'+3+ý™é I8'1$+$—§Ëý™¯©@  //ÍÍ933103#"&546323265‘¦“Fe2#'+3+©øâíþûI8'1$+$—§ÿö+×¼µ¸²Yü?+33105! á+‘‘ý™¯©@ þú??93103#‘‘©öðý™×¼"@ þ¸²Yü?+?39310!!#¹ýØ‘¼‘ûnÿöý™¯¼"@ þ¸²Yü?+?393105!# ¹‘+‘úÝ’+ש·¸´Yüú??+393103!!‘(ýG©ü‘ÿö+¯©"@ ú¸²Yü?+?393105!3 (‘+‘íû‚ý™×©)@  þ¸´Yüú??+?3933103!!#‘(ýØ‘©ü‘ûnÿöý™¯©'@  þú¸²Yü?+??3933105!3# (‘‘+‘íöð’ÿöý™×¼*@ þ¸²Yü?+3?3393105!!# áýØ‘+‘‘ûn’ÿö+ש*@ ú¸²Yü?+3?3393105!3! (‘(+‘íü‘ÿöý™×© 5@    þú¸³Yü?3+3??339333105!3!!# (‘(ýØ‘+‘íü‘ûn’ÿöw×p.@  ¸´Yý¸²Yû?+?+3333105!5! áûáß‘‘þ˜‘‘jý™c© @ þú?2?39933103#3#j‘‘h‘‘©öð öðý™×p 9@  þ¸´Yý¸²Yû?+?+?3393310!!!!#¹ýØ(ýØ‘p‘בü"jý™×¼ -@   ¸µY üþ?3?+33993310!###×þŒ‘ב¼‘ûn’ûn#jý™×p ;@    ¸·Yý þ¸²Yû?+?3?+33993310!!#!!#jmý$‘hþŒ‘p‘úºo‘ü"ÿöý™¯p 7@  þ¸´Yû¸²Yý?+?+?33933105!5!5!# (ýع‘w‘בú)Þÿöý™c¼ .@ þ¸²Yü?+3?339933105!### m‘ב+‘úÝ’ûn’ÿöý™cp ;@  ¸´Y ý¸µYûþ?3?+?+33993310#!5#!5!c‘ý$‘þŒpú)F‘ú)Þ‘wש 7@    ¸´Yý¸´Yûú??+?+33933103!!!!‘(ýØ(ýG©üǑבj+ש *@    ¸¶Yüú?2?3+39933103!!33Ò‘tü“‘שü‘~üjwש ;@    ¸´Yû¸µYýú?2?+?+339933103!!3!!j‘Üü“h‘týû©û_‘2üÇ‘ÿöw¯© 7@   ú¸´Yû¸²Yý?+?+?33933105!5!5!3 (ýØ(‘w‘ב9úÎÿö+c© .@  ú¸²Yü?+3?33993310!5!333cü“t‘ב+‘íüíÿöwc© ;@   ¸·Y ûú¸²Yý?+?3?+33993310!5!3!3!5!cü“Ü‘þ‘ýûtw‘¡ü6‘ý™×© >@  þ ¸´Yý¸´Yûú??+?+?339333103!!!!#‘(ýØ(ýØ‘©üǑבü"jý™×© 1@    þ¸µYüú?2?+?3399333103!!#3#Ò‘tþŒ‘þ˜‘‘©ü‘ûn öðjý™×© G@  ¸´Y û¸@ Yý ú þ?2?3?+?+9933333310#3!!#3!!û‘‘×þŒ‘‘týûý™ û_‘ü" üÇ‘ÿöý™¯© <@   þú¸´Yû¸²Yý?+?+??339333105!5!5!3# (ýØ(‘‘w‘ב9öðÞÿöý™c© 1@  þú¸²Yü?+?3?3399333105!3#3# t‘‘h‘‘+‘íöð’~öðÿöý™c© G@    ¸´Yý¸@ Yû þú?2?3?+?+33993333103#3!5!#!5!Ò‘‘þ˜‘ýût‘‘þŒ©öð ü6‘ú)Þ‘ÿöý™×p @@   ¸@ Y ûþ¸²Yý?+3??+333393105!!#5! áýØ‘ýØáw‘‘ü"Þh‘‘ÿöý™×¼ 4@    þ¸²Yü?+33?3339933105!!### áþŒ‘ב+‘‘ûn’ûn’ÿöý™×p I@   ¸¶Yû ¸¶Yý þ?2?3+3?+3333993310#!5!3!!#!5û‘þŒ×þŒ‘ûý™Þ‘‘ü"ב‘ÿöwש @@   ¸@ Y ýú¸²Yû?+3??+333393105!3!5! (‘(ûáß‘9üÇ‘þ˜‘‘ÿö+ש 4@  ú ¸²Yü?+33?3339933105!333! t‘בt+‘íüíü‘ÿöwש I@    ¸¶Y ý ¸¶Y ûú?2?3+3?+33339933103!!3!5!5!Ò‘týûþ˜‘ýûtþŒá©üÇ‘Êü6‘þ‘‘ÿöý™×©V@  þú ¸·Y û¸³Y ý?3+3?3+3??3333933333105!5!5!3!!!!# (ýØ(‘(ýØ(ýØ‘w‘ב9üǑבü"Þÿöý™×©I@       ¸@ Yü þú?2?3?33+333399333333103!!###!5!33Ò‘tþŒ‘בþŒt‘שü‘ûn’ûn’‘íüÿöý™×© b@ ¸·Yû ¸@ Y ýþú?2?3?3+3?3+3333399333333103!!#!5!3!!#3!5!Ò‘týûבþŒ×þŒ‘þ˜‘ýût©üÇ‘úºÞ‘‘ü" ü6‘sÍ©¶ú/?3310!!Íû3Ís6ý™Ís¶þ?/3310!!Íû3Íý™Úý™Í©·úþ??3310!!Íû3Íý™ ý™g©·úþ??3310!!gý™gý™ fý™Í©¶úþ??3210!!Íý™gý™ $ýûg© #'+/37;?CGKOSW[_cgkosw{ƒ‡‹Ê@j&FVznn'GW{o6NŠff7O‹g*>Z~rr+?[s ":JŽbb #;Kccsgokw2R†jj3S‡kk/C_ƒw.B^‚wvv‘gckhk¸@ Yd`h_[WTW¸@ Y\XTOKSPS¸@ YLHPC?GDG¸@ Y@nš¸¶ÊÊ?o›¸µË*Z†º¸¶êê+[‡»¸µëBr–¸¶ÆÆCs—¸µÇ.^о¸¶îî/_‹¿¸@ïïÇëËçÏãÓß× ÛÃJzªòÚÚK{«óÛÛ¸ ³Gw“¸µÃFv’¸³ø!@ ÃÇËÏÓ×Ô׸@YÀÄÈÌÐÔ¯³·»¿«¨«¸@Y¬°´¸¼¨“—›Ÿ£§¤§¸@Y”˜œ ¤ƒ‡‹{x{¸@Y|€„ˆŒxgkoswc`c¸@Ydhlpt`OSW[_KHK¸@YLPTX\H7;?CG303¸@Y48<@D0#'+/¸@Y $(, ¸@ Y ÷ûÿ¹³óðó¸³Yôøü¹@ðÔ¨¤x`H0ðð0H`x¤¨Ô ¸@ ÜàäèìØÛظ·YßãçëïÛA  Y ú?3+3/3+39//////////3+33+33+33+33+33+33+33+33+33+3333333339333333333333333333333333333333103#73#73#73#73#73#3#73#73#73#73#73#3#73#73#73#73#73#3#73#73#73#73#73#3#73#73#73#73#73#3#%3#73#73#73#%3#3#'3#'3#'3#'3#'3#3#73#73#73#73#73#3#'3#'3#'3#'3#'3#3#73#73#73#73#73#3#73#73#73#73#73#3#73#73#73#73#73#fggÍggÍggÍggÍggÍggû™ffÍffÍffÍffÍffÍffüeggÍggÍggÍggÍggÍggû™ffÍffÍffÍffÍffÍffüeggÍggÍggÍggÍggÍggû™ffšffÍffÍffÍffüÌffšggÍggÍggÍggÍggÍggfffÍffÍffÍffÍffÍfffggÍggÍggÍggÍggÍggfffÍffÍffÍffÍffÍffûÿffÍffÍffÍffÍffÍffüeggÍggÍggÍggÍggÍgg(bbbbbbbbbbba```````````````````````c```````````````````````c````````````aaaaaaaaaaab^^^^^^^^^^^baaaaaaaaaaa````````````íbbbbbbbbbbb#```````````8ý™Î©EIMQUY]aeimquy}…‰‘•™¡¥©­±µ¹½ÁÅÉÍÑÕÙÝáåéíñõùý  !@kdx¥äÅÅ Kk‘«ðËËHhˆ¨õÈ`{¡àÁÁey¢åÂOo‹¯ìÏÏLlެñÌ"\ܽ½a|žá¾Ss“³èÓÓPpŒ°íÐ&Xƒ™Ø¹¹#]€šÝº÷ÿ½ @ Tt”´éÔ*ü½ @'Y„–Ù¶048<@DDø¾!@ ¶ÔºÐ¾ÌÂÈ ¸@Gg‡§ôÇÇ ¸"@ .26:>B+ý¾ #@  $(,CÊÎÒ¸³ÆƸ´Y¹½ÁŸµ¸¼Àĸ³§¸´Y@«¯³¸µ§?ª®²¸³¦¦¸´Y™¡¥¸ µ˜œ ¤¸ ³ ‡ ¸´Y<‹‘“¸µ‡;Š’¸³† †¸´Yx{ƒ¸µ wz~‚¸³ g ¸@Y8kosÿg7jnrþff¸@YX\`düW[_cûG¸@Y4KOS÷G3JNRöFF¸´YØÜà丵×Ûß㸳ô¸´Y0èìð¸ @ô§‡ gGôôGg ‡§ DËÏÓ¸³ÇǸ¶Yþ/çë︳óó¸·Y"&*/3+3?+39//////////3+33+33+33+33+33+33+33+33+33+3Æ233333333933333333333333333333333333333310!35#35#35#35#35#353353353353353353#3#3#3#3#3#335335335335#3'#3'#3'#335335335335#373533533535!355#%355##5##5##5#353353353355##5##5##5#35335335335#3'#3'#3'#3#3'#3'#3'#335#33535355#355#35#3#3Îû2fffffffffffgfgfgfgfgfgggggggggggggû˜gfgfgfgfffÍffÍffÍffÍgfgfgfgýÿffgfgfgfüÌg3gÍgšgffgfgfgfggfgfgfgffgfgfgfggfgfgfgfffÍffÍffÍffggÍggÍggÍggÍgfffÍgfÍgffggffggffffggý™"a"a#`!b!b!```````````Ábþß`þÝ`þÝ`þÝ^þÝ`j````````Àbbbbbbba````````À````````Ã``````````þßaaaaaaaab^^^^^^^^þßaaaaaaaa`````````Íbbbbbbb"bbbbbbbþß``Àba``À``Ã``þßaab^^þßaa```Íb"bwuVTµ//3310!!wßü!Tü!ËÉ@  /2/3333310!!!Éû7L1Éû7}ûÏ1hd{@ /Í]9310!!dþüühd{9@  ¸@ Y ¸±Y/+Ä_^]+933310!!!dþüLþœüþPbþžFÅ"µ//3310!!½ûC"þ$2½®·//339107 XV2|û„4ÿåˬµ//3310 4—ûi¬ýžý›ÿå½a·//33910 ½ýªý¨aû„|ÿ噬µ//3310™ûi¬û9esY  P@(  °Y °Y/+/_^]+9=/3339933933310!# 3 ŽRþ7ÉRËþþžb`ÏÑý15ýËýÂ>£¢*)0@  ! ¸µY ¸±Y/+3/+9333104>32#".732>54.#"£xÑyzÒyyÑ{zÐxVb§cb©db«ba©bdzÒyyÓyyÑxxÐzb©a`ªbb«bb©hVeR'/7?GOW_gow@8PhhTl8xx<|(pp,t ``$dHH L@@D0044DLdt|lX\\€Nvrv¸¶YJrF~z~¸¶YBz6njn¸¶Y2j^Z^¸¶YZVRV¸¶YR>:>¸¶Y:.*.¸@Y *rzjZR:**:RZjzrb&bf¸´Yb&&"¸²Y&?+Ä+9///////3+33+33+33+33+33+33+39933933333333333333333333310#"5432'#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432%#"5432#"5432'#"5432Þ4884”4884÷7575$4884þ76666­7557R7557ý6666ƒ4884”4884ý®4866$4884È6666þ\6666÷7557”6666–666,557þÓ775ã666“775Z557ýw557¹639ýD557™448775ã666þ775ä557þÕ848*557®‰ú ¶ /Í93102#"54>fnÙrþþ·¶þþo×útÚj·þþ¶lÕw%¨ƒ@  /Í/Í3399103!32>54.#"%ƒüvËwvÍvvÌwvÍuƒû}AvÌvvÍuvÍvwÌ%¨ƒ#*@ %$ /ÝÎ/ÝÎ339933103!4>32#".'32>54.#"%ƒüQbªaaªbbªaaªbMvËwvÍvvÌwvÍuƒû}AaªbbªaaªbbªavÌvvÍuvÍvwÌn…^u 9@ ¸@ Y  ¸±Y /+Ä_^]+933310#".546324&#"326^—aDpD“egGJLfFFfbJM_}kArEg‘JGgFffFGei±˜+7E|@& ,2?2 EGF>8¸ÿà· H88;;A¸´Y5)#)¸@Y/#;@ H;#;#  ¸²Y¸²Y /Ì++99//+3+3+3/+33333933104$32#"$732>54.#"74632#"&%4632#"&3267#".'žžžþðžžþð?ŒóŒóŒŒòŒóì)**)³)**)þh:}NP|9:pÏGsW.MžþðžžþðžŒóô‹ŒòŒô **))**))þòN:;M1±(DE±˜'5b@"(".76¸@ Y%/5522,¸@Y2?2O2o2222 /Ä99//]]+3/33+333933104$32#"$32654&#"32654&#"327'#"&'žžžþðžžþð+)**)³)**)þ.-WrIÏp::}NO}9Mžþðžžþð6))**))**þ‡DD)±1N:;Mÿ†²'3_@($!!. 45+¸·Y!$!¸²Y1¸@ Yp $$/]33/]3++33/3+933333333310675373#'#5&''7&'#5367'32654&#"à¤WgHfW¥3¥F éé E¥3¥WfHgW¤3¤E èè F¤œ¥xx¥§vv§‹¥E éé F¥3¥WfHgW¤3¤F èè E¤3¤WgHfW¥þzv§§vv§§<F”"b@ #$¸¶Y¸@ Y  ¸±Y/+Ä_^]2+3/3+33933333331035.546323##5#32654&#"Xêr”¯{{¯”rêêHê,„^_ƒ„^[‡xʪp{¯¯{oªÊHêê:^„†\]…‚¤rÒ!l@  "#¸@Y0 @/ ¸±Y/+3/_^]ÍÌ99Ä]+9999399333993104632/!/#"&732654&#"¤¯{fQâK7þÿ@¯{{¯H„^_ƒ„^[‡œ{¯@7þµâþÿQf{¯¯{^„†\]…‚ff«!0@ "#  /?//9/]9339310#"&'3!5265#"&5467>5€Žm‚iˆc<„%¯‘ý ‘¯&„;d‡cˆmŽ«VÕVf—Ol‚9+…—88—…+9‚lM’mU×Uak«*0@  +,/?//9/]9339310272#"&'3!5265#"&5463.54>fU|DC37‡¨ˆc=ˆ%¯‘ý ‘¯$‡?d‡¨‡73CD|«=m@C…$‰ql‚;)…—88—…);‚lrˆ$…C@m=fÿÿfh@   //9104&'54>323>32Lw„ëCr@Y‘’X@rCëlY6DÑž¡Fr@ƒcd‚@sE¡þã…†w1„ÿÿH® µ //991053#„ùã ãùùã ãU:þÆþäþäþÆ:©f$@   /3Í/39933310>54&'#"&546323#)nZˆVE[‰S:*& yWM70&sAh¥ýªDcD8AdDt{Y¥fHˆ3pÿÒ<ƒ~@K  !‰  ˆgT‰  'y‰w‡V‰?/]Í/3]9/Í3]]3]3]]]3]3]]]3]993333310%"&54632#"&54632%%5^E[‰S:*ýðˆVE[‰S:*Œˆþ:ýð,D8Ad³QýáDcD8AdCdüPDcøQxQ˜ÿ84Ìx@@  !        ?ÄÆ9////99333333332//399333310##57573%3774È`þ´`ÈÈÈÈ`L`ÈÈÈþØþ´½Yþœ= þ›>YŸYõYŸYGþà \þËYŸYþ Y€õ þ _LE_@1  `Y`Y   _Y?+?99//_^]3+33+3999322233103#535#533!!!!!íŽŽŽŽ¿…þ|„þ{ ä…”…Ãþ=…”…þ¸œž.ÌD@# PYPY  ??99//3+33+3933310!#535#5333#3# nnnn´nnnn …”…"ýÞ…”…ýôLEN@(  `Y `Y  _Y?+?99//+33+93333333103'"#>3332673#"'!í#'‚kT&¿‚Z`! ¹0/h|ý²/0rrþ*œ_EL@' _Y `Y    _Y ??+99//3+3+9939223310#!##53!24!#!!326_wÝ‘þç¿ÌîÀþ¸ö]þ£þ•«±}Änýþb…^ÕÂþÅ…É’¢þW™EQ@*   !_Y  _Y _Y?+?+?9/+39333339310327#"&5!2##4)!26a/4<2F>‹âéô»Üþ’î@þÐþð’–mQLž”ˆÒÁ´•Ìý«?Žßþ*€nþX‘Ì)06;ª@e'*0:9))1 ;#..43<=9 3*'*PY4/;/QY;;;;#' QY  PY  / ÿ  ??3/]q+??+?339/_^]993+3+3999339333332910&54673&#"'!23327#"&'#+>=4'7n¾·Ýö€0Myn ¼.„dQ¶ŽÑr*;!DGd[E·ƒ ´ða˜U”þ‡@§{l M[þXªBꨴRZ$—þ,^¸þ.PQpip|gþl_™QYèg/wn@I(®þXgÌp@(  ! ¸ @Y PY ?Æ33+33??+9?9933339293310533!33#327#"'#&5#¾ª:x ²Ž²Tþ¸'{†£©¦}LÅó´ÎάŽþæ’þnŽý@"‰.'þA&323##4.#"#3h:£}°§u£‡*`U™´´jc¯Îý²ý嘮ro4°•ý‚Ìþ~=‚ ŽþhÊEO@(      _Y??+??3993393333333310 3###33rÍ‹±Bþ£¿¿<á ý—ýȘ~©þ+Eý_¡ìþhdÌP@)      QY??+???993393333333310###33 3d£/þ’„´´ÛÓþIlaþh˜óbþoÌüa þ/þIþhƒE <@    _Y  _Y??+3?+39333310#!5!5!!ƒ±üw2ýÂüÎaþh˜œ‹ûâ¤þh): =@  PYPY?+3?+3?933331035!5!!#¤•ý“8ýj»£‰&‹‰üÚýݘqÿìGZ:@   _Y _Y??3+?3+?99333310!#5#"!273327&#"G¾f£þþï±i…üó«°™ZO¯«¥K_pMQ`\Mý^þïþïy>€þþ`ÍN-@   ¸ ·Y ?3??+933310&#"#3?>32†!*2þçÕþwÀî 8:Ž*zhSC¢:DüÌ:ý@(Å5¶Љ})E!N@'  # "_Y ?333??+9/3333933333310!# #363>32&#"ÈÐZOpÔÓ½m"Нc0#Q 7WO>+"' ŒhŽ„þEü½‰Ñ¡ZþigýZUVh0 9EN%N@ ' &"¸ @Y ?333?9/3?+333933333310!#/#3?347>2&#"ÈÌv(&{Ë·²] #nÁi75/ie>+"( ¯E­\šþU:ý¡OYU`Š€þéE¬Zñl =AKE"Z@&#$QY ¸ µY ?3?+?9/3+39333399229910 #'7&54632?654&#"KþlÕÆj1m&‚l\qcnU$:öý×"i"/:ûÆ#$}'rHf‚xcY€4ã1‡55¶ÂÞ4N;M"+'ÊE1@ _YP °??9/]q+993310#3!‰¿¿yoý‘EýÊ ´:+@ QY/??9/]+993310!!#Íçþ´:þ6ƒþ:$ÿì©R;@   PYPY?+3??+3933310! 4746324&#">©ý¸þÜþçßÅ|€›šž§¿½WP¡–5ý·ç* ˆÚ¸ÎÌ AÁÔþÜõÁÓþóý¼ØR‹{‡6@ /]3/399//339933105%5%{ý×)ý×)åð¢ðýôð¢ðÿJ¶´Ì!@?Í9/3333310533¶šU{s““½ýêÿ³÷‡Ì@ ?33/Í333910 '53‡þ“Wmþƒšdþ“Vm““þî_Ì@ ?3Ì2339310!5!%53ýÜ$þ¡š_ya““þî_Ì@ ?Ì233310!53!þî§}ýÜØôþ“ÿÎv "@ //9/3933310!#!53Îþâ“þâ[c ýýUþªÿÎv "@  //9/3933310 #5!3!Îþþ¥“]þªUýýø¦ÔÍ)@ ž[//+9/933310#353›i8ÚÜ×ÒûûÙ˜˜ø¦ÔÍ)@ ž[//+9/933310#3#5ÔÚ8i4צû,˜˜ø¥ÔÌ*@ ž[¸,?+Ä9/933310#3#5ÔÚ8i4×¥û,˜˜þ i8Ì %@  ?Ì2333339310##5##!8ï}¯}˜Oæææcþ 8c $@ /Í2333339310)335338ýh}¯}ïcæææþW•ÿt*@€/3Í29933933103#'ë¬âª•’þWþã¾¾ÉÈ:@  ?3Ä29333105353ÃÃÃkÏÏý^ÏÏ ôÂj@  /3Ì29933105!5! ¸ýH¸Ö””þ”” YÃÌ·?Í9310#53Ã5Q3¹ëýn’á PÃÌ·?Í9310#53Ã5Q3¹ëþe›áT%ÌW@/ °à PY QY?3?33+3?+/_^]/99333333310##5354632&#"3533 ´˜˜‚†K4-#E>Óþ´´´·üI·ƒz”‚ ‰F\aƒi¬¬úà:ûÆT%Ì@@   PY QY?3?3+3?+?993333310##5354632&#"33 ´˜˜‚†K4-#E>Óþ´·üI·ƒz”‚ ‰F\aƒüIÌú4ÿÿ &ÃË&óþµ ´`]5¦°ã ³ ¸S?3Í210#"&533265°´––³¡ZNM[㑬°M]^Lÿÿ <ÃË'î#'ÿÿÿZÿßrËÿÿºËÿÿÿ7FËÿÿ{RËÿÿ¬Ë ÿÿ‘ÿÓ' ÿÿƒLË ÿÿ`ÛËÿÿ'LËLh,@  ¸U²Y¸K?Ä+3999310!5!3!Lü3‡»‹º¬þTÿÿÿö°á&øú@  %+]5ÿÿÿöªá&øýñ´¸ÿß´ %+]5ÿÿÿöÀá&'ó¸ÿ±ø /@&&'&,%Ç@{”‚¢]]]5]]5+]5ÿÿÿöªá&'ó¸ÿ±øýñ/´&&¸ÿß@&,%{”‚¢@]5]]]5+]5ÿÿÿºË&ÿîí±¸ÿ^´ %+5ÿÿþ¤ºË&ÿïí´¸ÿ^´ %+]5ÿÿºË&ÿóÿŽþ/@>#(#X##G#w##¸ÿ¢@ ## %##]5+]]]]5ÿÿN}Ë&óÿiÿ¯$¶"¸ÿñ@  %•Ð]]5+]]5ÿÿðÝË&óÿLG@4F¶¥S"0`%/OË?”¤]]]]]5+]]]]]]5ÿÿ7FË&óÿ(ÿg,¶ U ¸ÿø@ % – ? /  ]]]]5+]]5ÿÿ{RË&óÿÿÿg,³¸ÿô@%–¥?/]]]]]5+]5ÿÿ~)Ë&fóÿgÿ¯W@( T Ò  ± Á P  0 G D  £ ¸ÿ­@ %_O]]]]5+_]]_]]q]]]5ÿÿ½Ý&óþùÿgA@G–Ut‚ ¸ÿ”@ %?/]]]5+]]]]]]]5ÿÿ…ÿìZß&óÿ¯4¶!!¸ÿù@!!%#Ï#º#Œ#|#_#O#]]]]]]5+]]5ÿÿ‘F<Ë&yóÿz¬s@K/Í×  v Õ 4 T # ƒ ³ " Á P  0 G D £   ¸ÿ­´ %+_]_]_]]_]]q]]]q]q]]q5]]]5ÿÿ`þÛË& óÿkÿg+@¶•"%/?Ð]5+]]]]5ÿÿ¬Ë& óȯM@;Dt„Ãá 0P` °Ð& %ϺŒ|_O]]]]]]5+]]]]5ÿÿ‘ÿÓ'& ó“!@G"¸ÿú´%+]]]]5ÿÿLß& ó1¯C@G· `¸ÿÖ@!%#Ï#º#Œ#|#_#O#]]]]]]5+]]]]5ÿÿ%Ë&óÿiÿ¯M@!7G¦¶T„ÄÔ"¸ÿ¼@ %(¥Ô]]]]5+_]_]]]]]5ÿÿÿìbË&ó¯1@!####%#Ï#º#Œ#|#_#O#]]]]]]5+]]5ÿÿsþFË&óp¯@ϺŒ|O]]]]]]5ÿÿuVË&ót¯#@ Ï º Œ | _ O  ]]]]]]]5ÿÿJDË&óÿ!þÔ7@ XG¸ÿŽ@%?/`p]]]]5+]]]]5ÿÿþLË&óóØ+@ I¸ÿÜ@ %•pq]5+]]]5ÿÿ`ÛË&óÿkÿg1@!¶•"%–?/]]]]5+]]]]5ÿÿÿöªË&óºÿ±@{”‚¢@]5]]]5ÿÿ'LË&ó/ÿgC@#§#·#F#v#Õ#„#"#`#¸ÿ÷@## %##/#?## #Ï#]5+]]]]]]]5ÿÿ ÃF&ñÿÿN}±&ö›¹ÿ€´ %+5ÿÿ¬±& ö̹ÿ‡´ %+5ÿÿuV±&ö¹ÿ´%+5´B@  ¿N MMJ??3??939333310#33673#¶ºVÖ¿ 32`°F[q>’ ܺw×û).2}5ÄÐ@  @ Y ”?+Í3321032673#"&'a±E„‚”m²zN­X›*4Cfq5"ÛþYïÿž&@ ¸ ¶[/]+93331053ÛOÅ«þY!$%þà°ã´ (@  Œ[ŽY“?++3993310 332673tþš ¤\ji]¤ °MHHMþüÛ‡ïÌ!@ ¸ ²[“?+93331053ÛOÅ«‡!$%þàÛ»ï!@ ¸ ²[”?+933310#5ïOÅ«!þÜ% uþWD:(@ PY PY?+?+993910#"&'53265!5!DàÏO¤-–{€ŠþiK»ÒŒ"„wÅŽ%MÇEG@  äY  ¸¶ äY¸?+3?33/_^]+9333331053#526733I‡j-2hytMk'8w?5ýskúMQO@    äY¸¶äY¸?+3?+3/_^]/3/3/3933/105>7>54#"'>32!úkZRFo=;‚ ‹oxy uK|Ma>rD=`5y>=ftpgƒxYG'kê;íQ(Œ@C%"  *%äYO_o/o äY¸@  äYP¸?3/]+?+3/_^]9/^]qr+9/9339932/3_^]10#"&'732654+532654&#"'>32íŠwkˆˆ A06B•)%D@6)-B‡ †im{CERKezpd <=B„;@ltsm“&1Ylj\€.Zÿþ¿ÿÍÿ´/Í321053ûÈþ¿ÀÀþ?HÿðŒ$@ /Ì2Æ33393104&#"'632#5>·3*HFZjíQ[pE0â"c•;U Ze: ,@ PYPY?+3?+933310%!!5!!5!é|ü*¦þÁóŽŽŽŽþÖ²++ 4@  @[¸F?2+3Ì23333991053!53%!5!ˆ£ý«£šýÛ%²¸¸¸¸úþÖ¨++ 9@   [ ¸F?3Ì9/+333339333103#553!53>âþû‚ï£ý«£+ « Ö¸¸¸¸þϨ3+ G@    [ ¸F?3Ì293+333333333933103#'5353!53˜›ÐÃÑ›—‡£ý«£+ ­« aþÞ¸¸¸¸þÖ¨++ 9@   [ ¸F?3Ì9/+33333333310#%5353!53h‚þûâí££~ « þ}¸¸¸¸þî¼+-@Y@[¸F?+Ì+339310537!5!W£ÇýÛ%¼¸¸ðþÂÃ?+C@   ŽYŽYY ¸G?3Ì++9/+333339910!5!"'&#"#>3232673ýÛ%”3TU$--[ +L?7SS"0+\ *K¬þ˜&%#(RH(%&&%QJ'þ7¾É @  ”?33Í233310#'##'##'ÉZ(/Õ/(/Õ/(ZÃeeeeÃÿå°Ãð ,@  ŽY“?+Ä_^]2333310 33273Tþœ ¤ ¿¿ ¤ °@ÇÇþÀþîØ+ )@ € ?Ì39/33333310#%53!5!€‚þûâ8ýÛ%~ « þ­þîØ+ '@ €  ?Ì39/333223103#5!!&âþû‚“%ýÛ+ « 'þÂÃ?+;@ ¸G?22Ì29/333333933310"'&#"#>32326733#53TU$--[ +L?7SS"0+\ *K˜âç‚Ã&%#(RH(%&&%QJ'h ƒ þÂÃ?SG@    ¸G?3Ü]2Í239/333333993310#5!#5"'&#"#>3232673+£þñ£©3TU$--[ +L?7SS"0+\ *KS¸¸¸¸þp&%#(RH(%&&%QJ'ÿY¥Xº 4@   Y/¸E?Í]9/+33333310#5353 ‡‡0ÙÏþ¶'‰þõøþµ¥Kö 9@   @@ H € ¸E?3Í22/+Í339933310#53#'53373D‡‡'ÌêhèÛim‰þ¯ï‹‹þÖ²++ 3@   @À ¸F?3Ü2Í2333339910#5!#5!5!+£þñ£=ýÛ%+¸¸¸¸þ‡e:F@$   PY PYPY?+3?+9/3+39333103#!!5!#53!5!éÖÖ|ü*¦ééþÁói…þªŽŽV…CŽÿÿÿì4&b& Jó  h¶'&¸ÿÞ´()%+555+5ÿÿÿì4&b& Jó¡!h¶'&¸ÿÞ´()%+555+5ÿÿÿì4&b& Jó­üh¶'&¸ÿÞ´()%+555+5ÿÿÿì4&b& Jó® h¶'&¸ÿÞ´()%+555+5ÿÿÿì4&b'ÇD þh&@9@ H9&&¸ÿÞ´)1%+555+5+55ÿÿÿì4&b'ÇD¡ÿh&@4@ H4&&¸ÿÞ´)1%+555+5+55ÿÿÿì4&b'ÇD­æh&@4@ H4&&¸ÿÞ´)1%+555+5+55ÿÿÿì4&b'ÇD®æh&@4@ H4&&¸ÿÞ´)1%+555+5+55ÿÿ•ÿì]4&j& JÆ Üh¶&¸ÿ¶´%+555+5ÿÿ•ÿì]4&j& JÆ¡ýh¶&¸ÿ¶´%+555+5ÿÿ•ÿì]4&j& JÆ­Úh¶&¸ÿ¶´%+555+5ÿÿ•ÿì]4&j& JÆ®éh¶&¸ÿ¶´%+555+5ÿÿ•ÿì]4&j'Ç& Ùh&@#@ H#&¸ÿ¦´%+555+5+55ÿÿ•ÿì]4&j'Ç&¡äh&@#@ H#&¸ÿ¦´%+555+5+55ÿÿ•ÿì]4&j'Ç&­Ìh&@#@ H#&¸ÿ¦´%+555+5+55ÿÿ•ÿì]4&j'Ç&®âh&@#@ H#&¸ÿ¦´%+555+5+55ÿÿ£ÿìD4&v& Jé üh¶&¸ÿó´%+555+5ÿÿ£ÿìD4&v& Jé¡h¶&¸ÿó´%+555+5ÿÿ£ÿìD4&v& Jé­úh¶&¸ÿó´%+555+5ÿÿ£ÿìD4&v& Jé®h¶&¸ÿó´%+555+5ÿÿ£ÿìD4&v'ÇR h&@(@ H(&¸ÿó´ %+555+5+55ÿÿ£ÿìD4&v'ÇR¡%h&@(@ H(&¸ÿó´ %+555+5+55ÿÿ£ÿìD4&v'ÇR­ÿh&@(@ H(&¸ÿó´ %+555+5+55ÿÿ£ÿìD4&v'ÇR®h&@(@ H(&¸ÿó´ %+555+5+55ÿÿe&Lvwj@ &c%+5+5žþW5Y!=@  "# _Y_Y?+???+39333310"&'732654&#"#33632ƒ_¤;Zj€jcxN’V¿¸uû·­ÖþWJJsnÖù‹É«l°cüÁ=šMûûÿý\þÂþÚ¢þW*E9@  _Y?+?3?3393333310#"'532>=#3&53*}zRA4(-1ýͪެ†–˜ AS^j°Nü”EûÚ‚žÿì5Y"F@# #$_Y _Y?3/+?9/?+3993333310#"&'7326=4&#"#336325õâ¶Û,³o‚”cxN’V¿¸uû·­Rþ×þ˘WUóÞøÉ«l°c­v=šMûûÿþÌj2j  ·  »;=?3?3332310#"&546324&#"322ž—–›• œ•’LSVMNR¢ê½ÃÁ¿Â¾Á¿‹€Š„‡ÿX}§c @ º;<??39/333107573ÇÐ}YxŒyýþÝ}$jO@  @H  åY¸;¶åY¸<?+3?+3/+9333339310%5>7>54&#"'>32!þÝ$zd\EF=:S† œyƒ‘TQzU—}CF|F@S,6865XkpdEv6QE$nþÐj0j#y@3!$ $!äY/ @HåY¸;´ åY¸ÿÀµH¸=?3/++?+3/+9/_^]+9333393310#"&'732654+732654#"'>320š’ƒ£“ŽHRº?3WMŒ… Œ œy„“®ÇKgzm^p@;jk/1eb[np^‡!þÂ}Ac <@åY º;<??39/3+3333333310#5!5333Ðtþfqì$³ üŸŸTóþ*q¯5ßþÏj1[b@  åY¸:´ åY¸ÿÀµH¸=?3/++?+9/333333399333310# '732654&#"#!!>321¥‹þÿ1“O>LWIP?Q uýþr#T?‚–z}“É;5SGCR(—u±#‡þ×i)j"K@  ## ° Ÿ  »; =?3?3/]39/]33333932310#"&54632&#">324&#"326)œƒ–§”Ä7‡^N[`Hv‘‘FQCHIFENow¼³ÇË™L{}"1€{KCJDENNþÝ|#\ 0@   åY º:<??+33339310#47!5!#Ÿ}”€¥þEFü«þØ­–#¸oþ×j0j"-V@#  ).#. !&!&äY!!äY¸;´+äY¸=?+?+9/+99333393310#"&54675.546324#"324&#"3260ž`PKO—~šQLQa¤Š‰EE‰QKIPNJBiopgHf ^>VljY=^ bii69â:;@7@þØi*j$S@( %%O_o¯¿ €  »=";?3?3/]39/]33339333104632#"&'73265#"&732654&#"þØœƒ”Ÿ˜£eˆ‡N+N[`Hv‘‘LKCHIFENdw»´ÈÊSM)'x}"1€}R@LFEJJþS¥­K@%   @ H ¸E?3Ä+9/Í]233333333933103#5#'##53ÔÙâ`tiÛÞhàÌ ° ¯©©þU¥¬G@#  @ H  ¸E?3Í]2Ä+9/3223333393310#'53#'##53i`âÙ~iÛÞhàÌh ° þŸ©©þ|¥„O@%  €@ H¸E?3Ä+29/3Í2333933333933104#"'632##52#'##53;3(:C˜C6=KiÛÞhà̳#@`,8NÔ©©þÂ¥? Q@& !! @ H  ¸E?3Ì+2299//3333333333393310"'&#"#>3232673#573#3TU$--[ +L?7SS"0+\ *K½—›ÑÃЛX&%#(RH(%&&%QJ'pC þÇ¥97@   À ¸E?3Ì9/3Ä33339333103#5"&'332673#âÝ‚Y¥kjTThk£ ’ á…tD78CxþÇ¥97@   À ¸E?3Ì9/3Ä3333933310#'53"&'332673\‚Ýâ ¥kjTThk£† ’ þ‹…tD78CxþÇ¥9 ?@  À¸E?2Ì29/39333339310"&'3326734#"'632+52¥kjTThk£c;3(:C˜JI#K¥…tD78Cx#@`047þÂ¥? $E@   !!%%   !À¸E?2Ì2299//3333333993310"&'332737".#"#>3232673f…U‰‡U#DA=Q[ *K@$F@;0+\ *L¥j]SSdcÛ#'##53L=5FYÀBI[*5iÛÞhàÌô,Pp0E &^þò©©þ¸±Iï !I@""" “?3Ì2299//33333333333933103#'##5"'&#"#>3232673cÌàhÞÛi¸3TU$--[ +L?7SS"0+\ *KÓþò©©h&%#(RH(%&&%QJ'þ³±Mð 7@   “?2Ì99//33333933310"&'33273573„¶u½ºu³ñÙÏþʱª‹™™Ž§IâÙþ³±Mð 7@     “?2Ì99//33333933310"&'33273%53‡²uº½u¶‹þÊÏÙ±¨™™Œ©IÙâþ³±M+ ?@   À“?2Ì29/33333339339310"&'332734#"'632#5>„¶u½ºu³R]HFZjíQ[pE0±ª‹™™Ž§Ú7c‹;U (nþ³±Mï #?@  $$    “?2Ì2299//3333333333310"&'33273"'&#"#>3232673„¶u½ºu³ 3TU$--[ +L?7SS"0+\ *K±ª‹™™Ž§|&%#(RH(%&&%QJ'j¦œ@ €¸E?Í933310%53 þÊÏÙ¦ÙâH¥ð›@ €¸F?Í933310573HÙÏþÊ¥âÙ¥–¨ +@   €¸E?3Í2333393310#'##573–iÛèhþ¤¹ŠŠï¥–¨ +@ €¸E?3Í2333393310#'53373¢¤þhèÛi¥ïŠŠ-ÎZ†'@ [¸G?2+393331053!53·£ýÓ¥θ¸¸¸ÿè§µŸ%@  € ¸E?22Í22333310".#"#>3232673ë*TPM#%& o /R?,TPJ!%( pc§%-%/H`b6%-%/HŠn ¥œ 1@  €¸E?2Í293333333105733573 ÅÏþÊýÅÏþÊ¥ãÚãÚ¥³ž #@    €¸E?2Ì2993310"&'332673e…µum[[ku´¥Šo5<=4r‡TÓyR@ Y¡?+9910!5!yýÛ%Óÿÿ/ÿÓž& w'ðþóW@G"¸ÿö@,#%@p 0@P`p€ °ÀÐ ¸ÿÆ´%+]q]5+]]]]5ÿÿ/ÿÓž& wðþ8@'@p 0@P`p€ °ÀÐ ¸ÿÆ´%+]q]5ÿÿ`þÛË& ïÿU !@ %_0]]5+]]5ÿÿ`þÛË& çÿk !@ %0]55+]]55ÿÿþ´&àèû2@<¸<'<#(#X##G#w##¸ÿ¢@ ## %##]5+]]]]5Äþÿî #/;?%@<9!@! !! ='/33333Ì]q222104632#"&74632#"&4632#"&%4632#"&4632#"&3Ä."".0 0ç. ".0 .t/ 0/! /0." 00 ".. !/." .Çob".0 0/!".."".0¯ .. 0.ò"--" ..¯ 0/!"...nþ’ãþ€èÿî@@ /3Ì]q29/10!!%4632#"&4632#"&3ãGþ¹e." 00 ".. !/." .Ço5j>"--" ..¯ 0/!"...nþ’ãþ€èÿî#@ @ ! /3Ì]q29/105#5!#%4632#"&4632#"&3QnGjˆ." 00 ".. !/." .Çoþìujju³"--" ..¯ 0/!"...nþ’tÿì;04.'32> #".54>75$&~1ELI†f<#IoMQpEþr/Z3O1@{´sr´}BI©`þâ–.è×U‘sVQr’[Lƒ`76_ƒÆþ½`:†Ÿan¶ƒHD·sp°‡a!:w¼T„SnV®%Eƒ¾ìzà ö sí › .  5 ±  ¬  5 4M ž Î û ô( (™ Ø æ 8a \¸ j E 4 çDigitized data copyright (c) 2010 Google Corporation. Copyright (c) 2012 Red Hat, Inc.Digitized data copyright (c) 2010 Google Corporation. Copyright (c) 2012 Red Hat, Inc.Liberation MonoLiberation MonoRegularRegularAscender - Liberation MonoAscender - Liberation MonoLiberation MonoLiberation MonoVersion 2.00.1Version 2.00.1LiberationMonoLiberationMonoLiberation is a trademark of Red Hat, Inc. registered in U.S. Patent and Trademark Office and certain other jurisdictions.Liberation is a trademark of Red Hat, Inc. registered in U.S. Patent and Trademark Office and certain other jurisdictions.Ascender CorporationAscender CorporationSteve MattesonSteve MattesonBased on Cousine, which was designed by Steve Matteson as an innovative, refreshing sans serif design that is metrically compatible with Courier New!". Cousine offers improved on-screen readability characteristics and the pan-European WGL character set and solves the needs of developers looking for width-compatible fonts to address document portability across platforms.Based on Cousine, which was designed by Steve Matteson as an innovative, refreshing sans serif design that is metrically compatible with Courier Newª. Cousine offers improved on-screen readability characteristics and the pan-European WGL character set and solves the needs of developers looking for width-compatible fonts to address document portability across platforms.http://www.ascendercorp.com/http://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlhttp://www.ascendercorp.com/typedesigners.htmlLicensed under the SIL Open Font License, Version 1.1Licensed under the SIL Open Font License, Version 1.1http://scripts.sil.org/OFLhttp://scripts.sil.org/OFLþ#T X  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a£„…½–膎‹©¤Šƒ“òóˆÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº    ýþ ÿøù !"#$%&'()*+,-./ú×0123456789:;<=>âã?@ABCDEFGHIJKLM°±NOPQRSTUVWûüäåXYZ[\]^_`abcdefghijklm»nopqæçrstuvwxyz{|}~€‚ƒ„¦…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶Øá·Ú¸¹º»¼½¾¿ÀÁÂÃÄÅÛÜÝàÙ߯ÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl¨mnopqrstuvwxyz{|}~Ÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘—’“”›•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòó²³ôõ¶·Äö´µÅ÷‚‡«øùúûüÆýþÿ¾¿¼     ÷ !"#$%&'(Œ)*+,-./0123456789:˜;š™ï<Ã¥’=>œ§?”•@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|¹}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´ÀÁµ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 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 Yuni00A0uni00AD overscoremu1 middot.001AmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5uni01E6uni01E7uni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236uni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EAuni02EBuni02ECuni02EDuni02EEuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FF gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035Auni035Buni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375uni037Auni037Buni037Cuni037Duni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdanuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0uni03D1uni03D2uni03D3uni03D4uni03D5uni03D6uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8 afii10846uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni051Auni051Buni051Cuni051Duni0591uni0592uni0593uni0594uni0595uni0596uni0597uni0598uni0599uni059Auni059Buni059Cuni059Duni059Euni059Funi05A0uni05A1uni05A2uni05A3uni05A4uni05A5uni05A6uni05A7uni05A8uni05A9uni05AAuni05ABuni05ACuni05ADuni05AEuni05AFsheva hatafsegol hatafpatah hatafqamatshiriqtseresegolpatahqamatsholamuni05BAqubutsdageshmetegmaqafrafepaseqshindotsindotsofpasuq upper_dotlowerdotuni05C6 qamatsqatanalefbetgimeldalethevavzayinhettetyodfinalkafkaflamedfinalmemmemfinalnunnunsamekhayinfinalpepe finaltsaditsadiqofreshshintavvavvavvavyodyodyodgeresh gershayimuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D6Buni1D6Cuni1D6Duni1D6Euni1D6Funi1D70uni1D71uni1D72uni1D73uni1D74uni1D75uni1D76uni1D77uni1D78uni1D79uni1D7Auni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D80uni1D81uni1D82uni1D83uni1D84uni1D85uni1D86uni1D87uni1D88uni1D89uni1D8Auni1D8Buni1D8Cuni1D8Duni1D8Euni1D8Funi1D90uni1D91uni1D92uni1D93uni1D94uni1D95uni1D96uni1D97uni1D98uni1D99uni1D9Auni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC0uni1DC1uni1DC2uni1DC3uni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1DCAuni1DFEuni1DFFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9E Adotbelow adotbelow Ahookabove ahookaboveAcircumflexacuteacircumflexacuteAcircumflexgraveacircumflexgraveAcircumflexhookaboveacircumflexhookaboveAcircumflextildeacircumflextildeAcircumflexdotbelowacircumflexdotbelow Abreveacute abreveacute Abrevegrave abrevegraveAbrevehookaboveabrevehookabove Abrevetilde abrevetildeAbrevedotbelowabrevedotbelow Edotbelow edotbelow Ehookabove ehookaboveEtildeetildeEcircumflexacuteecircumflexacuteEcircumflexgraveecircumflexgraveEcircumflexhookaboveecircumflexhookaboveEcircumflextildeecircumflextildeEcircumflexdotbelowecircumflexdotbelow Ihookabove ihookabove Idotbelow idotbelow Odotbelow odotbelow Ohookabove ohookaboveOcircumflexacuteocircumflexacuteOcircumflexgraveocircumflexgraveOcircumflexhookaboveocircumflexhookaboveOcircumflextildeocircumflextildeOcircumflexdotbelowocircumflexdotbelow Ohornacute ohornacute Ohorngrave ohorngraveOhornhookaboveohornhookabove Ohorntilde ohorntilde Ohorndotbelow ohorndotbelow Udotbelow udotbelow Uhookabove uhookabove Uhornacute uhornacute Uhorngrave uhorngraveUhornhookaboveuhornhookabove Uhorntilde uhorntilde Uhorndotbelow uhorndotbelowYgraveygrave Ydotbelow ydotbelow Yhookabove yhookaboveYtildeytildeuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni200Cuni200Duni200Euni200Funi2012uni2015 underscoredbl quotereverseduni201Funi202Auni202Buni202Cuni202Duni202Eminuteseconduni2034 exclamdbl radicalexuni205Euni206Auni206Buni206Cuni206Duni206Euni206F nsuperioruni2090uni2091uni2092uni2093uni2094uni20A0uni20A1uni20A2lirauni20A5uni20A6pesetauni20A8uni20A9sheqeldongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20F0uni2105uni2113uni2116uni2117Ohm estimateduni214Duni214Eonethird twothirds oneeighth threeeighths fiveeighths seveneighthsuni2184 arrowleftarrowup arrowright arrowdown arrowboth arrowupdn arrowupdnbseuni2206uni2215 orthogonal intersection equivalencehouse revlogicalnot integraltp integralbtuni2500uni2502uni250Cuni2510uni2514uni2518uni251Cuni2524uni252Cuni2534uni253Cuni2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cupblockdnblockblocklfblockrtblockltshadeshadedkshade filledboxuni25A1uni25AAuni25AB filledrecttriaguptriagrttriagdntriaglfcircleuni25CCuni25CF invbullet invcircle openbullet smileface invsmilefacesunfemalemalespadeclubheartdiamond musicalnotemusicalnotedbluni266Funi2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2E17uniA717uniA718uniA719uniA71AuniA71BuniA71CuniA71DuniA71EuniA71FuniA720uniA721uniA788uniA789uniA78AuniA78BuniA78CuniFB1DuniFB1E yodyod_patahalternativeayinalefwide daletwidehewidekafwide lamedwide finalmemwidereshwidetavwide alt_plussign shinshindot shinsindotshindageshshindotshindageshsindot alefpatah alefqamats alefmapiq betdagesh gimeldagesh daletdageshhedagesh vavdagesh zayindagesh tetdagesh yoddageshfinalkafdagesh kafdagesh lameddagesh memdagesh nundagesh samekhdagesh finalpedageshpedagesh tsadidagesh qofdagesh reshdagesh shindagesh tavdageshvavholambetrafekafrafeperafe aleflameduniFE20uniFE21uniFE22uniFE23undercommaaccent cyrillicbrevecaroncommaaccentcommaaccentrotatedotlessj onefraction twofraction threefraction fourfraction fivefraction sevenfraction eightfraction dotbelow.alt1hookabove.alt4 dotlessi.alt1uni03080304.capuni03080301.capuni0308030C.capuni03080300.capuni03070304.capuni03030304.capcyrillic_otmark breve.cyruni03040300.capuni03040301.capuni03030301.capuni03030308.capuni03010307.capuni030C0307.capuni03040308.cap bari.dotlessuni03B1030403130300uni03B1030403130301uni03B1030403140300uni03B1030403140301uni03B1030603130300uni03B1030603130301uni03B1030603140300uni03B1030603140301uni03B9030403130300uni03B9030403130301uni03B9030403140300uni03B9030403140301uni03B9030603130300uni03B9030603130301uni03B9030603140300uni03B9030603140301uni03C5030403130300uni03C5030403130301uni03C5030403140300uni03C5030403140301uni03C5030603130300uni03C5030603130301uni03C5030603140300uni03C5030603140301uni03B9030803040300uni03B9030803040301uni03B9030803060300uni03B9030803060301uni03C5030803040300uni03C5030803040301uni03C5030803060300uni03C5030803060301 dottediacuteEng.alt1Eng.alt2Eng.alt3zero.altone.alttwo.alt three.altfour.altfive.altsix.alt seven.alt eight.altnine.altcircumflexacutecircumflexgravecircumflexhookcircumflextilde breveacute brevegrave brevehook brevetildecircumflexacute.lccircumflexgrave.lccircumflexhook.lccircumflextilde.lc breveacute.lc brevegrave.lc brevehook.lc brevetilde.lcgrave.ucacute.uc circumflex.uccaron.uc dieresis.uctilde.uchungarumlaut.ucbreve.ucmacron_referredlamedholamdagesh lamedholamfinalkafqamats finalkafshevaaleflamedhatafsegolaleflamedsegolaleflamedtserealternativelamed alefdagesh uni05B105BD uni05B205BD uni05B305BDS_BEÿÿÌ=¢ÏÈCz§Ì‘ÿ”x€ÇÈôõõöö÷÷øüýýþþÿ³´´µßààá N O Q R S T V W W .Xcyrlhebrÿÿÿÿmark .6>FNVdr€Ž–ž¦¼Üæîöþ𶆠FrÄh¬$¦(’ä6ˆÌNÆH²jÂ0Šä > ˜ ò!L !ˆ!¸!è""H"x"¨"Ø##8#h#˜#È#Ø$$*&Ö*–-Ò1’1š1¶–nœ L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\––È–––g–Ü––––––ÿâ––ÿâ–––––––––––ÿÄ––x–x–x–d¡x–––––ÿâ––––ÿÄ–ÿ`–ÿÄ–ÿ`–––––È–––Ì–Ü––Ì–––ÿâ–ÿâ––––––––ÿÄ––Ì––––ÿ`–ÿ`–––ÿzzµµ·¾ Àß( K NHðfj" è–zøf–ÆžÌ &,28>DJPV\bhntz€†ŒfXfX@¼³AÁ2¼2z2zfX&<ÂXfX¸€®ÐþX¢”®Ç®Ç z·¸¹º»½¾ÀÁóf¼öÎ L28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼fFf¤ôFô¤ÌF̤F¤NFN¤fFf¤fFf¤NFN¤NFN¤fFf¤àFà¤ôFô¤XFX¤NFN¤¼F¼¤fFf¤&F&¤NFN¤pFp¤DFD¤DFD¤XFX¤DFD¤0F0¤ÂF¤fFf¤NFN¤fFf¤fFf¤fFf¤fFf¤fF¤fFf¤F¤NFN¤ôFô¤XFX¤NFN¤ÂF¤NFN¤ŠFø¤ŠFø¤ŠFø¤ŠFø¤fF”¤fF”¤fF”¤ôFô¤ôFh¤F¤XFX¤¼F¤ŠF¤¤fF”¤ÐF¤ôF¤ÖF¤XFX¤ŠF ¤F@¤fF€¤DFX¤DFX¤DF¤0F0¤àF¤¤ŠFø¤&F¼¤f¤¤ô¤ô¤&¤Ì¤0¤0¤îFX¤îFX¤ÂF¤ÂF¤ÿzzµµ·¾ Àß( K NHÉÊËÌÎÏÓÕÖØßâãæöû´FLRX^djpv|‚ˆŽ”š ¦fFfFfFfFfFfFfFfFfFfFfFfFfFfnfFffšöÎ. L28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼NN00ffMMffff\fffffff¤¤ôô¤¤ffff2fDDXX””¸¸::ÀþDD\l„ÂXXffffffffXfNNMMffôô¤¤ffÂÂffÐÐÐÐÐÐÐÐh”h”””00ÂÂ>0””,,¨¨¤TÌ̤¤¨¨hh¨¨ôôXXXX\l4ôÐД”f00ÌÌXX¤¤¤¤¤T¤Tÿzzµµ·¾ Àß( K NHÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôüþ T U Vjpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôúffffffffffffffffffffff2ffff2ö´ÿzz·¾ÉÊËÌÎÏÓÕÖØßâãæ<ö´ÉÊËÌÎÏÓÕÖØßâãæÿzz·¾2ö´µµÀß K N!ÉÊËÌÎÏÓÕÖØßâãæ<ö´ÉÊËÌÎÏÓÕÖØßâãæµµÀß K N!J`ÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vÿzz·¾ ÈÍÒÙÚÛÜÝÞáJ`ÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vÿzz·¾çèéêëìíîïòôþ T U VJ`ÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U VµµÀß K N!çèéêëìíîïòôþ T U VJ`ÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U VµµÀß K N! ÈÍÒÙÚÛÜÝÞá4<ÉÊËÌÎÏÓÕÖØßâãæö´ÿzz·¾4JÉÊËÌÎÏÓÕÖØßâãæÿzz·¾ö´4<ÉÊËÌÎÏÓÕÖØßâãæö´µµÀß K N!4JÉÊËÌÎÏÓÕÖØßâãæµµÀß K N!ö´JlÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vçèéêëìíîïòôþ T U Vÿzz·¾JbÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U V ÈÍÒÙÚÛÜÝÞáÿzz·¾JlÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vçèéêëìíîïòôþ T U VµµÀß K N!JbÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U V ÈÍÒÙÚÛÜÝÞáµµÀß K N!–n  L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\ðFðFðFðFðFvFÂFðFðFvFðFðFFðFŒFvFÂFÈFÈFðFðFðFðFðFðFðFðF^F^F^FðF^FðFðFðFðFFðFðFðFðFFðFFðFðFðFðFðFðFðFÐFFðFÐFðFðFFŒFÂFÈFðFðFðFðFðFðFðFàFðFðFðFªªðFðFÿzzµµ·¾ Àß( K NHÐàå FRFF–nž L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\F„FŠF„FèFfFÚFèFèFfF F FpFèFèFfFîFèFèFèFèF¶F„FèF\FF¶F4F4F4FèFRFF„FèF F FèF\F¶FFFFFFFF„FŠF„FèFŠFŠFèFžF F F„FèFîFèFèFèF„FèF\FF¶FŠF„F„F¶F¶F¶F F Fÿzzµµ·¾ Àß( K NHÔ× ¼F|F–nž L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\èH ø¢þ¢¢L> ¢¢ Ú¢¢°„äzX ¢˜   è>èø¢  ¢f„¢¢¢¢èèèH ø¢v¢vL> ¢Ú¢°„„X ¢¢vH>„¼¼LLÿzzµµ·¾ Àß( K NHÑä Å(à >Ñäçèéêëìíîïòôþ T U V ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäëç ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäôç ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäôë ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäôì ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäôî ¸»½ÈÉËÌÎÑÓÙÜ K L$*Ñäôï ¸»½ÈÉËÌÎÑÓÙÜ K L"Ñäô ¸»½ÈÉËÌÎÑÓÙÜ K L$*ÈÍÚÛÜôôë$*ÈÍÚÛÜôÚì$*ÈÍÚÛÜôôì$*ÈÍÚÛÜôÚí$*ÈÍÚÛÜôÑí$*ÈÍÚÛÜôÍî$*ÈÍÚÛÜôçï$*ÈÍÚÛÜôëï$*ÈÍÚÛÜôÍï$*ÈÍÚÛÜôÑï$*ÈÍÚÛÜôÚï$*ÈÍÚÛÜôÛï$*ÈÍÚÛÜôôï"(ÛÜð"(ÛÜó–nž L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\–è– –˜–è–„–„–è–8–„–è–è–è–è––„–„–è–è–è–è–Ô–Ô–è–„–L–è–p–p–p–è–p––„–è–è–è–è–è–è–Ü–L–Ü–L––––è– –˜–è–¶–˜––¶–è–è–è––„–è–è–è–Ô––è–L––è–è––è–~–p–è–è–ÿzzµµ·¾ Àß( K NHö´ f–f––nÌ L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\ffffffffff,f¤ffffff,ffffffffffffffff¤fffffffRRffffffff¼,f¤fff,ffffffffff¤¤,,ÿzzµµ·¾ Àß( K NHÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vflrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðö:::::::::::::::::::::Üúú–n¶ L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\fFDFDFDFfFfFfFfFfFfFDFfF4FfFfFfFfFfFfFfFfFfFfFfFDFfFfFfFfFfFfFfFfFfFfFfF4FfFfFfFfF¼FfF¼FfFfFfFfFfFfFfFfFfFfFfFFfF4FfFfFfFfFfFfFfFfFfFfFfFFÂFÂFÔFÔFfFfFÿzzµµ·¾ Àß( K NHÉÊËÌÎÏÓÕÖØßâãæ:@FLRX^djpv|‚ˆpFpFpFpFpF¬FpFÊF¶FpFpFpFpFpn–nÌ L𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\fffffffffffffffôffffffÈffffffffffffffffffffÂÂffffffffffffffffffÈfffffffffffÿzzµµ·¾ Àß( K NHÈÍÒÙÚÛÜÝÞáçèéêëìíîïòôþ T U Vflrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöppppppp¶pppèÊÊppppppppppp@ÑäýäýäýäýäýäþpÈÍÚÛÜô ÜÈÿ8Û >fcyrlhebr&MKD SRB ÿÿÿÿccmpdliglocl" $,(,<þ8váà ÿœ8BLV`jt~ˆš¤®ÀÚä (2<FP’ Tô Uô Vô SóÇóÈóÉóÊó ÜðËóÌóÍó Îó³ë Nç MïÏóÐó Kóð LðÑóÒóÓóÔóÕóÖó×óØóÙó (06<ÃùóÃóùÂøóÂóøÚóÁùÀøÛóèêÿ   ",ÿ îïöÿzz·¾J",6@ ÅïÄîÝöÞößöµîÿ kitty-0.15.0/kitty_tests/__init__.py000066400000000000000000000046441356737523400174670ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal from unittest import TestCase from kitty.config import Options, defaults, merge_configs from kitty.fast_data_types import set_options from kitty.fast_data_types import LineBuf, Cursor, Screen, HistoryBuf class Callbacks: def __init__(self): self.clear() def write(self, data): self.wtcbuf += data def title_changed(self, data): self.titlebuf += data def icon_changed(self, data): self.iconbuf += data def set_dynamic_color(self, code, data): self.colorbuf += data or '' def set_color_table_color(self, code, data): self.ctbuf += '' def request_capabilities(self, q): from kitty.terminfo import get_capabilities c = get_capabilities(q) self.write(c.encode('ascii')) def use_utf8(self, on): self.iutf8 = on def clear(self): self.wtcbuf = b'' self.iconbuf = self.titlebuf = self.colorbuf = self.ctbuf = '' self.iutf8 = True def filled_line_buf(ynum=5, xnum=5, cursor=Cursor()): ans = LineBuf(ynum, xnum) cursor.x = 0 for i in range(ynum): t = ('{}'.format(i)) * xnum ans.line(i).set_text(t, 0, xnum, cursor) return ans def filled_cursor(): ans = Cursor() ans.bold = ans.italic = ans.reverse = ans.strikethrough = ans.dim = True ans.fg = 0x101 ans.bg = 0x201 ans.decoration_fg = 0x301 return ans def filled_history_buf(ynum=5, xnum=5, cursor=Cursor()): lb = filled_line_buf(ynum, xnum, cursor) ans = HistoryBuf(ynum, xnum) for i in range(ynum): ans.push(lb.line(i)) return ans class BaseTest(TestCase): ae = TestCase.assertEqual maxDiff = 2000 def create_screen(self, cols=5, lines=5, scrollback=5, cell_width=10, cell_height=20, options=None): if options is None: options = {'scrollback_pager_history_size': 1024} options = Options(merge_configs(defaults._asdict(), options)) set_options(options) c = Callbacks() return Screen(c, lines, cols, scrollback, cell_width, cell_height, 0, c) def assertEqualAttributes(self, c1, c2): x1, y1, c1.x, c1.y = c1.x, c1.y, 0, 0 x2, y2, c2.x, c2.y = c2.x, c2.y, 0, 0 try: self.assertEqual(c1, c2) finally: c1.x, c1.y, c2.x, c2.y = x1, y1, x2, y2 kitty-0.15.0/kitty_tests/bench_scrollback.py000077500000000000000000000051131356737523400212010ustar00rootroot00000000000000#!/usr/bin/env python3 from time import clock_gettime, CLOCK_MONOTONIC, sleep from argparse import ArgumentParser from random import Random from string import printable import sys def main(): parser = ArgumentParser(description='Generate text') parser.add_argument('--freq', default=10000, type=int, help='Number of lines to try to write per second. Will warn if not attained.') parser.add_argument('--color', action='store_true', help='Add color to the output') parser.add_argument('--unicode', action='store_true', help='Mix in some unicode characters') parser.add_argument('--length', default=50, type=int, help='Average line length') parser.add_argument('--lengthvar', default=0.3, type=float, help='Variation for line length, in ratio of line length') parser.add_argument('--emptylines', default=0.1, type=float, help='ratio of empty lines') parser.add_argument('--linesperwrite', default=1, type=int, help='number of lines to repeat/write at a time') parser.add_argument('--patterns', default=1000, type=int, help='number of different pattern to alternate') parser.add_argument('--seed', default=sys.argv[0], type=str, help='seed to get different output') args = parser.parse_args() rng = Random() rng.seed(args.seed) characters = [c for c in printable if c not in '\r\n\x0b\x0c'] if args.color: characters += ['\x1b[91m', '\x1b[0m', '\x1b[1;32m', '\x1b[22m', '\x1b[35m'] if args.unicode: characters += [u'æ—¥', u'本', u'💜', u'☃', u'🎩', u'ðŸ€', u'ã€'] patterns = [] for _ in range(0, args.patterns): s = "" for _ in range(0, args.linesperwrite): cnt = int(rng.gauss(args.length, args.length * args.lengthvar)) if cnt < 0 or rng.random() < args.emptylines: cnt = 0 s += "".join(rng.choices(characters, k=cnt)) + '\n' patterns += [s] time_per_print = args.linesperwrite / args.freq t1 = clock_gettime(CLOCK_MONOTONIC) cnt = 0 while True: sys.stdout.write(patterns[rng.randrange(0, args.patterns)]) sys.stdout.flush() cnt += 1 t2 = clock_gettime(CLOCK_MONOTONIC) if t2 - t1 < cnt * time_per_print: sleep(cnt * time_per_print - (t2 - t1)) t1 = t2 cnt = 0 elif cnt >= 100: print("Cannot print fast enough, printed %d lines in %f seconds instead of %f seconds target" % (cnt * args.linesperwrite, t2 - t1, cnt * time_per_print)) break else: cnt += 1 if __name__ == '__main__': main() kitty-0.15.0/kitty_tests/choose.py000066400000000000000000000064401356737523400172040ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPLv3 Copyright: 2019, Kovid Goyal import random import string from . import BaseTest def run(input_data, query, **kw): kw['threads'] = kw.get('threads', 1) mark = kw.pop('mark', False) from kittens.choose.main import match mark_before = mark_after = '' if mark: if mark is True: mark_before, mark_after = '\033[32m', '\033[39m' else: mark_before = mark_after = mark kw['mark_before'], kw['mark_after'] = mark_before, mark_after return match(input_data, query, **kw) class TestMatcher(BaseTest): def run_matcher(self, *args, **kwargs): result = run(*args, **kwargs) return result def basic_test(self, inp, query, out, **k): result = self.run_matcher(inp, query, **k) if out is not None: if hasattr(out, 'splitlines'): out = list(filter(None, out.split(k.get('delimiter', '\n')))) self.assertEqual(list(out), result) return out def test_filtering(self): ' Non matching entries must be removed ' self.basic_test('test\nxyz', 'te', 'test') self.basic_test('abc\nxyz', 'ba', '') self.basic_test('abc\n123', 'abc', 'abc') def test_case_insensitive(self): self.basic_test('test\nxyz', 'Te', 'test') self.basic_test('test\nxyz', 'XY', 'xyz') self.basic_test('test\nXYZ', 'xy', 'XYZ') self.basic_test('test\nXYZ', 'mn', '') def test_marking(self): ' Marking of matched characters ' self.basic_test( 'test\nxyz', 'ts', '\x1b[32mt\x1b[39me\x1b[32ms\x1b[39mt', mark=True) def test_positions(self): ' Output of positions ' self.basic_test('abc\nac', 'ac', '0,1:ac\n0,2:abc', positions=True) def test_delimiter(self): ' Test using a custom line delimiter ' self.basic_test('abc\n21ac', 'ac', 'ac1abc\n2', delimiter='1') def test_scoring(self): ' Scoring algorithm ' # Match at start self.basic_test('archer\nelementary', 'e', 'elementary\narcher') # Match at level factor self.basic_test('xxxy\nxx/y', 'y', 'xx/y\nxxxy') # CamelCase self.basic_test('xxxy\nxxxY', 'y', 'xxxY\nxxxy') # Total length self.basic_test('xxxya\nxxxy', 'y', 'xxxy\nxxxya') # Distance self.basic_test('abbc\nabc', 'ac', 'abc\nabbc') # Extreme chars self.basic_test('xxa\naxx', 'a', 'axx\nxxa') # Highest score self.basic_test('xa/a', 'a', 'xa/|a|', mark='|') def test_threading(self): ' Test matching on a large data set with different number of threads ' alphabet = string.ascii_lowercase + string.ascii_uppercase + string.digits def random_word(): sz = random.randint(2, 10) return ''.join(random.choice(alphabet) for x in range(sz)) words = [random_word() for i in range(400)] def random_item(): num = random.randint(2, 7) return '/'.join(random.choice(words) for w in range(num)) data = '\n'.join(random_item() for x in range(25123)) for threads in range(4): self.basic_test(data, 'foo', None, threads=threads) kitty-0.15.0/kitty_tests/datatypes.py000066400000000000000000000427341356737523400177300ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import os import tempfile from kitty.config import build_ansi_color_table, defaults from kitty.fast_data_types import ( REVERSE, ColorProfile, Cursor as C, HistoryBuf, LineBuf, parse_input_from_terminal, truncate_point_for_length, wcswidth, wcwidth ) from kitty.rgb import to_color from kitty.utils import is_path_in_temp_dir, sanitize_title from . import BaseTest, filled_cursor, filled_history_buf, filled_line_buf def create_lbuf(*lines): maxw = max(map(len, lines)) ans = LineBuf(len(lines), maxw) prev_full_length = False for i, l0 in enumerate(lines): ans.line(i).set_text(l0, 0, len(l0), C()) ans.set_continued(i, prev_full_length) prev_full_length = len(l0) == maxw return ans class TestDataTypes(BaseTest): def test_to_color(self): for x in 'xxx #12 #1234 rgb:a/b'.split(): self.assertIsNone(to_color(x)) def c(spec, r=0, g=0, b=0): self.ae(tuple(to_color(spec)), (r, g, b)) c('#eee', 0xee, 0xee, 0xee) c('#234567', 0x23, 0x45, 0x67) c('#abcabcdef', 0xab, 0xab, 0xde) c('rgb:e/e/e', 0xee, 0xee, 0xee) c('rgb:23/45/67', 0x23, 0x45, 0x67) c('rgb:abc/abc/def', 0xab, 0xab, 0xde) c('red', 0xff) def test_linebuf(self): old = filled_line_buf(2, 3, filled_cursor()) new = LineBuf(1, 3) new.copy_old(old) self.ae(new.line(0), old.line(1)) new.clear() self.ae(str(new.line(0)), '') old.set_attribute(REVERSE, False) for y in range(old.ynum): for x in range(old.xnum): l0 = old.line(y) c = l0.cursor_from(x) self.assertFalse(c.reverse) self.assertTrue(c.bold) self.assertFalse(old.is_continued(0)) old.set_continued(0, True) self.assertTrue(old.is_continued(0)) self.assertFalse(old.is_continued(1)) lb = filled_line_buf(5, 5, filled_cursor()) lb2 = LineBuf(5, 5) lb2.copy_old(lb) lb.index(0, 4) for i in range(0, 4): self.ae(lb.line(i), lb2.line(i + 1)) self.ae(lb.line(4), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.index(1, 3) self.ae(lb.line(0), lb2.line(0)) self.ae(lb.line(1), lb2.line(2)) self.ae(lb.line(2), lb2.line(3)) self.ae(lb.line(3), lb2.line(1)) self.ae(lb.line(4), lb2.line(4)) self.ae(lb.create_line_copy(1), lb2.line(2)) l2 = lb.create_line_copy(2) lb.copy_line_to(1, l2) self.ae(l2, lb2.line(2)) lb.clear_line(0) self.ae(lb.line(0), LineBuf(1, lb.xnum).create_line_copy(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.reverse_index(0, 4) self.ae(lb.line(0), lb2.line(4)) for i in range(1, 5): self.ae(lb.line(i), lb2.line(i - 1)) lb = filled_line_buf(5, 5, filled_cursor()) clb = filled_line_buf(5, 5, filled_cursor()) lb2 = LineBuf(1, 5) lb.insert_lines(2, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(3), clb.line(1)) self.ae(lb.line(4), clb.line(2)) self.ae(lb.line(1), lb2.line(0)) self.ae(lb.line(2), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(10, 0, lb.ynum - 1) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(10, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) for i in range(1, lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(1, 1, 3) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), lb2.line(0)) self.ae(lb.line(2), clb.line(1)) self.ae(lb.line(3), clb.line(2)) self.ae(lb.line(4), clb.line(4)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(2, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), clb.line(3)) self.ae(lb.line(2), clb.line(4)) self.ae(lb.line(3), lb2.line(0)) self.ae(lb.line(4), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(10, 0, lb.ynum - 1) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(10, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) for i in range(1, lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(1, 1, 3) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), clb.line(2)) self.ae(lb.line(2), clb.line(3)) self.ae(lb.line(3), lb2.line(0)) self.ae(lb.line(4), clb.line(4)) lb = filled_line_buf(5, 5, filled_cursor()) l0 = lb.line(0) l0.add_combining_char(1, '\u0300') l0.clear_text(1, 2) self.ae(str(l0), '0 00') self.assertEqualAttributes(l0.cursor_from(1), l0.cursor_from(0)) lb = filled_line_buf(10, 10, filled_cursor()) lb.clear() lb2 = LineBuf(lb.ynum, lb.ynum) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(i)) def test_line(self): lb = LineBuf(2, 3) for y in range(lb.ynum): line = lb.line(y) self.ae(str(line), '') for x in range(lb.xnum): self.ae(line[x], '\0') with self.assertRaises(IndexError): lb.line(lb.ynum) with self.assertRaises(IndexError): lb.line(0)[lb.xnum] l0 = lb.line(0) l0.set_text(' ', 0, len(' '), C()) l0.add_combining_char(0, '\u0300') self.ae(l0[0], ' \u0300') l0.add_combining_char(0, '\U000e0100') self.ae(l0[0], ' \u0300\U000e0100') l0.add_combining_char(0, '\u0302') self.ae(l0[0], ' \u0300\u0302') self.ae(l0[1], '\0') self.ae(str(l0), ' \u0300\u0302') t = 'Testing with simple text' lb = LineBuf(2, len(t)) l0 = lb.line(0) l0.set_text(t, 0, len(t), C()) self.ae(str(l0), t) l0.set_text('a', 0, 1, C()) self.assertEqual(str(l0), 'a' + t[1:]) c = C(3, 5) c.bold = c.italic = c.reverse = c.strikethrough = c.dim = True c.fg = c.bg = c.decoration_fg = 0x0101 self.ae(c, c) c2, c3 = c.copy(), c.copy() self.ae(repr(c), repr(c2)) self.ae(c, c2) c2.bold = False self.assertNotEqual(c, c2) l0.set_text(t, 0, len(t), C()) l0.apply_cursor(c2, 3) self.assertEqualAttributes(c2, l0.cursor_from(3)) l0.apply_cursor(c2, 0, len(l0)) for i in range(len(l0)): self.assertEqualAttributes(c2, l0.cursor_from(i)) l0.apply_cursor(c3, 0) self.assertEqualAttributes(c3, l0.cursor_from(0)) l0.copy_char(0, l0, 1) self.assertEqualAttributes(c3, l0.cursor_from(1)) t = '0123456789' lb = LineBuf(1, len(t)) l3 = lb.line(0) l3.set_text(t, 0, len(t), C()) self.ae(t, str(l3)) l3.right_shift(4, 2) self.ae('0123454567', str(l3)) l3.set_text(t, 0, len(t), C()) l3.right_shift(0, 0) self.ae(t, str(l3)) l3.right_shift(0, 1) self.ae(str(l3), '0' + t[:-1]) l3.set_text(t, 0, len(t), C()) l3.left_shift(0, 2) self.ae(str(l3), t[2:] + '89') l3.set_text(t, 0, len(t), C()) l3.left_shift(7, 3) self.ae(str(l3), t) l3.set_text(t, 0, len(t), C()) q = C() q.bold = q.italic = q.reverse = q.strikethrough = c.dim = True q.decoration = 2 c = C() c.x = 3 l3.set_text('axyb', 1, 2, c) self.ae(str(l3), '012xy56789') l3.set_char(0, 'x', 1, q) self.assertEqualAttributes(l3.cursor_from(0), q) def test_url_at(self): def create(t): lb = create.lb = LineBuf(1, len(t)) lf = lb.line(0) lf.set_text(t, 0, len(t), C()) return lf for trail in '.,]>)\\': lx = create("http://xyz.com" + trail) self.ae(lx.url_end_at(0), len(lx) - 2) l0 = create("ftp://abc/") self.ae(l0.url_end_at(0), len(l0) - 1) l2 = create("http://-abcd] ") self.ae(l2.url_end_at(0), len(l2) - 3) l3 = create("http://ab.de ") self.ae(l3.url_start_at(4), 0) self.ae(l3.url_start_at(5), 0) def lspace_test(n, scheme='http'): lf = create(' ' * n + scheme + '://acme.com') for i in range(0, n): self.ae(lf.url_start_at(i), len(lf)) for i in range(n, len(lf)): self.ae(lf.url_start_at(i), n) for i in range(7): for scheme in 'http https ftp file'.split(): lspace_test(i, scheme) l3 = create('b https://testing.me a') for s in (0, 1, len(l3) - 1, len(l3) - 2): self.ae(l3.url_start_at(s), len(l3), 'failed with start at: %d' % s) for s in range(2, len(l3) - 2): self.ae(l3.url_start_at(s), 2, 'failed with start at: %d (%s)' % (s, str(l3)[s:])) def no_url(t): lf = create(t) for s in range(len(lf)): self.ae(lf.url_start_at(s), len(lf)) no_url('https:// testing.me a') no_url('h ttp://acme.com') no_url('http: //acme.com') no_url('http:/ /acme.com') l4 = create(' xxxxxtekljhgdkjgd') self.ae(l4.url_end_at(0), 0) def rewrap(self, lb, lb2): hb = HistoryBuf(lb2.ynum, lb2.xnum) cy = lb.rewrap(lb2, hb) return hb, cy[1] def test_rewrap_simple(self): ' Same width buffers ' lb = filled_line_buf(5, 5) lb2 = LineBuf(lb.ynum, lb.xnum) self.rewrap(lb, lb2) for i in range(lb.ynum): self.ae(lb2.line(i), lb.line(i)) lb2 = LineBuf(8, 5) cy = self.rewrap(lb, lb2)[1] self.ae(cy, 5) for i in range(lb.ynum): self.ae(lb2.line(i), lb.line(i)) empty = LineBuf(1, lb2.xnum) for i in range(lb.ynum, lb2.ynum): self.ae(str(lb2.line(i)), str(empty.line(0))) lb2 = LineBuf(3, 5) cy = self.rewrap(lb, lb2)[1] self.ae(cy, 3) for i in range(lb2.ynum): self.ae(lb2.line(i), lb.line(i + 2)) self.assertFalse(lb.dirty_lines()) self.ae(lb2.dirty_lines(), list(range(lb2.ynum))) def line_comparison(self, buf, *lines): for i, l0 in enumerate(lines): l2 = buf.line(i) self.ae(l0, str(l2)) def line_comparison_rewrap(self, lb, *lines): lb2 = LineBuf(len(lines), max(map(len, lines))) self.rewrap(lb, lb2) self.line_comparison(lb2, *lines) return lb2 def assertContinued(self, lb, *vals): self.ae(list(vals), [lb.is_continued(i) for i in range(len(vals))]) def test_rewrap_wider(self): ' New buffer wider ' lb = create_lbuf('0123 ', '56789') lb2 = self.line_comparison_rewrap(lb, '0123 5', '6789', '') self.assertContinued(lb2, False, True) self.ae(lb2.dirty_lines(), [0, 1]) lb = create_lbuf('12', 'abc') lb2 = self.line_comparison_rewrap(lb, '12', 'abc') self.assertContinued(lb2, False, False) def test_rewrap_narrower(self): ' New buffer narrower ' lb = create_lbuf('123', 'abcde') lb2 = self.line_comparison_rewrap(lb, '123', 'abc', 'de') self.assertContinued(lb2, False, False, True) lb = create_lbuf('123 ', 'abcde') lb2 = self.line_comparison_rewrap(lb, '123', ' a', 'bcd', 'e') self.assertContinued(lb2, False, True, True, True) def test_utils(self): def w(x): return wcwidth(ord(x)) self.ae(tuple(map(w, 'a1\0コニム✔')), (1, 1, 0, 2, 2, 2, 1, 1)) self.ae(wcswidth('\u2716\u2716\ufe0f\U0001f337'), 5) self.ae(wcswidth('\033a\033[2mb'), 2) self.ae(wcswidth('\u25b6\ufe0f'), 2) self.ae(wcswidth('\U0001f610\ufe0e'), 1) # Regional indicator symbols (unicode flags) are defined as having # Emoji_Presentation so must have width 2 self.ae(tuple(map(w, '\U0001f1ee\U0001f1f3')), (2, 2)) tpl = truncate_point_for_length self.ae(tpl('abc', 4), 3) self.ae(tpl('abc', 2), 2) self.ae(tpl('abc', 0), 0) self.ae(tpl('a\U0001f337', 2), 1) self.ae(tpl('a\U0001f337', 3), 2) self.ae(tpl('a\U0001f337b', 4), 3) self.ae(sanitize_title('a\0\01 \t\n\f\rb'), 'a b') self.ae(tpl('a\x1b[31mbc', 2), 7) def tp(*data, leftover='', text='', csi='', apc='', ibp=False): text_r, csi_r, apc_r, rest = [], [], [], [] left = '' in_bp = ibp def on_csi(x): nonlocal in_bp if x == '200~': in_bp = True elif x == '201~': in_bp = False csi_r.append(x) for d in data: left = parse_input_from_terminal(text_r.append, rest.append, on_csi, rest.append, rest.append, apc_r.append, left + d, in_bp) self.ae(left, leftover) self.ae(text, ' '.join(text_r)) self.ae(csi, ' '.join(csi_r)) self.ae(apc, ' '.join(apc_r)) self.assertFalse(rest) tp('a\033[200~\033[32mxy\033[201~\033[33ma', text='a \033[32m xy a', csi='200~ 201~ 33m') tp('abc', text='abc') tp('a\033[38:5:12:32mb', text='a b', csi='38:5:12:32m') tp('a\033_x,;(\033\\b', text='a b', apc='x,;(') tp('a\033', '[', 'mb', text='a b', csi='m') tp('a\033[', 'mb', text='a b', csi='m') tp('a\033', '_', 'x\033', '\\b', text='a b', apc='x') tp('a\033_', 'x', '\033', '\\', 'b', text='a b', apc='x') for prefix in ('/tmp', tempfile.gettempdir()): for path in ('a.png', 'x/b.jpg', 'y/../c.jpg'): self.assertTrue(is_path_in_temp_dir(os.path.join(prefix, path))) for path in ('/home/xy/d.png', '/tmp/../home/x.jpg'): self.assertFalse(is_path_in_temp_dir(os.path.join(path))) def test_color_profile(self): c = ColorProfile() c.update_ansi_color_table(build_ansi_color_table()) for i in range(8): col = getattr(defaults, 'color{}'.format(i)) self.assertEqual(c.as_color(i << 8 | 1), (col[0], col[1], col[2])) self.ae(c.as_color(255 << 8 | 1), (0xee, 0xee, 0xee)) def test_historybuf(self): lb = filled_line_buf() hb = HistoryBuf(5, 5) hb.push(lb.line(1)) hb.push(lb.line(2)) self.ae(hb.count, 2) self.ae(hb.line(0), lb.line(2)) self.ae(hb.line(1), lb.line(1)) hb = filled_history_buf() self.ae(str(hb.line(0)), '4' * hb.xnum) self.ae(str(hb.line(4)), '0' * hb.xnum) hb.push(lb.line(2)) self.ae(str(hb.line(0)), '2' * hb.xnum) self.ae(str(hb.line(4)), '1' * hb.xnum) hb = large_hb = HistoryBuf(3000, 5) c = filled_cursor() for i in range(3000): line = lb.line(1) t = str(i).ljust(5) line.set_text(t, 0, 5, c) hb.push(line) for i in range(3000): self.ae(str(hb.line(i)).rstrip(), str(3000 - 1 - i)) # rewrap hb = filled_history_buf(5, 5) hb2 = HistoryBuf(hb.ynum, hb.xnum) hb.rewrap(hb2) for i in range(hb.ynum): self.ae(hb2.line(i), hb.line(i)) hb2 = HistoryBuf(8, 5) hb.rewrap(hb2) for i in range(hb.ynum): self.ae(hb2.line(i), hb.line(i)) for i in range(hb.ynum, hb2.ynum): with self.assertRaises(IndexError): hb2.line(i) hb2 = HistoryBuf(3, 5) hb.rewrap(hb2) for i in range(hb2.ynum): self.ae(hb2.line(i), hb.line(i)) self.ae(hb2.dirty_lines(), list(range(hb2.ynum))) hb = filled_history_buf(5, 5) hb2 = HistoryBuf(hb.ynum, hb.xnum * 2) hb.rewrap(hb2) hb3 = HistoryBuf(hb.ynum, hb.xnum) hb2.rewrap(hb3) for i in range(hb.ynum): self.ae(hb.line(i), hb3.line(i)) hb2 = HistoryBuf(hb.ynum, hb.xnum) large_hb.rewrap(hb2) hb2 = HistoryBuf(large_hb.ynum, large_hb.xnum) large_hb.rewrap(hb2) def test_ansi_repr(self): lb = filled_line_buf() l0 = lb.line(0) self.ae(l0.as_ansi(), '00000') a = [] lb.as_ansi(a.append) self.ae(a, [str(lb.line(i)) + '\n' for i in range(lb.ynum)]) l2 = lb.line(0) c = C() c.bold = c.italic = c.reverse = c.strikethrough = c.dim = True c.fg = (4 << 8) | 1 c.bg = (1 << 24) | (2 << 16) | (3 << 8) | 2 c.decoration_fg = (5 << 8) | 1 l2.set_text('1', 0, 1, c) self.ae(l2.as_ansi(), '\x1b[1;2;3;7;9;34;48:2:1:2:3;58:5:5m' '1' '\x1b[22;23;27;29;39;49;59m' '0000') lb = filled_line_buf() for i in range(lb.ynum): lb.set_continued(i, True) a = [] lb.as_ansi(a.append) self.ae(a, [str(lb.line(i)) for i in range(lb.ynum)]) hb = filled_history_buf(5, 5) a = [] hb.as_ansi(a.append) self.ae(a, [str(hb.line(i)) + '\n' for i in range(hb.count - 1, -1, -1)]) kitty-0.15.0/kitty_tests/diff.py000066400000000000000000000034031356737523400166300ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from . import BaseTest class TestDiff(BaseTest): def test_changed_center(self): from kittens.diff.diff_speedup import changed_center for left, right, prefix, suffix in [ ('abc', 'def', '', ''), ('', 'def', '', ''), ('abc', '', '', ''), ('abc', 'abc', 'abc', ''), ('abc', 'abcdef', 'abc', ''), ('aa111bb', 'aa2bb', 'aa', 'bb'), ]: pc, sc = changed_center(left, right) for src in (left, right): self.assertEqual((prefix, suffix), (src[:pc], src[-sc:] if sc else '')) def test_split_with_highlights(self): from kittens.diff.render import split_with_highlights, Segment, truncate_points self.ae(list(truncate_points('1234567890ab', 3)), [3, 6, 9]) for line, width, prefix_count, suffix_count, expected in [ ('abcdefgh', 20, 2, 3, ('abSScdeEEfgh',)), ('abcdefgh', 20, 2, 0, ('abSScdefghEE',)), ('abcdefgh', 3, 2, 3, ('abSScEE', 'SSdeEEf', 'gh')), ('abcdefgh', 2, 4, 1, ('ab', 'cd', 'SSefEE', 'SSgEEh')), ]: seg = Segment(prefix_count, 'SS') seg.end = len(line) - suffix_count seg.end_code = 'EE' self.ae(expected, tuple(split_with_highlights(line, width, [], seg))) def h(s, e, w): ans = Segment(s, 'S{}S'.format(w)) ans.end = e ans.end_code = 'E{}E'.format(w) return ans highlights = [h(0, 1, 1), h(1, 3, 2)] self.ae(['S1SaE1ES2SbcE2Ed'], split_with_highlights('abcd', 10, highlights)) kitty-0.15.0/kitty_tests/fonts.py000066400000000000000000000130331356737523400170510ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import sys import unittest from kitty.constants import is_macos from kitty.fast_data_types import ( DECAWM, get_fallback_font, sprite_map_set_layout, sprite_map_set_limits, test_render_line, test_sprite_position_for, wcwidth ) from kitty.fonts.box_drawing import box_chars from kitty.fonts.render import ( coalesce_symbol_maps, render_string, setup_for_testing, shape_string ) from . import BaseTest class Rendering(BaseTest): def setUp(self): self.test_ctx = setup_for_testing() self.test_ctx.__enter__() self.sprites, self.cell_width, self.cell_height = self.test_ctx.__enter__() try: self.assertEqual([k[0] for k in self.sprites], [0, 1, 2, 3, 4, 5, 6, 7, 8]) except Exception: self.test_ctx.__exit__() del self.test_ctx raise def tearDown(self): self.test_ctx.__exit__() del self.sprites, self.cell_width, self.cell_height, self.test_ctx def test_sprite_map(self): sprite_map_set_limits(10, 2) sprite_map_set_layout(5, 5) self.ae(test_sprite_position_for(0), (0, 0, 0)) self.ae(test_sprite_position_for(1), (1, 0, 0)) self.ae(test_sprite_position_for(2), (0, 1, 0)) self.ae(test_sprite_position_for(3), (1, 1, 0)) self.ae(test_sprite_position_for(4), (0, 0, 1)) self.ae(test_sprite_position_for(5), (1, 0, 1)) self.ae(test_sprite_position_for(0, 1), (0, 1, 1)) self.ae(test_sprite_position_for(0, 2), (1, 1, 1)) self.ae(test_sprite_position_for(0, 2), (1, 1, 1)) def test_box_drawing(self): prerendered = len(self.sprites) s = self.create_screen(cols=len(box_chars), lines=1, scrollback=0) s.draw(''.join(box_chars)) line = s.line(0) test_render_line(line) self.assertEqual(len(self.sprites), prerendered + len(box_chars)) def test_font_rendering(self): render_string('ab\u0347\u0305你好|\U0001F601|\U0001F64f|\U0001F63a|') text = 'He\u0347\u0305llo\u0341, w\u0302or\u0306l\u0354d!' # macOS has no fonts capable of rendering combining chars if is_macos: text = text.encode('ascii', 'ignore').decode('ascii') cells = render_string(text)[-1] self.ae(len(cells), len(text.encode('ascii', 'ignore'))) text = '你好,世界' sz = sum(map(lambda x: wcwidth(ord(x)), text)) cells = render_string(text)[-1] self.ae(len(cells), sz) def test_shaping(self): def groups(text, path=None): return [x[:2] for x in shape_string(text, path=path)] self.ae(groups('abcd'), [(1, 1) for i in range(4)]) self.ae(groups('A=>>B!=C', path='kitty_tests/FiraCode-Medium.otf'), [(1, 1), (3, 3), (1, 1), (2, 2), (1, 1)]) self.ae(groups('F--a--', path='kitty_tests/FiraCode-Medium.otf'), [(1, 1), (2, 2), (1, 1), (2, 2)]) self.ae(groups('==!=<>==<><><>', path='kitty_tests/FiraCode-Medium.otf'), [(2, 2), (2, 2), (2, 2), (2, 2), (2, 2), (2, 2), (2, 2)]) colon_glyph = shape_string('9:30', path='kitty_tests/FiraCode-Medium.otf')[1][2] self.assertNotEqual(colon_glyph, shape_string(':', path='kitty_tests/FiraCode-Medium.otf')[0][2]) self.ae(colon_glyph, 998) self.ae(groups('9:30', path='kitty_tests/FiraCode-Medium.otf'), [(1, 1), (1, 1), (1, 1), (1, 1)]) self.ae(groups('|\U0001F601|\U0001F64f|\U0001F63a|'), [(1, 1), (2, 1), (1, 1), (2, 1), (1, 1), (2, 1), (1, 1)]) self.ae(groups('He\u0347\u0305llo\u0337,', path='kitty_tests/LiberationMono-Regular.ttf'), [(1, 1), (1, 3), (1, 1), (1, 1), (1, 2), (1, 1)]) def test_emoji_presentation(self): s = self.create_screen() s.draw('\u2716\u2716\ufe0f') self.ae((s.cursor.x, s.cursor.y), (3, 0)) s.draw('\u2716\u2716') self.ae((s.cursor.x, s.cursor.y), (5, 0)) s.draw('\ufe0f') self.ae((s.cursor.x, s.cursor.y), (2, 1)) self.ae(str(s.line(0)), '\u2716\u2716\ufe0f\u2716') self.ae(str(s.line(1)), '\u2716\ufe0f') s.draw('\u2716' * 3) self.ae((s.cursor.x, s.cursor.y), (5, 1)) self.ae(str(s.line(1)), '\u2716\ufe0f\u2716\u2716\u2716') self.ae((s.cursor.x, s.cursor.y), (5, 1)) s.reset_mode(DECAWM) s.draw('\ufe0f') s.set_mode(DECAWM) self.ae((s.cursor.x, s.cursor.y), (5, 1)) self.ae(str(s.line(1)), '\u2716\ufe0f\u2716\u2716\ufe0f') s.cursor.y = s.lines - 1 s.draw('\u2716' * s.columns) self.ae((s.cursor.x, s.cursor.y), (5, 4)) s.draw('\ufe0f') self.ae((s.cursor.x, s.cursor.y), (2, 4)) self.ae(str(s.line(s.cursor.y)), '\u2716\ufe0f') @unittest.skipUnless(is_macos, 'Only macOS has a Last Resort font') def test_fallback_font_not_last_resort(self): # Ensure that the LastResort font is not reported as a fallback font on # macOS. See https://github.com/kovidgoyal/kitty/issues/799 from io import StringIO orig, buf = sys.stderr, StringIO() sys.stderr = buf try: self.assertRaises(ValueError, get_fallback_font, '\U0010FFFF', False, False) finally: sys.stderr = orig self.assertIn('LastResort', buf.getvalue()) def test_coalesce_symbol_maps(self): q = {(2, 3): 'a', (4, 6): 'b', (5, 5): 'b', (7, 7): 'b', (9, 9): 'b', (1, 1): 'a'} self.ae(coalesce_symbol_maps(q), {(1, 3): 'a', (4, 7): 'b', (9, 9): 'b'}) kitty-0.15.0/kitty_tests/gr.py000077500000000000000000000037341356737523400163420ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import sys import zlib from base64 import standard_b64encode from contextlib import suppress write = getattr(sys.stdout, 'buffer', sys.stdout).write def clear_screen(): write(b'\033[2J') def move_cursor(x, y): write('\033[{};{}H'.format(y, x).encode('ascii')) def write_gr_cmd(cmd, payload): cmd = ','.join('{}={}'.format(k, v) for k, v in cmd.items()) w = write w(b'\033_G'), w(cmd.encode('ascii')), w(b';'), w(payload), w(b'\033\\') sys.stdout.flush() def display(data, width, height, x, y, z, ncols=0, nrows=0): move_cursor(x, y) cmd = {'a': 'T', 's': width, 'v': height, 'c': ncols, 'r': nrows, 'S': len(data), 'z': z} data = zlib.compress(data) cmd['o'] = 'z' data = standard_b64encode(data) while data: chunk, data = data[:4096], data[4096:] m = 1 if data else 0 cmd['m'] = m write_gr_cmd(cmd, chunk) cmd.clear() def display_png_file(path): cmd = {'a': 'T', 't': 'f', 'f': '100'} path = os.path.abspath(path) if not isinstance(path, bytes): path = path.encode(sys.getfilesystemencoding() or 'utf-8') data = standard_b64encode(path) write_gr_cmd(cmd, data) def main(): photo = sys.argv[-1] base = os.path.dirname(os.path.abspath(__file__)) if not photo.lower().endswith('.png'): raise SystemExit('Must specify a PNG file to display') clear_screen() display(b'\xdd\xdd\xdd\xff', 1, 1, 0, 0, -10, 40, 20) with open(os.path.join(base, '../logo/kitty.rgba'), 'rb') as f: display(f.read(), 256, 256, 0, 5, -9) display(b'\0\0\0\xaa', 1, 1, 0, 7, -8, 40, 3) move_cursor(5, 8) print('kitty is \033[3m\033[32mawesome\033[m!') move_cursor(0, 21) print('Photo...') display_png_file(photo) with suppress(EOFError, KeyboardInterrupt): input() if __name__ == '__main__': main() kitty-0.15.0/kitty_tests/graphics.py000066400000000000000000000270251356737523400175260ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import os import tempfile import unittest import zlib from base64 import standard_b64decode, standard_b64encode from io import BytesIO from kitty.fast_data_types import ( load_png_data, parse_bytes, set_send_to_gpu, shm_unlink, shm_write ) from . import BaseTest try: from PIL import Image except ImportError: Image = None set_send_to_gpu(False) def relpath(name): base = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base, name) def send_command(screen, cmd, payload=b''): cmd = '\033_G' + cmd if payload: if isinstance(payload, str): payload = payload.encode('utf-8') payload = standard_b64encode(payload).decode('ascii') cmd += ';' + payload cmd += '\033\\' c = screen.callbacks c.clear() parse_bytes(screen, cmd.encode('ascii')) return c.wtcbuf def parse_response(res): if not res: return return res.decode('ascii').partition(';')[2].partition('\033')[0] all_bytes = bytes(bytearray(range(256))) def byte_block(sz): d, m = divmod(sz, len(all_bytes)) return (all_bytes * d) + all_bytes[:m] def load_helpers(self): s = self.create_screen() g = s.grman def pl(payload, **kw): kw.setdefault('i', 1) cmd = ','.join('%s=%s' % (k, v) for k, v in kw.items()) res = send_command(s, cmd, payload) return parse_response(res) def sl(payload, **kw): if isinstance(payload, str): payload = payload.encode('utf-8') data = kw.pop('expecting_data', payload) cid = kw.setdefault('i', 1) self.ae('OK', pl(payload, **kw)) img = g.image_for_client_id(cid) self.ae(img['client_id'], cid) self.ae(img['data'], data) if 's' in kw: self.ae((kw['s'], kw['v']), (img['width'], img['height'])) self.ae(img['is_4byte_aligned'], kw.get('f') != 24) return img return s, g, pl, sl def put_helpers(self, cw, ch): iid = 0 def create_screen(): s = self.create_screen(10, 5, cell_width=cw, cell_height=ch) return s, 2 / s.columns, 2 / s.lines def put_cmd(z=0, num_cols=0, num_lines=0, x_off=0, y_off=0, width=0, height=0, cell_x_off=0, cell_y_off=0): return 'z=%d,c=%d,r=%d,x=%d,y=%d,w=%d,h=%d,X=%d,Y=%d' % (z, num_cols, num_lines, x_off, y_off, width, height, cell_x_off, cell_y_off) def put_image(screen, w, h, **kw): nonlocal iid iid += 1 cmd = 'a=T,f=24,i=%d,s=%d,v=%d,%s' % (iid, w, h, put_cmd(**kw)) data = b'x' * w * h * 3 res = send_command(screen, cmd, data) return iid, parse_response(res) def put_ref(screen, **kw): cmd = 'a=p,i=%d,%s' % (iid, put_cmd(**kw)) send_command(screen, cmd) def layers(screen, scrolled_by=0, xstart=-1, ystart=1): return screen.grman.update_layers(scrolled_by, xstart, ystart, dx, dy, screen.columns, screen.lines, cw, ch) def rect_eq(r, left, top, right, bottom): for side in 'left top right bottom'.split(): a, b = r[side], locals()[side] if abs(a - b) > 0.0001: self.ae(a, b, 'the %s side is not equal' % side) s, dx, dy = create_screen() return s, dx, dy, put_image, put_ref, layers, rect_eq class TestGraphics(BaseTest): def test_load_images(self): s, g, l, sl = load_helpers(self) # Test load query self.ae(l('abcd', s=1, v=1, a='q'), 'OK') self.ae(g.image_count, 0) # Test simple load for f in 32, 24: p = 'abc' + ('d' if f == 32 else '') img = sl(p, s=1, v=1, f=f) self.ae(bool(img['is_4byte_aligned']), f == 32) # Test chunked load self.assertIsNone(l('abcd', s=2, v=2, m=1)) self.assertIsNone(l('efgh', m=1)) self.assertIsNone(l('ijkl', m=1)) self.ae(l('mnop', m=0), 'OK') img = g.image_for_client_id(1) self.ae(img['data'], b'abcdefghijklmnop') # Test compression random_data = byte_block(3 * 1024) compressed_random_data = zlib.compress(random_data) sl( compressed_random_data, s=24, v=32, o='z', expecting_data=random_data ) # Test chunked + compressed b = len(compressed_random_data) // 2 self.assertIsNone(l(compressed_random_data[:b], s=24, v=32, o='z', m=1)) self.ae(l(compressed_random_data[b:], m=0), 'OK') img = g.image_for_client_id(1) self.ae(img['data'], random_data) # Test loading from file f = tempfile.NamedTemporaryFile() f.write(random_data), f.flush() sl(f.name, s=24, v=32, t='f', expecting_data=random_data) self.assertTrue(os.path.exists(f.name)) f.seek(0), f.truncate(), f.write(compressed_random_data), f.flush() sl(f.name, s=24, v=32, t='t', o='z', expecting_data=random_data) self.assertRaises( FileNotFoundError, f.close ) # check that file was deleted # Test loading from POSIX SHM name = '/kitty-test-shm' shm_write(name, random_data) sl(name, s=24, v=32, t='s', expecting_data=random_data) self.assertRaises( FileNotFoundError, shm_unlink, name ) # check that file was deleted @unittest.skipIf(Image is None, 'PIL not available, skipping PNG tests') def test_load_png(self): s, g, l, sl = load_helpers(self) w, h = 5, 3 rgba_data = byte_block(w * h * 4) img = Image.frombytes('RGBA', (w, h), rgba_data) rgb_data = img.convert('RGB').convert('RGBA').tobytes() def png(mode='RGBA'): buf = BytesIO() i = img if mode != i.mode: i = img.convert(mode) i.save(buf, 'PNG') return buf.getvalue() for mode in 'RGBA RGB'.split(): data = png(mode) sl(data, f=100, expecting_data=rgb_data if mode == 'RGB' else rgba_data) for m in 'LP': img = img.convert(m) rgba_data = img.convert('RGBA').tobytes() data = png(m) sl(data, f=100, expecting_data=rgba_data) self.ae(l(b'a' * 20, f=100, S=20).partition(':')[0], 'EBADPNG') def test_load_png_simple(self): # 1x1 transparent PNG png_data = standard_b64decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==') expected = b'\x00\xff\xff\x7f' self.ae(load_png_data(png_data), (expected, 1, 1)) s, g, l, sl = load_helpers(self) sl(png_data, f=100, expecting_data=expected) # test error handling for loading bad png data self.assertRaisesRegex(ValueError, '[EBADPNG]', load_png_data, b'dsfsdfsfsfd') def test_image_put(self): cw, ch = 10, 20 s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch) self.ae(put_image(s, 10, 20)[1], 'OK') l0 = layers(s) self.ae(len(l0), 1) rect_eq(l0[0]['src_rect'], 0, 0, 1, 1) rect_eq(l0[0]['dest_rect'], -1, 1, -1 + dx, 1 - dy) self.ae(l0[0]['group_count'], 1) self.ae(s.cursor.x, 1), self.ae(s.cursor.y, 0) put_ref(s, num_cols=s.columns, x_off=2, y_off=1, width=3, height=5, cell_x_off=3, cell_y_off=1, z=-1) l2 = layers(s) self.ae(len(l2), 2) rect_eq(l2[0]['src_rect'], 2 / 10, 1 / 20, (2 + 3) / 10, (1 + 5)/20) left, top = -1 + dx + 3 * dx / cw, 1 - 1 * dy / ch rect_eq(l2[0]['dest_rect'], left, top, -1 + (1 + s.columns) * dx, top - dy * 5 / ch) rect_eq(l2[1]['src_rect'], 0, 0, 1, 1) rect_eq(l2[1]['dest_rect'], -1, 1, -1 + dx, 1 - dy) self.ae(l2[0]['group_count'], 1), self.ae(l2[1]['group_count'], 1) self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 1) def test_gr_scroll(self): cw, ch = 10, 20 s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch) put_image(s, 10, 20) # a one cell image at (0, 0) self.ae(len(layers(s)), 1) for i in range(s.lines): s.index() self.ae(len(layers(s)), 0), self.ae(s.grman.image_count, 1) for i in range(s.historybuf.ynum - 1): s.index() self.ae(len(layers(s)), 0), self.ae(s.grman.image_count, 1) s.index() self.ae(s.grman.image_count, 0) # Now test with margins s.reset() # Test images outside page area untouched put_image(s, cw, ch) # a one cell image at (0, 0) for i in range(s.lines - 1): s.index() put_image(s, cw, ch) # a one cell image at (0, bottom) s.set_margins(2, 4) # 1-based indexing self.ae(s.grman.image_count, 2) for i in range(s.lines + s.historybuf.ynum): s.index() self.ae(s.grman.image_count, 2) for i in range(s.lines): # ensure cursor is at top margin s.reverse_index() # Test clipped scrolling during index put_image(s, cw, 2*ch, z=-1) # 1x2 cell image self.ae(s.grman.image_count, 3) self.ae(layers(s)[0]['src_rect'], {'left': 0.0, 'top': 0.0, 'right': 1.0, 'bottom': 1.0}) s.index(), s.index() l0 = layers(s) self.ae(len(l0), 3) self.ae(layers(s)[0]['src_rect'], {'left': 0.0, 'top': 0.5, 'right': 1.0, 'bottom': 1.0}) s.index() self.ae(s.grman.image_count, 2) # Test clipped scrolling during reverse_index for i in range(s.lines): s.reverse_index() put_image(s, cw, 2*ch, z=-1) # 1x2 cell image self.ae(s.grman.image_count, 3) self.ae(layers(s)[0]['src_rect'], {'left': 0.0, 'top': 0.0, 'right': 1.0, 'bottom': 1.0}) while s.cursor.y != 1: s.reverse_index() s.reverse_index() self.ae(layers(s)[0]['src_rect'], {'left': 0.0, 'top': 0.0, 'right': 1.0, 'bottom': 0.5}) s.reverse_index() self.ae(s.grman.image_count, 2) def test_gr_reset(self): cw, ch = 10, 20 s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch) put_image(s, cw, ch) # a one cell image at (0, 0) self.ae(len(layers(s)), 1) s.reset() self.ae(s.grman.image_count, 0) put_image(s, cw, ch) # a one cell image at (0, 0) self.ae(s.grman.image_count, 1) for i in range(s.lines): s.index() s.reset() self.ae(s.grman.image_count, 1) def test_gr_delete(self): cw, ch = 10, 20 s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch) def delete(ac=None, **kw): cmd = 'a=d' if ac: cmd += ',d={}'.format(ac) if kw: cmd += ',' + ','.join('{}={}'.format(k, v) for k, v in kw.items()) send_command(s, cmd) put_image(s, cw, ch) delete() self.ae(len(layers(s)), 0), self.ae(s.grman.image_count, 1) delete('A') self.ae(s.grman.image_count, 0) iid = put_image(s, cw, ch)[0] delete('I', i=iid) self.ae(s.grman.image_count, 0) s.reset() put_image(s, cw, ch) put_image(s, cw, ch) delete('C') self.ae(s.grman.image_count, 2) s.cursor_position(1, 1) delete('C') self.ae(s.grman.image_count, 1) delete('P', x=2, y=1) self.ae(s.grman.image_count, 0) put_image(s, cw, ch, z=9) delete('Z', z=9) self.ae(s.grman.image_count, 0) kitty-0.15.0/kitty_tests/hints.py000066400000000000000000000017371356737523400170550ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from . import BaseTest class TestHints(BaseTest): def test_url_hints(self): from kittens.hints.main import parse_hints_args, functions_for, mark, convert_text args = parse_hints_args([])[0] pattern, post_processors = functions_for(args) def create_marks(text, cols=20): text = convert_text(text, cols) return tuple(mark(pattern, post_processors, text, args)) def t(text, url, cols=20): marks = create_marks(text, cols) urls = [m.text for m in marks] self.ae(urls, [url]) u = 'http://test.me/' t(u, 'http://test.me/') t('"{}"'.format(u), u) t('({})'.format(u), u) t(u + '\nxxx', u + 'xxx', len(u)) t('link:{}[xxx]'.format(u), u) t('`xyz <{}>`_.'.format(u), u) t('moo'.format(u), u) kitty-0.15.0/kitty_tests/keys.py000066400000000000000000000073411356737523400167000ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal from functools import partial import kitty.fast_data_types as defines from kitty.keys import ( interpret_key_event, modify_complex_key, modify_key_bytes, smkx_key_map ) from . import BaseTest class DummyWindow: def __init__(self): self.screen = self self.extended_keyboard = False self.cursor_key_mode = True class TestParser(BaseTest): def test_modify_complex_key(self): self.ae(modify_complex_key('kcuu1', 4), b'\033[1;4A') self.ae(modify_complex_key('kcuu1', 3), b'\033[1;3A') self.ae(modify_complex_key('kf5', 3), b'\033[15;3~') self.assertRaises(ValueError, modify_complex_key, 'kri', 3) def test_interpret_key_event(self): # test rmkx/smkx w = DummyWindow() def k(expected, key, mods=0): actual = interpret_key_event( getattr(defines, 'GLFW_KEY_' + key), 0, mods, w, defines.GLFW_PRESS, ) self.ae(b'\033' + expected.encode('ascii'), actual) for ckm, mch in {True: 'O', False: '['}.items(): w.cursor_key_mode = ckm for name, ch in { 'UP': 'A', 'DOWN': 'B', 'RIGHT': 'C', 'LEFT': 'D', 'HOME': 'H', 'END': 'F', }.items(): k(mch + ch, name) w.cursor_key_mode = True # test remaining special keys for key, num in zip('INSERT DELETE PAGE_UP PAGE_DOWN'.split(), '2356'): k('[' + num + '~', key) for key, num in zip('1234', 'PQRS'): k('O' + num, 'F' + key) for key, num in zip(range(5, 13), (15, 17, 18, 19, 20, 21, 23, 24)): k('[' + str(num) + '~', 'F{}'.format(key)) # test modifiers SPECIAL_KEYS = 'UP DOWN RIGHT LEFT HOME END INSERT DELETE PAGE_UP PAGE_DOWN ' for i in range(1, 13): SPECIAL_KEYS += 'F{} '.format(i) SPECIAL_KEYS = SPECIAL_KEYS.strip().split() for mods, num in zip(('CONTROL', 'ALT', 'SHIFT+ALT'), '534'): fmods = 0 num = int(num) for m in mods.split('+'): fmods |= getattr(defines, 'GLFW_MOD_' + m) km = partial(k, mods=fmods) for key in SPECIAL_KEYS: keycode = getattr(defines, 'GLFW_KEY_' + key) base_key = smkx_key_map[keycode] km(modify_key_bytes(base_key, num).decode('ascii')[1:], key) def test_encode_mouse_event(self): PRESS, RELEASE, DRAG, MOVE = range(4) NORMAL_PROTOCOL, UTF8_PROTOCOL, SGR_PROTOCOL, URXVT_PROTOCOL = range(4) L, M, R = defines.GLFW_MOUSE_BUTTON_LEFT, defines.GLFW_MOUSE_BUTTON_MIDDLE, defines.GLFW_MOUSE_BUTTON_RIGHT protocol = SGR_PROTOCOL def enc(button=L, action=PRESS, mods=0, x=1, y=1): return defines.test_encode_mouse(x, y, protocol, button, action, mods) self.ae(enc(), '<0;1;1M') self.ae(enc(action=RELEASE), '<0;1;1m') self.ae(enc(action=MOVE), '<35;1;1M') self.ae(enc(action=DRAG), '<32;1;1M') self.ae(enc(R), '<2;1;1M') self.ae(enc(R, action=RELEASE), '<2;1;1m') self.ae(enc(R, action=DRAG), '<34;1;1M') self.ae(enc(M), '<1;1;1M') self.ae(enc(M, action=RELEASE), '<1;1;1m') self.ae(enc(M, action=DRAG), '<33;1;1M') self.ae(enc(x=1234, y=5678), '<0;1234;5678M') self.ae(enc(mods=defines.GLFW_MOD_SHIFT), '<4;1;1M') self.ae(enc(mods=defines.GLFW_MOD_ALT), '<8;1;1M') self.ae(enc(mods=defines.GLFW_MOD_CONTROL), '<16;1;1M') kitty-0.15.0/kitty_tests/layout.py000066400000000000000000000146361356737523400172470ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from . import BaseTest from kitty.config import defaults from kitty.layout import Stack, Horizontal, idx_for_id from kitty.fast_data_types import pt_to_px class Window: def __init__(self, win_id, overlay_for=None, overlay_window_id=None): self.id = win_id self.overlay_for = overlay_for self.overlay_window_id = overlay_window_id self.is_visible_in_layout = True def set_visible_in_layout(self, idx, val): self.is_visible_in_layout = bool(val) def set_geometry(self, idx, geometry): self.geometry = geometry def create_layout(cls, opts=None, border_width=2): if opts is None: opts = defaults mw, pw = map(pt_to_px, (opts.window_margin_width, opts.window_padding_width)) ans = cls(1, 1, mw, mw, pw, border_width) ans.set_active_window_in_os_window = lambda idx: None ans.swap_windows_in_os_window = lambda a, b: None return ans def create_windows(num=5): return [Window(i + 1) for i in range(num)] def utils(self, q, windows): def ids(): return [w.id for w in windows] def visible_ids(): return {w.id for w in windows if w.is_visible_in_layout} def expect_ids(*a): self.assertEqual(tuple(ids()), a) def check_visible(active_window_idx): if q.only_active_window_visible: self.ae(visible_ids(), {windows[active_window_idx].id}) else: self.ae(visible_ids(), {w.id for w in windows if w.overlay_window_id is None}) return ids, visible_ids, expect_ids, check_visible class TestLayout(BaseTest): def do_ops_test(self, q): windows = create_windows() ids, visible_ids, expect_ids, cv = utils(self, q, windows) def check_visible(): return cv(active_window_idx) active_window_idx = 0 # Test layout self.ae(q(windows, active_window_idx), active_window_idx) expect_ids(*range(1, len(windows)+1)) check_visible() # Test nth_window for i in range(len(windows)): active_window_idx = q.nth_window(windows, i) self.ae(active_window_idx, i) expect_ids(*range(1, len(windows)+1)) check_visible() # Test next_window for i in range(2 * len(windows)): expected = (active_window_idx + 1) % len(windows) active_window_idx = q.next_window(windows, active_window_idx) self.ae(active_window_idx, expected) expect_ids(*range(1, len(windows)+1)) check_visible() # Test move_window active_window_idx = 0 active_window_idx = q.move_window(windows, active_window_idx, 3) self.ae(active_window_idx, 3) expect_ids(4, 2, 3, 1, 5) check_visible() q.move_window(windows, 0, 3) expect_ids(*range(1, len(windows)+1)) check_visible() # Test add_window active_window_idx = q.add_window(windows, Window(6), active_window_idx) self.ae(active_window_idx, 5) expect_ids(*range(1, len(windows)+1)) check_visible() # Test remove_window active_window_idx = 3 expected = active_window_idx active_window_idx = q.remove_window(windows, windows[active_window_idx], active_window_idx) self.ae(active_window_idx, expected) check_visible() expect_ids(1, 2, 3, 5, 6) w = windows[active_window_idx] active_window_idx = q.remove_window(windows, windows[0], active_window_idx) self.ae(active_window_idx, windows.index(w)) check_visible() expect_ids(2, 3, 5, 6) # Test set_active_window for i in range(len(windows)): active_window_idx = q.set_active_window(windows, i) self.ae(i, active_window_idx) check_visible() def do_overlay_test(self, q): windows = create_windows() ids, visible_ids, expect_ids, cv = utils(self, q, windows) def check_visible(): return cv(active_window_idx) def aidx(i): return idx_for_id(visible_windows[i].id, windows) # Test add_window w = Window(len(windows) + 1) active_window_idx = 1 w.overlay_for = windows[active_window_idx].id windows[active_window_idx].overlay_window_id = w.id active_window_idx = q.add_window(windows, w, active_window_idx) self.ae(active_window_idx, 1) expect_ids(1, 6, 3, 4, 5, 2) check_visible() # Test layout self.ae(q(windows, active_window_idx), active_window_idx) expect_ids(1, 6, 3, 4, 5, 2) check_visible() w = Window(len(windows) + 1) active_window_idx = q.add_window(windows, w, active_window_idx) self.ae(active_window_idx, 6) visible_windows = [w for w in windows if w.overlay_window_id is None] # Test nth_window for i in range(len(visible_windows)): active_window_idx = q.nth_window(windows, i) self.ae(active_window_idx, aidx(i)) expect_ids(1, 6, 3, 4, 5, 2, 7) check_visible() # Test next_window for i in range(len(visible_windows)): active_window_idx = q.next_window(windows, aidx(i)) expected = (i + 1) % len(visible_windows) self.ae(active_window_idx, aidx(expected)) expect_ids(1, 6, 3, 4, 5, 2, 7) check_visible() # Test move_window active_window_idx = q.move_window(windows, 4) self.ae(active_window_idx, 6) expect_ids(1, 6, 3, 4, 7, 2, 5) check_visible() # Test set_active_window active_window_idx = q.set_active_window(windows, 0) self.ae(active_window_idx, 0) check_visible() active_window_idx = q.set_active_window(windows, 5) self.ae(active_window_idx, 1) check_visible() # Test remove_window active_window_idx = q.remove_window(windows, windows[1], 1) expect_ids(1, 2, 3, 4, 7, 5) self.ae(active_window_idx, 1) check_visible() def test_layout_operations(self): for layout_class in Stack, Horizontal: q = create_layout(layout_class) self.do_ops_test(q) def test_overlay_layout_operations(self): for layout_class in Stack, Horizontal: q = create_layout(layout_class) self.do_overlay_test(q) kitty-0.15.0/kitty_tests/parser.py000066400000000000000000000367061356737523400172300ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import time from binascii import hexlify from functools import partial from kitty.fast_data_types import CURSOR_BLOCK, parse_bytes, parse_bytes_dump from . import BaseTest class CmdDump(list): def __call__(self, *a): self.append(a) class TestParser(BaseTest): def parse_bytes_dump(self, s, x, *cmds): cd = CmdDump() if isinstance(x, str): x = x.encode('utf-8') cmds = tuple(('draw', x) if isinstance(x, str) else x for x in cmds) parse_bytes_dump(cd, s, x) current = '' q = [] for args in cd: if args[0] == 'draw': if args[1] is not None: current += args[1] else: if current: q.append(('draw', current)) current = '' q.append(args) if current: q.append(('draw', current)) self.ae(tuple(q), cmds) def test_simple_parsing(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('12', '12') self.ae(str(s.line(0)), '12') self.ae(s.cursor.x, 2) pb('3456', '3456') self.ae(str(s.line(0)), '12345') self.ae(str(s.line(1)), '6') pb(b'\n123\n\r45', ('screen_linefeed',), '123', ('screen_linefeed',), ('screen_carriage_return',), '45') self.ae(str(s.line(1)), '6') self.ae(str(s.line(2)), ' 123') self.ae(str(s.line(3)), '45') parse_bytes(s, b'\rabcde') self.ae(str(s.line(3)), 'abcde') pb('\rßxyz1', ('screen_carriage_return',), 'ßxyz1') self.ae(str(s.line(3)), 'ßxyz1') pb('ニム', 'ニム') self.ae(str(s.line(4)), 'ニム') def test_esc_codes(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('12\033Da', '12', ('screen_index',), 'a') self.ae(str(s.line(0)), '12') self.ae(str(s.line(1)), ' a') pb('\033x', ('Unknown char after ESC: 0x%x' % ord('x'),)) pb('\033c123', ('screen_reset', ), '123') self.ae(str(s.line(0)), '123') def test_charsets(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb(b'\xc3') pb(b'\xa1', ('draw', b'\xc3\xa1'.decode('utf-8'))) s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('\033)0\x0e/_', ('screen_designate_charset', 1, ord('0')), ('screen_change_charset', 1), '/_') self.ae(str(s.line(0)), '/\xa0') self.assertTrue(s.callbacks.iutf8) pb('\033%@_', ('screen_use_latin1', 1), '_') self.assertFalse(s.callbacks.iutf8) s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('\033(0/_', ('screen_designate_charset', 0, ord('0')), '/_') self.ae(str(s.line(0)), '/\xa0') def test_csi_codes(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('abcde', 'abcde') s.cursor_back(5) pb('x\033[2@y', 'x', ('screen_insert_characters', 2), 'y') self.ae(str(s.line(0)), 'xy bc') pb('x\033[2;7@y', 'x', ('screen_insert_characters', 2), 'y') pb('x\033[@y', 'x', ('screen_insert_characters', 1), 'y') pb('x\033[345@y', 'x', ('screen_insert_characters', 345), 'y') pb('x\033[345;@y', 'x', ('CSI code 0x40 has unsupported start modifier: 0x0 or end modifier: 0x3b',), 'y') pb('\033[H', ('screen_cursor_position', 1, 1)) self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 0) pb('\033[4H', ('screen_cursor_position', 4, 1)) pb('\033[4;0H', ('screen_cursor_position', 4, 0)) pb('\033[3;2H', ('screen_cursor_position', 3, 2)) pb('\033[3;2;H', ('screen_cursor_position', 3, 2)) pb('\033[00000000003;0000000000000002H', ('screen_cursor_position', 3, 2)) self.ae(s.cursor.x, 1), self.ae(s.cursor.y, 2) pb('\033[J', ('screen_erase_in_display', 0, 0)) pb('\033[?J', ('screen_erase_in_display', 0, 1)) pb('\033[?2J', ('screen_erase_in_display', 2, 1)) pb('\033[h') pb('\033[20;4h', ('screen_set_mode', 20, 0), ('screen_set_mode', 4, 0)) pb('\033[?1000;1004h', ('screen_set_mode', 1000, 1), ('screen_set_mode', 1004, 1)) pb('\033[20;4;20l', ('screen_reset_mode', 20, 0), ('screen_reset_mode', 4, 0), ('screen_reset_mode', 20, 0)) pb('\033[=c', ('report_device_attributes', 0, 61)) s.reset() def sgr(params): return (('select_graphic_rendition', '{} '.format(x)) for x in params.split()) pb('\033[1;2;3;4;7;9;34;44m', *sgr('1 2 3 4 7 9 34 44')) for attr in 'bold italic reverse strikethrough dim'.split(): self.assertTrue(getattr(s.cursor, attr)) self.ae(s.cursor.decoration, 1) self.ae(s.cursor.fg, 4 << 8 | 1) self.ae(s.cursor.bg, 4 << 8 | 1) pb('\033[38;5;1;48;5;7m', ('select_graphic_rendition', '38 5 1 '), ('select_graphic_rendition', '48 5 7 ')) self.ae(s.cursor.fg, 1 << 8 | 1) self.ae(s.cursor.bg, 7 << 8 | 1) pb('\033[38;2;1;2;3;48;2;7;8;9m', ('select_graphic_rendition', '38 2 1 2 3 '), ('select_graphic_rendition', '48 2 7 8 9 ')) self.ae(s.cursor.fg, 1 << 24 | 2 << 16 | 3 << 8 | 2) self.ae(s.cursor.bg, 7 << 24 | 8 << 16 | 9 << 8 | 2) pb('\033[0;2m', *sgr('0 2')) pb('\033[;2m', *sgr('0 2')) pb('\033[m', *sgr('0 ')) pb('\033[1;;2m', *sgr('1 0 2')) pb('\033[38;5;1m', ('select_graphic_rendition', '38 5 1 ')) pb('\033[58;2;1;2;3m', ('select_graphic_rendition', '58 2 1 2 3 ')) pb('\033[38;2;1;2;3m', ('select_graphic_rendition', '38 2 1 2 3 ')) pb('\033[1001:2:1:2:3m', ('select_graphic_rendition', '1001 2 1 2 3 ')) pb('\033[38:2:1:2:3;48:5:9;58;5;7m', ( 'select_graphic_rendition', '38 2 1 2 3 '), ('select_graphic_rendition', '48 5 9 '), ('select_graphic_rendition', '58 5 7 ')) c = s.callbacks pb('\033[5n', ('report_device_status', 5, 0)) self.ae(c.wtcbuf, b'\033[0n') c.clear() pb('\033[6n', ('report_device_status', 6, 0)) self.ae(c.wtcbuf, b'\033[1;1R') pb('12345', '12345') c.clear() pb('\033[6n', ('report_device_status', 6, 0)) self.ae(c.wtcbuf, b'\033[2;1R') c.clear() s.cursor_key_mode = True pb('\033[?1$p', ('report_mode_status', 1, 1)) self.ae(c.wtcbuf, b'\033[?1;1$y') pb('\033[?1l', ('screen_reset_mode', 1, 1)) self.assertFalse(s.cursor_key_mode) c.clear() pb('\033[?1$p', ('report_mode_status', 1, 1)) self.ae(c.wtcbuf, b'\033[?1;2$y') pb('\033[2;4r', ('screen_set_margins', 2, 4)) c.clear() pb('\033[14t', ('screen_report_size', 14)) self.ae(c.wtcbuf, b'\033[4;100;50t') self.ae(s.margin_top, 1), self.ae(s.margin_bottom, 3) pb('\033[r', ('screen_set_margins', 0, 0)) self.ae(s.margin_top, 0), self.ae(s.margin_bottom, 4) pb('\033[1 q', ('screen_set_cursor', 1, ord(' '))) self.assertTrue(s.cursor.blink) self.ae(s.cursor.shape, CURSOR_BLOCK) s.reset() pb('\033[3 @', ('Shift left escape code not implemented',)) pb('\033[3 A', ('Shift right escape code not implemented',)) pb('\033[3;4 S', ('Select presentation directions escape code not implemented',)) def test_osc_codes(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) c = s.callbacks pb('a\033]2;x\\ryz\x9cbcde', 'a', ('set_title', 'x\\ryz'), 'bcde') self.ae(str(s.line(0)), 'abcde') self.ae(c.titlebuf, 'x\\ryz') c.clear() pb('\033]\x07', ('set_title', ''), ('set_icon', '')) self.ae(c.titlebuf, ''), self.ae(c.iconbuf, '') pb('\033]ab\x07', ('set_title', 'ab'), ('set_icon', 'ab')) self.ae(c.titlebuf, 'ab'), self.ae(c.iconbuf, 'ab') c.clear() pb('\033]2;;;;\x07', ('set_title', ';;;')) self.ae(c.titlebuf, ';;;') c.clear() pb('\033]2;\x07', ('set_title', '')) self.ae(c.titlebuf, '') pb('\033]110\x07', ('set_dynamic_color', 110, '')) self.ae(c.colorbuf, '') def test_dcs_codes(self): s = self.create_screen() c = s.callbacks pb = partial(self.parse_bytes_dump, s) q = hexlify(b'kind').decode('ascii') pb('a\033P+q{}\x9cbcde'.format(q), 'a', ('screen_request_capabilities', 43, q), 'bcde') self.ae(str(s.line(0)), 'abcde') self.ae(c.wtcbuf, '1+r{}={}'.format(q, '1b5b313b3242').encode('ascii')) c.clear() pb('\033P$q q\033\\', ('screen_request_capabilities', ord('$'), ' q')) self.ae(c.wtcbuf, b'\033P1$r1 q\033\\') c.clear() pb('\033P$qm\033\\', ('screen_request_capabilities', ord('$'), 'm')) self.ae(c.wtcbuf, b'\033P1$rm\033\\') for sgr in '0;34;102;1;2;3;4 0;38:5:200;58:2:10:11:12'.split(): expected = set(sgr.split(';')) - {'0'} c.clear() parse_bytes(s, '\033[{}m\033P$qm\033\\'.format(sgr).encode('ascii')) r = c.wtcbuf.decode('ascii').partition('r')[2].partition('m')[0] self.ae(expected, set(r.split(';'))) c.clear() pb('\033P$qr\033\\', ('screen_request_capabilities', ord('$'), 'r')) self.ae(c.wtcbuf, '\033P1$r{};{}r\033\\'.format(s.margin_top + 1, s.margin_bottom + 1).encode('ascii')) def test_sc81t(self): s = self.create_screen() pb = partial(self.parse_bytes_dump, s) pb('\033 G', ('screen_set_8bit_controls', 1)) c = s.callbacks pb('\033P$qm\033\\', ('screen_request_capabilities', ord('$'), 'm')) self.ae(c.wtcbuf, b'\x901$rm\x9c') c.clear() pb('\033[0c', ('report_device_attributes', 0, 0)) self.ae(c.wtcbuf, b'\x9b?62;c') def test_pending(self): s = self.create_screen() timeout = 0.1 s.set_pending_timeout(timeout) pb = partial(self.parse_bytes_dump, s) pb('\033P=1s\033\\', ('screen_start_pending_mode',)) pb('a') self.ae(str(s.line(0)), '') pb('\033P=2s\033\\', ('screen_stop_pending_mode',), ('draw', 'a')) self.ae(str(s.line(0)), 'a') pb('\033P=1s\033\\', ('screen_start_pending_mode',)) pb('b') self.ae(str(s.line(0)), 'a') time.sleep(timeout) pb('c', ('draw', 'bc')) self.ae(str(s.line(0)), 'abc') pb('\033P=1s\033\\d', ('screen_start_pending_mode',)) pb('\033P=2s\033\\', ('screen_stop_pending_mode',), ('draw', 'd')) pb('\033P=1s\033\\e', ('screen_start_pending_mode',)) pb('\033P'), pb('='), pb('2s') pb('\033\\', ('screen_stop_pending_mode',), ('draw', 'e')) pb('\033P=1sxyz;.;\033\\''\033P=2skjf".,> 2 else (4 << 8) | 1) kitty-0.15.0/kitty_tests/screen.py000066400000000000000000000363251356737523400172100ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal from . import BaseTest from kitty.fast_data_types import DECAWM, IRM, Cursor, DECCOLM, DECOM class TestScreen(BaseTest): def test_draw_fast(self): s = self.create_screen() # Test in line-wrap, non-insert mode s.draw('a' * 5) self.ae(str(s.line(0)), 'a' * 5) self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) s.draw('b' * 7) self.assertTrue(s.linebuf.is_continued(1)) self.assertTrue(s.linebuf.is_continued(2)) self.ae(str(s.line(0)), 'a' * 5) self.ae(str(s.line(1)), 'b' * 5) self.ae(str(s.line(2)), 'b' * 2) self.ae(s.cursor.x, 2), self.ae(s.cursor.y, 2) s.draw('c' * 15) self.ae(str(s.line(0)), 'b' * 5) self.ae(str(s.line(1)), 'bbccc') # Now test without line-wrap s.reset(), s.reset_dirty() s.reset_mode(DECAWM) s.draw('0123456789') self.ae(str(s.line(0)), '01239') self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) s.draw('ab') self.ae(str(s.line(0)), '0123b') self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) # Now test in insert mode s.reset(), s.reset_dirty() s.set_mode(IRM) s.draw('12345' * 5) s.cursor_back(5) self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 4) s.reset_dirty() s.draw('ab') self.ae(str(s.line(4)), 'ab123') self.ae((s.cursor.x, s.cursor.y), (2, 4)) def test_draw_char(self): # Test in line-wrap, non-insert mode s = self.create_screen() s.draw('ココx') self.ae(str(s.line(0)), 'ココx') self.ae(tuple(map(s.line(0).width, range(5))), (2, 0, 2, 0, 1)) self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) s.draw('ニãƒãƒ') self.ae(str(s.line(0)), 'ココx') self.ae(str(s.line(1)), 'ニãƒ') self.ae(str(s.line(2)), 'ãƒ') self.ae(s.cursor.x, 2), self.ae(s.cursor.y, 2) s.draw('Ƶ̧\u0308') self.ae(str(s.line(2)), 'ãƒÆµÌ§\u0308') self.ae(s.cursor.x, 3), self.ae(s.cursor.y, 2) s.draw('xy'), s.draw('\u0306') self.ae(str(s.line(2)), 'ãƒÆµÌ§\u0308xy\u0306') self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 2) s.draw('c' * 15) self.ae(str(s.line(0)), 'ニãƒ') # Now test without line-wrap s.reset(), s.reset_dirty() s.reset_mode(DECAWM) s.draw('0\u030612345\u03066789\u0306') self.ae(str(s.line(0)), '0\u03061239\u0306') self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) s.draw('ab\u0306') self.ae(str(s.line(0)), '0\u0306123b\u0306') self.ae(s.cursor.x, 5), self.ae(s.cursor.y, 0) # Now test in insert mode s.reset(), s.reset_dirty() s.set_mode(IRM) s.draw('1\u03062345' * 5) s.cursor_back(5) self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 4) s.reset_dirty() s.draw('a\u0306b') self.ae(str(s.line(4)), 'a\u0306b1\u030623') self.ae((s.cursor.x, s.cursor.y), (2, 4)) def test_emoji_skin_tone_modifiers(self): s = self.create_screen() q = chr(0x1f469) + chr(0x1f3fd) s.draw(q) self.ae(str(s.line(0)), q) self.ae(s.cursor.x, 2) def test_zwj(self): s = self.create_screen(cols=20) q = '\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466' s.draw(q) self.ae(q, str(s.line(0))) self.ae(s.cursor.x, 8) def test_char_manipulation(self): s = self.create_screen() def init(): s.reset(), s.reset_dirty() s.draw('abcde') s.cursor.bold = True s.cursor_back(4) s.reset_dirty() self.ae(s.cursor.x, 1) init() s.insert_characters(2) self.ae(str(s.line(0)), 'a bc') self.assertTrue(s.line(0).cursor_from(1).bold) s.cursor_back(1) s.insert_characters(20) self.ae(str(s.line(0)), '') s.draw('xココ') s.cursor_back(5) s.reset_dirty() s.insert_characters(1) self.ae(str(s.line(0)), ' xコ') c = Cursor() c.italic = True s.line(0).apply_cursor(c, 0, 5) self.ae(s.line(0).width(2), 2) self.assertTrue(s.line(0).cursor_from(2).italic) self.assertFalse(s.line(0).cursor_from(2).bold) init() s.delete_characters(2) self.ae(str(s.line(0)), 'ade') self.assertTrue(s.line(0).cursor_from(4).bold) self.assertFalse(s.line(0).cursor_from(2).bold) init() s.erase_characters(2) self.ae(str(s.line(0)), 'a de') self.assertTrue(s.line(0).cursor_from(1).bold) self.assertFalse(s.line(0).cursor_from(4).bold) s.erase_characters(20) self.ae(str(s.line(0)), 'a') init() s.erase_in_line() self.ae(str(s.line(0)), 'a') self.assertTrue(s.line(0).cursor_from(1).bold) self.assertFalse(s.line(0).cursor_from(0).bold) init() s.erase_in_line(1) self.ae(str(s.line(0)), ' cde') init() s.erase_in_line(2) self.ae(str(s.line(0)), '') init() s.erase_in_line(2, True) self.ae((False, False, False, False, False), tuple(map(lambda i: s.line(0).cursor_from(i).bold, range(5)))) def test_erase_in_screen(self): s = self.create_screen() def init(): s.reset() s.draw('12345' * 5) s.reset_dirty() s.cursor.x, s.cursor.y = 2, 1 s.cursor.bold = True def all_lines(s): return tuple(str(s.line(i)) for i in range(s.lines)) init() s.erase_in_display() self.ae(all_lines(s), ('12345', '12', '', '', '')) init() s.erase_in_display(1) self.ae(all_lines(s), ('', ' 45', '12345', '12345', '12345')) init() s.erase_in_display(2) self.ae(all_lines(s), ('', '', '', '', '')) self.assertTrue(s.line(0).cursor_from(1).bold) init() s.erase_in_display(2, True) self.ae(all_lines(s), ('', '', '', '', '')) self.assertFalse(s.line(0).cursor_from(1).bold) def test_cursor_movement(self): s = self.create_screen() s.draw('12345' * 5) s.reset_dirty() s.cursor_up(2) self.ae((s.cursor.x, s.cursor.y), (4, 2)) s.cursor_up1() self.ae((s.cursor.x, s.cursor.y), (0, 1)) s.cursor_forward(3) self.ae((s.cursor.x, s.cursor.y), (3, 1)) s.cursor_back() self.ae((s.cursor.x, s.cursor.y), (2, 1)) s.cursor_down() self.ae((s.cursor.x, s.cursor.y), (2, 2)) s.cursor_down1(5) self.ae((s.cursor.x, s.cursor.y), (0, 4)) s = self.create_screen() s.draw('12345' * 5) s.index() self.ae(str(s.line(4)), '') for i in range(4): self.ae(str(s.line(i)), '12345') s.draw('12345' * 5) s.cursor_up(5) s.reverse_index() self.ae(str(s.line(0)), '') for i in range(1, 5): self.ae(str(s.line(i)), '12345') def test_backspace_wide_characters(self): s = self.create_screen() s.draw('â›…') self.ae(s.cursor.x, 2) s.backspace() s.draw(' ') s.backspace() self.ae(s.cursor.x, 1) def test_resize(self): s = self.create_screen(scrollback=6) s.draw(''.join([str(i) * s.columns for i in range(s.lines)])) s.resize(3, 10) self.ae(str(s.line(0)), '0'*5 + '1'*5) self.ae(str(s.line(1)), '2'*5 + '3'*5) self.ae(str(s.line(2)), '4'*5) s.resize(5, 1) self.ae(str(s.line(0)), '4') hb = s.historybuf self.ae(str(hb), '3\n3\n3\n3\n3\n2') s = self.create_screen(scrollback=20) s.draw(''.join(str(i) * s.columns for i in range(s.lines*2))) self.ae(str(s.linebuf), '55555\n66666\n77777\n88888\n99999') s.resize(5, 2) self.ae(str(s.linebuf), '88\n88\n99\n99\n9') def test_cursor_after_resize(self): def draw(text, end_line=True): s.draw(text) if end_line: s.linefeed(), s.carriage_return() s = self.create_screen() draw('123'), draw('123') y_before = s.cursor.y s.resize(s.lines, s.columns-1) self.ae(y_before, s.cursor.y) s = self.create_screen(cols=5, lines=8) draw('one') draw('two three four five |||', end_line=False) s.resize(s.lines + 2, s.columns + 2) y = s.cursor.y self.assertIn('|', str(s.line(y))) s = self.create_screen() draw('a') x_before = s.cursor.x s.resize(s.lines - 1, s.columns) self.ae(x_before, s.cursor.x) def test_tab_stops(self): # Taken from vttest/main.c s = self.create_screen(cols=80, lines=2) s.cursor_position(1, 1) s.clear_tab_stop(3) for col in range(1, s.columns - 1, 3): s.cursor_forward(3) s.set_tab_stop() s.cursor_position(1, 4) for col in range(4, s.columns - 1, 6): s.clear_tab_stop(0) s.cursor_forward(6) s.cursor_position(1, 7) s.clear_tab_stop(2) s.cursor_position(1, 1) for col in range(1, s.columns - 1, 6): s.tab() s.draw('*') s.cursor_position(2, 2) self.ae(str(s.line(0)), '\t*'*13) def test_margins(self): # Taken from vttest/main.c s = self.create_screen(cols=80, lines=24) def nl(): s.carriage_return(), s.linefeed() for deccolm in (False, True): if deccolm: s.resize(24, 132) s.set_mode(DECCOLM) else: s.reset_mode(DECCOLM) region = s.lines - 6 s.set_margins(3, region + 3) s.set_mode(DECOM) for i in range(26): ch = chr(ord('A') + i) which = i % 4 if which == 0: s.cursor_position(region + 1, 1), s.draw(ch) s.cursor_position(region + 1, s.columns), s.draw(ch.lower()) nl() elif which == 1: # Simple wrapping s.cursor_position(region, s.columns), s.draw(chr(ord('A') + i - 1).lower() + ch) # Backspace at right margin s.cursor_position(region + 1, s.columns), s.draw(ch), s.backspace(), s.draw(ch.lower()) nl() elif which == 2: # Tab to right margin s.cursor_position(region + 1, s.columns), s.draw(ch), s.backspace(), s.backspace(), s.tab(), s.tab(), s.draw(ch.lower()) s.cursor_position(region + 1, 2), s.backspace(), s.draw(ch), nl() else: s.cursor_position(region + 1, 1), nl() s.cursor_position(region, 1), s.draw(ch) s.cursor_position(region, s.columns), s.draw(ch.lower()) for l in range(2, region + 2): c = chr(ord('I') + l - 2) before = '\t' if l % 4 == 0 else ' ' self.ae(c + ' ' * (s.columns - 3) + before + c.lower(), str(s.line(l))) s.reset_mode(DECOM) # Test that moving cursor outside the margins works as expected s = self.create_screen(10, 10) s.set_margins(4, 6) s.cursor_position(0, 0) self.ae(s.cursor.y, 0) nl() self.ae(s.cursor.y, 1) s.cursor.y = s.lines - 1 self.ae(s.cursor.y, 9) s.reverse_index() self.ae(s.cursor.y, 8) def test_sgr(self): s = self.create_screen() s.select_graphic_rendition(0, 1, 37, 42) s.draw('a') c = s.line(0).cursor_from(0) self.assertTrue(c.bold) self.ae(c.bg, (2 << 8) | 1) s.cursor_position(2, 1) s.select_graphic_rendition(0, 35) s.draw('b') c = s.line(1).cursor_from(0) self.ae(c.fg, (5 << 8) | 1) self.ae(c.bg, 0) s.cursor_position(2, 2) s.select_graphic_rendition(38, 2, 99, 1, 2, 3) s.draw('c') c = s.line(1).cursor_from(1) self.ae(c.fg, (1 << 24) | (2 << 16) | (3 << 8) | 2) def test_cursor_hidden(self): s = self.create_screen() s.toggle_alt_screen() s.cursor_visible = False s.toggle_alt_screen() self.assertFalse(s.cursor_visible) def test_dirty_lines(self): s = self.create_screen() self.assertFalse(s.linebuf.dirty_lines()) s.draw('a' * (s.columns * 2)) self.ae(s.linebuf.dirty_lines(), [0, 1]) self.assertFalse(s.historybuf.dirty_lines()) while not s.historybuf.count: s.draw('a' * (s.columns * 2)) self.ae(s.historybuf.dirty_lines(), list(range(s.historybuf.count))) self.ae(s.linebuf.dirty_lines(), list(range(s.lines))) s.cursor.x, s.cursor.y = 0, 1 s.insert_lines(2) self.ae(s.linebuf.dirty_lines(), [0, 3, 4]) s.draw('a' * (s.columns * s.lines)) self.ae(s.linebuf.dirty_lines(), list(range(s.lines))) s.cursor.x, s.cursor.y = 0, 1 s.delete_lines(2) self.ae(s.linebuf.dirty_lines(), [0, 1, 2]) s = self.create_screen() self.assertFalse(s.linebuf.dirty_lines()) s.erase_in_line(0, False) self.ae(s.linebuf.dirty_lines(), [0]) s.index(), s.index() s.erase_in_display(0, False) self.ae(s.linebuf.dirty_lines(), [0, 2, 3, 4]) s = self.create_screen() self.assertFalse(s.linebuf.dirty_lines()) s.insert_characters(2) self.ae(s.linebuf.dirty_lines(), [0]) s.cursor.y = 1 s.delete_characters(2) self.ae(s.linebuf.dirty_lines(), [0, 1]) s.cursor.y = 2 s.erase_characters(2) self.ae(s.linebuf.dirty_lines(), [0, 1, 2]) def test_selection_as_text(self): s = self.create_screen() for i in range(2 * s.lines): if i != 0: s.carriage_return(), s.linefeed() s.draw(str(i) * s.columns) s.start_selection(0, 0, False) s.update_selection(4, 4, True) expected = ('55555', '\n66666', '\n77777', '\n88888', '\n99999') self.ae(s.text_for_selection(), expected) s.scroll(2, True) self.ae(s.text_for_selection(), expected) def test_variation_selectors(self): s = self.create_screen() s.draw('\U0001f610') self.ae(s.cursor.x, 2) s.carriage_return(), s.linefeed() s.draw('\U0001f610\ufe0e') self.ae(s.cursor.x, 1) s.carriage_return(), s.linefeed() s.draw('\u25b6') self.ae(s.cursor.x, 1) s.carriage_return(), s.linefeed() s.draw('\u25b6\ufe0f') self.ae(s.cursor.x, 2) def test_serialize(self): s = self.create_screen() s.draw('ab' * s.columns) s.carriage_return(), s.linefeed() s.draw('c') def as_text(as_ansi=False): d = [] s.as_text(d.append, as_ansi) return ''.join(d) self.ae(as_text(), 'ababababab\nc\n\n') self.ae(as_text(True), 'ababababab\nc\n\n') kitty-0.15.0/kitty_tests/tui.py000066400000000000000000000026751356737523400165330ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from . import BaseTest class TestTUI(BaseTest): def test_line_edit(self): from kittens.tui.line_edit import LineEdit le = LineEdit() le.on_text('abcd', False) self.ae(le.cursor_pos, 4) for i in range(5): self.assertTrue(le.left()) if i < 4 else self.assertFalse(le.left()) self.ae(le.cursor_pos, max(0, 3 - i)) self.ae(le.pending_bell, True) le.clear() le.on_text('abcd', False), le.home() self.ae(le.cursor_pos, 0) for i in range(5): self.assertTrue(le.right()) if i < 4 else self.assertFalse(le.right()) self.ae(le.cursor_pos, min(4, i + 1)) self.ae(le.pending_bell, True) le.clear() le.on_text('abcd', False) self.ae(le.current_input, 'abcd') self.ae(le.cursor_pos, 4) self.ae(le.split_at_cursor(), ('abcd', '')) le.backspace() self.ae(le.current_input, 'abc') self.ae(le.cursor_pos, 3) self.assertFalse(le.pending_bell) le.backspace(num=2) self.ae(le.current_input, 'a') self.ae(le.cursor_pos, 1) self.assertFalse(le.pending_bell) le.backspace(num=2) self.ae(le.current_input, '') self.ae(le.cursor_pos, 0) le.backspace() self.assertTrue(le.pending_bell) kitty-0.15.0/kitty_tests/unicode_input.py000066400000000000000000000013401356737523400205630ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2018, Kovid Goyal from . import BaseTest class TestUnicodeInput(BaseTest): def test_word_trie(self): from kittens.unicode_input.unicode_names import codepoints_for_word def matches(a, *words): ans = codepoints_for_word(a) for w in words: ans &= codepoints_for_word(w) return set(ans) self.ae(matches('horiz', 'ell'), {0x2026, 0x22ef, 0x2b2c, 0x2b2d, 0xfe19}) self.ae(matches('horizontal', 'ell'), {0x2026, 0x22ef, 0x2b2c, 0x2b2d, 0xfe19}) self.assertFalse(matches('sfgsfgsfgfgsdg')) self.assertIn(0x1f41d, matches('bee')) kitty-0.15.0/launcher.c000066400000000000000000000140371356737523400147320ustar00rootroot00000000000000/* * launcher.c * Copyright (C) 2017 Kovid Goyal * * Distributed under terms of the GPL3 license. */ #include #include #include #include #include #include #include #ifdef __APPLE__ #include #include #include #else #include #endif #include #include #define MIN(x, y) ((x) < (y)) ? (x) : (y) #define MAX_ARGC 1024 #ifndef KITTY_LIB_PATH #define KITTY_LIB_PATH "../.." #endif #ifndef KITTY_LIB_DIR_NAME #define KITTY_LIB_DIR_NAME "lib" #endif static inline bool safe_realpath(const char* src, char *buf, size_t buf_sz) { char* ans = realpath(src, NULL); if (ans == NULL) return false; snprintf(buf, buf_sz, "%s", ans); free(ans); return true; } static inline void set_bundle_exe_dir(const wchar_t *exe_dir) { wchar_t buf[PATH_MAX+1] = {0}; swprintf(buf, PATH_MAX, L"bundle_exe_dir=%ls", exe_dir); PySys_AddXOption(buf); } #ifdef FOR_BUNDLE static int run_embedded(const char* exe_dir_, const char *libpath, int argc, wchar_t **argv) { int num; Py_NoSiteFlag = 1; Py_FrozenFlag = 1; Py_IgnoreEnvironmentFlag = 1; Py_DontWriteBytecodeFlag = 1; Py_NoUserSiteDirectory = 1; Py_IsolatedFlag = 1; Py_SetProgramName(L"kitty"); int ret = 1; wchar_t *exe_dir = Py_DecodeLocale(exe_dir_, NULL); if (exe_dir == NULL) { fprintf(stderr, "Fatal error: cannot decode exe_dir\n"); return 1; } set_bundle_exe_dir(exe_dir); wchar_t stdlib[PATH_MAX+1] = {0}; #ifdef __APPLE__ const char *python_relpath = "../Resources/Python/lib"; #else const char *python_relpath = "../" KITTY_LIB_DIR_NAME; #endif num = swprintf(stdlib, PATH_MAX, L"%ls/%s/python%s:%ls/%s/python%s/lib-dynload:%ls/%s/python%s/site-packages", exe_dir, python_relpath, PYVER, exe_dir, python_relpath, PYVER, exe_dir, python_relpath, PYVER ); if (num < 0 || num >= PATH_MAX) { fprintf(stderr, "Failed to create path to python stdlib\n"); return 1; } Py_SetPath(stdlib); PyMem_RawFree(exe_dir); if (num < 0 || num >= PATH_MAX) { fprintf(stderr, "Failed to create path to kitty lib\n"); return 1; } Py_Initialize(); PySys_SetArgvEx(argc - 1, argv + 1, 0); PySys_SetObject("frozen", Py_True); PyObject *kitty = PyUnicode_FromString(libpath); if (kitty == NULL) { fprintf(stderr, "Failed to allocate python kitty lib object\n"); goto end; } PyObject *runpy = PyImport_ImportModule("runpy"); if (runpy == NULL) { PyErr_Print(); fprintf(stderr, "Unable to import runpy\n"); Py_CLEAR(kitty); goto end; } PyObject *run_name = PyUnicode_FromString("__main__"); if (run_name == NULL) { fprintf(stderr, "Failed to allocate run_name\n"); goto end; } PyObject *res = PyObject_CallMethod(runpy, "run_path", "OOO", kitty, Py_None, run_name); Py_CLEAR(runpy); Py_CLEAR(kitty); Py_CLEAR(run_name); if (res == NULL) PyErr_Print(); else { ret = 0; Py_CLEAR(res); } end: if (Py_FinalizeEx() < 0) ret = 120; return ret; } #else static int run_embedded(const char* exe_dir_, const char *libpath, int argc, wchar_t **argv) { (void)libpath; wchar_t *exe_dir = Py_DecodeLocale(exe_dir_, NULL); if (exe_dir == NULL) { fprintf(stderr, "Fatal error: cannot decode exe_dir: %s\n", exe_dir_); return 1; } set_bundle_exe_dir(exe_dir); #ifdef FROM_SOURCE PySys_AddXOption(L"kitty_from_source=1"); #endif PyMem_RawFree(exe_dir); return Py_Main(argc, argv); } #endif // read_exe_path() {{{ #ifdef __APPLE__ static inline bool read_exe_path(char *exe, size_t buf_sz) { (void)buf_sz; uint32_t size = PATH_MAX; char apple[PATH_MAX+1] = {0}; if (_NSGetExecutablePath(apple, &size) != 0) { fprintf(stderr, "Failed to get path to executable\n"); return false; } if (!safe_realpath(apple, exe, buf_sz)) { fprintf(stderr, "realpath() failed on the executable's path\n"); return false; } return true; } #elif defined(__FreeBSD__) #include #include static inline bool read_exe_path(char *exe, size_t buf_sz) { int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; size_t length = buf_sz; int error = sysctl(name, 4, exe, &length, NULL, 0); if (error < 0 || length <= 1) { fprintf(stderr, "failed to get path to executable, sysctl() failed\n"); return false; } return true; } #elif defined(__NetBSD__) static inline bool read_exe_path(char *exe, size_t buf_sz) { if (!safe_realpath("/proc/curproc/exe", exe, buf_sz)) { fprintf(stderr, "Failed to read /proc/curproc/exe\n"); return false; } return true; } #else static inline bool read_exe_path(char *exe, size_t buf_sz) { if (!safe_realpath("/proc/self/exe", exe, buf_sz)) { fprintf(stderr, "Failed to read /proc/self/exe\n"); return false; } return true; } #endif // }}} int main(int argc, char *argv[]) { char exe[PATH_MAX+1] = {0}; if (!read_exe_path(exe, sizeof(exe))) return 1; char *exe_dir = dirname(exe); int num, num_args, i, ret=0; char lib[PATH_MAX+1] = {0}; char *final_argv[MAX_ARGC + 1] = {0}; wchar_t *argvw[MAX_ARGC + 1] = {0}; num = snprintf(lib, PATH_MAX, "%s/%s", exe_dir, KITTY_LIB_PATH); if (num < 0 || num >= PATH_MAX) { fprintf(stderr, "Failed to create path to kitty lib\n"); return 1; } final_argv[0] = exe; final_argv[1] = lib; for (i = 1, num_args=2; i < argc && i + 1 <= MAX_ARGC; i++) { final_argv[i+1] = argv[i]; num_args++; } #if PY_VERSION_HEX >= 0x03070000 // Always use UTF-8 mode, see https://github.com/kovidgoyal/kitty/issues/924 Py_UTF8Mode = 1; #endif for (i = 0; i < num_args; i++) { argvw[i] = Py_DecodeLocale(final_argv[i], NULL); if (argvw[i] == NULL) { fprintf(stderr, "Fatal error: cannot decode argv[%d]\n", i); ret = 1; goto end; } } ret = run_embedded(exe_dir, lib, num_args, argvw); end: for (i = 0; i < num_args; i++) { if(argvw[i]) PyMem_RawFree(argvw[i]); } return ret; } kitty-0.15.0/logo/000077500000000000000000000000001356737523400137205ustar00rootroot00000000000000kitty-0.15.0/logo/beam-cursor.png000066400000000000000000000003311356737523400166420ustar00rootroot00000000000000‰PNG  IHDRµú7ê pHYs  šœ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF_IDATxÚ¼‘É €@ Ç[Ñ ¥¥áâ\Á1ùDräÄ å$”%ʱ!‚:@*œh0B$\E€fëϋҡñÀGz{ßÎ!vo}·"ÿ¤°—¢œ $‘õñ{æÜ*Ucƒ%aIEND®B`‚kitty-0.15.0/logo/beam-cursor@2x.png000066400000000000000000000027371356737523400172300ustar00rootroot00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<fiTXtXML:com.adobe.xmp ˜ŽõIDATxÚì—¿KaÇ_u888ؤèàØ*¸958¸…ø$¨CàšN "HÚb‹D᪸B"¢8Tè‘`ƒWoÏsøÆÛqÑà]á__ï¹óy>÷½×»{”RDƒF)!ä´‡ pHd<7âñ8áS 3È“Y„¯”‹n·K- ¿-@ uÝét¨Õj¥ÓÆL'j0m‚zÑjµÄiƒ6l^¶Ûmj2™¤¦ƒ¡£‹sF5”M@ˆR©ôœN§%W¼^ïd tJd¡*@"‘Àq¿$ù|žÙýZÒ  V«ñE÷€ÍfcÛD!Tp¹\|Q;6ï÷û¬¹H¾‰YŒX$—˘hŸEa¢Ýá8ˆæ‡C)O›Í¦ö„B!ÿ}òçâ×ÐûDçs£Â¬¾¢Ò=òK˜¸Gð­Ö?üfQM³<·áuvàÒoJÇÎ'áÿƒº?tˆÛíÖ÷a‹ÅôuåñxøÜ :Ðëõ4wàóK½^ç‹î)¼”ni €J¥R8:ù×òl6ËîAËš€a˪IDATxÚí] xSU¾m¡-t‰@ ¥MÒB÷–¶4]@“t“*BÙ‘u`PÆ.,RYd“ŠŠÊªŒìØÜÁe_*t_P?çÓõCÇQAœ±wÎyM:mú^ö’Þó}çK—×wïùÿÿÞ{î¹/)!̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3ffZašø±…äx5ø×à7ÁO(ÄÅù 鸅¿´£a’§ì×q)THV%€GxMR|®P!~»@!U8D ù q:ÖNõx]¾R²D!/*"Îî†ÓÂáAxoèÏ£…JÉDhknAš´Ú]œ¯ÌŸ„„,J Vd>Ñ©@ìõЇGS*p¸Ý @ßa@°ÚþEašôySg†EªÀ5©[á^Á2¡?ãßâ=ð^xOSú²D Ò‹àŸ™Ð‡- É!×øï¸t*Stµ‘›K\Z®Z3ÚÓíi’Ï‘”|•dDQn¸«Î¸Uqpí.ðÿšÚ,ûa 8l!ðO¦$µéé¾ð»•àßYtaÿ¶@)Y¾P.öi/ ‘[Ï-ÑÆ!û€RºÖ‚ 7á¨(Hg€ vÃ÷÷îñÚŽ}؉¹ä-yoÄÎv“’ìÒ Ò©öŸ@FÍÈ4Íó¡±äö·ŒPcýK‡)zÀh=#´n[²õ4I#Ô8Ç‚”C•>!¨ËŒXÃë V¨DÞg(%Ó¹†ºx™Ã~ÉÅîÜWŒ\½þ+¸óTP!YÀî@ÉŸ¶-Põ~ˆ+¡2’Ï>ò†I‚ú¼ M:‡-”üIßrø!šOî$åŒðv~g±*°Ÿ]Þ“t õ$‘"éA¤á=ˆ·q…!îĬ‰‘ÞÊ•’åÆ<\Òˆ{ä¹@N¬F86áE…{“Ã=É?ýåñ_ÀË#¼É›pÍäà‡Iݧ„øôL”ôŧTtó‰tÇÒYtÓ3chÑc-NÐs#"è«óFÑKfÒmSéK3³i¡*ÐB÷—Vá.I«h鋘þoÆŸª±æãàÈr…œYT¨¸0/2|4ô*’ þ»@G¨úw¥ ˆib1iÜ¼Ì 7þº© -É¥_^F+®_¦·nÝjã õôìû‡éÆ?ä˜MÎú©JzêÝ´¡¾®];Õ7Ëé‘­ë@pÑæ´ñXûãµñIò#]€Ìé@æip.‡ë^ëg"GÆÎÈ&LA^ÐøPg1¼~®£“ßÂ5K¢z“‡ÚK1‰ñ7¯^lGŸÝQlÒH-TJéþ—–ÒÆÆ½mTpv0éÌ_!-Ñ^^«¥fÂx~×l@ìzÏ'7‘xèÔ:ð/:þu˜'Á3n§æº€x¾±€m˜–Nk«+ "_ãx‹#Ô˜vŽl[oT ôµùO˜"‚ ÍºŽ³%7óc‡˜®ð ƒì!Ot¢…)é¤@0Ç!Ø~ê§zŒZ‡+®]2ŠïY_`p;ÛO7©šÊ›t嘣—€”>nÁžäNMê¼+1µËm_¨‰€ui7Ï:öݤ¸^7Œëð¦•&ƒ^[UIŸ¼nåÔØœüÝâÜ“ÔÁëyx=È­Iždv:—í{A’×¾Û&PoÒôäÀ‡ ;UѪå‚À—W,£eWRh}ÃUáY`]¾Þv¶>%ø÷ÕµGèÙËq´²f—à5˜€šŽ!ùÚ£þX¤‰lW?L[n7ÐŒõ!Àô‚šƒ[j¿®æh Ì(ÏÀk rhôô RÁïÿAG"¢Ëoƒï…N€í`w­-åø]UëëGGxëkãì‚ ×7\¡¥¥àôêg¯+ûà½íàúû ײ¹6Ê®$èœPDúÚá¥Y%fð­± ò&=pP©¹¸m"Èá>àT©É½‹ H\ܨþûàßk9f¦÷ŒìÀÏà;ÃD$AÓP!ágùÞNMšëžˆéìÍ¥³¿Yµ™#ýÜ•TÁëpj×GÌ…ÇøGvã zú’´¥ÚºS‚íàîAçȵàÐßλ‚qkÙ]y“$\tì÷…üžš#mÞîªß>ŽW¡$ Š‹ŽéFzê« ÀT×ì¾Þ¨Þ¯þKO? ‘–÷¼ÍJò½žÔÇU ¡Sã{ ‚¶{ÕŸtNÿbJ/ÂÏò€ ½¸zö$‚W÷Q«6hUÍÁþ”¼±ZðþSõn™ö“úºÒ¹)}éB¥´?·‹ò&éðó3z0DŒKsĦz9rœèâ 9En§Gkk¥ Ná=Hthøaèè|A@'Þ‹‘P|ÛØÂ41ÍìßûùÀžÎôéÁýxÛš?Eðk7òÛÓØXËݹR½8óîA~ÔmÓFeõá\cm⦅Ò‹cMêFsï+ˆëí ?û@€ð9,½ÉtÄVß4þ@Nõj…nä)lÜSH»¾›ŸÆ@1Œ‚épˆ¿;/x/<™¬cXÙBÌéK!‚×}´o»^”¼þÿìS~Ûà€`;¯ÌÉ{ï!ýܹÇÅ4'¾{Nˆç×€ÅoZÉñ7à/!vˆá0„u<˜ˆò&~ÚI߈¸¸®é £T2Y±"&ºlXTèWÉ~—TŸ YüÀ0ÌÛ©ŽÃ”ëïÕ\¼ŠÜh—Û-3ʽˆ?$Ûáõ'C²QTõ°ÈPáÀ´\Eör¥“âzqÍêOg&úò’ƒe]þY`'½\>ÄPÓ~›X[#;ËàâÌêq©´ºâÓv÷©«?ljB¾>\<ù>]œÜî~ Æ„_cŒÑ=]©"6Ú`|ä€%bjàNàßX³ÁJ«e’:/’~ÇЭ¨:bppÏŠOÿ_šÆíç ­ÌÕ×Õr ¤±5ú—ç<Æ•v m̹ñ:ï9bÃe ;~ ÑøÈ#‚9lØÞëšœ4bå ‹9­jÒõpÃøz5'p¯Š#hÖ"UTÔCÃd1ÑéñqÏœÆ'§†Ñœˆ^ô)™¯îª ¬±%›×Іúz¤\-;E‹gf›|T»v¢œ^øø=݇@ôÄþô¹œHÝ%ßš"¢“R¨©ødÈ Ü&÷‡r°nÐ\0Z þ7䪕öðUfõªnô—0/2óº.=)):wü7“ÓòÌ•Kg Á7I‚Š;<Àä°®ºŠ+ÃÞ¼v‰ž:¼‹;бÄxŠøÆŸÇs;<‚FÑÕÕTÈÿ„ݾn˜ž¡û žiR:mH8ÍIŒ£–ÂÄêÌÄÄr¹¼“Žä܇+쇰,°Â³}¹.Б­– JÈs“cè‚´@»|Ìkž|ÍIdM|®À º/Û?h|“µÉ×øãÉq4ß‚Ä,Î@—Žç¦øu“‡Óå£ñnÝÌñÙòP˜Él‚Ïw°mŒ¶)ùY2Ù h¸ÉV@Ÿ14ÌlRð8øTÉ_¹)œï¯ìÃ.ù3·ùÃh,c6Ä狜””î¶ý2Ù+¶$}LJŒÙĬžM9¢Ó·­^dv;ãS£¨­ñY Ï–ÓÿI[˜F¡i»ðøÐPÛ !á}[ÎØ:À0±Øn€}µ5>àïÙLÜl´u€¢=ìF"Û 1±ØfHOLŒµep1ýûÛ ù0À¦ÈŠhÛm`bâv[L]œíN...\ßm$Û¿¥\.—»g&&¾m­ ÃéHdwÄk»/Ä€±X‘ü]™™™n÷íyÁÈ >‚ŽüÒªS߀Ÿ7f”‡øûS±¯/ííåEÝ:w¶{âµÝÍÕ•‹ cÄXœÎCâým«ïÿP%“=ò½í;×Ö!ŸìÔT/ÍI"tr·¾àGE}éä`dâ3Äþw¶w;Õ'zNˆ-bŒXÛÉgäºÀ ‘êý•÷Ð'1ñX—Î_#Pè]ÜÜ^G È¿‹Å"⟖&“‰ ˜?r‰£L¶–Œ!pÍGÀwT¨cÇÂZ*b‚Ø€oƒQ?1#Ä:¼:º100000èò‘#GÒM›6Ñ9sæP777&€Ž$€¬¬¬6oìܹ“º»»3t¬ZµªÝ<"&C0zôhÞG²@L†ÀÙÙ™®Y³ÆEÀ`hèääDW¬XÁ+‚½{÷Ò®]»28ú6ÐEÀ`lÀÁDÀ`J!ÈDÀ`j%ÐADÀ`N)E°|ùr{€¹gv.&KÙ±˜ˆ…NíTLÄ‚ÇÁv(&báçt•QL.hÿAŽeeeLA&Là>¼©ÝEnÙÂàè"¿´´”úøø08²ÆŽËKþ™3g¨ŸŸÛ8²ì|&K ÀNÉg°„ì˜|&s`çä3˜# Ÿ ÀT8ùL¦ÀÈg0VF>€1ÐUáóõõ5™:uêTš——gQŸ8q¢!§L† 55Õ*仺ºÒãÇ›ü‚õù¡C‡¸ƒ)&3°råJ‹“c5ò5.‘H˜ÌÀ”)S,N>:ÕÕÕYüŠŠ Ú­[7&sЩS'ºlÙ2.ÙÃ#]Kžêáçàs–&EªP(X`«Ã ;u&&fLLLLLLLLLLLLLLLLLLLÁVu`¬bô¢êÀP2ú›mo$ÿmFûÿ ÿ Ú³à7Áoƒï ~[ã|uÌ̘1cÆŒ3f̘1cÆŒ3f̘1cÆŒ3fVµÿ&s Ñ^mбIEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_128x128@2x.png000066400000000000000000000202431356737523400215550ustar00rootroot00000000000000‰PNG  IHDR\r¨f jIDATxÚí] tUÚ-vP–,„°'ÝDÈJH:éî„ÙȦ²¹€,¢¢²%AÄ ¢è¸à6ŠÀ îã2¸! ‚€$Ö°ƒã3Î8ÿl::îïÿ¾J%“tÒU]Ý]Ýuï9÷DbÒ©Wï»·ÞûÞ÷^I€(›Ð¶$ÏzeI^ôÃ¥y–í¥ù–Š’<Ëqb%q7ñ•’\˃%ùÑ7-n±ßRÓw (]šg½‚bçö’\ëšê8±n¡øÙAÿý*qmq~ô­ô½tÜ-ƒ¢4×z9uÔçD¡‚ß³9”æ[Ÿ.͵Ì,)ìƒ;ÜXšk‰,ÉOý~?$èëÿ©Š™üè“ÅyÖ,ÜICujÔ0êœUŠßÏò(?³,'§5în€ ˤ–Kò­i4*¼‹úö ñ'b䘀‘†pÕÃ|¡7‹ó,ÿäá ® „éBin¯ð%yÑNºî©Äe%ù–G)ð_ªžþXOÑ×?ÿ¡ðÇFÚúúÏèëâ‡Êð÷q2Ä;iˆ<½xx¿Ì…9ý»ý>̶ÙÚÐð}Lq^ôoèúÿâØ°†òŒ ~¶{£ƒë“†‹—ÅPÐÏæ÷§LŠ -É$ÖYB×öW_܇eQ(Ðßo™àÃÀ¯á N•ÅDøê‰V\`É&ZI{/ñk?´¹9~-_[¾ån1 áköɨ‡ú€t4‚9êë6—æFƒý>ìžïÇ ÿ†Œà)o$—ä÷éIŸ?ø&ñ+ ¾9~E#„môD¾yqNtw½ïÏâ|ëeœ¼¥¿ó_µ±8ß2 ôÿ`¡‚Ko”æFex:‡çù;'šPôMÝŸ}ü¤öÔ x FŸõœŽI_OFó¡@@®uŽÁ‚}÷’\K¾»×?a‚ÔŠVÊ“þÇ ½Ë :qkñð¨"ÎлmŽùÖ‘ÊôÇ8m¡ØƒýøÉ³L4h ¿³´ _¢«ë^ZÕƒ¦eJÖ]˜”¼*qÇ¢‚~Ý\Þ§üèAÔÇïñú9ö @?ƒ+ú >ô}®î°—«Îª—ç8`Zá×ç·ò°¾N.Eɬ5ò¨¨´ Ú`í;üKùi_=wý‚w]™Ék÷ÊjÇŒ~½¾ZšÍX>x@Ÿ’¦nPžQ  ºb A ú’oByFIòN-$èÓ@t1”g˜<@ßx%èÓ€BK2”g¨i€õOLÐGü3…\ ¨ÎXðôQÐF(Îx‡à}2üÏž Å ¼ÕÇ[bAsò‡@8Áœ£€ê ;)ˆå?3bI^Tôî@ËUP𱋂>B ‚Þ: 'I½& Ï:Á z‰CaÇí½;(\"`A}i€ó ÷¦O"`A½Ï„²‹‡Çôö[Pßù¿u:”X£€ç¸ >´þ‰_;UÒ( ßz™IÎØ½¿÷!ˆ+ùÖ—À ‡üWqžµ ÔˆP½Mø'1èAáÏ*()°s¯!Aü¯7^jøÒªßø-‚Ôü[ Å(ÀºÁ ªä˜û Êr:âÄ oý11ÈͯF`ƒnò¬¯Þn ø6!¸Á 6Ÿù·^µèŒ]¥N±]¥þI]$[|)7>D&Mˆ •FƇJCèß)±!R´M’¼æ¼|’+¿}Aº<î+Ïò¾·âc›cœcc^Ž}Ò€¬Òkƒ5ÂZ t±÷¤FMO •K‘v$„JŸ…›ü!!L:O_ߤß}(1Dº.1Lê£cB° ºà7ußOè (~ûRüN•c8Tz‹þ}AŽm÷uð)k‡ âQúz=kÊТOˆ:ÒEÏ!UÑH5ü˜Œa#}½:&Lê¬õ:ynG]i¤À[>&I<µð±ù‰{ÄÎ×6‰}ïll—¿îܼIl~r•xzñu¢ll²áEtGÑñØÜñâ·/;^Y/ö¾õšÜ–ýïþ^|°õ%±uíbòÙbå„tý£—h+ŽIzª_C1ú,Å輤£²ÆHk†5‚èh©= méÉ}9×Ä×è¢/ÖñFü—nôf>ÙzJ—¨½Fåè°¯ülùVñäm“Ä®×_Οüq³¼xá‚,"6 þ}#‰çÁâ~-Ξ:éV[˜½÷†x¶l®¸cD#´¡œ–U5¤§Ø£Ñé$ŠÅ-rLêß?É#†éwÄe¤¥ñ¬)ÖV@ç’B¤¡ä’¥Ô¸mÄ/tºYÿ¦xd`É¢*o¹Ö_Á¶æ¦Ñâ =ÝJc<¸g‡xtÎ8¿ çÞ)ƒÅ¯¿èQ[NTVÈ£?šÚ—¼…ÜÝØIì"õ“‡æ¡Ò—ºÄp˜ôWúú{bI\ˆ”mè'¼®Ó†0)>>DºEi¼§7óGÐ×Á*V|ºe˜ŸtÛÖ?$.^¼è‘`jGô9on\#»ý1‚y~ÕíâüÙ3º´…¹çWÅŠ+RýqÎÿnÎë³”§ýO?´(æ9öÃ¥8,r$©5hÈó°<ß÷ì¿“* tÃ÷U•KÞS7±Ô%ϱ})œ¥…1âÝ—žñJ[ªŽ¿šžï뢟kš~ˆ”L1µÝØ¼È AŽqŽu(¾$…JIä¶+”ü¶yT˜ôlS+¾:A˜Åxß.¯¦†G|(î¾ÒæñsÞ›m9sò„xhf¡M úáÆâƒ†ãQGÏyðÄ¿@ñWÆów(ÚÄ…INº™ÿ®¡¾ ’Zý²í“¶œ:~D¬šœé+Ø]768Vh¹˜bç ñöw^þŽ—P®Îˆ‘¤vœùO ‘ÞS»ª@r€suJƒ“|\o=û˜OSÃí/<åµ¶lºûŸ¶…§6>Z!ø²¬LjÉqAñ•@Cõ ‰¼Jâl-«R€ð_YsýNEG}ËÎN¿Þ¢47zš·ë‰ùWùT05üõí“uoË=âìé“>oË«,÷É(`É0ËÎÂsŒ¨ˆ§ïhˆÿž®B‘~Br¸Ô‹:â~â¿TŒ^¿5»ï}^+ĈÃû?ð‹-ß'ÏÕõlÏ{¿Ýà—¶ð*ÃÊ v¯Šá°(a‹l}@…ð9ÖV¾:Ïl{ ¨SЉÿt§mÝZý{îà^^ ªu¥3ü"˜þæÎ›tkËêk‡Š‹/ø­-¼tê­~š—Õ[8z´qWø_±ð“ºH¡P\S5ÐaR!Í£n£¯+éßO_$¾MÜÇówy&m¦'ñ«ô½Môßwo Žàyº'ó¨„ÎRX|¨´Š>÷?ÍuèÀðbFz¤Wkÿö­þ‚8|b‘ØwÈI_KèßÚj8ñ¨W[~¿îWš®áÜù½âÀá1bÿ¡¡âôÙÍš €« —ŒÓ½®O‹”cÀ-áS,{"|ŽiŽm%Æocžb_Ök¡F¤E+/ÊÚ¡¿Kß¿•5¥çž]` •ºpÉ/ î)%qòoK!Oó }þ|.îQk <<£ß[+5¼× ŠÐ}¾¬µØçè‰bwyT-VÝ«Y8÷]3D‡‚Ÿ~âä±Ãþþ9±¿2»¶{*bÉöknË3%Óuí£kS#DbX³âÿIyHõU-vŠY.iãy%–Ò­ò5T*'þšK„=Ù£ »Jè¦ÜA°Wåî&Où­2rX.꽄ØEJ¥ëÝÓdN€L`òÀpÝ‚kcÙMA~áâqY(u àÊ2mÉ·çï¹Íã¶pQŽ–¿}üäc¿h³òøÍðösOêÖ?“¨¯Ýˆ·Ý¼m×í¤t¸&-TžâßúP?p|—òVbï ë%©­¼é!TÚ¥ó¦Oø2ƒ5nvR ÞRI¿ó·¦>sBR˜>K›×Vêñ¢aVZ«éó¸ZÏÓ¶<·r¾¦¿}àðå Ú±§"ŽÌL[épå¾]ºôÍU‰aÍ×å‡HS9fš-Vã³-ª÷|bMüL׿“—ÊY³ ¿'©«<Ÿ‘þbºâqjøí‰Ý¤È¦ÚÛI 'ÃØÐ”‰é1à­¯šÖ½NkÔ›­yÝÓ¶l[÷ †‘ÌIºnk£m9uf‹¶ÑÑùs¢´ ŸGm¹:¥kÓâ •žáR“é»ü¤•ª ­ Öl˜´’c^ýŸ÷öW'ðÛ órÀÇi¹ø!Tú¨&Q'‘±WùÇ•ŸýÊG ÿž ë·<ìor¸&å§D´üÚUNàz›g‰A.ËÕäûe5*šý‡r4î²+÷Ëòß™³ÛmóXÕ}š§eãinÇô´H—sþ´ÈÖ<2x´™€iJ>ÀWÓÞ¯íS´´·¾Î”â¶J%Çð©‹ÊÅ/å„£»; yH-;!—ÞÒS•+J—ì\=0RºÔ£i=¡•£‰óˆ°`£øNgÜ.幺ž9}ÖˆéèruàÆŒžšƒ­êp…¦ÿ°"¾QÑ|X«i5àtÕ1 @KÝÿÉ3›\@åñ[5€ÖÒàÙÎ"É…ø‹.ë$ ‹¼=ÜÅ Õzç³da‡J¯(5,¬…Ñ\ÜÆñäX<Ö¨¼‡¡Z³ãXÃJýZÒÄ Cïä#]ð•ÊÉvw×ô›™ÓâóÖlÊ.æà˜fë&E´l¤N µXÓWSÀ«Ø§)k¾»<Ú¥p.hHòÎ:O àýW7jÈe<ê²iš£Õ´lvZ0´/×|4è_îóº#½âáý2?T:¢ƒØÿÁ»Syc¯˜q¢»ÝG ÙB¤iJÙï§tÄ6þ¬š.Í·Œ©éü[³ûˆ!}Ú7øœ¨¢8W½hÊw½£¾âíÂ!—¢‘ à‚ú¥¸Ê½»ü²—áhÕJ—í(?2QóÙjÏ=à¾ã>¬ß¯ƒ{µó‡ôùÅÏÞ^Ø;¬&›¯œá§5Î>•® ‘¦*ñÖ2Öì ÔA7ÑÞ*ïôS›#“傎Ò\kÿz‡Bˆ1±]üÎU ¡ªEóîËë4-6mÇT&Ÿ/詼ô@±ê¿{ìäý.ÛQqdжeÅCT_ûÔwõûsl\¹¯ëýìçœüS†Êß«ÝmÊ¥å4•½1®³têËB¤žÒ%œ£à Í-ñÕ㟓Â[kìSiJP·:ŒG7eªË¼xÿb A~Ñe朧­ÿsœüyY'wEÿ² 0ڛﮤvÍØí£ÀFʼnÓ'Žª[·?»µQÑœ9÷¶ê3õøe#znž9ðÞª®áб›4UÓ4üWsüy‘2¤ŸÒpÈO}›k½¤Vøé}ÂDnj²Ð?éi‡3ú÷^Á±È™eÏÉŸT–ËÁKÕŠ&VðòcÀ¿¬¶ø‡·?†J«±ÿ¨W!å‡ÄZ5w\}ONÉÝÚ×Î÷çéÝ x¦$wÉ(xÉÐí:ú{nUýäü¨²ð¢á«-zá¾Eºo}hÖUgœ=÷nƒº®ðæÓŸ—ö¸¦ êÚàÿÝ’Õ[8•}ÿÉ‘D.õ¹^ñÃ±ØØôÒ“ >Šfî ¸cÃ…H!reSˆtÐ%’ƒ¨óòèÉ­WçհО.ÒúVïKhÕhÒˆW.í¬j+­Úsøi¿§b@íÚ3çv¨Ë#ГÚÓšy—ûÖ?¤î¤âKêä1x5á¼ê‘Œšê¿Ëtצ4ÜËqsf/‘¢Ì÷Ó©¹¯õŽMrlz©®Ÿ·ÚÏáí÷Æ}ÚGHùd5Gs©ejŽ¢ ͦ{çÕÒnöèˆj£¡ydcåÀ3íÝM*¹"¿ïäÑJÕI´ã' ùò•'é÷LrzõÅ&j‹œ¸,˜·_¼xVuáÏ3Å×»¬õ 'öꟗpS”JO{T„ÜÇÞŠŽÍ”½¹?àŸdË=)É÷ äšcšŸ{ssDr·v"ß›â¯Ã´^k78zx¾§~F8{ªÊ«Çfñß0Òë‡gò HŽ–ïõú1`¯”W{zwöªøëš@rd{ooú”ë_ü.|.‚P6yµÁ‰a-Eî $ŸˆŸ9Ê‘&r­ÕÉ$ÞD¢‡ ðË3µ¬ãÞ¦~ß ¯^¤Á5ùüo´…Ÿü¯®¹Ëãkä>¨$w‡÷ë$F9Ó}?«‰á-½¾c01TzÚo/ å³äíˆ*²÷Jôrš*Ìà*ª¤0)ƒË'yÉ„Y“ÿ›¿_–ú€¯:¯†Ó²“Ä Î"«w;yãéiP®š”!¼ÿ–îgçß;Åg/Шå—'ˆ:Ÿ|¦ê¸xzÑu_Û\ê+î3î;Þ 8uH¢ðuü¤Ûîm,¦¹ˆˆ¿Ï¥Çû¤…LÖ‚¢‰åuV>ss5a¿¦=ÿžŠŸþð©F³—!ÒAv&®×ç7ú¨¯”IRK^×/²Û‡ÚíWÓÍœCüÚ×8Êa³²ãÅCcÅ”´¾";:DU@S¯ÖzùW¥Ÿ±ÏÕy¼Ö¿´ð2¿¾˜O?>¡qûs]¾ÿ»gå|‰§×Ã}ÄŸ˜ÒSÜL}Ç}È}éëøQbvΧóŠ"‡#^k^’¤¥›•í¼]œGpÒg&ÀCŽ:oNù–÷Jsò·ÜzœhA7k$ñyâ_ýÐYn±È‘.& $fKò<{•õŠñ)bó“«TO 8Ñ÷úS÷ùä=€î¿þ,N.ÕU{ ŸòÖ¾¡H—ë¸}X?q…=VŒÉH3`ì8Î:+ 23»yZ8ÇEEJÂ}Ws4Ê}2‡)!Ò:>‘T÷˜ÓS~Ô»ýˆQEiN9}H‚ÇFÀ#‚'n(^zµ¼dXßøy|ÄØÖµˆ'o›ä÷'~s¯ çD$ÏáùUß¼ƒ¯níï͹~}Ù†;owMÖGøÃcÄ”ÁÉ,²@ˆÿȳÙtYÒ“WßX‹¤Iâ>Ù£¯Ç‡äää´§ñh  ¿>ÇfØÄüáú¿¿ÎÛ/ùôõÍAïÏ-æšþìD1Ò?C|Où9MsÇQ›^‰¿#Ý€.þÚáÓ!nΉ ÁäÆˆñ™¶À§óaÎ{™gÛnBB[jøö`]˜3 &à ÎÖ_\îÃe=o³Ðáx}´ÍfŽAÔàû‚Müµ+”‹s­†¿±è‘GÉKmœ½vÅ<™üÖÎ/ðùw_™æ•áºnâ§éÖ¨Àò7Ç­A?i·÷a·¬À¼6k ¡³ææ1òÁžjv&ž;}Jì{g‹xqõ"±|t¢aÚÂæ::#]qü¬ ö§ÿsÁ,~e¹G,ÊígÁðSÞÓ·úò Çw1†©]Mæäñó31+(ÅÏsjÜ—ÁnL®0‚`vnÞ¤K…Þú¥3ýŸôÞî­]˜ ~öëÓ¤ÄÏœš=H”Žˆõ;ïºq¢Xµj•Ç\6)Ûïm¹aX²0Küh­44 ޹féÀD‹EP“Ae(´ÛçŸØí«ÍÒ±}ûB´:sÝS³ÄW ˜½ºv…hu&ßSÀ½Á—°Û›¥;´kÑêÌKÚ·7ÏÀáX|#€ŒŒfèbÝë¼ 4B‡cSÐïTrgƒ¥Ó'%‰Ké©aú–—vè ² &ñŸÚ¹ƒQ€ÓMþC ù­={Š–-Z@~"ß{îî‹Oü]$ñ÷•Ì>‘Œàý+Ñéqq¢O·n¢u«V¡AÈ}Á}Â}Sh¬ CEÇŽÑ6[WɤhA7`݈?Qì9))"=6VôïÓGD†…‰¶mÚ@p'÷Qwê+î36îCƒšÂ'ô¼^ ”sü¼ ù˜0»}<̓^!Cø‹‹Æ5|´2ÿœÞ’#Â:u.¹D´oÛV´ÀÐ>x–©/¹O¹oÃ:w–ûÚ sxŽÝ»IÔ›¨wùœø2ýìX›ÍÖF\O [¡Ó™Wät‘–6 î ›‘Ñnä!Ý^žš*Ú´n ±˜„Ü×Üç:@Ÿr]÷V‘ˇ{p S=}P¹v{¸ï 7þ>”žü†¹È#êÿt˜ÃWŽÊÊ …"ý€1ƒw¢Nø'/ip&$Lƒ ÌÉ̤¤éž¼vއý|Ä=”èïeE‡c2ñ3•xxdFFýzˆÁ´ìSh·'“ªŒOiX?Ê3Z"Ñé¼^YZt5´ûÿ? Û®*ûßÌ0€;&´bAS|ì"þè2vŽ÷Šìö©kPœ‘“ˆ^*ï;°Û§ØgSÇ]KN?ÄE¥ ÀäP\©:2==›cFŽêrrLAYÁ  €€0Â` €€0Â`.!ÆŒ#&Ož,RSS±µ˜ÅæÎ+Μ9ó‹×koÙ²EôéÓ‚ƒÁl3gÎü…ðërÿþý"** ¢ƒÁhíÛ·Çwi0Ä––Ö¤øa0 ˆ Àétºe0„Ð¥KqöìY˜ 0kpùòånL™´mÛVlܸ&ÌhÌ6mÚˆuëÖ©2òòrA€@7€xæ™g`0ÀŒ€&7˜ 0¹À`€É &Ln0`r€ À“L˜Ü`0Àä€&7˜ 0¹À`€É @« TTTÀ`@0L˜Ü`0ÀäPck×®… À3L˜Ü`0Àä€&7˜ 0¹HÊiÃ6lPe{öì‘ßU‘À7­&°`ÁˆƒÔ˜ÀúõëÝ6€­[·Bä0 X €9~üx· `ÇŽ9 5j”8þ¼ÛðØcAä0  @­ø/\¸ RSS!rè VüÌ™3gBà0 Ð  ¨¨HµøçÌ™qÀ@7ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`RÐr†ßìÙ³ ñÞ~›‘ÙªU+`\DñŠmÛ¶©ºf‘ïíK/½¤×‰Ç0@?ÈÎÎ8ñϘ1# „_Ÿçι¹¹0ÀÀCÓÝ»w”ø{÷î- )  æ-ÈíÛ·‡þ7€„„„€›óêÓ¿.‡ üoYYY%~fIIIÀÀ¤I“`€ÿ  W¯^%~æu×]ð™™ Œ‘ܸqcÀˆŸ!Nž<°âçœK›6m`€1 22Rìܹ³ÑuΚ5ËÅ0cÇŽU½raVUU ›Í†UÀ8ÀìØ±£˜7ožxíµ×ÄöíÛÅš5kDJJŠ¡+âXH6l‡6¼ðËËËå{jµZQÏ@”0À@a „0À@a „0À@a „0À@a „0À@a „0À@aÀ/ !˜–Ýþ@+â÷ƒéø±%Â`|A˜Ž;ö@ ¦A¦ãu{ î4à Da–cøÔGoâ!Ž ç'Ä^w 1pVxD´ÜJŒ@˜ÍÁI|ˆ¸‹xšø1<­$û$:Öøÿ^a7šù‡•IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_16x16.png000066400000000000000000000010501356737523400210260ustar00rootroot00000000000000‰PNG  IHDR(-SPLTE@$'3D330P00tF#H55L44zCxF#--+xE!xD!wC xC"+3H77G662 5G77@,&?+$xD!xD!N-H77H77a8"I77d:J87yF" ***<<<>>>H77JJJMMMaaaooopppqUEsAsVFssstAvvvxD!zF$~cP~eSfU‚‚‚”nU”oV—s[˜t]¦Šw§‹y«’€¬“‚ÔÖ­Õ×®ÙØÇÚÙÈ'm»A/tRNS 56ABOPYbdfgjwxyyz€ÁÄÅØÙïòóôööøùûüüýý+S¦£IDATWc`ÀDx9yx8y…¡ ®Jz®®zJ®Š`. »««‰²³00° ˆK8û‡úx‡8Ȉ °20óKË©ûù†éÈKó130q«YjÛ»{xº;êZªr110pHÉjê‘–¬$Äkcˆ&Ü!*f^ƨú6V¨æNú&¦&Húv.¶e}0P Š 6MùœyÒþIEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_16x16@2x.png000066400000000000000000000021411356737523400214020ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆ+PLTE@$IIImI$9'v;'$30+( yC"G66)zB-+M& *,H88G77H55wF!yE!W/+.,++xE ,,+xE!G77xE!+H77*H77xE!xD!yD xD!wD!+I77H77*,yD 5 *,xD!++9 xD!-.xD!+xD!xD!++,12xD"xD!H77;&<' xD!H66xD!xD!H77xD!L1&H77M2'C33C22xD!G77   ,,,3''=1*?2)@2)D51E52H77J86M85Q+c6d6j@(n<n=nA&sssxD!xxxyE"yE#yF#zF$zG$|J(|J)‚S4ƒT5„„„ˆˆˆ‹aEfKgKhM’kQ’lR”nU—s[{ež}h£££¥¥¥¦¦¦ªªª«««³µ ’¿¿¿À²¨Ä·®ÉÉÉÌľÌÐlÍÍÍÍÑvÏÈÃÑÊÆÓÎÊÓÖŸÔפÕÑÎÕתÖÒÏÖØ´ØÚÀÙÚÂÚÙÒÚÛÈÛÜÎÜÛ×ÜÜÛÝÝÝ ï ,ctRNS &/2235<=@@ACMNRTTWXehnoqs‚ŠŠ‹‹‘“–™š›ž¢¢£¤¥¨©ªª±²²¹º»»¾ÀÄÊÌÌÍÓÕÖÞãäääåæççêêëíîó÷ùüýýþê [‚IDAT8Ëc` p‹pVdg`‘R××Q•da`WtsEQàÛÔÔiÝÑ‘@ÒEnÐCQÀ›ˆ¡@.É#*ÂÉ`ël‘­] Ò†KD”¬€IHÅÝJ(6oûú©MM“×nŸßÒÔ$mí®"Ä”f”7´3S’õªiš´cõÖMMK¶¬Ù1¥©Ú[FÙÜÖPŽ‘•“SPÁѲª~ꎥV55­\·|Ç´ú*{'~NV  Z.žAIå1um 7n›ÑÔ4}ó¦EuqåI. ;¸Ù$¢Ê ¢¶µ¿§eÂÄöîþÖ†Jˆ7Ø•¦å`PVRRR\PP¤J!"ÆPŠ‡Ç–—Çf$ÃAfaByyl¸<(˜Õ4’Q@¨¶3jtù'g§!)ÁˆOÿäæ9Yø¤Ïœ›WŠ ¬ ’Ógϯ oA/^y úRð)€ÈçæAV½@ùÔe;€`q v7(LH?†#T& ôI*Ò Ü¼©-IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_256x256.png000066400000000000000000000202431356737523400212070ustar00rootroot00000000000000‰PNG  IHDR\r¨f jIDATxÚí] tUÚ-vP–,„°'ÝDÈJH:éî„ÙȦ²¹€,¢¢²%AÄ ¢è¸à6ŠÀ îã2¸! ‚€$Ö°ƒã3Î8ÿl::îïÿ¾J%“tÒU]Ý]Ýuï9÷DbÒ©Wï»·ÞûÞ÷^I€(›Ð¶$ÏzeI^ôÃ¥y–í¥ù–Š’<Ëqb%q7ñ•’\˃%ùÑ7-n±ßRÓw (]šg½‚bçö’\ëšê8±n¡øÙAÿý*qmq~ô­ô½tÜ-ƒ¢4×z9uÔçD¡‚ß³9”æ[Ÿ.͵Ì,)ìƒ;ÜXšk‰,ÉOý~?$èëÿ©Š™üè“ÅyÖ,ÜICujÔ0êœUŠßÏò(?³,'§5în€ ˤ–Kò­i4*¼‹úö ñ'b䘀‘†pÕÃ|¡7‹ó,ÿäá ® „éBin¯ð%yÑNºî©Äe%ù–G)ð_ªžþXOÑ×?ÿ¡ðÇFÚúúÏèëâ‡Êð÷q2Ä;iˆ<½xx¿Ì…9ý»ý>̶ÙÚÐð}Lq^ôoèúÿâØ°†òŒ ~¶{£ƒë“†‹—ÅPÐÏæ÷§LŠ -É$ÖYB×öW_܇eQ(Ðßo™àÃÀ¯á N•ÅDøê‰V\`É&ZI{/ñk?´¹9~-_[¾ån1 áköɨ‡ú€t4‚9êë6—æFƒý>ìžïÇ ÿ†Œà)o$—ä÷éIŸ?ø&ñ+ ¾9~E#„môD¾yqNtw½ïÏâ|ëeœ¼¥¿ó_µ±8ß2 ôÿ`¡‚Ko”æFex:‡çù;'šPôMÝŸ}ü¤öÔ x FŸõœŽI_OFó¡@@®uŽÁ‚}÷’\K¾»×?a‚ÔŠVÊ“þÇ ½Ë :qkñð¨"ÎлmŽùÖ‘ÊôÇ8m¡ØƒýøÉ³L4h ¿³´ _¢«ë^ZÕƒ¦eJÖ]˜”¼*qÇ¢‚~Ý\Þ§üèAÔÇïñú9ö @?ƒ+ú >ô}®î°—«Îª—ç8`Zá×ç·ò°¾N.Eɬ5ò¨¨´ Ú`í;üKùi_=wý‚w]™Ék÷ÊjÇŒ~½¾ZšÍX>x@Ÿ’¦nPžQ  ºb A ú’oByFIòN-$èÓ@t1”g˜<@ßx%èÓ€BK2”g¨i€õOLÐGü3…\ ¨ÎXðôQÐF(Îx‡à}2üÏž Å ¼ÕÇ[bAsò‡@8Áœ£€ê ;)ˆå?3bI^Tôî@ËUP𱋂>B ‚Þ: 'I½& Ï:Á z‰CaÇí½;(\"`A}i€ó ÷¦O"`A½Ï„²‹‡Çôö[Pßù¿u:”X£€ç¸ >´þ‰_;UÒ( ßz™IÎØ½¿÷!ˆ+ùÖ—À ‡üWqžµ ÔˆP½Mø'1èAáÏ*()°s¯!Aü¯7^jøÒªßø-‚Ôü[ Å(ÀºÁ ªä˜û Êr:âÄ oý11ÈͯF`ƒnò¬¯Þn ø6!¸Á 6Ÿù·^µèŒ]¥N±]¥þI]$[|)7>D&Mˆ •FƇJCèß)±!R´M’¼æ¼|’+¿}Aº<î+Ïò¾·âc›cœcc^Ž}Ò€¬Òkƒ5ÂZ t±÷¤FMO •K‘v$„JŸ…›ü!!L:O_ߤß}(1Dº.1Lê£cB° ºà7ußOè (~ûRüN•c8Tz‹þ}AŽm÷uð)k‡ âQúz=kÊТOˆ:ÒEÏ!UÑH5ü˜Œa#}½:&Lê¬õ:ynG]i¤À[>&I<µð±ù‰{ÄÎ×6‰}ïll—¿îܼIl~r•xzñu¢ll²áEtGÑñØÜñâ·/;^Y/ö¾õšÜ–ýïþ^|°õ%±uíbòÙbå„tý£—h+ŽIzª_C1ú,Å輤£²ÆHk†5‚èh©= méÉ}9×Ä×è¢/ÖñFü—nôf>ÙzJ—¨½Fåè°¯ülùVñäm“Ä®×_Οüq³¼xá‚,"6 þ}#‰çÁâ~-Ξ:éV[˜½÷†x¶l®¸cD#´¡œ–U5¤§Ø£Ñé$ŠÅ-rLêß?É#†éwÄe¤¥ñ¬)ÖV@ç’B¤¡ä’¥Ô¸mÄ/tºYÿ¦xd`É¢*o¹Ö_Á¶æ¦Ñâ =ÝJc<¸g‡xtÎ8¿ çÞ)ƒÅ¯¿èQ[NTVÈ£?šÚ—¼…ÜÝØIì"õ“‡æ¡Ò—ºÄp˜ôWúú{bI\ˆ”mè'¼®Ó†0)>>DºEi¼§7óGÐ×Á*V|ºe˜ŸtÛÖ?$.^¼è‘`jGô9on\#»ý1‚y~ÕíâüÙ3º´…¹çWÅŠ+RýqÎÿnÎë³”§ýO?´(æ9öÃ¥8,r$©5hÈó°<ß÷ì¿“* tÃ÷U•KÞS7±Ô%ϱ})œ¥…1âÝ—žñJ[ªŽ¿šžï뢟kš~ˆ”L1µÝØ¼È AŽqŽu(¾$…JIä¶+”ü¶yT˜ôlS+¾:A˜Åxß.¯¦†G|(î¾ÒæñsÞ›m9sò„xhf¡M úáÆâƒ†ãQGÏyðÄ¿@ñWÆów(ÚÄ…INº™ÿ®¡¾ ’Zý²í“¶œ:~D¬šœé+Ø]768Vh¹˜bç ñöw^þŽ—P®Îˆ‘¤vœùO ‘ÞS»ª@r€suJƒ“|\o=û˜OSÃí/<åµ¶lºûŸ¶…§6>Z!ø²¬LjÉqAñ•@Cõ ‰¼Jâl-«R€ð_YsýNEG}ËÎN¿Þ¢47zš·ë‰ùWùT05üõí“uoË=âìé“>oË«,÷É(`É0ËÎÂsŒ¨ˆ§ïhˆÿž®B‘~Br¸Ô‹:â~â¿TŒ^¿5»ï}^+ĈÃû?ð‹-ß'ÏÕõlÏ{¿Ýà—¶ð*ÃÊ v¯Šá°(a‹l}@…ð9ÖV¾:Ïl{ ¨SЉÿt§mÝZý{îà^^ ªu¥3ü"˜þæÎ›tkËêk‡Š‹/ø­-¼tê­~š—Õ[8z´qWø_±ð“ºH¡P\S5ÐaR!Í£n£¯+éßO_$¾MÜÇówy&m¦'ñ«ô½Môßwo Žàyº'ó¨„ÎRX|¨´Š>÷?ÍuèÀðbFz¤Wkÿö­þ‚8|b‘ØwÈI_KèßÚj8ñ¨W[~¿îWš®áÜù½âÀá1bÿ¡¡âôÙÍš €« —ŒÓ½®O‹”cÀ-áS,{"|ŽiŽm%Æocžb_Ök¡F¤E+/ÊÚ¡¿Kß¿•5¥çž]` •ºpÉ/ î)%qòoK!Oó }þ|.îQk <<£ß[+5¼× ŠÐ}¾¬µØçè‰bwyT-VÝ«Y8÷]3D‡‚Ÿ~âä±Ãþþ9±¿2»¶{*bÉöknË3%Óuí£kS#DbX³âÿIyHõU-vŠY.iãy%–Ò­ò5T*'þšK„=Ù£ »Jè¦ÜA°Wåî&Où­2rX.꽄ØEJ¥ëÝÓdN€L`òÀpÝ‚kcÙMA~áâqY(u àÊ2mÉ·çï¹Íã¶pQŽ–¿}üäc¿h³òøÍðösOêÖ?“¨¯Ýˆ·Ý¼m×í¤t¸&-TžâßúP?p|—òVbï ë%©­¼é!TÚ¥ó¦Oø2ƒ5nvR ÞRI¿ó·¦>sBR˜>K›×Vêñ¢aVZ«éó¸ZÏÓ¶<·r¾¦¿}àðå Ú±§"ŽÌL[épå¾]ºôÍU‰aÍ×å‡HS9fš-Vã³-ª÷|bMüL׿“—ÊY³ ¿'©«<Ÿ‘þbºâqjøí‰Ý¤È¦ÚÛI 'ÃØÐ”‰é1à­¯šÖ½NkÔ›­yÝÓ¶l[÷ †‘ÌIºnk£m9uf‹¶ÑÑùs¢´ ŸGm¹:¥kÓâ •žáR“é»ü¤•ª ­ Öl˜´’c^ýŸ÷öW'ðÛ órÀÇi¹ø!Tú¨&Q'‘±WùÇ•ŸýÊG ÿž ë·<ìor¸&å§D´üÚUNàz›g‰A.ËÕäûe5*šý‡r4î²+÷Ëòß™³ÛmóXÕ}š§eãinÇô´H—sþ´ÈÖ<2x´™€iJ>ÀWÓÞ¯íS´´·¾Î”â¶J%Çð©‹ÊÅ/å„£»; yH-;!—ÞÒS•+J—ì\=0RºÔ£i=¡•£‰óˆ°`£øNgÜ.幺ž9}ÖˆéèruàÆŒžšƒ­êp…¦ÿ°"¾QÑ|X«i5àtÕ1 @KÝÿÉ3›\@åñ[5€ÖÒàÙÎ"É…ø‹.ë$ ‹¼=ÜÅ Õzç³da‡J¯(5,¬…Ñ\ÜÆñäX<Ö¨¼‡¡Z³ãXÃJýZÒÄ Cïä#]ð•ÊÉvw×ô›™ÓâóÖlÊ.æà˜fë&E´l¤N µXÓWSÀ«Ø§)k¾»<Ú¥p.hHòÎ:O àýW7jÈe<ê²iš£Õ´lvZ0´/×|4è_îóº#½âáý2?T:¢ƒØÿÁ»Syc¯˜q¢»ÝG ÙB¤iJÙï§tÄ6þ¬š.Í·Œ©éü[³ûˆ!}Ú7øœ¨¢8W½hÊw½£¾âíÂ!—¢‘ à‚ú¥¸Ê½»ü²—áhÕJ—í(?2QóÙjÏ=à¾ã>¬ß¯ƒ{µó‡ôùÅÏÞ^Ø;¬&›¯œá§5Î>•® ‘¦*ñÖ2Öì ÔA7ÑÞ*ïôS›#“傎Ò\kÿz‡Bˆ1±]üÎU ¡ªEóîËë4-6mÇT&Ÿ/詼ô@±ê¿{ìäý.ÛQqdжeÅCT_ûÔwõûsl\¹¯ëýìçœüS†Êß«ÝmÊ¥å4•½1®³têËB¤žÒ%œ£à Í-ñÕ㟓Â[kìSiJP·:ŒG7eªË¼xÿb A~Ñe朧­ÿsœüyY'wEÿ² 0ڛﮤvÍØí£ÀFʼnÓ'Žª[·?»µQÑœ9÷¶ê3õøe#znž9ðÞª®áб›4UÓ4üWsüy‘2¤ŸÒpÈO}›k½¤Vøé}ÂDnj²Ð?éi‡3ú÷^Á±È™eÏÉŸT–ËÁKÕŠ&VðòcÀ¿¬¶ø‡·?†J«±ÿ¨W!å‡ÄZ5w\}ONÉÝÚ×Î÷çéÝ x¦$wÉ(xÉÐí:ú{nUýäü¨²ð¢á«-zá¾Eºo}hÖUgœ=÷nƒº®ðæÓŸ—ö¸¦ êÚàÿÝ’Õ[8•}ÿÉ‘D.õ¹^ñÃ±ØØôÒ“ >Šfî ¸cÃ…H!reSˆtÐ%’ƒ¨óòèÉ­WçհО.ÒúVïKhÕhÒˆW.í¬j+­Úsøi¿§b@íÚ3çv¨Ë#ГÚÓšy—ûÖ?¤î¤âKêä1x5á¼ê‘Œšê¿Ëtצ4ÜËqsf/‘¢Ì÷Ó©¹¯õŽMrlz©®Ÿ·ÚÏáí÷Æ}ÚGHùd5Gs©ejŽ¢ ͦ{çÕÒnöèˆj£¡ydcåÀ3íÝM*¹"¿ïäÑJÕI´ã' ùò•'é÷LrzõÅ&j‹œ¸,˜·_¼xVuáÏ3Å×»¬õ 'öꟗpS”JO{T„ÜÇÞŠŽÍ”½¹?àŸdË=)É÷ äšcšŸ{ssDr·v"ß›â¯Ã´^k78zx¾§~F8{ªÊ«Çfñß0Òë‡gò HŽ–ïõú1`¯”W{zwöªøëš@rd{ooú”ë_ü.|.‚P6yµÁ‰a-Eî $ŸˆŸ9Ê‘&r­ÕÉ$ÞD¢‡ ðË3µ¬ãÞ¦~ß ¯^¤Á5ùüo´…Ÿü¯®¹Ëãkä>¨$w‡÷ë$F9Ó}?«‰á-½¾c01TzÚo/ å³äíˆ*²÷Jôrš*Ìà*ª¤0)ƒË'yÉ„Y“ÿ›¿_–ú€¯:¯†Ó²“Ä Î"«w;yãéiP®š”!¼ÿ–îgçß;Åg/Шå—'ˆ:Ÿ|¦ê¸xzÑu_Û\ê+î3î;Þ 8uH¢ðuü¤Ûîm,¦¹ˆˆ¿Ï¥Çû¤…LÖ‚¢‰åuV>ss5a¿¦=ÿžŠŸþð©F³—!ÒAv&®×ç7ú¨¯”IRK^×/²Û‡ÚíWÓÍœCüÚ×8Êa³²ãÅCcÅ”´¾";:DU@S¯ÖzùW¥Ÿ±ÏÕy¼Ö¿´ð2¿¾˜O?>¡qûs]¾ÿ»gå|‰§×Ã}ÄŸ˜ÒSÜL}Ç}È}éëøQbvΧóŠ"‡#^k^’¤¥›•í¼]œGpÒg&ÀCŽ:oNù–÷Jsò·ÜzœhA7k$ñyâ_ýÐYn±È‘.& $fKò<{•õŠñ)bó“«TO 8Ñ÷úS÷ùä=€î¿þ,N.ÕU{ ŸòÖ¾¡H—ë¸}X?q…=VŒÉH3`ì8Î:+ 23»yZ8ÇEEJÂ}Ws4Ê}2‡)!Ò:>‘T÷˜ÓS~Ô»ýˆQEiN9}H‚ÇFÀ#‚'n(^zµ¼dXßøy|ÄØÖµˆ'o›ä÷'~s¯ çD$ÏáùUß¼ƒ¯níï͹~}Ù†;owMÖGøÃcÄ”ÁÉ,²@ˆÿȳÙtYÒ“WßX‹¤Iâ>Ù£¯Ç‡äää´§ñh  ¿>ÇfØÄüáú¿¿ÎÛ/ùôõÍAïÏ-æšþìD1Ò?C|Où9MsÇQ›^‰¿#Ý€.þÚáÓ!nΉ ÁäÆˆñ™¶À§óaÎ{™gÛnBB[jøö`]˜3 &à ÎÖ_\îÃe=o³Ðáx}´ÍfŽAÔàû‚Müµ+”‹s­†¿±è‘GÉKmœ½vÅ<™üÖÎ/ðùw_™æ•áºnâ§éÖ¨Àò7Ç­A?i·÷a·¬À¼6k ¡³ææ1òÁžjv&ž;}Jì{g‹xqõ"±|t¢aÚÂæ::#]qü¬ ö§ÿsÁ,~e¹G,ÊígÁðSÞÓ·úò Çw1†©]Mæäñó31+(ÅÏsjÜ—ÁnL®0‚`vnÞ¤K…Þú¥3ýŸôÞî­]˜ ~öëÓ¤ÄÏœš=H”Žˆõ;ïºq¢Xµj•Ç\6)Ûïm¹aX²0Küh­44 ޹féÀD‹EP“Ae(´ÛçŸØí«ÍÒ±}ûB´:sÝS³ÄW ˜½ºv…hu&ßSÀ½Á—°Û›¥;´kÑêÌKÚ·7ÏÀáX|#€ŒŒfèbÝë¼ 4B‡cSÐïTrgƒ¥Ó'%‰Ké©aú–—vè ² &ñŸÚ¹ƒQ€ÓMþC ù­={Š–-Z@~"ß{îî‹Oü]$ñ÷•Ì>‘Œàý+Ñéqq¢O·n¢u«V¡AÈ}Á}Â}Sh¬ CEÇŽÑ6[WɤhA7`݈?Qì9))"=6VôïÓGD†…‰¶mÚ@p'÷Qwê+î36îCƒšÂ'ô¼^ ”sü¼ ù˜0»}<̓^!Cø‹‹Æ5|´2ÿœÞ’#Â:u.¹D´oÛV´ÀÐ>x–©/¹O¹oÃ:w–ûÚ sxŽÝ»IÔ›¨wùœø2ýìX›ÍÖF\O [¡Ó™Wät‘–6 î ›‘Ñnä!Ý^žš*Ú´n ±˜„Ü×Üç:@Ÿr]÷V‘ˇ{p S=}P¹v{¸ï 7þ>”žü†¹È#êÿt˜ÃWŽÊÊ …"ý€1ƒw¢Nø'/ip&$Lƒ ÌÉ̤¤éž¼vއý|Ä=”èïeE‡c2ñ3•xxdFFýzˆÁ´ìSh·'“ªŒOiX?Ê3Z"Ñé¼^YZt5´ûÿ? Û®*ûßÌ0€;&´bAS|ì"þè2vŽ÷Šìö©kPœ‘“ˆ^*ï;°Û§ØgSÇ]KN?ÄE¥ ÀäP\©:2==›cFŽêrrLAYÁ  €€0Â` €€0Â`.!ÆŒ#&Ož,RSS±µ˜ÅæÎ+Μ9ó‹×koÙ²EôéÓ‚ƒÁl3gÎü…ðërÿþý"** ¢ƒÁhíÛ·Çwi0Ä––Ö¤øa0 ˆ Àétºe0„Ð¥KqöìY˜ 0kpùòånL™´mÛVlܸ&ÌhÌ6mÚˆuëÖ©2òòrA€@7€xæ™g`0ÀŒ€&7˜ 0¹À`€É &Ln0`r€ À“L˜Ü`0Àä€&7˜ 0¹À`€É @« TTTÀ`@0L˜Ü`0ÀäPck×®… À3L˜Ü`0Àä€&7˜ 0¹HÊiÃ6lPe{öì‘ßU‘À7­&°`ÁˆƒÔ˜ÀúõëÝ6€­[·Bä0 X €9~üx· `ÇŽ9 5j”8þ¼ÛðØcAä0  @­ø/\¸ RSS!rè VüÌ™3gBà0 Ð  ¨¨HµøçÌ™qÀ@7ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`RÐr†ßìÙ³ ñÞ~›‘ÙªU+`\DñŠmÛ¶©ºf‘ïíK/½¤×‰Ç0@?ÈÎÎ8ñϘ1# „_Ÿçι¹¹0ÀÀCÓÝ»w”ø{÷î- )  æ-ÈíÛ·‡þ7€„„„€›óêÓ¿.‡ üoYYY%~fIIIÀÀ¤I“`€ÿ  W¯^%~æu×]ð™™ Œ‘ܸqcÀˆŸ!Nž<°âçœK›6m`€1 22Rìܹ³ÑuΚ5ËÅ0cÇŽU½raVUU ›Í†UÀ8ÀìØ±£˜7ožxíµ×ÄöíÛÅš5kDJJŠ¡+âXH6l‡6¼ðËËËå{jµZQÏ@”0À@a „0À@a „0À@a „0À@a „0À@a „0À@aÀ/ !˜–Ýþ@+â÷ƒéø±%Â`|A˜Ž;ö@ ¦A¦ãu{ î4à Da–cøÔGoâ!Ž ç'Ä^w 1pVxD´ÜJŒ@˜ÍÁI|ˆ¸‹xšø1<­$û$:Öøÿ^a7šù‡•IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_256x256@2x.png000066400000000000000000000426371356737523400215740ustar00rootroot00000000000000‰PNG  IHDRôxÔúEfIDATxÚíxTUÚÇ/EQDH¡×™!”TJȤH&! Šbt±WTl+- ˆF”uíŠmí¨«¬‚»bAPzHàÛo›Û»ºú­r¾óÞLv#’IæÞ¹÷Îï÷<ÿ'XH&÷Üó¾ÿÓÞcæªÒ¾I󊌫(ò]TòÏ«nª,ö?PUìFý™üYëîÊâÀ+‹ü ªŠ|gW– ?'T]è;‚'‘R]–Ò¹b\JºŽ+Å:¦L©(öŸ¢ãÌtýç+*‹3ªBþ3åßÏ ŠªŠƒËËv<5€(PUâª;Û ZÛ´ök©Vèw•E¾••!ÿ]ZÌïÎ.éqO Γ|az'‰tR¿SÇŠW*C¾úëß[g>×úHë^mŽ»¼,¥O æ÷УüeQHúMé[­]•žGªŠçŠáàéx9Ùûލ(ŒÑý~ŽNöÏWûö†ã€U1æ÷Zó¯Êï{$O  *Š}¥ºÃüÍâÄ(ýQë¥ÊâÀU2õG‹¸9žº˜S÷!ÿmá‘ù×±ˆ+b4*JýÃh€ƒuÖñ tgùW “ÿ÷òÿJf*‹|§VõI¦•œ<Â/l_8ZøêÊoîÃÿvP<ù;& ÑŽ›Þ©.Ù:(ù7¶d ƒJU±öœñ)i5¼s“ú'²qËÝÈáŠbÿYžçZ¸no§jÙ” p•E*‡wÜÆ´UF¸z{‘„=§Ð׳¢89·ÈªùÏ%›º Ç›¸dô·IkŸÖou‚økíú¥6yÿÝíZk½©õÓÊbßíú{WÈ)“ªP`â¼ñFÎß·Ouyúá´Œ}Ì/ØO·é忯^gò›¡ÀU´ Ài£;ÆÿºÐ4T˜9vHsFgTWUâË5Yû¯÷ÜÞTµß‰ï@Ø4l¯‰j3R8O6œU•¥t£E[ϼҽꌞiÈö»9VHÌ£E4æw'ÿµNF'³Kv§u9’/ñO–Ú•!ÿýìÖjýÉcmfÖWùŸÔ¾Z›„æ†úõæ 84æ&¾âÀ¹ú¾­õWÞ‡y!ßpZ@#kê^ øaÉÔä+² Y6'Ì]¤8“þZ^¯ý¥GÛ=’éà_Ëq4Y“b2òŒâý=©®6ÚVù&„ÿË‹í^ò]IäÄò?Áþ7fQ£ >_Ü»ßPݶ—êßû‰ºz –ž·öŠö‡ŸÕòìæŽó‰›™À”¾:1^£÷_x½%æù4•¡Àkqà¿­*ö¿QU8Ék»ÏeÉC·å4=ºÔ':ܤ_˜&¹Èwê¬ÂÁ]½ôÎHås㦇¦ø›T‘ÿ"?€s7}\öÏdã lxsc»Iu3©‘^·áÍ¿¾mË;Û ‹Ýz¤Ì¬±ò]©áÏã´?%òÔ€ßÅyPÿ§\dä†uõÓÌuëbÿ—$ã˜ës9!QUä?Ù åfeICêä‡ßùxn·ßù0ÞM°B*™9kj¿ÇQ2ýÞ¸GÒw°‘¬ –Êò’ÓÌ@UÈwle±ïU—ß‹j…Q"?@ø_‚Â÷´ZŽÇÅn¤ï;B~~xß?i×IŒÚ ©Ë[/¥‚þ ïÐßÓ>"?@ØE@8¨Öʵ¢†M…C憣*‹ü‘ô=¥¿Uùï‘ʉ¶˜G9ÆW˜ªÞFžýAµ›È`Žü› Mj“”žµl]¿Ø?=¼‘gíé©gß™°h‰ ìE¨Û¤È³nBÛˆüu€)ÂækU´öT¡MÅOô÷üÏ5îô—Ê¢Às‹¤Feæ¨Èª*öÂsmveÈwˆü’ˆê¦œ ‘#~¹%Sºu×¥úÏ4ËÒòQøLºŒÜeê>âÄ/e¼ë.äá9Fd|ù ³à<‚B O “zúM'~ßúÿÇç®Q3Ö¥+C¾s¦ggÖÔû4¼@¸T/»ú[VË¡šÈ`.N# ´î,¸”ËËR:4¶¾o\‘šó<'Ôìʃ¾+«'÷îxàûd ù*Ø$ÚÚ›#çùd±Ø—GPˆŠvUûJå™JÉØÊ¡¹ÖËsA-Óïev®þ‚¢ÊЀ™AŠ’JŽ'òueA)#U}X7+À³@Ñ9F¾¦™g­€²”nD~€ú€Ô@Q . À„P<œà!â4 ªÈwÁ!äùéÿ¢ÀuD|€ï€ù„÷—œHÄh¸PΩsÓBÈÛÚßœºñ7 ò¿E€@y¸ÐN"=@ãûæ BÞ]ÿ÷ßC¤h¹œ† òð ÀT"=@ã´‘êc „×ÿ¥B'aà ³¾§ !¯©¢Ø¿™p(Pä;•`ò`À…Dx€C ·×q!ä½ €"<@“Ëþ—!é3ÙãDth‚ŠbÿY „gŽÿ…?!²4kÀ— ;Íׄ76&Ùš¿ ð:!äýãªü¾GÕškЧ8BØý¿„ˆâ˜+Šý%€ „\nJˆèÏø"€ „\¬ßW¶'šDHEq` !äâ³ÿwÉZ¾p7!Dñ€ø3ó $!j7 Ì.Ø]w¤¯&!Wÿ)öÏ&‚´z€B®Ò×2x!z´’ªÐÀÑ„‹Jÿ.%rDo/À BÈ*8ž¨ ­Y€"ÿù„ó×þ}{ nþˆÕ“{w¬*öÿ™ƒr¸æ±¢½ ò/$¸ „¬/®*í›D´ˆú2@ŸdÝÁ>'È „ª»‰ÔVÍèFA9PûçŽó!JXe&ø|º£ý›`ƒr˜^"BX½Pì{Š`ƒr–|…Dg‹©(õ“é6BÈ!ÚDd°k) (ðÖ±K’©Ž©3t<}Aý»‹òÀ¯ÃK e’ËÈèÑÅ¥ÞZ»´¾vQ£7¦ÿ‘eƒÌãØXÎT&ÔQÞ´4EÝqÑqê™;¨Õ¯?¯öìÚ©öíÛ‘jöìV½õ²™€îš1EÍŸ0˜g‰¹z¬z†zséCjûÆõ·ËÞ½{Õæu«Õkߣžw¾Z85›çÚä™ÿñåë‘ý8ðëØùs—Ç~É]ŸJ.“œFfoá ‘ÙÅè$ZªäeZwk½á²YzýA¿Üɺ‘þÕÚÚoüܾ«[õñå‡oS;·nŽ8±4¥]Û·š£R1<ëÈT=e˜9ó²þ½7¢Þ.{÷Öš&Of®ž”Êóþž¿®.ô%Ø:µŸd”¤%˜kìî‹ë’‹Þ›–Ë$WIÎrâr°§ž`$è>&#Á¸2¼{sµÖ¿ÜòÒ˜›VŒáv=¯«òû©;øV¦÷ª+ÏU¿ÿfÔ“ËÁ´qÍ{êÑ›3 $˜ƒë¦3 ÕOýDÕÖì±¥]vºC½ôÐ-jáÉ9<ÿ:}k×ÔF²‘ªµ‹FúÿÖÚiž¨ûܓӻ=ÉÄNÚj‡k'9ÂÜ0˜d<^FØïðk7ñùŒ#¬ß`Þðx]×xþ:¿o[â?P[>^£–T_Ê~ôã3ŽUo?û¨9:E»ÈòÍ+Ý¥Nï£ÿ[$ÆéXwŽì¤wxL–œñ©™C’Œ Ìœ¢s Ö¦ ³‘džåL2®×Z©öŸ}édú릡 †Ï⥀Sâ-°ÝxúXµê•e1KüJfn¿pbÜ'þ«'UÏÞy­™€Ð.2#  ç•ÄåL͆êòtK’\VïcÛÍÕn­þ¡sÃ;Z S‰’3ÈœÞWÞhX‘‘`¼íÀe™jzJ޼Xx4ðî¸ØÜ§ù²ÅÕª¶¦Æ1É¿^µµ5êÅnVóJÅeò¿óâÉjËúÕŽkÓ ½÷†¹GíñO™Œúà+Á¦cÙÓZß8,Æ~©?Û[RG&µ‹1’õú8&¿¯q¤lÌÓ/õÜ ¿~ë i¨×Ò±ÑþÃýÅËAíú“sÌÍ^NL0 µîÝ×Íîñ´ó³Û橽µµŽn™ xäêéñÒ.7D3¾HÌ’Øå å×oulÿD½1­‹QdÇr+¸”¡GÉIÆ©úeYjžëwÆ ü¦TŒÚ^€²”næY_4Ùy¿cËFÇ'ÿ†'î½òïOùOJUï¿´Ô5í"’½U%ß³Qä2*‰_ªòÕ¬3ÿ*³f,gJZº©0\rø^­_9`Fà%©8Øú}¾¼Ìî›9­Eçøc-?ví%Þ=ÚwÂ0µöí®kÑ»/üÔܯàa°/ Sý/;¡"ŸÖ=2£›m‡‘Á š´Éìbd›› ëNÄê%—õ´³:Ý[¾ ðc/²Gæ_èø©å¦ŠÖÈùwÏ-Ç”ç˜G!ÝÚ.¢5o¾¤—îY —‡EG2º=¤¶IŒ—Mwê˜|¬å.½¸ \HZ’‘ãs¬ŸËÏoÉz–îðz-€Ý?ó4W'ÿ†&@*ßy©tï'¼íúvÉž’ùeC¼¹7£8pRs㇌®ÃõWþÓ:*‰Æ2ÄÙAjn"”KbQ¯:ɨIïb4»xGy¹ÑNwø/½¼îºäU³{—'’Lýr€··‹ÔáÿÈ¥ÓþÓ;Ï>æÉc‚¡ÀM͉á Óµ±¸gEÎåË&>#•TšDNhgzJx#Ì~[÷$Kšs5eU‰o¨×jÅË&:/%‘ìc¸ùìñ®n›w–-ñ\»ˆž»w‘÷fB×7Ft2º¥%OÚ¾{?ÑxSÇÔrv6v6R¤°y€Å„t'=ýÓÿ!¹—.ñYë±fCmZ»J-8ηÙÉ^¯¶‹,ÓÜ?ët¯™€_t­?Á8SÇ–?Û8«ù{9–ÑÅH&w)O¬l¸è=³ ƲƒÍTª½´¤Ž»W“L½¤6¾/YrJu?«$HÉæFOÔ8à õëdüœ‰ƒÖt™I%s€çÈL6††o4ü܆õ[)ÜÈÀå^Vr'|¬jÇÛ-7í3óv^´ÓãÏ?鵋²Fÿgà"—Ý$¿³!NýS6ôeu5†! .HI2:‡wÑþÚ†ö@Šath0°ÓõJ'¯ì,oÖ%BëW»æúS7͉›vq›9kz€ÿ‰áö–OóË)&)¼FF€¸]›u‡ØaegËH46Ö¯§yá6ÀxK2¢åw/t|»Èµº»wv‘½r4ðâü>wš·“Z›ükeðÃ4?ÀikN¹%«¬ pÝI#]Y‚9Ú¶a½«ou<)=ÁÊÿÜÙ"7ï[Ñ)Çû:ªÙã¸.PÍŸ0XmßôqÜ€];¶©k&g8²mž¿oQܶ‹hÉu—¹®?Í?@û;Zµì¸–Ä–­g%}Ó“™VÒ/Úir|Dë*ýçJójßF¤ÿßy ÆIÆyæÑ¼$£DêûK6ú8õòÙɾÊ2ª4¯×áꊱý\°¬8'Fç¾kÔæí?Rm(Qm,U[wÈñÃØœ@x|á厬Ç‹e™»žPk7ž Öl§6n¥Û)vûÖ¿÷†«úÒcûªÜ^‡Yqy}Z¢QæÄX*1^b}Fc”Äþp8ßÌ :7,o˜9Er‹ä˜DcšÄdùfÒ¹ˆŒlæÔcœ~èšuŒåúëK RÈÎÔDc»þó ýç;ô×ËäeÚÕ\hícø8Úèßÿxýy>æï;²[;uqA×­÷^|:ÉÿS3ɼ¿nÀw´nS¹þï{lÿ<½µÂy÷0Ì:Ýöç°qëÜïµÉêO ÔžšbfÜR¹ñ’üÞfßrüÜ^ã£å8aj¢11-Á¸\ÇpÙÔøŠÓëŠ YµÌ!9is8GýXÿ¬ $w5§2+häAI‚ _®ó’®ÞmL_Énz³æ¿vƒR“:;Ñèb÷ nºÐ(žÏ–ÜVìéüæS³crÙÏ'[¦/ÑÔkÃÖ+bR…îÆÓÆ8ªmV>÷¸­Ï`ëŽÅm“6™¦-à…û~äø~tAnO³ÏG1.þIvõÛ=@ž`$„ï`™)1ÙŒÍ:F;0oÈÅ/jCr­,‰pì1œðõKs’n´Åú¡l³¹n~´kUï+1uŸ›‘l¤Ú2•¥‡þ¹7Gë…ÏHj£ÎÑÍÑKnȳ½ÚÛ®§šhêõéîlÿ\²ÒIû2öì²/áÖÔnP«Ö=d›lÞv]L ÀÆ5ï;º>¼›Ù×£ûþ%£]©ibÇ ¨ÄV‰±:Ö>>6ý­‹sÆV©µ sà‰é¤¸HúY] ¿8ÅpIÜ»´ñš»Œð¬ŒÔSŒ–îH2úéŸùD´ Ô©YÉŽ ^o.}Èþéö¥M€µ³ýs½ÿÒRçÜÄxé‰ö&Ùm³›l“UëÓUíÞØ\åÔòÀÓ†wÕÉ?jqnEf#`é>¯nFOY£—BfáQ´ò¨¾•È2û-•b=•ôå% Oëïðp6¥ÝÚôÜš–hŒ•«ƒ-:10Ú\ƒò¨ ¨ lßý/#û¦M½víyÍöšN9v¶|ñu6.ìhrô_¯-;nЉxdÁEŽë?§f&G­ Xf’‘oE 3¯UO0ŽÑ#üÛ´öÄk¾ý ²\ fW&}³Ìm’q~¸¨Íþ8NüéæÖ Æ ËóFqÀL©­ÝÚÏYž™ä¨ö£i1Xû¿´Ù`ã6û+Ê]Nh›_{ζßyû§6»Mdö&àÕ%‹Õw¤/G!nýCfo£=€‘+~uÒŸbî«J4þH~ønÍm>e!]£?ÚO6†êQîýúƒAã5KÕûˆl&ŒfÇÒ/Kïð²@ëL@–sLÀ}3§Ù~ìoÕÇYÍN6~œ£ÿÞ^{GšWOwDÛØ93³~Ó´f·Éûë|jOÍÛ Àš7^tÎÈ?+*#ÿZý£9Ò׃  „¤:)y Y’Ëãîsâ…Imä<¥þp¯1Úo•~#S_ÑÜD®ðóÖ|®Ó†wuFõ¿›+ìbßóf‰¦N{j>°·*à=×Ǽ]¤(‘}¿s­¹¶I›lÛyO ® ÞäŒ #ºµvÍÿW²Q;Zñ(-ÉH­þ-ñ¾åût\U ”ë’Êá#hkîÄÎîmtlõÆËÆQi‰Æ-úû~ÓÂÏ¢ÎÕ=æÁL¦Uí=fv{Ä`û§÷ÛúW.<æírÛì3e5ïDÜ&¶ÎˆÉ2Àµ' ‹y]ÿô–'Ù }c4âOøfÁòðÆoˆÑÕ6y¶¶ýb•Jµ'ÀrýEf¢±$=Ùêï·«¥GÏq»Ï™¼ùÂ$›ËmýŒ«_>æàÞžj_½ýwGÜ&k>)Œ‰¸ñô±1k“ s{©Ìä–õ ö<ì[©®ÍßáÑþ_‰ã–o\ž°8ñ'ÃeSB¤ÅsÂwÞoÑ/Ä;RäÇ<"W·F-Ç;¤z”ºH­ÐšÞÈ&®ÐÿïüJ2Þcþ½ã!ýÿ=¾4Gv¿ÿB6ªx´‘¿ W˜ÝÚ 7cúvx¾%#ƒa]Ûª£cW1pÕ+Ël àk7Nˆ8Ù¬Ý8Å^“òþ›17UžÓÊMéƒõ)1)Ù|ëy%1iKÇôUûµ¬ÈÏÄAG«¹Eöµjš?Ñ«ãËó.>£ßäfH­ÿ çœw͸,¹¨A.kPv~~}k˜Ó¹î?¹Lÿó“áœøR8Gn çÌHk¼¼§?Ë0+Žò%†?lÃiä/Â%s_–r‹úÏsô?GÖS“Œ¼ôÎFJ,v.š¥ ;ÝÍrús˜Å†Œ+M7Z×X»z Jþðº\Û–<ŸŠâÀ˜‹ò{©` j€çôl¯®*ì“ÀöÑÛ+l à«>q²ùðã<[?ãæuÆUq¦7Ÿq›ˆjj×Ûnîš1Åö¶¾™Ó£}‹úµÌ„¿ÏÚ„•¶æy}w/ÿ֜ծË·‡ëÕœ(9Dr‰”¥E)xÉ¡’Kåè¥T4‹ÍI®­+qürøxýß,&wKÎŽNñýË›çŒÚ©œn~nFO·×'ѰÔ÷—øú÷º(\•IÖ©>sËYQýõ‘ªßÐú[ÀÄñGúsÇôí æŽ÷ÙÜä¢;kÿËòÈ“MÀ<=`Û>…OÖÆÜ<¾Ð¾RÈrSK À§»_²ÝÜ{å)¶¶ÃÜ"Ÿ*Ð}3âQÿàÎf,øÏ÷*ò¿Én~ó¶Dc§[6ZKŒ—X/{¬$ö§v6I.p{>“œ,¹Yr´äj¹;lj'ÜR¼(Ñ¼Š·îvÁ;Mc`íE­Ñ.mÎh®¨žÜ»£îèûë;¼Ü0¢{d—‚”iã`w¢Yý†}åvå2™–$Qí^ûnÄÛðá»17̿жßWŽZ¶¤MvìzÜvpÇE“lm‡ )"¾¬Ñ}=!ÿ]ÍJü ÆYŽ-Ö#÷¤$o™³¾uÉŽÚˆâ—ðùúÉRÙ0<[ð¥ƒ^üá¡M¢;úovú™ÇöW…ŽŒèçM³ùx ·î©y·Å ¦v­}#â·c+ ·®ZŸÕ¢6Ù¾óOß øƒÏúÛÿõÃc_Ê«ù®lòäWݵSâÞÿÉÒƒ9ª×¦DŽÆüxÄr·´Ü ­_ÂKµ×Úë€ñ~Z²‘Û„Xý½Ž_äW'¥'6ûèì2¾(¿·mAî­Ÿ=l[ð–²¾-5»÷¼kÛçü`Å317‹m¼àƒõCZÔ&ÛvÞe»Xtj¾-Ïz^ówüËiž©ºK_?Ø÷«(ñOntV´n z•âÛÞp¬¡GõÙƒÉDàäòŸŒ$ã<ý‚>Ã͆rÞöéaÉFŸƒ€'$©Ë¦ æüœQ=Ú«Y…l tÏÝsƒw¼Ô `ß^'”œ]ôƒ @ Em²uÇÍöV‘¬­UóJS,ö³Æ hö¦¿ìîíÕ…y½š¾s£Ä÷Ëhä²±´D㙘nÎÓ±TbªÕ«X±Ÿ@ÎÃNóø‹Íç Y®8p“KU‘oî¡‚ÀLÔÇû:6ëg„üGÙ’h]p±3¯¶ØÈò]Ÿó©›æ8à’¦ªf÷.› À`WÌlúè[ž}(pT³úh‘¿£Ù§›ñ=¿,/¯+InÎnÊé)ûV^^­>Óùà £½œ“ W櫵±²`Ö„ÿÌ„ü%Í 0'g$5kI@î·:ØÝ1}’çV¶ÂØW{^Šð8¡äì'«Þ±i@f €½ß{á)ËŸùi#º6«Šg„—z­3g1‰¶Ç'9i–hŒ±ê¶TG΄]öj; gÈ,„œg]2°{sƒ‚ìnª°È°ä¶êб}- xWOJUµ556m\ÝòSµö¸þdgÜ;ÿÆS?±éÀ¨–øt‰§îh¸|L_•ÕĺÿÝgÏϬzçé¿$\ÐÆ–MË2;åÄ7rÂ@êèŽñºÖ×V^G,gE+‹¿nn`¸ò˜~Mž1>¦ÿÖzëe›êloQ¢‘5ê}ûì1)×¼ç˜çìZžùhCQ‹Úeç®çm5÷\q²eÏZ6ðI_;T_Ìï}¸6äý"ú¾gŒè&¦âs ãÎWæ…qIÆôÔ®F/">ÀAHïl$…ÍÀ*«.ÐÓ·Ãg; Ô˜æŒ÷5¹æhõÑÀåw/´±`f *æØöù^~ø6Ç€Nɵé*àÓZ¸,ó‘míR[³G-˜”fÝ‘¿a‡>ò'}tN…º~Ø‚#ÀÞ\÷$}Îá´€¬$£¯Y–2ÑØí:¼k[uæÈÈÖïµ/@¾ßígYð»ó’ãm¬:jÁ]“mû|rþÞ)@$3Öß0«EÕíš•±ú‚&IÖr'ÇÁÖû¥oFòýÎÕÝ\*°jz?£‹1%¤È…t,ÝÁöE³Ã–¦tún9Ð&$Õ‡$޲pÇy@mY¿Ú¦ºóçDœl>ÙbÏTøÎm›Õü ƒež¹c W4ßq›¬þ¤ÀÖéÿÇ^nÙ3ïïxЋº"¹­³¥eÀ›Ð¯Íb<‰Æ"5@”ÈÎÎ>¬,77mB0X^ ÎÓ_k=ʹiü°Œ?ŒËLÝ_˜9T›>XP)}U®¯»Êî}´ÊìÚ>‚ AS—DPØçÒ1}zÙÊ«ƒ—/¾Î–@¾eÇÍ-8onÏq³Üá¨äo.œš§öîµöÖ=©±i›ÈµÎv%ÿš=»Uõ Ã,y¾²¡¯ñóýíÔ%Í¿¥óâ‚æ×ù0 ~é"±DbŠÄ‰1k$æHì‘$±Hb’›rs«t¼:YbVaaa{"8@d´™ ŽÒéZÝ™Vj}¡¥Zª¢‘ÃÌN›Ó?¹IC ÅNÍLŽhJ²±Íy½SEÖ\ô£i£u¢ÙkC1 W"/T³Ò–DsÛgD¾öœÅ¿{ú`ýÐÈLÙÎ;m3+—?nÑÆ?ŸÊmäöNÙìÉ’›ìÑiªj Ä‰3ŠG S­‰=ZŸOÈË{G›kJóòFœé§1øh£kj¢‘aÞ ˜d”KÅ©´ãò´D£ªáÝΨBÿ¿³ÌË‚Œ³ê¯@–›¥².-ùFR–—w“î4¿je§;¸‚AÓ¹KÏH:øÚ_éÀNÍÞH$ÿ_cS“§f%[–hV>gÇå.{"J6«>βåÞy+ט[+©K`õï¿nÓTÇfºóâÉ–<×ò¬¤ïõ/Ù¸'•›;å_2°Ó!J·UÁ]ÍØ 1²ø“›ûK­õgp‹fCul•+e‰%æšÉ­~‹uL>X¼–XnÆôã\‰ñáXŸ.±Ÿ Èfý²¯“ûlýB<¨õžÖ/-ÃÚcv{7›;û›Ó&›·_k_UÆ+O±äyž–ð>yR}Jö 4VÄKFüù{«ÒœQ*Öñ§xİßg÷MØ.1ÑqZrÇ›zà¶(-Á8ax‚‘@†uR:ÒtuŽqÖ7޼£ºÁÛØÔ@Ì;Þ ©FõKjô±H¦óÏÊînþú 3 û[oT¿?GúV$ëýõýð;›}u—¾î´ø#1±±AˆÃô™c’Œë%çP¶8†I_îÇ鯏OýÃ_šÿÞž×7Á‘¯¡ŽIÔhG<.‚iÇsszü§TéñC»Xw"àžë-îÛvþ¤éR³»ž°~çÿ£wº"ùÛaÎöÔ|Øä,ÀÆmsl+üóã3ޱä9NZ·¬&}鼿ÎÄé>*}µ±Ç±iƒ{$6f÷é¢ÜÏùçÞŒ£3`RÇ\OO4>sÍKbéhcN³;¹ó}gZnäp5¢×QÞü7·™›åêQ9Ÿ,Á˪Y€«'U›×Y] öÏÖoš¦ÿk÷#lßô‰ºöø,×ѲÅÕ–>™Þ?xEƳ‘Ó™j÷ž7í©ùö 5¯4Å’ç'ûgdý^Îí7w§ÿ±ý¿_ÒWFÔ%Xë|&rð!O*9XÿNO0–ˆo2w+‘‡¨è».| ê’r;5nXºë:_Ãcƒ9ì ¨;ܼQýåcûª‚>‡GTŸMÕÔ®µ%ùïÚ¾U-úA%ÏMúŠô±£›WàçªÂþfûÞzÿd«õYªñYinØp¨kŽß¡2bKŽí%Y ÆÛ®mxsÓŽË“ÐØL@°×aÍ6r› •ÕÍ+iŸ~ÀÖ’¯¶Ü+ÿâÓª*4е@$7ãÙu³mþÔÖ¨ûfN³ì™Ézsoó“¾lä˜ß¨~‰®Nþõ’êjP·Wà­ÌD#“ÌÞÔã¨p­û¯]ÝàImÔ8)ªáöäß`9`x#{êL@?G$™Š}ÿåŸy&ɬ}{…ºzbª«“½žåe‚íÔ’ë.sÄs•ä/%¼ì—#zv4û¬WâϸÌÔFO4¸mi@îJHI2:“éõ'J¸¼‘M9ñ˜_«wèŽÞ¨—û"½{Ü*É5¬kßyÅõ fãêwÕµÕ”•~zãlO$ÿew]ëèä/»ýCÙ#<Æ õ+/ä­_é\7‰Œ&Å0:„o‘Úï…úºy®óÕ«løÐF¯–ËEš»`µ®ž”jžËvk‚‘Jz×8ÂSÉ¿^^s±Ú[ëÞ™€çï[ä ä߾њF õlü‘rÅ1ûÍÙûâ:ù§w6RôÃØä‘FUÃzá©©·ÆtÞè |9 WFf:ÄÌ+¤Þ~æ×%) ³à¸4O&ÿ†•kvïrÝš¿S¦ýåHmc¥} û©Î)Hñtì‘ʅúwðŠ ÁÔ†¸-9,—çè‡ðG›ö3íázÏ?Óº;-Á¸V½T.‡ÈL0ŽÍìbdËúk@ÿûþRRø`¥³{å¿‹†m$ËßÒÕ5òc/w@Ñ ù£TEøZÑc|÷ØÑè>ÌãHŽ8†hî —àíô#÷¼ø“›,;Ræ4Ý>}’ÚúÉZW$ÿ[6šðÜätÀ˜¾G|§ÏÉ?Ké“Ò7½Jr²7H¬•˜޽f–˜ÜX¬–.ÿ=ÓáŸ-1_b¿™êrÁ=i‰Æ3á±ÃÆÜô‡´d#7¾Fþ Æñúÿ"ª—ï$5úëRP.ýÉH0NÒ?g¸]›.ôËy†×;_½.<ö¿£ÔsGõøÎ.d¹¥l®…Gþ"Õ]3¦¨m×;6ÁìÚ±M=Pqv\$þ†ºfr†zgÙG'ÿ5o¼¨žœãˆç%}ª°á–·órzü·ð–î“ñ&ƒÓìˆérû 6#tn™ªs´A¸_îЪÕú¿(æ/É…“ãålÿé­¬×ÿG9"¨¿Ï-ºQΫ| £}LK§§®_Ì}ñÒe¤Ñ°,°§òÌ$³j™´QIJ'G%›ê)ÃÕ?½ß–#Ñ;Ï>fž•·äÿßYš€z¬z†útÛfGµËî;ÔS7Í1‹9åYÕ_ç+}LúÚ&û„üìø1¹¹?/++‹éúy¶a&Gût.:SëÖð±õ?µòžižNþáþ‘8'¹!êeý÷æÉÎÉX•Y,,,ì$WW–ææ^:!/ïvý.Óz[;Ñ5e¹¹ôŸwÇQç35Eœ“ ²ÕÔ‚‘ª¼`„úÁèáê´Ñ™jR–Oe÷KP'etu\¹ë’Ô†WÆ<ÁlZ»JÝcÑíqn”œxxõñ»c~TP âÛÏ>ê˜Q½NJK4oÙ,t´ºø˜uÞ1éjÚèaf¿“>8%¾’½v›±7|_ÿyii08·,/otyyyLkòK¹zÉUZó%wExíÿyö„@øÆ¾/›xr ði­2²×­m¬>¯~©²ô ¶0œàÿ‡¬Õš”;R>&KÍ(¢æ³7@Џ¬ï ÛÌ–õ«ÍÍdNY:IRYïÕ%‹m?) ‰ÿÝ~ªn»`‚ãžÉÙÙ=TaJ755O›ë¼âJÓú£¤=\’Ÿ_àÔ×Vf d¯ÖRó΀&–ÿ¤y£›•;Èßi©z°â5¯$…Dß ýhZzáþ-ß»!eŠ_~ø6uÓY…Ž{³‹ª3G§©IÁlâGK-çåm×ñülY¢uR>47š'g§'éøÛÆf¾õ€y€76üÆáú—]þž5ïSN0ÈNLýŸÛ8á3¡_”9ú¥ù3Çz\0R]6nˆƒö SO.ºÊLÔ»?ÝÑúëjw}ªV½²Ì\G^8uI½¥Ç9µa’¥’׿GmùxMt®wÞ°ÎÜrÿ¬ÓyêbVQŠ:cl–*Ë +¢g~Qš›{n¬—B›Œ.Æ(¯ çÉoùräN/lú[¤™ÚíLÒÕèí´Ï7!/ïxyAè(öKÖ08~³’ŽN w^Úè>žø„˜×€rÃp¢ë2¦ ž _ˆ'é1vç:à;6Ã<Çìøié U}Â0sÆ`þ„Á$e'+<>Ó<í!Ç ÝöÙ§›ª&³¾o—öKÜ/;¶¹3N åæÒNðS:ƒs$§ dú“d†âE³ÆT§ŒAÿ~_–—7™lgÈnü¿Óœ§ãô(èŠñŒ¬‘÷uqaªš”Çt¬gt>¸£°°°=™1(ËÍ-Ñþ%/¾ƒê xù8Lò¦d©ë¬±ôugiUIAAw2¤·“žnèñ²»¡~@Ð1ÇŠæF¿“G¤;r/RnÍÄ‚‚dJ" «øw¼èî‘lŠbOòŠä\¿Tí£o;Z¿*ÉÏJÆôÕ†ÑV¦xx¹ÝyLä¼0ò?‘äïýfB^žÌé•©ÿ¼¼ù¼ÔîÕùǤ‘DZPîø¦3 ÍJ‡Kª/5¯E~å±;Í:÷r~^Š}øêr³²Hê|°âó¿Kí¹šø™;¨G®žnÞ¦(çïå$϶%kþ5•i·©¶(7·ÙÓ嗟߇Mîß8§ˆÚùMéÇg£–ß½P}øÚsf+JòÁÛÚHÜ¥]p±Z85›çÞ Iùkú±+õžC+BGþçEv¿Î›A29ˆ¤j¡$}»¯:–*ˆï,[bþ|Ú¡q]rìPú¯‹¥óDz¨K) ýº¿áEöÆ,€Snt’«žáˆ+tŸ»wíÑȺÿqT÷s»¾)ËÏA6u!ºñnæöŽd4Ebù¯n8%WÕìÙÓäßPVžK»4¼Æ—³þÞP0¸ÆpÈ¥uÐLdíF7Üx½£ic†‘XH6÷9%ù‹ä&EÚå¿£ÿ‰TùóÒRÀT²ª»vþæÅõ–NÈçZ݆z|áåŽ2r’€v©Ó…ǦÒg½¥ɪîšþ¿ž—Ö{’‘ ¦Nrµ­“ À«KÓ.aR0œþêµY€`p™Õ=à ^Z/7…•72¬Ã Ý›—Õ{;l ¹BÇèw•>ë=MÌÉéI†u8åùùGò²zO™É¹B™Òg=¨ÂÂÂ#Ȱn8 ~Å ë-õíÖä‚\¡~Ý»Óg½§/ɬî1{ya½¥#Ùˆ\¢ŽGAŸõ˜ÊrskȬn1yyÏòÒzGÁÔT r•rÓÒè»ÞÒR2«[NäåUðÂzG}ºv%© WI–¬è»žš˜Mfu ¥ÁàX^Zo¨(;[µãør™äȪ¼»ôa€¼¼ÑdV—Pmm)ì èÙ“„‚\)_¯^ôaoè7’SȬnšÈͽƒ×Ý:føpÕ¶m[’ r¥Ú¶iCMoLÿßJFuÛ>€üü¼¼îVׄ rµºéw˜¾ìjíç*`÷n\Á ìN îׂ<¡!ýûÓ§]ªÒÜÜȤn]ÈË)ŽÙ}ÇþÚ´iCò@ž¼ËAŽ2úû™—·„Ù=ÊKOçÒäÉSònÓÇ]µöÿ(Ôåggw)ËËû/´ ’¿%‘ü&9@?× 3Ô {‚ÁñºA¿á¥v®2ü~vü£¸¸.X.¶¢Ï;ZßLÌÉ9†Ì饥€`ð"^lç©xÔ(.úAñW)°{wÒï>1Àëþyy1½i®åw޲‡ QG~8 Å¥:èw?‹«ƒVño>™ÒË& 7·Š“±UNjªJêÜ™$€–ô9ùBlˆ©¾- ç’!ãc& \îw楷O%99jXJŠJèÔ‰ P#’¾!}Dú 1ÃV}Qš›;•ÌGLÌÏÏ,ËÍÝÀËoa`Ðí÷ïÑCÖ¾=A¡fHúŠôé;Ò‡ˆ%–ê“Òœœt2bRXXØ^Ö|ÄÒ¢“ðGgfª4ŸOõLJâHBQ8:Ø39ÙìSÒ·J‰3ÑÒç:^Í“@&ŒsŠrs{LoÃ4çþ˜¬,sŸ&­$}4 ! ô5ésé~¿Ù¥/s¢ ÙÓýr¹OIAAw2|y)&äåÍÔ/ÉÖ(¿tû´s_ç¦ÝùR‹?л·ê×½»9éÚ¥‹êtä‘$y„l¤J_•>+}Wú°ôåQºO»¨þ¾ÄÊ}Qþ¾[ô 者±c»‘é é‚¹¹YúEœ¾Pèo¾lŸé¿ûšþZY¿¾49;»£ù:ý ÞaÃÌb%T„¼U€H®×vAòß,±Ò•aÆÐºXúÛ¿Ï_uÂYt²ß‹Œ­¡MYnnß²üücõ‹u®6a-Òÿ~¡~É®( O“Šƒsrzì›” 4_LwÀn\Á‹WÇF™”“8Xü,ÍÎî5!'§Hb­Ä\‰½f Çc‰ÍRÁObµÄlÒ8ýr–hgú•; A"P"ä] ×}Ü¡Éÿ_¥yyÅdðþòB0X*/¼“:`Af&Sÿy}) ];ó4Ã’ÿ×%Áàqdˆ§=bJƒÁ?S’¡øÐ‘:HŸÿ‹C’ÿ—¥ùùÈw”æå”k'cÜ3°OŸ³ŒÅ÷és¶lVŽqìùŸ²üüdˆ[Š‚ÁdÝވюÛO' У€ ˆP\© $ôë8°;&É?|]ü“ȆÑFv°êŽñG;áÓ : ¡83ÿ€ƒÏؘøÿ0!/ïƒ]ú, è„\ Þgñ)ßêïâ?€P€ÿÄžÜÜ©e¹¹¿³0ñKL»—Q?@„+Vëóç¨&~ý=u'ïÜÈÄ ÇÀŒ;YYGi#p¥Ž¿ŒbÜù»Ö]Çåç÷!²D@aaá:i¯;Ð-, $ ŸÖIÿäòôôÃñ£0ʍGbEøÊô¥áqA¯/ËË›,1ŒHÐJÊËËÛéDž¦;֙ዋ¤s®ÔÚ¾Öø]­Wt§»[ÿótýÿä7‘ô1awt )ÉÏ/˜"±EbŒÖ{ᘳQPÞ1cQ]L:cR^^jµa´%b¸ BÀ „0€@a€Â!„ B„0! `BÀ „0€@a€Â!„ B„0! `Â`ÂÀ‘êСƒš8q¢ºõÖ[Õ²eËÔÛo¿m~]´h‘ …Bª]»vu„0à%püñǫիW«}ûöT+W®TãÆ#°#„·€¶mÛªk®¹æ‰¿¡öîÝ«fΜIpGn6³fÍjvòo¨«¯¾šÜhrssÍ}K €hþüùy„0à6°|ùò'LBp¡0`@«“Ãå€6mÚðÂ€Ó Àé§Ÿ5Àž„0à0wîܨf€ @UUUÔ &! 8Ü\tÑE–LBp°#€VLBp¨8ì°ÃÔºuë0a ž €è /´Ô`À }ûöêÙgŸÅ „€x2¢^½z©U«VYn,X€ @À8I½{÷Vï¿ÿ¾å&à†nÀ `0a€ @LBÀ`€0˜„0€À „ &! `0a€ @LBÀ`€âØ`Â@œ;MÀ¢E‹0LBÀ8¼÷Þ{˜„0O@Ô«W/LBˆ7€ @qj0a N &! Ä©À „€85˜„ˆS€ @ÀÄq0Ä `0˜„ &€0€À`0˜L€ @À`0L&a€ À `0˜„ &€0€À „ &! `0a€ @LBÀ`€0€@n0W\qÏao&`ïÞ½j̘1úhµråJ’¿Å*..&ùÇ@}ô‘êÑ£0jöìÙ$Öü×®]KBŽ‘n¿ýv `LL[·n%ù[¬óÎ;DCÉÌ‹ßïÇ ^………$´lÙ2qŒuñÅcP¯K/½”äoÃ9ÿ={ö„c¬x€zÍŸ?Ÿäo±’““IÀÐ /¼€ @½fΜIò·X $`H–a0€ëä“O&ù[,©H·cÇ’pŒµxñb `ê%ç£%q“ü­Õ#¡¸R>a„aD„âJ™„=zŠ+õ ì@=%("ú3áò ¡¸Ð‹„;hÈt#Bq¡ó wЭ¿ò´þ¦Õ…pr5!O«’0q¤Ö¯’yR¿ÖêH˜€ƒÒú7Á!Oé­2Â4ÅUL„<¥+kÐ\®×ÚOàDÈÕ’>|á "å­/¢¹RÿÒ:ƒ0-e¨Ö S„\¥ç´¾ ŒÖz^ë+‚+BŽÔWáÄÏU¿` ´&uç‰ï×zFëY„íz&Ü¥/–…û&XÌÿÊ5wpüo)IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_32x32.png000066400000000000000000000021411356737523400210240ustar00rootroot00000000000000‰PNG  IHDR D¤ŠÆ+PLTE@$IIImI$9'v;'$30+( yC"G66)zB-+M& *,H88G77H55wF!yE!W/+.,++xE ,,+xE!G77xE!+H77*H77xE!xD!yD xD!wD!+I77H77*,yD 5 *,xD!++9 xD!-.xD!+xD!xD!++,12xD"xD!H77;&<' xD!H66xD!xD!H77xD!L1&H77M2'C33C22xD!G77   ,,,3''=1*?2)@2)D51E52H77J86M85Q+c6d6j@(n<n=nA&sssxD!xxxyE"yE#yF#zF$zG$|J(|J)‚S4ƒT5„„„ˆˆˆ‹aEfKgKhM’kQ’lR”nU—s[{ež}h£££¥¥¥¦¦¦ªªª«««³µ ’¿¿¿À²¨Ä·®ÉÉÉÌľÌÐlÍÍÍÍÑvÏÈÃÑÊÆÓÎÊÓÖŸÔפÕÑÎÕתÖÒÏÖØ´ØÚÀÙÚÂÚÙÒÚÛÈÛÜÎÜÛ×ÜÜÛÝÝÝ ï ,ctRNS &/2235<=@@ACMNRTTWXehnoqs‚ŠŠ‹‹‘“–™š›ž¢¢£¤¥¨©ªª±²²¹º»»¾ÀÄÊÌÌÍÓÕÖÞãäääåæççêêëíîó÷ùüýýþê [‚IDAT8Ëc` p‹pVdg`‘R××Q•da`WtsEQàÛÔÔiÝÑ‘@ÒEnÐCQÀ›ˆ¡@.É#*ÂÉ`ël‘­] Ò†KD”¬€IHÅÝJ(6oûú©MM“×nŸßÒÔ$mí®"Ä”f”7´3S’õªiš´cõÖMMK¶¬Ù1¥©Ú[FÙÜÖPŽ‘•“SPÁѲª~ꎥV55­\·|Ç´ú*{'~NV  Z.žAIå1um 7n›ÑÔ4}ó¦EuqåI. ;¸Ù$¢Ê ¢¶µ¿§eÂÄöîþÖ†Jˆ7Ø•¦å`PVRRR\PP¤J!"ÆPŠ‡Ç–—Çf$ÃAfaByyl¸<(˜Õ4’Q@¨¶3jtù'g§!)ÁˆOÿäæ9Yø¤Ïœ›WŠ ¬ ’Ógϯ oA/^y úRð)€ÈçæAV½@ùÔe;€`q v7(LH?†#T& ôI*Ò Ü¼©-IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_32x32@2x.png000066400000000000000000000037501356737523400214050ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞ¯IDATxÚí[iPSW¾Š vd ¢‚,YP ‰IÈb\€$lîX«¢NDmµ¶Z⊭KµÕ©c—q)îÖθ;uéŶ*¶Ê"¸%øÃ:­Nu´Ú™vÆ…ÓsŸ/H0 ‰qÈ™ùæÁË=÷|ß÷î–ñ…/|á _øÂå(4‰&E¿#î ªŠ âMf£8g¦.ª£«}˜¢# Sãd…i’~f“D?7]"§÷\Í/N˜ ÂEцB£¨yÜDXŠLâqn7€m<@l/J—(¤´A“’ÍFÑ'Hø$¾ç$˜×°M‘IôqI¬¢¹öƉUf£p[ËQ~…ûG€Q|Þ™uˆýfC¬ ½?[ŸÑ¾)XÓi_x=ÀöÝTûsî&Ñæçänlñ€âqÞj€Ù$šèvЇF¾Æ.€ÞfÀƒâ¬¸ ìE&á2¯{úÑ—Û ç¥EuÇ¢½È€:³!&Á£çÜÚ¾ð"¶¾0aq„øËBHjB(1ËBɧ,¦ID+#¤o; fDM’[0DŸ½e„Å#ûº,¨x„‚ÉY8¬÷3ÛÒ³Ã\ƒ¨+ŸoÑQÎ6þŒÔÄçßdÄ’0iˆÉ…ˆÃˆÿ€ø ;ZB„OG0Ó¹ð8¼õ+°Z®Âµk×ürx,?À©˜¥ctPzpÔÖÖ2ík­V8¶s=,ÖÇùÜ7ŠfS.}‚‰¹­FŽ·Y®ÿÊCÉx- Z¨¦Š^I v”‹ž´uŽÅΛíTºN;À çãbU9,yCÓ(gqNTŸ?ë0ç쉣0/³§C>J+bÞC*EŒ“…“N-‹EËdb2ƒP26!„ôÕEæ¬ß;˜(ÙQÊ.~ÖY)1H};²€šK›ñZ?ŽlÿºQÎÁ«¸×kk«áâåïìúضäÃF9³Å€º[»[” }ÚÒ`’D9R®”3c«CBr¨6‡¢Ñ­nØx%>Õ«x½Ë¢ŽuÔ†‡ˆ#ØIx5õ o{GÑž!Â'öã®q‹õ ”– ¡úÒúzC*Î5S~æ'îõŠêepòl4â"wïÄþvíg¢ñÉÝÚCR¸ßi1Æ H „²\ùÜë8]O5®w!ܺApŽÄ*BHß”BÚ¡ÐHl¬GLGlAÜd;¼ÌžÚ¯ûÄ̸@iBŽÜñ½Û8â—®ìFb¡üÂBîÞ•‹5 àÿsUÓ˜œ+–ÒúõãÈ^®-­Õ?*²°öŒA‘+èeû=C§‹Ã!9+fC–F £ôIðAjŽèüìxXWø&3%6Oc¶ºgl O„’…S™œ æw˜ó„íµ91LвµjxÄ?ˆå)))6=TÕèÒTÀÄN8¼j](d‡ÁHn¶AÒô<'l[:nøœÁŽsì„:BŠÏé—Íå“¡Ñ=z´_³×LÎnn1ƧëaÊðN1ix*Œ;Öy9MæLÈè-å“¡Vn¾ZmNK wêØÅ í³¥|p$l¶ÌÐhþln1™HôÂÅÛ ‹[bÀTK‹ŽÅYMΡ“t»C}ú釘˜Øº ð  Þk@C*++Ýa‚wà¼ß7›ðj@!‘HñÔ„ÒÒÒÖg@~~>÷1×Úµk[—yyõpnÚ´ üýý[nïý¸Y¼wàñÞkÁ+)):8z½Þ%DDDx¿ …ÂeñAAAPSSãð+qG¨ªª‚Ž;z·ô)?~œÙêšOA_?tèËìÞ½üüü^Ís@«{7è3Àg€ÏŸ­Å€½/Ñ€=Þ`ýÝóˆ»ýç)ñ…/|á _ø¢Åñ?θç?†3#IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_512x512.png000066400000000000000000000426371356737523400212100ustar00rootroot00000000000000‰PNG  IHDRôxÔúEfIDATxÚíxTUÚÇ/EQDH¡×™!”TJȤH&! Šbt±WTl+- ˆF”uíŠmí¨«¬‚»bAPzHàÛo›Û»ºú­r¾óÞLv#’IæÞ¹÷Îï÷<ÿ'XH&÷Üó¾ÿÓÞcæªÒ¾I󊌫(ò]TòÏ«nª,ö?PUìFý™üYëîÊâÀ+‹ü ªŠ|gW– ?'T]è;‚'‘R]–Ò¹b\JºŽ+Å:¦L©(öŸ¢ãÌtýç+*‹3ªBþ3åßÏ ŠªŠƒËËv<5€(PUâª;Û ZÛ´ök©Vèw•E¾••!ÿ]ZÌïÎ.éqO Γ|az'‰tR¿SÇŠW*C¾úëß[g>×úHë^mŽ»¼,¥O æ÷УüeQHúMé[­]•žGªŠçŠáàéx9Ùûލ(ŒÑý~ŽNöÏWûö†ã€U1æ÷Zó¯Êï{$O  *Š}¥ºÃüÍâÄ(ýQë¥ÊâÀU2õG‹¸9žº˜S÷!ÿmá‘ù×±ˆ+b4*JýÃh€ƒuÖñ tgùW “ÿ÷òÿJf*‹|§VõI¦•œ<Â/l_8ZøêÊoîÃÿvP<ù;& ÑŽ›Þ©.Ù:(ù7¶d ƒJU±öœñ)i5¼s“ú'²qËÝÈáŠbÿYžçZ¸no§jÙ” p•E*‡wÜÆ´UF¸z{‘„=§Ð׳¢89·ÈªùÏ%›º Ç›¸dô·IkŸÖou‚økíú¥6yÿÝíZk½©õÓÊbßíú{WÈ)“ªP`â¼ñFÎß·Ouyúá´Œ}Ì/ØO·é忯^gò›¡ÀU´ Ài£;ÆÿºÐ4T˜9vHsFgTWUâË5Yû¯÷ÜÞTµß‰ï@Ø4l¯‰j3R8O6œU•¥t£E[ϼҽꌞiÈö»9VHÌ£E4æw'ÿµNF'³Kv§u9’/ñO–Ú•!ÿýìÖjýÉcmfÖWùŸÔ¾Z›„æ†úõæ 84æ&¾âÀ¹ú¾­õWÞ‡y!ßpZ@#kê^ øaÉÔä+² Y6'Ì]¤8“þZ^¯ý¥GÛ=’éà_Ëq4Y“b2òŒâý=©®6ÚVù&„ÿË‹í^ò]IäÄò?Áþ7fQ£ >_Ü»ßPݶ—êßû‰ºz –ž·öŠö‡ŸÕòìæŽó‰›™À”¾:1^£÷_x½%æù4•¡Àkqà¿­*ö¿QU8Ék»ÏeÉC·å4=ºÔ':ܤ_˜&¹Èwê¬ÂÁ]½ôÎHås㦇¦ø›T‘ÿ"?€s7}\öÏdã lxsc»Iu3©‘^·áÍ¿¾mË;Û ‹Ýz¤Ì¬±ò]©áÏã´?%òÔ€ßÅyPÿ§\dä†uõÓÌuëbÿ—$ã˜ës9!QUä?Ù åfeICêä‡ßùxn·ßù0ÞM°B*™9kj¿ÇQ2ýÞ¸GÒw°‘¬ –Êò’ÓÌ@UÈwle±ïU—ß‹j…Q"?@ø_‚Â÷´ZŽÇÅn¤ï;B~~xß?i×IŒÚ ©Ë[/¥‚þ ïÐßÓ>"?@ØE@8¨Öʵ¢†M…C憣*‹ü‘ô=¥¿Uùï‘ʉ¶˜G9ÆW˜ªÞFžýAµ›È`Žü› Mj“”žµl]¿Ø?=¼‘gíé©gß™°h‰ ìE¨Û¤È³nBÛˆüu€)ÂækU´öT¡MÅOô÷üÏ5îô—Ê¢Às‹¤Feæ¨Èª*öÂsmveÈwˆü’ˆê¦œ ‘#~¹%Sºu×¥úÏ4ËÒòQøLºŒÜeê>âÄ/e¼ë.äá9Fd|ù ³à<‚B O “zúM'~ßúÿÇç®Q3Ö¥+C¾s¦ggÖÔû4¼@¸T/»ú[VË¡šÈ`.N# ´î,¸”ËËR:4¶¾o\‘šó<'Ôìʃ¾+«'÷îxàûd ù*Ø$ÚÚ›#çùd±Ø—GPˆŠvUûJå™JÉØÊ¡¹ÖËsA-Óïev®þ‚¢ÊЀ™AŠ’JŽ'òueA)#U}X7+À³@Ñ9F¾¦™g­€²”nD~€ú€Ô@Q . À„P<œà!â4 ªÈwÁ!äùéÿ¢ÀuD|€ï€ù„÷—œHÄh¸PΩsÓBÈÛÚßœºñ7 ò¿E€@y¸ÐN"=@ãûæ BÞ]ÿ÷ßC¤h¹œ† òð ÀT"=@ã´‘êc „×ÿ¥B'aà ³¾§ !¯©¢Ø¿™p(Pä;•`ò`À…Dx€C ·×q!ä½ €"<@“Ëþ—!é3ÙãDth‚ŠbÿY „gŽÿ…?!²4kÀ— ;Íׄ76&Ùš¿ ð:!äýãªü¾GÕškЧ8BØý¿„ˆâ˜+Šý%€ „\nJˆèÏø"€ „\¬ßW¶'šDHEq` !äâ³ÿwÉZ¾p7!Dñ€ø3ó $!j7 Ì.Ø]w¤¯&!Wÿ)öÏ&‚´z€B®Ò×2x!z´’ªÐÀÑ„‹Jÿ.%rDo/À BÈ*8ž¨ ­Y€"ÿù„ó×þ}{ nþˆÕ“{w¬*öÿ™ƒr¸æ±¢½ ò/$¸ „¬/®*í›D´ˆú2@ŸdÝÁ>'È „ª»‰ÔVÍèFA9PûçŽó!JXe&ø|º£ý›`ƒr˜^"BX½Pì{Š`ƒr–|…Dg‹©(õ“é6BÈ!ÚDd°k) (ðÖ±K’©Ž©3t<}Aý»‹òÀ¯ÃK e’ËÈèÑÅ¥ÞZ»´¾vQ£7¦ÿ‘eƒÌãØXÎT&ÔQÞ´4EÝqÑqê™;¨Õ¯?¯öìÚ©öíÛ‘jöìV½õ²™€îš1EÍŸ0˜g‰¹z¬z†zséCjûÆõ·ËÞ½{Õæu«Õkߣžw¾Z85›çÚä™ÿñåë‘ý8ðëØùs—Ç~É]ŸJ.“œFfoá ‘ÙÅè$ZªäeZwk½á²YzýA¿Üɺ‘þÕÚÚoüܾ«[õñå‡oS;·nŽ8±4¥]Û·š£R1<ëÈT=e˜9ó²þ½7¢Þ.{÷Öš&Of®ž”Êóþž¿®.ô%Ø:µŸd”¤%˜kìî‹ë’‹Þ›–Ë$WIÎrâr°§ž`$è>&#Á¸2¼{sµÖ¿ÜòÒ˜›VŒáv=¯«òû©;øV¦÷ª+ÏU¿ÿfÔ“ËÁ´qÍ{êÑ›3 $˜ƒë¦3 ÕOýDÕÖì±¥]vºC½ôÐ-jáÉ9<ÿ:}k×ÔF²‘ªµ‹FúÿÖÚiž¨ûܓӻ=ÉÄNÚj‡k'9ÂÜ0˜d<^FØïðk7ñùŒ#¬ß`Þðx]×xþ:¿o[â?P[>^£–T_Ê~ôã3ŽUo?û¨9:E»ÈòÍ+Ý¥Nï£ÿ[$ÆéXwŽì¤wxL–œñ©™C’Œ Ìœ¢s Ö¦ ³‘džåL2®×Z©öŸ}édú릡 †Ï⥀Sâ-°ÝxúXµê•e1KüJfn¿pbÜ'þ«'UÏÞy­™€Ð.2#  ç•ÄåL͆êòtK’\VïcÛÍÕn­þ¡sÃ;Z S‰’3ÈœÞWÞhX‘‘`¼íÀe™jzJ޼Xx4ðî¸ØÜ§ù²ÅÕª¶¦Æ1É¿^µµ5êÅnVóJÅeò¿óâÉjËúÕŽkÓ ½÷†¹GíñO™Œúà+Á¦cÙÓZß8,Æ~©?Û[RG&µ‹1’õú8&¿¯q¤lÌÓ/õÜ ¿~ë i¨×Ò±ÑþÃýÅËAíú“sÌÍ^NL0 µîÝ×Íîñ´ó³Û橽µµŽn™ xäêéñÒ.7D3¾HÌ’Øå å×oulÿD½1­‹QdÇr+¸”¡GÉIÆ©úeYjžëwÆ ü¦TŒÚ^€²”næY_4Ùy¿cËFÇ'ÿ†'î½òïOùOJUï¿´Ô5í"’½U%ß³Qä2*‰_ªòÕ¬3ÿ*³f,gJZº©0\rø^­_9`Fà%©8Øú}¾¼Ìî›9­Eçøc-?ví%Þ=ÚwÂ0µöí®kÑ»/üÔܯàa°/ Sý/;¡"ŸÖ=2£›m‡‘Á š´Éìbd›› ëNÄê%—õ´³:Ý[¾ ðc/²Gæ_èø©å¦ŠÖÈùwÏ-Ç”ç˜G!ÝÚ.¢5o¾¤—îY —‡EG2º=¤¶IŒ—Mwê˜|¬å.½¸ \HZ’‘ãs¬ŸËÏoÉz–îðz-€Ý?ó4W'ÿ†&@*ßy©tï'¼íúvÉž’ùeC¼¹7£8pRs㇌®ÃõWþÓ:*‰Æ2ÄÙAjn"”KbQ¯:ɨIïb4»xGy¹ÑNwø/½¼îºäU³{—'’Lýr€··‹ÔáÿÈ¥ÓþÓ;Ï>æÉc‚¡ÀM͉á Óµ±¸gEÎåË&>#•TšDNhgzJx#Ì~[÷$Kšs5eU‰o¨×jÅË&:/%‘ìc¸ùìñ®n›w–-ñ\»ˆž»w‘÷fB×7Ft2º¥%OÚ¾{?ÑxSÇÔrv6v6R¤°y€Å„t'=ýÓÿ!¹—.ñYë±fCmZ»J-8ηÙÉ^¯¶‹,ÓÜ?ët¯™€_t­?Á8SÇ–?Û8«ù{9–ÑÅH&w)O¬l¸è=³ ƲƒÍTª½´¤Ž»W“L½¤6¾/YrJu?«$HÉæFOÔ8à õëdüœ‰ƒÖt™I%s€çÈL6††o4ü܆õ[)ÜÈÀå^Vr'|¬jÇÛ-7í3óv^´ÓãÏ?鵋²Fÿgà"—Ý$¿³!NýS6ôeu5†! .HI2:‡wÑþÚ†ö@Šath0°ÓõJ'¯ì,oÖ%BëW»æúS7͉›vq›9kz€ÿ‰áö–OóË)&)¼FF€¸]›u‡ØaegËH46Ö¯§yá6ÀxK2¢åw/t|»Èµº»wv‘½r4ðâü>wš·“Z›ükeðÃ4?ÀikN¹%«¬ pÝI#]Y‚9Ú¶a½«ou<)=ÁÊÿÜÙ"7ï[Ñ)Çû:ªÙã¸.PÍŸ0XmßôqÜ€];¶©k&g8²mž¿oQܶ‹hÉu—¹®?Í?@û;Zµì¸–Ä–­g%}Ó“™VÒ/Úir|Dë*ýçJójßF¤ÿßy ÆIÆyæÑ¼$£DêûK6ú8õòÙɾÊ2ª4¯×áꊱý\°¬8'Fç¾kÔæí?Rm(Qm,U[wÈñÃØœ@x|á厬Ç‹e™»žPk7ž Öl§6n¥Û)vûÖ¿÷†«úÒcûªÜ^‡Yqy}Z¢QæÄX*1^b}Fc”Äþp8ßÌ :7,o˜9Er‹ä˜DcšÄdùfÒ¹ˆŒlæÔcœ~èšuŒåúëK RÈÎÔDc»þó ýç;ô×ËäeÚÕ\hícø8Úèßÿxýy>æï;²[;uqA×­÷^|:ÉÿS3ɼ¿nÀw´nS¹þï{lÿ<½µÂy÷0Ì:Ýöç°qëÜïµÉêO ÔžšbfÜR¹ñ’üÞfßrüÜ^ã£å8aj¢11-Á¸\ÇpÙÔøŠÓëŠ YµÌ!9is8GýXÿ¬ $w5§2+häAI‚ _®ó’®ÞmL_Énz³æ¿vƒR“:;Ñèb÷ nºÐ(žÏ–ÜVìéüæS³crÙÏ'[¦/ÑÔkÃÖ+bR…îÆÓÆ8ªmV>÷¸­Ï`ëŽÅm“6™¦-à…û~äø~tAnO³ÏG1.þIvõÛ=@ž`$„ï`™)1ÙŒÍ:F;0oÈÅ/jCr­,‰pì1œðõKs’n´Åú¡l³¹n~´kUï+1uŸ›‘l¤Ú2•¥‡þ¹7Gë…ÏHj£ÎÑÍÑKnȳ½ÚÛ®§šhêõéîlÿ\²ÒIû2öì²/áÖÔnP«Ö=d›lÞv]L ÀÆ5ï;º>¼›Ù×£ûþ%£]©ibÇ ¨ÄV‰±:Ö>>6ý­‹sÆV©µ sà‰é¤¸HúY] ¿8ÅpIÜ»´ñš»Œð¬ŒÔSŒ–îH2úéŸùD´ Ô©YÉŽ ^o.}Èþéö¥M€µ³ýs½ÿÒRçÜÄxé‰ö&Ùm³›l“UëÓUíÞØ\åÔòÀÓ†wÕÉ?jqnEf#`é>¯nFOY£—BfáQ´ò¨¾•È2û-•b=•ôå% Oëïðp6¥ÝÚôÜš–hŒ•«ƒ-:10Ú\ƒò¨ ¨ lßý/#û¦M½víyÍöšN9v¶|ñu6.ìhrô_¯-;nЉxdÁEŽë?§f&G­ Xf’‘oE 3¯UO0ŽÑ#üÛ´öÄk¾ý ²\ fW&}³Ìm’q~¸¨Íþ8NüéæÖ Æ ËóFqÀL©­ÝÚÏYž™ä¨ö£i1Xû¿´Ù`ã6û+Ê]Nh›_{ζßyû§6»Mdö&àÕ%‹Õw¤/G!nýCfo£=€‘+~uÒŸbî«J4þH~ønÍm>e!]£?ÚO6†êQîýúƒAã5KÕûˆl&ŒfÇÒ/Kïð²@ëL@–sLÀ}3§Ù~ìoÕÇYÍN6~œ£ÿÞ^{GšWOwDÛØ93³~Ó´f·Éûë|jOÍÛ Àš7^tÎÈ?+*#ÿZý£9Ò׃  „¤:)y Y’Ëãîsâ…Imä<¥þp¯1Úo•~#S_ÑÜD®ðóÖ|®Ó†wuFõ¿›+ìbßóf‰¦N{j>°·*à=×Ǽ]¤(‘}¿s­¹¶I›lÛyO ® ÞäŒ #ºµvÍÿW²Q;Zñ(-ÉH­þ-ñ¾åût\U ”ë’Êá#hkîÄÎîmtlõÆËÆQi‰Æ-úû~ÓÂÏ¢ÎÕ=æÁL¦Uí=fv{Ä`û§÷ÛúW.<æírÛì3e5ïDÜ&¶ÎˆÉ2Àµ' ‹y]ÿô–'Ù }c4âOøfÁòðÆoˆÑÕ6y¶¶ýb•Jµ'ÀrýEf¢±$=Ùêï·«¥GÏq»Ï™¼ùÂ$›ËmýŒ«_>æàÞžj_½ýwGÜ&k>)Œ‰¸ñô±1k“ s{©Ìä–õ ö<ì[©®ÍßáÑþ_‰ã–o\ž°8ñ'ÃeSB¤ÅsÂwÞoÑ/Ä;RäÇ<"W·F-Ç;¤z”ºH­ÐšÞÈ&®ÐÿïüJ2Þcþ½ã!ýÿ=¾4Gv¿ÿB6ªx´‘¿ W˜ÝÚ 7cúvx¾%#ƒa]Ûª£cW1pÕ+Ël àk7Nˆ8Ù¬Ý8Å^“òþ›17UžÓÊMéƒõ)1)Ù|ëy%1iKÇôUûµ¬ÈÏÄAG«¹Eöµjš?Ñ«ãËó.>£ßäfH­ÿ çœw͸,¹¨A.kPv~~}k˜Ó¹î?¹Lÿó“áœøR8Gn çÌHk¼¼§?Ë0+Žò%†?lÃiä/Â%s_–r‹úÏsô?GÖS“Œ¼ôÎFJ,v.š¥ ;ÝÍrús˜Å†Œ+M7Z×X»z Jþðº\Û–<ŸŠâÀ˜‹ò{©` j€çôl¯®*ì“ÀöÑÛ+l à«>q²ùðã<[?ãæuÆUq¦7Ÿq›ˆjj×Ûnîš1Åö¶¾™Ó£}‹úµÌ„¿ÏÚ„•¶æy}w/ÿ֜ծË·‡ëÕœ(9Dr‰”¥E)xÉ¡’Kåè¥T4‹ÍI®­+qürøxýß,&wKÎŽNñýË›çŒÚ©œn~nFO·×'ѰÔ÷—øú÷º(\•IÖ©>sËYQýõ‘ªßÐú[ÀÄñGúsÇôí æŽ÷ÙÜä¢;kÿËòÈ“MÀ<=`Û>…OÖÆÜ<¾Ð¾RÈrSK À§»_²ÝÜ{å)¶¶ÃÜ"Ÿ*Ð}3âQÿàÎf,øÏ÷*ò¿Én~ó¶Dc§[6ZKŒ—X/{¬$ö§v6I.p{>“œ,¹Yr´äj¹;lj'ÜR¼(Ñ¼Š·îvÁ;Mc`íE­Ñ.mÎh®¨žÜ»£îèûë;¼Ü0¢{d—‚”iã`w¢Yý†}åvå2™–$Qí^ûnÄÛðá»17̿жßWŽZ¶¤MvìzÜvpÇE“lm‡ )"¾¬Ñ}=!ÿ]ÍJü ÆYŽ-Ö#÷¤$o™³¾uÉŽÚˆâ—ðùúÉRÙ0<[ð¥ƒ^üá¡M¢;úovú™ÇöW…ŽŒèçM³ùx ·î©y·Å ¦v­}#â·c+ ·®ZŸÕ¢6Ù¾óOß øƒÏúÛÿõÃc_Ê«ù®lòäWݵSâÞÿÉÒƒ9ª×¦DŽÆüxÄr·´Ü ­_ÂKµ×Úë€ñ~Z²‘Û„Xý½Ž_äW'¥'6ûèì2¾(¿·mAî­Ÿ=l[ð–²¾-5»÷¼kÛçü`Å317‹m¼àƒõCZÔ&ÛvÞe»Xtj¾-Ïz^ówüËiž©ºK_?Ø÷«(ñOntV´n z•âÛÞp¬¡GõÙƒÉDàäòŸŒ$ã<ý‚>Ã͆rÞöéaÉFŸƒ€'$©Ë¦ æüœQ=Ú«Y…l tÏÝsƒw¼Ô `ß^'”œ]ôƒ @ Em²uÇÍöV‘¬­UóJS,ö³Æ hö¦¿ìîíÕ…y½š¾s£Ä÷Ëhä²±´D㙘nÎÓ±TbªÕ«X±Ÿ@ÎÃNóø‹Íç Y®8p“KU‘oî¡‚ÀLÔÇû:6ëg„üGÙ’h]p±3¯¶ØÈò]Ÿó©›æ8à’¦ªf÷.› À`WÌlúè[ž}(pT³úh‘¿£Ù§›ñ=¿,/¯+InÎnÊé)ûV^^­>Óùà £½œ“ W櫵±²`Ö„ÿÌ„ü%Í 0'g$5kI@î·:ØÝ1}’çV¶ÂØW{^Šð8¡äì'«Þ±i@f €½ß{á)ËŸùi#º6«Šg„—z­3g1‰¶Ç'9i–hŒ±ê¶TG΄]öj; gÈ,„œg]2°{sƒ‚ìnª°È°ä¶êб}- xWOJUµ556m\ÝòSµö¸þdgÜ;ÿÆS?±éÀ¨–øt‰§îh¸|L_•ÕĺÿÝgÏϬzçé¿$\ÐÆ–MË2;åÄ7rÂ@êèŽñºÖ×V^G,gE+‹¿nn`¸ò˜~Mž1>¦ÿÖzëe›êloQ¢‘5ê}ûì1)×¼ç˜çìZžùhCQ‹Úeç®çm5÷\q²eÏZ6ðI_;T_Ìï}¸6äý"ú¾gŒè&¦âs ãÎWæ…qIÆôÔ®F/">ÀAHïl$…ÍÀ*«.ÐÓ·Ãg; Ô˜æŒ÷5¹æhõÑÀåw/´±`f *æØöù^~ø6Ç€Nɵé*àÓZ¸,ó‘míR[³G-˜”fÝ‘¿a‡>ò'}tN…º~Ø‚#ÀÞ\÷$}Îá´€¬$£¯Y–2ÑØí:¼k[uæÈÈÖïµ/@¾ßígYð»ó’ãm¬:jÁ]“mû|rþÞ)@$3Öß0«EÕíš•±ú‚&IÖr'ÇÁÖû¥oFòýÎÕÝ\*°jz?£‹1%¤È…t,ÝÁöE³Ã–¦tún9Ð&$Õ‡$޲pÇy@mY¿Ú¦ºóçDœl>ÙbÏTøÎm›Õü ƒež¹c W4ßq›¬þ¤ÀÖéÿÇ^nÙ3ïïxЋº"¹­³¥eÀ›Ð¯Íb<‰Æ"5@”ÈÎÎ>¬,77mB0X^ ÎÓ_k=ʹiü°Œ?ŒËLÝ_˜9T›>XP)}U®¯»Êî}´ÊìÚ>‚ AS—DPØçÒ1}zÙÊ«ƒ—/¾Î–@¾eÇÍ-8onÏq³Üá¨äo.œš§öîµöÖ=©±i›ÈµÎv%ÿš=»Uõ Ã,y¾²¡¯ñóýíÔ%Í¿¥óâ‚æ×ù0 ~é"±DbŠÄ‰1k$æHì‘$±Hb’›rs«t¼:YbVaaa{"8@d´™ ŽÒéZÝ™Vj}¡¥Zª¢‘ÃÌN›Ó?¹IC ÅNÍLŽhJ²±Íy½SEÖ\ô£i£u¢ÙkC1 W"/T³Ò–DsÛgD¾öœÅ¿{ú`ýÐÈLÙÎ;m3+—?nÑÆ?ŸÊmäöNÙìÉ’›ìÑiªj Ä‰3ŠG S­‰=ZŸOÈË{G›kJóòFœé§1øh£kj¢‘aÞ ˜d”KÅ©´ãò´D£ªáÝΨBÿ¿³ÌË‚Œ³ê¯@–›¥².-ùFR–—w“î4¿je§;¸‚AÓ¹KÏH:øÚ_éÀNÍÞH$ÿ_cS“§f%[–hV>gÇå.{"J6«>βåÞy+ט[+©K`õï¿nÓTÇfºóâÉ–<×ò¬¤ïõ/Ù¸'•›;å_2°Ó!J·UÁ]ÍØ 1²ø“›ûK­õgp‹fCul•+e‰%æšÉ­~‹uL>X¼–XnÆôã\‰ñáXŸ.±Ÿ Èfý²¯“ûlýB<¨õžÖ/-ÃÚcv{7›;û›Ó&›·_k_UÆ+O±äyž–ð>yR}Jö 4VÄKFüù{«ÒœQ*Öñ§xİßg÷MØ.1ÑqZrÇ›zà¶(-Á8ax‚‘@†uR:ÒtuŽqÖ7޼£ºÁÛØÔ@Ì;Þ ©FõKjô±H¦óÏÊînþú 3 û[oT¿?GúV$ëýõýð;›}u—¾î´ø#1±±AˆÃô™c’Œë%çP¶8†I_îÇ鯏OýÃ_šÿÞž×7Á‘¯¡ŽIÔhG<.‚iÇsszü§TéñC»Xw"àžë-îÛvþ¤éR³»ž°~çÿ£wº"ùÛaÎöÔ|Øä,ÀÆmsl+üóã3ޱä9NZ·¬&}鼿ÎÄé>*}µ±Ç±iƒ{$6f÷é¢ÜÏùçÞŒ£3`RÇ\OO4>sÍKbéhcN³;¹ó}gZnäp5¢×QÞü7·™›åêQ9Ÿ,Á˪Y€«'U›×Y] öÏÖoš¦ÿk÷#lßô‰ºöø,×ѲÅÕ–>™Þ?xEƳ‘Ó™j÷ž7í©ùö 5¯4Å’ç'ûgdý^Îí7w§ÿ±ý¿_ÒWFÔ%Xë|&rð!O*9XÿNO0–ˆo2w+‘‡¨è».| ê’r;5nXºë:_Ãcƒ9ì ¨;ܼQýåcûª‚>‡GTŸMÕÔ®µ%ùïÚ¾U-úA%ÏMúŠô±£›WàçªÂþfûÞzÿd«õYªñYinØp¨kŽß¡2bKŽí%Y ÆÛ®mxsÓŽË“ÐØL@°×aÍ6r› •ÕÍ+iŸ~ÀÖ’¯¶Ü+ÿâÓª*4е@$7ãÙu³mþÔÖ¨ûfN³ì™Ézsoó“¾lä˜ß¨~‰®Nþõ’êjP·Wà­ÌD#“ÌÞÔã¨p­û¯]ÝàImÔ8)ªáöäß`9`x#{êL@?G$™Š}ÿåŸy&ɬ}{…ºzbª«“½žåe‚íÔ’ë.sÄs•ä/%¼ì—#zv4û¬WâϸÌÔFO4¸mi@îJHI2:“éõ'J¸¼‘M9ñ˜_«wèŽÞ¨—û"½{Ü*É5¬kßyÅõ fãêwÕµÕ”•~zãlO$ÿew]ëèä/»ýCÙ#<Æ õ+/ä­_é\7‰Œ&Å0:„o‘Úï…úºy®óÕ«løÐF¯–ËEš»`µ®ž”jžËvk‚‘Jz×8ÂSÉ¿^^s±Ú[ëÞ™€çï[ä ä߾њF õlü‘rÅ1ûÍÙûâ:ù§w6RôÃØä‘FUÃzá©©·ÆtÞè |9 WFf:ÄÌ+¤Þ~æ×%) ³à¸4O&ÿ†•kvïrÝš¿S¦ýåHmc¥} û©Î)Hñtì‘ʅúwðŠ ÁÔ†¸-9,—çè‡ðG›ö3íázÏ?Óº;-Á¸V½T.‡ÈL0ŽÍìbdËúk@ÿûþRRø`¥³{å¿‹†m$ËßÒÕ5òc/w@Ñ ù£TEøZÑc|÷ØÑè>ÌãHŽ8†hî —àíô#÷¼ø“›,;Ræ4Ý>}’ÚúÉZW$ÿ[6šðÜätÀ˜¾G|§ÏÉ?Ké“Ò7½Jr²7H¬•˜޽f–˜ÜX¬–.ÿ=ÓáŸ-1_b¿™êrÁ=i‰Æ3á±ÃÆÜô‡´d#7¾Fþ Æñúÿ"ª—ï$5úëRP.ýÉH0NÒ?g¸]›.ôËy†×;_½.<ö¿£ÔsGõøÎ.d¹¥l®…Gþ"Õ]3¦¨m×;6ÁìÚ±M=Pqv\$þ†ºfr†zgÙG'ÿ5o¼¨žœãˆç%}ª°á–·órzü·ð–î“ñ&ƒÓìˆérû 6#tn™ªs´A¸_îЪÕú¿(æ/É…“ãålÿé­¬×ÿG9"¨¿Ï-ºQΫ| £}LK§§®_Ì}ñÒe¤Ñ°,°§òÌ$³j™´QIJ'G%›ê)ÃÕ?½ß–#Ñ;Ï>fž•·äÿßYš€z¬z†útÛfGµËî;ÔS7Í1‹9åYÕ_ç+}LúÚ&û„üìø1¹¹?/++‹éúy¶a&Gût.:SëÖð±õ?µòžižNþáþ‘8'¹!êeý÷æÉÎÉX•Y,,,ì$WW–ææ^:!/ïvý.Óz[;Ñ5e¹¹ôŸwÇQç35Eœ“ ²ÕÔ‚‘ª¼`„úÁèáê´Ñ™jR–Oe÷KP'etu\¹ë’Ô†WÆ<ÁlZ»JÝcÑíqn”œxxõñ»c~TP âÛÏ>ê˜Q½NJK4oÙ,t´ºø˜uÞ1éjÚèaf¿“>8%¾’½v›±7|_ÿyii08·,/otyyyLkòK¹zÉUZó%wExíÿyö„@øÆ¾/›xr ði­2²×­m¬>¯~©²ô ¶0œàÿ‡¬Õš”;R>&KÍ(¢æ³7@Џ¬ï ÛÌ–õ«ÍÍdNY:IRYïÕ%‹m?) ‰ÿÝ~ªn»`‚ãžÉÙÙ=TaJ755O›ë¼âJÓú£¤=\’Ÿ_àÔ×Vf d¯ÖRó΀&–ÿ¤y£›•;Èßi©z°â5¯$…Dß ýhZzáþ-ß»!eŠ_~ø6uÓY…Ž{³‹ª3G§©IÁlâGK-çåm×ñülY¢uR>47š'g§'éøÛÆf¾õ€y€76üÆáú—]þž5ïSN0ÈNLýŸÛ8á3¡_”9ú¥ù3Çz\0R]6nˆƒö SO.ºÊLÔ»?ÝÑúëjw}ªV½²Ì\G^8uI½¥Ç9µa’¥’׿GmùxMt®wÞ°ÎÜrÿ¬ÓyêbVQŠ:cl–*Ë +¢g~Qš›{n¬—B›Œ.Æ(¯ çÉoùräN/lú[¤™ÚíLÒÕèí´Ï7!/ïxyAè(öKÖ08~³’ŽN w^Úè>žø„˜×€rÃp¢ë2¦ ž _ˆ'é1vç:à;6Ã<Çìøié U}Â0sÆ`þ„Á$e'+<>Ó<í!Ç ÝöÙ§›ª&³¾o—öKÜ/;¶¹3N åæÒNðS:ƒs$§ dú“d†âE³ÆT§ŒAÿ~_–—7™lgÈnü¿Óœ§ãô(èŠñŒ¬‘÷uqaªš”Çt¬gt>¸£°°°=™1(ËÍ-Ñþ%/¾ƒê xù8Lò¦d©ë¬±ôugiUIAAw2¤·“žnèñ²»¡~@Ð1ÇŠæF¿“G¤;r/RnÍÄ‚‚dJ" «øw¼èî‘lŠbOòŠä\¿Tí£o;Z¿*ÉÏJÆôÕ†ÑV¦xx¹ÝyLä¼0ò?‘äïýfB^žÌé•©ÿ¼¼ù¼ÔîÕùǤ‘DZPîø¦3 ÍJ‡Kª/5¯E~å±;Í:÷r~^Š}øêr³²Hê|°âó¿Kí¹šø™;¨G®žnÞ¦(çïå$϶%kþ5•i·©¶(7·ÙÓ嗟߇Mîß8§ˆÚùMéÇg£–ß½P}øÚsf+JòÁÛÚHÜ¥]p±Z85›çÞ Iùkú±+õžC+BGþçEv¿Î›A29ˆ¤j¡$}»¯:–*ˆï,[bþ|Ú¡q]rìPú¯‹¥óDz¨K) ýº¿áEöÆ,€Snt’«žáˆ+tŸ»wíÑȺÿqT÷s»¾)ËÏA6u!ºñnæöŽd4Ebù¯n8%WÕìÙÓäßPVžK»4¼Æ—³þÞP0¸ÆpÈ¥uÐLdíF7Üx½£ic†‘XH6÷9%ù‹ä&EÚå¿£ÿ‰TùóÒRÀT²ª»vþæÅõ–NÈçZ݆z|áåŽ2r’€v©Ó…ǦÒg½¥ɪîšþ¿ž—Ö{’‘ ¦Nrµ­“ À«KÓ.aR0œþêµY€`p™Õ=à ^Z/7…•72¬Ã Ý›—Õ{;l ¹BÇèw•>ë=MÌÉéI†u8åùùGò²zO™É¹B™Òg=¨ÂÂÂ#Ȱn8 ~Å ë-õíÖä‚\¡~Ý»Óg½§/ɬî1{ya½¥#Ùˆ\¢ŽGAŸõ˜ÊrskȬn1yyÏòÒzGÁÔT r•rÓÒè»ÞÒR2«[NäåUðÂzG}ºv%© WI–¬è»žš˜Mfu ¥ÁàX^Zo¨(;[µãør™äȪ¼»ôa€¼¼ÑdV—Pmm)ì èÙ“„‚\)_¯^ôaoè7’SȬnšÈͽƒ×Ý:føpÕ¶m[’ r¥Ú¶iCMoLÿßJFuÛ>€üü¼¼îVׄ rµºéw˜¾ìjíç*`÷n\Á ìN îׂ<¡!ýûÓ§]ªÒÜÜȤn]ÈË)ŽÙ}ÇþÚ´iCò@ž¼ËAŽ2úû™—·„Ù=ÊKOçÒäÉSònÓÇ]µöÿ(Ôåggw)ËËû/´ ’¿%‘ü&9@?× 3Ô {‚ÁñºA¿á¥v®2ü~vü£¸¸.X.¶¢Ï;ZßLÌÉ9†Ì饥€`ð"^lç©xÔ(.úAñW)°{wÒï>1Àëþyy1½i®åw޲‡ QG~8 Å¥:èw?‹«ƒVño>™ÒË& 7·Š“±UNjªJêÜ™$€–ô9ùBlˆ©¾- ç’!ãc& \îw楷O%99jXJŠJèÔ‰ P#’¾!}Dú 1ÃV}Qš›;•ÌGLÌÏÏ,ËÍÝÀËoa`Ðí÷ïÑCÖ¾=A¡fHúŠôé;Ò‡ˆ%–ê“Òœœt2bRXXØ^Ö|ÄÒ¢“ðGgfª4ŸOõLJâHBQ8:Ø39ÙìSÒ·J‰3ÑÒç:^Í“@&ŒsŠrs{LoÃ4çþ˜¬,sŸ&­$}4 ! ô5ésé~¿Ù¥/s¢ ÙÓýr¹OIAAw2|y)&äåÍÔ/ÉÖ(¿tû´s_ç¦ÝùR‹?л·ê×½»9éÚ¥‹êtä‘$y„l¤J_•>+}Wú°ôåQºO»¨þ¾ÄÊ}Qþ¾[ô 者±c»‘é é‚¹¹YúEœ¾Pèo¾lŸé¿ûšþZY¿¾49;»£ù:ý ÞaÃÌb%T„¼U€H®×vAòß,±Ò•aÆÐºXúÛ¿Ï_uÂYt²ß‹Œ­¡MYnnß²üücõ‹u®6a-Òÿ~¡~É®( O“Šƒsrzì›” 4_LwÀn\Á‹WÇF™”“8Xü,ÍÎî5!'§Hb­Ä\‰½f Çc‰ÍRÁObµÄlÒ8ýr–hgú•; A"P"ä] ×}Ü¡Éÿ_¥yyÅdðþòB0X*/¼“:`Af&Sÿy}) ];ó4Ã’ÿ×%Áàqdˆ§=bJƒÁ?S’¡øÐ‘:HŸÿ‹C’ÿ—¥ùùÈw”æå”k'cÜ3°OŸ³ŒÅ÷és¶lVŽqìùŸ²üüdˆ[Š‚ÁdÝވюÛO' У€ ˆP\© $ôë8°;&É?|]ü“ȆÑFv°êŽñG;áÓ : ¡83ÿ€ƒÏؘøÿ0!/ïƒ]ú, è„\ Þgñ)ßêïâ?€P€ÿÄžÜÜ©e¹¹¿³0ñKL»—Q?@„+Vëóç¨&~ý=u'ïÜÈÄ ÇÀŒ;YYGi#p¥Ž¿ŒbÜù»Ö]Çåç÷!²D@aaá:i¯;Ð-, $ ŸÖIÿäòôôÃñ£0ʍGbEøÊô¥áqA¯/ËË›,1ŒHÐJÊËËÛéDž¦;֙ዋ¤s®ÔÚ¾Öø]­Wt§»[ÿótýÿä7‘ô1awt )ÉÏ/˜"±EbŒÖ{ᘳQPÞ1cQ]L:cR^^jµa´%b¸ BÀ „0€@a€Â!„ B„0! `BÀ „0€@a€Â!„ B„0! `Â`ÂÀ‘êСƒš8q¢ºõÖ[Õ²eËÔÛo¿m~]´h‘ …Bª]»vu„0à%püñǫիW«}ûöT+W®TãÆ#°#„·€¶mÛªk®¹æ‰¿¡öîÝ«fΜIpGn6³fÍjvòo¨«¯¾šÜhrssÍ}K €hþüùy„0à6°|ùò'LBp¡0`@«“Ãå€6mÚðÂ€Ó Àé§Ÿ5Àž„0à0wîܨf€ @UUUÔ &! 8Ü\tÑE–LBp°#€VLBp¨8ì°ÃÔºuë0a ž €è /´Ô`À }ûöêÙgŸÅ „€x2¢^½z©U«VYn,X€ @À8I½{÷Vï¿ÿ¾å&à†nÀ `0a€ @LBÀ`€0˜„0€À „ &! `0a€ @LBÀ`€âØ`Â@œ;MÀ¢E‹0LBÀ8¼÷Þ{˜„0O@Ô«W/LBˆ7€ @qj0a N &! Ä©À „€85˜„ˆS€ @ÀÄq0Ä `0˜„ &€0€À`0˜L€ @À`0L&a€ À `0˜„ &€0€À „ &! `0a€ @LBÀ`€0€@n0W\qÏao&`ïÞ½j̘1úhµråJ’¿Å*..&ùÇ@}ô‘êÑ£0jöìÙ$Öü×®]KBŽ‘n¿ýv `LL[·n%ù[¬óÎ;DCÉÌ‹ßïÇ ^………$´lÙ2qŒuñÅcP¯K/½”äoÃ9ÿ={ö„c¬x€zÍŸ?Ÿäo±’““IÀÐ /¼€ @½fΜIò·X $`H–a0€ëä“O&ù[,©H·cÇ’pŒµxñb `ê%ç£%q“ü­Õ#¡¸R>a„aD„âJ™„=zŠ+õ ì@=%("ú3áò ¡¸Ð‹„;hÈt#Bq¡ó wЭ¿ò´þ¦Õ…pr5!O«’0q¤Ö¯’yR¿ÖêH˜€ƒÒú7Á!Oé­2Â4ÅUL„<¥+kÐ\®×ÚOàDÈÕ’>|á "å­/¢¹RÿÒ:ƒ0-e¨Ö S„\¥ç´¾ ŒÖz^ë+‚+BŽÔWáÄÏU¿` ´&uç‰ï×zFëY„íz&Ü¥/–…û&XÌÿÊ5wpüo)IEND®B`‚kitty-0.15.0/logo/kitty.iconset/icon_512x512@2x.png000066400000000000000000001164661356737523400215640ustar00rootroot00000000000000‰PNG  IHDR+ƒœýIDATxÚìxTUÚ€(* dfBo™;‰@2“P"%€23DìØEq{A1“ÔØ{YÅ‚ÔÖŽÐKB q÷ßµ¬»ºº®u]åþçÜ\we¥¤L¹å}Ÿç}˜¹÷œ{¾ïÜs¾#8š²!=[—Ðz–‡ýË#HYX‹–Gµq¿4ö¥þ]yivÉ”’¬~å‘îI#»úÆûp,¤¢®-ãaíÐò¨ÿÜxD»»<¢-ˆE´?ÈŸßJõ&úyy$P-ÿ¼·ä¯gKgH/ŒG‡ÅKý½.³?w’‰Š7¦–hYñpVQÝ‹ íÂò¨v­÷Ì.k/IÊ_¯–?×ËŸïïÂÕ¦ïIçÉØé^ãTÄÂþsÔK²âœ®\i°$e%Ú€x8pÀI¿O@¢ßXwÈøùó]9ˆÞ‹h+ ¢Ý:s— ¾Tû=ñRÿ@KŒW‰¹ùâa‰ô£Æ5_•GýKåg¸%ñyyq¶ÜH SK³»•GüWËÁi[þz+Ï/ŒÙøpàÎxØú”°V0±°°wÀ½L.ípz“‹ÎSoáÍU†Y4žùIÅ2êÇÔ’®]¸{¢Ä_ûmšßô'ÊïãQ­RM ¨ú¬p.ÅÁVjy}yÔ“1ÀÓÒ­FRmÏæGµu ,8„; ‰4+Ds9Ð\áÄ÷†µ?ÊŸO”‡çÇFj½)>`OÔ>ýX$p²×ï‘?×ÈŸÿvbìh¯_ Ì€„  јÅltú¥ôºíˆZ*H‹°j[ŸÚ³ø/UoÆå˜ý¡Ëâ•oËÃ8/. IÔÍžUüu¬Û6Pö¿]·|0«¯¼DÍh%©E%ºeÿ ò°v¥ù’â[bÃ+Æv> OþëöûÿƒéýDmˆGµÓ®(öw¤Õ$‡òH÷€qL^D{¦îh`âݸ¼btNZ Ôµ”Î<aª³}ˆ•jc+ŠýÐ’‡Úv§¶ßI§Ë±u51FÃVV)@}‰EµÛ<›ì7åaí%¸œÉÙ½{gJIV?9nVÈ1t™Yéžx¢ÑG ÊiQ°÷ä?È·ñ±8–=®G^×wŒ³{K³»ÑÊROÙž­ËÇt÷îNöͤµ—J8kDyT»‹m‡ ÷;UˉV{D/0h&Õñˆ¶JUë—ú{ÑâþËE£sö/‹vë<¥4;ú‡—G³Ž–‰ÁYñ°¿ÌXÜ©¶ÙÈ>4·n…¶ÀèOm“Ú‚#ýwsoð7 < äs³Þ‡Úâ³¶<ê_ªþ^crX›clû‰nVo-cQÿ%±¨vj¬$k´ªH^>2;§¢ØïáÎü—IE][Æ"þ#e~TöŸÏˆ ’êlZì>ù/Í.d°L¹›ãa톲hàÁ~=p ÅÅûN-éÚE%ÄFÐÑ.”^/ûÇÔùÕ±ˆ¶NþþOÒ¯¼ HúWÕßU}•XTû½9™q…š0P“ñp «À±IÿÈ®>Ù×ÇËgÀ³ œ Ã½ûSÙ­'-v‰LDïe°L«ÿøoRo?i`Ÿß@Y$+7 Œ©Kîý·›+‰TÑ®ÙRÔÐ}»ÚåQ•üõñh`¦Zý ŸÍÇ©½Ñ¬&»%ý²O”mú-ùóßôïô¨â Z#ü:ˆÜ¥x2¬­G´ÉêÍ)­Òþ|Ûù@•€Ê$ÿd™à_-ÛèãÒÅÒÔ¶úl*ƒyíïjÛƒÚ¡ûxXûM<œUÄäX"é/êÚ²<ì?AU¡—þ‹>kªZ ´NØ óí¥—ïÉ`êíx$0AÞ£ Z*$5ÑÓÆØ» œ)ÛÞ éËæÞwÞâÛÃŒúQí.u^z¬TwɤeC2QÉe,âiN þ“~hÁ•EòY@K€ÿ™Ðna´~E_é<µZ­Ø ÕBS(t¨¥åªEy4ðªL? 9Ö¿š… gÄÂþz¢9½š‚1YXW½ÿú˜Õõ_M‹€ÿI´ öZ\ ܯ0Z/ì ãí܈œ Q>ªÝfIùýÈõª7µ‹TûOŸÖ TÁFz ì1ézÈ6sm<⯥ÙÊwi½ðÔþ^98üÀißz2±»€-`è£sÚÅ£Új¸l ©¸ ð[UÛAk¨VM kèQ  }–‡§È¶ñ5?컂pbaa Z3¨â^ ŽÎÙ"P DG º‚ÿ¼ÝhãÕyôòÞW c‚ýØØzõ_‹†²ýÈE“‰¥þ^ò™2]ÞÿOéX9ô U€LŽgptœ›âaÿÅåcº{iáÎA-ÑVÛ>d"Vh¯Sp Ó±uÀh{Q¬¬D@uqg1¹´ÃAfÐå´uÇK 90Lept¬ß³*ÀÆ …h®Þ𫳴ë @²w-ç×u'øcå¥Ù…´é‹ã9˜^W_†víH£Úå´t¨ø£ÚÃ Ž®p³ZÆ«Žz£Õ[—+¢ƒÕíE~´¡ŸÅ"þgËÃó§•fiôh O0[•GýçÊ{¶–vëŠâÁwÓê n xžÁÑuÕ¿Pû;iýégRQ×–j…FÝ^[c?mäûêy£–_4:gz|ú)‹vë,Ÿ5¼íwÛ€ÿIZ?¨ãa]éOj鮹/í)ísÝ?/ëg?ºÈoŒgNÔÉÔ-‹'AŠŸ;¥Ù…òúÏ–þ›¶èJ_£ÀÏ,ÿõê,pÞÐ%fFñ¾hàfy­·ÑÞ 7ÆÃk¦Dý}xD$õLWÏvÆy”®¤GÀÏÛÑô/åÿÕ“K³ÛÓ3š†ªØ?%ÇÃÚ½å‘À‡´-Ľlk·ÆJ²SH°é\Qì猪ùËëú m ëŠú«èÀîöô€XÄÿÈ”°V@©?j?¿¼nG–GµÇØ_‹Øh?–Éëýea-:±°°O–ú3¥$«Ÿ¼~›'ÀЖp§BÀô`ëã‚x8«ˆž²kÔ9è±H`¨*tÆ~~Ä„û¹Ú·®j•¨¾ÆgטϠù´܃[è)À6Ä%fÁ@fA­¨vKlSvŽùªÏ©d—'ÐÿXD{‹öõp=~žØÊÀˆ ØG¸4 &\xrÀ”ÒìP<¬ÝPÖþH[@L§Æ‘™S§•fin{© òû+“ÿ5´d 4f`5#6æä„:½`פ‘]}ñ°ÿâXD[Ç=G´œ;¤‹ã‘À„Šâ`+G'þÅÅûÆ£Úiæä÷99ö¿ÍÀˆ5ñת3íUpê°7lóÌìo¸Ïˆ¶ð[é<Õw…ƒV(UŒ î‹hã9B›b,x‡ˆ bÿ³ Ž˜c¼"3í<P>Êï7Îú÷Ñæ[¢Úåv>Ò´¢Ø@,ê¿„cD1AÎ'‟'a`ÄDVV[ìòÎXVÖŽS§Hâþ!:ÊÔ$·:RÐ.Ï$uÚšLe"«ÿ)"^¨{ëÑf00b2öšKq-ÉÅþŽåaíJÞ®!ºÆ­ªžGÅèœ6},5S“§ªX÷ n8p'/Ô­0–28b´Ð±]Æñ}íéwÜDWú•zL kÖY‰ªŠro0iõzÂþ2"^00—?3@b²] ƒÜüt´ñ‹Fçì_ÕÆÉϰŒû€ˆ¿pµ*°7±°°EZ&$Ãþæö#î&w ªFÄ æ@Vƒ#¦HµÇ~^ªÎîŽÎigõû”kˆ{ðcõ¬¨(ö{Ròl*õ÷ª;±À8Æë©(Œ!âƒX$ÐSìw±ˆv‹l{ÉhÓWDÇ£™æ±`\oD¬çQiÚñˆÿ¦)#³:%ãÙ¤þÜòˆ–ü»~äzcj·tÏ#⃺ŠÃì‡Æ´ø™ªAQQ!š'¢-›ûûg\#bý—z–ÄFäñlR[ Ìz;_rm1 î˜TÔµ%/ü7qŠú« 1{+Õ^ØF6ßfñ°ÿ(Ulk‰ˆ‰Nœ¤/ÇJµa_ÃþQê®%¦qùÿ‡Dº°±HàyH´@ ={JXëPßÄ_åceÛ]õCÄ”œh"Ÿ9õW¯(ÉÉ6÷ùsí0ݾG¤ ;¿¡ˆ¦3@¢uŽè TTŒ î·«¶ª¶ ¨ \þwk¹Vˆ˜r£þ¥{š¨Ûù@³ø([ëÐ"úgéÀNÄ# h±%‹Õ¿¬Z¬jUÄ"“å¿Û̵AD ¸39àì`ÐEDDDL« ˆL ù“m ƒ."""búŒGˆJ éÄ#ÚÙ ¼ˆˆˆˆió»Šb¿‡¨’NÅèœ6ràù†Á1õÆ¢Úï‰H e”GüO1#"""¦ÁhÖÑD£2bÿH`DDDÄ¿ýh_\4:g¢QH¢¹„þÌ@Œˆˆˆ˜BÃÚCD¢râÿM Ĉˆˆˆ©Ô_L ©Ÿ(õ÷bFDDDLÕÞíµ “(Ò‚Œ3 #"""&ßxD»ŽèÒF,ì?‘1éþT>Êï'ú€´1±°°Ey$ð!ƒ2"""bR}ÈÒNy$PÁ Œˆˆˆ˜Ìåÿcˆ: íL™ÕIL?08#"""&Å¿¨U—D` âm.ƒ3"""bÞþ‡µˆ6À2ÄJµa Јˆˆˆ wGùÈì¢M°r€ÚÀ ˆˆˆ˜À·ÿQíM¢L°Þ*€°ÿjDDDÄÕÆe€å¨Ûù@9P}Î`ˆˆˆ˜?½htÎþD™`ÍU‘À Öˆˆˆˆ‰00è,‹*R#¬Ÿ°›VüïŠhà`¢K°ö$@Äÿ ƒ6"""bŠÿE´×‰*ÀòÄ£þá ܈ˆˆˆM*þWJT öXõ/eðFDDDlLò﯒áT3"J°Ç*€°ÿ(pDDDÄF½ý?‹hìD35{Í ŽˆˆˆØ ÿ6©¨kKBI°×*€H`ƒ8"""bŠÿ…×E€í˜XXØBdb0GDDD¬—ß_QìïH ¶¤<ª]Î`ŽˆˆˆXÃG‰À¶L.ípÐ>cPGDDDܳS¢þ>D`ïUízuDDDÄÝ‹ho5€Vd·—Û· ˆˆ»›Œ!j§¬ø-ƒ;"""â.­©¨͉ÀL+ÍÒäàö<"""âÿ¼ýûÏ!ZG‹h2È#"""þ¨öÁE£sö'R‡MºËî{{DDDÄ:ãaÿÅD‰àHä@wƒ="""¢á'c;H„ŽdÊȬNr°û†yûï/#:G‹j·1è#""¢«“ÿˆö÷²!=[€£¹¼¸G[9ðý“Á]kX»’¨\AyÔ#ƒ?"""ºÔ/ËÇt÷€+¨(ö{äà÷9"""ºÐë‰À]«"þ« Ñe~ÓŽHܵ `tNU‡@Ýb,¢ÝBî\Ä Ñ%~WíÖ™\ÉäÒÉÁð/ˆˆˆèx£Ú]Dàjâíl‚DDDt¸_M kˆüÀÕTTˆæ±H` """:×@Q€¤¼4»„Àꧪø1ÀÏ“íeDDDt\åÿ¨ÿ"=€_/õ÷’ƒä ˆˆˆè ÿï¢Ñ9ûéüï$@X»—@b<ªF„° &ìê‹G´¿0 ""¢ܤŠáìn@D›LÀ€ˆˆˆ¶ûNd°*Æ÷“ƒf """ÚØ%DuõYÖŽ#p@DDDûê/&¢¨'rð\Dð€ˆˆˆ¶3¬½D$Ц”dõ“ƒèˆˆˆh#ˆ‡»çÉ4t@T»‹@íb,¸ƒ ” éÙº<ø€mà_+Šý"8€Æ¯G@ˆˆˆ–7ªEäÐÔI€ˆ6ŸÀ-ìÚŠ Ñœ¨  ‰L-ѲäÀú5Á"""ZÐñ°v(@âVL%À@DDD :›H TŒ îW Td ""¢…üª,Ú­3‘@‚QËëÔ2;‚ DDD´È±åDhI¢<x”€Óm<⯽htÎþDgI[Ð%SºŸx ""bZ'ÂÉÌRL±ûÛ‰Žy>ÌÏ…y™b`n¦ˆ(C^1FþóqÊ Gœô‰‰A¯8Yý>×#Žúù¿ fŠêÿÍõŠüçYÄA\Y OD<1}ú_!"³*†W±|¾W䫨^ÅøÿÉ <âh#'¹€‘ÈÜàç.?û5òA0!˜)úó Hªâ®€?'ADDÄ”þ‹j‰%þÅŸzónÄÐ2––1õléb3±ÿÉ6yÌaŒ\Æ+žT¹ú>*×Q9wÜ—ìûDÙ††<âùóéé÷6JôëÇÆL¡WLzÄx‰\ E ‚ˆˆˆ)tyE…hNÖ8Š…ØWÆÂ ùD…L–çÉ_WÛ*ÉoœÿVßS}_õ½Õ÷ïÛJ´£E€³fò|"O6îóó¼b®üùG$ú ñ{y}V[ ¼âõ ¤Å4r ¢½F0‚ˆˆˆ)ðûx¸{ÑWýQÛeeÒ{ªŒyï•?×ÈŸÿ"ØÉ?HŸ–׿<•;ÑbÀV³yuEöf›ËuèÔ Ñ#>1êøD…ÚãTØYH«Ú;±H »¿$(ADDĤÖ®$òÚ=*výyµ¯ñf¿.¶%ÆoàsåpL­–—µ- ¬”ð{ÕŒžñ†ß^{öíâj›„*tò‰ÁÅT Ý-ñ°ÿtL·Wž§ßpB‘~ãIƒõ[Ï,ÝÉ›N9T¿áÄÁúUGäs­M+Žìmô‹é§ûUŸQÿüúéÓÆär­Ð*nœXXØ‚¨kçåü2Vb.i_j.s'†Oü„ÀÓjÅpðÐê 娽*j»93ÅžÔúµYéôçAØy+À3'˜LU"rÇÄ1úc×\¨?wß ú›sgé+Þ~U߸¦R¯Ù¶Uÿý÷ëeíöízÕºÕúÊ÷ÞÐß~öqý…™7볯¿D¿ëü£ô«(àZ£c¼Z&øw_p´>ç†Iú‹ÎÐßyn޾já£ýoß^Sï>S³u‹¾Iö³åo½¬¿ùôÃú³÷^¯?Zq¾~ÛY£ôi‡1A€)ñDzmÑÖWüš{÷¿ >O©?ª—ƒj…EOt¥5Bò:z¦è%;ù™ø¯”nÏ:{†ä}™™ç£9ŠP­è’)èR0Æ£ÙúŒÓKôǯ½Xý©ôµËéµµÛë°4Å «–ëo?ó¸þäôÉúígÖã¥ÙÜ´¼SF¬ßqÎý©1#ÑW {*ú‹šHX³ô]ýõ'î׫¸@¿ù´bÙÜLtÕÿÛÜ_©ÂÕ¹^q˜YÀ›š^Öq‡ÊÍTަr52VHì~!Z¨Ù>óìMµÇº1ëç«å¯¿¢ZÂoŒU1^¶àÖ¶‹øGÊzÁ 6ömåCñ3„¿zÃÚ”$/õqku•±R@­<¸ö¸þÜ+´ŒjËËìë.Öß}þI}Û–jËô™MkWé¯Í¹O0vÛn0¾_1¶³«ê2™{ùÇšu½þAœm ÕÊë÷ÍÕÀj2&–çãÔª`ê†Aªiò‰nÆä€W\`Tø¬k˜LŸßJ_ zĽZ‹L×­ˆhw¬`}UÉÁ¬iõwžBß^Sc™fO®^üŽþ»[âúuL`¼n\}ΗéKßxQ¯­­µ|Q+½ü{£Ÿ_yx{ˆ uGYX‹º!~êÑZ´•1ý™æ6ßïˆ§ÓæŸÍ\ê^ã4µ V¹–  ØžmEëP†8D ”Þ(ñKæQl#H홣¯IO.ê*Zº¡ÝM*êÚRê!hÁÝ/ïûíÕ^â†ìÝ·bbóÞ‹¿Óï¿ü¶ `Ò—÷?T>A_üÊ3¶Húw§Z¥ ¶ ¨­ ÜW¬çx1ÓéoúÍ#úÞ0÷—;§jù~]NôbžWÜ  ü©œIåNdàØ‰|Ÿ(2·Ü#}Gúƒ¤ûežGÌÊ÷ˆáNŸE,‹dåÊûk‚Ü©ˆßa¹F±½5Kß³m³;U!¹·O3¶1p¯1Q^sL?ý™{®Õ«Ö¯q\ŸY½øm£fÀÔQ=¸×¸;k&—v8ÈaRó GŒqø£26ü'ñqÒýL^ë·C^q·üyv®O "ÑøïÄ@gµßH%bV­æ¡‘4Õé½ÚŠÎÝ ˜@ð‚ÆQcGõÖŸ¹û½zÃ:Ç%1¿ª°¹JéáÛŒãÓ¸÷ØXo:y¨þÊcwÕ÷ÞgT½5yvÕØ÷é¿ã¥þNŠ‹ ÚŠžæq}ï'ÍÍ-ÓU]®<Ÿ²t „Ú‹AŸ¥*\JŸ—ê#. w‰Zz¤ª¼:­ýÈ|6AŒ»íS{å·Tmt|ó«í55FGÑ@lˆ×?Ðh7ê¨J·õUlSïI¬Óµâ ¿_`ß½Œx7á~(s”çd W¹JA+ÑžÌ +ÌY¶Ïy%Ä/ò|⮂ ¡9f+Àž­Õ>·íWÎ1ŽÐ«Þ¸ÎuI̯÷£¶;<~íEú”ÒÚ†k÷ýk•ÅÅûÚ9þé)º˜qò߈oâׯ 3'ÿâÍ>¤‹qBìòг¦Àl–65ÙS|b¤¼¼ÍíÞ>¦Dý}ä€þ-A;üí¥'8rÓ—9¯Ôg]yç£ãΓe2É}üÚ‹]±=¦¡®\ø¦Q,”vâ:ÿyE4p°MCžæy^1Ú|9öñl“¬•>®öìç{E¾Ê5ȸl°J Ï'Ž7fê¼b-•M©OÔH/Ëñ‰6vn±Hàd‚ç+{ýÉ™$.{qÙ›/éÓON›Aýæñ#ôåo½B¿Ø‹ æ=bԡ͸ÃXT;Õn1N¡Wd„|b²™´»6âÅWÈ+Ö¨œA:.·­èD&àŒ Öê¶Y”£’ †oPG9ªš vmñˆÿ>‚gªÞl³Ü¿þªÂnOßçè@é§Šbª:ô‡zn X·Z0víÇùûþgÙ)® ¶¸Ö+¾$NmðÙ+¤7…|¢”Šü.¡ ƒ8(7SDŒ§O¬f©T½ý—Úf¡*ÉÚížO,,l!ø%8ÎQUí~óé‡IP©zû{ãIChK.R­þXùîë´ÿ&¬¸êˆ|Ú’3ݦêÙ"†Íš¹Âõ[âÒz«¶? Þðçg/™ˆ^­EfÐ'ŽUéyPÖ«NÀÓ¹¢ŸîóÔÒìnrÿŽý½ë‚£õMk*IJš¨:!á¡ø™´)øØ5êÛ¶TÓî›èúÊ%úígF›r–ßÅ"|«Ç02q-4Éæ¥ÕÞýƒ¼V3CqL°ð‘éÀÞgWÕY©q±|x¼bVþäaº{߱˽-kë vì\9 Ï¹ñ2–/'Xuô›ZNsžSG÷Ô_}ü^ÚyUÇ$ª#Fi_Ù÷Ѿ¨¨°nÑcc zěě{­ÒÿržG\Ô«­èA&M"Gˆýó2DX>XfH7óÝ­¯ªÙi+ßKóXÀ xì©:Êî­y’€$É¥o¼¨_{ì!´5yý ƒXòŸD_›sŸ1ÁB[sÀ$ÀˆËëÊ‡ÈØêuâËÝZmÄæ¢DÅêd,¼ÕB3TǬ|ÏxgC± è},9Ö¢:öT%¦•$2É?.pM¥~Ë„(mÎÞvÖ(£xí:É'k,˜¯WÕ‡6g'Zæ¿Oä™KýwWþªxßi,?Sô"#€ô¬ð‰6òA}œô1ù@úçÿø“¼ž¶Q (¬CyÄ5AŽ++Ö7¬\F²‘"·VW鿽ôÚž½÷’ãûH{NëV,Ño:åPÚž MwŒ¢–®ËøéIöøïäßdŒý¨ªÓEµ~°ã„Ø'äÅ2ñ½[>°þÌCÛœ­õˆ‡zgŠ.Ö˜ÐÞ Ð±Ù[ÌߌÔ7sÄ_ÊÝ^³cÏlêÃSÏ2ö¨ÓŽS|Tàú5ú-gDhƒ6> m+K}¢kžGÌ2ßp;zÅŸÔ)ù1\ÅÖd`äÃ+ò‰ ê~c¹ØN´J×ýP~äÿ‚Uú?ïH}kõ&’‹tMl¯Ñ½ú<Ú¢|üÚ‹õÚZ’ÿ´ª±iƒ~ûÄ1´E{º#>:§]*ã’ÂÎâ@µœ]úOâDñóháòÒ4#‹Û“ïùAŸ¸&èÛÜ>«+=1wuÄŽ}¼ûÂcôm[6“T¤»Ú¹L&«¸€6iŸ¸i²¼_µ´[ l¡aÀ¦…Kµ±) IšÉXèdV‹Š-êEY®W„ÈÀ-+¶»ö¡ï+å5œÊë^õŸK€cUð¼m3ç•[i@-+§mZ×G®:—äßJ+ª6ê·žYJÛ´Û1³ÿMÉŽEÌÊþ‹]œôÿùoúÜ9`,÷Š]8ìPUns="+%íqë«‚f<“DXïÜóû'ŸJµ ³¦žÍ² Z½a­~óiÅ´Q[Ô&+éÙVt–qÏ.-ð÷©ùÝYÞð3FAŸ(5*ç×í—wÓÀðUÐ'.+bß$Ol'À±¶7œPıeVmÉ`i³µ¼ç¢cõí55´O‹ªN/¹öØBÚª}üvbaa‹DÆ*¶‘ñÝdë|í²Øîë<¯˜#¿{T^†æDú{ ¨«h™çãäÃs¾ôG ëó2ÅÀd\Ó²!=[«?7ÖõÊÃúªEo‘4X\u"ÃM'¥ÍZÀé§Eçh—Öv廯ëÓÆäÒfíR`DN0a«<=¢oÐ'V¹éhéù'rd@#QËãƒ1M>Lk\2xü(¿ë‰8Ê"þA6ÞwYš­/~õY’›¸fé{úUcC´Ý4ZqT}êå´G›øÎ³³õx4@ÛµÃ@ØbScŽŸh#ã™{\³Üß#¶…¼bªüuw"w€’Ÿ! Í=TnXFöQÐ'ŽKÔµ‹G´³ l¬ëó3§“$Ø-¡yþ ™ÐdÓ~Óà”Ò}áü¹´C›9÷öi´_[Ô®kJ¼!ã—±.©îÿQÇ)SDûú’KðÈï…jɼãŸx®w¦èÒÔkVÜI`cM*Ÿ@õrdÂ̧iüö’ãiÃÖ÷…ÆÄ!Ÿè&ã–]ø¯•ž¯bQ"r€4ÌýC^1S>ŒÿéàÁæ ùOmÚ€ÿm‚ ý;q°¾µzÉš».8š¶œBï• $fv>`~í±‡Ð–­}`mCcŒ<˜ c•/‡©ïvŸZ‰Jä `ÔžyUtE> 7:xÙ3=Z‹¶šˆh%°±Þ¾ÿå æ“ØÜ«+õŠ#{Ó¦Sà5G÷Õ7­]E»³¹ çÏ£€µýiri‡ƒê[´íÕJE'þ[¥1ÞöX³VÀléÜð×\8ª!×criv{ëùû»®&pˆo>ý0m:Ùf2a|ïÅßÑÞâ7M¦][زmÀÞb‹\¯8LÆ%;²³WÌgo?€=WtùD…¨<˜¥ªìÖç:L‰Â4ÖrÆaÎ.w˜3¯8¶D½ú<Ú™ƒÜ¶e³~ãIChÛ–5pæîbŠB¯ÈúÄcN,¾,c««sÛŠNDÐ6'(Ä~y>1.äË6Xý_Ð#FìíûÇ¢þKf¬µôÅ;¯‘8Lµ4ýê# hãIðÚc õÍ›ÖÓÎæ’מc+€UŒj·í2žòŠ!ÒZÇõó‰‰~¿8€ˆÀä{ÄðW<ï ³iÕ÷¸~œûìv ¢=H@cŸº¹Œàß¡¾òØÝ´ñ$¸`Þ#´/‡úhÅù´qKn¹ÑÞüeQ,ľ2Ö¸IºÃ1±“O<—燸e" Cä0]UØwÂ`òŠ…»;.0 ¼C@c‘"fÇôÓ·Tm$ðwð©·5жž@Õ) ´-çZµ~~Õù´u ŸPà]eœ±Ø!‰ÿWÒò3E/"a—¢*»ÊÁ <èŸ8``û[È'Jw±à4Öðµ9÷ô;ÜeoÎgYs‚œRš£¯Z¸€våpŸŸ9ön=7Nì“ç£elñ©⣿¨jþª~‘/¨:AoùbçAnGžOÜU(D õ½*Š‹÷U9ÁLú½eBÔxCLÀï|ŒA›O€]s!íÉn¯ÙFA@«ÕûõC:ì{‡¶Kþ!ä—u-‰t`w4—ÆØ G¬t–€òQ~?ÁŒ5|÷…§ö]âÚe b´ûÆ;utO}ãê´'—øúSÐî-â¥Ã»é‡v;Àîoü7¨—:ÅBìKX õ_à£T"mç-‡õh}Mú½}â‚|—9ëÊshûMð‰/§¹iÀö}úiÅ´ý4û›õ¾íö±õË»$‚€¦MxÅPé|;†y^ñÓq!Mš]8.A¾Ë\·b‰±‡ößp§ÖK¯Z·švä2ßœ;‹öŸFOêÓVùšÙ5ù_¢Vo±@¢'†Øu"`dv+½,ì'ÈIƒ3Îëµµµøn¬P>>пöbÚKWP õ–•øõÑ·¶oâŸ!JˆP ©äûD‘9`«óp‡vÝ_ŸTÜ€'žñÔƒ÷.µòÝ×é >< ¯^òíǥΟuý ¥ûý»±ÿG‘@JÉõ‰AAŸxËNƒfaû}õóŠ:ø¤ÈëÆõ×·×ÔػػÎ?оÐï¿üڋݶ¥Z¿úÈÞô…xîàÎ2&°Ù~x3˜)€k(bßü áÝ›9BìÏÕJf€÷ì2€øšé§ömG”çÝyµ+ƒø-ÛÞÐ×nšªW®;]_¹n‚¾nÓUúÖmî|«ûæÓÓà{/þÎ5m£¶v“¾±ú>}õ†óõʵ§è«×_¨oÚpç·‹Z}Cõú¢•¡]ö“Å+ õM›uíÀš¥ï[AèÉñÈ<Þú¯•ñé"̆ӣµh«bz5qòs¾¡b~3öŸýŸœ£îØëÍf®ðy#··þhþ¿¹‹O¬6r™ÿæKgüœoäfŠH®W„TN$?j3îØþ }(Cd«#HdC¿@vªÛͽâ¤72‰O—ÿ’~ ]!}Iú€|hÄåÃäøÜ ѯÐ+2¸ã»™äñ‰äõÚj‡û<*§µ£8`R¼oÒ‰® Ú7o}Y&4½w›üÿ'¹YU¨oÝö†«®Í“7_AŸ¨‡ÏÜ} ÚÃ6}Õú³÷ÚO”«7L’ÿývWNÜqÎáô‰«Æú‘9­ìƒn‘ñæ8’Ã]ÓÇ#<ù¢PÅä*6W1º«{D¥»ÿËFùÆfŽ´Áü*w:_åR*§b…Xªã©·å!¸X6Ò{¤¯I·K°ñ™ññSs‚àIÙQ¯‘v¼L~«ëÃdØW^“‰æCÍÒ÷±¸{KýòYH V-ývK°¾uÛëúÂÊ^õJj”‹*óõm5 )ˆ;¹nÅbÇ¿ù_µþ¬z÷åÚeÄ&;¹$K‘ÕÒq¥Œ­/!éB-¯7NŸòˆÓeq—šP3•A!ös[û)è ’×"&ýÒÊ÷k0'$øó\}ÛæjWêjIÿâ•ý”Ô(—¬¬×ÖV¹&¡¹é”Cé{ðö³G;¾ ¬Ýxeƒû‰rcõ=®›¨Þ°V—fÓ7 Û‡tÙÏê1ã×jyzŽO´q[œ8Nˆ}dŒPÛHC>QòŠyäõÏ5ÔJkuÝÔõËm+:‘¹Bƒ)ê*ZoöëÒËvx{k3¿ úĪ G<¬VOÇé¹dRÀÜ‹u—¼ÿ¶êýéßq_ý¢C»0%Àcg¸çíöºS•Ô(W­?×5×iîíÓè{ðù™Ó^s¾¾°2Ш~²¨²—«VÌüì½Gßh¢Ë1}@§VŽ ULô€[7U¤[­”U/óò«-3½zã:ÇÞó%«†%´Ÿ¬X{¬«&ÌE?©§§ökgÅäÿ UûÈÖ+5=b„ô6cë•ùÝæ:µU ädÚVJúÛŸñ¦¿®¸ ë–˜©Õ1Þ®Çɨ‚1–šYö ýä>m °êá”Ò}kõ&ç´[{|Â'V­ŸèŠ„æºqè+¿ðæñ#]ù?Ñý佚^³}¹k&6®©¤ŸÔ3ùWcµ…b±UfÇÌ,>ÖxËïŸW£iµQ4¾½è@ž¦B~FEͺý6?Ð q~§Þ¨«=g=ÛŠÎvjç…Åæq”ß[åzžPI µgœv|@^³}¥LB OlVöÒkk«ý,Ÿ@_ù…]s¡cïõªõ$a K_·éW­¸á„"úÊ<©O[=däÿuª“Œ¹ZÛ)æRÛÔ„…™[|MüŒ{Ú&`¬Ö•í…R±<:S ”ý·ÙÀFú“t™$'K»Ùf5@ݱïXå:žÈ$À}äJçŸkŸÈâÿë&|ö·7ÐW~áËÞéØ:‹* ’ÒOꊺg`æäÓè+»QMÌ[hµà[v:ÖO~æîÒ2™ô/7cDbelðªcé½ÁL1€L=ÑËpêŠùUÑÈ0Á“ïm«ðÙh[ÀŸ­pýذ{_x`† –ÿ“´ €•ëãøë÷Þ‹¿£¯üÂeoÎwä}®Þò\Òú‰r[Í×LÌ»ójúÊ.<¥o;«¼ùÿØ\îßÌê±T¯Ö"S&üçÇÀ±ŸY3Ë+6ɼâ,¿_@ßHÔþ sùó§4*LÕRž`;ÑÊÒÛ¼"Ã\óSšgùõñœ°K¿òŒÃ«ÿWÉä#;iIÍ¢•!ãÍ©“¯á&ö4ïTЩ53Ön,KêÀ†ª[]3ðö3Ó_vQíß{þ’IÏÝV__læd0L¶_¨m0N8¥,u‰†8DvÐ'è ˜&¿ÊóŠ9ÒÑÅ>§6äƒÓ½*FUVg ˆí¬JWoy*©Ir˶ןÐL“K‘^{\ÇÞ㥫ÃIí'•kOqÍÀêÅïÐ_~áot4ŽéMs¼´1×'Y¹z¿Ì'ÆÈÏù${ú1Mª\vvn†èG†¿kš3s;þ ]ïÇÒéù"`ÉÕB´PÕHU¡Ãt]£|_3ýìÈL§Žê¡×Önwt ¾fCYÒ'ÖoºÉñ ÍŒÓKè3Ò;ÏëÈû»½vƒ¾°2Ô~²he¾ü»¶»b`Û–jcµ}FÓÏ’ÉAzúûÎX¡+Ä~VŒÔ[W36úq,Z¨>ÆjµÒØÊ/S†:¯]&ý§É ³Æ¯ðšl«Ç¨¤Û‚«f²Uát]Ÿ‚ÌfúÄAL(o:åPÇâË׌Nú@åÚ“ï¿üúŒtÖ4gýXµå‰¤÷åÖm \³ àšcú¹¾¿œSÔYïÙ<ñÐ"+ùS“2:N&XoRÌ->P“秨—ßnÌý›™ÍÖÓÐfþE­ PI·åú”Oœ-?Û?Òq]ú´k®_0¤‹ëƒ³{/>ÎáAx¾°²GÒ“šÅ+ ŸÌ̹ñ2&¤soŸæÐýÿW¥d`cõ}®™¸ýìÃ\ÝWÎÜEïÓ6mÉÿy1ÁjEþ‚mDŽŠÉdâÿ ñ)ÚÌÍjE€zîŠÄ?×#Ž’_z7mîµe%Ï'ÆYi9On[ÑI~¶ÒqM Ûï£_2¬›«´‡§žåè\½mLER£¬Ù¾ÊÑ×ò™{®e@úÒ÷9òþV®;)%ýd͆K]3pße'¹¶Ÿ\|h7½_»}Òï¼j¥bf*æ’±×ñAŸx›*þè×çyÄ‘v8A£q‰I¦ˆÈκŠN¬`쇳Ðq‚jbÂ<›4¥×bP§úå#²\¤=qãåŽÀ7VÏLÙ@õ–§}-ç?r'Ò7~÷#ïï’URÒO–¯9Ü5\y®+ûˆSuÞ/õ+ûÚ6×/ÈüÄ*qMŽO´ yÄ%ìíG‡ºAÅîŽIüó=b¸üRËlt¾—~þ ÿOúþüìþûÏ™‘t­ÿTÇ~Xe{@°èòŠçS}†u?@/+ñ»2P{æîk€¯ÛtuÊ&6TÝáèkùÖ¼G™.œ?ס[e)é'‹Wºfà©1×õXدwo™òx¦Ä ~éðnzyÔ¿4í/ÛˆƒågºGÒDœéη»È³>ÛKnö§ÿùï¿·Ñ÷]šç‡Ú6ñ/ÈZÐ#žIúñ uû~¶¨ &}Y·`$aê¬OL’N”ÿìDµõ@­BÈËåÿÓ[Uv/h%ÚËŸÞdÎVª?_~–nêïË÷Š|ù³ÐœQ5N–7ùU­T&j7š¸Çåg~Nþ|Wþ³Mæžóó°WÑ@•xË67Ì }ñ˜<ÏÛj~*¯ÁèœÖ®Lf^x`†£ðUëÏIÙÀš 1G_Ë…/=Í€tÙ›óW±¾fQÊúÉ{+üzmíWLüþ®«]×?Få´JéØÝWÆ §ök÷ËÏðBÚ^bxÄù™^¤¨ŸíT9Ë_Ìæ]3§y\å8f®3sŸ“åïW9‘Êr½"¤r%3gòª*i/§åŸo怕ªÜPåˆæ6õ“ŒÜÑ'.S¹¤Ê)Uniæ˜Kœ³.÷ü!©Gm{ż^á·Mâß³­h-?øMM8šìsöf‰Ùhî•ú*³ÀÙØ`¦ G°h妪‰jyyA[ÑS^ƒ!j¯ˆ¼gÉÆ1Uz·J6¥Ëå¿ûÉëû!ïÍ©é<= \3©¸»>Â`J¿û±A¯ûö3ϺÝá'‘²ÄfåºÓ}-¿ú,Òï¼æ¸{[½e^ '²ôm5 ]1ðì½×»ªoçMé˜]œÕR¿tx÷?GX{(åÇ{ÄxùyÖCZ.©ÿÐÈ5dnfæSe>ö#'‘¹‰‘£Xh+lŠVÚ¶R9©ñrYå¨*WU9«Ì]͸KÍœö›F¹©&M¬žóÊ‹p‚ü°íå8µÍ ò;éÍÒ Ô ´ Gx4•æ=ÛŠÎÁLÑ_6Â#Ôõ5ªÖ{Å<³Ãg<ÈÒâŒÅ4œ›‹hý<˜ŸÔ§­ql_ª¾÷©}Û¹*`{å±»€/Y50eIͲÕ#}-—½ùÒU wŒÝ†ª»R:Påðz?ûÂÌ›]Ó/ƶOÙ8ïk¦ŸŸ¹ëÏõߘ’ýýBì/ãÔsÍm·ÄŒ©÷S™3¬ÌóŠ¹Æ© ^q¾Ê!BâU\Z¸ôȺD¢r\•ëš+À/4sàß™9ñG{Yéò¡%ë˜Çp¼ñŸeùuKò_’ç6Õ¡Õ² µ%ÀŠg¨»µ¬F-y yÄÑj‰‹¹õà5#Ie©U²ý³š”ñûÅ)›ûOüå€~áЮú.û§&°Èl¦Ÿ=°“k‚¶×žpò‘\52Ù¤,©YTYàèdfÅÛ¯2 ]½ä8%¥«ïrÅ€:1 }B™ù)š¨Úuý"ìî³ÄÃË’Ÿu-ó<â"ùY> >LîÖTóMôkFÌåî2HæR{h@.-Ä~*WV9³ÌÏS9´‘K×åÔÿ2ïãë*ç¶Êò‡Žj ˆ´T}p·œgèTTbªf¨ÔL“¹Åà såÀ—<@êG²s_ZØY˜ì{Z^š]²«ÂBÇ…|zÈ×,%{ ÕF¬°û¾æ%)Mj”µµU¬`€í\¹îÌ”ö“µËݱàŽïê(ݾí“ÜŸûÌÍ0b½!<1qIAqùêcâÁ„úóMþÃËk|œŠéÕ 2û¢rk³>B©ôL•{sU e¨s`åCe´Y´ð udE²‹`8^øD^Ë+’¹¿§<Ò=°»ÁýÜÁõZ$ý{ªW„ýÔ°±[¶¾’ò 'ïm¦€sk¬X{LJûÉÊugSÀª1rp×ä¯Îб…~^Qçú}®p "ã³NXL&¦%lbtu~¼LôåÏ2y=GöÎ]ÈT %¨mÆŠ¯8ÅÜ7ôº±—ˆ‡sƒ÷_©‰µ.Ñ÷¨¢¸x_9ÿ°»¾L‡÷l“ôï82§§ØØÍ[ŸMùÀ–m¯p §ØouÇšÃRÚO*מÄ)ލøß:%ãðä’¬z¦I#»&¤¨›ŠmŒÄŸ:TñoæÒ}cŸ¬NcK5X£¡WŒ5ŽcôŠùæŒùÞý@ ,bßDÞxÄ_»×¢C‡´×“}\ *Bèäî÷wW86ø®ÚòdÊ'ª·Ìuìõ\0ï&¤ï½ä¼vËV—¤´Ÿ¬X{„+&žšsl?8± 3©coŸ¶ÍõÓú5¬(o,¢}‘€ð£¹ÚR*?Éïê¥Ún»Ä8zÎ#ÆËŸAy ›‘U€m eˆluRDÈ#n5ŽyôŠïyØïÖ*U5qÛ´õð/ÖM?´ÛIÝw8qs‹ιñ2Çß›6ÏJùÀ¦Í:özΟuÒ7žzЧe Ii?Y¶:ìŠ €G®<ב}àœ¢ÎI-ú§¶à]|h×®X$°¦)q‡y¦úfâ¹Ýñf$û^q‹LôW{¼ÉÀñ¨·ÜòWòˆKäCp6Ç¿ìÒù1<Ô{Ðûõc‚=èKÎwê×nŸ_Ÿ5ìžòÇß«ïKÃÀƒÎ]Î|wÒºÅyõV¦´Ÿ,Y5Ì÷_v²ãÚÿ¤âîza’Šþ…ä®¶÷Å_g^£ŸòŠ…Äo¿ò/jE¬Z«*½§ò4(KcT¹ôŠSó¼â~fŽwò™ç5z ê5tð?k@Ǥ&úД Ä²ÞsÑ±Ž ¾7TÝž† €û{=çÜ0‰ éÜÛ§9îÞ.ª ¦x`°+&î8gŒ£Ú¾“µâNÝM?‚70½A‰¿W„ÌcˈÙêT1ì}*¦åí>@0™¨b—ÇhÕ*VUËùCíE"x€O˜+¶ºtù{È+ÎSç‚Ö{ ’Õ·)Àq!_·¨å‰j•“º©£zèµµÛ9°éú”Ol¬vîÀÍãG0 ½ãœÃ8Hi?Y¼òÇ'ÿ5Û¶êñh¶cÚ½z;ŸðmvòÏSÛ÷bá­Pˆ†î)®P1ˆü{/~îÒXl ?@š&Ì ³ª†Àß]6ø¬ËóŠCës*Æ÷“ú¿š°$zK€úó.+ÎrTB³qu¥C·Üš† €ß:6¡™6&— éuÇõwÞ•½R¼ Èñk—-tL›¿\Žy‡tØ7¡ci_9–ž50¡ê;*Fç´Ù]L‘ëÃÔ9ô.‹¹¾2Nµò‰‰òûgXƒæª¨ :k6ä äϹdPRÇ,vßû*mCSƒµ%`x÷Än tTB³èåß;´à=©¯Pý€3¯åê$ÿ¦ñh@ß²iƒÃŠöMi?YºúPÇO¼ûü“ŽióÑÀA ¯©“„º5»Š#Ì#žÕ —nØv)“ýÕòçtU´¯Pˆ„Ù'Ç'Ú„<âè G<,ýÄáÕ?¥eA!öÛÃÀã š~dž'¡Ÿÿ¤>mÜ=?sºC|8 “̸À¥o¼è°c‹R<0ÂñÏÞ{½#ÚúI½Û&tÝѪ–N8)Ÿu§Tl¡^®˜oÁK},ãŇÔ†=ÛŠÖDÒ6_Ìýƒ>qmÈ+Ö8xöz«¼FìêÄÃË œÙ¿ƒÞ§mó„|î‚Ìfú…C»:£¨Ù´‰Ž À«6ÏNù@õ–§y-Ÿ¹÷:ÿ_8ÖŽº¿*!Oe?Y¾æpÇO¨#VíÞÎ/cœë1fª±÷ŒÂÉü¼Sÿ“ügˆWlshÌ´C½åWGó…2Ä!òë6#\p(½3EµË\>ÿ­ã4¯x°GxvZPš]’è á"Ð ê¼_B>·ús®pÀÑ€3N/qd^½e^Ê'6oïÈkùPùÿ_øXÅŽº¿Ë׌Ji?©\{¢ã'n_lë6^Vâ×wIÌX9°S‹¤O˜ÇÃÃU a¬ tÞ “o¤/Êðlµ¥ˆÀ…u-å`0ÖÜ×ö r‘Üq?ÏI#»ú’(L.ÉÒ# ÚÓxT®Ç{š³·§Y¹eÛü”OlÝö®#“™ëÆõ'ñÿ…ÓO+vØÀ‘)í'«ÖŸåèä_=Oí~@¢Žü+Ín¥_Q’ü‰òÁ]Zœ!ÿ¾–ôÏzÄx–öÀN˜ÇÚ Í󉻌Ú!EÕŠc@DûSÒö6öi«‡|Íš¸§±™~^QgÛ'4 _rÞÒu•Œ§z`ûöµÎ;N±r Iÿ. nÞ¸Î1÷¸rÝ©)í'«7\æè õ<µsû>op—„Œê8ÞdÖIÅÝõˆvà÷N92Ù|±36Gˆý‰p ~“jï›WÜk†±÷@øyžGL(žKöÙÆ}›xT Z&³ùV€¹·Os\^[»Y&þ”%5‹*{92™yýÉ™$ý»ðçŸpÌ=^³áò”N¬¯šáè €¹w\iÛv­Æ²¢&.ýï×nýìA’þYOîÓ6au}ÒèGÒ{T-$ÃÉ@Ó&䀢öÖK?³ëà8 c‹mÚ-©Aĥû郻îߤÏy\Ðkëdæö³G;2_¼²Oê*›¯*vä5œ5õlþ]8ç†I޹ǪnIé@Õ–ÙŽž¸}âÛ¶ëcò¼Mž¿xXrÇlUËgx÷ìœôòŠ™!(–áZs"VHÎd€W •> ýÒnƒe¾¯™~B~fR U̯4§Uã?cf3£b²ëT­_ã¸@<•ÅÍœXج¶v»~ÍÑ}Iøwá 'vЉsR:°eÛ›ŽMþ7oZ¯O)ͱe›V…ú š°ô_ÕÖIö~ÿSû¶Ó{gÚò­ÿ?~^Þ¿§ãŽß/yÄ1Aø½ˆ¾³ÓÑÔ/+îžÔàBíYTg7æó íº²Î7N‰j©·Ó‚ñ•ëÎHá¾æK7òÖË$û{pí²…©—± µµ2j7:và͹³lºô_ÓíÖø·êªh`2?ßeûë%2°YÒ¯NlzZÆ\G«Ø‹ÒN¡Wd¨ ³rpZ`—csÔ~ý ý“z–°~¦üó»¯ð„‚LÛ&33¯8ÍqÁøÚå©Û×¼iºã®ßÓ·M!Ñ߃Ïßw£CVzT¥®VÆÊ£—ÿÛuË̸_£Æ<õ6þŒÂäŽÉ¿ÐQ/lb­ž”ê«e\uI¯Ö"“H,KÈ'ºÉ+&Ýn‡ö°ƒ['u©áCºèý;îÛ¨`è’$ïL–SG÷Ô·T9ëÍÜÆê»R·¯yócŽKfnH¶Xd?îÖS6°­f!Ëÿ]èê%ï8¤^Æ)é'+×íØ €wž›cË6¬Æ¬†Žsú ÇȬäEXÔY¶Å¾þÜL‘¡S3¢G°ãÆÛgdaa§‘ƒõ+0àð‘ Ïž—óÈÝß/Êî¼cðÁÝtÜ®ºü½>(ÐIèo¯ð·ÓéêÑûtF,¢b’!=²ô2FQ±ŠŠYûÔÅP1Õ€w«ë°þý‡:ÔKä )%:dHg9“Ó]£\-þ” Á®ÁFúõчåfpŸ‰è Û﫟SÔ9iÁÉøÂöÆ‘„õý<'ö¶gAÀ¹w\é¨À|õ†ó“žÔ¬Ý4ÕQ×ì§$¹o€ï>ÿ¤ý'}¶/Oz?YX™£×ÖnväÀKßf»v«ŠÖ6dµÝiýÚ%uÉcêîìÉ‚vûéý»ùô¡2Ù÷é#Ó÷˜¾/-c°‰#û÷™@BQËÐJ,5hP…ð6Jï ·G£ýúƒsa— =˜€%*HIf%~5ÁЯ]ýV2ôi×<éÇ&åæqýõí5ÛTpfÒ›ê-s•ÌÜyÞ$ö ð¾I':dµÌÀ¤ö“kpìòÿg„mÕf//ÎÒû¶«ßi7}å˜7qPò¶µŸŸ™˜%ÿòÏPoøÕRýpßÝʱôê¥ÌÈAƒ"………-ˆ\’C³ü á­ò¿mnÇï'“ý2éL*ŸY|àÛ¥¥‡«úuÉÐCM "ÚúäÉ)P¤*&«„õùcz¶¡`ÚßlV&y [ß^[å˜ëµâíWIê¼u& ¯q@1ÀUëÏIîJ™W92ù_ôòïm×fëѺ^cXQçýô‹“t²Íä’,£ž@SÆz+¨*vP1„cé§ÒGeüV,ìYL°yâkŠ%@ßl ±On[Ñ)Ï#úʇþ˜Oœôˆ+å poÐ'•¿þ½:Ó^þ»åÒMòŸÿAú¹ôßX~2þ_Ÿø«üù¾´Jí*¾+}5Ï+æÈßß!ÿž©ò×çÈ¿÷˜\&ÿY^¨½è >k*®‰ZÞ?zРبjm:ðíze@a_c¿w‡J€:¢hH—¤½=QUëq°~~O*H–7¡×Ö:§¨Ý²Õá¤%5•ksT23óŠÓHêá£ç; À#IزíGN¨â©vj«çÉ1)è«_¥ÿË“4‘~áЮú N-š´¼_èS«ûHÿ «m£jvpë¤UåWU‘÷ö÷ŸeÃco=³Ô1«¶n[¤ ÍØbà”dæá)¿!™o‚sn˜dû6P¹î¤¤ô•Õ.qäÛÿcgتþfàÞý;¼g›ä­+ÿÌ#s3µÌÿn^}Dï îÆØGºDÆ}cw—à´íó=b¸Š!X²îýv#ÆtWL­rˆ Æj`™[„<â´<Ÿ¦jE.ìL³^mEÙ)O–òvùs‘ôk—=”ãߥËò3´ëþ{'Çåû’¶ß¿D;°oü3ôpŸ|Øg >rÀ€õCzt«˜ÐŒ —™K鉙÷ìW!¯XhNŽœ”ÛFÌj€S,ľ²ƒ ‘ÉPEÐ'Þ’¿þ‚‡OãU{à‡fðÛ劀 Þ·së׸ðЮI pÎ(ì°Çegèh»„fÆé%Ž8ã\¹¡ê–„'5êìtÇìýŸÌÞÿDøÈUçÚ¼-lÓU$´Ÿ,Y5Ì‘oÿíV/cÂ!öx‚Ž:ê6Y…sºß¿o§ƒôù¹Ä:»°8¿WÂQv¡_¨ºA¸Jæ+ƒUîBÐ@B™"Wv¤‹e‡zIúO,M7äk®éÑýÿÙ»0©Ê;ÑÿÅ"ÊÖ¬"¢²ÓݬM-ÍfBÓ@£¨Ñ¸o¨qßbb5î[4Š¢q×,N4MÜ’8Fq#**¢²˜I2“ÿÜ;óŸ%“äÎ,¾÷œÁº¡ª»êôçû<ŸÇÜÜ jwÕ9ïû«S焹™ŒÞ6L5$ŒéÓôçÇ4:¾H4ŠÿÜñ}´Ò”Ý;•冿G÷Ü”ˆÅú† «£Meá¾Ó¼r|ôg¾—ŒÇ¿=ñˆÍ{Áž04ÿ$…ò¾gÆ…½OÆšo$nóÿÒ3—ÕwÿãKúk£sЖY[¬ÇüŸÝ­ÉÌ"¢sù´ÑC­m¶%ZÆkÄx­hÍ\¿‹ü°²gêÔ1½S£ìì¤Æ¾oÔ?µKeEê ªŠÔ½Ñæ8 «f`·0kâ8'¸f=BpâG÷hò€¥]8d\ï¢,xN™º{¨éסѿú•݆fé¢qaÍÛ«±hýís ¶©ysõ×ñ3‰¯ð(·g˜—ºOœ_Ö÷ÏX·þµ‚Ý ðù•㢟݉Úüoذ>\ÜܲzMÆŸî7vNšØ·CÑžTsèø>ù+ šz^Ž¿ç?Èš¦OLš8>ÿ5 kç‚û‡ø‰ñ^§f`ª«ŸÚlñ z#,Žo®½1þèàP„Oý{wÓFqRÛÓ«F„1}vjõ›Æ—']„'âœC·õ”M†CºÏQ¡ŸN‡ìÖÖ-ôtøi Õ=R“ìU¶ÕJu©®HmüáMÝr7ús‡ÿâÚ§zd“/‹‹/‘<}ú_7s¯°ïÞ»lz/€š~e¹¡ùÞ &b?’ì¹W†4ÿÒÿWG…÷×=—ˆŸÁSÝn“îQšÛ°!¼òÆAÛ5xíÍ/%nóÿÜ¿Sv¯¿Í¿û?kï®á¼"| -¾š 7°SÓnô“ë¢s³5J¿Y9Ì [RÏÔ«‘£â+§í(UŸöwO ‹^¼WEþÅ›¸åŒíÓ1Ì[éDÕfMÆömÚÂ$¾yß)S C¤ø{ÿõÃvýÔËó9çs†…ŸúÛd\þ¾æ›ÍÜÔìÞy÷ÞDü»¿ùêŠðµÏUÙ ·ÈWƇÕo¬,߯lx;¼øÚŒf½W^~}Aâ.ý_óÖáÒjÊîõ÷éOäçß5E@áo|;(Lêß±Éß÷Ÿ9®ÚÚ¤…•Üœ{"QÿY^U‘ª´ÃTIVÝ3U½HŸŠ|è Û²âç·ÆßÕr‚jÁ;åÖLã4í{‰Å|$ÒçFuÿäïS¬¿G±]¶8˜§¬Z}EþRåmoj†„·×Ü’Œ;˜¯_n8a¾Íy ºå´Ëú©k×½^|mZÓ¾"óZCX¿~Uâ>ý/ǯËÄàû䆷#ºå«g'ÖÌ?Z·©kwùoù§Ä?wkï÷×È£{¦¦ÛqªjWÝ+5?zQ¾èÍÙ:&ìæ¤'91µÊ£k„»4íSŠÞíÂ1™EY”í_Õ3ÿ÷Øwï®e»¡‰Ã弡ù´ÕïÞ“¿«ÿ–64/¬L‡5ï=œ˜Ì·¯>Ϧ¼|ÿ›—–ùã"W…Wß8l«ßùÿÅ›§$ÞqMY¾æâÜÆçšE£zåÏ?zRÿü¹²IkŸÝvÍŸƒ­EZií­=­Á[Í U©¹¶ jOü+R³}¿¿•ïôoóßú'Âèç?q¡i÷hhЧ( §«+¢??¾TŒG0ÙÐl×ÏW­þzxéµ9á篎ϯ¬Î’ùæ;ׄõÞIÌ¿ç³Ü.˜=ü•ž¤‡¼ì/…ïá°rÕQá…•“¢÷Êðüþñæ’ðÞÚ'nã{é'‡¯Ô/»×Û©ÓåÏ1ñãøŠñçÇO³‰Ï‘Múä@W›ÿÖ¾9`&₵x«z¥ªGj¦©Z¤ÊÞ©l´ñÿ™7žÍ?ÿó˜Àæ\wðØÞEY@ý¹ñe™åº¡‰ïðóǾ›ÈE½ö³áÂù£mÆ[ó~‹Æåï¿àõXÞYõZ¸ôÀtY¾Öæ ï­(ÊŸý…F+¸%ãúímþ=æÏ€O>\ê™úIUïTÚUEilEjPôB{ÈwüK`ó_úfó_r÷Û¯s«â;4ŸU„g1·”¯}®2¬üù36 ep³+¾0Å&¼D§™”{h$ÙÚ÷Þ-Û{eœU78>¡oq6ÿãš³ùïfÛü—ÜUñ×1¬Í[]¼7»dŸÔ@;V¤øU=SF/¬?xƒµ¾øâìÄSšOhê#‹98¿djÑ›˜o¿öŠMC odntÓ¿’ò“†ukß÷ú,ÕenØî¼à˜²}}ëœrИÞMÿ”3:·Î?ÆZ£Dï 0¾ßÎÖè¥á÷•½R K¥:ÛÁj»‹^HS#ïzC•†1}:†YÇ9á”ò³r«F„êfüN‹5(w×5+¼»úM›‡R»·ÁºµáÖ3ö-Aw~ùè°~ý:¯Óôà•çxn&þ:AsÖ?Ó«†[c”°}'Œ cúzD` Yïþjv5½R=*+R7m|ì„7R)|ǧ¢}˜9¶Ò‰¦ ÔÔ¬ßíÕ½,qÃñ áý5ïØ@”Ì ×•õ§˜mÁ]ž6lXïõZBþÆÅ^›;¸ùŸS­-JßÌqUùµª5{i}- ª{ªÂÎVÛ¾É_Ô¬èóoœÒ2mÔ'˜2R³{æ ª sÓÉû…÷ß5hýK˜×‡»¾v¢×dxàëg$摚÷—ÀÍÿ˜æmþkvïnMQF¦ŽÚÛš½ôü¦ªgj†®¶ü]ÿ^©«|ê_zÒƒ{;±”Ýwâ&濲ќßó†¿yÉ‚ðÞ;oÛP´â'ÿ6ÿååÞK¾äJ€VöƒeWx-îàæ?þÞÿœI¬)ÊLzÏ>Öî%x5@|e·{h“FõIˆ^oyƒ”žøÆ*îø_žMª 5ý:4ë÷íž»þØúð®;·¸øÆr·}˜×`úÖW Ö´Êeÿ7^ä5¸™ƒ›qÿü'ÿѹsá$_{,×Ç6çÑÈ´¨UUÝSÃì|•ªì™Z½ þÝ›¢4¿÷ßYÞ ¥|-Ùgd8°º"ŒëÓôïÅ6¾¯c#âÇνñòó6-$¾ cü ¯½òuËi†÷׬öznÁ«eâ¯`xímê‹ûFë™&>é¨wû°htpÂ>#¬!Êù©HãÇ„êÞîP¢þ³²"µØ¸ýæ;TõL]¿ñ&Þ;îO‘ÛÌìÈŸ9yøN$enaí¤pþ¾CÂYu{æ5cz·kÂà§]8&Ýß±/^|ú‡6Eöæ«+òÏ—÷šKÀ5Žœé±š- ¾WÉmgê5·™££sY|NkÊyoÞðná̺ÁáüY{‡Eµ®|,w“›yCäFü{#ëê?Ùoì×Ä{A;â6ÔÈ>©nÕ½R?n£/úßE~y£ª"õ³ªž©¿‰þó‘+#çGÿÝ ÑwD<«®HÍŽ…8¦Gª¦ºGjè¸Þ©Ý£ÿÜ+6¬"Õ}»Ÿ²00Õ5þ3¢ßÃÀè¯C¢¿geþïQ‘š<ºwjßèÿ}`zÏ>_‹ q)ÇL¯úd1tÚô=Bý°]·ýÈÇh1t|n7 ÈF\8otxúÛwØtÉŠ' K÷ïµ– —˜/ÿôG^ßŘ­|1\{̯µÍœX;0ŒmÂÐ{æ^]éS}ò¿;fzµµCd2ÍìÕïâhM{@¼¶×¸ñZwãšwÈÆ5p¯xM¼#O-ûx]>¶"5(¾¼=þ{TöJM‹×ðñZ>^Óç×öñÿ£{Ý‘_ûÇ{€x/ðÑžàwmtOôXUßÔ®vÆm Ñ=S{F¿ð·8Éúÿ"¯Dþ6²¬²gêâoø•½SÙü!•êTWg,^Ü!:xþ $æç2áÜYC6Y-™<0L¼óÖ/…ìÓ>œ4yw É­Üè,~.½ H¡îô¿!üðÎkÃWê‡y}%ÐWçŽÈÿ~½Ö <0{òÑpÉþ¼Æ6sÊ”ÝÃø¾[¿|ê Îá„ÍÝçÌš?gZ;$D.·2^Ó–ÃÚ;Þ#Ä{…xÏPÕ3µ°²WêÄx/ýõ¶{‹W6î5’6x³º"µ‡r’7ÿ½RÕeúâ7ø¿Ž<mêï^¨K£7åÑñ# GwO OÚ]-²Ù3œ8’åðic]$UÓ?¤ì´Õ!6m Ê-¸ñÄùùOßlDvÌš·W…ÛÏ9Ükª ¸ëÂÂûkõêáÊæyͼf|ˆ÷ŶŸŒ?VÑkfï-\ɶw˜µw×Ïœ·êw 'OÙö½lâ§å,¨M[+$×í[S3ØJ¿ñò÷)«HÕW÷J½o¾ýçu­øU‚øã©~+eܘŠTm<ÍiÁM|Çó߇é•Z0ª[ªw[ÿÌ;v—úLf\}6»¨>—;.þ.Täüè`xeC6ûè¯Ë?ýß¼â$‘lM›:öGLŽœV¿ëñqÓ+ÃñûŒ'Õ §ÏŽš´[Hè¸É{lѨ›M?¿~åÏŸ±qÙÌê×_Íü‚ÙC¼NøŸ«¢×CüºXýÆ/¼O6³ö½wãË.Îíµ² £sÓ§ÏU¹ÂqÙ›lðãóÚ‰Ñ9îØè\wäô1›œ ãs£5B²m\ã.ÿ”kçf2çFÿýÑÑž¯—íÜþ§ø‰mñF¼ºgêôè¯÷GÖDþÚBû¹?ÄORð[(ÏËþÇïèsè·!þ³ŸŒï?j#~G[þy/M¥ÚÏ«­mö—Dû»£ƒÙ ‘rÐgGŸ 0/=>ìS9<Ô&îÞ=2¡ŸgÄ7çºÿ맇5o½aóîšðð7.Î?BÑkƒ-ßO£2ü`ÙùM¯Ëýׇg¾û­pÙâŒ×Æ66¾ï&ßóïisÎ̽ÒºQùÍýþµCƒó9Ûö—†\nõÜ\î[õÙì §Léf7·iñ^+¾š:ÿ¤³^©§ŠüøÂïeà§^FÅ—ÙG¿¸ßúÓýè…ðp<‰ŠŸ±ýmÚ·õŸst°mø¿ýõÇÑÁêß¼i¡gë†Ù‰ù…Õ‰ûŒÊß8É"tËâOî¾wýWû«ßl“Ÿ^þííW{LÍrééðø]7¶ÉÇlÆßóöÑÂ5GÍòZh‚ãs»…1½Ûåï]S?¢W8bÊèpàä 6üb­ó£¿>ÝËÔ–n"Øì«½{¤†TõLíÓ–o¼J _ømüøx?åòx!ôÚøØÑ_zügÜZY‘Zþ^äCX’àÀÉÃ)3FZÀné>óF…eg}!<õÐíe1 ˆoPöâÓ? \qV¸äóýi•«â'<ÿ£¿É¿ËaÓ_õß Ó#0›ÿˆ¿øª²…µ“œO)Eÿ'4L›Öצٵ¯êJWõL]í_ظWÜâ£Ýã¯ø‘•P£ú¤FÄlhìæ ñ%Õ=Sû«Hu÷“ÚzsÒé=6>šä/¨$ѵ×êFXÔníNèó+óÀß{sxûµWJfó²æíUùï(Ç__ðÝ~JÉÒýƇ;Î?*?@{oõ[%uÌx@-æêÃëü®š»ñÄí[dãOyøC}&sUC6k¿³åŸ2Ð3õùhïxÇÆG»o¾¯üýèî©á~R%P]*Õ1ú…¼ò©_Ε©›âgGú”¿iÅ‹ÈuÑÁã¿@i O™NóÕ€&¹ê‹ÓÃ=Ÿž|pYx}ųaÃúõ-r'òU¯¬È?†ìËÏ ×µoþ±†~”Ã×âé=xÅÙá§ßÞ|uEËÝcåKágܺúÜpã óÃWê½g¶÷Rÿ¢¿Oü)GÑzþE=¹®®®£Î~µ¼"UU]‘ZZU‘zí“«ÌãÿœJuòÓiýïý_ýBVDÎÛ'5ÒO¤Ù›ÿ9 ¹Ü¯4isrÙü=Îs³ÀæÝD°ad¸6ÚàÜõµÃ÷o¾$<ýí;òß'ŽoÀל»¥¯{ÿ½ðök¯†W~öDxæ{w…Gn½<ÿéþ ÑÆ%~»Ÿ5IzÇ7–,÷]zjøÁ²+òƒWÿî©°úõWúµï7ëýøªœ—úãü{æÑe—çÿÌøÏvãˈïóùÉI‚7£5~ÎN§0ÅŒ6ÿ'DûÍÇã¡€ŸH+çÒþíÿÔãåþ¾çO›¶ 7),©eñ[Àû \¶8.?dr¸êðºü§¡±«˜‘ÿïâG«¹ñ|ê=3t¸üàÚüûãš#g~òž‰ß?ñwÙâLô¾ígUDgÏšǃaçE$^ãß?+“émçcï©¶¾ù¯­Ýǧþ°©C¦Œ çÎry€¶cH8fzUþ©1΃$Ø?5d³ÚIm÷“ÿ¢ÁŸ á³Ö¦Ãi3Ý$ éΚ5,0Ååþ´¥¯>æÞoüøžvCRiqUU§¹™Ì€°­èd±ӫ,*~¬ß¼œOýi“~UŸÉL³3’’þ©ÿ´i}£7ü =hºC§ŽË?ÿÙb Μ9,è&ðç¹¹ÜÒÅ‹w°K’جl¶ôFÛÁ¶ãq“LJó=% ì\72ÌÏ¥Ûà<5êÔ^vKR‚š—NˆÞÜï8ÀÁö‹?-:w–!@¹:fzµ;üCãÖ×§ÓUvMRš“Nï¿©Ø`Ç}~r!@™9gÖаxÊç1غÿœ›Éìo÷$•q jjúØüC‡µù¾P6ß÷_X;Éù 𿝠¹Ü©vQRVSS³Sô&~Ö ï )ò϶¸(]§Í>çûþÐlõ™ÌUvSR™½y—;€Añ>m¬6@‰úÒŒøfñÛý8ä\î›Ñ–¢]•T›ÿLæ\.(¾øÒÚ¥eIݨеù‡–ÉÜé1Réoþk£7ì_´ ¦ã‘øS n€RyÌߨü±Ù9 f¹–T¢Í;v—褷ΠZÎþ“kÂù³,ºZÿ;ÿ#Â<—ýC1®¸ØNK*Ár¹Û¤ å5­Úâ›V÷•úááÒ&…kŽœn:eÿ°üü#Ã=Ÿî¿ì´ðk/ß¿ù’ðè²ËÃcߺ>üøÞ›?ãñ»nÌÿÿÇÿ·ñÿ殯n;û°üŸuÝ1sÂå‡LK÷¾Ú0ÒÏ›’súŒaa¾þA1ï àéRI}úŸÍÎŽÞœ:@¯\/nŽ6ä\~føá׆g¹?¬|îé°æíUáƒ>h1ï­~+¼¾âÙð„§¾½<ú@XýÆÊÝäïˆµï­ /ÿôGáG÷Üî»ôÔpíQûæÿ}ü^)´óööŽ¿ÎCÐ"þ«>“g÷%µrõÙìéHÐú–Ô¶ g‡ÝpÂüðØ×•Õ†¿)Ö¼µ*üôoî w_´$\´pŒß5qèÔ±Î?вÖ,¨©éj&µÖ÷þ³Ùîs3™v0‚Ö·¨vRø²²Ÿöß~îááÕ¿{*Q›þ-Y·öýü×n:y?¿¶Û‰u£{ u¾úx·]˜ÔZ€\îr"(¥«FY˜Ó,W6-¼ôÌãmbãߘ—òx¸þØz¯šù½7ýƒVd2G؉I-Üü©S{EoÀ?8Aé8`²{ÐtËÎúBXûÞ»mvóÿ± ëׇïóR7¤Éž:Þ9Z×ïçær{Ù‘I-ûÝÿ³| ôœ1s˜:ÛôÍSë×­mó›ÿO{â¾[ ئSfŒt®íEž°#“Z®v Ùì:(=GLsƒ3¶îkŸ« o¿öŠM#î»ô4¯¶bHXT[ã\¥"—û¼m™ÔÍÍdêt 4-Œoh¡ÎVÜÙi6û[ðÞê·Â…óˆInw&ÿòÿ8à@é:}Æp‹u¶è¹Ç¾k³¿w|ùh¯µŸOÿ¡ô¾ É|ÉîL*bsÆŽÝ%z³ý—”®c§WZ¬³E¯¿øw6ú[ñý[.ó:Áwÿ¡|ü£«¤b^þŸË-t Òߡڂ-YõÊ ý­øÑ=7yð‡Lçü¥{/€£ìÒ¤b ²ÙÛh ´-ȹ[¶âÉGmô·â·]éuÂ&ÎÝwH˜—Í8¿@é>`•]šT¼À¯h ô;k¨…;úÁ²+lô·âÞ¥§x°‰%unþ¥nN6[c§&¸†l¶ÒÊé3FX¸Ó¨›NÞÏF+®>b†× ›8lêXç(q ¹Ü7íÖ¤WŸÉêå!þÄÊÂ-9ù˜/†O<‘ÍœtÌá^¸û?”éÍ£íJ;;6©Wär—;¸@y8(;"•ªÙ£{ˆël¦rÀ®^lf÷ÐàûÿPWÔÖN°c“ ùýÿLæ1(C´¡ØA»véâœåó4€³ìؤB²Ù_:¸@yºûîï;¨w÷îÎ)P.2™ïÙ±IjqUU§èõ¡ƒ ”‡a;l·Þ½S ||`×&¨†iÓú:¨@ùØk·Ý,Þ  -ùsMMÍNvnRª¯­æ åc~ý,Þ  mÝpòä¡vnR!¹ÜD(ýzõ²xØA}zôpN22/—ËÚ¹I…d³3T |tëÚÕâÀS mI§gÙ¹I…d2óT |tìÐÁâ`ÅÇRç(ñžÅÎM*@ Ùì(Ódzp(ø˜êÜe2Èåöµs“ мtzºƒ ”‡qÆY´ÈøáÃ[ |Lµs“ ÐÜt:í€åao(˜!:·@™˜“ÍÖØ¹IÈc¡|ôêÖÍ¢ @*ºwwn21?bç& 55]T ôÍN§Cûví,Ú $>¦ÆÇVç(}‹kk»Ø¹I…ú@6û;(m5#GZ°ؤQ£œc ôý››TØÀ;,PÚö0Àb ÀöÚm7ç(}oÛ±I…ü ”¶.;[¬ØÎ:9Ç@©?0›ý®›TÀ¢7Õ%.Pº²••êE’«ªr®ÖÍ^dÇ&rËäà¥kO—ÿø´Ý+°c“ XC6;ÈÁJ÷îÿ;uìh‘P$¢cìO€R¾`›Tè!@.÷k(=ÕC†X ÙØ¡Cs 4}`§&¡èÍõ€ ”žî»ìbqPd=wÝÕ9JóòÿûìԤ⠾è ¥%=j”…9@ ÉŒíÜ¥ç;5©í7~|Ïè ö'(½ºu³(h!ñ1×¹JÊŸâ=ŠšT¼«žu ÒP3r¤9@ ‹¯¼r‚’ñ´šTÄês¹ãh ¾ï–É„n]»ZŒ´°]»tɃ‹ d2GÚ¡IE¬®®n×èÍöŸ8кFl!ÐJFí¹§s´¾ßÇ{;4©ØWd³w9à@ë©›0!tìÐÁ" •ÄÇàøX윭j¹™ÔEo¶±‘t Uu*ºw·he½£cq½ó´–çLšTmg&µÔ “yÒ\úà«ÎMÐ ßýÌŽLjÁjk÷qð–•­¬ íÛµ³è(íÛ·¹ª*ç(ha ¹Ü;2©å¿ ð”´Œ'†Î:Yp”˜Î;íä~в›ÿÇíĤVh^mí˜èMø"(®}'M ÝwÙÅB DõˆŽÑ³£cµsÝ_êÓé*;1©•ªÏfïp ‚♓Nço4e Pâ7ìÑ#Ìvî‚¢ºÝLjÅæOÚ+z#þ“ƒaóŸÉ„~½zYX”‰þ¡>:v;‡AQüv¿ñã{ÚI­ÜÜLf±Öìt:ôéÙÓ‚ ÌôŽÝ³] Ÿóÿþv^R‰ÔË=äÀ…1«¦&ôêÖÍB LUtïž¿‹sH.w¯—TBÕÕÕí½9ßs€‚3}ܸ°K—.Ðe®ëÎ;‡©cÇ:·ÁŽÞõ?›]·pÊ”nv\R‰5/½Iÿè@Ûg∡c‡Î ±SÇŽ¡fäHç8Ø~¿Ÿ+þ>h×Î-†Ú¨;u c‡uN„Æ÷w³”Tžµ‹ÞÀ×;ÁG2••ùGCYüë²Ñ¹Á9>qM¼‡°’ʸúlöôèÍü¡mU¼¸ëmãÀôêÖÍÓhë>¬Ïdγs’ÒÜLæ H›º³dˆnð@“õˆÎñ¹Ãy”6æõ¹ÜAvLRÒ®ÈdÆEoð_:È‘du&„{ìºî¼³Å,Û}€øF±ÓÇwn%é~3'›­±S’Ú¬L¦wôFÄÁŽ$™Nçoæ_æß΀B=5 ¾O@ùsÌlO yù{¸¾¶¶ÂIjÍÍdŽÞø¿wð£\ͬ© c¢Ù€ŠŠÐ±C UŠ*>× èÝ;? ˆÏAÎÅ”±ßE›ÿ£ìˆ¤6Öœtzèð·‚”Ëwú§Œ“¿¼¿g·nùg9[Ð*WDç øÆñ9)>7Õ;OS>Ÿú?ú¹ÚÚÝ턤6\tÒZÔÍ®sP¤Ô.ëÏŒ†úöìvò)?%j§Žóçªx ?rÖ×(Akr¹v>’òÕÔÔìNnÈfÿ—$-~9ÿĉ!möGí¹gÔ·oþÎý>á œ¯ˆŸ(ŸÓFGç¶øçk´’ªÏd–Äk};IŸiAMM׆\îÔè`ñ+L ýýÚªª0nذü'$ƒúõËß´¯óN;Y,Ð&Äç¼øÜ·GtŒÏ…ñ9±¶ºÚp€bøûúlö”ŵµ]ìp$5銀úLæÐèàñ¼(Ÿ¹<Ò¤üãö¦Žr••¡fäÈü"¦jï½ó—ìï9`@þæ|ñ÷#»vî:´ooá[Ÿ+ãGØÆçÎøŸKãsj|nϱñ¹6>çÆçÞøŸ‹­IØÌ‡s3™ç¢¿RWW×ÑŽFÒv5?—H®mÈå~]¼‹ÜßÏ þŽ“@a¥GÊoäãï8º4Jç«ñ¹9>GÇ_3°f)ü÷æ7®-ïÙ¸Ö,ÕÎ_Eëô«çÔÖŽ²s‘TÈÚE–É ÙìuÑAfu ìÖDåçf2õŸþ^SCmí„è¿û¿NZºû~&ºuíj¡%,>WÇçlk—‚ù¯yéôø×—‹«ª:ÅkÎhühýùn üó½@ý3ÕÆktÛIE/~„HC&sDt²YWE¡?ñ ÷ß‘W£ƒÜÍñWâGníŸmã} œ¼ ¾ôРJ_utζv)Øã‡OÙÚZsßššÁÑzó°xm:7—[ýoþTÄž?GŸ7¢¿Þýs^_S³›ˆ¤V/¾ÉÈÆOß¿ÐÍ^ î‹T?‹¼ù×›ø-Øþߥtã4óÇÑŸqgtPýjôg_δw.mýïrÛñ÷ur“>( ñ9{– ÂýÍ]ÇkÕøk³ñÚun.wa¼–×´ñU³Ÿ²õ‡m|Ðõ¯ù+ r¹ŸÆkèÈ%ñwùã«êêêv¶ÓTžC‚ªªNó§NíõiKS©öÅø{ÅËèàùŠ“ØöÛ­wo *(#ûô±†Ù™Ì‹ ‹±6×¼›¯ƒ=žO’ ؼtz@‰ß¼°dM1ÂB ÊÐÄèn-³}7Ó›•Íö·‚–¤2nî¤I#£úÿvRkºøñB.ý€òý*ÀŒ‰­išçŸfg³Ã­œ%) C€lvìÆû8Á5á®ÿñ3ˆ-  |õÜuWOhºÿˆïceÅ,I j^.—-ñg¸–„= °p€Ø{·Ý¬m¶í_ç¦Ói+eIJ`õétUt ÿ­“Gþ@[0zÏ=­q¶ ¾;}&3Î Y’’|%@&3":èÿ½ߦ¦Žóv; %H”víÚ…)cǾc­ó¿ôIj#Í™<¹_tà_áä÷‰wìØñ %HàM;vüJt®ÊzçÏ/¨©écE,Im¨ø¯ss¹{ÛüI0—{tqUU§èGr®E$Ò¹ùuO6ûCëžÜ·6®{$Im±ú\î¸è„ðÇ6úÝ·»ëêê:nüQ@Bñ‰¾¦¦f§èüÝüÿ!Úüeå+IÊß°!—[݆N‚›Éœ»ÙÁ<ØX»hpA~-ÐvÖ=oÍÏåF[ñJ’>)¾4®!›½4:Iü)á'Á©Ïdæ7ò#0€ä>úð#›]”^²×<ÿ=7—[ê’IÒ‹Nc#/'ô{o?=eÊÀ-ü«@ä?üÈfE냿Käš'“yq^mí+[IRSŠ/ûbär"ü†\îÔ¥©Tû­ü;@ÄÅkƒúlöôh­ð»„¬y~SŸÉ¯å,g%IÍjAMM×hã|þÜLæŸËô$øaä;õ55»5á_×ÚØàã>W[»{´Þù^âÿÏÑÆÿ¼xíf+Iڡ挻K|Ó¼èóÛ2:>57N7ã_ÓÚèàãæårÙ†lö™2Zïüc}6{v¼V³b•$´øñ9 ¹ÜÁÑÉfE‰žÿ´¿ý3NÙŽ=h〫Ïd¦ÍÍå×%ºæy¾>—;(^›Y¡J’ŠÞœÚÚQÑÉñëÑ èïKà$ø«hÓù¼É“÷Ü%0Øt½“Éì­w®ŠÖ¿.õÎù'6Mš4ÒJT’ÔZµ›—ÉLŠNHE'¦W[ð¹ºk£¿ç76~Ú_ˆÝ€@£-o_ÉÜ­?ÖµÐZç¯õÙì+‘¯ÕçrSnì'I*µö­©émÊ¢“Öe‘§ ô$?E'Ü7¢¿ÞýõØx_„t0hRóÓé!ñš$ÚœßY•_«àþÑŸùdü)}míÜxMee)I*»ö?¾g|S¹¹Üç#§E'¸+ê3™eѾ7òð'²Ù{¢“èѾ0úÿ_ë&OZWW×±þ1 À`»Š×*Ѧ}X¼q×0ñ§öñ•ŠñÚf“µN¼öÉfo¿º˜_e2ûGÿ›ŒÍ¾$I-›H’$À@’$’$É0$I€€$I2 $I’` I’ À@’$É $I’` I’ I’dH’$À@’$’$É0$I€€$I2I’dH’$À@’$’$É0$I€€$I2 $I’` I’ À@’$X €€$I2 $I’` I’ I’dH’$À@’$’$É $I’ À@’$’$É0$ImÚ°aÃÂÁ.¸à‚pÓM7…{î¹',_¾<Üpà áœsÎ . ƒ ò³À@’$”›Áƒ‡óÏ??¼øâ‹áƒ>h’'žx"œtÒI¡¢¢ÂÏI’dPÊ ÿdݺuMÞøoîÝwß _þò—C÷îÝýL0$I¥æÐC «W¯Þîÿæ^~ùåPWWçg €€$I2(;í´S¸ñÆ ¶ñÿ´ 6„ÓO?=´k×ÎÏI’dÐZvÞyçpß}÷eóÿiW\qEhß¾½Ÿ9’$É ¥uèÐ!7ÿboþ?vå•W` I’ ZZü¿–Úü쪫®2À@’$´”t:Ö¯_ßâW` I’ ZðÒÿ'Ÿ|²U6ÿ†H’$€²ß~ûµêæÿcW_}µ!’$É Xüñ’¸I’dP$•••%³ùw%’$É HN;í´’` I’ 졇*É€G` I’ èõ×_/Ù€+0$IУG’Þü»I’dPƒ.‹€+0$I;`èСe3p%’$É`; 4¨¬†H’$€íйsç°aƲø:’$É ™V¬XQvC $I’@3Ýzë­e90À@’$4Ãa‡V¶CËI’dÐDýúõ ëÖ­3À@’$$Ýí·ß^Ö€Ø5×\c` I’ ,’¶¦¦¦¦ì®0$I2h‚eË–` I’ ’®ÿþáõ×_OÄÀ× $I’[Q__6lØ`€€$I2Hº%K–$b`` I’ ؆ÓO?=1C€›nº)tèÐÁïÀ@’$`€€$I200À@’$` I’  0$I††H’$CC $I’€!€!€€$I’€!€!€€$I2`Çœx≆H’$CC $I’€!€!’$ÉÀÀI’d``€€$I2000$IH’$   $I’†H’$ 0$I††H’$CC $I’€!@‰¸ùæ›  $I’[r '` I’  0$I††H’$CCI’d`‘d`` I’ 000$IH’$   $I’†H’$ 0$I††H’$CCI’$CCI’d@é;þøã 0$I††’$I††’$ÉCCI’d€!€!€€$I2ÀÀÀ@’$``` I’ 000$I` I’ 0À@’$H’$   $I’††’$ÉCCI’d€!€!€€$I2ÀÀÀ@’$``` I’ 000$IH’$00$IH’$ JÓ7¿ùMCÀ@’$ÉCI’d€!€!€€$I2ÀÀÀ@’$Çwœ!€€$I2ÀÀÀ@’$``` I’ 000$IH’$   $I’††€€$I’††€€$I2CI’d†’$ÉC€²vË-·’$É  $I’mܱÇk` I’ 000$IH’$   $I’††’$ÉCCÀ@’$€!€!` I’ ÀÀ0$I`` I’ ÀÀ@’$``` I’ 0(!@ÇŽý^I’d†’$É€6ì˜cŽ10$IH’$ãøãOÌàºë® íÚµó{ $I’$}pÆgø’$ɶä¸ãŽKÄ`ýúõaòäÉ~§€€$I2€TÂï ðÜsÏ…Î;û’$ÉR ¿àÄOôû $I’¤~%ÀÊ•+ÃÎ;ïì÷ H’$Hú`áÂ…~—€€$I2€m)÷¯ÜqÇ~€€$I2€T¯X½zuèСƒß#` I’  )Ž=öزTVVú’$Éšêè£.ËÀüùóýþI’d©„_ ÿ3ûÝ’$ÉšiÉ’%e58í´ÓüÞI’dÍÑ¥K—ðÀ”Õàä“Oö» $I’4góÿàƒ–ÝW?üp¿?À@’$@*¡Ÿü¬®®Îï0$IJè'ÿÛ}÷ÝýI’d©„~ò[±b…ß#` I’ É›ÿØÒ¥Ký.I’d©„^öÿ±‰'ú}’$ÉR ýä?öè£ú}’$ÉR þä?6}út¿SÀ@’$@’7ÿË—/÷; $I’¤zÙlåÊ•¡_¿~~¯€€$I2€TB?ùï½÷B6›õ{ $I’$uó¿nݺ0þ|¿WÀ@’$@*¡—ýÇ›ÿý÷ßßï0$I`ó` I’ °ù·ù0$IØüÛüH’$lþmþ $I’6ÿ6ÿ€€$I2››À@’$€Í¿Í?` I’ ÀæÀ@’$`óoó` I’ °ù·ù0$IØüÛüH’$lþmþ $I’6ÿ6ÿ€€$I’6ÿ6ÿ€€$I2›I’d6ÿ’$É››I’d€Í¿Í?€€$I2ÀæßæÀ@’$`óoó` I’ °ù·ù $I’ °ù·ù $I’ØüH’$lþmþ $I’6ÿ6ÿ’$É››I’d€Í¿Í?€€$I2ÀæßæÀ@’$`óoó` I’ °ù0$IØüÛüH’$lþmþ $I’6ÿ6ÿ’$É››I’d€Í¿Í?€€$I2ÀæßæÀ@’$`ó€€$I2ÀæÀ@’$X ÙüÛüH’$lþmþ $I’6ÿ6ÿ’$É››I’d€Í¿Í?€€$I2ÀæßæÀ@’$`ó€€$I2°ù·ù0$I2°ù·ù0$IØüÛüH’$lþmþ $I’6ÿ6ÿ’$É››I’d€Í?’$ÉÀæßæI’d`óoó€€$I2°ù·ù0$IØüÛüH’$lþmþ $I’6ÿ6ÿ’$É›¿WI’d€Í?’$ÉÀæßæI’d`óoó€€$I2°ù·ù0$IH6ÿ6ÿ’$É››I’d€Í¿Í?€€$I2ÀæI’d`óoó€€$I2°ù·ùÀ@’$ØüÛü` I’ lþmþ $I’ lþmþ $I’6ÿ6ÿ’$É› $I’6ÿH’$›› $I’€Í¿Í?’$ÉÀæßæI’d`óoó€€$I2°ù·ù0$IlßæÿÁLÌæÑ¢E~¯lb·Ýv ÕÕÕaÊ”)Ъ&Nœ†:uêä½i I’ lþmþÙQƒ K–,É_Õ²zõêD¼¾I–õëׇ§Ÿ~:\rÉ%ùÁ@ûöí½w $I’€Í¿Í?M•N§Ã=÷Ü6lØ`“IYyá…ÂQG•?.{/H’$››¶ ÿþáÖ[oµ‘¤ì=ÿüóaÖ¬YÞ×’$ÉÀæßæŸÍÍœ93¼þúë6$Ê¥—^ê>’$ÉÀÝþÝíŸvØaùïRÛ0’Dßþö·C·nÝ $I’ š/¾ÉÔòåËmþI„C=Ô&‘Ä{ä‘GB×®] $I’ šç¼óÎsÙ?‰0cÆ ŸüÓf,[¶,´k×Î@’$É éwGOÂ†ÉæŸø†¾óO[sÄGH’$l[‡ÂO<á²á–[n±!¤Íyçw Aƒ $I’€MÑÖÅ›fŸü““&M²¤Íºîºë $I’€ÑÖ=þøã6ÿ$ÂÝwßm#H› ÷ØcI’d@ãFí²aàÀnüG›wÖYgH’$wúé§ûäŸD8á„lióž{î9I’d@ã|ðAŸü“÷ÝwŸ DÚØ× $I’@S½ñÆ>ù§ìÅÏ@ë­·lþ ÒÆŽ’$É )ºwïnóO"ôïß߯6:óÌ3 $I’›ù'2™ŒltóÍ7H’$>ûØ4Ÿü“5556~°Ñu×]g I’ ØT—.]† |òOÙ1b„l´téRI’dÀg­X±Â'ÿ”½®]»–ü0 ZʱÇk I’ ø¬eË–ùäŸDøùÏnó‘éÓ§H’$>ëð÷ù'®½öZ›?Ú¼µk׆]vÙÅ@’$ðY}ûöÍo¸mþ)wóçÏ·¤Í{àÚÚ{ß@’$4ÇòåËmþ){;w«V­² ¤M;à€ $I’[6a›áÜsϵ ¤Ízùå—óƒ0I’dÀVÝrË-6ÿ”½Þ½{‡·ÞzËf6éˆ#Žh‹ï{I’dÐ\ o¼ñ†Í?eïÈ#´¤ÍùÑ~:tè` I’ lŠšföìÙ-ú,u›Š¡}ûöù¡ÙÒV¬Y³&Œ9²­¾ç $I’Àö:þøãmþ){}úô Ï=÷œÍ!‰m÷Ûo¿¶ü~7$I;â”SN)ê•ï¿ÿ~X°`Ÿ5Eµ×^{…—^zÉ&‘Doþ=öضþ^7$I;jÿý÷ï¼óNÁ¬¿øÅ/B6›õ3¦E 4(<óÌ36‹$ÎÚµkÃâÅ‹½Ï $I’@a 6,|ÿûß/Ø‚õ¶ÛnË_šígKKÚe—] 7Ü`ÓHbÄ_o‰ßêým I’ ª]»vùïê?ýôÓÛ½Xýîw¿r¹œŸ'­jŸ}öq5e-¾*ëœsÎ ]ºtñž6$I޳z|éþå—_žþùm~/5œþù¡²²ÒÏ’zÏ›7/ÿ”€õë×ÛTRâcî™gžz÷îí}l I’ Z^ÿþýÔ)Sò÷ 8âˆ#Â!‡’ÿÏét:ôèÑÃψ²xRÀÂ… ÃÅ_î»ï¾ðä“Oæ/­†Öô³Ÿý,ÿի믿>wÜq¡ªª*%–÷¬€$I2I’$0$I€€$I2 $I’` I’ I’dH’$À@’$’$É $I’` I’ I’dH’$À@’$’$É0$I€€$I2I’d`‘’$É0$I€€$I2 $I’` I’ I’dH’$0$I2I’dH’$À@’$’$É0$I€€$I2 $I’` I’ À@’$’$É0$I€€$I2 $I’` I’ I’dH’$0$I€€$I2 $I’` I’ I’dH’$À@’$’$É $I’ À@’$’$É0$I€€$I2 $I’` I’ I’dH’$0$I€€$I2 $I’` I’ I’dH’$À@’$’$É $I’` I’ I’dH’$À@’$’$É0$I€€$I2I’$0$I€€$I2 $I’` I’ I’dH’$À@’$’$É $I’` I’ I’dH’$À@’$’$É0$I€€$I2I’dH’$À@’$’$É0$I­Ü™HHgXæH’¤Ow¼$Ò±–9’$éÓb‰teŽ$IútûZ @"Í´Ì‘$IŸnO $H¤A–9’$éÓµüÑ" å‘v–9’$ió^µP€DyÙòF’$5ÖÕJ(—[ÞH’¤Æšk¡‰²¯å$Ij¬.‘ßY,@"üGdgËI’´¥î¶`€D¸Ó²F’$m­: &H„é–5’$ikÅ zÝ¢ ÊÚª”ÇÿI’¤&t°…”µ,g$IRSêYcñeéíH{ËI’ÔÔâï ~he%>wϰŒ‘$IÍíÛRPVî³|‘$IÛSßÈo-¦ ,üC¤å‹$IÚÞâ¯üÅ¢ JÚŸ#S-[$IÒŽvŽ…”´3,W$IR¡ºÎâ JÒÕ–)’$©µ‹Üm‘%å[ÏÑ’$I,µØ€’pS¤½å‰$I*f§Eþdá­â¿#§XŽH’¤–*ùÀ" ZÔ¯#“-C$IRK×+rGä¯dPTñ¹ö¶HOËI’Ôšå"¯Zœ@Q¼œúèÊ;I’¤’ijä'jP+" ,/$IR)W™úèioñÍòÛÔGw÷Ÿh9!I’Ê©øÑD"gE‹ü2å~𱿤>º¡n|Ž<32>å±~’$)AuŽT¥>úºÀÜÈbhCæn<Vn<'J’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$IÒÿkHýÝPö3¹J­Õ30QIEND®B`‚kitty-0.15.0/logo/kitty.png000066400000000000000000000202431356737523400155730ustar00rootroot00000000000000‰PNG  IHDR\r¨f jIDATxÚí] tUÚ-vP–,„°'ÝDÈJH:éî„ÙȦ²¹€,¢¢²%AÄ ¢è¸à6ŠÀ îã2¸! ‚€$Ö°ƒã3Î8ÿl::îïÿ¾J%“tÒU]Ý]Ýuï9÷DbÒ©Wï»·ÞûÞ÷^I€(›Ð¶$ÏzeI^ôÃ¥y–í¥ù–Š’<Ëqb%q7ñ•’\˃%ùÑ7-n±ßRÓw (]šg½‚bçö’\ëšê8±n¡øÙAÿý*qmq~ô­ô½tÜ-ƒ¢4×z9uÔçD¡‚ß³9”æ[Ÿ.͵Ì,)ìƒ;ÜXšk‰,ÉOý~?$èëÿ©Š™üè“ÅyÖ,ÜICujÔ0êœUŠßÏò(?³,'§5în€ ˤ–Kò­i4*¼‹úö ñ'b䘀‘†pÕÃ|¡7‹ó,ÿäá ® „éBin¯ð%yÑNºî©Äe%ù–G)ð_ªžþXOÑ×?ÿ¡ðÇFÚúúÏèëâ‡Êð÷q2Ä;iˆ<½xx¿Ì…9ý»ý>̶ÙÚÐð}Lq^ôoèúÿâØ°†òŒ ~¶{£ƒë“†‹—ÅPÐÏæ÷§LŠ -É$ÖYB×öW_܇eQ(Ðßo™àÃÀ¯á N•ÅDøê‰V\`É&ZI{/ñk?´¹9~-_[¾ån1 áköɨ‡ú€t4‚9êë6—æFƒý>ìžïÇ ÿ†Œà)o$—ä÷éIŸ?ø&ñ+ ¾9~E#„môD¾yqNtw½ïÏâ|ëeœ¼¥¿ó_µ±8ß2 ôÿ`¡‚Ko”æFex:‡çù;'šPôMÝŸ}ü¤öÔ x FŸõœŽI_OFó¡@@®uŽÁ‚}÷’\K¾»×?a‚ÔŠVÊ“þÇ ½Ë :qkñð¨"ÎлmŽùÖ‘ÊôÇ8m¡ØƒýøÉ³L4h ¿³´ _¢«ë^ZÕƒ¦eJÖ]˜”¼*qÇ¢‚~Ý\Þ§üèAÔÇïñú9ö @?ƒ+ú >ô}®î°—«Îª—ç8`Zá×ç·ò°¾N.Eɬ5ò¨¨´ Ú`í;üKùi_=wý‚w]™Ék÷ÊjÇŒ~½¾ZšÍX>x@Ÿ’¦nPžQ  ºb A ú’oByFIòN-$èÓ@t1”g˜<@ßx%èÓ€BK2”g¨i€õOLÐGü3…\ ¨ÎXðôQÐF(Îx‡à}2üÏž Å ¼ÕÇ[bAsò‡@8Áœ£€ê ;)ˆå?3bI^Tôî@ËUP𱋂>B ‚Þ: 'I½& Ï:Á z‰CaÇí½;(\"`A}i€ó ÷¦O"`A½Ï„²‹‡Çôö[Pßù¿u:”X£€ç¸ >´þ‰_;UÒ( ßz™IÎØ½¿÷!ˆ+ùÖ—À ‡üWqžµ ÔˆP½Mø'1èAáÏ*()°s¯!Aü¯7^jøÒªßø-‚Ôü[ Å(ÀºÁ ªä˜û Êr:âÄ oý11ÈͯF`ƒnò¬¯Þn ø6!¸Á 6Ÿù·^µèŒ]¥N±]¥þI]$[|)7>D&Mˆ •FƇJCèß)±!R´M’¼æ¼|’+¿}Aº<î+Ïò¾·âc›cœcc^Ž}Ò€¬Òkƒ5ÂZ t±÷¤FMO •K‘v$„JŸ…›ü!!L:O_ߤß}(1Dº.1Lê£cB° ºà7ußOè (~ûRüN•c8Tz‹þ}AŽm÷uð)k‡ âQúz=kÊТOˆ:ÒEÏ!UÑH5ü˜Œa#}½:&Lê¬õ:ynG]i¤À[>&I<µð±ù‰{ÄÎ×6‰}ïll—¿îܼIl~r•xzñu¢ll²áEtGÑñØÜñâ·/;^Y/ö¾õšÜ–ýïþ^|°õ%±uíbòÙbå„tý£—h+ŽIzª_C1ú,Å輤£²ÆHk†5‚èh©= méÉ}9×Ä×è¢/ÖñFü—nôf>ÙzJ—¨½Fåè°¯ülùVñäm“Ä®×_Οüq³¼xá‚,"6 þ}#‰çÁâ~-Ξ:éV[˜½÷†x¶l®¸cD#´¡œ–U5¤§Ø£Ñé$ŠÅ-rLêß?É#†éwÄe¤¥ñ¬)ÖV@ç’B¤¡ä’¥Ô¸mÄ/tºYÿ¦xd`É¢*o¹Ö_Á¶æ¦Ñâ =ÝJc<¸g‡xtÎ8¿ çÞ)ƒÅ¯¿èQ[NTVÈ£?šÚ—¼…ÜÝØIì"õ“‡æ¡Ò—ºÄp˜ôWúú{bI\ˆ”mè'¼®Ó†0)>>DºEi¼§7óGÐ×Á*V|ºe˜ŸtÛÖ?$.^¼è‘`jGô9on\#»ý1‚y~ÕíâüÙ3º´…¹çWÅŠ+RýqÎÿnÎë³”§ýO?´(æ9öÃ¥8,r$©5hÈó°<ß÷ì¿“* tÃ÷U•KÞS7±Ô%ϱ})œ¥…1âÝ—žñJ[ªŽ¿šžï뢟kš~ˆ”L1µÝØ¼È AŽqŽu(¾$…JIä¶+”ü¶yT˜ôlS+¾:A˜Åxß.¯¦†G|(î¾ÒæñsÞ›m9sò„xhf¡M úáÆâƒ†ãQGÏyðÄ¿@ñWÆów(ÚÄ…INº™ÿ®¡¾ ’Zý²í“¶œ:~D¬šœé+Ø]768Vh¹˜bç ñöw^þŽ—P®Îˆ‘¤vœùO ‘ÞS»ª@r€suJƒ“|\o=û˜OSÃí/<åµ¶lºûŸ¶…§6>Z!ø²¬LjÉqAñ•@Cõ ‰¼Jâl-«R€ð_YsýNEG}ËÎN¿Þ¢47zš·ë‰ùWùT05üõí“uoË=âìé“>oË«,÷É(`É0ËÎÂsŒ¨ˆ§ïhˆÿž®B‘~Br¸Ô‹:â~â¿TŒ^¿5»ï}^+ĈÃû?ð‹-ß'ÏÕõlÏ{¿Ýà—¶ð*ÃÊ v¯Šá°(a‹l}@…ð9ÖV¾:Ïl{ ¨SЉÿt§mÝZý{îà^^ ªu¥3ü"˜þæÎ›tkËêk‡Š‹/ø­-¼tê­~š—Õ[8z´qWø_±ð“ºH¡P\S5ÐaR!Í£n£¯+éßO_$¾MÜÇówy&m¦'ñ«ô½Môßwo Žàyº'ó¨„ÎRX|¨´Š>÷?ÍuèÀðbFz¤Wkÿö­þ‚8|b‘ØwÈI_KèßÚj8ñ¨W[~¿îWš®áÜù½âÀá1bÿ¡¡âôÙÍš €« —ŒÓ½®O‹”cÀ-áS,{"|ŽiŽm%Æocžb_Ök¡F¤E+/ÊÚ¡¿Kß¿•5¥çž]` •ºpÉ/ î)%qòoK!Oó }þ|.îQk <<£ß[+5¼× ŠÐ}¾¬µØçè‰bwyT-VÝ«Y8÷]3D‡‚Ÿ~âä±Ãþþ9±¿2»¶{*bÉöknË3%Óuí£kS#DbX³âÿIyHõU-vŠY.iãy%–Ò­ò5T*'þšK„=Ù£ »Jè¦ÜA°Wåî&Où­2rX.꽄ØEJ¥ëÝÓdN€L`òÀpÝ‚kcÙMA~áâqY(u àÊ2mÉ·çï¹Íã¶pQŽ–¿}üäc¿h³òøÍðösOêÖ?“¨¯Ýˆ·Ý¼m×í¤t¸&-TžâßúP?p|—òVbï ë%©­¼é!TÚ¥ó¦Oø2ƒ5nvR ÞRI¿ó·¦>sBR˜>K›×Vêñ¢aVZ«éó¸ZÏÓ¶<·r¾¦¿}àðå Ú±§"ŽÌL[épå¾]ºôÍU‰aÍ×å‡HS9fš-Vã³-ª÷|bMüL׿“—ÊY³ ¿'©«<Ÿ‘þbºâqjøí‰Ý¤È¦ÚÛI 'ÃØÐ”‰é1à­¯šÖ½NkÔ›­yÝÓ¶l[÷ †‘ÌIºnk£m9uf‹¶ÑÑùs¢´ ŸGm¹:¥kÓâ •žáR“é»ü¤•ª ­ Öl˜´’c^ýŸ÷öW'ðÛ órÀÇi¹ø!Tú¨&Q'‘±WùÇ•ŸýÊG ÿž ë·<ìor¸&å§D´üÚUNàz›g‰A.ËÕäûe5*šý‡r4î²+÷Ëòß™³ÛmóXÕ}š§eãinÇô´H—sþ´ÈÖ<2x´™€iJ>ÀWÓÞ¯íS´´·¾Î”â¶J%Çð©‹ÊÅ/å„£»; yH-;!—ÞÒS•+J—ì\=0RºÔ£i=¡•£‰óˆ°`£øNgÜ.幺ž9}ÖˆéèruàÆŒžšƒ­êp…¦ÿ°"¾QÑ|X«i5àtÕ1 @KÝÿÉ3›\@åñ[5€ÖÒàÙÎ"É…ø‹.ë$ ‹¼=ÜÅ Õzç³da‡J¯(5,¬…Ñ\ÜÆñäX<Ö¨¼‡¡Z³ãXÃJýZÒÄ Cïä#]ð•ÊÉvw×ô›™ÓâóÖlÊ.æà˜fë&E´l¤N µXÓWSÀ«Ø§)k¾»<Ú¥p.hHòÎ:O àýW7jÈe<ê²iš£Õ´lvZ0´/×|4è_îóº#½âáý2?T:¢ƒØÿÁ»Syc¯˜q¢»ÝG ÙB¤iJÙï§tÄ6þ¬š.Í·Œ©éü[³ûˆ!}Ú7øœ¨¢8W½hÊw½£¾âíÂ!—¢‘ à‚ú¥¸Ê½»ü²—áhÕJ—í(?2QóÙjÏ=à¾ã>¬ß¯ƒ{µó‡ôùÅÏÞ^Ø;¬&›¯œá§5Î>•® ‘¦*ñÖ2Öì ÔA7ÑÞ*ïôS›#“傎Ò\kÿz‡Bˆ1±]üÎU ¡ªEóîËë4-6mÇT&Ÿ/詼ô@±ê¿{ìäý.ÛQqdжeÅCT_ûÔwõûsl\¹¯ëýìçœüS†Êß«ÝmÊ¥å4•½1®³têËB¤žÒ%œ£à Í-ñÕ㟓Â[kìSiJP·:ŒG7eªË¼xÿb A~Ñe朧­ÿsœüyY'wEÿ² 0ڛﮤvÍØí£ÀFʼnÓ'Žª[·?»µQÑœ9÷¶ê3õøe#znž9ðÞª®áб›4UÓ4üWsüy‘2¤ŸÒpÈO}›k½¤Vøé}ÂDnj²Ð?éi‡3ú÷^Á±È™eÏÉŸT–ËÁKÕŠ&VðòcÀ¿¬¶ø‡·?†J«±ÿ¨W!å‡ÄZ5w\}ONÉÝÚ×Î÷çéÝ x¦$wÉ(xÉÐí:ú{nUýäü¨²ð¢á«-zá¾Eºo}hÖUgœ=÷nƒº®ðæÓŸ—ö¸¦ êÚàÿÝ’Õ[8•}ÿÉ‘D.õ¹^ñÃ±ØØôÒ“ >Šfî ¸cÃ…H!reSˆtÐ%’ƒ¨óòèÉ­WçհО.ÒúVïKhÕhÒˆW.í¬j+­Úsøi¿§b@íÚ3çv¨Ë#ГÚÓšy—ûÖ?¤î¤âKêä1x5á¼ê‘Œšê¿Ëtצ4ÜËqsf/‘¢Ì÷Ó©¹¯õŽMrlz©®Ÿ·ÚÏáí÷Æ}ÚGHùd5Gs©ejŽ¢ ͦ{çÕÒnöèˆj£¡ydcåÀ3íÝM*¹"¿ïäÑJÕI´ã' ùò•'é÷LrzõÅ&j‹œ¸,˜·_¼xVuáÏ3Å×»¬õ 'öꟗpS”JO{T„ÜÇÞŠŽÍ”½¹?àŸdË=)É÷ äšcšŸ{ssDr·v"ß›â¯Ã´^k78zx¾§~F8{ªÊ«Çfñß0Òë‡gò HŽ–ïõú1`¯”W{zwöªøëš@rd{ooú”ë_ü.|.‚P6yµÁ‰a-Eî $ŸˆŸ9Ê‘&r­ÕÉ$ÞD¢‡ ðË3µ¬ãÞ¦~ß ¯^¤Á5ùüo´…Ÿü¯®¹Ëãkä>¨$w‡÷ë$F9Ó}?«‰á-½¾c01TzÚo/ å³äíˆ*²÷Jôrš*Ìà*ª¤0)ƒË'yÉ„Y“ÿ›¿_–ú€¯:¯†Ó²“Ä Î"«w;yãéiP®š”!¼ÿ–îgçß;Åg/Шå—'ˆ:Ÿ|¦ê¸xzÑu_Û\ê+î3î;Þ 8uH¢ðuü¤Ûîm,¦¹ˆˆ¿Ï¥Çû¤…LÖ‚¢‰åuV>ss5a¿¦=ÿžŠŸþð©F³—!ÒAv&®×ç7ú¨¯”IRK^×/²Û‡ÚíWÓÍœCüÚ×8Êa³²ãÅCcÅ”´¾";:DU@S¯ÖzùW¥Ÿ±ÏÕy¼Ö¿´ð2¿¾˜O?>¡qûs]¾ÿ»gå|‰§×Ã}ÄŸ˜ÒSÜL}Ç}È}éëøQbvΧóŠ"‡#^k^’¤¥›•í¼]œGpÒg&ÀCŽ:oNù–÷Jsò·ÜzœhA7k$ñyâ_ýÐYn±È‘.& $fKò<{•õŠñ)bó“«TO 8Ñ÷úS÷ùä=€î¿þ,N.ÕU{ ŸòÖ¾¡H—ë¸}X?q…=VŒÉH3`ì8Î:+ 23»yZ8ÇEEJÂ}Ws4Ê}2‡)!Ò:>‘T÷˜ÓS~Ô»ýˆQEiN9}H‚ÇFÀ#‚'n(^zµ¼dXßøy|ÄØÖµˆ'o›ä÷'~s¯ çD$ÏáùUß¼ƒ¯níï͹~}Ù†;owMÖGøÃcÄ”ÁÉ,²@ˆÿȳÙtYÒ“WßX‹¤Iâ>Ù£¯Ç‡äää´§ñh  ¿>ÇfØÄüáú¿¿ÎÛ/ùôõÍAïÏ-æšþìD1Ò?C|Où9MsÇQ›^‰¿#Ý€.þÚáÓ!nΉ ÁäÆˆñ™¶À§óaÎ{™gÛnBB[jøö`]˜3 &à ÎÖ_\îÃe=o³Ðáx}´ÍfŽAÔàû‚Müµ+”‹s­†¿±è‘GÉKmœ½vÅ<™üÖÎ/ðùw_™æ•áºnâ§éÖ¨Àò7Ç­A?i·÷a·¬À¼6k ¡³ææ1òÁžjv&ž;}Jì{g‹xqõ"±|t¢aÚÂæ::#]qü¬ ö§ÿsÁ,~e¹G,ÊígÁðSÞÓ·úò Çw1†©]Mæäñó31+(ÅÏsjÜ—ÁnL®0‚`vnÞ¤K…Þú¥3ýŸôÞî­]˜ ~öëÓ¤ÄÏœš=H”Žˆõ;ïºq¢Xµj•Ç\6)Ûïm¹aX²0Küh­44 ޹féÀD‹EP“Ae(´ÛçŸØí«ÍÒ±}ûB´:sÝS³ÄW ˜½ºv…hu&ßSÀ½Á—°Û›¥;´kÑêÌKÚ·7ÏÀáX|#€ŒŒfèbÝë¼ 4B‡cSÐïTrgƒ¥Ó'%‰Ké©aú–—vè ² &ñŸÚ¹ƒQ€ÓMþC ù­={Š–-Z@~"ß{îî‹Oü]$ñ÷•Ì>‘Œàý+Ñéqq¢O·n¢u«V¡AÈ}Á}Â}Sh¬ CEÇŽÑ6[WɤhA7`݈?Qì9))"=6VôïÓGD†…‰¶mÚ@p'÷Qwê+î36îCƒšÂ'ô¼^ ”sü¼ ù˜0»}<̓^!Cø‹‹Æ5|´2ÿœÞ’#Â:u.¹D´oÛV´ÀÐ>x–©/¹O¹oÃ:w–ûÚ sxŽÝ»IÔ›¨wùœø2ýìX›ÍÖF\O [¡Ó™Wät‘–6 î ›‘Ñnä!Ý^žš*Ú´n ±˜„Ü×Üç:@Ÿr]÷V‘ˇ{p S=}P¹v{¸ï 7þ>”žü†¹È#êÿt˜ÃWŽÊÊ …"ý€1ƒw¢Nø'/ip&$Lƒ ÌÉ̤¤éž¼vއý|Ä=”èïeE‡c2ñ3•xxdFFýzˆÁ´ìSh·'“ªŒOiX?Ê3Z"Ñé¼^YZt5´ûÿ? Û®*ûßÌ0€;&´bAS|ì"þè2vŽ÷Šìö©kPœ‘“ˆ^*ï;°Û§ØgSÇ]KN?ÄE¥ ÀäP\©:2==›cFŽêrrLAYÁ  €€0Â` €€0Â`.!ÆŒ#&Ož,RSS±µ˜ÅæÎ+Μ9ó‹×koÙ²EôéÓ‚ƒÁl3gÎü…ðërÿþý"** ¢ƒÁhíÛ·Çwi0Ä––Ö¤øa0 ˆ Àétºe0„Ð¥KqöìY˜ 0kpùòånL™´mÛVlܸ&ÌhÌ6mÚˆuëÖ©2òòrA€@7€xæ™g`0ÀŒ€&7˜ 0¹À`€É &Ln0`r€ À“L˜Ü`0Àä€&7˜ 0¹À`€É @« TTTÀ`@0L˜Ü`0ÀäPck×®… À3L˜Ü`0Àä€&7˜ 0¹HÊiÃ6lPe{öì‘ßU‘À7­&°`ÁˆƒÔ˜ÀúõëÝ6€­[·Bä0 X €9~üx· `ÇŽ9 5j”8þ¼ÛðØcAä0  @­ø/\¸ RSS!rè VüÌ™3gBà0 Ð  ¨¨HµøçÌ™qÀ@7ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`R€øa€I â‡&5ˆ˜Ô ~`RÐr†ßìÙ³ ñÞ~›‘ÙªU+`\DñŠmÛ¶©ºf‘ïíK/½¤×‰Ç0@?ÈÎÎ8ñϘ1# „_Ÿçι¹¹0ÀÀCÓÝ»w”ø{÷î- )  æ-ÈíÛ·‡þ7€„„„€›óêÓ¿.‡ üoYYY%~fIIIÀÀ¤I“`€ÿ  W¯^%~æu×]ð™™ Œ‘ܸqcÀˆŸ!Nž<°âçœK›6m`€1 22Rìܹ³ÑuΚ5ËÅ0cÇŽU½raVUU ›Í†UÀ8ÀìØ±£˜7ožxíµ×ÄöíÛÅš5kDJJŠ¡+âXH6l‡6¼ðËËËå{jµZQÏ@”0À@a „0À@a „0À@a „0À@a „0À@a „0À@aÀ/ !˜–Ýþ@+â÷ƒéø±%Â`|A˜Ž;ö@ ¦A¦ãu{ î4à Da–cøÔGoâ!Ž ç'Ä^w 1pVxD´ÜJŒ@˜ÍÁI|ˆ¸‹xšø1<­$û$:Öøÿ^a7šù‡•IEND®B`‚kitty-0.15.0/logo/kitty.rgba000066400000000000000000010000001356737523400157100ustar00rootroot00000000000000€U+xD"SxD ŽyD!¸yE!ÉxD!ÑxD!ÌxD!ÀxD!¨xC!ŒxE hvB!6mI$xH yD"RxD"qxC"xD!¨xC"®yE!ºxD!ªxD!™wE oxC"5yC"LxD!çxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!úxD!ÌyE"˜yC!cxG#$zC!xEQxD!„yD!¸xD!ìxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxE ÔwD"<zCAxD!üxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ØxC!ŒzCA€@@€€vE"4xD xD!ÊxD!ýxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ûwD"<xD!ÑxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwD!ïxD!¨yC!TmI$yCvD 8wD!^wD!|xE!‘xD ¦xD!ÀxD"ÕxD!àxD!îxD!îxD!üxD!ÿxD!ÿxD!ÿwD!ïxD!îxE!ãxD!×xD!ÂxD!ªxD!“xC!}yD"awB#:s@&f33yE!NwD žxD!èxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwD"ÍxG#$xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyD!íxD!“xF#3€@@wG!/xE!dxD!™xD!ÇxD!ìxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!îxD!ÈxC!›xE!dwG!/€@@wG!/wD"xD!éxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ|F!xE!UxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÒxD"qyI$f33wF!>yD!ƒxD!ÃxD!õxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!õxD!ÃxE!‚yC!=f33yI$wE owD!ÏxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC PyC nxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!öxD"—xG#$vExD!lxD!´xD!óxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!óxC!²wD"iu@ uE"%yE"˜xD!÷xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwE!kxE!sxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ýxD!³yC9yCwD!^xD!³xD!ûxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ýxD!ÄwE ou@ xF#3xD!¢xD!üxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC nxC"jxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÀvC!EUUyE!NxD!´xD!üxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ûxD!°wBI€€yE"JxD!ÃxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxC"jwD!VxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!·zF#,zGxD"€xE!ãxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!àxD!{tF#zE 0wD!¼xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwD!VvB!6xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ýxD!¢u@ xH xE!‘xD!öxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!øxD!¢xG#$vExD!™xD!üxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyF 7yCxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!òxD"€xD!¢xD!ûxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!úwD žyD!ƒxD!ôxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyI$xC!ßxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxE!ãxD!ªxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!´wE oxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxE wyC*xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwG!/xD"äxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!æxD"—xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxC"ŸxD"DxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwC X€@@xD!ìxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ûs@&xE!‘xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!´vD)xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC!TxD!ÆxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyD!ímI$yD"axD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!“q9 wD!ïxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxF#3xD!•xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÒuB$#xD!ûxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyD"axD!¢xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD"ä€U+uE"%xD!üxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxE!syE"§xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ðwD"yC*xD!ýxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC!…xD!¬xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!÷u@ xG#$xD!øxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD"ˆxD"ˆxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!êwD"€@+ xD"äxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxC"jwD"ZxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!Øf33xD!ÀxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC"L' (&-3*C*O*U)J*=*1( 3wG!/xD!úxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwD!¼3( *1*=)J*U*O*C-3(&' '*a,’+º+â+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+û+Ú+´+,],xD"€xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!öxG#$++^+,µ+Û+û+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+â+º*‘+`'+ +j+Ï+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ý+Ÿ+Z$f33xD!ÌxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ~N-ÿ—s[ÿ­”„ÿ½¬¡ÿÄ·®ÿÉ¿¸ÿÄ·®ÿ½­¡ÿ­•…ÿ˜u]ÿ€O/ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ{I'ÿ’kQÿ©Ž|ÿº¨œÿõ¬ÿÉ¿¸ÿʱÿ¿°¦ÿ°™Šÿ|fÿƒU5ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyC v$*[+ +Þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ï+j+ ),,R+}+¬+Ü+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+÷+­*U3 vD)xD!óxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyE"ÿ•pWÿ¾¯¤ÿÛÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÛÛÿ¿°¦ÿ—s[ÿyE"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿŒbFÿ·¤–ÿØÕÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÆ»³ÿ €kÿ{H&ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!È€@@3 ,W+®+÷+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ý+Û+«+|,Q), ' -?*y+²+ê+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ñ+.!wE!\xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿhMÿÊ¿¸ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÊÁºÿ‘jPÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ†Y;ÿ¿¯¥ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÒÌÉÿ|fÿyE"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!òuB$#,#*‘+ò+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+é+±+x)>+ +**m+±+ò+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ü+­+;xD!¢xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ{H&ÿ²œÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ´Ÿÿ{I'ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyE"ÿ£…qÿÚØ×ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÁ³ªÿR2ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwC g+<+®+ý+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ñ+±*m,)@-?+Ž+Ý+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+·,.xD!“xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ€P/ÿǼ´ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉ¿¸ÿR2ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿzG$ÿ¹¦šÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÓÎÊÿ‹aEÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxC"[+/+¸+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ü+-?@--++Ü+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ý+ ,xD!ÆxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ€P/ÿÍľÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÎÇÂÿ‚S3ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿzG$ÿ¾¯¤ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ×ÔÒÿcGÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD Ž)+¢+ý+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Û,€),)8+“+í+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+õ+rU€@@xD!õxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ|J(ÿȽ¶ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÊÀ¹ÿ}K*ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¸¥˜ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÕÑÎÿ…X:ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÀU,u+ö+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+í,’*7$*U,»+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,Ç+*wD"-xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿµ ’ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¸¤—ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¡‚mÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉ¿¸ÿ{H&ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ò€€*++É+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ì+f3 ,.+ +ù+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ø,uyC _xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ”nTÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ–qXÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ„V7ÿØÖÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿª~ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿvA!'+x+ø+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ù,ž--/+‰+ð+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,¯o>‡xD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿzF$ÿÍÅ¿ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÏÈÄÿzG$ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ»©ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÚØ×ÿƒU6ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿsAÿ3Ç+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ð+ˆ'' +w+ï+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ3ñk;ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ›ybÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿž}hÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿˆ\?ÿÜÜÛÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ²œÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿl<ÿ7ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ó+ˆ-++G+p+ƒ+”+¥+¶+Ä,»,»+­,ª+¡+‚+e+H+*3 +*…+ô+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ.ÿb5ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿŸ°ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÛÿÍÒtÿÄË8ÿÍÒxÿÝÝÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿȽ¶ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ±›‹ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙÚÃÿÇÍNÿÅË?ÿÖØ­ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØÕÔÿ|J)ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ`4ÿ.ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ó+ƒ-3 +*+H+e+‚+¡,ª+­,»,»+Ä+¶+¥+”+ƒ,o+G,3,R*—+É+ñ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ý+Ö+¢,n+;3 '+™+ü+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ[0ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ„V7ÿÜÜÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÏÒÿÀÈÿÀÈÿÀÈÿÏÓ†ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ‡[=ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyE#ÿÔÐÍÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÙÿÅÌ>ÿÀÈÿÀÈÿÁÉ(ÿÙÚÅÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿšxaÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ\2ÿ,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ý,ª+3 +;,o*£+Ö+ý+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ñ+È+–,Q$.',{+Ã+û+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ø,»+r-()2,Á+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,ÿX.ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿŸ€jÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÜÑÿÁÉ(ÿÀÈÿÀÈÿÀÈÿÂÉ+ÿÜÜÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ£„pÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ‹aEÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÑÔ’ÿÀÈÿÀÈÿÀÈÿÀÈÿÌÑjÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¶¢•ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿW.ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+À*1,)*s,»+ø+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+û,Á,z(&+,W+¾+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Þ+*1+`+ë+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿU-ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿµ¡“ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÒÕ“ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÓÕ™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¹¦šÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¢ƒnÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÇÍLÿÀÈÿÀÈÿÀÈÿÀÈÿÁÉ)ÿÜÜ×ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÌľÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿT,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+é+^-3*‘+ß+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+þ+½*U+& *…+è+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ñ+q,( *+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ[0ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿʱÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÏ_ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿËÐfÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉ¿¸ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ²›ŒÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÜÔÿÀÈ"ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÕ×®ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÚÙÿyF#ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿZ1ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+þ+š++*s,Ó+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+è+ƒ( + +ƒ+ò+ÿ+ÿ+ÿ+ÿ+ö+â+Ö+Ì+Æ,»,»,»,»+Ã+Ì+Ñ+â+ó+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ú*©)2,E1õ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ`3ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿÎÇÂÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅË<ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÅË@ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÒÌÈÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ»©ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿר²ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÐÓ‡ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ€P0ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿa4ÿ,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ4ÿT,‘,4,ª+û+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ó+â+Ð+Ì+Ã,»,»,»,»,Ç+Ì+Ö+â+ö+ÿ+ÿ+ÿ+ÿ+ò+‚+ *1+š+“+q*O+6). +,+/+M+l+Š*©+Ñ+ù+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+º)Dr@œH$ ÿ+ÿ+ÿ+ÿ+ÿ+ÿ.ÿg9ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿÓÍÉÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÂÉ*ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÂÉ(ÿÝÝÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÖÓÐÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¾¯¤ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÔסÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÌÑoÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ…X:ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿf8ÿ-ÿ+ÿ+ÿ+ÿ+ÿ+ÿI% ÿtAÿwE!\,F+½+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ø+Ð+¨+‰+l+M,.,3. )+6)P+q+“+™+0@.'+S+‚+¸+ï+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Ë*CxE wxD!ÿ_3ÿ0ÿ+ÿ+ÿ+ÿ+ÿ3ÿr@ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿÐÉÄÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÙÿÀÈ ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÛÜÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÓÎÊÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¼ªŸÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÒÕ‘ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÊÏ_ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ‚S3ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿr?ÿ3ÿ+ÿ+ÿ+ÿ+ÿ0ÿ`3ÿxD!ÿxD!ÿwB#:,F+Î+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+î+·+,R(&@.'+_+ +â+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+².'yE!NxD!ÿxD!ÿo>ÿ=ÿ+ÿ+ÿ+ÿ+ÿ@ ÿwC!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿȾ·ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÚÛËÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÛÛÍÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÌþÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿµ ’ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÏÓƒÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÈÎVÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿ{I'ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwC!ÿ@ ÿ+ÿ+ÿ+ÿ+ÿ;ÿn=ÿxD!ÿxD!ÿxD!ÿqG,),µ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+â+Ÿ+^.'(&,h+°+õ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ú*‘-yC"&xD!ÿxD!ÿxD!ÿwC ÿN(ÿ+ÿ+ÿ+ÿ+ÿT+ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¹§›ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÜÑÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÛÛÐÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ½¬¡ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¦ŠwÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÐÔ‰ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÉÎYÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÑËÇÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿR+ÿ+ÿ+ÿ+ÿ+ÿO)ÿwC ÿxD!ÿxD!ÿxD!ÿxD!ç++“+ú+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+õ,¯*g)%3 *O,ž+ë+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+æ-PxD!øxD!ÿxD!ÿxD!ÿxD!ÿ^3ÿ.ÿ+ÿ+ÿ,ÿh:ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¥‰uÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÜÿÀÈ"ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈ ÿÝÝÙÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ©Ž|ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ‘jPÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÒÕ˜ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿËÐdÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¾®£ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿg9ÿ+ÿ+ÿ+ÿ/ÿ_4ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿZ1Ñ+ç+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ê*+N9 U+<+™+ò+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ@ ês@ÿxD!ÿxD!ÿxD!ÿxD!ÿj;ÿ5ÿ+ÿ+ÿ9ÿwC ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ‹aEÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÃÊ2ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÃÊ2ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfKÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ{I'ÿÙ×ÕÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÔרÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÎÒzÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¤†sÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxC!ÿ:ÿ+ÿ+ÿ5ÿj;ÿxD!ÿxD!ÿxD!ÿxD!ÿtAÿJ% ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ö,ª+M3IIID3/<:%‰8!Ó5þ3ÿ1 ÿ-ÿ+ÿ+ÿ+ÿ+ÿ3ÿd7ÿxD!ÿxD!ÿxD!ÿxD!ÿs@ÿ>ÿ+ÿ+ÿW.ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿÍÅ¿ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÆÌIÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÇÍNÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÑÊÆÿyE#ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿº¨œÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØÙ¿ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÓÖ—ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÛÿƒU6ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿV.ÿ+ÿ+ÿ?ÿs@ÿxD!ÿxD!ÿxD!ÿxD!ÿb6ÿ3ÿ+ÿ+ÿ+ÿ+ÿ,ÿ1 ÿ3ÿ5þ7!Ò:&ˆF50:III. -"*1-3+;)D)>+/.!-K88)H88€H77ÍH77úH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿD1/ÿ<' ÿ3 ÿ,ÿ+ÿ+ÿO)ÿwC!ÿxD!ÿxD!ÿxD!ÿvB ÿF$ ÿ+ÿ/ÿp?ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¦ŠwÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÍÒtÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÎÓ{ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ©Ž|ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ’kQÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÜÿÂÉ-ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿÙÚÂÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÀ²¨ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿp?ÿ/ÿ+ÿD" ÿuC ÿxD!ÿxD!ÿxD!ÿxD!ÿT,ÿ,ÿ+ÿ,ÿ2ÿ<' ÿD1/ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77úI77ÌH66F99(-.!+0)>)D+;-3*1-"3 ' +G+‚+­+Ì+ë+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+þ+ã,Á,ž+|:#|G64¾H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿE20ÿ7 ÿ+ÿ+ÿE! ÿtBÿxD!ÿxD!ÿxD!ÿxD!ÿP*ÿ+ÿI% ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ|K)ÿÖÒÏÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÖØ°ÿÀÈÿÀÈÿÀÈÿÀÈÿÀÈÿ×Ù¶ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ×ÔÒÿ~N-ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿÇ»³ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿËÐhÿÀÈÿÀÈÿÀÈÿÀÈÿÅÌAÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ‘jPÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿI% ÿ+ÿQ+ÿxD!ÿxD!ÿxD!ÿxD!ÿtBÿC" ÿ+ÿ,ÿ5ÿC2/ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿF54Í9&+|+Ÿ,Á+ä+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ê+Ë+­+,F' +*+ˆ+Ì+ü+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ-ÿ=("ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿB/,ÿ/ÿ+ÿ9ÿn=ÿxD!ÿxD!ÿxD!ÿxD!ÿY/ÿ.ÿo>ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ¢„oÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÜÿÆÌGÿÀÈÿÀÈÿÀÈÿÆÌGÿÝÝÜÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¤‡tÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿdHÿÜÜÛÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØÙ¹ÿÀÈ ÿÀÈÿÀÈÿÀÈÿÒÕ‘ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÀ²¨ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿn=ÿ.ÿY0ÿxD!ÿxD!ÿxD!ÿxD!ÿm<ÿ8ÿ+ÿ/ ÿC/,ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ=("ÿ-ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+û+Ì+‡,)0+l+Ê+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ0 ÿD20ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG65ÿ4ÿ+ÿ2ÿj;ÿxD!ÿxD!ÿxD!ÿxD!ÿ^3ÿL(ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyE#ÿŸ°ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ×Ù¶ÿÁÉ'ÿÀÈÿÁÉ(ÿ×ÙºÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÆ»³ÿyF#ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ²œÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÎÒvÿÀÈÿÀÈÿÇÍPÿÝÝÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ×ÔÒÿ…X:ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿL'ÿ\1ÿxD!ÿxD!ÿxD!ÿxD!ÿi:ÿ1ÿ+ÿ5ÿG65ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿE20ÿ0 ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+É+j3+ ,€+ð+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ2 ÿF43ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH66ÿ6 ÿ+ÿ0ÿg9ÿxD!ÿxD!ÿxD!ÿxD!ÿc6ÿs@ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿƒU5ÿÔÏÌÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØÙ¿ÿÑÔŠÿÙÚÁÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÕÑÏÿ„W8ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ{H&ÿȾ·ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÔסÿÑÔ’ÿÜÜØÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿšw`ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿs@ÿb6ÿxD!ÿxD!ÿxD!ÿxD!ÿh:ÿ1ÿ+ÿ6ÿH66ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿF43ÿ1 ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ï+~. )P+ã+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ/ÿE43ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ4ÿ+ÿ/ÿe7ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ‹bFÿØÕÓÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿØÖÔÿŽeJÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿR2ÿÏÈÃÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¨ŒyÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿd6ÿ/ÿ+ÿ3ÿH66ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿF43ÿ/ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+â*O9 +š+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,ÿC0-ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿK74ÿC" ÿ+ÿ-ÿe7ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿŒbFÿÔÐÍÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÖÓÐÿhMÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ‚S3ÿÊÀ¹ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿªÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿe7ÿ.ÿ+ÿB# ÿK85ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿC0-ÿ,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,˜ & ,Ç+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+þ+ã,Á+Ÿ+~,b+N-9)%--@@-F42ŠH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ_>-ÿe8ÿ<ÿ0ÿl<ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ…W9ÿǼµÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉ¿¸ÿ†Y:ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ}L+ÿº©ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ×ÓÑÿ˜t]ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿk<ÿ0ÿ<ÿf8ÿ^=,ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿF53†-@3-+)%,:+N,b+~+Ÿ,Á+ã+þ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+Å( & +Õ+ÿ+ÿ+ÿ+ÿ+û+Ê,˜,h)8. €K88)I66BG66ZH77jH77õH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿK76ÿd>*ÿg?(ÿY4ÿ> ÿp?ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿzG$ÿ§‹yÿØÖÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙ×Õÿ©Ž|ÿzG%ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ›ybÿÒÍÉÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ¼« ÿƒU5ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿp?ÿ<ÿV1ÿi?(ÿd>*ÿK76ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77õH77jH88RI77*+ -9,i+™+Ê+û+ÿ+ÿ+ÿ+ÿ+Ô(  +É+ÿ+ø+½,€*C. H77JH77£H77éH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI75ÿW;0ÿf?)ÿvD"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿQ1ÿ­•…ÿÔÐÍÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÕÑÏÿ¯—‡ÿ‚S3ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ|J)ÿ¤†sÿÎÇÂÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÚÙÿ½¬¡ÿŽeIÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿqA#ÿR6(ÿN94ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI77ÚG77F::. )D,€+¾+ù+ÿ+È +~+›,Q+ G66KH66ÎH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿM85ÿa=+ÿvD"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿzG$ÿ”oVÿ¯˜ˆÿŸ°ÿÔÐÍÿÝÝÝÿÝÝÝÿÝÝÝÿÕÑÎÿʱÿ°™Šÿ•pWÿzG%ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿyE"ÿŽeJÿªÿÁ³ªÿÑËÇÿÜÜÛÿÝÝÝÿÝÝÝÿØÕÔÿÊÀ¹ÿ¸¤—ÿ}gÿO/ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿqB$ÿY;/ÿI77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ôH77ŠD33+ ,Q+›+}@@@H77‘H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿO93ÿnB&ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ}K*ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ|J)ÿyE"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿwD!ÿb>,ÿJ76ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77çI66P@@@ H77ÇH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI87ÿi@(ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿrC$ÿQ:3ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH88Ž€U++H77¸H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI87ÿjA(ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿnA&ÿL85ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG77¯M33 H77‡H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿK85ÿuC"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ„V7ÿgKÿ˜t]ÿ›ybÿ lÿ lÿšxaÿ•pWÿfKÿ‚S4ÿyE"ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿnB&ÿK76ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77°€J66&H66øH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ\<.ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿiNÿ¼ªŸÿÖÒÏÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙÖÕÿÄ·®ÿ¥ˆtÿ~M,ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿuC"ÿM95ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ƒH77¢H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI77ÿtC#ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ›ybÿÜÜÛÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÐÉÄÿN.ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿZ<.ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77þH77<M33 H77òH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿf?)ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿ½­¡ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿœzcÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿxD!ÿrB#ÿH76ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÄH77JH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ^>0ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿgVÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ………ÿ|W>ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿyH(ÿeA/ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI77*G77kH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ,!!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG66lG66ˆH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ŠG66ˆH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77†H66uH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG77sG99HH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ8**ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9++ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿF77EP00H77ùH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH66øD33H77°H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ8**ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9++ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77­H669H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿC33ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿC44ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿJ887H66¤H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿC44ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿD44ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG77¡P00H77ØH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ;--ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ<..ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG77ÖD33H88 H77ÞH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿC33ÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿC33ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH66ÜD33F::H88¼H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG66ÿ5))ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ5))ÿG66ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿI77ºM33I77bH77àH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG66ÿ@11ÿ5((ÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿ5))ÿ@11ÿG66ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ßH88`U++H66QG77¨I77èH77ÿH77ÿH77ÿH77ÿH77ÿH77ùH77ÉG77G77¨H77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿ/$$ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ/$$ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿG77¨I77‚H88ÊH77ùH77ÿH77ÿH77ÿH77ÿH77ÿH77çH77§G77O333F::F773G88DI88;H44'333U99 H77ËH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿB22ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB22ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77ÿH77É@@@U++F99(H77H77\I77fH66YI778F.. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNNNÿXXXÿ222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkkkÿ×××ÿÝÝÝÿÝÝÝÿÝÝÝÿ®®®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcccÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ444ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÁÁÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ°°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQQQÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ’’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿ222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿcccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGGGÿ²²²ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÚÚÚÿ¦¦¦ÿ222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbbbÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÙÙÙÿCCCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbbbÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ???ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<<<ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxxxÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿWWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]]]ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ:::ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½½½ÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÛÛÛÿdddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿOOOÿÚÚÚÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÓÓÓÿ333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿlllÿ¬¬¬ÿ¸¸¸ÿÿ111ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿÿÍÍÍÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÈÈÈÿÿ"""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]ÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°8¾ÖÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÖ½Œ7kitty-0.15.0/logo/kitty.svg000066400000000000000000000216321356737523400156110ustar00rootroot00000000000000 image/svg+xml Kovid Goyal kitty-0.15.0/logo/make.py000077500000000000000000000025221356737523400152130ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import subprocess import shutil base = os.path.dirname(os.path.abspath(__file__)) src = os.path.join(base, 'kitty.svg') def abspath(x): return os.path.join(base, x) def run(*args): try: subprocess.check_call(args) except EnvironmentError: raise SystemExit('You are missing the {} program needed to generate the kitty logo'.format(args[0])) def render(output, sz=256): print('Rendering at {0}x{0}...'.format(sz)) run('rsvg-convert', '-w', str(sz), '-h', str(sz), '-o', output, src) run('optipng', '-quiet', '-o7', '-strip', 'all', output) def main(): render(abspath('kitty.png')) run('convert', abspath('kitty.png'), '-depth', '8', abspath('kitty.rgba')) iconset = abspath('kitty.iconset') if os.path.exists(iconset): shutil.rmtree(iconset) os.mkdir(iconset) os.chdir(iconset) for sz in (16, 32, 64, 128, 256, 512, 1024): iname = os.path.join(iconset, 'icon_{0}x{0}.png'.format(sz)) iname2x = 'icon_{0}x{0}@2x.png'.format(sz // 2) render(iname, sz) if sz > 16 and sz != 128: shutil.copy2(iname, iname2x) if sz in (64, 1024): os.remove(iname) if __name__ == '__main__': main() kitty-0.15.0/protocol-extensions.asciidoc000066400000000000000000000000751356737523400205200ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/protocol-extensions.html kitty-0.15.0/publish.py000077500000000000000000000326331356737523400150120ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import argparse import io import json import mimetypes import os import pprint import re import shlex import shutil import subprocess import sys import tempfile import time from contextlib import suppress import requests os.chdir(os.path.dirname(os.path.abspath(__file__))) build_path = os.path.abspath('../build-kitty') docs_dir = os.path.abspath('docs') publish_dir = os.path.abspath(os.path.join('..', 'kovidgoyal.github.io', 'kitty')) with open('kitty/constants.py') as f: raw = f.read() nv = re.search( r'^version\s+=\s+\((\d+), (\d+), (\d+)\)', raw, flags=re.MULTILINE) version = '%s.%s.%s' % (nv.group(1), nv.group(2), nv.group(3)) appname = re.search( r"^appname\s+=\s+'([^']+)'", raw, flags=re.MULTILINE).group(1) ALL_ACTIONS = 'man html build tag sdist upload website'.split() def call(*cmd, cwd=None): if len(cmd) == 1: cmd = shlex.split(cmd[0]) ret = subprocess.Popen(cmd, cwd=cwd).wait() if ret != 0: raise SystemExit(ret) def run_build(args): os.chdir(build_path) call('./linux 64 kitty') call('./osx kitty --sign-installers') call('./osx shutdown') call('./linux 32 kitty') def run_tag(args): call('git push') call('git tag -s v{0} -m version-{0}'.format(version)) call('git push origin v{0}'.format(version)) def run_man(args): call('make FAIL_WARN=-W man', cwd=docs_dir) def run_html(args): call('make FAIL_WARN=-W html', cwd=docs_dir) def add_analytics(): analytics = ''' \ ''' for dirpath, firnames, filenames in os.walk(publish_dir): for fname in filenames: if fname.endswith('.html'): with open(os.path.join(dirpath, fname), 'r+b') as f: html = f.read().decode('utf-8') html = html.replace('', analytics, 1) f.seek(0), f.truncate() f.write(html.encode('utf-8')) def run_website(args): if os.path.exists(publish_dir): shutil.rmtree(publish_dir) shutil.copytree(os.path.join(docs_dir, '_build', 'html'), publish_dir) add_analytics() with open(os.path.join(publish_dir, 'current-version.txt'), 'w') as f: f.write(version) shutil.copy2(os.path.join(docs_dir, 'installer.sh'), publish_dir) installer = os.path.join(docs_dir, 'installer.py') subprocess.check_call([ 'python3', '-c', f"import runpy; runpy.run_path('{installer}', run_name='update_wrapper')", os.path.join(publish_dir, 'installer.sh')]) os.chdir(os.path.dirname(publish_dir)) subprocess.check_call(['git', 'add', 'kitty']) subprocess.check_call(['git', 'commit', '-m', 'kitty website updates']) subprocess.check_call(['git', 'push']) def run_sdist(args): with tempfile.TemporaryDirectory() as tdir: base = os.path.join(tdir, f'kitty-{version}') os.mkdir(base) subprocess.check_call('git archive HEAD | tar -x -C ' + base, shell=True) dest = os.path.join(base, 'docs', '_build') os.mkdir(dest) for x in 'html man'.split(): shutil.copytree(os.path.join(docs_dir, '_build', x), os.path.join(dest, x)) dest = os.path.abspath(os.path.join('build', f'kitty-{version}.tar')) subprocess.check_call(['tar', '-cf', dest, os.path.basename(base)], cwd=tdir) with suppress(FileNotFoundError): os.remove(dest + '.xz') subprocess.check_call(['xz', '-9', dest]) class ReadFileWithProgressReporting(io.BufferedReader): # {{{ def __init__(self, path, mode='rb'): io.BufferedReader.__init__(self, open(path, mode)) self.seek(0, os.SEEK_END) self._total = self.tell() self.seek(0) self.start_time = time.time() def __len__(self): return self._total def read(self, size): data = io.BufferedReader.read(self, size) if data: self.report_progress(len(data)) return data def report_progress(self, size): def write(*args): print(*args, end='') write('\x1b[s\x1b[K') frac = float(self.tell()) / self._total mb_pos = self.tell() / float(1024**2) mb_tot = self._total / float(1024**2) kb_pos = self.tell() / 1024.0 kb_rate = kb_pos / (time.time() - self.start_time) bit_rate = kb_rate * 1024 eta = int((self._total - self.tell()) / bit_rate) + 1 eta_m, eta_s = eta / 60, eta % 60 write( ' %.1f%% %.1f/%.1fMB %.1f KB/sec %d minutes, %d seconds left' % (frac * 100, mb_pos, mb_tot, kb_rate, eta_m, eta_s)) write('\x1b[u') if self.tell() >= self._total: t = int(time.time() - self.start_time) + 1 print('\nUpload took %d minutes and %d seconds at %.1f KB/sec' % (t / 60, t % 60, kb_rate)) sys.stdout.flush() # }}} class Base(object): # {{{ def __init__(self): pass def info(self, *args, **kwargs): print(*args, **kwargs) sys.stdout.flush() def warn(self, *args, **kwargs): print('\n' + '_' * 20, 'WARNING', '_' * 20) print(*args, **kwargs) print('_' * 50) sys.stdout.flush() # }}} class GitHub(Base): # {{{ API = 'https://api.github.com/' def __init__(self, files, reponame, version, username, password, replace=False): self.files, self.reponame, self.version, self.username, self.password, self.replace = ( files, reponame, version, username, password, replace) self.current_tag_name = 'v' + self.version self.requests = s = requests.Session() s.auth = (self.username, self.password) s.headers.update({'Accept': 'application/vnd.github.v3+json'}) def __call__(self): releases = self.releases() # self.clean_older_releases(releases) release = self.create_release(releases) upload_url = release['upload_url'].partition('{')[0] existing_assets = self.existing_assets(release['id']) for path, desc in self.files.items(): self.info('') url = self.API + 'repos/%s/%s/releases/assets/{}' % (self.username, self.reponame) fname = os.path.basename(path) if fname in existing_assets: self.info('Deleting %s from GitHub with id: %s' % (fname, existing_assets[fname])) r = self.requests.delete(url.format(existing_assets[fname])) if r.status_code != 204: self.fail(r, 'Failed to delete %s from GitHub' % fname) r = self.do_upload(upload_url, path, desc, fname) if r.status_code != 201: self.fail(r, 'Failed to upload file: %s' % fname) try: r = self.requests.patch( url.format(r.json()['id']), data=json.dumps({ 'name': fname, 'label': desc })) except Exception: time.sleep(15) r = self.requests.patch( url.format(r.json()['id']), data=json.dumps({ 'name': fname, 'label': desc })) if r.status_code != 200: self.fail(r, 'Failed to set label for %s' % fname) def clean_older_releases(self, releases): for release in releases: if release.get( 'assets', None) and release['tag_name'] != self.current_tag_name: self.info('\nDeleting old released installers from: %s' % release['tag_name']) for asset in release['assets']: r = self.requests.delete( self.API + 'repos/%s/%s/releases/assets/%s' % ( self.username, self.reponame, asset['id'])) if r.status_code != 204: self.fail( r, 'Failed to delete obsolete asset: %s for release: %s' % (asset['name'], release['tag_name'])) def do_upload(self, url, path, desc, fname): mime_type = mimetypes.guess_type(fname)[0] self.info('Uploading to GitHub: %s (%s)' % (fname, mime_type)) with ReadFileWithProgressReporting(path) as f: return self.requests.post( url, headers={ 'Content-Type': mime_type, 'Content-Length': str(f._total) }, params={'name': fname}, data=f) def fail(self, r, msg): print(msg, ' Status Code: %s' % r.status_code, file=sys.stderr) print("JSON from response:", file=sys.stderr) pprint.pprint(dict(r.json()), stream=sys.stderr) raise SystemExit(1) def already_exists(self, r): error_code = r.json().get('errors', [{}])[0].get('code', None) return error_code == 'already_exists' def existing_assets(self, release_id): url = self.API + 'repos/%s/%s/releases/%s/assets' % ( self.username, self.reponame, release_id) r = self.requests.get(url) if r.status_code != 200: self.fail('Failed to get assets for release') return {asset['name']: asset['id'] for asset in r.json()} def releases(self): url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame ) r = self.requests.get(url) if r.status_code != 200: self.fail(r, 'Failed to list releases') return r.json() def create_release(self, releases): ' Create a release on GitHub or if it already exists, return the existing release ' for release in releases: # Check for existing release if release['tag_name'] == self.current_tag_name: return release url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame ) r = self.requests.post( url, data=json.dumps({ 'tag_name': self.current_tag_name, 'target_commitish': 'master', 'name': 'version %s' % self.version, 'body': 'Release version %s' % self.version, 'draft': False, 'prerelease': False })) if r.status_code != 201: self.fail(r, 'Failed to create release for version: %s' % self.version) return r.json() # }}} def get_github_data(): with open(os.environ['PENV'] + '/github') as f: un, pw = f.read().strip().split(':') return {'username': un, 'password': pw} def run_upload(args): files = { os.path.join(build_path, 'build', f.format(version)): desc for f, desc in { 'osx/dist/kitty-{}.dmg': 'macOS dmg', 'linux/64/sw/dist/kitty-{}-x86_64.txz': 'Linux amd64 binary bundle', 'linux/32/sw/dist/kitty-{}-i686.txz': 'Linux x86 binary bundle', }.items() } files[f'build/kitty-{version}.tar.xz'] = 'Source code' for f in files: if not os.path.exists(f): raise SystemExit('The installer {} does not exist'.format(f)) gd = get_github_data() gh = GitHub(files, appname, version, gd['username'], gd['password']) gh() def require_git_master(branch='master'): b = subprocess.check_output(['git', 'symbolic-ref', '--short', 'HEAD']).decode('utf-8').strip() if b != branch: raise SystemExit('You must be in the {} git branch'.format(branch)) def require_penv(): if 'PENV' not in os.environ: raise SystemExit('The PENV env var is not present, required for uploading releases') def main(): require_git_master() require_penv() parser = argparse.ArgumentParser(description='Publish kitty') parser.add_argument( '--only', default=False, action='store_true', help='Only run the specified action, by default the specified action and all sub-sequent actions are run') parser.add_argument( 'action', default='all', nargs='?', choices=list(ALL_ACTIONS) + ['all'], help='The action to start with') args = parser.parse_args() if args.action == 'all': actions = list(ALL_ACTIONS) else: idx = ALL_ACTIONS.index(args.action) actions = ALL_ACTIONS[idx:] if args.only: del actions[1:] else: try: ans = input('Publish version \033[91m{}\033[m (y/n): '.format(version)) except KeyboardInterrupt: ans = 'n' if ans.lower() != 'y': return for action in actions: print('Running', action) cwd = os.getcwd() globals()['run_' + action](args) os.chdir(cwd) if __name__ == '__main__': main() kitty-0.15.0/remote-control.asciidoc000066400000000000000000000000701356737523400174260ustar00rootroot00000000000000See https://sw.kovidgoyal.net/kitty/remote-control.html kitty-0.15.0/session.vim000066400000000000000000000006071356737523400151630ustar00rootroot00000000000000" Scan the following dirs recursively for tags let g:project_tags_dirs = ['kitty'] let g:syntastic_python_flake8_exec = 'flake8' let g:ycm_python_binary_path = 'python3' set wildignore+==template.py set wildignore+=tags set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=0 set smarttab python < import argparse import glob import importlib import json import os import re import runpy import shlex import shutil import subprocess import sys import sysconfig import time from functools import partial from collections import namedtuple from contextlib import suppress from pathlib import Path base = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, 'glfw') glfw = importlib.import_module('glfw') verbose = False del sys.path[0] build_dir = 'build' constants = os.path.join('kitty', 'constants.py') with open(constants, 'rb') as f: constants = f.read().decode('utf-8') appname = re.search(r"^appname = '([^']+)'", constants, re.MULTILINE).group(1) version = tuple( map( int, re.search( r"^version = \((\d+), (\d+), (\d+)\)", constants, re.MULTILINE ).group(1, 2, 3) ) ) _plat = sys.platform.lower() is_macos = 'darwin' in _plat env = None PKGCONFIG = os.environ.get('PKGCONFIG_EXE', 'pkg-config') def emphasis(text): if sys.stdout.isatty(): text = '\033[32m' + text + '\033[39m' return text def error(text): if sys.stdout.isatty(): text = '\033[91m' + text + '\033[39m' return text def pkg_config(pkg, *args): try: return list( filter( None, shlex.split( subprocess.check_output([PKGCONFIG, pkg] + list(args)) .decode('utf-8') ) ) ) except subprocess.CalledProcessError: raise SystemExit('The package {} was not found on your system'.format(error(pkg))) def at_least_version(package, major, minor=0): q = '{}.{}'.format(major, minor) if subprocess.run([PKGCONFIG, package, '--atleast-version=' + q] ).returncode != 0: try: ver = subprocess.check_output([PKGCONFIG, package, '--modversion'] ).decode('utf-8').strip() qmajor, qminor = map(int, re.match(r'(\d+).(\d+)', ver).groups()) except Exception: ver = 'not found' qmajor = qminor = 0 if qmajor < major or (qmajor == major and qminor < minor): raise SystemExit( '{} >= {}.{} is required, found version: {}'.format( error(package), major, minor, ver ) ) def cc_version(): if 'CC' in os.environ: cc = os.environ['CC'] else: if is_macos: cc = 'clang' else: if shutil.which('gcc'): cc = 'gcc' elif shutil.which('clang'): cc = 'clang' else: cc = 'cc' raw = subprocess.check_output([cc, '-dumpversion']).decode('utf-8') ver = raw.split('.')[:2] try: ver = tuple(map(int, ver)) except Exception: ver = (0, 0) return cc, ver def get_python_include_paths(): ans = [] for name in sysconfig.get_path_names(): if 'include' in name: ans.append(name) return sorted(frozenset(map(sysconfig.get_path, sorted(ans)))) def get_python_flags(cflags): cflags.extend('-I' + x for x in get_python_include_paths()) libs = [] libs += sysconfig.get_config_var('LIBS').split() libs += sysconfig.get_config_var('SYSLIBS').split() fw = sysconfig.get_config_var('PYTHONFRAMEWORK') if fw: for var in 'data include stdlib'.split(): val = sysconfig.get_path(var) if val and '/{}.framework'.format(fw) in val: fdir = val[:val.index('/{}.framework'.format(fw))] if os.path.isdir( os.path.join(fdir, '{}.framework'.format(fw)) ): framework_dir = fdir break else: raise SystemExit('Failed to find Python framework') libs.append( os.path.join(framework_dir, sysconfig.get_config_var('LDLIBRARY')) ) else: libs += ['-L' + sysconfig.get_config_var('LIBDIR')] libs += [ '-lpython' + sysconfig.get_config_var('VERSION') + sys.abiflags ] libs += sysconfig.get_config_var('LINKFORSHARED').split() return libs def get_sanitize_args(cc, ccver): sanitize_args = ['-fsanitize=address'] if ccver >= (5, 0): sanitize_args.append('-fsanitize=undefined') # if cc == 'gcc' or (cc == 'clang' and ccver >= (4, 2)): # sanitize_args.append('-fno-sanitize-recover=all') sanitize_args.append('-fno-omit-frame-pointer') return sanitize_args def test_compile(cc, *cflags, src=None): src = src or 'int main(void) { return 0; }' p = subprocess.Popen([cc] + list(cflags) + ['-x', 'c', '-o', os.devnull, '-'], stdin=subprocess.PIPE) try: p.stdin.write(src.encode('utf-8')), p.stdin.close() except BrokenPipeError: return False return p.wait() == 0 def first_successful_compile(cc, *cflags, src=None): for x in cflags: if test_compile(cc, *shlex.split(x), src=src): return x return '' class Env: def __init__(self, cc, cppflags, cflags, ldflags, ldpaths=None, ccver=None): self.cc, self.cppflags, self.cflags, self.ldflags, self.ldpaths = cc, cppflags, cflags, ldflags, [] if ldpaths is None else ldpaths self.ccver = ccver def copy(self): return Env(self.cc, list(self.cppflags), list(self.cflags), list(self.ldflags), list(self.ldpaths), self.ccver) def init_env( debug=False, sanitize=False, native_optimizations=True, profile=False, extra_logging=() ): native_optimizations = native_optimizations and not sanitize and not debug cc, ccver = cc_version() print('CC:', cc, ccver) stack_protector = first_successful_compile(cc, '-fstack-protector-strong', '-fstack-protector') missing_braces = '' if ccver < (5, 2) and cc == 'gcc': missing_braces = '-Wno-missing-braces' df = '-g3' float_conversion = '' if ccver >= (5, 0): df += ' -Og' float_conversion = '-Wfloat-conversion' optimize = df if debug or sanitize else '-O3' sanitize_args = get_sanitize_args(cc, ccver) if sanitize else set() cppflags = os.environ.get( 'OVERRIDE_CPPFLAGS', '-D{}DEBUG'.format('' if debug else 'N'), ) cppflags = shlex.split(cppflags) for el in extra_logging: cppflags.append('-DDEBUG_{}'.format(el.upper().replace('-', '_'))) # gnu11 is needed to get monotonic.h to build on older Linux distros std = 'c' if is_macos or ccver[0] >= 5 else 'gnu' cflags = os.environ.get( 'OVERRIDE_CFLAGS', ( '-Wextra {} -Wno-missing-field-initializers -Wall -Wstrict-prototypes -std={}11' ' -pedantic-errors -Werror {} {} -fwrapv {} {} -pipe {} -fvisibility=hidden' ).format( float_conversion, std, optimize, ' '.join(sanitize_args), stack_protector, missing_braces, '-march=native' if native_optimizations else '', ) ) cflags = shlex.split(cflags) + shlex.split( sysconfig.get_config_var('CCSHARED') ) ldflags = os.environ.get( 'OVERRIDE_LDFLAGS', '-Wall ' + ' '.join(sanitize_args) + ('' if debug else ' -O3') ) ldflags = shlex.split(ldflags) ldflags.append('-shared') cppflags += shlex.split(os.environ.get('CPPFLAGS', '')) cflags += shlex.split(os.environ.get('CFLAGS', '')) ldflags += shlex.split(os.environ.get('LDFLAGS', '')) if not debug and not sanitize: # See https://github.com/google/sanitizers/issues/647 cflags.append('-flto'), ldflags.append('-flto') if profile: cppflags.append('-DWITH_PROFILER') cflags.append('-g3') ldflags.append('-lprofiler') return Env(cc, cppflags, cflags, ldflags, ccver=ccver) def kitty_env(): ans = env.copy() cflags = ans.cflags cflags.append('-pthread') # We add 4000 to the primary version because vim turns on SGR mouse mode # automatically if this version is high enough cppflags = ans.cppflags cppflags.append('-DPRIMARY_VERSION={}'.format(version[0] + 4000)) cppflags.append('-DSECONDARY_VERSION={}'.format(version[1])) at_least_version('harfbuzz', 1, 5) cflags.extend(pkg_config('libpng', '--cflags-only-I')) if is_macos: font_libs = ['-framework', 'CoreText', '-framework', 'CoreGraphics'] # Apple deprecated OpenGL in Mojave (10.14) silence the endless # warnings about it cppflags.append('-DGL_SILENCE_DEPRECATION') else: cflags.extend(pkg_config('fontconfig', '--cflags-only-I')) font_libs = pkg_config('fontconfig', '--libs') cflags.extend(pkg_config('harfbuzz', '--cflags-only-I')) font_libs.extend(pkg_config('harfbuzz', '--libs')) pylib = get_python_flags(cflags) gl_libs = ['-framework', 'OpenGL'] if is_macos else pkg_config('gl', '--libs') libpng = pkg_config('libpng', '--libs') ans.ldpaths += pylib + font_libs + gl_libs + libpng if is_macos: ans.ldpaths.extend('-framework Cocoa'.split()) else: ans.ldpaths += ['-lrt'] if '-ldl' not in ans.ldpaths: ans.ldpaths.append('-ldl') if '-lz' not in ans.ldpaths: ans.ldpaths.append('-lz') with suppress(FileExistsError): os.mkdir(build_dir) return ans def define(x): return '-D' + x def run_tool(cmd, desc=None): if isinstance(cmd, str): cmd = shlex.split(cmd[0]) if verbose: desc = None print(desc or ' '.join(cmd)) p = subprocess.Popen(cmd) ret = p.wait() if ret != 0: if desc: print(' '.join(cmd)) raise SystemExit(ret) def get_vcs_rev_defines(): ans = [] if os.path.exists('.git'): try: rev = subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode('utf-8') except FileNotFoundError: try: with open('.git/refs/heads/master') as f: rev = f.read() except NotADirectoryError: with open('.git') as f: gitloc = f.read() with open(os.path.join(gitloc, 'refs/heads/master')) as f: rev = f.read() ans.append('KITTY_VCS_REV="{}"'.format(rev.strip())) return ans SPECIAL_SOURCES = { 'kitty/parser_dump.c': ('kitty/parser.c', ['DUMP_COMMANDS']), 'kitty/data-types.c': ('kitty/data-types.c', get_vcs_rev_defines), } def newer(dest, *sources): try: dtime = os.path.getmtime(dest) except EnvironmentError: return True for s in sources: if os.path.getmtime(s) >= dtime: return True return False def dependecies_for(src, obj, all_headers): dep_file = obj.rpartition('.')[0] + '.d' try: with open(dep_file) as f: deps = f.read() except FileNotFoundError: yield src yield from iter(all_headers) else: RE_INC = re.compile( r'^(?P.+?):\s+(?P.+?)$', re.MULTILINE ) SPACE_TOK = '\x1B' text = deps.replace('\\\n', ' ').replace('\\ ', SPACE_TOK) for match in RE_INC.finditer(text): files = ( f.replace(SPACE_TOK, ' ') for f in match.group('deps').split() ) for path in files: path = os.path.abspath(path) if path.startswith(base): yield path def parallel_run(items): try: num_workers = max(2, os.cpu_count()) except Exception: num_workers = 2 items = list(reversed(items)) workers = {} failed = None num, total = 0, len(items) def wait(): nonlocal failed if not workers: return pid, s = os.wait() compile_cmd, w = workers.pop(pid, (None, None)) if compile_cmd is not None and ((s & 0xff) != 0 or ((s >> 8) & 0xff) != 0): if failed is None: failed = compile_cmd elif compile_cmd.on_success is not None: compile_cmd.on_success() printed = False while items and failed is None: while len(workers) < num_workers and items: compile_cmd = items.pop() num += 1 if verbose: print(' '.join(compile_cmd.cmd)) else: print('\r\x1b[K[{}/{}] {}'.format(num, total, compile_cmd.desc), end='') printed = True w = subprocess.Popen(compile_cmd.cmd, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) workers[w.pid] = compile_cmd, w wait() while len(workers): wait() if not verbose and printed: print(' done') if failed: print(failed.desc) run_tool(failed.cmd) CompileKey = namedtuple('CompileKey', 'src dest') Command = namedtuple('Command', 'desc cmd is_newer_func on_success key keyfile') class CompilationDatabase: def __init__(self, incremental): self.incremental = incremental self.compile_commands = [] self.link_commands = [] def add_command(self, desc, cmd, is_newer_func, key=None, on_success=None, keyfile=None): queue = self.link_commands if keyfile is None else self.compile_commands queue.append(Command(desc, cmd, is_newer_func, on_success, key, keyfile)) def build_all(self): def sort_key(compile_cmd): if compile_cmd.keyfile: return os.path.getsize(compile_cmd.keyfile) return 0 items = [] for compile_cmd in self.compile_commands: if not self.incremental or self.cmd_changed(compile_cmd) or compile_cmd.is_newer_func(): items.append(compile_cmd) items.sort(key=sort_key, reverse=True) parallel_run(items) items = [] for compile_cmd in self.link_commands: if not self.incremental or compile_cmd.is_newer_func(): items.append(compile_cmd) parallel_run(items) def cmd_changed(self, compile_cmd): key, cmd = compile_cmd.key, compile_cmd.cmd return self.db.get(key) != cmd def __enter__(self): self.all_keys = set() self.dbpath = os.path.abspath('compile_commands.json') self.linkdbpath = os.path.join(os.path.dirname(self.dbpath), 'link_commands.json') try: with open(self.dbpath) as f: compilation_database = json.load(f) except FileNotFoundError: compilation_database = [] try: with open(self.linkdbpath) as f: link_database = json.load(f) except FileNotFoundError: link_database = [] compilation_database = { CompileKey(k['file'], k['output']): k['arguments'] for k in compilation_database } self.db = compilation_database self.linkdb = {k['output']: k['arguments'] for k in link_database} return self def __exit__(self, *a): cdb = self.db for key in set(cdb) - self.all_keys: del cdb[key] compilation_database = [ {'file': c.key.src, 'arguments': c.cmd, 'directory': base, 'output': c.key.dest} for c in self.compile_commands ] with open(self.dbpath, 'w') as f: json.dump(compilation_database, f, indent=2, sort_keys=True) with open(self.linkdbpath, 'w') as f: json.dump([{'output': c.key, 'arguments': c.cmd, 'directory': base} for c in self.link_commands], f, indent=2, sort_keys=True) def compile_c_extension(kenv, module, compilation_database, sources, headers, desc_prefix=''): prefix = os.path.basename(module) objects = [ os.path.join(build_dir, prefix + '-' + os.path.basename(src) + '.o') for src in sources ] for original_src, dest in zip(sources, objects): src = original_src cppflags = kenv.cppflags[:] is_special = src in SPECIAL_SOURCES if is_special: src, defines = SPECIAL_SOURCES[src] if callable(defines): defines = defines() cppflags.extend(map(define, defines)) cmd = [kenv.cc, '-MMD'] + cppflags + kenv.cflags cmd += ['-c', src] + ['-o', dest] key = CompileKey(original_src, os.path.basename(dest)) desc = 'Compiling {} ...'.format(emphasis(desc_prefix + src)) compilation_database.add_command(desc, cmd, partial(newer, dest, *dependecies_for(src, dest, headers)), key=key, keyfile=src) dest = os.path.join(build_dir, module + '.so') real_dest = module + '.so' os.makedirs(os.path.dirname(dest), exist_ok=True) desc = 'Linking {} ...'.format(emphasis(desc_prefix + module)) # Old versions of clang don't like -pthread being passed to the linker # Don't treat linker warnings as errors (linker generates spurious # warnings on some old systems) unsafe = {'-pthread', '-Werror', '-pedantic-errors'} linker_cflags = list(filter(lambda x: x not in unsafe, kenv.cflags)) cmd = [kenv.cc] + linker_cflags + kenv.ldflags + objects + kenv.ldpaths + ['-o', dest] def on_success(): os.rename(dest, real_dest) compilation_database.add_command(desc, cmd, partial(newer, real_dest, *objects), on_success=on_success, key=module + '.so') def find_c_files(): ans, headers = [], [] d = 'kitty' exclude = {'fontconfig.c', 'freetype.c', 'desktop.c'} if is_macos else {'core_text.m', 'cocoa_window.m', 'macos_process_info.c'} for x in sorted(os.listdir(d)): ext = os.path.splitext(x)[1] if ext in ('.c', '.m') and os.path.basename(x) not in exclude: ans.append(os.path.join('kitty', x)) elif ext == '.h': headers.append(os.path.join('kitty', x)) ans.append('kitty/parser_dump.c') return tuple(ans), tuple(headers) def compile_glfw(compilation_database): modules = 'cocoa' if is_macos else 'x11 wayland' for module in modules.split(): try: genv = glfw.init_env(env, pkg_config, at_least_version, test_compile, module) except SystemExit as err: if module != 'wayland': raise print(err, file=sys.stderr) print(error('Disabling building of wayland backend'), file=sys.stderr) continue sources = [os.path.join('glfw', x) for x in genv.sources] all_headers = [os.path.join('glfw', x) for x in genv.all_headers] if module == 'wayland': try: glfw.build_wayland_protocols(genv, Command, parallel_run, emphasis, newer, 'glfw') except SystemExit as err: print(err, file=sys.stderr) print(error('Disabling building of wayland backend'), file=sys.stderr) continue compile_c_extension( genv, 'kitty/glfw-' + module, compilation_database, sources, all_headers, desc_prefix='[{}] '.format(module)) def kittens_env(): kenv = env.copy() cflags = kenv.cflags cflags.append('-pthread') cflags.append('-Ikitty') pylib = get_python_flags(cflags) kenv.ldpaths += pylib return kenv def compile_kittens(compilation_database): kenv = kittens_env() def list_files(q): return sorted(glob.glob(q)) def files(kitten, output, extra_headers=(), extra_sources=(), filter_sources=None): sources = list(filter(filter_sources, list(extra_sources) + list_files(os.path.join('kittens', kitten, '*.c')))) headers = list_files(os.path.join('kittens', kitten, '*.h')) + list(extra_headers) return (sources, headers, 'kittens/{}/{}'.format(kitten, output)) for sources, all_headers, dest in ( files('unicode_input', 'unicode_names'), files('diff', 'diff_speedup'), files( 'choose', 'subseq_matcher', extra_headers=('kitty/charsets.h',), extra_sources=('kitty/charsets.c',), filter_sources=lambda x: 'windows_compat.c' not in x), ): compile_c_extension( kenv, dest, compilation_database, sources, all_headers + ['kitty/data-types.h']) def build(args, native_optimizations=True): global env env = init_env(args.debug, args.sanitize, native_optimizations, args.profile, args.extra_logging) compile_c_extension( kitty_env(), 'kitty/fast_data_types', args.compilation_database, *find_c_files() ) compile_glfw(args.compilation_database) compile_kittens(args.compilation_database) def safe_makedirs(path): os.makedirs(path, exist_ok=True) def build_launcher(args, launcher_dir='.', bundle_type='source'): cflags = '-Wall -Werror -fpie'.split() cppflags = [] libs = [] if args.profile or args.sanitize: if args.sanitize: cflags.append('-g3') cflags.extend(get_sanitize_args(env.cc, env.ccver)) libs += ['-lasan'] if env.cc == 'gcc' and not is_macos else [] else: cflags.append('-g') if args.profile: libs.append('-lprofiler') else: cflags.append('-O3') if bundle_type.endswith('-freeze'): cppflags.append('-DFOR_BUNDLE') cppflags.append('-DPYVER="{}"'.format(sysconfig.get_python_version())) cppflags.append('-DKITTY_LIB_DIR_NAME="{}"'.format(args.libdir_name)) elif bundle_type == 'source': cppflags.append('-DFROM_SOURCE') if bundle_type.startswith('macos-'): klp = '../Frameworks/kitty' elif bundle_type.startswith('linux-'): klp = '../{}/kitty'.format(args.libdir_name.strip('/')) elif bundle_type == 'source': klp = os.path.relpath('.', launcher_dir) else: raise SystemExit('Unknown bundle type: {}'.format(bundle_type)) cppflags.append('-DKITTY_LIB_PATH="{}"'.format(klp)) pylib = get_python_flags(cflags) cppflags += shlex.split(os.environ.get('CPPFLAGS', '')) cflags += shlex.split(os.environ.get('CFLAGS', '')) ldflags = shlex.split(os.environ.get('LDFLAGS', '')) if bundle_type == 'linux-freeze': ldflags += ['-Wl,-rpath,$ORIGIN/../lib'] os.makedirs(launcher_dir, exist_ok=True) dest = os.path.join(launcher_dir, 'kitty') src = 'launcher.c' cmd = [env.cc] + cppflags + cflags + [ src, '-o', dest] + ldflags + libs + pylib key = CompileKey('launcher.c', 'kitty') desc = 'Building {}...'.format(emphasis('launcher')) args.compilation_database.add_command(desc, cmd, partial(newer, dest, src), key=key, keyfile=src) args.compilation_database.build_all() # Packaging {{{ def copy_man_pages(ddir): mandir = os.path.join(ddir, 'share', 'man') safe_makedirs(mandir) with suppress(FileNotFoundError): shutil.rmtree(os.path.join(mandir, 'man1')) src = 'docs/_build/man' if not os.path.exists(src): raise SystemExit('''\ The kitty man page is missing. If you are building from git then run: make && make docs (needs the sphinx documentation system to be installed) ''') shutil.copytree(src, os.path.join(mandir, 'man1')) def copy_html_docs(ddir): htmldir = os.path.join(ddir, 'share', 'doc', appname, 'html') safe_makedirs(os.path.dirname(htmldir)) with suppress(FileNotFoundError): shutil.rmtree(htmldir) src = 'docs/_build/html' if not os.path.exists(src): raise SystemExit('''\ The kitty html docs are missing. If you are building from git then run: make && make docs (needs the sphinx documentation system to be installed) ''') shutil.copytree(src, htmldir) def compile_python(base_path): import compileall import py_compile try: num_workers = max(1, os.cpu_count()) except Exception: num_workers = 1 for root, dirs, files in os.walk(base_path): for f in files: if f.rpartition('.')[-1] in ('pyc', 'pyo'): os.remove(os.path.join(root, f)) for optimize in (0, 1, 2): kwargs = dict(ddir='', force=True, optimize=optimize, quiet=1, workers=num_workers) if hasattr(py_compile, 'PycInvalidationMode'): kwargs['invalidation_mode'] = py_compile.PycInvalidationMode.UNCHECKED_HASH compileall.compile_dir(base_path, **kwargs) def create_linux_bundle_gunk(ddir, libdir_name): if not os.path.exists('docs/_build/html'): run_tool(['make', 'docs']) copy_man_pages(ddir) copy_html_docs(ddir) icdir = os.path.join(ddir, 'share', 'icons', 'hicolor', '256x256', 'apps') safe_makedirs(icdir) shutil.copy2('logo/kitty.png', icdir) deskdir = os.path.join(ddir, 'share', 'applications') safe_makedirs(deskdir) with open(os.path.join(deskdir, 'kitty.desktop'), 'w') as f: f.write( '''\ [Desktop Entry] Version=1.0 Type=Application Name=kitty GenericName=Terminal emulator Comment=A fast, feature full, GPU based terminal emulator TryExec=kitty Exec=kitty Icon=kitty Categories=System;TerminalEmulator; ''' ) ddir = Path(ddir) in_src_launcher = ddir / (libdir_name + '/kitty/kitty/launcher/kitty') launcher = ddir / 'bin/kitty' if os.path.exists(in_src_launcher): os.remove(in_src_launcher) os.makedirs(os.path.dirname(in_src_launcher), exist_ok=True) os.symlink(os.path.relpath(launcher, os.path.dirname(in_src_launcher)), in_src_launcher) def macos_info_plist(): import plistlib VERSION = '.'.join(map(str, version)) pl = dict( CFBundleDevelopmentRegion='English', CFBundleDisplayName=appname, CFBundleName=appname, CFBundleIdentifier='net.kovidgoyal.' + appname, CFBundleVersion=VERSION, CFBundleShortVersionString=VERSION, CFBundlePackageType='APPL', CFBundleSignature='????', CFBundleExecutable=appname, LSMinimumSystemVersion='10.12.0', LSRequiresNativeExecution=True, NSAppleScriptEnabled=False, # Needed for dark mode in Mojave when linking against older SDKs NSRequiresAquaSystemAppearance='NO', NSHumanReadableCopyright=time.strftime( 'Copyright %Y, Kovid Goyal'), CFBundleGetInfoString='kitty, an OpenGL based terminal emulator https://sw.kovidgoyal.net/kitty/', CFBundleIconFile=appname + '.icns', NSHighResolutionCapable=True, NSSupportsAutomaticGraphicsSwitching=True, LSApplicationCategoryType='public.app-category.utilities', LSEnvironment={'KITTY_LAUNCHED_BY_LAUNCH_SERVICES': '1'}, NSServices=[ { 'NSMenuItem': {'default': 'New ' + appname + ' Tab Here'}, 'NSMessage': 'openTab', 'NSRequiredContext': {'NSTextContent': 'FilePath'}, 'NSSendTypes': ['NSFilenamesPboardType', 'public.plain-text'], }, { 'NSMenuItem': {'default': 'New ' + appname + ' Window Here'}, 'NSMessage': 'openOSWindow', 'NSRequiredContext': {'NSTextContent': 'FilePath'}, 'NSSendTypes': ['NSFilenamesPboardType', 'public.plain-text'], }, ], ) return plistlib.dumps(pl) def create_macos_app_icon(where='Resources'): logo_dir = os.path.abspath(os.path.join('logo', appname + '.iconset')) subprocess.check_call([ 'iconutil', '-c', 'icns', logo_dir, '-o', os.path.join(where, os.path.basename(logo_dir).partition('.')[0] + '.icns') ]) def create_minimal_macos_bundle(args, where): if os.path.exists(where): shutil.rmtree(where) bin_dir = os.path.join(where, 'kitty.app/Contents/MacOS') resources_dir = os.path.join(where, 'kitty.app/Contents/Resources') os.makedirs(resources_dir), os.makedirs(bin_dir) with open(os.path.join(where, 'kitty.app/Contents/Info.plist'), 'wb') as f: f.write(macos_info_plist()) build_launcher(args, bin_dir) os.symlink( os.path.join(os.path.relpath(bin_dir, where), appname), os.path.join(where, appname)) create_macos_app_icon(resources_dir) def create_macos_bundle_gunk(ddir): ddir = Path(ddir) os.mkdir(ddir / 'Contents') with open(ddir / 'Contents/Info.plist', 'wb') as fp: fp.write(macos_info_plist()) os.rename(ddir / 'share', ddir / 'Contents/Resources') os.rename(ddir / 'bin', ddir / 'Contents/MacOS') os.rename(ddir / 'lib', ddir / 'Contents/Frameworks') os.symlink('kitty', ddir / 'Contents/MacOS/kitty-deref-symlink') launcher = ddir / 'Contents/MacOS/kitty' in_src_launcher = ddir / 'Contents/Frameworks/kitty/kitty/launcher/kitty' if os.path.exists(in_src_launcher): os.remove(in_src_launcher) os.makedirs(os.path.dirname(in_src_launcher), exist_ok=True) os.symlink(os.path.relpath(launcher, os.path.dirname(in_src_launcher)), in_src_launcher) create_macos_app_icon(os.path.join(ddir, 'Contents', 'Resources')) def package(args, bundle_type): ddir = args.prefix if bundle_type == 'linux-freeze': args.libdir_name = 'lib' libdir = os.path.join(ddir, args.libdir_name.strip('/'), 'kitty') if os.path.exists(libdir): shutil.rmtree(libdir) launcher_dir = os.path.join(ddir, 'bin') safe_makedirs(launcher_dir) build_launcher(args, launcher_dir, bundle_type) os.makedirs(os.path.join(libdir, 'logo')) build_terminfo = runpy.run_path('build-terminfo', run_name='import_build') for x in (libdir, os.path.join(ddir, 'share')): odir = os.path.join(x, 'terminfo') safe_makedirs(odir) build_terminfo['compile_terminfo'](odir) shutil.copy2('__main__.py', libdir) shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) shutil.copy2('logo/kitty.png', os.path.join(libdir, 'logo')) shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) shutil.copy2('logo/beam-cursor@2x.png', os.path.join(libdir, 'logo')) def src_ignore(parent, entries): return [ x for x in entries if '.' in x and x.rpartition('.')[2] not in ('py', 'so', 'glsl') ] shutil.copytree('kitty', os.path.join(libdir, 'kitty'), ignore=src_ignore) shutil.copytree('kittens', os.path.join(libdir, 'kittens'), ignore=src_ignore) if args.update_check_interval != 24.0: with open(os.path.join(libdir, 'kitty/config_data.py'), 'r+', encoding='utf-8') as f: raw = f.read() nraw = raw.replace("update_check_interval', 24", "update_check_interval', {}".format(args.update_check_interval), 1) if nraw == raw: raise SystemExit('Failed to change the value of update_check_interval') f.seek(0), f.truncate(), f.write(nraw) compile_python(libdir) for root, dirs, files in os.walk(libdir): for f in files: path = os.path.join(root, f) os.chmod(path, 0o755 if f.endswith('.so') else 0o644) if not is_macos: create_linux_bundle_gunk(ddir, args.libdir_name) if bundle_type.startswith('macos-'): create_macos_bundle_gunk(ddir) # }}} def clean(): def safe_remove(*entries): for x in entries: if os.path.exists(x): if os.path.isdir(x): shutil.rmtree(x) else: os.unlink(x) safe_remove( 'build', 'compile_commands.json', 'link_commands.json', 'linux-package', 'kitty.app', 'asan-launcher', 'kitty-profile', 'kitty/launcher') exclude = ('.git',) for root, dirs, files in os.walk('.', topdown=True): dirs[:] = [d for d in dirs if d not in exclude] remove_dirs = {d for d in dirs if d == '__pycache__' or d.endswith('.dSYM')} [(shutil.rmtree(os.path.join(root, d)), dirs.remove(d)) for d in remove_dirs] for f in files: ext = f.rpartition('.')[-1] if ext in ('so', 'dylib', 'pyc', 'pyo'): os.unlink(os.path.join(root, f)) for x in glob.glob('glfw/wayland-*-protocol.[ch]'): os.unlink(x) def option_parser(): # {{{ p = argparse.ArgumentParser() p.add_argument( 'action', nargs='?', default='build', choices='build test linux-package kitty.app linux-freeze macos-freeze clean'.split(), help='Action to perform (default is build)' ) p.add_argument( '--debug', default=False, action='store_true', help='Build extension modules with debugging symbols' ) p.add_argument( '-v', '--verbose', default=0, action='count', help='Be verbose' ) p.add_argument( '--sanitize', default=False, action='store_true', help='Turn on sanitization to detect memory access errors and undefined behavior. This is a big performance hit.' ) p.add_argument( '--prefix', default='./linux-package', help='Where to create the linux package' ) p.add_argument( '--full', dest='incremental', default=True, action='store_false', help='Do a full build, even for unchanged files' ) p.add_argument( '--profile', default=False, action='store_true', help='Use the -pg compile flag to add profiling information' ) p.add_argument( '--for-freeze', default=False, action='store_true', help='Internal use' ) p.add_argument( '--libdir-name', default='lib', help='The name of the directory inside --prefix in which to store compiled files. Defaults to "lib"' ) p.add_argument( '--extra-logging', action='append', default=[], choices=('event-loop',), help='Turn on extra logging for debugging in this build. Can be specified multiple times, to turn' ' on different types of logging.' ) p.add_argument( '--update-check-interval', type=float, default=24, help='When building a package, the default value for the update_check_interval setting will' ' be set to this number. Use zero to disable update checking.' ) return p # }}} def main(): global verbose if sys.version_info < (3, 5): raise SystemExit('python >= 3.5 required') args = option_parser().parse_args() verbose = args.verbose > 0 args.prefix = os.path.abspath(args.prefix) os.chdir(base) if args.action == 'test': os.execlp( sys.executable, sys.executable, 'test.py' ) if args.action == 'clean': clean() return with CompilationDatabase(args.incremental) as cdb: args.compilation_database = cdb if args.action == 'build': build(args) launcher_dir = 'kitty/launcher' if is_macos: create_minimal_macos_bundle(args, launcher_dir) else: build_launcher(args, launcher_dir=launcher_dir) elif args.action == 'linux-package': build(args, native_optimizations=False) package(args, bundle_type='linux-package') elif args.action == 'linux-freeze': build(args, native_optimizations=False) package(args, bundle_type='linux-freeze') elif args.action == 'macos-freeze': build(args, native_optimizations=False) package(args, bundle_type='macos-freeze') elif args.action == 'kitty.app': args.prefix = 'kitty.app' if os.path.exists(args.prefix): shutil.rmtree(args.prefix) build(args) package(args, bundle_type='macos-package') print('kitty.app successfully built!') if __name__ == '__main__': main() kitty-0.15.0/terminfo/000077500000000000000000000000001356737523400146035ustar00rootroot00000000000000kitty-0.15.0/terminfo/78000077700000000000000000000000001356737523400151512xustar00rootroot00000000000000kitty-0.15.0/terminfo/kitty.terminfo000066400000000000000000000071571356737523400175260ustar00rootroot00000000000000xterm-kitty|KovIdTTY, Su, Tc, am, ccc, fullkbd, hs, km, mc5i, mir, msgr, npc, xenl, colors#256, cols#80, it#8, lines#24, pairs#32767, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, dsl=\E]2;\007, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, fsl=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS, initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, kDC=\E[3;2~, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B, kDN7=\E[1;7B, kEND=\E[1;2F, kEND3=\E[1;3F, kEND4=\E[1;4F, kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F, kHOM=\E[1;2H, kHOM3=\E[1;3H, kHOM4=\E[1;4H, kHOM5=\E[1;5H, kHOM6=\E[1;6H, kHOM7=\E[1;7H, kIC=\E[2;2~, kIC3=\E[2;3~, kIC4=\E[2;4~, kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, kLFT=\E[1;2D, kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D, kNXT=\E[6;2~, kNXT3=\E[6;3~, kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~, kNXT7=\E[6;7~, kPRV=\E[5;2~, kPRV3=\E[5;3~, kPRV4=\E[5;4~, kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~, kRIT=\E[1;2C, kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, kUP3=\E[1;3A, kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A, ka1=, ka3=, kbs=\177, kc1=, kc3=, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~, kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khlp=, khome=\EOH, kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, kund=, oc=\E]104\007, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l, rmso=\E[27m, rmul=\E[24m, rs1=\E]\E\\\Ec, sc=\E7, setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, setrgbb=\E[48:2:%p1%d:%p2%d:%p3%dm, setrgbf=\E[38:2:%p1%d:%p2%d:%p3%dm, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E]2;, vpa=\E[%i%p1%dd, kitty-0.15.0/terminfo/x/000077500000000000000000000000001356737523400150525ustar00rootroot00000000000000kitty-0.15.0/terminfo/x/xterm-kitty000066400000000000000000000061401356737523400172770ustar00rootroot00000000000000igxterm-kitty|KovIdTTYPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&*.ÿÿ9JLPWÿÿYfÿÿjnx|€ÿÿ†ÿÿŠÿÿ˜ÿÿÿÿ¢§¬±º¾ÅÿÿÎÓÙßÿÿñÿÿÿÿÿÿÿÿÿÿóÿÿ÷ÿÿÿÿÿÿùÿÿþÿÿÿÿÿÿÿÿ $*06:ÿÿ?ÿÿCHMQXÿÿ_ciÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoxŠ“œ¥®·ÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÿÿÿÿÿÐÓÞáãæ8ÿÿ;=ÿÿÿÿÿÿBCÿÿDEÿÿÿÿFÿÿ‡ÿÿÿÿ‹‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ÿÿÿÿÿÿ›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤ÿÿÿÿÿÿÿÿ«²¹ÿÿÿÿÀÿÿÇÿÿÿÿÿÿÎÿÿÿÿÿÿÿÿÿÿÕÛáèïöý %-5=DKRYaiqy‰‘™ §®µ½ÅÍÕÝåíõü !)19AIQX_fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkt{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿè' [%i%p1%d;%p2%dr[%i%p1%dG[%i%p1%d;%p2%dH [?25l[?12l[?25h[?12;25h]2;(0[?1049h[%p1%dX(B(B[?1049l[?5h$<100/>[?5l[3~OBOP[21~OQOROS[15~[17~[18~[19~[20~OH[2~OD[6~[5~OCOA[?1l[?1h[%p1%dP[%p1%dM[%p1%dB[%p1%d@[%p1%dS[%p1%dL[%p1%dD[%p1%dC[%p1%dT[%p1%dA]\c8[%i%p1%dd7 M%?%p9%t(0%e(B%;[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;mH ]2;++,,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~[?7h[?7lOF[3;2~[2;2~[6;2~[5;2~[23~[24~[15;2~[17;2~[18;2~[19;2~[20;2~[21;2~[23;2~[24;2~[15;5~[17;5~[18;5~[19;5~[20;5~[21;5~[23;5~[24;5~[15;6~[17;6~[18;6~[19;6~[20;6~[21;6~[23;6~[24;6~[15;3~[17;3~[18;3~[19;3~[20;3~[21;3~[23;3~[24;3~]104]4;%p1%d;rgb:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m6oÞ#*18?FMT[bipw~…Œ“𡍝¶½ÄËÒÙàçîõü &-4;BIPW^el†"'+05:?DJPV\bhntz€…Š”™Ÿ¥«±·½ÃÉÏÕÛáçíóùÿ $).6[3;3~[3;4~[3;5~[3;6~[3;7~[2;3~[2;4~[2;5~[2;6~[2;7~[6;3~[6;4~[6;5~[6;6~[6;7~[5;3~[5;4~[5;5~[5;6~[5;7~[48:2:%p1%d:%p2%d:%p3%dm[38:2:%p1%d:%p2%d:%p3%dmSuTcfullkbdkDC3kDC4kDC5kDC6kDC7kDNkDN3kDN4kDN5kDN6kDN7kEND3kEND4kEND5kEND6kEND7kHOM3kHOM4kHOM5kHOM6kHOM7kIC3kIC4kIC5kIC6kIC7kLFT3kLFT4kLFT5kLFT6kLFT7kNXT3kNXT4kNXT5kNXT6kNXT7kPRV3kPRV4kPRV5kPRV6kPRV7kRIT3kRIT4kRIT5kRIT6kRIT7kUPkUP3kUP4kUP5kUP6kUP7setrgbbsetrgbfkitty-0.15.0/test.py000077500000000000000000000053271356737523400143230ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2016, Kovid Goyal import unittest import os import sys import importlib base = os.path.dirname(os.path.abspath(__file__)) def init_env(): sys.path.insert(0, base) def itertests(suite): stack = [suite] while stack: suite = stack.pop() for test in suite: if isinstance(test, unittest.TestSuite): stack.append(test) continue if test.__class__.__name__ == 'ModuleImportFailure': raise Exception('Failed to import a test module: %s' % test) yield test def find_tests_in_dir(path, excludes=('main.py',)): package = os.path.relpath(path, base).replace(os.sep, '/').replace('/', '.') items = os.listdir(path) suits = [] for x in items: if x.endswith('.py') and x not in excludes: m = importlib.import_module(package + '.' + x.partition('.')[0]) suits.append(unittest.defaultTestLoader.loadTestsFromModule(m)) return unittest.TestSuite(suits) def filter_tests(suite, test_ok): ans = unittest.TestSuite() added = set() for test in itertests(suite): if test_ok(test) and test not in added: ans.addTest(test) added.add(test) return ans def filter_tests_by_name(suite, *names): names = {x if x.startswith('test_') else 'test_' + x for x in names} def q(test): return test._testMethodName in names return filter_tests(suite, q) def filter_tests_by_module(suite, *names): names = frozenset(names) def q(test): m = test.__class__.__module__.rpartition('.')[-1] return m in names return filter_tests(suite, q) def run_tests(): import argparse parser = argparse.ArgumentParser() parser.add_argument( 'name', nargs='*', default=[], help='The name of the test to run, for e.g. linebuf corresponds to test_linebuf. Can be specified multiple times') parser.add_argument('--verbosity', default=4, type=int, help='Test verbosity') args = parser.parse_args() tests = find_tests_in_dir(os.path.join(base, 'kitty_tests')) if args.name: tests = filter_tests_by_name(tests, *args.name) if not tests._tests: raise SystemExit('No test named %s found' % args.name) run_cli(tests, args.verbosity) def run_cli(suite, verbosity=4): r = unittest.TextTestRunner r.resultclass = unittest.TextTestResult init_env() runner = r(verbosity=verbosity) runner.tb_locals = True result = runner.run(suite) if not result.wasSuccessful(): raise SystemExit(1) def main(): run_tests() if __name__ == '__main__': main() kitty-0.15.0/update-on-ox000077500000000000000000000031441356737523400152300ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import glob import os import shlex import shutil import subprocess import sys import tempfile import atexit if False: dmg = sys.argv[-1] mp = tempfile.mkdtemp() atexit.register(os.rmdir, mp) subprocess.check_call('hdiutil attach {} -mountpoint {}'.format(dmg, mp).split()) try: os.chdir(mp) for app in glob.glob('*.app'): d = os.path.join('/Applications', app) if os.path.exists(d): shutil.rmtree(d) subprocess.check_call('ditto -v {} {}'.format(app, os.path.join('/Applications', app)).split()) finally: os.chdir('/') subprocess.check_call('hdiutil detach {}'.format(mp).split()) # EOF_REMOTE HOST = 'ox' base = os.path.dirname(os.path.abspath(__file__)) if True: sys.path.insert(0, base) from kitty.constants import str_version dmg = f'kitty-{str_version}.dmg' def run(what): ret = subprocess.run(shlex.split(what)) if ret.returncode != 0: raise SystemExit(ret.returncode) with open(__file__, 'rb') as f: script = f.read().decode('utf-8') script = script[:script.find('# EOF_REMOTE')].replace('if False:', 'if True:', 1) os.chdir(os.path.expanduser('~/work/build-kitty')) with tempfile.NamedTemporaryFile(prefix='install-dmg-', suffix='.py') as f: run('./osx kitty --debug-build') f.write(script.encode('utf-8')) f.flush() run(f'scp build/osx/dist/{dmg} {f.name} {HOST}:/tmp') run(f'ssh {HOST} python /tmp/{os.path.basename(f.name)} /tmp/{dmg}') kitty-0.15.0/update-on-ubuntu000077500000000000000000000031531356737523400161240ustar00rootroot00000000000000#!/usr/bin/env python3 # vim:fileencoding=utf-8 # License: GPL v3 Copyright: 2017, Kovid Goyal import os import shlex import shutil import subprocess import sys import tempfile from contextlib import suppress if False: tarball = sys.argv[-1] dest = os.path.expanduser('~/.local/kitty.app') shutil.rmtree(dest, ignore_errors=True) os.makedirs(dest) os.chdir(dest) dest = os.path.expanduser('~/.local/bin/kitty') with suppress(EnvironmentError): os.remove(dest) with suppress(EnvironmentError): os.makedirs(os.path.dirname(dest)) subprocess.check_call(['tar', 'xJf', tarball]) os.symlink(os.path.abspath('bin/kitty'), dest) print('kitty installed to ~/.local/kitty.app') # EOF_REMOTE HOST = 'ubuntu' base = os.path.dirname(os.path.abspath(__file__)) if True: sys.path.insert(0, base) from kitty.constants import str_version tarball = f'kitty-{str_version}-x86_64.txz' def run(what): ret = subprocess.run(shlex.split(what)) if ret.returncode != 0: raise SystemExit(ret.returncode) with open(__file__, 'rb') as f: script = f.read().decode('utf-8') script = script[:script.find('# EOF_REMOTE')].replace('if False:', 'if True:', 1) os.chdir(os.path.expanduser('~/work/build-kitty')) with tempfile.NamedTemporaryFile(prefix='install-tarball-', suffix='.py') as f: run('./linux 64 kitty --debug-build --compression-level=1') f.write(script.encode('utf-8')) f.flush() run(f'scp build/linux/64/sw/dist/{tarball} {f.name} {HOST}:/tmp') run(f'ssh {HOST} python /tmp/{os.path.basename(f.name)} /tmp/{tarball}')